<?php

$web = 'index.php';

if (in_array('phar', stream_get_wrappers()) && class_exists('Phar', 0)) {
Phar::interceptFileFuncs();
set_include_path('phar://' . __FILE__ . PATH_SEPARATOR . get_include_path());
Phar::webPhar(null, $web);
include 'phar://' . __FILE__ . '/' . Extract_Phar::START;
return;
}

if (@(isset($_SERVER['REQUEST_URI']) && isset($_SERVER['REQUEST_METHOD']) && ($_SERVER['REQUEST_METHOD'] == 'GET' || $_SERVER['REQUEST_METHOD'] == 'POST'))) {
Extract_Phar::go(true);
$mimes = array(
'phps' => 2,
'c' => 'text/plain',
'cc' => 'text/plain',
'cpp' => 'text/plain',
'c++' => 'text/plain',
'dtd' => 'text/plain',
'h' => 'text/plain',
'log' => 'text/plain',
'rng' => 'text/plain',
'txt' => 'text/plain',
'xsd' => 'text/plain',
'php' => 1,
'inc' => 1,
'avi' => 'video/avi',
'bmp' => 'image/bmp',
'css' => 'text/css',
'gif' => 'image/gif',
'htm' => 'text/html',
'html' => 'text/html',
'htmls' => 'text/html',
'ico' => 'image/x-ico',
'jpe' => 'image/jpeg',
'jpg' => 'image/jpeg',
'jpeg' => 'image/jpeg',
'js' => 'application/x-javascript',
'midi' => 'audio/midi',
'mid' => 'audio/midi',
'mod' => 'audio/mod',
'mov' => 'movie/quicktime',
'mp3' => 'audio/mp3',
'mpg' => 'video/mpeg',
'mpeg' => 'video/mpeg',
'pdf' => 'application/pdf',
'png' => 'image/png',
'swf' => 'application/shockwave-flash',
'tif' => 'image/tiff',
'tiff' => 'image/tiff',
'wav' => 'audio/wav',
'xbm' => 'image/xbm',
'xml' => 'text/xml',
);

header("Cache-Control: no-cache, must-revalidate");
header("Pragma: no-cache");

$basename = basename(__FILE__);
if (!strpos($_SERVER['REQUEST_URI'], $basename)) {
chdir(Extract_Phar::$temp);
include $web;
return;
}
$pt = substr($_SERVER['REQUEST_URI'], strpos($_SERVER['REQUEST_URI'], $basename) + strlen($basename));
if (!$pt || $pt == '/') {
$pt = $web;
header('HTTP/1.1 301 Moved Permanently');
header('Location: ' . $_SERVER['REQUEST_URI'] . '/' . $pt);
exit;
}
$a = realpath(Extract_Phar::$temp . DIRECTORY_SEPARATOR . $pt);
if (!$a || strlen(dirname($a)) < strlen(Extract_Phar::$temp)) {
header('HTTP/1.0 404 Not Found');
echo "<html>\n <head>\n  <title>File Not Found<title>\n </head>\n <body>\n  <h1>404 - File Not Found</h1>\n </body>\n</html>";
exit;
}
$b = pathinfo($a);
if (!isset($b['extension'])) {
header('Content-Type: text/plain');
header('Content-Length: ' . filesize($a));
readfile($a);
exit;
}
if (isset($mimes[$b['extension']])) {
if ($mimes[$b['extension']] === 1) {
include $a;
exit;
}
if ($mimes[$b['extension']] === 2) {
highlight_file($a);
exit;
}
header('Content-Type: ' .$mimes[$b['extension']]);
header('Content-Length: ' . filesize($a));
readfile($a);
exit;
}
}

class Extract_Phar
{
static $temp;
static $origdir;
const GZ = 0x1000;
const BZ2 = 0x2000;
const MASK = 0x3000;
const START = './bin/audit-server.php';
const LEN = 6656;

static function go($return = false)
{
$fp = fopen(__FILE__, 'rb');
fseek($fp, self::LEN);
$L = unpack('V', $a = fread($fp, 4));
$m = '';

do {
$read = 8192;
if ($L[1] - strlen($m) < 8192) {
$read = $L[1] - strlen($m);
}
$last = fread($fp, $read);
$m .= $last;
} while (strlen($last) && strlen($m) < $L[1]);

if (strlen($m) < $L[1]) {
die('ERROR: manifest length read was "' .
strlen($m) .'" should be "' .
$L[1] . '"');
}

$info = self::_unpack($m);
$f = $info['c'];

if ($f & self::GZ) {
if (!function_exists('gzinflate')) {
die('Error: zlib extension is not enabled -' .
' gzinflate() function needed for zlib-compressed .phars');
}
}

if ($f & self::BZ2) {
if (!function_exists('bzdecompress')) {
die('Error: bzip2 extension is not enabled -' .
' bzdecompress() function needed for bz2-compressed .phars');
}
}

$temp = self::tmpdir();

if (!$temp || !is_writable($temp)) {
$sessionpath = session_save_path();
if (strpos ($sessionpath, ";") !== false)
$sessionpath = substr ($sessionpath, strpos ($sessionpath, ";")+1);
if (!file_exists($sessionpath) || !is_dir($sessionpath)) {
die('Could not locate temporary directory to extract phar');
}
$temp = $sessionpath;
}

$temp .= '/pharextract/'.basename(__FILE__, '.phar');
self::$temp = $temp;
self::$origdir = getcwd();
@mkdir($temp, 0777, true);
$temp = realpath($temp);

if (!file_exists($temp . DIRECTORY_SEPARATOR . md5_file(__FILE__))) {
self::_removeTmpFiles($temp, getcwd());
@mkdir($temp, 0777, true);
@file_put_contents($temp . '/' . md5_file(__FILE__), '');

foreach ($info['m'] as $path => $file) {
$a = !file_exists(dirname($temp . '/' . $path));
@mkdir(dirname($temp . '/' . $path), 0777, true);
clearstatcache();

if ($path[strlen($path) - 1] == '/') {
@mkdir($temp . '/' . $path, 0777);
} else {
file_put_contents($temp . '/' . $path, self::extractFile($path, $file, $fp));
@chmod($temp . '/' . $path, 0666);
}
}
}

chdir($temp);

if (!$return) {
include self::START;
}
}

static function tmpdir()
{
if (strpos(PHP_OS, 'WIN') !== false) {
if ($var = getenv('TMP') ? getenv('TMP') : getenv('TEMP')) {
return $var;
}
if (is_dir('/temp') || mkdir('/temp')) {
return realpath('/temp');
}
return false;
}
if ($var = getenv('TMPDIR')) {
return $var;
}
return realpath('/tmp');
}

static function _unpack($m)
{
$info = unpack('V', substr($m, 0, 4));
 $l = unpack('V', substr($m, 10, 4));
$m = substr($m, 14 + $l[1]);
$s = unpack('V', substr($m, 0, 4));
$o = 0;
$start = 4 + $s[1];
$ret['c'] = 0;

for ($i = 0; $i < $info[1]; $i++) {
 $len = unpack('V', substr($m, $start, 4));
$start += 4;
 $savepath = substr($m, $start, $len[1]);
$start += $len[1];
   $ret['m'][$savepath] = array_values(unpack('Va/Vb/Vc/Vd/Ve/Vf', substr($m, $start, 24)));
$ret['m'][$savepath][3] = sprintf('%u', $ret['m'][$savepath][3]
& 0xffffffff);
$ret['m'][$savepath][7] = $o;
$o += $ret['m'][$savepath][2];
$start += 24 + $ret['m'][$savepath][5];
$ret['c'] |= $ret['m'][$savepath][4] & self::MASK;
}
return $ret;
}

static function extractFile($path, $entry, $fp)
{
$data = '';
$c = $entry[2];

while ($c) {
if ($c < 8192) {
$data .= @fread($fp, $c);
$c = 0;
} else {
$c -= 8192;
$data .= @fread($fp, 8192);
}
}

if ($entry[4] & self::GZ) {
$data = gzinflate($data);
} elseif ($entry[4] & self::BZ2) {
$data = bzdecompress($data);
}

if (strlen($data) != $entry[0]) {
die("Invalid internal .phar file (size error " . strlen($data) . " != " .
$stat[7] . ")");
}

if ($entry[3] != sprintf("%u", crc32($data) & 0xffffffff)) {
die("Invalid internal .phar file (checksum error)");
}

return $data;
}

static function _removeTmpFiles($temp, $origdir)
{
chdir($temp);

foreach (glob('*') as $f) {
if (file_exists($f)) {
is_dir($f) ? @rmdir($f) : @unlink($f);
if (file_exists($f) && is_dir($f)) {
self::_removeTmpFiles($f, getcwd());
}
}
}

@rmdir($temp);
clearstatcache();
chdir($origdir);
}
}

Extract_Phar::go();
__HALT_COMPILER(); ?>
          audit-server.phar       bin/audit-server.php   h   8)      -   vendor/sabberworm/php-css-parser/CHANGELOG.md`8  h`8  -iR      (   vendor/sabberworm/php-css-parser/LICENSEP  hP  eפ      *   vendor/sabberworm/php-css-parser/README.mdQ  hQ  Kd      .   vendor/sabberworm/php-css-parser/composer.json  h  a      3   vendor/sabberworm/php-css-parser/src/CSSElement.php
  h
  Fڤ      @   vendor/sabberworm/php-css-parser/src/CSSList/AtRuleBlockList.php9  h9  +      =   vendor/sabberworm/php-css-parser/src/CSSList/CSSBlockList.php  h        8   vendor/sabberworm/php-css-parser/src/CSSList/CSSList.php?  h?  \Ik_      9   vendor/sabberworm/php-css-parser/src/CSSList/Document.phpZ  hZ  [$_      9   vendor/sabberworm/php-css-parser/src/CSSList/KeyFrame.phpM  hM  yY^      8   vendor/sabberworm/php-css-parser/src/Comment/Comment.php  h        <   vendor/sabberworm/php-css-parser/src/Comment/Commentable.php  h  C!G      5   vendor/sabberworm/php-css-parser/src/OutputFormat.php,  h,  9ߤ      8   vendor/sabberworm/php-css-parser/src/OutputFormatter.php;  h;  'P)j      /   vendor/sabberworm/php-css-parser/src/Parser.php0  h0  2.1      7   vendor/sabberworm/php-css-parser/src/Parsing/Anchor.php  h  mz      @   vendor/sabberworm/php-css-parser/src/Parsing/OutputException.phpf  hf  jyB      <   vendor/sabberworm/php-css-parser/src/Parsing/ParserState.phpi8  hi8        @   vendor/sabberworm/php-css-parser/src/Parsing/SourceException.php  h  oj      G   vendor/sabberworm/php-css-parser/src/Parsing/UnexpectedEOFException.php  h  qޤ      I   vendor/sabberworm/php-css-parser/src/Parsing/UnexpectedTokenException.php  h  yW'      :   vendor/sabberworm/php-css-parser/src/Position/Position.php  h  P*      >   vendor/sabberworm/php-css-parser/src/Position/Positionable.php  h  F>      8   vendor/sabberworm/php-css-parser/src/Property/AtRule.phpi  hi  ry      >   vendor/sabberworm/php-css-parser/src/Property/CSSNamespace.phpO  hO  G{eĤ      9   vendor/sabberworm/php-css-parser/src/Property/Charset.php
  h
  )mu      8   vendor/sabberworm/php-css-parser/src/Property/Import.php
  h
  \ -      B   vendor/sabberworm/php-css-parser/src/Property/KeyframeSelector.php  h  N      :   vendor/sabberworm/php-css-parser/src/Property/Selector.phpn  hn  W?`Z      3   vendor/sabberworm/php-css-parser/src/Renderable.php  h  FȤ      2   vendor/sabberworm/php-css-parser/src/Rule/Rule.phpm)  hm)  kƤ      :   vendor/sabberworm/php-css-parser/src/RuleSet/AtRuleSet.php  h  l`&      A   vendor/sabberworm/php-css-parser/src/RuleSet/DeclarationBlock.phpAz  hAz  3c      8   vendor/sabberworm/php-css-parser/src/RuleSet/RuleSet.php`/  h`/  L      1   vendor/sabberworm/php-css-parser/src/Settings.phpQ
  hQ
  .      :   vendor/sabberworm/php-css-parser/src/Value/CSSFunction.phpZ  hZ  G      8   vendor/sabberworm/php-css-parser/src/Value/CSSString.php  h  (      ;   vendor/sabberworm/php-css-parser/src/Value/CalcFunction.php/  h/  L󮶤      @   vendor/sabberworm/php-css-parser/src/Value/CalcRuleValueList.php  h  W      4   vendor/sabberworm/php-css-parser/src/Value/Color.php  h  x~      7   vendor/sabberworm/php-css-parser/src/Value/LineName.php  h  e0Ф      =   vendor/sabberworm/php-css-parser/src/Value/PrimitiveValue.php   h   s3      <   vendor/sabberworm/php-css-parser/src/Value/RuleValueList.php,  h,  (:      3   vendor/sabberworm/php-css-parser/src/Value/Size.phpt  ht   \      2   vendor/sabberworm/php-css-parser/src/Value/URL.php9	  h9	  z      4   vendor/sabberworm/php-css-parser/src/Value/Value.php  h  K]      8   vendor/sabberworm/php-css-parser/src/Value/ValueList.php
  h
  IC          vendor/composer/installed.jsonȎ  hȎ  -0         vendor/composer/installed.phpy  hy  I      %   vendor/composer/InstalledVersions.phpC  hC  <nw      '   vendor/composer/autoload_namespaces.php   h   /t      !   vendor/composer/autoload_psr4.php  h  1Sw      %   vendor/composer/autoload_classmap.php   h   c{w      "   vendor/composer/autoload_files.phpM  hM  rv      #   vendor/composer/autoload_static.php  h  p&      "   vendor/composer/platform_check.php  h  -      !   vendor/composer/autoload_real.php  h           vendor/composer/ClassLoader.php?  h?  2@u         vendor/composer/LICENSE.  h.             vendor/phenx/php-svg-lib/LICENSE  h  S      "   vendor/phenx/php-svg-lib/README.md  h  ¤      &   vendor/phenx/php-svg-lib/composer.json  h  ^TԤ      .   vendor/phenx/php-svg-lib/src/Svg/CssLength.php  h  \sK      1   vendor/phenx/php-svg-lib/src/Svg/DefaultStyle.php  h  P      -   vendor/phenx/php-svg-lib/src/Svg/Document.phpA*  hA*  ,       2   vendor/phenx/php-svg-lib/src/Svg/Gradient/Stop.php8  h8  M(      *   vendor/phenx/php-svg-lib/src/Svg/Style.php"K  h"K  _      1   vendor/phenx/php-svg-lib/src/Svg/Surface/CPdf.phpzT hzT qV      8   vendor/phenx/php-svg-lib/src/Svg/Surface/SurfaceCpdf.php5  h5  o      =   vendor/phenx/php-svg-lib/src/Svg/Surface/SurfaceInterface.phpx  hx  L      :   vendor/phenx/php-svg-lib/src/Svg/Surface/SurfacePDFLib.php-  h-  %̤      4   vendor/phenx/php-svg-lib/src/Svg/Tag/AbstractTag.phpT'  hT'  Hw      /   vendor/phenx/php-svg-lib/src/Svg/Tag/Anchor.php  h  z      /   vendor/phenx/php-svg-lib/src/Svg/Tag/Circle.php  h  im      1   vendor/phenx/php-svg-lib/src/Svg/Tag/ClipPath.php  h  3:      0   vendor/phenx/php-svg-lib/src/Svg/Tag/Ellipse.php|  h|  v      .   vendor/phenx/php-svg-lib/src/Svg/Tag/Group.php  h  *T      .   vendor/phenx/php-svg-lib/src/Svg/Tag/Image.php@  h@  {UΤ      -   vendor/phenx/php-svg-lib/src/Svg/Tag/Line.phpy  hy  e˺      7   vendor/phenx/php-svg-lib/src/Svg/Tag/LinearGradient.php	  h	  g>      -   vendor/phenx/php-svg-lib/src/Svg/Tag/Path.phpM  hM  {      0   vendor/phenx/php-svg-lib/src/Svg/Tag/Polygon.php  h  V      1   vendor/phenx/php-svg-lib/src/Svg/Tag/Polyline.php  h  maQ      7   vendor/phenx/php-svg-lib/src/Svg/Tag/RadialGradient.phpD  hD  ˮ`      -   vendor/phenx/php-svg-lib/src/Svg/Tag/Rect.phpX  hX  ~襤      .   vendor/phenx/php-svg-lib/src/Svg/Tag/Shape.php#  h#  R      -   vendor/phenx/php-svg-lib/src/Svg/Tag/Stop.php:  h:  <      1   vendor/phenx/php-svg-lib/src/Svg/Tag/StyleTag.php  h  =1c      /   vendor/phenx/php-svg-lib/src/Svg/Tag/Symbol.php  h  y!      -   vendor/phenx/php-svg-lib/src/Svg/Tag/Text.php  h  㴵      /   vendor/phenx/php-svg-lib/src/Svg/Tag/UseTag.php  h  6/      !   vendor/phenx/php-font-lib/LICENSE*_  h*_  1f$ܤ      #   vendor/phenx/php-font-lib/README.md8  h8  6{h$      '   vendor/phenx/php-font-lib/composer.json  h  7      :   vendor/phenx/php-font-lib/maps/adobe-standard-encoding.map  h  #zԤ      )   vendor/phenx/php-font-lib/maps/cp1250.map  h  7uꄤ      )   vendor/phenx/php-font-lib/maps/cp1251.map  h  RXN      )   vendor/phenx/php-font-lib/maps/cp1252.map  h   6r      )   vendor/phenx/php-font-lib/maps/cp1253.map  h  lY      )   vendor/phenx/php-font-lib/maps/cp1254.map  h  G-      )   vendor/phenx/php-font-lib/maps/cp1255.map  h  nx>Ϥ      )   vendor/phenx/php-font-lib/maps/cp1257.mapF  hF  \      )   vendor/phenx/php-font-lib/maps/cp1258.map  h  .Έ      (   vendor/phenx/php-font-lib/maps/cp874.map  h  )      -   vendor/phenx/php-font-lib/maps/iso-8859-1.map  h  	z      .   vendor/phenx/php-font-lib/maps/iso-8859-11.mapI  hI  %R      .   vendor/phenx/php-font-lib/maps/iso-8859-15.map  h  F      .   vendor/phenx/php-font-lib/maps/iso-8859-16.map  h  8F      -   vendor/phenx/php-font-lib/maps/iso-8859-2.map  h  ]_      -   vendor/phenx/php-font-lib/maps/iso-8859-4.map  h        -   vendor/phenx/php-font-lib/maps/iso-8859-5.mapo  ho  ?Ť      -   vendor/phenx/php-font-lib/maps/iso-8859-7.mapH  hH  |      -   vendor/phenx/php-font-lib/maps/iso-8859-9.map  h  QdJ      )   vendor/phenx/php-font-lib/maps/koi8-r.map  h  cQ7      )   vendor/phenx/php-font-lib/maps/koi8-u.map  h  7[      :   vendor/phenx/php-font-lib/src/FontLib/AdobeFontMetrics.php  h  -      6   vendor/phenx/php-font-lib/src/FontLib/BinaryStream.phpO'  hO'  IY      2   vendor/phenx/php-font-lib/src/FontLib/EOT/File.php9  h9  2w      4   vendor/phenx/php-font-lib/src/FontLib/EOT/Header.php  h   {ʤ      5   vendor/phenx/php-font-lib/src/FontLib/EncodingMap.phpD  hD        I   vendor/phenx/php-font-lib/src/FontLib/Exception/FontNotFoundException.php   h   Su      .   vendor/phenx/php-font-lib/src/FontLib/Font.php  h  `c      7   vendor/phenx/php-font-lib/src/FontLib/Glyph/Outline.php  h  Q-X      @   vendor/phenx/php-font-lib/src/FontLib/Glyph/OutlineComponent.php  h  5"      @   vendor/phenx/php-font-lib/src/FontLib/Glyph/OutlineComposite.phpP  hP  Y*      =   vendor/phenx/php-font-lib/src/FontLib/Glyph/OutlineSimple.php   h   m      0   vendor/phenx/php-font-lib/src/FontLib/Header.php  h  q      7   vendor/phenx/php-font-lib/src/FontLib/OpenType/File.php  h  -8      F   vendor/phenx/php-font-lib/src/FontLib/OpenType/TableDirectoryEntry.php  h  (	      >   vendor/phenx/php-font-lib/src/FontLib/Table/DirectoryEntry.php	  h	  Hf&      5   vendor/phenx/php-font-lib/src/FontLib/Table/Table.php  h  ߡ      9   vendor/phenx/php-font-lib/src/FontLib/Table/Type/cmap.php--  h--  )      8   vendor/phenx/php-font-lib/src/FontLib/Table/Type/cvt.php  h  :V      9   vendor/phenx/php-font-lib/src/FontLib/Table/Type/fpgm.php  h  lȤ      9   vendor/phenx/php-font-lib/src/FontLib/Table/Type/glyf.phpy  hy  9      9   vendor/phenx/php-font-lib/src/FontLib/Table/Type/head.php  h  Lr      9   vendor/phenx/php-font-lib/src/FontLib/Table/Type/hhea.php  h  `B      9   vendor/phenx/php-font-lib/src/FontLib/Table/Type/hmtx.php  h  L)      9   vendor/phenx/php-font-lib/src/FontLib/Table/Type/kern.php?  h?  >Xr      9   vendor/phenx/php-font-lib/src/FontLib/Table/Type/loca.php  h  ^A      9   vendor/phenx/php-font-lib/src/FontLib/Table/Type/maxp.php  h  ;f      9   vendor/phenx/php-font-lib/src/FontLib/Table/Type/name.phpY  hY  
q      ?   vendor/phenx/php-font-lib/src/FontLib/Table/Type/nameRecord.php  h  >M      8   vendor/phenx/php-font-lib/src/FontLib/Table/Type/os2.php'  h'  fФ      9   vendor/phenx/php-font-lib/src/FontLib/Table/Type/post.php9  h9  K      9   vendor/phenx/php-font-lib/src/FontLib/Table/Type/prep.php  h  P|      =   vendor/phenx/php-font-lib/src/FontLib/TrueType/Collection.php  h  DǬ      7   vendor/phenx/php-font-lib/src/FontLib/TrueType/File.php=  h=  lL      9   vendor/phenx/php-font-lib/src/FontLib/TrueType/Header.php  h  n/      F   vendor/phenx/php-font-lib/src/FontLib/TrueType/TableDirectoryEntry.php  h  h      3   vendor/phenx/php-font-lib/src/FontLib/WOFF/File.php  h  )h      5   vendor/phenx/php-font-lib/src/FontLib/WOFF/Header.phpi  hi  QC៤      B   vendor/phenx/php-font-lib/src/FontLib/WOFF/TableDirectoryEntry.php  h  LU          vendor/masterminds/html5/CREDITS  h  ts      $   vendor/masterminds/html5/LICENSE.txt  h  
      "   vendor/masterminds/html5/README.md}&  h}&  Τ      #   vendor/masterminds/html5/RELEASE.md  h        %   vendor/masterminds/html5/UPGRADING.md  h  )      )   vendor/masterminds/html5/bin/entities.php~  h~  H      &   vendor/masterminds/html5/composer.json  h  }      &   vendor/masterminds/html5/src/HTML5.phpD!  hD!  9L      /   vendor/masterminds/html5/src/HTML5/Elements.phpAP  hAP  aq      /   vendor/masterminds/html5/src/HTML5/Entities.php  h  ȍRx      0   vendor/masterminds/html5/src/HTML5/Exception.php   h   e      ;   vendor/masterminds/html5/src/HTML5/InstructionProcessor.php  h  Pkɤ      @   vendor/masterminds/html5/src/HTML5/Parser/CharacterReference.php  h  *U      <   vendor/masterminds/html5/src/HTML5/Parser/DOMTreeBuilder.php%[  h%[  !)      :   vendor/masterminds/html5/src/HTML5/Parser/EventHandler.php\  h\  	3sg      =   vendor/masterminds/html5/src/HTML5/Parser/FileInputStream.php  h  w[      9   vendor/masterminds/html5/src/HTML5/Parser/InputStream.php	  h	         8   vendor/masterminds/html5/src/HTML5/Parser/ParseError.php   h   :X      3   vendor/masterminds/html5/src/HTML5/Parser/README.md  h  %Ʉ      5   vendor/masterminds/html5/src/HTML5/Parser/Scanner.php,  h,        ?   vendor/masterminds/html5/src/HTML5/Parser/StringInputStream.php%  h%  rݤ      7   vendor/masterminds/html5/src/HTML5/Parser/Tokenizer.php  h  g	O      ?   vendor/masterminds/html5/src/HTML5/Parser/TreeBuildingRules.php  h  ׭?      7   vendor/masterminds/html5/src/HTML5/Parser/UTF8Utils.phpl  hl  0*r      ?   vendor/masterminds/html5/src/HTML5/Serializer/HTML5Entities.php  h  	n      =   vendor/masterminds/html5/src/HTML5/Serializer/OutputRules.phpA  hA  פ      7   vendor/masterminds/html5/src/HTML5/Serializer/README.md  h  e%դ      @   vendor/masterminds/html5/src/HTML5/Serializer/RulesInterface.php7
  h7
  {      ;   vendor/masterminds/html5/src/HTML5/Serializer/Traverser.php  h  lE         vendor/dompdf/dompdf/AUTHORS.md  h  -j      !   vendor/dompdf/dompdf/LICENSE.LGPL _  h _  [         vendor/dompdf/dompdf/README.md  h  v         vendor/dompdf/dompdf/VERSION   h   P3      "   vendor/dompdf/dompdf/composer.json  h  ~%      !   vendor/dompdf/dompdf/lib/Cpdf.php_ h_ ɗ      /   vendor/dompdf/dompdf/lib/fonts/Courier-Bold.afm=  h=  1      6   vendor/dompdf/dompdf/lib/fonts/Courier-BoldOblique.afm>  h>  Ժh      2   vendor/dompdf/dompdf/lib/fonts/Courier-Oblique.afmB>  hB>  |X      *   vendor/dompdf/dompdf/lib/fonts/Courier.afm=  h=  
      2   vendor/dompdf/dompdf/lib/fonts/DejaVuSans-Bold.ttf
 h
 	,:      2   vendor/dompdf/dompdf/lib/fonts/DejaVuSans-Bold.ufmA hA 'Ť      9   vendor/dompdf/dompdf/lib/fonts/DejaVuSans-BoldOblique.ttf	 h	 B:m      9   vendor/dompdf/dompdf/lib/fonts/DejaVuSans-BoldOblique.ufm2 h2 u      5   vendor/dompdf/dompdf/lib/fonts/DejaVuSans-Oblique.ttf	 h	 IXg      5   vendor/dompdf/dompdf/lib/fonts/DejaVuSans-Oblique.ufm h ⍤      -   vendor/dompdf/dompdf/lib/fonts/DejaVuSans.ttfT hT U|      -   vendor/dompdf/dompdf/lib/fonts/DejaVuSans.ufmwu hwu       6   vendor/dompdf/dompdf/lib/fonts/DejaVuSansMono-Bold.ttf h ǟ      6   vendor/dompdf/dompdf/lib/fonts/DejaVuSansMono-Bold.ufm h Tפ      =   vendor/dompdf/dompdf/lib/fonts/DejaVuSansMono-BoldOblique.ttf h ʞ      =   vendor/dompdf/dompdf/lib/fonts/DejaVuSansMono-BoldOblique.ufmL hL !$      9   vendor/dompdf/dompdf/lib/fonts/DejaVuSansMono-Oblique.ttf h !g      9   vendor/dompdf/dompdf/lib/fonts/DejaVuSansMono-Oblique.ufm; h; M'ꂤ      1   vendor/dompdf/dompdf/lib/fonts/DejaVuSansMono.ttf2 h2 H      1   vendor/dompdf/dompdf/lib/fonts/DejaVuSansMono.ufm h ߤ      3   vendor/dompdf/dompdf/lib/fonts/DejaVuSerif-Bold.ttfn hn BN      3   vendor/dompdf/dompdf/lib/fonts/DejaVuSerif-Bold.ufm h 7      9   vendor/dompdf/dompdf/lib/fonts/DejaVuSerif-BoldItalic.ttfDM hDM        9   vendor/dompdf/dompdf/lib/fonts/DejaVuSerif-BoldItalic.ufm	 h	 s%      5   vendor/dompdf/dompdf/lib/fonts/DejaVuSerif-Italic.ttfG hG Ι      5   vendor/dompdf/dompdf/lib/fonts/DejaVuSerif-Italic.ufmO hO 77      .   vendor/dompdf/dompdf/lib/fonts/DejaVuSerif.ttf h @)Y      .   vendor/dompdf/dompdf/lib/fonts/DejaVuSerif.ufm h w      1   vendor/dompdf/dompdf/lib/fonts/Helvetica-Bold.afm4 h4 @ߤ      8   vendor/dompdf/dompdf/lib/fonts/Helvetica-BoldOblique.afm h 4pH      4   vendor/dompdf/dompdf/lib/fonts/Helvetica-Oblique.afm/ h/ `      ,   vendor/dompdf/dompdf/lib/fonts/Helvetica.afm. h.       )   vendor/dompdf/dompdf/lib/fonts/Symbol.afm&  h&  n%Ǥ      -   vendor/dompdf/dompdf/lib/fonts/Times-Bold.afm h @      3   vendor/dompdf/dompdf/lib/fonts/Times-BoldItalic.afm  h  މݤ      /   vendor/dompdf/dompdf/lib/fonts/Times-Italic.afm h (      .   vendor/dompdf/dompdf/lib/fonts/Times-Roman.afm2  h2  h      /   vendor/dompdf/dompdf/lib/fonts/ZapfDingbats.afm&  h&  5 ɤ      8   vendor/dompdf/dompdf/lib/fonts/installed-fonts.dist.json  h        ,   vendor/dompdf/dompdf/lib/fonts/mustRead.html  h  n      -   vendor/dompdf/dompdf/lib/res/broken_image.pngj  hj  ƐԤ      -   vendor/dompdf/dompdf/lib/res/broken_image.svgE  hE  C      %   vendor/dompdf/dompdf/lib/res/html.css
  h
  \      )   vendor/dompdf/dompdf/src/Adapter/CPDF.phpk  hk  T~      '   vendor/dompdf/dompdf/src/Adapter/GD.phpd  hd  r      +   vendor/dompdf/dompdf/src/Adapter/PDFLib.phpʧ  hʧ        #   vendor/dompdf/dompdf/src/Canvas.php8  h8  ܦ      *   vendor/dompdf/dompdf/src/CanvasFactory.php  h  סJ      $   vendor/dompdf/dompdf/src/Cellmap.phpn  hn  U>c      4   vendor/dompdf/dompdf/src/Css/AttributeTranslator.phpHE  hHE  L:n      &   vendor/dompdf/dompdf/src/Css/Color.php)  h)  Y9      &   vendor/dompdf/dompdf/src/Css/Style.php h u&      +   vendor/dompdf/dompdf/src/Css/Stylesheet.php  h  @O֤      #   vendor/dompdf/dompdf/src/Dompdf.php  h        &   vendor/dompdf/dompdf/src/Exception.php'  h'  }QB      5   vendor/dompdf/dompdf/src/Exception/ImageException.php;  h;  5wj      (   vendor/dompdf/dompdf/src/FontMetrics.phpF  hF  "pM      "   vendor/dompdf/dompdf/src/Frame.phpx  hx  dn      *   vendor/dompdf/dompdf/src/Frame/Factory.php-   h-   ړ      4   vendor/dompdf/dompdf/src/Frame/FrameListIterator.php  h  _b      ,   vendor/dompdf/dompdf/src/Frame/FrameTree.php,#  h,#  Wn      4   vendor/dompdf/dompdf/src/Frame/FrameTreeIterator.php  h        B   vendor/dompdf/dompdf/src/FrameDecorator/AbstractFrameDecorator.phpX  hX   a      1   vendor/dompdf/dompdf/src/FrameDecorator/Block.php  h  k3A      1   vendor/dompdf/dompdf/src/FrameDecorator/Image.php  h  P      2   vendor/dompdf/dompdf/src/FrameDecorator/Inline.php  h  ؤ      6   vendor/dompdf/dompdf/src/FrameDecorator/ListBullet.php  h  iW      ;   vendor/dompdf/dompdf/src/FrameDecorator/ListBulletImage.php
  h
  ڤ      >   vendor/dompdf/dompdf/src/FrameDecorator/NullFrameDecorator.php  h  A      0   vendor/dompdf/dompdf/src/FrameDecorator/Page.php$a  h$a  \      1   vendor/dompdf/dompdf/src/FrameDecorator/Table.phpR'  hR'  WR      5   vendor/dompdf/dompdf/src/FrameDecorator/TableCell.php7  h7  o      4   vendor/dompdf/dompdf/src/FrameDecorator/TableRow.php;  h;        9   vendor/dompdf/dompdf/src/FrameDecorator/TableRowGroup.php  h  F      0   vendor/dompdf/dompdf/src/FrameDecorator/Text.php  h  Q\      @   vendor/dompdf/dompdf/src/FrameReflower/AbstractFrameReflower.phpX  hX  m      0   vendor/dompdf/dompdf/src/FrameReflower/Block.php  h  Y      0   vendor/dompdf/dompdf/src/FrameReflower/Image.php$  h$  ʼ      1   vendor/dompdf/dompdf/src/FrameReflower/Inline.php  h  AѤ      5   vendor/dompdf/dompdf/src/FrameReflower/ListBullet.php  h        <   vendor/dompdf/dompdf/src/FrameReflower/NullFrameReflower.php  h  LU      /   vendor/dompdf/dompdf/src/FrameReflower/Page.phpV  hV  RJ      0   vendor/dompdf/dompdf/src/FrameReflower/Table.phpC  hC  w      4   vendor/dompdf/dompdf/src/FrameReflower/TableCell.php{  h{  ^#|      3   vendor/dompdf/dompdf/src/FrameReflower/TableRow.php_  h_  Ƥ      8   vendor/dompdf/dompdf/src/FrameReflower/TableRowGroup.php  h   ߤ      /   vendor/dompdf/dompdf/src/FrameReflower/Text.phpP  hP  ns      $   vendor/dompdf/dompdf/src/Helpers.php  h  {wz      (   vendor/dompdf/dompdf/src/Image/Cache.php,  h,  !      /   vendor/dompdf/dompdf/src/JavascriptEmbedder.php  h  7      $   vendor/dompdf/dompdf/src/LineBox.php'  h'  =N      $   vendor/dompdf/dompdf/src/Options.php:  h:  *(      )   vendor/dompdf/dompdf/src/PhpEvaluator.php	  h	  "P+      0   vendor/dompdf/dompdf/src/Positioner/Absolute.php<  h<  |      :   vendor/dompdf/dompdf/src/Positioner/AbstractPositioner.phps  hs  Gx      -   vendor/dompdf/dompdf/src/Positioner/Block.php]  h]  )      -   vendor/dompdf/dompdf/src/Positioner/Fixed.php,  h,  '7      .   vendor/dompdf/dompdf/src/Positioner/Inline.php  h  T      2   vendor/dompdf/dompdf/src/Positioner/ListBullet.php4  h4  E      6   vendor/dompdf/dompdf/src/Positioner/NullPositioner.php  h        1   vendor/dompdf/dompdf/src/Positioner/TableCell.php  h  3      0   vendor/dompdf/dompdf/src/Positioner/TableRow.php  h  뀦      %   vendor/dompdf/dompdf/src/Renderer.phpB!  hB!  A̤      6   vendor/dompdf/dompdf/src/Renderer/AbstractRenderer.php  h   \ʤ      +   vendor/dompdf/dompdf/src/Renderer/Block.phpt
  ht
  m4      +   vendor/dompdf/dompdf/src/Renderer/Image.phpD
  hD
  C	      ,   vendor/dompdf/dompdf/src/Renderer/Inline.php  h  Qg䪤      0   vendor/dompdf/dompdf/src/Renderer/ListBullet.php  h  j*|      /   vendor/dompdf/dompdf/src/Renderer/TableCell.php  h  Xo      3   vendor/dompdf/dompdf/src/Renderer/TableRowGroup.phpP  hP  Ip      *   vendor/dompdf/dompdf/src/Renderer/Text.php@  h@  x痤      1   vendor/seld/cli-prompt/.github/workflows/lint.yml$  h$        4   vendor/seld/cli-prompt/.github/workflows/phpstan.yml'  h'        !   vendor/seld/cli-prompt/.gitignore   h   #         vendor/seld/cli-prompt/LICENSE"  h"  ?e          vendor/seld/cli-prompt/README.md  h  Wm      $   vendor/seld/cli-prompt/composer.json*  h*  |      (   vendor/seld/cli-prompt/phpstan.neon.dist4   h4   L      &   vendor/seld/cli-prompt/res/example.php'  h'  I      *   vendor/seld/cli-prompt/res/hiddeninput.exe $  h $  v      (   vendor/seld/cli-prompt/src/CliPrompt.php8  h8  mW         vendor/psr/log/LICENSE=  h=  pO      )   vendor/psr/log/Psr/Log/AbstractLogger.php   h   G      3   vendor/psr/log/Psr/Log/InvalidArgumentException.php`   h`    X1      #   vendor/psr/log/Psr/Log/LogLevel.phpP  hP        /   vendor/psr/log/Psr/Log/LoggerAwareInterface.php)  h)  j      +   vendor/psr/log/Psr/Log/LoggerAwareTrait.php  h  Q'      *   vendor/psr/log/Psr/Log/LoggerInterface.php*  h*  1b!q      &   vendor/psr/log/Psr/Log/LoggerTrait.phpW  hW  Wj      %   vendor/psr/log/Psr/Log/NullLogger.php  h  I      )   vendor/psr/log/Psr/Log/Test/DummyTest.php   h   HTg      3   vendor/psr/log/Psr/Log/Test/LoggerInterfaceTest.php)  h)  I\      *   vendor/psr/log/Psr/Log/Test/TestLogger.php  h            vendor/psr/log/README.mdB  hB  '         vendor/psr/log/composer.json2  h2  ՞ڤ      "   vendor/league/climate/CHANGELOG.md  h  x      (   vendor/league/climate/CODE_OF_CONDUCT.md  h  OcE      %   vendor/league/climate/CONTRIBUTING.md7  h7  +!          vendor/league/climate/Dockerfile  h  Ka"\          vendor/league/climate/LICENSE.md9  h9  {s         vendor/league/climate/README.mda  ha  Fu֤      #   vendor/league/climate/composer.jsonP  hP  ?      '   vendor/league/climate/src/ASCII/404.txt   h   ӥ      *   vendor/league/climate/src/ASCII/bender.txt   h   *:      *   vendor/league/climate/src/ASCII/failed.txt   h   	=      0   vendor/league/climate/src/ASCII/fancy-bender.txt  h        *   vendor/league/climate/src/ASCII/passed.txt   h   8Τ      #   vendor/league/climate/src/ASCII/phps   hs   n      2   vendor/league/climate/src/ASCII/the-league-big.txtP  hP  =      5   vendor/league/climate/src/ASCII/the-league-bigger.txt  h  %      6   vendor/league/climate/src/ASCII/the-league-massive.txt h       .   vendor/league/climate/src/ASCII/the-league.txt  h        /   vendor/league/climate/src/Argument/Argument.php!  h!  :Ä      -   vendor/league/climate/src/Argument/Filter.phpw  hw  M      .   vendor/league/climate/src/Argument/Manager.phpQ  hQ  }A      -   vendor/league/climate/src/Argument/Parser.php  h  E܁¤      .   vendor/league/climate/src/Argument/Summary.php  h  wR      %   vendor/league/climate/src/CLImate.php2  h2  :      A   vendor/league/climate/src/Decorator/Component/BackgroundColor.php  h  Zz      ?   vendor/league/climate/src/Decorator/Component/BaseDecorator.php  h  V      7   vendor/league/climate/src/Decorator/Component/Color.php  h  v      9   vendor/league/climate/src/Decorator/Component/Command.php  h  m      D   vendor/league/climate/src/Decorator/Component/DecoratorInterface.php  h  COӤ      8   vendor/league/climate/src/Decorator/Component/Format.phpN  hN  _ZA      3   vendor/league/climate/src/Decorator/Parser/Ansi.phpo  ho  e      6   vendor/league/climate/src/Decorator/Parser/NonAnsi.php1  h1  Ȥ      5   vendor/league/climate/src/Decorator/Parser/Parser.php  h  S      <   vendor/league/climate/src/Decorator/Parser/ParserFactory.php;  h;  ڋ      =   vendor/league/climate/src/Decorator/Parser/ParserImporter.php  h  k      -   vendor/league/climate/src/Decorator/Style.php  h  ^      ,   vendor/league/climate/src/Decorator/Tags.phpm  hm  s      2   vendor/league/climate/src/Exceptions/Exception.phpE   hE   <      A   vendor/league/climate/src/Exceptions/InvalidArgumentException.php   h   K      9   vendor/league/climate/src/Exceptions/RuntimeException.phpw   hw   3R      A   vendor/league/climate/src/Exceptions/UnexpectedValueException.php   h   1      $   vendor/league/climate/src/Logger.php  h   ]4      *   vendor/league/climate/src/Settings/Art.php  h  {?{      .   vendor/league/climate/src/Settings/Manager.php  h  գBǤ      7   vendor/league/climate/src/Settings/SettingsImporter.php  h  ܈Ĥ      8   vendor/league/climate/src/Settings/SettingsInterface.php   h         F   vendor/league/climate/src/TerminalObject/Basic/BasicTerminalObject.php  h  B      O   vendor/league/climate/src/TerminalObject/Basic/BasicTerminalObjectInterface.php}  h}  Mޤ      9   vendor/league/climate/src/TerminalObject/Basic/Border.php  h  "W٤      5   vendor/league/climate/src/TerminalObject/Basic/Br.php   h   :      8   vendor/league/climate/src/TerminalObject/Basic/Clear.php0  h0  Ͻv      <   vendor/league/climate/src/TerminalObject/Basic/ClearLine.php  h  x+      :   vendor/league/climate/src/TerminalObject/Basic/Columns.php  h        7   vendor/league/climate/src/TerminalObject/Basic/Draw.phpP  hP  Q      7   vendor/league/climate/src/TerminalObject/Basic/Dump.php  h  獦      8   vendor/league/climate/src/TerminalObject/Basic/Flank.phpG  hG  ھE      9   vendor/league/climate/src/TerminalObject/Basic/Inline.php  h  <$      7   vendor/league/climate/src/TerminalObject/Basic/Json.php  h  G*      6   vendor/league/climate/src/TerminalObject/Basic/Out.php  h  l'z      =   vendor/league/climate/src/TerminalObject/Basic/Repeatable.phpZ  hZ  ?ڈ      6   vendor/league/climate/src/TerminalObject/Basic/Tab.php(  h(   F      8   vendor/league/climate/src/TerminalObject/Basic/Table.php  h  gb      >   vendor/league/climate/src/TerminalObject/Dynamic/Animation.php  h  T^Z      G   vendor/league/climate/src/TerminalObject/Dynamic/Animation/Keyframe.php;  h;  /$Ԥ      F   vendor/league/climate/src/TerminalObject/Dynamic/Checkbox/Checkbox.php'  h'  6f      K   vendor/league/climate/src/TerminalObject/Dynamic/Checkbox/CheckboxGroup.php  h  w      H   vendor/league/climate/src/TerminalObject/Dynamic/Checkbox/RadioGroup.php3  h3  (      ?   vendor/league/climate/src/TerminalObject/Dynamic/Checkboxes.php  h  -0      <   vendor/league/climate/src/TerminalObject/Dynamic/Confirm.php\  h\        J   vendor/league/climate/src/TerminalObject/Dynamic/DynamicTerminalObject.php  h  dߤ      S   vendor/league/climate/src/TerminalObject/Dynamic/DynamicTerminalObjectInterface.php  h  F_      :   vendor/league/climate/src/TerminalObject/Dynamic/Input.phpr  hr  +)      B   vendor/league/climate/src/TerminalObject/Dynamic/InputAbstract.php  h  ۶      <   vendor/league/climate/src/TerminalObject/Dynamic/Padding.phpE  hE  %      =   vendor/league/climate/src/TerminalObject/Dynamic/Password.php   h         =   vendor/league/climate/src/TerminalObject/Dynamic/Progress.php  h  A      :   vendor/league/climate/src/TerminalObject/Dynamic/Radio.php?  h?  y      <   vendor/league/climate/src/TerminalObject/Dynamic/Spinner.phpm  hm  ~r      7   vendor/league/climate/src/TerminalObject/Helper/Art.php  h  l      ;   vendor/league/climate/src/TerminalObject/Helper/Sleeper.php  h  팤      D   vendor/league/climate/src/TerminalObject/Helper/SleeperInterface.php   h   t	      @   vendor/league/climate/src/TerminalObject/Helper/StringLength.php	  h	  o      >   vendor/league/climate/src/TerminalObject/Router/BaseRouter.php6  h6  <      ?   vendor/league/climate/src/TerminalObject/Router/BasicRouter.phpP  hP  ʏ5      A   vendor/league/climate/src/TerminalObject/Router/DynamicRouter.phpu  hu  DyΤ      G   vendor/league/climate/src/TerminalObject/Router/ExtensionCollection.phpU  hU  [U      :   vendor/league/climate/src/TerminalObject/Router/Router.php  h  Iaͤ      C   vendor/league/climate/src/TerminalObject/Router/RouterInterface.php  h  lm      )   vendor/league/climate/src/Util/Cursor.phpP  hP  C      )   vendor/league/climate/src/Util/Helper.php^  h^  :G      )   vendor/league/climate/src/Util/Output.phpA  hA  ֭      1   vendor/league/climate/src/Util/OutputImporter.phpt  ht  j      9   vendor/league/climate/src/Util/Reader/ReaderInterface.php   h   G&      /   vendor/league/climate/src/Util/Reader/Stdin.phph  hh  o@~      /   vendor/league/climate/src/Util/System/Linux.php	  h	  a7v      0   vendor/league/climate/src/Util/System/System.php  h  :      7   vendor/league/climate/src/Util/System/SystemFactory.phpK  hK  ܤ      1   vendor/league/climate/src/Util/System/Windows.php  h  ^?      .   vendor/league/climate/src/Util/UtilFactory.php:  h:        /   vendor/league/climate/src/Util/UtilImporter.phpo  ho  9      0   vendor/league/climate/src/Util/Writer/Buffer.php  h  Vݤ      .   vendor/league/climate/src/Util/Writer/File.phpy  hy  I-M      0   vendor/league/climate/src/Util/Writer/StdErr.php
  h
  h      0   vendor/league/climate/src/Util/Writer/StdOut.php
  h
  +3(      9   vendor/league/climate/src/Util/Writer/WriterInterface.php   h   K      '   vendor/symfony/polyfill-ctype/Ctype.php  h  xs      %   vendor/symfony/polyfill-ctype/LICENSE,  h,        '   vendor/symfony/polyfill-ctype/README.md^  h^  lHk      +   vendor/symfony/polyfill-ctype/bootstrap.php@  h@  jQ9      -   vendor/symfony/polyfill-ctype/bootstrap80.phpr  hr  F)      +   vendor/symfony/polyfill-ctype/composer.json  h  e         vendor/symfony/yaml/.gitignore"   h"   U          vendor/symfony/yaml/CHANGELOG.md4  h4  ރ      +   vendor/symfony/yaml/Command/LintCommand.phpb  hb  54         vendor/symfony/yaml/Dumper.php  h  נ         vendor/symfony/yaml/Escaper.php  h  Sx]      /   vendor/symfony/yaml/Exception/DumpException.php  h        4   vendor/symfony/yaml/Exception/ExceptionInterface.php  h  B9      0   vendor/symfony/yaml/Exception/ParseException.phpt  ht  Q      2   vendor/symfony/yaml/Exception/RuntimeException.php  h  _q         vendor/symfony/yaml/Inline.phpu  hu  קS         vendor/symfony/yaml/LICENSE)  h)  Ǥ         vendor/symfony/yaml/Parser.php  h  >Z         vendor/symfony/yaml/README.md  h  ԙeߤ      '   vendor/symfony/yaml/Tag/TaggedValue.php  h  n%      5   vendor/symfony/yaml/Tests/Command/LintCommandTest.php  h  xag      (   vendor/symfony/yaml/Tests/DumperTest.php0  h0  Y      5   vendor/symfony/yaml/Tests/Fixtures/YtsAnchorAlias.ymlG  hG  H躤      4   vendor/symfony/yaml/Tests/Fixtures/YtsBasicTests.yml  h  Yq      6   vendor/symfony/yaml/Tests/Fixtures/YtsBlockMapping.yml  h  "|      ;   vendor/symfony/yaml/Tests/Fixtures/YtsDocumentSeparator.yml  h  v4դ      4   vendor/symfony/yaml/Tests/Fixtures/YtsErrorTests.ymll  hl  G      9   vendor/symfony/yaml/Tests/Fixtures/YtsFlowCollections.yml+  h+  ld      7   vendor/symfony/yaml/Tests/Fixtures/YtsFoldedScalars.ymlV  hV        9   vendor/symfony/yaml/Tests/Fixtures/YtsNullsAndEmpties.yml  h  LҤ      ?   vendor/symfony/yaml/Tests/Fixtures/YtsSpecificationExamples.yml!  h!  <F      7   vendor/symfony/yaml/Tests/Fixtures/YtsTypeTransfers.yml  h  (7      ,   vendor/symfony/yaml/Tests/Fixtures/arrow.gif   h   $      9   vendor/symfony/yaml/Tests/Fixtures/booleanMappingKeys.yml   h   'A      1   vendor/symfony/yaml/Tests/Fixtures/embededPhp.yml   h   Zܤ      8   vendor/symfony/yaml/Tests/Fixtures/escapedCharacters.yml  h  a'/      ,   vendor/symfony/yaml/Tests/Fixtures/index.yml8  h8        F   vendor/symfony/yaml/Tests/Fixtures/multiple_lines_as_literal_block.ymli  hi  d      b   vendor/symfony/yaml/Tests/Fixtures/multiple_lines_as_literal_block_leading_space_in_first_line.ymli   hi         4   vendor/symfony/yaml/Tests/Fixtures/nonStringKeys.yml;   h;   ʥ      3   vendor/symfony/yaml/Tests/Fixtures/not_readable.yml8  h8        5   vendor/symfony/yaml/Tests/Fixtures/nullMappingKey.ymlb   hb   /p      9   vendor/symfony/yaml/Tests/Fixtures/numericMappingKeys.ymlr  hr  J      1   vendor/symfony/yaml/Tests/Fixtures/sfComments.ymli  hi  '@ͤ      0   vendor/symfony/yaml/Tests/Fixtures/sfCompact.yml
  h
  &      1   vendor/symfony/yaml/Tests/Fixtures/sfMergeKey.yml		  h		  oɤ      0   vendor/symfony/yaml/Tests/Fixtures/sfObjects.yml  h  J5      /   vendor/symfony/yaml/Tests/Fixtures/sfQuotes.yml  h  Uk      .   vendor/symfony/yaml/Tests/Fixtures/sfTests.yml  h        <   vendor/symfony/yaml/Tests/Fixtures/unindentedCollections.yml  h  
      (   vendor/symfony/yaml/Tests/InlineTest.phps  hs        0   vendor/symfony/yaml/Tests/ParseExceptionTest.php  h        (   vendor/symfony/yaml/Tests/ParserTest.php  h  &      &   vendor/symfony/yaml/Tests/YamlTest.php  h  ٤      !   vendor/symfony/yaml/Unescaper.php"  h"  ԰         vendor/symfony/yaml/Yaml.php  h  Mk      !   vendor/symfony/yaml/composer.json  h  ٤      $   vendor/symfony/yaml/phpunit.xml.dist?  h?  fJ      &   vendor/paragonie/random_compat/LICENSEJ  hJ  >       ,   vendor/paragonie/random_compat/build-phar.sh   h   t8Q      ,   vendor/paragonie/random_compat/composer.jsonf  hf  P|*      =   vendor/paragonie/random_compat/dist/random_compat.phar.pubkey   h   *A|      A   vendor/paragonie/random_compat/dist/random_compat.phar.pubkey.asc  h  ١i      -   vendor/paragonie/random_compat/lib/random.php/  h/  &      3   vendor/paragonie/random_compat/other/build_phar.phpa  ha  k}4      1   vendor/paragonie/random_compat/psalm-autoload.php   h         (   vendor/paragonie/random_compat/psalm.xmlT  hT  D      3   vendor/paragonie/constant_time_encoding/LICENSE.txte	  he	  |[      1   vendor/paragonie/constant_time_encoding/README.mdY  hY  Дsؤ      5   vendor/paragonie/constant_time_encoding/composer.json1  h1  9f      6   vendor/paragonie/constant_time_encoding/src/Base32.phpE  hE        9   vendor/paragonie/constant_time_encoding/src/Base32Hex.phpk  hk  6)      6   vendor/paragonie/constant_time_encoding/src/Base64.php1  h1  ^      >   vendor/paragonie/constant_time_encoding/src/Base64DotSlash.php  h  [{      E   vendor/paragonie/constant_time_encoding/src/Base64DotSlashOrdered.php
  h
  ;7ؤ      =   vendor/paragonie/constant_time_encoding/src/Base64UrlSafe.php  h  Rޤ      6   vendor/paragonie/constant_time_encoding/src/Binary.php_  h_  Ra      @   vendor/paragonie/constant_time_encoding/src/EncoderInterface.php  h  q~      8   vendor/paragonie/constant_time_encoding/src/Encoding.phpf  hf  !
      3   vendor/paragonie/constant_time_encoding/src/Hex.phpl  hl  qȤ      7   vendor/paragonie/constant_time_encoding/src/RFC4648.phpo  ho  ,\      "   vendor/phpseclib/phpseclib/AUTHORS<  h<  nj      %   vendor/phpseclib/phpseclib/BACKERS.md  h  >      "   vendor/phpseclib/phpseclib/LICENSE9  h9  s=j      $   vendor/phpseclib/phpseclib/README.mdC  hC   f      (   vendor/phpseclib/phpseclib/composer.json	  h	  C      A   vendor/phpseclib/phpseclib/phpseclib/Common/Functions/Strings.php?  h?  ޮ      2   vendor/phpseclib/phpseclib/phpseclib/Crypt/AES.php  h        7   vendor/phpseclib/phpseclib/phpseclib/Crypt/Blowfish.php֪  h֪        7   vendor/phpseclib/phpseclib/phpseclib/Crypt/ChaCha20.php  h  0N      C   vendor/phpseclib/phpseclib/phpseclib/Crypt/Common/AsymmetricKey.php4;  h4;  `v
      A   vendor/phpseclib/phpseclib/phpseclib/Crypt/Common/BlockCipher.php  h        F   vendor/phpseclib/phpseclib/phpseclib/Crypt/Common/Formats/Keys/JWK.php  h  p      J   vendor/phpseclib/phpseclib/phpseclib/Crypt/Common/Formats/Keys/OpenSSH.phpv  hv  
T      G   vendor/phpseclib/phpseclib/phpseclib/Crypt/Common/Formats/Keys/PKCS.phpa  ha        H   vendor/phpseclib/phpseclib/phpseclib/Crypt/Common/Formats/Keys/PKCS1.php  h  Iȥ      H   vendor/phpseclib/phpseclib/phpseclib/Crypt/Common/Formats/Keys/PKCS8.phpr  hr  n:      H   vendor/phpseclib/phpseclib/phpseclib/Crypt/Common/Formats/Keys/PuTTY.php5  h5        K   vendor/phpseclib/phpseclib/phpseclib/Crypt/Common/Formats/Signature/Raw.php  h  aE      @   vendor/phpseclib/phpseclib/phpseclib/Crypt/Common/PrivateKey.php  h  b2      ?   vendor/phpseclib/phpseclib/phpseclib/Crypt/Common/PublicKey.phpN  hN  .[-ɤ      B   vendor/phpseclib/phpseclib/phpseclib/Crypt/Common/StreamCipher.phpQ  hQ  p      B   vendor/phpseclib/phpseclib/phpseclib/Crypt/Common/SymmetricKey.php h ڤ      H   vendor/phpseclib/phpseclib/phpseclib/Crypt/Common/Traits/Fingerprint.php  h  rN      N   vendor/phpseclib/phpseclib/phpseclib/Crypt/Common/Traits/PasswordProtected.php*  h*  ɛ      2   vendor/phpseclib/phpseclib/phpseclib/Crypt/DES.php h       1   vendor/phpseclib/phpseclib/phpseclib/Crypt/DH.phpJ  hJ  gU	      D   vendor/phpseclib/phpseclib/phpseclib/Crypt/DH/Formats/Keys/PKCS1.php<  h<  Q{*      D   vendor/phpseclib/phpseclib/phpseclib/Crypt/DH/Formats/Keys/PKCS8.php  h  o`%      <   vendor/phpseclib/phpseclib/phpseclib/Crypt/DH/Parameters.php  h  .      <   vendor/phpseclib/phpseclib/phpseclib/Crypt/DH/PrivateKey.php  h  tޤ      ;   vendor/phpseclib/phpseclib/phpseclib/Crypt/DH/PublicKey.php  h  VM      2   vendor/phpseclib/phpseclib/phpseclib/Crypt/DSA.php+$  h+$  Lg      G   vendor/phpseclib/phpseclib/phpseclib/Crypt/DSA/Formats/Keys/OpenSSH.php  h  4b:      E   vendor/phpseclib/phpseclib/phpseclib/Crypt/DSA/Formats/Keys/PKCS1.php+  h+  -R      E   vendor/phpseclib/phpseclib/phpseclib/Crypt/DSA/Formats/Keys/PKCS8.phpx  hx  aQ      E   vendor/phpseclib/phpseclib/phpseclib/Crypt/DSA/Formats/Keys/PuTTY.phpk  hk  keJ      C   vendor/phpseclib/phpseclib/phpseclib/Crypt/DSA/Formats/Keys/Raw.phpd	  hd	  #N~      C   vendor/phpseclib/phpseclib/phpseclib/Crypt/DSA/Formats/Keys/XML.php  h  u!{      I   vendor/phpseclib/phpseclib/phpseclib/Crypt/DSA/Formats/Signature/ASN1.phpd  hd  ,Τ      H   vendor/phpseclib/phpseclib/phpseclib/Crypt/DSA/Formats/Signature/Raw.php
  h
  ʻ      I   vendor/phpseclib/phpseclib/phpseclib/Crypt/DSA/Formats/Signature/SSH2.php  h  Je      =   vendor/phpseclib/phpseclib/phpseclib/Crypt/DSA/Parameters.php  h  h      =   vendor/phpseclib/phpseclib/phpseclib/Crypt/DSA/PrivateKey.php'  h'        <   vendor/phpseclib/phpseclib/phpseclib/Crypt/DSA/PublicKey.phpe	  he	  ګ      1   vendor/phpseclib/phpseclib/phpseclib/Crypt/EC.php.4  h.4  ]      A   vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/BaseCurves/Base.phpY  hY  B      C   vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/BaseCurves/Binary.php*&  h*&        I   vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/BaseCurves/KoblitzPrime.php'  h'  E      G   vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/BaseCurves/Montgomery.php  h        B   vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/BaseCurves/Prime.phpTS  hTS  Aޤ      K   vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/BaseCurves/TwistedEdwards.php  h        C   vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/Curve25519.php	  h	  0      A   vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/Curve448.phpG
  hG
  v      @   vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/Ed25519.php'  h'  δ̤      >   vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/Ed448.php  h  *      H   vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/brainpoolP160r1.php  h  J      H   vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/brainpoolP160t1.php  h  )      H   vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/brainpoolP192r1.phpG  hG  G٤      H   vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/brainpoolP192t1.phpQ  hQ  s      H   vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/brainpoolP224r1.phpw  hw  <      H   vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/brainpoolP224t1.php  h  ZǤ      H   vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/brainpoolP256r1.php  h  o      H   vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/brainpoolP256t1.php  h  6      H   vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/brainpoolP320r1.php  h  ]      H   vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/brainpoolP320t1.php  h  &      H   vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/brainpoolP384r1.php  h  HH      H   vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/brainpoolP384t1.php  h  <x3d      H   vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/brainpoolP512r1.php  h  Ĥ      H   vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/brainpoolP512t1.php  h  h:Ou      A   vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/nistb233.phpf  hf  9      A   vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/nistb409.phpf  hf  (      A   vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/nistk163.phpf  hf  MI      A   vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/nistk233.phpf  hf        A   vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/nistk283.phpg  hg  Tyڤ      A   vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/nistk409.phpf  hf  ٍ*      A   vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/nistp192.phpf  hf  )      A   vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/nistp224.phpf  hf  l)O      A   vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/nistp256.phpf  hf  v[      A   vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/nistp384.phpf  hf  Jx      A   vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/nistp521.phpf  hf  'ol      A   vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/nistt571.phpf  hf        C   vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/prime192v1.phpj  hj  K      C   vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/prime192v2.php=  h=  yT¤      C   vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/prime192v3.php=  h=  K{Τ      C   vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/prime239v1.php  h  X
u      C   vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/prime239v2.php  h  嬤      C   vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/prime239v3.php  h  Vh      C   vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/prime256v1.phpj  hj  g      B   vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/secp112r1.php  h  X      B   vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/secp112r2.php  h  i.      B   vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/secp128r1.php  h  6D      B   vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/secp128r2.php  h  U\      B   vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/secp160k1.php  h  q      B   vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/secp160r1.php  h  *      B   vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/secp160r2.php*  h*  c      B   vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/secp192k1.php>  h>  e      B   vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/secp192r1.php  h  32w      B   vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/secp224k1.php  h  r      B   vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/secp224r1.phpk  hk  N*      B   vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/secp256k1.phpA  hA  L-      B   vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/secp256r1.php  h  (ڤ      B   vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/secp384r1.phpW  hW  볤      B   vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/secp521r1.php  h  &
G      B   vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/sect113r1.phpV  hV  G      B   vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/sect113r2.phpV  hV  T"      B   vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/sect131r1.phpp  hp  5M      B   vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/sect131r2.phpp  hp  Ϥ      B   vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/sect163k1.php  h  1E      B   vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/sect163r1.php  h  ^K      B   vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/sect163r2.php  h   l      B   vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/sect193r1.php  h  oۆ      B   vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/sect193r2.php  h  g      B   vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/sect233k1.php  h  "      B   vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/sect233r1.php  h  شX      B   vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/sect239k1.php  h  E3      B   vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/sect283k1.php1  h1  ~ä      B   vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/sect283r1.php1  h1  E      B   vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/sect409k1.php  h  ԋ      B   vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/sect409r1.php  h   ؐ      B   vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/sect571k1.php  h  I&      B   vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Curves/sect571r1.php  h  %^X      E   vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Formats/Keys/Common.phpX[  hX[  F\      B   vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Formats/Keys/JWK.phpP  hP  k      P   vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Formats/Keys/MontgomeryPrivate.php  h  W3j      O   vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Formats/Keys/MontgomeryPublic.php  h  u      F   vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Formats/Keys/OpenSSH.php  h  7M      D   vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Formats/Keys/PKCS1.phpp  hp  Ť      D   vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Formats/Keys/PKCS8.php   h   u      D   vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Formats/Keys/PuTTY.phpE  hE  #y      B   vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Formats/Keys/XML.phpYE  hYE  =      H   vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Formats/Keys/libsodium.php  h  V      H   vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Formats/Signature/ASN1.phpf  hf  ƫ]      H   vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Formats/Signature/IEEE.phpG  hG  q5      G   vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Formats/Signature/Raw.php  h  |j2      H   vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Formats/Signature/SSH2.php  h  辤      <   vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/Parameters.php  h  1PA      <   vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/PrivateKey.phpG(  hG(  Wq/      ;   vendor/phpseclib/phpseclib/phpseclib/Crypt/EC/PublicKey.php^  h^   .      3   vendor/phpseclib/phpseclib/phpseclib/Crypt/Hash.php  h  ǃ      >   vendor/phpseclib/phpseclib/phpseclib/Crypt/PublicKeyLoader.php
  h
        2   vendor/phpseclib/phpseclib/phpseclib/Crypt/RC2.phpS  hS  Ҥ      2   vendor/phpseclib/phpseclib/phpseclib/Crypt/RC4.phpa  ha  j      2   vendor/phpseclib/phpseclib/phpseclib/Crypt/RSA.phpl  hl  l/      C   vendor/phpseclib/phpseclib/phpseclib/Crypt/RSA/Formats/Keys/JWK.php  h  @      F   vendor/phpseclib/phpseclib/phpseclib/Crypt/RSA/Formats/Keys/MSBLOB.php  h  Sf      G   vendor/phpseclib/phpseclib/phpseclib/Crypt/RSA/Formats/Keys/OpenSSH.php  h  &5      E   vendor/phpseclib/phpseclib/phpseclib/Crypt/RSA/Formats/Keys/PKCS1.php;  h;  y}      E   vendor/phpseclib/phpseclib/phpseclib/Crypt/RSA/Formats/Keys/PKCS8.php  h  Lu\      C   vendor/phpseclib/phpseclib/phpseclib/Crypt/RSA/Formats/Keys/PSS.php  h  r:n      E   vendor/phpseclib/phpseclib/phpseclib/Crypt/RSA/Formats/Keys/PuTTY.php  h  (r      C   vendor/phpseclib/phpseclib/phpseclib/Crypt/RSA/Formats/Keys/Raw.php  h  Yk      C   vendor/phpseclib/phpseclib/phpseclib/Crypt/RSA/Formats/Keys/XML.phpp  hp  W'      =   vendor/phpseclib/phpseclib/phpseclib/Crypt/RSA/PrivateKey.php>  h>  z.`      <   vendor/phpseclib/phpseclib/phpseclib/Crypt/RSA/PublicKey.php<  h<  7PJ      5   vendor/phpseclib/phpseclib/phpseclib/Crypt/Random.php1%  h1%  :%      7   vendor/phpseclib/phpseclib/phpseclib/Crypt/Rijndael.php%  h%  "
      6   vendor/phpseclib/phpseclib/phpseclib/Crypt/Salsa20.php9  h9  }      8   vendor/phpseclib/phpseclib/phpseclib/Crypt/TripleDES.phpz3  hz3        6   vendor/phpseclib/phpseclib/phpseclib/Crypt/Twofish.php   h   C;?      L   vendor/phpseclib/phpseclib/phpseclib/Exception/BadConfigurationException.php  h        I   vendor/phpseclib/phpseclib/phpseclib/Exception/BadDecryptionException.php  h        C   vendor/phpseclib/phpseclib/phpseclib/Exception/BadModeException.php  h  ȍ      L   vendor/phpseclib/phpseclib/phpseclib/Exception/ConnectionClosedException.php  h        H   vendor/phpseclib/phpseclib/phpseclib/Exception/FileNotFoundException.php  h  YԘm      M   vendor/phpseclib/phpseclib/phpseclib/Exception/InconsistentSetupException.php  h  /Ǥ      M   vendor/phpseclib/phpseclib/phpseclib/Exception/InsufficientSetupException.php  h  y=G      O   vendor/phpseclib/phpseclib/phpseclib/Exception/InvalidPacketLengthException.php   h   u      G   vendor/phpseclib/phpseclib/phpseclib/Exception/NoKeyLoadedException.php  h  Bۤ      Q   vendor/phpseclib/phpseclib/phpseclib/Exception/NoSupportedAlgorithmsException.php  h  J      C   vendor/phpseclib/phpseclib/phpseclib/Exception/TimeoutException.php   h   LD:>      K   vendor/phpseclib/phpseclib/phpseclib/Exception/UnableToConnectException.php  h  ek      P   vendor/phpseclib/phpseclib/phpseclib/Exception/UnsupportedAlgorithmException.php  h  QZˤ      L   vendor/phpseclib/phpseclib/phpseclib/Exception/UnsupportedCurveException.php  h         M   vendor/phpseclib/phpseclib/phpseclib/Exception/UnsupportedFormatException.php  h  Pf      P   vendor/phpseclib/phpseclib/phpseclib/Exception/UnsupportedOperationException.php  h  ZW      2   vendor/phpseclib/phpseclib/phpseclib/File/ANSI.php
N  h
N  O\      2   vendor/phpseclib/phpseclib/phpseclib/File/ASN1.php  h  X      :   vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Element.php4  h4  I/Ѥ      I   vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/AccessDescription.php  h  !A      P   vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/AdministrationDomainName.php  h  |[      K   vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/AlgorithmIdentifier.php  h  (      C   vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/AnotherName.php  h  ߣA      A   vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/Attribute.php  h  5~      E   vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/AttributeType.php  h  䆤      M   vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/AttributeTypeAndValue.php  h  *<      F   vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/AttributeValue.php  h  >a      B   vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/Attributes.php5  h5  S+Y      Q   vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/AuthorityInfoAccessSyntax.phpo  ho  	,      N   vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/AuthorityKeyIdentifier.phpS  hS  8]      D   vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/BaseDistance.php  h  n      H   vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/BasicConstraints.php>  h>  	$      U   vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/BuiltInDomainDefinedAttribute.php  h        V   vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/BuiltInDomainDefinedAttributes.php  h  F]Ť      Q   vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/BuiltInStandardAttributes.php  h  /w      >   vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/CPSuri.php  h  f      M   vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/CRLDistributionPoints.phpc  hc  Ыy`      A   vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/CRLNumber.php  h        A   vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/CRLReason.phpb  hb  z7      D   vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/CertPolicyId.php  h  P*      C   vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/Certificate.php  h  贗      I   vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/CertificateIssuer.php  h  5      G   vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/CertificateList.php  h  6      K   vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/CertificatePolicies.php]  h]  ҅      O   vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/CertificateSerialNumber.php  h        L   vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/CertificationRequest.php  h  )      P   vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/CertificationRequestInfo.php  h  Av      J   vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/Characteristic_two.php&  h&  (      C   vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/CountryName.php  h  զ      =   vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/Curve.php  h   U      C   vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/DHParameter.phpV  hV  :      A   vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/DSAParams.php  h  0      E   vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/DSAPrivateKey.phpN  hN  1      D   vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/DSAPublicKey.php  h  "5,      B   vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/DigestInfo.php  h  j      G   vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/DirectoryString.phpr  hr  7hܧ      C   vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/DisplayText.php  h  rɤ      I   vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/DistributionPoint.php(  h(        M   vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/DistributionPointName.php  h  a      C   vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/DssSigValue.phpv  hv  5֤      D   vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/ECParameters.phpt  ht  _      ?   vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/ECPoint.php  h  d      D   vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/ECPrivateKey.php~  h~  Og      D   vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/EDIPartyName.php2  h2  V:      E   vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/EcdsaSigValue.php|  h|  ߖg%      E   vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/EncryptedData.php  h  p      O   vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/EncryptedPrivateKeyInfo.php  h  0פ      I   vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/ExtKeyUsageSyntax.phpR  hR  d      A   vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/Extension.php+  h+  ݈Y      J   vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/ExtensionAttribute.php  h  ܥX<      K   vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/ExtensionAttributes.phpu  hu  
Y      B   vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/Extensions.php  h  7      D   vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/FieldElement.php  h  [:g      ?   vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/FieldID.php  h  qƃ      C   vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/GeneralName.php  h        D   vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/GeneralNames.phpB  hB  C      F   vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/GeneralSubtree.php  h  oo      G   vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/GeneralSubtrees.phpN  hN  ߠq      E   vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/HashAlgorithm.php  h  $I      K   vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/HoldInstructionCode.php  h  >u      F   vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/InvalidityDate.php  h  6nj      E   vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/IssuerAltName.php  h  O5      P   vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/IssuingDistributionPoint.php^  h^  S.yޤ      E   vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/KeyIdentifier.php  h  ;[      D   vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/KeyPurposeId.php  h  np      @   vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/KeyUsage.php  h  $U      H   vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/MaskGenAlgorithm.php  h  _      <   vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/Name.php(  h(  In      G   vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/NameConstraints.php  h  L      F   vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/NetworkAddress.php  h  qt      G   vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/NoticeReference.php"  h"  ͖      M   vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/NumericUserIdentifier.php  h  |Zk      A   vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/ORAddress.php  h  f{       H   vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/OneAsymmetricKey.php  h  W      H   vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/OrganizationName.php  h  ǓRҤ      O   vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/OrganizationalUnitNames.php  h  w8u      F   vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/OtherPrimeInfo.php  h  6R      G   vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/OtherPrimeInfos.php  h  R|      D   vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/PBEParameter.php  h  %q      C   vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/PBES2params.php  h  [iD      D   vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/PBKDF2params.php  h  Z      D   vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/PBMAC1params.php  h  S      C   vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/PKCS9String.php  h  A2Z:      C   vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/Pentanomial.php  h  ǀ      D   vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/PersonalName.phpC  hC  ᙤ      I   vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/PolicyInformation.phpM  hM   C      F   vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/PolicyMappings.php  h  ^w      I   vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/PolicyQualifierId.php  h  c5      K   vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/PolicyQualifierInfo.php  h  sމ      E   vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/PostalAddress.phpe  he  M0      ?   vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/Prime_p.php  h  ^j      I   vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/PrivateDomainName.php  h  D      B   vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/PrivateKey.php  h  'J      F   vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/PrivateKeyInfo.php  h  ϒ      M   vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/PrivateKeyUsagePeriod.php  h  $s}      A   vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/PublicKey.php  h  n      M   vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/PublicKeyAndChallenge.php  h        E   vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/PublicKeyInfo.php-  h-  ri      G   vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/RC2CBCParameter.php  h  )      C   vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/RDNSequence.php  h  >pa      E   vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/RSAPrivateKey.php  h  xRw      D   vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/RSAPublicKey.php  h  "P      I   vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/RSASSA_PSS_params.php  h  XQ      C   vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/ReasonFlags.php  h  J*      Q   vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/RelativeDistinguishedName.php  h  h      J   vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/RevokedCertificate.php  h  b78      S   vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/SignedPublicKeyAndChallenge.php  h  ZP      I   vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/SpecifiedECDomain.phpX  hX  RLO      F   vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/SubjectAltName.php  h  O      R   vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/SubjectDirectoryAttributes.phpj  hj  [      O   vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/SubjectInfoAccessSyntax.phpi  hi  ǔ4      L   vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/SubjectPublicKeyInfo.php  h  ]9      C   vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/TBSCertList.phpV  hV  ~f      F   vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/TBSCertificate.phpW  hW  Z      J   vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/TerminalIdentifier.php  h  ȴ      <   vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/Time.phpy  hy        A   vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/Trinomial.php  h  0      H   vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/UniqueIdentifier.php  h  Bʑ7      B   vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/UserNotice.php   h   mXA      @   vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/Validity.phpR  hR  Pn      N   vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/netscape_ca_policy_url.php  h  e      J   vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/netscape_cert_type.phpJ  hJ  {      H   vendor/phpseclib/phpseclib/phpseclib/File/ASN1/Maps/netscape_comment.php  h  Z?      2   vendor/phpseclib/phpseclib/phpseclib/File/X509.php/0 h/0 ~X      8   vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger.phpZ  hZ  n      G   vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger/Engines/BCMath.phpG  hG  bY      L   vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger/Engines/BCMath/Base.phpm	  hm	  Aɤ      O   vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger/Engines/BCMath/BuiltIn.php  h  
}      U   vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger/Engines/BCMath/DefaultEngine.phpI  hI        O   vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger/Engines/BCMath/OpenSSL.php7  h7        Z   vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger/Engines/BCMath/Reductions/Barrett.php  h  '      ^   vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger/Engines/BCMath/Reductions/EvalBarrett.php  h  t      G   vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger/Engines/Engine.phpS  hS  Ji      D   vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger/Engines/GMP.phpA  hA        R   vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger/Engines/GMP/DefaultEngine.php|  h|  5֤      H   vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger/Engines/OpenSSL.php  h  fm      D   vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger/Engines/PHP.php  h  oK      I   vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger/Engines/PHP/Base.php  h  X4      R   vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger/Engines/PHP/DefaultEngine.phpH  hH  `Iڤ      O   vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger/Engines/PHP/Montgomery.php_	  h_	  0       L   vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger/Engines/PHP/OpenSSL.php4  h4  b'"      W   vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger/Engines/PHP/Reductions/Barrett.php.  h.  c	      W   vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger/Engines/PHP/Reductions/Classic.php  h  kǤ      [   vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger/Engines/PHP/Reductions/EvalBarrett.php >  h >  \DKޤ      Z   vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger/Engines/PHP/Reductions/Montgomery.php  h  7
[      ^   vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger/Engines/PHP/Reductions/MontgomeryMult.phpo  ho        Z   vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger/Engines/PHP/Reductions/PowerOfTwo.php`  h`  	      F   vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger/Engines/PHP32.phpy#  hy#  \	C      F   vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger/Engines/PHP64.php#  h#  hOQ      9   vendor/phpseclib/phpseclib/phpseclib/Math/BinaryField.php  h  e=G      A   vendor/phpseclib/phpseclib/phpseclib/Math/BinaryField/Integer.php5  h5  q1÷      @   vendor/phpseclib/phpseclib/phpseclib/Math/Common/FiniteField.phpw  hw   w      H   vendor/phpseclib/phpseclib/phpseclib/Math/Common/FiniteField/Integer.php   h   @|      8   vendor/phpseclib/phpseclib/phpseclib/Math/PrimeField.phpV
  hV
  I      @   vendor/phpseclib/phpseclib/phpseclib/Math/PrimeField/Integer.php)  h)  ϒp      1   vendor/phpseclib/phpseclib/phpseclib/Net/SFTP.php h IiP      8   vendor/phpseclib/phpseclib/phpseclib/Net/SFTP/Stream.phpT  hT        1   vendor/phpseclib/phpseclib/phpseclib/Net/SSH2.php0 h0       9   vendor/phpseclib/phpseclib/phpseclib/System/SSH/Agent.php.#  h.#  0GMm      B   vendor/phpseclib/phpseclib/phpseclib/System/SSH/Agent/Identity.php/#  h/#  Bx      K   vendor/phpseclib/phpseclib/phpseclib/System/SSH/Common/Traits/ReadBytes.php  h  i      2   vendor/phpseclib/phpseclib/phpseclib/bootstrap.php  h  y      0   vendor/phpseclib/phpseclib/phpseclib/openssl.cnfh   hh         ?   vendor/orangehrm-devops/common/.git/hooks/applypatch-msg.sample  h  O	      ;   vendor/orangehrm-devops/common/.git/hooks/commit-msg.sample  h        C   vendor/orangehrm-devops/common/.git/hooks/fsmonitor-watchman.sample/  h/  Pc      <   vendor/orangehrm-devops/common/.git/hooks/post-update.sample   h         ?   vendor/orangehrm-devops/common/.git/hooks/pre-applypatch.sample  h  L      ;   vendor/orangehrm-devops/common/.git/hooks/pre-commit.samplek  hk  2      A   vendor/orangehrm-devops/common/.git/hooks/pre-merge-commit.sample  h  D?^      9   vendor/orangehrm-devops/common/.git/hooks/pre-push.sample^  h^  
      ;   vendor/orangehrm-devops/common/.git/hooks/pre-rebase.sample"  h"  XQ      <   vendor/orangehrm-devops/common/.git/hooks/pre-receive.sample   h         C   vendor/orangehrm-devops/common/.git/hooks/prepare-commit-msg.sample  h  60      A   vendor/orangehrm-devops/common/.git/hooks/push-to-checkout.sample
  h
        7   vendor/orangehrm-devops/common/.git/hooks/update.sampleB  hB        0   vendor/orangehrm-devops/common/.git/info/exclude   h   w=!      -   vendor/orangehrm-devops/common/.git/info/refs  h         /   vendor/orangehrm-devops/common/.git/descriptionI   hI   7      D   vendor/orangehrm-devops/common/.git/refs/heads/compatibility/php-7.4)   h)   2#      (   vendor/orangehrm-devops/common/.git/HEAD&   h&   Τ      *   vendor/orangehrm-devops/common/.git/config  h  S      c   vendor/orangehrm-devops/common/.git/objects/pack/pack-4e9bbeab5c0e3166c53acaccb5fa57889bb518f1.pack h T֨$      b   vendor/orangehrm-devops/common/.git/objects/pack/pack-4e9bbeab5c0e3166c53acaccb5fa57889bb518f1.idxh hh ]M$      6   vendor/orangehrm-devops/common/.git/objects/info/packs6   h6   K      /   vendor/orangehrm-devops/common/.git/packed-refs  h  JrJ      )   vendor/orangehrm-devops/common/.git/indexT5  hT5  =      I   vendor/orangehrm-devops/common/.git/logs/refs/heads/compatibility/php-7.4   h   S>O      -   vendor/orangehrm-devops/common/.git/logs/HEADv  hv  Hn1P      -   vendor/orangehrm-devops/common/.git/ORIG_HEAD)   h)   2#      )   vendor/orangehrm-devops/common/.gitignore^   h^   LgΤ      )   vendor/orangehrm-devops/common/Dockerfile  h  MǤ      ,   vendor/orangehrm-devops/common/composer.json  h  +?W      1   vendor/orangehrm-devops/common/docker-compose.yml  h  h      ,   vendor/orangehrm-devops/common/packages.json/  h/        V   vendor/orangehrm-devops/common/src/OrangeHRM/DevOps/dataMasking/DataMaskingHandler.phpN  hN        K   vendor/orangehrm-devops/common/src/OrangeHRM/DevOps/dataMasking/Handler.php  h  :      _   vendor/orangehrm-devops/common/src/OrangeHRM/DevOps/dataMasking/UniversalDataMaskingHandler.phpiA  hiA  m      n   vendor/orangehrm-devops/common/src/OrangeHRM/DevOps/dataMasking/strategy/AnonymizeApiEndpointFieldStrategy.php  h  ?5z      h   vendor/orangehrm-devops/common/src/OrangeHRM/DevOps/dataMasking/strategy/AnonymizeEmailFieldStrategy.phpP  hP  Uujq      c   vendor/orangehrm-devops/common/src/OrangeHRM/DevOps/dataMasking/strategy/AnonymizeFieldStrategy.phpB  hB  @Nt      x   vendor/orangehrm-devops/common/src/OrangeHRM/DevOps/dataMasking/strategy/ChangeToRandomIpAddrIfNotEmptyFieldStrategy.php  h  @Y      v   vendor/orangehrm-devops/common/src/OrangeHRM/DevOps/dataMasking/strategy/ChangeToRandomTextIfNotEmptyFieldStrategy.php  h  0db      g   vendor/orangehrm-devops/common/src/OrangeHRM/DevOps/dataMasking/strategy/ChangeToValueFieldStrategy.php  h  \E      f   vendor/orangehrm-devops/common/src/OrangeHRM/DevOps/dataMasking/strategy/ChangeToZeroFieldStrategy.php  h  f      n   vendor/orangehrm-devops/common/src/OrangeHRM/DevOps/dataMasking/strategy/ConditionalAnonymizeFieldStrategy.php  h  @W      `   vendor/orangehrm-devops/common/src/OrangeHRM/DevOps/dataMasking/strategy/CustomFieldStrategy.php   h   A3      `   vendor/orangehrm-devops/common/src/OrangeHRM/DevOps/dataMasking/strategy/DropTriggerStrategy.php  h  o^      l   vendor/orangehrm-devops/common/src/OrangeHRM/DevOps/dataMasking/strategy/DynamicFormRecordsFieldStrategy.phpY  hY        t   vendor/orangehrm-devops/common/src/OrangeHRM/DevOps/dataMasking/strategy/DynamicFormRecordsPreserveFieldStrategy.phpM  hM  :@q      _   vendor/orangehrm-devops/common/src/OrangeHRM/DevOps/dataMasking/strategy/EmptyFieldStrategy.php  h        d   vendor/orangehrm-devops/common/src/OrangeHRM/DevOps/dataMasking/strategy/EmptyTableFieldStrategy.php  h  5>      _   vendor/orangehrm-devops/common/src/OrangeHRM/DevOps/dataMasking/strategy/EmptyTableStrategy.php  h  h=      Z   vendor/orangehrm-devops/common/src/OrangeHRM/DevOps/dataMasking/strategy/FieldStrategy.php)  h)  c      \   vendor/orangehrm-devops/common/src/OrangeHRM/DevOps/dataMasking/strategy/MaskingStrategy.php   h          p   vendor/orangehrm-devops/common/src/OrangeHRM/DevOps/dataMasking/strategy/ReplaceWithDefaultFileFieldStrategy.php(
  h(
  r      a   vendor/orangehrm-devops/common/src/OrangeHRM/DevOps/dataMasking/strategy/SetNullFieldStrategy.php  h  ~1q      h   vendor/orangehrm-devops/common/src/OrangeHRM/DevOps/dataMasking/strategy/SmartAnonymizeFieldStrategy.php  h  [}      Z   vendor/orangehrm-devops/common/src/OrangeHRM/DevOps/dataMasking/strategy/TableStrategy.php   h   ϻ      \   vendor/orangehrm-devops/common/src/OrangeHRM/DevOps/dataMasking/strategy/TriggerStrategy.php  h  nN      b   vendor/orangehrm-devops/common/src/OrangeHRM/DevOps/dataMasking/strategy/TruncateTableStrategy.php  h  O      X   vendor/orangehrm-devops/common/src/OrangeHRM/DevOps/helper/AgentConfigurationsHelper.php8  h8  ~i      R   vendor/orangehrm-devops/common/src/OrangeHRM/DevOps/helper/ConfigurationHelper.php   h   F      O   vendor/orangehrm-devops/common/src/OrangeHRM/DevOps/helper/EncryptionHelper.php-  h-  F      S   vendor/orangehrm-devops/common/src/OrangeHRM/DevOps/helper/FileOperationsHelper.php)  h)  1      O   vendor/orangehrm-devops/common/src/OrangeHRM/DevOps/helper/KeyHandlerHelper.php  h  SE      X   vendor/orangehrm-devops/common/src/OrangeHRM/DevOps/helper/RemoteConfigurationHelper.php  h  a+      L   vendor/orangehrm-devops/common/src/OrangeHRM/DevOps/helper/RuntimeHelper.php  h   F      M   vendor/orangehrm-devops/common/src/OrangeHRM/DevOps/helper/TimeDataHelper.php^  h^        ]   vendor/orangehrm-devops/common/src/OrangeHRM/DevOps/helper/UserDefinedConfigurationHelper.phpI  hI  eF      [   vendor/orangehrm-devops/common/src/OrangeHRM/DevOps/usageStats/AbstractDiagnosticsCheck.php  h  y      Z   vendor/orangehrm-devops/common/src/OrangeHRM/DevOps/usageStats/ActiveUserCountAnalyzer.php.  h.        b   vendor/orangehrm-devops/common/src/OrangeHRM/DevOps/usageStats/AnalyticDataParameterCollection.php<  h<  ,k*      a   vendor/orangehrm-devops/common/src/OrangeHRM/DevOps/usageStats/ApplicationConfigurationsCheck.php  h        `   vendor/orangehrm-devops/common/src/OrangeHRM/DevOps/usageStats/AttachmentUsageAnalyticsCheck.php
  h
  4=yS      g   vendor/orangehrm-devops/common/src/OrangeHRM/DevOps/usageStats/BuildAndInstallationInformationCheck.php'  h'  1(      O   vendor/orangehrm-devops/common/src/OrangeHRM/DevOps/usageStats/ClosureCheck.php   h   2"      O   vendor/orangehrm-devops/common/src/OrangeHRM/DevOps/usageStats/DataAnalyzer.phpu  hu  3f      X   vendor/orangehrm-devops/common/src/OrangeHRM/DevOps/usageStats/DataAnalyzerInterface.php  h  8ۤ      L   vendor/orangehrm-devops/common/src/OrangeHRM/DevOps/usageStats/DataPoint.phpi   hi   %5T      Z   vendor/orangehrm-devops/common/src/OrangeHRM/DevOps/usageStats/DatabaseDiskUtilization.php	  h	  w|      ^   vendor/orangehrm-devops/common/src/OrangeHRM/DevOps/usageStats/DatabaseOriginatedDataPoint.php+  h+  NJ      O   vendor/orangehrm-devops/common/src/OrangeHRM/DevOps/usageStats/DatabaseSize.php  h  ?ʏ      [   vendor/orangehrm-devops/common/src/OrangeHRM/DevOps/usageStats/DocumentTemplateAnalyzer.php  h  
g      \   vendor/orangehrm-devops/common/src/OrangeHRM/DevOps/usageStats/DomainInformationAnalyzer.php  h  fA      S   vendor/orangehrm-devops/common/src/OrangeHRM/DevOps/usageStats/EmployeeAnalyzer.php  h  hE      c   vendor/orangehrm-devops/common/src/OrangeHRM/DevOps/usageStats/HelpAndTrainingPortalAccessCheck.phpO	  hO	  K"      U   vendor/orangehrm-devops/common/src/OrangeHRM/DevOps/usageStats/JobVacancyAnalyzer.php
  h
  6s       W   vendor/orangehrm-devops/common/src/OrangeHRM/DevOps/usageStats/LastLoginInformation.phpF  hF  (7]      W   vendor/orangehrm-devops/common/src/OrangeHRM/DevOps/usageStats/LeaveRequestAnalyzer.phpx.  hx.   \      Y   vendor/orangehrm-devops/common/src/OrangeHRM/DevOps/usageStats/LicenseParametersCheck.phpt  ht  }W      ^   vendor/orangehrm-devops/common/src/OrangeHRM/DevOps/usageStats/ModuleSettingsAndUsageCheck.php  h  R¤      _   vendor/orangehrm-devops/common/src/OrangeHRM/DevOps/usageStats/MonthWiseActiveEmployeeCount.php=  h=         j   vendor/orangehrm-devops/common/src/OrangeHRM/DevOps/usageStats/MonthWiseFutureLeaveRequestDistribution.php  h  ҡ;h      d   vendor/orangehrm-devops/common/src/OrangeHRM/DevOps/usageStats/MonthWiseLeaveRequestDistribution.php  h  rn      ]   vendor/orangehrm-devops/common/src/OrangeHRM/DevOps/usageStats/MonthWiseLoginDistribution.php  h  >wf      j   vendor/orangehrm-devops/common/src/OrangeHRM/DevOps/usageStats/MonthWiseMobileUsageBreakdownByUserRole.php  h  Ní      d   vendor/orangehrm-devops/common/src/OrangeHRM/DevOps/usageStats/MonthWiseMobileUsageTimesAccessed.php  h   q      `   vendor/orangehrm-devops/common/src/OrangeHRM/DevOps/usageStats/MonthWiseMobileUsageUserCount.phpj  hj  dBx      a   vendor/orangehrm-devops/common/src/OrangeHRM/DevOps/usageStats/NewsAndDocumentArticleAnalyzer.phpa  ha   eɤ      ]   vendor/orangehrm-devops/common/src/OrangeHRM/DevOps/usageStats/NoOfCurrentActiveEmployees.php  h  FY#      Y   vendor/orangehrm-devops/common/src/OrangeHRM/DevOps/usageStats/NoOfCurrentActiveUsers.php  h  %7'_      W   vendor/orangehrm-devops/common/src/OrangeHRM/DevOps/usageStats/NotificationAnalyzer.php  h  R      Y   vendor/orangehrm-devops/common/src/OrangeHRM/DevOps/usageStats/OnBoardingTaskAnalyzer.php   h   ]m      Y   vendor/orangehrm-devops/common/src/OrangeHRM/DevOps/usageStats/OnlineTrainingAnalyzer.php  h  y      _   vendor/orangehrm-devops/common/src/OrangeHRM/DevOps/usageStats/PerformanceAppraisalAnalyzer.phpZ  hZ  U'      V   vendor/orangehrm-devops/common/src/OrangeHRM/DevOps/usageStats/PunchInTimeAnalyzer.phpE  hE  (+>      V   vendor/orangehrm-devops/common/src/OrangeHRM/DevOps/usageStats/ReportUsageAnalyzer.php:8  h:8  tx      V   vendor/orangehrm-devops/common/src/OrangeHRM/DevOps/usageStats/RequestDeskAnalyzer.php&  h&  e      d   vendor/orangehrm-devops/common/src/OrangeHRM/DevOps/usageStats/ScheduledTasksConfigurationsCheck.php<  h<  w      U   vendor/orangehrm-devops/common/src/OrangeHRM/DevOps/usageStats/TimeSheetsAnalyzer.php)  h)   'l      Z   vendor/orangehrm-devops/common/src/OrangeHRM/DevOps/usageStats/TrainingSessionAnalyzer.php=  h=  i      V   vendor/orangehrm-devops/common/src/OrangeHRM/DevOps/usageStats/TravelClaimAnalyzer.php(  h(        W   vendor/orangehrm-devops/common/src/OrangeHRM/DevOps/usageStats/UsageStatisticsCheck.phpT:  hT:  Q      T   vendor/orangehrm-devops/common/src/OrangeHRM/DevOps/usageStats/UserLoginAnalyzer.php   h   ci      \   vendor/orangehrm-devops/common/src/OrangeHRM/DevOps/utility/CronExpressionDecoderUtility.php  h  &A      Q   vendor/orangehrm-devops/common/src/OrangeHRM/DevOps/utility/FileSystemUtility.php|  h|  ^_!      K   vendor/orangehrm-devops/common/src/OrangeHRM/DevOps/utility/HttpUtility.php  h  bk      ]   vendor/orangehrm-devops/common/src/OrangeHRM/DevOps/utility/InstanceDatabaseAccessUtility.phpX  hX  ?jy      c   vendor/orangehrm-devops/common/src/OrangeHRM/DevOps/utility/InstanceLicenseInfoRetrievalUtility.php  h  ^iT      J   vendor/orangehrm-devops/common/src/OrangeHRM/DevOps/utility/LogUtility.php  h  ,      O   vendor/orangehrm-devops/common/src/OrangeHRM/DevOps/utility/PasswordUtility.php  h  9      L   vendor/orangehrm-devops/common/src/OrangeHRM/DevOps/utility/ShellUtility.php(  h(  r      V   vendor/orangehrm-devops/common/src/OrangeHRM/DevOps/utility/TableDescriptorUtility.phpR  hR  忤      V   vendor/orangehrm-devops/common/src/OrangeHRM/DevOps/utility/TimePeriodValueUtility.phpB  hB  8M      N   vendor/orangehrm-devops/common/src/OrangeHRM/DevOps/utility/ValueFormatter.php  h  P!Vg      9   vendor/orangehrm-devops/common/test-env/db/data/.deleteme    h              9   vendor/orangehrm-devops/common/test-env/db/init/.deleteme    h              >   vendor/orangehrm-devops/common/test-env/db/root-home/.deleteme    h              <   vendor/orangehrm-devops/common/test-env/db/root-home/.my.cnf;   h;   Uǐ      8   vendor/orangehrm-devops/common/test-env/db/sql/.deleteme    h              ;   vendor/orangehrm-devops/common/test-env/root-home/.deleteme    h              =   vendor/orangehrm-devops/common/test-result/coverage/.deleteme    h              `   vendor/orangehrm-devops/common/test/OrangeHRM/Test/DevOps/utility/TimePeriodValueUtilityTest.php  h  8׹ʤ      X   vendor/orangehrm-devops/common/test/OrangeHRM/Test/DevOps/utility/ValueFormatterTest.php  h  }K      +   vendor/php-amqplib/php-amqplib/CHANGELOG.md h 2*-      )   vendor/php-amqplib/php-amqplib/History.md2  h2  6      &   vendor/php-amqplib/php-amqplib/LICENSEF_  hF_  y      A   vendor/php-amqplib/php-amqplib/PhpAmqpLib/Channel/AMQPChannel.php  h  m2       E   vendor/php-amqplib/php-amqplib/PhpAmqpLib/Channel/AbstractChannel.phpA;  hA;  |      ;   vendor/php-amqplib/php-amqplib/PhpAmqpLib/Channel/Frame.php  h  lz      <   vendor/php-amqplib/php-amqplib/PhpAmqpLib/Channel/Method.php  h  o      M   vendor/php-amqplib/php-amqplib/PhpAmqpLib/Connection/AMQPConnectionConfig.phpp5  hp5        N   vendor/php-amqplib/php-amqplib/PhpAmqpLib/Connection/AMQPConnectionFactory.php  h  Ap      K   vendor/php-amqplib/php-amqplib/PhpAmqpLib/Connection/AMQPLazyConnection.php  h        N   vendor/php-amqplib/php-amqplib/PhpAmqpLib/Connection/AMQPLazySSLConnection.php  h  |鐤      Q   vendor/php-amqplib/php-amqplib/PhpAmqpLib/Connection/AMQPLazySocketConnection.php   h   ~n      J   vendor/php-amqplib/php-amqplib/PhpAmqpLib/Connection/AMQPSSLConnection.php
  h
  ;[?      M   vendor/php-amqplib/php-amqplib/PhpAmqpLib/Connection/AMQPSocketConnection.php(  h(  c      M   vendor/php-amqplib/php-amqplib/PhpAmqpLib/Connection/AMQPStreamConnection.php  h  h      K   vendor/php-amqplib/php-amqplib/PhpAmqpLib/Connection/AbstractConnection.phpp  hp  їI      `   vendor/php-amqplib/php-amqplib/PhpAmqpLib/Connection/Heartbeat/AbstractSignalHeartbeatSender.php@  h@  cT      W   vendor/php-amqplib/php-amqplib/PhpAmqpLib/Connection/Heartbeat/PCNTLHeartbeatSender.php  h  e      U   vendor/php-amqplib/php-amqplib/PhpAmqpLib/Connection/Heartbeat/SIGHeartbeatSender.php
  h
  cۤ      P   vendor/php-amqplib/php-amqplib/PhpAmqpLib/Exception/AMQPBasicCancelException.php1  h1  ǔ3ݤ      R   vendor/php-amqplib/php-amqplib/PhpAmqpLib/Exception/AMQPChannelClosedException.phpj   hj   읦      V   vendor/php-amqplib/php-amqplib/PhpAmqpLib/Exception/AMQPConnectionBlockedException.phpm  hm  @       U   vendor/php-amqplib/php-amqplib/PhpAmqpLib/Exception/AMQPConnectionClosedException.php   h   fe      M   vendor/php-amqplib/php-amqplib/PhpAmqpLib/Exception/AMQPDataReadException.phpe   he   w068      U   vendor/php-amqplib/php-amqplib/PhpAmqpLib/Exception/AMQPEmptyDeliveryTagException.phpm   hm   ֔      N   vendor/php-amqplib/php-amqplib/PhpAmqpLib/Exception/AMQPExceptionInterface.phpo   ho   6]      T   vendor/php-amqplib/php-amqplib/PhpAmqpLib/Exception/AMQPHeartbeatMissedException.phpu   hu   渖      G   vendor/php-amqplib/php-amqplib/PhpAmqpLib/Exception/AMQPIOException.phpw   hw   f5      K   vendor/php-amqplib/php-amqplib/PhpAmqpLib/Exception/AMQPIOWaitException.phpc   hc   M      T   vendor/php-amqplib/php-amqplib/PhpAmqpLib/Exception/AMQPInvalidArgumentException.php   h   ,DΤ      Q   vendor/php-amqplib/php-amqplib/PhpAmqpLib/Exception/AMQPInvalidFrameException.phpi   hi   M      J   vendor/php-amqplib/php-amqplib/PhpAmqpLib/Exception/AMQPLogicException.php   h   J_      K   vendor/php-amqplib/php-amqplib/PhpAmqpLib/Exception/AMQPNoDataException.php   h   o?k      S   vendor/php-amqplib/php-amqplib/PhpAmqpLib/Exception/AMQPNotImplementedException.phpk   hk   d4а      P   vendor/php-amqplib/php-amqplib/PhpAmqpLib/Exception/AMQPOutOfBoundsException.php   h         O   vendor/php-amqplib/php-amqplib/PhpAmqpLib/Exception/AMQPOutOfRangeException.php   h   |#Ǥ      T   vendor/php-amqplib/php-amqplib/PhpAmqpLib/Exception/AMQPProtocolChannelException.phpm   hm   N!      M   vendor/php-amqplib/php-amqplib/PhpAmqpLib/Exception/AMQPProtocolException.phpF  hF  ^&      L   vendor/php-amqplib/php-amqplib/PhpAmqpLib/Exception/AMQPRuntimeException.php   h   A      K   vendor/php-amqplib/php-amqplib/PhpAmqpLib/Exception/AMQPSocketException.phpc   hc   bҤ      L   vendor/php-amqplib/php-amqplib/PhpAmqpLib/Exception/AMQPTimeoutException.php  h        G   vendor/php-amqplib/php-amqplib/PhpAmqpLib/Exchange/AMQPExchangeType.php   h   6      ;   vendor/php-amqplib/php-amqplib/PhpAmqpLib/Helper/Assert.php  h  }m      ?   vendor/php-amqplib/php-amqplib/PhpAmqpLib/Helper/BigInteger.phpx  hx  N-F      @   vendor/php-amqplib/php-amqplib/PhpAmqpLib/Helper/DebugHelper.php]  h]  x      ?   vendor/php-amqplib/php-amqplib/PhpAmqpLib/Helper/MiscHelper.php  h  9`      J   vendor/php-amqplib/php-amqplib/PhpAmqpLib/Helper/Protocol/MethodMap080.php  h  3\      J   vendor/php-amqplib/php-amqplib/PhpAmqpLib/Helper/Protocol/MethodMap091.php  h  [I      I   vendor/php-amqplib/php-amqplib/PhpAmqpLib/Helper/Protocol/Protocol080.php  h  a      I   vendor/php-amqplib/php-amqplib/PhpAmqpLib/Helper/Protocol/Protocol091.phpg^  hg^  4?      E   vendor/php-amqplib/php-amqplib/PhpAmqpLib/Helper/Protocol/Wait080.php  h  %k
      E   vendor/php-amqplib/php-amqplib/PhpAmqpLib/Helper/Protocol/Wait091.php
  h
  ;oɤ      D   vendor/php-amqplib/php-amqplib/PhpAmqpLib/Helper/SocketConstants.phpx  hx        A   vendor/php-amqplib/php-amqplib/PhpAmqpLib/Message/AMQPMessage.phpg6  hg6  x      5   vendor/php-amqplib/php-amqplib/PhpAmqpLib/Package.php}   h}   )       I   vendor/php-amqplib/php-amqplib/PhpAmqpLib/Wire/AMQPAbstractCollection.phpB7  hB7        <   vendor/php-amqplib/php-amqplib/PhpAmqpLib/Wire/AMQPArray.phpS  hS  $      C   vendor/php-amqplib/php-amqplib/PhpAmqpLib/Wire/AMQPBufferReader.phpp  hp  sҤ      A   vendor/php-amqplib/php-amqplib/PhpAmqpLib/Wire/AMQPByteStream.php  h  Nw#      >   vendor/php-amqplib/php-amqplib/PhpAmqpLib/Wire/AMQPDecimal.php2  h2  16      ?   vendor/php-amqplib/php-amqplib/PhpAmqpLib/Wire/AMQPIOReader.php  h  W;      =   vendor/php-amqplib/php-amqplib/PhpAmqpLib/Wire/AMQPReader.phpy.  hy.  P+      <   vendor/php-amqplib/php-amqplib/PhpAmqpLib/Wire/AMQPTable.php  h  _      =   vendor/php-amqplib/php-amqplib/PhpAmqpLib/Wire/AMQPWriter.php/  h/  kQ*ۤ      <   vendor/php-amqplib/php-amqplib/PhpAmqpLib/Wire/Constants.php2  h2  Q      ?   vendor/php-amqplib/php-amqplib/PhpAmqpLib/Wire/Constants080.php	  h	  S^G      ?   vendor/php-amqplib/php-amqplib/PhpAmqpLib/Wire/Constants091.php  h  -|Ť      @   vendor/php-amqplib/php-amqplib/PhpAmqpLib/Wire/IO/AbstractIO.php  h  "      >   vendor/php-amqplib/php-amqplib/PhpAmqpLib/Wire/IO/SocketIO.php*  h*  F      >   vendor/php-amqplib/php-amqplib/PhpAmqpLib/Wire/IO/StreamIO.php:  h:        (   vendor/php-amqplib/php-amqplib/README.md7  h7  M+      *   vendor/php-amqplib/php-amqplib/codecov.yml\   h\   '      ,   vendor/php-amqplib/php-amqplib/composer.json  h  FvФ      -   vendor/php-amqplib/php-amqplib/phpcs.xml.dist  h  c{      '   vendor/php-amqplib/php-amqplib/test.envf   hf   +Kn         vendor/autoload.php  h  W         src/App.php$  h$           src/check/HttpdVersionCheck.php  h  ]^פ         src/check/HttpdWebRootCheck.php,  h,  }      %   src/check/HttpdDeflateModuleCheck.php  h  Pya@      %   src/check/HttpdRewriteModuleCheck.phpX  hX  ^      !   src/check/HttpdSslModuleCheck.php^  h^   fHӤ      $   src/check/HttpServiceConfigCheck.php  h  ʤ	         src/check/DomainCheck.php8  h8  @      '   src/check/HttpServerParametersCheck.php  h  $L         src/check/EmailQueueCheck.php  h  ]qǞ         src/check/HttpPortCheck.php  h  4gۤ      '   src/check/HostedWithDbRootUserCheck.php  h  	}      "   src/check/FilePermissionsCheck.php/  h/        *   src/check/HttpHeaderXFrameOptionsCheck.php  h  0      $   src/check/HardwareClockTimeCheck.php  h  h      1   src/check/HardwareMonitoringAvailabilityCheck.php  h  :b/         src/check/FirewallCheck.php  h  ?         src/check/CheckCollection.phpd  hd  (      %   src/check/DatabaseFileFormatCheck.php  h  F3         src/check/PhpTimeCheck.php  h  م      "   src/check/ActiveEmployeesCheck.php  h  |      +   src/check/ApplicationConfigurationCheck.php  h  ZK         src/check/PhpVersionCheck.phpX  hX        +   src/check/PopplerUtilsInstallationCheck.php  h  %         src/check/BackupsCheck.php  h  I2      "   src/check/BuildEncryptionCheck.phpP  hP  Tܒ         src/check/Check.php   h   z      #   src/check/CommonCliCommandCheck.php<  h<        +   src/check/CountryWiseEmployeeCountCheck.php[  h[  >         src/check/CpuCheck.phpv  hv  qF      "   src/check/CurrentDateTimeCheck.phpp  hp  ΜF         src/check/RabbitMqCheck.php "  h "  R$      !   src/check/ScheduledTasksCheck.php  h  vݤ          src/check/FsPermissionsCheck.php  h  *         src/check/UsageStatistics.phpʁ  hʁ  "ه      .   src/check/SecurityEnforcingPersistentCheck.php	  h	  vj&ߤ      +   src/check/SecurityEnforcingRuntimeCheck.php  h  ,F>v      &   src/check/SofficeInstallationCheck.php   h   Ҏ߰         src/check/HttpsPortCheck.php  h  AZ@      '   src/check/InDedicatedPartitionCheck.php
  h
           src/check/InstanceFsCheck.php%  h%  Tvf          src/check/KernelVersionCheck.phpD  hD        &   src/check/LibXextInstallationCheck.phpG  hG  #      !   src/check/TLSCertificateCheck.php  h  Gt         src/check/UserInputCheck.php)  h)  _      -   src/check/UtilityPackageInstallationCheck.php  h  	         src/check/UuidCheck.php0  h0  :g'      *   src/check/VarInDedicatedPartitionCheck.php   h   N      &   src/check/VirtualHostFilenameCheck.php	  h	  =       $   src/check/WkpdfInstallationCheck.php  h  #          src/check/PhpParametersCheck.phpG  hG  p"Τ          src/check/PhpExtensionsCheck.php
  h
  {c$      (   src/check/InstallationDirectoryCheck.phpv  hv  7      "   src/check/InstanceConfigAccess.php   h   `      $   src/check/InstanceDatabaseAccess.php   h   H+         src/check/InstanceFsAccess.php   h   </ʤ      %   src/check/InstanceHostedDateCheck.php,  h,  ͇2      "   src/check/InstanceVersionCheck.phpe  he  ^      6   src/check/LeaveAccrualAndCarryForwardScheduleCheck.php  h  +F       +   src/check/LeaveRequestDistributionCheck.php  h  l%٤      $   src/check/LoginDistributionCheck.phpG  hG        "   src/check/ActionPerformerCheck.phpJ  hJ  7e         src/check/Audit.phpx%  hx%  7
sѤ      #   src/check/AutomaticUpdatesCheck.php
  h
  /      )   src/check/MostRecentLoginDetailsCheck.php^  h^  tdǤ      (   src/check/MultiplePhpConfigDiffCheck.php  h  g6Ȥ      (   src/check/MultiplePhpConfigFileCheck.php  h        %   src/check/NavigationTrackingCheck.php  h  bۆ      !   src/check/NotImplementedCheck.php^  h^  #pN      .   src/check/DataDirInDedicatedPartitionCheck.php  h  OB      /   src/check/DatabaseDefaultStorageEngineCheck.phpK  hK  .      %   src/check/DatabaseParametersCheck.phpq  hq  9      "   src/check/DatabaseResultsCheck.php{  h{           src/check/PhpSapiCheck.php  h  ޥ         src/check/DatabaseSizeCheck.phpq  hq  @O         src/check/PhpTimezoneCheck.phpV  hV  s)b         src/check/DatabaseTimeCheck.phpW  hW  &^I      *   src/check/PimActivityDistributionCheck.php  h  {           src/check/DatabaseValueCheck.php  h  *a      "   src/check/DatabaseVersionCheck.phpC  hC  Ű5      '   src/check/DirectoryPermissionsCheck.phpP  hP  ;=g         src/check/DiskUsageCheck.php@  h@  ﹔      "   src/check/DiskUtilizationCheck.php  h  .W         src/check/SsdCheck.php  h  u      )   src/check/ManualPatchApplicationCheck.php  h  Lw         src/check/TimeCheck.phpN  hN  IN"         src/check/MemoryCheck.php  h  B`      $   src/check/MiddlewareVersionCheck.php
  h
  D       ,   src/check/OperatingSystemAndVersionCheck.php  h   d>      &   src/check/OperatingSystemTimeCheck.phpj  hj  Ȥ      &   src/check/FutureLeaveRequestsCheck.php  h  s~      *   src/check/OperatingSystemTimezoneCheck.php`  h`  5Ϥ      #   src/check/OrganizationNameCheck.php   h   h4      %   src/check/OsSpecificCliValueCheck.php	  h	  C         src/check/ParametersCheck.php  h  p         src/check/HasUserInput.php^   h^   C      -   src/check/HelpAndTrainingPortalUsageCheck.php   h   5]\         src/check/HostNameCheck.phpC  hC  9      $   src/formatter/CliOutputFormatter.php  h  d      %   src/formatter/HtmlOutputFormatter.php^  h^  iP      !   src/formatter/OutputFormatter.phpM  hM        $   src/formatter/PdfOutputFormatter.phpd  hd        %   src/formatter/BaseOutputFormatter.php  h  >,){      %   src/formatter/JsonOutputFormatter.php	  h	  X         src/result/DataItemFactory.php  h  0`薤         src/result/DatasetResult.php2  h2  7         src/result/DataRowResult.php  h  }Ф         src/result/ResultCollection.php  h  G          src/result/Result.php^  h^  ymU2      &   src/result/ResultCollectionFactory.php  h  :
          src/result/SimpleValueResult.php  h  3|y         src/result/AuditReport.phpM  hM  U         src/util/ValueFormatter.php
  h
  |      2   src/util/InstanceConfigurationExtractorUtility.phpd  hd  2{      !   src/util/EnvironmentValidator.php  h  ܵF          src/util/CacheManagerUtility.php  h  tq٤      !   src/util/ConfigurationUtility.php  h  K       "   src/util/DatabaseAccessUtility.phpm  hm        )   src/util/CronExpressionDecoderUtility.php  h        2   src/validation/IsAnOrangeHRMInstanceValidation.php  h  F      '   src/validation/PathExistsValidation.phpV  hV  a          src/validation/Validation.php   h          !   src/validation/BaseValidation.php  h  hڤ      /   src/validation/DatabaseConnectionValidation.php  h  Aʍn      +   src/validation/DatabaseConfigValidation.php  h  h)         cache/check_rules.php  h  !'ܤ         cache/full_checks_set.php-(  h-(  f5         cache/initial_checks_set.php  h  8|         cache/test-env.php   h   wϤ      $   templates/full-cli-output-format.txt  h  ުN      &   templates/full-html-output-format.html  h  ,      '   templates/initial-cli-output-format.txt    h              )   templates/initial-html-output-format.html  h  ,         templates/readme.md  h  o         composer.json  h  \>         composer.lock h 7\      <?php
declare(strict_types=1);

define('ROOT_PATH', dirname(__FILE__));

require ROOT_PATH . '/../vendor/autoload.php';

use SeAT\App;

$app = new App();
$app->run();
# Changelog

All notable changes to this project will be documented in this file.
This project adheres to [Semantic Versioning](https://semver.org/).

## x.y.z

### Added

### Changed

### Deprecated

### Removed

### Fixed

## 8.9.0: New features, bug fixes and deprecations

### Added

- `RuleSet::removeMatchingRules()` method
  (for the implementing classes `AtRuleSet` and `DeclarationBlock`) (#1249)
- `RuleSet::removeAllRules()` method
  (for the implementing classes `AtRuleSet` and `DeclarationBlock`) (#1249)
- Add Interface `CSSElement` (#1231)
- Methods `getLineNumber` and `getColumnNumber` which return a nullable `int`
  for the following classes:
  `Comment`, `CSSList`, `SourceException`, `Charset`, `CSSNamespace`, `Import`,
  `Rule`, `DeclarationBlock`, `RuleSet`, `CSSFunction`, `Value` (#1225, #1263)
- `Positionable` interface for CSS items that may have a position
  (line and perhaps column number) in the parsed CSS (#1221)

### Changed

- Parameters for `getAllValues()` are deconflated, so it now takes three (all
  optional), allowing `$element` and `$ruleSearchPattern` to be specified
  separately (#1241)
- Implement `Positionable` in the following CSS item classes:
  `Comment`, `CSSList`, `SourceException`, `Charset`, `CSSNamespace`, `Import`,
  `Rule`, `DeclarationBlock`, `RuleSet`, `CSSFunction`, `Value` (#1225)

### Deprecated

- Support for PHP < 7.2 is deprecated; version 9.0 will require PHP 7.2 or later
  (#1264)
- Passing a `string` or `null` to `RuleSet::removeRule()` is deprecated
  (implementing classes are `AtRuleSet` and `DeclarationBlock`);
  use `removeMatchingRules()` or `removeAllRules()` instead (#1249)
- Passing a `Rule` to `RuleSet::getRules()` or `getRulesAssoc()` is deprecated,
  affecting the implementing classes `AtRuleSet` and `DeclarationBlock`
  (call e.g. `getRules($rule->getRule())` instead) (#1248)
- Passing a string as the first argument to `getAllValues()` is deprecated;
  the search pattern should now be passed as the second argument (#1241)
- Passing a Boolean as the second argument to `getAllValues()` is deprecated;
  the flag for searching in function arguments should now be passed as the third
  argument (#1241)
- `getLineNo()` is deprecated in these classes (use `getLineNumber()` instead):
  `Comment`, `CSSList`, `SourceException`, `Charset`, `CSSNamespace`, `Import`,
  `Rule`, `DeclarationBlock`, `RuleSet`, `CSSFunction`, `Value` (#1225, #1233)
- `Rule::getColNo()` is deprecated (use `getColumnNumber()` instead)
  (#1225, #1233)
- Providing zero as the line number argument to `Rule::setPosition()` is
  deprecated (pass `null` instead if there is no line number) (#1225, #1233)

### Fixed

- Set line number when `RuleSet::addRule()` called with only column number set
  (#1265)
- Ensure first rule added with `RuleSet::addRule()` has valid position (#1262)

## 8.8.0: Bug fixes and deprecations

### Added

- `OutputFormat` properties for space around specific list separators (#880)

### Changed

- Mark the `OutputFormat` constructor as `@internal` (#1131)
- Mark `OutputFormatter` as `@internal` (#896)
- Mark `Selector::isValid()` as `@internal` (#1037)
- Mark parsing-related methods of most CSS elements as `@internal` (#908)
- Mark `OutputFormat::nextLevel()` as `@internal` (#901)
- Make all non-private properties `@internal` (#886)

### Deprecated

- Deprecate extending `OutputFormat` (#1131)
- Deprecate `OutputFormat::get()` and `::set()` (#1107)
- Deprecate support for `-webkit-calc` and `-moz-calc` (#1086)
- Deprecate magic method forwarding from `OutputFormat` to `OutputFormatter`
  (#894)
- Deprecate `__toString()` (#1006)
- Deprecate greedy calculation of selector specificity (#1018)
- Deprecate the IE hack in `Rule` (#993, #1003)
- `OutputFormat` properties for space around list separators as an array (#880)
- Deprecate `OutputFormat::level()` (#870)

### Fixed

- Include comments for all rules in declaration block (#1169)
- Render rules in line and column number order (#1059)
- Create `Size` with correct types in `expandBackgroundShorthand` (#814)
- Parse `@font-face` `src` property as comma-delimited list (#794)

## 8.7.0: Add support for PHP 8.4

### Added

- Add support for PHP 8.4 (#675, #701, #746, #751)

### Changed

- Mark parsing-internal classes and methods as `@internal` (#711)
- Block installations on unsupported higher PHP versions (#691)

### Deprecated

- Deprecate the expansion of shorthand properties (#719)
- Deprecate `Parser::setCharset()` and `Parser::getCharset()` (#703)

### Fixed

- Fix type errors in PHP strict mode (#695)

## 8.6.0

### Added

- Support arithmetic operators in CSS function arguments (#607)
- Add support for inserting an item in a CSS list (#545)
- Add support for the `dvh`, `lvh` and `svh` length units (#415)

### Changed

- Improve performance of Value::parseValue with many delimiters by refactoring
  to remove `array_search()` (#413)

## 8.5.2

### Changed

- Mark all class constants as `@internal` (#500)

### Fixed

- Fix undefined local variable in `CalcFunction::parse()` (#593)

## 8.5.1

### Fixed

- Fix PHP notice caused by parsing invalid color values having less than
  6 characters (#485)
- Fix (regression) failure to parse at-rules with strict parsing (#456)

## 8.5.0

### Added

- Add a method to get an import's media queries (#384)
- Add more unit tests (#381, #382)

### Fixed

- Retain CSSList and Rule comments when rendering CSS (#351)
- Replace invalid `turns` unit with `turn` (#350)
- Also allow string values for rules (#348)
- Fix invalid calc parsing (#169)
- Handle scientific notation when parsing sizes (#179)
- Fix PHP 8.1 compatibility in `ParserState::strsplit()` (#344)

## 8.4.0

### Features

* Support for PHP 8.x
* PHPDoc annotations
* Allow usage of CSS variables inside color functions (by parsing them as
  regular functions)
* Use PSR-12 code style
* *No deprecations*

### Bugfixes

* Improved handling of whitespace in `calc()`
* Fix parsing units whose prefix is also a valid unit, like `vmin`
* Allow passing an object to `CSSList#replace`
* Fix PHP 7.3 warnings
* Correctly parse keyframes with `%`
* Don’t convert large numbers to scientific notation
* Allow a file to end after an `@import`
* Preserve case of CSS variables as specced
* Allow identifiers to use escapes the same way as strings
* No longer use `eval` for the comparison in `getSelectorsBySpecificity`, in
  case it gets passed untrusted input (CVE-2020-13756). Also fixed in 8.3.1,
  8.2.1, 8.1.1, 8.0.1, 7.0.4, 6.0.2, 5.2.1, 5.1.3, 5.0.9, 4.0.1, 3.0.1, 2.0.1,
  1.0.1.
* Prevent an infinite loop when parsing invalid grid line names
* Remove invalid unit `vm`
* Retain rule order after expanding shorthands

### Backwards-incompatible changes

* PHP ≥ 5.6 is now required
* HHVM compatibility target dropped

## 8.3.0 (2019-02-22)

* Refactor parsing logic to mostly reside in the class files whose data
  structure is to be parsed (this should eventually allow us to unit-test
  specific parts of the parsing logic individually).
* Fix error in parsing `calc` expessions when the first operand is a negative
  number, thanks to @raxbg.
* Support parsing CSS4 colors in hex notation with alpha values, thanks to
  @raxbg.
* Swallow more errors in lenient mode, thanks to @raxbg.
* Allow specifying arbitrary strings to output before and after declaration
  blocks, thanks to @westonruter.
* *No backwards-incompatible changes*
* *No deprecations*

## 8.2.0 (2018-07-13)

* Support parsing `calc()`, thanks to @raxbg.
* Support parsing grid-lines, again thanks to @raxbg.
* Support parsing legacy IE filters (`progid:`) in lenient mode, thanks to
  @FMCorz
* Performance improvements parsing large files, again thanks to @FMCorz
* *No backwards-incompatible changes*
* *No deprecations*

## 8.1.0 (2016-07-19)

* Comments are no longer silently ignored but stored with the object with which
  they appear (no render support, though). Thanks to @FMCorz.
* The IE hacks using `\0` and `\9` can now be parsed (and rendered) in lenient
  mode. Thanks (again) to @FMCorz.
* Media queries with or without spaces before the query are parsed. Still no
  *real* parsing support, though. Sorry…
* PHPUnit is now listed as a dev-dependency in composer.json.
* *No backwards-incompatible changes*
* *No deprecations*

## 8.0.0 (2016-06-30)

* Store source CSS line numbers in tokens and parsing exceptions.
* *No deprecations*

### Backwards-incompatible changes

* Unrecoverable parser errors throw an exception of type
  `Sabberworm\CSS\Parsing\SourceException` instead of `\Exception`.

## 7.0.3 (2016-04-27)

* Fixed parsing empty CSS when multibyte is off
* *No backwards-incompatible changes*
* *No deprecations*

## 7.0.2 (2016-02-11)

* 150 time performance boost thanks
  to @[ossinkine](https://github.com/ossinkine)
* *No backwards-incompatible changes*
* *No deprecations*

## 7.0.1 (2015-12-25)

* No more suppressed `E_NOTICE`
* *No backwards-incompatible changes*
* *No deprecations*

## 7.0.0 (2015-08-24)

* Compatibility with PHP 7. Well timed, eh?
* *No deprecations*

### Backwards-incompatible changes

* The `Sabberworm\CSS\Value\String` class has been renamed to
  `Sabberworm\CSS\Value\CSSString`.

## 6.0.1 (2015-08-24)

* Remove some declarations in interfaces incompatible with PHP 5.3 (< 5.3.9)
* *No deprecations*

## 6.0.0 (2014-07-03)

* Format output using Sabberworm\CSS\OutputFormat
* *No backwards-incompatible changes*

### Deprecations

* The parse() method replaces __toString with an optional argument (instance of
  the OutputFormat class)

## 5.2.0 (2014-06-30)

* Support removing a selector from a declaration block using
  `$oBlock->removeSelector($mSelector)`
* Introduce a specialized exception (Sabberworm\CSS\Parsing\OuputException) for
  exceptions during output rendering

* *No deprecations*

#### Backwards-incompatible changes

* Outputting a declaration block that has no selectors throws an OuputException
  instead of outputting an invalid ` {…}` into the CSS document.

## 5.1.2 (2013-10-30)

* Remove the use of consumeUntil in comment parsing. This makes it possible to
  parse comments such as `/** Perfectly valid **/`
* Add fr relative size unit
* Fix some issues with HHVM
* *No backwards-incompatible changes*
* *No deprecations*

## 5.1.1 (2013-10-28)

* Updated CHANGELOG.md to reflect changes since 5.0.4
* *No backwards-incompatible changes*
* *No deprecations*

## 5.1.0 (2013-10-24)

* Performance enhancements by Michael M Slusarz
* More rescue entry points for lenient parsing (unexpected tokens between
  declaration blocks and unclosed comments)
* *No backwards-incompatible changes*
* *No deprecations*

## 5.0.8 (2013-08-15)

* Make default settings’ multibyte parsing option dependent on whether or not
  the mbstring extension is actually installed.
* *No backwards-incompatible changes*
* *No deprecations*

## 5.0.7 (2013-08-04)

* Fix broken decimal point output optimization
* *No backwards-incompatible changes*
* *No deprecations*

## 5.0.6 (2013-05-31)

* Fix broken unit test
* *No backwards-incompatible changes*
* *No deprecations*

## 5.0.5 (2013-04-17)

* Initial support for lenient parsing (setting this parser option will catch
  some exceptions internally and recover the parser’s state as neatly as
  possible).
* *No backwards-incompatible changes*
* *No deprecations*

## 5.0.4 (2013-03-21)

* Don’t output floats with locale-aware separator chars
* *No backwards-incompatible changes*
* *No deprecations*

## 5.0.3 (2013-03-21)

* More size units recognized
* *No backwards-incompatible changes*
* *No deprecations*

## 5.0.2 (2013-03-21)

* CHANGELOG.md file added to distribution
* *No backwards-incompatible changes*
* *No deprecations*

## 5.0.1 (2013-03-20)

* Internal cleanup
* *No backwards-incompatible changes*
* *No deprecations*

## 5.0.0 (2013-03-20)

* Correctly parse all known CSS 3 units (including Hz and kHz).
* Output RGB colors in short (#aaa or #ababab) notation
* Be case-insensitive when parsing identifiers.
* *No deprecations*

### Backwards-incompatible changes

* `Sabberworm\CSS\Value\Color`’s `__toString` method overrides `CSSList`’s to
  maybe return something other than `type(value, …)` (see above).

## 4.0.0 (2013-03-19)

* Support for more @-rules
* Generic interface `Sabberworm\CSS\Property\AtRule`, implemented by all @-rule
  classes
* *No deprecations*

### Backwards-incompatible changes

* `Sabberworm\CSS\RuleSet\AtRule` renamed to `Sabberworm\CSS\RuleSet\AtRuleSet`
* `Sabberworm\CSS\CSSList\MediaQuery` renamed to
  `Sabberworm\CSS\RuleSet\CSSList\AtRuleBlockList` with differing semantics and
  API (which also works for other block-list-based @-rules like `@supports`).

## 3.0.0 (2013-03-06)

* Support for lenient parsing (on by default)
* *No deprecations*

### Backwards-incompatible changes

* All properties (like whether or not to use `mb_`-functions, which default
  charset to use and – new – whether or not to be forgiving when parsing) are
  now encapsulated in an instance of `Sabberworm\CSS\Settings` which can be
  passed as the second argument to `Sabberworm\CSS\Parser->__construct()`.
* Specifying a charset as the second argument to
  `Sabberworm\CSS\Parser->__construct()` is no longer supported. Use
  `Sabberworm\CSS\Settings::create()->withDefaultCharset('some-charset')`
  instead.
* Setting `Sabberworm\CSS\Parser->bUseMbFunctions` has no effect. Use
  `Sabberworm\CSS\Settings::create()->withMultibyteSupport(true/false)` instead.
* `Sabberworm\CSS\Parser->parse()` may throw a
  `Sabberworm\CSS\Parsing\UnexpectedTokenException` when in strict parsing mode.

## 2.0.0 (2013-01-29)

* Allow multiple rules of the same type per rule set

### Backwards-incompatible changes

* `Sabberworm\CSS\RuleSet->getRules()` returns an index-based array instead of
  an associative array. Use `Sabberworm\CSS\RuleSet->getRulesAssoc()` (which
  eliminates duplicate rules and lets the later rule of the same name win).
* `Sabberworm\CSS\RuleSet->removeRule()` works as it did before except when
  passed an instance of `Sabberworm\CSS\Rule\Rule`, in which case it would only
  remove the exact rule given instead of all the rules of the same type. To get
  the old behaviour, use `Sabberworm\CSS\RuleSet->removeRule($oRule->getRule()`;

## 1.0

Initial release of a stable public API.

## 0.9

Last version not to use PSR-0 project organization semantics.
MIT License

Copyright (c) 2011 Raphael Schweikert, https://www.sabberworm.com/

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
# PHP CSS Parser

[![Build Status](https://github.com/sabberworm/PHP-CSS-Parser/workflows/CI/badge.svg?branch=master)](https://github.com/sabberworm/PHP-CSS-Parser/actions/)

A Parser for CSS Files written in PHP. Allows extraction of CSS files into a data structure, manipulation of said structure and output as (optimized) CSS.

## Usage

### Installation using Composer

```bash
composer require sabberworm/php-css-parser
```

### Extraction

To use the CSS Parser, create a new instance. The constructor takes the following form:

```php
new \Sabberworm\CSS\Parser($css);
```

To read a file, for example, you’d do the following:

```php
$parser = new \Sabberworm\CSS\Parser(file_get_contents('somefile.css'));
$cssDocument = $parser->parse();
```

The resulting CSS document structure can be manipulated prior to being output.

### Options

#### Charset

The charset option will only be used if the CSS file does not contain an `@charset` declaration. UTF-8 is the default, so you won’t have to create a settings object at all if you don’t intend to change that.

```php
$settings = \Sabberworm\CSS\Settings::create()
    ->withDefaultCharset('windows-1252');
$parser = new \Sabberworm\CSS\Parser($css, $settings);
```

#### Strict parsing

To have the parser throw an exception when encountering invalid/unknown constructs (as opposed to trying to ignore them and carry on parsing), supply a thusly configured `\Sabberworm\CSS\Settings` object:

```php
$parser = new \Sabberworm\CSS\Parser(
    file_get_contents('somefile.css'),
    \Sabberworm\CSS\Settings::create()->beStrict()
);
```

Note that this will also disable a workaround for parsing the unquoted variant of the legacy IE-specific `filter` rule.

#### Disable multibyte functions

To achieve faster parsing, you can choose to have PHP-CSS-Parser use regular string functions instead of `mb_*` functions. This should work fine in most cases, even for UTF-8 files, as all the multibyte characters are in string literals. Still it’s not recommended using this with input you have no control over as it’s not thoroughly covered by test cases.

```php
$settings = \Sabberworm\CSS\Settings::create()->withMultibyteSupport(false);
$parser = new \Sabberworm\CSS\Parser($css, $settings);
```

### Manipulation

The resulting data structure consists mainly of five basic types: `CSSList`, `RuleSet`, `Rule`, `Selector` and `Value`. There are two additional types used: `Import` and `Charset`, which you won’t use often.

#### CSSList

`CSSList` represents a generic CSS container, most likely containing declaration blocks (rule sets with a selector), but it may also contain at-rules, charset declarations, etc.

To access the items stored in a `CSSList` – like the document you got back when calling `$parser->parse()` –, use `getContents()`, then iterate over that collection and use `instanceof` to check whether you’re dealing with another `CSSList`, a `RuleSet`, a `Import` or a `Charset`.

To append a new item (selector, media query, etc.) to an existing `CSSList`, construct it using the constructor for this class and use the `append($oItem)` method.

#### RuleSet

`RuleSet` is a container for individual rules. The most common form of a rule set is one constrained by a selector. The following concrete subtypes exist:

* `AtRuleSet` – for generic at-rules for generic at-rules which are not covered by specific classes, i.e., not `@import`, `@charset` or `@media`. A common example for this is `@font-face`.
* `DeclarationBlock` – a `RuleSet` constrained by a `Selector`; contains an array of selector objects (comma-separated in the CSS) as well as the rules to be applied to the matching elements.

Note: A `CSSList` can contain other `CSSList`s (and `Import`s as well as a `Charset`), while a `RuleSet` can only contain `Rule`s.

If you want to manipulate a `RuleSet`, use the methods `addRule(Rule $rule)`, `getRules()` and `removeRule($rule)` (which accepts either a `Rule` or a rule name; optionally suffixed by a dash to remove all related rules).

#### Rule

`Rule`s just have a string key (the rule) and a `Value`.

#### Value

`Value` is an abstract class that only defines the `render` method. The concrete subclasses for atomic value types are:

* `Size` – consists of a numeric `size` value and a unit.
* `Color` – colors can be input in the form #rrggbb, #rgb or schema(val1, val2, …) but are always stored as an array of ('s' => val1, 'c' => val2, 'h' => val3, …) and output in the second form.
* `CSSString` – this is just a wrapper for quoted strings to distinguish them from keywords; always output with double quotes.
* `URL` – URLs in CSS; always output in `URL("")` notation.

There is another abstract subclass of `Value`, `ValueList`: A `ValueList` represents a lists of `Value`s, separated by some separation character (mostly `,`, whitespace, or `/`).

There are two types of `ValueList`s:

* `RuleValueList` – The default type, used to represent all multivalued rules like `font: bold 12px/3 Helvetica, Verdana, sans-serif;` (where the value would be a whitespace-separated list of the primitive value `bold`, a slash-separated list and a comma-separated list).
* `CSSFunction` – A special kind of value that also contains a function name and where the values are the function’s arguments. Also handles equals-sign-separated argument lists like `filter: alpha(opacity=90);`.

#### Convenience methods

There are a few convenience methods on `Document` to ease finding, manipulating and deleting rules:

* `getAllDeclarationBlocks()` – does what it says; no matter how deeply nested the selectors are. Aliased as `getAllSelectors()`.
* `getAllRuleSets()` – does what it says; no matter how deeply nested the rule sets are.
* `getAllValues()` – finds all `Value` objects inside `Rule`s.

## To-Do

* More convenience methods (like `selectorsWithElement($sId/Class/TagName)`, `attributesOfType($type)`, `removeAttributesOfType($type)`)
* Real multibyte support. Currently, only multibyte charsets whose first 255 code points take up only one byte and are identical with ASCII are supported (yes, UTF-8 fits this description).
* Named color support (using `Color` instead of an anonymous string literal)

## Use cases

### Use `Parser` to prepend an ID to all selectors

```php
$myId = "#my_id";
$parser = new \Sabberworm\CSS\Parser($css);
$cssDocument = $parser->parse();
foreach ($cssDocument->getAllDeclarationBlocks() as $block) {
    foreach ($block->getSelectors() as $selector) {
        // Loop over all selector parts (the comma-separated strings in a
        // selector) and prepend the ID.
        $selector->setSelector($myId.' '.$selector->getSelector());
    }
}
```

### Shrink all absolute sizes to half

```php
$parser = new \Sabberworm\CSS\Parser($css);
$cssDocument = $parser->parse();
foreach ($cssDocument->getAllValues() as $value) {
    if ($value instanceof CSSSize && !$value->isRelative()) {
        $value->setSize($value->getSize() / 2);
    }
}
```

### Remove unwanted rules

```php
$parser = new \Sabberworm\CSS\Parser($css);
$cssDocument = $parser->parse();
foreach($cssDocument->getAllRuleSets() as $oRuleSet) {
    // Note that the added dash will make this remove all rules starting with
    // `font-` (like `font-size`, `font-weight`, etc.) as well as a potential
    // `font` rule.
    $oRuleSet->removeRule('font-'); 
    $oRuleSet->removeRule('cursor');
}
```

### Output

To output the entire CSS document into a variable, just use `->render()`:

```php
$parser = new \Sabberworm\CSS\Parser(file_get_contents('somefile.css'));
$cssDocument = $parser->parse();
print $cssDocument->render();
```

If you want to format the output, pass an instance of type `\Sabberworm\CSS\OutputFormat`:

```php
$format = \Sabberworm\CSS\OutputFormat::create()
    ->indentWithSpaces(4)->setSpaceBetweenRules("\n");
print $cssDocument->render($format);
```

Or use one of the predefined formats:

```php
print $cssDocument->render(Sabberworm\CSS\OutputFormat::createPretty());
print $cssDocument->render(Sabberworm\CSS\OutputFormat::createCompact());
```

To see what you can do with output formatting, look at the tests in `tests/OutputFormatTest.php`.

## Examples

### Example 1 (At-Rules)

#### Input

```css
@charset "utf-8";

@font-face {
  font-family: "CrassRoots";
  src: url("../media/cr.ttf");
}

html, body {
    font-size: 1.6em;
}

@keyframes mymove {
    from { top: 0px; }
    to { top: 200px; }
}

```

<details>
  <summary><b>Structure (<code>var_dump()</code>)</b></summary>

```php
class Sabberworm\CSS\CSSList\Document#4 (2) {
  protected $aContents =>
  array(4) {
    [0] =>
    class Sabberworm\CSS\Property\Charset#6 (2) {
      private $sCharset =>
      class Sabberworm\CSS\Value\CSSString#5 (2) {
        private $sString =>
        string(5) "utf-8"
        protected $iLineNo =>
        int(1)
      }
      protected $iLineNo =>
      int(1)
    }
    [1] =>
    class Sabberworm\CSS\RuleSet\AtRuleSet#7 (4) {
      private $sType =>
      string(9) "font-face"
      private $sArgs =>
      string(0) ""
      private $aRules =>
      array(2) {
        'font-family' =>
        array(1) {
          [0] =>
          class Sabberworm\CSS\Rule\Rule#8 (4) {
            private $sRule =>
            string(11) "font-family"
            private $mValue =>
            class Sabberworm\CSS\Value\CSSString#9 (2) {
              private $sString =>
              string(10) "CrassRoots"
              protected $iLineNo =>
              int(4)
            }
            private $bIsImportant =>
            bool(false)
            protected $iLineNo =>
            int(4)
          }
        }
        'src' =>
        array(1) {
          [0] =>
          class Sabberworm\CSS\Rule\Rule#10 (4) {
            private $sRule =>
            string(3) "src"
            private $mValue =>
            class Sabberworm\CSS\Value\URL#11 (2) {
              private $oURL =>
              class Sabberworm\CSS\Value\CSSString#12 (2) {
                private $sString =>
                string(15) "../media/cr.ttf"
                protected $iLineNo =>
                int(5)
              }
              protected $iLineNo =>
              int(5)
            }
            private $bIsImportant =>
            bool(false)
            protected $iLineNo =>
            int(5)
          }
        }
      }
      protected $iLineNo =>
      int(3)
    }
    [2] =>
    class Sabberworm\CSS\RuleSet\DeclarationBlock#13 (3) {
      private $aSelectors =>
      array(2) {
        [0] =>
        class Sabberworm\CSS\Property\Selector#14 (2) {
          private $sSelector =>
          string(4) "html"
          private $iSpecificity =>
          NULL
        }
        [1] =>
        class Sabberworm\CSS\Property\Selector#15 (2) {
          private $sSelector =>
          string(4) "body"
          private $iSpecificity =>
          NULL
        }
      }
      private $aRules =>
      array(1) {
        'font-size' =>
        array(1) {
          [0] =>
          class Sabberworm\CSS\Rule\Rule#16 (4) {
            private $sRule =>
            string(9) "font-size"
            private $mValue =>
            class Sabberworm\CSS\Value\Size#17 (4) {
              private $fSize =>
              double(1.6)
              private $sUnit =>
              string(2) "em"
              private $bIsColorComponent =>
              bool(false)
              protected $iLineNo =>
              int(9)
            }
            private $bIsImportant =>
            bool(false)
            protected $iLineNo =>
            int(9)
          }
        }
      }
      protected $iLineNo =>
      int(8)
    }
    [3] =>
    class Sabberworm\CSS\CSSList\KeyFrame#18 (4) {
      private $vendorKeyFrame =>
      string(9) "keyframes"
      private $animationName =>
      string(6) "mymove"
      protected $aContents =>
      array(2) {
        [0] =>
        class Sabberworm\CSS\RuleSet\DeclarationBlock#19 (3) {
          private $aSelectors =>
          array(1) {
            [0] =>
            class Sabberworm\CSS\Property\Selector#20 (2) {
              private $sSelector =>
              string(4) "from"
              private $iSpecificity =>
              NULL
            }
          }
          private $aRules =>
          array(1) {
            'top' =>
            array(1) {
              [0] =>
              class Sabberworm\CSS\Rule\Rule#21 (4) {
                private $sRule =>
                string(3) "top"
                private $mValue =>
                class Sabberworm\CSS\Value\Size#22 (4) {
                  private $fSize =>
                  double(0)
                  private $sUnit =>
                  string(2) "px"
                  private $bIsColorComponent =>
                  bool(false)
                  protected $iLineNo =>
                  int(13)
                }
                private $bIsImportant =>
                bool(false)
                protected $iLineNo =>
                int(13)
              }
            }
          }
          protected $iLineNo =>
          int(13)
        }
        [1] =>
        class Sabberworm\CSS\RuleSet\DeclarationBlock#23 (3) {
          private $aSelectors =>
          array(1) {
            [0] =>
            class Sabberworm\CSS\Property\Selector#24 (2) {
              private $sSelector =>
              string(2) "to"
              private $iSpecificity =>
              NULL
            }
          }
          private $aRules =>
          array(1) {
            'top' =>
            array(1) {
              [0] =>
              class Sabberworm\CSS\Rule\Rule#25 (4) {
                private $sRule =>
                string(3) "top"
                private $mValue =>
                class Sabberworm\CSS\Value\Size#26 (4) {
                  private $fSize =>
                  double(200)
                  private $sUnit =>
                  string(2) "px"
                  private $bIsColorComponent =>
                  bool(false)
                  protected $iLineNo =>
                  int(14)
                }
                private $bIsImportant =>
                bool(false)
                protected $iLineNo =>
                int(14)
              }
            }
          }
          protected $iLineNo =>
          int(14)
        }
      }
      protected $iLineNo =>
      int(12)
    }
  }
  protected $iLineNo =>
  int(1)
}

```
</details>

#### Output (`render()`)

```css
@charset "utf-8";
@font-face {font-family: "CrassRoots";src: url("../media/cr.ttf");}
html, body {font-size: 1.6em;}
@keyframes mymove {from {top: 0px;} to {top: 200px;}}
```

### Example 2 (Values)

#### Input

```css
#header {
    margin: 10px 2em 1cm 2%;
    font-family: Verdana, Helvetica, "Gill Sans", sans-serif;
    color: red !important;
}

```

<details>
  <summary><b>Structure (<code>var_dump()</code>)</b></summary>

```php
class Sabberworm\CSS\CSSList\Document#4 (2) {
  protected $aContents =>
  array(1) {
    [0] =>
    class Sabberworm\CSS\RuleSet\DeclarationBlock#5 (3) {
      private $aSelectors =>
      array(1) {
        [0] =>
        class Sabberworm\CSS\Property\Selector#6 (2) {
          private $sSelector =>
          string(7) "#header"
          private $iSpecificity =>
          NULL
        }
      }
      private $aRules =>
      array(3) {
        'margin' =>
        array(1) {
          [0] =>
          class Sabberworm\CSS\Rule\Rule#7 (4) {
            private $sRule =>
            string(6) "margin"
            private $mValue =>
            class Sabberworm\CSS\Value\RuleValueList#12 (3) {
              protected $aComponents =>
              array(4) {
                [0] =>
                class Sabberworm\CSS\Value\Size#8 (4) {
                  private $fSize =>
                  double(10)
                  private $sUnit =>
                  string(2) "px"
                  private $bIsColorComponent =>
                  bool(false)
                  protected $iLineNo =>
                  int(2)
                }
                [1] =>
                class Sabberworm\CSS\Value\Size#9 (4) {
                  private $fSize =>
                  double(2)
                  private $sUnit =>
                  string(2) "em"
                  private $bIsColorComponent =>
                  bool(false)
                  protected $iLineNo =>
                  int(2)
                }
                [2] =>
                class Sabberworm\CSS\Value\Size#10 (4) {
                  private $fSize =>
                  double(1)
                  private $sUnit =>
                  string(2) "cm"
                  private $bIsColorComponent =>
                  bool(false)
                  protected $iLineNo =>
                  int(2)
                }
                [3] =>
                class Sabberworm\CSS\Value\Size#11 (4) {
                  private $fSize =>
                  double(2)
                  private $sUnit =>
                  string(1) "%"
                  private $bIsColorComponent =>
                  bool(false)
                  protected $iLineNo =>
                  int(2)
                }
              }
              protected $sSeparator =>
              string(1) " "
              protected $iLineNo =>
              int(2)
            }
            private $bIsImportant =>
            bool(false)
            protected $iLineNo =>
            int(2)
          }
        }
        'font-family' =>
        array(1) {
          [0] =>
          class Sabberworm\CSS\Rule\Rule#13 (4) {
            private $sRule =>
            string(11) "font-family"
            private $mValue =>
            class Sabberworm\CSS\Value\RuleValueList#15 (3) {
              protected $aComponents =>
              array(4) {
                [0] =>
                string(7) "Verdana"
                [1] =>
                string(9) "Helvetica"
                [2] =>
                class Sabberworm\CSS\Value\CSSString#14 (2) {
                  private $sString =>
                  string(9) "Gill Sans"
                  protected $iLineNo =>
                  int(3)
                }
                [3] =>
                string(10) "sans-serif"
              }
              protected $sSeparator =>
              string(1) ","
              protected $iLineNo =>
              int(3)
            }
            private $bIsImportant =>
            bool(false)
            protected $iLineNo =>
            int(3)
          }
        }
        'color' =>
        array(1) {
          [0] =>
          class Sabberworm\CSS\Rule\Rule#16 (4) {
            private $sRule =>
            string(5) "color"
            private $mValue =>
            string(3) "red"
            private $bIsImportant =>
            bool(true)
            protected $iLineNo =>
            int(4)
          }
        }
      }
      protected $iLineNo =>
      int(1)
    }
  }
  protected $iLineNo =>
  int(1)
}

```
</details>

#### Output (`render()`)

```css
#header {margin: 10px 2em 1cm 2%;font-family: Verdana,Helvetica,"Gill Sans",sans-serif;color: red !important;}
```

## Contributors/Thanks to

* [oliverklee](https://github.com/oliverklee) for lots of refactorings, code modernizations and CI integrations
* [raxbg](https://github.com/raxbg) for contributions to parse `calc`, grid lines, and various bugfixes.
* [westonruter](https://github.com/westonruter) for bugfixes and improvements.
* [FMCorz](https://github.com/FMCorz) for many patches and suggestions, for being able to parse comments and IE hacks (in lenient mode).
* [Lullabot](https://github.com/Lullabot) for a patch that allows to know the line number for each parsed token.
* [ju1ius](https://github.com/ju1ius) for the specificity parsing code and the ability to expand/compact shorthand properties.
* [ossinkine](https://github.com/ossinkine) for a 150 time performance boost.
* [GaryJones](https://github.com/GaryJones) for lots of input and [https://css-specificity.info/](https://css-specificity.info/).
* [docteurklein](https://github.com/docteurklein) for output formatting and `CSSList->remove()` inspiration.
* [nicolopignatelli](https://github.com/nicolopignatelli) for PSR-0 compatibility.
* [diegoembarcadero](https://github.com/diegoembarcadero) for keyframe at-rule parsing.
* [goetas](https://github.com/goetas) for @namespace at-rule support.
* [View full list](https://github.com/sabberworm/PHP-CSS-Parser/contributors)

## Misc

* Legacy Support: The latest pre-PSR-0 version of this project can be checked with the `0.9.0` tag.
* Running Tests: To run all unit tests for this project, run `composer install` to install phpunit and use `./vendor/bin/phpunit`.
{
    "name": "sabberworm/php-css-parser",
    "type": "library",
    "description": "Parser for CSS Files written in PHP",
    "keywords": [
        "parser",
        "css",
        "stylesheet"
    ],
    "homepage": "https://www.sabberworm.com/blog/2010/6/10/php-css-parser",
    "license": "MIT",
    "authors": [
        {
            "name": "Raphael Schweikert"
        },
        {
            "name": "Oliver Klee",
            "email": "github@oliverklee.de"
        },
        {
            "name": "Jake Hotson",
            "email": "jake.github@qzdesign.co.uk"
        }
    ],
    "require": {
        "php": "^5.6.20 || ^7.0.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0",
        "ext-iconv": "*"
    },
    "require-dev": {
        "phpunit/phpunit": "5.7.27 || 6.5.14 || 7.5.20 || 8.5.41",
        "rawr/cross-data-providers": "^2.0.0"
    },
    "suggest": {
        "ext-mbstring": "for parsing UTF-8 CSS"
    },
    "autoload": {
        "psr-4": {
            "Sabberworm\\CSS\\": "src/"
        }
    },
    "autoload-dev": {
        "psr-4": {
            "Sabberworm\\CSS\\Tests\\": "tests/"
        }
    },
    "extra": {
        "branch-alias": {
            "dev-main": "9.0.x-dev"
        }
    }
}
<?php

declare(strict_types=1);

namespace Sabberworm\CSS;

/**
 * Represents any entity in the CSS that is encapsulated by a class.
 *
 * Its primary purpose is to provide a type for use with `Document::getAllValues()`
 * when a subset of values from a particular part of the document is required.
 *
 * Thus, elements which don't contain `Value`s (such as statement at-rules) don't need to implement this.
 *
 * It extends `Renderable` because every element is renderable.
 */
interface CSSElement extends Renderable {}
<?php

namespace Sabberworm\CSS\CSSList;

use Sabberworm\CSS\OutputFormat;
use Sabberworm\CSS\Property\AtRule;

/**
 * A `BlockList` constructed by an unknown at-rule. `@media` rules are rendered into `AtRuleBlockList` objects.
 */
class AtRuleBlockList extends CSSBlockList implements AtRule
{
    /**
     * @var string
     */
    private $sType;

    /**
     * @var string
     */
    private $sArgs;

    /**
     * @param string $sType
     * @param string $sArgs
     * @param int $iLineNo
     */
    public function __construct($sType, $sArgs = '', $iLineNo = 0)
    {
        parent::__construct($iLineNo);
        $this->sType = $sType;
        $this->sArgs = $sArgs;
    }

    /**
     * @return string
     */
    public function atRuleName()
    {
        return $this->sType;
    }

    /**
     * @return string
     */
    public function atRuleArgs()
    {
        return $this->sArgs;
    }

    /**
     * @return string
     *
     * @deprecated in V8.8.0, will be removed in V9.0.0. Use `render` instead.
     */
    public function __toString()
    {
        return $this->render(new OutputFormat());
    }

    /**
     * @param OutputFormat|null $oOutputFormat
     *
     * @return string
     */
    public function render($oOutputFormat)
    {
        $sResult = $oOutputFormat->comments($this);
        $sResult .= $oOutputFormat->sBeforeAtRuleBlock;
        $sArgs = $this->sArgs;
        if ($sArgs) {
            $sArgs = ' ' . $sArgs;
        }
        $sResult .= "@{$this->sType}$sArgs{$oOutputFormat->spaceBeforeOpeningBrace()}{";
        $sResult .= $this->renderListContents($oOutputFormat);
        $sResult .= '}';
        $sResult .= $oOutputFormat->sAfterAtRuleBlock;
        return $sResult;
    }

    /**
     * @return bool
     */
    public function isRootList()
    {
        return false;
    }
}
<?php

namespace Sabberworm\CSS\CSSList;

use Sabberworm\CSS\CSSElement;
use Sabberworm\CSS\Property\Selector;
use Sabberworm\CSS\Rule\Rule;
use Sabberworm\CSS\RuleSet\DeclarationBlock;
use Sabberworm\CSS\RuleSet\RuleSet;
use Sabberworm\CSS\Value\CSSFunction;
use Sabberworm\CSS\Value\Value;
use Sabberworm\CSS\Value\ValueList;

/**
 * A `CSSBlockList` is a `CSSList` whose `DeclarationBlock`s are guaranteed to contain valid declaration blocks or
 * at-rules.
 *
 * Most `CSSList`s conform to this category but some at-rules (such as `@keyframes`) do not.
 */
abstract class CSSBlockList extends CSSList
{
    /**
     * @param int $iLineNo
     */
    public function __construct($iLineNo = 0)
    {
        parent::__construct($iLineNo);
    }

    /**
     * @param array<int, DeclarationBlock> $aResult
     *
     * @return void
     */
    protected function allDeclarationBlocks(array &$aResult)
    {
        foreach ($this->aContents as $mContent) {
            if ($mContent instanceof DeclarationBlock) {
                $aResult[] = $mContent;
            } elseif ($mContent instanceof CSSBlockList) {
                $mContent->allDeclarationBlocks($aResult);
            }
        }
    }

    /**
     * @param array<int, RuleSet> $aResult
     *
     * @return void
     */
    protected function allRuleSets(array &$aResult)
    {
        foreach ($this->aContents as $mContent) {
            if ($mContent instanceof RuleSet) {
                $aResult[] = $mContent;
            } elseif ($mContent instanceof CSSBlockList) {
                $mContent->allRuleSets($aResult);
            }
        }
    }

    /**
     * Returns all `Value` objects found recursively in `Rule`s in the tree.
     *
     * @param CSSElement|string|null $element
     *        This is the `CSSList` or `RuleSet` to start the search from (defaults to the whole document).
     *        If a string is given, it is used as a rule name filter.
     *        Passing a string for this parameter is deprecated in version 8.9.0, and will not work from v9.0;
     *        use the following parameter to pass a rule name filter instead.
     * @param string|bool|null $ruleSearchPatternOrSearchInFunctionArguments
     *        This allows filtering rules by property name
     *        (e.g. if "color" is passed, only `Value`s from `color` properties will be returned,
     *        or if "font-" is provided, `Value`s from all font rules, like `font-size`, and including `font` itself,
     *        will be returned).
     *        If a Boolean is provided, it is treated as the `$searchInFunctionArguments` argument.
     *        Passing a Boolean for this parameter is deprecated in version 8.9.0, and will not work from v9.0;
     *        use the `$searchInFunctionArguments` parameter instead.
     * @param bool $searchInFunctionArguments whether to also return Value objects used as Function arguments.
     *
     * @return array<int, Value>
     *
     * @see RuleSet->getRules()
     */
    public function getAllValues(
        $element = null,
        $ruleSearchPatternOrSearchInFunctionArguments = null,
        $searchInFunctionArguments = false
    ) {
        if (\is_bool($ruleSearchPatternOrSearchInFunctionArguments)) {
            $searchInFunctionArguments = $ruleSearchPatternOrSearchInFunctionArguments;
            $searchString = null;
        } else {
            $searchString = $ruleSearchPatternOrSearchInFunctionArguments;
        }

        if ($element === null) {
            $element = $this;
        } elseif (\is_string($element)) {
            $searchString = $element;
            $element = $this;
        }

        $result = [];
        $this->allValues($element, $result, $searchString, $searchInFunctionArguments);
        return $result;
    }

    /**
     * @param CSSElement|string $oElement
     * @param array<int, Value> $aResult
     * @param string|null $sSearchString
     * @param bool $bSearchInFunctionArguments
     *
     * @return void
     */
    protected function allValues($oElement, array &$aResult, $sSearchString = null, $bSearchInFunctionArguments = false)
    {
        if ($oElement instanceof CSSBlockList) {
            foreach ($oElement->getContents() as $oContent) {
                $this->allValues($oContent, $aResult, $sSearchString, $bSearchInFunctionArguments);
            }
        } elseif ($oElement instanceof RuleSet) {
            foreach ($oElement->getRules($sSearchString) as $oRule) {
                $this->allValues($oRule, $aResult, $sSearchString, $bSearchInFunctionArguments);
            }
        } elseif ($oElement instanceof Rule) {
            $this->allValues($oElement->getValue(), $aResult, $sSearchString, $bSearchInFunctionArguments);
        } elseif ($oElement instanceof ValueList) {
            if ($bSearchInFunctionArguments || !($oElement instanceof CSSFunction)) {
                foreach ($oElement->getListComponents() as $mComponent) {
                    $this->allValues($mComponent, $aResult, $sSearchString, $bSearchInFunctionArguments);
                }
            }
        } else {
            // Non-List `Value` or `CSSString` (CSS identifier)
            $aResult[] = $oElement;
        }
    }

    /**
     * @param array<int, Selector> $aResult
     * @param string|null $sSpecificitySearch
     *
     * @return void
     */
    protected function allSelectors(array &$aResult, $sSpecificitySearch = null)
    {
        /** @var array<int, DeclarationBlock> $aDeclarationBlocks */
        $aDeclarationBlocks = [];
        $this->allDeclarationBlocks($aDeclarationBlocks);
        foreach ($aDeclarationBlocks as $oBlock) {
            foreach ($oBlock->getSelectors() as $oSelector) {
                if ($sSpecificitySearch === null) {
                    $aResult[] = $oSelector;
                } else {
                    $sComparator = '===';
                    $aSpecificitySearch = explode(' ', $sSpecificitySearch);
                    $iTargetSpecificity = $aSpecificitySearch[0];
                    if (count($aSpecificitySearch) > 1) {
                        $sComparator = $aSpecificitySearch[0];
                        $iTargetSpecificity = $aSpecificitySearch[1];
                    }
                    $iTargetSpecificity = (int)$iTargetSpecificity;
                    $iSelectorSpecificity = $oSelector->getSpecificity();
                    $bMatches = false;
                    switch ($sComparator) {
                        case '<=':
                            $bMatches = $iSelectorSpecificity <= $iTargetSpecificity;
                            break;
                        case '<':
                            $bMatches = $iSelectorSpecificity < $iTargetSpecificity;
                            break;
                        case '>=':
                            $bMatches = $iSelectorSpecificity >= $iTargetSpecificity;
                            break;
                        case '>':
                            $bMatches = $iSelectorSpecificity > $iTargetSpecificity;
                            break;
                        default:
                            $bMatches = $iSelectorSpecificity === $iTargetSpecificity;
                            break;
                    }
                    if ($bMatches) {
                        $aResult[] = $oSelector;
                    }
                }
            }
        }
    }
}
<?php

namespace Sabberworm\CSS\CSSList;

use Sabberworm\CSS\Comment\Comment;
use Sabberworm\CSS\Comment\Commentable;
use Sabberworm\CSS\CSSElement;
use Sabberworm\CSS\OutputFormat;
use Sabberworm\CSS\Parsing\ParserState;
use Sabberworm\CSS\Parsing\SourceException;
use Sabberworm\CSS\Parsing\UnexpectedEOFException;
use Sabberworm\CSS\Parsing\UnexpectedTokenException;
use Sabberworm\CSS\Position\Position;
use Sabberworm\CSS\Position\Positionable;
use Sabberworm\CSS\Property\AtRule;
use Sabberworm\CSS\Property\Charset;
use Sabberworm\CSS\Property\CSSNamespace;
use Sabberworm\CSS\Property\Import;
use Sabberworm\CSS\Property\Selector;
use Sabberworm\CSS\Renderable;
use Sabberworm\CSS\RuleSet\AtRuleSet;
use Sabberworm\CSS\RuleSet\DeclarationBlock;
use Sabberworm\CSS\RuleSet\RuleSet;
use Sabberworm\CSS\Settings;
use Sabberworm\CSS\Value\CSSString;
use Sabberworm\CSS\Value\URL;
use Sabberworm\CSS\Value\Value;

/**
 * This is the most generic container available. It can contain `DeclarationBlock`s (rule sets with a selector),
 * `RuleSet`s as well as other `CSSList` objects.
 *
 * It can also contain `Import` and `Charset` objects stemming from at-rules.
 */
abstract class CSSList implements Commentable, CSSElement, Positionable
{
    use Position;

    /**
     * @var array<array-key, Comment>
     *
     * @internal since 8.8.0
     */
    protected $aComments;

    /**
     * @var array<int, RuleSet|CSSList|Import|Charset>
     *
     * @internal since 8.8.0
     */
    protected $aContents;

    /**
     * @param int $iLineNo
     */
    public function __construct($iLineNo = 0)
    {
        $this->aComments = [];
        $this->aContents = [];
        $this->setPosition($iLineNo);
    }

    /**
     * @return void
     *
     * @throws UnexpectedTokenException
     * @throws SourceException
     *
     * @internal since V8.8.0
     */
    public static function parseList(ParserState $oParserState, CSSList $oList)
    {
        $bIsRoot = $oList instanceof Document;
        if (is_string($oParserState)) {
            $oParserState = new ParserState($oParserState, Settings::create());
        }
        $bLenientParsing = $oParserState->getSettings()->bLenientParsing;
        $aComments = [];
        while (!$oParserState->isEnd()) {
            $aComments = array_merge($aComments, $oParserState->consumeWhiteSpace());
            $oListItem = null;
            if ($bLenientParsing) {
                try {
                    $oListItem = self::parseListItem($oParserState, $oList);
                } catch (UnexpectedTokenException $e) {
                    $oListItem = false;
                }
            } else {
                $oListItem = self::parseListItem($oParserState, $oList);
            }
            if ($oListItem === null) {
                // List parsing finished
                return;
            }
            if ($oListItem) {
                $oListItem->addComments($aComments);
                $oList->append($oListItem);
            }
            $aComments = $oParserState->consumeWhiteSpace();
        }
        $oList->addComments($aComments);
        if (!$bIsRoot && !$bLenientParsing) {
            throw new SourceException("Unexpected end of document", $oParserState->currentLine());
        }
    }

    /**
     * @return AtRuleBlockList|KeyFrame|Charset|CSSNamespace|Import|AtRuleSet|DeclarationBlock|null|false
     *
     * @throws SourceException
     * @throws UnexpectedEOFException
     * @throws UnexpectedTokenException
     */
    private static function parseListItem(ParserState $oParserState, CSSList $oList)
    {
        $bIsRoot = $oList instanceof Document;
        if ($oParserState->comes('@')) {
            $oAtRule = self::parseAtRule($oParserState);
            if ($oAtRule instanceof Charset) {
                if (!$bIsRoot) {
                    throw new UnexpectedTokenException(
                        '@charset may only occur in root document',
                        '',
                        'custom',
                        $oParserState->currentLine()
                    );
                }
                if (count($oList->getContents()) > 0) {
                    throw new UnexpectedTokenException(
                        '@charset must be the first parseable token in a document',
                        '',
                        'custom',
                        $oParserState->currentLine()
                    );
                }
                $oParserState->setCharset($oAtRule->getCharset());
            }
            return $oAtRule;
        } elseif ($oParserState->comes('}')) {
            if ($bIsRoot) {
                if ($oParserState->getSettings()->bLenientParsing) {
                    return DeclarationBlock::parse($oParserState);
                } else {
                    throw new SourceException("Unopened {", $oParserState->currentLine());
                }
            } else {
                // End of list
                return null;
            }
        } else {
            return DeclarationBlock::parse($oParserState, $oList);
        }
    }

    /**
     * @param ParserState $oParserState
     *
     * @return AtRuleBlockList|KeyFrame|Charset|CSSNamespace|Import|AtRuleSet|null
     *
     * @throws SourceException
     * @throws UnexpectedTokenException
     * @throws UnexpectedEOFException
     */
    private static function parseAtRule(ParserState $oParserState)
    {
        $oParserState->consume('@');
        $sIdentifier = $oParserState->parseIdentifier();
        $iIdentifierLineNum = $oParserState->currentLine();
        $oParserState->consumeWhiteSpace();
        if ($sIdentifier === 'import') {
            $oLocation = URL::parse($oParserState);
            $oParserState->consumeWhiteSpace();
            $sMediaQuery = null;
            if (!$oParserState->comes(';')) {
                $sMediaQuery = trim($oParserState->consumeUntil([';', ParserState::EOF]));
            }
            $oParserState->consumeUntil([';', ParserState::EOF], true, true);
            return new Import($oLocation, $sMediaQuery ?: null, $iIdentifierLineNum);
        } elseif ($sIdentifier === 'charset') {
            $oCharsetString = CSSString::parse($oParserState);
            $oParserState->consumeWhiteSpace();
            $oParserState->consumeUntil([';', ParserState::EOF], true, true);
            return new Charset($oCharsetString, $iIdentifierLineNum);
        } elseif (self::identifierIs($sIdentifier, 'keyframes')) {
            $oResult = new KeyFrame($iIdentifierLineNum);
            $oResult->setVendorKeyFrame($sIdentifier);
            $oResult->setAnimationName(trim($oParserState->consumeUntil('{', false, true)));
            CSSList::parseList($oParserState, $oResult);
            if ($oParserState->comes('}')) {
                $oParserState->consume('}');
            }
            return $oResult;
        } elseif ($sIdentifier === 'namespace') {
            $sPrefix = null;
            $mUrl = Value::parsePrimitiveValue($oParserState);
            if (!$oParserState->comes(';')) {
                $sPrefix = $mUrl;
                $mUrl = Value::parsePrimitiveValue($oParserState);
            }
            $oParserState->consumeUntil([';', ParserState::EOF], true, true);
            if ($sPrefix !== null && !is_string($sPrefix)) {
                throw new UnexpectedTokenException('Wrong namespace prefix', $sPrefix, 'custom', $iIdentifierLineNum);
            }
            if (!($mUrl instanceof CSSString || $mUrl instanceof URL)) {
                throw new UnexpectedTokenException(
                    'Wrong namespace url of invalid type',
                    $mUrl,
                    'custom',
                    $iIdentifierLineNum
                );
            }
            return new CSSNamespace($mUrl, $sPrefix, $iIdentifierLineNum);
        } else {
            // Unknown other at rule (font-face or such)
            $sArgs = trim($oParserState->consumeUntil('{', false, true));
            if (substr_count($sArgs, "(") != substr_count($sArgs, ")")) {
                if ($oParserState->getSettings()->bLenientParsing) {
                    return null;
                } else {
                    throw new SourceException("Unmatched brace count in media query", $oParserState->currentLine());
                }
            }
            $bUseRuleSet = true;
            foreach (explode('/', AtRule::BLOCK_RULES) as $sBlockRuleName) {
                if (self::identifierIs($sIdentifier, $sBlockRuleName)) {
                    $bUseRuleSet = false;
                    break;
                }
            }
            if ($bUseRuleSet) {
                $oAtRule = new AtRuleSet($sIdentifier, $sArgs, $iIdentifierLineNum);
                RuleSet::parseRuleSet($oParserState, $oAtRule);
            } else {
                $oAtRule = new AtRuleBlockList($sIdentifier, $sArgs, $iIdentifierLineNum);
                CSSList::parseList($oParserState, $oAtRule);
                if ($oParserState->comes('}')) {
                    $oParserState->consume('}');
                }
            }
            return $oAtRule;
        }
    }

    /**
     * Tests an identifier for a given value. Since identifiers are all keywords, they can be vendor-prefixed.
     * We need to check for these versions too.
     *
     * @param string $sIdentifier
     * @param string $sMatch
     *
     * @return bool
     */
    private static function identifierIs($sIdentifier, $sMatch)
    {
        return (strcasecmp($sIdentifier, $sMatch) === 0)
            ?: preg_match("/^(-\\w+-)?$sMatch$/i", $sIdentifier) === 1;
    }

    /**
     * Prepends an item to the list of contents.
     *
     * @param RuleSet|CSSList|Import|Charset $oItem
     *
     * @return void
     */
    public function prepend($oItem)
    {
        array_unshift($this->aContents, $oItem);
    }

    /**
     * Appends an item to the list of contents.
     *
     * @param RuleSet|CSSList|Import|Charset $oItem
     *
     * @return void
     */
    public function append($oItem)
    {
        $this->aContents[] = $oItem;
    }

    /**
     * Splices the list of contents.
     *
     * @param int $iOffset
     * @param int $iLength
     * @param array<int, RuleSet|CSSList|Import|Charset> $mReplacement
     *
     * @return void
     */
    public function splice($iOffset, $iLength = null, $mReplacement = null)
    {
        array_splice($this->aContents, $iOffset, $iLength, $mReplacement);
    }

    /**
     * Inserts an item in the CSS list before its sibling. If the desired sibling cannot be found,
     * the item is appended at the end.
     *
     * @param RuleSet|CSSList|Import|Charset $item
     * @param RuleSet|CSSList|Import|Charset $sibling
     */
    public function insertBefore($item, $sibling)
    {
        if (in_array($sibling, $this->aContents, true)) {
            $this->replace($sibling, [$item, $sibling]);
        } else {
            $this->append($item);
        }
    }

    /**
     * Removes an item from the CSS list.
     *
     * @param RuleSet|Import|Charset|CSSList $oItemToRemove
     *        May be a RuleSet (most likely a DeclarationBlock), a Import,
     *        a Charset or another CSSList (most likely a MediaQuery)
     *
     * @return bool whether the item was removed
     */
    public function remove($oItemToRemove)
    {
        $iKey = array_search($oItemToRemove, $this->aContents, true);
        if ($iKey !== false) {
            unset($this->aContents[$iKey]);
            return true;
        }
        return false;
    }

    /**
     * Replaces an item from the CSS list.
     *
     * @param RuleSet|Import|Charset|CSSList $oOldItem
     *        May be a `RuleSet` (most likely a `DeclarationBlock`), an `Import`, a `Charset`
     *        or another `CSSList` (most likely a `MediaQuery`)
     *
     * @return bool
     */
    public function replace($oOldItem, $mNewItem)
    {
        $iKey = array_search($oOldItem, $this->aContents, true);
        if ($iKey !== false) {
            if (is_array($mNewItem)) {
                array_splice($this->aContents, $iKey, 1, $mNewItem);
            } else {
                array_splice($this->aContents, $iKey, 1, [$mNewItem]);
            }
            return true;
        }
        return false;
    }

    /**
     * @param array<int, RuleSet|Import|Charset|CSSList> $aContents
     */
    public function setContents(array $aContents)
    {
        $this->aContents = [];
        foreach ($aContents as $content) {
            $this->append($content);
        }
    }

    /**
     * Removes a declaration block from the CSS list if it matches all given selectors.
     *
     * @param DeclarationBlock|array<array-key, Selector>|string $mSelector the selectors to match
     * @param bool $bRemoveAll whether to stop at the first declaration block found or remove all blocks
     *
     * @return void
     */
    public function removeDeclarationBlockBySelector($mSelector, $bRemoveAll = false)
    {
        if ($mSelector instanceof DeclarationBlock) {
            $mSelector = $mSelector->getSelectors();
        }
        if (!is_array($mSelector)) {
            $mSelector = explode(',', $mSelector);
        }
        foreach ($mSelector as $iKey => &$mSel) {
            if (!($mSel instanceof Selector)) {
                if (!Selector::isValid($mSel)) {
                    throw new UnexpectedTokenException(
                        "Selector did not match '" . Selector::SELECTOR_VALIDATION_RX . "'.",
                        $mSel,
                        "custom"
                    );
                }
                $mSel = new Selector($mSel);
            }
        }
        foreach ($this->aContents as $iKey => $mItem) {
            if (!($mItem instanceof DeclarationBlock)) {
                continue;
            }
            if ($mItem->getSelectors() == $mSelector) {
                unset($this->aContents[$iKey]);
                if (!$bRemoveAll) {
                    return;
                }
            }
        }
    }

    /**
     * @return string
     *
     * @deprecated in V8.8.0, will be removed in V9.0.0. Use `render` instead.
     */
    public function __toString()
    {
        return $this->render(new OutputFormat());
    }

    /**
     * @return string
     */
    protected function renderListContents(OutputFormat $oOutputFormat)
    {
        $sResult = '';
        $bIsFirst = true;
        $oNextLevel = $oOutputFormat;
        if (!$this->isRootList()) {
            $oNextLevel = $oOutputFormat->nextLevel();
        }
        foreach ($this->aContents as $oContent) {
            $sRendered = $oOutputFormat->safely(function () use ($oNextLevel, $oContent) {
                return $oContent->render($oNextLevel);
            });
            if ($sRendered === null) {
                continue;
            }
            if ($bIsFirst) {
                $bIsFirst = false;
                $sResult .= $oNextLevel->spaceBeforeBlocks();
            } else {
                $sResult .= $oNextLevel->spaceBetweenBlocks();
            }
            $sResult .= $sRendered;
        }

        if (!$bIsFirst) {
            // Had some output
            $sResult .= $oOutputFormat->spaceAfterBlocks();
        }

        return $sResult;
    }

    /**
     * Return true if the list can not be further outdented. Only important when rendering.
     *
     * @return bool
     */
    abstract public function isRootList();

    /**
     * Returns the stored items.
     *
     * @return array<int, RuleSet|Import|Charset|CSSList>
     */
    public function getContents()
    {
        return $this->aContents;
    }

    /**
     * @param array<array-key, Comment> $aComments
     *
     * @return void
     */
    public function addComments(array $aComments)
    {
        $this->aComments = array_merge($this->aComments, $aComments);
    }

    /**
     * @return array<array-key, Comment>
     */
    public function getComments()
    {
        return $this->aComments;
    }

    /**
     * @param array<array-key, Comment> $aComments
     *
     * @return void
     */
    public function setComments(array $aComments)
    {
        $this->aComments = $aComments;
    }
}
<?php

namespace Sabberworm\CSS\CSSList;

use Sabberworm\CSS\OutputFormat;
use Sabberworm\CSS\Parsing\ParserState;
use Sabberworm\CSS\Parsing\SourceException;
use Sabberworm\CSS\Property\Selector;
use Sabberworm\CSS\RuleSet\DeclarationBlock;
use Sabberworm\CSS\RuleSet\RuleSet;

/**
 * This class represents the root of a parsed CSS file. It contains all top-level CSS contents: mostly declaration
 * blocks, but also any at-rules encountered (`Import` and `Charset`).
 */
class Document extends CSSBlockList
{
    /**
     * @param int $iLineNo
     */
    public function __construct($iLineNo = 0)
    {
        parent::__construct($iLineNo);
    }

    /**
     * @return Document
     *
     * @throws SourceException
     *
     * @internal since V8.8.0
     */
    public static function parse(ParserState $oParserState)
    {
        $oDocument = new Document($oParserState->currentLine());
        CSSList::parseList($oParserState, $oDocument);
        return $oDocument;
    }

    /**
     * Gets all `DeclarationBlock` objects recursively, no matter how deeply nested the selectors are.
     * Aliased as `getAllSelectors()`.
     *
     * @return array<int, DeclarationBlock>
     */
    public function getAllDeclarationBlocks()
    {
        /** @var array<int, DeclarationBlock> $aResult */
        $aResult = [];
        $this->allDeclarationBlocks($aResult);
        return $aResult;
    }

    /**
     * Gets all `DeclarationBlock` objects recursively.
     *
     * @return array<int, DeclarationBlock>
     *
     * @deprecated will be removed in version 9.0; use `getAllDeclarationBlocks()` instead
     */
    public function getAllSelectors()
    {
        return $this->getAllDeclarationBlocks();
    }

    /**
     * Returns all `RuleSet` objects recursively found in the tree, no matter how deeply nested the rule sets are.
     *
     * @return array<int, RuleSet>
     */
    public function getAllRuleSets()
    {
        /** @var array<int, RuleSet> $aResult */
        $aResult = [];
        $this->allRuleSets($aResult);
        return $aResult;
    }

    /**
     * Returns all `Selector` objects with the requested specificity found recursively in the tree.
     *
     * Note that this does not yield the full `DeclarationBlock` that the selector belongs to
     * (and, currently, there is no way to get to that).
     *
     * @param string|null $sSpecificitySearch
     *        An optional filter by specificity.
     *        May contain a comparison operator and a number or just a number (defaults to "==").
     *
     * @return array<int, Selector>
     * @example `getSelectorsBySpecificity('>= 100')`
     *
     */
    public function getSelectorsBySpecificity($sSpecificitySearch = null)
    {
        /** @var array<int, Selector> $aResult */
        $aResult = [];
        $this->allSelectors($aResult, $sSpecificitySearch);
        return $aResult;
    }

    /**
     * Expands all shorthand properties to their long value.
     *
     * @return void
     *
     * @deprecated since 8.7.0, will be removed without substitution in version 9.0 in #511
     */
    public function expandShorthands()
    {
        foreach ($this->getAllDeclarationBlocks() as $oDeclaration) {
            $oDeclaration->expandShorthands();
        }
    }

    /**
     * Create shorthands properties whenever possible.
     *
     * @return void
     *
     * @deprecated since 8.7.0, will be removed without substitution in version 9.0 in #511
     */
    public function createShorthands()
    {
        foreach ($this->getAllDeclarationBlocks() as $oDeclaration) {
            $oDeclaration->createShorthands();
        }
    }

    /**
     * Overrides `render()` to make format argument optional.
     *
     * @param OutputFormat|null $oOutputFormat
     *
     * @return string
     */
    public function render($oOutputFormat = null)
    {
        if ($oOutputFormat === null) {
            $oOutputFormat = new OutputFormat();
        }
        return $oOutputFormat->comments($this) . $this->renderListContents($oOutputFormat);
    }

    /**
     * @return bool
     */
    public function isRootList()
    {
        return true;
    }
}
<?php

namespace Sabberworm\CSS\CSSList;

use Sabberworm\CSS\OutputFormat;
use Sabberworm\CSS\Property\AtRule;

class KeyFrame extends CSSList implements AtRule
{
    /**
     * @var string|null
     */
    private $vendorKeyFrame;

    /**
     * @var string|null
     */
    private $animationName;

    /**
     * @param int $iLineNo
     */
    public function __construct($iLineNo = 0)
    {
        parent::__construct($iLineNo);
        $this->vendorKeyFrame = null;
        $this->animationName = null;
    }

    /**
     * @param string $vendorKeyFrame
     */
    public function setVendorKeyFrame($vendorKeyFrame)
    {
        $this->vendorKeyFrame = $vendorKeyFrame;
    }

    /**
     * @return string|null
     */
    public function getVendorKeyFrame()
    {
        return $this->vendorKeyFrame;
    }

    /**
     * @param string $animationName
     */
    public function setAnimationName($animationName)
    {
        $this->animationName = $animationName;
    }

    /**
     * @return string|null
     */
    public function getAnimationName()
    {
        return $this->animationName;
    }

    /**
     * @return string
     *
     * @deprecated in V8.8.0, will be removed in V9.0.0. Use `render` instead.
     */
    public function __toString()
    {
        return $this->render(new OutputFormat());
    }

    /**
     * @param OutputFormat|null $oOutputFormat
     *
     * @return string
     */
    public function render($oOutputFormat)
    {
        $sResult = $oOutputFormat->comments($this);
        $sResult .= "@{$this->vendorKeyFrame} {$this->animationName}{$oOutputFormat->spaceBeforeOpeningBrace()}{";
        $sResult .= $this->renderListContents($oOutputFormat);
        $sResult .= '}';
        return $sResult;
    }

    /**
     * @return bool
     */
    public function isRootList()
    {
        return false;
    }

    /**
     * @return string|null
     */
    public function atRuleName()
    {
        return $this->vendorKeyFrame;
    }

    /**
     * @return string|null
     */
    public function atRuleArgs()
    {
        return $this->animationName;
    }
}
<?php

namespace Sabberworm\CSS\Comment;

use Sabberworm\CSS\OutputFormat;
use Sabberworm\CSS\Renderable;
use Sabberworm\CSS\Position\Position;
use Sabberworm\CSS\Position\Positionable;

class Comment implements Positionable, Renderable
{
    use Position;

    /**
     * @var string
     *
     * @internal since 8.8.0
     */
    protected $sComment;

    /**
     * @param string $sComment
     * @param int $iLineNo
     */
    public function __construct($sComment = '', $iLineNo = 0)
    {
        $this->sComment = $sComment;
        $this->setPosition($iLineNo);
    }

    /**
     * @return string
     */
    public function getComment()
    {
        return $this->sComment;
    }

    /**
     * @param string $sComment
     *
     * @return void
     */
    public function setComment($sComment)
    {
        $this->sComment = $sComment;
    }

    /**
     * @return string
     *
     * @deprecated in V8.8.0, will be removed in V9.0.0. Use `render` instead.
     */
    public function __toString()
    {
        return $this->render(new OutputFormat());
    }

    /**
     * @param OutputFormat|null $oOutputFormat
     *
     * @return string
     */
    public function render($oOutputFormat)
    {
        return '/*' . $this->sComment . '*/';
    }
}
<?php

namespace Sabberworm\CSS\Comment;

interface Commentable
{
    /**
     * @param array<array-key, Comment> $aComments
     *
     * @return void
     */
    public function addComments(array $aComments);

    /**
     * @return array<array-key, Comment>
     */
    public function getComments();

    /**
     * @param array<array-key, Comment> $aComments
     *
     * @return void
     */
    public function setComments(array $aComments);
}
<?php

namespace Sabberworm\CSS;

/**
 * Extending this class is deprecated in version 8.8.0; it will be made `final` in version 9.0.0.
 *
 * @method OutputFormat setSemicolonAfterLastRule(bool $bSemicolonAfterLastRule) Set whether semicolons are added after
 *     last rule.
 */
class OutputFormat
{
    /**
     * Value format: `"` means double-quote, `'` means single-quote
     *
     * @var string
     *
     * @internal since 8.8.0, will be made private in 9.0.0
     */
    public $sStringQuotingType = '"';

    /**
     * Output RGB colors in hash notation if possible
     *
     * @var bool
     *
     * @internal since 8.8.0, will be made private in 9.0.0
     */
    public $bRGBHashNotation = true;

    /**
     * Declaration format
     *
     * Semicolon after the last rule of a declaration block can be omitted. To do that, set this false.
     *
     * @var bool
     *
     * @internal since 8.8.0, will be made private in 9.0.0
     */
    public $bSemicolonAfterLastRule = true;

    /**
     * Spacing
     * Note that these strings are not sanity-checked: the value should only consist of whitespace
     * Any newline character will be indented according to the current level.
     * The triples (After, Before, Between) can be set using a wildcard (e.g. `$oFormat->set('Space*Rules', "\n");`)
     *
     * @var string
     *
     * @internal since 8.8.0, will be made private in 9.0.0
     */
    public $sSpaceAfterRuleName = ' ';

    /**
     * @var string
     *
     * @internal since 8.8.0, will be made private in 9.0.0
     */
    public $sSpaceBeforeRules = '';

    /**
     * @var string
     *
     * @internal since 8.8.0, will be made private in 9.0.0
     */
    public $sSpaceAfterRules = '';

    /**
     * @var string
     *
     * @internal since 8.8.0, will be made private in 9.0.0
     */
    public $sSpaceBetweenRules = '';

    /**
     * @var string
     *
     * @internal since 8.8.0, will be made private in 9.0.0
     */
    public $sSpaceBeforeBlocks = '';

    /**
     * @var string
     *
     * @internal since 8.8.0, will be made private in 9.0.0
     */
    public $sSpaceAfterBlocks = '';

    /**
     * @var string
     *
     * @internal since 8.8.0, will be made private in 9.0.0
     */
    public $sSpaceBetweenBlocks = "\n";

    /**
     * Content injected in and around at-rule blocks.
     *
     * @var string
     *
     * @internal since 8.8.0, will be made private in 9.0.0
     */
    public $sBeforeAtRuleBlock = '';

    /**
     * @var string
     *
     * @internal since 8.8.0, will be made private in 9.0.0
     */
    public $sAfterAtRuleBlock = '';

    /**
     * This is what’s printed before and after the comma if a declaration block contains multiple selectors.
     *
     * @var string
     *
     * @internal since 8.8.0, will be made private in 9.0.0
     */
    public $sSpaceBeforeSelectorSeparator = '';

    /**
     * @var string
     *
     * @internal since 8.8.0, will be made private in 9.0.0
     */
    public $sSpaceAfterSelectorSeparator = ' ';

    /**
     * This is what’s inserted before the separator in value lists, by default.
     *
     * `array` is deprecated in version 8.8.0, and will be removed in version 9.0.0.
     * To set the spacing for specific separators, use {@see $aSpaceBeforeListArgumentSeparators} instead.
     *
     * @var string|array<non-empty-string, string>
     *
     * @internal since 8.8.0, will be made private in 9.0.0
     */
    public $sSpaceBeforeListArgumentSeparator = '';

    /**
     * Keys are separators (e.g. `,`).  Values are the space sequence to insert, or an empty string.
     *
     * @var array<non-empty-string, string>
     *
     * @internal since 8.8.0, will be made private in 9.0.0
     */
    public $aSpaceBeforeListArgumentSeparators = [];

    /**
     * This is what’s inserted after the separator in value lists, by default.
     *
     * `array` is deprecated in version 8.8.0, and will be removed in version 9.0.0.
     * To set the spacing for specific separators, use {@see $aSpaceAfterListArgumentSeparators} instead.
     *
     * @var string|array<non-empty-string, string>
     *
     * @internal since 8.8.0, will be made private in 9.0.0
     */
    public $sSpaceAfterListArgumentSeparator = '';

    /**
     * Keys are separators (e.g. `,`).  Values are the space sequence to insert, or an empty string.
     *
     * @var array<non-empty-string, string>
     *
     * @internal since 8.8.0, will be made private in 9.0.0
     */
    public $aSpaceAfterListArgumentSeparators = [];

    /**
     * @var string
     *
     * @internal since 8.8.0, will be made private in 9.0.0
     */
    public $sSpaceBeforeOpeningBrace = ' ';

    /**
     * Content injected in and around declaration blocks.
     *
     * @var string
     *
     * @internal since 8.8.0, will be made private in 9.0.0
     */
    public $sBeforeDeclarationBlock = '';

    /**
     * @var string
     *
     * @internal since 8.8.0, will be made private in 9.0.0
     */
    public $sAfterDeclarationBlockSelectors = '';

    /**
     * @var string
     *
     * @internal since 8.8.0, will be made private in 9.0.0
     */
    public $sAfterDeclarationBlock = '';

    /**
     * Indentation character(s) per level. Only applicable if newlines are used in any of the spacing settings.
     *
     * @var string
     *
     * @internal since 8.8.0, will be made private in 9.0.0
     */
    public $sIndentation = "\t";

    /**
     * Output exceptions.
     *
     * @var bool
     *
     * @internal since 8.8.0, will be made private in 9.0.0
     */
    public $bIgnoreExceptions = false;

    /**
     * Render comments for lists and RuleSets
     *
     * @var bool
     *
     * @internal since 8.8.0, will be made private in 9.0.0
     */
    public $bRenderComments = false;

    /**
     * @var OutputFormatter|null
     */
    private $oFormatter = null;

    /**
     * @var OutputFormat|null
     */
    private $oNextLevelFormat = null;

    /**
     * @var int
     */
    private $iIndentationLevel = 0;

    /**
     * @internal since V8.8.0. Use the factory methods `create()`, `createCompact()`, or `createPretty()` instead.
     */
    public function __construct()
    {
    }

    /**
     * @param string $sName
     *
     * @return string|null
     *
     * @deprecated since 8.8.0, will be removed in 9.0.0. Use specific getters instead.
     */
    public function get($sName)
    {
        $aVarPrefixes = ['a', 's', 'm', 'b', 'f', 'o', 'c', 'i'];
        foreach ($aVarPrefixes as $sPrefix) {
            $sFieldName = $sPrefix . ucfirst($sName);
            if (isset($this->$sFieldName)) {
                return $this->$sFieldName;
            }
        }
        return null;
    }

    /**
     * @param array<array-key, string>|string $aNames
     * @param mixed $mValue
     *
     * @return self|false
     *
     * @deprecated since 8.8.0, will be removed in 9.0.0. Use specific setters instead.
     */
    public function set($aNames, $mValue)
    {
        $aVarPrefixes = ['a', 's', 'm', 'b', 'f', 'o', 'c', 'i'];
        if (is_string($aNames) && strpos($aNames, '*') !== false) {
            $aNames =
                [
                    str_replace('*', 'Before', $aNames),
                    str_replace('*', 'Between', $aNames),
                    str_replace('*', 'After', $aNames),
                ];
        } elseif (!is_array($aNames)) {
            $aNames = [$aNames];
        }
        foreach ($aVarPrefixes as $sPrefix) {
            $bDidReplace = false;
            foreach ($aNames as $sName) {
                $sFieldName = $sPrefix . ucfirst($sName);
                if (isset($this->$sFieldName)) {
                    $this->$sFieldName = $mValue;
                    $bDidReplace = true;
                }
            }
            if ($bDidReplace) {
                return $this;
            }
        }
        // Break the chain so the user knows this option is invalid
        return false;
    }

    /**
     * @param string $sMethodName
     * @param array<array-key, mixed> $aArguments
     *
     * @return mixed
     *
     * @throws \Exception
     */
    public function __call($sMethodName, array $aArguments)
    {
        if (strpos($sMethodName, 'set') === 0) {
            return $this->set(substr($sMethodName, 3), $aArguments[0]);
        } elseif (strpos($sMethodName, 'get') === 0) {
            return $this->get(substr($sMethodName, 3));
        } elseif (method_exists(OutputFormatter::class, $sMethodName)) {
            // @deprecated since 8.8.0, will be removed in 9.0.0. Call the method on the formatter directly instead.
            return call_user_func_array([$this->getFormatter(), $sMethodName], $aArguments);
        } else {
            throw new \Exception('Unknown OutputFormat method called: ' . $sMethodName);
        }
    }

    /**
     * @param int $iNumber
     *
     * @return self
     */
    public function indentWithTabs($iNumber = 1)
    {
        return $this->setIndentation(str_repeat("\t", $iNumber));
    }

    /**
     * @param int $iNumber
     *
     * @return self
     */
    public function indentWithSpaces($iNumber = 2)
    {
        return $this->setIndentation(str_repeat(" ", $iNumber));
    }

    /**
     * @return OutputFormat
     *
     * @internal since V8.8.0
     */
    public function nextLevel()
    {
        if ($this->oNextLevelFormat === null) {
            $this->oNextLevelFormat = clone $this;
            $this->oNextLevelFormat->iIndentationLevel++;
            $this->oNextLevelFormat->oFormatter = null;
        }
        return $this->oNextLevelFormat;
    }

    /**
     * @return void
     */
    public function beLenient()
    {
        $this->bIgnoreExceptions = true;
    }

    /**
     * @return OutputFormatter
     *
     * @internal since 8.8.0
     */
    public function getFormatter()
    {
        if ($this->oFormatter === null) {
            $this->oFormatter = new OutputFormatter($this);
        }

        return $this->oFormatter;
    }

    /**
     * @return int
     *
     * @deprecated #869 since version V8.8.0, will be removed in V9.0.0. Use `getIndentationLevel()` instead.
     */
    public function level()
    {
        return $this->iIndentationLevel;
    }

    /**
     * Creates an instance of this class without any particular formatting settings.
     *
     * @return self
     */
    public static function create()
    {
        return new OutputFormat();
    }

    /**
     * Creates an instance of this class with a preset for compact formatting.
     *
     * @return self
     */
    public static function createCompact()
    {
        $format = self::create();
        $format->set('Space*Rules', "")
            ->set('Space*Blocks', "")
            ->setSpaceAfterRuleName('')
            ->setSpaceBeforeOpeningBrace('')
            ->setSpaceAfterSelectorSeparator('')
            ->setRenderComments(false);
        return $format;
    }

    /**
     * Creates an instance of this class with a preset for pretty formatting.
     *
     * @return self
     */
    public static function createPretty()
    {
        $format = self::create();
        $format->set('Space*Rules', "\n")
            ->set('Space*Blocks', "\n")
            ->setSpaceBetweenBlocks("\n\n")
            ->set('SpaceAfterListArgumentSeparators', [',' => ' '])
            ->setRenderComments(true);
        return $format;
    }
}
<?php

namespace Sabberworm\CSS;

use Sabberworm\CSS\Comment\Commentable;
use Sabberworm\CSS\Parsing\OutputException;

/**
 * @internal since 8.8.0
 */
class OutputFormatter
{
    /**
     * @var OutputFormat
     */
    private $oFormat;

    public function __construct(OutputFormat $oFormat)
    {
        $this->oFormat = $oFormat;
    }

    /**
     * @param string $sName
     * @param string|null $sType
     *
     * @return string
     */
    public function space($sName, $sType = null)
    {
        $sSpaceString = $this->oFormat->get("Space$sName");
        // If $sSpaceString is an array, we have multiple values configured
        // depending on the type of object the space applies to
        if (is_array($sSpaceString)) {
            if ($sType !== null && isset($sSpaceString[$sType])) {
                $sSpaceString = $sSpaceString[$sType];
            } else {
                $sSpaceString = reset($sSpaceString);
            }
        }
        return $this->prepareSpace($sSpaceString);
    }

    /**
     * @return string
     */
    public function spaceAfterRuleName()
    {
        return $this->space('AfterRuleName');
    }

    /**
     * @return string
     */
    public function spaceBeforeRules()
    {
        return $this->space('BeforeRules');
    }

    /**
     * @return string
     */
    public function spaceAfterRules()
    {
        return $this->space('AfterRules');
    }

    /**
     * @return string
     */
    public function spaceBetweenRules()
    {
        return $this->space('BetweenRules');
    }

    /**
     * @return string
     */
    public function spaceBeforeBlocks()
    {
        return $this->space('BeforeBlocks');
    }

    /**
     * @return string
     */
    public function spaceAfterBlocks()
    {
        return $this->space('AfterBlocks');
    }

    /**
     * @return string
     */
    public function spaceBetweenBlocks()
    {
        return $this->space('BetweenBlocks');
    }

    /**
     * @return string
     */
    public function spaceBeforeSelectorSeparator()
    {
        return $this->space('BeforeSelectorSeparator');
    }

    /**
     * @return string
     */
    public function spaceAfterSelectorSeparator()
    {
        return $this->space('AfterSelectorSeparator');
    }

    /**
     * @param string $sSeparator
     *
     * @return string
     */
    public function spaceBeforeListArgumentSeparator($sSeparator)
    {
        $spaceForSeparator = $this->oFormat->getSpaceBeforeListArgumentSeparators();
        if (isset($spaceForSeparator[$sSeparator])) {
            return $spaceForSeparator[$sSeparator];
        }

        return $this->space('BeforeListArgumentSeparator', $sSeparator);
    }

    /**
     * @param string $sSeparator
     *
     * @return string
     */
    public function spaceAfterListArgumentSeparator($sSeparator)
    {
        $spaceForSeparator = $this->oFormat->getSpaceAfterListArgumentSeparators();
        if (isset($spaceForSeparator[$sSeparator])) {
            return $spaceForSeparator[$sSeparator];
        }

        return $this->space('AfterListArgumentSeparator', $sSeparator);
    }

    /**
     * @return string
     */
    public function spaceBeforeOpeningBrace()
    {
        return $this->space('BeforeOpeningBrace');
    }

    /**
     * Runs the given code, either swallowing or passing exceptions, depending on the `bIgnoreExceptions` setting.
     *
     * @param string $cCode the name of the function to call
     *
     * @return string|null
     */
    public function safely($cCode)
    {
        if ($this->oFormat->get('IgnoreExceptions')) {
            // If output exceptions are ignored, run the code with exception guards
            try {
                return $cCode();
            } catch (OutputException $e) {
                return null;
            } // Do nothing
        } else {
            // Run the code as-is
            return $cCode();
        }
    }

    /**
     * Clone of the `implode` function, but calls `render` with the current output format instead of `__toString()`.
     *
     * @param string $sSeparator
     * @param array<array-key, Renderable|string> $aValues
     * @param bool $bIncreaseLevel
     *
     * @return string
     */
    public function implode($sSeparator, array $aValues, $bIncreaseLevel = false)
    {
        $sResult = '';
        $oFormat = $this->oFormat;
        if ($bIncreaseLevel) {
            $oFormat = $oFormat->nextLevel();
        }
        $bIsFirst = true;
        foreach ($aValues as $mValue) {
            if ($bIsFirst) {
                $bIsFirst = false;
            } else {
                $sResult .= $sSeparator;
            }
            if ($mValue instanceof Renderable) {
                $sResult .= $mValue->render($oFormat);
            } else {
                $sResult .= $mValue;
            }
        }
        return $sResult;
    }

    /**
     * @param string $sString
     *
     * @return string
     */
    public function removeLastSemicolon($sString)
    {
        if ($this->oFormat->get('SemicolonAfterLastRule')) {
            return $sString;
        }
        $sString = explode(';', $sString);
        if (count($sString) < 2) {
            return $sString[0];
        }
        $sLast = array_pop($sString);
        $sNextToLast = array_pop($sString);
        array_push($sString, $sNextToLast . $sLast);
        return implode(';', $sString);
    }

    /**
     *
     * @param array<Commentable> $aComments
     *
     * @return string
     */
    public function comments(Commentable $oCommentable)
    {
        if (!$this->oFormat->bRenderComments) {
            return '';
        }

        $sResult = '';
        $aComments = $oCommentable->getComments();
        $iLastCommentIndex = count($aComments) - 1;

        foreach ($aComments as $i => $oComment) {
            $sResult .= $oComment->render($this->oFormat);
            $sResult .= $i === $iLastCommentIndex ? $this->spaceAfterBlocks() : $this->spaceBetweenBlocks();
        }
        return $sResult;
    }

    /**
     * @param string $sSpaceString
     *
     * @return string
     */
    private function prepareSpace($sSpaceString)
    {
        return str_replace("\n", "\n" . $this->indent(), $sSpaceString);
    }

    /**
     * @return string
     */
    private function indent()
    {
        return str_repeat($this->oFormat->sIndentation, $this->oFormat->getIndentationLevel());
    }
}
<?php

namespace Sabberworm\CSS;

use Sabberworm\CSS\CSSList\Document;
use Sabberworm\CSS\Parsing\ParserState;
use Sabberworm\CSS\Parsing\SourceException;

/**
 * This class parses CSS from text into a data structure.
 */
class Parser
{
    /**
     * @var ParserState
     */
    private $oParserState;

    /**
     * @param string $sText the complete CSS as text (i.e., usually the contents of a CSS file)
     * @param Settings|null $oParserSettings
     * @param int $iLineNo the line number (starting from 1, not from 0)
     */
    public function __construct($sText, $oParserSettings = null, $iLineNo = 1)
    {
        if ($oParserSettings === null) {
            $oParserSettings = Settings::create();
        }
        $this->oParserState = new ParserState($sText, $oParserSettings, $iLineNo);
    }

    /**
     * Sets the charset to be used if the CSS does not contain an `@charset` declaration.
     *
     * @param string $sCharset
     *
     * @return void
     *
     * @deprecated since 8.7.0, will be removed in version 9.0.0 with #687
     */
    public function setCharset($sCharset)
    {
        $this->oParserState->setCharset($sCharset);
    }

    /**
     * Returns the charset that is used if the CSS does not contain an `@charset` declaration.
     *
     * @return void
     *
     * @deprecated since 8.7.0, will be removed in version 9.0.0 with #687
     */
    public function getCharset()
    {
        // Note: The `return` statement is missing here. This is a bug that needs to be fixed.
        $this->oParserState->getCharset();
    }

    /**
     * Parses the CSS provided to the constructor and creates a `Document` from it.
     *
     * @return Document
     *
     * @throws SourceException
     */
    public function parse()
    {
        return Document::parse($this->oParserState);
    }
}
<?php

namespace Sabberworm\CSS\Parsing;

/**
 * @internal since 8.7.0
 */
class Anchor
{
    /**
     * @var int
     */
    private $iPosition;

    /**
     * @var \Sabberworm\CSS\Parsing\ParserState
     */
    private $oParserState;

    /**
     * @param int $iPosition
     * @param \Sabberworm\CSS\Parsing\ParserState $oParserState
     */
    public function __construct($iPosition, ParserState $oParserState)
    {
        $this->iPosition = $iPosition;
        $this->oParserState = $oParserState;
    }

    /**
     * @return void
     */
    public function backtrack()
    {
        $this->oParserState->setPosition($this->iPosition);
    }
}
<?php

namespace Sabberworm\CSS\Parsing;

/**
 * Thrown if the CSS parser attempts to print something invalid.
 */
class OutputException extends SourceException
{
    /**
     * @param string $sMessage
     * @param int $iLineNo
     */
    public function __construct($sMessage, $iLineNo = 0)
    {
        parent::__construct($sMessage, $iLineNo);
    }
}
<?php

namespace Sabberworm\CSS\Parsing;

use Sabberworm\CSS\Comment\Comment;
use Sabberworm\CSS\Settings;

/**
 * @internal since 8.7.0
 */
class ParserState
{
    /**
     * @var null
     *
     * @internal since 8.5.2
     */
    const EOF = null;

    /**
     * @var Settings
     */
    private $oParserSettings;

    /**
     * @var string
     */
    private $sText;

    /**
     * @var array<int, string>
     */
    private $aText;

    /**
     * @var int
     */
    private $iCurrentPosition;

    /**
     * will only be used if the CSS does not contain an `@charset` declaration
     *
     * @var string
     */
    private $sCharset;

    /**
     * @var int
     */
    private $iLength;

    /**
     * @var int
     */
    private $iLineNo;

    /**
     * @param string $sText the complete CSS as text (i.e., usually the contents of a CSS file)
     * @param int $iLineNo
     */
    public function __construct($sText, Settings $oParserSettings, $iLineNo = 1)
    {
        $this->oParserSettings = $oParserSettings;
        $this->sText = $sText;
        $this->iCurrentPosition = 0;
        $this->iLineNo = $iLineNo;
        $this->setCharset($this->oParserSettings->sDefaultCharset);
    }

    /**
     * Sets the charset to be used if the CSS does not contain an `@charset` declaration.
     *
     * @param string $sCharset
     *
     * @return void
     */
    public function setCharset($sCharset)
    {
        $this->sCharset = $sCharset;
        $this->aText = $this->strsplit($this->sText);
        if (is_array($this->aText)) {
            $this->iLength = count($this->aText);
        }
    }

    /**
     * Returns the charset that is used if the CSS does not contain an `@charset` declaration.
     *
     * @return string
     */
    public function getCharset()
    {
        return $this->sCharset;
    }

    /**
     * @return int
     */
    public function currentLine()
    {
        return $this->iLineNo;
    }

    /**
     * @return int
     */
    public function currentColumn()
    {
        return $this->iCurrentPosition;
    }

    /**
     * @return Settings
     */
    public function getSettings()
    {
        return $this->oParserSettings;
    }

    /**
     * @return \Sabberworm\CSS\Parsing\Anchor
     */
    public function anchor()
    {
        return new Anchor($this->iCurrentPosition, $this);
    }

    /**
     * @param int $iPosition
     *
     * @return void
     */
    public function setPosition($iPosition)
    {
        $this->iCurrentPosition = $iPosition;
    }

    /**
     * @param bool $bIgnoreCase
     *
     * @return string
     *
     * @throws UnexpectedTokenException
     *
     * @internal since V8.8.0
     */
    public function parseIdentifier($bIgnoreCase = true)
    {
        if ($this->isEnd()) {
            throw new UnexpectedEOFException('', '', 'identifier', $this->iLineNo);
        }
        $sResult = $this->parseCharacter(true);
        if ($sResult === null) {
            throw new UnexpectedTokenException($sResult, $this->peek(5), 'identifier', $this->iLineNo);
        }
        $sCharacter = null;
        while (!$this->isEnd() && ($sCharacter = $this->parseCharacter(true)) !== null) {
            if (preg_match('/[a-zA-Z0-9\x{00A0}-\x{FFFF}_-]/Sux', $sCharacter)) {
                $sResult .= $sCharacter;
            } else {
                $sResult .= '\\' . $sCharacter;
            }
        }
        if ($bIgnoreCase) {
            $sResult = $this->strtolower($sResult);
        }
        return $sResult;
    }

    /**
     * @param bool $bIsForIdentifier
     *
     * @return string|null
     *
     * @throws UnexpectedEOFException
     * @throws UnexpectedTokenException
     *
     * @internal since V8.8.0
     */
    public function parseCharacter($bIsForIdentifier)
    {
        if ($this->peek() === '\\') {
            if (
                $bIsForIdentifier && $this->oParserSettings->bLenientParsing
                && ($this->comes('\0') || $this->comes('\9'))
            ) {
                // Non-strings can contain \0 or \9 which is an IE hack supported in lenient parsing.
                return null;
            }
            $this->consume('\\');
            if ($this->comes('\n') || $this->comes('\r')) {
                return '';
            }
            if (preg_match('/[0-9a-fA-F]/Su', $this->peek()) === 0) {
                return $this->consume(1);
            }
            $sUnicode = $this->consumeExpression('/^[0-9a-fA-F]{1,6}/u', 6);
            if ($this->strlen($sUnicode) < 6) {
                // Consume whitespace after incomplete unicode escape
                if (preg_match('/\\s/isSu', $this->peek())) {
                    if ($this->comes('\r\n')) {
                        $this->consume(2);
                    } else {
                        $this->consume(1);
                    }
                }
            }
            $iUnicode = intval($sUnicode, 16);
            $sUtf32 = "";
            for ($i = 0; $i < 4; ++$i) {
                $sUtf32 .= chr($iUnicode & 0xff);
                $iUnicode = $iUnicode >> 8;
            }
            return iconv('utf-32le', $this->sCharset, $sUtf32);
        }
        if ($bIsForIdentifier) {
            $peek = ord($this->peek());
            // Ranges: a-z A-Z 0-9 - _
            if (
                ($peek >= 97 && $peek <= 122)
                || ($peek >= 65 && $peek <= 90)
                || ($peek >= 48 && $peek <= 57)
                || ($peek === 45)
                || ($peek === 95)
                || ($peek > 0xa1)
            ) {
                return $this->consume(1);
            }
        } else {
            return $this->consume(1);
        }
        return null;
    }

    /**
     * @return array<int, Comment>|void
     *
     * @throws UnexpectedEOFException
     * @throws UnexpectedTokenException
     */
    public function consumeWhiteSpace()
    {
        $aComments = [];
        do {
            while (preg_match('/\\s/isSu', $this->peek()) === 1) {
                $this->consume(1);
            }
            if ($this->oParserSettings->bLenientParsing) {
                try {
                    $oComment = $this->consumeComment();
                } catch (UnexpectedEOFException $e) {
                    $this->iCurrentPosition = $this->iLength;
                    return $aComments;
                }
            } else {
                $oComment = $this->consumeComment();
            }
            if ($oComment !== false) {
                $aComments[] = $oComment;
            }
        } while ($oComment !== false);
        return $aComments;
    }

    /**
     * @param string $sString
     * @param bool $bCaseInsensitive
     *
     * @return bool
     */
    public function comes($sString, $bCaseInsensitive = false)
    {
        $sPeek = $this->peek(strlen($sString));
        return ($sPeek == '')
            ? false
            : $this->streql($sPeek, $sString, $bCaseInsensitive);
    }

    /**
     * @param int $iLength
     * @param int $iOffset
     *
     * @return string
     */
    public function peek($iLength = 1, $iOffset = 0)
    {
        $iOffset += $this->iCurrentPosition;
        if ($iOffset >= $this->iLength) {
            return '';
        }
        return $this->substr($iOffset, $iLength);
    }

    /**
     * @param int $mValue
     *
     * @return string
     *
     * @throws UnexpectedEOFException
     * @throws UnexpectedTokenException
     */
    public function consume($mValue = 1)
    {
        if (is_string($mValue)) {
            $iLineCount = substr_count($mValue, "\n");
            $iLength = $this->strlen($mValue);
            if (!$this->streql($this->substr($this->iCurrentPosition, $iLength), $mValue)) {
                throw new UnexpectedTokenException($mValue, $this->peek(max($iLength, 5)), $this->iLineNo);
            }
            $this->iLineNo += $iLineCount;
            $this->iCurrentPosition += $this->strlen($mValue);
            return $mValue;
        } else {
            if ($this->iCurrentPosition + $mValue > $this->iLength) {
                throw new UnexpectedEOFException($mValue, $this->peek(5), 'count', $this->iLineNo);
            }
            $sResult = $this->substr($this->iCurrentPosition, $mValue);
            $iLineCount = substr_count($sResult, "\n");
            $this->iLineNo += $iLineCount;
            $this->iCurrentPosition += $mValue;
            return $sResult;
        }
    }

    /**
     * @param string $mExpression
     * @param int|null $iMaxLength
     *
     * @return string
     *
     * @throws UnexpectedEOFException
     * @throws UnexpectedTokenException
     */
    public function consumeExpression($mExpression, $iMaxLength = null)
    {
        $aMatches = null;
        $sInput = $iMaxLength !== null ? $this->peek($iMaxLength) : $this->inputLeft();
        if (preg_match($mExpression, $sInput, $aMatches, PREG_OFFSET_CAPTURE) === 1) {
            return $this->consume($aMatches[0][0]);
        }
        throw new UnexpectedTokenException($mExpression, $this->peek(5), 'expression', $this->iLineNo);
    }

    /**
     * @return Comment|false
     */
    public function consumeComment()
    {
        $mComment = false;
        if ($this->comes('/*')) {
            $iLineNo = $this->iLineNo;
            $this->consume(1);
            $mComment = '';
            while (($char = $this->consume(1)) !== '') {
                $mComment .= $char;
                if ($this->comes('*/')) {
                    $this->consume(2);
                    break;
                }
            }
        }

        if ($mComment !== false) {
            // We skip the * which was included in the comment.
            return new Comment(substr($mComment, 1), $iLineNo);
        }

        return $mComment;
    }

    /**
     * @return bool
     */
    public function isEnd()
    {
        return $this->iCurrentPosition >= $this->iLength;
    }

    /**
     * @param array<array-key, string>|string $aEnd
     * @param string $bIncludeEnd
     * @param string $consumeEnd
     * @param array<int, Comment> $comments
     *
     * @return string
     *
     * @throws UnexpectedEOFException
     * @throws UnexpectedTokenException
     */
    public function consumeUntil($aEnd, $bIncludeEnd = false, $consumeEnd = false, array &$comments = [])
    {
        $aEnd = is_array($aEnd) ? $aEnd : [$aEnd];
        $out = '';
        $start = $this->iCurrentPosition;

        while (!$this->isEnd()) {
            $char = $this->consume(1);
            if (in_array($char, $aEnd)) {
                if ($bIncludeEnd) {
                    $out .= $char;
                } elseif (!$consumeEnd) {
                    $this->iCurrentPosition -= $this->strlen($char);
                }
                return $out;
            }
            $out .= $char;
            if ($comment = $this->consumeComment()) {
                $comments[] = $comment;
            }
        }

        if (in_array(self::EOF, $aEnd)) {
            return $out;
        }

        $this->iCurrentPosition = $start;
        throw new UnexpectedEOFException(
            'One of ("' . implode('","', $aEnd) . '")',
            $this->peek(5),
            'search',
            $this->iLineNo
        );
    }

    /**
     * @return string
     */
    private function inputLeft()
    {
        return $this->substr($this->iCurrentPosition, -1);
    }

    /**
     * @param string $sString1
     * @param string $sString2
     * @param bool $bCaseInsensitive
     *
     * @return bool
     */
    public function streql($sString1, $sString2, $bCaseInsensitive = true)
    {
        if ($bCaseInsensitive) {
            return $this->strtolower($sString1) === $this->strtolower($sString2);
        } else {
            return $sString1 === $sString2;
        }
    }

    /**
     * @param int $iAmount
     *
     * @return void
     */
    public function backtrack($iAmount)
    {
        $this->iCurrentPosition -= $iAmount;
    }

    /**
     * @param string $sString
     *
     * @return int
     */
    public function strlen($sString)
    {
        if ($this->oParserSettings->bMultibyteSupport) {
            return mb_strlen($sString, $this->sCharset);
        } else {
            return strlen($sString);
        }
    }

    /**
     * @param int $iStart
     * @param int $iLength
     *
     * @return string
     */
    private function substr($iStart, $iLength)
    {
        if ($iLength < 0) {
            $iLength = $this->iLength - $iStart + $iLength;
        }
        if ($iStart + $iLength > $this->iLength) {
            $iLength = $this->iLength - $iStart;
        }
        $sResult = '';
        while ($iLength > 0) {
            $sResult .= $this->aText[$iStart];
            $iStart++;
            $iLength--;
        }
        return $sResult;
    }

    /**
     * @param string $sString
     *
     * @return string
     */
    private function strtolower($sString)
    {
        if ($this->oParserSettings->bMultibyteSupport) {
            return mb_strtolower($sString, $this->sCharset);
        } else {
            return strtolower($sString);
        }
    }

    /**
     * @param string $sString
     *
     * @return array<int, string>
     */
    private function strsplit($sString)
    {
        if ($this->oParserSettings->bMultibyteSupport) {
            if ($this->streql($this->sCharset, 'utf-8')) {
                return preg_split('//u', $sString, -1, PREG_SPLIT_NO_EMPTY);
            } else {
                $iLength = mb_strlen($sString, $this->sCharset);
                $aResult = [];
                for ($i = 0; $i < $iLength; ++$i) {
                    $aResult[] = mb_substr($sString, $i, 1, $this->sCharset);
                }
                return $aResult;
            }
        } else {
            if ($sString === '') {
                return [];
            } else {
                return str_split($sString);
            }
        }
    }

    /**
     * @param string $sString
     * @param string $sNeedle
     * @param int $iOffset
     *
     * @return int|false
     */
    private function strpos($sString, $sNeedle, $iOffset)
    {
        if ($this->oParserSettings->bMultibyteSupport) {
            return mb_strpos($sString, $sNeedle, $iOffset, $this->sCharset);
        } else {
            return strpos($sString, $sNeedle, $iOffset);
        }
    }
}
<?php

namespace Sabberworm\CSS\Parsing;

use Sabberworm\CSS\Position\Position;
use Sabberworm\CSS\Position\Positionable;

class SourceException extends \Exception implements Positionable
{
    use Position;

    /**
     * @param string $sMessage
     * @param int $iLineNo
     */
    public function __construct($sMessage, $iLineNo = 0)
    {
        $this->setPosition($iLineNo);
        if (!empty($iLineNo)) {
            $sMessage .= " [line no: $iLineNo]";
        }
        parent::__construct($sMessage);
    }
}
<?php

namespace Sabberworm\CSS\Parsing;

/**
 * Thrown if the CSS parser encounters end of file it did not expect.
 *
 * Extends `UnexpectedTokenException` in order to preserve backwards compatibility.
 */
class UnexpectedEOFException extends UnexpectedTokenException
{
}
<?php

namespace Sabberworm\CSS\Parsing;

/**
 * Thrown if the CSS parser encounters a token it did not expect.
 */
class UnexpectedTokenException extends SourceException
{
    /**
     * @var string
     */
    private $sExpected;

    /**
     * @var string
     */
    private $sFound;

    /**
     * Possible values: literal, identifier, count, expression, search
     *
     * @var string
     */
    private $sMatchType;

    /**
     * @param string $sExpected
     * @param string $sFound
     * @param string $sMatchType
     * @param int $iLineNo
     */
    public function __construct($sExpected, $sFound, $sMatchType = 'literal', $iLineNo = 0)
    {
        $this->sExpected = $sExpected;
        $this->sFound = $sFound;
        $this->sMatchType = $sMatchType;
        $sMessage = "Token “{$sExpected}” ({$sMatchType}) not found. Got “{$sFound}”.";
        if ($this->sMatchType === 'search') {
            $sMessage = "Search for “{$sExpected}” returned no results. Context: “{$sFound}”.";
        } elseif ($this->sMatchType === 'count') {
            $sMessage = "Next token was expected to have {$sExpected} chars. Context: “{$sFound}”.";
        } elseif ($this->sMatchType === 'identifier') {
            $sMessage = "Identifier expected. Got “{$sFound}”";
        } elseif ($this->sMatchType === 'custom') {
            $sMessage = trim("$sExpected $sFound");
        }

        parent::__construct($sMessage, $iLineNo);
    }
}
<?php

declare(strict_types=1);

namespace Sabberworm\CSS\Position;

/**
 * Provides a standard reusable implementation of `Positionable`.
 *
 * @internal
 *
 * @phpstan-require-implements Positionable
 */
trait Position
{
    /**
     * @var int<1, max>|null
     */
    protected $lineNumber;

    /**
     * @var int<0, max>|null
     */
    protected $columnNumber;

    /**
     * @return int<1, max>|null
     */
    public function getLineNumber()
    {
        return $this->lineNumber;
    }

    /**
     * @return int<0, max>
     */
    public function getLineNo()
    {
        $lineNumber = $this->getLineNumber();

        return $lineNumber !== null ? $lineNumber : 0;
    }

    /**
     * @return int<0, max>|null
     */
    public function getColumnNumber()
    {
        return $this->columnNumber;
    }

    /**
     * @return int<0, max>
     */
    public function getColNo()
    {
        $columnNumber = $this->getColumnNumber();

        return $columnNumber !== null ? $columnNumber : 0;
    }

    /**
     * @param int<0, max>|null $lineNumber
     * @param int<0, max>|null $columnNumber
     */
    public function setPosition($lineNumber, $columnNumber = null)
    {
        // The conditional is for backwards compatibility (backcompat); `0` will not be allowed in future.
        $this->lineNumber = $lineNumber !== 0 ? $lineNumber : null;
        $this->columnNumber = $columnNumber;
    }
}
<?php

declare(strict_types=1);

namespace Sabberworm\CSS\Position;

/**
 * Represents a CSS item that may have a position in the source CSS document (line number and possibly column number).
 *
 * A standard implementation of this interface is available in the `Position` trait.
 */
interface Positionable
{
    /**
     * @return int<1, max>|null
     */
    public function getLineNumber();

    /**
     * @return int<0, max>
     *
     * @deprecated in version 8.9.0, will be removed in v9.0. Use `getLineNumber()` instead.
     */
    public function getLineNo();

    /**
     * @return int<0, max>|null
     */
    public function getColumnNumber();

    /**
     * @return int<0, max>
     *
     * @deprecated in version 8.9.0, will be removed in v9.0. Use `getColumnNumber()` instead.
     */
    public function getColNo();

    /**
     * @param int<0, max>|null $lineNumber
     *        Providing zero for this parameter is deprecated in version 8.9.0, and will not be supported from v9.0.
     *        Use `null` instead when no line number is available.
     * @param int<0, max>|null $columnNumber
     */
    public function setPosition($lineNumber, $columnNumber = null);
}
<?php

namespace Sabberworm\CSS\Property;

use Sabberworm\CSS\Comment\Commentable;
use Sabberworm\CSS\Renderable;

interface AtRule extends Renderable, Commentable
{
    /**
     * Since there are more set rules than block rules,
     * we’re whitelisting the block rules and have anything else be treated as a set rule.
     *
     * @var string
     *
     * @internal since 8.5.2
     */
    const BLOCK_RULES = 'media/document/supports/region-style/font-feature-values';

    /**
     * … and more font-specific ones (to be used inside font-feature-values)
     *
     * @var string
     *
     * @internal since 8.5.2
     */
    const SET_RULES = 'font-face/counter-style/page/swash/styleset/annotation';

    /**
     * @return string|null
     */
    public function atRuleName();

    /**
     * @return string|null
     */
    public function atRuleArgs();
}
<?php

namespace Sabberworm\CSS\Property;

use Sabberworm\CSS\Comment\Comment;
use Sabberworm\CSS\OutputFormat;
use Sabberworm\CSS\Position\Position;
use Sabberworm\CSS\Position\Positionable;

/**
 * `CSSNamespace` represents an `@namespace` rule.
 */
class CSSNamespace implements AtRule, Positionable
{
    use Position;

    /**
     * @var string
     */
    private $mUrl;

    /**
     * @var string
     */
    private $sPrefix;

    /**
     * @var int
     */
    private $iLineNo;

    /**
     * @var array<array-key, Comment>
     *
     * @internal since 8.8.0
     */
    protected $aComments;

    /**
     * @param string $mUrl
     * @param string|null $sPrefix
     * @param int $iLineNo
     */
    public function __construct($mUrl, $sPrefix = null, $iLineNo = 0)
    {
        $this->mUrl = $mUrl;
        $this->sPrefix = $sPrefix;
        $this->setPosition($iLineNo);
        $this->aComments = [];
    }

    /**
     * @return string
     *
     * @deprecated in V8.8.0, will be removed in V9.0.0. Use `render` instead.
     */
    public function __toString()
    {
        return $this->render(new OutputFormat());
    }

    /**
     * @param OutputFormat|null $oOutputFormat
     *
     * @return string
     */
    public function render($oOutputFormat)
    {
        return '@namespace ' . ($this->sPrefix === null ? '' : $this->sPrefix . ' ')
            . $this->mUrl->render($oOutputFormat) . ';';
    }

    /**
     * @return string
     */
    public function getUrl()
    {
        return $this->mUrl;
    }

    /**
     * @return string|null
     */
    public function getPrefix()
    {
        return $this->sPrefix;
    }

    /**
     * @param string $mUrl
     *
     * @return void
     */
    public function setUrl($mUrl)
    {
        $this->mUrl = $mUrl;
    }

    /**
     * @param string $sPrefix
     *
     * @return void
     */
    public function setPrefix($sPrefix)
    {
        $this->sPrefix = $sPrefix;
    }

    /**
     * @return string
     */
    public function atRuleName()
    {
        return 'namespace';
    }

    /**
     * @return array<int, string>
     */
    public function atRuleArgs()
    {
        $aResult = [$this->mUrl];
        if ($this->sPrefix) {
            array_unshift($aResult, $this->sPrefix);
        }
        return $aResult;
    }

    /**
     * @param array<array-key, Comment> $aComments
     *
     * @return void
     */
    public function addComments(array $aComments)
    {
        $this->aComments = array_merge($this->aComments, $aComments);
    }

    /**
     * @return array<array-key, Comment>
     */
    public function getComments()
    {
        return $this->aComments;
    }

    /**
     * @param array<array-key, Comment> $aComments
     *
     * @return void
     */
    public function setComments(array $aComments)
    {
        $this->aComments = $aComments;
    }
}
<?php

namespace Sabberworm\CSS\Property;

use Sabberworm\CSS\Comment\Comment;
use Sabberworm\CSS\OutputFormat;
use Sabberworm\CSS\Position\Position;
use Sabberworm\CSS\Position\Positionable;
use Sabberworm\CSS\Value\CSSString;

/**
 * Class representing an `@charset` rule.
 *
 * The following restrictions apply:
 * - May not be found in any CSSList other than the Document.
 * - May only appear at the very top of a Document’s contents.
 * - Must not appear more than once.
 */
class Charset implements AtRule, Positionable
{
    use Position;

    /**
     * @var CSSString
     */
    private $oCharset;

    /**
     * @var int
     *
     * @internal since 8.8.0
     */
    protected $iLineNo;

    /**
     * @var array<array-key, Comment>
     *
     * @internal since 8.8.0
     */
    protected $aComments;

    /**
     * @param CSSString $oCharset
     * @param int $iLineNo
     */
    public function __construct(CSSString $oCharset, $iLineNo = 0)
    {
        $this->oCharset = $oCharset;
        $this->setPosition($iLineNo);
        $this->aComments = [];
    }

    /**
     * @param string|CSSString $oCharset
     *
     * @return void
     */
    public function setCharset($sCharset)
    {
        $sCharset = $sCharset instanceof CSSString ? $sCharset : new CSSString($sCharset);
        $this->oCharset = $sCharset;
    }

    /**
     * @return string
     */
    public function getCharset()
    {
        return $this->oCharset->getString();
    }

    /**
     * @return string
     *
     * @deprecated in V8.8.0, will be removed in V9.0.0. Use `render` instead.
     */
    public function __toString()
    {
        return $this->render(new OutputFormat());
    }

    /**
     * @param OutputFormat|null $oOutputFormat
     *
     * @return string
     */
    public function render($oOutputFormat)
    {
        return "{$oOutputFormat->comments($this)}@charset {$this->oCharset->render($oOutputFormat)};";
    }

    /**
     * @return string
     */
    public function atRuleName()
    {
        return 'charset';
    }

    /**
     * @return string
     */
    public function atRuleArgs()
    {
        return $this->oCharset;
    }

    /**
     * @param array<array-key, Comment> $aComments
     *
     * @return void
     */
    public function addComments(array $aComments)
    {
        $this->aComments = array_merge($this->aComments, $aComments);
    }

    /**
     * @return array<array-key, Comment>
     */
    public function getComments()
    {
        return $this->aComments;
    }

    /**
     * @param array<array-key, Comment> $aComments
     *
     * @return void
     */
    public function setComments(array $aComments)
    {
        $this->aComments = $aComments;
    }
}
<?php

namespace Sabberworm\CSS\Property;

use Sabberworm\CSS\Comment\Comment;
use Sabberworm\CSS\OutputFormat;
use Sabberworm\CSS\Position\Position;
use Sabberworm\CSS\Position\Positionable;
use Sabberworm\CSS\Value\URL;

/**
 * Class representing an `@import` rule.
 */
class Import implements AtRule, Positionable
{
    use Position;

    /**
     * @var URL
     */
    private $oLocation;

    /**
     * @var string
     */
    private $sMediaQuery;

    /**
     * @var array<array-key, Comment>
     *
     * @internal since 8.8.0
     */
    protected $aComments;

    /**
     * @param URL $oLocation
     * @param string $sMediaQuery
     * @param int $iLineNo
     */
    public function __construct(URL $oLocation, $sMediaQuery, $iLineNo = 0)
    {
        $this->oLocation = $oLocation;
        $this->sMediaQuery = $sMediaQuery;
        $this->setPosition($iLineNo);
        $this->aComments = [];
    }

    /**
     * @param URL $oLocation
     *
     * @return void
     */
    public function setLocation($oLocation)
    {
        $this->oLocation = $oLocation;
    }

    /**
     * @return URL
     */
    public function getLocation()
    {
        return $this->oLocation;
    }

    /**
     * @return string
     *
     * @deprecated in V8.8.0, will be removed in V9.0.0. Use `render` instead.
     */
    public function __toString()
    {
        return $this->render(new OutputFormat());
    }

    /**
     * @param OutputFormat|null $oOutputFormat
     *
     * @return string
     */
    public function render($oOutputFormat)
    {
        return $oOutputFormat->comments($this) . "@import " . $this->oLocation->render($oOutputFormat)
            . ($this->sMediaQuery === null ? '' : ' ' . $this->sMediaQuery) . ';';
    }

    /**
     * @return string
     */
    public function atRuleName()
    {
        return 'import';
    }

    /**
     * @return array<int, URL|string>
     */
    public function atRuleArgs()
    {
        $aResult = [$this->oLocation];
        if ($this->sMediaQuery) {
            array_push($aResult, $this->sMediaQuery);
        }
        return $aResult;
    }

    /**
     * @param array<array-key, Comment> $aComments
     *
     * @return void
     */
    public function addComments(array $aComments)
    {
        $this->aComments = array_merge($this->aComments, $aComments);
    }

    /**
     * @return array<array-key, Comment>
     */
    public function getComments()
    {
        return $this->aComments;
    }

    /**
     * @param array<array-key, Comment> $aComments
     *
     * @return void
     */
    public function setComments(array $aComments)
    {
        $this->aComments = $aComments;
    }

    /**
     * @return string
     */
    public function getMediaQuery()
    {
        return $this->sMediaQuery;
    }
}
<?php

namespace Sabberworm\CSS\Property;

class KeyframeSelector extends Selector
{
    /**
     * regexp for specificity calculations
     *
     * @var string
     *
     * @internal since 8.5.2
     */
    const SELECTOR_VALIDATION_RX = '/
    ^(
        (?:
            [a-zA-Z0-9\x{00A0}-\x{FFFF}_^$|*="\'~\[\]()\-\s\.:#+>]* # any sequence of valid unescaped characters
            (?:\\\\.)?                                              # a single escaped character
            (?:([\'"]).*?(?<!\\\\)\2)?                              # a quoted text like [id="example"]
        )*
    )|
    (\d+%)                                                          # keyframe animation progress percentage (e.g. 50%)
    $
    /ux';
}
<?php

namespace Sabberworm\CSS\Property;

/**
 * Class representing a single CSS selector. Selectors have to be split by the comma prior to being passed into this
 * class.
 */
class Selector
{
    /**
     * regexp for specificity calculations
     *
     * @var string
     *
     * @internal
     */
    const NON_ID_ATTRIBUTES_AND_PSEUDO_CLASSES_RX = '/
        (\.[\w]+)                   # classes
        |
        \[(\w+)                     # attributes
        |
        (\:(                        # pseudo classes
            link|visited|active
            |hover|focus
            |lang
            |target
            |enabled|disabled|checked|indeterminate
            |root
            |nth-child|nth-last-child|nth-of-type|nth-last-of-type
            |first-child|last-child|first-of-type|last-of-type
            |only-child|only-of-type
            |empty|contains
        ))
        /ix';

    /**
     * regexp for specificity calculations
     *
     * @var string
     *
     * @internal
     */
    const ELEMENTS_AND_PSEUDO_ELEMENTS_RX = '/
        ((^|[\s\+\>\~]+)[\w]+   # elements
        |
        \:{1,2}(                # pseudo-elements
            after|before|first-letter|first-line|selection
        ))
        /ix';

    /**
     * regexp for specificity calculations
     *
     * @var string
     *
     * @internal since 8.5.2
     */
    const SELECTOR_VALIDATION_RX = '/
        ^(
            (?:
                [a-zA-Z0-9\x{00A0}-\x{FFFF}_^$|*="\'~\[\]()\-\s\.:#+>]* # any sequence of valid unescaped characters
                (?:\\\\.)?                                              # a single escaped character
                (?:([\'"]).*?(?<!\\\\)\2)?                              # a quoted text like [id="example"]
            )*
        )$
        /ux';

    /**
     * @var string
     */
    private $sSelector;

    /**
     * @var int|null
     */
    private $iSpecificity;

    /**
     * @param string $sSelector
     *
     * @return bool
     *
     * @internal since V8.8.0
     */
    public static function isValid($sSelector)
    {
        return preg_match(static::SELECTOR_VALIDATION_RX, $sSelector);
    }

    /**
     * @param string $sSelector
     * @param bool $bCalculateSpecificity @deprecated since V8.8.0, will be removed in V9.0.0
     */
    public function __construct($sSelector, $bCalculateSpecificity = false)
    {
        $this->setSelector($sSelector);
        if ($bCalculateSpecificity) {
            $this->getSpecificity();
        }
    }

    /**
     * @return string
     */
    public function getSelector()
    {
        return $this->sSelector;
    }

    /**
     * @param string $sSelector
     *
     * @return void
     */
    public function setSelector($sSelector)
    {
        $this->sSelector = trim($sSelector);
        $this->iSpecificity = null;
    }

    /**
     * @return string
     *
     * @deprecated in V8.8.0, will be removed in V9.0.0. Use `render` instead.
     */
    public function __toString()
    {
        return $this->getSelector();
    }

    /**
     * @return int
     */
    public function getSpecificity()
    {
        if ($this->iSpecificity === null) {
            $a = 0;
            /// @todo should exclude \# as well as "#"
            $aMatches = null;
            $b = substr_count($this->sSelector, '#');
            $c = preg_match_all(self::NON_ID_ATTRIBUTES_AND_PSEUDO_CLASSES_RX, $this->sSelector, $aMatches);
            $d = preg_match_all(self::ELEMENTS_AND_PSEUDO_ELEMENTS_RX, $this->sSelector, $aMatches);
            $this->iSpecificity = ($a * 1000) + ($b * 100) + ($c * 10) + $d;
        }
        return $this->iSpecificity;
    }
}
<?php

namespace Sabberworm\CSS;

interface Renderable
{
    /**
     * @return string
     *
     * @deprecated in V8.8.0, will be removed in V9.0.0. Use `render` instead.
     */
    public function __toString();

    /**
     * @param OutputFormat|null $oOutputFormat
     *
     * @return string
     */
    public function render($oOutputFormat);

    /**
     * @return int
     */
    public function getLineNo();
}
<?php

namespace Sabberworm\CSS\Rule;

use Sabberworm\CSS\Comment\Comment;
use Sabberworm\CSS\Comment\Commentable;
use Sabberworm\CSS\CSSElement;
use Sabberworm\CSS\OutputFormat;
use Sabberworm\CSS\Parsing\ParserState;
use Sabberworm\CSS\Parsing\UnexpectedEOFException;
use Sabberworm\CSS\Parsing\UnexpectedTokenException;
use Sabberworm\CSS\Position\Position;
use Sabberworm\CSS\Position\Positionable;
use Sabberworm\CSS\Value\RuleValueList;
use Sabberworm\CSS\Value\Value;

/**
 * `Rule`s just have a string key (the rule) and a 'Value'.
 *
 * In CSS, `Rule`s are expressed as follows: “key: value[0][0] value[0][1], value[1][0] value[1][1];”
 */
class Rule implements Commentable, CSSElement, Positionable
{
    use Position;

    /**
     * @var string
     */
    private $sRule;

    /**
     * @var RuleValueList|string|null
     */
    private $mValue;

    /**
     * @var bool
     */
    private $bIsImportant;

    /**
     * @var array<int, int>
     */
    private $aIeHack;

    /**
     * @var array<array-key, Comment>
     *
     * @internal since 8.8.0
     */
    protected $aComments;

    /**
     * @param string $sRule
     * @param int $iLineNo
     * @param int $iColNo
     */
    public function __construct($sRule, $iLineNo = 0, $iColNo = 0)
    {
        $this->sRule = $sRule;
        $this->mValue = null;
        $this->bIsImportant = false;
        $this->aIeHack = [];
        $this->setPosition($iLineNo, $iColNo);
        $this->aComments = [];
    }

    /**
     * @param array<int, Comment> $commentsBeforeRule
     *
     * @return Rule
     *
     * @throws UnexpectedEOFException
     * @throws UnexpectedTokenException
     *
     * @internal since V8.8.0
     */
    public static function parse(ParserState $oParserState, $commentsBeforeRule = [])
    {
        $aComments = \array_merge($commentsBeforeRule, $oParserState->consumeWhiteSpace());
        $oRule = new Rule(
            $oParserState->parseIdentifier(!$oParserState->comes("--")),
            $oParserState->currentLine(),
            $oParserState->currentColumn()
        );
        $oRule->setComments($aComments);
        $oRule->addComments($oParserState->consumeWhiteSpace());
        $oParserState->consume(':');
        $oValue = Value::parseValue($oParserState, self::listDelimiterForRule($oRule->getRule()));
        $oRule->setValue($oValue);
        if ($oParserState->getSettings()->bLenientParsing) {
            while ($oParserState->comes('\\')) {
                $oParserState->consume('\\');
                $oRule->addIeHack($oParserState->consume());
                $oParserState->consumeWhiteSpace();
            }
        }
        $oParserState->consumeWhiteSpace();
        if ($oParserState->comes('!')) {
            $oParserState->consume('!');
            $oParserState->consumeWhiteSpace();
            $oParserState->consume('important');
            $oRule->setIsImportant(true);
        }
        $oParserState->consumeWhiteSpace();
        while ($oParserState->comes(';')) {
            $oParserState->consume(';');
        }

        return $oRule;
    }

    /**
     * Returns a list of delimiters (or separators).
     * The first item is the innermost separator (or, put another way, the highest-precedence operator).
     * The sequence continues to the outermost separator (or lowest-precedence operator).
     *
     * @param string $sRule
     *
     * @return list<non-empty-string>
     */
    private static function listDelimiterForRule($sRule)
    {
        if (preg_match('/^font($|-)/', $sRule)) {
            return [',', '/', ' '];
        }

        switch ($sRule) {
            case 'src':
                return [' ', ','];
            default:
                return [',', ' ', '/'];
        }
    }

    /**
     * @param string $sRule
     *
     * @return void
     */
    public function setRule($sRule)
    {
        $this->sRule = $sRule;
    }

    /**
     * @return string
     */
    public function getRule()
    {
        return $this->sRule;
    }

    /**
     * @return RuleValueList|string|null
     */
    public function getValue()
    {
        return $this->mValue;
    }

    /**
     * @param RuleValueList|string|null $mValue
     *
     * @return void
     */
    public function setValue($mValue)
    {
        $this->mValue = $mValue;
    }

    /**
     * @param array<array-key, array<array-key, RuleValueList>> $aSpaceSeparatedValues
     *
     * @return RuleValueList
     *
     * @deprecated will be removed in version 9.0
     *             Old-Style 2-dimensional array given. Retained for (some) backwards-compatibility.
     *             Use `setValue()` instead and wrap the value inside a RuleValueList if necessary.
     */
    public function setValues(array $aSpaceSeparatedValues)
    {
        $oSpaceSeparatedList = null;
        if (count($aSpaceSeparatedValues) > 1) {
            $oSpaceSeparatedList = new RuleValueList(' ', $this->iLineNo);
        }
        foreach ($aSpaceSeparatedValues as $aCommaSeparatedValues) {
            $oCommaSeparatedList = null;
            if (count($aCommaSeparatedValues) > 1) {
                $oCommaSeparatedList = new RuleValueList(',', $this->iLineNo);
            }
            foreach ($aCommaSeparatedValues as $mValue) {
                if (!$oSpaceSeparatedList && !$oCommaSeparatedList) {
                    $this->mValue = $mValue;
                    return $mValue;
                }
                if ($oCommaSeparatedList) {
                    $oCommaSeparatedList->addListComponent($mValue);
                } else {
                    $oSpaceSeparatedList->addListComponent($mValue);
                }
            }
            if (!$oSpaceSeparatedList) {
                $this->mValue = $oCommaSeparatedList;
                return $oCommaSeparatedList;
            } else {
                $oSpaceSeparatedList->addListComponent($oCommaSeparatedList);
            }
        }
        $this->mValue = $oSpaceSeparatedList;
        return $oSpaceSeparatedList;
    }

    /**
     * @return array<int, array<int, RuleValueList>>
     *
     * @deprecated will be removed in version 9.0
     *             Old-Style 2-dimensional array returned. Retained for (some) backwards-compatibility.
     *             Use `getValue()` instead and check for the existence of a (nested set of) ValueList object(s).
     */
    public function getValues()
    {
        if (!$this->mValue instanceof RuleValueList) {
            return [[$this->mValue]];
        }
        if ($this->mValue->getListSeparator() === ',') {
            return [$this->mValue->getListComponents()];
        }
        $aResult = [];
        foreach ($this->mValue->getListComponents() as $mValue) {
            if (!$mValue instanceof RuleValueList || $mValue->getListSeparator() !== ',') {
                $aResult[] = [$mValue];
                continue;
            }
            if ($this->mValue->getListSeparator() === ' ' || count($aResult) === 0) {
                $aResult[] = [];
            }
            foreach ($mValue->getListComponents() as $mValue) {
                $aResult[count($aResult) - 1][] = $mValue;
            }
        }
        return $aResult;
    }

    /**
     * Adds a value to the existing value. Value will be appended if a `RuleValueList` exists of the given type.
     * Otherwise, the existing value will be wrapped by one.
     *
     * @param RuleValueList|array<int, RuleValueList> $mValue
     * @param string $sType
     *
     * @return void
     */
    public function addValue($mValue, $sType = ' ')
    {
        if (!is_array($mValue)) {
            $mValue = [$mValue];
        }
        if (!$this->mValue instanceof RuleValueList || $this->mValue->getListSeparator() !== $sType) {
            $mCurrentValue = $this->mValue;
            $this->mValue = new RuleValueList($sType, $this->getLineNumber());
            if ($mCurrentValue) {
                $this->mValue->addListComponent($mCurrentValue);
            }
        }
        foreach ($mValue as $mValueItem) {
            $this->mValue->addListComponent($mValueItem);
        }
    }

    /**
     * @param int $iModifier
     *
     * @return void
     *
     * @deprecated since V8.8.0, will be removed in V9.0
     */
    public function addIeHack($iModifier)
    {
        $this->aIeHack[] = $iModifier;
    }

    /**
     * @param array<int, int> $aModifiers
     *
     * @return void
     *
     * @deprecated since V8.8.0, will be removed in V9.0
     */
    public function setIeHack(array $aModifiers)
    {
        $this->aIeHack = $aModifiers;
    }

    /**
     * @return array<int, int>
     *
     * @deprecated since V8.8.0, will be removed in V9.0
     */
    public function getIeHack()
    {
        return $this->aIeHack;
    }

    /**
     * @param bool $bIsImportant
     *
     * @return void
     */
    public function setIsImportant($bIsImportant)
    {
        $this->bIsImportant = $bIsImportant;
    }

    /**
     * @return bool
     */
    public function getIsImportant()
    {
        return $this->bIsImportant;
    }

    /**
     * @return string
     *
     * @deprecated in V8.8.0, will be removed in V9.0.0. Use `render` instead.
     */
    public function __toString()
    {
        return $this->render(new OutputFormat());
    }

    /**
     * @param OutputFormat|null $oOutputFormat
     *
     * @return string
     */
    public function render($oOutputFormat)
    {
        $sResult = "{$oOutputFormat->comments($this)}{$this->sRule}:{$oOutputFormat->spaceAfterRuleName()}";
        if ($this->mValue instanceof Value) { // Can also be a ValueList
            $sResult .= $this->mValue->render($oOutputFormat);
        } else {
            $sResult .= $this->mValue;
        }
        if (!empty($this->aIeHack)) {
            $sResult .= ' \\' . implode('\\', $this->aIeHack);
        }
        if ($this->bIsImportant) {
            $sResult .= ' !important';
        }
        $sResult .= ';';
        return $sResult;
    }

    /**
     * @param array<array-key, Comment> $aComments
     *
     * @return void
     */
    public function addComments(array $aComments)
    {
        $this->aComments = array_merge($this->aComments, $aComments);
    }

    /**
     * @return array<array-key, Comment>
     */
    public function getComments()
    {
        return $this->aComments;
    }

    /**
     * @param array<array-key, Comment> $aComments
     *
     * @return void
     */
    public function setComments(array $aComments)
    {
        $this->aComments = $aComments;
    }
}
<?php

namespace Sabberworm\CSS\RuleSet;

use Sabberworm\CSS\OutputFormat;
use Sabberworm\CSS\Property\AtRule;

/**
 * This class represents rule sets for generic at-rules which are not covered by specific classes, i.e., not
 * `@import`, `@charset` or `@media`.
 *
 * A common example for this is `@font-face`.
 */
class AtRuleSet extends RuleSet implements AtRule
{
    /**
     * @var string
     */
    private $sType;

    /**
     * @var string
     */
    private $sArgs;

    /**
     * @param string $sType
     * @param string $sArgs
     * @param int $iLineNo
     */
    public function __construct($sType, $sArgs = '', $iLineNo = 0)
    {
        parent::__construct($iLineNo);
        $this->sType = $sType;
        $this->sArgs = $sArgs;
    }

    /**
     * @return string
     */
    public function atRuleName()
    {
        return $this->sType;
    }

    /**
     * @return string
     */
    public function atRuleArgs()
    {
        return $this->sArgs;
    }

    /**
     * @return string
     *
     * @deprecated in V8.8.0, will be removed in V9.0.0. Use `render` instead.
     */
    public function __toString()
    {
        return $this->render(new OutputFormat());
    }

    /**
     * @param OutputFormat|null $oOutputFormat
     *
     * @return string
     */
    public function render($oOutputFormat)
    {
        $sResult = $oOutputFormat->comments($this);
        $sArgs = $this->sArgs;
        if ($sArgs) {
            $sArgs = ' ' . $sArgs;
        }
        $sResult .= "@{$this->sType}$sArgs{$oOutputFormat->spaceBeforeOpeningBrace()}{";
        $sResult .= $this->renderRules($oOutputFormat);
        $sResult .= '}';
        return $sResult;
    }
}
<?php

namespace Sabberworm\CSS\RuleSet;

use Sabberworm\CSS\CSSList\CSSList;
use Sabberworm\CSS\CSSList\KeyFrame;
use Sabberworm\CSS\OutputFormat;
use Sabberworm\CSS\Parsing\OutputException;
use Sabberworm\CSS\Parsing\ParserState;
use Sabberworm\CSS\Parsing\UnexpectedEOFException;
use Sabberworm\CSS\Parsing\UnexpectedTokenException;
use Sabberworm\CSS\Property\KeyframeSelector;
use Sabberworm\CSS\Property\Selector;
use Sabberworm\CSS\Rule\Rule;
use Sabberworm\CSS\Value\Color;
use Sabberworm\CSS\Value\RuleValueList;
use Sabberworm\CSS\Value\Size;
use Sabberworm\CSS\Value\URL;
use Sabberworm\CSS\Value\Value;

/**
 * This class represents a `RuleSet` constrained by a `Selector`.
 *
 * It contains an array of selector objects (comma-separated in the CSS) as well as the rules to be applied to the
 * matching elements.
 *
 * Declaration blocks usually appear directly inside a `Document` or another `CSSList` (mostly a `MediaQuery`).
 */
class DeclarationBlock extends RuleSet
{
    /**
     * @var array<int, Selector|string>
     */
    private $aSelectors;

    /**
     * @param int $iLineNo
     */
    public function __construct($iLineNo = 0)
    {
        parent::__construct($iLineNo);
        $this->aSelectors = [];
    }

    /**
     * @param CSSList|null $oList
     *
     * @return DeclarationBlock|false
     *
     * @throws UnexpectedTokenException
     * @throws UnexpectedEOFException
     *
     * @internal since V8.8.0
     */
    public static function parse(ParserState $oParserState, $oList = null)
    {
        $aComments = [];
        $oResult = new DeclarationBlock($oParserState->currentLine());
        try {
            $aSelectorParts = [];
            $sStringWrapperChar = false;
            do {
                $aSelectorParts[] = $oParserState->consume(1)
                    . $oParserState->consumeUntil(['{', '}', '\'', '"'], false, false, $aComments);
                if (in_array($oParserState->peek(), ['\'', '"']) && substr(end($aSelectorParts), -1) != "\\") {
                    if ($sStringWrapperChar === false) {
                        $sStringWrapperChar = $oParserState->peek();
                    } elseif ($sStringWrapperChar == $oParserState->peek()) {
                        $sStringWrapperChar = false;
                    }
                }
            } while (!in_array($oParserState->peek(), ['{', '}']) || $sStringWrapperChar !== false);
            $oResult->setSelectors(implode('', $aSelectorParts), $oList);
            if ($oParserState->comes('{')) {
                $oParserState->consume(1);
            }
        } catch (UnexpectedTokenException $e) {
            if ($oParserState->getSettings()->bLenientParsing) {
                if (!$oParserState->comes('}')) {
                    $oParserState->consumeUntil('}', false, true);
                }
                return false;
            } else {
                throw $e;
            }
        }
        $oResult->setComments($aComments);
        RuleSet::parseRuleSet($oParserState, $oResult);
        return $oResult;
    }

    /**
     * @param array<int, Selector|string>|string $mSelector
     * @param CSSList|null $oList
     *
     * @throws UnexpectedTokenException
     */
    public function setSelectors($mSelector, $oList = null)
    {
        if (is_array($mSelector)) {
            $this->aSelectors = $mSelector;
        } else {
            $this->aSelectors = explode(',', $mSelector);
        }
        foreach ($this->aSelectors as $iKey => $mSelector) {
            if (!($mSelector instanceof Selector)) {
                if ($oList === null || !($oList instanceof KeyFrame)) {
                    if (!Selector::isValid($mSelector)) {
                        throw new UnexpectedTokenException(
                            "Selector did not match '" . Selector::SELECTOR_VALIDATION_RX . "'.",
                            $mSelector,
                            "custom"
                        );
                    }
                    $this->aSelectors[$iKey] = new Selector($mSelector);
                } else {
                    if (!KeyframeSelector::isValid($mSelector)) {
                        throw new UnexpectedTokenException(
                            "Selector did not match '" . KeyframeSelector::SELECTOR_VALIDATION_RX . "'.",
                            $mSelector,
                            "custom"
                        );
                    }
                    $this->aSelectors[$iKey] = new KeyframeSelector($mSelector);
                }
            }
        }
    }

    /**
     * Remove one of the selectors of the block.
     *
     * @param Selector|string $mSelector
     *
     * @return bool
     */
    public function removeSelector($mSelector)
    {
        if ($mSelector instanceof Selector) {
            $mSelector = $mSelector->getSelector();
        }
        foreach ($this->aSelectors as $iKey => $oSelector) {
            if ($oSelector->getSelector() === $mSelector) {
                unset($this->aSelectors[$iKey]);
                return true;
            }
        }
        return false;
    }

    /**
     * @return array<int, Selector|string>
     *
     * @deprecated will be removed in version 9.0; use `getSelectors()` instead
     */
    public function getSelector()
    {
        return $this->getSelectors();
    }

    /**
     * @param Selector|string $mSelector
     * @param CSSList|null $oList
     *
     * @return void
     *
     * @deprecated will be removed in version 9.0; use `setSelectors()` instead
     */
    public function setSelector($mSelector, $oList = null)
    {
        $this->setSelectors($mSelector, $oList);
    }

    /**
     * @return array<int, Selector|string>
     */
    public function getSelectors()
    {
        return $this->aSelectors;
    }

    /**
     * Splits shorthand declarations (e.g. `margin` or `font`) into their constituent parts.
     *
     * @return void
     *
     * @deprecated since 8.7.0, will be removed without substitution in version 9.0 in #511
     */
    public function expandShorthands()
    {
        // border must be expanded before dimensions
        $this->expandBorderShorthand();
        $this->expandDimensionsShorthand();
        $this->expandFontShorthand();
        $this->expandBackgroundShorthand();
        $this->expandListStyleShorthand();
    }

    /**
     * Creates shorthand declarations (e.g. `margin` or `font`) whenever possible.
     *
     * @return void
     *
     * @deprecated since 8.7.0, will be removed without substitution in version 9.0 in #511
     */
    public function createShorthands()
    {
        $this->createBackgroundShorthand();
        $this->createDimensionsShorthand();
        // border must be shortened after dimensions
        $this->createBorderShorthand();
        $this->createFontShorthand();
        $this->createListStyleShorthand();
    }

    /**
     * Splits shorthand border declarations (e.g. `border: 1px red;`).
     *
     * Additional splitting happens in expandDimensionsShorthand.
     *
     * Multiple borders are not yet supported as of 3.
     *
     * @return void
     *
     * @deprecated since 8.7.0, will be removed without substitution in version 9.0 in #511
     */
    public function expandBorderShorthand()
    {
        $aBorderRules = [
            'border',
            'border-left',
            'border-right',
            'border-top',
            'border-bottom',
        ];
        $aBorderSizes = [
            'thin',
            'medium',
            'thick',
        ];
        $aRules = $this->getRulesAssoc();
        foreach ($aBorderRules as $sBorderRule) {
            if (!isset($aRules[$sBorderRule])) {
                continue;
            }
            $oRule = $aRules[$sBorderRule];
            $mRuleValue = $oRule->getValue();
            $aValues = [];
            if (!$mRuleValue instanceof RuleValueList) {
                $aValues[] = $mRuleValue;
            } else {
                $aValues = $mRuleValue->getListComponents();
            }
            foreach ($aValues as $mValue) {
                if ($mValue instanceof Value) {
                    $mNewValue = clone $mValue;
                } else {
                    $mNewValue = $mValue;
                }
                if ($mValue instanceof Size) {
                    $sNewRuleName = $sBorderRule . "-width";
                } elseif ($mValue instanceof Color) {
                    $sNewRuleName = $sBorderRule . "-color";
                } else {
                    if (in_array($mValue, $aBorderSizes)) {
                        $sNewRuleName = $sBorderRule . "-width";
                    } else {
                        $sNewRuleName = $sBorderRule . "-style";
                    }
                }
                $oNewRule = new Rule($sNewRuleName, $oRule->getLineNo(), $oRule->getColNo());
                $oNewRule->setIsImportant($oRule->getIsImportant());
                $oNewRule->addValue([$mNewValue]);
                $this->addRule($oNewRule);
            }
            $this->removeRule($sBorderRule);
        }
    }

    /**
     * Splits shorthand dimensional declarations (e.g. `margin: 0px auto;`)
     * into their constituent parts.
     *
     * Handles `margin`, `padding`, `border-color`, `border-style` and `border-width`.
     *
     * @return void
     *
     * @deprecated since 8.7.0, will be removed without substitution in version 9.0 in #511
     */
    public function expandDimensionsShorthand()
    {
        $aExpansions = [
            'margin' => 'margin-%s',
            'padding' => 'padding-%s',
            'border-color' => 'border-%s-color',
            'border-style' => 'border-%s-style',
            'border-width' => 'border-%s-width',
        ];
        $aRules = $this->getRulesAssoc();
        foreach ($aExpansions as $sProperty => $sExpanded) {
            if (!isset($aRules[$sProperty])) {
                continue;
            }
            $oRule = $aRules[$sProperty];
            $mRuleValue = $oRule->getValue();
            $aValues = [];
            if (!$mRuleValue instanceof RuleValueList) {
                $aValues[] = $mRuleValue;
            } else {
                $aValues = $mRuleValue->getListComponents();
            }
            $top = $right = $bottom = $left = null;
            switch (count($aValues)) {
                case 1:
                    $top = $right = $bottom = $left = $aValues[0];
                    break;
                case 2:
                    $top = $bottom = $aValues[0];
                    $left = $right = $aValues[1];
                    break;
                case 3:
                    $top = $aValues[0];
                    $left = $right = $aValues[1];
                    $bottom = $aValues[2];
                    break;
                case 4:
                    $top = $aValues[0];
                    $right = $aValues[1];
                    $bottom = $aValues[2];
                    $left = $aValues[3];
                    break;
            }
            foreach (['top', 'right', 'bottom', 'left'] as $sPosition) {
                $oNewRule = new Rule(sprintf($sExpanded, $sPosition), $oRule->getLineNo(), $oRule->getColNo());
                $oNewRule->setIsImportant($oRule->getIsImportant());
                $oNewRule->addValue(${$sPosition});
                $this->addRule($oNewRule);
            }
            $this->removeRule($sProperty);
        }
    }

    /**
     * Converts shorthand font declarations
     * (e.g. `font: 300 italic 11px/14px verdana, helvetica, sans-serif;`)
     * into their constituent parts.
     *
     * @return void
     *
     * @deprecated since 8.7.0, will be removed without substitution in version 9.0 in #511
     */
    public function expandFontShorthand()
    {
        $aRules = $this->getRulesAssoc();
        if (!isset($aRules['font'])) {
            return;
        }
        $oRule = $aRules['font'];
        // reset properties to 'normal' per http://www.w3.org/TR/21/fonts.html#font-shorthand
        $aFontProperties = [
            'font-style' => 'normal',
            'font-variant' => 'normal',
            'font-weight' => 'normal',
            'font-size' => 'normal',
            'line-height' => 'normal',
        ];
        $mRuleValue = $oRule->getValue();
        $aValues = [];
        if (!$mRuleValue instanceof RuleValueList) {
            $aValues[] = $mRuleValue;
        } else {
            $aValues = $mRuleValue->getListComponents();
        }
        foreach ($aValues as $mValue) {
            if (!$mValue instanceof Value) {
                $mValue = mb_strtolower($mValue);
            }
            if (in_array($mValue, ['normal', 'inherit'])) {
                foreach (['font-style', 'font-weight', 'font-variant'] as $sProperty) {
                    if (!isset($aFontProperties[$sProperty])) {
                        $aFontProperties[$sProperty] = $mValue;
                    }
                }
            } elseif (in_array($mValue, ['italic', 'oblique'])) {
                $aFontProperties['font-style'] = $mValue;
            } elseif ($mValue == 'small-caps') {
                $aFontProperties['font-variant'] = $mValue;
            } elseif (
                in_array($mValue, ['bold', 'bolder', 'lighter'])
                || ($mValue instanceof Size
                    && in_array($mValue->getSize(), range(100, 900, 100)))
            ) {
                $aFontProperties['font-weight'] = $mValue;
            } elseif ($mValue instanceof RuleValueList && $mValue->getListSeparator() == '/') {
                list($oSize, $oHeight) = $mValue->getListComponents();
                $aFontProperties['font-size'] = $oSize;
                $aFontProperties['line-height'] = $oHeight;
            } elseif ($mValue instanceof Size && $mValue->getUnit() !== null) {
                $aFontProperties['font-size'] = $mValue;
            } else {
                $aFontProperties['font-family'] = $mValue;
            }
        }
        foreach ($aFontProperties as $sProperty => $mValue) {
            $oNewRule = new Rule($sProperty, $oRule->getLineNo(), $oRule->getColNo());
            $oNewRule->addValue($mValue);
            $oNewRule->setIsImportant($oRule->getIsImportant());
            $this->addRule($oNewRule);
        }
        $this->removeRule('font');
    }

    /**
     * Converts shorthand background declarations
     * (e.g. `background: url("chess.png") gray 50% repeat fixed;`)
     * into their constituent parts.
     *
     * @see http://www.w3.org/TR/21/colors.html#propdef-background
     *
     * @return void
     *
     * @deprecated since 8.7.0, will be removed without substitution in version 9.0 in #511
     */
    public function expandBackgroundShorthand()
    {
        $aRules = $this->getRulesAssoc();
        if (!isset($aRules['background'])) {
            return;
        }
        $oRule = $aRules['background'];
        $aBgProperties = [
            'background-color' => ['transparent'],
            'background-image' => ['none'],
            'background-repeat' => ['repeat'],
            'background-attachment' => ['scroll'],
            'background-position' => [
                new Size(0, '%', false, $this->getLineNo()),
                new Size(0, '%', false, $this->getLineNo()),
            ],
        ];
        $mRuleValue = $oRule->getValue();
        $aValues = [];
        if (!$mRuleValue instanceof RuleValueList) {
            $aValues[] = $mRuleValue;
        } else {
            $aValues = $mRuleValue->getListComponents();
        }
        if (count($aValues) == 1 && $aValues[0] == 'inherit') {
            foreach ($aBgProperties as $sProperty => $mValue) {
                $oNewRule = new Rule($sProperty, $oRule->getLineNo(), $oRule->getColNo());
                $oNewRule->addValue('inherit');
                $oNewRule->setIsImportant($oRule->getIsImportant());
                $this->addRule($oNewRule);
            }
            $this->removeRule('background');
            return;
        }
        $iNumBgPos = 0;
        foreach ($aValues as $mValue) {
            if (!$mValue instanceof Value) {
                $mValue = mb_strtolower($mValue);
            }
            if ($mValue instanceof URL) {
                $aBgProperties['background-image'] = $mValue;
            } elseif ($mValue instanceof Color) {
                $aBgProperties['background-color'] = $mValue;
            } elseif (in_array($mValue, ['scroll', 'fixed'])) {
                $aBgProperties['background-attachment'] = $mValue;
            } elseif (in_array($mValue, ['repeat', 'no-repeat', 'repeat-x', 'repeat-y'])) {
                $aBgProperties['background-repeat'] = $mValue;
            } elseif (
                in_array($mValue, ['left', 'center', 'right', 'top', 'bottom'])
                || $mValue instanceof Size
            ) {
                if ($iNumBgPos == 0) {
                    $aBgProperties['background-position'][0] = $mValue;
                    $aBgProperties['background-position'][1] = 'center';
                } else {
                    $aBgProperties['background-position'][$iNumBgPos] = $mValue;
                }
                $iNumBgPos++;
            }
        }
        foreach ($aBgProperties as $sProperty => $mValue) {
            $oNewRule = new Rule($sProperty, $oRule->getLineNo(), $oRule->getColNo());
            $oNewRule->setIsImportant($oRule->getIsImportant());
            $oNewRule->addValue($mValue);
            $this->addRule($oNewRule);
        }
        $this->removeRule('background');
    }

    /**
     * @return void
     *
     * @deprecated since 8.7.0, will be removed without substitution in version 9.0 in #511
     */
    public function expandListStyleShorthand()
    {
        $aListProperties = [
            'list-style-type' => 'disc',
            'list-style-position' => 'outside',
            'list-style-image' => 'none',
        ];
        $aListStyleTypes = [
            'none',
            'disc',
            'circle',
            'square',
            'decimal-leading-zero',
            'decimal',
            'lower-roman',
            'upper-roman',
            'lower-greek',
            'lower-alpha',
            'lower-latin',
            'upper-alpha',
            'upper-latin',
            'hebrew',
            'armenian',
            'georgian',
            'cjk-ideographic',
            'hiragana',
            'hira-gana-iroha',
            'katakana-iroha',
            'katakana',
        ];
        $aListStylePositions = [
            'inside',
            'outside',
        ];
        $aRules = $this->getRulesAssoc();
        if (!isset($aRules['list-style'])) {
            return;
        }
        $oRule = $aRules['list-style'];
        $mRuleValue = $oRule->getValue();
        $aValues = [];
        if (!$mRuleValue instanceof RuleValueList) {
            $aValues[] = $mRuleValue;
        } else {
            $aValues = $mRuleValue->getListComponents();
        }
        if (count($aValues) == 1 && $aValues[0] == 'inherit') {
            foreach ($aListProperties as $sProperty => $mValue) {
                $oNewRule = new Rule($sProperty, $oRule->getLineNo(), $oRule->getColNo());
                $oNewRule->addValue('inherit');
                $oNewRule->setIsImportant($oRule->getIsImportant());
                $this->addRule($oNewRule);
            }
            $this->removeRule('list-style');
            return;
        }
        foreach ($aValues as $mValue) {
            if (!$mValue instanceof Value) {
                $mValue = mb_strtolower($mValue);
            }
            if ($mValue instanceof Url) {
                $aListProperties['list-style-image'] = $mValue;
            } elseif (in_array($mValue, $aListStyleTypes)) {
                $aListProperties['list-style-types'] = $mValue;
            } elseif (in_array($mValue, $aListStylePositions)) {
                $aListProperties['list-style-position'] = $mValue;
            }
        }
        foreach ($aListProperties as $sProperty => $mValue) {
            $oNewRule = new Rule($sProperty, $oRule->getLineNo(), $oRule->getColNo());
            $oNewRule->setIsImportant($oRule->getIsImportant());
            $oNewRule->addValue($mValue);
            $this->addRule($oNewRule);
        }
        $this->removeRule('list-style');
    }

    /**
     * @param array<array-key, string> $aProperties
     * @param string $sShorthand
     *
     * @return void
     *
     * @deprecated since 8.7.0, will be removed without substitution in version 9.0 in #511
     */
    public function createShorthandProperties(array $aProperties, $sShorthand)
    {
        $aRules = $this->getRulesAssoc();
        $oRule = null;
        $aNewValues = [];
        foreach ($aProperties as $sProperty) {
            if (!isset($aRules[$sProperty])) {
                continue;
            }
            $oRule = $aRules[$sProperty];
            if (!$oRule->getIsImportant()) {
                $mRuleValue = $oRule->getValue();
                $aValues = [];
                if (!$mRuleValue instanceof RuleValueList) {
                    $aValues[] = $mRuleValue;
                } else {
                    $aValues = $mRuleValue->getListComponents();
                }
                foreach ($aValues as $mValue) {
                    $aNewValues[] = $mValue;
                }
                $this->removeRule($sProperty);
            }
        }
        if ($aNewValues !== [] && $oRule instanceof Rule) {
            $oNewRule = new Rule($sShorthand, $oRule->getLineNo(), $oRule->getColNo());
            foreach ($aNewValues as $mValue) {
                $oNewRule->addValue($mValue);
            }
            $this->addRule($oNewRule);
        }
    }

    /**
     * @return void
     *
     * @deprecated since 8.7.0, will be removed without substitution in version 9.0 in #511
     */
    public function createBackgroundShorthand()
    {
        $aProperties = [
            'background-color',
            'background-image',
            'background-repeat',
            'background-position',
            'background-attachment',
        ];
        $this->createShorthandProperties($aProperties, 'background');
    }

    /**
     * @return void
     *
     * @deprecated since 8.7.0, will be removed without substitution in version 9.0 in #511
     */
    public function createListStyleShorthand()
    {
        $aProperties = [
            'list-style-type',
            'list-style-position',
            'list-style-image',
        ];
        $this->createShorthandProperties($aProperties, 'list-style');
    }

    /**
     * Combines `border-color`, `border-style` and `border-width` into `border`.
     *
     * Should be run after `create_dimensions_shorthand`!
     *
     * @return void
     *
     * @deprecated since 8.7.0, will be removed without substitution in version 9.0 in #511
     */
    public function createBorderShorthand()
    {
        $aProperties = [
            'border-width',
            'border-style',
            'border-color',
        ];
        $this->createShorthandProperties($aProperties, 'border');
    }

    /**
     * Looks for long format CSS dimensional properties
     * (margin, padding, border-color, border-style and border-width)
     * and converts them into shorthand CSS properties.
     *
     * @return void
     *
     * @deprecated since 8.7.0, will be removed without substitution in version 9.0 in #511
     */
    public function createDimensionsShorthand()
    {
        $aPositions = ['top', 'right', 'bottom', 'left'];
        $aExpansions = [
            'margin' => 'margin-%s',
            'padding' => 'padding-%s',
            'border-color' => 'border-%s-color',
            'border-style' => 'border-%s-style',
            'border-width' => 'border-%s-width',
        ];
        $aRules = $this->getRulesAssoc();
        foreach ($aExpansions as $sProperty => $sExpanded) {
            $aFoldable = [];
            foreach ($aRules as $sRuleName => $oRule) {
                foreach ($aPositions as $sPosition) {
                    if ($sRuleName == sprintf($sExpanded, $sPosition)) {
                        $aFoldable[$sRuleName] = $oRule;
                    }
                }
            }
            // All four dimensions must be present
            if (count($aFoldable) == 4) {
                $aValues = [];
                foreach ($aPositions as $sPosition) {
                    $oRule = $aRules[sprintf($sExpanded, $sPosition)];
                    $mRuleValue = $oRule->getValue();
                    $aRuleValues = [];
                    if (!$mRuleValue instanceof RuleValueList) {
                        $aRuleValues[] = $mRuleValue;
                    } else {
                        $aRuleValues = $mRuleValue->getListComponents();
                    }
                    $aValues[$sPosition] = $aRuleValues;
                }
                $oNewRule = new Rule($sProperty, $oRule->getLineNo(), $oRule->getColNo());
                if ((string)$aValues['left'][0] == (string)$aValues['right'][0]) {
                    if ((string)$aValues['top'][0] == (string)$aValues['bottom'][0]) {
                        if ((string)$aValues['top'][0] == (string)$aValues['left'][0]) {
                            // All 4 sides are equal
                            $oNewRule->addValue($aValues['top']);
                        } else {
                            // Top and bottom are equal, left and right are equal
                            $oNewRule->addValue($aValues['top']);
                            $oNewRule->addValue($aValues['left']);
                        }
                    } else {
                        // Only left and right are equal
                        $oNewRule->addValue($aValues['top']);
                        $oNewRule->addValue($aValues['left']);
                        $oNewRule->addValue($aValues['bottom']);
                    }
                } else {
                    // No sides are equal
                    $oNewRule->addValue($aValues['top']);
                    $oNewRule->addValue($aValues['left']);
                    $oNewRule->addValue($aValues['bottom']);
                    $oNewRule->addValue($aValues['right']);
                }
                $this->addRule($oNewRule);
                foreach ($aPositions as $sPosition) {
                    $this->removeRule(sprintf($sExpanded, $sPosition));
                }
            }
        }
    }

    /**
     * Looks for long format CSS font properties (e.g. `font-weight`) and
     * tries to convert them into a shorthand CSS `font` property.
     *
     * At least `font-size` AND `font-family` must be present in order to create a shorthand declaration.
     *
     * @return void
     *
     * @deprecated since 8.7.0, will be removed without substitution in version 9.0 in #511
     */
    public function createFontShorthand()
    {
        $aFontProperties = [
            'font-style',
            'font-variant',
            'font-weight',
            'font-size',
            'line-height',
            'font-family',
        ];
        $aRules = $this->getRulesAssoc();
        if (!isset($aRules['font-size']) || !isset($aRules['font-family'])) {
            return;
        }
        $oOldRule = isset($aRules['font-size']) ? $aRules['font-size'] : $aRules['font-family'];
        $oNewRule = new Rule('font', $oOldRule->getLineNo(), $oOldRule->getColNo());
        unset($oOldRule);
        foreach (['font-style', 'font-variant', 'font-weight'] as $sProperty) {
            if (isset($aRules[$sProperty])) {
                $oRule = $aRules[$sProperty];
                $mRuleValue = $oRule->getValue();
                $aValues = [];
                if (!$mRuleValue instanceof RuleValueList) {
                    $aValues[] = $mRuleValue;
                } else {
                    $aValues = $mRuleValue->getListComponents();
                }
                if ($aValues[0] !== 'normal') {
                    $oNewRule->addValue($aValues[0]);
                }
            }
        }
        // Get the font-size value
        $oRule = $aRules['font-size'];
        $mRuleValue = $oRule->getValue();
        $aFSValues = [];
        if (!$mRuleValue instanceof RuleValueList) {
            $aFSValues[] = $mRuleValue;
        } else {
            $aFSValues = $mRuleValue->getListComponents();
        }
        // But wait to know if we have line-height to add it
        if (isset($aRules['line-height'])) {
            $oRule = $aRules['line-height'];
            $mRuleValue = $oRule->getValue();
            $aLHValues = [];
            if (!$mRuleValue instanceof RuleValueList) {
                $aLHValues[] = $mRuleValue;
            } else {
                $aLHValues = $mRuleValue->getListComponents();
            }
            if ($aLHValues[0] !== 'normal') {
                $val = new RuleValueList('/', $this->getLineNo());
                $val->addListComponent($aFSValues[0]);
                $val->addListComponent($aLHValues[0]);
                $oNewRule->addValue($val);
            }
        } else {
            $oNewRule->addValue($aFSValues[0]);
        }
        $oRule = $aRules['font-family'];
        $mRuleValue = $oRule->getValue();
        $aFFValues = [];
        if (!$mRuleValue instanceof RuleValueList) {
            $aFFValues[] = $mRuleValue;
        } else {
            $aFFValues = $mRuleValue->getListComponents();
        }
        $oFFValue = new RuleValueList(',', $this->getLineNo());
        $oFFValue->setListComponents($aFFValues);
        $oNewRule->addValue($oFFValue);

        $this->addRule($oNewRule);
        foreach ($aFontProperties as $sProperty) {
            $this->removeRule($sProperty);
        }
    }

    /**
     * @return string
     *
     * @throws OutputException
     *
     * @deprecated in V8.8.0, will be removed in V9.0.0. Use `render` instead.
     */
    public function __toString()
    {
        return $this->render(new OutputFormat());
    }

    /**
     * @param OutputFormat|null $oOutputFormat
     *
     * @return string
     *
     * @throws OutputException
     */
    public function render($oOutputFormat)
    {
        $sResult = $oOutputFormat->comments($this);
        if (count($this->aSelectors) === 0) {
            // If all the selectors have been removed, this declaration block becomes invalid
            throw new OutputException(
                'Attempt to print declaration block with missing selector',
                $this->getLineNumber()
            );
        }
        $sResult .= $oOutputFormat->sBeforeDeclarationBlock;
        $sResult .= $oOutputFormat->implode(
            $oOutputFormat->spaceBeforeSelectorSeparator() . ',' . $oOutputFormat->spaceAfterSelectorSeparator(),
            $this->aSelectors
        );
        $sResult .= $oOutputFormat->sAfterDeclarationBlockSelectors;
        $sResult .= $oOutputFormat->spaceBeforeOpeningBrace() . '{';
        $sResult .= $this->renderRules($oOutputFormat);
        $sResult .= '}';
        $sResult .= $oOutputFormat->sAfterDeclarationBlock;
        return $sResult;
    }
}
<?php

namespace Sabberworm\CSS\RuleSet;

use Sabberworm\CSS\Comment\Comment;
use Sabberworm\CSS\Comment\Commentable;
use Sabberworm\CSS\CSSElement;
use Sabberworm\CSS\OutputFormat;
use Sabberworm\CSS\Parsing\ParserState;
use Sabberworm\CSS\Parsing\UnexpectedEOFException;
use Sabberworm\CSS\Parsing\UnexpectedTokenException;
use Sabberworm\CSS\Position\Position;
use Sabberworm\CSS\Position\Positionable;
use Sabberworm\CSS\Renderable;
use Sabberworm\CSS\Rule\Rule;

/**
 * This class is a container for individual 'Rule's.
 *
 * The most common form of a rule set is one constrained by a selector, i.e., a `DeclarationBlock`.
 * However, unknown `AtRule`s (like `@font-face`) are rule sets as well.
 *
 * If you want to manipulate a `RuleSet`, use the methods `addRule(Rule $rule)`, `getRules()` and `removeRule($rule)`
 * (which accepts either a `Rule` or a rule name; optionally suffixed by a dash to remove all related rules).
 */
abstract class RuleSet implements CSSElement, Commentable, Positionable
{
    use Position;

    /**
     * the rules in this rule set, using the property name as the key,
     * with potentially multiple rules per property name.
     *
     * @var array<string, array<int<0, max>, Rule>>
     */
    private $aRules;

    /**
     * @var array<array-key, Comment>
     *
     * @internal since 8.8.0
     */
    protected $aComments;

    /**
     * @param int $iLineNo
     */
    public function __construct($iLineNo = 0)
    {
        $this->aRules = [];
        $this->setPosition($iLineNo);
        $this->aComments = [];
    }

    /**
     * @return void
     *
     * @throws UnexpectedTokenException
     * @throws UnexpectedEOFException
     *
     * @internal since V8.8.0
     */
    public static function parseRuleSet(ParserState $oParserState, RuleSet $oRuleSet)
    {
        while ($oParserState->comes(';')) {
            $oParserState->consume(';');
        }
        while (true) {
            $commentsBeforeRule = $oParserState->consumeWhiteSpace();
            if ($oParserState->comes('}')) {
                break;
            }
            $oRule = null;
            if ($oParserState->getSettings()->bLenientParsing) {
                try {
                    $oRule = Rule::parse($oParserState, $commentsBeforeRule);
                } catch (UnexpectedTokenException $e) {
                    try {
                        $sConsume = $oParserState->consumeUntil(["\n", ";", '}'], true);
                        // We need to “unfind” the matches to the end of the ruleSet as this will be matched later
                        if ($oParserState->streql(substr($sConsume, -1), '}')) {
                            $oParserState->backtrack(1);
                        } else {
                            while ($oParserState->comes(';')) {
                                $oParserState->consume(';');
                            }
                        }
                    } catch (UnexpectedTokenException $e) {
                        // We’ve reached the end of the document. Just close the RuleSet.
                        return;
                    }
                }
            } else {
                $oRule = Rule::parse($oParserState, $commentsBeforeRule);
            }
            if ($oRule) {
                $oRuleSet->addRule($oRule);
            }
        }
        $oParserState->consume('}');
    }

    /**
     * @param Rule|null $oSibling
     *
     * @return void
     */
    public function addRule(Rule $oRule, $oSibling = null)
    {
        $sRule = $oRule->getRule();
        if (!isset($this->aRules[$sRule])) {
            $this->aRules[$sRule] = [];
        }

        $iPosition = count($this->aRules[$sRule]);

        if ($oSibling !== null) {
            $iSiblingPos = array_search($oSibling, $this->aRules[$sRule], true);
            if ($iSiblingPos !== false) {
                $iPosition = $iSiblingPos;
                $oRule->setPosition($oSibling->getLineNo(), $oSibling->getColNo() - 1);
            }
        }
        if ($oRule->getLineNumber() === null) {
            //this node is added manually, give it the next best line
            $columnNumber = $oRule->getColNo();
            $rules = $this->getRules();
            $pos = count($rules);
            if ($pos > 0) {
                $last = $rules[$pos - 1];
                $oRule->setPosition($last->getLineNo() + 1, $columnNumber);
            } else {
                $oRule->setPosition(1, $columnNumber);
            }
        } elseif ($oRule->getColumnNumber() === null) {
            $oRule->setPosition($oRule->getLineNumber(), 0);
        }

        array_splice($this->aRules[$sRule], $iPosition, 0, [$oRule]);
    }

    /**
     * Returns all rules matching the given rule name
     *
     * @example $oRuleSet->getRules('font') // returns array(0 => $oRule, …) or array().
     *
     * @example $oRuleSet->getRules('font-')
     *          //returns an array of all rules either beginning with font- or matching font.
     *
     * @param Rule|string|null $mRule
     *        Pattern to search for. If null, returns all rules.
     *        If the pattern ends with a dash, all rules starting with the pattern are returned
     *        as well as one matching the pattern with the dash excluded.
     *        Passing a `Rule` for this parameter is deprecated in version 8.9.0, and will not work from v9.0.
     *        Call `getRules($rule->getRule())` instead.
     *
     * @return array<int, Rule>
     */
    public function getRules($mRule = null)
    {
        if ($mRule instanceof Rule) {
            $mRule = $mRule->getRule();
        }
        /** @var array<int, Rule> $aResult */
        $aResult = [];
        foreach ($this->aRules as $sName => $aRules) {
            // Either no search rule is given or the search rule matches the found rule exactly
            // or the search rule ends in “-” and the found rule starts with the search rule.
            if (
                !$mRule || $sName === $mRule
                || (
                    strrpos($mRule, '-') === strlen($mRule) - strlen('-')
                    && (strpos($sName, $mRule) === 0 || $sName === substr($mRule, 0, -1))
                )
            ) {
                $aResult = array_merge($aResult, $aRules);
            }
        }
        usort($aResult, function (Rule $first, Rule $second) {
            if ($first->getLineNo() === $second->getLineNo()) {
                return $first->getColNo() - $second->getColNo();
            }
            return $first->getLineNo() - $second->getLineNo();
        });
        return $aResult;
    }

    /**
     * Overrides all the rules of this set.
     *
     * @param array<array-key, Rule> $aRules The rules to override with.
     *
     * @return void
     */
    public function setRules(array $aRules)
    {
        $this->aRules = [];
        foreach ($aRules as $rule) {
            $this->addRule($rule);
        }
    }

    /**
     * Returns all rules matching the given pattern and returns them in an associative array with the rule’s name
     * as keys. This method exists mainly for backwards-compatibility and is really only partially useful.
     *
     * Note: This method loses some information: Calling this (with an argument of `background-`) on a declaration block
     * like `{ background-color: green; background-color; rgba(0, 127, 0, 0.7); }` will only yield an associative array
     * containing the rgba-valued rule while `getRules()` would yield an indexed array containing both.
     *
     * @param Rule|string|null $mRule $mRule
     *        Pattern to search for. If null, returns all rules. If the pattern ends with a dash,
     *        all rules starting with the pattern are returned as well as one matching the pattern with the dash
     *        excluded.
     *        Passing a `Rule` for this parameter is deprecated in version 8.9.0, and will not work from v9.0.
     *        Call `getRulesAssoc($rule->getRule())` instead.
     *
     * @return array<string, Rule>
     */
    public function getRulesAssoc($mRule = null)
    {
        /** @var array<string, Rule> $aResult */
        $aResult = [];
        foreach ($this->getRules($mRule) as $oRule) {
            $aResult[$oRule->getRule()] = $oRule;
        }
        return $aResult;
    }

    /**
     * Removes a `Rule` from this `RuleSet` by identity.
     *
     * @param Rule|string|null $mRule
     *        `Rule` to remove.
     *        Passing a `string` or `null` is deprecated in version 8.9.0, and will no longer work from v9.0.
     *        Use `removeMatchingRules()` or `removeAllRules()` instead.
     */
    public function removeRule($mRule)
    {
        if ($mRule instanceof Rule) {
            $sRule = $mRule->getRule();
            if (!isset($this->aRules[$sRule])) {
                return;
            }
            foreach ($this->aRules[$sRule] as $iKey => $oRule) {
                if ($oRule === $mRule) {
                    unset($this->aRules[$sRule][$iKey]);
                }
            }
        } elseif ($mRule !== null) {
            $this->removeMatchingRules($mRule);
        } else {
            $this->removeAllRules();
        }
    }

    /**
     * Removes rules by property name or search pattern.
     *
     * @param string $searchPattern
     *        pattern to remove.
     *        If the pattern ends in a dash,
     *        all rules starting with the pattern are removed as well as one matching the pattern with the dash
     *        excluded.
     */
    public function removeMatchingRules($searchPattern)
    {
        foreach ($this->aRules as $propertyName => $rules) {
            // Either the search rule matches the found rule exactly
            // or the search rule ends in “-” and the found rule starts with the search rule or equals it
            // (without the trailing dash).
            if (
                $propertyName === $searchPattern
                || (\strrpos($searchPattern, '-') === \strlen($searchPattern) - \strlen('-')
                    && (\strpos($propertyName, $searchPattern) === 0
                        || $propertyName === \substr($searchPattern, 0, -1)))
            ) {
                unset($this->aRules[$propertyName]);
            }
        }
    }

    public function removeAllRules()
    {
        $this->aRules = [];
    }

    /**
     * @return string
     *
     * @deprecated in V8.8.0, will be removed in V9.0.0. Use `render` instead.
     */
    public function __toString()
    {
        return $this->render(new OutputFormat());
    }

    /**
     * @return string
     */
    protected function renderRules(OutputFormat $oOutputFormat)
    {
        $sResult = '';
        $bIsFirst = true;
        $oNextLevel = $oOutputFormat->nextLevel();
        foreach ($this->getRules() as $oRule) {
            $sRendered = $oNextLevel->safely(function () use ($oRule, $oNextLevel) {
                return $oRule->render($oNextLevel);
            });
            if ($sRendered === null) {
                continue;
            }
            if ($bIsFirst) {
                $bIsFirst = false;
                $sResult .= $oNextLevel->spaceBeforeRules();
            } else {
                $sResult .= $oNextLevel->spaceBetweenRules();
            }
            $sResult .= $sRendered;
        }

        if (!$bIsFirst) {
            // Had some output
            $sResult .= $oOutputFormat->spaceAfterRules();
        }

        return $oOutputFormat->removeLastSemicolon($sResult);
    }

    /**
     * @param array<string, Comment> $aComments
     *
     * @return void
     */
    public function addComments(array $aComments)
    {
        $this->aComments = array_merge($this->aComments, $aComments);
    }

    /**
     * @return array<string, Comment>
     */
    public function getComments()
    {
        return $this->aComments;
    }

    /**
     * @param array<string, Comment> $aComments
     *
     * @return void
     */
    public function setComments(array $aComments)
    {
        $this->aComments = $aComments;
    }
}
<?php

namespace Sabberworm\CSS;

/**
 * Parser settings class.
 *
 * Configure parser behaviour here.
 */
class Settings
{
    /**
     * Multi-byte string support.
     *
     * If `true` (`mbstring` extension must be enabled), will use (slower) `mb_strlen`, `mb_convert_case`, `mb_substr`
     * and `mb_strpos` functions. Otherwise, the normal (ASCII-Only) functions will be used.
     *
     * @var bool
     *
     * @internal since 8.8.0, will be made private in 9.0.0
     */
    public $bMultibyteSupport;

    /**
     * The default charset for the CSS if no `@charset` declaration is found. Defaults to utf-8.
     *
     * @var string
     *
     * @internal since 8.8.0, will be made private in 9.0.0
     */
    public $sDefaultCharset = 'utf-8';

    /**
     * Whether the parser silently ignore invalid rules instead of choking on them.
     *
     * @var bool
     *
     * @internal since 8.8.0, will be made private in 9.0.0
     */
    public $bLenientParsing = true;

    private function __construct()
    {
        $this->bMultibyteSupport = extension_loaded('mbstring');
    }

    /**
     * @return self new instance
     */
    public static function create()
    {
        return new Settings();
    }

    /**
     * Enables/disables multi-byte string support.
     *
     * If `true` (`mbstring` extension must be enabled), will use (slower) `mb_strlen`, `mb_convert_case`, `mb_substr`
     * and `mb_strpos` functions. Otherwise, the normal (ASCII-Only) functions will be used.
     *
     * @param bool $bMultibyteSupport
     *
     * @return self fluent interface
     */
    public function withMultibyteSupport($bMultibyteSupport = true)
    {
        $this->bMultibyteSupport = $bMultibyteSupport;
        return $this;
    }

    /**
     * Sets the charset to be used if the CSS does not contain an `@charset` declaration.
     *
     * @param string $sDefaultCharset
     *
     * @return self fluent interface
     */
    public function withDefaultCharset($sDefaultCharset)
    {
        $this->sDefaultCharset = $sDefaultCharset;
        return $this;
    }

    /**
     * Configures whether the parser should silently ignore invalid rules.
     *
     * @param bool $bLenientParsing
     *
     * @return self fluent interface
     */
    public function withLenientParsing($bLenientParsing = true)
    {
        $this->bLenientParsing = $bLenientParsing;
        return $this;
    }

    /**
     * Configures the parser to choke on invalid rules.
     *
     * @return self fluent interface
     */
    public function beStrict()
    {
        return $this->withLenientParsing(false);
    }
}
<?php

namespace Sabberworm\CSS\Value;

use Sabberworm\CSS\OutputFormat;
use Sabberworm\CSS\Parsing\ParserState;
use Sabberworm\CSS\Parsing\SourceException;
use Sabberworm\CSS\Parsing\UnexpectedEOFException;
use Sabberworm\CSS\Parsing\UnexpectedTokenException;

/**
 * A `CSSFunction` represents a special kind of value that also contains a function name and where the values are the
 * function’s arguments. It also handles equals-sign-separated argument lists like `filter: alpha(opacity=90);`.
 */
class CSSFunction extends ValueList
{
    /**
     * @var string
     *
     * @internal since 8.8.0
     */
    protected $sName;

    /**
     * @param string $sName
     * @param RuleValueList|array<int, RuleValueList|CSSFunction|CSSString|LineName|Size|URL|string> $aArguments
     * @param string $sSeparator
     * @param int $iLineNo
     */
    public function __construct($sName, $aArguments, $sSeparator = ',', $iLineNo = 0)
    {
        if ($aArguments instanceof RuleValueList) {
            $sSeparator = $aArguments->getListSeparator();
            $aArguments = $aArguments->getListComponents();
        }
        $this->sName = $sName;
        $this->setPosition($iLineNo); // TODO: redundant?
        parent::__construct($aArguments, $sSeparator, $iLineNo);
    }

    /**
     * @param ParserState $oParserState
     * @param bool $bIgnoreCase
     *
     * @return CSSFunction
     *
     * @throws SourceException
     * @throws UnexpectedEOFException
     * @throws UnexpectedTokenException
     *
     * @internal since V8.8.0
     */
    public static function parse(ParserState $oParserState, $bIgnoreCase = false)
    {
        $mResult = $oParserState->parseIdentifier($bIgnoreCase);
        $oParserState->consume('(');
        $aArguments = Value::parseValue($oParserState, ['=', ' ', ',']);
        $mResult = new CSSFunction($mResult, $aArguments, ',', $oParserState->currentLine());
        $oParserState->consume(')');
        return $mResult;
    }

    /**
     * @return string
     */
    public function getName()
    {
        return $this->sName;
    }

    /**
     * @param string $sName
     *
     * @return void
     */
    public function setName($sName)
    {
        $this->sName = $sName;
    }

    /**
     * @return array<int, RuleValueList|CSSFunction|CSSString|LineName|Size|URL|string>
     */
    public function getArguments()
    {
        return $this->aComponents;
    }

    /**
     * @return string
     *
     * @deprecated in V8.8.0, will be removed in V9.0.0. Use `render` instead.
     */
    public function __toString()
    {
        return $this->render(new OutputFormat());
    }

    /**
     * @param OutputFormat|null $oOutputFormat
     *
     * @return string
     */
    public function render($oOutputFormat)
    {
        $aArguments = parent::render($oOutputFormat);
        return "{$this->sName}({$aArguments})";
    }
}
<?php

namespace Sabberworm\CSS\Value;

use Sabberworm\CSS\OutputFormat;
use Sabberworm\CSS\Parsing\ParserState;
use Sabberworm\CSS\Parsing\SourceException;
use Sabberworm\CSS\Parsing\UnexpectedEOFException;
use Sabberworm\CSS\Parsing\UnexpectedTokenException;

/**
 * This class is a wrapper for quoted strings to distinguish them from keywords.
 *
 * `CSSString`s always output with double quotes.
 */
class CSSString extends PrimitiveValue
{
    /**
     * @var string
     */
    private $sString;

    /**
     * @param string $sString
     * @param int $iLineNo
     */
    public function __construct($sString, $iLineNo = 0)
    {
        $this->sString = $sString;
        parent::__construct($iLineNo);
    }

    /**
     * @return CSSString
     *
     * @throws SourceException
     * @throws UnexpectedEOFException
     * @throws UnexpectedTokenException
     *
     * @internal since V8.8.0
     */
    public static function parse(ParserState $oParserState)
    {
        $sBegin = $oParserState->peek();
        $sQuote = null;
        if ($sBegin === "'") {
            $sQuote = "'";
        } elseif ($sBegin === '"') {
            $sQuote = '"';
        }
        if ($sQuote !== null) {
            $oParserState->consume($sQuote);
        }
        $sResult = "";
        $sContent = null;
        if ($sQuote === null) {
            // Unquoted strings end in whitespace or with braces, brackets, parentheses
            while (!preg_match('/[\\s{}()<>\\[\\]]/isu', $oParserState->peek())) {
                $sResult .= $oParserState->parseCharacter(false);
            }
        } else {
            while (!$oParserState->comes($sQuote)) {
                $sContent = $oParserState->parseCharacter(false);
                if ($sContent === null) {
                    throw new SourceException(
                        "Non-well-formed quoted string {$oParserState->peek(3)}",
                        $oParserState->currentLine()
                    );
                }
                $sResult .= $sContent;
            }
            $oParserState->consume($sQuote);
        }
        return new CSSString($sResult, $oParserState->currentLine());
    }

    /**
     * @param string $sString
     *
     * @return void
     */
    public function setString($sString)
    {
        $this->sString = $sString;
    }

    /**
     * @return string
     */
    public function getString()
    {
        return $this->sString;
    }

    /**
     * @return string
     *
     * @deprecated in V8.8.0, will be removed in V9.0.0. Use `render` instead.
     */
    public function __toString()
    {
        return $this->render(new OutputFormat());
    }

    /**
     * @param OutputFormat|null $oOutputFormat
     *
     * @return string
     */
    public function render($oOutputFormat)
    {
        $sString = addslashes($this->sString);
        $sString = str_replace("\n", '\A', $sString);
        return $oOutputFormat->getStringQuotingType() . $sString . $oOutputFormat->getStringQuotingType();
    }
}
<?php

namespace Sabberworm\CSS\Value;

use Sabberworm\CSS\Parsing\ParserState;
use Sabberworm\CSS\Parsing\UnexpectedEOFException;
use Sabberworm\CSS\Parsing\UnexpectedTokenException;

/**
 * Support for `-webkit-calc` and `-moz-calc` is deprecated in version 8.8.0, and will be removed in version 9.0.0.
 */
class CalcFunction extends CSSFunction
{
    /**
     * @var int
     *
     * @internal
     */
    const T_OPERAND = 1;

    /**
     * @var int
     *
     * @internal
     */
    const T_OPERATOR = 2;

    /**
     * @param ParserState $oParserState
     * @param bool $bIgnoreCase
     *
     * @return CalcFunction
     *
     * @throws UnexpectedTokenException
     * @throws UnexpectedEOFException
     *
     * @internal since V8.8.0
     */
    public static function parse(ParserState $oParserState, $bIgnoreCase = false)
    {
        $aOperators = ['+', '-', '*', '/'];
        $sFunction = $oParserState->parseIdentifier();
        if ($oParserState->peek() != '(') {
            // Found ; or end of line before an opening bracket
            throw new UnexpectedTokenException('(', $oParserState->peek(), 'literal', $oParserState->currentLine());
        } elseif (!in_array($sFunction, ['calc', '-moz-calc', '-webkit-calc'])) {
            // Found invalid calc definition. Example calc (...
            throw new UnexpectedTokenException('calc', $sFunction, 'literal', $oParserState->currentLine());
        }
        $oParserState->consume('(');
        $oCalcList = new CalcRuleValueList($oParserState->currentLine());
        $oList = new RuleValueList(',', $oParserState->currentLine());
        $iNestingLevel = 0;
        $iLastComponentType = null;
        while (!$oParserState->comes(')') || $iNestingLevel > 0) {
            if ($oParserState->isEnd() && $iNestingLevel === 0) {
                break;
            }

            $oParserState->consumeWhiteSpace();
            if ($oParserState->comes('(')) {
                $iNestingLevel++;
                $oCalcList->addListComponent($oParserState->consume(1));
                $oParserState->consumeWhiteSpace();
                continue;
            } elseif ($oParserState->comes(')')) {
                $iNestingLevel--;
                $oCalcList->addListComponent($oParserState->consume(1));
                $oParserState->consumeWhiteSpace();
                continue;
            }
            if ($iLastComponentType != CalcFunction::T_OPERAND) {
                $oVal = Value::parsePrimitiveValue($oParserState);
                $oCalcList->addListComponent($oVal);
                $iLastComponentType = CalcFunction::T_OPERAND;
            } else {
                if (in_array($oParserState->peek(), $aOperators)) {
                    if (($oParserState->comes('-') || $oParserState->comes('+'))) {
                        if (
                            $oParserState->peek(1, -1) != ' '
                            || !($oParserState->comes('- ')
                                || $oParserState->comes('+ '))
                        ) {
                            throw new UnexpectedTokenException(
                                " {$oParserState->peek()} ",
                                $oParserState->peek(1, -1) . $oParserState->peek(2),
                                'literal',
                                $oParserState->currentLine()
                            );
                        }
                    }
                    $oCalcList->addListComponent($oParserState->consume(1));
                    $iLastComponentType = CalcFunction::T_OPERATOR;
                } else {
                    throw new UnexpectedTokenException(
                        sprintf(
                            'Next token was expected to be an operand of type %s. Instead "%s" was found.',
                            implode(', ', $aOperators),
                            $oParserState->peek()
                        ),
                        '',
                        'custom',
                        $oParserState->currentLine()
                    );
                }
            }
            $oParserState->consumeWhiteSpace();
        }
        $oList->addListComponent($oCalcList);
        if (!$oParserState->isEnd()) {
            $oParserState->consume(')');
        }
        return new CalcFunction($sFunction, $oList, ',', $oParserState->currentLine());
    }
}
<?php

namespace Sabberworm\CSS\Value;

use Sabberworm\CSS\OutputFormat;

class CalcRuleValueList extends RuleValueList
{
    /**
     * @param int $iLineNo
     */
    public function __construct($iLineNo = 0)
    {
        parent::__construct(',', $iLineNo);
    }

    /**
     * @param OutputFormat|null $oOutputFormat
     *
     * @return string
     */
    public function render($oOutputFormat)
    {
        return $oOutputFormat->implode(' ', $this->aComponents);
    }
}
<?php

namespace Sabberworm\CSS\Value;

use Sabberworm\CSS\OutputFormat;
use Sabberworm\CSS\Parsing\ParserState;
use Sabberworm\CSS\Parsing\UnexpectedEOFException;
use Sabberworm\CSS\Parsing\UnexpectedTokenException;

/**
 * `Color's can be input in the form #rrggbb, #rgb or schema(val1, val2, …) but are always stored as an array of
 * ('s' => val1, 'c' => val2, 'h' => val3, …) and output in the second form.
 */
class Color extends CSSFunction
{
    /**
     * @param array<int, RuleValueList|CSSFunction|CSSString|LineName|Size|URL|string> $aColor
     * @param int $iLineNo
     */
    public function __construct(array $aColor, $iLineNo = 0)
    {
        parent::__construct(implode('', array_keys($aColor)), $aColor, ',', $iLineNo);
    }

    /**
     * @param ParserState $oParserState
     * @param bool $bIgnoreCase
     *
     * @return Color|CSSFunction
     *
     * @throws UnexpectedEOFException
     * @throws UnexpectedTokenException
     *
     * @internal since V8.8.0
     */
    public static function parse(ParserState $oParserState, $bIgnoreCase = false)
    {
        $aColor = [];
        if ($oParserState->comes('#')) {
            $oParserState->consume('#');
            $sValue = $oParserState->parseIdentifier(false);
            if ($oParserState->strlen($sValue) === 3) {
                $sValue = $sValue[0] . $sValue[0] . $sValue[1] . $sValue[1] . $sValue[2] . $sValue[2];
            } elseif ($oParserState->strlen($sValue) === 4) {
                $sValue = $sValue[0] . $sValue[0] . $sValue[1] . $sValue[1] . $sValue[2] . $sValue[2] . $sValue[3]
                    . $sValue[3];
            }

            if ($oParserState->strlen($sValue) === 8) {
                $aColor = [
                    'r' => new Size(intval($sValue[0] . $sValue[1], 16), null, true, $oParserState->currentLine()),
                    'g' => new Size(intval($sValue[2] . $sValue[3], 16), null, true, $oParserState->currentLine()),
                    'b' => new Size(intval($sValue[4] . $sValue[5], 16), null, true, $oParserState->currentLine()),
                    'a' => new Size(
                        round(self::mapRange(intval($sValue[6] . $sValue[7], 16), 0, 255, 0, 1), 2),
                        null,
                        true,
                        $oParserState->currentLine()
                    ),
                ];
            } elseif ($oParserState->strlen($sValue) === 6) {
                $aColor = [
                    'r' => new Size(intval($sValue[0] . $sValue[1], 16), null, true, $oParserState->currentLine()),
                    'g' => new Size(intval($sValue[2] . $sValue[3], 16), null, true, $oParserState->currentLine()),
                    'b' => new Size(intval($sValue[4] . $sValue[5], 16), null, true, $oParserState->currentLine()),
                ];
            } else {
                throw new UnexpectedTokenException(
                    'Invalid hex color value',
                    $sValue,
                    'custom',
                    $oParserState->currentLine()
                );
            }
        } else {
            $sColorMode = $oParserState->parseIdentifier(true);
            $oParserState->consumeWhiteSpace();
            $oParserState->consume('(');

            $bContainsVar = false;
            $iLength = $oParserState->strlen($sColorMode);
            for ($i = 0; $i < $iLength; ++$i) {
                $oParserState->consumeWhiteSpace();
                if ($oParserState->comes('var')) {
                    $aColor[$sColorMode[$i]] = CSSFunction::parseIdentifierOrFunction($oParserState);
                    $bContainsVar = true;
                } else {
                    $aColor[$sColorMode[$i]] = Size::parse($oParserState, true);
                }

                if ($bContainsVar && $oParserState->comes(')')) {
                    // With a var argument the function can have fewer arguments
                    break;
                }

                $oParserState->consumeWhiteSpace();
                if ($i < ($iLength - 1)) {
                    $oParserState->consume(',');
                }
            }
            $oParserState->consume(')');

            if ($bContainsVar) {
                return new CSSFunction($sColorMode, array_values($aColor), ',', $oParserState->currentLine());
            }
        }
        return new Color($aColor, $oParserState->currentLine());
    }

    /**
     * @param float $fVal
     * @param float $fFromMin
     * @param float $fFromMax
     * @param float $fToMin
     * @param float $fToMax
     *
     * @return float
     */
    private static function mapRange($fVal, $fFromMin, $fFromMax, $fToMin, $fToMax)
    {
        $fFromRange = $fFromMax - $fFromMin;
        $fToRange = $fToMax - $fToMin;
        $fMultiplier = $fToRange / $fFromRange;
        $fNewVal = $fVal - $fFromMin;
        $fNewVal *= $fMultiplier;
        return $fNewVal + $fToMin;
    }

    /**
     * @return array<int, RuleValueList|CSSFunction|CSSString|LineName|Size|URL|string>
     */
    public function getColor()
    {
        return $this->aComponents;
    }

    /**
     * @param array<int, RuleValueList|CSSFunction|CSSString|LineName|Size|URL|string> $aColor
     *
     * @return void
     */
    public function setColor(array $aColor)
    {
        $this->setName(implode('', array_keys($aColor)));
        $this->aComponents = $aColor;
    }

    /**
     * @return string
     */
    public function getColorDescription()
    {
        return $this->getName();
    }

    /**
     * @return string
     *
     * @deprecated in V8.8.0, will be removed in V9.0.0. Use `render` instead.
     */
    public function __toString()
    {
        return $this->render(new OutputFormat());
    }

    /**
     * @param OutputFormat|null $oOutputFormat
     *
     * @return string
     */
    public function render($oOutputFormat)
    {
        // Shorthand RGB color values
        if ($oOutputFormat->getRGBHashNotation() && implode('', array_keys($this->aComponents)) === 'rgb') {
            $sResult = sprintf(
                '%02x%02x%02x',
                $this->aComponents['r']->getSize(),
                $this->aComponents['g']->getSize(),
                $this->aComponents['b']->getSize()
            );
            return '#' . (($sResult[0] == $sResult[1]) && ($sResult[2] == $sResult[3]) && ($sResult[4] == $sResult[5])
                    ? "$sResult[0]$sResult[2]$sResult[4]" : $sResult);
        }
        return parent::render($oOutputFormat);
    }
}
<?php

namespace Sabberworm\CSS\Value;

use Sabberworm\CSS\OutputFormat;
use Sabberworm\CSS\Parsing\ParserState;
use Sabberworm\CSS\Parsing\UnexpectedEOFException;
use Sabberworm\CSS\Parsing\UnexpectedTokenException;

class LineName extends ValueList
{
    /**
     * @param array<int, RuleValueList|CSSFunction|CSSString|LineName|Size|URL|string> $aComponents
     * @param int $iLineNo
     */
    public function __construct(array $aComponents = [], $iLineNo = 0)
    {
        parent::__construct($aComponents, ' ', $iLineNo);
    }

    /**
     * @return LineName
     *
     * @throws UnexpectedTokenException
     * @throws UnexpectedEOFException
     *
     * @internal since V8.8.0
     */
    public static function parse(ParserState $oParserState)
    {
        $oParserState->consume('[');
        $oParserState->consumeWhiteSpace();
        $aNames = [];
        do {
            if ($oParserState->getSettings()->bLenientParsing) {
                try {
                    $aNames[] = $oParserState->parseIdentifier();
                } catch (UnexpectedTokenException $e) {
                    if (!$oParserState->comes(']')) {
                        throw $e;
                    }
                }
            } else {
                $aNames[] = $oParserState->parseIdentifier();
            }
            $oParserState->consumeWhiteSpace();
        } while (!$oParserState->comes(']'));
        $oParserState->consume(']');
        return new LineName($aNames, $oParserState->currentLine());
    }

    /**
     * @return string
     *
     * @deprecated in V8.8.0, will be removed in V9.0.0. Use `render` instead.
     */
    public function __toString()
    {
        return $this->render(new OutputFormat());
    }

    /**
     * @param OutputFormat|null $oOutputFormat
     *
     * @return string
     */
    public function render($oOutputFormat)
    {
        return '[' . parent::render(OutputFormat::createCompact()) . ']';
    }
}
<?php

namespace Sabberworm\CSS\Value;

abstract class PrimitiveValue extends Value
{
    /**
     * @param int $iLineNo
     */
    public function __construct($iLineNo = 0)
    {
        parent::__construct($iLineNo);
    }
}
<?php

namespace Sabberworm\CSS\Value;

/**
 * This class is used to represent all multivalued rules like `font: bold 12px/3 Helvetica, Verdana, sans-serif;`
 * (where the value would be a whitespace-separated list of the primitive value `bold`, a slash-separated list
 * and a comma-separated list).
 */
class RuleValueList extends ValueList
{
    /**
     * @param string $sSeparator
     * @param int $iLineNo
     */
    public function __construct($sSeparator = ',', $iLineNo = 0)
    {
        parent::__construct([], $sSeparator, $iLineNo);
    }
}
<?php

namespace Sabberworm\CSS\Value;

use Sabberworm\CSS\OutputFormat;
use Sabberworm\CSS\Parsing\ParserState;
use Sabberworm\CSS\Parsing\UnexpectedEOFException;
use Sabberworm\CSS\Parsing\UnexpectedTokenException;

/**
 * A `Size` consists of a numeric `size` value and a unit.
 */
class Size extends PrimitiveValue
{
    /**
     * vh/vw/vm(ax)/vmin/rem are absolute insofar as they don’t scale to the immediate parent (only the viewport)
     *
     * @var array<int, string>
     *
     * @internal
     */
    const ABSOLUTE_SIZE_UNITS = [
        'px',
        'pt',
        'pc',
        'cm',
        'mm',
        'mozmm',
        'in',
        'vh',
        'dvh',
        'svh',
        'lvh',
        'vw',
        'vmin',
        'vmax',
        'rem',
    ];

    /**
     * @var array<int, string>
     *
     * @internal
     */
    const RELATIVE_SIZE_UNITS = ['%', 'em', 'ex', 'ch', 'fr'];

    /**
     * @var array<int, string>
     *
     * @internal
     */
    const NON_SIZE_UNITS = ['deg', 'grad', 'rad', 's', 'ms', 'turn', 'Hz', 'kHz'];

    /**
     * @var array<int, array<string, string>>|null
     */
    private static $SIZE_UNITS = null;

    /**
     * @var float
     */
    private $fSize;

    /**
     * @var string|null
     */
    private $sUnit;

    /**
     * @var bool
     */
    private $bIsColorComponent;

    /**
     * @param float|int|string $fSize
     * @param string|null $sUnit
     * @param bool $bIsColorComponent
     * @param int $iLineNo
     */
    public function __construct($fSize, $sUnit = null, $bIsColorComponent = false, $iLineNo = 0)
    {
        parent::__construct($iLineNo);
        $this->fSize = (float)$fSize;
        $this->sUnit = $sUnit;
        $this->bIsColorComponent = $bIsColorComponent;
    }

    /**
     * @param bool $bIsColorComponent
     *
     * @return Size
     *
     * @throws UnexpectedEOFException
     * @throws UnexpectedTokenException
     *
     * @internal since V8.8.0
     */
    public static function parse(ParserState $oParserState, $bIsColorComponent = false)
    {
        $sSize = '';
        if ($oParserState->comes('-')) {
            $sSize .= $oParserState->consume('-');
        }
        while (is_numeric($oParserState->peek()) || $oParserState->comes('.') || $oParserState->comes('e', true)) {
            if ($oParserState->comes('.')) {
                $sSize .= $oParserState->consume('.');
            } elseif ($oParserState->comes('e', true)) {
                $sLookahead = $oParserState->peek(1, 1);
                if (is_numeric($sLookahead) || $sLookahead === '+' || $sLookahead === '-') {
                    $sSize .= $oParserState->consume(2);
                } else {
                    break; // Reached the unit part of the number like "em" or "ex"
                }
            } else {
                $sSize .= $oParserState->consume(1);
            }
        }

        $sUnit = null;
        $aSizeUnits = self::getSizeUnits();
        foreach ($aSizeUnits as $iLength => &$aValues) {
            $sKey = strtolower($oParserState->peek($iLength));
            if (array_key_exists($sKey, $aValues)) {
                if (($sUnit = $aValues[$sKey]) !== null) {
                    $oParserState->consume($iLength);
                    break;
                }
            }
        }
        return new Size((float)$sSize, $sUnit, $bIsColorComponent, $oParserState->currentLine());
    }

    /**
     * @return array<int, array<string, string>>
     */
    private static function getSizeUnits()
    {
        if (!is_array(self::$SIZE_UNITS)) {
            self::$SIZE_UNITS = [];
            foreach (array_merge(self::ABSOLUTE_SIZE_UNITS, self::RELATIVE_SIZE_UNITS, self::NON_SIZE_UNITS) as $val) {
                $iSize = strlen($val);
                if (!isset(self::$SIZE_UNITS[$iSize])) {
                    self::$SIZE_UNITS[$iSize] = [];
                }
                self::$SIZE_UNITS[$iSize][strtolower($val)] = $val;
            }

            krsort(self::$SIZE_UNITS, SORT_NUMERIC);
        }

        return self::$SIZE_UNITS;
    }

    /**
     * @param string $sUnit
     *
     * @return void
     */
    public function setUnit($sUnit)
    {
        $this->sUnit = $sUnit;
    }

    /**
     * @return string|null
     */
    public function getUnit()
    {
        return $this->sUnit;
    }

    /**
     * @param float|int|string $fSize
     */
    public function setSize($fSize)
    {
        $this->fSize = (float)$fSize;
    }

    /**
     * @return float
     */
    public function getSize()
    {
        return $this->fSize;
    }

    /**
     * @return bool
     */
    public function isColorComponent()
    {
        return $this->bIsColorComponent;
    }

    /**
     * Returns whether the number stored in this Size really represents a size (as in a length of something on screen).
     *
     * @return false if the unit an angle, a duration, a frequency or the number is a component in a Color object.
     */
    public function isSize()
    {
        if (in_array($this->sUnit, self::NON_SIZE_UNITS, true)) {
            return false;
        }
        return !$this->isColorComponent();
    }

    /**
     * @return bool
     */
    public function isRelative()
    {
        if (in_array($this->sUnit, self::RELATIVE_SIZE_UNITS, true)) {
            return true;
        }
        if ($this->sUnit === null && $this->fSize != 0) {
            return true;
        }
        return false;
    }

    /**
     * @return string
     *
     * @deprecated in V8.8.0, will be removed in V9.0.0. Use `render` instead.
     */
    public function __toString()
    {
        return $this->render(new OutputFormat());
    }

    /**
     * @param OutputFormat|null $oOutputFormat
     *
     * @return string
     */
    public function render($oOutputFormat)
    {
        $l = localeconv();
        $sPoint = preg_quote($l['decimal_point'], '/');
        $sSize = preg_match("/[\d\.]+e[+-]?\d+/i", (string)$this->fSize)
            ? preg_replace("/$sPoint?0+$/", "", sprintf("%f", $this->fSize)) : (string)$this->fSize;
        return preg_replace(["/$sPoint/", "/^(-?)0\./"], ['.', '$1.'], $sSize)
            . ($this->sUnit === null ? '' : $this->sUnit);
    }
}
<?php

namespace Sabberworm\CSS\Value;

use Sabberworm\CSS\OutputFormat;
use Sabberworm\CSS\Parsing\ParserState;
use Sabberworm\CSS\Parsing\SourceException;
use Sabberworm\CSS\Parsing\UnexpectedEOFException;
use Sabberworm\CSS\Parsing\UnexpectedTokenException;

/**
 * This class represents URLs in CSS. `URL`s always output in `URL("")` notation.
 */
class URL extends PrimitiveValue
{
    /**
     * @var CSSString
     */
    private $oURL;

    /**
     * @param int $iLineNo
     */
    public function __construct(CSSString $oURL, $iLineNo = 0)
    {
        parent::__construct($iLineNo);
        $this->oURL = $oURL;
    }

    /**
     * @return URL
     *
     * @throws SourceException
     * @throws UnexpectedEOFException
     * @throws UnexpectedTokenException
     *
     * @internal since V8.8.0
     */
    public static function parse(ParserState $oParserState)
    {
        $oAnchor = $oParserState->anchor();
        $sIdentifier = '';
        for ($i = 0; $i < 3; $i++) {
            $sChar = $oParserState->parseCharacter(true);
            if ($sChar === null) {
                break;
            }
            $sIdentifier .= $sChar;
        }
        $bUseUrl = $oParserState->streql($sIdentifier, 'url');
        if ($bUseUrl) {
            $oParserState->consumeWhiteSpace();
            $oParserState->consume('(');
        } else {
            $oAnchor->backtrack();
        }
        $oParserState->consumeWhiteSpace();
        $oResult = new URL(CSSString::parse($oParserState), $oParserState->currentLine());
        if ($bUseUrl) {
            $oParserState->consumeWhiteSpace();
            $oParserState->consume(')');
        }
        return $oResult;
    }

    /**
     * @return void
     */
    public function setURL(CSSString $oURL)
    {
        $this->oURL = $oURL;
    }

    /**
     * @return CSSString
     */
    public function getURL()
    {
        return $this->oURL;
    }

    /**
     * @return string
     *
     * @deprecated in V8.8.0, will be removed in V9.0.0. Use `render` instead.
     */
    public function __toString()
    {
        return $this->render(new OutputFormat());
    }

    /**
     * @param OutputFormat|null $oOutputFormat
     *
     * @return string
     */
    public function render($oOutputFormat)
    {
        return "url({$this->oURL->render($oOutputFormat)})";
    }
}
<?php

namespace Sabberworm\CSS\Value;

use Sabberworm\CSS\CSSElement;
use Sabberworm\CSS\Parsing\ParserState;
use Sabberworm\CSS\Parsing\SourceException;
use Sabberworm\CSS\Parsing\UnexpectedEOFException;
use Sabberworm\CSS\Parsing\UnexpectedTokenException;
use Sabberworm\CSS\Position\Position;
use Sabberworm\CSS\Position\Positionable;

/**
 * Abstract base class for specific classes of CSS values: `Size`, `Color`, `CSSString` and `URL`, and another
 * abstract subclass `ValueList`.
 */
abstract class Value implements CSSElement, Positionable
{
    use Position;

    /**
     * @param int $iLineNo
     */
    public function __construct($iLineNo = 0)
    {
        $this->setPosition($iLineNo);
    }

    /**
     * @param array<array-key, string> $aListDelimiters
     *
     * @return RuleValueList|CSSFunction|CSSString|LineName|Size|URL|string
     *
     * @throws UnexpectedTokenException
     * @throws UnexpectedEOFException
     *
     * @internal since V8.8.0
     */
    public static function parseValue(ParserState $oParserState, array $aListDelimiters = [])
    {
        /** @var array<int, RuleValueList|CSSFunction|CSSString|LineName|Size|URL|string> $aStack */
        $aStack = [];
        $oParserState->consumeWhiteSpace();
        //Build a list of delimiters and parsed values
        while (
            !($oParserState->comes('}') || $oParserState->comes(';') || $oParserState->comes('!')
                || $oParserState->comes(')')
                || $oParserState->comes('\\')
                || $oParserState->isEnd())
        ) {
            if (count($aStack) > 0) {
                $bFoundDelimiter = false;
                foreach ($aListDelimiters as $sDelimiter) {
                    if ($oParserState->comes($sDelimiter)) {
                        array_push($aStack, $oParserState->consume($sDelimiter));
                        $oParserState->consumeWhiteSpace();
                        $bFoundDelimiter = true;
                        break;
                    }
                }
                if (!$bFoundDelimiter) {
                    //Whitespace was the list delimiter
                    array_push($aStack, ' ');
                }
            }
            array_push($aStack, self::parsePrimitiveValue($oParserState));
            $oParserState->consumeWhiteSpace();
        }
        // Convert the list to list objects
        foreach ($aListDelimiters as $sDelimiter) {
            $iStackLength = count($aStack);
            if ($iStackLength === 1) {
                return $aStack[0];
            }
            $aNewStack = [];
            for ($iStartPosition = 0; $iStartPosition < $iStackLength; ++$iStartPosition) {
                if ($iStartPosition === ($iStackLength - 1) || $sDelimiter !== $aStack[$iStartPosition + 1]) {
                    $aNewStack[] = $aStack[$iStartPosition];
                    continue;
                }
                $iLength = 2; //Number of elements to be joined
                for ($i = $iStartPosition + 3; $i < $iStackLength; $i += 2, ++$iLength) {
                    if ($sDelimiter !== $aStack[$i]) {
                        break;
                    }
                }
                $oList = new RuleValueList($sDelimiter, $oParserState->currentLine());
                for ($i = $iStartPosition; $i - $iStartPosition < $iLength * 2; $i += 2) {
                    $oList->addListComponent($aStack[$i]);
                }
                $aNewStack[] = $oList;
                $iStartPosition += $iLength * 2 - 2;
            }
            $aStack = $aNewStack;
        }
        if (!isset($aStack[0])) {
            throw new UnexpectedTokenException(
                " {$oParserState->peek()} ",
                $oParserState->peek(1, -1) . $oParserState->peek(2),
                'literal',
                $oParserState->currentLine()
            );
        }
        return $aStack[0];
    }

    /**
     * @param bool $bIgnoreCase
     *
     * @return CSSFunction|string
     *
     * @throws UnexpectedEOFException
     * @throws UnexpectedTokenException
     *
     * @internal since V8.8.0
     */
    public static function parseIdentifierOrFunction(ParserState $oParserState, $bIgnoreCase = false)
    {
        $oAnchor = $oParserState->anchor();
        $mResult = $oParserState->parseIdentifier($bIgnoreCase);

        if ($oParserState->comes('(')) {
            $oAnchor->backtrack();
            if ($oParserState->streql('url', $mResult)) {
                $mResult = URL::parse($oParserState);
            } elseif (
                $oParserState->streql('calc', $mResult)
                || $oParserState->streql('-webkit-calc', $mResult)
                || $oParserState->streql('-moz-calc', $mResult)
            ) {
                $mResult = CalcFunction::parse($oParserState);
            } else {
                $mResult = CSSFunction::parse($oParserState, $bIgnoreCase);
            }
        }

        return $mResult;
    }

    /**
     * @return CSSFunction|CSSString|LineName|Size|URL|string
     *
     * @throws UnexpectedEOFException
     * @throws UnexpectedTokenException
     * @throws SourceException
     *
     * @internal since V8.8.0
     */
    public static function parsePrimitiveValue(ParserState $oParserState)
    {
        $oValue = null;
        $oParserState->consumeWhiteSpace();
        if (
            is_numeric($oParserState->peek())
            || ($oParserState->comes('-.')
                && is_numeric($oParserState->peek(1, 2)))
            || (($oParserState->comes('-') || $oParserState->comes('.')) && is_numeric($oParserState->peek(1, 1)))
        ) {
            $oValue = Size::parse($oParserState);
        } elseif ($oParserState->comes('#') || $oParserState->comes('rgb', true) || $oParserState->comes('hsl', true)) {
            $oValue = Color::parse($oParserState);
        } elseif ($oParserState->comes("'") || $oParserState->comes('"')) {
            $oValue = CSSString::parse($oParserState);
        } elseif ($oParserState->comes("progid:") && $oParserState->getSettings()->bLenientParsing) {
            $oValue = self::parseMicrosoftFilter($oParserState);
        } elseif ($oParserState->comes("[")) {
            $oValue = LineName::parse($oParserState);
        } elseif ($oParserState->comes("U+")) {
            $oValue = self::parseUnicodeRangeValue($oParserState);
        } else {
            $sNextChar = $oParserState->peek(1);
            try {
                $oValue = self::parseIdentifierOrFunction($oParserState);
            } catch (UnexpectedTokenException $e) {
                if (\in_array($sNextChar, ['+', '-', '*', '/'], true)) {
                    $oValue = $oParserState->consume(1);
                } else {
                    throw $e;
                }
            }
        }
        $oParserState->consumeWhiteSpace();
        return $oValue;
    }

    /**
     * @return CSSFunction
     *
     * @throws UnexpectedEOFException
     * @throws UnexpectedTokenException
     */
    private static function parseMicrosoftFilter(ParserState $oParserState)
    {
        $sFunction = $oParserState->consumeUntil('(', false, true);
        $aArguments = Value::parseValue($oParserState, [',', '=']);
        return new CSSFunction($sFunction, $aArguments, ',', $oParserState->currentLine());
    }

    /**
     * @return string
     *
     * @throws UnexpectedEOFException
     * @throws UnexpectedTokenException
     */
    private static function parseUnicodeRangeValue(ParserState $oParserState)
    {
        $iCodepointMaxLength = 6; // Code points outside BMP can use up to six digits
        $sRange = "";
        $oParserState->consume("U+");
        do {
            if ($oParserState->comes('-')) {
                $iCodepointMaxLength = 13; // Max length is 2 six digit code points + the dash(-) between them
            }
            $sRange .= $oParserState->consume(1);
        } while (strlen($sRange) < $iCodepointMaxLength && preg_match("/[A-Fa-f0-9\?-]/", $oParserState->peek()));
        return "U+{$sRange}";
    }
}
<?php

namespace Sabberworm\CSS\Value;

use Sabberworm\CSS\OutputFormat;

/**
 * A `ValueList` represents a lists of `Value`s, separated by some separation character
 * (mostly `,`, whitespace, or `/`).
 *
 * There are two types of `ValueList`s: `RuleValueList` and `CSSFunction`
 */
abstract class ValueList extends Value
{
    /**
     * @var array<int, RuleValueList|CSSFunction|CSSString|LineName|Size|URL|string>
     *
     * @internal since 8.8.0
     */
    protected $aComponents;

    /**
     * @var string
     *
     * @internal since 8.8.0
     */
    protected $sSeparator;

    /**
     * phpcs:ignore Generic.Files.LineLength
     * @param array<int, RuleValueList|CSSFunction|CSSString|LineName|Size|URL|string>|RuleValueList|CSSFunction|CSSString|LineName|Size|URL|string $aComponents
     * @param string $sSeparator
     * @param int $iLineNo
     */
    public function __construct($aComponents = [], $sSeparator = ',', $iLineNo = 0)
    {
        parent::__construct($iLineNo);
        if (!is_array($aComponents)) {
            $aComponents = [$aComponents];
        }
        $this->aComponents = $aComponents;
        $this->sSeparator = $sSeparator;
    }

    /**
     * @param RuleValueList|CSSFunction|CSSString|LineName|Size|URL|string $mComponent
     *
     * @return void
     */
    public function addListComponent($mComponent)
    {
        $this->aComponents[] = $mComponent;
    }

    /**
     * @return array<int, RuleValueList|CSSFunction|CSSString|LineName|Size|URL|string>
     */
    public function getListComponents()
    {
        return $this->aComponents;
    }

    /**
     * @param array<int, RuleValueList|CSSFunction|CSSString|LineName|Size|URL|string> $aComponents
     *
     * @return void
     */
    public function setListComponents(array $aComponents)
    {
        $this->aComponents = $aComponents;
    }

    /**
     * @return string
     */
    public function getListSeparator()
    {
        return $this->sSeparator;
    }

    /**
     * @param string $sSeparator
     *
     * @return void
     */
    public function setListSeparator($sSeparator)
    {
        $this->sSeparator = $sSeparator;
    }

    /**
     * @return string
     *
     * @deprecated in V8.8.0, will be removed in V9.0.0. Use `render` instead.
     */
    public function __toString()
    {
        return $this->render(new OutputFormat());
    }

    /**
     * @param OutputFormat|null $oOutputFormat
     *
     * @return string
     */
    public function render($oOutputFormat)
    {
        return $oOutputFormat->implode(
            $oOutputFormat->spaceBeforeListArgumentSeparator($this->sSeparator) . $this->sSeparator
            . $oOutputFormat->spaceAfterListArgumentSeparator($this->sSeparator),
            $this->aComponents
        );
    }
}
{
    "packages": [
        {
            "name": "dompdf/dompdf",
            "version": "v2.0.8",
            "version_normalized": "2.0.8.0",
            "source": {
                "type": "git",
                "url": "https://github.com/dompdf/dompdf.git",
                "reference": "c20247574601700e1f7c8dab39310fca1964dc52"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/dompdf/dompdf/zipball/c20247574601700e1f7c8dab39310fca1964dc52",
                "reference": "c20247574601700e1f7c8dab39310fca1964dc52",
                "shasum": ""
            },
            "require": {
                "ext-dom": "*",
                "ext-mbstring": "*",
                "masterminds/html5": "^2.0",
                "phenx/php-font-lib": ">=0.5.4 <1.0.0",
                "phenx/php-svg-lib": ">=0.5.2 <1.0.0",
                "php": "^7.1 || ^8.0"
            },
            "require-dev": {
                "ext-json": "*",
                "ext-zip": "*",
                "mockery/mockery": "^1.3",
                "phpunit/phpunit": "^7.5 || ^8 || ^9",
                "squizlabs/php_codesniffer": "^3.5"
            },
            "suggest": {
                "ext-gd": "Needed to process images",
                "ext-gmagick": "Improves image processing performance",
                "ext-imagick": "Improves image processing performance",
                "ext-zlib": "Needed for pdf stream compression"
            },
            "time": "2024-04-29T13:06:17+00:00",
            "type": "library",
            "installation-source": "dist",
            "autoload": {
                "psr-4": {
                    "Dompdf\\": "src/"
                },
                "classmap": [
                    "lib/"
                ]
            },
            "notification-url": "https://packagist.org/downloads/",
            "license": [
                "LGPL-2.1"
            ],
            "authors": [
                {
                    "name": "The Dompdf Community",
                    "homepage": "https://github.com/dompdf/dompdf/blob/master/AUTHORS.md"
                }
            ],
            "description": "DOMPDF is a CSS 2.1 compliant HTML to PDF converter",
            "homepage": "https://github.com/dompdf/dompdf",
            "support": {
                "issues": "https://github.com/dompdf/dompdf/issues",
                "source": "https://github.com/dompdf/dompdf/tree/v2.0.8"
            },
            "install-path": "../dompdf/dompdf"
        },
        {
            "name": "league/climate",
            "version": "3.8.2",
            "version_normalized": "3.8.2.0",
            "source": {
                "type": "git",
                "url": "https://github.com/thephpleague/climate.git",
                "reference": "a785a3ac8f584eed4abd45e4e16fe64c46659a28"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/thephpleague/climate/zipball/a785a3ac8f584eed4abd45e4e16fe64c46659a28",
                "reference": "a785a3ac8f584eed4abd45e4e16fe64c46659a28",
                "shasum": ""
            },
            "require": {
                "php": "^7.3 || ^8.0",
                "psr/log": "^1.0 || ^2.0 || ^3.0",
                "seld/cli-prompt": "^1.0"
            },
            "require-dev": {
                "mikey179/vfsstream": "^1.6.10",
                "mockery/mockery": "^1.4.2",
                "phpunit/phpunit": "^9.5.10"
            },
            "suggest": {
                "ext-mbstring": "If ext-mbstring is not available you MUST install symfony/polyfill-mbstring"
            },
            "time": "2022-06-18T14:42:08+00:00",
            "type": "library",
            "installation-source": "dist",
            "autoload": {
                "psr-4": {
                    "League\\CLImate\\": "src/"
                }
            },
            "notification-url": "https://packagist.org/downloads/",
            "license": [
                "MIT"
            ],
            "authors": [
                {
                    "name": "Joe Tannenbaum",
                    "email": "hey@joe.codes",
                    "homepage": "http://joe.codes/",
                    "role": "Developer"
                },
                {
                    "name": "Craig Duncan",
                    "email": "git@duncanc.co.uk",
                    "homepage": "https://github.com/duncan3dc",
                    "role": "Developer"
                }
            ],
            "description": "PHP's best friend for the terminal. CLImate allows you to easily output colored text, special formats, and more.",
            "keywords": [
                "cli",
                "colors",
                "command",
                "php",
                "terminal"
            ],
            "support": {
                "issues": "https://github.com/thephpleague/climate/issues",
                "source": "https://github.com/thephpleague/climate/tree/3.8.2"
            },
            "install-path": "../league/climate"
        },
        {
            "name": "masterminds/html5",
            "version": "2.10.0",
            "version_normalized": "2.10.0.0",
            "source": {
                "type": "git",
                "url": "https://github.com/Masterminds/html5-php.git",
                "reference": "fcf91eb64359852f00d921887b219479b4f21251"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/Masterminds/html5-php/zipball/fcf91eb64359852f00d921887b219479b4f21251",
                "reference": "fcf91eb64359852f00d921887b219479b4f21251",
                "shasum": ""
            },
            "require": {
                "ext-dom": "*",
                "php": ">=5.3.0"
            },
            "require-dev": {
                "phpunit/phpunit": "^4.8.35 || ^5.7.21 || ^6 || ^7 || ^8 || ^9"
            },
            "time": "2025-07-25T09:04:22+00:00",
            "type": "library",
            "extra": {
                "branch-alias": {
                    "dev-master": "2.7-dev"
                }
            },
            "installation-source": "dist",
            "autoload": {
                "psr-4": {
                    "Masterminds\\": "src"
                }
            },
            "notification-url": "https://packagist.org/downloads/",
            "license": [
                "MIT"
            ],
            "authors": [
                {
                    "name": "Matt Butcher",
                    "email": "technosophos@gmail.com"
                },
                {
                    "name": "Matt Farina",
                    "email": "matt@mattfarina.com"
                },
                {
                    "name": "Asmir Mustafic",
                    "email": "goetas@gmail.com"
                }
            ],
            "description": "An HTML5 parser and serializer.",
            "homepage": "http://masterminds.github.io/html5-php",
            "keywords": [
                "HTML5",
                "dom",
                "html",
                "parser",
                "querypath",
                "serializer",
                "xml"
            ],
            "support": {
                "issues": "https://github.com/Masterminds/html5-php/issues",
                "source": "https://github.com/Masterminds/html5-php/tree/2.10.0"
            },
            "install-path": "../masterminds/html5"
        },
        {
            "name": "orangehrm-devops/common",
            "version": "dev-compatibility/php-7.4",
            "version_normalized": "dev-compatibility/php-7.4",
            "source": {
                "type": "git",
                "url": "https://gitlab.orangehrm.com/devops/internal-tools/common.git",
                "reference": "7b5115dc0672fd0a873df34d5b079b7c4e270ddb"
            },
            "require": {
                "ext-curl": "*",
                "ext-json": "*",
                "ext-pdo": "*",
                "ext-posix": "*",
                "ext-zip": "*",
                "php": ">=7.4",
                "phpseclib/phpseclib": ">=3.0.34",
                "symfony/yaml": "v4.2.3"
            },
            "require-dev": {
                "phpunit/phpunit": "9.6.x"
            },
            "time": "2025-09-23T08:42:58+00:00",
            "type": "library",
            "installation-source": "source",
            "autoload": {
                "psr-4": {
                    "OrangeHRM\\": "src/OrangeHRM"
                }
            },
            "license": [
                "OrangeHRM Commercial License"
            ],
            "authors": [
                {
                    "name": "OrangeHRM Inc.",
                    "email": "devops@orangehrm.com"
                }
            ],
            "description": "Common libraries for DevOps Internal Tools",
            "install-path": "../orangehrm-devops/common"
        },
        {
            "name": "paragonie/constant_time_encoding",
            "version": "v2.8.2",
            "version_normalized": "2.8.2.0",
            "source": {
                "type": "git",
                "url": "https://github.com/paragonie/constant_time_encoding.git",
                "reference": "e30811f7bc69e4b5b6d5783e712c06c8eabf0226"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/paragonie/constant_time_encoding/zipball/e30811f7bc69e4b5b6d5783e712c06c8eabf0226",
                "reference": "e30811f7bc69e4b5b6d5783e712c06c8eabf0226",
                "shasum": ""
            },
            "require": {
                "php": "^7|^8"
            },
            "require-dev": {
                "phpunit/phpunit": "^6|^7|^8|^9",
                "vimeo/psalm": "^1|^2|^3|^4"
            },
            "time": "2025-09-24T15:12:37+00:00",
            "type": "library",
            "installation-source": "dist",
            "autoload": {
                "psr-4": {
                    "ParagonIE\\ConstantTime\\": "src/"
                }
            },
            "notification-url": "https://packagist.org/downloads/",
            "license": [
                "MIT"
            ],
            "authors": [
                {
                    "name": "Paragon Initiative Enterprises",
                    "email": "security@paragonie.com",
                    "homepage": "https://paragonie.com",
                    "role": "Maintainer"
                },
                {
                    "name": "Steve 'Sc00bz' Thomas",
                    "email": "steve@tobtu.com",
                    "homepage": "https://www.tobtu.com",
                    "role": "Original Developer"
                }
            ],
            "description": "Constant-time Implementations of RFC 4648 Encoding (Base-64, Base-32, Base-16)",
            "keywords": [
                "base16",
                "base32",
                "base32_decode",
                "base32_encode",
                "base64",
                "base64_decode",
                "base64_encode",
                "bin2hex",
                "encoding",
                "hex",
                "hex2bin",
                "rfc4648"
            ],
            "support": {
                "email": "info@paragonie.com",
                "issues": "https://github.com/paragonie/constant_time_encoding/issues",
                "source": "https://github.com/paragonie/constant_time_encoding"
            },
            "install-path": "../paragonie/constant_time_encoding"
        },
        {
            "name": "paragonie/random_compat",
            "version": "v9.99.100",
            "version_normalized": "9.99.100.0",
            "source": {
                "type": "git",
                "url": "https://github.com/paragonie/random_compat.git",
                "reference": "996434e5492cb4c3edcb9168db6fbb1359ef965a"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/paragonie/random_compat/zipball/996434e5492cb4c3edcb9168db6fbb1359ef965a",
                "reference": "996434e5492cb4c3edcb9168db6fbb1359ef965a",
                "shasum": ""
            },
            "require": {
                "php": ">= 7"
            },
            "require-dev": {
                "phpunit/phpunit": "4.*|5.*",
                "vimeo/psalm": "^1"
            },
            "suggest": {
                "ext-libsodium": "Provides a modern crypto API that can be used to generate random bytes."
            },
            "time": "2020-10-15T08:29:30+00:00",
            "type": "library",
            "installation-source": "dist",
            "notification-url": "https://packagist.org/downloads/",
            "license": [
                "MIT"
            ],
            "authors": [
                {
                    "name": "Paragon Initiative Enterprises",
                    "email": "security@paragonie.com",
                    "homepage": "https://paragonie.com"
                }
            ],
            "description": "PHP 5.x polyfill for random_bytes() and random_int() from PHP 7",
            "keywords": [
                "csprng",
                "polyfill",
                "pseudorandom",
                "random"
            ],
            "support": {
                "email": "info@paragonie.com",
                "issues": "https://github.com/paragonie/random_compat/issues",
                "source": "https://github.com/paragonie/random_compat"
            },
            "install-path": "../paragonie/random_compat"
        },
        {
            "name": "phenx/php-font-lib",
            "version": "0.5.6",
            "version_normalized": "0.5.6.0",
            "source": {
                "type": "git",
                "url": "https://github.com/dompdf/php-font-lib.git",
                "reference": "a1681e9793040740a405ac5b189275059e2a9863"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/dompdf/php-font-lib/zipball/a1681e9793040740a405ac5b189275059e2a9863",
                "reference": "a1681e9793040740a405ac5b189275059e2a9863",
                "shasum": ""
            },
            "require": {
                "ext-mbstring": "*"
            },
            "require-dev": {
                "symfony/phpunit-bridge": "^3 || ^4 || ^5 || ^6"
            },
            "time": "2024-01-29T14:45:26+00:00",
            "type": "library",
            "installation-source": "dist",
            "autoload": {
                "psr-4": {
                    "FontLib\\": "src/FontLib"
                }
            },
            "notification-url": "https://packagist.org/downloads/",
            "license": [
                "LGPL-2.1-or-later"
            ],
            "authors": [
                {
                    "name": "Fabien Ménager",
                    "email": "fabien.menager@gmail.com"
                }
            ],
            "description": "A library to read, parse, export and make subsets of different types of font files.",
            "homepage": "https://github.com/PhenX/php-font-lib",
            "support": {
                "issues": "https://github.com/dompdf/php-font-lib/issues",
                "source": "https://github.com/dompdf/php-font-lib/tree/0.5.6"
            },
            "install-path": "../phenx/php-font-lib"
        },
        {
            "name": "phenx/php-svg-lib",
            "version": "0.5.4",
            "version_normalized": "0.5.4.0",
            "source": {
                "type": "git",
                "url": "https://github.com/dompdf/php-svg-lib.git",
                "reference": "46b25da81613a9cf43c83b2a8c2c1bdab27df691"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/dompdf/php-svg-lib/zipball/46b25da81613a9cf43c83b2a8c2c1bdab27df691",
                "reference": "46b25da81613a9cf43c83b2a8c2c1bdab27df691",
                "shasum": ""
            },
            "require": {
                "ext-mbstring": "*",
                "php": "^7.1 || ^8.0",
                "sabberworm/php-css-parser": "^8.4"
            },
            "require-dev": {
                "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5"
            },
            "time": "2024-04-08T12:52:34+00:00",
            "type": "library",
            "installation-source": "dist",
            "autoload": {
                "psr-4": {
                    "Svg\\": "src/Svg"
                }
            },
            "notification-url": "https://packagist.org/downloads/",
            "license": [
                "LGPL-3.0-or-later"
            ],
            "authors": [
                {
                    "name": "Fabien Ménager",
                    "email": "fabien.menager@gmail.com"
                }
            ],
            "description": "A library to read, parse and export to PDF SVG files.",
            "homepage": "https://github.com/PhenX/php-svg-lib",
            "support": {
                "issues": "https://github.com/dompdf/php-svg-lib/issues",
                "source": "https://github.com/dompdf/php-svg-lib/tree/0.5.4"
            },
            "install-path": "../phenx/php-svg-lib"
        },
        {
            "name": "php-amqplib/php-amqplib",
            "version": "v3.7.3",
            "version_normalized": "3.7.3.0",
            "source": {
                "type": "git",
                "url": "https://github.com/php-amqplib/php-amqplib.git",
                "reference": "9f50fe69a9f1a19e2cb25596a354d705de36fe59"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/php-amqplib/php-amqplib/zipball/9f50fe69a9f1a19e2cb25596a354d705de36fe59",
                "reference": "9f50fe69a9f1a19e2cb25596a354d705de36fe59",
                "shasum": ""
            },
            "require": {
                "ext-mbstring": "*",
                "ext-sockets": "*",
                "php": "^7.2||^8.0",
                "phpseclib/phpseclib": "^2.0|^3.0"
            },
            "conflict": {
                "php": "7.4.0 - 7.4.1"
            },
            "replace": {
                "videlalvaro/php-amqplib": "self.version"
            },
            "require-dev": {
                "ext-curl": "*",
                "nategood/httpful": "^0.2.20",
                "phpunit/phpunit": "^7.5|^9.5",
                "squizlabs/php_codesniffer": "^3.6"
            },
            "time": "2025-02-18T20:11:13+00:00",
            "type": "library",
            "extra": {
                "branch-alias": {
                    "dev-master": "3.0-dev"
                }
            },
            "installation-source": "dist",
            "autoload": {
                "psr-4": {
                    "PhpAmqpLib\\": "PhpAmqpLib/"
                }
            },
            "notification-url": "https://packagist.org/downloads/",
            "license": [
                "LGPL-2.1-or-later"
            ],
            "authors": [
                {
                    "name": "Alvaro Videla",
                    "role": "Original Maintainer"
                },
                {
                    "name": "Raúl Araya",
                    "email": "nubeiro@gmail.com",
                    "role": "Maintainer"
                },
                {
                    "name": "Luke Bakken",
                    "email": "luke@bakken.io",
                    "role": "Maintainer"
                },
                {
                    "name": "Ramūnas Dronga",
                    "email": "github@ramuno.lt",
                    "role": "Maintainer"
                }
            ],
            "description": "Formerly videlalvaro/php-amqplib.  This library is a pure PHP implementation of the AMQP protocol. It's been tested against RabbitMQ.",
            "homepage": "https://github.com/php-amqplib/php-amqplib/",
            "keywords": [
                "message",
                "queue",
                "rabbitmq"
            ],
            "support": {
                "issues": "https://github.com/php-amqplib/php-amqplib/issues",
                "source": "https://github.com/php-amqplib/php-amqplib/tree/v3.7.3"
            },
            "install-path": "../php-amqplib/php-amqplib"
        },
        {
            "name": "phpseclib/phpseclib",
            "version": "3.0.47",
            "version_normalized": "3.0.47.0",
            "source": {
                "type": "git",
                "url": "https://github.com/phpseclib/phpseclib.git",
                "reference": "9d6ca36a6c2dd434765b1071b2644a1c683b385d"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/9d6ca36a6c2dd434765b1071b2644a1c683b385d",
                "reference": "9d6ca36a6c2dd434765b1071b2644a1c683b385d",
                "shasum": ""
            },
            "require": {
                "paragonie/constant_time_encoding": "^1|^2|^3",
                "paragonie/random_compat": "^1.4|^2.0|^9.99.99",
                "php": ">=5.6.1"
            },
            "require-dev": {
                "phpunit/phpunit": "*"
            },
            "suggest": {
                "ext-dom": "Install the DOM extension to load XML formatted public keys.",
                "ext-gmp": "Install the GMP (GNU Multiple Precision) extension in order to speed up arbitrary precision integer arithmetic operations.",
                "ext-libsodium": "SSH2/SFTP can make use of some algorithms provided by the libsodium-php extension.",
                "ext-mcrypt": "Install the Mcrypt extension in order to speed up a few other cryptographic operations.",
                "ext-openssl": "Install the OpenSSL extension in order to speed up a wide variety of cryptographic operations."
            },
            "time": "2025-10-06T01:07:24+00:00",
            "type": "library",
            "installation-source": "dist",
            "autoload": {
                "files": [
                    "phpseclib/bootstrap.php"
                ],
                "psr-4": {
                    "phpseclib3\\": "phpseclib/"
                }
            },
            "notification-url": "https://packagist.org/downloads/",
            "license": [
                "MIT"
            ],
            "authors": [
                {
                    "name": "Jim Wigginton",
                    "email": "terrafrost@php.net",
                    "role": "Lead Developer"
                },
                {
                    "name": "Patrick Monnerat",
                    "email": "pm@datasphere.ch",
                    "role": "Developer"
                },
                {
                    "name": "Andreas Fischer",
                    "email": "bantu@phpbb.com",
                    "role": "Developer"
                },
                {
                    "name": "Hans-Jürgen Petrich",
                    "email": "petrich@tronic-media.com",
                    "role": "Developer"
                },
                {
                    "name": "Graham Campbell",
                    "email": "graham@alt-three.com",
                    "role": "Developer"
                }
            ],
            "description": "PHP Secure Communications Library - Pure-PHP implementations of RSA, AES, SSH2, SFTP, X.509 etc.",
            "homepage": "http://phpseclib.sourceforge.net",
            "keywords": [
                "BigInteger",
                "aes",
                "asn.1",
                "asn1",
                "blowfish",
                "crypto",
                "cryptography",
                "encryption",
                "rsa",
                "security",
                "sftp",
                "signature",
                "signing",
                "ssh",
                "twofish",
                "x.509",
                "x509"
            ],
            "support": {
                "issues": "https://github.com/phpseclib/phpseclib/issues",
                "source": "https://github.com/phpseclib/phpseclib/tree/3.0.47"
            },
            "funding": [
                {
                    "url": "https://github.com/terrafrost",
                    "type": "github"
                },
                {
                    "url": "https://www.patreon.com/phpseclib",
                    "type": "patreon"
                },
                {
                    "url": "https://tidelift.com/funding/github/packagist/phpseclib/phpseclib",
                    "type": "tidelift"
                }
            ],
            "install-path": "../phpseclib/phpseclib"
        },
        {
            "name": "psr/log",
            "version": "1.1.4",
            "version_normalized": "1.1.4.0",
            "source": {
                "type": "git",
                "url": "https://github.com/php-fig/log.git",
                "reference": "d49695b909c3b7628b6289db5479a1c204601f11"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/php-fig/log/zipball/d49695b909c3b7628b6289db5479a1c204601f11",
                "reference": "d49695b909c3b7628b6289db5479a1c204601f11",
                "shasum": ""
            },
            "require": {
                "php": ">=5.3.0"
            },
            "time": "2021-05-03T11:20:27+00:00",
            "type": "library",
            "extra": {
                "branch-alias": {
                    "dev-master": "1.1.x-dev"
                }
            },
            "installation-source": "dist",
            "autoload": {
                "psr-4": {
                    "Psr\\Log\\": "Psr/Log/"
                }
            },
            "notification-url": "https://packagist.org/downloads/",
            "license": [
                "MIT"
            ],
            "authors": [
                {
                    "name": "PHP-FIG",
                    "homepage": "https://www.php-fig.org/"
                }
            ],
            "description": "Common interface for logging libraries",
            "homepage": "https://github.com/php-fig/log",
            "keywords": [
                "log",
                "psr",
                "psr-3"
            ],
            "support": {
                "source": "https://github.com/php-fig/log/tree/1.1.4"
            },
            "install-path": "../psr/log"
        },
        {
            "name": "sabberworm/php-css-parser",
            "version": "v8.9.0",
            "version_normalized": "8.9.0.0",
            "source": {
                "type": "git",
                "url": "https://github.com/MyIntervals/PHP-CSS-Parser.git",
                "reference": "d8e916507b88e389e26d4ab03c904a082aa66bb9"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/MyIntervals/PHP-CSS-Parser/zipball/d8e916507b88e389e26d4ab03c904a082aa66bb9",
                "reference": "d8e916507b88e389e26d4ab03c904a082aa66bb9",
                "shasum": ""
            },
            "require": {
                "ext-iconv": "*",
                "php": "^5.6.20 || ^7.0.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0"
            },
            "require-dev": {
                "phpunit/phpunit": "5.7.27 || 6.5.14 || 7.5.20 || 8.5.41",
                "rawr/cross-data-providers": "^2.0.0"
            },
            "suggest": {
                "ext-mbstring": "for parsing UTF-8 CSS"
            },
            "time": "2025-07-11T13:20:48+00:00",
            "type": "library",
            "extra": {
                "branch-alias": {
                    "dev-main": "9.0.x-dev"
                }
            },
            "installation-source": "dist",
            "autoload": {
                "psr-4": {
                    "Sabberworm\\CSS\\": "src/"
                }
            },
            "notification-url": "https://packagist.org/downloads/",
            "license": [
                "MIT"
            ],
            "authors": [
                {
                    "name": "Raphael Schweikert"
                },
                {
                    "name": "Oliver Klee",
                    "email": "github@oliverklee.de"
                },
                {
                    "name": "Jake Hotson",
                    "email": "jake.github@qzdesign.co.uk"
                }
            ],
            "description": "Parser for CSS Files written in PHP",
            "homepage": "https://www.sabberworm.com/blog/2010/6/10/php-css-parser",
            "keywords": [
                "css",
                "parser",
                "stylesheet"
            ],
            "support": {
                "issues": "https://github.com/MyIntervals/PHP-CSS-Parser/issues",
                "source": "https://github.com/MyIntervals/PHP-CSS-Parser/tree/v8.9.0"
            },
            "install-path": "../sabberworm/php-css-parser"
        },
        {
            "name": "seld/cli-prompt",
            "version": "1.0.4",
            "version_normalized": "1.0.4.0",
            "source": {
                "type": "git",
                "url": "https://github.com/Seldaek/cli-prompt.git",
                "reference": "b8dfcf02094b8c03b40322c229493bb2884423c5"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/Seldaek/cli-prompt/zipball/b8dfcf02094b8c03b40322c229493bb2884423c5",
                "reference": "b8dfcf02094b8c03b40322c229493bb2884423c5",
                "shasum": ""
            },
            "require": {
                "php": ">=5.3"
            },
            "require-dev": {
                "phpstan/phpstan": "^0.12.63"
            },
            "time": "2020-12-15T21:32:01+00:00",
            "type": "library",
            "extra": {
                "branch-alias": {
                    "dev-master": "1.x-dev"
                }
            },
            "installation-source": "dist",
            "autoload": {
                "psr-4": {
                    "Seld\\CliPrompt\\": "src/"
                }
            },
            "notification-url": "https://packagist.org/downloads/",
            "license": [
                "MIT"
            ],
            "authors": [
                {
                    "name": "Jordi Boggiano",
                    "email": "j.boggiano@seld.be"
                }
            ],
            "description": "Allows you to prompt for user input on the command line, and optionally hide the characters they type",
            "keywords": [
                "cli",
                "console",
                "hidden",
                "input",
                "prompt"
            ],
            "support": {
                "issues": "https://github.com/Seldaek/cli-prompt/issues",
                "source": "https://github.com/Seldaek/cli-prompt/tree/1.0.4"
            },
            "install-path": "../seld/cli-prompt"
        },
        {
            "name": "symfony/polyfill-ctype",
            "version": "v1.33.0",
            "version_normalized": "1.33.0.0",
            "source": {
                "type": "git",
                "url": "https://github.com/symfony/polyfill-ctype.git",
                "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/a3cc8b044a6ea513310cbd48ef7333b384945638",
                "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638",
                "shasum": ""
            },
            "require": {
                "php": ">=7.2"
            },
            "provide": {
                "ext-ctype": "*"
            },
            "suggest": {
                "ext-ctype": "For best performance"
            },
            "time": "2024-09-09T11:45:10+00:00",
            "type": "library",
            "extra": {
                "thanks": {
                    "url": "https://github.com/symfony/polyfill",
                    "name": "symfony/polyfill"
                }
            },
            "installation-source": "dist",
            "autoload": {
                "files": [
                    "bootstrap.php"
                ],
                "psr-4": {
                    "Symfony\\Polyfill\\Ctype\\": ""
                }
            },
            "notification-url": "https://packagist.org/downloads/",
            "license": [
                "MIT"
            ],
            "authors": [
                {
                    "name": "Gert de Pagter",
                    "email": "BackEndTea@gmail.com"
                },
                {
                    "name": "Symfony Community",
                    "homepage": "https://symfony.com/contributors"
                }
            ],
            "description": "Symfony polyfill for ctype functions",
            "homepage": "https://symfony.com",
            "keywords": [
                "compatibility",
                "ctype",
                "polyfill",
                "portable"
            ],
            "support": {
                "source": "https://github.com/symfony/polyfill-ctype/tree/v1.33.0"
            },
            "funding": [
                {
                    "url": "https://symfony.com/sponsor",
                    "type": "custom"
                },
                {
                    "url": "https://github.com/fabpot",
                    "type": "github"
                },
                {
                    "url": "https://github.com/nicolas-grekas",
                    "type": "github"
                },
                {
                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
                    "type": "tidelift"
                }
            ],
            "install-path": "../symfony/polyfill-ctype"
        },
        {
            "name": "symfony/yaml",
            "version": "v4.2.3",
            "version_normalized": "4.2.3.0",
            "source": {
                "type": "git",
                "url": "https://github.com/symfony/yaml.git",
                "reference": "d461670ee145092b7e2a56c1da7118f19cadadb0"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/symfony/yaml/zipball/d461670ee145092b7e2a56c1da7118f19cadadb0",
                "reference": "d461670ee145092b7e2a56c1da7118f19cadadb0",
                "shasum": ""
            },
            "require": {
                "php": "^7.1.3",
                "symfony/polyfill-ctype": "~1.8"
            },
            "conflict": {
                "symfony/console": "<3.4"
            },
            "require-dev": {
                "symfony/console": "~3.4|~4.0"
            },
            "suggest": {
                "symfony/console": "For validating YAML files using the lint command"
            },
            "time": "2019-01-16T20:35:37+00:00",
            "type": "library",
            "extra": {
                "branch-alias": {
                    "dev-master": "4.2-dev"
                }
            },
            "installation-source": "dist",
            "autoload": {
                "psr-4": {
                    "Symfony\\Component\\Yaml\\": ""
                },
                "exclude-from-classmap": [
                    "/Tests/"
                ]
            },
            "notification-url": "https://packagist.org/downloads/",
            "license": [
                "MIT"
            ],
            "authors": [
                {
                    "name": "Fabien Potencier",
                    "email": "fabien@symfony.com"
                },
                {
                    "name": "Symfony Community",
                    "homepage": "https://symfony.com/contributors"
                }
            ],
            "description": "Symfony Yaml Component",
            "homepage": "https://symfony.com",
            "support": {
                "source": "https://github.com/symfony/yaml/tree/4.2"
            },
            "install-path": "../symfony/yaml"
        }
    ],
    "dev": false,
    "dev-package-names": []
}
<?php return array(
    'root' => array(
        'name' => 'orangehrm/seat',
        'pretty_version' => 'dev-3.5.4-alpha.1',
        'version' => 'dev-3.5.4-alpha.1',
        'reference' => null,
        'type' => 'library',
        'install_path' => __DIR__ . '/../../',
        'aliases' => array(),
        'dev' => false,
    ),
    'versions' => array(
        'dompdf/dompdf' => array(
            'pretty_version' => 'v2.0.8',
            'version' => '2.0.8.0',
            'reference' => 'c20247574601700e1f7c8dab39310fca1964dc52',
            'type' => 'library',
            'install_path' => __DIR__ . '/../dompdf/dompdf',
            'aliases' => array(),
            'dev_requirement' => false,
        ),
        'league/climate' => array(
            'pretty_version' => '3.8.2',
            'version' => '3.8.2.0',
            'reference' => 'a785a3ac8f584eed4abd45e4e16fe64c46659a28',
            'type' => 'library',
            'install_path' => __DIR__ . '/../league/climate',
            'aliases' => array(),
            'dev_requirement' => false,
        ),
        'masterminds/html5' => array(
            'pretty_version' => '2.10.0',
            'version' => '2.10.0.0',
            'reference' => 'fcf91eb64359852f00d921887b219479b4f21251',
            'type' => 'library',
            'install_path' => __DIR__ . '/../masterminds/html5',
            'aliases' => array(),
            'dev_requirement' => false,
        ),
        'orangehrm-devops/common' => array(
            'pretty_version' => 'dev-compatibility/php-7.4',
            'version' => 'dev-compatibility/php-7.4',
            'reference' => '7b5115dc0672fd0a873df34d5b079b7c4e270ddb',
            'type' => 'library',
            'install_path' => __DIR__ . '/../orangehrm-devops/common',
            'aliases' => array(),
            'dev_requirement' => false,
        ),
        'orangehrm/seat' => array(
            'pretty_version' => 'dev-3.5.4-alpha.1',
            'version' => 'dev-3.5.4-alpha.1',
            'reference' => null,
            'type' => 'library',
            'install_path' => __DIR__ . '/../../',
            'aliases' => array(),
            'dev_requirement' => false,
        ),
        'paragonie/constant_time_encoding' => array(
            'pretty_version' => 'v2.8.2',
            'version' => '2.8.2.0',
            'reference' => 'e30811f7bc69e4b5b6d5783e712c06c8eabf0226',
            'type' => 'library',
            'install_path' => __DIR__ . '/../paragonie/constant_time_encoding',
            'aliases' => array(),
            'dev_requirement' => false,
        ),
        'paragonie/random_compat' => array(
            'pretty_version' => 'v9.99.100',
            'version' => '9.99.100.0',
            'reference' => '996434e5492cb4c3edcb9168db6fbb1359ef965a',
            'type' => 'library',
            'install_path' => __DIR__ . '/../paragonie/random_compat',
            'aliases' => array(),
            'dev_requirement' => false,
        ),
        'phenx/php-font-lib' => array(
            'pretty_version' => '0.5.6',
            'version' => '0.5.6.0',
            'reference' => 'a1681e9793040740a405ac5b189275059e2a9863',
            'type' => 'library',
            'install_path' => __DIR__ . '/../phenx/php-font-lib',
            'aliases' => array(),
            'dev_requirement' => false,
        ),
        'phenx/php-svg-lib' => array(
            'pretty_version' => '0.5.4',
            'version' => '0.5.4.0',
            'reference' => '46b25da81613a9cf43c83b2a8c2c1bdab27df691',
            'type' => 'library',
            'install_path' => __DIR__ . '/../phenx/php-svg-lib',
            'aliases' => array(),
            'dev_requirement' => false,
        ),
        'php-amqplib/php-amqplib' => array(
            'pretty_version' => 'v3.7.3',
            'version' => '3.7.3.0',
            'reference' => '9f50fe69a9f1a19e2cb25596a354d705de36fe59',
            'type' => 'library',
            'install_path' => __DIR__ . '/../php-amqplib/php-amqplib',
            'aliases' => array(),
            'dev_requirement' => false,
        ),
        'phpseclib/phpseclib' => array(
            'pretty_version' => '3.0.47',
            'version' => '3.0.47.0',
            'reference' => '9d6ca36a6c2dd434765b1071b2644a1c683b385d',
            'type' => 'library',
            'install_path' => __DIR__ . '/../phpseclib/phpseclib',
            'aliases' => array(),
            'dev_requirement' => false,
        ),
        'psr/log' => array(
            'pretty_version' => '1.1.4',
            'version' => '1.1.4.0',
            'reference' => 'd49695b909c3b7628b6289db5479a1c204601f11',
            'type' => 'library',
            'install_path' => __DIR__ . '/../psr/log',
            'aliases' => array(),
            'dev_requirement' => false,
        ),
        'sabberworm/php-css-parser' => array(
            'pretty_version' => 'v8.9.0',
            'version' => '8.9.0.0',
            'reference' => 'd8e916507b88e389e26d4ab03c904a082aa66bb9',
            'type' => 'library',
            'install_path' => __DIR__ . '/../sabberworm/php-css-parser',
            'aliases' => array(),
            'dev_requirement' => false,
        ),
        'seld/cli-prompt' => array(
            'pretty_version' => '1.0.4',
            'version' => '1.0.4.0',
            'reference' => 'b8dfcf02094b8c03b40322c229493bb2884423c5',
            'type' => 'library',
            'install_path' => __DIR__ . '/../seld/cli-prompt',
            'aliases' => array(),
            'dev_requirement' => false,
        ),
        'symfony/polyfill-ctype' => array(
            'pretty_version' => 'v1.33.0',
            'version' => '1.33.0.0',
            'reference' => 'a3cc8b044a6ea513310cbd48ef7333b384945638',
            'type' => 'library',
            'install_path' => __DIR__ . '/../symfony/polyfill-ctype',
            'aliases' => array(),
            'dev_requirement' => false,
        ),
        'symfony/yaml' => array(
            'pretty_version' => 'v4.2.3',
            'version' => '4.2.3.0',
            'reference' => 'd461670ee145092b7e2a56c1da7118f19cadadb0',
            'type' => 'library',
            'install_path' => __DIR__ . '/../symfony/yaml',
            'aliases' => array(),
            'dev_requirement' => false,
        ),
        'videlalvaro/php-amqplib' => array(
            'dev_requirement' => false,
            'replaced' => array(
                0 => 'v3.7.3',
            ),
        ),
    ),
);
<?php

/*
 * This file is part of Composer.
 *
 * (c) Nils Adermann <naderman@naderman.de>
 *     Jordi Boggiano <j.boggiano@seld.be>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

namespace Composer;

use Composer\Autoload\ClassLoader;
use Composer\Semver\VersionParser;

/**
 * This class is copied in every Composer installed project and available to all
 *
 * See also https://getcomposer.org/doc/07-runtime.md#installed-versions
 *
 * To require its presence, you can require `composer-runtime-api ^2.0`
 *
 * @final
 */
class InstalledVersions
{
    /**
     * @var string|null if set (by reflection by Composer), this should be set to the path where this class is being copied to
     * @internal
     */
    private static $selfDir = null;

    /**
     * @var mixed[]|null
     * @psalm-var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}|array{}|null
     */
    private static $installed;

    /**
     * @var bool
     */
    private static $installedIsLocalDir;

    /**
     * @var bool|null
     */
    private static $canGetVendors;

    /**
     * @var array[]
     * @psalm-var array<string, array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}>
     */
    private static $installedByVendor = array();

    /**
     * Returns a list of all package names which are present, either by being installed, replaced or provided
     *
     * @return string[]
     * @psalm-return list<string>
     */
    public static function getInstalledPackages()
    {
        $packages = array();
        foreach (self::getInstalled() as $installed) {
            $packages[] = array_keys($installed['versions']);
        }

        if (1 === \count($packages)) {
            return $packages[0];
        }

        return array_keys(array_flip(\call_user_func_array('array_merge', $packages)));
    }

    /**
     * Returns a list of all package names with a specific type e.g. 'library'
     *
     * @param  string   $type
     * @return string[]
     * @psalm-return list<string>
     */
    public static function getInstalledPackagesByType($type)
    {
        $packagesByType = array();

        foreach (self::getInstalled() as $installed) {
            foreach ($installed['versions'] as $name => $package) {
                if (isset($package['type']) && $package['type'] === $type) {
                    $packagesByType[] = $name;
                }
            }
        }

        return $packagesByType;
    }

    /**
     * Checks whether the given package is installed
     *
     * This also returns true if the package name is provided or replaced by another package
     *
     * @param  string $packageName
     * @param  bool   $includeDevRequirements
     * @return bool
     */
    public static function isInstalled($packageName, $includeDevRequirements = true)
    {
        foreach (self::getInstalled() as $installed) {
            if (isset($installed['versions'][$packageName])) {
                return $includeDevRequirements || !isset($installed['versions'][$packageName]['dev_requirement']) || $installed['versions'][$packageName]['dev_requirement'] === false;
            }
        }

        return false;
    }

    /**
     * Checks whether the given package satisfies a version constraint
     *
     * e.g. If you want to know whether version 2.3+ of package foo/bar is installed, you would call:
     *
     *   Composer\InstalledVersions::satisfies(new VersionParser, 'foo/bar', '^2.3')
     *
     * @param  VersionParser $parser      Install composer/semver to have access to this class and functionality
     * @param  string        $packageName
     * @param  string|null   $constraint  A version constraint to check for, if you pass one you have to make sure composer/semver is required by your package
     * @return bool
     */
    public static function satisfies(VersionParser $parser, $packageName, $constraint)
    {
        $constraint = $parser->parseConstraints((string) $constraint);
        $provided = $parser->parseConstraints(self::getVersionRanges($packageName));

        return $provided->matches($constraint);
    }

    /**
     * Returns a version constraint representing all the range(s) which are installed for a given package
     *
     * It is easier to use this via isInstalled() with the $constraint argument if you need to check
     * whether a given version of a package is installed, and not just whether it exists
     *
     * @param  string $packageName
     * @return string Version constraint usable with composer/semver
     */
    public static function getVersionRanges($packageName)
    {
        foreach (self::getInstalled() as $installed) {
            if (!isset($installed['versions'][$packageName])) {
                continue;
            }

            $ranges = array();
            if (isset($installed['versions'][$packageName]['pretty_version'])) {
                $ranges[] = $installed['versions'][$packageName]['pretty_version'];
            }
            if (array_key_exists('aliases', $installed['versions'][$packageName])) {
                $ranges = array_merge($ranges, $installed['versions'][$packageName]['aliases']);
            }
            if (array_key_exists('replaced', $installed['versions'][$packageName])) {
                $ranges = array_merge($ranges, $installed['versions'][$packageName]['replaced']);
            }
            if (array_key_exists('provided', $installed['versions'][$packageName])) {
                $ranges = array_merge($ranges, $installed['versions'][$packageName]['provided']);
            }

            return implode(' || ', $ranges);
        }

        throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
    }

    /**
     * @param  string      $packageName
     * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as version, use satisfies or getVersionRanges if you need to know if a given version is present
     */
    public static function getVersion($packageName)
    {
        foreach (self::getInstalled() as $installed) {
            if (!isset($installed['versions'][$packageName])) {
                continue;
            }

            if (!isset($installed['versions'][$packageName]['version'])) {
                return null;
            }

            return $installed['versions'][$packageName]['version'];
        }

        throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
    }

    /**
     * @param  string      $packageName
     * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as version, use satisfies or getVersionRanges if you need to know if a given version is present
     */
    public static function getPrettyVersion($packageName)
    {
        foreach (self::getInstalled() as $installed) {
            if (!isset($installed['versions'][$packageName])) {
                continue;
            }

            if (!isset($installed['versions'][$packageName]['pretty_version'])) {
                return null;
            }

            return $installed['versions'][$packageName]['pretty_version'];
        }

        throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
    }

    /**
     * @param  string      $packageName
     * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as reference
     */
    public static function getReference($packageName)
    {
        foreach (self::getInstalled() as $installed) {
            if (!isset($installed['versions'][$packageName])) {
                continue;
            }

            if (!isset($installed['versions'][$packageName]['reference'])) {
                return null;
            }

            return $installed['versions'][$packageName]['reference'];
        }

        throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
    }

    /**
     * @param  string      $packageName
     * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as install path. Packages of type metapackages also have a null install path.
     */
    public static function getInstallPath($packageName)
    {
        foreach (self::getInstalled() as $installed) {
            if (!isset($installed['versions'][$packageName])) {
                continue;
            }

            return isset($installed['versions'][$packageName]['install_path']) ? $installed['versions'][$packageName]['install_path'] : null;
        }

        throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
    }

    /**
     * @return array
     * @psalm-return array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}
     */
    public static function getRootPackage()
    {
        $installed = self::getInstalled();

        return $installed[0]['root'];
    }

    /**
     * Returns the raw installed.php data for custom implementations
     *
     * @deprecated Use getAllRawData() instead which returns all datasets for all autoloaders present in the process. getRawData only returns the first dataset loaded, which may not be what you expect.
     * @return array[]
     * @psalm-return array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}
     */
    public static function getRawData()
    {
        @trigger_error('getRawData only returns the first dataset loaded, which may not be what you expect. Use getAllRawData() instead which returns all datasets for all autoloaders present in the process.', E_USER_DEPRECATED);

        if (null === self::$installed) {
            // only require the installed.php file if this file is loaded from its dumped location,
            // and not from its source location in the composer/composer package, see https://github.com/composer/composer/issues/9937
            if (substr(__DIR__, -8, 1) !== 'C') {
                self::$installed = include __DIR__ . '/installed.php';
            } else {
                self::$installed = array();
            }
        }

        return self::$installed;
    }

    /**
     * Returns the raw data of all installed.php which are currently loaded for custom implementations
     *
     * @return array[]
     * @psalm-return list<array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}>
     */
    public static function getAllRawData()
    {
        return self::getInstalled();
    }

    /**
     * Lets you reload the static array from another file
     *
     * This is only useful for complex integrations in which a project needs to use
     * this class but then also needs to execute another project's autoloader in process,
     * and wants to ensure both projects have access to their version of installed.php.
     *
     * A typical case would be PHPUnit, where it would need to make sure it reads all
     * the data it needs from this class, then call reload() with
     * `require $CWD/vendor/composer/installed.php` (or similar) as input to make sure
     * the project in which it runs can then also use this class safely, without
     * interference between PHPUnit's dependencies and the project's dependencies.
     *
     * @param  array[] $data A vendor/composer/installed.php data set
     * @return void
     *
     * @psalm-param array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>} $data
     */
    public static function reload($data)
    {
        self::$installed = $data;
        self::$installedByVendor = array();

        // when using reload, we disable the duplicate protection to ensure that self::$installed data is
        // always returned, but we cannot know whether it comes from the installed.php in __DIR__ or not,
        // so we have to assume it does not, and that may result in duplicate data being returned when listing
        // all installed packages for example
        self::$installedIsLocalDir = false;
    }

    /**
     * @return string
     */
    private static function getSelfDir()
    {
        if (self::$selfDir === null) {
            self::$selfDir = strtr(__DIR__, '\\', '/');
        }

        return self::$selfDir;
    }

    /**
     * @return array[]
     * @psalm-return list<array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}>
     */
    private static function getInstalled()
    {
        if (null === self::$canGetVendors) {
            self::$canGetVendors = method_exists('Composer\Autoload\ClassLoader', 'getRegisteredLoaders');
        }

        $installed = array();
        $copiedLocalDir = false;

        if (self::$canGetVendors) {
            $selfDir = self::getSelfDir();
            foreach (ClassLoader::getRegisteredLoaders() as $vendorDir => $loader) {
                $vendorDir = strtr($vendorDir, '\\', '/');
                if (isset(self::$installedByVendor[$vendorDir])) {
                    $installed[] = self::$installedByVendor[$vendorDir];
                } elseif (is_file($vendorDir.'/composer/installed.php')) {
                    /** @var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>} $required */
                    $required = require $vendorDir.'/composer/installed.php';
                    self::$installedByVendor[$vendorDir] = $required;
                    $installed[] = $required;
                    if (self::$installed === null && $vendorDir.'/composer' === $selfDir) {
                        self::$installed = $required;
                        self::$installedIsLocalDir = true;
                    }
                }
                if (self::$installedIsLocalDir && $vendorDir.'/composer' === $selfDir) {
                    $copiedLocalDir = true;
                }
            }
        }

        if (null === self::$installed) {
            // only require the installed.php file if this file is loaded from its dumped location,
            // and not from its source location in the composer/composer package, see https://github.com/composer/composer/issues/9937
            if (substr(__DIR__, -8, 1) !== 'C') {
                /** @var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>} $required */
                $required = require __DIR__ . '/installed.php';
                self::$installed = $required;
            } else {
                self::$installed = array();
            }
        }

        if (self::$installed !== array() && !$copiedLocalDir) {
            $installed[] = self::$installed;
        }

        return $installed;
    }
}
<?php

// autoload_namespaces.php @generated by Composer

$vendorDir = dirname(__DIR__);
$baseDir = dirname($vendorDir);

return array(
);
<?php

// autoload_psr4.php @generated by Composer

$vendorDir = dirname(__DIR__);
$baseDir = dirname($vendorDir);

return array(
    'phpseclib3\\' => array($vendorDir . '/phpseclib/phpseclib/phpseclib'),
    'Symfony\\Polyfill\\Ctype\\' => array($vendorDir . '/symfony/polyfill-ctype'),
    'Symfony\\Component\\Yaml\\' => array($vendorDir . '/symfony/yaml'),
    'Svg\\' => array($vendorDir . '/phenx/php-svg-lib/src/Svg'),
    'Seld\\CliPrompt\\' => array($vendorDir . '/seld/cli-prompt/src'),
    'SeAT_Test\\' => array($baseDir . '/tests/src'),
    'SeAT\\' => array($baseDir . '/src'),
    'Sabberworm\\CSS\\' => array($vendorDir . '/sabberworm/php-css-parser/src'),
    'Psr\\Log\\' => array($vendorDir . '/psr/log/Psr/Log'),
    'PhpAmqpLib\\' => array($vendorDir . '/php-amqplib/php-amqplib/PhpAmqpLib'),
    'ParagonIE\\ConstantTime\\' => array($vendorDir . '/paragonie/constant_time_encoding/src'),
    'OrangeHRM\\' => array($vendorDir . '/orangehrm-devops/common/src/OrangeHRM'),
    'Masterminds\\' => array($vendorDir . '/masterminds/html5/src'),
    'League\\CLImate\\' => array($vendorDir . '/league/climate/src'),
    'FontLib\\' => array($vendorDir . '/phenx/php-font-lib/src/FontLib'),
    'Dompdf\\' => array($vendorDir . '/dompdf/dompdf/src'),
);
<?php

// autoload_classmap.php @generated by Composer

$vendorDir = dirname(__DIR__);
$baseDir = dirname($vendorDir);

return array(
    'Composer\\InstalledVersions' => $vendorDir . '/composer/InstalledVersions.php',
    'Dompdf\\Cpdf' => $vendorDir . '/dompdf/dompdf/lib/Cpdf.php',
);
<?php

// autoload_files.php @generated by Composer

$vendorDir = dirname(__DIR__);
$baseDir = dirname($vendorDir);

return array(
    'decc78cc4436b1292c6c0d151b19445c' => $vendorDir . '/phpseclib/phpseclib/phpseclib/bootstrap.php',
    '320cde22f66dd4f5d3fd621d3e88b98f' => $vendorDir . '/symfony/polyfill-ctype/bootstrap.php',
);
<?php

// autoload_static.php @generated by Composer

namespace Composer\Autoload;

class ComposerStaticInit80c140823c36ce4bfbf0065fcf11db2b
{
    public static $files = array (
        'decc78cc4436b1292c6c0d151b19445c' => __DIR__ . '/..' . '/phpseclib/phpseclib/phpseclib/bootstrap.php',
        '320cde22f66dd4f5d3fd621d3e88b98f' => __DIR__ . '/..' . '/symfony/polyfill-ctype/bootstrap.php',
    );

    public static $prefixLengthsPsr4 = array (
        'p' => 
        array (
            'phpseclib3\\' => 11,
        ),
        'S' => 
        array (
            'Symfony\\Polyfill\\Ctype\\' => 23,
            'Symfony\\Component\\Yaml\\' => 23,
            'Svg\\' => 4,
            'Seld\\CliPrompt\\' => 15,
            'SeAT_Test\\' => 10,
            'SeAT\\' => 5,
            'Sabberworm\\CSS\\' => 15,
        ),
        'P' => 
        array (
            'Psr\\Log\\' => 8,
            'PhpAmqpLib\\' => 11,
            'ParagonIE\\ConstantTime\\' => 23,
        ),
        'O' => 
        array (
            'OrangeHRM\\' => 10,
        ),
        'M' => 
        array (
            'Masterminds\\' => 12,
        ),
        'L' => 
        array (
            'League\\CLImate\\' => 15,
        ),
        'F' => 
        array (
            'FontLib\\' => 8,
        ),
        'D' => 
        array (
            'Dompdf\\' => 7,
        ),
    );

    public static $prefixDirsPsr4 = array (
        'phpseclib3\\' => 
        array (
            0 => __DIR__ . '/..' . '/phpseclib/phpseclib/phpseclib',
        ),
        'Symfony\\Polyfill\\Ctype\\' => 
        array (
            0 => __DIR__ . '/..' . '/symfony/polyfill-ctype',
        ),
        'Symfony\\Component\\Yaml\\' => 
        array (
            0 => __DIR__ . '/..' . '/symfony/yaml',
        ),
        'Svg\\' => 
        array (
            0 => __DIR__ . '/..' . '/phenx/php-svg-lib/src/Svg',
        ),
        'Seld\\CliPrompt\\' => 
        array (
            0 => __DIR__ . '/..' . '/seld/cli-prompt/src',
        ),
        'SeAT_Test\\' => 
        array (
            0 => __DIR__ . '/../..' . '/tests/src',
        ),
        'SeAT\\' => 
        array (
            0 => __DIR__ . '/../..' . '/src',
        ),
        'Sabberworm\\CSS\\' => 
        array (
            0 => __DIR__ . '/..' . '/sabberworm/php-css-parser/src',
        ),
        'Psr\\Log\\' => 
        array (
            0 => __DIR__ . '/..' . '/psr/log/Psr/Log',
        ),
        'PhpAmqpLib\\' => 
        array (
            0 => __DIR__ . '/..' . '/php-amqplib/php-amqplib/PhpAmqpLib',
        ),
        'ParagonIE\\ConstantTime\\' => 
        array (
            0 => __DIR__ . '/..' . '/paragonie/constant_time_encoding/src',
        ),
        'OrangeHRM\\' => 
        array (
            0 => __DIR__ . '/..' . '/orangehrm-devops/common/src/OrangeHRM',
        ),
        'Masterminds\\' => 
        array (
            0 => __DIR__ . '/..' . '/masterminds/html5/src',
        ),
        'League\\CLImate\\' => 
        array (
            0 => __DIR__ . '/..' . '/league/climate/src',
        ),
        'FontLib\\' => 
        array (
            0 => __DIR__ . '/..' . '/phenx/php-font-lib/src/FontLib',
        ),
        'Dompdf\\' => 
        array (
            0 => __DIR__ . '/..' . '/dompdf/dompdf/src',
        ),
    );

    public static $classMap = array (
        'Composer\\InstalledVersions' => __DIR__ . '/..' . '/composer/InstalledVersions.php',
        'Dompdf\\Cpdf' => __DIR__ . '/..' . '/dompdf/dompdf/lib/Cpdf.php',
    );

    public static function getInitializer(ClassLoader $loader)
    {
        return \Closure::bind(function () use ($loader) {
            $loader->prefixLengthsPsr4 = ComposerStaticInit80c140823c36ce4bfbf0065fcf11db2b::$prefixLengthsPsr4;
            $loader->prefixDirsPsr4 = ComposerStaticInit80c140823c36ce4bfbf0065fcf11db2b::$prefixDirsPsr4;
            $loader->classMap = ComposerStaticInit80c140823c36ce4bfbf0065fcf11db2b::$classMap;

        }, null, ClassLoader::class);
    }
}
<?php

// platform_check.php @generated by Composer

$issues = array();

if (!(PHP_VERSION_ID >= 70400)) {
    $issues[] = 'Your Composer dependencies require a PHP version ">= 7.4.0". You are running ' . PHP_VERSION . '.';
}

if ($issues) {
    if (!headers_sent()) {
        header('HTTP/1.1 500 Internal Server Error');
    }
    if (!ini_get('display_errors')) {
        if (PHP_SAPI === 'cli' || PHP_SAPI === 'phpdbg') {
            fwrite(STDERR, 'Composer detected issues in your platform:' . PHP_EOL.PHP_EOL . implode(PHP_EOL, $issues) . PHP_EOL.PHP_EOL);
        } elseif (!headers_sent()) {
            echo 'Composer detected issues in your platform:' . PHP_EOL.PHP_EOL . str_replace('You are running '.PHP_VERSION.'.', '', implode(PHP_EOL, $issues)) . PHP_EOL.PHP_EOL;
        }
    }
    throw new \RuntimeException(
        'Composer detected issues in your platform: ' . implode(' ', $issues)
    );
}
<?php

// autoload_real.php @generated by Composer

class ComposerAutoloaderInit80c140823c36ce4bfbf0065fcf11db2b
{
    private static $loader;

    public static function loadClassLoader($class)
    {
        if ('Composer\Autoload\ClassLoader' === $class) {
            require __DIR__ . '/ClassLoader.php';
        }
    }

    /**
     * @return \Composer\Autoload\ClassLoader
     */
    public static function getLoader()
    {
        if (null !== self::$loader) {
            return self::$loader;
        }

        require __DIR__ . '/platform_check.php';

        spl_autoload_register(array('ComposerAutoloaderInit80c140823c36ce4bfbf0065fcf11db2b', 'loadClassLoader'), true, true);
        self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(__DIR__));
        spl_autoload_unregister(array('ComposerAutoloaderInit80c140823c36ce4bfbf0065fcf11db2b', 'loadClassLoader'));

        require __DIR__ . '/autoload_static.php';
        call_user_func(\Composer\Autoload\ComposerStaticInit80c140823c36ce4bfbf0065fcf11db2b::getInitializer($loader));

        $loader->register(true);

        $filesToLoad = \Composer\Autoload\ComposerStaticInit80c140823c36ce4bfbf0065fcf11db2b::$files;
        $requireFile = \Closure::bind(static function ($fileIdentifier, $file) {
            if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
                $GLOBALS['__composer_autoload_files'][$fileIdentifier] = true;

                require $file;
            }
        }, null, null);
        foreach ($filesToLoad as $fileIdentifier => $file) {
            $requireFile($fileIdentifier, $file);
        }

        return $loader;
    }
}
<?php

/*
 * This file is part of Composer.
 *
 * (c) Nils Adermann <naderman@naderman.de>
 *     Jordi Boggiano <j.boggiano@seld.be>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

namespace Composer\Autoload;

/**
 * ClassLoader implements a PSR-0, PSR-4 and classmap class loader.
 *
 *     $loader = new \Composer\Autoload\ClassLoader();
 *
 *     // register classes with namespaces
 *     $loader->add('Symfony\Component', __DIR__.'/component');
 *     $loader->add('Symfony',           __DIR__.'/framework');
 *
 *     // activate the autoloader
 *     $loader->register();
 *
 *     // to enable searching the include path (eg. for PEAR packages)
 *     $loader->setUseIncludePath(true);
 *
 * In this example, if you try to use a class in the Symfony\Component
 * namespace or one of its children (Symfony\Component\Console for instance),
 * the autoloader will first look for the class under the component/
 * directory, and it will then fallback to the framework/ directory if not
 * found before giving up.
 *
 * This class is loosely based on the Symfony UniversalClassLoader.
 *
 * @author Fabien Potencier <fabien@symfony.com>
 * @author Jordi Boggiano <j.boggiano@seld.be>
 * @see    https://www.php-fig.org/psr/psr-0/
 * @see    https://www.php-fig.org/psr/psr-4/
 */
class ClassLoader
{
    /** @var \Closure(string):void */
    private static $includeFile;

    /** @var string|null */
    private $vendorDir;

    // PSR-4
    /**
     * @var array<string, array<string, int>>
     */
    private $prefixLengthsPsr4 = array();
    /**
     * @var array<string, list<string>>
     */
    private $prefixDirsPsr4 = array();
    /**
     * @var list<string>
     */
    private $fallbackDirsPsr4 = array();

    // PSR-0
    /**
     * List of PSR-0 prefixes
     *
     * Structured as array('F (first letter)' => array('Foo\Bar (full prefix)' => array('path', 'path2')))
     *
     * @var array<string, array<string, list<string>>>
     */
    private $prefixesPsr0 = array();
    /**
     * @var list<string>
     */
    private $fallbackDirsPsr0 = array();

    /** @var bool */
    private $useIncludePath = false;

    /**
     * @var array<string, string>
     */
    private $classMap = array();

    /** @var bool */
    private $classMapAuthoritative = false;

    /**
     * @var array<string, bool>
     */
    private $missingClasses = array();

    /** @var string|null */
    private $apcuPrefix;

    /**
     * @var array<string, self>
     */
    private static $registeredLoaders = array();

    /**
     * @param string|null $vendorDir
     */
    public function __construct($vendorDir = null)
    {
        $this->vendorDir = $vendorDir;
        self::initializeIncludeClosure();
    }

    /**
     * @return array<string, list<string>>
     */
    public function getPrefixes()
    {
        if (!empty($this->prefixesPsr0)) {
            return call_user_func_array('array_merge', array_values($this->prefixesPsr0));
        }

        return array();
    }

    /**
     * @return array<string, list<string>>
     */
    public function getPrefixesPsr4()
    {
        return $this->prefixDirsPsr4;
    }

    /**
     * @return list<string>
     */
    public function getFallbackDirs()
    {
        return $this->fallbackDirsPsr0;
    }

    /**
     * @return list<string>
     */
    public function getFallbackDirsPsr4()
    {
        return $this->fallbackDirsPsr4;
    }

    /**
     * @return array<string, string> Array of classname => path
     */
    public function getClassMap()
    {
        return $this->classMap;
    }

    /**
     * @param array<string, string> $classMap Class to filename map
     *
     * @return void
     */
    public function addClassMap(array $classMap)
    {
        if ($this->classMap) {
            $this->classMap = array_merge($this->classMap, $classMap);
        } else {
            $this->classMap = $classMap;
        }
    }

    /**
     * Registers a set of PSR-0 directories for a given prefix, either
     * appending or prepending to the ones previously set for this prefix.
     *
     * @param string              $prefix  The prefix
     * @param list<string>|string $paths   The PSR-0 root directories
     * @param bool                $prepend Whether to prepend the directories
     *
     * @return void
     */
    public function add($prefix, $paths, $prepend = false)
    {
        $paths = (array) $paths;
        if (!$prefix) {
            if ($prepend) {
                $this->fallbackDirsPsr0 = array_merge(
                    $paths,
                    $this->fallbackDirsPsr0
                );
            } else {
                $this->fallbackDirsPsr0 = array_merge(
                    $this->fallbackDirsPsr0,
                    $paths
                );
            }

            return;
        }

        $first = $prefix[0];
        if (!isset($this->prefixesPsr0[$first][$prefix])) {
            $this->prefixesPsr0[$first][$prefix] = $paths;

            return;
        }
        if ($prepend) {
            $this->prefixesPsr0[$first][$prefix] = array_merge(
                $paths,
                $this->prefixesPsr0[$first][$prefix]
            );
        } else {
            $this->prefixesPsr0[$first][$prefix] = array_merge(
                $this->prefixesPsr0[$first][$prefix],
                $paths
            );
        }
    }

    /**
     * Registers a set of PSR-4 directories for a given namespace, either
     * appending or prepending to the ones previously set for this namespace.
     *
     * @param string              $prefix  The prefix/namespace, with trailing '\\'
     * @param list<string>|string $paths   The PSR-4 base directories
     * @param bool                $prepend Whether to prepend the directories
     *
     * @throws \InvalidArgumentException
     *
     * @return void
     */
    public function addPsr4($prefix, $paths, $prepend = false)
    {
        $paths = (array) $paths;
        if (!$prefix) {
            // Register directories for the root namespace.
            if ($prepend) {
                $this->fallbackDirsPsr4 = array_merge(
                    $paths,
                    $this->fallbackDirsPsr4
                );
            } else {
                $this->fallbackDirsPsr4 = array_merge(
                    $this->fallbackDirsPsr4,
                    $paths
                );
            }
        } elseif (!isset($this->prefixDirsPsr4[$prefix])) {
            // Register directories for a new namespace.
            $length = strlen($prefix);
            if ('\\' !== $prefix[$length - 1]) {
                throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
            }
            $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
            $this->prefixDirsPsr4[$prefix] = $paths;
        } elseif ($prepend) {
            // Prepend directories for an already registered namespace.
            $this->prefixDirsPsr4[$prefix] = array_merge(
                $paths,
                $this->prefixDirsPsr4[$prefix]
            );
        } else {
            // Append directories for an already registered namespace.
            $this->prefixDirsPsr4[$prefix] = array_merge(
                $this->prefixDirsPsr4[$prefix],
                $paths
            );
        }
    }

    /**
     * Registers a set of PSR-0 directories for a given prefix,
     * replacing any others previously set for this prefix.
     *
     * @param string              $prefix The prefix
     * @param list<string>|string $paths  The PSR-0 base directories
     *
     * @return void
     */
    public function set($prefix, $paths)
    {
        if (!$prefix) {
            $this->fallbackDirsPsr0 = (array) $paths;
        } else {
            $this->prefixesPsr0[$prefix[0]][$prefix] = (array) $paths;
        }
    }

    /**
     * Registers a set of PSR-4 directories for a given namespace,
     * replacing any others previously set for this namespace.
     *
     * @param string              $prefix The prefix/namespace, with trailing '\\'
     * @param list<string>|string $paths  The PSR-4 base directories
     *
     * @throws \InvalidArgumentException
     *
     * @return void
     */
    public function setPsr4($prefix, $paths)
    {
        if (!$prefix) {
            $this->fallbackDirsPsr4 = (array) $paths;
        } else {
            $length = strlen($prefix);
            if ('\\' !== $prefix[$length - 1]) {
                throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
            }
            $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
            $this->prefixDirsPsr4[$prefix] = (array) $paths;
        }
    }

    /**
     * Turns on searching the include path for class files.
     *
     * @param bool $useIncludePath
     *
     * @return void
     */
    public function setUseIncludePath($useIncludePath)
    {
        $this->useIncludePath = $useIncludePath;
    }

    /**
     * Can be used to check if the autoloader uses the include path to check
     * for classes.
     *
     * @return bool
     */
    public function getUseIncludePath()
    {
        return $this->useIncludePath;
    }

    /**
     * Turns off searching the prefix and fallback directories for classes
     * that have not been registered with the class map.
     *
     * @param bool $classMapAuthoritative
     *
     * @return void
     */
    public function setClassMapAuthoritative($classMapAuthoritative)
    {
        $this->classMapAuthoritative = $classMapAuthoritative;
    }

    /**
     * Should class lookup fail if not found in the current class map?
     *
     * @return bool
     */
    public function isClassMapAuthoritative()
    {
        return $this->classMapAuthoritative;
    }

    /**
     * APCu prefix to use to cache found/not-found classes, if the extension is enabled.
     *
     * @param string|null $apcuPrefix
     *
     * @return void
     */
    public function setApcuPrefix($apcuPrefix)
    {
        $this->apcuPrefix = function_exists('apcu_fetch') && filter_var(ini_get('apc.enabled'), FILTER_VALIDATE_BOOLEAN) ? $apcuPrefix : null;
    }

    /**
     * The APCu prefix in use, or null if APCu caching is not enabled.
     *
     * @return string|null
     */
    public function getApcuPrefix()
    {
        return $this->apcuPrefix;
    }

    /**
     * Registers this instance as an autoloader.
     *
     * @param bool $prepend Whether to prepend the autoloader or not
     *
     * @return void
     */
    public function register($prepend = false)
    {
        spl_autoload_register(array($this, 'loadClass'), true, $prepend);

        if (null === $this->vendorDir) {
            return;
        }

        if ($prepend) {
            self::$registeredLoaders = array($this->vendorDir => $this) + self::$registeredLoaders;
        } else {
            unset(self::$registeredLoaders[$this->vendorDir]);
            self::$registeredLoaders[$this->vendorDir] = $this;
        }
    }

    /**
     * Unregisters this instance as an autoloader.
     *
     * @return void
     */
    public function unregister()
    {
        spl_autoload_unregister(array($this, 'loadClass'));

        if (null !== $this->vendorDir) {
            unset(self::$registeredLoaders[$this->vendorDir]);
        }
    }

    /**
     * Loads the given class or interface.
     *
     * @param  string    $class The name of the class
     * @return true|null True if loaded, null otherwise
     */
    public function loadClass($class)
    {
        if ($file = $this->findFile($class)) {
            $includeFile = self::$includeFile;
            $includeFile($file);

            return true;
        }

        return null;
    }

    /**
     * Finds the path to the file where the class is defined.
     *
     * @param string $class The name of the class
     *
     * @return string|false The path if found, false otherwise
     */
    public function findFile($class)
    {
        // class map lookup
        if (isset($this->classMap[$class])) {
            return $this->classMap[$class];
        }
        if ($this->classMapAuthoritative || isset($this->missingClasses[$class])) {
            return false;
        }
        if (null !== $this->apcuPrefix) {
            $file = apcu_fetch($this->apcuPrefix.$class, $hit);
            if ($hit) {
                return $file;
            }
        }

        $file = $this->findFileWithExtension($class, '.php');

        // Search for Hack files if we are running on HHVM
        if (false === $file && defined('HHVM_VERSION')) {
            $file = $this->findFileWithExtension($class, '.hh');
        }

        if (null !== $this->apcuPrefix) {
            apcu_add($this->apcuPrefix.$class, $file);
        }

        if (false === $file) {
            // Remember that this class does not exist.
            $this->missingClasses[$class] = true;
        }

        return $file;
    }

    /**
     * Returns the currently registered loaders keyed by their corresponding vendor directories.
     *
     * @return array<string, self>
     */
    public static function getRegisteredLoaders()
    {
        return self::$registeredLoaders;
    }

    /**
     * @param  string       $class
     * @param  string       $ext
     * @return string|false
     */
    private function findFileWithExtension($class, $ext)
    {
        // PSR-4 lookup
        $logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext;

        $first = $class[0];
        if (isset($this->prefixLengthsPsr4[$first])) {
            $subPath = $class;
            while (false !== $lastPos = strrpos($subPath, '\\')) {
                $subPath = substr($subPath, 0, $lastPos);
                $search = $subPath . '\\';
                if (isset($this->prefixDirsPsr4[$search])) {
                    $pathEnd = DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $lastPos + 1);
                    foreach ($this->prefixDirsPsr4[$search] as $dir) {
                        if (file_exists($file = $dir . $pathEnd)) {
                            return $file;
                        }
                    }
                }
            }
        }

        // PSR-4 fallback dirs
        foreach ($this->fallbackDirsPsr4 as $dir) {
            if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) {
                return $file;
            }
        }

        // PSR-0 lookup
        if (false !== $pos = strrpos($class, '\\')) {
            // namespaced class name
            $logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1)
                . strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR);
        } else {
            // PEAR-like class name
            $logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext;
        }

        if (isset($this->prefixesPsr0[$first])) {
            foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) {
                if (0 === strpos($class, $prefix)) {
                    foreach ($dirs as $dir) {
                        if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
                            return $file;
                        }
                    }
                }
            }
        }

        // PSR-0 fallback dirs
        foreach ($this->fallbackDirsPsr0 as $dir) {
            if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
                return $file;
            }
        }

        // PSR-0 include paths.
        if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) {
            return $file;
        }

        return false;
    }

    /**
     * @return void
     */
    private static function initializeIncludeClosure()
    {
        if (self::$includeFile !== null) {
            return;
        }

        /**
         * Scope isolated include.
         *
         * Prevents access to $this/self from included files.
         *
         * @param  string $file
         * @return void
         */
        self::$includeFile = \Closure::bind(static function($file) {
            include $file;
        }, null, null);
    }
}

Copyright (c) Nils Adermann, Jordi Boggiano

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is furnished
to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.

                   GNU LESSER GENERAL PUBLIC LICENSE
                       Version 3, 29 June 2007

 Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
 Everyone is permitted to copy and distribute verbatim copies
 of this license document, but changing it is not allowed.


  This version of the GNU Lesser General Public License incorporates
the terms and conditions of version 3 of the GNU General Public
License, supplemented by the additional permissions listed below.

  0. Additional Definitions.

  As used herein, "this License" refers to version 3 of the GNU Lesser
General Public License, and the "GNU GPL" refers to version 3 of the GNU
General Public License.

  "The Library" refers to a covered work governed by this License,
other than an Application or a Combined Work as defined below.

  An "Application" is any work that makes use of an interface provided
by the Library, but which is not otherwise based on the Library.
Defining a subclass of a class defined by the Library is deemed a mode
of using an interface provided by the Library.

  A "Combined Work" is a work produced by combining or linking an
Application with the Library.  The particular version of the Library
with which the Combined Work was made is also called the "Linked
Version".

  The "Minimal Corresponding Source" for a Combined Work means the
Corresponding Source for the Combined Work, excluding any source code
for portions of the Combined Work that, considered in isolation, are
based on the Application, and not on the Linked Version.

  The "Corresponding Application Code" for a Combined Work means the
object code and/or source code for the Application, including any data
and utility programs needed for reproducing the Combined Work from the
Application, but excluding the System Libraries of the Combined Work.

  1. Exception to Section 3 of the GNU GPL.

  You may convey a covered work under sections 3 and 4 of this License
without being bound by section 3 of the GNU GPL.

  2. Conveying Modified Versions.

  If you modify a copy of the Library, and, in your modifications, a
facility refers to a function or data to be supplied by an Application
that uses the facility (other than as an argument passed when the
facility is invoked), then you may convey a copy of the modified
version:

   a) under this License, provided that you make a good faith effort to
   ensure that, in the event an Application does not supply the
   function or data, the facility still operates, and performs
   whatever part of its purpose remains meaningful, or

   b) under the GNU GPL, with none of the additional permissions of
   this License applicable to that copy.

  3. Object Code Incorporating Material from Library Header Files.

  The object code form of an Application may incorporate material from
a header file that is part of the Library.  You may convey such object
code under terms of your choice, provided that, if the incorporated
material is not limited to numerical parameters, data structure
layouts and accessors, or small macros, inline functions and templates
(ten or fewer lines in length), you do both of the following:

   a) Give prominent notice with each copy of the object code that the
   Library is used in it and that the Library and its use are
   covered by this License.

   b) Accompany the object code with a copy of the GNU GPL and this license
   document.

  4. Combined Works.

  You may convey a Combined Work under terms of your choice that,
taken together, effectively do not restrict modification of the
portions of the Library contained in the Combined Work and reverse
engineering for debugging such modifications, if you also do each of
the following:

   a) Give prominent notice with each copy of the Combined Work that
   the Library is used in it and that the Library and its use are
   covered by this License.

   b) Accompany the Combined Work with a copy of the GNU GPL and this license
   document.

   c) For a Combined Work that displays copyright notices during
   execution, include the copyright notice for the Library among
   these notices, as well as a reference directing the user to the
   copies of the GNU GPL and this license document.

   d) Do one of the following:

       0) Convey the Minimal Corresponding Source under the terms of this
       License, and the Corresponding Application Code in a form
       suitable for, and under terms that permit, the user to
       recombine or relink the Application with a modified version of
       the Linked Version to produce a modified Combined Work, in the
       manner specified by section 6 of the GNU GPL for conveying
       Corresponding Source.

       1) Use a suitable shared library mechanism for linking with the
       Library.  A suitable mechanism is one that (a) uses at run time
       a copy of the Library already present on the user's computer
       system, and (b) will operate properly with a modified version
       of the Library that is interface-compatible with the Linked
       Version.

   e) Provide Installation Information, but only if you would otherwise
   be required to provide such information under section 6 of the
   GNU GPL, and only to the extent that such information is
   necessary to install and execute a modified version of the
   Combined Work produced by recombining or relinking the
   Application with a modified version of the Linked Version. (If
   you use option 4d0, the Installation Information must accompany
   the Minimal Corresponding Source and Corresponding Application
   Code. If you use option 4d1, you must provide the Installation
   Information in the manner specified by section 6 of the GNU GPL
   for conveying Corresponding Source.)

  5. Combined Libraries.

  You may place library facilities that are a work based on the
Library side by side in a single library together with other library
facilities that are not Applications and are not covered by this
License, and convey such a combined library under terms of your
choice, if you do both of the following:

   a) Accompany the combined library with a copy of the same work based
   on the Library, uncombined with any other library facilities,
   conveyed under the terms of this License.

   b) Give prominent notice with the combined library that part of it
   is a work based on the Library, and explaining where to find the
   accompanying uncombined form of the same work.

  6. Revised Versions of the GNU Lesser General Public License.

  The Free Software Foundation may publish revised and/or new versions
of the GNU Lesser General Public License from time to time. Such new
versions will be similar in spirit to the present version, but may
differ in detail to address new problems or concerns.

  Each version is given a distinguishing version number. If the
Library as you received it specifies that a certain numbered version
of the GNU Lesser General Public License "or any later version"
applies to it, you have the option of following the terms and
conditions either of that published version or of any later version
published by the Free Software Foundation. If the Library as you
received it does not specify a version number of the GNU Lesser
General Public License, you may choose any version of the GNU Lesser
General Public License ever published by the Free Software Foundation.

  If the Library as you received it specifies that a proxy can decide
whether future versions of the GNU Lesser General Public License shall
apply, that proxy's public statement of acceptance of any version is
permanent authorization for you to choose that version for the
Library.
# SVG file parsing / rendering library

[![Build Status](https://github.com/dompdf/php-svg-lib/actions/workflows/test.yml/badge.svg)](https://github.com/dompdf/php-svg-lib/actions/workflows/test.yml)

[![Latest Stable Version](https://poser.pugx.org/phenx/php-svg-lib/v/stable)](https://packagist.org/packages/phenx/php-svg-lib) 
[![Total Downloads](https://poser.pugx.org/phenx/php-svg-lib/downloads)](https://packagist.org/packages/phenx/php-svg-lib) 
[![Latest Unstable Version](https://poser.pugx.org/phenx/php-svg-lib/v/unstable)](https://packagist.org/packages/phenx/php-svg-lib) 
[![License](https://poser.pugx.org/phenx/php-svg-lib/license)](https://packagist.org/packages/phenx/php-svg-lib)

The main purpose of this lib is to rasterize SVG to a surface which can be an image or a PDF for example, through a `\Svg\Surface` PHP interface.

This project was initialized by the need to render SVG documents inside PDF files for the [DomPdf](https://github.com/dompdf/dompdf) project.
{
  "name": "phenx/php-svg-lib",
  "type": "library",
  "description": "A library to read, parse and export to PDF SVG files.",
  "homepage": "https://github.com/PhenX/php-svg-lib",
  "license": "LGPL-3.0-or-later",
  "authors": [
    {
      "name": "Fabien Ménager",
      "email": "fabien.menager@gmail.com"
    }
  ],
  "autoload": {
    "psr-4": {
      "Svg\\": "src/Svg"
    }
  },
  "autoload-dev": {
    "psr-4": {
      "Svg\\Tests\\": "tests/Svg"
    }
  },
  "require": {
    "php": "^7.1 || ^8.0",
    "ext-mbstring": "*",
    "sabberworm/php-css-parser": "^8.4"
  },
  "require-dev": {
    "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5"
  }
}
<?php

namespace Svg;

class CssLength
{
    /**
     * Array of valid css length units.
     * Should be pre-sorted by unit text length so no earlier length can be
     * contained within a latter (eg. 'in' within 'vmin').
     *
     * @var string[]
     */
    protected static $units = [
        'vmax',
        'vmin',
        'rem',
        'px',
        'pt',
        'cm',
        'mm',
        'in',
        'pc',
        'em',
        'ex',
        'ch',
        'vw',
        'vh',
        '%',
        'q',
    ];

    /**
     * A list of units that are inch-relative, and their unit division within an inch.
     *
     * @var array<string, float>
     */
    protected static $inchDivisions = [
        'in' => 1,
        'cm' => 2.54,
        'mm' => 25.4,
        'q' => 101.6,
        'pc' => 6,
        'pt' => 72,
    ];

    /**
     * The CSS length unit indicator.
     * Will be lower-case and one of the units listed in the '$units' array or empty.
     *
     * @var string
     */
    protected $unit = '';

    /**
     * The numeric value of the given length.
     *
     * @var float
     */
    protected $value = 0;

    /**
     * The original unparsed length provided.
     *
     * @var string
     */
    protected $unparsed;

    public function __construct(string $length)
    {
        $this->unparsed = $length;
        $this->parseLengthComponents($length);
    }

    /**
     * Parse out the unit and value components from the given string length.
     */
    protected function parseLengthComponents(string $length): void
    {
        $length = strtolower($length);

        foreach (self::$units as $unit) {
            $pos = strpos($length, $unit);
            if ($pos) {
                $this->value = floatval(substr($length, 0, $pos));
                $this->unit = $unit;
                return;
            }
        }

        $this->unit = '';
        $this->value = floatval($length);
    }

    /**
     * Get the unit type of this css length.
     * Units are standardised to be lower-cased.
     *
     * @return string
     */
    public function getUnit(): string
    {
        return $this->unit;
    }

    /**
     * Get this CSS length in the equivalent pixel count size.
     *
     * @param float $referenceSize
     * @param float $dpi
     *
     * @return float
     */
    public function toPixels(float $referenceSize = 11.0, float $dpi = 96.0): float
    {
        // Standard relative units
        if (in_array($this->unit, ['em', 'rem', 'ex', 'ch'])) {
            return $this->value * $referenceSize;
        }

        // Percentage relative units
        if (in_array($this->unit, ['%', 'vw', 'vh', 'vmin', 'vmax'])) {
            return $this->value * ($referenceSize / 100);
        }

        // Inch relative units
        if (in_array($this->unit, array_keys(static::$inchDivisions))) {
            $inchValue = $this->value * $dpi;
            $division = static::$inchDivisions[$this->unit];
            return $inchValue / $division;
        }

        return $this->value;
    }
}<?php
/**
 * @package php-svg-lib
 * @link    http://github.com/PhenX/php-svg-lib
 * @author  Fabien Ménager <fabien.menager@gmail.com>
 * @license GNU LGPLv3+ http://www.gnu.org/copyleft/lesser.html
 */

namespace Svg;

class DefaultStyle extends Style
{
    public $color = [0, 0, 0, 1];
    public $opacity = 1.0;
    public $display = 'inline';

    public $fill = [0, 0, 0, 1];
    public $fillOpacity = 1.0;
    public $fillRule = 'nonzero';

    public $stroke = 'none';
    public $strokeOpacity = 1.0;
    public $strokeLinecap = 'butt';
    public $strokeLinejoin = 'miter';
    public $strokeMiterlimit = 4;
    public $strokeWidth = 1.0;
    public $strokeDasharray = 0;
    public $strokeDashoffset = 0;
}
<?php
/**
 * @package php-svg-lib
 * @link    http://github.com/PhenX/php-svg-lib
 * @author  Fabien Ménager <fabien.menager@gmail.com>
 * @license GNU LGPLv3+ http://www.gnu.org/copyleft/lesser.html
 */

namespace Svg;

use Svg\Surface\SurfaceInterface;
use Svg\Tag\AbstractTag;
use Svg\Tag\Anchor;
use Svg\Tag\Circle;
use Svg\Tag\Ellipse;
use Svg\Tag\Group;
use Svg\Tag\ClipPath;
use Svg\Tag\Image;
use Svg\Tag\Line;
use Svg\Tag\LinearGradient;
use Svg\Tag\Path;
use Svg\Tag\Polygon;
use Svg\Tag\Polyline;
use Svg\Tag\Rect;
use Svg\Tag\Stop;
use Svg\Tag\Symbol;
use Svg\Tag\Text;
use Svg\Tag\StyleTag;
use Svg\Tag\UseTag;

class Document extends AbstractTag
{
    protected $filename;
    protected $_defs_depth = 0;
    public $inDefs = false;

    protected $x;
    protected $y;
    protected $width;
    protected $height;

    protected $subPathInit;
    protected $pathBBox;
    protected $viewBox;

    /** @var SurfaceInterface */
    protected $surface;

    /** @var AbstractTag[] */
    protected $stack = array();

    /** @var AbstractTag[] */
    protected $defs = array();

    /** @var \Sabberworm\CSS\CSSList\Document[] */
    protected $styleSheets = array();

    public $allowExternalReferences = true;

    public function loadFile($filename)
    {
        $this->filename = $filename;
    }

    protected function initParser() {
        $parser = xml_parser_create("utf-8");
        xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, false);
        xml_set_element_handler(
            $parser,
            array($this, "_tagStart"),
            array($this, "_tagEnd")
        );
        xml_set_character_data_handler(
            $parser,
            array($this, "_charData")
        );

        return $parser;
    }

    public function __construct() {

    }

    /**
     * Increase the nesting level for defs-like elements
     *
     * @return int
     */
    public function enterDefs () {
        $this->_defs_depth++;
        $this->inDefs = true;
        return $this->_defs_depth;
    }

    /**
     * Decrease the nesting level for defs-like elements
     *
     * @return int
     */
    public function exitDefs () {
        $this->_defs_depth--;
        if ($this->_defs_depth < 0) {
            $this->_defs_depth = 0;
        }
        $this->inDefs = ($this->_defs_depth > 0 ? true : false);
        return $this->_defs_depth;
    }

    /**
     * @return SurfaceInterface
     */
    public function getSurface()
    {
        return $this->surface;
    }

    public function getStack()
    {
        return $this->stack;
    }

    public function getWidth()
    {
        return $this->width;
    }

    public function getHeight()
    {
        return $this->height;
    }

    public function getDiagonal()
    {
        return sqrt(($this->width)**2 + ($this->height)**2) / sqrt(2);
    }

    public function getDimensions() {
        $rootAttributes = null;

        $parser = xml_parser_create("utf-8");
        xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, false);
        xml_set_element_handler(
            $parser,
            function ($parser, $name, $attributes) use (&$rootAttributes) {
                if ($name === "svg" && $rootAttributes === null) {
                    $attributes = array_change_key_case($attributes, CASE_LOWER);

                    $rootAttributes = $attributes;
                }
            },
            function ($parser, $name) {}
        );

        $fp = fopen($this->filename, "r");
        while ($line = fread($fp, 8192)) {
            xml_parse($parser, $line, false);

            if ($rootAttributes !== null) {
                break;
            }
        }
        xml_parse($parser, "", true);

        xml_parser_free($parser);

        return $this->handleSizeAttributes($rootAttributes);
    }

    public function handleSizeAttributes($attributes){
        if ($this->width === null) {
            if (isset($attributes["width"])) {
                $width = $this->convertSize($attributes["width"], 400);
                $this->width  = $width;
            }

            if (isset($attributes["height"])) {
                $height = $this->convertSize($attributes["height"], 300);
                $this->height = $height;
            }

            if (isset($attributes['viewbox'])) {
                $viewBox = preg_split('/[\s,]+/is', trim($attributes['viewbox']));
                if (count($viewBox) == 4) {
                    $this->x = $viewBox[0];
                    $this->y = $viewBox[1];

                    if (!$this->width) {
                        $this->width = $viewBox[2];
                    }
                    if (!$this->height) {
                        $this->height = $viewBox[3];
                    }
                }
            }
        }

        return array(
            0        => $this->width,
            1        => $this->height,

            "width"  => $this->width,
            "height" => $this->height,
        );
    }

    public function getDocument(){
        return $this;
    }

    /**
     * Append a style sheet
     *
     * @param \Sabberworm\CSS\CSSList\Document $stylesheet
     */
    public function appendStyleSheet($stylesheet) {
        $this->styleSheets[] = $stylesheet;
    }

    /**
     * Get the document style sheets
     *
     * @return \Sabberworm\CSS\CSSList\Document[]
     */
    public function getStyleSheets() {
        return $this->styleSheets;
    }

    protected function before($attributes)
    {
        $surface = $this->getSurface();

        $style = new DefaultStyle($this);
        $style->inherit($this);
        $style->fromAttributes($attributes);

        $this->setStyle($style);

        $surface->setStyle($style);
    }

    public function render(SurfaceInterface $surface)
    {
        $this->_defs_depth = 0;
        $this->inDefs = false;
        $this->surface = $surface;

        $parser = $this->initParser();

        if ($this->x || $this->y) {
            $surface->translate(-$this->x, -$this->y);
        }

        $fp = fopen($this->filename, "r");
        while ($line = fread($fp, 8192)) {
            xml_parse($parser, $line, false);
        }

        xml_parse($parser, "", true);

        xml_parser_free($parser);
    }

    protected function svgOffset($attributes)
    {
        $this->attributes = $attributes;

        $this->handleSizeAttributes($attributes);
    }

    public function getDef($id) {
        $id = ltrim($id, "#");

        return isset($this->defs[$id]) ? $this->defs[$id] : null;
    }

    private function _tagStart($parser, $name, $attributes)
    {
        $this->x = 0;
        $this->y = 0;

        $tag = null;

        $attributes = array_change_key_case($attributes, CASE_LOWER);

        switch (strtolower($name)) {
            case 'defs':
                $this->enterDefs();
                return;

            case 'svg':
                if (count($this->attributes)) {
                    $tag = new Group($this, $name);
                }
                else {
                    $tag = $this;
                    $this->svgOffset($attributes);
                }
                break;

            case 'path':
                $tag = new Path($this, $name);
                break;

            case 'rect':
                $tag = new Rect($this, $name);
                break;

            case 'circle':
                $tag = new Circle($this, $name);
                break;

            case 'ellipse':
                $tag = new Ellipse($this, $name);
                break;

            case 'image':
                $tag = new Image($this, $name);
                break;

            case 'line':
                $tag = new Line($this, $name);
                break;

            case 'polyline':
                $tag = new Polyline($this, $name);
                break;

            case 'polygon':
                $tag = new Polygon($this, $name);
                break;

            case 'lineargradient':
                $tag = new LinearGradient($this, $name);
                break;

            case 'radialgradient':
                $tag = new LinearGradient($this, $name);
                break;

            case 'stop':
                $tag = new Stop($this, $name);
                break;

            case 'style':
                $tag = new StyleTag($this, $name);
                break;

            case 'a':
                $tag = new Anchor($this, $name);
                break;

            case 'g':
                $tag = new Group($this, $name);
                break;

            case 'symbol':
                $this->enterDefs();
                $tag = new Symbol($this, $name);
                break;
    
            case 'clippath':
                $tag = new ClipPath($this, $name);
                break;

            case 'use':
                $tag = new UseTag($this, $name);
                break;

            case 'text':
                $tag = new Text($this, $name);
                break;

            case 'desc':
                return;
        }

        if ($tag) {
            if (isset($attributes["id"])) {
                $this->defs[$attributes["id"]] = $tag;
            }
            else {
                /** @var AbstractTag $top */
                $top = end($this->stack);
                if ($top && $top != $tag) {
                    $top->children[] = $tag;
                }
            }

            $this->stack[] = $tag;

            $tag->handle($attributes);
        }
    }

    function _charData($parser, $data)
    {
        $stack_top = end($this->stack);

        if ($stack_top instanceof Text || $stack_top instanceof StyleTag) {
            $stack_top->appendText($data);
        }
    }

    function _tagEnd($parser, $name)
    {
        /** @var AbstractTag $tag */
        $tag = null;
        switch (strtolower($name)) {
            case 'defs':
                $this->exitDefs();
                return;

            case 'symbol':
                $this->exitDefs();
                $tag = array_pop($this->stack);
                break;
    
            case 'svg':
            case 'path':
            case 'rect':
            case 'circle':
            case 'ellipse':
            case 'image':
            case 'line':
            case 'polyline':
            case 'polygon':
            case 'radialgradient':
            case 'lineargradient':
            case 'stop':
            case 'style':
            case 'text':
            case 'g':
            case 'clippath':
            case 'use':
            case 'a':
                $tag = array_pop($this->stack);
                break;
        }

        if ((!$this->inDefs && $tag) || $tag instanceof StyleTag) {
            $tag->handleEnd();
        }
    }
} 
<?php
/**
 * @package php-svg-lib
 * @link    http://github.com/PhenX/php-svg-lib
 * @author  Fabien Ménager <fabien.menager@gmail.com>
 * @license GNU LGPLv3+ http://www.gnu.org/copyleft/lesser.html
 */

namespace Svg\Gradient;

class Stop
{
    public $offset;
    public $color;
    public $opacity = 1.0;
}
<?php
/**
 * @package php-svg-lib
 * @link    http://github.com/PhenX/php-svg-lib
 * @author  Fabien Ménager <fabien.menager@gmail.com>
 * @license GNU LGPLv3+ http://www.gnu.org/copyleft/lesser.html
 */

namespace Svg;

use Svg\Tag\AbstractTag;

class Style
{
    const TYPE_COLOR = 1;
    const TYPE_LENGTH = 2;
    const TYPE_NAME = 3;
    const TYPE_ANGLE = 4;
    const TYPE_NUMBER = 5;

    private $_document;
    private $_parentStyle;

    public $color;
    public $opacity;
    public $display;

    public $fill;
    public $fillOpacity;
    public $fillRule;

    public $stroke;
    public $strokeOpacity;
    public $strokeLinecap;
    public $strokeLinejoin;
    public $strokeMiterlimit;
    public $strokeWidth;
    public $strokeDasharray;
    public $strokeDashoffset;

    public $fontFamily = 'serif';
    public $fontSize = 12;
    public $fontWeight = 'normal';
    public $fontStyle = 'normal';
    public $textAnchor = 'start';

    public function __construct($document = null) {
        if ($document !== null) {
            $this->_document = $document;
        }
    }

    protected function getStyleMap()
    {
        return array(
            'color'             => array('color', self::TYPE_COLOR),
            'opacity'           => array('opacity', self::TYPE_NUMBER),
            'display'           => array('display', self::TYPE_NAME),

            'fill'              => array('fill', self::TYPE_COLOR),
            'fill-opacity'      => array('fillOpacity', self::TYPE_NUMBER),
            'fill-rule'         => array('fillRule', self::TYPE_NAME),

            'stroke'            => array('stroke', self::TYPE_COLOR),
            'stroke-dasharray'  => array('strokeDasharray', self::TYPE_NAME),
            'stroke-dashoffset' => array('strokeDashoffset', self::TYPE_NUMBER),
            'stroke-linecap'    => array('strokeLinecap', self::TYPE_NAME),
            'stroke-linejoin'   => array('strokeLinejoin', self::TYPE_NAME),
            'stroke-miterlimit' => array('strokeMiterlimit', self::TYPE_NUMBER),
            'stroke-opacity'    => array('strokeOpacity', self::TYPE_NUMBER),
            'stroke-width'      => array('strokeWidth', self::TYPE_NUMBER),

            'font-family'       => array('fontFamily', self::TYPE_NAME),
            'font-size'         => array('fontSize', self::TYPE_NUMBER),
            'font-weight'       => array('fontWeight', self::TYPE_NAME),
            'font-style'        => array('fontStyle', self::TYPE_NAME),
            'text-anchor'       => array('textAnchor', self::TYPE_NAME),
        );
    }

    /**
     * @param $attributes
     *
     * @return Style
     */
    public function fromAttributes($attributes)
    {
        $this->fillStyles($attributes);

        if (isset($attributes["style"])) {
            $styles = self::parseCssStyle($attributes["style"]);
            $this->fillStyles($styles);
        }
    }

    public function inherit(AbstractTag $tag) {
        $group = $tag->getParentGroup();
        if ($group) {
            $parent_style = $group->getStyle();
            $this->_parentStyle = $parent_style;
            foreach ($parent_style as $_key => $_value) {
                if ($_value !== null) {
                    $this->$_key = $_value;
                }
            }
        }
    }

    public function fromStyleSheets(AbstractTag $tag, $attributes) {
        $class = isset($attributes["class"]) ? preg_split('/\s+/', trim($attributes["class"])) : null;

        $stylesheets = $tag->getDocument()->getStyleSheets();

        $styles = array();

        foreach ($stylesheets as $_sc) {

            /** @var \Sabberworm\CSS\RuleSet\DeclarationBlock $_decl */
            foreach ($_sc->getAllDeclarationBlocks() as $_decl) {

                /** @var \Sabberworm\CSS\Property\Selector $_selector */
                foreach ($_decl->getSelectors() as $_selector) {
                    $_selector = $_selector->getSelector();

                    // Match class name
                    if ($class !== null) {
                        foreach ($class as $_class) {
                            if ($_selector === ".$_class") {
                                /** @var \Sabberworm\CSS\Rule\Rule $_rule */
                                foreach ($_decl->getRules() as $_rule) {
                                    $styles[$_rule->getRule()] = $_rule->getValue() . "";
                                }

                                break 2;
                            }
                        }
                    }

                    // Match tag name
                    if ($_selector === $tag->tagName) {
                        /** @var \Sabberworm\CSS\Rule\Rule $_rule */
                        foreach ($_decl->getRules() as $_rule) {
                            $styles[$_rule->getRule()] = $_rule->getValue() . "";
                        }

                        break;
                    }
                }
            }
        }

        $this->fillStyles($styles);
    }

    protected function fillStyles($styles)
    {
        $style_map = $this->getStyleMap();
        foreach ($style_map as $from => $spec) {
            if (isset($styles[$from])) {
                list($to, $type) = $spec;
                $value = null;
                switch ($type) {
                    case self::TYPE_COLOR:
                        $value = self::parseColor($styles[$from]);
                        if ($value === "currentcolor") {
                            if ($type === "color") {
                                $value = $this->_parentStyle->color;
                            } else {
                                $value = $this->color;
                            }
                        }
                        if (is_array($value) && $value[3] !== 1.0 && array_key_exists("{$from}-opacity", $style_map) === true) {
                            $styles["{$from}-opacity"] = $value[3];
                        }
                        break;

                    case self::TYPE_NUMBER:
                        $value = ($styles[$from] === null) ? null : (float)$styles[$from];
                        break;

                    default:
                        $value = $styles[$from];
                }

                if ($from === "font-family") {
                    $scheme = \strtolower(parse_url($value, PHP_URL_SCHEME) ?: "");
                    if (
                        $scheme === "phar" || \strtolower(\substr($value, 0, 7)) === "phar://"
                        || ($this->_document !== null && $this->_document->allowExternalReferences === false && $scheme !== "data")
                    ) {
                        continue;
                    }
                }

                if ($value !== null) {
                    $this->$to = $value;
                }
            }
        }
    }

    static function parseColor($color)
    {
        $color = strtolower(trim($color));

        $parts = preg_split('/[^,]\s+/', $color, 2);

        if (count($parts) == 2) {
            $color = $parts[1];
        } else {
            $color = $parts[0];
        }

        if ($color === "none") {
            return "none";
        }

        if ($color === "currentcolor") {
            return "currentcolor";
        }

        if ($color === "transparent") {
            return [0.0, 0.0, 0.0, 0.0];
        }

        // SVG color name
        if (isset(self::$colorNames[$color])) {
            return self::parseHexColor(self::$colorNames[$color]);
        }

        // Hex color
        if ($color[0] === "#") {
            return self::parseHexColor($color);
        }

        // RGB color
        if (strpos($color, "rgb") !== false) {
            return self::getQuad($color);
        }

        // HSL color
        if (strpos($color, "hsl") !== false) {
            $quad = self::getQuad($color, true);

            if ($quad == null) {
                return null;
            }

            list($h, $s, $l, $a) = $quad;

            $r = $l;
            $g = $l;
            $b = $l;
            $v = ($l <= 0.5) ? ($l * (1.0 + $s)) : ($l + $s - $l * $s);
            if ($v > 0) {
                $m = $l + $l - $v;
                $sv = ($v - $m) / $v;
                $h *= 6.0;
                $sextant = floor($h);
                $fract = $h - $sextant;
                $vsf = $v * $sv * $fract;
                $mid1 = $m + $vsf;
                $mid2 = $v - $vsf;

                switch ($sextant) {
                    case 0:
                        $r = $v;
                        $g = $mid1;
                        $b = $m;
                        break;
                    case 1:
                        $r = $mid2;
                        $g = $v;
                        $b = $m;
                        break;
                    case 2:
                        $r = $m;
                        $g = $v;
                        $b = $mid1;
                        break;
                    case 3:
                        $r = $m;
                        $g = $mid2;
                        $b = $v;
                        break;
                    case 4:
                        $r = $mid1;
                        $g = $m;
                        $b = $v;
                        break;
                    case 5:
                        $r = $v;
                        $g = $m;
                        $b = $mid2;
                        break;
                }
            }
            $a = $a * 255;

            return array(
                $r * 255.0,
                $g * 255.0,
                $b * 255.0,
                $a
            );
        }

        // Gradient
        if (strpos($color, "url(#") !== false) {
            $i = strpos($color, "(");
            $j = strpos($color, ")");

            // Bad url format
            if ($i === false || $j === false) {
                return null;
            }

            //FIXME: gradients not supported?
            return null; // trim(substr($color, $i + 1, $j - $i - 1));
        }

        return null;
    }

    static function getQuad($color, $percent = false) {
        $i = strpos($color, "(");
        $j = strpos($color, ")");

        // Bad color value
        if ($i === false || $j === false) {
            return null;
        }

        $quad = preg_split("/\\s*[,\\/]\\s*/", trim(substr($color, $i + 1, $j - $i - 1)));
        if (!isset($quad[3])) {
            $quad[3] = "1";
        }

        if (count($quad) != 3 && count($quad) != 4) {
            return null;
        }

        foreach (array_keys($quad) as $c) {
            $quad[$c] = trim($quad[$c]);

            if ($percent) {
                if ($quad[$c][strlen($quad[$c]) - 1] === "%") {
                    $quad[$c] = floatval($quad[$c]) / 100;
                } else {
                    $quad[$c] = floatval($quad[$c]) / 255;
                }
            } else {
                if ($quad[$c][strlen($quad[$c]) - 1] === "%") {
                    $quad[$c] = floatval($quad[$c]) * 2.55;
                } else {
                    $quad[$c] = floatval($quad[$c]);
                }
            }
        }

        return $quad;
    }

    static function parseHexColor($hex)
    {
        $c = array(0.0, 0.0, 0.0, 1.0);

        // #FFFFFF
        if (isset($hex[6])) {
            $c[0] = hexdec(substr($hex, 1, 2));
            $c[1] = hexdec(substr($hex, 3, 2));
            $c[2] = hexdec(substr($hex, 5, 2));

            if (isset($hex[7])) {
                $alpha = substr($hex, 7, 2);
                if (ctype_xdigit($alpha)) {
                    $c[3] = round(hexdec($alpha)/255, 2);
                }
            }
        } else {
            $c[0] = hexdec($hex[1] . $hex[1]);
            $c[1] = hexdec($hex[2] . $hex[2]);
            $c[2] = hexdec($hex[3] . $hex[3]);

            if (isset($hex[4])) {
                if (ctype_xdigit($hex[4])) {
                    $c[3] = round(hexdec($hex[4] . $hex[4])/255, 2);
                }
            }
        }

        return $c;
    }

    /**
     * Simple CSS parser
     *
     * @param $style
     *
     * @return array
     */
    static function parseCssStyle($style)
    {
        $matches = array();
        preg_match_all("/([a-z-]+)\\s*:\\s*([^;$]+)/si", $style, $matches, PREG_SET_ORDER);

        $styles = array();
        foreach ($matches as $match) {
            $styles[$match[1]] = $match[2];
        }

        return $styles;
    }

    static $colorNames = array(
        'antiquewhite'         => '#FAEBD7',
        'aqua'                 => '#00FFFF',
        'aquamarine'           => '#7FFFD4',
        'beige'                => '#F5F5DC',
        'black'                => '#000000',
        'blue'                 => '#0000FF',
        'brown'                => '#A52A2A',
        'cadetblue'            => '#5F9EA0',
        'chocolate'            => '#D2691E',
        'cornflowerblue'       => '#6495ED',
        'crimson'              => '#DC143C',
        'darkblue'             => '#00008B',
        'darkgoldenrod'        => '#B8860B',
        'darkgreen'            => '#006400',
        'darkmagenta'          => '#8B008B',
        'darkorange'           => '#FF8C00',
        'darkred'              => '#8B0000',
        'darkseagreen'         => '#8FBC8F',
        'darkslategray'        => '#2F4F4F',
        'darkviolet'           => '#9400D3',
        'deepskyblue'          => '#00BFFF',
        'dodgerblue'           => '#1E90FF',
        'firebrick'            => '#B22222',
        'forestgreen'          => '#228B22',
        'fuchsia'              => '#FF00FF',
        'gainsboro'            => '#DCDCDC',
        'gold'                 => '#FFD700',
        'gray'                 => '#808080',
        'green'                => '#008000',
        'greenyellow'          => '#ADFF2F',
        'hotpink'              => '#FF69B4',
        'indigo'               => '#4B0082',
        'khaki'                => '#F0E68C',
        'lavenderblush'        => '#FFF0F5',
        'lemonchiffon'         => '#FFFACD',
        'lightcoral'           => '#F08080',
        'lightgoldenrodyellow' => '#FAFAD2',
        'lightgreen'           => '#90EE90',
        'lightsalmon'          => '#FFA07A',
        'lightskyblue'         => '#87CEFA',
        'lightslategray'       => '#778899',
        'lightyellow'          => '#FFFFE0',
        'lime'                 => '#00FF00',
        'limegreen'            => '#32CD32',
        'magenta'              => '#FF00FF',
        'maroon'               => '#800000',
        'mediumaquamarine'     => '#66CDAA',
        'mediumorchid'         => '#BA55D3',
        'mediumseagreen'       => '#3CB371',
        'mediumspringgreen'    => '#00FA9A',
        'mediumvioletred'      => '#C71585',
        'midnightblue'         => '#191970',
        'mintcream'            => '#F5FFFA',
        'moccasin'             => '#FFE4B5',
        'navy'                 => '#000080',
        'olive'                => '#808000',
        'orange'               => '#FFA500',
        'orchid'               => '#DA70D6',
        'palegreen'            => '#98FB98',
        'palevioletred'        => '#D87093',
        'peachpuff'            => '#FFDAB9',
        'pink'                 => '#FFC0CB',
        'powderblue'           => '#B0E0E6',
        'purple'               => '#800080',
        'red'                  => '#FF0000',
        'royalblue'            => '#4169E1',
        'salmon'               => '#FA8072',
        'seagreen'             => '#2E8B57',
        'sienna'               => '#A0522D',
        'silver'               => '#C0C0C0',
        'skyblue'              => '#87CEEB',
        'slategray'            => '#708090',
        'springgreen'          => '#00FF7F',
        'steelblue'            => '#4682B4',
        'tan'                  => '#D2B48C',
        'teal'                 => '#008080',
        'thistle'              => '#D8BFD8',
        'turquoise'            => '#40E0D0',
        'violetred'            => '#D02090',
        'white'                => '#FFFFFF',
        'yellow'               => '#FFFF00',
        'aliceblue'            => '#f0f8ff',
        'azure'                => '#f0ffff',
        'bisque'               => '#ffe4c4',
        'blanchedalmond'       => '#ffebcd',
        'blueviolet'           => '#8a2be2',
        'burlywood'            => '#deb887',
        'chartreuse'           => '#7fff00',
        'coral'                => '#ff7f50',
        'cornsilk'             => '#fff8dc',
        'cyan'                 => '#00ffff',
        'darkcyan'             => '#008b8b',
        'darkgray'             => '#a9a9a9',
        'darkgrey'             => '#a9a9a9',
        'darkkhaki'            => '#bdb76b',
        'darkolivegreen'       => '#556b2f',
        'darkorchid'           => '#9932cc',
        'darksalmon'           => '#e9967a',
        'darkslateblue'        => '#483d8b',
        'darkslategrey'        => '#2f4f4f',
        'darkturquoise'        => '#00ced1',
        'deeppink'             => '#ff1493',
        'dimgray'              => '#696969',
        'dimgrey'              => '#696969',
        'floralwhite'          => '#fffaf0',
        'ghostwhite'           => '#f8f8ff',
        'goldenrod'            => '#daa520',
        'grey'                 => '#808080',
        'honeydew'             => '#f0fff0',
        'indianred'            => '#cd5c5c',
        'ivory'                => '#fffff0',
        'lavender'             => '#e6e6fa',
        'lawngreen'            => '#7cfc00',
        'lightblue'            => '#add8e6',
        'lightcyan'            => '#e0ffff',
        'lightgray'            => '#d3d3d3',
        'lightgrey'            => '#d3d3d3',
        'lightpink'            => '#ffb6c1',
        'lightseagreen'        => '#20b2aa',
        'lightslategrey'       => '#778899',
        'lightsteelblue'       => '#b0c4de',
        'linen'                => '#faf0e6',
        'mediumblue'           => '#0000cd',
        'mediumpurple'         => '#9370db',
        'mediumslateblue'      => '#7b68ee',
        'mediumturquoise'      => '#48d1cc',
        'mistyrose'            => '#ffe4e1',
        'navajowhite'          => '#ffdead',
        'oldlace'              => '#fdf5e6',
        'olivedrab'            => '#6b8e23',
        'orangered'            => '#ff4500',
        'palegoldenrod'        => '#eee8aa',
        'paleturquoise'        => '#afeeee',
        'papayawhip'           => '#ffefd5',
        'peru'                 => '#cd853f',
        'plum'                 => '#dda0dd',
        'rosybrown'            => '#bc8f8f',
        'saddlebrown'          => '#8b4513',
        'sandybrown'           => '#f4a460',
        'seashell'             => '#fff5ee',
        'slateblue'            => '#6a5acd',
        'slategrey'            => '#708090',
        'snow'                 => '#fffafa',
        'tomato'               => '#ff6347',
        'violet'               => '#ee82ee',
        'wheat'                => '#f5deb3',
        'whitesmoke'           => '#f5f5f5',
        'yellowgreen'          => '#9acd32',
    );
}
<?php
/**
 * A PHP class to provide the basic functionality to create a pdf document without
 * any requirement for additional modules.
 *
 * Extended by Orion Richardson to support Unicode / UTF-8 characters using
 * TCPDF and others as a guide.
 *
 * @author  Wayne Munro <pdf@ros.co.nz>
 * @author  Orion Richardson <orionr@yahoo.com>
 * @author  Helmut Tischer <htischer@weihenstephan.org>
 * @author  Ryan H. Masten <ryan.masten@gmail.com>
 * @author  Brian Sweeney <eclecticgeek@gmail.com>
 * @author  Fabien Ménager <fabien.menager@gmail.com>
 * @license Public Domain http://creativecommons.org/licenses/publicdomain/
 * @package Cpdf
 */

namespace Svg\Surface;

class CPdf
{
    const PDF_VERSION = '1.7';

    const ACROFORM_SIG_SIGNATURESEXISTS = 0x0001;
    const ACROFORM_SIG_APPENDONLY =       0x0002;

    const ACROFORM_FIELD_BUTTON =   'Btn';
    const ACROFORM_FIELD_TEXT =     'Tx';
    const ACROFORM_FIELD_CHOICE =   'Ch';
    const ACROFORM_FIELD_SIG =      'Sig';

    const ACROFORM_FIELD_READONLY =               0x0001;
    const ACROFORM_FIELD_REQUIRED =               0x0002;

    const ACROFORM_FIELD_TEXT_MULTILINE =         0x1000;
    const ACROFORM_FIELD_TEXT_PASSWORD =          0x2000;
    const ACROFORM_FIELD_TEXT_RICHTEXT =         0x10000;

    const ACROFORM_FIELD_CHOICE_COMBO =          0x20000;
    const ACROFORM_FIELD_CHOICE_EDIT =           0x40000;
    const ACROFORM_FIELD_CHOICE_SORT =           0x80000;
    const ACROFORM_FIELD_CHOICE_MULTISELECT =   0x200000;

    const XOBJECT_SUBTYPE_FORM = 'Form';

    /**
     * @var integer The current number of pdf objects in the document
     */
    public $numObj = 0;

    /**
     * @var array This array contains all of the pdf objects, ready for final assembly
     */
    public $objects = [];

    /**
     * @var integer The objectId (number within the objects array) of the document catalog
     */
    public $catalogId;

    /**
     * @var integer The objectId (number within the objects array) of indirect references (Javascript EmbeddedFiles)
     */
    protected $indirectReferenceId = 0;

    /**
     * @var integer The objectId (number within the objects array)
     */
    protected $embeddedFilesId = 0;

    /**
     * AcroForm objectId
     *
     * @var integer
     */
    public $acroFormId;

    /**
     * @var int
     */
    public $signatureMaxLen = 5000;

    /**
     * @var array Array carrying information about the fonts that the system currently knows about
     * Used to ensure that a font is not loaded twice, among other things
     */
    public $fonts = [];

    /**
     * @var string The default font metrics file to use if no other font has been loaded.
     * The path to the directory containing the font metrics should be included
     */
    public $defaultFont = './fonts/Helvetica.afm';

    /**
     * @string A record of the current font
     */
    public $currentFont = '';

    /**
     * @var string The current base font
     */
    public $currentBaseFont = '';

    /**
     * @var integer The number of the current font within the font array
     */
    public $currentFontNum = 0;

    /**
     * @var integer
     */
    public $currentNode;

    /**
     * @var integer Object number of the current page
     */
    public $currentPage;

    /**
     * @var integer Object number of the currently active contents block
     */
    public $currentContents;

    /**
     * @var integer Number of fonts within the system
     */
    public $numFonts = 0;

    /**
     * @var integer Number of graphic state resources used
     */
    private $numStates = 0;

    /**
     * @var array Number of graphic state resources used
     */
    private $gstates = [];

    /**
     * @var array Current color for fill operations, defaults to inactive value,
     * all three components should be between 0 and 1 inclusive when active
     */
    public $currentColor = null;

    /**
     * @var array Current color for stroke operations (lines etc.)
     */
    public $currentStrokeColor = null;

    /**
     * @var string Fill rule (nonzero or evenodd)
     */
    public $fillRule = "nonzero";

    /**
     * @var string Current style that lines are drawn in
     */
    public $currentLineStyle = '';

    /**
     * @var array Current line transparency (partial graphics state)
     */
    public $currentLineTransparency = ["mode" => "Normal", "opacity" => 1.0];

    /**
     * array Current fill transparency (partial graphics state)
     */
    public $currentFillTransparency = ["mode" => "Normal", "opacity" => 1.0];

    /**
     * @var array An array which is used to save the state of the document, mainly the colors and styles
     * it is used to temporarily change to another state, then change back to what it was before
     */
    public $stateStack = [];

    /**
     * @var integer Number of elements within the state stack
     */
    public $nStateStack = 0;

    /**
     * @var integer Number of page objects within the document
     */
    public $numPages = 0;

    /**
     * @var array Object Id storage stack
     */
    public $stack = [];

    /**
     * @var integer Number of elements within the object Id storage stack
     */
    public $nStack = 0;

    /**
     * an array which contains information about the objects which are not firmly attached to pages
     * these have been added with the addObject function
     */
    public $looseObjects = [];

    /**
     * array contains information about how the loose objects are to be added to the document
     */
    public $addLooseObjects = [];

    /**
     * @var integer The objectId of the information object for the document
     * this contains authorship, title etc.
     */
    public $infoObject = 0;

    /**
     * @var integer Number of images being tracked within the document
     */
    public $numImages = 0;

    /**
     * @var array An array containing options about the document
     * it defaults to turning on the compression of the objects
     */
    public $options = ['compression' => true];

    /**
     * @var integer The objectId of the first page of the document
     */
    public $firstPageId;

    /**
     * @var integer The object Id of the procset object
     */
    public $procsetObjectId;

    /**
     * @var array Store the information about the relationship between font families
     * this used so that the code knows which font is the bold version of another font, etc.
     * the value of this array is initialised in the constructor function.
     */
    public $fontFamilies = [];

    /**
     * @var string Folder for php serialized formats of font metrics files.
     * If empty string, use same folder as original metrics files.
     * This can be passed in from class creator.
     * If this folder does not exist or is not writable, Cpdf will be **much** slower.
     * Because of potential trouble with php safe mode, folder cannot be created at runtime.
     */
    public $fontcache = '';

    /**
     * @var integer The version of the font metrics cache file.
     * This value must be manually incremented whenever the internal font data structure is modified.
     */
    public $fontcacheVersion = 6;

    /**
     * @var string Temporary folder.
     * If empty string, will attempt system tmp folder.
     * This can be passed in from class creator.
     */
    public $tmp = '';

    /**
     * @var string Track if the current font is bolded or italicised
     */
    public $currentTextState = '';

    /**
     * @var string Messages are stored here during processing, these can be selected afterwards to give some useful debug information
     */
    public $messages = '';

    /**
     * @var string The encryption array for the document encryption is stored here
     */
    public $arc4 = '';

    /**
     * @var integer The object Id of the encryption information
     */
    public $arc4_objnum = 0;

    /**
     * @var string The file identifier, used to uniquely identify a pdf document
     */
    public $fileIdentifier = '';

    /**
     * @var boolean A flag to say if a document is to be encrypted or not
     */
    public $encrypted = false;

    /**
     * @var string The encryption key for the encryption of all the document content (structure is not encrypted)
     */
    public $encryptionKey = '';

    /**
     * @var array Array which forms a stack to keep track of nested callback functions
     */
    public $callback = [];

    /**
     * @var integer The number of callback functions in the callback array
     */
    public $nCallback = 0;

    /**
     * @var array Store label->id pairs for named destinations, these will be used to replace internal links
     * done this way so that destinations can be defined after the location that links to them
     */
    public $destinations = [];

    /**
     * @var array Store the stack for the transaction commands, each item in here is a record of the values of all the
     * publiciables within the class, so that the user can rollback at will (from each 'start' command)
     * note that this includes the objects array, so these can be large.
     */
    public $checkpoint = '';

    /**
     * @var array Table of Image origin filenames and image labels which were already added with o_image().
     * Allows to merge identical images
     */
    public $imagelist = [];

    /**
     * @var array Table of already added alpha and plain image files for transparent PNG images.
     */
    protected $imageAlphaList = [];

    /**
     * @var array List of temporary image files to be deleted after processing.
     */
    protected $imageCache = [];

    /**
     * @var boolean Whether the text passed in should be treated as Unicode or just local character set.
     */
    public $isUnicode = false;

    /**
     * @var string the JavaScript code of the document
     */
    public $javascript = '';

    /**
     * @var boolean whether the compression is possible
     */
    protected $compressionReady = false;

    /**
     * @var array Current page size
     */
    protected $currentPageSize = ["width" => 0, "height" => 0];

    /**
     * @var array All the chars that will be required in the font subsets
     */
    protected $stringSubsets = [];

    /**
     * @var string The target internal encoding
     */
    protected static $targetEncoding = 'Windows-1252';

    /**
     * @var array
     */
    protected $byteRange = array();

    /**
     * @var array The list of the core fonts
     */
    protected static $coreFonts = [
        'courier',
        'courier-bold',
        'courier-oblique',
        'courier-boldoblique',
        'helvetica',
        'helvetica-bold',
        'helvetica-oblique',
        'helvetica-boldoblique',
        'times-roman',
        'times-bold',
        'times-italic',
        'times-bolditalic',
        'symbol',
        'zapfdingbats'
    ];

    /**
     * Class constructor
     * This will start a new document
     *
     * @param array   $pageSize  Array of 4 numbers, defining the bottom left and upper right corner of the page. first two are normally zero.
     * @param boolean $isUnicode Whether text will be treated as Unicode or not.
     * @param string  $fontcache The font cache folder
     * @param string  $tmp       The temporary folder
     */
    function __construct($pageSize = [0, 0, 612, 792], $isUnicode = false, $fontcache = '', $tmp = '')
    {
        $this->isUnicode = $isUnicode;
        $this->fontcache = rtrim($fontcache, DIRECTORY_SEPARATOR."/\\");
        $this->tmp = ($tmp !== '' ? $tmp : sys_get_temp_dir());
        $this->newDocument($pageSize);

        $this->compressionReady = function_exists('gzcompress');

        if (in_array('Windows-1252', mb_list_encodings())) {
            self::$targetEncoding = 'Windows-1252';
        }

        // also initialize the font families that are known about already
        $this->setFontFamily('init');
    }

    public function __destruct()
    {
        foreach ($this->imageCache as $file) {
            if (file_exists($file)) {
                unlink($file);
            }
        }
    }

    /**
     * Document object methods (internal use only)
     *
     * There is about one object method for each type of object in the pdf document
     * Each function has the same call list ($id,$action,$options).
     * $id = the object ID of the object, or what it is to be if it is being created
     * $action = a string specifying the action to be performed, though ALL must support:
     *           'new' - create the object with the id $id
     *           'out' - produce the output for the pdf object
     * $options = optional, a string or array containing the various parameters for the object
     *
     * These, in conjunction with the output function are the ONLY way for output to be produced
     * within the pdf 'file'.
     */

    /**
     * Destination object, used to specify the location for the user to jump to, presently on opening
     *
     * @param $id
     * @param $action
     * @param string $options
     * @return string|null
     */
    protected function o_destination($id, $action, $options = '')
    {
        switch ($action) {
            case 'new':
                $this->objects[$id] = ['t' => 'destination', 'info' => []];
                $tmp = '';
                switch ($options['type']) {
                    case 'XYZ':
                    /** @noinspection PhpMissingBreakStatementInspection */
                    case 'FitR':
                        $tmp = ' ' . $options['p3'] . $tmp;
                    case 'FitH':
                    case 'FitV':
                    case 'FitBH':
                    /** @noinspection PhpMissingBreakStatementInspection */
                    case 'FitBV':
                        $tmp = ' ' . $options['p1'] . ' ' . $options['p2'] . $tmp;
                    case 'Fit':
                    case 'FitB':
                        $tmp = $options['type'] . $tmp;
                        $this->objects[$id]['info']['string'] = $tmp;
                        $this->objects[$id]['info']['page'] = $options['page'];
                }
                break;

            case 'out':
                $o = &$this->objects[$id];

                $tmp = $o['info'];
                $res = "\n$id 0 obj\n" . '[' . $tmp['page'] . ' 0 R /' . $tmp['string'] . "]\nendobj";

                return $res;
        }

        return null;
    }

    /**
     * set the viewer preferences
     *
     * @param $id
     * @param $action
     * @param string|array $options
     * @return string|null
     */
    protected function o_viewerPreferences($id, $action, $options = '')
    {
        switch ($action) {
            case 'new':
                $this->objects[$id] = ['t' => 'viewerPreferences', 'info' => []];
                break;

            case 'add':
                $o = &$this->objects[$id];

                foreach ($options as $k => $v) {
                    switch ($k) {
                        // Boolean keys
                        case 'HideToolbar':
                        case 'HideMenubar':
                        case 'HideWindowUI':
                        case 'FitWindow':
                        case 'CenterWindow':
                        case 'DisplayDocTitle':
                        case 'PickTrayByPDFSize':
                            $o['info'][$k] = (bool)$v;
                            break;

                        // Integer keys
                        case 'NumCopies':
                            $o['info'][$k] = (int)$v;
                            break;

                        // Name keys
                        case 'ViewArea':
                        case 'ViewClip':
                        case 'PrintClip':
                        case 'PrintArea':
                            $o['info'][$k] = (string)$v;
                            break;

                        // Named with limited valid values
                        case 'NonFullScreenPageMode':
                            if (!in_array($v, ['UseNone', 'UseOutlines', 'UseThumbs', 'UseOC'])) {
                                break;
                            }
                            $o['info'][$k] = $v;
                            break;

                        case 'Direction':
                            if (!in_array($v, ['L2R', 'R2L'])) {
                                break;
                            }
                            $o['info'][$k] = $v;
                            break;

                        case 'PrintScaling':
                            if (!in_array($v, ['None', 'AppDefault'])) {
                                break;
                            }
                            $o['info'][$k] = $v;
                            break;

                        case 'Duplex':
                            if (!in_array($v, ['None', 'Simplex', 'DuplexFlipShortEdge', 'DuplexFlipLongEdge'])) {
                                break;
                            }
                            $o['info'][$k] = $v;
                            break;

                        // Integer array
                        case 'PrintPageRange':
                            // Cast to integer array
                            foreach ($v as $vK => $vV) {
                                $v[$vK] = (int)$vV;
                            }
                            $o['info'][$k] = array_values($v);
                            break;
                    }
                }
                break;

            case 'out':
                $o = &$this->objects[$id];
                $res = "\n$id 0 obj\n<< ";

                foreach ($o['info'] as $k => $v) {
                    if (is_string($v)) {
                        $v = '/' . $v;
                    } elseif (is_int($v)) {
                        $v = (string) $v;
                    } elseif (is_bool($v)) {
                        $v = ($v ? 'true' : 'false');
                    } elseif (is_array($v)) {
                        $v = '[' . implode(' ', $v) . ']';
                    }
                    $res .= "\n/$k $v";
                }
                $res .= "\n>>\nendobj";

                return $res;
        }

        return null;
    }

    /**
     * define the document catalog, the overall controller for the document
     *
     * @param $id
     * @param $action
     * @param string|array $options
     * @return string|null
     */
    protected function o_catalog($id, $action, $options = '')
    {
        if ($action !== 'new') {
            $o = &$this->objects[$id];
        }

        switch ($action) {
            case 'new':
                $this->objects[$id] = ['t' => 'catalog', 'info' => []];
                $this->catalogId = $id;
                break;

            case 'acroform':
            case 'outlines':
            case 'pages':
            case 'openHere':
            case 'names':
                $o['info'][$action] = $options;
                break;

            case 'viewerPreferences':
                if (!isset($o['info']['viewerPreferences'])) {
                    $this->numObj++;
                    $this->o_viewerPreferences($this->numObj, 'new');
                    $o['info']['viewerPreferences'] = $this->numObj;
                }

                $vp = $o['info']['viewerPreferences'];
                $this->o_viewerPreferences($vp, 'add', $options);

                break;

            case 'out':
                $res = "\n$id 0 obj\n<< /Type /Catalog";

                foreach ($o['info'] as $k => $v) {
                    switch ($k) {
                        case 'outlines':
                            $res .= "\n/Outlines $v 0 R";
                            break;

                        case 'pages':
                            $res .= "\n/Pages $v 0 R";
                            break;

                        case 'viewerPreferences':
                            $res .= "\n/ViewerPreferences $v 0 R";
                            break;

                        case 'openHere':
                            $res .= "\n/OpenAction $v 0 R";
                            break;

                        case 'names':
                            $res .= "\n/Names $v 0 R";
                            break;

                        case 'acroform':
                            $res .= "\n/AcroForm $v 0 R";
                            break;
                    }
                }

                $res .= " >>\nendobj";

                return $res;
        }

        return null;
    }

    /**
     * object which is a parent to the pages in the document
     *
     * @param $id
     * @param $action
     * @param string $options
     * @return string|null
     */
    protected function o_pages($id, $action, $options = '')
    {
        if ($action !== 'new') {
            $o = &$this->objects[$id];
        }

        switch ($action) {
            case 'new':
                $this->objects[$id] = ['t' => 'pages', 'info' => []];
                $this->o_catalog($this->catalogId, 'pages', $id);
                break;

            case 'page':
                if (!is_array($options)) {
                    // then it will just be the id of the new page
                    $o['info']['pages'][] = $options;
                } else {
                    // then it should be an array having 'id','rid','pos', where rid=the page to which this one will be placed relative
                    // and pos is either 'before' or 'after', saying where this page will fit.
                    if (isset($options['id']) && isset($options['rid']) && isset($options['pos'])) {
                        $i = array_search($options['rid'], $o['info']['pages']);
                        if (isset($o['info']['pages'][$i]) && $o['info']['pages'][$i] == $options['rid']) {

                            // then there is a match
                            // make a space
                            switch ($options['pos']) {
                                case 'before':
                                    $k = $i;
                                    break;

                                case 'after':
                                    $k = $i + 1;
                                    break;

                                default:
                                    $k = -1;
                                    break;
                            }

                            if ($k >= 0) {
                                for ($j = count($o['info']['pages']) - 1; $j >= $k; $j--) {
                                    $o['info']['pages'][$j + 1] = $o['info']['pages'][$j];
                                }

                                $o['info']['pages'][$k] = $options['id'];
                            }
                        }
                    }
                }
                break;

            case 'procset':
                $o['info']['procset'] = $options;
                break;

            case 'mediaBox':
                $o['info']['mediaBox'] = $options;
                // which should be an array of 4 numbers
                $this->currentPageSize = ['width' => $options[2], 'height' => $options[3]];
                break;

            case 'font':
                $o['info']['fonts'][] = ['objNum' => $options['objNum'], 'fontNum' => $options['fontNum']];
                break;

            case 'extGState':
                $o['info']['extGStates'][] = ['objNum' => $options['objNum'], 'stateNum' => $options['stateNum']];
                break;

            case 'xObject':
                $o['info']['xObjects'][] = ['objNum' => $options['objNum'], 'label' => $options['label']];
                break;

            case 'out':
                if (count($o['info']['pages'])) {
                    $res = "\n$id 0 obj\n<< /Type /Pages\n/Kids [";
                    foreach ($o['info']['pages'] as $v) {
                        $res .= "$v 0 R\n";
                    }

                    $res .= "]\n/Count " . count($this->objects[$id]['info']['pages']);

                    if ((isset($o['info']['fonts']) && count($o['info']['fonts'])) ||
                        isset($o['info']['procset']) ||
                        (isset($o['info']['extGStates']) && count($o['info']['extGStates']))
                    ) {
                        $res .= "\n/Resources <<";

                        if (isset($o['info']['procset'])) {
                            $res .= "\n/ProcSet " . $o['info']['procset'] . " 0 R";
                        }

                        if (isset($o['info']['fonts']) && count($o['info']['fonts'])) {
                            $res .= "\n/Font << ";
                            foreach ($o['info']['fonts'] as $finfo) {
                                $res .= "\n/F" . $finfo['fontNum'] . " " . $finfo['objNum'] . " 0 R";
                            }
                            $res .= "\n>>";
                        }

                        if (isset($o['info']['xObjects']) && count($o['info']['xObjects'])) {
                            $res .= "\n/XObject << ";
                            foreach ($o['info']['xObjects'] as $finfo) {
                                $res .= "\n/" . $finfo['label'] . " " . $finfo['objNum'] . " 0 R";
                            }
                            $res .= "\n>>";
                        }

                        if (isset($o['info']['extGStates']) && count($o['info']['extGStates'])) {
                            $res .= "\n/ExtGState << ";
                            foreach ($o['info']['extGStates'] as $gstate) {
                                $res .= "\n/GS" . $gstate['stateNum'] . " " . $gstate['objNum'] . " 0 R";
                            }
                            $res .= "\n>>";
                        }

                        $res .= "\n>>";
                        if (isset($o['info']['mediaBox'])) {
                            $tmp = $o['info']['mediaBox'];
                            $res .= "\n/MediaBox [" . sprintf(
                                    '%.3F %.3F %.3F %.3F',
                                    $tmp[0],
                                    $tmp[1],
                                    $tmp[2],
                                    $tmp[3]
                                ) . ']';
                        }
                    }

                    $res .= "\n >>\nendobj";
                } else {
                    $res = "\n$id 0 obj\n<< /Type /Pages\n/Count 0\n>>\nendobj";
                }

                return $res;
        }

        return null;
    }

    /**
     * define the outlines in the doc, empty for now
     *
     * @param $id
     * @param $action
     * @param string $options
     * @return string|null
     */
    protected function o_outlines($id, $action, $options = '')
    {
        if ($action !== 'new') {
            $o = &$this->objects[$id];
        }

        switch ($action) {
            case 'new':
                $this->objects[$id] = ['t' => 'outlines', 'info' => ['outlines' => []]];
                $this->o_catalog($this->catalogId, 'outlines', $id);
                break;

            case 'outline':
                $o['info']['outlines'][] = $options;
                break;

            case 'out':
                if (count($o['info']['outlines'])) {
                    $res = "\n$id 0 obj\n<< /Type /Outlines /Kids [";
                    foreach ($o['info']['outlines'] as $v) {
                        $res .= "$v 0 R ";
                    }

                    $res .= "] /Count " . count($o['info']['outlines']) . " >>\nendobj";
                } else {
                    $res = "\n$id 0 obj\n<< /Type /Outlines /Count 0 >>\nendobj";
                }

                return $res;
        }

        return null;
    }

    /**
     * an object to hold the font description
     *
     * @param $id
     * @param $action
     * @param string|array $options
     * @return string|null
     * @throws FontNotFoundException
     */
    protected function o_font($id, $action, $options = '')
    {
        if ($action !== 'new') {
            $o = &$this->objects[$id];
        }

        switch ($action) {
            case 'new':
                $this->objects[$id] = [
                    't'    => 'font',
                    'info' => [
                        'name'         => $options['name'],
                        'fontFileName' => $options['fontFileName'],
                        'SubType'      => 'Type1',
                        'isSubsetting'   => $options['isSubsetting']
                    ]
                ];
                $fontNum = $this->numFonts;
                $this->objects[$id]['info']['fontNum'] = $fontNum;

                // deal with the encoding and the differences
                if (isset($options['differences'])) {
                    // then we'll need an encoding dictionary
                    $this->numObj++;
                    $this->o_fontEncoding($this->numObj, 'new', $options);
                    $this->objects[$id]['info']['encodingDictionary'] = $this->numObj;
                } else {
                    if (isset($options['encoding'])) {
                        // we can specify encoding here
                        switch ($options['encoding']) {
                            case 'WinAnsiEncoding':
                            case 'MacRomanEncoding':
                            case 'MacExpertEncoding':
                                $this->objects[$id]['info']['encoding'] = $options['encoding'];
                                break;

                            case 'none':
                                break;

                            default:
                                $this->objects[$id]['info']['encoding'] = 'WinAnsiEncoding';
                                break;
                        }
                    } else {
                        $this->objects[$id]['info']['encoding'] = 'WinAnsiEncoding';
                    }
                }

                if ($this->fonts[$options['fontFileName']]['isUnicode']) {
                    // For Unicode fonts, we need to incorporate font data into
                    // sub-sections that are linked from the primary font section.
                    // Look at o_fontGIDtoCID and o_fontDescendentCID functions
                    // for more information.
                    //
                    // All of this code is adapted from the excellent changes made to
                    // transform FPDF to TCPDF (http://tcpdf.sourceforge.net/)

                    $toUnicodeId = ++$this->numObj;
                    $this->o_toUnicode($toUnicodeId, 'new');
                    $this->objects[$id]['info']['toUnicode'] = $toUnicodeId;

                    $cidFontId = ++$this->numObj;
                    $this->o_fontDescendentCID($cidFontId, 'new', $options);
                    $this->objects[$id]['info']['cidFont'] = $cidFontId;
                }

                // also tell the pages node about the new font
                $this->o_pages($this->currentNode, 'font', ['fontNum' => $fontNum, 'objNum' => $id]);
                break;

            case 'add':
                $font_options = $this->processFont($id, $o['info']);

                if ($font_options !== false) {
                    foreach ($font_options as $k => $v) {
                        switch ($k) {
                            case 'BaseFont':
                                $o['info']['name'] = $v;
                                break;
                            case 'FirstChar':
                            case 'LastChar':
                            case 'Widths':
                            case 'FontDescriptor':
                            case 'SubType':
                                $this->addMessage('o_font ' . $k . " : " . $v);
                                $o['info'][$k] = $v;
                                break;
                        }
                    }

                    // pass values down to descendent font
                    if (isset($o['info']['cidFont'])) {
                        $this->o_fontDescendentCID($o['info']['cidFont'], 'add', $font_options);
                    }
                }
                break;

            case 'out':
                if ($this->fonts[$this->objects[$id]['info']['fontFileName']]['isUnicode']) {
                    // For Unicode fonts, we need to incorporate font data into
                    // sub-sections that are linked from the primary font section.
                    // Look at o_fontGIDtoCID and o_fontDescendentCID functions
                    // for more information.
                    //
                    // All of this code is adapted from the excellent changes made to
                    // transform FPDF to TCPDF (http://tcpdf.sourceforge.net/)

                    $res = "\n$id 0 obj\n<</Type /Font\n/Subtype /Type0\n";
                    $res .= "/BaseFont /" . $o['info']['name'] . "\n";

                    // The horizontal identity mapping for 2-byte CIDs; may be used
                    // with CIDFonts using any Registry, Ordering, and Supplement values.
                    $res .= "/Encoding /Identity-H\n";
                    $res .= "/DescendantFonts [" . $o['info']['cidFont'] . " 0 R]\n";
                    $res .= "/ToUnicode " . $o['info']['toUnicode'] . " 0 R\n";
                    $res .= ">>\n";
                    $res .= "endobj";
                } else {
                    $res = "\n$id 0 obj\n<< /Type /Font\n/Subtype /" . $o['info']['SubType'] . "\n";
                    $res .= "/Name /F" . $o['info']['fontNum'] . "\n";
                    $res .= "/BaseFont /" . $o['info']['name'] . "\n";

                    if (isset($o['info']['encodingDictionary'])) {
                        // then place a reference to the dictionary
                        $res .= "/Encoding " . $o['info']['encodingDictionary'] . " 0 R\n";
                    } else {
                        if (isset($o['info']['encoding'])) {
                            // use the specified encoding
                            $res .= "/Encoding /" . $o['info']['encoding'] . "\n";
                        }
                    }

                    if (isset($o['info']['FirstChar'])) {
                        $res .= "/FirstChar " . $o['info']['FirstChar'] . "\n";
                    }

                    if (isset($o['info']['LastChar'])) {
                        $res .= "/LastChar " . $o['info']['LastChar'] . "\n";
                    }

                    if (isset($o['info']['Widths'])) {
                        $res .= "/Widths " . $o['info']['Widths'] . " 0 R\n";
                    }

                    if (isset($o['info']['FontDescriptor'])) {
                        $res .= "/FontDescriptor " . $o['info']['FontDescriptor'] . " 0 R\n";
                    }

                    $res .= ">>\n";
                    $res .= "endobj";
                }

                return $res;
        }

        return null;
    }

    protected function getFontSubsettingTag(array $font): string
    {
        // convert font num to hexavigesimal numeral system letters A - Z only
        $base_26 = strtoupper(base_convert($font['fontNum'], 10, 26));
        for ($i = 0; $i < strlen($base_26); $i++) {
            $char = $base_26[$i];
            if ($char <= "9") {
                $base_26[$i] = chr(65 + intval($char));
            } else {
                $base_26[$i] = chr(ord($char) + 10);
            }
        }

        return 'SUB' . str_pad($base_26, 3, 'A', STR_PAD_LEFT);
    }

    /**
     * @param int $fontObjId
     * @param array $object_info
     * @return array|false
     * @throws FontNotFoundException
     */
    private function processFont(int $fontObjId, array $object_info)
    {
        $fontFileName = $object_info['fontFileName'];
        if (!isset($this->fonts[$fontFileName])) {
            return false;
        }

        $font = &$this->fonts[$fontFileName];

        $fileSuffix = $font['fileSuffix'];
        $fileSuffixLower = strtolower($font['fileSuffix']);
        $fbfile = "$fontFileName.$fileSuffix";
        $isTtfFont = $fileSuffixLower === 'ttf';
        $isPfbFont = $fileSuffixLower === 'pfb';

        $this->addMessage('selectFont: checking for - ' . $fbfile);

        if (!$fileSuffix) {
            $this->addMessage(
                'selectFont: pfb or ttf file not found, ok if this is one of the 14 standard fonts'
            );

            return false;
        } else {
            $adobeFontName = isset($font['PostScriptName']) ? $font['PostScriptName'] : $font['FontName'];
            //        $fontObj = $this->numObj;
            $this->addMessage("selectFont: adding font file - $fbfile - $adobeFontName");

            // find the array of font widths, and put that into an object.
            $firstChar = -1;
            $lastChar = 0;
            $widths = [];
            $cid_widths = [];

            foreach ($font['C'] as $num => $d) {
                if (intval($num) > 0 || $num == '0') {
                    if (!$font['isUnicode']) {
                        // With Unicode, widths array isn't used
                        if ($lastChar > 0 && $num > $lastChar + 1) {
                            for ($i = $lastChar + 1; $i < $num; $i++) {
                                $widths[] = 0;
                            }
                        }
                    }

                    $widths[] = $d;

                    if ($font['isUnicode']) {
                        $cid_widths[$num] = $d;
                    }

                    if ($firstChar == -1) {
                        $firstChar = $num;
                    }

                    $lastChar = $num;
                }
            }

            // also need to adjust the widths for the differences array
            if (isset($object['differences'])) {
                foreach ($object['differences'] as $charNum => $charName) {
                    if ($charNum > $lastChar) {
                        if (!$object['isUnicode']) {
                            // With Unicode, widths array isn't used
                            for ($i = $lastChar + 1; $i <= $charNum; $i++) {
                                $widths[] = 0;
                            }
                        }

                        $lastChar = $charNum;
                    }

                    if (isset($font['C'][$charName])) {
                        $widths[$charNum - $firstChar] = $font['C'][$charName];
                        if ($font['isUnicode']) {
                            $cid_widths[$charName] = $font['C'][$charName];
                        }
                    }
                }
            }

            if ($font['isUnicode']) {
                $font['CIDWidths'] = $cid_widths;
            }

            $this->addMessage('selectFont: FirstChar = ' . $firstChar);
            $this->addMessage('selectFont: LastChar = ' . $lastChar);

            $widthid = -1;

            if (!$font['isUnicode']) {
                // With Unicode, widths array isn't used

                $this->numObj++;
                $this->o_contents($this->numObj, 'new', 'raw');
                $this->objects[$this->numObj]['c'] .= '[' . implode(' ', $widths) . ']';
                $widthid = $this->numObj;
            }

            $missing_width = 500;
            $stemV = 70;

            if (isset($font['MissingWidth'])) {
                $missing_width = $font['MissingWidth'];
            }
            if (isset($font['StdVW'])) {
                $stemV = $font['StdVW'];
            } else {
                if (isset($font['Weight']) && preg_match('!(bold|black)!i', $font['Weight'])) {
                    $stemV = 120;
                }
            }

            // load the pfb file, and put that into an object too.
            // note that pdf supports only binary format type 1 font files, though there is a
            // simple utility to convert them from pfa to pfb.
            $data = file_get_contents($fbfile);

            // create the font descriptor
            $this->numObj++;
            $fontDescriptorId = $this->numObj;

            $this->numObj++;
            $pfbid = $this->numObj;

            // determine flags (more than a little flakey, hopefully will not matter much)
            $flags = 0;

            if ($font['ItalicAngle'] != 0) {
                $flags += pow(2, 6);
            }

            if ($font['IsFixedPitch'] === 'true') {
                $flags += 1;
            }

            $flags += pow(2, 5); // assume non-sybolic
            $list = [
                'Ascent'       => 'Ascender',
                'CapHeight'    => 'Ascender', //FIXME: php-font-lib is not grabbing this value, so we'll fake it and use the Ascender value // 'CapHeight'
                'MissingWidth' => 'MissingWidth',
                'Descent'      => 'Descender',
                'FontBBox'     => 'FontBBox',
                'ItalicAngle'  => 'ItalicAngle'
            ];
            $fdopt = [
                'Flags'    => $flags,
                'FontName' => $adobeFontName,
                'StemV'    => $stemV
            ];

            foreach ($list as $k => $v) {
                if (isset($font[$v])) {
                    $fdopt[$k] = $font[$v];
                }
            }

            if ($isPfbFont) {
                $fdopt['FontFile'] = $pfbid;
            } elseif ($isTtfFont) {
                $fdopt['FontFile2'] = $pfbid;
            }

            $this->o_fontDescriptor($fontDescriptorId, 'new', $fdopt);

            // embed the font program
            $this->o_contents($this->numObj, 'new');
            $this->objects[$pfbid]['c'] .= $data;

            // determine the cruicial lengths within this file
            if ($isPfbFont) {
                $l1 = strpos($data, 'eexec') + 6;
                $l2 = strpos($data, '00000000') - $l1;
                $l3 = mb_strlen($data, '8bit') - $l2 - $l1;
                $this->o_contents(
                    $this->numObj,
                    'add',
                    ['Length1' => $l1, 'Length2' => $l2, 'Length3' => $l3]
                );
            } elseif ($isTtfFont) {
                $l1 = mb_strlen($data, '8bit');
                $this->o_contents($this->numObj, 'add', ['Length1' => $l1]);
            }

            // tell the font object about all this new stuff
            $options = [
                'BaseFont'       => $adobeFontName,
                'MissingWidth'   => $missing_width,
                'Widths'         => $widthid,
                'FirstChar'      => $firstChar,
                'LastChar'       => $lastChar,
                'FontDescriptor' => $fontDescriptorId
            ];

            if ($isTtfFont) {
                $options['SubType'] = 'TrueType';
            }

            $this->addMessage("adding extra info to font.($fontObjId)");

            foreach ($options as $fk => $fv) {
                $this->addMessage("$fk : $fv");
            }
        }

        return $options;
    }

    /**
     * A toUnicode section, needed for unicode fonts
     *
     * @param $id
     * @param $action
     * @return null|string
     */
    protected function o_toUnicode($id, $action)
    {
        switch ($action) {
            case 'new':
                $this->objects[$id] = [
                    't'    => 'toUnicode'
                ];
                break;
            case 'add':
                break;
            case 'out':
                $ordering = 'UCS';
                $registry = 'Adobe';

                if ($this->encrypted) {
                    $this->encryptInit($id);
                    $ordering = $this->ARC4($ordering);
                    $registry = $this->filterText($this->ARC4($registry), false, false);
                }

                $stream = <<<EOT
/CIDInit /ProcSet findresource begin
12 dict begin
begincmap
/CIDSystemInfo
<</Registry ($registry)
/Ordering ($ordering)
/Supplement 0
>> def
/CMapName /Adobe-Identity-UCS def
/CMapType 2 def
1 begincodespacerange
<0000> <FFFF>
endcodespacerange
1 beginbfrange
<0000> <FFFF> <0000>
endbfrange
endcmap
CMapName currentdict /CMap defineresource pop
end
end
EOT;

                $res = "\n$id 0 obj\n";
                $res .= "<</Length " . mb_strlen($stream, '8bit') . " >>\n";
                $res .= "stream\n" . $stream . "\nendstream" . "\nendobj";

                return $res;
        }

        return null;
    }

    /**
     * a font descriptor, needed for including additional fonts
     *
     * @param $id
     * @param $action
     * @param string $options
     * @return null|string
     */
    protected function o_fontDescriptor($id, $action, $options = '')
    {
        if ($action !== 'new') {
            $o = &$this->objects[$id];
        }

        switch ($action) {
            case 'new':
                $this->objects[$id] = ['t' => 'fontDescriptor', 'info' => $options];
                break;

            case 'out':
                $res = "\n$id 0 obj\n<< /Type /FontDescriptor\n";
                foreach ($o['info'] as $label => $value) {
                    switch ($label) {
                        case 'Ascent':
                        case 'CapHeight':
                        case 'Descent':
                        case 'Flags':
                        case 'ItalicAngle':
                        case 'StemV':
                        case 'AvgWidth':
                        case 'Leading':
                        case 'MaxWidth':
                        case 'MissingWidth':
                        case 'StemH':
                        case 'XHeight':
                        case 'CharSet':
                            if (mb_strlen($value, '8bit')) {
                                $res .= "/$label $value\n";
                            }

                            break;
                        case 'FontFile':
                        case 'FontFile2':
                        case 'FontFile3':
                            $res .= "/$label $value 0 R\n";
                            break;

                        case 'FontBBox':
                            $res .= "/$label [$value[0] $value[1] $value[2] $value[3]]\n";
                            break;

                        case 'FontName':
                            $res .= "/$label /$value\n";
                            break;
                    }
                }

                $res .= ">>\nendobj";

                return $res;
        }

        return null;
    }

    /**
     * the font encoding
     *
     * @param $id
     * @param $action
     * @param string $options
     * @return null|string
     */
    protected function o_fontEncoding($id, $action, $options = '')
    {
        if ($action !== 'new') {
            $o = &$this->objects[$id];
        }

        switch ($action) {
            case 'new':
                // the options array should contain 'differences' and maybe 'encoding'
                $this->objects[$id] = ['t' => 'fontEncoding', 'info' => $options];
                break;

            case 'out':
                $res = "\n$id 0 obj\n<< /Type /Encoding\n";
                if (!isset($o['info']['encoding'])) {
                    $o['info']['encoding'] = 'WinAnsiEncoding';
                }

                if ($o['info']['encoding'] !== 'none') {
                    $res .= "/BaseEncoding /" . $o['info']['encoding'] . "\n";
                }

                $res .= "/Differences \n[";

                $onum = -100;

                foreach ($o['info']['differences'] as $num => $label) {
                    if ($num != $onum + 1) {
                        // we cannot make use of consecutive numbering
                        $res .= "\n$num /$label";
                    } else {
                        $res .= " /$label";
                    }

                    $onum = $num;
                }

                $res .= "\n]\n>>\nendobj";

                return $res;
        }

        return null;
    }

    /**
     * a descendent cid font, needed for unicode fonts
     *
     * @param $id
     * @param $action
     * @param string|array $options
     * @return null|string
     */
    protected function o_fontDescendentCID($id, $action, $options = '')
    {
        if ($action !== 'new') {
            $o = &$this->objects[$id];
        }

        switch ($action) {
            case 'new':
                $this->objects[$id] = ['t' => 'fontDescendentCID', 'info' => $options];

                // we need a CID system info section
                $cidSystemInfoId = ++$this->numObj;
                $this->o_cidSystemInfo($cidSystemInfoId, 'new');
                $this->objects[$id]['info']['cidSystemInfo'] = $cidSystemInfoId;

                // and a CID to GID map
                $cidToGidMapId = ++$this->numObj;
                $this->o_fontGIDtoCIDMap($cidToGidMapId, 'new', $options);
                $this->objects[$id]['info']['cidToGidMap'] = $cidToGidMapId;
                break;

            case 'add':
                foreach ($options as $k => $v) {
                    switch ($k) {
                        case 'BaseFont':
                            $o['info']['name'] = $v;
                            break;

                        case 'FirstChar':
                        case 'LastChar':
                        case 'MissingWidth':
                        case 'FontDescriptor':
                        case 'SubType':
                            $this->addMessage("o_fontDescendentCID $k : $v");
                            $o['info'][$k] = $v;
                            break;
                    }
                }

                // pass values down to cid to gid map
                $this->o_fontGIDtoCIDMap($o['info']['cidToGidMap'], 'add', $options);
                break;

            case 'out':
                $res = "\n$id 0 obj\n";
                $res .= "<</Type /Font\n";
                $res .= "/Subtype /CIDFontType2\n";
                $res .= "/BaseFont /" . $o['info']['name'] . "\n";
                $res .= "/CIDSystemInfo " . $o['info']['cidSystemInfo'] . " 0 R\n";
                //      if (isset($o['info']['FirstChar'])) {
                //        $res.= "/FirstChar ".$o['info']['FirstChar']."\n";
                //      }

                //      if (isset($o['info']['LastChar'])) {
                //        $res.= "/LastChar ".$o['info']['LastChar']."\n";
                //      }
                if (isset($o['info']['FontDescriptor'])) {
                    $res .= "/FontDescriptor " . $o['info']['FontDescriptor'] . " 0 R\n";
                }

                if (isset($o['info']['MissingWidth'])) {
                    $res .= "/DW " . $o['info']['MissingWidth'] . "\n";
                }

                if (isset($o['info']['fontFileName']) && isset($this->fonts[$o['info']['fontFileName']]['CIDWidths'])) {
                    $cid_widths = &$this->fonts[$o['info']['fontFileName']]['CIDWidths'];
                    $w = '';
                    foreach ($cid_widths as $cid => $width) {
                        $w .= "$cid [$width] ";
                    }
                    $res .= "/W [$w]\n";
                }

                $res .= "/CIDToGIDMap " . $o['info']['cidToGidMap'] . " 0 R\n";
                $res .= ">>\n";
                $res .= "endobj";

                return $res;
        }

        return null;
    }

    /**
     * CID system info section, needed for unicode fonts
     *
     * @param $id
     * @param $action
     * @return null|string
     */
    protected function o_cidSystemInfo($id, $action)
    {
        switch ($action) {
            case 'new':
                $this->objects[$id] = [
                    't' => 'cidSystemInfo'
                ];
                break;
            case 'add':
                break;
            case 'out':
                $ordering = 'UCS';
                $registry = 'Adobe';

                if ($this->encrypted) {
                    $this->encryptInit($id);
                    $ordering = $this->ARC4($ordering);
                    $registry = $this->ARC4($registry);
                }


                $res = "\n$id 0 obj\n";

                $res .= '<</Registry (' . $registry . ")\n"; // A string identifying an issuer of character collections
                $res .= '/Ordering (' . $ordering . ")\n"; // A string that uniquely names a character collection issued by a specific registry
                $res .= "/Supplement 0\n"; // The supplement number of the character collection.
                $res .= ">>";

                $res .= "\nendobj";

                return $res;
        }

        return null;
    }

    /**
     * a font glyph to character map, needed for unicode fonts
     *
     * @param $id
     * @param $action
     * @param string $options
     * @return null|string
     */
    protected function o_fontGIDtoCIDMap($id, $action, $options = '')
    {
        if ($action !== 'new') {
            $o = &$this->objects[$id];
        }

        switch ($action) {
            case 'new':
                $this->objects[$id] = ['t' => 'fontGIDtoCIDMap', 'info' => $options];
                break;

            case 'out':
                $res = "\n$id 0 obj\n";
                $fontFileName = $o['info']['fontFileName'];
                $tmp = $this->fonts[$fontFileName]['CIDtoGID'] = base64_decode($this->fonts[$fontFileName]['CIDtoGID']);

                $compressed = isset($this->fonts[$fontFileName]['CIDtoGID_Compressed']) &&
                    $this->fonts[$fontFileName]['CIDtoGID_Compressed'];

                if (!$compressed && isset($o['raw'])) {
                    $res .= $tmp;
                } else {
                    $res .= "<<";

                    if (!$compressed && $this->compressionReady && $this->options['compression']) {
                        // then implement ZLIB based compression on this content stream
                        $compressed = true;
                        $tmp = gzcompress($tmp, 6);
                    }
                    if ($compressed) {
                        $res .= "\n/Filter /FlateDecode";
                    }

                    if ($this->encrypted) {
                        $this->encryptInit($id);
                        $tmp = $this->ARC4($tmp);
                    }

                    $res .= "\n/Length " . mb_strlen($tmp, '8bit') . ">>\nstream\n$tmp\nendstream";
                }

                $res .= "\nendobj";

                return $res;
        }

        return null;
    }

    /**
     * the document procset, solves some problems with printing to old PS printers
     *
     * @param $id
     * @param $action
     * @param string $options
     * @return null|string
     */
    protected function o_procset($id, $action, $options = '')
    {
        if ($action !== 'new') {
            $o = &$this->objects[$id];
        }

        switch ($action) {
            case 'new':
                $this->objects[$id] = ['t' => 'procset', 'info' => ['PDF' => 1, 'Text' => 1]];
                $this->o_pages($this->currentNode, 'procset', $id);
                $this->procsetObjectId = $id;
                break;

            case 'add':
                // this is to add new items to the procset list, despite the fact that this is considered
                // obsolete, the items are required for printing to some postscript printers
                switch ($options) {
                    case 'ImageB':
                    case 'ImageC':
                    case 'ImageI':
                        $o['info'][$options] = 1;
                        break;
                }
                break;

            case 'out':
                $res = "\n$id 0 obj\n[";
                foreach ($o['info'] as $label => $val) {
                    $res .= "/$label ";
                }
                $res .= "]\nendobj";

                return $res;
        }

        return null;
    }

    /**
     * define the document information
     *
     * @param $id
     * @param $action
     * @param string $options
     * @return null|string
     */
    protected function o_info($id, $action, $options = '')
    {
        switch ($action) {
            case 'new':
                $this->infoObject = $id;
                $date = 'D:' . @date('Ymd');
                $this->objects[$id] = [
                    't'    => 'info',
                    'info' => [
                        'Producer'      => 'CPDF (dompdf)',
                        'CreationDate' => $date
                    ]
                ];
                break;
            case 'Title':
            case 'Author':
            case 'Subject':
            case 'Keywords':
            case 'Creator':
            case 'Producer':
            case 'CreationDate':
            case 'ModDate':
            case 'Trapped':
                $this->objects[$id]['info'][$action] = $options;
                break;

            case 'out':
                $encrypted = $this->encrypted;
                if ($encrypted) {
                    $this->encryptInit($id);
                }

                $res = "\n$id 0 obj\n<<\n";
                $o = &$this->objects[$id];
                foreach ($o['info'] as $k => $v) {
                    $res .= "/$k (";

                    // dates must be outputted as-is, without Unicode transformations
                    if ($k !== 'CreationDate' && $k !== 'ModDate') {
                        $v = $this->utf8toUtf16BE($v);
                    }

                    if ($encrypted) {
                        $v = $this->ARC4($v);
                    }

                    $res .= $this->filterText($v, false, false);
                    $res .= ")\n";
                }

                $res .= ">>\nendobj";

                return $res;
        }

        return null;
    }

    /**
     * an action object, used to link to URLS initially
     *
     * @param $id
     * @param $action
     * @param string $options
     * @return null|string
     */
    protected function o_action($id, $action, $options = '')
    {
        if ($action !== 'new') {
            $o = &$this->objects[$id];
        }

        switch ($action) {
            case 'new':
                if (is_array($options)) {
                    $this->objects[$id] = ['t' => 'action', 'info' => $options, 'type' => $options['type']];
                } else {
                    // then assume a URI action
                    $this->objects[$id] = ['t' => 'action', 'info' => $options, 'type' => 'URI'];
                }
                break;

            case 'out':
                if ($this->encrypted) {
                    $this->encryptInit($id);
                }

                $res = "\n$id 0 obj\n<< /Type /Action";
                switch ($o['type']) {
                    case 'ilink':
                        if (!isset($this->destinations[(string)$o['info']['label']])) {
                            break;
                        }

                        // there will be an 'label' setting, this is the name of the destination
                        $res .= "\n/S /GoTo\n/D " . $this->destinations[(string)$o['info']['label']] . " 0 R";
                        break;

                    case 'URI':
                        $res .= "\n/S /URI\n/URI (";
                        if ($this->encrypted) {
                            $res .= $this->filterText($this->ARC4($o['info']), false, false);
                        } else {
                            $res .= $this->filterText($o['info'], false, false);
                        }

                        $res .= ")";
                        break;
                }

                $res .= "\n>>\nendobj";

                return $res;
        }

        return null;
    }

    /**
     * an annotation object, this will add an annotation to the current page.
     * initially will support just link annotations
     *
     * @param $id
     * @param $action
     * @param string $options
     * @return null|string
     */
    protected function o_annotation($id, $action, $options = '')
    {
        if ($action !== 'new') {
            $o = &$this->objects[$id];
        }

        switch ($action) {
            case 'new':
                // add the annotation to the current page
                $pageId = $this->currentPage;
                $this->o_page($pageId, 'annot', $id);

                // and add the action object which is going to be required
                switch ($options['type']) {
                    case 'link':
                        $this->objects[$id] = ['t' => 'annotation', 'info' => $options];
                        $this->numObj++;
                        $this->o_action($this->numObj, 'new', $options['url']);
                        $this->objects[$id]['info']['actionId'] = $this->numObj;
                        break;

                    case 'ilink':
                        // this is to a named internal link
                        $label = $options['label'];
                        $this->objects[$id] = ['t' => 'annotation', 'info' => $options];
                        $this->numObj++;
                        $this->o_action($this->numObj, 'new', ['type' => 'ilink', 'label' => $label]);
                        $this->objects[$id]['info']['actionId'] = $this->numObj;
                        break;
                }
                break;

            case 'out':
                $res = "\n$id 0 obj\n<< /Type /Annot";
                switch ($o['info']['type']) {
                    case 'link':
                    case 'ilink':
                        $res .= "\n/Subtype /Link";
                        break;
                }
                $res .= "\n/A " . $o['info']['actionId'] . " 0 R";
                $res .= "\n/Border [0 0 0]";
                $res .= "\n/H /I";
                $res .= "\n/Rect [ ";

                foreach ($o['info']['rect'] as $v) {
                    $res .= sprintf("%.4F ", $v);
                }

                $res .= "]";
                $res .= "\n>>\nendobj";

                return $res;
        }

        return null;
    }

    /**
     * a page object, it also creates a contents object to hold its contents
     *
     * @param $id
     * @param $action
     * @param string $options
     * @return null|string
     */
    protected function o_page($id, $action, $options = '')
    {
        if ($action !== 'new') {
            $o = &$this->objects[$id];
        }

        switch ($action) {
            case 'new':
                $this->numPages++;
                $this->objects[$id] = [
                    't'    => 'page',
                    'info' => [
                        'parent'  => $this->currentNode,
                        'pageNum' => $this->numPages,
                        'mediaBox' => $this->objects[$this->currentNode]['info']['mediaBox']
                    ]
                ];

                if (is_array($options)) {
                    // then this must be a page insertion, array should contain 'rid','pos'=[before|after]
                    $options['id'] = $id;
                    $this->o_pages($this->currentNode, 'page', $options);
                } else {
                    $this->o_pages($this->currentNode, 'page', $id);
                }

                $this->currentPage = $id;
                //make a contents object to go with this page
                $this->numObj++;
                $this->o_contents($this->numObj, 'new', $id);
                $this->currentContents = $this->numObj;
                $this->objects[$id]['info']['contents'] = [];
                $this->objects[$id]['info']['contents'][] = $this->numObj;

                $match = ($this->numPages % 2 ? 'odd' : 'even');
                foreach ($this->addLooseObjects as $oId => $target) {
                    if ($target === 'all' || $match === $target) {
                        $this->objects[$id]['info']['contents'][] = $oId;
                    }
                }
                break;

            case 'content':
                $o['info']['contents'][] = $options;
                break;

            case 'annot':
                // add an annotation to this page
                if (!isset($o['info']['annot'])) {
                    $o['info']['annot'] = [];
                }

                // $options should contain the id of the annotation dictionary
                $o['info']['annot'][] = $options;
                break;

            case 'out':
                $res = "\n$id 0 obj\n<< /Type /Page";
                if (isset($o['info']['mediaBox'])) {
                    $tmp = $o['info']['mediaBox'];
                    $res .= "\n/MediaBox [" . sprintf(
                            '%.3F %.3F %.3F %.3F',
                            $tmp[0],
                            $tmp[1],
                            $tmp[2],
                            $tmp[3]
                        ) . ']';
                }
                $res .= "\n/Parent " . $o['info']['parent'] . " 0 R";

                if (isset($o['info']['annot'])) {
                    $res .= "\n/Annots [";
                    foreach ($o['info']['annot'] as $aId) {
                        $res .= " $aId 0 R";
                    }
                    $res .= " ]";
                }

                $count = count($o['info']['contents']);
                if ($count == 1) {
                    $res .= "\n/Contents " . $o['info']['contents'][0] . " 0 R";
                } else {
                    if ($count > 1) {
                        $res .= "\n/Contents [\n";

                        // reverse the page contents so added objects are below normal content
                        //foreach (array_reverse($o['info']['contents']) as $cId) {
                        // Back to normal now that I've got transparency working --Benj
                        foreach ($o['info']['contents'] as $cId) {
                            $res .= "$cId 0 R\n";
                        }
                        $res .= "]";
                    }
                }

                $res .= "\n>>\nendobj";

                return $res;
        }

        return null;
    }

    /**
     * the contents objects hold all of the content which appears on pages
     *
     * @param $id
     * @param $action
     * @param string|array $options
     * @return null|string
     */
    protected function o_contents($id, $action, $options = '')
    {
        if ($action !== 'new') {
            $o = &$this->objects[$id];
        }

        switch ($action) {
            case 'new':
                $this->objects[$id] = ['t' => 'contents', 'c' => '', 'info' => []];
                if (mb_strlen($options, '8bit') && intval($options)) {
                    // then this contents is the primary for a page
                    $this->objects[$id]['onPage'] = $options;
                } else {
                    if ($options === 'raw') {
                        // then this page contains some other type of system object
                        $this->objects[$id]['raw'] = 1;
                    }
                }
                break;

            case 'add':
                // add more options to the declaration
                foreach ($options as $k => $v) {
                    $o['info'][$k] = $v;
                }

            case 'out':
                $tmp = $o['c'];
                $res = "\n$id 0 obj\n";

                if (isset($this->objects[$id]['raw'])) {
                    $res .= $tmp;
                } else {
                    $res .= "<<";
                    if ($this->compressionReady && $this->options['compression']) {
                        // then implement ZLIB based compression on this content stream
                        $res .= " /Filter /FlateDecode";
                        $tmp = gzcompress($tmp, 6);
                    }

                    if ($this->encrypted) {
                        $this->encryptInit($id);
                        $tmp = $this->ARC4($tmp);
                    }

                    foreach ($o['info'] as $k => $v) {
                        $res .= "\n/$k $v";
                    }

                    $res .= "\n/Length " . mb_strlen($tmp, '8bit') . " >>\nstream\n$tmp\nendstream";
                }

                $res .= "\nendobj";

                return $res;
        }

        return null;
    }

    /**
     * @param $id
     * @param $action
     * @return string|null
     */
    protected function o_embedjs($id, $action)
    {
        switch ($action) {
            case 'new':
                $this->objects[$id] = [
                    't'    => 'embedjs',
                    'info' => [
                        'Names' => '[(EmbeddedJS) ' . ($id + 1) . ' 0 R]'
                    ]
                ];
                break;

            case 'out':
                $o = &$this->objects[$id];
                $res = "\n$id 0 obj\n<< ";
                foreach ($o['info'] as $k => $v) {
                    $res .= "\n/$k $v";
                }
                $res .= "\n>>\nendobj";

                return $res;
        }

        return null;
    }

    /**
     * @param $id
     * @param $action
     * @param string $code
     * @return null|string
     */
    protected function o_javascript($id, $action, $code = '')
    {
        switch ($action) {
            case 'new':
                $this->objects[$id] = [
                    't'    => 'javascript',
                    'info' => [
                        'S'  => '/JavaScript',
                        'JS' => '(' . $this->filterText($code, true, false) . ')',
                    ]
                ];
                break;

            case 'out':
                $o = &$this->objects[$id];
                $res = "\n$id 0 obj\n<< ";

                foreach ($o['info'] as $k => $v) {
                    $res .= "\n/$k $v";
                }
                $res .= "\n>>\nendobj";

                return $res;
        }

        return null;
    }

    /**
     * an image object, will be an XObject in the document, includes description and data
     *
     * @param $id
     * @param $action
     * @param string $options
     * @return null|string
     */
    protected function o_image($id, $action, $options = '')
    {
        switch ($action) {
            case 'new':
                // make the new object
                $this->objects[$id] = ['t' => 'image', 'data' => &$options['data'], 'info' => []];

                $info =& $this->objects[$id]['info'];

                $info['Type'] = '/XObject';
                $info['Subtype'] = '/Image';
                $info['Width'] = $options['iw'];
                $info['Height'] = $options['ih'];

                if (isset($options['masked']) && $options['masked']) {
                    $info['SMask'] = ($this->numObj - 1) . ' 0 R';
                }

                if (!isset($options['type']) || $options['type'] === 'jpg') {
                    if (!isset($options['channels'])) {
                        $options['channels'] = 3;
                    }

                    switch ($options['channels']) {
                        case 1:
                            $info['ColorSpace'] = '/DeviceGray';
                            break;
                        case 4:
                            $info['ColorSpace'] = '/DeviceCMYK';
                            break;
                        default:
                            $info['ColorSpace'] = '/DeviceRGB';
                            break;
                    }

                    if ($info['ColorSpace'] === '/DeviceCMYK') {
                        $info['Decode'] = '[1 0 1 0 1 0 1 0]';
                    }

                    $info['Filter'] = '/DCTDecode';
                    $info['BitsPerComponent'] = 8;
                } else {
                    if ($options['type'] === 'png') {
                        $info['Filter'] = '/FlateDecode';
                        $info['DecodeParms'] = '<< /Predictor 15 /Colors ' . $options['ncolor'] . ' /Columns ' . $options['iw'] . ' /BitsPerComponent ' . $options['bitsPerComponent'] . '>>';

                        if ($options['isMask']) {
                            $info['ColorSpace'] = '/DeviceGray';
                        } else {
                            if (mb_strlen($options['pdata'], '8bit')) {
                                $tmp = ' [ /Indexed /DeviceRGB ' . (mb_strlen($options['pdata'], '8bit') / 3 - 1) . ' ';
                                $this->numObj++;
                                $this->o_contents($this->numObj, 'new');
                                $this->objects[$this->numObj]['c'] = $options['pdata'];
                                $tmp .= $this->numObj . ' 0 R';
                                $tmp .= ' ]';
                                $info['ColorSpace'] = $tmp;

                                if (isset($options['transparency'])) {
                                    $transparency = $options['transparency'];
                                    switch ($transparency['type']) {
                                        case 'indexed':
                                            $tmp = ' [ ' . $transparency['data'] . ' ' . $transparency['data'] . '] ';
                                            $info['Mask'] = $tmp;
                                            break;

                                        case 'color-key':
                                            $tmp = ' [ ' .
                                                $transparency['r'] . ' ' . $transparency['r'] .
                                                $transparency['g'] . ' ' . $transparency['g'] .
                                                $transparency['b'] . ' ' . $transparency['b'] .
                                                ' ] ';
                                            $info['Mask'] = $tmp;
                                            break;
                                    }
                                }
                            } else {
                                if (isset($options['transparency'])) {
                                    $transparency = $options['transparency'];

                                    switch ($transparency['type']) {
                                        case 'indexed':
                                            $tmp = ' [ ' . $transparency['data'] . ' ' . $transparency['data'] . '] ';
                                            $info['Mask'] = $tmp;
                                            break;

                                        case 'color-key':
                                            $tmp = ' [ ' .
                                                $transparency['r'] . ' ' . $transparency['r'] . ' ' .
                                                $transparency['g'] . ' ' . $transparency['g'] . ' ' .
                                                $transparency['b'] . ' ' . $transparency['b'] .
                                                ' ] ';
                                            $info['Mask'] = $tmp;
                                            break;
                                    }
                                }
                                $info['ColorSpace'] = '/' . $options['color'];
                            }
                        }

                        $info['BitsPerComponent'] = $options['bitsPerComponent'];
                    }
                }

                // assign it a place in the named resource dictionary as an external object, according to
                // the label passed in with it.
                $this->o_pages($this->currentNode, 'xObject', ['label' => $options['label'], 'objNum' => $id]);

                // also make sure that we have the right procset object for it.
                $this->o_procset($this->procsetObjectId, 'add', 'ImageC');
                break;

            case 'out':
                $o = &$this->objects[$id];
                $tmp = &$o['data'];
                $res = "\n$id 0 obj\n<<";

                foreach ($o['info'] as $k => $v) {
                    $res .= "\n/$k $v";
                }

                if ($this->encrypted) {
                    $this->encryptInit($id);
                    $tmp = $this->ARC4($tmp);
                }

                $res .= "\n/Length " . mb_strlen($tmp, '8bit') . ">>\nstream\n$tmp\nendstream\nendobj";

                return $res;
        }

        return null;
    }

    /**
     * graphics state object
     *
     * @param $id
     * @param $action
     * @param string $options
     * @return null|string
     */
    protected function o_extGState($id, $action, $options = "")
    {
        static $valid_params = [
            "LW",
            "LC",
            "LC",
            "LJ",
            "ML",
            "D",
            "RI",
            "OP",
            "op",
            "OPM",
            "Font",
            "BG",
            "BG2",
            "UCR",
            "TR",
            "TR2",
            "HT",
            "FL",
            "SM",
            "SA",
            "BM",
            "SMask",
            "CA",
            "ca",
            "AIS",
            "TK"
        ];

        switch ($action) {
            case "new":
                $this->objects[$id] = ['t' => 'extGState', 'info' => $options];

                // Tell the pages about the new resource
                $this->numStates++;
                $this->o_pages($this->currentNode, 'extGState', ["objNum" => $id, "stateNum" => $this->numStates]);
                break;

            case "out":
                $o = &$this->objects[$id];
                $res = "\n$id 0 obj\n<< /Type /ExtGState\n";

                foreach ($o["info"] as $k => $v) {
                    if (!in_array($k, $valid_params)) {
                        continue;
                    }
                    $res .= "/$k $v\n";
                }

                $res .= ">>\nendobj";

                return $res;
        }

        return null;
    }

    /**
     * @param integer $id
     * @param string $action
     * @param mixed $options
     * @return string
     */
    protected function o_xobject($id, $action, $options = '')
    {
        switch ($action) {
            case 'new':
                $this->objects[$id] = ['t' => 'xobject', 'info' => $options, 'c' => ''];
                break;

            case 'procset':
                $this->objects[$id]['procset'] = $options;
                break;

            case 'font':
                $this->objects[$id]['fonts'][$options['fontNum']] = [
                  'objNum' => $options['objNum'],
                  'fontNum' => $options['fontNum']
                ];
                break;

            case 'xObject':
                $this->objects[$id]['xObjects'][] = ['objNum' => $options['objNum'], 'label' => $options['label']];
                break;

            case 'out':
                $o = &$this->objects[$id];
                $res = "\n$id 0 obj\n<< /Type /XObject\n";

                foreach ($o["info"] as $k => $v) {
                    switch ($k) {
                        case 'Subtype':
                            $res .= "/Subtype /$v\n";
                            break;
                        case 'bbox':
                            $res .= "/BBox [";
                            foreach ($v as $value) {
                                $res .= sprintf("%.4F ", $value);
                            }
                            $res .= "]\n";
                            break;
                        default:
                            $res .= "/$k $v\n";
                            break;
                    }
                }
                $res .= "/Matrix[1.0 0.0 0.0 1.0 0.0 0.0]\n";

                $res .= "/Resources <<";
                if (isset($o['procset'])) {
                    $res .= "\n/ProcSet " . $o['procset'] . " 0 R";
                } else {
                    $res .= "\n/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]";
                }
                if (isset($o['fonts']) && count($o['fonts'])) {
                    $res .= "\n/Font << ";
                    foreach ($o['fonts'] as $finfo) {
                        $res .= "\n/F" . $finfo['fontNum'] . " " . $finfo['objNum'] . " 0 R";
                    }
                    $res .= "\n>>";
                }
                if (isset($o['xObjects']) && count($o['xObjects'])) {
                    $res .= "\n/XObject << ";
                    foreach ($o['xObjects'] as $finfo) {
                        $res .= "\n/" . $finfo['label'] . " " . $finfo['objNum'] . " 0 R";
                    }
                    $res .= "\n>>";
                }
                $res .= "\n>>\n";

                $tmp = $o["c"];
                if ($this->compressionReady && $this->options['compression']) {
                    // then implement ZLIB based compression on this content stream
                    $res .= " /Filter /FlateDecode\n";
                    $tmp = gzcompress($tmp, 6);
                }

                if ($this->encrypted) {
                    $this->encryptInit($id);
                    $tmp = $this->ARC4($tmp);
                }

                $res .= "/Length " . mb_strlen($tmp, '8bit') . " >>\n";
                $res .= "stream\n" . $tmp . "\nendstream" . "\nendobj";

                return $res;
        }

        return null;
    }

    /**
     * @param $id
     * @param $action
     * @param string $options
     * @return null|string
     */
    protected function o_acroform($id, $action, $options = '')
    {
        switch ($action) {
            case "new":
                $this->o_catalog($this->catalogId, 'acroform', $id);
                $this->objects[$id] = array('t' => 'acroform', 'info' => $options);
                break;

            case 'addfield':
                $this->objects[$id]['info']['Fields'][] = $options;
                break;

            case 'font':
                $this->objects[$id]['fonts'][$options['fontNum']] = [
                  'objNum' => $options['objNum'],
                  'fontNum' => $options['fontNum']
                ];
                break;

            case "out":
                $o = &$this->objects[$id];
                $res = "\n$id 0 obj\n<<";

                foreach ($o["info"] as $k => $v) {
                    switch ($k) {
                        case 'Fields':
                            $res .= " /Fields [";
                            foreach ($v as $i) {
                                $res .= "$i 0 R ";
                            }
                            $res .= "]\n";
                            break;
                        default:
                            $res .= "/$k $v\n";
                    }
                }

                $res .= "/DR <<\n";
                if (isset($o['fonts']) && count($o['fonts'])) {
                    $res .= "/Font << \n";
                    foreach ($o['fonts'] as $finfo) {
                        $res .= "/F" . $finfo['fontNum'] . " " . $finfo['objNum'] . " 0 R\n";
                    }
                    $res .= ">>\n";
                }
                $res .= ">>\n";

                $res .= ">>\nendobj";

                return $res;
        }

        return null;
    }

    /**
     * @param $id
     * @param $action
     * @param mixed $options
     * @return null|string
     */
    protected function o_field($id, $action, $options = '')
    {
        switch ($action) {
            case "new":
                $this->o_page($options['pageid'], 'annot', $id);
                $this->o_acroform($this->acroFormId, 'addfield', $id);
                $this->objects[$id] = ['t' => 'field', 'info' => $options];
                break;

            case 'set':
                $this->objects[$id]['info'] = array_merge($this->objects[$id]['info'], $options);
                break;

            case "out":
                $o = &$this->objects[$id];
                $res = "\n$id 0 obj\n<< /Type /Annot /Subtype /Widget \n";

                $encrypted = $this->encrypted;
                if ($encrypted) {
                    $this->encryptInit($id);
                }

                foreach ($o["info"] as $k => $v) {
                    switch ($k) {
                        case 'pageid':
                            $res .= "/P $v 0 R\n";
                            break;
                        case 'value':
                            if ($encrypted) {
                                $v = $this->filterText($this->ARC4($v), false, false);
                            }
                            $res .= "/V ($v)\n";
                            break;
                        case 'refvalue':
                            $res .= "/V $v 0 R\n";
                            break;
                        case 'da':
                            if ($encrypted) {
                                $v = $this->filterText($this->ARC4($v), false, false);
                            }
                            $res .= "/DA ($v)\n";
                            break;
                        case 'options':
                            $res .= "/Opt [\n";
                            foreach ($v as $opt) {
                                if ($encrypted) {
                                    $opt = $this->filterText($this->ARC4($opt), false, false);
                                }
                                $res .= "($opt)\n";
                            }
                            $res .= "]\n";
                            break;
                        case 'rect':
                            $res .= "/Rect [";
                            foreach ($v as $value) {
                                $res .= sprintf("%.4F ", $value);
                            }
                            $res .= "]\n";
                            break;
                        case 'appearance':
                            $res .= "/AP << ";
                            foreach ($v as $a => $ref) {
                                $res .= "/$a $ref 0 R ";
                            }
                            $res .= ">>\n";
                            break;
                        case 'T':
                            if ($encrypted) {
                                $v = $this->filterText($this->ARC4($v), false, false);
                            }
                            $res .= "/T ($v)\n";
                            break;
                        default:
                            $res .= "/$k $v\n";
                    }

                }

                $res .= ">>\nendobj";

                return $res;
        }

        return null;
    }

    /**
     *
     * @param $id
     * @param $action
     * @param string $options
     * @return null|string
     */
    protected function o_sig($id, $action, $options = '')
    {
        $sign_maxlen = $this->signatureMaxLen;

        switch ($action) {
            case "new":
                $this->objects[$id] = array('t' => 'sig', 'info' => $options);
                $this->byteRange[$id] = ['t' => 'sig'];
                break;

            case 'byterange':
                $o = &$this->objects[$id];
                $content =& $options['content'];
                $content_len = strlen($content);
                $pos = strpos($content, sprintf("/ByteRange [ %'.010d", $id));
                $len = strlen('/ByteRange [ ********** ********** ********** ********** ]');
                $rangeStartPos = $pos + $len + 1 + 10; // before '<'
                $content = substr_replace($content, str_pad(sprintf('/ByteRange [ 0 %u %u %u ]', $rangeStartPos, $rangeStartPos + $sign_maxlen + 2, $content_len - 2 - $sign_maxlen - $rangeStartPos), $len, ' ', STR_PAD_RIGHT), $pos, $len);

                $fuid = uniqid();
                $tmpInput = $this->tmp . "/pkcs7.tmp." . $fuid . '.in';
                $tmpOutput = $this->tmp . "/pkcs7.tmp." . $fuid . '.out';

                if (file_put_contents($tmpInput, substr($content, 0, $rangeStartPos)) === false) {
                    throw new \Exception("Unable to write temporary file for signing.");
                }
                if (file_put_contents($tmpInput, substr($content, $rangeStartPos + 2 + $sign_maxlen),
                    FILE_APPEND) === false) {
                    throw new \Exception("Unable to write temporary file for signing.");
                }

                if (openssl_pkcs7_sign($tmpInput, $tmpOutput,
                    $o['info']['SignCert'],
                    array($o['info']['PrivKey'], $o['info']['Password']),
                    array(), PKCS7_BINARY | PKCS7_DETACHED) === false) {
                    throw new \Exception("Failed to prepare signature.");
                }

                $signature = file_get_contents($tmpOutput);

                unlink($tmpInput);
                unlink($tmpOutput);

                $sign = substr($signature, (strpos($signature, "%%EOF\n\n------") + 13));
                list($head, $signature) = explode("\n\n", $sign);

                $signature = base64_decode(trim($signature));

                $signature = current(unpack('H*', $signature));
                $signature = str_pad($signature, $sign_maxlen, '0');
                $siglen = strlen($signature);
                if (strlen($signature) > $sign_maxlen) {
                    throw new \Exception("Signature length ($siglen) exceeds the $sign_maxlen limit.");
                }

                $content = substr_replace($content, $signature, $rangeStartPos + 1, $sign_maxlen);
                break;

            case "out":
                $res = "\n$id 0 obj\n<<\n";

                $encrypted = $this->encrypted;
                if ($encrypted) {
                    $this->encryptInit($id);
                }

                $res .= "/ByteRange " .sprintf("[ %'.010d ********** ********** ********** ]\n", $id);
                $res .= "/Contents <" . str_pad('', $sign_maxlen, '0') . ">\n";
                $res .= "/Filter/Adobe.PPKLite\n"; //PPKMS \n";
                $res .= "/Type/Sig/SubFilter/adbe.pkcs7.detached \n";

                $date = "D:" . substr_replace(date('YmdHisO'), '\'', -2, 0) . '\'';
                if ($encrypted) {
                    $date = $this->ARC4($date);
                }

                $res .= "/M ($date)\n";
                $res .= "/Prop_Build << /App << /Name /DomPDF >> /Filter << /Name /Adobe.PPKLite >> >>\n";

                $o = &$this->objects[$id];
                foreach ($o['info'] as $k => $v) {
                    switch ($k) {
                        case 'Name':
                        case 'Location':
                        case 'Reason':
                        case 'ContactInfo':
                            if ($v !== null && $v !== '') {
                                $res .= "/$k (" .
                                  ($encrypted ? $this->filterText($this->ARC4($v), false, false) : $v) . ") \n";
                            }
                            break;
                    }
                }
                $res .= ">>\nendobj";

                return $res;
        }

        return null;
    }

    /**
     * encryption object.
     *
     * @param $id
     * @param $action
     * @param string $options
     * @return string|null
     */
    protected function o_encryption($id, $action, $options = '')
    {
        switch ($action) {
            case 'new':
                // make the new object
                $this->objects[$id] = ['t' => 'encryption', 'info' => $options];
                $this->arc4_objnum = $id;
                break;

            case 'keys':
                // figure out the additional parameters required
                $pad = chr(0x28) . chr(0xBF) . chr(0x4E) . chr(0x5E) . chr(0x4E) . chr(0x75) . chr(0x8A) . chr(0x41)
                    . chr(0x64) . chr(0x00) . chr(0x4E) . chr(0x56) . chr(0xFF) . chr(0xFA) . chr(0x01) . chr(0x08)
                    . chr(0x2E) . chr(0x2E) . chr(0x00) . chr(0xB6) . chr(0xD0) . chr(0x68) . chr(0x3E) . chr(0x80)
                    . chr(0x2F) . chr(0x0C) . chr(0xA9) . chr(0xFE) . chr(0x64) . chr(0x53) . chr(0x69) . chr(0x7A);

                $info = $this->objects[$id]['info'];

                $len = mb_strlen($info['owner'], '8bit');

                if ($len > 32) {
                    $owner = substr($info['owner'], 0, 32);
                } else {
                    if ($len < 32) {
                        $owner = $info['owner'] . substr($pad, 0, 32 - $len);
                    } else {
                        $owner = $info['owner'];
                    }
                }

                $len = mb_strlen($info['user'], '8bit');
                if ($len > 32) {
                    $user = substr($info['user'], 0, 32);
                } else {
                    if ($len < 32) {
                        $user = $info['user'] . substr($pad, 0, 32 - $len);
                    } else {
                        $user = $info['user'];
                    }
                }

                $tmp = $this->md5_16($owner);
                $okey = substr($tmp, 0, 5);
                $this->ARC4_init($okey);
                $ovalue = $this->ARC4($user);
                $this->objects[$id]['info']['O'] = $ovalue;

                // now make the u value, phew.
                $tmp = $this->md5_16(
                    $user . $ovalue . chr($info['p']) . chr(255) . chr(255) . chr(255) . hex2bin($this->fileIdentifier)
                );

                $ukey = substr($tmp, 0, 5);
                $this->ARC4_init($ukey);
                $this->encryptionKey = $ukey;
                $this->encrypted = true;
                $uvalue = $this->ARC4($pad);
                $this->objects[$id]['info']['U'] = $uvalue;
                // initialize the arc4 array
                break;

            case 'out':
                $o = &$this->objects[$id];

                $res = "\n$id 0 obj\n<<";
                $res .= "\n/Filter /Standard";
                $res .= "\n/V 1";
                $res .= "\n/R 2";
                $res .= "\n/O (" . $this->filterText($o['info']['O'], false, false) . ')';
                $res .= "\n/U (" . $this->filterText($o['info']['U'], false, false) . ')';
                // and the p-value needs to be converted to account for the twos-complement approach
                $o['info']['p'] = (($o['info']['p'] ^ 255) + 1) * -1;
                $res .= "\n/P " . ($o['info']['p']);
                $res .= "\n>>\nendobj";

                return $res;
        }

        return null;
    }

    protected function o_indirect_references($id, $action, $options = null)
    {
        switch ($action) {
            case 'new':
            case 'add':
                if ($id === 0) {
                    $id = ++$this->numObj;
                    $this->o_catalog($this->catalogId, 'names', $id);
                    $this->objects[$id] = ['t' => 'indirect_references', 'info' => $options];
                    $this->indirectReferenceId = $id;
                } else {
                    $this->objects[$id]['info'] = array_merge($this->objects[$id]['info'], $options);
                }
                break;
            case 'out':
                $res = "\n$id 0 obj << ";

                foreach ($this->objects[$id]['info'] as $referenceObjName => $referenceObjId) {
                    $res .= "/$referenceObjName $referenceObjId 0 R ";
                }

                $res .= ">> endobj";
                return $res;
        }

        return null;
    }

    protected function o_names($id, $action, $options = null)
    {
        switch ($action) {
            case 'new':
            case 'add':
                if ($id === 0) {
                    $id = ++$this->numObj;
                    $this->objects[$id] = ['t' => 'names', 'info' => [$options]];
                    $this->o_indirect_references($this->indirectReferenceId, 'add', ['EmbeddedFiles' => $id]);
                    $this->embeddedFilesId = $id;
                } else {
                    $this->objects[$id]['info'][] = $options;
                }
                break;
            case 'out':
                $info = &$this->objects[$id]['info'];
                $res = '';
                if (count($info) > 0) {
                    $res = "\n$id 0 obj << /Names [ ";

                    if ($this->encrypted) {
                        $this->encryptInit($id);
                    }

                    foreach ($info as $entry) {
                        if ($this->encrypted) {
                            $filename = $this->ARC4($entry['filename']);
                        } else {
                            $filename = $entry['filename'];
                        }

                        $res .= "($filename) " . $entry['dict_reference'] . " 0 R ";
                    }

                    $res .= "] >> endobj";
                }
                return $res;
        }

        return null;
    }

    protected function o_embedded_file_dictionary($id, $action, $options = null)
    {
        switch ($action) {
            case 'new':
                $embeddedFileId = ++$this->numObj;
                $options['embedded_reference'] = $embeddedFileId;
                $this->objects[$id] = ['t' => 'embedded_file_dictionary', 'info' => $options];
                $this->o_embedded_file($embeddedFileId, 'new', $options);
                $options['dict_reference'] = $id;
                $this->o_names($this->embeddedFilesId, 'add', $options);
                break;
            case 'out':
                $info = &$this->objects[$id]['info'];
                $filename = $this->utf8toUtf16BE($info['filename']);
                $description = $this->utf8toUtf16BE($info['description']);

                if ($this->encrypted) {
                    $this->encryptInit($id);
                    $filename = $this->ARC4($filename);
                    $description = $this->ARC4($description);
                }

                $filename = $this->filterText($filename, false, false);
                $description = $this->filterText($description, false, false);

                $res = "\n$id 0 obj <</Type /Filespec /EF";
                $res .= " <</F " . $info['embedded_reference'] . " 0 R >>";
                $res .= " /F ($filename) /UF ($filename) /Desc ($description)";
                $res .= " >> endobj";
                return $res;
        }

        return null;
    }

    protected function o_embedded_file($id, $action, $options = null): ?string
    {
        switch ($action) {
            case 'new':
                $this->objects[$id] = ['t' => 'embedded_file', 'info' => $options];
                break;
            case 'out':
                $info = &$this->objects[$id]['info'];

                if ($this->compressionReady) {
                    $filepath = $info['filepath'];
                    $checksum = md5_file($filepath);
                    $f = fopen($filepath, "rb");

                    $file_content_compressed = '';
                    $deflateContext = deflate_init(ZLIB_ENCODING_DEFLATE, ['level' => 6]);
                    while (($block = fread($f, 8192))) {
                        $file_content_compressed .= deflate_add($deflateContext, $block, ZLIB_NO_FLUSH);
                    }
                    $file_content_compressed .= deflate_add($deflateContext, '', ZLIB_FINISH);
                    $file_size_uncompressed = ftell($f);
                    fclose($f);
                } else {
                    $file_content = file_get_contents($info['filepath']);
                    $file_size_uncompressed = mb_strlen($file_content, '8bit');
                    $checksum = md5($file_content);
                }

                if ($this->encrypted) {
                    $this->encryptInit($id);
                    $checksum = $this->ARC4($checksum);
                    $file_content_compressed = $this->ARC4($file_content_compressed);
                }
                $file_size_compressed = mb_strlen($file_content_compressed, '8bit');

                $res = "\n$id 0 obj <</Params <</Size $file_size_uncompressed /CheckSum ($checksum) >>" .
                    " /Type/EmbeddedFile /Filter/FlateDecode" .
                    " /Length $file_size_compressed >> stream\n$file_content_compressed\nendstream\nendobj";

                return $res;
        }

        return null;
    }

    /**
     * ARC4 functions
     * A series of function to implement ARC4 encoding in PHP
     */

    /**
     * calculate the 16 byte version of the 128 bit md5 digest of the string
     *
     * @param $string
     * @return string
     */
    function md5_16($string)
    {
        $tmp = md5($string);
        $out = '';
        for ($i = 0; $i <= 30; $i = $i + 2) {
            $out .= chr(hexdec(substr($tmp, $i, 2)));
        }

        return $out;
    }

    /**
     * initialize the encryption for processing a particular object
     *
     * @param $id
     */
    function encryptInit($id)
    {
        $tmp = $this->encryptionKey;
        $hex = dechex($id);
        if (mb_strlen($hex, '8bit') < 6) {
            $hex = substr('000000', 0, 6 - mb_strlen($hex, '8bit')) . $hex;
        }
        $tmp .= chr(hexdec(substr($hex, 4, 2)))
            . chr(hexdec(substr($hex, 2, 2)))
            . chr(hexdec(substr($hex, 0, 2)))
            . chr(0)
            . chr(0)
        ;
        $key = $this->md5_16($tmp);
        $this->ARC4_init(substr($key, 0, 10));
    }

    /**
     * initialize the ARC4 encryption
     *
     * @param string $key
     */
    function ARC4_init($key = '')
    {
        $this->arc4 = '';

        // setup the control array
        if (mb_strlen($key, '8bit') == 0) {
            return;
        }

        $k = '';
        while (mb_strlen($k, '8bit') < 256) {
            $k .= $key;
        }

        $k = substr($k, 0, 256);
        for ($i = 0; $i < 256; $i++) {
            $this->arc4 .= chr($i);
        }

        $j = 0;

        for ($i = 0; $i < 256; $i++) {
            $t = $this->arc4[$i];
            $j = ($j + ord($t) + ord($k[$i])) % 256;
            $this->arc4[$i] = $this->arc4[$j];
            $this->arc4[$j] = $t;
        }
    }

    /**
     * ARC4 encrypt a text string
     *
     * @param $text
     * @return string
     */
    function ARC4($text)
    {
        $len = mb_strlen($text, '8bit');
        $a = 0;
        $b = 0;
        $c = $this->arc4;
        $out = '';
        for ($i = 0; $i < $len; $i++) {
            $a = ($a + 1) % 256;
            $t = $c[$a];
            $b = ($b + ord($t)) % 256;
            $c[$a] = $c[$b];
            $c[$b] = $t;
            $k = ord($c[(ord($c[$a]) + ord($c[$b])) % 256]);
            $out .= chr(ord($text[$i]) ^ $k);
        }

        return $out;
    }

    /**
     * functions which can be called to adjust or add to the document
     */

    /**
     * add a link in the document to an external URL
     *
     * @param $url
     * @param $x0
     * @param $y0
     * @param $x1
     * @param $y1
     */
    function addLink($url, $x0, $y0, $x1, $y1)
    {
        $this->numObj++;
        $info = ['type' => 'link', 'url' => $url, 'rect' => [$x0, $y0, $x1, $y1]];
        $this->o_annotation($this->numObj, 'new', $info);
    }

    /**
     * add a link in the document to an internal destination (ie. within the document)
     *
     * @param $label
     * @param $x0
     * @param $y0
     * @param $x1
     * @param $y1
     */
    function addInternalLink($label, $x0, $y0, $x1, $y1)
    {
        $this->numObj++;
        $info = ['type' => 'ilink', 'label' => $label, 'rect' => [$x0, $y0, $x1, $y1]];
        $this->o_annotation($this->numObj, 'new', $info);
    }

    /**
     * set the encryption of the document
     * can be used to turn it on and/or set the passwords which it will have.
     * also the functions that the user will have are set here, such as print, modify, add
     *
     * @param string $userPass
     * @param string $ownerPass
     * @param array $pc
     */
    function setEncryption($userPass = '', $ownerPass = '', $pc = [])
    {
        $p = bindec("11000000");

        $options = ['print' => 4, 'modify' => 8, 'copy' => 16, 'add' => 32];

        foreach ($pc as $k => $v) {
            if ($v && isset($options[$k])) {
                $p += $options[$k];
            } else {
                if (isset($options[$v])) {
                    $p += $options[$v];
                }
            }
        }

        // implement encryption on the document
        if ($this->arc4_objnum == 0) {
            // then the block does not exist already, add it.
            $this->numObj++;
            if (mb_strlen($ownerPass) == 0) {
                $ownerPass = $userPass;
            }

            $this->o_encryption($this->numObj, 'new', ['user' => $userPass, 'owner' => $ownerPass, 'p' => $p]);
        }
    }

    /**
     * should be used for internal checks, not implemented as yet
     */
    function checkAllHere()
    {
    }

    /**
     * return the pdf stream as a string returned from the function
     *
     * @param bool $debug
     * @return string
     */
    function output($debug = false)
    {
        if ($debug) {
            // turn compression off
            $this->options['compression'] = false;
        }

        if ($this->javascript) {
            $this->numObj++;

            $js_id = $this->numObj;
            $this->o_embedjs($js_id, 'new');
            $this->o_javascript(++$this->numObj, 'new', $this->javascript);

            $id = $this->catalogId;

            $this->o_indirect_references($this->indirectReferenceId, 'add', ['JavaScript' => $js_id]);
        }

        if ($this->fileIdentifier === '') {
            $tmp = implode('', $this->objects[$this->infoObject]['info']);
            $this->fileIdentifier = md5('DOMPDF' . __FILE__ . $tmp . microtime() . mt_rand());
        }

        if ($this->arc4_objnum) {
            $this->o_encryption($this->arc4_objnum, 'keys');
            $this->ARC4_init($this->encryptionKey);
        }

        $this->checkAllHere();

        $xref = [];
        $content = '%PDF-' . self::PDF_VERSION;
        $pos = mb_strlen($content, '8bit');

        // pre-process o_font objects before output of all objects
        foreach ($this->objects as $k => $v) {
            if ($v['t'] === 'font') {
                $this->o_font($k, 'add');
            }
        }

        foreach ($this->objects as $k => $v) {
            $tmp = 'o_' . $v['t'];
            $cont = $this->$tmp($k, 'out');
            $content .= $cont;
            $xref[] = $pos + 1; //+1 to account for \n at the start of each object
            $pos += mb_strlen($cont, '8bit');
        }

        $content .= "\nxref\n0 " . (count($xref) + 1) . "\n0000000000 65535 f \n";

        foreach ($xref as $p) {
            $content .= str_pad($p, 10, "0", STR_PAD_LEFT) . " 00000 n \n";
        }

        $content .= "trailer\n<<\n" .
            '/Size ' . (count($xref) + 1) . "\n" .
            '/Root 1 0 R' . "\n" .
            '/Info ' . $this->infoObject . " 0 R\n"
        ;

        // if encryption has been applied to this document then add the marker for this dictionary
        if ($this->arc4_objnum > 0) {
            $content .= '/Encrypt ' . $this->arc4_objnum . " 0 R\n";
        }

        $content .= '/ID[<' . $this->fileIdentifier . '><' . $this->fileIdentifier . ">]\n";

        // account for \n added at start of xref table
        $pos++;

        $content .= ">>\nstartxref\n$pos\n%%EOF\n";

        if (count($this->byteRange) > 0) {
            foreach ($this->byteRange as $k => $v) {
                $tmp = 'o_' . $v['t'];
                $this->$tmp($k, 'byterange', ['content' => &$content]);
            }
        }

        return $content;
    }

    /**
     * initialize a new document
     * if this is called on an existing document results may be unpredictable, but the existing document would be lost at minimum
     * this function is called automatically by the constructor function
     *
     * @param array $pageSize
     */
    private function newDocument($pageSize = [0, 0, 612, 792])
    {
        $this->numObj = 0;
        $this->objects = [];

        $this->numObj++;
        $this->o_catalog($this->numObj, 'new');

        $this->numObj++;
        $this->o_outlines($this->numObj, 'new');

        $this->numObj++;
        $this->o_pages($this->numObj, 'new');

        $this->o_pages($this->numObj, 'mediaBox', $pageSize);
        $this->currentNode = 3;

        $this->numObj++;
        $this->o_procset($this->numObj, 'new');

        $this->numObj++;
        $this->o_info($this->numObj, 'new');

        $this->numObj++;
        $this->o_page($this->numObj, 'new');

        // need to store the first page id as there is no way to get it to the user during
        // startup
        $this->firstPageId = $this->currentContents;
    }

    /**
     * open the font file and return a php structure containing it.
     * first check if this one has been done before and saved in a form more suited to php
     * note that if a php serialized version does not exist it will try and make one, but will
     * require write access to the directory to do it... it is MUCH faster to have these serialized
     * files.
     *
     * @param $font
     */
    private function openFont($font)
    {
        // assume that $font contains the path and file but not the extension
        $name = basename($font);
        $dir = dirname($font);

        $fontcache = $this->fontcache;
        if ($fontcache == '') {
            $fontcache = $dir;
        }

        //$name       filename without folder and extension of font metrics
        //$dir        folder of font metrics
        //$fontcache  folder of runtime created php serialized version of font metrics.
        //            If this is not given, the same folder as the font metrics will be used.
        //            Storing and reusing serialized versions improves speed much

        $this->addMessage("openFont: $font - $name");

        if (!$this->isUnicode || in_array(mb_strtolower(basename($name)), self::$coreFonts)) {
            $metrics_name = "$name.afm";
        } else {
            $metrics_name = "$name.ufm";
        }

        $cache_name = "$metrics_name.json";
        $this->addMessage("metrics: $metrics_name, cache: $cache_name");

        if (file_exists($fontcache . '/' . $cache_name)) {
            $this->addMessage("openFont: json metrics file exists $fontcache/$cache_name");
            $cached_font_info = json_decode(file_get_contents($fontcache . '/' . $cache_name), true);
            if (!isset($cached_font_info['_version_']) || $cached_font_info['_version_'] != $this->fontcacheVersion) {
                $this->addMessage('openFont: font cache is out of date, regenerating');
            } else {
                $this->fonts[$font] = $cached_font_info;
            }
        }

        if (!isset($this->fonts[$font]) && file_exists("$dir/$metrics_name")) {
            // then rebuild the php_<font>.afm file from the <font>.afm file
            $this->addMessage("openFont: build php file from $dir/$metrics_name");
            $data = [];

            // 20 => 'space'
            $data['codeToName'] = [];

            // Since we're not going to enable Unicode for the core fonts we need to use a font-based
            // setting for Unicode support rather than a global setting.
            $data['isUnicode'] = (strtolower(substr($metrics_name, -3)) !== 'afm');

            $cidtogid = '';
            if ($data['isUnicode']) {
                $cidtogid = str_pad('', 256 * 256 * 2, "\x00");
            }

            $file = file("$dir/$metrics_name");

            foreach ($file as $rowA) {
                $row = trim($rowA);
                $pos = strpos($row, ' ');

                if ($pos) {
                    // then there must be some keyword
                    $key = substr($row, 0, $pos);
                    switch ($key) {
                        case 'FontName':
                        case 'FullName':
                        case 'FamilyName':
                        case 'PostScriptName':
                        case 'Weight':
                        case 'ItalicAngle':
                        case 'IsFixedPitch':
                        case 'CharacterSet':
                        case 'UnderlinePosition':
                        case 'UnderlineThickness':
                        case 'Version':
                        case 'EncodingScheme':
                        case 'CapHeight':
                        case 'XHeight':
                        case 'Ascender':
                        case 'Descender':
                        case 'StdHW':
                        case 'StdVW':
                        case 'StartCharMetrics':
                        case 'FontHeightOffset': // OAR - Added so we can offset the height calculation of a Windows font.  Otherwise it's too big.
                            $data[$key] = trim(substr($row, $pos));
                            break;

                        case 'FontBBox':
                            $data[$key] = explode(' ', trim(substr($row, $pos)));
                            break;

                        //C 39 ; WX 222 ; N quoteright ; B 53 463 157 718 ;
                        case 'C': // Found in AFM files
                            $bits = explode(';', trim($row));
                            $dtmp = ['C' => null, 'N' => null, 'WX' => null, 'B' => []];

                            foreach ($bits as $bit) {
                                $bits2 = explode(' ', trim($bit));
                                if (mb_strlen($bits2[0], '8bit') == 0) {
                                    continue;
                                }

                                if (count($bits2) > 2) {
                                    $dtmp[$bits2[0]] = [];
                                    for ($i = 1; $i < count($bits2); $i++) {
                                        $dtmp[$bits2[0]][] = $bits2[$i];
                                    }
                                } else {
                                    if (count($bits2) == 2) {
                                        $dtmp[$bits2[0]] = $bits2[1];
                                    }
                                }
                            }

                            $c = (int)$dtmp['C'];
                            $n = $dtmp['N'];
                            $width = floatval($dtmp['WX']);

                            if ($c >= 0) {
                                if (!ctype_xdigit($n) || $c != hexdec($n)) {
                                    $data['codeToName'][$c] = $n;
                                }
                                $data['C'][$c] = $width;
                            } elseif (isset($n)) {
                                $data['C'][$n] = $width;
                            }

                            if (!isset($data['MissingWidth']) && $c === -1 && $n === '.notdef') {
                                $data['MissingWidth'] = $width;
                            }

                            break;

                        // U 827 ; WX 0 ; N squaresubnosp ; G 675 ;
                        case 'U': // Found in UFM files
                            if (!$data['isUnicode']) {
                                break;
                            }

                            $bits = explode(';', trim($row));
                            $dtmp = ['G' => null, 'N' => null, 'U' => null, 'WX' => null];

                            foreach ($bits as $bit) {
                                $bits2 = explode(' ', trim($bit));
                                if (mb_strlen($bits2[0], '8bit') === 0) {
                                    continue;
                                }

                                if (count($bits2) > 2) {
                                    $dtmp[$bits2[0]] = [];
                                    for ($i = 1; $i < count($bits2); $i++) {
                                        $dtmp[$bits2[0]][] = $bits2[$i];
                                    }
                                } else {
                                    if (count($bits2) == 2) {
                                        $dtmp[$bits2[0]] = $bits2[1];
                                    }
                                }
                            }

                            $c = (int)$dtmp['U'];
                            $n = $dtmp['N'];
                            $glyph = $dtmp['G'];
                            $width = floatval($dtmp['WX']);

                            if ($c >= 0) {
                                // Set values in CID to GID map
                                if ($c >= 0 && $c < 0xFFFF && $glyph) {
                                    $cidtogid[$c * 2] = chr($glyph >> 8);
                                    $cidtogid[$c * 2 + 1] = chr($glyph & 0xFF);
                                }

                                if (!ctype_xdigit($n) || $c != hexdec($n)) {
                                    $data['codeToName'][$c] = $n;
                                }
                                $data['C'][$c] = $width;
                            } elseif (isset($n)) {
                                $data['C'][$n] = $width;
                            }

                            if (!isset($data['MissingWidth']) && $c === -1 && $n === '.notdef') {
                                $data['MissingWidth'] = $width;
                            }

                            break;

                        case 'KPX':
                            break; // don't include them as they are not used yet
                            //KPX Adieresis yacute -40
                            /*$bits = explode(' ', trim($row));
                            $data['KPX'][$bits[1]][$bits[2]] = $bits[3];
                            break;*/
                    }
                }
            }

            if ($this->compressionReady && $this->options['compression']) {
                // then implement ZLIB based compression on CIDtoGID string
                $data['CIDtoGID_Compressed'] = true;
                $cidtogid = gzcompress($cidtogid, 6);
            }
            $data['CIDtoGID'] = base64_encode($cidtogid);
            $data['_version_'] = $this->fontcacheVersion;
            $this->fonts[$font] = $data;

            //Because of potential trouble with php safe mode, expect that the folder already exists.
            //If not existing, this will hit performance because of missing cached results.
            if (is_dir($fontcache) && is_writable($fontcache)) {
                file_put_contents("$fontcache/$cache_name", json_encode($data, JSON_PRETTY_PRINT));
            }
            $data = null;
        }

        if (!isset($this->fonts[$font])) {
            $this->addMessage("openFont: no font file found for $font. Do you need to run load_font.php?");
        }
    }

    /**
     * if the font is not loaded then load it and make the required object
     * else just make it the current font
     * the encoding array can contain 'encoding'=> 'none','WinAnsiEncoding','MacRomanEncoding' or 'MacExpertEncoding'
     * note that encoding='none' will need to be used for symbolic fonts
     * and 'differences' => an array of mappings between numbers 0->255 and character names.
     *
     * @param string $fontName
     * @param string $encoding
     * @param bool $set
     * @param bool $isSubsetting
     * @return int
     * @throws FontNotFoundException
     */
    function selectFont($fontName, $encoding = '', $set = true, $isSubsetting = true)
    {
        if ($fontName === null || $fontName === '') {
            return $this->currentFontNum;
        }

        $ext = substr($fontName, -4);
        if ($ext === '.afm' || $ext === '.ufm') {
            $fontName = substr($fontName, 0, mb_strlen($fontName) - 4);
        }

        if (!isset($this->fonts[$fontName])) {
            $this->addMessage("selectFont: selecting - $fontName - $encoding, $set");

            // load the file
            $this->openFont($fontName);

            if (isset($this->fonts[$fontName])) {
                $this->numObj++;
                $this->numFonts++;

                $font = &$this->fonts[$fontName];

                $name = basename($fontName);
                $options = ['name' => $name, 'fontFileName' => $fontName, 'isSubsetting' => $isSubsetting];

                if (is_array($encoding)) {
                    // then encoding and differences might be set
                    if (isset($encoding['encoding'])) {
                        $options['encoding'] = $encoding['encoding'];
                    }

                    if (isset($encoding['differences'])) {
                        $options['differences'] = $encoding['differences'];
                    }
                } else {
                    if (mb_strlen($encoding, '8bit')) {
                        // then perhaps only the encoding has been set
                        $options['encoding'] = $encoding;
                    }
                }

                $this->o_font($this->numObj, 'new', $options);

                if (file_exists("$fontName.ttf")) {
                    $fileSuffix = 'ttf';
                } elseif (file_exists("$fontName.TTF")) {
                    $fileSuffix = 'TTF';
                } elseif (file_exists("$fontName.pfb")) {
                    $fileSuffix = 'pfb';
                } elseif (file_exists("$fontName.PFB")) {
                    $fileSuffix = 'PFB';
                } else {
                    $fileSuffix = '';
                }

                $font['fileSuffix'] = $fileSuffix;

                $font['fontNum'] = $this->numFonts;
                $font['isSubsetting'] = $isSubsetting && $font['isUnicode'] && strtolower($fileSuffix) === 'ttf';

                // also set the differences here, note that this means that these will take effect only the
                //first time that a font is selected, else they are ignored
                if (isset($options['differences'])) {
                    $font['differences'] = $options['differences'];
                }
            }
        }

        if ($set && isset($this->fonts[$fontName])) {
            // so if for some reason the font was not set in the last one then it will not be selected
            $this->currentBaseFont = $fontName;

            // the next lines mean that if a new font is selected, then the current text state will be
            // applied to it as well.
            $this->currentFont = $this->currentBaseFont;
            $this->currentFontNum = $this->fonts[$this->currentFont]['fontNum'];
        }

        return $this->currentFontNum;
    }

    /**
     * sets up the current font, based on the font families, and the current text state
     * note that this system is quite flexible, a bold-italic font can be completely different to a
     * italic-bold font, and even bold-bold will have to be defined within the family to have meaning
     * This function is to be called whenever the currentTextState is changed, it will update
     * the currentFont setting to whatever the appropriate family one is.
     * If the user calls selectFont themselves then that will reset the currentBaseFont, and the currentFont
     * This function will change the currentFont to whatever it should be, but will not change the
     * currentBaseFont.
     */
    private function setCurrentFont()
    {
        //   if (strlen($this->currentBaseFont) == 0){
        //     // then assume an initial font
        //     $this->selectFont($this->defaultFont);
        //   }
        //   $cf = substr($this->currentBaseFont,strrpos($this->currentBaseFont,'/')+1);
        //   if (strlen($this->currentTextState)
        //     && isset($this->fontFamilies[$cf])
        //       && isset($this->fontFamilies[$cf][$this->currentTextState])){
        //     // then we are in some state or another
        //     // and this font has a family, and the current setting exists within it
        //     // select the font, then return it
        //     $nf = substr($this->currentBaseFont,0,strrpos($this->currentBaseFont,'/')+1).$this->fontFamilies[$cf][$this->currentTextState];
        //     $this->selectFont($nf,'',0);
        //     $this->currentFont = $nf;
        //     $this->currentFontNum = $this->fonts[$nf]['fontNum'];
        //   } else {
        //     // the this font must not have the right family member for the current state
        //     // simply assume the base font
        $this->currentFont = $this->currentBaseFont;
        $this->currentFontNum = $this->fonts[$this->currentFont]['fontNum'];
        //  }
    }

    /**
     * function for the user to find out what the ID is of the first page that was created during
     * startup - useful if they wish to add something to it later.
     *
     * @return int
     */
    function getFirstPageId()
    {
        return $this->firstPageId;
    }

    /**
     * add content to the currently active object
     *
     * @param $content
     */
    private function addContent($content)
    {
        $this->objects[$this->currentContents]['c'] .= $content;
    }

    /**
     * sets the color for fill operations
     *
     * @param array $color
     * @param bool  $force
     */
    function setColor($color, $force = false)
    {
        $new_color = [$color[0], $color[1], $color[2], isset($color[3]) ? $color[3] : null];

        if (!$force && $this->currentColor == $new_color) {
            return;
        }

        if (isset($new_color[3])) {
            $this->currentColor = $new_color;
            $this->addContent(vsprintf("\n%.3F %.3F %.3F %.3F k", $this->currentColor));
        } else {
            if (isset($new_color[2])) {
                $this->currentColor = $new_color;
                $this->addContent(vsprintf("\n%.3F %.3F %.3F rg", $this->currentColor));
            }
        }
    }

    /**
     * sets the color for fill operations
     *
     * @param string $fillRule
     */
    function setFillRule($fillRule)
    {
        if (!in_array($fillRule, ["nonzero", "evenodd"])) {
            return;
        }

        $this->fillRule = $fillRule;
    }

    /**
     * sets the color for stroke operations
     *
     * @param array $color
     * @param bool  $force
     */
    function setStrokeColor($color, $force = false)
    {
        $new_color = [$color[0], $color[1], $color[2], isset($color[3]) ? $color[3] : null];

        if (!$force && $this->currentStrokeColor == $new_color) {
            return;
        }

        if (isset($new_color[3])) {
            $this->currentStrokeColor = $new_color;
            $this->addContent(vsprintf("\n%.3F %.3F %.3F %.3F K", $this->currentStrokeColor));
        } else {
            if (isset($new_color[2])) {
                $this->currentStrokeColor = $new_color;
                $this->addContent(vsprintf("\n%.3F %.3F %.3F RG", $this->currentStrokeColor));
            }
        }
    }

    /**
     * Set the graphics state for compositions
     *
     * @param $parameters
     */
    function setGraphicsState($parameters)
    {
        // Create a new graphics state object if necessary
        if (($gstate = array_search($parameters, $this->gstates)) === false) {
            $this->numObj++;
            $this->o_extGState($this->numObj, 'new', $parameters);
            $gstate = $this->numStates;
            $this->gstates[$gstate] = $parameters;
        }
        $this->addContent("\n/GS$gstate gs");
    }

    /**
     * Set current blend mode & opacity for lines.
     *
     * Valid blend modes are:
     *
     * Normal, Multiply, Screen, Overlay, Darken, Lighten,
     * ColorDogde, ColorBurn, HardLight, SoftLight, Difference,
     * Exclusion
     *
     * @param string $mode    the blend mode to use
     * @param float  $opacity 0.0 fully transparent, 1.0 fully opaque
     */
    function setLineTransparency($mode, $opacity)
    {
        static $blend_modes = [
            "Normal",
            "Multiply",
            "Screen",
            "Overlay",
            "Darken",
            "Lighten",
            "ColorDogde",
            "ColorBurn",
            "HardLight",
            "SoftLight",
            "Difference",
            "Exclusion"
        ];

        if (!in_array($mode, $blend_modes)) {
            $mode = "Normal";
        }

        if (is_null($this->currentLineTransparency)) {
            $this->currentLineTransparency = [];
        }

        if ($mode === (key_exists('mode', $this->currentLineTransparency) ?
            $this->currentLineTransparency['mode'] : '') &&
            $opacity === (key_exists('opacity', $this->currentLineTransparency) ?
            $this->currentLineTransparency["opacity"] : '')) {
            return;
        }

        $this->currentLineTransparency["mode"] = $mode;
        $this->currentLineTransparency["opacity"] = $opacity;

        $options = [
            "BM" => "/$mode",
            "CA" => (float)$opacity
        ];

        $this->setGraphicsState($options);
    }

    /**
     * Set current blend mode & opacity for filled objects.
     *
     * Valid blend modes are:
     *
     * Normal, Multiply, Screen, Overlay, Darken, Lighten,
     * ColorDogde, ColorBurn, HardLight, SoftLight, Difference,
     * Exclusion
     *
     * @param string $mode    the blend mode to use
     * @param float  $opacity 0.0 fully transparent, 1.0 fully opaque
     */
    function setFillTransparency($mode, $opacity)
    {
        static $blend_modes = [
            "Normal",
            "Multiply",
            "Screen",
            "Overlay",
            "Darken",
            "Lighten",
            "ColorDogde",
            "ColorBurn",
            "HardLight",
            "SoftLight",
            "Difference",
            "Exclusion"
        ];

        if (!in_array($mode, $blend_modes)) {
            $mode = "Normal";
        }

        if (is_null($this->currentFillTransparency)) {
            $this->currentFillTransparency = [];
        }

        if ($mode === (key_exists('mode', $this->currentFillTransparency) ?
            $this->currentFillTransparency['mode'] : '') &&
            $opacity === (key_exists('opacity', $this->currentFillTransparency) ?
            $this->currentFillTransparency["opacity"] : '')) {
            return;
        }

        $this->currentFillTransparency["mode"] = $mode;
        $this->currentFillTransparency["opacity"] = $opacity;

        $options = [
            "BM" => "/$mode",
            "ca" => (float)$opacity,
        ];

        $this->setGraphicsState($options);
    }

    /**
     * draw a line from one set of coordinates to another
     *
     * @param float $x1
     * @param float $y1
     * @param float $x2
     * @param float $y2
     * @param bool  $stroke
     */
    function line($x1, $y1, $x2, $y2, $stroke = true)
    {
        $this->addContent(sprintf("\n%.3F %.3F m %.3F %.3F l", $x1, $y1, $x2, $y2));

        if ($stroke) {
            $this->addContent(' S');
        }
    }

    /**
     * draw a bezier curve based on 4 control points
     *
     * @param float $x0
     * @param float $y0
     * @param float $x1
     * @param float $y1
     * @param float $x2
     * @param float $y2
     * @param float $x3
     * @param float $y3
     */
    function curve($x0, $y0, $x1, $y1, $x2, $y2, $x3, $y3)
    {
        // in the current line style, draw a bezier curve from (x0,y0) to (x3,y3) using the other two points
        // as the control points for the curve.
        $this->addContent(
            sprintf("\n%.3F %.3F m %.3F %.3F %.3F %.3F %.3F %.3F c S", $x0, $y0, $x1, $y1, $x2, $y2, $x3, $y3)
        );
    }

    /**
     * draw a part of an ellipse
     *
     * @param float $x0
     * @param float $y0
     * @param float $astart
     * @param float $afinish
     * @param float $r1
     * @param float $r2
     * @param float $angle
     * @param int $nSeg
     */
    function partEllipse($x0, $y0, $astart, $afinish, $r1, $r2 = 0, $angle = 0, $nSeg = 8)
    {
        $this->ellipse($x0, $y0, $r1, $r2, $angle, $nSeg, $astart, $afinish, false);
    }

    /**
     * draw a filled ellipse
     *
     * @param float $x0
     * @param float $y0
     * @param float $r1
     * @param float $r2
     * @param float $angle
     * @param int $nSeg
     * @param float $astart
     * @param float $afinish
     */
    function filledEllipse($x0, $y0, $r1, $r2 = 0, $angle = 0, $nSeg = 8, $astart = 0, $afinish = 360)
    {
        $this->ellipse($x0, $y0, $r1, $r2, $angle, $nSeg, $astart, $afinish, true, true);
    }

    /**
     * @param float $x
     * @param float $y
     */
    function lineTo($x, $y)
    {
        $this->addContent(sprintf("\n%.3F %.3F l", $x, $y));
    }

    /**
     * @param float $x
     * @param float $y
     */
    function moveTo($x, $y)
    {
        $this->addContent(sprintf("\n%.3F %.3F m", $x, $y));
    }

    /**
     * draw a bezier curve based on 4 control points
     *
     * @param float $x1
     * @param float $y1
     * @param float $x2
     * @param float $y2
     * @param float $x3
     * @param float $y3
     */
    function curveTo($x1, $y1, $x2, $y2, $x3, $y3)
    {
        $this->addContent(sprintf("\n%.3F %.3F %.3F %.3F %.3F %.3F c", $x1, $y1, $x2, $y2, $x3, $y3));
    }

    /**
     * draw a bezier curve based on 4 control points
     *
     * @param float $cpx
     * @param float $cpy
     * @param float $x
     * @param float $y
     */
    function quadTo($cpx, $cpy, $x, $y)
    {
        $this->addContent(sprintf("\n%.3F %.3F %.3F %.3F v", $cpx, $cpy, $x, $y));
    }

    function closePath()
    {
        $this->addContent(' h');
    }

    function endPath()
    {
        $this->addContent(' n');
    }

    /**
     * draw an ellipse
     * note that the part and filled ellipse are just special cases of this function
     *
     * draws an ellipse in the current line style
     * centered at $x0,$y0, radii $r1,$r2
     * if $r2 is not set, then a circle is drawn
     * from $astart to $afinish, measured in degrees, running anti-clockwise from the right hand side of the ellipse.
     * nSeg is not allowed to be less than 2, as this will simply draw a line (and will even draw a
     * pretty crappy shape at 2, as we are approximating with bezier curves.
     *
     * @param float $x0
     * @param float $y0
     * @param float $r1
     * @param float $r2
     * @param float $angle
     * @param int   $nSeg
     * @param float $astart
     * @param float $afinish
     * @param bool  $close
     * @param bool  $fill
     * @param bool  $stroke
     * @param bool  $incomplete
     */
    function ellipse(
        $x0,
        $y0,
        $r1,
        $r2 = 0,
        $angle = 0,
        $nSeg = 8,
        $astart = 0,
        $afinish = 360,
        $close = true,
        $fill = false,
        $stroke = true,
        $incomplete = false
    ) {
        if ($r1 == 0) {
            return;
        }

        if ($r2 == 0) {
            $r2 = $r1;
        }

        if ($nSeg < 2) {
            $nSeg = 2;
        }

        $astart = deg2rad((float)$astart);
        $afinish = deg2rad((float)$afinish);
        $totalAngle = $afinish - $astart;

        $dt = $totalAngle / $nSeg;
        $dtm = $dt / 3;

        if ($angle != 0) {
            $a = -1 * deg2rad((float)$angle);

            $this->addContent(
                sprintf("\n q %.3F %.3F %.3F %.3F %.3F %.3F cm", cos($a), -sin($a), sin($a), cos($a), $x0, $y0)
            );

            $x0 = 0;
            $y0 = 0;
        }

        $t1 = $astart;
        $a0 = $x0 + $r1 * cos($t1);
        $b0 = $y0 + $r2 * sin($t1);
        $c0 = -$r1 * sin($t1);
        $d0 = $r2 * cos($t1);

        if (!$incomplete) {
            $this->addContent(sprintf("\n%.3F %.3F m ", $a0, $b0));
        }

        for ($i = 1; $i <= $nSeg; $i++) {
            // draw this bit of the total curve
            $t1 = $i * $dt + $astart;
            $a1 = $x0 + $r1 * cos($t1);
            $b1 = $y0 + $r2 * sin($t1);
            $c1 = -$r1 * sin($t1);
            $d1 = $r2 * cos($t1);

            $this->addContent(
                sprintf(
                    "\n%.3F %.3F %.3F %.3F %.3F %.3F c",
                    ($a0 + $c0 * $dtm),
                    ($b0 + $d0 * $dtm),
                    ($a1 - $c1 * $dtm),
                    ($b1 - $d1 * $dtm),
                    $a1,
                    $b1
                )
            );

            $a0 = $a1;
            $b0 = $b1;
            $c0 = $c1;
            $d0 = $d1;
        }

        if (!$incomplete) {
            if ($fill) {
                $this->addContent(' f');
            }

            if ($stroke) {
                if ($close) {
                    $this->addContent(' s'); // small 's' signifies closing the path as well
                } else {
                    $this->addContent(' S');
                }
            }
        }

        if ($angle != 0) {
            $this->addContent(' Q');
        }
    }

    /**
     * this sets the line drawing style.
     * width, is the thickness of the line in user units
     * cap is the type of cap to put on the line, values can be 'butt','round','square'
     *    where the diffference between 'square' and 'butt' is that 'square' projects a flat end past the
     *    end of the line.
     * join can be 'miter', 'round', 'bevel'
     * dash is an array which sets the dash pattern, is a series of length values, which are the lengths of the
     *   on and off dashes.
     *   (2) represents 2 on, 2 off, 2 on , 2 off ...
     *   (2,1) is 2 on, 1 off, 2 on, 1 off.. etc
     * phase is a modifier on the dash pattern which is used to shift the point at which the pattern starts.
     *
     * @param float  $width
     * @param string $cap
     * @param string $join
     * @param array  $dash
     * @param int    $phase
     */
    function setLineStyle($width = 1, $cap = '', $join = '', $dash = '', $phase = 0)
    {
        // this is quite inefficient in that it sets all the parameters whenever 1 is changed, but will fix another day
        $string = '';

        if ($width > 0) {
            $string .= "$width w";
        }

        $ca = ['butt' => 0, 'round' => 1, 'square' => 2];

        if (isset($ca[$cap])) {
            $string .= " $ca[$cap] J";
        }

        $ja = ['miter' => 0, 'round' => 1, 'bevel' => 2];

        if (isset($ja[$join])) {
            $string .= " $ja[$join] j";
        }

        if (is_array($dash)) {
            $string .= ' [ ' . implode(' ', $dash) . " ] $phase d";
        }

        $this->currentLineStyle = $string;
        $this->addContent("\n$string");
    }

    /**
     * draw a polygon, the syntax for this is similar to the GD polygon command
     *
     * @param float[] $p
     * @param bool    $fill
     */
    public function polygon(array $p, bool $fill = false): void
    {
        $this->addContent(sprintf("\n%.3F %.3F m ", $p[0], $p[1]));

        $n = count($p);
        for ($i = 2; $i < $n; $i = $i + 2) {
            $this->addContent(sprintf("%.3F %.3F l ", $p[$i], $p[$i + 1]));
        }

        if ($fill) {
            $this->addContent(' f');
        } else {
            $this->addContent(' S');
        }
    }

    /**
     * a filled rectangle, note that it is the width and height of the rectangle which are the secondary parameters, not
     * the coordinates of the upper-right corner
     *
     * @param float $x1
     * @param float $y1
     * @param float $width
     * @param float $height
     */
    function filledRectangle($x1, $y1, $width, $height)
    {
        $this->addContent(sprintf("\n%.3F %.3F %.3F %.3F re f", $x1, $y1, $width, $height));
    }

    /**
     * draw a rectangle, note that it is the width and height of the rectangle which are the secondary parameters, not
     * the coordinates of the upper-right corner
     *
     * @param float $x1
     * @param float $y1
     * @param float $width
     * @param float $height
     */
    function rectangle($x1, $y1, $width, $height)
    {
        $this->addContent(sprintf("\n%.3F %.3F %.3F %.3F re S", $x1, $y1, $width, $height));
    }

    /**
     * draw a rectangle, note that it is the width and height of the rectangle which are the secondary parameters, not
     * the coordinates of the upper-right corner
     *
     * @param float $x1
     * @param float $y1
     * @param float $width
     * @param float $height
     */
    function rect($x1, $y1, $width, $height)
    {
        $this->addContent(sprintf("\n%.3F %.3F %.3F %.3F re", $x1, $y1, $width, $height));
    }

    function stroke(bool $close = false)
    {
        $this->addContent("\n" . ($close ? "s" : "S"));
    }

    function fill()
    {
        $this->addContent("\nf" . ($this->fillRule === "evenodd" ? "*" : ""));
    }

    function fillStroke(bool $close = false)
    {
        $this->addContent("\n" . ($close ? "b" : "B") . ($this->fillRule === "evenodd" ? "*" : ""));
    }

    /**
     * @param string $subtype
     * @param integer $x
     * @param integer $y
     * @param integer $w
     * @param integer $h
     * @return int
     */
    function addXObject($subtype, $x, $y, $w, $h)
    {
        $id = ++$this->numObj;
        $this->o_xobject($id, 'new', ['Subtype' => $subtype, 'bbox' => [$x, $y, $w, $h]]);
        return $id;
    }

    /**
     * @param integer $numXObject
     * @param string $type
     * @param array $options
     */
    function setXObjectResource($numXObject, $type, $options)
    {
        if (in_array($type, ['procset', 'font', 'xObject'])) {
            $this->o_xobject($numXObject, $type, $options);
        }
    }

    /**
     * add signature
     *
     * $fieldSigId = $cpdf->addFormField(Cpdf::ACROFORM_FIELD_SIG, 'Signature1', 0, 0, 0, 0, 0);
     *
     * $signatureId = $cpdf->addSignature([
     *   'signcert' => file_get_contents('dompdf.crt'),
     *   'privkey' => file_get_contents('dompdf.key'),
     *   'password' => 'password',
     *   'name' => 'DomPDF DEMO',
     *   'location' => 'Home',
     *   'reason' => 'First Form',
     *   'contactinfo' => 'info'
     * ]);
     * $cpdf->setFormFieldValue($fieldSigId, "$signatureId 0 R");
     *
     * @param string $signcert
     * @param string $privkey
     * @param string $password
     * @param string|null $name
     * @param string|null $location
     * @param string|null $reason
     * @param string|null $contactinfo
     * @return int
     */
    function addSignature($signcert, $privkey, $password = '', $name = null, $location = null, $reason = null, $contactinfo = null) {
        $sigId = ++$this->numObj;
        $this->o_sig($sigId, 'new', [
          'SignCert' => $signcert,
          'PrivKey' => $privkey,
          'Password' => $password,
          'Name' => $name,
          'Location' => $location,
          'Reason' => $reason,
          'ContactInfo' => $contactinfo
        ]);

        return $sigId;
    }

    /**
     * add field to form
     *
     * @param string $type ACROFORM_FIELD_*
     * @param string $name
     * @param $x0
     * @param $y0
     * @param $x1
     * @param $y1
     * @param integer $ff Field Flag ACROFORM_FIELD_*_*
     * @param float $size
     * @param array $color
     * @return int
     */
    public function addFormField($type, $name, $x0, $y0, $x1, $y1, $ff = 0, $size = 10.0, $color = [0, 0, 0])
    {
        if (!$this->numFonts) {
            $this->selectFont($this->defaultFont);
        }

        $color = implode(' ', $color) . ' rg';

        $currentFontNum = $this->currentFontNum;
        $font = array_filter(
            $this->objects[$this->currentNode]['info']['fonts'],
            function ($item) use ($currentFontNum) { return $item['fontNum'] == $currentFontNum; }
        );

        $this->o_acroform($this->acroFormId, 'font',
          ['objNum' => $font[0]['objNum'], 'fontNum' => $font[0]['fontNum']]);

        $fieldId = ++$this->numObj;
        $this->o_field($fieldId, 'new', [
          'rect' => [$x0, $y0, $x1, $y1],
          'F' => 4,
          'FT' => "/$type",
          'T' => $name,
          'Ff' => $ff,
          'pageid' => $this->currentPage,
          'da' => "$color /F$this->currentFontNum " . sprintf('%.1F Tf ', $size)
        ]);

        return $fieldId;
    }

    /**
     * set Field value
     *
     * @param integer $numFieldObj
     * @param string $value
     */
    public function setFormFieldValue($numFieldObj, $value)
    {
        $this->o_field($numFieldObj, 'set', ['value' => $value]);
    }

    /**
     * set Field value (reference)
     *
     * @param integer $numFieldObj
     * @param integer $numObj Object number
     */
    public function setFormFieldRefValue($numFieldObj, $numObj)
    {
        $this->o_field($numFieldObj, 'set', ['refvalue' => $numObj]);
    }

    /**
     * set Field Appearanc (reference)
     *
     * @param integer $numFieldObj
     * @param integer $normalNumObj
     * @param integer|null $rolloverNumObj
     * @param integer|null $downNumObj
     */
    public function setFormFieldAppearance($numFieldObj, $normalNumObj, $rolloverNumObj = null, $downNumObj = null)
    {
        $appearance['N'] = $normalNumObj;

        if ($rolloverNumObj !== null) {
            $appearance['R'] = $rolloverNumObj;
        }

        if ($downNumObj !== null) {
            $appearance['D'] = $downNumObj;
        }

        $this->o_field($numFieldObj, 'set', ['appearance' => $appearance]);
    }

    /**
     * set Choice Field option values
     *
     * @param integer $numFieldObj
     * @param array $value
     */
    public function setFormFieldOpt($numFieldObj, $value)
    {
        $this->o_field($numFieldObj, 'set', ['options' => $value]);
    }

    /**
     * add form to document
     *
     * @param integer $sigFlags
     * @param boolean $needAppearances
     */
    public function addForm($sigFlags = 0, $needAppearances = false)
    {
        $this->acroFormId = ++$this->numObj;
        $this->o_acroform($this->acroFormId, 'new', [
          'NeedAppearances' => $needAppearances ? 'true' : 'false',
          'SigFlags' => $sigFlags
        ]);
    }

    /**
     * save the current graphic state
     */
    function save()
    {
        // we must reset the color cache or it will keep bad colors after clipping
        $this->currentColor = null;
        $this->currentStrokeColor = null;
        $this->addContent("\nq");
    }

    /**
     * restore the last graphic state
     */
    function restore()
    {
        // we must reset the color cache or it will keep bad colors after clipping
        $this->currentColor = null;
        $this->currentStrokeColor = null;
        $this->addContent("\nQ");
    }

    /**
     * draw a clipping rectangle, all the elements added after this will be clipped
     *
     * @param float $x1
     * @param float $y1
     * @param float $width
     * @param float $height
     */
    function clippingRectangle($x1, $y1, $width, $height)
    {
        $this->save();
        $this->addContent(sprintf("\n%.3F %.3F %.3F %.3F re W n", $x1, $y1, $width, $height));
    }

    /**
     * draw a clipping rounded rectangle, all the elements added after this will be clipped
     *
     * @param float $x1
     * @param float $y1
     * @param float $w
     * @param float $h
     * @param float $rTL
     * @param float $rTR
     * @param float $rBR
     * @param float $rBL
     */
    function clippingRectangleRounded($x1, $y1, $w, $h, $rTL, $rTR, $rBR, $rBL)
    {
        $this->save();

        // start: top edge, left end
        $this->addContent(sprintf("\n%.3F %.3F m ", $x1, $y1 - $rTL + $h));

        // line: bottom edge, left end
        $this->addContent(sprintf("\n%.3F %.3F l ", $x1, $y1 + $rBL));

        // curve: bottom-left corner
        $this->ellipse($x1 + $rBL, $y1 + $rBL, $rBL, 0, 0, 8, 180, 270, false, false, false, true);

        // line: right edge, bottom end
        $this->addContent(sprintf("\n%.3F %.3F l ", $x1 + $w - $rBR, $y1));

        // curve: bottom-right corner
        $this->ellipse($x1 + $w - $rBR, $y1 + $rBR, $rBR, 0, 0, 8, 270, 360, false, false, false, true);

        // line: right edge, top end
        $this->addContent(sprintf("\n%.3F %.3F l ", $x1 + $w, $y1 + $h - $rTR));

        // curve: bottom-right corner
        $this->ellipse($x1 + $w - $rTR, $y1 + $h - $rTR, $rTR, 0, 0, 8, 0, 90, false, false, false, true);

        // line: bottom edge, right end
        $this->addContent(sprintf("\n%.3F %.3F l ", $x1 + $rTL, $y1 + $h));

        // curve: top-right corner
        $this->ellipse($x1 + $rTL, $y1 + $h - $rTL, $rTL, 0, 0, 8, 90, 180, false, false, false, true);

        // line: top edge, left end
        $this->addContent(sprintf("\n%.3F %.3F l ", $x1 + $rBL, $y1));

        // Close & clip
        $this->addContent(" W n");
    }

    /**
     * draw a clipping polygon, the syntax for this is similar to the GD polygon command
     *
     * @param float[] $p
     */
    public function clippingPolygon(array $p): void
    {
        $this->save();

        $this->addContent(sprintf("\n%.3F %.3F m ", $p[0], $p[1]));

        $n = count($p);
        for ($i = 2; $i < $n; $i = $i + 2) {
            $this->addContent(sprintf("%.3F %.3F l ", $p[$i], $p[$i + 1]));
        }

        $this->addContent("W n");
    }

    /**
     * ends the last clipping shape
     */
    function clippingEnd()
    {
        $this->restore();
    }

    /**
     * scale
     *
     * @param float $s_x scaling factor for width as percent
     * @param float $s_y scaling factor for height as percent
     * @param float $x   Origin abscissa
     * @param float $y   Origin ordinate
     */
    function scale($s_x, $s_y, $x, $y)
    {
        $y = $this->currentPageSize["height"] - $y;

        $tm = [
            $s_x,
            0,
            0,
            $s_y,
            $x * (1 - $s_x),
            $y * (1 - $s_y)
        ];

        $this->transform($tm);
    }

    /**
     * translate
     *
     * @param float $t_x movement to the right
     * @param float $t_y movement to the bottom
     */
    function translate($t_x, $t_y)
    {
        $tm = [
            1,
            0,
            0,
            1,
            $t_x,
            -$t_y
        ];

        $this->transform($tm);
    }

    /**
     * rotate
     *
     * @param float $angle angle in degrees for counter-clockwise rotation
     * @param float $x     Origin abscissa
     * @param float $y     Origin ordinate
     */
    function rotate($angle, $x, $y)
    {
        $y = $this->currentPageSize["height"] - $y;

        $a = deg2rad($angle);
        $cos_a = cos($a);
        $sin_a = sin($a);

        $tm = [
            $cos_a,
            -$sin_a,
            $sin_a,
            $cos_a,
            $x - $sin_a * $y - $cos_a * $x,
            $y - $cos_a * $y + $sin_a * $x,
        ];

        $this->transform($tm);
    }

    /**
     * skew
     *
     * @param float $angle_x
     * @param float $angle_y
     * @param float $x Origin abscissa
     * @param float $y Origin ordinate
     */
    function skew($angle_x, $angle_y, $x, $y)
    {
        $y = $this->currentPageSize["height"] - $y;

        $tan_x = tan(deg2rad($angle_x));
        $tan_y = tan(deg2rad($angle_y));

        $tm = [
            1,
            -$tan_y,
            -$tan_x,
            1,
            $tan_x * $y,
            $tan_y * $x,
        ];

        $this->transform($tm);
    }

    /**
     * apply graphic transformations
     *
     * @param array $tm transformation matrix
     */
    function transform($tm)
    {
        $this->addContent(vsprintf("\n %.3F %.3F %.3F %.3F %.3F %.3F cm", $tm));
    }

    /**
     * add a new page to the document
     * this also makes the new page the current active object
     *
     * @param int $insert
     * @param int $id
     * @param string $pos
     * @return int
     */
    function newPage($insert = 0, $id = 0, $pos = 'after')
    {
        // if there is a state saved, then go up the stack closing them
        // then on the new page, re-open them with the right setings

        if ($this->nStateStack) {
            for ($i = $this->nStateStack; $i >= 1; $i--) {
                $this->restoreState($i);
            }
        }

        $this->numObj++;

        if ($insert) {
            // the id from the ezPdf class is the id of the contents of the page, not the page object itself
            // query that object to find the parent
            $rid = $this->objects[$id]['onPage'];
            $opt = ['rid' => $rid, 'pos' => $pos];
            $this->o_page($this->numObj, 'new', $opt);
        } else {
            $this->o_page($this->numObj, 'new');
        }

        // if there is a stack saved, then put that onto the page
        if ($this->nStateStack) {
            for ($i = 1; $i <= $this->nStateStack; $i++) {
                $this->saveState($i);
            }
        }

        // and if there has been a stroke or fill color set, then transfer them
        if (isset($this->currentColor)) {
            $this->setColor($this->currentColor, true);
        }

        if (isset($this->currentStrokeColor)) {
            $this->setStrokeColor($this->currentStrokeColor, true);
        }

        // if there is a line style set, then put this in too
        if (mb_strlen($this->currentLineStyle, '8bit')) {
            $this->addContent("\n$this->currentLineStyle");
        }

        // the call to the o_page object set currentContents to the present page, so this can be returned as the page id
        return $this->currentContents;
    }

    /**
     * Streams the PDF to the client.
     *
     * @param string $filename The filename to present to the client.
     * @param array $options Associative array: 'compress' => 1 or 0 (default 1); 'Attachment' => 1 or 0 (default 1).
     */
    function stream($filename = "document.pdf", $options = [])
    {
        if (headers_sent()) {
            die("Unable to stream pdf: headers already sent");
        }

        if (!isset($options["compress"])) $options["compress"] = true;
        if (!isset($options["Attachment"])) $options["Attachment"] = true;

        $debug = !$options['compress'];
        $tmp = ltrim($this->output($debug));

        header("Cache-Control: private");
        header("Content-Type: application/pdf");
        header("Content-Length: " . mb_strlen($tmp, "8bit"));

        $filename = str_replace(["\n", "'"], "", basename($filename, ".pdf")) . ".pdf";
        $attachment = $options["Attachment"] ? "attachment" : "inline";

        $encoding = mb_detect_encoding($filename);
        $fallbackfilename = mb_convert_encoding($filename, "ISO-8859-1", $encoding);
        $fallbackfilename = str_replace("\"", "", $fallbackfilename);
        $encodedfilename = rawurlencode($filename);

        $contentDisposition = "Content-Disposition: $attachment; filename=\"$fallbackfilename\"";
        if ($fallbackfilename !== $filename) {
            $contentDisposition .= "; filename*=UTF-8''$encodedfilename";
        }
        header($contentDisposition);

        echo $tmp;
        flush();
    }

    /**
     * return the height in units of the current font in the given size
     *
     * @param float $size
     *
     * @return float
     */
    public function getFontHeight(float $size): float
    {
        if (!$this->numFonts) {
            $this->selectFont($this->defaultFont);
        }

        $font = $this->fonts[$this->currentFont];

        // for the current font, and the given size, what is the height of the font in user units
        if (isset($font['Ascender']) && isset($font['Descender'])) {
            $h = $font['Ascender'] - $font['Descender'];
        } else {
            $h = $font['FontBBox'][3] - $font['FontBBox'][1];
        }

        // have to adjust by a font offset for Windows fonts.  unfortunately it looks like
        // the bounding box calculations are wrong and I don't know why.
        if (isset($font['FontHeightOffset'])) {
            // For CourierNew from Windows this needs to be -646 to match the
            // Adobe native Courier font.
            //
            // For FreeMono from GNU this needs to be -337 to match the
            // Courier font.
            //
            // Both have been added manually to the .afm and .ufm files.
            $h += (int)$font['FontHeightOffset'];
        }

        return $size * $h / 1000;
    }

    /**
     * @param float $size
     *
     * @return float
     */
    public function getFontXHeight(float $size): float
    {
        if (!$this->numFonts) {
            $this->selectFont($this->defaultFont);
        }

        $font = $this->fonts[$this->currentFont];

        // for the current font, and the given size, what is the height of the font in user units
        if (isset($font['XHeight'])) {
            $xh = $font['Ascender'] - $font['Descender'];
        } else {
            $xh = $this->getFontHeight($size) / 2;
        }

        return $size * $xh / 1000;
    }

    /**
     * return the font descender, this will normally return a negative number
     * if you add this number to the baseline, you get the level of the bottom of the font
     * it is in the pdf user units
     *
     * @param float $size
     *
     * @return float
     */
    public function getFontDescender(float $size): float
    {
        // note that this will most likely return a negative value
        if (!$this->numFonts) {
            $this->selectFont($this->defaultFont);
        }

        //$h = $this->fonts[$this->currentFont]['FontBBox'][1];
        $h = $this->fonts[$this->currentFont]['Descender'];

        return $size * $h / 1000;
    }

    /**
     * filter the text, this is applied to all text just before being inserted into the pdf document
     * it escapes the various things that need to be escaped, and so on
     *
     * @param $text
     * @param bool $bom
     * @param bool $convert_encoding
     * @return string
     */
    function filterText($text, $bom = true, $convert_encoding = true)
    {
        if (!$this->numFonts) {
            $this->selectFont($this->defaultFont);
        }

        if ($convert_encoding) {
            $cf = $this->currentFont;
            if (isset($this->fonts[$cf]) && $this->fonts[$cf]['isUnicode']) {
                $text = $this->utf8toUtf16BE($text, $bom);
            } else {
                //$text = html_entity_decode($text, ENT_QUOTES);
                $text = mb_convert_encoding($text, self::$targetEncoding, 'UTF-8');
            }
        } elseif ($bom) {
            $text = $this->utf8toUtf16BE($text, $bom);
        }

        // the chr(13) substitution fixes a bug seen in TCPDF (bug #1421290)
        return strtr($text, [')' => '\\)', '(' => '\\(', '\\' => '\\\\', chr(13) => '\r']);
    }

    /**
     * return array containing codepoints (UTF-8 character values) for the
     * string passed in.
     *
     * based on the excellent TCPDF code by Nicola Asuni and the
     * RFC for UTF-8 at http://www.faqs.org/rfcs/rfc3629.html
     *
     * @param string $text UTF-8 string to process
     * @return array UTF-8 codepoints array for the string
     */
    function utf8toCodePointsArray(&$text)
    {
        $length = mb_strlen($text, '8bit'); // http://www.php.net/manual/en/function.mb-strlen.php#77040
        $unicode = []; // array containing unicode values
        $bytes = []; // array containing single character byte sequences
        $numbytes = 1; // number of octets needed to represent the UTF-8 character

        for ($i = 0; $i < $length; $i++) {
            $c = ord($text[$i]); // get one string character at time
            if (count($bytes) === 0) { // get starting octect
                if ($c <= 0x7F) {
                    $unicode[] = $c; // use the character "as is" because is ASCII
                    $numbytes = 1;
                } elseif (($c >> 0x05) === 0x06) { // 2 bytes character (0x06 = 110 BIN)
                    $bytes[] = ($c - 0xC0) << 0x06;
                    $numbytes = 2;
                } elseif (($c >> 0x04) === 0x0E) { // 3 bytes character (0x0E = 1110 BIN)
                    $bytes[] = ($c - 0xE0) << 0x0C;
                    $numbytes = 3;
                } elseif (($c >> 0x03) === 0x1E) { // 4 bytes character (0x1E = 11110 BIN)
                    $bytes[] = ($c - 0xF0) << 0x12;
                    $numbytes = 4;
                } else {
                    // use replacement character for other invalid sequences
                    $unicode[] = 0xFFFD;
                    $bytes = [];
                    $numbytes = 1;
                }
            } elseif (($c >> 0x06) === 0x02) { // bytes 2, 3 and 4 must start with 0x02 = 10 BIN
                $bytes[] = $c - 0x80;
                if (count($bytes) === $numbytes) {
                    // compose UTF-8 bytes to a single unicode value
                    $c = $bytes[0];
                    for ($j = 1; $j < $numbytes; $j++) {
                        $c += ($bytes[$j] << (($numbytes - $j - 1) * 0x06));
                    }
                    if ((($c >= 0xD800) and ($c <= 0xDFFF)) or ($c >= 0x10FFFF)) {
                        // The definition of UTF-8 prohibits encoding character numbers between
                        // U+D800 and U+DFFF, which are reserved for use with the UTF-16
                        // encoding form (as surrogate pairs) and do not directly represent
                        // characters.
                        $unicode[] = 0xFFFD; // use replacement character
                    } else {
                        $unicode[] = $c; // add char to array
                    }
                    // reset data for next char
                    $bytes = [];
                    $numbytes = 1;
                }
            } else {
                // use replacement character for other invalid sequences
                $unicode[] = 0xFFFD;
                $bytes = [];
                $numbytes = 1;
            }
        }

        return $unicode;
    }

    /**
     * convert UTF-8 to UTF-16 with an additional byte order marker
     * at the front if required.
     *
     * based on the excellent TCPDF code by Nicola Asuni and the
     * RFC for UTF-8 at http://www.faqs.org/rfcs/rfc3629.html
     *
     * @param string  $text UTF-8 string to process
     * @param boolean $bom  whether to add the byte order marker
     * @return string UTF-16 result string
     */
    function utf8toUtf16BE(&$text, $bom = true)
    {
        $out = $bom ? "\xFE\xFF" : '';

        $unicode = $this->utf8toCodePointsArray($text);
        foreach ($unicode as $c) {
            if ($c === 0xFFFD) {
                $out .= "\xFF\xFD"; // replacement character
            } elseif ($c < 0x10000) {
                $out .= chr($c >> 0x08) . chr($c & 0xFF);
            } else {
                $c -= 0x10000;
                $w1 = 0xD800 | ($c >> 0x10);
                $w2 = 0xDC00 | ($c & 0x3FF);
                $out .= chr($w1 >> 0x08) . chr($w1 & 0xFF) . chr($w2 >> 0x08) . chr($w2 & 0xFF);
            }
        }

        return $out;
    }

    /**
     * given a start position and information about how text is to be laid out, calculate where
     * on the page the text will end
     *
     * @param $x
     * @param $y
     * @param $angle
     * @param $size
     * @param $wa
     * @param $text
     * @return array
     */
    private function getTextPosition($x, $y, $angle, $size, $wa, $text)
    {
        // given this information return an array containing x and y for the end position as elements 0 and 1
        $w = $this->getTextWidth($size, $text);

        // need to adjust for the number of spaces in this text
        $words = explode(' ', $text);
        $nspaces = count($words) - 1;
        $w += $wa * $nspaces;
        $a = deg2rad((float)$angle);

        return [cos($a) * $w + $x, -sin($a) * $w + $y];
    }

    /**
     * Callback method used by smallCaps
     *
     * @param array $matches
     *
     * @return string
     */
    function toUpper($matches)
    {
        return mb_strtoupper($matches[0]);
    }

    function concatMatches($matches)
    {
        $str = "";
        foreach ($matches as $match) {
            $str .= $match[0];
        }

        return $str;
    }

    /**
     * register text for font subsetting
     *
     * @param string $font
     * @param string $text
     */
    function registerText($font, $text)
    {
        if (!$this->isUnicode || in_array(mb_strtolower(basename($font)), self::$coreFonts)) {
            return;
        }

        if (!isset($this->stringSubsets[$font])) {
            $base_subset = "\u{fffd}\u{fffe}\u{ffff}";
            $this->stringSubsets[$font] = $this->utf8toCodePointsArray($base_subset);
        }

        $this->stringSubsets[$font] = array_unique(
            array_merge($this->stringSubsets[$font], $this->utf8toCodePointsArray($text))
        );
    }

    /**
     * add text to the document, at a specified location, size and angle on the page
     *
     * @param float  $x
     * @param float  $y
     * @param float  $size
     * @param string $text
     * @param float  $angle
     * @param float  $wordSpaceAdjust
     * @param float  $charSpaceAdjust
     * @param bool   $smallCaps
     */
    function addText($x, $y, $size, $text, $angle = 0, $wordSpaceAdjust = 0, $charSpaceAdjust = 0, $smallCaps = false)
    {
        if (!$this->numFonts) {
            $this->selectFont($this->defaultFont);
        }

        $text = str_replace(["\r", "\n"], "", $text);

        // if ($smallCaps) {
        //     preg_match_all("/(\P{Ll}+)/u", $text, $matches, PREG_SET_ORDER);
        //     $lower = $this->concatMatches($matches);
        //     d($lower);

        //     preg_match_all("/(\p{Ll}+)/u", $text, $matches, PREG_SET_ORDER);
        //     $other = $this->concatMatches($matches);
        //     d($other);

        //     $text = preg_replace_callback("/\p{Ll}/u", array($this, "toUpper"), $text);
        // }

        // if there are any open callbacks, then they should be called, to show the start of the line
        if ($this->nCallback > 0) {
            for ($i = $this->nCallback; $i > 0; $i--) {
                // call each function
                $info = [
                    'x'         => $x,
                    'y'         => $y,
                    'angle'     => $angle,
                    'status'    => 'sol',
                    'p'         => $this->callback[$i]['p'],
                    'nCallback' => $this->callback[$i]['nCallback'],
                    'height'    => $this->callback[$i]['height'],
                    'descender' => $this->callback[$i]['descender']
                ];

                $func = $this->callback[$i]['f'];
                $this->$func($info);
            }
        }

        if ($angle == 0) {
            $this->addContent(sprintf("\nBT %.3F %.3F Td", $x, $y));
        } else {
            $a = deg2rad((float)$angle);
            $this->addContent(
                sprintf("\nBT %.3F %.3F %.3F %.3F %.3F %.3F Tm", cos($a), -sin($a), sin($a), cos($a), $x, $y)
            );
        }

        if ($wordSpaceAdjust != 0) {
            $this->addContent(sprintf(" %.3F Tw", $wordSpaceAdjust));
        }

        if ($charSpaceAdjust != 0) {
            $this->addContent(sprintf(" %.3F Tc", $charSpaceAdjust));
        }

        $len = mb_strlen($text);
        $start = 0;

        if ($start < $len) {
            $part = $text; // OAR - Don't need this anymore, given that $start always equals zero.  substr($text, $start);
            $place_text = $this->filterText($part, false);
            // modify unicode text so that extra word spacing is manually implemented (bug #)
            if ($this->fonts[$this->currentFont]['isUnicode'] && $wordSpaceAdjust != 0) {
                $space_scale = 1000 / $size;
                $place_text = str_replace("\x00\x20", "\x00\x20)\x00\x20" . (-round($space_scale * $wordSpaceAdjust)) . "\x00\x20(", $place_text);
            }
            $this->addContent(" /F$this->currentFontNum " . sprintf('%.1F Tf ', $size));
            $this->addContent(" [($place_text)] TJ");
        }

        if ($wordSpaceAdjust != 0) {
            $this->addContent(sprintf(" %.3F Tw", 0));
        }

        if ($charSpaceAdjust != 0) {
            $this->addContent(sprintf(" %.3F Tc", 0));
        }

        $this->addContent(' ET');

        // if there are any open callbacks, then they should be called, to show the end of the line
        if ($this->nCallback > 0) {
            for ($i = $this->nCallback; $i > 0; $i--) {
                // call each function
                $tmp = $this->getTextPosition($x, $y, $angle, $size, $wordSpaceAdjust, $text);
                $info = [
                    'x'         => $tmp[0],
                    'y'         => $tmp[1],
                    'angle'     => $angle,
                    'status'    => 'eol',
                    'p'         => $this->callback[$i]['p'],
                    'nCallback' => $this->callback[$i]['nCallback'],
                    'height'    => $this->callback[$i]['height'],
                    'descender' => $this->callback[$i]['descender']
                ];
                $func = $this->callback[$i]['f'];
                $this->$func($info);
            }
        }

        if ($this->fonts[$this->currentFont]['isSubsetting']) {
            $this->registerText($this->currentFont, $text);
        }
    }

    /**
     * calculate how wide a given text string will be on a page, at a given size.
     * this can be called externally, but is also used by the other class functions
     *
     * @param float  $size
     * @param string $text
     * @param float  $wordSpacing
     * @param float  $charSpacing
     *
     * @return float
     */
    public function getTextWidth(float $size, string $text, float $wordSpacing = 0.0, float $charSpacing = 0.0): float
    {
        static $ord_cache = [];

        // this function should not change any of the settings, though it will need to
        // track any directives which change during calculation, so copy them at the start
        // and put them back at the end.
        $store_currentTextState = $this->currentTextState;

        if (!$this->numFonts) {
            $this->selectFont($this->defaultFont);
        }

        $text = str_replace(["\r", "\n"], "", $text);

        // hmm, this is where it all starts to get tricky - use the font information to
        // calculate the width of each character, add them up and convert to user units
        $w = 0;
        $cf = $this->currentFont;
        $current_font = $this->fonts[$cf];
        $space_scale = 1000 / ($size > 0 ? $size : 1);

        if ($current_font['isUnicode']) {
            // for Unicode, use the code points array to calculate width rather
            // than just the string itself
            $unicode = $this->utf8toCodePointsArray($text);

            foreach ($unicode as $char) {
                // check if we have to replace character
                if (isset($current_font['differences'][$char])) {
                    $char = $current_font['differences'][$char];
                }

                if (isset($current_font['C'][$char])) {
                    $char_width = $current_font['C'][$char];

                    // add the character width
                    $w += $char_width;

                    // add additional padding for space
                    if (isset($current_font['codeToName'][$char]) && $current_font['codeToName'][$char] === 'space') {  // Space
                        $w += $wordSpacing * $space_scale;
                    }
                }
            }

            // add additional char spacing
            if ($charSpacing != 0) {
                $w += $charSpacing * $space_scale * count($unicode);
            }

        } else {
            // If CPDF is in Unicode mode but the current font does not support Unicode we need to convert the character set to Windows-1252
            if ($this->isUnicode) {
                $text = mb_convert_encoding($text, 'Windows-1252', 'UTF-8');
            }

            $len = mb_strlen($text, 'Windows-1252');

            for ($i = 0; $i < $len; $i++) {
                $c = $text[$i];
                $char = isset($ord_cache[$c]) ? $ord_cache[$c] : ($ord_cache[$c] = ord($c));

                // check if we have to replace character
                if (isset($current_font['differences'][$char])) {
                    $char = $current_font['differences'][$char];
                }

                if (isset($current_font['C'][$char])) {
                    $char_width = $current_font['C'][$char];

                    // add the character width
                    $w += $char_width;

                    // add additional padding for space
                    if (isset($current_font['codeToName'][$char]) && $current_font['codeToName'][$char] === 'space') {  // Space
                        $w += $wordSpacing * $space_scale;
                    }
                }
            }

            // add additional char spacing
            if ($charSpacing != 0) {
                $w += $charSpacing * $space_scale * $len;
            }
        }

        $this->currentTextState = $store_currentTextState;
        $this->setCurrentFont();

        return $w * $size / 1000;
    }

    /**
     * this will be called at a new page to return the state to what it was on the
     * end of the previous page, before the stack was closed down
     * This is to get around not being able to have open 'q' across pages
     *
     * @param int $pageEnd
     */
    function saveState($pageEnd = 0)
    {
        if ($pageEnd) {
            // this will be called at a new page to return the state to what it was on the
            // end of the previous page, before the stack was closed down
            // This is to get around not being able to have open 'q' across pages
            $opt = $this->stateStack[$pageEnd];
            // ok to use this as stack starts numbering at 1
            $this->setColor($opt['col'], true);
            $this->setStrokeColor($opt['str'], true);
            $this->addContent("\n" . $opt['lin']);
            //    $this->currentLineStyle = $opt['lin'];
        } else {
            $this->nStateStack++;
            $this->stateStack[$this->nStateStack] = [
                'col' => $this->currentColor,
                'str' => $this->currentStrokeColor,
                'lin' => $this->currentLineStyle
            ];
        }

        $this->save();
    }

    /**
     * restore a previously saved state
     *
     * @param int $pageEnd
     */
    function restoreState($pageEnd = 0)
    {
        if (!$pageEnd) {
            $n = $this->nStateStack;
            $this->currentColor = $this->stateStack[$n]['col'];
            $this->currentStrokeColor = $this->stateStack[$n]['str'];
            $this->addContent("\n" . $this->stateStack[$n]['lin']);
            $this->currentLineStyle = $this->stateStack[$n]['lin'];
            $this->stateStack[$n] = null;
            unset($this->stateStack[$n]);
            $this->nStateStack--;
        }

        $this->restore();
    }

    /**
     * make a loose object, the output will go into this object, until it is closed, then will revert to
     * the current one.
     * this object will not appear until it is included within a page.
     * the function will return the object number
     *
     * @return int
     */
    function openObject()
    {
        $this->nStack++;
        $this->stack[$this->nStack] = ['c' => $this->currentContents, 'p' => $this->currentPage];
        // add a new object of the content type, to hold the data flow
        $this->numObj++;
        $this->o_contents($this->numObj, 'new');
        $this->currentContents = $this->numObj;
        $this->looseObjects[$this->numObj] = 1;

        return $this->numObj;
    }

    /**
     * open an existing object for editing
     *
     * @param $id
     */
    function reopenObject($id)
    {
        $this->nStack++;
        $this->stack[$this->nStack] = ['c' => $this->currentContents, 'p' => $this->currentPage];
        $this->currentContents = $id;

        // also if this object is the primary contents for a page, then set the current page to its parent
        if (isset($this->objects[$id]['onPage'])) {
            $this->currentPage = $this->objects[$id]['onPage'];
        }
    }

    /**
     * close an object
     */
    function closeObject()
    {
        // close the object, as long as there was one open in the first place, which will be indicated by
        // an objectId on the stack.
        if ($this->nStack > 0) {
            $this->currentContents = $this->stack[$this->nStack]['c'];
            $this->currentPage = $this->stack[$this->nStack]['p'];
            $this->nStack--;
            // easier to probably not worry about removing the old entries, they will be overwritten
            // if there are new ones.
        }
    }

    /**
     * stop an object from appearing on pages from this point on
     *
     * @param $id
     */
    function stopObject($id)
    {
        // if an object has been appearing on pages up to now, then stop it, this page will
        // be the last one that could contain it.
        if (isset($this->addLooseObjects[$id])) {
            $this->addLooseObjects[$id] = '';
        }
    }

    /**
     * after an object has been created, it wil only show if it has been added, using this function.
     *
     * @param $id
     * @param string $options
     */
    function addObject($id, $options = 'add')
    {
        // add the specified object to the page
        if (isset($this->looseObjects[$id]) && $this->currentContents != $id) {
            // then it is a valid object, and it is not being added to itself
            switch ($options) {
                case 'all':
                    // then this object is to be added to this page (done in the next block) and
                    // all future new pages.
                    $this->addLooseObjects[$id] = 'all';

                case 'add':
                    if (isset($this->objects[$this->currentContents]['onPage'])) {
                        // then the destination contents is the primary for the page
                        // (though this object is actually added to that page)
                        $this->o_page($this->objects[$this->currentContents]['onPage'], 'content', $id);
                    }
                    break;

                case 'even':
                    $this->addLooseObjects[$id] = 'even';
                    $pageObjectId = $this->objects[$this->currentContents]['onPage'];
                    if ($this->objects[$pageObjectId]['info']['pageNum'] % 2 == 0) {
                        $this->addObject($id);
                        // hacky huh :)
                    }
                    break;

                case 'odd':
                    $this->addLooseObjects[$id] = 'odd';
                    $pageObjectId = $this->objects[$this->currentContents]['onPage'];
                    if ($this->objects[$pageObjectId]['info']['pageNum'] % 2 == 1) {
                        $this->addObject($id);
                        // hacky huh :)
                    }
                    break;

                case 'next':
                    $this->addLooseObjects[$id] = 'all';
                    break;

                case 'nexteven':
                    $this->addLooseObjects[$id] = 'even';
                    break;

                case 'nextodd':
                    $this->addLooseObjects[$id] = 'odd';
                    break;
            }
        }
    }

    /**
     * return a storable representation of a specific object
     *
     * @param $id
     * @return string|null
     */
    function serializeObject($id)
    {
        if (array_key_exists($id, $this->objects)) {
            return serialize($this->objects[$id]);
        }

        return null;
    }

    /**
     * restore an object from its stored representation. Returns its new object id.
     *
     * @param $obj
     * @return int
     */
    function restoreSerializedObject($obj)
    {
        $obj_id = $this->openObject();
        $this->objects[$obj_id] = unserialize($obj);
        $this->closeObject();

        return $obj_id;
    }

    /**
     * Embeds a file inside the PDF
     *
     * @param string $filepath path to the file to store inside the PDF
     * @param string $embeddedFilename the filename displayed in the list of embedded files
     * @param string $description a description in the list of embedded files
     */
    public function addEmbeddedFile(string $filepath, string $embeddedFilename, string $description): void
    {
        $this->numObj++;
        $this->o_embedded_file_dictionary(
            $this->numObj,
            'new',
            [
                'filepath' => $filepath,
                'filename' => $embeddedFilename,
                'description' => $description
            ]
        );
    }

    /**
     * Add content to the documents info object
     *
     * @param string|array $label
     * @param string       $value
     */
    public function addInfo($label, string $value = ""): void
    {
        // this will only work if the label is one of the valid ones.
        // modify this so that arrays can be passed as well.
        // if $label is an array then assume that it is key => value pairs
        // else assume that they are both scalar, anything else will probably error
        if (is_array($label)) {
            foreach ($label as $l => $v) {
                $this->o_info($this->infoObject, $l, (string) $v);
            }
        } else {
            $this->o_info($this->infoObject, $label, $value);
        }
    }

    /**
     * set the viewer preferences of the document, it is up to the browser to obey these.
     *
     * @param $label
     * @param int $value
     */
    function setPreferences($label, $value = 0)
    {
        // this will only work if the label is one of the valid ones.
        if (is_array($label)) {
            foreach ($label as $l => $v) {
                $this->o_catalog($this->catalogId, 'viewerPreferences', [$l => $v]);
            }
        } else {
            $this->o_catalog($this->catalogId, 'viewerPreferences', [$label => $value]);
        }
    }

    /**
     * extract an integer from a position in a byte stream
     *
     * @param $data
     * @param $pos
     * @param $num
     * @return int
     */
    private function getBytes(&$data, $pos, $num)
    {
        // return the integer represented by $num bytes from $pos within $data
        $ret = 0;
        for ($i = 0; $i < $num; $i++) {
            $ret *= 256;
            $ret += ord($data[$pos + $i]);
        }

        return $ret;
    }

    /**
     * Check if image already added to pdf image directory.
     * If yes, need not to create again (pass empty data)
     *
     * @param string $imgname
     * @return bool
     */
    function image_iscached($imgname)
    {
        return isset($this->imagelist[$imgname]);
    }

    /**
     * add a PNG image into the document, from a GD object
     * this should work with remote files
     *
     * @param \GdImage|resource $img A GD resource
     * @param string $file The PNG file
     * @param float $x X position
     * @param float $y Y position
     * @param float $w Width
     * @param float $h Height
     * @param bool $is_mask true if the image is a mask
     * @param bool $mask true if the image is masked
     * @throws Exception
     */
    function addImagePng(&$img, $file, $x, $y, $w = 0.0, $h = 0.0, $is_mask = false, $mask = null)
    {
        if (!function_exists("imagepng")) {
            throw new \Exception("The PHP GD extension is required, but is not installed.");
        }

        //if already cached, need not to read again
        if (isset($this->imagelist[$file])) {
            $data = null;
        } else {
            // Example for transparency handling on new image. Retain for current image
            // $tIndex = imagecolortransparent($img);
            // if ($tIndex > 0) {
            //   $tColor    = imagecolorsforindex($img, $tIndex);
            //   $new_tIndex    = imagecolorallocate($new_img, $tColor['red'], $tColor['green'], $tColor['blue']);
            //   imagefill($new_img, 0, 0, $new_tIndex);
            //   imagecolortransparent($new_img, $new_tIndex);
            // }
            // blending mode (literal/blending) on drawing into current image. not relevant when not saved or not drawn
            //imagealphablending($img, true);

            //default, but explicitely set to ensure pdf compatibility
            imagesavealpha($img, false/*!$is_mask && !$mask*/);

            $error = 0;
            //DEBUG_IMG_TEMP
            //debugpng
            if (defined("DEBUGPNG") && DEBUGPNG) {
                print '[addImagePng ' . $file . ']';
            }

            ob_start();
            @imagepng($img);
            $data = ob_get_clean();

            if ($data == '') {
                $error = 1;
                $errormsg = 'trouble writing file from GD';
                //DEBUG_IMG_TEMP
                //debugpng
                if (defined("DEBUGPNG") && DEBUGPNG) {
                    print 'trouble writing file from GD';
                }
            }

            if ($error) {
                $this->addMessage('PNG error - (' . $file . ') ' . $errormsg);

                return;
            }
        }  //End isset($this->imagelist[$file]) (png Duplicate removal)

        $this->addPngFromBuf($data, $file, $x, $y, $w, $h, $is_mask, $mask);
    }

    /**
     * @param $file
     * @param $x
     * @param $y
     * @param $w
     * @param $h
     * @param $byte
     */
    protected function addImagePngAlpha($file, $x, $y, $w, $h, $byte)
    {
        // generate images
        $img = @imagecreatefrompng($file);

        if ($img === false) {
            return;
        }

        // FIXME The pixel transformation doesn't work well with 8bit PNGs
        $eight_bit = ($byte & 4) !== 4;

        $wpx = imagesx($img);
        $hpx = imagesy($img);

        imagesavealpha($img, false);

        // create temp alpha file
        $tempfile_alpha = @tempnam($this->tmp, "cpdf_img_");
        @unlink($tempfile_alpha);
        $tempfile_alpha = "$tempfile_alpha.png";

        // create temp plain file
        $tempfile_plain = @tempnam($this->tmp, "cpdf_img_");
        @unlink($tempfile_plain);
        $tempfile_plain = "$tempfile_plain.png";

        $imgalpha = imagecreate($wpx, $hpx);
        imagesavealpha($imgalpha, false);

        // generate gray scale palette (0 -> 255)
        for ($c = 0; $c < 256; ++$c) {
            imagecolorallocate($imgalpha, $c, $c, $c);
        }

        // Use PECL gmagick + Graphics Magic to process transparent PNG images
        if (extension_loaded("gmagick")) {
            $gmagick = new \Gmagick($file);
            $gmagick->setimageformat('png');

            // Get opacity channel (negative of alpha channel)
            $alpha_channel_neg = clone $gmagick;
            $alpha_channel_neg->separateimagechannel(\Gmagick::CHANNEL_OPACITY);

            // Negate opacity channel
            $alpha_channel = new \Gmagick();
            $alpha_channel->newimage($wpx, $hpx, "#FFFFFF", "png");
            $alpha_channel->compositeimage($alpha_channel_neg, \Gmagick::COMPOSITE_DIFFERENCE, 0, 0);
            $alpha_channel->separateimagechannel(\Gmagick::CHANNEL_RED);
            $alpha_channel->writeimage($tempfile_alpha);

            // Cast to 8bit+palette
            $imgalpha_ = @imagecreatefrompng($tempfile_alpha);
            imagecopy($imgalpha, $imgalpha_, 0, 0, 0, 0, $wpx, $hpx);
            imagedestroy($imgalpha_);
            imagepng($imgalpha, $tempfile_alpha);

            // Make opaque image
            $color_channels = new \Gmagick();
            $color_channels->newimage($wpx, $hpx, "#FFFFFF", "png");
            $color_channels->compositeimage($gmagick, \Gmagick::COMPOSITE_COPYRED, 0, 0);
            $color_channels->compositeimage($gmagick, \Gmagick::COMPOSITE_COPYGREEN, 0, 0);
            $color_channels->compositeimage($gmagick, \Gmagick::COMPOSITE_COPYBLUE, 0, 0);
            $color_channels->writeimage($tempfile_plain);

            $imgplain = @imagecreatefrompng($tempfile_plain);
        }
        // Use PECL imagick + ImageMagic to process transparent PNG images
        elseif (extension_loaded("imagick")) {
            // Native cloning was added to pecl-imagick in svn commit 263814
            // the first version containing it was 3.0.1RC1
            static $imagickClonable = null;
            if ($imagickClonable === null) {
                $imagickClonable = true;
                if (defined('Imagick::IMAGICK_EXTVER')) {
                    $imagickVersion = \Imagick::IMAGICK_EXTVER;
                } else {
                    $imagickVersion = '0';
                }
                if (version_compare($imagickVersion, '0.0.1', '>=')) {
                    $imagickClonable = version_compare($imagickVersion, '3.0.1rc1', '>=');
                }
            }

            $imagick = new \Imagick($file);
            $imagick->setFormat('png');

            // Get opacity channel (negative of alpha channel)
            if ($imagick->getImageAlphaChannel()) {
                $alpha_channel = $imagickClonable ? clone $imagick : $imagick->clone();
                $alpha_channel->separateImageChannel(\Imagick::CHANNEL_ALPHA);
                // Since ImageMagick7 negate invert transparency as default
                if (\Imagick::getVersion()['versionNumber'] < 1800) {
                    $alpha_channel->negateImage(true);
                }
                $alpha_channel->writeImage($tempfile_alpha);

                // Cast to 8bit+palette
                $imgalpha_ = @imagecreatefrompng($tempfile_alpha);
                imagecopy($imgalpha, $imgalpha_, 0, 0, 0, 0, $wpx, $hpx);
                imagedestroy($imgalpha_);
                imagepng($imgalpha, $tempfile_alpha);
            } else {
                $tempfile_alpha = null;
            }

            // Make opaque image
            $color_channels = new \Imagick();
            $color_channels->newImage($wpx, $hpx, "#FFFFFF", "png");
            $color_channels->compositeImage($imagick, \Imagick::COMPOSITE_COPYRED, 0, 0);
            $color_channels->compositeImage($imagick, \Imagick::COMPOSITE_COPYGREEN, 0, 0);
            $color_channels->compositeImage($imagick, \Imagick::COMPOSITE_COPYBLUE, 0, 0);
            $color_channels->writeImage($tempfile_plain);

            $imgplain = @imagecreatefrompng($tempfile_plain);
        } else {
            // allocated colors cache
            $allocated_colors = [];

            // extract alpha channel
            for ($xpx = 0; $xpx < $wpx; ++$xpx) {
                for ($ypx = 0; $ypx < $hpx; ++$ypx) {
                    $color = imagecolorat($img, $xpx, $ypx);
                    $col = imagecolorsforindex($img, $color);
                    $alpha = $col['alpha'];

                    if ($eight_bit) {
                        // with gamma correction
                        $gammacorr = 2.2;
                        $pixel = round(pow((((127 - $alpha) * 255 / 127) / 255), $gammacorr) * 255);
                    } else {
                        // without gamma correction
                        $pixel = (127 - $alpha) * 2;

                        $key = $col['red'] . $col['green'] . $col['blue'];

                        if (!isset($allocated_colors[$key])) {
                            $pixel_img = imagecolorallocate($img, $col['red'], $col['green'], $col['blue']);
                            $allocated_colors[$key] = $pixel_img;
                        } else {
                            $pixel_img = $allocated_colors[$key];
                        }

                        imagesetpixel($img, $xpx, $ypx, $pixel_img);
                    }

                    imagesetpixel($imgalpha, $xpx, $ypx, $pixel);
                }
            }

            // extract image without alpha channel
            $imgplain = imagecreatetruecolor($wpx, $hpx);
            imagecopy($imgplain, $img, 0, 0, 0, 0, $wpx, $hpx);
            imagedestroy($img);

            imagepng($imgalpha, $tempfile_alpha);
            imagepng($imgplain, $tempfile_plain);
        }

        $this->imageAlphaList[$file] = [$tempfile_alpha, $tempfile_plain];

        // embed mask image
        if ($tempfile_alpha) {
            $this->addImagePng($imgalpha, $tempfile_alpha, $x, $y, $w, $h, true);
            imagedestroy($imgalpha);
            $this->imageCache[] = $tempfile_alpha;
        }

        // embed image, masked with previously embedded mask
        $this->addImagePng($imgplain, $tempfile_plain, $x, $y, $w, $h, false, ($tempfile_alpha !== null));
        imagedestroy($imgplain);
        $this->imageCache[] = $tempfile_plain;
    }

    /**
     * add a PNG image into the document, from a file
     * this should work with remote files
     *
     * @param $file
     * @param $x
     * @param $y
     * @param int $w
     * @param int $h
     * @throws Exception
     */
    function addPngFromFile($file, $x, $y, $w = 0, $h = 0)
    {
        if (!function_exists("imagecreatefrompng")) {
            throw new \Exception("The PHP GD extension is required, but is not installed.");
        }

        if (isset($this->imageAlphaList[$file])) {
            [$alphaFile, $plainFile] = $this->imageAlphaList[$file];

            if ($alphaFile) {
                $img = null;
                $this->addImagePng($img, $alphaFile, $x, $y, $w, $h, true);
            }

            $img = null;
            $this->addImagePng($img, $plainFile, $x, $y, $w, $h, false, ($plainFile !== null));
            return;
        }

        //if already cached, need not to read again
        if (isset($this->imagelist[$file])) {
            $img = null;
        } else {
            $info = file_get_contents($file, false, null, 24, 5);
            $meta = unpack("CbitDepth/CcolorType/CcompressionMethod/CfilterMethod/CinterlaceMethod", $info);
            $bit_depth = $meta["bitDepth"];
            $color_type = $meta["colorType"];

            // http://www.w3.org/TR/PNG/#11IHDR
            // 3 => indexed
            // 4 => greyscale with alpha
            // 6 => fullcolor with alpha
            $is_alpha = in_array($color_type, [4, 6]) || ($color_type == 3 && $bit_depth != 4);

            if ($is_alpha) { // exclude grayscale alpha
                $this->addImagePngAlpha($file, $x, $y, $w, $h, $color_type);
                return;
            }

            //png files typically contain an alpha channel.
            //pdf file format or class.pdf does not support alpha blending.
            //on alpha blended images, more transparent areas have a color near black.
            //This appears in the result on not storing the alpha channel.
            //Correct would be the box background image or its parent when transparent.
            //But this would make the image dependent on the background.
            //Therefore create an image with white background and copy in
            //A more natural background than black is white.
            //Therefore create an empty image with white background and merge the
            //image in with alpha blending.
            $imgtmp = @imagecreatefrompng($file);
            if (!$imgtmp) {
                return;
            }
            $sx = imagesx($imgtmp);
            $sy = imagesy($imgtmp);
            $img = imagecreatetruecolor($sx, $sy);
            imagealphablending($img, true);

            // @todo is it still needed ??
            $ti = imagecolortransparent($imgtmp);
            if ($ti >= 0) {
                $tc = imagecolorsforindex($imgtmp, $ti);
                $ti = imagecolorallocate($img, $tc['red'], $tc['green'], $tc['blue']);
                imagefill($img, 0, 0, $ti);
                imagecolortransparent($img, $ti);
            } else {
                imagefill($img, 1, 1, imagecolorallocate($img, 255, 255, 255));
            }

            imagecopy($img, $imgtmp, 0, 0, 0, 0, $sx, $sy);
            imagedestroy($imgtmp);
        }
        $this->addImagePng($img, $file, $x, $y, $w, $h);

        if ($img) {
            imagedestroy($img);
        }
    }

    /**
     * add a PNG image into the document, from a memory buffer of the file
     *
     * @param $data
     * @param $file
     * @param $x
     * @param $y
     * @param float $w
     * @param float $h
     * @param bool $is_mask
     * @param null $mask
     */
    function addPngFromBuf(&$data, $file, $x, $y, $w = 0.0, $h = 0.0, $is_mask = false, $mask = null)
    {
        if (isset($this->imagelist[$file])) {
            $data = null;
            $info['width'] = $this->imagelist[$file]['w'];
            $info['height'] = $this->imagelist[$file]['h'];
            $label = $this->imagelist[$file]['label'];
        } else {
            if ($data == null) {
                $this->addMessage('addPngFromBuf error - data not present!');

                return;
            }

            $error = 0;

            if (!$error) {
                $header = chr(137) . chr(80) . chr(78) . chr(71) . chr(13) . chr(10) . chr(26) . chr(10);

                if (mb_substr($data, 0, 8, '8bit') != $header) {
                    $error = 1;

                    if (defined("DEBUGPNG") && DEBUGPNG) {
                        print '[addPngFromFile this file does not have a valid header ' . $file . ']';
                    }

                    $errormsg = 'this file does not have a valid header';
                }
            }

            if (!$error) {
                // set pointer
                $p = 8;
                $len = mb_strlen($data, '8bit');

                // cycle through the file, identifying chunks
                $haveHeader = 0;
                $info = [];
                $idata = '';
                $pdata = '';

                while ($p < $len) {
                    $chunkLen = $this->getBytes($data, $p, 4);
                    $chunkType = mb_substr($data, $p + 4, 4, '8bit');

                    switch ($chunkType) {
                        case 'IHDR':
                            // this is where all the file information comes from
                            $info['width'] = $this->getBytes($data, $p + 8, 4);
                            $info['height'] = $this->getBytes($data, $p + 12, 4);
                            $info['bitDepth'] = ord($data[$p + 16]);
                            $info['colorType'] = ord($data[$p + 17]);
                            $info['compressionMethod'] = ord($data[$p + 18]);
                            $info['filterMethod'] = ord($data[$p + 19]);
                            $info['interlaceMethod'] = ord($data[$p + 20]);

                            //print_r($info);
                            $haveHeader = 1;
                            if ($info['compressionMethod'] != 0) {
                                $error = 1;

                                //debugpng
                                if (defined("DEBUGPNG") && DEBUGPNG) {
                                    print '[addPngFromFile unsupported compression method ' . $file . ']';
                                }

                                $errormsg = 'unsupported compression method';
                            }

                            if ($info['filterMethod'] != 0) {
                                $error = 1;

                                //debugpng
                                if (defined("DEBUGPNG") && DEBUGPNG) {
                                    print '[addPngFromFile unsupported filter method ' . $file . ']';
                                }

                                $errormsg = 'unsupported filter method';
                            }
                            break;

                        case 'PLTE':
                            $pdata .= mb_substr($data, $p + 8, $chunkLen, '8bit');
                            break;

                        case 'IDAT':
                            $idata .= mb_substr($data, $p + 8, $chunkLen, '8bit');
                            break;

                        case 'tRNS':
                            //this chunk can only occur once and it must occur after the PLTE chunk and before IDAT chunk
                            //print "tRNS found, color type = ".$info['colorType']."\n";
                            $transparency = [];

                            switch ($info['colorType']) {
                                // indexed color, rbg
                                case 3:
                                    /* corresponding to entries in the plte chunk
                                     Alpha for palette index 0: 1 byte
                                     Alpha for palette index 1: 1 byte
                                     ...etc...
                                    */
                                    // there will be one entry for each palette entry. up until the last non-opaque entry.
                                    // set up an array, stretching over all palette entries which will be o (opaque) or 1 (transparent)
                                    $transparency['type'] = 'indexed';
                                    $trans = 0;

                                    for ($i = $chunkLen; $i >= 0; $i--) {
                                        if (ord($data[$p + 8 + $i]) == 0) {
                                            $trans = $i;
                                        }
                                    }

                                    $transparency['data'] = $trans;
                                    break;

                                // grayscale
                                case 0:
                                    /* corresponding to entries in the plte chunk
                                     Gray: 2 bytes, range 0 .. (2^bitdepth)-1
                                    */
                                    //            $transparency['grayscale'] = $this->PRVT_getBytes($data,$p+8,2); // g = grayscale
                                    $transparency['type'] = 'indexed';
                                    $transparency['data'] = ord($data[$p + 8 + 1]);
                                    break;

                                // truecolor
                                case 2:
                                    /* corresponding to entries in the plte chunk
                                     Red: 2 bytes, range 0 .. (2^bitdepth)-1
                                     Green: 2 bytes, range 0 .. (2^bitdepth)-1
                                     Blue: 2 bytes, range 0 .. (2^bitdepth)-1
                                    */
                                    $transparency['r'] = $this->getBytes($data, $p + 8, 2);
                                    // r from truecolor
                                    $transparency['g'] = $this->getBytes($data, $p + 10, 2);
                                    // g from truecolor
                                    $transparency['b'] = $this->getBytes($data, $p + 12, 2);
                                    // b from truecolor

                                    $transparency['type'] = 'color-key';
                                    break;

                                //unsupported transparency type
                                default:
                                    if (defined("DEBUGPNG") && DEBUGPNG) {
                                        print '[addPngFromFile unsupported transparency type ' . $file . ']';
                                    }
                                    break;
                            }

                            // KS End new code
                            break;

                        default:
                            break;
                    }

                    $p += $chunkLen + 12;
                }

                if (!$haveHeader) {
                    $error = 1;

                    //debugpng
                    if (defined("DEBUGPNG") && DEBUGPNG) {
                        print '[addPngFromFile information header is missing ' . $file . ']';
                    }

                    $errormsg = 'information header is missing';
                }

                if (isset($info['interlaceMethod']) && $info['interlaceMethod']) {
                    $error = 1;

                    //debugpng
                    if (defined("DEBUGPNG") && DEBUGPNG) {
                        print '[addPngFromFile no support for interlaced images in pdf ' . $file . ']';
                    }

                    $errormsg = 'There appears to be no support for interlaced images in pdf.';
                }
            }

            if (!$error && $info['bitDepth'] > 8) {
                $error = 1;

                //debugpng
                if (defined("DEBUGPNG") && DEBUGPNG) {
                    print '[addPngFromFile bit depth of 8 or less is supported ' . $file . ']';
                }

                $errormsg = 'only bit depth of 8 or less is supported';
            }

            if (!$error) {
                switch ($info['colorType']) {
                    case 3:
                        $color = 'DeviceRGB';
                        $ncolor = 1;
                        break;

                    case 2:
                        $color = 'DeviceRGB';
                        $ncolor = 3;
                        break;

                    case 0:
                        $color = 'DeviceGray';
                        $ncolor = 1;
                        break;

                    default:
                        $error = 1;

                        //debugpng
                        if (defined("DEBUGPNG") && DEBUGPNG) {
                            print '[addPngFromFile alpha channel not supported: ' . $info['colorType'] . ' ' . $file . ']';
                        }

                        $errormsg = 'transparency alpha channel not supported, transparency only supported for palette images.';
                }
            }

            if ($error) {
                $this->addMessage('PNG error - (' . $file . ') ' . $errormsg);

                return;
            }

            //print_r($info);
            // so this image is ok... add it in.
            $this->numImages++;
            $im = $this->numImages;
            $label = "I$im";
            $this->numObj++;

            //  $this->o_image($this->numObj,'new',array('label' => $label,'data' => $idata,'iw' => $w,'ih' => $h,'type' => 'png','ic' => $info['width']));
            $options = [
                'label'            => $label,
                'data'             => $idata,
                'bitsPerComponent' => $info['bitDepth'],
                'pdata'            => $pdata,
                'iw'               => $info['width'],
                'ih'               => $info['height'],
                'type'             => 'png',
                'color'            => $color,
                'ncolor'           => $ncolor,
                'masked'           => $mask,
                'isMask'           => $is_mask
            ];

            if (isset($transparency)) {
                $options['transparency'] = $transparency;
            }

            $this->o_image($this->numObj, 'new', $options);
            $this->imagelist[$file] = ['label' => $label, 'w' => $info['width'], 'h' => $info['height']];
        }

        if ($is_mask) {
            return;
        }

        if ($w <= 0 && $h <= 0) {
            $w = $info['width'];
            $h = $info['height'];
        }

        if ($w <= 0) {
            $w = $h / $info['height'] * $info['width'];
        }

        if ($h <= 0) {
            $h = $w * $info['height'] / $info['width'];
        }

        $this->addContent(sprintf("\nq\n%.3F 0 0 %.3F %.3F %.3F cm /%s Do\nQ", $w, $h, $x, $y, $label));
    }

    /**
     * add a JPEG image into the document, from a file
     *
     * @param $img
     * @param $x
     * @param $y
     * @param int $w
     * @param int $h
     */
    function addJpegFromFile($img, $x, $y, $w = 0, $h = 0)
    {
        // attempt to add a jpeg image straight from a file, using no GD commands
        // note that this function is unable to operate on a remote file.

        if (!file_exists($img)) {
            return;
        }

        if ($this->image_iscached($img)) {
            $data = null;
            $imageWidth = $this->imagelist[$img]['w'];
            $imageHeight = $this->imagelist[$img]['h'];
            $channels = $this->imagelist[$img]['c'];
        } else {
            $tmp = getimagesize($img);
            $imageWidth = $tmp[0];
            $imageHeight = $tmp[1];

            if (isset($tmp['channels'])) {
                $channels = $tmp['channels'];
            } else {
                $channels = 3;
            }

            $data = file_get_contents($img);
        }

        if ($w <= 0 && $h <= 0) {
            $w = $imageWidth;
        }

        if ($w == 0) {
            $w = $h / $imageHeight * $imageWidth;
        }

        if ($h == 0) {
            $h = $w * $imageHeight / $imageWidth;
        }

        $this->addJpegImage_common($data, $img, $imageWidth, $imageHeight, $x, $y, $w, $h, $channels);
    }

    /**
     * common code used by the two JPEG adding functions
     * @param $data
     * @param $imgname
     * @param $imageWidth
     * @param $imageHeight
     * @param $x
     * @param $y
     * @param int $w
     * @param int $h
     * @param int $channels
     */
    private function addJpegImage_common(
        &$data,
        $imgname,
        $imageWidth,
        $imageHeight,
        $x,
        $y,
        $w = 0,
        $h = 0,
        $channels = 3
    ) {
        if ($this->image_iscached($imgname)) {
            $label = $this->imagelist[$imgname]['label'];
            //debugpng
            //if (DEBUGPNG) print '[addJpegImage_common Duplicate '.$imgname.']';

        } else {
            if ($data == null) {
                $this->addMessage('addJpegImage_common error - (' . $imgname . ') data not present!');

                return;
            }

            // note that this function is not to be called externally
            // it is just the common code between the GD and the file options
            $this->numImages++;
            $im = $this->numImages;
            $label = "I$im";
            $this->numObj++;

            $this->o_image(
                $this->numObj,
                'new',
                [
                    'label'    => $label,
                    'data'     => &$data,
                    'iw'       => $imageWidth,
                    'ih'       => $imageHeight,
                    'channels' => $channels
                ]
            );

            $this->imagelist[$imgname] = [
                'label' => $label,
                'w'     => $imageWidth,
                'h'     => $imageHeight,
                'c'     => $channels
            ];
        }

        $this->addContent(sprintf("\nq\n%.3F 0 0 %.3F %.3F %.3F cm /%s Do\nQ ", $w, $h, $x, $y, $label));
    }

    /**
     * specify where the document should open when it first starts
     *
     * @param $style
     * @param int $a
     * @param int $b
     * @param int $c
     */
    function openHere($style, $a = 0, $b = 0, $c = 0)
    {
        // this function will open the document at a specified page, in a specified style
        // the values for style, and the required parameters are:
        // 'XYZ'  left, top, zoom
        // 'Fit'
        // 'FitH' top
        // 'FitV' left
        // 'FitR' left,bottom,right
        // 'FitB'
        // 'FitBH' top
        // 'FitBV' left
        $this->numObj++;
        $this->o_destination(
            $this->numObj,
            'new',
            ['page' => $this->currentPage, 'type' => $style, 'p1' => $a, 'p2' => $b, 'p3' => $c]
        );
        $id = $this->catalogId;
        $this->o_catalog($id, 'openHere', $this->numObj);
    }

    /**
     * Add JavaScript code to the PDF document
     *
     * @param string $code
     */
    function addJavascript($code)
    {
        $this->javascript .= $code;
    }

    /**
     * create a labelled destination within the document
     *
     * @param $label
     * @param $style
     * @param int $a
     * @param int $b
     * @param int $c
     */
    function addDestination($label, $style, $a = 0, $b = 0, $c = 0)
    {
        // associates the given label with the destination, it is done this way so that a destination can be specified after
        // it has been linked to
        // styles are the same as the 'openHere' function
        $this->numObj++;
        $this->o_destination(
            $this->numObj,
            'new',
            ['page' => $this->currentPage, 'type' => $style, 'p1' => $a, 'p2' => $b, 'p3' => $c]
        );
        $id = $this->numObj;

        // store the label->idf relationship, note that this means that labels can be used only once
        $this->destinations["$label"] = $id;
    }

    /**
     * define font families, this is used to initialize the font families for the default fonts
     * and for the user to add new ones for their fonts. The default bahavious can be overridden should
     * that be desired.
     *
     * @param $family
     * @param string $options
     */
    function setFontFamily($family, $options = '')
    {
        if (!is_array($options)) {
            if ($family === 'init') {
                // set the known family groups
                // these font families will be used to enable bold and italic markers to be included
                // within text streams. html forms will be used... <b></b> <i></i>
                $this->fontFamilies['Helvetica.afm'] =
                    [
                        'b'  => 'Helvetica-Bold.afm',
                        'i'  => 'Helvetica-Oblique.afm',
                        'bi' => 'Helvetica-BoldOblique.afm',
                        'ib' => 'Helvetica-BoldOblique.afm'
                    ];

                $this->fontFamilies['Courier.afm'] =
                    [
                        'b'  => 'Courier-Bold.afm',
                        'i'  => 'Courier-Oblique.afm',
                        'bi' => 'Courier-BoldOblique.afm',
                        'ib' => 'Courier-BoldOblique.afm'
                    ];

                $this->fontFamilies['Times-Roman.afm'] =
                    [
                        'b'  => 'Times-Bold.afm',
                        'i'  => 'Times-Italic.afm',
                        'bi' => 'Times-BoldItalic.afm',
                        'ib' => 'Times-BoldItalic.afm'
                    ];
            }
        } else {

            // the user is trying to set a font family
            // note that this can also be used to set the base ones to something else
            if (mb_strlen($family)) {
                $this->fontFamilies[$family] = $options;
            }
        }
    }

    /**
     * used to add messages for use in debugging
     *
     * @param $message
     */
    function addMessage($message)
    {
        $this->messages .= $message . "\n";
    }

    /**
     * a few functions which should allow the document to be treated transactionally.
     *
     * @param $action
     */
    function transaction($action)
    {
        switch ($action) {
            case 'start':
                // store all the data away into the checkpoint variable
                $data = get_object_vars($this);
                $this->checkpoint = $data;
                unset($data);
                break;

            case 'commit':
                if (is_array($this->checkpoint) && isset($this->checkpoint['checkpoint'])) {
                    $tmp = $this->checkpoint['checkpoint'];
                    $this->checkpoint = $tmp;
                    unset($tmp);
                } else {
                    $this->checkpoint = '';
                }
                break;

            case 'rewind':
                // do not destroy the current checkpoint, but move us back to the state then, so that we can try again
                if (is_array($this->checkpoint)) {
                    // can only abort if were inside a checkpoint
                    $tmp = $this->checkpoint;

                    foreach ($tmp as $k => $v) {
                        if ($k !== 'checkpoint') {
                            $this->$k = $v;
                        }
                    }
                    unset($tmp);
                }
                break;

            case 'abort':
                if (is_array($this->checkpoint)) {
                    // can only abort if were inside a checkpoint
                    $tmp = $this->checkpoint;
                    foreach ($tmp as $k => $v) {
                        $this->$k = $v;
                    }
                    unset($tmp);
                }
                break;
        }
    }
}
<?php
/**
 * @package php-svg-lib
 * @link    http://github.com/PhenX/php-svg-lib
 * @author  Fabien Ménager <fabien.menager@gmail.com>
 * @license GNU LGPLv3+ http://www.gnu.org/copyleft/lesser.html
 */

namespace Svg\Surface;

use Svg\Document;
use Svg\Style;

class SurfaceCpdf implements SurfaceInterface
{
    const DEBUG = false;

    /** @var \Svg\Surface\CPdf */
    private $canvas;

    private $width;
    private $height;

    /** @var Style */
    private $style;

    public function __construct(Document $doc, $canvas = null)
    {
        if (self::DEBUG) echo __FUNCTION__ . "\n";

        $dimensions = $doc->getDimensions();
        $w = $dimensions["width"];
        $h = $dimensions["height"];

        if (!$canvas) {
            $canvas = new \Svg\Surface\CPdf(array(0, 0, $w, $h));
            $refl = new \ReflectionClass($canvas);
            $canvas->fontcache = realpath(dirname($refl->getFileName()) . "/../../fonts/")."/";
        }

        // Flip PDF coordinate system so that the origin is in
        // the top left rather than the bottom left
        $canvas->transform(array(
            1,  0,
            0, -1,
            0, $h
        ));

        $this->width  = $w;
        $this->height = $h;

        $this->canvas = $canvas;
    }

    function out()
    {
        if (self::DEBUG) echo __FUNCTION__ . "\n";
        return $this->canvas->output();
    }

    public function save()
    {
        if (self::DEBUG) echo __FUNCTION__ . "\n";
        $this->canvas->save();
    }

    public function restore()
    {
        if (self::DEBUG) echo __FUNCTION__ . "\n";
        $this->canvas->restore();
    }

    public function scale($x, $y)
    {
        if (self::DEBUG) echo __FUNCTION__ . "\n";

        $this->transform($x, 0, 0, $y, 0, 0);
    }

    public function rotate($angle)
    {
        if (self::DEBUG) echo __FUNCTION__ . "\n";

        $a = deg2rad($angle);
        $cos_a = cos($a);
        $sin_a = sin($a);

        $this->transform(
            $cos_a,                         $sin_a,
            -$sin_a,                         $cos_a,
            0, 0
        );
    }

    public function translate($x, $y)
    {
        if (self::DEBUG) echo __FUNCTION__ . "\n";

        $this->transform(
            1,  0,
            0,  1,
            $x, $y
        );
    }

    public function transform($a, $b, $c, $d, $e, $f)
    {
        if (self::DEBUG) echo __FUNCTION__ . "\n";

        $this->canvas->transform(array($a, $b, $c, $d, $e, $f));
    }

    public function beginPath()
    {
        if (self::DEBUG) echo __FUNCTION__ . "\n";
        // TODO: Implement beginPath() method.
    }

    public function closePath()
    {
        if (self::DEBUG) echo __FUNCTION__ . "\n";
        $this->canvas->closePath();
    }

    public function fillStroke(bool $close = false)
    {
        if (self::DEBUG) echo __FUNCTION__ . "\n";
        $this->canvas->fillStroke($close);
    }

    public function clip()
    {
        if (self::DEBUG) echo __FUNCTION__ . "\n";
        $this->canvas->clip();
    }

    public function fillText($text, $x, $y, $maxWidth = null)
    {
        if (self::DEBUG) echo __FUNCTION__ . "\n";
        $this->canvas->addText($x, $y, $this->style->fontSize, $text);
    }

    public function strokeText($text, $x, $y, $maxWidth = null)
    {
        if (self::DEBUG) echo __FUNCTION__ . "\n";
        $this->canvas->addText($x, $y, $this->style->fontSize, $text);
    }

    public function drawImage($image, $sx, $sy, $sw = null, $sh = null, $dx = null, $dy = null, $dw = null, $dh = null)
    {
        if (self::DEBUG) echo __FUNCTION__ . "\n";

        if (strpos($image, "data:") === 0) {
            $parts = explode(',', $image, 2);

            $data = $parts[1];
            $base64 = false;

            $token = strtok($parts[0], ';');
            while ($token !== false) {
                if ($token == 'base64') {
                    $base64 = true;
                }

                $token = strtok(';');
            }

            if ($base64) {
                $data = base64_decode($data);
            }
        }
        else {
            $data = file_get_contents($image);
        }

        $image = tempnam(sys_get_temp_dir(), "svg");
        file_put_contents($image, $data);

        $img = $this->image($image, $sx, $sy, $sw, $sh, "normal");


        unlink($image);
    }

    public static function getimagesize($filename)
    {
        static $cache = array();

        if (isset($cache[$filename])) {
            return $cache[$filename];
        }

        list($width, $height, $type) = getimagesize($filename);

        if ($width == null || $height == null) {
            $data = file_get_contents($filename, null, null, 0, 26);

            if (substr($data, 0, 2) === "BM") {
                $meta = unpack('vtype/Vfilesize/Vreserved/Voffset/Vheadersize/Vwidth/Vheight', $data);
                $width = (int)$meta['width'];
                $height = (int)$meta['height'];
                $type = IMAGETYPE_BMP;
            }
        }

        return $cache[$filename] = array($width, $height, $type);
    }

    function image($img, $x, $y, $w, $h, $resolution = "normal")
    {
        list($width, $height, $type) = $this->getimagesize($img);

        switch ($type) {
            case IMAGETYPE_JPEG:
                $this->canvas->addJpegFromFile($img, $x, $y - $h, $w, $h);
                break;

            case IMAGETYPE_GIF:
            case IMAGETYPE_BMP:
                // @todo use cache for BMP and GIF
                $img = $this->_convert_gif_bmp_to_png($img, $type);

            case IMAGETYPE_PNG:
                $this->canvas->addPngFromFile($img, $x, $y - $h, $w, $h);
                break;

            default:
        }
    }

    public function lineTo($x, $y)
    {
        if (self::DEBUG) echo __FUNCTION__ . "\n";
        $this->canvas->lineTo($x, $y);
    }

    public function moveTo($x, $y)
    {
        if (self::DEBUG) echo __FUNCTION__ . "\n";
        $this->canvas->moveTo($x, $y);
    }

    public function quadraticCurveTo($cpx, $cpy, $x, $y)
    {
        if (self::DEBUG) echo __FUNCTION__ . "\n";

        // FIXME not accurate
        $this->canvas->quadTo($cpx, $cpy, $x, $y);
    }

    public function bezierCurveTo($cp1x, $cp1y, $cp2x, $cp2y, $x, $y)
    {
        if (self::DEBUG) echo __FUNCTION__ . "\n";
        $this->canvas->curveTo($cp1x, $cp1y, $cp2x, $cp2y, $x, $y);
    }

    public function arcTo($x1, $y1, $x2, $y2, $radius)
    {
        if (self::DEBUG) echo __FUNCTION__ . "\n";
    }

    public function arc($x, $y, $radius, $startAngle, $endAngle, $anticlockwise = false)
    {
        if (self::DEBUG) echo __FUNCTION__ . "\n";
        $this->canvas->ellipse($x, $y, $radius, $radius, 0, 8, $startAngle, $endAngle, false, false, false, true);
    }

    public function circle($x, $y, $radius)
    {
        if (self::DEBUG) echo __FUNCTION__ . "\n";
        $this->canvas->ellipse($x, $y, $radius, $radius, 0, 8, 0, 360, true, false, false, false);
    }

    public function ellipse($x, $y, $radiusX, $radiusY, $rotation, $startAngle, $endAngle, $anticlockwise)
    {
        if (self::DEBUG) echo __FUNCTION__ . "\n";
        $this->canvas->ellipse($x, $y, $radiusX, $radiusY, 0, 8, 0, 360, false, false, false, false);
    }

    public function fillRect($x, $y, $w, $h)
    {
        if (self::DEBUG) echo __FUNCTION__ . "\n";
        $this->rect($x, $y, $w, $h);
        $this->fill();
    }

    public function rect($x, $y, $w, $h, $rx = 0, $ry = 0)
    {
        if (self::DEBUG) echo __FUNCTION__ . "\n";

        $canvas = $this->canvas;

        if ($rx <= 0.000001/* && $ry <= 0.000001*/) {
            $canvas->rect($x, $y, $w, $h);

            return;
        }

        $rx = min($rx, $w / 2);
        $rx = min($rx, $h / 2);

        /* Define a path for a rectangle with corners rounded by a given radius.
         * Start from the lower left corner and proceed counterclockwise.
         */
        $this->moveTo($x + $rx, $y);

        /* Start of the arc segment in the lower right corner */
        $this->lineTo($x + $w - $rx, $y);

        /* Arc segment in the lower right corner */
        $this->arc($x + $w - $rx, $y + $rx, $rx, 270, 360);

        /* Start of the arc segment in the upper right corner */
        $this->lineTo($x + $w, $y + $h - $rx );

        /* Arc segment in the upper right corner */
        $this->arc($x + $w - $rx, $y + $h - $rx, $rx, 0, 90);

        /* Start of the arc segment in the upper left corner */
        $this->lineTo($x + $rx, $y + $h);

        /* Arc segment in the upper left corner */
        $this->arc($x + $rx, $y + $h - $rx, $rx, 90, 180);

        /* Start of the arc segment in the lower left corner */
        $this->lineTo($x , $y + $rx);

        /* Arc segment in the lower left corner */
        $this->arc($x + $rx, $y + $rx, $rx, 180, 270);
    }

    public function fill()
    {
        if (self::DEBUG) echo __FUNCTION__ . "\n";
        $this->canvas->fill();
    }

    public function strokeRect($x, $y, $w, $h)
    {
        if (self::DEBUG) echo __FUNCTION__ . "\n";
        $this->rect($x, $y, $w, $h);
        $this->stroke();
    }

    public function stroke(bool $close = false)
    {
        if (self::DEBUG) echo __FUNCTION__ . "\n";
        $this->canvas->stroke($close);
    }

    public function endPath()
    {
        if (self::DEBUG) echo __FUNCTION__ . "\n";
        $this->canvas->endPath();
    }

    public function measureText($text)
    {
        if (self::DEBUG) echo __FUNCTION__ . "\n";
        $style = $this->getStyle();
        $this->setFont($style->fontFamily, $style->fontStyle, $style->fontWeight);

        return $this->canvas->getTextWidth($this->getStyle()->fontSize, $text);
    }

    public function getStyle()
    {
        if (self::DEBUG) echo __FUNCTION__ . "\n";
        return $this->style;
    }

    public function setStyle(Style $style)
    {
        if (self::DEBUG) echo __FUNCTION__ . "\n";

        $this->style = $style;
        $canvas = $this->canvas;

        if (is_array($style->stroke) && $stroke = $style->stroke) {
            $canvas->setStrokeColor(array((float)$stroke[0]/255, (float)$stroke[1]/255, (float)$stroke[2]/255), true);
        }

        if (is_array($style->fill) && $fill = $style->fill) {
            $canvas->setColor(array((float)$fill[0]/255, (float)$fill[1]/255, (float)$fill[2]/255), true);
        }

        if ($fillRule = strtolower($style->fillRule)) {
            $canvas->setFillRule($fillRule);
        }

        $opacity = $style->opacity;
        if ($opacity !== null && $opacity < 1.0) {
            $canvas->setLineTransparency("Normal", $opacity);
            $canvas->currentLineTransparency = null;

            $canvas->setFillTransparency("Normal", $opacity);
            $canvas->currentFillTransparency = null;
        }
        else {
            $fillOpacity = $style->fillOpacity;
            if ($fillOpacity !== null && $fillOpacity < 1.0) {
                $canvas->setFillTransparency("Normal", $fillOpacity);
                $canvas->currentFillTransparency = null;
            }

            $strokeOpacity = $style->strokeOpacity;
            if ($strokeOpacity !== null && $strokeOpacity < 1.0) {
                $canvas->setLineTransparency("Normal", $strokeOpacity);
                $canvas->currentLineTransparency = null;
            }
        }

        $dashArray = null;
        if ($style->strokeDasharray) {
            $dashArray = preg_split('/\s*,\s*/', $style->strokeDasharray);
        }


        $phase=0;
        if ($style->strokeDashoffset) {
           $phase = $style->strokeDashoffset;
        }


        $canvas->setLineStyle(
            $style->strokeWidth,
            $style->strokeLinecap,
            $style->strokeLinejoin,
            $dashArray,
            $phase
        );

        $this->setFont($style->fontFamily, $style->fontStyle, $style->fontWeight);
    }

    public function setFont($family, $style, $weight)
    {
        $map = [
            "serif"      => "times",
            "sans-serif" => "helvetica",
            "fantasy"    => "symbol",
            "cursive"    => "times",
            "monospace"  => "courier"
        ];

        $styleMap = [
            "courier" => [
                ""   => "Courier",
                "b"  => "Courier-Bold",
                "i"  => "Courier-Oblique",
                "bi" => "Courier-BoldOblique",
            ],
            "helvetica" => [
                ""   => "Helvetica",
                "b"  => "Helvetica-Bold",
                "i"  => "Helvetica-Oblique",
                "bi" => "Helvetica-BoldOblique",
            ],
            "symbol" => [
                "" => "Symbol"
            ],
            "times" => [
                ""   => "Times-Roman",
                "b"  => "Times-Bold",
                "i"  => "Times-Italic",
                "bi" => "Times-BoldItalic",
            ],
        ];

        $family_lc = strtolower($family);
        if (isset($map[$family_lc])) {
            $family = $map[$family_lc];
        }

        if (isset($styleMap[$family])) {
            $key = "";

            $weight = strtolower($weight);
            if ($weight === "bold" || $weight === "bolder" || (is_numeric($weight) && $weight >= 600)) {
                $key .= "b";
            }

            $style = strtolower($style);
            if ($style === "italic" || $style === "oblique") {
                $key .= "i";
            }

            if (isset($styleMap[$family][$key])) {
                $family = $styleMap[$family][$key];
            }
        }

        $this->canvas->selectFont("$family.afm");
    }
}
<?php
/**
 * @package php-svg-lib
 * @link    http://github.com/PhenX/php-svg-lib
 * @author  Fabien Ménager <fabien.menager@gmail.com>
 * @license GNU LGPLv3+ http://www.gnu.org/copyleft/lesser.html
 */

namespace Svg\Surface;

use Svg\Style;

/**
 * Interface Surface, like CanvasRenderingContext2D
 *
 * @package Svg
 */
interface SurfaceInterface
{
    public function save();

    public function restore();

    // transformations (default transform is the identity matrix)
    public function scale($x, $y);

    public function rotate($angle);

    public function translate($x, $y);

    public function transform($a, $b, $c, $d, $e, $f);

    // path ends
    public function beginPath();

    public function closePath();

    public function fill();

    public function stroke(bool $close = false);

    public function endPath();

    public function fillStroke(bool $close = false);

    public function clip();

    // text (see also the CanvasDrawingStyles interface)
    public function fillText($text, $x, $y, $maxWidth = null);

    public function strokeText($text, $x, $y, $maxWidth = null);

    public function measureText($text);

    // drawing images
    public function drawImage($image, $sx, $sy, $sw = null, $sh = null, $dx = null, $dy = null, $dw = null, $dh = null);

    // paths
    public function lineTo($x, $y);

    public function moveTo($x, $y);

    public function quadraticCurveTo($cpx, $cpy, $x, $y);

    public function bezierCurveTo($cp1x, $cp1y, $cp2x, $cp2y, $x, $y);

    public function arcTo($x1, $y1, $x2, $y2, $radius);

    public function circle($x, $y, $radius);

    public function arc($x, $y, $radius, $startAngle, $endAngle, $anticlockwise = false);

    public function ellipse($x, $y, $radiusX, $radiusY, $rotation, $startAngle, $endAngle, $anticlockwise);

    // Rectangle
    public function rect($x, $y, $w, $h, $rx = 0, $ry = 0);

    public function fillRect($x, $y, $w, $h);

    public function strokeRect($x, $y, $w, $h);

    public function setStyle(Style $style);

    /**
     * @return Style
     */
    public function getStyle();

    public function setFont($family, $style, $weight);
}
<?php
/**
 * @package php-svg-lib
 * @link    http://github.com/PhenX/php-svg-lib
 * @author  Fabien Ménager <fabien.menager@gmail.com>
 * @license GNU LGPLv3+ http://www.gnu.org/copyleft/lesser.html
 */

namespace Svg\Surface;

use Svg\Style;
use Svg\Document;

class SurfacePDFLib implements SurfaceInterface
{
    const DEBUG = false;

    private $canvas;

    private $width;
    private $height;

    /** @var Style */
    private $style;

    public function __construct(Document $doc, $canvas = null)
    {
        if (self::DEBUG) echo __FUNCTION__ . "\n";

        $dimensions = $doc->getDimensions();
        $w = $dimensions["width"];
        $h = $dimensions["height"];

        if (!$canvas) {
            $canvas = new \PDFlib();

            /* all strings are expected as utf8 */
            $canvas->set_option("stringformat=utf8");
            $canvas->set_option("errorpolicy=return");

            /*  open new PDF file; insert a file name to create the PDF on disk */
            if ($canvas->begin_document("", "") == 0) {
                die("Error: " . $canvas->get_errmsg());
            }
            $canvas->set_info("Creator", "PDFlib starter sample");
            $canvas->set_info("Title", "starter_graphics");

            $canvas->begin_page_ext($w, $h, "");
        }

        // Flip PDF coordinate system so that the origin is in
        // the top left rather than the bottom left
        $canvas->setmatrix(
            1, 0,
            0, -1,
            0, $h
        );

        $this->width  = $w;
        $this->height = $h;

        $this->canvas = $canvas;
    }

    function out()
    {
        if (self::DEBUG) echo __FUNCTION__ . "\n";

        $this->canvas->end_page_ext("");
        $this->canvas->end_document("");

        return $this->canvas->get_buffer();
    }

    public function save()
    {
        if (self::DEBUG) echo __FUNCTION__ . "\n";
        $this->canvas->save();
    }

    public function restore()
    {
        if (self::DEBUG) echo __FUNCTION__ . "\n";
        $this->canvas->restore();
    }

    public function scale($x, $y)
    {
        if (self::DEBUG) echo __FUNCTION__ . "\n";
        $this->canvas->scale($x, $y);
    }

    public function rotate($angle)
    {
        if (self::DEBUG) echo __FUNCTION__ . "\n";
        $this->canvas->rotate($angle);
    }

    public function translate($x, $y)
    {
        if (self::DEBUG) echo __FUNCTION__ . "\n";
        $this->canvas->translate($x, $y);
    }

    public function transform($a, $b, $c, $d, $e, $f)
    {
        if (self::DEBUG) echo __FUNCTION__ . "\n";
        $this->canvas->concat($a, $b, $c, $d, $e, $f);
    }

    public function beginPath()
    {
        if (self::DEBUG) echo __FUNCTION__ . "\n";
        // TODO: Implement beginPath() method.
    }

    public function closePath()
    {
        if (self::DEBUG) echo __FUNCTION__ . "\n";
        $this->canvas->closepath();
    }

    public function fillStroke(bool $close = false)
    {
        if (self::DEBUG) echo __FUNCTION__ . "\n";
        if ($close) {
            $this->canvas->closepath_fill_stroke();
        } else {
            $this->canvas->fill_stroke();
        }
    }

    public function clip()
    {
        if (self::DEBUG) echo __FUNCTION__ . "\n";
        $this->canvas->clip();
    }

    public function fillText($text, $x, $y, $maxWidth = null)
    {
        if (self::DEBUG) echo __FUNCTION__ . "\n";
        $this->canvas->set_text_pos($x, $y);
        $this->canvas->show($text);
    }

    public function strokeText($text, $x, $y, $maxWidth = null)
    {
        if (self::DEBUG) echo __FUNCTION__ . "\n";
        // TODO: Implement drawImage() method.
    }

    public function drawImage($image, $sx, $sy, $sw = null, $sh = null, $dx = null, $dy = null, $dw = null, $dh = null)
    {
        if (self::DEBUG) echo __FUNCTION__ . "\n";

        if (strpos($image, "data:") === 0) {
            $data = substr($image, strpos($image, ";") + 1);
            if (strpos($data, "base64") === 0) {
                $data = base64_decode(substr($data, 7));
            }
        }
        else {
            $data = file_get_contents($image);
        }

        $image = tempnam(sys_get_temp_dir(), "svg");
        file_put_contents($image, $data);

        $img = $this->canvas->load_image("auto", $image, "");

        $sy = $sy - $sh;
        $this->canvas->fit_image($img, $sx, $sy, 'boxsize={' . "$sw $sh" . '} fitmethod=entire');

        unlink($image);
    }

    public function lineTo($x, $y)
    {
        if (self::DEBUG) echo __FUNCTION__ . "\n";
        $this->canvas->lineto($x, $y);
    }

    public function moveTo($x, $y)
    {
        if (self::DEBUG) echo __FUNCTION__ . "\n";
        $this->canvas->moveto($x, $y);
    }

    public function quadraticCurveTo($cpx, $cpy, $x, $y)
    {
        if (self::DEBUG) echo __FUNCTION__ . "\n";

        // FIXME not accurate
        $this->canvas->curveTo($cpx, $cpy, $cpx, $cpy, $x, $y);
    }

    public function bezierCurveTo($cp1x, $cp1y, $cp2x, $cp2y, $x, $y)
    {
        if (self::DEBUG) echo __FUNCTION__ . "\n";
        $this->canvas->curveto($cp1x, $cp1y, $cp2x, $cp2y, $x, $y);
    }

    public function arcTo($x1, $y1, $x2, $y2, $radius)
    {
        if (self::DEBUG) echo __FUNCTION__ . "\n";
    }

    public function arc($x, $y, $radius, $startAngle, $endAngle, $anticlockwise = false)
    {
        if (self::DEBUG) echo __FUNCTION__ . "\n";
        $this->canvas->arc($x, $y, $radius, $startAngle, $endAngle);
    }

    public function circle($x, $y, $radius)
    {
        if (self::DEBUG) echo __FUNCTION__ . "\n";
        $this->canvas->circle($x, $y, $radius);
    }

    public function ellipse($x, $y, $radiusX, $radiusY, $rotation, $startAngle, $endAngle, $anticlockwise)
    {
        if (self::DEBUG) echo __FUNCTION__ . "\n";
        $this->canvas->ellipse($x, $y, $radiusX, $radiusY);
    }

    public function fillRect($x, $y, $w, $h)
    {
        if (self::DEBUG) echo __FUNCTION__ . "\n";
        $this->rect($x, $y, $w, $h);
        $this->fill();
    }

    public function rect($x, $y, $w, $h, $rx = 0, $ry = 0)
    {
        if (self::DEBUG) echo __FUNCTION__ . "\n";

        $canvas = $this->canvas;

        if ($rx <= 0.000001/* && $ry <= 0.000001*/) {
            $canvas->rect($x, $y, $w, $h);

            return;
        }

        /* Define a path for a rectangle with corners rounded by a given radius.
         * Start from the lower left corner and proceed counterclockwise.
         */
        $canvas->moveto($x + $rx, $y);

        /* Start of the arc segment in the lower right corner */
        $canvas->lineto($x + $w - $rx, $y);

        /* Arc segment in the lower right corner */
        $canvas->arc($x + $w - $rx, $y + $rx, $rx, 270, 360);

        /* Start of the arc segment in the upper right corner */
        $canvas->lineto($x + $w, $y + $h - $rx );

        /* Arc segment in the upper right corner */
        $canvas->arc($x + $w - $rx, $y + $h - $rx, $rx, 0, 90);

        /* Start of the arc segment in the upper left corner */
        $canvas->lineto($x + $rx, $y + $h);

        /* Arc segment in the upper left corner */
        $canvas->arc($x + $rx, $y + $h - $rx, $rx, 90, 180);

        /* Start of the arc segment in the lower left corner */
        $canvas->lineto($x , $y + $rx);

        /* Arc segment in the lower left corner */
        $canvas->arc($x + $rx, $y + $rx, $rx, 180, 270);
    }

    public function fill()
    {
        if (self::DEBUG) echo __FUNCTION__ . "\n";
        $this->canvas->fill();
    }

    public function strokeRect($x, $y, $w, $h)
    {
        if (self::DEBUG) echo __FUNCTION__ . "\n";
        $this->rect($x, $y, $w, $h);
        $this->stroke();
    }

    public function stroke(bool $close = false)
    {
        if (self::DEBUG) echo __FUNCTION__ . "\n";
        if ($close) {
            $this->canvas->closepath_stroke();
        } else {
            $this->canvas->stroke();
        }
    }

    public function endPath()
    {
        if (self::DEBUG) echo __FUNCTION__ . "\n";
        $this->canvas->endPath();
    }

    public function measureText($text)
    {
        if (self::DEBUG) echo __FUNCTION__ . "\n";
        $style = $this->getStyle();
        $font = $this->getFont($style->fontFamily, $style->fontStyle);

        return $this->canvas->stringwidth($text, $font, $this->getStyle()->fontSize);
    }

    public function getStyle()
    {
        if (self::DEBUG) echo __FUNCTION__ . "\n";
        return $this->style;
    }

    public function setStyle(Style $style)
    {
        if (self::DEBUG) echo __FUNCTION__ . "\n";

        $this->style = $style;
        $canvas = $this->canvas;

        if (is_array($style->stroke) && $stroke = $style->stroke) {
            $canvas->setcolor(
                "stroke",
                "rgb",
                $stroke[0] / 255,
                $stroke[1] / 255,
                $stroke[2] / 255,
                null
            );
        }

        if (is_array($style->fill) && $fill = $style->fill) {
            $canvas->setcolor(
                "fill",
                "rgb",
                $fill[0] / 255,
                $fill[1] / 255,
                $fill[2] / 255,
                null
            );
        }

        if ($fillRule = strtolower($style->fillRule)) {
            $map = array(
                "nonzero" => "winding",
                "evenodd" => "evenodd",
            );

            if (isset($map[$fillRule])) {
                $fillRule = $map[$fillRule];

                $canvas->set_parameter("fillrule", $fillRule);
            }
        }

        $opts = array();
        if ($style->strokeWidth > 0.000001) {
            $opts[] = "linewidth=$style->strokeWidth";
        }

        if (in_array($style->strokeLinecap, array("butt", "round", "projecting"))) {
            $opts[] = "linecap=$style->strokeLinecap";
        }

        if (in_array($style->strokeLinejoin, array("miter", "round", "bevel"))) {
            $opts[] = "linejoin=$style->strokeLinejoin";
        }

        $canvas->set_graphics_option(implode(" ", $opts));

        $opts = array();
        $opacity = $style->opacity;
        if ($opacity !== null && $opacity < 1.0) {
            $opts[] = "opacityfill=$opacity";
            $opts[] = "opacitystroke=$opacity";
        }
        else {
            $fillOpacity = $style->fillOpacity;
            if ($fillOpacity !== null && $fillOpacity < 1.0) {
                $opts[] = "opacityfill=$fillOpacity";
            }

            $strokeOpacity = $style->strokeOpacity;
            if ($strokeOpacity !== null && $strokeOpacity < 1.0) {
                $opts[] = "opacitystroke=$strokeOpacity";
            }
        }

        if (count($opts)) {
            $gs = $canvas->create_gstate(implode(" ", $opts));
            $canvas->set_gstate($gs);
        }

        $font = $this->getFont($style->fontFamily, $style->fontStyle);
        if ($font) {
            $canvas->setfont($font, $style->fontSize);
        }
    }

    private function getFont($family, $style)
    {
        $map = array(
            "serif"      => "Times",
            "sans-serif" => "Helvetica",
            "fantasy"    => "Symbol",
            "cursive"    => "Times",
            "monospace"  => "Courier",

            "arial"      => "Helvetica",
            "verdana"    => "Helvetica",
        );

        $family = strtolower($family);
        if (isset($map[$family])) {
            $family = $map[$family];
        }

        return $this->canvas->load_font($family, "unicode", "fontstyle=$style");
    }

    public function setFont($family, $style, $weight)
    {
        // TODO: Implement setFont() method.
    }
}
<?php
/**
 * @package php-svg-lib
 * @link    http://github.com/PhenX/php-svg-lib
 * @author  Fabien Ménager <fabien.menager@gmail.com>
 * @license GNU LGPLv3+ http://www.gnu.org/copyleft/lesser.html
 */

namespace Svg\Tag;

use Svg\CssLength;
use Svg\Document;
use Svg\Style;

abstract class AbstractTag
{
    /** @var Document */
    protected $document;

    public $tagName;

    /** @var Style */
    protected $style;

    protected $attributes = array();

    protected $hasShape = true;

    /** @var self[] */
    protected $children = array();

    public function __construct(Document $document, $tagName)
    {
        $this->document = $document;
        $this->tagName = $tagName;
    }

    public function getDocument(){
        return $this->document;
    }

    /**
     * @return Group|null
     */
    public function getParentGroup() {
        $stack = $this->getDocument()->getStack();
        for ($i = count($stack)-2; $i >= 0; $i--) {
            $tag = $stack[$i];

            if ($tag instanceof Group || $tag instanceof Document) {
                return $tag;
            }
        }

        return null;
    }

    public function handle($attributes)
    {
        $this->attributes = $attributes;

        if (!$this->getDocument()->inDefs || $this instanceof StyleTag) {
            $this->before($attributes);
            $this->start($attributes);
        }
    }

    public function handleEnd()
    {
        if (!$this->getDocument()->inDefs || $this instanceof StyleTag) {
            $this->end();
            $this->after();
        }
    }

    protected function before($attributes)
    {
    }

    protected function start($attributes)
    {
    }

    protected function end()
    {
    }

    protected function after()
    {
    }

    public function getAttributes()
    {
        return $this->attributes;
    }

    protected function setStyle(Style $style)
    {
        $this->style = $style;

        if ($style->display === "none") {
            $this->hasShape = false;
        }
    }

    /**
     * @return Style
     */
    public function getStyle()
    {
        return $this->style;
    }

    /**
     * Make a style object from the tag and its attributes
     *
     * @param array $attributes
     *
     * @return Style
     */
    protected function makeStyle($attributes) {
        $style = new Style($this->document);
        $style->inherit($this);
        $style->fromStyleSheets($this, $attributes);
        $style->fromAttributes($attributes);

        return $style;
    }

    protected function applyTransform($attributes)
    {

        if (isset($attributes["transform"])) {
            $surface = $this->document->getSurface();

            $transform = $attributes["transform"];

            $matches = array();
            preg_match_all(
                '/(matrix|translate|scale|rotate|skew|skewX|skewY)\((.*?)\)/is',
                $transform,
                $matches,
                PREG_SET_ORDER
            );

            $transformations = array();
            foreach ($matches as $match) {
                $arguments = preg_split('/[ ,]+/', $match[2]);
                array_unshift($arguments, $match[1]);
                $transformations[] = $arguments;
            }

            foreach ($transformations as $t) {
                switch ($t[0]) {
                    case "matrix":
                        $surface->transform($t[1], $t[2], $t[3], $t[4], $t[5], $t[6]);
                        break;

                    case "translate":
                        $surface->translate($t[1], isset($t[2]) ? $t[2] : 0);
                        break;

                    case "scale":
                        $surface->scale($t[1], isset($t[2]) ? $t[2] : $t[1]);
                        break;

                    case "rotate":
                        if (isset($t[2])) {
                            $t[3] = isset($t[3]) ? $t[3] : 0;
                            $surface->translate($t[2], $t[3]);
                            $surface->rotate($t[1]);
                            $surface->translate(-$t[2], -$t[3]);
                        } else {
                            $surface->rotate($t[1]);
                        }
                        break;

                    case "skewX":
                        $tan_x = tan(deg2rad($t[1]));
                        $surface->transform(1, 0, $tan_x, 1, 0, 0);
                        break;

                    case "skewY":
                        $tan_y = tan(deg2rad($t[1]));
                        $surface->transform(1, $tan_y, 0, 1, 0, 0);
                        break;
                }
            }
        }
    }

    /**
     * Apply a viewBox transform to the element
     *
     * @param array $attributes
     */
    protected function applyViewbox($attributes) {
        if (!isset($attributes["viewbox"])) {
            return;
        }

        $surface = $this->document->getSurface();
        $viewBox = preg_split('/[\s,]+/is', trim($attributes['viewbox']));
        if (count($viewBox) != 4) {
            return;
        }

        // Computing the equivalent transform of an SVG viewport
        // https://svgwg.org/svg2-draft/coords.html#ComputingAViewportsTransform

        // 1. Let vb-x, vb-y, vb-width, vb-height be the min-x, min-y, width and height values of the viewBox attribute respectively.
        [$vbX, $vbY, $vbWidth, $vbHeight] = $viewBox;

        if ($vbWidth < 0 || $vbHeight < 0) {
            return;
        }

        // correct solution is to not render, for now scaling to 0 below
        //if ($vbWidth == 0 || $vbHeight == 0) {
        //}

        // 2. Let e-x, e-y, e-width, e-height be the position and size of the element respectively.
        $eX = $attributes["x"] ?? 0;
        $eY = $attributes["y"] ?? 0;
        $eWidth = $attributes["width"] ?? $this->document->getWidth();
        $eHeight = $attributes["height"] ?? $this->document->getHeight();

        // 3. Let align be the align value of preserveAspectRatio, or 'xMidYMid' if preserveAspectRatio is not defined.
        $preserveAspectRatio = explode(" ", $attributes["preserveAspectRatio"] ?? "xMidYMid meet");
        $align = $preserveAspectRatio[0];

        // 4. Let meetOrSlice be the meetOrSlice value of preserveAspectRatio, or 'meet' if preserveAspectRatio is not defined or if meetOrSlice is missing from this value.
        $meetOrSlice = $meetOrSlice ?? "meet";

        // 5. Initialize scale-x to e-width/vb-width.
        $scaleX = $vbWidth == 0 ? 0 : ($eWidth / $vbWidth);

        // 6. Initialize scale-y to e-height/vb-height.
        $scaleY = $vbHeight == 0 ? 0 : ($eHeight / $vbHeight);

        // 7. If align is not 'none' and meetOrSlice is 'meet', set the larger of scale-x and scale-y to the smaller.
        if ($align !== "none" && $meetOrSlice === "meet") {
            $scaleX = min($scaleX, $scaleY);
            $scaleY = min($scaleX, $scaleY);
        }

        // 8. Otherwise, if align is not 'none' and meetOrSlice is 'slice', set the smaller of scale-x and scale-y to the larger.
        elseif ($align !== "none" && $meetOrSlice === "slice") {
            $scaleX = max($scaleX, $scaleY);
            $scaleY = max($scaleX, $scaleY);
        }

        // 9. Initialize translate-x to e-x - (vb-x * scale-x).
        $translateX = $eX - ($vbX * $scaleX);

        // 10. Initialize translate-y to e-y - (vb-y * scale-y)
        $translateY = $eY - ($vbY * $scaleY);

        // 11. If align contains 'xMid', add (e-width - vb-width * scale-x) / 2 to translate-x.
        if (strpos($align, "xMid") !== false) {
            $translateX += ($eWidth - $vbWidth * $scaleX) / 2;
        }

        // 12. If align contains 'xMax', add (e-width - vb-width * scale-x) to translate-x.
        if (strpos($align, "xMax") !== false) {
            $translateX += ($eWidth - $vbWidth * $scaleX);
        }

        // 13. If align contains 'yMid', add (e-height - vb-height * scale-y) / 2 to translate-y.
        if (strpos($align, "yMid") !== false) {
            $translateX += ($eHeight - $vbHeight * $scaleY) / 2;
        }

        // 14. If align contains 'yMax', add (e-height - vb-height * scale-y) to translate-y.
        if (strpos($align, "yMid") !== false) {
            $translateX += ($eHeight - $vbHeight * $scaleY);
        }

        $surface->translate($translateX, $translateY);
        $surface->scale($scaleX, $scaleY);
    }

    /**
     * Convert the given size for the context of this current tag.
     * Takes a pixel-based reference, which is usually specific to the context of the size,
     * but the actual reference size will be decided based upon the unit used.
     *
     * @param string $size
     * @param float $pxReference
     *
     * @return float
     */
    protected function convertSize(string $size, float $pxReference): float
    {
        $length = new CssLength($size);
        $reference = $pxReference;
        $defaultFontSize = 12;

        switch ($length->getUnit()) {
            case "em":
                $reference = $this->style->fontSize ?? $defaultFontSize;
                break;
            case "rem":
                $reference = $this->document->style->fontSize ?? $defaultFontSize;
                break;
            case "ex":
            case "ch":
                $emRef = $this->style->fontSize ?? $defaultFontSize;
                $reference = $emRef * 0.5;
                break;
            case "vw":
                $reference = $this->getDocument()->getWidth();
                break;
            case "vh":
                $reference = $this->getDocument()->getHeight();
                break;
            case "vmin":
                $reference = min($this->getDocument()->getHeight(), $this->getDocument()->getWidth());
                break;
            case "vmax":
                $reference = max($this->getDocument()->getHeight(), $this->getDocument()->getWidth());
                break;
        }

        return (new CssLength($size))->toPixels($reference);
    }
} 
<?php
/**
 * @package php-svg-lib
 * @link    http://github.com/PhenX/php-svg-lib
 * @author  Fabien Ménager <fabien.menager@gmail.com>
 * @license GNU LGPLv3+ http://www.gnu.org/copyleft/lesser.html
 */

namespace Svg\Tag;

class Anchor extends Group
{

} 
<?php
/**
 * @package php-svg-lib
 * @link    http://github.com/PhenX/php-svg-lib
 * @author  Fabien Ménager <fabien.menager@gmail.com>
 * @license GNU LGPLv3+ http://www.gnu.org/copyleft/lesser.html
 */

namespace Svg\Tag;

use Svg\Style;

class Circle extends Shape
{
    protected $cx = 0;
    protected $cy = 0;
    protected $r;

    public function start($attributes)
    {
        if (isset($attributes['cx'])) {
            $width = $this->document->getWidth();
            $this->cx = $this->convertSize($attributes['cx'], $width);
        }
        if (isset($attributes['cy'])) {
            $height = $this->document->getHeight();
            $this->cy = $this->convertSize($attributes['cy'], $height);
        }
        if (isset($attributes['r'])) {
            $diagonal = $this->document->getDiagonal();
            $this->r = $this->convertSize($attributes['r'], $diagonal);
        }

        $this->document->getSurface()->circle($this->cx, $this->cy, $this->r);
    }
} 
<?php
/**
 * @package php-svg-lib
 * @link    http://github.com/PhenX/php-svg-lib
 * @author  Fabien Ménager <fabien.menager@gmail.com>
 * @license GNU LGPLv3+ http://www.gnu.org/copyleft/lesser.html
 */

namespace Svg\Tag;

use Svg\Style;

class ClipPath extends AbstractTag
{
    protected function before($attributes)
    {
        $surface = $this->document->getSurface();

        $surface->save();

        $style = $this->makeStyle($attributes);

        $this->setStyle($style);
        $surface->setStyle($style);

        $this->applyTransform($attributes);
    }

    protected function after()
    {
        $this->document->getSurface()->restore();
    }
} 
<?php
/**
 * @package php-svg-lib
 * @link    http://github.com/PhenX/php-svg-lib
 * @author  Fabien Ménager <fabien.menager@gmail.com>
 * @license GNU LGPLv3+ http://www.gnu.org/copyleft/lesser.html
 */

namespace Svg\Tag;

use Svg\Style;

class Ellipse extends Shape
{
    protected $cx = 0;
    protected $cy = 0;
    protected $rx = 0;
    protected $ry = 0;

    public function start($attributes)
    {
        parent::start($attributes);

        $width = $this->document->getWidth();
        $height = $this->document->getHeight();

        if (isset($attributes['cx'])) {
            $this->cx = $this->convertSize($attributes['cx'], $width);
        }
        if (isset($attributes['cy'])) {
            $this->cy = $this->convertSize($attributes['cy'], $height);
        }
        if (isset($attributes['rx'])) {
            $this->rx = $this->convertSize($attributes['rx'], $width);
        }
        if (isset($attributes['ry'])) {
            $this->ry = $this->convertSize($attributes['ry'], $height);
        }

        $this->document->getSurface()->ellipse($this->cx, $this->cy, $this->rx, $this->ry, 0, 0, 360, false);
    }
} 
<?php
/**
 * @package php-svg-lib
 * @link    http://github.com/PhenX/php-svg-lib
 * @author  Fabien Ménager <fabien.menager@gmail.com>
 * @license GNU LGPLv3+ http://www.gnu.org/copyleft/lesser.html
 */

namespace Svg\Tag;

use Svg\Style;

class Group extends AbstractTag
{
    protected function before($attributes)
    {
        $surface = $this->document->getSurface();

        $surface->save();

        $style = $this->makeStyle($attributes);

        $this->setStyle($style);
        $surface->setStyle($style);

        $this->applyTransform($attributes);
    }

    protected function after()
    {
        $this->document->getSurface()->restore();
    }
} 
<?php
/**
 * @package php-svg-lib
 * @link    http://github.com/PhenX/php-svg-lib
 * @author  Fabien Ménager <fabien.menager@gmail.com>
 * @license GNU LGPLv3+ http://www.gnu.org/copyleft/lesser.html
 */

namespace Svg\Tag;

use Svg\Style;

class Image extends AbstractTag
{
    protected $x = 0;
    protected $y = 0;
    protected $width = 0;
    protected $height = 0;
    protected $href = null;

    protected function before($attributes)
    {
        parent::before($attributes);

        $surface = $this->document->getSurface();
        $surface->save();

        $this->applyTransform($attributes);
    }

    public function start($attributes)
    {
        $height = $this->document->getHeight();
        $width = $this->document->getWidth();
        $this->y = $height;

        if (isset($attributes['x'])) {
            $this->x = $this->convertSize($attributes['x'], $width);
        }
        if (isset($attributes['y'])) {
            $this->y = $height - $this->convertSize($attributes['y'], $height);
        }

        if (isset($attributes['width'])) {
            $this->width = $this->convertSize($attributes['width'], $width);
        }
        if (isset($attributes['height'])) {
            $this->height = $this->convertSize($attributes['height'], $height);
        }

        if (isset($attributes['xlink:href'])) {
            $this->href = $attributes['xlink:href'];
        }

        if (isset($attributes['href'])) {
            $this->href = $attributes['href'];
        }

        $this->document->getSurface()->transform(1, 0, 0, -1, 0, $height);

        $scheme = \strtolower(parse_url($this->href, PHP_URL_SCHEME) ?: "");
        if (
            $scheme === "phar" || \strtolower(\substr($this->href, 0, 7)) === "phar://"
            || ($this->document->allowExternalReferences === false && $scheme !== "data")
        ) {
            return;
        }

        $this->document->getSurface()->drawImage($this->href, $this->x, $this->y, $this->width, $this->height);
    }

    protected function after()
    {
        $this->document->getSurface()->restore();
    }
} 
<?php
/**
 * @package php-svg-lib
 * @link    http://github.com/PhenX/php-svg-lib
 * @author  Fabien Ménager <fabien.menager@gmail.com>
 * @license GNU LGPLv3+ http://www.gnu.org/copyleft/lesser.html
 */

namespace Svg\Tag;

use Svg\Style;

class Line extends Shape
{
    protected $x1 = 0;
    protected $y1 = 0;

    protected $x2 = 0;
    protected $y2 = 0;

    public function start($attributes)
    {
        $height = $this->document->getHeight();
        $width = $this->document->getWidth();

        if (isset($attributes['x1'])) {
            $this->x1 = $this->convertSize($attributes['x1'], $width);
        }
        if (isset($attributes['y1'])) {
            $this->y1 = $this->convertSize($attributes['y1'], $height);
        }
        if (isset($attributes['x2'])) {
            $this->x2 = $this->convertSize($attributes['x2'], $width);
        }
        if (isset($attributes['y2'])) {
            $this->y2 = $this->convertSize($attributes['y2'], $height);
        }

        $surface = $this->document->getSurface();
        $surface->moveTo($this->x1, $this->y1);
        $surface->lineTo($this->x2, $this->y2);
    }
} 
<?php
/**
 * @package php-svg-lib
 * @link    http://github.com/PhenX/php-svg-lib
 * @author  Fabien Ménager <fabien.menager@gmail.com>
 * @license GNU LGPLv3+ http://www.gnu.org/copyleft/lesser.html
 */

namespace Svg\Tag;


use Svg\Gradient;
use Svg\Style;

class LinearGradient extends AbstractTag
{
    protected $x1;
    protected $y1;
    protected $x2;
    protected $y2;

    /** @var Gradient\Stop[] */
    protected $stops = array();

    public function start($attributes)
    {
        parent::start($attributes);

        if (isset($attributes['x1'])) {
            $this->x1 = $attributes['x1'];
        }
        if (isset($attributes['y1'])) {
            $this->y1 = $attributes['y1'];
        }
        if (isset($attributes['x2'])) {
            $this->x2 = $attributes['x2'];
        }
        if (isset($attributes['y2'])) {
            $this->y2 = $attributes['y2'];
        }
    }

    public function getStops() {
        if (empty($this->stops)) {
            foreach ($this->children as $_child) {
                if ($_child->tagName != "stop") {
                    continue;
                }

                $_stop = new Gradient\Stop();
                $_attributes = $_child->attributes;

                // Style
                if (isset($_attributes["style"])) {
                    $_style = Style::parseCssStyle($_attributes["style"]);

                    if (isset($_style["stop-color"])) {
                        $_stop->color = Style::parseColor($_style["stop-color"]);
                    }

                    if (isset($_style["stop-opacity"])) {
                        $_stop->opacity = max(0, min(1.0, $_style["stop-opacity"]));
                    }
                }

                // Attributes
                if (isset($_attributes["offset"])) {
                    $_stop->offset = $_attributes["offset"];
                }
                if (isset($_attributes["stop-color"])) {
                    $_stop->color = Style::parseColor($_attributes["stop-color"]);
                }
                if (isset($_attributes["stop-opacity"])) {
                    $_stop->opacity = max(0, min(1.0, $_attributes["stop-opacity"]));
                }

                $this->stops[] = $_stop;
            }
        }

        return $this->stops;
    }
} 
<?php
/**
 * @package php-svg-lib
 * @link    http://github.com/PhenX/php-svg-lib
 * @author  Fabien Ménager <fabien.menager@gmail.com>
 * @license GNU LGPLv3+ http://www.gnu.org/copyleft/lesser.html
 */

namespace Svg\Tag;

use Svg\Surface\SurfaceInterface;

class Path extends Shape
{
    // kindly borrowed from fabric.util.parsePath.
    /* @see https://github.com/fabricjs/fabric.js/blob/master/src/util/path.js#L664 */
    const NUMBER_PATTERN = '([-+]?(?:\d*\.\d+|\d+\.?)(?:[eE][-+]?\d+)?)\s*';
    const COMMA_PATTERN = '(?:\s+,?\s*|,\s*)?';
    const FLAG_PATTERN = '([01])';
    const ARC_REGEXP = '/'
        . self::NUMBER_PATTERN
        . self::COMMA_PATTERN
        . self::NUMBER_PATTERN
        . self::COMMA_PATTERN
        . self::NUMBER_PATTERN
        . self::COMMA_PATTERN
        . self::FLAG_PATTERN
        . self::COMMA_PATTERN
        . self::FLAG_PATTERN
        . self::COMMA_PATTERN
        . self::NUMBER_PATTERN
        . self::COMMA_PATTERN
        . self::NUMBER_PATTERN
        . '/';

    static $commandLengths = array(
        'm' => 2,
        'l' => 2,
        'h' => 1,
        'v' => 1,
        'c' => 6,
        's' => 4,
        'q' => 4,
        't' => 2,
        'a' => 7,
    );

    static $repeatedCommands = array(
        'm' => 'l',
        'M' => 'L',
    );

    public static function parse(string $commandSequence): array
    {
        $commands = array();
        preg_match_all('/([MZLHVCSQTAmzlhvcsqta])([eE ,\-.\d]+)*/', $commandSequence, $commands, PREG_SET_ORDER);
        
        $path = array();
        foreach ($commands as $c) {
            if (count($c) == 3) {
                $commandLower = strtolower($c[1]);

                // arcs have special flags that apparently don't require spaces.
                if ($commandLower === 'a' && preg_match_all(static::ARC_REGEXP, $c[2], $matches, PREG_PATTERN_ORDER)) {
                    $numberOfMatches = count($matches[0]);
                    for ($k = 0; $k < $numberOfMatches; ++$k) {
                        $path[] = [
                            $c[1],
                            $matches[1][$k],
                            $matches[2][$k],
                            $matches[3][$k],
                            $matches[4][$k],
                            $matches[5][$k],
                            $matches[6][$k],
                            $matches[7][$k],
                        ];
                    }
                    continue;
                }

                $arguments = array();
                preg_match_all('/([-+]?((\d+\.\d+)|((\d+)|(\.\d+)))(?:e[-+]?\d+)?)/i', $c[2], $arguments, PREG_PATTERN_ORDER);
                $item = $arguments[0];

                if (
                    isset(self::$commandLengths[$commandLower]) &&
                    ($commandLength = self::$commandLengths[$commandLower]) &&
                    count($item) > $commandLength
                ) {
                    $repeatedCommand = isset(self::$repeatedCommands[$c[1]]) ? self::$repeatedCommands[$c[1]] : $c[1];
                    $command = $c[1];

                    for ($k = 0, $klen = count($item); $k < $klen; $k += $commandLength) {
                        $_item = array_slice($item, $k, $k + $commandLength);
                        array_unshift($_item, $command);
                        $path[] = $_item;

                        $command = $repeatedCommand;
                    }
                } else {
                    array_unshift($item, $c[1]);
                    $path[] = $item;
                }

            } else {
                $item = array($c[1]);

                $path[] = $item;
            }
        }

        return $path;
    }

    public function start($attributes)
    {
        if (!isset($attributes['d'])) {
            $this->hasShape = false;

            return;
        }

        $path = static::parse($attributes['d']);
        $surface = $this->document->getSurface();

        // From https://github.com/kangax/fabric.js/blob/master/src/shapes/path.class.js
        $current = null; // current instruction
        $previous = null;
        $subpathStartX = 0;
        $subpathStartY = 0;
        $x = 0; // current x
        $y = 0; // current y
        $controlX = 0; // current control point x
        $controlY = 0; // current control point y
        $tempX = null;
        $tempY = null;
        $tempControlX = null;
        $tempControlY = null;
        $l = 0; //-((this.width / 2) + $this.pathOffset.x),
        $t = 0; //-((this.height / 2) + $this.pathOffset.y),

        foreach ($path as $current) {
            switch ($current[0]) { // first letter
                case 'l': // lineto, relative
                    $x += $current[1];
                    $y += $current[2];
                    $surface->lineTo($x + $l, $y + $t);
                    break;

                case 'L': // lineto, absolute
                    $x = $current[1];
                    $y = $current[2];
                    $surface->lineTo($x + $l, $y + $t);
                    break;

                case 'h': // horizontal lineto, relative
                    $x += $current[1];
                    $surface->lineTo($x + $l, $y + $t);
                    break;

                case 'H': // horizontal lineto, absolute
                    $x = $current[1];
                    $surface->lineTo($x + $l, $y + $t);
                    break;

                case 'v': // vertical lineto, relative
                    $y += $current[1];
                    $surface->lineTo($x + $l, $y + $t);
                    break;

                case 'V': // verical lineto, absolute
                    $y = $current[1];
                    $surface->lineTo($x + $l, $y + $t);
                    break;

                case 'm': // moveTo, relative
                    $x += $current[1];
                    $y += $current[2];
                    $subpathStartX = $x;
                    $subpathStartY = $y;
                    $surface->moveTo($x + $l, $y + $t);
                    break;

                case 'M': // moveTo, absolute
                    $x = $current[1];
                    $y = $current[2];
                    $subpathStartX = $x;
                    $subpathStartY = $y;
                    $surface->moveTo($x + $l, $y + $t);
                    break;

                case 'c': // bezierCurveTo, relative
                    $tempX = $x + $current[5];
                    $tempY = $y + $current[6];
                    $controlX = $x + $current[3];
                    $controlY = $y + $current[4];
                    $surface->bezierCurveTo(
                        $x + $current[1] + $l, // x1
                        $y + $current[2] + $t, // y1
                        $controlX + $l, // x2
                        $controlY + $t, // y2
                        $tempX + $l,
                        $tempY + $t
                    );
                    $x = $tempX;
                    $y = $tempY;
                    break;

                case 'C': // bezierCurveTo, absolute
                    $x = $current[5];
                    $y = $current[6];
                    $controlX = $current[3];
                    $controlY = $current[4];
                    $surface->bezierCurveTo(
                        $current[1] + $l,
                        $current[2] + $t,
                        $controlX + $l,
                        $controlY + $t,
                        $x + $l,
                        $y + $t
                    );
                    break;

                case 's': // shorthand cubic bezierCurveTo, relative

                    // transform to absolute x,y
                    $tempX = $x + $current[3];
                    $tempY = $y + $current[4];

                    if (!preg_match('/[CcSs]/', $previous[0])) {
                        // If there is no previous command or if the previous command was not a C, c, S, or s,
                        // the control point is coincident with the current point
                        $controlX = $x;
                        $controlY = $y;
                    } else {
                        // calculate reflection of previous control points
                        $controlX = 2 * $x - $controlX;
                        $controlY = 2 * $y - $controlY;
                    }

                    $surface->bezierCurveTo(
                        $controlX + $l,
                        $controlY + $t,
                        $x + $current[1] + $l,
                        $y + $current[2] + $t,
                        $tempX + $l,
                        $tempY + $t
                    );
                    // set control point to 2nd one of this command
                    // "... the first control point is assumed to be
                    // the reflection of the second control point on
                    // the previous command relative to the current point."
                    $controlX = $x + $current[1];
                    $controlY = $y + $current[2];

                    $x = $tempX;
                    $y = $tempY;
                    break;

                case 'S': // shorthand cubic bezierCurveTo, absolute
                    $tempX = $current[3];
                    $tempY = $current[4];

                    if (!preg_match('/[CcSs]/', $previous[0])) {
                        // If there is no previous command or if the previous command was not a C, c, S, or s,
                        // the control point is coincident with the current point
                        $controlX = $x;
                        $controlY = $y;
                    } else {
                        // calculate reflection of previous control points
                        $controlX = 2 * $x - $controlX;
                        $controlY = 2 * $y - $controlY;
                    }

                    $surface->bezierCurveTo(
                        $controlX + $l,
                        $controlY + $t,
                        $current[1] + $l,
                        $current[2] + $t,
                        $tempX + $l,
                        $tempY + $t
                    );
                    $x = $tempX;
                    $y = $tempY;

                    // set control point to 2nd one of this command
                    // "... the first control point is assumed to be
                    // the reflection of the second control point on
                    // the previous command relative to the current point."
                    $controlX = $current[1];
                    $controlY = $current[2];

                    break;

                case 'q': // quadraticCurveTo, relative
                    // transform to absolute x,y
                    $tempX = $x + $current[3];
                    $tempY = $y + $current[4];

                    $controlX = $x + $current[1];
                    $controlY = $y + $current[2];

                    $surface->quadraticCurveTo(
                        $controlX + $l,
                        $controlY + $t,
                        $tempX + $l,
                        $tempY + $t
                    );
                    $x = $tempX;
                    $y = $tempY;
                    break;

                case 'Q': // quadraticCurveTo, absolute
                    $tempX = $current[3];
                    $tempY = $current[4];

                    $surface->quadraticCurveTo(
                        $current[1] + $l,
                        $current[2] + $t,
                        $tempX + $l,
                        $tempY + $t
                    );
                    $x = $tempX;
                    $y = $tempY;
                    $controlX = $current[1];
                    $controlY = $current[2];
                    break;

                case 't': // shorthand quadraticCurveTo, relative

                    // transform to absolute x,y
                    $tempX = $x + $current[1];
                    $tempY = $y + $current[2];

                    // calculate reflection of previous control points
                    if (preg_match('/[QqT]/', $previous[0])) {
                        $controlX = 2 * $x - $controlX;
                        $controlY = 2 * $y - $controlY;
                    } elseif ($previous[0] === 't') {
                        $controlX = 2 * $x - $tempControlX;
                        $controlY = 2 * $y - $tempControlY;
                    } else {
                        $controlX = $x;
                        $controlY = $y;
                    }

                    $tempControlX = $controlX;
                    $tempControlY = $controlY;

                    $surface->quadraticCurveTo(
                        $controlX + $l,
                        $controlY + $t,
                        $tempX + $l,
                        $tempY + $t
                    );
                    $x = $tempX;
                    $y = $tempY;
                    break;

                case 'T':
                    $tempX = $current[1];
                    $tempY = $current[2];

                    // calculate reflection of previous control points
                    if (preg_match('/[QqTt]/', $previous[0])) {
                        $controlX = 2 * $x - $controlX;
                        $controlY = 2 * $y - $controlY;
                    } else {
                        $controlX = $x;
                        $controlY = $y;
                    }

                    $surface->quadraticCurveTo(
                        $controlX + $l,
                        $controlY + $t,
                        $tempX + $l,
                        $tempY + $t
                    );
                    $x = $tempX;
                    $y = $tempY;
                    break;

                case 'a':
                    $this->drawArc(
                        $surface,
                        $x + $l,
                        $y + $t,
                        array(
                            $current[1],
                            $current[2],
                            $current[3],
                            $current[4],
                            $current[5],
                            $current[6] + $x + $l,
                            $current[7] + $y + $t
                        )
                    );
                    $x += $current[6];
                    $y += $current[7];
                    break;

                case 'A':
                    // TODO: optimize this
                    $this->drawArc(
                        $surface,
                        $x + $l,
                        $y + $t,
                        array(
                            $current[1],
                            $current[2],
                            $current[3],
                            $current[4],
                            $current[5],
                            $current[6] + $l,
                            $current[7] + $t
                        )
                    );
                    $x = $current[6];
                    $y = $current[7];
                    break;

                case 'z':
                case 'Z':
                    $x = $subpathStartX;
                    $y = $subpathStartY;
                    $surface->closePath();
                    break;
            }
            $previous = $current;
        }
    }

    function drawArc(SurfaceInterface $surface, $fx, $fy, $coords)
    {
        $rx = $coords[0];
        $ry = $coords[1];
        $rot = $coords[2];
        $large = $coords[3];
        $sweep = $coords[4];
        $tx = $coords[5];
        $ty = $coords[6];
        $segs = array(
            array(),
            array(),
            array(),
            array(),
        );

        $toX = $tx - $fx;
        $toY = $ty - $fy;

        if ((float)($toX + $toY) === 0.0) {
            return;
        }

        if ((float)abs($rx) == 0.0 || (float)abs($ry) === 0.0) {
            $surface->lineTo($tx, $ty);
            return;
        }

        $segsNorm = $this->arcToSegments($toX, $toY, $rx, $ry, $large, $sweep, $rot);

        for ($i = 0, $len = count($segsNorm); $i < $len; $i++) {
            $segs[$i][0] = $segsNorm[$i][0] + $fx;
            $segs[$i][1] = $segsNorm[$i][1] + $fy;
            $segs[$i][2] = $segsNorm[$i][2] + $fx;
            $segs[$i][3] = $segsNorm[$i][3] + $fy;
            $segs[$i][4] = $segsNorm[$i][4] + $fx;
            $segs[$i][5] = $segsNorm[$i][5] + $fy;

            call_user_func_array(array($surface, "bezierCurveTo"), $segs[$i]);
        }
    }

    function arcToSegments($toX, $toY, $rx, $ry, $large, $sweep, $rotateX)
    {
        $th = $rotateX * M_PI / 180;
        $sinTh = sin($th);
        $cosTh = cos($th);
        $fromX = 0;
        $fromY = 0;

        $rx = abs($rx);
        $ry = abs($ry);

        $px = -$cosTh * $toX * 0.5 - $sinTh * $toY * 0.5;
        $py = -$cosTh * $toY * 0.5 + $sinTh * $toX * 0.5;
        $rx2 = $rx * $rx;
        $ry2 = $ry * $ry;
        $py2 = $py * $py;
        $px2 = $px * $px;
        $pl = $rx2 * $ry2 - $rx2 * $py2 - $ry2 * $px2;
        $root = 0;

        if ($pl < 0) {
            $s = sqrt(1 - $pl / ($rx2 * $ry2));
            $rx *= $s;
            $ry *= $s;
        } else {
            $root = ($large == $sweep ? -1.0 : 1.0) * sqrt($pl / ($rx2 * $py2 + $ry2 * $px2));
        }

        $cx = $root * $rx * $py / $ry;
        $cy = -$root * $ry * $px / $rx;
        $cx1 = $cosTh * $cx - $sinTh * $cy + $toX * 0.5;
        $cy1 = $sinTh * $cx + $cosTh * $cy + $toY * 0.5;
        $mTheta = $this->calcVectorAngle(1, 0, ($px - $cx) / $rx, ($py - $cy) / $ry);
        $dtheta = $this->calcVectorAngle(($px - $cx) / $rx, ($py - $cy) / $ry, (-$px - $cx) / $rx, (-$py - $cy) / $ry);

        if ($sweep == 0 && $dtheta > 0) {
            $dtheta -= 2 * M_PI;
        } else {
            if ($sweep == 1 && $dtheta < 0) {
                $dtheta += 2 * M_PI;
            }
        }

        // $Convert $into $cubic $bezier $segments <= 90deg
        $segments = ceil(abs($dtheta / M_PI * 2));
        $result = array();
        $mDelta = $dtheta / $segments;
        $mT = 8 / 3 * sin($mDelta / 4) * sin($mDelta / 4) / sin($mDelta / 2);
        $th3 = $mTheta + $mDelta;

        for ($i = 0; $i < $segments; $i++) {
            $result[$i] = $this->segmentToBezier(
                $mTheta,
                $th3,
                $cosTh,
                $sinTh,
                $rx,
                $ry,
                $cx1,
                $cy1,
                $mT,
                $fromX,
                $fromY
            );
            $fromX = $result[$i][4];
            $fromY = $result[$i][5];
            $mTheta = $th3;
            $th3 += $mDelta;
        }

        return $result;
    }

    function segmentToBezier($th2, $th3, $cosTh, $sinTh, $rx, $ry, $cx1, $cy1, $mT, $fromX, $fromY)
    {
        $costh2 = cos($th2);
        $sinth2 = sin($th2);
        $costh3 = cos($th3);
        $sinth3 = sin($th3);
        $toX = $cosTh * $rx * $costh3 - $sinTh * $ry * $sinth3 + $cx1;
        $toY = $sinTh * $rx * $costh3 + $cosTh * $ry * $sinth3 + $cy1;
        $cp1X = $fromX + $mT * (-$cosTh * $rx * $sinth2 - $sinTh * $ry * $costh2);
        $cp1Y = $fromY + $mT * (-$sinTh * $rx * $sinth2 + $cosTh * $ry * $costh2);
        $cp2X = $toX + $mT * ($cosTh * $rx * $sinth3 + $sinTh * $ry * $costh3);
        $cp2Y = $toY + $mT * ($sinTh * $rx * $sinth3 - $cosTh * $ry * $costh3);

        return array(
            $cp1X,
            $cp1Y,
            $cp2X,
            $cp2Y,
            $toX,
            $toY
        );
    }

    function calcVectorAngle($ux, $uy, $vx, $vy)
    {
        $ta = atan2($uy, $ux);
        $tb = atan2($vy, $vx);
        if ($tb >= $ta) {
            return $tb - $ta;
        } else {
            return 2 * M_PI - ($ta - $tb);
        }
    }
}
<?php
/**
 * @package php-svg-lib
 * @link    http://github.com/PhenX/php-svg-lib
 * @author  Fabien Ménager <fabien.menager@gmail.com>
 * @license GNU LGPLv3+ http://www.gnu.org/copyleft/lesser.html
 */

namespace Svg\Tag;

class Polygon extends Shape
{
    public function start($attributes)
    {
        $tmp = array();
        preg_match_all('/([\-]*[0-9\.]+)/', $attributes['points'], $tmp, PREG_PATTERN_ORDER);

        $points = $tmp[0];
        $count = count($points);

        if ($count < 4) {
            // nothing to draw
            return;
        }

        $surface = $this->document->getSurface();
        list($x, $y) = $points;
        $surface->moveTo($x, $y);

        for ($i = 2; $i < $count; $i += 2) {
            if ($i + 1 === $count) {
                // invalid trailing point
                continue;
            }
            $x = $points[$i];
            $y = $points[$i + 1];
            $surface->lineTo($x, $y);
        }

        $surface->closePath();
    }
} 
<?php
/**
 * @package php-svg-lib
 * @link    http://github.com/PhenX/php-svg-lib
 * @author  Fabien Ménager <fabien.menager@gmail.com>
 * @license GNU LGPLv3+ http://www.gnu.org/copyleft/lesser.html
 */

namespace Svg\Tag;

class Polyline extends Shape
{
    public function start($attributes)
    {
        $tmp = array();
        preg_match_all('/([\-]*[0-9\.]+)/', $attributes['points'], $tmp, PREG_PATTERN_ORDER);

        $points = $tmp[0];
        $count = count($points);

        if ($count < 4) {
            // nothing to draw
            return;
        }

        $surface = $this->document->getSurface();
        list($x, $y) = $points;
        $surface->moveTo($x, $y);

        for ($i = 2; $i < $count; $i += 2) {
            if ($i + 1 === $count) {
                // invalid trailing point
                continue;
            }
            $x = $points[$i];
            $y = $points[$i + 1];
            $surface->lineTo($x, $y);
        }
    }
} 
<?php
/**
 * @package php-svg-lib
 * @link    http://github.com/PhenX/php-svg-lib
 * @author  Fabien Ménager <fabien.menager@gmail.com>
 * @license GNU LGPLv3+ http://www.gnu.org/copyleft/lesser.html
 */

namespace Svg\Tag;

class RadialGradient extends AbstractTag
{
    public function start($attributes)
    {

    }
} 
<?php
/**
 * @package php-svg-lib
 * @link    http://github.com/PhenX/php-svg-lib
 * @author  Fabien Ménager <fabien.menager@gmail.com>
 * @license GNU LGPLv3+ http://www.gnu.org/copyleft/lesser.html
 */

namespace Svg\Tag;

use Svg\Style;

class Rect extends Shape
{
    protected $x = 0;
    protected $y = 0;
    protected $width = 0;
    protected $height = 0;
    protected $rx = 0;
    protected $ry = 0;

    public function start($attributes)
    {
        $width = $this->document->getWidth();
        $height = $this->document->getHeight();

        if (isset($attributes['x'])) {
            $this->x = $this->convertSize($attributes['x'], $width);
        }
        if (isset($attributes['y'])) {
            $this->y = $this->convertSize($attributes['y'], $height);
        }

        if (isset($attributes['width'])) {
            $this->width = $this->convertSize($attributes['width'], $width);
        }
        if (isset($attributes['height'])) {
            $this->height = $this->convertSize($attributes['height'], $height);
        }

        if (isset($attributes['rx'])) {
            $this->rx = $attributes['rx'];
        }
        if (isset($attributes['ry'])) {
            $this->ry = $attributes['ry'];
        }

        $this->document->getSurface()->rect($this->x, $this->y, $this->width, $this->height, $this->rx, $this->ry);
    }
} 
<?php
/**
 * @package php-svg-lib
 * @link    http://github.com/PhenX/php-svg-lib
 * @author  Fabien Ménager <fabien.menager@gmail.com>
 * @license GNU LGPLv3+ http://www.gnu.org/copyleft/lesser.html
 */

namespace Svg\Tag;

use Svg\Style;

class Shape extends AbstractTag
{
    protected function before($attributes)
    {
        $surface = $this->document->getSurface();

        $surface->save();

        $style = $this->makeStyle($attributes);

        $this->setStyle($style);
        $surface->setStyle($style);

        $this->applyTransform($attributes);
    }

    protected function after()
    {
        $surface = $this->document->getSurface();

        if ($this->hasShape) {
            $style = $surface->getStyle();

            $fill   = $style->fill   && is_array($style->fill);
            $stroke = $style->stroke && is_array($style->stroke);

            if ($fill) {
                if ($stroke) {
                    $surface->fillStroke(false);
                } else {
//                    if (is_string($style->fill)) {
//                        /** @var LinearGradient|RadialGradient $gradient */
//                        $gradient = $this->getDocument()->getDef($style->fill);
//
//                        var_dump($gradient->getStops());
//                    }

                    $surface->fill();
                }
            }
            elseif ($stroke) {
                $surface->stroke(false);
            }
            else {
                $surface->endPath();
            }
        }

        $surface->restore();
    }
} <?php
/**
 * @package php-svg-lib
 * @link    http://github.com/PhenX/php-svg-lib
 * @author  Fabien Ménager <fabien.menager@gmail.com>
 * @license GNU LGPLv3+ http://www.gnu.org/copyleft/lesser.html
 */

namespace Svg\Tag;

class Stop extends AbstractTag
{
    public function start($attributes)
    {

    }
} 
<?php
/**
 * @package php-svg-lib
 * @link    http://github.com/PhenX/php-svg-lib
 * @author  Fabien Ménager <fabien.menager@gmail.com>
 * @license GNU LGPLv3+ http://www.gnu.org/copyleft/lesser.html
 */

namespace Svg\Tag;

use Sabberworm\CSS;

class StyleTag extends AbstractTag
{
    protected $text = "";

    public function end()
    {
        $parser = new CSS\Parser($this->text);
        $this->document->appendStyleSheet($parser->parse());
    }

    public function appendText($text)
    {
        $this->text .= $text;
    }
} 
<?php
/**
 * @package php-svg-lib
 * @link    http://github.com/PhenX/php-svg-lib
 * @author  Fabien Ménager <fabien.menager@gmail.com>
 * @license GNU LGPLv3+ http://www.gnu.org/copyleft/lesser.html
 */

namespace Svg\Tag;

use Svg\Style;

class Symbol extends AbstractTag
{
    protected function before($attributes)
    {
        $surface = $this->document->getSurface();

        $surface->save();

        $style = $this->makeStyle($attributes);

        $this->setStyle($style);
        $surface->setStyle($style);

        $this->applyViewbox($attributes);
        $this->applyTransform($attributes);
    }

    protected function after()
    {
        $this->document->getSurface()->restore();
    }
}<?php
/**
 * @package php-svg-lib
 * @link    http://github.com/PhenX/php-svg-lib
 * @author  Fabien Ménager <fabien.menager@gmail.com>
 * @license GNU LGPLv3+ http://www.gnu.org/copyleft/lesser.html
 */

namespace Svg\Tag;

use Svg\Style;

class Text extends Shape
{
    protected $x = 0;
    protected $y = 0;
    protected $text = "";

    public function start($attributes)
    {
        $height = $this->document->getHeight();
        $this->y = $height;

        if (isset($attributes['x'])) {
            $width = $this->document->getWidth();
            $this->x = $this->convertSize($attributes['x'], $width);
        }
        if (isset($attributes['y'])) {
            $this->y = $height - $this->convertSize($attributes['y'], $height);
        }

        $this->document->getSurface()->transform(1, 0, 0, -1, 0, $height);
    }

    public function end()
    {
        $surface = $this->document->getSurface();
        $x = $this->x;
        $y = $this->y;
        $style = $surface->getStyle();
        $surface->setFont($style->fontFamily, $style->fontStyle, $style->fontWeight);

        switch ($style->textAnchor) {
            case "middle":
                $width = $surface->measureText($this->text);
                $x -= $width / 2;
                break;

            case "end":
                $width = $surface->measureText($this->text);
                $x -= $width;
                break;
        }

        $surface->fillText($this->getText(), $x, $y);
    }

    protected function after()
    {
        $this->document->getSurface()->restore();
    }

    public function appendText($text)
    {
        $this->text .= $text;
    }

    public function getText()
    {
        return trim($this->text);
    }
} 
<?php
/**
 * @package php-svg-lib
 * @link    http://github.com/PhenX/php-svg-lib
 * @author  Fabien Ménager <fabien.menager@gmail.com>
 * @license GNU LGPLv3+ http://www.gnu.org/copyleft/lesser.html
 */

namespace Svg\Tag;

class UseTag extends AbstractTag
{
    protected $x = 0;
    protected $y = 0;
    protected $width;
    protected $height;
    protected $instances = 0;

    /** @var AbstractTag */
    protected $reference;

    protected function before($attributes)
    {
        $this->instances++;
        if ($this->instances > 1) {
            //TODO: log circular reference error state
            return;
        }

        if (isset($attributes['x'])) {
            $this->x = $attributes['x'];
        }
        if (isset($attributes['y'])) {
            $this->y = $attributes['y'];
        }

        if (isset($attributes['width'])) {
            $this->width = $attributes['width'];
        }
        if (isset($attributes['height'])) {
            $this->height = $attributes['height'];
        }

        parent::before($attributes);

        $document = $this->getDocument();

        $link = $attributes["href"] ?? $attributes["xlink:href"];
        $this->reference = $document->getDef($link);

        $surface = $document->getSurface();
        $surface->save();

        $surface->translate($this->x, $this->y);
    }

    protected function after() {
        if ($this->instances > 0) {
            return;
        }
        parent::after();
        $this->getDocument()->getSurface()->restore();
    }

    public function handle($attributes)
    {
        if ($this->instances > 1) {
            //TODO: log circular reference error state
            return;
        }

        parent::handle($attributes);

        if (!$this->reference) {
            return;
        }

        $originalAttributes = array_merge($this->reference->attributes);
        $originalStyle = $this->reference->getStyle();
        $mergedAttributes = $this->reference->attributes;
        $attributesToNotMerge = ['x', 'y', 'width', 'height', 'href', 'xlink:href', 'id', 'style'];
        foreach ($attributes as $attrKey => $attrVal) {
            if (!in_array($attrKey, $attributesToNotMerge) && !isset($mergedAttributes[$attrKey])) {
                $mergedAttributes[$attrKey] = $attrVal;
            }
        }
        $mergedAttributes['style'] = ($attributes['style'] ?? '') . ';' . ($mergedAttributes['style'] ?? '');

        $this->_handle($this->reference, $mergedAttributes);

        $this->reference->attributes = $originalAttributes;
        if ($originalStyle !== null) {
            $this->reference->setStyle($originalStyle);
        }
    }

    public function handleEnd()
    {
        $this->instances--;
        if ($this->instances > 0) {
            return;
        }

        if ($this->reference) {
            $this->_handleEnd($this->reference);
        }

        parent::handleEnd();
    }

    private function _handle($tag, $attributes) {
        $tag->handle($attributes);
        foreach ($tag->children as $child) {
            $originalAttributes = array_merge($child->attributes);
            $originalStyle = $child->getStyle();
            $mergedAttributes = $child->attributes;
            $mergedAttributes['style'] = ($attributes['style'] ?? '') . ';' . ($mergedAttributes['style'] ?? '');
            $this->_handle($child, $mergedAttributes);
            $child->attributes = $originalAttributes;
            if ($originalStyle !== null) {
                $child->setStyle($originalStyle);
            }
        }
    }

    private function _handleEnd($tag) {
        foreach ($tag->children as $child) {
            $this->_handleEnd($child);
        }
        $tag->handleEnd();
    }
} 
      GNU LESSER GENERAL PUBLIC LICENSE
           Version 2.1, February 1999

 Copyright (C) 1991, 1999 Free Software Foundation, Inc.
     59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 Everyone is permitted to copy and distribute verbatim copies
 of this license document, but changing it is not allowed.

[This is the first released version of the Lesser GPL.  It also counts
 as the successor of the GNU Library Public License, version 2, hence
 the version number 2.1.]

          Preamble

  The licenses for most software are designed to take away your
freedom to share and change it.  By contrast, the GNU General Public
Licenses are intended to guarantee your freedom to share and change
free software--to make sure the software is free for all its users.

  This license, the Lesser General Public License, applies to some
specially designated software packages--typically libraries--of the
Free Software Foundation and other authors who decide to use it.  You
can use it too, but we suggest you first think carefully about whether
this license or the ordinary General Public License is the better
strategy to use in any particular case, based on the explanations below.

  When we speak of free software, we are referring to freedom of use,
not price.  Our General Public Licenses are designed to make sure that
you have the freedom to distribute copies of free software (and charge
for this service if you wish); that you receive source code or can get
it if you want it; that you can change the software and use pieces of
it in new free programs; and that you are informed that you can do
these things.

  To protect your rights, we need to make restrictions that forbid
distributors to deny you these rights or to ask you to surrender these
rights.  These restrictions translate to certain responsibilities for
you if you distribute copies of the library or if you modify it.

  For example, if you distribute copies of the library, whether gratis
or for a fee, you must give the recipients all the rights that we gave
you.  You must make sure that they, too, receive or can get the source
code.  If you link other code with the library, you must provide
complete object files to the recipients, so that they can relink them
with the library after making changes to the library and recompiling
it.  And you must show them these terms so they know their rights.

  We protect your rights with a two-step method: (1) we copyright the
library, and (2) we offer you this license, which gives you legal
permission to copy, distribute and/or modify the library.

  To protect each distributor, we want to make it very clear that
there is no warranty for the free library.  Also, if the library is
modified by someone else and passed on, the recipients should know
that what they have is not the original version, so that the original
author's reputation will not be affected by problems that might be
introduced by others.

  Finally, software patents pose a constant threat to the existence of
any free program.  We wish to make sure that a company cannot
effectively restrict the users of a free program by obtaining a
restrictive license from a patent holder.  Therefore, we insist that
any patent license obtained for a version of the library must be
consistent with the full freedom of use specified in this license.

  Most GNU software, including some libraries, is covered by the
ordinary GNU General Public License.  This license, the GNU Lesser
General Public License, applies to certain designated libraries, and
is quite different from the ordinary General Public License.  We use
this license for certain libraries in order to permit linking those
libraries into non-free programs.

  When a program is linked with a library, whether statically or using
a shared library, the combination of the two is legally speaking a
combined work, a derivative of the original library.  The ordinary
General Public License therefore permits such linking only if the
entire combination fits its criteria of freedom.  The Lesser General
Public License permits more lax criteria for linking other code with
the library.

  We call this license the "Lesser" General Public License because it
does Less to protect the user's freedom than the ordinary General
Public License.  It also provides other free software developers Less
of an advantage over competing non-free programs.  These disadvantages
are the reason we use the ordinary General Public License for many
libraries.  However, the Lesser license provides advantages in certain
special circumstances.

  For example, on rare occasions, there may be a special need to
encourage the widest possible use of a certain library, so that it becomes
a de-facto standard.  To achieve this, non-free programs must be
allowed to use the library.  A more frequent case is that a free
library does the same job as widely used non-free libraries.  In this
case, there is little to gain by limiting the free library to free
software only, so we use the Lesser General Public License.

  In other cases, permission to use a particular library in non-free
programs enables a greater number of people to use a large body of
free software.  For example, permission to use the GNU C Library in
non-free programs enables many more people to use the whole GNU
operating system, as well as its variant, the GNU/Linux operating
system.

  Although the Lesser General Public License is Less protective of the
users' freedom, it does ensure that the user of a program that is
linked with the Library has the freedom and the wherewithal to run
that program using a modified version of the Library.

  The precise terms and conditions for copying, distribution and
modification follow.  Pay close attention to the difference between a
"work based on the library" and a "work that uses the library".  The
former contains code derived from the library, whereas the latter must
be combined with the library in order to run.

      GNU LESSER GENERAL PUBLIC LICENSE
   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION

  0. This License Agreement applies to any software library or other
program which contains a notice placed by the copyright holder or
other authorized party saying it may be distributed under the terms of
this Lesser General Public License (also called "this License").
Each licensee is addressed as "you".

  A "library" means a collection of software functions and/or data
prepared so as to be conveniently linked with application programs
(which use some of those functions and data) to form executables.

  The "Library", below, refers to any such software library or work
which has been distributed under these terms.  A "work based on the
Library" means either the Library or any derivative work under
copyright law: that is to say, a work containing the Library or a
portion of it, either verbatim or with modifications and/or translated
straightforwardly into another language.  (Hereinafter, translation is
included without limitation in the term "modification".)

  "Source code" for a work means the preferred form of the work for
making modifications to it.  For a library, complete source code means
all the source code for all modules it contains, plus any associated
interface definition files, plus the scripts used to control compilation
and installation of the library.

  Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope.  The act of
running a program using the Library is not restricted, and output from
such a program is covered only if its contents constitute a work based
on the Library (independent of the use of the Library in a tool for
writing it).  Whether that is true depends on what the Library does
and what the program that uses the Library does.

  1. You may copy and distribute verbatim copies of the Library's
complete source code as you receive it, in any medium, provided that
you conspicuously and appropriately publish on each copy an
appropriate copyright notice and disclaimer of warranty; keep intact
all the notices that refer to this License and to the absence of any
warranty; and distribute a copy of this License along with the
Library.

  You may charge a fee for the physical act of transferring a copy,
and you may at your option offer warranty protection in exchange for a
fee.

  2. You may modify your copy or copies of the Library or any portion
of it, thus forming a work based on the Library, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:

    a) The modified work must itself be a software library.

    b) You must cause the files modified to carry prominent notices
    stating that you changed the files and the date of any change.

    c) You must cause the whole of the work to be licensed at no
    charge to all third parties under the terms of this License.

    d) If a facility in the modified Library refers to a function or a
    table of data to be supplied by an application program that uses
    the facility, other than as an argument passed when the facility
    is invoked, then you must make a good faith effort to ensure that,
    in the event an application does not supply such function or
    table, the facility still operates, and performs whatever part of
    its purpose remains meaningful.

    (For example, a function in a library to compute square roots has
    a purpose that is entirely well-defined independent of the
    application.  Therefore, Subsection 2d requires that any
    application-supplied function or table used by this function must
    be optional: if the application does not supply it, the square
    root function must still compute square roots.)

These requirements apply to the modified work as a whole.  If
identifiable sections of that work are not derived from the Library,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works.  But when you
distribute the same sections as part of a whole which is a work based
on the Library, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote
it.

Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Library.

In addition, mere aggregation of another work not based on the Library
with the Library (or with a work based on the Library) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.

  3. You may opt to apply the terms of the ordinary GNU General Public
License instead of this License to a given copy of the Library.  To do
this, you must alter all the notices that refer to this License, so
that they refer to the ordinary GNU General Public License, version 2,
instead of to this License.  (If a newer version than version 2 of the
ordinary GNU General Public License has appeared, then you can specify
that version instead if you wish.)  Do not make any other change in
these notices.

  Once this change is made in a given copy, it is irreversible for
that copy, so the ordinary GNU General Public License applies to all
subsequent copies and derivative works made from that copy.

  This option is useful when you wish to copy part of the code of
the Library into a program that is not a library.

  4. You may copy and distribute the Library (or a portion or
derivative of it, under Section 2) in object code or executable form
under the terms of Sections 1 and 2 above provided that you accompany
it with the complete corresponding machine-readable source code, which
must be distributed under the terms of Sections 1 and 2 above on a
medium customarily used for software interchange.

  If distribution of object code is made by offering access to copy
from a designated place, then offering equivalent access to copy the
source code from the same place satisfies the requirement to
distribute the source code, even though third parties are not
compelled to copy the source along with the object code.

  5. A program that contains no derivative of any portion of the
Library, but is designed to work with the Library by being compiled or
linked with it, is called a "work that uses the Library".  Such a
work, in isolation, is not a derivative work of the Library, and
therefore falls outside the scope of this License.

  However, linking a "work that uses the Library" with the Library
creates an executable that is a derivative of the Library (because it
contains portions of the Library), rather than a "work that uses the
library".  The executable is therefore covered by this License.
Section 6 states terms for distribution of such executables.

  When a "work that uses the Library" uses material from a header file
that is part of the Library, the object code for the work may be a
derivative work of the Library even though the source code is not.
Whether this is true is especially significant if the work can be
linked without the Library, or if the work is itself a library.  The
threshold for this to be true is not precisely defined by law.

  If such an object file uses only numerical parameters, data
structure layouts and accessors, and small macros and small inline
functions (ten lines or less in length), then the use of the object
file is unrestricted, regardless of whether it is legally a derivative
work.  (Executables containing this object code plus portions of the
Library will still fall under Section 6.)

  Otherwise, if the work is a derivative of the Library, you may
distribute the object code for the work under the terms of Section 6.
Any executables containing that work also fall under Section 6,
whether or not they are linked directly with the Library itself.

  6. As an exception to the Sections above, you may also combine or
link a "work that uses the Library" with the Library to produce a
work containing portions of the Library, and distribute that work
under terms of your choice, provided that the terms permit
modification of the work for the customer's own use and reverse
engineering for debugging such modifications.

  You must give prominent notice with each copy of the work that the
Library is used in it and that the Library and its use are covered by
this License.  You must supply a copy of this License.  If the work
during execution displays copyright notices, you must include the
copyright notice for the Library among them, as well as a reference
directing the user to the copy of this License.  Also, you must do one
of these things:

    a) Accompany the work with the complete corresponding
    machine-readable source code for the Library including whatever
    changes were used in the work (which must be distributed under
    Sections 1 and 2 above); and, if the work is an executable linked
    with the Library, with the complete machine-readable "work that
    uses the Library", as object code and/or source code, so that the
    user can modify the Library and then relink to produce a modified
    executable containing the modified Library.  (It is understood
    that the user who changes the contents of definitions files in the
    Library will not necessarily be able to recompile the application
    to use the modified definitions.)

    b) Use a suitable shared library mechanism for linking with the
    Library.  A suitable mechanism is one that (1) uses at run time a
    copy of the library already present on the user's computer system,
    rather than copying library functions into the executable, and (2)
    will operate properly with a modified version of the library, if
    the user installs one, as long as the modified version is
    interface-compatible with the version that the work was made with.

    c) Accompany the work with a written offer, valid for at
    least three years, to give the same user the materials
    specified in Subsection 6a, above, for a charge no more
    than the cost of performing this distribution.

    d) If distribution of the work is made by offering access to copy
    from a designated place, offer equivalent access to copy the above
    specified materials from the same place.

    e) Verify that the user has already received a copy of these
    materials or that you have already sent this user a copy.

  For an executable, the required form of the "work that uses the
Library" must include any data and utility programs needed for
reproducing the executable from it.  However, as a special exception,
the materials to be distributed need not include anything that is
normally distributed (in either source or binary form) with the major
components (compiler, kernel, and so on) of the operating system on
which the executable runs, unless that component itself accompanies
the executable.

  It may happen that this requirement contradicts the license
restrictions of other proprietary libraries that do not normally
accompany the operating system.  Such a contradiction means you cannot
use both them and the Library together in an executable that you
distribute.

  7. You may place library facilities that are a work based on the
Library side-by-side in a single library together with other library
facilities not covered by this License, and distribute such a combined
library, provided that the separate distribution of the work based on
the Library and of the other library facilities is otherwise
permitted, and provided that you do these two things:

    a) Accompany the combined library with a copy of the same work
    based on the Library, uncombined with any other library
    facilities.  This must be distributed under the terms of the
    Sections above.

    b) Give prominent notice with the combined library of the fact
    that part of it is a work based on the Library, and explaining
    where to find the accompanying uncombined form of the same work.

  8. You may not copy, modify, sublicense, link with, or distribute
the Library except as expressly provided under this License.  Any
attempt otherwise to copy, modify, sublicense, link with, or
distribute the Library is void, and will automatically terminate your
rights under this License.  However, parties who have received copies,
or rights, from you under this License will not have their licenses
terminated so long as such parties remain in full compliance.

  9. You are not required to accept this License, since you have not
signed it.  However, nothing else grants you permission to modify or
distribute the Library or its derivative works.  These actions are
prohibited by law if you do not accept this License.  Therefore, by
modifying or distributing the Library (or any work based on the
Library), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Library or works based on it.

  10. Each time you redistribute the Library (or any work based on the
Library), the recipient automatically receives a license from the
original licensor to copy, distribute, link with or modify the Library
subject to these terms and conditions.  You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties with
this License.

  11. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License.  If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Library at all.  For example, if a patent
license would not permit royalty-free redistribution of the Library by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Library.

If any portion of this section is held invalid or unenforceable under any
particular circumstance, the balance of the section is intended to apply,
and the section as a whole is intended to apply in other circumstances.

It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system which is
implemented by public license practices.  Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.

This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.

  12. If the distribution and/or use of the Library is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Library under this License may add
an explicit geographical distribution limitation excluding those countries,
so that distribution is permitted only in or among countries not thus
excluded.  In such case, this License incorporates the limitation as if
written in the body of this License.

  13. The Free Software Foundation may publish revised and/or new
versions of the Lesser General Public License from time to time.
Such new versions will be similar in spirit to the present version,
but may differ in detail to address new problems or concerns.

Each version is given a distinguishing version number.  If the Library
specifies a version number of this License which applies to it and
"any later version", you have the option of following the terms and
conditions either of that version or of any later version published by
the Free Software Foundation.  If the Library does not specify a
license version number, you may choose any version ever published by
the Free Software Foundation.

  14. If you wish to incorporate parts of the Library into other free
programs whose distribution conditions are incompatible with these,
write to the author to ask for permission.  For software which is
copyrighted by the Free Software Foundation, write to the Free
Software Foundation; we sometimes make exceptions for this.  Our
decision will be guided by the two goals of preserving the free status
of all derivatives of our free software and of promoting the sharing
and reuse of software generally.

          NO WARRANTY

  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.

  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
DAMAGES.[![PHPUnit tests](https://github.com/dompdf/php-font-lib/actions/workflows/phpunit.yml/badge.svg)](https://github.com/dompdf/php-font-lib/actions/workflows/phpunit.yml)

# PHP Font Lib

This library can be used to:
 * Read TrueType, OpenType (with TrueType glyphs), WOFF font files
 * Extract basic info (name, style, etc)
 * Extract advanced info (horizontal metrics, glyph names, glyph shapes, etc)
 * Make an Adobe Font Metrics (AFM) file from a font

This project was initiated by the need to read font files in the [DOMPDF project](https://github.com/dompdf/dompdf).

Usage Example
-------------

### Base font information

```php
$font = \FontLib\Font::load('fontfile.ttf');
$font->parse();  // for getFontWeight() to work this call must be done first!
echo $font->getFontName() .'<br>';
echo $font->getFontSubfamily() .'<br>';
echo $font->getFontSubfamilyID() .'<br>';
echo $font->getFontFullName() .'<br>';
echo $font->getFontVersion() .'<br>';
echo $font->getFontWeight() .'<br>';
echo $font->getFontPostscriptName() .'<br>';
$font->close();
```

### Font Metrics Generation

```php
$font = FontLib\Font::load('fontfile.ttf');
$font->parse();
$font->saveAdobeFontMetrics('fontfile.ufm');
```

### Create a font subset

```php
$font = FontLib\Font::load('fontfile.ttf');
$font->parse();
$font->setSubset("abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ.:,;' (!?)+-*/== 1234567890"); // characters to include
$font->reduce();
touch('fontfile.subset.ttf');
$font->open('fontfile.subset.ttf', FontLib\BinaryStream::modeReadWrite);
$font->encode(array("OS/2"));
$font->close();
```
{
    "name": "phenx/php-font-lib",
    "type": "library",
    "description": "A library to read, parse, export and make subsets of different types of font files.",
    "homepage": "https://github.com/PhenX/php-font-lib",
    "license": "LGPL-2.1-or-later",
    "authors": [
        {
            "name": "Fabien Ménager",
            "email": "fabien.menager@gmail.com"
        }
    ],
    "autoload": {
        "psr-4": {
            "FontLib\\": "src/FontLib"
        }
    },
    "autoload-dev": {
        "psr-4": {
            "FontLib\\Tests\\": "tests/FontLib"
        }
    },
    "config": {
        "bin-dir": "bin"
    },
    "require": {
        "ext-mbstring": "*"
    },
    "require-dev": {
        "symfony/phpunit-bridge" : "^3 || ^4 || ^5 || ^6"
    }
}
// Adobe Standard Encoding table for ttf2pt1
// Thomas Henlich <Thomas.Henlich@mailbox.tu-dresden.de> 

=20	U+0020	SPACE
=21	U+0021	EXCLAMATION MARK
=22	U+0022	QUOTATION MARK
=23	U+0023	NUMBER SIGN
=24	U+0024	DOLLAR SIGN
=25	U+0025	PERCENT SIGN
=26	U+0026	AMPERSAND
=27	U+2019	RIGHT SINGLE QUOTATION MARK
=28	U+0028	LEFT PARENTHESIS
=29	U+0029	RIGHT PARENTHESIS
=2A	U+002A	ASTERISK
=2B	U+002B	PLUS SIGN
=2C	U+002C	COMMA
=2D	U+002D	HYPHEN-MINUS
=2E	U+002E	FULL STOP
=2F	U+002F	SOLIDUS
=30	U+0030	DIGIT ZERO
=31	U+0031	DIGIT ONE
=32	U+0032	DIGIT TWO
=33	U+0033	DIGIT THREE
=34	U+0034	DIGIT FOUR
=35	U+0035	DIGIT FIVE
=36	U+0036	DIGIT SIX
=37	U+0037	DIGIT SEVEN
=38	U+0038	DIGIT EIGHT
=39	U+0039	DIGIT NINE
=3A	U+003A	COLON
=3B	U+003B	SEMICOLON
=3C	U+003C	LESS-THAN SIGN
=3D	U+003D	EQUALS SIGN
=3E	U+003E	GREATER-THAN SIGN
=3F	U+003F	QUESTION MARK
=40	U+0040	COMMERCIAL AT
=41	U+0041	LATIN CAPITAL LETTER A
=42	U+0042	LATIN CAPITAL LETTER B
=43	U+0043	LATIN CAPITAL LETTER C
=44	U+0044	LATIN CAPITAL LETTER D
=45	U+0045	LATIN CAPITAL LETTER E
=46	U+0046	LATIN CAPITAL LETTER F
=47	U+0047	LATIN CAPITAL LETTER G
=48	U+0048	LATIN CAPITAL LETTER H
=49	U+0049	LATIN CAPITAL LETTER I
=4A	U+004A	LATIN CAPITAL LETTER J
=4B	U+004B	LATIN CAPITAL LETTER K
=4C	U+004C	LATIN CAPITAL LETTER L
=4D	U+004D	LATIN CAPITAL LETTER M
=4E	U+004E	LATIN CAPITAL LETTER N
=4F	U+004F	LATIN CAPITAL LETTER O
=50	U+0050	LATIN CAPITAL LETTER P
=51	U+0051	LATIN CAPITAL LETTER Q
=52	U+0052	LATIN CAPITAL LETTER R
=53	U+0053	LATIN CAPITAL LETTER S
=54	U+0054	LATIN CAPITAL LETTER T
=55	U+0055	LATIN CAPITAL LETTER U
=56	U+0056	LATIN CAPITAL LETTER V
=57	U+0057	LATIN CAPITAL LETTER W
=58	U+0058	LATIN CAPITAL LETTER X
=59	U+0059	LATIN CAPITAL LETTER Y
=5A	U+005A	LATIN CAPITAL LETTER Z
=5B	U+005B	LEFT SQUARE BRACKET
=5C	U+005C	REVERSE SOLIDUS
=5D	U+005D	RIGHT SQUARE BRACKET
=5E	U+005E	CIRCUMFLEX ACCENT
=5F	U+005F	LOW LINE
=60	U+2018	LEFT SINGLE QUOTATION MARK
=61	U+0061	LATIN SMALL LETTER A
=62	U+0062	LATIN SMALL LETTER B
=63	U+0063	LATIN SMALL LETTER C
=64	U+0064	LATIN SMALL LETTER D
=65	U+0065	LATIN SMALL LETTER E
=66	U+0066	LATIN SMALL LETTER F
=67	U+0067	LATIN SMALL LETTER G
=68	U+0068	LATIN SMALL LETTER H
=69	U+0069	LATIN SMALL LETTER I
=6A	U+006A	LATIN SMALL LETTER J
=6B	U+006B	LATIN SMALL LETTER K
=6C	U+006C	LATIN SMALL LETTER L
=6D	U+006D	LATIN SMALL LETTER M
=6E	U+006E	LATIN SMALL LETTER N
=6F	U+006F	LATIN SMALL LETTER O
=70	U+0070	LATIN SMALL LETTER P
=71	U+0071	LATIN SMALL LETTER Q
=72	U+0072	LATIN SMALL LETTER R
=73	U+0073	LATIN SMALL LETTER S
=74	U+0074	LATIN SMALL LETTER T
=75	U+0075	LATIN SMALL LETTER U
=76	U+0076	LATIN SMALL LETTER V
=77	U+0077	LATIN SMALL LETTER W
=78	U+0078	LATIN SMALL LETTER X
=79	U+0079	LATIN SMALL LETTER Y
=7A	U+007A	LATIN SMALL LETTER Z
=7B	U+007B	LEFT CURLY BRACKET
=7C	U+007C	VERTICAL LINE
=7D	U+007D	RIGHT CURLY BRACKET
=7E	U+007E	TILDE
=A1	U+00A1	INVERTED EXCLAMATION MARK
=A2	U+00A2	CENT SIGN
=A3	U+00A3	POUND SIGN
=A4	U+2044	FRACTION SLASH
=A5	U+00A5	YEN SIGN
=A6	U+0192	LATIN SMALL LETTER F WITH HOOK
=A7	U+00A7	SECTION SIGN
=A8	U+00A4	CURRENCY SIGN
=A9	U+0027	APOSTROPHE
=AA	U+201C	LEFT DOUBLE QUOTATION MARK
=AB	U+00AB	LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
=AC	U+2039	SINGLE LEFT-POINTING ANGLE QUOTATION MARK
=AD	U+203A	SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
=AE	U+FB01	LATIN SMALL LIGATURE FI
=AF	U+FB02	LATIN SMALL LIGATURE FL
=B1	U+2013	EN DASH
=B2	U+2020	DAGGER
=B3	U+2021	DOUBLE DAGGER
=B4	U+00B7	MIDDLE DOT
=B6	U+00B6	PILCROW SIGN
=B7	U+2022	BULLET
=B8	U+201A	SINGLE LOW-9 QUOTATION MARK
=B9	U+201E	DOUBLE LOW-9 QUOTATION MARK
=BA	U+201D	RIGHT DOUBLE QUOTATION MARK
=BB	U+00BB	RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
=BC	U+2026	HORIZONTAL ELLIPSIS
=BD	U+2030	PER MILLE SIGN
=BF	U+00BF	INVERTED QUESTION MARK
=C1	U+0060	GRAVE ACCENT
=C2	U+00B4	ACUTE ACCENT
=C3	U+02C6	MODIFIER LETTER CIRCUMFLEX ACCENT
=C4	U+02DC	SMALL TILDE
=C5	U+00AF	MACRON
=C6	U+02D8	BREVE
=C7	U+02D9	DOT ABOVE
=C8	U+00A8	DIAERESIS
=CA	U+02DA	RING ABOVE
=CB	U+00B8	CEDILLA
=CD	U+02DD	DOUBLE ACUTE ACCENT
=CE	U+02DB	OGONEK
=CF	U+02C7	CARON
=D0	U+2014	EM DASH
=E1	U+00C6	LATIN CAPITAL LETTER AE
=E3	U+00AA	FEMININE ORDINAL INDICATOR
=E8	U+0141	LATIN CAPITAL LETTER L WITH STROKE
=E9	U+00D8	LATIN CAPITAL LETTER O WITH STROKE
=EA	U+0152	LATIN CAPITAL LIGATURE OE
=EB	U+00BA	MASCULINE ORDINAL INDICATOR
=F1	U+00E6	LATIN SMALL LETTER AE
=F5	U+0131	LATIN SMALL LETTER DOTLESS I
=F8	U+0142	LATIN SMALL LETTER L WITH STROKE
=F9	U+00F8	LATIN SMALL LETTER O WITH STROKE
=FA	U+0153	LATIN SMALL LIGATURE OE
=FB	U+00DF	LATIN SMALL LETTER SHARP S

// unencoded characters:
=100	U+00E7	LATIN SMALL LETTER C WITH CEDILLA
=101	U+00FF	LATIN SMALL LETTER Y WITH DIAERESIS
=102	U+00E3	LATIN SMALL LETTER A WITH TILDE
=103	U+00EE	LATIN SMALL LETTER I WITH CIRCUMFLEX
=104	U+00B3	SUPERSCRIPT THREE
=105	U+00EA	LATIN SMALL LETTER E WITH CIRCUMFLEX
=106	U+00FE	LATIN SMALL LETTER THORN
=107	U+00E8	LATIN SMALL LETTER E WITH GRAVE
=108	U+00B2	SUPERSCRIPT TWO
=109	U+00E9	LATIN SMALL LETTER E WITH ACUTE
=10A	U+00F5	LATIN SMALL LETTER O WITH TILDE
=10B	U+00C1	LATIN CAPITAL LETTER A WITH ACUTE
=10C	U+00F4	LATIN SMALL LETTER O WITH CIRCUMFLEX
=10D	U+00FD	LATIN SMALL LETTER Y WITH ACUTE
=10E	U+00FC	LATIN SMALL LETTER U WITH DIAERESIS
=10F	U+00BE	VULGAR FRACTION THREE QUARTERS
=110	U+00E2	LATIN SMALL LETTER A WITH CIRCUMFLEX
=111	U+00D0	LATIN CAPITAL LETTER ETH
=112	U+00EB	LATIN SMALL LETTER E WITH DIAERESIS
=113	U+00F9	LATIN SMALL LETTER U WITH GRAVE
=114	U+2122	TRADE MARK SIGN
=115	U+00F2	LATIN SMALL LETTER O WITH GRAVE
=116    U+0161  LATIN SMALL LETTER S WITH CARON
=117	U+00CF	LATIN CAPITAL LETTER I WITH DIAERESIS
=118	U+00FA	LATIN SMALL LETTER U WITH ACUTE
=119	U+00E0	LATIN SMALL LETTER A WITH GRAVE
=11A	U+00F1	LATIN SMALL LETTER N WITH TILDE
=11B	U+00E5	LATIN SMALL LETTER A WITH RING ABOVE
=11C    U+017E  LATIN SMALL LETTER Z WITH CARON
=11D	U+00CE	LATIN CAPITAL LETTER I WITH CIRCUMFLEX
=11E	U+00D1	LATIN CAPITAL LETTER N WITH TILDE
=11F	U+00FB	LATIN SMALL LETTER U WITH CIRCUMFLEX
=120	U+00CA	LATIN CAPITAL LETTER E WITH CIRCUMFLEX
=121	U+00CD	LATIN CAPITAL LETTER I WITH ACUTE
=122	U+00C7	LATIN CAPITAL LETTER C WITH CEDILLA
=123	U+00D6	LATIN CAPITAL LETTER O WITH DIAERESIS
=124    U+0160  LATIN CAPITAL LETTER S WITH CARON
=125	U+00CC	LATIN CAPITAL LETTER I WITH GRAVE
=126	U+00E4	LATIN SMALL LETTER A WITH DIAERESIS
=127	U+00D2	LATIN CAPITAL LETTER O WITH GRAVE
=128	U+00C8	LATIN CAPITAL LETTER E WITH GRAVE
=129    U+0178  LATIN CAPITAL LETTER Y WITH DIAERESIS
=12A	U+00AE	REGISTERED SIGN
=12B	U+00D5	LATIN CAPITAL LETTER O WITH TILDE
=12C	U+00BC	VULGAR FRACTION ONE QUARTER
=12D	U+00D9	LATIN CAPITAL LETTER U WITH GRAVE
=12E	U+00DB	LATIN CAPITAL LETTER U WITH CIRCUMFLEX
=12F	U+00DE	LATIN CAPITAL LETTER THORN
=130	U+00F7	DIVISION SIGN
=131	U+00C3	LATIN CAPITAL LETTER A WITH TILDE
=132	U+00DA	LATIN CAPITAL LETTER U WITH ACUTE
=133	U+00D4	LATIN CAPITAL LETTER O WITH CIRCUMFLEX
=134	U+00AC	NOT SIGN
=135	U+00C5	LATIN CAPITAL LETTER A WITH RING ABOVE
=136	U+00EF	LATIN SMALL LETTER I WITH DIAERESIS
=137	U+00ED	LATIN SMALL LETTER I WITH ACUTE
=138	U+00E1	LATIN SMALL LETTER A WITH ACUTE
=139	U+00B1	PLUS-MINUS SIGN
=13A	U+00D7	MULTIPLICATION SIGN
=13B	U+00DC	LATIN CAPITAL LETTER U WITH DIAERESIS
=13C	U+2212  MINUS SIGN
=13D	U+00B9	SUPERSCRIPT ONE
=13E	U+00C9	LATIN CAPITAL LETTER E WITH ACUTE
=13F	U+00C2	LATIN CAPITAL LETTER A WITH CIRCUMFLEX
=140	U+00A9	COPYRIGHT SIGN
=141	U+00C0	LATIN CAPITAL LETTER A WITH GRAVE
=142	U+00F6	LATIN SMALL LETTER O WITH DIAERESIS
=143	U+00F3	LATIN SMALL LETTER O WITH ACUTE
=144	U+00B0	DEGREE SIGN
=145	U+00EC	LATIN SMALL LETTER I WITH GRAVE
=146	U+00B5	MICRO SIGN
=147	U+00D3	LATIN CAPITAL LETTER O WITH ACUTE
=148	U+00F0	LATIN SMALL LETTER ETH
=149	U+00C4	LATIN CAPITAL LETTER A WITH DIAERESIS
=14A	U+00DD	LATIN CAPITAL LETTER Y WITH ACUTE
=14B	U+00A6	BROKEN BAR
=14C	U+00BD	VULGAR FRACTION ONE HALF
!00 U+0000 .notdef
!01 U+0001 .notdef
!02 U+0002 .notdef
!03 U+0003 .notdef
!04 U+0004 .notdef
!05 U+0005 .notdef
!06 U+0006 .notdef
!07 U+0007 .notdef
!08 U+0008 .notdef
!09 U+0009 .notdef
!0A U+000A .notdef
!0B U+000B .notdef
!0C U+000C .notdef
!0D U+000D .notdef
!0E U+000E .notdef
!0F U+000F .notdef
!10 U+0010 .notdef
!11 U+0011 .notdef
!12 U+0012 .notdef
!13 U+0013 .notdef
!14 U+0014 .notdef
!15 U+0015 .notdef
!16 U+0016 .notdef
!17 U+0017 .notdef
!18 U+0018 .notdef
!19 U+0019 .notdef
!1A U+001A .notdef
!1B U+001B .notdef
!1C U+001C .notdef
!1D U+001D .notdef
!1E U+001E .notdef
!1F U+001F .notdef
!20 U+0020 space
!21 U+0021 exclam
!22 U+0022 quotedbl
!23 U+0023 numbersign
!24 U+0024 dollar
!25 U+0025 percent
!26 U+0026 ampersand
!27 U+0027 quotesingle
!28 U+0028 parenleft
!29 U+0029 parenright
!2A U+002A asterisk
!2B U+002B plus
!2C U+002C comma
!2D U+002D hyphen
!2E U+002E period
!2F U+002F slash
!30 U+0030 zero
!31 U+0031 one
!32 U+0032 two
!33 U+0033 three
!34 U+0034 four
!35 U+0035 five
!36 U+0036 six
!37 U+0037 seven
!38 U+0038 eight
!39 U+0039 nine
!3A U+003A colon
!3B U+003B semicolon
!3C U+003C less
!3D U+003D equal
!3E U+003E greater
!3F U+003F question
!40 U+0040 at
!41 U+0041 A
!42 U+0042 B
!43 U+0043 C
!44 U+0044 D
!45 U+0045 E
!46 U+0046 F
!47 U+0047 G
!48 U+0048 H
!49 U+0049 I
!4A U+004A J
!4B U+004B K
!4C U+004C L
!4D U+004D M
!4E U+004E N
!4F U+004F O
!50 U+0050 P
!51 U+0051 Q
!52 U+0052 R
!53 U+0053 S
!54 U+0054 T
!55 U+0055 U
!56 U+0056 V
!57 U+0057 W
!58 U+0058 X
!59 U+0059 Y
!5A U+005A Z
!5B U+005B bracketleft
!5C U+005C backslash
!5D U+005D bracketright
!5E U+005E asciicircum
!5F U+005F underscore
!60 U+0060 grave
!61 U+0061 a
!62 U+0062 b
!63 U+0063 c
!64 U+0064 d
!65 U+0065 e
!66 U+0066 f
!67 U+0067 g
!68 U+0068 h
!69 U+0069 i
!6A U+006A j
!6B U+006B k
!6C U+006C l
!6D U+006D m
!6E U+006E n
!6F U+006F o
!70 U+0070 p
!71 U+0071 q
!72 U+0072 r
!73 U+0073 s
!74 U+0074 t
!75 U+0075 u
!76 U+0076 v
!77 U+0077 w
!78 U+0078 x
!79 U+0079 y
!7A U+007A z
!7B U+007B braceleft
!7C U+007C bar
!7D U+007D braceright
!7E U+007E asciitilde
!7F U+007F .notdef
!80 U+20AC Euro
!82 U+201A quotesinglbase
!84 U+201E quotedblbase
!85 U+2026 ellipsis
!86 U+2020 dagger
!87 U+2021 daggerdbl
!89 U+2030 perthousand
!8A U+0160 Scaron
!8B U+2039 guilsinglleft
!8C U+015A Sacute
!8D U+0164 Tcaron
!8E U+017D Zcaron
!8F U+0179 Zacute
!91 U+2018 quoteleft
!92 U+2019 quoteright
!93 U+201C quotedblleft
!94 U+201D quotedblright
!95 U+2022 bullet
!96 U+2013 endash
!97 U+2014 emdash
!99 U+2122 trademark
!9A U+0161 scaron
!9B U+203A guilsinglright
!9C U+015B sacute
!9D U+0165 tcaron
!9E U+017E zcaron
!9F U+017A zacute
!A0 U+00A0 space
!A1 U+02C7 caron
!A2 U+02D8 breve
!A3 U+0141 Lslash
!A4 U+00A4 currency
!A5 U+0104 Aogonek
!A6 U+00A6 brokenbar
!A7 U+00A7 section
!A8 U+00A8 dieresis
!A9 U+00A9 copyright
!AA U+015E Scedilla
!AB U+00AB guillemotleft
!AC U+00AC logicalnot
!AD U+00AD hyphen
!AE U+00AE registered
!AF U+017B Zdotaccent
!B0 U+00B0 degree
!B1 U+00B1 plusminus
!B2 U+02DB ogonek
!B3 U+0142 lslash
!B4 U+00B4 acute
!B5 U+00B5 mu
!B6 U+00B6 paragraph
!B7 U+00B7 periodcentered
!B8 U+00B8 cedilla
!B9 U+0105 aogonek
!BA U+015F scedilla
!BB U+00BB guillemotright
!BC U+013D Lcaron
!BD U+02DD hungarumlaut
!BE U+013E lcaron
!BF U+017C zdotaccent
!C0 U+0154 Racute
!C1 U+00C1 Aacute
!C2 U+00C2 Acircumflex
!C3 U+0102 Abreve
!C4 U+00C4 Adieresis
!C5 U+0139 Lacute
!C6 U+0106 Cacute
!C7 U+00C7 Ccedilla
!C8 U+010C Ccaron
!C9 U+00C9 Eacute
!CA U+0118 Eogonek
!CB U+00CB Edieresis
!CC U+011A Ecaron
!CD U+00CD Iacute
!CE U+00CE Icircumflex
!CF U+010E Dcaron
!D0 U+0110 Dcroat
!D1 U+0143 Nacute
!D2 U+0147 Ncaron
!D3 U+00D3 Oacute
!D4 U+00D4 Ocircumflex
!D5 U+0150 Ohungarumlaut
!D6 U+00D6 Odieresis
!D7 U+00D7 multiply
!D8 U+0158 Rcaron
!D9 U+016E Uring
!DA U+00DA Uacute
!DB U+0170 Uhungarumlaut
!DC U+00DC Udieresis
!DD U+00DD Yacute
!DE U+0162 Tcommaaccent
!DF U+00DF germandbls
!E0 U+0155 racute
!E1 U+00E1 aacute
!E2 U+00E2 acircumflex
!E3 U+0103 abreve
!E4 U+00E4 adieresis
!E5 U+013A lacute
!E6 U+0107 cacute
!E7 U+00E7 ccedilla
!E8 U+010D ccaron
!E9 U+00E9 eacute
!EA U+0119 eogonek
!EB U+00EB edieresis
!EC U+011B ecaron
!ED U+00ED iacute
!EE U+00EE icircumflex
!EF U+010F dcaron
!F0 U+0111 dcroat
!F1 U+0144 nacute
!F2 U+0148 ncaron
!F3 U+00F3 oacute
!F4 U+00F4 ocircumflex
!F5 U+0151 ohungarumlaut
!F6 U+00F6 odieresis
!F7 U+00F7 divide
!F8 U+0159 rcaron
!F9 U+016F uring
!FA U+00FA uacute
!FB U+0171 uhungarumlaut
!FC U+00FC udieresis
!FD U+00FD yacute
!FE U+0163 tcommaaccent
!FF U+02D9 dotaccent
!00 U+0000 .notdef
!01 U+0001 .notdef
!02 U+0002 .notdef
!03 U+0003 .notdef
!04 U+0004 .notdef
!05 U+0005 .notdef
!06 U+0006 .notdef
!07 U+0007 .notdef
!08 U+0008 .notdef
!09 U+0009 .notdef
!0A U+000A .notdef
!0B U+000B .notdef
!0C U+000C .notdef
!0D U+000D .notdef
!0E U+000E .notdef
!0F U+000F .notdef
!10 U+0010 .notdef
!11 U+0011 .notdef
!12 U+0012 .notdef
!13 U+0013 .notdef
!14 U+0014 .notdef
!15 U+0015 .notdef
!16 U+0016 .notdef
!17 U+0017 .notdef
!18 U+0018 .notdef
!19 U+0019 .notdef
!1A U+001A .notdef
!1B U+001B .notdef
!1C U+001C .notdef
!1D U+001D .notdef
!1E U+001E .notdef
!1F U+001F .notdef
!20 U+0020 space
!21 U+0021 exclam
!22 U+0022 quotedbl
!23 U+0023 numbersign
!24 U+0024 dollar
!25 U+0025 percent
!26 U+0026 ampersand
!27 U+0027 quotesingle
!28 U+0028 parenleft
!29 U+0029 parenright
!2A U+002A asterisk
!2B U+002B plus
!2C U+002C comma
!2D U+002D hyphen
!2E U+002E period
!2F U+002F slash
!30 U+0030 zero
!31 U+0031 one
!32 U+0032 two
!33 U+0033 three
!34 U+0034 four
!35 U+0035 five
!36 U+0036 six
!37 U+0037 seven
!38 U+0038 eight
!39 U+0039 nine
!3A U+003A colon
!3B U+003B semicolon
!3C U+003C less
!3D U+003D equal
!3E U+003E greater
!3F U+003F question
!40 U+0040 at
!41 U+0041 A
!42 U+0042 B
!43 U+0043 C
!44 U+0044 D
!45 U+0045 E
!46 U+0046 F
!47 U+0047 G
!48 U+0048 H
!49 U+0049 I
!4A U+004A J
!4B U+004B K
!4C U+004C L
!4D U+004D M
!4E U+004E N
!4F U+004F O
!50 U+0050 P
!51 U+0051 Q
!52 U+0052 R
!53 U+0053 S
!54 U+0054 T
!55 U+0055 U
!56 U+0056 V
!57 U+0057 W
!58 U+0058 X
!59 U+0059 Y
!5A U+005A Z
!5B U+005B bracketleft
!5C U+005C backslash
!5D U+005D bracketright
!5E U+005E asciicircum
!5F U+005F underscore
!60 U+0060 grave
!61 U+0061 a
!62 U+0062 b
!63 U+0063 c
!64 U+0064 d
!65 U+0065 e
!66 U+0066 f
!67 U+0067 g
!68 U+0068 h
!69 U+0069 i
!6A U+006A j
!6B U+006B k
!6C U+006C l
!6D U+006D m
!6E U+006E n
!6F U+006F o
!70 U+0070 p
!71 U+0071 q
!72 U+0072 r
!73 U+0073 s
!74 U+0074 t
!75 U+0075 u
!76 U+0076 v
!77 U+0077 w
!78 U+0078 x
!79 U+0079 y
!7A U+007A z
!7B U+007B braceleft
!7C U+007C bar
!7D U+007D braceright
!7E U+007E asciitilde
!7F U+007F .notdef
!80 U+0402 afii10051
!81 U+0403 afii10052
!82 U+201A quotesinglbase
!83 U+0453 afii10100
!84 U+201E quotedblbase
!85 U+2026 ellipsis
!86 U+2020 dagger
!87 U+2021 daggerdbl
!88 U+20AC Euro
!89 U+2030 perthousand
!8A U+0409 afii10058
!8B U+2039 guilsinglleft
!8C U+040A afii10059
!8D U+040C afii10061
!8E U+040B afii10060
!8F U+040F afii10145
!90 U+0452 afii10099
!91 U+2018 quoteleft
!92 U+2019 quoteright
!93 U+201C quotedblleft
!94 U+201D quotedblright
!95 U+2022 bullet
!96 U+2013 endash
!97 U+2014 emdash
!99 U+2122 trademark
!9A U+0459 afii10106
!9B U+203A guilsinglright
!9C U+045A afii10107
!9D U+045C afii10109
!9E U+045B afii10108
!9F U+045F afii10193
!A0 U+00A0 space
!A1 U+040E afii10062
!A2 U+045E afii10110
!A3 U+0408 afii10057
!A4 U+00A4 currency
!A5 U+0490 afii10050
!A6 U+00A6 brokenbar
!A7 U+00A7 section
!A8 U+0401 afii10023
!A9 U+00A9 copyright
!AA U+0404 afii10053
!AB U+00AB guillemotleft
!AC U+00AC logicalnot
!AD U+00AD hyphen
!AE U+00AE registered
!AF U+0407 afii10056
!B0 U+00B0 degree
!B1 U+00B1 plusminus
!B2 U+0406 afii10055
!B3 U+0456 afii10103
!B4 U+0491 afii10098
!B5 U+00B5 mu
!B6 U+00B6 paragraph
!B7 U+00B7 periodcentered
!B8 U+0451 afii10071
!B9 U+2116 afii61352
!BA U+0454 afii10101
!BB U+00BB guillemotright
!BC U+0458 afii10105
!BD U+0405 afii10054
!BE U+0455 afii10102
!BF U+0457 afii10104
!C0 U+0410 afii10017
!C1 U+0411 afii10018
!C2 U+0412 afii10019
!C3 U+0413 afii10020
!C4 U+0414 afii10021
!C5 U+0415 afii10022
!C6 U+0416 afii10024
!C7 U+0417 afii10025
!C8 U+0418 afii10026
!C9 U+0419 afii10027
!CA U+041A afii10028
!CB U+041B afii10029
!CC U+041C afii10030
!CD U+041D afii10031
!CE U+041E afii10032
!CF U+041F afii10033
!D0 U+0420 afii10034
!D1 U+0421 afii10035
!D2 U+0422 afii10036
!D3 U+0423 afii10037
!D4 U+0424 afii10038
!D5 U+0425 afii10039
!D6 U+0426 afii10040
!D7 U+0427 afii10041
!D8 U+0428 afii10042
!D9 U+0429 afii10043
!DA U+042A afii10044
!DB U+042B afii10045
!DC U+042C afii10046
!DD U+042D afii10047
!DE U+042E afii10048
!DF U+042F afii10049
!E0 U+0430 afii10065
!E1 U+0431 afii10066
!E2 U+0432 afii10067
!E3 U+0433 afii10068
!E4 U+0434 afii10069
!E5 U+0435 afii10070
!E6 U+0436 afii10072
!E7 U+0437 afii10073
!E8 U+0438 afii10074
!E9 U+0439 afii10075
!EA U+043A afii10076
!EB U+043B afii10077
!EC U+043C afii10078
!ED U+043D afii10079
!EE U+043E afii10080
!EF U+043F afii10081
!F0 U+0440 afii10082
!F1 U+0441 afii10083
!F2 U+0442 afii10084
!F3 U+0443 afii10085
!F4 U+0444 afii10086
!F5 U+0445 afii10087
!F6 U+0446 afii10088
!F7 U+0447 afii10089
!F8 U+0448 afii10090
!F9 U+0449 afii10091
!FA U+044A afii10092
!FB U+044B afii10093
!FC U+044C afii10094
!FD U+044D afii10095
!FE U+044E afii10096
!FF U+044F afii10097
!00 U+0000 .notdef
!01 U+0001 .notdef
!02 U+0002 .notdef
!03 U+0003 .notdef
!04 U+0004 .notdef
!05 U+0005 .notdef
!06 U+0006 .notdef
!07 U+0007 .notdef
!08 U+0008 .notdef
!09 U+0009 .notdef
!0A U+000A .notdef
!0B U+000B .notdef
!0C U+000C .notdef
!0D U+000D .notdef
!0E U+000E .notdef
!0F U+000F .notdef
!10 U+0010 .notdef
!11 U+0011 .notdef
!12 U+0012 .notdef
!13 U+0013 .notdef
!14 U+0014 .notdef
!15 U+0015 .notdef
!16 U+0016 .notdef
!17 U+0017 .notdef
!18 U+0018 .notdef
!19 U+0019 .notdef
!1A U+001A .notdef
!1B U+001B .notdef
!1C U+001C .notdef
!1D U+001D .notdef
!1E U+001E .notdef
!1F U+001F .notdef
!20 U+0020 space
!21 U+0021 exclam
!22 U+0022 quotedbl
!23 U+0023 numbersign
!24 U+0024 dollar
!25 U+0025 percent
!26 U+0026 ampersand
!27 U+0027 quotesingle
!28 U+0028 parenleft
!29 U+0029 parenright
!2A U+002A asterisk
!2B U+002B plus
!2C U+002C comma
!2D U+002D hyphen
!2E U+002E period
!2F U+002F slash
!30 U+0030 zero
!31 U+0031 one
!32 U+0032 two
!33 U+0033 three
!34 U+0034 four
!35 U+0035 five
!36 U+0036 six
!37 U+0037 seven
!38 U+0038 eight
!39 U+0039 nine
!3A U+003A colon
!3B U+003B semicolon
!3C U+003C less
!3D U+003D equal
!3E U+003E greater
!3F U+003F question
!40 U+0040 at
!41 U+0041 A
!42 U+0042 B
!43 U+0043 C
!44 U+0044 D
!45 U+0045 E
!46 U+0046 F
!47 U+0047 G
!48 U+0048 H
!49 U+0049 I
!4A U+004A J
!4B U+004B K
!4C U+004C L
!4D U+004D M
!4E U+004E N
!4F U+004F O
!50 U+0050 P
!51 U+0051 Q
!52 U+0052 R
!53 U+0053 S
!54 U+0054 T
!55 U+0055 U
!56 U+0056 V
!57 U+0057 W
!58 U+0058 X
!59 U+0059 Y
!5A U+005A Z
!5B U+005B bracketleft
!5C U+005C backslash
!5D U+005D bracketright
!5E U+005E asciicircum
!5F U+005F underscore
!60 U+0060 grave
!61 U+0061 a
!62 U+0062 b
!63 U+0063 c
!64 U+0064 d
!65 U+0065 e
!66 U+0066 f
!67 U+0067 g
!68 U+0068 h
!69 U+0069 i
!6A U+006A j
!6B U+006B k
!6C U+006C l
!6D U+006D m
!6E U+006E n
!6F U+006F o
!70 U+0070 p
!71 U+0071 q
!72 U+0072 r
!73 U+0073 s
!74 U+0074 t
!75 U+0075 u
!76 U+0076 v
!77 U+0077 w
!78 U+0078 x
!79 U+0079 y
!7A U+007A z
!7B U+007B braceleft
!7C U+007C bar
!7D U+007D braceright
!7E U+007E asciitilde
!7F U+007F .notdef
!80 U+20AC Euro
!82 U+201A quotesinglbase
!83 U+0192 florin
!84 U+201E quotedblbase
!85 U+2026 ellipsis
!86 U+2020 dagger
!87 U+2021 daggerdbl
!88 U+02C6 circumflex
!89 U+2030 perthousand
!8A U+0160 Scaron
!8B U+2039 guilsinglleft
!8C U+0152 OE
!8E U+017D Zcaron
!91 U+2018 quoteleft
!92 U+2019 quoteright
!93 U+201C quotedblleft
!94 U+201D quotedblright
!95 U+2022 bullet
!96 U+2013 endash
!97 U+2014 emdash
!98 U+02DC tilde
!99 U+2122 trademark
!9A U+0161 scaron
!9B U+203A guilsinglright
!9C U+0153 oe
!9E U+017E zcaron
!9F U+0178 Ydieresis
!A0 U+00A0 space
!A1 U+00A1 exclamdown
!A2 U+00A2 cent
!A3 U+00A3 sterling
!A4 U+00A4 currency
!A5 U+00A5 yen
!A6 U+00A6 brokenbar
!A7 U+00A7 section
!A8 U+00A8 dieresis
!A9 U+00A9 copyright
!AA U+00AA ordfeminine
!AB U+00AB guillemotleft
!AC U+00AC logicalnot
!AD U+00AD hyphen
!AE U+00AE registered
!AF U+00AF macron
!B0 U+00B0 degree
!B1 U+00B1 plusminus
!B2 U+00B2 twosuperior
!B3 U+00B3 threesuperior
!B4 U+00B4 acute
!B5 U+00B5 mu
!B6 U+00B6 paragraph
!B7 U+00B7 periodcentered
!B8 U+00B8 cedilla
!B9 U+00B9 onesuperior
!BA U+00BA ordmasculine
!BB U+00BB guillemotright
!BC U+00BC onequarter
!BD U+00BD onehalf
!BE U+00BE threequarters
!BF U+00BF questiondown
!C0 U+00C0 Agrave
!C1 U+00C1 Aacute
!C2 U+00C2 Acircumflex
!C3 U+00C3 Atilde
!C4 U+00C4 Adieresis
!C5 U+00C5 Aring
!C6 U+00C6 AE
!C7 U+00C7 Ccedilla
!C8 U+00C8 Egrave
!C9 U+00C9 Eacute
!CA U+00CA Ecircumflex
!CB U+00CB Edieresis
!CC U+00CC Igrave
!CD U+00CD Iacute
!CE U+00CE Icircumflex
!CF U+00CF Idieresis
!D0 U+00D0 Eth
!D1 U+00D1 Ntilde
!D2 U+00D2 Ograve
!D3 U+00D3 Oacute
!D4 U+00D4 Ocircumflex
!D5 U+00D5 Otilde
!D6 U+00D6 Odieresis
!D7 U+00D7 multiply
!D8 U+00D8 Oslash
!D9 U+00D9 Ugrave
!DA U+00DA Uacute
!DB U+00DB Ucircumflex
!DC U+00DC Udieresis
!DD U+00DD Yacute
!DE U+00DE Thorn
!DF U+00DF germandbls
!E0 U+00E0 agrave
!E1 U+00E1 aacute
!E2 U+00E2 acircumflex
!E3 U+00E3 atilde
!E4 U+00E4 adieresis
!E5 U+00E5 aring
!E6 U+00E6 ae
!E7 U+00E7 ccedilla
!E8 U+00E8 egrave
!E9 U+00E9 eacute
!EA U+00EA ecircumflex
!EB U+00EB edieresis
!EC U+00EC igrave
!ED U+00ED iacute
!EE U+00EE icircumflex
!EF U+00EF idieresis
!F0 U+00F0 eth
!F1 U+00F1 ntilde
!F2 U+00F2 ograve
!F3 U+00F3 oacute
!F4 U+00F4 ocircumflex
!F5 U+00F5 otilde
!F6 U+00F6 odieresis
!F7 U+00F7 divide
!F8 U+00F8 oslash
!F9 U+00F9 ugrave
!FA U+00FA uacute
!FB U+00FB ucircumflex
!FC U+00FC udieresis
!FD U+00FD yacute
!FE U+00FE thorn
!FF U+00FF ydieresis
!00 U+0000 .notdef
!01 U+0001 .notdef
!02 U+0002 .notdef
!03 U+0003 .notdef
!04 U+0004 .notdef
!05 U+0005 .notdef
!06 U+0006 .notdef
!07 U+0007 .notdef
!08 U+0008 .notdef
!09 U+0009 .notdef
!0A U+000A .notdef
!0B U+000B .notdef
!0C U+000C .notdef
!0D U+000D .notdef
!0E U+000E .notdef
!0F U+000F .notdef
!10 U+0010 .notdef
!11 U+0011 .notdef
!12 U+0012 .notdef
!13 U+0013 .notdef
!14 U+0014 .notdef
!15 U+0015 .notdef
!16 U+0016 .notdef
!17 U+0017 .notdef
!18 U+0018 .notdef
!19 U+0019 .notdef
!1A U+001A .notdef
!1B U+001B .notdef
!1C U+001C .notdef
!1D U+001D .notdef
!1E U+001E .notdef
!1F U+001F .notdef
!20 U+0020 space
!21 U+0021 exclam
!22 U+0022 quotedbl
!23 U+0023 numbersign
!24 U+0024 dollar
!25 U+0025 percent
!26 U+0026 ampersand
!27 U+0027 quotesingle
!28 U+0028 parenleft
!29 U+0029 parenright
!2A U+002A asterisk
!2B U+002B plus
!2C U+002C comma
!2D U+002D hyphen
!2E U+002E period
!2F U+002F slash
!30 U+0030 zero
!31 U+0031 one
!32 U+0032 two
!33 U+0033 three
!34 U+0034 four
!35 U+0035 five
!36 U+0036 six
!37 U+0037 seven
!38 U+0038 eight
!39 U+0039 nine
!3A U+003A colon
!3B U+003B semicolon
!3C U+003C less
!3D U+003D equal
!3E U+003E greater
!3F U+003F question
!40 U+0040 at
!41 U+0041 A
!42 U+0042 B
!43 U+0043 C
!44 U+0044 D
!45 U+0045 E
!46 U+0046 F
!47 U+0047 G
!48 U+0048 H
!49 U+0049 I
!4A U+004A J
!4B U+004B K
!4C U+004C L
!4D U+004D M
!4E U+004E N
!4F U+004F O
!50 U+0050 P
!51 U+0051 Q
!52 U+0052 R
!53 U+0053 S
!54 U+0054 T
!55 U+0055 U
!56 U+0056 V
!57 U+0057 W
!58 U+0058 X
!59 U+0059 Y
!5A U+005A Z
!5B U+005B bracketleft
!5C U+005C backslash
!5D U+005D bracketright
!5E U+005E asciicircum
!5F U+005F underscore
!60 U+0060 grave
!61 U+0061 a
!62 U+0062 b
!63 U+0063 c
!64 U+0064 d
!65 U+0065 e
!66 U+0066 f
!67 U+0067 g
!68 U+0068 h
!69 U+0069 i
!6A U+006A j
!6B U+006B k
!6C U+006C l
!6D U+006D m
!6E U+006E n
!6F U+006F o
!70 U+0070 p
!71 U+0071 q
!72 U+0072 r
!73 U+0073 s
!74 U+0074 t
!75 U+0075 u
!76 U+0076 v
!77 U+0077 w
!78 U+0078 x
!79 U+0079 y
!7A U+007A z
!7B U+007B braceleft
!7C U+007C bar
!7D U+007D braceright
!7E U+007E asciitilde
!7F U+007F .notdef
!80 U+20AC Euro
!82 U+201A quotesinglbase
!83 U+0192 florin
!84 U+201E quotedblbase
!85 U+2026 ellipsis
!86 U+2020 dagger
!87 U+2021 daggerdbl
!89 U+2030 perthousand
!8B U+2039 guilsinglleft
!91 U+2018 quoteleft
!92 U+2019 quoteright
!93 U+201C quotedblleft
!94 U+201D quotedblright
!95 U+2022 bullet
!96 U+2013 endash
!97 U+2014 emdash
!99 U+2122 trademark
!9B U+203A guilsinglright
!A0 U+00A0 space
!A1 U+0385 dieresistonos
!A2 U+0386 Alphatonos
!A3 U+00A3 sterling
!A4 U+00A4 currency
!A5 U+00A5 yen
!A6 U+00A6 brokenbar
!A7 U+00A7 section
!A8 U+00A8 dieresis
!A9 U+00A9 copyright
!AB U+00AB guillemotleft
!AC U+00AC logicalnot
!AD U+00AD hyphen
!AE U+00AE registered
!AF U+2015 afii00208
!B0 U+00B0 degree
!B1 U+00B1 plusminus
!B2 U+00B2 twosuperior
!B3 U+00B3 threesuperior
!B4 U+0384 tonos
!B5 U+00B5 mu
!B6 U+00B6 paragraph
!B7 U+00B7 periodcentered
!B8 U+0388 Epsilontonos
!B9 U+0389 Etatonos
!BA U+038A Iotatonos
!BB U+00BB guillemotright
!BC U+038C Omicrontonos
!BD U+00BD onehalf
!BE U+038E Upsilontonos
!BF U+038F Omegatonos
!C0 U+0390 iotadieresistonos
!C1 U+0391 Alpha
!C2 U+0392 Beta
!C3 U+0393 Gamma
!C4 U+0394 Delta
!C5 U+0395 Epsilon
!C6 U+0396 Zeta
!C7 U+0397 Eta
!C8 U+0398 Theta
!C9 U+0399 Iota
!CA U+039A Kappa
!CB U+039B Lambda
!CC U+039C Mu
!CD U+039D Nu
!CE U+039E Xi
!CF U+039F Omicron
!D0 U+03A0 Pi
!D1 U+03A1 Rho
!D3 U+03A3 Sigma
!D4 U+03A4 Tau
!D5 U+03A5 Upsilon
!D6 U+03A6 Phi
!D7 U+03A7 Chi
!D8 U+03A8 Psi
!D9 U+03A9 Omega
!DA U+03AA Iotadieresis
!DB U+03AB Upsilondieresis
!DC U+03AC alphatonos
!DD U+03AD epsilontonos
!DE U+03AE etatonos
!DF U+03AF iotatonos
!E0 U+03B0 upsilondieresistonos
!E1 U+03B1 alpha
!E2 U+03B2 beta
!E3 U+03B3 gamma
!E4 U+03B4 delta
!E5 U+03B5 epsilon
!E6 U+03B6 zeta
!E7 U+03B7 eta
!E8 U+03B8 theta
!E9 U+03B9 iota
!EA U+03BA kappa
!EB U+03BB lambda
!EC U+03BC mu
!ED U+03BD nu
!EE U+03BE xi
!EF U+03BF omicron
!F0 U+03C0 pi
!F1 U+03C1 rho
!F2 U+03C2 sigma1
!F3 U+03C3 sigma
!F4 U+03C4 tau
!F5 U+03C5 upsilon
!F6 U+03C6 phi
!F7 U+03C7 chi
!F8 U+03C8 psi
!F9 U+03C9 omega
!FA U+03CA iotadieresis
!FB U+03CB upsilondieresis
!FC U+03CC omicrontonos
!FD U+03CD upsilontonos
!FE U+03CE omegatonos
!00 U+0000 .notdef
!01 U+0001 .notdef
!02 U+0002 .notdef
!03 U+0003 .notdef
!04 U+0004 .notdef
!05 U+0005 .notdef
!06 U+0006 .notdef
!07 U+0007 .notdef
!08 U+0008 .notdef
!09 U+0009 .notdef
!0A U+000A .notdef
!0B U+000B .notdef
!0C U+000C .notdef
!0D U+000D .notdef
!0E U+000E .notdef
!0F U+000F .notdef
!10 U+0010 .notdef
!11 U+0011 .notdef
!12 U+0012 .notdef
!13 U+0013 .notdef
!14 U+0014 .notdef
!15 U+0015 .notdef
!16 U+0016 .notdef
!17 U+0017 .notdef
!18 U+0018 .notdef
!19 U+0019 .notdef
!1A U+001A .notdef
!1B U+001B .notdef
!1C U+001C .notdef
!1D U+001D .notdef
!1E U+001E .notdef
!1F U+001F .notdef
!20 U+0020 space
!21 U+0021 exclam
!22 U+0022 quotedbl
!23 U+0023 numbersign
!24 U+0024 dollar
!25 U+0025 percent
!26 U+0026 ampersand
!27 U+0027 quotesingle
!28 U+0028 parenleft
!29 U+0029 parenright
!2A U+002A asterisk
!2B U+002B plus
!2C U+002C comma
!2D U+002D hyphen
!2E U+002E period
!2F U+002F slash
!30 U+0030 zero
!31 U+0031 one
!32 U+0032 two
!33 U+0033 three
!34 U+0034 four
!35 U+0035 five
!36 U+0036 six
!37 U+0037 seven
!38 U+0038 eight
!39 U+0039 nine
!3A U+003A colon
!3B U+003B semicolon
!3C U+003C less
!3D U+003D equal
!3E U+003E greater
!3F U+003F question
!40 U+0040 at
!41 U+0041 A
!42 U+0042 B
!43 U+0043 C
!44 U+0044 D
!45 U+0045 E
!46 U+0046 F
!47 U+0047 G
!48 U+0048 H
!49 U+0049 I
!4A U+004A J
!4B U+004B K
!4C U+004C L
!4D U+004D M
!4E U+004E N
!4F U+004F O
!50 U+0050 P
!51 U+0051 Q
!52 U+0052 R
!53 U+0053 S
!54 U+0054 T
!55 U+0055 U
!56 U+0056 V
!57 U+0057 W
!58 U+0058 X
!59 U+0059 Y
!5A U+005A Z
!5B U+005B bracketleft
!5C U+005C backslash
!5D U+005D bracketright
!5E U+005E asciicircum
!5F U+005F underscore
!60 U+0060 grave
!61 U+0061 a
!62 U+0062 b
!63 U+0063 c
!64 U+0064 d
!65 U+0065 e
!66 U+0066 f
!67 U+0067 g
!68 U+0068 h
!69 U+0069 i
!6A U+006A j
!6B U+006B k
!6C U+006C l
!6D U+006D m
!6E U+006E n
!6F U+006F o
!70 U+0070 p
!71 U+0071 q
!72 U+0072 r
!73 U+0073 s
!74 U+0074 t
!75 U+0075 u
!76 U+0076 v
!77 U+0077 w
!78 U+0078 x
!79 U+0079 y
!7A U+007A z
!7B U+007B braceleft
!7C U+007C bar
!7D U+007D braceright
!7E U+007E asciitilde
!7F U+007F .notdef
!80 U+20AC Euro
!82 U+201A quotesinglbase
!83 U+0192 florin
!84 U+201E quotedblbase
!85 U+2026 ellipsis
!86 U+2020 dagger
!87 U+2021 daggerdbl
!88 U+02C6 circumflex
!89 U+2030 perthousand
!8A U+0160 Scaron
!8B U+2039 guilsinglleft
!8C U+0152 OE
!91 U+2018 quoteleft
!92 U+2019 quoteright
!93 U+201C quotedblleft
!94 U+201D quotedblright
!95 U+2022 bullet
!96 U+2013 endash
!97 U+2014 emdash
!98 U+02DC tilde
!99 U+2122 trademark
!9A U+0161 scaron
!9B U+203A guilsinglright
!9C U+0153 oe
!9F U+0178 Ydieresis
!A0 U+00A0 space
!A1 U+00A1 exclamdown
!A2 U+00A2 cent
!A3 U+00A3 sterling
!A4 U+00A4 currency
!A5 U+00A5 yen
!A6 U+00A6 brokenbar
!A7 U+00A7 section
!A8 U+00A8 dieresis
!A9 U+00A9 copyright
!AA U+00AA ordfeminine
!AB U+00AB guillemotleft
!AC U+00AC logicalnot
!AD U+00AD hyphen
!AE U+00AE registered
!AF U+00AF macron
!B0 U+00B0 degree
!B1 U+00B1 plusminus
!B2 U+00B2 twosuperior
!B3 U+00B3 threesuperior
!B4 U+00B4 acute
!B5 U+00B5 mu
!B6 U+00B6 paragraph
!B7 U+00B7 periodcentered
!B8 U+00B8 cedilla
!B9 U+00B9 onesuperior
!BA U+00BA ordmasculine
!BB U+00BB guillemotright
!BC U+00BC onequarter
!BD U+00BD onehalf
!BE U+00BE threequarters
!BF U+00BF questiondown
!C0 U+00C0 Agrave
!C1 U+00C1 Aacute
!C2 U+00C2 Acircumflex
!C3 U+00C3 Atilde
!C4 U+00C4 Adieresis
!C5 U+00C5 Aring
!C6 U+00C6 AE
!C7 U+00C7 Ccedilla
!C8 U+00C8 Egrave
!C9 U+00C9 Eacute
!CA U+00CA Ecircumflex
!CB U+00CB Edieresis
!CC U+00CC Igrave
!CD U+00CD Iacute
!CE U+00CE Icircumflex
!CF U+00CF Idieresis
!D0 U+011E Gbreve
!D1 U+00D1 Ntilde
!D2 U+00D2 Ograve
!D3 U+00D3 Oacute
!D4 U+00D4 Ocircumflex
!D5 U+00D5 Otilde
!D6 U+00D6 Odieresis
!D7 U+00D7 multiply
!D8 U+00D8 Oslash
!D9 U+00D9 Ugrave
!DA U+00DA Uacute
!DB U+00DB Ucircumflex
!DC U+00DC Udieresis
!DD U+0130 Idotaccent
!DE U+015E Scedilla
!DF U+00DF germandbls
!E0 U+00E0 agrave
!E1 U+00E1 aacute
!E2 U+00E2 acircumflex
!E3 U+00E3 atilde
!E4 U+00E4 adieresis
!E5 U+00E5 aring
!E6 U+00E6 ae
!E7 U+00E7 ccedilla
!E8 U+00E8 egrave
!E9 U+00E9 eacute
!EA U+00EA ecircumflex
!EB U+00EB edieresis
!EC U+00EC igrave
!ED U+00ED iacute
!EE U+00EE icircumflex
!EF U+00EF idieresis
!F0 U+011F gbreve
!F1 U+00F1 ntilde
!F2 U+00F2 ograve
!F3 U+00F3 oacute
!F4 U+00F4 ocircumflex
!F5 U+00F5 otilde
!F6 U+00F6 odieresis
!F7 U+00F7 divide
!F8 U+00F8 oslash
!F9 U+00F9 ugrave
!FA U+00FA uacute
!FB U+00FB ucircumflex
!FC U+00FC udieresis
!FD U+0131 dotlessi
!FE U+015F scedilla
!FF U+00FF ydieresis
!00 U+0000 .notdef
!01 U+0001 .notdef
!02 U+0002 .notdef
!03 U+0003 .notdef
!04 U+0004 .notdef
!05 U+0005 .notdef
!06 U+0006 .notdef
!07 U+0007 .notdef
!08 U+0008 .notdef
!09 U+0009 .notdef
!0A U+000A .notdef
!0B U+000B .notdef
!0C U+000C .notdef
!0D U+000D .notdef
!0E U+000E .notdef
!0F U+000F .notdef
!10 U+0010 .notdef
!11 U+0011 .notdef
!12 U+0012 .notdef
!13 U+0013 .notdef
!14 U+0014 .notdef
!15 U+0015 .notdef
!16 U+0016 .notdef
!17 U+0017 .notdef
!18 U+0018 .notdef
!19 U+0019 .notdef
!1A U+001A .notdef
!1B U+001B .notdef
!1C U+001C .notdef
!1D U+001D .notdef
!1E U+001E .notdef
!1F U+001F .notdef
!20 U+0020 space
!21 U+0021 exclam
!22 U+0022 quotedbl
!23 U+0023 numbersign
!24 U+0024 dollar
!25 U+0025 percent
!26 U+0026 ampersand
!27 U+0027 quotesingle
!28 U+0028 parenleft
!29 U+0029 parenright
!2A U+002A asterisk
!2B U+002B plus
!2C U+002C comma
!2D U+002D hyphen
!2E U+002E period
!2F U+002F slash
!30 U+0030 zero
!31 U+0031 one
!32 U+0032 two
!33 U+0033 three
!34 U+0034 four
!35 U+0035 five
!36 U+0036 six
!37 U+0037 seven
!38 U+0038 eight
!39 U+0039 nine
!3A U+003A colon
!3B U+003B semicolon
!3C U+003C less
!3D U+003D equal
!3E U+003E greater
!3F U+003F question
!40 U+0040 at
!41 U+0041 A
!42 U+0042 B
!43 U+0043 C
!44 U+0044 D
!45 U+0045 E
!46 U+0046 F
!47 U+0047 G
!48 U+0048 H
!49 U+0049 I
!4A U+004A J
!4B U+004B K
!4C U+004C L
!4D U+004D M
!4E U+004E N
!4F U+004F O
!50 U+0050 P
!51 U+0051 Q
!52 U+0052 R
!53 U+0053 S
!54 U+0054 T
!55 U+0055 U
!56 U+0056 V
!57 U+0057 W
!58 U+0058 X
!59 U+0059 Y
!5A U+005A Z
!5B U+005B bracketleft
!5C U+005C backslash
!5D U+005D bracketright
!5E U+005E asciicircum
!5F U+005F underscore
!60 U+0060 grave
!61 U+0061 a
!62 U+0062 b
!63 U+0063 c
!64 U+0064 d
!65 U+0065 e
!66 U+0066 f
!67 U+0067 g
!68 U+0068 h
!69 U+0069 i
!6A U+006A j
!6B U+006B k
!6C U+006C l
!6D U+006D m
!6E U+006E n
!6F U+006F o
!70 U+0070 p
!71 U+0071 q
!72 U+0072 r
!73 U+0073 s
!74 U+0074 t
!75 U+0075 u
!76 U+0076 v
!77 U+0077 w
!78 U+0078 x
!79 U+0079 y
!7A U+007A z
!7B U+007B braceleft
!7C U+007C bar
!7D U+007D braceright
!7E U+007E asciitilde
!7F U+007F .notdef
!80 U+20AC Euro
!82 U+201A quotesinglbase
!83 U+0192 florin
!84 U+201E quotedblbase
!85 U+2026 ellipsis
!86 U+2020 dagger
!87 U+2021 daggerdbl
!88 U+02C6 circumflex
!89 U+2030 perthousand
!8B U+2039 guilsinglleft
!91 U+2018 quoteleft
!92 U+2019 quoteright
!93 U+201C quotedblleft
!94 U+201D quotedblright
!95 U+2022 bullet
!96 U+2013 endash
!97 U+2014 emdash
!98 U+02DC tilde
!99 U+2122 trademark
!9B U+203A guilsinglright
!A0 U+00A0 space
!A1 U+00A1 exclamdown
!A2 U+00A2 cent
!A3 U+00A3 sterling
!A4 U+20AA afii57636
!A5 U+00A5 yen
!A6 U+00A6 brokenbar
!A7 U+00A7 section
!A8 U+00A8 dieresis
!A9 U+00A9 copyright
!AA U+00D7 multiply
!AB U+00AB guillemotleft
!AC U+00AC logicalnot
!AD U+00AD sfthyphen
!AE U+00AE registered
!AF U+00AF macron
!B0 U+00B0 degree
!B1 U+00B1 plusminus
!B2 U+00B2 twosuperior
!B3 U+00B3 threesuperior
!B4 U+00B4 acute
!B5 U+00B5 mu
!B6 U+00B6 paragraph
!B7 U+00B7 middot
!B8 U+00B8 cedilla
!B9 U+00B9 onesuperior
!BA U+00F7 divide
!BB U+00BB guillemotright
!BC U+00BC onequarter
!BD U+00BD onehalf
!BE U+00BE threequarters
!BF U+00BF questiondown
!C0 U+05B0 afii57799
!C1 U+05B1 afii57801
!C2 U+05B2 afii57800
!C3 U+05B3 afii57802
!C4 U+05B4 afii57793
!C5 U+05B5 afii57794
!C6 U+05B6 afii57795
!C7 U+05B7 afii57798
!C8 U+05B8 afii57797
!C9 U+05B9 afii57806
!CB U+05BB afii57796
!CC U+05BC afii57807
!CD U+05BD afii57839
!CE U+05BE afii57645
!CF U+05BF afii57841
!D0 U+05C0 afii57842
!D1 U+05C1 afii57804
!D2 U+05C2 afii57803
!D3 U+05C3 afii57658
!D4 U+05F0 afii57716
!D5 U+05F1 afii57717
!D6 U+05F2 afii57718
!D7 U+05F3 gereshhebrew
!D8 U+05F4 gershayimhebrew
!E0 U+05D0 afii57664
!E1 U+05D1 afii57665
!E2 U+05D2 afii57666
!E3 U+05D3 afii57667
!E4 U+05D4 afii57668
!E5 U+05D5 afii57669
!E6 U+05D6 afii57670
!E7 U+05D7 afii57671
!E8 U+05D8 afii57672
!E9 U+05D9 afii57673
!EA U+05DA afii57674
!EB U+05DB afii57675
!EC U+05DC afii57676
!ED U+05DD afii57677
!EE U+05DE afii57678
!EF U+05DF afii57679
!F0 U+05E0 afii57680
!F1 U+05E1 afii57681
!F2 U+05E2 afii57682
!F3 U+05E3 afii57683
!F4 U+05E4 afii57684
!F5 U+05E5 afii57685
!F6 U+05E6 afii57686
!F7 U+05E7 afii57687
!F8 U+05E8 afii57688
!F9 U+05E9 afii57689
!FA U+05EA afii57690
!FD U+200E afii299
!FE U+200F afii300
!00 U+0000 .notdef
!01 U+0001 .notdef
!02 U+0002 .notdef
!03 U+0003 .notdef
!04 U+0004 .notdef
!05 U+0005 .notdef
!06 U+0006 .notdef
!07 U+0007 .notdef
!08 U+0008 .notdef
!09 U+0009 .notdef
!0A U+000A .notdef
!0B U+000B .notdef
!0C U+000C .notdef
!0D U+000D .notdef
!0E U+000E .notdef
!0F U+000F .notdef
!10 U+0010 .notdef
!11 U+0011 .notdef
!12 U+0012 .notdef
!13 U+0013 .notdef
!14 U+0014 .notdef
!15 U+0015 .notdef
!16 U+0016 .notdef
!17 U+0017 .notdef
!18 U+0018 .notdef
!19 U+0019 .notdef
!1A U+001A .notdef
!1B U+001B .notdef
!1C U+001C .notdef
!1D U+001D .notdef
!1E U+001E .notdef
!1F U+001F .notdef
!20 U+0020 space
!21 U+0021 exclam
!22 U+0022 quotedbl
!23 U+0023 numbersign
!24 U+0024 dollar
!25 U+0025 percent
!26 U+0026 ampersand
!27 U+0027 quotesingle
!28 U+0028 parenleft
!29 U+0029 parenright
!2A U+002A asterisk
!2B U+002B plus
!2C U+002C comma
!2D U+002D hyphen
!2E U+002E period
!2F U+002F slash
!30 U+0030 zero
!31 U+0031 one
!32 U+0032 two
!33 U+0033 three
!34 U+0034 four
!35 U+0035 five
!36 U+0036 six
!37 U+0037 seven
!38 U+0038 eight
!39 U+0039 nine
!3A U+003A colon
!3B U+003B semicolon
!3C U+003C less
!3D U+003D equal
!3E U+003E greater
!3F U+003F question
!40 U+0040 at
!41 U+0041 A
!42 U+0042 B
!43 U+0043 C
!44 U+0044 D
!45 U+0045 E
!46 U+0046 F
!47 U+0047 G
!48 U+0048 H
!49 U+0049 I
!4A U+004A J
!4B U+004B K
!4C U+004C L
!4D U+004D M
!4E U+004E N
!4F U+004F O
!50 U+0050 P
!51 U+0051 Q
!52 U+0052 R
!53 U+0053 S
!54 U+0054 T
!55 U+0055 U
!56 U+0056 V
!57 U+0057 W
!58 U+0058 X
!59 U+0059 Y
!5A U+005A Z
!5B U+005B bracketleft
!5C U+005C backslash
!5D U+005D bracketright
!5E U+005E asciicircum
!5F U+005F underscore
!60 U+0060 grave
!61 U+0061 a
!62 U+0062 b
!63 U+0063 c
!64 U+0064 d
!65 U+0065 e
!66 U+0066 f
!67 U+0067 g
!68 U+0068 h
!69 U+0069 i
!6A U+006A j
!6B U+006B k
!6C U+006C l
!6D U+006D m
!6E U+006E n
!6F U+006F o
!70 U+0070 p
!71 U+0071 q
!72 U+0072 r
!73 U+0073 s
!74 U+0074 t
!75 U+0075 u
!76 U+0076 v
!77 U+0077 w
!78 U+0078 x
!79 U+0079 y
!7A U+007A z
!7B U+007B braceleft
!7C U+007C bar
!7D U+007D braceright
!7E U+007E asciitilde
!7F U+007F .notdef
!80 U+20AC Euro
!82 U+201A quotesinglbase
!84 U+201E quotedblbase
!85 U+2026 ellipsis
!86 U+2020 dagger
!87 U+2021 daggerdbl
!89 U+2030 perthousand
!8B U+2039 guilsinglleft
!8D U+00A8 dieresis
!8E U+02C7 caron
!8F U+00B8 cedilla
!91 U+2018 quoteleft
!92 U+2019 quoteright
!93 U+201C quotedblleft
!94 U+201D quotedblright
!95 U+2022 bullet
!96 U+2013 endash
!97 U+2014 emdash
!99 U+2122 trademark
!9B U+203A guilsinglright
!9D U+00AF macron
!9E U+02DB ogonek
!A0 U+00A0 space
!A2 U+00A2 cent
!A3 U+00A3 sterling
!A4 U+00A4 currency
!A6 U+00A6 brokenbar
!A7 U+00A7 section
!A8 U+00D8 Oslash
!A9 U+00A9 copyright
!AA U+0156 Rcommaaccent
!AB U+00AB guillemotleft
!AC U+00AC logicalnot
!AD U+00AD hyphen
!AE U+00AE registered
!AF U+00C6 AE
!B0 U+00B0 degree
!B1 U+00B1 plusminus
!B2 U+00B2 twosuperior
!B3 U+00B3 threesuperior
!B4 U+00B4 acute
!B5 U+00B5 mu
!B6 U+00B6 paragraph
!B7 U+00B7 periodcentered
!B8 U+00F8 oslash
!B9 U+00B9 onesuperior
!BA U+0157 rcommaaccent
!BB U+00BB guillemotright
!BC U+00BC onequarter
!BD U+00BD onehalf
!BE U+00BE threequarters
!BF U+00E6 ae
!C0 U+0104 Aogonek
!C1 U+012E Iogonek
!C2 U+0100 Amacron
!C3 U+0106 Cacute
!C4 U+00C4 Adieresis
!C5 U+00C5 Aring
!C6 U+0118 Eogonek
!C7 U+0112 Emacron
!C8 U+010C Ccaron
!C9 U+00C9 Eacute
!CA U+0179 Zacute
!CB U+0116 Edotaccent
!CC U+0122 Gcommaaccent
!CD U+0136 Kcommaaccent
!CE U+012A Imacron
!CF U+013B Lcommaaccent
!D0 U+0160 Scaron
!D1 U+0143 Nacute
!D2 U+0145 Ncommaaccent
!D3 U+00D3 Oacute
!D4 U+014C Omacron
!D5 U+00D5 Otilde
!D6 U+00D6 Odieresis
!D7 U+00D7 multiply
!D8 U+0172 Uogonek
!D9 U+0141 Lslash
!DA U+015A Sacute
!DB U+016A Umacron
!DC U+00DC Udieresis
!DD U+017B Zdotaccent
!DE U+017D Zcaron
!DF U+00DF germandbls
!E0 U+0105 aogonek
!E1 U+012F iogonek
!E2 U+0101 amacron
!E3 U+0107 cacute
!E4 U+00E4 adieresis
!E5 U+00E5 aring
!E6 U+0119 eogonek
!E7 U+0113 emacron
!E8 U+010D ccaron
!E9 U+00E9 eacute
!EA U+017A zacute
!EB U+0117 edotaccent
!EC U+0123 gcommaaccent
!ED U+0137 kcommaaccent
!EE U+012B imacron
!EF U+013C lcommaaccent
!F0 U+0161 scaron
!F1 U+0144 nacute
!F2 U+0146 ncommaaccent
!F3 U+00F3 oacute
!F4 U+014D omacron
!F5 U+00F5 otilde
!F6 U+00F6 odieresis
!F7 U+00F7 divide
!F8 U+0173 uogonek
!F9 U+0142 lslash
!FA U+015B sacute
!FB U+016B umacron
!FC U+00FC udieresis
!FD U+017C zdotaccent
!FE U+017E zcaron
!FF U+02D9 dotaccent
!00 U+0000 .notdef
!01 U+0001 .notdef
!02 U+0002 .notdef
!03 U+0003 .notdef
!04 U+0004 .notdef
!05 U+0005 .notdef
!06 U+0006 .notdef
!07 U+0007 .notdef
!08 U+0008 .notdef
!09 U+0009 .notdef
!0A U+000A .notdef
!0B U+000B .notdef
!0C U+000C .notdef
!0D U+000D .notdef
!0E U+000E .notdef
!0F U+000F .notdef
!10 U+0010 .notdef
!11 U+0011 .notdef
!12 U+0012 .notdef
!13 U+0013 .notdef
!14 U+0014 .notdef
!15 U+0015 .notdef
!16 U+0016 .notdef
!17 U+0017 .notdef
!18 U+0018 .notdef
!19 U+0019 .notdef
!1A U+001A .notdef
!1B U+001B .notdef
!1C U+001C .notdef
!1D U+001D .notdef
!1E U+001E .notdef
!1F U+001F .notdef
!20 U+0020 space
!21 U+0021 exclam
!22 U+0022 quotedbl
!23 U+0023 numbersign
!24 U+0024 dollar
!25 U+0025 percent
!26 U+0026 ampersand
!27 U+0027 quotesingle
!28 U+0028 parenleft
!29 U+0029 parenright
!2A U+002A asterisk
!2B U+002B plus
!2C U+002C comma
!2D U+002D hyphen
!2E U+002E period
!2F U+002F slash
!30 U+0030 zero
!31 U+0031 one
!32 U+0032 two
!33 U+0033 three
!34 U+0034 four
!35 U+0035 five
!36 U+0036 six
!37 U+0037 seven
!38 U+0038 eight
!39 U+0039 nine
!3A U+003A colon
!3B U+003B semicolon
!3C U+003C less
!3D U+003D equal
!3E U+003E greater
!3F U+003F question
!40 U+0040 at
!41 U+0041 A
!42 U+0042 B
!43 U+0043 C
!44 U+0044 D
!45 U+0045 E
!46 U+0046 F
!47 U+0047 G
!48 U+0048 H
!49 U+0049 I
!4A U+004A J
!4B U+004B K
!4C U+004C L
!4D U+004D M
!4E U+004E N
!4F U+004F O
!50 U+0050 P
!51 U+0051 Q
!52 U+0052 R
!53 U+0053 S
!54 U+0054 T
!55 U+0055 U
!56 U+0056 V
!57 U+0057 W
!58 U+0058 X
!59 U+0059 Y
!5A U+005A Z
!5B U+005B bracketleft
!5C U+005C backslash
!5D U+005D bracketright
!5E U+005E asciicircum
!5F U+005F underscore
!60 U+0060 grave
!61 U+0061 a
!62 U+0062 b
!63 U+0063 c
!64 U+0064 d
!65 U+0065 e
!66 U+0066 f
!67 U+0067 g
!68 U+0068 h
!69 U+0069 i
!6A U+006A j
!6B U+006B k
!6C U+006C l
!6D U+006D m
!6E U+006E n
!6F U+006F o
!70 U+0070 p
!71 U+0071 q
!72 U+0072 r
!73 U+0073 s
!74 U+0074 t
!75 U+0075 u
!76 U+0076 v
!77 U+0077 w
!78 U+0078 x
!79 U+0079 y
!7A U+007A z
!7B U+007B braceleft
!7C U+007C bar
!7D U+007D braceright
!7E U+007E asciitilde
!7F U+007F .notdef
!80 U+20AC Euro
!82 U+201A quotesinglbase
!83 U+0192 florin
!84 U+201E quotedblbase
!85 U+2026 ellipsis
!86 U+2020 dagger
!87 U+2021 daggerdbl
!88 U+02C6 circumflex
!89 U+2030 perthousand
!8B U+2039 guilsinglleft
!8C U+0152 OE
!91 U+2018 quoteleft
!92 U+2019 quoteright
!93 U+201C quotedblleft
!94 U+201D quotedblright
!95 U+2022 bullet
!96 U+2013 endash
!97 U+2014 emdash
!98 U+02DC tilde
!99 U+2122 trademark
!9B U+203A guilsinglright
!9C U+0153 oe
!9F U+0178 Ydieresis
!A0 U+00A0 space
!A1 U+00A1 exclamdown
!A2 U+00A2 cent
!A3 U+00A3 sterling
!A4 U+00A4 currency
!A5 U+00A5 yen
!A6 U+00A6 brokenbar
!A7 U+00A7 section
!A8 U+00A8 dieresis
!A9 U+00A9 copyright
!AA U+00AA ordfeminine
!AB U+00AB guillemotleft
!AC U+00AC logicalnot
!AD U+00AD hyphen
!AE U+00AE registered
!AF U+00AF macron
!B0 U+00B0 degree
!B1 U+00B1 plusminus
!B2 U+00B2 twosuperior
!B3 U+00B3 threesuperior
!B4 U+00B4 acute
!B5 U+00B5 mu
!B6 U+00B6 paragraph
!B7 U+00B7 periodcentered
!B8 U+00B8 cedilla
!B9 U+00B9 onesuperior
!BA U+00BA ordmasculine
!BB U+00BB guillemotright
!BC U+00BC onequarter
!BD U+00BD onehalf
!BE U+00BE threequarters
!BF U+00BF questiondown
!C0 U+00C0 Agrave
!C1 U+00C1 Aacute
!C2 U+00C2 Acircumflex
!C3 U+0102 Abreve
!C4 U+00C4 Adieresis
!C5 U+00C5 Aring
!C6 U+00C6 AE
!C7 U+00C7 Ccedilla
!C8 U+00C8 Egrave
!C9 U+00C9 Eacute
!CA U+00CA Ecircumflex
!CB U+00CB Edieresis
!CC U+0300 gravecomb
!CD U+00CD Iacute
!CE U+00CE Icircumflex
!CF U+00CF Idieresis
!D0 U+0110 Dcroat
!D1 U+00D1 Ntilde
!D2 U+0309 hookabovecomb
!D3 U+00D3 Oacute
!D4 U+00D4 Ocircumflex
!D5 U+01A0 Ohorn
!D6 U+00D6 Odieresis
!D7 U+00D7 multiply
!D8 U+00D8 Oslash
!D9 U+00D9 Ugrave
!DA U+00DA Uacute
!DB U+00DB Ucircumflex
!DC U+00DC Udieresis
!DD U+01AF Uhorn
!DE U+0303 tildecomb
!DF U+00DF germandbls
!E0 U+00E0 agrave
!E1 U+00E1 aacute
!E2 U+00E2 acircumflex
!E3 U+0103 abreve
!E4 U+00E4 adieresis
!E5 U+00E5 aring
!E6 U+00E6 ae
!E7 U+00E7 ccedilla
!E8 U+00E8 egrave
!E9 U+00E9 eacute
!EA U+00EA ecircumflex
!EB U+00EB edieresis
!EC U+0301 acutecomb
!ED U+00ED iacute
!EE U+00EE icircumflex
!EF U+00EF idieresis
!F0 U+0111 dcroat
!F1 U+00F1 ntilde
!F2 U+0323 dotbelowcomb
!F3 U+00F3 oacute
!F4 U+00F4 ocircumflex
!F5 U+01A1 ohorn
!F6 U+00F6 odieresis
!F7 U+00F7 divide
!F8 U+00F8 oslash
!F9 U+00F9 ugrave
!FA U+00FA uacute
!FB U+00FB ucircumflex
!FC U+00FC udieresis
!FD U+01B0 uhorn
!FE U+20AB dong
!FF U+00FF ydieresis
!00 U+0000 .notdef
!01 U+0001 .notdef
!02 U+0002 .notdef
!03 U+0003 .notdef
!04 U+0004 .notdef
!05 U+0005 .notdef
!06 U+0006 .notdef
!07 U+0007 .notdef
!08 U+0008 .notdef
!09 U+0009 .notdef
!0A U+000A .notdef
!0B U+000B .notdef
!0C U+000C .notdef
!0D U+000D .notdef
!0E U+000E .notdef
!0F U+000F .notdef
!10 U+0010 .notdef
!11 U+0011 .notdef
!12 U+0012 .notdef
!13 U+0013 .notdef
!14 U+0014 .notdef
!15 U+0015 .notdef
!16 U+0016 .notdef
!17 U+0017 .notdef
!18 U+0018 .notdef
!19 U+0019 .notdef
!1A U+001A .notdef
!1B U+001B .notdef
!1C U+001C .notdef
!1D U+001D .notdef
!1E U+001E .notdef
!1F U+001F .notdef
!20 U+0020 space
!21 U+0021 exclam
!22 U+0022 quotedbl
!23 U+0023 numbersign
!24 U+0024 dollar
!25 U+0025 percent
!26 U+0026 ampersand
!27 U+0027 quotesingle
!28 U+0028 parenleft
!29 U+0029 parenright
!2A U+002A asterisk
!2B U+002B plus
!2C U+002C comma
!2D U+002D hyphen
!2E U+002E period
!2F U+002F slash
!30 U+0030 zero
!31 U+0031 one
!32 U+0032 two
!33 U+0033 three
!34 U+0034 four
!35 U+0035 five
!36 U+0036 six
!37 U+0037 seven
!38 U+0038 eight
!39 U+0039 nine
!3A U+003A colon
!3B U+003B semicolon
!3C U+003C less
!3D U+003D equal
!3E U+003E greater
!3F U+003F question
!40 U+0040 at
!41 U+0041 A
!42 U+0042 B
!43 U+0043 C
!44 U+0044 D
!45 U+0045 E
!46 U+0046 F
!47 U+0047 G
!48 U+0048 H
!49 U+0049 I
!4A U+004A J
!4B U+004B K
!4C U+004C L
!4D U+004D M
!4E U+004E N
!4F U+004F O
!50 U+0050 P
!51 U+0051 Q
!52 U+0052 R
!53 U+0053 S
!54 U+0054 T
!55 U+0055 U
!56 U+0056 V
!57 U+0057 W
!58 U+0058 X
!59 U+0059 Y
!5A U+005A Z
!5B U+005B bracketleft
!5C U+005C backslash
!5D U+005D bracketright
!5E U+005E asciicircum
!5F U+005F underscore
!60 U+0060 grave
!61 U+0061 a
!62 U+0062 b
!63 U+0063 c
!64 U+0064 d
!65 U+0065 e
!66 U+0066 f
!67 U+0067 g
!68 U+0068 h
!69 U+0069 i
!6A U+006A j
!6B U+006B k
!6C U+006C l
!6D U+006D m
!6E U+006E n
!6F U+006F o
!70 U+0070 p
!71 U+0071 q
!72 U+0072 r
!73 U+0073 s
!74 U+0074 t
!75 U+0075 u
!76 U+0076 v
!77 U+0077 w
!78 U+0078 x
!79 U+0079 y
!7A U+007A z
!7B U+007B braceleft
!7C U+007C bar
!7D U+007D braceright
!7E U+007E asciitilde
!7F U+007F .notdef
!80 U+20AC Euro
!85 U+2026 ellipsis
!91 U+2018 quoteleft
!92 U+2019 quoteright
!93 U+201C quotedblleft
!94 U+201D quotedblright
!95 U+2022 bullet
!96 U+2013 endash
!97 U+2014 emdash
!A0 U+00A0 space
!A1 U+0E01 kokaithai
!A2 U+0E02 khokhaithai
!A3 U+0E03 khokhuatthai
!A4 U+0E04 khokhwaithai
!A5 U+0E05 khokhonthai
!A6 U+0E06 khorakhangthai
!A7 U+0E07 ngonguthai
!A8 U+0E08 chochanthai
!A9 U+0E09 chochingthai
!AA U+0E0A chochangthai
!AB U+0E0B sosothai
!AC U+0E0C chochoethai
!AD U+0E0D yoyingthai
!AE U+0E0E dochadathai
!AF U+0E0F topatakthai
!B0 U+0E10 thothanthai
!B1 U+0E11 thonangmonthothai
!B2 U+0E12 thophuthaothai
!B3 U+0E13 nonenthai
!B4 U+0E14 dodekthai
!B5 U+0E15 totaothai
!B6 U+0E16 thothungthai
!B7 U+0E17 thothahanthai
!B8 U+0E18 thothongthai
!B9 U+0E19 nonuthai
!BA U+0E1A bobaimaithai
!BB U+0E1B poplathai
!BC U+0E1C phophungthai
!BD U+0E1D fofathai
!BE U+0E1E phophanthai
!BF U+0E1F fofanthai
!C0 U+0E20 phosamphaothai
!C1 U+0E21 momathai
!C2 U+0E22 yoyakthai
!C3 U+0E23 roruathai
!C4 U+0E24 ruthai
!C5 U+0E25 lolingthai
!C6 U+0E26 luthai
!C7 U+0E27 wowaenthai
!C8 U+0E28 sosalathai
!C9 U+0E29 sorusithai
!CA U+0E2A sosuathai
!CB U+0E2B hohipthai
!CC U+0E2C lochulathai
!CD U+0E2D oangthai
!CE U+0E2E honokhukthai
!CF U+0E2F paiyannoithai
!D0 U+0E30 saraathai
!D1 U+0E31 maihanakatthai
!D2 U+0E32 saraaathai
!D3 U+0E33 saraamthai
!D4 U+0E34 saraithai
!D5 U+0E35 saraiithai
!D6 U+0E36 sarauethai
!D7 U+0E37 saraueethai
!D8 U+0E38 sarauthai
!D9 U+0E39 sarauuthai
!DA U+0E3A phinthuthai
!DF U+0E3F bahtthai
!E0 U+0E40 saraethai
!E1 U+0E41 saraaethai
!E2 U+0E42 saraothai
!E3 U+0E43 saraaimaimuanthai
!E4 U+0E44 saraaimaimalaithai
!E5 U+0E45 lakkhangyaothai
!E6 U+0E46 maiyamokthai
!E7 U+0E47 maitaikhuthai
!E8 U+0E48 maiekthai
!E9 U+0E49 maithothai
!EA U+0E4A maitrithai
!EB U+0E4B maichattawathai
!EC U+0E4C thanthakhatthai
!ED U+0E4D nikhahitthai
!EE U+0E4E yamakkanthai
!EF U+0E4F fongmanthai
!F0 U+0E50 zerothai
!F1 U+0E51 onethai
!F2 U+0E52 twothai
!F3 U+0E53 threethai
!F4 U+0E54 fourthai
!F5 U+0E55 fivethai
!F6 U+0E56 sixthai
!F7 U+0E57 seventhai
!F8 U+0E58 eightthai
!F9 U+0E59 ninethai
!FA U+0E5A angkhankhuthai
!FB U+0E5B khomutthai
!00 U+0000 .notdef
!01 U+0001 .notdef
!02 U+0002 .notdef
!03 U+0003 .notdef
!04 U+0004 .notdef
!05 U+0005 .notdef
!06 U+0006 .notdef
!07 U+0007 .notdef
!08 U+0008 .notdef
!09 U+0009 .notdef
!0A U+000A .notdef
!0B U+000B .notdef
!0C U+000C .notdef
!0D U+000D .notdef
!0E U+000E .notdef
!0F U+000F .notdef
!10 U+0010 .notdef
!11 U+0011 .notdef
!12 U+0012 .notdef
!13 U+0013 .notdef
!14 U+0014 .notdef
!15 U+0015 .notdef
!16 U+0016 .notdef
!17 U+0017 .notdef
!18 U+0018 .notdef
!19 U+0019 .notdef
!1A U+001A .notdef
!1B U+001B .notdef
!1C U+001C .notdef
!1D U+001D .notdef
!1E U+001E .notdef
!1F U+001F .notdef
!20 U+0020 space
!21 U+0021 exclam
!22 U+0022 quotedbl
!23 U+0023 numbersign
!24 U+0024 dollar
!25 U+0025 percent
!26 U+0026 ampersand
!27 U+0027 quotesingle
!28 U+0028 parenleft
!29 U+0029 parenright
!2A U+002A asterisk
!2B U+002B plus
!2C U+002C comma
!2D U+002D hyphen
!2E U+002E period
!2F U+002F slash
!30 U+0030 zero
!31 U+0031 one
!32 U+0032 two
!33 U+0033 three
!34 U+0034 four
!35 U+0035 five
!36 U+0036 six
!37 U+0037 seven
!38 U+0038 eight
!39 U+0039 nine
!3A U+003A colon
!3B U+003B semicolon
!3C U+003C less
!3D U+003D equal
!3E U+003E greater
!3F U+003F question
!40 U+0040 at
!41 U+0041 A
!42 U+0042 B
!43 U+0043 C
!44 U+0044 D
!45 U+0045 E
!46 U+0046 F
!47 U+0047 G
!48 U+0048 H
!49 U+0049 I
!4A U+004A J
!4B U+004B K
!4C U+004C L
!4D U+004D M
!4E U+004E N
!4F U+004F O
!50 U+0050 P
!51 U+0051 Q
!52 U+0052 R
!53 U+0053 S
!54 U+0054 T
!55 U+0055 U
!56 U+0056 V
!57 U+0057 W
!58 U+0058 X
!59 U+0059 Y
!5A U+005A Z
!5B U+005B bracketleft
!5C U+005C backslash
!5D U+005D bracketright
!5E U+005E asciicircum
!5F U+005F underscore
!60 U+0060 grave
!61 U+0061 a
!62 U+0062 b
!63 U+0063 c
!64 U+0064 d
!65 U+0065 e
!66 U+0066 f
!67 U+0067 g
!68 U+0068 h
!69 U+0069 i
!6A U+006A j
!6B U+006B k
!6C U+006C l
!6D U+006D m
!6E U+006E n
!6F U+006F o
!70 U+0070 p
!71 U+0071 q
!72 U+0072 r
!73 U+0073 s
!74 U+0074 t
!75 U+0075 u
!76 U+0076 v
!77 U+0077 w
!78 U+0078 x
!79 U+0079 y
!7A U+007A z
!7B U+007B braceleft
!7C U+007C bar
!7D U+007D braceright
!7E U+007E asciitilde
!7F U+007F .notdef
!80 U+0080 .notdef
!81 U+0081 .notdef
!82 U+0082 .notdef
!83 U+0083 .notdef
!84 U+0084 .notdef
!85 U+0085 .notdef
!86 U+0086 .notdef
!87 U+0087 .notdef
!88 U+0088 .notdef
!89 U+0089 .notdef
!8A U+008A .notdef
!8B U+008B .notdef
!8C U+008C .notdef
!8D U+008D .notdef
!8E U+008E .notdef
!8F U+008F .notdef
!90 U+0090 .notdef
!91 U+0091 .notdef
!92 U+0092 .notdef
!93 U+0093 .notdef
!94 U+0094 .notdef
!95 U+0095 .notdef
!96 U+0096 .notdef
!97 U+0097 .notdef
!98 U+0098 .notdef
!99 U+0099 .notdef
!9A U+009A .notdef
!9B U+009B .notdef
!9C U+009C .notdef
!9D U+009D .notdef
!9E U+009E .notdef
!9F U+009F .notdef
!A0 U+00A0 space
!A1 U+00A1 exclamdown
!A2 U+00A2 cent
!A3 U+00A3 sterling
!A4 U+00A4 currency
!A5 U+00A5 yen
!A6 U+00A6 brokenbar
!A7 U+00A7 section
!A8 U+00A8 dieresis
!A9 U+00A9 copyright
!AA U+00AA ordfeminine
!AB U+00AB guillemotleft
!AC U+00AC logicalnot
!AD U+00AD hyphen
!AE U+00AE registered
!AF U+00AF macron
!B0 U+00B0 degree
!B1 U+00B1 plusminus
!B2 U+00B2 twosuperior
!B3 U+00B3 threesuperior
!B4 U+00B4 acute
!B5 U+00B5 mu
!B6 U+00B6 paragraph
!B7 U+00B7 periodcentered
!B8 U+00B8 cedilla
!B9 U+00B9 onesuperior
!BA U+00BA ordmasculine
!BB U+00BB guillemotright
!BC U+00BC onequarter
!BD U+00BD onehalf
!BE U+00BE threequarters
!BF U+00BF questiondown
!C0 U+00C0 Agrave
!C1 U+00C1 Aacute
!C2 U+00C2 Acircumflex
!C3 U+00C3 Atilde
!C4 U+00C4 Adieresis
!C5 U+00C5 Aring
!C6 U+00C6 AE
!C7 U+00C7 Ccedilla
!C8 U+00C8 Egrave
!C9 U+00C9 Eacute
!CA U+00CA Ecircumflex
!CB U+00CB Edieresis
!CC U+00CC Igrave
!CD U+00CD Iacute
!CE U+00CE Icircumflex
!CF U+00CF Idieresis
!D0 U+00D0 Eth
!D1 U+00D1 Ntilde
!D2 U+00D2 Ograve
!D3 U+00D3 Oacute
!D4 U+00D4 Ocircumflex
!D5 U+00D5 Otilde
!D6 U+00D6 Odieresis
!D7 U+00D7 multiply
!D8 U+00D8 Oslash
!D9 U+00D9 Ugrave
!DA U+00DA Uacute
!DB U+00DB Ucircumflex
!DC U+00DC Udieresis
!DD U+00DD Yacute
!DE U+00DE Thorn
!DF U+00DF germandbls
!E0 U+00E0 agrave
!E1 U+00E1 aacute
!E2 U+00E2 acircumflex
!E3 U+00E3 atilde
!E4 U+00E4 adieresis
!E5 U+00E5 aring
!E6 U+00E6 ae
!E7 U+00E7 ccedilla
!E8 U+00E8 egrave
!E9 U+00E9 eacute
!EA U+00EA ecircumflex
!EB U+00EB edieresis
!EC U+00EC igrave
!ED U+00ED iacute
!EE U+00EE icircumflex
!EF U+00EF idieresis
!F0 U+00F0 eth
!F1 U+00F1 ntilde
!F2 U+00F2 ograve
!F3 U+00F3 oacute
!F4 U+00F4 ocircumflex
!F5 U+00F5 otilde
!F6 U+00F6 odieresis
!F7 U+00F7 divide
!F8 U+00F8 oslash
!F9 U+00F9 ugrave
!FA U+00FA uacute
!FB U+00FB ucircumflex
!FC U+00FC udieresis
!FD U+00FD yacute
!FE U+00FE thorn
!FF U+00FF ydieresis
!00 U+0000 .notdef
!01 U+0001 .notdef
!02 U+0002 .notdef
!03 U+0003 .notdef
!04 U+0004 .notdef
!05 U+0005 .notdef
!06 U+0006 .notdef
!07 U+0007 .notdef
!08 U+0008 .notdef
!09 U+0009 .notdef
!0A U+000A .notdef
!0B U+000B .notdef
!0C U+000C .notdef
!0D U+000D .notdef
!0E U+000E .notdef
!0F U+000F .notdef
!10 U+0010 .notdef
!11 U+0011 .notdef
!12 U+0012 .notdef
!13 U+0013 .notdef
!14 U+0014 .notdef
!15 U+0015 .notdef
!16 U+0016 .notdef
!17 U+0017 .notdef
!18 U+0018 .notdef
!19 U+0019 .notdef
!1A U+001A .notdef
!1B U+001B .notdef
!1C U+001C .notdef
!1D U+001D .notdef
!1E U+001E .notdef
!1F U+001F .notdef
!20 U+0020 space
!21 U+0021 exclam
!22 U+0022 quotedbl
!23 U+0023 numbersign
!24 U+0024 dollar
!25 U+0025 percent
!26 U+0026 ampersand
!27 U+0027 quotesingle
!28 U+0028 parenleft
!29 U+0029 parenright
!2A U+002A asterisk
!2B U+002B plus
!2C U+002C comma
!2D U+002D hyphen
!2E U+002E period
!2F U+002F slash
!30 U+0030 zero
!31 U+0031 one
!32 U+0032 two
!33 U+0033 three
!34 U+0034 four
!35 U+0035 five
!36 U+0036 six
!37 U+0037 seven
!38 U+0038 eight
!39 U+0039 nine
!3A U+003A colon
!3B U+003B semicolon
!3C U+003C less
!3D U+003D equal
!3E U+003E greater
!3F U+003F question
!40 U+0040 at
!41 U+0041 A
!42 U+0042 B
!43 U+0043 C
!44 U+0044 D
!45 U+0045 E
!46 U+0046 F
!47 U+0047 G
!48 U+0048 H
!49 U+0049 I
!4A U+004A J
!4B U+004B K
!4C U+004C L
!4D U+004D M
!4E U+004E N
!4F U+004F O
!50 U+0050 P
!51 U+0051 Q
!52 U+0052 R
!53 U+0053 S
!54 U+0054 T
!55 U+0055 U
!56 U+0056 V
!57 U+0057 W
!58 U+0058 X
!59 U+0059 Y
!5A U+005A Z
!5B U+005B bracketleft
!5C U+005C backslash
!5D U+005D bracketright
!5E U+005E asciicircum
!5F U+005F underscore
!60 U+0060 grave
!61 U+0061 a
!62 U+0062 b
!63 U+0063 c
!64 U+0064 d
!65 U+0065 e
!66 U+0066 f
!67 U+0067 g
!68 U+0068 h
!69 U+0069 i
!6A U+006A j
!6B U+006B k
!6C U+006C l
!6D U+006D m
!6E U+006E n
!6F U+006F o
!70 U+0070 p
!71 U+0071 q
!72 U+0072 r
!73 U+0073 s
!74 U+0074 t
!75 U+0075 u
!76 U+0076 v
!77 U+0077 w
!78 U+0078 x
!79 U+0079 y
!7A U+007A z
!7B U+007B braceleft
!7C U+007C bar
!7D U+007D braceright
!7E U+007E asciitilde
!7F U+007F .notdef
!80 U+0080 .notdef
!81 U+0081 .notdef
!82 U+0082 .notdef
!83 U+0083 .notdef
!84 U+0084 .notdef
!85 U+0085 .notdef
!86 U+0086 .notdef
!87 U+0087 .notdef
!88 U+0088 .notdef
!89 U+0089 .notdef
!8A U+008A .notdef
!8B U+008B .notdef
!8C U+008C .notdef
!8D U+008D .notdef
!8E U+008E .notdef
!8F U+008F .notdef
!90 U+0090 .notdef
!91 U+0091 .notdef
!92 U+0092 .notdef
!93 U+0093 .notdef
!94 U+0094 .notdef
!95 U+0095 .notdef
!96 U+0096 .notdef
!97 U+0097 .notdef
!98 U+0098 .notdef
!99 U+0099 .notdef
!9A U+009A .notdef
!9B U+009B .notdef
!9C U+009C .notdef
!9D U+009D .notdef
!9E U+009E .notdef
!9F U+009F .notdef
!A0 U+00A0 space
!A1 U+0E01 kokaithai
!A2 U+0E02 khokhaithai
!A3 U+0E03 khokhuatthai
!A4 U+0E04 khokhwaithai
!A5 U+0E05 khokhonthai
!A6 U+0E06 khorakhangthai
!A7 U+0E07 ngonguthai
!A8 U+0E08 chochanthai
!A9 U+0E09 chochingthai
!AA U+0E0A chochangthai
!AB U+0E0B sosothai
!AC U+0E0C chochoethai
!AD U+0E0D yoyingthai
!AE U+0E0E dochadathai
!AF U+0E0F topatakthai
!B0 U+0E10 thothanthai
!B1 U+0E11 thonangmonthothai
!B2 U+0E12 thophuthaothai
!B3 U+0E13 nonenthai
!B4 U+0E14 dodekthai
!B5 U+0E15 totaothai
!B6 U+0E16 thothungthai
!B7 U+0E17 thothahanthai
!B8 U+0E18 thothongthai
!B9 U+0E19 nonuthai
!BA U+0E1A bobaimaithai
!BB U+0E1B poplathai
!BC U+0E1C phophungthai
!BD U+0E1D fofathai
!BE U+0E1E phophanthai
!BF U+0E1F fofanthai
!C0 U+0E20 phosamphaothai
!C1 U+0E21 momathai
!C2 U+0E22 yoyakthai
!C3 U+0E23 roruathai
!C4 U+0E24 ruthai
!C5 U+0E25 lolingthai
!C6 U+0E26 luthai
!C7 U+0E27 wowaenthai
!C8 U+0E28 sosalathai
!C9 U+0E29 sorusithai
!CA U+0E2A sosuathai
!CB U+0E2B hohipthai
!CC U+0E2C lochulathai
!CD U+0E2D oangthai
!CE U+0E2E honokhukthai
!CF U+0E2F paiyannoithai
!D0 U+0E30 saraathai
!D1 U+0E31 maihanakatthai
!D2 U+0E32 saraaathai
!D3 U+0E33 saraamthai
!D4 U+0E34 saraithai
!D5 U+0E35 saraiithai
!D6 U+0E36 sarauethai
!D7 U+0E37 saraueethai
!D8 U+0E38 sarauthai
!D9 U+0E39 sarauuthai
!DA U+0E3A phinthuthai
!DF U+0E3F bahtthai
!E0 U+0E40 saraethai
!E1 U+0E41 saraaethai
!E2 U+0E42 saraothai
!E3 U+0E43 saraaimaimuanthai
!E4 U+0E44 saraaimaimalaithai
!E5 U+0E45 lakkhangyaothai
!E6 U+0E46 maiyamokthai
!E7 U+0E47 maitaikhuthai
!E8 U+0E48 maiekthai
!E9 U+0E49 maithothai
!EA U+0E4A maitrithai
!EB U+0E4B maichattawathai
!EC U+0E4C thanthakhatthai
!ED U+0E4D nikhahitthai
!EE U+0E4E yamakkanthai
!EF U+0E4F fongmanthai
!F0 U+0E50 zerothai
!F1 U+0E51 onethai
!F2 U+0E52 twothai
!F3 U+0E53 threethai
!F4 U+0E54 fourthai
!F5 U+0E55 fivethai
!F6 U+0E56 sixthai
!F7 U+0E57 seventhai
!F8 U+0E58 eightthai
!F9 U+0E59 ninethai
!FA U+0E5A angkhankhuthai
!FB U+0E5B khomutthai
!00 U+0000 .notdef
!01 U+0001 .notdef
!02 U+0002 .notdef
!03 U+0003 .notdef
!04 U+0004 .notdef
!05 U+0005 .notdef
!06 U+0006 .notdef
!07 U+0007 .notdef
!08 U+0008 .notdef
!09 U+0009 .notdef
!0A U+000A .notdef
!0B U+000B .notdef
!0C U+000C .notdef
!0D U+000D .notdef
!0E U+000E .notdef
!0F U+000F .notdef
!10 U+0010 .notdef
!11 U+0011 .notdef
!12 U+0012 .notdef
!13 U+0013 .notdef
!14 U+0014 .notdef
!15 U+0015 .notdef
!16 U+0016 .notdef
!17 U+0017 .notdef
!18 U+0018 .notdef
!19 U+0019 .notdef
!1A U+001A .notdef
!1B U+001B .notdef
!1C U+001C .notdef
!1D U+001D .notdef
!1E U+001E .notdef
!1F U+001F .notdef
!20 U+0020 space
!21 U+0021 exclam
!22 U+0022 quotedbl
!23 U+0023 numbersign
!24 U+0024 dollar
!25 U+0025 percent
!26 U+0026 ampersand
!27 U+0027 quotesingle
!28 U+0028 parenleft
!29 U+0029 parenright
!2A U+002A asterisk
!2B U+002B plus
!2C U+002C comma
!2D U+002D hyphen
!2E U+002E period
!2F U+002F slash
!30 U+0030 zero
!31 U+0031 one
!32 U+0032 two
!33 U+0033 three
!34 U+0034 four
!35 U+0035 five
!36 U+0036 six
!37 U+0037 seven
!38 U+0038 eight
!39 U+0039 nine
!3A U+003A colon
!3B U+003B semicolon
!3C U+003C less
!3D U+003D equal
!3E U+003E greater
!3F U+003F question
!40 U+0040 at
!41 U+0041 A
!42 U+0042 B
!43 U+0043 C
!44 U+0044 D
!45 U+0045 E
!46 U+0046 F
!47 U+0047 G
!48 U+0048 H
!49 U+0049 I
!4A U+004A J
!4B U+004B K
!4C U+004C L
!4D U+004D M
!4E U+004E N
!4F U+004F O
!50 U+0050 P
!51 U+0051 Q
!52 U+0052 R
!53 U+0053 S
!54 U+0054 T
!55 U+0055 U
!56 U+0056 V
!57 U+0057 W
!58 U+0058 X
!59 U+0059 Y
!5A U+005A Z
!5B U+005B bracketleft
!5C U+005C backslash
!5D U+005D bracketright
!5E U+005E asciicircum
!5F U+005F underscore
!60 U+0060 grave
!61 U+0061 a
!62 U+0062 b
!63 U+0063 c
!64 U+0064 d
!65 U+0065 e
!66 U+0066 f
!67 U+0067 g
!68 U+0068 h
!69 U+0069 i
!6A U+006A j
!6B U+006B k
!6C U+006C l
!6D U+006D m
!6E U+006E n
!6F U+006F o
!70 U+0070 p
!71 U+0071 q
!72 U+0072 r
!73 U+0073 s
!74 U+0074 t
!75 U+0075 u
!76 U+0076 v
!77 U+0077 w
!78 U+0078 x
!79 U+0079 y
!7A U+007A z
!7B U+007B braceleft
!7C U+007C bar
!7D U+007D braceright
!7E U+007E asciitilde
!7F U+007F .notdef
!80 U+0080 .notdef
!81 U+0081 .notdef
!82 U+0082 .notdef
!83 U+0083 .notdef
!84 U+0084 .notdef
!85 U+0085 .notdef
!86 U+0086 .notdef
!87 U+0087 .notdef
!88 U+0088 .notdef
!89 U+0089 .notdef
!8A U+008A .notdef
!8B U+008B .notdef
!8C U+008C .notdef
!8D U+008D .notdef
!8E U+008E .notdef
!8F U+008F .notdef
!90 U+0090 .notdef
!91 U+0091 .notdef
!92 U+0092 .notdef
!93 U+0093 .notdef
!94 U+0094 .notdef
!95 U+0095 .notdef
!96 U+0096 .notdef
!97 U+0097 .notdef
!98 U+0098 .notdef
!99 U+0099 .notdef
!9A U+009A .notdef
!9B U+009B .notdef
!9C U+009C .notdef
!9D U+009D .notdef
!9E U+009E .notdef
!9F U+009F .notdef
!A0 U+00A0 space
!A1 U+00A1 exclamdown
!A2 U+00A2 cent
!A3 U+00A3 sterling
!A4 U+20AC Euro
!A5 U+00A5 yen
!A6 U+0160 Scaron
!A7 U+00A7 section
!A8 U+0161 scaron
!A9 U+00A9 copyright
!AA U+00AA ordfeminine
!AB U+00AB guillemotleft
!AC U+00AC logicalnot
!AD U+00AD hyphen
!AE U+00AE registered
!AF U+00AF macron
!B0 U+00B0 degree
!B1 U+00B1 plusminus
!B2 U+00B2 twosuperior
!B3 U+00B3 threesuperior
!B4 U+017D Zcaron
!B5 U+00B5 mu
!B6 U+00B6 paragraph
!B7 U+00B7 periodcentered
!B8 U+017E zcaron
!B9 U+00B9 onesuperior
!BA U+00BA ordmasculine
!BB U+00BB guillemotright
!BC U+0152 OE
!BD U+0153 oe
!BE U+0178 Ydieresis
!BF U+00BF questiondown
!C0 U+00C0 Agrave
!C1 U+00C1 Aacute
!C2 U+00C2 Acircumflex
!C3 U+00C3 Atilde
!C4 U+00C4 Adieresis
!C5 U+00C5 Aring
!C6 U+00C6 AE
!C7 U+00C7 Ccedilla
!C8 U+00C8 Egrave
!C9 U+00C9 Eacute
!CA U+00CA Ecircumflex
!CB U+00CB Edieresis
!CC U+00CC Igrave
!CD U+00CD Iacute
!CE U+00CE Icircumflex
!CF U+00CF Idieresis
!D0 U+00D0 Eth
!D1 U+00D1 Ntilde
!D2 U+00D2 Ograve
!D3 U+00D3 Oacute
!D4 U+00D4 Ocircumflex
!D5 U+00D5 Otilde
!D6 U+00D6 Odieresis
!D7 U+00D7 multiply
!D8 U+00D8 Oslash
!D9 U+00D9 Ugrave
!DA U+00DA Uacute
!DB U+00DB Ucircumflex
!DC U+00DC Udieresis
!DD U+00DD Yacute
!DE U+00DE Thorn
!DF U+00DF germandbls
!E0 U+00E0 agrave
!E1 U+00E1 aacute
!E2 U+00E2 acircumflex
!E3 U+00E3 atilde
!E4 U+00E4 adieresis
!E5 U+00E5 aring
!E6 U+00E6 ae
!E7 U+00E7 ccedilla
!E8 U+00E8 egrave
!E9 U+00E9 eacute
!EA U+00EA ecircumflex
!EB U+00EB edieresis
!EC U+00EC igrave
!ED U+00ED iacute
!EE U+00EE icircumflex
!EF U+00EF idieresis
!F0 U+00F0 eth
!F1 U+00F1 ntilde
!F2 U+00F2 ograve
!F3 U+00F3 oacute
!F4 U+00F4 ocircumflex
!F5 U+00F5 otilde
!F6 U+00F6 odieresis
!F7 U+00F7 divide
!F8 U+00F8 oslash
!F9 U+00F9 ugrave
!FA U+00FA uacute
!FB U+00FB ucircumflex
!FC U+00FC udieresis
!FD U+00FD yacute
!FE U+00FE thorn
!FF U+00FF ydieresis
!00 U+0000 .notdef
!01 U+0001 .notdef
!02 U+0002 .notdef
!03 U+0003 .notdef
!04 U+0004 .notdef
!05 U+0005 .notdef
!06 U+0006 .notdef
!07 U+0007 .notdef
!08 U+0008 .notdef
!09 U+0009 .notdef
!0A U+000A .notdef
!0B U+000B .notdef
!0C U+000C .notdef
!0D U+000D .notdef
!0E U+000E .notdef
!0F U+000F .notdef
!10 U+0010 .notdef
!11 U+0011 .notdef
!12 U+0012 .notdef
!13 U+0013 .notdef
!14 U+0014 .notdef
!15 U+0015 .notdef
!16 U+0016 .notdef
!17 U+0017 .notdef
!18 U+0018 .notdef
!19 U+0019 .notdef
!1A U+001A .notdef
!1B U+001B .notdef
!1C U+001C .notdef
!1D U+001D .notdef
!1E U+001E .notdef
!1F U+001F .notdef
!20 U+0020 space
!21 U+0021 exclam
!22 U+0022 quotedbl
!23 U+0023 numbersign
!24 U+0024 dollar
!25 U+0025 percent
!26 U+0026 ampersand
!27 U+0027 quotesingle
!28 U+0028 parenleft
!29 U+0029 parenright
!2A U+002A asterisk
!2B U+002B plus
!2C U+002C comma
!2D U+002D hyphen
!2E U+002E period
!2F U+002F slash
!30 U+0030 zero
!31 U+0031 one
!32 U+0032 two
!33 U+0033 three
!34 U+0034 four
!35 U+0035 five
!36 U+0036 six
!37 U+0037 seven
!38 U+0038 eight
!39 U+0039 nine
!3A U+003A colon
!3B U+003B semicolon
!3C U+003C less
!3D U+003D equal
!3E U+003E greater
!3F U+003F question
!40 U+0040 at
!41 U+0041 A
!42 U+0042 B
!43 U+0043 C
!44 U+0044 D
!45 U+0045 E
!46 U+0046 F
!47 U+0047 G
!48 U+0048 H
!49 U+0049 I
!4A U+004A J
!4B U+004B K
!4C U+004C L
!4D U+004D M
!4E U+004E N
!4F U+004F O
!50 U+0050 P
!51 U+0051 Q
!52 U+0052 R
!53 U+0053 S
!54 U+0054 T
!55 U+0055 U
!56 U+0056 V
!57 U+0057 W
!58 U+0058 X
!59 U+0059 Y
!5A U+005A Z
!5B U+005B bracketleft
!5C U+005C backslash
!5D U+005D bracketright
!5E U+005E asciicircum
!5F U+005F underscore
!60 U+0060 grave
!61 U+0061 a
!62 U+0062 b
!63 U+0063 c
!64 U+0064 d
!65 U+0065 e
!66 U+0066 f
!67 U+0067 g
!68 U+0068 h
!69 U+0069 i
!6A U+006A j
!6B U+006B k
!6C U+006C l
!6D U+006D m
!6E U+006E n
!6F U+006F o
!70 U+0070 p
!71 U+0071 q
!72 U+0072 r
!73 U+0073 s
!74 U+0074 t
!75 U+0075 u
!76 U+0076 v
!77 U+0077 w
!78 U+0078 x
!79 U+0079 y
!7A U+007A z
!7B U+007B braceleft
!7C U+007C bar
!7D U+007D braceright
!7E U+007E asciitilde
!7F U+007F .notdef
!80 U+0080 .notdef
!81 U+0081 .notdef
!82 U+0082 .notdef
!83 U+0083 .notdef
!84 U+0084 .notdef
!85 U+0085 .notdef
!86 U+0086 .notdef
!87 U+0087 .notdef
!88 U+0088 .notdef
!89 U+0089 .notdef
!8A U+008A .notdef
!8B U+008B .notdef
!8C U+008C .notdef
!8D U+008D .notdef
!8E U+008E .notdef
!8F U+008F .notdef
!90 U+0090 .notdef
!91 U+0091 .notdef
!92 U+0092 .notdef
!93 U+0093 .notdef
!94 U+0094 .notdef
!95 U+0095 .notdef
!96 U+0096 .notdef
!97 U+0097 .notdef
!98 U+0098 .notdef
!99 U+0099 .notdef
!9A U+009A .notdef
!9B U+009B .notdef
!9C U+009C .notdef
!9D U+009D .notdef
!9E U+009E .notdef
!9F U+009F .notdef
!A0 U+00A0 space
!A1 U+0104 Aogonek
!A2 U+0105 aogonek
!A3 U+0141 Lslash
!A4 U+20AC Euro
!A5 U+201E quotedblbase
!A6 U+0160 Scaron
!A7 U+00A7 section
!A8 U+0161 scaron
!A9 U+00A9 copyright
!AA U+0218 Scommaaccent
!AB U+00AB guillemotleft
!AC U+0179 Zacute
!AD U+00AD hyphen
!AE U+017A zacute
!AF U+017B Zdotaccent
!B0 U+00B0 degree
!B1 U+00B1 plusminus
!B2 U+010C Ccaron
!B3 U+0142 lslash
!B4 U+017D Zcaron
!B5 U+201D quotedblright
!B6 U+00B6 paragraph
!B7 U+00B7 periodcentered
!B8 U+017E zcaron
!B9 U+010D ccaron
!BA U+0219 scommaaccent
!BB U+00BB guillemotright
!BC U+0152 OE
!BD U+0153 oe
!BE U+0178 Ydieresis
!BF U+017C zdotaccent
!C0 U+00C0 Agrave
!C1 U+00C1 Aacute
!C2 U+00C2 Acircumflex
!C3 U+0102 Abreve
!C4 U+00C4 Adieresis
!C5 U+0106 Cacute
!C6 U+00C6 AE
!C7 U+00C7 Ccedilla
!C8 U+00C8 Egrave
!C9 U+00C9 Eacute
!CA U+00CA Ecircumflex
!CB U+00CB Edieresis
!CC U+00CC Igrave
!CD U+00CD Iacute
!CE U+00CE Icircumflex
!CF U+00CF Idieresis
!D0 U+0110 Dcroat
!D1 U+0143 Nacute
!D2 U+00D2 Ograve
!D3 U+00D3 Oacute
!D4 U+00D4 Ocircumflex
!D5 U+0150 Ohungarumlaut
!D6 U+00D6 Odieresis
!D7 U+015A Sacute
!D8 U+0170 Uhungarumlaut
!D9 U+00D9 Ugrave
!DA U+00DA Uacute
!DB U+00DB Ucircumflex
!DC U+00DC Udieresis
!DD U+0118 Eogonek
!DE U+021A Tcommaaccent
!DF U+00DF germandbls
!E0 U+00E0 agrave
!E1 U+00E1 aacute
!E2 U+00E2 acircumflex
!E3 U+0103 abreve
!E4 U+00E4 adieresis
!E5 U+0107 cacute
!E6 U+00E6 ae
!E7 U+00E7 ccedilla
!E8 U+00E8 egrave
!E9 U+00E9 eacute
!EA U+00EA ecircumflex
!EB U+00EB edieresis
!EC U+00EC igrave
!ED U+00ED iacute
!EE U+00EE icircumflex
!EF U+00EF idieresis
!F0 U+0111 dcroat
!F1 U+0144 nacute
!F2 U+00F2 ograve
!F3 U+00F3 oacute
!F4 U+00F4 ocircumflex
!F5 U+0151 ohungarumlaut
!F6 U+00F6 odieresis
!F7 U+015B sacute
!F8 U+0171 uhungarumlaut
!F9 U+00F9 ugrave
!FA U+00FA uacute
!FB U+00FB ucircumflex
!FC U+00FC udieresis
!FD U+0119 eogonek
!FE U+021B tcommaaccent
!FF U+00FF ydieresis
!00 U+0000 .notdef
!01 U+0001 .notdef
!02 U+0002 .notdef
!03 U+0003 .notdef
!04 U+0004 .notdef
!05 U+0005 .notdef
!06 U+0006 .notdef
!07 U+0007 .notdef
!08 U+0008 .notdef
!09 U+0009 .notdef
!0A U+000A .notdef
!0B U+000B .notdef
!0C U+000C .notdef
!0D U+000D .notdef
!0E U+000E .notdef
!0F U+000F .notdef
!10 U+0010 .notdef
!11 U+0011 .notdef
!12 U+0012 .notdef
!13 U+0013 .notdef
!14 U+0014 .notdef
!15 U+0015 .notdef
!16 U+0016 .notdef
!17 U+0017 .notdef
!18 U+0018 .notdef
!19 U+0019 .notdef
!1A U+001A .notdef
!1B U+001B .notdef
!1C U+001C .notdef
!1D U+001D .notdef
!1E U+001E .notdef
!1F U+001F .notdef
!20 U+0020 space
!21 U+0021 exclam
!22 U+0022 quotedbl
!23 U+0023 numbersign
!24 U+0024 dollar
!25 U+0025 percent
!26 U+0026 ampersand
!27 U+0027 quotesingle
!28 U+0028 parenleft
!29 U+0029 parenright
!2A U+002A asterisk
!2B U+002B plus
!2C U+002C comma
!2D U+002D hyphen
!2E U+002E period
!2F U+002F slash
!30 U+0030 zero
!31 U+0031 one
!32 U+0032 two
!33 U+0033 three
!34 U+0034 four
!35 U+0035 five
!36 U+0036 six
!37 U+0037 seven
!38 U+0038 eight
!39 U+0039 nine
!3A U+003A colon
!3B U+003B semicolon
!3C U+003C less
!3D U+003D equal
!3E U+003E greater
!3F U+003F question
!40 U+0040 at
!41 U+0041 A
!42 U+0042 B
!43 U+0043 C
!44 U+0044 D
!45 U+0045 E
!46 U+0046 F
!47 U+0047 G
!48 U+0048 H
!49 U+0049 I
!4A U+004A J
!4B U+004B K
!4C U+004C L
!4D U+004D M
!4E U+004E N
!4F U+004F O
!50 U+0050 P
!51 U+0051 Q
!52 U+0052 R
!53 U+0053 S
!54 U+0054 T
!55 U+0055 U
!56 U+0056 V
!57 U+0057 W
!58 U+0058 X
!59 U+0059 Y
!5A U+005A Z
!5B U+005B bracketleft
!5C U+005C backslash
!5D U+005D bracketright
!5E U+005E asciicircum
!5F U+005F underscore
!60 U+0060 grave
!61 U+0061 a
!62 U+0062 b
!63 U+0063 c
!64 U+0064 d
!65 U+0065 e
!66 U+0066 f
!67 U+0067 g
!68 U+0068 h
!69 U+0069 i
!6A U+006A j
!6B U+006B k
!6C U+006C l
!6D U+006D m
!6E U+006E n
!6F U+006F o
!70 U+0070 p
!71 U+0071 q
!72 U+0072 r
!73 U+0073 s
!74 U+0074 t
!75 U+0075 u
!76 U+0076 v
!77 U+0077 w
!78 U+0078 x
!79 U+0079 y
!7A U+007A z
!7B U+007B braceleft
!7C U+007C bar
!7D U+007D braceright
!7E U+007E asciitilde
!7F U+007F .notdef
!80 U+0080 .notdef
!81 U+0081 .notdef
!82 U+0082 .notdef
!83 U+0083 .notdef
!84 U+0084 .notdef
!85 U+0085 .notdef
!86 U+0086 .notdef
!87 U+0087 .notdef
!88 U+0088 .notdef
!89 U+0089 .notdef
!8A U+008A .notdef
!8B U+008B .notdef
!8C U+008C .notdef
!8D U+008D .notdef
!8E U+008E .notdef
!8F U+008F .notdef
!90 U+0090 .notdef
!91 U+0091 .notdef
!92 U+0092 .notdef
!93 U+0093 .notdef
!94 U+0094 .notdef
!95 U+0095 .notdef
!96 U+0096 .notdef
!97 U+0097 .notdef
!98 U+0098 .notdef
!99 U+0099 .notdef
!9A U+009A .notdef
!9B U+009B .notdef
!9C U+009C .notdef
!9D U+009D .notdef
!9E U+009E .notdef
!9F U+009F .notdef
!A0 U+00A0 space
!A1 U+0104 Aogonek
!A2 U+02D8 breve
!A3 U+0141 Lslash
!A4 U+00A4 currency
!A5 U+013D Lcaron
!A6 U+015A Sacute
!A7 U+00A7 section
!A8 U+00A8 dieresis
!A9 U+0160 Scaron
!AA U+015E Scedilla
!AB U+0164 Tcaron
!AC U+0179 Zacute
!AD U+00AD hyphen
!AE U+017D Zcaron
!AF U+017B Zdotaccent
!B0 U+00B0 degree
!B1 U+0105 aogonek
!B2 U+02DB ogonek
!B3 U+0142 lslash
!B4 U+00B4 acute
!B5 U+013E lcaron
!B6 U+015B sacute
!B7 U+02C7 caron
!B8 U+00B8 cedilla
!B9 U+0161 scaron
!BA U+015F scedilla
!BB U+0165 tcaron
!BC U+017A zacute
!BD U+02DD hungarumlaut
!BE U+017E zcaron
!BF U+017C zdotaccent
!C0 U+0154 Racute
!C1 U+00C1 Aacute
!C2 U+00C2 Acircumflex
!C3 U+0102 Abreve
!C4 U+00C4 Adieresis
!C5 U+0139 Lacute
!C6 U+0106 Cacute
!C7 U+00C7 Ccedilla
!C8 U+010C Ccaron
!C9 U+00C9 Eacute
!CA U+0118 Eogonek
!CB U+00CB Edieresis
!CC U+011A Ecaron
!CD U+00CD Iacute
!CE U+00CE Icircumflex
!CF U+010E Dcaron
!D0 U+0110 Dcroat
!D1 U+0143 Nacute
!D2 U+0147 Ncaron
!D3 U+00D3 Oacute
!D4 U+00D4 Ocircumflex
!D5 U+0150 Ohungarumlaut
!D6 U+00D6 Odieresis
!D7 U+00D7 multiply
!D8 U+0158 Rcaron
!D9 U+016E Uring
!DA U+00DA Uacute
!DB U+0170 Uhungarumlaut
!DC U+00DC Udieresis
!DD U+00DD Yacute
!DE U+0162 Tcommaaccent
!DF U+00DF germandbls
!E0 U+0155 racute
!E1 U+00E1 aacute
!E2 U+00E2 acircumflex
!E3 U+0103 abreve
!E4 U+00E4 adieresis
!E5 U+013A lacute
!E6 U+0107 cacute
!E7 U+00E7 ccedilla
!E8 U+010D ccaron
!E9 U+00E9 eacute
!EA U+0119 eogonek
!EB U+00EB edieresis
!EC U+011B ecaron
!ED U+00ED iacute
!EE U+00EE icircumflex
!EF U+010F dcaron
!F0 U+0111 dcroat
!F1 U+0144 nacute
!F2 U+0148 ncaron
!F3 U+00F3 oacute
!F4 U+00F4 ocircumflex
!F5 U+0151 ohungarumlaut
!F6 U+00F6 odieresis
!F7 U+00F7 divide
!F8 U+0159 rcaron
!F9 U+016F uring
!FA U+00FA uacute
!FB U+0171 uhungarumlaut
!FC U+00FC udieresis
!FD U+00FD yacute
!FE U+0163 tcommaaccent
!FF U+02D9 dotaccent
!00 U+0000 .notdef
!01 U+0001 .notdef
!02 U+0002 .notdef
!03 U+0003 .notdef
!04 U+0004 .notdef
!05 U+0005 .notdef
!06 U+0006 .notdef
!07 U+0007 .notdef
!08 U+0008 .notdef
!09 U+0009 .notdef
!0A U+000A .notdef
!0B U+000B .notdef
!0C U+000C .notdef
!0D U+000D .notdef
!0E U+000E .notdef
!0F U+000F .notdef
!10 U+0010 .notdef
!11 U+0011 .notdef
!12 U+0012 .notdef
!13 U+0013 .notdef
!14 U+0014 .notdef
!15 U+0015 .notdef
!16 U+0016 .notdef
!17 U+0017 .notdef
!18 U+0018 .notdef
!19 U+0019 .notdef
!1A U+001A .notdef
!1B U+001B .notdef
!1C U+001C .notdef
!1D U+001D .notdef
!1E U+001E .notdef
!1F U+001F .notdef
!20 U+0020 space
!21 U+0021 exclam
!22 U+0022 quotedbl
!23 U+0023 numbersign
!24 U+0024 dollar
!25 U+0025 percent
!26 U+0026 ampersand
!27 U+0027 quotesingle
!28 U+0028 parenleft
!29 U+0029 parenright
!2A U+002A asterisk
!2B U+002B plus
!2C U+002C comma
!2D U+002D hyphen
!2E U+002E period
!2F U+002F slash
!30 U+0030 zero
!31 U+0031 one
!32 U+0032 two
!33 U+0033 three
!34 U+0034 four
!35 U+0035 five
!36 U+0036 six
!37 U+0037 seven
!38 U+0038 eight
!39 U+0039 nine
!3A U+003A colon
!3B U+003B semicolon
!3C U+003C less
!3D U+003D equal
!3E U+003E greater
!3F U+003F question
!40 U+0040 at
!41 U+0041 A
!42 U+0042 B
!43 U+0043 C
!44 U+0044 D
!45 U+0045 E
!46 U+0046 F
!47 U+0047 G
!48 U+0048 H
!49 U+0049 I
!4A U+004A J
!4B U+004B K
!4C U+004C L
!4D U+004D M
!4E U+004E N
!4F U+004F O
!50 U+0050 P
!51 U+0051 Q
!52 U+0052 R
!53 U+0053 S
!54 U+0054 T
!55 U+0055 U
!56 U+0056 V
!57 U+0057 W
!58 U+0058 X
!59 U+0059 Y
!5A U+005A Z
!5B U+005B bracketleft
!5C U+005C backslash
!5D U+005D bracketright
!5E U+005E asciicircum
!5F U+005F underscore
!60 U+0060 grave
!61 U+0061 a
!62 U+0062 b
!63 U+0063 c
!64 U+0064 d
!65 U+0065 e
!66 U+0066 f
!67 U+0067 g
!68 U+0068 h
!69 U+0069 i
!6A U+006A j
!6B U+006B k
!6C U+006C l
!6D U+006D m
!6E U+006E n
!6F U+006F o
!70 U+0070 p
!71 U+0071 q
!72 U+0072 r
!73 U+0073 s
!74 U+0074 t
!75 U+0075 u
!76 U+0076 v
!77 U+0077 w
!78 U+0078 x
!79 U+0079 y
!7A U+007A z
!7B U+007B braceleft
!7C U+007C bar
!7D U+007D braceright
!7E U+007E asciitilde
!7F U+007F .notdef
!80 U+0080 .notdef
!81 U+0081 .notdef
!82 U+0082 .notdef
!83 U+0083 .notdef
!84 U+0084 .notdef
!85 U+0085 .notdef
!86 U+0086 .notdef
!87 U+0087 .notdef
!88 U+0088 .notdef
!89 U+0089 .notdef
!8A U+008A .notdef
!8B U+008B .notdef
!8C U+008C .notdef
!8D U+008D .notdef
!8E U+008E .notdef
!8F U+008F .notdef
!90 U+0090 .notdef
!91 U+0091 .notdef
!92 U+0092 .notdef
!93 U+0093 .notdef
!94 U+0094 .notdef
!95 U+0095 .notdef
!96 U+0096 .notdef
!97 U+0097 .notdef
!98 U+0098 .notdef
!99 U+0099 .notdef
!9A U+009A .notdef
!9B U+009B .notdef
!9C U+009C .notdef
!9D U+009D .notdef
!9E U+009E .notdef
!9F U+009F .notdef
!A0 U+00A0 space
!A1 U+0104 Aogonek
!A2 U+0138 kgreenlandic
!A3 U+0156 Rcommaaccent
!A4 U+00A4 currency
!A5 U+0128 Itilde
!A6 U+013B Lcommaaccent
!A7 U+00A7 section
!A8 U+00A8 dieresis
!A9 U+0160 Scaron
!AA U+0112 Emacron
!AB U+0122 Gcommaaccent
!AC U+0166 Tbar
!AD U+00AD hyphen
!AE U+017D Zcaron
!AF U+00AF macron
!B0 U+00B0 degree
!B1 U+0105 aogonek
!B2 U+02DB ogonek
!B3 U+0157 rcommaaccent
!B4 U+00B4 acute
!B5 U+0129 itilde
!B6 U+013C lcommaaccent
!B7 U+02C7 caron
!B8 U+00B8 cedilla
!B9 U+0161 scaron
!BA U+0113 emacron
!BB U+0123 gcommaaccent
!BC U+0167 tbar
!BD U+014A Eng
!BE U+017E zcaron
!BF U+014B eng
!C0 U+0100 Amacron
!C1 U+00C1 Aacute
!C2 U+00C2 Acircumflex
!C3 U+00C3 Atilde
!C4 U+00C4 Adieresis
!C5 U+00C5 Aring
!C6 U+00C6 AE
!C7 U+012E Iogonek
!C8 U+010C Ccaron
!C9 U+00C9 Eacute
!CA U+0118 Eogonek
!CB U+00CB Edieresis
!CC U+0116 Edotaccent
!CD U+00CD Iacute
!CE U+00CE Icircumflex
!CF U+012A Imacron
!D0 U+0110 Dcroat
!D1 U+0145 Ncommaaccent
!D2 U+014C Omacron
!D3 U+0136 Kcommaaccent
!D4 U+00D4 Ocircumflex
!D5 U+00D5 Otilde
!D6 U+00D6 Odieresis
!D7 U+00D7 multiply
!D8 U+00D8 Oslash
!D9 U+0172 Uogonek
!DA U+00DA Uacute
!DB U+00DB Ucircumflex
!DC U+00DC Udieresis
!DD U+0168 Utilde
!DE U+016A Umacron
!DF U+00DF germandbls
!E0 U+0101 amacron
!E1 U+00E1 aacute
!E2 U+00E2 acircumflex
!E3 U+00E3 atilde
!E4 U+00E4 adieresis
!E5 U+00E5 aring
!E6 U+00E6 ae
!E7 U+012F iogonek
!E8 U+010D ccaron
!E9 U+00E9 eacute
!EA U+0119 eogonek
!EB U+00EB edieresis
!EC U+0117 edotaccent
!ED U+00ED iacute
!EE U+00EE icircumflex
!EF U+012B imacron
!F0 U+0111 dcroat
!F1 U+0146 ncommaaccent
!F2 U+014D omacron
!F3 U+0137 kcommaaccent
!F4 U+00F4 ocircumflex
!F5 U+00F5 otilde
!F6 U+00F6 odieresis
!F7 U+00F7 divide
!F8 U+00F8 oslash
!F9 U+0173 uogonek
!FA U+00FA uacute
!FB U+00FB ucircumflex
!FC U+00FC udieresis
!FD U+0169 utilde
!FE U+016B umacron
!FF U+02D9 dotaccent
!00 U+0000 .notdef
!01 U+0001 .notdef
!02 U+0002 .notdef
!03 U+0003 .notdef
!04 U+0004 .notdef
!05 U+0005 .notdef
!06 U+0006 .notdef
!07 U+0007 .notdef
!08 U+0008 .notdef
!09 U+0009 .notdef
!0A U+000A .notdef
!0B U+000B .notdef
!0C U+000C .notdef
!0D U+000D .notdef
!0E U+000E .notdef
!0F U+000F .notdef
!10 U+0010 .notdef
!11 U+0011 .notdef
!12 U+0012 .notdef
!13 U+0013 .notdef
!14 U+0014 .notdef
!15 U+0015 .notdef
!16 U+0016 .notdef
!17 U+0017 .notdef
!18 U+0018 .notdef
!19 U+0019 .notdef
!1A U+001A .notdef
!1B U+001B .notdef
!1C U+001C .notdef
!1D U+001D .notdef
!1E U+001E .notdef
!1F U+001F .notdef
!20 U+0020 space
!21 U+0021 exclam
!22 U+0022 quotedbl
!23 U+0023 numbersign
!24 U+0024 dollar
!25 U+0025 percent
!26 U+0026 ampersand
!27 U+0027 quotesingle
!28 U+0028 parenleft
!29 U+0029 parenright
!2A U+002A asterisk
!2B U+002B plus
!2C U+002C comma
!2D U+002D hyphen
!2E U+002E period
!2F U+002F slash
!30 U+0030 zero
!31 U+0031 one
!32 U+0032 two
!33 U+0033 three
!34 U+0034 four
!35 U+0035 five
!36 U+0036 six
!37 U+0037 seven
!38 U+0038 eight
!39 U+0039 nine
!3A U+003A colon
!3B U+003B semicolon
!3C U+003C less
!3D U+003D equal
!3E U+003E greater
!3F U+003F question
!40 U+0040 at
!41 U+0041 A
!42 U+0042 B
!43 U+0043 C
!44 U+0044 D
!45 U+0045 E
!46 U+0046 F
!47 U+0047 G
!48 U+0048 H
!49 U+0049 I
!4A U+004A J
!4B U+004B K
!4C U+004C L
!4D U+004D M
!4E U+004E N
!4F U+004F O
!50 U+0050 P
!51 U+0051 Q
!52 U+0052 R
!53 U+0053 S
!54 U+0054 T
!55 U+0055 U
!56 U+0056 V
!57 U+0057 W
!58 U+0058 X
!59 U+0059 Y
!5A U+005A Z
!5B U+005B bracketleft
!5C U+005C backslash
!5D U+005D bracketright
!5E U+005E asciicircum
!5F U+005F underscore
!60 U+0060 grave
!61 U+0061 a
!62 U+0062 b
!63 U+0063 c
!64 U+0064 d
!65 U+0065 e
!66 U+0066 f
!67 U+0067 g
!68 U+0068 h
!69 U+0069 i
!6A U+006A j
!6B U+006B k
!6C U+006C l
!6D U+006D m
!6E U+006E n
!6F U+006F o
!70 U+0070 p
!71 U+0071 q
!72 U+0072 r
!73 U+0073 s
!74 U+0074 t
!75 U+0075 u
!76 U+0076 v
!77 U+0077 w
!78 U+0078 x
!79 U+0079 y
!7A U+007A z
!7B U+007B braceleft
!7C U+007C bar
!7D U+007D braceright
!7E U+007E asciitilde
!7F U+007F .notdef
!80 U+0080 .notdef
!81 U+0081 .notdef
!82 U+0082 .notdef
!83 U+0083 .notdef
!84 U+0084 .notdef
!85 U+0085 .notdef
!86 U+0086 .notdef
!87 U+0087 .notdef
!88 U+0088 .notdef
!89 U+0089 .notdef
!8A U+008A .notdef
!8B U+008B .notdef
!8C U+008C .notdef
!8D U+008D .notdef
!8E U+008E .notdef
!8F U+008F .notdef
!90 U+0090 .notdef
!91 U+0091 .notdef
!92 U+0092 .notdef
!93 U+0093 .notdef
!94 U+0094 .notdef
!95 U+0095 .notdef
!96 U+0096 .notdef
!97 U+0097 .notdef
!98 U+0098 .notdef
!99 U+0099 .notdef
!9A U+009A .notdef
!9B U+009B .notdef
!9C U+009C .notdef
!9D U+009D .notdef
!9E U+009E .notdef
!9F U+009F .notdef
!A0 U+00A0 space
!A1 U+0401 afii10023
!A2 U+0402 afii10051
!A3 U+0403 afii10052
!A4 U+0404 afii10053
!A5 U+0405 afii10054
!A6 U+0406 afii10055
!A7 U+0407 afii10056
!A8 U+0408 afii10057
!A9 U+0409 afii10058
!AA U+040A afii10059
!AB U+040B afii10060
!AC U+040C afii10061
!AD U+00AD hyphen
!AE U+040E afii10062
!AF U+040F afii10145
!B0 U+0410 afii10017
!B1 U+0411 afii10018
!B2 U+0412 afii10019
!B3 U+0413 afii10020
!B4 U+0414 afii10021
!B5 U+0415 afii10022
!B6 U+0416 afii10024
!B7 U+0417 afii10025
!B8 U+0418 afii10026
!B9 U+0419 afii10027
!BA U+041A afii10028
!BB U+041B afii10029
!BC U+041C afii10030
!BD U+041D afii10031
!BE U+041E afii10032
!BF U+041F afii10033
!C0 U+0420 afii10034
!C1 U+0421 afii10035
!C2 U+0422 afii10036
!C3 U+0423 afii10037
!C4 U+0424 afii10038
!C5 U+0425 afii10039
!C6 U+0426 afii10040
!C7 U+0427 afii10041
!C8 U+0428 afii10042
!C9 U+0429 afii10043
!CA U+042A afii10044
!CB U+042B afii10045
!CC U+042C afii10046
!CD U+042D afii10047
!CE U+042E afii10048
!CF U+042F afii10049
!D0 U+0430 afii10065
!D1 U+0431 afii10066
!D2 U+0432 afii10067
!D3 U+0433 afii10068
!D4 U+0434 afii10069
!D5 U+0435 afii10070
!D6 U+0436 afii10072
!D7 U+0437 afii10073
!D8 U+0438 afii10074
!D9 U+0439 afii10075
!DA U+043A afii10076
!DB U+043B afii10077
!DC U+043C afii10078
!DD U+043D afii10079
!DE U+043E afii10080
!DF U+043F afii10081
!E0 U+0440 afii10082
!E1 U+0441 afii10083
!E2 U+0442 afii10084
!E3 U+0443 afii10085
!E4 U+0444 afii10086
!E5 U+0445 afii10087
!E6 U+0446 afii10088
!E7 U+0447 afii10089
!E8 U+0448 afii10090
!E9 U+0449 afii10091
!EA U+044A afii10092
!EB U+044B afii10093
!EC U+044C afii10094
!ED U+044D afii10095
!EE U+044E afii10096
!EF U+044F afii10097
!F0 U+2116 afii61352
!F1 U+0451 afii10071
!F2 U+0452 afii10099
!F3 U+0453 afii10100
!F4 U+0454 afii10101
!F5 U+0455 afii10102
!F6 U+0456 afii10103
!F7 U+0457 afii10104
!F8 U+0458 afii10105
!F9 U+0459 afii10106
!FA U+045A afii10107
!FB U+045B afii10108
!FC U+045C afii10109
!FD U+00A7 section
!FE U+045E afii10110
!FF U+045F afii10193
!00 U+0000 .notdef
!01 U+0001 .notdef
!02 U+0002 .notdef
!03 U+0003 .notdef
!04 U+0004 .notdef
!05 U+0005 .notdef
!06 U+0006 .notdef
!07 U+0007 .notdef
!08 U+0008 .notdef
!09 U+0009 .notdef
!0A U+000A .notdef
!0B U+000B .notdef
!0C U+000C .notdef
!0D U+000D .notdef
!0E U+000E .notdef
!0F U+000F .notdef
!10 U+0010 .notdef
!11 U+0011 .notdef
!12 U+0012 .notdef
!13 U+0013 .notdef
!14 U+0014 .notdef
!15 U+0015 .notdef
!16 U+0016 .notdef
!17 U+0017 .notdef
!18 U+0018 .notdef
!19 U+0019 .notdef
!1A U+001A .notdef
!1B U+001B .notdef
!1C U+001C .notdef
!1D U+001D .notdef
!1E U+001E .notdef
!1F U+001F .notdef
!20 U+0020 space
!21 U+0021 exclam
!22 U+0022 quotedbl
!23 U+0023 numbersign
!24 U+0024 dollar
!25 U+0025 percent
!26 U+0026 ampersand
!27 U+0027 quotesingle
!28 U+0028 parenleft
!29 U+0029 parenright
!2A U+002A asterisk
!2B U+002B plus
!2C U+002C comma
!2D U+002D hyphen
!2E U+002E period
!2F U+002F slash
!30 U+0030 zero
!31 U+0031 one
!32 U+0032 two
!33 U+0033 three
!34 U+0034 four
!35 U+0035 five
!36 U+0036 six
!37 U+0037 seven
!38 U+0038 eight
!39 U+0039 nine
!3A U+003A colon
!3B U+003B semicolon
!3C U+003C less
!3D U+003D equal
!3E U+003E greater
!3F U+003F question
!40 U+0040 at
!41 U+0041 A
!42 U+0042 B
!43 U+0043 C
!44 U+0044 D
!45 U+0045 E
!46 U+0046 F
!47 U+0047 G
!48 U+0048 H
!49 U+0049 I
!4A U+004A J
!4B U+004B K
!4C U+004C L
!4D U+004D M
!4E U+004E N
!4F U+004F O
!50 U+0050 P
!51 U+0051 Q
!52 U+0052 R
!53 U+0053 S
!54 U+0054 T
!55 U+0055 U
!56 U+0056 V
!57 U+0057 W
!58 U+0058 X
!59 U+0059 Y
!5A U+005A Z
!5B U+005B bracketleft
!5C U+005C backslash
!5D U+005D bracketright
!5E U+005E asciicircum
!5F U+005F underscore
!60 U+0060 grave
!61 U+0061 a
!62 U+0062 b
!63 U+0063 c
!64 U+0064 d
!65 U+0065 e
!66 U+0066 f
!67 U+0067 g
!68 U+0068 h
!69 U+0069 i
!6A U+006A j
!6B U+006B k
!6C U+006C l
!6D U+006D m
!6E U+006E n
!6F U+006F o
!70 U+0070 p
!71 U+0071 q
!72 U+0072 r
!73 U+0073 s
!74 U+0074 t
!75 U+0075 u
!76 U+0076 v
!77 U+0077 w
!78 U+0078 x
!79 U+0079 y
!7A U+007A z
!7B U+007B braceleft
!7C U+007C bar
!7D U+007D braceright
!7E U+007E asciitilde
!7F U+007F .notdef
!80 U+0080 .notdef
!81 U+0081 .notdef
!82 U+0082 .notdef
!83 U+0083 .notdef
!84 U+0084 .notdef
!85 U+0085 .notdef
!86 U+0086 .notdef
!87 U+0087 .notdef
!88 U+0088 .notdef
!89 U+0089 .notdef
!8A U+008A .notdef
!8B U+008B .notdef
!8C U+008C .notdef
!8D U+008D .notdef
!8E U+008E .notdef
!8F U+008F .notdef
!90 U+0090 .notdef
!91 U+0091 .notdef
!92 U+0092 .notdef
!93 U+0093 .notdef
!94 U+0094 .notdef
!95 U+0095 .notdef
!96 U+0096 .notdef
!97 U+0097 .notdef
!98 U+0098 .notdef
!99 U+0099 .notdef
!9A U+009A .notdef
!9B U+009B .notdef
!9C U+009C .notdef
!9D U+009D .notdef
!9E U+009E .notdef
!9F U+009F .notdef
!A0 U+00A0 space
!A1 U+2018 quoteleft
!A2 U+2019 quoteright
!A3 U+00A3 sterling
!A6 U+00A6 brokenbar
!A7 U+00A7 section
!A8 U+00A8 dieresis
!A9 U+00A9 copyright
!AB U+00AB guillemotleft
!AC U+00AC logicalnot
!AD U+00AD hyphen
!AF U+2015 afii00208
!B0 U+00B0 degree
!B1 U+00B1 plusminus
!B2 U+00B2 twosuperior
!B3 U+00B3 threesuperior
!B4 U+0384 tonos
!B5 U+0385 dieresistonos
!B6 U+0386 Alphatonos
!B7 U+00B7 periodcentered
!B8 U+0388 Epsilontonos
!B9 U+0389 Etatonos
!BA U+038A Iotatonos
!BB U+00BB guillemotright
!BC U+038C Omicrontonos
!BD U+00BD onehalf
!BE U+038E Upsilontonos
!BF U+038F Omegatonos
!C0 U+0390 iotadieresistonos
!C1 U+0391 Alpha
!C2 U+0392 Beta
!C3 U+0393 Gamma
!C4 U+0394 Delta
!C5 U+0395 Epsilon
!C6 U+0396 Zeta
!C7 U+0397 Eta
!C8 U+0398 Theta
!C9 U+0399 Iota
!CA U+039A Kappa
!CB U+039B Lambda
!CC U+039C Mu
!CD U+039D Nu
!CE U+039E Xi
!CF U+039F Omicron
!D0 U+03A0 Pi
!D1 U+03A1 Rho
!D3 U+03A3 Sigma
!D4 U+03A4 Tau
!D5 U+03A5 Upsilon
!D6 U+03A6 Phi
!D7 U+03A7 Chi
!D8 U+03A8 Psi
!D9 U+03A9 Omega
!DA U+03AA Iotadieresis
!DB U+03AB Upsilondieresis
!DC U+03AC alphatonos
!DD U+03AD epsilontonos
!DE U+03AE etatonos
!DF U+03AF iotatonos
!E0 U+03B0 upsilondieresistonos
!E1 U+03B1 alpha
!E2 U+03B2 beta
!E3 U+03B3 gamma
!E4 U+03B4 delta
!E5 U+03B5 epsilon
!E6 U+03B6 zeta
!E7 U+03B7 eta
!E8 U+03B8 theta
!E9 U+03B9 iota
!EA U+03BA kappa
!EB U+03BB lambda
!EC U+03BC mu
!ED U+03BD nu
!EE U+03BE xi
!EF U+03BF omicron
!F0 U+03C0 pi
!F1 U+03C1 rho
!F2 U+03C2 sigma1
!F3 U+03C3 sigma
!F4 U+03C4 tau
!F5 U+03C5 upsilon
!F6 U+03C6 phi
!F7 U+03C7 chi
!F8 U+03C8 psi
!F9 U+03C9 omega
!FA U+03CA iotadieresis
!FB U+03CB upsilondieresis
!FC U+03CC omicrontonos
!FD U+03CD upsilontonos
!FE U+03CE omegatonos
!00 U+0000 .notdef
!01 U+0001 .notdef
!02 U+0002 .notdef
!03 U+0003 .notdef
!04 U+0004 .notdef
!05 U+0005 .notdef
!06 U+0006 .notdef
!07 U+0007 .notdef
!08 U+0008 .notdef
!09 U+0009 .notdef
!0A U+000A .notdef
!0B U+000B .notdef
!0C U+000C .notdef
!0D U+000D .notdef
!0E U+000E .notdef
!0F U+000F .notdef
!10 U+0010 .notdef
!11 U+0011 .notdef
!12 U+0012 .notdef
!13 U+0013 .notdef
!14 U+0014 .notdef
!15 U+0015 .notdef
!16 U+0016 .notdef
!17 U+0017 .notdef
!18 U+0018 .notdef
!19 U+0019 .notdef
!1A U+001A .notdef
!1B U+001B .notdef
!1C U+001C .notdef
!1D U+001D .notdef
!1E U+001E .notdef
!1F U+001F .notdef
!20 U+0020 space
!21 U+0021 exclam
!22 U+0022 quotedbl
!23 U+0023 numbersign
!24 U+0024 dollar
!25 U+0025 percent
!26 U+0026 ampersand
!27 U+0027 quotesingle
!28 U+0028 parenleft
!29 U+0029 parenright
!2A U+002A asterisk
!2B U+002B plus
!2C U+002C comma
!2D U+002D hyphen
!2E U+002E period
!2F U+002F slash
!30 U+0030 zero
!31 U+0031 one
!32 U+0032 two
!33 U+0033 three
!34 U+0034 four
!35 U+0035 five
!36 U+0036 six
!37 U+0037 seven
!38 U+0038 eight
!39 U+0039 nine
!3A U+003A colon
!3B U+003B semicolon
!3C U+003C less
!3D U+003D equal
!3E U+003E greater
!3F U+003F question
!40 U+0040 at
!41 U+0041 A
!42 U+0042 B
!43 U+0043 C
!44 U+0044 D
!45 U+0045 E
!46 U+0046 F
!47 U+0047 G
!48 U+0048 H
!49 U+0049 I
!4A U+004A J
!4B U+004B K
!4C U+004C L
!4D U+004D M
!4E U+004E N
!4F U+004F O
!50 U+0050 P
!51 U+0051 Q
!52 U+0052 R
!53 U+0053 S
!54 U+0054 T
!55 U+0055 U
!56 U+0056 V
!57 U+0057 W
!58 U+0058 X
!59 U+0059 Y
!5A U+005A Z
!5B U+005B bracketleft
!5C U+005C backslash
!5D U+005D bracketright
!5E U+005E asciicircum
!5F U+005F underscore
!60 U+0060 grave
!61 U+0061 a
!62 U+0062 b
!63 U+0063 c
!64 U+0064 d
!65 U+0065 e
!66 U+0066 f
!67 U+0067 g
!68 U+0068 h
!69 U+0069 i
!6A U+006A j
!6B U+006B k
!6C U+006C l
!6D U+006D m
!6E U+006E n
!6F U+006F o
!70 U+0070 p
!71 U+0071 q
!72 U+0072 r
!73 U+0073 s
!74 U+0074 t
!75 U+0075 u
!76 U+0076 v
!77 U+0077 w
!78 U+0078 x
!79 U+0079 y
!7A U+007A z
!7B U+007B braceleft
!7C U+007C bar
!7D U+007D braceright
!7E U+007E asciitilde
!7F U+007F .notdef
!80 U+0080 .notdef
!81 U+0081 .notdef
!82 U+0082 .notdef
!83 U+0083 .notdef
!84 U+0084 .notdef
!85 U+0085 .notdef
!86 U+0086 .notdef
!87 U+0087 .notdef
!88 U+0088 .notdef
!89 U+0089 .notdef
!8A U+008A .notdef
!8B U+008B .notdef
!8C U+008C .notdef
!8D U+008D .notdef
!8E U+008E .notdef
!8F U+008F .notdef
!90 U+0090 .notdef
!91 U+0091 .notdef
!92 U+0092 .notdef
!93 U+0093 .notdef
!94 U+0094 .notdef
!95 U+0095 .notdef
!96 U+0096 .notdef
!97 U+0097 .notdef
!98 U+0098 .notdef
!99 U+0099 .notdef
!9A U+009A .notdef
!9B U+009B .notdef
!9C U+009C .notdef
!9D U+009D .notdef
!9E U+009E .notdef
!9F U+009F .notdef
!A0 U+00A0 space
!A1 U+00A1 exclamdown
!A2 U+00A2 cent
!A3 U+00A3 sterling
!A4 U+00A4 currency
!A5 U+00A5 yen
!A6 U+00A6 brokenbar
!A7 U+00A7 section
!A8 U+00A8 dieresis
!A9 U+00A9 copyright
!AA U+00AA ordfeminine
!AB U+00AB guillemotleft
!AC U+00AC logicalnot
!AD U+00AD hyphen
!AE U+00AE registered
!AF U+00AF macron
!B0 U+00B0 degree
!B1 U+00B1 plusminus
!B2 U+00B2 twosuperior
!B3 U+00B3 threesuperior
!B4 U+00B4 acute
!B5 U+00B5 mu
!B6 U+00B6 paragraph
!B7 U+00B7 periodcentered
!B8 U+00B8 cedilla
!B9 U+00B9 onesuperior
!BA U+00BA ordmasculine
!BB U+00BB guillemotright
!BC U+00BC onequarter
!BD U+00BD onehalf
!BE U+00BE threequarters
!BF U+00BF questiondown
!C0 U+00C0 Agrave
!C1 U+00C1 Aacute
!C2 U+00C2 Acircumflex
!C3 U+00C3 Atilde
!C4 U+00C4 Adieresis
!C5 U+00C5 Aring
!C6 U+00C6 AE
!C7 U+00C7 Ccedilla
!C8 U+00C8 Egrave
!C9 U+00C9 Eacute
!CA U+00CA Ecircumflex
!CB U+00CB Edieresis
!CC U+00CC Igrave
!CD U+00CD Iacute
!CE U+00CE Icircumflex
!CF U+00CF Idieresis
!D0 U+011E Gbreve
!D1 U+00D1 Ntilde
!D2 U+00D2 Ograve
!D3 U+00D3 Oacute
!D4 U+00D4 Ocircumflex
!D5 U+00D5 Otilde
!D6 U+00D6 Odieresis
!D7 U+00D7 multiply
!D8 U+00D8 Oslash
!D9 U+00D9 Ugrave
!DA U+00DA Uacute
!DB U+00DB Ucircumflex
!DC U+00DC Udieresis
!DD U+0130 Idotaccent
!DE U+015E Scedilla
!DF U+00DF germandbls
!E0 U+00E0 agrave
!E1 U+00E1 aacute
!E2 U+00E2 acircumflex
!E3 U+00E3 atilde
!E4 U+00E4 adieresis
!E5 U+00E5 aring
!E6 U+00E6 ae
!E7 U+00E7 ccedilla
!E8 U+00E8 egrave
!E9 U+00E9 eacute
!EA U+00EA ecircumflex
!EB U+00EB edieresis
!EC U+00EC igrave
!ED U+00ED iacute
!EE U+00EE icircumflex
!EF U+00EF idieresis
!F0 U+011F gbreve
!F1 U+00F1 ntilde
!F2 U+00F2 ograve
!F3 U+00F3 oacute
!F4 U+00F4 ocircumflex
!F5 U+00F5 otilde
!F6 U+00F6 odieresis
!F7 U+00F7 divide
!F8 U+00F8 oslash
!F9 U+00F9 ugrave
!FA U+00FA uacute
!FB U+00FB ucircumflex
!FC U+00FC udieresis
!FD U+0131 dotlessi
!FE U+015F scedilla
!FF U+00FF ydieresis
!00 U+0000 .notdef
!01 U+0001 .notdef
!02 U+0002 .notdef
!03 U+0003 .notdef
!04 U+0004 .notdef
!05 U+0005 .notdef
!06 U+0006 .notdef
!07 U+0007 .notdef
!08 U+0008 .notdef
!09 U+0009 .notdef
!0A U+000A .notdef
!0B U+000B .notdef
!0C U+000C .notdef
!0D U+000D .notdef
!0E U+000E .notdef
!0F U+000F .notdef
!10 U+0010 .notdef
!11 U+0011 .notdef
!12 U+0012 .notdef
!13 U+0013 .notdef
!14 U+0014 .notdef
!15 U+0015 .notdef
!16 U+0016 .notdef
!17 U+0017 .notdef
!18 U+0018 .notdef
!19 U+0019 .notdef
!1A U+001A .notdef
!1B U+001B .notdef
!1C U+001C .notdef
!1D U+001D .notdef
!1E U+001E .notdef
!1F U+001F .notdef
!20 U+0020 space
!21 U+0021 exclam
!22 U+0022 quotedbl
!23 U+0023 numbersign
!24 U+0024 dollar
!25 U+0025 percent
!26 U+0026 ampersand
!27 U+0027 quotesingle
!28 U+0028 parenleft
!29 U+0029 parenright
!2A U+002A asterisk
!2B U+002B plus
!2C U+002C comma
!2D U+002D hyphen
!2E U+002E period
!2F U+002F slash
!30 U+0030 zero
!31 U+0031 one
!32 U+0032 two
!33 U+0033 three
!34 U+0034 four
!35 U+0035 five
!36 U+0036 six
!37 U+0037 seven
!38 U+0038 eight
!39 U+0039 nine
!3A U+003A colon
!3B U+003B semicolon
!3C U+003C less
!3D U+003D equal
!3E U+003E greater
!3F U+003F question
!40 U+0040 at
!41 U+0041 A
!42 U+0042 B
!43 U+0043 C
!44 U+0044 D
!45 U+0045 E
!46 U+0046 F
!47 U+0047 G
!48 U+0048 H
!49 U+0049 I
!4A U+004A J
!4B U+004B K
!4C U+004C L
!4D U+004D M
!4E U+004E N
!4F U+004F O
!50 U+0050 P
!51 U+0051 Q
!52 U+0052 R
!53 U+0053 S
!54 U+0054 T
!55 U+0055 U
!56 U+0056 V
!57 U+0057 W
!58 U+0058 X
!59 U+0059 Y
!5A U+005A Z
!5B U+005B bracketleft
!5C U+005C backslash
!5D U+005D bracketright
!5E U+005E asciicircum
!5F U+005F underscore
!60 U+0060 grave
!61 U+0061 a
!62 U+0062 b
!63 U+0063 c
!64 U+0064 d
!65 U+0065 e
!66 U+0066 f
!67 U+0067 g
!68 U+0068 h
!69 U+0069 i
!6A U+006A j
!6B U+006B k
!6C U+006C l
!6D U+006D m
!6E U+006E n
!6F U+006F o
!70 U+0070 p
!71 U+0071 q
!72 U+0072 r
!73 U+0073 s
!74 U+0074 t
!75 U+0075 u
!76 U+0076 v
!77 U+0077 w
!78 U+0078 x
!79 U+0079 y
!7A U+007A z
!7B U+007B braceleft
!7C U+007C bar
!7D U+007D braceright
!7E U+007E asciitilde
!7F U+007F .notdef
!80 U+2500 SF100000
!81 U+2502 SF110000
!82 U+250C SF010000
!83 U+2510 SF030000
!84 U+2514 SF020000
!85 U+2518 SF040000
!86 U+251C SF080000
!87 U+2524 SF090000
!88 U+252C SF060000
!89 U+2534 SF070000
!8A U+253C SF050000
!8B U+2580 upblock
!8C U+2584 dnblock
!8D U+2588 block
!8E U+258C lfblock
!8F U+2590 rtblock
!90 U+2591 ltshade
!91 U+2592 shade
!92 U+2593 dkshade
!93 U+2320 integraltp
!94 U+25A0 filledbox
!95 U+2219 periodcentered
!96 U+221A radical
!97 U+2248 approxequal
!98 U+2264 lessequal
!99 U+2265 greaterequal
!9A U+00A0 space
!9B U+2321 integralbt
!9C U+00B0 degree
!9D U+00B2 twosuperior
!9E U+00B7 periodcentered
!9F U+00F7 divide
!A0 U+2550 SF430000
!A1 U+2551 SF240000
!A2 U+2552 SF510000
!A3 U+0451 afii10071
!A4 U+2553 SF520000
!A5 U+2554 SF390000
!A6 U+2555 SF220000
!A7 U+2556 SF210000
!A8 U+2557 SF250000
!A9 U+2558 SF500000
!AA U+2559 SF490000
!AB U+255A SF380000
!AC U+255B SF280000
!AD U+255C SF270000
!AE U+255D SF260000
!AF U+255E SF360000
!B0 U+255F SF370000
!B1 U+2560 SF420000
!B2 U+2561 SF190000
!B3 U+0401 afii10023
!B4 U+2562 SF200000
!B5 U+2563 SF230000
!B6 U+2564 SF470000
!B7 U+2565 SF480000
!B8 U+2566 SF410000
!B9 U+2567 SF450000
!BA U+2568 SF460000
!BB U+2569 SF400000
!BC U+256A SF540000
!BD U+256B SF530000
!BE U+256C SF440000
!BF U+00A9 copyright
!C0 U+044E afii10096
!C1 U+0430 afii10065
!C2 U+0431 afii10066
!C3 U+0446 afii10088
!C4 U+0434 afii10069
!C5 U+0435 afii10070
!C6 U+0444 afii10086
!C7 U+0433 afii10068
!C8 U+0445 afii10087
!C9 U+0438 afii10074
!CA U+0439 afii10075
!CB U+043A afii10076
!CC U+043B afii10077
!CD U+043C afii10078
!CE U+043D afii10079
!CF U+043E afii10080
!D0 U+043F afii10081
!D1 U+044F afii10097
!D2 U+0440 afii10082
!D3 U+0441 afii10083
!D4 U+0442 afii10084
!D5 U+0443 afii10085
!D6 U+0436 afii10072
!D7 U+0432 afii10067
!D8 U+044C afii10094
!D9 U+044B afii10093
!DA U+0437 afii10073
!DB U+0448 afii10090
!DC U+044D afii10095
!DD U+0449 afii10091
!DE U+0447 afii10089
!DF U+044A afii10092
!E0 U+042E afii10048
!E1 U+0410 afii10017
!E2 U+0411 afii10018
!E3 U+0426 afii10040
!E4 U+0414 afii10021
!E5 U+0415 afii10022
!E6 U+0424 afii10038
!E7 U+0413 afii10020
!E8 U+0425 afii10039
!E9 U+0418 afii10026
!EA U+0419 afii10027
!EB U+041A afii10028
!EC U+041B afii10029
!ED U+041C afii10030
!EE U+041D afii10031
!EF U+041E afii10032
!F0 U+041F afii10033
!F1 U+042F afii10049
!F2 U+0420 afii10034
!F3 U+0421 afii10035
!F4 U+0422 afii10036
!F5 U+0423 afii10037
!F6 U+0416 afii10024
!F7 U+0412 afii10019
!F8 U+042C afii10046
!F9 U+042B afii10045
!FA U+0417 afii10025
!FB U+0428 afii10042
!FC U+042D afii10047
!FD U+0429 afii10043
!FE U+0427 afii10041
!FF U+042A afii10044
!00 U+0000 .notdef
!01 U+0001 .notdef
!02 U+0002 .notdef
!03 U+0003 .notdef
!04 U+0004 .notdef
!05 U+0005 .notdef
!06 U+0006 .notdef
!07 U+0007 .notdef
!08 U+0008 .notdef
!09 U+0009 .notdef
!0A U+000A .notdef
!0B U+000B .notdef
!0C U+000C .notdef
!0D U+000D .notdef
!0E U+000E .notdef
!0F U+000F .notdef
!10 U+0010 .notdef
!11 U+0011 .notdef
!12 U+0012 .notdef
!13 U+0013 .notdef
!14 U+0014 .notdef
!15 U+0015 .notdef
!16 U+0016 .notdef
!17 U+0017 .notdef
!18 U+0018 .notdef
!19 U+0019 .notdef
!1A U+001A .notdef
!1B U+001B .notdef
!1C U+001C .notdef
!1D U+001D .notdef
!1E U+001E .notdef
!1F U+001F .notdef
!20 U+0020 space
!21 U+0021 exclam
!22 U+0022 quotedbl
!23 U+0023 numbersign
!24 U+0024 dollar
!25 U+0025 percent
!26 U+0026 ampersand
!27 U+0027 quotesingle
!28 U+0028 parenleft
!29 U+0029 parenright
!2A U+002A asterisk
!2B U+002B plus
!2C U+002C comma
!2D U+002D hyphen
!2E U+002E period
!2F U+002F slash
!30 U+0030 zero
!31 U+0031 one
!32 U+0032 two
!33 U+0033 three
!34 U+0034 four
!35 U+0035 five
!36 U+0036 six
!37 U+0037 seven
!38 U+0038 eight
!39 U+0039 nine
!3A U+003A colon
!3B U+003B semicolon
!3C U+003C less
!3D U+003D equal
!3E U+003E greater
!3F U+003F question
!40 U+0040 at
!41 U+0041 A
!42 U+0042 B
!43 U+0043 C
!44 U+0044 D
!45 U+0045 E
!46 U+0046 F
!47 U+0047 G
!48 U+0048 H
!49 U+0049 I
!4A U+004A J
!4B U+004B K
!4C U+004C L
!4D U+004D M
!4E U+004E N
!4F U+004F O
!50 U+0050 P
!51 U+0051 Q
!52 U+0052 R
!53 U+0053 S
!54 U+0054 T
!55 U+0055 U
!56 U+0056 V
!57 U+0057 W
!58 U+0058 X
!59 U+0059 Y
!5A U+005A Z
!5B U+005B bracketleft
!5C U+005C backslash
!5D U+005D bracketright
!5E U+005E asciicircum
!5F U+005F underscore
!60 U+0060 grave
!61 U+0061 a
!62 U+0062 b
!63 U+0063 c
!64 U+0064 d
!65 U+0065 e
!66 U+0066 f
!67 U+0067 g
!68 U+0068 h
!69 U+0069 i
!6A U+006A j
!6B U+006B k
!6C U+006C l
!6D U+006D m
!6E U+006E n
!6F U+006F o
!70 U+0070 p
!71 U+0071 q
!72 U+0072 r
!73 U+0073 s
!74 U+0074 t
!75 U+0075 u
!76 U+0076 v
!77 U+0077 w
!78 U+0078 x
!79 U+0079 y
!7A U+007A z
!7B U+007B braceleft
!7C U+007C bar
!7D U+007D braceright
!7E U+007E asciitilde
!7F U+007F .notdef
!80 U+2500 SF100000
!81 U+2502 SF110000
!82 U+250C SF010000
!83 U+2510 SF030000
!84 U+2514 SF020000
!85 U+2518 SF040000
!86 U+251C SF080000
!87 U+2524 SF090000
!88 U+252C SF060000
!89 U+2534 SF070000
!8A U+253C SF050000
!8B U+2580 upblock
!8C U+2584 dnblock
!8D U+2588 block
!8E U+258C lfblock
!8F U+2590 rtblock
!90 U+2591 ltshade
!91 U+2592 shade
!92 U+2593 dkshade
!93 U+2320 integraltp
!94 U+25A0 filledbox
!95 U+2022 bullet
!96 U+221A radical
!97 U+2248 approxequal
!98 U+2264 lessequal
!99 U+2265 greaterequal
!9A U+00A0 space
!9B U+2321 integralbt
!9C U+00B0 degree
!9D U+00B2 twosuperior
!9E U+00B7 periodcentered
!9F U+00F7 divide
!A0 U+2550 SF430000
!A1 U+2551 SF240000
!A2 U+2552 SF510000
!A3 U+0451 afii10071
!A4 U+0454 afii10101
!A5 U+2554 SF390000
!A6 U+0456 afii10103
!A7 U+0457 afii10104
!A8 U+2557 SF250000
!A9 U+2558 SF500000
!AA U+2559 SF490000
!AB U+255A SF380000
!AC U+255B SF280000
!AD U+0491 afii10098
!AE U+255D SF260000
!AF U+255E SF360000
!B0 U+255F SF370000
!B1 U+2560 SF420000
!B2 U+2561 SF190000
!B3 U+0401 afii10023
!B4 U+0404 afii10053
!B5 U+2563 SF230000
!B6 U+0406 afii10055
!B7 U+0407 afii10056
!B8 U+2566 SF410000
!B9 U+2567 SF450000
!BA U+2568 SF460000
!BB U+2569 SF400000
!BC U+256A SF540000
!BD U+0490 afii10050
!BE U+256C SF440000
!BF U+00A9 copyright
!C0 U+044E afii10096
!C1 U+0430 afii10065
!C2 U+0431 afii10066
!C3 U+0446 afii10088
!C4 U+0434 afii10069
!C5 U+0435 afii10070
!C6 U+0444 afii10086
!C7 U+0433 afii10068
!C8 U+0445 afii10087
!C9 U+0438 afii10074
!CA U+0439 afii10075
!CB U+043A afii10076
!CC U+043B afii10077
!CD U+043C afii10078
!CE U+043D afii10079
!CF U+043E afii10080
!D0 U+043F afii10081
!D1 U+044F afii10097
!D2 U+0440 afii10082
!D3 U+0441 afii10083
!D4 U+0442 afii10084
!D5 U+0443 afii10085
!D6 U+0436 afii10072
!D7 U+0432 afii10067
!D8 U+044C afii10094
!D9 U+044B afii10093
!DA U+0437 afii10073
!DB U+0448 afii10090
!DC U+044D afii10095
!DD U+0449 afii10091
!DE U+0447 afii10089
!DF U+044A afii10092
!E0 U+042E afii10048
!E1 U+0410 afii10017
!E2 U+0411 afii10018
!E3 U+0426 afii10040
!E4 U+0414 afii10021
!E5 U+0415 afii10022
!E6 U+0424 afii10038
!E7 U+0413 afii10020
!E8 U+0425 afii10039
!E9 U+0418 afii10026
!EA U+0419 afii10027
!EB U+041A afii10028
!EC U+041B afii10029
!ED U+041C afii10030
!EE U+041D afii10031
!EF U+041E afii10032
!F0 U+041F afii10033
!F1 U+042F afii10049
!F2 U+0420 afii10034
!F3 U+0421 afii10035
!F4 U+0422 afii10036
!F5 U+0423 afii10037
!F6 U+0416 afii10024
!F7 U+0412 afii10019
!F8 U+042C afii10046
!F9 U+042B afii10045
!FA U+0417 afii10025
!FB U+0428 afii10042
!FC U+042D afii10047
!FD U+0429 afii10043
!FE U+0427 afii10041
!FF U+042A afii10044
<?php
/**
 * @package php-font-lib
 * @link    https://github.com/dompdf/php-font-lib
 * @author  Fabien Ménager <fabien.menager@gmail.com>
 * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
 */

namespace FontLib;

use FontLib\Table\Type\name;
use FontLib\TrueType\File;

/**
 * Adobe Font Metrics file creation utility class.
 *
 * @package php-font-lib
 */
class AdobeFontMetrics {
  private $f;

  /**
   * @var File
   */
  private $font;

  function __construct(File $font) {
    $this->font = $font;
  }

  function write($file, $encoding = null) {
    $map_data = array();

    if ($encoding) {
      $encoding = preg_replace("/[^a-z0-9-_]/", "", $encoding);
      $map_file = dirname(__FILE__) . "/../../maps/$encoding.map";
      if (!file_exists($map_file)) {
        throw new \Exception("Unknown encoding ($encoding)");
      }

      $map      = new EncodingMap($map_file);
      $map_data = $map->parse();
    }

    $this->f = fopen($file, "w+");

    $font = $this->font;

    $this->startSection("FontMetrics", 4.1);
    $this->addPair("Notice", "Converted by PHP-font-lib");
    $this->addPair("Comment", "https://github.com/dompdf/php-font-lib");

    $encoding_scheme = ($encoding ? $encoding : "FontSpecific");
    $this->addPair("EncodingScheme", $encoding_scheme);

    $records = $font->getData("name", "records");
    foreach ($records as $id => $record) {
      if (!isset(name::$nameIdCodes[$id]) || preg_match("/[\r\n]/", $record->string)) {
        continue;
      }

      $this->addPair(name::$nameIdCodes[$id], $record->string);
    }

    $os2 = $font->getData("OS/2");
    $this->addPair("Weight", ($os2["usWeightClass"] > 400 ? "Bold" : "Medium"));

    $post = $font->getData("post");
    $this->addPair("ItalicAngle", $post["italicAngle"]);
    $this->addPair("IsFixedPitch", ($post["isFixedPitch"] ? "true" : "false"));
    $this->addPair("UnderlineThickness", $font->normalizeFUnit($post["underlineThickness"]));
    $this->addPair("UnderlinePosition", $font->normalizeFUnit($post["underlinePosition"]));

    $hhea = $font->getData("hhea");

    if (isset($hhea["ascent"])) {
      $this->addPair("FontHeightOffset", $font->normalizeFUnit($hhea["lineGap"]));
    }
    else {
      $this->addPair("FontHeightOffset", $font->normalizeFUnit($os2["typoLineGap"]));
    }

    $glyf = $font->getData("glyf");
    $glyphIndexArray = $font->getUnicodeCharMap();
    $hasGlyphs = $glyf instanceof glyf && is_array($glyphIndexArray);

    // capHeight is based on capital H
    if ($hasGlyphs && \array_key_exists(72, $glyphIndexArray)) {
      $upperH = $glyf[$glyphIndexArray[72]];
      $upperH->parseData();
      $this->addPair("CapHeight", $font->normalizeFUnit($upperH->yMax));
    }

    // xHeight is based on lowercase x
    if ($hasGlyphs && \array_key_exists(120, $glyphIndexArray)) {
      $lowerX = $glyf[$glyphIndexArray[120]];
      $lowerX->parseData();
      $this->addPair("XHeight", $font->normalizeFUnit($lowerX->yMax));
    }

    // ascender is based on lowercase d
    if ($hasGlyphs && \array_key_exists(100, $glyphIndexArray)) {
      $lowerD = $glyf[$glyphIndexArray[100]];
      $lowerD->parseData();
      $this->addPair("Ascender", $font->normalizeFUnit($lowerD->yMax));
    } elseif (isset($hhea["ascent"])) {
      $this->addPair("Ascender", $font->normalizeFUnit($hhea["ascent"]));
    }
    else {
      $this->addPair("Ascender", $font->normalizeFUnit($os2["typoAscender"]));
    }

    // descender is based on lowercase p
    if ($hasGlyphs && \array_key_exists(112, $glyphIndexArray)) {
      $lowerP = $glyf[$glyphIndexArray[112]];
      $lowerP->parseData();
      $this->addPair("Descender", $font->normalizeFUnit($lowerP->yMin));
    } elseif (isset($hhea["descent"])) {
      $this->addPair("Descender", $font->normalizeFUnit($hhea["descent"]));
    }
    else {
      $this->addPair("Descender", -abs($font->normalizeFUnit($os2["typoDescender"])));
    }

    $head = $font->getData("head");
    $this->addArray("FontBBox", array(
      $font->normalizeFUnit($head["xMin"]),
      $font->normalizeFUnit($head["yMin"]),
      $font->normalizeFUnit($head["xMax"]),
      $font->normalizeFUnit($head["yMax"]),
    ));

    if ($glyphIndexArray) {
      $hmtx  = $font->getData("hmtx");
      $names = $font->getData("post", "names");

      $this->startSection("CharMetrics", count($hmtx));

      if ($encoding) {
        foreach ($map_data as $code => $value) {
          list($c, $name) = $value;

          if (!isset($glyphIndexArray[$c])) {
            continue;
          }

          $g = $glyphIndexArray[$c];

          if (!isset($hmtx[$g])) {
            $hmtx[$g] = $hmtx[0];
          }

          $this->addMetric(array(
            "C"  => ($code > 255 ? -1 : $code),
            "WX" => $font->normalizeFUnit($hmtx[$g][0]),
            "N"  => $name,
          ));
        }
      }
      else {
        foreach ($glyphIndexArray as $c => $g) {
          if (!isset($hmtx[$g])) {
            $hmtx[$g] = $hmtx[0];
          }

          $this->addMetric(array(
            "U"  => $c,
            "WX" => $font->normalizeFUnit($hmtx[$g][0]),
            "N"  => (isset($names[$g]) ? $names[$g] : sprintf("uni%04x", $c)),
            "G"  => $g,
          ));
        }
      }

      $this->endSection("CharMetrics");

      $kern = $font->getData("kern", "subtable");
      $tree = is_array($kern) ? $kern["tree"] : null;

      if (!$encoding && is_array($tree)) {
        $this->startSection("KernData");
        $this->startSection("KernPairs", count($tree, COUNT_RECURSIVE) - count($tree));

        foreach ($tree as $left => $values) {
          if (!is_array($values)) {
            continue;
          }
          if (!isset($glyphIndexArray[$left])) {
            continue;
          }

          $left_gid = $glyphIndexArray[$left];

          if (!isset($names[$left_gid])) {
            continue;
          }

          $left_name = $names[$left_gid];

          $this->addLine("");

          foreach ($values as $right => $value) {
            if (!isset($glyphIndexArray[$right])) {
              continue;
            }

            $right_gid = $glyphIndexArray[$right];

            if (!isset($names[$right_gid])) {
              continue;
            }

            $right_name = $names[$right_gid];
            $this->addPair("KPX", "$left_name $right_name $value");
          }
        }

        $this->endSection("KernPairs");
        $this->endSection("KernData");
      }
    }

    $this->endSection("FontMetrics");
  }

  function addLine($line) {
    fwrite($this->f, "$line\n");
  }

  function addPair($key, $value) {
    $this->addLine("$key $value");
  }

  function addArray($key, $array) {
    $this->addLine("$key " . implode(" ", $array));
  }

  function addMetric($data) {
    $array = array();
    foreach ($data as $key => $value) {
      $array[] = "$key $value";
    }
    $this->addLine(implode(" ; ", $array));
  }

  function startSection($name, $value = "") {
    $this->addLine("Start$name $value");
  }

  function endSection($name) {
    $this->addLine("End$name");
  }
}
<?php
/**
 * @package php-font-lib
 * @link    https://github.com/dompdf/php-font-lib
 * @author  Fabien Ménager <fabien.menager@gmail.com>
 * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
 */

namespace FontLib;

/**
 * Generic font file binary stream.
 *
 * @package php-font-lib
 */
class BinaryStream {
  /**
   * @var resource The file pointer
   */
  protected $f;

  const uint8        = 1;
  const  int8        = 2;
  const uint16       = 3;
  const  int16       = 4;
  const uint32       = 5;
  const  int32       = 6;
  const shortFrac    = 7;
  const Fixed        = 8;
  const  FWord       = 9;
  const uFWord       = 10;
  const F2Dot14      = 11;
  const longDateTime = 12;
  const char         = 13;

  const modeRead      = "rb";
  const modeWrite     = "wb";
  const modeReadWrite = "rb+";

  static function backtrace() {
    var_dump(debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS));
  }

  /**
   * Open a font file in read mode
   *
   * @param string $filename The file name of the font to open
   *
   * @return bool
   */
  public function load($filename) {
    return $this->open($filename, self::modeRead);
  }

  /**
   * Open a font file in a chosen mode
   *
   * @param string $filename The file name of the font to open
   * @param string $mode     The opening mode
   *
   * @throws \Exception
   * @return bool
   */
  public function open($filename, $mode = self::modeRead) {
    if (!in_array($mode, array(self::modeRead, self::modeWrite, self::modeReadWrite))) {
      throw new \Exception("Unknown file open mode");
    }

    $this->f = fopen($filename, $mode);

    return $this->f != false;
  }

  /**
   * Close the internal file pointer
   */
  public function close() {
    return fclose($this->f) != false;
  }

  /**
   * Change the internal file pointer
   *
   * @param resource $fp
   *
   * @throws \Exception
   */
  public function setFile($fp) {
    if (!is_resource($fp)) {
      throw new \Exception('$fp is not a valid resource');
    }

    $this->f = $fp;
  }

  /**
   * Create a temporary file in write mode
   *
   * @param bool $allow_memory Allow in-memory files
   *
   * @return resource the temporary file pointer resource
   */
  public static function getTempFile($allow_memory = true) {
    $f = null;

    if ($allow_memory) {
      $f = fopen("php://temp", "rb+");
    }
    else {
      $f = fopen(tempnam(sys_get_temp_dir(), "fnt"), "rb+");
    }

    return $f;
  }

  /**
   * Move the internal file pinter to $offset bytes
   *
   * @param int $offset
   *
   * @return bool True if the $offset position exists in the file
   */
  public function seek($offset) {
    return fseek($this->f, $offset, SEEK_SET) == 0;
  }

  /**
   * Gives the current position in the file
   *
   * @return int The current position
   */
  public function pos() {
    return ftell($this->f);
  }

  public function skip($n) {
    fseek($this->f, $n, SEEK_CUR);
  }

  /**
   * @param int $n The number of bytes to read
   *
   * @return string
   */
  public function read($n) {
    if ($n < 1) {
      return "";
    }

    return (string) fread($this->f, $n);
  }

  public function write($data, $length = null) {
    if ($data === null || $data === "" || $data === false) {
      return 0;
    }

    return fwrite($this->f, $data, $length);
  }

  public function readUInt8() {
    return ord($this->read(1));
  }

  public function readUInt8Many($count) {
    return array_values(unpack("C*", $this->read($count)));
  }

  public function writeUInt8($data) {
    return $this->write(chr($data), 1);
  }

  public function readInt8() {
    $v = $this->readUInt8();

    if ($v >= 0x80) {
      $v -= 0x100;
    }

    return $v;
  }

  public function readInt8Many($count) {
    return array_values(unpack("c*", $this->read($count)));
  }

  public function writeInt8($data) {
    if ($data < 0) {
      $data += 0x100;
    }

    return $this->writeUInt8($data);
  }

  public function readUInt16() {
    $a = unpack("nn", $this->read(2));

    return $a["n"];
  }

  public function readUInt16Many($count) {
    return array_values(unpack("n*", $this->read($count * 2)));
  }

  public function readUFWord() {
    return $this->readUInt16();
  }

  public function writeUInt16($data) {
    return $this->write(pack("n", $data), 2);
  }

  public function writeUFWord($data) {
    return $this->writeUInt16($data);
  }

  public function readInt16() {
    $a = unpack("nn", $this->read(2));
    $v = $a["n"];

    if ($v >= 0x8000) {
      $v -= 0x10000;
    }

    return $v;
  }

  public function readInt16Many($count) {
    $vals = array_values(unpack("n*", $this->read($count * 2)));
    foreach ($vals as &$v) {
      if ($v >= 0x8000) {
        $v -= 0x10000;
      }
    }

    return $vals;
  }

  public function readFWord() {
    return $this->readInt16();
  }

  public function writeInt16($data) {
    if ($data < 0) {
      $data += 0x10000;
    }

    return $this->writeUInt16($data);
  }

  public function writeFWord($data) {
    return $this->writeInt16($data);
  }

  public function readUInt32() {
    $a = unpack("NN", $this->read(4));

    return $a["N"];
  }

  public function writeUInt32($data) {
    return $this->write(pack("N", $data), 4);
  }

  public function readFixed() {
    $d  = $this->readInt16();
    $d2 = $this->readUInt16();

    return round($d + $d2 / 0x10000, 4);
  }

  public function writeFixed($data) {
    $left  = floor($data);
    $right = ($data - $left) * 0x10000;

    return $this->writeInt16($left) + $this->writeUInt16($right);
  }

  public function readLongDateTime() {
    $this->readUInt32(); // ignored
    $date = $this->readUInt32() - 2082844800;
    
    # PHP_INT_MIN isn't defined in PHP < 7.0
    $php_int_min = defined("PHP_INT_MIN") ? PHP_INT_MIN : ~PHP_INT_MAX;

    if (is_string($date) || $date > PHP_INT_MAX || $date < $php_int_min) {
      $date = 0;
    }

    return date("Y-m-d H:i:s", $date);
  }

  public function writeLongDateTime($data) {
    $date = strtotime($data);
    $date += 2082844800;

    return $this->writeUInt32(0) + $this->writeUInt32($date);
  }

  public function unpack($def) {
    $d = array();
    foreach ($def as $name => $type) {
      $d[$name] = $this->r($type);
    }

    return $d;
  }

  public function pack($def, $data) {
    $bytes = 0;
    foreach ($def as $name => $type) {
      $bytes += $this->w($type, $data[$name]);
    }

    return $bytes;
  }

  /**
   * Read a data of type $type in the file from the current position
   *
   * @param mixed $type The data type to read
   *
   * @return mixed The data that was read
   */
  public function r($type) {
    switch ($type) {
      case self::uint8:
        return $this->readUInt8();
      case self::int8:
        return $this->readInt8();
      case self::uint16:
        return $this->readUInt16();
      case self::int16:
        return $this->readInt16();
      case self::uint32:
        return $this->readUInt32();
      case self::int32:
        return $this->readUInt32();
      case self::shortFrac:
        return $this->readFixed();
      case self::Fixed:
        return $this->readFixed();
      case self::FWord:
        return $this->readInt16();
      case self::uFWord:
        return $this->readUInt16();
      case self::F2Dot14:
        return $this->readInt16();
      case self::longDateTime:
        return $this->readLongDateTime();
      case self::char:
        return $this->read(1);
      default:
        if (is_array($type)) {
          if ($type[0] == self::char) {
            return $this->read($type[1]);
          }
          if ($type[0] == self::uint16) {
            return $this->readUInt16Many($type[1]);
          }
          if ($type[0] == self::int16) {
            return $this->readInt16Many($type[1]);
          }
          if ($type[0] == self::uint8) {
            return $this->readUInt8Many($type[1]);
          }
          if ($type[0] == self::int8) {
            return $this->readInt8Many($type[1]);
          }

          $ret = array();
          for ($i = 0; $i < $type[1]; $i++) {
            $ret[] = $this->r($type[0]);
          }

          return $ret;
        }

        return null;
    }
  }

  /**
   * Write $data of type $type in the file from the current position
   *
   * @param mixed $type The data type to write
   * @param mixed $data The data to write
   *
   * @return int The number of bytes read
   */
  public function w($type, $data) {
    switch ($type) {
      case self::uint8:
        return $this->writeUInt8($data);
      case self::int8:
        return $this->writeInt8($data);
      case self::uint16:
        return $this->writeUInt16($data);
      case self::int16:
        return $this->writeInt16($data);
      case self::uint32:
        return $this->writeUInt32($data);
      case self::int32:
        return $this->writeUInt32($data);
      case self::shortFrac:
        return $this->writeFixed($data);
      case self::Fixed:
        return $this->writeFixed($data);
      case self::FWord:
        return $this->writeInt16($data);
      case self::uFWord:
        return $this->writeUInt16($data);
      case self::F2Dot14:
        return $this->writeInt16($data);
      case self::longDateTime:
        return $this->writeLongDateTime($data);
      case self::char:
        return $this->write($data, 1);
      default:
        if (is_array($type)) {
          if ($type[0] == self::char) {
            return $this->write($data, $type[1]);
          }

          $ret = 0;
          for ($i = 0; $i < $type[1]; $i++) {
            if (isset($data[$i])) {
              $ret += $this->w($type[0], $data[$i]);
            }
          }

          return $ret;
        }

        return null;
    }
  }

  /**
   * Converts a Uint32 value to string
   *
   * @param int $uint32
   *
   * @return string The string
   */
  public function convertUInt32ToStr($uint32) {
    return chr(($uint32 >> 24) & 0xFF) . chr(($uint32 >> 16) & 0xFF) . chr(($uint32 >> 8) & 0xFF) . chr($uint32 & 0xFF);
  }
}
<?php
/**
 * @package php-font-lib
 * @link    https://github.com/dompdf/php-font-lib
 * @author  Fabien Ménager <fabien.menager@gmail.com>
 * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
 */

namespace FontLib\EOT;

/**
 * EOT font file.
 *
 * @package php-font-lib
 */
class File extends \FontLib\TrueType\File {
  const TTEMBED_SUBSET                   = 0x00000001;
  const TTEMBED_TTCOMPRESSED             = 0x00000004;
  const TTEMBED_FAILIFVARIATIONSIMULATED = 0x00000010;
  const TTMBED_EMBEDEUDC                 = 0x00000020;
  const TTEMBED_VALIDATIONTESTS          = 0x00000040; // Deprecated
  const TTEMBED_WEBOBJECT      = 0x00000080;
  const TTEMBED_XORENCRYPTDATA = 0x10000000;

  /**
   * @var Header
   */
  public $header;

  function parseHeader() {
    if (!empty($this->header)) {
      return;
    }

    $this->header = new Header($this);
    $this->header->parse();
  }

  function parse() {
    $this->parseHeader();

    $flags = $this->header->data["Flags"];

    if ($flags & self::TTEMBED_TTCOMPRESSED) {
      $mtx_version    = $this->readUInt8();
      $mtx_copy_limit = $this->readUInt8() << 16 | $this->readUInt8() << 8 | $this->readUInt8();
      $mtx_offset_1   = $this->readUInt8() << 16 | $this->readUInt8() << 8 | $this->readUInt8();
      $mtx_offset_2   = $this->readUInt8() << 16 | $this->readUInt8() << 8 | $this->readUInt8();
      /*
      var_dump("$mtx_version $mtx_copy_limit $mtx_offset_1 $mtx_offset_2");

      $pos = $this->pos();
      $size = $mtx_offset_1 - $pos;
      var_dump("pos: $pos");
      var_dump("size: $size");*/
    }

    if ($flags & self::TTEMBED_XORENCRYPTDATA) {
      // Process XOR
    }
    // TODO Read font data ...
  }

  /**
   * Little endian version of the read method
   *
   * @param int $n The number of bytes to read
   *
   * @return string
   */
  public function read($n) {
    if ($n < 1) {
      return "";
    }

    $string = (string) fread($this->f, $n);
    $chunks = mb_str_split($string, 2, '8bit');
    $chunks = array_map("strrev", $chunks);
    return implode("", $chunks);
  }

  public function readUInt32() {
    $uint32 = parent::readUInt32();

    return $uint32 >> 16 & 0x0000FFFF | $uint32 << 16 & 0xFFFF0000;
  }

  /**
   * Get font copyright
   *
   * @return string|null
   */
  function getFontCopyright() {
    return null;
  }

  /**
   * Get font name
   *
   * @return string|null
   */
  function getFontName() {
    return $this->header->data["FamilyName"];
  }

  /**
   * Get font subfamily
   *
   * @return string|null
   */
  function getFontSubfamily() {
    return $this->header->data["StyleName"];
  }

  /**
   * Get font subfamily ID
   *
   * @return string|null
   */
  function getFontSubfamilyID() {
    return $this->header->data["StyleName"];
  }

  /**
   * Get font full name
   *
   * @return string|null
   */
  function getFontFullName() {
    return $this->header->data["FullName"];
  }

  /**
   * Get font version
   *
   * @return string|null
   */
  function getFontVersion() {
    return $this->header->data["VersionName"];
  }

  /**
   * Get font weight
   *
   * @return string|null
   */
  function getFontWeight() {
    return $this->header->data["Weight"];
  }

  /**
   * Get font Postscript name
   *
   * @return string|null
   */
  function getFontPostscriptName() {
    return null;
  }
}
<?php
/**
 * @package php-font-lib
 * @link    https://github.com/dompdf/php-font-lib
 * @author  Fabien Ménager <fabien.menager@gmail.com>
 * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
 */

namespace FontLib\EOT;

use Exception;
use FontLib\Font;

/**
 * TrueType font file header.
 *
 * @package php-font-lib
 *
 * @property File $font
 */
class Header extends \FontLib\Header {
  protected $def = array(
    "format"        => self::uint32,
    "numTables"     => self::uint16,
    "searchRange"   => self::uint16,
    "entrySelector" => self::uint16,
    "rangeShift"    => self::uint16,
  );

  public function parse() {
    $font = $this->font;

    $this->data = $font->unpack(array(
      "EOTSize"            => self::uint32,
      "FontDataSize"       => self::uint32,
      "Version"            => self::uint32,
      "Flags"              => self::uint32,
      "FontPANOSE"         => array(self::uint8, 10),
      "Charset"            => self::uint8,
      "Italic"             => self::uint8,
      "Weight"             => self::uint32,
      "fsType"             => self::uint16,
      "MagicNumber"        => self::uint16,
      "UnicodeRange1"      => self::uint32,
      "UnicodeRange2"      => self::uint32,
      "UnicodeRange3"      => self::uint32,
      "UnicodeRange4"      => self::uint32,
      "CodePageRange1"     => self::uint32,
      "CodePageRange2"     => self::uint32,
      "CheckSumAdjustment" => self::uint32,
      "Reserved1"          => self::uint32,
      "Reserved2"          => self::uint32,
      "Reserved3"          => self::uint32,
      "Reserved4"          => self::uint32,
    ));

    $this->data["Padding1"] = $font->readUInt16();
    $this->readString("FamilyName");

    $this->data["Padding2"] = $font->readUInt16();
    $this->readString("StyleName");

    $this->data["Padding3"] = $font->readUInt16();
    $this->readString("VersionName");

    $this->data["Padding4"] = $font->readUInt16();
    $this->readString("FullName");

    switch ($this->data["Version"]) {
      default:
        throw new Exception("Unknown EOT version " . $this->data["Version"]);

      case 0x00010000:
        // Nothing to do more
        break;

      case 0x00020001:
        $this->data["Padding5"] = $font->readUInt16();
        $this->readString("RootString");
        break;

      case 0x00020002:
        $this->data["Padding5"] = $font->readUInt16();
        $this->readString("RootString");

        $this->data["RootStringCheckSum"] = $font->readUInt32();
        $this->data["EUDCCodePage"]       = $font->readUInt32();

        $this->data["Padding6"] = $font->readUInt16();
        $this->readString("Signature");

        $this->data["EUDCFlags"]    = $font->readUInt32();
        $this->data["EUDCFontSize"] = $font->readUInt32();
        break;
    }

    if (!empty($this->data["RootString"])) {
      $this->data["RootString"] = explode("\0", $this->data["RootString"]);
    }
  }

  private function readString($name) {
    $font = $this->font;
    $size = $font->readUInt16();

    $this->data["{$name}Size"] = $size;
    $this->data[$name]         = Font::UTF16ToUTF8($font->read($size));
  }

  public function encode() {
    //return $this->font->pack($this->def, $this->data);
  }
}<?php
/**
 * @package php-font-lib
 * @link    https://github.com/dompdf/php-font-lib
 * @author  Fabien Ménager <fabien.menager@gmail.com>
 * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
 */

namespace FontLib;

/**
 * Encoding map used to map a code point to a Unicode char.
 *
 * @package php-font-lib
 */
class EncodingMap {
  private $f;

  function __construct($file) {
    $this->f = fopen($file, "r");
  }

  function parse() {
    $map = array();

    while ($line = fgets($this->f)) {
      if (preg_match('/^[\!\=]([0-9A-F]{2,})\s+U\+([0-9A-F]{2})([0-9A-F]{2})\s+([^\s]+)/', $line, $matches)) {
        $unicode = (hexdec($matches[2]) << 8) + hexdec($matches[3]);
        $map[hexdec($matches[1])] = array($unicode, $matches[4]);
      }
    }

    ksort($map);

    return $map;
  }
}
<?php

namespace FontLib\Exception;

class FontNotFoundException extends \Exception
{
    public function __construct($fontPath)
    {
        $this->message = 'Font not found in: ' . $fontPath;
    }
}<?php
/**
 * @package php-font-lib
 * @link    https://github.com/dompdf/php-font-lib
 * @author  Fabien Ménager <fabien.menager@gmail.com>
 * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
 */

namespace FontLib;

use FontLib\Exception\FontNotFoundException;

/**
 * Generic font file.
 *
 * @package php-font-lib
 */
class Font {
  static $debug = false;

  /**
   * @param string $file The font file
   *
   * @return TrueType\File|null $file
   */
  public static function load($file) {
      if(!file_exists($file)){
          throw new FontNotFoundException($file);
      }

    $header = file_get_contents($file, false, null, 0, 4);
    $class  = null;

    switch ($header) {
      case "\x00\x01\x00\x00":
      case "true":
      case "typ1":
        $class = "TrueType\\File";
        break;

      case "OTTO":
        $class = "OpenType\\File";
        break;

      case "wOFF":
        $class = "WOFF\\File";
        break;

      case "ttcf":
        $class = "TrueType\\Collection";
        break;

      // Unknown type or EOT
      default:
        $magicNumber = file_get_contents($file, false, null, 34, 2);

        if ($magicNumber === "LP") {
          $class = "EOT\\File";
        }
    }

    if ($class) {
      $class = "FontLib\\$class";

      /** @var TrueType\File $obj */
      $obj = new $class;
      $obj->load($file);

      return $obj;
    }

    return null;
  }

  static function d($str) {
    if (!self::$debug) {
      return;
    }
    echo "$str\n";
  }

  static function UTF16ToUTF8($str) {
    return mb_convert_encoding($str, "utf-8", "utf-16");
  }

  static function UTF8ToUTF16($str) {
    return mb_convert_encoding($str, "utf-16", "utf-8");
  }
}
<?php
/**
 * @package php-font-lib
 * @link    https://github.com/dompdf/php-font-lib
 * @author  Fabien Ménager <fabien.menager@gmail.com>
 * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
 * @version $Id: Font_Table_glyf.php 46 2012-04-02 20:22:38Z fabien.menager $
 */
namespace FontLib\Glyph;

use FontLib\Table\Type\glyf;
use FontLib\TrueType\File;
use FontLib\BinaryStream;

/**
 * `glyf` font table.
 *
 * @package php-font-lib
 */
class Outline extends BinaryStream {
  /**
   * @var \FontLib\Table\Type\glyf
   */
  protected $table;

  protected $offset;
  protected $size;

  // Data
  public $numberOfContours;
  public $xMin;
  public $yMin;
  public $xMax;
  public $yMax;

  /**
   * @var string|null
   */
  public $raw;

  /**
   * @param glyf $table
   * @param                 $offset
   * @param                 $size
   *
   * @return Outline
   */
  static function init(glyf $table, $offset, $size, BinaryStream $font) {
    $font->seek($offset);

    if ($size === 0 || $font->readInt16() > -1) {
      /** @var OutlineSimple $glyph */
      $glyph = new OutlineSimple($table, $offset, $size);
    }
    else {
      /** @var OutlineComposite $glyph */
      $glyph = new OutlineComposite($table, $offset, $size);
    }

    $glyph->parse($font);

    return $glyph;
  }

  /**
   * @return File
   */
  function getFont() {
    return $this->table->getFont();
  }

  function __construct(glyf $table, $offset = null, $size = null) {
    $this->table  = $table;
    $this->offset = $offset;
    $this->size   = $size;
  }

  function parse(BinaryStream $font) {
    $font->seek($this->offset);

      $this->raw = $font->read($this->size);
  }

  function parseData() {
    $font = $this->getFont();
    $font->seek($this->offset);

    $this->numberOfContours = $font->readInt16();
    $this->xMin             = $font->readFWord();
    $this->yMin             = $font->readFWord();
    $this->xMax             = $font->readFWord();
    $this->yMax             = $font->readFWord();
  }

  function encode() {
    $font = $this->getFont();

    return $font->write($this->raw, mb_strlen((string) $this->raw, '8bit'));
  }

  function getSVGContours() {
    // Inherit
  }

  function getGlyphIDs() {
    return array();
  }
}

<?php
/**
 * @package php-font-lib
 * @link    https://github.com/dompdf/php-font-lib
 * @author  Fabien Ménager <fabien.menager@gmail.com>
 * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
 * @version $Id: Font_Table_glyf.php 46 2012-04-02 20:22:38Z fabien.menager $
 */

namespace FontLib\Glyph;
/**
 * Glyph outline component
 *
 * @package php-font-lib
 */
class OutlineComponent {
  public $flags;
  public $glyphIndex;
  public $a, $b, $c, $d, $e, $f;
  public $point_compound;
  public $point_component;
  public $instructions;

  function getMatrix() {
    return array(
      $this->a, $this->b,
      $this->c, $this->d,
      $this->e, $this->f,
    );
  }
}<?php
/**
 * @package php-font-lib
 * @link    https://github.com/dompdf/php-font-lib
 * @author  Fabien Ménager <fabien.menager@gmail.com>
 * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
 * @version $Id: Font_Table_glyf.php 46 2012-04-02 20:22:38Z fabien.menager $
 */

namespace FontLib\Glyph;

/**
 * Composite glyph outline
 *
 * @package php-font-lib
 */
class OutlineComposite extends Outline {
  const ARG_1_AND_2_ARE_WORDS    = 0x0001;
  const ARGS_ARE_XY_VALUES       = 0x0002;
  const ROUND_XY_TO_GRID         = 0x0004;
  const WE_HAVE_A_SCALE          = 0x0008;
  const MORE_COMPONENTS          = 0x0020;
  const WE_HAVE_AN_X_AND_Y_SCALE = 0x0040;
  const WE_HAVE_A_TWO_BY_TWO     = 0x0080;
  const WE_HAVE_INSTRUCTIONS     = 0x0100;
  const USE_MY_METRICS           = 0x0200;
  const OVERLAP_COMPOUND         = 0x0400;

  /**
   * @var OutlineComponent[]
   */
  public $components = array();

  function getGlyphIDs() {
    if (empty($this->components)) {
      $this->parseData();
    }

    $glyphIDs = array();
    foreach ($this->components as $_component) {
      $glyphIDs[] = $_component->glyphIndex;

      $_glyph   = $this->table->data[$_component->glyphIndex];

      if ($_glyph !== $this) {
        $glyphIDs = array_merge($glyphIDs, $_glyph->getGlyphIDs());
      }
    }

    return $glyphIDs;
  }

  /*function parse() {
    //$this->parseData();
  }*/

  function parseData() {
    parent::parseData();

    $font = $this->getFont();

    do {
      $flags      = $font->readUInt16();
      $glyphIndex = $font->readUInt16();

      $a = 1.0;
      $b = 0.0;
      $c = 0.0;
      $d = 1.0;
      $e = 0.0;
      $f = 0.0;

      $point_compound  = null;
      $point_component = null;

      $instructions = null;

      if ($flags & self::ARG_1_AND_2_ARE_WORDS) {
        if ($flags & self::ARGS_ARE_XY_VALUES) {
          $e = $font->readInt16();
          $f = $font->readInt16();
        }
        else {
          $point_compound  = $font->readUInt16();
          $point_component = $font->readUInt16();
        }
      }
      else {
        if ($flags & self::ARGS_ARE_XY_VALUES) {
          $e = $font->readInt8();
          $f = $font->readInt8();
        }
        else {
          $point_compound  = $font->readUInt8();
          $point_component = $font->readUInt8();
        }
      }

      if ($flags & self::WE_HAVE_A_SCALE) {
        $a = $d = $font->readInt16();
      }
      elseif ($flags & self::WE_HAVE_AN_X_AND_Y_SCALE) {
        $a = $font->readInt16();
        $d = $font->readInt16();
      }
      elseif ($flags & self::WE_HAVE_A_TWO_BY_TWO) {
        $a = $font->readInt16();
        $b = $font->readInt16();
        $c = $font->readInt16();
        $d = $font->readInt16();
      }

      //if ($flags & self::WE_HAVE_INSTRUCTIONS) {
      //
      //}

      $component                  = new OutlineComponent();
      $component->flags           = $flags;
      $component->glyphIndex      = $glyphIndex;
      $component->a               = $a;
      $component->b               = $b;
      $component->c               = $c;
      $component->d               = $d;
      $component->e               = $e;
      $component->f               = $f;
      $component->point_compound  = $point_compound;
      $component->point_component = $point_component;
      $component->instructions    = $instructions;

      $this->components[] = $component;
    } while ($flags & self::MORE_COMPONENTS);
    if ($flags & self::WE_HAVE_INSTRUCTIONS) {
      $numInstr = $font->readUInt16();
      $instr = $font->read($numInstr);
      $this->components[count($this->components) - 1]->instructions = pack('n', $numInstr) . $instr;
    }
  }

  function encode() {
    $font = $this->getFont();

    $gids = $font->getSubset();

    $size = $font->writeInt16(-1);
    $size += $font->writeFWord($this->xMin);
    $size += $font->writeFWord($this->yMin);
    $size += $font->writeFWord($this->xMax);
    $size += $font->writeFWord($this->yMax);

    foreach ($this->components as $_i => $_component) {
      $flags = 0;
      if ($_component->point_component === null && $_component->point_compound === null) {
        $flags |= self::ARGS_ARE_XY_VALUES;

        if (abs($_component->e) > 0x7F || abs($_component->f) > 0x7F) {
          $flags |= self::ARG_1_AND_2_ARE_WORDS;
        }
      }
      elseif ($_component->point_component > 0xFF || $_component->point_compound > 0xFF) {
        $flags |= self::ARG_1_AND_2_ARE_WORDS;
      }

      if ($_component->b == 0 && $_component->c == 0) {
        if ($_component->a == $_component->d) {
          if ($_component->a != 1.0) {
            $flags |= self::WE_HAVE_A_SCALE;
          }
        }
        else {
          $flags |= self::WE_HAVE_AN_X_AND_Y_SCALE;
        }
      }
      else {
        $flags |= self::WE_HAVE_A_TWO_BY_TWO;
      }

      if ($_i < count($this->components) - 1) {
        $flags |= self::MORE_COMPONENTS;
      } elseif($_component->instructions !== null) {
        $flags |= self::WE_HAVE_INSTRUCTIONS;
      }

      $size += $font->writeUInt16($flags);

      $new_gid = array_search($_component->glyphIndex, $gids);
      $size += $font->writeUInt16($new_gid);

      if ($flags & self::ARG_1_AND_2_ARE_WORDS) {
        if ($flags & self::ARGS_ARE_XY_VALUES) {
          $size += $font->writeInt16($_component->e);
          $size += $font->writeInt16($_component->f);
        }
        else {
          $size += $font->writeUInt16($_component->point_compound);
          $size += $font->writeUInt16($_component->point_component);
        }
      }
      else {
        if ($flags & self::ARGS_ARE_XY_VALUES) {
          $size += $font->writeInt8($_component->e);
          $size += $font->writeInt8($_component->f);
        }
        else {
          $size += $font->writeUInt8($_component->point_compound);
          $size += $font->writeUInt8($_component->point_component);
        }
      }

      if ($flags & self::WE_HAVE_A_SCALE) {
        $size += $font->writeInt16($_component->a);
      }
      elseif ($flags & self::WE_HAVE_AN_X_AND_Y_SCALE) {
        $size += $font->writeInt16($_component->a);
        $size += $font->writeInt16($_component->d);
      }
      elseif ($flags & self::WE_HAVE_A_TWO_BY_TWO) {
        $size += $font->writeInt16($_component->a);
        $size += $font->writeInt16($_component->b);
        $size += $font->writeInt16($_component->c);
        $size += $font->writeInt16($_component->d);
      }
    }

    if($_component->instructions !== null) {
      $size += $font->write($_component->instructions, strlen($_component->instructions));
    }

    return $size;
  }

  public function getSVGContours() {
    $contours = array();

    /** @var \FontLib\Table\Type\glyf $glyph_data */
    $glyph_data = $this->getFont()->getTableObject("glyf");

    /** @var Outline[] $glyphs */
    $glyphs = $glyph_data->data;

    foreach ($this->components as $component) {
      $_glyph = $glyphs[$component->glyphIndex];

      if ($_glyph !== $this) {
        $contours[] = array(
          "contours"  => $_glyph->getSVGContours(),
          "transform" => $component->getMatrix(),
        );
      }
    }

    return $contours;
  }
}<?php
/**
 * @package php-font-lib
 * @link    https://github.com/dompdf/php-font-lib
 * @author  Fabien Ménager <fabien.menager@gmail.com>
 * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
 * @version $Id: Font_Table_glyf.php 46 2012-04-02 20:22:38Z fabien.menager $
 */

namespace FontLib\Glyph;

/**
 * `glyf` font table.
 *
 * @package php-font-lib
 */
class OutlineSimple extends Outline {
  const ON_CURVE       = 0x01;
  const X_SHORT_VECTOR = 0x02;
  const Y_SHORT_VECTOR = 0x04;
  const REPEAT         = 0x08;
  const THIS_X_IS_SAME = 0x10;
  const THIS_Y_IS_SAME = 0x20;

  public $instructions;
  public $points;

  function parseData() {
    parent::parseData();

    if (!$this->size) {
      return;
    }

    $font = $this->getFont();

    $noc = $this->numberOfContours;

    if ($noc == 0) {
      return;
    }

    $endPtsOfContours = $font->r(array(self::uint16, $noc));

    $instructionLength  = $font->readUInt16();
    $this->instructions = $font->r(array(self::uint8, $instructionLength));

    $count = $endPtsOfContours[$noc - 1] + 1;

    // Flags
    $flags = array();
    for ($index = 0; $index < $count; $index++) {
      $flags[$index] = $font->readUInt8();

      if ($flags[$index] & self::REPEAT) {
        $repeats = $font->readUInt8();

        for ($i = 1; $i <= $repeats; $i++) {
          $flags[$index + $i] = $flags[$index];
        }

        $index += $repeats;
      }
    }

    $points = array();
    foreach ($flags as $i => $flag) {
      $points[$i]["onCurve"]      = $flag & self::ON_CURVE;
      $points[$i]["endOfContour"] = in_array($i, $endPtsOfContours);
    }

    // X Coords
    $x = 0;
    for ($i = 0; $i < $count; $i++) {
      $flag = $flags[$i];

      if ($flag & self::THIS_X_IS_SAME) {
        if ($flag & self::X_SHORT_VECTOR) {
          $x += $font->readUInt8();
        }
      }
      else {
        if ($flag & self::X_SHORT_VECTOR) {
          $x -= $font->readUInt8();
        }
        else {
          $x += $font->readInt16();
        }
      }

      $points[$i]["x"] = $x;
    }

    // Y Coords
    $y = 0;
    for ($i = 0; $i < $count; $i++) {
      $flag = $flags[$i];

      if ($flag & self::THIS_Y_IS_SAME) {
        if ($flag & self::Y_SHORT_VECTOR) {
          $y += $font->readUInt8();
        }
      }
      else {
        if ($flag & self::Y_SHORT_VECTOR) {
          $y -= $font->readUInt8();
        }
        else {
          $y += $font->readInt16();
        }
      }

      $points[$i]["y"] = $y;
    }

    $this->points = $points;
  }

  public function splitSVGPath($path) {
    preg_match_all('/([a-z])|(-?\d+(?:\.\d+)?)/i', $path, $matches, PREG_PATTERN_ORDER);

    return $matches[0];
  }

  public function makePoints($path) {
    $path = $this->splitSVGPath($path);
    $l    = count($path);
    $i    = 0;

    $points = array();

    while ($i < $l) {
      switch ($path[$i]) {
        // moveTo
        case "M":
          $points[] = array(
            "onCurve"      => true,
            "x"            => $path[++$i],
            "y"            => $path[++$i],
            "endOfContour" => false,
          );
          break;

        // lineTo
        case "L":
          $points[] = array(
            "onCurve"      => true,
            "x"            => $path[++$i],
            "y"            => $path[++$i],
            "endOfContour" => false,
          );
          break;

        // quadraticCurveTo
        case "Q":
          $points[] = array(
            "onCurve"      => false,
            "x"            => $path[++$i],
            "y"            => $path[++$i],
            "endOfContour" => false,
          );
          $points[] = array(
            "onCurve"      => true,
            "x"            => $path[++$i],
            "y"            => $path[++$i],
            "endOfContour" => false,
          );
          break;

        // closePath
        /** @noinspection PhpMissingBreakStatementInspection */
        case "z":
          $points[count($points) - 1]["endOfContour"] = true;

        default:
          $i++;
          break;
      }
    }

    return $points;
  }

  function encode() {
    if (empty($this->points)) {
      return parent::encode();
    }

    return $this->size = $this->encodePoints($this->points);
  }

  public function encodePoints($points) {
    $endPtsOfContours = array();
    $flags            = array();
    $coords_x         = array();
    $coords_y         = array();

    $last_x = 0;
    $last_y = 0;
    $xMin   = $yMin = 0xFFFF;
    $xMax   = $yMax = -0xFFFF;
    foreach ($points as $i => $point) {
      $flag = 0;
      if ($point["onCurve"]) {
        $flag |= self::ON_CURVE;
      }

      if ($point["endOfContour"]) {
        $endPtsOfContours[] = $i;
      }

      // Simplified, we could do some optimizations
      if ($point["x"] == $last_x) {
        $flag |= self::THIS_X_IS_SAME;
      }
      else {
        $x          = intval($point["x"]);
        $xMin       = min($x, $xMin);
        $xMax       = max($x, $xMax);
        $coords_x[] = $x - $last_x; // int16
      }

      // Simplified, we could do some optimizations
      if ($point["y"] == $last_y) {
        $flag |= self::THIS_Y_IS_SAME;
      }
      else {
        $y          = intval($point["y"]);
        $yMin       = min($y, $yMin);
        $yMax       = max($y, $yMax);
        $coords_y[] = $y - $last_y; // int16
      }

      $flags[] = $flag;
      $last_x  = $point["x"];
      $last_y  = $point["y"];
    }

    $font = $this->getFont();

    $l = 0;
    $l += $font->writeInt16(count($endPtsOfContours)); // endPtsOfContours
    $l += $font->writeFWord(isset($this->xMin) ? $this->xMin : $xMin); // xMin
    $l += $font->writeFWord(isset($this->yMin) ? $this->yMin : $yMin); // yMin
    $l += $font->writeFWord(isset($this->xMax) ? $this->xMax : $xMax); // xMax
    $l += $font->writeFWord(isset($this->yMax) ? $this->yMax : $yMax); // yMax

    // Simple glyf
    $l += $font->w(array(self::uint16, count($endPtsOfContours)), $endPtsOfContours); // endPtsOfContours
    $l += $font->writeUInt16(0); // instructionLength
    $l += $font->w(array(self::uint8, count($flags)), $flags); // flags
    $l += $font->w(array(self::int16, count($coords_x)), $coords_x); // xCoordinates
    $l += $font->w(array(self::int16, count($coords_y)), $coords_y); // yCoordinates
    return $l;
  }

  public function getSVGContours($points = null) {
    $path = "";

    if (!$points) {
      if (empty($this->points)) {
        $this->parseData();
      }

      $points = $this->points;
    }

    $length     = (empty($points) ? 0 : count($points));
    $firstIndex = 0;
    $count      = 0;

    for ($i = 0; $i < $length; $i++) {
      $count++;

      if ($points[$i]["endOfContour"]) {
        $path .= $this->getSVGPath($points, $firstIndex, $count);
        $firstIndex = $i + 1;
        $count      = 0;
      }
    }

    return $path;
  }

  protected function getSVGPath($points, $startIndex, $count) {
    $offset = 0;
    $path   = "";

    while ($offset < $count) {
      $point    = $points[$startIndex + $offset % $count];
      $point_p1 = $points[$startIndex + ($offset + 1) % $count];

      if ($offset == 0) {
        $path .= "M{$point['x']},{$point['y']} ";
      }

      if ($point["onCurve"]) {
        if ($point_p1["onCurve"]) {
          $path .= "L{$point_p1['x']},{$point_p1['y']} ";
          $offset++;
        }
        else {
          $point_p2 = $points[$startIndex + ($offset + 2) % $count];

          if ($point_p2["onCurve"]) {
            $path .= "Q{$point_p1['x']},{$point_p1['y']},{$point_p2['x']},{$point_p2['y']} ";
          }
          else {
            $path .= "Q{$point_p1['x']},{$point_p1['y']}," . $this->midValue($point_p1['x'], $point_p2['x']) . "," . $this->midValue($point_p1['y'], $point_p2['y']) . " ";
          }

          $offset += 2;
        }
      }
      else {
        if ($point_p1["onCurve"]) {
          $path .= "Q{$point['x']},{$point['y']},{$point_p1['x']},{$point_p1['y']} ";
        }
        else {
          $path .= "Q{$point['x']},{$point['y']}," . $this->midValue($point['x'], $point_p1['x']) . "," . $this->midValue($point['y'], $point_p1['y']) . " ";
        }

        $offset++;
      }
    }

    $path .= "z ";

    return $path;
  }

  function midValue($a, $b) {
    return $a + ($b - $a) / 2;
  }
}
<?php
/**
 * @package php-font-lib
 * @link    https://github.com/dompdf/php-font-lib
 * @author  Fabien Ménager <fabien.menager@gmail.com>
 * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
 */
namespace FontLib;

use FontLib\TrueType\File;

/**
 * Font header container.
 *
 * @package php-font-lib
 */
abstract class Header extends BinaryStream {
  /**
   * @var File
   */
  protected $font;
  protected $def = array();

  public $data;

  public function __construct(File $font) {
    $this->font = $font;
  }

  public function encode() {
    return $this->font->pack($this->def, $this->data);
  }

  public function parse() {
    $this->data = $this->font->unpack($this->def);
  }
}<?php
/**
 * @package php-font-lib
 * @link    https://github.com/dompdf/php-font-lib
 * @author  Fabien Ménager <fabien.menager@gmail.com>
 * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
 */

namespace FontLib\OpenType;

/**
 * Open Type font, the same as a TrueType one.
 *
 * @package php-font-lib
 */
class File extends \FontLib\TrueType\File {
  //
}
<?php
/**
 * @package php-font-lib
 * @link    https://github.com/dompdf/php-font-lib
 * @author  Fabien Ménager <fabien.menager@gmail.com>
 * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
 */

namespace FontLib\OpenType;

/**
 * Open Type Table directory entry, the same as a TrueType one.
 *
 * @package php-font-lib
 */
class TableDirectoryEntry extends \FontLib\TrueType\TableDirectoryEntry {

}
<?php
/**
 * @package php-font-lib
 * @link    https://github.com/dompdf/php-font-lib
 * @author  Fabien Ménager <fabien.menager@gmail.com>
 * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
 */
namespace FontLib\Table;

use FontLib\TrueType\File;
use FontLib\Font;
use FontLib\BinaryStream;

/**
 * Generic Font table directory entry.
 *
 * @package php-font-lib
 */
class DirectoryEntry extends BinaryStream {
  /**
   * @var File
   */
  protected $font;

  /**
   * @var Table
   */
  protected $font_table;

  public $entryLength = 4;

  public $tag;
  public $checksum;
  public $offset;
  public $length;

  protected $origF;

  /**
   * @param string $data
   *
   * @return int
   */
  static function computeChecksum($data) {
    $len = mb_strlen($data, '8bit');
    $mod = $len % 4;

    if ($mod) {
      $data = str_pad($data, $len + (4 - $mod), "\0");
    }

    $table = unpack("N*", $data);
    return array_sum($table);
  }

  function __construct(File $font) {
    $this->font = $font;
    $this->f    = $font->f;
  }

  function parse() {
    $this->tag = $this->font->read(4);
  }

  function open($filename, $mode = self::modeRead) {
    // void
  }

  function setTable(Table $font_table) {
    $this->font_table = $font_table;
  }

  function encode($entry_offset) {
    Font::d("\n==== $this->tag ====");
    //Font::d("Entry offset  = $entry_offset");

    $data = $this->font_table;
    $font = $this->font;

    $table_offset = $font->pos();
    $this->offset = $table_offset;
    $table_length = $data->encode();

    $font->seek($table_offset + $table_length);
    $pad = 0;
    $mod = $table_length % 4;
    if ($mod != 0) {
      $pad = 4 - $mod;
      $font->write(str_pad("", $pad, "\0"), $pad);
    }

    $font->seek($table_offset);
    $table_data = $font->read($table_length);

    $font->seek($entry_offset);

    $font->write($this->tag, 4);
    $font->writeUInt32(self::computeChecksum($table_data));
    $font->writeUInt32($table_offset);
    $font->writeUInt32($table_length);

    Font::d("Bytes written = $table_length");

    $font->seek($table_offset + $table_length + $pad);
  }

  /**
   * @return File
   */
  function getFont() {
    return $this->font;
  }

  function startRead() {
    $this->font->seek($this->offset);
  }

  function endRead() {
    //
  }

  function startWrite() {
    $this->font->seek($this->offset);
  }

  function endWrite() {
    //
  }
}

<?php
/**
 * @package php-font-lib
 * @link    https://github.com/dompdf/php-font-lib
 * @author  Fabien Ménager <fabien.menager@gmail.com>
 * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
 */
namespace FontLib\Table;

use FontLib\TrueType\File;
use FontLib\Font;
use FontLib\BinaryStream;

/**
 * Generic font table.
 *
 * @package php-font-lib
 */
class Table extends BinaryStream {
  /**
   * @var DirectoryEntry
   */
  protected $entry;
  protected $def = array();

  public $data;

  final public function __construct(DirectoryEntry $entry) {
    $this->entry = $entry;
    $entry->setTable($this);
  }

  /**
   * @return File
   */
  public function getFont() {
    return $this->entry->getFont();
  }

  protected function _encode() {
    if (empty($this->data)) {
      Font::d("  >> Table is empty");

      return 0;
    }

    return $this->getFont()->pack($this->def, $this->data);
  }

  protected function _parse() {
    $this->data = $this->getFont()->unpack($this->def);
  }

  protected function _parseRaw() {
    $this->data = $this->getFont()->read($this->entry->length);
  }

  protected function _encodeRaw() {
    return $this->getFont()->write($this->data, $this->entry->length);
  }

  public function toHTML() {
    return "<pre>" . var_export($this->data, true) . "</pre>";
  }

  final public function encode() {
    $this->entry->startWrite();

    if (false && empty($this->def)) {
      $length = $this->_encodeRaw();
    }
    else {
      $length = $this->_encode();
    }

    $this->entry->endWrite();

    return $length;
  }

  final public function parse() {
    $this->entry->startRead();

    if (false && empty($this->def)) {
      $this->_parseRaw();
    }
    else {
      $this->_parse();
    }

    $this->entry->endRead();
  }
}<?php
/**
 * @package php-font-lib
 * @link    https://github.com/dompdf/php-font-lib
 * @author  Fabien Ménager <fabien.menager@gmail.com>
 * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
 */

namespace FontLib\Table\Type;
use FontLib\Table\Table;

/**
 * `cmap` font table.
 *
 * @package php-font-lib
 */
class cmap extends Table {
  private static $header_format = array(
    "version"         => self::uint16,
    "numberSubtables" => self::uint16,
  );

  private static $subtable_header_format = array(
    "platformID"         => self::uint16,
    "platformSpecificID" => self::uint16,
    "offset"             => self::uint32,
  );

  private static $subtable_v2_format = array(
    "length"        => self::uint16,
    "language"      => self::uint16
  );

  private static $subtable_v2_format_subheader = array(
    "firstCode"     => self::uint16,
    "entryCount"    => self::uint16,
    "idDelta"       => self::int16,
    "idRangeOffset" => self::uint16
  );

  private static $subtable_v4_format = array(
    "length"        => self::uint16,
    "language"      => self::uint16,
    "segCountX2"    => self::uint16,
    "searchRange"   => self::uint16,
    "entrySelector" => self::uint16,
    "rangeShift"    => self::uint16,
  );

  private static $subtable_v12_format = array(
    "length"        => self::uint32,
    "language"      => self::uint32,
    "ngroups"       => self::uint32
  );

  protected function _parse() {
    $font = $this->getFont();

    $cmap_offset = $font->pos();

    $data = $font->unpack(self::$header_format);

    $subtables = array();
    for ($i = 0; $i < $data["numberSubtables"]; $i++) {
      $subtables[] = $font->unpack(self::$subtable_header_format);
    }

    $data["subtables"] = $subtables;

    foreach ($data["subtables"] as $i => &$subtable) {
      $font->seek($cmap_offset + $subtable["offset"]);

      $subtable["format"] = $font->readUInt16();

      switch ($subtable["format"]) {
        case 0:
        case 6:
        case 8:
        case 10:
        case 13:
        case 14:
          unset($data["subtables"][$i]);
          $data["numberSubtables"]--;
          continue 2;

        case 2:
          $subtable += $font->unpack(self::$subtable_v2_format);

          $subHeaderKeys = array_map(function($val) { return $val / 8; }, $font->readUInt16Many(256));
          $subHeaders = array();

          $glyphIdArray = array();
          $maxSubHeaderIndex = max($subHeaderKeys);
          for ($i = 0; $i <= $maxSubHeaderIndex; $i++) {
            $subHeader = $font->unpack(self::$subtable_v2_format_subheader);
            $offset = $font->pos();
            $subHeader["glyphIdArrayOffset"] = $offset + $subHeader["idRangeOffset"] - 2;
            $subHeaders[$i] = $subHeader;

            if (!\array_key_exists($subHeader["glyphIdArrayOffset"], $glyphIdArray) || count($glyphIdArray[$subHeader["glyphIdArrayOffset"]]) < $subHeader["entryCount"]) {
              $font->seek($subHeader["glyphIdArrayOffset"]);
              $glyphIdArray[$subHeader["glyphIdArrayOffset"]] = $font->readUInt16Many($subHeader["entryCount"]);
              $font->seek($offset);
            }
          }

          $glyphIndexArray = array();
          foreach ($subHeaderKeys as $highByte => $subHeaderKey) {
            $subHeader = $subHeaders[$subHeaderKey];
            if ($subHeaderKey === 0) {
              $c = $highByte;
              if ($c < $subHeader["firstCode"] || $c >= ($subHeader["firstCode"] + $subHeader["entryCount"])) {
                $glyphIndexArray[$c] = 0;
                continue;
              }
              $c = $highByte;
              $index = $c - $subHeader["firstCode"];
              $glyphId = $glyphIdArray[$subHeader["glyphIdArrayOffset"]][$index];
              if ($glyphId === 0) {
                $glyphIndexArray[$c] = 0;
              } else {
                $glyphIndexArray[$c] = ($glyphId + $subHeader["idDelta"]) & 0xFFFF;
              }
            } else {
              for ($index = 0; $index < $subHeader["entryCount"]; $index++) {
                $c = null;
                $lowByte = $subHeader["firstCode"] + $index;
                $c = (($highByte & 0xFF) << 8) | ($lowByte & 0xFF);
                $glyphId = $glyphIdArray[$subHeader["glyphIdArrayOffset"]][$index];
                if ($glyphId === 0) {
                  $glyphIndexArray[$c] = 0;
                } else {
                  $glyphIndexArray[$c] = ($glyphId + $subHeader["idDelta"]) & 0xFFFF;
                }
              }
            }
          }

          $subtable += array(
            "subHeaderKeys" => $subHeaderKeys,
            "subHeaders" => $subHeaders,
            "glyphIdArray" => $glyphIdArray,
            "glyphIndexArray" => $glyphIndexArray
          );

          break;

        case 4:
          $subtable += $font->unpack(self::$subtable_v4_format);

          $segCount             = $subtable["segCountX2"] / 2;
          $subtable["segCount"] = $segCount;
  
          $endCode = $font->readUInt16Many($segCount);
  
          $font->readUInt16(); // reservedPad
  
          $startCode = $font->readUInt16Many($segCount);
          $idDelta   = $font->readInt16Many($segCount);
  
          $ro_start      = $font->pos();
          $idRangeOffset = $font->readUInt16Many($segCount);
  
          $glyphIndexArray = array();
          for ($i = 0; $i < $segCount; $i++) {
            $c1 = $startCode[$i];
            $c2 = $endCode[$i];
            $d  = $idDelta[$i];
            $ro = $idRangeOffset[$i];
  
            if ($ro > 0) {
              $font->seek($subtable["offset"] + 2 * $i + $ro);
            }
  
            for ($c = $c1; $c <= $c2; $c++) {
              if ($c === 0xFFFF) {
                continue;
              }
  
              if ($ro == 0) {
                $gid = ($c + $d) & 0xFFFF;
              }
              else {
                $offset = ($c - $c1) * 2 + $ro;
                $offset = $ro_start + 2 * $i + $offset;
  
                $gid = 0;
                if ($font->seek($offset) === true) {
                  $gid = $font->readUInt16();
                }
  
                if ($gid != 0) {
                  $gid = ($gid + $d) & 0xFFFF;
                }
              }
  
              if ($gid >= 0) {
                $glyphIndexArray[$c] = $gid;
              }
            }
          }
  
          $subtable += array(
            "endCode"         => $endCode,
            "startCode"       => $startCode,
            "idDelta"         => $idDelta,
            "idRangeOffset"   => $idRangeOffset,
            "glyphIndexArray" => $glyphIndexArray
          );
          break;

        case 12:
          $font->readUInt16();

          $subtable += $font->unpack(self::$subtable_v12_format);

          $glyphIndexArray = array();
          $endCodes = array();
          $startCodes = array();

          for ($p = 0; $p < $subtable['ngroups']; $p++) {

            $startCode = $startCodes[] = $font->readUInt32();
            $endCode = $endCodes[] = $font->readUInt32();
            $startGlyphCode = $font->readUInt32();

            for ($c = $startCode; $c <= $endCode; $c++) {
              $glyphIndexArray[$c] = $startGlyphCode;
              $startGlyphCode++;
            }
          }

          $subtable += array(
            "startCode" => $startCodes,
            "endCode" => $endCodes,
            "glyphIndexArray" => $glyphIndexArray,
          );
          break;
      }
    }

    $this->data = $data;
  }

  function _encode() {
    $font = $this->getFont();

    $subset          = $font->getSubset();
    $glyphIndexArray = $font->getUnicodeCharMap();

    $newGlyphIndexArray = array();
    foreach ($glyphIndexArray as $code => $gid) {
      $new_gid = array_search($gid, $subset);
      if ($new_gid !== false) {
        $newGlyphIndexArray[$code] = $new_gid;
      }
    }

    ksort($newGlyphIndexArray); // Sort by char code

    $segments = array();

    $i        = -1;
    $prevCode = 0xFFFF;
    $prevGid  = 0xFFFF;

    foreach ($newGlyphIndexArray as $code => $gid) {
      if (
        $prevCode + 1 != $code ||
        $prevGid + 1 != $gid
      ) {
        $i++;
        $segments[$i] = array();
      }

      $segments[$i][] = array($code, $gid);

      $prevCode = $code;
      $prevGid  = $gid;
    }

    $segments[][] = array(0xFFFF, null);

    $startCode = array();
    $endCode   = array();
    $idDelta   = array();

    foreach ($segments as $codes) {
      $start = reset($codes);
      $end   = end($codes);

      $startCode[] = $start[0];
      $endCode[]   = $end[0];
      $idDelta[]   = $start[1] - $start[0];
    }

    $segCount      = count($startCode);
    $idRangeOffset = array_fill(0, $segCount, 0);

    $searchRange   = 1;
    $entrySelector = 0;
    while ($searchRange * 2 <= $segCount) {
      $searchRange *= 2;
      $entrySelector++;
    }
    $searchRange *= 2;
    $rangeShift = $segCount * 2 - $searchRange;

    $subtables = array(
      array(
        // header
        "platformID"         => 3, // Unicode
        "platformSpecificID" => 1,
        "offset"             => null,

        // subtable
        "format"             => 4,
        "length"             => null,
        "language"           => 0,
        "segCount"           => $segCount,
        "segCountX2"         => $segCount * 2,
        "searchRange"        => $searchRange,
        "entrySelector"      => $entrySelector,
        "rangeShift"         => $rangeShift,
        "startCode"          => $startCode,
        "endCode"            => $endCode,
        "idDelta"            => $idDelta,
        "idRangeOffset"      => $idRangeOffset,
        "glyphIndexArray"    => $newGlyphIndexArray,
      )
    );

    $data = array(
      "version"         => 0,
      "numberSubtables" => count($subtables),
      "subtables"       => $subtables,
    );

    $length = $font->pack(self::$header_format, $data);

    $subtable_headers_size   = $data["numberSubtables"] * 8; // size of self::$subtable_header_format
    $subtable_headers_offset = $font->pos();

    $length += $font->write(str_repeat("\0", $subtable_headers_size), $subtable_headers_size);

    // write subtables data
    foreach ($data["subtables"] as $i => $subtable) {
      $length_before                   = $length;
      $data["subtables"][$i]["offset"] = $length;

      $length += $font->writeUInt16($subtable["format"]);

      $before_subheader = $font->pos();
      $length += $font->pack(self::$subtable_v4_format, $subtable);

      $segCount = $subtable["segCount"];
      $length += $font->w(array(self::uint16, $segCount), $subtable["endCode"]);
      $length += $font->writeUInt16(0); // reservedPad
      $length += $font->w(array(self::uint16, $segCount), $subtable["startCode"]);
      $length += $font->w(array(self::int16, $segCount), $subtable["idDelta"]);
      $length += $font->w(array(self::uint16, $segCount), $subtable["idRangeOffset"]);
      $length += $font->w(array(self::uint16, $segCount), array_values($subtable["glyphIndexArray"]));

      $after_subtable = $font->pos();

      $subtable["length"] = $length - $length_before;
      $font->seek($before_subheader);
      $font->pack(self::$subtable_v4_format, $subtable);

      $font->seek($after_subtable);
    }

    // write subtables headers
    $font->seek($subtable_headers_offset);
    foreach ($data["subtables"] as $subtable) {
      $font->pack(self::$subtable_header_format, $subtable);
    }

    return $length;
  }
}
<?php
/**
 * @package php-font-lib
 * @link    https://github.com/PhenX/php-font-lib
 * @author  Fabien Ménager <fabien.menager@gmail.com>
 * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
 */

namespace FontLib\Table\Type;
use FontLib\Table\Table;

/**
 * `cvt ` font table.
 *
 * @package php-font-lib
 */
class cvt extends Table {
  private $rawData;
  protected function _parse() {
    $font = $this->getFont();
    $font->seek($this->entry->offset);
    $this->rawData = $font->read($this->entry->length);
  }
  function _encode() {
    return $this->getFont()->write($this->rawData, $this->entry->length);
  }
}<?php
/**
 * @package php-font-lib
 * @link    https://github.com/PhenX/php-font-lib
 * @author  Fabien Ménager <fabien.menager@gmail.com>
 * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
 */

namespace FontLib\Table\Type;
use FontLib\Table\Table;

/**
 * `fpgm` font table.
 *
 * @package php-font-lib
 */
class fpgm extends Table {
  private $rawData;
  protected function _parse() {
    $font = $this->getFont();
    $font->seek($this->entry->offset);
    $this->rawData = $font->read($this->entry->length);
  }
  function _encode() {
    return $this->getFont()->write($this->rawData, $this->entry->length);
  }
}<?php
/**
 * @package php-font-lib
 * @link    https://github.com/dompdf/php-font-lib
 * @author  Fabien Ménager <fabien.menager@gmail.com>
 * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
 */

namespace FontLib\Table\Type;

use FontLib\Table\Table;
use FontLib\Glyph\Outline;
use FontLib\Glyph\OutlineSimple;

/**
 * `glyf` font table.
 *
 * @package php-font-lib
 * @property Outline[] $data
 */
class glyf extends Table {
  protected function _parse() {
    $font   = $this->getFont();
    $offset = $font->pos();

    $loca      = $font->getData("loca");
    $real_loca = array_slice($loca, 0, -1); // Not the last dummy loca entry

    $data = array();

    foreach ($real_loca as $gid => $location) {
      $_offset    = $offset + $loca[$gid];
      $_size      = $loca[$gid + 1] - $loca[$gid];
      $data[$gid] = Outline::init($this, $_offset, $_size, $font);
    }

    $this->data = $data;
  }

  public function getGlyphIDs($gids = array()) {
    $glyphIDs = array();

    foreach ($gids as $_gid) {
      $_glyph   = $this->data[$_gid];
      $glyphIDs = array_merge($glyphIDs, $_glyph->getGlyphIDs());
    }

    return array_unique(array_merge($gids, $glyphIDs));
  }

  public function toHTML($n = 500) {
    $max  = 160;
    $font = $this->getFont();

    $head      = $font->getData("head");
    $head_json = json_encode($head);

    $os2      = $font->getData("OS/2");
    $os2_json = json_encode($os2);

    $hmtx      = $font->getData("hmtx");
    $hmtx_json = json_encode($hmtx);

    $names           = $font->getData("post", "names");
    $glyphIndexArray = array_flip($font->getUnicodeCharMap());

    $width  = (abs($head["xMin"]) + $head["xMax"]);
    $height = (abs($head["yMin"]) + $head["yMax"]);

    $ratio = 1;
    if ($width > $max || $height > $max) {
      $ratio  = max($width, $height) / $max;
      $width  = round($width / $ratio);
      $height = round($height / $ratio);
    }

    $s = "<h3>" . "Only the first $n simple glyphs are shown (" . count($this->data) . " total)
    <div class='glyph-view simple'>Simple glyph</div>
    <div class='glyph-view composite'>Composite glyph</div>
    Zoom: <input type='range' value='100' max='400' onchange='Glyph.resize(this.value)' />
    </h3>
    <script>
      Glyph.ratio  = $ratio;
      Glyph.head   = $head_json;
      Glyph.os2    = $os2_json;
      Glyph.hmtx   = $hmtx_json;
      Glyph.width  = $width;
      Glyph.height = $height;
    </script>";

    foreach ($this->data as $g => $glyph) {
      if ($n-- <= 0) {
        break;
      }

      $glyph->parseData();

      $shape      = array(
        "SVGContours" => $glyph->getSVGContours(),
        "xMin"        => $glyph->xMin,
        "yMin"        => $glyph->yMin,
        "xMax"        => $glyph->xMax,
        "yMax"        => $glyph->yMax,
      );
      $shape_json = json_encode($shape);

      $type = ($glyph instanceof OutlineSimple ? "simple" : "composite");
      $char = isset($glyphIndexArray[$g]) ? $glyphIndexArray[$g] : 0;
      $name = isset($names[$g]) ? $names[$g] : sprintf("uni%04x", $char);
      $char = $char ? "&#{$glyphIndexArray[$g]};" : "";

      if ($char === "" && empty($shape["SVGContours"])) {
        $n++;
        continue;
      }

      $s .= "<div class='glyph-view $type' id='glyph-$g'>
              <span class='glyph-id'>$g</span>
              <span class='char'>$char</span>
              <span class='char-name'>$name</span>
              ";

      if ($type == "composite") {
        foreach ($glyph->getGlyphIDs() as $_id) {
          $s .= "<a href='#glyph-$_id' class='glyph-component-id'>$_id</a> ";
        }
      }

      $s .= "<br />
            <canvas width='$width' height='$height' id='glyph-canvas-$g'></canvas>
            </div>
            <script>Glyph.glyphs.push([$g,$shape_json]);</script>";
    }

    return $s;
  }


  protected function _encode() {
    $font   = $this->getFont();
    $subset = $font->getSubset();
    $data   = $this->data;

    $loca = array();

    $length = 0;
    foreach ($subset as $gid) {
      $loca[] = $length;

      $bytes = $data[$gid]->encode();

      $pad = 0;
      $mod = $bytes % 4;
      if ($mod != 0) {
        $pad = 4 - $mod;
        $font->write(str_pad("", $pad, "\0"), $pad);
      }
      $length += $bytes + $pad;
    }

    $loca[]                             = $length; // dummy loca
    $font->getTableObject("loca")->data = $loca;

    return $length;
  }
}<?php
/**
 * @package php-font-lib
 * @link    https://github.com/dompdf/php-font-lib
 * @author  Fabien Ménager <fabien.menager@gmail.com>
 * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
 */

namespace FontLib\Table\Type;
use FontLib\Table\Table;
use Exception;

/**
 * `head` font table.
 *
 * @package php-font-lib
 */
class head extends Table {
  protected $def = array(
    "tableVersion"       => self::Fixed,
    "fontRevision"       => self::Fixed,
    "checkSumAdjustment" => self::uint32,
    "magicNumber"        => self::uint32,
    "flags"              => self::uint16,
    "unitsPerEm"         => self::uint16,
    "created"            => self::longDateTime,
    "modified"           => self::longDateTime,
    "xMin"               => self::FWord,
    "yMin"               => self::FWord,
    "xMax"               => self::FWord,
    "yMax"               => self::FWord,
    "macStyle"           => self::uint16,
    "lowestRecPPEM"      => self::uint16,
    "fontDirectionHint"  => self::int16,
    "indexToLocFormat"   => self::int16,
    "glyphDataFormat"    => self::int16,
  );

  protected function _parse() {
    parent::_parse();

    if ($this->data["magicNumber"] != 0x5F0F3CF5) {
      throw new Exception("Incorrect magic number (" . dechex($this->data["magicNumber"]) . ")");
    }
  }

  function _encode() {
    $this->data["checkSumAdjustment"] = 0;
    return parent::_encode();
  }
}<?php
/**
 * @package php-font-lib
 * @link    https://github.com/dompdf/php-font-lib
 * @author  Fabien Ménager <fabien.menager@gmail.com>
 * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
 */

namespace FontLib\Table\Type;
use FontLib\Table\Table;

/**
 * `hhea` font table.
 *
 * @package php-font-lib
 */
class hhea extends Table {
  protected $def = array(
    "version"             => self::Fixed,
    "ascent"              => self::FWord,
    "descent"             => self::FWord,
    "lineGap"             => self::FWord,
    "advanceWidthMax"     => self::uFWord,
    "minLeftSideBearing"  => self::FWord,
    "minRightSideBearing" => self::FWord,
    "xMaxExtent"          => self::FWord,
    "caretSlopeRise"      => self::int16,
    "caretSlopeRun"       => self::int16,
    "caretOffset"         => self::FWord,
    self::int16,
    self::int16,
    self::int16,
    self::int16,
    "metricDataFormat"    => self::int16,
    "numOfLongHorMetrics" => self::uint16,
  );

  function _encode() {
    $font                              = $this->getFont();
    $this->data["numOfLongHorMetrics"] = count($font->getSubset());

    return parent::_encode();
  }
}<?php
/**
 * @package php-font-lib
 * @link    https://github.com/dompdf/php-font-lib
 * @author  Fabien Ménager <fabien.menager@gmail.com>
 * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
 */

namespace FontLib\Table\Type;
use FontLib\Table\Table;

/**
 * `hmtx` font table.
 *
 * @package php-font-lib
 */
class hmtx extends Table {
  protected function _parse() {
    $font   = $this->getFont();
    $offset = $font->pos();

    $numOfLongHorMetrics = $font->getData("hhea", "numOfLongHorMetrics");
    $numGlyphs           = $font->getData("maxp", "numGlyphs");

    $font->seek($offset);

    $data = array();
    $metrics = $font->readUInt16Many($numOfLongHorMetrics * 2);
    for ($gid = 0, $mid = 0; $gid < $numOfLongHorMetrics; $gid++) {
      $advanceWidth    = isset($metrics[$mid]) ? $metrics[$mid] : 0;
      $mid += 1;
      $leftSideBearing = isset($metrics[$mid]) ? $metrics[$mid] : 0;
      $mid += 1;
      $data[$gid]      = array($advanceWidth, $leftSideBearing);
    }

    if ($numOfLongHorMetrics < $numGlyphs) {
      $lastWidth = end($data)[0];
      $numLeft   = $numGlyphs - $numOfLongHorMetrics;
      $metrics   = $font->readUInt16Many($numLeft);
      for($i = 0; $i < $numLeft; $i++) {
        $gid             = $numOfLongHorMetrics + $i;
        $leftSideBearing = isset($metrics[$i]) ? $metrics[$i] : 0;
        $data[$gid]      = array($lastWidth, $leftSideBearing);
      }
    }

    $this->data = $data;
  }

  protected function _encode() {
    $font   = $this->getFont();
    $subset = $font->getSubset();
    $data   = $this->data;

    $length = 0;

    foreach ($subset as $gid) {
      $length += $font->writeUInt16($data[$gid][0]);
      $length += $font->writeUInt16($data[$gid][1]);
    }

    return $length;
  }
}<?php
/**
 * @package php-font-lib
 * @link    https://github.com/dompdf/php-font-lib
 * @author  Fabien Ménager <fabien.menager@gmail.com>
 * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
 */

namespace FontLib\Table\Type;
use FontLib\Table\Table;

/**
 * `kern` font table.
 *
 * @package php-font-lib
 */
class kern extends Table {
  protected function _parse() {
    $font = $this->getFont();

    $data = $font->unpack(array(
      "version"         => self::uint16,
      "nTables"         => self::uint16,

      // only the first subtable will be parsed
      "subtableVersion" => self::uint16,
      "length"          => self::uint16,
      "coverage"        => self::uint16,
    ));

    $data["format"] = ($data["coverage"] >> 8);

    $subtable = array();

    switch ($data["format"]) {
      case 0:
        $subtable = $font->unpack(array(
          "nPairs"        => self::uint16,
          "searchRange"   => self::uint16,
          "entrySelector" => self::uint16,
          "rangeShift"    => self::uint16,
        ));

        $pairs = array();
        $tree  = array();

        $values = $font->readUInt16Many($subtable["nPairs"] * 3);
        for ($i = 0, $idx = 0; $i < $subtable["nPairs"]; $i++) {
          $left  = $values[$idx++];
          $right = $values[$idx++];
          $value = $values[$idx++];

          if ($value >= 0x8000) {
            $value -= 0x10000;
          }

          $pairs[] = array(
            "left"  => $left,
            "right" => $right,
            "value" => $value,
          );

          $tree[$left][$right] = $value;
        }

        //$subtable["pairs"] = $pairs;
        $subtable["tree"] = $tree;
        break;

      case 1:
      case 2:
      case 3:
        break;
    }

    $data["subtable"] = $subtable;

    $this->data = $data;
  }
}<?php
/**
 * @package php-font-lib
 * @link    https://github.com/dompdf/php-font-lib
 * @author  Fabien Ménager <fabien.menager@gmail.com>
 * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
 */

namespace FontLib\Table\Type;
use FontLib\Table\Table;

/**
 * `loca` font table.
 *
 * @package php-font-lib
 */
class loca extends Table {
  protected function _parse() {
    $font   = $this->getFont();
    $offset = $font->pos();

    $indexToLocFormat = $font->getData("head", "indexToLocFormat");
    $numGlyphs        = $font->getData("maxp", "numGlyphs");

    $font->seek($offset);

    $data = array();

    // 2 bytes
    if ($indexToLocFormat == 0) {
      $d   = $font->read(($numGlyphs + 1) * 2);
      $loc = unpack("n*", $d);

      for ($i = 0; $i <= $numGlyphs; $i++) {
        $data[] = isset($loc[$i + 1]) ?  $loc[$i + 1] * 2 : 0;
      }
    }

    // 4 bytes
    else {
      if ($indexToLocFormat == 1) {
        $d   = $font->read(($numGlyphs + 1) * 4);
        $loc = unpack("N*", $d);

        for ($i = 0; $i <= $numGlyphs; $i++) {
          $data[] = isset($loc[$i + 1]) ? $loc[$i + 1] : 0;
        }
      }
    }

    $this->data = $data;
  }

  function _encode() {
    $font = $this->getFont();
    $data = $this->data;

    $indexToLocFormat = $font->getData("head", "indexToLocFormat");
    $numGlyphs        = $font->getData("maxp", "numGlyphs");
    $length           = 0;

    // 2 bytes
    if ($indexToLocFormat == 0) {
      for ($i = 0; $i <= $numGlyphs; $i++) {
        $length += $font->writeUInt16($data[$i] / 2);
      }
    }

    // 4 bytes
    else {
      if ($indexToLocFormat == 1) {
        for ($i = 0; $i <= $numGlyphs; $i++) {
          $length += $font->writeUInt32($data[$i]);
        }
      }
    }

    return $length;
  }
}<?php
/**
 * @package php-font-lib
 * @link    https://github.com/dompdf/php-font-lib
 * @author  Fabien Ménager <fabien.menager@gmail.com>
 * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
 */

namespace FontLib\Table\Type;
use FontLib\Table\Table;

/**
 * `maxp` font table.
 *
 * @package php-font-lib
 */
class maxp extends Table {
  protected $def = array(
    "version"               => self::Fixed,
    "numGlyphs"             => self::uint16,
    "maxPoints"             => self::uint16,
    "maxContours"           => self::uint16,
    "maxComponentPoints"    => self::uint16,
    "maxComponentContours"  => self::uint16,
    "maxZones"              => self::uint16,
    "maxTwilightPoints"     => self::uint16,
    "maxStorage"            => self::uint16,
    "maxFunctionDefs"       => self::uint16,
    "maxInstructionDefs"    => self::uint16,
    "maxStackElements"      => self::uint16,
    "maxSizeOfInstructions" => self::uint16,
    "maxComponentElements"  => self::uint16,
    "maxComponentDepth"     => self::uint16,
  );

  function _encode() {
    $font                    = $this->getFont();
    $this->data["numGlyphs"] = count($font->getSubset());

    return parent::_encode();
  }
}<?php
/**
 * @package php-font-lib
 * @link    https://github.com/dompdf/php-font-lib
 * @author  Fabien Ménager <fabien.menager@gmail.com>
 * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
 */

namespace FontLib\Table\Type;

use FontLib\Table\Table;
use FontLib\Font;

/**
 * `name` font table.
 *
 * @package php-font-lib
 */
class name extends Table {
  private static $header_format = array(
    "format"       => self::uint16,
    "count"        => self::uint16,
    "stringOffset" => self::uint16,
  );

  const NAME_COPYRIGHT          = 0;
  const NAME_NAME               = 1;
  const NAME_SUBFAMILY          = 2;
  const NAME_SUBFAMILY_ID       = 3;
  const NAME_FULL_NAME          = 4;
  const NAME_VERSION            = 5;
  const NAME_POSTSCRIPT_NAME    = 6;
  const NAME_TRADEMARK          = 7;
  const NAME_MANUFACTURER       = 8;
  const NAME_DESIGNER           = 9;
  const NAME_DESCRIPTION        = 10;
  const NAME_VENDOR_URL         = 11;
  const NAME_DESIGNER_URL       = 12;
  const NAME_LICENSE            = 13;
  const NAME_LICENSE_URL        = 14;
  const NAME_PREFERRE_FAMILY    = 16;
  const NAME_PREFERRE_SUBFAMILY = 17;
  const NAME_COMPAT_FULL_NAME   = 18;
  const NAME_SAMPLE_TEXT        = 19;

  static $nameIdCodes = array(
    0  => "Copyright",
    1  => "FontName",
    2  => "FontSubfamily",
    3  => "UniqueID",
    4  => "FullName",
    5  => "Version",
    6  => "PostScriptName",
    7  => "Trademark",
    8  => "Manufacturer",
    9  => "Designer",
    10 => "Description",
    11 => "FontVendorURL",
    12 => "FontDesignerURL",
    13 => "LicenseDescription",
    14 => "LicenseURL",
    // 15
    16 => "PreferredFamily",
    17 => "PreferredSubfamily",
    18 => "CompatibleFullName",
    19 => "SampleText",
  );

  static $platforms = array(
    0 => "Unicode",
    1 => "Macintosh",
    // 2 =>  Reserved
    3 => "Microsoft",
  );

  static $platformSpecific = array(
    // Unicode
    0 => array(
      0 => "Default semantics",
      1 => "Version 1.1 semantics",
      2 => "ISO 10646 1993 semantics (deprecated)",
      3 => "Unicode 2.0 or later semantics",
    ),

    // Macintosh
    1 => array(
      0  => "Roman",
      1  => "Japanese",
      2  => "Traditional Chinese",
      3  => "Korean",
      4  => "Arabic",
      5  => "Hebrew",
      6  => "Greek",
      7  => "Russian",
      8  => "RSymbol",
      9  => "Devanagari",
      10 => "Gurmukhi",
      11 => "Gujarati",
      12 => "Oriya",
      13 => "Bengali",
      14 => "Tamil",
      15 => "Telugu",
      16 => "Kannada",
      17 => "Malayalam",
      18 => "Sinhalese",
      19 => "Burmese",
      20 => "Khmer",
      21 => "Thai",
      22 => "Laotian",
      23 => "Georgian",
      24 => "Armenian",
      25 => "Simplified Chinese",
      26 => "Tibetan",
      27 => "Mongolian",
      28 => "Geez",
      29 => "Slavic",
      30 => "Vietnamese",
      31 => "Sindhi",
    ),

    // Microsoft
    3 => array(
      0  => "Symbol",
      1  => "Unicode BMP (UCS-2)",
      2  => "ShiftJIS",
      3  => "PRC",
      4  => "Big5",
      5  => "Wansung",
      6  => "Johab",
      //  7 => Reserved
      //  8 => Reserved
      //  9 => Reserved
      10 => "Unicode UCS-4",
    ),
  );

  protected function _parse() {
    $font = $this->getFont();

    $tableOffset = $font->pos();

    $data = $font->unpack(self::$header_format);

    $records = array();
    for ($i = 0; $i < $data["count"]; $i++) {
      $record      = new nameRecord();
      $record_data = $font->unpack(nameRecord::$format);
      $record->map($record_data);

      $records[] = $record;
    }

    $system_encodings = mb_list_encodings();
    $system_encodings = array_change_key_case(array_fill_keys($system_encodings, true), CASE_UPPER);
    
    $names = array();
    foreach ($records as $record) {
      $font->seek($tableOffset + $data["stringOffset"] + $record->offset);
      $record->stringRaw = $font->read($record->length);

      $encoding = null;
      switch ($record->platformID) {
        case 3:
          switch ($record->platformSpecificID) {
            case 2:
              if (\array_key_exists("SJIS", $system_encodings)) {
                $encoding = "SJIS";
              }
              break;
            case 3:
              if (\array_key_exists("GB18030", $system_encodings)) {
                $encoding = "GB18030";
              }
              break;
            case 4:
              if (\array_key_exists("BIG-5", $system_encodings)) {
                $encoding = "BIG-5";
              }
              break;
            case 5:
              if (\array_key_exists("UHC", $system_encodings)) {
                $encoding = "UHC";
              }
              break;
          }
          break;
      }
      if ($encoding === null) {
        $encoding = "UTF-16";
      }

      $record->string = mb_convert_encoding($record->stringRaw, "UTF-8", $encoding);
      if (strpos($record->string, "\0") !== false) {
        $record->string = str_replace("\0", "", $record->string);
      }
      $names[$record->nameID] = $record;
    }

    $data["records"] = $names;

    $this->data = $data;
  }

  protected function _encode() {
    $font = $this->getFont();

    /** @var nameRecord[] $records */
    $records       = $this->data["records"];
    $count_records = \count($records);

    $this->data["count"]        = $count_records;
    $this->data["stringOffset"] = 6 + ($count_records * 12); // 6 => uint16 * 3, 12 => sizeof self::$record_format

    $length = $font->pack(self::$header_format, $this->data);

    $offset = 0;

    /** @var nameRecord[] $records_to_encode */
    $records_to_encode = array();
    foreach ($records as $record) {
      $encoded_record = new nameRecord();
      $encoded_record->platformID = 3;
      $encoded_record->platformSpecificID = 1;
      $encoded_record->languageID = $record->languageID;
      $encoded_record->nameID = $record->nameID;
      $encoded_record->offset = $offset;
      $encoded_record->string = $record->string;
      $encoded_record->length = mb_strlen($encoded_record->getUTF16(), "8bit");
      $records_to_encode[] = $encoded_record;

      $offset += $encoded_record->length;
      $length += $font->pack(nameRecord::$format, (array)$encoded_record);
    }

    foreach ($records_to_encode as $record) {
      $str = $record->getUTF16();
      $length += $font->write($str, mb_strlen($str, "8bit"));
    }

    return $length;
  }
}
<?php
/**
 * @package php-font-lib
 * @link    https://github.com/dompdf/php-font-lib
 * @author  Fabien Ménager <fabien.menager@gmail.com>
 * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
 */
namespace FontLib\Table\Type;

use FontLib\Font;
use FontLib\BinaryStream;

/**
 * Font table name record.
 *
 * @package php-font-lib
 */
class nameRecord extends BinaryStream {
  public $platformID;
  public $platformSpecificID;
  public $languageID;
  public $nameID;
  public $length;
  public $offset;
  public $string;
  public $stringRaw;

  public static $format = array(
    "platformID"         => self::uint16,
    "platformSpecificID" => self::uint16,
    "languageID"         => self::uint16,
    "nameID"             => self::uint16,
    "length"             => self::uint16,
    "offset"             => self::uint16,
  );

  public function map($data) {
    foreach ($data as $key => $value) {
      $this->$key = $value;
    }
  }

  public function getUTF8() {
    return $this->string;
  }

  public function getUTF16() {
    return Font::UTF8ToUTF16($this->string);
  }

  function __toString() {
    return $this->string;
  }
}<?php
/**
 * @package php-font-lib
 * @link    https://github.com/dompdf/php-font-lib
 * @author  Fabien Ménager <fabien.menager@gmail.com>
 * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
 */

namespace FontLib\Table\Type;
use FontLib\Table\Table;

/**
 * `OS/2` font table.
 *
 * @package php-font-lib
 */
class os2 extends Table {
  protected $def = array(
    "version"             => self::uint16,
    "xAvgCharWidth"       => self::int16,
    "usWeightClass"       => self::uint16,
    "usWidthClass"        => self::uint16,
    "fsType"              => self::int16,
    "ySubscriptXSize"     => self::int16,
    "ySubscriptYSize"     => self::int16,
    "ySubscriptXOffset"   => self::int16,
    "ySubscriptYOffset"   => self::int16,
    "ySuperscriptXSize"   => self::int16,
    "ySuperscriptYSize"   => self::int16,
    "ySuperscriptXOffset" => self::int16,
    "ySuperscriptYOffset" => self::int16,
    "yStrikeoutSize"      => self::int16,
    "yStrikeoutPosition"  => self::int16,
    "sFamilyClass"        => self::int16,
    "panose"              => array(self::uint8, 10),
    "ulCharRange"         => array(self::uint32, 4),
    "achVendID"           => array(self::char, 4),
    "fsSelection"         => self::uint16,
    "fsFirstCharIndex"    => self::uint16,
    "fsLastCharIndex"     => self::uint16,
    "typoAscender"        => self::int16,
    "typoDescender"       => self::int16,
    "typoLineGap"         => self::int16,
    "winAscent"           => self::int16,
    "winDescent"          => self::int16,
  );
}<?php
/**
 * @package php-font-lib
 * @link    https://github.com/dompdf/php-font-lib
 * @author  Fabien Ménager <fabien.menager@gmail.com>
 * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
 */

namespace FontLib\Table\Type;
use FontLib\Table\Table;
use FontLib\TrueType\File;

/**
 * `post` font table.
 *
 * @package php-font-lib
 */
class post extends Table {
  protected $def = array(
    "format"             => self::Fixed,
    "italicAngle"        => self::Fixed,
    "underlinePosition"  => self::FWord,
    "underlineThickness" => self::FWord,
    "isFixedPitch"       => self::uint32,
    "minMemType42"       => self::uint32,
    "maxMemType42"       => self::uint32,
    "minMemType1"        => self::uint32,
    "maxMemType1"        => self::uint32,
  );

  protected function _parse() {
    $font = $this->getFont();
    $data = $font->unpack($this->def);

    $names = array();

    switch ($data["format"]) {
      case 1:
        $names = File::$macCharNames;
        break;

      case 2:
        $data["numberOfGlyphs"] = $font->readUInt16();

        $glyphNameIndex = $font->readUInt16Many($data["numberOfGlyphs"]);

        $data["glyphNameIndex"] = $glyphNameIndex;

        $namesPascal = array();
        for ($i = 0; $i < $data["numberOfGlyphs"]; $i++) {
          $len           = $font->readUInt8();
          $namesPascal[] = $font->read($len);
        }

        foreach ($glyphNameIndex as $g => $index) {
          if ($index < 258) {
            $names[$g] = File::$macCharNames[$index];
          }
          else {
            if (array_key_exists($index - 258, $namesPascal)) {
              $names[$g] = $namesPascal[$index - 258];
            }
          }
        }

        break;

      case 2.5:
        // TODO
        break;

      case 3:
        // nothing
        break;

      case 4:
        // TODO
        break;
    }

    $data["names"] = $names;

    $this->data = $data;
  }

  function _encode() {
    $font           = $this->getFont();
    $data           = $this->data;
    $data["format"] = 3;

    $length = $font->pack($this->def, $data);

    return $length;
    /*
    $subset = $font->getSubset();

    switch($data["format"]) {
      case 1:
        // nothing to do
      break;

      case 2:
        $old_names = $data["names"];

        $glyphNameIndex = range(0, count($subset));

        $names = array();
        foreach($subset as $gid) {
          $names[] = $data["names"][$data["glyphNameIndex"][$gid]];
        }

        $numberOfGlyphs = count($names);
        $length += $font->writeUInt16($numberOfGlyphs);

        foreach($glyphNameIndex as $gni) {
          $length += $font->writeUInt16($gni);
        }

        //$names = array_slice($names, 257);
        foreach($names as $name) {
          $len = strlen($name);
          $length += $font->writeUInt8($len);
          $length += $font->write($name, $len);
        }

      break;

      case 2.5:
        // TODO
      break;

      case 3:
        // nothing
      break;

      case 4:
        // TODO
      break;
    }

    return $length;*/
  }
}<?php

/**
 * @package php-font-lib
 * @link    https://github.com/PhenX/php-font-lib
 * @author  Fabien Ménager <fabien.menager@gmail.com>
 * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
 */

namespace FontLib\Table\Type;

use FontLib\Table\Table;

/**
 * `prep` font table.
 *
 * @package php-font-lib
 */
class prep extends Table
{
  private $rawData;
  protected function _parse() {
    $font = $this->getFont();
    $font->seek($this->entry->offset);
    $this->rawData = $font->read($this->entry->length);
  }
  function _encode() {
    return $this->getFont()->write($this->rawData, $this->entry->length);
  }
}
<?php
/**
 * @package php-font-lib
 * @link    https://github.com/dompdf/php-font-lib
 * @author  Fabien Ménager <fabien.menager@gmail.com>
 * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
 */

namespace FontLib\TrueType;

use Countable;
use FontLib\BinaryStream;
use Iterator;
use OutOfBoundsException;

/**
 * TrueType collection font file.
 *
 * @package php-font-lib
 */
class Collection extends BinaryStream implements Iterator, Countable {
  /**
   * Current iterator position.
   *
   * @var integer
   */
  private $position = 0;

  protected $collectionOffsets = array();
  protected $collection = array();
  protected $version;
  protected $numFonts;

  function parse() {
    if (isset($this->numFonts)) {
      return;
    }

    $this->read(4); // tag name

    $this->version  = $this->readFixed();
    $this->numFonts = $this->readUInt32();

    for ($i = 0; $i < $this->numFonts; $i++) {
      $this->collectionOffsets[] = $this->readUInt32();
    }
  }

  /**
   * @param int $fontId
   *
   * @throws OutOfBoundsException
   * @return File
   */
  function getFont($fontId) {
    $this->parse();

    if (!isset($this->collectionOffsets[$fontId])) {
      throw new OutOfBoundsException();
    }

    if (isset($this->collection[$fontId])) {
      return $this->collection[$fontId];
    }

    $font    = new File();
    $font->f = $this->f;
    $font->setTableOffset($this->collectionOffsets[$fontId]);

    return $this->collection[$fontId] = $font;
  }

  function current() {
    return $this->getFont($this->position);
  }

  function key() {
    return $this->position;
  }

  function next() {
    return ++$this->position;
  }

  function rewind() {
    $this->position = 0;
  }

  function valid() {
    $this->parse();

    return isset($this->collectionOffsets[$this->position]);
  }

  function count() {
    $this->parse();

    return $this->numFonts;
  }
}
<?php
/**
 * @package php-font-lib
 * @link    https://github.com/dompdf/php-font-lib
 * @author  Fabien Ménager <fabien.menager@gmail.com>
 * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
 */

namespace FontLib\TrueType;

use FontLib\AdobeFontMetrics;
use FontLib\Font;
use FontLib\BinaryStream;
use FontLib\Table\Table;
use FontLib\Table\DirectoryEntry;
use FontLib\Table\Type\glyf;
use FontLib\Table\Type\name;
use FontLib\Table\Type\nameRecord;

/**
 * TrueType font file.
 *
 * @package php-font-lib
 */
class File extends BinaryStream {
  /**
   * @var Header
   */
  public $header = array();

  private $tableOffset = 0; // Used for TTC

  private static $raw = false;

  protected $directory = array();
  protected $data = array();

  protected $glyph_subset = array();

  public $glyph_all = array();

  static $macCharNames = array(
    ".notdef", ".null", "CR",
    "space", "exclam", "quotedbl", "numbersign",
    "dollar", "percent", "ampersand", "quotesingle",
    "parenleft", "parenright", "asterisk", "plus",
    "comma", "hyphen", "period", "slash",
    "zero", "one", "two", "three",
    "four", "five", "six", "seven",
    "eight", "nine", "colon", "semicolon",
    "less", "equal", "greater", "question",
    "at", "A", "B", "C", "D", "E", "F", "G",
    "H", "I", "J", "K", "L", "M", "N", "O",
    "P", "Q", "R", "S", "T", "U", "V", "W",
    "X", "Y", "Z", "bracketleft",
    "backslash", "bracketright", "asciicircum", "underscore",
    "grave", "a", "b", "c", "d", "e", "f", "g",
    "h", "i", "j", "k", "l", "m", "n", "o",
    "p", "q", "r", "s", "t", "u", "v", "w",
    "x", "y", "z", "braceleft",
    "bar", "braceright", "asciitilde", "Adieresis",
    "Aring", "Ccedilla", "Eacute", "Ntilde",
    "Odieresis", "Udieresis", "aacute", "agrave",
    "acircumflex", "adieresis", "atilde", "aring",
    "ccedilla", "eacute", "egrave", "ecircumflex",
    "edieresis", "iacute", "igrave", "icircumflex",
    "idieresis", "ntilde", "oacute", "ograve",
    "ocircumflex", "odieresis", "otilde", "uacute",
    "ugrave", "ucircumflex", "udieresis", "dagger",
    "degree", "cent", "sterling", "section",
    "bullet", "paragraph", "germandbls", "registered",
    "copyright", "trademark", "acute", "dieresis",
    "notequal", "AE", "Oslash", "infinity",
    "plusminus", "lessequal", "greaterequal", "yen",
    "mu", "partialdiff", "summation", "product",
    "pi", "integral", "ordfeminine", "ordmasculine",
    "Omega", "ae", "oslash", "questiondown",
    "exclamdown", "logicalnot", "radical", "florin",
    "approxequal", "increment", "guillemotleft", "guillemotright",
    "ellipsis", "nbspace", "Agrave", "Atilde",
    "Otilde", "OE", "oe", "endash",
    "emdash", "quotedblleft", "quotedblright", "quoteleft",
    "quoteright", "divide", "lozenge", "ydieresis",
    "Ydieresis", "fraction", "currency", "guilsinglleft",
    "guilsinglright", "fi", "fl", "daggerdbl",
    "periodcentered", "quotesinglbase", "quotedblbase", "perthousand",
    "Acircumflex", "Ecircumflex", "Aacute", "Edieresis",
    "Egrave", "Iacute", "Icircumflex", "Idieresis",
    "Igrave", "Oacute", "Ocircumflex", "applelogo",
    "Ograve", "Uacute", "Ucircumflex", "Ugrave",
    "dotlessi", "circumflex", "tilde", "macron",
    "breve", "dotaccent", "ring", "cedilla",
    "hungarumlaut", "ogonek", "caron", "Lslash",
    "lslash", "Scaron", "scaron", "Zcaron",
    "zcaron", "brokenbar", "Eth", "eth",
    "Yacute", "yacute", "Thorn", "thorn",
    "minus", "multiply", "onesuperior", "twosuperior",
    "threesuperior", "onehalf", "onequarter", "threequarters",
    "franc", "Gbreve", "gbreve", "Idot",
    "Scedilla", "scedilla", "Cacute", "cacute",
    "Ccaron", "ccaron", "dmacron"
  );

  private function uniord (string $c, string $encoding = null) {
    if (function_exists("mb_ord")) {
      if (PHP_VERSION_ID < 80000 && $encoding === null) {
          // in PHP < 8 the encoding argument, if supplied, must be a valid encoding
          $encoding = "UTF-8";
      }
      return mb_ord($c, $encoding);
    }

    if ($encoding != "UTF-8" && $encoding !== null) {
      $c = mb_convert_encoding($c, "UTF-8", $encoding);
    }

    $length = mb_strlen(mb_substr($c, 0, 1), '8bit');
    $ord = false;
    $bytes = [];
    $numbytes = 1;
    for ($i = 0; $i < $length; $i++) {
      $o = \ord($c[$i]); // get one string character at time
      if (\count($bytes) === 0) { // get starting octect
        if ($o <= 0x7F) {
          $ord = $o;
          $numbytes = 1;
        } elseif (($o >> 0x05) === 0x06) { // 2 bytes character (0x06 = 110 BIN)
          $bytes[] = ($o - 0xC0) << 0x06;
          $numbytes = 2;
        } elseif (($o >> 0x04) === 0x0E) { // 3 bytes character (0x0E = 1110 BIN)
          $bytes[] = ($o - 0xE0) << 0x0C;
          $numbytes = 3;
        } elseif (($o >> 0x03) === 0x1E) { // 4 bytes character (0x1E = 11110 BIN)
          $bytes[] = ($o - 0xF0) << 0x12;
          $numbytes = 4;
        } else {
          $ord = false;
          break;
        }
      } elseif (($o >> 0x06) === 0x02) { // bytes 2, 3 and 4 must start with 0x02 = 10 BIN
          $bytes[] = $o - 0x80;
          if (\count($bytes) === $numbytes) {
            // compose UTF-8 bytes to a single unicode value
            $o = $bytes[0];
            for ($j = 1; $j < $numbytes; $j++) {
              $o += ($bytes[$j] << (($numbytes - $j - 1) * 0x06));
            }
            if ((($o >= 0xD800) and ($o <= 0xDFFF)) or ($o >= 0x10FFFF)) {
              // The definition of UTF-8 prohibits encoding character numbers between
              // U+D800 and U+DFFF, which are reserved for use with the UTF-16
              // encoding form (as surrogate pairs) and do not directly represent
              // characters.
              return false;
            } else {
              $ord = $o; // add char to array
            }
            // reset data for next char
            $bytes = [];
            $numbytes = 1;
          }
      } else {
        $ord = false;
        break;
      }
    }

    return $ord;
  }

  function getTable() {
    $this->parseTableEntries();

    return $this->directory;
  }

  function setTableOffset($offset) {
    $this->tableOffset = $offset;
  }

  function parse() {
    $this->parseTableEntries();

    $this->data = array();

    foreach ($this->directory as $tag => $table) {
      if (empty($this->data[$tag])) {
        $this->readTable($tag);
      }
    }
  }

  function utf8toUnicode($str) {
    $len = mb_strlen($str, '8bit');
    $out = array();

    for ($i = 0; $i < $len; $i++) {
      $uni = -1;
      $h   = ord($str[$i]);

      if ($h <= 0x7F) {
        $uni = $h;
      }
      elseif ($h >= 0xC2) {
        if (($h <= 0xDF) && ($i < $len - 1)) {
          $uni = ($h & 0x1F) << 6 | (ord($str[++$i]) & 0x3F);
        }
        elseif (($h <= 0xEF) && ($i < $len - 2)) {
          $uni = ($h & 0x0F) << 12 | (ord($str[++$i]) & 0x3F) << 6 | (ord($str[++$i]) & 0x3F);
        }
        elseif (($h <= 0xF4) && ($i < $len - 3)) {
          $uni = ($h & 0x0F) << 18 | (ord($str[++$i]) & 0x3F) << 12 | (ord($str[++$i]) & 0x3F) << 6 | (ord($str[++$i]) & 0x3F);
        }
      }

      if ($uni >= 0) {
        $out[] = $uni;
      }
    }

    return $out;
  }

  function getUnicodeCharMap() {
    $subtable = null;
    foreach ($this->getData("cmap", "subtables") as $_subtable) {
      if ($_subtable["platformID"] == 0 || ($_subtable["platformID"] == 3 && $_subtable["platformSpecificID"] == 1)) {
        $subtable = $_subtable;
        break;
      }
    }

    if ($subtable) {
      return $subtable["glyphIndexArray"];
    }

    $system_encodings = mb_list_encodings();
    $system_encodings = array_change_key_case(array_fill_keys($system_encodings, true), CASE_UPPER);
    foreach ($this->getData("cmap", "subtables") as $_subtable) {
      $encoding = null;
      switch ($_subtable["platformID"]) {
        case 3:
          switch ($_subtable["platformSpecificID"]) {
            case 2:
              if (\array_key_exists("SJIS", $system_encodings)) {
                $encoding = "SJIS";
              }
              break;
            case 3:
              if (\array_key_exists("GB18030", $system_encodings)) {
                $encoding = "GB18030";
              }
              break;
            case 4:
              if (\array_key_exists("BIG-5", $system_encodings)) {
                $encoding = "BIG-5";
              }
              break;
            case 5:
              if (\array_key_exists("UHC", $system_encodings)) {
                $encoding = "UHC";
              }
              break;
          }
          break;
      }
      if ($encoding) {
        $glyphIndexArray = array();
        foreach ($_subtable["glyphIndexArray"] as $c => $gid) {
          $str = trim(pack("N", $c));
          if (\strlen($str) > 0) {
            $ord = $this->uniord($str, $encoding);
            if ($ord > 0) {
              $glyphIndexArray[$ord] = $gid;
            }
          }
        }
        return $glyphIndexArray;
      }
    }
    
    return null;
  }

  function setSubset($subset) {
    if (!is_array($subset)) {
      $subset = $this->utf8toUnicode($subset);
    }

    $subset = array_unique($subset);

    $glyphIndexArray = $this->getUnicodeCharMap();

    if (!$glyphIndexArray) {
      return;
    }

    $gids = array(
      0, // .notdef
      1, // .null
    );

    foreach ($subset as $code) {
      if (!isset($glyphIndexArray[$code])) {
        continue;
      }

      $gid        = $glyphIndexArray[$code];
      $gids[$gid] = $gid;
    }

    /** @var glyf $glyf */
    $glyf = $this->getTableObject("glyf");
    if ($glyf) {
      $gids = $glyf->getGlyphIDs($gids);
      sort($gids);
      $this->glyph_subset = $gids;
    }
    $this->glyph_all    = array_values($glyphIndexArray); // FIXME
  }

  function getSubset() {
    if (empty($this->glyph_subset)) {
      return $this->glyph_all;
    }

    return $this->glyph_subset;
  }

  function encode($tags = array()) {
    if (!self::$raw) {
      $tags = array_merge(array("head", "hhea", "cmap", "hmtx", "maxp", "glyf", "loca", "name", "post", "cvt ", "fpgm", "prep"), $tags);
    }
    else {
      $tags = array_keys($this->directory);
    }

    $n          = 16; // @todo

    Font::d("Tables : " . implode(", ", $tags));

    /** @var DirectoryEntry[] $entries */
    $entries = array();
    foreach ($tags as $tag) {
      if (!isset($this->directory[$tag])) {
        Font::d("  >> '$tag' table doesn't exist");
        continue;
      }

      $entries[$tag] = $this->directory[$tag];
    }

    $num_tables = count($entries);
    $exponent = floor(log($num_tables, 2));
    $power_of_two = pow(2, $exponent);

    $this->header->data["numTables"] = $num_tables;
    $this->header->data["searchRange"] = $power_of_two * 16;
    $this->header->data["entrySelector"] = log($power_of_two, 2);
    $this->header->data["rangeShift"] = $num_tables * 16 - $this->header->data["searchRange"];
    $this->header->encode();

    $directory_offset = $this->pos();
    $offset           = $directory_offset + $num_tables * $n;
    $this->seek($offset);

    $i = 0;
    foreach ($entries as $entry) {
      $entry->encode($directory_offset + $i * $n);
      $i++;
    }
  }

  function parseHeader() {
    if (!empty($this->header)) {
      return;
    }

    $this->seek($this->tableOffset);

    $this->header = new Header($this);
    $this->header->parse();
  }

  function getFontType(){
    $class_parts = explode("\\", get_class($this));
    return $class_parts[1];
  }

  function parseTableEntries() {
    $this->parseHeader();

    if (!empty($this->directory)) {
      return;
    }

    if (empty($this->header->data["numTables"])) {
      return;
    }


    $type = $this->getFontType();
    $class = "FontLib\\$type\\TableDirectoryEntry";

    for ($i = 0; $i < $this->header->data["numTables"]; $i++) {
      /** @var TableDirectoryEntry $entry */
      $entry = new $class($this);
      $entry->parse();

      $this->directory[$entry->tag] = $entry;
    }
  }

  function normalizeFUnit($value, $base = 1000) {
    return round($value * ($base / $this->getData("head", "unitsPerEm")));
  }

  protected function readTable($tag) {
    $this->parseTableEntries();

    if (!self::$raw) {
      $name_canon = preg_replace("/[^a-z0-9]/", "", strtolower($tag));

      $class = "FontLib\\Table\\Type\\$name_canon";

      if (!isset($this->directory[$tag]) || !@class_exists($class)) {
        return;
      }
    }
    else {
      $class = "FontLib\\Table\\Table";
    }

    /** @var Table $table */
    $table = new $class($this->directory[$tag]);
    $table->parse();

    $this->data[$tag] = $table;
  }

  /**
   * @param $name
   *
   * @return Table
   */
  public function getTableObject($name) {
    if (\array_key_exists($name, $this->data)) {
      return $this->data[$name];
    }
    return null;
  }

  public function setTableObject($name, Table $data) {
    $this->data[$name] = $data;
  }

  public function getData($name, $key = null) {
    $this->parseTableEntries();

    if (empty($this->data[$name])) {
      $this->readTable($name);
    }

    if (!isset($this->data[$name])) {
      return null;
    }

    if (!$key) {
      return $this->data[$name]->data;
    }
    else {
      return $this->data[$name]->data[$key];
    }
  }

  function addDirectoryEntry(DirectoryEntry $entry) {
    $this->directory[$entry->tag] = $entry;
  }

  function saveAdobeFontMetrics($file, $encoding = null) {
    $afm = new AdobeFontMetrics($this);
    $afm->write($file, $encoding);
  }

  /**
   * Get a specific name table string value from its ID
   *
   * @param int $nameID The name ID
   *
   * @return string|null
   */
  function getNameTableString($nameID) {
    /** @var nameRecord[] $records */
    $records = $this->getData("name", "records");

    if (!isset($records[$nameID])) {
      return null;
    }

    return $records[$nameID]->string;
  }

  /**
   * Get font copyright
   *
   * @return string|null
   */
  function getFontCopyright() {
    return $this->getNameTableString(name::NAME_COPYRIGHT);
  }

  /**
   * Get font name
   *
   * @return string|null
   */
  function getFontName() {
    return $this->getNameTableString(name::NAME_NAME);
  }

  /**
   * Get font subfamily
   *
   * @return string|null
   */
  function getFontSubfamily() {
    return $this->getNameTableString(name::NAME_SUBFAMILY);
  }

  /**
   * Get font subfamily ID
   *
   * @return string|null
   */
  function getFontSubfamilyID() {
    return $this->getNameTableString(name::NAME_SUBFAMILY_ID);
  }

  /**
   * Get font full name
   *
   * @return string|null
   */
  function getFontFullName() {
    return $this->getNameTableString(name::NAME_FULL_NAME);
  }

  /**
   * Get font version
   *
   * @return string|null
   */
  function getFontVersion() {
    return $this->getNameTableString(name::NAME_VERSION);
  }

  /**
   * Get font weight
   *
   * @return string|null
   */
  function getFontWeight() {
    return $this->getTableObject("OS/2")->data["usWeightClass"];
  }

  /**
   * Get font Postscript name
   *
   * @return string|null
   */
  function getFontPostscriptName() {
    return $this->getNameTableString(name::NAME_POSTSCRIPT_NAME);
  }

  function reduce() {
    $names_to_keep = array(
      name::NAME_COPYRIGHT,
      name::NAME_NAME,
      name::NAME_SUBFAMILY,
      name::NAME_SUBFAMILY_ID,
      name::NAME_FULL_NAME,
      name::NAME_VERSION,
      name::NAME_POSTSCRIPT_NAME,
    );

    foreach ($this->data["name"]->data["records"] as $id => $rec) {
      if (!in_array($id, $names_to_keep)) {
        unset($this->data["name"]->data["records"][$id]);
      }
    }
  }
}
<?php
/**
 * @package php-font-lib
 * @link    https://github.com/dompdf/php-font-lib
 * @author  Fabien Ménager <fabien.menager@gmail.com>
 * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
 */

namespace FontLib\TrueType;

/**
 * TrueType font file header.
 *
 * @package php-font-lib
 */
class Header extends \FontLib\Header {
  protected $def = array(
    "format"        => self::uint32,
    "numTables"     => self::uint16,
    "searchRange"   => self::uint16,
    "entrySelector" => self::uint16,
    "rangeShift"    => self::uint16,
  );

  public function parse() {
    parent::parse();

    $format                   = $this->data["format"];
    $this->data["formatText"] = $this->convertUInt32ToStr($format);
  }
}<?php
/**
 * @package php-font-lib
 * @link    https://github.com/dompdf/php-font-lib
 * @author  Fabien Ménager <fabien.menager@gmail.com>
 * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
 */

namespace FontLib\TrueType;

use FontLib\Table\DirectoryEntry;

/**
 * TrueType table directory entry.
 *
 * @package php-font-lib
 */
class TableDirectoryEntry extends DirectoryEntry {
  function __construct(File $font) {
    parent::__construct($font);
  }

  function parse() {
    parent::parse();

    $font           = $this->font;
    $this->checksum = $font->readUInt32();
    $this->offset   = $font->readUInt32();
    $this->length   = $font->readUInt32();
    $this->entryLength += 12;
  }
}

<?php
/**
 * @package php-font-lib
 * @link    https://github.com/dompdf/php-font-lib
 * @author  Fabien Ménager <fabien.menager@gmail.com>
 * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
 */

namespace FontLib\WOFF;

use FontLib\Table\DirectoryEntry;

/**
 * WOFF font file.
 *
 * @package php-font-lib
 *
 * @property TableDirectoryEntry[] $directory
 */
class File extends \FontLib\TrueType\File {
  function parseHeader() {
    if (!empty($this->header)) {
      return;
    }

    $this->header = new Header($this);
    $this->header->parse();
  }

  public function load($file) {
    parent::load($file);

    $this->parseTableEntries();
    $dataOffset = $this->pos() + count($this->directory) * 20;

    $fw = $this->getTempFile(false);
    $fr = $this->f;

    $this->f = $fw;
    $offset  = $this->header->encode();

    foreach ($this->directory as $entry) {
      // Read ...
      $this->f = $fr;
      $this->seek($entry->offset);
      $data = $this->read($entry->length);

      if ($entry->length < $entry->origLength) {
        $data = (string) gzuncompress($data);
      }

      // Prepare data ...
      $length        = mb_strlen($data, '8bit');
      $entry->length = $entry->origLength = $length;
      $entry->offset = $dataOffset;

      // Write ...
      $this->f = $fw;

      // Woff Entry
      $this->seek($offset);
      $offset += $this->write($entry->tag, 4); // tag
      $offset += $this->writeUInt32($dataOffset); // offset
      $offset += $this->writeUInt32($length); // length
      $offset += $this->writeUInt32($length); // origLength
      $offset += $this->writeUInt32(DirectoryEntry::computeChecksum($data)); // checksum

      // Data
      $this->seek($dataOffset);
      $dataOffset += $this->write($data, $length);
    }

    $this->f = $fw;
    $this->seek(0);

    // Need to re-parse this, don't know why
    $this->header    = null;
    $this->directory = array();
    $this->parseTableEntries();
  }
}
<?php
/**
 * @package php-font-lib
 * @link    https://github.com/dompdf/php-font-lib
 * @author  Fabien Ménager <fabien.menager@gmail.com>
 * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
 */

namespace FontLib\WOFF;

/**
 * WOFF font file header.
 *
 * @package php-font-lib
 */
class Header extends \FontLib\TrueType\Header {
  protected $def = array(
    "format"         => self::uint32,
    "flavor"         => self::uint32,
    "length"         => self::uint32,
    "numTables"      => self::uint16,
    self::uint16,
    "totalSfntSize"  => self::uint32,
    "majorVersion"   => self::uint16,
    "minorVersion"   => self::uint16,
    "metaOffset"     => self::uint32,
    "metaLength"     => self::uint32,
    "metaOrigLength" => self::uint32,
    "privOffset"     => self::uint32,
    "privLength"     => self::uint32,
  );
}<?php
/**
 * @package php-font-lib
 * @link    https://github.com/dompdf/php-font-lib
 * @author  Fabien Ménager <fabien.menager@gmail.com>
 * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
 */

namespace FontLib\WOFF;

use FontLib\Table\DirectoryEntry;

/**
 * WOFF font file table directory entry.
 *
 * @package php-font-lib
 */
class TableDirectoryEntry extends DirectoryEntry {
  public $origLength;

  function __construct(File $font) {
    parent::__construct($font);
  }

  function parse() {
    parent::parse();

    $font             = $this->font;
    $this->offset     = $font->readUInt32();
    $this->length     = $font->readUInt32();
    $this->origLength = $font->readUInt32();
    $this->checksum   = $font->readUInt32();
  }
}
Matt Butcher [technosophos] <technosophos@gmail.com> (lead)
Matt Farina  [mattfarina] <matt@mattfarina.com> (lead)
Asmir Mustafic [goetas] <goetas@lignano.it> (contributor)
Edward Z. Yang [ezyang] <ezyang@mit.edu> (contributor)
Geoffrey Sneddon [gsnedders] <geoffers@gmail.com> (contributor)
Kukhar Vasily [ngreduce] <ngreduce@gmail.com> (contributor)
Rune Christensen [MrElectronic] <mrelectronic@example.com> (contributor)
Mišo Belica [miso-belica] <miso-belica@example.com> (contributor)
Asmir Mustafic [goetas] <goetas@example.com> (contributor)
KITAITI Makoto [KitaitiMakoto] <KitaitiMakoto@example.com> (contributor) 
Jacob Floyd [cognifloyd] <cognifloyd@gmail.com> (contributor)
## HTML5-PHP License

Copyright (c) 2013 The Authors of HTML5-PHP

Matt Butcher - mattbutcher@google.com
Matt Farina - matt@mattfarina.com
Asmir Mustafic - goetas@gmail.com

Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in 
the Software without restriction, including without limitation the rights to 
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

## HTML5Lib License

Portions of this are based on html5lib's PHP version, which was a
sub-project of html5lib. The following is the list of contributors from
html5lib:

html5lib:

Copyright (c) 2006-2009 The Authors

Contributors:
James Graham - jg307@cam.ac.uk
Anne van Kesteren - annevankesteren@gmail.com
Lachlan Hunt - lachlan.hunt@lachy.id.au
Matt McDonald - kanashii@kanashii.ca
Sam Ruby - rubys@intertwingly.net
Ian Hickson (Google) - ian@hixie.ch
Thomas Broyer - t.broyer@ltgt.net
Jacques Distler - distler@golem.ph.utexas.edu
Henri Sivonen - hsivonen@iki.fi
Adam Barth - abarth@webkit.org
Eric Seidel - eric@webkit.org
The Mozilla Foundation (contributions from Henri Sivonen since 2008)
David Flanagan (Mozilla) - dflanagan@mozilla.com

Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in 
the Software without restriction, including without limitation the rights to 
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
> # UKRAINE NEEDS YOUR HELP NOW!
>
> On 24 February 2022, Russian [President Vladimir Putin ordered an invasion of Ukraine by Russian Armed Forces](https://www.bbc.com/news/world-europe-60504334).
>
> Your support is urgently needed.
>
> - Donate to the volunteers. Here is the volunteer fund helping the Ukrainian army to provide all the necessary equipment:
>  https://bank.gov.ua/en/news/all/natsionalniy-bank-vidkriv-spetsrahunok-dlya-zboru-koshtiv-na-potrebi-armiyi or https://savelife.in.ua/en/donate/
> - Triple-check social media sources. Russian disinformation is attempting to coverup and distort the reality in Ukraine.
> - Help Ukrainian refugees who are fleeing Russian attacks and shellings: https://www.globalcitizen.org/en/content/ways-to-help-ukraine-conflict/
> -  Put pressure on your political representatives to provide help to Ukraine.
> -  Believe in the Ukrainian people, they will not surrender, they don't have another Ukraine.
>
> THANK YOU!
----

# HTML5-PHP

HTML5 is a standards-compliant HTML5 parser and writer written entirely in PHP.
It is stable and used in many production websites, and has
well over [five million downloads](https://packagist.org/packages/masterminds/html5).

HTML5 provides the following features.

- An HTML5 serializer
- Support for PHP namespaces
- Composer support
- Event-based (SAX-like) parser
- A DOM tree builder
- Interoperability with [QueryPath](https://github.com/technosophos/querypath)
- Runs on **PHP** 5.3.0 or newer

[![CI](https://github.com/Masterminds/html5-php/actions/workflows/ci.yaml/badge.svg)](https://github.com/Masterminds/html5-php/actions/workflows/ci.yaml)
[![Latest Stable Version](https://poser.pugx.org/masterminds/html5/v/stable.png)](https://packagist.org/packages/masterminds/html5)
[![Code Coverage](https://scrutinizer-ci.com/g/Masterminds/html5-php/badges/coverage.png?b=master)](https://scrutinizer-ci.com/g/Masterminds/html5-php/?branch=master)
[![Scrutinizer Code Quality](https://scrutinizer-ci.com/g/Masterminds/html5-php/badges/quality-score.png?b=master)](https://scrutinizer-ci.com/g/Masterminds/html5-php/?branch=master)
[![Stability: Sustained](https://masterminds.github.io/stability/sustained.svg)](https://masterminds.github.io/stability/sustained.html)

## Installation

Install HTML5-PHP using [composer](http://getcomposer.org/).

By adding the `masterminds/html5` dependency to your `composer.json` file:

```json
{
  "require" : {
    "masterminds/html5": "^2.0"
  },
}
```

By invoking require command via composer executable:

```bash
composer require masterminds/html5
```

## Basic Usage

HTML5-PHP has a high-level API and a low-level API.

Here is how you use the high-level `HTML5` library API:

```php
<?php
// Assuming you installed from Composer:
require "vendor/autoload.php";

use Masterminds\HTML5;

// An example HTML document:
$html = <<< 'HERE'
  <html>
  <head>
    <title>TEST</title>
  </head>
  <body id='foo'>
    <h1>Hello World</h1>
    <p>This is a test of the HTML5 parser.</p>
  </body>
  </html>
HERE;

// Parse the document. $dom is a DOMDocument.
$html5 = new HTML5();
$dom = $html5->loadHTML($html);

// Render it as HTML5:
print $html5->saveHTML($dom);

// Or save it to a file:
$html5->save($dom, 'out.html');
```

The `$dom` created by the parser is a full `DOMDocument` object. And the
`save()` and `saveHTML()` methods will take any DOMDocument.

### Options

It is possible to pass in an array of configuration options when loading
an HTML5 document.

```php
// An associative array of options
$options = array(
  'option_name' => 'option_value',
);

// Provide the options to the constructor
$html5 = new HTML5($options);

$dom = $html5->loadHTML($html);
```

The following options are supported:

* `encode_entities` (boolean): Indicates that the serializer should aggressively
  encode characters as entities. Without this, it only encodes the bare
  minimum.
* `disable_html_ns` (boolean): Prevents the parser from automatically
  assigning the HTML5 namespace to the DOM document. This is for
  non-namespace aware DOM tools.
* `target_document` (\DOMDocument): A DOM document that will be used as the
  destination for the parsed nodes.
* `implicit_namespaces` (array): An assoc array of namespaces that should be
  used by the parser. Name is tag prefix, value is NS URI.

## The Low-Level API

This library provides the following low-level APIs that you can use to
create more customized HTML5 tools:

- A SAX-like event-based parser that you can hook into for special kinds
of parsing.
- A flexible error-reporting mechanism that can be tuned to document
syntax checking.
- A DOM implementation that uses PHP's built-in DOM library.

The unit tests exercise each piece of the API, and every public function
is well-documented.

### Parser Design

The parser is designed as follows:

- The `Scanner` handles scanning on behalf of the parser.
- The `Tokenizer` requests data off of the scanner, parses it, clasifies
it, and sends it to an `EventHandler`. It is a *recursive descent parser.*
- The `EventHandler` receives notifications and data for each specific
semantic event that occurs during tokenization.
- The `DOMBuilder` is an `EventHandler` that listens for tokenizing
events and builds a document tree (`DOMDocument`) based on the events.

### Serializer Design

The serializer takes a data structure (the `DOMDocument`) and transforms
it into a character representation -- an HTML5 document.

The serializer is broken into three parts:

- The `OutputRules` contain the rules to turn DOM elements into strings. The
rules are an implementation of the interface `RulesInterface` allowing for
different rule sets to be used.
- The `Traverser`, which is a special-purpose tree walker. It visits
each node node in the tree and uses the `OutputRules` to transform the node
into a string.
- `HTML5` manages the `Traverser` and stores the resultant data
in the correct place.

The serializer (`save()`, `saveHTML()`) follows the
[section 8.9 of the HTML 5.0 spec](http://www.w3.org/TR/2012/CR-html5-20121217/syntax.html#serializing-html-fragments).
So tags are serialized according to these rules:

- A tag with children: &lt;foo&gt;CHILDREN&lt;/foo&gt;
- A tag that cannot have content: &lt;foo&gt; (no closing tag)
- A tag that could have content, but doesn't: &lt;foo&gt;&lt;/foo&gt;

## Known Issues (Or, Things We Designed Against the Spec)

Please check the issue queue for a full list, but the following are
issues known issues that are not presently on the roadmap:

- Namespaces: HTML5 only [supports a selected list of namespaces](http://www.w3.org/TR/html5/infrastructure.html#namespaces)
  and they do not operate in the same way as XML namespaces. A `:` has no special
  meaning.
  By default the parser does not support XML style namespaces via `:`;
  to enable the XML namespaces see the  [XML Namespaces section](#xml-namespaces)
- Scripts: This parser does not contain a JavaScript or a CSS
  interpreter. While one may be supplied, not all features will be
  supported.
- Reentrance: The current parser is not re-entrant. (Thus you can't pause
  the parser to modify the HTML string mid-parse.)
- Validation: The current tree builder is **not** a validating parser.
  While it will correct some HTML, it does not check that the HTML
  conforms to the standard. (Should you wish, you can build a validating
  parser by extending DOMTree or building your own EventHandler
  implementation.)
  * There is limited support for insertion modes.
  * Some autocorrection is done automatically.
  * Per the spec, many legacy tags are admitted and correctly handled,
    even though they are technically not part of HTML5.
- Attribute names and values: Due to the implementation details of the
  PHP implementation of DOM, attribute names that do not follow the
  XML 1.0 standard are not inserted into the DOM. (Effectively, they
  are ignored.) If you've got a clever fix for this, jump in!
- Processor Instructions: The HTML5 spec does not allow processor
  instructions. We do. Since this is a server-side library, we think
  this is useful. And that means, dear reader, that in some cases you
  can parse the HTML from a mixed PHP/HTML document. This, however,
  is an incidental feature, not a core feature.
- HTML manifests: Unsupported.
- PLAINTEXT: Unsupported.
- Adoption Agency Algorithm: Not yet implemented. (8.2.5.4.7)

## XML Namespaces

To use XML style namespaces you have to configure well the main `HTML5` instance.

```php
use Masterminds\HTML5;
$html = new HTML5(array(
    "xmlNamespaces" => true
));

$dom = $html->loadHTML('<t:tag xmlns:t="http://www.example.com"/>');

$dom->documentElement->namespaceURI; // http://www.example.com

```

You can also add some default prefixes that will not require the namespace declaration,
but its elements will be namespaced.

```php
use Masterminds\HTML5;
$html = new HTML5(array(
    "implicitNamespaces"=>array(
        "t"=>"http://www.example.com"
    )
));

$dom = $html->loadHTML('<t:tag/>');

$dom->documentElement->namespaceURI; // http://www.example.com

```

## Thanks to...

The dedicated (and patient) contributors of patches small and large,
who have already made this library better.See the CREDITS file for
a list of contributors.

We owe a huge debt of gratitude to the original authors of html5lib.

While not much of the original parser remains, we learned a lot from
reading the html5lib library. And some pieces remain here. In
particular, much of the UTF-8 and Unicode handling is derived from the
html5lib project.

## License

This software is released under the MIT license. The original html5lib
library was also released under the MIT license.

See LICENSE.txt

Certain files contain copyright assertions by specific individuals
involved with html5lib. Those have been retained where appropriate.
# Release Notes

2.7.6  (2021-08-18)

- #218: Address comment handling issues 

2.7.5  (2021-07-01)

- #204: Travis: Enable tests on PHP 8.0 
- #207: Fix PHP 8.1 deprecations 

2.7.4  (2020-10-01)

- #191: Fix travisci build 
- #195: Add .gitattributes file with export-ignore rules 
- #194: Fix query parameter parsed as character entity

2.7.3 (2020-07-05)

- #190: mitigate cyclic reference between output rules and the traverser objects 

2.7.2 (2020-07-01)

- #187: Fixed memory leak in HTML5::saveHTML() 
- #186: Add special case for end tag </br>

2.7.1 (2020-06-14)

- #171: add PHP 7.4 job 
- #178: Prevent infinite loop on un-terminated entity declaration at EOF 

2.7.0 (2019-07-25)

- #164: Drop HHVM support
- #168: Set default encoding in the DOMDocument object

2.6.0 (2019-03-10)

- #163: Allow to pass a charset to the Scanner

2.5.0 (2018-12-27)

- #162, #161, #155, #154, #153, #151: big performance improvements
- #156: fixed typos
- #160: adopt and enforce code style
- #159: remove deprecated php unit base test case
- #150: backport changes from old master branch 

2.4.0 (2018-11-17)

- #148: Improve performance by moving sequence matching 
- #147: Improve the Tokenizer performance 
- #146: Improve performance by relying on a native string instead of InputStream 
- #144: Add DOM extension in composer.json
- #145: Add more extensions on composer.json, improve phpdocs and remove dead code 
- #143: Remove experimental comment 

2.3.1 (2018-10-18)

- #121: Audio is not a block tag (fixed by #141)
- #136: Handle illegal self-closing according to spec (fixed by #137)
- #141: Minor fixes in the README

2.3.0 (2017-09-04)

- #129: image within inline svg breaks system (fixed by #133) 
- #131: &sup2; does not work (fixed by #132)
- #134: Improve tokenizer performance by 20% (alternative version of #130 thanks to @MichaelHeerklotz)
- #135: Raw & in attributes

2.2.2 (2016-09-22)

- #116: In XML mode, tags are case sensitive
- #115: Fix PHP Notice in OutputRules
- #112: fix parsing of options of an optgroup
- #111: Adding test for the address tag

2.2.1 (2016-05-10)

- #109: Fixed issue where address tag could be written without closing tag (thanks sylus)

2.2.0 (2016-04-11)

- #105: Enable composer cache (for CI/CD)
- #100: Use mb_substitute_character inset of ini_set for environments where ini_set is disable (e.g., shared hosting)
- #98: Allow link, meta, style tags in noscript tags
- #96: Fixed xml:href on svgs that use the "use" breaking
- #94: Counting UTF8 characters performance improvement
- #93: Use newer version of coveralls package
- #90: Remove duplicate test
- #87: Allow multiple root nodes

2.1.2 (2015-06-07)
- #82: Support for PHP7
- #84: Improved boolean attribute handling

2.1.1 (2015-03-23)
- #78: Fixes bug where unmatched entity like string drops everything after &.

2.1.0 (2015-02-01)
- #74: Added `disable_html_ns` and `target_doc` dom parsing options
- Unified option names
- #73: Fixed alphabet, &szlig; now can be detected
- #75 and #76: Allow whitespace in RCDATA tags
- #77: Fixed parsing blunder for json embeds
- #72: Add options to HTML methods

2.0.2 (2014-12-17)
- #50: empty document handling
- #63: tags with strange capitalization
- #65: dashes and underscores as allowed characters in tag names
- #68: Fixed issue with non-inline elements inside inline containers

2.0.1 (2014-09-23)
- #59: Fixed issue parsing some fragments.
- #56: Incorrectly saw 0 as empty string
- Sami as new documentation generator

2.0.0 (2014-07-28)
- #53: Improved boolean attributes handling
- #52: Facebook HHVM compatibility
- #48: Adopted PSR-2 as coding standard
- #47: Moved everything to Masterminds namespace
- #45: Added custom namespaces
- #44: Added support to XML-style namespaces
- #37: Refactored HTML5 class removing static methods

1.0.5 (2014-06-10)
- #38: Set the dev-master branch as the 1.0.x branch for composer (goetas)
- #34: Tests use PSR-4 for autoloading. (goetas)
- #40, #41: Fix entity handling in RCDATA sections. (KitaitiMakoto)
- #32: Fixed issue where wharacter references were being incorrectly encoded in style tags.

1.0.4 (2014-04-29)
- #30/#31 Don't throw an exception for invalid tag names.

1.0.3 (2014-02-28)
- #23 and #29: Ignore attributes with illegal chars in name for the PHP DOM.

1.0.2 (2014-02-12)
- #23: Handle missing tag close in attribute list.
- #25: Fixed text escaping in the serializer (HTML% 8.3).
- #27: Fixed tests on Windows: changed "\n" -> PHP_EOL.
- #28: Fixed infinite loop for char "&" in unquoted attribute in parser.
- #26: Updated tag name case handling to deal with uppercase usage.
- #24: Newlines and tabs are allowed inside quoted attributes (HTML5 8.2.4).
- Fixed Travis CI testing.

1.0.1 (2013-11-07)
- CDATA encoding is improved. (Non-standard; Issue #19)
- Some parser rules were not returning the new current element. (Issue #20)
- Added, to the README, details on code test coverage and to packagist version.
- Fixed processor instructions.
- Improved test coverage and documentation coverage.

1.0.0 (2013-10-02)
- Initial release.
From 1.x to 2.x
=================

- All classes uses `Masterminds` namespace.
- All public static methods has been removed from `HTML5` class and the general API to access the HTML5 functionalities has changed. 

    Before:
    
        $dom = \HTML5::loadHTML('<html>....');
        \HTML5::saveHTML($dom);
        
    After:

        use Masterminds\HTML5;
        
        $html5 = new HTML5();
        
        $dom = $html5->loadHTML('<html>....');
        echo $html5->saveHTML($dom);


<?php
/**
 * Fetch the entities.json file and convert to PHP datastructure.
 */

// The URL to the official entities JSON file.
$ENTITIES_URL = 'http://www.w3.org/TR/2012/CR-html5-20121217/entities.json';

$payload = file_get_contents($ENTITIES_URL);
$json = json_decode($payload);

$table = array();
foreach ($json as $name => $obj) {
    $sname = substr($name, 1, -1);
    $table[$sname] = $obj->characters;
}

echo '<?php
namespace Masterminds\\HTML5;
/** Entity lookup tables. This class is automatically generated. */
class Entities {
  public static $byName = ';
var_export($table);
echo ';
}' . PHP_EOL;
//print serialize($table);
{
    "name": "masterminds/html5",
    "description": "An HTML5 parser and serializer.",
    "type": "library",
    "homepage": "http://masterminds.github.io/html5-php",
    "license": "MIT",
    "keywords": ["xml", "html", "html5", "dom", "parser", "serializer", "querypath"],
    "authors": [
        {
            "name": "Matt Butcher",
            "email": "technosophos@gmail.com"
        },
        {
            "name": "Matt Farina",
            "email": "matt@mattfarina.com"
        },
        {
            "name": "Asmir Mustafic",
            "email": "goetas@gmail.com"
        }
    ],
    "require" : {
        "ext-dom": "*",
        "php" : ">=5.3.0"
    },
    "require-dev": {
        "phpunit/phpunit" : "^4.8.35 || ^5.7.21 || ^6 || ^7 || ^8 || ^9"
    },
    "autoload": {
        "psr-4": {"Masterminds\\": "src"}
    },
    "autoload-dev": {
        "psr-4": {"Masterminds\\HTML5\\Tests\\": "test/HTML5"}
    },
    "extra": {
        "branch-alias": {
            "dev-master": "2.7-dev"
        }
    }
}
<?php

namespace Masterminds;

use Masterminds\HTML5\Parser\DOMTreeBuilder;
use Masterminds\HTML5\Parser\Scanner;
use Masterminds\HTML5\Parser\Tokenizer;
use Masterminds\HTML5\Serializer\OutputRules;
use Masterminds\HTML5\Serializer\Traverser;

/**
 * This class offers convenience methods for parsing and serializing HTML5.
 * It is roughly designed to mirror the \DOMDocument native class.
 */
class HTML5
{
    /**
     * Global options for the parser and serializer.
     *
     * @var array
     */
    private $defaultOptions = array(
        // Whether the serializer should aggressively encode all characters as entities.
        'encode_entities' => false,

        // Prevents the parser from automatically assigning the HTML5 namespace to the DOM document.
        'disable_html_ns' => false,
    );

    protected $errors = array();

    public function __construct(array $defaultOptions = array())
    {
        $this->defaultOptions = array_merge($this->defaultOptions, $defaultOptions);
    }

    /**
     * Get the current default options.
     *
     * @return array
     */
    public function getOptions()
    {
        return $this->defaultOptions;
    }

    /**
     * Load and parse an HTML file.
     *
     * This will apply the HTML5 parser, which is tolerant of many
     * varieties of HTML, including XHTML 1, HTML 4, and well-formed HTML
     * 3. Note that in these cases, not all of the old data will be
     * preserved. For example, XHTML's XML declaration will be removed.
     *
     * The rules governing parsing are set out in the HTML 5 spec.
     *
     * @param string|resource $file    The path to the file to parse. If this is a resource, it is
     *                                 assumed to be an open stream whose pointer is set to the first
     *                                 byte of input.
     * @param array           $options Configuration options when parsing the HTML.
     *
     * @return \DOMDocument A DOM document. These object type is defined by the libxml
     *                      library, and should have been included with your version of PHP.
     */
    public function load($file, array $options = array())
    {
        // Handle the case where file is a resource.
        if (is_resource($file)) {
            return $this->parse(stream_get_contents($file), $options);
        }

        return $this->parse(file_get_contents($file), $options);
    }

    /**
     * Parse a HTML Document from a string.
     *
     * Take a string of HTML 5 (or earlier) and parse it into a
     * DOMDocument.
     *
     * @param string $string  A html5 document as a string.
     * @param array  $options Configuration options when parsing the HTML.
     *
     * @return \DOMDocument A DOM document. DOM is part of libxml, which is included with
     *                      almost all distribtions of PHP.
     */
    public function loadHTML($string, array $options = array())
    {
        return $this->parse($string, $options);
    }

    /**
     * Convenience function to load an HTML file.
     *
     * This is here to provide backwards compatibility with the
     * PHP DOM implementation. It simply calls load().
     *
     * @param string $file    The path to the file to parse. If this is a resource, it is
     *                        assumed to be an open stream whose pointer is set to the first
     *                        byte of input.
     * @param array  $options Configuration options when parsing the HTML.
     *
     * @return \DOMDocument A DOM document. These object type is defined by the libxml
     *                      library, and should have been included with your version of PHP.
     */
    public function loadHTMLFile($file, array $options = array())
    {
        return $this->load($file, $options);
    }

    /**
     * Parse a HTML fragment from a string.
     *
     * @param string $string  the HTML5 fragment as a string
     * @param array  $options Configuration options when parsing the HTML
     *
     * @return \DOMDocumentFragment A DOM fragment. The DOM is part of libxml, which is included with
     *                              almost all distributions of PHP.
     */
    public function loadHTMLFragment($string, array $options = array())
    {
        return $this->parseFragment($string, $options);
    }

    /**
     * Return all errors encountered into parsing phase.
     *
     * @return array
     */
    public function getErrors()
    {
        return $this->errors;
    }

    /**
     * Return true it some errors were encountered into parsing phase.
     *
     * @return bool
     */
    public function hasErrors()
    {
        return count($this->errors) > 0;
    }

    /**
     * Parse an input string.
     *
     * @param string $input
     *
     * @return \DOMDocument
     */
    public function parse($input, array $options = array())
    {
        $this->errors = array();
        $options = array_merge($this->defaultOptions, $options);
        $events = new DOMTreeBuilder(false, $options);
        $scanner = new Scanner($input, !empty($options['encoding']) ? $options['encoding'] : 'UTF-8');
        $parser = new Tokenizer($scanner, $events, !empty($options['xmlNamespaces']) ? Tokenizer::CONFORMANT_XML : Tokenizer::CONFORMANT_HTML);

        $parser->parse();
        $this->errors = $events->getErrors();

        return $events->document();
    }

    /**
     * Parse an input stream where the stream is a fragment.
     *
     * Lower-level loading function. This requires an input stream instead
     * of a string, file, or resource.
     *
     * @param string $input   The input data to parse in the form of a string.
     * @param array  $options An array of options.
     *
     * @return \DOMDocumentFragment
     */
    public function parseFragment($input, array $options = array())
    {
        $options = array_merge($this->defaultOptions, $options);
        $events = new DOMTreeBuilder(true, $options);
        $scanner = new Scanner($input, !empty($options['encoding']) ? $options['encoding'] : 'UTF-8');
        $parser = new Tokenizer($scanner, $events, !empty($options['xmlNamespaces']) ? Tokenizer::CONFORMANT_XML : Tokenizer::CONFORMANT_HTML);

        $parser->parse();
        $this->errors = $events->getErrors();

        return $events->fragment();
    }

    /**
     * Save a DOM into a given file as HTML5.
     *
     * @param mixed           $dom     The DOM to be serialized.
     * @param string|resource $file    The filename to be written or resource to write to.
     * @param array           $options Configuration options when serializing the DOM. These include:
     *                                 - encode_entities: Text written to the output is escaped by default and not all
     *                                 entities are encoded. If this is set to true all entities will be encoded.
     *                                 Defaults to false.
     */
    public function save($dom, $file, $options = array())
    {
        $close = true;
        if (is_resource($file)) {
            $stream = $file;
            $close = false;
        } else {
            $stream = fopen($file, 'wb');
        }
        $options = array_merge($this->defaultOptions, $options);
        $rules = new OutputRules($stream, $options);
        $trav = new Traverser($dom, $stream, $rules, $options);

        $trav->walk();
        /*
         * release the traverser to avoid cyclic references and allow PHP to free memory without waiting for gc_collect_cycles
         */
        $rules->unsetTraverser();
        if ($close) {
            fclose($stream);
        }
    }

    /**
     * Convert a DOM into an HTML5 string.
     *
     * @param mixed $dom     The DOM to be serialized.
     * @param array $options Configuration options when serializing the DOM. These include:
     *                       - encode_entities: Text written to the output is escaped by default and not all
     *                       entities are encoded. If this is set to true all entities will be encoded.
     *                       Defaults to false.
     *
     * @return string A HTML5 documented generated from the DOM.
     */
    public function saveHTML($dom, $options = array())
    {
        $stream = fopen('php://temp', 'wb');
        $this->save($dom, $stream, array_merge($this->defaultOptions, $options));

        $html = stream_get_contents($stream, -1, 0);

        fclose($stream);

        return $html;
    }
}
<?php
/**
 * Provide general element functions.
 */

namespace Masterminds\HTML5;

/**
 * This class provides general information about HTML5 elements,
 * including syntactic and semantic issues.
 * Parsers and serializers can
 * use this class as a reference point for information about the rules
 * of various HTML5 elements.
 *
 * @todo consider using a bitmask table lookup. There is enough overlap in
 *       naming that this could significantly shrink the size and maybe make it
 *       faster. See the Go teams implementation at https://code.google.com/p/go/source/browse/html/atom.
 */
class Elements
{
    /**
     * Indicates an element is described in the specification.
     */
    const KNOWN_ELEMENT = 1;

    // From section 8.1.2: "script", "style"
    // From 8.2.5.4.7 ("in body" insertion mode): "noembed"
    // From 8.4 "style", "xmp", "iframe", "noembed", "noframes"
    /**
     * Indicates the contained text should be processed as raw text.
     */
    const TEXT_RAW = 2;

    // From section 8.1.2: "textarea", "title"
    /**
     * Indicates the contained text should be processed as RCDATA.
     */
    const TEXT_RCDATA = 4;

    /**
     * Indicates the tag cannot have content.
     */
    const VOID_TAG = 8;

    // "address", "article", "aside", "blockquote", "center", "details", "dialog", "dir", "div", "dl",
    // "fieldset", "figcaption", "figure", "footer", "header", "hgroup", "menu",
    // "nav", "ol", "p", "section", "summary", "ul"
    // "h1", "h2", "h3", "h4", "h5", "h6"
    // "pre", "listing"
    // "form"
    // "plaintext"
    /**
     * Indicates that if a previous event is for a P tag, that element
     * should be considered closed.
     */
    const AUTOCLOSE_P = 16;

    /**
     * Indicates that the text inside is plaintext (pre).
     */
    const TEXT_PLAINTEXT = 32;

    // See https://developer.mozilla.org/en-US/docs/HTML/Block-level_elements
    /**
     * Indicates that the tag is a block.
     */
    const BLOCK_TAG = 64;

    /**
     * Indicates that the tag allows only inline elements as child nodes.
     */
    const BLOCK_ONLY_INLINE = 128;

    /**
     * Elements with optional end tags that cause auto-closing of previous and parent tags,
     * as example most of the table related tags, see https://www.w3.org/TR/html401/struct/tables.html
     * Structure is as follows:
     * TAG-NAME => [PARENT-TAG-NAME-TO-CLOSE1, PARENT-TAG-NAME-TO-CLOSE2, ...].
     *
     * Order is important, after auto-closing one parent with might have to close also their parent.
     *
     * @var array<string, string[]>
     */
    public static $optionalEndElementsParentsToClose = array(
        'tr' => array('td', 'tr'),
        'td' => array('td', 'th'),
        'th' => array('td', 'th'),
        'tfoot' => array('td', 'th', 'tr', 'tbody', 'thead'),
        'tbody' => array('td', 'th', 'tr', 'thead'),
    );

    /**
     * The HTML5 elements as defined in http://dev.w3.org/html5/markup/elements.html.
     *
     * @var array
     */
    public static $html5 = array(
        'a' => 1,
        'abbr' => 1,
        'address' => 65, // NORMAL | BLOCK_TAG
        'area' => 9, // NORMAL | VOID_TAG
        'article' => 81, // NORMAL | AUTOCLOSE_P | BLOCK_TAG
        'aside' => 81, // NORMAL | AUTOCLOSE_P | BLOCK_TAG
        'audio' => 1, // NORMAL
        'b' => 1,
        'base' => 9, // NORMAL | VOID_TAG
        'bdi' => 1,
        'bdo' => 1,
        'blockquote' => 81, // NORMAL | AUTOCLOSE_P | BLOCK_TAG
        'body' => 1,
        'br' => 9, // NORMAL | VOID_TAG
        'button' => 1,
        'canvas' => 65, // NORMAL | BLOCK_TAG
        'caption' => 1,
        'cite' => 1,
        'code' => 1,
        'col' => 9, // NORMAL | VOID_TAG
        'colgroup' => 1,
        'command' => 9, // NORMAL | VOID_TAG
                        // "data" => 1, // This is highly experimental and only part of the whatwg spec (not w3c). See https://developer.mozilla.org/en-US/docs/HTML/Element/data
        'datalist' => 1,
        'dd' => 65, // NORMAL | BLOCK_TAG
        'del' => 1,
        'details' => 17, // NORMAL | AUTOCLOSE_P,
        'dfn' => 1,
        'dialog' => 17, // NORMAL | AUTOCLOSE_P,
        'div' => 81, // NORMAL | AUTOCLOSE_P | BLOCK_TAG
        'dl' => 81, // NORMAL | AUTOCLOSE_P | BLOCK_TAG
        'dt' => 1,
        'em' => 1,
        'embed' => 9, // NORMAL | VOID_TAG
        'fieldset' => 81, // NORMAL | AUTOCLOSE_P | BLOCK_TAG
        'figcaption' => 81, // NORMAL | AUTOCLOSE_P | BLOCK_TAG
        'figure' => 81, // NORMAL | AUTOCLOSE_P | BLOCK_TAG
        'footer' => 81, // NORMAL | AUTOCLOSE_P | BLOCK_TAG
        'form' => 81, // NORMAL | AUTOCLOSE_P | BLOCK_TAG
        'h1' => 81, // NORMAL | AUTOCLOSE_P | BLOCK_TAG
        'h2' => 81, // NORMAL | AUTOCLOSE_P | BLOCK_TAG
        'h3' => 81, // NORMAL | AUTOCLOSE_P | BLOCK_TAG
        'h4' => 81, // NORMAL | AUTOCLOSE_P | BLOCK_TAG
        'h5' => 81, // NORMAL | AUTOCLOSE_P | BLOCK_TAG
        'h6' => 81, // NORMAL | AUTOCLOSE_P | BLOCK_TAG
        'head' => 1,
        'header' => 81, // NORMAL | AUTOCLOSE_P | BLOCK_TAG
        'hgroup' => 81, // NORMAL | AUTOCLOSE_P | BLOCK_TAG
        'hr' => 73, // NORMAL | VOID_TAG
        'html' => 1,
        'i' => 1,
        'iframe' => 3, // NORMAL | TEXT_RAW
        'img' => 9, // NORMAL | VOID_TAG
        'input' => 9, // NORMAL | VOID_TAG
        'kbd' => 1,
        'ins' => 1,
        'keygen' => 9, // NORMAL | VOID_TAG
        'label' => 1,
        'legend' => 1,
        'li' => 1,
        'link' => 9, // NORMAL | VOID_TAG
        'map' => 1,
        'mark' => 1,
        'menu' => 17, // NORMAL | AUTOCLOSE_P,
        'meta' => 9, // NORMAL | VOID_TAG
        'meter' => 1,
        'nav' => 17, // NORMAL | AUTOCLOSE_P,
        'noscript' => 65, // NORMAL | BLOCK_TAG
        'object' => 1,
        'ol' => 81, // NORMAL | AUTOCLOSE_P | BLOCK_TAG
        'optgroup' => 1,
        'option' => 1,
        'output' => 65, // NORMAL | BLOCK_TAG
        'p' => 209, // NORMAL | AUTOCLOSE_P | BLOCK_TAG | BLOCK_ONLY_INLINE
        'param' => 9, // NORMAL | VOID_TAG
        'pre' => 81, // NORMAL | AUTOCLOSE_P | BLOCK_TAG
        'progress' => 1,
        'q' => 1,
        'rp' => 1,
        'rt' => 1,
        'ruby' => 1,
        's' => 1,
        'samp' => 1,
        'script' => 3, // NORMAL | TEXT_RAW
        'section' => 81, // NORMAL | AUTOCLOSE_P | BLOCK_TAG
        'select' => 1,
        'small' => 1,
        'source' => 9, // NORMAL | VOID_TAG
        'span' => 1,
        'strong' => 1,
        'style' => 3, // NORMAL | TEXT_RAW
        'sub' => 1,
        'summary' => 17, // NORMAL | AUTOCLOSE_P,
        'sup' => 1,
        'table' => 65, // NORMAL | BLOCK_TAG
        'tbody' => 1,
        'td' => 1,
        'textarea' => 5, // NORMAL | TEXT_RCDATA
        'tfoot' => 65, // NORMAL | BLOCK_TAG
        'th' => 1,
        'thead' => 1,
        'time' => 1,
        'title' => 5, // NORMAL | TEXT_RCDATA
        'tr' => 1,
        'track' => 9, // NORMAL | VOID_TAG
        'u' => 1,
        'ul' => 81, // NORMAL | AUTOCLOSE_P | BLOCK_TAG
        'var' => 1,
        'video' => 1,
        'wbr' => 9, // NORMAL | VOID_TAG

        // Legacy?
        'basefont' => 8, // VOID_TAG
        'bgsound' => 8, // VOID_TAG
        'noframes' => 2, // RAW_TEXT
        'frame' => 9, // NORMAL | VOID_TAG
        'frameset' => 1,
        'center' => 16,
        'dir' => 16,
        'listing' => 16, // AUTOCLOSE_P
        'plaintext' => 48, // AUTOCLOSE_P | TEXT_PLAINTEXT
        'applet' => 0,
        'marquee' => 0,
        'isindex' => 8, // VOID_TAG
        'xmp' => 20, // AUTOCLOSE_P | VOID_TAG | RAW_TEXT
        'noembed' => 2, // RAW_TEXT
        );

    /**
     * The MathML elements.
     * See http://www.w3.org/wiki/MathML/Elements.
     *
     * In our case we are only concerned with presentation MathML and not content
     * MathML. There is a nice list of this subset at https://developer.mozilla.org/en-US/docs/MathML/Element.
     *
     * @var array
     */
    public static $mathml = array(
        'maction' => 1,
        'maligngroup' => 1,
        'malignmark' => 1,
        'math' => 1,
        'menclose' => 1,
        'merror' => 1,
        'mfenced' => 1,
        'mfrac' => 1,
        'mglyph' => 1,
        'mi' => 1,
        'mlabeledtr' => 1,
        'mlongdiv' => 1,
        'mmultiscripts' => 1,
        'mn' => 1,
        'mo' => 1,
        'mover' => 1,
        'mpadded' => 1,
        'mphantom' => 1,
        'mroot' => 1,
        'mrow' => 1,
        'ms' => 1,
        'mscarries' => 1,
        'mscarry' => 1,
        'msgroup' => 1,
        'msline' => 1,
        'mspace' => 1,
        'msqrt' => 1,
        'msrow' => 1,
        'mstack' => 1,
        'mstyle' => 1,
        'msub' => 1,
        'msup' => 1,
        'msubsup' => 1,
        'mtable' => 1,
        'mtd' => 1,
        'mtext' => 1,
        'mtr' => 1,
        'munder' => 1,
        'munderover' => 1,
    );

    /**
     * The svg elements.
     *
     * The Mozilla documentation has a good list at https://developer.mozilla.org/en-US/docs/SVG/Element.
     * The w3c list appears to be lacking in some areas like filter effect elements.
     * That list can be found at http://www.w3.org/wiki/SVG/Elements.
     *
     * Note, FireFox appears to do a better job rendering filter effects than chrome.
     * While they are in the spec I'm not sure how widely implemented they are.
     *
     * @var array
     */
    public static $svg = array(
        'a' => 1,
        'altGlyph' => 1,
        'altGlyphDef' => 1,
        'altGlyphItem' => 1,
        'animate' => 1,
        'animateColor' => 1,
        'animateMotion' => 1,
        'animateTransform' => 1,
        'circle' => 1,
        'clipPath' => 1,
        'color-profile' => 1,
        'cursor' => 1,
        'defs' => 1,
        'desc' => 1,
        'ellipse' => 1,
        'feBlend' => 1,
        'feColorMatrix' => 1,
        'feComponentTransfer' => 1,
        'feComposite' => 1,
        'feConvolveMatrix' => 1,
        'feDiffuseLighting' => 1,
        'feDisplacementMap' => 1,
        'feDistantLight' => 1,
        'feFlood' => 1,
        'feFuncA' => 1,
        'feFuncB' => 1,
        'feFuncG' => 1,
        'feFuncR' => 1,
        'feGaussianBlur' => 1,
        'feImage' => 1,
        'feMerge' => 1,
        'feMergeNode' => 1,
        'feMorphology' => 1,
        'feOffset' => 1,
        'fePointLight' => 1,
        'feSpecularLighting' => 1,
        'feSpotLight' => 1,
        'feTile' => 1,
        'feTurbulence' => 1,
        'filter' => 1,
        'font' => 1,
        'font-face' => 1,
        'font-face-format' => 1,
        'font-face-name' => 1,
        'font-face-src' => 1,
        'font-face-uri' => 1,
        'foreignObject' => 1,
        'g' => 1,
        'glyph' => 1,
        'glyphRef' => 1,
        'hkern' => 1,
        'image' => 1,
        'line' => 1,
        'linearGradient' => 1,
        'marker' => 1,
        'mask' => 1,
        'metadata' => 1,
        'missing-glyph' => 1,
        'mpath' => 1,
        'path' => 1,
        'pattern' => 1,
        'polygon' => 1,
        'polyline' => 1,
        'radialGradient' => 1,
        'rect' => 1,
        'script' => 3, // NORMAL | RAW_TEXT
        'set' => 1,
        'stop' => 1,
        'style' => 3, // NORMAL | RAW_TEXT
        'svg' => 1,
        'switch' => 1,
        'symbol' => 1,
        'text' => 1,
        'textPath' => 1,
        'title' => 1,
        'tref' => 1,
        'tspan' => 1,
        'use' => 1,
        'view' => 1,
        'vkern' => 1,
    );

    /**
     * Some attributes in SVG are case sensitive.
     *
     * This map contains key/value pairs with the key as the lowercase attribute
     * name and the value with the correct casing.
     */
    public static $svgCaseSensitiveAttributeMap = array(
        'attributename' => 'attributeName',
        'attributetype' => 'attributeType',
        'basefrequency' => 'baseFrequency',
        'baseprofile' => 'baseProfile',
        'calcmode' => 'calcMode',
        'clippathunits' => 'clipPathUnits',
        'contentscripttype' => 'contentScriptType',
        'contentstyletype' => 'contentStyleType',
        'diffuseconstant' => 'diffuseConstant',
        'edgemode' => 'edgeMode',
        'externalresourcesrequired' => 'externalResourcesRequired',
        'filterres' => 'filterRes',
        'filterunits' => 'filterUnits',
        'glyphref' => 'glyphRef',
        'gradienttransform' => 'gradientTransform',
        'gradientunits' => 'gradientUnits',
        'kernelmatrix' => 'kernelMatrix',
        'kernelunitlength' => 'kernelUnitLength',
        'keypoints' => 'keyPoints',
        'keysplines' => 'keySplines',
        'keytimes' => 'keyTimes',
        'lengthadjust' => 'lengthAdjust',
        'limitingconeangle' => 'limitingConeAngle',
        'markerheight' => 'markerHeight',
        'markerunits' => 'markerUnits',
        'markerwidth' => 'markerWidth',
        'maskcontentunits' => 'maskContentUnits',
        'maskunits' => 'maskUnits',
        'numoctaves' => 'numOctaves',
        'pathlength' => 'pathLength',
        'patterncontentunits' => 'patternContentUnits',
        'patterntransform' => 'patternTransform',
        'patternunits' => 'patternUnits',
        'pointsatx' => 'pointsAtX',
        'pointsaty' => 'pointsAtY',
        'pointsatz' => 'pointsAtZ',
        'preservealpha' => 'preserveAlpha',
        'preserveaspectratio' => 'preserveAspectRatio',
        'primitiveunits' => 'primitiveUnits',
        'refx' => 'refX',
        'refy' => 'refY',
        'repeatcount' => 'repeatCount',
        'repeatdur' => 'repeatDur',
        'requiredextensions' => 'requiredExtensions',
        'requiredfeatures' => 'requiredFeatures',
        'specularconstant' => 'specularConstant',
        'specularexponent' => 'specularExponent',
        'spreadmethod' => 'spreadMethod',
        'startoffset' => 'startOffset',
        'stddeviation' => 'stdDeviation',
        'stitchtiles' => 'stitchTiles',
        'surfacescale' => 'surfaceScale',
        'systemlanguage' => 'systemLanguage',
        'tablevalues' => 'tableValues',
        'targetx' => 'targetX',
        'targety' => 'targetY',
        'textlength' => 'textLength',
        'viewbox' => 'viewBox',
        'viewtarget' => 'viewTarget',
        'xchannelselector' => 'xChannelSelector',
        'ychannelselector' => 'yChannelSelector',
        'zoomandpan' => 'zoomAndPan',
    );

    /**
     * Some SVG elements are case sensitive.
     * This map contains these.
     *
     * The map contains key/value store of the name is lowercase as the keys and
     * the correct casing as the value.
     */
    public static $svgCaseSensitiveElementMap = array(
        'altglyph' => 'altGlyph',
        'altglyphdef' => 'altGlyphDef',
        'altglyphitem' => 'altGlyphItem',
        'animatecolor' => 'animateColor',
        'animatemotion' => 'animateMotion',
        'animatetransform' => 'animateTransform',
        'clippath' => 'clipPath',
        'feblend' => 'feBlend',
        'fecolormatrix' => 'feColorMatrix',
        'fecomponenttransfer' => 'feComponentTransfer',
        'fecomposite' => 'feComposite',
        'feconvolvematrix' => 'feConvolveMatrix',
        'fediffuselighting' => 'feDiffuseLighting',
        'fedisplacementmap' => 'feDisplacementMap',
        'fedistantlight' => 'feDistantLight',
        'feflood' => 'feFlood',
        'fefunca' => 'feFuncA',
        'fefuncb' => 'feFuncB',
        'fefuncg' => 'feFuncG',
        'fefuncr' => 'feFuncR',
        'fegaussianblur' => 'feGaussianBlur',
        'feimage' => 'feImage',
        'femerge' => 'feMerge',
        'femergenode' => 'feMergeNode',
        'femorphology' => 'feMorphology',
        'feoffset' => 'feOffset',
        'fepointlight' => 'fePointLight',
        'fespecularlighting' => 'feSpecularLighting',
        'fespotlight' => 'feSpotLight',
        'fetile' => 'feTile',
        'feturbulence' => 'feTurbulence',
        'foreignobject' => 'foreignObject',
        'glyphref' => 'glyphRef',
        'lineargradient' => 'linearGradient',
        'radialgradient' => 'radialGradient',
        'textpath' => 'textPath',
    );

    /**
     * Check whether the given element meets the given criterion.
     *
     * Example:
     *
     * Elements::isA('script', Elements::TEXT_RAW); // Returns true.
     *
     * Elements::isA('script', Elements::TEXT_RCDATA); // Returns false.
     *
     * @param string $name The element name.
     * @param int    $mask One of the constants on this class.
     *
     * @return bool true if the element matches the mask, false otherwise.
     */
    public static function isA($name, $mask)
    {
        return (static::element($name) & $mask) === $mask;
    }

    /**
     * Test if an element is a valid html5 element.
     *
     * @param string $name The name of the element.
     *
     * @return bool true if a html5 element and false otherwise.
     */
    public static function isHtml5Element($name)
    {
        // html5 element names are case insensitive. Forcing lowercase for the check.
        // Do we need this check or will all data passed here already be lowercase?
        return isset(static::$html5[strtolower($name)]);
    }

    /**
     * Test if an element name is a valid MathML presentation element.
     *
     * @param string $name The name of the element.
     *
     * @return bool true if a MathML name and false otherwise.
     */
    public static function isMathMLElement($name)
    {
        // MathML is case-sensitive unlike html5 elements.
        return isset(static::$mathml[$name]);
    }

    /**
     * Test if an element is a valid SVG element.
     *
     * @param string $name The name of the element.
     *
     * @return bool true if a SVG element and false otherise.
     */
    public static function isSvgElement($name)
    {
        // SVG is case-sensitive unlike html5 elements.
        return isset(static::$svg[$name]);
    }

    /**
     * Is an element name valid in an html5 document.
     * This includes html5 elements along with other allowed embedded content
     * such as svg and mathml.
     *
     * @param string $name The name of the element.
     *
     * @return bool true if valid and false otherwise.
     */
    public static function isElement($name)
    {
        return static::isHtml5Element($name) || static::isMathMLElement($name) || static::isSvgElement($name);
    }

    /**
     * Get the element mask for the given element name.
     *
     * @param string $name The name of the element.
     *
     * @return int the element mask.
     */
    public static function element($name)
    {
        if (isset(static::$html5[$name])) {
            return static::$html5[$name];
        }
        if (isset(static::$svg[$name])) {
            return static::$svg[$name];
        }
        if (isset(static::$mathml[$name])) {
            return static::$mathml[$name];
        }

        return 0;
    }

    /**
     * Normalize a SVG element name to its proper case and form.
     *
     * @param string $name The name of the element.
     *
     * @return string the normalized form of the element name.
     */
    public static function normalizeSvgElement($name)
    {
        $name = strtolower($name);
        if (isset(static::$svgCaseSensitiveElementMap[$name])) {
            $name = static::$svgCaseSensitiveElementMap[$name];
        }

        return $name;
    }

    /**
     * Normalize a SVG attribute name to its proper case and form.
     *
     * @param string $name The name of the attribute.
     *
     * @return string The normalized form of the attribute name.
     */
    public static function normalizeSvgAttribute($name)
    {
        $name = strtolower($name);
        if (isset(static::$svgCaseSensitiveAttributeMap[$name])) {
            $name = static::$svgCaseSensitiveAttributeMap[$name];
        }

        return $name;
    }

    /**
     * Normalize a MathML attribute name to its proper case and form.
     * Note, all MathML element names are lowercase.
     *
     * @param string $name The name of the attribute.
     *
     * @return string The normalized form of the attribute name.
     */
    public static function normalizeMathMlAttribute($name)
    {
        $name = strtolower($name);

        // Only one attribute has a mixed case form for MathML.
        if ('definitionurl' === $name) {
            $name = 'definitionURL';
        }

        return $name;
    }
}
<?php

namespace Masterminds\HTML5;

/**
 * Entity lookup tables.
 * This class is automatically generated.
 */
class Entities
{
    public static $byName = array(
        'Aacute' => 'Á',
        'Aacut' => 'Á',
        'aacute' => 'á',
        'aacut' => 'á',
        'Abreve' => 'Ă',
        'abreve' => 'ă',
        'ac' => '∾',
        'acd' => '∿',
        'acE' => '∾̳',
        'Acirc' => 'Â',
        'Acir' => 'Â',
        'acirc' => 'â',
        'acir' => 'â',
        'acute' => '´',
        'acut' => '´',
        'Acy' => 'А',
        'acy' => 'а',
        'AElig' => 'Æ',
        'AEli' => 'Æ',
        'aelig' => 'æ',
        'aeli' => 'æ',
        'af' => '⁡',
        'Afr' => '𝔄',
        'afr' => '𝔞',
        'Agrave' => 'À',
        'Agrav' => 'À',
        'agrave' => 'à',
        'agrav' => 'à',
        'alefsym' => 'ℵ',
        'aleph' => 'ℵ',
        'Alpha' => 'Α',
        'alpha' => 'α',
        'Amacr' => 'Ā',
        'amacr' => 'ā',
        'amalg' => '⨿',
        'AMP' => '&',
        'AM' => '&',
        'amp' => '&',
        'am' => '&',
        'And' => '⩓',
        'and' => '∧',
        'andand' => '⩕',
        'andd' => '⩜',
        'andslope' => '⩘',
        'andv' => '⩚',
        'ang' => '∠',
        'ange' => '⦤',
        'angle' => '∠',
        'angmsd' => '∡',
        'angmsdaa' => '⦨',
        'angmsdab' => '⦩',
        'angmsdac' => '⦪',
        'angmsdad' => '⦫',
        'angmsdae' => '⦬',
        'angmsdaf' => '⦭',
        'angmsdag' => '⦮',
        'angmsdah' => '⦯',
        'angrt' => '∟',
        'angrtvb' => '⊾',
        'angrtvbd' => '⦝',
        'angsph' => '∢',
        'angst' => 'Å',
        'angzarr' => '⍼',
        'Aogon' => 'Ą',
        'aogon' => 'ą',
        'Aopf' => '𝔸',
        'aopf' => '𝕒',
        'ap' => '≈',
        'apacir' => '⩯',
        'apE' => '⩰',
        'ape' => '≊',
        'apid' => '≋',
        'apos' => '\'',
        'ApplyFunction' => '⁡',
        'approx' => '≈',
        'approxeq' => '≊',
        'Aring' => 'Å',
        'Arin' => 'Å',
        'aring' => 'å',
        'arin' => 'å',
        'Ascr' => '𝒜',
        'ascr' => '𝒶',
        'Assign' => '≔',
        'ast' => '*',
        'asymp' => '≈',
        'asympeq' => '≍',
        'Atilde' => 'Ã',
        'Atild' => 'Ã',
        'atilde' => 'ã',
        'atild' => 'ã',
        'Auml' => 'Ä',
        'Aum' => 'Ä',
        'auml' => 'ä',
        'aum' => 'ä',
        'awconint' => '∳',
        'awint' => '⨑',
        'backcong' => '≌',
        'backepsilon' => '϶',
        'backprime' => '‵',
        'backsim' => '∽',
        'backsimeq' => '⋍',
        'Backslash' => '∖',
        'Barv' => '⫧',
        'barvee' => '⊽',
        'Barwed' => '⌆',
        'barwed' => '⌅',
        'barwedge' => '⌅',
        'bbrk' => '⎵',
        'bbrktbrk' => '⎶',
        'bcong' => '≌',
        'Bcy' => 'Б',
        'bcy' => 'б',
        'bdquo' => '„',
        'becaus' => '∵',
        'Because' => '∵',
        'because' => '∵',
        'bemptyv' => '⦰',
        'bepsi' => '϶',
        'bernou' => 'ℬ',
        'Bernoullis' => 'ℬ',
        'Beta' => 'Β',
        'beta' => 'β',
        'beth' => 'ℶ',
        'between' => '≬',
        'Bfr' => '𝔅',
        'bfr' => '𝔟',
        'bigcap' => '⋂',
        'bigcirc' => '◯',
        'bigcup' => '⋃',
        'bigodot' => '⨀',
        'bigoplus' => '⨁',
        'bigotimes' => '⨂',
        'bigsqcup' => '⨆',
        'bigstar' => '★',
        'bigtriangledown' => '▽',
        'bigtriangleup' => '△',
        'biguplus' => '⨄',
        'bigvee' => '⋁',
        'bigwedge' => '⋀',
        'bkarow' => '⤍',
        'blacklozenge' => '⧫',
        'blacksquare' => '▪',
        'blacktriangle' => '▴',
        'blacktriangledown' => '▾',
        'blacktriangleleft' => '◂',
        'blacktriangleright' => '▸',
        'blank' => '␣',
        'blk12' => '▒',
        'blk14' => '░',
        'blk34' => '▓',
        'block' => '█',
        'bne' => '=⃥',
        'bnequiv' => '≡⃥',
        'bNot' => '⫭',
        'bnot' => '⌐',
        'Bopf' => '𝔹',
        'bopf' => '𝕓',
        'bot' => '⊥',
        'bottom' => '⊥',
        'bowtie' => '⋈',
        'boxbox' => '⧉',
        'boxDL' => '╗',
        'boxDl' => '╖',
        'boxdL' => '╕',
        'boxdl' => '┐',
        'boxDR' => '╔',
        'boxDr' => '╓',
        'boxdR' => '╒',
        'boxdr' => '┌',
        'boxH' => '═',
        'boxh' => '─',
        'boxHD' => '╦',
        'boxHd' => '╤',
        'boxhD' => '╥',
        'boxhd' => '┬',
        'boxHU' => '╩',
        'boxHu' => '╧',
        'boxhU' => '╨',
        'boxhu' => '┴',
        'boxminus' => '⊟',
        'boxplus' => '⊞',
        'boxtimes' => '⊠',
        'boxUL' => '╝',
        'boxUl' => '╜',
        'boxuL' => '╛',
        'boxul' => '┘',
        'boxUR' => '╚',
        'boxUr' => '╙',
        'boxuR' => '╘',
        'boxur' => '└',
        'boxV' => '║',
        'boxv' => '│',
        'boxVH' => '╬',
        'boxVh' => '╫',
        'boxvH' => '╪',
        'boxvh' => '┼',
        'boxVL' => '╣',
        'boxVl' => '╢',
        'boxvL' => '╡',
        'boxvl' => '┤',
        'boxVR' => '╠',
        'boxVr' => '╟',
        'boxvR' => '╞',
        'boxvr' => '├',
        'bprime' => '‵',
        'Breve' => '˘',
        'breve' => '˘',
        'brvbar' => '¦',
        'brvba' => '¦',
        'Bscr' => 'ℬ',
        'bscr' => '𝒷',
        'bsemi' => '⁏',
        'bsim' => '∽',
        'bsime' => '⋍',
        'bsol' => '\\',
        'bsolb' => '⧅',
        'bsolhsub' => '⟈',
        'bull' => '•',
        'bullet' => '•',
        'bump' => '≎',
        'bumpE' => '⪮',
        'bumpe' => '≏',
        'Bumpeq' => '≎',
        'bumpeq' => '≏',
        'Cacute' => 'Ć',
        'cacute' => 'ć',
        'Cap' => '⋒',
        'cap' => '∩',
        'capand' => '⩄',
        'capbrcup' => '⩉',
        'capcap' => '⩋',
        'capcup' => '⩇',
        'capdot' => '⩀',
        'CapitalDifferentialD' => 'ⅅ',
        'caps' => '∩︀',
        'caret' => '⁁',
        'caron' => 'ˇ',
        'Cayleys' => 'ℭ',
        'ccaps' => '⩍',
        'Ccaron' => 'Č',
        'ccaron' => 'č',
        'Ccedil' => 'Ç',
        'Ccedi' => 'Ç',
        'ccedil' => 'ç',
        'ccedi' => 'ç',
        'Ccirc' => 'Ĉ',
        'ccirc' => 'ĉ',
        'Cconint' => '∰',
        'ccups' => '⩌',
        'ccupssm' => '⩐',
        'Cdot' => 'Ċ',
        'cdot' => 'ċ',
        'cedil' => '¸',
        'cedi' => '¸',
        'Cedilla' => '¸',
        'cemptyv' => '⦲',
        'cent' => '¢',
        'cen' => '¢',
        'CenterDot' => '·',
        'centerdot' => '·',
        'Cfr' => 'ℭ',
        'cfr' => '𝔠',
        'CHcy' => 'Ч',
        'chcy' => 'ч',
        'check' => '✓',
        'checkmark' => '✓',
        'Chi' => 'Χ',
        'chi' => 'χ',
        'cir' => '○',
        'circ' => 'ˆ',
        'circeq' => '≗',
        'circlearrowleft' => '↺',
        'circlearrowright' => '↻',
        'circledast' => '⊛',
        'circledcirc' => '⊚',
        'circleddash' => '⊝',
        'CircleDot' => '⊙',
        'circledR' => '®',
        'circledS' => 'Ⓢ',
        'CircleMinus' => '⊖',
        'CirclePlus' => '⊕',
        'CircleTimes' => '⊗',
        'cirE' => '⧃',
        'cire' => '≗',
        'cirfnint' => '⨐',
        'cirmid' => '⫯',
        'cirscir' => '⧂',
        'ClockwiseContourIntegral' => '∲',
        'CloseCurlyDoubleQuote' => '”',
        'CloseCurlyQuote' => '’',
        'clubs' => '♣',
        'clubsuit' => '♣',
        'Colon' => '∷',
        'colon' => ':',
        'Colone' => '⩴',
        'colone' => '≔',
        'coloneq' => '≔',
        'comma' => ',',
        'commat' => '@',
        'comp' => '∁',
        'compfn' => '∘',
        'complement' => '∁',
        'complexes' => 'ℂ',
        'cong' => '≅',
        'congdot' => '⩭',
        'Congruent' => '≡',
        'Conint' => '∯',
        'conint' => '∮',
        'ContourIntegral' => '∮',
        'Copf' => 'ℂ',
        'copf' => '𝕔',
        'coprod' => '∐',
        'Coproduct' => '∐',
        'COPY' => '©',
        'COP' => '©',
        'copy' => '©',
        'cop' => '©',
        'copysr' => '℗',
        'CounterClockwiseContourIntegral' => '∳',
        'crarr' => '↵',
        'Cross' => '⨯',
        'cross' => '✗',
        'Cscr' => '𝒞',
        'cscr' => '𝒸',
        'csub' => '⫏',
        'csube' => '⫑',
        'csup' => '⫐',
        'csupe' => '⫒',
        'ctdot' => '⋯',
        'cudarrl' => '⤸',
        'cudarrr' => '⤵',
        'cuepr' => '⋞',
        'cuesc' => '⋟',
        'cularr' => '↶',
        'cularrp' => '⤽',
        'Cup' => '⋓',
        'cup' => '∪',
        'cupbrcap' => '⩈',
        'CupCap' => '≍',
        'cupcap' => '⩆',
        'cupcup' => '⩊',
        'cupdot' => '⊍',
        'cupor' => '⩅',
        'cups' => '∪︀',
        'curarr' => '↷',
        'curarrm' => '⤼',
        'curlyeqprec' => '⋞',
        'curlyeqsucc' => '⋟',
        'curlyvee' => '⋎',
        'curlywedge' => '⋏',
        'curren' => '¤',
        'curre' => '¤',
        'curvearrowleft' => '↶',
        'curvearrowright' => '↷',
        'cuvee' => '⋎',
        'cuwed' => '⋏',
        'cwconint' => '∲',
        'cwint' => '∱',
        'cylcty' => '⌭',
        'Dagger' => '‡',
        'dagger' => '†',
        'daleth' => 'ℸ',
        'Darr' => '↡',
        'dArr' => '⇓',
        'darr' => '↓',
        'dash' => '‐',
        'Dashv' => '⫤',
        'dashv' => '⊣',
        'dbkarow' => '⤏',
        'dblac' => '˝',
        'Dcaron' => 'Ď',
        'dcaron' => 'ď',
        'Dcy' => 'Д',
        'dcy' => 'д',
        'DD' => 'ⅅ',
        'dd' => 'ⅆ',
        'ddagger' => '‡',
        'ddarr' => '⇊',
        'DDotrahd' => '⤑',
        'ddotseq' => '⩷',
        'deg' => '°',
        'de' => '°',
        'Del' => '∇',
        'Delta' => 'Δ',
        'delta' => 'δ',
        'demptyv' => '⦱',
        'dfisht' => '⥿',
        'Dfr' => '𝔇',
        'dfr' => '𝔡',
        'dHar' => '⥥',
        'dharl' => '⇃',
        'dharr' => '⇂',
        'DiacriticalAcute' => '´',
        'DiacriticalDot' => '˙',
        'DiacriticalDoubleAcute' => '˝',
        'DiacriticalGrave' => '`',
        'DiacriticalTilde' => '˜',
        'diam' => '⋄',
        'Diamond' => '⋄',
        'diamond' => '⋄',
        'diamondsuit' => '♦',
        'diams' => '♦',
        'die' => '¨',
        'DifferentialD' => 'ⅆ',
        'digamma' => 'ϝ',
        'disin' => '⋲',
        'div' => '÷',
        'divide' => '÷',
        'divid' => '÷',
        'divideontimes' => '⋇',
        'divonx' => '⋇',
        'DJcy' => 'Ђ',
        'djcy' => 'ђ',
        'dlcorn' => '⌞',
        'dlcrop' => '⌍',
        'dollar' => '$',
        'Dopf' => '𝔻',
        'dopf' => '𝕕',
        'Dot' => '¨',
        'dot' => '˙',
        'DotDot' => '⃜',
        'doteq' => '≐',
        'doteqdot' => '≑',
        'DotEqual' => '≐',
        'dotminus' => '∸',
        'dotplus' => '∔',
        'dotsquare' => '⊡',
        'doublebarwedge' => '⌆',
        'DoubleContourIntegral' => '∯',
        'DoubleDot' => '¨',
        'DoubleDownArrow' => '⇓',
        'DoubleLeftArrow' => '⇐',
        'DoubleLeftRightArrow' => '⇔',
        'DoubleLeftTee' => '⫤',
        'DoubleLongLeftArrow' => '⟸',
        'DoubleLongLeftRightArrow' => '⟺',
        'DoubleLongRightArrow' => '⟹',
        'DoubleRightArrow' => '⇒',
        'DoubleRightTee' => '⊨',
        'DoubleUpArrow' => '⇑',
        'DoubleUpDownArrow' => '⇕',
        'DoubleVerticalBar' => '∥',
        'DownArrow' => '↓',
        'Downarrow' => '⇓',
        'downarrow' => '↓',
        'DownArrowBar' => '⤓',
        'DownArrowUpArrow' => '⇵',
        'DownBreve' => '̑',
        'downdownarrows' => '⇊',
        'downharpoonleft' => '⇃',
        'downharpoonright' => '⇂',
        'DownLeftRightVector' => '⥐',
        'DownLeftTeeVector' => '⥞',
        'DownLeftVector' => '↽',
        'DownLeftVectorBar' => '⥖',
        'DownRightTeeVector' => '⥟',
        'DownRightVector' => '⇁',
        'DownRightVectorBar' => '⥗',
        'DownTee' => '⊤',
        'DownTeeArrow' => '↧',
        'drbkarow' => '⤐',
        'drcorn' => '⌟',
        'drcrop' => '⌌',
        'Dscr' => '𝒟',
        'dscr' => '𝒹',
        'DScy' => 'Ѕ',
        'dscy' => 'ѕ',
        'dsol' => '⧶',
        'Dstrok' => 'Đ',
        'dstrok' => 'đ',
        'dtdot' => '⋱',
        'dtri' => '▿',
        'dtrif' => '▾',
        'duarr' => '⇵',
        'duhar' => '⥯',
        'dwangle' => '⦦',
        'DZcy' => 'Џ',
        'dzcy' => 'џ',
        'dzigrarr' => '⟿',
        'Eacute' => 'É',
        'Eacut' => 'É',
        'eacute' => 'é',
        'eacut' => 'é',
        'easter' => '⩮',
        'Ecaron' => 'Ě',
        'ecaron' => 'ě',
        'ecir' => 'ê',
        'Ecirc' => 'Ê',
        'Ecir' => 'Ê',
        'ecirc' => 'ê',
        'ecolon' => '≕',
        'Ecy' => 'Э',
        'ecy' => 'э',
        'eDDot' => '⩷',
        'Edot' => 'Ė',
        'eDot' => '≑',
        'edot' => 'ė',
        'ee' => 'ⅇ',
        'efDot' => '≒',
        'Efr' => '𝔈',
        'efr' => '𝔢',
        'eg' => '⪚',
        'Egrave' => 'È',
        'Egrav' => 'È',
        'egrave' => 'è',
        'egrav' => 'è',
        'egs' => '⪖',
        'egsdot' => '⪘',
        'el' => '⪙',
        'Element' => '∈',
        'elinters' => '⏧',
        'ell' => 'ℓ',
        'els' => '⪕',
        'elsdot' => '⪗',
        'Emacr' => 'Ē',
        'emacr' => 'ē',
        'empty' => '∅',
        'emptyset' => '∅',
        'EmptySmallSquare' => '◻',
        'emptyv' => '∅',
        'EmptyVerySmallSquare' => '▫',
        'emsp' => ' ',
        'emsp13' => ' ',
        'emsp14' => ' ',
        'ENG' => 'Ŋ',
        'eng' => 'ŋ',
        'ensp' => ' ',
        'Eogon' => 'Ę',
        'eogon' => 'ę',
        'Eopf' => '𝔼',
        'eopf' => '𝕖',
        'epar' => '⋕',
        'eparsl' => '⧣',
        'eplus' => '⩱',
        'epsi' => 'ε',
        'Epsilon' => 'Ε',
        'epsilon' => 'ε',
        'epsiv' => 'ϵ',
        'eqcirc' => '≖',
        'eqcolon' => '≕',
        'eqsim' => '≂',
        'eqslantgtr' => '⪖',
        'eqslantless' => '⪕',
        'Equal' => '⩵',
        'equals' => '=',
        'EqualTilde' => '≂',
        'equest' => '≟',
        'Equilibrium' => '⇌',
        'equiv' => '≡',
        'equivDD' => '⩸',
        'eqvparsl' => '⧥',
        'erarr' => '⥱',
        'erDot' => '≓',
        'Escr' => 'ℰ',
        'escr' => 'ℯ',
        'esdot' => '≐',
        'Esim' => '⩳',
        'esim' => '≂',
        'Eta' => 'Η',
        'eta' => 'η',
        'ETH' => 'Ð',
        'ET' => 'Ð',
        'eth' => 'ð',
        'et' => 'ð',
        'Euml' => 'Ë',
        'Eum' => 'Ë',
        'euml' => 'ë',
        'eum' => 'ë',
        'euro' => '€',
        'excl' => '!',
        'exist' => '∃',
        'Exists' => '∃',
        'expectation' => 'ℰ',
        'ExponentialE' => 'ⅇ',
        'exponentiale' => 'ⅇ',
        'fallingdotseq' => '≒',
        'Fcy' => 'Ф',
        'fcy' => 'ф',
        'female' => '♀',
        'ffilig' => 'ﬃ',
        'fflig' => 'ﬀ',
        'ffllig' => 'ﬄ',
        'Ffr' => '𝔉',
        'ffr' => '𝔣',
        'filig' => 'ﬁ',
        'FilledSmallSquare' => '◼',
        'FilledVerySmallSquare' => '▪',
        'fjlig' => 'fj',
        'flat' => '♭',
        'fllig' => 'ﬂ',
        'fltns' => '▱',
        'fnof' => 'ƒ',
        'Fopf' => '𝔽',
        'fopf' => '𝕗',
        'ForAll' => '∀',
        'forall' => '∀',
        'fork' => '⋔',
        'forkv' => '⫙',
        'Fouriertrf' => 'ℱ',
        'fpartint' => '⨍',
        'frac12' => '½',
        'frac1' => '¼',
        'frac13' => '⅓',
        'frac14' => '¼',
        'frac15' => '⅕',
        'frac16' => '⅙',
        'frac18' => '⅛',
        'frac23' => '⅔',
        'frac25' => '⅖',
        'frac34' => '¾',
        'frac3' => '¾',
        'frac35' => '⅗',
        'frac38' => '⅜',
        'frac45' => '⅘',
        'frac56' => '⅚',
        'frac58' => '⅝',
        'frac78' => '⅞',
        'frasl' => '⁄',
        'frown' => '⌢',
        'Fscr' => 'ℱ',
        'fscr' => '𝒻',
        'gacute' => 'ǵ',
        'Gamma' => 'Γ',
        'gamma' => 'γ',
        'Gammad' => 'Ϝ',
        'gammad' => 'ϝ',
        'gap' => '⪆',
        'Gbreve' => 'Ğ',
        'gbreve' => 'ğ',
        'Gcedil' => 'Ģ',
        'Gcirc' => 'Ĝ',
        'gcirc' => 'ĝ',
        'Gcy' => 'Г',
        'gcy' => 'г',
        'Gdot' => 'Ġ',
        'gdot' => 'ġ',
        'gE' => '≧',
        'ge' => '≥',
        'gEl' => '⪌',
        'gel' => '⋛',
        'geq' => '≥',
        'geqq' => '≧',
        'geqslant' => '⩾',
        'ges' => '⩾',
        'gescc' => '⪩',
        'gesdot' => '⪀',
        'gesdoto' => '⪂',
        'gesdotol' => '⪄',
        'gesl' => '⋛︀',
        'gesles' => '⪔',
        'Gfr' => '𝔊',
        'gfr' => '𝔤',
        'Gg' => '⋙',
        'gg' => '≫',
        'ggg' => '⋙',
        'gimel' => 'ℷ',
        'GJcy' => 'Ѓ',
        'gjcy' => 'ѓ',
        'gl' => '≷',
        'gla' => '⪥',
        'glE' => '⪒',
        'glj' => '⪤',
        'gnap' => '⪊',
        'gnapprox' => '⪊',
        'gnE' => '≩',
        'gne' => '⪈',
        'gneq' => '⪈',
        'gneqq' => '≩',
        'gnsim' => '⋧',
        'Gopf' => '𝔾',
        'gopf' => '𝕘',
        'grave' => '`',
        'GreaterEqual' => '≥',
        'GreaterEqualLess' => '⋛',
        'GreaterFullEqual' => '≧',
        'GreaterGreater' => '⪢',
        'GreaterLess' => '≷',
        'GreaterSlantEqual' => '⩾',
        'GreaterTilde' => '≳',
        'Gscr' => '𝒢',
        'gscr' => 'ℊ',
        'gsim' => '≳',
        'gsime' => '⪎',
        'gsiml' => '⪐',
        'GT' => '>',
        'G' => '>',
        'Gt' => '≫',
        'gt' => '>',
        'g' => '>',
        'gtcc' => '⪧',
        'gtcir' => '⩺',
        'gtdot' => '⋗',
        'gtlPar' => '⦕',
        'gtquest' => '⩼',
        'gtrapprox' => '⪆',
        'gtrarr' => '⥸',
        'gtrdot' => '⋗',
        'gtreqless' => '⋛',
        'gtreqqless' => '⪌',
        'gtrless' => '≷',
        'gtrsim' => '≳',
        'gvertneqq' => '≩︀',
        'gvnE' => '≩︀',
        'Hacek' => 'ˇ',
        'hairsp' => ' ',
        'half' => '½',
        'hamilt' => 'ℋ',
        'HARDcy' => 'Ъ',
        'hardcy' => 'ъ',
        'hArr' => '⇔',
        'harr' => '↔',
        'harrcir' => '⥈',
        'harrw' => '↭',
        'Hat' => '^',
        'hbar' => 'ℏ',
        'Hcirc' => 'Ĥ',
        'hcirc' => 'ĥ',
        'hearts' => '♥',
        'heartsuit' => '♥',
        'hellip' => '…',
        'hercon' => '⊹',
        'Hfr' => 'ℌ',
        'hfr' => '𝔥',
        'HilbertSpace' => 'ℋ',
        'hksearow' => '⤥',
        'hkswarow' => '⤦',
        'hoarr' => '⇿',
        'homtht' => '∻',
        'hookleftarrow' => '↩',
        'hookrightarrow' => '↪',
        'Hopf' => 'ℍ',
        'hopf' => '𝕙',
        'horbar' => '―',
        'HorizontalLine' => '─',
        'Hscr' => 'ℋ',
        'hscr' => '𝒽',
        'hslash' => 'ℏ',
        'Hstrok' => 'Ħ',
        'hstrok' => 'ħ',
        'HumpDownHump' => '≎',
        'HumpEqual' => '≏',
        'hybull' => '⁃',
        'hyphen' => '‐',
        'Iacute' => 'Í',
        'Iacut' => 'Í',
        'iacute' => 'í',
        'iacut' => 'í',
        'ic' => '⁣',
        'Icirc' => 'Î',
        'Icir' => 'Î',
        'icirc' => 'î',
        'icir' => 'î',
        'Icy' => 'И',
        'icy' => 'и',
        'Idot' => 'İ',
        'IEcy' => 'Е',
        'iecy' => 'е',
        'iexcl' => '¡',
        'iexc' => '¡',
        'iff' => '⇔',
        'Ifr' => 'ℑ',
        'ifr' => '𝔦',
        'Igrave' => 'Ì',
        'Igrav' => 'Ì',
        'igrave' => 'ì',
        'igrav' => 'ì',
        'ii' => 'ⅈ',
        'iiiint' => '⨌',
        'iiint' => '∭',
        'iinfin' => '⧜',
        'iiota' => '℩',
        'IJlig' => 'Ĳ',
        'ijlig' => 'ĳ',
        'Im' => 'ℑ',
        'Imacr' => 'Ī',
        'imacr' => 'ī',
        'image' => 'ℑ',
        'ImaginaryI' => 'ⅈ',
        'imagline' => 'ℐ',
        'imagpart' => 'ℑ',
        'imath' => 'ı',
        'imof' => '⊷',
        'imped' => 'Ƶ',
        'Implies' => '⇒',
        'in' => '∈',
        'incare' => '℅',
        'infin' => '∞',
        'infintie' => '⧝',
        'inodot' => 'ı',
        'Int' => '∬',
        'int' => '∫',
        'intcal' => '⊺',
        'integers' => 'ℤ',
        'Integral' => '∫',
        'intercal' => '⊺',
        'Intersection' => '⋂',
        'intlarhk' => '⨗',
        'intprod' => '⨼',
        'InvisibleComma' => '⁣',
        'InvisibleTimes' => '⁢',
        'IOcy' => 'Ё',
        'iocy' => 'ё',
        'Iogon' => 'Į',
        'iogon' => 'į',
        'Iopf' => '𝕀',
        'iopf' => '𝕚',
        'Iota' => 'Ι',
        'iota' => 'ι',
        'iprod' => '⨼',
        'iquest' => '¿',
        'iques' => '¿',
        'Iscr' => 'ℐ',
        'iscr' => '𝒾',
        'isin' => '∈',
        'isindot' => '⋵',
        'isinE' => '⋹',
        'isins' => '⋴',
        'isinsv' => '⋳',
        'isinv' => '∈',
        'it' => '⁢',
        'Itilde' => 'Ĩ',
        'itilde' => 'ĩ',
        'Iukcy' => 'І',
        'iukcy' => 'і',
        'Iuml' => 'Ï',
        'Ium' => 'Ï',
        'iuml' => 'ï',
        'ium' => 'ï',
        'Jcirc' => 'Ĵ',
        'jcirc' => 'ĵ',
        'Jcy' => 'Й',
        'jcy' => 'й',
        'Jfr' => '𝔍',
        'jfr' => '𝔧',
        'jmath' => 'ȷ',
        'Jopf' => '𝕁',
        'jopf' => '𝕛',
        'Jscr' => '𝒥',
        'jscr' => '𝒿',
        'Jsercy' => 'Ј',
        'jsercy' => 'ј',
        'Jukcy' => 'Є',
        'jukcy' => 'є',
        'Kappa' => 'Κ',
        'kappa' => 'κ',
        'kappav' => 'ϰ',
        'Kcedil' => 'Ķ',
        'kcedil' => 'ķ',
        'Kcy' => 'К',
        'kcy' => 'к',
        'Kfr' => '𝔎',
        'kfr' => '𝔨',
        'kgreen' => 'ĸ',
        'KHcy' => 'Х',
        'khcy' => 'х',
        'KJcy' => 'Ќ',
        'kjcy' => 'ќ',
        'Kopf' => '𝕂',
        'kopf' => '𝕜',
        'Kscr' => '𝒦',
        'kscr' => '𝓀',
        'lAarr' => '⇚',
        'Lacute' => 'Ĺ',
        'lacute' => 'ĺ',
        'laemptyv' => '⦴',
        'lagran' => 'ℒ',
        'Lambda' => 'Λ',
        'lambda' => 'λ',
        'Lang' => '⟪',
        'lang' => '⟨',
        'langd' => '⦑',
        'langle' => '⟨',
        'lap' => '⪅',
        'Laplacetrf' => 'ℒ',
        'laquo' => '«',
        'laqu' => '«',
        'Larr' => '↞',
        'lArr' => '⇐',
        'larr' => '←',
        'larrb' => '⇤',
        'larrbfs' => '⤟',
        'larrfs' => '⤝',
        'larrhk' => '↩',
        'larrlp' => '↫',
        'larrpl' => '⤹',
        'larrsim' => '⥳',
        'larrtl' => '↢',
        'lat' => '⪫',
        'lAtail' => '⤛',
        'latail' => '⤙',
        'late' => '⪭',
        'lates' => '⪭︀',
        'lBarr' => '⤎',
        'lbarr' => '⤌',
        'lbbrk' => '❲',
        'lbrace' => '{',
        'lbrack' => '[',
        'lbrke' => '⦋',
        'lbrksld' => '⦏',
        'lbrkslu' => '⦍',
        'Lcaron' => 'Ľ',
        'lcaron' => 'ľ',
        'Lcedil' => 'Ļ',
        'lcedil' => 'ļ',
        'lceil' => '⌈',
        'lcub' => '{',
        'Lcy' => 'Л',
        'lcy' => 'л',
        'ldca' => '⤶',
        'ldquo' => '“',
        'ldquor' => '„',
        'ldrdhar' => '⥧',
        'ldrushar' => '⥋',
        'ldsh' => '↲',
        'lE' => '≦',
        'le' => '≤',
        'LeftAngleBracket' => '⟨',
        'LeftArrow' => '←',
        'Leftarrow' => '⇐',
        'leftarrow' => '←',
        'LeftArrowBar' => '⇤',
        'LeftArrowRightArrow' => '⇆',
        'leftarrowtail' => '↢',
        'LeftCeiling' => '⌈',
        'LeftDoubleBracket' => '⟦',
        'LeftDownTeeVector' => '⥡',
        'LeftDownVector' => '⇃',
        'LeftDownVectorBar' => '⥙',
        'LeftFloor' => '⌊',
        'leftharpoondown' => '↽',
        'leftharpoonup' => '↼',
        'leftleftarrows' => '⇇',
        'LeftRightArrow' => '↔',
        'Leftrightarrow' => '⇔',
        'leftrightarrow' => '↔',
        'leftrightarrows' => '⇆',
        'leftrightharpoons' => '⇋',
        'leftrightsquigarrow' => '↭',
        'LeftRightVector' => '⥎',
        'LeftTee' => '⊣',
        'LeftTeeArrow' => '↤',
        'LeftTeeVector' => '⥚',
        'leftthreetimes' => '⋋',
        'LeftTriangle' => '⊲',
        'LeftTriangleBar' => '⧏',
        'LeftTriangleEqual' => '⊴',
        'LeftUpDownVector' => '⥑',
        'LeftUpTeeVector' => '⥠',
        'LeftUpVector' => '↿',
        'LeftUpVectorBar' => '⥘',
        'LeftVector' => '↼',
        'LeftVectorBar' => '⥒',
        'lEg' => '⪋',
        'leg' => '⋚',
        'leq' => '≤',
        'leqq' => '≦',
        'leqslant' => '⩽',
        'les' => '⩽',
        'lescc' => '⪨',
        'lesdot' => '⩿',
        'lesdoto' => '⪁',
        'lesdotor' => '⪃',
        'lesg' => '⋚︀',
        'lesges' => '⪓',
        'lessapprox' => '⪅',
        'lessdot' => '⋖',
        'lesseqgtr' => '⋚',
        'lesseqqgtr' => '⪋',
        'LessEqualGreater' => '⋚',
        'LessFullEqual' => '≦',
        'LessGreater' => '≶',
        'lessgtr' => '≶',
        'LessLess' => '⪡',
        'lesssim' => '≲',
        'LessSlantEqual' => '⩽',
        'LessTilde' => '≲',
        'lfisht' => '⥼',
        'lfloor' => '⌊',
        'Lfr' => '𝔏',
        'lfr' => '𝔩',
        'lg' => '≶',
        'lgE' => '⪑',
        'lHar' => '⥢',
        'lhard' => '↽',
        'lharu' => '↼',
        'lharul' => '⥪',
        'lhblk' => '▄',
        'LJcy' => 'Љ',
        'ljcy' => 'љ',
        'Ll' => '⋘',
        'll' => '≪',
        'llarr' => '⇇',
        'llcorner' => '⌞',
        'Lleftarrow' => '⇚',
        'llhard' => '⥫',
        'lltri' => '◺',
        'Lmidot' => 'Ŀ',
        'lmidot' => 'ŀ',
        'lmoust' => '⎰',
        'lmoustache' => '⎰',
        'lnap' => '⪉',
        'lnapprox' => '⪉',
        'lnE' => '≨',
        'lne' => '⪇',
        'lneq' => '⪇',
        'lneqq' => '≨',
        'lnsim' => '⋦',
        'loang' => '⟬',
        'loarr' => '⇽',
        'lobrk' => '⟦',
        'LongLeftArrow' => '⟵',
        'Longleftarrow' => '⟸',
        'longleftarrow' => '⟵',
        'LongLeftRightArrow' => '⟷',
        'Longleftrightarrow' => '⟺',
        'longleftrightarrow' => '⟷',
        'longmapsto' => '⟼',
        'LongRightArrow' => '⟶',
        'Longrightarrow' => '⟹',
        'longrightarrow' => '⟶',
        'looparrowleft' => '↫',
        'looparrowright' => '↬',
        'lopar' => '⦅',
        'Lopf' => '𝕃',
        'lopf' => '𝕝',
        'loplus' => '⨭',
        'lotimes' => '⨴',
        'lowast' => '∗',
        'lowbar' => '_',
        'LowerLeftArrow' => '↙',
        'LowerRightArrow' => '↘',
        'loz' => '◊',
        'lozenge' => '◊',
        'lozf' => '⧫',
        'lpar' => '(',
        'lparlt' => '⦓',
        'lrarr' => '⇆',
        'lrcorner' => '⌟',
        'lrhar' => '⇋',
        'lrhard' => '⥭',
        'lrm' => '‎',
        'lrtri' => '⊿',
        'lsaquo' => '‹',
        'Lscr' => 'ℒ',
        'lscr' => '𝓁',
        'Lsh' => '↰',
        'lsh' => '↰',
        'lsim' => '≲',
        'lsime' => '⪍',
        'lsimg' => '⪏',
        'lsqb' => '[',
        'lsquo' => '‘',
        'lsquor' => '‚',
        'Lstrok' => 'Ł',
        'lstrok' => 'ł',
        'LT' => '<',
        'L' => '<',
        'Lt' => '≪',
        'lt' => '<',
        'l' => '<',
        'ltcc' => '⪦',
        'ltcir' => '⩹',
        'ltdot' => '⋖',
        'lthree' => '⋋',
        'ltimes' => '⋉',
        'ltlarr' => '⥶',
        'ltquest' => '⩻',
        'ltri' => '◃',
        'ltrie' => '⊴',
        'ltrif' => '◂',
        'ltrPar' => '⦖',
        'lurdshar' => '⥊',
        'luruhar' => '⥦',
        'lvertneqq' => '≨︀',
        'lvnE' => '≨︀',
        'macr' => '¯',
        'mac' => '¯',
        'male' => '♂',
        'malt' => '✠',
        'maltese' => '✠',
        'Map' => '⤅',
        'map' => '↦',
        'mapsto' => '↦',
        'mapstodown' => '↧',
        'mapstoleft' => '↤',
        'mapstoup' => '↥',
        'marker' => '▮',
        'mcomma' => '⨩',
        'Mcy' => 'М',
        'mcy' => 'м',
        'mdash' => '—',
        'mDDot' => '∺',
        'measuredangle' => '∡',
        'MediumSpace' => ' ',
        'Mellintrf' => 'ℳ',
        'Mfr' => '𝔐',
        'mfr' => '𝔪',
        'mho' => '℧',
        'micro' => 'µ',
        'micr' => 'µ',
        'mid' => '∣',
        'midast' => '*',
        'midcir' => '⫰',
        'middot' => '·',
        'middo' => '·',
        'minus' => '−',
        'minusb' => '⊟',
        'minusd' => '∸',
        'minusdu' => '⨪',
        'MinusPlus' => '∓',
        'mlcp' => '⫛',
        'mldr' => '…',
        'mnplus' => '∓',
        'models' => '⊧',
        'Mopf' => '𝕄',
        'mopf' => '𝕞',
        'mp' => '∓',
        'Mscr' => 'ℳ',
        'mscr' => '𝓂',
        'mstpos' => '∾',
        'Mu' => 'Μ',
        'mu' => 'μ',
        'multimap' => '⊸',
        'mumap' => '⊸',
        'nabla' => '∇',
        'Nacute' => 'Ń',
        'nacute' => 'ń',
        'nang' => '∠⃒',
        'nap' => '≉',
        'napE' => '⩰̸',
        'napid' => '≋̸',
        'napos' => 'ŉ',
        'napprox' => '≉',
        'natur' => '♮',
        'natural' => '♮',
        'naturals' => 'ℕ',
        'nbsp' => ' ',
        'nbs' => ' ',
        'nbump' => '≎̸',
        'nbumpe' => '≏̸',
        'ncap' => '⩃',
        'Ncaron' => 'Ň',
        'ncaron' => 'ň',
        'Ncedil' => 'Ņ',
        'ncedil' => 'ņ',
        'ncong' => '≇',
        'ncongdot' => '⩭̸',
        'ncup' => '⩂',
        'Ncy' => 'Н',
        'ncy' => 'н',
        'ndash' => '–',
        'ne' => '≠',
        'nearhk' => '⤤',
        'neArr' => '⇗',
        'nearr' => '↗',
        'nearrow' => '↗',
        'nedot' => '≐̸',
        'NegativeMediumSpace' => '​',
        'NegativeThickSpace' => '​',
        'NegativeThinSpace' => '​',
        'NegativeVeryThinSpace' => '​',
        'nequiv' => '≢',
        'nesear' => '⤨',
        'nesim' => '≂̸',
        'NestedGreaterGreater' => '≫',
        'NestedLessLess' => '≪',
        'NewLine' => '
',
        'nexist' => '∄',
        'nexists' => '∄',
        'Nfr' => '𝔑',
        'nfr' => '𝔫',
        'ngE' => '≧̸',
        'nge' => '≱',
        'ngeq' => '≱',
        'ngeqq' => '≧̸',
        'ngeqslant' => '⩾̸',
        'nges' => '⩾̸',
        'nGg' => '⋙̸',
        'ngsim' => '≵',
        'nGt' => '≫⃒',
        'ngt' => '≯',
        'ngtr' => '≯',
        'nGtv' => '≫̸',
        'nhArr' => '⇎',
        'nharr' => '↮',
        'nhpar' => '⫲',
        'ni' => '∋',
        'nis' => '⋼',
        'nisd' => '⋺',
        'niv' => '∋',
        'NJcy' => 'Њ',
        'njcy' => 'њ',
        'nlArr' => '⇍',
        'nlarr' => '↚',
        'nldr' => '‥',
        'nlE' => '≦̸',
        'nle' => '≰',
        'nLeftarrow' => '⇍',
        'nleftarrow' => '↚',
        'nLeftrightarrow' => '⇎',
        'nleftrightarrow' => '↮',
        'nleq' => '≰',
        'nleqq' => '≦̸',
        'nleqslant' => '⩽̸',
        'nles' => '⩽̸',
        'nless' => '≮',
        'nLl' => '⋘̸',
        'nlsim' => '≴',
        'nLt' => '≪⃒',
        'nlt' => '≮',
        'nltri' => '⋪',
        'nltrie' => '⋬',
        'nLtv' => '≪̸',
        'nmid' => '∤',
        'NoBreak' => '⁠',
        'NonBreakingSpace' => ' ',
        'Nopf' => 'ℕ',
        'nopf' => '𝕟',
        'Not' => '⫬',
        'not' => '¬',
        'no' => '¬',
        'NotCongruent' => '≢',
        'NotCupCap' => '≭',
        'NotDoubleVerticalBar' => '∦',
        'NotElement' => '∉',
        'NotEqual' => '≠',
        'NotEqualTilde' => '≂̸',
        'NotExists' => '∄',
        'NotGreater' => '≯',
        'NotGreaterEqual' => '≱',
        'NotGreaterFullEqual' => '≧̸',
        'NotGreaterGreater' => '≫̸',
        'NotGreaterLess' => '≹',
        'NotGreaterSlantEqual' => '⩾̸',
        'NotGreaterTilde' => '≵',
        'NotHumpDownHump' => '≎̸',
        'NotHumpEqual' => '≏̸',
        'notin' => '∉',
        'notindot' => '⋵̸',
        'notinE' => '⋹̸',
        'notinva' => '∉',
        'notinvb' => '⋷',
        'notinvc' => '⋶',
        'NotLeftTriangle' => '⋪',
        'NotLeftTriangleBar' => '⧏̸',
        'NotLeftTriangleEqual' => '⋬',
        'NotLess' => '≮',
        'NotLessEqual' => '≰',
        'NotLessGreater' => '≸',
        'NotLessLess' => '≪̸',
        'NotLessSlantEqual' => '⩽̸',
        'NotLessTilde' => '≴',
        'NotNestedGreaterGreater' => '⪢̸',
        'NotNestedLessLess' => '⪡̸',
        'notni' => '∌',
        'notniva' => '∌',
        'notnivb' => '⋾',
        'notnivc' => '⋽',
        'NotPrecedes' => '⊀',
        'NotPrecedesEqual' => '⪯̸',
        'NotPrecedesSlantEqual' => '⋠',
        'NotReverseElement' => '∌',
        'NotRightTriangle' => '⋫',
        'NotRightTriangleBar' => '⧐̸',
        'NotRightTriangleEqual' => '⋭',
        'NotSquareSubset' => '⊏̸',
        'NotSquareSubsetEqual' => '⋢',
        'NotSquareSuperset' => '⊐̸',
        'NotSquareSupersetEqual' => '⋣',
        'NotSubset' => '⊂⃒',
        'NotSubsetEqual' => '⊈',
        'NotSucceeds' => '⊁',
        'NotSucceedsEqual' => '⪰̸',
        'NotSucceedsSlantEqual' => '⋡',
        'NotSucceedsTilde' => '≿̸',
        'NotSuperset' => '⊃⃒',
        'NotSupersetEqual' => '⊉',
        'NotTilde' => '≁',
        'NotTildeEqual' => '≄',
        'NotTildeFullEqual' => '≇',
        'NotTildeTilde' => '≉',
        'NotVerticalBar' => '∤',
        'npar' => '∦',
        'nparallel' => '∦',
        'nparsl' => '⫽⃥',
        'npart' => '∂̸',
        'npolint' => '⨔',
        'npr' => '⊀',
        'nprcue' => '⋠',
        'npre' => '⪯̸',
        'nprec' => '⊀',
        'npreceq' => '⪯̸',
        'nrArr' => '⇏',
        'nrarr' => '↛',
        'nrarrc' => '⤳̸',
        'nrarrw' => '↝̸',
        'nRightarrow' => '⇏',
        'nrightarrow' => '↛',
        'nrtri' => '⋫',
        'nrtrie' => '⋭',
        'nsc' => '⊁',
        'nsccue' => '⋡',
        'nsce' => '⪰̸',
        'Nscr' => '𝒩',
        'nscr' => '𝓃',
        'nshortmid' => '∤',
        'nshortparallel' => '∦',
        'nsim' => '≁',
        'nsime' => '≄',
        'nsimeq' => '≄',
        'nsmid' => '∤',
        'nspar' => '∦',
        'nsqsube' => '⋢',
        'nsqsupe' => '⋣',
        'nsub' => '⊄',
        'nsubE' => '⫅̸',
        'nsube' => '⊈',
        'nsubset' => '⊂⃒',
        'nsubseteq' => '⊈',
        'nsubseteqq' => '⫅̸',
        'nsucc' => '⊁',
        'nsucceq' => '⪰̸',
        'nsup' => '⊅',
        'nsupE' => '⫆̸',
        'nsupe' => '⊉',
        'nsupset' => '⊃⃒',
        'nsupseteq' => '⊉',
        'nsupseteqq' => '⫆̸',
        'ntgl' => '≹',
        'Ntilde' => 'Ñ',
        'Ntild' => 'Ñ',
        'ntilde' => 'ñ',
        'ntild' => 'ñ',
        'ntlg' => '≸',
        'ntriangleleft' => '⋪',
        'ntrianglelefteq' => '⋬',
        'ntriangleright' => '⋫',
        'ntrianglerighteq' => '⋭',
        'Nu' => 'Ν',
        'nu' => 'ν',
        'num' => '#',
        'numero' => '№',
        'numsp' => ' ',
        'nvap' => '≍⃒',
        'nVDash' => '⊯',
        'nVdash' => '⊮',
        'nvDash' => '⊭',
        'nvdash' => '⊬',
        'nvge' => '≥⃒',
        'nvgt' => '>⃒',
        'nvHarr' => '⤄',
        'nvinfin' => '⧞',
        'nvlArr' => '⤂',
        'nvle' => '≤⃒',
        'nvlt' => '<⃒',
        'nvltrie' => '⊴⃒',
        'nvrArr' => '⤃',
        'nvrtrie' => '⊵⃒',
        'nvsim' => '∼⃒',
        'nwarhk' => '⤣',
        'nwArr' => '⇖',
        'nwarr' => '↖',
        'nwarrow' => '↖',
        'nwnear' => '⤧',
        'Oacute' => 'Ó',
        'Oacut' => 'Ó',
        'oacute' => 'ó',
        'oacut' => 'ó',
        'oast' => '⊛',
        'ocir' => 'ô',
        'Ocirc' => 'Ô',
        'Ocir' => 'Ô',
        'ocirc' => 'ô',
        'Ocy' => 'О',
        'ocy' => 'о',
        'odash' => '⊝',
        'Odblac' => 'Ő',
        'odblac' => 'ő',
        'odiv' => '⨸',
        'odot' => '⊙',
        'odsold' => '⦼',
        'OElig' => 'Œ',
        'oelig' => 'œ',
        'ofcir' => '⦿',
        'Ofr' => '𝔒',
        'ofr' => '𝔬',
        'ogon' => '˛',
        'Ograve' => 'Ò',
        'Ograv' => 'Ò',
        'ograve' => 'ò',
        'ograv' => 'ò',
        'ogt' => '⧁',
        'ohbar' => '⦵',
        'ohm' => 'Ω',
        'oint' => '∮',
        'olarr' => '↺',
        'olcir' => '⦾',
        'olcross' => '⦻',
        'oline' => '‾',
        'olt' => '⧀',
        'Omacr' => 'Ō',
        'omacr' => 'ō',
        'Omega' => 'Ω',
        'omega' => 'ω',
        'Omicron' => 'Ο',
        'omicron' => 'ο',
        'omid' => '⦶',
        'ominus' => '⊖',
        'Oopf' => '𝕆',
        'oopf' => '𝕠',
        'opar' => '⦷',
        'OpenCurlyDoubleQuote' => '“',
        'OpenCurlyQuote' => '‘',
        'operp' => '⦹',
        'oplus' => '⊕',
        'Or' => '⩔',
        'or' => '∨',
        'orarr' => '↻',
        'ord' => 'º',
        'order' => 'ℴ',
        'orderof' => 'ℴ',
        'ordf' => 'ª',
        'ordm' => 'º',
        'origof' => '⊶',
        'oror' => '⩖',
        'orslope' => '⩗',
        'orv' => '⩛',
        'oS' => 'Ⓢ',
        'Oscr' => '𝒪',
        'oscr' => 'ℴ',
        'Oslash' => 'Ø',
        'Oslas' => 'Ø',
        'oslash' => 'ø',
        'oslas' => 'ø',
        'osol' => '⊘',
        'Otilde' => 'Õ',
        'Otild' => 'Õ',
        'otilde' => 'õ',
        'otild' => 'õ',
        'Otimes' => '⨷',
        'otimes' => '⊗',
        'otimesas' => '⨶',
        'Ouml' => 'Ö',
        'Oum' => 'Ö',
        'ouml' => 'ö',
        'oum' => 'ö',
        'ovbar' => '⌽',
        'OverBar' => '‾',
        'OverBrace' => '⏞',
        'OverBracket' => '⎴',
        'OverParenthesis' => '⏜',
        'par' => '¶',
        'para' => '¶',
        'parallel' => '∥',
        'parsim' => '⫳',
        'parsl' => '⫽',
        'part' => '∂',
        'PartialD' => '∂',
        'Pcy' => 'П',
        'pcy' => 'п',
        'percnt' => '%',
        'period' => '.',
        'permil' => '‰',
        'perp' => '⊥',
        'pertenk' => '‱',
        'Pfr' => '𝔓',
        'pfr' => '𝔭',
        'Phi' => 'Φ',
        'phi' => 'φ',
        'phiv' => 'ϕ',
        'phmmat' => 'ℳ',
        'phone' => '☎',
        'Pi' => 'Π',
        'pi' => 'π',
        'pitchfork' => '⋔',
        'piv' => 'ϖ',
        'planck' => 'ℏ',
        'planckh' => 'ℎ',
        'plankv' => 'ℏ',
        'plus' => '+',
        'plusacir' => '⨣',
        'plusb' => '⊞',
        'pluscir' => '⨢',
        'plusdo' => '∔',
        'plusdu' => '⨥',
        'pluse' => '⩲',
        'PlusMinus' => '±',
        'plusmn' => '±',
        'plusm' => '±',
        'plussim' => '⨦',
        'plustwo' => '⨧',
        'pm' => '±',
        'Poincareplane' => 'ℌ',
        'pointint' => '⨕',
        'Popf' => 'ℙ',
        'popf' => '𝕡',
        'pound' => '£',
        'poun' => '£',
        'Pr' => '⪻',
        'pr' => '≺',
        'prap' => '⪷',
        'prcue' => '≼',
        'prE' => '⪳',
        'pre' => '⪯',
        'prec' => '≺',
        'precapprox' => '⪷',
        'preccurlyeq' => '≼',
        'Precedes' => '≺',
        'PrecedesEqual' => '⪯',
        'PrecedesSlantEqual' => '≼',
        'PrecedesTilde' => '≾',
        'preceq' => '⪯',
        'precnapprox' => '⪹',
        'precneqq' => '⪵',
        'precnsim' => '⋨',
        'precsim' => '≾',
        'Prime' => '″',
        'prime' => '′',
        'primes' => 'ℙ',
        'prnap' => '⪹',
        'prnE' => '⪵',
        'prnsim' => '⋨',
        'prod' => '∏',
        'Product' => '∏',
        'profalar' => '⌮',
        'profline' => '⌒',
        'profsurf' => '⌓',
        'prop' => '∝',
        'Proportion' => '∷',
        'Proportional' => '∝',
        'propto' => '∝',
        'prsim' => '≾',
        'prurel' => '⊰',
        'Pscr' => '𝒫',
        'pscr' => '𝓅',
        'Psi' => 'Ψ',
        'psi' => 'ψ',
        'puncsp' => ' ',
        'Qfr' => '𝔔',
        'qfr' => '𝔮',
        'qint' => '⨌',
        'Qopf' => 'ℚ',
        'qopf' => '𝕢',
        'qprime' => '⁗',
        'Qscr' => '𝒬',
        'qscr' => '𝓆',
        'quaternions' => 'ℍ',
        'quatint' => '⨖',
        'quest' => '?',
        'questeq' => '≟',
        'QUOT' => '"',
        'QUO' => '"',
        'quot' => '"',
        'quo' => '"',
        'rAarr' => '⇛',
        'race' => '∽̱',
        'Racute' => 'Ŕ',
        'racute' => 'ŕ',
        'radic' => '√',
        'raemptyv' => '⦳',
        'Rang' => '⟫',
        'rang' => '⟩',
        'rangd' => '⦒',
        'range' => '⦥',
        'rangle' => '⟩',
        'raquo' => '»',
        'raqu' => '»',
        'Rarr' => '↠',
        'rArr' => '⇒',
        'rarr' => '→',
        'rarrap' => '⥵',
        'rarrb' => '⇥',
        'rarrbfs' => '⤠',
        'rarrc' => '⤳',
        'rarrfs' => '⤞',
        'rarrhk' => '↪',
        'rarrlp' => '↬',
        'rarrpl' => '⥅',
        'rarrsim' => '⥴',
        'Rarrtl' => '⤖',
        'rarrtl' => '↣',
        'rarrw' => '↝',
        'rAtail' => '⤜',
        'ratail' => '⤚',
        'ratio' => '∶',
        'rationals' => 'ℚ',
        'RBarr' => '⤐',
        'rBarr' => '⤏',
        'rbarr' => '⤍',
        'rbbrk' => '❳',
        'rbrace' => '}',
        'rbrack' => ']',
        'rbrke' => '⦌',
        'rbrksld' => '⦎',
        'rbrkslu' => '⦐',
        'Rcaron' => 'Ř',
        'rcaron' => 'ř',
        'Rcedil' => 'Ŗ',
        'rcedil' => 'ŗ',
        'rceil' => '⌉',
        'rcub' => '}',
        'Rcy' => 'Р',
        'rcy' => 'р',
        'rdca' => '⤷',
        'rdldhar' => '⥩',
        'rdquo' => '”',
        'rdquor' => '”',
        'rdsh' => '↳',
        'Re' => 'ℜ',
        'real' => 'ℜ',
        'realine' => 'ℛ',
        'realpart' => 'ℜ',
        'reals' => 'ℝ',
        'rect' => '▭',
        'REG' => '®',
        'RE' => '®',
        'reg' => '®',
        're' => '®',
        'ReverseElement' => '∋',
        'ReverseEquilibrium' => '⇋',
        'ReverseUpEquilibrium' => '⥯',
        'rfisht' => '⥽',
        'rfloor' => '⌋',
        'Rfr' => 'ℜ',
        'rfr' => '𝔯',
        'rHar' => '⥤',
        'rhard' => '⇁',
        'rharu' => '⇀',
        'rharul' => '⥬',
        'Rho' => 'Ρ',
        'rho' => 'ρ',
        'rhov' => 'ϱ',
        'RightAngleBracket' => '⟩',
        'RightArrow' => '→',
        'Rightarrow' => '⇒',
        'rightarrow' => '→',
        'RightArrowBar' => '⇥',
        'RightArrowLeftArrow' => '⇄',
        'rightarrowtail' => '↣',
        'RightCeiling' => '⌉',
        'RightDoubleBracket' => '⟧',
        'RightDownTeeVector' => '⥝',
        'RightDownVector' => '⇂',
        'RightDownVectorBar' => '⥕',
        'RightFloor' => '⌋',
        'rightharpoondown' => '⇁',
        'rightharpoonup' => '⇀',
        'rightleftarrows' => '⇄',
        'rightleftharpoons' => '⇌',
        'rightrightarrows' => '⇉',
        'rightsquigarrow' => '↝',
        'RightTee' => '⊢',
        'RightTeeArrow' => '↦',
        'RightTeeVector' => '⥛',
        'rightthreetimes' => '⋌',
        'RightTriangle' => '⊳',
        'RightTriangleBar' => '⧐',
        'RightTriangleEqual' => '⊵',
        'RightUpDownVector' => '⥏',
        'RightUpTeeVector' => '⥜',
        'RightUpVector' => '↾',
        'RightUpVectorBar' => '⥔',
        'RightVector' => '⇀',
        'RightVectorBar' => '⥓',
        'ring' => '˚',
        'risingdotseq' => '≓',
        'rlarr' => '⇄',
        'rlhar' => '⇌',
        'rlm' => '‏',
        'rmoust' => '⎱',
        'rmoustache' => '⎱',
        'rnmid' => '⫮',
        'roang' => '⟭',
        'roarr' => '⇾',
        'robrk' => '⟧',
        'ropar' => '⦆',
        'Ropf' => 'ℝ',
        'ropf' => '𝕣',
        'roplus' => '⨮',
        'rotimes' => '⨵',
        'RoundImplies' => '⥰',
        'rpar' => ')',
        'rpargt' => '⦔',
        'rppolint' => '⨒',
        'rrarr' => '⇉',
        'Rrightarrow' => '⇛',
        'rsaquo' => '›',
        'Rscr' => 'ℛ',
        'rscr' => '𝓇',
        'Rsh' => '↱',
        'rsh' => '↱',
        'rsqb' => ']',
        'rsquo' => '’',
        'rsquor' => '’',
        'rthree' => '⋌',
        'rtimes' => '⋊',
        'rtri' => '▹',
        'rtrie' => '⊵',
        'rtrif' => '▸',
        'rtriltri' => '⧎',
        'RuleDelayed' => '⧴',
        'ruluhar' => '⥨',
        'rx' => '℞',
        'Sacute' => 'Ś',
        'sacute' => 'ś',
        'sbquo' => '‚',
        'Sc' => '⪼',
        'sc' => '≻',
        'scap' => '⪸',
        'Scaron' => 'Š',
        'scaron' => 'š',
        'sccue' => '≽',
        'scE' => '⪴',
        'sce' => '⪰',
        'Scedil' => 'Ş',
        'scedil' => 'ş',
        'Scirc' => 'Ŝ',
        'scirc' => 'ŝ',
        'scnap' => '⪺',
        'scnE' => '⪶',
        'scnsim' => '⋩',
        'scpolint' => '⨓',
        'scsim' => '≿',
        'Scy' => 'С',
        'scy' => 'с',
        'sdot' => '⋅',
        'sdotb' => '⊡',
        'sdote' => '⩦',
        'searhk' => '⤥',
        'seArr' => '⇘',
        'searr' => '↘',
        'searrow' => '↘',
        'sect' => '§',
        'sec' => '§',
        'semi' => ';',
        'seswar' => '⤩',
        'setminus' => '∖',
        'setmn' => '∖',
        'sext' => '✶',
        'Sfr' => '𝔖',
        'sfr' => '𝔰',
        'sfrown' => '⌢',
        'sharp' => '♯',
        'SHCHcy' => 'Щ',
        'shchcy' => 'щ',
        'SHcy' => 'Ш',
        'shcy' => 'ш',
        'ShortDownArrow' => '↓',
        'ShortLeftArrow' => '←',
        'shortmid' => '∣',
        'shortparallel' => '∥',
        'ShortRightArrow' => '→',
        'ShortUpArrow' => '↑',
        'shy' => '­',
        'sh' => '­',
        'Sigma' => 'Σ',
        'sigma' => 'σ',
        'sigmaf' => 'ς',
        'sigmav' => 'ς',
        'sim' => '∼',
        'simdot' => '⩪',
        'sime' => '≃',
        'simeq' => '≃',
        'simg' => '⪞',
        'simgE' => '⪠',
        'siml' => '⪝',
        'simlE' => '⪟',
        'simne' => '≆',
        'simplus' => '⨤',
        'simrarr' => '⥲',
        'slarr' => '←',
        'SmallCircle' => '∘',
        'smallsetminus' => '∖',
        'smashp' => '⨳',
        'smeparsl' => '⧤',
        'smid' => '∣',
        'smile' => '⌣',
        'smt' => '⪪',
        'smte' => '⪬',
        'smtes' => '⪬︀',
        'SOFTcy' => 'Ь',
        'softcy' => 'ь',
        'sol' => '/',
        'solb' => '⧄',
        'solbar' => '⌿',
        'Sopf' => '𝕊',
        'sopf' => '𝕤',
        'spades' => '♠',
        'spadesuit' => '♠',
        'spar' => '∥',
        'sqcap' => '⊓',
        'sqcaps' => '⊓︀',
        'sqcup' => '⊔',
        'sqcups' => '⊔︀',
        'Sqrt' => '√',
        'sqsub' => '⊏',
        'sqsube' => '⊑',
        'sqsubset' => '⊏',
        'sqsubseteq' => '⊑',
        'sqsup' => '⊐',
        'sqsupe' => '⊒',
        'sqsupset' => '⊐',
        'sqsupseteq' => '⊒',
        'squ' => '□',
        'Square' => '□',
        'square' => '□',
        'SquareIntersection' => '⊓',
        'SquareSubset' => '⊏',
        'SquareSubsetEqual' => '⊑',
        'SquareSuperset' => '⊐',
        'SquareSupersetEqual' => '⊒',
        'SquareUnion' => '⊔',
        'squarf' => '▪',
        'squf' => '▪',
        'srarr' => '→',
        'Sscr' => '𝒮',
        'sscr' => '𝓈',
        'ssetmn' => '∖',
        'ssmile' => '⌣',
        'sstarf' => '⋆',
        'Star' => '⋆',
        'star' => '☆',
        'starf' => '★',
        'straightepsilon' => 'ϵ',
        'straightphi' => 'ϕ',
        'strns' => '¯',
        'Sub' => '⋐',
        'sub' => '⊂',
        'subdot' => '⪽',
        'subE' => '⫅',
        'sube' => '⊆',
        'subedot' => '⫃',
        'submult' => '⫁',
        'subnE' => '⫋',
        'subne' => '⊊',
        'subplus' => '⪿',
        'subrarr' => '⥹',
        'Subset' => '⋐',
        'subset' => '⊂',
        'subseteq' => '⊆',
        'subseteqq' => '⫅',
        'SubsetEqual' => '⊆',
        'subsetneq' => '⊊',
        'subsetneqq' => '⫋',
        'subsim' => '⫇',
        'subsub' => '⫕',
        'subsup' => '⫓',
        'succ' => '≻',
        'succapprox' => '⪸',
        'succcurlyeq' => '≽',
        'Succeeds' => '≻',
        'SucceedsEqual' => '⪰',
        'SucceedsSlantEqual' => '≽',
        'SucceedsTilde' => '≿',
        'succeq' => '⪰',
        'succnapprox' => '⪺',
        'succneqq' => '⪶',
        'succnsim' => '⋩',
        'succsim' => '≿',
        'SuchThat' => '∋',
        'Sum' => '∑',
        'sum' => '∑',
        'sung' => '♪',
        'Sup' => '⋑',
        'sup' => '³',
        'sup1' => '¹',
        'sup2' => '²',
        'sup3' => '³',
        'supdot' => '⪾',
        'supdsub' => '⫘',
        'supE' => '⫆',
        'supe' => '⊇',
        'supedot' => '⫄',
        'Superset' => '⊃',
        'SupersetEqual' => '⊇',
        'suphsol' => '⟉',
        'suphsub' => '⫗',
        'suplarr' => '⥻',
        'supmult' => '⫂',
        'supnE' => '⫌',
        'supne' => '⊋',
        'supplus' => '⫀',
        'Supset' => '⋑',
        'supset' => '⊃',
        'supseteq' => '⊇',
        'supseteqq' => '⫆',
        'supsetneq' => '⊋',
        'supsetneqq' => '⫌',
        'supsim' => '⫈',
        'supsub' => '⫔',
        'supsup' => '⫖',
        'swarhk' => '⤦',
        'swArr' => '⇙',
        'swarr' => '↙',
        'swarrow' => '↙',
        'swnwar' => '⤪',
        'szlig' => 'ß',
        'szli' => 'ß',
        'Tab' => '	',
        'target' => '⌖',
        'Tau' => 'Τ',
        'tau' => 'τ',
        'tbrk' => '⎴',
        'Tcaron' => 'Ť',
        'tcaron' => 'ť',
        'Tcedil' => 'Ţ',
        'tcedil' => 'ţ',
        'Tcy' => 'Т',
        'tcy' => 'т',
        'tdot' => '⃛',
        'telrec' => '⌕',
        'Tfr' => '𝔗',
        'tfr' => '𝔱',
        'there4' => '∴',
        'Therefore' => '∴',
        'therefore' => '∴',
        'Theta' => 'Θ',
        'theta' => 'θ',
        'thetasym' => 'ϑ',
        'thetav' => 'ϑ',
        'thickapprox' => '≈',
        'thicksim' => '∼',
        'ThickSpace' => '  ',
        'thinsp' => ' ',
        'ThinSpace' => ' ',
        'thkap' => '≈',
        'thksim' => '∼',
        'THORN' => 'Þ',
        'THOR' => 'Þ',
        'thorn' => 'þ',
        'thor' => 'þ',
        'Tilde' => '∼',
        'tilde' => '˜',
        'TildeEqual' => '≃',
        'TildeFullEqual' => '≅',
        'TildeTilde' => '≈',
        'times' => '×',
        'time' => '×',
        'timesb' => '⊠',
        'timesbar' => '⨱',
        'timesd' => '⨰',
        'tint' => '∭',
        'toea' => '⤨',
        'top' => '⊤',
        'topbot' => '⌶',
        'topcir' => '⫱',
        'Topf' => '𝕋',
        'topf' => '𝕥',
        'topfork' => '⫚',
        'tosa' => '⤩',
        'tprime' => '‴',
        'TRADE' => '™',
        'trade' => '™',
        'triangle' => '▵',
        'triangledown' => '▿',
        'triangleleft' => '◃',
        'trianglelefteq' => '⊴',
        'triangleq' => '≜',
        'triangleright' => '▹',
        'trianglerighteq' => '⊵',
        'tridot' => '◬',
        'trie' => '≜',
        'triminus' => '⨺',
        'TripleDot' => '⃛',
        'triplus' => '⨹',
        'trisb' => '⧍',
        'tritime' => '⨻',
        'trpezium' => '⏢',
        'Tscr' => '𝒯',
        'tscr' => '𝓉',
        'TScy' => 'Ц',
        'tscy' => 'ц',
        'TSHcy' => 'Ћ',
        'tshcy' => 'ћ',
        'Tstrok' => 'Ŧ',
        'tstrok' => 'ŧ',
        'twixt' => '≬',
        'twoheadleftarrow' => '↞',
        'twoheadrightarrow' => '↠',
        'Uacute' => 'Ú',
        'Uacut' => 'Ú',
        'uacute' => 'ú',
        'uacut' => 'ú',
        'Uarr' => '↟',
        'uArr' => '⇑',
        'uarr' => '↑',
        'Uarrocir' => '⥉',
        'Ubrcy' => 'Ў',
        'ubrcy' => 'ў',
        'Ubreve' => 'Ŭ',
        'ubreve' => 'ŭ',
        'Ucirc' => 'Û',
        'Ucir' => 'Û',
        'ucirc' => 'û',
        'ucir' => 'û',
        'Ucy' => 'У',
        'ucy' => 'у',
        'udarr' => '⇅',
        'Udblac' => 'Ű',
        'udblac' => 'ű',
        'udhar' => '⥮',
        'ufisht' => '⥾',
        'Ufr' => '𝔘',
        'ufr' => '𝔲',
        'Ugrave' => 'Ù',
        'Ugrav' => 'Ù',
        'ugrave' => 'ù',
        'ugrav' => 'ù',
        'uHar' => '⥣',
        'uharl' => '↿',
        'uharr' => '↾',
        'uhblk' => '▀',
        'ulcorn' => '⌜',
        'ulcorner' => '⌜',
        'ulcrop' => '⌏',
        'ultri' => '◸',
        'Umacr' => 'Ū',
        'umacr' => 'ū',
        'uml' => '¨',
        'um' => '¨',
        'UnderBar' => '_',
        'UnderBrace' => '⏟',
        'UnderBracket' => '⎵',
        'UnderParenthesis' => '⏝',
        'Union' => '⋃',
        'UnionPlus' => '⊎',
        'Uogon' => 'Ų',
        'uogon' => 'ų',
        'Uopf' => '𝕌',
        'uopf' => '𝕦',
        'UpArrow' => '↑',
        'Uparrow' => '⇑',
        'uparrow' => '↑',
        'UpArrowBar' => '⤒',
        'UpArrowDownArrow' => '⇅',
        'UpDownArrow' => '↕',
        'Updownarrow' => '⇕',
        'updownarrow' => '↕',
        'UpEquilibrium' => '⥮',
        'upharpoonleft' => '↿',
        'upharpoonright' => '↾',
        'uplus' => '⊎',
        'UpperLeftArrow' => '↖',
        'UpperRightArrow' => '↗',
        'Upsi' => 'ϒ',
        'upsi' => 'υ',
        'upsih' => 'ϒ',
        'Upsilon' => 'Υ',
        'upsilon' => 'υ',
        'UpTee' => '⊥',
        'UpTeeArrow' => '↥',
        'upuparrows' => '⇈',
        'urcorn' => '⌝',
        'urcorner' => '⌝',
        'urcrop' => '⌎',
        'Uring' => 'Ů',
        'uring' => 'ů',
        'urtri' => '◹',
        'Uscr' => '𝒰',
        'uscr' => '𝓊',
        'utdot' => '⋰',
        'Utilde' => 'Ũ',
        'utilde' => 'ũ',
        'utri' => '▵',
        'utrif' => '▴',
        'uuarr' => '⇈',
        'Uuml' => 'Ü',
        'Uum' => 'Ü',
        'uuml' => 'ü',
        'uum' => 'ü',
        'uwangle' => '⦧',
        'vangrt' => '⦜',
        'varepsilon' => 'ϵ',
        'varkappa' => 'ϰ',
        'varnothing' => '∅',
        'varphi' => 'ϕ',
        'varpi' => 'ϖ',
        'varpropto' => '∝',
        'vArr' => '⇕',
        'varr' => '↕',
        'varrho' => 'ϱ',
        'varsigma' => 'ς',
        'varsubsetneq' => '⊊︀',
        'varsubsetneqq' => '⫋︀',
        'varsupsetneq' => '⊋︀',
        'varsupsetneqq' => '⫌︀',
        'vartheta' => 'ϑ',
        'vartriangleleft' => '⊲',
        'vartriangleright' => '⊳',
        'Vbar' => '⫫',
        'vBar' => '⫨',
        'vBarv' => '⫩',
        'Vcy' => 'В',
        'vcy' => 'в',
        'VDash' => '⊫',
        'Vdash' => '⊩',
        'vDash' => '⊨',
        'vdash' => '⊢',
        'Vdashl' => '⫦',
        'Vee' => '⋁',
        'vee' => '∨',
        'veebar' => '⊻',
        'veeeq' => '≚',
        'vellip' => '⋮',
        'Verbar' => '‖',
        'verbar' => '|',
        'Vert' => '‖',
        'vert' => '|',
        'VerticalBar' => '∣',
        'VerticalLine' => '|',
        'VerticalSeparator' => '❘',
        'VerticalTilde' => '≀',
        'VeryThinSpace' => ' ',
        'Vfr' => '𝔙',
        'vfr' => '𝔳',
        'vltri' => '⊲',
        'vnsub' => '⊂⃒',
        'vnsup' => '⊃⃒',
        'Vopf' => '𝕍',
        'vopf' => '𝕧',
        'vprop' => '∝',
        'vrtri' => '⊳',
        'Vscr' => '𝒱',
        'vscr' => '𝓋',
        'vsubnE' => '⫋︀',
        'vsubne' => '⊊︀',
        'vsupnE' => '⫌︀',
        'vsupne' => '⊋︀',
        'Vvdash' => '⊪',
        'vzigzag' => '⦚',
        'Wcirc' => 'Ŵ',
        'wcirc' => 'ŵ',
        'wedbar' => '⩟',
        'Wedge' => '⋀',
        'wedge' => '∧',
        'wedgeq' => '≙',
        'weierp' => '℘',
        'Wfr' => '𝔚',
        'wfr' => '𝔴',
        'Wopf' => '𝕎',
        'wopf' => '𝕨',
        'wp' => '℘',
        'wr' => '≀',
        'wreath' => '≀',
        'Wscr' => '𝒲',
        'wscr' => '𝓌',
        'xcap' => '⋂',
        'xcirc' => '◯',
        'xcup' => '⋃',
        'xdtri' => '▽',
        'Xfr' => '𝔛',
        'xfr' => '𝔵',
        'xhArr' => '⟺',
        'xharr' => '⟷',
        'Xi' => 'Ξ',
        'xi' => 'ξ',
        'xlArr' => '⟸',
        'xlarr' => '⟵',
        'xmap' => '⟼',
        'xnis' => '⋻',
        'xodot' => '⨀',
        'Xopf' => '𝕏',
        'xopf' => '𝕩',
        'xoplus' => '⨁',
        'xotime' => '⨂',
        'xrArr' => '⟹',
        'xrarr' => '⟶',
        'Xscr' => '𝒳',
        'xscr' => '𝓍',
        'xsqcup' => '⨆',
        'xuplus' => '⨄',
        'xutri' => '△',
        'xvee' => '⋁',
        'xwedge' => '⋀',
        'Yacute' => 'Ý',
        'Yacut' => 'Ý',
        'yacute' => 'ý',
        'yacut' => 'ý',
        'YAcy' => 'Я',
        'yacy' => 'я',
        'Ycirc' => 'Ŷ',
        'ycirc' => 'ŷ',
        'Ycy' => 'Ы',
        'ycy' => 'ы',
        'yen' => '¥',
        'ye' => '¥',
        'Yfr' => '𝔜',
        'yfr' => '𝔶',
        'YIcy' => 'Ї',
        'yicy' => 'ї',
        'Yopf' => '𝕐',
        'yopf' => '𝕪',
        'Yscr' => '𝒴',
        'yscr' => '𝓎',
        'YUcy' => 'Ю',
        'yucy' => 'ю',
        'Yuml' => 'Ÿ',
        'yuml' => 'ÿ',
        'yum' => 'ÿ',
        'Zacute' => 'Ź',
        'zacute' => 'ź',
        'Zcaron' => 'Ž',
        'zcaron' => 'ž',
        'Zcy' => 'З',
        'zcy' => 'з',
        'Zdot' => 'Ż',
        'zdot' => 'ż',
        'zeetrf' => 'ℨ',
        'ZeroWidthSpace' => '​',
        'Zeta' => 'Ζ',
        'zeta' => 'ζ',
        'Zfr' => 'ℨ',
        'zfr' => '𝔷',
        'ZHcy' => 'Ж',
        'zhcy' => 'ж',
        'zigrarr' => '⇝',
        'Zopf' => 'ℤ',
        'zopf' => '𝕫',
        'Zscr' => '𝒵',
        'zscr' => '𝓏',
        'zwj' => '‍',
        'zwnj' => '‌',
    );
}
<?php

namespace Masterminds\HTML5;

/**
 * The base exception for the HTML5 project.
 */
class Exception extends \Exception
{
}
<?php
/**
 * A handler for processor instructions.
 */

namespace Masterminds\HTML5;

/**
 * Provide an processor to handle embedded instructions.
 *
 * XML defines a mechanism for inserting instructions (like PHP) into a
 * document. These are called "Processor Instructions." The HTML5 parser
 * provides an opportunity to handle these processor instructions during
 * the tree-building phase (before the DOM is constructed), which makes
 * it possible to alter the document as it is being created.
 *
 * One could, for example, use this mechanism to execute well-formed PHP
 * code embedded inside of an HTML5 document.
 */
interface InstructionProcessor
{
    /**
     * Process an individual processing instruction.
     *
     * The process() function is responsible for doing the following:
     * - Determining whether $name is an instruction type it can handle.
     * - Determining what to do with the data passed in.
     * - Making any subsequent modifications to the DOM by modifying the
     * DOMElement or its attached DOM tree.
     *
     * @param \DOMElement $element The parent element for the current processing instruction.
     * @param string      $name    The instruction's name. E.g. `&lt;?php` has the name `php`.
     * @param string      $data    All of the data between the opening and closing PI marks.
     *
     * @return \DOMElement The element that should be considered "Current". This may just be
     *                     the element passed in, but if the processor added more elements,
     *                     it may choose to reset the current element to one of the elements
     *                     it created. (When in doubt, return the element passed in.)
     */
    public function process(\DOMElement $element, $name, $data);
}
<?php

namespace Masterminds\HTML5\Parser;

use Masterminds\HTML5\Entities;

/**
 * Manage entity references.
 *
 * This is a simple resolver for HTML5 character reference entitites. See Entities for the list of supported entities.
 */
class CharacterReference
{
    protected static $numeric_mask = array(
        0x0,
        0x2FFFF,
        0,
        0xFFFF,
    );

    /**
     * Given a name (e.g. 'amp'), lookup the UTF-8 character ('&').
     *
     * @param string $name The name to look up.
     *
     * @return string The character sequence. In UTF-8 this may be more than one byte.
     */
    public static function lookupName($name)
    {
        // Do we really want to return NULL here? or FFFD
        return isset(Entities::$byName[$name]) ? Entities::$byName[$name] : null;
    }

    /**
     * Given a decimal number, return the UTF-8 character.
     *
     * @param $int
     *
     * @return false|string|string[]|null
     */
    public static function lookupDecimal($int)
    {
        $entity = '&#' . $int . ';';

        // UNTESTED: This may fail on some planes. Couldn't find full documentation
        // on the value of the mask array.
        return mb_decode_numericentity($entity, static::$numeric_mask, 'utf-8');
    }

    /**
     * Given a hexadecimal number, return the UTF-8 character.
     *
     * @param $hexdec
     *
     * @return false|string|string[]|null
     */
    public static function lookupHex($hexdec)
    {
        return static::lookupDecimal(hexdec($hexdec));
    }
}
<?php

namespace Masterminds\HTML5\Parser;

use Masterminds\HTML5\Elements;
use Masterminds\HTML5\InstructionProcessor;

/**
 * Create an HTML5 DOM tree from events.
 *
 * This attempts to create a DOM from events emitted by a parser. This
 * attempts (but does not guarantee) to up-convert older HTML documents
 * to HTML5. It does this by applying HTML5's rules, but it will not
 * change the architecture of the document itself.
 *
 * Many of the error correction and quirks features suggested in the specification
 * are implemented herein; however, not all of them are. Since we do not
 * assume a graphical user agent, no presentation-specific logic is conducted
 * during tree building.
 *
 * FIXME: The present tree builder does not exactly follow the state machine rules
 * for insert modes as outlined in the HTML5 spec. The processor needs to be
 * re-written to accomodate this. See, for example, the Go language HTML5
 * parser.
 */
class DOMTreeBuilder implements EventHandler
{
    /**
     * Defined in http://www.w3.org/TR/html51/infrastructure.html#html-namespace-0.
     */
    const NAMESPACE_HTML = 'http://www.w3.org/1999/xhtml';

    const NAMESPACE_MATHML = 'http://www.w3.org/1998/Math/MathML';

    const NAMESPACE_SVG = 'http://www.w3.org/2000/svg';

    const NAMESPACE_XLINK = 'http://www.w3.org/1999/xlink';

    const NAMESPACE_XML = 'http://www.w3.org/XML/1998/namespace';

    const NAMESPACE_XMLNS = 'http://www.w3.org/2000/xmlns/';

    const OPT_DISABLE_HTML_NS = 'disable_html_ns';

    const OPT_TARGET_DOC = 'target_document';

    const OPT_IMPLICIT_NS = 'implicit_namespaces';

    /**
     * Holds the HTML5 element names that causes a namespace switch.
     *
     * @var array
     */
    protected $nsRoots = array(
        'html' => self::NAMESPACE_HTML,
        'svg' => self::NAMESPACE_SVG,
        'math' => self::NAMESPACE_MATHML,
    );

    /**
     * Holds the always available namespaces (which does not require the XMLNS declaration).
     *
     * @var array
     */
    protected $implicitNamespaces = array(
        'xml' => self::NAMESPACE_XML,
        'xmlns' => self::NAMESPACE_XMLNS,
        'xlink' => self::NAMESPACE_XLINK,
    );

    /**
     * Holds a stack of currently active namespaces.
     *
     * @var array
     */
    protected $nsStack = array();

    /**
     * Holds the number of namespaces declared by a node.
     *
     * @var array
     */
    protected $pushes = array();

    /**
     * Defined in 8.2.5.
     */
    const IM_INITIAL = 0;

    const IM_BEFORE_HTML = 1;

    const IM_BEFORE_HEAD = 2;

    const IM_IN_HEAD = 3;

    const IM_IN_HEAD_NOSCRIPT = 4;

    const IM_AFTER_HEAD = 5;

    const IM_IN_BODY = 6;

    const IM_TEXT = 7;

    const IM_IN_TABLE = 8;

    const IM_IN_TABLE_TEXT = 9;

    const IM_IN_CAPTION = 10;

    const IM_IN_COLUMN_GROUP = 11;

    const IM_IN_TABLE_BODY = 12;

    const IM_IN_ROW = 13;

    const IM_IN_CELL = 14;

    const IM_IN_SELECT = 15;

    const IM_IN_SELECT_IN_TABLE = 16;

    const IM_AFTER_BODY = 17;

    const IM_IN_FRAMESET = 18;

    const IM_AFTER_FRAMESET = 19;

    const IM_AFTER_AFTER_BODY = 20;

    const IM_AFTER_AFTER_FRAMESET = 21;

    const IM_IN_SVG = 22;

    const IM_IN_MATHML = 23;

    protected $options = array();

    protected $stack = array();

    protected $current; // Pointer in the tag hierarchy.
    protected $rules;
    protected $doc;

    protected $frag;

    protected $processor;

    protected $insertMode = 0;

    /**
     * Track if we are in an element that allows only inline child nodes.
     *
     * @var string|null
     */
    protected $onlyInline;

    /**
     * Quirks mode is enabled by default.
     * Any document that is missing the DT will be considered to be in quirks mode.
     */
    protected $quirks = true;

    protected $errors = array();

    public function __construct($isFragment = false, array $options = array())
    {
        $this->options = $options;

        if (isset($options[self::OPT_TARGET_DOC])) {
            $this->doc = $options[self::OPT_TARGET_DOC];
        } else {
            $impl = new \DOMImplementation();
            // XXX:
            // Create the doctype. For now, we are always creating HTML5
            // documents, and attempting to up-convert any older DTDs to HTML5.
            $dt = $impl->createDocumentType('html');
            // $this->doc = \DOMImplementation::createDocument(NULL, 'html', $dt);
            $this->doc = $impl->createDocument(null, '', $dt);
            $this->doc->encoding = !empty($options['encoding']) ? $options['encoding'] : 'UTF-8';
        }

        $this->errors = array();

        $this->current = $this->doc; // ->documentElement;

        // Create a rules engine for tags.
        $this->rules = new TreeBuildingRules();

        $implicitNS = array();
        if (isset($this->options[self::OPT_IMPLICIT_NS])) {
            $implicitNS = $this->options[self::OPT_IMPLICIT_NS];
        } elseif (isset($this->options['implicitNamespaces'])) {
            $implicitNS = $this->options['implicitNamespaces'];
        }

        // Fill $nsStack with the defalut HTML5 namespaces, plus the "implicitNamespaces" array taken form $options
        array_unshift($this->nsStack, $implicitNS + array('' => self::NAMESPACE_HTML) + $this->implicitNamespaces);

        if ($isFragment) {
            $this->insertMode = static::IM_IN_BODY;
            $this->frag = $this->doc->createDocumentFragment();
            $this->current = $this->frag;
        }
    }

    /**
     * Get the document.
     */
    public function document()
    {
        return $this->doc;
    }

    /**
     * Get the DOM fragment for the body.
     *
     * This returns a DOMNodeList because a fragment may have zero or more
     * DOMNodes at its root.
     *
     * @see http://www.w3.org/TR/2012/CR-html5-20121217/syntax.html#concept-frag-parse-context
     *
     * @return \DOMDocumentFragment
     */
    public function fragment()
    {
        return $this->frag;
    }

    /**
     * Provide an instruction processor.
     *
     * This is used for handling Processor Instructions as they are
     * inserted. If omitted, PI's are inserted directly into the DOM tree.
     */
    public function setInstructionProcessor(InstructionProcessor $proc)
    {
        $this->processor = $proc;
    }

    public function doctype($name, $idType = 0, $id = null, $quirks = false)
    {
        // This is used solely for setting quirks mode. Currently we don't
        // try to preserve the inbound DT. We convert it to HTML5.
        $this->quirks = $quirks;

        if ($this->insertMode > static::IM_INITIAL) {
            $this->parseError('Illegal placement of DOCTYPE tag. Ignoring: ' . $name);

            return;
        }

        $this->insertMode = static::IM_BEFORE_HTML;
    }

    /**
     * Process the start tag.
     *
     * @todo - XMLNS namespace handling (we need to parse, even if it's not valid)
     *       - XLink, MathML and SVG namespace handling
     *       - Omission rules: 8.1.2.4 Optional tags
     *
     * @param string $name
     * @param array  $attributes
     * @param bool   $selfClosing
     *
     * @return int
     */
    public function startTag($name, $attributes = array(), $selfClosing = false)
    {
        $lname = $this->normalizeTagName($name);

        // Make sure we have an html element.
        if (!$this->doc->documentElement && 'html' !== $name && !$this->frag) {
            $this->startTag('html');
        }

        // Set quirks mode if we're at IM_INITIAL with no doctype.
        if ($this->insertMode === static::IM_INITIAL) {
            $this->quirks = true;
            $this->parseError('No DOCTYPE specified.');
        }

        // SPECIAL TAG HANDLING:
        // Spec says do this, and "don't ask."
        // find the spec where this is defined... looks problematic
        if ('image' === $name && !($this->insertMode === static::IM_IN_SVG || $this->insertMode === static::IM_IN_MATHML)) {
            $name = 'img';
        }

        // Autoclose p tags where appropriate.
        if ($this->insertMode >= static::IM_IN_BODY && Elements::isA($name, Elements::AUTOCLOSE_P)) {
            $this->autoclose('p');
        }

        // Set insert mode:
        switch ($name) {
            case 'html':
                $this->insertMode = static::IM_BEFORE_HEAD;
                break;
            case 'head':
                if ($this->insertMode > static::IM_BEFORE_HEAD) {
                    $this->parseError('Unexpected head tag outside of head context.');
                } else {
                    $this->insertMode = static::IM_IN_HEAD;
                }
                break;
            case 'body':
                $this->insertMode = static::IM_IN_BODY;
                break;
            case 'svg':
                $this->insertMode = static::IM_IN_SVG;
                break;
            case 'math':
                $this->insertMode = static::IM_IN_MATHML;
                break;
            case 'noscript':
                if ($this->insertMode === static::IM_IN_HEAD) {
                    $this->insertMode = static::IM_IN_HEAD_NOSCRIPT;
                }
                break;
        }

        // Special case handling for SVG.
        if ($this->insertMode === static::IM_IN_SVG) {
            $lname = Elements::normalizeSvgElement($lname);
        }

        $pushes = 0;
        // when we found a tag thats appears inside $nsRoots, we have to switch the defalut namespace
        if (isset($this->nsRoots[$lname]) && $this->nsStack[0][''] !== $this->nsRoots[$lname]) {
            array_unshift($this->nsStack, array(
                '' => $this->nsRoots[$lname],
            ) + $this->nsStack[0]);
            ++$pushes;
        }
        $needsWorkaround = false;
        if (isset($this->options['xmlNamespaces']) && $this->options['xmlNamespaces']) {
            // when xmlNamespaces is true a and we found a 'xmlns' or 'xmlns:*' attribute, we should add a new item to the $nsStack
            foreach ($attributes as $aName => $aVal) {
                if ('xmlns' === $aName) {
                    $needsWorkaround = $aVal;
                    array_unshift($this->nsStack, array(
                        '' => $aVal,
                    ) + $this->nsStack[0]);
                    ++$pushes;
                } elseif ('xmlns' === (($pos = strpos($aName, ':')) ? substr($aName, 0, $pos) : '')) {
                    array_unshift($this->nsStack, array(
                        substr($aName, $pos + 1) => $aVal,
                    ) + $this->nsStack[0]);
                    ++$pushes;
                }
            }
        }

        if ($this->onlyInline && Elements::isA($lname, Elements::BLOCK_TAG)) {
            $this->autoclose($this->onlyInline);
            $this->onlyInline = null;
        }

        // some elements as table related tags might have optional end tags that force us to auto close multiple tags
        // https://www.w3.org/TR/html401/struct/tables.html
        if ($this->current instanceof \DOMElement && isset(Elements::$optionalEndElementsParentsToClose[$lname])) {
            foreach (Elements::$optionalEndElementsParentsToClose[$lname] as $parentElName) {
                if ($this->current instanceof \DOMElement && $this->current->tagName === $parentElName) {
                    $this->autoclose($parentElName);
                }
            }
        }

        try {
            $prefix = ($pos = strpos($lname, ':')) ? substr($lname, 0, $pos) : '';

            if (false !== $needsWorkaround) {
                $xml = "<$lname xmlns=\"$needsWorkaround\" " . (strlen($prefix) && isset($this->nsStack[0][$prefix]) ? ("xmlns:$prefix=\"" . $this->nsStack[0][$prefix] . '"') : '') . '/>';

                $frag = new \DOMDocument('1.0', 'UTF-8');
                $frag->loadXML($xml);

                $ele = $this->doc->importNode($frag->documentElement, true);
            } else {
                if (!isset($this->nsStack[0][$prefix]) || ('' === $prefix && isset($this->options[self::OPT_DISABLE_HTML_NS]) && $this->options[self::OPT_DISABLE_HTML_NS])) {
                    $ele = $this->doc->createElement($lname);
                } else {
                    $ele = $this->doc->createElementNS($this->nsStack[0][$prefix], $lname);
                }
            }
        } catch (\DOMException $e) {
            $this->parseError("Illegal tag name: <$lname>. Replaced with <invalid>.");
            $ele = $this->doc->createElement('invalid');
        }

        if (Elements::isA($lname, Elements::BLOCK_ONLY_INLINE)) {
            $this->onlyInline = $lname;
        }

        // When we add some namespacess, we have to track them. Later, when "endElement" is invoked, we have to remove them.
        // When we are on a void tag, we do not need to care about namesapce nesting.
        if ($pushes > 0 && !Elements::isA($name, Elements::VOID_TAG)) {
            // PHP tends to free the memory used by DOM,
            // to avoid spl_object_hash collisions whe have to avoid garbage collection of $ele storing it into $pushes
            // see https://bugs.php.net/bug.php?id=67459
            $this->pushes[spl_object_hash($ele)] = array($pushes, $ele);
        }

        foreach ($attributes as $aName => $aVal) {
            // xmlns attributes can't be set
            if ('xmlns' === $aName) {
                continue;
            }

            if ($this->insertMode === static::IM_IN_SVG) {
                $aName = Elements::normalizeSvgAttribute($aName);
            } elseif ($this->insertMode === static::IM_IN_MATHML) {
                $aName = Elements::normalizeMathMlAttribute($aName);
            }

            $aVal = (string) $aVal;

            try {
                $prefix = ($pos = strpos($aName, ':')) ? substr($aName, 0, $pos) : false;

                if ('xmlns' === $prefix) {
                    $ele->setAttributeNS(self::NAMESPACE_XMLNS, $aName, $aVal);
                } elseif (false !== $prefix && isset($this->nsStack[0][$prefix])) {
                    $ele->setAttributeNS($this->nsStack[0][$prefix], $aName, $aVal);
                } else {
                    $ele->setAttribute($aName, $aVal);
                }
            } catch (\DOMException $e) {
                $this->parseError("Illegal attribute name for tag $name. Ignoring: $aName");
                continue;
            }

            // This is necessary on a non-DTD schema, like HTML5.
            if ('id' === $aName) {
                $ele->setIdAttribute('id', true);
            }
        }

        if ($this->frag !== $this->current && $this->rules->hasRules($name)) {
            // Some elements have special processing rules. Handle those separately.
            $this->current = $this->rules->evaluate($ele, $this->current);
        } else {
            // Otherwise, it's a standard element.
            $this->current->appendChild($ele);

            if (!Elements::isA($name, Elements::VOID_TAG)) {
                $this->current = $ele;
            }

            // Self-closing tags should only be respected on foreign elements
            // (and are implied on void elements)
            // See: https://www.w3.org/TR/html5/syntax.html#start-tags
            if (Elements::isHtml5Element($name)) {
                $selfClosing = false;
            }
        }

        // This is sort of a last-ditch attempt to correct for cases where no head/body
        // elements are provided.
        if ($this->insertMode <= static::IM_BEFORE_HEAD && 'head' !== $name && 'html' !== $name) {
            $this->insertMode = static::IM_IN_BODY;
        }

        // When we are on a void tag, we do not need to care about namesapce nesting,
        // but we have to remove the namespaces pushed to $nsStack.
        if ($pushes > 0 && Elements::isA($name, Elements::VOID_TAG)) {
            // remove the namespaced definded by current node
            for ($i = 0; $i < $pushes; ++$i) {
                array_shift($this->nsStack);
            }
        }

        if ($selfClosing) {
            $this->endTag($name);
        }

        // Return the element mask, which the tokenizer can then use to set
        // various processing rules.
        return Elements::element($name);
    }

    public function endTag($name)
    {
        $lname = $this->normalizeTagName($name);

        // Special case within 12.2.6.4.7: An end tag whose tag name is "br" should be treated as an opening tag
        if ('br' === $name) {
            $this->parseError('Closing tag encountered for void element br.');

            $this->startTag('br');
        }
        // Ignore closing tags for other unary elements.
        elseif (Elements::isA($name, Elements::VOID_TAG)) {
            return;
        }

        if ($this->insertMode <= static::IM_BEFORE_HTML) {
            // 8.2.5.4.2
            if (in_array($name, array(
                'html',
                'br',
                'head',
                'title',
            ))) {
                $this->startTag('html');
                $this->endTag($name);
                $this->insertMode = static::IM_BEFORE_HEAD;

                return;
            }

            // Ignore the tag.
            $this->parseError('Illegal closing tag at global scope.');

            return;
        }

        // Special case handling for SVG.
        if ($this->insertMode === static::IM_IN_SVG) {
            $lname = Elements::normalizeSvgElement($lname);
        }

        $cid = spl_object_hash($this->current);

        // XXX: HTML has no parent. What do we do, though,
        // if this element appears in the wrong place?
        if ('html' === $lname) {
            return;
        }

        // remove the namespaced definded by current node
        if (isset($this->pushes[$cid])) {
            for ($i = 0; $i < $this->pushes[$cid][0]; ++$i) {
                array_shift($this->nsStack);
            }
            unset($this->pushes[$cid]);
        }

        if (!$this->autoclose($lname)) {
            $this->parseError('Could not find closing tag for ' . $lname);
        }

        switch ($lname) {
            case 'head':
                $this->insertMode = static::IM_AFTER_HEAD;
                break;
            case 'body':
                $this->insertMode = static::IM_AFTER_BODY;
                break;
            case 'svg':
            case 'mathml':
                $this->insertMode = static::IM_IN_BODY;
                break;
        }
    }

    public function comment($cdata)
    {
        // TODO: Need to handle case where comment appears outside of the HTML tag.
        $node = $this->doc->createComment($cdata);
        $this->current->appendChild($node);
    }

    public function text($data)
    {
        // XXX: Hmmm.... should we really be this strict?
        if ($this->insertMode < static::IM_IN_HEAD) {
            // Per '8.2.5.4.3 The "before head" insertion mode' the characters
            // " \t\n\r\f" should be ignored but no mention of a parse error. This is
            // practical as most documents contain these characters. Other text is not
            // expected here so recording a parse error is necessary.
            $dataTmp = trim($data, " \t\n\r\f");
            if (!empty($dataTmp)) {
                // fprintf(STDOUT, "Unexpected insert mode: %d", $this->insertMode);
                $this->parseError('Unexpected text. Ignoring: ' . $dataTmp);
            }

            return;
        }
        // fprintf(STDOUT, "Appending text %s.", $data);
        $node = $this->doc->createTextNode($data);
        $this->current->appendChild($node);
    }

    public function eof()
    {
        // If the $current isn't the $root, do we need to do anything?
    }

    public function parseError($msg, $line = 0, $col = 0)
    {
        $this->errors[] = sprintf('Line %d, Col %d: %s', $line, $col, $msg);
    }

    public function getErrors()
    {
        return $this->errors;
    }

    public function cdata($data)
    {
        $node = $this->doc->createCDATASection($data);
        $this->current->appendChild($node);
    }

    public function processingInstruction($name, $data = null)
    {
        // XXX: Ignore initial XML declaration, per the spec.
        if ($this->insertMode === static::IM_INITIAL && 'xml' === strtolower($name)) {
            return;
        }

        // Important: The processor may modify the current DOM tree however it sees fit.
        if ($this->processor instanceof InstructionProcessor) {
            $res = $this->processor->process($this->current, $name, $data);
            if (!empty($res)) {
                $this->current = $res;
            }

            return;
        }

        // Otherwise, this is just a dumb PI element.
        $node = $this->doc->createProcessingInstruction($name, $data);

        $this->current->appendChild($node);
    }

    // ==========================================================================
    // UTILITIES
    // ==========================================================================

    /**
     * Apply normalization rules to a tag name.
     * See sections 2.9 and 8.1.2.
     *
     * @param string $tagName
     *
     * @return string The normalized tag name.
     */
    protected function normalizeTagName($tagName)
    {
        /*
         * Section 2.9 suggests that we should not do this. if (strpos($name, ':') !== false) { // We know from the grammar that there must be at least one other // char besides :, since : is not a legal tag start. $parts = explode(':', $name); return array_pop($parts); }
         */
        return $tagName;
    }

    protected function quirksTreeResolver($name)
    {
        throw new \Exception('Not implemented.');
    }

    /**
     * Automatically climb the tree and close the closest node with the matching $tag.
     *
     * @param string $tagName
     *
     * @return bool
     */
    protected function autoclose($tagName)
    {
        $working = $this->current;
        do {
            if (XML_ELEMENT_NODE !== $working->nodeType) {
                return false;
            }
            if ($working->tagName === $tagName) {
                $this->current = $working->parentNode;

                return true;
            }
        } while ($working = $working->parentNode);

        return false;
    }

    /**
     * Checks if the given tagname is an ancestor of the present candidate.
     *
     * If $this->current or anything above $this->current matches the given tag
     * name, this returns true.
     *
     * @param string $tagName
     *
     * @return bool
     */
    protected function isAncestor($tagName)
    {
        $candidate = $this->current;
        while (XML_ELEMENT_NODE === $candidate->nodeType) {
            if ($candidate->tagName === $tagName) {
                return true;
            }
            $candidate = $candidate->parentNode;
        }

        return false;
    }

    /**
     * Returns true if the immediate parent element is of the given tagname.
     *
     * @param string $tagName
     *
     * @return bool
     */
    protected function isParent($tagName)
    {
        return $this->current->tagName === $tagName;
    }
}
<?php

namespace Masterminds\HTML5\Parser;

/**
 * Standard events for HTML5.
 *
 * This is roughly analogous to a SAX2 or expat-style interface.
 * However, it is tuned specifically for HTML5, according to section 8
 * of the HTML5 specification.
 *
 * An event handler receives parser events. For a concrete
 * implementation, see DOMTreeBuilder.
 *
 * Quirks support in the parser is limited to close-in syntax (malformed
 * tags or attributes). Higher order syntax and semantic issues with a
 * document (e.g. mismatched tags, illegal nesting, etc.) are the
 * responsibility of the event handler implementation.
 *
 * See HTML5 spec section 8.2.4
 */
interface EventHandler
{
    const DOCTYPE_NONE = 0;

    const DOCTYPE_PUBLIC = 1;

    const DOCTYPE_SYSTEM = 2;

    /**
     * A doctype declaration.
     *
     * @param string $name   The name of the root element.
     * @param int    $idType One of DOCTYPE_NONE, DOCTYPE_PUBLIC, or DOCTYPE_SYSTEM
     * @param string $id     The identifier. For DOCTYPE_PUBLIC, this is the public ID. If DOCTYPE_SYSTEM,
     *                       then this is a system ID.
     * @param bool   $quirks Indicates whether the builder should enter quirks mode.
     */
    public function doctype($name, $idType = 0, $id = null, $quirks = false);

    /**
     * A start tag.
     *
     * IMPORTANT: The parser watches the return value of this event. If this returns
     * an integer, the parser will switch TEXTMODE patters according to the int.
     *
     * This is how the Tree Builder can tell the Tokenizer when a certain tag should
     * cause the parser to go into RAW text mode.
     *
     * The HTML5 standard requires that the builder is the one that initiates this
     * step, and this is the only way short of a circular reference that we can
     * do that.
     *
     * Example: if a startTag even for a `script` name is fired, and the startTag()
     * implementation returns Tokenizer::TEXTMODE_RAW, then the tokenizer will
     * switch into RAW text mode and consume data until it reaches a closing
     * `script` tag.
     *
     * The textmode is automatically reset to Tokenizer::TEXTMODE_NORMAL when the
     * closing tag is encounter. **This behavior may change.**
     *
     * @param string $name        The tag name.
     * @param array  $attributes  An array with all of the tag's attributes.
     * @param bool   $selfClosing An indicator of whether or not this tag is self-closing (<foo/>).
     *
     * @return int one of the Tokenizer::TEXTMODE_* constants
     */
    public function startTag($name, $attributes = array(), $selfClosing = false);

    /**
     * An end-tag.
     */
    public function endTag($name);

    /**
     * A comment section (unparsed character data).
     */
    public function comment($cdata);

    /**
     * A unit of parsed character data.
     *
     * Entities in this text are *already decoded*.
     */
    public function text($cdata);

    /**
     * Indicates that the document has been entirely processed.
     */
    public function eof();

    /**
     * Emitted when the parser encounters an error condition.
     */
    public function parseError($msg, $line, $col);

    /**
     * A CDATA section.
     *
     * @param string $data
     *                     The unparsed character data
     */
    public function cdata($data);

    /**
     * This is a holdover from the XML spec.
     *
     * While user agents don't get PIs, server-side does.
     *
     * @param string $name The name of the processor (e.g. 'php').
     * @param string $data The unparsed data.
     */
    public function processingInstruction($name, $data = null);
}
<?php

namespace Masterminds\HTML5\Parser;

/**
 * The FileInputStream loads a file to be parsed.
 *
 * So right now we read files into strings and then process the
 * string. We chose to do this largely for the sake of expediency of
 * development, and also because we could optimize toward processing
 * arbitrarily large chunks of the input. But in the future, we'd
 * really like to rewrite this class to efficiently handle lower level
 * stream reads (and thus efficiently handle large documents).
 *
 * @deprecated since 2.4, to remove in 3.0. Use a string in the scanner instead.
 */
class FileInputStream extends StringInputStream implements InputStream
{
    /**
     * Load a file input stream.
     *
     * @param string $data     The file or url path to load.
     * @param string $encoding The encoding to use for the data.
     * @param string $debug    A fprintf format to use to echo the data on stdout.
     */
    public function __construct($data, $encoding = 'UTF-8', $debug = '')
    {
        // Get the contents of the file.
        $content = file_get_contents($data);

        parent::__construct($content, $encoding, $debug);
    }
}
<?php

namespace Masterminds\HTML5\Parser;

/**
 * Interface for stream readers.
 *
 * The parser only reads from streams. Various input sources can write
 * an adapater to this InputStream.
 *
 * Currently provided InputStream implementations include
 * FileInputStream and StringInputStream.
 *
 * @deprecated since 2.4, to remove in 3.0. Use a string in the scanner instead.
 */
interface InputStream extends \Iterator
{
    /**
     * Returns the current line that is being consumed.
     *
     * TODO: Move this to the scanner.
     */
    public function currentLine();

    /**
     * Returns the current column of the current line that the tokenizer is at.
     *
     * Newlines are column 0. The first char after a newline is column 1.
     *
     * @TODO Move this to the scanner.
     *
     * @return int The column number.
     */
    public function columnOffset();

    /**
     * Get all characters until EOF.
     *
     * This consumes characters until the EOF.
     */
    public function remainingChars();

    /**
     * Read to a particular match (or until $max bytes are consumed).
     *
     * This operates on byte sequences, not characters.
     *
     * Matches as far as possible until we reach a certain set of bytes
     * and returns the matched substring.
     *
     * @see strcspn
     *
     * @param string $bytes Bytes to match.
     * @param int    $max   Maximum number of bytes to scan.
     *
     * @return mixed Index or false if no match is found. You should use strong
     *               equality when checking the result, since index could be 0.
     */
    public function charsUntil($bytes, $max = null);

    /**
     * Returns the string so long as $bytes matches.
     *
     * Matches as far as possible with a certain set of bytes
     * and returns the matched substring.
     *
     * @see strspn
     *
     * @param string $bytes A mask of bytes to match. If ANY byte in this mask matches the
     *                      current char, the pointer advances and the char is part of the
     *                      substring.
     * @param int    $max   The max number of chars to read.
     */
    public function charsWhile($bytes, $max = null);

    /**
     * Unconsume one character.
     *
     * @param int $howMany The number of characters to move the pointer back.
     */
    public function unconsume($howMany = 1);

    /**
     * Retrieve the next character without advancing the pointer.
     */
    public function peek();
}
<?php

namespace Masterminds\HTML5\Parser;

/**
 * Emit when the parser has an error.
 */
class ParseError extends \Exception
{
}
# The Parser Model

The parser model here follows the model in section
[8.2.1](http://www.w3.org/TR/2012/CR-html5-20121217/syntax.html#parsing)
of the HTML5 specification, though we do not assume a networking layer.

     [ InputStream ]    // Generic support for reading input.
           ||
      [ Scanner ]       // Breaks down the stream into characters.
           ||
     [ Tokenizer ]      // Groups characters into syntactic
           ||
    [ Tree Builder ]    // Organizes units into a tree of objects
           ||
     [ DOM Document ]     // The final state of the parsed document.


## InputStream

This is an interface with at least two concrete implementations:

- StringInputStream: Reads an HTML5 string.
- FileInputStream: Reads an HTML5 file.

## Scanner

This is a mechanical piece of the parser.

## Tokenizer

This follows section 8.4 of the HTML5 spec. It is (roughly) a recursive
descent parser. (Though there are plenty of optimizations that are less
than purely functional.

## EventHandler and DOMTree

EventHandler is the interface for tree builders. Since not all
implementations will necessarily build trees, we've chosen a more
generic name.

The event handler emits tokens during tokenization.

The DOMTree is an event handler that builds a DOM tree. The output of
the DOMTree builder is a DOMDocument.

## DOMDocument

PHP has a DOMDocument class built-in (technically, it's part of libxml.)
We use that, thus rendering the output of this process compatible with
SimpleXML, QueryPath, and many other XML/HTML processing tools.

For cases where the HTML5 is a fragment of a HTML5 document a
DOMDocumentFragment is returned instead. This is another built-in class.
<?php

namespace Masterminds\HTML5\Parser;

use Masterminds\HTML5\Exception;

/**
 * The scanner scans over a given data input to react appropriately to characters.
 */
class Scanner
{
    const CHARS_HEX = 'abcdefABCDEF01234567890';
    const CHARS_ALNUM = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01234567890';
    const CHARS_ALPHA = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';

    /**
     * The string data we're parsing.
     */
    private $data;

    /**
     * The current integer byte position we are in $data.
     */
    private $char;

    /**
     * Length of $data; when $char === $data, we are at the end-of-file.
     */
    private $EOF;

    /**
     * Parse errors.
     */
    public $errors = array();

    /**
     * Create a new Scanner.
     *
     * @param string $data     Data to parse.
     * @param string $encoding The encoding to use for the data.
     *
     * @throws Exception If the given data cannot be encoded to UTF-8.
     */
    public function __construct($data, $encoding = 'UTF-8')
    {
        if ($data instanceof InputStream) {
            @trigger_error('InputStream objects are deprecated since version 2.4 and will be removed in 3.0. Use strings instead.', E_USER_DEPRECATED);
            $data = (string) $data;
        }

        $data = UTF8Utils::convertToUTF8($data, $encoding);

        // There is good reason to question whether it makes sense to
        // do this here, since most of these checks are done during
        // parsing, and since this check doesn't actually *do* anything.
        $this->errors = UTF8Utils::checkForIllegalCodepoints($data);

        $data = $this->replaceLinefeeds($data);

        $this->data = $data;
        $this->char = 0;
        $this->EOF = strlen($data);
    }

    /**
     * Check if upcomming chars match the given sequence.
     *
     * This will read the stream for the $sequence. If it's
     * found, this will return true. If not, return false.
     * Since this unconsumes any chars it reads, the caller
     * will still need to read the next sequence, even if
     * this returns true.
     *
     * Example: $this->scanner->sequenceMatches('</script>') will
     * see if the input stream is at the start of a
     * '</script>' string.
     *
     * @param string $sequence
     * @param bool   $caseSensitive
     *
     * @return bool
     */
    public function sequenceMatches($sequence, $caseSensitive = true)
    {
        $portion = substr($this->data, $this->char, strlen($sequence));

        return $caseSensitive ? $portion === $sequence : 0 === strcasecmp($portion, $sequence);
    }

    /**
     * Get the current position.
     *
     * @return int The current intiger byte position.
     */
    public function position()
    {
        return $this->char;
    }

    /**
     * Take a peek at the next character in the data.
     *
     * @return string The next character.
     */
    public function peek()
    {
        if (($this->char + 1) < $this->EOF) {
            return $this->data[$this->char + 1];
        }

        return false;
    }

    /**
     * Get the next character.
     * Note: This advances the pointer.
     *
     * @return string The next character.
     */
    public function next()
    {
        ++$this->char;

        if ($this->char < $this->EOF) {
            return $this->data[$this->char];
        }

        return false;
    }

    /**
     * Get the current character.
     * Note, this does not advance the pointer.
     *
     * @return string The current character.
     */
    public function current()
    {
        if ($this->char < $this->EOF) {
            return $this->data[$this->char];
        }

        return false;
    }

    /**
     * Silently consume N chars.
     *
     * @param int $count
     */
    public function consume($count = 1)
    {
        $this->char += $count;
    }

    /**
     * Unconsume some of the data.
     * This moves the data pointer backwards.
     *
     * @param int $howMany The number of characters to move the pointer back.
     */
    public function unconsume($howMany = 1)
    {
        if (($this->char - $howMany) >= 0) {
            $this->char -= $howMany;
        }
    }

    /**
     * Get the next group of that contains hex characters.
     * Note, along with getting the characters the pointer in the data will be
     * moved as well.
     *
     * @return string The next group that is hex characters.
     */
    public function getHex()
    {
        return $this->doCharsWhile(static::CHARS_HEX);
    }

    /**
     * Get the next group of characters that are ASCII Alpha characters.
     * Note, along with getting the characters the pointer in the data will be
     * moved as well.
     *
     * @return string The next group of ASCII alpha characters.
     */
    public function getAsciiAlpha()
    {
        return $this->doCharsWhile(static::CHARS_ALPHA);
    }

    /**
     * Get the next group of characters that are ASCII Alpha characters and numbers.
     * Note, along with getting the characters the pointer in the data will be
     * moved as well.
     *
     * @return string The next group of ASCII alpha characters and numbers.
     */
    public function getAsciiAlphaNum()
    {
        return $this->doCharsWhile(static::CHARS_ALNUM);
    }

    /**
     * Get the next group of numbers.
     * Note, along with getting the characters the pointer in the data will be
     * moved as well.
     *
     * @return string The next group of numbers.
     */
    public function getNumeric()
    {
        return $this->doCharsWhile('0123456789');
    }

    /**
     * Consume whitespace.
     * Whitespace in HTML5 is: formfeed, tab, newline, space.
     *
     * @return int The length of the matched whitespaces.
     */
    public function whitespace()
    {
        if ($this->char >= $this->EOF) {
            return false;
        }

        $len = strspn($this->data, "\n\t\f ", $this->char);

        $this->char += $len;

        return $len;
    }

    /**
     * Returns the current line that is being consumed.
     *
     * @return int The current line number.
     */
    public function currentLine()
    {
        if (empty($this->EOF) || 0 === $this->char) {
            return 1;
        }

        // Add one to $this->char because we want the number for the next
        // byte to be processed.
        return substr_count($this->data, "\n", 0, min($this->char, $this->EOF)) + 1;
    }

    /**
     * Read chars until something in the mask is encountered.
     *
     * @param string $mask
     *
     * @return mixed
     */
    public function charsUntil($mask)
    {
        return $this->doCharsUntil($mask);
    }

    /**
     * Read chars as long as the mask matches.
     *
     * @param string $mask
     *
     * @return int
     */
    public function charsWhile($mask)
    {
        return $this->doCharsWhile($mask);
    }

    /**
     * Returns the current column of the current line that the tokenizer is at.
     *
     * Newlines are column 0. The first char after a newline is column 1.
     *
     * @return int The column number.
     */
    public function columnOffset()
    {
        // Short circuit for the first char.
        if (0 === $this->char) {
            return 0;
        }

        // strrpos is weird, and the offset needs to be negative for what we
        // want (i.e., the last \n before $this->char). This needs to not have
        // one (to make it point to the next character, the one we want the
        // position of) added to it because strrpos's behaviour includes the
        // final offset byte.
        $backwardFrom = $this->char - 1 - strlen($this->data);
        $lastLine = strrpos($this->data, "\n", $backwardFrom);

        // However, for here we want the length up until the next byte to be
        // processed, so add one to the current byte ($this->char).
        if (false !== $lastLine) {
            $findLengthOf = substr($this->data, $lastLine + 1, $this->char - 1 - $lastLine);
        } else {
            // After a newline.
            $findLengthOf = substr($this->data, 0, $this->char);
        }

        return UTF8Utils::countChars($findLengthOf);
    }

    /**
     * Get all characters until EOF.
     *
     * This consumes characters until the EOF.
     *
     * @return int The number of characters remaining.
     */
    public function remainingChars()
    {
        if ($this->char < $this->EOF) {
            $data = substr($this->data, $this->char);
            $this->char = $this->EOF;

            return $data;
        }

        return ''; // false;
    }

    /**
     * Replace linefeed characters according to the spec.
     *
     * @param $data
     *
     * @return string
     */
    private function replaceLinefeeds($data)
    {
        /*
         * U+000D CARRIAGE RETURN (CR) characters and U+000A LINE FEED (LF) characters are treated specially.
         * Any CR characters that are followed by LF characters must be removed, and any CR characters not
         * followed by LF characters must be converted to LF characters. Thus, newlines in HTML DOMs are
         * represented by LF characters, and there are never any CR characters in the input to the tokenization
         * stage.
         */
        $crlfTable = array(
            "\0" => "\xEF\xBF\xBD",
            "\r\n" => "\n",
            "\r" => "\n",
        );

        return strtr($data, $crlfTable);
    }

    /**
     * Read to a particular match (or until $max bytes are consumed).
     *
     * This operates on byte sequences, not characters.
     *
     * Matches as far as possible until we reach a certain set of bytes
     * and returns the matched substring.
     *
     * @param string $bytes Bytes to match.
     * @param int    $max   Maximum number of bytes to scan.
     *
     * @return mixed Index or false if no match is found. You should use strong
     *               equality when checking the result, since index could be 0.
     */
    private function doCharsUntil($bytes, $max = null)
    {
        if ($this->char >= $this->EOF) {
            return false;
        }

        if (0 === $max || $max) {
            $len = strcspn($this->data, $bytes, $this->char, $max);
        } else {
            $len = strcspn($this->data, $bytes, $this->char);
        }

        $string = (string) substr($this->data, $this->char, $len);
        $this->char += $len;

        return $string;
    }

    /**
     * Returns the string so long as $bytes matches.
     *
     * Matches as far as possible with a certain set of bytes
     * and returns the matched substring.
     *
     * @param string $bytes A mask of bytes to match. If ANY byte in this mask matches the
     *                      current char, the pointer advances and the char is part of the
     *                      substring.
     * @param int    $max   The max number of chars to read.
     *
     * @return string
     */
    private function doCharsWhile($bytes, $max = null)
    {
        if ($this->char >= $this->EOF) {
            return false;
        }

        if (0 === $max || $max) {
            $len = strspn($this->data, $bytes, $this->char, $max);
        } else {
            $len = strspn($this->data, $bytes, $this->char);
        }

        $string = (string) substr($this->data, $this->char, $len);
        $this->char += $len;

        return $string;
    }
}
<?php
/**
 * Loads a string to be parsed.
 */

namespace Masterminds\HTML5\Parser;

/*
 *
* Based on code from html5lib:

Copyright 2009 Geoffrey Sneddon <http://gsnedders.com/>

Permission is hereby granted, free of charge, to any person obtaining a
copy of this software and associated documentation files (the
    "Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:

The above copyright notice and this permission notice shall be included
in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

*/

// Some conventions:
// - /* */ indicates verbatim text from the HTML 5 specification
//   MPB: Not sure which version of the spec. Moving from HTML5lib to
//   HTML5-PHP, I have been using this version:
//   http://www.w3.org/TR/2012/CR-html5-20121217/Overview.html#contents
//
// - // indicates regular comments

/**
 * @deprecated since 2.4, to remove in 3.0. Use a string in the scanner instead.
 */
class StringInputStream implements InputStream
{
    /**
     * The string data we're parsing.
     */
    private $data;

    /**
     * The current integer byte position we are in $data.
     */
    private $char;

    /**
     * Length of $data; when $char === $data, we are at the end-of-file.
     */
    private $EOF;

    /**
     * Parse errors.
     */
    public $errors = array();

    /**
     * Create a new InputStream wrapper.
     *
     * @param string $data     Data to parse.
     * @param string $encoding The encoding to use for the data.
     * @param string $debug    A fprintf format to use to echo the data on stdout.
     */
    public function __construct($data, $encoding = 'UTF-8', $debug = '')
    {
        $data = UTF8Utils::convertToUTF8($data, $encoding);
        if ($debug) {
            fprintf(STDOUT, $debug, $data, strlen($data));
        }

        // There is good reason to question whether it makes sense to
        // do this here, since most of these checks are done during
        // parsing, and since this check doesn't actually *do* anything.
        $this->errors = UTF8Utils::checkForIllegalCodepoints($data);

        $data = $this->replaceLinefeeds($data);

        $this->data = $data;
        $this->char = 0;
        $this->EOF = strlen($data);
    }

    public function __toString()
    {
        return $this->data;
    }

    /**
     * Replace linefeed characters according to the spec.
     */
    protected function replaceLinefeeds($data)
    {
        /*
         * U+000D CARRIAGE RETURN (CR) characters and U+000A LINE FEED (LF) characters are treated specially.
         * Any CR characters that are followed by LF characters must be removed, and any CR characters not
         * followed by LF characters must be converted to LF characters. Thus, newlines in HTML DOMs are
         * represented by LF characters, and there are never any CR characters in the input to the tokenization
         * stage.
         */
        $crlfTable = array(
            "\0" => "\xEF\xBF\xBD",
            "\r\n" => "\n",
            "\r" => "\n",
        );

        return strtr($data, $crlfTable);
    }

    /**
     * Returns the current line that the tokenizer is at.
     */
    public function currentLine()
    {
        if (empty($this->EOF) || 0 === $this->char) {
            return 1;
        }
        // Add one to $this->char because we want the number for the next
        // byte to be processed.
        return substr_count($this->data, "\n", 0, min($this->char, $this->EOF)) + 1;
    }

    /**
     * @deprecated
     */
    public function getCurrentLine()
    {
        return $this->currentLine();
    }

    /**
     * Returns the current column of the current line that the tokenizer is at.
     * Newlines are column 0. The first char after a newline is column 1.
     *
     * @return int The column number.
     */
    public function columnOffset()
    {
        // Short circuit for the first char.
        if (0 === $this->char) {
            return 0;
        }
        // strrpos is weird, and the offset needs to be negative for what we
        // want (i.e., the last \n before $this->char). This needs to not have
        // one (to make it point to the next character, the one we want the
        // position of) added to it because strrpos's behaviour includes the
        // final offset byte.
        $backwardFrom = $this->char - 1 - strlen($this->data);
        $lastLine = strrpos($this->data, "\n", $backwardFrom);

        // However, for here we want the length up until the next byte to be
        // processed, so add one to the current byte ($this->char).
        if (false !== $lastLine) {
            $findLengthOf = substr($this->data, $lastLine + 1, $this->char - 1 - $lastLine);
        } else {
            // After a newline.
            $findLengthOf = substr($this->data, 0, $this->char);
        }

        return UTF8Utils::countChars($findLengthOf);
    }

    /**
     * @deprecated
     */
    public function getColumnOffset()
    {
        return $this->columnOffset();
    }

    /**
     * Get the current character.
     *
     * @return string The current character.
     */
    #[\ReturnTypeWillChange]
    public function current()
    {
        return $this->data[$this->char];
    }

    /**
     * Advance the pointer.
     * This is part of the Iterator interface.
     */
    #[\ReturnTypeWillChange]
    public function next()
    {
        ++$this->char;
    }

    /**
     * Rewind to the start of the string.
     */
    #[\ReturnTypeWillChange]
    public function rewind()
    {
        $this->char = 0;
    }

    /**
     * Is the current pointer location valid.
     *
     * @return bool Whether the current pointer location is valid.
     */
    #[\ReturnTypeWillChange]
    public function valid()
    {
        return $this->char < $this->EOF;
    }

    /**
     * Get all characters until EOF.
     *
     * This reads to the end of the file, and sets the read marker at the
     * end of the file.
     *
     * Note this performs bounds checking.
     *
     * @return string Returns the remaining text. If called when the InputStream is
     *                already exhausted, it returns an empty string.
     */
    public function remainingChars()
    {
        if ($this->char < $this->EOF) {
            $data = substr($this->data, $this->char);
            $this->char = $this->EOF;

            return $data;
        }

        return ''; // false;
    }

    /**
     * Read to a particular match (or until $max bytes are consumed).
     *
     * This operates on byte sequences, not characters.
     *
     * Matches as far as possible until we reach a certain set of bytes
     * and returns the matched substring.
     *
     * @param string $bytes Bytes to match.
     * @param int    $max   Maximum number of bytes to scan.
     *
     * @return mixed Index or false if no match is found. You should use strong
     *               equality when checking the result, since index could be 0.
     */
    public function charsUntil($bytes, $max = null)
    {
        if ($this->char >= $this->EOF) {
            return false;
        }

        if (0 === $max || $max) {
            $len = strcspn($this->data, $bytes, $this->char, $max);
        } else {
            $len = strcspn($this->data, $bytes, $this->char);
        }

        $string = (string) substr($this->data, $this->char, $len);
        $this->char += $len;

        return $string;
    }

    /**
     * Returns the string so long as $bytes matches.
     *
     * Matches as far as possible with a certain set of bytes
     * and returns the matched substring.
     *
     * @param string $bytes A mask of bytes to match. If ANY byte in this mask matches the
     *                      current char, the pointer advances and the char is part of the
     *                      substring.
     * @param int    $max   The max number of chars to read.
     *
     * @return string
     */
    public function charsWhile($bytes, $max = null)
    {
        if ($this->char >= $this->EOF) {
            return false;
        }

        if (0 === $max || $max) {
            $len = strspn($this->data, $bytes, $this->char, $max);
        } else {
            $len = strspn($this->data, $bytes, $this->char);
        }
        $string = (string) substr($this->data, $this->char, $len);
        $this->char += $len;

        return $string;
    }

    /**
     * Unconsume characters.
     *
     * @param int $howMany The number of characters to unconsume.
     */
    public function unconsume($howMany = 1)
    {
        if (($this->char - $howMany) >= 0) {
            $this->char -= $howMany;
        }
    }

    /**
     * Look ahead without moving cursor.
     */
    public function peek()
    {
        if (($this->char + 1) <= $this->EOF) {
            return $this->data[$this->char + 1];
        }

        return false;
    }

    #[\ReturnTypeWillChange]
    public function key()
    {
        return $this->char;
    }
}
<?php

namespace Masterminds\HTML5\Parser;

use Masterminds\HTML5\Elements;

/**
 * The HTML5 tokenizer.
 *
 * The tokenizer's role is reading data from the scanner and gathering it into
 * semantic units. From the tokenizer, data is emitted to an event handler,
 * which may (for example) create a DOM tree.
 *
 * The HTML5 specification has a detailed explanation of tokenizing HTML5. We
 * follow that specification to the maximum extent that we can. If you find
 * a discrepancy that is not documented, please file a bug and/or submit a
 * patch.
 *
 * This tokenizer is implemented as a recursive descent parser.
 *
 * Within the API documentation, you may see references to the specific section
 * of the HTML5 spec that the code attempts to reproduce. Example: 8.2.4.1.
 * This refers to section 8.2.4.1 of the HTML5 CR specification.
 *
 * @see http://www.w3.org/TR/2012/CR-html5-20121217/
 */
class Tokenizer
{
    protected $scanner;

    protected $events;

    protected $tok;

    /**
     * Buffer for text.
     */
    protected $text = '';

    // When this goes to false, the parser stops.
    protected $carryOn = true;

    protected $textMode = 0; // TEXTMODE_NORMAL;
    protected $untilTag = null;

    const CONFORMANT_XML = 'xml';
    const CONFORMANT_HTML = 'html';
    protected $mode = self::CONFORMANT_HTML;

    /**
     * Create a new tokenizer.
     *
     * Typically, parsing a document involves creating a new tokenizer, giving
     * it a scanner (input) and an event handler (output), and then calling
     * the Tokenizer::parse() method.`
     *
     * @param Scanner      $scanner      A scanner initialized with an input stream.
     * @param EventHandler $eventHandler An event handler, initialized and ready to receive events.
     * @param string       $mode
     */
    public function __construct($scanner, $eventHandler, $mode = self::CONFORMANT_HTML)
    {
        $this->scanner = $scanner;
        $this->events = $eventHandler;
        $this->mode = $mode;
    }

    /**
     * Begin parsing.
     *
     * This will begin scanning the document, tokenizing as it goes.
     * Tokens are emitted into the event handler.
     *
     * Tokenizing will continue until the document is completely
     * read. Errors are emitted into the event handler, but
     * the parser will attempt to continue parsing until the
     * entire input stream is read.
     */
    public function parse()
    {
        do {
            $this->consumeData();
            // FIXME: Add infinite loop protection.
        } while ($this->carryOn);
    }

    /**
     * Set the text mode for the character data reader.
     *
     * HTML5 defines three different modes for reading text:
     * - Normal: Read until a tag is encountered.
     * - RCDATA: Read until a tag is encountered, but skip a few otherwise-
     * special characters.
     * - Raw: Read until a special closing tag is encountered (viz. pre, script)
     *
     * This allows those modes to be set.
     *
     * Normally, setting is done by the event handler via a special return code on
     * startTag(), but it can also be set manually using this function.
     *
     * @param int    $textmode One of Elements::TEXT_*.
     * @param string $untilTag The tag that should stop RAW or RCDATA mode. Normal mode does not
     *                         use this indicator.
     */
    public function setTextMode($textmode, $untilTag = null)
    {
        $this->textMode = $textmode & (Elements::TEXT_RAW | Elements::TEXT_RCDATA);
        $this->untilTag = $untilTag;
    }

    /**
     * Consume a character and make a move.
     * HTML5 8.2.4.1.
     */
    protected function consumeData()
    {
        $tok = $this->scanner->current();

        if ('&' === $tok) {
            // Character reference
            $ref = $this->decodeCharacterReference();
            $this->buffer($ref);

            $tok = $this->scanner->current();
        }

        // Parse tag
        if ('<' === $tok) {
            // Any buffered text data can go out now.
            $this->flushBuffer();

            $tok = $this->scanner->next();

            if (false === $tok) {
                // end of string
                $this->parseError('Illegal tag opening');
            } elseif ('!' === $tok) {
                $this->markupDeclaration();
            } elseif ('/' === $tok) {
                $this->endTag();
            } elseif ('?' === $tok) {
                $this->processingInstruction();
            } elseif ($this->is_alpha($tok)) {
                $this->tagName();
            } else {
                $this->parseError('Illegal tag opening');
                // TODO is this necessary ?
                $this->characterData();
            }

            $tok = $this->scanner->current();
        }

        if (false === $tok) {
            // Handle end of document
            $this->eof();
        } else {
            // Parse character
            switch ($this->textMode) {
                case Elements::TEXT_RAW:
                    $this->rawText($tok);
                    break;

                case Elements::TEXT_RCDATA:
                    $this->rcdata($tok);
                    break;

                default:
                    if ('<' === $tok || '&' === $tok) {
                        break;
                    }

                    // NULL character
                    if ("\00" === $tok) {
                        $this->parseError('Received null character.');

                        $this->text .= $tok;
                        $this->scanner->consume();

                        break;
                    }

                    $this->text .= $this->scanner->charsUntil("<&\0");
            }
        }

        return $this->carryOn;
    }

    /**
     * Parse anything that looks like character data.
     *
     * Different rules apply based on the current text mode.
     *
     * @see Elements::TEXT_RAW Elements::TEXT_RCDATA.
     */
    protected function characterData()
    {
        $tok = $this->scanner->current();
        if (false === $tok) {
            return false;
        }
        switch ($this->textMode) {
            case Elements::TEXT_RAW:
                return $this->rawText($tok);
            case Elements::TEXT_RCDATA:
                return $this->rcdata($tok);
            default:
                if ('<' === $tok || '&' === $tok) {
                    return false;
                }

                return $this->text($tok);
        }
    }

    /**
     * This buffers the current token as character data.
     *
     * @param string $tok The current token.
     *
     * @return bool
     */
    protected function text($tok)
    {
        // This should never happen...
        if (false === $tok) {
            return false;
        }

        // NULL character
        if ("\00" === $tok) {
            $this->parseError('Received null character.');
        }

        $this->buffer($tok);
        $this->scanner->consume();

        return true;
    }

    /**
     * Read text in RAW mode.
     *
     * @param string $tok The current token.
     *
     * @return bool
     */
    protected function rawText($tok)
    {
        if (is_null($this->untilTag)) {
            return $this->text($tok);
        }

        $sequence = '</' . $this->untilTag . '>';
        $txt = $this->readUntilSequence($sequence);
        $this->events->text($txt);
        $this->setTextMode(0);

        return $this->endTag();
    }

    /**
     * Read text in RCDATA mode.
     *
     * @param string $tok The current token.
     *
     * @return bool
     */
    protected function rcdata($tok)
    {
        if (is_null($this->untilTag)) {
            return $this->text($tok);
        }

        $sequence = '</' . $this->untilTag;
        $txt = '';

        $caseSensitive = !Elements::isHtml5Element($this->untilTag);
        while (false !== $tok && !('<' == $tok && ($this->scanner->sequenceMatches($sequence, $caseSensitive)))) {
            if ('&' == $tok) {
                $txt .= $this->decodeCharacterReference();
                $tok = $this->scanner->current();
            } else {
                $txt .= $tok;
                $tok = $this->scanner->next();
            }
        }
        $len = strlen($sequence);
        $this->scanner->consume($len);
        $len += $this->scanner->whitespace();
        if ('>' !== $this->scanner->current()) {
            $this->parseError('Unclosed RCDATA end tag');
        }

        $this->scanner->unconsume($len);
        $this->events->text($txt);
        $this->setTextMode(0);

        return $this->endTag();
    }

    /**
     * If the document is read, emit an EOF event.
     */
    protected function eof()
    {
        // fprintf(STDOUT, "EOF");
        $this->flushBuffer();
        $this->events->eof();
        $this->carryOn = false;
    }

    /**
     * Look for markup.
     */
    protected function markupDeclaration()
    {
        $tok = $this->scanner->next();

        // Comment:
        if ('-' == $tok && '-' == $this->scanner->peek()) {
            $this->scanner->consume(2);

            return $this->comment();
        } elseif ('D' == $tok || 'd' == $tok) { // Doctype
            return $this->doctype();
        } elseif ('[' == $tok) { // CDATA section
            return $this->cdataSection();
        }

        // FINISH
        $this->parseError('Expected <!--, <![CDATA[, or <!DOCTYPE. Got <!%s', $tok);
        $this->bogusComment('<!');

        return true;
    }

    /**
     * Consume an end tag. See section 8.2.4.9.
     */
    protected function endTag()
    {
        if ('/' != $this->scanner->current()) {
            return false;
        }
        $tok = $this->scanner->next();

        // a-zA-Z -> tagname
        // > -> parse error
        // EOF -> parse error
        // -> parse error
        if (!$this->is_alpha($tok)) {
            $this->parseError("Expected tag name, got '%s'", $tok);
            if ("\0" == $tok || false === $tok) {
                return false;
            }

            return $this->bogusComment('</');
        }

        $name = $this->scanner->charsUntil("\n\f \t>");
        $name = self::CONFORMANT_XML === $this->mode ? $name : strtolower($name);
        // Trash whitespace.
        $this->scanner->whitespace();

        $tok = $this->scanner->current();
        if ('>' != $tok) {
            $this->parseError("Expected >, got '%s'", $tok);
            // We just trash stuff until we get to the next tag close.
            $this->scanner->charsUntil('>');
        }

        $this->events->endTag($name);
        $this->scanner->consume();

        return true;
    }

    /**
     * Consume a tag name and body. See section 8.2.4.10.
     */
    protected function tagName()
    {
        // We know this is at least one char.
        $name = $this->scanner->charsWhile(':_-0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz');
        $name = self::CONFORMANT_XML === $this->mode ? $name : strtolower($name);
        $attributes = array();
        $selfClose = false;

        // Handle attribute parse exceptions here so that we can
        // react by trying to build a sensible parse tree.
        try {
            do {
                $this->scanner->whitespace();
                $this->attribute($attributes);
            } while (!$this->isTagEnd($selfClose));
        } catch (ParseError $e) {
            $selfClose = false;
        }

        $mode = $this->events->startTag($name, $attributes, $selfClose);

        if (is_int($mode)) {
            $this->setTextMode($mode, $name);
        }

        $this->scanner->consume();

        return true;
    }

    /**
     * Check if the scanner has reached the end of a tag.
     */
    protected function isTagEnd(&$selfClose)
    {
        $tok = $this->scanner->current();
        if ('/' == $tok) {
            $this->scanner->consume();
            $this->scanner->whitespace();
            $tok = $this->scanner->current();

            if ('>' == $tok) {
                $selfClose = true;

                return true;
            }
            if (false === $tok) {
                $this->parseError('Unexpected EOF inside of tag.');

                return true;
            }
            // Basically, we skip the / token and go on.
            // See 8.2.4.43.
            $this->parseError("Unexpected '%s' inside of a tag.", $tok);

            return false;
        }

        if ('>' == $tok) {
            return true;
        }
        if (false === $tok) {
            $this->parseError('Unexpected EOF inside of tag.');

            return true;
        }

        return false;
    }

    /**
     * Parse attributes from inside of a tag.
     *
     * @param string[] $attributes
     *
     * @return bool
     *
     * @throws ParseError
     */
    protected function attribute(&$attributes)
    {
        $tok = $this->scanner->current();
        if ('/' == $tok || '>' == $tok || false === $tok) {
            return false;
        }

        if ('<' == $tok) {
            $this->parseError("Unexpected '<' inside of attributes list.");
            // Push the < back onto the stack.
            $this->scanner->unconsume();
            // Let the caller figure out how to handle this.
            throw new ParseError('Start tag inside of attribute.');
        }

        $name = strtolower($this->scanner->charsUntil("/>=\n\f\t "));

        if (0 == strlen($name)) {
            $tok = $this->scanner->current();
            $this->parseError('Expected an attribute name, got %s.', $tok);
            // Really, only '=' can be the char here. Everything else gets absorbed
            // under one rule or another.
            $name = $tok;
            $this->scanner->consume();
        }

        $isValidAttribute = true;
        // Attribute names can contain most Unicode characters for HTML5.
        // But method "DOMElement::setAttribute" is throwing exception
        // because of it's own internal restriction so these have to be filtered.
        // see issue #23: https://github.com/Masterminds/html5-php/issues/23
        // and http://www.w3.org/TR/2011/WD-html5-20110525/syntax.html#syntax-attribute-name
        if (preg_match("/[\x1-\x2C\\/\x3B-\x40\x5B-\x5E\x60\x7B-\x7F]/u", $name)) {
            $this->parseError('Unexpected characters in attribute name: %s', $name);
            $isValidAttribute = false;
        }         // There is no limitation for 1st character in HTML5.
        // But method "DOMElement::setAttribute" is throwing exception for the
        // characters below so they have to be filtered.
        // see issue #23: https://github.com/Masterminds/html5-php/issues/23
        // and http://www.w3.org/TR/2011/WD-html5-20110525/syntax.html#syntax-attribute-name
        elseif (preg_match('/^[0-9.-]/u', $name)) {
            $this->parseError('Unexpected character at the begining of attribute name: %s', $name);
            $isValidAttribute = false;
        }
        // 8.1.2.3
        $this->scanner->whitespace();

        $val = $this->attributeValue();
        if ($isValidAttribute && !array_key_exists($name, $attributes)) {
            $attributes[$name] = $val;
        }

        return true;
    }

    /**
     * Consume an attribute value. See section 8.2.4.37 and after.
     *
     * @return string|null
     */
    protected function attributeValue()
    {
        if ('=' != $this->scanner->current()) {
            return null;
        }
        $this->scanner->consume();
        // 8.1.2.3
        $this->scanner->whitespace();

        $tok = $this->scanner->current();
        switch ($tok) {
            case "\n":
            case "\f":
            case ' ':
            case "\t":
                // Whitespace here indicates an empty value.
                return null;
            case '"':
            case "'":
                $this->scanner->consume();

                return $this->quotedAttributeValue($tok);
            case '>':
                // case '/': // 8.2.4.37 seems to allow foo=/ as a valid attr.
                $this->parseError('Expected attribute value, got tag end.');

                return null;
            case '=':
            case '`':
                $this->parseError('Expecting quotes, got %s.', $tok);

                return $this->unquotedAttributeValue();
            default:
                return $this->unquotedAttributeValue();
        }
    }

    /**
     * Get an attribute value string.
     *
     * @param string $quote IMPORTANT: This is a series of chars! Any one of which will be considered
     *                      termination of an attribute's value. E.g. "\"'" will stop at either
     *                      ' or ".
     *
     * @return string The attribute value.
     */
    protected function quotedAttributeValue($quote)
    {
        $stoplist = "\f" . $quote;
        $val = '';

        while (true) {
            $tokens = $this->scanner->charsUntil($stoplist . '&');
            if (false !== $tokens) {
                $val .= $tokens;
            } else {
                break;
            }

            $tok = $this->scanner->current();
            if ('&' == $tok) {
                $val .= $this->decodeCharacterReference(true);
                continue;
            }
            break;
        }
        $this->scanner->consume();

        return $val;
    }

    protected function unquotedAttributeValue()
    {
        $val = '';
        $tok = $this->scanner->current();
        while (false !== $tok) {
            switch ($tok) {
                case "\n":
                case "\f":
                case ' ':
                case "\t":
                case '>':
                    break 2;

                case '&':
                    $val .= $this->decodeCharacterReference(true);
                    $tok = $this->scanner->current();

                    break;

                case "'":
                case '"':
                case '<':
                case '=':
                case '`':
                    $this->parseError('Unexpected chars in unquoted attribute value %s', $tok);
                    $val .= $tok;
                    $tok = $this->scanner->next();
                    break;

                default:
                    $val .= $this->scanner->charsUntil("\t\n\f >&\"'<=`");

                    $tok = $this->scanner->current();
            }
        }

        return $val;
    }

    /**
     * Consume malformed markup as if it were a comment.
     * 8.2.4.44.
     *
     * The spec requires that the ENTIRE tag-like thing be enclosed inside of
     * the comment. So this will generate comments like:
     *
     * &lt;!--&lt/+foo&gt;--&gt;
     *
     * @param string $leading Prepend any leading characters. This essentially
     *                        negates the need to backtrack, but it's sort of a hack.
     *
     * @return bool
     */
    protected function bogusComment($leading = '')
    {
        $comment = $leading;
        $tokens = $this->scanner->charsUntil('>');
        if (false !== $tokens) {
            $comment .= $tokens;
        }
        $tok = $this->scanner->current();
        if (false !== $tok) {
            $comment .= $tok;
        }

        $this->flushBuffer();
        $this->events->comment($comment);
        $this->scanner->consume();

        return true;
    }

    /**
     * Read a comment.
     * Expects the first tok to be inside of the comment.
     *
     * @return bool
     */
    protected function comment()
    {
        $tok = $this->scanner->current();
        $comment = '';

        // <!-->. Emit an empty comment because 8.2.4.46 says to.
        if ('>' == $tok) {
            // Parse error. Emit the comment token.
            $this->parseError("Expected comment data, got '>'");
            $this->events->comment('');
            $this->scanner->consume();

            return true;
        }

        // Replace NULL with the replacement char.
        if ("\0" == $tok) {
            $tok = UTF8Utils::FFFD;
        }
        while (!$this->isCommentEnd()) {
            $comment .= $tok;
            $tok = $this->scanner->next();
        }

        $this->events->comment($comment);
        $this->scanner->consume();

        return true;
    }

    /**
     * Check if the scanner has reached the end of a comment.
     *
     * @return bool
     */
    protected function isCommentEnd()
    {
        $tok = $this->scanner->current();

        // EOF
        if (false === $tok) {
            // Hit the end.
            $this->parseError('Unexpected EOF in a comment.');

            return true;
        }

        // If next two tokens are not '--', not the end.
        if ('-' != $tok || '-' != $this->scanner->peek()) {
            return false;
        }

        $this->scanner->consume(2); // Consume '-' and one of '!' or '>'

        // Test for '>'
        if ('>' == $this->scanner->current()) {
            return true;
        }
        // Test for '!>'
        if ('!' == $this->scanner->current() && '>' == $this->scanner->peek()) {
            $this->scanner->consume(); // Consume the last '>'

            return true;
        }
        // Unread '-' and one of '!' or '>';
        $this->scanner->unconsume(2);

        return false;
    }

    /**
     * Parse a DOCTYPE.
     *
     * Parse a DOCTYPE declaration. This method has strong bearing on whether or
     * not Quirksmode is enabled on the event handler.
     *
     * @todo This method is a little long. Should probably refactor.
     *
     * @return bool
     */
    protected function doctype()
    {
        // Check that string is DOCTYPE.
        if ($this->scanner->sequenceMatches('DOCTYPE', false)) {
            $this->scanner->consume(7);
        } else {
            $chars = $this->scanner->charsWhile('DOCTYPEdoctype');
            $this->parseError('Expected DOCTYPE, got %s', $chars);

            return $this->bogusComment('<!' . $chars);
        }

        $this->scanner->whitespace();
        $tok = $this->scanner->current();

        // EOF: die.
        if (false === $tok) {
            $this->events->doctype('html5', EventHandler::DOCTYPE_NONE, '', true);
            $this->eof();

            return true;
        }

        // NULL char: convert.
        if ("\0" === $tok) {
            $this->parseError('Unexpected null character in DOCTYPE.');
        }

        $stop = " \n\f>";
        $doctypeName = $this->scanner->charsUntil($stop);
        // Lowercase ASCII, replace \0 with FFFD
        $doctypeName = strtolower(strtr($doctypeName, "\0", UTF8Utils::FFFD));

        $tok = $this->scanner->current();

        // If false, emit a parse error, DOCTYPE, and return.
        if (false === $tok) {
            $this->parseError('Unexpected EOF in DOCTYPE declaration.');
            $this->events->doctype($doctypeName, EventHandler::DOCTYPE_NONE, null, true);

            return true;
        }

        // Short DOCTYPE, like <!DOCTYPE html>
        if ('>' == $tok) {
            // DOCTYPE without a name.
            if (0 == strlen($doctypeName)) {
                $this->parseError('Expected a DOCTYPE name. Got nothing.');
                $this->events->doctype($doctypeName, 0, null, true);
                $this->scanner->consume();

                return true;
            }
            $this->events->doctype($doctypeName);
            $this->scanner->consume();

            return true;
        }
        $this->scanner->whitespace();

        $pub = strtoupper($this->scanner->getAsciiAlpha());
        $white = $this->scanner->whitespace();

        // Get ID, and flag it as pub or system.
        if (('PUBLIC' == $pub || 'SYSTEM' == $pub) && $white > 0) {
            // Get the sys ID.
            $type = 'PUBLIC' == $pub ? EventHandler::DOCTYPE_PUBLIC : EventHandler::DOCTYPE_SYSTEM;
            $id = $this->quotedString("\0>");
            if (false === $id) {
                $this->events->doctype($doctypeName, $type, $pub, false);

                return true;
            }

            // Premature EOF.
            if (false === $this->scanner->current()) {
                $this->parseError('Unexpected EOF in DOCTYPE');
                $this->events->doctype($doctypeName, $type, $id, true);

                return true;
            }

            // Well-formed complete DOCTYPE.
            $this->scanner->whitespace();
            if ('>' == $this->scanner->current()) {
                $this->events->doctype($doctypeName, $type, $id, false);
                $this->scanner->consume();

                return true;
            }

            // If we get here, we have <!DOCTYPE foo PUBLIC "bar" SOME_JUNK
            // Throw away the junk, parse error, quirks mode, return true.
            $this->scanner->charsUntil('>');
            $this->parseError('Malformed DOCTYPE.');
            $this->events->doctype($doctypeName, $type, $id, true);
            $this->scanner->consume();

            return true;
        }

        // Else it's a bogus DOCTYPE.
        // Consume to > and trash.
        $this->scanner->charsUntil('>');

        $this->parseError('Expected PUBLIC or SYSTEM. Got %s.', $pub);
        $this->events->doctype($doctypeName, 0, null, true);
        $this->scanner->consume();

        return true;
    }

    /**
     * Utility for reading a quoted string.
     *
     * @param string $stopchars Characters (in addition to a close-quote) that should stop the string.
     *                          E.g. sometimes '>' is higher precedence than '"' or "'".
     *
     * @return mixed String if one is found (quotations omitted).
     */
    protected function quotedString($stopchars)
    {
        $tok = $this->scanner->current();
        if ('"' == $tok || "'" == $tok) {
            $this->scanner->consume();
            $ret = $this->scanner->charsUntil($tok . $stopchars);
            if ($this->scanner->current() == $tok) {
                $this->scanner->consume();
            } else {
                // Parse error because no close quote.
                $this->parseError('Expected %s, got %s', $tok, $this->scanner->current());
            }

            return $ret;
        }

        return false;
    }

    /**
     * Handle a CDATA section.
     *
     * @return bool
     */
    protected function cdataSection()
    {
        $cdata = '';
        $this->scanner->consume();

        $chars = $this->scanner->charsWhile('CDAT');
        if ('CDATA' != $chars || '[' != $this->scanner->current()) {
            $this->parseError('Expected [CDATA[, got %s', $chars);

            return $this->bogusComment('<![' . $chars);
        }

        $tok = $this->scanner->next();
        do {
            if (false === $tok) {
                $this->parseError('Unexpected EOF inside CDATA.');
                $this->bogusComment('<![CDATA[' . $cdata);

                return true;
            }
            $cdata .= $tok;
            $tok = $this->scanner->next();
        } while (!$this->scanner->sequenceMatches(']]>'));

        // Consume ]]>
        $this->scanner->consume(3);

        $this->events->cdata($cdata);

        return true;
    }

    // ================================================================
    // Non-HTML5
    // ================================================================

    /**
     * Handle a processing instruction.
     *
     * XML processing instructions are supposed to be ignored in HTML5,
     * treated as "bogus comments". However, since we're not a user
     * agent, we allow them. We consume until ?> and then issue a
     * EventListener::processingInstruction() event.
     *
     * @return bool
     */
    protected function processingInstruction()
    {
        if ('?' != $this->scanner->current()) {
            return false;
        }

        $tok = $this->scanner->next();
        $procName = $this->scanner->getAsciiAlpha();
        $white = $this->scanner->whitespace();

        // If not a PI, send to bogusComment.
        if (0 == strlen($procName) || 0 == $white || false == $this->scanner->current()) {
            $this->parseError("Expected processing instruction name, got $tok");
            $this->bogusComment('<?' . $tok . $procName);

            return true;
        }

        $data = '';
        // As long as it's not the case that the next two chars are ? and >.
        while (!('?' == $this->scanner->current() && '>' == $this->scanner->peek())) {
            $data .= $this->scanner->current();

            $tok = $this->scanner->next();
            if (false === $tok) {
                $this->parseError('Unexpected EOF in processing instruction.');
                $this->events->processingInstruction($procName, $data);

                return true;
            }
        }

        $this->scanner->consume(2); // Consume the closing tag
        $this->events->processingInstruction($procName, $data);

        return true;
    }

    // ================================================================
    // UTILITY FUNCTIONS
    // ================================================================

    /**
     * Read from the input stream until we get to the desired sequene
     * or hit the end of the input stream.
     *
     * @param string $sequence
     *
     * @return string
     */
    protected function readUntilSequence($sequence)
    {
        $buffer = '';

        // Optimization for reading larger blocks faster.
        $first = substr($sequence, 0, 1);
        while (false !== $this->scanner->current()) {
            $buffer .= $this->scanner->charsUntil($first);

            // Stop as soon as we hit the stopping condition.
            if ($this->scanner->sequenceMatches($sequence, false)) {
                return $buffer;
            }
            $buffer .= $this->scanner->current();
            $this->scanner->consume();
        }

        // If we get here, we hit the EOF.
        $this->parseError('Unexpected EOF during text read.');

        return $buffer;
    }

    /**
     * Check if upcomming chars match the given sequence.
     *
     * This will read the stream for the $sequence. If it's
     * found, this will return true. If not, return false.
     * Since this unconsumes any chars it reads, the caller
     * will still need to read the next sequence, even if
     * this returns true.
     *
     * Example: $this->scanner->sequenceMatches('</script>') will
     * see if the input stream is at the start of a
     * '</script>' string.
     *
     * @param string $sequence
     * @param bool   $caseSensitive
     *
     * @return bool
     */
    protected function sequenceMatches($sequence, $caseSensitive = true)
    {
        @trigger_error(__METHOD__ . ' method is deprecated since version 2.4 and will be removed in 3.0. Use Scanner::sequenceMatches() instead.', E_USER_DEPRECATED);

        return $this->scanner->sequenceMatches($sequence, $caseSensitive);
    }

    /**
     * Send a TEXT event with the contents of the text buffer.
     *
     * This emits an EventHandler::text() event with the current contents of the
     * temporary text buffer. (The buffer is used to group as much PCDATA
     * as we can instead of emitting lots and lots of TEXT events.)
     */
    protected function flushBuffer()
    {
        if ('' === $this->text) {
            return;
        }
        $this->events->text($this->text);
        $this->text = '';
    }

    /**
     * Add text to the temporary buffer.
     *
     * @see flushBuffer()
     *
     * @param string $str
     */
    protected function buffer($str)
    {
        $this->text .= $str;
    }

    /**
     * Emit a parse error.
     *
     * A parse error always returns false because it never consumes any
     * characters.
     *
     * @param string $msg
     *
     * @return string
     */
    protected function parseError($msg)
    {
        $args = func_get_args();

        if (count($args) > 1) {
            array_shift($args);
            $msg = vsprintf($msg, $args);
        }

        $line = $this->scanner->currentLine();
        $col = $this->scanner->columnOffset();
        $this->events->parseError($msg, $line, $col);

        return false;
    }

    /**
     * Decode a character reference and return the string.
     *
     * If $inAttribute is set to true, a bare & will be returned as-is.
     *
     * @param bool $inAttribute Set to true if the text is inside of an attribute value.
     *                          false otherwise.
     *
     * @return string
     */
    protected function decodeCharacterReference($inAttribute = false)
    {
        // Next char after &.
        $tok = $this->scanner->next();
        $start = $this->scanner->position();

        if (false === $tok) {
            return '&';
        }

        // These indicate not an entity. We return just
        // the &.
        if ("\t" === $tok || "\n" === $tok || "\f" === $tok || ' ' === $tok || '&' === $tok || '<' === $tok) {
            // $this->scanner->next();
            return '&';
        }

        // Numeric entity
        if ('#' === $tok) {
            $tok = $this->scanner->next();

            if (false === $tok) {
                $this->parseError('Expected &#DEC; &#HEX;, got EOF');
                $this->scanner->unconsume(1);

                return '&';
            }

            // Hexadecimal encoding.
            // X[0-9a-fA-F]+;
            // x[0-9a-fA-F]+;
            if ('x' === $tok || 'X' === $tok) {
                $tok = $this->scanner->next(); // Consume x

                // Convert from hex code to char.
                $hex = $this->scanner->getHex();
                if (empty($hex)) {
                    $this->parseError('Expected &#xHEX;, got &#x%s', $tok);
                    // We unconsume because we don't know what parser rules might
                    // be in effect for the remaining chars. For example. '&#>'
                    // might result in a specific parsing rule inside of tag
                    // contexts, while not inside of pcdata context.
                    $this->scanner->unconsume(2);

                    return '&';
                }
                $entity = CharacterReference::lookupHex($hex);
            }             // Decimal encoding.
            // [0-9]+;
            else {
                // Convert from decimal to char.
                $numeric = $this->scanner->getNumeric();
                if (false === $numeric) {
                    $this->parseError('Expected &#DIGITS;, got &#%s', $tok);
                    $this->scanner->unconsume(2);

                    return '&';
                }
                $entity = CharacterReference::lookupDecimal($numeric);
            }
        } elseif ('=' === $tok && $inAttribute) {
            return '&';
        } else { // String entity.
            // Attempt to consume a string up to a ';'.
            // [a-zA-Z0-9]+;
            $cname = $this->scanner->getAsciiAlphaNum();
            $entity = CharacterReference::lookupName($cname);

            // When no entity is found provide the name of the unmatched string
            // and continue on as the & is not part of an entity. The & will
            // be converted to &amp; elsewhere.
            if (null === $entity) {
                if (!$inAttribute || '' === $cname) {
                    $this->parseError("No match in entity table for '%s'", $cname);
                }
                $this->scanner->unconsume($this->scanner->position() - $start);

                return '&';
            }
        }

        // The scanner has advanced the cursor for us.
        $tok = $this->scanner->current();

        // We have an entity. We're done here.
        if (';' === $tok) {
            $this->scanner->consume();

            return $entity;
        }

        // Failing to match ; means unconsume the entire string.
        $this->scanner->unconsume($this->scanner->position() - $start);

        $this->parseError('Expected &ENTITY;, got &ENTITY%s (no trailing ;) ', $tok);

        return '&';
    }

    /**
     * Checks whether a (single-byte) character is an ASCII letter or not.
     *
     * @param string $input A single-byte string
     *
     * @return bool True if it is a letter, False otherwise
     */
    protected function is_alpha($input)
    {
        $code = ord($input);

        return ($code >= 97 && $code <= 122) || ($code >= 65 && $code <= 90);
    }
}
<?php

namespace Masterminds\HTML5\Parser;

/**
 * Handles special-case rules for the DOM tree builder.
 *
 * Many tags have special rules that need to be accomodated on an
 * individual basis. This class handles those rules.
 *
 * See section 8.1.2.4 of the spec.
 *
 * @todo - colgroup and col special behaviors
 *       - body and head special behaviors
 */
class TreeBuildingRules
{
    protected static $tags = array(
        'li' => 1,
        'dd' => 1,
        'dt' => 1,
        'rt' => 1,
        'rp' => 1,
        'tr' => 1,
        'th' => 1,
        'td' => 1,
        'thead' => 1,
        'tfoot' => 1,
        'tbody' => 1,
        'table' => 1,
        'optgroup' => 1,
        'option' => 1,
    );

    /**
     * Returns true if the given tagname has special processing rules.
     */
    public function hasRules($tagname)
    {
        return isset(static::$tags[$tagname]);
    }

    /**
     * Evaluate the rule for the current tag name.
     *
     * This may modify the existing DOM.
     *
     * @return \DOMElement The new Current DOM element.
     */
    public function evaluate($new, $current)
    {
        switch ($new->tagName) {
            case 'li':
                return $this->handleLI($new, $current);
            case 'dt':
            case 'dd':
                return $this->handleDT($new, $current);
            case 'rt':
            case 'rp':
                return $this->handleRT($new, $current);
            case 'optgroup':
                return $this->closeIfCurrentMatches($new, $current, array(
                    'optgroup',
                ));
            case 'option':
                return $this->closeIfCurrentMatches($new, $current, array(
                    'option',
                ));
            case 'tr':
                return $this->closeIfCurrentMatches($new, $current, array(
                    'tr',
                ));
            case 'td':
            case 'th':
                return $this->closeIfCurrentMatches($new, $current, array(
                    'th',
                    'td',
                ));
            case 'tbody':
            case 'thead':
            case 'tfoot':
            case 'table': // Spec isn't explicit about this, but it's necessary.
                return $this->closeIfCurrentMatches($new, $current, array(
                    'thead',
                    'tfoot',
                    'tbody',
                ));
        }

        return $current;
    }

    protected function handleLI($ele, $current)
    {
        return $this->closeIfCurrentMatches($ele, $current, array(
            'li',
        ));
    }

    protected function handleDT($ele, $current)
    {
        return $this->closeIfCurrentMatches($ele, $current, array(
            'dt',
            'dd',
        ));
    }

    protected function handleRT($ele, $current)
    {
        return $this->closeIfCurrentMatches($ele, $current, array(
            'rt',
            'rp',
        ));
    }

    protected function closeIfCurrentMatches($ele, $current, $match)
    {
        if (in_array($current->tagName, $match, true)) {
            $current->parentNode->appendChild($ele);
        } else {
            $current->appendChild($ele);
        }

        return $ele;
    }
}
<?php

namespace Masterminds\HTML5\Parser;

/*
Portions based on code from html5lib files with the following copyright:

Copyright 2009 Geoffrey Sneddon <http://gsnedders.com/>

Permission is hereby granted, free of charge, to any person obtaining a
copy of this software and associated documentation files (the
    "Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:

The above copyright notice and this permission notice shall be included
in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/

use Masterminds\HTML5\Exception;

class UTF8Utils
{
    /**
     * The Unicode replacement character.
     */
    const FFFD = "\xEF\xBF\xBD";

    /**
     * Count the number of characters in a string.
     * UTF-8 aware. This will try (in order) iconv, MB, and finally a custom counter.
     *
     * @param string $string
     *
     * @return int
     */
    public static function countChars($string)
    {
        // Get the length for the string we need.
        if (function_exists('mb_strlen')) {
            return mb_strlen($string, 'utf-8');
        }

        if (function_exists('iconv_strlen')) {
            return iconv_strlen($string, 'utf-8');
        }

        $count = count_chars($string);

        // 0x80 = 0x7F - 0 + 1 (one added to get inclusive range)
        // 0x33 = 0xF4 - 0x2C + 1 (one added to get inclusive range)
        return array_sum(array_slice($count, 0, 0x80)) + array_sum(array_slice($count, 0xC2, 0x33));
    }

    /**
     * Convert data from the given encoding to UTF-8.
     *
     * This has not yet been tested with charactersets other than UTF-8.
     * It should work with ISO-8859-1/-13 and standard Latin Win charsets.
     *
     * @param string $data     The data to convert
     * @param string $encoding A valid encoding. Examples: http://www.php.net/manual/en/mbstring.supported-encodings.php
     *
     * @return string
     */
    public static function convertToUTF8($data, $encoding = 'UTF-8')
    {
        /*
         * From the HTML5 spec: Given an encoding, the bytes in the input stream must be converted
         * to Unicode characters for the tokeniser, as described by the rules for that encoding,
         * except that the leading U+FEFF BYTE ORDER MARK character, if any, must not be stripped
         * by the encoding layer (it is stripped by the rule below). Bytes or sequences of bytes
         * in the original byte stream that could not be converted to Unicode characters must be
         * converted to U+FFFD REPLACEMENT CHARACTER code points.
         */

        // mb_convert_encoding is chosen over iconv because of a bug. The best
        // details for the bug are on http://us1.php.net/manual/en/function.iconv.php#108643
        // which contains links to the actual but reports as well as work around
        // details.
        if (function_exists('mb_convert_encoding')) {
            // mb library has the following behaviors:
            // - UTF-16 surrogates result in false.
            // - Overlongs and outside Plane 16 result in empty strings.

            // Before we run mb_convert_encoding we need to tell it what to do with
            // characters it does not know. This could be different than the parent
            // application executing this library so we store the value, change it
            // to our needs, and then change it back when we are done. This feels
            // a little excessive and it would be great if there was a better way.
            $save = mb_substitute_character();
            mb_substitute_character('none');
            $data = mb_convert_encoding($data, 'UTF-8', $encoding);
            mb_substitute_character($save);
        }
        // @todo Get iconv running in at least some environments if that is possible.
        elseif (function_exists('iconv') && 'auto' !== $encoding) {
            // fprintf(STDOUT, "iconv found\n");
            // iconv has the following behaviors:
            // - Overlong representations are ignored.
            // - Beyond Plane 16 is replaced with a lower char.
            // - Incomplete sequences generate a warning.
            $data = @iconv($encoding, 'UTF-8//IGNORE', $data);
        } else {
            throw new Exception('Not implemented, please install mbstring or iconv');
        }

        /*
         * One leading U+FEFF BYTE ORDER MARK character must be ignored if any are present.
         */
        if ("\xEF\xBB\xBF" === substr($data, 0, 3)) {
            $data = substr($data, 3);
        }

        return $data;
    }

    /**
     * Checks for Unicode code points that are not valid in a document.
     *
     * @param string $data A string to analyze
     *
     * @return array An array of (string) error messages produced by the scanning
     */
    public static function checkForIllegalCodepoints($data)
    {
        // Vestigal error handling.
        $errors = array();

        /*
         * All U+0000 null characters in the input must be replaced by U+FFFD REPLACEMENT CHARACTERs.
         * Any occurrences of such characters is a parse error.
         */
        for ($i = 0, $count = substr_count($data, "\0"); $i < $count; ++$i) {
            $errors[] = 'null-character';
        }

        /*
         * Any occurrences of any characters in the ranges U+0001 to U+0008, U+000B, U+000E to U+001F, U+007F
         * to U+009F, U+D800 to U+DFFF , U+FDD0 to U+FDEF, and characters U+FFFE, U+FFFF, U+1FFFE, U+1FFFF,
         * U+2FFFE, U+2FFFF, U+3FFFE, U+3FFFF, U+4FFFE, U+4FFFF, U+5FFFE, U+5FFFF, U+6FFFE, U+6FFFF, U+7FFFE,
         * U+7FFFF, U+8FFFE, U+8FFFF, U+9FFFE, U+9FFFF, U+AFFFE, U+AFFFF, U+BFFFE, U+BFFFF, U+CFFFE, U+CFFFF,
         * U+DFFFE, U+DFFFF, U+EFFFE, U+EFFFF, U+FFFFE, U+FFFFF, U+10FFFE, and U+10FFFF are parse errors.
         * (These are all control characters or permanently undefined Unicode characters.)
         */
        // Check PCRE is loaded.
        $count = preg_match_all(
            '/(?:
        [\x01-\x08\x0B\x0E-\x1F\x7F] # U+0001 to U+0008, U+000B,  U+000E to U+001F and U+007F
      |
        \xC2[\x80-\x9F] # U+0080 to U+009F
      |
        \xED(?:\xA0[\x80-\xFF]|[\xA1-\xBE][\x00-\xFF]|\xBF[\x00-\xBF]) # U+D800 to U+DFFFF
      |
        \xEF\xB7[\x90-\xAF] # U+FDD0 to U+FDEF
      |
        \xEF\xBF[\xBE\xBF] # U+FFFE and U+FFFF
      |
        [\xF0-\xF4][\x8F-\xBF]\xBF[\xBE\xBF] # U+nFFFE and U+nFFFF (1 <= n <= 10_{16})
      )/x', $data, $matches);
        for ($i = 0; $i < $count; ++$i) {
            $errors[] = 'invalid-codepoint';
        }

        return $errors;
    }
}
<?php
/**
 * @file
 * This contains HTML5 entities to use with serializing.
 *
 * The list here is mildly different from the list at Entities because
 * that list was generated from the w3c. It contains some entities that are
 * not entirely proper such as &am; which maps to &. This list is meant to be
 * a fallback for PHP versions prior to PHP 5.4 when dealing with encoding.
 */

namespace Masterminds\HTML5\Serializer;

/**
 * A mapping of entities to their html5 representation.
 * Used for older PHP
 * versions that don't have the mapping.
 */
class HTML5Entities
{
    public static $map = array(
        '	' => '&Tab;',
        "\n" => '&NewLine;',
        '!' => '&excl;',
        '"' => '&quot;',
        '#' => '&num;',
        '$' => '&dollar;',
        '%' => '&percnt;',
        '&' => '&amp;',
        '\'' => '&apos;',
        '(' => '&lpar;',
        ')' => '&rpar;',
        '*' => '&ast;',
        '+' => '&plus;',
        ',' => '&comma;',
        '.' => '&period;',
        '/' => '&sol;',
        ':' => '&colon;',
        ';' => '&semi;',
        '<' => '&lt;',
        '<⃒' => '&nvlt',
        '=' => '&equals;',
        '=⃥' => '&bne',
        '>' => '&gt;',
        '>⃒' => '&nvgt',
        '?' => '&quest;',
        '@' => '&commat;',
        '[' => '&lbrack;',
        '\\' => '&bsol;',
        ']' => '&rsqb;',
        '^' => '&Hat;',
        '_' => '&lowbar;',
        '`' => '&grave;',
        'fj' => '&fjlig',
        '{' => '&lbrace;',
        '|' => '&vert;',
        '}' => '&rcub;',
        ' ' => '&nbsp;',
        '¡' => '&iexcl;',
        '¢' => '&cent;',
        '£' => '&pound;',
        '¤' => '&curren;',
        '¥' => '&yen;',
        '¦' => '&brvbar;',
        '§' => '&sect;',
        '¨' => '&DoubleDot;',
        '©' => '&copy;',
        'ª' => '&ordf;',
        '«' => '&laquo;',
        '¬' => '&not;',
        '­' => '&shy;',
        '®' => '&reg;',
        '¯' => '&macr;',
        '°' => '&deg;',
        '±' => '&plusmn;',
        '²' => '&sup2;',
        '³' => '&sup3;',
        '´' => '&DiacriticalAcute;',
        'µ' => '&micro;',
        '¶' => '&para;',
        '·' => '&CenterDot;',
        '¸' => '&Cedilla;',
        '¹' => '&sup1;',
        'º' => '&ordm;',
        '»' => '&raquo;',
        '¼' => '&frac14;',
        '½' => '&half;',
        '¾' => '&frac34;',
        '¿' => '&iquest;',
        'À' => '&Agrave;',
        'Á' => '&Aacute;',
        'Â' => '&Acirc;',
        'Ã' => '&Atilde;',
        'Ä' => '&Auml;',
        'Å' => '&Aring;',
        'Æ' => '&AElig;',
        'Ç' => '&Ccedil;',
        'È' => '&Egrave;',
        'É' => '&Eacute;',
        'Ê' => '&Ecirc;',
        'Ë' => '&Euml;',
        'Ì' => '&Igrave;',
        'Í' => '&Iacute;',
        'Î' => '&Icirc;',
        'Ï' => '&Iuml;',
        'Ð' => '&ETH;',
        'Ñ' => '&Ntilde;',
        'Ò' => '&Ograve;',
        'Ó' => '&Oacute;',
        'Ô' => '&Ocirc;',
        'Õ' => '&Otilde;',
        'Ö' => '&Ouml;',
        '×' => '&times;',
        'Ø' => '&Oslash;',
        'Ù' => '&Ugrave;',
        'Ú' => '&Uacute;',
        'Û' => '&Ucirc;',
        'Ü' => '&Uuml;',
        'Ý' => '&Yacute;',
        'Þ' => '&THORN;',
        'ß' => '&szlig;',
        'à' => '&agrave;',
        'á' => '&aacute;',
        'â' => '&acirc;',
        'ã' => '&atilde;',
        'ä' => '&auml;',
        'å' => '&aring;',
        'æ' => '&aelig;',
        'ç' => '&ccedil;',
        'è' => '&egrave;',
        'é' => '&eacute;',
        'ê' => '&ecirc;',
        'ë' => '&euml;',
        'ì' => '&igrave;',
        'í' => '&iacute;',
        'î' => '&icirc;',
        'ï' => '&iuml;',
        'ð' => '&eth;',
        'ñ' => '&ntilde;',
        'ò' => '&ograve;',
        'ó' => '&oacute;',
        'ô' => '&ocirc;',
        'õ' => '&otilde;',
        'ö' => '&ouml;',
        '÷' => '&divide;',
        'ø' => '&oslash;',
        'ù' => '&ugrave;',
        'ú' => '&uacute;',
        'û' => '&ucirc;',
        'ü' => '&uuml;',
        'ý' => '&yacute;',
        'þ' => '&thorn;',
        'ÿ' => '&yuml;',
        'Ā' => '&Amacr;',
        'ā' => '&amacr;',
        'Ă' => '&Abreve;',
        'ă' => '&abreve;',
        'Ą' => '&Aogon;',
        'ą' => '&aogon;',
        'Ć' => '&Cacute;',
        'ć' => '&cacute;',
        'Ĉ' => '&Ccirc;',
        'ĉ' => '&ccirc;',
        'Ċ' => '&Cdot;',
        'ċ' => '&cdot;',
        'Č' => '&Ccaron;',
        'č' => '&ccaron;',
        'Ď' => '&Dcaron;',
        'ď' => '&dcaron;',
        'Đ' => '&Dstrok;',
        'đ' => '&dstrok;',
        'Ē' => '&Emacr;',
        'ē' => '&emacr;',
        'Ė' => '&Edot;',
        'ė' => '&edot;',
        'Ę' => '&Eogon;',
        'ę' => '&eogon;',
        'Ě' => '&Ecaron;',
        'ě' => '&ecaron;',
        'Ĝ' => '&Gcirc;',
        'ĝ' => '&gcirc;',
        'Ğ' => '&Gbreve;',
        'ğ' => '&gbreve;',
        'Ġ' => '&Gdot;',
        'ġ' => '&gdot;',
        'Ģ' => '&Gcedil;',
        'Ĥ' => '&Hcirc;',
        'ĥ' => '&hcirc;',
        'Ħ' => '&Hstrok;',
        'ħ' => '&hstrok;',
        'Ĩ' => '&Itilde;',
        'ĩ' => '&itilde;',
        'Ī' => '&Imacr;',
        'ī' => '&imacr;',
        'Į' => '&Iogon;',
        'į' => '&iogon;',
        'İ' => '&Idot;',
        'ı' => '&inodot;',
        'Ĳ' => '&IJlig;',
        'ĳ' => '&ijlig;',
        'Ĵ' => '&Jcirc;',
        'ĵ' => '&jcirc;',
        'Ķ' => '&Kcedil;',
        'ķ' => '&kcedil;',
        'ĸ' => '&kgreen;',
        'Ĺ' => '&Lacute;',
        'ĺ' => '&lacute;',
        'Ļ' => '&Lcedil;',
        'ļ' => '&lcedil;',
        'Ľ' => '&Lcaron;',
        'ľ' => '&lcaron;',
        'Ŀ' => '&Lmidot;',
        'ŀ' => '&lmidot;',
        'Ł' => '&Lstrok;',
        'ł' => '&lstrok;',
        'Ń' => '&Nacute;',
        'ń' => '&nacute;',
        'Ņ' => '&Ncedil;',
        'ņ' => '&ncedil;',
        'Ň' => '&Ncaron;',
        'ň' => '&ncaron;',
        'ŉ' => '&napos;',
        'Ŋ' => '&ENG;',
        'ŋ' => '&eng;',
        'Ō' => '&Omacr;',
        'ō' => '&omacr;',
        'Ő' => '&Odblac;',
        'ő' => '&odblac;',
        'Œ' => '&OElig;',
        'œ' => '&oelig;',
        'Ŕ' => '&Racute;',
        'ŕ' => '&racute;',
        'Ŗ' => '&Rcedil;',
        'ŗ' => '&rcedil;',
        'Ř' => '&Rcaron;',
        'ř' => '&rcaron;',
        'Ś' => '&Sacute;',
        'ś' => '&sacute;',
        'Ŝ' => '&Scirc;',
        'ŝ' => '&scirc;',
        'Ş' => '&Scedil;',
        'ş' => '&scedil;',
        'Š' => '&Scaron;',
        'š' => '&scaron;',
        'Ţ' => '&Tcedil;',
        'ţ' => '&tcedil;',
        'Ť' => '&Tcaron;',
        'ť' => '&tcaron;',
        'Ŧ' => '&Tstrok;',
        'ŧ' => '&tstrok;',
        'Ũ' => '&Utilde;',
        'ũ' => '&utilde;',
        'Ū' => '&Umacr;',
        'ū' => '&umacr;',
        'Ŭ' => '&Ubreve;',
        'ŭ' => '&ubreve;',
        'Ů' => '&Uring;',
        'ů' => '&uring;',
        'Ű' => '&Udblac;',
        'ű' => '&udblac;',
        'Ų' => '&Uogon;',
        'ų' => '&uogon;',
        'Ŵ' => '&Wcirc;',
        'ŵ' => '&wcirc;',
        'Ŷ' => '&Ycirc;',
        'ŷ' => '&ycirc;',
        'Ÿ' => '&Yuml;',
        'Ź' => '&Zacute;',
        'ź' => '&zacute;',
        'Ż' => '&Zdot;',
        'ż' => '&zdot;',
        'Ž' => '&Zcaron;',
        'ž' => '&zcaron;',
        'ƒ' => '&fnof;',
        'Ƶ' => '&imped;',
        'ǵ' => '&gacute;',
        'ȷ' => '&jmath;',
        'ˆ' => '&circ;',
        'ˇ' => '&Hacek;',
        '˘' => '&Breve;',
        '˙' => '&dot;',
        '˚' => '&ring;',
        '˛' => '&ogon;',
        '˜' => '&DiacriticalTilde;',
        '˝' => '&DiacriticalDoubleAcute;',
        '̑' => '&DownBreve;',
        'Α' => '&Alpha;',
        'Β' => '&Beta;',
        'Γ' => '&Gamma;',
        'Δ' => '&Delta;',
        'Ε' => '&Epsilon;',
        'Ζ' => '&Zeta;',
        'Η' => '&Eta;',
        'Θ' => '&Theta;',
        'Ι' => '&Iota;',
        'Κ' => '&Kappa;',
        'Λ' => '&Lambda;',
        'Μ' => '&Mu;',
        'Ν' => '&Nu;',
        'Ξ' => '&Xi;',
        'Ο' => '&Omicron;',
        'Π' => '&Pi;',
        'Ρ' => '&Rho;',
        'Σ' => '&Sigma;',
        'Τ' => '&Tau;',
        'Υ' => '&Upsilon;',
        'Φ' => '&Phi;',
        'Χ' => '&Chi;',
        'Ψ' => '&Psi;',
        'Ω' => '&Omega;',
        'α' => '&alpha;',
        'β' => '&beta;',
        'γ' => '&gamma;',
        'δ' => '&delta;',
        'ε' => '&epsi;',
        'ζ' => '&zeta;',
        'η' => '&eta;',
        'θ' => '&theta;',
        'ι' => '&iota;',
        'κ' => '&kappa;',
        'λ' => '&lambda;',
        'μ' => '&mu;',
        'ν' => '&nu;',
        'ξ' => '&xi;',
        'ο' => '&omicron;',
        'π' => '&pi;',
        'ρ' => '&rho;',
        'ς' => '&sigmav;',
        'σ' => '&sigma;',
        'τ' => '&tau;',
        'υ' => '&upsi;',
        'φ' => '&phi;',
        'χ' => '&chi;',
        'ψ' => '&psi;',
        'ω' => '&omega;',
        'ϑ' => '&thetasym;',
        'ϒ' => '&upsih;',
        'ϕ' => '&straightphi;',
        'ϖ' => '&piv;',
        'Ϝ' => '&Gammad;',
        'ϝ' => '&gammad;',
        'ϰ' => '&varkappa;',
        'ϱ' => '&rhov;',
        'ϵ' => '&straightepsilon;',
        '϶' => '&backepsilon;',
        'Ё' => '&IOcy;',
        'Ђ' => '&DJcy;',
        'Ѓ' => '&GJcy;',
        'Є' => '&Jukcy;',
        'Ѕ' => '&DScy;',
        'І' => '&Iukcy;',
        'Ї' => '&YIcy;',
        'Ј' => '&Jsercy;',
        'Љ' => '&LJcy;',
        'Њ' => '&NJcy;',
        'Ћ' => '&TSHcy;',
        'Ќ' => '&KJcy;',
        'Ў' => '&Ubrcy;',
        'Џ' => '&DZcy;',
        'А' => '&Acy;',
        'Б' => '&Bcy;',
        'В' => '&Vcy;',
        'Г' => '&Gcy;',
        'Д' => '&Dcy;',
        'Е' => '&IEcy;',
        'Ж' => '&ZHcy;',
        'З' => '&Zcy;',
        'И' => '&Icy;',
        'Й' => '&Jcy;',
        'К' => '&Kcy;',
        'Л' => '&Lcy;',
        'М' => '&Mcy;',
        'Н' => '&Ncy;',
        'О' => '&Ocy;',
        'П' => '&Pcy;',
        'Р' => '&Rcy;',
        'С' => '&Scy;',
        'Т' => '&Tcy;',
        'У' => '&Ucy;',
        'Ф' => '&Fcy;',
        'Х' => '&KHcy;',
        'Ц' => '&TScy;',
        'Ч' => '&CHcy;',
        'Ш' => '&SHcy;',
        'Щ' => '&SHCHcy;',
        'Ъ' => '&HARDcy;',
        'Ы' => '&Ycy;',
        'Ь' => '&SOFTcy;',
        'Э' => '&Ecy;',
        'Ю' => '&YUcy;',
        'Я' => '&YAcy;',
        'а' => '&acy;',
        'б' => '&bcy;',
        'в' => '&vcy;',
        'г' => '&gcy;',
        'д' => '&dcy;',
        'е' => '&iecy;',
        'ж' => '&zhcy;',
        'з' => '&zcy;',
        'и' => '&icy;',
        'й' => '&jcy;',
        'к' => '&kcy;',
        'л' => '&lcy;',
        'м' => '&mcy;',
        'н' => '&ncy;',
        'о' => '&ocy;',
        'п' => '&pcy;',
        'р' => '&rcy;',
        'с' => '&scy;',
        'т' => '&tcy;',
        'у' => '&ucy;',
        'ф' => '&fcy;',
        'х' => '&khcy;',
        'ц' => '&tscy;',
        'ч' => '&chcy;',
        'ш' => '&shcy;',
        'щ' => '&shchcy;',
        'ъ' => '&hardcy;',
        'ы' => '&ycy;',
        'ь' => '&softcy;',
        'э' => '&ecy;',
        'ю' => '&yucy;',
        'я' => '&yacy;',
        'ё' => '&iocy;',
        'ђ' => '&djcy;',
        'ѓ' => '&gjcy;',
        'є' => '&jukcy;',
        'ѕ' => '&dscy;',
        'і' => '&iukcy;',
        'ї' => '&yicy;',
        'ј' => '&jsercy;',
        'љ' => '&ljcy;',
        'њ' => '&njcy;',
        'ћ' => '&tshcy;',
        'ќ' => '&kjcy;',
        'ў' => '&ubrcy;',
        'џ' => '&dzcy;',
        ' ' => '&ensp;',
        ' ' => '&emsp;',
        ' ' => '&emsp13;',
        ' ' => '&emsp14;',
        ' ' => '&numsp;',
        ' ' => '&puncsp;',
        ' ' => '&ThinSpace;',
        ' ' => '&hairsp;',
        '​' => '&ZeroWidthSpace;',
        '‌' => '&zwnj;',
        '‍' => '&zwj;',
        '‎' => '&lrm;',
        '‏' => '&rlm;',
        '‐' => '&hyphen;',
        '–' => '&ndash;',
        '—' => '&mdash;',
        '―' => '&horbar;',
        '‖' => '&Verbar;',
        '‘' => '&OpenCurlyQuote;',
        '’' => '&rsquo;',
        '‚' => '&sbquo;',
        '“' => '&OpenCurlyDoubleQuote;',
        '”' => '&rdquo;',
        '„' => '&bdquo;',
        '†' => '&dagger;',
        '‡' => '&Dagger;',
        '•' => '&bull;',
        '‥' => '&nldr;',
        '…' => '&hellip;',
        '‰' => '&permil;',
        '‱' => '&pertenk;',
        '′' => '&prime;',
        '″' => '&Prime;',
        '‴' => '&tprime;',
        '‵' => '&backprime;',
        '‹' => '&lsaquo;',
        '›' => '&rsaquo;',
        '‾' => '&oline;',
        '⁁' => '&caret;',
        '⁃' => '&hybull;',
        '⁄' => '&frasl;',
        '⁏' => '&bsemi;',
        '⁗' => '&qprime;',
        ' ' => '&MediumSpace;',
        '  ' => '&ThickSpace',
        '⁠' => '&NoBreak;',
        '⁡' => '&af;',
        '⁢' => '&InvisibleTimes;',
        '⁣' => '&ic;',
        '€' => '&euro;',
        '⃛' => '&TripleDot;',
        '⃜' => '&DotDot;',
        'ℂ' => '&complexes;',
        '℅' => '&incare;',
        'ℊ' => '&gscr;',
        'ℋ' => '&HilbertSpace;',
        'ℌ' => '&Hfr;',
        'ℍ' => '&Hopf;',
        'ℎ' => '&planckh;',
        'ℏ' => '&planck;',
        'ℐ' => '&imagline;',
        'ℑ' => '&Ifr;',
        'ℒ' => '&lagran;',
        'ℓ' => '&ell;',
        'ℕ' => '&naturals;',
        '№' => '&numero;',
        '℗' => '&copysr;',
        '℘' => '&wp;',
        'ℙ' => '&primes;',
        'ℚ' => '&rationals;',
        'ℛ' => '&realine;',
        'ℜ' => '&Rfr;',
        'ℝ' => '&Ropf;',
        '℞' => '&rx;',
        '™' => '&trade;',
        'ℤ' => '&Zopf;',
        '℧' => '&mho;',
        'ℨ' => '&Zfr;',
        '℩' => '&iiota;',
        'ℬ' => '&Bscr;',
        'ℭ' => '&Cfr;',
        'ℯ' => '&escr;',
        'ℰ' => '&expectation;',
        'ℱ' => '&Fouriertrf;',
        'ℳ' => '&Mellintrf;',
        'ℴ' => '&orderof;',
        'ℵ' => '&aleph;',
        'ℶ' => '&beth;',
        'ℷ' => '&gimel;',
        'ℸ' => '&daleth;',
        'ⅅ' => '&CapitalDifferentialD;',
        'ⅆ' => '&DifferentialD;',
        'ⅇ' => '&exponentiale;',
        'ⅈ' => '&ImaginaryI;',
        '⅓' => '&frac13;',
        '⅔' => '&frac23;',
        '⅕' => '&frac15;',
        '⅖' => '&frac25;',
        '⅗' => '&frac35;',
        '⅘' => '&frac45;',
        '⅙' => '&frac16;',
        '⅚' => '&frac56;',
        '⅛' => '&frac18;',
        '⅜' => '&frac38;',
        '⅝' => '&frac58;',
        '⅞' => '&frac78;',
        '←' => '&larr;',
        '↑' => '&uarr;',
        '→' => '&srarr;',
        '↓' => '&darr;',
        '↔' => '&harr;',
        '↕' => '&UpDownArrow;',
        '↖' => '&nwarrow;',
        '↗' => '&UpperRightArrow;',
        '↘' => '&LowerRightArrow;',
        '↙' => '&swarr;',
        '↚' => '&nleftarrow;',
        '↛' => '&nrarr;',
        '↝' => '&rarrw;',
        '↝̸' => '&nrarrw',
        '↞' => '&Larr;',
        '↟' => '&Uarr;',
        '↠' => '&twoheadrightarrow;',
        '↡' => '&Darr;',
        '↢' => '&larrtl;',
        '↣' => '&rarrtl;',
        '↤' => '&LeftTeeArrow;',
        '↥' => '&UpTeeArrow;',
        '↦' => '&map;',
        '↧' => '&DownTeeArrow;',
        '↩' => '&larrhk;',
        '↪' => '&rarrhk;',
        '↫' => '&larrlp;',
        '↬' => '&looparrowright;',
        '↭' => '&harrw;',
        '↮' => '&nleftrightarrow;',
        '↰' => '&Lsh;',
        '↱' => '&rsh;',
        '↲' => '&ldsh;',
        '↳' => '&rdsh;',
        '↵' => '&crarr;',
        '↶' => '&curvearrowleft;',
        '↷' => '&curarr;',
        '↺' => '&olarr;',
        '↻' => '&orarr;',
        '↼' => '&leftharpoonup;',
        '↽' => '&leftharpoondown;',
        '↾' => '&RightUpVector;',
        '↿' => '&uharl;',
        '⇀' => '&rharu;',
        '⇁' => '&rhard;',
        '⇂' => '&RightDownVector;',
        '⇃' => '&dharl;',
        '⇄' => '&rightleftarrows;',
        '⇅' => '&udarr;',
        '⇆' => '&lrarr;',
        '⇇' => '&llarr;',
        '⇈' => '&upuparrows;',
        '⇉' => '&rrarr;',
        '⇊' => '&downdownarrows;',
        '⇋' => '&leftrightharpoons;',
        '⇌' => '&rightleftharpoons;',
        '⇍' => '&nLeftarrow;',
        '⇎' => '&nhArr;',
        '⇏' => '&nrArr;',
        '⇐' => '&DoubleLeftArrow;',
        '⇑' => '&DoubleUpArrow;',
        '⇒' => '&Implies;',
        '⇓' => '&Downarrow;',
        '⇔' => '&hArr;',
        '⇕' => '&Updownarrow;',
        '⇖' => '&nwArr;',
        '⇗' => '&neArr;',
        '⇘' => '&seArr;',
        '⇙' => '&swArr;',
        '⇚' => '&lAarr;',
        '⇛' => '&rAarr;',
        '⇝' => '&zigrarr;',
        '⇤' => '&LeftArrowBar;',
        '⇥' => '&RightArrowBar;',
        '⇵' => '&DownArrowUpArrow;',
        '⇽' => '&loarr;',
        '⇾' => '&roarr;',
        '⇿' => '&hoarr;',
        '∀' => '&forall;',
        '∁' => '&comp;',
        '∂' => '&part;',
        '∂̸' => '&npart',
        '∃' => '&Exists;',
        '∄' => '&nexist;',
        '∅' => '&empty;',
        '∇' => '&nabla;',
        '∈' => '&isinv;',
        '∉' => '&notin;',
        '∋' => '&ReverseElement;',
        '∌' => '&notniva;',
        '∏' => '&prod;',
        '∐' => '&Coproduct;',
        '∑' => '&sum;',
        '−' => '&minus;',
        '∓' => '&MinusPlus;',
        '∔' => '&plusdo;',
        '∖' => '&ssetmn;',
        '∗' => '&lowast;',
        '∘' => '&compfn;',
        '√' => '&Sqrt;',
        '∝' => '&prop;',
        '∞' => '&infin;',
        '∟' => '&angrt;',
        '∠' => '&angle;',
        '∠⃒' => '&nang',
        '∡' => '&angmsd;',
        '∢' => '&angsph;',
        '∣' => '&mid;',
        '∤' => '&nshortmid;',
        '∥' => '&shortparallel;',
        '∦' => '&nparallel;',
        '∧' => '&and;',
        '∨' => '&or;',
        '∩' => '&cap;',
        '∩︀' => '&caps',
        '∪' => '&cup;',
        '∪︀' => '&cups',
        '∫' => '&Integral;',
        '∬' => '&Int;',
        '∭' => '&tint;',
        '∮' => '&ContourIntegral;',
        '∯' => '&DoubleContourIntegral;',
        '∰' => '&Cconint;',
        '∱' => '&cwint;',
        '∲' => '&cwconint;',
        '∳' => '&awconint;',
        '∴' => '&there4;',
        '∵' => '&Because;',
        '∶' => '&ratio;',
        '∷' => '&Colon;',
        '∸' => '&minusd;',
        '∺' => '&mDDot;',
        '∻' => '&homtht;',
        '∼' => '&sim;',
        '∼⃒' => '&nvsim',
        '∽' => '&bsim;',
        '∽̱' => '&race',
        '∾' => '&ac;',
        '∾̳' => '&acE',
        '∿' => '&acd;',
        '≀' => '&wr;',
        '≁' => '&NotTilde;',
        '≂' => '&esim;',
        '≂̸' => '&nesim',
        '≃' => '&simeq;',
        '≄' => '&nsime;',
        '≅' => '&TildeFullEqual;',
        '≆' => '&simne;',
        '≇' => '&ncong;',
        '≈' => '&approx;',
        '≉' => '&napprox;',
        '≊' => '&ape;',
        '≋' => '&apid;',
        '≋̸' => '&napid',
        '≌' => '&bcong;',
        '≍' => '&CupCap;',
        '≍⃒' => '&nvap',
        '≎' => '&bump;',
        '≎̸' => '&nbump',
        '≏' => '&HumpEqual;',
        '≏̸' => '&nbumpe',
        '≐' => '&esdot;',
        '≐̸' => '&nedot',
        '≑' => '&doteqdot;',
        '≒' => '&fallingdotseq;',
        '≓' => '&risingdotseq;',
        '≔' => '&coloneq;',
        '≕' => '&eqcolon;',
        '≖' => '&ecir;',
        '≗' => '&circeq;',
        '≙' => '&wedgeq;',
        '≚' => '&veeeq;',
        '≜' => '&triangleq;',
        '≟' => '&equest;',
        '≠' => '&NotEqual;',
        '≡' => '&Congruent;',
        '≡⃥' => '&bnequiv',
        '≢' => '&NotCongruent;',
        '≤' => '&leq;',
        '≤⃒' => '&nvle',
        '≥' => '&ge;',
        '≥⃒' => '&nvge',
        '≦' => '&lE;',
        '≦̸' => '&nlE',
        '≧' => '&geqq;',
        '≧̸' => '&NotGreaterFullEqual',
        '≨' => '&lneqq;',
        '≨︀' => '&lvertneqq',
        '≩' => '&gneqq;',
        '≩︀' => '&gvertneqq',
        '≪' => '&ll;',
        '≪̸' => '&nLtv',
        '≪⃒' => '&nLt',
        '≫' => '&gg;',
        '≫̸' => '&NotGreaterGreater',
        '≫⃒' => '&nGt',
        '≬' => '&between;',
        '≭' => '&NotCupCap;',
        '≮' => '&NotLess;',
        '≯' => '&ngtr;',
        '≰' => '&NotLessEqual;',
        '≱' => '&ngeq;',
        '≲' => '&LessTilde;',
        '≳' => '&GreaterTilde;',
        '≴' => '&nlsim;',
        '≵' => '&ngsim;',
        '≶' => '&lessgtr;',
        '≷' => '&gl;',
        '≸' => '&ntlg;',
        '≹' => '&NotGreaterLess;',
        '≺' => '&prec;',
        '≻' => '&succ;',
        '≼' => '&PrecedesSlantEqual;',
        '≽' => '&succcurlyeq;',
        '≾' => '&precsim;',
        '≿' => '&SucceedsTilde;',
        '≿̸' => '&NotSucceedsTilde',
        '⊀' => '&npr;',
        '⊁' => '&NotSucceeds;',
        '⊂' => '&sub;',
        '⊂⃒' => '&vnsub',
        '⊃' => '&sup;',
        '⊃⃒' => '&nsupset',
        '⊄' => '&nsub;',
        '⊅' => '&nsup;',
        '⊆' => '&SubsetEqual;',
        '⊇' => '&supe;',
        '⊈' => '&NotSubsetEqual;',
        '⊉' => '&NotSupersetEqual;',
        '⊊' => '&subsetneq;',
        '⊊︀' => '&vsubne',
        '⊋' => '&supsetneq;',
        '⊋︀' => '&vsupne',
        '⊍' => '&cupdot;',
        '⊎' => '&UnionPlus;',
        '⊏' => '&sqsub;',
        '⊏̸' => '&NotSquareSubset',
        '⊐' => '&sqsupset;',
        '⊐̸' => '&NotSquareSuperset',
        '⊑' => '&SquareSubsetEqual;',
        '⊒' => '&SquareSupersetEqual;',
        '⊓' => '&sqcap;',
        '⊓︀' => '&sqcaps',
        '⊔' => '&sqcup;',
        '⊔︀' => '&sqcups',
        '⊕' => '&CirclePlus;',
        '⊖' => '&ominus;',
        '⊗' => '&CircleTimes;',
        '⊘' => '&osol;',
        '⊙' => '&CircleDot;',
        '⊚' => '&ocir;',
        '⊛' => '&oast;',
        '⊝' => '&odash;',
        '⊞' => '&boxplus;',
        '⊟' => '&boxminus;',
        '⊠' => '&timesb;',
        '⊡' => '&sdotb;',
        '⊢' => '&vdash;',
        '⊣' => '&dashv;',
        '⊤' => '&DownTee;',
        '⊥' => '&perp;',
        '⊧' => '&models;',
        '⊨' => '&DoubleRightTee;',
        '⊩' => '&Vdash;',
        '⊪' => '&Vvdash;',
        '⊫' => '&VDash;',
        '⊬' => '&nvdash;',
        '⊭' => '&nvDash;',
        '⊮' => '&nVdash;',
        '⊯' => '&nVDash;',
        '⊰' => '&prurel;',
        '⊲' => '&vartriangleleft;',
        '⊳' => '&vrtri;',
        '⊴' => '&LeftTriangleEqual;',
        '⊴⃒' => '&nvltrie',
        '⊵' => '&RightTriangleEqual;',
        '⊵⃒' => '&nvrtrie',
        '⊶' => '&origof;',
        '⊷' => '&imof;',
        '⊸' => '&mumap;',
        '⊹' => '&hercon;',
        '⊺' => '&intcal;',
        '⊻' => '&veebar;',
        '⊽' => '&barvee;',
        '⊾' => '&angrtvb;',
        '⊿' => '&lrtri;',
        '⋀' => '&xwedge;',
        '⋁' => '&xvee;',
        '⋂' => '&bigcap;',
        '⋃' => '&bigcup;',
        '⋄' => '&diamond;',
        '⋅' => '&sdot;',
        '⋆' => '&Star;',
        '⋇' => '&divonx;',
        '⋈' => '&bowtie;',
        '⋉' => '&ltimes;',
        '⋊' => '&rtimes;',
        '⋋' => '&lthree;',
        '⋌' => '&rthree;',
        '⋍' => '&backsimeq;',
        '⋎' => '&curlyvee;',
        '⋏' => '&curlywedge;',
        '⋐' => '&Sub;',
        '⋑' => '&Supset;',
        '⋒' => '&Cap;',
        '⋓' => '&Cup;',
        '⋔' => '&pitchfork;',
        '⋕' => '&epar;',
        '⋖' => '&lessdot;',
        '⋗' => '&gtrdot;',
        '⋘' => '&Ll;',
        '⋘̸' => '&nLl',
        '⋙' => '&Gg;',
        '⋙̸' => '&nGg',
        '⋚' => '&lesseqgtr;',
        '⋚︀' => '&lesg',
        '⋛' => '&gtreqless;',
        '⋛︀' => '&gesl',
        '⋞' => '&curlyeqprec;',
        '⋟' => '&cuesc;',
        '⋠' => '&NotPrecedesSlantEqual;',
        '⋡' => '&NotSucceedsSlantEqual;',
        '⋢' => '&NotSquareSubsetEqual;',
        '⋣' => '&NotSquareSupersetEqual;',
        '⋦' => '&lnsim;',
        '⋧' => '&gnsim;',
        '⋨' => '&precnsim;',
        '⋩' => '&scnsim;',
        '⋪' => '&nltri;',
        '⋫' => '&ntriangleright;',
        '⋬' => '&nltrie;',
        '⋭' => '&NotRightTriangleEqual;',
        '⋮' => '&vellip;',
        '⋯' => '&ctdot;',
        '⋰' => '&utdot;',
        '⋱' => '&dtdot;',
        '⋲' => '&disin;',
        '⋳' => '&isinsv;',
        '⋴' => '&isins;',
        '⋵' => '&isindot;',
        '⋵̸' => '&notindot',
        '⋶' => '&notinvc;',
        '⋷' => '&notinvb;',
        '⋹' => '&isinE;',
        '⋹̸' => '&notinE',
        '⋺' => '&nisd;',
        '⋻' => '&xnis;',
        '⋼' => '&nis;',
        '⋽' => '&notnivc;',
        '⋾' => '&notnivb;',
        '⌅' => '&barwed;',
        '⌆' => '&doublebarwedge;',
        '⌈' => '&lceil;',
        '⌉' => '&RightCeiling;',
        '⌊' => '&LeftFloor;',
        '⌋' => '&RightFloor;',
        '⌌' => '&drcrop;',
        '⌍' => '&dlcrop;',
        '⌎' => '&urcrop;',
        '⌏' => '&ulcrop;',
        '⌐' => '&bnot;',
        '⌒' => '&profline;',
        '⌓' => '&profsurf;',
        '⌕' => '&telrec;',
        '⌖' => '&target;',
        '⌜' => '&ulcorner;',
        '⌝' => '&urcorner;',
        '⌞' => '&llcorner;',
        '⌟' => '&drcorn;',
        '⌢' => '&frown;',
        '⌣' => '&smile;',
        '⌭' => '&cylcty;',
        '⌮' => '&profalar;',
        '⌶' => '&topbot;',
        '⌽' => '&ovbar;',
        '⌿' => '&solbar;',
        '⍼' => '&angzarr;',
        '⎰' => '&lmoust;',
        '⎱' => '&rmoust;',
        '⎴' => '&OverBracket;',
        '⎵' => '&bbrk;',
        '⎶' => '&bbrktbrk;',
        '⏜' => '&OverParenthesis;',
        '⏝' => '&UnderParenthesis;',
        '⏞' => '&OverBrace;',
        '⏟' => '&UnderBrace;',
        '⏢' => '&trpezium;',
        '⏧' => '&elinters;',
        '␣' => '&blank;',
        'Ⓢ' => '&oS;',
        '─' => '&HorizontalLine;',
        '│' => '&boxv;',
        '┌' => '&boxdr;',
        '┐' => '&boxdl;',
        '└' => '&boxur;',
        '┘' => '&boxul;',
        '├' => '&boxvr;',
        '┤' => '&boxvl;',
        '┬' => '&boxhd;',
        '┴' => '&boxhu;',
        '┼' => '&boxvh;',
        '═' => '&boxH;',
        '║' => '&boxV;',
        '╒' => '&boxdR;',
        '╓' => '&boxDr;',
        '╔' => '&boxDR;',
        '╕' => '&boxdL;',
        '╖' => '&boxDl;',
        '╗' => '&boxDL;',
        '╘' => '&boxuR;',
        '╙' => '&boxUr;',
        '╚' => '&boxUR;',
        '╛' => '&boxuL;',
        '╜' => '&boxUl;',
        '╝' => '&boxUL;',
        '╞' => '&boxvR;',
        '╟' => '&boxVr;',
        '╠' => '&boxVR;',
        '╡' => '&boxvL;',
        '╢' => '&boxVl;',
        '╣' => '&boxVL;',
        '╤' => '&boxHd;',
        '╥' => '&boxhD;',
        '╦' => '&boxHD;',
        '╧' => '&boxHu;',
        '╨' => '&boxhU;',
        '╩' => '&boxHU;',
        '╪' => '&boxvH;',
        '╫' => '&boxVh;',
        '╬' => '&boxVH;',
        '▀' => '&uhblk;',
        '▄' => '&lhblk;',
        '█' => '&block;',
        '░' => '&blk14;',
        '▒' => '&blk12;',
        '▓' => '&blk34;',
        '□' => '&Square;',
        '▪' => '&squarf;',
        '▫' => '&EmptyVerySmallSquare;',
        '▭' => '&rect;',
        '▮' => '&marker;',
        '▱' => '&fltns;',
        '△' => '&bigtriangleup;',
        '▴' => '&blacktriangle;',
        '▵' => '&triangle;',
        '▸' => '&blacktriangleright;',
        '▹' => '&rtri;',
        '▽' => '&bigtriangledown;',
        '▾' => '&blacktriangledown;',
        '▿' => '&triangledown;',
        '◂' => '&blacktriangleleft;',
        '◃' => '&ltri;',
        '◊' => '&lozenge;',
        '○' => '&cir;',
        '◬' => '&tridot;',
        '◯' => '&bigcirc;',
        '◸' => '&ultri;',
        '◹' => '&urtri;',
        '◺' => '&lltri;',
        '◻' => '&EmptySmallSquare;',
        '◼' => '&FilledSmallSquare;',
        '★' => '&starf;',
        '☆' => '&star;',
        '☎' => '&phone;',
        '♀' => '&female;',
        '♂' => '&male;',
        '♠' => '&spadesuit;',
        '♣' => '&clubs;',
        '♥' => '&hearts;',
        '♦' => '&diamondsuit;',
        '♪' => '&sung;',
        '♭' => '&flat;',
        '♮' => '&natur;',
        '♯' => '&sharp;',
        '✓' => '&check;',
        '✗' => '&cross;',
        '✠' => '&maltese;',
        '✶' => '&sext;',
        '❘' => '&VerticalSeparator;',
        '❲' => '&lbbrk;',
        '❳' => '&rbbrk;',
        '⟈' => '&bsolhsub;',
        '⟉' => '&suphsol;',
        '⟦' => '&LeftDoubleBracket;',
        '⟧' => '&RightDoubleBracket;',
        '⟨' => '&langle;',
        '⟩' => '&RightAngleBracket;',
        '⟪' => '&Lang;',
        '⟫' => '&Rang;',
        '⟬' => '&loang;',
        '⟭' => '&roang;',
        '⟵' => '&longleftarrow;',
        '⟶' => '&LongRightArrow;',
        '⟷' => '&LongLeftRightArrow;',
        '⟸' => '&xlArr;',
        '⟹' => '&DoubleLongRightArrow;',
        '⟺' => '&xhArr;',
        '⟼' => '&xmap;',
        '⟿' => '&dzigrarr;',
        '⤂' => '&nvlArr;',
        '⤃' => '&nvrArr;',
        '⤄' => '&nvHarr;',
        '⤅' => '&Map;',
        '⤌' => '&lbarr;',
        '⤍' => '&bkarow;',
        '⤎' => '&lBarr;',
        '⤏' => '&dbkarow;',
        '⤐' => '&drbkarow;',
        '⤑' => '&DDotrahd;',
        '⤒' => '&UpArrowBar;',
        '⤓' => '&DownArrowBar;',
        '⤖' => '&Rarrtl;',
        '⤙' => '&latail;',
        '⤚' => '&ratail;',
        '⤛' => '&lAtail;',
        '⤜' => '&rAtail;',
        '⤝' => '&larrfs;',
        '⤞' => '&rarrfs;',
        '⤟' => '&larrbfs;',
        '⤠' => '&rarrbfs;',
        '⤣' => '&nwarhk;',
        '⤤' => '&nearhk;',
        '⤥' => '&searhk;',
        '⤦' => '&swarhk;',
        '⤧' => '&nwnear;',
        '⤨' => '&toea;',
        '⤩' => '&seswar;',
        '⤪' => '&swnwar;',
        '⤳' => '&rarrc;',
        '⤳̸' => '&nrarrc',
        '⤵' => '&cudarrr;',
        '⤶' => '&ldca;',
        '⤷' => '&rdca;',
        '⤸' => '&cudarrl;',
        '⤹' => '&larrpl;',
        '⤼' => '&curarrm;',
        '⤽' => '&cularrp;',
        '⥅' => '&rarrpl;',
        '⥈' => '&harrcir;',
        '⥉' => '&Uarrocir;',
        '⥊' => '&lurdshar;',
        '⥋' => '&ldrushar;',
        '⥎' => '&LeftRightVector;',
        '⥏' => '&RightUpDownVector;',
        '⥐' => '&DownLeftRightVector;',
        '⥑' => '&LeftUpDownVector;',
        '⥒' => '&LeftVectorBar;',
        '⥓' => '&RightVectorBar;',
        '⥔' => '&RightUpVectorBar;',
        '⥕' => '&RightDownVectorBar;',
        '⥖' => '&DownLeftVectorBar;',
        '⥗' => '&DownRightVectorBar;',
        '⥘' => '&LeftUpVectorBar;',
        '⥙' => '&LeftDownVectorBar;',
        '⥚' => '&LeftTeeVector;',
        '⥛' => '&RightTeeVector;',
        '⥜' => '&RightUpTeeVector;',
        '⥝' => '&RightDownTeeVector;',
        '⥞' => '&DownLeftTeeVector;',
        '⥟' => '&DownRightTeeVector;',
        '⥠' => '&LeftUpTeeVector;',
        '⥡' => '&LeftDownTeeVector;',
        '⥢' => '&lHar;',
        '⥣' => '&uHar;',
        '⥤' => '&rHar;',
        '⥥' => '&dHar;',
        '⥦' => '&luruhar;',
        '⥧' => '&ldrdhar;',
        '⥨' => '&ruluhar;',
        '⥩' => '&rdldhar;',
        '⥪' => '&lharul;',
        '⥫' => '&llhard;',
        '⥬' => '&rharul;',
        '⥭' => '&lrhard;',
        '⥮' => '&udhar;',
        '⥯' => '&ReverseUpEquilibrium;',
        '⥰' => '&RoundImplies;',
        '⥱' => '&erarr;',
        '⥲' => '&simrarr;',
        '⥳' => '&larrsim;',
        '⥴' => '&rarrsim;',
        '⥵' => '&rarrap;',
        '⥶' => '&ltlarr;',
        '⥸' => '&gtrarr;',
        '⥹' => '&subrarr;',
        '⥻' => '&suplarr;',
        '⥼' => '&lfisht;',
        '⥽' => '&rfisht;',
        '⥾' => '&ufisht;',
        '⥿' => '&dfisht;',
        '⦅' => '&lopar;',
        '⦆' => '&ropar;',
        '⦋' => '&lbrke;',
        '⦌' => '&rbrke;',
        '⦍' => '&lbrkslu;',
        '⦎' => '&rbrksld;',
        '⦏' => '&lbrksld;',
        '⦐' => '&rbrkslu;',
        '⦑' => '&langd;',
        '⦒' => '&rangd;',
        '⦓' => '&lparlt;',
        '⦔' => '&rpargt;',
        '⦕' => '&gtlPar;',
        '⦖' => '&ltrPar;',
        '⦚' => '&vzigzag;',
        '⦜' => '&vangrt;',
        '⦝' => '&angrtvbd;',
        '⦤' => '&ange;',
        '⦥' => '&range;',
        '⦦' => '&dwangle;',
        '⦧' => '&uwangle;',
        '⦨' => '&angmsdaa;',
        '⦩' => '&angmsdab;',
        '⦪' => '&angmsdac;',
        '⦫' => '&angmsdad;',
        '⦬' => '&angmsdae;',
        '⦭' => '&angmsdaf;',
        '⦮' => '&angmsdag;',
        '⦯' => '&angmsdah;',
        '⦰' => '&bemptyv;',
        '⦱' => '&demptyv;',
        '⦲' => '&cemptyv;',
        '⦳' => '&raemptyv;',
        '⦴' => '&laemptyv;',
        '⦵' => '&ohbar;',
        '⦶' => '&omid;',
        '⦷' => '&opar;',
        '⦹' => '&operp;',
        '⦻' => '&olcross;',
        '⦼' => '&odsold;',
        '⦾' => '&olcir;',
        '⦿' => '&ofcir;',
        '⧀' => '&olt;',
        '⧁' => '&ogt;',
        '⧂' => '&cirscir;',
        '⧃' => '&cirE;',
        '⧄' => '&solb;',
        '⧅' => '&bsolb;',
        '⧉' => '&boxbox;',
        '⧍' => '&trisb;',
        '⧎' => '&rtriltri;',
        '⧏' => '&LeftTriangleBar;',
        '⧏̸' => '&NotLeftTriangleBar',
        '⧐' => '&RightTriangleBar;',
        '⧐̸' => '&NotRightTriangleBar',
        '⧜' => '&iinfin;',
        '⧝' => '&infintie;',
        '⧞' => '&nvinfin;',
        '⧣' => '&eparsl;',
        '⧤' => '&smeparsl;',
        '⧥' => '&eqvparsl;',
        '⧫' => '&lozf;',
        '⧴' => '&RuleDelayed;',
        '⧶' => '&dsol;',
        '⨀' => '&xodot;',
        '⨁' => '&bigoplus;',
        '⨂' => '&bigotimes;',
        '⨄' => '&biguplus;',
        '⨆' => '&bigsqcup;',
        '⨌' => '&iiiint;',
        '⨍' => '&fpartint;',
        '⨐' => '&cirfnint;',
        '⨑' => '&awint;',
        '⨒' => '&rppolint;',
        '⨓' => '&scpolint;',
        '⨔' => '&npolint;',
        '⨕' => '&pointint;',
        '⨖' => '&quatint;',
        '⨗' => '&intlarhk;',
        '⨢' => '&pluscir;',
        '⨣' => '&plusacir;',
        '⨤' => '&simplus;',
        '⨥' => '&plusdu;',
        '⨦' => '&plussim;',
        '⨧' => '&plustwo;',
        '⨩' => '&mcomma;',
        '⨪' => '&minusdu;',
        '⨭' => '&loplus;',
        '⨮' => '&roplus;',
        '⨯' => '&Cross;',
        '⨰' => '&timesd;',
        '⨱' => '&timesbar;',
        '⨳' => '&smashp;',
        '⨴' => '&lotimes;',
        '⨵' => '&rotimes;',
        '⨶' => '&otimesas;',
        '⨷' => '&Otimes;',
        '⨸' => '&odiv;',
        '⨹' => '&triplus;',
        '⨺' => '&triminus;',
        '⨻' => '&tritime;',
        '⨼' => '&iprod;',
        '⨿' => '&amalg;',
        '⩀' => '&capdot;',
        '⩂' => '&ncup;',
        '⩃' => '&ncap;',
        '⩄' => '&capand;',
        '⩅' => '&cupor;',
        '⩆' => '&cupcap;',
        '⩇' => '&capcup;',
        '⩈' => '&cupbrcap;',
        '⩉' => '&capbrcup;',
        '⩊' => '&cupcup;',
        '⩋' => '&capcap;',
        '⩌' => '&ccups;',
        '⩍' => '&ccaps;',
        '⩐' => '&ccupssm;',
        '⩓' => '&And;',
        '⩔' => '&Or;',
        '⩕' => '&andand;',
        '⩖' => '&oror;',
        '⩗' => '&orslope;',
        '⩘' => '&andslope;',
        '⩚' => '&andv;',
        '⩛' => '&orv;',
        '⩜' => '&andd;',
        '⩝' => '&ord;',
        '⩟' => '&wedbar;',
        '⩦' => '&sdote;',
        '⩪' => '&simdot;',
        '⩭' => '&congdot;',
        '⩭̸' => '&ncongdot',
        '⩮' => '&easter;',
        '⩯' => '&apacir;',
        '⩰' => '&apE;',
        '⩰̸' => '&napE',
        '⩱' => '&eplus;',
        '⩲' => '&pluse;',
        '⩳' => '&Esim;',
        '⩴' => '&Colone;',
        '⩵' => '&Equal;',
        '⩷' => '&ddotseq;',
        '⩸' => '&equivDD;',
        '⩹' => '&ltcir;',
        '⩺' => '&gtcir;',
        '⩻' => '&ltquest;',
        '⩼' => '&gtquest;',
        '⩽' => '&les;',
        '⩽̸' => '&nles',
        '⩾' => '&ges;',
        '⩾̸' => '&nges',
        '⩿' => '&lesdot;',
        '⪀' => '&gesdot;',
        '⪁' => '&lesdoto;',
        '⪂' => '&gesdoto;',
        '⪃' => '&lesdotor;',
        '⪄' => '&gesdotol;',
        '⪅' => '&lap;',
        '⪆' => '&gap;',
        '⪇' => '&lne;',
        '⪈' => '&gne;',
        '⪉' => '&lnap;',
        '⪊' => '&gnap;',
        '⪋' => '&lesseqqgtr;',
        '⪌' => '&gEl;',
        '⪍' => '&lsime;',
        '⪎' => '&gsime;',
        '⪏' => '&lsimg;',
        '⪐' => '&gsiml;',
        '⪑' => '&lgE;',
        '⪒' => '&glE;',
        '⪓' => '&lesges;',
        '⪔' => '&gesles;',
        '⪕' => '&els;',
        '⪖' => '&egs;',
        '⪗' => '&elsdot;',
        '⪘' => '&egsdot;',
        '⪙' => '&el;',
        '⪚' => '&eg;',
        '⪝' => '&siml;',
        '⪞' => '&simg;',
        '⪟' => '&simlE;',
        '⪠' => '&simgE;',
        '⪡' => '&LessLess;',
        '⪡̸' => '&NotNestedLessLess',
        '⪢' => '&GreaterGreater;',
        '⪢̸' => '&NotNestedGreaterGreater',
        '⪤' => '&glj;',
        '⪥' => '&gla;',
        '⪦' => '&ltcc;',
        '⪧' => '&gtcc;',
        '⪨' => '&lescc;',
        '⪩' => '&gescc;',
        '⪪' => '&smt;',
        '⪫' => '&lat;',
        '⪬' => '&smte;',
        '⪬︀' => '&smtes',
        '⪭' => '&late;',
        '⪭︀' => '&lates',
        '⪮' => '&bumpE;',
        '⪯' => '&preceq;',
        '⪯̸' => '&NotPrecedesEqual',
        '⪰' => '&SucceedsEqual;',
        '⪰̸' => '&NotSucceedsEqual',
        '⪳' => '&prE;',
        '⪴' => '&scE;',
        '⪵' => '&precneqq;',
        '⪶' => '&scnE;',
        '⪷' => '&precapprox;',
        '⪸' => '&succapprox;',
        '⪹' => '&precnapprox;',
        '⪺' => '&succnapprox;',
        '⪻' => '&Pr;',
        '⪼' => '&Sc;',
        '⪽' => '&subdot;',
        '⪾' => '&supdot;',
        '⪿' => '&subplus;',
        '⫀' => '&supplus;',
        '⫁' => '&submult;',
        '⫂' => '&supmult;',
        '⫃' => '&subedot;',
        '⫄' => '&supedot;',
        '⫅' => '&subE;',
        '⫅̸' => '&nsubE',
        '⫆' => '&supseteqq;',
        '⫆̸' => '&nsupseteqq',
        '⫇' => '&subsim;',
        '⫈' => '&supsim;',
        '⫋' => '&subsetneqq;',
        '⫋︀' => '&vsubnE',
        '⫌' => '&supnE;',
        '⫌︀' => '&varsupsetneqq',
        '⫏' => '&csub;',
        '⫐' => '&csup;',
        '⫑' => '&csube;',
        '⫒' => '&csupe;',
        '⫓' => '&subsup;',
        '⫔' => '&supsub;',
        '⫕' => '&subsub;',
        '⫖' => '&supsup;',
        '⫗' => '&suphsub;',
        '⫘' => '&supdsub;',
        '⫙' => '&forkv;',
        '⫚' => '&topfork;',
        '⫛' => '&mlcp;',
        '⫤' => '&Dashv;',
        '⫦' => '&Vdashl;',
        '⫧' => '&Barv;',
        '⫨' => '&vBar;',
        '⫩' => '&vBarv;',
        '⫫' => '&Vbar;',
        '⫬' => '&Not;',
        '⫭' => '&bNot;',
        '⫮' => '&rnmid;',
        '⫯' => '&cirmid;',
        '⫰' => '&midcir;',
        '⫱' => '&topcir;',
        '⫲' => '&nhpar;',
        '⫳' => '&parsim;',
        '⫽︀' => '&varsupsetneqq',
        'ﬀ' => '&fflig;',
        'ﬁ' => '&filig;',
        'ﬂ' => '&fllig;',
        'ﬃ' => '&ffilig;',
        'ﬄ' => '&ffllig;',
        '𝒜' => '&Ascr;',
        '𝒞' => '&Cscr;',
        '𝒟' => '&Dscr;',
        '𝒢' => '&Gscr;',
        '𝒥' => '&Jscr;',
        '𝒦' => '&Kscr;',
        '𝒩' => '&Nscr;',
        '𝒪' => '&Oscr;',
        '𝒫' => '&Pscr;',
        '𝒬' => '&Qscr;',
        '𝒮' => '&Sscr;',
        '𝒯' => '&Tscr;',
        '𝒰' => '&Uscr;',
        '𝒱' => '&Vscr;',
        '𝒲' => '&Wscr;',
        '𝒳' => '&Xscr;',
        '𝒴' => '&Yscr;',
        '𝒵' => '&Zscr;',
        '𝒶' => '&ascr;',
        '𝒷' => '&bscr;',
        '𝒸' => '&cscr;',
        '𝒹' => '&dscr;',
        '𝒻' => '&fscr;',
        '𝒽' => '&hscr;',
        '𝒾' => '&iscr;',
        '𝒿' => '&jscr;',
        '𝓀' => '&kscr;',
        '𝓁' => '&lscr;',
        '𝓂' => '&mscr;',
        '𝓃' => '&nscr;',
        '𝓅' => '&pscr;',
        '𝓆' => '&qscr;',
        '𝓇' => '&rscr;',
        '𝓈' => '&sscr;',
        '𝓉' => '&tscr;',
        '𝓊' => '&uscr;',
        '𝓋' => '&vscr;',
        '𝓌' => '&wscr;',
        '𝓍' => '&xscr;',
        '𝓎' => '&yscr;',
        '𝓏' => '&zscr;',
        '𝔄' => '&Afr;',
        '𝔅' => '&Bfr;',
        '𝔇' => '&Dfr;',
        '𝔈' => '&Efr;',
        '𝔉' => '&Ffr;',
        '𝔊' => '&Gfr;',
        '𝔍' => '&Jfr;',
        '𝔎' => '&Kfr;',
        '𝔏' => '&Lfr;',
        '𝔐' => '&Mfr;',
        '𝔑' => '&Nfr;',
        '𝔒' => '&Ofr;',
        '𝔓' => '&Pfr;',
        '𝔔' => '&Qfr;',
        '𝔖' => '&Sfr;',
        '𝔗' => '&Tfr;',
        '𝔘' => '&Ufr;',
        '𝔙' => '&Vfr;',
        '𝔚' => '&Wfr;',
        '𝔛' => '&Xfr;',
        '𝔜' => '&Yfr;',
        '𝔞' => '&afr;',
        '𝔟' => '&bfr;',
        '𝔠' => '&cfr;',
        '𝔡' => '&dfr;',
        '𝔢' => '&efr;',
        '𝔣' => '&ffr;',
        '𝔤' => '&gfr;',
        '𝔥' => '&hfr;',
        '𝔦' => '&ifr;',
        '𝔧' => '&jfr;',
        '𝔨' => '&kfr;',
        '𝔩' => '&lfr;',
        '𝔪' => '&mfr;',
        '𝔫' => '&nfr;',
        '𝔬' => '&ofr;',
        '𝔭' => '&pfr;',
        '𝔮' => '&qfr;',
        '𝔯' => '&rfr;',
        '𝔰' => '&sfr;',
        '𝔱' => '&tfr;',
        '𝔲' => '&ufr;',
        '𝔳' => '&vfr;',
        '𝔴' => '&wfr;',
        '𝔵' => '&xfr;',
        '𝔶' => '&yfr;',
        '𝔷' => '&zfr;',
        '𝔸' => '&Aopf;',
        '𝔹' => '&Bopf;',
        '𝔻' => '&Dopf;',
        '𝔼' => '&Eopf;',
        '𝔽' => '&Fopf;',
        '𝔾' => '&Gopf;',
        '𝕀' => '&Iopf;',
        '𝕁' => '&Jopf;',
        '𝕂' => '&Kopf;',
        '𝕃' => '&Lopf;',
        '𝕄' => '&Mopf;',
        '𝕆' => '&Oopf;',
        '𝕊' => '&Sopf;',
        '𝕋' => '&Topf;',
        '𝕌' => '&Uopf;',
        '𝕍' => '&Vopf;',
        '𝕎' => '&Wopf;',
        '𝕏' => '&Xopf;',
        '𝕐' => '&Yopf;',
        '𝕒' => '&aopf;',
        '𝕓' => '&bopf;',
        '𝕔' => '&copf;',
        '𝕕' => '&dopf;',
        '𝕖' => '&eopf;',
        '𝕗' => '&fopf;',
        '𝕘' => '&gopf;',
        '𝕙' => '&hopf;',
        '𝕚' => '&iopf;',
        '𝕛' => '&jopf;',
        '𝕜' => '&kopf;',
        '𝕝' => '&lopf;',
        '𝕞' => '&mopf;',
        '𝕟' => '&nopf;',
        '𝕠' => '&oopf;',
        '𝕡' => '&popf;',
        '𝕢' => '&qopf;',
        '𝕣' => '&ropf;',
        '𝕤' => '&sopf;',
        '𝕥' => '&topf;',
        '𝕦' => '&uopf;',
        '𝕧' => '&vopf;',
        '𝕨' => '&wopf;',
        '𝕩' => '&xopf;',
        '𝕪' => '&yopf;',
        '𝕫' => '&zopf;',
    );
}
<?php
/**
 * @file
 * The rules for generating output in the serializer.
 *
 * These output rules are likely to generate output similar to the document that
 * was parsed. It is not intended to output exactly the document that was parsed.
 */

namespace Masterminds\HTML5\Serializer;

use Masterminds\HTML5\Elements;

/**
 * Generate the output html5 based on element rules.
 */
class OutputRules implements RulesInterface
{
    /**
     * Defined in http://www.w3.org/TR/html51/infrastructure.html#html-namespace-0.
     */
    const NAMESPACE_HTML = 'http://www.w3.org/1999/xhtml';

    const NAMESPACE_MATHML = 'http://www.w3.org/1998/Math/MathML';

    const NAMESPACE_SVG = 'http://www.w3.org/2000/svg';

    const NAMESPACE_XLINK = 'http://www.w3.org/1999/xlink';

    const NAMESPACE_XML = 'http://www.w3.org/XML/1998/namespace';

    const NAMESPACE_XMLNS = 'http://www.w3.org/2000/xmlns/';

    /**
     * Holds the HTML5 element names that causes a namespace switch.
     *
     * @var array
     */
    protected $implicitNamespaces = array(
        self::NAMESPACE_HTML,
        self::NAMESPACE_SVG,
        self::NAMESPACE_MATHML,
        self::NAMESPACE_XML,
        self::NAMESPACE_XMLNS,
    );

    const IM_IN_HTML = 1;

    const IM_IN_SVG = 2;

    const IM_IN_MATHML = 3;

    /**
     * Used as cache to detect if is available ENT_HTML5.
     *
     * @var bool
     */
    private $hasHTML5 = false;

    protected $traverser;

    protected $encode = false;

    protected $out;

    protected $outputMode;

    private $xpath;

    protected $nonBooleanAttributes = array(
        /*
        array(
            'nodeNamespace'=>'http://www.w3.org/1999/xhtml',
            'attrNamespace'=>'http://www.w3.org/1999/xhtml',

            'nodeName'=>'img', 'nodeName'=>array('img', 'a'),
            'attrName'=>'alt', 'attrName'=>array('title', 'alt'),
        ),
        */
        array(
            'nodeNamespace' => 'http://www.w3.org/1999/xhtml',
            'attrName' => array('href',
                'hreflang',
                'http-equiv',
                'icon',
                'id',
                'keytype',
                'kind',
                'label',
                'lang',
                'language',
                'list',
                'maxlength',
                'media',
                'method',
                'name',
                'placeholder',
                'rel',
                'rows',
                'rowspan',
                'sandbox',
                'spellcheck',
                'scope',
                'seamless',
                'shape',
                'size',
                'sizes',
                'span',
                'src',
                'srcdoc',
                'srclang',
                'srcset',
                'start',
                'step',
                'style',
                'summary',
                'tabindex',
                'target',
                'title',
                'type',
                'value',
                'width',
                'border',
                'charset',
                'cite',
                'class',
                'code',
                'codebase',
                'color',
                'cols',
                'colspan',
                'content',
                'coords',
                'data',
                'datetime',
                'default',
                'dir',
                'dirname',
                'enctype',
                'for',
                'form',
                'formaction',
                'headers',
                'height',
                'accept',
                'accept-charset',
                'accesskey',
                'action',
                'align',
                'alt',
                'bgcolor',
            ),
        ),
        array(
            'nodeNamespace' => 'http://www.w3.org/1999/xhtml',
            'xpath' => 'starts-with(local-name(), \'data-\')',
        ),
    );

    const DOCTYPE = '<!DOCTYPE html>';

    public function __construct($output, $options = array())
    {
        if (isset($options['encode_entities'])) {
            $this->encode = $options['encode_entities'];
        }

        $this->outputMode = static::IM_IN_HTML;
        $this->out = $output;
        $this->hasHTML5 = defined('ENT_HTML5');
    }

    public function addRule(array $rule)
    {
        $this->nonBooleanAttributes[] = $rule;
    }

    public function setTraverser(Traverser $traverser)
    {
        $this->traverser = $traverser;

        return $this;
    }

    public function unsetTraverser()
    {
        $this->traverser = null;

        return $this;
    }

    public function document($dom)
    {
        $this->doctype();
        if ($dom->documentElement) {
            foreach ($dom->childNodes as $node) {
                $this->traverser->node($node);
            }
            $this->nl();
        }
    }

    protected function doctype()
    {
        $this->wr(static::DOCTYPE);
        $this->nl();
    }

    /**
     * @param \DOMElement $ele
     */
    public function element($ele)
    {
        $name = $ele->tagName;

        // Per spec:
        // If the element has a declared namespace in the HTML, MathML or
        // SVG namespaces, we use the lname instead of the tagName.
        if ($this->traverser->isLocalElement($ele)) {
            $name = $ele->localName;
        }

        // If we are in SVG or MathML there is special handling.
        // Using if/elseif instead of switch because it's faster in PHP.
        if ('svg' == $name) {
            $this->outputMode = static::IM_IN_SVG;
            $name = Elements::normalizeSvgElement($name);
        } elseif ('math' == $name) {
            $this->outputMode = static::IM_IN_MATHML;
        }

        $this->openTag($ele);
        // The tag is already self-closed (`<svg />` or `<math />`) in `openTag` if there are no child nodes.
        $handledAsVoidTag = $this->outputMode !== static::IM_IN_HTML && !$ele->hasChildNodes();

        if (Elements::isA($name, Elements::TEXT_RAW)) {
            foreach ($ele->childNodes as $child) {
                if ($child instanceof \DOMCharacterData) {
                    $this->wr($child->data);
                } elseif ($child instanceof \DOMElement) {
                    $this->element($child);
                }
            }
        } else {
            // Handle children.
            if ($ele->hasChildNodes()) {
                $this->traverser->children($ele->childNodes);
            }

            // Close out the SVG or MathML special handling.
            if ('svg' == $name || 'math' == $name) {
                $this->outputMode = static::IM_IN_HTML;
            }
        }

        // If not unary, add a closing tag.
        if (!$handledAsVoidTag && !Elements::isA($name, Elements::VOID_TAG)) {
            $this->closeTag($ele);
        }
    }

    /**
     * Write a text node.
     *
     * @param \DOMText $ele The text node to write.
     */
    public function text($ele)
    {
        if (isset($ele->parentNode) && isset($ele->parentNode->tagName) && Elements::isA($ele->parentNode->localName, Elements::TEXT_RAW)) {
            $this->wr($ele->data);

            return;
        }

        // FIXME: This probably needs some flags set.
        $this->wr($this->enc($ele->data));
    }

    public function cdata($ele)
    {
        // This encodes CDATA.
        $this->wr($ele->ownerDocument->saveXML($ele));
    }

    public function comment($ele)
    {
        // These produce identical output.
        // $this->wr('<!--')->wr($ele->data)->wr('-->');
        $this->wr($ele->ownerDocument->saveXML($ele));
    }

    public function processorInstruction($ele)
    {
        $this->wr('<?')
            ->wr($ele->target)
            ->wr(' ')
            ->wr($ele->data)
            ->wr('?>');
    }

    /**
     * Write the namespace attributes.
     *
     * @param \DOMNode $ele The element being written.
     */
    protected function namespaceAttrs($ele)
    {
        if (!$this->xpath || $this->xpath->document !== $ele->ownerDocument) {
            $this->xpath = new \DOMXPath($ele->ownerDocument);
        }

        foreach ($this->xpath->query('namespace::*[not(.=../../namespace::*)]', $ele) as $nsNode) {
            if (!in_array($nsNode->nodeValue, $this->implicitNamespaces)) {
                $this->wr(' ')->wr($nsNode->nodeName)->wr('="')->wr($nsNode->nodeValue)->wr('"');
            }
        }
    }

    /**
     * Write the opening tag.
     *
     * Tags for HTML, MathML, and SVG are in the local name. Otherwise, use the
     * qualified name (8.3).
     *
     * @param \DOMNode $ele The element being written.
     */
    protected function openTag($ele)
    {
        $this->wr('<')->wr($this->traverser->isLocalElement($ele) ? $ele->localName : $ele->tagName);

        $this->attrs($ele);
        $this->namespaceAttrs($ele);

        if ($this->outputMode == static::IM_IN_HTML) {
            $this->wr('>');
        }         // If we are not in html mode we are in SVG, MathML, or XML embedded content.
        else {
            if ($ele->hasChildNodes()) {
                $this->wr('>');
            }             // If there are no children this is self closing.
            else {
                $this->wr(' />');
            }
        }
    }

    protected function attrs($ele)
    {
        // FIXME: Needs support for xml, xmlns, xlink, and namespaced elements.
        if (!$ele->hasAttributes()) {
            return $this;
        }

        // TODO: Currently, this always writes name="value", and does not do
        // value-less attributes.
        $map = $ele->attributes;
        $len = $map->length;
        for ($i = 0; $i < $len; ++$i) {
            $node = $map->item($i);
            $val = $this->enc($node->value, true);

            // XXX: The spec says that we need to ensure that anything in
            // the XML, XMLNS, or XLink NS's should use the canonical
            // prefix. It seems that DOM does this for us already, but there
            // may be exceptions.
            $name = $node->nodeName;

            // Special handling for attributes in SVG and MathML.
            // Using if/elseif instead of switch because it's faster in PHP.
            if ($this->outputMode == static::IM_IN_SVG) {
                $name = Elements::normalizeSvgAttribute($name);
            } elseif ($this->outputMode == static::IM_IN_MATHML) {
                $name = Elements::normalizeMathMlAttribute($name);
            }

            $this->wr(' ')->wr($name);

            if ((isset($val) && '' !== $val) || $this->nonBooleanAttribute($node)) {
                $this->wr('="')->wr($val)->wr('"');
            }
        }
    }

    protected function nonBooleanAttribute(\DOMAttr $attr)
    {
        $ele = $attr->ownerElement;
        foreach ($this->nonBooleanAttributes as $rule) {
            if (isset($rule['nodeNamespace']) && $rule['nodeNamespace'] !== $ele->namespaceURI) {
                continue;
            }
            if (isset($rule['attNamespace']) && $rule['attNamespace'] !== $attr->namespaceURI) {
                continue;
            }
            if (isset($rule['nodeName']) && !is_array($rule['nodeName']) && $rule['nodeName'] !== $ele->localName) {
                continue;
            }
            if (isset($rule['nodeName']) && is_array($rule['nodeName']) && !in_array($ele->localName, $rule['nodeName'], true)) {
                continue;
            }
            if (isset($rule['attrName']) && !is_array($rule['attrName']) && $rule['attrName'] !== $attr->localName) {
                continue;
            }
            if (isset($rule['attrName']) && is_array($rule['attrName']) && !in_array($attr->localName, $rule['attrName'], true)) {
                continue;
            }
            if (isset($rule['xpath'])) {
                $xp = $this->getXPath($attr);
                if (isset($rule['prefixes'])) {
                    foreach ($rule['prefixes'] as $nsPrefix => $ns) {
                        $xp->registerNamespace($nsPrefix, $ns);
                    }
                }
                if (!$xp->evaluate($rule['xpath'], $attr)) {
                    continue;
                }
            }

            return true;
        }

        return false;
    }

    private function getXPath(\DOMNode $node)
    {
        if (!$this->xpath) {
            $this->xpath = new \DOMXPath($node->ownerDocument);
        }

        return $this->xpath;
    }

    /**
     * Write the closing tag.
     *
     * Tags for HTML, MathML, and SVG are in the local name. Otherwise, use the
     * qualified name (8.3).
     *
     * @param \DOMNode $ele The element being written.
     */
    protected function closeTag($ele)
    {
        if ($this->outputMode == static::IM_IN_HTML || $ele->hasChildNodes()) {
            $this->wr('</')->wr($this->traverser->isLocalElement($ele) ? $ele->localName : $ele->tagName)->wr('>');
        }
    }

    /**
     * Write to the output.
     *
     * @param string $text The string to put into the output
     *
     * @return $this
     */
    protected function wr($text)
    {
        fwrite($this->out, $text);

        return $this;
    }

    /**
     * Write a new line character.
     *
     * @return $this
     */
    protected function nl()
    {
        fwrite($this->out, PHP_EOL);

        return $this;
    }

    /**
     * Encode text.
     *
     * When encode is set to false, the default value, the text passed in is
     * escaped per section 8.3 of the html5 spec. For details on how text is
     * escaped see the escape() method.
     *
     * When encoding is set to true the text is converted to named character
     * references where appropriate. Section 8.1.4 Character references of the
     * html5 spec refers to using named character references. This is useful for
     * characters that can't otherwise legally be used in the text.
     *
     * The named character references are listed in section 8.5.
     *
     * @see http://www.w3.org/TR/2013/CR-html5-20130806/syntax.html#named-character-references True encoding will turn all named character references into their entities.
     *      This includes such characters as +.# and many other common ones. By default
     *      encoding here will just escape &'<>".
     *
     *      Note, PHP 5.4+ has better html5 encoding.
     *
     * @todo Use the Entities class in php 5.3 to have html5 entities.
     *
     * @param string $text      Text to encode.
     * @param bool   $attribute True if we are encoding an attrubute, false otherwise.
     *
     * @return string The encoded text.
     */
    protected function enc($text, $attribute = false)
    {
        // Escape the text rather than convert to named character references.
        if (!$this->encode) {
            return $this->escape($text, $attribute);
        }

        // If we are in PHP 5.4+ we can use the native html5 entity functionality to
        // convert the named character references.

        if ($this->hasHTML5) {
            return htmlentities($text, ENT_HTML5 | ENT_SUBSTITUTE | ENT_QUOTES, 'UTF-8', false);
        }         // If a version earlier than 5.4 html5 entities are not entirely handled.
        // This manually handles them.
        else {
            return strtr($text, HTML5Entities::$map);
        }
    }

    /**
     * Escape test.
     *
     * According to the html5 spec section 8.3 Serializing HTML fragments, text
     * within tags that are not style, script, xmp, iframe, noembed, and noframes
     * need to be properly escaped.
     *
     * The & should be converted to &amp;, no breaking space unicode characters
     * converted to &nbsp;, when in attribute mode the " should be converted to
     * &quot;, and when not in attribute mode the < and > should be converted to
     * &lt; and &gt;.
     *
     * @see http://www.w3.org/TR/2013/CR-html5-20130806/syntax.html#escapingString
     *
     * @param string $text      Text to escape.
     * @param bool   $attribute True if we are escaping an attrubute, false otherwise.
     */
    protected function escape($text, $attribute = false)
    {
        // Not using htmlspecialchars because, while it does escaping, it doesn't
        // match the requirements of section 8.5. For example, it doesn't handle
        // non-breaking spaces.
        if ($attribute) {
            $replace = array(
                '"' => '&quot;',
                '&' => '&amp;',
                "\xc2\xa0" => '&nbsp;',
            );
        } else {
            $replace = array(
                '<' => '&lt;',
                '>' => '&gt;',
                '&' => '&amp;',
                "\xc2\xa0" => '&nbsp;',
            );
        }

        return strtr($text, $replace);
    }
}
# The Serializer (Writer) Model

The serializer roughly follows sections _8.1 Writing HTML documents_ and section
_8.3 Serializing HTML fragments_ by converting DOMDocument, DOMDocumentFragment,
and DOMNodeList into HTML5.

       [ HTML5 ]   // Interface for saving.
          ||
     [ Traverser ]   // Walk the DOM
          ||
       [ Rules ]     // Convert DOM elements into strings.
          ||
       [ HTML5 ]     // HTML5 document or fragment in text.


## HTML5 Class

Provides the top level interface for saving.

## The Traverser

Walks the DOM finding each element and passing it off to the output rules to
convert to HTML5.

## Output Rules

The output rules are defined in the RulesInterface which can have multiple
implementations. Currently, the OutputRules is the default implementation that
converts a DOM as is into HTML5.

## HTML5 String

The output of the process it HTML5 as a string or saved to a file.<?php
/**
 * @file
 * The interface definition for Rules to generate output.
 */

namespace Masterminds\HTML5\Serializer;

/**
 * To create a new rule set for writing output the RulesInterface needs to be implemented.
 * The resulting class can be specified in the options with the key of rules.
 *
 * For an example implementation see Serializer\OutputRules.
 */
interface RulesInterface
{
    /**
     * The class constructor.
     *
     * Note, before the rules can be used a traverser must be registered.
     *
     * @param mixed $output  The output stream to write output to.
     * @param array $options An array of options.
     */
    public function __construct($output, $options = array());

    /**
     * Register the traverser used in but the rules.
     *
     * Note, only one traverser can be used by the rules.
     *
     * @param Traverser $traverser The traverser used in the rules.
     *
     * @return RulesInterface $this for the current object.
     */
    public function setTraverser(Traverser $traverser);

    /**
     * Write a document element (\DOMDocument).
     *
     * Instead of returning the result write it to the output stream ($output)
     * that was passed into the constructor.
     *
     * @param \DOMDocument $dom
     */
    public function document($dom);

    /**
     * Write an element.
     *
     * Instead of returning the result write it to the output stream ($output)
     * that was passed into the constructor.
     *
     * @param mixed $ele
     */
    public function element($ele);

    /**
     * Write a text node.
     *
     * Instead of returning the result write it to the output stream ($output)
     * that was passed into the constructor.
     *
     * @param mixed $ele
     */
    public function text($ele);

    /**
     * Write a CDATA node.
     *
     * Instead of returning the result write it to the output stream ($output)
     * that was passed into the constructor.
     *
     * @param mixed $ele
     */
    public function cdata($ele);

    /**
     * Write a comment node.
     *
     * Instead of returning the result write it to the output stream ($output)
     * that was passed into the constructor.
     *
     * @param mixed $ele
     */
    public function comment($ele);

    /**
     * Write a processor instruction.
     *
     * To learn about processor instructions see InstructionProcessor
     *
     * Instead of returning the result write it to the output stream ($output)
     * that was passed into the constructor.
     *
     * @param mixed $ele
     */
    public function processorInstruction($ele);
}
<?php

namespace Masterminds\HTML5\Serializer;

/**
 * Traverser for walking a DOM tree.
 *
 * This is a concrete traverser designed to convert a DOM tree into an
 * HTML5 document. It is not intended to be a generic DOMTreeWalker
 * implementation.
 *
 * @see http://www.w3.org/TR/2012/CR-html5-20121217/syntax.html#serializing-html-fragments
 */
class Traverser
{
    /**
     * Namespaces that should be treated as "local" to HTML5.
     */
    protected static $local_ns = array(
        'http://www.w3.org/1999/xhtml' => 'html',
        'http://www.w3.org/1998/Math/MathML' => 'math',
        'http://www.w3.org/2000/svg' => 'svg',
    );

    protected $dom;

    protected $options;

    protected $encode = false;

    protected $rules;

    protected $out;

    /**
     * Create a traverser.
     *
     * @param \DOMNode|\DOMNodeList $dom     The document or node to traverse.
     * @param resource              $out     A stream that allows writing. The traverser will output into this
     *                                       stream.
     * @param array                 $options An array of options for the traverser as key/value pairs. These include:
     *                                       - encode_entities: A bool to specify if full encding should happen for all named
     *                                       charachter references. Defaults to false which escapes &'<>".
     *                                       - output_rules: The path to the class handling the output rules.
     */
    public function __construct($dom, $out, RulesInterface $rules, $options = array())
    {
        $this->dom = $dom;
        $this->out = $out;
        $this->rules = $rules;
        $this->options = $options;

        $this->rules->setTraverser($this);
    }

    /**
     * Tell the traverser to walk the DOM.
     *
     * @return resource $out Returns the output stream.
     */
    public function walk()
    {
        if ($this->dom instanceof \DOMDocument) {
            $this->rules->document($this->dom);
        } elseif ($this->dom instanceof \DOMDocumentFragment) {
            // Document fragments are a special case. Only the children need to
            // be serialized.
            if ($this->dom->hasChildNodes()) {
                $this->children($this->dom->childNodes);
            }
        }        // If NodeList, loop
        elseif ($this->dom instanceof \DOMNodeList) {
            // If this is a NodeList of DOMDocuments this will not work.
            $this->children($this->dom);
        }         // Else assume this is a DOMNode-like datastructure.
        else {
            $this->node($this->dom);
        }

        return $this->out;
    }

    /**
     * Process a node in the DOM.
     *
     * @param mixed $node A node implementing \DOMNode.
     */
    public function node($node)
    {
        // A listing of types is at http://php.net/manual/en/dom.constants.php
        switch ($node->nodeType) {
            case XML_ELEMENT_NODE:
                $this->rules->element($node);
                break;
            case XML_TEXT_NODE:
                $this->rules->text($node);
                break;
            case XML_CDATA_SECTION_NODE:
                $this->rules->cdata($node);
                break;
            case XML_PI_NODE:
                $this->rules->processorInstruction($node);
                break;
            case XML_COMMENT_NODE:
                $this->rules->comment($node);
                break;
            // Currently we don't support embedding DTDs.
            default:
                //print '<!-- Skipped -->';
                break;
        }
    }

    /**
     * Walk through all the nodes on a node list.
     *
     * @param \DOMNodeList $nl A list of child elements to walk through.
     */
    public function children($nl)
    {
        foreach ($nl as $node) {
            $this->node($node);
        }
    }

    /**
     * Is an element local?
     *
     * @param mixed $ele An element that implement \DOMNode.
     *
     * @return bool true if local and false otherwise.
     */
    public function isLocalElement($ele)
    {
        $uri = $ele->namespaceURI;
        if (empty($uri)) {
            return false;
        }

        return isset(static::$local_ns[$uri]);
    }
}
Dompdf was designed and developed by Benj Carson.

### Current Team

* **Brian Sweeney** (maintainer)
* **Till Berger**

### Alumni

* **Benj Carson** (creator)
* **Fabien Ménager**
* **Simon Berger**
* **Orion Richardson**

### Contributors
* **Gabriel Bull**
* **Barry vd. Heuvel**
* **Ryan H. Masten**
* **Helmut Tischer**
* [and many more...](https://github.com/dompdf/dompdf/graphs/contributors)

### Thanks

Dompdf would not have been possible without strong community support.
		  GNU LESSER GENERAL PUBLIC LICENSE
		       Version 2.1, February 1999

 Copyright (C) 1991, 1999 Free Software Foundation, Inc.
     59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 Everyone is permitted to copy and distribute verbatim copies
 of this license document, but changing it is not allowed.

[This is the first released version of the Lesser GPL.  It also counts
 as the successor of the GNU Library Public License, version 2, hence
 the version number 2.1.]

			    Preamble

  The licenses for most software are designed to take away your
freedom to share and change it.  By contrast, the GNU General Public
Licenses are intended to guarantee your freedom to share and change
free software--to make sure the software is free for all its users.

  This license, the Lesser General Public License, applies to some
specially designated software packages--typically libraries--of the
Free Software Foundation and other authors who decide to use it.  You
can use it too, but we suggest you first think carefully about whether
this license or the ordinary General Public License is the better
strategy to use in any particular case, based on the explanations below.

  When we speak of free software, we are referring to freedom of use,
not price.  Our General Public Licenses are designed to make sure that
you have the freedom to distribute copies of free software (and charge
for this service if you wish); that you receive source code or can get
it if you want it; that you can change the software and use pieces of
it in new free programs; and that you are informed that you can do
these things.

  To protect your rights, we need to make restrictions that forbid
distributors to deny you these rights or to ask you to surrender these
rights.  These restrictions translate to certain responsibilities for
you if you distribute copies of the library or if you modify it.

  For example, if you distribute copies of the library, whether gratis
or for a fee, you must give the recipients all the rights that we gave
you.  You must make sure that they, too, receive or can get the source
code.  If you link other code with the library, you must provide
complete object files to the recipients, so that they can relink them
with the library after making changes to the library and recompiling
it.  And you must show them these terms so they know their rights.

  We protect your rights with a two-step method: (1) we copyright the
library, and (2) we offer you this license, which gives you legal
permission to copy, distribute and/or modify the library.

  To protect each distributor, we want to make it very clear that
there is no warranty for the free library.  Also, if the library is
modified by someone else and passed on, the recipients should know
that what they have is not the original version, so that the original
author's reputation will not be affected by problems that might be
introduced by others.

  Finally, software patents pose a constant threat to the existence of
any free program.  We wish to make sure that a company cannot
effectively restrict the users of a free program by obtaining a
restrictive license from a patent holder.  Therefore, we insist that
any patent license obtained for a version of the library must be
consistent with the full freedom of use specified in this license.

  Most GNU software, including some libraries, is covered by the
ordinary GNU General Public License.  This license, the GNU Lesser
General Public License, applies to certain designated libraries, and
is quite different from the ordinary General Public License.  We use
this license for certain libraries in order to permit linking those
libraries into non-free programs.

  When a program is linked with a library, whether statically or using
a shared library, the combination of the two is legally speaking a
combined work, a derivative of the original library.  The ordinary
General Public License therefore permits such linking only if the
entire combination fits its criteria of freedom.  The Lesser General
Public License permits more lax criteria for linking other code with
the library.

  We call this license the "Lesser" General Public License because it
does Less to protect the user's freedom than the ordinary General
Public License.  It also provides other free software developers Less
of an advantage over competing non-free programs.  These disadvantages
are the reason we use the ordinary General Public License for many
libraries.  However, the Lesser license provides advantages in certain
special circumstances.

  For example, on rare occasions, there may be a special need to
encourage the widest possible use of a certain library, so that it becomes
a de-facto standard.  To achieve this, non-free programs must be
allowed to use the library.  A more frequent case is that a free
library does the same job as widely used non-free libraries.  In this
case, there is little to gain by limiting the free library to free
software only, so we use the Lesser General Public License.

  In other cases, permission to use a particular library in non-free
programs enables a greater number of people to use a large body of
free software.  For example, permission to use the GNU C Library in
non-free programs enables many more people to use the whole GNU
operating system, as well as its variant, the GNU/Linux operating
system.

  Although the Lesser General Public License is Less protective of the
users' freedom, it does ensure that the user of a program that is
linked with the Library has the freedom and the wherewithal to run
that program using a modified version of the Library.

  The precise terms and conditions for copying, distribution and
modification follow.  Pay close attention to the difference between a
"work based on the library" and a "work that uses the library".  The
former contains code derived from the library, whereas the latter must
be combined with the library in order to run.

		  GNU LESSER GENERAL PUBLIC LICENSE
   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION

  0. This License Agreement applies to any software library or other
program which contains a notice placed by the copyright holder or
other authorized party saying it may be distributed under the terms of
this Lesser General Public License (also called "this License").
Each licensee is addressed as "you".

  A "library" means a collection of software functions and/or data
prepared so as to be conveniently linked with application programs
(which use some of those functions and data) to form executables.

  The "Library", below, refers to any such software library or work
which has been distributed under these terms.  A "work based on the
Library" means either the Library or any derivative work under
copyright law: that is to say, a work containing the Library or a
portion of it, either verbatim or with modifications and/or translated
straightforwardly into another language.  (Hereinafter, translation is
included without limitation in the term "modification".)

  "Source code" for a work means the preferred form of the work for
making modifications to it.  For a library, complete source code means
all the source code for all modules it contains, plus any associated
interface definition files, plus the scripts used to control compilation
and installation of the library.

  Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope.  The act of
running a program using the Library is not restricted, and output from
such a program is covered only if its contents constitute a work based
on the Library (independent of the use of the Library in a tool for
writing it).  Whether that is true depends on what the Library does
and what the program that uses the Library does.
  
  1. You may copy and distribute verbatim copies of the Library's
complete source code as you receive it, in any medium, provided that
you conspicuously and appropriately publish on each copy an
appropriate copyright notice and disclaimer of warranty; keep intact
all the notices that refer to this License and to the absence of any
warranty; and distribute a copy of this License along with the
Library.

  You may charge a fee for the physical act of transferring a copy,
and you may at your option offer warranty protection in exchange for a
fee.

  2. You may modify your copy or copies of the Library or any portion
of it, thus forming a work based on the Library, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:

    a) The modified work must itself be a software library.

    b) You must cause the files modified to carry prominent notices
    stating that you changed the files and the date of any change.

    c) You must cause the whole of the work to be licensed at no
    charge to all third parties under the terms of this License.

    d) If a facility in the modified Library refers to a function or a
    table of data to be supplied by an application program that uses
    the facility, other than as an argument passed when the facility
    is invoked, then you must make a good faith effort to ensure that,
    in the event an application does not supply such function or
    table, the facility still operates, and performs whatever part of
    its purpose remains meaningful.

    (For example, a function in a library to compute square roots has
    a purpose that is entirely well-defined independent of the
    application.  Therefore, Subsection 2d requires that any
    application-supplied function or table used by this function must
    be optional: if the application does not supply it, the square
    root function must still compute square roots.)

These requirements apply to the modified work as a whole.  If
identifiable sections of that work are not derived from the Library,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works.  But when you
distribute the same sections as part of a whole which is a work based
on the Library, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote
it.

Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Library.

In addition, mere aggregation of another work not based on the Library
with the Library (or with a work based on the Library) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.

  3. You may opt to apply the terms of the ordinary GNU General Public
License instead of this License to a given copy of the Library.  To do
this, you must alter all the notices that refer to this License, so
that they refer to the ordinary GNU General Public License, version 2,
instead of to this License.  (If a newer version than version 2 of the
ordinary GNU General Public License has appeared, then you can specify
that version instead if you wish.)  Do not make any other change in
these notices.

  Once this change is made in a given copy, it is irreversible for
that copy, so the ordinary GNU General Public License applies to all
subsequent copies and derivative works made from that copy.

  This option is useful when you wish to copy part of the code of
the Library into a program that is not a library.

  4. You may copy and distribute the Library (or a portion or
derivative of it, under Section 2) in object code or executable form
under the terms of Sections 1 and 2 above provided that you accompany
it with the complete corresponding machine-readable source code, which
must be distributed under the terms of Sections 1 and 2 above on a
medium customarily used for software interchange.

  If distribution of object code is made by offering access to copy
from a designated place, then offering equivalent access to copy the
source code from the same place satisfies the requirement to
distribute the source code, even though third parties are not
compelled to copy the source along with the object code.

  5. A program that contains no derivative of any portion of the
Library, but is designed to work with the Library by being compiled or
linked with it, is called a "work that uses the Library".  Such a
work, in isolation, is not a derivative work of the Library, and
therefore falls outside the scope of this License.

  However, linking a "work that uses the Library" with the Library
creates an executable that is a derivative of the Library (because it
contains portions of the Library), rather than a "work that uses the
library".  The executable is therefore covered by this License.
Section 6 states terms for distribution of such executables.

  When a "work that uses the Library" uses material from a header file
that is part of the Library, the object code for the work may be a
derivative work of the Library even though the source code is not.
Whether this is true is especially significant if the work can be
linked without the Library, or if the work is itself a library.  The
threshold for this to be true is not precisely defined by law.

  If such an object file uses only numerical parameters, data
structure layouts and accessors, and small macros and small inline
functions (ten lines or less in length), then the use of the object
file is unrestricted, regardless of whether it is legally a derivative
work.  (Executables containing this object code plus portions of the
Library will still fall under Section 6.)

  Otherwise, if the work is a derivative of the Library, you may
distribute the object code for the work under the terms of Section 6.
Any executables containing that work also fall under Section 6,
whether or not they are linked directly with the Library itself.

  6. As an exception to the Sections above, you may also combine or
link a "work that uses the Library" with the Library to produce a
work containing portions of the Library, and distribute that work
under terms of your choice, provided that the terms permit
modification of the work for the customer's own use and reverse
engineering for debugging such modifications.

  You must give prominent notice with each copy of the work that the
Library is used in it and that the Library and its use are covered by
this License.  You must supply a copy of this License.  If the work
during execution displays copyright notices, you must include the
copyright notice for the Library among them, as well as a reference
directing the user to the copy of this License.  Also, you must do one
of these things:

    a) Accompany the work with the complete corresponding
    machine-readable source code for the Library including whatever
    changes were used in the work (which must be distributed under
    Sections 1 and 2 above); and, if the work is an executable linked
    with the Library, with the complete machine-readable "work that
    uses the Library", as object code and/or source code, so that the
    user can modify the Library and then relink to produce a modified
    executable containing the modified Library.  (It is understood
    that the user who changes the contents of definitions files in the
    Library will not necessarily be able to recompile the application
    to use the modified definitions.)

    b) Use a suitable shared library mechanism for linking with the
    Library.  A suitable mechanism is one that (1) uses at run time a
    copy of the library already present on the user's computer system,
    rather than copying library functions into the executable, and (2)
    will operate properly with a modified version of the library, if
    the user installs one, as long as the modified version is
    interface-compatible with the version that the work was made with.

    c) Accompany the work with a written offer, valid for at
    least three years, to give the same user the materials
    specified in Subsection 6a, above, for a charge no more
    than the cost of performing this distribution.

    d) If distribution of the work is made by offering access to copy
    from a designated place, offer equivalent access to copy the above
    specified materials from the same place.

    e) Verify that the user has already received a copy of these
    materials or that you have already sent this user a copy.

  For an executable, the required form of the "work that uses the
Library" must include any data and utility programs needed for
reproducing the executable from it.  However, as a special exception,
the materials to be distributed need not include anything that is
normally distributed (in either source or binary form) with the major
components (compiler, kernel, and so on) of the operating system on
which the executable runs, unless that component itself accompanies
the executable.

  It may happen that this requirement contradicts the license
restrictions of other proprietary libraries that do not normally
accompany the operating system.  Such a contradiction means you cannot
use both them and the Library together in an executable that you
distribute.

  7. You may place library facilities that are a work based on the
Library side-by-side in a single library together with other library
facilities not covered by this License, and distribute such a combined
library, provided that the separate distribution of the work based on
the Library and of the other library facilities is otherwise
permitted, and provided that you do these two things:

    a) Accompany the combined library with a copy of the same work
    based on the Library, uncombined with any other library
    facilities.  This must be distributed under the terms of the
    Sections above.

    b) Give prominent notice with the combined library of the fact
    that part of it is a work based on the Library, and explaining
    where to find the accompanying uncombined form of the same work.

  8. You may not copy, modify, sublicense, link with, or distribute
the Library except as expressly provided under this License.  Any
attempt otherwise to copy, modify, sublicense, link with, or
distribute the Library is void, and will automatically terminate your
rights under this License.  However, parties who have received copies,
or rights, from you under this License will not have their licenses
terminated so long as such parties remain in full compliance.

  9. You are not required to accept this License, since you have not
signed it.  However, nothing else grants you permission to modify or
distribute the Library or its derivative works.  These actions are
prohibited by law if you do not accept this License.  Therefore, by
modifying or distributing the Library (or any work based on the
Library), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Library or works based on it.

  10. Each time you redistribute the Library (or any work based on the
Library), the recipient automatically receives a license from the
original licensor to copy, distribute, link with or modify the Library
subject to these terms and conditions.  You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties with
this License.

  11. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License.  If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Library at all.  For example, if a patent
license would not permit royalty-free redistribution of the Library by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Library.

If any portion of this section is held invalid or unenforceable under any
particular circumstance, the balance of the section is intended to apply,
and the section as a whole is intended to apply in other circumstances.

It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system which is
implemented by public license practices.  Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.

This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.

  12. If the distribution and/or use of the Library is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Library under this License may add
an explicit geographical distribution limitation excluding those countries,
so that distribution is permitted only in or among countries not thus
excluded.  In such case, this License incorporates the limitation as if
written in the body of this License.

  13. The Free Software Foundation may publish revised and/or new
versions of the Lesser General Public License from time to time.
Such new versions will be similar in spirit to the present version,
but may differ in detail to address new problems or concerns.

Each version is given a distinguishing version number.  If the Library
specifies a version number of this License which applies to it and
"any later version", you have the option of following the terms and
conditions either of that version or of any later version published by
the Free Software Foundation.  If the Library does not specify a
license version number, you may choose any version ever published by
the Free Software Foundation.

  14. If you wish to incorporate parts of the Library into other free
programs whose distribution conditions are incompatible with these,
write to the author to ask for permission.  For software which is
copyrighted by the Free Software Foundation, write to the Free
Software Foundation; we sometimes make exceptions for this.  Our
decision will be guided by the two goals of preserving the free status
of all derivatives of our free software and of promoting the sharing
and reuse of software generally.

			    NO WARRANTY

  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.

  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
DAMAGES.Dompdf
======

[![Build Status](https://github.com/dompdf/dompdf/actions/workflows/test.yml/badge.svg)](https://github.com/dompdf/dompdf/actions/workflows/test.yml)
[![Latest Release](https://poser.pugx.org/dompdf/dompdf/v/stable.png)](https://packagist.org/packages/dompdf/dompdf)
[![Total Downloads](https://poser.pugx.org/dompdf/dompdf/downloads.png)](https://packagist.org/packages/dompdf/dompdf)
[![License](https://poser.pugx.org/dompdf/dompdf/license.png)](https://packagist.org/packages/dompdf/dompdf)
 
**Dompdf is an HTML to PDF converter**

At its heart, dompdf is (mostly) a [CSS 2.1](http://www.w3.org/TR/CSS2/) compliant
HTML layout and rendering engine written in PHP. It is a style-driven renderer:
it will download and read external stylesheets, inline style tags, and the style
attributes of individual HTML elements. It also supports most presentational
HTML attributes.

*This document applies to the latest stable code which may not reflect the current 
release. For released code please
[navigate to the appropriate tag](https://github.com/dompdf/dompdf/tags).*

----

**Check out the [demo](http://eclecticgeek.com/dompdf/debug.php) and ask any
question on [StackOverflow](https://stackoverflow.com/questions/tagged/dompdf) or
in [Discussions](https://github.com/dompdf/dompdf/discussions).**

Follow us on [![Twitter](http://twitter-badges.s3.amazonaws.com/twitter-a.png)](http://www.twitter.com/dompdf).

---



## Features

 * Handles most CSS 2.1 and a few CSS3 properties, including @import, @media &
   @page rules
 * Supports most presentational HTML 4.0 attributes
 * Supports external stylesheets, either local or through http/ftp (via
   fopen-wrappers)
 * Supports complex tables, including row & column spans, separate & collapsed
   border models, individual cell styling
 * Image support (gif, png (8, 24 and 32 bit with alpha channel), bmp & jpeg)
 * No dependencies on external PDF libraries, thanks to the R&OS PDF class
 * Inline PHP support
 * Basic SVG support (see "Limitations" below)
 
## Requirements

 * PHP version 7.1 or higher
 * DOM extension
 * MBString extension
 * php-font-lib
 * php-svg-lib
 
Note that some required dependencies may have further dependencies 
(notably php-svg-lib requires sabberworm/php-css-parser).

### Recommendations

 * OPcache (OPcache, XCache, APC, etc.): improves performance
 * GD (for image processing)
 * IMagick or GMagick extension: improves image processing performance

Visit the wiki for more information:
https://github.com/dompdf/dompdf/wiki/Requirements

## About Fonts & Character Encoding

PDF documents internally support the following fonts: Helvetica, Times-Roman,
Courier, Zapf-Dingbats, & Symbol. These fonts only support Windows ANSI
encoding. In order for a PDF to display characters that are not available in
Windows ANSI, you must supply an external font. Dompdf will embed any referenced
font in the PDF so long as it has been pre-loaded or is accessible to dompdf and
reference in CSS @font-face rules. See the
[font overview](https://github.com/dompdf/dompdf/wiki/About-Fonts-and-Character-Encoding)
for more information on how to use fonts.

The [DejaVu TrueType fonts](https://dejavu-fonts.github.io/) have been pre-installed
to give dompdf decent Unicode character coverage by default. To use the DejaVu
fonts reference the font in your stylesheet, e.g. `body { font-family: DejaVu
Sans; }` (for DejaVu Sans). The following DejaVu 2.34 fonts are available:
DejaVu Sans, DejaVu Serif, and DejaVu Sans Mono.

## Easy Installation

### Install with composer

To install with [Composer](https://getcomposer.org/), simply require the
latest version of this package.

```bash
composer require dompdf/dompdf
```

Make sure that the autoload file from Composer is loaded.

```php
// somewhere early in your project's loading, require the Composer autoloader
// see: http://getcomposer.org/doc/00-intro.md
require 'vendor/autoload.php';

```

### Download and install

Download a packaged archive of dompdf and extract it into the 
directory where dompdf will reside

 * You can download stable copies of dompdf from
   https://github.com/dompdf/dompdf/releases
 * Or download a nightly (the latest, unreleased code) from
   http://eclecticgeek.com/dompdf

Use the packaged release autoloader to load dompdf, libraries,
and helper functions in your PHP:

```php
// include autoloader
require_once 'dompdf/autoload.inc.php';
```

Note: packaged releases are named according using semantic
versioning (_dompdf_MAJOR-MINOR-PATCH.zip_). So the 1.0.0 
release would be dompdf_1-0-0.zip. This is the only download
that includes the autoloader for Dompdf and all its dependencies.

### Install with git

From the command line, switch to the directory where dompdf will
reside and run the following commands:

```sh
git clone https://github.com/dompdf/dompdf.git
cd dompdf/lib

git clone https://github.com/PhenX/php-font-lib.git php-font-lib
cd php-font-lib
git checkout 0.5.1
cd ..

git clone https://github.com/PhenX/php-svg-lib.git php-svg-lib
cd php-svg-lib
git checkout v0.3.2
cd ..

git clone https://github.com/sabberworm/PHP-CSS-Parser.git php-css-parser
cd php-css-parser
git checkout 8.1.0
```

Require dompdf and it's dependencies in your PHP.
For details see the [autoloader in the utils project](https://github.com/dompdf/utils/blob/master/autoload.inc.php).

## Quick Start

Just pass your HTML in to dompdf and stream the output:

```php
// reference the Dompdf namespace
use Dompdf\Dompdf;

// instantiate and use the dompdf class
$dompdf = new Dompdf();
$dompdf->loadHtml('hello world');

// (Optional) Setup the paper size and orientation
$dompdf->setPaper('A4', 'landscape');

// Render the HTML as PDF
$dompdf->render();

// Output the generated PDF to Browser
$dompdf->stream();
```

### Setting Options

Set options during dompdf instantiation:

```php
use Dompdf\Dompdf;
use Dompdf\Options;

$options = new Options();
$options->set('defaultFont', 'Courier');
$dompdf = new Dompdf($options);
```

or at run time

```php
use Dompdf\Dompdf;

$dompdf = new Dompdf();
$options = $dompdf->getOptions();
$options->setDefaultFont('Courier');
$dompdf->setOptions($options);
```

See [Dompdf\Options](src/Options.php) for a list of available options.

### Resource Reference Requirements

In order to protect potentially sensitive information Dompdf imposes 
restrictions on files referenced from the local file system or the web. 

Files accessed through web-based protocols have the following requirements:
 * The Dompdf option "isRemoteEnabled" must be set to "true"
 * PHP must either have the curl extension enabled or the 
   allow_url_fopen setting set to true
   
Files accessed through the local file system have the following requirement:
 * The file must fall within the path(s) specified for the Dompdf "chroot" option

## Limitations (Known Issues)

 * Table cells are not pageable, meaning a table row must fit on a single page.
 * Elements are rendered on the active page when they are parsed.
 * Embedding "raw" SVG's (`<svg><path...></svg>`) isn't working yet, you need to
   either link to an external SVG file, or use a DataURI like this:
     ```php
     $html = '<img src="data:image/svg+xml;base64,' . base64_encode($svg) . '" ...>';
     ```
     Watch https://github.com/dompdf/dompdf/issues/320 for progress
 * Does not support CSS flexbox.
 * Does not support CSS Grid.
---

[![Donate button](https://www.paypal.com/en_US/i/btn/btn_donate_SM.gif)](http://goo.gl/DSvWf)

*If you find this project useful, please consider making a donation.
Any funds donated will be used to help further development on this project.)*
2.0.8
{
    "name": "dompdf/dompdf",
    "type": "library",
    "description": "DOMPDF is a CSS 2.1 compliant HTML to PDF converter",
    "homepage": "https://github.com/dompdf/dompdf",
    "license": "LGPL-2.1",
    "authors": [
        {
            "name": "The Dompdf Community",
            "homepage": "https://github.com/dompdf/dompdf/blob/master/AUTHORS.md"
        }
    ],
    "autoload": {
        "psr-4": {
            "Dompdf\\": "src/"
        },
        "classmap": [
            "lib/"
        ]
    },
    "autoload-dev": {
        "psr-4": {
            "Dompdf\\Tests\\": "tests/"
        }
    },
    "require": {
        "php": "^7.1 || ^8.0",
        "ext-dom": "*",
        "ext-mbstring": "*",
        "masterminds/html5": "^2.0",
        "phenx/php-font-lib": ">=0.5.4 <1.0.0",
        "phenx/php-svg-lib": ">=0.5.2 <1.0.0"
    },
    "require-dev": {
        "ext-json": "*",
        "ext-zip": "*",
        "phpunit/phpunit": "^7.5 || ^8 || ^9",
        "squizlabs/php_codesniffer": "^3.5",
        "mockery/mockery": "^1.3"
    },
    "suggest": {
        "ext-gd": "Needed to process images",
        "ext-imagick": "Improves image processing performance",
        "ext-gmagick": "Improves image processing performance",
        "ext-zlib": "Needed for pdf stream compression"
    }
}
<?php
/**
 * A PHP class to provide the basic functionality to create a pdf document without
 * any requirement for additional modules.
 *
 * @author  Wayne Munro
 * @license http://creativecommons.org/licenses/publicdomain/ Public Domain
 * @package Cpdf
 */
namespace Dompdf;

use FontLib\Exception\FontNotFoundException;
use FontLib\Font;
use FontLib\BinaryStream;

class Cpdf
{
    const PDF_VERSION = '1.7';

    const ACROFORM_SIG_SIGNATURESEXISTS = 0x0001;
    const ACROFORM_SIG_APPENDONLY =       0x0002;

    const ACROFORM_FIELD_BUTTON =   'Btn';
    const ACROFORM_FIELD_TEXT =     'Tx';
    const ACROFORM_FIELD_CHOICE =   'Ch';
    const ACROFORM_FIELD_SIG =      'Sig';

    const ACROFORM_FIELD_READONLY =               0x0001;
    const ACROFORM_FIELD_REQUIRED =               0x0002;

    const ACROFORM_FIELD_TEXT_MULTILINE =         0x1000;
    const ACROFORM_FIELD_TEXT_PASSWORD =          0x2000;
    const ACROFORM_FIELD_TEXT_RICHTEXT =         0x10000;

    const ACROFORM_FIELD_CHOICE_COMBO =          0x20000;
    const ACROFORM_FIELD_CHOICE_EDIT =           0x40000;
    const ACROFORM_FIELD_CHOICE_SORT =           0x80000;
    const ACROFORM_FIELD_CHOICE_MULTISELECT =   0x200000;

    const XOBJECT_SUBTYPE_FORM = 'Form';

    /**
     * @var integer The current number of pdf objects in the document
     */
    public $numObj = 0;

    /**
     * @var array This array contains all of the pdf objects, ready for final assembly
     */
    public $objects = [];

    /**
     * @var integer The objectId (number within the objects array) of the document catalog
     */
    public $catalogId;

    /**
     * @var integer The objectId (number within the objects array) of indirect references (Javascript EmbeddedFiles)
     */
    protected $indirectReferenceId = 0;

    /**
     * @var integer The objectId (number within the objects array)
     */
    protected $embeddedFilesId = 0;

    /**
     * AcroForm objectId
     *
     * @var integer
     */
    public $acroFormId;

    /**
     * @var int
     */
    public $signatureMaxLen = 5000;

    /**
     * @var array Array carrying information about the fonts that the system currently knows about
     * Used to ensure that a font is not loaded twice, among other things
     */
    public $fonts = [];

    /**
     * @var string The default font metrics file to use if no other font has been loaded.
     * The path to the directory containing the font metrics should be included
     */
    public $defaultFont = './fonts/Helvetica.afm';

    /**
     * @string A record of the current font
     */
    public $currentFont = '';

    /**
     * @var string The current base font
     */
    public $currentBaseFont = '';

    /**
     * @var integer The number of the current font within the font array
     */
    public $currentFontNum = 0;

    /**
     * @var integer
     */
    public $currentNode;

    /**
     * @var integer Object number of the current page
     */
    public $currentPage;

    /**
     * @var integer Object number of the currently active contents block
     */
    public $currentContents;

    /**
     * @var integer Number of fonts within the system
     */
    public $numFonts = 0;

    /**
     * @var integer Number of graphic state resources used
     */
    private $numStates = 0;

    /**
     * @var array Number of graphic state resources used
     */
    private $gstates = [];

    /**
     * @var array Current color for fill operations, defaults to inactive value,
     * all three components should be between 0 and 1 inclusive when active
     */
    public $currentColor = null;

    /**
     * @var array Current color for stroke operations (lines etc.)
     */
    public $currentStrokeColor = null;

    /**
     * @var string Fill rule (nonzero or evenodd)
     */
    public $fillRule = "nonzero";

    /**
     * @var string Current style that lines are drawn in
     */
    public $currentLineStyle = '';

    /**
     * @var array Current line transparency (partial graphics state)
     */
    public $currentLineTransparency = ["mode" => "Normal", "opacity" => 1.0];

    /**
     * array Current fill transparency (partial graphics state)
     */
    public $currentFillTransparency = ["mode" => "Normal", "opacity" => 1.0];

    /**
     * @var array An array which is used to save the state of the document, mainly the colors and styles
     * it is used to temporarily change to another state, then change back to what it was before
     */
    public $stateStack = [];

    /**
     * @var integer Number of elements within the state stack
     */
    public $nStateStack = 0;

    /**
     * @var integer Number of page objects within the document
     */
    public $numPages = 0;

    /**
     * @var array Object Id storage stack
     */
    public $stack = [];

    /**
     * @var integer Number of elements within the object Id storage stack
     */
    public $nStack = 0;

    /**
     * an array which contains information about the objects which are not firmly attached to pages
     * these have been added with the addObject function
     */
    public $looseObjects = [];

    /**
     * array contains information about how the loose objects are to be added to the document
     */
    public $addLooseObjects = [];

    /**
     * @var integer The objectId of the information object for the document
     * this contains authorship, title etc.
     */
    public $infoObject = 0;

    /**
     * @var integer Number of images being tracked within the document
     */
    public $numImages = 0;

    /**
     * @var array An array containing options about the document
     * it defaults to turning on the compression of the objects
     */
    public $options = ['compression' => true];

    /**
     * @var integer The objectId of the first page of the document
     */
    public $firstPageId;

    /**
     * @var integer The object Id of the procset object
     */
    public $procsetObjectId;

    /**
     * @var array Store the information about the relationship between font families
     * this used so that the code knows which font is the bold version of another font, etc.
     * the value of this array is initialised in the constructor function.
     */
    public $fontFamilies = [];

    /**
     * @var string Folder for php serialized formats of font metrics files.
     * If empty string, use same folder as original metrics files.
     * This can be passed in from class creator.
     * If this folder does not exist or is not writable, Cpdf will be **much** slower.
     * Because of potential trouble with php safe mode, folder cannot be created at runtime.
     */
    public $fontcache = '';

    /**
     * @var integer The version of the font metrics cache file.
     * This value must be manually incremented whenever the internal font data structure is modified.
     */
    public $fontcacheVersion = 6;

    /**
     * @var string Temporary folder.
     * If empty string, will attempt system tmp folder.
     * This can be passed in from class creator.
     */
    public $tmp = '';

    /**
     * @var string Track if the current font is bolded or italicised
     */
    public $currentTextState = '';

    /**
     * @var string Messages are stored here during processing, these can be selected afterwards to give some useful debug information
     */
    public $messages = '';

    /**
     * @var string The encryption array for the document encryption is stored here
     */
    public $arc4 = '';

    /**
     * @var integer The object Id of the encryption information
     */
    public $arc4_objnum = 0;

    /**
     * @var string The file identifier, used to uniquely identify a pdf document
     */
    public $fileIdentifier = '';

    /**
     * @var boolean A flag to say if a document is to be encrypted or not
     */
    public $encrypted = false;

    /**
     * @var string The encryption key for the encryption of all the document content (structure is not encrypted)
     */
    public $encryptionKey = '';

    /**
     * @var array Array which forms a stack to keep track of nested callback functions
     */
    public $callback = [];

    /**
     * @var integer The number of callback functions in the callback array
     */
    public $nCallback = 0;

    /**
     * @var array Store label->id pairs for named destinations, these will be used to replace internal links
     * done this way so that destinations can be defined after the location that links to them
     */
    public $destinations = [];

    /**
     * @var array Store the stack for the transaction commands, each item in here is a record of the values of all the
     * publiciables within the class, so that the user can rollback at will (from each 'start' command)
     * note that this includes the objects array, so these can be large.
     */
    public $checkpoint = '';

    /**
     * @var array Table of Image origin filenames and image labels which were already added with o_image().
     * Allows to merge identical images
     */
    public $imagelist = [];

    /**
     * @var array Table of already added alpha and plain image files for transparent PNG images.
     */
    protected $imageAlphaList = [];

    /**
     * @var array List of temporary image files to be deleted after processing.
     */
    protected $imageCache = [];

    /**
     * @var boolean Whether the text passed in should be treated as Unicode or just local character set.
     */
    public $isUnicode = false;

    /**
     * @var string the JavaScript code of the document
     */
    public $javascript = '';

    /**
     * @var boolean whether the compression is possible
     */
    protected $compressionReady = false;

    /**
     * @var array Current page size
     */
    protected $currentPageSize = ["width" => 0, "height" => 0];

    /**
     * @var array All the chars that will be required in the font subsets
     */
    protected $stringSubsets = [];

    /**
     * @var string The target internal encoding
     */
    protected static $targetEncoding = 'Windows-1252';

    /**
     * @var array
     */
    protected $byteRange = array();

    /**
     * @var array The list of the core fonts
     */
    protected static $coreFonts = [
        'courier',
        'courier-bold',
        'courier-oblique',
        'courier-boldoblique',
        'helvetica',
        'helvetica-bold',
        'helvetica-oblique',
        'helvetica-boldoblique',
        'times-roman',
        'times-bold',
        'times-italic',
        'times-bolditalic',
        'symbol',
        'zapfdingbats'
    ];

    /**
     * Class constructor
     * This will start a new document
     *
     * @param array   $pageSize  Array of 4 numbers, defining the bottom left and upper right corner of the page. first two are normally zero.
     * @param boolean $isUnicode Whether text will be treated as Unicode or not.
     * @param string  $fontcache The font cache folder
     * @param string  $tmp       The temporary folder
     */
    function __construct($pageSize = [0, 0, 612, 792], $isUnicode = false, $fontcache = '', $tmp = '')
    {
        $this->isUnicode = $isUnicode;
        $this->fontcache = rtrim($fontcache, DIRECTORY_SEPARATOR."/\\");
        $this->tmp = ($tmp !== '' ? $tmp : sys_get_temp_dir());
        $this->newDocument($pageSize);

        $this->compressionReady = function_exists('gzcompress');

        if (in_array('Windows-1252', mb_list_encodings())) {
            self::$targetEncoding = 'Windows-1252';
        }

        // also initialize the font families that are known about already
        $this->setFontFamily('init');
    }

    public function __destruct()
    {
        foreach ($this->imageCache as $file) {
            if (file_exists($file)) {
                unlink($file);
            }
        }
    }

    /**
     * Document object methods (internal use only)
     *
     * There is about one object method for each type of object in the pdf document
     * Each function has the same call list ($id,$action,$options).
     * $id = the object ID of the object, or what it is to be if it is being created
     * $action = a string specifying the action to be performed, though ALL must support:
     *           'new' - create the object with the id $id
     *           'out' - produce the output for the pdf object
     * $options = optional, a string or array containing the various parameters for the object
     *
     * These, in conjunction with the output function are the ONLY way for output to be produced
     * within the pdf 'file'.
     */

    /**
     * Destination object, used to specify the location for the user to jump to, presently on opening
     *
     * @param $id
     * @param $action
     * @param string $options
     * @return string|null
     */
    protected function o_destination($id, $action, $options = '')
    {
        switch ($action) {
            case 'new':
                $this->objects[$id] = ['t' => 'destination', 'info' => []];
                $tmp = '';
                switch ($options['type']) {
                    case 'XYZ':
                    /** @noinspection PhpMissingBreakStatementInspection */
                    case 'FitR':
                        $tmp = ' ' . $options['p3'] . $tmp;
                    case 'FitH':
                    case 'FitV':
                    case 'FitBH':
                    /** @noinspection PhpMissingBreakStatementInspection */
                    case 'FitBV':
                        $tmp = ' ' . $options['p1'] . ' ' . $options['p2'] . $tmp;
                    case 'Fit':
                    case 'FitB':
                        $tmp = $options['type'] . $tmp;
                        $this->objects[$id]['info']['string'] = $tmp;
                        $this->objects[$id]['info']['page'] = $options['page'];
                }
                break;

            case 'out':
                $o = &$this->objects[$id];

                $tmp = $o['info'];
                $res = "\n$id 0 obj\n" . '[' . $tmp['page'] . ' 0 R /' . $tmp['string'] . "]\nendobj";

                return $res;
        }

        return null;
    }

    /**
     * set the viewer preferences
     *
     * @param $id
     * @param $action
     * @param string|array $options
     * @return string|null
     */
    protected function o_viewerPreferences($id, $action, $options = '')
    {
        switch ($action) {
            case 'new':
                $this->objects[$id] = ['t' => 'viewerPreferences', 'info' => []];
                break;

            case 'add':
                $o = &$this->objects[$id];

                foreach ($options as $k => $v) {
                    switch ($k) {
                        // Boolean keys
                        case 'HideToolbar':
                        case 'HideMenubar':
                        case 'HideWindowUI':
                        case 'FitWindow':
                        case 'CenterWindow':
                        case 'DisplayDocTitle':
                        case 'PickTrayByPDFSize':
                            $o['info'][$k] = (bool)$v;
                            break;

                        // Integer keys
                        case 'NumCopies':
                            $o['info'][$k] = (int)$v;
                            break;

                        // Name keys
                        case 'ViewArea':
                        case 'ViewClip':
                        case 'PrintClip':
                        case 'PrintArea':
                            $o['info'][$k] = (string)$v;
                            break;

                        // Named with limited valid values
                        case 'NonFullScreenPageMode':
                            if (!in_array($v, ['UseNone', 'UseOutlines', 'UseThumbs', 'UseOC'])) {
                                break;
                            }
                            $o['info'][$k] = $v;
                            break;

                        case 'Direction':
                            if (!in_array($v, ['L2R', 'R2L'])) {
                                break;
                            }
                            $o['info'][$k] = $v;
                            break;

                        case 'PrintScaling':
                            if (!in_array($v, ['None', 'AppDefault'])) {
                                break;
                            }
                            $o['info'][$k] = $v;
                            break;

                        case 'Duplex':
                            if (!in_array($v, ['None', 'Simplex', 'DuplexFlipShortEdge', 'DuplexFlipLongEdge'])) {
                                break;
                            }
                            $o['info'][$k] = $v;
                            break;

                        // Integer array
                        case 'PrintPageRange':
                            // Cast to integer array
                            foreach ($v as $vK => $vV) {
                                $v[$vK] = (int)$vV;
                            }
                            $o['info'][$k] = array_values($v);
                            break;
                    }
                }
                break;

            case 'out':
                $o = &$this->objects[$id];
                $res = "\n$id 0 obj\n<< ";

                foreach ($o['info'] as $k => $v) {
                    if (is_string($v)) {
                        $v = '/' . $v;
                    } elseif (is_int($v)) {
                        $v = (string) $v;
                    } elseif (is_bool($v)) {
                        $v = ($v ? 'true' : 'false');
                    } elseif (is_array($v)) {
                        $v = '[' . implode(' ', $v) . ']';
                    }
                    $res .= "\n/$k $v";
                }
                $res .= "\n>>\nendobj";

                return $res;
        }

        return null;
    }

    /**
     * define the document catalog, the overall controller for the document
     *
     * @param $id
     * @param $action
     * @param string|array $options
     * @return string|null
     */
    protected function o_catalog($id, $action, $options = '')
    {
        if ($action !== 'new') {
            $o = &$this->objects[$id];
        }

        switch ($action) {
            case 'new':
                $this->objects[$id] = ['t' => 'catalog', 'info' => []];
                $this->catalogId = $id;
                break;

            case 'acroform':
            case 'outlines':
            case 'pages':
            case 'openHere':
            case 'names':
                $o['info'][$action] = $options;
                break;

            case 'viewerPreferences':
                if (!isset($o['info']['viewerPreferences'])) {
                    $this->numObj++;
                    $this->o_viewerPreferences($this->numObj, 'new');
                    $o['info']['viewerPreferences'] = $this->numObj;
                }

                $vp = $o['info']['viewerPreferences'];
                $this->o_viewerPreferences($vp, 'add', $options);

                break;

            case 'out':
                $res = "\n$id 0 obj\n<< /Type /Catalog";

                foreach ($o['info'] as $k => $v) {
                    switch ($k) {
                        case 'outlines':
                            $res .= "\n/Outlines $v 0 R";
                            break;

                        case 'pages':
                            $res .= "\n/Pages $v 0 R";
                            break;

                        case 'viewerPreferences':
                            $res .= "\n/ViewerPreferences $v 0 R";
                            break;

                        case 'openHere':
                            $res .= "\n/OpenAction $v 0 R";
                            break;

                        case 'names':
                            $res .= "\n/Names $v 0 R";
                            break;

                        case 'acroform':
                            $res .= "\n/AcroForm $v 0 R";
                            break;
                    }
                }

                $res .= " >>\nendobj";

                return $res;
        }

        return null;
    }

    /**
     * object which is a parent to the pages in the document
     *
     * @param $id
     * @param $action
     * @param string $options
     * @return string|null
     */
    protected function o_pages($id, $action, $options = '')
    {
        if ($action !== 'new') {
            $o = &$this->objects[$id];
        }

        switch ($action) {
            case 'new':
                $this->objects[$id] = ['t' => 'pages', 'info' => []];
                $this->o_catalog($this->catalogId, 'pages', $id);
                break;

            case 'page':
                if (!is_array($options)) {
                    // then it will just be the id of the new page
                    $o['info']['pages'][] = $options;
                } else {
                    // then it should be an array having 'id','rid','pos', where rid=the page to which this one will be placed relative
                    // and pos is either 'before' or 'after', saying where this page will fit.
                    if (isset($options['id']) && isset($options['rid']) && isset($options['pos'])) {
                        $i = array_search($options['rid'], $o['info']['pages']);
                        if (isset($o['info']['pages'][$i]) && $o['info']['pages'][$i] == $options['rid']) {

                            // then there is a match
                            // make a space
                            switch ($options['pos']) {
                                case 'before':
                                    $k = $i;
                                    break;

                                case 'after':
                                    $k = $i + 1;
                                    break;

                                default:
                                    $k = -1;
                                    break;
                            }

                            if ($k >= 0) {
                                for ($j = count($o['info']['pages']) - 1; $j >= $k; $j--) {
                                    $o['info']['pages'][$j + 1] = $o['info']['pages'][$j];
                                }

                                $o['info']['pages'][$k] = $options['id'];
                            }
                        }
                    }
                }
                break;

            case 'procset':
                $o['info']['procset'] = $options;
                break;

            case 'mediaBox':
                $o['info']['mediaBox'] = $options;
                // which should be an array of 4 numbers
                $this->currentPageSize = ['width' => $options[2], 'height' => $options[3]];
                break;

            case 'font':
                $o['info']['fonts'][] = ['objNum' => $options['objNum'], 'fontNum' => $options['fontNum']];
                break;

            case 'extGState':
                $o['info']['extGStates'][] = ['objNum' => $options['objNum'], 'stateNum' => $options['stateNum']];
                break;

            case 'xObject':
                $o['info']['xObjects'][] = ['objNum' => $options['objNum'], 'label' => $options['label']];
                break;

            case 'out':
                if (count($o['info']['pages'])) {
                    $res = "\n$id 0 obj\n<< /Type /Pages\n/Kids [";
                    foreach ($o['info']['pages'] as $v) {
                        $res .= "$v 0 R\n";
                    }

                    $res .= "]\n/Count " . count($this->objects[$id]['info']['pages']);

                    if ((isset($o['info']['fonts']) && count($o['info']['fonts'])) ||
                        isset($o['info']['procset']) ||
                        (isset($o['info']['extGStates']) && count($o['info']['extGStates']))
                    ) {
                        $res .= "\n/Resources <<";

                        if (isset($o['info']['procset'])) {
                            $res .= "\n/ProcSet " . $o['info']['procset'] . " 0 R";
                        }

                        if (isset($o['info']['fonts']) && count($o['info']['fonts'])) {
                            $res .= "\n/Font << ";
                            foreach ($o['info']['fonts'] as $finfo) {
                                $res .= "\n/F" . $finfo['fontNum'] . " " . $finfo['objNum'] . " 0 R";
                            }
                            $res .= "\n>>";
                        }

                        if (isset($o['info']['xObjects']) && count($o['info']['xObjects'])) {
                            $res .= "\n/XObject << ";
                            foreach ($o['info']['xObjects'] as $finfo) {
                                $res .= "\n/" . $finfo['label'] . " " . $finfo['objNum'] . " 0 R";
                            }
                            $res .= "\n>>";
                        }

                        if (isset($o['info']['extGStates']) && count($o['info']['extGStates'])) {
                            $res .= "\n/ExtGState << ";
                            foreach ($o['info']['extGStates'] as $gstate) {
                                $res .= "\n/GS" . $gstate['stateNum'] . " " . $gstate['objNum'] . " 0 R";
                            }
                            $res .= "\n>>";
                        }

                        $res .= "\n>>";
                        if (isset($o['info']['mediaBox'])) {
                            $tmp = $o['info']['mediaBox'];
                            $res .= "\n/MediaBox [" . sprintf(
                                    '%.3F %.3F %.3F %.3F',
                                    $tmp[0],
                                    $tmp[1],
                                    $tmp[2],
                                    $tmp[3]
                                ) . ']';
                        }
                    }

                    $res .= "\n >>\nendobj";
                } else {
                    $res = "\n$id 0 obj\n<< /Type /Pages\n/Count 0\n>>\nendobj";
                }

                return $res;
        }

        return null;
    }

    /**
     * define the outlines in the doc, empty for now
     *
     * @param $id
     * @param $action
     * @param string $options
     * @return string|null
     */
    protected function o_outlines($id, $action, $options = '')
    {
        if ($action !== 'new') {
            $o = &$this->objects[$id];
        }

        switch ($action) {
            case 'new':
                $this->objects[$id] = ['t' => 'outlines', 'info' => ['outlines' => []]];
                $this->o_catalog($this->catalogId, 'outlines', $id);
                break;

            case 'outline':
                $o['info']['outlines'][] = $options;
                break;

            case 'out':
                if (count($o['info']['outlines'])) {
                    $res = "\n$id 0 obj\n<< /Type /Outlines /Kids [";
                    foreach ($o['info']['outlines'] as $v) {
                        $res .= "$v 0 R ";
                    }

                    $res .= "] /Count " . count($o['info']['outlines']) . " >>\nendobj";
                } else {
                    $res = "\n$id 0 obj\n<< /Type /Outlines /Count 0 >>\nendobj";
                }

                return $res;
        }

        return null;
    }

    /**
     * an object to hold the font description
     *
     * @param $id
     * @param $action
     * @param string|array $options
     * @return string|null
     * @throws FontNotFoundException
     */
    protected function o_font($id, $action, $options = '')
    {
        if ($action !== 'new') {
            $o = &$this->objects[$id];
        }

        switch ($action) {
            case 'new':
                $this->objects[$id] = [
                    't'    => 'font',
                    'info' => [
                        'name'         => $options['name'],
                        'fontFileName' => $options['fontFileName'],
                        'SubType'      => 'Type1',
                        'isSubsetting'   => $options['isSubsetting']
                    ]
                ];
                $fontNum = $this->numFonts;
                $this->objects[$id]['info']['fontNum'] = $fontNum;

                // deal with the encoding and the differences
                if (isset($options['differences'])) {
                    // then we'll need an encoding dictionary
                    $this->numObj++;
                    $this->o_fontEncoding($this->numObj, 'new', $options);
                    $this->objects[$id]['info']['encodingDictionary'] = $this->numObj;
                } else {
                    if (isset($options['encoding'])) {
                        // we can specify encoding here
                        switch ($options['encoding']) {
                            case 'WinAnsiEncoding':
                            case 'MacRomanEncoding':
                            case 'MacExpertEncoding':
                                $this->objects[$id]['info']['encoding'] = $options['encoding'];
                                break;

                            case 'none':
                                break;

                            default:
                                $this->objects[$id]['info']['encoding'] = 'WinAnsiEncoding';
                                break;
                        }
                    } else {
                        $this->objects[$id]['info']['encoding'] = 'WinAnsiEncoding';
                    }
                }

                if ($this->fonts[$options['fontFileName']]['isUnicode']) {
                    // For Unicode fonts, we need to incorporate font data into
                    // sub-sections that are linked from the primary font section.
                    // Look at o_fontGIDtoCID and o_fontDescendentCID functions
                    // for more information.
                    //
                    // All of this code is adapted from the excellent changes made to
                    // transform FPDF to TCPDF (http://tcpdf.sourceforge.net/)

                    $toUnicodeId = ++$this->numObj;
                    $this->o_toUnicode($toUnicodeId, 'new');
                    $this->objects[$id]['info']['toUnicode'] = $toUnicodeId;

                    $cidFontId = ++$this->numObj;
                    $this->o_fontDescendentCID($cidFontId, 'new', $options);
                    $this->objects[$id]['info']['cidFont'] = $cidFontId;
                }

                // also tell the pages node about the new font
                $this->o_pages($this->currentNode, 'font', ['fontNum' => $fontNum, 'objNum' => $id]);
                break;

            case 'add':
                $font_options = $this->processFont($id, $o['info']);

                if ($font_options !== false) {
                    foreach ($font_options as $k => $v) {
                        switch ($k) {
                            case 'BaseFont':
                                $o['info']['name'] = $v;
                                break;
                            case 'FirstChar':
                            case 'LastChar':
                            case 'Widths':
                            case 'FontDescriptor':
                            case 'SubType':
                                $this->addMessage('o_font ' . $k . " : " . $v);
                                $o['info'][$k] = $v;
                                break;
                        }
                    }

                    // pass values down to descendent font
                    if (isset($o['info']['cidFont'])) {
                        $this->o_fontDescendentCID($o['info']['cidFont'], 'add', $font_options);
                    }
                }
                break;

            case 'out':
                if ($this->fonts[$this->objects[$id]['info']['fontFileName']]['isUnicode']) {
                    // For Unicode fonts, we need to incorporate font data into
                    // sub-sections that are linked from the primary font section.
                    // Look at o_fontGIDtoCID and o_fontDescendentCID functions
                    // for more information.
                    //
                    // All of this code is adapted from the excellent changes made to
                    // transform FPDF to TCPDF (http://tcpdf.sourceforge.net/)

                    $res = "\n$id 0 obj\n<</Type /Font\n/Subtype /Type0\n";
                    $res .= "/BaseFont /" . $o['info']['name'] . "\n";

                    // The horizontal identity mapping for 2-byte CIDs; may be used
                    // with CIDFonts using any Registry, Ordering, and Supplement values.
                    $res .= "/Encoding /Identity-H\n";
                    $res .= "/DescendantFonts [" . $o['info']['cidFont'] . " 0 R]\n";
                    $res .= "/ToUnicode " . $o['info']['toUnicode'] . " 0 R\n";
                    $res .= ">>\n";
                    $res .= "endobj";
                } else {
                    $res = "\n$id 0 obj\n<< /Type /Font\n/Subtype /" . $o['info']['SubType'] . "\n";
                    $res .= "/Name /F" . $o['info']['fontNum'] . "\n";
                    $res .= "/BaseFont /" . $o['info']['name'] . "\n";

                    if (isset($o['info']['encodingDictionary'])) {
                        // then place a reference to the dictionary
                        $res .= "/Encoding " . $o['info']['encodingDictionary'] . " 0 R\n";
                    } else {
                        if (isset($o['info']['encoding'])) {
                            // use the specified encoding
                            $res .= "/Encoding /" . $o['info']['encoding'] . "\n";
                        }
                    }

                    if (isset($o['info']['FirstChar'])) {
                        $res .= "/FirstChar " . $o['info']['FirstChar'] . "\n";
                    }

                    if (isset($o['info']['LastChar'])) {
                        $res .= "/LastChar " . $o['info']['LastChar'] . "\n";
                    }

                    if (isset($o['info']['Widths'])) {
                        $res .= "/Widths " . $o['info']['Widths'] . " 0 R\n";
                    }

                    if (isset($o['info']['FontDescriptor'])) {
                        $res .= "/FontDescriptor " . $o['info']['FontDescriptor'] . " 0 R\n";
                    }

                    $res .= ">>\n";
                    $res .= "endobj";
                }

                return $res;
        }

        return null;
    }

    protected function getFontSubsettingTag(array $font): string
    {
        // convert font num to hexavigesimal numeral system letters A - Z only
        $base_26 = strtoupper(base_convert($font['fontNum'], 10, 26));
        for ($i = 0; $i < strlen($base_26); $i++) {
            $char = $base_26[$i];
            if ($char <= "9") {
                $base_26[$i] = chr(65 + intval($char));
            } else {
                $base_26[$i] = chr(ord($char) + 10);
            }
        }

        return 'SUB' . str_pad($base_26, 3, 'A', STR_PAD_LEFT);
    }

    /**
     * @param int $fontObjId
     * @param array $object_info
     * @return array|false
     * @throws FontNotFoundException
     */
    private function processFont(int $fontObjId, array $object_info)
    {
        $fontFileName = $object_info['fontFileName'];
        if (!isset($this->fonts[$fontFileName])) {
            return false;
        }

        $font = &$this->fonts[$fontFileName];

        $fileSuffix = $font['fileSuffix'];
        $fileSuffixLower = strtolower($font['fileSuffix']);
        $fbfile = "$fontFileName.$fileSuffix";
        $isTtfFont = $fileSuffixLower === 'ttf';
        $isPfbFont = $fileSuffixLower === 'pfb';

        $this->addMessage('selectFont: checking for - ' . $fbfile);

        if (!$fileSuffix) {
            $this->addMessage(
                'selectFont: pfb or ttf file not found, ok if this is one of the 14 standard fonts'
            );

            return false;
        } else {
            $adobeFontName = isset($font['PostScriptName']) ? $font['PostScriptName'] : $font['FontName'];
            //        $fontObj = $this->numObj;
            $this->addMessage("selectFont: adding font file - $fbfile - $adobeFontName");

            // find the array of font widths, and put that into an object.
            $firstChar = -1;
            $lastChar = 0;
            $widths = [];
            $cid_widths = [];

            foreach ($font['C'] as $num => $d) {
                if (intval($num) > 0 || $num == '0') {
                    if (!$font['isUnicode']) {
                        // With Unicode, widths array isn't used
                        if ($lastChar > 0 && $num > $lastChar + 1) {
                            for ($i = $lastChar + 1; $i < $num; $i++) {
                                $widths[] = 0;
                            }
                        }
                    }

                    $widths[] = $d;

                    if ($font['isUnicode']) {
                        $cid_widths[$num] = $d;
                    }

                    if ($firstChar == -1) {
                        $firstChar = $num;
                    }

                    $lastChar = $num;
                }
            }

            // also need to adjust the widths for the differences array
            if (isset($object['differences'])) {
                foreach ($object['differences'] as $charNum => $charName) {
                    if ($charNum > $lastChar) {
                        if (!$object['isUnicode']) {
                            // With Unicode, widths array isn't used
                            for ($i = $lastChar + 1; $i <= $charNum; $i++) {
                                $widths[] = 0;
                            }
                        }

                        $lastChar = $charNum;
                    }

                    if (isset($font['C'][$charName])) {
                        $widths[$charNum - $firstChar] = $font['C'][$charName];
                        if ($font['isUnicode']) {
                            $cid_widths[$charName] = $font['C'][$charName];
                        }
                    }
                }
            }

            if ($font['isUnicode']) {
                $font['CIDWidths'] = $cid_widths;
            }

            $this->addMessage('selectFont: FirstChar = ' . $firstChar);
            $this->addMessage('selectFont: LastChar = ' . $lastChar);

            $widthid = -1;

            if (!$font['isUnicode']) {
                // With Unicode, widths array isn't used

                $this->numObj++;
                $this->o_contents($this->numObj, 'new', 'raw');
                $this->objects[$this->numObj]['c'] .= '[' . implode(' ', $widths) . ']';
                $widthid = $this->numObj;
            }

            $missing_width = 500;
            $stemV = 70;

            if (isset($font['MissingWidth'])) {
                $missing_width = $font['MissingWidth'];
            }
            if (isset($font['StdVW'])) {
                $stemV = $font['StdVW'];
            } else {
                if (isset($font['Weight']) && preg_match('!(bold|black)!i', $font['Weight'])) {
                    $stemV = 120;
                }
            }

            // load the pfb file, and put that into an object too.
            // note that pdf supports only binary format type 1 font files, though there is a
            // simple utility to convert them from pfa to pfb.
            if (!$font['isSubsetting']) {
                $data = file_get_contents($fbfile);
            } else {
                $adobeFontName = $this->getFontSubsettingTag($font) . '+' . $adobeFontName;
                $this->stringSubsets[$fontFileName][] = 32; // Force space if not in yet

                $subset = $this->stringSubsets[$fontFileName];
                sort($subset);

                // Load font
                $font_obj = Font::load($fbfile);
                $font_obj->parse();

                // Define subset
                $font_obj->setSubset($subset);
                $font_obj->reduce();

                // Write new font
                $tmp_name = @tempnam($this->tmp, "cpdf_subset_");
                $font_obj->open($tmp_name, BinaryStream::modeReadWrite);
                $font_obj->encode(["OS/2"]);
                $font_obj->close();

                // Parse the new font to get cid2gid and widths
                $font_obj = Font::load($tmp_name);

                // Find Unicode char map table
                $subtable = null;
                foreach ($font_obj->getData("cmap", "subtables") as $_subtable) {
                    if ($_subtable["platformID"] == 0 || $_subtable["platformID"] == 3 && $_subtable["platformSpecificID"] == 1) {
                        $subtable = $_subtable;
                        break;
                    }
                }

                if ($subtable) {
                    $glyphIndexArray = $subtable["glyphIndexArray"];
                    $hmtx = $font_obj->getData("hmtx");

                    unset($glyphIndexArray[0xFFFF]);

                    $cidtogid = str_pad('', max(array_keys($glyphIndexArray)) * 2 + 1, "\x00");
                    $font['CIDWidths'] = [];
                    foreach ($glyphIndexArray as $cid => $gid) {
                        if ($cid >= 0 && $cid < 0xFFFF && $gid) {
                            $cidtogid[$cid * 2] = chr($gid >> 8);
                            $cidtogid[$cid * 2 + 1] = chr($gid & 0xFF);
                        }

                        $width = $font_obj->normalizeFUnit(isset($hmtx[$gid]) ? $hmtx[$gid][0] : $hmtx[0][0]);
                        $font['CIDWidths'][$cid] = $width;
                    }

                    $font['CIDtoGID'] = base64_encode(gzcompress($cidtogid));
                    $font['CIDtoGID_Compressed'] = true;

                    $data = file_get_contents($tmp_name);
                } else {
                    $data = file_get_contents($fbfile);
                }

                $font_obj->close();
                unlink($tmp_name);
            }

            // create the font descriptor
            $this->numObj++;
            $fontDescriptorId = $this->numObj;

            $this->numObj++;
            $pfbid = $this->numObj;

            // determine flags (more than a little flakey, hopefully will not matter much)
            $flags = 0;

            if ($font['ItalicAngle'] != 0) {
                $flags += pow(2, 6);
            }

            if ($font['IsFixedPitch'] === 'true') {
                $flags += 1;
            }

            $flags += pow(2, 5); // assume non-sybolic
            $list = [
                'Ascent'       => 'Ascender',
                'CapHeight'    => 'Ascender', //FIXME: php-font-lib is not grabbing this value, so we'll fake it and use the Ascender value // 'CapHeight'
                'MissingWidth' => 'MissingWidth',
                'Descent'      => 'Descender',
                'FontBBox'     => 'FontBBox',
                'ItalicAngle'  => 'ItalicAngle'
            ];
            $fdopt = [
                'Flags'    => $flags,
                'FontName' => $adobeFontName,
                'StemV'    => $stemV
            ];

            foreach ($list as $k => $v) {
                if (isset($font[$v])) {
                    $fdopt[$k] = $font[$v];
                }
            }

            if ($isPfbFont) {
                $fdopt['FontFile'] = $pfbid;
            } elseif ($isTtfFont) {
                $fdopt['FontFile2'] = $pfbid;
            }

            $this->o_fontDescriptor($fontDescriptorId, 'new', $fdopt);

            // embed the font program
            $this->o_contents($this->numObj, 'new');
            $this->objects[$pfbid]['c'] .= $data;

            // determine the cruicial lengths within this file
            if ($isPfbFont) {
                $l1 = strpos($data, 'eexec') + 6;
                $l2 = strpos($data, '00000000') - $l1;
                $l3 = mb_strlen($data, '8bit') - $l2 - $l1;
                $this->o_contents(
                    $this->numObj,
                    'add',
                    ['Length1' => $l1, 'Length2' => $l2, 'Length3' => $l3]
                );
            } elseif ($isTtfFont) {
                $l1 = mb_strlen($data, '8bit');
                $this->o_contents($this->numObj, 'add', ['Length1' => $l1]);
            }

            // tell the font object about all this new stuff
            $options = [
                'BaseFont'       => $adobeFontName,
                'MissingWidth'   => $missing_width,
                'Widths'         => $widthid,
                'FirstChar'      => $firstChar,
                'LastChar'       => $lastChar,
                'FontDescriptor' => $fontDescriptorId
            ];

            if ($isTtfFont) {
                $options['SubType'] = 'TrueType';
            }

            $this->addMessage("adding extra info to font.($fontObjId)");

            foreach ($options as $fk => $fv) {
                $this->addMessage("$fk : $fv");
            }
        }

        return $options;
    }

    /**
     * A toUnicode section, needed for unicode fonts
     *
     * @param $id
     * @param $action
     * @return null|string
     */
    protected function o_toUnicode($id, $action)
    {
        switch ($action) {
            case 'new':
                $this->objects[$id] = [
                    't'    => 'toUnicode'
                ];
                break;
            case 'add':
                break;
            case 'out':
                $ordering = 'UCS';
                $registry = 'Adobe';

                if ($this->encrypted) {
                    $this->encryptInit($id);
                    $ordering = $this->ARC4($ordering);
                    $registry = $this->filterText($this->ARC4($registry), false, false);
                }

                $stream = <<<EOT
/CIDInit /ProcSet findresource begin
12 dict begin
begincmap
/CIDSystemInfo
<</Registry ($registry)
/Ordering ($ordering)
/Supplement 0
>> def
/CMapName /Adobe-Identity-UCS def
/CMapType 2 def
1 begincodespacerange
<0000> <FFFF>
endcodespacerange
1 beginbfrange
<0000> <FFFF> <0000>
endbfrange
endcmap
CMapName currentdict /CMap defineresource pop
end
end
EOT;

                $res = "\n$id 0 obj\n";
                $res .= "<</Length " . mb_strlen($stream, '8bit') . " >>\n";
                $res .= "stream\n" . $stream . "\nendstream" . "\nendobj";

                return $res;
        }

        return null;
    }

    /**
     * a font descriptor, needed for including additional fonts
     *
     * @param $id
     * @param $action
     * @param string $options
     * @return null|string
     */
    protected function o_fontDescriptor($id, $action, $options = '')
    {
        if ($action !== 'new') {
            $o = &$this->objects[$id];
        }

        switch ($action) {
            case 'new':
                $this->objects[$id] = ['t' => 'fontDescriptor', 'info' => $options];
                break;

            case 'out':
                $res = "\n$id 0 obj\n<< /Type /FontDescriptor\n";
                foreach ($o['info'] as $label => $value) {
                    switch ($label) {
                        case 'Ascent':
                        case 'CapHeight':
                        case 'Descent':
                        case 'Flags':
                        case 'ItalicAngle':
                        case 'StemV':
                        case 'AvgWidth':
                        case 'Leading':
                        case 'MaxWidth':
                        case 'MissingWidth':
                        case 'StemH':
                        case 'XHeight':
                        case 'CharSet':
                            if (mb_strlen($value, '8bit')) {
                                $res .= "/$label $value\n";
                            }

                            break;
                        case 'FontFile':
                        case 'FontFile2':
                        case 'FontFile3':
                            $res .= "/$label $value 0 R\n";
                            break;

                        case 'FontBBox':
                            $res .= "/$label [$value[0] $value[1] $value[2] $value[3]]\n";
                            break;

                        case 'FontName':
                            $res .= "/$label /$value\n";
                            break;
                    }
                }

                $res .= ">>\nendobj";

                return $res;
        }

        return null;
    }

    /**
     * the font encoding
     *
     * @param $id
     * @param $action
     * @param string $options
     * @return null|string
     */
    protected function o_fontEncoding($id, $action, $options = '')
    {
        if ($action !== 'new') {
            $o = &$this->objects[$id];
        }

        switch ($action) {
            case 'new':
                // the options array should contain 'differences' and maybe 'encoding'
                $this->objects[$id] = ['t' => 'fontEncoding', 'info' => $options];
                break;

            case 'out':
                $res = "\n$id 0 obj\n<< /Type /Encoding\n";
                if (!isset($o['info']['encoding'])) {
                    $o['info']['encoding'] = 'WinAnsiEncoding';
                }

                if ($o['info']['encoding'] !== 'none') {
                    $res .= "/BaseEncoding /" . $o['info']['encoding'] . "\n";
                }

                $res .= "/Differences \n[";

                $onum = -100;

                foreach ($o['info']['differences'] as $num => $label) {
                    if ($num != $onum + 1) {
                        // we cannot make use of consecutive numbering
                        $res .= "\n$num /$label";
                    } else {
                        $res .= " /$label";
                    }

                    $onum = $num;
                }

                $res .= "\n]\n>>\nendobj";

                return $res;
        }

        return null;
    }

    /**
     * a descendent cid font, needed for unicode fonts
     *
     * @param $id
     * @param $action
     * @param string|array $options
     * @return null|string
     */
    protected function o_fontDescendentCID($id, $action, $options = '')
    {
        if ($action !== 'new') {
            $o = &$this->objects[$id];
        }

        switch ($action) {
            case 'new':
                $this->objects[$id] = ['t' => 'fontDescendentCID', 'info' => $options];

                // we need a CID system info section
                $cidSystemInfoId = ++$this->numObj;
                $this->o_cidSystemInfo($cidSystemInfoId, 'new');
                $this->objects[$id]['info']['cidSystemInfo'] = $cidSystemInfoId;

                // and a CID to GID map
                $cidToGidMapId = ++$this->numObj;
                $this->o_fontGIDtoCIDMap($cidToGidMapId, 'new', $options);
                $this->objects[$id]['info']['cidToGidMap'] = $cidToGidMapId;
                break;

            case 'add':
                foreach ($options as $k => $v) {
                    switch ($k) {
                        case 'BaseFont':
                            $o['info']['name'] = $v;
                            break;

                        case 'FirstChar':
                        case 'LastChar':
                        case 'MissingWidth':
                        case 'FontDescriptor':
                        case 'SubType':
                            $this->addMessage("o_fontDescendentCID $k : $v");
                            $o['info'][$k] = $v;
                            break;
                    }
                }

                // pass values down to cid to gid map
                $this->o_fontGIDtoCIDMap($o['info']['cidToGidMap'], 'add', $options);
                break;

            case 'out':
                $res = "\n$id 0 obj\n";
                $res .= "<</Type /Font\n";
                $res .= "/Subtype /CIDFontType2\n";
                $res .= "/BaseFont /" . $o['info']['name'] . "\n";
                $res .= "/CIDSystemInfo " . $o['info']['cidSystemInfo'] . " 0 R\n";
                //      if (isset($o['info']['FirstChar'])) {
                //        $res.= "/FirstChar ".$o['info']['FirstChar']."\n";
                //      }

                //      if (isset($o['info']['LastChar'])) {
                //        $res.= "/LastChar ".$o['info']['LastChar']."\n";
                //      }
                if (isset($o['info']['FontDescriptor'])) {
                    $res .= "/FontDescriptor " . $o['info']['FontDescriptor'] . " 0 R\n";
                }

                if (isset($o['info']['MissingWidth'])) {
                    $res .= "/DW " . $o['info']['MissingWidth'] . "\n";
                }

                if (isset($o['info']['fontFileName']) && isset($this->fonts[$o['info']['fontFileName']]['CIDWidths'])) {
                    $cid_widths = &$this->fonts[$o['info']['fontFileName']]['CIDWidths'];
                    $w = '';
                    foreach ($cid_widths as $cid => $width) {
                        $w .= "$cid [$width] ";
                    }
                    $res .= "/W [$w]\n";
                }

                $res .= "/CIDToGIDMap " . $o['info']['cidToGidMap'] . " 0 R\n";
                $res .= ">>\n";
                $res .= "endobj";

                return $res;
        }

        return null;
    }

    /**
     * CID system info section, needed for unicode fonts
     *
     * @param $id
     * @param $action
     * @return null|string
     */
    protected function o_cidSystemInfo($id, $action)
    {
        switch ($action) {
            case 'new':
                $this->objects[$id] = [
                    't' => 'cidSystemInfo'
                ];
                break;
            case 'add':
                break;
            case 'out':
                $ordering = 'UCS';
                $registry = 'Adobe';

                if ($this->encrypted) {
                    $this->encryptInit($id);
                    $ordering = $this->ARC4($ordering);
                    $registry = $this->ARC4($registry);
                }


                $res = "\n$id 0 obj\n";

                $res .= '<</Registry (' . $registry . ")\n"; // A string identifying an issuer of character collections
                $res .= '/Ordering (' . $ordering . ")\n"; // A string that uniquely names a character collection issued by a specific registry
                $res .= "/Supplement 0\n"; // The supplement number of the character collection.
                $res .= ">>";

                $res .= "\nendobj";

                return $res;
        }

        return null;
    }

    /**
     * a font glyph to character map, needed for unicode fonts
     *
     * @param $id
     * @param $action
     * @param string $options
     * @return null|string
     */
    protected function o_fontGIDtoCIDMap($id, $action, $options = '')
    {
        if ($action !== 'new') {
            $o = &$this->objects[$id];
        }

        switch ($action) {
            case 'new':
                $this->objects[$id] = ['t' => 'fontGIDtoCIDMap', 'info' => $options];
                break;

            case 'out':
                $res = "\n$id 0 obj\n";
                $fontFileName = $o['info']['fontFileName'];
                $tmp = $this->fonts[$fontFileName]['CIDtoGID'] = base64_decode($this->fonts[$fontFileName]['CIDtoGID']);

                $compressed = isset($this->fonts[$fontFileName]['CIDtoGID_Compressed']) &&
                    $this->fonts[$fontFileName]['CIDtoGID_Compressed'];

                if (!$compressed && isset($o['raw'])) {
                    $res .= $tmp;
                } else {
                    $res .= "<<";

                    if (!$compressed && $this->compressionReady && $this->options['compression']) {
                        // then implement ZLIB based compression on this content stream
                        $compressed = true;
                        $tmp = gzcompress($tmp, 6);
                    }
                    if ($compressed) {
                        $res .= "\n/Filter /FlateDecode";
                    }

                    if ($this->encrypted) {
                        $this->encryptInit($id);
                        $tmp = $this->ARC4($tmp);
                    }

                    $res .= "\n/Length " . mb_strlen($tmp, '8bit') . ">>\nstream\n$tmp\nendstream";
                }

                $res .= "\nendobj";

                return $res;
        }

        return null;
    }

    /**
     * the document procset, solves some problems with printing to old PS printers
     *
     * @param $id
     * @param $action
     * @param string $options
     * @return null|string
     */
    protected function o_procset($id, $action, $options = '')
    {
        if ($action !== 'new') {
            $o = &$this->objects[$id];
        }

        switch ($action) {
            case 'new':
                $this->objects[$id] = ['t' => 'procset', 'info' => ['PDF' => 1, 'Text' => 1]];
                $this->o_pages($this->currentNode, 'procset', $id);
                $this->procsetObjectId = $id;
                break;

            case 'add':
                // this is to add new items to the procset list, despite the fact that this is considered
                // obsolete, the items are required for printing to some postscript printers
                switch ($options) {
                    case 'ImageB':
                    case 'ImageC':
                    case 'ImageI':
                        $o['info'][$options] = 1;
                        break;
                }
                break;

            case 'out':
                $res = "\n$id 0 obj\n[";
                foreach ($o['info'] as $label => $val) {
                    $res .= "/$label ";
                }
                $res .= "]\nendobj";

                return $res;
        }

        return null;
    }

    /**
     * define the document information
     *
     * @param $id
     * @param $action
     * @param string $options
     * @return null|string
     */
    protected function o_info($id, $action, $options = '')
    {
        switch ($action) {
            case 'new':
                $this->infoObject = $id;
                $date = 'D:' . @date('Ymd');
                $this->objects[$id] = [
                    't'    => 'info',
                    'info' => [
                        'Producer'      => 'CPDF (dompdf)',
                        'CreationDate' => $date
                    ]
                ];
                break;
            case 'Title':
            case 'Author':
            case 'Subject':
            case 'Keywords':
            case 'Creator':
            case 'Producer':
            case 'CreationDate':
            case 'ModDate':
            case 'Trapped':
                $this->objects[$id]['info'][$action] = $options;
                break;

            case 'out':
                $encrypted = $this->encrypted;
                if ($encrypted) {
                    $this->encryptInit($id);
                }

                $res = "\n$id 0 obj\n<<\n";
                $o = &$this->objects[$id];
                foreach ($o['info'] as $k => $v) {
                    $res .= "/$k (";

                    // dates must be outputted as-is, without Unicode transformations
                    if ($k !== 'CreationDate' && $k !== 'ModDate') {
                        $v = $this->utf8toUtf16BE($v);
                    }

                    if ($encrypted) {
                        $v = $this->ARC4($v);
                    }

                    $res .= $this->filterText($v, false, false);
                    $res .= ")\n";
                }

                $res .= ">>\nendobj";

                return $res;
        }

        return null;
    }

    /**
     * an action object, used to link to URLS initially
     *
     * @param $id
     * @param $action
     * @param string $options
     * @return null|string
     */
    protected function o_action($id, $action, $options = '')
    {
        if ($action !== 'new') {
            $o = &$this->objects[$id];
        }

        switch ($action) {
            case 'new':
                if (is_array($options)) {
                    $this->objects[$id] = ['t' => 'action', 'info' => $options, 'type' => $options['type']];
                } else {
                    // then assume a URI action
                    $this->objects[$id] = ['t' => 'action', 'info' => $options, 'type' => 'URI'];
                }
                break;

            case 'out':
                if ($this->encrypted) {
                    $this->encryptInit($id);
                }

                $res = "\n$id 0 obj\n<< /Type /Action";
                switch ($o['type']) {
                    case 'ilink':
                        if (!isset($this->destinations[(string)$o['info']['label']])) {
                            break;
                        }

                        // there will be an 'label' setting, this is the name of the destination
                        $res .= "\n/S /GoTo\n/D " . $this->destinations[(string)$o['info']['label']] . " 0 R";
                        break;

                    case 'URI':
                        $res .= "\n/S /URI\n/URI (";
                        if ($this->encrypted) {
                            $res .= $this->filterText($this->ARC4($o['info']), false, false);
                        } else {
                            $res .= $this->filterText($o['info'], false, false);
                        }

                        $res .= ")";
                        break;
                }

                $res .= "\n>>\nendobj";

                return $res;
        }

        return null;
    }

    /**
     * an annotation object, this will add an annotation to the current page.
     * initially will support just link annotations
     *
     * @param $id
     * @param $action
     * @param string $options
     * @return null|string
     */
    protected function o_annotation($id, $action, $options = '')
    {
        if ($action !== 'new') {
            $o = &$this->objects[$id];
        }

        switch ($action) {
            case 'new':
                // add the annotation to the current page
                $pageId = $this->currentPage;
                $this->o_page($pageId, 'annot', $id);

                // and add the action object which is going to be required
                switch ($options['type']) {
                    case 'link':
                        $this->objects[$id] = ['t' => 'annotation', 'info' => $options];
                        $this->numObj++;
                        $this->o_action($this->numObj, 'new', $options['url']);
                        $this->objects[$id]['info']['actionId'] = $this->numObj;
                        break;

                    case 'ilink':
                        // this is to a named internal link
                        $label = $options['label'];
                        $this->objects[$id] = ['t' => 'annotation', 'info' => $options];
                        $this->numObj++;
                        $this->o_action($this->numObj, 'new', ['type' => 'ilink', 'label' => $label]);
                        $this->objects[$id]['info']['actionId'] = $this->numObj;
                        break;
                }
                break;

            case 'out':
                $res = "\n$id 0 obj\n<< /Type /Annot";
                switch ($o['info']['type']) {
                    case 'link':
                    case 'ilink':
                        $res .= "\n/Subtype /Link";
                        break;
                }
                $res .= "\n/A " . $o['info']['actionId'] . " 0 R";
                $res .= "\n/Border [0 0 0]";
                $res .= "\n/H /I";
                $res .= "\n/Rect [ ";

                foreach ($o['info']['rect'] as $v) {
                    $res .= sprintf("%.4F ", $v);
                }

                $res .= "]";
                $res .= "\n>>\nendobj";

                return $res;
        }

        return null;
    }

    /**
     * a page object, it also creates a contents object to hold its contents
     *
     * @param $id
     * @param $action
     * @param string $options
     * @return null|string
     */
    protected function o_page($id, $action, $options = '')
    {
        if ($action !== 'new') {
            $o = &$this->objects[$id];
        }

        switch ($action) {
            case 'new':
                $this->numPages++;
                $this->objects[$id] = [
                    't'    => 'page',
                    'info' => [
                        'parent'  => $this->currentNode,
                        'pageNum' => $this->numPages,
                        'mediaBox' => $this->objects[$this->currentNode]['info']['mediaBox']
                    ]
                ];

                if (is_array($options)) {
                    // then this must be a page insertion, array should contain 'rid','pos'=[before|after]
                    $options['id'] = $id;
                    $this->o_pages($this->currentNode, 'page', $options);
                } else {
                    $this->o_pages($this->currentNode, 'page', $id);
                }

                $this->currentPage = $id;
                //make a contents object to go with this page
                $this->numObj++;
                $this->o_contents($this->numObj, 'new', $id);
                $this->currentContents = $this->numObj;
                $this->objects[$id]['info']['contents'] = [];
                $this->objects[$id]['info']['contents'][] = $this->numObj;

                $match = ($this->numPages % 2 ? 'odd' : 'even');
                foreach ($this->addLooseObjects as $oId => $target) {
                    if ($target === 'all' || $match === $target) {
                        $this->objects[$id]['info']['contents'][] = $oId;
                    }
                }
                break;

            case 'content':
                $o['info']['contents'][] = $options;
                break;

            case 'annot':
                // add an annotation to this page
                if (!isset($o['info']['annot'])) {
                    $o['info']['annot'] = [];
                }

                // $options should contain the id of the annotation dictionary
                $o['info']['annot'][] = $options;
                break;

            case 'out':
                $res = "\n$id 0 obj\n<< /Type /Page";
                if (isset($o['info']['mediaBox'])) {
                    $tmp = $o['info']['mediaBox'];
                    $res .= "\n/MediaBox [" . sprintf(
                            '%.3F %.3F %.3F %.3F',
                            $tmp[0],
                            $tmp[1],
                            $tmp[2],
                            $tmp[3]
                        ) . ']';
                }
                $res .= "\n/Parent " . $o['info']['parent'] . " 0 R";

                if (isset($o['info']['annot'])) {
                    $res .= "\n/Annots [";
                    foreach ($o['info']['annot'] as $aId) {
                        $res .= " $aId 0 R";
                    }
                    $res .= " ]";
                }

                $count = count($o['info']['contents']);
                if ($count == 1) {
                    $res .= "\n/Contents " . $o['info']['contents'][0] . " 0 R";
                } else {
                    if ($count > 1) {
                        $res .= "\n/Contents [\n";

                        // reverse the page contents so added objects are below normal content
                        //foreach (array_reverse($o['info']['contents']) as $cId) {
                        // Back to normal now that I've got transparency working --Benj
                        foreach ($o['info']['contents'] as $cId) {
                            $res .= "$cId 0 R\n";
                        }
                        $res .= "]";
                    }
                }

                $res .= "\n>>\nendobj";

                return $res;
        }

        return null;
    }

    /**
     * the contents objects hold all of the content which appears on pages
     *
     * @param $id
     * @param $action
     * @param string|array $options
     * @return null|string
     */
    protected function o_contents($id, $action, $options = '')
    {
        if ($action !== 'new') {
            $o = &$this->objects[$id];
        }

        switch ($action) {
            case 'new':
                $this->objects[$id] = ['t' => 'contents', 'c' => '', 'info' => []];
                if (mb_strlen($options, '8bit') && intval($options)) {
                    // then this contents is the primary for a page
                    $this->objects[$id]['onPage'] = $options;
                } else {
                    if ($options === 'raw') {
                        // then this page contains some other type of system object
                        $this->objects[$id]['raw'] = 1;
                    }
                }
                break;

            case 'add':
                // add more options to the declaration
                foreach ($options as $k => $v) {
                    $o['info'][$k] = $v;
                }

            case 'out':
                $tmp = $o['c'];
                $res = "\n$id 0 obj\n";

                if (isset($this->objects[$id]['raw'])) {
                    $res .= $tmp;
                } else {
                    $res .= "<<";
                    if ($this->compressionReady && $this->options['compression']) {
                        // then implement ZLIB based compression on this content stream
                        $res .= " /Filter /FlateDecode";
                        $tmp = gzcompress($tmp, 6);
                    }

                    if ($this->encrypted) {
                        $this->encryptInit($id);
                        $tmp = $this->ARC4($tmp);
                    }

                    foreach ($o['info'] as $k => $v) {
                        $res .= "\n/$k $v";
                    }

                    $res .= "\n/Length " . mb_strlen($tmp, '8bit') . " >>\nstream\n$tmp\nendstream";
                }

                $res .= "\nendobj";

                return $res;
        }

        return null;
    }

    /**
     * @param $id
     * @param $action
     * @return string|null
     */
    protected function o_embedjs($id, $action)
    {
        switch ($action) {
            case 'new':
                $this->objects[$id] = [
                    't'    => 'embedjs',
                    'info' => [
                        'Names' => '[(EmbeddedJS) ' . ($id + 1) . ' 0 R]'
                    ]
                ];
                break;

            case 'out':
                $o = &$this->objects[$id];
                $res = "\n$id 0 obj\n<< ";
                foreach ($o['info'] as $k => $v) {
                    $res .= "\n/$k $v";
                }
                $res .= "\n>>\nendobj";

                return $res;
        }

        return null;
    }

    /**
     * @param $id
     * @param $action
     * @param string $code
     * @return null|string
     */
    protected function o_javascript($id, $action, $code = '')
    {
        switch ($action) {
            case 'new':
                $this->objects[$id] = [
                    't'    => 'javascript',
                    'info' => [
                        'S'  => '/JavaScript',
                        'JS' => '(' . $this->filterText($code, true, false) . ')',
                    ]
                ];
                break;

            case 'out':
                $o = &$this->objects[$id];
                $res = "\n$id 0 obj\n<< ";

                foreach ($o['info'] as $k => $v) {
                    $res .= "\n/$k $v";
                }
                $res .= "\n>>\nendobj";

                return $res;
        }

        return null;
    }

    /**
     * an image object, will be an XObject in the document, includes description and data
     *
     * @param $id
     * @param $action
     * @param string $options
     * @return null|string
     */
    protected function o_image($id, $action, $options = '')
    {
        switch ($action) {
            case 'new':
                // make the new object
                $this->objects[$id] = ['t' => 'image', 'data' => &$options['data'], 'info' => []];

                $info =& $this->objects[$id]['info'];

                $info['Type'] = '/XObject';
                $info['Subtype'] = '/Image';
                $info['Width'] = $options['iw'];
                $info['Height'] = $options['ih'];

                if (isset($options['masked']) && $options['masked']) {
                    $info['SMask'] = ($this->numObj - 1) . ' 0 R';
                }

                if (!isset($options['type']) || $options['type'] === 'jpg') {
                    if (!isset($options['channels'])) {
                        $options['channels'] = 3;
                    }

                    switch ($options['channels']) {
                        case 1:
                            $info['ColorSpace'] = '/DeviceGray';
                            break;
                        case 4:
                            $info['ColorSpace'] = '/DeviceCMYK';
                            break;
                        default:
                            $info['ColorSpace'] = '/DeviceRGB';
                            break;
                    }

                    if ($info['ColorSpace'] === '/DeviceCMYK') {
                        $info['Decode'] = '[1 0 1 0 1 0 1 0]';
                    }

                    $info['Filter'] = '/DCTDecode';
                    $info['BitsPerComponent'] = 8;
                } else {
                    if ($options['type'] === 'png') {
                        $info['Filter'] = '/FlateDecode';
                        $info['DecodeParms'] = '<< /Predictor 15 /Colors ' . $options['ncolor'] . ' /Columns ' . $options['iw'] . ' /BitsPerComponent ' . $options['bitsPerComponent'] . '>>';

                        if ($options['isMask']) {
                            $info['ColorSpace'] = '/DeviceGray';
                        } else {
                            if (mb_strlen($options['pdata'], '8bit')) {
                                $tmp = ' [ /Indexed /DeviceRGB ' . (mb_strlen($options['pdata'], '8bit') / 3 - 1) . ' ';
                                $this->numObj++;
                                $this->o_contents($this->numObj, 'new');
                                $this->objects[$this->numObj]['c'] = $options['pdata'];
                                $tmp .= $this->numObj . ' 0 R';
                                $tmp .= ' ]';
                                $info['ColorSpace'] = $tmp;

                                if (isset($options['transparency'])) {
                                    $transparency = $options['transparency'];
                                    switch ($transparency['type']) {
                                        case 'indexed':
                                            $tmp = ' [ ' . $transparency['data'] . ' ' . $transparency['data'] . '] ';
                                            $info['Mask'] = $tmp;
                                            break;

                                        case 'color-key':
                                            $tmp = ' [ ' .
                                                $transparency['r'] . ' ' . $transparency['r'] .
                                                $transparency['g'] . ' ' . $transparency['g'] .
                                                $transparency['b'] . ' ' . $transparency['b'] .
                                                ' ] ';
                                            $info['Mask'] = $tmp;
                                            break;
                                    }
                                }
                            } else {
                                if (isset($options['transparency'])) {
                                    $transparency = $options['transparency'];

                                    switch ($transparency['type']) {
                                        case 'indexed':
                                            $tmp = ' [ ' . $transparency['data'] . ' ' . $transparency['data'] . '] ';
                                            $info['Mask'] = $tmp;
                                            break;

                                        case 'color-key':
                                            $tmp = ' [ ' .
                                                $transparency['r'] . ' ' . $transparency['r'] . ' ' .
                                                $transparency['g'] . ' ' . $transparency['g'] . ' ' .
                                                $transparency['b'] . ' ' . $transparency['b'] .
                                                ' ] ';
                                            $info['Mask'] = $tmp;
                                            break;
                                    }
                                }
                                $info['ColorSpace'] = '/' . $options['color'];
                            }
                        }

                        $info['BitsPerComponent'] = $options['bitsPerComponent'];
                    }
                }

                // assign it a place in the named resource dictionary as an external object, according to
                // the label passed in with it.
                $this->o_pages($this->currentNode, 'xObject', ['label' => $options['label'], 'objNum' => $id]);

                // also make sure that we have the right procset object for it.
                $this->o_procset($this->procsetObjectId, 'add', 'ImageC');
                break;

            case 'out':
                $o = &$this->objects[$id];
                $tmp = &$o['data'];
                $res = "\n$id 0 obj\n<<";

                foreach ($o['info'] as $k => $v) {
                    $res .= "\n/$k $v";
                }

                if ($this->encrypted) {
                    $this->encryptInit($id);
                    $tmp = $this->ARC4($tmp);
                }

                $res .= "\n/Length " . mb_strlen($tmp, '8bit') . ">>\nstream\n$tmp\nendstream\nendobj";

                return $res;
        }

        return null;
    }

    /**
     * graphics state object
     *
     * @param $id
     * @param $action
     * @param string $options
     * @return null|string
     */
    protected function o_extGState($id, $action, $options = "")
    {
        static $valid_params = [
            "LW",
            "LC",
            "LC",
            "LJ",
            "ML",
            "D",
            "RI",
            "OP",
            "op",
            "OPM",
            "Font",
            "BG",
            "BG2",
            "UCR",
            "TR",
            "TR2",
            "HT",
            "FL",
            "SM",
            "SA",
            "BM",
            "SMask",
            "CA",
            "ca",
            "AIS",
            "TK"
        ];

        switch ($action) {
            case "new":
                $this->objects[$id] = ['t' => 'extGState', 'info' => $options];

                // Tell the pages about the new resource
                $this->numStates++;
                $this->o_pages($this->currentNode, 'extGState', ["objNum" => $id, "stateNum" => $this->numStates]);
                break;

            case "out":
                $o = &$this->objects[$id];
                $res = "\n$id 0 obj\n<< /Type /ExtGState\n";

                foreach ($o["info"] as $k => $v) {
                    if (!in_array($k, $valid_params)) {
                        continue;
                    }
                    $res .= "/$k $v\n";
                }

                $res .= ">>\nendobj";

                return $res;
        }

        return null;
    }

    /**
     * @param integer $id
     * @param string $action
     * @param mixed $options
     * @return string
     */
    protected function o_xobject($id, $action, $options = '')
    {
        switch ($action) {
            case 'new':
                $this->objects[$id] = ['t' => 'xobject', 'info' => $options, 'c' => ''];
                break;

            case 'procset':
                $this->objects[$id]['procset'] = $options;
                break;

            case 'font':
                $this->objects[$id]['fonts'][$options['fontNum']] = [
                  'objNum' => $options['objNum'],
                  'fontNum' => $options['fontNum']
                ];
                break;

            case 'xObject':
                $this->objects[$id]['xObjects'][] = ['objNum' => $options['objNum'], 'label' => $options['label']];
                break;

            case 'out':
                $o = &$this->objects[$id];
                $res = "\n$id 0 obj\n<< /Type /XObject\n";

                foreach ($o["info"] as $k => $v) {
                    switch ($k) {
                        case 'Subtype':
                            $res .= "/Subtype /$v\n";
                            break;
                        case 'bbox':
                            $res .= "/BBox [";
                            foreach ($v as $value) {
                                $res .= sprintf("%.4F ", $value);
                            }
                            $res .= "]\n";
                            break;
                        default:
                            $res .= "/$k $v\n";
                            break;
                    }
                }
                $res .= "/Matrix[1.0 0.0 0.0 1.0 0.0 0.0]\n";

                $res .= "/Resources <<";
                if (isset($o['procset'])) {
                    $res .= "\n/ProcSet " . $o['procset'] . " 0 R";
                } else {
                    $res .= "\n/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]";
                }
                if (isset($o['fonts']) && count($o['fonts'])) {
                    $res .= "\n/Font << ";
                    foreach ($o['fonts'] as $finfo) {
                        $res .= "\n/F" . $finfo['fontNum'] . " " . $finfo['objNum'] . " 0 R";
                    }
                    $res .= "\n>>";
                }
                if (isset($o['xObjects']) && count($o['xObjects'])) {
                    $res .= "\n/XObject << ";
                    foreach ($o['xObjects'] as $finfo) {
                        $res .= "\n/" . $finfo['label'] . " " . $finfo['objNum'] . " 0 R";
                    }
                    $res .= "\n>>";
                }
                $res .= "\n>>\n";

                $tmp = $o["c"];
                if ($this->compressionReady && $this->options['compression']) {
                    // then implement ZLIB based compression on this content stream
                    $res .= " /Filter /FlateDecode\n";
                    $tmp = gzcompress($tmp, 6);
                }

                if ($this->encrypted) {
                    $this->encryptInit($id);
                    $tmp = $this->ARC4($tmp);
                }

                $res .= "/Length " . mb_strlen($tmp, '8bit') . " >>\n";
                $res .= "stream\n" . $tmp . "\nendstream" . "\nendobj";

                return $res;
        }

        return null;
    }

    /**
     * @param $id
     * @param $action
     * @param string $options
     * @return null|string
     */
    protected function o_acroform($id, $action, $options = '')
    {
        switch ($action) {
            case "new":
                $this->o_catalog($this->catalogId, 'acroform', $id);
                $this->objects[$id] = array('t' => 'acroform', 'info' => $options);
                break;

            case 'addfield':
                $this->objects[$id]['info']['Fields'][] = $options;
                break;

            case 'font':
                $this->objects[$id]['fonts'][$options['fontNum']] = [
                  'objNum' => $options['objNum'],
                  'fontNum' => $options['fontNum']
                ];
                break;

            case "out":
                $o = &$this->objects[$id];
                $res = "\n$id 0 obj\n<<";

                foreach ($o["info"] as $k => $v) {
                    switch ($k) {
                        case 'Fields':
                            $res .= " /Fields [";
                            foreach ($v as $i) {
                                $res .= "$i 0 R ";
                            }
                            $res .= "]\n";
                            break;
                        default:
                            $res .= "/$k $v\n";
                    }
                }

                $res .= "/DR <<\n";
                if (isset($o['fonts']) && count($o['fonts'])) {
                    $res .= "/Font << \n";
                    foreach ($o['fonts'] as $finfo) {
                        $res .= "/F" . $finfo['fontNum'] . " " . $finfo['objNum'] . " 0 R\n";
                    }
                    $res .= ">>\n";
                }
                $res .= ">>\n";

                $res .= ">>\nendobj";

                return $res;
        }

        return null;
    }

    /**
     * @param $id
     * @param $action
     * @param mixed $options
     * @return null|string
     */
    protected function o_field($id, $action, $options = '')
    {
        switch ($action) {
            case "new":
                $this->o_page($options['pageid'], 'annot', $id);
                $this->o_acroform($this->acroFormId, 'addfield', $id);
                $this->objects[$id] = ['t' => 'field', 'info' => $options];
                break;

            case 'set':
                $this->objects[$id]['info'] = array_merge($this->objects[$id]['info'], $options);
                break;

            case "out":
                $o = &$this->objects[$id];
                $res = "\n$id 0 obj\n<< /Type /Annot /Subtype /Widget \n";

                $encrypted = $this->encrypted;
                if ($encrypted) {
                    $this->encryptInit($id);
                }

                foreach ($o["info"] as $k => $v) {
                    switch ($k) {
                        case 'pageid':
                            $res .= "/P $v 0 R\n";
                            break;
                        case 'value':
                            if ($encrypted) {
                                $v = $this->filterText($this->ARC4($v), false, false);
                            }
                            $res .= "/V ($v)\n";
                            break;
                        case 'refvalue':
                            $res .= "/V $v 0 R\n";
                            break;
                        case 'da':
                            if ($encrypted) {
                                $v = $this->filterText($this->ARC4($v), false, false);
                            }
                            $res .= "/DA ($v)\n";
                            break;
                        case 'options':
                            $res .= "/Opt [\n";
                            foreach ($v as $opt) {
                                if ($encrypted) {
                                    $opt = $this->filterText($this->ARC4($opt), false, false);
                                }
                                $res .= "($opt)\n";
                            }
                            $res .= "]\n";
                            break;
                        case 'rect':
                            $res .= "/Rect [";
                            foreach ($v as $value) {
                                $res .= sprintf("%.4F ", $value);
                            }
                            $res .= "]\n";
                            break;
                        case 'appearance':
                            $res .= "/AP << ";
                            foreach ($v as $a => $ref) {
                                $res .= "/$a $ref 0 R ";
                            }
                            $res .= ">>\n";
                            break;
                        case 'T':
                            if ($encrypted) {
                                $v = $this->filterText($this->ARC4($v), false, false);
                            }
                            $res .= "/T ($v)\n";
                            break;
                        default:
                            $res .= "/$k $v\n";
                    }

                }

                $res .= ">>\nendobj";

                return $res;
        }

        return null;
    }

    /**
     *
     * @param $id
     * @param $action
     * @param string $options
     * @return null|string
     */
    protected function o_sig($id, $action, $options = '')
    {
        $sign_maxlen = $this->signatureMaxLen;

        switch ($action) {
            case "new":
                $this->objects[$id] = array('t' => 'sig', 'info' => $options);
                $this->byteRange[$id] = ['t' => 'sig'];
                break;

            case 'byterange':
                $o = &$this->objects[$id];
                $content =& $options['content'];
                $content_len = strlen($content);
                $pos = strpos($content, sprintf("/ByteRange [ %'.010d", $id));
                $len = strlen('/ByteRange [ ********** ********** ********** ********** ]');
                $rangeStartPos = $pos + $len + 1 + 10; // before '<'
                $content = substr_replace($content, str_pad(sprintf('/ByteRange [ 0 %u %u %u ]', $rangeStartPos, $rangeStartPos + $sign_maxlen + 2, $content_len - 2 - $sign_maxlen - $rangeStartPos), $len, ' ', STR_PAD_RIGHT), $pos, $len);

                $fuid = uniqid();
                $tmpInput = $this->tmp . "/pkcs7.tmp." . $fuid . '.in';
                $tmpOutput = $this->tmp . "/pkcs7.tmp." . $fuid . '.out';

                if (file_put_contents($tmpInput, substr($content, 0, $rangeStartPos)) === false) {
                    throw new \Exception("Unable to write temporary file for signing.");
                }
                if (file_put_contents($tmpInput, substr($content, $rangeStartPos + 2 + $sign_maxlen),
                    FILE_APPEND) === false) {
                    throw new \Exception("Unable to write temporary file for signing.");
                }

                if (openssl_pkcs7_sign($tmpInput, $tmpOutput,
                    $o['info']['SignCert'],
                    array($o['info']['PrivKey'], $o['info']['Password']),
                    array(), PKCS7_BINARY | PKCS7_DETACHED) === false) {
                    throw new \Exception("Failed to prepare signature.");
                }

                $signature = file_get_contents($tmpOutput);

                unlink($tmpInput);
                unlink($tmpOutput);

                $sign = substr($signature, (strpos($signature, "%%EOF\n\n------") + 13));
                list($head, $signature) = explode("\n\n", $sign);

                $signature = base64_decode(trim($signature));

                $signature = current(unpack('H*', $signature));
                $signature = str_pad($signature, $sign_maxlen, '0');
                $siglen = strlen($signature);
                if (strlen($signature) > $sign_maxlen) {
                    throw new \Exception("Signature length ($siglen) exceeds the $sign_maxlen limit.");
                }

                $content = substr_replace($content, $signature, $rangeStartPos + 1, $sign_maxlen);
                break;

            case "out":
                $res = "\n$id 0 obj\n<<\n";

                $encrypted = $this->encrypted;
                if ($encrypted) {
                    $this->encryptInit($id);
                }

                $res .= "/ByteRange " .sprintf("[ %'.010d ********** ********** ********** ]\n", $id);
                $res .= "/Contents <" . str_pad('', $sign_maxlen, '0') . ">\n";
                $res .= "/Filter/Adobe.PPKLite\n"; //PPKMS \n";
                $res .= "/Type/Sig/SubFilter/adbe.pkcs7.detached \n";

                $date = "D:" . substr_replace(date('YmdHisO'), '\'', -2, 0) . '\'';
                if ($encrypted) {
                    $date = $this->ARC4($date);
                }

                $res .= "/M ($date)\n";
                $res .= "/Prop_Build << /App << /Name /DomPDF >> /Filter << /Name /Adobe.PPKLite >> >>\n";

                $o = &$this->objects[$id];
                foreach ($o['info'] as $k => $v) {
                    switch ($k) {
                        case 'Name':
                        case 'Location':
                        case 'Reason':
                        case 'ContactInfo':
                            if ($v !== null && $v !== '') {
                                $res .= "/$k (" .
                                  ($encrypted ? $this->filterText($this->ARC4($v), false, false) : $v) . ") \n";
                            }
                            break;
                    }
                }
                $res .= ">>\nendobj";

                return $res;
        }

        return null;
    }

    /**
     * encryption object.
     *
     * @param $id
     * @param $action
     * @param string $options
     * @return string|null
     */
    protected function o_encryption($id, $action, $options = '')
    {
        switch ($action) {
            case 'new':
                // make the new object
                $this->objects[$id] = ['t' => 'encryption', 'info' => $options];
                $this->arc4_objnum = $id;
                break;

            case 'keys':
                // figure out the additional parameters required
                $pad = chr(0x28) . chr(0xBF) . chr(0x4E) . chr(0x5E) . chr(0x4E) . chr(0x75) . chr(0x8A) . chr(0x41)
                    . chr(0x64) . chr(0x00) . chr(0x4E) . chr(0x56) . chr(0xFF) . chr(0xFA) . chr(0x01) . chr(0x08)
                    . chr(0x2E) . chr(0x2E) . chr(0x00) . chr(0xB6) . chr(0xD0) . chr(0x68) . chr(0x3E) . chr(0x80)
                    . chr(0x2F) . chr(0x0C) . chr(0xA9) . chr(0xFE) . chr(0x64) . chr(0x53) . chr(0x69) . chr(0x7A);

                $info = $this->objects[$id]['info'];

                $len = mb_strlen($info['owner'], '8bit');

                if ($len > 32) {
                    $owner = substr($info['owner'], 0, 32);
                } else {
                    if ($len < 32) {
                        $owner = $info['owner'] . substr($pad, 0, 32 - $len);
                    } else {
                        $owner = $info['owner'];
                    }
                }

                $len = mb_strlen($info['user'], '8bit');
                if ($len > 32) {
                    $user = substr($info['user'], 0, 32);
                } else {
                    if ($len < 32) {
                        $user = $info['user'] . substr($pad, 0, 32 - $len);
                    } else {
                        $user = $info['user'];
                    }
                }

                $tmp = $this->md5_16($owner);
                $okey = substr($tmp, 0, 5);
                $this->ARC4_init($okey);
                $ovalue = $this->ARC4($user);
                $this->objects[$id]['info']['O'] = $ovalue;

                // now make the u value, phew.
                $tmp = $this->md5_16(
                    $user . $ovalue . chr($info['p']) . chr(255) . chr(255) . chr(255) . hex2bin($this->fileIdentifier)
                );

                $ukey = substr($tmp, 0, 5);
                $this->ARC4_init($ukey);
                $this->encryptionKey = $ukey;
                $this->encrypted = true;
                $uvalue = $this->ARC4($pad);
                $this->objects[$id]['info']['U'] = $uvalue;
                // initialize the arc4 array
                break;

            case 'out':
                $o = &$this->objects[$id];

                $res = "\n$id 0 obj\n<<";
                $res .= "\n/Filter /Standard";
                $res .= "\n/V 1";
                $res .= "\n/R 2";
                $res .= "\n/O (" . $this->filterText($o['info']['O'], false, false) . ')';
                $res .= "\n/U (" . $this->filterText($o['info']['U'], false, false) . ')';
                // and the p-value needs to be converted to account for the twos-complement approach
                $o['info']['p'] = (($o['info']['p'] ^ 255) + 1) * -1;
                $res .= "\n/P " . ($o['info']['p']);
                $res .= "\n>>\nendobj";

                return $res;
        }

        return null;
    }

    protected function o_indirect_references($id, $action, $options = null)
    {
        switch ($action) {
            case 'new':
            case 'add':
                if ($id === 0) {
                    $id = ++$this->numObj;
                    $this->o_catalog($this->catalogId, 'names', $id);
                    $this->objects[$id] = ['t' => 'indirect_references', 'info' => $options];
                    $this->indirectReferenceId = $id;
                } else {
                    $this->objects[$id]['info'] = array_merge($this->objects[$id]['info'], $options);
                }
                break;
            case 'out':
                $res = "\n$id 0 obj << ";

                foreach ($this->objects[$id]['info'] as $referenceObjName => $referenceObjId) {
                    $res .= "/$referenceObjName $referenceObjId 0 R ";
                }

                $res .= ">> endobj";
                return $res;
        }

        return null;
    }

    protected function o_names($id, $action, $options = null)
    {
        switch ($action) {
            case 'new':
            case 'add':
                if ($id === 0) {
                    $id = ++$this->numObj;
                    $this->objects[$id] = ['t' => 'names', 'info' => [$options]];
                    $this->o_indirect_references($this->indirectReferenceId, 'add', ['EmbeddedFiles' => $id]);
                    $this->embeddedFilesId = $id;
                } else {
                    $this->objects[$id]['info'][] = $options;
                }
                break;
            case 'out':
                $info = &$this->objects[$id]['info'];
                $res = '';
                if (count($info) > 0) {
                    $res = "\n$id 0 obj << /Names [ ";

                    if ($this->encrypted) {
                        $this->encryptInit($id);
                    }

                    foreach ($info as $entry) {
                        if ($this->encrypted) {
                            $filename = $this->ARC4($entry['filename']);
                        } else {
                            $filename = $entry['filename'];
                        }

                        $res .= "($filename) " . $entry['dict_reference'] . " 0 R ";
                    }

                    $res .= "] >> endobj";
                }
                return $res;
        }

        return null;
    }

    protected function o_embedded_file_dictionary($id, $action, $options = null)
    {
        switch ($action) {
            case 'new':
                $embeddedFileId = ++$this->numObj;
                $options['embedded_reference'] = $embeddedFileId;
                $this->objects[$id] = ['t' => 'embedded_file_dictionary', 'info' => $options];
                $this->o_embedded_file($embeddedFileId, 'new', $options);
                $options['dict_reference'] = $id;
                $this->o_names($this->embeddedFilesId, 'add', $options);
                break;
            case 'out':
                $info = &$this->objects[$id]['info'];
                $filename = $this->utf8toUtf16BE($info['filename']);
                $description = $this->utf8toUtf16BE($info['description']);

                if ($this->encrypted) {
                    $this->encryptInit($id);
                    $filename = $this->ARC4($filename);
                    $description = $this->ARC4($description);
                }

                $filename = $this->filterText($filename, false, false);
                $description = $this->filterText($description, false, false);

                $res = "\n$id 0 obj <</Type /Filespec /EF";
                $res .= " <</F " . $info['embedded_reference'] . " 0 R >>";
                $res .= " /F ($filename) /UF ($filename) /Desc ($description)";
                $res .= " >> endobj";
                return $res;
        }

        return null;
    }

    protected function o_embedded_file($id, $action, $options = null): ?string
    {
        switch ($action) {
            case 'new':
                $this->objects[$id] = ['t' => 'embedded_file', 'info' => $options];
                break;
            case 'out':
                $info = &$this->objects[$id]['info'];

                if ($this->compressionReady) {
                    $filepath = $info['filepath'];
                    $checksum = md5_file($filepath);
                    $f = fopen($filepath, "rb");

                    $file_content_compressed = '';
                    $deflateContext = deflate_init(ZLIB_ENCODING_DEFLATE, ['level' => 6]);
                    while (($block = fread($f, 8192))) {
                        $file_content_compressed .= deflate_add($deflateContext, $block, ZLIB_NO_FLUSH);
                    }
                    $file_content_compressed .= deflate_add($deflateContext, '', ZLIB_FINISH);
                    $file_size_uncompressed = ftell($f);
                    fclose($f);
                } else {
                    $file_content = file_get_contents($info['filepath']);
                    $file_size_uncompressed = mb_strlen($file_content, '8bit');
                    $checksum = md5($file_content);
                }

                if ($this->encrypted) {
                    $this->encryptInit($id);
                    $checksum = $this->ARC4($checksum);
                    $file_content_compressed = $this->ARC4($file_content_compressed);
                }
                $file_size_compressed = mb_strlen($file_content_compressed, '8bit');

                $res = "\n$id 0 obj <</Params <</Size $file_size_uncompressed /CheckSum ($checksum) >>" .
                    " /Type/EmbeddedFile /Filter/FlateDecode" .
                    " /Length $file_size_compressed >> stream\n$file_content_compressed\nendstream\nendobj";

                return $res;
        }

        return null;
    }

    /**
     * ARC4 functions
     * A series of function to implement ARC4 encoding in PHP
     */

    /**
     * calculate the 16 byte version of the 128 bit md5 digest of the string
     *
     * @param $string
     * @return string
     */
    function md5_16($string)
    {
        $tmp = md5($string);
        $out = '';
        for ($i = 0; $i <= 30; $i = $i + 2) {
            $out .= chr(hexdec(substr($tmp, $i, 2)));
        }

        return $out;
    }

    /**
     * initialize the encryption for processing a particular object
     *
     * @param $id
     */
    function encryptInit($id)
    {
        $tmp = $this->encryptionKey;
        $hex = dechex($id);
        if (mb_strlen($hex, '8bit') < 6) {
            $hex = substr('000000', 0, 6 - mb_strlen($hex, '8bit')) . $hex;
        }
        $tmp .= chr(hexdec(substr($hex, 4, 2)))
            . chr(hexdec(substr($hex, 2, 2)))
            . chr(hexdec(substr($hex, 0, 2)))
            . chr(0)
            . chr(0)
        ;
        $key = $this->md5_16($tmp);
        $this->ARC4_init(substr($key, 0, 10));
    }

    /**
     * initialize the ARC4 encryption
     *
     * @param string $key
     */
    function ARC4_init($key = '')
    {
        $this->arc4 = '';

        // setup the control array
        if (mb_strlen($key, '8bit') == 0) {
            return;
        }

        $k = '';
        while (mb_strlen($k, '8bit') < 256) {
            $k .= $key;
        }

        $k = substr($k, 0, 256);
        for ($i = 0; $i < 256; $i++) {
            $this->arc4 .= chr($i);
        }

        $j = 0;

        for ($i = 0; $i < 256; $i++) {
            $t = $this->arc4[$i];
            $j = ($j + ord($t) + ord($k[$i])) % 256;
            $this->arc4[$i] = $this->arc4[$j];
            $this->arc4[$j] = $t;
        }
    }

    /**
     * ARC4 encrypt a text string
     *
     * @param $text
     * @return string
     */
    function ARC4($text)
    {
        $len = mb_strlen($text, '8bit');
        $a = 0;
        $b = 0;
        $c = $this->arc4;
        $out = '';
        for ($i = 0; $i < $len; $i++) {
            $a = ($a + 1) % 256;
            $t = $c[$a];
            $b = ($b + ord($t)) % 256;
            $c[$a] = $c[$b];
            $c[$b] = $t;
            $k = ord($c[(ord($c[$a]) + ord($c[$b])) % 256]);
            $out .= chr(ord($text[$i]) ^ $k);
        }

        return $out;
    }

    /**
     * functions which can be called to adjust or add to the document
     */

    /**
     * add a link in the document to an external URL
     *
     * @param $url
     * @param $x0
     * @param $y0
     * @param $x1
     * @param $y1
     */
    function addLink($url, $x0, $y0, $x1, $y1)
    {
        $this->numObj++;
        $info = ['type' => 'link', 'url' => $url, 'rect' => [$x0, $y0, $x1, $y1]];
        $this->o_annotation($this->numObj, 'new', $info);
    }

    /**
     * add a link in the document to an internal destination (ie. within the document)
     *
     * @param $label
     * @param $x0
     * @param $y0
     * @param $x1
     * @param $y1
     */
    function addInternalLink($label, $x0, $y0, $x1, $y1)
    {
        $this->numObj++;
        $info = ['type' => 'ilink', 'label' => $label, 'rect' => [$x0, $y0, $x1, $y1]];
        $this->o_annotation($this->numObj, 'new', $info);
    }

    /**
     * set the encryption of the document
     * can be used to turn it on and/or set the passwords which it will have.
     * also the functions that the user will have are set here, such as print, modify, add
     *
     * @param string $userPass
     * @param string $ownerPass
     * @param array $pc
     */
    function setEncryption($userPass = '', $ownerPass = '', $pc = [])
    {
        $p = bindec("11000000");

        $options = ['print' => 4, 'modify' => 8, 'copy' => 16, 'add' => 32];

        foreach ($pc as $k => $v) {
            if ($v && isset($options[$k])) {
                $p += $options[$k];
            } else {
                if (isset($options[$v])) {
                    $p += $options[$v];
                }
            }
        }

        // implement encryption on the document
        if ($this->arc4_objnum == 0) {
            // then the block does not exist already, add it.
            $this->numObj++;
            if (mb_strlen($ownerPass) == 0) {
                $ownerPass = $userPass;
            }

            $this->o_encryption($this->numObj, 'new', ['user' => $userPass, 'owner' => $ownerPass, 'p' => $p]);
        }
    }

    /**
     * should be used for internal checks, not implemented as yet
     */
    function checkAllHere()
    {
    }

    /**
     * return the pdf stream as a string returned from the function
     *
     * @param bool $debug
     * @return string
     */
    function output($debug = false)
    {
        if ($debug) {
            // turn compression off
            $this->options['compression'] = false;
        }

        if ($this->javascript) {
            $this->numObj++;

            $js_id = $this->numObj;
            $this->o_embedjs($js_id, 'new');
            $this->o_javascript(++$this->numObj, 'new', $this->javascript);

            $id = $this->catalogId;

            $this->o_indirect_references($this->indirectReferenceId, 'add', ['JavaScript' => $js_id]);
        }

        if ($this->fileIdentifier === '') {
            $tmp = implode('', $this->objects[$this->infoObject]['info']);
            $this->fileIdentifier = md5('DOMPDF' . __FILE__ . $tmp . microtime() . mt_rand());
        }

        if ($this->arc4_objnum) {
            $this->o_encryption($this->arc4_objnum, 'keys');
            $this->ARC4_init($this->encryptionKey);
        }

        $this->checkAllHere();

        $xref = [];
        $content = '%PDF-' . self::PDF_VERSION;
        $pos = mb_strlen($content, '8bit');

        // pre-process o_font objects before output of all objects
        foreach ($this->objects as $k => $v) {
            if ($v['t'] === 'font') {
                $this->o_font($k, 'add');
            }
        }

        foreach ($this->objects as $k => $v) {
            $tmp = 'o_' . $v['t'];
            $cont = $this->$tmp($k, 'out');
            $content .= $cont;
            $xref[] = $pos + 1; //+1 to account for \n at the start of each object
            $pos += mb_strlen($cont, '8bit');
        }

        $content .= "\nxref\n0 " . (count($xref) + 1) . "\n0000000000 65535 f \n";

        foreach ($xref as $p) {
            $content .= str_pad($p, 10, "0", STR_PAD_LEFT) . " 00000 n \n";
        }

        $content .= "trailer\n<<\n" .
            '/Size ' . (count($xref) + 1) . "\n" .
            '/Root 1 0 R' . "\n" .
            '/Info ' . $this->infoObject . " 0 R\n"
        ;

        // if encryption has been applied to this document then add the marker for this dictionary
        if ($this->arc4_objnum > 0) {
            $content .= '/Encrypt ' . $this->arc4_objnum . " 0 R\n";
        }

        $content .= '/ID[<' . $this->fileIdentifier . '><' . $this->fileIdentifier . ">]\n";

        // account for \n added at start of xref table
        $pos++;

        $content .= ">>\nstartxref\n$pos\n%%EOF\n";

        if (count($this->byteRange) > 0) {
            foreach ($this->byteRange as $k => $v) {
                $tmp = 'o_' . $v['t'];
                $this->$tmp($k, 'byterange', ['content' => &$content]);
            }
        }

        return $content;
    }

    /**
     * initialize a new document
     * if this is called on an existing document results may be unpredictable, but the existing document would be lost at minimum
     * this function is called automatically by the constructor function
     *
     * @param array $pageSize
     */
    private function newDocument($pageSize = [0, 0, 612, 792])
    {
        $this->numObj = 0;
        $this->objects = [];

        $this->numObj++;
        $this->o_catalog($this->numObj, 'new');

        $this->numObj++;
        $this->o_outlines($this->numObj, 'new');

        $this->numObj++;
        $this->o_pages($this->numObj, 'new');

        $this->o_pages($this->numObj, 'mediaBox', $pageSize);
        $this->currentNode = 3;

        $this->numObj++;
        $this->o_procset($this->numObj, 'new');

        $this->numObj++;
        $this->o_info($this->numObj, 'new');

        $this->numObj++;
        $this->o_page($this->numObj, 'new');

        // need to store the first page id as there is no way to get it to the user during
        // startup
        $this->firstPageId = $this->currentContents;
    }

    /**
     * open the font file and return a php structure containing it.
     * first check if this one has been done before and saved in a form more suited to php
     * note that if a php serialized version does not exist it will try and make one, but will
     * require write access to the directory to do it... it is MUCH faster to have these serialized
     * files.
     *
     * @param $font
     */
    private function openFont($font)
    {
        // assume that $font contains the path and file but not the extension
        $name = basename($font);
        $dir = dirname($font);

        $fontcache = $this->fontcache;
        if ($fontcache == '') {
            $fontcache = $dir;
        }

        //$name       filename without folder and extension of font metrics
        //$dir        folder of font metrics
        //$fontcache  folder of runtime created php serialized version of font metrics.
        //            If this is not given, the same folder as the font metrics will be used.
        //            Storing and reusing serialized versions improves speed much

        $this->addMessage("openFont: $font - $name");

        if (!$this->isUnicode || in_array(mb_strtolower(basename($name)), self::$coreFonts)) {
            $metrics_name = "$name.afm";
        } else {
            $metrics_name = "$name.ufm";
        }

        $cache_name = "$metrics_name.json";
        $this->addMessage("metrics: $metrics_name, cache: $cache_name");
        
        if (file_exists($fontcache . '/' . $cache_name)) {
            $this->addMessage("openFont: json metrics file exists $fontcache/$cache_name");
            $cached_font_info = json_decode(file_get_contents($fontcache . '/' . $cache_name), true);
            if (!isset($cached_font_info['_version_']) || $cached_font_info['_version_'] != $this->fontcacheVersion) {
                $this->addMessage('openFont: font cache is out of date, regenerating');
            } else {
                $this->fonts[$font] = $cached_font_info;
            }
        }

        if (!isset($this->fonts[$font]) && file_exists("$dir/$metrics_name")) {
            // then rebuild the php_<font>.afm file from the <font>.afm file
            $this->addMessage("openFont: build php file from $dir/$metrics_name");
            $data = [];

            // 20 => 'space'
            $data['codeToName'] = [];

            // Since we're not going to enable Unicode for the core fonts we need to use a font-based
            // setting for Unicode support rather than a global setting.
            $data['isUnicode'] = (strtolower(substr($metrics_name, -3)) !== 'afm');

            $cidtogid = '';
            if ($data['isUnicode']) {
                $cidtogid = str_pad('', 256 * 256 * 2, "\x00");
            }

            $file = file("$dir/$metrics_name");

            foreach ($file as $rowA) {
                $row = trim($rowA);
                $pos = strpos($row, ' ');

                if ($pos) {
                    // then there must be some keyword
                    $key = substr($row, 0, $pos);
                    switch ($key) {
                        case 'FontName':
                        case 'FullName':
                        case 'FamilyName':
                        case 'PostScriptName':
                        case 'Weight':
                        case 'ItalicAngle':
                        case 'IsFixedPitch':
                        case 'CharacterSet':
                        case 'UnderlinePosition':
                        case 'UnderlineThickness':
                        case 'Version':
                        case 'EncodingScheme':
                        case 'CapHeight':
                        case 'XHeight':
                        case 'Ascender':
                        case 'Descender':
                        case 'StdHW':
                        case 'StdVW':
                        case 'StartCharMetrics':
                        case 'FontHeightOffset': // OAR - Added so we can offset the height calculation of a Windows font.  Otherwise it's too big.
                            $data[$key] = trim(substr($row, $pos));
                            break;

                        case 'FontBBox':
                            $data[$key] = explode(' ', trim(substr($row, $pos)));
                            break;

                        //C 39 ; WX 222 ; N quoteright ; B 53 463 157 718 ;
                        case 'C': // Found in AFM files
                            $bits = explode(';', trim($row));
                            $dtmp = ['C' => null, 'N' => null, 'WX' => null, 'B' => []];

                            foreach ($bits as $bit) {
                                $bits2 = explode(' ', trim($bit));
                                if (mb_strlen($bits2[0], '8bit') == 0) {
                                    continue;
                                }

                                if (count($bits2) > 2) {
                                    $dtmp[$bits2[0]] = [];
                                    for ($i = 1; $i < count($bits2); $i++) {
                                        $dtmp[$bits2[0]][] = $bits2[$i];
                                    }
                                } else {
                                    if (count($bits2) == 2) {
                                        $dtmp[$bits2[0]] = $bits2[1];
                                    }
                                }
                            }

                            $c = (int)$dtmp['C'];
                            $n = $dtmp['N'];
                            $width = floatval($dtmp['WX']);

                            if ($c >= 0) {
                                if (!ctype_xdigit($n) || $c != hexdec($n)) {
                                    $data['codeToName'][$c] = $n;
                                }
                                $data['C'][$c] = $width;
                            } elseif (isset($n)) {
                                $data['C'][$n] = $width;
                            }

                            if (!isset($data['MissingWidth']) && $c === -1 && $n === '.notdef') {
                                $data['MissingWidth'] = $width;
                            }

                            break;

                        // U 827 ; WX 0 ; N squaresubnosp ; G 675 ;
                        case 'U': // Found in UFM files
                            if (!$data['isUnicode']) {
                                break;
                            }

                            $bits = explode(';', trim($row));
                            $dtmp = ['G' => null, 'N' => null, 'U' => null, 'WX' => null];

                            foreach ($bits as $bit) {
                                $bits2 = explode(' ', trim($bit));
                                if (mb_strlen($bits2[0], '8bit') === 0) {
                                    continue;
                                }

                                if (count($bits2) > 2) {
                                    $dtmp[$bits2[0]] = [];
                                    for ($i = 1; $i < count($bits2); $i++) {
                                        $dtmp[$bits2[0]][] = $bits2[$i];
                                    }
                                } else {
                                    if (count($bits2) == 2) {
                                        $dtmp[$bits2[0]] = $bits2[1];
                                    }
                                }
                            }

                            $c = (int)$dtmp['U'];
                            $n = $dtmp['N'];
                            $glyph = $dtmp['G'];
                            $width = floatval($dtmp['WX']);

                            if ($c >= 0) {
                                // Set values in CID to GID map
                                if ($c >= 0 && $c < 0xFFFF && $glyph) {
                                    $cidtogid[$c * 2] = chr($glyph >> 8);
                                    $cidtogid[$c * 2 + 1] = chr($glyph & 0xFF);
                                }

                                if (!ctype_xdigit($n) || $c != hexdec($n)) {
                                    $data['codeToName'][$c] = $n;
                                }
                                $data['C'][$c] = $width;
                            } elseif (isset($n)) {
                                $data['C'][$n] = $width;
                            }

                            if (!isset($data['MissingWidth']) && $c === -1 && $n === '.notdef') {
                                $data['MissingWidth'] = $width;
                            }

                            break;

                        case 'KPX':
                            break; // don't include them as they are not used yet
                            //KPX Adieresis yacute -40
                            /*$bits = explode(' ', trim($row));
                            $data['KPX'][$bits[1]][$bits[2]] = $bits[3];
                            break;*/
                    }
                }
            }

            if ($this->compressionReady && $this->options['compression']) {
                // then implement ZLIB based compression on CIDtoGID string
                $data['CIDtoGID_Compressed'] = true;
                $cidtogid = gzcompress($cidtogid, 6);
            }
            $data['CIDtoGID'] = base64_encode($cidtogid);
            $data['_version_'] = $this->fontcacheVersion;
            $this->fonts[$font] = $data;

            //Because of potential trouble with php safe mode, expect that the folder already exists.
            //If not existing, this will hit performance because of missing cached results.
            if (is_dir($fontcache) && is_writable($fontcache)) {
                file_put_contents("$fontcache/$cache_name", json_encode($data, JSON_PRETTY_PRINT));
            }
            $data = null;
        }

        if (!isset($this->fonts[$font])) {
            $this->addMessage("openFont: no font file found for $font. Do you need to run load_font.php?");
        }
    }

    /**
     * if the font is not loaded then load it and make the required object
     * else just make it the current font
     * the encoding array can contain 'encoding'=> 'none','WinAnsiEncoding','MacRomanEncoding' or 'MacExpertEncoding'
     * note that encoding='none' will need to be used for symbolic fonts
     * and 'differences' => an array of mappings between numbers 0->255 and character names.
     *
     * @param string $fontName
     * @param string $encoding
     * @param bool $set
     * @param bool $isSubsetting
     * @return int
     * @throws FontNotFoundException
     */
    function selectFont($fontName, $encoding = '', $set = true, $isSubsetting = true)
    {
        if ($fontName === null || $fontName === '') {
            return $this->currentFontNum;
        }

        $ext = substr($fontName, -4);
        if ($ext === '.afm' || $ext === '.ufm') {
            $fontName = substr($fontName, 0, mb_strlen($fontName) - 4);
        }

        if (!isset($this->fonts[$fontName])) {
            $this->addMessage("selectFont: selecting - $fontName - $encoding, $set");

            // load the file
            $this->openFont($fontName);

            if (isset($this->fonts[$fontName])) {
                $this->numObj++;
                $this->numFonts++;

                $font = &$this->fonts[$fontName];

                $name = basename($fontName);
                $options = ['name' => $name, 'fontFileName' => $fontName, 'isSubsetting' => $isSubsetting];

                if (is_array($encoding)) {
                    // then encoding and differences might be set
                    if (isset($encoding['encoding'])) {
                        $options['encoding'] = $encoding['encoding'];
                    }

                    if (isset($encoding['differences'])) {
                        $options['differences'] = $encoding['differences'];
                    }
                } else {
                    if (mb_strlen($encoding, '8bit')) {
                        // then perhaps only the encoding has been set
                        $options['encoding'] = $encoding;
                    }
                }

                $this->o_font($this->numObj, 'new', $options);

                if (file_exists("$fontName.ttf")) {
                    $fileSuffix = 'ttf';
                } elseif (file_exists("$fontName.TTF")) {
                    $fileSuffix = 'TTF';
                } elseif (file_exists("$fontName.pfb")) {
                    $fileSuffix = 'pfb';
                } elseif (file_exists("$fontName.PFB")) {
                    $fileSuffix = 'PFB';
                } else {
                    $fileSuffix = '';
                }

                $font['fileSuffix'] = $fileSuffix;

                $font['fontNum'] = $this->numFonts;
                $font['isSubsetting'] = $isSubsetting && $font['isUnicode'] && strtolower($fileSuffix) === 'ttf';

                // also set the differences here, note that this means that these will take effect only the
                //first time that a font is selected, else they are ignored
                if (isset($options['differences'])) {
                    $font['differences'] = $options['differences'];
                }
            }
        }

        if ($set && isset($this->fonts[$fontName])) {
            // so if for some reason the font was not set in the last one then it will not be selected
            $this->currentBaseFont = $fontName;

            // the next lines mean that if a new font is selected, then the current text state will be
            // applied to it as well.
            $this->currentFont = $this->currentBaseFont;
            $this->currentFontNum = $this->fonts[$this->currentFont]['fontNum'];
        }

        return $this->currentFontNum;
    }

    /**
     * sets up the current font, based on the font families, and the current text state
     * note that this system is quite flexible, a bold-italic font can be completely different to a
     * italic-bold font, and even bold-bold will have to be defined within the family to have meaning
     * This function is to be called whenever the currentTextState is changed, it will update
     * the currentFont setting to whatever the appropriate family one is.
     * If the user calls selectFont themselves then that will reset the currentBaseFont, and the currentFont
     * This function will change the currentFont to whatever it should be, but will not change the
     * currentBaseFont.
     */
    private function setCurrentFont()
    {
        //   if (strlen($this->currentBaseFont) == 0){
        //     // then assume an initial font
        //     $this->selectFont($this->defaultFont);
        //   }
        //   $cf = substr($this->currentBaseFont,strrpos($this->currentBaseFont,'/')+1);
        //   if (strlen($this->currentTextState)
        //     && isset($this->fontFamilies[$cf])
        //       && isset($this->fontFamilies[$cf][$this->currentTextState])){
        //     // then we are in some state or another
        //     // and this font has a family, and the current setting exists within it
        //     // select the font, then return it
        //     $nf = substr($this->currentBaseFont,0,strrpos($this->currentBaseFont,'/')+1).$this->fontFamilies[$cf][$this->currentTextState];
        //     $this->selectFont($nf,'',0);
        //     $this->currentFont = $nf;
        //     $this->currentFontNum = $this->fonts[$nf]['fontNum'];
        //   } else {
        //     // the this font must not have the right family member for the current state
        //     // simply assume the base font
        $this->currentFont = $this->currentBaseFont;
        $this->currentFontNum = $this->fonts[$this->currentFont]['fontNum'];
        //  }
    }

    /**
     * function for the user to find out what the ID is of the first page that was created during
     * startup - useful if they wish to add something to it later.
     *
     * @return int
     */
    function getFirstPageId()
    {
        return $this->firstPageId;
    }

    /**
     * add content to the currently active object
     *
     * @param $content
     */
    private function addContent($content)
    {
        $this->objects[$this->currentContents]['c'] .= $content;
    }

    /**
     * sets the color for fill operations
     *
     * @param array $color
     * @param bool  $force
     */
    function setColor($color, $force = false)
    {
        $new_color = [$color[0], $color[1], $color[2], isset($color[3]) ? $color[3] : null];

        if (!$force && $this->currentColor == $new_color) {
            return;
        }

        if (isset($new_color[3])) {
            $this->currentColor = $new_color;
            $this->addContent(vsprintf("\n%.3F %.3F %.3F %.3F k", $this->currentColor));
        } else {
            if (isset($new_color[2])) {
                $this->currentColor = $new_color;
                $this->addContent(vsprintf("\n%.3F %.3F %.3F rg", $this->currentColor));
            }
        }
    }

    /**
     * @param string $fillRule
     */
    function setFillRule($fillRule)
    {
        if (!in_array($fillRule, ["nonzero", "evenodd"])) {
            return;
        }

        $this->fillRule = $fillRule;
    }

    /**
     * sets the color for stroke operations
     *
     * @param array $color
     * @param bool  $force
     */
    function setStrokeColor($color, $force = false)
    {
        $new_color = [$color[0], $color[1], $color[2], isset($color[3]) ? $color[3] : null];

        if (!$force && $this->currentStrokeColor == $new_color) {
            return;
        }

        if (isset($new_color[3])) {
            $this->currentStrokeColor = $new_color;
            $this->addContent(vsprintf("\n%.3F %.3F %.3F %.3F K", $this->currentStrokeColor));
        } else {
            if (isset($new_color[2])) {
                $this->currentStrokeColor = $new_color;
                $this->addContent(vsprintf("\n%.3F %.3F %.3F RG", $this->currentStrokeColor));
            }
        }
    }

    /**
     * Set the graphics state for compositions
     *
     * @param $parameters
     */
    function setGraphicsState($parameters)
    {
        // Create a new graphics state object if necessary
        if (($gstate = array_search($parameters, $this->gstates)) === false) {
            $this->numObj++;
            $this->o_extGState($this->numObj, 'new', $parameters);
            $gstate = $this->numStates;
            $this->gstates[$gstate] = $parameters;
        }
        $this->addContent("\n/GS$gstate gs");
    }

    /**
     * Set current blend mode & opacity for lines.
     *
     * Valid blend modes are:
     *
     * Normal, Multiply, Screen, Overlay, Darken, Lighten,
     * ColorDogde, ColorBurn, HardLight, SoftLight, Difference,
     * Exclusion
     *
     * @param string $mode    the blend mode to use
     * @param float  $opacity 0.0 fully transparent, 1.0 fully opaque
     */
    function setLineTransparency($mode, $opacity)
    {
        static $blend_modes = [
            "Normal",
            "Multiply",
            "Screen",
            "Overlay",
            "Darken",
            "Lighten",
            "ColorDogde",
            "ColorBurn",
            "HardLight",
            "SoftLight",
            "Difference",
            "Exclusion"
        ];

        if (!in_array($mode, $blend_modes)) {
            $mode = "Normal";
        }

        if (is_null($this->currentLineTransparency)) {
            $this->currentLineTransparency = [];
        }

        if ($mode === (key_exists('mode', $this->currentLineTransparency) ?
            $this->currentLineTransparency['mode'] : '') &&
            $opacity === (key_exists('opacity', $this->currentLineTransparency) ?
            $this->currentLineTransparency["opacity"] : '')) {
            return;
        }

        $this->currentLineTransparency["mode"] = $mode;
        $this->currentLineTransparency["opacity"] = $opacity;

        $options = [
            "BM" => "/$mode",
            "CA" => (float)$opacity
        ];

        $this->setGraphicsState($options);
    }

    /**
     * Set current blend mode & opacity for filled objects.
     *
     * Valid blend modes are:
     *
     * Normal, Multiply, Screen, Overlay, Darken, Lighten,
     * ColorDogde, ColorBurn, HardLight, SoftLight, Difference,
     * Exclusion
     *
     * @param string $mode    the blend mode to use
     * @param float  $opacity 0.0 fully transparent, 1.0 fully opaque
     */
    function setFillTransparency($mode, $opacity)
    {
        static $blend_modes = [
            "Normal",
            "Multiply",
            "Screen",
            "Overlay",
            "Darken",
            "Lighten",
            "ColorDogde",
            "ColorBurn",
            "HardLight",
            "SoftLight",
            "Difference",
            "Exclusion"
        ];

        if (!in_array($mode, $blend_modes)) {
            $mode = "Normal";
        }

        if (is_null($this->currentFillTransparency)) {
            $this->currentFillTransparency = [];
        }

        if ($mode === (key_exists('mode', $this->currentFillTransparency) ?
            $this->currentFillTransparency['mode'] : '') &&
            $opacity === (key_exists('opacity', $this->currentFillTransparency) ?
            $this->currentFillTransparency["opacity"] : '')) {
            return;
        }

        $this->currentFillTransparency["mode"] = $mode;
        $this->currentFillTransparency["opacity"] = $opacity;

        $options = [
            "BM" => "/$mode",
            "ca" => (float)$opacity,
        ];

        $this->setGraphicsState($options);
    }

    /**
     * draw a line from one set of coordinates to another
     *
     * @param float $x1
     * @param float $y1
     * @param float $x2
     * @param float $y2
     * @param bool  $stroke
     */
    function line($x1, $y1, $x2, $y2, $stroke = true)
    {
        $this->addContent(sprintf("\n%.3F %.3F m %.3F %.3F l", $x1, $y1, $x2, $y2));

        if ($stroke) {
            $this->addContent(' S');
        }
    }

    /**
     * draw a bezier curve based on 4 control points
     *
     * @param float $x0
     * @param float $y0
     * @param float $x1
     * @param float $y1
     * @param float $x2
     * @param float $y2
     * @param float $x3
     * @param float $y3
     */
    function curve($x0, $y0, $x1, $y1, $x2, $y2, $x3, $y3)
    {
        // in the current line style, draw a bezier curve from (x0,y0) to (x3,y3) using the other two points
        // as the control points for the curve.
        $this->addContent(
            sprintf("\n%.3F %.3F m %.3F %.3F %.3F %.3F %.3F %.3F c S", $x0, $y0, $x1, $y1, $x2, $y2, $x3, $y3)
        );
    }

    /**
     * draw a part of an ellipse
     *
     * @param float $x0
     * @param float $y0
     * @param float $astart
     * @param float $afinish
     * @param float $r1
     * @param float $r2
     * @param float $angle
     * @param int $nSeg
     */
    function partEllipse($x0, $y0, $astart, $afinish, $r1, $r2 = 0, $angle = 0, $nSeg = 8)
    {
        $this->ellipse($x0, $y0, $r1, $r2, $angle, $nSeg, $astart, $afinish, false);
    }

    /**
     * draw a filled ellipse
     *
     * @param float $x0
     * @param float $y0
     * @param float $r1
     * @param float $r2
     * @param float $angle
     * @param int $nSeg
     * @param float $astart
     * @param float $afinish
     */
    function filledEllipse($x0, $y0, $r1, $r2 = 0, $angle = 0, $nSeg = 8, $astart = 0, $afinish = 360)
    {
        $this->ellipse($x0, $y0, $r1, $r2, $angle, $nSeg, $astart, $afinish, true, true);
    }

    /**
     * @param float $x
     * @param float $y
     */
    function lineTo($x, $y)
    {
        $this->addContent(sprintf("\n%.3F %.3F l", $x, $y));
    }

    /**
     * @param float $x
     * @param float $y
     */
    function moveTo($x, $y)
    {
        $this->addContent(sprintf("\n%.3F %.3F m", $x, $y));
    }

    /**
     * draw a bezier curve based on 4 control points
     *
     * @param float $x1
     * @param float $y1
     * @param float $x2
     * @param float $y2
     * @param float $x3
     * @param float $y3
     */
    function curveTo($x1, $y1, $x2, $y2, $x3, $y3)
    {
        $this->addContent(sprintf("\n%.3F %.3F %.3F %.3F %.3F %.3F c", $x1, $y1, $x2, $y2, $x3, $y3));
    }

    /**
     * draw a bezier curve based on 4 control points
     *
     * @param float $cpx
     * @param float $cpy
     * @param float $x
     * @param float $y
     */
    function quadTo($cpx, $cpy, $x, $y)
    {
        $this->addContent(sprintf("\n%.3F %.3F %.3F %.3F v", $cpx, $cpy, $x, $y));
    }

    function closePath()
    {
        $this->addContent(' h');
    }

    function endPath()
    {
        $this->addContent(' n');
    }

    /**
     * draw an ellipse
     * note that the part and filled ellipse are just special cases of this function
     *
     * draws an ellipse in the current line style
     * centered at $x0,$y0, radii $r1,$r2
     * if $r2 is not set, then a circle is drawn
     * from $astart to $afinish, measured in degrees, running anti-clockwise from the right hand side of the ellipse.
     * nSeg is not allowed to be less than 2, as this will simply draw a line (and will even draw a
     * pretty crappy shape at 2, as we are approximating with bezier curves.
     *
     * @param float $x0
     * @param float $y0
     * @param float $r1
     * @param float $r2
     * @param float $angle
     * @param int   $nSeg
     * @param float $astart
     * @param float $afinish
     * @param bool  $close
     * @param bool  $fill
     * @param bool  $stroke
     * @param bool  $incomplete
     */
    function ellipse(
        $x0,
        $y0,
        $r1,
        $r2 = 0,
        $angle = 0,
        $nSeg = 8,
        $astart = 0,
        $afinish = 360,
        $close = true,
        $fill = false,
        $stroke = true,
        $incomplete = false
    ) {
        if ($r1 == 0) {
            return;
        }

        if ($r2 == 0) {
            $r2 = $r1;
        }

        if ($nSeg < 2) {
            $nSeg = 2;
        }

        $astart = deg2rad((float)$astart);
        $afinish = deg2rad((float)$afinish);
        $totalAngle = $afinish - $astart;

        $dt = $totalAngle / $nSeg;
        $dtm = $dt / 3;

        if ($angle != 0) {
            $a = -1 * deg2rad((float)$angle);

            $this->addContent(
                sprintf("\n q %.3F %.3F %.3F %.3F %.3F %.3F cm", cos($a), -sin($a), sin($a), cos($a), $x0, $y0)
            );

            $x0 = 0;
            $y0 = 0;
        }

        $t1 = $astart;
        $a0 = $x0 + $r1 * cos($t1);
        $b0 = $y0 + $r2 * sin($t1);
        $c0 = -$r1 * sin($t1);
        $d0 = $r2 * cos($t1);

        if (!$incomplete) {
            $this->addContent(sprintf("\n%.3F %.3F m ", $a0, $b0));
        }

        for ($i = 1; $i <= $nSeg; $i++) {
            // draw this bit of the total curve
            $t1 = $i * $dt + $astart;
            $a1 = $x0 + $r1 * cos($t1);
            $b1 = $y0 + $r2 * sin($t1);
            $c1 = -$r1 * sin($t1);
            $d1 = $r2 * cos($t1);

            $this->addContent(
                sprintf(
                    "\n%.3F %.3F %.3F %.3F %.3F %.3F c",
                    ($a0 + $c0 * $dtm),
                    ($b0 + $d0 * $dtm),
                    ($a1 - $c1 * $dtm),
                    ($b1 - $d1 * $dtm),
                    $a1,
                    $b1
                )
            );

            $a0 = $a1;
            $b0 = $b1;
            $c0 = $c1;
            $d0 = $d1;
        }

        if (!$incomplete) {
            if ($fill) {
                $this->addContent(' f');
            }

            if ($stroke) {
                if ($close) {
                    $this->addContent(' s'); // small 's' signifies closing the path as well
                } else {
                    $this->addContent(' S');
                }
            }
        }

        if ($angle != 0) {
            $this->addContent(' Q');
        }
    }

    /**
     * this sets the line drawing style.
     * width, is the thickness of the line in user units
     * cap is the type of cap to put on the line, values can be 'butt','round','square'
     *    where the diffference between 'square' and 'butt' is that 'square' projects a flat end past the
     *    end of the line.
     * join can be 'miter', 'round', 'bevel'
     * dash is an array which sets the dash pattern, is a series of length values, which are the lengths of the
     *   on and off dashes.
     *   (2) represents 2 on, 2 off, 2 on , 2 off ...
     *   (2,1) is 2 on, 1 off, 2 on, 1 off.. etc
     * phase is a modifier on the dash pattern which is used to shift the point at which the pattern starts.
     *
     * @param float  $width
     * @param string $cap
     * @param string $join
     * @param array  $dash
     * @param int    $phase
     */
    function setLineStyle($width = 1, $cap = '', $join = '', $dash = '', $phase = 0)
    {
        // this is quite inefficient in that it sets all the parameters whenever 1 is changed, but will fix another day
        $string = '';

        if ($width > 0) {
            $string .= "$width w";
        }

        $ca = ['butt' => 0, 'round' => 1, 'square' => 2];

        if (isset($ca[$cap])) {
            $string .= " $ca[$cap] J";
        }

        $ja = ['miter' => 0, 'round' => 1, 'bevel' => 2];

        if (isset($ja[$join])) {
            $string .= " $ja[$join] j";
        }

        if (is_array($dash)) {
            $string .= ' [ ' . implode(' ', $dash) . " ] $phase d";
        }

        $this->currentLineStyle = $string;
        $this->addContent("\n$string");
    }

    /**
     * draw a polygon, the syntax for this is similar to the GD polygon command
     *
     * @param float[] $p
     * @param bool    $fill
     */
    public function polygon(array $p, bool $fill = false): void
    {
        $this->addContent(sprintf("\n%.3F %.3F m ", $p[0], $p[1]));

        $n = count($p);
        for ($i = 2; $i < $n; $i = $i + 2) {
            $this->addContent(sprintf("%.3F %.3F l ", $p[$i], $p[$i + 1]));
        }

        if ($fill) {
            $this->addContent(' f');
        } else {
            $this->addContent(' S');
        }
    }

    /**
     * a filled rectangle, note that it is the width and height of the rectangle which are the secondary parameters, not
     * the coordinates of the upper-right corner
     *
     * @param float $x1
     * @param float $y1
     * @param float $width
     * @param float $height
     */
    function filledRectangle($x1, $y1, $width, $height)
    {
        $this->addContent(sprintf("\n%.3F %.3F %.3F %.3F re f", $x1, $y1, $width, $height));
    }

    /**
     * draw a rectangle, note that it is the width and height of the rectangle which are the secondary parameters, not
     * the coordinates of the upper-right corner
     *
     * @param float $x1
     * @param float $y1
     * @param float $width
     * @param float $height
     */
    function rectangle($x1, $y1, $width, $height)
    {
        $this->addContent(sprintf("\n%.3F %.3F %.3F %.3F re S", $x1, $y1, $width, $height));
    }

    /**
     * draw a rectangle, note that it is the width and height of the rectangle which are the secondary parameters, not
     * the coordinates of the upper-right corner
     *
     * @param float $x1
     * @param float $y1
     * @param float $width
     * @param float $height
     */
    function rect($x1, $y1, $width, $height)
    {
        $this->addContent(sprintf("\n%.3F %.3F %.3F %.3F re", $x1, $y1, $width, $height));
    }

    function stroke(bool $close = false)
    {
        $this->addContent("\n" . ($close ? "s" : "S"));
    }

    function fill()
    {
        $this->addContent("\nf" . ($this->fillRule === "evenodd" ? "*" : ""));
    }

    function fillStroke(bool $close = false)
    {
        $this->addContent("\n" . ($close ? "b" : "B") . ($this->fillRule === "evenodd" ? "*" : ""));
    }

    /**
     * @param string $subtype
     * @param integer $x
     * @param integer $y
     * @param integer $w
     * @param integer $h
     * @return int
     */
    function addXObject($subtype, $x, $y, $w, $h)
    {
        $id = ++$this->numObj;
        $this->o_xobject($id, 'new', ['Subtype' => $subtype, 'bbox' => [$x, $y, $w, $h]]);
        return $id;
    }

    /**
     * @param integer $numXObject
     * @param string $type
     * @param array $options
     */
    function setXObjectResource($numXObject, $type, $options)
    {
        if (in_array($type, ['procset', 'font', 'xObject'])) {
            $this->o_xobject($numXObject, $type, $options);
        }
    }

    /**
     * add signature
     *
     * $fieldSigId = $cpdf->addFormField(Cpdf::ACROFORM_FIELD_SIG, 'Signature1', 0, 0, 0, 0, 0);
     *
     * $signatureId = $cpdf->addSignature([
     *   'signcert' => file_get_contents('dompdf.crt'),
     *   'privkey' => file_get_contents('dompdf.key'),
     *   'password' => 'password',
     *   'name' => 'DomPDF DEMO',
     *   'location' => 'Home',
     *   'reason' => 'First Form',
     *   'contactinfo' => 'info'
     * ]);
     * $cpdf->setFormFieldValue($fieldSigId, "$signatureId 0 R");
     *
     * @param string $signcert
     * @param string $privkey
     * @param string $password
     * @param string|null $name
     * @param string|null $location
     * @param string|null $reason
     * @param string|null $contactinfo
     * @return int
     */
    function addSignature($signcert, $privkey, $password = '', $name = null, $location = null, $reason = null, $contactinfo = null) {
        $sigId = ++$this->numObj;
        $this->o_sig($sigId, 'new', [
          'SignCert' => $signcert,
          'PrivKey' => $privkey,
          'Password' => $password,
          'Name' => $name,
          'Location' => $location,
          'Reason' => $reason,
          'ContactInfo' => $contactinfo
        ]);

        return $sigId;
    }

    /**
     * add field to form
     *
     * @param string $type ACROFORM_FIELD_*
     * @param string $name
     * @param $x0
     * @param $y0
     * @param $x1
     * @param $y1
     * @param integer $ff Field Flag ACROFORM_FIELD_*_*
     * @param float $size
     * @param array $color
     * @return int
     */
    public function addFormField($type, $name, $x0, $y0, $x1, $y1, $ff = 0, $size = 10.0, $color = [0, 0, 0])
    {
        if (!$this->numFonts) {
            $this->selectFont($this->defaultFont);
        }

        $color = implode(' ', $color) . ' rg';

        $currentFontNum = $this->currentFontNum;
        $font = array_filter(
            $this->objects[$this->currentNode]['info']['fonts'],
            function ($item) use ($currentFontNum) { return $item['fontNum'] == $currentFontNum; }
        );

        $this->o_acroform($this->acroFormId, 'font',
          ['objNum' => $font[0]['objNum'], 'fontNum' => $font[0]['fontNum']]);

        $fieldId = ++$this->numObj;
        $this->o_field($fieldId, 'new', [
          'rect' => [$x0, $y0, $x1, $y1],
          'F' => 4,
          'FT' => "/$type",
          'T' => $name,
          'Ff' => $ff,
          'pageid' => $this->currentPage,
          'da' => "$color /F$this->currentFontNum " . sprintf('%.1F Tf ', $size)
        ]);

        return $fieldId;
    }

    /**
     * set Field value
     *
     * @param integer $numFieldObj
     * @param string $value
     */
    public function setFormFieldValue($numFieldObj, $value)
    {
        $this->o_field($numFieldObj, 'set', ['value' => $value]);
    }

    /**
     * set Field value (reference)
     *
     * @param integer $numFieldObj
     * @param integer $numObj Object number
     */
    public function setFormFieldRefValue($numFieldObj, $numObj)
    {
        $this->o_field($numFieldObj, 'set', ['refvalue' => $numObj]);
    }

    /**
     * set Field Appearanc (reference)
     *
     * @param integer $numFieldObj
     * @param integer $normalNumObj
     * @param integer|null $rolloverNumObj
     * @param integer|null $downNumObj
     */
    public function setFormFieldAppearance($numFieldObj, $normalNumObj, $rolloverNumObj = null, $downNumObj = null)
    {
        $appearance['N'] = $normalNumObj;

        if ($rolloverNumObj !== null) {
            $appearance['R'] = $rolloverNumObj;
        }

        if ($downNumObj !== null) {
            $appearance['D'] = $downNumObj;
        }

        $this->o_field($numFieldObj, 'set', ['appearance' => $appearance]);
    }

    /**
     * set Choice Field option values
     *
     * @param integer $numFieldObj
     * @param array $value
     */
    public function setFormFieldOpt($numFieldObj, $value)
    {
        $this->o_field($numFieldObj, 'set', ['options' => $value]);
    }

    /**
     * add form to document
     *
     * @param integer $sigFlags
     * @param boolean $needAppearances
     */
    public function addForm($sigFlags = 0, $needAppearances = false)
    {
        $this->acroFormId = ++$this->numObj;
        $this->o_acroform($this->acroFormId, 'new', [
          'NeedAppearances' => $needAppearances ? 'true' : 'false',
          'SigFlags' => $sigFlags
        ]);
    }

    /**
     * save the current graphic state
     */
    function save()
    {
        // we must reset the color cache or it will keep bad colors after clipping
        $this->currentColor = null;
        $this->currentStrokeColor = null;
        $this->addContent("\nq");
    }

    /**
     * restore the last graphic state
     */
    function restore()
    {
        // we must reset the color cache or it will keep bad colors after clipping
        $this->currentColor = null;
        $this->currentStrokeColor = null;
        $this->addContent("\nQ");
    }

    /**
     * draw a clipping rectangle, all the elements added after this will be clipped
     *
     * @param float $x1
     * @param float $y1
     * @param float $width
     * @param float $height
     */
    function clippingRectangle($x1, $y1, $width, $height)
    {
        $this->save();
        $this->addContent(sprintf("\n%.3F %.3F %.3F %.3F re W n", $x1, $y1, $width, $height));
    }

    /**
     * draw a clipping rounded rectangle, all the elements added after this will be clipped
     *
     * @param float $x1
     * @param float $y1
     * @param float $w
     * @param float $h
     * @param float $rTL
     * @param float $rTR
     * @param float $rBR
     * @param float $rBL
     */
    function clippingRectangleRounded($x1, $y1, $w, $h, $rTL, $rTR, $rBR, $rBL)
    {
        $this->save();

        // start: top edge, left end
        $this->addContent(sprintf("\n%.3F %.3F m ", $x1, $y1 - $rTL + $h));

        // line: bottom edge, left end
        $this->addContent(sprintf("\n%.3F %.3F l ", $x1, $y1 + $rBL));

        // curve: bottom-left corner
        $this->ellipse($x1 + $rBL, $y1 + $rBL, $rBL, 0, 0, 8, 180, 270, false, false, false, true);

        // line: right edge, bottom end
        $this->addContent(sprintf("\n%.3F %.3F l ", $x1 + $w - $rBR, $y1));

        // curve: bottom-right corner
        $this->ellipse($x1 + $w - $rBR, $y1 + $rBR, $rBR, 0, 0, 8, 270, 360, false, false, false, true);

        // line: right edge, top end
        $this->addContent(sprintf("\n%.3F %.3F l ", $x1 + $w, $y1 + $h - $rTR));

        // curve: bottom-right corner
        $this->ellipse($x1 + $w - $rTR, $y1 + $h - $rTR, $rTR, 0, 0, 8, 0, 90, false, false, false, true);

        // line: bottom edge, right end
        $this->addContent(sprintf("\n%.3F %.3F l ", $x1 + $rTL, $y1 + $h));

        // curve: top-right corner
        $this->ellipse($x1 + $rTL, $y1 + $h - $rTL, $rTL, 0, 0, 8, 90, 180, false, false, false, true);

        // line: top edge, left end
        $this->addContent(sprintf("\n%.3F %.3F l ", $x1 + $rBL, $y1));

        // Close & clip
        $this->addContent(" W n");
    }

    /**
     * draw a clipping polygon, the syntax for this is similar to the GD polygon command
     *
     * @param float[] $p
     */
    public function clippingPolygon(array $p): void
    {
        $this->save();

        $this->addContent(sprintf("\n%.3F %.3F m ", $p[0], $p[1]));

        $n = count($p);
        for ($i = 2; $i < $n; $i = $i + 2) {
            $this->addContent(sprintf("%.3F %.3F l ", $p[$i], $p[$i + 1]));
        }

        $this->addContent("W n");
    }

    /**
     * ends the last clipping shape
     */
    function clippingEnd()
    {
        $this->restore();
    }

    /**
     * scale
     *
     * @param float $s_x scaling factor for width as percent
     * @param float $s_y scaling factor for height as percent
     * @param float $x   Origin abscissa
     * @param float $y   Origin ordinate
     */
    function scale($s_x, $s_y, $x, $y)
    {
        $y = $this->currentPageSize["height"] - $y;

        $tm = [
            $s_x,
            0,
            0,
            $s_y,
            $x * (1 - $s_x),
            $y * (1 - $s_y)
        ];

        $this->transform($tm);
    }

    /**
     * translate
     *
     * @param float $t_x movement to the right
     * @param float $t_y movement to the bottom
     */
    function translate($t_x, $t_y)
    {
        $tm = [
            1,
            0,
            0,
            1,
            $t_x,
            -$t_y
        ];

        $this->transform($tm);
    }

    /**
     * rotate
     *
     * @param float $angle angle in degrees for counter-clockwise rotation
     * @param float $x     Origin abscissa
     * @param float $y     Origin ordinate
     */
    function rotate($angle, $x, $y)
    {
        $y = $this->currentPageSize["height"] - $y;

        $a = deg2rad($angle);
        $cos_a = cos($a);
        $sin_a = sin($a);

        $tm = [
            $cos_a,
            -$sin_a,
            $sin_a,
            $cos_a,
            $x - $sin_a * $y - $cos_a * $x,
            $y - $cos_a * $y + $sin_a * $x,
        ];

        $this->transform($tm);
    }

    /**
     * skew
     *
     * @param float $angle_x
     * @param float $angle_y
     * @param float $x Origin abscissa
     * @param float $y Origin ordinate
     */
    function skew($angle_x, $angle_y, $x, $y)
    {
        $y = $this->currentPageSize["height"] - $y;

        $tan_x = tan(deg2rad($angle_x));
        $tan_y = tan(deg2rad($angle_y));

        $tm = [
            1,
            -$tan_y,
            -$tan_x,
            1,
            $tan_x * $y,
            $tan_y * $x,
        ];

        $this->transform($tm);
    }

    /**
     * apply graphic transformations
     *
     * @param array $tm transformation matrix
     */
    function transform($tm)
    {
        $this->addContent(vsprintf("\n %.3F %.3F %.3F %.3F %.3F %.3F cm", $tm));
    }

    /**
     * add a new page to the document
     * this also makes the new page the current active object
     *
     * @param int $insert
     * @param int $id
     * @param string $pos
     * @return int
     */
    function newPage($insert = 0, $id = 0, $pos = 'after')
    {
        // if there is a state saved, then go up the stack closing them
        // then on the new page, re-open them with the right setings

        if ($this->nStateStack) {
            for ($i = $this->nStateStack; $i >= 1; $i--) {
                $this->restoreState($i);
            }
        }

        $this->numObj++;

        if ($insert) {
            // the id from the ezPdf class is the id of the contents of the page, not the page object itself
            // query that object to find the parent
            $rid = $this->objects[$id]['onPage'];
            $opt = ['rid' => $rid, 'pos' => $pos];
            $this->o_page($this->numObj, 'new', $opt);
        } else {
            $this->o_page($this->numObj, 'new');
        }

        // if there is a stack saved, then put that onto the page
        if ($this->nStateStack) {
            for ($i = 1; $i <= $this->nStateStack; $i++) {
                $this->saveState($i);
            }
        }

        // and if there has been a stroke or fill color set, then transfer them
        if (isset($this->currentColor)) {
            $this->setColor($this->currentColor, true);
        }

        if (isset($this->currentStrokeColor)) {
            $this->setStrokeColor($this->currentStrokeColor, true);
        }

        // if there is a line style set, then put this in too
        if (mb_strlen($this->currentLineStyle, '8bit')) {
            $this->addContent("\n$this->currentLineStyle");
        }

        // the call to the o_page object set currentContents to the present page, so this can be returned as the page id
        return $this->currentContents;
    }

    /**
     * Streams the PDF to the client.
     *
     * @param string $filename The filename to present to the client.
     * @param array $options Associative array: 'compress' => 1 or 0 (default 1); 'Attachment' => 1 or 0 (default 1).
     */
    function stream($filename = "document.pdf", $options = [])
    {
        if (headers_sent()) {
            die("Unable to stream pdf: headers already sent");
        }

        if (!isset($options["compress"])) $options["compress"] = true;
        if (!isset($options["Attachment"])) $options["Attachment"] = true;

        $debug = !$options['compress'];
        $tmp = ltrim($this->output($debug));

        header("Cache-Control: private");
        header("Content-Type: application/pdf");
        header("Content-Length: " . mb_strlen($tmp, "8bit"));

        $filename = str_replace(["\n", "'"], "", basename($filename, ".pdf")) . ".pdf";
        $attachment = $options["Attachment"] ? "attachment" : "inline";

        $encoding = mb_detect_encoding($filename);
        $fallbackfilename = mb_convert_encoding($filename, "ISO-8859-1", $encoding);
        $fallbackfilename = str_replace("\"", "", $fallbackfilename);
        $encodedfilename = rawurlencode($filename);

        $contentDisposition = "Content-Disposition: $attachment; filename=\"$fallbackfilename\"";
        if ($fallbackfilename !== $filename) {
            $contentDisposition .= "; filename*=UTF-8''$encodedfilename";
        }
        header($contentDisposition);

        echo $tmp;
        flush();
    }

    /**
     * return the height in units of the current font in the given size
     *
     * @param float $size
     *
     * @return float
     */
    public function getFontHeight(float $size): float
    {
        if (!$this->numFonts) {
            $this->selectFont($this->defaultFont);
        }

        $font = $this->fonts[$this->currentFont];

        // for the current font, and the given size, what is the height of the font in user units
        if (isset($font['Ascender']) && isset($font['Descender'])) {
            $h = $font['Ascender'] - $font['Descender'];
        } else {
            $h = $font['FontBBox'][3] - $font['FontBBox'][1];
        }

        // have to adjust by a font offset for Windows fonts.  unfortunately it looks like
        // the bounding box calculations are wrong and I don't know why.
        if (isset($font['FontHeightOffset'])) {
            // For CourierNew from Windows this needs to be -646 to match the
            // Adobe native Courier font.
            //
            // For FreeMono from GNU this needs to be -337 to match the
            // Courier font.
            //
            // Both have been added manually to the .afm and .ufm files.
            $h += (int)$font['FontHeightOffset'];
        }

        return $size * $h / 1000;
    }

    /**
     * @param float $size
     *
     * @return float
     */
    public function getFontXHeight(float $size): float
    {
        if (!$this->numFonts) {
            $this->selectFont($this->defaultFont);
        }

        $font = $this->fonts[$this->currentFont];

        // for the current font, and the given size, what is the height of the font in user units
        if (isset($font['XHeight'])) {
            $xh = $font['Ascender'] - $font['Descender'];
        } else {
            $xh = $this->getFontHeight($size) / 2;
        }

        return $size * $xh / 1000;
    }

    /**
     * return the font descender, this will normally return a negative number
     * if you add this number to the baseline, you get the level of the bottom of the font
     * it is in the pdf user units
     *
     * @param float $size
     *
     * @return float
     */
    public function getFontDescender(float $size): float
    {
        // note that this will most likely return a negative value
        if (!$this->numFonts) {
            $this->selectFont($this->defaultFont);
        }

        //$h = $this->fonts[$this->currentFont]['FontBBox'][1];
        $h = $this->fonts[$this->currentFont]['Descender'];

        return $size * $h / 1000;
    }

    /**
     * filter the text, this is applied to all text just before being inserted into the pdf document
     * it escapes the various things that need to be escaped, and so on
     *
     * @param $text
     * @param bool $bom
     * @param bool $convert_encoding
     * @return string
     */
    function filterText($text, $bom = true, $convert_encoding = true)
    {
        if (!$this->numFonts) {
            $this->selectFont($this->defaultFont);
        }

        if ($convert_encoding) {
            $cf = $this->currentFont;
            if (isset($this->fonts[$cf]) && $this->fonts[$cf]['isUnicode']) {
                $text = $this->utf8toUtf16BE($text, $bom);
            } else {
                //$text = html_entity_decode($text, ENT_QUOTES);
                $text = mb_convert_encoding($text, self::$targetEncoding, 'UTF-8');
            }
        } elseif ($bom) {
            $text = $this->utf8toUtf16BE($text, $bom);
        }

        // the chr(13) substitution fixes a bug seen in TCPDF (bug #1421290)
        return strtr($text, [')' => '\\)', '(' => '\\(', '\\' => '\\\\', chr(13) => '\r']);
    }

    /**
     * return array containing codepoints (UTF-8 character values) for the
     * string passed in.
     *
     * based on the excellent TCPDF code by Nicola Asuni and the
     * RFC for UTF-8 at http://www.faqs.org/rfcs/rfc3629.html
     *
     * @param string $text UTF-8 string to process
     * @return array UTF-8 codepoints array for the string
     */
    function utf8toCodePointsArray(&$text)
    {
        $length = mb_strlen($text, '8bit'); // http://www.php.net/manual/en/function.mb-strlen.php#77040
        $unicode = []; // array containing unicode values
        $bytes = []; // array containing single character byte sequences
        $numbytes = 1; // number of octets needed to represent the UTF-8 character

        for ($i = 0; $i < $length; $i++) {
            $c = ord($text[$i]); // get one string character at time
            if (count($bytes) === 0) { // get starting octect
                if ($c <= 0x7F) {
                    $unicode[] = $c; // use the character "as is" because is ASCII
                    $numbytes = 1;
                } elseif (($c >> 0x05) === 0x06) { // 2 bytes character (0x06 = 110 BIN)
                    $bytes[] = ($c - 0xC0) << 0x06;
                    $numbytes = 2;
                } elseif (($c >> 0x04) === 0x0E) { // 3 bytes character (0x0E = 1110 BIN)
                    $bytes[] = ($c - 0xE0) << 0x0C;
                    $numbytes = 3;
                } elseif (($c >> 0x03) === 0x1E) { // 4 bytes character (0x1E = 11110 BIN)
                    $bytes[] = ($c - 0xF0) << 0x12;
                    $numbytes = 4;
                } else {
                    // use replacement character for other invalid sequences
                    $unicode[] = 0xFFFD;
                    $bytes = [];
                    $numbytes = 1;
                }
            } elseif (($c >> 0x06) === 0x02) { // bytes 2, 3 and 4 must start with 0x02 = 10 BIN
                $bytes[] = $c - 0x80;
                if (count($bytes) === $numbytes) {
                    // compose UTF-8 bytes to a single unicode value
                    $c = $bytes[0];
                    for ($j = 1; $j < $numbytes; $j++) {
                        $c += ($bytes[$j] << (($numbytes - $j - 1) * 0x06));
                    }
                    if ((($c >= 0xD800) and ($c <= 0xDFFF)) or ($c >= 0x10FFFF)) {
                        // The definition of UTF-8 prohibits encoding character numbers between
                        // U+D800 and U+DFFF, which are reserved for use with the UTF-16
                        // encoding form (as surrogate pairs) and do not directly represent
                        // characters.
                        $unicode[] = 0xFFFD; // use replacement character
                    } else {
                        $unicode[] = $c; // add char to array
                    }
                    // reset data for next char
                    $bytes = [];
                    $numbytes = 1;
                }
            } else {
                // use replacement character for other invalid sequences
                $unicode[] = 0xFFFD;
                $bytes = [];
                $numbytes = 1;
            }
        }

        return $unicode;
    }

    /**
     * convert UTF-8 to UTF-16 with an additional byte order marker
     * at the front if required.
     *
     * based on the excellent TCPDF code by Nicola Asuni and the
     * RFC for UTF-8 at http://www.faqs.org/rfcs/rfc3629.html
     *
     * @param string  $text UTF-8 string to process
     * @param boolean $bom  whether to add the byte order marker
     * @return string UTF-16 result string
     */
    function utf8toUtf16BE(&$text, $bom = true)
    {
        $out = $bom ? "\xFE\xFF" : '';

        $unicode = $this->utf8toCodePointsArray($text);
        foreach ($unicode as $c) {
            if ($c === 0xFFFD) {
                $out .= "\xFF\xFD"; // replacement character
            } elseif ($c < 0x10000) {
                $out .= chr($c >> 0x08) . chr($c & 0xFF);
            } else {
                $c -= 0x10000;
                $w1 = 0xD800 | ($c >> 0x10);
                $w2 = 0xDC00 | ($c & 0x3FF);
                $out .= chr($w1 >> 0x08) . chr($w1 & 0xFF) . chr($w2 >> 0x08) . chr($w2 & 0xFF);
            }
        }

        return $out;
    }

    /**
     * given a start position and information about how text is to be laid out, calculate where
     * on the page the text will end
     *
     * @param $x
     * @param $y
     * @param $angle
     * @param $size
     * @param $wa
     * @param $text
     * @return array
     */
    private function getTextPosition($x, $y, $angle, $size, $wa, $text)
    {
        // given this information return an array containing x and y for the end position as elements 0 and 1
        $w = $this->getTextWidth($size, $text);

        // need to adjust for the number of spaces in this text
        $words = explode(' ', $text);
        $nspaces = count($words) - 1;
        $w += $wa * $nspaces;
        $a = deg2rad((float)$angle);

        return [cos($a) * $w + $x, -sin($a) * $w + $y];
    }

    /**
     * Callback method used by smallCaps
     *
     * @param array $matches
     *
     * @return string
     */
    function toUpper($matches)
    {
        return mb_strtoupper($matches[0]);
    }

    function concatMatches($matches)
    {
        $str = "";
        foreach ($matches as $match) {
            $str .= $match[0];
        }

        return $str;
    }

    /**
     * register text for font subsetting
     *
     * @param string $font
     * @param string $text
     */
    function registerText($font, $text)
    {
        if (!$this->isUnicode || in_array(mb_strtolower(basename($font)), self::$coreFonts)) {
            return;
        }

        if (!isset($this->stringSubsets[$font])) {
            $base_subset = "\u{fffd}\u{fffe}\u{ffff}";
            $this->stringSubsets[$font] = $this->utf8toCodePointsArray($base_subset);
        }

        $this->stringSubsets[$font] = array_unique(
            array_merge($this->stringSubsets[$font], $this->utf8toCodePointsArray($text))
        );
    }

    /**
     * add text to the document, at a specified location, size and angle on the page
     *
     * @param float  $x
     * @param float  $y
     * @param float  $size
     * @param string $text
     * @param float  $angle
     * @param float  $wordSpaceAdjust
     * @param float  $charSpaceAdjust
     * @param bool   $smallCaps
     */
    function addText($x, $y, $size, $text, $angle = 0, $wordSpaceAdjust = 0, $charSpaceAdjust = 0, $smallCaps = false)
    {
        if (!$this->numFonts) {
            $this->selectFont($this->defaultFont);
        }

        $text = str_replace(["\r", "\n"], "", $text);

        // if ($smallCaps) {
        //     preg_match_all("/(\P{Ll}+)/u", $text, $matches, PREG_SET_ORDER);
        //     $lower = $this->concatMatches($matches);
        //     d($lower);

        //     preg_match_all("/(\p{Ll}+)/u", $text, $matches, PREG_SET_ORDER);
        //     $other = $this->concatMatches($matches);
        //     d($other);

        //     $text = preg_replace_callback("/\p{Ll}/u", array($this, "toUpper"), $text);
        // }

        // if there are any open callbacks, then they should be called, to show the start of the line
        if ($this->nCallback > 0) {
            for ($i = $this->nCallback; $i > 0; $i--) {
                // call each function
                $info = [
                    'x'         => $x,
                    'y'         => $y,
                    'angle'     => $angle,
                    'status'    => 'sol',
                    'p'         => $this->callback[$i]['p'],
                    'nCallback' => $this->callback[$i]['nCallback'],
                    'height'    => $this->callback[$i]['height'],
                    'descender' => $this->callback[$i]['descender']
                ];

                $func = $this->callback[$i]['f'];
                $this->$func($info);
            }
        }

        if ($angle == 0) {
            $this->addContent(sprintf("\nBT %.3F %.3F Td", $x, $y));
        } else {
            $a = deg2rad((float)$angle);
            $this->addContent(
                sprintf("\nBT %.3F %.3F %.3F %.3F %.3F %.3F Tm", cos($a), -sin($a), sin($a), cos($a), $x, $y)
            );
        }

        if ($wordSpaceAdjust != 0) {
            $this->addContent(sprintf(" %.3F Tw", $wordSpaceAdjust));
        }

        if ($charSpaceAdjust != 0) {
            $this->addContent(sprintf(" %.3F Tc", $charSpaceAdjust));
        }

        $len = mb_strlen($text);
        $start = 0;

        if ($start < $len) {
            $part = $text; // OAR - Don't need this anymore, given that $start always equals zero.  substr($text, $start);
            $place_text = $this->filterText($part, false);
            // modify unicode text so that extra word spacing is manually implemented (bug #)
            if ($this->fonts[$this->currentFont]['isUnicode'] && $wordSpaceAdjust != 0) {
                $space_scale = 1000 / $size;
                $place_text = str_replace("\x00\x20", "\x00\x20)\x00\x20" . (-round($space_scale * $wordSpaceAdjust)) . "\x00\x20(", $place_text);
            }
            $this->addContent(" /F$this->currentFontNum " . sprintf('%.1F Tf ', $size));
            $this->addContent(" [($place_text)] TJ");
        }

        if ($wordSpaceAdjust != 0) {
            $this->addContent(sprintf(" %.3F Tw", 0));
        }

        if ($charSpaceAdjust != 0) {
            $this->addContent(sprintf(" %.3F Tc", 0));
        }

        $this->addContent(' ET');

        // if there are any open callbacks, then they should be called, to show the end of the line
        if ($this->nCallback > 0) {
            for ($i = $this->nCallback; $i > 0; $i--) {
                // call each function
                $tmp = $this->getTextPosition($x, $y, $angle, $size, $wordSpaceAdjust, $text);
                $info = [
                    'x'         => $tmp[0],
                    'y'         => $tmp[1],
                    'angle'     => $angle,
                    'status'    => 'eol',
                    'p'         => $this->callback[$i]['p'],
                    'nCallback' => $this->callback[$i]['nCallback'],
                    'height'    => $this->callback[$i]['height'],
                    'descender' => $this->callback[$i]['descender']
                ];
                $func = $this->callback[$i]['f'];
                $this->$func($info);
            }
        }

        if ($this->fonts[$this->currentFont]['isSubsetting']) {
            $this->registerText($this->currentFont, $text);
        }
    }

    /**
     * calculate how wide a given text string will be on a page, at a given size.
     * this can be called externally, but is also used by the other class functions
     *
     * @param float  $size
     * @param string $text
     * @param float  $wordSpacing
     * @param float  $charSpacing
     *
     * @return float
     */
    public function getTextWidth(float $size, string $text, float $wordSpacing = 0.0, float $charSpacing = 0.0): float
    {
        static $ord_cache = [];

        // this function should not change any of the settings, though it will need to
        // track any directives which change during calculation, so copy them at the start
        // and put them back at the end.
        $store_currentTextState = $this->currentTextState;

        if (!$this->numFonts) {
            $this->selectFont($this->defaultFont);
        }

        $text = str_replace(["\r", "\n"], "", $text);

        // hmm, this is where it all starts to get tricky - use the font information to
        // calculate the width of each character, add them up and convert to user units
        $w = 0;
        $cf = $this->currentFont;
        $current_font = $this->fonts[$cf];
        $space_scale = 1000 / ($size > 0 ? $size : 1);

        if ($current_font['isUnicode']) {
            // for Unicode, use the code points array to calculate width rather
            // than just the string itself
            $unicode = $this->utf8toCodePointsArray($text);

            foreach ($unicode as $char) {
                // check if we have to replace character
                if (isset($current_font['differences'][$char])) {
                    $char = $current_font['differences'][$char];
                }

                if (isset($current_font['C'][$char])) {
                    $char_width = $current_font['C'][$char];

                    // add the character width
                    $w += $char_width;

                    // add additional padding for space
                    if (isset($current_font['codeToName'][$char]) && $current_font['codeToName'][$char] === 'space') {  // Space
                        $w += $wordSpacing * $space_scale;
                    }
                }
            }

            // add additional char spacing
            if ($charSpacing != 0) {
                $w += $charSpacing * $space_scale * count($unicode);
            }

        } else {
            // If CPDF is in Unicode mode but the current font does not support Unicode we need to convert the character set to Windows-1252
            if ($this->isUnicode) {
                $text = mb_convert_encoding($text, 'Windows-1252', 'UTF-8');
            }

            $len = mb_strlen($text, 'Windows-1252');

            for ($i = 0; $i < $len; $i++) {
                $c = $text[$i];
                $char = isset($ord_cache[$c]) ? $ord_cache[$c] : ($ord_cache[$c] = ord($c));

                // check if we have to replace character
                if (isset($current_font['differences'][$char])) {
                    $char = $current_font['differences'][$char];
                }

                if (isset($current_font['C'][$char])) {
                    $char_width = $current_font['C'][$char];

                    // add the character width
                    $w += $char_width;

                    // add additional padding for space
                    if (isset($current_font['codeToName'][$char]) && $current_font['codeToName'][$char] === 'space') {  // Space
                        $w += $wordSpacing * $space_scale;
                    }
                }
            }

            // add additional char spacing
            if ($charSpacing != 0) {
                $w += $charSpacing * $space_scale * $len;
            }
        }

        $this->currentTextState = $store_currentTextState;
        $this->setCurrentFont();

        return $w * $size / 1000;
    }

    /**
     * this will be called at a new page to return the state to what it was on the
     * end of the previous page, before the stack was closed down
     * This is to get around not being able to have open 'q' across pages
     *
     * @param int $pageEnd
     */
    function saveState($pageEnd = 0)
    {
        if ($pageEnd) {
            // this will be called at a new page to return the state to what it was on the
            // end of the previous page, before the stack was closed down
            // This is to get around not being able to have open 'q' across pages
            $opt = $this->stateStack[$pageEnd];
            // ok to use this as stack starts numbering at 1
            $this->setColor($opt['col'], true);
            $this->setStrokeColor($opt['str'], true);
            $this->addContent("\n" . $opt['lin']);
            //    $this->currentLineStyle = $opt['lin'];
        } else {
            $this->nStateStack++;
            $this->stateStack[$this->nStateStack] = [
                'col' => $this->currentColor,
                'str' => $this->currentStrokeColor,
                'lin' => $this->currentLineStyle
            ];
        }

        $this->save();
    }

    /**
     * restore a previously saved state
     *
     * @param int $pageEnd
     */
    function restoreState($pageEnd = 0)
    {
        if (!$pageEnd) {
            $n = $this->nStateStack;
            $this->currentColor = $this->stateStack[$n]['col'];
            $this->currentStrokeColor = $this->stateStack[$n]['str'];
            $this->addContent("\n" . $this->stateStack[$n]['lin']);
            $this->currentLineStyle = $this->stateStack[$n]['lin'];
            $this->stateStack[$n] = null;
            unset($this->stateStack[$n]);
            $this->nStateStack--;
        }

        $this->restore();
    }

    /**
     * make a loose object, the output will go into this object, until it is closed, then will revert to
     * the current one.
     * this object will not appear until it is included within a page.
     * the function will return the object number
     *
     * @return int
     */
    function openObject()
    {
        $this->nStack++;
        $this->stack[$this->nStack] = ['c' => $this->currentContents, 'p' => $this->currentPage];
        // add a new object of the content type, to hold the data flow
        $this->numObj++;
        $this->o_contents($this->numObj, 'new');
        $this->currentContents = $this->numObj;
        $this->looseObjects[$this->numObj] = 1;

        return $this->numObj;
    }

    /**
     * open an existing object for editing
     *
     * @param $id
     */
    function reopenObject($id)
    {
        $this->nStack++;
        $this->stack[$this->nStack] = ['c' => $this->currentContents, 'p' => $this->currentPage];
        $this->currentContents = $id;

        // also if this object is the primary contents for a page, then set the current page to its parent
        if (isset($this->objects[$id]['onPage'])) {
            $this->currentPage = $this->objects[$id]['onPage'];
        }
    }

    /**
     * close an object
     */
    function closeObject()
    {
        // close the object, as long as there was one open in the first place, which will be indicated by
        // an objectId on the stack.
        if ($this->nStack > 0) {
            $this->currentContents = $this->stack[$this->nStack]['c'];
            $this->currentPage = $this->stack[$this->nStack]['p'];
            $this->nStack--;
            // easier to probably not worry about removing the old entries, they will be overwritten
            // if there are new ones.
        }
    }

    /**
     * stop an object from appearing on pages from this point on
     *
     * @param $id
     */
    function stopObject($id)
    {
        // if an object has been appearing on pages up to now, then stop it, this page will
        // be the last one that could contain it.
        if (isset($this->addLooseObjects[$id])) {
            $this->addLooseObjects[$id] = '';
        }
    }

    /**
     * after an object has been created, it wil only show if it has been added, using this function.
     *
     * @param $id
     * @param string $options
     */
    function addObject($id, $options = 'add')
    {
        // add the specified object to the page
        if (isset($this->looseObjects[$id]) && $this->currentContents != $id) {
            // then it is a valid object, and it is not being added to itself
            switch ($options) {
                case 'all':
                    // then this object is to be added to this page (done in the next block) and
                    // all future new pages.
                    $this->addLooseObjects[$id] = 'all';

                case 'add':
                    if (isset($this->objects[$this->currentContents]['onPage'])) {
                        // then the destination contents is the primary for the page
                        // (though this object is actually added to that page)
                        $this->o_page($this->objects[$this->currentContents]['onPage'], 'content', $id);
                    }
                    break;

                case 'even':
                    $this->addLooseObjects[$id] = 'even';
                    $pageObjectId = $this->objects[$this->currentContents]['onPage'];
                    if ($this->objects[$pageObjectId]['info']['pageNum'] % 2 == 0) {
                        $this->addObject($id);
                        // hacky huh :)
                    }
                    break;

                case 'odd':
                    $this->addLooseObjects[$id] = 'odd';
                    $pageObjectId = $this->objects[$this->currentContents]['onPage'];
                    if ($this->objects[$pageObjectId]['info']['pageNum'] % 2 == 1) {
                        $this->addObject($id);
                        // hacky huh :)
                    }
                    break;

                case 'next':
                    $this->addLooseObjects[$id] = 'all';
                    break;

                case 'nexteven':
                    $this->addLooseObjects[$id] = 'even';
                    break;

                case 'nextodd':
                    $this->addLooseObjects[$id] = 'odd';
                    break;
            }
        }
    }

    /**
     * return a storable representation of a specific object
     *
     * @param $id
     * @return string|null
     */
    function serializeObject($id)
    {
        if (array_key_exists($id, $this->objects)) {
            return serialize($this->objects[$id]);
        }

        return null;
    }

    /**
     * restore an object from its stored representation. Returns its new object id.
     *
     * @param $obj
     * @return int
     */
    function restoreSerializedObject($obj)
    {
        $obj_id = $this->openObject();
        $this->objects[$obj_id] = unserialize($obj);
        $this->closeObject();

        return $obj_id;
    }

    /**
     * Embeds a file inside the PDF
     *
     * @param string $filepath path to the file to store inside the PDF
     * @param string $embeddedFilename the filename displayed in the list of embedded files
     * @param string $description a description in the list of embedded files
     */
    public function addEmbeddedFile(string $filepath, string $embeddedFilename, string $description): void
    {
        $this->numObj++;
        $this->o_embedded_file_dictionary(
            $this->numObj,
            'new',
            [
                'filepath' => $filepath,
                'filename' => $embeddedFilename,
                'description' => $description
            ]
        );
    }

    /**
     * Add content to the documents info object
     *
     * @param string|array $label
     * @param string       $value
     */
    public function addInfo($label, string $value = ""): void
    {
        // this will only work if the label is one of the valid ones.
        // modify this so that arrays can be passed as well.
        // if $label is an array then assume that it is key => value pairs
        // else assume that they are both scalar, anything else will probably error
        if (is_array($label)) {
            foreach ($label as $l => $v) {
                $this->o_info($this->infoObject, $l, (string) $v);
            }
        } else {
            $this->o_info($this->infoObject, $label, $value);
        }
    }

    /**
     * set the viewer preferences of the document, it is up to the browser to obey these.
     *
     * @param $label
     * @param int $value
     */
    function setPreferences($label, $value = 0)
    {
        // this will only work if the label is one of the valid ones.
        if (is_array($label)) {
            foreach ($label as $l => $v) {
                $this->o_catalog($this->catalogId, 'viewerPreferences', [$l => $v]);
            }
        } else {
            $this->o_catalog($this->catalogId, 'viewerPreferences', [$label => $value]);
        }
    }

    /**
     * extract an integer from a position in a byte stream
     *
     * @param $data
     * @param $pos
     * @param $num
     * @return int
     */
    private function getBytes(&$data, $pos, $num)
    {
        // return the integer represented by $num bytes from $pos within $data
        $ret = 0;
        for ($i = 0; $i < $num; $i++) {
            $ret *= 256;
            $ret += ord($data[$pos + $i]);
        }

        return $ret;
    }

    /**
     * Check if image already added to pdf image directory.
     * If yes, need not to create again (pass empty data)
     *
     * @param string $imgname
     * @return bool
     */
    function image_iscached($imgname)
    {
        return isset($this->imagelist[$imgname]);
    }

    /**
     * add a PNG image into the document, from a GD object
     * this should work with remote files
     *
     * @param \GdImage|resource $img A GD resource
     * @param string $file The PNG file
     * @param float $x X position
     * @param float $y Y position
     * @param float $w Width
     * @param float $h Height
     * @param bool $is_mask true if the image is a mask
     * @param bool $mask true if the image is masked
     * @throws Exception
     */
    function addImagePng(&$img, $file, $x, $y, $w = 0.0, $h = 0.0, $is_mask = false, $mask = null)
    {
        if (!function_exists("imagepng")) {
            throw new \Exception("The PHP GD extension is required, but is not installed.");
        }

        //if already cached, need not to read again
        if (isset($this->imagelist[$file])) {
            $data = null;
        } else {
            // Example for transparency handling on new image. Retain for current image
            // $tIndex = imagecolortransparent($img);
            // if ($tIndex > 0) {
            //   $tColor    = imagecolorsforindex($img, $tIndex);
            //   $new_tIndex    = imagecolorallocate($new_img, $tColor['red'], $tColor['green'], $tColor['blue']);
            //   imagefill($new_img, 0, 0, $new_tIndex);
            //   imagecolortransparent($new_img, $new_tIndex);
            // }
            // blending mode (literal/blending) on drawing into current image. not relevant when not saved or not drawn
            //imagealphablending($img, true);

            //default, but explicitely set to ensure pdf compatibility
            imagesavealpha($img, false/*!$is_mask && !$mask*/);

            $error = 0;
            //DEBUG_IMG_TEMP
            //debugpng
            if (defined("DEBUGPNG") && DEBUGPNG) {
                print '[addImagePng ' . $file . ']';
            }

            ob_start();
            @imagepng($img);
            $data = ob_get_clean();

            if ($data == '') {
                $error = 1;
                $errormsg = 'trouble writing file from GD';
                //DEBUG_IMG_TEMP
                //debugpng
                if (defined("DEBUGPNG") && DEBUGPNG) {
                    print 'trouble writing file from GD';
                }
            }

            if ($error) {
                $this->addMessage('PNG error - (' . $file . ') ' . $errormsg);

                return;
            }
        }  //End isset($this->imagelist[$file]) (png Duplicate removal)

        $this->addPngFromBuf($data, $file, $x, $y, $w, $h, $is_mask, $mask);
    }

    /**
     * @param $file
     * @param $x
     * @param $y
     * @param $w
     * @param $h
     * @param $byte
     */
    protected function addImagePngAlpha($file, $x, $y, $w, $h, $byte)
    {
        // generate images
        $img = @imagecreatefrompng($file);

        if ($img === false) {
            return;
        }

        // FIXME The pixel transformation doesn't work well with 8bit PNGs
        $eight_bit = ($byte & 4) !== 4;

        $wpx = imagesx($img);
        $hpx = imagesy($img);

        imagesavealpha($img, false);

        // create temp alpha file
        $tempfile_alpha = @tempnam($this->tmp, "cpdf_img_");
        @unlink($tempfile_alpha);
        $tempfile_alpha = "$tempfile_alpha.png";

        // create temp plain file
        $tempfile_plain = @tempnam($this->tmp, "cpdf_img_");
        @unlink($tempfile_plain);
        $tempfile_plain = "$tempfile_plain.png";

        $imgalpha = imagecreate($wpx, $hpx);
        imagesavealpha($imgalpha, false);

        // generate gray scale palette (0 -> 255)
        for ($c = 0; $c < 256; ++$c) {
            imagecolorallocate($imgalpha, $c, $c, $c);
        }

        // Use PECL gmagick + Graphics Magic to process transparent PNG images
        if (extension_loaded("gmagick")) {
            $gmagick = new \Gmagick($file);
            $gmagick->setimageformat('png');

            // Get opacity channel (negative of alpha channel)
            $alpha_channel_neg = clone $gmagick;
            $alpha_channel_neg->separateimagechannel(\Gmagick::CHANNEL_OPACITY);

            // Negate opacity channel
            $alpha_channel = new \Gmagick();
            $alpha_channel->newimage($wpx, $hpx, "#FFFFFF", "png");
            $alpha_channel->compositeimage($alpha_channel_neg, \Gmagick::COMPOSITE_DIFFERENCE, 0, 0);
            $alpha_channel->separateimagechannel(\Gmagick::CHANNEL_RED);
            $alpha_channel->writeimage($tempfile_alpha);

            // Cast to 8bit+palette
            $imgalpha_ = @imagecreatefrompng($tempfile_alpha);
            imagecopy($imgalpha, $imgalpha_, 0, 0, 0, 0, $wpx, $hpx);
            imagedestroy($imgalpha_);
            imagepng($imgalpha, $tempfile_alpha);

            // Make opaque image
            $color_channels = new \Gmagick();
            $color_channels->newimage($wpx, $hpx, "#FFFFFF", "png");
            $color_channels->compositeimage($gmagick, \Gmagick::COMPOSITE_COPYRED, 0, 0);
            $color_channels->compositeimage($gmagick, \Gmagick::COMPOSITE_COPYGREEN, 0, 0);
            $color_channels->compositeimage($gmagick, \Gmagick::COMPOSITE_COPYBLUE, 0, 0);
            $color_channels->writeimage($tempfile_plain);

            $imgplain = @imagecreatefrompng($tempfile_plain);
        }
        // Use PECL imagick + ImageMagic to process transparent PNG images
        elseif (extension_loaded("imagick")) {
            // Native cloning was added to pecl-imagick in svn commit 263814
            // the first version containing it was 3.0.1RC1
            static $imagickClonable = null;
            if ($imagickClonable === null) {
                $imagickClonable = true;
                if (defined('Imagick::IMAGICK_EXTVER')) {
                    $imagickVersion = \Imagick::IMAGICK_EXTVER;
                } else {
                    $imagickVersion = '0';
                }
                if (version_compare($imagickVersion, '0.0.1', '>=')) {
                    $imagickClonable = version_compare($imagickVersion, '3.0.1rc1', '>=');
                }
            }

            $imagick = new \Imagick($file);
            $imagick->setFormat('png');

            // Get opacity channel (negative of alpha channel)
            if ($imagick->getImageAlphaChannel()) {
                $alpha_channel = $imagickClonable ? clone $imagick : $imagick->clone();
                $alpha_channel->separateImageChannel(\Imagick::CHANNEL_ALPHA);
                // Since ImageMagick7 negate invert transparency as default
                if (\Imagick::getVersion()['versionNumber'] < 1800) {
                    $alpha_channel->negateImage(true);
                }
                $alpha_channel->writeImage($tempfile_alpha);

                // Cast to 8bit+palette
                $imgalpha_ = @imagecreatefrompng($tempfile_alpha);
                imagecopy($imgalpha, $imgalpha_, 0, 0, 0, 0, $wpx, $hpx);
                imagedestroy($imgalpha_);
                imagepng($imgalpha, $tempfile_alpha);
            } else {
                $tempfile_alpha = null;
            }

            // Make opaque image
            $color_channels = new \Imagick();
            $color_channels->newImage($wpx, $hpx, "#FFFFFF", "png");
            $color_channels->compositeImage($imagick, \Imagick::COMPOSITE_COPYRED, 0, 0);
            $color_channels->compositeImage($imagick, \Imagick::COMPOSITE_COPYGREEN, 0, 0);
            $color_channels->compositeImage($imagick, \Imagick::COMPOSITE_COPYBLUE, 0, 0);
            $color_channels->writeImage($tempfile_plain);

            $imgplain = @imagecreatefrompng($tempfile_plain);
        } else {
            // allocated colors cache
            $allocated_colors = [];

            // extract alpha channel
            for ($xpx = 0; $xpx < $wpx; ++$xpx) {
                for ($ypx = 0; $ypx < $hpx; ++$ypx) {
                    $color = imagecolorat($img, $xpx, $ypx);
                    $col = imagecolorsforindex($img, $color);
                    $alpha = $col['alpha'];

                    if ($eight_bit) {
                        // with gamma correction
                        $gammacorr = 2.2;
                        $pixel = round(pow((((127 - $alpha) * 255 / 127) / 255), $gammacorr) * 255);
                    } else {
                        // without gamma correction
                        $pixel = (127 - $alpha) * 2;

                        $key = $col['red'] . $col['green'] . $col['blue'];

                        if (!isset($allocated_colors[$key])) {
                            $pixel_img = imagecolorallocate($img, $col['red'], $col['green'], $col['blue']);
                            $allocated_colors[$key] = $pixel_img;
                        } else {
                            $pixel_img = $allocated_colors[$key];
                        }

                        imagesetpixel($img, $xpx, $ypx, $pixel_img);
                    }

                    imagesetpixel($imgalpha, $xpx, $ypx, $pixel);
                }
            }

            // extract image without alpha channel
            $imgplain = imagecreatetruecolor($wpx, $hpx);
            imagecopy($imgplain, $img, 0, 0, 0, 0, $wpx, $hpx);
            imagedestroy($img);

            imagepng($imgalpha, $tempfile_alpha);
            imagepng($imgplain, $tempfile_plain);
        }

        $this->imageAlphaList[$file] = [$tempfile_alpha, $tempfile_plain];

        // embed mask image
        if ($tempfile_alpha) {
            $this->addImagePng($imgalpha, $tempfile_alpha, $x, $y, $w, $h, true);
            imagedestroy($imgalpha);
            $this->imageCache[] = $tempfile_alpha;
        }

        // embed image, masked with previously embedded mask
        $this->addImagePng($imgplain, $tempfile_plain, $x, $y, $w, $h, false, ($tempfile_alpha !== null));
        imagedestroy($imgplain);
        $this->imageCache[] = $tempfile_plain;
    }

    /**
     * add a PNG image into the document, from a file
     * this should work with remote files
     *
     * @param $file
     * @param $x
     * @param $y
     * @param int $w
     * @param int $h
     * @throws Exception
     */
    function addPngFromFile($file, $x, $y, $w = 0, $h = 0)
    {
        if (!function_exists("imagecreatefrompng")) {
            throw new \Exception("The PHP GD extension is required, but is not installed.");
        }

        if (isset($this->imageAlphaList[$file])) {
            [$alphaFile, $plainFile] = $this->imageAlphaList[$file];

            if ($alphaFile) {
                $img = null;
                $this->addImagePng($img, $alphaFile, $x, $y, $w, $h, true);
            }

            $img = null;
            $this->addImagePng($img, $plainFile, $x, $y, $w, $h, false, ($plainFile !== null));
            return;
        }

        //if already cached, need not to read again
        if (isset($this->imagelist[$file])) {
            $img = null;
        } else {
            $info = file_get_contents($file, false, null, 24, 5);
            $meta = unpack("CbitDepth/CcolorType/CcompressionMethod/CfilterMethod/CinterlaceMethod", $info);
            $bit_depth = $meta["bitDepth"];
            $color_type = $meta["colorType"];

            // http://www.w3.org/TR/PNG/#11IHDR
            // 3 => indexed
            // 4 => greyscale with alpha
            // 6 => fullcolor with alpha
            $is_alpha = in_array($color_type, [4, 6]) || ($color_type == 3 && $bit_depth != 4);

            if ($is_alpha) { // exclude grayscale alpha
                $this->addImagePngAlpha($file, $x, $y, $w, $h, $color_type);
                return;
            }

            //png files typically contain an alpha channel.
            //pdf file format or class.pdf does not support alpha blending.
            //on alpha blended images, more transparent areas have a color near black.
            //This appears in the result on not storing the alpha channel.
            //Correct would be the box background image or its parent when transparent.
            //But this would make the image dependent on the background.
            //Therefore create an image with white background and copy in
            //A more natural background than black is white.
            //Therefore create an empty image with white background and merge the
            //image in with alpha blending.
            $imgtmp = @imagecreatefrompng($file);
            if (!$imgtmp) {
                return;
            }
            $sx = imagesx($imgtmp);
            $sy = imagesy($imgtmp);
            $img = imagecreatetruecolor($sx, $sy);
            imagealphablending($img, true);

            // @todo is it still needed ??
            $ti = imagecolortransparent($imgtmp);
            if ($ti >= 0) {
                $tc = imagecolorsforindex($imgtmp, $ti);
                $ti = imagecolorallocate($img, $tc['red'], $tc['green'], $tc['blue']);
                imagefill($img, 0, 0, $ti);
                imagecolortransparent($img, $ti);
            } else {
                imagefill($img, 1, 1, imagecolorallocate($img, 255, 255, 255));
            }

            imagecopy($img, $imgtmp, 0, 0, 0, 0, $sx, $sy);
            imagedestroy($imgtmp);
        }
        $this->addImagePng($img, $file, $x, $y, $w, $h);

        if ($img) {
            imagedestroy($img);
        }
    }

    /**
     * add a PNG image into the document, from a file
     * this should work with remote files
     *
     * @param $file
     * @param $x
     * @param $y
     * @param int $w
     * @param int $h
     */
    function addSvgFromFile($file, $x, $y, $w = 0, $h = 0)
    {
        $doc = new \Svg\Document();
        $doc->loadFile($file);
        $dimensions = $doc->getDimensions();

        $this->save();

        $this->transform([$w / $dimensions["width"], 0, 0, $h / $dimensions["height"], $x, $y]);

        $surface = new \Svg\Surface\SurfaceCpdf($doc, $this);
        $doc->render($surface);

        $this->restore();
    }

    /**
     * add a PNG image into the document, from a memory buffer of the file
     *
     * @param $data
     * @param $file
     * @param $x
     * @param $y
     * @param float $w
     * @param float $h
     * @param bool $is_mask
     * @param null $mask
     */
    function addPngFromBuf(&$data, $file, $x, $y, $w = 0.0, $h = 0.0, $is_mask = false, $mask = null)
    {
        if (isset($this->imagelist[$file])) {
            $data = null;
            $info['width'] = $this->imagelist[$file]['w'];
            $info['height'] = $this->imagelist[$file]['h'];
            $label = $this->imagelist[$file]['label'];
        } else {
            if ($data == null) {
                $this->addMessage('addPngFromBuf error - data not present!');

                return;
            }

            $error = 0;

            if (!$error) {
                $header = chr(137) . chr(80) . chr(78) . chr(71) . chr(13) . chr(10) . chr(26) . chr(10);

                if (mb_substr($data, 0, 8, '8bit') != $header) {
                    $error = 1;

                    if (defined("DEBUGPNG") && DEBUGPNG) {
                        print '[addPngFromFile this file does not have a valid header ' . $file . ']';
                    }

                    $errormsg = 'this file does not have a valid header';
                }
            }

            if (!$error) {
                // set pointer
                $p = 8;
                $len = mb_strlen($data, '8bit');

                // cycle through the file, identifying chunks
                $haveHeader = 0;
                $info = [];
                $idata = '';
                $pdata = '';

                while ($p < $len) {
                    $chunkLen = $this->getBytes($data, $p, 4);
                    $chunkType = mb_substr($data, $p + 4, 4, '8bit');

                    switch ($chunkType) {
                        case 'IHDR':
                            // this is where all the file information comes from
                            $info['width'] = $this->getBytes($data, $p + 8, 4);
                            $info['height'] = $this->getBytes($data, $p + 12, 4);
                            $info['bitDepth'] = ord($data[$p + 16]);
                            $info['colorType'] = ord($data[$p + 17]);
                            $info['compressionMethod'] = ord($data[$p + 18]);
                            $info['filterMethod'] = ord($data[$p + 19]);
                            $info['interlaceMethod'] = ord($data[$p + 20]);

                            //print_r($info);
                            $haveHeader = 1;
                            if ($info['compressionMethod'] != 0) {
                                $error = 1;

                                //debugpng
                                if (defined("DEBUGPNG") && DEBUGPNG) {
                                    print '[addPngFromFile unsupported compression method ' . $file . ']';
                                }

                                $errormsg = 'unsupported compression method';
                            }

                            if ($info['filterMethod'] != 0) {
                                $error = 1;

                                //debugpng
                                if (defined("DEBUGPNG") && DEBUGPNG) {
                                    print '[addPngFromFile unsupported filter method ' . $file . ']';
                                }

                                $errormsg = 'unsupported filter method';
                            }
                            break;

                        case 'PLTE':
                            $pdata .= mb_substr($data, $p + 8, $chunkLen, '8bit');
                            break;

                        case 'IDAT':
                            $idata .= mb_substr($data, $p + 8, $chunkLen, '8bit');
                            break;

                        case 'tRNS':
                            //this chunk can only occur once and it must occur after the PLTE chunk and before IDAT chunk
                            //print "tRNS found, color type = ".$info['colorType']."\n";
                            $transparency = [];

                            switch ($info['colorType']) {
                                // indexed color, rbg
                                case 3:
                                    /* corresponding to entries in the plte chunk
                                     Alpha for palette index 0: 1 byte
                                     Alpha for palette index 1: 1 byte
                                     ...etc...
                                    */
                                    // there will be one entry for each palette entry. up until the last non-opaque entry.
                                    // set up an array, stretching over all palette entries which will be o (opaque) or 1 (transparent)
                                    $transparency['type'] = 'indexed';
                                    $trans = 0;

                                    for ($i = $chunkLen; $i >= 0; $i--) {
                                        if (ord($data[$p + 8 + $i]) == 0) {
                                            $trans = $i;
                                        }
                                    }

                                    $transparency['data'] = $trans;
                                    break;

                                // grayscale
                                case 0:
                                    /* corresponding to entries in the plte chunk
                                     Gray: 2 bytes, range 0 .. (2^bitdepth)-1
                                    */
                                    //            $transparency['grayscale'] = $this->PRVT_getBytes($data,$p+8,2); // g = grayscale
                                    $transparency['type'] = 'indexed';
                                    $transparency['data'] = ord($data[$p + 8 + 1]);
                                    break;

                                // truecolor
                                case 2:
                                    /* corresponding to entries in the plte chunk
                                     Red: 2 bytes, range 0 .. (2^bitdepth)-1
                                     Green: 2 bytes, range 0 .. (2^bitdepth)-1
                                     Blue: 2 bytes, range 0 .. (2^bitdepth)-1
                                    */
                                    $transparency['r'] = $this->getBytes($data, $p + 8, 2);
                                    // r from truecolor
                                    $transparency['g'] = $this->getBytes($data, $p + 10, 2);
                                    // g from truecolor
                                    $transparency['b'] = $this->getBytes($data, $p + 12, 2);
                                    // b from truecolor

                                    $transparency['type'] = 'color-key';
                                    break;

                                //unsupported transparency type
                                default:
                                    if (defined("DEBUGPNG") && DEBUGPNG) {
                                        print '[addPngFromFile unsupported transparency type ' . $file . ']';
                                    }
                                    break;
                            }

                            // KS End new code
                            break;

                        default:
                            break;
                    }

                    $p += $chunkLen + 12;
                }

                if (!$haveHeader) {
                    $error = 1;

                    //debugpng
                    if (defined("DEBUGPNG") && DEBUGPNG) {
                        print '[addPngFromFile information header is missing ' . $file . ']';
                    }

                    $errormsg = 'information header is missing';
                }

                if (isset($info['interlaceMethod']) && $info['interlaceMethod']) {
                    $error = 1;

                    //debugpng
                    if (defined("DEBUGPNG") && DEBUGPNG) {
                        print '[addPngFromFile no support for interlaced images in pdf ' . $file . ']';
                    }

                    $errormsg = 'There appears to be no support for interlaced images in pdf.';
                }
            }

            if (!$error && $info['bitDepth'] > 8) {
                $error = 1;

                //debugpng
                if (defined("DEBUGPNG") && DEBUGPNG) {
                    print '[addPngFromFile bit depth of 8 or less is supported ' . $file . ']';
                }

                $errormsg = 'only bit depth of 8 or less is supported';
            }

            if (!$error) {
                switch ($info['colorType']) {
                    case 3:
                        $color = 'DeviceRGB';
                        $ncolor = 1;
                        break;

                    case 2:
                        $color = 'DeviceRGB';
                        $ncolor = 3;
                        break;

                    case 0:
                        $color = 'DeviceGray';
                        $ncolor = 1;
                        break;

                    default:
                        $error = 1;

                        //debugpng
                        if (defined("DEBUGPNG") && DEBUGPNG) {
                            print '[addPngFromFile alpha channel not supported: ' . $info['colorType'] . ' ' . $file . ']';
                        }

                        $errormsg = 'transparency alpha channel not supported, transparency only supported for palette images.';
                }
            }

            if ($error) {
                $this->addMessage('PNG error - (' . $file . ') ' . $errormsg);

                return;
            }

            //print_r($info);
            // so this image is ok... add it in.
            $this->numImages++;
            $im = $this->numImages;
            $label = "I$im";
            $this->numObj++;

            //  $this->o_image($this->numObj,'new',array('label' => $label,'data' => $idata,'iw' => $w,'ih' => $h,'type' => 'png','ic' => $info['width']));
            $options = [
                'label'            => $label,
                'data'             => $idata,
                'bitsPerComponent' => $info['bitDepth'],
                'pdata'            => $pdata,
                'iw'               => $info['width'],
                'ih'               => $info['height'],
                'type'             => 'png',
                'color'            => $color,
                'ncolor'           => $ncolor,
                'masked'           => $mask,
                'isMask'           => $is_mask
            ];

            if (isset($transparency)) {
                $options['transparency'] = $transparency;
            }

            $this->o_image($this->numObj, 'new', $options);
            $this->imagelist[$file] = ['label' => $label, 'w' => $info['width'], 'h' => $info['height']];
        }

        if ($is_mask) {
            return;
        }

        if ($w <= 0 && $h <= 0) {
            $w = $info['width'];
            $h = $info['height'];
        }

        if ($w <= 0) {
            $w = $h / $info['height'] * $info['width'];
        }

        if ($h <= 0) {
            $h = $w * $info['height'] / $info['width'];
        }

        $this->addContent(sprintf("\nq\n%.3F 0 0 %.3F %.3F %.3F cm /%s Do\nQ", $w, $h, $x, $y, $label));
    }

    /**
     * add a JPEG image into the document, from a file
     *
     * @param $img
     * @param $x
     * @param $y
     * @param int $w
     * @param int $h
     */
    function addJpegFromFile($img, $x, $y, $w = 0, $h = 0)
    {
        // attempt to add a jpeg image straight from a file, using no GD commands
        // note that this function is unable to operate on a remote file.

        if (!file_exists($img)) {
            return;
        }

        if ($this->image_iscached($img)) {
            $data = null;
            $imageWidth = $this->imagelist[$img]['w'];
            $imageHeight = $this->imagelist[$img]['h'];
            $channels = $this->imagelist[$img]['c'];
        } else {
            $tmp = getimagesize($img);
            $imageWidth = $tmp[0];
            $imageHeight = $tmp[1];

            if (isset($tmp['channels'])) {
                $channels = $tmp['channels'];
            } else {
                $channels = 3;
            }

            $data = file_get_contents($img);
        }

        if ($w <= 0 && $h <= 0) {
            $w = $imageWidth;
        }

        if ($w == 0) {
            $w = $h / $imageHeight * $imageWidth;
        }

        if ($h == 0) {
            $h = $w * $imageHeight / $imageWidth;
        }

        $this->addJpegImage_common($data, $img, $imageWidth, $imageHeight, $x, $y, $w, $h, $channels);
    }

    /**
     * common code used by the two JPEG adding functions
     * @param $data
     * @param $imgname
     * @param $imageWidth
     * @param $imageHeight
     * @param $x
     * @param $y
     * @param int $w
     * @param int $h
     * @param int $channels
     */
    private function addJpegImage_common(
        &$data,
        $imgname,
        $imageWidth,
        $imageHeight,
        $x,
        $y,
        $w = 0,
        $h = 0,
        $channels = 3
    ) {
        if ($this->image_iscached($imgname)) {
            $label = $this->imagelist[$imgname]['label'];
            //debugpng
            //if (DEBUGPNG) print '[addJpegImage_common Duplicate '.$imgname.']';

        } else {
            if ($data == null) {
                $this->addMessage('addJpegImage_common error - (' . $imgname . ') data not present!');

                return;
            }

            // note that this function is not to be called externally
            // it is just the common code between the GD and the file options
            $this->numImages++;
            $im = $this->numImages;
            $label = "I$im";
            $this->numObj++;

            $this->o_image(
                $this->numObj,
                'new',
                [
                    'label'    => $label,
                    'data'     => &$data,
                    'iw'       => $imageWidth,
                    'ih'       => $imageHeight,
                    'channels' => $channels
                ]
            );

            $this->imagelist[$imgname] = [
                'label' => $label,
                'w'     => $imageWidth,
                'h'     => $imageHeight,
                'c'     => $channels
            ];
        }

        $this->addContent(sprintf("\nq\n%.3F 0 0 %.3F %.3F %.3F cm /%s Do\nQ ", $w, $h, $x, $y, $label));
    }

    /**
     * specify where the document should open when it first starts
     *
     * @param $style
     * @param int $a
     * @param int $b
     * @param int $c
     */
    function openHere($style, $a = 0, $b = 0, $c = 0)
    {
        // this function will open the document at a specified page, in a specified style
        // the values for style, and the required parameters are:
        // 'XYZ'  left, top, zoom
        // 'Fit'
        // 'FitH' top
        // 'FitV' left
        // 'FitR' left,bottom,right
        // 'FitB'
        // 'FitBH' top
        // 'FitBV' left
        $this->numObj++;
        $this->o_destination(
            $this->numObj,
            'new',
            ['page' => $this->currentPage, 'type' => $style, 'p1' => $a, 'p2' => $b, 'p3' => $c]
        );
        $id = $this->catalogId;
        $this->o_catalog($id, 'openHere', $this->numObj);
    }

    /**
     * Add JavaScript code to the PDF document
     *
     * @param string $code
     */
    function addJavascript($code)
    {
        $this->javascript .= $code;
    }

    /**
     * create a labelled destination within the document
     *
     * @param $label
     * @param $style
     * @param int $a
     * @param int $b
     * @param int $c
     */
    function addDestination($label, $style, $a = 0, $b = 0, $c = 0)
    {
        // associates the given label with the destination, it is done this way so that a destination can be specified after
        // it has been linked to
        // styles are the same as the 'openHere' function
        $this->numObj++;
        $this->o_destination(
            $this->numObj,
            'new',
            ['page' => $this->currentPage, 'type' => $style, 'p1' => $a, 'p2' => $b, 'p3' => $c]
        );
        $id = $this->numObj;

        // store the label->idf relationship, note that this means that labels can be used only once
        $this->destinations["$label"] = $id;
    }

    /**
     * define font families, this is used to initialize the font families for the default fonts
     * and for the user to add new ones for their fonts. The default bahavious can be overridden should
     * that be desired.
     *
     * @param $family
     * @param string $options
     */
    function setFontFamily($family, $options = '')
    {
        if (!is_array($options)) {
            if ($family === 'init') {
                // set the known family groups
                // these font families will be used to enable bold and italic markers to be included
                // within text streams. html forms will be used... <b></b> <i></i>
                $this->fontFamilies['Helvetica.afm'] =
                    [
                        'b'  => 'Helvetica-Bold.afm',
                        'i'  => 'Helvetica-Oblique.afm',
                        'bi' => 'Helvetica-BoldOblique.afm',
                        'ib' => 'Helvetica-BoldOblique.afm'
                    ];

                $this->fontFamilies['Courier.afm'] =
                    [
                        'b'  => 'Courier-Bold.afm',
                        'i'  => 'Courier-Oblique.afm',
                        'bi' => 'Courier-BoldOblique.afm',
                        'ib' => 'Courier-BoldOblique.afm'
                    ];

                $this->fontFamilies['Times-Roman.afm'] =
                    [
                        'b'  => 'Times-Bold.afm',
                        'i'  => 'Times-Italic.afm',
                        'bi' => 'Times-BoldItalic.afm',
                        'ib' => 'Times-BoldItalic.afm'
                    ];
            }
        } else {

            // the user is trying to set a font family
            // note that this can also be used to set the base ones to something else
            if (mb_strlen($family)) {
                $this->fontFamilies[$family] = $options;
            }
        }
    }

    /**
     * used to add messages for use in debugging
     *
     * @param $message
     */
    function addMessage($message)
    {
        $this->messages .= $message . "\n";
    }

    /**
     * a few functions which should allow the document to be treated transactionally.
     *
     * @param $action
     */
    function transaction($action)
    {
        switch ($action) {
            case 'start':
                // store all the data away into the checkpoint variable
                $data = get_object_vars($this);
                $this->checkpoint = $data;
                unset($data);
                break;

            case 'commit':
                if (is_array($this->checkpoint) && isset($this->checkpoint['checkpoint'])) {
                    $tmp = $this->checkpoint['checkpoint'];
                    $this->checkpoint = $tmp;
                    unset($tmp);
                } else {
                    $this->checkpoint = '';
                }
                break;

            case 'rewind':
                // do not destroy the current checkpoint, but move us back to the state then, so that we can try again
                if (is_array($this->checkpoint)) {
                    // can only abort if were inside a checkpoint
                    $tmp = $this->checkpoint;

                    foreach ($tmp as $k => $v) {
                        if ($k !== 'checkpoint') {
                            $this->$k = $v;
                        }
                    }
                    unset($tmp);
                }
                break;

            case 'abort':
                if (is_array($this->checkpoint)) {
                    // can only abort if were inside a checkpoint
                    $tmp = $this->checkpoint;
                    foreach ($tmp as $k => $v) {
                        $this->$k = $v;
                    }
                    unset($tmp);
                }
                break;
        }
    }
}
StartFontMetrics 4.1
Comment Copyright (c) 1989, 1990, 1991, 1993, 1997 Adobe Systems Incorporated.  All Rights Reserved.
Comment Creation Date: Mon Jun 23 16:28:00 0:00:00
Comment UniqueID 43048
Comment VMusage 41139 52164
FontName Courier-Bold
FullName Courier Bold
FamilyName Courier
Weight Bold
ItalicAngle 0
IsFixedPitch true
CharacterSet ExtendedRoman
FontBBox -113 -250 749 801
UnderlinePosition -100
UnderlineThickness 50
Version 003.000
Notice Copyright (c) 1989, 1990, 1991, 1993, 1997 Adobe Systems Incorporated.  All Rights Reserved.
EncodingScheme WinAnsiEncoding
CapHeight 562
XHeight 439
Ascender 629
Descender -157
StdHW 84
StdVW 106
StartCharMetrics 317
C 32 ; WX 600 ; N space ; B 0 0 0 0 ;
C 160 ; WX 600 ; N space ; B 0 0 0 0 ;
C 33 ; WX 600 ; N exclam ; B 202 -15 398 572 ;
C 34 ; WX 600 ; N quotedbl ; B 135 277 465 562 ;
C 35 ; WX 600 ; N numbersign ; B 56 -45 544 651 ;
C 36 ; WX 600 ; N dollar ; B 82 -126 519 666 ;
C 37 ; WX 600 ; N percent ; B 5 -15 595 616 ;
C 38 ; WX 600 ; N ampersand ; B 36 -15 546 543 ;
C 146 ; WX 600 ; N quoteright ; B 171 277 423 562 ;
C 40 ; WX 600 ; N parenleft ; B 219 -102 461 616 ;
C 41 ; WX 600 ; N parenright ; B 139 -102 381 616 ;
C 42 ; WX 600 ; N asterisk ; B 91 219 509 601 ;
C 43 ; WX 600 ; N plus ; B 71 39 529 478 ;
C 44 ; WX 600 ; N comma ; B 123 -111 393 174 ;
C 45 ; WX 600 ; N hyphen ; B 100 203 500 313 ;
C 173 ; WX 600 ; N hyphen ; B 100 203 500 313 ;
C 46 ; WX 600 ; N period ; B 192 -15 408 171 ;
C 47 ; WX 600 ; N slash ; B 98 -77 502 626 ;
C 48 ; WX 600 ; N zero ; B 87 -15 513 616 ;
C 49 ; WX 600 ; N one ; B 81 0 539 616 ;
C 50 ; WX 600 ; N two ; B 61 0 499 616 ;
C 51 ; WX 600 ; N three ; B 63 -15 501 616 ;
C 52 ; WX 600 ; N four ; B 53 0 507 616 ;
C 53 ; WX 600 ; N five ; B 70 -15 521 601 ;
C 54 ; WX 600 ; N six ; B 90 -15 521 616 ;
C 55 ; WX 600 ; N seven ; B 55 0 494 601 ;
C 56 ; WX 600 ; N eight ; B 83 -15 517 616 ;
C 57 ; WX 600 ; N nine ; B 79 -15 510 616 ;
C 58 ; WX 600 ; N colon ; B 191 -15 407 425 ;
C 59 ; WX 600 ; N semicolon ; B 123 -111 408 425 ;
C 60 ; WX 600 ; N less ; B 66 15 523 501 ;
C 61 ; WX 600 ; N equal ; B 71 118 529 398 ;
C 62 ; WX 600 ; N greater ; B 77 15 534 501 ;
C 63 ; WX 600 ; N question ; B 98 -14 501 580 ;
C 64 ; WX 600 ; N at ; B 16 -15 584 616 ;
C 65 ; WX 600 ; N A ; B -9 0 609 562 ;
C 66 ; WX 600 ; N B ; B 30 0 573 562 ;
C 67 ; WX 600 ; N C ; B 22 -18 560 580 ;
C 68 ; WX 600 ; N D ; B 30 0 594 562 ;
C 69 ; WX 600 ; N E ; B 25 0 560 562 ;
C 70 ; WX 600 ; N F ; B 39 0 570 562 ;
C 71 ; WX 600 ; N G ; B 22 -18 594 580 ;
C 72 ; WX 600 ; N H ; B 20 0 580 562 ;
C 73 ; WX 600 ; N I ; B 77 0 523 562 ;
C 74 ; WX 600 ; N J ; B 37 -18 601 562 ;
C 75 ; WX 600 ; N K ; B 21 0 599 562 ;
C 76 ; WX 600 ; N L ; B 39 0 578 562 ;
C 77 ; WX 600 ; N M ; B -2 0 602 562 ;
C 78 ; WX 600 ; N N ; B 8 -12 610 562 ;
C 79 ; WX 600 ; N O ; B 22 -18 578 580 ;
C 80 ; WX 600 ; N P ; B 48 0 559 562 ;
C 81 ; WX 600 ; N Q ; B 32 -138 578 580 ;
C 82 ; WX 600 ; N R ; B 24 0 599 562 ;
C 83 ; WX 600 ; N S ; B 47 -22 553 582 ;
C 84 ; WX 600 ; N T ; B 21 0 579 562 ;
C 85 ; WX 600 ; N U ; B 4 -18 596 562 ;
C 86 ; WX 600 ; N V ; B -13 0 613 562 ;
C 87 ; WX 600 ; N W ; B -18 0 618 562 ;
C 88 ; WX 600 ; N X ; B 12 0 588 562 ;
C 89 ; WX 600 ; N Y ; B 12 0 589 562 ;
C 90 ; WX 600 ; N Z ; B 62 0 539 562 ;
C 91 ; WX 600 ; N bracketleft ; B 245 -102 475 616 ;
C 92 ; WX 600 ; N backslash ; B 99 -77 503 626 ;
C 93 ; WX 600 ; N bracketright ; B 125 -102 355 616 ;
C 94 ; WX 600 ; N asciicircum ; B 108 250 492 616 ;
C 95 ; WX 600 ; N underscore ; B 0 -125 600 -75 ;
C 145 ; WX 600 ; N quoteleft ; B 178 277 428 562 ;
C 97 ; WX 600 ; N a ; B 35 -15 570 454 ;
C 98 ; WX 600 ; N b ; B 0 -15 584 626 ;
C 99 ; WX 600 ; N c ; B 40 -15 545 459 ;
C 100 ; WX 600 ; N d ; B 20 -15 591 626 ;
C 101 ; WX 600 ; N e ; B 40 -15 563 454 ;
C 102 ; WX 600 ; N f ; B 83 0 547 626 ; L i fi ; L l fl ;
C 103 ; WX 600 ; N g ; B 30 -146 580 454 ;
C 104 ; WX 600 ; N h ; B 5 0 592 626 ;
C 105 ; WX 600 ; N i ; B 77 0 523 658 ;
C 106 ; WX 600 ; N j ; B 63 -146 440 658 ;
C 107 ; WX 600 ; N k ; B 20 0 585 626 ;
C 108 ; WX 600 ; N l ; B 77 0 523 626 ;
C 109 ; WX 600 ; N m ; B -22 0 626 454 ;
C 110 ; WX 600 ; N n ; B 18 0 592 454 ;
C 111 ; WX 600 ; N o ; B 30 -15 570 454 ;
C 112 ; WX 600 ; N p ; B -1 -142 570 454 ;
C 113 ; WX 600 ; N q ; B 20 -142 591 454 ;
C 114 ; WX 600 ; N r ; B 47 0 580 454 ;
C 115 ; WX 600 ; N s ; B 68 -17 535 459 ;
C 116 ; WX 600 ; N t ; B 47 -15 532 562 ;
C 117 ; WX 600 ; N u ; B -1 -15 569 439 ;
C 118 ; WX 600 ; N v ; B -1 0 601 439 ;
C 119 ; WX 600 ; N w ; B -18 0 618 439 ;
C 120 ; WX 600 ; N x ; B 6 0 594 439 ;
C 121 ; WX 600 ; N y ; B -4 -142 601 439 ;
C 122 ; WX 600 ; N z ; B 81 0 520 439 ;
C 123 ; WX 600 ; N braceleft ; B 160 -102 464 616 ;
C 124 ; WX 600 ; N bar ; B 255 -250 345 750 ;
C 125 ; WX 600 ; N braceright ; B 136 -102 440 616 ;
C 126 ; WX 600 ; N asciitilde ; B 71 153 530 356 ;
C 161 ; WX 600 ; N exclamdown ; B 202 -146 398 449 ;
C 162 ; WX 600 ; N cent ; B 66 -49 518 614 ;
C 163 ; WX 600 ; N sterling ; B 72 -28 558 611 ;
C -1 ; WX 600 ; N fraction ; B 25 -60 576 661 ;
C 165 ; WX 600 ; N yen ; B 10 0 590 562 ;
C 131 ; WX 600 ; N florin ; B -30 -131 572 616 ;
C 167 ; WX 600 ; N section ; B 83 -70 517 580 ;
C 164 ; WX 600 ; N currency ; B 54 49 546 517 ;
C 39 ; WX 600 ; N quotesingle ; B 227 277 373 562 ;
C 147 ; WX 600 ; N quotedblleft ; B 71 277 535 562 ;
C 171 ; WX 600 ; N guillemotleft ; B 8 70 553 446 ;
C 139 ; WX 600 ; N guilsinglleft ; B 141 70 459 446 ;
C 155 ; WX 600 ; N guilsinglright ; B 141 70 459 446 ;
C -1 ; WX 600 ; N fi ; B 12 0 593 626 ;
C -1 ; WX 600 ; N fl ; B 12 0 593 626 ;
C 150 ; WX 600 ; N endash ; B 65 203 535 313 ;
C 134 ; WX 600 ; N dagger ; B 106 -70 494 580 ;
C 135 ; WX 600 ; N daggerdbl ; B 106 -70 494 580 ;
C 183 ; WX 600 ; N periodcentered ; B 196 165 404 351 ;
C 182 ; WX 600 ; N paragraph ; B 6 -70 576 580 ;
C 149 ; WX 600 ; N bullet ; B 140 132 460 430 ;
C 130 ; WX 600 ; N quotesinglbase ; B 175 -142 427 143 ;
C 132 ; WX 600 ; N quotedblbase ; B 65 -142 529 143 ;
C 148 ; WX 600 ; N quotedblright ; B 61 277 525 562 ;
C 187 ; WX 600 ; N guillemotright ; B 47 70 592 446 ;
C 133 ; WX 600 ; N ellipsis ; B 26 -15 574 116 ;
C 137 ; WX 600 ; N perthousand ; B -113 -15 713 616 ;
C 191 ; WX 600 ; N questiondown ; B 99 -146 502 449 ;
C 96 ; WX 600 ; N grave ; B 132 508 395 661 ;
C 180 ; WX 600 ; N acute ; B 205 508 468 661 ;
C 136 ; WX 600 ; N circumflex ; B 103 483 497 657 ;
C 152 ; WX 600 ; N tilde ; B 89 493 512 636 ;
C 175 ; WX 600 ; N macron ; B 88 505 512 585 ;
C -1 ; WX 600 ; N breve ; B 83 468 517 631 ;
C -1 ; WX 600 ; N dotaccent ; B 230 498 370 638 ;
C 168 ; WX 600 ; N dieresis ; B 128 498 472 638 ;
C -1 ; WX 600 ; N ring ; B 198 481 402 678 ;
C 184 ; WX 600 ; N cedilla ; B 205 -206 387 0 ;
C -1 ; WX 600 ; N hungarumlaut ; B 68 488 588 661 ;
C -1 ; WX 600 ; N ogonek ; B 169 -199 400 0 ;
C -1 ; WX 600 ; N caron ; B 103 493 497 667 ;
C 151 ; WX 600 ; N emdash ; B -10 203 610 313 ;
C 198 ; WX 600 ; N AE ; B -29 0 602 562 ;
C 170 ; WX 600 ; N ordfeminine ; B 147 196 453 580 ;
C -1 ; WX 600 ; N Lslash ; B 39 0 578 562 ;
C 216 ; WX 600 ; N Oslash ; B 22 -22 578 584 ;
C 140 ; WX 600 ; N OE ; B -25 0 595 562 ;
C 186 ; WX 600 ; N ordmasculine ; B 147 196 453 580 ;
C 230 ; WX 600 ; N ae ; B -4 -15 601 454 ;
C -1 ; WX 600 ; N dotlessi ; B 77 0 523 439 ;
C -1 ; WX 600 ; N lslash ; B 77 0 523 626 ;
C 248 ; WX 600 ; N oslash ; B 30 -24 570 463 ;
C 156 ; WX 600 ; N oe ; B -18 -15 611 454 ;
C 223 ; WX 600 ; N germandbls ; B 22 -15 596 626 ;
C 207 ; WX 600 ; N Idieresis ; B 77 0 523 761 ;
C 233 ; WX 600 ; N eacute ; B 40 -15 563 661 ;
C -1 ; WX 600 ; N abreve ; B 35 -15 570 661 ;
C -1 ; WX 600 ; N uhungarumlaut ; B -1 -15 628 661 ;
C -1 ; WX 600 ; N ecaron ; B 40 -15 563 667 ;
C 159 ; WX 600 ; N Ydieresis ; B 12 0 589 761 ;
C 247 ; WX 600 ; N divide ; B 71 16 529 500 ;
C 221 ; WX 600 ; N Yacute ; B 12 0 589 784 ;
C 194 ; WX 600 ; N Acircumflex ; B -9 0 609 780 ;
C 225 ; WX 600 ; N aacute ; B 35 -15 570 661 ;
C 219 ; WX 600 ; N Ucircumflex ; B 4 -18 596 780 ;
C 253 ; WX 600 ; N yacute ; B -4 -142 601 661 ;
C -1 ; WX 600 ; N scommaaccent ; B 68 -250 535 459 ;
C 234 ; WX 600 ; N ecircumflex ; B 40 -15 563 657 ;
C -1 ; WX 600 ; N Uring ; B 4 -18 596 801 ;
C 220 ; WX 600 ; N Udieresis ; B 4 -18 596 761 ;
C -1 ; WX 600 ; N aogonek ; B 35 -199 586 454 ;
C 218 ; WX 600 ; N Uacute ; B 4 -18 596 784 ;
C -1 ; WX 600 ; N uogonek ; B -1 -199 585 439 ;
C 203 ; WX 600 ; N Edieresis ; B 25 0 560 761 ;
C -1 ; WX 600 ; N Dcroat ; B 30 0 594 562 ;
C -1 ; WX 600 ; N commaaccent ; B 205 -250 397 -57 ;
C 169 ; WX 600 ; N copyright ; B 0 -18 600 580 ;
C -1 ; WX 600 ; N Emacron ; B 25 0 560 708 ;
C -1 ; WX 600 ; N ccaron ; B 40 -15 545 667 ;
C 229 ; WX 600 ; N aring ; B 35 -15 570 678 ;
C -1 ; WX 600 ; N Ncommaaccent ; B 8 -250 610 562 ;
C -1 ; WX 600 ; N lacute ; B 77 0 523 801 ;
C 224 ; WX 600 ; N agrave ; B 35 -15 570 661 ;
C -1 ; WX 600 ; N Tcommaaccent ; B 21 -250 579 562 ;
C -1 ; WX 600 ; N Cacute ; B 22 -18 560 784 ;
C 227 ; WX 600 ; N atilde ; B 35 -15 570 636 ;
C -1 ; WX 600 ; N Edotaccent ; B 25 0 560 761 ;
C 154 ; WX 600 ; N scaron ; B 68 -17 535 667 ;
C -1 ; WX 600 ; N scedilla ; B 68 -206 535 459 ;
C 237 ; WX 600 ; N iacute ; B 77 0 523 661 ;
C -1 ; WX 600 ; N lozenge ; B 66 0 534 740 ;
C -1 ; WX 600 ; N Rcaron ; B 24 0 599 790 ;
C -1 ; WX 600 ; N Gcommaaccent ; B 22 -250 594 580 ;
C 251 ; WX 600 ; N ucircumflex ; B -1 -15 569 657 ;
C 226 ; WX 600 ; N acircumflex ; B 35 -15 570 657 ;
C -1 ; WX 600 ; N Amacron ; B -9 0 609 708 ;
C -1 ; WX 600 ; N rcaron ; B 47 0 580 667 ;
C 231 ; WX 600 ; N ccedilla ; B 40 -206 545 459 ;
C -1 ; WX 600 ; N Zdotaccent ; B 62 0 539 761 ;
C 222 ; WX 600 ; N Thorn ; B 48 0 557 562 ;
C -1 ; WX 600 ; N Omacron ; B 22 -18 578 708 ;
C -1 ; WX 600 ; N Racute ; B 24 0 599 784 ;
C -1 ; WX 600 ; N Sacute ; B 47 -22 553 784 ;
C -1 ; WX 600 ; N dcaron ; B 20 -15 727 626 ;
C -1 ; WX 600 ; N Umacron ; B 4 -18 596 708 ;
C -1 ; WX 600 ; N uring ; B -1 -15 569 678 ;
C 179 ; WX 600 ; N threesuperior ; B 138 222 433 616 ;
C 210 ; WX 600 ; N Ograve ; B 22 -18 578 784 ;
C 192 ; WX 600 ; N Agrave ; B -9 0 609 784 ;
C -1 ; WX 600 ; N Abreve ; B -9 0 609 784 ;
C 215 ; WX 600 ; N multiply ; B 81 39 520 478 ;
C 250 ; WX 600 ; N uacute ; B -1 -15 569 661 ;
C -1 ; WX 600 ; N Tcaron ; B 21 0 579 790 ;
C -1 ; WX 600 ; N partialdiff ; B 63 -38 537 728 ;
C 255 ; WX 600 ; N ydieresis ; B -4 -142 601 638 ;
C -1 ; WX 600 ; N Nacute ; B 8 -12 610 784 ;
C 238 ; WX 600 ; N icircumflex ; B 73 0 523 657 ;
C 202 ; WX 600 ; N Ecircumflex ; B 25 0 560 780 ;
C 228 ; WX 600 ; N adieresis ; B 35 -15 570 638 ;
C 235 ; WX 600 ; N edieresis ; B 40 -15 563 638 ;
C -1 ; WX 600 ; N cacute ; B 40 -15 545 661 ;
C -1 ; WX 600 ; N nacute ; B 18 0 592 661 ;
C -1 ; WX 600 ; N umacron ; B -1 -15 569 585 ;
C -1 ; WX 600 ; N Ncaron ; B 8 -12 610 790 ;
C 205 ; WX 600 ; N Iacute ; B 77 0 523 784 ;
C 177 ; WX 600 ; N plusminus ; B 71 24 529 515 ;
C 166 ; WX 600 ; N brokenbar ; B 255 -175 345 675 ;
C 174 ; WX 600 ; N registered ; B 0 -18 600 580 ;
C -1 ; WX 600 ; N Gbreve ; B 22 -18 594 784 ;
C -1 ; WX 600 ; N Idotaccent ; B 77 0 523 761 ;
C -1 ; WX 600 ; N summation ; B 15 -10 586 706 ;
C 200 ; WX 600 ; N Egrave ; B 25 0 560 784 ;
C -1 ; WX 600 ; N racute ; B 47 0 580 661 ;
C -1 ; WX 600 ; N omacron ; B 30 -15 570 585 ;
C -1 ; WX 600 ; N Zacute ; B 62 0 539 784 ;
C 142 ; WX 600 ; N Zcaron ; B 62 0 539 790 ;
C -1 ; WX 600 ; N greaterequal ; B 26 0 523 696 ;
C 208 ; WX 600 ; N Eth ; B 30 0 594 562 ;
C 199 ; WX 600 ; N Ccedilla ; B 22 -206 560 580 ;
C -1 ; WX 600 ; N lcommaaccent ; B 77 -250 523 626 ;
C -1 ; WX 600 ; N tcaron ; B 47 -15 532 703 ;
C -1 ; WX 600 ; N eogonek ; B 40 -199 563 454 ;
C -1 ; WX 600 ; N Uogonek ; B 4 -199 596 562 ;
C 193 ; WX 600 ; N Aacute ; B -9 0 609 784 ;
C 196 ; WX 600 ; N Adieresis ; B -9 0 609 761 ;
C 232 ; WX 600 ; N egrave ; B 40 -15 563 661 ;
C -1 ; WX 600 ; N zacute ; B 81 0 520 661 ;
C -1 ; WX 600 ; N iogonek ; B 77 -199 523 658 ;
C 211 ; WX 600 ; N Oacute ; B 22 -18 578 784 ;
C 243 ; WX 600 ; N oacute ; B 30 -15 570 661 ;
C -1 ; WX 600 ; N amacron ; B 35 -15 570 585 ;
C -1 ; WX 600 ; N sacute ; B 68 -17 535 661 ;
C 239 ; WX 600 ; N idieresis ; B 77 0 523 618 ;
C 212 ; WX 600 ; N Ocircumflex ; B 22 -18 578 780 ;
C 217 ; WX 600 ; N Ugrave ; B 4 -18 596 784 ;
C -1 ; WX 600 ; N Delta ; B 6 0 594 688 ;
C 254 ; WX 600 ; N thorn ; B -14 -142 570 626 ;
C 178 ; WX 600 ; N twosuperior ; B 143 230 436 616 ;
C 214 ; WX 600 ; N Odieresis ; B 22 -18 578 761 ;
C 181 ; WX 600 ; N mu ; B -1 -142 569 439 ;
C 236 ; WX 600 ; N igrave ; B 77 0 523 661 ;
C -1 ; WX 600 ; N ohungarumlaut ; B 30 -15 668 661 ;
C -1 ; WX 600 ; N Eogonek ; B 25 -199 576 562 ;
C -1 ; WX 600 ; N dcroat ; B 20 -15 591 626 ;
C 190 ; WX 600 ; N threequarters ; B -47 -60 648 661 ;
C -1 ; WX 600 ; N Scedilla ; B 47 -206 553 582 ;
C -1 ; WX 600 ; N lcaron ; B 77 0 597 626 ;
C -1 ; WX 600 ; N Kcommaaccent ; B 21 -250 599 562 ;
C -1 ; WX 600 ; N Lacute ; B 39 0 578 784 ;
C 153 ; WX 600 ; N trademark ; B -9 230 749 562 ;
C -1 ; WX 600 ; N edotaccent ; B 40 -15 563 638 ;
C 204 ; WX 600 ; N Igrave ; B 77 0 523 784 ;
C -1 ; WX 600 ; N Imacron ; B 77 0 523 708 ;
C -1 ; WX 600 ; N Lcaron ; B 39 0 637 562 ;
C 189 ; WX 600 ; N onehalf ; B -47 -60 648 661 ;
C -1 ; WX 600 ; N lessequal ; B 26 0 523 696 ;
C 244 ; WX 600 ; N ocircumflex ; B 30 -15 570 657 ;
C 241 ; WX 600 ; N ntilde ; B 18 0 592 636 ;
C -1 ; WX 600 ; N Uhungarumlaut ; B 4 -18 638 784 ;
C 201 ; WX 600 ; N Eacute ; B 25 0 560 784 ;
C -1 ; WX 600 ; N emacron ; B 40 -15 563 585 ;
C -1 ; WX 600 ; N gbreve ; B 30 -146 580 661 ;
C 188 ; WX 600 ; N onequarter ; B -56 -60 656 661 ;
C 138 ; WX 600 ; N Scaron ; B 47 -22 553 790 ;
C -1 ; WX 600 ; N Scommaaccent ; B 47 -250 553 582 ;
C -1 ; WX 600 ; N Ohungarumlaut ; B 22 -18 628 784 ;
C 176 ; WX 600 ; N degree ; B 86 243 474 616 ;
C 242 ; WX 600 ; N ograve ; B 30 -15 570 661 ;
C -1 ; WX 600 ; N Ccaron ; B 22 -18 560 790 ;
C 249 ; WX 600 ; N ugrave ; B -1 -15 569 661 ;
C -1 ; WX 600 ; N radical ; B -19 -104 473 778 ;
C -1 ; WX 600 ; N Dcaron ; B 30 0 594 790 ;
C -1 ; WX 600 ; N rcommaaccent ; B 47 -250 580 454 ;
C 209 ; WX 600 ; N Ntilde ; B 8 -12 610 759 ;
C 245 ; WX 600 ; N otilde ; B 30 -15 570 636 ;
C -1 ; WX 600 ; N Rcommaaccent ; B 24 -250 599 562 ;
C -1 ; WX 600 ; N Lcommaaccent ; B 39 -250 578 562 ;
C 195 ; WX 600 ; N Atilde ; B -9 0 609 759 ;
C -1 ; WX 600 ; N Aogonek ; B -9 -199 625 562 ;
C 197 ; WX 600 ; N Aring ; B -9 0 609 801 ;
C 213 ; WX 600 ; N Otilde ; B 22 -18 578 759 ;
C -1 ; WX 600 ; N zdotaccent ; B 81 0 520 638 ;
C -1 ; WX 600 ; N Ecaron ; B 25 0 560 790 ;
C -1 ; WX 600 ; N Iogonek ; B 77 -199 523 562 ;
C -1 ; WX 600 ; N kcommaaccent ; B 20 -250 585 626 ;
C -1 ; WX 600 ; N minus ; B 71 203 529 313 ;
C 206 ; WX 600 ; N Icircumflex ; B 77 0 523 780 ;
C -1 ; WX 600 ; N ncaron ; B 18 0 592 667 ;
C -1 ; WX 600 ; N tcommaaccent ; B 47 -250 532 562 ;
C 172 ; WX 600 ; N logicalnot ; B 71 103 529 413 ;
C 246 ; WX 600 ; N odieresis ; B 30 -15 570 638 ;
C 252 ; WX 600 ; N udieresis ; B -1 -15 569 638 ;
C -1 ; WX 600 ; N notequal ; B 12 -47 537 563 ;
C -1 ; WX 600 ; N gcommaaccent ; B 30 -146 580 714 ;
C 240 ; WX 600 ; N eth ; B 58 -27 543 626 ;
C 158 ; WX 600 ; N zcaron ; B 81 0 520 667 ;
C -1 ; WX 600 ; N ncommaaccent ; B 18 -250 592 454 ;
C 185 ; WX 600 ; N onesuperior ; B 153 230 447 616 ;
C -1 ; WX 600 ; N imacron ; B 77 0 523 585 ;
C 128 ; WX 600 ; N Euro ; B 0 0 0 0 ;
EndCharMetrics
EndFontMetrics
StartFontMetrics 4.1
Comment Copyright (c) 1989, 1990, 1991, 1993, 1997 Adobe Systems Incorporated.  All Rights Reserved.
Comment Creation Date: Mon Jun 23 16:28:46 0:00:00
Comment UniqueID 43049
Comment VMusage 17529 79244
FontName Courier-BoldOblique
FullName Courier Bold Oblique
FamilyName Courier
Weight Bold
ItalicAngle -12
IsFixedPitch true
CharacterSet ExtendedRoman
FontBBox -57 -250 869 801
UnderlinePosition -100
UnderlineThickness 50
Version 3
Notice Copyright (c) 1989, 1990, 1991, 1993, 1997 Adobe Systems Incorporated.  All Rights Reserved.
EncodingScheme WinAnsiEncoding
CapHeight 562
XHeight 439
Ascender 629
Descender -157
StdHW 84
StdVW 106
StartCharMetrics 317
C 32 ; WX 600 ; N space ; B 0 0 0 0 ;
C 160 ; WX 600 ; N space ; B 0 0 0 0 ;
C 33 ; WX 600 ; N exclam ; B 215 -15 495 572 ;
C 34 ; WX 600 ; N quotedbl ; B 211 277 585 562 ;
C 35 ; WX 600 ; N numbersign ; B 88 -45 641 651 ;
C 36 ; WX 600 ; N dollar ; B 87 -126 630 666 ;
C 37 ; WX 600 ; N percent ; B 101 -15 625 616 ;
C 38 ; WX 600 ; N ampersand ; B 61 -15 595 543 ;
C 146 ; WX 600 ; N quoteright ; B 229 277 543 562 ;
C 40 ; WX 600 ; N parenleft ; B 265 -102 592 616 ;
C 41 ; WX 600 ; N parenright ; B 117 -102 444 616 ;
C 42 ; WX 600 ; N asterisk ; B 179 219 598 601 ;
C 43 ; WX 600 ; N plus ; B 114 39 596 478 ;
C 44 ; WX 600 ; N comma ; B 99 -111 430 174 ;
C 45 ; WX 600 ; N hyphen ; B 143 203 567 313 ;
C 173 ; WX 600 ; N hyphen ; B 143 203 567 313 ;
C 46 ; WX 600 ; N period ; B 206 -15 427 171 ;
C 47 ; WX 600 ; N slash ; B 90 -77 626 626 ;
C 48 ; WX 600 ; N zero ; B 135 -15 593 616 ;
C 49 ; WX 600 ; N one ; B 93 0 562 616 ;
C 50 ; WX 600 ; N two ; B 61 0 594 616 ;
C 51 ; WX 600 ; N three ; B 71 -15 571 616 ;
C 52 ; WX 600 ; N four ; B 81 0 559 616 ;
C 53 ; WX 600 ; N five ; B 77 -15 621 601 ;
C 54 ; WX 600 ; N six ; B 135 -15 652 616 ;
C 55 ; WX 600 ; N seven ; B 147 0 622 601 ;
C 56 ; WX 600 ; N eight ; B 115 -15 604 616 ;
C 57 ; WX 600 ; N nine ; B 75 -15 592 616 ;
C 58 ; WX 600 ; N colon ; B 205 -15 480 425 ;
C 59 ; WX 600 ; N semicolon ; B 99 -111 481 425 ;
C 60 ; WX 600 ; N less ; B 120 15 613 501 ;
C 61 ; WX 600 ; N equal ; B 96 118 614 398 ;
C 62 ; WX 600 ; N greater ; B 97 15 589 501 ;
C 63 ; WX 600 ; N question ; B 183 -14 592 580 ;
C 64 ; WX 600 ; N at ; B 65 -15 642 616 ;
C 65 ; WX 600 ; N A ; B -9 0 632 562 ;
C 66 ; WX 600 ; N B ; B 30 0 630 562 ;
C 67 ; WX 600 ; N C ; B 74 -18 675 580 ;
C 68 ; WX 600 ; N D ; B 30 0 664 562 ;
C 69 ; WX 600 ; N E ; B 25 0 670 562 ;
C 70 ; WX 600 ; N F ; B 39 0 684 562 ;
C 71 ; WX 600 ; N G ; B 74 -18 675 580 ;
C 72 ; WX 600 ; N H ; B 20 0 700 562 ;
C 73 ; WX 600 ; N I ; B 77 0 643 562 ;
C 74 ; WX 600 ; N J ; B 58 -18 721 562 ;
C 75 ; WX 600 ; N K ; B 21 0 692 562 ;
C 76 ; WX 600 ; N L ; B 39 0 636 562 ;
C 77 ; WX 600 ; N M ; B -2 0 722 562 ;
C 78 ; WX 600 ; N N ; B 8 -12 730 562 ;
C 79 ; WX 600 ; N O ; B 74 -18 645 580 ;
C 80 ; WX 600 ; N P ; B 48 0 643 562 ;
C 81 ; WX 600 ; N Q ; B 83 -138 636 580 ;
C 82 ; WX 600 ; N R ; B 24 0 617 562 ;
C 83 ; WX 600 ; N S ; B 54 -22 673 582 ;
C 84 ; WX 600 ; N T ; B 86 0 679 562 ;
C 85 ; WX 600 ; N U ; B 101 -18 716 562 ;
C 86 ; WX 600 ; N V ; B 84 0 733 562 ;
C 87 ; WX 600 ; N W ; B 79 0 738 562 ;
C 88 ; WX 600 ; N X ; B 12 0 690 562 ;
C 89 ; WX 600 ; N Y ; B 109 0 709 562 ;
C 90 ; WX 600 ; N Z ; B 62 0 637 562 ;
C 91 ; WX 600 ; N bracketleft ; B 223 -102 606 616 ;
C 92 ; WX 600 ; N backslash ; B 222 -77 496 626 ;
C 93 ; WX 600 ; N bracketright ; B 103 -102 486 616 ;
C 94 ; WX 600 ; N asciicircum ; B 171 250 556 616 ;
C 95 ; WX 600 ; N underscore ; B -27 -125 585 -75 ;
C 145 ; WX 600 ; N quoteleft ; B 297 277 487 562 ;
C 97 ; WX 600 ; N a ; B 61 -15 593 454 ;
C 98 ; WX 600 ; N b ; B 13 -15 636 626 ;
C 99 ; WX 600 ; N c ; B 81 -15 631 459 ;
C 100 ; WX 600 ; N d ; B 60 -15 645 626 ;
C 101 ; WX 600 ; N e ; B 81 -15 605 454 ;
C 102 ; WX 600 ; N f ; B 83 0 677 626 ; L i fi ; L l fl ;
C 103 ; WX 600 ; N g ; B 40 -146 674 454 ;
C 104 ; WX 600 ; N h ; B 18 0 615 626 ;
C 105 ; WX 600 ; N i ; B 77 0 546 658 ;
C 106 ; WX 600 ; N j ; B 36 -146 580 658 ;
C 107 ; WX 600 ; N k ; B 33 0 643 626 ;
C 108 ; WX 600 ; N l ; B 77 0 546 626 ;
C 109 ; WX 600 ; N m ; B -22 0 649 454 ;
C 110 ; WX 600 ; N n ; B 18 0 615 454 ;
C 111 ; WX 600 ; N o ; B 71 -15 622 454 ;
C 112 ; WX 600 ; N p ; B -32 -142 622 454 ;
C 113 ; WX 600 ; N q ; B 60 -142 685 454 ;
C 114 ; WX 600 ; N r ; B 47 0 655 454 ;
C 115 ; WX 600 ; N s ; B 66 -17 608 459 ;
C 116 ; WX 600 ; N t ; B 118 -15 567 562 ;
C 117 ; WX 600 ; N u ; B 70 -15 592 439 ;
C 118 ; WX 600 ; N v ; B 70 0 695 439 ;
C 119 ; WX 600 ; N w ; B 53 0 712 439 ;
C 120 ; WX 600 ; N x ; B 6 0 671 439 ;
C 121 ; WX 600 ; N y ; B -21 -142 695 439 ;
C 122 ; WX 600 ; N z ; B 81 0 614 439 ;
C 123 ; WX 600 ; N braceleft ; B 203 -102 595 616 ;
C 124 ; WX 600 ; N bar ; B 201 -250 505 750 ;
C 125 ; WX 600 ; N braceright ; B 114 -102 506 616 ;
C 126 ; WX 600 ; N asciitilde ; B 120 153 590 356 ;
C 161 ; WX 600 ; N exclamdown ; B 196 -146 477 449 ;
C 162 ; WX 600 ; N cent ; B 121 -49 605 614 ;
C 163 ; WX 600 ; N sterling ; B 106 -28 650 611 ;
C -1 ; WX 600 ; N fraction ; B 22 -60 708 661 ;
C 165 ; WX 600 ; N yen ; B 98 0 710 562 ;
C 131 ; WX 600 ; N florin ; B -57 -131 702 616 ;
C 167 ; WX 600 ; N section ; B 74 -70 620 580 ;
C 164 ; WX 600 ; N currency ; B 77 49 644 517 ;
C 39 ; WX 600 ; N quotesingle ; B 303 277 493 562 ;
C 147 ; WX 600 ; N quotedblleft ; B 190 277 594 562 ;
C 171 ; WX 600 ; N guillemotleft ; B 62 70 639 446 ;
C 139 ; WX 600 ; N guilsinglleft ; B 195 70 545 446 ;
C 155 ; WX 600 ; N guilsinglright ; B 165 70 514 446 ;
C -1 ; WX 600 ; N fi ; B 12 0 644 626 ;
C -1 ; WX 600 ; N fl ; B 12 0 644 626 ;
C 150 ; WX 600 ; N endash ; B 108 203 602 313 ;
C 134 ; WX 600 ; N dagger ; B 175 -70 586 580 ;
C 135 ; WX 600 ; N daggerdbl ; B 121 -70 587 580 ;
C 183 ; WX 600 ; N periodcentered ; B 248 165 461 351 ;
C 182 ; WX 600 ; N paragraph ; B 61 -70 700 580 ;
C 149 ; WX 600 ; N bullet ; B 196 132 523 430 ;
C 130 ; WX 600 ; N quotesinglbase ; B 144 -142 458 143 ;
C 132 ; WX 600 ; N quotedblbase ; B 34 -142 560 143 ;
C 148 ; WX 600 ; N quotedblright ; B 119 277 645 562 ;
C 187 ; WX 600 ; N guillemotright ; B 71 70 647 446 ;
C 133 ; WX 600 ; N ellipsis ; B 35 -15 587 116 ;
C 137 ; WX 600 ; N perthousand ; B -45 -15 743 616 ;
C 191 ; WX 600 ; N questiondown ; B 100 -146 509 449 ;
C 96 ; WX 600 ; N grave ; B 272 508 503 661 ;
C 180 ; WX 600 ; N acute ; B 312 508 609 661 ;
C 136 ; WX 600 ; N circumflex ; B 212 483 607 657 ;
C 152 ; WX 600 ; N tilde ; B 199 493 643 636 ;
C 175 ; WX 600 ; N macron ; B 195 505 637 585 ;
C -1 ; WX 600 ; N breve ; B 217 468 652 631 ;
C -1 ; WX 600 ; N dotaccent ; B 348 498 493 638 ;
C 168 ; WX 600 ; N dieresis ; B 246 498 595 638 ;
C -1 ; WX 600 ; N ring ; B 319 481 528 678 ;
C 184 ; WX 600 ; N cedilla ; B 168 -206 368 0 ;
C -1 ; WX 600 ; N hungarumlaut ; B 171 488 729 661 ;
C -1 ; WX 600 ; N ogonek ; B 143 -199 367 0 ;
C -1 ; WX 600 ; N caron ; B 238 493 633 667 ;
C 151 ; WX 600 ; N emdash ; B 33 203 677 313 ;
C 198 ; WX 600 ; N AE ; B -29 0 708 562 ;
C 170 ; WX 600 ; N ordfeminine ; B 188 196 526 580 ;
C -1 ; WX 600 ; N Lslash ; B 39 0 636 562 ;
C 216 ; WX 600 ; N Oslash ; B 48 -22 673 584 ;
C 140 ; WX 600 ; N OE ; B 26 0 701 562 ;
C 186 ; WX 600 ; N ordmasculine ; B 188 196 543 580 ;
C 230 ; WX 600 ; N ae ; B 21 -15 652 454 ;
C -1 ; WX 600 ; N dotlessi ; B 77 0 546 439 ;
C -1 ; WX 600 ; N lslash ; B 77 0 587 626 ;
C 248 ; WX 600 ; N oslash ; B 54 -24 638 463 ;
C 156 ; WX 600 ; N oe ; B 18 -15 662 454 ;
C 223 ; WX 600 ; N germandbls ; B 22 -15 629 626 ;
C 207 ; WX 600 ; N Idieresis ; B 77 0 643 761 ;
C 233 ; WX 600 ; N eacute ; B 81 -15 609 661 ;
C -1 ; WX 600 ; N abreve ; B 61 -15 658 661 ;
C -1 ; WX 600 ; N uhungarumlaut ; B 70 -15 769 661 ;
C -1 ; WX 600 ; N ecaron ; B 81 -15 633 667 ;
C 159 ; WX 600 ; N Ydieresis ; B 109 0 709 761 ;
C 247 ; WX 600 ; N divide ; B 114 16 596 500 ;
C 221 ; WX 600 ; N Yacute ; B 109 0 709 784 ;
C 194 ; WX 600 ; N Acircumflex ; B -9 0 632 780 ;
C 225 ; WX 600 ; N aacute ; B 61 -15 609 661 ;
C 219 ; WX 600 ; N Ucircumflex ; B 101 -18 716 780 ;
C 253 ; WX 600 ; N yacute ; B -21 -142 695 661 ;
C -1 ; WX 600 ; N scommaaccent ; B 66 -250 608 459 ;
C 234 ; WX 600 ; N ecircumflex ; B 81 -15 607 657 ;
C -1 ; WX 600 ; N Uring ; B 101 -18 716 801 ;
C 220 ; WX 600 ; N Udieresis ; B 101 -18 716 761 ;
C -1 ; WX 600 ; N aogonek ; B 61 -199 593 454 ;
C 218 ; WX 600 ; N Uacute ; B 101 -18 716 784 ;
C -1 ; WX 600 ; N uogonek ; B 70 -199 592 439 ;
C 203 ; WX 600 ; N Edieresis ; B 25 0 670 761 ;
C -1 ; WX 600 ; N Dcroat ; B 30 0 664 562 ;
C -1 ; WX 600 ; N commaaccent ; B 151 -250 385 -57 ;
C 169 ; WX 600 ; N copyright ; B 53 -18 667 580 ;
C -1 ; WX 600 ; N Emacron ; B 25 0 670 708 ;
C -1 ; WX 600 ; N ccaron ; B 81 -15 633 667 ;
C 229 ; WX 600 ; N aring ; B 61 -15 593 678 ;
C -1 ; WX 600 ; N Ncommaaccent ; B 8 -250 730 562 ;
C -1 ; WX 600 ; N lacute ; B 77 0 639 801 ;
C 224 ; WX 600 ; N agrave ; B 61 -15 593 661 ;
C -1 ; WX 600 ; N Tcommaaccent ; B 86 -250 679 562 ;
C -1 ; WX 600 ; N Cacute ; B 74 -18 675 784 ;
C 227 ; WX 600 ; N atilde ; B 61 -15 643 636 ;
C -1 ; WX 600 ; N Edotaccent ; B 25 0 670 761 ;
C 154 ; WX 600 ; N scaron ; B 66 -17 633 667 ;
C -1 ; WX 600 ; N scedilla ; B 66 -206 608 459 ;
C 237 ; WX 600 ; N iacute ; B 77 0 609 661 ;
C -1 ; WX 600 ; N lozenge ; B 145 0 614 740 ;
C -1 ; WX 600 ; N Rcaron ; B 24 0 659 790 ;
C -1 ; WX 600 ; N Gcommaaccent ; B 74 -250 675 580 ;
C 251 ; WX 600 ; N ucircumflex ; B 70 -15 597 657 ;
C 226 ; WX 600 ; N acircumflex ; B 61 -15 607 657 ;
C -1 ; WX 600 ; N Amacron ; B -9 0 633 708 ;
C -1 ; WX 600 ; N rcaron ; B 47 0 655 667 ;
C 231 ; WX 600 ; N ccedilla ; B 81 -206 631 459 ;
C -1 ; WX 600 ; N Zdotaccent ; B 62 0 637 761 ;
C 222 ; WX 600 ; N Thorn ; B 48 0 620 562 ;
C -1 ; WX 600 ; N Omacron ; B 74 -18 663 708 ;
C -1 ; WX 600 ; N Racute ; B 24 0 665 784 ;
C -1 ; WX 600 ; N Sacute ; B 54 -22 673 784 ;
C -1 ; WX 600 ; N dcaron ; B 60 -15 861 626 ;
C -1 ; WX 600 ; N Umacron ; B 101 -18 716 708 ;
C -1 ; WX 600 ; N uring ; B 70 -15 592 678 ;
C 179 ; WX 600 ; N threesuperior ; B 193 222 526 616 ;
C 210 ; WX 600 ; N Ograve ; B 74 -18 645 784 ;
C 192 ; WX 600 ; N Agrave ; B -9 0 632 784 ;
C -1 ; WX 600 ; N Abreve ; B -9 0 684 784 ;
C 215 ; WX 600 ; N multiply ; B 104 39 606 478 ;
C 250 ; WX 600 ; N uacute ; B 70 -15 599 661 ;
C -1 ; WX 600 ; N Tcaron ; B 86 0 679 790 ;
C -1 ; WX 600 ; N partialdiff ; B 91 -38 627 728 ;
C 255 ; WX 600 ; N ydieresis ; B -21 -142 695 638 ;
C -1 ; WX 600 ; N Nacute ; B 8 -12 730 784 ;
C 238 ; WX 600 ; N icircumflex ; B 77 0 577 657 ;
C 202 ; WX 600 ; N Ecircumflex ; B 25 0 670 780 ;
C 228 ; WX 600 ; N adieresis ; B 61 -15 595 638 ;
C 235 ; WX 600 ; N edieresis ; B 81 -15 605 638 ;
C -1 ; WX 600 ; N cacute ; B 81 -15 649 661 ;
C -1 ; WX 600 ; N nacute ; B 18 0 639 661 ;
C -1 ; WX 600 ; N umacron ; B 70 -15 637 585 ;
C -1 ; WX 600 ; N Ncaron ; B 8 -12 730 790 ;
C 205 ; WX 600 ; N Iacute ; B 77 0 643 784 ;
C 177 ; WX 600 ; N plusminus ; B 76 24 614 515 ;
C 166 ; WX 600 ; N brokenbar ; B 217 -175 489 675 ;
C 174 ; WX 600 ; N registered ; B 53 -18 667 580 ;
C -1 ; WX 600 ; N Gbreve ; B 74 -18 684 784 ;
C -1 ; WX 600 ; N Idotaccent ; B 77 0 643 761 ;
C -1 ; WX 600 ; N summation ; B 15 -10 672 706 ;
C 200 ; WX 600 ; N Egrave ; B 25 0 670 784 ;
C -1 ; WX 600 ; N racute ; B 47 0 655 661 ;
C -1 ; WX 600 ; N omacron ; B 71 -15 637 585 ;
C -1 ; WX 600 ; N Zacute ; B 62 0 665 784 ;
C 142 ; WX 600 ; N Zcaron ; B 62 0 659 790 ;
C -1 ; WX 600 ; N greaterequal ; B 26 0 627 696 ;
C 208 ; WX 600 ; N Eth ; B 30 0 664 562 ;
C 199 ; WX 600 ; N Ccedilla ; B 74 -206 675 580 ;
C -1 ; WX 600 ; N lcommaaccent ; B 77 -250 546 626 ;
C -1 ; WX 600 ; N tcaron ; B 118 -15 627 703 ;
C -1 ; WX 600 ; N eogonek ; B 81 -199 605 454 ;
C -1 ; WX 600 ; N Uogonek ; B 101 -199 716 562 ;
C 193 ; WX 600 ; N Aacute ; B -9 0 655 784 ;
C 196 ; WX 600 ; N Adieresis ; B -9 0 632 761 ;
C 232 ; WX 600 ; N egrave ; B 81 -15 605 661 ;
C -1 ; WX 600 ; N zacute ; B 81 0 614 661 ;
C -1 ; WX 600 ; N iogonek ; B 77 -199 546 658 ;
C 211 ; WX 600 ; N Oacute ; B 74 -18 645 784 ;
C 243 ; WX 600 ; N oacute ; B 71 -15 649 661 ;
C -1 ; WX 600 ; N amacron ; B 61 -15 637 585 ;
C -1 ; WX 600 ; N sacute ; B 66 -17 609 661 ;
C 239 ; WX 600 ; N idieresis ; B 77 0 561 618 ;
C 212 ; WX 600 ; N Ocircumflex ; B 74 -18 645 780 ;
C 217 ; WX 600 ; N Ugrave ; B 101 -18 716 784 ;
C -1 ; WX 600 ; N Delta ; B 6 0 594 688 ;
C 254 ; WX 600 ; N thorn ; B -32 -142 622 626 ;
C 178 ; WX 600 ; N twosuperior ; B 191 230 542 616 ;
C 214 ; WX 600 ; N Odieresis ; B 74 -18 645 761 ;
C 181 ; WX 600 ; N mu ; B 49 -142 592 439 ;
C 236 ; WX 600 ; N igrave ; B 77 0 546 661 ;
C -1 ; WX 600 ; N ohungarumlaut ; B 71 -15 809 661 ;
C -1 ; WX 600 ; N Eogonek ; B 25 -199 670 562 ;
C -1 ; WX 600 ; N dcroat ; B 60 -15 712 626 ;
C 190 ; WX 600 ; N threequarters ; B 8 -60 699 661 ;
C -1 ; WX 600 ; N Scedilla ; B 54 -206 673 582 ;
C -1 ; WX 600 ; N lcaron ; B 77 0 731 626 ;
C -1 ; WX 600 ; N Kcommaaccent ; B 21 -250 692 562 ;
C -1 ; WX 600 ; N Lacute ; B 39 0 636 784 ;
C 153 ; WX 600 ; N trademark ; B 86 230 869 562 ;
C -1 ; WX 600 ; N edotaccent ; B 81 -15 605 638 ;
C 204 ; WX 600 ; N Igrave ; B 77 0 643 784 ;
C -1 ; WX 600 ; N Imacron ; B 77 0 663 708 ;
C -1 ; WX 600 ; N Lcaron ; B 39 0 757 562 ;
C 189 ; WX 600 ; N onehalf ; B 22 -60 716 661 ;
C -1 ; WX 600 ; N lessequal ; B 26 0 671 696 ;
C 244 ; WX 600 ; N ocircumflex ; B 71 -15 622 657 ;
C 241 ; WX 600 ; N ntilde ; B 18 0 643 636 ;
C -1 ; WX 600 ; N Uhungarumlaut ; B 101 -18 805 784 ;
C 201 ; WX 600 ; N Eacute ; B 25 0 670 784 ;
C -1 ; WX 600 ; N emacron ; B 81 -15 637 585 ;
C -1 ; WX 600 ; N gbreve ; B 40 -146 674 661 ;
C 188 ; WX 600 ; N onequarter ; B 13 -60 707 661 ;
C 138 ; WX 600 ; N Scaron ; B 54 -22 689 790 ;
C -1 ; WX 600 ; N Scommaaccent ; B 54 -250 673 582 ;
C -1 ; WX 600 ; N Ohungarumlaut ; B 74 -18 795 784 ;
C 176 ; WX 600 ; N degree ; B 173 243 570 616 ;
C 242 ; WX 600 ; N ograve ; B 71 -15 622 661 ;
C -1 ; WX 600 ; N Ccaron ; B 74 -18 689 790 ;
C 249 ; WX 600 ; N ugrave ; B 70 -15 592 661 ;
C -1 ; WX 600 ; N radical ; B 67 -104 635 778 ;
C -1 ; WX 600 ; N Dcaron ; B 30 0 664 790 ;
C -1 ; WX 600 ; N rcommaaccent ; B 47 -250 655 454 ;
C 209 ; WX 600 ; N Ntilde ; B 8 -12 730 759 ;
C 245 ; WX 600 ; N otilde ; B 71 -15 643 636 ;
C -1 ; WX 600 ; N Rcommaaccent ; B 24 -250 617 562 ;
C -1 ; WX 600 ; N Lcommaaccent ; B 39 -250 636 562 ;
C 195 ; WX 600 ; N Atilde ; B -9 0 669 759 ;
C -1 ; WX 600 ; N Aogonek ; B -9 -199 632 562 ;
C 197 ; WX 600 ; N Aring ; B -9 0 632 801 ;
C 213 ; WX 600 ; N Otilde ; B 74 -18 669 759 ;
C -1 ; WX 600 ; N zdotaccent ; B 81 0 614 638 ;
C -1 ; WX 600 ; N Ecaron ; B 25 0 670 790 ;
C -1 ; WX 600 ; N Iogonek ; B 77 -199 643 562 ;
C -1 ; WX 600 ; N kcommaaccent ; B 33 -250 643 626 ;
C -1 ; WX 600 ; N minus ; B 114 203 596 313 ;
C 206 ; WX 600 ; N Icircumflex ; B 77 0 643 780 ;
C -1 ; WX 600 ; N ncaron ; B 18 0 633 667 ;
C -1 ; WX 600 ; N tcommaaccent ; B 118 -250 567 562 ;
C 172 ; WX 600 ; N logicalnot ; B 135 103 617 413 ;
C 246 ; WX 600 ; N odieresis ; B 71 -15 622 638 ;
C 252 ; WX 600 ; N udieresis ; B 70 -15 595 638 ;
C -1 ; WX 600 ; N notequal ; B 30 -47 626 563 ;
C -1 ; WX 600 ; N gcommaaccent ; B 40 -146 674 714 ;
C 240 ; WX 600 ; N eth ; B 93 -27 661 626 ;
C 158 ; WX 600 ; N zcaron ; B 81 0 643 667 ;
C -1 ; WX 600 ; N ncommaaccent ; B 18 -250 615 454 ;
C 185 ; WX 600 ; N onesuperior ; B 212 230 514 616 ;
C -1 ; WX 600 ; N imacron ; B 77 0 575 585 ;
C 128 ; WX 600 ; N Euro ; B 0 0 0 0 ;
EndCharMetrics
EndFontMetrics
StartFontMetrics 4.1
Comment Copyright (c) 1989, 1990, 1991, 1992, 1993, 1997 Adobe Systems Incorporated.  All Rights Reserved.
Comment Creation Date: Thu May  0:00:00 17:37:52 1997
Comment UniqueID 43051
Comment VMusage 16248 75829
FontName Courier-Oblique
FullName Courier Oblique
FamilyName Courier
Weight Medium
ItalicAngle -12
IsFixedPitch true
CharacterSet ExtendedRoman
FontBBox -27 -250 849 805
UnderlinePosition -100
UnderlineThickness 50
Version 003.000
Notice Copyright (c) 1989, 1990, 1991, 1992, 1993, 1997 Adobe Systems Incorporated.  All Rights Reserved.
EncodingScheme WinAnsiEncoding
CapHeight 562
XHeight 426
Ascender 629
Descender -157
StdHW 51
StdVW 51
StartCharMetrics 317
C 32 ; WX 600 ; N space ; B 0 0 0 0 ;
C 160 ; WX 600 ; N space ; B 0 0 0 0 ;
C 33 ; WX 600 ; N exclam ; B 243 -15 464 572 ;
C 34 ; WX 600 ; N quotedbl ; B 273 328 532 562 ;
C 35 ; WX 600 ; N numbersign ; B 133 -32 596 639 ;
C 36 ; WX 600 ; N dollar ; B 108 -126 596 662 ;
C 37 ; WX 600 ; N percent ; B 134 -15 599 622 ;
C 38 ; WX 600 ; N ampersand ; B 87 -15 580 543 ;
C 146 ; WX 600 ; N quoteright ; B 283 328 495 562 ;
C 40 ; WX 600 ; N parenleft ; B 313 -108 572 622 ;
C 41 ; WX 600 ; N parenright ; B 137 -108 396 622 ;
C 42 ; WX 600 ; N asterisk ; B 212 257 580 607 ;
C 43 ; WX 600 ; N plus ; B 129 44 580 470 ;
C 44 ; WX 600 ; N comma ; B 157 -112 370 122 ;
C 45 ; WX 600 ; N hyphen ; B 152 231 558 285 ;
C 173 ; WX 600 ; N hyphen ; B 152 231 558 285 ;
C 46 ; WX 600 ; N period ; B 238 -15 382 109 ;
C 47 ; WX 600 ; N slash ; B 112 -80 604 629 ;
C 48 ; WX 600 ; N zero ; B 154 -15 575 622 ;
C 49 ; WX 600 ; N one ; B 98 0 515 622 ;
C 50 ; WX 600 ; N two ; B 70 0 568 622 ;
C 51 ; WX 600 ; N three ; B 82 -15 538 622 ;
C 52 ; WX 600 ; N four ; B 108 0 541 622 ;
C 53 ; WX 600 ; N five ; B 99 -15 589 607 ;
C 54 ; WX 600 ; N six ; B 155 -15 629 622 ;
C 55 ; WX 600 ; N seven ; B 182 0 612 607 ;
C 56 ; WX 600 ; N eight ; B 132 -15 588 622 ;
C 57 ; WX 600 ; N nine ; B 93 -15 574 622 ;
C 58 ; WX 600 ; N colon ; B 238 -15 441 385 ;
C 59 ; WX 600 ; N semicolon ; B 157 -112 441 385 ;
C 60 ; WX 600 ; N less ; B 96 42 610 472 ;
C 61 ; WX 600 ; N equal ; B 109 138 600 376 ;
C 62 ; WX 600 ; N greater ; B 85 42 599 472 ;
C 63 ; WX 600 ; N question ; B 222 -15 583 572 ;
C 64 ; WX 600 ; N at ; B 127 -15 582 622 ;
C 65 ; WX 600 ; N A ; B 3 0 607 562 ;
C 66 ; WX 600 ; N B ; B 43 0 616 562 ;
C 67 ; WX 600 ; N C ; B 93 -18 655 580 ;
C 68 ; WX 600 ; N D ; B 43 0 645 562 ;
C 69 ; WX 600 ; N E ; B 53 0 660 562 ;
C 70 ; WX 600 ; N F ; B 53 0 660 562 ;
C 71 ; WX 600 ; N G ; B 83 -18 645 580 ;
C 72 ; WX 600 ; N H ; B 32 0 687 562 ;
C 73 ; WX 600 ; N I ; B 96 0 623 562 ;
C 74 ; WX 600 ; N J ; B 52 -18 685 562 ;
C 75 ; WX 600 ; N K ; B 38 0 671 562 ;
C 76 ; WX 600 ; N L ; B 47 0 607 562 ;
C 77 ; WX 600 ; N M ; B 4 0 715 562 ;
C 78 ; WX 600 ; N N ; B 7 -13 712 562 ;
C 79 ; WX 600 ; N O ; B 94 -18 625 580 ;
C 80 ; WX 600 ; N P ; B 79 0 644 562 ;
C 81 ; WX 600 ; N Q ; B 95 -138 625 580 ;
C 82 ; WX 600 ; N R ; B 38 0 598 562 ;
C 83 ; WX 600 ; N S ; B 76 -20 650 580 ;
C 84 ; WX 600 ; N T ; B 108 0 665 562 ;
C 85 ; WX 600 ; N U ; B 125 -18 702 562 ;
C 86 ; WX 600 ; N V ; B 105 -13 723 562 ;
C 87 ; WX 600 ; N W ; B 106 -13 722 562 ;
C 88 ; WX 600 ; N X ; B 23 0 675 562 ;
C 89 ; WX 600 ; N Y ; B 133 0 695 562 ;
C 90 ; WX 600 ; N Z ; B 86 0 610 562 ;
C 91 ; WX 600 ; N bracketleft ; B 246 -108 574 622 ;
C 92 ; WX 600 ; N backslash ; B 249 -80 468 629 ;
C 93 ; WX 600 ; N bracketright ; B 135 -108 463 622 ;
C 94 ; WX 600 ; N asciicircum ; B 175 354 587 622 ;
C 95 ; WX 600 ; N underscore ; B -27 -125 584 -75 ;
C 145 ; WX 600 ; N quoteleft ; B 343 328 457 562 ;
C 97 ; WX 600 ; N a ; B 76 -15 569 441 ;
C 98 ; WX 600 ; N b ; B 29 -15 625 629 ;
C 99 ; WX 600 ; N c ; B 106 -15 608 441 ;
C 100 ; WX 600 ; N d ; B 85 -15 640 629 ;
C 101 ; WX 600 ; N e ; B 106 -15 598 441 ;
C 102 ; WX 600 ; N f ; B 114 0 662 629 ; L i fi ; L l fl ;
C 103 ; WX 600 ; N g ; B 61 -157 657 441 ;
C 104 ; WX 600 ; N h ; B 33 0 592 629 ;
C 105 ; WX 600 ; N i ; B 95 0 515 657 ;
C 106 ; WX 600 ; N j ; B 52 -157 550 657 ;
C 107 ; WX 600 ; N k ; B 58 0 633 629 ;
C 108 ; WX 600 ; N l ; B 95 0 515 629 ;
C 109 ; WX 600 ; N m ; B -5 0 615 441 ;
C 110 ; WX 600 ; N n ; B 26 0 585 441 ;
C 111 ; WX 600 ; N o ; B 102 -15 588 441 ;
C 112 ; WX 600 ; N p ; B -24 -157 605 441 ;
C 113 ; WX 600 ; N q ; B 85 -157 682 441 ;
C 114 ; WX 600 ; N r ; B 60 0 636 441 ;
C 115 ; WX 600 ; N s ; B 78 -15 584 441 ;
C 116 ; WX 600 ; N t ; B 167 -15 561 561 ;
C 117 ; WX 600 ; N u ; B 101 -15 572 426 ;
C 118 ; WX 600 ; N v ; B 90 -10 681 426 ;
C 119 ; WX 600 ; N w ; B 76 -10 695 426 ;
C 120 ; WX 600 ; N x ; B 20 0 655 426 ;
C 121 ; WX 600 ; N y ; B -4 -157 683 426 ;
C 122 ; WX 600 ; N z ; B 99 0 593 426 ;
C 123 ; WX 600 ; N braceleft ; B 233 -108 569 622 ;
C 124 ; WX 600 ; N bar ; B 222 -250 485 750 ;
C 125 ; WX 600 ; N braceright ; B 140 -108 477 622 ;
C 126 ; WX 600 ; N asciitilde ; B 116 197 600 320 ;
C 161 ; WX 600 ; N exclamdown ; B 225 -157 445 430 ;
C 162 ; WX 600 ; N cent ; B 151 -49 588 614 ;
C 163 ; WX 600 ; N sterling ; B 124 -21 621 611 ;
C -1 ; WX 600 ; N fraction ; B 84 -57 646 665 ;
C 165 ; WX 600 ; N yen ; B 120 0 693 562 ;
C 131 ; WX 600 ; N florin ; B -26 -143 671 622 ;
C 167 ; WX 600 ; N section ; B 104 -78 590 580 ;
C 164 ; WX 600 ; N currency ; B 94 58 628 506 ;
C 39 ; WX 600 ; N quotesingle ; B 345 328 460 562 ;
C 147 ; WX 600 ; N quotedblleft ; B 262 328 541 562 ;
C 171 ; WX 600 ; N guillemotleft ; B 92 70 652 446 ;
C 139 ; WX 600 ; N guilsinglleft ; B 204 70 540 446 ;
C 155 ; WX 600 ; N guilsinglright ; B 170 70 506 446 ;
C -1 ; WX 600 ; N fi ; B 3 0 619 629 ;
C -1 ; WX 600 ; N fl ; B 3 0 619 629 ;
C 150 ; WX 600 ; N endash ; B 124 231 586 285 ;
C 134 ; WX 600 ; N dagger ; B 217 -78 546 580 ;
C 135 ; WX 600 ; N daggerdbl ; B 163 -78 546 580 ;
C 183 ; WX 600 ; N periodcentered ; B 275 189 434 327 ;
C 182 ; WX 600 ; N paragraph ; B 100 -78 630 562 ;
C 149 ; WX 600 ; N bullet ; B 224 130 485 383 ;
C 130 ; WX 600 ; N quotesinglbase ; B 185 -134 397 100 ;
C 132 ; WX 600 ; N quotedblbase ; B 115 -134 478 100 ;
C 148 ; WX 600 ; N quotedblright ; B 213 328 576 562 ;
C 187 ; WX 600 ; N guillemotright ; B 58 70 618 446 ;
C 133 ; WX 600 ; N ellipsis ; B 46 -15 575 111 ;
C 137 ; WX 600 ; N perthousand ; B 59 -15 627 622 ;
C 191 ; WX 600 ; N questiondown ; B 105 -157 466 430 ;
C 96 ; WX 600 ; N grave ; B 294 497 484 672 ;
C 180 ; WX 600 ; N acute ; B 348 497 612 672 ;
C 136 ; WX 600 ; N circumflex ; B 229 477 581 654 ;
C 152 ; WX 600 ; N tilde ; B 212 489 629 606 ;
C 175 ; WX 600 ; N macron ; B 232 525 600 565 ;
C -1 ; WX 600 ; N breve ; B 279 501 576 609 ;
C -1 ; WX 600 ; N dotaccent ; B 373 537 478 640 ;
C 168 ; WX 600 ; N dieresis ; B 272 537 579 640 ;
C -1 ; WX 600 ; N ring ; B 332 463 500 627 ;
C 184 ; WX 600 ; N cedilla ; B 197 -151 344 10 ;
C -1 ; WX 600 ; N hungarumlaut ; B 239 497 683 672 ;
C -1 ; WX 600 ; N ogonek ; B 189 -172 377 4 ;
C -1 ; WX 600 ; N caron ; B 262 492 614 669 ;
C 151 ; WX 600 ; N emdash ; B 49 231 661 285 ;
C 198 ; WX 600 ; N AE ; B 3 0 655 562 ;
C 170 ; WX 600 ; N ordfeminine ; B 209 249 512 580 ;
C -1 ; WX 600 ; N Lslash ; B 47 0 607 562 ;
C 216 ; WX 600 ; N Oslash ; B 94 -80 625 629 ;
C 140 ; WX 600 ; N OE ; B 59 0 672 562 ;
C 186 ; WX 600 ; N ordmasculine ; B 210 249 535 580 ;
C 230 ; WX 600 ; N ae ; B 41 -15 626 441 ;
C -1 ; WX 600 ; N dotlessi ; B 95 0 515 426 ;
C -1 ; WX 600 ; N lslash ; B 95 0 587 629 ;
C 248 ; WX 600 ; N oslash ; B 102 -80 588 506 ;
C 156 ; WX 600 ; N oe ; B 54 -15 615 441 ;
C 223 ; WX 600 ; N germandbls ; B 48 -15 617 629 ;
C 207 ; WX 600 ; N Idieresis ; B 96 0 623 753 ;
C 233 ; WX 600 ; N eacute ; B 106 -15 612 672 ;
C -1 ; WX 600 ; N abreve ; B 76 -15 576 609 ;
C -1 ; WX 600 ; N uhungarumlaut ; B 101 -15 723 672 ;
C -1 ; WX 600 ; N ecaron ; B 106 -15 614 669 ;
C 159 ; WX 600 ; N Ydieresis ; B 133 0 695 753 ;
C 247 ; WX 600 ; N divide ; B 136 48 573 467 ;
C 221 ; WX 600 ; N Yacute ; B 133 0 695 805 ;
C 194 ; WX 600 ; N Acircumflex ; B 3 0 607 787 ;
C 225 ; WX 600 ; N aacute ; B 76 -15 612 672 ;
C 219 ; WX 600 ; N Ucircumflex ; B 125 -18 702 787 ;
C 253 ; WX 600 ; N yacute ; B -4 -157 683 672 ;
C -1 ; WX 600 ; N scommaaccent ; B 78 -250 584 441 ;
C 234 ; WX 600 ; N ecircumflex ; B 106 -15 598 654 ;
C -1 ; WX 600 ; N Uring ; B 125 -18 702 760 ;
C 220 ; WX 600 ; N Udieresis ; B 125 -18 702 753 ;
C -1 ; WX 600 ; N aogonek ; B 76 -172 569 441 ;
C 218 ; WX 600 ; N Uacute ; B 125 -18 702 805 ;
C -1 ; WX 600 ; N uogonek ; B 101 -172 572 426 ;
C 203 ; WX 600 ; N Edieresis ; B 53 0 660 753 ;
C -1 ; WX 600 ; N Dcroat ; B 43 0 645 562 ;
C -1 ; WX 600 ; N commaaccent ; B 145 -250 323 -58 ;
C 169 ; WX 600 ; N copyright ; B 53 -18 667 580 ;
C -1 ; WX 600 ; N Emacron ; B 53 0 660 698 ;
C -1 ; WX 600 ; N ccaron ; B 106 -15 614 669 ;
C 229 ; WX 600 ; N aring ; B 76 -15 569 627 ;
C -1 ; WX 600 ; N Ncommaaccent ; B 7 -250 712 562 ;
C -1 ; WX 600 ; N lacute ; B 95 0 640 805 ;
C 224 ; WX 600 ; N agrave ; B 76 -15 569 672 ;
C -1 ; WX 600 ; N Tcommaaccent ; B 108 -250 665 562 ;
C -1 ; WX 600 ; N Cacute ; B 93 -18 655 805 ;
C 227 ; WX 600 ; N atilde ; B 76 -15 629 606 ;
C -1 ; WX 600 ; N Edotaccent ; B 53 0 660 753 ;
C 154 ; WX 600 ; N scaron ; B 78 -15 614 669 ;
C -1 ; WX 600 ; N scedilla ; B 78 -151 584 441 ;
C 237 ; WX 600 ; N iacute ; B 95 0 612 672 ;
C -1 ; WX 600 ; N lozenge ; B 94 0 519 706 ;
C -1 ; WX 600 ; N Rcaron ; B 38 0 642 802 ;
C -1 ; WX 600 ; N Gcommaaccent ; B 83 -250 645 580 ;
C 251 ; WX 600 ; N ucircumflex ; B 101 -15 572 654 ;
C 226 ; WX 600 ; N acircumflex ; B 76 -15 581 654 ;
C -1 ; WX 600 ; N Amacron ; B 3 0 607 698 ;
C -1 ; WX 600 ; N rcaron ; B 60 0 636 669 ;
C 231 ; WX 600 ; N ccedilla ; B 106 -151 614 441 ;
C -1 ; WX 600 ; N Zdotaccent ; B 86 0 610 753 ;
C 222 ; WX 600 ; N Thorn ; B 79 0 606 562 ;
C -1 ; WX 600 ; N Omacron ; B 94 -18 628 698 ;
C -1 ; WX 600 ; N Racute ; B 38 0 670 805 ;
C -1 ; WX 600 ; N Sacute ; B 76 -20 650 805 ;
C -1 ; WX 600 ; N dcaron ; B 85 -15 849 629 ;
C -1 ; WX 600 ; N Umacron ; B 125 -18 702 698 ;
C -1 ; WX 600 ; N uring ; B 101 -15 572 627 ;
C 179 ; WX 600 ; N threesuperior ; B 213 240 501 622 ;
C 210 ; WX 600 ; N Ograve ; B 94 -18 625 805 ;
C 192 ; WX 600 ; N Agrave ; B 3 0 607 805 ;
C -1 ; WX 600 ; N Abreve ; B 3 0 607 732 ;
C 215 ; WX 600 ; N multiply ; B 103 43 607 470 ;
C 250 ; WX 600 ; N uacute ; B 101 -15 602 672 ;
C -1 ; WX 600 ; N Tcaron ; B 108 0 665 802 ;
C -1 ; WX 600 ; N partialdiff ; B 45 -38 546 710 ;
C 255 ; WX 600 ; N ydieresis ; B -4 -157 683 620 ;
C -1 ; WX 600 ; N Nacute ; B 7 -13 712 805 ;
C 238 ; WX 600 ; N icircumflex ; B 95 0 551 654 ;
C 202 ; WX 600 ; N Ecircumflex ; B 53 0 660 787 ;
C 228 ; WX 600 ; N adieresis ; B 76 -15 575 620 ;
C 235 ; WX 600 ; N edieresis ; B 106 -15 598 620 ;
C -1 ; WX 600 ; N cacute ; B 106 -15 612 672 ;
C -1 ; WX 600 ; N nacute ; B 26 0 602 672 ;
C -1 ; WX 600 ; N umacron ; B 101 -15 600 565 ;
C -1 ; WX 600 ; N Ncaron ; B 7 -13 712 802 ;
C 205 ; WX 600 ; N Iacute ; B 96 0 640 805 ;
C 177 ; WX 600 ; N plusminus ; B 96 44 594 558 ;
C 166 ; WX 600 ; N brokenbar ; B 238 -175 469 675 ;
C 174 ; WX 600 ; N registered ; B 53 -18 667 580 ;
C -1 ; WX 600 ; N Gbreve ; B 83 -18 645 732 ;
C -1 ; WX 600 ; N Idotaccent ; B 96 0 623 753 ;
C -1 ; WX 600 ; N summation ; B 15 -10 670 706 ;
C 200 ; WX 600 ; N Egrave ; B 53 0 660 805 ;
C -1 ; WX 600 ; N racute ; B 60 0 636 672 ;
C -1 ; WX 600 ; N omacron ; B 102 -15 600 565 ;
C -1 ; WX 600 ; N Zacute ; B 86 0 670 805 ;
C 142 ; WX 600 ; N Zcaron ; B 86 0 642 802 ;
C -1 ; WX 600 ; N greaterequal ; B 98 0 594 710 ;
C 208 ; WX 600 ; N Eth ; B 43 0 645 562 ;
C 199 ; WX 600 ; N Ccedilla ; B 93 -151 658 580 ;
C -1 ; WX 600 ; N lcommaaccent ; B 95 -250 515 629 ;
C -1 ; WX 600 ; N tcaron ; B 167 -15 587 717 ;
C -1 ; WX 600 ; N eogonek ; B 106 -172 598 441 ;
C -1 ; WX 600 ; N Uogonek ; B 124 -172 702 562 ;
C 193 ; WX 600 ; N Aacute ; B 3 0 660 805 ;
C 196 ; WX 600 ; N Adieresis ; B 3 0 607 753 ;
C 232 ; WX 600 ; N egrave ; B 106 -15 598 672 ;
C -1 ; WX 600 ; N zacute ; B 99 0 612 672 ;
C -1 ; WX 600 ; N iogonek ; B 95 -172 515 657 ;
C 211 ; WX 600 ; N Oacute ; B 94 -18 640 805 ;
C 243 ; WX 600 ; N oacute ; B 102 -15 612 672 ;
C -1 ; WX 600 ; N amacron ; B 76 -15 600 565 ;
C -1 ; WX 600 ; N sacute ; B 78 -15 612 672 ;
C 239 ; WX 600 ; N idieresis ; B 95 0 545 620 ;
C 212 ; WX 600 ; N Ocircumflex ; B 94 -18 625 787 ;
C 217 ; WX 600 ; N Ugrave ; B 125 -18 702 805 ;
C -1 ; WX 600 ; N Delta ; B 6 0 598 688 ;
C 254 ; WX 600 ; N thorn ; B -24 -157 605 629 ;
C 178 ; WX 600 ; N twosuperior ; B 230 249 535 622 ;
C 214 ; WX 600 ; N Odieresis ; B 94 -18 625 753 ;
C 181 ; WX 600 ; N mu ; B 72 -157 572 426 ;
C 236 ; WX 600 ; N igrave ; B 95 0 515 672 ;
C -1 ; WX 600 ; N ohungarumlaut ; B 102 -15 723 672 ;
C -1 ; WX 600 ; N Eogonek ; B 53 -172 660 562 ;
C -1 ; WX 600 ; N dcroat ; B 85 -15 704 629 ;
C 190 ; WX 600 ; N threequarters ; B 73 -56 659 666 ;
C -1 ; WX 600 ; N Scedilla ; B 76 -151 650 580 ;
C -1 ; WX 600 ; N lcaron ; B 95 0 667 629 ;
C -1 ; WX 600 ; N Kcommaaccent ; B 38 -250 671 562 ;
C -1 ; WX 600 ; N Lacute ; B 47 0 607 805 ;
C 153 ; WX 600 ; N trademark ; B 75 263 742 562 ;
C -1 ; WX 600 ; N edotaccent ; B 106 -15 598 620 ;
C 204 ; WX 600 ; N Igrave ; B 96 0 623 805 ;
C -1 ; WX 600 ; N Imacron ; B 96 0 628 698 ;
C -1 ; WX 600 ; N Lcaron ; B 47 0 632 562 ;
C 189 ; WX 600 ; N onehalf ; B 65 -57 669 665 ;
C -1 ; WX 600 ; N lessequal ; B 98 0 645 710 ;
C 244 ; WX 600 ; N ocircumflex ; B 102 -15 588 654 ;
C 241 ; WX 600 ; N ntilde ; B 26 0 629 606 ;
C -1 ; WX 600 ; N Uhungarumlaut ; B 125 -18 761 805 ;
C 201 ; WX 600 ; N Eacute ; B 53 0 670 805 ;
C -1 ; WX 600 ; N emacron ; B 106 -15 600 565 ;
C -1 ; WX 600 ; N gbreve ; B 61 -157 657 609 ;
C 188 ; WX 600 ; N onequarter ; B 65 -57 674 665 ;
C 138 ; WX 600 ; N Scaron ; B 76 -20 672 802 ;
C -1 ; WX 600 ; N Scommaaccent ; B 76 -250 650 580 ;
C -1 ; WX 600 ; N Ohungarumlaut ; B 94 -18 751 805 ;
C 176 ; WX 600 ; N degree ; B 214 269 576 622 ;
C 242 ; WX 600 ; N ograve ; B 102 -15 588 672 ;
C -1 ; WX 600 ; N Ccaron ; B 93 -18 672 802 ;
C 249 ; WX 600 ; N ugrave ; B 101 -15 572 672 ;
C -1 ; WX 600 ; N radical ; B 85 -15 765 792 ;
C -1 ; WX 600 ; N Dcaron ; B 43 0 645 802 ;
C -1 ; WX 600 ; N rcommaaccent ; B 60 -250 636 441 ;
C 209 ; WX 600 ; N Ntilde ; B 7 -13 712 729 ;
C 245 ; WX 600 ; N otilde ; B 102 -15 629 606 ;
C -1 ; WX 600 ; N Rcommaaccent ; B 38 -250 598 562 ;
C -1 ; WX 600 ; N Lcommaaccent ; B 47 -250 607 562 ;
C 195 ; WX 600 ; N Atilde ; B 3 0 655 729 ;
C -1 ; WX 600 ; N Aogonek ; B 3 -172 607 562 ;
C 197 ; WX 600 ; N Aring ; B 3 0 607 750 ;
C 213 ; WX 600 ; N Otilde ; B 94 -18 655 729 ;
C -1 ; WX 600 ; N zdotaccent ; B 99 0 593 620 ;
C -1 ; WX 600 ; N Ecaron ; B 53 0 660 802 ;
C -1 ; WX 600 ; N Iogonek ; B 96 -172 623 562 ;
C -1 ; WX 600 ; N kcommaaccent ; B 58 -250 633 629 ;
C -1 ; WX 600 ; N minus ; B 129 232 580 283 ;
C 206 ; WX 600 ; N Icircumflex ; B 96 0 623 787 ;
C -1 ; WX 600 ; N ncaron ; B 26 0 614 669 ;
C -1 ; WX 600 ; N tcommaaccent ; B 165 -250 561 561 ;
C 172 ; WX 600 ; N logicalnot ; B 155 108 591 369 ;
C 246 ; WX 600 ; N odieresis ; B 102 -15 588 620 ;
C 252 ; WX 600 ; N udieresis ; B 101 -15 575 620 ;
C -1 ; WX 600 ; N notequal ; B 43 -16 621 529 ;
C -1 ; WX 600 ; N gcommaaccent ; B 61 -157 657 708 ;
C 240 ; WX 600 ; N eth ; B 102 -15 639 629 ;
C 158 ; WX 600 ; N zcaron ; B 99 0 624 669 ;
C -1 ; WX 600 ; N ncommaaccent ; B 26 -250 585 441 ;
C 185 ; WX 600 ; N onesuperior ; B 231 249 491 622 ;
C -1 ; WX 600 ; N imacron ; B 95 0 543 565 ;
C 128 ; WX 600 ; N Euro ; B 0 0 0 0 ;
EndCharMetrics
EndFontMetrics
StartFontMetrics 4.1
Comment Copyright (c) 1989, 1990, 1991, 1992, 1993, 1997 Adobe Systems Incorporated.  All Rights Reserved.
Comment Creation Date: Thu May  1 17:27:09 1997
Comment UniqueID 43050
Comment VMusage 39754 50779
FontName Courier
FullName Courier
FamilyName Courier
Weight Medium
ItalicAngle 0
IsFixedPitch true
CharacterSet ExtendedRoman
FontBBox -23 -250 715 805
UnderlinePosition -100
UnderlineThickness 50
Version 003.000
Notice Copyright (c) 1989, 1990, 1991, 1992, 1993, 1997 Adobe Systems Incorporated.  All Rights Reserved.
EncodingScheme WinAnsiEncoding
CapHeight 562
XHeight 426
Ascender 629
Descender -157
StdHW 51
StdVW 51
StartCharMetrics 317
C 32 ; WX 600 ; N space ; B 0 0 0 0 ;
C 160 ; WX 600 ; N space ; B 0 0 0 0 ;
C 33 ; WX 600 ; N exclam ; B 236 -15 364 572 ;
C 34 ; WX 600 ; N quotedbl ; B 187 328 413 562 ;
C 35 ; WX 600 ; N numbersign ; B 93 -32 507 639 ;
C 36 ; WX 600 ; N dollar ; B 105 -126 496 662 ;
C 37 ; WX 600 ; N percent ; B 81 -15 518 622 ;
C 38 ; WX 600 ; N ampersand ; B 63 -15 538 543 ;
C 146 ; WX 600 ; N quoteright ; B 213 328 376 562 ;
C 40 ; WX 600 ; N parenleft ; B 269 -108 440 622 ;
C 41 ; WX 600 ; N parenright ; B 160 -108 331 622 ;
C 42 ; WX 600 ; N asterisk ; B 116 257 484 607 ;
C 43 ; WX 600 ; N plus ; B 80 44 520 470 ;
C 44 ; WX 600 ; N comma ; B 181 -112 344 122 ;
C 45 ; WX 600 ; N hyphen ; B 103 231 497 285 ;
C 173 ; WX 600 ; N hyphen ; B 103 231 497 285 ;
C 46 ; WX 600 ; N period ; B 229 -15 371 109 ;
C 47 ; WX 600 ; N slash ; B 125 -80 475 629 ;
C 48 ; WX 600 ; N zero ; B 106 -15 494 622 ;
C 49 ; WX 600 ; N one ; B 96 0 505 622 ;
C 50 ; WX 600 ; N two ; B 70 0 471 622 ;
C 51 ; WX 600 ; N three ; B 75 -15 466 622 ;
C 52 ; WX 600 ; N four ; B 78 0 500 622 ;
C 53 ; WX 600 ; N five ; B 92 -15 497 607 ;
C 54 ; WX 600 ; N six ; B 111 -15 497 622 ;
C 55 ; WX 600 ; N seven ; B 82 0 483 607 ;
C 56 ; WX 600 ; N eight ; B 102 -15 498 622 ;
C 57 ; WX 600 ; N nine ; B 96 -15 489 622 ;
C 58 ; WX 600 ; N colon ; B 229 -15 371 385 ;
C 59 ; WX 600 ; N semicolon ; B 181 -112 371 385 ;
C 60 ; WX 600 ; N less ; B 41 42 519 472 ;
C 61 ; WX 600 ; N equal ; B 80 138 520 376 ;
C 62 ; WX 600 ; N greater ; B 66 42 544 472 ;
C 63 ; WX 600 ; N question ; B 129 -15 492 572 ;
C 64 ; WX 600 ; N at ; B 77 -15 533 622 ;
C 65 ; WX 600 ; N A ; B 3 0 597 562 ;
C 66 ; WX 600 ; N B ; B 43 0 559 562 ;
C 67 ; WX 600 ; N C ; B 41 -18 540 580 ;
C 68 ; WX 600 ; N D ; B 43 0 574 562 ;
C 69 ; WX 600 ; N E ; B 53 0 550 562 ;
C 70 ; WX 600 ; N F ; B 53 0 545 562 ;
C 71 ; WX 600 ; N G ; B 31 -18 575 580 ;
C 72 ; WX 600 ; N H ; B 32 0 568 562 ;
C 73 ; WX 600 ; N I ; B 96 0 504 562 ;
C 74 ; WX 600 ; N J ; B 34 -18 566 562 ;
C 75 ; WX 600 ; N K ; B 38 0 582 562 ;
C 76 ; WX 600 ; N L ; B 47 0 554 562 ;
C 77 ; WX 600 ; N M ; B 4 0 596 562 ;
C 78 ; WX 600 ; N N ; B 7 -13 593 562 ;
C 79 ; WX 600 ; N O ; B 43 -18 557 580 ;
C 80 ; WX 600 ; N P ; B 79 0 558 562 ;
C 81 ; WX 600 ; N Q ; B 43 -138 557 580 ;
C 82 ; WX 600 ; N R ; B 38 0 588 562 ;
C 83 ; WX 600 ; N S ; B 72 -20 529 580 ;
C 84 ; WX 600 ; N T ; B 38 0 563 562 ;
C 85 ; WX 600 ; N U ; B 17 -18 583 562 ;
C 86 ; WX 600 ; N V ; B -4 -13 604 562 ;
C 87 ; WX 600 ; N W ; B -3 -13 603 562 ;
C 88 ; WX 600 ; N X ; B 23 0 577 562 ;
C 89 ; WX 600 ; N Y ; B 24 0 576 562 ;
C 90 ; WX 600 ; N Z ; B 86 0 514 562 ;
C 91 ; WX 600 ; N bracketleft ; B 269 -108 442 622 ;
C 92 ; WX 600 ; N backslash ; B 118 -80 482 629 ;
C 93 ; WX 600 ; N bracketright ; B 158 -108 331 622 ;
C 94 ; WX 600 ; N asciicircum ; B 94 354 506 622 ;
C 95 ; WX 600 ; N underscore ; B 0 -125 600 -75 ;
C 145 ; WX 600 ; N quoteleft ; B 224 328 387 562 ;
C 97 ; WX 600 ; N a ; B 53 -15 559 441 ;
C 98 ; WX 600 ; N b ; B 14 -15 575 629 ;
C 99 ; WX 600 ; N c ; B 66 -15 529 441 ;
C 100 ; WX 600 ; N d ; B 45 -15 591 629 ;
C 101 ; WX 600 ; N e ; B 66 -15 548 441 ;
C 102 ; WX 600 ; N f ; B 114 0 531 629 ; L i fi ; L l fl ;
C 103 ; WX 600 ; N g ; B 45 -157 566 441 ;
C 104 ; WX 600 ; N h ; B 18 0 582 629 ;
C 105 ; WX 600 ; N i ; B 95 0 505 657 ;
C 106 ; WX 600 ; N j ; B 82 -157 410 657 ;
C 107 ; WX 600 ; N k ; B 43 0 580 629 ;
C 108 ; WX 600 ; N l ; B 95 0 505 629 ;
C 109 ; WX 600 ; N m ; B -5 0 605 441 ;
C 110 ; WX 600 ; N n ; B 26 0 575 441 ;
C 111 ; WX 600 ; N o ; B 62 -15 538 441 ;
C 112 ; WX 600 ; N p ; B 9 -157 555 441 ;
C 113 ; WX 600 ; N q ; B 45 -157 591 441 ;
C 114 ; WX 600 ; N r ; B 60 0 559 441 ;
C 115 ; WX 600 ; N s ; B 80 -15 513 441 ;
C 116 ; WX 600 ; N t ; B 87 -15 530 561 ;
C 117 ; WX 600 ; N u ; B 21 -15 562 426 ;
C 118 ; WX 600 ; N v ; B 10 -10 590 426 ;
C 119 ; WX 600 ; N w ; B -4 -10 604 426 ;
C 120 ; WX 600 ; N x ; B 20 0 580 426 ;
C 121 ; WX 600 ; N y ; B 7 -157 592 426 ;
C 122 ; WX 600 ; N z ; B 99 0 502 426 ;
C 123 ; WX 600 ; N braceleft ; B 182 -108 437 622 ;
C 124 ; WX 600 ; N bar ; B 275 -250 326 750 ;
C 125 ; WX 600 ; N braceright ; B 163 -108 418 622 ;
C 126 ; WX 600 ; N asciitilde ; B 63 197 540 320 ;
C 161 ; WX 600 ; N exclamdown ; B 236 -157 364 430 ;
C 162 ; WX 600 ; N cent ; B 96 -49 500 614 ;
C 163 ; WX 600 ; N sterling ; B 84 -21 521 611 ;
C -1 ; WX 600 ; N fraction ; B 92 -57 509 665 ;
C 165 ; WX 600 ; N yen ; B 26 0 574 562 ;
C 131 ; WX 600 ; N florin ; B 4 -143 539 622 ;
C 167 ; WX 600 ; N section ; B 113 -78 488 580 ;
C 164 ; WX 600 ; N currency ; B 73 58 527 506 ;
C 39 ; WX 600 ; N quotesingle ; B 259 328 341 562 ;
C 147 ; WX 600 ; N quotedblleft ; B 143 328 471 562 ;
C 171 ; WX 600 ; N guillemotleft ; B 37 70 563 446 ;
C 139 ; WX 600 ; N guilsinglleft ; B 149 70 451 446 ;
C 155 ; WX 600 ; N guilsinglright ; B 149 70 451 446 ;
C -1 ; WX 600 ; N fi ; B 3 0 597 629 ;
C -1 ; WX 600 ; N fl ; B 3 0 597 629 ;
C 150 ; WX 600 ; N endash ; B 75 231 525 285 ;
C 134 ; WX 600 ; N dagger ; B 141 -78 459 580 ;
C 135 ; WX 600 ; N daggerdbl ; B 141 -78 459 580 ;
C 183 ; WX 600 ; N periodcentered ; B 222 189 378 327 ;
C 182 ; WX 600 ; N paragraph ; B 50 -78 511 562 ;
C 149 ; WX 600 ; N bullet ; B 172 130 428 383 ;
C 130 ; WX 600 ; N quotesinglbase ; B 213 -134 376 100 ;
C 132 ; WX 600 ; N quotedblbase ; B 143 -134 457 100 ;
C 148 ; WX 600 ; N quotedblright ; B 143 328 457 562 ;
C 187 ; WX 600 ; N guillemotright ; B 37 70 563 446 ;
C 133 ; WX 600 ; N ellipsis ; B 37 -15 563 111 ;
C 137 ; WX 600 ; N perthousand ; B 3 -15 600 622 ;
C 191 ; WX 600 ; N questiondown ; B 108 -157 471 430 ;
C 96 ; WX 600 ; N grave ; B 151 497 378 672 ;
C 180 ; WX 600 ; N acute ; B 242 497 469 672 ;
C 136 ; WX 600 ; N circumflex ; B 124 477 476 654 ;
C 152 ; WX 600 ; N tilde ; B 105 489 503 606 ;
C 175 ; WX 600 ; N macron ; B 120 525 480 565 ;
C -1 ; WX 600 ; N breve ; B 153 501 447 609 ;
C -1 ; WX 600 ; N dotaccent ; B 249 537 352 640 ;
C 168 ; WX 600 ; N dieresis ; B 148 537 453 640 ;
C -1 ; WX 600 ; N ring ; B 218 463 382 627 ;
C 184 ; WX 600 ; N cedilla ; B 224 -151 362 10 ;
C -1 ; WX 600 ; N hungarumlaut ; B 133 497 540 672 ;
C -1 ; WX 600 ; N ogonek ; B 211 -172 407 4 ;
C -1 ; WX 600 ; N caron ; B 124 492 476 669 ;
C 151 ; WX 600 ; N emdash ; B 0 231 600 285 ;
C 198 ; WX 600 ; N AE ; B 3 0 550 562 ;
C 170 ; WX 600 ; N ordfeminine ; B 156 249 442 580 ;
C -1 ; WX 600 ; N Lslash ; B 47 0 554 562 ;
C 216 ; WX 600 ; N Oslash ; B 43 -80 557 629 ;
C 140 ; WX 600 ; N OE ; B 7 0 567 562 ;
C 186 ; WX 600 ; N ordmasculine ; B 157 249 443 580 ;
C 230 ; WX 600 ; N ae ; B 19 -15 570 441 ;
C -1 ; WX 600 ; N dotlessi ; B 95 0 505 426 ;
C -1 ; WX 600 ; N lslash ; B 95 0 505 629 ;
C 248 ; WX 600 ; N oslash ; B 62 -80 538 506 ;
C 156 ; WX 600 ; N oe ; B 19 -15 559 441 ;
C 223 ; WX 600 ; N germandbls ; B 48 -15 588 629 ;
C 207 ; WX 600 ; N Idieresis ; B 96 0 504 753 ;
C 233 ; WX 600 ; N eacute ; B 66 -15 548 672 ;
C -1 ; WX 600 ; N abreve ; B 53 -15 559 609 ;
C -1 ; WX 600 ; N uhungarumlaut ; B 21 -15 580 672 ;
C -1 ; WX 600 ; N ecaron ; B 66 -15 548 669 ;
C 159 ; WX 600 ; N Ydieresis ; B 24 0 576 753 ;
C 247 ; WX 600 ; N divide ; B 87 48 513 467 ;
C 221 ; WX 600 ; N Yacute ; B 24 0 576 805 ;
C 194 ; WX 600 ; N Acircumflex ; B 3 0 597 787 ;
C 225 ; WX 600 ; N aacute ; B 53 -15 559 672 ;
C 219 ; WX 600 ; N Ucircumflex ; B 17 -18 583 787 ;
C 253 ; WX 600 ; N yacute ; B 7 -157 592 672 ;
C -1 ; WX 600 ; N scommaaccent ; B 80 -250 513 441 ;
C 234 ; WX 600 ; N ecircumflex ; B 66 -15 548 654 ;
C -1 ; WX 600 ; N Uring ; B 17 -18 583 760 ;
C 220 ; WX 600 ; N Udieresis ; B 17 -18 583 753 ;
C -1 ; WX 600 ; N aogonek ; B 53 -172 587 441 ;
C 218 ; WX 600 ; N Uacute ; B 17 -18 583 805 ;
C -1 ; WX 600 ; N uogonek ; B 21 -172 590 426 ;
C 203 ; WX 600 ; N Edieresis ; B 53 0 550 753 ;
C -1 ; WX 600 ; N Dcroat ; B 30 0 574 562 ;
C -1 ; WX 600 ; N commaaccent ; B 198 -250 335 -58 ;
C 169 ; WX 600 ; N copyright ; B 0 -18 600 580 ;
C -1 ; WX 600 ; N Emacron ; B 53 0 550 698 ;
C -1 ; WX 600 ; N ccaron ; B 66 -15 529 669 ;
C 229 ; WX 600 ; N aring ; B 53 -15 559 627 ;
C -1 ; WX 600 ; N Ncommaaccent ; B 7 -250 593 562 ;
C -1 ; WX 600 ; N lacute ; B 95 0 505 805 ;
C 224 ; WX 600 ; N agrave ; B 53 -15 559 672 ;
C -1 ; WX 600 ; N Tcommaaccent ; B 38 -250 563 562 ;
C -1 ; WX 600 ; N Cacute ; B 41 -18 540 805 ;
C 227 ; WX 600 ; N atilde ; B 53 -15 559 606 ;
C -1 ; WX 600 ; N Edotaccent ; B 53 0 550 753 ;
C 154 ; WX 600 ; N scaron ; B 80 -15 513 669 ;
C -1 ; WX 600 ; N scedilla ; B 80 -151 513 441 ;
C 237 ; WX 600 ; N iacute ; B 95 0 505 672 ;
C -1 ; WX 600 ; N lozenge ; B 18 0 443 706 ;
C -1 ; WX 600 ; N Rcaron ; B 38 0 588 802 ;
C -1 ; WX 600 ; N Gcommaaccent ; B 31 -250 575 580 ;
C 251 ; WX 600 ; N ucircumflex ; B 21 -15 562 654 ;
C 226 ; WX 600 ; N acircumflex ; B 53 -15 559 654 ;
C -1 ; WX 600 ; N Amacron ; B 3 0 597 698 ;
C -1 ; WX 600 ; N rcaron ; B 60 0 559 669 ;
C 231 ; WX 600 ; N ccedilla ; B 66 -151 529 441 ;
C -1 ; WX 600 ; N Zdotaccent ; B 86 0 514 753 ;
C 222 ; WX 600 ; N Thorn ; B 79 0 538 562 ;
C -1 ; WX 600 ; N Omacron ; B 43 -18 557 698 ;
C -1 ; WX 600 ; N Racute ; B 38 0 588 805 ;
C -1 ; WX 600 ; N Sacute ; B 72 -20 529 805 ;
C -1 ; WX 600 ; N dcaron ; B 45 -15 715 629 ;
C -1 ; WX 600 ; N Umacron ; B 17 -18 583 698 ;
C -1 ; WX 600 ; N uring ; B 21 -15 562 627 ;
C 179 ; WX 600 ; N threesuperior ; B 155 240 406 622 ;
C 210 ; WX 600 ; N Ograve ; B 43 -18 557 805 ;
C 192 ; WX 600 ; N Agrave ; B 3 0 597 805 ;
C -1 ; WX 600 ; N Abreve ; B 3 0 597 732 ;
C 215 ; WX 600 ; N multiply ; B 87 43 515 470 ;
C 250 ; WX 600 ; N uacute ; B 21 -15 562 672 ;
C -1 ; WX 600 ; N Tcaron ; B 38 0 563 802 ;
C -1 ; WX 600 ; N partialdiff ; B 17 -38 459 710 ;
C 255 ; WX 600 ; N ydieresis ; B 7 -157 592 620 ;
C -1 ; WX 600 ; N Nacute ; B 7 -13 593 805 ;
C 238 ; WX 600 ; N icircumflex ; B 94 0 505 654 ;
C 202 ; WX 600 ; N Ecircumflex ; B 53 0 550 787 ;
C 228 ; WX 600 ; N adieresis ; B 53 -15 559 620 ;
C 235 ; WX 600 ; N edieresis ; B 66 -15 548 620 ;
C -1 ; WX 600 ; N cacute ; B 66 -15 529 672 ;
C -1 ; WX 600 ; N nacute ; B 26 0 575 672 ;
C -1 ; WX 600 ; N umacron ; B 21 -15 562 565 ;
C -1 ; WX 600 ; N Ncaron ; B 7 -13 593 802 ;
C 205 ; WX 600 ; N Iacute ; B 96 0 504 805 ;
C 177 ; WX 600 ; N plusminus ; B 87 44 513 558 ;
C 166 ; WX 600 ; N brokenbar ; B 275 -175 326 675 ;
C 174 ; WX 600 ; N registered ; B 0 -18 600 580 ;
C -1 ; WX 600 ; N Gbreve ; B 31 -18 575 732 ;
C -1 ; WX 600 ; N Idotaccent ; B 96 0 504 753 ;
C -1 ; WX 600 ; N summation ; B 15 -10 585 706 ;
C 200 ; WX 600 ; N Egrave ; B 53 0 550 805 ;
C -1 ; WX 600 ; N racute ; B 60 0 559 672 ;
C -1 ; WX 600 ; N omacron ; B 62 -15 538 565 ;
C -1 ; WX 600 ; N Zacute ; B 86 0 514 805 ;
C 142 ; WX 600 ; N Zcaron ; B 86 0 514 802 ;
C -1 ; WX 600 ; N greaterequal ; B 98 0 502 710 ;
C 208 ; WX 600 ; N Eth ; B 30 0 574 562 ;
C 199 ; WX 600 ; N Ccedilla ; B 41 -151 540 580 ;
C -1 ; WX 600 ; N lcommaaccent ; B 95 -250 505 629 ;
C -1 ; WX 600 ; N tcaron ; B 87 -15 530 717 ;
C -1 ; WX 600 ; N eogonek ; B 66 -172 548 441 ;
C -1 ; WX 600 ; N Uogonek ; B 17 -172 583 562 ;
C 193 ; WX 600 ; N Aacute ; B 3 0 597 805 ;
C 196 ; WX 600 ; N Adieresis ; B 3 0 597 753 ;
C 232 ; WX 600 ; N egrave ; B 66 -15 548 672 ;
C -1 ; WX 600 ; N zacute ; B 99 0 502 672 ;
C -1 ; WX 600 ; N iogonek ; B 95 -172 505 657 ;
C 211 ; WX 600 ; N Oacute ; B 43 -18 557 805 ;
C 243 ; WX 600 ; N oacute ; B 62 -15 538 672 ;
C -1 ; WX 600 ; N amacron ; B 53 -15 559 565 ;
C -1 ; WX 600 ; N sacute ; B 80 -15 513 672 ;
C 239 ; WX 600 ; N idieresis ; B 95 0 505 620 ;
C 212 ; WX 600 ; N Ocircumflex ; B 43 -18 557 787 ;
C 217 ; WX 600 ; N Ugrave ; B 17 -18 583 805 ;
C -1 ; WX 600 ; N Delta ; B 6 0 598 688 ;
C 254 ; WX 600 ; N thorn ; B -6 -157 555 629 ;
C 178 ; WX 600 ; N twosuperior ; B 177 249 424 622 ;
C 214 ; WX 600 ; N Odieresis ; B 43 -18 557 753 ;
C 181 ; WX 600 ; N mu ; B 21 -157 562 426 ;
C 236 ; WX 600 ; N igrave ; B 95 0 505 672 ;
C -1 ; WX 600 ; N ohungarumlaut ; B 62 -15 580 672 ;
C -1 ; WX 600 ; N Eogonek ; B 53 -172 561 562 ;
C -1 ; WX 600 ; N dcroat ; B 45 -15 591 629 ;
C 190 ; WX 600 ; N threequarters ; B 8 -56 593 666 ;
C -1 ; WX 600 ; N Scedilla ; B 72 -151 529 580 ;
C -1 ; WX 600 ; N lcaron ; B 95 0 533 629 ;
C -1 ; WX 600 ; N Kcommaaccent ; B 38 -250 582 562 ;
C -1 ; WX 600 ; N Lacute ; B 47 0 554 805 ;
C 153 ; WX 600 ; N trademark ; B -23 263 623 562 ;
C -1 ; WX 600 ; N edotaccent ; B 66 -15 548 620 ;
C 204 ; WX 600 ; N Igrave ; B 96 0 504 805 ;
C -1 ; WX 600 ; N Imacron ; B 96 0 504 698 ;
C -1 ; WX 600 ; N Lcaron ; B 47 0 554 562 ;
C 189 ; WX 600 ; N onehalf ; B 0 -57 611 665 ;
C -1 ; WX 600 ; N lessequal ; B 98 0 502 710 ;
C 244 ; WX 600 ; N ocircumflex ; B 62 -15 538 654 ;
C 241 ; WX 600 ; N ntilde ; B 26 0 575 606 ;
C -1 ; WX 600 ; N Uhungarumlaut ; B 17 -18 590 805 ;
C 201 ; WX 600 ; N Eacute ; B 53 0 550 805 ;
C -1 ; WX 600 ; N emacron ; B 66 -15 548 565 ;
C -1 ; WX 600 ; N gbreve ; B 45 -157 566 609 ;
C 188 ; WX 600 ; N onequarter ; B 0 -57 600 665 ;
C 138 ; WX 600 ; N Scaron ; B 72 -20 529 802 ;
C -1 ; WX 600 ; N Scommaaccent ; B 72 -250 529 580 ;
C -1 ; WX 600 ; N Ohungarumlaut ; B 43 -18 580 805 ;
C 176 ; WX 600 ; N degree ; B 123 269 477 622 ;
C 242 ; WX 600 ; N ograve ; B 62 -15 538 672 ;
C -1 ; WX 600 ; N Ccaron ; B 41 -18 540 802 ;
C 249 ; WX 600 ; N ugrave ; B 21 -15 562 672 ;
C -1 ; WX 600 ; N radical ; B 3 -15 597 792 ;
C -1 ; WX 600 ; N Dcaron ; B 43 0 574 802 ;
C -1 ; WX 600 ; N rcommaaccent ; B 60 -250 559 441 ;
C 209 ; WX 600 ; N Ntilde ; B 7 -13 593 729 ;
C 245 ; WX 600 ; N otilde ; B 62 -15 538 606 ;
C -1 ; WX 600 ; N Rcommaaccent ; B 38 -250 588 562 ;
C -1 ; WX 600 ; N Lcommaaccent ; B 47 -250 554 562 ;
C 195 ; WX 600 ; N Atilde ; B 3 0 597 729 ;
C -1 ; WX 600 ; N Aogonek ; B 3 -172 608 562 ;
C 197 ; WX 600 ; N Aring ; B 3 0 597 750 ;
C 213 ; WX 600 ; N Otilde ; B 43 -18 557 729 ;
C -1 ; WX 600 ; N zdotaccent ; B 99 0 502 620 ;
C -1 ; WX 600 ; N Ecaron ; B 53 0 550 802 ;
C -1 ; WX 600 ; N Iogonek ; B 96 -172 504 562 ;
C -1 ; WX 600 ; N kcommaaccent ; B 43 -250 580 629 ;
C -1 ; WX 600 ; N minus ; B 80 232 520 283 ;
C 206 ; WX 600 ; N Icircumflex ; B 96 0 504 787 ;
C -1 ; WX 600 ; N ncaron ; B 26 0 575 669 ;
C -1 ; WX 600 ; N tcommaaccent ; B 87 -250 530 561 ;
C 172 ; WX 600 ; N logicalnot ; B 87 108 513 369 ;
C 246 ; WX 600 ; N odieresis ; B 62 -15 538 620 ;
C 252 ; WX 600 ; N udieresis ; B 21 -15 562 620 ;
C -1 ; WX 600 ; N notequal ; B 15 -16 540 529 ;
C -1 ; WX 600 ; N gcommaaccent ; B 45 -157 566 708 ;
C 240 ; WX 600 ; N eth ; B 62 -15 538 629 ;
C 158 ; WX 600 ; N zcaron ; B 99 0 502 669 ;
C -1 ; WX 600 ; N ncommaaccent ; B 26 -250 575 441 ;
C 185 ; WX 600 ; N onesuperior ; B 172 249 428 622 ;
C -1 ; WX 600 ; N imacron ; B 95 0 505 565 ;
C 128 ; WX 600 ; N Euro ; B 0 0 0 0 ;
EndCharMetrics
EndFontMetrics
       0FFTMs  <   GDEF  X  8GPOS`    6GSUB,V    OS/2ZW     VcmapG    ^cvt >1  X  Tfpgm[k     gasp    X   glyf8  d  head d   6hhea    $hmtx|9   `kernu 	  $locaX  	/  `maxpy- 	    namer" 	  =5post` 	  prep|a 
         =    )    )      (0    Y                     	
              !% && 'K LL MO PT Us t     ? @@ AB CJ KQ RW X     ) *, -                 c dd ee ff gi jj ku v    < == >l mt u  3                 
J DFLT zarab armn brai cans cher cyrl geor grek hanihebrkana*lao 4latnDmathnko ogamrunrtfngthai          KUR  SND  URD                                           MKD  SRB                                                              4 ISM  4KSM  4LSM  4MOL  4NSM  4ROM  4SKS  4SSM  4                                                        kern 2kern 8mark @mark Nmark Tmkmk \mkmk dmkmk j                 	        
                    ( 0 8 @ J R Z b j r z                       ^`      ~   !T   "T   $     8    :    ;AB DBU0nP    o      0 &  :             vy~  vy~                             * 0 6 < B H N T Z ` f l r x ~       :    :    :    :      : r  :    	    4  	  4    	`  Ltuwxz{|}mnopqrst  Ltuwxz{|}mnopqrst    R   X   ^   d   j   p   v   |                                                                                $    *  J  GH    
    l   l    N >  X        & , G  & - - G  @CDEFI  RW             &   ,   2   8 * *` * -| *~ * h.   $ J P V \ b h n t z                      
                   M        t                           H%                  	    	      " #  	    	     ! " #                                                                        $  *  0  6  <  B  H  N  T  Z                                                                                                        H                                   6   7 p v |                      $*06<BHNTZ`flrx~  h  h f    >     f f   f  >     =   > >           j   j   j     f f                                       & - . /== 5 6             % ,== 6 7 8                              $  *  0  6  <  B  H  N  T  Z  `  f  l  r  x  ~                                                         &  ,  {  { { {      { { { { { { {       {  {       { {  {    {     { {             { { { { { { { { { { { {         $ 6 H Z l ~     q ^j    q ^j    q ^j    q ^j    q ^    q ^    q ^j    q ^j      &vy~    >   D   J   P   V   \   b   h   p   x   ~                                                                8 u
"(.4:@FLRX^djpv| $*06<BHNTZ`flrx~ &,28>DJPV\bhntz
"(.4:@FLRX^djpv|	 						$	*	0	6	<	B	H	N	T	Z	`	f	l	r	x	~																					





 
&
,
2
8
>
D
J
P
V
\
b
h
n
t
z






















"(.4:@FLRX^djpv| $*06<BHNTZ`flrx~ &,28>DJPV\bhntz
"(.4:@FLRX^djpv| $*06<BHNTZ`flrx~ &,28>DJPV\bhntz
"(.4:@FLRX^djpv| $*06<BHNTZ`flrx~ &,28>DJPV\bhntz    \            H   q         &   ~                             0       ` t      w                     _ _ q _ R _  Xj j j , , , &j &j X Xv     j j , , 8   8  > ? R> Xj q R R j   j j  k j  j  , , , , , , , &j 0^ 0p 0p &j / &j &j &j X X X X X X X X X      j , 8 3p 3p 8 3v 8     j j j 8 8 v j j j p D j  > k D R> R>  R> ~j , q q q q R R S Xj d   0   1          e        d    x      3         \                      Q         Q   Q               j j   j j   j j   8 8   8 8   , ,   , ,   , ,   , ,   / / &j &j &j &j &j &j X X X X j j j j j j j j D D v v j j j j R> R R> R   ~j ~ j   8  8 ,j ,j q q q q q q q q S S     R R \ \ ^ ^ ^ , ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^    _ _ _ _ q q _ _ R R   _ _   \ \ Xj &j j j   j j   , , \ \ , ,   , ,   &j &j &j &j X X X X   j j   j j   j j   j j j j j j j j j j    B    B 8 8        8 8 j j  >  >   ? ? j j R> R   Xj &j j  q q R R R R \ \ j   8        k   j   ,J   ,   ,   ,   X X  >   R \ \ X &j d   d   d   0   0   0   1   1   1                        e   e   e                  d  d  d        x   x   x            3   3   3                     \   \   \                                                            Q   Q   Q                     Q   Q   Q   Q   Q   Q   0^ 0p 0p &j &j X X X X X  ep ep  e e  e e  p p  j j j j j   B 3p   3p   3v         j j j j j j 8 j j v   j j j p   j j j  >    >   k v   \ \ c       'D  Oh js 8 B D  R g(*;X`bbu0   &vy~    B   H   N   T   Z   `   f   l   t   |                                                                               0 6 < B H N T Z ` f l r x ~            x0  0 U0 0  0  0 0  0 @0 @0 @0 0  0 0  0  0 x ~ 0     '-  /3 55 78 :; =A         0          $ 6 H Z l ~     qr 	:    qr 	:    qr 	    qr 	    qr 	    qr 	    qr 	    qr 	       Ltuwxz{|}mnopqrst    ^   f   l   r   x   ~                                                     2`  `                         `                 P  [ $*06<BHNTZ`flrx~ &,28>DJPV\bhntz
"(.4:@FLRX^djpv| $*06<BHNTZ`flrx~						 	&	,	2	8	>	D	J	P	V	\	b	h	n	t	z																						






"
(
.
4
:
@
F
L
R
X
^
d
j
p
v
|




















 $*06<BHNTZ`flrx~ &,28>DJPV\bhntz
"(.4:@FLRX^djpv| $*06<BHNTZ`flrx~ &,28>DJPV\bhntz
"(.4:@FLRX^djpv| $*06<BHNTZ`flrx~ &,28>DJPV\bhntz ^ ^ _ L _ _4 qF _r & _r                        r r &~ &  L L    R  R q &R &R  L          J   @   @   @       n              
             r qr  L  L  L  L  L  L L L &x &x &x     &x &x &x &x &x &x 4 4 f   9_  9 ~L 
 q qx qx 
 & & &R R d 0 1    e  3 [  _  3   \        Q    Q Q                          L  L    L  L                         @ @  P  P  n  n &x &x ^ ^ &x &x ^ ^ &x &x ^ ^ &x &x l l   9_ 9e   ~L ~ L  9 9   qx qx q q qx qx 
 
 &R      &R    ^ ^ ^: , ^ ^ ^ ^: ^: ^ ^ ^ ^ ^: ^: L _ _ _4 _4 qF qF _r _r &  F F _r _r     t Xt   B B   F F         
 
     
 
                                 B B r r r r r r r r &~  &~ B &  & B  L  L n n L &R n n     ^ ^   r r R RR R R  z B B R XR L  q q &R  &R        L L L &R L L    B B  x x    J   @   
       4 4 4      XR d d d 0 0 0 1 1 1          e e e    3 3 3 [ [ [    _ _ _    3 3 3       \ \ \                      Q Q Q          Q Q Q Q Q Q   @                                   r r r qx qr 9x  L L L  L F F  L L L &R n n &R   &x  x  x &x ^ ^      ^ ^ &x ^ ^ &x ^ ^ &x f f 4 4 4 f f f  r r z B B z B B 3    ((  22 ;; Oh js  ' ) h wR g(*;X`bbu0   Ltuwxz{|}mnopqrst    ~                                                                   
        "  (  .  4  2`  `                         { { { { { { { { `                      < B H N T Z ` f l r x ~                  Q            @                         `                  (   &         @      E   \U 
   
    #%  '= KK bc   GHJ                            0   > D J P V \ b h n t z                    Q` ` ` ` ` `  ` ` ` ` ` ` ` ``  `  `  (` &` `  @` ` E   J 
 
  #=  `` bc   @CDEFIRSTUVW    2   8   >   D   J   P   V   \   b   h   n   t   `   `   `   `   `   `   `   `   `   `   `   `    8>DJPV\bhntz
"(.4:@FLRX^djpv| $*06<BHNTZ`flrx~ &,28>DJPV\bhntz                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 % $ =   D ]    4   5   6   8   :() ;AA =HH >QR ?YY Aaa By{ C F G H I** J77 KTT L M N		 O Y \ ^ _ a c g- s25 <H LP ??    df    
           b N  j      $ * 0 6 <  	o  ^   	k Z      -			      
     {  {    3 h n t z                      
"(.4:@FLRX^djpv| f            |   z   r   r   f               _   ^   ^   _         T   f      f  ^   ^      ]   f         f   H      R          =   5      RR f            r   _      5   R  3 $ & ' ( + , 0 1 2 = D G H K L P Q R X ]      -HQRYayz{*7TBCH?          T  DJPV\bhntz
"(.4:@FLRX^djpv| $*06<BHNTZ`flrx~ &,28>DJPV\bhntz
"(.4:@FLRX^djpv| $*06<BHNTZ`flrx~						 	&	,	2	8	>	D	J	P	V	\	b	h	n	t	z																						






"
(
.
4
:
@
F
L
R
X
^
d
j
p
v
|




















 $*06<BHNTZ`flrx~ &,28>DJPV\bhntz                                         	      |      W   z   zR q         o   f   |   f            >      f                              R    ^   _R    d   /         R R ^   Z                  R T   f   '   R       f  	            ^   ^         j               ]      	   f         q   f   z     ~   R R H      R    d      _R     >            zR _R R    ^      R                  R             =         F   _R R R    R    R    R 5   ^   6   >   c   ^R R /   /R /R R R       G      1R U   U   U ^R ^R 6      Z   Z   ZR cR R R {R 6R R                      TR R   RR RR          R f   Z   y         _R    T   R       Z   ZR Z   7R    !R d   zR =   f   z  ^   ^   f         f                     b   #      D                     a            T      6   R 	      	M M 	  	t t 	              R    "            Y   $R 6   f         i      R       #   >         R            }      ~R    s   k         |         W      q       T   f   R       f         W   U         R R    m   WR R "R ~R rV b   e   @               `   \   `   \   `   \R ~         '   +   %      C      m   |   R 5   R f   R J   ^R R R `R o         R q      o         ^      Z      s  9            z  V   	   >               R       +   f         Q      T               R                ~   Z      S         R                            5   _R   d      R  _     $ = 
 D ] $   >   ?   A   B   C   E   G   H   I   J   K L M() N-- PAA QHH RJJ SLL TQR UYZ Waa Ydd Znp [vv ^y{ _ b c d fg mik mm  JJ     44 }~ hh kp ss u{     		 		    	
).1359;-G25W;P[stqvs?@WWaakk  	    	     ! " #                                                                        $  *  0  6  <  B  H  N  T  Z                                       
                                                     H                               >.  c
"(.4:@FLRX^djpv| $*06<BHNTZ`flrx~ &,28>DJPV\bhntz
"(.4:@FLRX^djpv|	 						$	*	0	6	<	B	H	N	T	Z	`	f	l	r	x	~																					





 
&
,
2
8
>
D
J
P
V
\
b
h
n
t
z






















"(.4:@FLRX^djpv| $*06<BHNTZ`flrx~ &,28>DJPV\bhntz
"(.4:@FLRX^djpv| $*06<BHNTZ`flrx~ &,28>DJPV\bhntz
"(.4:@FLRX^djpv| $*06<BHNTZ`flrx~
               	    W z z q |  o f " f    >  f    { d { Z {  { d ^/ _/ d d /{ { { { { U{ Z{  { { { { { T{ f '{ {  {  { Z   ^{ { j{    d m ]  { 	 {  f    z   d y Y o f m  Z{   ~  z  {  T{ H  { { Z d  _{   >   { z _/ Z  U{  { { { { d { { Z Z { { { ={ { { F{ _{  { { { { { d d 5/ ^{ 6{ > c d d /{ /{ /{ { { { { G{ { 1 9{ 9 9{ U{ U{ '{ { Z{ Z{ Z{ _  { { A{  { { { { {  { T{ T{ T{ T{     f Z{ y{  { _/ { j{    Z Z Z 7 { ! d z v{  {  ={  {  P{ {  { {  { { { { { { ({ { ({ z{   ( z{ L { { V{ { { _/ f { ={ {  z z Y           Y f   W f Y "      Y 0    $   P   {  { E{ U{ { { { { { [{ D{ { { { { { `{ {  { { { 9{ 9{ [{ { { E{ { { { Z{ ^/ ^/ _ z{ G D{  {  T{ f {   f { G { {  { f { f { f d  { W  W { D{ f { E{  { [{ 4{ V{  { f { [{ { { '{ { { { { b{ #{ { D{ { { { { { { `{ { { { T{ { [{      { 6{ { 	 Z 	 Z 	 Z 	 Z        5     Y ${ 6 f 
   i     D >   R    }1 { ~{  s  d | y | "  {  W d q d  T{ f   { f { { W { ({ 9 { {    {  >{  { U{ [{ D{ f { & z{  m{ `{ `{  m{ W d " ~ ={ b{ e @{  {  { ` \{ ` \{ ` \{ ~  | '  %  C{  m{ " {  { f { J ^{  { 0 f o {  { q d o {  U{  Z{  s  9{    z V 	 >        + f   Q  T   {  {   { { { { Z{ * { S{ { { { {         o 5{ _{  d ^{ ^{ ^{  {       $ = 
 D ] $   >   ?   A   B   C   E   F   H   I J() KAC MHJ PLL SOR TTU XX] Z__ `aa aff bij cmp et{ i q r s t vg }ik mm  FV X^ ef jk mn pp xx  0FJ R
T$$Z+,[/7]AAf\\g__hcci}~jlmopqtvwhhxjpyssu{	
			-25:Pst/v1CEFIKQSX>@YWW\aa]ee^hi_kkab        ! # $ ) / 6== @ A B  
        "  (  .  4  :  @  F  L  R  X  ^  d  j  p  v  |                                                         $  *  0  6  <  B  H  N  T  Z  `  f  l  r  x  ~        {  { { { { { { { { { { { { { { { { { p pr pr  { pr {  {  {  {  r  { { { { {  {  {  { A{ O{ { { { { { { { { {  {  {  {  { { {  { { { { { { { { { { { { { 4  :   < B H N T Z ` f l r x ~                           f   @   R                    VF T   f            f   H    R             RR         $ ( , 2 8 < = D H L R X \ ]   Yayz{*7T?             @ % 8                                                                                                                                      kY                                                                                 &   & &          au  <                                                  aa  <  D rD r                                                                                                         /             &                                                                 &                   K   K       &                        k                                                                k                                      }            }               &                                                                                                                N                                    }                                     &   &                  a                        u                                          )       &                                                                                                    D                                       &                                             9a &a     &                                                                                                             &   &                                                                                                                                                                                                                a         /                    \<,@a=        a                                                                                                                                          ku                                                                  D  YY                                                                                    Y                                                                                         &   &  N<                D  D    D    k        DDDDDk      D                                                                                                                                                                                                                                                                                                                                                            V                                                                                                                                                                                                           V   &    Y  Y                                                                                                          }  }                                                                                                          a  D                                                                                                           &                                                                                                   &   & &          au  <                                                  aa  <    D rD r                                        
                                                                                        a                        u                                                a         /                    <a        a       /                                       &     K                                                                                                  a  )                                                          a                                                 &                                                                                H    $ $  % %  & &  ' '  ) )  * *  . .  / / 	 2 2 
 3 3  4 4  5 5  6 6  7 7  8 8  9 9  : :  ; ;  < <  = =  D D  I I  N N  U U  Y Y  Z Z  \ \                
                                                   	   	          "" && !00 :: ?? }} "

 

 "

 #

 $ #     r             $ $  & &  - -  2 2  6 6 	 7 7 
 8 8  9 9  : :  ; ;  < <  D D  F F  H H  L L  O O  R R  U U  V V  X X  Y Y  Z Z  \ \                                                   !      !   "   #      #         $   %   $   %   $   %               &   &   &   &    & & & ' (  )  * *   	!! "" 	## $$ +&& ,** -++ .,, --- ... -// .00 11 22 -33 .55 .66 /88 099 1::  % & & * + & 0 1	~	~ /		 /		 2		 0		 3

 4

 5   6 7  X  $ % & ' ) * . / 2 3 4 5 6 7 8 9 : ; < = D I N U Y Z \                                        "&0:?}



  `    $ X              x R                            j    RV  X\ ^b 
dh       
J DFLT zarab armn brai cans cher cyrl georgrek$hani4hebr@kanaRlao ^latnjmathnko ogamrunrtfng(thai4           	  KUR  SND  (URD  (                          
                       MKD  SRB                                                           F CAT  ZESP  ZGAL  ZISM  bKSM  bLSM  bMOL  vNSM  bROM  vSKS  bSSM  b                                                                                  RQD aalt aalt aalt case ccmp ccmp ccmp ccmp dlig dlig dlig fina finahlighliginitinitliga$liga,locl2locl8medi>mediDrligJrligTsalt\saltbsalth                     '                                    
                                     	                                ( R Z b j r z              $,4<DLT\dlt|  	 R  	     
    N           
LTF	   	F    	d    	h  	 	l  	 
n  	 P   2   f  	   	 
    H   |   4    D               <   @    D    b                       4    <    D    L    T    \    n   , , ,    H    !! 

 u     !! 

 u     &                             B ux{~      B vy|      B wz}               B    9           && 99                    >      9 L M *_	+	  i $ =  E E  G G  I I  K K  L M  N O  W W                                                                                     		              "" $$ && (( ** ,, .. 00 22 44 66 88 :; == ?? AA HH RR TT VV yz             ** __                  	+	+ 		       &                                     &                                  $ $    4 F                         !           !    $ $    4 F                            "           "    $ $    4 F                            #           #    $ $    4 F                            $           $    $ $    4 F                         %           %     (    0       RU                  &     .    6       VV XZ                  &     .    6       [\ ^_                  &     .    6       `b dd                  &     (    0       eh                  &    
         0D      2     txz|~$*-036"`X ! $
>(0,Z"%(46+.:9DBFHP]Jb  Ph  js  # %   RN &,/25
8# 	&@*2.\!$'*(8-0<;R_L  
TT  VV X\ ah jp rs    ) O   RM%+.14	7"%?)1-[ #&)'7,/;:Q^K  
TT  VV X\ ah jp rs    ) O  2       o z  r z   r yo v  vyz  ~    & 8 J l  m z  n z   s }p z   t }q z  
   q xp wn um t   t xs w  tuwxz}    
           >  
 $     ~ z x     ~ z x    6       " (  I O  I L  O  L  I   I     R l       $ * 0 6 <t {r zp yn xl wk vi ug t    S ~Q }P |       & ,u {s zq yo xm wh t  R }  T }   Uiqs       3  '  B    8   	  
                    W   V        W  A     ( : F P Z f r   ,  "     +  *  "    $ ;    V    0    ( /     F      X   R    " ) 5 6 7 D F             hgiefkj  $:@GMU[   hgiefkj  $:@GMU[   kWa>   , - D O  *      " & k W  a  >   , - D O \    9   =       e!?@ hifg   L M *_	+	                                 jjjjj       123   c X    3  3   f   n 
$`)  PfEd    m`              ,   
       T     ,  
           ~OSXZbw%V_
:UWZpt?5JR>PjGv#.[jx{}EMWY[]} d q         !	!I!K!N!!###!#(#,#u#z#}#######$#$i&&&&''	'''K'M'R'V'^''''''()))A))))***/*k***++$+T,w,-%-e-o...%..MGMQWn+AKSWg&A6<>ADO#t        QWZ\pz1Ya	!@WZ`ty?	7LT@RtFn &0]w{}   HPY[]_   j t        ! !!K!N!P!!###$#+#s#z#}#######$"$`% &&&'''')'M'O'V'X'a''''''))
)@))))* **/*j*}**+ ++S,`,y- -0-o..."..MЦDLPTb"0FNVd  ( 8>@CFR  pv  a_WRA@?72/.)(&!,)'`^hgedcWUTM84953*n~e`\VT sofT	|{@:80ğmlllllyl^lXlVkkkkkkkkkkkkkQ$QkjjieSSC                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                
       ~           b                       O    Q  S    W  X    Z  Z    \  b    p  w    z                #      $    %  8  1  V    Y  _    a                      %      '      B      G  	  
  I      K      L      M      N  !  :  O  @  U  i  W  W    Z  Z    `  p    t  t    y                                                            ?  ?  "      #      %      &      (      )      *      .      5      8      9      :      <      I      L      Q      R      X      b      d              	        5    7  J    L  R    T          o          >    @  P    R  j    t          !      .      >      ?  F  G  @  n  v  B      K       h    #  }  &  .    0  [    ]  j    w  x    {  {    }  }                                  	      
     E  
  H  M  
<  P  W  
B  Y  Y  
J  [  [  
K  ]  ]  
L  _  }  
M      
l      
      
      
      
      
      
       d  
   j   q  H   t     P        k        x                                                  !   !	    !  !I    !K  !K    !N  !N    !P  !    !  !    !  #    #  #    #  #!    #$  #(    #+  #,    #s  #u    #z  #z    #}  #}    #  #    #  #    #  #    #  #    #  #    #  #    #  #    $"  $#    $`  $i    %   &    &  &  u  &  &    &  &    '  '    '  '	    '  ''    ')  'K    'M  'M    'O  'R    'V  'V    'X  '^    'a  '    '  '    '  '  5  '  '  C  '  '  E  '  '  F  '  (  L  )  )  \  )
  )  ^  )@  )A  `  )  )  b  )  )  d  )  )  l  )  )  m  *   *  o  *  *  r  */  */    *j  *k    *}  *    *  *    *  *    +   +    +  +$    +S  +T    ,`  ,w    ,y  ,    -   -%    -0  -e  !  -o  -o  W  .  .  X  .  .  Y  ."  .%  Z  ..  ..  ^  M  M  _        D  G    L  M    P  Q    T  W    b  n                                  "  +    0  A    F  K     N  S  &  V  W  ,  d  g  .      2      6      <      >      I       Q     &  k  (  A                         6    8  <    >  >    @  A    C  D    F  O    R          9      =      G      I      O       S     #  c  p  t  g  v    l                    #     V   8 9  s ; >  u @ D  y F F  ~ J P   R k       V ׏           0   "                     - .   1 1   5 5     #   % +   - @   C C   
                                                                       	 
                        ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a                                   r d e i x  p k v j   s g wU l |>    c nT m }	 b   


 

  :' y
                   q z  f3f    =     ff   T   bfTfm f    3 b q   %   fHZfm       99 Xm=fuf f9{{ X3fLfL   J# DD   f?;  P   w
/X#  /553  X
         s f +       j   -  j  !f # ^`  3B3\  fy```{         j\{    `b X   P  1  L`    % !J J   7 {       ' }3  Xy 9b       s   & , %Id@QX Y!-,%Id@QX Y!-,   Py PXY%%#  Py PXY%-,KPX (EDY!-,%E`D-,KSX%%EDY!!-,ED-,%%I%%I` ch #:e:-        ff    &   & /1 0!%!!f sr)        	 @  
<2991 /0!!!!h33h^     h   @  1 <20###h++       )   K@1	 
	  91 /<2<<22<<220!3!!!!#!#!5!!5!!!`aaE````HFR`PF    # * 1 s@?
%$+	,#,, (/ ($	+ / 2<<991 /99999990#.''.546?3.'>54&}osy!dede GUNWWP-.);?7*	"*/(BE5;CBBDC  B    ' 3 c@5% ."(41+			1	+%4991 2<0KSXY""32654&'2#"&546#3!2#"&546"32654&3GNMHHLMGֺ%պպHNNHHMNh{rs{{sr{ؽ۽ٽڽ٨|rs}}sr|     { & 06@Y	
	,-./+0 ()'  %0'-	 -!	'* $0$*$	*199999991 /99990KSX999Y"' ]@ 		
	'0 	
0% /
/%&?
?@K
KK/K0ZZUZ
ZU(\.\0X2_2d ig`i
id&2,	
''*95005@JI'I(WW\['ggl]]	>7!!'#  5467.54632.#"3267577oc%Xbi*([k^PMU1ABwCt2>FnkmFDےj5j:0.;6"W/wGs))    @
  1 0#+    @  2991 0!&547!י);:       @ 
 2991 0654'!)?C     )9  F@(
	 

	 	<2<2991 2290%#'-73%JLLNLNMXX        "@ 	 
<<1 /<<0!!#!5!

   m9  @  1 0!#hdu   o    1 0!!ot       9    1 /0!!h}   B    /991 03#m   b/   #@	 1 0&#"326 !   !  i||jj|{j@'&@mstm      
 (@ 	 1 /20!%!!!T[nT
HH5        @) %   KTX 8Y9991 /2990KSX9Y"@&** " ""5 55B JFF] ]!!>54&#">3 N!IFuZzz)~B~DiMLH+-zӱ     ( L@+ 	
 #) & 	)9991 90!"&'32654&+532654&#">3 sqlg~]^rl#!%'%%)67jcfi[]V^*)      \  3   C@ ! !% 	
 <291 /<290KSXY"	!!3#!!Z@jRJ    =@" " 
 1 90!!>3   !"&'32654&#"v,Y00{zaSl12/FFuv+-   #  $ 7@ "%	%$%1 90"32654&.#">32  !   !2eeeefeev_PB[uEgჃ-+11ir       E@%  91 /0KSXY"]@&5F]!!!e'1  }  # / G@('  -0	$*&	'&!$0991 990"32654&%.54$! ! $54632654&#"lttlkrr|כc\ZbbZ\cvnnuunou)ž)*ސUY``YY_`   j  $ 7@
 
%% "$%1 9073267#" 54 !   !"&2654&#"\RDZ9$@ieffeeff!++22"vY      N`   @  <21 /0!!!!ii`}}     N`  	 %@ 
 
<21 0!#!!idiu}      =  @  291 90	5<     '   @  <21 0!!!!     =  @  <91 905511J        ! H@'  	 	 "<299991 /9990!546?>54&#">32!!Bj@95`VQfy] N^@D*i1Rb:4\.FOCB:*(ǿbY9>K-   o  M l@:40LM3	30	07$CN34L* *)(I(*)4=N<991 299999032654&#"#"&5463253>54&'&$#"3267#"$'&5476$32 !#?iZYjkZXiYثY|:;_tZked~Yk}٘~~On{KM'{zyZGOPGKɝdIz=;bɵdbg^Pag}}IJ}|b~   
  '  
 @@ 

	
	
%
 
	 	Բ]91 /<90KSXY"@
/
V
f
 	t







	%*	 IFGH	XYVWhifg`t {zu{t				 	 	/] ]!!!!!F_}))}+%R            P@% 	 	!299991 /90@	 ""/"P"]2654&+2654&+)! [^^[tutuH|B7fPNMQsbcaay$ռm    f\  ;@	 	- +21 990/_]%#   !2.#"3267\j}Lu}jksskR78ef87IDDI      9   .@ 	
 -. 	99991 /0P]32654&#! )=TMwiffixjq#ateeta       0@ 
	 21 /0Pp]!!!!!!rg      	 +@  
21 /0Pp]!!!!!rg  f  K@%	 	13 /-+1 9990_]%#   !2.#"3267#!ʥLy}|<g)XoFFei87GF"       >@ 
	 221 /<<0@P`p
]!!!!!!89+y       =  ,  KTKT[X   @8Y1 /0@P]!!+  f=  A@   KTKT[X   @8Y991 990@P]! !#3265N<x{#      q 
 @ 	 291 /<290@V<;LK[X]ogg`h`xp'2;BKTYX_`fmpx{]]!!	!!+1!=L         @  1 /0!!!N    9  @3666	
	6

	%
  	
1
1 91 /<290KSXY"]@f			
+?HOLL
WYY
hoo
	
 *%:5O@GVY	Phgej	`	] ]!	!!#!TV+D%      	 |@66% 11 
991 /<2990KSXY" ]@4
 8GJVYPgh`>3IO@UZfi]]!!!!mR  +       ff   2@ 	-7-+1 0@ /?]"3254   !   f°±hhgddjk       
  1@ 	- 299991 /0 ]! !#!32654&#1pzzp_mddl    ff   b@  
-
7-+9991 90@, ' /VSf`wwpYYYXjix]]#   !  !"3254fgk-¾lkh\        @2%
 	
 	29991 /<9990KSX9Y"]@66EEVVPee`]2654&+!! !.#yiiyL'O}@f7q^?ZgfX֔-XspR    - ' @* %
%(
 "(99991 9990@Tp)9999 JJJ X
]\^^ Z!joooh o n!ttt|| |! ! !(]].#"!"$'32654&/.54$!2{hYuӎ⏏|~[ {78LP<C!2̼65ELMTNFL!0Ҳ%    
  j  3@ 8 8K
TKT[X  @8Y1 /20@	]!!!!
`N      3@ 	 
9 1 290@p]!3265! !  yy6=  
  '  @'    %  Դ  ]91 /290KSXY"@,   G GHHEJWX] ]!	!!
5N+     =   m@J
6
	66
6	
   %
 
	 K	TK
T[KT[KT[X   @8Y91 /<2290KSXY"@

%
 
 
:?:?3
0
0
@
@
@
^^a




				'('(%*/66220002	4
6?IFHE	J] ]ZZUURRRZ	U]o oonhheh	k
niowwx	vxK] ]!	!	!!	!=q s nDD==+o     '    @E
 		  	
	   %	 
	 K
TKT[KT[X  @8Y91 /<290KSXY"@X	 		/&	 	<3	_P					

+ +%$%+
:55:
Pe jo
] ]	!	!	!	!omGF       @(   % : :	K	TKT[KT[X  @8Y91 /290KSXY"@,  %%0@P`

 %*5:0
O
o
] ]!	!!TTu     \  q 	 b@%   
Դ]991 /0KSXY"@%)69?FHOV_o]!!!5!s8!7       @  21 0!!!!m   B    /991 03m       @  21 0!5!!5!m`    @
 91 290	#	#fg--         /1 0!5  ۾  ^f  N 1 0 K	TKT[X     @878YK	TX     @878Y]	#yfx     X{ 
 % @*	   # #	=;&229991 /9990@L/'= =!?'M M!] ]!n n!~ ~!p' ! ! ! !20C@SPc`]]"326=%!5#"&54$!354&#">3 pq[QeiH"ӆsUst/LJDMm)f]ˢŸUO..    ^   8@ B@	221 /0O`]%2654&#">32  #"&'!! syyss{{{Ju
uJf稠b]]b     X5{  7@ 
B ;21 0_].#"3267#   !25IOT@TWV/X=202177     \   8@  @B;221 /0O`]!!5#"  322654&#"hJu
tsyysryyXc\II]ɨ    X
{   C@! 	 D;91 90/?]!3267#   !  4&#"
q}K"=w`h3f~~CD015:f}un     '    Q@ 
 	EKTKT[X  @8Y<<991 /22990@]#"!!!#35463L<27DN ` N   \Fy  ( K@& 	# & @ B;)221 /990O*`*]%#" 54 325! !"&'3265"32654&JuuJhic^[o|xsp||b\CA\c !65      5@ 
 G21 /<9990`]!54&'.#"!!>32H.pfQnVon#'b]         )@  <21 /0@	P	`	p		]!!!!ff`   F   =@   <2991 990@	P`p]!+53265!!fͱ>fLf`\      y 
 @ 	 291 /<90@`;IIZ]X_ogvv{:DGJV]g`ewpv|]]!!	!!fNNK-        1 /0@	P`p]!!f       { % i@)	   # HH&KTX  @8Y<991 /<<<29990@'0'P'p'''']>32!>54&#"!4&#"!!>32DpFNfo@RgphBgthmVHwkHk`_`p       {  5@ 
 G21 /<9990`]!54&'.#"!!>32H.pfQnVon#'`b]     X'{   -@ 	BLB;1 07?G]"32654&   !   w}}wu||u!EG{ 88     V^{   ;@ B@ 221 0O`]%!!>32  #"&"32654&fJu
us{{ssyy
b]]7  \Vy   ;@ 	@B;221 0O`]"32654&#"  325!!ryyrsyyyJu
uJhw+c\IG\c       {  7@	 	
 KTX 8Y21 /990.#"!!>32/]/fE}*(/`ne   jb{ ' @@6	
6%
 %(
 SRP"M(99991 90KSX99Y"]@^			
		#,.	.
...) 9;	;
;::K	J
JJHww	
%	
7?)_)	] ].#"!"&'32654&/.54632s_fcKa?o}ktijIm?c=0035+.	###44:90/       m@ 
		 TKTKT[KT[KT[X  @8Y<<991 /<2990@? ?  PPP``	] ]!!;!"&5#33q>\Ա %N7  >    `  ;@  G 291 /29990`]!3265!!5#"&hG.pfQmp[.w#&)b]     `  @'   %  Դ  ]91 /290KSXY"@|   0@Vf 
 & $+)6 4990F FII`x $] ]!	!!fgGw`     H  ` @J
4
	44
4	
   %
 
	 K
TKT[KT[X   @8Y91 /<2290KSXY"@
 
550
G
@
@
_
l





	
&$+)*+	$%/5 54;::78?GIFHGHYVV[	TY_f`b```d
`upspppt
p			[] ]!!!!!H\+\yy`    
` y@F
 		  	
	   %	 
	 K
TKT[KT[KT[X  @8Y91 /<290KSXY"@ 		 /	3<	CL	R\	bl	sz			 												 	2

$++$
4;;4
0DKKD
o 
 


 
 
 :] ]	!!	!!l{{l=#Lb   F` 6@C    %
 
 		 K
TKT[KT[X   @8Y91 29990KSX9Y"@   @Pet	$$$5 586699E EJJEEge	
9] ]!	!+5326?f- f)Gp[S
`6:K    \  F` 	 @%   
Դ]2991 /0KSXY"@DYVifyv &)/9?J_] ]!!!5!uNN` f   $ ^@1%	 ! 	 %	
$  
%<<299999991 99999990#"&=4&+5326=46;#"3l==lEUZnoYUmutWW       1 0#     $ `@2%   #%#  %<2<99999991 99999990326=467.=4&+532;#"+ FUZooZUFl==lmWW͖tu  R  #@  1 990#"'&'&'&#"5>32326j`k^Xbk`k^VRPE:=MSPE:=K  `  	 "@ 
 
<2991 0!!33h=^qd      # W@. !$  B$<<222991 <9990.+>7+#$ 4 %3NMMNJAY9S:
GZ,lm*902i2/  (.##     }    @@! 
 	<<1 /222990.#"!!!!3#5356!2FMvqu\'&}
F     J = # / @
 !	!$A
  ! *  @&00
	 '}|~- }
|0229999991 22999990'7.5467'7>327'#"&72654&#"ϙљ0l=6l9ϘϚ.j?:l[\[~Ϛ1k??l.͚Ϛ7n6?i/ϙ\\\]~    y  @B % 		 n mn
m<2<2999991 /2<<<290KSXY"  ]@,
$+6:FI
  0@]]!!!5!5'!5!!	!!!!N9:1k$! %j1`BV3VB      @   <21 0##
 
     = 3 ? k@8@ 1:4%+1@=!+%74:!= \.!\=[ .7[(@9999991 999990.#"#"&'532654'&'.5467.54632>54&uc9KLҟquMKUfs9AN$ˠoqKATDC{AF''1/COY}u0)qI)+2(FJWh33oKL2CbBO4Cj     ;;1   \@  1 <20 K
TKT[KT[KT[X  @   878YKTX     @878Y3#%3#1     1 I H@(
 
2&>f,X c8e XhDJ21 /990.#"3267#"&54632'"3267>54&'.'2#"$'&5476$+9o9q~r@s.A>EyWWWWWVy{WWWWWXymmllmmmmllmmf%#rs~$#WWWzyWVVUWWyzWXVnmmmmnnmmmmn    u   ) @$' 
#
 A  
    #   @'* #s#s*999991 999990@??;;;??;;;???;]!!"326=%#5#"&546;54&#"5>32-ӅhB:Yr7^YUWO\K=4>3:rWT@LHt8;##   j'   5	   @	 
y y<2991 <299055%$'qsq       @
  1 0!#!   o    1 0!!ot          4 L b@8-*+'0! 52+A'*,$0-+$!1g3f$cX;eX3cGM299991 /29990"3267>54&'.#32654&'2#'.+#2#"$'&5476$ yWWWWWVy{WWWWWXϲ##NOM+i`)Gok&:1mmllmmmmllmm3WWWzyWVVUWWyzWXV5442wyVpP:NAD7nmmmmnnmmmmn   X;  E  1 0 K
TKT[X  @   878YKTX     @878Y!!v   dL   @ 	XYX1 0"32654&'2#"&546 HdcIHdeGBz0/11-0|D\dHHbcGHd3/0xDCy-03          .@ 	l l
<2<21 /<<0!!#!5!!!

bb    m  ]@ %  " @ 9991 9990KSX9Y"!!5>54&#"5>32r_9=4I;>TWKGeD
5P(2>-/oHyV   Z ( W@ #	 
"" # @#) &	)9991 9990#"&'532654&+532654&#"5>32P\fQDB<_hkrJTbZNP4{FAWZ`nQ$%@;@=/3--piE`  mf  7 1 0 K	TKT[X     @878Y]!#f  T`   B@!	
 !	 !291 2<990""]!3265!3267#"&'#"&'idfgdh!'!5]-Yq#/YJhTutqqtG8
KSOO/0  ;d  &@  ^^91 20!###.54$\fN۲  9    1 0!!h}    o    5@
	 	 	991 /0K
TX     @878Y!#"&/32654&'Z:7{0f42S!:A+->j/_[.(R<   { 
 7   	   	@ 1 29035733!9	41Z    uu    9A
     @ 	uu	991 02#"&546!!"32654&B7T[[TS[[޾ܾM~tt||tt~      '   5
   @y y
<<991 <2990	5-5-%!$'    d'Pzd''   {  d''  ' td {  h'Pzd''   u   n`  ! M@*    "	 	"<299991 9990!3267#"$546?>5%!!iAm@84`VQew\ N^@D*iif1Q~d:3\/FPDB*(ǾcX:=L-d 
  'k& $   u 
  'k& $   u 
  'k& $  u 
<1 
  's& $  { &+@0?&]1   
  'k& $  u  +@p@O /
]1    
  'm   !{@S  !!    ! !%! !  
UU
"9999999991 /<9990KSXY"K
TX "  " " @878Y@   /!/!:!o! 	!!	# 	 
 ///  /// "+  #E KU Z`	`
`ooo``ooo`fi `#t uyz{t    	
 D] ]	!!!.54632%32654&#"!}^_}vtwM66MN56MJH"K+uu/L{6MM66MMR           @7 % 

 	/<291 /<90KSXY"K	TK
T[X     @878Y@  &W  ]	!!!!!!!!!{ y}sfb ^ fo\& &   zs     k& (  u   k& (  u   k& (  u   k& (  u 	@@@]1    =k& ,  du @@]1      k& ,  du @@]1      k& ,  |u    Ic:1    A  k& ,  |u  +KQX  @ 88Y1   !  L   @  	-.  <291 /<20@X !P!`!////////OOOOOOOO________(]]3#32654&#! )#3PULxhgghyk#ateetam     m& 1  5u ffk& 2  Nu ffk& 2  Nu ffk& 2  Nu ffm& 2  gu 3"+@@"O3]1   ffk& 2  fu $+@pP_ / ]1     )  /@
 	
	 <291 <290		'	7	NNNN3NPPN    - 	  + @>+,
	  )*&&&,+,* #
	 )-#7-+,999999991 99999990@p - 
-*'&!/-976!9)?-GYVT!Y(Y)jege!j%j($'))68)KFE I)Z^SVV T!V"[(j	ejlaf c!k(x		
	]]3254&/.#".5 !27 !"&''\4SM3RJJgfqMLhfqs>;Du1:9@q.dkKMscdOOq k& 8  'u k& 8  'u k& 8  @u <1 k& 8  @u  	+@p`o0?
]1    k& <  u @	p	o	_		]1        @  -	 2299991 /0 K	TKT[KT[KT[KT[X     @878Y@,     0000PPPP]]!!3 !32654&#=1pzzp]mcen   h 0 j@4.("! ++/"!(%
a%.(a_. 199991 /990@  /2O2p22]4$! #"&'532654&/.5467.#"!1]EtkAJ8s6HX7bFXT`[efZG
NJ%94%@uH9/D7'1Zt2UYnm  Xf& D   C    Xf& D   v    Xf& D      X9& D      ?0+1   X1& D   j    X& D      @&2O&O2?&?2]1   X {   > @B8>6 6 '&#6-*>;0*?
 - 6
& 7 
3;?<999991 2<<<9990@N>>?@MMO@^^_@nno@@@2=0>B=@>R=P>b=`>=>=>=>=>]]4&#""326=>32>3  !3267#"$'#"&54$!354&#"w`gpq[Qe^waGMz	=q}~Heߋ"ӆsUf}unLJDMm)JMOMOf~~CD01kdkdŨŸUO..    Xo5{& F   z    X
f& H   C    X
f& H   v    X
f& H      X
1& H   j    	@pp ]1   f&    Cw   	@p@]1    f&    vw   @p]1     f&   ^      Ic:1    #  1&    j^    +KQX  @ 88Y1   X'  ( @Y&'('%$%(('"#" !  "! 5((5(%('&%"! ##	#)'& !#(%"BB;)99991 9990KSX92Y"KTKT[X ) @  ) )878Y@6f!/*76"?*O*oooooooooo] ].#"32654& !  4 !2''%'!%7l4uru|uj-.N$%3`ox#y-\8	watr`    9& Q      X'f& R   C    X'f& R   v    X'f& R      <1 X'9& R      	1"+1   X'1& R   j    	+1     V    0   @ 
	z{z <<1 0!!!!!!33Xˁ  N) 	  + @>
	 )+ *&&&++, #*
	 #)B#LB;,999999991 /9999990@@: 5
;75!8)?-I F
KGD!H)[VT!U(i kfe!e(5:)EJ)U^(i
em(	]].#"32654&'.5 !27 !"&''XK/w}HO0u|;CDG"jKmFElMpD)A+CN{8,,eP~--^   f& X   C    @@]1    f& X   v    f& X       Ic:1    1& X   j     +1   Ff& \   v     V^   ;@ B@ 221 0O`]%!!>32  #"&"32654&fJu
us{{ssyyb]]7    F1& \   j    
  'O' q; $    
+@p/ ]1 @ ]0   X' q   D   @O ]1    
  'z'4 $     +@	p  ]1 @o   ]0   X='  D   @O ]1    
o''   $   Xo{'   D   f\k& &  fu Xuf& F   v    f\k'u &   XVf'    F   f\k'u &   X5'   F   f\k& &  fu XLf& F        9k& '  u \& G    @	O?]1  !  L     \  $ K  %@"	  
@"B;%<<1 /<20O&]!5!5!3#!5#"  322654&#"FhJu
tsyysryyrr+c\II]ɨ    O' q ; (   +@	O@/ ]1 @ ]0   X
' q   H   +@O@/ ]1     k'u (   X
F'    H   @O ]1      k'u (   X
'   H   o'   (   Xo
{'   H     k& (  u    Ic:1    X
f& H      fk'u *   \Ff'    J   fk& *  1u \FF& J      fk'u *   \F'   J   f6'_  *   \F'J J     k'Yu +    Ic:1     k'fu K   &+1 KQX  88Y@	]       <@	 
	 2222221 /<<22220!!5!3#!!!#53!5H88ջyX¼      <@ 
 G 2221 /<229990!54&'.#"!#535!!!>32H.pfkQnVon#'kkb]     m'|u ,   %
$+1     9'_       
+1   A  O' q|; ,   +1 @ ]0   $  ' q_     +1   ,  k'|u ,    +1     F'_       +1   o&  ,     o&  L       =k& ,  u  +1      `    1 /0@	P`p]!!f`    f6' -   ,   @1   F' M   L   @1  fk'|u -    Ic:1   Ff'_      Ic:1    Sq'f < .   Sy' < N      y` 
 @ 	 291 /<290@`;IIZ]X_ogvv{:DGJV]g`ewpv|]]!!	!!fNNK`e-    l'v /   @p P ` @ 0  ]1    l'v O   #@	 p ` @ ]1 KQX   @8Y@  ]0    S' < /   
 @  ]0 S/'/ < O     'o /     ' O   KQX   @8Y@   ]1      ' y  /     ' y  O       `@2


%
   	 <<.9991 /90KSXY"!7!!'%s۔#`j     ~@-	
		%
	 	 
 T<2.991 /90KSXY"]@ut@P``tpp	] ]!7!'7ho}oXV      l'+v 1     m& v} Q     S') < 1   S{' < Q     k& 1  qu   f& Q      i  !' Q  ~   f  +@

 21 @/0%!#3265'&#"!!>32؄N<x1Btox#~"6E\&w   F{ $ 0@!& G%21 /0#!532654'&'&'&#"!!67632nlfL$$.p@@fQ[[nedjyv\77#WV`b./ww   ffO' qf; 2   $+@pO@/  ]1 @ ]0   X'' q   R   +@O@/ ]1   ffk'`u 2    #+@p O@   ]1   X'L'   R    #+@@ O]1   ffk'Nu 2   X'f'    R    f   P@"	 		 
-+ 299991 /220@ !!?!O!_!]# !3!!!!!!"#   !2i iZhsf/F&0ih    X^{  ' 3 t@2" .(%4 "1	 1	+B;49991 2<9990@/5?5O5O5_5o5o55F"]]4&#"!3267#"&'#   !2>3  %"32654&w`hAq}~ ~HRՂG"QRǇBcw}}wu||f}unwf~~CD01QWTT88RVWQ:     l'v 5     m& v} U     S '. < 5   S{'/ < U      k& 5  u   f& U  U    -l'v 6   jbm& v} V     -k'u 6   jbf&Z  V     o-& 6   z    job{& V   zb    -k& 6  u jbf'\   V   
oj' z    7   o& z   W     
  jq& 7  { 	 +@ 	]1     & W  7   
  j  .@ 	8 8
<<1 /2<20!!3#!#3!
`K         :@ T<<2<<1 /<<<20!!!!;!"'&=#35#33qq\XY  MN XYM  >  m'?u 8   .
$+@	 
/
]1   9'    X   O' q@; 8   +@	p ]1 @ ]0   ' q   X   +@O@/ ]1   k'@u 8    +@	p   ]1   F'    X   n& 8  D S & X    @&``&PP&??&]1  k''u 8   f'    X   
 @? ?]0 o& 8  4   o`& X     =  r'h| :   <1 H  f'   Z   <1  r'| <   	<1 Ff'    \    k& <  u +1   \  ql'v =   \  Fm& v} ]     \  qo'y =   \  F'V   ]   \  qk& =  u \  Ff& ]  T     '    #@

E<1 /0)#35463!#"?L` NC   ^  $ H@#!$ B@"!	%<2221 /220O&`&]%2654&#">32  #"&'!#535!!! syyss{{{Ju
uJfH稠b]]brr  t     , Z@*  &	 *	'*"&-<299991 /290@	 ../.P.]2654&+2654&+)#"!54763! v[^^[tutuH|O*  c^B7fPNMQsbcaay$</MUQm          ^   ?@ B@	221 /0O ` ]%2654&#">32  #"&'!!! syyss{{{Ju
uJa稠b]]b    Q   
   27654'&+!'3 py6::5z=-1][0-ujju  4     67632#"'&'!'276'&"FJZZuυuZZJ{=<<==>>b.//.bTT@TTUTT     f\  /@ 	- <1 0>3   !"&'3254#"fj}uL}jkssk78__875IDDI    fd " Q@&	 "	#- +#2991 99990/$_$]%#   !2676!3#".#"3267\j}Lu0/"b3N<x{ksskR78efY݆IDDI    X%   H@# 
!B B ;!2991 90_""].#"3267#   !676;#"5IOT@TW?@Mlͱ>fL202177Tv\   !  L    t    # 8@ 	
 -.  	$<99991 /20P%]32654&#! )#"!5476TMwiffixjO*  c^q#ateeta</MUQ     [   +@
21 @ /0! $4$!3!!;#">k}lk~#+hSsR    \   ?@ @B ;221 /0O`]!!5#"  322654&#"	Ju
tJsyysryy#c\II]b5   X:({  ) B@%BBK %B
;*991 @("*990?+]!254'&'& !  ! '67654&#"z@錪HJ4@6*Bqqb.Fb]##p9С2 OFn8W       +@		 21@
 /0!!!!!gr+#V##   hf   I@  -7-+91@ 90@	   / ? ]4'&#"6$3   ! '&!3276z}|}yh`;9aa:=~FG578bdrMM      ( ?@#
	) ) #)*	--&)1 90.54$!2.#";#"3267# $546!#lr^]~glqs%"  )*^V][ifcj76%%ޕ    f  C@  2991 @  990Pp]!!!! !#3265rgN<x{#   V  i@ 	EKTKT[X  @8Y<<99991 @
 2299990@]#"!!#!53265#35463L<2L<8CN \8C N     fd & e@-$"13 /-+'991 @'"#	 #%	%'99990_(]%#   !2676!3#".#"3267#!ʥLZU"e3N<x{}|<g)XoFFei
[݆GF"    PX  # }@ %$K	RX-YK	RX
-Y91 @ $$2990@##       # <<%32654.!	!#"&54>7, 7%J22J%72`K/,WK:7Y^&/55/&^Y\_PDI}X        2  54&'.#"!!>32;27654'&'52+"'&H.pfQn7vRK9*TvRF;mn:n#'b]ܔ4aXlrTH]Alvx     l  5@  KTKT[X   @8Y991 /990!;#  {x<NV    
    >@	
 
 KTKT[X   @8Y<<1 /<20@P]!3#!#3m       q   	!!!632#54'&#"^[\)L]]^q       y   	!	!!4763!#"NNKnldP-Fyv\    
    0@	
 
 <<1 /<20@	P`p]!3#!#3f]m       3''%'!%!=]M%5Kf&H#eaeca    -  %#"'&5!32767!32765!!5#"&D^]ppeh##Nf87h  Rh78hBVUgth67wkCw65TTC65UU+_00p   f  @(66%  11 99991 /299990KSXY" ]@4
 8GJVYPgh`>3IO@UZfi]]!!! !#3265mR:<x{  + #  V{L    ff    @@-7-
+ 221 @   0@ !!/!?!]   ! '&76"!&'&32767fhhha99aOaaOddjkMrrMjj    l'6 2  _'   R   f   3@  	 ! -+ 1 <0!4&#!   !2!  27&#"{xggnV3/XaaVjk9LRA   XF{   4@  	 ! B; 1 0!4&#!   !2!227&#"LfG"xc[%u>>uw}}L\
88p-74  t     E@-99299991 @ 	/2990 ]! !#!#"#54632654&#1"P;qpzzp3JM_mddl     V^  $ H@"B@ %221 @ 	%	%990O&`&]%!463!#">32  #"&"32654&L<Ju
us{{ssyyX7Db]]7       2654&+!!3 !.#yiiy'O}@f7q^=ZgfX֔-/pR  5 -  6763 32767# '&546?67654&#"{ gh-.~|Ӓu-,h{%߲ii0!&&FNT&'L56yx2!"!<PL87     { ,  >3232767# $546%767654'&#"jc?m$%jitpqk}wvo?a&%12f_s= 09:4##	+500      8   D|  $  323#;!"'&5# &'&+"30q~iLff	&f+]jxdDXW7@.AJ    F   !!;+532767&'&5#33q\glͱ>f&#MY %N rv.+w
MY >         B@ 8 K
TKT[X  @8Y991 /2990@]!!!#"!547601``N&&i1RQ        y@& 

		 TKTKT[KT[KT[X  @8Y<<291 /<299990@  PPP``	]!!;!"&5#35463!#"3q>\ԱL<N %N7  N7   
fj  A@ 
8
 8K
TKT[X  @8Y991 20@]!!;#  !
`{x<N߂!   '6 8  '   X   7  L@		-7-+ 99//	991@
   22990  47!!3254&'!! fgnq°q͖ng6a#II8ad     -   !# '&!;27654'&'5!lN͗=>x<fuBs=܊VCCu^_{     ^   	!!632#54'&#"TۋՇ[\8%Pu`V]^E   F:{ "  #54."+53276?!6!2:/6H]_p[*(
f-Kee<!9!JJL4df     \  q   !3!!!5#!!sg8A	A     \  F`   !3!!!57#5!7!uѵ|NuI` ݶ    "  %27654'&+5!!!"'&'RQST1R~VN55cf45^#N!pgts="J&&    T "  %2767# '&54767675!!#"NV~R1TSQR&&J=stޏgp!54fc55    LH` "  #"32767# '&54767675!!һTSQRgjklqtssNV~V^45fc556%tsޏfq!	   uVF` 2  327670#"'&5476%767654'&+!!oNt\Y<i!#32dnkkegqj~[M<d$/2"0HCA(0+KJC9%&-         $  !!#!67654'&#"6763 3!N*)#FGuZkkzz?,+?Di@@'&LH+vvzi  T #  5!!3 ! '&5!327654'&+%\ qSNQRRQST_<(xstssc5555cf45   LH` "  75!!32!"'&'327654'&#QmHOstsqljkgQRTS\/Fhsst%)655cf54   J3 $  #535!!!#"'&'327674'&#ffQQLNNOPc99V3C^ׅ#*+rB`GLr  V^{    !!67632 54'&#"fWViN[98~X
o%,p\NqBA  V=   !!  V&  K    
VI   !!!!!!!5!5!5!i____e     2     k'?   '     
f'@   '   \
 f'@   G   fV' -   /   F+' M   /   F' M   O   f' -   1   F' M   1   F' M   Q   
  'k& $   u 
<1 Xf& D        k& ,  u    Ic:1      f&   }      Ic:1    ffk& 2  Mu <1 X'f& R      <1 k& 8  #u <1 f'    X    Ic:1    R& 8  A~    O&    q ; &   > U& X  D  &   > V& X  I  &   > U& X  E  X
{   
  'R& $  An    XO&    q ; 
  'U& $  Cf   XP&   q <    O' q:;    X ' q     fU *  # '& !2&'&#"327675#535#!3ʥy}|{|}|<34)X[FFei7G##kJmJ     \Fey  6  "32654&6=#"'&5476325!3#!"&'3275o|<<sp||_Ju͆uJhi*Oic^ZZ[RwOPWBaMb\\cYKY]B !6BY    fk& *  u \Ff'    J     qk& .  Su  yk& N  nu fof'H   2   Xo'{'    R   fofO' qf;   Xo'' q     k'uy   YHY&T  ^  Ff&  g      Ic:1      ' =   '     
' ]   '   \
 ' ]   G   fl'"v *   \Ff& J   v     	|   !32765! !'&5!!!u<=<=9OPPO
=#     V    %!!67632 54'&#"Fv]apVd`	?=aqx+1|2p|IH   k'u 1     f& Q   Cc   
  's'}    Xs&   \}    k'u    X f&    v   -k'(u    N)f&    v%    
  'l& $  &v Xf& D     
  'b& $  =l XF& D       l& (  v X
f& H       b& (  =l X
F& H      l& ,  v  f'      /  b& ,  =l   F'U      ffl& 2  sv X'f& R     ffb& 2  =el X'F& R        l& 5  v w  f& U  W      b& 5  =l   F& U  W   l& 8  sv f& X     b& 8  =9l F& X     -'}   6   jb{')   V   
j'Q   7   '   W    R 2  >54.#"57>54.#"632XLqKF_38@Qv;!2QP(vzS"$yhv@.5NSk7@])U_!OBN-6O' 8Xqj1    eOZ{ 0  5>54&#"57>54.#"5632<Ux9E|fCxK48Kj5.IG$ghFIVK&h%+?DV-JVEMB5@!,@ ~υ*CZ\0q    k& +  Su  k& K  au  V  &@	
21 @

 /0!>32!'&#"!to1Bw]6E\&   \f   ;  %2'4#"%276'&#"632"''67&'#"'&7632!pK*%es=<<=sr<==<Lj^3@BM[G$.-FXυtYZJhY3/TT@TTTTTT\8EWiJPH7qD#,/.bX   }  @  "327654'&5! '&54767&'&5476%&327654'&>WXXWUUUUfST]]]]NSt;p6RR@aQQO;;:;;:no;:YcUU)*_^rqqrސ^_*V\PldE	%8<E0&:0wk10    X+ ' 5  %! '&54767.54732654"327654'&:c0FEONݔMN0b&21\Zblt::lk9999iOo~VU))`^rqqrސ^_*)oOi/MY00`YM	v:;;:no;:   \Fq   !#!532767!5!!!qcf&#S!8mA.+v#7  \FF`   !#!532767!5!!!Fcf&#~NNmA.+vf  
  'k'u $   X'   D   v& (   z   Xo
{& H   z    ffR& 2  A    X'O&    q ; ffR& 2  H    X'0& R  H  ffk'fu 2   X''   R   ffU& 2  C   X'P&   q <  O' q ; <   F' q   \    f    %2'4#"632#"''67&!K*%TLjW3GBM[G$.pfY3/\0DXhJPH7qpi    f{ , 5  632#"''67&6'&'&'&#"!!676326'&#&LjQ2NJM[G$.v$$.p@@fQ[[nedoK*%\*BX\JPH7qw=B7#WV`b./ww<U5/    d  '  %6'&#&!!632#"''67&'&5#3K*%KqSj[3C>L[G$&YU5/ `4EWlJPH>Z	Y > F`  1@   991 990@	P`p]!+53265fͱ>fL`\     \X   @  %276'&#" 276'&"367632#"'&'#!5#"'&7632s=<<=sr<==<?=<<==3		3>IYZuυuZYIJuυtYZJTT@TTTTTTTT@TTUEwnwE`-//-`c\/.bX     \VX{   ?  "3276'& "276'#!#"'&76325!367632#"'&r<==<rs=<<=@=3		3==<<dJuυuJfIYZuυuZYwTTTTTT@TTUEwnwEUTT@T|Lc\\c`-//- M     !#'#5'7!	!7'!'F_JJ&Smqq\~}HT JJJ&S[qs\   $ ! )  '&576!27&'3267# /&#",qku}sYTq0/<vskj}[RYJqf&sȘ!=%DI78
[D  " +  '7&576!27&'32767# '&#"bp`/XU77hl121TTLK@TWVW槳`TS^^Ջ
pe"W1zWX      (@ 
 <<1 /<20!3#!!#3ۿm        #!'!!77#kvqt)Jq(vqt#Jsp  j{ 5  .#";#"/$/32654'&/.54632s_f12&%a?{[Nϧ=kpqtij$#o?c=005+	#ZTGx4:90     \`   !;#"/&'5!u?es[NϧN`':ZGxf  Q   &  ""#547676763! !#!!2764&#N+0!K3A!yp==zp%/!MA?~~76l  V  {   2764&#"! !o>=zpCk76l~X        ( w@. " 	 *&	#& !)<2299991 /<290@	 **/*P*]@p p!pp ! ]2654&+2654&+3#)#53! [^^[tutuH|B7fPNMQsbcaacb$hm     0P   O@9
	<2<21 @  	2<<2290@p]326=!!!3# !  5#53=yyzbb[b6=b  
  '1    B     33#3!!!#7!!#!9HTg99fSݾNVy     XB
   ' + /  !3267#"'#7&'& !2737&#"7#34'
r?Wq}i_{4,K"`S\z7/m $h"@fxU3fCD01(:!.	unK(C2  f  U@ 	 	

 KTKT[X   @8Y<2991 99<20@P]!3# !#3265#3N<x{j\#
   F   Q@# 	 		
 <<22991 99<20@	P`p]!3#+53265#53!!fͱ>fLf`^\     cfj  $  %2654&#"#   !25!;#  Vb_bm{xPNyTUz     \Ff{  )  %276'&#" &'5#"'&76325!;s=<<=sr<==<VJuυtYZJhLfTT@TTTTTT_ Shc\/.b\            @  	!<29991 @
 	
/<<29990@ %KSX9Y" ]@ 66EEVVP"ee`"]2654&+!#3! !.#yiiyL'O}@f7q^?ZgfX5֔-XspR   {  D@
	 KTX 8Y<291 @	 
/<290.#"3#!#53!>32/]/q fE}*(/lvJne       !!7!3#!#53#xx{pqaջu   F?`    !3!3!+53276?!53#ffH]_p[*)
^3`JJJJK    { 
 % U@ #	=	&229991 @	   ##&99902654&#"!>32!#3267# $pq[QeiHӆsUstfLJDMm)f]ˢŸUO..    \{   8@  @B;221 /0O`]5!!5#"  322654&#"hJu
tsyysryyc\II]ɨ     ^{   8@ B@	221 /0O`]%2654&#">32  #"&'!! syyss{{{Ju
uJf稠b]]b`     ^  $ M@!$B@$	%22991 @$! /990O&`&]%2654&#">32  #"&'!463!#" syyss{{{Ju
uJfL稠b]]bF\  X5{  /@ ;B <1 0>3   !"&'326&#"XUX/VWT@TOI=%12:02  Xs5{  & L@	##B ;'991 @ %!'0_((].#"63%"''47&'& !232'&#"5IO3f!HnPV/X::S=20{PrWD&I79K   \F   $ F@'	% %	 @"B;%22991 990!;#"&=#"  322654&#"hLf@Ju
tsyysryyX \c\II]ɨ     \h  $ C@%
  
 
@"B;%22991 /9905463!#"!5#"  322654&#"fLJu
tsyysryy\c\II]ɨ    X
{  "  76! !"'&'3267!%!&'&#"X"}vwqpAAh`;<3
際0D"!~~n:;?>    X
{   G@D;91@ 	 90/?]5!.#">3   !  %3267XEq}0Qpw`h+f~~CD01>f}un  y{ 	 4  32767! '&'&'&#"6763 ?;#"'&5W	;`hAA]U("Nqwv}0&&i+`OA?;:n,Q`Vv)?!"D087o[ n{J    n{ 1  !"'&'5327654'&+5327654'&#"567632y~\]\ZG^UMtABC>v|u2987_;<[ZYWtt87\p$'(:<'%",*$# HGa@?     n'{ ?  !"'&'5327654'&+5327654'&#"567632?;#"'&75y~\]\ZG^UMtABC>v|u2987_;<Z[YWuG&&i+`NB"\p$'(:<'%",*$# H+Iq87o[    nQ{  /  %27654'&+5327654'&#& '&76!2tABC>v|u2987_cSSWtt87ly~'(:<'%",*$#dR]`囜*HGa@?p F`   53!3#+53265$fllͱ>fL^wv\    \Fh $ 0 `@. @(B;122991 @ $ !%	+ /99990O2`2]%#" 54 325463!#" !"&'3265"32654&JuuJfLic^[o|xsp||b\CA\c\+ !65   \F`  )  %#"'&54763)!"&'3265"3265Ju͆qhic^ZZ[o|<<sp|b\⡠ !6OP:     X\_ "  %# '&76!2.#"32767'!5!\hopwkXZZZY,%%H2((10YX    3P`   @B	BI#;ĵ 	91@
 222 990  <  <<<<%32654&#"&5467!!]bb]k{{5&?)-**-)?UMM(   3`     47!!254'k{{ku434,H|(|HW;HJ9S  J`  >@  G 291 29990`]!3265!!#"&hG.pfQmp[.w#&)Xb]      %  !54'&'&'&#"!4763!#"67632$$.p@@nlfLPZ[nedVo77#WVFyv\a-/ww  F 1  67632#!5326=4'&'&'&#"!4763!#"PZ[nedilfL$$.p@@nlfLa-/wwFtv\[77#WVFyv\        <@	
 
	 <<<<1 /<20@	P`p]!!!3#!#53ffܐJ     `  %@	 991 @ /990!;#"&5fLf`n\       `   %!53#5!#v       !676=3!#4767f;9g;;i 9JH;JI          !3#!# !2&#";&fXjB6.YyjX77"BKT    Fn   !;!"'&5h&%gln /.vy   HY &  !!!"'&'327654'&+5!!f^V}VOstsqljkgQRTSrLN	!qfst%)655cf54     ^ ,  %#"&5!32767!32765!!5#"&D^]ph##Nf87h  Rg88hBVUgth67w65TT&65UT'_00p   T^ ,  %#"&5!32767!32765!!#"&D^]ph##Nf87h  Rg88hBVUgth67w65TT&65UT'N_00p  F{ 1  67632#!532654'&#"!4'&#"!!67632D^]pnlfL##Nf87  Rg88hBVUgth67jyv\sw65TTH65UT`_00p F{  G@" 
 G 9921 /999990`!!]!54&'.#"+53265!>32H.pͱ>fLfQnVon#'\Lb]  Fj{ #  &'&'&#"!!67632;!"'&5$&,gI@fSYZofd&%glt2"WK`d,/wxj/.v     ` 	 <@% 	 
991 /<2990KSX@
44Y!!!!4mR`uu     X'{    >@BLB	;221 @ 9/07?G]   !   "!&'&!3276!EGu>$%>y#/>uw>0{88 U2LL2UkmAUUA  Xa 	 "  #";!!!!!!"#   !22oVVoEN_|
	dKUV$"    h    $  303265'"32'5  #"&'#"'&7'1!!7-cgWX/TliajDg*r {Vj    `   32765!!5#"'&'//./KJfEYZ}(1
XYn23      32765!!5#"'&'//./KJfEYZ}(1
XXn23   FE`   32765!;!"'&=#"'&'//./KJfLflnEXZ}(1
XY\vyߢl23     V{   &'&#"!!67632//./NJfEYZ}(/
XVR
n23  F{  K@!
 
 KTX 8Y2991 99990.#";!"&5!>32/]/LffE}*(/\Lne      =`   %!534763!#"nlh$&yv.1Y      =`   %34'&+5!23!8&$hln1.vyY    j  ` 
 "  27654'&+!!2!&'&#['(('[Onn99s?223%+-Kv  IH g`JKoHG!0/aG   j  ` 
 "  #327654'&'32767!#!!OO['(('%K-+%k322?s99nnf HI  Ga/0!GHoKJ`   jFb{ 7  .#"!"';!"'&=32654'&/.54632s_f12&%a?79&flnkpqtij$%m?c=005+	#b&.vyI4:90    Fr  :@	  	99991 @ 	
90%+53265463!#"ͱ>fL!fL\2\ F "  535#354763!#"3#+53265
ϲffLglͱ>fL NWXCJrv\   FP{   !2;#"'&54'&+ffLf>llL{XW\vwD D|  $   !34763!#"3##0#";2767ffLi~:j]+f&D7WXDԜdxxJA.     `   !!4'&+!23#q\3YX> N XY%    F  u@ 
		 TKTKT[KT[KT[X  @8Y<<991 <2990@? ?  PPP``	] ]!!;#"&5#33qLf>ز \L >  `   C@
G <2<221 @	/29/<<22053!!!3#!5#"&5)3276hfQmyG.p@"Jb]Z!#&V.     `  L@		BLB; 99//	991@
   22990  5467#5!32654&'!# ]$NTooTN$]$<Ik||kI<ݖ        `   +"'&5!;27654'&'52-RF;mnh7vRK9*TAlvxn4aXlrTH      `  @  Դ]91 /<90@   %KSXY"@|/?OXh
  &$+) 6499 0FFII `x $] ])	!!`    H  `   )!!!!ռ'`          )	!676;#" G_^p[)*
ʻKJK       G`   !!!tw9`Yx(    \F`   !!;!"'&'!5!uO	
li}N`~ .vtf  \s`    !3676#'7!5!254#"u|؂NV_#`+(	f$0P    YH` "  	!!!"'&'327654'&+8r^V~VNsstqlkjgRQST N	!qfst%)655cf54   uH` 	 -  &'&76767&'&+5!!5#7#$!2,b5'jBTr^V}WNes}A	U9J*4 N	!qfs	%(#0  J  3   32765&'&#"67636!]V99cPONNLQQ҄frLG`Br+*#Ӆ^   J  3   !&'&54762&'&#"3mfQQLNNOPc99V ^ׅ#+rB`GLr  J  3   !'"'&'327674'&#ffQQLNNOPc99V3^ׅ#*+rB`GLr  JV3 #  %32767#'&54762&'&#"9cPONNLQQ҄QQLNNOPc:`Br+#Ӆaׅ#+rC_    ff   %  47632"'&"3254   !   '&65'&Ll&'°±hhg5''''56L&&&ddjk    `    nQ{  /  %7654'&";#" $5467&'&54763 VTTb_7892u|v>CBAL~yl78tt`]Rd#$*,"%'<:('殭p?@aGH֜     X   +  %# '&76!236763!#".#"32767'!5!\hopwglfLZZZY,%%e2rv\10YX      `   F     !!!3'+ !30#";276ff8si}7j]+f&ܐ0cv6K@.   Ly` 
  !!	!!yd`#fLOe^-       `   !!!j`     \Vh  )  %#"'&7632536763!#"!"3276'&JuυuJhlfLr<==<rs=<<=c\\crv\!TTTTTT@TT   J  3 $  32765&'&#"67632!!!5#53]V99cPONNLQQфfrLG`Br+*#҅^   J  3 $  3#!5!5!5&'&547632&'&#"3mfQQLNNOPc99Vv^ׅ#+rB`GLr  \  ' *  %276'&#"!!!!#!5#"'&7632s=<<=sr<==<^hN1JuυtYZ3TT@TTTTTTXL c\/.J     \H	U  C  %276'&#"!!!"'&'327654'&+5!!5#"'&7632s=<<=sr<==<^h^V}VOstsqljkgQRTSrJuυtYZTT@TTTTTTXLN	!qfst%)655cf54c\/.  \  4 ; >  %276'&#"!!367632+'47!#!5#"'&76323276'&s=<<=sr<==<^h#k@ JuυtYZv'% /61TT@TTTTTTXLu78878c\/.9GH     l % 8  !67632.#")"&5#3!3!2654'&/.543q-zcڀs_fcKa?Y_Ա>\xij$#o?- V 0035+.	(KP >%N79#     F8 $ ,  !54763!#"+532767!"'&5#3!33QffLllͱ>f&#XY\NWXDRwv.+vXY >b`%N  s 2 : E  !676!2&'&#"63 !"'#65&'&'!"'&5#33254#"!;&543q/XUVUIJIOTS!g7h]G2$XY1CS\E»2WXcG99^H%@.9XY >_9K%N   'F :  #"!3!67632#!532654'&'&'&#"!!!#354763L/cQ[[nednlfL$$.p@@ffDNb./wwjyv\77#WV`` NWX     '  !!265&'&/.54632.#")fLij$#n?cڀs_fcKa?Y_59 0035+.	(KP        
   !!!!#!fN7!f-L `D   .       333##333##.xyyy޼yxxyyy޼yxsPTQ PTQ  .      7#!#!#!#!>)>) JJ $  4&+5!232765!!#"'&5Lfln$$.p@@fQ[[nedF\vy77#WV'Xb./ww    JF` -  %#"'&54&+5!232765!;!"'&5Ff[nedLfln$$.p@@fLflnY5/ww\vy77#WV'\vy    n?   #=4'&'.#"#367632?
.H))4:;F|@A>S01Ug7BC     n? %  #=4'&'.#"#476;#"67632?
.H))FFkA49:G|@A>S01Ue}CBKL6BC S    3+5327653#nEEr(A~BCK\  n   &'&#"#3676322X00,:9Pd12\sg>     n   327653#5#"'&'nX0/,rPG12\!g>8    n_   327653;#"'&=#"'"'nY/0BjEG,8:PG12\!LBD}[=      	 !  #32764'&'3276?3#!3322:l0]j!  (I%$FGR|(6')>Z*)s  .   333##.xyyy޼yxPTQ  ?   33+53276?-=<cH:WRi***   tf   tf&     X
   X9
    _   #5Rڬ@        2764'&#52#7&&'&6vTSSTvt'&l&'STTS     0"'&4763"vTSSTv6&'&&tSTTS'&l&'    /   327654'&#"5>32#<8$%?s33221htTcAy8@+'6%@vJyQ5   /   #&'&547632.#"31xAdUt4312d4r@$%78d5QyJv

@%6'+@   "   %%E  "   5-5Eʳ     |Nf   ##ZfD   |Nf   33|F   yf  6@ 91 290 K	TKT[X     @878Y3#'# ǲf    yf  6@ 91 <90 K	TKT[X     @878Y	373 ǲ x        #+  X; q   mf   !#f     ^f   	#yfx   [   #+  ;C q  /    ^   #ykx   m   !#k  ]  `    !!*f|   ]`   !*|   &`  L   &`  L      !533>     5!##   o j   533##5#5P     o1   !5!1>մ   PF  i@  1 <0 K
TKT[KT[X  @   878Y KTX     @878Y@  ]332673#"&cSScFFJJF w;1  *  1 0 K
TX  @   878Y!!w1        C   	@
: 1 0 K	TKT[X     @878Y32654&#"4632#"&}M67LM67Lvvvv7LM66MM6vvv  Vo    @
  

991 /0!33267#"&546ō2&;1'M(7^)s{6CI'1\V5m   \9  @ 
	  @ 
99991 9999990 K	TKT[X     @878Y@T	 				 (]]'&'&#"#4632326=3#"&7/$&g]$I)=%$(g]$CT%>;+@9    f   %@ 0_O]]1 <203#3#-fx   2   %7;#"'&7:&&i+`NBs87o[     f   '#7'373QRSȵSRȶWWVV          3 5473254'xx  !TWW*1')*&1    nS   3#n     D 1  &'&#"#"'&'5327654'&/&'&54632JDD=B 0>(==TUGKLPDHHJD"!F(>=@EF-,`d32
	.-\d`  :   	373	#'##2    /   #&'&547632.#"31xAdUt4312d4r@$%78d5QyJv

@%6'+@      ;  @	  1 /0!!5!Fvмt    ;  '@??//  21 /]0!!5!3F4t     ;  @  21 /0!!5!3Fhht       ;  '@pp    21 /]0!!5!3F4t     ;  @	  1 /0%3!5t P p   ;& q  q    Xo     N  3    o\T $  '&'&#"#476323276=3#"'&7/$&43]$$%)=$43]$"!2/l;<".m;;	
 \f C    ef v    wf    T9    X9 q     M  !     ZF
     K  @ 1 ԰KTX  @8Y0!!Kf ;?1 j      "  #5476?67674'&#"5>32Y7 ,&A$XWPg11 	1%+&#t^Y.$'$       f    wf     \   #\D '   C      4f    ###r£׮fxxZ' 
     ZF   #."#> cc8FJJF Xr  @1 0!3X*    !527#xyz    #3$5yxz  J f   !#ff \B C  eB v   O   #5353#!      33## 5C `n   !5!#]+  4 +   532654&'3#"&CI'1\V5m2&;1'M(7^)s{6   [F   "30"&5463F&22&cc2%&2cb       53533귽       #5!##+˽   
   #53533##    b   5!+b   F^    '#!5326=nlfLyv\    Ff    %!;!"'&5hLfln܇\vy  KMq   !!Kf M?C j       4&#"3267"&5462X3%&22&%3ƈƈ$32%&23$ccb  b A  @ 1 0!#Do   z     Vo        \   #\`t   9   #5##Ǽov    g@   #"'#"'&'3274732767jy0@k=>j.NONG@FF0:m  w& ' K	TKTKTKT[[[X  @   878Y w& ' K	TKTKTKT[[[X  @   878Y Z@
   Z=   #."#> cc8FJJF!T?  9C        B        
      R a(     ;@x   5!;   MOx   5!M      '2pnm^^e    f   'qqJqs       2#52654&#cc%33%bc3%$3 9   3353üv  X8    !5# T   g@   67632632#&'"#&'"gy0Aj>=k.MPMG@FF0:m       '7'771  !  #532654'&/&'&5463#"#
9@	+;>'RRz.!RSz#   :  '!   !   \f C    kf v    Z9      ;' j    l   V 	  #"=3;X3Vh    :I   #5!#!ƴtxx,  2    !5!5!5!>>2Z  	    3#3#@`tt     !#!*> \f +  #7&#"#4654763273327653#"'&	:a (56W%%Bi%56W&# J\<2jAA
h9j@A
  \ # ' +  '&'&#"#465463232653#"&3#3#8- (kW%J';'%'kW&FҴN#<2j'<9jC\#     T(   7!#'73!'3awQwww(͌  $   #557'Aܛ  p   #";#"&46;7LM6vvM67L Z'
         '7'77tyttyttyttyuytuxttxuty p   532+532654&#pvv6ML7짚L76M ; 1     q      64&" "'"&462664&"33K22̈BCCB33K223I32K2Aŉ??ň??3I32K2  _"    k"P   p`   !!p   pA   !!p ࿼   ' #  '&'&#"#67632327673#"'&],$V5Hqpo?x],$P;Iqpo?@#
$0)JI#
$,-JI   p&j#     h(   5!'3#7hfww͌        `      q   !!!!!!N        !!#!#!8N     tf   3Ant  V H   %#AnH        `   V 	  #"=3;X3Vh    X5{   X5{& F   yf X5{&   yf N`   f= -   [f  7 1 0 K	TKT[X     @878Y]!#uf ;'  l j   5  Wf&'0    9 y    +f'+J  t      Rf'-\        f'/\  z    f&5K     f':  n      f&>Z h   /&N j   
  ' $      %         
  '   @	 Բ]91  /90@   %KSXY"@/ IFXYVW hifg `zu]@/Vft ])!!')HNT      (   \  q =      +    ff    N@	-7-+1@  0@ /?]@	  ]"3254   !   !!f°±hhghddjk      = ,     q .    
  '  @	 Բ]91 /<90@  %KSXY"@/ IFXYVWhifg`zu  ]@/Vft ]!	!!ut}))w+      9 0      1      b    ;	 <<1@  /0@pP0    ]!!!!!!29igg\q ff 2           3        b@ 
<9991@ 

  /99990@ 

Pp]!!	!!$a#A4l 
  j 7     <    f  f   ' N@ '	%')-! %-+(ԴpP]<<<<Դp!P!]1 /<2<20)]!67654'&'&'&7675!!.#aa"//"aa!0̓̒SO[W rr  rq!    '   ;    s  \  B@ ܶ_o]<<ܶ_o]1@
  /22<<0!" !3!2765! #+S67R,6eP9ǗP^g\  7    b@-7-+ 99//991@	  /<2990@ !!/!?!
] ]  !!67654#"!!$ fg3S&°­&S3d8#\6 F  k&/  u  k&:  u c)f'   F   nf&J  P    Vf&L      f'C  N   	&Z       c)y  $ d@ B;%99KSX$<<Y1@" / 990@&o&O&?&/&]d  ]7!;#"'&''&76%6'&'"7$6DRfQ0_q$CodJN0lT
=O.'&xѣ     V_0  0 X@	"B*@	012Բ"]Ĵ ]1@&1--1 9/90O2`2]654&#"32654'&'567>3#"'8?O[mN{sbv@rMMsP7Cd\W>UsN)U+xwC X\Sf(Tʲ    VU`  @

91@  /<<990%KS	KQZX@ Y@=yZ^______GFD JJ774 99% *+  
]@vVPA2$ ]!!&'&+5326g6"6%DDBP VXJ    Y($  ) T@%%B
LB;*991@(* *"* 990?+D4]&!" !  4767&5! 32654&'&z茪3@	5*Brqc.Fb]##p9С2 ODF8W   n{ 1 J@"22'(#,23'/;21 Բ]03 3]&'&547632.#";#"32767# $546el78ttWYZ[<;_7892u|v>CBAtMU^GZ\]\~\?@aGH #$*,"%'<:('$p   YVU  F@
B;Բ]91@  /<0@	 @]#52654&# !! &}F0;;Z{} ;&&B<  	     V{  6@ 
 G21 /9990`]!4&'.#"!!>32H.pfQnn#'`b]   X($    B@	BL B;221@  @	`?]0?]767&'&#"   !   6[XY\61LghK2OTW ^aLWoo  `  "1 0`0]327#"'&'&5!198 >CAhfj@[+Xw      =`  k@
		 291@ 
 /<290%KSX@ 
 <<@	 
		Y@
]!!!	!fbRWR`Au+   =    @
 Դ/]91@
  /<90%KSX@   
<<  9Y@		]@ ]'.+532!!>K^p϶DM8뚶<L   T` w      `  O@ B99991  /20%KSX@ <Y@  ]$76'&'!!!)]9*{wHf'7[D8rNįt`     YVU " f@!!B;#Բ]991@  /<9/90@	$ $@$$]6#52654&#$%$767!! %$&y^XF0;;Z d];&&BeP+  ȿ   X'{ R    V`  C@
	Զp/]1@  /<<0@	`0 ]!#327#"'&'&5!!#V189 >CAh` 
?[+Xw`  V^~    2@
B
@!21@! 0O"`"]67632 #"&'!%"32654&A{~y&%ÑuJTs{{ssyyĀ]bB   XV5{  8@	 B;<1@  /0_  ]&#"#52654&# '& !25F0;;V/b	;&&B~7>    X`   6@
	BLB;1@  90 ]"32654&# !  76)v}}vv||B>{8     +`  '
 1@  20!!327#"'&'&5+V189 >CAh`  
@[-Vw    	`  :@ 	 B	Բp	]991 20@	p_/?]4'&'! ! '&5!3764RuG*h~fJ`t\-RG_^PaJB@     Vj   Y@ !BB; ܶ_o]<<ܶ_o]991@ 	 /<2<<0 !]2!$763676&U62j@V@}dxa     4V`  @ <Բ]<91@ 		 <<90%KSX@ 99
999999Y@]@	   ]!;#"&/!.+532{V G6pK!J0pσNwO6땻-R3    V`  R@	ܶo_]<<ܶo_]1@ 
	 <2<<0  ]65!!$!!ڋffd d@V@d`    X`  V@	 B	B;999991@  2<29/90/]!!76'!%$z"F3sfs3FT (798  '1' jb  N  	1' j   Z   X'f&T  }    	f'   Z   Xf'y  ^    Vq   !!	!	!+1:y!=Vu     p$ 	  #   76'&! '&76! 03276!Kws6FP,^n	#3A7Tg1F-m~`zUt]     i$ 	 #  6'&#"'$%$! '&3676'\MRjе		鞏PJq9GR³#GBlO}վU   *     !4'&'&6%6'&µ=**+tx9CWs<n*lVHˍUxT4!0u81R    f't  g     *  k'ug    {V   %  7654'&!&'&76%!">VV"}ddd}"VVc.Am+ny}a}yY+mA    .`    #! ! 47#!32!324_<F""F<f nfn`  S  9;     o\c 5  !&'&47!"5476764&#"63 7!6327#"'532( d<+ -g9[>cd<+ -g9[HQW(8]P(oPDl$.8aPm(oPDlj"[<    fVf    "3254!&'&76!  f°wgh̋^-jkdΌ  XV'{    "3276'&!&'&76! w>??>wu>>>>Uwd"!d{UVVUUVBVUZ#`(؜`     fVl "  "#52764'&# '&76%!Svvp}U][TF";ڤ]zZb[TL&eF  XVT` !  "#52764'&#"'&76)
:SSZ*}U][TF";Mw`<XCKZb[TL&~*      )   V~ &  747632.#"!!#"'&'53276e_BD;0b&Z&* _^AEDH"4Y'(D7kf
9>_ff

:<     | +   3 '&76'&# |`)& k9V+ "Gk{<s}/'FW&) FP         	!!!1,dy    rV !  !6!  !6'"!04?&!"_Rh@c!jD*~P25     -Kx   %!'!&'&'5 #4'& ,, 0myD>WRS;    fKX <  "'&'# '&467!3276=!32764''!'676x0/yzxGp@Ag479gh46{lel473hA?vBx=F޼ەu^U^^FkmimmsAF褊b23G     xU4` %  %&'4!!764!'676Rj~=jr&nj=~8yܦob B@d6@ل|1+
&W     fV   " 765!!# '&76/RRRQ0RRJi~~vI<UX    \V{   "32765!!#"'&76r<==<rs=<hJuυ{TTTTTT1Lc\   K %   '676767654'&#"!!676'HBKQmyѓ+4znomWtu{НE5+Jg]Xl~qmk>BC     *  J  &#"327676#"'&'&'&547676763267!"'&#"'632327654fet1*'1.&[s]-Z@I:1$#%7Hc}mD)DZwZ@NaerjQhVF"eD8(	$O:HAAC4D&0M`ds.#AL.#YIX^  WV !  3 %!  654'&#"!676! M|=[SL}xZ:\J2eǾLlxVP|Dnӻ   ^V{ !  327!  654'&#"!676! 	eNGAjs?1O}DznTQUQ:6F.Sll   l    /  !'27&#"6763267632&'&#";!Q:!3!N#"''+:Y#"`;*&(%N!3!:=#1b0>
N&K(N
0<1#  d  {  /  %3'27&#"567632767632&'&#";!54z1-A " $2@@2$ " A-1jɞ9Y%33%9  f " 1  67632! '&7676!2767#"276'&#"4lz*&Yˋ(wrgDCCDDEEFD8/ߤ27x_VTTTTTUVTU     ] " 0  67632! '&7676!2767#"276'&"/uanr¤&"}uP{cqlg]s=<<==>>?D8/ߤ27x_TTTTTTUVTU   9V<   !5#!#!!!<`[u  7V   #5#!##!!ƭse`p
ppu    oc ,  !"5476764&#"63 7!2327# 47d<+ -g9[>cd
<+ -g9[>cH`(oPDl$.8aPm(oPDl.z1   F^~    76!  #"&'3!!  "26FuJxx"{{y!]b1©@    X5{ F  F M   ffa    g{ !  %# '&76!2&'&#"%32767g^{Щ0|^@|lLNnusN.
!?@qr~!    { !  73267%5&'&#"54763 !"'NsunNLl|@^|0{!~rq@?!
Қ          V^    f\ &      9   !	!!#!TVW+DQ     V2`   '!!!!,N
     DV^~      "26%6!2 #"&'!!!5#53s{{yUKuJwhhw©@]bpp	     D:   73254#">3 !"&Dksskj}u}R5IDDI5788 f\&   y3   D:&   yc      k'7u     k'u    
fb #  %!#3276=4'&'&'&#!!!!!!2bN<x>=$$.
fe銊#CC77##wu     l'v    f\  A@	 -+21 @ 990327#   !2&#"!LuXxofeoˍx   - 6     = ,   A  k   f= -    ^      2654&+!!$!3 gypoz~ d'3^][]\8#/(A      z    4&+326!!!3 )!!oz~~yp3,[]^q9y    
  b   2!=4'&'&'&#!!!!!fe$$.wu5o77##    ll&  9v   k&  pu ;  k&  u     !!!!!!8AN+   
  ' $       
  '@ 	21 /027654'&+!!!3 y6::5zi-1][0-ujju    %        @ 1 /03!!%\N    {   0@
1 @ /2220!!>!3!!!h:E#[ENAd    (      	  @
	<2991 @%
 /<<2290KSX@
	
	
			<<Y 
<<<<@ 
	I:I:I:I:I:I:3	!!!	!!'c22cXSSVhhuN  ( ( L@+ 	
 #) & 	)9991 90!"&'32654&+532654&#"6$3 llՙEC'^GM%'&$)67jcfi[]V^1")      	 =@6		6% 	1 1
991 /<2990KSXY"!!!Rm+        k&  8u    l  Y@	 2991 @%	 
/<290KSX@					<<Y!!	!!ZrX?h|N  ^     	
1 
 /<036!!!^f'#K1+[   9 0      +   ff 2        @ 1 /<0!!!+N    3   f\ &   
  j 7    ;    =1 @%/20KSX@  Y%!#32767!	!(;xFj!KBU6m#EOX    f      :@-
 -+ <<<<1 @
/<2<204&'>!  !5$  %<oaboUr '   ;      $@ 	1 /2<0)!!!3!8NN          21  /20!!"&5!3!!:J^l:yx+      	%  %@
 
1 /2<<0!!!!!!#+N     
   -@ 
1 /22<<03!!!!!!!	%#ANN  d      2654&+!!3 )ypozn3^][]#   &  Q       
  +@	
 -
299991 /027654'&+%)!3 y6::5zL-1][0-juuj   y   3267!!.#"63   !"'_uLx#x5o_5_o         6@!
!-- !2<1 /0676!   ! '&'#!!"3254ghh°{dd^       m   :@	 -	21 @
%	/<0KSX
	
	Y;#"	.54$)!#Jiyyi9tL'j gZXz+ו+5 X{ D    X>W  * :@(BL"B;+1 @	+%+990'&547676%6763   !  4"32654&n:kv29PLzFt	!Ehv}}vv||mCCĀ0)'	"0O[8&&     `     -@!21 @  /02654&+2654&+!2#!>@@>OPPORMcm3222&??>>Rsj       `  @  1 /03!!Q`}     s`   0@
1 @	/2220>5!3!!!#!r`Ⱥ p pSO &i`   X
{ H      `  @
	<2991 @%
 /<<2290KSX@
	
	
			<<Y@	] @
] 
<<<<@ 
	I:I:I:I:I:I:3	!!!	!!',{f{,ZZqq9gWsW6  d${   <@
PP 	!1 @	!  !!032654#"632!"'32654!# kzٴ@,gE03=᭮8^O2      ` 	 <@%		 
991 /<2990KSX@
4		4Y!!!fi`T`T     &       P`  p@	 2991 @%	 
/<290KSX@					<<Y@	
]  
]!!	!!f"e`{9g`   q  0`   @ 	
1 /<036765!!#q(E $uY`%I     `  J@%
 	
 1 /<290KSX@4
	44	4

	Y!!!#!`0{\     `  $@	 	 221 /<20!!!!!!fcf`V'  X'{ R      `  @ 1 /<0!!!``` V^{ S   X5{ F      `  @  1 /20!!!!ji`} F` \    qV 
 $ / K@-B$$	'B;022221 @*% $"02222220"327&!632  #"'!#"  32"32654&AyyAk===fj
ϑjj
ϑjk==kAyywJJII*IIIIJJ    
` [    `  $@	  
1 /220!!!!3fcf``     `  21  /20!!"&5!;!0f:LfPǲY     `  %@
 
1 /2<<0!!!!!!tfftf ```     `  -@
 
1 /22<<0)!!!!!3!,ftftf ```    (  `    %2654&+!5!32#OPOP??>>W    `'         ` 
  !@ 21 /04'&+3276!32#!f('PO((Ffz{{z^? AWSTRR    f{   !. 63   !"'3267!Ώ/VѰ$Kb$>>%cU     l{    >@B
LB !<21 @ /990!3676!   ! '&'#!"32654&f"!EޖZw}}wu||`?ȏ>{   ?  z`   M@	 B	21 @
%	/<0KSX
	
	Y@      ];#"	.5463!!#O[[OV%U~!~H@>1jg X
m&   C   X
1&   j     (FZ   53!!!632 5>54&#"!(f|x]xSLٿ#ֹ~    (m&   v    X5{  W@	 B;221 @		IIPX@8Y0_]!327#   !2&#"!$V/Uc>77>bK jb{ V      L   #  1   F M    Z  `    !32#!#!6762654&+QșEt(KOPPO`W`%I $uY7??>>     L`    %2654&+!!!!!!32^OPSLfcf??>>'`VW    (  @   53!!!>32!54&#"!(fQnTTr~Lb]p    Pm&   v     m&   C
  F&     `   !!!!!!D hfcfi``  fX 2  3276=!32764''!#"&'# '&467!09gh46{lel473hA?vBx./yzxGp@Ag4tmiqmwAFf^^F   X`^    d  S    3 )!!5!!2654&+3""@ypozu$^][]    (      32#!!!!!!2654&+Xf>OPPO B I??>>   '  3267# '&#!!3676!2.#"!6Xxskj}۷ir+u}jksvDybDI78ѯ87IDLm     { *  !!32767# '&'#!!3676!2.#"o1TTLK@TWVWѫ.f0/XUVUINT-L4W1yF`Mw20W1        )#!#!!		Lc   3  u`    )#!#!!uБ'dd`      
    )#!#!!!!!!
F%		y9Lc       `    )#!#!!!!!!Бf'dd>`=  f  f    )4'&'!!767!!fk>^U:kqIJq M& Hkr3	3r    X  '`    !!767!!4'&'#uQooPK+A>*LM'<'MU1:/U    	  !  !!!!!!!4'&'!!76KJqk>^U:k#9	3rM& Hl#    `     !!!!!!!4'&'#!7OrfoPK+A>*Lʋ>`='MU1:/U  oV M  #"&#"32632&'&#"#"'&5476;27654'&#523 54!"673767632&#"4&Qc6C..|d^.F!'uFL]?FHZ<T$"*b0(	.`4{nWG4'
5LǐV].3Y%S(}d&y+1EP   Qt T  #"&#"32632&'&#"##"'&54763272327654'&#523 54'&#"5673767632'&#"zi' Oh)1##gpUP,E11bBE]$GG%9164=O;DbaT$"*b1.a.>UI
\P'/E_OT$(7d	n:;}d&y+-3=     {   '&#"!!!!3!367632{:Z"wwGgĨHESb6V6`E=J    V_   '&#"!!!!3!367632_:Z"wwGgdĨHESb6zVV`G=J   ffa   X'{7    
     !632.#"!
nw;@r*r54
r    r{   !>32'&#"!gPb6:Z"w`qV   
  l'1v	     rf'L  
    `F	  $ ;  ! &7! 4'&#"32765	+5223276767!6Ӈ퟈v'qr'q')BQd"![(1'&!f;{$%ތH}|Gfm"|H6KZ!jdWn   XF4{   4   #"'&76324'&#"3276	+5223276767!6gߗ!]^!!^]!B)BRc"!['2'&!f;{&ڬgFqqFEqqE6KZ!jdWn    f2 " B   203 !#"'&'# '&76!367"&'#";6762327654'&+#R""ZiZ$ !N! $ZiZ""pP@$Zaaa`[# T #[`aaaZ$!""ON!"wxxv!!vxxw"    X{ ' N  #";676762327654'&+"'&'73 !#"'&'&'# '&5476!3767625x=??>w2$B$6u>>>=v9%B%94;
%B 6ʏ55%B%wTVVU				UVVTՊ윉霊  t
m&  '  F' `	&  '2X Y fXG&       X'    fV\   !!# '&76!2.#"/wu}jks#3[f87ID    XV5{   %!! '&76!2&'&#")؜/XUVUIJIOTSIL\2WXRT     7*   '''7'77'77_x_xjix_x_[~}}|}}~} 1Q /  "'&'&'&547676763!67676762#]	>^	>f   F   #&#"56763 Jg_RX$[0L  &G 	  05!#3$ez &G   527#5!&z  	M   !2%$'$'&E24HӘh{t\q   rl   # / ; G S _  #."#> #."#> #."#> #."#> #."#> #."#> #."#> %#."#> cc8cc8	cc8Ycc8bcc8cc8bcc8؏cc8FJJFIFJJFFJJFFJJFFJJFFJJFFJJFFJJF r-      # ) /  !53!#'7%'%'77#%53%RR:zV!z9yo`yoJ@>@A@¬@yoyo zV!zRR Vvk&  8u VB&     0      3 )#535!327654'&+=Vy6::5zXujjuX»-1][0-         3#32#!#3!27654'&+uufO((('P` XOOX` >B ?;!          654&+327'7+!! zpL7uj`vj dl_c~:L~vc~    V^{  )  6'4'&"37'7"'&'!!67632<==>>=s*%DTuZZJfJZZuυpHcTTUTTU}/.b
b./}        @ 1 /03!!!#\2N      @  1 /03!3!t`:}   :     !!!!#3!\B%n#D  *  '`   !!!!#53!'TQ?     f !  !2!#3276=4'&'&'&#!!!!=
feN<x>=$$.%\wu銊#CC77#     F`   !2+5326=4&+!!!llllͳ>fLLfQvwwv\\S`     	   3	!!!	3!#!'c22(SSVhhAuN    `   3	!!!	3!#!',{f{,SZZqq9DWsW6    o(' z      do${& z'       l   !!	3!#!Z(?hA|N  P`   !!	3!#!f"Ye`{9D`     l   !73!	!#!{IrX{~CQc}N       P`   !7537!	!#'!ffn"ne`a耲9g@~`   0  l   !3#!	!!#53ZrX?Sh|N    P   !!!!	!!#53fF"er{9g`    2     !!	!!!QZrX?h|N#     (  ~`   !5)!	!!Nf"e{9g`  t   !!!!!!!!8#Ay9  D`   %!!!!!!!!gfcf'`V        !!!!!!8%Ny9      `   !!!!!!fcQ}'`V     f	 #  !2!#3276=4'&'&'&#!!!!!
feN<x>=$$.:wu銊#CC77#N   F`   !2+5326=4&+!!!!llllͳ>fLLf/vwwv\\S}`  se ? S  .54>323267#"&'#"$&54>7326%>54.#"68aH)9UqSN}aF-6V?K/>e3.x=P[Tفq[9kR25aVNf (	- )#-+0qXBtW22Tp{:E>+<9.t{EwqcL(_fi37pZ99Xl3D|iQ     qz ? N  4>73267.54>323267#".'#".>54.#"qP9V8*LmDJ'D25jiap=hw(b*6W&%-8%9d_[0-]hvEuա`)%&7(؜X 5WuCK|W0JYh;]sA9hY{K

&%
TJBFG0D*`W   fo\' zs     Xo5{' z       
j   !!!!!!x`#A#  `   %!!!!5!!gij      <    F` 	  !	!0!f- f`uq         	3#!5#535!	TT`     F`   	!!!5!5!5!	f- `u??     '   3!#	!	!	!<nmGF#A%  
`   %3!#!	!!gl{{lb=#L   
   !!!!!!!!{8`#NA#  `   %!!!!!!5!!ff7ij}     ;   !!!!"'&5!3!!he$$.l#Aywsoe@7#9   `   %!!!!"'&5!;!gUQf$f[V(TKh0+          #"'&5!;33!!##踾he$$.ywsoe@7#E9+y    `   #"'&5!533!!##gUQf!n[f[n[V(TKh0+ټ          !2!=4'&'&'&#!!&
he$$.ws5o@7#     K     $ -  676! !32767# '&"'&=!%!&'&#",hgz}|{|}y~#C39aa:@##G7϶.NWcS?rMM  
{  $  6 !  !3267#  '"&=3!4&#"k %"=q}tS_w`hf~~CD010F]Uf}un      0  !&'&#"676! !32767!$'&"'&=!o9aa:W,hfz}|{|}yJN#C3rMMrA##G7f#-NWcS?   
{  )  4&#"!6 !  !3267!&'&'"&=3w`h %"=q}JI rtSf}unf~~CD06h0F]U   = ,     	k'u     F'      f' "  32!#3276=4'&'&'&#!!!!cfeN<x>=$$.+wu銊#CC77#!     F`   32+5326=4&+!!!llllͳ>fLLffbvwwv\\S`A    6Vi   !!!!676!g|wBW'#V[7-     +V?`   %!#!#6765!g@Im`*1FpVB "wf   f   %!#32765!!!!!N<x>=8銊#CC9     F`   %+53265!!!!!llͳ>fLfcfwv\'`V   Vv   )!!!!!!!8y9NV   VB`   )!!!!!!#fcfg@'`V}V        !"'&5!3!!!!:he$$.l#Vwsoe@7#9+d   `   %5!"'&5!;!!!0UQf$f[V(TKh0+  V   )#!!	!!!9TVD%NV     VD`   )#!!!!#g@{\`0}V     O   
  'z'4    +@p ]1 @ ]0   X='    @O ] 
  'k&  u  +@p@O /
]1   X1&   j           X {      k'u   X
F'      @O ]1    hfQ   X
{   hfk'*um   X
1' j   n     	k'u     1' j     (k'u   d$0& j,     y   YH`T     O' q8;     ' q       k'8u     1' j      ffk&  fu $+@pP_ / ]1   X'1&   j    +1   ffa   X'{7   ffk'fu}   X'1' j   ~   yk'u   f1& jL      ;  O' q;   F' q     ;  k'u   F1' j      ;  k'u   Ff'        k'Lu     1' j        	  !!!!!=%\#A    ` 	  %!!!!!gQ`   k&  u   1&   j    :E   !!!!+532765!#3!\Bfjnͱ>i(!% sx5,on#D  *C'`   !!!!+532765'!#53!'Tgjnͱ>i(!Q sx5,o   'f   !!#27#	!	!	!IN1mGFf#w%  F`   !+52767!	!!gmѳ+0l{{l;Isz"'a=#LPG     '     	!	!!!!	!!_GF_Womqdm      
`   	!!3#!!#5v{{TULJ3b       ] 
   3#"%476!3!! '&z5::6塒s-0[]1-ju9+uj  Z  1`    %035#"%476;!!"'&HP'(((aufu !;? zOXXO      ! /  "'&476!3!32765! ! '&'#"32765Ӕ<=kl<=ٟ, Tjiz5::8sj@<sjju9OPPP
ʛ+7==-0[_/.TQ    Z`  0  #"32765"'&'#"'&5476;!32765!˃P'(((EC%% ߇%CKHq^kuR6(QP)6R~ !;? 89k'u )a/.XdOXkS==Pm̎w  8 2  4'&+5327654&#">3 32765! ! '&mSTGG~]^rl#EEON=G`fB=f45-.]V^*)  `aTS"'`_B08PL
ʛ     { 5  32765!#"'&54'&+5327654'&#"567632B0IR)6R~噄C>v|u2987_;<[ZYWtt87l7?p5'=Pm̎wzh<'%",*$# HGa@??H   Vn '  )4'&+5327654&#">3 !!STGG~]^rl#EEONf45-.]V^*)  `aTS"'`_3   VY{ (  )4'&+5327654'&#"567632!!C>v|u2987_;<[ZYWtt87ly~gR<'%",*$# HGa@?pay  6	3   !676!32765! !  h|wBW'<=kgA=[7-OPPL
6=    +v`    32765! '&5#67656)PR)6R~(~m`*1F`mP==Pm̎wwB "wf 	|    `   32765!#"'&=!!!!6+NR)6H~~fc`mP==Pm̎ww%'`V     f   !  76! &#"3265!|Sx+rx>{Vctoˍ恈U     X[_   325!#  76!2&# w[Hɢװ!3ˏw0Pa    
   32765!!  !!{<=kl<=`OPPQ
6=\#     `   32765!#"'&5!5!6+NR)6H~~inpM==Pm̎ww R   n{J    ^f   36! !#3265!^f'N<x{#K1#![    qF0`   36765!+532765#q(ͱ>f&&E $uY.%L%I   ^  
    36!	!	!	!	!^f)GFom$#K1%[  q  l`   36765!!	!!!q({l|E $uYLb=#%I     ]    3264&#! !	!!#!=pzzp|1o_mlf%}w    V{     "26 '!!6 !	!s{{yNf?!{l!w©@
Mb9Im           ;#"4$)!!!!!#!.Jiyyi'rgۃft gZXU5z.    ?{  ( /  3.5463!63  !3267# '&'#;#"4&#"?%U~?cx=q}Щx"~MO[[O_w`h1jf~~CD01ngH@>f}un  ff 4   \Vy T   =   :   H  ` Z      l   !7!!'!!!'OEdrX?EODf|NM     P`   37!#'!!!7'X2I4_efٖL2F4[g``Ζ   ^f	~ )  36!!2!#3276=4'&'&'&#!!!^f'
feN<x>=$$.#K1wu銊#CC77#[   qF` %  36765!!2+5326=4&+!#q(llllͳ>fLLfE $uY8vwwv\\S`%I   f	 '  !!!!2!#3276=4'&'&'&#!!!!8
feN<x>=$$.9wu銊#CC77#y    F` !  !!!!2+5326=4&+!!!fcfllllͳ>fLLf`V8vwwv\\S'   v   !!!!!!:#AN  B`   !!!!!g`}``   1  >5!.'#".5!32>7.'"P/[<=~5IR[1X[+Li>51./l*	U>D M]S%-24      >   ) !  !54."!!%$9X|X8:=6]S%&S\      6    %  54.#"3#".54> !!!k4[EFZ57Y?ڙRRוPBqS/.Kad_J- CΌHHޗ =   -     !4."!5 !  !!Y8X|Y9$ $'\S&%S]B1ü =     >   !!2>=!#  !:8X|X9ZIؐ[` \S&%S]K6=       P '  !!!>54.#"!54> P;^v;.pY-lngQ0@dFEc>L,Rwm. )JkcVe74\{Fsw|՝Z\        	  !!!!![         >   3 !  !54."!%$9X|X8:=6]S%&S\    :  <  %2>=#""!4>$323##".4>;.4+7+-5Nl?tei:PcbOR_Mx1R=0R@AU4MfL"Cdcot;<xq5^{I  6  %  "32>5!!! .54>;FZ55ZFE[4ZPڙRSه`9YkdmZ:<a}Bu TTنϑO    /   !>3  !54.#"![3sB$9X>=W8q]S%%N|W       d   !!![`EN        32>5!#".5!!!l'A0(@+[LrqL[`K~\3&S\
LL
  ~ & 7  !3>32.#" .5467#2>54.'~ZAS^Qja,,*vӟ]VQ0,CjmH#)i03<^A".0l_
_َ|iclW_g76bRYj@Q         )#".5!32>75!3sBْI[8Y><W8ZK]S%$O|W    	   3.54676%!7C{xu^sBZ3NUdH(Z\YM=  P 5 D  .'#".4>32>54.#"!54> "3267.PkZ,U,0Z-[a*`^WB'%?T\_+`X)-@dFEc>L,R""1]*3[wy*X03f0BH 3Jb|bJ4!>8V`Ve74\{F:>|՝Z\|!6!&#+2    $     !4."!5 !  !P8X|Y9$ $\S&%S]B1   .  H  &  "!".5467>7!>33!P`8cI+EQ>EwGx51A3 "?[Q BeERیlM4M2q&)-_   =   !32>5!!   [9W>?X8h]S%&S\ 6=    u) :   .5!2>54#!!2>54&#"!&454>32)KJZ<aa;I.C,ZXWZPosN*9"4V="kJUs<mQ0(DX02D'M^^rfl89mc-TK?EVh       2>=!#  !h8Y|X9ZIؐ\S&%S]K6=    u> /  4>7'.#!!2%.#"32>=! .uD{h=GB~2f&>bE%AdFEb>[LRvtƕ\ m<qhVm?4\zGsw|՝Zc      /   3   !4."J8Y|X8=6]S%&S\  Q (  +32>54.#"!54> Dw]H1f'GfB @dFEc>L,RwrƒTJEtV;m^Ve74\{Fsw|՝Z\    $  O   !4.'!!54>2*Ib99cH*:hȯh9CjP65OkDkgD!"Ehj    u  ; % <  4> !!!>7>54.#".4.#"32>uK,R;^v;.pZ9D*EY0]W1c#Dc?Eb> MfDnȘZ\m. ?:
0J4&>LME;Ve7+H]1!1#@]98}     =   !4."! !  !!8X|Y8$ $\S&%S]B1ü =   8    $     !#".=!2>5!!P3sBْIZ9Y|X8ZK]S%&S\+   l  :  32654.'.54>32!4.#" .5!DhFjy0L^.kP=ĈɁ>*C/*@,3LX&vKGLBmO+eZ0C-BrtZxEEza'J8"+:!8B&	NpakJVr      /   3 !  !54."%$9X|X8=6]S%&S\     u) 0 @   .5!2>54#!3.54>322>54&")KJZ<aa;w	MstN*9"4V="*C-]Y)>)kJUs<mQ0(DX0$.9#cl89mc-TK?EVh2D'VU\O'B2         )!!![z     -  } 	  +  !>4.'.>75!!(aT89T`([)aS88Ta(ZZ[^]CrrCBrsC	OҐP		OҏO
       )  ,  "&'!!!5#34>32 2>4.#"@m0IԋדLM3V~V34V?>U3||4؍CJIF~`A"!B`~eG&&G   ee 2   Z  * 5  ".4>3!#  !!>54.'"23zɐOOz[^dgsf9T`([)aT8,9>>'N?'(@M&WJx?	DݗO*Zo?CrZ<W='
     ".4>3"6]F((F]6+  +t-NhthN-$/60#     tX    !#2Z`    {f   	!{fx     %   #4>7>53@6#7cU@5!0^ 4C&LsL!3C&ToF   R   !o#     %  4>32#".'332>54&#"Q~@oG%NwQ;`F-""E9`R$x͖V%LvR6fP1$B^9	92@d}=   Qy%   3!Qi@4     ` %  %#"&5!3265!3265!!5#"&@>eD5/]eD 1$]eDxjil6jR3&`t='o     V{   !!!>32!54.'&#"!DId
*S3P7V
a^HK_=#J-TyL   QVy 
 "  "32654&!#".>325!!!rgllghmmCi]q??p^iCDwLc\X לW\c      V{   !!4.'.#"!!>32!
?*2P8DIcVK_=$#'-TyL`b]V         !!32>=!!5#"&5!M=73P8BIdD` ZX+.TxK0a^`     QVy 	   "326&#".>325!!rgllghmmmCi]q@?q]iCDwBLc\WכW\c        A 	  !!!!!Db  L     V{   !>32!46.#"!!BJd"7+3P7`b]V
$QNI6!-TyL/   V{ * :  23##".4>;.#"!!>"32>7^Y{`}CKmCCi@@[k0TyN%D$Xkb"&(&{Ozh`.&NvvO'IiC-UyK/
1H/	 %A4     Q  !  #  4>3!!!!#"3265F1gqLDCR.lghm`ՕߔJ'%t͘XL .RoB  V   !4.'.#"!!>32
?*2P8DIcVL`>##'-TyL/b]     VG`   !!!hTD 
     VE 1  32>5!!5#"&=4.'.#"!!>32
?*2P8DId
?*2P8DIcVK`=##',TyM'c\RL`>##'-TyL/b]    Q  *  !!# .54>72>54.'#"xYh$GόH.YW&>OPN=&-!ceuG EfzΗUUzldSuJ""JuS<^NA   V   !32>5!!#"&D
?*2P8DId^BK`=##',TyM'Nc\       !4.'.#"!!>32
?*2P8DIdVKa>##'-TyLc\     6J - ?  !5#".547"#".546?!32>732>54&'JIdSf:/S?%+Ta0)/13 M{W.=*?)2Q8]c'F5c\7kfY$?W3%O*M&9 $h,L9!,RsHZ/)[cj  V{   4.'.#"!!>32!N
?*2P8DIcVK_=$#'-TyL`b]      ~$ % 8  3>32&#"!5#".5467#32>54.+@u(..ArdV$v~BIdWc6-*UM)?+2P8Bt[
($``yF5J-Vkc\<vrflj,N:#.VzM@kM*j       !!5#"&5!32>5IdD
?*2P8 c\K`=##',TyM    F`   !+532>5B8->%`3XD       32>5!!5#"&5!
?*2P8DIdBK_=$#',TyM'b]^      V{ 0  %3!!".54>7>54.#">32;;=3W@$"FjIAlM*1F-&LRX1/VVZ3rE=o$7U' 3O79egqE>qop>8N1!7)<
7opZ      {   !4.'.#"!!>32
?*2P8DIdV
K`=##'-TyL`c\  
V` -  !".54>7.54>7!32673Sf91WxH.T?&2&V9I)<6128^E'
 ,G[/AM3Lb7&POL$)ID@ 3A>F   V^ %  %#"&5!3267!3265!!#"&@?dD2$]cD2%^dDzjilTqC&_t>'Ln   ZVD{ . E  %4.54>323!!".54>7>4&#">).4.MkjL7ZsxsZ7	15W?#%:F RU*@,H]60VRQTY2Xh:7opLti]PD 5L/@kWF4^_,=%,*+2:%*CfRF      { "  !5>5.#"!!>32!`k&A12P8DIcTf82H-f1\F+-TyL`b]<vq5urg'   `   !32>5!!5#"&D
?*2P8DIdK`=##',TyM'c\   V   !32>5!!!#"&D
?*2P8DIdK`=##',TyMB Nc\    { -  )4.#"!5#".5!3265!632 2$]dx)SLB1D 1$]eDw)SLB1H`t=٤,Lumm`t=',Lum  V{   !4.'.#"!!>32
?*3P7DIcV
K_=$#'-UyK/
b] ZFy J     `   !!!B  `    V -  )4.#"!#".5!3265!632 2$]dx)SLB1D 1$]eDw)SLB1H`t=/N,Lumm`t=,Lum   V{  (  !>32#"&'!!!5!32654&#"BDj]q@@q]jDM8oghmmhgtԤb]W؜W]b 66 U Z){ R   ?z1 + 5 ?  !.=!".4>3!"3 4.'>1.RqNKqR/E0La1l{CB{nDNqR.a3A''A3R)Ic91`M>eyW;#u	#<Wxd]uDb%RR%J6Txy!*#~o> G    v   !!5#"&5!32>7!HdD	+R1O8B  a^`@J^=$I+PsH8     `    !!!!EE`}}     dp   327#"&'dGHFGVV&&%'  _*'    3#3#_2  .*'L        *     5!73#3#K2   *     3#3#'#5#5!'Ȗ2   _'j   3#_Ȗj'j        *     3#3#73#_} e!      !!eD^^    ~C      #5#5!'    `     3#2dȠ   `   ~:' & t i1    3#7idd   _C'   3#_-p     oNq   !!otq  ~`    !!~vEȇ     8/(   !!f(     3#       3#       /`    !!!!ff`       `   0!!76!#"fdF77 ^z| KJ  ~*   #5#5!'       '`  5K
QX 8Y1 //0	!!54>7!65!,7!-M9,s^7I,'<)M@\ZL%@(CrRH-,   X  `  6 ܴt
o]1K
QX 8Y 	ذ/0%4.#!5!23!5-O9{{Il9KL,.Vr   XX`  ( 
1 //0%&'#"'32654.+53 _G&dn4>M<q\/H>
gKyWYhApJ   X  \`  (	 1K
QX 	8Y /0#!!5!\rr      `   <pj
]K
QX 8Y1  //0!!4&#!5!2Sx
7.J[t<    `  !K
QX 8Y1 /0!``     X  `  9
1KSKQZX|/1YK
QX 8Y 	/0#"!467#5S(6FG`@shC܊        `  7	p]K
QX 8Y1 
//t ] 0!4&+!! Tw&Zrm`    m  31K
QX !8Y 	ذ/02654&#"5632   nnIT0KkT`,B   P`  $1K
QX  8Y  /0`w     X`  ( K
QX 8Y1 0!4&#!5!2j:8 ݡ=     X  `  )1K
QX 8Y  /0!2#!5!26&#!Xh{ˉ^**^{h`@kk@"  X  7  F
 	}|KSKQZX  @8Y1K
QX 
8Y  /0!!!LmKkr?A     `   - 	1K
QX 8Y /0)! !4&#',Tw`|m   X  n   8"	 !K
QX "8Y1  //0!>3 !534&#"!674&XX;o5S4'#a\H`+mm}$C:_B7K;p  `  $K
QX 8Y1 0!`L  X  `  * K
QX 8Y1 /0%4&+53 !5RA rA>  ` 	  H	ܲ]ܶJ
<
`]1YTid]K
QX 8Y 
 /0!    # 4.	,	AU`%.0^YxD     X1`  =>]1K
QX 8Y 0!7!>JP1W9VaO)7pzh.[B    `  5 1K
QX 8Y 0!4&+327"&'&5! ^mPV|e)V$ZGza#H     `  ? 1K
QX 8Y  	/ܶ0@]0!   )5!2654&+27"&'&57.D 3>h.b`핰6'!G   Xc  1 1K
QX 8Y  0>=!!4'&'8>)IGUUOc[*"lj]\ u``   C  `  7 1K
QX 8Y{] /0%!65!'!5t8KI=6<Fs2(ݛf[#   H_  
 I
KSKQZX  @8Y1K
QX 8Y  ڰ/0!%!5!J36.r@  X  `  %1K
QX 8Y /0!4&#!5!2nɁP!995^  (   `   f"
	!KPX  881/}/Y1K
QX "8Y 	 /ܷ0/$ ])0!#!>767!#>76!J;\J"L*4 WHJcVK @-MGYc?/c܄P6. .P]DEE     `  A1K
QX 8Y ز/j[]0!4'&+ '53265#5! 2._YO>b2'`iAZ[522]SOux    `',  ,     1`',,  0   P`'0,  0    `   !#`     `    !#!#`|   
" # .  #4'&'327653327653#"'"%'##5	b 2
8^e Dh%w`12j{.8+>\VD&&{7F    
. * 5  7"32767#"'&54767&'&'476'##5i$V/!LT9F"@>8O6.N@yF?C)8."dsh%w`.$$-*F>]MF*!#^C'q{7F     |      !!!!!!3#db           !!!!!!!!3#b       )30d1u      
   327654+53362!2(&1u<KDC3m%T2K\4'       	  !3!!1di1u         !  54&/.54$32.#"!*D@^N ]yfQV`59@jB--K>9Yb(*BCOF.\4:bR1d    (   76767&'&767632&'&754Jx%E#pth@GQ6:v{ۭ( A}sOQ<,*.>\#E KO?   '|_U     '}_^U  `'} q>q   '~_  U   $'} &>r         !!f  ^'   bR',p   ^R'   ^L'   f' #[    f   $3 7!$'&54767&$3 gZ-ΤKȜfT_`"@yj\ƚ޳}N) ?&  'q[    }R   %676'&'!'I>qOJ.QWy3˽.7 =   }']   &   !6'4'!! 76eI4f2X75gytbe DA  '_    
` ?  654/!765!325!#"'&'#"'#"'$47!3276:@f$SG%f$B}f\HCqQ:
#HFVDNx`iifl&5nNY(htz@J<;6T2_&qYHa$Zv@$eUĴΪ):C   
`' a    
 0 =  %4'!67632!#"'&'#"'$47!327676%327654'&#G3J$hw縮n=DNx`iifl&5nNY':D~v;51KnCZ(--{i3c`[v@$eUĴΪ):CDh2/7O2  
'_c          327654'&#)!!67632D~v;51KnCtOPfw縮 2/7O2 Vei3c`[     'oCe    * (  67&'&7676&76%7 7!$'&54,0.20YwN]0.~xgZ-Τ'a78U &-P1/7 3QvgYN    7'g         #!      'ro   kH'~     ! =  &#"'5327654'&'&767665!'$'$547!32761;5P&#fWRB8D-U <N@ KRRIfn܌ff:}seys+ Un*'y	))/.P'+aO{XK5".;!'    9   %6!%$&7!76Nfbt@fGIa jÐI`TL!\fr"-4  G  -  654'&'&32&!4767'47632# " ( 
;'~%x[MObx[)4D 9EU?$U50EU  ~<'    bR    "327654'&'2"'&'&76:U: 7()A/K\ԏx묌&[+,ND!*-*1PliV)9N  `  ,  %!76767"'&'&54767672%&'&;4`Y]גּSe c]bm3/'*#$"z̐JS 5@OQT4,8*rR)'-'   $ 3  %#'$&7!327676'&#&'&'&7632!&hYmŋT@fF3}|I4@is[zYLAV)j\eN+#B^`*= .9s8).GE!
$5p`cK    'r    $    5%5%HH     $ # 3  7&'&5476"/#"'&5332767654'&#"$TB77K6;31LVgu87

!+:[d*#28P-/IU!ya-

	   $    5%%5%HHP  $   5%H    $  -  &'&5476"'&''5276767654'&#"TB77K6;# *-9ox

!
	8]d*#28P-4({	O		    $   5%H茂    K (  '&54737676537654'3'&9H`,"$.:<$oGQ#DA2omb}810RY$6s9It6U	!       4&#"32>"&462k?./>>/.?柟-@?./?@栠   y   72767"'&'yj/N<G;uN=wTCc5:FW{Y
)G4$5{;   =     $?  -  '&'&547/52676"327654'&TB77K6;# *-9ox

!
=	8]d*#28P-4({	O		    54   373óF    #   !!d   r 	  )'!r%1ruM !n       !'!767!!"# %1u-+k+!dkզLOx"!nb-pnU?>        $  !'!32765!32765!#"'"& %1r3#(' .# 'Y31l5WY9!nRe6L2o'*#6yCD   >* *  7"2767#"'&54767&'&'4%6:J5yZp6fcX~VI|epdkAXH,7* @'"%
 3@Q.$J!+ %}p}L 0:?yE  `$    $2765&'&"  '&477t 34'b'43Zh}}hZBiixx2     K     !'#"'3 %bQ#`3\S2 2          677!!''!q2]9rR;;Rr9]2ze:^e        !66!!&&q2]9R;f;R9]2ze^:e   A    #  "'&'&'&76!'&'&">[caI[
%Z]"!5U)% &O%<V^S~TvA24S(#-'&       ]     !!!!3#4b      6767654'3gr(Lmhaj{PO``No^H  X9
    W L 	  !!%WgppgooUU  ^   '$&7!327676'^2or~@f3HT͜2@" >MM \^Z[B/GXqg   kH  8  654'&"3227$#"'&54767672!$'&547!$2+/#04ٝ1JrbbmgQ=!<hfMRfUO&;1(b2VT4,9*9-YΊnع2> F   3H   h!   7&'&567632&#"?pN650B>F:*?m!"(j+(}	04M    ^'L   ^'   ^'   ^R'')   ^'   ^'   ^'   ^'   '} 8[   'lP[   f'  2[   f' [   'V[   f'  [   f'  [   }'L]   }R')U]   }R']   }'L&]   }'6]   }R'g]   }'6]   }x'6]   }'6]  (/'L >_  Ur' >_  &')_  .&'H_  &'_  .&' (&_  H'X _  'X _  'X_   
`&a  ' r 
`&a   
`&a  '_  
&c   
&c      &e  R @&g      8  654'&"32#&'&54767672!'$47!32%6$2+/#047C^bmgQ=!q_&?fI.O&;1(RT4,9*9-Y}i&;	Mpv1f/'    &   &  'r~ J'   &  k J'   kH&  L~ kH&  ~  1 -  ! '$&7!32767654'&54767|ϒ@f3UgN2
%bDe+$?.\^Zc:#=$$d|?O#! 6 .*Z2]     	 .  47!3! 7632654'%$4767!) '$?f3QX*2uR
'`ptqiN eГ:[^Zc:#R\M6#!w*6d3>T12]=? 1&  )@k &l  9F &l  F &l   1G'<     1G&  )@k 1G&   1G&   1G&  R 14&   'm   9&m  2 @4&m   9&m   ~v<&  ' 9v  ~<   #"'$47!32767654'!<e}걌(f*7N8=8!efg8-",ckJ6_wޤ   ~<&  LE% ~]<&  ' )] ~<&  q     + 5  654#""'&547!327.54767&# 32764&cF1)f~f3%HN5Dx0NW:N^|84,r{(J<*iJSS&:K5"S#4Dr`& 9Vq}hCFH 'q&[    `r' q>q  `2'x 7%q  `C' n/q  `' q   $r   $r' &>r   'r   bRp  #    r                3 '  &547632&767#"'!'!)l\TXZFY$1iS %1u %'fG=#"&  QOG-!nHX8     >$  &  327654'&"327 #"'#"'&57*>>>>*B_5C**C5_||R6JﲱJ6R|ڱee&      )    36767"'&547676&#"767"Fj7b[ A-B74_cZ.rK,mXv! #AM311 Dv              A      b/ 
   &"326 !   !  ijj|{j@'&@mstm       
  !!!%Tn[

HH;      	  !!!!l!l"3M       	  )!!!!!l     	  !!!!l!CT         !!!!!la       )!!!!l)n         !!TlXh      	  	!!!4Zl=qR           )&'.46$  264&"~52425nnn7oo7ٜnnn       !!f+   X     264&"      :R::RQzCꋋ*T      ;   	!!;Y|Q	          3!!	dB         )!!!fcfd         !!!7d    ^  b  !   2>4."!!&'.4> ":F:"":F:_O%#s煅s$%ZK--KZK--(  6ظllظ6    V  	  !3!!`d{/`
    X      !!!!#"&7676! 54&#"3vR['F4o;)9t:d)Ģyn~}w>Qc     	  !!!!!UU  d        	  !!!!UU+ 9           #3264&2#!!WKGfkG	gdpv          !!4'&'5n'- > tC7a3       ![+-T       B   "  34$!2>324&#"!%4'&#"!f-3)YQRH#CBRs-kx&"r¼v;_c~          !!!!!!45fD D     }   !!!!!!!!!!5f)f4DD oo         !!!c/ dd        !	!oY}GwH-+           #2654&+!!2+or~gGXH, dRNGRd9d      X   !#!!3Xf+D    X      3#"!!!"$543!!KGfkSh29pv 9d        !!! +         !!oQ -      X  @  '  !!&'.467675! 2>4."d&"uACC<z'!)ss*i":F:"":F:7[\\S?t	6ظ6uBZK--KZK--    X   !!#
+      X 	  )#!!!XfF     X    !!!!#FTF9 + d    X  @  %   2>4."%!&'.46767!":F:"":F:&"uACC?w'!)ss*fZK--KZK--7[\\X:t	6ظ6u   X  @  )  !&'.467675!! 2>4."&"uACC<z'!)ss*":F:"":F:u7[\\S?t	6ظ6u  BZK--KZK--    X9   !!v    7   326=3'&'&/#3_$(46Z##wԩ
@9JO
	f   {;1   !!{1   wf   3#'# ǲf  Cl   %'3!Ci    7   73#''&533276bw##Z64($bf	
OJ9@    Cl   !3i~    wMC   !!w    ;;1    3#%3#1  X9   !#Td`    X   !3'dX`         !!!!;/w           !!!!!!;/     f    !f        $ ( 1  #!!53'#67654'&'#67654'&.Ңub]wBAmH*88)m(---"
HS`! UU|^[XU +WV* #EC$     X{    4%5 73263 !4#"  Q$eT MMsf9   X{ (  %&#"# 4-654# #"7676!2632ȶ4Ck^q:$MTb=,N|cxfnpAP\{z]A0"q     X{   $! 63247&'! !AZ-vt{ha-xYqyz    *,|    ! '&'%325'%Suk_`s(|p{˹p32  V  {     !54''$64! ! ^R1Lqb{~sKh.
  Q${ )  %$7&!"!"4$3 %676&'$&76<$TaY/Qri:0:%/8HO	>W
ܲQ_     Q   % !! 47&54 3 %e9\A&=y~]y<D]a     W.{   !4! 4$! .815e hӡ    W.| "  67$!4#"'"'&#!232>%>5>! sؠjpn   x{   6!4! &4%6b,Q|     )${ !  325&6!4#"! 67&'&8\]TNVU{Ŋ`޺k㕕RiI   Kr{   7276=$5725!%&'jd##IWh9	zC$nCphTU   MP|   &5! !$5!! 6t4;_68izA*haq     MP   %$5!% 67&5! 68it4;CA*ha    {H (  "''$325!765$7%6'%QD7M&ү}9y V!#5HKjjjoiArGs}      &''$32=!325!hp}fN#Ѐ|:q8<Ciiikl>    /{    !325!%&''$67&'! 28o8Pr~es6;~Sfno(?Bkf?nBk   /    %'$67&'! 25!325!!"l~es6;~8o8P#Bkf?tJkkfnV?   2,`   325!!#&''.5432325recλ!&`6RV~uЕM  Q   % !! 47&5! e9\@;h~=j	pDy~\xox;2
2A   b $  $&%6&%$! '&77$54'&v)ߦyǸ`"sh_,S#">6R,2?9J,Ri`Tc&  T{   %%$35&#"%7! ! z6nZYJ*>_"VӺ,2rwe!;GX<     C| #  3$54%676%$'&7̌-(*+]|DbZ*KXR_T
    i  &    4'$6'%! '%$
s#UzHGnNNVa
%!ifƊX=,2r     Zz (  67&5%$5'&746!4#"%${l4: /9DPM"\Z@D0Xj*MSPTt     lL    %$4! 5'$4lV*rk{hs[;
h^B^E   b +  &%$!632'&'&%$'&5 7$y	%l9A's`VY t/(al1S	Ee<,QV0*"%Z<i7/
    X-/ !  	6'&! ! ! 32?632l$p3)vwאr֌3)'"ixF IC'@@^   ,   "'&76'&'67'ҟ,
W`k^H5)F2.eWs   P     !4#"! ȆN=|1

>   *  &W  A        %$ 5 '&	[_0~9e}      %$ 3!5 54	[`f	G~9fP3}      %$ 5 '&#'57	[_&&&&0~9e}####       %$ 3!5 54#'57	[`f	&&&&G~9fP3}####      &7'6'&762'6r3217*9{[l僐,.--Tbڂf    8x    &7'5667&763253% 2AKA|ۺf@TwdD:0;QF ,    &'676'&76'k`W
r,sWf-2G)4G^      254&'&''&7767r! }tc0~ sa^:",SV    O>6 2  %&'&= %'765&%&!2?'&'&w?f8@:m{]E&NWO+Nߠ_a?)sP/k7hmu~Sq   |    &5! &'"66xF#6'poy^eD(<    |'L  L   }   ! 54'&547632&fp:]ieejdjixz;kS    0   4#"5!  $! 4 [jGKj4g\?zN.i.  x   &'7%!#$'CO%7Xђt(bS   .  %! '&'%! 54'&'&'&#" ! 3232763 Ssa`Y9>',+.6H5)+*9=sY4a]kh]jHjiw    E   #|    X   !567&76$76737jy%.Z?^    O 4  76763676'3!#5676'&'&'&3&76'$CM=!JXY[x5?<Tn/,:@(TLB{H9;Ed>Gb*gW/A67	*ut7.,    U   3533##5#zۺ    J  P   *Y* 
   !#&54567'6&,  =DAA566      "327654'&' ! '&4760S<:NV1<Nco^qo{X`Wp`~|Ĕ     4 $  !764'&#"676#"'&'&5476! pHlFc*1nA9CqΆu8pH/CBe+V4yru     @\   $327"'&!2# '&5? 5l~^8
߄gϦt|pH@\`u)ͥ}Mp    2 7  !#&''.5432325!3254%$476232?'&'&,cλ!&f^^nrAH2m{oKJ(RV~uЕM đ"mysR0hmIRr    c !  $#$'&? 5!32&5! l$]|pYlMX
cm\HM  c +  32&5! $#$'&4767&567!'pYlMX
clQv]\V\HMe:^~Tt\V  ' :  0%&''$32=!3254%$47632?'&'&E#p}fN#Ѐ|:q^^nrAH2m{oKH(J<Ciiiklđ"myqR0hmIRr   X{    4%5"53263 !4#" Q$eT MMsf9     2 ; C  076''&7674'&'&'&#" ! 3232763 	767$y6b'RK# rd.&G,+.6H5)+*9(sH`&QT	PGG4+
Ga]kh]jHji'!$Vg'     v     '&5! 3250&6!4#"뫈*@TNQ?h `޺k㕕R  Z
i 9  4%$67&5%$5'&746365!%&'%765̬Avl4: /9DPCH9,x|U#U^tfD0Xj*MRUOJUk1#V     Z
p :  4%$67&5%$5'&746325!!#&'+$5̬Avl4: /9DPB]8;vQ4U^tfD0Xj*MRUP[KN
'  `    !  47#5!! 72 54'%4LD1W6J4{ZaxȀ  O   #" 54! 37!!j}t՝}ysd>r$[ܜ;f   LU   !4&#"&7&$32!FQHKa[DkQ[Ukԯ    TY    4 #"  32 % !  %!5!! ޚFI:,4H9#BB]    ;     !4&#"$4 !  UTc  .?~zD     2    #!4&'"&54 32!\:EW][oBPl?pϡR@     
   3>54&# !  !5!3  q}TutV{x.w)   e    %#   !%#!  )!-W*W?r&    	 Q   %!!!=Y    O      4&#"3>7#$ 5!63  ig4wCg(vQBx9>Yn2T5+   $^    4&#"36 #!!63   X]kc\í'yZ5B#OR(  c 
   "765# %"  !35!5!!fYo Cyיq]>"T(^  Y    %4&#"!46)!"63  jmitJPQsv<BPp&    L  "  4 #&  3 !"&'   !   365C)F,<>NqEBX_X_D2        #" 5!5!>5!a[=O~    (    %#  547#5!327!r}rtOcX=7>⒞u:l    Y   %! & 5%3265!!vQqq>@z>=ƶyQ'     Y   $ 5!3>54'7R=aL 5zNŷ     Y    .+3>% !#!!!  jkqH/<n   L 
 "  4    32 !527&'#   !  C+ G$>YX[VW_x@ 'Q+B  L    "  32654&'!#; !#!#   )  {~|l[]紺ڸiZXP     :    #!!!3!!KF=>;w    Z    %!4&#"!& 32 \Y81ikO   E    %#  5!327!`|>ho>v*&G}8r   O     & =!326=#  5!327!FZd@{B>vxo=߳QNx||KB9     Y    %6&#"!!632 sp0=9Cf   ]9   5#$  !$&#"  77!e3*G؇@Ws
_n     _ 
   "3265# #  5 !3!!ӎdRxn>ɃĿ{l-m   Y 	   4&#!!>'$#!!!5#!!2j@5^%RGĻ_QRi7G   <     #  !2654%$4 3 !.#"HlL lUV[Yt%ډz%#qff   Y    !&'!!!265!7%>4Y>v        !!!	!5!NqV;   $_    ' 5#!!365!_߮o]=UR}   Y    54&+!!3237L>Ç[J'Ѷ+  K8 "     &32656%$54632!&#"8كuiߗ;A9?JЋɪڜF     k   %#&'#5!;!.	Ng=K.ryOr   D |   !&$!;>5!|KZ>u4z0i>j_!%ٯzs'  1 	  2  "3264&"326=+!!#.546;5!5!5&632.?]:MG"PM#'H`]DkeYJ{N2f9ee:?M뱍ܳ{    d
   ! 7!3254 ! 
,.!:"De' T   d    '32! 47674'&5!>*IA_l#(kgE"0-7[5ye\wvAF   Z%}  %  %4&'326% !  5%67&#"'! bgr~t^Q>ԓoY{JBJklZM!-H(q     d3Iu  )  #"32! 476'"!.#'67&5!63 >0s8]lsc{MGJ2HlAPq3Pv~    d%t   ! !354#"!'! C)%6p+$"GЫP[   d%
t "  ! 7!7=6+534#"!'! 
?7]pDk~lU    4      6#"6&32! 7&7%(iolk?,+|U!qT4F|Iq6     d<t    #"32!263 ! #&! ͗j:m:H2F0S^;9p= Gn   d  t   ! !&5 ovt67M>Gè&$    d%U   # 7!3=4+53654'!$3Հ!ړ4ĳio   d34~ 4  ! 54#"!4#"!4#" !.'&'67$!26263 4jmrmXGQͭT~:rlce+dwjixdamp{`j,mzxn     d
 	   &#32! !54#"!5! :GX\4?ACx^
I,喌33m     (    '"32! )!"63 ?Y=$6@`hU%P(b8tV!   dt   ! #"!4#"!!263 yюzej^?7/5*{{   d
   ! 7!32+53254$5!
,.<pٯJJ'rppU     d%	{   ! 7!32552'6'5%	4'>o"Gᜟ&nb^PA    d  2 $  ! #"!5#"!47%3263 2k"#`~ghS6A<_<P	     (   ! !3254&'7!(6$4F!AÎq     d%6]    3264&'!%!
!  |p5FE/IDI#P>uON>w     <%C    ! 7!3254#"#4+'3263 C=<FT

G@!KDNNL#HЩCOrC;bhh  d%Wv  7   #"3!63 ! $=67326=4+5364#"! 㮧/Ʌйeo`Z({[I-*BT,ur?uV}zz"No]Rm xn;  d%   ! !25&#"!'!!F&%@'UfG%wnU4!F֯4<  d4 t '  67&5!2>3 !5&#"!'4#"!6'^vh2ZɸΚI(a}@=%*%ĳ    d%
d   ! 7!25' 47!27!
7#C@ZBTly`B4$ID*z    (  '  &#325%! !4#"#"=6'3263 OT4Q	YMEi{2]Mtp`"(,H4U^<hh>=
Q<zz    (   74#"63 !#"!! H^OcIqPOv>$r <d   d%b    ! 5!32+532'6&'!zTI`nBgu;Tގ(ܑ@ꚜ  d	    &#32%! !!UQ3,.JS3s#'@S/     E 	 (  324&'"!26;'&'54#"63 ! LJDZzaTy2~wTU\>[_".}}Q
=>ggd66	    d%# &  !!!! !3274.'5#"3!32u.,%7p?AgBIʦ||lFU     (    '&32! !63Ca=3'4OZ3Y	%o:o    2%     ''526'&/%7654+532 UJʣM:7Urk՟}Hk\Q2,1@W  d
 '  ! 7!327&'#53256+5325&$'!
2(?<12D	2gnKɷ˜UWZIZaJLvp_o  d
 '  ! !3254#53256+53274&5!
,.4";<1DxLt˩_WЄU}smVtzMn     dt    6#"27&! 3$'|GyxD؀=hfXz6;:Ɲ\8`[  d%
v   ! 7!32=4#535!%
*0G#oD?r"i     d%	 %  ! 7!72=4+53$!"7%	0+>"O>("#Hؾ/ٳКl     dw   '  #"325;54#"! %35# ! 3#3ܩƑj*.Ϯ1kkkQ}ݣ  d%mt  $  #"72!"'!5254#"3$!263 0=*N@蝗jh2do)M-A  d$rt !  %! %#$54#"!'! 324'!r	G^!5"8מqup,;[[Ʃ
r   d%
d   !3654!!'367'!! d4B`ylTBZ@C#7c*ݻ
@׸L    Z%}  %  >54&#"4 !  325&'%! 47$qh~t^Q%,oYxd$zFakl^Q!-H<q    eu   &'"'67&5! !74#"[ZCGDc}]q5d
A v3    d 1      3#3#3#H  24Z      4;!"4#"32JA{ntvFc~8з   
  '    	!'&5T#+   
  'r'W    
  '    !	!!M)#T    
  'l'v          %=5   l'v     k'u     '            	 
+    l'v     '     
  f'       '     
  f&       l'     
  fl&       '       r'       l'       rl&       l'      u'       w'       ul'       wl&       l'~        !!    {    !!3"|CNC     @   'Xǔ    @   7@3     {#   "&5332653짚L76M@vvp6MM6p    {]   #4&#"#462M67L@p6MM6pv   {#]   !5!2#!5!264&vv7LMÚ짚MlM     {#] 
   3264&#"462"M67LM67L짧@7LMlMM짧     @%    ''MOOOO   {P    3#3#jC  nd   !!d    {   5!{:     {#]   53533##5{ККК  {#   !###{:К1  
  	W'O     
  '~       	]'U       
'      
  '   !!!5+  
  'r'W    
  '   !	!!ut}))w+  
  'l'v      k   	w+pzsx5   kl'v     kk'u     k'         k   k+p    kl'v     '     
  f&       '     
  f&       l'     
  fl&       _'       r&       _l'       rl&       _'       w&       _l'       wl&       kk'u    {(   5(S0g   {a   3#{        !3265! !  yy6=      r'DW          3 !  !4&#">EF>yy=6    l'@v          3!2654&#!! !TMwiffix##ateeta    l'@v     k'@u     '       s     ) $'&5476$)!"3!jxiffiwMTate	eta s  l'@v   '     '       '        &        l'       l&       '       '       l'       l&       '     s  '       l'     s  l&       &j      {j   #"&'.5467676;#";jzLB@@BKizË\RRQ5@8]b8@!H@xCC '6       &   6     '\     s  'N      T  6    !# $5 !  "3264&6gL,_^ztlz zsltmz    r'@W          4 !  !"'!"32654&_,Lgj_zltz zmtlsz     l'@v    T6     !  4$!2!264&#"61Gg_zltz %zmtlsz  T6l'ov    Tk'ou         !63  !  %2654&#"gG1j^ztlz zsltmz   l'yv#     'I     T   'R       '        &  R     l'        l&  R   ' I     T &   R   l'!I     T l&!  R   '#      &#  R   l&  $    l&$  R   &j  #    {    3632#"&2654&#"{p/ѽ7e]@EYf6GC?D@C@I    {    #"&546323>54&#"ި/p{9fYE@]e>@I@C@D?CG    T  '       &     T&      &#      T  6   ! !  !4&#"L,__d sz   r'@W<         4&#"!4 !  d__,Lnzs     l'@v<    T6   3265! !  Փd_nzs   T6l'|v>   Tk'|u>       ! !  5!326_d sz l'yvA     ':I     T   &:  R     '<I        &<  R     l'=I        l&=  R   '>I     T &>  R   l'?I     T l&?  R   'AI      &A  R   l'BI      l&B  R   &j  AI    {   3#"&53326ѽi6?j6@JJ   {   32653#"&5aj?6iި@JJ@6ʉ   8  G   !!!r#+   r' WV         )!!=r   l'vV    8  G   !!!+#   8  Gl'vX   8  k'uX         !!=N     l'}v[     Q&  T
   8  *'\  T     'V       Q'  V     l'W       Ql&W       Q'X
     8  Q&X       Ql'Y
     8  Ql&Y       '[       Q&[       l'\       Ql&\       &j  [    {
   !!aqZC     {   !"&'.54676763!!"3! LB@@BKi ZRRQI5@8]b8@!H@xCC  {
   3!5!$q      $264&"  $547!zzz7t'lmmXyt]#   T;J'/q    T;    $264&"!! $5476[zzzp'tϘlmmX]ty   T;U'_q    8       "264!!&54$ zzz '11lmm#]ty  8  U'_s   8  U'_s    T  ;     "264 '&54$ !;zzzɨ11' lmmyt]  T  ;U'_v   	&  o    	N'  o     	a'v&     T  	''Y  v     	aU'w&     T  	'U&w  Y   T  ;U'_v    {    "327654'&"'&54632!C-**+EF,)).Di`W\ :8  8: uIBC3     {   "&53>53f99g6@II@6ʉ   {    "327654'&!5!&54632GD.)),FE+**-C4W`i\ :8  8: u3CBI         ! !2654&#p7@fzp##WPdm  T  ;J'/    T  ;   !"3 $54$);pzf@7pmdPW T  ;U'_    8     !2654&# )8ppzfZ#mdPW#  8  U'_   8  U'_    T  ;   ! $54$!"3;[fzp#WPdm T  ;U'_     	'       	N&       	']     T  	'&  Y     	U']     T  	'U&  Y     	'`     8  	&  =     	U'`     8  	U'=       	']     T  	'&  Y     	U']     T  	'U&  Y    {   !"&5463"34ɳVDQInw0.7?      k   %-k+2ydd ܃     T      !3! 5!;*vp    r'W         7! %!3   *;v_j     l'v    T     %!5 !#  B__p    T  l'Sv   T  k'Su         % !#!$ ! B_?j     l'yv     ?'$     T  '1       h'       >'p       hl'       >l&  p     ?'$     T  &  1     ?l'$     T  l&  1     h'       >&  p     hl'       >l&  p     h&j      {~   4&+3 #q9г`    {; '  .#"#"&'532654&/.54632 I>SN5Fb~UUUJKP6QY|JǱ+,"&si++/,'+ud}    {~   0#54 73#"g9r4`):   T   3265!# 54&#"!$3 rY.c2Y.c2NnNn'  T   4!2!4&#"!"$!3262c.Y2c.YnN'nN    Tl'v    T -  .#"3 $576!2327654&# !"$'&sL`>f䠱%WW#iGf=f[ݠP<D-}PW~SF+}PW#~  TU'h_    T -  # '&4$!"326767>3 !2654'&#".VPݴ[f=fGi#WW%f>`Ls~WP}+FS~#WP}-D  TU'h_   	X'I     T'#     	X'I     T&  #   	Xl'I     Tl&  #   ']     T
'     U']     T
U&     ']     T
&     U']     T
U&      { -  #"'&5463"326767>32#52654'&#"a30`l`O<$=*?W44j`O=%9.DXwMQPFz0-F(T.sGWNGz0-F'[    y   !!!!FfKH      r' W         	!!!KfH    l'v      y   !!!!FfLH      yl'v     k'u         )!!!~L    l'{v     J'       ['       n'       K'}       nl'       Kl&  }     J'       [&       Jl'       [l&       n'       K&  }     nl'       Kl&  }     nl&j      {   #!3!!}ם   {#]    {   	33	##E  gV       265!! $5=zzdlld       ! $=!!265zz#dlld    8     !4&"!!54$ zzz++dlld#   J'/         )4$ !!4&"=++zzzdlld   U'_         3!264&#!! !#Vpzzp1ml     l'@v         !3 )!264&#!1Vpzzplm  T  !   )# $54$)!"3!!1pzzpVlm  T  !l'@v    T  !   !"3!! $54$!3!pzzpV1ml      Jl')     T   l'2      {   ##"&63!!"3!歳KPMNy:57<    k   -5-yy2+#$  h  '     264&"&546 0!!%ppp:pTm5(`DD`D!gI7\w+   h'r'W    h'     264&"!! &54%ppp)}umTp`DD`D7+w\7IВg!  h'l'v      N    #"&4632 264&""pߝ`O +wpppKВ5pz`DD`D     l'v      N    632#"$4&"2Kw+ O`ߝ_pppcВ`DD`D     l'v     l'       wl&      {|^f    5%632#"64&"2S2<ccdGcGGc}gPrQp4&&4&           264&"3265! !  46 ypppTyy:pm(`DD`DX6=hIH        4&"2&'&46  !  !3265pppTmp:yy`DD`DHIВh^6=         264&"7 &5 !  !4&#"ypppTmp>EF>yy`DD`DHIВh=6        $4&"24&#"! !   &476pppTyy>FE>pm`DD`Dn=6^hIH  l'@v   l'@v    n    &   264&" &46; )!2654'&ppp0LoGTMwiffixj|FgD`DD`@2IВateeta#tA n  l'@v    s    &   264&"3!! $'&5476$!32 '&MpppiF|jxiffiwMTGoLgD`DD`Atate	etaВI2  s  l'@v
     l'     s  l&      {   *  32"'&'3!!"&'.5467676"3264&9cF3I6RRQI LB@@BKi1GG13GGPrQ(&+BxCC5@8]b8@!I&4&&4&   T  %    !# $5 !  "3264&6gL,_^ztlz] zsltmz    }    4 !  !"'!%"32654&_,Lgj_zltz Yzmtlsz   }l'v    T%     !  4$!2!264&#"61Gg^_zltz ]zmtlsz T%l'ov    }    %!63  !  %2654&#"^gG1j^ztlzl zsltmz }l'Xv    {~    '!632#"&2654&#"jWp/ѽ7e]@EYfLGC?D@C@I      +   {   {  	r'     {  	&     {  	l&     {	+&      {	+l&  !   {	&  #   {	l&  $   {'4      T  %   !4&#"! !  6_dL,_]szn     }   4 !  !4&#"!%_,Le^l nzs   T%    !  !3265!6d_^S nzs   }   %!3265! !  5^^eSszn  {  fr';  ,   {  f'<  ,   {  fl'=  ,   {	'>j  ,   {	l'?j  ,   {f'A  ,   {fl'B  ,    {U  -  "32654&5!"'&547672326=3#"'&GSPJKOOi``o_2MMYYYYV;75><75=^6IBc<PQEZS97;;7CBDE     {	   F  "32654&!"32654&3&547672326=3#"'&=!"'&547672GSPJKOOGSPJKOO$`o_2MMYYYY8i``o_V;75><75=;75><75=9Sc<PQEZS97;;7CBDE}6IBc<PQEZS   T  ;   %!"3 $54$!pzf@7LmdPW    T  ;'_.    8   !!2654&# !]ppzfZ^mdPW#  8U'_0    T;   ) $54$!"3!ZfzppWPdmL   T;U'_2    {   !"&5463"3!''ɳV!#*'IЋx.7       +   3#!'#537!!!yfKܸrH  
     !!!3#!5#5KfHrܸ 
  l'v6      +   !!!'#537!3y~fLAwHrܸ      +l'v8    
     #535!3#!!!Lf~AܸrH  
  l'{v:       3#!#!5#5353a[[!\\\i`}i`       %!!63 #"2654&#"<gG1¼l^ztlz66yzsltmz       9    32654&#! )=TMwiffixjq#ateeta     k      #";! $'&5476$!gjxiffiwMT+ate	eta  { 	  !!!5!"0߁۝#    {     #5!55!5!53!!!75.}6(}HVq_찃5ܝqq__      :s   	373	#'##A2   {  	+'     {  ':  ,   {  '<
/  -   {  l'=
/  -   {'>  -   {l'?z  -   {'A
/  -   {l'B
/  -   m   !!  ,   !!!!@! A     !!!#!!! AA   
   !!!#!#!!
0! AAA       !!!#!#!#!!! AAAA    !!!#!#!#!#!! ! AAAAA     !!!!A     !!3!!!\AA   
   !!3!3!!!AAA       !!3!3!3!!!_AAAA    !!3!3!3!3!!!AAAAA     !!!!!!}WRXAA     !!3!!!!#!!WRXXAAAA    	   !!3!3!!!!#!#!!WRXXXAAAAAA   #  !!3!3!3!!!!#!#!#!!WRXXXXAAAAAAAA     +  !3!3!3!3!!!!#!#!#!#!!!}WRXXXXXAAAAAAAAAA   S,B   !!!!!!! mm   SB   !!3!!!!#!!! mmmm     S
B   !!3!3!!!!#!#!!! mmmmmm   SB #  !!3!3!3!!!!#!#!#!!! mmmmmmmm     SB +  !!3!3!3!3!!!!#!#!#!#!!! mmmmmmmmmm     !!!!!!!!W67WX0/XVAA@         !!!!!!!y6L6yճfAAjX !c   !!!5!!!!w9~tv; 	     #  !!	!!'!%'!	)7%!77'7#
sHsGGsHsTHGGGGGHT2@@@@@@@@@?@2   
m + / 3 7 ; ? C G K O  !5#535#535#535!35!35!35!3#3#3#!!#3%#3%#3#3%#3%#3#3%#3%#3_	Hը]          !!!!1    q/   !'	7/T=%     !	!%=T%=<%      `  
  )'!!!3JgJ~`J\        `    #!5!!!!!!!Y+zU+2V`    X { , 3 >  %#"&'#  5!.#"6$32>32!#3267%3267%2654&#"waGMzFq} ~	HeߋӆsU+w`gpq[QeMOMO>
f~~CD01kdkdŨŸUO..f}unLJDMm)  (  ` 	    %24+3#24+2)#53qqw~~wiߟcm( &:j   X5{ F    a    326&#%'%#wJv}ZNMMNZ{kB"%WK}LW$&  (a    '%#53326&+3JU[f##qaFRWJB    `   !!!!!!3`    n{ 1  #"'&'5327654'&+5327654'&#"56763 l78ttWYZ[<;_7892u|v>CBAtMU^GZ\]\~?@aGH #$*,"%'<:('$p     L`    !!!!fff`L$   ZT`   !#"&'3265hKG6f4e]` !"!   y`      `   !7!!'7jobo`iC     `     `   X'{ R   X5{    X     4&        B8(~~|DDF  X @   %!>54& !.5   20Ư217*7@JPT@TV0VX     : 	  +  >54&#"3267>3  '#  467'7)A+CN{8,,eP~--^K/w}HO0u|CDjKmFEE!lMp    X^{ & / =  5!.#"676326763 !"&'#  %32767276'&#"XEqwv}~~kkHRjk"ކQRdcp<;`hAA\w>??>wu>>>>+f~~!"D0)(WT**؜RVW():f>?;:nUVBVUUVVU   X/'{   4&#"! !  |uw}G"!E/8    [*/   3265! !  |uw}u/8    h  ` 
   !2+!32654&#hze[MTTM`MFGL     +  z`  #  03#"#"!6767&'&54763!!OO['(('%K-+%322?s99nnv HI  G>a/0!GHoKJ  +  z` 
 "  ";5!!"'&54767&'&'!3['(('[Ofnn99s?223k%+-K  IH JKoHG!0/a>G    `    `   !3265! $5fS^_Sg``vddv`     +{   %!323267>54&#!!#ZTp[.w#&`b]hF.pfPl   |   !  5353!323267>54&#!!#Tp[.w#&`b]|hH.pfRn     '5{ $  #!!2764'#!!2764'!!08%9? 7w6515ۺ6555!&UgtY;(88]pf##3h  4h      ` Y   H  ` Z   \  F` ]    t`   %2654&+57!!!"&'q~X7T94|z},)*+ SLi--:;    `   3!!Q`    `N      `   !!!!/`}  h  `      `   !!6765!!5&'&5f?f?fll`au2
X
2uavRRv    q  0`      
  !#!#!<]!\4D3M       3'!!!!!!5!#1d}d\QV   v} 
  &  27654'&+27654'&+#!!2::I%%$%JpNV\\mmWX@,+76,lOy<;D54t=V    v 	   327654&#%!2#!iWNN KB !! BK =AB}|6A9JJ]_JJ9A6   v   !!!!!!vd}cࣜ    v   !5!5!5!5!5c}d   @ $  #"'&54$32&'&#"327675#5![abh뉊^VVLOMNNONLK&! z'ut(HHHH	  v   3!3#!#vf?b   vi   3#v    i   3+532765v_`1%L'&MN&%I     v 
  3!	!#v^;1tHI    v   3!!vc_   v   !!###v54ٚAd=   v 	  !3!#vV==   v 	  #!3V=D=  @    "32654&'2#"$76$ozzopzzp、Sstjssts  O  ?   "27654'5#"'&54767&'&54767&327654'&q6886655vaj45gs;:oppp:;sj15kIF"44(jT=332!!>=!!!!=?!a27kG/064Q|@??@|Q4604,=8'W !'!C<   v} 	   !2+#32764'&#vG&''&Gp     v 
 !  27654'&+#!2!'&'&#L!!!!LfsVWZ[2'((r#$#;m9:וD78xSj
$#I>  i   !!#!c_     v   3327653 '&5v&&WV'&ddfdeh,--,hVWWV    &g   333!!&颢颢誩``|    m7  +  "3276=7#5#"'&5476;54&#"5>32FH3?,+-98RmEDUVTZH>?5HI**&)(=L]998[n440,  m7  /  27654'&#"367632+32767#"'&F$#3@+,.89QnDEVU+*YI>?5HIJITU*&)(=Lf]998[n430CC  mb    53#5#"&632264&".88JI89LLL\[8"3^^^     m@ 6 > L  #"'&'#"&=!&'&#"56763267632+32767%3267%27654'&#"K>^DE,1M	11XHJKOPQPOqTS.?FGWzHGVU+*YI>?5S&%=APVF$#3@+,,+,9F$#'8<77^n430K9##B=d*&)(=    mb    264&#">32#"&'#3ILLIH'&&'M.rISTTSIr.^^0//074\\\\47[g     mb    3#5#"&632264&".88JI89LLLP[8"3^^^    mb  #  !32767#"'&5476324'&#"b11YGJKOPPPPjjhicd%&<B)(9F$#&VWXXYYR9##! >     mb     5!&'&#"567632#"&73267m11XHJKOPPPPjjз%&<BR
9F$#'VWR9##B=   m 1  &'&54632&'&#";#"32767#"'&5476	D##7899&56%<F$JNJQ'+*)I06;-9:::UV('$#7TP		(0~" 01a?((  m 1  #"'&'53264'&+5327654'&#"567632D##7899&56%<F$JNJQ'+*)I06;-9:::UV('#$7TP		(0~" 01a?((  mb " .  #"'&763253#"'&'532765"32764.pJUTTUJ88.klB>=?<899o43NN&%IF''64Z[ZZ8]̗PP		++\\TV-,.-     mO    3##53m  ms 
  3%!	!#ms&     m *  67632#65654&#"#4&#"#367632+;;Fz@?,2@F(4A##)66AIp:BCGB<^YGh</0Ws\6>    m2 #  +532654'&'&'&#"#3>322EDhA0
G((3rFz??}CC4KR10Us\74BC  mu    "32764'&'2#"&6K(''(KI'(('Ifggf00000000WWWW6  m   67632#"'&'532764'&#"m6568kllk7765(0/5_4554_1/..	WWWW	1111     mu   4'&#"#4632('IK('ηfgZ0000ZWW    mu   327653#"'&50XNJK'(ηgfZ`00ZWW  mb    #3>32#"&"3264&O.rISTTSIrgH'&&'HILLb\74\\\\40//0^^     m   3#;#"'&5#535:t88pp,21w
   m2   3327653#5#"'&mF)(3rEz@@?2MMLB
00V5[74BC   mA   !53233276767654&#!5!#QG9WVU&%laf=	?H.23=mr  m (  #"'&5332673327653#5#"&M+;;Fz?@,1@F(4A##)lAIp:BC~C<^Y4h</0X4\56>  m   33#m⯯O     lb  5  654'&#"327654'&'5647>32#"'(9E'&IPJ(ogtWH01I2"*@^:[OO[1#/! /0YY/0&'P0PB&H1e4.9/HqdJIk     \   3#5&'&+532ef!*f+`)S1	*  8@  +  &#"#"'&54767&54!232764&'&MkXlhghhg!(]LZ"*)*GH)*Z>`'74?KXWWXuZ,Y'1XW2122T  S     2#5$47635676&_YggUjX"T HS$$WH/0F9v6KN   !    73;#"&/#'&'&+532c"Fisx/dFS=>19H-Ti.'(m    m  OgO  d   n  u  d   m2s  d   m  s  d   lbw  d   \s  d    lb    67632#"&'#4%"32654&UNOLz\TJq/xIMMIHMMH	TN47%_^^YZ^ Sy  d   ! s  d    F^y  (  >32  #"&'! 32.#"2654&#"JuuJUc^[o|xsp||b\\c !65    v      `   %!535#535#5!#3#    
V{  " +  !&'&!#53!>33#"&!3276 r>#"<fJuυdku4(>rt<(wT0HI0T+wb]|]Y8UT8     Fy   !!+532765'!fgllͱ>f&& wv..t  mb    #367632#"'&"2764'P.89ISTTSI89LL&''\s[8\\\\^^///     m   &'&#"32767#"'&7632../1_4554_5/0(5677kllk8661111	WW6WW	     mM  1  ;2'&#"&'&#"63+0#0#"#"''45&'&7632$"]R4./.1_54 @j,~E2llk857 *11XE-c@0&)W6XV	    mu  /  &'&#"327654'&7#"&547632''7'37y"#" JPRHI'(gJ!"gf__xvF<JDS^00ZLHHSWWKJzBH6qA@H6     m 1  #"'&'5327654'&+532764&#"567632M'(VU:::9-;51I)*+'QJNJ$F<%65&9987##((?a10 "~0(		PT7#$  m   #"3###5354763}0pp@A&,,f11   mV   33#+532767#53ppADp'@v?CB  mb  ,  #"'&5476;#"'&'532765"3276=.pJUTTUklB>=?<899o43FN&%IF''64Z[~ZZ̗PP		++\\TV-,.-T  m2   3327653##"'&m
.F)(3:9Ez@?~>R>01V4P7BC     mT    3#33##5#53ᇇQmm   m   3?'&5m<W~GELDC~     mT   !53#5!#T~ l     mT   !535#535#5!#3#T~~~ qmmq   m    %  3#33"+01"+5&7637&#"3276j#I	9DG	W(B;AQvX7Cw*!   m)   3;#"'&5mAiDEKCCr     m1   33+532?#mCDo'@(sBCZ    m   3!!n40  m 0  67632+5327654&#"#4&#"#367632+;;Fz@?FDi@,2@F(4A##)66AIp:BC}CCAmB<^YGh</0Ws\6>     m (  #"'&5332673327653##"&M+;;Fz?@,1@F(4A##)lAIp:BC~C<^Y4h</0X4K56>     m '  #=4'&'&'&#"+5326=3>32
G((BDi?23rFz??>R01U{u@C4K{\74BC     m "  &'&'&#"#367632;#"'&5LA.(488Gy@?0AhDI01*[s\9BCK4CGn     m$ 	  !3!#mlm     mu     2#"&6"!3&'&+3276fggfηK('H0	(KI'WWWW60$==$0*00   m  # +  !535&'&7675#5!#'6764'&MggM~LffL(''	%''1`AW6WAghAWWAaZ00M00     m =  &'&#"#"';#"'&=327654'&/&'&54632ICC<A=(<<SS#$AhDECGGIB!"E'=<?ED-,`d327CC}o).-\d`    m   #"+532654763}/DDp'@0@A&asBC4Kf11  m   3#;+532767&'&5#535:tADo'@l18pp,v?CC,1w
   m8  *  ##5#&'&'&=#533!3#327683rE]'@G(m[74Cm?2M6m	!
0  mb %  27654'&'5!##"'&54767#5!0 +*)+ 0S84)جlm(.;Yq+-A<O1111O<A/(n!K<YXX[>G%n    l   332653 '&5l4;<4TSSTB88BxBBBB  m(   #'&53?27654'&/2.%`aW~GEJ40$5!J=XXXDC~q_71P<@/(f   m   ##3ⰯOs    m 	  !!!5!}gstX    m   !!;#"'&'!5!}gt		RiDBktFC@uX   mMO    !3676#'5!5!25&#"}geNiQ~t\R<mONX-   m2    7!5!#"&'532654'&+gf6O62kkHGDCCAaf45gv؏?:P|A@<79    m     !32767&'&#"2#"&76C$(DB)$#'DA*"VWWVVVG?DD<8<DD6>ivw^wwwv  Cf   !73!C   Cf   3!!Cf Cf   !#'!Cv f  Cf   !!#Cv⦲f  f 	  	373#'  x   f 	  #'#373ǲ ǲx  
''  $   X{'  D     l'v %   ^N& E  f: M'   %   M^'   E   '    %   ^'    E   fo\k'u    Xo5f& v	         9k'u '   \'\u G   M9'	   '   \M'   G   9'	   '   \'   G   w9' z   '   \o& z  G     9'	   '   \'   G     u& (  G'    X
k& H  & H  G     u& (  F    X
k& H  F a' M (   Xa
{' M H   p'   (   Xp
{'   H   ok'u' z    (   Xo
F& z  '    H       l'v )   '  'u I   f6'm" *   \F'    J     l'tv +     N& K  f: M'k   +   M'   K     k' jB: +   /  k& K  f: \o' zV   +   No' zH   K   'O  +   '  K    p'|  ,   p'^  L   R  u& ,  D   !  V'D      qk'qu .     y& N  du Mq'\   .   My'   N   q'm   .   y'    N   M'   /   M'_   O   BM& /  '  u $MO' q_;	5   '    /   )'d   O   & /   && O  ^&   9k'u 0     f' v   P     9l'v 0     '1   P   M9'   0   M{'/   P     l& 1  Yv   '   Q   M& 1  k   M{'   Q   'X   1   {'    Q   'T& 1   {& Q   & ffu& 2  L    X'S& R  L  ffY& 2  J    X'3& R  J  ffu& 2  G    X'k& R  G  ffu& 2  F    X'k& R  F    k'"u 3   V^f' v    S     l'v 3   V^'   S      l'v 5     'W   U   M '   5   M{'_   U   M O' q ;	X   M& qU	Y      'F   5   D{'   U   -l'v 6   jb'\   V   M-& 6     jMb{'Z   V   -l'u'v 6   jb' v   &V V     -m& 6  K     jb'\#   M-l'v	`   jMb'\ 	a   
  jk'u 7     'u W   
Mj'   7   M'   W   
j'    7   &   W     
j& 7   & & W   & M'>   8   M`'E   X   o'   8   p`'   X   a'6 M 8   a`' M X   u& 8  'NS S& X  ' 1] Y& 8  B    & X  ' q  j   
  'm'u 9     :'   Y   
M''   9   M`'   Y   =  r& :  h| H  m& Z   C  =  r& :  h| H  m& Z   v  =  k& :   jh: H  1& Z   j   =  k'hu :   H  '   Z   =M'x   :   HM`'   Z   '  l';v ;     
'   [   '  k' j0: ;     
1' j    [    l'v <   F'   \   \  qk'u =   \  Fc&v ]     \Mq'   =   \MF`'9   ]   \q'   =   \F`&>  ]     '    K     k' j: W   H  '   Z   F'    \   X'   D   '  'uA        )'75#35463!#&7?oL<bV N8Dn    '     )#535#535463!#&3#?L<8D      @  .5467.#"! !2"#"&'32654&',PK-kxDt@C}̌e5
(adB,7@,=\9+GnP`Zl?iph_3DV-j&1>52UvI$A))
AGn@aT5/<EGRH:?Z.  Y($I   
M'& $  5   XM{& D     
  '4'u $   X'   D   
  'o& $  M`    X7& D  M 
  'o& $  NH    X& D  N 
  '& $  Tc    X`K& D  T 
  '& $  OK    X& D  O 
M'k&      XMf&   z   
  'u& $  Ql    X!& D  Q 
  'u& $  Rl    X&& D  R 
  '& $  Sb    X& D  S 
  '& $  Pl    X=& D  P 
M'z'      XM=&   g   M'   (   XM
{'   H     4'u (   X
'   H     m'u (   X
:& H       yo& (  '+yu X& H  M    o& (  N    X
& H  N   }& (  T	    XrK& H  T   & (  O    X
& H  O Mk'      XM
f'        4'|u ,   k  f'`    M='|   ,   M'_   L   fMf'f   2   XM'{'   R   ff4'hu 2   X''   R   ffo& 2  M    Xo& R  M ffo& 2  N    X'& R  N ff& 2  T    X{K& R  T  ff& 2  O    X'& R  O   fMfk'f      XM'f'      lk'Nub   _f' v   c   lk'Nub   _f' C   c   l4'hub   _'  c   lm'gub   _:&c     lM'f  b   _M'  c   M'?   8   M`'   X   4'@u 8   '   X   k''uq   f' v   r   k''uq   f' C   r   4'@uq   '  r   m'?uq   :&r     M'?  q   M'  r    r'| <   Fm& Cd \    M& <     F`& \      ;'| <   F'   \    m'u <   F:& \        g 	  !!!!!UNN          !!5!3#!!!#53ffrrr++   c)G&F  
    c)G&F  
}    c)f&F  
    c)f&F  
    c)f&F  
    c)f&F  
    c)m&F  
    c)m&F  
~    
  'G&'  
   
  'G&'  
     Jf''#  
    Of''(  
Ķ    qf''J  
    f''  
ŧ    m&'~ 
d     m''   
c     nG&J  
]    nG&J  
>    nf&J  
<    nf&J  
#    n@f&J  
n    n!f&J  
7      G'+   
       G'+   
       6f'+U  
    /f'+N  
Ķ    f'+  
    f'+  
ŧ  VG&L  
    VG&L  
    Vf&L  
    Vf&L  
    Vf&L  
    Vf&L  
    Vm&L  
    Vm&L  
      G'-   
       G'-   
       	Ef'-O  
    	Df'-N  
Ķ    f'-  
    f'-  
ŧ    m'-  
d       m'-  
c     G&N  
Q   G&N  
[  Bf&N  
   f&N  
8   @f&N  
   f&N  
ŗ   m&N  
X  m&N  
R     !G'/   
       -G'/   
       zf'/=  
    f'/N  
Ķ    f'/  
    +f'/  
ŧ    m'/  
d       m'/  
c     X'G&T  
    X'G&T  
    X'f&T  
    X'f&T  
    X'f&T  
    X'f&T  
    G&5U 
   G'5   
     	^f'5  
  	cf'5  
Ķ  f'5  
  Af'5  
ŧ  	G&Z  
    	G&Z  
    	f&Z  
    	f&Z  
    	f&Z  
    	f&Z  
    	m&Z  
    	m&Z  
      G':  
       	f':  
Ķ    	f':  
ŧ    xm':  
c     XG&^  
t   XG&^  
o   Xf&^  
j   Xf&^  
`   Xf&^  
   Xf&^  
   Xm&^  
   Xm&^  
}     G&>x 
     sG'>   
       	f'>+  
  	f'>6
Ķ    cf'>  
    f'>
  
ŧ    m'>l  
d       cm'>  
c     c)f&F  
    c)fA   nf&J  
F    nfB   Vf&L  
   VfC  f&N  
l   fD   X'f&T  
    X'fa   	f&Z  
    	fb   Xf&^  
y   Xfc   cV)G&	  p    cV)G&	  p    cV)f&	  p    cV)f&	  p    cV)f&	  p    cV)f&	  p    cV)m&
   p    cV)m&
  p    
V'G&
  
   
V'G&
  
   VJf&
  
;   VOf&
  
@   Vqf&
  
b   Vf&
  
   Vm&
  
   Vm&
	  
   VG&
      VG&
      Vf&
      Vf&
      Vf&
      Vf&
      Vm&
      Vm&
      VG&
  
6   VG&
  
B   V	Ef&
   
   V	Df&
!  
   Vf&
"  
   Vf&
#  
L   Vm&
$  
   Vm&
%  
&   XVG&
N  o   XVG&
O  o   XVf&
P  o   XVf&
Q  o   XVf&
R  o   XVf&
S  o   XVm&
T  o   XVm&
U  o   VG&
V  
   VsG&
W  
D   V	f&
X  
   V	f&
Y  
   Vcf&
Z  
4   Vf&
[  
p   Vm&
\  
   Vcm&
]  
4   c)F&F      c)&F   q    cV)f&
^  p    cV)y&F  p    cV)f&A  p    c)9&F  
    cV)9&
  p    
  'k&'  u 
  'O&'   q;  f''   
֠  5  Wf   
V'&'  
  wG
  V   wG   !527#wGez \9   ;\m' u j   Vf&
b      V{&L      Vf&C      V9&L  
    V9&
       f'+  
֠   +f     f'-  
֠   Rf!   V&-  
X   Ef'
  
,     f'

  
0  \m' u
   F&N  V   )&N   qd  &N  
X   /&   9&N  
d  m&N  
P   ,  k&/  |u A  O&/   q|;  ;f'/  
֠   f"   Qf'
  
8     ]f'
  
H  \m' u
   	F&Z      	&Z   q    	&Z  
    	E   V^G&V  
    V^G&V  
    	9&Z  
    	m&Z  
     k&:  u  O&:   q ;  =f':^  
֠   f$     aG'7   
     ^;;& j  
  l ;   ^f C   XVf&
j  o   XV`&^  o   XVf&c  o   X9&^  
w   XV9&
  o  f'5  
֠ f#    uf'>  
֠   f%   7V&>  
f  mf v   wG   #3$5Gze   o    1 0!!ot    o
    n#     /1 0!!nK    n     /1 0!!n$    n     /1 0!!n$           /1 0!!     1& _   _J     & B   B    X    @	 1 0!3'dX`    X9   @	  1 0!#Td`     L   @	  1 0!#Te`     X9   #d`   X   +   @	 	
1 <20!3!3!ddXb`     Xo   + 	 @ 	
 1 <20!#!#!TeTe`^     F   + 	 @ 	
 1 <20!#!#TeTe`^  Xo    ###
ee`^   5;  *@ 
WV	W <<1 220!!!!!5!VJ#!/  3;  ?@!
 W	VW <<<<291 2<220!!!!!!!5!!5!VJ###!<}  '`  ] 1 0467>32#"&'.'535II245633JI326J235624IJ336633  'AF   'AoH     
   !!h}         !!!!hh}}     ^    #@ 
 	1 /<<220!!!!!!hhh}}}   y   BV   # / 3 ? K |@C32211003%@ *$F4:02$L3IC1!		C=!'=	I7'	-L991 2<<2220KSXY""32654&'2#"&546"32654&'2#"&546#32#"&546"32654&	HNNHGLLGֹHNNHHMNGպֺ׺GNMHHLMh{rs{{sr{ؽ۽8|rs}}sr|ٽڽ ؽ۽٨{rs{{sr{  	 B   " - 8 @ D M W  "32654&'2#"&546"32654&'2#"&546"2654&$  &#3  &54$"2654ZHNNHGLLGֹ(HNNHGLLGֹHNNMNt\t؎NMLh{rs{{sr{۽٨{rs{{sr{۽8|rs}}sr|z ۽1{rs{{sr    (`   !(`u   (`b&  w   (`'w  &      (`   #!`u    (`g&  |   (`&  '|       <   #%##   '       y291 905%'q      '      y <91 905-$'    3'  } ' ' Y' Y        w' n              !  7>56&!>32!3#d->.M^fy] N^@D*h->U1FE"B:*(ǿbY9>K-d    M  B  0   _    $'5 $CJ?ơSPPSEFE    &j   &$ 56$ :F;&FEFESPPS  _   #3	#ۊ@ v#"   )'   {'  {      ;   !!v  h  +@ 55 % 1 0KSXY"#3        !!!!!mT"^        !5!!5!!5m^    F  & "  "     & "        ' n   "      d_   327!#"'ddp_{C   ;   2###̾農     fS    3'#"&'.467>3،I326535IR2633235  fS    '372+r،I535623I532336 )         `  	  #!>diu1} j&"  #      la  #  %#'-73%%#'-73%===
====
oqqpqqp  =B<'    '  l    dR   #"'&'&'&#"5>32326搬
錄ܔ吙錂RPE:=MSPE:=K   X#     8 |   #'7!5!'737!!؍1؍؍1׍1؎؎1َ׎   )     !!!^^^OJpJ J   (`P'e  'w  &       +      !!!!!,,,,T,,*,,     B       !!!!!,,,d,,T,>,,,p,     =    !!!!hh}1}    d0      !!!!!!!!diiiit     p  D       %!!!!#!5!3!,,d,,rr,,,p,\rs     9w     !!!!!!hhh}}}}}     9w      !!!!!!!!hhhha  </    4&"32767#"'&547632B@!  !LK! bcabbccb@@@AAAAoppqpqqp   mO    3#3#mQ   8.    333##5!5y     a $  !!>32#"'&'5327654'&#"Lq6^]efNLLLKCC<T3221V3:9CߞMLKL('&AB&&   N'  -  "327654'&&'&#">32#"&547632>>?:431j;;
)^8``rs?;<9$%IJ$%%$JI%$56i{PQuv		     T   !#!TSFy6    M  , :  "32654&'&'&547632#"'&54673264'&#"C#$$#CAFFT**WVWV*.Q_.0[Z[[^97<79!!>=!!B=>BF00Gi8777jL+/45P|@??@|Pj26d  A  )  532767#"'&54632#"'&2764&#"~8h2i;;*/07UVrsA;;>>>?>56iJK|vv	$%JJ%$    k   !!#!5!hHIkۅ%%     F   !!'F    A    !!!!''ń{    o   #&'&47673`....`P)(P}|}~     g   6764'&'3gQ())(Q`./..a~}|}  n?   #=4'&'.#"#367632?
.H))4:;F|@A>R01Us\7BC </TN  d   {  C {  d   m  T t  d   ZT u  d   8  .CP  d   aCQ  d   N'TR  d   T  CS  d   MTT  d   ATU  d     V  d   %W  d    )X  d   oifY  d   gifZ  d   m7  d   mb  d   mu  d     :s  d   mb  d   n  ?gr  d   m  sg  d   n  Sg  d   m    d   n  ?[  d   mb  d   D  d   m  %  d    M  " %  !!!!!!#   !2.#"32673P^F^PPVVP`**99*)73Ʈ27     f9 ) 0 6  &'#7&'&76%7373&'6767#"'#&'B=!72,Ϳ@76	0<:d[bdcuTR<n*q5B@D
s$-efJPj
,e "I78>!Fi+    <V ,  6767#   !2.#"!>32.#"1.bedue`udelo1@0;k$")N)u~	"I77ef87ID: ̦c[       M   !!!!3#!#5>rgz[X"X  }   #  676!2.#"!!!!!!35#535#5`z\YFMv84uuw|'&>:r
     B 0  #4'&#"!!676323632!754'&#"!.  Rh78hCUThtYV/X21##Ne9(75UU``/085csVH)v75TR  $  m   #  5#535#53!3!3#3#!#!3'aM~~~n}}}}RlbMxJJJJ       P  3264&##532654&/.54%!#!! 3!!632.#"!"'&'!"&5=pzzpUFItijIm?"fqffqhcڀs_fcKa?ov""Ա_ml%N9"/:90/# U~^> 0035+.	#    	B  F  2654&+!.+!! 32654&/.54632.#"!"'&yiiyf7q^mL'O}@:djptijIm?cڀs_fcKa?ov(?ZgfXspR֔-v/:90/ 0035+.	#         " & ) - 1  '#53'!!7!!7!3#3#!#!#5!73'!!7{X6q66s66n6XzD̅D˺ijzjiK@vvVVBvvBvvvv     O    !  !4&#!!%  !3!!PN+$ooaY*5=Y >&      1 r@; .*(1.!2*("%!) 2	+) )% 22299999999991 22<2990%#  '#73.5467#736 !2.#"!!!!3267_pKXbXMep_Qc-VY2~cTR78 87NO{v$$zzOO     <     !!!!!!#5J|ibn`u!8LȘ      x   '7!!!77!'75H8`::~8-yt#W{rX{sYYys     7	  ( _ t   '6767632#"'&'327654'&#"67'6767632#"'&'&/#"'&5476323276767654&'&&#"32Nע%;7OKkJ?O+A0<NPk>3'&q++S38=D
!?9<w͡]URB$`>DL_K>.136>QORJBJ(Q(30`DG4%63x>$#7+Уc]97#9Xzav24?Le;&2ELyP)+'+>AHJB @@=kbq~Es/4	
%UAB`_KBjoD7=AiK}f^[@  0 ) 5  '32327&547632#527654'#"'&#"654'&#"ѦwJw,PYaTkzI5Et|S@,3Z8$)DlX``S㫣lm@.jVBthP#lH+990C   F     * 1  !3276%!64'5#53! 3#3#!#!#5%!&'&+g9mmN^qq^mo9g_B7P*PPgX~Ug(gT_g6    f[$x $ -  #5!#5&'&76753&'&'67679}h{ei񘺼d^tgiVoo$*T?pcBuqDeTKF#eiϥ"7?&6#PU"     
       5!!!#3#!!!#537!!/3'3{3R{{/{{R3[3K3_/UÕeeÕÊ  X 6  0!!32$7# '&7#5367670!5!654&#"6$3 3#~|Ӓ)6^8
h{{ "LNTML56yx8)5'PL87<%% #L     )  %#&'$%6753&'&'6767_g9:Эݢ:7h_Q\DGHCZT%;0,R7r~or7N'(OQ"z!    x    !!!!!!``~d+  g  - %  7!!!!!.+32767!7!&'&#gXnV fV+HO???f7q^y5(X}5y8JM:_-@@XspR
C!*%@    
  _   '7!772$5!#!'75B8::Vfix8ytX{rY{sOߩeta!Yys    @  =    3264&#! !#!!!5#535#3%pzzpZ1NSON,֎       3!w    =    !5!'3:w  =z   !#'73!5Fww͌ =z   5!'3#7=ww͌ ;1     3#%3#%3#1    >; 1      3#%3#%3#%3#!_1 =z   #'73!'3#7wwww͌͌    ) 
 % ) A  "326=%!5#"&546;54&#">32!!.#"3267#"$$32LD62?[A
hScSciY']f6eppe:hWPDD..,-_KyEL61!657@!vv#B   )	  * E I  %!"'5 54&/.5!2'& "326=%!5#"&546;54&#">32!!	c˫6)O/'I0ؕLD62?[A
hScSciY'9LD
3G<}K..,-_KyEL61!65  f\  !  .#"3267#   !2\jႹsmj}Lu}@C?k??D78ef84կ   	-' &   r        #  $/ %/ ܸ  ܸ $  и  / A   &  6  F  V  f  v              ]A     ]   	и  и  и     
/   + 015!&'67!!&'&76TT.--.0+-.҃tXWe>W!xw    )   ' 1  .#"3267#"$$32!!"32654&'2#"$$A]f6eppe:hWPDDKSSKISSI@!vv#B5qtsrrstqT   )  1 5  !3265!!5#"&.#"3267#"$$32!!p@	)FU?Y]f6eppe:hWPDDGhD"dUrmJI@!vv#B5   R   y      & r   ):   I n  !7632#"'&'&'&#"32767#"'&'&'&!#"'&54763232767676"#"'&54767632 D2ᐤL#.$3!.)%!'!!/&7/F+,WP"-tI1(5+,!,AD!#j[R.D)*6*!8U+De %%0!,	!%LDt˃*>%+'&%G8@N/ϭ@)49$'H::9U*9<==#;#%3buL/,     y ^  	&'&#"'6767632654'&5476767327#"'6%6"#"'?3276767654'&'&#"9<9%$,,=M,,HG,pc:@Bw9OIF5O9.Q%(H B'(Iq(9.w^$)*&0B%/^y5\Gnu85#.,M)(21tDOTʍ>ZZl5{D&%7{IF9Xau!X3!!5`_IH|je#O@Fe    M     3!3%!!!!!!!p8\\]x}+    ?  ;   !>54&#"!!>32)qGAol.hucm	VH9O@Fa^ N       63 !676#"!'7!%5Zegkԯ%=f&P#p/V7D6K:h|    JD 7  #"'&54763232765"#"'&54767632DH)EXّXF+I/4$%BH>>@e)&0B-%2Z>MYҞiOP>>9&+T2"86/Y&]
/A"= + -]yM)(  jF  2  632327#"&#"7632327654'&547%#"'&#"^v{x}}ȋo֏z,\l/v~jX>6FF	PP5ʷ05^:11::b:~"FLxUBnb_Xċykb[OP     LK J  '&7676%2#"'&'&'&#"23276767657#"'&'.#"'676767676	%QPN# 6F &8S$-+s2'nK"??|m-]+%!;	XL)+oyV?=[4$ PA(Zkxv1/zgcD9;TXy$)D02.(^B),\A    6  %  273#"'#67&5477632654#7<FLx:AkQ
sjCH;q]Uf59dNT1QGdXEU     | ! /  !35!!!>32#"&'!#!#53 276'&#"ff9ItυtI=<<=sq?>>rrra^^a+ETT@TTUTV        	3%!3!#eWx
4x]xK+C    E  	<   % )   "264!46!"!!5265   &!!5r>>r>I,W RW *֪~oqq Ȏ>; VȎ>;T^     
  ' 9  !2+!3264&#"32>54&'&$  $&546ǲOUUOAЮWWWVy{ήWWWX 0llllBx@9WzyWVVUyzWXnnn  n;C 0 <  67632"'67327654'&#"#"'&57&547327654It2݂DIzdM&dmU>"9yEY:?.m((6UE?LPק=+<$~\oA7n=BŨhb)<(,QB           3%! !#!327&+67654'&41\=66=E1mm1]x~#g)ZZ)    ff    '  %!#   !  % 7& 676'&-fgk{@{{{}L%lkh4334a     @<$ 
 [  27654'&'&'#"'&546323276765"#"'&5476!7232767#"'&̏hX&MM])zL5F,D!	3;1X00[Z.9'379GeϟHQrl}\IM=!&'E)TAhOM,2:pZϘM#B.97>#3*M*3D!!9!K.@_u20#"?Gc_3䂈/#>!8Z%,  Sl J Y  &54'&#"#"'&5327654'&#"3"'&547632763227767654'&#"HL^eZZfgr82ED2881VN2884@Bfggf\n/$~AB}:1$ $3CAA9Ya+.vuuvjVMMWWMMV[^SMpuvuuk# XW1W{|^1$h{r^Co(BP>;[Yj	)       Y   % - 1  3&'&7!.+!! !27&#676'&%3cT:[E5q>4>x\ u1E:PO"m=s@1F~h|hb)tL<M!0     L      Ǹ !/ "/ ! и / ܸ  и " ܸ A     ]A   )  9  I  Y  i  y              ]   9  / / /   +    +  и /   9  и /   90132654&#+!! 37!	!'!gppgW{K)qpa/~/_mddl=`o      " %  3&#%!.''7#!27%7654'7']8wdbHb;Bxٖi
1s'``/(tfK5F
9v,2$   W ' 4  .#"#"&'532654&/.54632733##'#R])2-+Fr_?H\j1,. 3?g^}7rnm! QDYb+ 
T@Pa	M    	`     3!!!!!!!!!!!!@DPjD/ͯ`z   'R   v@> 	 		%	 
  	ji	iji91 <<2<<9990KSXY"73#######5ww㪉Lq  KBM      %7!!'	!E4₰|`E	   \      	3%!!!5!.d#=&]x'x     5)R7 #   7654&#!5!5!5!!2!#"/j VTjrkY^H-u00rpL   7  >   7s   ] N  '72767654'&#"'67632 !"'&'&'&#"'6763232767654'&'&'&'*#ZMG!MIQnR'ynMy'ѰTX!<0Kra]?X3%;fX^@#!73*BZ@D^@7v_>ne}rwΪIF#2I'&*!DB>2Q5ecrRX.,     *   4&"5632!1q >CAh@[+X      q .   
  'm     T. < N ]  232#!727676765#"'&5476%27654'&'&32767654'&'&KBha`pcy!))23I@F0$wtTS(0ch!#E2):|HBSfTi1'&05Q>M:nn.7#!B:yZX$^]yk!!25>PHIX1%.!(Ivy0@7H]<H&	K5tB5    # @  $%327&'&'&''67654'&7!27%# '&477/+$J.3`(,<.!#&)H&pg,>MQ#;T99#%c% 	gTrh870@2!.IO!@#7>!7,2@FMVy32._T{w<Y   }Y-  )  % 7673 $54$32!"53!25&'&#"C]JjMo_zggJF__DM3TT<`xGZAEIpP3RQ4O    SD    6'&"132673#  !2Up3Fs*Nghz"?K9U	n"Gzt#(Da   X I  7&'&5476!2#"'&547654'&#"3"32767267!"'&'&5476`Gej,sNV+E2//6' '\oSh]-liōFf|ekA)+>-!>Z`'9QT(+" #)"H[|T$?9]pX`88$6}yo  K/ S  76?#"'$#!!#"'&547632327676=7!&#"#"'&5476!27Q73P1!L,#%(JpR02W^Z91"@1(#>mx6!!}H;m,Ud0A7+6M?R	cBb8WkLSF?Q.J;$!!J?f/hiv&LWSH3+"P	H       	  )!!!!g##y  M	? m  %&'&'#"'&5476363276765&'&#"'47632767632#"'&'&#"32767#"'&'&'+19012YqU4/ ,3.&6&< !!"bc:)J4wWgZUPP.\a0.)0>' 4?''Chyo=+uz.2L1ǂde6Pb.,:-$
.48ny"!V"FrjNpZۙ-(".*87`aA?06 "C?Y6%nn   ;}\    4&#"322#"&54ID`IFa~ﳶr|tx
     g 6  	4'#!5654/&54?'&5477'&5474/c2-i>Bd=VE/b5c2Bc2c2Cc1NS2j?Bdjl,>8?]/c6gUc1NS2Bc1MS2c1MS2   ' (  32#!"54?>3!4'&#!"&476323!2k+"E!$:@ϨD!*Y[A''# I	q#= X     ? *   #"/#!"54?>3!!"&54623!21=
i$	c*tD!$ZkF,(Jib'2 !Q<_c'oA<      #".5!"&54623!2<
EVkF-)A
*|2 !Q'Ho{m<z\     F      4632#"&3!53#5!pQOooOQpoTQooQOonuyy5y  Zu     !   !232$54$#"ehdol\P fgk-¾    
`       	!!	!!!#!#!!!!!!	zVV	s?m.mt372!#Ie%     F` 
  5  3&5!#3#32767#"'&'&'&5#!#"#463!d.4U"_'165Ic@;6^7V)"xfQLW,3$p	Gx&#T+Ka~=2{Ɯ V}    3>3 3!#"F{!nDFvFuV;c ;         	  3!!4H\]x    +     3!3%!!!C\\]x+]   w    	!	!	!!5	5-ExwcS  4   6$3   !"$'3254#"3!46uD~y}|<g)dFF_b875GF    7   )!!7\%#  X  }   !!}+#         )	!![Z9`u   *  J     +  ! )327&#!3676654'&LTbU!LM}j';c10tf:@S^et10]6z5x3ZNq   F  # ' 2  %267654'&#"!!7#"'&5477632#3%-)C%u^ ^ueC2tPQ Ȧ;0r,)[ZJoIx\aXc\mLV/.~X2xZJoI2  C{ 
  1  !654'&#"32767# '&547 ! ! *NI~HefUr|sЊd5"Z}?8X<[s6z0oDO:qDM9            !!3%!!jh9'\px    F     !!6767#!+73267mh9]>^#%,>f]&9UGs\     T} & 0  	!67!>3  #"&'32654&>54&#"g57ocbiE*([k^PMU1ABwCt2FnkBmFDےj5j:0.;6"W-/wGs))    p  ` 	  !!5!!N`#{#    d& { ''  Sd d''  & { Ud d''  & { ' {dNXd d''  & {  ud m' ud''   t   d''  & { Qd m''  & t  Qd Z''  'Qd u   8''  'QdP   d''  & { Rd a''  'RdQ   d''  & { Td Z''  & u  Td a''  &Q  Td T''  &S  Td d''   {    = ,     & ,   ,K     & ,  ' ,K   ,     & ,   9   
  ' 9   
  & 9   ,   
  
Y& 9  ' ,   ,   
  & 9  ' ,  ' ,  ' ,  ' ,
g   ,
g     & ,   ;   '   ;   '  9' ,   ;   '  
& ;  ' ,   ,G      /   f\ &     9 '     9 0      L     0' L   L     N& L  ' L   L<     & L   Yy     ` Y     & Y   L     	$' L  ' L   Y     B' L	0  ' L  ' L   Y     ' [   L     
` [     ' L   [     	2' L  ' L    [      O   X5{ F   \ G     { P    k  	 ! * 3   ) '&'&'&54767676!32654&+#"3Txi3333ixUxi3333ixT10tfet1001teft01Nq       9    /  	 ! + 	   +  (  + ( 	  A     ]A   )  9  I  Y  i  y              ]A   &  6  F  V  f  v              ]A     ] 	 и ( 1   . +  " 	 + "0132654&+'67654'&'! )=l=R;4334;S>jc7>=7dTMwiffixjzWV:2ST2:4:on:3	ateeta   k  	    B Z c  32654&#67654'&! '&'&'&54767676) 5&'&'.546767675#"3l=R;4334;S>jc7>=7OUxi3333ixTTxi3333ixj>S;4334;R=ld7=>7cV:2ST2:W>4:on:3901teft0110tfet10#W:2TS2:V3:no:4   f\H   X5{    fV\   #   !2.#"3267!&'Lu}jksskef87IDDI   <''  ' udN    d ?Q 	 	 
2@	@@	00	]1@
	 
 990@		  	 <<@<<KSX 	<<		 Y5!!dyƑ<Ƒ     * 	 @
	 
991 	 
2@	OO	??	]0@		  	 <<@<<KSX	<<		 Y3'#'ƑwxƑ   u PQ 	 	 
2@	OO	__	]1@
	 
 990@		  	 <<@<<KSX 	<<		 Y'7!5!'7PwyƑȌwƑ  * 	 @
	 
991 	 
2@	@@	PP	]0@		  	 <<@<<KSX	<<		 Y#737wƑxƑ    d PQ  ڶ
	 22@PP_
_O
O]1 @
 	9220@   <<@<<@

			
<<@<<KSX 
<<<< 

	Y5!'7'7!dDƑwƑ<ƑwwƑ    *  @
 	9221 
	 22@__P
POO@
@]0@   <<@<<@

			
<<@<<KSX
<<<< 

	Y3'7#7'ƑwwƒvƑw;Ɛ    3 	  7!!#c,4c̪4  3 	  #'!5_c̪43c̪4  3 	  %!5!73c̪4c4   3 	  %'3!zc4c,4   d ?Q   5!!!'7!dyYyrƑ<JxxƑ   u PQ   '7!'7!5!!'7PwyyƑȌwxJxƑ   s /  &'."#"'&/#7!!267676767632 NZN  !D:[P_cLW>bc,a NZN  $A?VMbdKX=AW\)""!&OG='""'=`,c_""!&V@>&""(<A  
 s /  676763226?!5!##"'&'&'&'."
$A=XKdbMV?A$  NZN a,cb>WLc_P[:D!  NZN WUA<(""&>@V&!""_c`='""'=GO&!"")   d ?Q   53!!#dƾWYƑƑ<WƑWƑ    !   3''#'5'WƑWƑwƾXƑWƑ  u PQ   '7#'7!5!'73'7PwƾYƑWƑȌwƑƑ +   #757377wƑƑƾWXƑƑ   d XQ   5!	!dW>HƑ<WWƑ     \ PQ   '7!'	7!'7PwH>WƑȌw>>Ƒ    d ?Q   !5!3#OiƑw
Ƒ6    *   %'3'!!5Ƒ6Ƒwh    u PQ   !'7'7!#3eƑwiƑww\    *   7#7!5!Ƒww\hƑw    *   %7'3'7!!5wƑƑwhDƑwƑw  d ? (  5!276767654'&'&'&#52#ƑwJE4;,-0+,;5D
Ƒ+,x>@9>*+     u P (  !"'&'&'&54676763"3!'7'D5;,+0-,;4EJƑw
+*>9@>x,+Ƒww     d ?  ;  3276767654'&'&'&"#5!5!54676762#M Ƒw0-,;45;,+0-,;4EƑM>x,++*>9A=x,+    u P  ;  54'&'&'&"3#"'&'.547676762!'7'7!# MME4;,-0+,;54;,-0ƑwM+,x=A9>*++,x>MƑww    d PQ M  2676767676322676767'7'7"'&'&'&'&'&"#"'&'5#$


 "%'-0$+	

' בw	'Z&(%	

	"(&-0$	
w$

-#% $,	

'בww"*&	

	*&"  d PS   %'!5!!'7'7!r?ƑwAI?Ƒw2'ƑY2Ƒww     7'7v9j#Pu]W)9 Z  ,   !#!5!,rƑw~Ƒ   [   !!'7'7!~ƑwrƑww<    Z,   !5!,ƑwLƑ  [   3!'7'7!Ƒw<Ƒww   -   !7#7!ƑwwVƑw   d b   5!3Ƒw
Ƒ	    z %  #4'&'&'&"7#74767676 ><JHHJ<>Ƒww12^YzoozY^21VJG@9!!9@GJVƑwƆvx]Y6006Y]xv  .z %  4767676 7#74'&'&'&".12^YzoozY^21Ƒww><JHHJ<>vx]Y6006Y]xvƑwVJG@9!!9@GJV    M 	   7!!#7!3c,4B[cc̪4'ww    d#P    '73#'7!5#3!Ƒwi3ƑwjƑwhhw0Ƒ\     ]" 4  276767654'&'#7!! '&'&'&54767< <>7ODHL:< >c,a/11/a_trrt_a/11/a;LJVS=7# :;LJSVJL;,cepvvpeZ5005Zepvvpe   ] 4  7 '&'&'&54767!5!#2767>54'&a/11/a_trrt_a/11/a,c> <:LHDO7>< epvvpeZ5005Zepvvpec;LJVSJL;: #7=SVJL  d
?Q   5!d
  d ?   !!dyƑwƑ      *   3'#wx         #'Ƒ$Ƒ    u
PQ   !5!'7P%Ƒ
Ƒw    u P   '7!5Pwyw      *   !37ƑwxƑw      !#73Ӿw  dP}'  ,     `V'  ,     dP}'  ,      d?}   '5!!!!5JyyƑwƑ    _  U   73'#'#'3ZƑwxxƑ    uP}   '7!5!'7!5!'7jwyyƑwƑw    _U   %#73737#ZwƑwxxƑw    dP'G   L  B   dP'K   H  B    d ?Q    %'7#5!7!!!!!!~@SwSr@?dVKKWoSSWo6KK   d PQ   !  7'!#5#53533'7'7#'5!)KKSwSخSwSخKK7KKSSSwwSKK     u PQ    3'7'7!'7!5!7!5!!7'!6@SwSr@VOOKK3WoSwwSWoKK  d ?Q   !!5!!SwSLK7SSK     )   #'3'#'RTKLRvRK    u PQ   7'!5!'7'7!5)KKLSwS7KKSwwS   )   737#73KKTxvR!KKRvR    d PQ    7'!!5!'7')KKbKKSwS^Sw7KKKKSSSww  )    7''3'7#7KKKKSSSwwKKKK^SwSSw  
   	#7!##Sqc,vqjqu+cqS     	'#5!#5'5yrt*dpRpdvpTj   !   	753!5373pdvpTjYRrtdp  !
   %3!'3FRrtdpRpd,vpj   d ?Q   !!!5!!!?Qv9iwiv2viiv     u PQ   !'!5!7'!5!7!uviwi9vQviwwiv  Z 5Q   ''#5!773Ƒwcc
Ƒcc  u PQ   #5377!'7'7#'sccƑw
ccƑwwƛ     *   !#!5!5!5!'3'!!!!Ƒ,҂6Ƒw҂ *   3!!!!7#7!5!5!5!Ƒww҂Ƒw6҂    d ?Q     5!35!%5!!  %5Ƒ
2Ƒ     *     3#3#3'#'2Ƒ w6Ƒ     u PQ     #5##5'7!5!'7w5Ƒ2wƑ *     #535#3#7372wƑ- $6Ƒ     d ?Q   #3!Ƒw
Ƒ\   u PQ   '73#'7!5ƑwiƑwhhw   7 ^?    5!5!	!!$T_i$$  6  ~    '33	!!,_i$$p$   H ^P    7'!!	!!$_%  6~    7##%	!!_%e$  6  ~      !!!'33	!!YK_i$$zzbJ$J 6  ~ 
   #!5#3'3!3!	!v_r$$pllx|`$  6  ~  
   #!5#7'3!3!	!v_r$$ll|`$   6  ~ 
    3!3!	!%#!%!5#3mr$$M  2|`$܌lzlx   6  ~ 
    !	!!!!%'33'37Z$$$__^tt$@@$tt    6  ~ 
    %3'3#!5'3!3!!	!!'37__v<r$$$$-^ttTll|<$$tt  H ^P 
   !5#35!7'!!!	llx|`$_/%%   z  M 	   7!!#!#c,4wcc̪4w  z  M 	   !5!735!3>c̪4<\wrc4bw^+ 6~ 	   3'3#?!	!!	!___-%%$$eҌ$$   u PQ ) 5 A  	'7#"'&'&'&'#53676767623'7$"!&'&'!27676Pw?>KJJK>?|{	?>KJJK>?	Ƒf\(( ~ (g ((\(( <wIB:"  ":BIIB:"  ":BIƑw  `V'  ,      u7P   '7!5!'7!5!'7!5!'7XwyyyƑDwƑw  d ?Q   5!3!!#!d=,Ƒ<JJƑ   u PQ   '7!#!5!3!'7Pw,=ƑȌwJJƑ  d PQ   %#!5!3!'7'7!Ƒw**ƑwJƑJƑww   d ?Q   5!3333####!dHddƑ<JJJJƑ     u PQ   '7!####53333!'7PwddHƑȌwJJJJƑ    d PQ   %####533333'7'7#dƑwdƑwJJƑJJƑww   7 ?@  	  	!}BJ,Z  u }@  	  7'!5!	7xJB얖dBB   7 }@     7'	!	7BB얖dBBd<,    
  '  
  !!!F^5_`+R    b ! m    + A   &  6  F  V  f  v              ]A     ]    +    + 0176! !&'&#"32767!! '&b'&Q(
5||jj||5
w(Q٠sf)rr)fs     ;e   0  563 #"'&547632654'&#"3276767&#"0j/<Fh|olnh'8	 _S}()G:3?1&Q3!e$tqz[n̠ERAIo:I-.$,Q?IY          !!!!!\\+#6#6#  4     3!!#7#3!!!!3!&Oaea:!aaa4_+__#6#6#6    `z  $ 2  73#"'&'#7&'&$32	&#"	32$767&'&IoFcξ<hE(ixuЋPRRh!&)
QSS9YZX|g IHveyKvGd             	@ /91 /90	!!!#-3mV?            	!!GskV??       %&76763!!"!!3!!"efſ{wC""Bw}_cdZdAAx>@?=wBC    3  " * c  /   +    +    +   ܸ 	и  и  и  !и  #и  *и */01%&'&54$3!73!!!!!!##!!a[g"uu	C"5N"BwCH3cdh[[[>x>@?=wB%      v'   % '&76)! !!)P])7KyK1&vo{ o%2lc<'        %#!5!276767!5!&'&'&#!5!2}wB""Cw{Ųfe_cCBw=?@>xAAdZx    3  " * k  /   +   	 +    +    +  	 и  и  и  !и  #и  *и */01#!#7!5!!5!!5!733>767!7!&'&'&'ba\pu4uW\C"N"BwCH3c[[xx[x>@?=wB%     v'    )5! 765!5!4'&)5P) 7KyK1)o{o%2ld<'      Ol    /  /013!l  w  @ pp 1 20!!!!)     u  @pp1 <0!!!XlXuJ)     )w  O@
 
  91 990@	&#)
	)	(
)8	]]!!	!!5	Bl_{N         1 0!!        !#!5!3!!5!

bb  d  -   W    +  и  и   
и     	/   +    +   и  013#!!#!5!QA   B    R>.    /  /013`em          %73%%#'mvzzvzvvKJ 36 r     9    1 0!!h}     LZ 
 n@*		 
	

 
		%
	  @
	 91 90KSXY"3##'%`w͑%hN7    LZv&   u D IZe&  P     # .  %"&'&'#"'&547632676;#";%27&#"Mq7;J;Nw^ccWMq7<K:NwQJmnJkmZ-1c@DU36IqtĻo@DU36I?FZb|     ! , 7  67632#"&'&'#"'&54763227&#""327654&TJ;Nw]ccXMq7;J;Nw]ccXMq7;ʊkmZ-1bkmZ-1b6Iqwo@DU36Iqwo@DUR?FZb|?FZb|        %!3!       %!!!3&     5  /   +  	ܸ к   9  и  01	!!!#4'!&'7!&'&fX32jO\-*u N#Q(H?vq-..-xy)q       / /   901	5'7%%'6^w=<P
Fp37;B<>b_kyPRP   X/   3#/)    bX/  ;   +   и    / /   9 	  901#'%3%:F;Edee  XW/    3#3#/))   bX/  { / /   и  / ܸ и  
ܸ ܸ 
 и  и     / / / /   9   9   9   9013737##'I;J:\,Y{*eLX+e   5  J   !!!5EG^    5  J   !!!5fgw^    5  J   76! !4'&#"!5o{ o.8</+P+COO=   5  J   !32765!! '&5/<8.o{ow+=OOC+    /b   #"'&'7327067632&#"0mDK6<AcmDK6<AW6N89\fW6N89\   /P&     /
>&  '      /c 9 E P  '&'7767'&'&'&54767676767676&67>54'&'&'m; }J "mDK6<AK>>>?J "mDK6<AP#"$0"#J;PLKJ}՜U5O9:[>?JKVXKK>?'U5O9:["$S13(*#b11S$  N/ Y e i t  %'&'776?!'&'7767'&'&'&54767676767676&!67676&67>54'&'&!'mDK6<AmDK6<AK>>>?J "mDK6<AmDK6<AP;; }J 
#"$""0"#՜U5O9:[U5O9:[>?JKVXKK>?'U5O9:[U5O9:[":;PLKJ}Tn$S13(*#`%/b11S$    //
Q y }     %'&'7767'&'&'&54767676767676&!67676&!67676&'&'776?!'&'776?%!)!67>54'&'&mDK6<AK>>>?J "mDK6<AmDK6<AmDK6<AP;; }J "mDK6<AmDK6<A"""0"##"$
vU5O9:[>?JKVXKK>?'U5O9:[U5O9:[U5O9:[":;PLKJ}՜U5O9:[U5O9:[%Tb11S$rn$S13(*#     / ?  #4767676767676&7%7&'&'&''&'7767U%#B<\mDK6<A+(XBA%4]8y(-6HmCK6;BB,!]XTF>&U5O9:[	%AAYw8'~2:)+U5O9:[01<   / ; C P Y  676?67676&7'&'7767&'.'&4767676776'&'&X',mDK6<AWA:- lT.AW+0mDK6<A		X'"",<$';$)&BQK	* L'	՜U5O9:['@;_CJy3/@'	U5O9:['XPP&K&+63{4;$7kB%9(     / < E R Z  &'&67676?67676&''&'7767&'&'%6767677&'&'&EL?FS(+mDK6<A\<C"}G%8NL,.mDK6<A		\<
6-n&1/).,C,9`W=B#
֜U5O9:[&>FT<;Om3F 	U5O9:[&?ǐ,@FF-'q9:80/n2/    z -'C'   z -''C   y -'   z -'''   &     ]g     !!!!!!hhQ}}   ' ' ''   H&  '  R   #"'&'&'&#"5>32326j`k^Xbian
^VRPE:=MSNE;=K  R   3276767632.#"#"&'gV^
naibX^k`jRUK=;ENSM=:EP  . )  .#"3".54>3232654&#72#"&&YH<dhb^LvHPH<dhb^Lv_ZZRTFcQzpzZZRTFcQz}     W   !2323!"#"وX_@IVX_AHVK/_/      P   !#.5476767654&'3PND:<LTND:<Jh`k
^Xbjbt^V     i   3267#"''&#"5>32T;Vgj`VnsuU<XbiaWmsKUPE&EYMSNE%UE          #"/&'&#"5>32326!!j`k^Xbk`k^VePE:
=LTPE:	>K     '#    #"'&/&#"5>32326!!j`k^Xbian^Ve#PE:	=MSNE;=KF        %  6767#"'!!'7!5!7&'&5>32-]q{@iaBLjuƩ ZvQ]Seian-9@;OEi0(#VNE;g   K   #  #"'&/&#"5>32326!!!!j`k^Xbian^VePE:	=MSNE;=KF       /  #"'&/&#"5>32326!5!7!5!7!!!!'j`k^Xbian^Vj`U>aPE:	=MSNE;=K튄튄    P 3  %#5!7!5!7/&#"5676326767!!!!'HrF9edXVVbiZYan)@Ă$TgjYVeHrʉK		='&SN#";Qk&UP#!l   #  ; C@!.9*1 "9*1< -<<21 9999990#"'&'&'&#"5>32326#"'&'&'&#"5>32326j`k^Xbian
^Vgj`k	^Xbk`k^V#PE:=MSNE;=KPE:=LTPE:>K      3  &#"5>323267#"'3267#"''&#"5>32RXbian^[,#Vgj`;L3RVgj`m^^,$Xbk`;L.MSNE;E	KUPE/KUPE=E#	LTPE   K  7 ;  #"'&/&#"5>32326#"'&/&#"5>32326!!j`k^Xbian^Vgj`k^Xbian^VeFPE:	=MSNE;=KPE:	=MSNE;=K      7 S  #"'&/&#"5>32326#"'&/&#"5>32326#"'&/&#"5>32326j`k^Xbian^Vgj`k^Xbian^Vgj`k^Xbian^VPE:	=MSNE;=KPE:	=MSNE;=KPE:	=MSNE;=K   K   #  3276?632.#"#"&'!5!5gV^naibX^k`jUK=;ENSM=	:EP@      	    %5 % $%5$[g&Y%Zh     6@  9  76767!!"'&'&'!5!!5!676762!!&'&'&[6/07VYYW60%AA%0M
6WYYV7
N0/%'H:f<0[2332[39a?H'N'H?a93[2332[0<f:H'%   `@     !5!676762!!&'&'&!![A%0M
6WYYV7
N0/Hd'H?a93[2332[0<f:H'%  ''k     'h&     C'=&    7 C'7&    =  (''         (''      ' 	   654'!#&547!5!!!!5((''F2<:4.@>0773;0>>0     '    #  !!!!"32654&'2#"&6HdcIHdeGBz0/11-0|DdbcGHd3/0xDCy-03     '     !!!! &!56 z    '     !!!!	3#$ׅcK   '     !!!!33#$ށKc  '     !!!!!!%fpqeqp2TT    '   
   !!!!!3!,րMYz  '    ! 6 = Q  !!!!53#5#"&4632264&#"%!3267#"&546324&#"#"3###535463fuu9&CWWC%:4%''%%''2.$M()R)cmk^Vgx&"*DAcct99BF/4 kj6h66h6k!))Yd[Yeg/!(&#LSS;9    'J   -  !!!!>32#4654&#"#4&#"#3>32![6]b"&16(26 S28V35uo:5SN[5SM%Q//7     ':   % )  !!!!#546?>54&#"5>323#!5 0+)^2<d.z&0 "*?1.#'!!d_1N, %`      =@!
  
	 <291 <2<2.990!3!!!'7#5!7!^P1}      M     !!!!!!n  s   !5!73!!!!!'7#5!7!5!M.{>orv8Or?Aftgs  i      !!!!!!!!         
 '@	
 
 <2291 /90%!55PN         
 '@
	 
 <<291 /907!!55%     &     !!5!556PN   &     3!!!!55%        !!!!'7!5!7!5!75"3I>~H~6\ڠ\ڟPN         !!!!'7!5!7!5!755%"3I>~H~6\ڠ\ڟ   H    	5	59696N33QQ33QQ  H    555569869N    P # +  #&'#67&'&'&767&'36736'&DD59gi;5FDDD59gi;5FGAGWedYVedۘۘ      &%5%67$%'5$7d0wL,ƦvS)^o'oS*[n&         %57%'\Z-VpR̩wSXT    ~    %'7'75%%5XEZVwopR̩SX_'T    (    %%!!'7!5!7%5%<lSUCBu;L6S]5-XdsEE   (    7'7!!'7#5!75%7%5ֶDXFL62.B	=^2*ςE\fuE  S  $  %#"'&'&'&#"5>323265j`k^Xbian
^VfPE:=MSNE;=KPN   S  $  %#"'&'&'&#"5>3232655%j`k^Xbian
^VdPE:=MSNE;=K    ( 1 4  %3267#"'&'&'&''75>32%5%%%P
^Vgj`s;3QOVbia
Z^0Q[Fl¢=KUPE:
	E$&SNEEXbrf5-    ( 1 4  3267#"'&'&'&''75676?5%7%57'WR9?
^Vgj`s\GE)VbiY13:D	?\ָ̼܂=KUPE:$Ex&SN#	]euE2,  l    55%5wPN   l    5	55%PN  <<   !  %7'%%'75%7%57%5%e\i4"*PW<2."W94Z_k󆑐3^am􇑓g3;5  <<   !  %7/%5%%'%5%75%F??8]]	' o_\\q 'V13{f네􊇑3i놣     s 
    %5$dos=== ||   s 
    %$sod=6 || 6==     y     %5 %5$>V|}0USx|   y     %  %$V>}|0B|SU     y  (  %#"'&'&'&#"5>32326 %5$j`k^Xbian
^Vg|}PE:=MSNE;=K USx|     y  (  %#"'&'&'&#"5>32326  %$j`k^Xbian
^Ve}|PE:=MSNE;=K |SU     J?    67%'&%5$%ސmUΠ<STIGynʳlqB[,=qB     J?    67&''67&'֐mUBΠ4PSTIGn6mr6 B	\,<BU      x   !!"3!!"'&54766nLNl6׃x|~KM᎚ِ     x   2#!5!27654&#!5̌6fTLnxސME|     ;    %&'&763!3!!!!##"3|ppRh>|mݴnLNle>moKM    3    #!#!5!!5!332654'&#,|ppmݴnLNlgle]moKM         %!!!!"3!!"'&76 6nLNl6ΌmoKM᎐         %!52#!5!27654&#!56̌6lNLnClMKom       &  %!!'7!5!7&'&763!7!!!!#";>Q=Z&zQ<Kl<{nLNlBw|BmoKM      	 &  327654'&/!5!7+!!'7!5!7!5!XlNLL0<[RCnVΝ%vFQ<&L&MKomM0B"WlsBs     9    %!!'7!5!7!"'&763!!"3!!P@jPhΌ6nLNl6v2HumoKM-  9   !!'7!5!7!5!27654&#!5!2)3@@jPhH6lNLn6̌}G.HHtMKom᎐l  5  J    !32765!! '&57!!5/<8.o{o%Hb"bHw+=OOC+8FIcxcI  5  J&     5  J  !  !32765!! '&3##5#5355/<8.o{oMw+=OOC+)        !!!!*          !5!!5T    U    !!!!5!U*l     U    !5!!5!5!UT          #!#*         33!3   $  3 ?   "2767>54&'&'$  &'&'&547676!!#!5!TSEFDDFESTTSEFDDFESbc1111cbbc1111cb88\##EFc`FE####EF`cFE#dbcwvwvcbddbcvwvwcb88     $  3 7   "2767>54&'&'$  &'&'&5476765!TSEFDDFESTTSEFDDFESbc1111cbbc1111cb$8\##EFc`FE####EF`cFE#dbcwvwvcbddbcvwvwcb^    $  3 ?   "2767>54&'&'$  &'&'&547676''7'77TSEFDDFESTTSEFDDFESbc1111cbbc1111cbݍݍݍ\##EFc`FE####EF`cFE#dbcwvwvcbddbcvwvwcbݍݍݍ     "  = A  32767>54'&'&'&#"'67632#"'&'&'&5476'ED"#FDSRcbSUDED"#DFSRcbSUbxwvwc`2111abxwvw`c1211aGEacSSFC##"#DEacSSCF##"#Ib0111cawvxwbb0111acvwxwF    $   7  !! "2767>54&'&'$  &'&'&547676hTSEFDDFESTTSEFDDFESbc1111cbbc1111cbE}##EFc`FE####EF`cFE#dbcwvwvcbddbcvwvwcb     $ 
  5 O  "32654&'2#"&>"2767>54&'&'$  &'&'&547676[HdcIHdeGBz0/11-0|DTSEFDDFESTTSEFDDFESbc1111cbbc1111cb.dbcGHd3/0xDCy-03##EFc`FE####EF`cFE#dbcwvwvcbddbcvwvwcb    $  + E  %#'-73%&"2767>54&'&'$  &'&'&547676===TSEFDDFESTTSEFDDFESbc1111cbbc1111cbqqp##EFc`FE####EF`cFE#dbcwvwvcbddbcvwvwcb   $   ! ; / /3ް2 "/#///0/01!!!! "2767>54&'&'$  &'&'&547676TSEFDDFESTTSEFDDFESbc1111cbbc1111cbfp##EFc`FE####EF`cFE#dbcwvwvcbddbcvwvwcb   $  3 7   "2767>54&'&'$  &'&'&5476765!TSEFDDFESTTSEFDDFESbc1111cbbc1111cbCj\##EFc`FE####EF`cFE#dbcwvwvcbddbcvwvwcb^    B     /3  ް222   	 
ް2/3  ް2
22      ް2  01!!#!5!%!%!!88oNz88W   B    c 
/3   ް2  ް2	/3  ް2 	 
015!!%!!8oNzW  B    N /3  ް2/3  ް2  01			'	'!%!!NNNNNz]NNNN    B     !!!%!!hNzE}        3!!#      3 ?3/3 ///333 01#!5!\ff          !5!!#<ss4         / ?3 // /301%3!!5<4        3!!#!       !!!#3!!!>rr      N ?3/3 ް2
/	//3	
01!!!#3!>rr          #!3!!#j\           #!#!3!!#F\\         #!!!#3!jj\rr   3q   !!'!#3!RNEqY&Y   3q    !!!!'!#3!7!`:`&qYYrrP    3q     !!'7#3!##g94|;qY&Ytf\+   3q      3!!!'7#3!##?!`4ww`qYYtr\     r ,  #"'732654'&'$%5$%67654&#"'632aVn,@1>1Je@J1>1@,nVa;lhXNm1.'0&:6Y((Y6:&0'.1mNXhl   r ,  $'&547632&#"327#"'&5476.aVn,@1>1J@eJ1>1@,nVa;lhXNm1.'0&:6Y((Y6:&0'.1mNXhl       	5'        	<{
  ]   
  7!!	5'G   ]   
  %!5	<G{
  z6 ' 2  2#"'&'!#"&632!676"32654&:Bz0.22,0|D_4.0|DBz005`9PO::PQ3/0xDCy-03`4B
<-033/0<B6`PsOO9:P     z6 
 2  "32654&'2#"'&'!#"&632!676::PO;9PQ8Bz0.22,0|D_4.0|DBz005`PsOO9:P3/0xDCy-03`4B
<-033/0<B6`  z6:    5!6767>32#"&'&/"3264&z:/0zBD|0/79QP::OP<0/330/:
 P:9OOsP  Y[      3!5#%5!v
x        !5!!#W4         
  !!!!!5fgwX&^       
  !!!!!5EG7&^      
  !!!!!5fgwX&^        )3 !!&'.'&MIP5?֔$OJL$#?           	!53"      w   	!	!!J      w   	!	!8!>>!7wJ!     cw[  @1 @	 <0"! !  !4$_lgiHRP  cw[  @1 @ 	<02$5! !  !_4pk/PRHi        7'	δ   9     Xd 	  !!%fpqeqpTT  v     !!!!!5!7	!!	'33ͅbŨb<NNv~;NŨP   'e     			''6UU     'f    				?<'fU::U  'f    			{'f0U8U   'f   		 fNV  'f   		 Nf::  '#    3276?632.#"#"&'!5gV^naibX^k`j#UK=;ENSM=	:EP  d   
  !! !dx|{v"dcC
#  d   
  3 !!dc2d{|#
C  2  ?  "'.'&47>763!!"3!"'.'&7>763!!"3!nA;9XX9;Amm{4664{m_XS#%%#SX_mDX9;;9X(64{{46%#SXXS#%     2  ?  !5!27>764'.'&#!5!2!5!27>764'.'&#!5!2FmmA;9XX9;Am_XS#%%#SX_m{4664{D(X9;;9X%#SXXS#%64{{46      
  <  47>762#4'.'&"#47>76 #4'.'&"#X8<tX0(64z|46$$RXXT"&lB::X0XtBl$l|4664|l`XR$$$$RX`    
  <  ".5327>53 '.'&5327>7653X8<tX0(r64z|46$$RXXT"&B::X0XtBl$l|4664|l`XR$$$$RX`l   |  8   4'&'##47673#\K!((!K܋c܀elK!x!Lkcǌcebc  4    ###!5!5!5!333!!!!'5#7777     =  
  	5	!!< U     =  
  55%!!f 11J    
H     	5	5	5
86 :686N33QQ33QQ33QQ    
H     5555556:86886:N     P  
   5!-5	5
:nPN   P  
   !5!555%
LNP       
  !5!5LNP      
  5!-5:    y     5$ %5$ T@}|?_:|xSU   y     $ %$ @T|}?:B US|  mw ! &  67&% %'&'57&%5$%7~E9оD\eعCR([\GwY49^GY~Y>-*HM.DX    !  6%'6%7$%7$% ሗX,tǈrfOM
Y%7R/VY(`q:}݂\*[  x    3!!!!!'#5!7!!!MЫ=Mv0'`@`U@   x    3!!!'#5!7!5!!5!!MЫ=Mv<0 `j`@        !!!!!!'7!5!7!)iԻikG9@莊      !!!'7!5!7!5!!5)iԻikG9j莊    "  %3267#"''7&#"5>3275T;Vgj`VnNPU<XbiaWmOkKUPE&EMSNE%E[PN      "  %3267#"''7&#"5>32755%T;Vgj`VnNPU<XbiaWmOkKUPE&EMSNE%E[  Fy  &  %3267#"''7&#"5>327 %5$T;Vgj`VnNPU<XbiaWmO|}	KUPE&EMSNE%EeUSx|  Fy  &  %3267#"''7&#"5>327  %$T;Vgj`VnNPU<XbiaWmO}|	KUPE&EMSNE%Ee|SU   w     7%'%57ږ1[bwZSZ=܀l<&    w     ''7-j9[61rwZ(Z A
_xh     5&     7%!!'7#5!%57ږĆ{UA-g9&ZBZN`<  6&     !!'7#53777wEB]{U_R]G&ZsZq
ZCyWcL'{  '{X{   ^& '{  %   ^'{  '%X   ^'{  'X%     #  %&'&'!5!676763!!"!!3!!"&bC#Efſ{wC""Bw}_dxzZdAAx>@?=wBC      3#5!3!!"$$3!!"!5}wy9geCclAb    v'   % $76)! !53#5!)Pٛ])7KWK1&v5o%2lc<'    &  V  Z  "  %&76763!!"!!3!!"!5efſ{wC""Bw}B_cdZdAAx>@?=wBC^   v'    % '&76)! !!)!5P])7KyK1&vo{ o%2lc<'x     X  "  %&76763!!"!!3!!"!5efſ{wC""Bw}B_cdZdAAx>@?=wBC      !!!!3!!"'&'&76763!!"L@g}ֲbcefſ{izb9CcdZdA9    #  !!#!5!276767!5!&'&'&#!5!2bC#DgſzxC""Bw}udxzZdAAx>@?=wBC     #3!&'&#!5!2#!5!2767!5}fy9meCxAb    v'    )5! 765!#3!4'&)5P') 7KWK1)ˇo%2ld<'    Z  "  %#!5!276767!5!&'&'&#!5!2!5}wB""Cw{ŲfeƁB_cCBw=?@>xAAdZx    v'     )5! 765!5!4'&)5!5P) 7KyK1)No{o%2ld<'c    S   !!!!!!Sz    @&   '  27#"''7&5476&#"327654'hwwweݰwwwgV[lk7wUZlk5hwwxݞfwwwߞ7kkkUw5kkkT    r8R   5:zJB     6  	  3	%!	XZ9(dT   *   '3'w    *   37#7ww"w  *b'  &l  r  *k'  &'l  Al  {   c   %64'&764'&?DDDDQ33HDHP@\I
HUI ^;9ONISN      !!!m     !!5A        !!T"     !5!!TA    b    3#5!Wl   db    !53#l      5!%#3WX   d    !5%#3DX      !#n   I,    $%%$nn!"nn8ʸ        ' + 6 @ K V  #"&6 3546 +32 &=# &6;5#'54&#"3!3264&#"32654&#!#"3265˭ʏʭʏeHGeeGHefGHefGHefGMGeeGHe`ʏʭʏ˭GffGHefffGMGeeHGeeHGeeG      !3!n     g:   !!!:xU    g   !!S     :   !!!:vU     3!!!vS   h   06732#"&54&#"iRA@Ae e5jT@OMJ&e<    -   0
#"&5463232670iRA@Aee54jT@OMJ&<        	'3%!5)!V@QQ@tFDx@Q2           !!!!%!!CFDDV    O  	     3!	3	)	!	3	
	xXL&&XXbPXX&*VZ           )!3	)	!	#	  xXL&&MyXPXX&*&    + x     # / ; G S _ k w           +7CO[gs  !2#!"543!254#!"+"=4;2+"=4;2%+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2%+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2'+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2'+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;22+"=4#"=43+"=4;2+"=4;2"=43!2#UݓJIIJ%J%%J%%K$$K%J%J%%J%F%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%%%%C%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%$%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%$%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%%%%%%%*$%%%J%%J%%K$$K%%%%%JJJI%%I&%J%%J%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%%% %I%HJ%%J%%J%%J%%J%%J%       
  	     )	!#	3		#	3
W
xXx&&XX

&P&X  Ff       			7'3#vvr&999"9"rr5kk\SSAcc\cc  `N   V^~V   X`^   c)yF    .    !!!!!5!N Q           !!5!!'7'5!yFCƑwVƑwo     #      !	!	!	!ll([Rvv   m   !5!ݠ r0p        !!#v      !&5 ƠT_C   m   5!] p g ]   !0v	        !!]#ƚ ΐ,U  m   !!! #	q       !!#v      !! 	r    m   !!]# N#   ]   !0v	        !!!]# #   sXm   !4763!!"{zf+!u0%    y   !4'&/32765!9+en:==@ne( =F|AEuH<  sXy   3!!"'&5!+f}{y%0W   sy   !!	  m   4'&#!!2s!+fz{}%0   sXy   &'&!;!76<<(en@==:ne+!<TuEA|R=   y   !#!!2765s{}f+!y0%       ! 	z  7 ^?    %	!!!%#!55[$X^$$T:__           !	!!$<   Ff    +  			 276764'&'&">  &vvrn66\]]\6666\]]\65kk\SS]\6666\]]\6666\   !    PRZ   $  %4&"32767#"'&547632573e@!  !LK! bcabbccb⪝@@AAAAoppqpqqp41    [^    >32  #"&'!'%5!%26&"Ju
uJ%Qf#{yy{b]]b`jRP[@    .6    !3!3oNd     xN   & ۺ   +  #  + #    +  A   &  6  F  V  f  v              ]A     ]A     ]A   )  9  I  Y  i  y              ]    +  
  + 
 $ % + $ 01 !  4$32" !  4$357!3!NKKggL7h׬z@+/     xN   4    +   $ +     +  A   &  6  F  V  f  v              ]A     ]A     ]A   )  9  I  Y  i  y              ] *   9  1и 1/    +  
  + 
   +  . ' + .01 !  4$32" !  4$!!5>54&#"5>32NKKggo.*OC6uhSXL7h׬z@'%D%7A,C Nl  xN   D   +  B 5 + B    +  A   &  6  F  V  f  v              ]A     ]A     ]A   )  9  I  Y  i  y              ]A  5  5 ]A  5 ) 5 9 5 I 5 Y 5 i 5 y 5  5  5  5  5  5  5 ]  5 B9 , 5 B9 ,/A  ,  , ]A  , ) , 9 , I , Y , i , y ,  ,  ,  ,  ,  ,  , ] ܺ &   9 ;   9    +  
  + 
 ) " + ) ? 8 + ? 2 / + 2  / 2901 !  4$32" !  4$#"&'532654&+532654&#"5>32NKKgg|rN^j@][]dXMKJ;x_^IeL7h׬z@_0 6135-.)/%|}Up    xN    )    +  !  + !    +  A   &  6  F  V  f  v              ]A     ]A     ]A   )  9  I  Y  i  y              ] ! $и  &    +  
  + 
 " # + " и # '01 !  4$32" !  4$3!3#!5!5NKKgg BKL7h׬z@Y5У   xN   9I   +  & 3 + &    +  A   &  6  F  V  f  v              ]A     ]A     ]A   )  9  I  Y  i  y              ] -   9A  3  3 ]A  3 ) 3 9 3 I 3 Y 3 i 3 y 3  3  3  3  3  3  3 ] 9   9    +  
  + 
 0 ) + 0   +  # 6 + #01 !  4$32" !  4$!!"632#"&'532654&#"NKKggS?!Wcu;S[[S3wiL7h׬z@\$=(F>?F(  xN   ' @   +   ; +  5 % + 5    +  A   &  6  F  V  f  v              ]A     ]A     ]A   )  9  I  Y  i  y              ]A   &  6  F  V  f  v              ]A     ]A  %  % ]A  % ) % 9 % I % Y % i % y %  %  %  %  %  %  % ] ) % 59    +  
  + 
 " 8 + " 2  + 201 !  4$32" !  4$"32654&.#">32#"&54 32NKKgg6666677ai1gqn@޹GL7h׬z@u@II@@II@*g;    xN   "  #/ $/  ܸ # и / A   &  6  F  V  f  v              ]A     ]   A     ]A   )  9  I  Y  i  y              ]     9 !   9    +  
  + 
  ! + 01 !  4$32" !  4$!!!NKKggxl1L7h׬z@  xN   ' ? K!   +   = +  1 F + 1    +  A   &  6  F  V  f  v              ]A     ]A     ]A   )  9  I  Y  i  y              ]A   &  6  F  V  f  v              ]A     ]A  F  F ]A  F ) F 9 F I F Y F i F y F  F  F  F  F  F  F ] % F 19 %/A  %  % ]A  % ) % 9 % I % Y % i % y %  %  %  %  %  %  % ] ( = 9 + = 9 +/ 4 F 19 % 7ܸ + @    +  
  + 
 " : + " . I + . C  + C (  C9 4  C901 !  4$32" !  4$"32654&%.54632#"&546732654&#"NKKgg<?>=;==e˽f$pq32033023L7h׬z@L:;;99;;:apS{{Sp	|]]|-.-..--     xN   4 @   +  > ) + > / 8 + /    +  A   &  6  F  V  f  v              ]A     ]A     ]A   )  9  I  Y  i  y              ]A  > & > 6 > F > V > f > v >  >  >  >  >  >  > ]A  >  > ]  ) >9A  8  8 ]A  8 ) 8 9 8 I 8 Y 8 i 8 y 8  8  8  8  8  8  8 ]    +  
  + 
 , ; + , 5 & + 501 !  4$32" !  4$53267#"&54632 #"&2654&#"NKKgg_i3frn?ݸG5885677L7h׬z@)f;!AHHBBHHA  xN   & 2 >   +  #  + # - 9 + - 3 ' + 3    +  A   &  6  F  V  f  v              ]A     ]A     ]A   )  9  I  Y  i  y              ] # ܸ  и /A  9  9 ]A  9 ) 9 9 9 I 9 Y 9 i 9 y 9  9  9  9  9  9  9 ] 9 $и $/A  '  ' ]A  ' ) ' 9 ' I ' Y ' i ' y '  '  '  '  '  '  ' ]    +  
  + 
 $ % + $ 01 !  4$32" !  4$35733!4&#"3267#"&54632NKKgg|'D')*''*)'ÏL7h׬z@&*jmmnn    j   5!j    l   !X      3 	      !@ 	  <j     5!!5!!5!r#B#B#j    <l     !!!!!r#B#B#XXX m     333mjjj  m     !!!@@@mjjj  <j      53353353353<xxxj    <l      3333333<xxxXXXX   n      3333p^^^^    n      !!!!@@@@p^^^^     !!      l   !! l       !!#      l   !!# l       !5! j     l   !! X       !5!$ j     l   !!$ X   j   3!-j    3!-m    j   !!@j       !!@m   j   5!3,jk     !3,X j   5!!@jk    !!@X        3!!- 	       3!!- 	    	  #!!!P@ j   	  33!!P-# k      !!!@# 	    	  #!!!P@ m      	  33!!P-# l     !!!@# 	     !5!3, jk       !!3, X    	  !5!!#@P jk   	  !5!33$,P jk      !5!!$@ jk    	  !!!#@P X      	  !!33$,P X     !!!$@ X     !5!! j    l 	  !!!!- XV  l 	  !5!5!!, jV  l   !!! X     !5!!$# j    l 	  !!!!$# XV  l 	  !5!5!!$# jV  l   !!!$# X j   5!3!,-jk  	  !3!!,-XV    	  5!3!!5,-3jkV      !3!,-X   j   5!!!@jk     	  !!!!@#XV   	  5!!!!5@jkV     !!!@X      #!5!3!,-jjk     !!3!!,- X       !5!3!!,- jk       !!3!!,- X      !5!!!!@ jk       !5!3!!$,-# jk        !5!!!!$@# jk       !!!!!#@#P XV      #5!5!!!!P$@ Vk      !!33!!$,P# XV       !5!533!!$P-# jV       !!!!!@ X     !!3!!$,-# X      !!!!!$@# X      !5!!!!$@# jk      !!!!!$@# X  <j    5!35!<yj  <l    !!!XX       33lUTT        !!@@lUTT     5!5!  x X    333x 		    	  !!!!- ¬B  x  	  !!##xms j  x     !!3!!xm3-s ¬jB    	  !5!5!5!, >   X 	  5!###ljjj     X    !5!!!5!4l t, >  	  3!!!--A   xj 	  333!xjk   x    3!3!kA  	  5!5!5!3,,=    jX 	  5!333jkk    X    5!35!3̠=      3!!!!-- 	AB x     333!!xs 		   x   	   3!33!!-skA	jB        !5!5!5!3,,   X    !5!333xt jk	    X     5!3!5!33t,	       !5!!5!4 B     5!!###sjjj      	   5!!5!3!!t,-sjB     5!5!3!,-XA   j   5!333!jkk     	   5!5!333!XkA       !5!5!5!3!!!!,,-- AB        5!333!!###sjkkjj         !!!!5!5!333!-s t, jBkA        43!!"yY[ p~|     4&#!5!2[Yx p~|  j   5!2653#xY[j~|q    j   !"&533![Yyjq|~  *m   3YѲ/	Y   *m   #3*/	Y *m   #	#	3	3*i    S   jh   5!|j       3?  hj   5!h}j       3 @  hl   |X    !@? hl   !h}X     !@ @ l   5!5!!5ijVV     333PP ?@    l   !!!iXVV     #!#P@P ?@  ;\      ;?   !O ?   ; j   !O j   ;   !O k   ;   !O @   ;   !O    ;   !O    ;B   !O B   ;   !O 	   q   ! 	      ! 	      ! 	      !' 	   I   !] 	      ! 	       3 	   :d'       bm         # ' + / 3 7 ; ?  53!5353!5353!5353!5353!5353!5353!5353!53('O'('('(67576    (  'l         # ' + / 3 7 ; ? C G K O S W [ _ c g k o s w {           #5353353353!3#%3#%3#%3#3#5#53#53#1#53#1#53#75353535313#3#3#3#75353535313#3#3#3#75353535313#3#3#3#bb~! 
  'm       5 9 = A  35#%35#35#%35#%35#35#35#35#35#35!35!#5#!5#35735#35#wNOŶZXYI6Z   B;Y  B  q :g         !( @  ;n'    n      ;   !!!;(' 	@   ;'n'  n      ;   !!;@@	    ;   !!!O   ;n'   ;'n'n    ;   !!'(      %   !     %    !!!,7r<R     %    %3!254#!") ) ,orVoVZttV   %&y      %        !%!5!5!5!5!5!5!5!5!5!W77777 rrrrr  %        !%3#3#3#3#3#ᰰܲްܲް t88888   %         # ' + / 3 7 ; ? C G K O S W [ _ c g  35#35#35#35#35#35#35#35#35#35#35#35#35#35#35#35#35#35#35#35#35#35#35#35#35#!L$" $"$ܮ.,,.ܮ.,,.,,.,,.,,.   %   
       !33775353535W!yBߢ| T}<B     %   
       !%353555#5#5#57#!yyB| r!C}     %  	       $ ( - 1 5 9 = A F K O S W \ a e j o s  7'#7'7'#7'7'7'#7'7'7'75#7'7'7'7'7'37'75'7'7'7'37'75'7'37'35'!,2|5y2~~2O~~5~|~2~~2~~5~}}}}~~~~}1y|~||~|}|||~|}}| z4|2~12~~~~|~~~~54~}22~}~45~4z231|42~~1O~~4~|~1~}1~~4}}~~}}~~~|1|~|}~|||||~||}}4|1~21~~~~|~~~~44~~11}|~44~~41       7!         %!!!,rv        %!!        !!!cr   "   !    "    !!!,r8V     !   %!!n      !    	!!!bSnr     !%   	    !%    !	       7	        7!	  !%         !%    	x;rRff          7          7	x^rSS      !   7      !    7	xtrSS     !%   !$    !%    	%!bc6r        !         	%!QQZr    !%       !%    	W                  	z      !        !    		#W    !%   	  !%    	uvxx    !%     	>+uv))xx  p)   )  $7632#"' 327$%&#" %632#"'~~~~eMM>yJJJJJ6````qq|qq   #u   v@A      %  91 990KSXY"	9%-  p)    327$%&#" %632#"'MM>y````qq|qq     r' 	   ' / 7 ? G  %&'&'6767&'&'7%'676727"'64'7&"'62&47\+;.81F9K58.42d;E9G,:.80G9J6&8.;+d1O9FLL&_`JnLL'`_n<1& j(0=Ju &,A=N:0('<1& j(0=Ju &1<>EB0(n_II'[[JnII'[[   p)    % / 3  6%632#"'327&#"6767&'&6pyAAAA,+-,,-+A@@Rqq|qq%%mܱ[0$
%@%|"    p)   ) 7   3276'&#"7632#"' 327$%&#" %632#"'r99:9rr9:99XWXXXXWXMM>yB!!BB!!oe33eje33````qq|qq     p    $  $pkk]Ak^    p     $  $27$%&#pkk]<MAk^a``     p     $  $"3pkk]<MAk^``    p     $  $%&#"pkk]Ak^>``    p     $  $327$pkk]\LLAk^>``    p     $  $"327$!pkk]<MMgAk^```     p     $  $"!pkk]<Ak^`  p})   6%63"'pRqq     )    #2y|q*q   (     32>54&'."!623IJf654253ED3366fJI426532&<   	(     $%632#"' 327$%&#"!IMM>y_O````|qqqqH(     	(    !#%&#")%632OyyMMqq>~``     	    3327$3!#"'$@1 >qq``   ) 	  %63"æqv`  ) 	  2#%&#u)q>`   	  527$3Muyv`>q   	  "'$33yuMq`     !)   %632#%&#"uqq>``  !   03327$3#"'$uMMuyy``>qq  !%         !%         !%   !    !%   !$ '`  )   32>54&'."467>2#"&'&o+()h:;iR+**(iuh*)r5352456fJI325wh))++Rh<:g*(+*)(픂235624IJf6633    %    !%!!d r<     %    !%!!We r<     %    !%!W7 r<    %    !%!W7 r<  %     !%!!!!+c,b r<<     !% 
    4632"&!	W>>VV}V2j>VV>>VVJ      !%    !	c      !%    !	b    p (     7 &  $   %;<*X֖   %  	   !!!!!!,7,rWb<)) Ie  %  	   !!!!%!!,crWbM)<R re  %  	   !!!!%!!,br+ceR re   %  	   !!!!!!,7+r+ceR Ie  p      $  $!327$%&'pkk]]4MAk^Or``O+    p      $  $67$%&#"!pkk]uM14Ak^^O``rOc     p      $  $!%&#"67$!pkk]\M̦4Ak^OT``%OT     p      $  $327$!%&'pkk]\M40̉Ak^``TOTO     !%    7!!xtr R      !%    	%!#Wnr   !%    !xtr    y    !!!,Lr0R<6    y   !06    "K    %!!!,|rhOn    "K   !h#n    !%    !	#W   	       " * 2 : A I  3#''%#&'52#"'&5476!!'5%!!'53'5%3'5%3#'sMM7:==-0YG.b#CKSuYGr=;>MM^??@7`d?\gOOOOy>*<?v^  h "  3263#!5276;'4?'4?26u'6"gP39.4!'*C0.xV#m14He	'1l1Z+d    d   ?  33 #&'&+"'&#"/573;2?"#'57#&'#"#5676!5:+#9,p!j[%+>
7VCCc":8}V.e3B=Se`e9*=93@=}     k 	   ! = Z   4^	5_gow!M  73&'37&'67&'67&'67'32654'&'7654&#"3672 $54767&'&47'&327632#"/#"57#"54?'&5432'&27632#"/#"57#"54?'&5432'&327632#"/#"57#"54?'&5432'&27632#"/#"57#"54?'&5432'&327632#"/#"57#"54?'&5432'&27632#"/"57#"54?'&5432'4327632#"/#"57#"54?'&5432'&27632#"/#"57#"54?'&5432'&27632#"/#"57#"54?'&5432'&27632#"/#"57#"4?'&54327'4327632#"/#"57#"54?'&54327'&27632#"/"57#"54?'&5432&'67&'67&'67'&327632#"/#"57#"54?'&5432'&27632#"/"57#"54?'&5432'&27632#"/"57#"54?'&5432'&27632#"/"57#"54?'&5432'&327632#"/#"57#"54?'&5432O~	)*+')+(@&'$||e?/A}]\B-71SLoWj\vLL)(0/	((	.1(%%,*#$)*f$%+)$#*+f%%,*$$)*		\o		[	%)#&'%&)#`#$*)$#+,U		Q		0	E%%+)$$*+*EC*Z*,)-)-*,%&%&fБfU 5HhfeefhH2pu^QFs棥sKQGh!99!!77!44	22	K44	22	22		11				





		







7


		
%&%&%'%&%'%&22	
//
	g
		
	

					44
22
      ! 2 C T e v          +&'&54?6?6/&2#"/54762#"/54762#"/54762#"/54762#"/54762#"/54762#"/547672#"/54762#"/54762#"/5476%2#"/5476%2#"/5476%2#"/5476DQ=2`{4&/<)g>i#@3e E$$
#
#
#$
#$$U$
#"$
# aG<s-8PZy9}KW2{0R^j,:.4.=,,  --- -	.. ,  -     	  !!	WV9`8    	   !!	7	!!WVDu9`8NI         	7%7&54769	}V&7A6$8'^4?
          !2	7%7&547!&'6I@Y%14HFS"="l-2DC[9         &   !  4$32   4$ #"&54>2JJhhq0^mNMn2Z^Z2K7iwBNmmN1Z00Z     }   
  C   "32654%"32654&%#"&54767654$ #"&767&54 !  ggJIhIhhIJgg[ZQoy y}WZ[zADgJIggIJggJIhhIJgU\\Q	srW\\^    }   
  A  4&#"26%4&#"326 !  547&'&632 $54'&'&632hIJgggMgJIhhIJg#@@z[ZW}yOOyoQZ[sIhhIJggJJggJIgg][[Xrq	Q\\   }    "32654&7 #"  32ɏǾ/`T_ȐɎ;P12Y   }    1  "264& "3264 #" 54 327&54 32  #"'&'3xyx&   کZTdIU       	k  ) 5 A M Y d p {       3'%&76'!'4%$53!76=332654&#"#"&54632'#"&54632#"&54632&'&676&'&676'.7>'.76$6&'&%6&'&6>'.>'.	[&riX(tRSu(Yiq' LW쥨驧r^]]^ !!  !! .-.*)X,),*))+..-.
OyyO
vKK9__9KKݧꧦ]]_""""s!!""W&.-.-a),**))))/.-.    	p   % - 5 A M Y d p |       5#!4'&'5#2#"&546"264"264"2647>'.7>'.676&'&>&'&7>'.%7>'.676&'&676&'&53!76=3%'676%27'%&76'77&'$%'#7%6'&718楣 .  .  .  . --Y--))G))))U*)>--~--VFwDcDC0BDcDwETc==F\J
$06#
J\F==cS@@1AeA1@@H磤椣筁 .  . .  .E---,1))),(9)())u-,-- G77W6W77Gl^	ee	^l(q,&$pp$&,q(      u    !!'!Pn8h       v   "  !!'! ##+572367676MoL)>ueI3?ba8hA:F;/Itx    v     !!'!		##'	Mo_h[ei[i8hi[ef[l[     @   36273	##' 5)U.WW1@USV   d  v    # , 5 > ~  3+&=43+&=4%3+&=43+&=43+&=43+&=43+&=4%33 #&'&+"'&#"/573;2?"#'57#&'#"#5676!5\:V\9\:\:]:&]9[\::+#9,p!j[%+>
7VCCc":8
#8d#7$6$8;$7i$7	#9pPL)Z.;6ZV
Z3%Y63.87p    	    	   / > E q w   !674#!!6?676'&#'323276767654#3#&'&'&6%67!672!&=75$/563&43!32+'!67#>54&53#?	I	:W0 96;E,Q 2:&l6x0	bm!
ras"\>%Ef~e2U6g!6V#p5C+
C?P9
B;Q4XmM;YV /M(=H:,qLUD)8Wqke-Pm{NW


=$
U	/0c)H?2@[nDF8T$.L       	!'	!T4XKGwL5_K        	  	!' 7W4Z~wD     B  &547632632%6#"'&'##"'&'&6&'&547676xJX%&XWX:\8[Ez##FM!9@!#jL)_(Mi#"?8"MF##y4hok@mmr*%te2'BB90tU%)"ft(f")%Ut09CB'2      9 >  3#"'43727$'#"$4727%6725676&5&oJ 7.b<MD	,B3qY5**]d=HNN: sW$,J	]T.MMm@ed:	,'ZM'cM&T)2_M      2  %!"&54676737#&'&54>;7!"&546767!7!"&54>3!6763!26P+=6/2D>R+>2,+v*>>+2
,2
=,2
=,3>,       2  463!2!2#!!#!32#3#!>*v+,1>+R=D206=+P#,>3,=
2,=
2,
2+>      { ! C  %4&#!"!&3!!"3!#";#"3&'6737#&'6737!"'67!7!&'63!67!2I0!6SSSS:	SS>SS]]J]]]]h\\, Bv*>K%39KILKIOKHLKIhghghghgE?-     L ! D  72654'6#"'4#"'54#"'54#"'675674767#%$4:JILLHOKHLKIhghgighgD>-sJ1 b6'SScRR	SS?SS\\K\\;\\]]!A*>K     { ! C  %254+'3254+'!254#!'!254!&#!"463!!2!!#!3#3SS?SS	<RRSS6 1J(K>*vA!,]]j\\\\K\\IKLHKOIKLIK93%N-?Eghghghgi   L ! C  32=732=7325732'654&#'%2&'&5&'5&'IKLHKOHLLIJ:4$N->DghgighghSS=SS	SSbSS'6a!0J)K>*B \\]]:]]J]]   }   O                   !%)-15   3656;2#'7+"/#"'+"5&54775%"'5476;25'7&56%635&56;374765'75'76=4'&+ '"'4!#"'&3$365&5&#%#754'&5&&547'5367&7+&'&'735&2?"5%75537'7'3533553535'32767&5%2?&#%55'5757757751:e,$?F?Y>F_LA3ELH3,8LYLlEF'!0<k#gF EeY!!Gp&iq9:^N$%`BCf F4"4._?ee3&{E(1-+!$Kt8-
	$Gs sM rEF"2>_plTErf^5.>=9|5"-l)d,&>vv]cccWpC-+d8Bpp>W]oaxvuPp82,D^8,^B$K+"1R[+e*;GW
QU
I&?	gpo%w^SA$29i-5n02D|&IY^Pw^%\??\OWC,,1
/211/=;7777=321811{908hN%b\Dh,)h?17I21!122223
21       &  2%2#"'&=47 7654'#"'5473Bq4|lanN	ilmb9b؍MOb>YaYƮ58l7P P@         $ 0 < F X   + &=6&# 3 6=%&#"';27!5%67%!&'&'2+"'&=476r cR~UY082.ԍ_W_V"+}IR8D).P9H'S]ٱZYHYoX(I_ ;.2lOP%.G6R%&I8   d   	   8 P i  >'67&&&'6.7#"'&'#"'$76'773.#'6'5676&&5476'&'%&&8DN$$UE>!]J([Fhy*m.2\=w\`|:S?ED:@@]?]1fixpFFTD'yr,48eL@v(Nr%&&&+F	7!N &".\S$XE/KC\a*0/'rSCٟ
C

(RKpF|bphc'R"J$    d     1 F [ q                 7&&'7'6&'$#&7'&#"'5&767#&''5$'67'6'6'5$'67'656$'67&'6'&'''5$7676'&&'$'63&7"7&'7&'7&'7&'6'6%676767&77&77&''5& '6%35&'.54>23#67!&W=
y
/_I[l*OF_VhB""@.,<9tJ4Vt1PQJqMi
vhpHI!:JJJB7m\J_/
?ov!"t,`s&*_~P1>5='g=@24<1-s[,*&sd1PT>5J@=)j<42JCYT_Y)*)X^TY{ #m7"J}> 	"<H#%	-88)70*7f8Z\+HD 	&+>H1$&b5 4CUE '(!`9!,(MTE+}r}A"7,)f[4f AD <@0&9c?"V+GoMK~aGg9s&0@k"?c*GEKXGjt9hN&\6
''''
6\%      N  $  &'6&'67327&#!65#&3yyys~wccޱqZre[c77	c        ,  35'533#3!'#'5!5!5#53!5!5#!!-ʷ}}	ckvGG@<<3ffX苜qXGccG      J     326&#!2+73	###	3(ttvgnؐB(       33#!!#'!'57!5#'5735׫$"q~q     +  !#!573#'5!3!'573!#'73!#'5;jjŠJss<wѡIjj8/w    {  ,  32#' 3%+ &5%6323'#57'53^VQ6>ѨABؒ6ʞG2k>Y3~||~        O b s  32732753"'#"'4323$4'5;+"'#"'53275'&'&5?5572%#&'&5%634%476=%@.!%,BE,#!-Q2"
$nL/PuHED8<yVX}$c!u&# _A]&y#{Y6\K00D(;,,e"@ p$B(!cc*@rJ&*EcJkgFp/ԶQRm       T _ g  2#27654'73&#"#'&'#"56='"'46'4#"4735#5&547/63654'%654BR38xy}xO8x *@;^ThoP?).Rt}?ywW·FY3(p"AK|.PQUbKxưrɮ-(-;	)1Hv;<tM]%;@!(!My/xK\̾g|HJiS~J?scf=     2  2#'#"'#&'663327'#&'56=4'&+"6і}٪Yql	~Bw%bx׽ɊnX1UhstZ|$eE7          !   !   !   67	654 '67KJy_ͪq7IL6xbhp]B          ( 4  3265 !  >32#"&546324&"26% !   !  
Őb{=&*<<*(;E;R::R;KJ67Ϛ{ɬ)::)*<<**<<*):<'L67I    &b  'b  b     &b  'b c     &b  'c  b     &b  'c  c     &c  'b  b     &c  'b  c     &c  'c  b     &c  'c  c   
    < B H N T Z ` f l   3264'&#"&7367'67675673#''5&'&'7&'677&'67'%%&'&'%6767%&'0/CB^0/AC/88pkTcR|NOOfUip88pqUfONNQaQh!$b)dLQk
KRt!%c'd&//^000NN|P_Pfp88poQ`QyNNP\Qgp88pmQ\Py,
M
N>&`7"
bK*V&"g{M	M  jn 
  ! - =  4632#"&%462#"& !   !   !   !  676 &'& Q;:RR:;QBRtSS:;Qtu<=CA$32%s'l(;QQvRS:;QQ;:SSutC<=@%8338H,'(+    jn 
  ! - =  4632#"&%462#"& !   !   !   !  7 767 '&Q;:RR:;QBRtSS:;Qtu<=CAs('s%23;QQvRS:;QQ;:SSutC<=@G+'',H833    jn 
  ! 1  3264&#"32654&" !   !  % 767' '&'Q;:RR:;QBQ;:SStRtus$32%s'l(:SRvQQ;:SS:;QQu[8338H,''+ 
       " * 2 : A I X  3#''%#&'52#"'&5476!!'5%!!'53'5%3'5%3#'32765'&#"sNN99=>-1\H0e%FKSwZGr=;=NN$E| 1	?'_>?@7`d@\hPPPPy?+<>w_VG{?,rCA        +   +"'5$76%&'547327676=&#~jt1/Q}](+VRxbOP>nS]]	=f      P  +  ! &56;2'5$%75#"3ui1.P~N](7P,VSZycOpO
>S\^	f  0: 1 >  7#'#53'&'&54767&'&=33676=3#326'&i($lm$(($[Uu&tU[$&uU[[UV$|ddbe|$%
ZSSZ
%_TYYT  -     &  6&   !!#!5!&yEߩPSCL"~||	    -      6& %   767!5!3!!cE!%zG#Lޜ~||         &  67    !7!lE!Ypipؤ=Ug\u   S     5264&#"#4 32 33#!5z{ym㗗y{(|    j   #53533#632#4654&#"#*jjoon}mZyH{zF      2 
 1   "32654'#"&4767!!53#5!!3!!#3!!pOO87O:=0LmkL/>Λ2  1O79NN970LؙL1KӘJJ-   ' <  %#5#535&'&'5'73'3#'73'676=35'73'33◰zhNgeMjzzTThOʍ7NjYYӖy     ?    ! #!!!'!27674'&#.d ;6zFH%QM_\ǃ$P<    ]      ! #"#&5463 67!2#6#" V⩁9k]ts]k8X1((1E       u  .  " 6&'67>3" #" 54767&'&#52&͕LVa{.+ؔ)0zHUM\&ϖ=Bll)'ҕ*l8lB=     j    &'5 %$ 56?6'[W4ZZ//[[5   @Eo   $ 8   "3264,'5'&54632264&"&$#"&547>B_^^-͓hI^9l͓hI(+|T!%lgMLx)+{T!&lϔgMM    
 <   >'.4632 27#"&54 54&#"&'&5476766&IAKK@ߴGdAoc.%&3tu/3u]o:JKAKLݰ
|XHwyo<>bQs-.cx68<<r.3G   m 6 ?  2>32>32#&'567''#&&#4'3>$4&"?w(K>R0D<d.J|	1:?$)v$/ƀwϧ}wh^)etWW<aAktAO]R      k9  #  !!!5!&54 32 !!5#67654&"*-bCDVUhhUyzzyU   E< 4  353'5#"'&''#&&#4'3>32>32 gYYYD,1:?$)v$E?w(K>Ro}vvxJv<aAktAO]ƀwϧ     		'	7	!5!?=lXll= ?l=Xl=l       j ' /  27632#"'#576&#"4'5267>327&'"SkQmyz,~zi2@:$(.-)zW]	ݾgvxaX[&ŝ     9{   A   3276327632"'&#"'& #' 327627632#"'&#"'& #'Es-1V865+)|m^aVp5W7805Dt,1Wn6+)}m^aW784V8705(GG$3LKGHb'HH#2MLGHa  A      !5! 37 !!'  3(ͦ '3_76`S@ʬAR       c    $ T d  67&'&"!3!67>54.#"!&'.54>325467675#53533#63232>54.#"P#3JTRJWVJQSOMJ4"?*&ElnhPL$ llill%LOhnlD')----+)QPQ((QPQ)+/6klj$?6FWWF6?$jlk6}++--     J H N R h |     &'4>32"'4>32&'4>32&54>32&54>32#!5!'!567>54.#"32767>4.#"327732>4.#"327>54.#"732>54.#"M_6694S55.+C55C&.66V\+55c$M##$	6$#$s`%#$d0"%)h#"#_33@]22-"40446/*33UJ"+33^1/K=0T*
#### 
#&$$&##&$$&#

B

####
*"$$"  U  ! ' - 2  !35!#3!53573#'5#5!35!75!!5'57!s\\ss]]s	JRRIJ~֛E77__vtt4!    v 7 C Q ^  &54767&'&'5676767&'&54>32!	535#5##3654."! 2>4.#" <$))+N-N*)N-M,**%: @v<-MTM-?K5:66459<5&?HPPIK*
')+K**K+)'	*KIPPH>&5<:6uN|l||l|-I+N))N+@6:55:5 Q    * 3 V  6&7 !&54 ''&''67.76;+"'5#"=6&'76767 %25#6&'3Z(-6	Z8.	,Z0H&h6%`+EH
)#M+=;,Zga#iR6Uk''M.+`xo8:.@s.P mz "x?.#1p#41`&jD"acLHJ
~447|JlL"  0   P [   32>4.#"32>54.#"!5&54767&'&546767&'&4>32'&'.#":e79e89f76e`[S&(*UM,N)(N-KV)&&\@ECApd88dpg669:%N&KRS*
'TM**MT'	*SRK&N۠:9}qyyq}      c    $ T d h y   67&'&"!3!67>54.#"!&'.54>325467675#53533#63232>54.#"!57!&'.54>3234'67632!P#3JTRJWVJQSOMJ4"?*&ElnhPL$ llill%LOhnlD')----s=BDw@>=))==AwDB=+)QPQ((QPQ)+/6klj$?6FWWF6?$jlk6}++--!yCB{C!$$!C{BCy!    J H L P  &'4>32"'4>32&'4>32&54>32&54>32#!5!5!M_6694S55.+C55C&.66V\+55c$))_33@]22-"40446/*33UJ"+33^1/NNOO U   % )  5!5!!35!#3!53573#'5#5!35!s\\ss]]s	^^/oo#E77   v 4 @  4767&'&'5676767&'&54>32!&535#5##3 <$))+N-N*)N-M,**%: @%v<5&?HPPIK*
')+K**K+)'	*KIPPH>&5<:6n5|l||l|    L   " . 7 =  6&73# !&54 '''7&''676&7;2547#";65'" 3=QUU+-6E|]k0krd0cG&h8E+`%s
H>4wM-',Qo8:$whPSmh**z1"0@)5"@YR    0 .  &54767&'&546767&'&4>32;&(*UM,N)(N-KV)&&9:%N&KRS*
'TM**MT'	*SRK&N۠:9   C   #  #"'##56'##"/547 ?^'5@_*SU&/UL	;Yԧ9UP(`XI.     s  2  22732 #&547636=4'&# #4'&#"*tpz&=<xQ>hG:V
Hek%PF5NPB|-&pA&NF    X      	 &&5	<F:^;"Vgd     G 7  236;2"##'65##"'&5476;235&'&=476ex<JT`(GeRUdfB3	VNT<G48u<B<h	mMD:SGEnQh  B  " < B  +"'##56#+"'&57547 7;2732;276=4'3&'"~V"0b*SV*8UiQ"_|Q
)w`SgA
?6N#euB?gIo5	F(pZR      w   2367632#&5476(t*#\l~ ΨT]1klSI|-  X     	&47EosU     H 2 ` g  26;2"##'65##"'&5476;2&'5476&+"326733276=4/#"567654'&#"35&5hr=)\"IfRUdgC3&=cGkv	==Nr%SZU6vk 6)S<F98:d	mOE:Rp&i	C]&'Ax.+0	nM,W`c     T   , H  3#&'&'&6%3#&'&'&63#&'&'&6 $&54673 $64'&'v0A1Y1,KV.J/VL9?cyɦt3Z|`ŻN[O}БBr1a`bb`a1)EMUUME)       3#"/4?23hH0#!cZ-@   o   3#'654'&'#"54732XWz=\9`Y'6?F` 1TFG*֙-@ x/   #"=4?2%#"=4?26ձ'VQܖCت+YP*~:ۉ8z"C     o    "'4723!# 5472!5kmOdXX[;Z$}@Ϝ   "    3363'$6'"-8w?WXc1	      0    3%#'#3%#)N(4/c}    4 ( ,  377#'#'547#5773%%.wwzy.**  <<7CA<<{8AMt    P E  #&#"'5654'5673;54'56732733273+&##&"#&'565Q8cc 9S:--:S8!cc7Q:--:[#;17F-:S8!cc!8S:-F71;#[RS9 cc 9S           ; G  7567&'&'3#6737'#&'7#&'6735'67#3335#5;0/_^//,/,-D--C-,.-
zz
~jihh~zz~hihj~ntt6tt-.,-C..C.,.-n//_R_//~ijhh~Nyy~hiii~zzs..         # . 6 C M h w      !2732!'5675'&=32#$'57637&/&+"+&532?4/%32#'#&&=4?#'57335'3!273+#='!"/547354;2?!&=!(:MbR.qp7,_q>MT,P$66$0_	u3dUdt_}s*$"Rt0XX__/ik=ZG8*F1
.ъf)MC=g9EkO9!(-);&
]t!y"&2|ba$
U+      
  2 E  35733!&54?'7'7!!"'&%#'73676'77'7'&'676ի,&T>=c$(wK9.U:Cʈ%`T?<c&>?5̈'8/a\MOHK$k$823!a
IF7=c`O]BA6$k#-	kNA!       1 D W  !!5>7>54&#"5>32&54?'7'7!!"'&%#'73676'77'7'&'676]T@1$J</gYLp0&0
,&T>=c$(wK9.U:Cʈ%`T?<c&>?5̈'8/]U1)8(3&ncQ&D-mMOHK$k$823!a
IF7=c`O]BA6$k#-	kNA!     ( = P c  #"&'532654&+532654&#"5>32&54?'7'7!!"'&%#'73676'77'7'&'676Z_3lFHe5^\VOosHGJI)`VKm1Sj,&T>=c$(wK9.U:Cʈ%`T?<c&>?5̈'8/S<\el23-2['&')bYK4JMOHK$k$823!a
IF7=c`O]BA6$k#-	kNA!       " 5 H  333##5!5&54?'7'7!!"'&%#'73676'77'7'&'676yy,&T>=c$(wK9.U:Cʈ%`T?<c&>?5̈'8/Rv_`MOHK$k$823!a
IF7=c`O]BA6$k#-	kNA!         2 E X  !!632#"&'532654&#"&54?'7'7!!"'&%#'73676'77'7'&'67612hFL]5R]]R'PF,&T>=c$(wK9.U:Cʈ%`T?<c&>?5̈'8/_ptcdrr@89@SMOHK$k$823!a
IF7=c`O]BA6$k#-	kNA!      	 " 7 J ]  "3264&.#"632#"&54632&54?'7'7!!"'&%#'73676'77'7'&'6767DD7:BB=F"W\]8uu&M,&T>=c$(wK9.U:Cʈ%`T?<c&>?5̈'8/Av@@vAf`5(sa_tMOHK$k$823!a
IF7=c`O]BA6$k#-	kNA!         . A  !#!&54?'7'7!!"'&%#'73676'77'7'&'676&,&T>=c$(wK9.U:Cʈ%`T?<c&>?5̈'8/2{MOHK$k$823!a
IF7=c`O]BA6$k#-	kNA!        ' :  7&54?'7'7!!"'&%#'73676'77'7'&'676,&T>=c$(wK9.U:Cʈ%`T?<c&>?5̈'8/MOHK$k$823!a
IF7=c`O]BA6$k#-	kNA!         ' 9 H R  !273!567&#2$'76+&67'#'6765'533!273+#'!"/47*:!Jca#fi*11Za(}ypPd!^t/TT}75	b\V/V'f::p?)\ )9s	s%00       % 2 < J \ e  3 + &=%62!67#&'&#36&#&#"3274/"34?3'35732?5##!'53aoPS<&3y:
SO	B2_5Nvbe)PK	L$=j"AjOL5_k,ߋ~y}/M<4{1;C,[_ei'[)$           / : B R ` j   # &5%6; 65%&# !27!57&/#2#&'676+%!#'#&'47'3!27##'%!#"/6g^_b0h\{\[:5:QmMM[-w,ldNVNG+Q'XYtTpXYSmEb,#4'FV !	Y11_	Ug,1        7 H  27&' # &5%6367&#'.7&67263'#%; 65%&# aWg^_Wa+{|<b0h\{\&XYtTͿWzzWapXYS 1   .  2!2!!7&!"4#".547672670#Uq{|}@!/(S*E.َer(Y$h?}}|r<.<CSSSL2      `     4767632#"'&'&!%!!+****+*B3    `  / 3 7  4767632#"'&'&4767632#"'&'&!%!!**+*l+***q*+**+*3       `  / G K O  4767632#"'&'&4767632#"'&'&4767632#"'&'&!%!!**+*6+***6+***q*+*f*+*a*+*3      `  / G _ c g  4767632#"'&'&4767632#"'&'&%4767632#"'&'&4767632#"'&'&!%!!**+*l+*****+*l+***q*+**+*+*+**+*3      `  / G _ w {   4767632#"'&'&4767632#"'&'&%4767632#"'&'&4767632#"'&'&4767632#"'&'&!%!!**+*l+*****+*l+***+****+**+*+*+**+**+*B3     `  / G _ w     4767632#"'&'&%4767632#"'&'&4767632#"'&'&4767632#"'&'&%4767632#"'&'&4767632#"'&'&!%!!$+*+*+*+***+*l+*****+*l+***q*+*+*+**+*V*+*+*+* *+*3         )  2 $$ $54$#"4>32#"&e|e(<X<ħñ"<! <"#<!;zchŮ;?B<!!<B=           ) 6  2 $$ $54$#"4>32#"&$2#".46e|e(<X<ħñ"<! <"#<!;>@<#"<! <"#zchŮ;?B<!!<B=   =B<!!<B=         2 $$2>4.#"e|e:<#"< !<"#;zch =B<!!<B=        '  2 $$2>4.#"$32>4."e|e:<#"< !<"#;"< !<"#<@;zch =B<!!<B= B<!!<B=          7!!(            7!!%!!`x`    M&b  b     M&b  c     N&c  b     N&c  c   X  	   6%'&/#'!#67$#	cKL`5+b(}*]55(BJN  X    #'!#67$#KL`55(BJN  j    	'7'77	'77	''6ƺ.+ŸMMƸ,,E#?=~Qǻ,,ȺOȻ-,qt5@   e  R  32>54.#"##"'5##"$'&'0!5!5&'.4>32!!676767'%''H&(G()G'%H(%'VW3WImuw>DE}AB|GE=md^JW4WVs'H''H'(H''H`XAK|@X1(ԁ3"|}DD}|"	2/
"1X@|AX1#     /  	673&/'67&'"&'6?&'3	'	K[]><+Gg['fBBe&\h?(K?]\K !;<uI@*"O8B1"1B8H$LIu<;0:ƕ     }   * C T  '&#"'5&767#&$'&%'6'&'''$'676'&5$'6%'.54>32TD$#@F,MMMvE8p_Lc1M**+B@0"AR/0?wA%od/D&3.YaQ/5#3$"uI'@3/u= =#n-....    y   3  %	%	32+#".7!"&'&'#&=4;7337_8)0/_^aM`1/ 9534<LL<L*(D>?GG~F6F~GG?>D9/C  }    "  632&'.'#!#!#Ҹ62K#+~~R!Nx_TV_T	'NQ9;:;PHi?CD|))Z    )    1   32>4.#"367#&7&$735&'.4>22[02[24Z1/[)'5*.XA<NWXZXN9dY22Yd[00-&皗1#+UU+      j ? G O   277''"/&'&'7&'&'7&47'6767'676?      "&462jX+C@~L@T/!%%!/T@L~@C+X+C@~L@T/!%%!/T@L~@Cl[[[-@2<T\E#D#F[T<3@..@2=T[F#D#E\T<3@-ku[[[    %      ! & + 0 5 : ? D P    3&7"7&'7&'7&'7&'6'6%676767&77&77&'"32654&'5&'.4>323#67#&#"/&'&547&"'6%676V n*[n%'ZxL0<{2;&b;>/2:.m*nW)'$o`0LP;2F<;(e:2/"7LL75MLZ'&4)PNPUQ74(43(4:XUPNR	("@Dv>0&8a>!U*~EmLK}`G
f7r
&0>j!>a)E~CKW
Gis7g:M57LL75M-Z
'*''*'
Y	(5[J5(	\d	(5J [4
	'      '   & . F R           2#".54>&'767&%76'&''67&'&'&'6767654676'&7>326'##"'&'&'&54767&'&547676&'&#"6&%6767&'&'&676&5467&'&6732767&$$$$OG362ecce74GL944m/122102/.303112.OF}68ge"w?>v"rt #87!":;@A<:"!66# sr*./13/.UVT\<>"$!!	!"#">kcg86|FO	93399	<>#"#><	 "$ZTU./43..V5$##$59gTVV9Z^^Z9++VTg9'(''&()I8:9889:Z_59eUV-,	<8.>euvc>-7=bccb>7-?cwud?/8MWZZW **D@@D+8,-VTe95^&)(&''(DA:AD.*!Y[[Y!      &    ) p ~   67&'67&'4&6%67.'4'6&&'6767&54?67&'&#&'#&'5&'"'67&'&47632>4.#"%2#".4>'7,3	3%/0),7=*'0*+3.22'Q YfT,1'').UfY Z98 "2B2;F_  XB?2C3" 894ihgikce"S[XVWXZ#ejpMcNTvJKr?VlLWW7pjk%n^*V{ww[11[ww{V)\#fd-#JM7B/""0C7NK",df#νhhοggQUXXU     S     	!!Y,q@I@,qȤ7TU7      S     '!57|,q,Iw,q,ɤ窪8    d      %  3!'# !5 2#"62#".54>"	h9|M463%&$$5		O	Dn;$$$$       33'5 54#$/[QwGSGUWGJG   Z  * 1 = C  & 32632 !!#!#!5!&"327&7&!&7326&#"6'XP}}R?99XezfH9?A:uutLFF"~||	-
	
GP8lGrr     [0  $ , 8 >  & 6 7&  '&'&'& !7!!!  6'&265"ut.77!u$lYoip@qDi4tEu.$rl,36l%eUg\xuvSc?\7=1lHr-ؤ    - 9 E   6' #"'!!#!5!&'& 326!7!%"327&7&326&#"suuW~WdP|ojp?9:v8?A:llGrE,
||	~LDJg\uHO   U  (   &  6& 32!7!!!#!5!&yEߩPhpCLn[u~||	     / M  #"'&'&'&54767676327'7'%'276767654'&'&'&"(F3"D"&%#C:bV`ZZ^;D"&&$AB[X]:3G9:]:F=~=<.,/*??z?<.+.( !$HS\[Y[VF=*%%'>HS]ZY^XAA&%iiD^29i..=<?A<92-.*?:CA<91*   A a  62'%'!!#5!5!5&'&'&'&5476767''7'''7"3276767654'&'&'&4p69].(E$##$E@Z-<81VDE$###F'19T]9T:G5>+../:9CG5>+../:9\2:a(EVUb_UVE@(
	%CEVU_bUTG(Hij:ο\ij+.<;BA;<./+.<;AB;<./  4 / O  !!#"'&'&'&5476767675!5!'	276767654'&'&'&#"<-Z@E$##$EDVRbfNZ@E$##$EDV18kbbjC9:/..+>5GC9:/..+>5疑
(@EVU_bUVEC%##(@EVUb_UVEC%	kajP/.<;BA;<.+/.<;AB;<.+    	 / O  ####"'&'&'&5476767632333'7	'%3276767654'&'&'&#"ܖU
(@EVU_bUVEC%##(@EVUb_UVEC%	Uܭkaj/.<;BA;<.+/.<;AB;<.+<-Z@E$##$EDVRbfNZ@E$##$EDV18kjC9:/..+>5GC9:/..+>5 4  ;   2"'&'&'&5476767"327>7654'&'&'&RUEG"##"GEURRUEG"##"GEUC9;\.+>6FC9;\.+>6#&BIRUb_URIB&##&BIRU_bURIB&s\<;BA;<.+\<;AB;<.+    4    2"'&'&'&5476767RUEG"##"GEURRUEG"##"GEU#&BIRUb_URIB&##&BIRU_bURIB& J  ;   "276767654'&'&'&2"'&'&'&5476767R#$$#R#$$=>3443>==>3443>"$)($##$()$"06<?IF?<6006<?FI?<60   gMJ  J e u  &'&54767"#"32#"'&'&'&54767676326762#"'&73276767654'&'&'&#"#'67654'&'*")$#)	=HK:C.221@=HK:		==@122.C:KH=	)#!  !#)##?FM;" "$)($&t.2@?FI?@2112@?IF?@2.x&$()$'#?IF?#% $()$ $)($    TZ`z  ! A _   3# "276767654'&'&/2#"'&'&'&54767676"276767654'&'&/2#"'&'&'&54767676R#)$#R#$$LK:C.221@=HK:C.221@=R#)$#R#$$LK:C.221@=HK:C.221@=zZ"$)($&#$()$'.2@?IF?@21.2@?FI?@21"$)($&#$()$'.2@?IF?@21.2@?FI?@21   
J A _ }  676767632#"'&'&'&'!#"'&'&'&5476767632$"276767654'&'&'$"276767654'&'&'61@=HK:C.221@=HK:C.521@=HK:C.221@=HK:C.6R#$$#R#$$R#)$#R#$$5=51.2@?IF?@21.4>"@21.2@?FI?@21.5="$)($##$()$""$)($&#$()$'  R    5%%%xr6׊eMM^xx   V  )  7654'&'575#!&54767'5!s_vR$N::N$Rv_{aT,X@X,Ta{4b\)1%==%1)\b4ߴ:`\KDDK\`     -     &  6&   #&yEߩPSCL"~{ Y,   !#!5!326& '6  !I(4~uP|Gjt ~|  ,    	!!#!5!7	>>!VL;||oJ     ,   737!!'!!#!5!'!5!{{~zz~zdz|{||R{|  xT% 	    !	!5!	#!7!#	#T??LLwJ|A|JZt|J    ,    $264&"&7673%%&uuu>hH]%VgVYFhݦuuv#gGέҔEg DX   !#!5!&'&5%676'!HfN)]H;btWUJn|3Lu.:;͢8%|    V ^m   3   76= '&   7654'7! '.54676! NΫ.8l?ΫNΫ,spppsppp>9`VhhV`"xx hVc`VhhV`cVY9QN9ss9N^Q9s     V ^   - E     7654' 76= '& 76= '&! '.54676! ΫNΫkNΫ.8l?*NΫ.8l?spppsppp>9ghVc`VhhV`cV|`VhhV`"xx `VhhV`"xx Z9QN9ss9N^^Q9s     V ^m  ! 1 ? U  ! '&'!    '&'&76767 76= '&   7654'7! '.54676! x8;41 ::; 9٫NΫ.8l?ΫNΫ,spppsppp>9d]]c]]]Փ`VhhV`"xx hVc`VhhV`cVY9QN9ss9N^Q9s    V ^  ! - ; K [ s     '&'&76767! '&'! ! '&'!   7654' 76= '& 76= '&! '.54676! K ::; 98;418;41
ΫNΫkNΫ.8l?*NΫ.8l?spppsppp>9]]]]]c]]cehVc`VhhV`cV|`VhhV`"xx `VhhV`"xx Z9QN9ss9N^^Q9s   -    ,  "&54632 #" 767'	2654&#"@a^CF[^ccZ礡}[D>XUAB]~Lޜ~g]䤣أ   l Z y   '#"'&#"'&'&'&547676763232767676'&'&'&/&'&'&547676762!2!%3276767654'&'&'&#"&#"3276767654'&'&s*	$+$$$#*#%>aZ%NT>% #HH	")mROeb

0

 $&$ 'D"&% 
$ #mR )Ky						   V!E  r   26767654'&'."#"'%"'&'&'&54767676;27>764'.'&+"'&'&'&547676762%632$"26767654'&'&.&&.&m,mQjP
(!N!"(!'CVf&&bZC'!("!N!(
PjoQm,.&&.&ql?W,>#"#""		""#"#>,W?~    lO Y x   3!#!"'&'&'&547676?6767676'&'&'&#"#"'&'&'&547>763276;%326767654'&'&'&#"6767654'&'&'&#"32eOuRd2	HH# 
%>TN
+Za>%#+$4$$$+$	's	
*
	*
OK) Rd#!#&
"*"D'  ""! 2 	T	
:	   	 I  Z x    -4H  67&'&'&+"'&'&'&476767632%632#"'%#"'&'&'&54767676;276 276767654'&'&'&"276767654'&'&'&""'&'&'&547676762"'&'&'&547676762'&'&'&547654'&'&'&";276-&#"+"276767654'&5476%327%&"'&'&476762I	Q\C--%("(/*0.,+"(/X]\9<\X/"$)0*3')"*%1*0CR[	

		

		

		

	22				2				2				2				%'&J &%C\d#_*]OhXC%& J&O]*								
 ")&`&"'$"/'	<%ZS%SZ%<	/'* "%5"-($# 	;8\=
! ! "
/VC
" ! !
[uV/+							   V^ n    3276767654'&'&'&#"&'&5476767632#"'.54767&54732#"#"676767'&#"'67654

ozwbd011.f_zx|wbd011,k9995ulsp:995un*D$lQ$"	6*D?"5'K(2-
#%>

:7331cdvwwqi`4331cdvwxD>mwn<;;8rowp:;;BV0/+"8:D@*|sa 	-F(7"*=8&0!2  1-5$&
6:B4    V^   , J i   &'&'%&'&"632%676767654$2"'&'&'&5476767"3276767654'&'&'&'2#"'&'&'&54767676?!*$ 1$-+h+-$F3782*	!?1 $>>9|wbd0111c`zwbd011.f_zxsp:995unsp:995ulwIP"2-.$ 	""		PI $.-2!v31cdvwzwcaf31cdvwwqi`43d;8rowp:;;8rown<;     x ,A -  57'36%33#3#!2#!3#3##$'#7$@d5{sVd]F0  0F]dVs{5⒒d@(
jPP,PP`    0   " ) -  	!676762!"'&'&'&54!X$#R#+/RFF$#R#$1Sh,		k-"s!    | K     476?6763&'&'&547632676767654'&7632!54'&'&76'&&#"'&/&'&'&#"#"'&'&/&'&#"&'&'&?6'&'#"'&'&#"!'476/654'&76'327654'&'&327654'&/%4&)"$0JK&
$)7		%1'#
#6	+-L__^/s4*1(.266	|/(1	

\	#:7
lS&x71]%
/~[#<$ o_%?,:
*(;Y)$X$+|=L!6CX&PY89Do6b'n283eF]4T&
& /50$?- 1@&	3l
K
C"P1	:07@D:5XI6.D3[+-1:			q/A8	

g   + jl  9 L p {     7654'"'&#"+"'&54?67676763276323273#5%6767'&#"6"/67#"27632327654'73654'676547&p/l0&J!cS%YE]{@C"$4>-;%,(6Y>m!N$X6"/,(4sS?X$U>"sJ?K(`./4+2K2.0>SZp0+1^' ;cs /^"|Y/428ۇϕl%%ot5oA='Y$	aT*''G+-%_kj~r}jL`І|\gK@/.85c($       " ) 3 S Z  67654/##3276?%%54' 654'36767632#"'&54767632'%;66I
	}gA6qn
		
		

->
9@
H67;zh|	9
>6!q
	


B   5>     ' - E L   4'&'&/767675'7!	!'!654'! 4'!!$4767>2"&'&'!654'
33
^^^RXI#J2VlP#
	~!88!~	
Uppph,p<((zd        " ) 3 S Z  &'&#"227654'&'''%'654.#"65&'&'&547632#"'&'&6#"%	
I66;o|>A%6!q

		
		
9
		;76H
	|h>
96qm


	
B   X{[ # C  '%%.'&"27>7%$6%"'&'&'&47676762%'2&%k
Aڙ>>dIID`qS
	 
SqGYq>q     ) &  %$64'%%&'&'&"27676&22"k**!q``q!   3 W
   2327 632 #"'&'&5476'(> !~GH".4F+@xH	)0$'*'       2727 7632 #"'&'&5476'(e`}{*279HFb@yJL1 -  A   		'	7	Ɏ877Ɏ77ɍ8ɍ     ?   	tt7tt7t7tt7u   B  2632#"'&'#"'&54767'&54763267632676
Q x L$3z(		 
6X36*=P*>
"#
        Q  26#"'#"'&'#'&'#"'&547&'&54767&&5476326763276T
 디% $$YyX$		zc0+j:(̢1#:_&#-Խ=1 '2ĺ  p  D   #  !!!!!%!!!!!!!!#!5!36HVBBXBBUHVPBXyB    p  D   !!!!!!""p"p"#  p  D    35#7!!#!5!3rrsrs   p  D    !!%!!!!!!r"p"#p"#  R  b   !!#!5!3ppEU   l    3!!'#'!!#!!3!5@,r,,_r,,_ >  v   #  !!!!!'!!!!!!!!#!5!3hm_|P_H_     p  D Q  #"#3;54'&'&'&#5!"3276767653#4'&'&'&+3!52767>5{dZYIB,$22$*DE]Vh{%'GC_Rl|lR_CIJ{hV]ED*$22$,BF\Zd{%'GC_RllR_CIJ&%IB`Oo|oO\FG'$zdZ\GB+%22%+BIdz$'GF\OooO`BH&&{dZ\GB+%22%+BId            #  !!!!!373#'7#ZAA:Llحmllmzlmllm|}}|d d}c   T` C  54'&54762327632#"'&+"'&5476=#"#"'&476323(L,68x86,L zFvd0000dvFz L,68x86,L zFvd0000dvFz zFvd0000dvFz L,68x86,L yFvd0110dvFy L,68x86,L     V^   &'##"&'&'&4767>32367675&'&'.5467676236767>32#"&'&'&'#"'&'.546767675&

 R.-R  R-.R "	
*!""! ((\(( !""!#%
	" R.-R  R-.R 

%#!""! ((\(( !""!**!""! ((\(( !""!#%

 R.-R  R-.R "	
%#!""! ((\(( !""!*
	" R.-R  R-.R 

  Sa   4'&'&'&'.54767676322767676767632#"'&'&'&'&'&#"'&'&'&5476767676765"#"'&'&'&5476767632($
((& :.:806$&&
)D+:!
'228:/3&$$&3/:822'
)2/@!
'&$6/r/6$&'
'?03'
&d8:02&!$&20:=-2&
(20C,7"
&d8:02& $&20:=-2&
(10?!
'&$6/r/6$&'
'D+:!
'228:/3&$$&3/:822'
)2/@'
((& :.:806$&&
(   T`0  267632#"'&'&'!&'&'&54676763267632#"'&'#"'&'&'&5476767!6767632#"'&'"'&'&'&54767#"'&'&'&5476767632!#"'&'&'&54767#"'&'&'&476767632&'&5476767632!#"'.'&5476767632&'&54767676Z



(
&	 

		

<

4		











%
(






(


2



	

6

	

	%		

	

<

%

(


    W_   276767653"4'&'&'&Wsp:995ullu599:ps;8rown<;;<nwor8;  W_  ?  247676763"'&'&'&5!276767653"4'&'&'&ee\WJI&%%"MF[[ff[[FM"%%&IJW\sp:995ullu599:ps&%JHZYif\UMH'&&'HMU\fiYZHJ%&;8rown<;;<nwor8;  0 	   %	%!	!0$$ѿ6alLl    V^ 	 )  !	!2#"'&'&'&54767676Z¬ìӬsp:995unsp:995ulHH;8rowp:;;8rown<;     0  '   "276767654'&'&'!	!990000999900009|kk-28;BA;82--28;AB;82-&lLl  0 	 ' 1  %	% 2"'&'&'&5476767!	!0$$990000999900009|6a-28;BA;82--28;AB;82-&lLl     0 	    !''!!	!!	!Z`5__5`/xxxx/kkIٶڶ&GGlLl     0 	    3'7'3!	!7!%%!Z&|d&dd&d|&kks/u//u/IvIvIIvIlLlc   0        %5%7'%!!	!xxx`/kkKKGTlLl  2     	'%'!!!!>j>-'O^__^Oq44H4"hdd      0   !%%!-@jjjk **           37'7	#'xxxx.xx.x..x   p  D   	#'!5!73!GFdFGrEGdGErFGqFGdGFqGEd  @L   			-	FOFc,OO,cFd,PO,dGOP  	 T`         '  !%%%!%%%-wD{wwf#w%f{wwy||y{xxf#w%f{wwxEy||y        %	%	Zp/AppA/}}E   T`   			-	ZqNqqNNrqNqr   T`   %%-Zyllylyy   T`   %%%%-ZtGcVGttGVcGGstGWcGtsGc   p  D /  3%!!%#'''%!5!%777xo:U.cF.d;UǩoxoU:e.Ec.U9oE.f:UūoxoU9g.Ff.U:oxo9U.      54'&5476276767632#"#"#"323232#"'&'&/"'&5476=&'&'#"'&'&547676323232?&547'&#"#"#"'&'&54767632676'K,68x86,L
qA'C<4GW>L
df
L>WG4<C'CnL,68x86,M	nC'C<4GW>L
dd
L>WG4<C'ElwFNd0110dNFy~DzI'#4#,G2$:;$2G,#4#'I~?	yFNd0110dNFy?~I'#4#,G2$::$2G,#4#'I;         "276767654'&'&/54'&5476276767632+"#"32;2#"'&'&/"'&5476=&'&'#"'&'&547676;232?&547'&#"+"'&'&54767632676o**YK,68x86,L
qA'C<4GW>L
df
L>WG4<C'CnL,68x86,M	nC'C<4GW>L
dd
L>WG4<C'ElPLwFNd0110dNFy~DzI'#4#,G2$:;$2G,#4#'I~?	yFNd0110dNFy?~I'#4#,G2$::$2G,#4#'I;   j  '&'&'&767654'&54762767676'&76'&'&/#"'&5476='&'&76767/1oS\**nH\W+G80j@6RR6@j0/P1Q\Hn**\Wk9000oS\*,lLXW+G80j@6RTXN6@j03L/S\Hn*+[Wk6	05HoIH 53c!77\`j4OO4jfVA7g/5 HIoH53 	05HoIL43c!77\`j4OO7gfVA7f05 HLlH53           67654'&"327632#"'&'&/#"'&5476=#"'&'&5476763232?'&#"#"'&'&5476763254'&5476276767632#"'&#"#"'&#"327676%32767654'&'&#"#"Z8%1T1%85e %ZF\+m8BS/?JV@6RTXN6@VGB1QB8n*\FZ% e53e!&ZFZ*n8BS/?JV@6RR6@VGB1QB8m+\FZ&!e3DA	
5<;>
+F$H$F+
>;<5
	AcJ2QD++DQ2J (5H,'9,J&0f)
T|\`j4OO7g`\|T
'g/& H,9',I4( (3J,&9-H &0f)
T|\`j4OO4j`\|T
'g/&J,9',H5(""'!$(:UJJU:($!'""   n  F     "276767654'&'&'767632#"'#"'&'&'&'#"'&'&'&5476767#"'&'&'&5476767632&'&5476767632=>3443>==>3443>x>%85670-)-%8/>0!-)-02;>/8%0)-02;>/8%-'&$>/:#-)-02;>/;))-02;>/8%-06<?IF?<6006<?FI?<605+'61>:4/.&"./4;=16'+&1,"%&!6'+&./4:>1:#"$./4:>16'+,4:>16'+&./4;=1  n  F n       %#"'&'&'&5476767#"'&'&'&5476767632&'&54767676267632#"'#"'&'&'&27654'&'&'&"67&'&'&'276767&54767'&'&#"276767654'&/7676767654'&'&'&#"Z0%8/>;20-)-!0>/8%-)0-<1:3%>-%8/|/8%->%85670-)-%8/>0!-)-02;>/8%0M=	 H 	C# B/g H *x#$  -7 H g/B   $#x*%",1&+'61=;4/."&./4:>16'.51=;4/.&&./4;=15+'61>:4/.&"./4;=16'+&1,"8_/$  $/_c.,b" $# !I?30C!'# 	x! #$ "b,.$	 #'!C03?I    
 T` - [ 3b  &'#"'&'&'&547676763267'&#"327%327676764'&'.#"7632#"'&'&54767676324676762676322##"'&'"'&'.5#"'&'&'&54767"'&'&'&54767676&'&'&'&'&'67676?&'32767677676765&'&'.#"7676767&'&'&/326767674'&'&'67'&'&'&#"67'&'&'&'67676767"276767654'&'&'"'&'&'&54?&'276767654'7654'&'&'&"67'&547676762:	


	$4

$$

4$


% !()-+,)$"! ((\(( !"&',+-)(!'7'&"# ,*2% !()-.))$"! ((\(( !"(%*-,*(! #2*&"# "&'
		!


4 
!


4 g

		
	i 4


!g 4


!
	
	oR#$$#R#$$	

	8

<

c7

<

7	





8
<

d8

<
6


 %),++*) !$3R  R3&!-(-%2(&"#%(.2$( &',+,)) !$3R  R3'! )),,+)$"#%(.2$( "			
i
!xg
!				
%
			
!
!
g
			"$)($##$()$"$
		
%%%%

		
    V^  < \ l   "276767654'&'&/2#"'&'&'&47676762#"'&'&'&54767676%%-z35++++53z35++++5pWDM69 ;9JHSWDM69 ;9JHSsp:995unsp:995ul}}(.35<;53.((.35;<53.("68MITNLJ;9"68MILJ;9m;8rowp:;;8rown<;}}             "327632#"'&'&/#"'&5476=#"'&'&5476763232?'&#"#"'&'&5476763254'&5476276767632#"'&#"27654'&%&'&#"327676%327632654'&'&#"#"Z*1%85e %ZF\+m8BS/?JV@6RTXN6@VGB1QB8n*\FZ% e53e!&ZFZ*n8BS/?JV@6RR6@VGB1QB8m+\FZ&!e3*1%8~>
+F$$>
+F$H;<5
	A~;<5
	A+DQ2J (5H,'9,J&0f)
T|\`j4OO7g`\|T
'g/& H,9',I4( (3J,&9-H &0f)
T|\`j4OO4j`\|T
'g/&J,9',H5(G+DQ2J$(:U$(:U3!'""!'""     A  ''7'753'75377537'7'#5''#5'7#5'7'7<<x<x<x<Ć<<<x<x<x<Ć<phMrhrohMMhorhrMhpphMrhrohMMhorhrMhp      ! % ) - 1 5  3%%%%#'-75%77%7?5x#	<$	<x<	$<	##x̩hh3QhhP'cccchcbbccbbgccc     0 A  37%37'7'#%'#5'7#5'7'7-'7'753'7xdX<[ddY<\dxd[<Xdd\<YdhQΛ4h5QQ4h5ЋQheQ55h3QQ5h36Q        #"'&'67632#"'&'&547'".46767#"'&'&54767627'#".4767632&'.4676327&54767632./56..65/.-/531/.66\l\66.//56.../j/136\6./531/.66./56\66.0.65/3m6.5/../54///.6\l\66\l\6.//.65/.6\l.//.6\l\6\l\6.-  	 aS      . E \ s   "&462	7	7	'	'&'&'&5476762"'&'&547676#"'&'&47676326767632#"'&'&X|XX|}UU}UU9r99r<%DREA 11 AERD%<%DREA 11 AERD%,|XX|X.U|JU~-|U~U.<%DREA 11 AERD%<%DREA 11 AERD%9r99r    	 aS      + ? S g   "&462				"'&'&476762"'&'&476762 2"'&'&4767$2"'&'&4767;i)U)U
)UK)U'.n.''.n.''.n.''.n.'p17#((#71p17#((#7Mp17#((#71p17#((#7K8)UL)U~U)^U)Ip17#((#71p17#((#7p17#((#71p17#((#7Y'.n.''.n.''.n.''.n.'   	 T`   & 3 @ M Y a m  +%5%32476;#"'&'7632&54?#"632'&54#"/7 2#547"&462"'&=3`(
`
&(
`
&*G)*IG)(*(Ge))GIR2d2X|XX|R2d2*2d2((2d2M*'FI*'FeF)*IF)*(
a
'U|XX|Xc(
a
'    T` l  267632%632#"'%#"'&'"'&547#"'&54767#"'&47632&'&54763&5476Z+/#N42B4
{L"..$J%(4B+;
N#/V/#N
42B4(%J$.."L{
4B$BN#./#J"5C7/	N".X.$M51C5	"J#//#J{	5CLM$.X."N	51C!wJ#/  f  #     +   + A    &   6   F   V   f   v                     ]A       ]A     ]A   )  9  I  Y  i  y              ] %    +   
 +   и /  и /  и  "01 !  4$#"#  4$32632 !"?qq?pGQ?rA   z   7   +  
   + 
     
 +     + 01%!#!3!dd,S.Sd,     z  8   7   +     +       +   
  + 
01%!%!35!,dS.dd,    z  	 7   +     +       +     + 01%!!!SdJS.SԂJ    z  8  	 7   +  	   + 	      +     + 01%!!7!,S.SdJ          	/ /01	SSTRSSSSSSRU"S       #       !      !X    (N    /    + 01!33N`R(n?  x(    /   +   01!##xR?   (:   '  / 
/    +    и  01!33!33N`R`R(n?n?     x(   /  / 
/   +   и  и  01!##!##xRR?n? >B- O S  2#"327676765!"'&54$3!57!##"'&'&'&54767676#	
 ?>I-7އv3T%+>CPNHiDG-2/&D9	.	!-8=DD_o2{jTc@F'%.36<@M137+4V    5  2&'&547676762"'&'&'&5476767Zy*,&&%1]~|45,--,54|45,--,5(+&014|d΃fz410&$(F*.46=<64.**.46<=64.*   Nf % C  &%&547676762476767622"'&'&'&5476767Z{&%1-l./&%%&/.l-1%&|45,--,54|45,--,5ġS410&$%%1/66/1%%$&014R*.46=<64.**.46<=64.*   n F( %  %&%&54767676247676762Z_75EAAD6556DAAE57_qKFD6454FCNNCF4546DFKo  X '  #"'&'&'&547676763"'&'&'&5476767632rJFD6464FBNNBF4646DFJp`84F@NLBD6466D@NLBD66^  ~ *  i  654'&#"632327632!"'&5!267&'&#"#"'&54763247632327654'&547632#"
6+Jo.^V|;-˙it36?̺fQMeEJS?(*$ s]vh2K)*NL13<VL*-*8A*_xAg0,?)!:"9JOCQ>^v:Mc*ZeC03N35%&-Kt\K%9S >BWN=!$?$8(F!5{^?   Z  N  676 547&'&327#"'#536767&'&'&5432&5476323254'&5432?-BO>Bv06('K`dC+(k$'eM?$#=HbB=)+8=.m9ebPB>$3g:=TEB7WPfG+1KHP<Ff#&T'0P+A'<<QbF  /'    "'&'&'&547676763"3/FDD@mh`((((SNecrGCFG/C>}DC  /' "  05276767654'&'&#052rceNS((((`hm@DDF/CD}>C/GFCG       !&547>2;       0!!676PJKBA<      !	!$        	!	"        #{   !	!{<l`    9   	!	9`l        U?   !	!?     w`   	!	w        H   Zjjjj  l   '7'7Zjjj3j f $  #"&=4&+5326=46;#"3l==kDV[noZVtsݓXX N (  326=467&'&=4&+532;#"+DVZon.-VDUT65==lTUԾXGGXJI9:tJJ  xN   K / /  ܸ  и /   ܸ  ܸ и /    +  
  + 
01 !  4$32!5#!7#NKKggL7h/+   xN  & S '/ (/  ܸ ' и /   %ܸ и /  ܸ "и "/  #  + # 
  + 
01 !  4$32>54&#">32!5!NKKggɈXԺShu6CO*.qL7hlN C,A7%D%  xN  6 Ÿ 7/ 8/  ܸ 7 и /    9 *ܸ   1A  1  1 ]A  1 ) 1 9 1 I 1 Y 1 i 1 y 1  1  1  1  1  1  1 ] 4   9  .  + . 
  + 
 ! ' + !   +    9 * ' !901 !  4$32%4&#">32+32#"&'32654&'>NKKggI^_x;JKMXd][]@j^NreL7hA}|%/).-5316 0_p  xN    S / /  ܸ  и /    9    9 ܸ       +  
  + 
01 !  4$32#!!535#!NKKggK"L7hߣ5     xN  *    +    ! +    A  !  ! ]A  ! ) ! 9 ! I ! Y ! i ! y !  !  !  !  !  !  ! ]    +  
 * + 
   +  ' $ + '   901 !  4$32>32#"&'32654&#"5!5!NKKggiw3S[[S;ucW׿!=VL7h(F?>F(=$\    xN   21   +    +    # +  A     ]A   )  9  I  Y  i  y              ]A   &  6  F  V  f  v              ]A     ]A  #  # ]A  # ) # 9 # I # Y # i # y #  #  #  #  #  #  # ] )   9 /   9     +   
  + 
   + 01 !  4$32#"&54632" 32654&#">325.NKKgg766666676̹Ȣ@nqg1iaQL7hI@@II@@= ;g*     xN       +  
  + 
01 !  4$32%!!5!NKKgg.L7h*     xN   1 =   +    +      +  A     ]A   )  9  I  Y  i  y              ]A   &  6  F  V  f  v              ]A     ]A       ]A    )   9   I   Y   i   y                     ] #   9 /   9 ;  9 ;/A  ;  ; ]A  ; ) ; 9 ; I ; Y ; i ; y ;  ;  ;  ;  ;  ;  ; ] 5    +  
 ) + 
   +  2 8 + 201 !  4$32#"&5463232654&'>54&#"2#"&546NKKgg=;=>?<;=p$f˻e#q0330233L7h;99;;::G]|	pS{{Sp	|-..-.-.-    xN  & 21   +  - ' + -    +  A     ]A   )  9  I  Y  i  y              ]A   &  6  F  V  f  v              ]A     ]    9 #   9A  '  ' ]A  ' ) ' 9 ' I ' Y ' i ' y '  '  '  '  '  '  ' ]    +  
  + 
 * 0 + *01 !  4$322 54&#"3267#"&'4632#"&NKKgg͸Ȣ?nrf3i_O76588567L7h!;f)HBBHHAA     xN   $ 0    +  (  + ( "  + "   . +    и /  A     ]A   )  9  I  Y  i  y              ]A  .  . ]A  . ) . 9 . I . Y . i . y .  .  .  .  .  .  . ]  
/   +   +01 !  4$32!5##7#"&54632"32654&NKKggِ&*''*)'')L7h*& nmmn    	=  ( F     76767654'&'&'!5%3!!  '&'&'&5476767̆mo5885om4mo5885omP\|~<??<~||~<??<~|96oooo6996oooo6}9:݈@>}~~}>@@>}~~}>   	=  A _     76767654'&'&'!!5676767654'&#"5>32  '&'&'&5476767̆mo5885om4mo5885om)4
\)NBCkPQT`aFnoIkl\|~<??<~||~<??<~|96oooo6996oooo6_.X<<;_<<5'(]]IBBZooV@>}~~}>@@>}~~}>  	=  O m     76767654'&'&'#"'&'5327654'&+5327654&#"567632   '&'&'&5476767̆mo5885om4mo5885omttBAzyLOPUDWOPJJx??zBLL\R[PGjkr=\|~<??<~||~<??<~|96oooo6996oooo6yNNtaa'(<<rj<;0/Z\bSTd	@>}~~}>@@>}~~}>    	=    + I     76767654'&'&'!33##!5   '&'&'&5476767̆mo5885om4mo5885omh*˪+\|~<??<~||~<??<~|96oooo6996oooo6@>}~~}>@@>}~~}>   	=  ? ]     76767654'&'&'!!67632#"&'532654&#"  '&'&'&5476767̆mo5885om4mo5885omz##$#utKSLHMVA@AC\|~<??<~||~<??<~|96oooo6996oooo6cnm)}|X@>}~~}>@@>}~~}>    	=  , J h     76767654'&'&'"327654'&.#"67632#"'&7632   '&'&'&5476767̆mo5885om4mo5885oml@@lm@??@=|<UT/GGVhiڵmn=|^\|~<??<~||~<??<~|96oooo6996oooo6KJKKJKllE&%mnޟ- @>}~~}>@@>}~~}>  	=  $ B     76767654'&'&'!#!  '&'&'&5476767̆mo5885om4mo5885om\ N\|~<??<~||~<??<~|96oooo6996oooo6`E#@>}~~}>@@>}~~}>     	=  + B N l     76767654'&'&'"27654'&%.546  &54632654&#"  '&'&'&5476767̆mo5885om4mo5885omsBBBBCBBBhtdthuABtԄ9tihvvhit0\|~<??<~||~<??<~|96oooo6996oooo6,=>=>>>kl>=EggOOss\hh\]hh@>}~~}>@@>}~~}>  	=  < L j     76767654'&'&'532767#"'&54632#"'&27654'&#"  '&'&'&5476767̆mo5885om4mo5885om=|<UT.GHVghڴmm=?>m@??@ml@@@@J\|~<??<~||~<??<~|96oooo6996oooo6lkD%%lmޟ橨KJJKKJJK@>}~~}>@@>}~~}>     	=  + 8 C a     76767654'&'&'"32654'.  735733!   '&'&'&5476767̆mo5885om4mo5885omT,+VUVV++2QPPQΠP3p\|~<??<~||~<??<~|96oooo6996oooo6{z~{ӟ>-,g%&݈@>}~~}>@@>}~~}>   	= 
 (  !5!#%  '&'&'&5476767{\|~<??<~||~<??<~|#:9q @>}~~}>@@>}~~}>  	= # A  676767654'&#"67632!5   '&'&'&5476767lkIonFa`TULkCBN)\\|~<??<~||~<??<~| ooZBBI]]('5<<_;<<X._@>}~~}>@@>}~~}>   	= 1 O  >54'&#"67632+32#"&'327654'&   '&'&'&5476767irklGPQ\\LLBz??xJJPOWDUPOLyzAB2\|~<??<~||~<??<~|dTSb\Z/0;<jr<<('aatNN=@>}~~}>@@>}~~}>     	=   +  !	!335#$  '&'&'&5476767hno\|~<??<~||~<??<~|@>}~~}>@@>}~~}>  	= ! ?  67632#"'&'32654'&#"!5   '&'&'&5476767CA@AVMLHSKtu#$##\|~<??<~||~<??<~|=|}'mn% @>}~~}>@@>}~~}>    	=  , J  2#"&5476.#"32654'&#"67632   '&'&'&5476767Pm@??@ml@@C|=⇆nmϵihVGG/TU<|=\|~<??<~||~<??<~|+KJKKJKӟ޸nm%&Ell@>}~~}>@@>}~~}>  	=  $  !35$  '&'&'&5476767>h\|~<??<~||~<??<~|@fE@>}~~}>@@>}~~}>   	=  $ 0 N  2"'&476' 654'&'>54& 74632#"&  '&'&'&5476767YtBBBCBBBB/tBAuhtt-tihvvhit0\|~<??<~||~<??<~|=>lk>>>=>=EssOOgg]hh]\hh@>}~~}>@@>}~~}>  	=  . L  %3276'&#"32767#"&'"'&547632   '&'&'&5476767!C>?=ↆmmдhiVHG.TU<|=Al@@@@lm@??@\|~<??<~||~<??<~|/޸ml%%DklgKJJKKJJK@>}~~}>@@>}~~}>     	=   % C  2#"&5476$  '!5##7  '&'&'&5476767e22dedd22TUUTBU¡\|~<??<~||~<??<~|{zz{ӟ>-/g#&%q @>}~~}>@@>}~~}>   u Pj   	!!5!!Pp#@pp   pt   	7%FN4NG  u P8   5	zD<22pJJ    t   	'-ZKFGN  uP   !!u\lE>~~>  u u 2   "&'&'&5476?!".'&47>3!'&'&54767>2	p4,
		,$
		
$,		
,42p
"2"
p    u P8   !5!	%JZPJJ  u P8   !5!	%JHJJ  u P8      #3#3#3!!5	xx<<oJpppJJ     u P8      55!#3#3#3oPxx<<΄ΊXXXX   u ^}   	!!Y$%   PD    !	6>l>>    PD    	!	DR>l>>   P   	Blvv  u Pb   3!5	5!"'&'&'&u##+*15J1*+##0+*%!JJ!%*+   u P8   47676763!5	5!"u##+*15J1*+##0+*%!JJ!%*+0      !!	^r{VXeoo     u P8   55!Dq΄Ξ0     u j    %5!!53		!<9h9>     u j    %5!!53		!<9h9>     + Z    !73#57!!+ Id&+ъ2&     + Z    5!'53#'!!!+dI|&2     2 
   !'!'!53	!Odcndh    2 
   3#5!7!!!	ndnd;ch      dd    !53#'5!'!	!]n2n22r-hJdc;dJ      dd    7!573#5!!	!2+2n2nr-hLJd;cdJ    < !  6767632#"'&'&'!	<'CZmo~yti^Z...*^Vqo~yti^?)X6nGCZ.//+]Yonzqi_X0//+]>Iʞ   	 BP      " & * .  37#37#37#37#5!!!!3'#3'#3'#3'#<<<<xíy_<<(<<(<<(<<ZPh      pt>     7&#"7'7	!%*BF8WU{FC*9oX:W  ubP     55!5!!'!XXddPR    t     '327''	!!iFB*8X:*CF9XU   pt> 2  %&#"6767&'&"67632&'&547676767tBEHY'#&N'$X$)./,0+""" /%Hp*G&/$##*0,0.+"W!'&'&#'ZGGC     uaP /  4767!"!47676763"'&'&'&5!3!&'&5P%T)#$"/*11*/"X$#)%eeZ'&$(0+.!"-+0($&'Ze    t 2  &'&'&'&54767#"'&'2767&'&'32t)H%X"""+0,0-+"$'N&#/'YHEBCGGZ'!&'&'$W"+.0,0*##"/&G    s PX  + B  6%"'&'&'&547676$47676762"'&'&'&'&'&547676762$/+z>_$#R#af#R#)>xbQuR$'68" vc   <  .  676767632#"'&'&'&%&'&54767&'&5476A ''+/54<3o8n23'9%%bb%&:?$ fLLf#&#/:&'+-23-+'rr'+-32-+     V2 e   "'&'.54?654'&'&'&#!"#!".4?64/&4676763!23!276767654/&546767622	Zrrd	Z		c

c	    2 g   "'&'.54?654'&'&'&+"#!".4764'&4676763!2;276767654/&546767622pW\xj	\W	
 4
	    u P^   +  #76767&'&/3#6767!5!!5!&'&'PSJl
R&GG&R
lHSi*n::n**OUä'66'U=;JHd)))dHJ;=    n>&   *'$& 76#"'676 7>	7>{J<p1
GM+SR-PAdmR     j:&   567$'& 76&#" "j+MG
1p<J{>7mdAP-KS  #u   	  	!	!j.u-1   [    3%!!!!(U2xxx  [    #3!5!!5㢢xUx2x      !	!pp      	!	!p  &H  H   &I  I    T  `   	'#'#'##'RKKR@R"~KKLR     Vb   #73373737@RKKRRLKK~"R      ]z ?  3276767654'&'&'&#"7#7676767632#"'&'<JHUYGK<9! <:LHUVJI>9!ww
"3\^wvlyZ^2103\^wvox[9! <:LHUYGK<9!>9MwWOw\^2106Y^wvow\^2104[   . ]z ?  #"'&'&'&54767676327#7&'&'&'&#"3276[xovw^\3012^Zylvw^\3"
ˑww!9>IJVUHL:< !9<KGYUHJƪ[4012^\wovw^Y6012^\wOWˑwM9>!9<KGYUHL:< !   u$ % 9 M  '7! &'&'&'#536767> !'7$"!3!&'&'&'!#!2767676w1cbbc11cbbc1-ƑTSEF"ee"FES"FESTTSEF"ȌwGAvcbddbcvAGHBwcbddbcwBHƑ##EFS $ SFE#$SFE####EFS   d Q 	 	 
2@	@@	00	]1@
	 
 990@		  	 <<@<<KSX 	<<		 Y5!!d	KƑ<Ƒ    u Q 	 	 
2@	OO	__	]1@
	 
 990@		  	 <<@<<KSX 	<<		 Y'7!5!'7w	KƑȌwƑ   d Q  ڶ
	 22@PP_
_O
O]1 @
 	9220@   <<@<<@

			
<<@<<KSX 
<<<< 

	Y5!'7'7!dƑwƑ<ƑwwƑ     d Q   !!5!!	x(SwSK7SSK    u Q   7'!5!'7'7!5	KKSwS(7KKSwwS    d Q    7'!!5!'7'	KKKKSwS"Sw7KKKKSSSww   d Q   !5!3#
Ƒw[
Ƒ6   u Q   !'7'7!#3e[ƑwƑww\   d Q    !!!5!53#
xKKSwSKKSS    u Q    !7'#3!'7'7eKKxSwS͖KK\SwwS   u Q   #5377777!'7'7#'''QcyAcƑwmccƑwwƛ   ,@V,  ,+V,  ,@'V,V,  , V,   , @'V,V,   , +'V,V,   , @'V,'V,V,   @V  ,@'V,V  ,@'V,V  ,@'V,'V,V  , @'V, V  , @'V,'V, V  , @'V,'V, V  , @'V,'V,'V, V  +V  ,@'V,V  ,+'V,V  ,@'V,'V,V  , +'V, V  , @'V,'V, V  , +'V,'V, V  , @'V,'V,'V, V  @'VV  ,@'V,'VV  ,@'V,'VV  ,@'V,'V,'VV  , @'V, 'VV  , @'V,'V, 'VV  , @'V,'V, 'VV  , @'V,'V,'V, 'VV   V   , @'V,V   , +'V,V   , @'V,'V,V   , 'V, V   , @'V,'V, V   , +'V,'V, V   , @'V,'V,'V, V    @'VV   , @'V,'VV   , @'V,'VV   , @'V,'V,'VV   , @'V, 'VV   , @'V,'V, 'VV   , @'V,'V, 'VV   , @'V,'V,'V, 'VV    +'VV   , @'V,'VV   , +'V,'VV   , @'V,'V,'VV   , +'V, 'VV   , @'V,'V, 'VV   , +'V,'V, 'VV   , @'V,'V,'V, 'VV    @'V'VV   , @'V,'V'VV   , @'V,'V'VV   , @'V,'V,'V'VV   , @'V, 'V'VV   , @'V,'V, 'V'VV   , @'V,'V, 'V'VV   , @'V,'V,'V, 'V'VV   ,p  V,p  ,p@'V,V,p  ,p+'V,V,p  ,p@'V,'V,V,p  ,p'V, V,p  ,p@'V,'V, V,p  ,p+'V,'V, V,p  ,p@'V,'V,'V, V,p  ,p@'VV,p  ,p@'V,'VV,p  ,p@'V,'VV,p  ,p@'V,'V,'VV,p  ,p@'V, 'VV,p  ,p@'V,'V, 'VV,p  ,p@'V,'V, 'VV,p  ,p@'V,'V,'V, 'VV,p  ,p+'VV,p  ,p@'V,'VV,p  ,p+'V,'VV,p  ,p@'V,'V,'VV,p  ,p+'V, 'VV,p  ,p@'V,'V, 'VV,p  ,p+'V,'V, 'VV,p  ,p@'V,'V,'V, 'VV,p  ,p@'V'VV,p  ,p@'V,'V'VV,p  ,p@'V,'V'VV,p  ,p@'V,'V,'V'VV,p  ,p@'V, 'V'VV,p  ,p@'V,'V, 'V'VV,p  ,p@'V,'V, 'V'VV,p  ,p@'V,'V,'V, 'V'VV,p  ,p'V V,p  ,p@'V,'V V,p  ,p+'V,'V V,p  ,p@'V,'V,'V V,p  ,p'V, 'V V,p  ,p@'V,'V, 'V V,p  ,p+'V,'V, 'V V,p  ,p@'V,'V,'V, 'V V,p  ,p@'V'V V,p  ,p@'V,'V'V V,p  ,p@'V,'V'V V,p  ,p@'V,'V,'V'V V,p  ,p@'V, 'V'V V,p  ,p@'V,'V, 'V'V V,p  ,p@'V,'V, 'V'V V,p  ,p@'V,'V,'V, 'V'V V,p  ,p+'V'V V,p  ,p@'V,'V'V V,p  ,p+'V,'V'V V,p  ,p@'V,'V,'V'V V,p  ,p+'V, 'V'V V,p  ,p@'V,'V, 'V'V V,p  ,p+'V,'V, 'V'V V,p  ,p@'V,'V,'V, 'V'V V,p  ,p@'V'V'V V,p  ,p@'V,'V'V'V V,p  ,p@'V,'V'V'V V,p  ,p@'V,'V,'V'V'V V,p  ,p@'V, 'V'V'V V,p  ,p@'V,'V, 'V'V'V V,p  ,p@'V,'V, 'V'V'V V,p  ,p@'V,'V,'V, 'V'V'V V,p  p  Vp  ,p@'V,Vp  ,p+'V,Vp  ,p@'V,'V,Vp  ,p'V, Vp  ,p@'V,'V, Vp  ,p+'V,'V, Vp  ,p@'V,'V,'V, Vp  p@'VVp  ,p@'V,'VVp  ,p@'V,'VVp  ,p@'V,'V,'VVp  ,p@'V, 'VVp  ,p@'V,'V, 'VVp  ,p@'V,'V, 'VVp  ,p@'V,'V,'V, 'VVp  p+'VVp  ,p@'V,'VVp  ,p+'V,'VVp  ,p@'V,'V,'VVp  ,p+'V, 'VVp  ,p@'V,'V, 'VVp  ,p+'V,'V, 'VVp  ,p@'V,'V,'V, 'VVp  p@'V'VVp  ,p@'V,'V'VVp  ,p@'V,'V'VVp  ,p@'V,'V,'V'VVp  ,p@'V, 'V'VVp  ,p@'V,'V, 'V'VVp  ,p@'V,'V, 'V'VVp  ,p@'V,'V,'V, 'V'VVp  p'V Vp  ,p@'V,'V Vp  ,p+'V,'V Vp  ,p@'V,'V,'V Vp  ,p'V, 'V Vp  ,p@'V,'V, 'V Vp  ,p+'V,'V, 'V Vp  ,p@'V,'V,'V, 'V Vp  p@'V'V Vp  ,p@'V,'V'V Vp  ,p@'V,'V'V Vp  ,p@'V,'V,'V'V Vp  ,p@'V, 'V'V Vp  ,p@'V,'V, 'V'V Vp  ,p@'V,'V, 'V'V Vp  ,p@'V,'V,'V, 'V'V Vp  p+'V'V Vp  ,p@'V,'V'V Vp  ,p+'V,'V'V Vp  ,p@'V,'V,'V'V Vp  ,p+'V, 'V'V Vp  ,p@'V,'V, 'V'V Vp  ,p+'V,'V, 'V'V Vp  ,p@'V,'V,'V, 'V'V Vp  p@'V'V'V Vp  ,p@'V,'V'V'V Vp  ,p@'V,'V'V'V Vp  ,p@'V,'V,'V'V'V Vp  ,p@'V, 'V'V'V Vp  ,p@'V,'V, 'V'V'V Vp  ,p@'V,'V, 'V'V'V Vp  ,p@'V,'V,'V, 'V'V'V Vp  ,p  'V,pVp  ,p@'V,'V,pVp  ,p+'V,'V,pVp  ,p@'V,'V,'V,pVp  ,p'V, 'V,pVp  ,p@'V,'V, 'V,pVp  ,p+'V,'V, 'V,pVp  ,p@'V,'V,'V, 'V,pVp  ,p@'V'V,pVp  ,p@'V,'V'V,pVp  ,p@'V,'V'V,pVp  ,p@'V,'V,'V'V,pVp  ,p@'V, 'V'V,pVp  ,p@'V,'V, 'V'V,pVp  ,p@'V,'V, 'V'V,pVp  ,p@'V,'V,'V, 'V'V,pVp  ,p+'V'V,pVp  ,p@'V,'V'V,pVp  ,p+'V,'V'V,pVp  ,p@'V,'V,'V'V,pVp  ,p+'V, 'V'V,pVp  ,p@'V,'V, 'V'V,pVp  ,p+'V,'V, 'V'V,pVp  ,p@'V,'V,'V, 'V'V,pVp  ,p@'V'V'V,pVp  ,p@'V,'V'V'V,pVp  ,p@'V,'V'V'V,pVp  ,p@'V,'V,'V'V'V,pVp  ,p@'V, 'V'V'V,pVp  ,p@'V,'V, 'V'V'V,pVp  ,p@'V,'V, 'V'V'V,pVp  ,p@'V,'V,'V, 'V'V'V,pVp  ,p'V 'V,pVp  ,p@'V,'V 'V,pVp  ,p+'V,'V 'V,pVp  ,p@'V,'V,'V 'V,pVp  ,p'V, 'V 'V,pVp  ,p@'V,'V, 'V 'V,pVp  ,p+'V,'V, 'V 'V,pVp  ,p@'V,'V,'V, 'V 'V,pVp  ,p@'V'V 'V,pVp  ,p@'V,'V'V 'V,pVp  ,p@'V,'V'V 'V,pVp  ,p@'V,'V,'V'V 'V,pVp  ,p@'V, 'V'V 'V,pVp  ,p@'V,'V, 'V'V 'V,pVp  ,p@'V,'V, 'V'V 'V,pVp  ,p@'V,'V,'V, 'V'V 'V,pVp  ,p+'V'V 'V,pVp  ,p@'V,'V'V 'V,pVp  ,p+'V,'V'V 'V,pVp  ,p@'V,'V,'V'V 'V,pVp  ,p+'V, 'V'V 'V,pVp  ,p@'V,'V, 'V'V 'V,pVp  ,p+'V,'V, 'V'V 'V,pVp  ,p@'V,'V,'V, 'V'V 'V,pVp  ,p@'V'V'V 'V,pVp  ,p@'V,'V'V'V 'V,pVp  ,p@'V,'V'V'V 'V,pVp  ,p@'V,'V,'V'V'V 'V,pVp  ,p@'V, 'V'V'V 'V,pVp  ,p@'V,'V, 'V'V'V 'V,pVp  ,p@'V,'V, 'V'V'V 'V,pVp  ,p@'V,'V,'V, 'V'V'V 'V,pVp    d ?Q    !!!5!53#O<KKSwS$KKSS    u PQ    !7'#3!'7'7eKK<$SwS͖KK\SwwS       	'#'##'RvvRRg9vQvR       !#733737RvvRRvQv9gR     ]   A  3276767654'&'&'&'476767#"'&'&'& <:LHUYGK<9!>9MG89!03\^wZMw\^2106Y^wvow\^21YGK<9! <:LHUVJI>9!5 9:LHUow\^2
!3\^wvlyZ^2103\^wv     ]   A  4'&'&''7327676767#"'&'&'&547676767'7!98GˑM9>!9<KGYUHL:< 12^\wovw^Y6012^\wMZ̑w^\30UHL:9 ˑ!9>IJVUHL:< !9<KGYvw^\3012^Zylvw^\3!
̑w2^\wo      /  0&567#";!"&=4&+5326=463O/"oW5UU5l>>l<D:8INxWXXxtsݓ      .  7&54&'>7!2;#"#!532654&+Wo"/O/l>>l5UU5NI8:XD<stݔxXW   g   	   %5<'       
  3	5j'
     
  #3	<
{
     'e    			''6UU  'e    		'''cUU    'e   		'''cUU     'f   			 'fU::U     'f   			 'fU8U     #u   	u-       3!3!!#!#!5         333333#######5Szzz     :O    :  !!" 767>54'&'&'&$  $'&'&547676zeig44hi}&eig44hlzVGFFGrGFFG.48fj~fh4666fj}fk34ūʪ    :O  6 B  " 767>54'&'&'&$  $'&'&547676!!#!5! zeig44hi}&eig44hlzVGFFGrGFFG

48fj~fh4666fj}fk34ūʪ    :O  6 B  " 767>54'&'&'&$  $'&'&547676			'	 zeig44hi}&eig44hlzVGFFGrGFFGsqrq48fj~fh4666fj}fk34ūʪqrqs    /,&  '  '      /c #  5!67676&!!'&'7767:#mDK6<A 2mDK6<A/U5O9:[<JU5O9:[     /c +  5!67676&!!!!'&'7767!5!7JmDK6<A
+!mDK6<A*U5O9:[/U5O9:[    /c #  %'&'77675%67676&B0mDK6<A#X-mDK6<A_U5O9:[vU5O9:[     /c > I  %'&'7767'&'&'&54767676767676&&'&'67k?J "mDK6<AK>>>?J "mDK6<AP;; $0"#>՜U5O9:[>?JKVXKK>?'U5O9:[":;PG*#nb11S$    /  D  65'67673''&'776?&'&'&'&5367676&],:dh^##B<\mDK6<A+(XC>'%*-6HmCK6;B5>\/h[aUTE>&U5O9:[
$A<]Y]7<7*,U5O9:[    /c  '  !!!!67676&!!'&'776 ] lDK6<AnMlDK6<B*U5O9:[(؝T5O9:     /c ; ?  %'&'7767367>54'.'&"67676&!!4.mDK6<A!HD:+.N&N//4-A"mDK6<AlTD&$$$IFY TU5O9:[)N\59,/NԜU5O9:[$UD]YWWIF@   .5  ;  !!&676$&632''&'7767327654'& hMWS,mDK6<A47ʑHWmDK6<A-6aC?^lO $|kU5O9:[e$GAU5O9:[o8(6N;,   /c  S W  67>54'.'&&767676&'&'776?&'&'&'&4767676!!A8+.N&N//44//N&N./(mDK6<AlTD&$$$IFY4.mDK6<BTKG&$$'FJX: N\59,/NN/,95\NU5O9:[$UD]YWWIF&U5O9:[	!KH]XW^BH"   /c # ' +  7!767676&!!'&'776?3!#3tomDK6<A-mDK6<A.#fNU5O9:[hU5O9:[   /s @  '&'7767#5367676&32#5676'&'&#3mDK6<A0t:t%mCK6;B"6*0#"&$#0)7 6U5O9:[t:p:tU5O9:[$#!2-41`##     /c )  '&'7767'	767676&7	#mDK6<A'؆ mDK6<A(;U5O9:[')U5O9:[م    /c 3  76?67676&#4'&''&'7767#ULmDK6<Am?U$
EmDK6<AD'$,k`ԜU5O9:[IbT3<U5O9:[.T     /c 3  '&'7767&'&367676&67653UJmDK6<ArAU$?mDK6<A="$fk^МU5O9:[KbT3nU5O9:[.  /b0  !  #"'&'7327067632&#"0!5!mDK6<AcmDK6<Ah@W6N89\fW6N89\     b  !  #"'&'7327067632&#"0!!mDK6<AcmDK6<A<@W6N89\fW6N89\,     )    H&   H&  '     
  5	5<:       
  55:1I11J     
   5	53#<:B      
   55%3#<:1I11J    
   5	5%3#< :s      
   553#:1I11J    
   5	53#<:      
   55	3#<:1I11J     C
  ; B  #"'&'&'&#"5>32326#"'&'&'&#"5>323265j`k^Xbian
^Vgj`k	^Xbk`k^VfUPE:=MSNE;=KPE:=LTPE:>KPN   C
  ; B  #"'&'&'&#"5>32326#"'&'&'&#"5>3232655%j`k^Xbian
^Vgj`k	^Xbk`k^VdUPE:=MSNE;=KPE:=LTPE:>K       %!!'7!5!7%5OOK>uMcu̵N       5!!'7!5!75%OOK>;ju   
 3 :  3267#"'3267#"''7&#"5>327&#"5>325C2'Vgj`@L&zOVgj`kFF2'Xbk`?M&zOXbiajEKUPEq,KUPE:ELTPEs+MSNE8PN     
 3 :  3267#"'3267#"''7&#"5>327&#"5>3255%C2'Vgj`@L&zOVgj`kFF2'Xbk`?M&zOXbiajEKUPEq,KUPE:ELTPEs+MSNE8         5!5!-5%%\ri         !5!!5!%%55%\iw    :   &  #"'&/&#"5>32326!!5j`k^Xbian^VePE:	=MSNE;=KFPN    :   &  #"'&/&#"5>32326!!55%j`k^Xbian^VePE:	=MSNE;=KF   
  " )  #"'&/&#"5>32326-5%%j`k^Xbian^VePE:	=MSNE;=Ko i    
  " )  #"'&/&#"5>32326%%55%j`k^Xbian^VgPE:	=MSNE;=Koi     B      !!!!55%%%|3Wi   B      !5!5%%55%Ei    ,      55%-5%%v i     ,      5%%5%%55%QTi{      
  	55<1       
  5	5<1LJ11       
   	55%3#<1      
   5	53#<1LJ11     m     !5!!5!5`NP     m     5!5!-5:  [     	555PPNP     [     55-5#;    p  $  .#"#"&'532767676325gV^
naibX^k`jUK=;ENSM=:EPKNP    p  $  .#"#"&'53276767632-5gV^
naibX^k`jUK=;ENSM=:EPK       % ,  !!!!.#"#"&'532767676325gV^
naibX^k`j|UK=;ENSM=:EP[NP        % ,  !!!!.#"#"&'53276767632-5gV^
naibX^k`j|UK=;ENSM=:EP[   -@    $  !!!5!676762!!&'&'&!!A%0M
6WYYV7
N0/H7'H?a93[2332[0<f:H'%,     Uy    %!5 %5$|}CUSx|  Uy    7!!  %$}|C|SU    y    7!!!'7! %5$>~~K|}CMuuUSx|    y    7!!!'7!  %$>~~K}|CMuu|SU  ]a     !5!5 %5$-&obn%$ ffuW    ]a     !5!5  %$bo&-nuf $%   a 
    %5$!!!'7!5!7!5!7-&ob,JXv2Jv2D%$ ffuWXuWuW     a 
     %$!!!'7!5!7!5!7bo&-,JXv2Jv2Duf $%tuWuW       ; F  #"'&'&'&#"5>32326#"'&'&'&#"5>32326 %5$j`k^Xbian
^Vgj`s	^Xbk`k^Vg-&obPE:=MSNE;=KPE:=LTPE:>KR%$ ffuW       ; F  #"'&'&'&#"5>32326#"'&'&'&#"5>32326  %$j`k^Xbian
^Vgj`s	^Xbk`k^Vebo&-PE:=MSNE;=KPE:=LTPE:>KRuf $%     y 3 >  3267#"'3267#"''7&#"5>327&#"5>32 %5$C2'Vgj`@L&zOVgj`kFF2'Xbk`?M&zOXbiaj-&obEKUPEq,KUPE:ELTPEs+MSNE8%$ ffuW   y 3 >  3267#"'3267#"''7&#"5>327&#"5>32  %$C2'Vgj`@L&zOVgj`kFF2'Xbk`?M&zOXbiajbo&-EKUPEq,KUPE:ELTPEs+MSNE8uf $%    q     5%55P#PPN   q     55%PfP       !	!'	hC@?)C?r@h       777!%	LC@C{?C@C?        !7	7hC?C)@hC?Ch@        !''	!	L)C?8h@C@?   7 ^P 	   %	!	!%7'!55![$$/]^$$%%-___   7 ^?   %	!![$^$$ 6  ~   	!!6$$$ 6~   	!!~%$     !'	?@h       	??       7	7@h0h@        !	h@0?     7 ^P 	  %	!	![$$/^$$%%    6~ 	  !	!!	!Y%%$$$$    ug   #75!5!7ތwUƑ4&Ƒ    u
g8   	'!5!5'eƑ8w&Ƒ    M?   7!!7wUƑw4Ƒw     M
?8   3'!!'֌eƑ8wƑ   %    !%!!W7 r     %    !!!W7     %    !!,7r<R      %    !!cr<R    !%    	vdxx    !%    	u    !%    	!	uv}x   !%    !	x     %  	      # ) - 1 7  #535#5#5#5##5#5#5##5##53#5#5#5##5qrrrrMrqrrrrrrrtr$ttttrtttttrttr     $#   	!$VVm   $#  	  !	!z0VVOm     Ff    			vvr5kk\SS  Ff   7	\SS    "   	!	R[RG     p (   $   %p@*X֖  MM   	:lLF    MM  	  		N lVF     
     !3#3#!!#3+3۲    
     #3!3#3#!#fmai      !676=3!!#4767;9g;;iC 9JH;JI         ! !#!#332764&+32o>=zp~lO76lN    f   $ @ $! 	%2999991 @
	! 	/9990@#"$! %KSX9Y"$]@ !"#$66EEVVP&ee`&]2654&+;#  ! !.#yiiy{x<NL'O}@f7q^?ZgfX\D֔-XspR  B # +  !5#"''7&54$!37&'&#">3 326=mEHrVepcM"UhCsUst	-Peetf]+l^j^Ÿo'..[%m)  B   33!;!"'#&5#33_>\oMA^;3 ÞN7 :[ >   t7    y    )54'&'&'&#"!!67632!!$$.p@@fQ[[nedgo77#WVb./ww3     q   !!#!!!K&b+1#AL!=    y   !!	3!#!fwKK-    \%   !!!!5!s!7A     \`   !!!!5!uN`f     b'    5!!5#   !226&#"mb_+ނyz   f9   % !#3265#!!	!9NQx{TV#%   
  '  
  !!!!!Z_5Xg+   c'    %!!>3   !"&"32654&mb_ނyPVPzy     :{   0!!!2#54.#"twHf]ee/'A` df<!9!"    =  	   0!	!!	!!2#54'&#"&DDq s TE^\Qo=a][E     H  s{   0!!!!!2#54.#"yy\+nV5ee.K9`Zdf<!9!  N      !!'7'67632%7654#&&vgGwhHl
nd&P#/3Y).=8#?H%*K          !!!!d     `   !!!!f9`V'      j    2!$763676'&+*6j@@TU}dxaEF     327674&+5!2!#5#"'&'//./I>
LfDXZ}(1
XP|\k23  X'{      &"26     454&"6MQsPPtPGCEkU|}j}PPsOO988b	\q       `   !5!5!5!5!53` Sgt  d       33!i    \ 5  .#";#"'&'&'&'32654&/&'&54$!2{hYuғNzUNOA7H2K|~[fg {78LP<C!2̼xAGx/5ELMTNFL!2gi%    \q   35!!;#"'%$\!kUlp_³#7-DGx     \|`   !76#"3$3276#"#"!$36LHgL0PL*;OiBtw~D/      $ _    ! $'!3676&7#"7!37!h2v<ugq76ј n<RQ~-     S$	` #  !"$'5!32654&76'"!!$72)b4U_Qĉ=X˟Y([iq\H	T  Wu 	 .  63 7# 6%#"?3327632#5&7$'A
 5`9? (.


IBa=r6eC) x^cZ3<A,=G)%'	"|  Q-_   !6#"!!$36SeibÛ<J-W     T._   !6#"!!$32$32!6#"Ulh`ʵA!Ibgk.V_Q  (X  $  6#"72767# 7#"5!;7!$32$tN_r`1'v^	`%(z]8B~+BAk6Y    U` 	 "  6#&37$36!6#"!7#&7!$%YFr4}~ <$JWN  P  `   )6#"!!$3h~9p8`    T/ 	   6#"327!#"7!$32obKqm]IK4UVǰ  P_ 	 "  6'"327!7#&76'!!$32$36iHf
#![j}}Ŵ=TK3U_     W2  (  3267$76%'&#"#"=!326323UF)7q{c&J]˄17Sr#1X-kxm|;@@]kJmѢE?Jӆ   P     )6#"!'! !5&#"$3 i}iɯ"q ]8|{9At   T_   %#"7!27!367!!7#"L;h8\8    T_   %#"7!77!!8<o~8Ƭ    T.   !7!"7#"7!327327!LA׻J@3g2h8]BڟqzDh.Npv^'     V   !$32!6#"!7#"7!32VuZEOZh~;#raHTQ  T   !327!!7#"7Zih{>a&鮻¯   ^$_    6#"$7327! !$36jq,!m\ΟT2;P-KCFF.Ǳ     T-J   %#"7#"7!327!327'!!@r8\À$Cm¯议讯i   \-_ 	  -  6&3276#27!7#'!7!"!$!2$!2oMp%rtH8	U@,7/-EnDV-;;1A   P.   %!!!%!%7!!_gQCA'ď?RBUCE3:YEoB{o S{x~    Z  _   $32!6#"!!,S~bǲ7Q_     T.`   %#"7!727!!A:e|;¯=     T$_   %#"7!327! !#532$2<h{8;BUIO讯Wݳ     Z-   !!$32!6#"t]KJ<=Q~hB8Q     V%`   27# 7!6!6!6#"Oˀ$:"1wtqiy֣3AǨ    YD    3 7# %!3VCin,E*H'jJKp'ֲ\-XC)    Z.`   !6#"!!$32$32!6#"={_Ё\D?[)}[ğ|`N   Z%_    !76#"6 %'73 5&#"!!66'}TZxd>11#஫iweJ|n<    ^$_   ! 7!%`6(p=$7$=M   Z.    # '!327!&'!%&'
}a_ӯt",(PdRYQr|7dǿ     Z	_   )7#"6#"!!6!2327!Y(OkŶ< dgi91宫^    Z.   6"!!3#"$72!Xg;*;UYVC  W   ! !3 7675!7632r,R*1>/!QH$2aav;<   [.   %!7#"!37!YxO,8|hsNK>l1A5     U.x_   %!7!#"7!32%!wjJ:"y;Fs>F܏     \  $   7!6! 6%!!5&"% QDief)*Uw3*+	r29RM[n'  q
  !  4676  '&%2>54."q_OO__OO-;IRI55IRI5 %6vv66ww6?.*9 9**9    f"   %  6$  $!327676!&'&#"?`?扉!J_UK!K_VJ.;zzzzP'N"P'N     f"  	   #  >7!! 6$  $!.!Et!t!??`?扉p?!!$]$;zzzzgm[  i  d 
   )!	5!7!dSSffڗ:kK     i  d 
   !!	!5!i\ٖ-:k    s  Z 	    %!5	5!7!!ZddؗӖ-,   c       !!!)!$~$R}+    
  '1   
  ' 9      (     P      " 4 E I  4676  '.%2>4."4676  '.%2>4."!kY.YkkYYkP%dpdJ++JdpdJ+rkY.YkkYYkP%dpdJ++JdpdJ+y :l'UU'l:<k'UU'k;&"&""&:l'UU'l:<k'UU'k;&"&""P     T   !!!!!!!!!!8A=>B9qy#         )	!!	xSqg       e     !!!W}X$Y$O$        	!!	!(}	mRqNg   f"       6$  $67654'&|:NN9?`?扉H%:Fg?%%;zzzzM}O[ȇ>     fS"    )  &""''7&6$327267654J:U>±ݜs?ñoU>|'NC.Kۭh;zLgz0&NC͍     ?      !!!!}}}$$$O$   ,     )	!!3xS{*I       !!!!!!dy      !!	!	!	!0AD=             !!!!F}}$O$$O$      	  !!!}7g       !!!!!!K$o$!$}}   8      ;   3!!!!!/     # )  &#"327# /!"'32#"63 76!2#cllcr||rcllcr|ww|r1          !#35#3!3!3#3#!35##HH"#JJH                3!!!%\q      = ,         !!!!!5!!!!#hH"#J      ?    3!!!}}$     Wx    4'! $5 %!!hB>dU=#m     q    1 A  2>4."4676  '&2>4."4676  '& 9IPI44IPI4q_OO__OO09IPI44IPI4q_OO__OO;+'5:4''4f0hh00ii0;*'5:5&&5f0hh00ii0    f"  #  46$  $&%2>54."f?`?扉>|JJ|}Izz❞zz͑CNNedNN   f>"  .  327767654."46$ ' $&>_^UF%J|}Ir?`?D>d͑CN&^#([edNNczz❞b=z        )!!!!!~$8$9yd      ?     !!!}}X$Y$O$            !!!!!p|}Wmhhmhh6h   f"  # '  46$  $&%2>54."!f?`?扉>|JJ|}Izz❞zzΑBNNedNN$    f"  .  2>54'&''&#"46$ 7 $&I}|J%BU^_>r?`d>DdNNde[(#^&NCΞz=bzz   f  ( 1     "&547"3&5462264&#3264&L|T%%T|p32H33#%23$#33fejvvO??OvvjMmMMlN<MmMNlM     a   !!!!!!X" '   ;    f   @   3264&264&# ! "&547"3533##5#3&5462!}23$#33G32H33#xLji}T%u[uϘtZu%T}MmMNlMMmMMlNfekvvO?fΙf?Ovvk        3!!35!3#!5#!%\    
  '*         3!!!8N+          )	!!9$a8   f  g +  &'&!!6765!!4'&'!!767a"//"a̒ra"//"as̒ rO[q! rO[q!    <   	!!8E-B     f  g 3  !5&'&!!6765!!!!4'&'!!7675a"//"a̒Ara"/3as̒h$ rO[q!$! rO[q!!   6   !53!3oN     n^   !  !767#"$546?>5!#3H->.Mi^fy] N^@D*i|->U1FE-"B*(ǿbY9>K-%d    R&    :   !!!m  :   !5!!m3&        !!!T-     !5!!T      N   '  6   '  6   '  6   '  6   '  6   &    6 '  6   &    6 '  6   &    6 &    6 '  6   &    6 '  6   &    6 &    6 '  6   '  6   '  6   &    6 '  6   &    6 &    6 '  6   '  6   &    6 &    6 &    6 &    6 &    6 &    6 &    6 '  6   &    6 '  6   &    6 &    6 &    6 &    6 '  6   &    6 &    6 &    6 &    6 &    6 &    6 '  6   &    6 &    6 &    6 &    6 &    6 &    6 &    6 &    6 &    6 &    6 &    6 &    6 &    6 &    6 &    6 &    6 '  6      %      3    T  ! 
   ) $54$!3!#"3!1pzzpBml     9 '   
  j 7      k   )!!!k#N   f *     q .     w 
  )!	!!wAR!L   W   f\ &   f\H   \  q =      )          9 0      1      /   - 6       5    )  m    ";!! $5467.'!3Jyiiy폐O}@7q^ZgfX
5+֔-pR  
  '   
  ' 9      +   4      =   .#"!6!2=ITc\_X\t&4 =   :   '   ;     <      ]      ";";.54$)! $546[^^[tutu|$*fBPNMQ<bcaa$+m   
  ' $   
  '      (         )!!!!!g\%##V#     = ,   ff 2    8         )4&#"! !  yy>FE>=6   7    k      #"3! $'&5476$)gjwiffixPP#ate	eta         2     '     '      1`     `      =    !!!!x h=}         !!!!xx  5i   {j     lX     `+    t
< 5  "'0'&#"0# '&54767!32767632324&'!aayTQ|@NOTysjiÑjjsyQNQ?|QTx@v@@v@܍U0,-00-,0Y   `	` 3  #"'&'&"#"'&54767!32767632324'&'FV42epPvlmwPpe24V36*&9E]VW\F5&*6`『KEEKKK㠱dŸ~ JRQJ ~d  d  	#&     (  `&       q    03!!# !   !  %"3254hhhgt%±{Z+Xjkc  [{    !#!   !  3"326&E!",u||uw}}`8(8B         !!!!!!!!!-_})}%RXZ+   
{ " -  !5#"&547#!!!6;54&#">3 "326=
HfoӆsUst/pq[Qef]ˢ>4>`?.UO..lLJDMm)   {v    !!3!!!3>!!\ph:]qAdE[    s4`    5!!3!!!3># p <r`bS}&`   ^     36!!!!^f\#K1N[    q  `   36765!!!#q(E $uY}`%I    	   !	!!!#!TV\ND%     `   !!!#!#!`0}{\ ff& 2   y  X'{& R   y:j  f      !!!!   !  54    !   JJP''>?oddjk   X{      !!!!"326&   !   Bh/xYW3B 8(8  f
' yT ' y &   X{' yj' y:j'    :Wv        ' / 7 ? G O    %3#%3#3#%3#3#%3# "264"264$"264"264$"264 "264$"2642+ '&' &547"#"&546;&546 676 3#Fޓhhhiig޲hhhiigRhhgwiig޲hhhc9]]ź87;]]:9sIFP뇇݈ꇇꈈꇇ2뇇뇇뇇0뇇뇇뇇X̬\dfʬ\ʫZee̫ZҜ  
f #  !!!2!#3276=4'&'&'&#!!!
`
feN<x>=$$.wu銊#CC77#    F`   !!!2+5326=4&+!!jllllͳ>fLLfi`vwwv\\S     
  j   !!;#  !
`{x<Ny       `   !!;#"&5!jLfj`K\        !2!4'&#!!463!#"&
1^ fLk5)P\      (   f
&   X{'      ;    #533мtt     ;    #533t     ;    #533ht     ;    #5334t     ;    !#533#t    ;    #53#3;Fмt     ;    #53#3;F     ;    #53#3;Fh     ;    #53#3;F4     ;    !#53#3;F    ;   !#!!vF      ;   !#3!!F̼     ;   !#3!!F     ;   !#3!!Fd     ;   %!!3   v 	  3'#'mY[}}[QovoQ  v 	  #'737Y[}}[QovoQ    	  3#'3#!       	  7353 !A}   D  d      E   3 ! ! 	
#W&#cmZ       `   32&#2&# &	
   aY    s 	  5!$YcN1    s V{ 	  5!$ac^N1   f   !!! !#3265!!8N<x{9#     F    4'&'.#"!!>32#!53265H.pfQnilfL
77#'b]Vtv\   
F *  !!!!"'&'327654'&+5!!!
`R~VNRQST1TN!pgts="J&&55cf45^  Hz ) 1  !!!"'&'327654'&+!"&5#;5f^W|WOzmsqjfQRTS*Ա>\'r`>N	!qgst%)5855cf54  %N7  R    nc{    3  %&'&547632.#";#"32767# $546,9l78WYZ[<;_7892u|v>CBAtMU^GZ\]\~	!SUge 0:?ALO=6AEifFE#'?%啿       ` 	  !!!!!Q`%   jb{ V    
  
     !!!!	!!!!!L-_})hg)}^_}B%R5+%R  X{ 
 2 = H  "326=%!5#"'#5#"&54$!354&#">326763 "326=6;54&#"pq[QemH]JH"ӆsUstiktt/pq[Qe;!Yqӆ^LJDMm)f]f]ˢŸUO..5lLJDMm)QnUO   
	        ! !!!!%"3254hhI_})c ư°dd-'5Rb  X+{   + 5     ! #"&54$!354&#">3 6"326="326&!EIo"ӆsUst%pq[Qeiw}}wu||{ 6(ˢŸUO..oo}LJDMm)B  
     !!!3265! .=_})6y%R-z     X{ ( 3  %# '#"&54$!354&#">3 265!!"326=]^
<ށ"ӆsUst/K̀fEpq[QeVOˢŸUO..+z)LJDMm)   
   
   !!!	!!!F_})5=+%R  XB{ 
 (  "326=5#"&54$!354&#">3 !pq[QeH"ӆsUst/gGLJDMm)f]ˢŸUO..     
      !!!!!!!3!L!^<e5^_})^gR%RP    XB{ " - 0  !5#"&54$!354&#">3 3!3#"326=!#\H"ӆsUst/sgpq[Qe9f]ˢŸUO..wfmLJDMm)   
F>    !!!!	!+3276?L-_})dYG[*$%R>#O    XFA{ ) 4  !5#"&54$!354&#">3 !+5326?"326=\H"ӆsUst1f)H^^p[SWpq[Qef]ˢŸUO..wz6JJ:KJLJDMm)  D:   X5{    
  ~   !3#!	!!#3ff+1^!=Ls         !3#!	!!#53fNNK-          
  %!!!oMl_^          !%!ffh  S  >   !3#!!#32     x     !3#!#3mf  !7   '   3#! '&#376"!&'&!3276h̤ ͨ gaCCa+FaaFΦΩZZ]]  
y{   '   3#! '&'#53676"!&'&!3276C!}ޣ~"w>$$>u)*>wu>*{wݾw U2JJ2UR[:UU:    f
   +   6!   ! '!   "3254!"3254fnmhhgg°°°ddjk  X{ 	  %  "326&   ! '!   ! 6"326&w}}wu||!EG"w}}wu||{B ȇ8(8 B  !      3264&#! !#3#!5#3=pzzp1_ml}     
V^{     "2653!>32  #"&'3#!5s{{yfJu
uJw©@֤b]]bWW    F  B  &  ! !#!#"&'&5476;!3264&+u1<@9rND~wPpzzp!"G.+17h[~qkml    FV#{ $ 0  "&'&547632!>32  #"'!&%7654&"C<@9rND~w2.fJu
ݖ)r`==y{^!#F.+17h[~qkb]4VT   ff  #  "3254#   !  %!''7f¾fgk(LfLlkh\,^@rcD    \Vy  !  %#"  325!3#!5#53"326&Ju
uJhryyrsyyc\IG\c*WW@  !      32654&#!#535!3#3 !=pzzp1]mcenF--7    
V^     "26!#535!3#>32  #"&s{{y&fJu
uw©@\\b]]    !      32654&#53!3 !#3#!5=pzzp1]mcent200   
V^     "2653!>32  #"&'3#!5s{{yfJu
uJw©@b]]bWW   8  ]   )!!]\%#  V`   !!f`   V   3  5&#"!!>32ؓxsto6|w  V{   3 '&=4'&!!63 Jfpl *΀f܇\vs<5F/
      N`     !l=    !5!5!5!l>>!    #@
  991 @	]0!!h33^     @
  1 0#+       Fp  "  &'&#"3!3#;!"'&5# !2.Yyjh&%glnXj+T"BKB/.vyX7     !!3!!!mz  NA    {   3!!4&'.#"!!>32 H.pfQnV
n#'`b]        +  %#$'&''745 !27!&'&#3267#5ʥځ4`A|yANieb|{|bOx<g)oFF{'i873*3#eT"    Fy 	 0 9  "%&'&#"'&''7&54 325!7 !"&'326532767o|!>|Ju͆:!x%{	uJh$ic^[<<sp><w=+RGb\FU%'<BA\c1< !6572"PRP      q   !!%!!5'7+1@qAYA!=?5-A   y   !!%!!5'7f%$QNd%&4h1=        !7!7!!'7%'5AmARAumEY.ANG-B ^     {  %  &5&'.#!>327!545!'H.p@:fQndE$h%	7#'VNob]wQ19Zo~HH0     ?  # (  !'7! 7!.#2767&+=AL&3 AFHO}@f7q^5y4 ?5h5-Ac$4KO\_-XspR
-0u_     {   .#"%!'7!>32/]/J;$
%fE}*(/XFwHH0=ne   /  .#"%!"$'32654&/'%&'&74$!2{hYugsAiӎ⏏|~[aA,h {78LP<Cbf65ELMTNFL]i% { 3  .#"%!"&'32654&/&''%&'&54632s_fcKa?.)$_o}ktijIm?,'I%`c=0035+.	RP##44:90/QQ   t  Z   !!!!!!#"!5476 8O*  c^9+y</MUQ    vr    3!533##!##53!5fXXYYfiiilbolljj    7E  & 0  4&#"!3267#"&'#"&632>32%"3264&^K=BQ
cXGOOOh-4RηT34}UwKOOKJNN9FA>C9GF&&-1//6.01-!````      `       	  !!!!gr+y##    T  ! 
   !# $54$!#";!1pzzp+lm      9   3!3!!	mXXl%D+     =m   !!m   @  
Z   !	!!	!	!!ws nD `=+o=       5!м     b   'c̠P    6h   '3#ŏIhh{  #4   '3#Ţ\}4`       3'3#ūeN>    b   #76cP   XQ     bhXR     64XS     #  XT      6h   3#h   bhXV     h$Q     b4$R     6  $S      #4   3#%}d   62V[     b4$V     4Q  d   b  R  d         3#30>   #  X`     6  $[     b  V  d      Q  0         33żt  d   ! 5!3254 ! @SL0?1$ ?    d 	   #32% 5%6'&'!D>7WGlW+Ofj8Ut!b3NH`:   d 	 "  #"32%! 5%36'6#"!! F+12qi5ZY\	HpS=DcxmTE   d   	 0  #"3267&=!2>3 $547&#"!&%eTY矌9v"?d	oΡ_F? ?!qfv:3!6oqgh]=FQ     e   ! !3'4#"!! %]="	u  d !   7!32=4+5364#!'! ] O$q\l	xGuڞ'  < 
  '  >?4#"#"32%! 5467&5! *f>|xK*-8^"4Z@FT\AAX(   d 	 $  4#"32%!674#! !6>3 	~l͋=s0\d$MD,HA  d  S   !4#"!! SyIIka;o)  d   ! !2=4+5354'!Ny^sǬls~     d 8  %67$5!263263 ! =#"!4#"!&#"6!.#"9S{*姕loyʈĮm@2)nBw`Vɵ;yyla"4Z     d 	   &'"32%! 5%254'&!! M<3: "	!pQ      	   #"32%! )!"63 bl^>,V5,Yb&    n      ! 4#"!4#"! !263 M)yyt3 -ۖ u7,     d   ! 7!32=6'#3274$!IgOxcd?{qgM  d   ! !32%'6%5%Gq_ R{gY    d   %  ! 54'"!4#"! 5$!$$63 sixu
/*ol(NwoN        ! !32=4&'7!>3WU[PÔ  Z  !  7254&' !  56%'R<Fj33eHҐ7+?!Fh4bF     F   ! !325&#"!&+53263 (V6OlcΓLd(oydgq     d 	 8  4#"325 !#"$5!;2654+53654#"%5!263 ]T\E+BGNx}T@]r?P6vAj4yHc   d   !$7!32'!'25!Z2oj"3 ljz   d  -  767 5!2632!=4#"!4#"!.'[~z觳ˮYwJGi~M6FZ|޻9֤x1h    d   ! !325'547!27!K`t\{E25%&W3  Zv  #  &#" %! 5!54#"!54!5 63 DC23X]DFdg)jEGooG        7&#"6 !=4&!! klusS;e,XBӇ    f $     !3265&#!5354&7!?`SpjA❅o 4Rp~ژag   d 	   &#"32! 5!6!NT2S2.S=GEG$     #   5#"!26! !54#"67 ! CdFD]X33j )eGooGE  d  #  ;'#"!#3#! 7!325# !3'!3f-ui(lH%Y6O7#RlHQ      	   432%! !63b3>?15\J1z
     2_   %! 65&/%776'532_{V-G5͝hA6ZݥQu?SݠvEa!^w߸wm/T}ڐ     d %  ! !3254+3254'#3254!#53 GEEF0ҹuz5BډMB`{dTxnco     &   !3254'#3275&+3254#5 >1ʺ,/?4ԤJE{Ibdq~Qp9    dj 	   654#"27&! 3 %!0gZhhv ?Cz   d   ! 5!32=4+53$!%FʘE$s7a   d !  ! 5!325+3>7#!327!HιeobdGĞu	۵j ,    d   $  #&325;4#"! 47&! 3#3Gd+UBX{wi^     dP 	 *  #2!&'!5 56#"! 56%63ClQFA$W>R     \.   #  327$76#"!!"6%!$!2SIr#G %]]*Y$O6H"/NiFhI(2:(jn   n7S 
 :  #36$47&'!.#"'67$%&57!325& ! 1HJC3&kJ24"3rT0/';*1!j@	:AASMl=s[fd5VaYEVg     n    !!! 7!3254 ! ~3,.!:"De}' T     n0     !!!!! 7!3254 ! s,.!:"De0' T    n      !!!!!!! 7!3254 5! U~3,.!:"De6' TЊ   n    !!! 7!3254 ! vL ,.!:"De' T     n     !#!!! 7!3254 5! l~>,.!:"De'' Tƀ  nm     3327! 7!3254 ! id,.!:"Dem[O' T     n%    !!! !354#"!'! ~C)%6p+$GЫP[    n%Y    !#! !354#"!'! LdC)%6p+$YGЫP[     n%      !!!!! !354#"!'! 1~C)%6p+$ &GЫP[   n%m     3 7! !354#"!'! #C)%6p+$m[qGЫP[     n  (    !!! !&5 ~ovt67>Gè&$     n  (Y    !#! !&5 Bvovt67Y:>Gè&$   n  (m     3 7! !&5 Hovt67m[>Gè&$   n)     !!! #"!4#"!!263 ~0yюzej?7/5*{{    n)0   $  !!!!! #"!4#"!!263 yюzej09?7/5*{{   n)    (  !!!!!!! #"!4#"!!263 ~yюzejq?7/5*{{  n)Y     !#! #"!4#"!!263 BfyюzejYK?7/5*{{  n)m  %   3327! #"!4#"!!263 Fyюzejm[?7/5*{{     n%u  $  !!! 7!3254#"#4+'3263 '~N=<FT

G@!KDNNLHЩCOrC;bhh  n%u0   (  !!!!! 7!3254#"#4+'3263 r=<FT

G@!KDNNL0HЩCOrC;bhh     n%u&    ,  !!!!!!! 7!3254#"#4+'3263 1r~F=<FT

G@!KDNNL&qHЩCOrC;bhh   n%uY  $  !#! 7!3254#"#4+'3263 5=<FT

G@!KDNNLYHЩCOrC;bhh    n%um  )   3327! 7!3254#"#4+'3263 l=<FT

G@!KDNNLm[pHЩCOrC;bhh   n%u  '  	#'#	! 7!3254#"#4+'3263 ܘh=<FT

G@!KDNNLPHЩCOrC;bhh  X' 	 "  "326&!"3   !  7.5463w}}wu||_`>s!Ey4{B##%R8>e)m  '   ' F@ 	)!E#T(<2<<1 @ !'!/<22<2220#"!54763!#"!!!!!#354763LffL2fffDNNWXDN `` NWX  +  B   ^@	 	ET<2<<991 @	
 
/<2<2990@p`@]!!#"!!!!#35463iJK:k$7DN`` N     '  B  @@ 
ET<2991 @	 	/<22990!!!"!!!#3546{L<)7DN ` N   '  @ * . V@+0, 	$E"&T/<2<<<<1 @#.$+*$!/<<22<<2220#"!54763!#"!!!#!!!#354763)!LffKkfff\iDNNWXDN``` NWX    '  B ) M@+ 	#E!%T*<2<<1 @"#)# /<<22<2220#"!54763!!!"!!!!!#354763LffLfffDNNWX)DN `` NWX   '  H -  #"!#35476;2!!;!"'&5#354'&"Lffֺffq\XY)DR` NWXXWN %N XY ND     j U  &547632!!;!"'&5#354'&#".#"!"'&'32654'&/.54632~Ƈr\XY+(E;2-'s_f12&%a?Y_ownkpqtij$ r?@u_]_\L %N XY ?0&$)&80%005+	(KP%4:90    
f U  !"'&7676;#"3!'&763!#&!3265!!5#"'&5#!5#"'&5!32654ihls44)Q,7<&G.pfQmefQmcfhG.p`^]RWS`8bz,!Jp[.w#&)b]wvТb]wy|*<#&     
h D  !&!5#"&5!32654/&763!!!3276=!!5#"&5 <-0QmhG.pOQ,7_  G.p@@fQm,"X\Тb]p[.w#& 7bzL 69#&VW0b]     V
f ?  !&!5#"&5!32654/&763!>32!54&'.#"! <-0QmhG.pOQ,7]QnH.p,"X\Тb]p[.w#& 7bzb]Von#'/   V
f @ G  !!#"'&5!3265#"'&76763!!3265!!5#"'&55#"3,nQmbfhG.pihls4bG.pfQmef΃` Lb]w{|*<#&)^]RWLp[.w#&)b]wv S`     V V  !&!5#"&5!32654/&763!676323265!!5#"&=4'&'.#"! <-0QmhG.pOQ,7]l[nG.AfF6[mH.C@@,"X\Тb]p[.w#& 7bzZ6/V*<#&)u/VH1 #'WX/   B`&0  z u=   32673 &uccȮ=FJJF     B`&D  d  N  `   676745!#!3୏0!K'Ah{@`b8q~lC%T      `   	!!4>7!>5!Wi>]6^g;f>^I7^hoKo&SqRoo(XuT    X  `   #!!5!ڷrr      :`    !!4.#!5!2m	,QfM șa=.JWTn\2#?\     X  `   !2#!5!2>4.#!X_$$_RzJ--JzR`AiiA!7U[v[U7!  X     !!!!@!K5rxvV    :`    )!2!4.#:7݉8;^Q`<ئ[|)nQ    X  `   !4&#!5!2c8݉8̏<     ``   !4.#!#"'53265#5!2&O?VeK2.C{uHZ[GXR&:]v.S       !5!3!

   (   '"  @   (   '   @   (   'X'"  @   (   'X'"\  @   '`&  '     C'`&  '     '`&  '     X  `'  (   XX`'!  )   X  \`'  *     `&  +     Y  `'  ,      Y  `'  -      m&  /     YP`' 0      X`'  1   X  `'  2   X  7'Q  3   X  n&0 5     X  `'!  7   `&  8     `& :       `&0 ;     C  `'!  =   H_& >     X  `'  ?   (   `'9@   `&  A       '"  ,   X  ' q  (   X  ' A  2     &   ;      X  8   365!!!%'#jUf\[Q[)= W@;$?@vu   ^&   '  UX'R  XX'R    ^&   '  jX'   XX'     ^&   '  jX'   XX'     ^&   '    U'R    X'R    ^&   '    j'     X'     ^&  L 'L    a'Lp    Xa'Lp    J&   	J'!    J'"    J'#   J&   	J'!    J'"    J'#   f&[    f&   ='l  ='l   f&[    2 f&  ='  ='   f&[     f&  v <='  ='   f&[     f&   i='  ='   }R&]  g }R&  g }&]  6 }&  6 }&]  6 }&  6 }&]  L }&  L&_  X\'X\  (/&_  L >/'L >   1    E 2  %! '$&7!32767654'&54767;#"ѽϒ@f3QgN2
%bD$0#7AK]$?.\^Zc:#=$$d|?O#! 6 .)0$           1G&  <   EG'<  $    G'<       G'<      1G'R   EG&(  RG&)  G&*   1G'   EG&(    G&)   K  G&*   K ~<    ~GL &  ;#&'#"'$47!32767654'!(
i0?+]豌(f*7N8=7!efa;b-",ckJ8_w-    ~<'LE%   ~G&4  LE+  a'Lp    Xa'Lp         ! ( 0   !!!" '0#"'&547!;54 24&/>54"vT-i>f3%.8eA%da m q%7K5"S90q{d:1v    \   'qFl   &  qF  l&   K  l&   K`2&q  x 7%2&  x 7%`r' q>q  r' q>  `C&q   n/C&   n/`&q   &    &r   ,S'  UX&  RXX&   R   UX   #!3276=!UD@bD,1fsa\ ,1j   XX   !#"'+3276=!;XnMMnbD,1f1,Dbmm ,1jj1,    $r   ,S  jX' M  XX' N         #4%$3obrIG?.      Z   52#&$bor.?GI   '   /&'&#"#67632],$V5Hqpo?t?#
$0)JI      '   327673#"'&'],$P;Iqpo?t#
$,-JI    :t^      't^  i   :u^      i  k   ;# '&=!1)fKrsfT( LL" :v^     :w^      'w^  i   :x^      'x^  i   :y^     'y^  i   z^      'z^  i   Jn{^      '{^  i    (O    &U  |_  '|_     &U  }_^   &  }_^`'} q>q  '} q>   &U  ~_   &  ~_   $&r  } &> ,'} D    U'}pM    X'}pN     U         !;!"'&f1,Db@Dsj1, \a    ^&   '  UX'W  XX'W    bR&p  ,   '   ^R&   R'    j' R    X' R    ^L&   L'    j' R    X' R    f&[   # f&  ='q  ='q   f[    f /  ;#"'&'&'3 7!$'&54767&$3 &#&I=TBVyG<2mSgZ-ΤKȜfT_`"B<w X|kH#Cyj\ƚ޳}N) ?&     =   &'&'&672+327676cKq^GHK[qsd΋m`
 #2H  BL\O%" "$E=      = (  +3276767&'&'&672;#"'&Rc¾d΋m`_Kq^GHK/;WBVk4;<S!" "$E=0
 #2H 1D u9  &[  q 'q    =&  q  =&  q }R]    }R   ;#"''7676'&'!?,IK6}mI>q.o?, ii7 =-RWy3R    }&]   }'  &_   &   %! 7676'4'!;#"&75OI4f	":,IKVQ9be DCmey" };,  &_  '   
`a    c F  %765!325!;!"'#"'&'#"'#"'$47!32767654/!J%f$B}f1,DbP1XO=wQ:
#HFVDNx`iifl&5nNY':@f$8b2_&j1, 47Ha$Zv@$eUĴΪ):CDhtz@J<9 5 -  %#!3276/!765!325!#"'&'#"JWbD,2f-SG%f$B}f\HCqQ:
#HFNN ,2i$b;6T2_&qYHa$   8 4  #"'&'#"'#!3276/!765!325!;!"'CqQ:
#HFSJWbD,2f-SG%f$B}f1,DbP1XHa$`N ,2i$b;6T2_&j1, 47 
`' a   c'   5'*   8'*    
c    
 9 F  !"'&'#"'$47!32767654'!67632;#"'!327654'&#-=DNx`iifl&5nNY':3J$hwG-*BVXcCD~v;51KnCv@$eUĴΪ):CDhtZ(--{i3c29# x[ 2/7O2        +  %#!3276/!67632)"'&%327654'&#ldbD,2fChw縮ng_LD~v;51KnCrr ,2ie5{i3c`[2/7O2     ' 4  %)"'&'#!3276/!67632;#"'%327654'&#^gg_L0ldbD,2fChwG-*BVXiD~v;51KnC[[<r ,2ie5{i3c29# x2/7O2   
'_c   
'_    'qC    'qC     e        (  %)!!67632;#"'%327654'&#gtOPfwG-*BVX_D~v;51KnC[[ Vei3c29# x2/7O2        327654'&#)!!67632D~v;51KnCtq.fw縮 2/7O2 Vei3c`[       (  )!!67632;#"'!327654'&#{q.fwG-*BVXgCD~v;51KnC Vei3c29# x[ 2/7O2    &e  oC   'oC    'C    'C   *g    u .  !7$7!$'&54767&'&547676 ;# 'gZ/̤'WR5+hYYh!T)<`v3ےNYNtp***"+74--47)$**/A#. Y    *   767+327&'&7676%&x<[Kهnd':@Vn(=0b ^_s )T@aZ     $  %+32767&'&547676 ;#"Bv`i;+T!hYYh!T+;i`v棣 .+A/**$)74--47)$**/A+.    7&g   u='?    7'    ='   &  ro 	'ro!    'Xo"    'o#   kH&  ~ kJ'9$    '~%    '~&   l     ! D  &#"'5327654'&'&7676'$'$547!3276765!;!"1;5P&#fWRB8D-U <N@ KRnff:}sey3If1,DbKs+ Un*'y	))/.P'+GXK5".;!'Daj1,        )!27654'&54767rN2
"eDej '$$d|?O#!!6 .*ZHK     $  %#!!27654'&54767;#"GjrN2
"eD$0#7AKK '$$d|?O#!!6 .)0$     9m    8   %%$&7!7676!;#"p@fG=Nf1,D^BRaUL!\fr"-4La jM1,    U   #!32765!UD@bD,1fsa\ ,1jM      X   #32765!;#"'#bD,1f1,DbnMMn ,1jMj1, mm  Gn    Z| " 4  %# '&!4767'47632;#"'%654'&'&32xR%x[MO10|K$" ( 
;'%UCD 9|EU?$?ji#" ;)4    ^|  ,  %654'&'&32%67632#"'&'+3276"&(<;'C$lMObx|@hu>7.)!(`X?$U50EUC0 &  q| ! 3  %#"'&'+3276767632;#"'%654'&'&32x|@hu>7.$lMK/0|K$"&(<;'%UC0 &?`X?$Dei#" ;)!(   ~<&   ~G'{4    U&M  WC  X&N  WC bRp        %  &'&'32&5!;#"'&''"'&5476_)-Daf#)DK\GBl8:j=(3
 #60!ȎR, "#A0D      + 9  654'&#"&'#"'+327&'&5476327654'&%c'.W:B^zikON6
$x.m"*<z$J<-&!-# 9Һ49Wqg$ >HEpb&>2=8C!$=    \  $ /  6763$!!%"'&'#!327654#"3254'&#xWxWx؈-IT_dH-66-Hd_TI ĢU@hx xh@U DM419GvG914MD  `q    ! 0  !"'&'&547676763#!7676&'&;4 c]bm_Y5	?_אַWe=/'*#$"zQT4,8*:79Q [eJS 6@)'-'   $r    ,S 3  #'$'&7!32765&'&'&5476763 ;#"'&#"ľT@fF360J2LgV5=nZD-9B)i[eD*#("%%Tb/I# &,x &r   ,S'  jX' M  XX' N  $'|	,  ''|	,   D$'}	    D''}	    T$&  ~^   T''~^      T$   !"'5767!6765!$;IVjhjOj%fB[A*%,yA+7    T'   %!"'5767!6765!;!"'&qjhjOj%f1,Dbr6%*%,yA+7j1, ?*    2h  ! %  	546?>54$#">32!tB*D@^N ]yfQV`59@jBihB--K>9Yb(*BCOF.\4:bR1d    dT  
  	!%!UU!uou}        "  7>54&#7>54&#63 !"'S0Sz~f{qihGElkz7XV  d@   		l4       ~    33!67676'.'Ȗ*@JL	hѴ2%&T]Yl         %!%%0B0B0HPHP       	  !%0B0bHP      f   #3!3#f0,},         !!!!!pp+w2        #    $&6$ >7!!!%!.zzz : zt$$:t.:$N{{ : {{%t;t.;%t         )!,     
  )!	,$s9     z   	#!,}    	   3		!_33C?3_3v       R   3		!_C?_v              !!!!!!!!,v2222+2233      '   2"&4 64."26$ $&6$ _zYYzY'KK~~KK~zzz : zYzYYz~LL~~LL{{ : {{    _   654$#"#!63  NԬs[vX       3!	!3>>+>$         4."26!&'&> f8ara88ara eԿeDra88ara88f::v뉉         2654&  #!6TdqԎ|~i$     	  		>^8^L^^   d      %!% \L\|H       !!$,    x   	7			'NHHW         %  )5&'&547675!6764'&ԭŇ,Ň:1cc2e:1cc2&|{'&|{':.-ZZ--ZZ-   d  l   )7!,nf}    L      4&"2   7&   $4&"2 X|XX|ݧtX|XX|9|XX|Xrr|XX|X    X     !!63$654&XԀ%QO  X    %"'0!  %654&X,9+OQ  d  4   !!!d,U,T+U   d  T     2"&4%	zYYzYYzYYz}usu         dT   		%UUusu}  x    d  z   	!d&@v5v         !5!5!)5!S2SR    ='  ]b  C   7'c  F  X   :
'b  :  b   ;
'  bc  <   =
'  b  ]     H'b   'b  &b  b     H&c  'b   'b  b     H'b   'b  'b          H'c  'b   &b  b     H&c  'b   'b  c     H'   'b  'b   c       H'b   'b  & b       H'b   'b  & c       H& 'b  'b         H'b  &b  'b  c      H&c  'b  'b  c      H'c   'b  'b          H'b  'c   'c  b     H'c  'c   'b  c     H'b  'c   'c          H&b  'c   'b        H'c   'b  &c        H'   'c   'b      H'b  &b  'b        H'   'b  'b  c     H'b  'b  '           H'   &b  'b  c     H'c  'b  &c        H'c  'b  '           H&b  & 'b          H&c  & 'b          H'   'b  &       H&b  'b  'b   c     H'b  'b   &c  c     H'   'b  'b   c       H&b  'b   'c  c     H'c  'b   &c  c     H'c  'b   '   c       H&b  & 'b   c       H&c  & 'b   c       H'   'b   & c     H'c   'b  &b  c     H'c   'b  &c  c     H'   'b  'c   c       H&b  'c  'c   c     H&c  'c   'c  c     H'   'c  'c   c       H& 'c   &b  c       H& &c  'c   c       H& 'c   '   c     H'   'b  &b  c     H&c  'b  '   c     H'   '   'b  c       H'c  &b  '   c     H'   &c  'c  c     H'   '   'c  c       H'   & &b  c       H'   & &c  c       H'   & '   c     H'b   'b  &b       H&c  'b   'b       H'b   'b  '          H'c  'b   &b       H&c  'b   'c       H'   'b   'c         H'b   & &b         H'b   & &c         H& 'b   '        H&b  'b  'c        H&c  'b  'c        H'c   'b  '          H'c   'c  &b       H'c  'c   &c       H'c   'c  '          H&b  'c   &        H'c   &c  &        H'   'c   &      H&b  'b  '        H'   'b  &c       H'b  '   '          H'   &b  'c       H'c  &c  '        H'c  '   '          H&b  & '          H&c  & '          H'   & '              	3	!#!!"\xw9:4]xi+          " + 3  3%! )327&#'327&+67654'&676'&4`7fa|cF<<FF<<FT1WW1K0aa0]xm%$\x$4~:"#F6F#     9      ! )327&#!36'TMwiffixj'ateeta]6z5]Z         3%!!!!!!2rg]xxxx         3%!!!!!2rg\]xxx2    f  '  &#"32767!5!#   !2&|ԙƘid XʥLyvm^EiA )	x2FFei87R έ      !    !#3!53#!#3xxlxxxxx f` 
   6765%! !#5327654J1pq<x=>]SC. -fxxCC          #3!3	#贴&r]xo@;      	  %3#'!!!4xxxx         !#!!	!3!3_Gb\}Դ!]>+]     ff    %  % 7& 676'&   !   K{@{{{}LLhhg4334Ь01ddjk  -  @  654&/&'&54.#"!"$'532654&/.54$!2~sLL;;Ѥ:'R{hZtӎ⏏|~Z {Ux]\3(5TUQ:O舼3(1kH5DD]b{T(<65[\e]Z%(=%%  
      !!!)#3
\x]       #  %&5#676#!3265! !  6~-?-~rplx**x	V޹"6=    
    
  %!	!	3!0  Xx]A+     =  h     %#!#	!	!	3!	!*5*>  {YZx]==+o   2  @    %#!	#	!	3Uy(6xxz[          !	3!3#\xu    X {  # , 4  %34'&'!5#"&54$!354&#"5>3 5#"676Դd+H#,\H"ӆsUzz@\G;q:4C*SH0xT%<Nf]ˢŸUO..8H9C-   [I 
   #  %27&#"'!!>32  #"&36a\Jt
u[Gb]\]$?hDG    X6{     .#"3267#   !26]Mx]]xL\TWV/XU\ %!!%7*7lzy   [I 
   #  %267.#"%#"  32!!#3C{Ju
tJ\,Ŵ[\Gc\II]bXceh   X
{      %#   !  !32%!&'&#"K"=Zrx~i~fD015:9|c|w<k  /  8    47&3#"!!!#5354763C,3-:9|\WX[5>|x97Fx$xZTV    \FJy 
 ( 4 <  6765#'! !"'&'5326=#" 54 323276'&#"2	
B1xogkf^[JuuJebjjbw/'jj'a'jwx!65b\CA\cvu3.b/    n  N  % )  !4&'.#"!!>32%34'&'3H.p\WvԴMB	
Ĵnn#'ub]Vx2TH%!A1.$    1     3%!!!!\hpx    F1     6765#!+73265!!Z4Mx>fKh9UGs\<         3!!3	#$x\tHѼg$du(           %&5#3#"&5'N3LfT
2U9~\sF     n  {   ! M  334'&'34'&'4&'.#"!!>3267>32!4&'.#"MB	
<MB	
LH.p\Wvm0Wv\H.pp2TH%!A1
2TH%!A1nn#'u`b]w5J b]Vnn#'u  n  N{  % )  !4&'.#"!!>32%34'&'3H.p\WvԴMB	
Ĵnn#'u`b]Vx2TH%!A1zp   X'{ 	   #     !   327&#"676'&!EG$~~RgeQQegR%~~{8(8(x>xH|1xx  [VI{ 
   #  "327&>32  #"&'!!3#6'aJu
tJ\Դ;Gc\]bpeGDh  \VH{ 
   %  "3267.05!!#"  32#0D^Jt
uty\GLb]II\Xi       *{    3.#"!!>32$R/]/\E}*(p-p`ne    jb{  B  >54&/&'&5432654'&/&'&54632.#"!"&'7U?~3k>5>|4bktij$%m?c`cڀs_fcKa?^_o}2	&:/*[E%
&Es%->?FD:	"daƲ ::=@47
,_`γ##     7   
   #&'4'!!;!"&5#53?2j$x{KsXբ&K#D\OxsNxkxJ   dD`  % )  3265!!5#"&5#&'&'&'&5#H.p\Wv,MB	
<`n#'b]xεTH%!A1p       `  
  %#	!	3!Zmxp  H  `     #3#3!!3!!'yp  (  \`    	3%!	3	!	#\d(^pxe9ge    F`    6?'#%3+532767!D1)H]_q>k|!qx6JJx1
Y   \  `    #3!!!5!NNxxxp  
  ' $      %   f\ &     9 '      (      )   f *      +     k  f= -     q .      /     9 0      1   ff 2      3   ff 4       5   - 6   
  j 7    8   
  ' 9   =   :   '   ;     <   \  q =   X{ D   ^ E   X5{ F   \ G   X
{ H   '   I   \Fy J      K      L  F M     y N     a     { P     { Q   X'{ R   V^{ S   \Vy T     { U   jb{ V      W   ` X     ` Y   H  ` Z     
` [   F` \   \  F` ]   
  ''     (     )   
  '*     +   \  q,     -   ff.     =/     q0   
  '1     92     3     b4   ff5     6     7   ff     8   
  j9    :   f  f;   '  <   s  \=   7  >         c)yF   V_0G   VU`H   Y($I   n{J   YVUK   V{L   X($M   `N     =`O   =  P   T`Q     `R   YVUS   X'{T   V`U   V^~V   XV5{W   X`X   +`Y   	`Z   Vj[   4V`\   V`]   X`^   ;e   g{   i$f   oc   {Vj   F^~   .`k    b/    '  %'&'676 !   !  &#"320&&1&00&x@'&@/DQRDDRQ"//!J/"y"/Imstm	          %3#!5%!!!r6R[TxHxHx        %  %367654'&'"5$  %!5654&5<|>Ic6\D%$XŹSB-yxtY]3neclԵcw|
w     ! & .  !"'5327&#!5!27&#"563 65467>4&4%tU0480,C[ DϹ&d8XqEPJ~D{x<	}@+EDt   \  3     	!#3!3#!!5,\/6]RxQ       #   !!63  '527&'#6676'&!#0W?0mm0]Hx^VY0k{'W-W&   #     )  632  #   !2'& 676'&'&#"2PYkuEʾ&7-xi/D}!mVHNp7@:jX)oac.!0        
  	3%!!!y>+Q]xx]    }   ' / 8 B J  .54$! ! $546 '&'67 %6764'&'&#"27&#"32%כm,CD,d#44#D5#dd#7AC8789BA79BAD,lm,)ž)*ސFQ!">F)$FF(}V"QS!    n     )  %#"  3   !"'5 76'%327&"AYk:4?ʾ&:	7-xi/D}!mVH!v&Y@:j)oc.!    b/                    \  3        #          }    j      F
!;    3#!.	Y_$     F
!;     7!'!%3	YٍF%=     F
!;    "  4767632"'&'&!'!%30&$I	Yٍ$$%%=    F
!;  , 0 4 8  "'&'&4767632"'&'&4767632!'!%3$$%$%$	Yٍ?H%$HG%=   F
!;  + A E I M  "'&'&4767632"'&'&476762"'&'&4767632!'!%3$$%$H$%$	Yٍ?H%$	JHHG%=    F
!;  + A W [ _ c  476762#"'&'& 4767632"'&'$476762#"'&'4767632"'&'&!'!%3'H$%$%HH$%$%H	Yٍ$JJ%$J%$S$J%=      F
!;  + A W n r v z  476762#"'&'& 4767632"'&'$476762#"'&'4767632"'&'&4767632"'&'&!'!%3'H$%$%HH$%$%H&$I	Yٍ$JJ%$J%$S$J$$%%=  	  F
!;  * @ U i      "'&'&476762"'&'&5476762 "'&'&4767632 "'&'&'476762"'&'.76762 "'&'&54767632!'!%3$H%$HJ&$UJHJH~J&$	YٍRHJ%$HG$$%$HGH%$H%=     F
!;    !  476762"'&'&!'!%3JH	Yٍ$$%%=      F
!;  , 0 4 8  476762"'&'&%4767632"'&'&!'!%3JHd&$I	Yٍ$$%%$$%%=    F
!;  , B F J N  476762"'&'&"'&'&4767632"'&'&4767632!'!%3JH$$%$%$	Yٍ$$%H%$HG%=      F
!;  , A W [ _ c  476762"'&'&"'&'&4767632"'&'&476762"'&'&4767632!'!%3JH$$%$H$%$	Yٍ$$%H%$	JHHG%=   F
!;  + A W m q u y  476762"'&'&476762#"'&'& 4767632"'&'$476762#"'&'4767632"'&'&!'!%3JH]H$%$%HH$%$%H	Yٍ$$%.$JJ%$J%$S$J%=   	  F
!;  + A W m      476762"'&'&476762#"'&'& 4767632"'&'$476762#"'&'4767632"'&'&4767632"'&'&!'!%3JH]H$%$%HH$%$%H&$I	Yٍ$$%.$JJ%$J%$S$J$$%%= 
  F
!;  * @ V k       476762"'&'&%"'&'&476762"'&'&5476762 "'&'&4767632 "'&'&'476762"'&'.76762 "'&'&54767632!'!%3JH$H%$HJ&$UJHJH~J&$	Yٍ$$%HJ%$HG$$%$HGH%$H%=     F
!;  + / 3 7   "'&'&4767632"'&'&5476762!'!%3rJ%$$Jm	Yٍ@H$%$%H%=      F
!;    " 8 N  4767632"'&'&!'!%3"'&'&4767632"'&'&54767620&$I	YٍJ%$$J$$%%=H$%$%H    F
!;  , 0 4 8 N d  "'&'&4767632"'&'&4767632!'!%3"'&'&4767632"'&'&5476762$$%$%$	YٍJ%$$J?H%$HG%=H$%$%H   F
!;  + A E I M c y  "'&'&4767632"'&'&476762"'&'&4767632!'!%3"'&'&4767632"'&'&5476762$$%$H$%$	YٍJ%$$J?H%$	JHHG%=H$%$%H  	  F
!;  ) > S W [ _ t   476762"'&'& 476762"'&'$476762"'&'476762"'&'&!'!%3"'&'&4767632"'&'&476762'HIIHHIIH	YٍI%$$I$II%$I%$S$I%=HIIH    
  F
!;  + A W n r v z    476762#"'&'& 4767632"'&'$476762#"'&'4767632"'&'&4767632"'&'&!'!%3"'&'&4767632"'&'&5476762'H$%$%HH$%$%H&$I	YٍJ%$$J$JJ%$J%$S$J$$%%=H$%$%H    F
!;  * @ U i        "'&'&476762"'&'&5476762 "'&'&4767632 "'&'&'476762"'&'.76762 "'&'&54767632!'!%3"'&'&4767632"'&'&5476762$H%$HJ&$UJHJH~J&$	YٍJ%$$JRHJ%$HG$$%$HGH%$H%=H$%$%H     F
!;  + A E I M   "'&'&4767632%"'&'&4767632"'&'&5476762!'!%3rJ%$$$%$Jm	Yٍ@H$%JI	$%H%=      F
!;  + A X \ ` d   "'&'&4767632%"'&'&4767632"'&'&54767624767632"'&'&!'!%3rJ%$$$%$J&$I	Yٍ@H$%JI	$%H$$%%=    F
!;  + A X n r v z   "'&'&4767632%"'&'&4767632"'&'&5476762"'&'&4767632"'&'&4767632!'!%3rJ%$$$%$JV$$%$%$	Yٍ@H$%JI	$%HH%$HG%=    	  F
!;  + A X m       "'&'&4767632%"'&'&4767632"'&'&5476762"'&'&4767632"'&'&476762"'&'&4767632!'!%3rJ%$$$%$JV$$%$H$%$	Yٍ@H$%JI	$%HH%$	JHHG%= 
  F
!;  + A W m        "'&'&4767632%"'&'&4767632"'&'&5476762%476762#"'&'& 4767632"'&'$476762#"'&'4767632"'&'&!'!%3rJ%$$$%$JH$%$%HH$%$%H	Yٍ@H$%JI	$%Hz$JJ%$J%$S$J%=      F
!;  + A W m         "'&'&4767632%"'&'&4767632"'&'&5476762%476762#"'&'& 4767632"'&'$476762#"'&'4767632"'&'&4767632"'&'&!'!%3rJ%$$$%$JH$%$%HH$%$%H&$I	Yٍ@H$%JI	$%Hz$JJ%$J%$S$J$$%%=    F
!;  + A V l          "'&'&4767632%"'&'&4767632"'&'&5476762!"'&'&476762"'&'&5476762 "'&'&4767632 "'&'&'476762"'&'.76762 "'&'&54767632!'!%3rJ%$$$%$JI$H%$HJ&$UJHJH~J&$	Yٍ@H$%JI	$%HHJ%$HG$$%$HGH%$H%=      F
!;  ) > S W [ _  476762"'&'& 476762"'&'$476762"'&'476762"'&'&!'!%3HIIHHIIH	Yٍ$II%$I%$S$I%=      F
!;    ! 6 K ` u  4767632"'&'&!'!%3476762"'&'& 476762"'&'$476762"'&'476762"'&'&0&$I	YٍHIIHHIIH$I%=m$II%$I%$S$I   	  F
!;  , 0 4 8 N d z   "'&'&4767632"'&'&4767632!'!%3476762#"'&'& 4767632"'&'$476762#"'&'4767632"'&'&$$%$%$	YٍH$%$%HH$%$%H?H%$HG%=m$JJ%$J%$S$J    
  F
!;  + A E I M c y    "'&'&4767632"'&'&476762"'&'&4767632!'!%3476762#"'&'& 4767632"'&'$476762#"'&'4767632"'&'&$$%$H$%$	YٍH$%$%HH$%$%H?H%$	JHHG%=m$JJ%$J%$S$J   F
!;  + A W [ _ c y     476762#"'&'& 4767632"'&'$476762#"'&'4767632"'&'&!'!%3476762#"'&'& 4767632"'&'$476762#"'&'4767632"'&'&'H$%$%HH$%$%H	YٍH$%$%HH$%$%H$JJ%$J%$S$J%=m$JJ%$J%$S$J     F
!;  + A W n r v z      476762#"'&'& 4767632"'&'$476762#"'&'4767632"'&'&4767632"'&'&!'!%3476762#"'&'& 4767632"'&'$476762#"'&'4767632"'&'&'H$%$%HH$%$%H&$I	YٍH$%$%HH$%$%H$JJ%$J%$S$J$$%%=m$JJ%$J%$S$J   F
!;  * @ U i          "'&'&476762"'&'&5476762 "'&'&4767632 "'&'&'476762"'&'.76762 "'&'&54767632!'!%3476762#"'&'& 4767632"'&'$476762#"'&'4767632"'&'&$H%$HJ&$UJHJH~J&$	YٍH$%$%HH$%$%HRHJ%$HG$$%$HGH%$H%=m$JJ%$J%$S$J    F
!;    ! 7 M c y  7!'!%3476762#"'&'& 4767632"'&'$476762#"'&'4767632"'&'&476762"'&'&	YٍH$%$%HH$%$%HJHF%=m$JJ%$J%$S$J$$%  	  F
!;    " 8 N d z   4767632"'&'&!'!%3476762#"'&'& 4767632"'&'$476762#"'&'4767632"'&'&476762"'&'&0&$I	YٍH$%$%HH$%$%HJH$$%%=m$JJ%$J%$S$J$$% 
  F
!;  , 0 4 8 N d z    "'&'&4767632"'&'&4767632!'!%3476762#"'&'& 4767632"'&'$476762#"'&'4767632"'&'&476762"'&'&$$%$%$	YٍH$%$%HH$%$%HJH?H%$HG%=m$JJ%$J%$S$J$$%      F
!;  + A E I M c y     "'&'&4767632"'&'&476762"'&'&4767632!'!%3476762#"'&'& 4767632"'&'$476762#"'&'4767632"'&'&476762"'&'&$$%$H$%$	YٍH$%$%HH$%$%HJH?H%$	JHHG%=m$JJ%$J%$S$J$$%   F
!;  + A W [ _ c y      476762#"'&'& 4767632"'&'$476762#"'&'4767632"'&'&!'!%3476762#"'&'& 4767632"'&'$476762#"'&'4767632"'&'&476762"'&'&'H$%$%HH$%$%H	YٍH$%$%HH$%$%HJH$JJ%$J%$S$J%=m$JJ%$J%$S$J$$%     F
!;  + A W n r v z       476762#"'&'& 4767632"'&'$476762#"'&'4767632"'&'&4767632"'&'&!'!%3476762#"'&'& 4767632"'&'$476762#"'&'4767632"'&'&476762"'&'&'H$%$%HH$%$%H&$I	YٍH$%$%HH$%$%HJH$JJ%$J%$S$J$$%%=m$JJ%$J%$S$J$$%   F
!;  * @ U i           "'&'&476762"'&'&5476762 "'&'&4767632 "'&'&'476762"'&'.76762 "'&'&54767632!'!%3476762#"'&'& 4767632"'&'$476762#"'&'4767632"'&'&476762"'&'&$H%$HJ&$UJHJH~J&$	YٍH$%$%HH$%$%HJHRHJ%$HG$$%$HGH%$H%=m$JJ%$J%$S$J$$%  	  F
!;    " : P f |   7!'!%3"'&'&54767632"'&'&54767632 "'&'&4767632"'&'&'476762"'&'.76762 "'&'&54767632	Yٍ$$%%$$%J%$0$H%$HJ%$F%=%$J&$$%H$%$%HH$%$%H 
  F
!;    " 9 Q g }    4767632"'&'&!'!%3"'&'&54767632"'&'&54767632 "'&'&4767632"'&'&'476762"'&'.76762 "'&'&547676320&$I	Yٍ$$%%$$%J%$0$H%$HJ%$$$%%=%$J&$$%H$%$%HH$%$%H      F
!;  , 0 4 8 O g }     "'&'&4767632"'&'&4767632!'!%3"'&'&54767632"'&'&54767632 "'&'&4767632"'&'&'476762"'&'.76762 "'&'&54767632$$%$%$	Yٍ$$%%$$%J%$0$H%$HJ%$?H%$HG%=%$J&$$%H$%$%HH$%$%H     F
!;  + A E I M d |      "'&'&4767632"'&'&476762"'&'&4767632!'!%3"'&'&54767632"'&'&54767632 "'&'&4767632"'&'&'476762"'&'.76762 "'&'&54767632$$%$H$%$	Yٍ$$%%$$%J%$0$H%$HJ%$?H%$	JHHG%=%$J&$$%H$%$%HH$%$%H      F
!;  + A W [ _ c z       476762#"'&'& 4767632"'&'$476762#"'&'4767632"'&'&!'!%3"'&'&54767632"'&'&54767632 "'&'&4767632"'&'&'476762"'&'.76762 "'&'&54767632'H$%$%HH$%$%H	Yٍ$$%%$$%J%$0$H%$HJ%$$JJ%$J%$S$J%=%$J&$$%H$%$%HH$%$%H    F
!;  + A W n r v z       476762#"'&'& 4767632"'&'$476762#"'&'4767632"'&'&4767632"'&'&!'!%3"'&'&54767632"'&'&54767632 "'&'&4767632"'&'&'476762"'&'.76762 "'&'&54767632'H$%$%HH$%$%H&$I	Yٍ$$%%$$%J%$0$H%$HJ%$$JJ%$J%$S$J$$%%=%$J&$$%H$%$%HH$%$%H      F
!;  * @ U i           "'&'&476762"'&'&5476762 "'&'&4767632 "'&'&'476762"'&'.76762 "'&'&54767632!'!%3"'&'&5476762"'&'&5476762 "'&'&4767632"'&'.76762"'&'.76762 "'&'&4767632$H%$HI&$UIHIH}I&$	Yٍ$I%$II%$0$H%$HI%$RHI%$HG$$%$HGH%$H%=%$I&$IHIIHHIIH    m    !5!!$f    m     !!7!!!!%=m?'   m    "  2#"'&'&47676!!7!!!!E$$%%=&$Ih?'   m  + / 3 7  476762#"'&'&476762"'&'&!!7!!!!H%$HG%=|$I;$%$?'     m  + A E I M  476762#"'&'&476762"'&'&476762"'&'&!!7!!!!H%$	JHHG%=|$$%2$H.$%$?'    m  + A W [ _ c  2"'&'&547676 2#"'&'&47672#"'&'&547672"'&'&47676!!7!!!!N$JJ%$J%$S$J%=H$%$%H"H$%$%Hq?'     m  + A W n r v z  2"'&'&547676 2#"'&'&47672#"'&'&547672"'&'&476762#"'&'&47676!!7!!!!N$JJ%$J%$S$J$$%%=H$%$%H"H$%$%H	&$Ih?'  	 m  * @ U i      %476762"'&'&%4767632"'&'&476762"'&' 4767672"'&'$4767>"'&' 4767632'&'!!7!!!!HJ%$HG$$%$HGH%$H%=$H%$H3J&$JHJHJ&$?'     m    !  2#"'&'&47676!!7!!!!E$$%%=kJH?'     m  , 0 4 8  2#"'&'&476762#"'&'&47676!!7!!!!E$$%%$$%%=iJH&$Ih?'   m  , B F J N  2#"'&'&47676476762#"'&'&476762"'&'&!!7!!!!E$$%H%$HG%=kJH$$%;$%$?'     m  , A W [ _ c  2#"'&'&47676476762#"'&'&476762"'&'&476762"'&'&!!7!!!!E$$%H%$	JHHG%=kJH$$%2$H.$%$?'  m  + A W m q u y  2#"'&'&476762"'&'&547676 2#"'&'&47672#"'&'&547672"'&'&47676!!7!!!!E$$%.$JJ%$J%$S$J%=kJHH$%$%H"H$%$%Hq?'   	 m  + A W m      2#"'&'&476762"'&'&547676 2#"'&'&47672#"'&'&547672"'&'&476762#"'&'&47676!!7!!!!E$$%.$JJ%$J%$S$J$$%%=kJHH$%$%H"H$%$%H	&$Ih?' 
 m  * @ V k       2#"'&'&47676476762"'&'&%4767632"'&'&476762"'&' 4767672"'&'$4767>"'&' 4767632'&'!!7!!!!E$$%HJ%$HG$$%$HGH%$H%=kJH&$H%$H3J&$JHJHJ&$?'    m  + / 3 7   476762#"'&'4767632"'&'&!!7!!!!H$%$%H%=J%$S$J?'     m    " 8 N  2#"'&'&47676!!7!!!!476762#"'&'4767632"'&'&E$$%%=H$%$%H&$Ih?'IJ%$S$J   m  , 0 4 8 N d  476762#"'&'&476762"'&'&!!7!!!!476762#"'&'4767632"'&'&H%$HG%=H$%$%H|$$%;$%$?'IJ%$S$J   m  + A E I M c y  476762#"'&'&476762"'&'&476762"'&'&!!7!!!!476762#"'&'4767632"'&'&H%$	JHHG%=H$%$%H|$$%2$H.$%$?'IJ%$S$J   	 m  + A W [ _ c y   2"'&'&547676 2#"'&'&47672#"'&'&547672"'&'&47676!!7!!!!476762#"'&'4767632"'&'&N$JJ%$J%$S$J%=H$%$%HH$%$%H"H$%$%Hq?'IJ%$S$J    
 m  + A W n r v z    2"'&'&547676 2#"'&'&47672#"'&'&547672"'&'&476762#"'&'&47676!!7!!!!476762#"'&'4767632"'&'&N$JJ%$J%$S$J$$%%=H$%$%HH$%$%H"H$%$%H	&$Ih?'IJ%$S$J   m  * @ U i        %476762"'&'&%4767632"'&'&476762"'&' 4767672"'&'$4767>"'&' 4767632'&'!!7!!!!476762#"'&'4767632"'&'&HJ%$HG$$%$HGH%$H%=H$%$%H$H%$H3J&$JHJHJ&$?'IJ%$S$J     m  + A E I M   476762#"'&'476762"'&'&4767632"'&'&!!7!!!!H$%JI	$%H%=J%$J$$%.$J?'     m  + A X \ ` d   476762#"'&'476762"'&'&4767632"'&'&2#"'&'&47676!!7!!!!H$%JI	$%H$$%%=J%$J$$%.$J+&$Ih?'   m  + A X n r v z   476762#"'&'476762"'&'&4767632"'&'&476762#"'&'&476762"'&'&!!7!!!!H$%JI	$%HH%$HG%=J%$J$$%.$J$$%;$%$?'    	 m  + A X m       476762#"'&'476762"'&'&4767632"'&'&476762#"'&'&476762"'&'&476762"'&'&!!7!!!!H$%JI	$%HH%$	JHHG%=J%$J$$%.$J$$%2$H.$%$?' 
 m  + A W m        476762#"'&'476762"'&'&4767632"'&'&2"'&'&547676 2#"'&'&47672#"'&'&547672"'&'&47676!!7!!!!H$%JI	$%Hz$JJ%$J%$S$J%=J%$J$$%.$J4H$%$%H"H$%$%Hq?'     m  + A W m         476762#"'&'476762"'&'&4767632"'&'&2"'&'&547676 2#"'&'&47672#"'&'&547672"'&'&476762#"'&'&47676!!7!!!!H$%JI	$%Hz$JJ%$J%$S$J$$%%=J%$J$$%.$J4H$%$%H"H$%$%H	&$Ih?'   m  + A V l          476762#"'&'476762"'&'&4767632"'&'&476762"'&'&%4767632"'&'&476762"'&' 4767672"'&'$4767>"'&' 4767632'&'!!7!!!!H$%JI	$%HHJ%$HG$$%$HGH%$H%=J%$J$$%.$J$H%$H3J&$JHJHJ&$?'     m  ) > S W [ _  2"'&'&47676 2#"'&'&47672#"'&'&47672"'&'&47676!!7!!!!N$II%$I%$S$I%=tHIIH"HIIH?'     m    ! 6 K ` u  2"'&'&47676!!7!!!!2"'&'&47676 2#"'&'&47672#"'&'&47672"'&'&47676E$I%=m$II%$I%$S$I&$Ih?'HIIH"HIIH   	 m  , 0 4 8 N d z   476762#"'&'&476762"'&'&!!7!!!!2"'&'&547676 2#"'&'&47672#"'&'&547672"'&'&47676H%$HG%=m$JJ%$J%$S$J|$$%;$%$?'H$%$%H"H$%$%H 
 m  + A E I M c y    476762#"'&'&476762"'&'&476762"'&'&!!7!!!!2"'&'&547676 2#"'&'&47672#"'&'&547672"'&'&47676H%$	JHHG%=m$JJ%$J%$S$J|$$%2$H.$%$?'H$%$%H"H$%$%H   m  + A W [ _ c y     2"'&'&547676 2#"'&'&47672#"'&'&547672"'&'&47676!!7!!!!2"'&'&547676 2#"'&'&47672#"'&'&547672"'&'&47676N$JJ%$J%$S$J%=m$JJ%$J%$S$JH$%$%H"H$%$%Hq?'H$%$%H"H$%$%H    m  ) > S i m q u      2"'&'&47676 2#"'&'&47672#"'&'&47672"'&'&476762"'&'&47676!!7!!!!2"'&'&47676 2#"'&'&47672#"'&'&47672"'&'&47676N$II%$I%$S$I$I%=m$II%$I%$S$IHIIH"HIIH	&$Ih?'HIIH"HIIH    m  * @ U i          %476762"'&'&%4767632"'&'&476762"'&' 4767672"'&'$4767>"'&' 4767632'&'!!7!!!!2"'&'&547676 2#"'&'&47672#"'&'&547672"'&'&47676HJ%$HG$$%$HGH%$H%=m$JJ%$J%$S$J$H%$H3J&$JHJHJ&$?'H$%$%H"H$%$%H    m    ! 7 M c y  !!7!!!!2"'&'&547676 2#"'&'&47672#"'&'&547672"'&'&476762#"'&'&47676%=m$JJ%$J%$S$J$$%m?'H$%$%H"H$%$%H	JH 	 m    " 8 N d z   2#"'&'&47676!!7!!!!2"'&'&547676 2#"'&'&47672#"'&'&547672"'&'&476762#"'&'&47676E$$%%=m$JJ%$J%$S$J$$%&$Ih?'H$%$%H"H$%$%H	JH 
 m  + / 3 7 L a v    476762#"'&'&476762"'&'&!!7!!!!2"'&'&47676 2#"'&'&47672#"'&'&47672"'&'&476762"'&'&47676H%$HG%=m$II%$I%$S$I$I|$I;$%$?'HIIH"HIIH	JH  m  + A E I M c y     476762#"'&'&476762"'&'&476762"'&'&!!7!!!!2"'&'&547676 2#"'&'&47672#"'&'&547672"'&'&476762#"'&'&47676H%$	JHHG%=m$JJ%$J%$S$J$$%|$$%2$H.$%$?'H$%$%H"H$%$%H	JH   m  + A W [ _ c y      2"'&'&547676 2#"'&'&47672#"'&'&547672"'&'&47676!!7!!!!2"'&'&547676 2#"'&'&47672#"'&'&547672"'&'&476762#"'&'&47676N$JJ%$J%$S$J%=m$JJ%$J%$S$J$$%H$%$%H"H$%$%Hq?'H$%$%H"H$%$%H	JH    m  + A W n r v z       2"'&'&547676 2#"'&'&47672#"'&'&547672"'&'&476762#"'&'&47676!!7!!!!2"'&'&547676 2#"'&'&47672#"'&'&547672"'&'&476762#"'&'&47676N$JJ%$J%$S$J$$%%=m$JJ%$J%$S$J$$%H$%$%H"H$%$%H	&$Ih?'H$%$%H"H$%$%H	JH  m  * @ U i           %476762"'&'&%4767632"'&'&476762"'&' 4767672"'&'$4767>"'&' 4767632'&'!!7!!!!2"'&'&547676 2#"'&'&47672#"'&'&547672"'&'&476762#"'&'&47676HJ%$HG$$%$HGH%$H%=m$JJ%$J%$S$J$$%$H%$H3J&$JHJHJ&$?'H$%$%H"H$%$%H	JH   	 m    " : P f |   !!7!!!!4767632"'&'&%4767632#"'&'&476762"'&'4767672"'&'&%4767>#"'&'& 4767632'&'%=%$J&$$%H$%$%HH$%$%Hm?'|$$%%$$%3J%$$H%$HkJ%$    
 m    " 9 Q g }    2#"'&'&47676!!7!!!!4767632"'&'&%4767632#"'&'&476762"'&'4767672"'&'&%4767>#"'&'& 4767632'&'E$$%%=%$J&$$%H$%$%HH$%$%H&$Ih?'|$$%%$$%3J%$$H%$HkJ%$     m  , 0 4 8 O g }     476762#"'&'&476762"'&'&!!7!!!!4767632"'&'&%4767632#"'&'&476762"'&'4767672"'&'&%4767>#"'&'& 4767632'&'H%$HG%=%$J&$$%H$%$%HH$%$%H|$$%;$%$?'|$$%%$$%3J%$$H%$HkJ%$     m  + A E I M d |      476762#"'&'&476762"'&'&476762"'&'&!!7!!!!4767632"'&'&%4767632#"'&'&476762"'&'4767672"'&'&%4767>#"'&'& 4767632'&'H%$	JHHG%=%$J&$$%H$%$%HH$%$%H|$$%2$H.$%$?'|$$%%$$%3J%$$H%$HkJ%$  m  + A W [ _ c z       2"'&'&547676 2#"'&'&47672#"'&'&547672"'&'&47676!!7!!!!4767632"'&'&%4767632#"'&'&476762"'&'4767672"'&'&%4767>#"'&'& 4767632'&'N$JJ%$J%$S$J%=%$J&$$%H$%$%HH$%$%HH$%$%H"H$%$%Hq?'|$$%%$$%3J%$$H%$HkJ%$   m  ) > S i m q u        2"'&'&47676 2#"'&'&47672#"'&'&47672"'&'&476762"'&'&47676!!7!!!!4767632"'&'&%4767632"'&'&476762'&'4767>"'&'&%4767>"'&'& 476762'&'N$II%$I%$S$I$I%=%$I&$IHIIHHIIHHIIH"HIIH	&$Ih?'|$I%$I4I%$$H%$HlI%$     m  * @ U i           %476762"'&'&%4767632"'&'&476762"'&' 4767672"'&'$4767>"'&' 4767632'&'!!7!!!!4767632"'&'&%4767632"'&'&476762'&'4767>"'&'&%4767>"'&'& 476762'&'HI%$HG$$%$HGH%$H%=%$I&$IHIIHHIIH$H%$H4I&$IHIHI&$?'|$I%$I4I%$$H%$HlI%$     gm     "3!254#%!2#!"54!xxxxAA,Gxxxyxxy  gm  $ 0 3 ;   #"'##65##"5476 "3!254#%!2#!"54!3#'!#A;	lB;;Bl	;"xxxxAAKҚ DDy~&%Nkk̛N%&VxxxyxxyU    gm  $ 0 I   #"'##65##"5476 "3!254#%!2#!"54!!567 54&#"5>32A;	lB;;Bl	;"xxxxAA"?XhU4zHM98y~&%Nkk̛N%&Vxxxyxxy?rn81^BQ##{l0    gm  $ 0 Y   #"'##65##"5476 "3!254#%!2#!"54#"&'532654&+532654&#"5>32A;	lB;;Bl	;"xxxxAA\e9}F4wCmxolV^^ad_(fQI7Zy~&%Nkk̛N%&VxxxyxxymR|yOFJLl?<:=svcE`    gm  $ 0 3 >   #"'##65##"5476 "3!254#%!2#!"54	!33##5!5A;	lB;;Bl	;"xxxxAA5by~&%Nkk̛N%&Vxxxyxxy]my     gm  $ 0 Q   #"'##65##"5476 "3!254#%!2#!"54!!67632#"&'53264&#"A;	lB;;Bl	;"xxxxAAy^^a`<~B9>>Eoo4h6y~&%Nkk̛N%&Vxxxyxxy_	MLKJqff    gm  $ 0 @ `   #"'##65##"5476 "3!254#%!2#!"54"327654'&&'&#"67632#"&547632A;	lB;;Bl	;"xxxxAAGX3333XW33331221DD
&9:DTTXWll122y~&%Nkk̛N%&Vxxxyxxy45[Z4554Z[54bg
KL1LMONuv	     gm  $ 0 7   #"'##65##"5476 "3!254#%!2#!"54!#!A;	lB;;Bl	;"xxxxAAiH3y~&%Nkk̛N%&Vxxxyxxy0   gm  $ 0 = [ j   #"'##65##"5476 "3!254#%!2#!"54 "32764'%&'&546 #"'&54767327654'&"A;	lB;;Bl	;"xxxxAA55j]\655T./RQ./SZ85UVUV56-/.UQ100/0/y~&%Nkk̛N%&Vxxxyxxy[,+KLV,++]12Hdt::dJ01:7PyAAAAyN98?&%%$A?&%%$   gm  $ 0 P _   #"'##65##"5476 "3!254#%!2#!"54532767#"&547632#"'&2654'&#"A;	lB;;Bl	;"xxxxAA.1220DC
#<9EWXWXkl122Xf33XU5443y~&%Nkk̛N%&Vxxxyxxyg
KK/MNoouv	rh\Z4554Z\44    gm  $ 0 > J Q   #"'##65##"5476 "3!254#%!2#!"54 "27654/2#"&546573A;	lB;;Bl	;"xxxxAA2332233yty~&%Nkk̛N%&VxxxyxxyVVVVVVV)t'  gm  $ 0 =   #"'##65##"5476 "3!254#%!2#!"543+53265A;	lB;;Bl	;"xxxxAAA@1(TFy~&%Nkk̛N%&VxxxyxxyܕFE`Tl  gm  $ 0 J   #"'##65##"5476 "3!254#%!2#!"54#"&54632.#"3267A;	lB;;Bl	;"xxxxAA<1e9ɴ9f0/j6||{}7j.y~&%Nkk̛N%&Vxxxyxxyt"$$"   gm   4 @ L  "#"&54632&#"32 #"'##65##"5476 "3!254#%!2#!"54VX~_
Ua`UU`aA;	lB;;Bl	;"xxxxAA,ۥ(j8pny~&%Nkk̛N%&Vxxxyxxy   gm  $ 0 ;   #"'##65##"5476 "3!254#%!2#!"5433	##A;	lB;;Bl	;"xxxxAAjixy~&%Nkk̛N%&VxxxyxxyazBm     gm  ! - 0 8  67632	&547632"3!254#%!2#!"54!3#'!#7>T>}}?V<7xxxxAAKҚ DDv>G-;n;-GAxxxyxxyU    gm  ! - F  67632	&547632"3!254#%!2#!"54!!567 54&#"5>327>T>}}?V<7xxxxAA"?XhU4zHM98v>G-;n;-GAxxxyxxy?rn81^BQ##{l0    gm  ! - V  67632	&547632"3!254#%!2#!"54#"&'532654&+532654&#"5>327>T>}}?V<7xxxxAA\e9}F4wCmxolV^^ad_(fQI7Zv>G-;n;-GAxxxyxxymR|yOFJLl?<:=svcE`    gm  ! - 0 ;  67632	&547632"3!254#%!2#!"54	!33##5!57>T>}}?V<7xxxxAA5bv>G-;n;-GAxxxyxxy]my     gm  ! - N  67632	&547632"3!254#%!2#!"54!!67632#"&'53264&#"7>T>}}?V<7xxxxAAy^^a`<~B9>>Eoo4h6v>G-;n;-GAxxxyxxy_	MLKJqff    gm  ! - = ]  67632	&547632"3!254#%!2#!"54"327654'&&'&#"67632#"&5476327>T>}}?V<7xxxxAAGX3333XW33331221DD
&9:DTTXWll122v>G-;n;-GAxxxyxxy45[Z4554Z[54bg
KL1LMONuv	     gm  ! - 4  67632	&547632"3!254#%!2#!"54!#!7>T>}}?V<7xxxxAAiH3v>G-;n;-GAxxxyxxy0   gm  ! - : X g  67632	&547632"3!254#%!2#!"54 "32764'%&'&546 #"'&54767327654'&"7>T>}}?V<7xxxxAA55j]\655T./RQ./SZ85UVUV56-/.UQ100/0/v>G-;n;-GAxxxyxxy[,+KLV,++]12Hdt::dJ01:7PyAAAAyN98?&%%$A?&%%$   gm  ! - M \  67632	&547632"3!254#%!2#!"54532767#"&547632#"'&2654'&#"7>T>}}?V<7xxxxAA.1220DC
#<9EWXWXkl122Xf33XU5443v>G-;n;-GAxxxyxxyg
KK/MNoouv	rh\Z4554Z\44    gm  ! - ; G N  67632	&547632"3!254#%!2#!"54 "27654/2#"&5465737>T>}}?V<7xxxxAA2332233ytv>G-;n;-GAxxxyxxyVVVVVVV)t'  gm  ! - :  67632	&547632"3!254#%!2#!"543+532657>T>}}?V<7xxxxAAA@1(TFv>G-;n;-GAxxxyxxyܕFE`Tl  gm  ! - G  67632	&547632"3!254#%!2#!"54#"&54632.#"32677>T>}}?V<7xxxxAA<1e9ɴ9f0/j6||{}7j.v>G-;n;-GAxxxyxxyt"$$"   xm   1 = I  "#"&54632&#"3267632	&547632"3!254#%!2#!"54VX~_
Ua`UU`a7>T>}}?V<7xxxxAA,ۥ(j8p0v>G-;n;-GAxxxyxxy  gm  ! - 8  67632	&547632"3!254#%!2#!"5433	##7>T>}}?V<7xxxxAAjixv>G-;n;-GAxxxyxxyazBm     gm    ! )  0	00"3!254#%!2#!"54!3#'!#hfxxxxAAKҚ DD
xxxyxxyU     gm    7  0	00"3!254#%!2#!"54!!567 54&#"5>32hfxxxxAA"?XhU4zHM98
xxxyxxy?rn81^BQ##{l0     gm    G  0	00"3!254#%!2#!"54#"&'532654&+532654&#"5>32hfxxxxAA\e9}F4wCmxolV^^ad_(fQI7Z
xxxyxxymR|yOFJLl?<:=svcE`     gm    ! ,  0	00"3!254#%!2#!"54	!33##5!5hfxxxxAA5b
xxxyxxy]my  gm    ?  0	00"3!254#%!2#!"54!!67632#"&'53264&#"hfxxxxAAy^^a`<~B9>>Eoo4h6
xxxyxxy_	MLKJqff     gm    . N  0	00"3!254#%!2#!"54"327654'&&'&#"67632#"&547632hfxxxxAAGX3333XW33331221DD
&9:DTTXWll122
xxxyxxy45[Z4554Z[54bg
KL1LMONuv	  gm    %  0	00"3!254#%!2#!"54!#!hfxxxxAAiH3
xxxyxxy0    gm    + I X  0	00"3!254#%!2#!"54 "32764'%&'&546 #"'&54767327654'&"hfxxxxAA55j]\655T./RQ./SZ85UVUV56-/.UQ100/0/
xxxyxxy[,+KLV,++]12Hdt::dJ01:7PyAAAAyN98?&%%$A?&%%$    gm    > M  0	00"3!254#%!2#!"54532767#"&547632#"'&2654'&#"hfxxxxAA.1220DC
#<9EWXWXkl122Xf33XU5443
xxxyxxyg
KK/MNoouv	rh\Z4554Z\44     gm    , 8 ?  0	00"3!254#%!2#!"54 "27654/2#"&546573hfxxxxAA2332233yt
xxxyxxyVVVVVVV)t'   gm    +  0	00"3!254#%!2#!"543+53265hfxxxxAAA@1(TF
xxxyxxyܕFE`Tl   gm    8  0	00"3!254#%!2#!"54#"&54632.#"3267hfxxxxAA<1e9ɴ9f0/j6||{}7j.
xxxyxxyt"$$"    gm   " . :  0	00"#"&54632&#"32"3!254#%!2#!"54hf5VX~_
Ua`UU`auxxxxAAAۥ(j8poxxxyxxy    gm    )  0	00"3!254#%!2#!"5433	##hfxxxxAAjix
xxxyxxyazBm  gm 	  !  !	!"3!254#%!2#!"540xxxxAA1GG}xxxyxxy     gm # / ; > F  65'&'&547632&54 632'"3!254#%!2#!"54!3#'!#U9H5?K1||1K?5I9xxxxAAKҚ DDLC4$jj$4FLxxxyxxyU     gm # / ; T  65'&'&547632&54 632'"3!254#%!2#!"54!!567 54&#"5>32U9H5?K1||1K?5I9xxxxAA"?XhU4zHM98LC4$jj$4FLxxxyxxy?rn81^BQ##{l0     gm # / ; d  65'&'&547632&54 632'"3!254#%!2#!"54#"&'532654&+532654&#"5>32U9H5?K1||1K?5I9xxxxAA\e9}F4wCmxolV^^ad_(fQI7ZLC4$jj$4FLxxxyxxymR|yOFJLl?<:=svcE`     gm # / ; > I  65'&'&547632&54 632'"3!254#%!2#!"54	!33##5!5U9H5?K1||1K?5I9xxxxAA5bLC4$jj$4FLxxxyxxy]my  gm # / ; \  65'&'&547632&54 632'"3!254#%!2#!"54!!67632#"&'53264&#"U9H5?K1||1K?5I9xxxxAAy^^a`<~B9>>Eoo4h6LC4$jj$4FLxxxyxxy_	MLKJqff     gm # / ; K k  65'&'&547632&54 632'"3!254#%!2#!"54"327654'&&'&#"67632#"&547632U9H5?K1||1K?5I9xxxxAAGX3333XW33331221DD
&9:DTTXWll122LC4$jj$4FLxxxyxxy45[Z4554Z[54bg
KL1LMONuv	  gm # / ; B  65'&'&547632&54 632'"3!254#%!2#!"54!#!U9H5?K1||1K?5I9xxxxAAiH3LC4$jj$4FLxxxyxxy0    gm # / ; H f u  65'&'&547632&54 632'"3!254#%!2#!"54 "32764'%&'&546 #"'&54767327654'&"U9H5?K1||1K?5I9xxxxAA55j]\655T./RQ./SZ85UVUV56-/.UQ100/0/LC4$jj$4FLxxxyxxy[,+KLV,++]12Hdt::dJ01:7PyAAAAyN98?&%%$A?&%%$    gm # / ; [ j  65'&'&547632&54 632'"3!254#%!2#!"54532767#"&547632#"'&2654'&#"U9H5?K1||1K?5I9xxxxAA.1220DC
#<9EWXWXkl122Xf33XU5443LC4$jj$4FLxxxyxxyg
KK/MNoouv	rh\Z4554Z\44     gm # / ; I U \  65'&'&547632&54 632'"3!254#%!2#!"54 "27654/2#"&546573U9H5?K1||1K?5I9xxxxAA2332233ytLC4$jj$4FLxxxyxxyVVVVVVV)t'   gm # / ; H  65'&'&547632&54 632'"3!254#%!2#!"543+53265U9H5?K1||1K?5I9xxxxAAA@1(TFLC4$jj$4FLxxxyxxyܕFE`Tl   gm # / ; U  65'&'&547632&54 632'"3!254#%!2#!"54#"&54632.#"3267U9H5?K1||1K?5I9xxxxAA<1e9ɴ9f0/j6||{}7j.LC4$jj$4FLxxxyxxyt"$$"    gm # / ; M W  65'&'&547632&54 632'"3!254#%!2#!"54"#"&54632&#"32U9H5?K1||1K?5I9xxxxAA3VX~_
Ua`UU`aLC4$jj$4FLxxxyxxyۥ(j8p   gm # / ; F  65'&'&547632&54 632'"3!254#%!2#!"5433	##U9H5?K1||1K?5I9xxxxAAjixLC4$jj$4FLxxxyxxyazBm  gm 	   +  !%%!%%"3!254#%!2#!"54decb`bMxxxxAAnξ;3o(T"(Uxxxyxxy     jn    !   !  tuu   jn 	      ! !   !  ,=C`tu<=u    jn     !   !     !ut~<Atu<=     jn     !   !     !ut~<Atu<=   jn     !   !   !   !  tu<=CAutC<=@    jn     !   !   %   tu`Au{@C  jn     !   !  0   tuAu{@C     jn 	    %    !   !  +aCut@Ctu  jV    # + 3     462"7"32654$"&462"32654 462"6"&4622>7>54&'&'>54&#"&547&"'654.#"'72>32%%"&''%&/'%.547&54632B\BB\t-.B\BB\,-o    lN.	;qsV6C70AIbbOSC**CSObbIA07C6Vsq;	.8L+ʏ]KY  YK]+8ggg=>uggg=>"6''6']6''6'$9]W>:LktLJ73(#XQik\B?&STTS&?B\kiQX#(37JLtkL>W]9rlȡ~3D#@mm@#D3~lȬr    Kj	- 	   " ( ,      "&4632'2654#"3#"&46327'7#5%32767654'&'7>732>7>54'.#"&$ &/.#"3276%2654#"'747'&'#".'.54>7>32676 767>32+"&'&'&'&'& '326y2>=32>=-5nnI3=>23=>S39?*nB?94iEB9?B
R' 8%/61.4&++ #?Y==Y?# ++&4.16/%8 'R
-*?99
!;+57?
B:),#3A32%A(77(A%23A3#,):B
?75+;!
9"`	 B6Ĉ6B 	_#4aa7k~nnnnAnnnn-ںMғv$DK;7"D;KD$vh5WM' 1
*L7.4(#"NemmeN"#(4.7L*
1 'MW5hNA*,PI	,9	:kR4_5"2S''RNNR''S2"5_4Rk:	9,	IP,*0(sBD0H.&&.H0DBs($'&    =j   ( 2 A N    7327327#"'#""'72#"'&547632">7&>32#"'&327654'&#"654.'&'&#"&'%% 767%767%7&54>76?62>?''! '&'7&''\E[:TT:[E\lJDEI>zz>Z+Q (F65/AFeN$0+EdFB/56F( Qy0(,@

*tt*
B
g굤g
&<]ii];&l
m nmuvmmm
b@,,@bdx==x.L#$-G0,a&0$4%Ca,0G-$#;t.f>v::rAe.t+B,E@y>zwwz>y9L,B=|9jwAu:	aa	:uAwj9|BQW.>..>.QWB   j    % 1 ; G h      462"7"32654"547632 "&462432#"'&"3265473267!"& 7654'>54'&#".#" 632+ '.'&'#"&'&'&54632676&#";67&%32767654&'&#"RtRRt78,%,%RtRRt%,%,78j`;j|TVZGqpGZVT|j7aij"Y:8mm8:Y"jia (+G&<5t5<&G+( tRRtRh11R $ $tRRtR$ $k11TXLTr˚,0^1ioE55Eoi1^0, |,6[?Ki{pn7LL7np{iK?[6,|R:3/{W``W{/3:R    	 jn   " . 4 9 > B F  4632#"&%462#"& !   !   !   !  !   67##%67#5#Q;:RR:;QBRtSS:;Qm<=CAtuXLLHd e;QQ;:SS:;QQ;:SSC<=@ujj*%Z*Rdf 	 jn   # / 5 : ? C G   !   !   !   !  462#4&"!462#4&"!   67##%67#5#1<=CAtuČ=T=)Č=T=XLLHd eC<=@uŋSwwSŋSwwSj*%Z*Rdf 	 _jn      # / Y ~  5#67##67#%!   462#4&"!462#4&" !  "'&/ ! &"&5476?&7 !  4'#"'&/&'&! 6?"'<e)HdLLXLNXČ=T=ɌČ=T=tu];6L*+
L6<\<=%&-)//)-LfPRdZ**%jŋSwwSŋSwwSu%&69 96&%C<9-ǚ-9   jn   " . 4 <  4632#"&%462#"& !   !   !   !  !   %!$76Q;:RR:;QBRtSS:;Qtu<=CABW!\\;QQ;:SS:;QQ;:SSutC<=@j{u\\    jn   # / 5 >  462#4&"!462#4&" !   !   !   !  !   %!7276Č=T=ɌČ=T=tu<=CABW!\ʎ\ŋSwwSŋSwwSutC<=@j{u\\  jn   # / ; A J  "&547462#4&"!462#4&" !   !   !   !  !   %!7276AL6Č=T=ɌČ=T=tu<=CABW!\ʎ\,8"+6,#5 ŋSwwSŋSwwSutC<=@j{u\\  jn    % + 3  %%''7'7 !   !   !   !  !   %!$76|'MM٠MMtu<=CABW!\\'nnUUnnutC<=@j{u\\    jc   * 5 I W _  7767 '& !  /! '462#"&%4632#"&4$!  !  7&%654$! 6! &#"32s('s%22<=RtSS:;QQ;:RR:;QۼCAJKCݰG,&',H923QC<=99*;QQ;:SS:;QQvRS\\t[\6JQrrQJ6nn     j0     - 9 J  %462#"&%4632#"&'7 767 '& !   !  6 % !  7/M?RtSS:;QQ;:RR:;QMMs('s%22<=CA*go;QQ;:SS:;QQvRSno>G,&',H923QC<=@**t/0  jn   ' 2 9  7 767 '& !   !   !   !  4632#"&-%s('s%22<=CAtuQ;:RR:;Q'MMG,&',H923QC<=@u;QQvRSdnn  jn   ' 3 ?  7 767 '&462#4&"!462#4&" !   !   !   !  s('s%22,Č=T=ɌČ=T=tu<=CAG,&',H923ŋSwwSŋSwwSutC<=@     jn   7 C Q  462#4&"!462#4&" !27&'#  3   536 !   !   !  327674'&fČ=T=)Č=T=<veA+-{7CAtuO\&$!ŋSwwSŋSwwSC)0ljՠdc3=@u6C$(9.   jn   ' 3 ?  7 767 '&"&53265!"&53265 !   !   !   !  s('s%22 Č=T=7Č=T=?tu<=CAG,&',H923ŋSwwSŋSwwSbutC<=@   jn  / ; G W  2#'&5&7633476!2367672#'&'476 !   !   !   !  7 767 '&<2>
&?) 
#I=#
 )?&
>2<tu<=CAs('s%22%?A>ϾDLD  1GG1  DLD>A?%*utC<=@G,&',H923    jn  # 3 <   !  4'#"&5"&=# !   !  %7767 '&!&'&! 1<=Tn즦nUtuss('s%22`C<àOddddOu[G,&',H923;     jn     )  5!!5!2767! !   !   !   !  lʎ's%2~tu<=CA',H929utC<=@     jn    % 1  5!4632#"&%462#"& !   !   !   !  LvQ;:RR:;QBRtSS:;Qtu<=CAq;QQvRS:;QQ;:SSutC<=@     jn     #  5!!5!5! !   !   !   !  tu<=CA凇yutC<=@   jn    ) 7   !   !   !   !  5!5!2#"&545!5!2#"&5451<=CAtux:RR:;QVx:SS:;QC<=@u-Q;:SS:Q;:SS:  jn      * 6 B  "&475!%7'%4632#"&%462#"& !   !   !   !  PA6L6=MXMXMQ;:RR:;QBRtSS:;Qtu<=CA5O66O5Eonno;QQvRS:;QQ;:SSutC<=@    jn    ' 3  5!"&53265!"&53265 !   !   !   !  L6Č=T=7Č=T=?tu<=CAqŋSwwSŋSwwSbutC<=@  jn    % 1  %'4632#"&%462#"& !   !   !   !  9g9Q;:RR:;QBRtSS:;Qtu<=CA{{;QQvRS:;QQ;:SSutC<=@  jn     B  ' !   !   !   !  	7"'&'&#"'67623276762&__Z<=CAtu_4)FF"58 yFF"54(FFy\__C<=@u_Wi"bc(!__9("bb("_i"bb"(9_    jn   # / ;  4632#"&%462#"&7'7'7' !   !   !   !  Q;:RR:;QBRtSS:;QPA<<APtu<=CA;QQ;:SS:;QQ;:SS$>NvX..XvN>#utC<=@  jn  " ) 6 B N  2#'&5&76334764632#"&-%7'7'7' !   !   !   !  j<2>
&@( 
"VQ;:RR:;Q'MMنPA<<APtu<=CA%?A>ϾDLD  1GN;QQvRSdnn>NvX..XvN>#utC<=@   jn   $ 0 <  462#4&"!462#4&"7'7'7' !   !   !   !  Č=T=ɌČ=T=PA<<APtu<=CAŋSwwSŋSwwS]>NvX..XvN>#utC<=@     jn   $ 0 <  7'7'7'"&53265!"&53265 !   !   !   !  PA<<APLČ=T=7Č=T=?tu<=CA>NvX..XvN>ŋSwwSŋSwwSbutC<=@    jn   " . 8 >  4632#"&%462#"& !   !   !   !  %5!#"&5!#26Q;:RR:;QBRtSS:;Qm<=CAtuČU=T=;QQ;:SS:;QQ;:SSC<=@ucŋSww     jn 
   ) 3 9  4632#"&-% !   !   !   !  %5!#"&5!#26Q;:RR:;Q'MM<=CAtuČU=T=;QQvRSdnnC<=@ucŋSww   jn    % / 5   !   !   !   !  '7'7%%5!#"&5!#261<=CAtu2MM'MMČU=T=C<=@uUnnnnŋSww   jn     ) 5 F  %7'%4632#"&%462#"& !   !   !   !  676 &'&#&MXMXMQ;:RR:;QBRtSS:;Qtu<=CA%23$s(ʎ'onno;QQvRS:;QQ;:SSutC<=@%8338H,'',    jn    " - 9 E V  %'6762&'&"%7'%4632#"&%462#"& !   !   !   !  676 &'&#&yFFyT;MXMXMQ;:RR:;QBRtSS:;Qtu<=CA%23$s(ʎ'9("bb"(9<<donno;QQvRS:;QQ;:SSutC<=@%8338H,'',   jn     ) 5 F  '4632#"&%462#"&% !   !   !   !  676 &'&#&MM+Q;:RR:;QBRtSS:;Q/M%tu<=CA%23$s(ʎ'gno;QQvRS:;QQ;:SSoutC<=@%8338H,'',   jn   ( , 7 B F V  676 &'&#& !   !   !   !  %462#"&%4632#"&''6762&'&"%23$s(ʎ'<=CAtu(/M?RtSS:;QQ;:RR:;QMMyFFyTL8338H,'',C<=@uo;QQ;:SS:;QQvRSno9("bb"(9<<    jn   # 4 O   !   !   !   !  "&53265676 &'&#&"&54?&'&532651<=CAtuHČ=T=%23$s(ʎ'F:M L6 M:F=T=C<=@uŋSwwS8338H,'',bQ?7#+6,#5?RbSwwS    jn    * 6  676 &'&#&%%''7'7 !   !   !   !  %23$s(ʎ''MM٠MMtu<=CAL8338H,'',"nnUUnnutC<=@   jn    ! - 9  '	7	676 &'&#&"&47 !   !   !   !  ___/%23$s(ʎ'B6L6<=CAtu\___8338H,'',#5O66O5C<=@u   jn   " . 4 <  4632#"&%462#"& !   !   !   !  !4   !&'& Q;:RR:;QBRtSS:;Qtu<=CA''EkjE;QQ;:SS:;QQ;:SSutC<=@Fa`LtuL     jn     ) 5 ; C  %7'%4632#"&%462#"& !   !   !   !  !4   !&'& MXMXMQ;:RR:;QBRtSS:;Qtu<=CA''EkjEonno;QQvRS:;QQ;:SSutC<=@Fa`LtuL     jn    N Z f l x        32654&#"!&'& !4    !  4'#&'#5"'#5&47&'##"&'##5 !   !  4632#"&%6754&#"326'#"&546325&'&'67%&'%67%tJUioOLr7EkjE?''<=5D%Dm8D++!"D"!++D8nD%D6tuq"!# ## 	rLOoiUJt#!"$ g!"$!"+O# *"!$RluIOoo`LtuLF7C<;.)nY6G$@<<=j<<@$F7Y*.żu!!# 
OooOIulR #!!y
(
	&!--!	  jn      ' - 5  '	7	'	7 !   !   !   !  !4   !&'& ______tu<=CA''EkjE___X___?utC<=@Fa`LtuL    jn   ) 5 A G O  767632#"&53265!"&53265 !   !   !   !  !4   !&'& U%$
';Č=T=7Č=T=?tu<=CA''EkjEt2"$ŋSwwSŋSwwSbutC<=@Fa`LtuL   jn    % + 3  %%''7'7 !   !   !   !  !4   !&'& |'MM٠MMtu<=CA''EkjE'nnUUnnutC<=@Fa`LtuL     _jn    = b  %!4   '7'7%% !  "'&/ ! &"&5476?&7 !  4'#"'&/&'&! 6?"'''MM'MM.tu];6L*+
L6<\<=%&-)//)-LFtUnnnnu%&69 96&%C<9-ǚ-9  jn    * 6   462"4632#"&%462#"& !   !   !   !  ,ԖQ;:RR:;QBRtSS:;Qtu<=CAZԖԖ;;QQ;:SS:;QQ;:SSutC<=@     jn     % 1 =  %7'%4632#"&%462#"& 462" !   !   !   !  MXMXMQ;:RR:;QBRtSS:;QKjKKjtu<=CAonno;QQvRS:;QQ;:SSjKKjKutC<=@    jn     # . : F  "&47 462"%7'%4632#"&%462#"& !   !   !   !  PA6L6ԖUMXMXMQ;:RR:;QBRtSS:;Qtu<=CA5O66O5.ԖԖRonno;QQvRS:;QQ;:SSutC<=@     #<5n      k    &462 &462%'%%7 462"5.'46767  #5476764&"#5 '#54&/&'&'."% 7547676767>76767&'& QRtSSIQQuRRMXM~MXȖԖHVh=;;=hVH&z':%i)8^'ny'^8)i%:'z&Lw	l08<3233<80(SuQQuSSuQQvRnooԖԖx>[1'Sk
߰
kS1[>$n9(#mq,%@<?L N?<@%,qm#(9n$&%!Y;eV"Dx860
0nxD"Ve;Y   	 jn   # / ; G O [ g  #"&546324632#"&732654&#"4632#"&%4&#"326'#"&54632462" !   !   !   !  \jc_t_cj\0tJUioOLr"!#rLOoiUJt#!"Ԗtu<=CAf[cccc[fRluIOooO!!# OooOIulR #!!(ԖԖ&utC<=@  
 jn J V ^ b f k p t y ~   !  4'#&'#5##5##5##33'75& 733#5##5##5##'75# !   !  $462"335'35'5&575'1<=@D&D4DDDDDDD[MbM[DDDDDDD4D%DAtuKjKKjDDD414DD41C<,(g	-8?oi{``{io?)Ȉ	h(,}ujKKjKd8/c"#$zo/y$ہ"c     jql 	   % 1 = I U  !3!5#%!3!5#%!3!5# 462""&53265!"&53265 !   !   !   !  
{{{{{{KjKKjKČ=T=7Č=T=?tu<=CAlh\h\h\h\h\hjKKjKDŋSwwSŋSwwSbutC<=@    jn   # + 7  '7'77' !   !   !   !  462"'7'77'_qq_qr_qq_r+<=CAtuԖ_qq_qr_qq_r(_qr_qq_rq_qC<=@uԖԖd_qr_qq_rq_q     jn 
  ! -  4632#"&%462#"& !   !   !   !  Q;:RR:;QBRtSS:;Qtu<=CA;QQvRS:;QQ;:SSutC<=@  
 jn       $ ( , 7   !   !  5!35!%'%%7!!!! %6''&! !tulMXM~MX9Tv,unooa< 	 :j&   R         27#"'7327 $'&54732%% 76767%767%7654.'&'&#"&'&54>76?62>?''! '&&''7&''%4."#462!4."#462&'32?67#5#"'\>xcev>rt6;#y]M4f굡g.G

*tt*
&<]ii];&ikhdtt^b	e11B1Č1B1Č:$(2+$) `3H:G??4.x==x%B DG}KSB$bCJAi?l:1wv85j?g>LCR4.f>v::rAeME9jwAu:	aa	:uAwj9DMDVW$@"<<@6 @"O`DQ+ZEEY,Č+ZEEY,Č
c'F
aa	C    	 `j ? H ]        654.'&'& &'6?#"'% 76767%767#"&/27#"'7327 $'&54732"&546?4''7&54>76?62>?'#"&/ '&&'4."#462!4."#462&'32?67#5#"'

*tt*

P,3,04f鶢f.0,4.RȂ\>xbfv>rt6<"x|%7>4Zfd &<^ij]<&hjZ4<6$,4,tt*$0B2Č0B2Č:$(2,$( `4H:F>@4|(,.f>v::rAe.*',,3<%WLi?l:1wv85j?gD`(<3,.x==x%B DG}KSBA6%,4JDME9jwAu:	aa	:uAwj9DMD44,%6<3*hb]p-o+ZEEY,Č+ZEEY,Č
c'F
aa	C   	 :j&   * _        27#"'7327 $'&54732#"'267#"%% 76767%767%7654.'&'&#"&'&54>76?62>?''! '&&''7&''%4632#"'&7">7&#"'&'67632327654'&#"\>xcev>rt6;#yprw??52H:u}M4f굡g.G

*tt*
&<]ii];&ikhdtt^b	ecC>]0L!(C8$0+E8C%$M/2-;Cc.*,@.x==x%B DG}KSBh	ELME
N$bCJAi?l:1wv85j?g>LCR4.f>v::rAeME9jwAu:	aa	:uAwj9DMDVW$@"<<@6 @"O`DF_W;E!I+ /!-!CB*&_z5    =j   J     7327327#"'#""'72%654.'&'&#"&'%% 767%767%7&54>76?62>?''! '&'7&''>32#'&'4632%2347632#'&546\E[:TT:[E\lJDEI>zz>Z

*tt*
B
g굤g
&<]ii];&l
m nmuvmmm

:-.>>1@/=#-:
#=/@1>>b@,,@bdx==x.8t.f>v::rAe.t+B,E@y>zwwz>y9L,B=|9jwAu:	aa	:uAwj9|BQW.>..>.QWB0B=1JJ=B*HGrB0GH*B=ϾJJ1=    
 =j     ( 7 D u    -'"'72#"'&547632">7&>32#"'&327654'&#"654.'&'&#"&'%% 767%767%7&54>76?62>?''! '&'7&''2767!/MMMs>zz>Z+Q (F65/AFeN$0+EdFB/56F( Qy0(,@

*tt*
B
g굤g
&<]ii];&l
m nmuvmmm
ʎ(s"5gonno=x==x.L#$-G0,a&0$4%Ca,0G-$#;t.f>v::rAe.t+B,E@y>zwwz>y9L,B=|9jwAu:	aa	:uAwj9|BQW.>..>.QWB(+H65   =j   ' 4 i     #"'&547632">7&>32#"'&327654'&#"654.'&'&#"&'%% 76?%767%7 2>?''! '&''7&''7&'54>76?7'7'7'27#"'7l+Q (F65/AFeN$0+EdFB/56F( Qy0(,@

*tt*
	B
f굡g
i];&l
m nmttmmm
l&<]PA<<AP[>wdev>L#$-G0,a&0$4%Ca,0G-$#;s.f>v::rAe.$A+B,E@y>zwvz>y9L,Ba	:uAwj9WBQW.>..>.QWB`*9jwAu:	a:=NwY.-YwN=.x==x    =j   ' 4 e        #"'&547632">7&>32#"'&327654'&#"654.'&'&#"&'%% 767%767%7&54>76?62>?''! '&'7&''62&"%6 &#" 27#"'7'%%l+Q (F65/AFeN$0+EdFB/56F( Qy0(,@

*tt*
B
g굤g
&<]ii];&l
m nmuvmmm
GFF`T`Ȑ[>wdev>MM{/ML#$-G0,a&0$4%Ca,0G-$#;t.f>v::rAe.t+B,E@y>zwwz>y9L,B=|9jwAu:	aa	:uAwj9|BQW.>..>.QWBcc_<<`.x==x=noo   =j   , 4 d   "&545"'7276?.53265!"&532656 & &6?6?62>?''   '7&''!2$7%767%7654/&'& &'%%BM 6L6nv>[[3 M=T=7Č=T=`n &<]ii];&+l
m nmudfvmmm
;Yg
A+tt* B
?5O66,5=x..c?SwwSŋSwwSڵ`|jau:	aa	:ua̠|BQW.>.*.>.QWBz>y9L,B+Qb::Tnk+B,E@y>     =j 4 s {     654.'&'&#"&'%% 76?%767%7 2>?''! '&''7&''7&'54>76?!&'& !47632 7'*

*tt*
	B
f굡g
i];&l
m nmttmmm
l&<]EkjE?(___ڃs.f>v::rAe.$A+B,E@y>zwvz>y9L,Ba	:uAwj9WBQW.>..>.QWB`*9jwAu:	aGaKtuK礣~____    jn   ' 2 9  676 &'&  !   !   !   !  %4632#"&%5%%22%s'l(<=CAtuQ;:RR:;Q'MM8329H,'&,@=<Ctb:SRvQQUnn mf  @ 1 0!#f     ;   @  1 <203#%3#    mN  8 1 0 KTX     @878Y@  / /]!#3    \ # @ 	  @!	$ 

$999991 <29990 KTX $  $ $ @878Y@\	 					# #+]]'&'&#"#465463232653#"&8- (kW%J';'%'kW&F#<2j'<9j   8 1 0 KTX     @878Y@  / /]#   y  E@	 91 <90 KTX     @878Y@  / //	]!#'#f4߲ǲ    y  K@	 91 290 KTX     @878Y@////]373f߲ǲ P  S@  1 20 KTX     @878Y@  / ////	/]332673#"&`LL`=<<=  w   *  1 0 KTX     @878Y!!w        @ O?]1 <20!#!#ı    `    #!##            53#            73#'3#            3#3#'3#}}d           3#3#'3#}}d           3#3#d             3#3#3#3#dd   "  %'$&7!327676'!;# +~@f3HT͜1@"f62kK4)MM \^Z[B/IVqgK-ME    UXM    XXN    	 , :  ;#"'&''$&7!! 7&'&54767632654'&#"P}/k@:Gd7k@f3HY@1shƍW4$<K2.0C 	8K\^ZFB
gA@:B)uQ&_rJ<*)Ne?       .  654'&"32!!2767'"'&54767676$2+/#04dp@;%RyQbmjQ=!q/eO&;1( 	EGT4,8*:-YB3$       +    ;#"'&'+327&54767654'&"W4$/kffğk/ħ$4WS..B)uQ~ 22 ~Qu)4hN77Nh   kJ  :  &'&;4%$'&767!3 767"'&'&547676763 /'*#$"z[G_T'f5<	lc]bm_Y5E)'-'nf>c{xx--@:b@RQT4,8*:79Q   "    #    UXM    XXN           %4'&"27>"'&47623J22J?@?@@?@$2%&2@@@@@?? R'&  )}') ' R  X') ' R    '    j'     X'     '} 8    h'}     h'}    'lP    '    '   'V    '&    '&   'q&  v <='q'  ='q'     <&G   	5&&Y  P   #."#> ``(=<<=  F  B@%
 11 221 /2990KSX@
66Y!!#!53265!Z`[nlfL<?yv\<    `   !3#!#53f`J   D`  !  !3#+"'#5$%3"'"3276f8sZlq3@h^+f&`0cvL9.XR' q >X  XY'c q    XR'X q >  X6u'X  4Xu'X  du'l q   du' q   aAR'S q >  BX5v'X  aAY'Sc  Bb5m'wt  aAu'xS  Ccpo'u"y  Cco'uQy  Cc5'u  a>'P  l>6u'P  N>u'P  l>'<P  Cct'n u  Cn' Z          !!pp        53265!!"&ITc\_JrX\t
4   &'Y   &   %! 7676'4'!;#"&75OI4f	":,IVQ9be DCmey" };,   8'    '    X'   ,' v  @'&M   X@'&N   r' >        5 KSKQZX 8Y1  /0@	P`p]!;#"&5fLf{\         }   X+   o`&          `    3%!!X\px    F`    6767#!+732675]>^#%,>f]&9UGs\ p`'^     M`&   _    G    !!!!        !#3!3#q#   	    %!5	    K&z  t  X K	e&z  u  X K&t  z   K &z  w  X K	e&z  x  X K &w  z  , $&}  w   $	&}  x         3!3f+         #3!3f +        #3!f +    Xt     264&"#"    3:R::RNY'Cꋋ2r\    t     264&"!"'!3&54   3:R::RmcNNc''Cꋋ2 \rr\       264&"3&54    #"':R::R'YNCꋋ2 \rT     m 
  !!!!yYYQ	|       m   #!!!!YY Q	|      ; 
  #!!!YY Q	|    K   !	!!3?Bd    K 
  !	!3!3g>?B d          #3!!	> dB      	  3!!!3fcfdd         #3!!!3fcf dd      	  #3!!!fcf dd       	  3!!!37/  d       	  #!!!37/  d         !!!7d    l       2>4."!&'.4> !":F:"":F:%#s煅s$%ZK--KZK--(6ظllظ6       !   2>4."!!&'.4> ":F:"":F:%#s煅s$%ZK--KZK--(  6ظllظ6   T     2>4."!&'.4> ":F:"":F:%#s煅s$%ZK--KZK--( 6ظllظ6      V  	  !3!!`d;`
     V  	  !3!!`d;Q`
     V  	  !3!!`d{`
    X  P     !!!#"&7676! !354&#"3,R['Fv4o;)9t)Ģyd n~}w>Qc     P  "  #!!!#"&7676! !354&#"3@R['Fv4o;)9t )Ģyd n~}w>Qc         #!!!#"&7676! !54&#"3@R['FvC4o;)9t )Ģydn~}w>Qc      }   3!!!!!UUk  d       }   #3!!!!!UUk   d         #3!!!!UU   d    }   !!!!!3WUU 9 +       }I     	!!!!!3kUUH  9 +       )!!!!!/kUU  9           #3264&!!23WKGfkg	%dpvdq]           #3!!23#3264&g	%?KGfk q] dpv        #3264&3!!2#WKGfkg	dpvd        !4'&'5!!!>(n'-7a3 tC          #!&'5!!!5(n'- Wr3 tC          #!&'5!!5(n'-  Wr3 tC         !!3{[g-T+     
  #!!3[g -T+          #!![g -T+    BB   $  34$!2>3234&#"!%4'&#"!f-3)YQRH#CBRs-kx& "r¼v;_c~     BB   &  #354$!2>3234&#"!%4'&#"!f-3)YQRH#CBR s-kx& "r¼v;_c~     B   $  #354$!2>324&#"!%4'&#"!f-3)YQRH#CBR s-kx&"r¼v;_c~       !   !!!!!!!T5f4gD o     !   #!!!!!!!h5f4g D o           #!!!!!!h5f4 D o          )!!!!!!!)!5f)f4g3D oo D         #!!!!!!!!!!h5f)f4g3 D oo   D      }    !!!!!!!!!!T5f)f4 D oo  D      	  !!!3c/ dd           !!!3!cQ/ d  d      	  !!3!c/ d d       K    !!!oYHX+     K  
  !!!!oYPX +          !!!oYPGX +    `     #2654&+!!2+!or~gGXH, dRNGRd9d    `     #2654&+3!!2+!or~gGH, dRNGRd 9d            #2654&+3!!2+or~gGH, dRNGRd 9d        !#!!3!3ffD+          #!#!!3!3ff D+      X   #!#!!3!ff D+     X      3#"!"$543!!!!KGfkh2d9pv9d         3#"!!"$543!!!!KGfkh2d9pv 9d          3#"!!"$543!!!KGfkh29pv 9d        ! 	  !!!!!Tg  +    !   #!!!!!hg   +        	  #!!!!h   +     K    	!3oWm~ - +    K  
  3!3o$~mm~ -  +           3!o$~m -  +  X    )  !&'.467675!!! 2>4.")ss*&"uACC<z'!!":F:"":F:t	6ظ6u 7[\\S?t ZK--KZK--     +  #!5&'.467675!!! 2>4.")ss*&"uACC<z'!!":F:"":F: t	6ظ6u 7[\\S?t ZK--KZK--   @  )  #!5&'.467675!! 2>4.")ss*&"uACC<z'!":F:"":F: t	6ظ6u 7[\\S?ZK--KZK--      	  !#!!3
+         #!#!!3 
+     X 	  #!#!! 
+         !#!!!3fFd       #!#!!!3fF d       X   #!#!!!fF d     	   3!!!3#F9 +  d          #3!!!3#F 9 +  d     X 	   #3!!!#F 9 + d     X    '   2>4."&'.46767!!":F:"":F:V)ss*f&"uACC?w'!ZK--KZK--t	6ظ6u7[\\X:t      )   2>4."!5&'.46767!!":F:"":F:)ss*f&"uACC?w'!ZK--KZK-- t	6ظ6u7[\\X:t      @  '   2>4."!5&'.46767!":F:"":F:)ss*f&"uACC?w'!ZK--KZK-- t	6ظ6u7[\\X:     X    +  !&'.467675!!!! 2>4.")ss*&"uACC<z'!!":F:"":F:t	6ظ6u  u7[\\S?t ZK--KZK--       ! -  #!5&'.467675!!!! 2>4.")ss*&"uACC<z'!!":F:"":F: t	6ظ6u  u7[\\S?t ZK--KZK--      @  +  #!5&'.467675!!! 2>4.")ss*&"uACC<z'!":F:"":F: t	6ظ6u  u7[\\S?ZK--KZK--   'b  'b  b     'b  'b c     'b  'c  b     'b  'c  c     'c  'b  b     'c  'b  c     'c  'c  b     'c  'c  c     JWG   #'##'##'x<<<<<<<xGxxxx   Vv   )!!!!!Rm    NV     VB`   )!!!!#fUtg@Q`T}V   F` %  %#"&5!3265! !"&'3265QmhG.pfic^[b]p[.w#&) !65   }R&  )U }R&   }&  'L }x&  6 }&  6&')  &'H  &'H' (  'X   'X   c&  ' r5&  'R8&  'R c&  5&  8&   c&  '_ 5&  ' 8&  '  
&  &  &   
&     &     &      &  R  &  R  &  R uF&    @&    F&  w 	&!  &"  p'p#   	&!  'r~&"  'q~p&#  'q~p 	&!  k&"  '#   kJ&$  ~k  'Xo"    'o#   kJ&$  k  J'"    J'#    
? 4  47!3! 7632654'%$4767!;!"') '$?f3QX*2uR
'`ptqiN%=P40Г:[^Zc:#R\M6#!w*6d3>T*JV 65?      #!2764'&'%$4767!#r6
'`ptqiN  '%
v
6#!w*6d3>T1       $  #!27654'%$4767!;!"'#wN
'`ptqiN%=P30_ '4q6#!w*6d3>T*JV  E&$  )@k  &  )k  &  )k &  9F  r&  E  r&  E &  &  E&  E EG&(  )@k  G&)  )k  G&*  )k EG&(  G&)  EG&*  E E4&(    4&)   K  4&*   K 8&  2  U&  L  X&  L 84&    Z4&     X4&    8&  U&   X&    ~G&4  '9{U'W&  WCX'W&   WC ~G&4  '){}') &  WCX') &   WC ~G&4  ?{jX'   XX'         	 @  
<2991 /0!!!33h=^qd       ! M@*    "	 	"<299991 9990!3267#"$546?>5%!!iAm@84`VQew\ N^@D*ii1Q~d:3\/FPDB*(ǾcX:=L-d X  u      ^y/_<      +    +r	e            m  !r2               3 f        +    B {s   / ) 
 mR o
    b    \    } j3 3       1 
  f w w  f  3     f  f)  u 
 1 
 =+ ' \          ^f X  X \m X{ ' \  R  V   X  \  j  7 d H) 7  \       } J       +  R o       m Z m  
   { u+ H dH dH h 1 
1 
1 
1 
1 
1 
   fw w w w     A !  f f f f f  -      f Xf Xf Xf Xf Xf Xb X Xm Xm Xm Xm X  # X  X X X X X  N    7  7 1 
f X1 
f X1 
f X f X f X f X f X  \ ! \w m Xw m Xw m Xw m Xw m X f \ f \ f \ f \  R     A $ ,      | 3 R R        t #       i   f X f X f X	V f X)  )  )    j  j  j  ju 
 u 
 u 
              =d H7  \ \ \ \ \ \{ ' }t   Q 4 f f X !t  \ Xw  h w{ fX \ |  
3 R  
V   f l _ fL XAt )  5 w j   u 
   7 a:  \ \. . T  L u . T  L J  E Z 
 q L 
b \  | 	 	p p 1 
f X   f X          m X1 
f X1 
f X  b X f \ f \3 R f X f X.  Yq L 
b \ f \
O L   1 
f X  b X - N1 
f X1 
f Xw m Xw m X /  f X f X)  w)        ju 
   e   \y }E X \ \1 
f Xw m X f X f X f X f X7     \ \1u j \A Q V  01 
w m X cT \) 7f  \   X X \V \m Xm X yt n\ n n nV \ \ X& 3 3   ]  ] x    V V V X   XE Xs h_ {N N 3     # j# j jR{ j  ] . \ 7 d H7   \x \  Y  u J J J J f  nz X  P V \ J J	? \	 \	= \ & o 6 ' =  .R .jJPJ n n n n nI  .V j + 
 
 
    / /          s    m  ^s     ^ m ] ]     T o o   w   V        K   n DM  /              B       \  e             K                             K  \  e      5    [      
        K      b    V      g                      ;  M    f      X  g         \  k                        T  $      p      p    q      p  p    p  h  -  j j     Xf Xe X3 [  a 5
  ' /1 
  1 
w  \  f 3 1 
    f  w u 
 f+ ' s 7 F ct n  g  c s  Yt n Y  X   = s  Y XT V  X; X +g B ) 4Z  X 'g  Xg  X3 5 pI i * *_ { . o f X f Xw  |G Z r - f x f \l  * W4 ^O l^ d f u 9 7 o  X f( '    f   D D f Dw w  
  f   A	< ^	
  
  + ; 1 
     {w 	      ^   f   fu 
+ ; f+ 'l w 	 
  dJ   	d ) f X X . v sm X  d  n  q   X   X 7  q)  ~    (<    # ?m Xm X (.  X j  # Z  (n  7   f X d (    3
   f X	   ot Q }  f X 
  
 	0 `Y X f X> t	b ` f X f X8 7  1        XrX t  0    . S :X *w Z 	    d3 n  n  0n  2 ( v   
0 #  s q f Xu 
 7 7 + ')  
 w ~ w ~ w  6 z 
6 z 
 	  3 
  6q +   t w ~  v  1 
f X1 
f X  b Xw m X hm X hm X	    d.   Y     f X f X f X  + ;7 + ;7 + ;7 w ~  . J < S :X *+ ') + ')   Z	F % Z \   	 6" +
O   f X 
l  t n ^ q
I ^ q    ? f \ =d H n 
# ^x q
0 #  t    6 -  7  :  6S v  M ~ 5 	  $ .=  u   u k Q $ u=   $ lS  u  -  e Z  tv      Q "  Q " & Q "   Q$ z   Q$ $  6$ " ~$ x$ $  
  ZS $ $ y $ % Z y / Z ?   d  _  .      _      e  ~      ~  i  _R o  ~         ~  X X X  4 X o [  X X X  X  Xp T Xf C J 9 C  X (w P  '   VV 	B 
    3     U  
  b
 
     } }
 
 
 
 O O w w 	K ' kU    ~ bU U                            y  ;  =          K   A   
 \ W
 ' k  V h
 
 
 
 
 
 
 
         } } } } } } } } }s
 
 
 
 
 O w 	K 	K 	K 	K 	K 	K ' k' k1 
, 1 U U U 1 1 1 1 1 1      ~ ~ ~ ~ ~  U U U  b    >    A b          ` XY 7    ^ < Xi i    .    7 L   X 7  X    X X        {      C      C  w   
 
   R Q X X X * V Q Q W W ) K M M` {    2 Q( b& T C i@ Z lE bx X I   P*            8    \ O   !3 0             *, , 4 @ 2 c c Q X G v
 Z
 Z ` On L T ;$ 2 P e 	 O $ c Y L@ 	 (K Y Y Y L L :
 Z E  O Y ] _ Y <  Y  $ Y K  D 1n d d Z dp d dh 4 d dr d d d  dn d d d  d < dz d d dl (  d dm  d R 2n dx dm do dm d d d d d Zo e d 21 
1 
1 
1 
= = = = = = %  
%  
%  
	1 	 	1 	 = 	1 	# 	1 	# = z < {f @f @( {( {( {( { @ {z ( {( {( {	 
 
	 
a 1 
1 
1 
1 
      %  
%  
%  
	1 	 	1 	 	1 	# 	1 	#   { {         s ss b s b s b z o z o z j sz j sz  {
 
 0 " s T    T T T  ;  T    ;  T;  T      { { T  T  T    T T T  ;  T;  ;  ;  T;  T;  ;  ;  { { 8    8 8 8    8      8  8     } {c {} {  T T Ts 8s 8s 8s Ts T	 	 	 	 T	 	 Ts TG { {G {  T T Ts 8s 8s 8s Ts T	 	 
D 	 T
D 	 T	 	 8	 	 8
D 	 T
D 	 TG {  T    T T T    T      T  T      { { {c Tc Tc T	 T	 T	 T	 T	 	 T	 	 T	 	 Ts \ Ts \ Ts \ Ts \ T {5 5 5 5 5 5 5 5 5                 {( { {C C  8       T T T  T { 1 h1 h1 h1 hm m m m 	a 	#  {       n n s sz j sc { T   T T   {  {	 {	 {	 {	 {	 {	 {	 { { T  T  { { {
\ {
\ { { { {
/ { T Ts 8s 8s Ts TG {5 5 
5 
5 5 5 
5 
    k { {M 	 { {! {! { {l {! {! {Y
|
y	u	qO	y q7   b X ( Xi i (x t n  ZR P   X XH XH XH  X X [r h# +# +     '7 d H \* tP 7  r h?  q w   v/ vq vq v# @7 v v v6 v v7 v7 vH @ O v vp  v & m m m m m m m m m m m m mO m m mO m m m m m m mO m m ln v 8 S@ ! m n m m ln  l S@ ! 7 v]  
  mO mO m m m m m m m m@ m m ms m m m mP mO m m~ m m mV m` m+ m m m m2 l m mW m0 m m mg m  C  C  C  C    1 
f X       f X  \  \  \  \  \w m Xw m Xw m Xw m Xw m Xw { ' f \      / \ N      R !3 R 3 R 3 R    B $  )  V  V  V          f X f X f X f X    )  )  )  )  D  j  j  j  j  ju 
 u 
 u 
 u 
           1 
7 1 
7  =d H =d H =d H =d H =d H+ ') + ') 7  \ \ \ \ \ \  d H7 f X{ '{{ '+  Y1 
f X1 
f X1 
f X1 
f X1 
f X1 
f X1 
f X1 
f X1 
f X1 
f X1 
f X1 
f Xw m Xw m Xw m Xw m Xw m Xw m Xw m Xw m X  k   f X f X f X f X f X f X f X l _ l _ l _ l _ l _              7 7 7 7  &  c c c c c c c c1 
1 
T Y {    t nt nt nt nt nt nU [   / k           
 
  	p 	 n     @  7 H      X X X X X X" w 	 	 l  g g g g g g g g q 	y 	 d  X X X X X X X XE  	 
   9   c ct nt n    X Xg g  X X c c c c c c c c1 
1 
T Y {              
 
  	p 	 n   X X X X X X X XE  	 
   9   c c c c c c c1 
1 
a 51 
 w  w         o   E      ) /  , A  Q  ]  g g g g   g g )   ^    ^ X X X X X ' 7 m w                 V    
                           R oR o n  n  n       
 
 
 
 B B B B   5  3'' V                                   B B ( (
 ( ( (
 ( L L       / )  Vh  > F   d     / )3 / ls =  d8x  ( 
  d p
 
                                                < m 8 a N T M A9 9 9 N oN g n < { m Z 8 a N T M A9 9 9 N oN g m m mM  m n m nO m n m D mo M f <  }V  $$ 	  < O > < "   F f 
 X   g 
 @    =  =  =    >  = )	] ) f	 +  )	' )    IN   ?  J j L  	 E  n   f @ Si , L (
?  '
 	 \ 5 7 7 3 1 
l T  } S v Kw 	y M ;Z g ' ?y 
 F Z
 Q F<   3 4u  X  * Fm C  Ta pH dH d dH dH mH dH mH ZH 8H dH aH dH ZH aH T d E   1 
 
 
a 
 + ' 'A '  f      7  	   )  	   X \V 
O k 
O k f X fH < d u d d u  
 d u d \ d u d u d u d d ZZ d  .  d   d d u u d ` d d _ u _ d d d d u d u d   d u Z u d u d u 76 H6666666 H z z6 u ` u d u d d u d 7 u 71 
 bZ ;w w  `    , ,   , ,    L L  )   d  R 3
 V LV LV I   , ,     b    b5555 n 
\   N
 /    z zZ y z                                                   ` `                                  555    ^ ^              P P P P W W P P P P P P P P         z  z z YW           c c 
              ~ d~ d    |   a a                      L      	C ,   , ,   , , 	C ,   ,   ,  @ r     xx dxx d O l       -	8 	8 P 	8  xP     X c 	8  #         ]           ]   s   s s   s   7  '  P\  x x x x x x x x x x < < < < < <xxxxxxxhh''''''''''''''''''  '  '  ''q''''''''''          l l   g g ' ' ' '   ' '   ' ' ' '   ' '   ' ' ' ' '  p  p r p p p p p p p p p7 p7         ' ' ' ' ' ' '     ' ' '  p     p p p p' ' '     ' ,   h, d, , , ,  + ,  } }_ } }	 
 , , , B , d, , , , , , , ,  ,  , }, , , dZ d 2 E \ , , ,  , , , , , , , , , , , , W W W , ,,    , ,S,, ,,, ], , , ,, m, , E, , , ,A, , ,U,,Q,0, , ,U,,L,0,C, ,X, ,B, ,X, ,   ,x,       , , , , , , , , , , , , , ,1      , , , , , , , , , , ,X,X, j, ,T }, y, },), ,,,, , , d 	  	f 9   	g T 
  Y   xD V V V V   V  I V V x  +  5  X 3     p p p pR> p  T V S T W W 0 V 0 0 0 0 0 2   p @ T  T T T p     n n T V      a a T T, f, z, z, z, z,   x  x>N nX ~ #9Uwlf x x x x x x x x x x 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 u  u  u u u u u u u    u u u u u + +  <   u   u  s    u n j        T V  .	B ux dx ux dx dx ux dx dx ux dx ux u@  @,@,@,@,@,@,@,@@,@,@,@,@,@,@,@@,@,@,@,@,@,@,@@,@,@,@,@,@,@,@@,@,@,@,@,@,@,@@,@,@,@,@,@,@,@@,@,@,@,@,@,@,@@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@@,@,@,@,@,@,@,@@,@,@,@,@,@,@,@@,@,@,@,@,@,@,@@,@,@,@,@,@,@,@@,@,@,@,@,@,@,@@,@,@,@,@,@,@,@@,@,@,@,@,@,@,@@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@, d u     _ _                :  :  :J                                                                           7 766     76 u u M M    ' ' ' '   $ $   " p M M 
 
 ) f B   3 R  \ \ b 1 
 c: 	 =s H7 N  B N  Xx    \M \h  J S WJ QA T (A U/ PV TA Pb Wk PJ Tq T TA Vw Te ^G TD \7 Ph Zb TV TV ZG V_ YP Zb Z ^F Zc ZG Z; W\ [ U# \ q f f i i sh c1 
1 
w w j      f f  , O`  q w  P 9  w  9   W q f f    f f f + ' fw 1 
 w  f  f        , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,    T u 
u  f3 3=   f f \w w     ) ) )1 
1 
 3 4=  =+ ' 1 
1 
w w   f  u  k  2d d  1    5 |  > t	b `	 d8 (	d q [   {e s ^L q
   f XL f X@ f X : 
L u 
 w  @ f X                              3 v3 vL L L   R sR s  @ 
  t nx  j
 
j X
F 
 X	 
o X 
` X 
` XH 
` X De X? 
  V v S@ xX ! 
@ f X ! 
 F F f \ ! 
 ! 
 8   3  s w  l % 3R)t v 7 w  T  
 @  b" 67 #B  b  b" 67 #" 6 b  b" 67 #" 6 b  bB 7 #" 6 b B  d d9 d7 d e dI <( d d d	M d d $ n d de d  Z F d dB d d Z k f d 
 d  2 d  d d d_ d d/ \ n n n n n n np np np np n n n n n n n n n n n n n n n X{ ' + ' ' 'w '( j     [   u' Q N N X\ I X X  X `  ( ( ( (    X X X ~ Y Yo { Y X X X X Xp f C 9 C  X (w   X XC  X
 x D
 x D
 x D
 x D
 x D
 x D	K 	 =	K 	 =         } } } } } } } }1 1 1 1 1 1 1 1  ~3 ~ ~3 ~D 
 H  kU  DDU  D                                                                             : : i : : : :  J     U U D  
 x D b 
 x D
 x D       } } } }
 O $
 O $
 
 
 
 O  O  w w uww w uw	K 	 =' k6 k=U s  $ D F ] ~3 ~D b HU  U  D D D T T T T                     2 dT  dF    x :  {  
  d :  l ( R 2  d\  L  d    d d  d  d, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,  ,  | |  f V < W  f  
 ( 
 =r 2 X [ X [m X / \ n    n n X [ \-  j 7 d < H (7  \1 
  f w w  f  3     f  f)  u 
 1 
 =+ ' \f X  X \m X{ ' \  R  V   X  \  j  7 d H) 7  \1 
  1 
w  \  f 3 1 
    f   fw u 
 f+ ' s 7   c s  Yt n Y  X   = s  Y XT V  X; X +g B ) 4Z  XZ ;( I i o_ {  . b    \    } n b    \    } j
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
                                                   / / / / / / / / / / / / / / / / / / / / / / / / / / / @ / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / W W W W W W W W X 	x KW =	@ W W 	Y _W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W 	Y _W W W W #W W  W W W W :	Y `W :W =W =W =W =W =W =W   m    m            w                  x D	 =6 k=D  x Dx D    &     ] xxxxx4xxxaxBxaxBxaxCxCxCxaxlxNxlxC  C  =  ss$ D D  y }E X    z                           ` X``Y YY7 77   l < X<<i iii ii   . ..   7 77L LL  X 7 77 X    X X  , , , , , , , , J t   } } } } }O $O $O $
 
  w uw	 =	 =	 =6 k=6 k=
+ 1 ks s 1 1 1 $ D$ D$ D3 ~D3 ~D3 ~D         $   
  7  9k  :  ;Y  <   & : $  & $  & $  & $  & $ 7a $ 8 $ 9u $ : $ << $ Y $ \ $  $  $  $  $ < $  $  $$a $&a $* $, $. $0 $2 $6 $8< $9 $:< $a $< $ $	~ $	 $	 $	< $
D $
 r $ D $ r % 9 % : % < %  %6 %8 %: % %	~ %	 %	 %	 &  / & 6 & & & & & &  & &" & & & &
 K &  K '  & ' <k ' k '8k ':k 'k '	k '
 ' )  )  )  )  )  ) $ ) D ) H ) R ) U} ) X ) \ )  )  )  )  )  )  )  )  )  )  )  )  )  )  )  )  )  )  )  )  )  )  )  )  )  )  )  )  )  )  )  )  )  )  )  )  )  )  )  ) ) ) ) )} )} )} )+ )- )/ )1 )3 )5 )9 ) ) ) ) ) )	 )
 & )
 ) * 7 * < *  *& *: . N . & . 2 . 8 . H . R . X . \} .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  . } . } .  .  .  . . .0 .1 .
 & . & / 2 / 7 / 8 / 9 / :a / < / \u /  /  /  /  /  /  /  /  /  /  /  / u / u / /& /0 /: /
) /  2  2  & 2  2 $ 2 9 2 ; 2 < 2  2  2  2  2  2  2: 3  3  3  3 $D 3 D 3 V 3 \ & 3 D 3 D 3 D 3 D 3 D 3  3  3  3  3  3  3  3  & 3  & 3! 3# 3
 9 3
a 3  & 3a 4  & 5  & 5  & 5 7 5 < 5 \ 5  5  5  5& 5: 6 6 6  6" 7  7  7  7  7  7 $a 7 7 / 7 D 7 F 7 H 7 R 7 U 7 V 7 X 7 Z 7 \ 7 a 7 a 7 a 7 a 7 a 7 \ 7  7 \ 7 \ 7 \ 7 \ 7 < 7  7 , 7  7 , 7 , 7 @ 7  7 @ 7 @ 7 @ 7 a 7 = 7  7 = 7 = 7  7  7  7  7  7a 7 7 7! 7# 71 7
 7 8 $ 8  8  8  8  8  9  9 k 9  9  9  9 $u 9 2 9 D 9 H 9 L 9 R 9 X 9 u 9 u 9 u 9 u 9 u 9  9  9  9  9  9  9  9  9  9  9  9  9  9  9  9  9  9  9  9  9  9  9  9  9  9  9  9  9 9 91 9
 9D : Y :  : Y :  :  : $ : D : H : R : U :  :  :  :  :  :  :  :  :  :  :  :  :  :  :  :  :  :  :  :  :  :  :  : : : ; Y ; & ; 2 ; H ;  ;  ;  ;  ;  ;  ;  ;  ;  ;  ;  ;  ;  ;  ; ;
 & ; & <  <  <  < N < N < $< < & < 2 < DD < HD < RD < Xk < < < < < < < < < < <  <  <  <  <  <  <  < D < D < D < D < D < D < D < D < D < D < D < D < D < D < D < D < D < k < k < k < k <  <  < D < <D <1k <
 < =  D \ D  D  I  I  I  I
  I  V N H N R N  N  N  N  N  N  N  N  N  N  N  N U  U  U
 V U  & Y Y Y Y Z } Z } \ a \ D   &   &   &   &  7a  8  9u  :  <<  Y  \          <     $a &a * , . 0 2 6 8< 9 :< a <  	~ 	 	 	< 
D 
 r  D  r   &   &   &   &  7a  8  9u  :  <<  Y  \          <     $a &a * , . 0 2 6 8< 9 :< a <  	~ 	 	 	< 
D 
 r  D  r   &   &   &   &  7a  8  9u  :  <<  Y  \          <     $a &a * , . 0 2 6 8< 9 :< a <  	~ 	 	 	< 
D 
 r  D  r   &   &   &   &  7a  8  9u  :  <<  Y  \          <     $a &a * , . 0 2 6 8< 9 :< a <  	~ 	 	 	< 
D 
 r  D  r   &   &   &   &  7a  8  9u  :  <<  Y  \          <     $a &a * , . 0 2 6 8< 9 :< a <  	~ 	 	 	< 
D 
 r  D  r     /  6 &  &  &   & " &  & 
 K   K   &  <k  k 8k :k k 	k 
      &    $  9  ;  <             :     &    $  9  ;  <             :     &    $  9  ;  <             :     &    $  9  ;  <             :     &    $  9  ;  <             :     &    $  9  ;  <             :  $            $            $            $                  N  N  $<  &  2  DD  HD  RD  Xk  <  <  <  <  <                D  D  D  D  D  D  D  D  D  D  D  D  D  D  D  D  D  k  k  k  k      D  D 1k 
   \      \      \      \      \      \      a  D  a  D   &   &   &   &  7a  8  9u  :  <<  Y  \          <     $a &a * , . 0 2 6 8< 9 :< a <  	~ 	 	 	< 
D 
 r  D  r   &   &   &   &  7a  8  9u  :  <<  Y  \          <     $a &a * , . 0 2 6 8< 9 :< a <  	~ 	 	 	< 
D 
 r  D  r   &   &   &   &  7a  8  9u  :  <<  Y  \          <     $a &a * , . 0 2 6 8< 9 :< a <  	~ 	 	< 
D 
 r  D  r   /  6 &  &  &   & " &  & 
 K   K   /  6 &  &  &   & " &  & 
 K   K   /  6 &  &  &   & " &  & 
 K   K   /  6 &  &  &   & " &  & 
 K   K   &  <k  k 8k :k k 	k 
    &  <k  k 8k :k k 	k 
   7  <   & :  2  7  8  9  :a  <  \u                        u  u  & 0 : 
)    2  7  8  9  :a  <  \u                        u  u  & 0 : 
)   O
 2 7 8 9 :a < \u            u u&0:
   &  & 7 < \   &:  
 V  &  &  & 7 < \   &:  
 V  &  6   "" 6" ""& & & & & & $a& 7 /& D& F& H& R& U& V& X& Z& \& a& a& a& a& a& & & & & & & <& & & & & & & & & & & a& & & & & & & & & &a&&&!&#&& /&1&
&0 $0 0 0 0 0 : : : : N: N: $<: &: 2: DD: HD: RD: Xk: <: <: <: <: <: : : : : : : : D: D: D: D: D: D: D: D: D: D: D: D: D: D: D: D: D: k: k: k: k: : : D::D:1k:
:? } $} -} 9 &} < K} } } } } } }  K}: K
 7
 9k
 :
 ;Y
 <
 
&
:
 $
 -
 9 &
 < K
 
 
 
 
 
 
  K
: K
 7a
 9
 :)
 <
 
&a
:
 $
 -
 < &
 
 
 
 
 
 
  &
: & 7a 9 :) < &a:      $a 7 / D F H R U V X Z \ a a a a a \  \ \ \ \ <  ,  , , @  @ @ @ a =  = =     a!#1
 N & 2 8 H R X \}                          } }   01
 & & H R           RjSjTjUjxVjXjYjZj[j\j^j_j`jajbjdjejxfjgjhj         L   L   L   L                     x    `        (    	  	  
  4              $  p          H      (          T          x      T  @  h    <    !  "  #  $0  $t  $  $  %0  %X  %  &  'x  (  (  )T  )  *  +<  +  ,  ,  -  -  .p  .  /  08  0  2  2  3L  4L  6  7  9<  9  :  :  ;  <,  <,  <  =\  =  ?  @,  @t  A  B  CD  D`  D  E  E@  F  F  Gp  G  H  I\  I  JX  J  J  K\  K  LX  L  L  M  M4  M  N  N   N@  Nl  N  P  Q  Q  Q  Q  Q  R  R8  R\  R  R  S  S  S  T  T  TH  T  T  Vx  V  V  V  W  W,  X  Y  Y  Y4  YL  Yp  Y  Y  [@  [X  [p  [  [  [  [  \  \4  \h  ]  ^  ^  ^4  ^T  ^x  ^  _  `P  `t  `  `  `  `  a  a  a  b  bD  bh  b  b  b  b  b  b  c  c(  c@  cX  cp  c  c  dh  d  d  d  e  e(  e@  eX  ep  e  e  e  e  e  f  f(  f@  fX  fp  f  f  gd  h  h(  hL  hx  h  h  h  h  i  i8  it  i  i  i  j  j$  j<  k   k,  kl  k  k  k  k  l  l$  l  mt  m  m  m  m  m  n  n  n  oL  o  o  o  p   p8  pP  q  r0  rH  r`  rx  r  r  r  r  r  s  s   s8  sP  sh  s  s  s  s  s  t`  t  u(  u@  ux  u  u  u  v  v<  vT  vx  v  v  v  v  w  w   wD  w\  wt  w  w  w  w  x0  x  y  y  z  z  {X  {  |  }\  }l  ~  ~  @    l  (    l  ,           p      |    P  (  8      $    p      <    X  h    @        ,  D     d    0  |    0        (      t        D  T  l                ,  L  d            <  T  l                $  <  T  l      $          (  @  X  p              (  @  X      ,  D  \  t                4  L  d  |              $  <  T  l                ,  D  \  t          0      T          4  L  d  |              $  <    P    4      (    D          X      T  d    p      (      D        d       D            P  `      <    t    h  L  Ü  0  Ĥ  4  Ŭ     ,  Ƅ      ǌ    Ȝ  0    H  ʸ  l    T  d  ̰    `  ͬ  L  Ό    @  ϴ  X    4  |    8    Ӝ  P  Դ  մ    <  l  ּ  (  ל  4  ؔ    T    P  `    |  ی    ,  P    D  ݴ  H                T      h    L      D      \                D  |      l          h          4  P  d              0  T      8      p      $  X      T        h      (  <  T  d  x        $  8  L  `  t      4  H  \  p             L  t            $  D          0  L  |        $  P  d  x        L                0  L  h          $        8  L  `  t            <  \    \  t          (  \      $ 8 T p     0 @ t       ( 8 P h x      8 T p                  H X h x 	 	$ 	4 
 
 
        4      p       0    P     X  4   $ < T l  8  $ @ X   L   !\ ! "< " " #0 # # $8 $ %T % &@ & ' ' (p ( ) * * +X + + ,\ , , , , -h - - - . .H . . /P /h / / / 0$ 0< 0 0 0 1 1 1 1 2D 2\ 2t 2 2 2 3P 3` 3 4 4( 5 5 6L 6d 6 7P 7` 7p 7 7 7 7 7 8x 90 9@ 9 9 :P : ; ;$ ; ; < =< =L > > > ?h ?x @| A A A BP B C0 C C C C C D< DL E4 ED E E FP F G G G G H I8 IP Ih I I J J J J J K< K K L L  L8 Ll M M M| M N\ N O( Ol O P( P P Qt Q R S T Tx T T T U  U8 UP V V W Xp X X X X Y< Y Y Z Z Z [ [H \x ]< ]T ]l ] ^4 ^ _$ _d _ _ ` ` ` aD a a a b$ bl b c cT c c d0 dp d d e( e e f g g g h  hT hd h h i$ ip i i j8 j j kP k l  l l m  m nH nX np n n oX o p  pP p p q  q| q r$ rl r| r r s s$ s4 sD s\ s s s s s s t  t t0 t@ tP th t t t t u u$ u4 uL ud u| u u u u u v v$ v< vT v v v v w8 w w x@ x x y< y z( z {X { |l | }X } } ~8 ~ ~ L     `      d    , <   l  \   ,     D   <  X   4  ,  P  $ x  p   H  $  , <  4  8 `  t  ( l        x  P   H  H   4  L        P  <    L   l  D T x  x  D      < l     , X x       $ @ \ x         x  ,  $ h  8     P  t      x T     8 X      t   $    ( @ X p       p    , D     \ t    4 L d $   ( Ô $    Ű   Ƅ Ơ $ h ǰ   h Ȑ Ȭ  < ɴ < ʠ  < ˌ  L ̌ ̜  0   T l ΄ Μ μ     4 L d | ϔ Ϭ     , D \ t Ќ Ф м     < T l ф Ѥ Ѽ    $ <   ( @ X p ӈ Ӡ 8     4 L d | Ք լ     $ D ֨    נ       0 H ` p ؀ ؐ ؠ ذ 4 ٰ  , < L ڬ   < l ۔ ۼ    | ܘ   @ h ݐ  8 ޠ    H ߌ ߸ , `    h    H     X  d     4      0 \   X  0   L  @   h  8   l  D   l  h  x         H `   `      H  < T   t  ( p   L `        `       |  0   @   `   `  ,    P  	  	T 	 
X 
 
     <   x   `   T  <   t  X  D    \  t  8   t  8  H  $    `      p  T  0        !l ! "P " " #, #\ #t # # # $  $ $0 $` $x $ $ $ $ $ % %  %8 %P %h % % % % % % & &@ &` & & & '4 'x ' ' ' ( (0 (T (l ( ( ( ( ( )$ )< )h ) ) ) ) ) * *$ *< *T *l * * * * * * + +, +D +\ + + + ,  ,D ,\ , , , , -L -d -| - - - - - . .$ .< .T .l . . . . /  /8 /P /h / / / 0P 0h 0 0 0 1P 1h 1 1 1 1 1 1 2 2( 2@ 2X 2p 2 2 2 2 3$ 3| 3 3 3 3 4 44 4t 4 4 4 4 5< 5T 5l 5 5 5 5 5 5 6 6, 6D 6\ 6t 6 6 6 6 7, 7L 7d 7 7 7 7 7 8 8, 8D 8\ 8t 8 8 8 8 8 9 9 94 9L 9d 9| 9 9 : :0 : : : ;  ;P ;h ; ; ; <  < <0 <H <` <x < < =4 = = = >( >@ >| > > > ?  ? ?0 ?H ?` ?x ? ? ? ? ? @ @  @8 @P @ @ A A  A\ At A A A B B4 BL Bd B| B B B B B C C$ C< CT Cl C C C DH D| D E8 EP E E F F F F F G  G G0 GH G` Gx G G G G G Ht H H H I I4 IL Id I I I I I J J  J8 JP Jh J J J J J J K K< KL K K L LP Lh L L M M M` M M N N N4 Nt N O O( O O O P Pd P| P P Q  Qp Q RP R R R Sp S T T  T8 TP T U< U U V$ V< V V W W, W< WT Wl W W W W W W XH X X Y, YD Y\ Yt Y Y Y Y Z\ [  [l [ [ [ \, \D \ \ ] ]$ ]h ] ] ] ^ ^p ^ _$ _T _ _ `  ` `0 `H `` `x ` ` ` ` a  a` a a b$ bX b b c4 cl c d, d eT e e f4 f g8 g g h h i i i j$ j\ j kd k k l4 l l mX m m m n n n, n< nL n n o pD p p q qx q q r< r s  sx s s s t t( t8 t` tp t t u u` u v8 vh v w w8 wT w w w x xH xx x y y z< zd z z {h { |L }, } } ~\ ~ T  t   P   |   T   P     `  4 H \ p     $ 8      @  8  \   d   ( X   8 p      |    X      4    D        8 d |       $ < T l        , D \ |       , L d |       $ < T l        , D \ t       $ < T l        , D \ t        4 L d |       $ < T l       $ < T l        , D \ t       , L d |       $ < T l        , D \ t        4 L         $ < T l        , D \ t        4 L d |       , D \ t        4 L d |       $ < T l        , D \ t        4 L d |       $ T       ( @ X p         4 L d |       , D \ t         < T l        4 L d |       , H d |       ( @ X p         0 H d |       ( @ X p         < T d |         , D T l        , D \ t        4 L d |       $ < T l        , D \ t        4 L d |        4 D \ t  ¤ ¼     $ < X p È à ø     ( @ X h Ą Ĝ Ĵ     $ < T l ń Ŝ Ŵ      0 H ` x Ɛ ƨ Ƹ     0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ` p Ǡ    0 H ` Ƞ    D ɬ  x ʰ  ˔   0 \ ̼          $ 0 P h ψ Ϩ    L Д   \ p Ѩ   0 L Ҕ    , H | Ӵ  4 H | Ԕ   D դ ո  H p ּ  D א   8 | | | | | | | | | | | | |    8 ٨ 4 \  ۈ ۼ    < x       4 H \ p ݄ ݘ ݬ      $ 8 L ` t ވ ޜ ް      | 4   x   t L   h    4  P      P  8     0 d    |      p      T    T 8  H          T       0 t     0 @ P h 4  	, 
  
 $ l  h  h   |    L   L l   \    T  $ D d      , L l      $ 4 L l       , D d t         , L t          < l |      l ! ! " $ $@ $p $ $ % %` % & & '  'h ' ' (@ (| ( ( )0 ) * * +L , -  -` - - . .H . . . /p / 00 0 1@ 1 2 20 2X 2 2 2 2 3 34 3P 3l 3 3 4D 4 4 4 5( 5 6 6D 6 6 7 7` 7 7 8< 8| 8 9  9@ 9 9 :0 : : ; ;` ; ; <  <` < < =  =| = >( > > ?` ? ? @< @ Ah A A B$ Bh B C Ct C D DH D D E FL F F G G H H I| I J< K< K K L  LH L M  M< M M N NX Nl N O@ OX Op O P P P Q R R  R R S| S S T$ Tt T T U V W Y ZT [ \ \ \ ] ]@ ]X ] ] ] ^D ^ _  _h _ `( ` ` ax a b c( d  d et fh f g8 g hh h h h h i i$ i i j@ j j k kX lD l mT m n nl n o ol o o pX p q qH q rL r r s\ s t< t uh v v\ v w$ w w x$ xx x y\ y z\ z { {\ { |4 | | }\ } ~D ~  4    $ \   t (    t X H    4 p    l   @ t   8   \  t    D    , T    T    L    (   $ h   0 h  h 0    h   D   H |   \  t  D   T  P  0   `     `   4     \     $    4 ` |      D d      ( H       4   ( `  0  T      <    ( `     0 T x    L    0 h      ,   8  x   l   T      8 l Ӥ   P Ԑ  $ H l Ր մ     D d ֈ ֬    0 T | פ   $ T ؀ ب   $ P x ٨   $ P | ڤ   $ L p ۜ    D p ܘ   0 d ݘ    8 p ި   H | ߰   4 `     4 h      L     < p    X    0 `   ,     H h      4 P l      < P l       0 L h         T h |       $ H \ t    4 L   @  P  , X t     < X      ( T p      , H t     $ X  ,  < 4    8   H      (  P     t     L |     < T l   H p     L t    `   `  `  	 	0 	X 	 	 	 	 
   l $     d    x D  L  !@ !x ! "d " $ % &  &4 ' ' (h )  ) * +P , / 0 1, 2 5 60 6 7, 7 8 8 9 ; ; <@ < = =4 =T =t = = = = ?` @< A A B Ct D D E, E F F` F GP G Hd H Il I J K@ L L M  Mt N N O` P R SP Tl U V X, Y$ Y Zl [8 [ \@ \ ], ] ^ ^ _ `< a$ ad a b$ b b c  c dt e\ gh hL i` j k| l m n oX pd q r s t t u v w yl {4 { | | } } } } } ~ ~( ~ ~ P H    @    P   D   T 4        \  |  T     @   l  <    H   @   d   H       \  $ h  t h   X   ,   ,  h 0 Ɛ  Ǽ $ ȼ L  ʘ  ː   T ̼   x 8 |  $ ϔ P   D t    8  L   l  L   h  @   t      @           l    < d     <            @  p 	 
  H 4 P  h   $  x d           , X   X    P x     L       !D ! ! "0 "| " #$ #| # $ $ %4 % &4 & 't (T ( * +T + ,P , , -  -T -| - - - ., . /H 0 1 1 2l 3 3 4 4h 4 4 5, 5x 5 5 5 6 6( 6< 6X 6t 6 6 6 6 7 7$ 7H 7l 7 7 7 7 8 8$ 8H 8l 8 8 8 8 9( 9L 9x 9 9 9 : :$ :H :d : : : : ; ;< ;h ; ; ; < <4 <X <| < < < =$ =X =| = = > >4 >h > > > ? ?$ ?H ?d ? ? ? ? @ @< @h @ @ @ A A4 AX A| A A A B$ BX B| B B C C4 Ch C C C D D< Dh D D D E E< Eh E E E F( F\ F F F G GH Gt G G H HD Hx H H I IX I I I J J$ JH Jd J J J J K K< Kh K K K L L4 LX L| L L L M$ MX M| M M N N4 Nh N N N O O< Oh O O O P P< Ph P P P Q( Q\ Q Q Q R RH Rt R R S SD Sx S S T TX T T T U U< Uh U U U V V< Vh V V V W( W\ W W W X XH Xt X X Y YD Yx Y Y Z ZX Z Z Z [( [T [ [ [ \ \X \ \ \ ]( ]\ ] ] ^ ^D ^x ^ ^ _ _X _ _ ` `H ` ` a aH a a b$ bp b b c d e0 e f fD f f f g gT g g g hL i i j j k| l l m nh n o p q r< s s tX u ut u u v v, vh v v w, wt w x  xH y y z8 z {< { |P | }4 } ~L ~ 8   \    d   8   |   0 x  $   0       x   P   ( |      L x    H     D p    ( X  ( d    8 \   (       \    T   D   h  8 `   X    4  ,    ( t  \        L   p  (  8   ,   <   x  8   X       `   ( 8 H X h P    X  t   $ t   0 @ t  d t    $  P  l   8  d   4 D  H X   @ l  8     , P ` x         8 P h        ( @ X p    ¸      0 H ` x Ð è       8 P h Ā Ę İ     ( @ X p ň Š Ÿ      0 H ` p ƀ       0 h x ǈ ǘ Ǩ Ǹ       | Ȍ Ȝ Ȭ ȼ    ( ɘ ɨ ɸ     , p ʀ     , < L x ˠ ˰    ̀  4 L  , ΀  d ϸ  8 | м   t   ( Ӱ $ Ԁ   L \ l | դ    @ h ֐ ָ   $ H l א װ   4 ` t ؼ  , \ ٨  ژ 4 D     ܄ X  ހ  |  H  4  8 H X   ( P   D  h  P  8  X  $   \ |   D T |    p    \   l  |  t  l  P `    0      $ H \ p        0 D X l        `  <  8  (   X  t  H     \   l   `  8    p  X      h  8  @  	 	 
X 
 (   X  4    X  4  P  P  T  h  t   `    $     h ` x    |    L  x     !T !| ! ! ! ! " " "4 "L "d "| " " " " #  # #0 #H #` #x # # # # # $ $  $8 $P $h $ $ $ % %$ %< %T %l % % % % % % & &, &D &\ &t & & & & & ' ' '4 'L 'd '| ' ' ' ' ' ( ($ (< (T (l ( ( ( ( ( ( ) ), )D )\ )t ) ) ) ) ) * * *4 *L *d *| * * +H +X +h + + + + + + , ,( ,@ ,X ,p , , - -, -D -\ -t - . ., .< .T .l . . . . . . / /, /D /\ /t / / / / 04 0D 0T 0l 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1  1h 1| 1 1 1 1 2 2 20 2H 2\ 2t 2 2 2 2 2 2 3 3$ 3< 3T 3l 3 3 3 3 3 3 4 4D 4\ 4t 4 4 4 4 4 5 5 54 5L 5d 5| 5 5 5 5 5 6 6 7 7 7 7 7 7 7 8\ 8t 8 8 8 9 9( 98 : : ;0 ;H ;` ;x ; ; <t < = = = = = > > > ?x ? ? ? ? ? @| @ AT Al A A A A A A B B, BD B\ Bt B CT C D< DL D D E4 ED E Ft G G, GD G\ Gt G H  H IL I\ I J J J J J K K K4 KL Kd K| K K LT LT LT LT LT LT L M M M N NP N N N O O O P  PD Px P Q\ Q Q R< R R R S S` S T T T U$ UL U U U U V VP Vl V V V V W W, WX W W W W X$ XL Xt X X X Y YD Yl Y Y Y Z Z8 Z` Z Z Z [ [, [T [| [ [ [ \$ \L \t \ \ \ ] ]@ ]h ] ] ] ^ ^4 ^\ ^ ^ ^ _ _, _T _| _ _ _ `  `H `t ` ` ` a a< ah a a a b b4 b\ b b b c  c( cT c| c c d d eD e e fL f f g  gL g h< i  i4 i i j\ j j k l$ l m m m n oH o o p$ pl q\ q rl r sx s t t u u v vp v w w w, w< wL w\ wl w| w w w w w w w w x x x, x< xL x\ xl x| x x x x x x x x y y y, y< yL y\ yl y| y y y y y y y y z z z, z< zL z\ zl z| z z z z z z z z { { {, {< {L {\ {l {| { { { { { { { { | | |, |< |L |\ |l || | | | | | | | | } } }, }< }L }\ }l }| } } } } } } } ~ ~ H  ,  D  x    0 @ P ` p        L H     0   (  ` T   H  t p    \   P   l , ( d        < 0   @  Ҍ Ք   ( ٤ ` \ ܘ   D     <  t h $   \       | 8 4 p     H D  	       | 8 ,   "@ $ ' *x - . . / 0 1X 2D 3\ 4 5< 6P 7@ 7 8 9 :h ;  ; < = > ? @P A B C| D, E  E F G$ G H I4 I J K\ Ld ML N N OD O P Q  Q R S T U V W Y Z@ [L \ ] ^ ^ _ _ `$ ` ` aP a b bt d| gd i k l m oD p$ q r r t u$ u v w x y z {l |$ | }x ~l $      l D      D T (            |  < \ 0        4 t   D  H    h  D   d      0 T        l       @ `         0 H ` x         @ p  (        < X t  ¬      8 T p Ì è    4 L Ĩ     ( H `      < ƌ Ƥ Ƽ   0 H ` x ǐ Ǩ     4 T Ȩ  X ɐ    0 h ʘ     L x ˠ  ̄  ( \ ͐  l   D t Ϩ   h д   L ј   < h  \   L Ԅ  4 Ո ռ  ( \ ֘  0 ל   8 t ج  d     L ڀ ڼ  x  ܌ ܸ   D | ݬ  ( d  t         , P t     T   $ < \ t       , L l       , D \ t        4 L d |      $ < T l    `  L d |       $ < T l        , D \ t       4 T t     0      4N + x    @   !     >        2                             S       ~                     -      (       4;       ;       ;  	  0    	    	    	     	   1  	  d  	    	  "  	  :  	 %:K  	  h;%  	  ;  	  ; C o p y r i g h t   ( c )   2 0 0 3   b y   B i t s t r e a m ,   I n c .   A l l   R i g h t s   R e s e r v e d . 
 C o p y r i g h t   ( c )   2 0 0 6   b y   T a v m j o n g   B a h .   A l l   R i g h t s   R e s e r v e d . 
 D e j a V u   c h a n g e s   a r e   i n   p u b l i c   d o m a i n 
  Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved.
Copyright (c) 2006 by Tavmjong Bah. All Rights Reserved.
DejaVu changes are in public domain
  D e j a V u   S a n s  DejaVu Sans  B o l d  Bold  D e j a V u   S a n s   B o l d  DejaVu Sans Bold  D e j a V u   S a n s   B o l d  DejaVu Sans Bold  V e r s i o n   2 . 3 7  Version 2.37  D e j a V u S a n s - B o l d  DejaVuSans-Bold  D e j a V u   f o n t s   t e a m  DejaVu fonts team  h t t p : / / d e j a v u . s o u r c e f o r g e . n e t  http://dejavu.sourceforge.net  F o n t s   a r e   ( c )   B i t s t r e a m   ( s e e   b e l o w ) .   D e j a V u   c h a n g e s   a r e   i n   p u b l i c   d o m a i n .   G l y p h s   i m p o r t e d   f r o m   A r e v   f o n t s   a r e   ( c )   T a v m j u n g   B a h   ( s e e   b e l o w ) 
 
 B i t s t r e a m   V e r a   F o n t s   C o p y r i g h t 
 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
 
 C o p y r i g h t   ( c )   2 0 0 3   b y   B i t s t r e a m ,   I n c .   A l l   R i g h t s   R e s e r v e d .   B i t s t r e a m   V e r a   i s 
 a   t r a d e m a r k   o f   B i t s t r e a m ,   I n c . 
 
 P e r m i s s i o n   i s   h e r e b y   g r a n t e d ,   f r e e   o f   c h a r g e ,   t o   a n y   p e r s o n   o b t a i n i n g   a   c o p y 
 o f   t h e   f o n t s   a c c o m p a n y i n g   t h i s   l i c e n s e   ( " F o n t s " )   a n d   a s s o c i a t e d 
 d o c u m e n t a t i o n   f i l e s   ( t h e   " F o n t   S o f t w a r e " ) ,   t o   r e p r o d u c e   a n d   d i s t r i b u t e   t h e 
 F o n t   S o f t w a r e ,   i n c l u d i n g   w i t h o u t   l i m i t a t i o n   t h e   r i g h t s   t o   u s e ,   c o p y ,   m e r g e , 
 p u b l i s h ,   d i s t r i b u t e ,   a n d / o r   s e l l   c o p i e s   o f   t h e   F o n t   S o f t w a r e ,   a n d   t o   p e r m i t 
 p e r s o n s   t o   w h o m   t h e   F o n t   S o f t w a r e   i s   f u r n i s h e d   t o   d o   s o ,   s u b j e c t   t o   t h e 
 f o l l o w i n g   c o n d i t i o n s : 
 
 T h e   a b o v e   c o p y r i g h t   a n d   t r a d e m a r k   n o t i c e s   a n d   t h i s   p e r m i s s i o n   n o t i c e   s h a l l 
 b e   i n c l u d e d   i n   a l l   c o p i e s   o f   o n e   o r   m o r e   o f   t h e   F o n t   S o f t w a r e   t y p e f a c e s . 
 
 T h e   F o n t   S o f t w a r e   m a y   b e   m o d i f i e d ,   a l t e r e d ,   o r   a d d e d   t o ,   a n d   i n   p a r t i c u l a r 
 t h e   d e s i g n s   o f   g l y p h s   o r   c h a r a c t e r s   i n   t h e   F o n t s   m a y   b e   m o d i f i e d   a n d 
 a d d i t i o n a l   g l y p h s   o r   c h a r a c t e r s   m a y   b e   a d d e d   t o   t h e   F o n t s ,   o n l y   i f   t h e   f o n t s 
 a r e   r e n a m e d   t o   n a m e s   n o t   c o n t a i n i n g   e i t h e r   t h e   w o r d s   " B i t s t r e a m "   o r   t h e   w o r d 
 " V e r a " . 
 
 T h i s   L i c e n s e   b e c o m e s   n u l l   a n d   v o i d   t o   t h e   e x t e n t   a p p l i c a b l e   t o   F o n t s   o r   F o n t 
 S o f t w a r e   t h a t   h a s   b e e n   m o d i f i e d   a n d   i s   d i s t r i b u t e d   u n d e r   t h e   " B i t s t r e a m 
 V e r a "   n a m e s . 
 
 T h e   F o n t   S o f t w a r e   m a y   b e   s o l d   a s   p a r t   o f   a   l a r g e r   s o f t w a r e   p a c k a g e   b u t   n o 
 c o p y   o f   o n e   o r   m o r e   o f   t h e   F o n t   S o f t w a r e   t y p e f a c e s   m a y   b e   s o l d   b y   i t s e l f . 
 
 T H E   F O N T   S O F T W A R E   I S   P R O V I D E D   " A S   I S " ,   W I T H O U T   W A R R A N T Y   O F   A N Y   K I N D ,   E X P R E S S 
 O R   I M P L I E D ,   I N C L U D I N G   B U T   N O T   L I M I T E D   T O   A N Y   W A R R A N T I E S   O F   M E R C H A N T A B I L I T Y , 
 F I T N E S S   F O R   A   P A R T I C U L A R   P U R P O S E   A N D   N O N I N F R I N G E M E N T   O F   C O P Y R I G H T ,   P A T E N T , 
 T R A D E M A R K ,   O R   O T H E R   R I G H T .   I N   N O   E V E N T   S H A L L   B I T S T R E A M   O R   T H E   G N O M E 
 F O U N D A T I O N   B E   L I A B L E   F O R   A N Y   C L A I M ,   D A M A G E S   O R   O T H E R   L I A B I L I T Y ,   I N C L U D I N G 
 A N Y   G E N E R A L ,   S P E C I A L ,   I N D I R E C T ,   I N C I D E N T A L ,   O R   C O N S E Q U E N T I A L   D A M A G E S , 
 W H E T H E R   I N   A N   A C T I O N   O F   C O N T R A C T ,   T O R T   O R   O T H E R W I S E ,   A R I S I N G   F R O M ,   O U T   O F 
 T H E   U S E   O R   I N A B I L I T Y   T O   U S E   T H E   F O N T   S O F T W A R E   O R   F R O M   O T H E R   D E A L I N G S   I N   T H E 
 F O N T   S O F T W A R E . 
 
 E x c e p t   a s   c o n t a i n e d   i n   t h i s   n o t i c e ,   t h e   n a m e s   o f   G n o m e ,   t h e   G n o m e 
 F o u n d a t i o n ,   a n d   B i t s t r e a m   I n c . ,   s h a l l   n o t   b e   u s e d   i n   a d v e r t i s i n g   o r 
 o t h e r w i s e   t o   p r o m o t e   t h e   s a l e ,   u s e   o r   o t h e r   d e a l i n g s   i n   t h i s   F o n t   S o f t w a r e 
 w i t h o u t   p r i o r   w r i t t e n   a u t h o r i z a t i o n   f r o m   t h e   G n o m e   F o u n d a t i o n   o r   B i t s t r e a m 
 I n c . ,   r e s p e c t i v e l y .   F o r   f u r t h e r   i n f o r m a t i o n ,   c o n t a c t :   f o n t s   a t   g n o m e   d o t 
 o r g .   
 
 A r e v   F o n t s   C o p y r i g h t 
 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
 
 C o p y r i g h t   ( c )   2 0 0 6   b y   T a v m j o n g   B a h .   A l l   R i g h t s   R e s e r v e d . 
 
 P e r m i s s i o n   i s   h e r e b y   g r a n t e d ,   f r e e   o f   c h a r g e ,   t o   a n y   p e r s o n   o b t a i n i n g 
 a   c o p y   o f   t h e   f o n t s   a c c o m p a n y i n g   t h i s   l i c e n s e   ( " F o n t s " )   a n d 
 a s s o c i a t e d   d o c u m e n t a t i o n   f i l e s   ( t h e   " F o n t   S o f t w a r e " ) ,   t o   r e p r o d u c e 
 a n d   d i s t r i b u t e   t h e   m o d i f i c a t i o n s   t o   t h e   B i t s t r e a m   V e r a   F o n t   S o f t w a r e , 
 i n c l u d i n g   w i t h o u t   l i m i t a t i o n   t h e   r i g h t s   t o   u s e ,   c o p y ,   m e r g e ,   p u b l i s h , 
 d i s t r i b u t e ,   a n d / o r   s e l l   c o p i e s   o f   t h e   F o n t   S o f t w a r e ,   a n d   t o   p e r m i t 
 p e r s o n s   t o   w h o m   t h e   F o n t   S o f t w a r e   i s   f u r n i s h e d   t o   d o   s o ,   s u b j e c t   t o 
 t h e   f o l l o w i n g   c o n d i t i o n s : 
 
 T h e   a b o v e   c o p y r i g h t   a n d   t r a d e m a r k   n o t i c e s   a n d   t h i s   p e r m i s s i o n   n o t i c e 
 s h a l l   b e   i n c l u d e d   i n   a l l   c o p i e s   o f   o n e   o r   m o r e   o f   t h e   F o n t   S o f t w a r e 
 t y p e f a c e s . 
 
 T h e   F o n t   S o f t w a r e   m a y   b e   m o d i f i e d ,   a l t e r e d ,   o r   a d d e d   t o ,   a n d   i n 
 p a r t i c u l a r   t h e   d e s i g n s   o f   g l y p h s   o r   c h a r a c t e r s   i n   t h e   F o n t s   m a y   b e 
 m o d i f i e d   a n d   a d d i t i o n a l   g l y p h s   o r   c h a r a c t e r s   m a y   b e   a d d e d   t o   t h e 
 F o n t s ,   o n l y   i f   t h e   f o n t s   a r e   r e n a m e d   t o   n a m e s   n o t   c o n t a i n i n g   e i t h e r 
 t h e   w o r d s   " T a v m j o n g   B a h "   o r   t h e   w o r d   " A r e v " . 
 
 T h i s   L i c e n s e   b e c o m e s   n u l l   a n d   v o i d   t o   t h e   e x t e n t   a p p l i c a b l e   t o   F o n t s 
 o r   F o n t   S o f t w a r e   t h a t   h a s   b e e n   m o d i f i e d   a n d   i s   d i s t r i b u t e d   u n d e r   t h e   
 " T a v m j o n g   B a h   A r e v "   n a m e s . 
 
 T h e   F o n t   S o f t w a r e   m a y   b e   s o l d   a s   p a r t   o f   a   l a r g e r   s o f t w a r e   p a c k a g e   b u t 
 n o   c o p y   o f   o n e   o r   m o r e   o f   t h e   F o n t   S o f t w a r e   t y p e f a c e s   m a y   b e   s o l d   b y 
 i t s e l f . 
 
 T H E   F O N T   S O F T W A R E   I S   P R O V I D E D   " A S   I S " ,   W I T H O U T   W A R R A N T Y   O F   A N Y   K I N D , 
 E X P R E S S   O R   I M P L I E D ,   I N C L U D I N G   B U T   N O T   L I M I T E D   T O   A N Y   W A R R A N T I E S   O F 
 M E R C H A N T A B I L I T Y ,   F I T N E S S   F O R   A   P A R T I C U L A R   P U R P O S E   A N D   N O N I N F R I N G E M E N T 
 O F   C O P Y R I G H T ,   P A T E N T ,   T R A D E M A R K ,   O R   O T H E R   R I G H T .   I N   N O   E V E N T   S H A L L 
 T A V M J O N G   B A H   B E   L I A B L E   F O R   A N Y   C L A I M ,   D A M A G E S   O R   O T H E R   L I A B I L I T Y , 
 I N C L U D I N G   A N Y   G E N E R A L ,   S P E C I A L ,   I N D I R E C T ,   I N C I D E N T A L ,   O R   C O N S E Q U E N T I A L 
 D A M A G E S ,   W H E T H E R   I N   A N   A C T I O N   O F   C O N T R A C T ,   T O R T   O R   O T H E R W I S E ,   A R I S I N G 
 F R O M ,   O U T   O F   T H E   U S E   O R   I N A B I L I T Y   T O   U S E   T H E   F O N T   S O F T W A R E   O R   F R O M 
 O T H E R   D E A L I N G S   I N   T H E   F O N T   S O F T W A R E . 
 
 E x c e p t   a s   c o n t a i n e d   i n   t h i s   n o t i c e ,   t h e   n a m e   o f   T a v m j o n g   B a h   s h a l l   n o t 
 b e   u s e d   i n   a d v e r t i s i n g   o r   o t h e r w i s e   t o   p r o m o t e   t h e   s a l e ,   u s e   o r   o t h e r 
 d e a l i n g s   i n   t h i s   F o n t   S o f t w a r e   w i t h o u t   p r i o r   w r i t t e n   a u t h o r i z a t i o n 
 f r o m   T a v m j o n g   B a h .   F o r   f u r t h e r   i n f o r m a t i o n ,   c o n t a c t :   t a v m j o n g   @   f r e e 
 .   f r .  Fonts are (c) Bitstream (see below). DejaVu changes are in public domain. Glyphs imported from Arev fonts are (c) Tavmjung Bah (see below)

Bitstream Vera Fonts Copyright
------------------------------

Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. Bitstream Vera is
a trademark of Bitstream, Inc.

Permission is hereby granted, free of charge, to any person obtaining a copy
of the fonts accompanying this license ("Fonts") and associated
documentation files (the "Font Software"), to reproduce and distribute the
Font Software, including without limitation the rights to use, copy, merge,
publish, distribute, and/or sell copies of the Font Software, and to permit
persons to whom the Font Software is furnished to do so, subject to the
following conditions:

The above copyright and trademark notices and this permission notice shall
be included in all copies of one or more of the Font Software typefaces.

The Font Software may be modified, altered, or added to, and in particular
the designs of glyphs or characters in the Fonts may be modified and
additional glyphs or characters may be added to the Fonts, only if the fonts
are renamed to names not containing either the words "Bitstream" or the word
"Vera".

This License becomes null and void to the extent applicable to Fonts or Font
Software that has been modified and is distributed under the "Bitstream
Vera" names.

The Font Software may be sold as part of a larger software package but no
copy of one or more of the Font Software typefaces may be sold by itself.

THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT,
TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL BITSTREAM OR THE GNOME
FOUNDATION BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING
ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES,
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE
FONT SOFTWARE.

Except as contained in this notice, the names of Gnome, the Gnome
Foundation, and Bitstream Inc., shall not be used in advertising or
otherwise to promote the sale, use or other dealings in this Font Software
without prior written authorization from the Gnome Foundation or Bitstream
Inc., respectively. For further information, contact: fonts at gnome dot
org. 

Arev Fonts Copyright
------------------------------

Copyright (c) 2006 by Tavmjong Bah. All Rights Reserved.

Permission is hereby granted, free of charge, to any person obtaining
a copy of the fonts accompanying this license ("Fonts") and
associated documentation files (the "Font Software"), to reproduce
and distribute the modifications to the Bitstream Vera Font Software,
including without limitation the rights to use, copy, merge, publish,
distribute, and/or sell copies of the Font Software, and to permit
persons to whom the Font Software is furnished to do so, subject to
the following conditions:

The above copyright and trademark notices and this permission notice
shall be included in all copies of one or more of the Font Software
typefaces.

The Font Software may be modified, altered, or added to, and in
particular the designs of glyphs or characters in the Fonts may be
modified and additional glyphs or characters may be added to the
Fonts, only if the fonts are renamed to names not containing either
the words "Tavmjong Bah" or the word "Arev".

This License becomes null and void to the extent applicable to Fonts
or Font Software that has been modified and is distributed under the 
"Tavmjong Bah Arev" names.

The Font Software may be sold as part of a larger software package but
no copy of one or more of the Font Software typefaces may be sold by
itself.

THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL
TAVMJONG BAH BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
OTHER DEALINGS IN THE FONT SOFTWARE.

Except as contained in this notice, the name of Tavmjong Bah shall not
be used in advertising or otherwise to promote the sale, use or other
dealings in this Font Software without prior written authorization
from Tavmjong Bah. For further information, contact: tavmjong @ free
. fr.  h t t p : / / d e j a v u . s o u r c e f o r g e . n e t / w i k i / i n d e x . p h p / L i c e n s e  http://dejavu.sourceforge.net/wiki/index.php/License  D e j a V u   S a n s  DejaVu Sans  B o l d  Bold           ~ Z                    4           	 
                        ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a                                    b c  d  e        f     g      h    j i k m l n  o q p r s u t v w  x z y { } |    ~       	
     !"#$%&'()*+  ,-./0123456789:  ;<=>?@ABCDEFGHI  JKLMNOPQRS    TUVWXYZ[\]^_`abcdefghi jklm  nopqrstuvwxyz{|}~  	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~         	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`a bcdefghijklmnopqrstuvw xyz{|}~ 	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ 	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ 	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ 	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ 	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~	 											
																						 	!	"	#	$	%	&	'	(	)	*	+	,	-	.	/	0	1	2	3	4	5	6	7	8	9	:	;	<	=	>	?	@	A	B	C	D	E	F	G	H	I	J	K	L	M	N	O	P	Q	R	S	T	U	V	W	X	Y	Z	[	\	]	^	_	`	a	b	c	d	e	f	g	h	i	j	k	l	m	n	o	p	q	r	s	t	u	v	w	x	y	z	{	|	}	~																																																																																																																																	
 








	























 
!
"
#
$
%
&
'
(
)
*
+
,
-
.
/
0
1
2
3
4
5
6
7
8
9
:
;
<
=
>
?
@
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
[
\
]
^
_
`
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
{
|
}
~
































































































































 	
             !"#$%&'( )*+,-./0  123456789 :;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~   	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~             	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ 	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~  	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ 	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ 	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ 	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ 	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~   	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ 	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ 	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ 	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ 	
 !"#$%&'()*+,-./01234	sfthyphenAmacronamacronAbreveabreveAogonekaogonekCcircumflexccircumflex
Cdotaccent
cdotaccentDcarondcaronDcroatEmacronemacronEbreveebreve
Edotaccent
edotaccentEogonekeogonekEcaronecaronGcircumflexgcircumflex
Gdotaccent
gdotaccentGcommaaccentgcommaaccentHcircumflexhcircumflexHbarhbarItildeitildeImacronimacronIbreveibreveIogonekiogonekIJijJcircumflexjcircumflexKcommaaccentkcommaaccentkgreenlandicLacutelacuteLcommaaccentlcommaaccentLcaronlcaronLdotldotNacutenacuteNcommaaccentncommaaccentNcaronncaronnapostropheEngengOmacronomacronObreveobreveOhungarumlautohungarumlautRacuteracuteRcommaaccentrcommaaccentRcaronrcaronSacutesacuteScircumflexscircumflexTcommaaccenttcommaaccentTcarontcaronTbartbarUtildeutildeUmacronumacronUbreveubreveUringuringUhungarumlautuhungarumlautUogonekuogonekWcircumflexwcircumflexYcircumflexycircumflexZacutezacute
Zdotaccent
zdotaccentlongsuni0180uni0181uni0182uni0183uni0184uni0185uni0186uni0187uni0188uni0189uni018Auni018Buni018Cuni018Duni018Euni018Funi0190uni0191uni0193uni0194uni0195uni0196uni0197uni0198uni0199uni019Auni019Buni019Cuni019Duni019Euni019FOhornohornuni01A2uni01A3uni01A4uni01A5uni01A6uni01A7uni01A8uni01A9uni01AAuni01ABuni01ACuni01ADuni01AEUhornuhornuni01B1uni01B2uni01B3uni01B4uni01B5uni01B6uni01B7uni01B8uni01B9uni01BAuni01BBuni01BCuni01BDuni01BEuni01BFuni01C0uni01C1uni01C2uni01C3uni01C4uni01C5uni01C6uni01C7uni01C8uni01C9uni01CAuni01CBuni01CCuni01CDuni01CEuni01CFuni01D0uni01D1uni01D2uni01D3uni01D4uni01D5uni01D6uni01D7uni01D8uni01D9uni01DAuni01DBuni01DCuni01DDuni01DEuni01DFuni01E0uni01E1uni01E2uni01E3uni01E4uni01E5Gcarongcaronuni01E8uni01E9uni01EAuni01EBuni01ECuni01EDuni01EEuni01EFuni01F0uni01F1uni01F2uni01F3uni01F4uni01F5uni01F6uni01F7uni01F8uni01F9
Aringacute
aringacuteAEacuteaeacuteOslashacuteoslashacuteuni0200uni0201uni0202uni0203uni0204uni0205uni0206uni0207uni0208uni0209uni020Auni020Buni020Cuni020Duni020Euni020Funi0210uni0211uni0212uni0213uni0214uni0215uni0216uni0217Scommaaccentscommaaccentuni021Auni021Buni021Cuni021Duni021Euni021Funi0220uni0221uni0222uni0223uni0224uni0225uni0226uni0227uni0228uni0229uni022Auni022Buni022Cuni022Duni022Euni022Funi0230uni0231uni0232uni0233uni0234uni0235uni0236dotlessjuni0238uni0239uni023Auni023Buni023Cuni023Duni023Euni023Funi0240uni0241uni0242uni0243uni0244uni0245uni0246uni0247uni0248uni0249uni024Auni024Buni024Cuni024Duni024Euni024Funi0250uni0251uni0252uni0253uni0254uni0255uni0256uni0257uni0258uni0259uni025Auni025Buni025Cuni025Duni025Euni025Funi0260uni0261uni0262uni0263uni0264uni0265uni0266uni0267uni0268uni0269uni026Auni026Buni026Cuni026Duni026Euni026Funi0270uni0271uni0272uni0273uni0274uni0275uni0276uni0277uni0278uni0279uni027Auni027Buni027Cuni027Duni027Euni027Funi0280uni0281uni0282uni0283uni0284uni0285uni0286uni0287uni0288uni0289uni028Auni028Buni028Cuni028Duni028Euni028Funi0290uni0291uni0292uni0293uni0294uni0295uni0296uni0297uni0298uni0299uni029Auni029Buni029Cuni029Duni029Euni029Funi02A0uni02A1uni02A2uni02A3uni02A4uni02A5uni02A6uni02A7uni02A8uni02A9uni02AAuni02ABuni02ACuni02ADuni02AEuni02AFuni02B0uni02B1uni02B2uni02B3uni02B4uni02B5uni02B6uni02B7uni02B8uni02B9uni02BAuni02BBuni02BCuni02BDuni02BEuni02BFuni02C0uni02C1uni02C2uni02C3uni02C4uni02C5uni02C8uni02C9uni02CAuni02CBuni02CCuni02CDuni02CEuni02CFuni02D0uni02D1uni02D2uni02D3uni02D4uni02D5uni02D6uni02D7uni02DEuni02DFuni02E0uni02E1uni02E2uni02E3uni02E4uni02E5uni02E6uni02E7uni02E8uni02E9uni02ECuni02EDuni02EEuni02F3uni02F7	gravecomb	acutecombuni0302	tildecombuni0304uni0305uni0306uni0307uni0308hookabovecombuni030Auni030Buni030Cuni030Duni030Euni030Funi0310uni0311uni0312uni0313uni0314uni0315uni0316uni0317uni0318uni0319uni031Auni031Buni031Cuni031Duni031Euni031Funi0320uni0321uni0322dotbelowcombuni0324uni0325uni0326uni0327uni0328uni0329uni032Auni032Buni032Cuni032Duni032Euni032Funi0330uni0331uni0332uni0333uni0334uni0335uni0336uni0337uni0338uni0339uni033Auni033Buni033Cuni033Duni033Euni033Funi0340uni0341uni0342uni0343uni0344uni0345uni0346uni0347uni0348uni0349uni034Auni034Buni034Cuni034Duni034Euni034Funi0351uni0352uni0353uni0357uni0358uni035Auni035Cuni035Duni035Euni035Funi0360uni0361uni0362uni0370uni0371uni0372uni0373uni0374uni0375uni0376uni0377uni037Auni037Buni037Cuni037Duni037Euni037Ftonosdieresistonos
Alphatonos	anoteleiaEpsilontonosEtatonos	IotatonosOmicrontonosUpsilontonos
OmegatonosiotadieresistonosAlphaBetaGammauni0394EpsilonZetaEtaThetaIotaKappaLambdaMuNuXiOmicronPiRhoSigmaTauUpsilonPhiChiPsiIotadieresisUpsilondieresis
alphatonosepsilontonosetatonos	iotatonosupsilondieresistonosalphabetagammadeltaepsilonzetaetathetaiotakappalambdauni03BCnuxiomicronrhosigma1sigmatauupsilonphichipsiomegaiotadieresisupsilondieresisomicrontonosupsilontonos
omegatonosuni03CFuni03D0theta1Upsilon1uni03D3uni03D4phi1omega1uni03D7uni03D8uni03D9uni03DAuni03DBuni03DCuni03DDuni03DEuni03DFuni03E0uni03E1uni03E2uni03E3uni03E4uni03E5uni03E6uni03E7uni03E8uni03E9uni03EAuni03EBuni03ECuni03EDuni03EEuni03EFuni03F0uni03F1uni03F2uni03F3uni03F4uni03F5uni03F6uni03F7uni03F8uni03F9uni03FAuni03FBuni03FCuni03FDuni03FEuni03FFuni0400uni0401uni0402uni0403uni0404uni0405uni0406uni0407uni0408uni0409uni040Auni040Buni040Cuni040Duni040Euni040Funi0410uni0411uni0412uni0413uni0414uni0415uni0416uni0417uni0418uni0419uni041Auni041Buni041Cuni041Duni041Euni041Funi0420uni0421uni0422uni0423uni0424uni0425uni0426uni0427uni0428uni0429uni042Auni042Buni042Cuni042Duni042Euni042Funi0430uni0431uni0432uni0433uni0434uni0435uni0436uni0437uni0438uni0439uni043Auni043Buni043Cuni043Duni043Euni043Funi0440uni0441uni0442uni0443uni0444uni0445uni0446uni0447uni0448uni0449uni044Auni044Buni044Cuni044Duni044Euni044Funi0450uni0451uni0452uni0453uni0454uni0455uni0456uni0457uni0458uni0459uni045Auni045Buni045Cuni045Duni045Euni045Funi0460uni0461uni0462uni0463uni0464uni0465uni0466uni0467uni0468uni0469uni046Auni046Buni046Cuni046Duni046Euni046Funi0470uni0471uni0472uni0473uni0474uni0475uni0476uni0477uni0478uni0479uni047Auni047Buni047Cuni047Duni047Euni047Funi0480uni0481uni0482uni0483uni0484uni0485uni0486uni0487uni0488uni0489uni048Auni048Buni048Cuni048Duni048Euni048Funi0490uni0491uni0492uni0493uni0494uni0495uni0496uni0497uni0498uni0499uni049Auni049Buni049Cuni049Duni049Euni049Funi04A0uni04A1uni04A2uni04A3uni04A4uni04A5uni04A6uni04A7uni04A8uni04A9uni04AAuni04ABuni04ACuni04ADuni04AEuni04AFuni04B0uni04B1uni04B2uni04B3uni04B4uni04B5uni04B6uni04B7uni04B8uni04B9uni04BAuni04BBuni04BCuni04BDuni04BEuni04BFuni04C0uni04C1uni04C2uni04C3uni04C4uni04C5uni04C6uni04C7uni04C8uni04C9uni04CAuni04CBuni04CCuni04CDuni04CEuni04CFuni04D0uni04D1uni04D2uni04D3uni04D4uni04D5uni04D6uni04D7uni04D8uni04D9uni04DAuni04DBuni04DCuni04DDuni04DEuni04DFuni04E0uni04E1uni04E2uni04E3uni04E4uni04E5uni04E6uni04E7uni04E8uni04E9uni04EAuni04EBuni04ECuni04EDuni04EEuni04EFuni04F0uni04F1uni04F2uni04F3uni04F4uni04F5uni04F6uni04F7uni04F8uni04F9uni04FAuni04FBuni04FCuni04FDuni04FEuni04FFuni0500uni0501uni0502uni0503uni0504uni0505uni0506uni0507uni0508uni0509uni050Auni050Buni050Cuni050Duni050Euni050Funi0510uni0511uni0512uni0513uni0514uni0515uni0516uni0517uni0518uni0519uni051Auni051Buni051Cuni051Duni051Euni051Funi0520uni0521uni0522uni0523uni0524uni0525uni0531uni0532uni0533uni0534uni0535uni0536uni0537uni0538uni0539uni053Auni053Buni053Cuni053Duni053Euni053Funi0540uni0541uni0542uni0543uni0544uni0545uni0546uni0547uni0548uni0549uni054Auni054Buni054Cuni054Duni054Euni054Funi0550uni0551uni0552uni0553uni0554uni0555uni0556uni0559uni055Auni055Buni055Cuni055Duni055Euni055Funi0561uni0562uni0563uni0564uni0565uni0566uni0567uni0568uni0569uni056Auni056Buni056Cuni056Duni056Euni056Funi0570uni0571uni0572uni0573uni0574uni0575uni0576uni0577uni0578uni0579uni057Auni057Buni057Cuni057Duni057Euni057Funi0580uni0581uni0582uni0583uni0584uni0585uni0586uni0587uni0589uni058Auni05B0uni05B1uni05B2uni05B3uni05B4uni05B5uni05B6uni05B7uni05B8uni05B9uni05BAuni05BBuni05BCuni05BDuni05BEuni05BFuni05C0uni05C1uni05C2uni05C3uni05C6uni05C7uni05D0uni05D1uni05D2uni05D3uni05D4uni05D5uni05D6uni05D7uni05D8uni05D9uni05DAuni05DBuni05DCuni05DDuni05DEuni05DFuni05E0uni05E1uni05E2uni05E3uni05E4uni05E5uni05E6uni05E7uni05E8uni05E9uni05EAuni05F0uni05F1uni05F2uni05F3uni05F4uni0606uni0607uni0609uni060Auni060Cuni0615uni061Buni061Funi0621uni0622uni0623uni0624uni0625uni0626uni0627uni0628uni0629uni062Auni062Buni062Cuni062Duni062Euni062Funi0630uni0631uni0632uni0633uni0634uni0635uni0636uni0637uni0638uni0639uni063Auni0640uni0641uni0642uni0643uni0644uni0645uni0646uni0647uni0648uni0649uni064Auni064Buni064Cuni064Duni064Euni064Funi0650uni0651uni0652uni0653uni0654uni0655uni0657uni065Auni0660uni0661uni0662uni0663uni0664uni0665uni0666uni0667uni0668uni0669uni066Auni066Buni066Cuni066Duni066Euni066Funi0670uni0674uni0679uni067Auni067Buni067Cuni067Duni067Euni067Funi0680uni0681uni0682uni0683uni0684uni0685uni0686uni0687uni0688uni0689uni068Auni068Buni068Cuni068Duni068Euni068Funi0690uni0691uni0692uni0693uni0694uni0695uni0696uni0697uni0698uni0699uni069Auni069Buni069Cuni069Duni069Euni069Funi06A0uni06A1uni06A2uni06A3uni06A4uni06A5uni06A6uni06A7uni06A8uni06A9uni06AAuni06ABuni06ACuni06ADuni06AEuni06AFuni06B0uni06B1uni06B2uni06B3uni06B4uni06B5uni06B6uni06B7uni06B8uni06B9uni06BAuni06BBuni06BCuni06BDuni06BEuni06BFuni06C6uni06C7uni06C8uni06CBuni06CCuni06CEuni06D0uni06D5uni06F0uni06F1uni06F2uni06F3uni06F4uni06F5uni06F6uni06F7uni06F8uni06F9uni07C0uni07C1uni07C2uni07C3uni07C4uni07C5uni07C6uni07C7uni07C8uni07C9uni07CAuni07CBuni07CCuni07CDuni07CEuni07CFuni07D0uni07D1uni07D2uni07D3uni07D4uni07D5uni07D6uni07D7uni07D8uni07D9uni07DAuni07DBuni07DCuni07DDuni07DEuni07DFuni07E0uni07E1uni07E2uni07E3uni07E4uni07E5uni07E6uni07E7uni07EBuni07ECuni07EDuni07EEuni07EFuni07F0uni07F1uni07F2uni07F3uni07F4uni07F5uni07F8uni07F9uni07FAuni0E3Funi0E81uni0E82uni0E84uni0E87uni0E88uni0E8Auni0E8Duni0E94uni0E95uni0E96uni0E97uni0E99uni0E9Auni0E9Buni0E9Cuni0E9Duni0E9Euni0E9Funi0EA1uni0EA2uni0EA3uni0EA5uni0EA7uni0EAAuni0EABuni0EADuni0EAEuni0EAFuni0EB0uni0EB1uni0EB2uni0EB3uni0EB4uni0EB5uni0EB6uni0EB7uni0EB8uni0EB9uni0EBBuni0EBCuni0EBDuni0EC0uni0EC1uni0EC2uni0EC3uni0EC4uni0EC6uni0EC8uni0EC9uni0ECAuni0ECBuni0ECCuni0ECDuni0ED0uni0ED1uni0ED2uni0ED3uni0ED4uni0ED5uni0ED6uni0ED7uni0ED8uni0ED9uni0EDCuni0EDDuni10A0uni10A1uni10A2uni10A3uni10A4uni10A5uni10A6uni10A7uni10A8uni10A9uni10AAuni10ABuni10ACuni10ADuni10AEuni10AFuni10B0uni10B1uni10B2uni10B3uni10B4uni10B5uni10B6uni10B7uni10B8uni10B9uni10BAuni10BBuni10BCuni10BDuni10BEuni10BFuni10C0uni10C1uni10C2uni10C3uni10C4uni10C5uni10D0uni10D1uni10D2uni10D3uni10D4uni10D5uni10D6uni10D7uni10D8uni10D9uni10DAuni10DBuni10DCuni10DDuni10DEuni10DFuni10E0uni10E1uni10E2uni10E3uni10E4uni10E5uni10E6uni10E7uni10E8uni10E9uni10EAuni10EBuni10ECuni10EDuni10EEuni10EFuni10F0uni10F1uni10F2uni10F3uni10F4uni10F5uni10F6uni10F7uni10F8uni10F9uni10FAuni10FBuni10FCuni1401uni1402uni1403uni1404uni1405uni1406uni1407uni1409uni140Auni140Buni140Cuni140Duni140Euni140Funi1410uni1411uni1412uni1413uni1414uni1415uni1416uni1417uni1418uni1419uni141Auni141Buni141Duni141Euni141Funi1420uni1421uni1422uni1423uni1424uni1425uni1426uni1427uni1428uni1429uni142Auni142Buni142Cuni142Duni142Euni142Funi1430uni1431uni1432uni1433uni1434uni1435uni1437uni1438uni1439uni143Auni143Buni143Cuni143Duni143Euni143Funi1440uni1441uni1442uni1443uni1444uni1445uni1446uni1447uni1448uni1449uni144Auni144Cuni144Duni144Euni144Funi1450uni1451uni1452uni1454uni1455uni1456uni1457uni1458uni1459uni145Auni145Buni145Cuni145Duni145Euni145Funi1460uni1461uni1462uni1463uni1464uni1465uni1466uni1467uni1468uni1469uni146Auni146Buni146Cuni146Duni146Euni146Funi1470uni1471uni1472uni1473uni1474uni1475uni1476uni1477uni1478uni1479uni147Auni147Buni147Cuni147Duni147Euni147Funi1480uni1481uni1482uni1483uni1484uni1485uni1486uni1487uni1488uni1489uni148Auni148Buni148Cuni148Duni148Euni148Funi1490uni1491uni1492uni1493uni1494uni1495uni1496uni1497uni1498uni1499uni149Auni149Buni149Cuni149Duni149Euni149Funi14A0uni14A1uni14A2uni14A3uni14A4uni14A5uni14A6uni14A7uni14A8uni14A9uni14AAuni14ABuni14ACuni14ADuni14AEuni14AFuni14B0uni14B1uni14B2uni14B3uni14B4uni14B5uni14B6uni14B7uni14B8uni14B9uni14BAuni14BBuni14BCuni14BDuni14C0uni14C1uni14C2uni14C3uni14C4uni14C5uni14C6uni14C7uni14C8uni14C9uni14CAuni14CBuni14CCuni14CDuni14CEuni14CFuni14D0uni14D1uni14D2uni14D3uni14D4uni14D5uni14D6uni14D7uni14D8uni14D9uni14DAuni14DBuni14DCuni14DDuni14DEuni14DFuni14E0uni14E1uni14E2uni14E3uni14E4uni14E5uni14E6uni14E7uni14E8uni14E9uni14EAuni14ECuni14EDuni14EEuni14EFuni14F0uni14F1uni14F2uni14F3uni14F4uni14F5uni14F6uni14F7uni14F8uni14F9uni14FAuni14FBuni14FCuni14FDuni14FEuni14FFuni1500uni1501uni1502uni1503uni1504uni1505uni1506uni1507uni1510uni1511uni1512uni1513uni1514uni1515uni1516uni1517uni1518uni1519uni151Auni151Buni151Cuni151Duni151Euni151Funi1520uni1521uni1522uni1523uni1524uni1525uni1526uni1527uni1528uni1529uni152Auni152Buni152Cuni152Duni152Euni152Funi1530uni1531uni1532uni1533uni1534uni1535uni1536uni1537uni1538uni1539uni153Auni153Buni153Cuni153Duni153Euni1540uni1541uni1542uni1543uni1544uni1545uni1546uni1547uni1548uni1549uni154Auni154Buni154Cuni154Duni154Euni154Funi1550uni1552uni1553uni1554uni1555uni1556uni1557uni1558uni1559uni155Auni155Buni155Cuni155Duni155Euni155Funi1560uni1561uni1562uni1563uni1564uni1565uni1566uni1567uni1568uni1569uni156Auni1574uni1575uni1576uni1577uni1578uni1579uni157Auni157Buni157Cuni157Duni157Euni157Funi1580uni1581uni1582uni1583uni1584uni1585uni158Auni158Buni158Cuni158Duni158Euni158Funi1590uni1591uni1592uni1593uni1594uni1595uni1596uni15A0uni15A1uni15A2uni15A3uni15A4uni15A5uni15A6uni15A7uni15A8uni15A9uni15AAuni15ABuni15ACuni15ADuni15AEuni15AFuni15DEuni15E1uni1646uni1647uni166Euni166Funi1670uni1671uni1672uni1673uni1674uni1675uni1676uni1680uni1681uni1682uni1683uni1684uni1685uni1686uni1687uni1688uni1689uni168Auni168Buni168Cuni168Duni168Euni168Funi1690uni1691uni1692uni1693uni1694uni1695uni1696uni1697uni1698uni1699uni169Auni169Buni169Cuni1D00uni1D01uni1D02uni1D03uni1D04uni1D05uni1D06uni1D07uni1D08uni1D09uni1D0Auni1D0Buni1D0Cuni1D0Duni1D0Euni1D0Funi1D10uni1D11uni1D12uni1D13uni1D14uni1D16uni1D17uni1D18uni1D19uni1D1Auni1D1Buni1D1Cuni1D1Duni1D1Euni1D1Funi1D20uni1D21uni1D22uni1D23uni1D26uni1D27uni1D28uni1D29uni1D2Auni1D2Buni1D2Cuni1D2Duni1D2Euni1D30uni1D31uni1D32uni1D33uni1D34uni1D35uni1D36uni1D37uni1D38uni1D39uni1D3Auni1D3Buni1D3Cuni1D3Duni1D3Euni1D3Funi1D40uni1D41uni1D42uni1D43uni1D44uni1D45uni1D46uni1D47uni1D48uni1D49uni1D4Auni1D4Buni1D4Cuni1D4Duni1D4Euni1D4Funi1D50uni1D51uni1D52uni1D53uni1D54uni1D55uni1D56uni1D57uni1D58uni1D59uni1D5Auni1D5Buni1D5Duni1D5Euni1D5Funi1D60uni1D61uni1D62uni1D63uni1D64uni1D65uni1D66uni1D67uni1D68uni1D69uni1D6Auni1D77uni1D78uni1D7Buni1D7Duni1D85uni1D9Buni1D9Cuni1D9Duni1D9Euni1D9Funi1DA0uni1DA1uni1DA2uni1DA3uni1DA4uni1DA5uni1DA6uni1DA7uni1DA8uni1DA9uni1DAAuni1DABuni1DACuni1DADuni1DAEuni1DAFuni1DB0uni1DB1uni1DB2uni1DB3uni1DB4uni1DB5uni1DB6uni1DB7uni1DB8uni1DB9uni1DBAuni1DBBuni1DBCuni1DBDuni1DBEuni1DBFuni1DC4uni1DC5uni1DC6uni1DC7uni1DC8uni1DC9uni1E00uni1E01uni1E02uni1E03uni1E04uni1E05uni1E06uni1E07uni1E08uni1E09uni1E0Auni1E0Buni1E0Cuni1E0Duni1E0Euni1E0Funi1E10uni1E11uni1E12uni1E13uni1E14uni1E15uni1E16uni1E17uni1E18uni1E19uni1E1Auni1E1Buni1E1Cuni1E1Duni1E1Euni1E1Funi1E20uni1E21uni1E22uni1E23uni1E24uni1E25uni1E26uni1E27uni1E28uni1E29uni1E2Auni1E2Buni1E2Cuni1E2Duni1E2Euni1E2Funi1E30uni1E31uni1E32uni1E33uni1E34uni1E35uni1E36uni1E37uni1E38uni1E39uni1E3Auni1E3Buni1E3Cuni1E3Duni1E3Euni1E3Funi1E40uni1E41uni1E42uni1E43uni1E44uni1E45uni1E46uni1E47uni1E48uni1E49uni1E4Auni1E4Buni1E4Cuni1E4Duni1E4Euni1E4Funi1E50uni1E51uni1E52uni1E53uni1E54uni1E55uni1E56uni1E57uni1E58uni1E59uni1E5Auni1E5Buni1E5Cuni1E5Duni1E5Euni1E5Funi1E60uni1E61uni1E62uni1E63uni1E64uni1E65uni1E66uni1E67uni1E68uni1E69uni1E6Auni1E6Buni1E6Cuni1E6Duni1E6Euni1E6Funi1E70uni1E71uni1E72uni1E73uni1E74uni1E75uni1E76uni1E77uni1E78uni1E79uni1E7Auni1E7Buni1E7Cuni1E7Duni1E7Euni1E7FWgravewgraveWacutewacute	Wdieresis	wdieresisuni1E86uni1E87uni1E88uni1E89uni1E8Auni1E8Buni1E8Cuni1E8Duni1E8Euni1E8Funi1E90uni1E91uni1E92uni1E93uni1E94uni1E95uni1E96uni1E97uni1E98uni1E99uni1E9Auni1E9Buni1E9Cuni1E9Duni1E9Euni1E9Funi1EA0uni1EA1uni1EA2uni1EA3uni1EA4uni1EA5uni1EA6uni1EA7uni1EA8uni1EA9uni1EAAuni1EABuni1EACuni1EADuni1EAEuni1EAFuni1EB0uni1EB1uni1EB2uni1EB3uni1EB4uni1EB5uni1EB6uni1EB7uni1EB8uni1EB9uni1EBAuni1EBBuni1EBCuni1EBDuni1EBEuni1EBFuni1EC0uni1EC1uni1EC2uni1EC3uni1EC4uni1EC5uni1EC6uni1EC7uni1EC8uni1EC9uni1ECAuni1ECBuni1ECCuni1ECDuni1ECEuni1ECFuni1ED0uni1ED1uni1ED2uni1ED3uni1ED4uni1ED5uni1ED6uni1ED7uni1ED8uni1ED9uni1EDAuni1EDBuni1EDCuni1EDDuni1EDEuni1EDFuni1EE0uni1EE1uni1EE2uni1EE3uni1EE4uni1EE5uni1EE6uni1EE7uni1EE8uni1EE9uni1EEAuni1EEBuni1EECuni1EEDuni1EEEuni1EEFuni1EF0uni1EF1Ygraveygraveuni1EF4uni1EF5uni1EF6uni1EF7uni1EF8uni1EF9uni1EFAuni1EFBuni1F00uni1F01uni1F02uni1F03uni1F04uni1F05uni1F06uni1F07uni1F08uni1F09uni1F0Auni1F0Buni1F0Cuni1F0Duni1F0Euni1F0Funi1F10uni1F11uni1F12uni1F13uni1F14uni1F15uni1F18uni1F19uni1F1Auni1F1Buni1F1Cuni1F1Duni1F20uni1F21uni1F22uni1F23uni1F24uni1F25uni1F26uni1F27uni1F28uni1F29uni1F2Auni1F2Buni1F2Cuni1F2Duni1F2Euni1F2Funi1F30uni1F31uni1F32uni1F33uni1F34uni1F35uni1F36uni1F37uni1F38uni1F39uni1F3Auni1F3Buni1F3Cuni1F3Duni1F3Euni1F3Funi1F40uni1F41uni1F42uni1F43uni1F44uni1F45uni1F48uni1F49uni1F4Auni1F4Buni1F4Cuni1F4Duni1F50uni1F51uni1F52uni1F53uni1F54uni1F55uni1F56uni1F57uni1F59uni1F5Buni1F5Duni1F5Funi1F60uni1F61uni1F62uni1F63uni1F64uni1F65uni1F66uni1F67uni1F68uni1F69uni1F6Auni1F6Buni1F6Cuni1F6Duni1F6Euni1F6Funi1F70uni1F71uni1F72uni1F73uni1F74uni1F75uni1F76uni1F77uni1F78uni1F79uni1F7Auni1F7Buni1F7Cuni1F7Duni1F80uni1F81uni1F82uni1F83uni1F84uni1F85uni1F86uni1F87uni1F88uni1F89uni1F8Auni1F8Buni1F8Cuni1F8Duni1F8Euni1F8Funi1F90uni1F91uni1F92uni1F93uni1F94uni1F95uni1F96uni1F97uni1F98uni1F99uni1F9Auni1F9Buni1F9Cuni1F9Duni1F9Euni1F9Funi1FA0uni1FA1uni1FA2uni1FA3uni1FA4uni1FA5uni1FA6uni1FA7uni1FA8uni1FA9uni1FAAuni1FABuni1FACuni1FADuni1FAEuni1FAFuni1FB0uni1FB1uni1FB2uni1FB3uni1FB4uni1FB6uni1FB7uni1FB8uni1FB9uni1FBAuni1FBBuni1FBCuni1FBDuni1FBEuni1FBFuni1FC0uni1FC1uni1FC2uni1FC3uni1FC4uni1FC6uni1FC7uni1FC8uni1FC9uni1FCAuni1FCBuni1FCCuni1FCDuni1FCEuni1FCFuni1FD0uni1FD1uni1FD2uni1FD3uni1FD6uni1FD7uni1FD8uni1FD9uni1FDAuni1FDBuni1FDDuni1FDEuni1FDFuni1FE0uni1FE1uni1FE2uni1FE3uni1FE4uni1FE5uni1FE6uni1FE7uni1FE8uni1FE9uni1FEAuni1FEBuni1FECuni1FEDuni1FEEuni1FEFuni1FF2uni1FF3uni1FF4uni1FF6uni1FF7uni1FF8uni1FF9uni1FFAuni1FFBuni1FFCuni1FFDuni1FFEuni2000uni2001uni2002uni2003uni2004uni2005uni2006uni2007uni2008uni2009uni200Auni200Buni200Cuni200Duni200Euni200Funi2010uni2011
figuredashuni2015uni2016underscoredblquotereverseduni201Funi2023onedotenleadertwodotenleaderuni2027uni2028uni2029uni202Auni202Buni202Cuni202Duni202Euni202Funi2031minuteseconduni2034uni2035uni2036uni2037uni2038uni203B	exclamdbluni203Duni203Euni203Funi2040uni2041uni2042uni2043uni2045uni2046uni2047uni2048uni2049uni204Auni204Buni204Cuni204Duni204Euni204Funi2050uni2051uni2052uni2053uni2054uni2055uni2056uni2057uni2058uni2059uni205Auni205Buni205Cuni205Duni205Euni205Funi2060uni2061uni2062uni2063uni2064uni206Auni206Buni206Cuni206Duni206Euni206Funi2070uni2071uni2074uni2075uni2076uni2077uni2078uni2079uni207Auni207Buni207Cuni207Duni207Euni207Funi2080uni2081uni2082uni2083uni2084uni2085uni2086uni2087uni2088uni2089uni208Auni208Buni208Cuni208Duni208Euni2090uni2091uni2092uni2093uni2094uni2095uni2096uni2097uni2098uni2099uni209Auni209Buni209Cuni20A0colonmonetaryuni20A2lirauni20A5uni20A6pesetauni20A8uni20A9uni20AAdongEurouni20ADuni20AEuni20AFuni20B0uni20B1uni20B2uni20B3uni20B4uni20B5uni20B8uni20B9uni20BAuni20BDuni20D0uni20D1uni20D6uni20D7uni20DBuni20DCuni20E1uni2100uni2101uni2102uni2103uni2104uni2105uni2106uni2107uni2108uni2109uni210Buni210Cuni210Duni210Euni210Funi2110Ifrakturuni2112uni2113uni2114uni2115uni2116uni2117weierstrassuni2119uni211Auni211BRfrakturuni211Dprescriptionuni211Funi2120uni2121uni2123uni2124uni2125uni2126uni2127uni2128uni2129uni212Auni212Buni212Cuni212D	estimateduni212Funi2130uni2131uni2132uni2133uni2134alephuni2136uni2137uni2138uni2139uni213Auni213Buni213Cuni213Duni213Euni213Funi2140uni2141uni2142uni2143uni2144uni2145uni2146uni2147uni2148uni2149uni214Buni214Euni2150uni2151uni2152onethird	twothirdsuni2155uni2156uni2157uni2158uni2159uni215A	oneeighththreeeighthsfiveeighthsseveneighthsuni215Funi2160uni2161uni2162uni2163uni2164uni2165uni2166uni2167uni2168uni2169uni216Auni216Buni216Cuni216Duni216Euni216Funi2170uni2171uni2172uni2173uni2174uni2175uni2176uni2177uni2178uni2179uni217Auni217Buni217Cuni217Duni217Euni217Funi2180uni2181uni2182uni2183uni2184uni2185uni2189	arrowleftarrowup
arrowright	arrowdown	arrowboth	arrowupdnuni2196uni2197uni2198uni2199uni219Auni219Buni219Cuni219Duni219Euni219Funi21A0uni21A1uni21A2uni21A3uni21A4uni21A5uni21A6uni21A7arrowupdnbseuni21A9uni21AAuni21ABuni21ACuni21ADuni21AEuni21AFuni21B0uni21B1uni21B2uni21B3uni21B4carriagereturnuni21B6uni21B7uni21B8uni21B9uni21BAuni21BBuni21BCuni21BDuni21BEuni21BFuni21C0uni21C1uni21C2uni21C3uni21C4uni21C5uni21C6uni21C7uni21C8uni21C9uni21CAuni21CBuni21CCuni21CDuni21CEuni21CFarrowdblleft
arrowdbluparrowdblrightarrowdbldownarrowdblbothuni21D5uni21D6uni21D7uni21D8uni21D9uni21DAuni21DBuni21DCuni21DDuni21DEuni21DFuni21E0uni21E1uni21E2uni21E3uni21E4uni21E5uni21E6uni21E7uni21E8uni21E9uni21EAuni21EBuni21ECuni21EDuni21EEuni21EFuni21F0uni21F1uni21F2uni21F3uni21F4uni21F5uni21F6uni21F7uni21F8uni21F9uni21FAuni21FBuni21FCuni21FDuni21FEuni21FF	universaluni2201existentialuni2204emptysetgradientelement
notelementuni220Asuchthatuni220Cuni220Duni220Euni2210uni2213uni2214uni2215uni2216asteriskmathuni2218uni2219uni221Buni221Cproportional
orthogonalangleuni2221uni2222uni2223uni2224uni2225uni2226
logicaland	logicalorintersectionunionuni222Cuni222Duni222Euni222Funi2230uni2231uni2232uni2233	thereforeuni2235uni2236uni2237uni2238uni2239uni223Auni223Bsimilaruni223Duni223Euni223Funi2240uni2241uni2242uni2243uni2244	congruentuni2246uni2247uni2249uni224Auni224Buni224Cuni224Duni224Euni224Funi2250uni2251uni2252uni2253uni2254uni2255uni2256uni2257uni2258uni2259uni225Auni225Buni225Cuni225Duni225Euni225Fequivalenceuni2262uni2263uni2266uni2267uni2268uni2269uni226Auni226Buni226Cuni226Duni226Euni226Funi2270uni2271uni2272uni2273uni2274uni2275uni2276uni2277uni2278uni2279uni227Auni227Buni227Cuni227Duni227Euni227Funi2280uni2281propersubsetpropersuperset	notsubsetuni2285reflexsubsetreflexsupersetuni2288uni2289uni228Auni228Buni228Cuni228Duni228Euni228Funi2290uni2291uni2292uni2293uni2294
circleplusuni2296circlemultiplyuni2298uni2299uni229Auni229Buni229Cuni229Duni229Euni229Funi22A0uni22A1uni22A2uni22A3uni22A4perpendicularuni22A6uni22A7uni22A8uni22A9uni22AAuni22ABuni22ACuni22ADuni22AEuni22AFuni22B0uni22B1uni22B2uni22B3uni22B4uni22B5uni22B6uni22B7uni22B8uni22B9uni22BAuni22BBuni22BCuni22BDuni22BEuni22BFuni22C0uni22C1uni22C2uni22C3uni22C4dotmathuni22C6uni22C7uni22C8uni22C9uni22CAuni22CBuni22CCuni22CDuni22CEuni22CFuni22D0uni22D1uni22D2uni22D3uni22D4uni22D5uni22D6uni22D7uni22D8uni22D9uni22DAuni22DBuni22DCuni22DDuni22DEuni22DFuni22E0uni22E1uni22E2uni22E3uni22E4uni22E5uni22E6uni22E7uni22E8uni22E9uni22EAuni22EBuni22ECuni22EDuni22EEuni22EFuni22F0uni22F1uni22F2uni22F3uni22F4uni22F5uni22F6uni22F7uni22F8uni22F9uni22FAuni22FBuni22FCuni22FDuni22FEuni22FFuni2300uni2301houseuni2303uni2304uni2305uni2306uni2307uni2308uni2309uni230Auni230Buni230Cuni230Duni230Euni230Frevlogicalnotuni2311uni2318uni2319uni231Cuni231Duni231Euni231F
integraltp
integralbtuni2324uni2325uni2326uni2327uni2328uni232Buni232Cuni2373uni2374uni2375uni237Auni237Duni2387uni2394uni239Buni239Cuni239Duni239Euni239Funi23A0uni23A1uni23A2uni23A3uni23A4uni23A5uni23A6uni23A7uni23A8uni23A9uni23AAuni23ABuni23ACuni23ADuni23AEuni23CEuni23CFuni23E3uni23E5uni23E8uni2422uni2423uni2460uni2461uni2462uni2463uni2464uni2465uni2466uni2467uni2468uni2469SF100000uni2501SF110000uni2503uni2504uni2505uni2506uni2507uni2508uni2509uni250Auni250BSF010000uni250Duni250Euni250FSF030000uni2511uni2512uni2513SF020000uni2515uni2516uni2517SF040000uni2519uni251Auni251BSF080000uni251Duni251Euni251Funi2520uni2521uni2522uni2523SF090000uni2525uni2526uni2527uni2528uni2529uni252Auni252BSF060000uni252Duni252Euni252Funi2530uni2531uni2532uni2533SF070000uni2535uni2536uni2537uni2538uni2539uni253Auni253BSF050000uni253Duni253Euni253Funi2540uni2541uni2542uni2543uni2544uni2545uni2546uni2547uni2548uni2549uni254Auni254Buni254Cuni254Duni254Euni254FSF430000SF240000SF510000SF520000SF390000SF220000SF210000SF250000SF500000SF490000SF380000SF280000SF270000SF260000SF360000SF370000SF420000SF190000SF200000SF230000SF470000SF480000SF410000SF450000SF460000SF400000SF540000SF530000SF440000uni256Duni256Euni256Funi2570uni2571uni2572uni2573uni2574uni2575uni2576uni2577uni2578uni2579uni257Auni257Buni257Cuni257Duni257Euni257Fupblockuni2581uni2582uni2583dnblockuni2585uni2586uni2587blockuni2589uni258Auni258Blfblockuni258Duni258Euni258Frtblockltshadeshadedkshadeuni2594uni2595uni2596uni2597uni2598uni2599uni259Auni259Buni259Cuni259Duni259Euni259F	filledboxH22073uni25A2uni25A3uni25A4uni25A5uni25A6uni25A7uni25A8uni25A9H18543H18551
filledrectuni25ADuni25AEuni25AFuni25B0uni25B1triagupuni25B3uni25B4uni25B5uni25B6uni25B7uni25B8uni25B9triagrtuni25BBtriagdnuni25BDuni25BEuni25BFuni25C0uni25C1uni25C2uni25C3triaglfuni25C5uni25C6uni25C7uni25C8uni25C9circleuni25CCuni25CDuni25CEH18533uni25D0uni25D1uni25D2uni25D3uni25D4uni25D5uni25D6uni25D7	invbullet	invcircleuni25DAuni25DBuni25DCuni25DDuni25DEuni25DFuni25E0uni25E1uni25E2uni25E3uni25E4uni25E5
openbulletuni25E7uni25E8uni25E9uni25EAuni25EBuni25ECuni25EDuni25EEuni25EFuni25F0uni25F1uni25F2uni25F3uni25F4uni25F5uni25F6uni25F7uni25F8uni25F9uni25FAuni25FBuni25FCuni25FDuni25FEuni25FFuni2600uni2601uni2602uni2603uni2604uni2605uni2606uni2607uni2608uni2609uni260Auni260Buni260Cuni260Duni260Euni260Funi2610uni2611uni2612uni2613uni2614uni2615uni2616uni2617uni2618uni2619uni261Auni261Buni261Cuni261Duni261Euni261Funi2620uni2621uni2622uni2623uni2624uni2625uni2626uni2627uni2628uni2629uni262Auni262Buni262Cuni262Duni262Euni262Funi2630uni2631uni2632uni2633uni2634uni2635uni2636uni2637uni2638uni2639	smilefaceinvsmilefacesununi263Duni263Euni263Ffemaleuni2641maleuni2643uni2644uni2645uni2646uni2647uni2648uni2649uni264Auni264Buni264Cuni264Duni264Euni264Funi2650uni2651uni2652uni2653uni2654uni2655uni2656uni2657uni2658uni2659uni265Auni265Buni265Cuni265Duni265Euni265Fspadeuni2661uni2662clubuni2664heartdiamonduni2667uni2668uni2669musicalnotemusicalnotedbluni266Cuni266Duni266Euni266Funi2670uni2671uni2672uni2673uni2674uni2675uni2676uni2677uni2678uni2679uni267Auni267Buni267Cuni267Duni267Euni267Funi2680uni2681uni2682uni2683uni2684uni2685uni2686uni2687uni2688uni2689uni268Auni268Buni268Cuni268Duni268Euni268Funi2690uni2691uni2692uni2693uni2694uni2695uni2696uni2697uni2698uni2699uni269Auni269Buni269Cuni269Euni269Funi26A0uni26A1uni26A2uni26A3uni26A4uni26A5uni26A6uni26A7uni26A8uni26A9uni26AAuni26ABuni26ACuni26ADuni26AEuni26AFuni26B0uni26B1uni26B2uni26B3uni26B4uni26B5uni26B6uni26B7uni26B8uni26C0uni26C1uni26C2uni26C3uni26E2uni2701uni2702uni2703uni2704uni2706uni2707uni2708uni2709uni270Cuni270Duni270Euni270Funi2710uni2711uni2712uni2713uni2714uni2715uni2716uni2717uni2718uni2719uni271Auni271Buni271Cuni271Duni271Euni271Funi2720uni2721uni2722uni2723uni2724uni2725uni2726uni2727uni2729uni272Auni272Buni272Cuni272Duni272Euni272Funi2730uni2731uni2732uni2733uni2734uni2735uni2736uni2737uni2738uni2739uni273Auni273Buni273Cuni273Duni273Euni273Funi2740uni2741uni2742uni2743uni2744uni2745uni2746uni2747uni2748uni2749uni274Auni274Buni274Duni274Funi2750uni2751uni2752uni2756uni2758uni2759uni275Auni275Buni275Cuni275Duni275Euni2761uni2762uni2763uni2764uni2765uni2766uni2767uni2768uni2769uni276Auni276Buni276Cuni276Duni276Euni276Funi2770uni2771uni2772uni2773uni2774uni2775uni2776uni2777uni2778uni2779uni277Auni277Buni277Cuni277Duni277Euni277Funi2780uni2781uni2782uni2783uni2784uni2785uni2786uni2787uni2788uni2789uni278Auni278Buni278Cuni278Duni278Euni278Funi2790uni2791uni2792uni2793uni2794uni2798uni2799uni279Auni279Buni279Cuni279Duni279Euni279Funi27A0uni27A1uni27A2uni27A3uni27A4uni27A5uni27A6uni27A7uni27A8uni27A9uni27AAuni27ABuni27ACuni27ADuni27AEuni27AFuni27B1uni27B2uni27B3uni27B4uni27B5uni27B6uni27B7uni27B8uni27B9uni27BAuni27BBuni27BCuni27BDuni27BEuni27C5uni27C6uni27E0uni27E6uni27E7uni27E8uni27E9uni27EAuni27EBuni27F0uni27F1uni27F2uni27F3uni27F4uni27F5uni27F6uni27F7uni27F8uni27F9uni27FAuni27FBuni27FCuni27FDuni27FEuni27FFuni2800uni2801uni2802uni2803uni2804uni2805uni2806uni2807uni2808uni2809uni280Auni280Buni280Cuni280Duni280Euni280Funi2810uni2811uni2812uni2813uni2814uni2815uni2816uni2817uni2818uni2819uni281Auni281Buni281Cuni281Duni281Euni281Funi2820uni2821uni2822uni2823uni2824uni2825uni2826uni2827uni2828uni2829uni282Auni282Buni282Cuni282Duni282Euni282Funi2830uni2831uni2832uni2833uni2834uni2835uni2836uni2837uni2838uni2839uni283Auni283Buni283Cuni283Duni283Euni283Funi2840uni2841uni2842uni2843uni2844uni2845uni2846uni2847uni2848uni2849uni284Auni284Buni284Cuni284Duni284Euni284Funi2850uni2851uni2852uni2853uni2854uni2855uni2856uni2857uni2858uni2859uni285Auni285Buni285Cuni285Duni285Euni285Funi2860uni2861uni2862uni2863uni2864uni2865uni2866uni2867uni2868uni2869uni286Auni286Buni286Cuni286Duni286Euni286Funi2870uni2871uni2872uni2873uni2874uni2875uni2876uni2877uni2878uni2879uni287Auni287Buni287Cuni287Duni287Euni287Funi2880uni2881uni2882uni2883uni2884uni2885uni2886uni2887uni2888uni2889uni288Auni288Buni288Cuni288Duni288Euni288Funi2890uni2891uni2892uni2893uni2894uni2895uni2896uni2897uni2898uni2899uni289Auni289Buni289Cuni289Duni289Euni289Funi28A0uni28A1uni28A2uni28A3uni28A4uni28A5uni28A6uni28A7uni28A8uni28A9uni28AAuni28ABuni28ACuni28ADuni28AEuni28AFuni28B0uni28B1uni28B2uni28B3uni28B4uni28B5uni28B6uni28B7uni28B8uni28B9uni28BAuni28BBuni28BCuni28BDuni28BEuni28BFuni28C0uni28C1uni28C2uni28C3uni28C4uni28C5uni28C6uni28C7uni28C8uni28C9uni28CAuni28CBuni28CCuni28CDuni28CEuni28CFuni28D0uni28D1uni28D2uni28D3uni28D4uni28D5uni28D6uni28D7uni28D8uni28D9uni28DAuni28DBuni28DCuni28DDuni28DEuni28DFuni28E0uni28E1uni28E2uni28E3uni28E4uni28E5uni28E6uni28E7uni28E8uni28E9uni28EAuni28EBuni28ECuni28EDuni28EEuni28EFuni28F0uni28F1uni28F2uni28F3uni28F4uni28F5uni28F6uni28F7uni28F8uni28F9uni28FAuni28FBuni28FCuni28FDuni28FEuni28FFuni2906uni2907uni290Auni290Buni2940uni2941uni2983uni2984uni29CEuni29CFuni29D0uni29D1uni29D2uni29D3uni29D4uni29D5uni29EBuni29FAuni29FBuni2A00uni2A01uni2A02uni2A0Cuni2A0Duni2A0Euni2A0Funi2A10uni2A11uni2A12uni2A13uni2A14uni2A15uni2A16uni2A17uni2A18uni2A19uni2A1Auni2A1Buni2A1Cuni2A2Funi2A6Auni2A6Buni2A7Duni2A7Euni2A7Funi2A80uni2A81uni2A82uni2A83uni2A84uni2A85uni2A86uni2A87uni2A88uni2A89uni2A8Auni2A8Buni2A8Cuni2A8Duni2A8Euni2A8Funi2A90uni2A91uni2A92uni2A93uni2A94uni2A95uni2A96uni2A97uni2A98uni2A99uni2A9Auni2A9Buni2A9Cuni2A9Duni2A9Euni2A9Funi2AA0uni2AAEuni2AAFuni2AB0uni2AB1uni2AB2uni2AB3uni2AB4uni2AB5uni2AB6uni2AB7uni2AB8uni2AB9uni2ABAuni2AF9uni2AFAuni2B00uni2B01uni2B02uni2B03uni2B04uni2B05uni2B06uni2B07uni2B08uni2B09uni2B0Auni2B0Buni2B0Cuni2B0Duni2B0Euni2B0Funi2B10uni2B11uni2B12uni2B13uni2B14uni2B15uni2B16uni2B17uni2B18uni2B19uni2B1Auni2B1Funi2B20uni2B21uni2B22uni2B23uni2B24uni2B53uni2B54uni2C60uni2C61uni2C62uni2C63uni2C64uni2C65uni2C66uni2C67uni2C68uni2C69uni2C6Auni2C6Buni2C6Cuni2C6Duni2C6Euni2C6Funi2C70uni2C71uni2C72uni2C73uni2C74uni2C75uni2C76uni2C77uni2C79uni2C7Auni2C7Buni2C7Cuni2C7Duni2C7Euni2C7Funi2D00uni2D01uni2D02uni2D03uni2D04uni2D05uni2D06uni2D07uni2D08uni2D09uni2D0Auni2D0Buni2D0Cuni2D0Duni2D0Euni2D0Funi2D10uni2D11uni2D12uni2D13uni2D14uni2D15uni2D16uni2D17uni2D18uni2D19uni2D1Auni2D1Buni2D1Cuni2D1Duni2D1Euni2D1Funi2D20uni2D21uni2D22uni2D23uni2D24uni2D25uni2D30uni2D31uni2D32uni2D33uni2D34uni2D35uni2D36uni2D37uni2D38uni2D39uni2D3Auni2D3Buni2D3Cuni2D3Duni2D3Euni2D3Funi2D40uni2D41uni2D42uni2D43uni2D44uni2D45uni2D46uni2D47uni2D48uni2D49uni2D4Auni2D4Buni2D4Cuni2D4Duni2D4Euni2D4Funi2D50uni2D51uni2D52uni2D53uni2D54uni2D55uni2D56uni2D57uni2D58uni2D59uni2D5Auni2D5Buni2D5Cuni2D5Duni2D5Euni2D5Funi2D60uni2D61uni2D62uni2D63uni2D64uni2D65uni2D6Funi2E18uni2E1Funi2E22uni2E23uni2E24uni2E25uni2E2Euni4DC0uni4DC1uni4DC2uni4DC3uni4DC4uni4DC5uni4DC6uni4DC7uni4DC8uni4DC9uni4DCAuni4DCBuni4DCCuni4DCDuni4DCEuni4DCFuni4DD0uni4DD1uni4DD2uni4DD3uni4DD4uni4DD5uni4DD6uni4DD7uni4DD8uni4DD9uni4DDAuni4DDBuni4DDCuni4DDDuni4DDEuni4DDFuni4DE0uni4DE1uni4DE2uni4DE3uni4DE4uni4DE5uni4DE6uni4DE7uni4DE8uni4DE9uni4DEAuni4DEBuni4DECuni4DEDuni4DEEuni4DEFuni4DF0uni4DF1uni4DF2uni4DF3uni4DF4uni4DF5uni4DF6uni4DF7uni4DF8uni4DF9uni4DFAuni4DFBuni4DFCuni4DFDuni4DFEuni4DFFuniA4D0uniA4D1uniA4D2uniA4D3uniA4D4uniA4D5uniA4D6uniA4D7uniA4D8uniA4D9uniA4DAuniA4DBuniA4DCuniA4DDuniA4DEuniA4DFuniA4E0uniA4E1uniA4E2uniA4E3uniA4E4uniA4E5uniA4E6uniA4E7uniA4E8uniA4E9uniA4EAuniA4EBuniA4ECuniA4EDuniA4EEuniA4EFuniA4F0uniA4F1uniA4F2uniA4F3uniA4F4uniA4F5uniA4F6uniA4F7uniA4F8uniA4F9uniA4FAuniA4FBuniA4FCuniA4FDuniA4FEuniA4FFuniA644uniA645uniA646uniA647uniA64CuniA64DuniA650uniA651uniA654uniA655uniA656uniA657uniA662uniA663uniA664uniA665uniA666uniA667uniA668uniA669uniA66AuniA66BuniA66CuniA66DuniA66EuniA68AuniA68BuniA68CuniA68DuniA694uniA695uniA698uniA699uniA708uniA709uniA70AuniA70BuniA70CuniA70DuniA70EuniA70FuniA710uniA711uniA712uniA713uniA714uniA715uniA716uniA71BuniA71CuniA71DuniA71EuniA71FuniA722uniA723uniA724uniA725uniA726uniA727uniA728uniA729uniA72AuniA72BuniA730uniA731uniA732uniA733uniA734uniA735uniA736uniA737uniA738uniA739uniA73AuniA73BuniA73CuniA73DuniA73EuniA73FuniA740uniA741uniA746uniA747uniA748uniA749uniA74AuniA74BuniA74EuniA74FuniA750uniA751uniA752uniA753uniA756uniA757uniA764uniA765uniA766uniA767uniA780uniA781uniA782uniA783uniA789uniA78AuniA78BuniA78CuniA78DuniA78EuniA790uniA791uniA7A0uniA7A1uniA7A2uniA7A3uniA7A4uniA7A5uniA7A6uniA7A7uniA7A8uniA7A9uniA7AAuniA7F8uniA7F9uniA7FAuniA7FBuniA7FCuniA7FDuniA7FEuniA7FF	uni02E5.5	uni02E6.5	uni02E7.5	uni02E8.5	uni02E9.5	uni02E5.4	uni02E6.4	uni02E7.4	uni02E8.4	uni02E9.4	uni02E5.3	uni02E6.3	uni02E7.3	uni02E8.3	uni02E9.3	uni02E5.2	uni02E6.2	uni02E7.2	uni02E8.2	uni02E9.2	uni02E5.1	uni02E6.1	uni02E7.1	uni02E8.1	uni02E9.1stemuniF400uniF401uniF402uniF403uniF404uniF405uniF406uniF407uniF408uniF409uniF40AuniF40BuniF40CuniF40DuniF40EuniF40FuniF410uniF411uniF412uniF413uniF414uniF415uniF416uniF417uniF418uniF419uniF41AuniF41BuniF41CuniF41DuniF41EuniF41FuniF420uniF421uniF422uniF423uniF424uniF425uniF426uniF428uniF429uniF42AuniF42BuniF42CuniF42DuniF42EuniF42FuniF430uniF431uniF432uniF433uniF434uniF435uniF436uniF437uniF438uniF439uniF43AuniF43BuniF43CuniF43DuniF43EuniF43FuniF440uniF441uniF6C5uniFB00uniFB03uniFB04uniFB05uniFB06uniFB13uniFB14uniFB15uniFB16uniFB17uniFB1DuniFB1EuniFB1FuniFB20uniFB21uniFB22uniFB23uniFB24uniFB25uniFB26uniFB27uniFB28uniFB29uniFB2AuniFB2BuniFB2CuniFB2DuniFB2EuniFB2FuniFB30uniFB31uniFB32uniFB33uniFB34uniFB35uniFB36uniFB38uniFB39uniFB3AuniFB3BuniFB3CuniFB3EuniFB40uniFB41uniFB43uniFB44uniFB46uniFB47uniFB48uniFB49uniFB4AuniFB4BuniFB4CuniFB4DuniFB4EuniFB4FuniFB52uniFB53uniFB54uniFB55uniFB56uniFB57uniFB58uniFB59uniFB5AuniFB5BuniFB5CuniFB5DuniFB5EuniFB5FuniFB60uniFB61uniFB62uniFB63uniFB64uniFB65uniFB66uniFB67uniFB68uniFB69uniFB6AuniFB6BuniFB6CuniFB6DuniFB6EuniFB6FuniFB70uniFB71uniFB72uniFB73uniFB74uniFB75uniFB76uniFB77uniFB78uniFB79uniFB7AuniFB7BuniFB7CuniFB7DuniFB7EuniFB7FuniFB80uniFB81uniFB82uniFB83uniFB84uniFB85uniFB86uniFB87uniFB88uniFB89uniFB8AuniFB8BuniFB8CuniFB8DuniFB8EuniFB8FuniFB90uniFB91uniFB92uniFB93uniFB94uniFB95uniFB96uniFB97uniFB98uniFB99uniFB9AuniFB9BuniFB9CuniFB9DuniFB9EuniFB9FuniFBA0uniFBA1uniFBA2uniFBA3uniFBAAuniFBABuniFBACuniFBADuniFBD3uniFBD4uniFBD5uniFBD6uniFBD7uniFBD8uniFBD9uniFBDAuniFBDBuniFBDCuniFBDEuniFBDFuniFBE4uniFBE5uniFBE6uniFBE7uniFBE8uniFBE9uniFBFCuniFBFDuniFBFEuniFBFFuniFE00uniFE01uniFE02uniFE03uniFE04uniFE05uniFE06uniFE07uniFE08uniFE09uniFE0AuniFE0BuniFE0CuniFE0DuniFE0EuniFE0FuniFE20uniFE21uniFE22uniFE23uniFE70uniFE71uniFE72uniFE73uniFE74uniFE76uniFE77uniFE78uniFE79uniFE7AuniFE7BuniFE7CuniFE7DuniFE7EuniFE7FuniFE80uniFE81uniFE82uniFE83uniFE84uniFE85uniFE86uniFE87uniFE88uniFE89uniFE8AuniFE8BuniFE8CuniFE8DuniFE8EuniFE8FuniFE90uniFE91uniFE92uniFE93uniFE94uniFE95uniFE96uniFE97uniFE98uniFE99uniFE9AuniFE9BuniFE9CuniFE9DuniFE9EuniFE9FuniFEA0uniFEA1uniFEA2uniFEA3uniFEA4uniFEA5uniFEA6uniFEA7uniFEA8uniFEA9uniFEAAuniFEABuniFEACuniFEADuniFEAEuniFEAFuniFEB0uniFEB1uniFEB2uniFEB3uniFEB4uniFEB5uniFEB6uniFEB7uniFEB8uniFEB9uniFEBAuniFEBBuniFEBCuniFEBDuniFEBEuniFEBFuniFEC0uniFEC1uniFEC2uniFEC3uniFEC4uniFEC5uniFEC6uniFEC7uniFEC8uniFEC9uniFECAuniFECBuniFECCuniFECDuniFECEuniFECFuniFED0uniFED1uniFED2uniFED3uniFED4uniFED5uniFED6uniFED7uniFED8uniFED9uniFEDAuniFEDBuniFEDCuniFEDDuniFEDEuniFEDFuniFEE0uniFEE1uniFEE2uniFEE3uniFEE4uniFEE5uniFEE6uniFEE7uniFEE8uniFEE9uniFEEAuniFEEBuniFEECuniFEEDuniFEEEuniFEEFuniFEF0uniFEF1uniFEF2uniFEF3uniFEF4uniFEF5uniFEF6uniFEF7uniFEF8uniFEF9uniFEFAuniFEFBuniFEFCuniFEFFuniFFF9uniFFFAuniFFFBuniFFFCuniFFFDu10300u10301u10302u10303u10304u10305u10306u10307u10308u10309u1030Au1030Bu1030Cu1030Du1030Eu1030Fu10310u10311u10312u10313u10314u10315u10316u10317u10318u10319u1031Au1031Bu1031Cu1031Du1031Eu10320u10321u10322u10323u1D300u1D301u1D302u1D303u1D304u1D305u1D306u1D307u1D308u1D309u1D30Au1D30Bu1D30Cu1D30Du1D30Eu1D30Fu1D310u1D311u1D312u1D313u1D314u1D315u1D316u1D317u1D318u1D319u1D31Au1D31Bu1D31Cu1D31Du1D31Eu1D31Fu1D320u1D321u1D322u1D323u1D324u1D325u1D326u1D327u1D328u1D329u1D32Au1D32Bu1D32Cu1D32Du1D32Eu1D32Fu1D330u1D331u1D332u1D333u1D334u1D335u1D336u1D337u1D338u1D339u1D33Au1D33Bu1D33Cu1D33Du1D33Eu1D33Fu1D340u1D341u1D342u1D343u1D344u1D345u1D346u1D347u1D348u1D349u1D34Au1D34Bu1D34Cu1D34Du1D34Eu1D34Fu1D350u1D351u1D352u1D353u1D354u1D355u1D356u1D538u1D539u1D53Bu1D53Cu1D53Du1D53Eu1D540u1D541u1D542u1D543u1D544u1D546u1D54Au1D54Bu1D54Cu1D54Du1D54Eu1D54Fu1D550u1D552u1D553u1D554u1D555u1D556u1D557u1D558u1D559u1D55Au1D55Bu1D55Cu1D55Du1D55Eu1D55Fu1D560u1D561u1D562u1D563u1D564u1D565u1D566u1D567u1D568u1D569u1D56Au1D56Bu1D5D4u1D5D5u1D5D6u1D5D7u1D5D8u1D5D9u1D5DAu1D5DBu1D5DCu1D5DDu1D5DEu1D5DFu1D5E0u1D5E1u1D5E2u1D5E3u1D5E4u1D5E5u1D5E6u1D5E7u1D5E8u1D5E9u1D5EAu1D5EBu1D5ECu1D5EDu1D5EEu1D5EFu1D5F0u1D5F1u1D5F2u1D5F3u1D5F4u1D5F5u1D5F6u1D5F7u1D5F8u1D5F9u1D5FAu1D5FBu1D5FCu1D5FDu1D5FEu1D5FFu1D600u1D601u1D602u1D603u1D604u1D605u1D606u1D607u1D756u1D757u1D758u1D759u1D75Au1D75Bu1D75Cu1D75Du1D75Eu1D75Fu1D760u1D761u1D762u1D763u1D764u1D765u1D766u1D767u1D768u1D769u1D76Au1D76Bu1D76Cu1D76Du1D76Eu1D76Fu1D770u1D771u1D772u1D773u1D774u1D775u1D776u1D777u1D778u1D779u1D77Au1D77Bu1D77Cu1D77Du1D77Eu1D77Fu1D780u1D781u1D782u1D783u1D784u1D785u1D786u1D787u1D788u1D789u1D78Au1D78Bu1D78Cu1D78Du1D78Eu1D78Fu1D7D8u1D7D9u1D7DAu1D7DBu1D7DCu1D7DDu1D7DEu1D7DFu1D7E0u1D7E1u1D7ECu1D7EDu1D7EEu1D7EFu1D7F0u1D7F1u1D7F2u1D7F3u1D7F4u1D7F5u1F030u1F031u1F032u1F033u1F034u1F035u1F036u1F037u1F038u1F039u1F03Au1F03Bu1F03Cu1F03Du1F03Eu1F03Fu1F040u1F041u1F042u1F043u1F044u1F045u1F046u1F047u1F048u1F049u1F04Au1F04Bu1F04Cu1F04Du1F04Eu1F04Fu1F050u1F051u1F052u1F053u1F054u1F055u1F056u1F057u1F058u1F059u1F05Au1F05Bu1F05Cu1F05Du1F05Eu1F05Fu1F060u1F061u1F062u1F063u1F064u1F065u1F066u1F067u1F068u1F069u1F06Au1F06Bu1F06Cu1F06Du1F06Eu1F06Fu1F070u1F071u1F072u1F073u1F074u1F075u1F076u1F077u1F078u1F079u1F07Au1F07Bu1F07Cu1F07Du1F07Eu1F07Fu1F080u1F081u1F082u1F083u1F084u1F085u1F086u1F087u1F088u1F089u1F08Au1F08Bu1F08Cu1F08Du1F08Eu1F08Fu1F090u1F091u1F092u1F093u1F0A0u1F0A1u1F0A2u1F0A3u1F0A4u1F0A5u1F0A6u1F0A7u1F0A8u1F0A9u1F0AAu1F0ABu1F0ACu1F0ADu1F0AEu1F0B1u1F0B2u1F0B3u1F0B4u1F0B5u1F0B6u1F0B7u1F0B8u1F0B9u1F0BAu1F0BBu1F0BCu1F0BDu1F0BEu1F0C1u1F0C2u1F0C3u1F0C4u1F0C5u1F0C6u1F0C7u1F0C8u1F0C9u1F0CAu1F0CBu1F0CCu1F0CDu1F0CEu1F0CFu1F0D1u1F0D2u1F0D3u1F0D4u1F0D5u1F0D6u1F0D7u1F0D8u1F0D9u1F0DAu1F0DBu1F0DCu1F0DDu1F0DEu1F0DFu1F311u1F312u1F313u1F314u1F315u1F316u1F317u1F318u1F42Du1F42Eu1F431u1F435u1F600u1F601u1F602u1F603u1F604u1F605u1F606u1F607u1F608u1F609u1F60Au1F60Bu1F60Cu1F60Du1F60Eu1F60Fu1F610u1F611u1F612u1F613u1F614u1F615u1F616u1F617u1F618u1F619u1F61Au1F61Bu1F61Cu1F61Du1F61Eu1F61Fu1F620u1F621u1F622u1F623u1F625u1F626u1F627u1F628u1F629u1F62Au1F62Bu1F62Du1F62Eu1F62Fu1F630u1F631u1F632u1F633u1F634u1F635u1F636u1F637u1F638u1F639u1F63Au1F63Bu1F63Cu1F63Du1F63Eu1F63Fu1F640u1F643	dlLtcaronDieresisAcuteTildeGrave
CircumflexCaronBreve	DotaccentHungarumlautDoublegrave
arabic_dotarabic_2dotsarabic_3dotsarabic_3dots_aarabic_2dots_aarabic_4dotsuni066E.finauni066E.inituni066E.mediuni06A1.finauni06A1.inituni06A1.mediuni066F.finauni066F.inituni066F.mediuni06BA.inituni06BA.mediarabic_ringuni067C.finauni067C.inituni067C.mediuni067D.finauni067D.inituni067D.mediuni0681.finauni0681.inituni0681.mediuni0682.finauni0682.inituni0682.mediuni0685.finauni0685.inituni0685.mediuni06BF.finauni06BF.inituni06BF.mediarabic_gaf_baruni0311.caseEng.altuni0268.dotlessuni029D.dotlessuni03080304uni03040308uni03070304uni03080301uni03080300uni03040301uni03040300uni03030304uni0308030Cuni03030308uni030C0307uni03030301uni03020301uni03020300uni03020303uni03060303uni03060301uni03060300uni03060309uni03020309uni03010307
brailledotJ.altuni0695.finauniFEAE.fina.longstartuni06B5.finauni06B5.inituni06B5.mediuni06CE.finauni06CE.inituni06CE.mediuni0692.final.altuni06D5.finauni0478.monographuni0479.monographiogonek.dotlessuni2148.dotlessuni2149.dotlessuni1E2D.dotlessuni1ECB.dotlesscdoI.alt
arrow.baseuni0651064Buni0651064Cuni064B0651uni0651064Euni0651064Funi064E0651uni0654064Euni0654064Funi07CA.finauni07CA.mediuni07CA.inituni07CB.finauni07CB.mediuni07CB.inituni07CC.finauni07CC.mediuni07CC.inituni07CD.finauni07CD.mediuni07CD.inituni07CE.finauni07CE.mediuni07CE.inituni07CF.finauni07CF.mediuni07CF.inituni07D0.finauni07D0.mediuni07D0.inituni07D1.finauni07D1.mediuni07D1.inituni07D2.finauni07D2.mediuni07D2.inituni07D3.finauni07D3.mediuni07D3.inituni07D4.finauni07D4.mediuni07D4.inituni07D5.finauni07D5.mediuni07D5.inituni07D6.finauni07D6.mediuni07D6.inituni07D7.finauni07D7.mediuni07D7.inituni07D8.finauni07D8.mediuni07D8.inituni07D9.finauni07D9.mediuni07D9.inituni07DA.finauni07DA.mediuni07DA.inituni07DB.finauni07DB.mediuni07DB.inituni07DC.finauni07DC.mediuni07DC.inituni07DD.finauni07DD.mediuni07DD.inituni07DE.finauni07DE.mediuni07DE.inituni07DF.finauni07DF.mediuni07DF.inituni07E0.finauni07E0.mediuni07E0.inituni07E1.finauni07E1.mediuni07E1.inituni07E2.finauni07E2.mediuni07E2.inituni07E3.finauni07E3.mediuni07E3.inituni07E4.finauni07E4.mediuni07E4.inituni07E5.finauni07E5.mediuni07E5.inituni07E6.finauni07E6.mediuni07E6.inituni07E7.finauni07E7.mediuni07E7.init	Ringaboveuni2630.altuni2631.altuni2632.altuni2633.altuni2634.altuni2635.altuni2636.altuni2637.altuni047E.diacuni048a.brevelessuni048B.brevelessy.altuni0689.finauni068A.finauni068B.finauni068F.finauni0690.finauni0693.finauni0694.finauni0696.finauni0697.finauni0699.finauni069A.finauni069A.inituni069A.mediuni069B.finauni069B.inituni069B.mediuni069C.finauni069C.inituni069C.mediuni069D.finauni069D.inituni069D.mediuni069E.finauni069E.inituni069E.mediuni069F.finauni069F.inituni069F.mediuni06A0.finauni06A0.inituni06A0.mediuni06A2.finauni06A2.inituni06A2.mediuni06A3.finauni06A3.inituni06A3.mediuni06A5.finauni06A5.inituni06A5.mediuni06A7.finauni06A7.inituni06A7.mediuni06A8.finauni06A8.inituni06A8.mediuni06AA.finauni06AA.inituni06AA.mediuni06AB.finauni06AB.inituni06AB.mediuni06AC.finauni06AC.inituni06AC.mediuni06AE.finauni06AE.inituni06AE.mediuni06B0.finauni06B0.inituni06B0.mediuni06B2.finauni06B2.inituni06B2.mediuni06B4.finauni06B4.inituni06B4.mediuni06B6.finauni06B6.inituni06B6.mediuni06B7.finauni06B7.inituni06B7.mediuni06B8.finauni06B8.inituni06B8.mediuni06B9.finauni06B9.inituni06B9.mediuni06BC.finauni06BC.inituni06BC.mediuni06BD.finauni06BD.inituni06BD.mediexclamdown.casequestiondown.caseuni2E18.case   A&  %  $! : $  #  "! : "  ! :       d                            }    }        Y     
 &  Y  @ 
 & 	        .A             @}>,,G}G

@
2
d۠d%%% %ё%Д#&̑ɻ]ɻɀ@%]@%dĐ::2}&
@]%]@..@ K%%%2
~}|{zywvwvututsr}qpo,o,nmlkjihch2gf2ed
ed
d@cb
cb
a`a``_
^]\\[Z[ZZYXWV@VUTSRQRQQPOPONONMLKLKJKJIJIHGFGFEDCDCBA%BAA%@?@?>?>=<=<;d:987656%54554
443233@210100/.-,:-,%,:+d*d)(''& %$#@+$#" "!!@ 
% @K}K%%dd2


@	

@d  d+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ StartFontMetrics 4.1
Notice Converted by PHP-font-lib
Comment https://github.com/PhenX/php-font-lib
EncodingScheme FontSpecific
FontName DejaVu Sans
FontSubfamily Bold
UniqueID DejaVu Sans Bold
FullName DejaVu Sans Bold
Version Version 2.37
PostScriptName DejaVuSans-Bold
Manufacturer DejaVu fonts team
FontVendorURL http://dejavu.sourceforge.net
LicenseURL http://dejavu.sourceforge.net/wiki/index.php/License
PreferredFamily DejaVu Sans
PreferredSubfamily Bold
Weight Bold
ItalicAngle 0
IsFixedPitch false
UnderlineThickness 44
UnderlinePosition -63
FontHeightOffset 0
Ascender 928
Descender -236
FontBBox -1069 -415 1975 1174
StartCharMetrics 6196
U 32 ; WX 348 ; N space ; G 3
U 33 ; WX 456 ; N exclam ; G 4
U 34 ; WX 521 ; N quotedbl ; G 5
U 35 ; WX 838 ; N numbersign ; G 6
U 36 ; WX 696 ; N dollar ; G 7
U 37 ; WX 1002 ; N percent ; G 8
U 38 ; WX 872 ; N ampersand ; G 9
U 39 ; WX 306 ; N quotesingle ; G 10
U 40 ; WX 457 ; N parenleft ; G 11
U 41 ; WX 457 ; N parenright ; G 12
U 42 ; WX 523 ; N asterisk ; G 13
U 43 ; WX 838 ; N plus ; G 14
U 44 ; WX 380 ; N comma ; G 15
U 45 ; WX 415 ; N hyphen ; G 16
U 46 ; WX 380 ; N period ; G 17
U 47 ; WX 365 ; N slash ; G 18
U 48 ; WX 696 ; N zero ; G 19
U 49 ; WX 696 ; N one ; G 20
U 50 ; WX 696 ; N two ; G 21
U 51 ; WX 696 ; N three ; G 22
U 52 ; WX 696 ; N four ; G 23
U 53 ; WX 696 ; N five ; G 24
U 54 ; WX 696 ; N six ; G 25
U 55 ; WX 696 ; N seven ; G 26
U 56 ; WX 696 ; N eight ; G 27
U 57 ; WX 696 ; N nine ; G 28
U 58 ; WX 400 ; N colon ; G 29
U 59 ; WX 400 ; N semicolon ; G 30
U 60 ; WX 838 ; N less ; G 31
U 61 ; WX 838 ; N equal ; G 32
U 62 ; WX 838 ; N greater ; G 33
U 63 ; WX 580 ; N question ; G 34
U 64 ; WX 1000 ; N at ; G 35
U 65 ; WX 774 ; N A ; G 36
U 66 ; WX 762 ; N B ; G 37
U 67 ; WX 734 ; N C ; G 38
U 68 ; WX 830 ; N D ; G 39
U 69 ; WX 683 ; N E ; G 40
U 70 ; WX 683 ; N F ; G 41
U 71 ; WX 821 ; N G ; G 42
U 72 ; WX 837 ; N H ; G 43
U 73 ; WX 372 ; N I ; G 44
U 74 ; WX 372 ; N J ; G 45
U 75 ; WX 775 ; N K ; G 46
U 76 ; WX 637 ; N L ; G 47
U 77 ; WX 995 ; N M ; G 48
U 78 ; WX 837 ; N N ; G 49
U 79 ; WX 850 ; N O ; G 50
U 80 ; WX 733 ; N P ; G 51
U 81 ; WX 850 ; N Q ; G 52
U 82 ; WX 770 ; N R ; G 53
U 83 ; WX 720 ; N S ; G 54
U 84 ; WX 682 ; N T ; G 55
U 85 ; WX 812 ; N U ; G 56
U 86 ; WX 774 ; N V ; G 57
U 87 ; WX 1103 ; N W ; G 58
U 88 ; WX 771 ; N X ; G 59
U 89 ; WX 724 ; N Y ; G 60
U 90 ; WX 725 ; N Z ; G 61
U 91 ; WX 457 ; N bracketleft ; G 62
U 92 ; WX 365 ; N backslash ; G 63
U 93 ; WX 457 ; N bracketright ; G 64
U 94 ; WX 838 ; N asciicircum ; G 65
U 95 ; WX 500 ; N underscore ; G 66
U 96 ; WX 500 ; N grave ; G 67
U 97 ; WX 675 ; N a ; G 68
U 98 ; WX 716 ; N b ; G 69
U 99 ; WX 593 ; N c ; G 70
U 100 ; WX 716 ; N d ; G 71
U 101 ; WX 678 ; N e ; G 72
U 102 ; WX 435 ; N f ; G 73
U 103 ; WX 716 ; N g ; G 74
U 104 ; WX 712 ; N h ; G 75
U 105 ; WX 343 ; N i ; G 76
U 106 ; WX 343 ; N j ; G 77
U 107 ; WX 665 ; N k ; G 78
U 108 ; WX 343 ; N l ; G 79
U 109 ; WX 1042 ; N m ; G 80
U 110 ; WX 712 ; N n ; G 81
U 111 ; WX 687 ; N o ; G 82
U 112 ; WX 716 ; N p ; G 83
U 113 ; WX 716 ; N q ; G 84
U 114 ; WX 493 ; N r ; G 85
U 115 ; WX 595 ; N s ; G 86
U 116 ; WX 478 ; N t ; G 87
U 117 ; WX 712 ; N u ; G 88
U 118 ; WX 652 ; N v ; G 89
U 119 ; WX 924 ; N w ; G 90
U 120 ; WX 645 ; N x ; G 91
U 121 ; WX 652 ; N y ; G 92
U 122 ; WX 582 ; N z ; G 93
U 123 ; WX 712 ; N braceleft ; G 94
U 124 ; WX 365 ; N bar ; G 95
U 125 ; WX 712 ; N braceright ; G 96
U 126 ; WX 838 ; N asciitilde ; G 97
U 160 ; WX 348 ; N nbspace ; G 98
U 161 ; WX 456 ; N exclamdown ; G 99
U 162 ; WX 696 ; N cent ; G 100
U 163 ; WX 696 ; N sterling ; G 101
U 164 ; WX 636 ; N currency ; G 102
U 165 ; WX 696 ; N yen ; G 103
U 166 ; WX 365 ; N brokenbar ; G 104
U 167 ; WX 500 ; N section ; G 105
U 168 ; WX 500 ; N dieresis ; G 106
U 169 ; WX 1000 ; N copyright ; G 107
U 170 ; WX 564 ; N ordfeminine ; G 108
U 171 ; WX 646 ; N guillemotleft ; G 109
U 172 ; WX 838 ; N logicalnot ; G 110
U 173 ; WX 415 ; N sfthyphen ; G 111
U 174 ; WX 1000 ; N registered ; G 112
U 175 ; WX 500 ; N macron ; G 113
U 176 ; WX 500 ; N degree ; G 114
U 177 ; WX 838 ; N plusminus ; G 115
U 178 ; WX 438 ; N twosuperior ; G 116
U 179 ; WX 438 ; N threesuperior ; G 117
U 180 ; WX 500 ; N acute ; G 118
U 181 ; WX 736 ; N mu ; G 119
U 182 ; WX 636 ; N paragraph ; G 120
U 183 ; WX 380 ; N periodcentered ; G 121
U 184 ; WX 500 ; N cedilla ; G 122
U 185 ; WX 438 ; N onesuperior ; G 123
U 186 ; WX 564 ; N ordmasculine ; G 124
U 187 ; WX 646 ; N guillemotright ; G 125
U 188 ; WX 1035 ; N onequarter ; G 126
U 189 ; WX 1035 ; N onehalf ; G 127
U 190 ; WX 1035 ; N threequarters ; G 128
U 191 ; WX 580 ; N questiondown ; G 129
U 192 ; WX 774 ; N Agrave ; G 130
U 193 ; WX 774 ; N Aacute ; G 131
U 194 ; WX 774 ; N Acircumflex ; G 132
U 195 ; WX 774 ; N Atilde ; G 133
U 196 ; WX 774 ; N Adieresis ; G 134
U 197 ; WX 774 ; N Aring ; G 135
U 198 ; WX 1085 ; N AE ; G 136
U 199 ; WX 734 ; N Ccedilla ; G 137
U 200 ; WX 683 ; N Egrave ; G 138
U 201 ; WX 683 ; N Eacute ; G 139
U 202 ; WX 683 ; N Ecircumflex ; G 140
U 203 ; WX 683 ; N Edieresis ; G 141
U 204 ; WX 372 ; N Igrave ; G 142
U 205 ; WX 372 ; N Iacute ; G 143
U 206 ; WX 372 ; N Icircumflex ; G 144
U 207 ; WX 372 ; N Idieresis ; G 145
U 208 ; WX 838 ; N Eth ; G 146
U 209 ; WX 837 ; N Ntilde ; G 147
U 210 ; WX 850 ; N Ograve ; G 148
U 211 ; WX 850 ; N Oacute ; G 149
U 212 ; WX 850 ; N Ocircumflex ; G 150
U 213 ; WX 850 ; N Otilde ; G 151
U 214 ; WX 850 ; N Odieresis ; G 152
U 215 ; WX 838 ; N multiply ; G 153
U 216 ; WX 850 ; N Oslash ; G 154
U 217 ; WX 812 ; N Ugrave ; G 155
U 218 ; WX 812 ; N Uacute ; G 156
U 219 ; WX 812 ; N Ucircumflex ; G 157
U 220 ; WX 812 ; N Udieresis ; G 158
U 221 ; WX 724 ; N Yacute ; G 159
U 222 ; WX 738 ; N Thorn ; G 160
U 223 ; WX 719 ; N germandbls ; G 161
U 224 ; WX 675 ; N agrave ; G 162
U 225 ; WX 675 ; N aacute ; G 163
U 226 ; WX 675 ; N acircumflex ; G 164
U 227 ; WX 675 ; N atilde ; G 165
U 228 ; WX 675 ; N adieresis ; G 166
U 229 ; WX 675 ; N aring ; G 167
U 230 ; WX 1048 ; N ae ; G 168
U 231 ; WX 593 ; N ccedilla ; G 169
U 232 ; WX 678 ; N egrave ; G 170
U 233 ; WX 678 ; N eacute ; G 171
U 234 ; WX 678 ; N ecircumflex ; G 172
U 235 ; WX 678 ; N edieresis ; G 173
U 236 ; WX 343 ; N igrave ; G 174
U 237 ; WX 343 ; N iacute ; G 175
U 238 ; WX 343 ; N icircumflex ; G 176
U 239 ; WX 343 ; N idieresis ; G 177
U 240 ; WX 687 ; N eth ; G 178
U 241 ; WX 712 ; N ntilde ; G 179
U 242 ; WX 687 ; N ograve ; G 180
U 243 ; WX 687 ; N oacute ; G 181
U 244 ; WX 687 ; N ocircumflex ; G 182
U 245 ; WX 687 ; N otilde ; G 183
U 246 ; WX 687 ; N odieresis ; G 184
U 247 ; WX 838 ; N divide ; G 185
U 248 ; WX 687 ; N oslash ; G 186
U 249 ; WX 712 ; N ugrave ; G 187
U 250 ; WX 712 ; N uacute ; G 188
U 251 ; WX 712 ; N ucircumflex ; G 189
U 252 ; WX 712 ; N udieresis ; G 190
U 253 ; WX 652 ; N yacute ; G 191
U 254 ; WX 716 ; N thorn ; G 192
U 255 ; WX 652 ; N ydieresis ; G 193
U 256 ; WX 774 ; N Amacron ; G 194
U 257 ; WX 675 ; N amacron ; G 195
U 258 ; WX 774 ; N Abreve ; G 196
U 259 ; WX 675 ; N abreve ; G 197
U 260 ; WX 774 ; N Aogonek ; G 198
U 261 ; WX 675 ; N aogonek ; G 199
U 262 ; WX 734 ; N Cacute ; G 200
U 263 ; WX 593 ; N cacute ; G 201
U 264 ; WX 734 ; N Ccircumflex ; G 202
U 265 ; WX 593 ; N ccircumflex ; G 203
U 266 ; WX 734 ; N Cdotaccent ; G 204
U 267 ; WX 593 ; N cdotaccent ; G 205
U 268 ; WX 734 ; N Ccaron ; G 206
U 269 ; WX 593 ; N ccaron ; G 207
U 270 ; WX 830 ; N Dcaron ; G 208
U 271 ; WX 716 ; N dcaron ; G 209
U 272 ; WX 838 ; N Dcroat ; G 210
U 273 ; WX 716 ; N dmacron ; G 211
U 274 ; WX 683 ; N Emacron ; G 212
U 275 ; WX 678 ; N emacron ; G 213
U 276 ; WX 683 ; N Ebreve ; G 214
U 277 ; WX 678 ; N ebreve ; G 215
U 278 ; WX 683 ; N Edotaccent ; G 216
U 279 ; WX 678 ; N edotaccent ; G 217
U 280 ; WX 683 ; N Eogonek ; G 218
U 281 ; WX 678 ; N eogonek ; G 219
U 282 ; WX 683 ; N Ecaron ; G 220
U 283 ; WX 678 ; N ecaron ; G 221
U 284 ; WX 821 ; N Gcircumflex ; G 222
U 285 ; WX 716 ; N gcircumflex ; G 223
U 286 ; WX 821 ; N Gbreve ; G 224
U 287 ; WX 716 ; N gbreve ; G 225
U 288 ; WX 821 ; N Gdotaccent ; G 226
U 289 ; WX 716 ; N gdotaccent ; G 227
U 290 ; WX 821 ; N Gcommaaccent ; G 228
U 291 ; WX 716 ; N gcommaaccent ; G 229
U 292 ; WX 837 ; N Hcircumflex ; G 230
U 293 ; WX 712 ; N hcircumflex ; G 231
U 294 ; WX 974 ; N Hbar ; G 232
U 295 ; WX 790 ; N hbar ; G 233
U 296 ; WX 372 ; N Itilde ; G 234
U 297 ; WX 343 ; N itilde ; G 235
U 298 ; WX 372 ; N Imacron ; G 236
U 299 ; WX 343 ; N imacron ; G 237
U 300 ; WX 372 ; N Ibreve ; G 238
U 301 ; WX 343 ; N ibreve ; G 239
U 302 ; WX 372 ; N Iogonek ; G 240
U 303 ; WX 343 ; N iogonek ; G 241
U 304 ; WX 372 ; N Idot ; G 242
U 305 ; WX 343 ; N dotlessi ; G 243
U 306 ; WX 744 ; N IJ ; G 244
U 307 ; WX 686 ; N ij ; G 245
U 308 ; WX 372 ; N Jcircumflex ; G 246
U 309 ; WX 343 ; N jcircumflex ; G 247
U 310 ; WX 775 ; N Kcommaaccent ; G 248
U 311 ; WX 665 ; N kcommaaccent ; G 249
U 312 ; WX 665 ; N kgreenlandic ; G 250
U 313 ; WX 637 ; N Lacute ; G 251
U 314 ; WX 343 ; N lacute ; G 252
U 315 ; WX 637 ; N Lcommaaccent ; G 253
U 316 ; WX 343 ; N lcommaaccent ; G 254
U 317 ; WX 637 ; N Lcaron ; G 255
U 318 ; WX 479 ; N lcaron ; G 256
U 319 ; WX 637 ; N Ldot ; G 257
U 320 ; WX 557 ; N ldot ; G 258
U 321 ; WX 642 ; N Lslash ; G 259
U 322 ; WX 371 ; N lslash ; G 260
U 323 ; WX 837 ; N Nacute ; G 261
U 324 ; WX 712 ; N nacute ; G 262
U 325 ; WX 837 ; N Ncommaaccent ; G 263
U 326 ; WX 712 ; N ncommaaccent ; G 264
U 327 ; WX 837 ; N Ncaron ; G 265
U 328 ; WX 712 ; N ncaron ; G 266
U 329 ; WX 983 ; N napostrophe ; G 267
U 330 ; WX 837 ; N Eng ; G 268
U 331 ; WX 712 ; N eng ; G 269
U 332 ; WX 850 ; N Omacron ; G 270
U 333 ; WX 687 ; N omacron ; G 271
U 334 ; WX 850 ; N Obreve ; G 272
U 335 ; WX 687 ; N obreve ; G 273
U 336 ; WX 850 ; N Ohungarumlaut ; G 274
U 337 ; WX 687 ; N ohungarumlaut ; G 275
U 338 ; WX 1167 ; N OE ; G 276
U 339 ; WX 1094 ; N oe ; G 277
U 340 ; WX 770 ; N Racute ; G 278
U 341 ; WX 493 ; N racute ; G 279
U 342 ; WX 770 ; N Rcommaaccent ; G 280
U 343 ; WX 493 ; N rcommaaccent ; G 281
U 344 ; WX 770 ; N Rcaron ; G 282
U 345 ; WX 493 ; N rcaron ; G 283
U 346 ; WX 720 ; N Sacute ; G 284
U 347 ; WX 595 ; N sacute ; G 285
U 348 ; WX 720 ; N Scircumflex ; G 286
U 349 ; WX 595 ; N scircumflex ; G 287
U 350 ; WX 720 ; N Scedilla ; G 288
U 351 ; WX 595 ; N scedilla ; G 289
U 352 ; WX 720 ; N Scaron ; G 290
U 353 ; WX 595 ; N scaron ; G 291
U 354 ; WX 682 ; N Tcommaaccent ; G 292
U 355 ; WX 478 ; N tcommaaccent ; G 293
U 356 ; WX 682 ; N Tcaron ; G 294
U 357 ; WX 478 ; N tcaron ; G 295
U 358 ; WX 682 ; N Tbar ; G 296
U 359 ; WX 478 ; N tbar ; G 297
U 360 ; WX 812 ; N Utilde ; G 298
U 361 ; WX 712 ; N utilde ; G 299
U 362 ; WX 812 ; N Umacron ; G 300
U 363 ; WX 712 ; N umacron ; G 301
U 364 ; WX 812 ; N Ubreve ; G 302
U 365 ; WX 712 ; N ubreve ; G 303
U 366 ; WX 812 ; N Uring ; G 304
U 367 ; WX 712 ; N uring ; G 305
U 368 ; WX 812 ; N Uhungarumlaut ; G 306
U 369 ; WX 712 ; N uhungarumlaut ; G 307
U 370 ; WX 812 ; N Uogonek ; G 308
U 371 ; WX 712 ; N uogonek ; G 309
U 372 ; WX 1103 ; N Wcircumflex ; G 310
U 373 ; WX 924 ; N wcircumflex ; G 311
U 374 ; WX 724 ; N Ycircumflex ; G 312
U 375 ; WX 652 ; N ycircumflex ; G 313
U 376 ; WX 724 ; N Ydieresis ; G 314
U 377 ; WX 725 ; N Zacute ; G 315
U 378 ; WX 582 ; N zacute ; G 316
U 379 ; WX 725 ; N Zdotaccent ; G 317
U 380 ; WX 582 ; N zdotaccent ; G 318
U 381 ; WX 725 ; N Zcaron ; G 319
U 382 ; WX 582 ; N zcaron ; G 320
U 383 ; WX 435 ; N longs ; G 321
U 384 ; WX 716 ; N uni0180 ; G 322
U 385 ; WX 811 ; N uni0181 ; G 323
U 386 ; WX 762 ; N uni0182 ; G 324
U 387 ; WX 716 ; N uni0183 ; G 325
U 388 ; WX 762 ; N uni0184 ; G 326
U 389 ; WX 716 ; N uni0185 ; G 327
U 390 ; WX 734 ; N uni0186 ; G 328
U 391 ; WX 734 ; N uni0187 ; G 329
U 392 ; WX 593 ; N uni0188 ; G 330
U 393 ; WX 838 ; N uni0189 ; G 331
U 394 ; WX 879 ; N uni018A ; G 332
U 395 ; WX 757 ; N uni018B ; G 333
U 396 ; WX 716 ; N uni018C ; G 334
U 397 ; WX 688 ; N uni018D ; G 335
U 398 ; WX 683 ; N uni018E ; G 336
U 399 ; WX 849 ; N uni018F ; G 337
U 400 ; WX 696 ; N uni0190 ; G 338
U 401 ; WX 683 ; N uni0191 ; G 339
U 402 ; WX 435 ; N florin ; G 340
U 403 ; WX 821 ; N uni0193 ; G 341
U 404 ; WX 793 ; N uni0194 ; G 342
U 405 ; WX 1045 ; N uni0195 ; G 343
U 406 ; WX 436 ; N uni0196 ; G 344
U 407 ; WX 389 ; N uni0197 ; G 345
U 408 ; WX 775 ; N uni0198 ; G 346
U 409 ; WX 665 ; N uni0199 ; G 347
U 410 ; WX 360 ; N uni019A ; G 348
U 411 ; WX 592 ; N uni019B ; G 349
U 412 ; WX 1042 ; N uni019C ; G 350
U 413 ; WX 837 ; N uni019D ; G 351
U 414 ; WX 712 ; N uni019E ; G 352
U 415 ; WX 850 ; N uni019F ; G 353
U 416 ; WX 874 ; N Ohorn ; G 354
U 417 ; WX 687 ; N ohorn ; G 355
U 418 ; WX 1083 ; N uni01A2 ; G 356
U 419 ; WX 912 ; N uni01A3 ; G 357
U 420 ; WX 782 ; N uni01A4 ; G 358
U 421 ; WX 716 ; N uni01A5 ; G 359
U 422 ; WX 770 ; N uni01A6 ; G 360
U 423 ; WX 720 ; N uni01A7 ; G 361
U 424 ; WX 595 ; N uni01A8 ; G 362
U 425 ; WX 683 ; N uni01A9 ; G 363
U 426 ; WX 552 ; N uni01AA ; G 364
U 427 ; WX 478 ; N uni01AB ; G 365
U 428 ; WX 707 ; N uni01AC ; G 366
U 429 ; WX 478 ; N uni01AD ; G 367
U 430 ; WX 682 ; N uni01AE ; G 368
U 431 ; WX 835 ; N Uhorn ; G 369
U 432 ; WX 712 ; N uhorn ; G 370
U 433 ; WX 850 ; N uni01B1 ; G 371
U 434 ; WX 813 ; N uni01B2 ; G 372
U 435 ; WX 797 ; N uni01B3 ; G 373
U 436 ; WX 778 ; N uni01B4 ; G 374
U 437 ; WX 725 ; N uni01B5 ; G 375
U 438 ; WX 582 ; N uni01B6 ; G 376
U 439 ; WX 772 ; N uni01B7 ; G 377
U 440 ; WX 772 ; N uni01B8 ; G 378
U 441 ; WX 641 ; N uni01B9 ; G 379
U 442 ; WX 582 ; N uni01BA ; G 380
U 443 ; WX 696 ; N uni01BB ; G 381
U 444 ; WX 772 ; N uni01BC ; G 382
U 445 ; WX 641 ; N uni01BD ; G 383
U 446 ; WX 573 ; N uni01BE ; G 384
U 447 ; WX 716 ; N uni01BF ; G 385
U 448 ; WX 372 ; N uni01C0 ; G 386
U 449 ; WX 659 ; N uni01C1 ; G 387
U 450 ; WX 544 ; N uni01C2 ; G 388
U 451 ; WX 372 ; N uni01C3 ; G 389
U 452 ; WX 1555 ; N uni01C4 ; G 390
U 453 ; WX 1412 ; N uni01C5 ; G 391
U 454 ; WX 1298 ; N uni01C6 ; G 392
U 455 ; WX 1009 ; N uni01C7 ; G 393
U 456 ; WX 980 ; N uni01C8 ; G 394
U 457 ; WX 686 ; N uni01C9 ; G 395
U 458 ; WX 1209 ; N uni01CA ; G 396
U 459 ; WX 1180 ; N uni01CB ; G 397
U 460 ; WX 1055 ; N uni01CC ; G 398
U 461 ; WX 774 ; N uni01CD ; G 399
U 462 ; WX 675 ; N uni01CE ; G 400
U 463 ; WX 372 ; N uni01CF ; G 401
U 464 ; WX 343 ; N uni01D0 ; G 402
U 465 ; WX 850 ; N uni01D1 ; G 403
U 466 ; WX 687 ; N uni01D2 ; G 404
U 467 ; WX 812 ; N uni01D3 ; G 405
U 468 ; WX 712 ; N uni01D4 ; G 406
U 469 ; WX 812 ; N uni01D5 ; G 407
U 470 ; WX 712 ; N uni01D6 ; G 408
U 471 ; WX 812 ; N uni01D7 ; G 409
U 472 ; WX 712 ; N uni01D8 ; G 410
U 473 ; WX 812 ; N uni01D9 ; G 411
U 474 ; WX 712 ; N uni01DA ; G 412
U 475 ; WX 812 ; N uni01DB ; G 413
U 476 ; WX 712 ; N uni01DC ; G 414
U 477 ; WX 678 ; N uni01DD ; G 415
U 478 ; WX 774 ; N uni01DE ; G 416
U 479 ; WX 675 ; N uni01DF ; G 417
U 480 ; WX 774 ; N uni01E0 ; G 418
U 481 ; WX 675 ; N uni01E1 ; G 419
U 482 ; WX 1085 ; N uni01E2 ; G 420
U 483 ; WX 1048 ; N uni01E3 ; G 421
U 484 ; WX 821 ; N uni01E4 ; G 422
U 485 ; WX 716 ; N uni01E5 ; G 423
U 486 ; WX 821 ; N Gcaron ; G 424
U 487 ; WX 716 ; N gcaron ; G 425
U 488 ; WX 775 ; N uni01E8 ; G 426
U 489 ; WX 665 ; N uni01E9 ; G 427
U 490 ; WX 850 ; N uni01EA ; G 428
U 491 ; WX 687 ; N uni01EB ; G 429
U 492 ; WX 850 ; N uni01EC ; G 430
U 493 ; WX 687 ; N uni01ED ; G 431
U 494 ; WX 772 ; N uni01EE ; G 432
U 495 ; WX 582 ; N uni01EF ; G 433
U 496 ; WX 343 ; N uni01F0 ; G 434
U 497 ; WX 1555 ; N uni01F1 ; G 435
U 498 ; WX 1412 ; N uni01F2 ; G 436
U 499 ; WX 1298 ; N uni01F3 ; G 437
U 500 ; WX 821 ; N uni01F4 ; G 438
U 501 ; WX 716 ; N uni01F5 ; G 439
U 502 ; WX 1289 ; N uni01F6 ; G 440
U 503 ; WX 787 ; N uni01F7 ; G 441
U 504 ; WX 837 ; N uni01F8 ; G 442
U 505 ; WX 712 ; N uni01F9 ; G 443
U 506 ; WX 774 ; N Aringacute ; G 444
U 507 ; WX 675 ; N aringacute ; G 445
U 508 ; WX 1085 ; N AEacute ; G 446
U 509 ; WX 1048 ; N aeacute ; G 447
U 510 ; WX 850 ; N Oslashacute ; G 448
U 511 ; WX 687 ; N oslashacute ; G 449
U 512 ; WX 774 ; N uni0200 ; G 450
U 513 ; WX 675 ; N uni0201 ; G 451
U 514 ; WX 774 ; N uni0202 ; G 452
U 515 ; WX 675 ; N uni0203 ; G 453
U 516 ; WX 683 ; N uni0204 ; G 454
U 517 ; WX 678 ; N uni0205 ; G 455
U 518 ; WX 683 ; N uni0206 ; G 456
U 519 ; WX 678 ; N uni0207 ; G 457
U 520 ; WX 372 ; N uni0208 ; G 458
U 521 ; WX 343 ; N uni0209 ; G 459
U 522 ; WX 372 ; N uni020A ; G 460
U 523 ; WX 343 ; N uni020B ; G 461
U 524 ; WX 850 ; N uni020C ; G 462
U 525 ; WX 687 ; N uni020D ; G 463
U 526 ; WX 850 ; N uni020E ; G 464
U 527 ; WX 687 ; N uni020F ; G 465
U 528 ; WX 770 ; N uni0210 ; G 466
U 529 ; WX 493 ; N uni0211 ; G 467
U 530 ; WX 770 ; N uni0212 ; G 468
U 531 ; WX 493 ; N uni0213 ; G 469
U 532 ; WX 812 ; N uni0214 ; G 470
U 533 ; WX 712 ; N uni0215 ; G 471
U 534 ; WX 812 ; N uni0216 ; G 472
U 535 ; WX 712 ; N uni0217 ; G 473
U 536 ; WX 720 ; N Scommaaccent ; G 474
U 537 ; WX 595 ; N scommaaccent ; G 475
U 538 ; WX 682 ; N uni021A ; G 476
U 539 ; WX 478 ; N uni021B ; G 477
U 540 ; WX 690 ; N uni021C ; G 478
U 541 ; WX 607 ; N uni021D ; G 479
U 542 ; WX 837 ; N uni021E ; G 480
U 543 ; WX 712 ; N uni021F ; G 481
U 544 ; WX 837 ; N uni0220 ; G 482
U 545 ; WX 865 ; N uni0221 ; G 483
U 546 ; WX 809 ; N uni0222 ; G 484
U 547 ; WX 659 ; N uni0223 ; G 485
U 548 ; WX 725 ; N uni0224 ; G 486
U 549 ; WX 582 ; N uni0225 ; G 487
U 550 ; WX 774 ; N uni0226 ; G 488
U 551 ; WX 675 ; N uni0227 ; G 489
U 552 ; WX 683 ; N uni0228 ; G 490
U 553 ; WX 678 ; N uni0229 ; G 491
U 554 ; WX 850 ; N uni022A ; G 492
U 555 ; WX 687 ; N uni022B ; G 493
U 556 ; WX 850 ; N uni022C ; G 494
U 557 ; WX 687 ; N uni022D ; G 495
U 558 ; WX 850 ; N uni022E ; G 496
U 559 ; WX 687 ; N uni022F ; G 497
U 560 ; WX 850 ; N uni0230 ; G 498
U 561 ; WX 687 ; N uni0231 ; G 499
U 562 ; WX 724 ; N uni0232 ; G 500
U 563 ; WX 652 ; N uni0233 ; G 501
U 564 ; WX 492 ; N uni0234 ; G 502
U 565 ; WX 867 ; N uni0235 ; G 503
U 566 ; WX 512 ; N uni0236 ; G 504
U 567 ; WX 343 ; N dotlessj ; G 505
U 568 ; WX 1088 ; N uni0238 ; G 506
U 569 ; WX 1088 ; N uni0239 ; G 507
U 570 ; WX 774 ; N uni023A ; G 508
U 571 ; WX 734 ; N uni023B ; G 509
U 572 ; WX 593 ; N uni023C ; G 510
U 573 ; WX 637 ; N uni023D ; G 511
U 574 ; WX 682 ; N uni023E ; G 512
U 575 ; WX 595 ; N uni023F ; G 513
U 576 ; WX 582 ; N uni0240 ; G 514
U 577 ; WX 782 ; N uni0241 ; G 515
U 578 ; WX 614 ; N uni0242 ; G 516
U 579 ; WX 762 ; N uni0243 ; G 517
U 580 ; WX 812 ; N uni0244 ; G 518
U 581 ; WX 774 ; N uni0245 ; G 519
U 582 ; WX 683 ; N uni0246 ; G 520
U 583 ; WX 678 ; N uni0247 ; G 521
U 584 ; WX 372 ; N uni0248 ; G 522
U 585 ; WX 343 ; N uni0249 ; G 523
U 586 ; WX 860 ; N uni024A ; G 524
U 587 ; WX 791 ; N uni024B ; G 525
U 588 ; WX 770 ; N uni024C ; G 526
U 589 ; WX 493 ; N uni024D ; G 527
U 590 ; WX 724 ; N uni024E ; G 528
U 591 ; WX 652 ; N uni024F ; G 529
U 592 ; WX 675 ; N uni0250 ; G 530
U 593 ; WX 716 ; N uni0251 ; G 531
U 594 ; WX 716 ; N uni0252 ; G 532
U 595 ; WX 716 ; N uni0253 ; G 533
U 596 ; WX 593 ; N uni0254 ; G 534
U 597 ; WX 593 ; N uni0255 ; G 535
U 598 ; WX 717 ; N uni0256 ; G 536
U 599 ; WX 792 ; N uni0257 ; G 537
U 600 ; WX 678 ; N uni0258 ; G 538
U 601 ; WX 678 ; N uni0259 ; G 539
U 602 ; WX 876 ; N uni025A ; G 540
U 603 ; WX 557 ; N uni025B ; G 541
U 604 ; WX 545 ; N uni025C ; G 542
U 605 ; WX 815 ; N uni025D ; G 543
U 606 ; WX 731 ; N uni025E ; G 544
U 607 ; WX 343 ; N uni025F ; G 545
U 608 ; WX 792 ; N uni0260 ; G 546
U 609 ; WX 716 ; N uni0261 ; G 547
U 610 ; WX 627 ; N uni0262 ; G 548
U 611 ; WX 644 ; N uni0263 ; G 549
U 612 ; WX 635 ; N uni0264 ; G 550
U 613 ; WX 712 ; N uni0265 ; G 551
U 614 ; WX 712 ; N uni0266 ; G 552
U 615 ; WX 712 ; N uni0267 ; G 553
U 616 ; WX 545 ; N uni0268 ; G 554
U 617 ; WX 440 ; N uni0269 ; G 555
U 618 ; WX 545 ; N uni026A ; G 556
U 619 ; WX 559 ; N uni026B ; G 557
U 620 ; WX 693 ; N uni026C ; G 558
U 621 ; WX 343 ; N uni026D ; G 559
U 622 ; WX 841 ; N uni026E ; G 560
U 623 ; WX 1042 ; N uni026F ; G 561
U 624 ; WX 1042 ; N uni0270 ; G 562
U 625 ; WX 1042 ; N uni0271 ; G 563
U 626 ; WX 712 ; N uni0272 ; G 564
U 627 ; WX 793 ; N uni0273 ; G 565
U 628 ; WX 707 ; N uni0274 ; G 566
U 629 ; WX 687 ; N uni0275 ; G 567
U 630 ; WX 909 ; N uni0276 ; G 568
U 631 ; WX 681 ; N uni0277 ; G 569
U 632 ; WX 796 ; N uni0278 ; G 570
U 633 ; WX 538 ; N uni0279 ; G 571
U 634 ; WX 538 ; N uni027A ; G 572
U 635 ; WX 650 ; N uni027B ; G 573
U 636 ; WX 493 ; N uni027C ; G 574
U 637 ; WX 493 ; N uni027D ; G 575
U 638 ; WX 596 ; N uni027E ; G 576
U 639 ; WX 596 ; N uni027F ; G 577
U 640 ; WX 642 ; N uni0280 ; G 578
U 641 ; WX 642 ; N uni0281 ; G 579
U 642 ; WX 595 ; N uni0282 ; G 580
U 643 ; WX 415 ; N uni0283 ; G 581
U 644 ; WX 435 ; N uni0284 ; G 582
U 645 ; WX 605 ; N uni0285 ; G 583
U 646 ; WX 552 ; N uni0286 ; G 584
U 647 ; WX 478 ; N uni0287 ; G 585
U 648 ; WX 478 ; N uni0288 ; G 586
U 649 ; WX 920 ; N uni0289 ; G 587
U 650 ; WX 772 ; N uni028A ; G 588
U 651 ; WX 670 ; N uni028B ; G 589
U 652 ; WX 652 ; N uni028C ; G 590
U 653 ; WX 924 ; N uni028D ; G 591
U 654 ; WX 652 ; N uni028E ; G 592
U 655 ; WX 724 ; N uni028F ; G 593
U 656 ; WX 694 ; N uni0290 ; G 594
U 657 ; WX 684 ; N uni0291 ; G 595
U 658 ; WX 641 ; N uni0292 ; G 596
U 659 ; WX 641 ; N uni0293 ; G 597
U 660 ; WX 573 ; N uni0294 ; G 598
U 661 ; WX 573 ; N uni0295 ; G 599
U 662 ; WX 573 ; N uni0296 ; G 600
U 663 ; WX 573 ; N uni0297 ; G 601
U 664 ; WX 850 ; N uni0298 ; G 602
U 665 ; WX 633 ; N uni0299 ; G 603
U 666 ; WX 731 ; N uni029A ; G 604
U 667 ; WX 685 ; N uni029B ; G 605
U 668 ; WX 691 ; N uni029C ; G 606
U 669 ; WX 343 ; N uni029D ; G 607
U 670 ; WX 732 ; N uni029E ; G 608
U 671 ; WX 539 ; N uni029F ; G 609
U 672 ; WX 792 ; N uni02A0 ; G 610
U 673 ; WX 573 ; N uni02A1 ; G 611
U 674 ; WX 573 ; N uni02A2 ; G 612
U 675 ; WX 1156 ; N uni02A3 ; G 613
U 676 ; WX 1214 ; N uni02A4 ; G 614
U 677 ; WX 1155 ; N uni02A5 ; G 615
U 678 ; WX 975 ; N uni02A6 ; G 616
U 679 ; WX 769 ; N uni02A7 ; G 617
U 680 ; WX 929 ; N uni02A8 ; G 618
U 681 ; WX 1026 ; N uni02A9 ; G 619
U 682 ; WX 862 ; N uni02AA ; G 620
U 683 ; WX 780 ; N uni02AB ; G 621
U 684 ; WX 591 ; N uni02AC ; G 622
U 685 ; WX 415 ; N uni02AD ; G 623
U 686 ; WX 677 ; N uni02AE ; G 624
U 687 ; WX 789 ; N uni02AF ; G 625
U 688 ; WX 456 ; N uni02B0 ; G 626
U 689 ; WX 456 ; N uni02B1 ; G 627
U 690 ; WX 219 ; N uni02B2 ; G 628
U 691 ; WX 315 ; N uni02B3 ; G 629
U 692 ; WX 315 ; N uni02B4 ; G 630
U 693 ; WX 315 ; N uni02B5 ; G 631
U 694 ; WX 411 ; N uni02B6 ; G 632
U 695 ; WX 591 ; N uni02B7 ; G 633
U 696 ; WX 417 ; N uni02B8 ; G 634
U 697 ; WX 302 ; N uni02B9 ; G 635
U 698 ; WX 521 ; N uni02BA ; G 636
U 699 ; WX 380 ; N uni02BB ; G 637
U 700 ; WX 380 ; N uni02BC ; G 638
U 701 ; WX 380 ; N uni02BD ; G 639
U 702 ; WX 366 ; N uni02BE ; G 640
U 703 ; WX 366 ; N uni02BF ; G 641
U 704 ; WX 326 ; N uni02C0 ; G 642
U 705 ; WX 326 ; N uni02C1 ; G 643
U 706 ; WX 500 ; N uni02C2 ; G 644
U 707 ; WX 500 ; N uni02C3 ; G 645
U 708 ; WX 500 ; N uni02C4 ; G 646
U 709 ; WX 500 ; N uni02C5 ; G 647
U 710 ; WX 500 ; N circumflex ; G 648
U 711 ; WX 500 ; N caron ; G 649
U 712 ; WX 306 ; N uni02C8 ; G 650
U 713 ; WX 500 ; N uni02C9 ; G 651
U 714 ; WX 500 ; N uni02CA ; G 652
U 715 ; WX 500 ; N uni02CB ; G 653
U 716 ; WX 306 ; N uni02CC ; G 654
U 717 ; WX 500 ; N uni02CD ; G 655
U 718 ; WX 500 ; N uni02CE ; G 656
U 719 ; WX 500 ; N uni02CF ; G 657
U 720 ; WX 337 ; N uni02D0 ; G 658
U 721 ; WX 337 ; N uni02D1 ; G 659
U 722 ; WX 366 ; N uni02D2 ; G 660
U 723 ; WX 366 ; N uni02D3 ; G 661
U 724 ; WX 500 ; N uni02D4 ; G 662
U 725 ; WX 500 ; N uni02D5 ; G 663
U 726 ; WX 416 ; N uni02D6 ; G 664
U 727 ; WX 328 ; N uni02D7 ; G 665
U 728 ; WX 500 ; N breve ; G 666
U 729 ; WX 500 ; N dotaccent ; G 667
U 730 ; WX 500 ; N ring ; G 668
U 731 ; WX 500 ; N ogonek ; G 669
U 732 ; WX 500 ; N tilde ; G 670
U 733 ; WX 500 ; N hungarumlaut ; G 671
U 734 ; WX 351 ; N uni02DE ; G 672
U 735 ; WX 500 ; N uni02DF ; G 673
U 736 ; WX 412 ; N uni02E0 ; G 674
U 737 ; WX 219 ; N uni02E1 ; G 675
U 738 ; WX 381 ; N uni02E2 ; G 676
U 739 ; WX 413 ; N uni02E3 ; G 677
U 740 ; WX 326 ; N uni02E4 ; G 678
U 741 ; WX 500 ; N uni02E5 ; G 679
U 742 ; WX 500 ; N uni02E6 ; G 680
U 743 ; WX 500 ; N uni02E7 ; G 681
U 744 ; WX 500 ; N uni02E8 ; G 682
U 745 ; WX 500 ; N uni02E9 ; G 683
U 748 ; WX 500 ; N uni02EC ; G 684
U 749 ; WX 500 ; N uni02ED ; G 685
U 750 ; WX 657 ; N uni02EE ; G 686
U 755 ; WX 500 ; N uni02F3 ; G 687
U 759 ; WX 500 ; N uni02F7 ; G 688
U 768 ; WX 0 ; N gravecomb ; G 689
U 769 ; WX 0 ; N acutecomb ; G 690
U 770 ; WX 0 ; N uni0302 ; G 691
U 771 ; WX 0 ; N tildecomb ; G 692
U 772 ; WX 0 ; N uni0304 ; G 693
U 773 ; WX 0 ; N uni0305 ; G 694
U 774 ; WX 0 ; N uni0306 ; G 695
U 775 ; WX 0 ; N uni0307 ; G 696
U 776 ; WX 0 ; N uni0308 ; G 697
U 777 ; WX 0 ; N hookabovecomb ; G 698
U 778 ; WX 0 ; N uni030A ; G 699
U 779 ; WX 0 ; N uni030B ; G 700
U 780 ; WX 0 ; N uni030C ; G 701
U 781 ; WX 0 ; N uni030D ; G 702
U 782 ; WX 0 ; N uni030E ; G 703
U 783 ; WX 0 ; N uni030F ; G 704
U 784 ; WX 0 ; N uni0310 ; G 705
U 785 ; WX 0 ; N uni0311 ; G 706
U 786 ; WX 0 ; N uni0312 ; G 707
U 787 ; WX 0 ; N uni0313 ; G 708
U 788 ; WX 0 ; N uni0314 ; G 709
U 789 ; WX 0 ; N uni0315 ; G 710
U 790 ; WX 0 ; N uni0316 ; G 711
U 791 ; WX 0 ; N uni0317 ; G 712
U 792 ; WX 0 ; N uni0318 ; G 713
U 793 ; WX 0 ; N uni0319 ; G 714
U 794 ; WX 0 ; N uni031A ; G 715
U 795 ; WX 0 ; N uni031B ; G 716
U 796 ; WX 0 ; N uni031C ; G 717
U 797 ; WX 0 ; N uni031D ; G 718
U 798 ; WX 0 ; N uni031E ; G 719
U 799 ; WX 0 ; N uni031F ; G 720
U 800 ; WX 0 ; N uni0320 ; G 721
U 801 ; WX 0 ; N uni0321 ; G 722
U 802 ; WX 0 ; N uni0322 ; G 723
U 803 ; WX 0 ; N dotbelowcomb ; G 724
U 804 ; WX 0 ; N uni0324 ; G 725
U 805 ; WX 0 ; N uni0325 ; G 726
U 806 ; WX 0 ; N uni0326 ; G 727
U 807 ; WX 0 ; N uni0327 ; G 728
U 808 ; WX 0 ; N uni0328 ; G 729
U 809 ; WX 0 ; N uni0329 ; G 730
U 810 ; WX 0 ; N uni032A ; G 731
U 811 ; WX 0 ; N uni032B ; G 732
U 812 ; WX 0 ; N uni032C ; G 733
U 813 ; WX 0 ; N uni032D ; G 734
U 814 ; WX 0 ; N uni032E ; G 735
U 815 ; WX 0 ; N uni032F ; G 736
U 816 ; WX 0 ; N uni0330 ; G 737
U 817 ; WX 0 ; N uni0331 ; G 738
U 818 ; WX 0 ; N uni0332 ; G 739
U 819 ; WX 0 ; N uni0333 ; G 740
U 820 ; WX 0 ; N uni0334 ; G 741
U 821 ; WX 0 ; N uni0335 ; G 742
U 822 ; WX 0 ; N uni0336 ; G 743
U 823 ; WX 0 ; N uni0337 ; G 744
U 824 ; WX 0 ; N uni0338 ; G 745
U 825 ; WX 0 ; N uni0339 ; G 746
U 826 ; WX 0 ; N uni033A ; G 747
U 827 ; WX 0 ; N uni033B ; G 748
U 828 ; WX 0 ; N uni033C ; G 749
U 829 ; WX 0 ; N uni033D ; G 750
U 830 ; WX 0 ; N uni033E ; G 751
U 831 ; WX 0 ; N uni033F ; G 752
U 832 ; WX 0 ; N uni0340 ; G 753
U 833 ; WX 0 ; N uni0341 ; G 754
U 834 ; WX 0 ; N uni0342 ; G 755
U 835 ; WX 0 ; N uni0343 ; G 756
U 836 ; WX 0 ; N uni0344 ; G 757
U 837 ; WX 0 ; N uni0345 ; G 758
U 838 ; WX 0 ; N uni0346 ; G 759
U 839 ; WX 0 ; N uni0347 ; G 760
U 840 ; WX 0 ; N uni0348 ; G 761
U 841 ; WX 0 ; N uni0349 ; G 762
U 842 ; WX 0 ; N uni034A ; G 763
U 843 ; WX 0 ; N uni034B ; G 764
U 844 ; WX 0 ; N uni034C ; G 765
U 845 ; WX 0 ; N uni034D ; G 766
U 846 ; WX 0 ; N uni034E ; G 767
U 847 ; WX 0 ; N uni034F ; G 768
U 849 ; WX 0 ; N uni0351 ; G 769
U 850 ; WX 0 ; N uni0352 ; G 770
U 851 ; WX 0 ; N uni0353 ; G 771
U 855 ; WX 0 ; N uni0357 ; G 772
U 856 ; WX 0 ; N uni0358 ; G 773
U 858 ; WX 0 ; N uni035A ; G 774
U 860 ; WX 0 ; N uni035C ; G 775
U 861 ; WX 0 ; N uni035D ; G 776
U 862 ; WX 0 ; N uni035E ; G 777
U 863 ; WX 0 ; N uni035F ; G 778
U 864 ; WX 0 ; N uni0360 ; G 779
U 865 ; WX 0 ; N uni0361 ; G 780
U 866 ; WX 0 ; N uni0362 ; G 781
U 880 ; WX 698 ; N uni0370 ; G 782
U 881 ; WX 565 ; N uni0371 ; G 783
U 882 ; WX 1022 ; N uni0372 ; G 784
U 883 ; WX 836 ; N uni0373 ; G 785
U 884 ; WX 302 ; N uni0374 ; G 786
U 885 ; WX 302 ; N uni0375 ; G 787
U 886 ; WX 837 ; N uni0376 ; G 788
U 887 ; WX 701 ; N uni0377 ; G 789
U 890 ; WX 500 ; N uni037A ; G 790
U 891 ; WX 593 ; N uni037B ; G 791
U 892 ; WX 550 ; N uni037C ; G 792
U 893 ; WX 549 ; N uni037D ; G 793
U 894 ; WX 400 ; N uni037E ; G 794
U 895 ; WX 372 ; N uni037F ; G 795
U 900 ; WX 441 ; N tonos ; G 796
U 901 ; WX 500 ; N dieresistonos ; G 797
U 902 ; WX 797 ; N Alphatonos ; G 798
U 903 ; WX 380 ; N anoteleia ; G 799
U 904 ; WX 846 ; N Epsilontonos ; G 800
U 905 ; WX 1009 ; N Etatonos ; G 801
U 906 ; WX 563 ; N Iotatonos ; G 802
U 908 ; WX 891 ; N Omicrontonos ; G 803
U 910 ; WX 980 ; N Upsilontonos ; G 804
U 911 ; WX 894 ; N Omegatonos ; G 805
U 912 ; WX 390 ; N iotadieresistonos ; G 806
U 913 ; WX 774 ; N Alpha ; G 807
U 914 ; WX 762 ; N Beta ; G 808
U 915 ; WX 637 ; N Gamma ; G 809
U 916 ; WX 774 ; N uni0394 ; G 810
U 917 ; WX 683 ; N Epsilon ; G 811
U 918 ; WX 725 ; N Zeta ; G 812
U 919 ; WX 837 ; N Eta ; G 813
U 920 ; WX 850 ; N Theta ; G 814
U 921 ; WX 372 ; N Iota ; G 815
U 922 ; WX 775 ; N Kappa ; G 816
U 923 ; WX 774 ; N Lambda ; G 817
U 924 ; WX 995 ; N Mu ; G 818
U 925 ; WX 837 ; N Nu ; G 819
U 926 ; WX 632 ; N Xi ; G 820
U 927 ; WX 850 ; N Omicron ; G 821
U 928 ; WX 837 ; N Pi ; G 822
U 929 ; WX 733 ; N Rho ; G 823
U 931 ; WX 683 ; N Sigma ; G 824
U 932 ; WX 682 ; N Tau ; G 825
U 933 ; WX 724 ; N Upsilon ; G 826
U 934 ; WX 850 ; N Phi ; G 827
U 935 ; WX 771 ; N Chi ; G 828
U 936 ; WX 850 ; N Psi ; G 829
U 937 ; WX 850 ; N Omega ; G 830
U 938 ; WX 372 ; N Iotadieresis ; G 831
U 939 ; WX 724 ; N Upsilondieresis ; G 832
U 940 ; WX 687 ; N alphatonos ; G 833
U 941 ; WX 557 ; N epsilontonos ; G 834
U 942 ; WX 712 ; N etatonos ; G 835
U 943 ; WX 390 ; N iotatonos ; G 836
U 944 ; WX 675 ; N upsilondieresistonos ; G 837
U 945 ; WX 687 ; N alpha ; G 838
U 946 ; WX 716 ; N beta ; G 839
U 947 ; WX 681 ; N gamma ; G 840
U 948 ; WX 687 ; N delta ; G 841
U 949 ; WX 557 ; N epsilon ; G 842
U 950 ; WX 591 ; N zeta ; G 843
U 951 ; WX 712 ; N eta ; G 844
U 952 ; WX 687 ; N theta ; G 845
U 953 ; WX 390 ; N iota ; G 846
U 954 ; WX 710 ; N kappa ; G 847
U 955 ; WX 633 ; N lambda ; G 848
U 956 ; WX 736 ; N uni03BC ; G 849
U 957 ; WX 681 ; N nu ; G 850
U 958 ; WX 591 ; N xi ; G 851
U 959 ; WX 687 ; N omicron ; G 852
U 960 ; WX 791 ; N pi ; G 853
U 961 ; WX 716 ; N rho ; G 854
U 962 ; WX 593 ; N sigma1 ; G 855
U 963 ; WX 779 ; N sigma ; G 856
U 964 ; WX 638 ; N tau ; G 857
U 965 ; WX 675 ; N upsilon ; G 858
U 966 ; WX 782 ; N phi ; G 859
U 967 ; WX 645 ; N chi ; G 860
U 968 ; WX 794 ; N psi ; G 861
U 969 ; WX 869 ; N omega ; G 862
U 970 ; WX 390 ; N iotadieresis ; G 863
U 971 ; WX 675 ; N upsilondieresis ; G 864
U 972 ; WX 687 ; N omicrontonos ; G 865
U 973 ; WX 675 ; N upsilontonos ; G 866
U 974 ; WX 869 ; N omegatonos ; G 867
U 975 ; WX 775 ; N uni03CF ; G 868
U 976 ; WX 651 ; N uni03D0 ; G 869
U 977 ; WX 661 ; N theta1 ; G 870
U 978 ; WX 746 ; N Upsilon1 ; G 871
U 979 ; WX 981 ; N uni03D3 ; G 872
U 980 ; WX 746 ; N uni03D4 ; G 873
U 981 ; WX 796 ; N phi1 ; G 874
U 982 ; WX 869 ; N omega1 ; G 875
U 983 ; WX 744 ; N uni03D7 ; G 876
U 984 ; WX 850 ; N uni03D8 ; G 877
U 985 ; WX 687 ; N uni03D9 ; G 878
U 986 ; WX 734 ; N uni03DA ; G 879
U 987 ; WX 593 ; N uni03DB ; G 880
U 988 ; WX 683 ; N uni03DC ; G 881
U 989 ; WX 494 ; N uni03DD ; G 882
U 990 ; WX 702 ; N uni03DE ; G 883
U 991 ; WX 660 ; N uni03DF ; G 884
U 992 ; WX 919 ; N uni03E0 ; G 885
U 993 ; WX 627 ; N uni03E1 ; G 886
U 994 ; WX 1093 ; N uni03E2 ; G 887
U 995 ; WX 837 ; N uni03E3 ; G 888
U 996 ; WX 832 ; N uni03E4 ; G 889
U 997 ; WX 716 ; N uni03E5 ; G 890
U 998 ; WX 928 ; N uni03E6 ; G 891
U 999 ; WX 744 ; N uni03E7 ; G 892
U 1000 ; WX 733 ; N uni03E8 ; G 893
U 1001 ; WX 650 ; N uni03E9 ; G 894
U 1002 ; WX 789 ; N uni03EA ; G 895
U 1003 ; WX 671 ; N uni03EB ; G 896
U 1004 ; WX 752 ; N uni03EC ; G 897
U 1005 ; WX 716 ; N uni03ED ; G 898
U 1006 ; WX 682 ; N uni03EE ; G 899
U 1007 ; WX 590 ; N uni03EF ; G 900
U 1008 ; WX 744 ; N uni03F0 ; G 901
U 1009 ; WX 716 ; N uni03F1 ; G 902
U 1010 ; WX 593 ; N uni03F2 ; G 903
U 1011 ; WX 343 ; N uni03F3 ; G 904
U 1012 ; WX 850 ; N uni03F4 ; G 905
U 1013 ; WX 645 ; N uni03F5 ; G 906
U 1014 ; WX 644 ; N uni03F6 ; G 907
U 1015 ; WX 738 ; N uni03F7 ; G 908
U 1016 ; WX 716 ; N uni03F8 ; G 909
U 1017 ; WX 734 ; N uni03F9 ; G 910
U 1018 ; WX 995 ; N uni03FA ; G 911
U 1019 ; WX 732 ; N uni03FB ; G 912
U 1020 ; WX 716 ; N uni03FC ; G 913
U 1021 ; WX 698 ; N uni03FD ; G 914
U 1022 ; WX 734 ; N uni03FE ; G 915
U 1023 ; WX 698 ; N uni03FF ; G 916
U 1024 ; WX 683 ; N uni0400 ; G 917
U 1025 ; WX 683 ; N uni0401 ; G 918
U 1026 ; WX 878 ; N uni0402 ; G 919
U 1027 ; WX 637 ; N uni0403 ; G 920
U 1028 ; WX 734 ; N uni0404 ; G 921
U 1029 ; WX 720 ; N uni0405 ; G 922
U 1030 ; WX 372 ; N uni0406 ; G 923
U 1031 ; WX 372 ; N uni0407 ; G 924
U 1032 ; WX 372 ; N uni0408 ; G 925
U 1033 ; WX 1154 ; N uni0409 ; G 926
U 1034 ; WX 1130 ; N uni040A ; G 927
U 1035 ; WX 878 ; N uni040B ; G 928
U 1036 ; WX 817 ; N uni040C ; G 929
U 1037 ; WX 837 ; N uni040D ; G 930
U 1038 ; WX 771 ; N uni040E ; G 931
U 1039 ; WX 837 ; N uni040F ; G 932
U 1040 ; WX 774 ; N uni0410 ; G 933
U 1041 ; WX 762 ; N uni0411 ; G 934
U 1042 ; WX 762 ; N uni0412 ; G 935
U 1043 ; WX 637 ; N uni0413 ; G 936
U 1044 ; WX 891 ; N uni0414 ; G 937
U 1045 ; WX 683 ; N uni0415 ; G 938
U 1046 ; WX 1224 ; N uni0416 ; G 939
U 1047 ; WX 710 ; N uni0417 ; G 940
U 1048 ; WX 837 ; N uni0418 ; G 941
U 1049 ; WX 837 ; N uni0419 ; G 942
U 1050 ; WX 817 ; N uni041A ; G 943
U 1051 ; WX 831 ; N uni041B ; G 944
U 1052 ; WX 995 ; N uni041C ; G 945
U 1053 ; WX 837 ; N uni041D ; G 946
U 1054 ; WX 850 ; N uni041E ; G 947
U 1055 ; WX 837 ; N uni041F ; G 948
U 1056 ; WX 733 ; N uni0420 ; G 949
U 1057 ; WX 734 ; N uni0421 ; G 950
U 1058 ; WX 682 ; N uni0422 ; G 951
U 1059 ; WX 771 ; N uni0423 ; G 952
U 1060 ; WX 992 ; N uni0424 ; G 953
U 1061 ; WX 771 ; N uni0425 ; G 954
U 1062 ; WX 928 ; N uni0426 ; G 955
U 1063 ; WX 808 ; N uni0427 ; G 956
U 1064 ; WX 1235 ; N uni0428 ; G 957
U 1065 ; WX 1326 ; N uni0429 ; G 958
U 1066 ; WX 939 ; N uni042A ; G 959
U 1067 ; WX 1036 ; N uni042B ; G 960
U 1068 ; WX 762 ; N uni042C ; G 961
U 1069 ; WX 734 ; N uni042D ; G 962
U 1070 ; WX 1174 ; N uni042E ; G 963
U 1071 ; WX 770 ; N uni042F ; G 964
U 1072 ; WX 675 ; N uni0430 ; G 965
U 1073 ; WX 698 ; N uni0431 ; G 966
U 1074 ; WX 633 ; N uni0432 ; G 967
U 1075 ; WX 522 ; N uni0433 ; G 968
U 1076 ; WX 808 ; N uni0434 ; G 969
U 1077 ; WX 678 ; N uni0435 ; G 970
U 1078 ; WX 995 ; N uni0436 ; G 971
U 1079 ; WX 581 ; N uni0437 ; G 972
U 1080 ; WX 701 ; N uni0438 ; G 973
U 1081 ; WX 701 ; N uni0439 ; G 974
U 1082 ; WX 679 ; N uni043A ; G 975
U 1083 ; WX 732 ; N uni043B ; G 976
U 1084 ; WX 817 ; N uni043C ; G 977
U 1085 ; WX 691 ; N uni043D ; G 978
U 1086 ; WX 687 ; N uni043E ; G 979
U 1087 ; WX 691 ; N uni043F ; G 980
U 1088 ; WX 716 ; N uni0440 ; G 981
U 1089 ; WX 593 ; N uni0441 ; G 982
U 1090 ; WX 580 ; N uni0442 ; G 983
U 1091 ; WX 652 ; N uni0443 ; G 984
U 1092 ; WX 992 ; N uni0444 ; G 985
U 1093 ; WX 645 ; N uni0445 ; G 986
U 1094 ; WX 741 ; N uni0446 ; G 987
U 1095 ; WX 687 ; N uni0447 ; G 988
U 1096 ; WX 1062 ; N uni0448 ; G 989
U 1097 ; WX 1105 ; N uni0449 ; G 990
U 1098 ; WX 751 ; N uni044A ; G 991
U 1099 ; WX 904 ; N uni044B ; G 992
U 1100 ; WX 632 ; N uni044C ; G 993
U 1101 ; WX 593 ; N uni044D ; G 994
U 1102 ; WX 972 ; N uni044E ; G 995
U 1103 ; WX 642 ; N uni044F ; G 996
U 1104 ; WX 678 ; N uni0450 ; G 997
U 1105 ; WX 678 ; N uni0451 ; G 998
U 1106 ; WX 714 ; N uni0452 ; G 999
U 1107 ; WX 522 ; N uni0453 ; G 1000
U 1108 ; WX 593 ; N uni0454 ; G 1001
U 1109 ; WX 595 ; N uni0455 ; G 1002
U 1110 ; WX 343 ; N uni0456 ; G 1003
U 1111 ; WX 343 ; N uni0457 ; G 1004
U 1112 ; WX 343 ; N uni0458 ; G 1005
U 1113 ; WX 991 ; N uni0459 ; G 1006
U 1114 ; WX 956 ; N uni045A ; G 1007
U 1115 ; WX 734 ; N uni045B ; G 1008
U 1116 ; WX 679 ; N uni045C ; G 1009
U 1117 ; WX 701 ; N uni045D ; G 1010
U 1118 ; WX 652 ; N uni045E ; G 1011
U 1119 ; WX 691 ; N uni045F ; G 1012
U 1120 ; WX 1093 ; N uni0460 ; G 1013
U 1121 ; WX 869 ; N uni0461 ; G 1014
U 1122 ; WX 840 ; N uni0462 ; G 1015
U 1123 ; WX 736 ; N uni0463 ; G 1016
U 1124 ; WX 1012 ; N uni0464 ; G 1017
U 1125 ; WX 839 ; N uni0465 ; G 1018
U 1126 ; WX 992 ; N uni0466 ; G 1019
U 1127 ; WX 832 ; N uni0467 ; G 1020
U 1128 ; WX 1358 ; N uni0468 ; G 1021
U 1129 ; WX 1121 ; N uni0469 ; G 1022
U 1130 ; WX 850 ; N uni046A ; G 1023
U 1131 ; WX 687 ; N uni046B ; G 1024
U 1132 ; WX 1236 ; N uni046C ; G 1025
U 1133 ; WX 1007 ; N uni046D ; G 1026
U 1134 ; WX 696 ; N uni046E ; G 1027
U 1135 ; WX 557 ; N uni046F ; G 1028
U 1136 ; WX 1075 ; N uni0470 ; G 1029
U 1137 ; WX 1061 ; N uni0471 ; G 1030
U 1138 ; WX 850 ; N uni0472 ; G 1031
U 1139 ; WX 687 ; N uni0473 ; G 1032
U 1140 ; WX 850 ; N uni0474 ; G 1033
U 1141 ; WX 695 ; N uni0475 ; G 1034
U 1142 ; WX 850 ; N uni0476 ; G 1035
U 1143 ; WX 695 ; N uni0477 ; G 1036
U 1144 ; WX 1148 ; N uni0478 ; G 1037
U 1145 ; WX 1043 ; N uni0479 ; G 1038
U 1146 ; WX 1074 ; N uni047A ; G 1039
U 1147 ; WX 863 ; N uni047B ; G 1040
U 1148 ; WX 1405 ; N uni047C ; G 1041
U 1149 ; WX 1173 ; N uni047D ; G 1042
U 1150 ; WX 1093 ; N uni047E ; G 1043
U 1151 ; WX 869 ; N uni047F ; G 1044
U 1152 ; WX 734 ; N uni0480 ; G 1045
U 1153 ; WX 593 ; N uni0481 ; G 1046
U 1154 ; WX 652 ; N uni0482 ; G 1047
U 1155 ; WX 0 ; N uni0483 ; G 1048
U 1156 ; WX 0 ; N uni0484 ; G 1049
U 1157 ; WX 0 ; N uni0485 ; G 1050
U 1158 ; WX 0 ; N uni0486 ; G 1051
U 1159 ; WX 0 ; N uni0487 ; G 1052
U 1160 ; WX 418 ; N uni0488 ; G 1053
U 1161 ; WX 418 ; N uni0489 ; G 1054
U 1162 ; WX 957 ; N uni048A ; G 1055
U 1163 ; WX 807 ; N uni048B ; G 1056
U 1164 ; WX 762 ; N uni048C ; G 1057
U 1165 ; WX 611 ; N uni048D ; G 1058
U 1166 ; WX 733 ; N uni048E ; G 1059
U 1167 ; WX 716 ; N uni048F ; G 1060
U 1168 ; WX 637 ; N uni0490 ; G 1061
U 1169 ; WX 522 ; N uni0491 ; G 1062
U 1170 ; WX 666 ; N uni0492 ; G 1063
U 1171 ; WX 543 ; N uni0493 ; G 1064
U 1172 ; WX 808 ; N uni0494 ; G 1065
U 1173 ; WX 669 ; N uni0495 ; G 1066
U 1174 ; WX 1224 ; N uni0496 ; G 1067
U 1175 ; WX 995 ; N uni0497 ; G 1068
U 1176 ; WX 710 ; N uni0498 ; G 1069
U 1177 ; WX 581 ; N uni0499 ; G 1070
U 1178 ; WX 775 ; N uni049A ; G 1071
U 1179 ; WX 679 ; N uni049B ; G 1072
U 1180 ; WX 817 ; N uni049C ; G 1073
U 1181 ; WX 679 ; N uni049D ; G 1074
U 1182 ; WX 817 ; N uni049E ; G 1075
U 1183 ; WX 679 ; N uni049F ; G 1076
U 1184 ; WX 1015 ; N uni04A0 ; G 1077
U 1185 ; WX 826 ; N uni04A1 ; G 1078
U 1186 ; WX 956 ; N uni04A2 ; G 1079
U 1187 ; WX 808 ; N uni04A3 ; G 1080
U 1188 ; WX 1103 ; N uni04A4 ; G 1081
U 1189 ; WX 874 ; N uni04A5 ; G 1082
U 1190 ; WX 1273 ; N uni04A6 ; G 1083
U 1191 ; WX 1017 ; N uni04A7 ; G 1084
U 1192 ; WX 952 ; N uni04A8 ; G 1085
U 1193 ; WX 858 ; N uni04A9 ; G 1086
U 1194 ; WX 734 ; N uni04AA ; G 1087
U 1195 ; WX 593 ; N uni04AB ; G 1088
U 1196 ; WX 682 ; N uni04AC ; G 1089
U 1197 ; WX 580 ; N uni04AD ; G 1090
U 1198 ; WX 724 ; N uni04AE ; G 1091
U 1199 ; WX 652 ; N uni04AF ; G 1092
U 1200 ; WX 724 ; N uni04B0 ; G 1093
U 1201 ; WX 652 ; N uni04B1 ; G 1094
U 1202 ; WX 771 ; N uni04B2 ; G 1095
U 1203 ; WX 645 ; N uni04B3 ; G 1096
U 1204 ; WX 1112 ; N uni04B4 ; G 1097
U 1205 ; WX 1000 ; N uni04B5 ; G 1098
U 1206 ; WX 808 ; N uni04B6 ; G 1099
U 1207 ; WX 687 ; N uni04B7 ; G 1100
U 1208 ; WX 808 ; N uni04B8 ; G 1101
U 1209 ; WX 687 ; N uni04B9 ; G 1102
U 1210 ; WX 808 ; N uni04BA ; G 1103
U 1211 ; WX 712 ; N uni04BB ; G 1104
U 1212 ; WX 1026 ; N uni04BC ; G 1105
U 1213 ; WX 810 ; N uni04BD ; G 1106
U 1214 ; WX 1026 ; N uni04BE ; G 1107
U 1215 ; WX 810 ; N uni04BF ; G 1108
U 1216 ; WX 372 ; N uni04C0 ; G 1109
U 1217 ; WX 1224 ; N uni04C1 ; G 1110
U 1218 ; WX 995 ; N uni04C2 ; G 1111
U 1219 ; WX 775 ; N uni04C3 ; G 1112
U 1220 ; WX 630 ; N uni04C4 ; G 1113
U 1221 ; WX 951 ; N uni04C5 ; G 1114
U 1222 ; WX 805 ; N uni04C6 ; G 1115
U 1223 ; WX 837 ; N uni04C7 ; G 1116
U 1224 ; WX 691 ; N uni04C8 ; G 1117
U 1225 ; WX 957 ; N uni04C9 ; G 1118
U 1226 ; WX 807 ; N uni04CA ; G 1119
U 1227 ; WX 808 ; N uni04CB ; G 1120
U 1228 ; WX 687 ; N uni04CC ; G 1121
U 1229 ; WX 1115 ; N uni04CD ; G 1122
U 1230 ; WX 933 ; N uni04CE ; G 1123
U 1231 ; WX 343 ; N uni04CF ; G 1124
U 1232 ; WX 774 ; N uni04D0 ; G 1125
U 1233 ; WX 675 ; N uni04D1 ; G 1126
U 1234 ; WX 774 ; N uni04D2 ; G 1127
U 1235 ; WX 675 ; N uni04D3 ; G 1128
U 1236 ; WX 1085 ; N uni04D4 ; G 1129
U 1237 ; WX 1048 ; N uni04D5 ; G 1130
U 1238 ; WX 683 ; N uni04D6 ; G 1131
U 1239 ; WX 678 ; N uni04D7 ; G 1132
U 1240 ; WX 849 ; N uni04D8 ; G 1133
U 1241 ; WX 678 ; N uni04D9 ; G 1134
U 1242 ; WX 849 ; N uni04DA ; G 1135
U 1243 ; WX 678 ; N uni04DB ; G 1136
U 1244 ; WX 1224 ; N uni04DC ; G 1137
U 1245 ; WX 995 ; N uni04DD ; G 1138
U 1246 ; WX 710 ; N uni04DE ; G 1139
U 1247 ; WX 581 ; N uni04DF ; G 1140
U 1248 ; WX 772 ; N uni04E0 ; G 1141
U 1249 ; WX 641 ; N uni04E1 ; G 1142
U 1250 ; WX 837 ; N uni04E2 ; G 1143
U 1251 ; WX 701 ; N uni04E3 ; G 1144
U 1252 ; WX 837 ; N uni04E4 ; G 1145
U 1253 ; WX 701 ; N uni04E5 ; G 1146
U 1254 ; WX 850 ; N uni04E6 ; G 1147
U 1255 ; WX 687 ; N uni04E7 ; G 1148
U 1256 ; WX 850 ; N uni04E8 ; G 1149
U 1257 ; WX 687 ; N uni04E9 ; G 1150
U 1258 ; WX 850 ; N uni04EA ; G 1151
U 1259 ; WX 687 ; N uni04EB ; G 1152
U 1260 ; WX 734 ; N uni04EC ; G 1153
U 1261 ; WX 593 ; N uni04ED ; G 1154
U 1262 ; WX 771 ; N uni04EE ; G 1155
U 1263 ; WX 652 ; N uni04EF ; G 1156
U 1264 ; WX 771 ; N uni04F0 ; G 1157
U 1265 ; WX 652 ; N uni04F1 ; G 1158
U 1266 ; WX 771 ; N uni04F2 ; G 1159
U 1267 ; WX 652 ; N uni04F3 ; G 1160
U 1268 ; WX 808 ; N uni04F4 ; G 1161
U 1269 ; WX 687 ; N uni04F5 ; G 1162
U 1270 ; WX 637 ; N uni04F6 ; G 1163
U 1271 ; WX 522 ; N uni04F7 ; G 1164
U 1272 ; WX 1036 ; N uni04F8 ; G 1165
U 1273 ; WX 904 ; N uni04F9 ; G 1166
U 1274 ; WX 666 ; N uni04FA ; G 1167
U 1275 ; WX 543 ; N uni04FB ; G 1168
U 1276 ; WX 771 ; N uni04FC ; G 1169
U 1277 ; WX 645 ; N uni04FD ; G 1170
U 1278 ; WX 771 ; N uni04FE ; G 1171
U 1279 ; WX 645 ; N uni04FF ; G 1172
U 1280 ; WX 762 ; N uni0500 ; G 1173
U 1281 ; WX 608 ; N uni0501 ; G 1174
U 1282 ; WX 1159 ; N uni0502 ; G 1175
U 1283 ; WX 893 ; N uni0503 ; G 1176
U 1284 ; WX 1119 ; N uni0504 ; G 1177
U 1285 ; WX 920 ; N uni0505 ; G 1178
U 1286 ; WX 828 ; N uni0506 ; G 1179
U 1287 ; WX 693 ; N uni0507 ; G 1180
U 1288 ; WX 1242 ; N uni0508 ; G 1181
U 1289 ; WX 1017 ; N uni0509 ; G 1182
U 1290 ; WX 1289 ; N uni050A ; G 1183
U 1291 ; WX 1013 ; N uni050B ; G 1184
U 1292 ; WX 839 ; N uni050C ; G 1185
U 1293 ; WX 638 ; N uni050D ; G 1186
U 1294 ; WX 938 ; N uni050E ; G 1187
U 1295 ; WX 803 ; N uni050F ; G 1188
U 1296 ; WX 696 ; N uni0510 ; G 1189
U 1297 ; WX 557 ; N uni0511 ; G 1190
U 1298 ; WX 831 ; N uni0512 ; G 1191
U 1299 ; WX 732 ; N uni0513 ; G 1192
U 1300 ; WX 1286 ; N uni0514 ; G 1193
U 1301 ; WX 1068 ; N uni0515 ; G 1194
U 1302 ; WX 1065 ; N uni0516 ; G 1195
U 1303 ; WX 979 ; N uni0517 ; G 1196
U 1304 ; WX 1082 ; N uni0518 ; G 1197
U 1305 ; WX 1013 ; N uni0519 ; G 1198
U 1306 ; WX 850 ; N uni051A ; G 1199
U 1307 ; WX 716 ; N uni051B ; G 1200
U 1308 ; WX 1103 ; N uni051C ; G 1201
U 1309 ; WX 924 ; N uni051D ; G 1202
U 1310 ; WX 817 ; N uni051E ; G 1203
U 1311 ; WX 679 ; N uni051F ; G 1204
U 1312 ; WX 1267 ; N uni0520 ; G 1205
U 1313 ; WX 1059 ; N uni0521 ; G 1206
U 1314 ; WX 1273 ; N uni0522 ; G 1207
U 1315 ; WX 1017 ; N uni0523 ; G 1208
U 1316 ; WX 957 ; N uni0524 ; G 1209
U 1317 ; WX 807 ; N uni0525 ; G 1210
U 1329 ; WX 813 ; N uni0531 ; G 1211
U 1330 ; WX 729 ; N uni0532 ; G 1212
U 1331 ; WX 728 ; N uni0533 ; G 1213
U 1332 ; WX 731 ; N uni0534 ; G 1214
U 1333 ; WX 729 ; N uni0535 ; G 1215
U 1334 ; WX 733 ; N uni0536 ; G 1216
U 1335 ; WX 652 ; N uni0537 ; G 1217
U 1336 ; WX 720 ; N uni0538 ; G 1218
U 1337 ; WX 903 ; N uni0539 ; G 1219
U 1338 ; WX 728 ; N uni053A ; G 1220
U 1339 ; WX 666 ; N uni053B ; G 1221
U 1340 ; WX 558 ; N uni053C ; G 1222
U 1341 ; WX 961 ; N uni053D ; G 1223
U 1342 ; WX 788 ; N uni053E ; G 1224
U 1343 ; WX 713 ; N uni053F ; G 1225
U 1344 ; WX 651 ; N uni0540 ; G 1226
U 1345 ; WX 730 ; N uni0541 ; G 1227
U 1346 ; WX 715 ; N uni0542 ; G 1228
U 1347 ; WX 704 ; N uni0543 ; G 1229
U 1348 ; WX 780 ; N uni0544 ; G 1230
U 1349 ; WX 689 ; N uni0545 ; G 1231
U 1350 ; WX 715 ; N uni0546 ; G 1232
U 1351 ; WX 708 ; N uni0547 ; G 1233
U 1352 ; WX 731 ; N uni0548 ; G 1234
U 1353 ; WX 677 ; N uni0549 ; G 1235
U 1354 ; WX 867 ; N uni054A ; G 1236
U 1355 ; WX 711 ; N uni054B ; G 1237
U 1356 ; WX 780 ; N uni054C ; G 1238
U 1357 ; WX 731 ; N uni054D ; G 1239
U 1358 ; WX 715 ; N uni054E ; G 1240
U 1359 ; WX 693 ; N uni054F ; G 1241
U 1360 ; WX 666 ; N uni0550 ; G 1242
U 1361 ; WX 698 ; N uni0551 ; G 1243
U 1362 ; WX 576 ; N uni0552 ; G 1244
U 1363 ; WX 833 ; N uni0553 ; G 1245
U 1364 ; WX 698 ; N uni0554 ; G 1246
U 1365 ; WX 763 ; N uni0555 ; G 1247
U 1366 ; WX 855 ; N uni0556 ; G 1248
U 1369 ; WX 330 ; N uni0559 ; G 1249
U 1370 ; WX 342 ; N uni055A ; G 1250
U 1371 ; WX 308 ; N uni055B ; G 1251
U 1372 ; WX 374 ; N uni055C ; G 1252
U 1373 ; WX 313 ; N uni055D ; G 1253
U 1374 ; WX 461 ; N uni055E ; G 1254
U 1375 ; WX 468 ; N uni055F ; G 1255
U 1377 ; WX 938 ; N uni0561 ; G 1256
U 1378 ; WX 642 ; N uni0562 ; G 1257
U 1379 ; WX 704 ; N uni0563 ; G 1258
U 1380 ; WX 708 ; N uni0564 ; G 1259
U 1381 ; WX 642 ; N uni0565 ; G 1260
U 1382 ; WX 644 ; N uni0566 ; G 1261
U 1383 ; WX 565 ; N uni0567 ; G 1262
U 1384 ; WX 642 ; N uni0568 ; G 1263
U 1385 ; WX 756 ; N uni0569 ; G 1264
U 1386 ; WX 704 ; N uni056A ; G 1265
U 1387 ; WX 643 ; N uni056B ; G 1266
U 1388 ; WX 310 ; N uni056C ; G 1267
U 1389 ; WX 984 ; N uni056D ; G 1268
U 1390 ; WX 638 ; N uni056E ; G 1269
U 1391 ; WX 643 ; N uni056F ; G 1270
U 1392 ; WX 643 ; N uni0570 ; G 1271
U 1393 ; WX 603 ; N uni0571 ; G 1272
U 1394 ; WX 643 ; N uni0572 ; G 1273
U 1395 ; WX 642 ; N uni0573 ; G 1274
U 1396 ; WX 643 ; N uni0574 ; G 1275
U 1397 ; WX 309 ; N uni0575 ; G 1276
U 1398 ; WX 643 ; N uni0576 ; G 1277
U 1399 ; WX 486 ; N uni0577 ; G 1278
U 1400 ; WX 643 ; N uni0578 ; G 1279
U 1401 ; WX 366 ; N uni0579 ; G 1280
U 1402 ; WX 938 ; N uni057A ; G 1281
U 1403 ; WX 573 ; N uni057B ; G 1282
U 1404 ; WX 666 ; N uni057C ; G 1283
U 1405 ; WX 643 ; N uni057D ; G 1284
U 1406 ; WX 643 ; N uni057E ; G 1285
U 1407 ; WX 934 ; N uni057F ; G 1286
U 1408 ; WX 643 ; N uni0580 ; G 1287
U 1409 ; WX 643 ; N uni0581 ; G 1288
U 1410 ; WX 479 ; N uni0582 ; G 1289
U 1411 ; WX 934 ; N uni0583 ; G 1290
U 1412 ; WX 648 ; N uni0584 ; G 1291
U 1413 ; WX 620 ; N uni0585 ; G 1292
U 1414 ; WX 813 ; N uni0586 ; G 1293
U 1415 ; WX 812 ; N uni0587 ; G 1294
U 1417 ; WX 360 ; N uni0589 ; G 1295
U 1418 ; WX 374 ; N uni058A ; G 1296
U 1456 ; WX 0 ; N uni05B0 ; G 1297
U 1457 ; WX 0 ; N uni05B1 ; G 1298
U 1458 ; WX 0 ; N uni05B2 ; G 1299
U 1459 ; WX 0 ; N uni05B3 ; G 1300
U 1460 ; WX 0 ; N uni05B4 ; G 1301
U 1461 ; WX 0 ; N uni05B5 ; G 1302
U 1462 ; WX 0 ; N uni05B6 ; G 1303
U 1463 ; WX 0 ; N uni05B7 ; G 1304
U 1464 ; WX 0 ; N uni05B8 ; G 1305
U 1465 ; WX 0 ; N uni05B9 ; G 1306
U 1466 ; WX 0 ; N uni05BA ; G 1307
U 1467 ; WX 0 ; N uni05BB ; G 1308
U 1468 ; WX 0 ; N uni05BC ; G 1309
U 1469 ; WX 0 ; N uni05BD ; G 1310
U 1470 ; WX 415 ; N uni05BE ; G 1311
U 1471 ; WX 0 ; N uni05BF ; G 1312
U 1472 ; WX 372 ; N uni05C0 ; G 1313
U 1473 ; WX 0 ; N uni05C1 ; G 1314
U 1474 ; WX 0 ; N uni05C2 ; G 1315
U 1475 ; WX 372 ; N uni05C3 ; G 1316
U 1478 ; WX 497 ; N uni05C6 ; G 1317
U 1479 ; WX 0 ; N uni05C7 ; G 1318
U 1488 ; WX 728 ; N uni05D0 ; G 1319
U 1489 ; WX 610 ; N uni05D1 ; G 1320
U 1490 ; WX 447 ; N uni05D2 ; G 1321
U 1491 ; WX 588 ; N uni05D3 ; G 1322
U 1492 ; WX 687 ; N uni05D4 ; G 1323
U 1493 ; WX 343 ; N uni05D5 ; G 1324
U 1494 ; WX 400 ; N uni05D6 ; G 1325
U 1495 ; WX 687 ; N uni05D7 ; G 1326
U 1496 ; WX 679 ; N uni05D8 ; G 1327
U 1497 ; WX 294 ; N uni05D9 ; G 1328
U 1498 ; WX 578 ; N uni05DA ; G 1329
U 1499 ; WX 566 ; N uni05DB ; G 1330
U 1500 ; WX 605 ; N uni05DC ; G 1331
U 1501 ; WX 696 ; N uni05DD ; G 1332
U 1502 ; WX 724 ; N uni05DE ; G 1333
U 1503 ; WX 343 ; N uni05DF ; G 1334
U 1504 ; WX 453 ; N uni05E0 ; G 1335
U 1505 ; WX 680 ; N uni05E1 ; G 1336
U 1506 ; WX 666 ; N uni05E2 ; G 1337
U 1507 ; WX 675 ; N uni05E3 ; G 1338
U 1508 ; WX 658 ; N uni05E4 ; G 1339
U 1509 ; WX 661 ; N uni05E5 ; G 1340
U 1510 ; WX 653 ; N uni05E6 ; G 1341
U 1511 ; WX 736 ; N uni05E7 ; G 1342
U 1512 ; WX 602 ; N uni05E8 ; G 1343
U 1513 ; WX 758 ; N uni05E9 ; G 1344
U 1514 ; WX 683 ; N uni05EA ; G 1345
U 1520 ; WX 664 ; N uni05F0 ; G 1346
U 1521 ; WX 567 ; N uni05F1 ; G 1347
U 1522 ; WX 519 ; N uni05F2 ; G 1348
U 1523 ; WX 444 ; N uni05F3 ; G 1349
U 1524 ; WX 710 ; N uni05F4 ; G 1350
U 1542 ; WX 667 ; N uni0606 ; G 1351
U 1543 ; WX 667 ; N uni0607 ; G 1352
U 1545 ; WX 884 ; N uni0609 ; G 1353
U 1546 ; WX 1157 ; N uni060A ; G 1354
U 1548 ; WX 380 ; N uni060C ; G 1355
U 1557 ; WX 0 ; N uni0615 ; G 1356
U 1563 ; WX 400 ; N uni061B ; G 1357
U 1567 ; WX 580 ; N uni061F ; G 1358
U 1569 ; WX 511 ; N uni0621 ; G 1359
U 1570 ; WX 343 ; N uni0622 ; G 1360
U 1571 ; WX 343 ; N uni0623 ; G 1361
U 1572 ; WX 622 ; N uni0624 ; G 1362
U 1573 ; WX 343 ; N uni0625 ; G 1363
U 1574 ; WX 917 ; N uni0626 ; G 1364
U 1575 ; WX 343 ; N uni0627 ; G 1365
U 1576 ; WX 1005 ; N uni0628 ; G 1366
U 1577 ; WX 590 ; N uni0629 ; G 1367
U 1578 ; WX 1005 ; N uni062A ; G 1368
U 1579 ; WX 1005 ; N uni062B ; G 1369
U 1580 ; WX 721 ; N uni062C ; G 1370
U 1581 ; WX 721 ; N uni062D ; G 1371
U 1582 ; WX 721 ; N uni062E ; G 1372
U 1583 ; WX 513 ; N uni062F ; G 1373
U 1584 ; WX 513 ; N uni0630 ; G 1374
U 1585 ; WX 576 ; N uni0631 ; G 1375
U 1586 ; WX 576 ; N uni0632 ; G 1376
U 1587 ; WX 1380 ; N uni0633 ; G 1377
U 1588 ; WX 1380 ; N uni0634 ; G 1378
U 1589 ; WX 1345 ; N uni0635 ; G 1379
U 1590 ; WX 1345 ; N uni0636 ; G 1380
U 1591 ; WX 1039 ; N uni0637 ; G 1381
U 1592 ; WX 1039 ; N uni0638 ; G 1382
U 1593 ; WX 683 ; N uni0639 ; G 1383
U 1594 ; WX 683 ; N uni063A ; G 1384
U 1600 ; WX 342 ; N uni0640 ; G 1385
U 1601 ; WX 1162 ; N uni0641 ; G 1386
U 1602 ; WX 894 ; N uni0642 ; G 1387
U 1603 ; WX 917 ; N uni0643 ; G 1388
U 1604 ; WX 868 ; N uni0644 ; G 1389
U 1605 ; WX 733 ; N uni0645 ; G 1390
U 1606 ; WX 854 ; N uni0646 ; G 1391
U 1607 ; WX 590 ; N uni0647 ; G 1392
U 1608 ; WX 622 ; N uni0648 ; G 1393
U 1609 ; WX 917 ; N uni0649 ; G 1394
U 1610 ; WX 917 ; N uni064A ; G 1395
U 1611 ; WX 0 ; N uni064B ; G 1396
U 1612 ; WX 0 ; N uni064C ; G 1397
U 1613 ; WX 0 ; N uni064D ; G 1398
U 1614 ; WX 0 ; N uni064E ; G 1399
U 1615 ; WX 0 ; N uni064F ; G 1400
U 1616 ; WX 0 ; N uni0650 ; G 1401
U 1617 ; WX 0 ; N uni0651 ; G 1402
U 1618 ; WX 0 ; N uni0652 ; G 1403
U 1619 ; WX 0 ; N uni0653 ; G 1404
U 1620 ; WX 0 ; N uni0654 ; G 1405
U 1621 ; WX 0 ; N uni0655 ; G 1406
U 1623 ; WX 0 ; N uni0657 ; G 1407
U 1626 ; WX 500 ; N uni065A ; G 1408
U 1632 ; WX 610 ; N uni0660 ; G 1409
U 1633 ; WX 610 ; N uni0661 ; G 1410
U 1634 ; WX 610 ; N uni0662 ; G 1411
U 1635 ; WX 610 ; N uni0663 ; G 1412
U 1636 ; WX 610 ; N uni0664 ; G 1413
U 1637 ; WX 610 ; N uni0665 ; G 1414
U 1638 ; WX 610 ; N uni0666 ; G 1415
U 1639 ; WX 610 ; N uni0667 ; G 1416
U 1640 ; WX 610 ; N uni0668 ; G 1417
U 1641 ; WX 610 ; N uni0669 ; G 1418
U 1642 ; WX 610 ; N uni066A ; G 1419
U 1643 ; WX 374 ; N uni066B ; G 1420
U 1644 ; WX 380 ; N uni066C ; G 1421
U 1645 ; WX 545 ; N uni066D ; G 1422
U 1646 ; WX 1005 ; N uni066E ; G 1423
U 1647 ; WX 894 ; N uni066F ; G 1424
U 1648 ; WX 0 ; N uni0670 ; G 1425
U 1652 ; WX 292 ; N uni0674 ; G 1426
U 1657 ; WX 1005 ; N uni0679 ; G 1427
U 1658 ; WX 1005 ; N uni067A ; G 1428
U 1659 ; WX 1005 ; N uni067B ; G 1429
U 1660 ; WX 1005 ; N uni067C ; G 1430
U 1661 ; WX 1005 ; N uni067D ; G 1431
U 1662 ; WX 1005 ; N uni067E ; G 1432
U 1663 ; WX 1005 ; N uni067F ; G 1433
U 1664 ; WX 1005 ; N uni0680 ; G 1434
U 1665 ; WX 721 ; N uni0681 ; G 1435
U 1666 ; WX 721 ; N uni0682 ; G 1436
U 1667 ; WX 721 ; N uni0683 ; G 1437
U 1668 ; WX 721 ; N uni0684 ; G 1438
U 1669 ; WX 721 ; N uni0685 ; G 1439
U 1670 ; WX 721 ; N uni0686 ; G 1440
U 1671 ; WX 721 ; N uni0687 ; G 1441
U 1672 ; WX 445 ; N uni0688 ; G 1442
U 1673 ; WX 445 ; N uni0689 ; G 1443
U 1674 ; WX 445 ; N uni068A ; G 1444
U 1675 ; WX 445 ; N uni068B ; G 1445
U 1676 ; WX 445 ; N uni068C ; G 1446
U 1677 ; WX 445 ; N uni068D ; G 1447
U 1678 ; WX 445 ; N uni068E ; G 1448
U 1679 ; WX 445 ; N uni068F ; G 1449
U 1680 ; WX 445 ; N uni0690 ; G 1450
U 1681 ; WX 576 ; N uni0691 ; G 1451
U 1682 ; WX 576 ; N uni0692 ; G 1452
U 1683 ; WX 576 ; N uni0693 ; G 1453
U 1684 ; WX 576 ; N uni0694 ; G 1454
U 1685 ; WX 681 ; N uni0695 ; G 1455
U 1686 ; WX 576 ; N uni0696 ; G 1456
U 1687 ; WX 576 ; N uni0697 ; G 1457
U 1688 ; WX 576 ; N uni0698 ; G 1458
U 1689 ; WX 576 ; N uni0699 ; G 1459
U 1690 ; WX 1380 ; N uni069A ; G 1460
U 1691 ; WX 1380 ; N uni069B ; G 1461
U 1692 ; WX 1380 ; N uni069C ; G 1462
U 1693 ; WX 1345 ; N uni069D ; G 1463
U 1694 ; WX 1345 ; N uni069E ; G 1464
U 1695 ; WX 1039 ; N uni069F ; G 1465
U 1696 ; WX 683 ; N uni06A0 ; G 1466
U 1697 ; WX 1162 ; N uni06A1 ; G 1467
U 1698 ; WX 1162 ; N uni06A2 ; G 1468
U 1699 ; WX 1162 ; N uni06A3 ; G 1469
U 1700 ; WX 1162 ; N uni06A4 ; G 1470
U 1701 ; WX 1162 ; N uni06A5 ; G 1471
U 1702 ; WX 1162 ; N uni06A6 ; G 1472
U 1703 ; WX 894 ; N uni06A7 ; G 1473
U 1704 ; WX 894 ; N uni06A8 ; G 1474
U 1705 ; WX 1024 ; N uni06A9 ; G 1475
U 1706 ; WX 1271 ; N uni06AA ; G 1476
U 1707 ; WX 1024 ; N uni06AB ; G 1477
U 1708 ; WX 917 ; N uni06AC ; G 1478
U 1709 ; WX 917 ; N uni06AD ; G 1479
U 1710 ; WX 917 ; N uni06AE ; G 1480
U 1711 ; WX 1024 ; N uni06AF ; G 1481
U 1712 ; WX 1024 ; N uni06B0 ; G 1482
U 1713 ; WX 1024 ; N uni06B1 ; G 1483
U 1714 ; WX 1024 ; N uni06B2 ; G 1484
U 1715 ; WX 1024 ; N uni06B3 ; G 1485
U 1716 ; WX 1024 ; N uni06B4 ; G 1486
U 1717 ; WX 868 ; N uni06B5 ; G 1487
U 1718 ; WX 868 ; N uni06B6 ; G 1488
U 1719 ; WX 868 ; N uni06B7 ; G 1489
U 1720 ; WX 868 ; N uni06B8 ; G 1490
U 1721 ; WX 854 ; N uni06B9 ; G 1491
U 1722 ; WX 854 ; N uni06BA ; G 1492
U 1723 ; WX 854 ; N uni06BB ; G 1493
U 1724 ; WX 854 ; N uni06BC ; G 1494
U 1725 ; WX 854 ; N uni06BD ; G 1495
U 1726 ; WX 938 ; N uni06BE ; G 1496
U 1727 ; WX 721 ; N uni06BF ; G 1497
U 1734 ; WX 622 ; N uni06C6 ; G 1498
U 1735 ; WX 622 ; N uni06C7 ; G 1499
U 1736 ; WX 622 ; N uni06C8 ; G 1500
U 1739 ; WX 622 ; N uni06CB ; G 1501
U 1740 ; WX 917 ; N uni06CC ; G 1502
U 1742 ; WX 917 ; N uni06CE ; G 1503
U 1744 ; WX 917 ; N uni06D0 ; G 1504
U 1749 ; WX 590 ; N uni06D5 ; G 1505
U 1776 ; WX 610 ; N uni06F0 ; G 1506
U 1777 ; WX 610 ; N uni06F1 ; G 1507
U 1778 ; WX 610 ; N uni06F2 ; G 1508
U 1779 ; WX 610 ; N uni06F3 ; G 1509
U 1780 ; WX 610 ; N uni06F4 ; G 1510
U 1781 ; WX 610 ; N uni06F5 ; G 1511
U 1782 ; WX 610 ; N uni06F6 ; G 1512
U 1783 ; WX 610 ; N uni06F7 ; G 1513
U 1784 ; WX 610 ; N uni06F8 ; G 1514
U 1785 ; WX 610 ; N uni06F9 ; G 1515
U 1984 ; WX 696 ; N uni07C0 ; G 1516
U 1985 ; WX 696 ; N uni07C1 ; G 1517
U 1986 ; WX 696 ; N uni07C2 ; G 1518
U 1987 ; WX 696 ; N uni07C3 ; G 1519
U 1988 ; WX 696 ; N uni07C4 ; G 1520
U 1989 ; WX 696 ; N uni07C5 ; G 1521
U 1990 ; WX 696 ; N uni07C6 ; G 1522
U 1991 ; WX 696 ; N uni07C7 ; G 1523
U 1992 ; WX 696 ; N uni07C8 ; G 1524
U 1993 ; WX 696 ; N uni07C9 ; G 1525
U 1994 ; WX 343 ; N uni07CA ; G 1526
U 1995 ; WX 547 ; N uni07CB ; G 1527
U 1996 ; WX 543 ; N uni07CC ; G 1528
U 1997 ; WX 652 ; N uni07CD ; G 1529
U 1998 ; WX 691 ; N uni07CE ; G 1530
U 1999 ; WX 691 ; N uni07CF ; G 1531
U 2000 ; WX 594 ; N uni07D0 ; G 1532
U 2001 ; WX 691 ; N uni07D1 ; G 1533
U 2002 ; WX 904 ; N uni07D2 ; G 1534
U 2003 ; WX 551 ; N uni07D3 ; G 1535
U 2004 ; WX 551 ; N uni07D4 ; G 1536
U 2005 ; WX 627 ; N uni07D5 ; G 1537
U 2006 ; WX 688 ; N uni07D6 ; G 1538
U 2007 ; WX 444 ; N uni07D7 ; G 1539
U 2008 ; WX 1022 ; N uni07D8 ; G 1540
U 2009 ; WX 506 ; N uni07D9 ; G 1541
U 2010 ; WX 826 ; N uni07DA ; G 1542
U 2011 ; WX 691 ; N uni07DB ; G 1543
U 2012 ; WX 652 ; N uni07DC ; G 1544
U 2013 ; WX 912 ; N uni07DD ; G 1545
U 2014 ; WX 627 ; N uni07DE ; G 1546
U 2015 ; WX 707 ; N uni07DF ; G 1547
U 2016 ; WX 506 ; N uni07E0 ; G 1548
U 2017 ; WX 652 ; N uni07E1 ; G 1549
U 2018 ; WX 574 ; N uni07E2 ; G 1550
U 2019 ; WX 627 ; N uni07E3 ; G 1551
U 2020 ; WX 627 ; N uni07E4 ; G 1552
U 2021 ; WX 627 ; N uni07E5 ; G 1553
U 2022 ; WX 574 ; N uni07E6 ; G 1554
U 2023 ; WX 574 ; N uni07E7 ; G 1555
U 2027 ; WX 0 ; N uni07EB ; G 1556
U 2028 ; WX 0 ; N uni07EC ; G 1557
U 2029 ; WX 0 ; N uni07ED ; G 1558
U 2030 ; WX 0 ; N uni07EE ; G 1559
U 2031 ; WX 0 ; N uni07EF ; G 1560
U 2032 ; WX 0 ; N uni07F0 ; G 1561
U 2033 ; WX 0 ; N uni07F1 ; G 1562
U 2034 ; WX 0 ; N uni07F2 ; G 1563
U 2035 ; WX 0 ; N uni07F3 ; G 1564
U 2036 ; WX 380 ; N uni07F4 ; G 1565
U 2037 ; WX 380 ; N uni07F5 ; G 1566
U 2040 ; WX 691 ; N uni07F8 ; G 1567
U 2041 ; WX 691 ; N uni07F9 ; G 1568
U 2042 ; WX 415 ; N uni07FA ; G 1569
U 3647 ; WX 696 ; N uni0E3F ; G 1570
U 3713 ; WX 790 ; N uni0E81 ; G 1571
U 3714 ; WX 748 ; N uni0E82 ; G 1572
U 3716 ; WX 749 ; N uni0E84 ; G 1573
U 3719 ; WX 569 ; N uni0E87 ; G 1574
U 3720 ; WX 742 ; N uni0E88 ; G 1575
U 3722 ; WX 744 ; N uni0E8A ; G 1576
U 3725 ; WX 761 ; N uni0E8D ; G 1577
U 3732 ; WX 706 ; N uni0E94 ; G 1578
U 3733 ; WX 704 ; N uni0E95 ; G 1579
U 3734 ; WX 747 ; N uni0E96 ; G 1580
U 3735 ; WX 819 ; N uni0E97 ; G 1581
U 3737 ; WX 730 ; N uni0E99 ; G 1582
U 3738 ; WX 727 ; N uni0E9A ; G 1583
U 3739 ; WX 727 ; N uni0E9B ; G 1584
U 3740 ; WX 922 ; N uni0E9C ; G 1585
U 3741 ; WX 827 ; N uni0E9D ; G 1586
U 3742 ; WX 866 ; N uni0E9E ; G 1587
U 3743 ; WX 866 ; N uni0E9F ; G 1588
U 3745 ; WX 836 ; N uni0EA1 ; G 1589
U 3746 ; WX 761 ; N uni0EA2 ; G 1590
U 3747 ; WX 770 ; N uni0EA3 ; G 1591
U 3749 ; WX 769 ; N uni0EA5 ; G 1592
U 3751 ; WX 713 ; N uni0EA7 ; G 1593
U 3754 ; WX 827 ; N uni0EAA ; G 1594
U 3755 ; WX 1031 ; N uni0EAB ; G 1595
U 3757 ; WX 724 ; N uni0EAD ; G 1596
U 3758 ; WX 784 ; N uni0EAE ; G 1597
U 3759 ; WX 934 ; N uni0EAF ; G 1598
U 3760 ; WX 688 ; N uni0EB0 ; G 1599
U 3761 ; WX 0 ; N uni0EB1 ; G 1600
U 3762 ; WX 610 ; N uni0EB2 ; G 1601
U 3763 ; WX 610 ; N uni0EB3 ; G 1602
U 3764 ; WX 0 ; N uni0EB4 ; G 1603
U 3765 ; WX 0 ; N uni0EB5 ; G 1604
U 3766 ; WX 0 ; N uni0EB6 ; G 1605
U 3767 ; WX 0 ; N uni0EB7 ; G 1606
U 3768 ; WX 0 ; N uni0EB8 ; G 1607
U 3769 ; WX 0 ; N uni0EB9 ; G 1608
U 3771 ; WX 0 ; N uni0EBB ; G 1609
U 3772 ; WX 0 ; N uni0EBC ; G 1610
U 3773 ; WX 670 ; N uni0EBD ; G 1611
U 3776 ; WX 516 ; N uni0EC0 ; G 1612
U 3777 ; WX 860 ; N uni0EC1 ; G 1613
U 3778 ; WX 516 ; N uni0EC2 ; G 1614
U 3779 ; WX 650 ; N uni0EC3 ; G 1615
U 3780 ; WX 632 ; N uni0EC4 ; G 1616
U 3782 ; WX 759 ; N uni0EC6 ; G 1617
U 3784 ; WX 0 ; N uni0EC8 ; G 1618
U 3785 ; WX 0 ; N uni0EC9 ; G 1619
U 3786 ; WX 0 ; N uni0ECA ; G 1620
U 3787 ; WX 0 ; N uni0ECB ; G 1621
U 3788 ; WX 0 ; N uni0ECC ; G 1622
U 3789 ; WX 0 ; N uni0ECD ; G 1623
U 3792 ; WX 771 ; N uni0ED0 ; G 1624
U 3793 ; WX 771 ; N uni0ED1 ; G 1625
U 3794 ; WX 693 ; N uni0ED2 ; G 1626
U 3795 ; WX 836 ; N uni0ED3 ; G 1627
U 3796 ; WX 729 ; N uni0ED4 ; G 1628
U 3797 ; WX 729 ; N uni0ED5 ; G 1629
U 3798 ; WX 849 ; N uni0ED6 ; G 1630
U 3799 ; WX 790 ; N uni0ED7 ; G 1631
U 3800 ; WX 759 ; N uni0ED8 ; G 1632
U 3801 ; WX 910 ; N uni0ED9 ; G 1633
U 3804 ; WX 1363 ; N uni0EDC ; G 1634
U 3805 ; WX 1363 ; N uni0EDD ; G 1635
U 4256 ; WX 874 ; N uni10A0 ; G 1636
U 4257 ; WX 733 ; N uni10A1 ; G 1637
U 4258 ; WX 679 ; N uni10A2 ; G 1638
U 4259 ; WX 834 ; N uni10A3 ; G 1639
U 4260 ; WX 615 ; N uni10A4 ; G 1640
U 4261 ; WX 768 ; N uni10A5 ; G 1641
U 4262 ; WX 753 ; N uni10A6 ; G 1642
U 4263 ; WX 914 ; N uni10A7 ; G 1643
U 4264 ; WX 453 ; N uni10A8 ; G 1644
U 4265 ; WX 620 ; N uni10A9 ; G 1645
U 4266 ; WX 843 ; N uni10AA ; G 1646
U 4267 ; WX 882 ; N uni10AB ; G 1647
U 4268 ; WX 625 ; N uni10AC ; G 1648
U 4269 ; WX 854 ; N uni10AD ; G 1649
U 4270 ; WX 781 ; N uni10AE ; G 1650
U 4271 ; WX 629 ; N uni10AF ; G 1651
U 4272 ; WX 912 ; N uni10B0 ; G 1652
U 4273 ; WX 621 ; N uni10B1 ; G 1653
U 4274 ; WX 620 ; N uni10B2 ; G 1654
U 4275 ; WX 854 ; N uni10B3 ; G 1655
U 4276 ; WX 866 ; N uni10B4 ; G 1656
U 4277 ; WX 724 ; N uni10B5 ; G 1657
U 4278 ; WX 630 ; N uni10B6 ; G 1658
U 4279 ; WX 621 ; N uni10B7 ; G 1659
U 4280 ; WX 625 ; N uni10B8 ; G 1660
U 4281 ; WX 620 ; N uni10B9 ; G 1661
U 4282 ; WX 818 ; N uni10BA ; G 1662
U 4283 ; WX 874 ; N uni10BB ; G 1663
U 4284 ; WX 615 ; N uni10BC ; G 1664
U 4285 ; WX 623 ; N uni10BD ; G 1665
U 4286 ; WX 625 ; N uni10BE ; G 1666
U 4287 ; WX 725 ; N uni10BF ; G 1667
U 4288 ; WX 844 ; N uni10C0 ; G 1668
U 4289 ; WX 596 ; N uni10C1 ; G 1669
U 4290 ; WX 688 ; N uni10C2 ; G 1670
U 4291 ; WX 596 ; N uni10C3 ; G 1671
U 4292 ; WX 594 ; N uni10C4 ; G 1672
U 4293 ; WX 738 ; N uni10C5 ; G 1673
U 4304 ; WX 554 ; N uni10D0 ; G 1674
U 4305 ; WX 563 ; N uni10D1 ; G 1675
U 4306 ; WX 622 ; N uni10D2 ; G 1676
U 4307 ; WX 834 ; N uni10D3 ; G 1677
U 4308 ; WX 555 ; N uni10D4 ; G 1678
U 4309 ; WX 564 ; N uni10D5 ; G 1679
U 4310 ; WX 551 ; N uni10D6 ; G 1680
U 4311 ; WX 828 ; N uni10D7 ; G 1681
U 4312 ; WX 563 ; N uni10D8 ; G 1682
U 4313 ; WX 556 ; N uni10D9 ; G 1683
U 4314 ; WX 1074 ; N uni10DA ; G 1684
U 4315 ; WX 568 ; N uni10DB ; G 1685
U 4316 ; WX 568 ; N uni10DC ; G 1686
U 4317 ; WX 814 ; N uni10DD ; G 1687
U 4318 ; WX 554 ; N uni10DE ; G 1688
U 4319 ; WX 563 ; N uni10DF ; G 1689
U 4320 ; WX 823 ; N uni10E0 ; G 1690
U 4321 ; WX 568 ; N uni10E1 ; G 1691
U 4322 ; WX 700 ; N uni10E2 ; G 1692
U 4323 ; WX 591 ; N uni10E3 ; G 1693
U 4324 ; WX 852 ; N uni10E4 ; G 1694
U 4325 ; WX 560 ; N uni10E5 ; G 1695
U 4326 ; WX 814 ; N uni10E6 ; G 1696
U 4327 ; WX 563 ; N uni10E7 ; G 1697
U 4328 ; WX 553 ; N uni10E8 ; G 1698
U 4329 ; WX 568 ; N uni10E9 ; G 1699
U 4330 ; WX 622 ; N uni10EA ; G 1700
U 4331 ; WX 568 ; N uni10EB ; G 1701
U 4332 ; WX 553 ; N uni10EC ; G 1702
U 4333 ; WX 566 ; N uni10ED ; G 1703
U 4334 ; WX 568 ; N uni10EE ; G 1704
U 4335 ; WX 540 ; N uni10EF ; G 1705
U 4336 ; WX 554 ; N uni10F0 ; G 1706
U 4337 ; WX 559 ; N uni10F1 ; G 1707
U 4338 ; WX 553 ; N uni10F2 ; G 1708
U 4339 ; WX 554 ; N uni10F3 ; G 1709
U 4340 ; WX 553 ; N uni10F4 ; G 1710
U 4341 ; WX 587 ; N uni10F5 ; G 1711
U 4342 ; WX 853 ; N uni10F6 ; G 1712
U 4343 ; WX 604 ; N uni10F7 ; G 1713
U 4344 ; WX 563 ; N uni10F8 ; G 1714
U 4345 ; WX 622 ; N uni10F9 ; G 1715
U 4346 ; WX 554 ; N uni10FA ; G 1716
U 4347 ; WX 448 ; N uni10FB ; G 1717
U 4348 ; WX 324 ; N uni10FC ; G 1718
U 5121 ; WX 774 ; N uni1401 ; G 1719
U 5122 ; WX 774 ; N uni1402 ; G 1720
U 5123 ; WX 774 ; N uni1403 ; G 1721
U 5124 ; WX 774 ; N uni1404 ; G 1722
U 5125 ; WX 905 ; N uni1405 ; G 1723
U 5126 ; WX 905 ; N uni1406 ; G 1724
U 5127 ; WX 905 ; N uni1407 ; G 1725
U 5129 ; WX 905 ; N uni1409 ; G 1726
U 5130 ; WX 905 ; N uni140A ; G 1727
U 5131 ; WX 905 ; N uni140B ; G 1728
U 5132 ; WX 1018 ; N uni140C ; G 1729
U 5133 ; WX 1009 ; N uni140D ; G 1730
U 5134 ; WX 1018 ; N uni140E ; G 1731
U 5135 ; WX 1009 ; N uni140F ; G 1732
U 5136 ; WX 1018 ; N uni1410 ; G 1733
U 5137 ; WX 1009 ; N uni1411 ; G 1734
U 5138 ; WX 1149 ; N uni1412 ; G 1735
U 5139 ; WX 1140 ; N uni1413 ; G 1736
U 5140 ; WX 1149 ; N uni1414 ; G 1737
U 5141 ; WX 1140 ; N uni1415 ; G 1738
U 5142 ; WX 905 ; N uni1416 ; G 1739
U 5143 ; WX 1149 ; N uni1417 ; G 1740
U 5144 ; WX 1142 ; N uni1418 ; G 1741
U 5145 ; WX 1149 ; N uni1419 ; G 1742
U 5146 ; WX 1142 ; N uni141A ; G 1743
U 5147 ; WX 905 ; N uni141B ; G 1744
U 5149 ; WX 310 ; N uni141D ; G 1745
U 5150 ; WX 529 ; N uni141E ; G 1746
U 5151 ; WX 425 ; N uni141F ; G 1747
U 5152 ; WX 425 ; N uni1420 ; G 1748
U 5153 ; WX 395 ; N uni1421 ; G 1749
U 5154 ; WX 395 ; N uni1422 ; G 1750
U 5155 ; WX 395 ; N uni1423 ; G 1751
U 5156 ; WX 395 ; N uni1424 ; G 1752
U 5157 ; WX 564 ; N uni1425 ; G 1753
U 5158 ; WX 470 ; N uni1426 ; G 1754
U 5159 ; WX 310 ; N uni1427 ; G 1755
U 5160 ; WX 395 ; N uni1428 ; G 1756
U 5161 ; WX 395 ; N uni1429 ; G 1757
U 5162 ; WX 395 ; N uni142A ; G 1758
U 5163 ; WX 1213 ; N uni142B ; G 1759
U 5164 ; WX 986 ; N uni142C ; G 1760
U 5165 ; WX 1216 ; N uni142D ; G 1761
U 5166 ; WX 1297 ; N uni142E ; G 1762
U 5167 ; WX 774 ; N uni142F ; G 1763
U 5168 ; WX 774 ; N uni1430 ; G 1764
U 5169 ; WX 774 ; N uni1431 ; G 1765
U 5170 ; WX 774 ; N uni1432 ; G 1766
U 5171 ; WX 886 ; N uni1433 ; G 1767
U 5172 ; WX 886 ; N uni1434 ; G 1768
U 5173 ; WX 886 ; N uni1435 ; G 1769
U 5175 ; WX 886 ; N uni1437 ; G 1770
U 5176 ; WX 886 ; N uni1438 ; G 1771
U 5177 ; WX 886 ; N uni1439 ; G 1772
U 5178 ; WX 1018 ; N uni143A ; G 1773
U 5179 ; WX 1009 ; N uni143B ; G 1774
U 5180 ; WX 1018 ; N uni143C ; G 1775
U 5181 ; WX 1009 ; N uni143D ; G 1776
U 5182 ; WX 1018 ; N uni143E ; G 1777
U 5183 ; WX 1009 ; N uni143F ; G 1778
U 5184 ; WX 1149 ; N uni1440 ; G 1779
U 5185 ; WX 1140 ; N uni1441 ; G 1780
U 5186 ; WX 1149 ; N uni1442 ; G 1781
U 5187 ; WX 1140 ; N uni1443 ; G 1782
U 5188 ; WX 1149 ; N uni1444 ; G 1783
U 5189 ; WX 1142 ; N uni1445 ; G 1784
U 5190 ; WX 1149 ; N uni1446 ; G 1785
U 5191 ; WX 1142 ; N uni1447 ; G 1786
U 5192 ; WX 886 ; N uni1448 ; G 1787
U 5193 ; WX 576 ; N uni1449 ; G 1788
U 5194 ; WX 229 ; N uni144A ; G 1789
U 5196 ; WX 812 ; N uni144C ; G 1790
U 5197 ; WX 812 ; N uni144D ; G 1791
U 5198 ; WX 812 ; N uni144E ; G 1792
U 5199 ; WX 812 ; N uni144F ; G 1793
U 5200 ; WX 815 ; N uni1450 ; G 1794
U 5201 ; WX 815 ; N uni1451 ; G 1795
U 5202 ; WX 815 ; N uni1452 ; G 1796
U 5204 ; WX 815 ; N uni1454 ; G 1797
U 5205 ; WX 815 ; N uni1455 ; G 1798
U 5206 ; WX 815 ; N uni1456 ; G 1799
U 5207 ; WX 1056 ; N uni1457 ; G 1800
U 5208 ; WX 1048 ; N uni1458 ; G 1801
U 5209 ; WX 1056 ; N uni1459 ; G 1802
U 5210 ; WX 1048 ; N uni145A ; G 1803
U 5211 ; WX 1056 ; N uni145B ; G 1804
U 5212 ; WX 1048 ; N uni145C ; G 1805
U 5213 ; WX 1060 ; N uni145D ; G 1806
U 5214 ; WX 1054 ; N uni145E ; G 1807
U 5215 ; WX 1060 ; N uni145F ; G 1808
U 5216 ; WX 1054 ; N uni1460 ; G 1809
U 5217 ; WX 1060 ; N uni1461 ; G 1810
U 5218 ; WX 1052 ; N uni1462 ; G 1811
U 5219 ; WX 1060 ; N uni1463 ; G 1812
U 5220 ; WX 1052 ; N uni1464 ; G 1813
U 5221 ; WX 1060 ; N uni1465 ; G 1814
U 5222 ; WX 483 ; N uni1466 ; G 1815
U 5223 ; WX 1005 ; N uni1467 ; G 1816
U 5224 ; WX 1005 ; N uni1468 ; G 1817
U 5225 ; WX 1023 ; N uni1469 ; G 1818
U 5226 ; WX 1017 ; N uni146A ; G 1819
U 5227 ; WX 743 ; N uni146B ; G 1820
U 5228 ; WX 743 ; N uni146C ; G 1821
U 5229 ; WX 743 ; N uni146D ; G 1822
U 5230 ; WX 743 ; N uni146E ; G 1823
U 5231 ; WX 743 ; N uni146F ; G 1824
U 5232 ; WX 743 ; N uni1470 ; G 1825
U 5233 ; WX 743 ; N uni1471 ; G 1826
U 5234 ; WX 743 ; N uni1472 ; G 1827
U 5235 ; WX 743 ; N uni1473 ; G 1828
U 5236 ; WX 1029 ; N uni1474 ; G 1829
U 5237 ; WX 975 ; N uni1475 ; G 1830
U 5238 ; WX 980 ; N uni1476 ; G 1831
U 5239 ; WX 975 ; N uni1477 ; G 1832
U 5240 ; WX 980 ; N uni1478 ; G 1833
U 5241 ; WX 975 ; N uni1479 ; G 1834
U 5242 ; WX 1029 ; N uni147A ; G 1835
U 5243 ; WX 975 ; N uni147B ; G 1836
U 5244 ; WX 1029 ; N uni147C ; G 1837
U 5245 ; WX 975 ; N uni147D ; G 1838
U 5246 ; WX 980 ; N uni147E ; G 1839
U 5247 ; WX 975 ; N uni147F ; G 1840
U 5248 ; WX 980 ; N uni1480 ; G 1841
U 5249 ; WX 975 ; N uni1481 ; G 1842
U 5250 ; WX 980 ; N uni1482 ; G 1843
U 5251 ; WX 501 ; N uni1483 ; G 1844
U 5252 ; WX 501 ; N uni1484 ; G 1845
U 5253 ; WX 938 ; N uni1485 ; G 1846
U 5254 ; WX 938 ; N uni1486 ; G 1847
U 5255 ; WX 938 ; N uni1487 ; G 1848
U 5256 ; WX 938 ; N uni1488 ; G 1849
U 5257 ; WX 743 ; N uni1489 ; G 1850
U 5258 ; WX 743 ; N uni148A ; G 1851
U 5259 ; WX 743 ; N uni148B ; G 1852
U 5260 ; WX 743 ; N uni148C ; G 1853
U 5261 ; WX 743 ; N uni148D ; G 1854
U 5262 ; WX 743 ; N uni148E ; G 1855
U 5263 ; WX 743 ; N uni148F ; G 1856
U 5264 ; WX 743 ; N uni1490 ; G 1857
U 5265 ; WX 743 ; N uni1491 ; G 1858
U 5266 ; WX 1029 ; N uni1492 ; G 1859
U 5267 ; WX 975 ; N uni1493 ; G 1860
U 5268 ; WX 1029 ; N uni1494 ; G 1861
U 5269 ; WX 975 ; N uni1495 ; G 1862
U 5270 ; WX 1029 ; N uni1496 ; G 1863
U 5271 ; WX 975 ; N uni1497 ; G 1864
U 5272 ; WX 1029 ; N uni1498 ; G 1865
U 5273 ; WX 975 ; N uni1499 ; G 1866
U 5274 ; WX 1029 ; N uni149A ; G 1867
U 5275 ; WX 975 ; N uni149B ; G 1868
U 5276 ; WX 1029 ; N uni149C ; G 1869
U 5277 ; WX 975 ; N uni149D ; G 1870
U 5278 ; WX 1029 ; N uni149E ; G 1871
U 5279 ; WX 975 ; N uni149F ; G 1872
U 5280 ; WX 1029 ; N uni14A0 ; G 1873
U 5281 ; WX 501 ; N uni14A1 ; G 1874
U 5282 ; WX 501 ; N uni14A2 ; G 1875
U 5283 ; WX 626 ; N uni14A3 ; G 1876
U 5284 ; WX 626 ; N uni14A4 ; G 1877
U 5285 ; WX 626 ; N uni14A5 ; G 1878
U 5286 ; WX 626 ; N uni14A6 ; G 1879
U 5287 ; WX 626 ; N uni14A7 ; G 1880
U 5288 ; WX 626 ; N uni14A8 ; G 1881
U 5289 ; WX 626 ; N uni14A9 ; G 1882
U 5290 ; WX 626 ; N uni14AA ; G 1883
U 5291 ; WX 626 ; N uni14AB ; G 1884
U 5292 ; WX 881 ; N uni14AC ; G 1885
U 5293 ; WX 854 ; N uni14AD ; G 1886
U 5294 ; WX 863 ; N uni14AE ; G 1887
U 5295 ; WX 874 ; N uni14AF ; G 1888
U 5296 ; WX 863 ; N uni14B0 ; G 1889
U 5297 ; WX 874 ; N uni14B1 ; G 1890
U 5298 ; WX 881 ; N uni14B2 ; G 1891
U 5299 ; WX 874 ; N uni14B3 ; G 1892
U 5300 ; WX 881 ; N uni14B4 ; G 1893
U 5301 ; WX 874 ; N uni14B5 ; G 1894
U 5302 ; WX 863 ; N uni14B6 ; G 1895
U 5303 ; WX 874 ; N uni14B7 ; G 1896
U 5304 ; WX 863 ; N uni14B8 ; G 1897
U 5305 ; WX 874 ; N uni14B9 ; G 1898
U 5306 ; WX 863 ; N uni14BA ; G 1899
U 5307 ; WX 436 ; N uni14BB ; G 1900
U 5308 ; WX 548 ; N uni14BC ; G 1901
U 5309 ; WX 436 ; N uni14BD ; G 1902
U 5312 ; WX 988 ; N uni14C0 ; G 1903
U 5313 ; WX 988 ; N uni14C1 ; G 1904
U 5314 ; WX 988 ; N uni14C2 ; G 1905
U 5315 ; WX 988 ; N uni14C3 ; G 1906
U 5316 ; WX 931 ; N uni14C4 ; G 1907
U 5317 ; WX 931 ; N uni14C5 ; G 1908
U 5318 ; WX 931 ; N uni14C6 ; G 1909
U 5319 ; WX 931 ; N uni14C7 ; G 1910
U 5320 ; WX 931 ; N uni14C8 ; G 1911
U 5321 ; WX 1238 ; N uni14C9 ; G 1912
U 5322 ; WX 1247 ; N uni14CA ; G 1913
U 5323 ; WX 1200 ; N uni14CB ; G 1914
U 5324 ; WX 1228 ; N uni14CC ; G 1915
U 5325 ; WX 1200 ; N uni14CD ; G 1916
U 5326 ; WX 1228 ; N uni14CE ; G 1917
U 5327 ; WX 931 ; N uni14CF ; G 1918
U 5328 ; WX 660 ; N uni14D0 ; G 1919
U 5329 ; WX 497 ; N uni14D1 ; G 1920
U 5330 ; WX 660 ; N uni14D2 ; G 1921
U 5331 ; WX 988 ; N uni14D3 ; G 1922
U 5332 ; WX 988 ; N uni14D4 ; G 1923
U 5333 ; WX 988 ; N uni14D5 ; G 1924
U 5334 ; WX 988 ; N uni14D6 ; G 1925
U 5335 ; WX 931 ; N uni14D7 ; G 1926
U 5336 ; WX 931 ; N uni14D8 ; G 1927
U 5337 ; WX 931 ; N uni14D9 ; G 1928
U 5338 ; WX 931 ; N uni14DA ; G 1929
U 5339 ; WX 931 ; N uni14DB ; G 1930
U 5340 ; WX 1231 ; N uni14DC ; G 1931
U 5341 ; WX 1247 ; N uni14DD ; G 1932
U 5342 ; WX 1283 ; N uni14DE ; G 1933
U 5343 ; WX 1228 ; N uni14DF ; G 1934
U 5344 ; WX 1283 ; N uni14E0 ; G 1935
U 5345 ; WX 1228 ; N uni14E1 ; G 1936
U 5346 ; WX 1228 ; N uni14E2 ; G 1937
U 5347 ; WX 1214 ; N uni14E3 ; G 1938
U 5348 ; WX 1228 ; N uni14E4 ; G 1939
U 5349 ; WX 1214 ; N uni14E5 ; G 1940
U 5350 ; WX 1283 ; N uni14E6 ; G 1941
U 5351 ; WX 1228 ; N uni14E7 ; G 1942
U 5352 ; WX 1283 ; N uni14E8 ; G 1943
U 5353 ; WX 1228 ; N uni14E9 ; G 1944
U 5354 ; WX 660 ; N uni14EA ; G 1945
U 5356 ; WX 886 ; N uni14EC ; G 1946
U 5357 ; WX 730 ; N uni14ED ; G 1947
U 5358 ; WX 730 ; N uni14EE ; G 1948
U 5359 ; WX 730 ; N uni14EF ; G 1949
U 5360 ; WX 730 ; N uni14F0 ; G 1950
U 5361 ; WX 730 ; N uni14F1 ; G 1951
U 5362 ; WX 730 ; N uni14F2 ; G 1952
U 5363 ; WX 730 ; N uni14F3 ; G 1953
U 5364 ; WX 730 ; N uni14F4 ; G 1954
U 5365 ; WX 730 ; N uni14F5 ; G 1955
U 5366 ; WX 998 ; N uni14F6 ; G 1956
U 5367 ; WX 958 ; N uni14F7 ; G 1957
U 5368 ; WX 967 ; N uni14F8 ; G 1958
U 5369 ; WX 989 ; N uni14F9 ; G 1959
U 5370 ; WX 967 ; N uni14FA ; G 1960
U 5371 ; WX 989 ; N uni14FB ; G 1961
U 5372 ; WX 998 ; N uni14FC ; G 1962
U 5373 ; WX 958 ; N uni14FD ; G 1963
U 5374 ; WX 998 ; N uni14FE ; G 1964
U 5375 ; WX 958 ; N uni14FF ; G 1965
U 5376 ; WX 967 ; N uni1500 ; G 1966
U 5377 ; WX 989 ; N uni1501 ; G 1967
U 5378 ; WX 967 ; N uni1502 ; G 1968
U 5379 ; WX 989 ; N uni1503 ; G 1969
U 5380 ; WX 967 ; N uni1504 ; G 1970
U 5381 ; WX 493 ; N uni1505 ; G 1971
U 5382 ; WX 460 ; N uni1506 ; G 1972
U 5383 ; WX 493 ; N uni1507 ; G 1973
U 5392 ; WX 923 ; N uni1510 ; G 1974
U 5393 ; WX 923 ; N uni1511 ; G 1975
U 5394 ; WX 923 ; N uni1512 ; G 1976
U 5395 ; WX 1136 ; N uni1513 ; G 1977
U 5396 ; WX 1136 ; N uni1514 ; G 1978
U 5397 ; WX 1136 ; N uni1515 ; G 1979
U 5398 ; WX 1136 ; N uni1516 ; G 1980
U 5399 ; WX 1209 ; N uni1517 ; G 1981
U 5400 ; WX 1202 ; N uni1518 ; G 1982
U 5401 ; WX 1209 ; N uni1519 ; G 1983
U 5402 ; WX 1202 ; N uni151A ; G 1984
U 5403 ; WX 1209 ; N uni151B ; G 1985
U 5404 ; WX 1202 ; N uni151C ; G 1986
U 5405 ; WX 1431 ; N uni151D ; G 1987
U 5406 ; WX 1420 ; N uni151E ; G 1988
U 5407 ; WX 1431 ; N uni151F ; G 1989
U 5408 ; WX 1420 ; N uni1520 ; G 1990
U 5409 ; WX 1431 ; N uni1521 ; G 1991
U 5410 ; WX 1420 ; N uni1522 ; G 1992
U 5411 ; WX 1431 ; N uni1523 ; G 1993
U 5412 ; WX 1420 ; N uni1524 ; G 1994
U 5413 ; WX 746 ; N uni1525 ; G 1995
U 5414 ; WX 776 ; N uni1526 ; G 1996
U 5415 ; WX 776 ; N uni1527 ; G 1997
U 5416 ; WX 776 ; N uni1528 ; G 1998
U 5417 ; WX 776 ; N uni1529 ; G 1999
U 5418 ; WX 776 ; N uni152A ; G 2000
U 5419 ; WX 776 ; N uni152B ; G 2001
U 5420 ; WX 776 ; N uni152C ; G 2002
U 5421 ; WX 776 ; N uni152D ; G 2003
U 5422 ; WX 776 ; N uni152E ; G 2004
U 5423 ; WX 1003 ; N uni152F ; G 2005
U 5424 ; WX 1003 ; N uni1530 ; G 2006
U 5425 ; WX 1013 ; N uni1531 ; G 2007
U 5426 ; WX 996 ; N uni1532 ; G 2008
U 5427 ; WX 1013 ; N uni1533 ; G 2009
U 5428 ; WX 996 ; N uni1534 ; G 2010
U 5429 ; WX 1003 ; N uni1535 ; G 2011
U 5430 ; WX 1003 ; N uni1536 ; G 2012
U 5431 ; WX 1003 ; N uni1537 ; G 2013
U 5432 ; WX 1003 ; N uni1538 ; G 2014
U 5433 ; WX 1013 ; N uni1539 ; G 2015
U 5434 ; WX 996 ; N uni153A ; G 2016
U 5435 ; WX 1013 ; N uni153B ; G 2017
U 5436 ; WX 996 ; N uni153C ; G 2018
U 5437 ; WX 1013 ; N uni153D ; G 2019
U 5438 ; WX 495 ; N uni153E ; G 2020
U 5440 ; WX 395 ; N uni1540 ; G 2021
U 5441 ; WX 510 ; N uni1541 ; G 2022
U 5442 ; WX 1033 ; N uni1542 ; G 2023
U 5443 ; WX 1033 ; N uni1543 ; G 2024
U 5444 ; WX 976 ; N uni1544 ; G 2025
U 5445 ; WX 976 ; N uni1545 ; G 2026
U 5446 ; WX 976 ; N uni1546 ; G 2027
U 5447 ; WX 976 ; N uni1547 ; G 2028
U 5448 ; WX 733 ; N uni1548 ; G 2029
U 5449 ; WX 733 ; N uni1549 ; G 2030
U 5450 ; WX 733 ; N uni154A ; G 2031
U 5451 ; WX 733 ; N uni154B ; G 2032
U 5452 ; WX 733 ; N uni154C ; G 2033
U 5453 ; WX 733 ; N uni154D ; G 2034
U 5454 ; WX 1003 ; N uni154E ; G 2035
U 5455 ; WX 959 ; N uni154F ; G 2036
U 5456 ; WX 495 ; N uni1550 ; G 2037
U 5458 ; WX 886 ; N uni1552 ; G 2038
U 5459 ; WX 774 ; N uni1553 ; G 2039
U 5460 ; WX 774 ; N uni1554 ; G 2040
U 5461 ; WX 774 ; N uni1555 ; G 2041
U 5462 ; WX 774 ; N uni1556 ; G 2042
U 5463 ; WX 928 ; N uni1557 ; G 2043
U 5464 ; WX 928 ; N uni1558 ; G 2044
U 5465 ; WX 928 ; N uni1559 ; G 2045
U 5466 ; WX 928 ; N uni155A ; G 2046
U 5467 ; WX 1172 ; N uni155B ; G 2047
U 5468 ; WX 1142 ; N uni155C ; G 2048
U 5469 ; WX 602 ; N uni155D ; G 2049
U 5470 ; WX 812 ; N uni155E ; G 2050
U 5471 ; WX 812 ; N uni155F ; G 2051
U 5472 ; WX 812 ; N uni1560 ; G 2052
U 5473 ; WX 812 ; N uni1561 ; G 2053
U 5474 ; WX 812 ; N uni1562 ; G 2054
U 5475 ; WX 812 ; N uni1563 ; G 2055
U 5476 ; WX 815 ; N uni1564 ; G 2056
U 5477 ; WX 815 ; N uni1565 ; G 2057
U 5478 ; WX 815 ; N uni1566 ; G 2058
U 5479 ; WX 815 ; N uni1567 ; G 2059
U 5480 ; WX 1060 ; N uni1568 ; G 2060
U 5481 ; WX 1052 ; N uni1569 ; G 2061
U 5482 ; WX 548 ; N uni156A ; G 2062
U 5492 ; WX 977 ; N uni1574 ; G 2063
U 5493 ; WX 977 ; N uni1575 ; G 2064
U 5494 ; WX 977 ; N uni1576 ; G 2065
U 5495 ; WX 977 ; N uni1577 ; G 2066
U 5496 ; WX 977 ; N uni1578 ; G 2067
U 5497 ; WX 977 ; N uni1579 ; G 2068
U 5498 ; WX 977 ; N uni157A ; G 2069
U 5499 ; WX 618 ; N uni157B ; G 2070
U 5500 ; WX 837 ; N uni157C ; G 2071
U 5501 ; WX 510 ; N uni157D ; G 2072
U 5502 ; WX 1238 ; N uni157E ; G 2073
U 5503 ; WX 1238 ; N uni157F ; G 2074
U 5504 ; WX 1238 ; N uni1580 ; G 2075
U 5505 ; WX 1238 ; N uni1581 ; G 2076
U 5506 ; WX 1238 ; N uni1582 ; G 2077
U 5507 ; WX 1238 ; N uni1583 ; G 2078
U 5508 ; WX 1238 ; N uni1584 ; G 2079
U 5509 ; WX 989 ; N uni1585 ; G 2080
U 5514 ; WX 977 ; N uni158A ; G 2081
U 5515 ; WX 977 ; N uni158B ; G 2082
U 5516 ; WX 977 ; N uni158C ; G 2083
U 5517 ; WX 977 ; N uni158D ; G 2084
U 5518 ; WX 1591 ; N uni158E ; G 2085
U 5519 ; WX 1591 ; N uni158F ; G 2086
U 5520 ; WX 1591 ; N uni1590 ; G 2087
U 5521 ; WX 1295 ; N uni1591 ; G 2088
U 5522 ; WX 1295 ; N uni1592 ; G 2089
U 5523 ; WX 1591 ; N uni1593 ; G 2090
U 5524 ; WX 1591 ; N uni1594 ; G 2091
U 5525 ; WX 848 ; N uni1595 ; G 2092
U 5526 ; WX 1273 ; N uni1596 ; G 2093
U 5536 ; WX 988 ; N uni15A0 ; G 2094
U 5537 ; WX 988 ; N uni15A1 ; G 2095
U 5538 ; WX 931 ; N uni15A2 ; G 2096
U 5539 ; WX 931 ; N uni15A3 ; G 2097
U 5540 ; WX 931 ; N uni15A4 ; G 2098
U 5541 ; WX 931 ; N uni15A5 ; G 2099
U 5542 ; WX 660 ; N uni15A6 ; G 2100
U 5543 ; WX 776 ; N uni15A7 ; G 2101
U 5544 ; WX 776 ; N uni15A8 ; G 2102
U 5545 ; WX 776 ; N uni15A9 ; G 2103
U 5546 ; WX 776 ; N uni15AA ; G 2104
U 5547 ; WX 776 ; N uni15AB ; G 2105
U 5548 ; WX 776 ; N uni15AC ; G 2106
U 5549 ; WX 776 ; N uni15AD ; G 2107
U 5550 ; WX 495 ; N uni15AE ; G 2108
U 5551 ; WX 743 ; N uni15AF ; G 2109
U 5598 ; WX 830 ; N uni15DE ; G 2110
U 5601 ; WX 830 ; N uni15E1 ; G 2111
U 5702 ; WX 496 ; N uni1646 ; G 2112
U 5703 ; WX 496 ; N uni1647 ; G 2113
U 5742 ; WX 413 ; N uni166E ; G 2114
U 5743 ; WX 1238 ; N uni166F ; G 2115
U 5744 ; WX 1591 ; N uni1670 ; G 2116
U 5745 ; WX 2016 ; N uni1671 ; G 2117
U 5746 ; WX 2016 ; N uni1672 ; G 2118
U 5747 ; WX 1720 ; N uni1673 ; G 2119
U 5748 ; WX 1678 ; N uni1674 ; G 2120
U 5749 ; WX 2016 ; N uni1675 ; G 2121
U 5750 ; WX 2016 ; N uni1676 ; G 2122
U 5760 ; WX 543 ; N uni1680 ; G 2123
U 5761 ; WX 637 ; N uni1681 ; G 2124
U 5762 ; WX 945 ; N uni1682 ; G 2125
U 5763 ; WX 1254 ; N uni1683 ; G 2126
U 5764 ; WX 1563 ; N uni1684 ; G 2127
U 5765 ; WX 1871 ; N uni1685 ; G 2128
U 5766 ; WX 627 ; N uni1686 ; G 2129
U 5767 ; WX 936 ; N uni1687 ; G 2130
U 5768 ; WX 1254 ; N uni1688 ; G 2131
U 5769 ; WX 1559 ; N uni1689 ; G 2132
U 5770 ; WX 1871 ; N uni168A ; G 2133
U 5771 ; WX 569 ; N uni168B ; G 2134
U 5772 ; WX 877 ; N uni168C ; G 2135
U 5773 ; WX 1187 ; N uni168D ; G 2136
U 5774 ; WX 1497 ; N uni168E ; G 2137
U 5775 ; WX 1807 ; N uni168F ; G 2138
U 5776 ; WX 637 ; N uni1690 ; G 2139
U 5777 ; WX 945 ; N uni1691 ; G 2140
U 5778 ; WX 1240 ; N uni1692 ; G 2141
U 5779 ; WX 1555 ; N uni1693 ; G 2142
U 5780 ; WX 1871 ; N uni1694 ; G 2143
U 5781 ; WX 569 ; N uni1695 ; G 2144
U 5782 ; WX 569 ; N uni1696 ; G 2145
U 5783 ; WX 789 ; N uni1697 ; G 2146
U 5784 ; WX 1234 ; N uni1698 ; G 2147
U 5785 ; WX 1559 ; N uni1699 ; G 2148
U 5786 ; WX 740 ; N uni169A ; G 2149
U 5787 ; WX 638 ; N uni169B ; G 2150
U 5788 ; WX 638 ; N uni169C ; G 2151
U 7424 ; WX 652 ; N uni1D00 ; G 2152
U 7425 ; WX 833 ; N uni1D01 ; G 2153
U 7426 ; WX 1048 ; N uni1D02 ; G 2154
U 7427 ; WX 608 ; N uni1D03 ; G 2155
U 7428 ; WX 593 ; N uni1D04 ; G 2156
U 7429 ; WX 676 ; N uni1D05 ; G 2157
U 7430 ; WX 676 ; N uni1D06 ; G 2158
U 7431 ; WX 559 ; N uni1D07 ; G 2159
U 7432 ; WX 557 ; N uni1D08 ; G 2160
U 7433 ; WX 343 ; N uni1D09 ; G 2161
U 7434 ; WX 494 ; N uni1D0A ; G 2162
U 7435 ; WX 665 ; N uni1D0B ; G 2163
U 7436 ; WX 539 ; N uni1D0C ; G 2164
U 7437 ; WX 817 ; N uni1D0D ; G 2165
U 7438 ; WX 701 ; N uni1D0E ; G 2166
U 7439 ; WX 687 ; N uni1D0F ; G 2167
U 7440 ; WX 593 ; N uni1D10 ; G 2168
U 7441 ; WX 660 ; N uni1D11 ; G 2169
U 7442 ; WX 660 ; N uni1D12 ; G 2170
U 7443 ; WX 660 ; N uni1D13 ; G 2171
U 7444 ; WX 1094 ; N uni1D14 ; G 2172
U 7446 ; WX 687 ; N uni1D16 ; G 2173
U 7447 ; WX 687 ; N uni1D17 ; G 2174
U 7448 ; WX 556 ; N uni1D18 ; G 2175
U 7449 ; WX 642 ; N uni1D19 ; G 2176
U 7450 ; WX 642 ; N uni1D1A ; G 2177
U 7451 ; WX 580 ; N uni1D1B ; G 2178
U 7452 ; WX 634 ; N uni1D1C ; G 2179
U 7453 ; WX 737 ; N uni1D1D ; G 2180
U 7454 ; WX 948 ; N uni1D1E ; G 2181
U 7455 ; WX 695 ; N uni1D1F ; G 2182
U 7456 ; WX 652 ; N uni1D20 ; G 2183
U 7457 ; WX 924 ; N uni1D21 ; G 2184
U 7458 ; WX 582 ; N uni1D22 ; G 2185
U 7459 ; WX 646 ; N uni1D23 ; G 2186
U 7462 ; WX 539 ; N uni1D26 ; G 2187
U 7463 ; WX 652 ; N uni1D27 ; G 2188
U 7464 ; WX 691 ; N uni1D28 ; G 2189
U 7465 ; WX 556 ; N uni1D29 ; G 2190
U 7466 ; WX 781 ; N uni1D2A ; G 2191
U 7467 ; WX 732 ; N uni1D2B ; G 2192
U 7468 ; WX 487 ; N uni1D2C ; G 2193
U 7469 ; WX 683 ; N uni1D2D ; G 2194
U 7470 ; WX 480 ; N uni1D2E ; G 2195
U 7472 ; WX 523 ; N uni1D30 ; G 2196
U 7473 ; WX 430 ; N uni1D31 ; G 2197
U 7474 ; WX 430 ; N uni1D32 ; G 2198
U 7475 ; WX 517 ; N uni1D33 ; G 2199
U 7476 ; WX 527 ; N uni1D34 ; G 2200
U 7477 ; WX 234 ; N uni1D35 ; G 2201
U 7478 ; WX 234 ; N uni1D36 ; G 2202
U 7479 ; WX 488 ; N uni1D37 ; G 2203
U 7480 ; WX 401 ; N uni1D38 ; G 2204
U 7481 ; WX 626 ; N uni1D39 ; G 2205
U 7482 ; WX 527 ; N uni1D3A ; G 2206
U 7483 ; WX 527 ; N uni1D3B ; G 2207
U 7484 ; WX 535 ; N uni1D3C ; G 2208
U 7485 ; WX 509 ; N uni1D3D ; G 2209
U 7486 ; WX 461 ; N uni1D3E ; G 2210
U 7487 ; WX 485 ; N uni1D3F ; G 2211
U 7488 ; WX 430 ; N uni1D40 ; G 2212
U 7489 ; WX 511 ; N uni1D41 ; G 2213
U 7490 ; WX 695 ; N uni1D42 ; G 2214
U 7491 ; WX 458 ; N uni1D43 ; G 2215
U 7492 ; WX 458 ; N uni1D44 ; G 2216
U 7493 ; WX 479 ; N uni1D45 ; G 2217
U 7494 ; WX 712 ; N uni1D46 ; G 2218
U 7495 ; WX 479 ; N uni1D47 ; G 2219
U 7496 ; WX 479 ; N uni1D48 ; G 2220
U 7497 ; WX 479 ; N uni1D49 ; G 2221
U 7498 ; WX 479 ; N uni1D4A ; G 2222
U 7499 ; WX 386 ; N uni1D4B ; G 2223
U 7500 ; WX 386 ; N uni1D4C ; G 2224
U 7501 ; WX 479 ; N uni1D4D ; G 2225
U 7502 ; WX 219 ; N uni1D4E ; G 2226
U 7503 ; WX 487 ; N uni1D4F ; G 2227
U 7504 ; WX 664 ; N uni1D50 ; G 2228
U 7505 ; WX 456 ; N uni1D51 ; G 2229
U 7506 ; WX 488 ; N uni1D52 ; G 2230
U 7507 ; WX 414 ; N uni1D53 ; G 2231
U 7508 ; WX 488 ; N uni1D54 ; G 2232
U 7509 ; WX 488 ; N uni1D55 ; G 2233
U 7510 ; WX 479 ; N uni1D56 ; G 2234
U 7511 ; WX 388 ; N uni1D57 ; G 2235
U 7512 ; WX 456 ; N uni1D58 ; G 2236
U 7513 ; WX 462 ; N uni1D59 ; G 2237
U 7514 ; WX 664 ; N uni1D5A ; G 2238
U 7515 ; WX 501 ; N uni1D5B ; G 2239
U 7517 ; WX 451 ; N uni1D5D ; G 2240
U 7518 ; WX 429 ; N uni1D5E ; G 2241
U 7519 ; WX 433 ; N uni1D5F ; G 2242
U 7520 ; WX 493 ; N uni1D60 ; G 2243
U 7521 ; WX 406 ; N uni1D61 ; G 2244
U 7522 ; WX 219 ; N uni1D62 ; G 2245
U 7523 ; WX 315 ; N uni1D63 ; G 2246
U 7524 ; WX 456 ; N uni1D64 ; G 2247
U 7525 ; WX 501 ; N uni1D65 ; G 2248
U 7526 ; WX 451 ; N uni1D66 ; G 2249
U 7527 ; WX 429 ; N uni1D67 ; G 2250
U 7528 ; WX 451 ; N uni1D68 ; G 2251
U 7529 ; WX 493 ; N uni1D69 ; G 2252
U 7530 ; WX 406 ; N uni1D6A ; G 2253
U 7543 ; WX 716 ; N uni1D77 ; G 2254
U 7544 ; WX 527 ; N uni1D78 ; G 2255
U 7547 ; WX 545 ; N uni1D7B ; G 2256
U 7549 ; WX 747 ; N uni1D7D ; G 2257
U 7557 ; WX 514 ; N uni1D85 ; G 2258
U 7579 ; WX 479 ; N uni1D9B ; G 2259
U 7580 ; WX 414 ; N uni1D9C ; G 2260
U 7581 ; WX 414 ; N uni1D9D ; G 2261
U 7582 ; WX 488 ; N uni1D9E ; G 2262
U 7583 ; WX 386 ; N uni1D9F ; G 2263
U 7584 ; WX 377 ; N uni1DA0 ; G 2264
U 7585 ; WX 348 ; N uni1DA1 ; G 2265
U 7586 ; WX 479 ; N uni1DA2 ; G 2266
U 7587 ; WX 456 ; N uni1DA3 ; G 2267
U 7588 ; WX 347 ; N uni1DA4 ; G 2268
U 7589 ; WX 281 ; N uni1DA5 ; G 2269
U 7590 ; WX 347 ; N uni1DA6 ; G 2270
U 7591 ; WX 347 ; N uni1DA7 ; G 2271
U 7592 ; WX 431 ; N uni1DA8 ; G 2272
U 7593 ; WX 326 ; N uni1DA9 ; G 2273
U 7594 ; WX 330 ; N uni1DAA ; G 2274
U 7595 ; WX 370 ; N uni1DAB ; G 2275
U 7596 ; WX 664 ; N uni1DAC ; G 2276
U 7597 ; WX 664 ; N uni1DAD ; G 2277
U 7598 ; WX 562 ; N uni1DAE ; G 2278
U 7599 ; WX 562 ; N uni1DAF ; G 2279
U 7600 ; WX 448 ; N uni1DB0 ; G 2280
U 7601 ; WX 488 ; N uni1DB1 ; G 2281
U 7602 ; WX 542 ; N uni1DB2 ; G 2282
U 7603 ; WX 422 ; N uni1DB3 ; G 2283
U 7604 ; WX 396 ; N uni1DB4 ; G 2284
U 7605 ; WX 388 ; N uni1DB5 ; G 2285
U 7606 ; WX 583 ; N uni1DB6 ; G 2286
U 7607 ; WX 494 ; N uni1DB7 ; G 2287
U 7608 ; WX 399 ; N uni1DB8 ; G 2288
U 7609 ; WX 451 ; N uni1DB9 ; G 2289
U 7610 ; WX 501 ; N uni1DBA ; G 2290
U 7611 ; WX 417 ; N uni1DBB ; G 2291
U 7612 ; WX 523 ; N uni1DBC ; G 2292
U 7613 ; WX 470 ; N uni1DBD ; G 2293
U 7614 ; WX 455 ; N uni1DBE ; G 2294
U 7615 ; WX 425 ; N uni1DBF ; G 2295
U 7620 ; WX 0 ; N uni1DC4 ; G 2296
U 7621 ; WX 0 ; N uni1DC5 ; G 2297
U 7622 ; WX 0 ; N uni1DC6 ; G 2298
U 7623 ; WX 0 ; N uni1DC7 ; G 2299
U 7624 ; WX 0 ; N uni1DC8 ; G 2300
U 7625 ; WX 0 ; N uni1DC9 ; G 2301
U 7680 ; WX 774 ; N uni1E00 ; G 2302
U 7681 ; WX 675 ; N uni1E01 ; G 2303
U 7682 ; WX 762 ; N uni1E02 ; G 2304
U 7683 ; WX 716 ; N uni1E03 ; G 2305
U 7684 ; WX 762 ; N uni1E04 ; G 2306
U 7685 ; WX 716 ; N uni1E05 ; G 2307
U 7686 ; WX 762 ; N uni1E06 ; G 2308
U 7687 ; WX 716 ; N uni1E07 ; G 2309
U 7688 ; WX 734 ; N uni1E08 ; G 2310
U 7689 ; WX 593 ; N uni1E09 ; G 2311
U 7690 ; WX 830 ; N uni1E0A ; G 2312
U 7691 ; WX 716 ; N uni1E0B ; G 2313
U 7692 ; WX 830 ; N uni1E0C ; G 2314
U 7693 ; WX 716 ; N uni1E0D ; G 2315
U 7694 ; WX 830 ; N uni1E0E ; G 2316
U 7695 ; WX 716 ; N uni1E0F ; G 2317
U 7696 ; WX 830 ; N uni1E10 ; G 2318
U 7697 ; WX 716 ; N uni1E11 ; G 2319
U 7698 ; WX 830 ; N uni1E12 ; G 2320
U 7699 ; WX 716 ; N uni1E13 ; G 2321
U 7700 ; WX 683 ; N uni1E14 ; G 2322
U 7701 ; WX 678 ; N uni1E15 ; G 2323
U 7702 ; WX 683 ; N uni1E16 ; G 2324
U 7703 ; WX 678 ; N uni1E17 ; G 2325
U 7704 ; WX 683 ; N uni1E18 ; G 2326
U 7705 ; WX 678 ; N uni1E19 ; G 2327
U 7706 ; WX 683 ; N uni1E1A ; G 2328
U 7707 ; WX 678 ; N uni1E1B ; G 2329
U 7708 ; WX 683 ; N uni1E1C ; G 2330
U 7709 ; WX 678 ; N uni1E1D ; G 2331
U 7710 ; WX 683 ; N uni1E1E ; G 2332
U 7711 ; WX 435 ; N uni1E1F ; G 2333
U 7712 ; WX 821 ; N uni1E20 ; G 2334
U 7713 ; WX 716 ; N uni1E21 ; G 2335
U 7714 ; WX 837 ; N uni1E22 ; G 2336
U 7715 ; WX 712 ; N uni1E23 ; G 2337
U 7716 ; WX 837 ; N uni1E24 ; G 2338
U 7717 ; WX 712 ; N uni1E25 ; G 2339
U 7718 ; WX 837 ; N uni1E26 ; G 2340
U 7719 ; WX 712 ; N uni1E27 ; G 2341
U 7720 ; WX 837 ; N uni1E28 ; G 2342
U 7721 ; WX 712 ; N uni1E29 ; G 2343
U 7722 ; WX 837 ; N uni1E2A ; G 2344
U 7723 ; WX 712 ; N uni1E2B ; G 2345
U 7724 ; WX 372 ; N uni1E2C ; G 2346
U 7725 ; WX 343 ; N uni1E2D ; G 2347
U 7726 ; WX 372 ; N uni1E2E ; G 2348
U 7727 ; WX 343 ; N uni1E2F ; G 2349
U 7728 ; WX 775 ; N uni1E30 ; G 2350
U 7729 ; WX 665 ; N uni1E31 ; G 2351
U 7730 ; WX 775 ; N uni1E32 ; G 2352
U 7731 ; WX 665 ; N uni1E33 ; G 2353
U 7732 ; WX 775 ; N uni1E34 ; G 2354
U 7733 ; WX 665 ; N uni1E35 ; G 2355
U 7734 ; WX 637 ; N uni1E36 ; G 2356
U 7735 ; WX 343 ; N uni1E37 ; G 2357
U 7736 ; WX 637 ; N uni1E38 ; G 2358
U 7737 ; WX 343 ; N uni1E39 ; G 2359
U 7738 ; WX 637 ; N uni1E3A ; G 2360
U 7739 ; WX 343 ; N uni1E3B ; G 2361
U 7740 ; WX 637 ; N uni1E3C ; G 2362
U 7741 ; WX 343 ; N uni1E3D ; G 2363
U 7742 ; WX 995 ; N uni1E3E ; G 2364
U 7743 ; WX 1042 ; N uni1E3F ; G 2365
U 7744 ; WX 995 ; N uni1E40 ; G 2366
U 7745 ; WX 1042 ; N uni1E41 ; G 2367
U 7746 ; WX 995 ; N uni1E42 ; G 2368
U 7747 ; WX 1042 ; N uni1E43 ; G 2369
U 7748 ; WX 837 ; N uni1E44 ; G 2370
U 7749 ; WX 712 ; N uni1E45 ; G 2371
U 7750 ; WX 837 ; N uni1E46 ; G 2372
U 7751 ; WX 712 ; N uni1E47 ; G 2373
U 7752 ; WX 837 ; N uni1E48 ; G 2374
U 7753 ; WX 712 ; N uni1E49 ; G 2375
U 7754 ; WX 837 ; N uni1E4A ; G 2376
U 7755 ; WX 712 ; N uni1E4B ; G 2377
U 7756 ; WX 850 ; N uni1E4C ; G 2378
U 7757 ; WX 687 ; N uni1E4D ; G 2379
U 7758 ; WX 850 ; N uni1E4E ; G 2380
U 7759 ; WX 687 ; N uni1E4F ; G 2381
U 7760 ; WX 850 ; N uni1E50 ; G 2382
U 7761 ; WX 687 ; N uni1E51 ; G 2383
U 7762 ; WX 850 ; N uni1E52 ; G 2384
U 7763 ; WX 687 ; N uni1E53 ; G 2385
U 7764 ; WX 733 ; N uni1E54 ; G 2386
U 7765 ; WX 716 ; N uni1E55 ; G 2387
U 7766 ; WX 733 ; N uni1E56 ; G 2388
U 7767 ; WX 716 ; N uni1E57 ; G 2389
U 7768 ; WX 770 ; N uni1E58 ; G 2390
U 7769 ; WX 493 ; N uni1E59 ; G 2391
U 7770 ; WX 770 ; N uni1E5A ; G 2392
U 7771 ; WX 493 ; N uni1E5B ; G 2393
U 7772 ; WX 770 ; N uni1E5C ; G 2394
U 7773 ; WX 493 ; N uni1E5D ; G 2395
U 7774 ; WX 770 ; N uni1E5E ; G 2396
U 7775 ; WX 493 ; N uni1E5F ; G 2397
U 7776 ; WX 720 ; N uni1E60 ; G 2398
U 7777 ; WX 595 ; N uni1E61 ; G 2399
U 7778 ; WX 720 ; N uni1E62 ; G 2400
U 7779 ; WX 595 ; N uni1E63 ; G 2401
U 7780 ; WX 720 ; N uni1E64 ; G 2402
U 7781 ; WX 595 ; N uni1E65 ; G 2403
U 7782 ; WX 720 ; N uni1E66 ; G 2404
U 7783 ; WX 595 ; N uni1E67 ; G 2405
U 7784 ; WX 720 ; N uni1E68 ; G 2406
U 7785 ; WX 595 ; N uni1E69 ; G 2407
U 7786 ; WX 682 ; N uni1E6A ; G 2408
U 7787 ; WX 478 ; N uni1E6B ; G 2409
U 7788 ; WX 682 ; N uni1E6C ; G 2410
U 7789 ; WX 478 ; N uni1E6D ; G 2411
U 7790 ; WX 682 ; N uni1E6E ; G 2412
U 7791 ; WX 478 ; N uni1E6F ; G 2413
U 7792 ; WX 682 ; N uni1E70 ; G 2414
U 7793 ; WX 478 ; N uni1E71 ; G 2415
U 7794 ; WX 812 ; N uni1E72 ; G 2416
U 7795 ; WX 712 ; N uni1E73 ; G 2417
U 7796 ; WX 812 ; N uni1E74 ; G 2418
U 7797 ; WX 712 ; N uni1E75 ; G 2419
U 7798 ; WX 812 ; N uni1E76 ; G 2420
U 7799 ; WX 712 ; N uni1E77 ; G 2421
U 7800 ; WX 812 ; N uni1E78 ; G 2422
U 7801 ; WX 712 ; N uni1E79 ; G 2423
U 7802 ; WX 812 ; N uni1E7A ; G 2424
U 7803 ; WX 712 ; N uni1E7B ; G 2425
U 7804 ; WX 774 ; N uni1E7C ; G 2426
U 7805 ; WX 652 ; N uni1E7D ; G 2427
U 7806 ; WX 774 ; N uni1E7E ; G 2428
U 7807 ; WX 652 ; N uni1E7F ; G 2429
U 7808 ; WX 1103 ; N Wgrave ; G 2430
U 7809 ; WX 924 ; N wgrave ; G 2431
U 7810 ; WX 1103 ; N Wacute ; G 2432
U 7811 ; WX 924 ; N wacute ; G 2433
U 7812 ; WX 1103 ; N Wdieresis ; G 2434
U 7813 ; WX 924 ; N wdieresis ; G 2435
U 7814 ; WX 1103 ; N uni1E86 ; G 2436
U 7815 ; WX 924 ; N uni1E87 ; G 2437
U 7816 ; WX 1103 ; N uni1E88 ; G 2438
U 7817 ; WX 924 ; N uni1E89 ; G 2439
U 7818 ; WX 771 ; N uni1E8A ; G 2440
U 7819 ; WX 645 ; N uni1E8B ; G 2441
U 7820 ; WX 771 ; N uni1E8C ; G 2442
U 7821 ; WX 645 ; N uni1E8D ; G 2443
U 7822 ; WX 724 ; N uni1E8E ; G 2444
U 7823 ; WX 652 ; N uni1E8F ; G 2445
U 7824 ; WX 725 ; N uni1E90 ; G 2446
U 7825 ; WX 582 ; N uni1E91 ; G 2447
U 7826 ; WX 725 ; N uni1E92 ; G 2448
U 7827 ; WX 582 ; N uni1E93 ; G 2449
U 7828 ; WX 725 ; N uni1E94 ; G 2450
U 7829 ; WX 582 ; N uni1E95 ; G 2451
U 7830 ; WX 712 ; N uni1E96 ; G 2452
U 7831 ; WX 478 ; N uni1E97 ; G 2453
U 7832 ; WX 924 ; N uni1E98 ; G 2454
U 7833 ; WX 652 ; N uni1E99 ; G 2455
U 7834 ; WX 675 ; N uni1E9A ; G 2456
U 7835 ; WX 435 ; N uni1E9B ; G 2457
U 7836 ; WX 435 ; N uni1E9C ; G 2458
U 7837 ; WX 435 ; N uni1E9D ; G 2459
U 7838 ; WX 896 ; N uni1E9E ; G 2460
U 7839 ; WX 687 ; N uni1E9F ; G 2461
U 7840 ; WX 774 ; N uni1EA0 ; G 2462
U 7841 ; WX 675 ; N uni1EA1 ; G 2463
U 7842 ; WX 774 ; N uni1EA2 ; G 2464
U 7843 ; WX 675 ; N uni1EA3 ; G 2465
U 7844 ; WX 774 ; N uni1EA4 ; G 2466
U 7845 ; WX 675 ; N uni1EA5 ; G 2467
U 7846 ; WX 774 ; N uni1EA6 ; G 2468
U 7847 ; WX 675 ; N uni1EA7 ; G 2469
U 7848 ; WX 774 ; N uni1EA8 ; G 2470
U 7849 ; WX 675 ; N uni1EA9 ; G 2471
U 7850 ; WX 774 ; N uni1EAA ; G 2472
U 7851 ; WX 675 ; N uni1EAB ; G 2473
U 7852 ; WX 774 ; N uni1EAC ; G 2474
U 7853 ; WX 675 ; N uni1EAD ; G 2475
U 7854 ; WX 774 ; N uni1EAE ; G 2476
U 7855 ; WX 675 ; N uni1EAF ; G 2477
U 7856 ; WX 774 ; N uni1EB0 ; G 2478
U 7857 ; WX 675 ; N uni1EB1 ; G 2479
U 7858 ; WX 774 ; N uni1EB2 ; G 2480
U 7859 ; WX 675 ; N uni1EB3 ; G 2481
U 7860 ; WX 774 ; N uni1EB4 ; G 2482
U 7861 ; WX 675 ; N uni1EB5 ; G 2483
U 7862 ; WX 774 ; N uni1EB6 ; G 2484
U 7863 ; WX 675 ; N uni1EB7 ; G 2485
U 7864 ; WX 683 ; N uni1EB8 ; G 2486
U 7865 ; WX 678 ; N uni1EB9 ; G 2487
U 7866 ; WX 683 ; N uni1EBA ; G 2488
U 7867 ; WX 678 ; N uni1EBB ; G 2489
U 7868 ; WX 683 ; N uni1EBC ; G 2490
U 7869 ; WX 678 ; N uni1EBD ; G 2491
U 7870 ; WX 683 ; N uni1EBE ; G 2492
U 7871 ; WX 678 ; N uni1EBF ; G 2493
U 7872 ; WX 683 ; N uni1EC0 ; G 2494
U 7873 ; WX 678 ; N uni1EC1 ; G 2495
U 7874 ; WX 683 ; N uni1EC2 ; G 2496
U 7875 ; WX 678 ; N uni1EC3 ; G 2497
U 7876 ; WX 683 ; N uni1EC4 ; G 2498
U 7877 ; WX 678 ; N uni1EC5 ; G 2499
U 7878 ; WX 683 ; N uni1EC6 ; G 2500
U 7879 ; WX 678 ; N uni1EC7 ; G 2501
U 7880 ; WX 372 ; N uni1EC8 ; G 2502
U 7881 ; WX 343 ; N uni1EC9 ; G 2503
U 7882 ; WX 372 ; N uni1ECA ; G 2504
U 7883 ; WX 343 ; N uni1ECB ; G 2505
U 7884 ; WX 850 ; N uni1ECC ; G 2506
U 7885 ; WX 687 ; N uni1ECD ; G 2507
U 7886 ; WX 850 ; N uni1ECE ; G 2508
U 7887 ; WX 687 ; N uni1ECF ; G 2509
U 7888 ; WX 850 ; N uni1ED0 ; G 2510
U 7889 ; WX 687 ; N uni1ED1 ; G 2511
U 7890 ; WX 850 ; N uni1ED2 ; G 2512
U 7891 ; WX 687 ; N uni1ED3 ; G 2513
U 7892 ; WX 850 ; N uni1ED4 ; G 2514
U 7893 ; WX 687 ; N uni1ED5 ; G 2515
U 7894 ; WX 850 ; N uni1ED6 ; G 2516
U 7895 ; WX 687 ; N uni1ED7 ; G 2517
U 7896 ; WX 850 ; N uni1ED8 ; G 2518
U 7897 ; WX 687 ; N uni1ED9 ; G 2519
U 7898 ; WX 874 ; N uni1EDA ; G 2520
U 7899 ; WX 687 ; N uni1EDB ; G 2521
U 7900 ; WX 874 ; N uni1EDC ; G 2522
U 7901 ; WX 687 ; N uni1EDD ; G 2523
U 7902 ; WX 874 ; N uni1EDE ; G 2524
U 7903 ; WX 687 ; N uni1EDF ; G 2525
U 7904 ; WX 874 ; N uni1EE0 ; G 2526
U 7905 ; WX 687 ; N uni1EE1 ; G 2527
U 7906 ; WX 874 ; N uni1EE2 ; G 2528
U 7907 ; WX 687 ; N uni1EE3 ; G 2529
U 7908 ; WX 812 ; N uni1EE4 ; G 2530
U 7909 ; WX 712 ; N uni1EE5 ; G 2531
U 7910 ; WX 812 ; N uni1EE6 ; G 2532
U 7911 ; WX 712 ; N uni1EE7 ; G 2533
U 7912 ; WX 835 ; N uni1EE8 ; G 2534
U 7913 ; WX 712 ; N uni1EE9 ; G 2535
U 7914 ; WX 835 ; N uni1EEA ; G 2536
U 7915 ; WX 712 ; N uni1EEB ; G 2537
U 7916 ; WX 835 ; N uni1EEC ; G 2538
U 7917 ; WX 712 ; N uni1EED ; G 2539
U 7918 ; WX 835 ; N uni1EEE ; G 2540
U 7919 ; WX 712 ; N uni1EEF ; G 2541
U 7920 ; WX 835 ; N uni1EF0 ; G 2542
U 7921 ; WX 712 ; N uni1EF1 ; G 2543
U 7922 ; WX 724 ; N Ygrave ; G 2544
U 7923 ; WX 652 ; N ygrave ; G 2545
U 7924 ; WX 724 ; N uni1EF4 ; G 2546
U 7925 ; WX 652 ; N uni1EF5 ; G 2547
U 7926 ; WX 724 ; N uni1EF6 ; G 2548
U 7927 ; WX 652 ; N uni1EF7 ; G 2549
U 7928 ; WX 724 ; N uni1EF8 ; G 2550
U 7929 ; WX 652 ; N uni1EF9 ; G 2551
U 7930 ; WX 953 ; N uni1EFA ; G 2552
U 7931 ; WX 644 ; N uni1EFB ; G 2553
U 7936 ; WX 687 ; N uni1F00 ; G 2554
U 7937 ; WX 687 ; N uni1F01 ; G 2555
U 7938 ; WX 687 ; N uni1F02 ; G 2556
U 7939 ; WX 687 ; N uni1F03 ; G 2557
U 7940 ; WX 687 ; N uni1F04 ; G 2558
U 7941 ; WX 687 ; N uni1F05 ; G 2559
U 7942 ; WX 687 ; N uni1F06 ; G 2560
U 7943 ; WX 687 ; N uni1F07 ; G 2561
U 7944 ; WX 774 ; N uni1F08 ; G 2562
U 7945 ; WX 774 ; N uni1F09 ; G 2563
U 7946 ; WX 1041 ; N uni1F0A ; G 2564
U 7947 ; WX 1043 ; N uni1F0B ; G 2565
U 7948 ; WX 935 ; N uni1F0C ; G 2566
U 7949 ; WX 963 ; N uni1F0D ; G 2567
U 7950 ; WX 835 ; N uni1F0E ; G 2568
U 7951 ; WX 859 ; N uni1F0F ; G 2569
U 7952 ; WX 557 ; N uni1F10 ; G 2570
U 7953 ; WX 557 ; N uni1F11 ; G 2571
U 7954 ; WX 557 ; N uni1F12 ; G 2572
U 7955 ; WX 557 ; N uni1F13 ; G 2573
U 7956 ; WX 557 ; N uni1F14 ; G 2574
U 7957 ; WX 557 ; N uni1F15 ; G 2575
U 7960 ; WX 792 ; N uni1F18 ; G 2576
U 7961 ; WX 794 ; N uni1F19 ; G 2577
U 7962 ; WX 1100 ; N uni1F1A ; G 2578
U 7963 ; WX 1096 ; N uni1F1B ; G 2579
U 7964 ; WX 1023 ; N uni1F1C ; G 2580
U 7965 ; WX 1052 ; N uni1F1D ; G 2581
U 7968 ; WX 712 ; N uni1F20 ; G 2582
U 7969 ; WX 712 ; N uni1F21 ; G 2583
U 7970 ; WX 712 ; N uni1F22 ; G 2584
U 7971 ; WX 712 ; N uni1F23 ; G 2585
U 7972 ; WX 712 ; N uni1F24 ; G 2586
U 7973 ; WX 712 ; N uni1F25 ; G 2587
U 7974 ; WX 712 ; N uni1F26 ; G 2588
U 7975 ; WX 712 ; N uni1F27 ; G 2589
U 7976 ; WX 945 ; N uni1F28 ; G 2590
U 7977 ; WX 951 ; N uni1F29 ; G 2591
U 7978 ; WX 1250 ; N uni1F2A ; G 2592
U 7979 ; WX 1250 ; N uni1F2B ; G 2593
U 7980 ; WX 1180 ; N uni1F2C ; G 2594
U 7981 ; WX 1206 ; N uni1F2D ; G 2595
U 7982 ; WX 1054 ; N uni1F2E ; G 2596
U 7983 ; WX 1063 ; N uni1F2F ; G 2597
U 7984 ; WX 390 ; N uni1F30 ; G 2598
U 7985 ; WX 390 ; N uni1F31 ; G 2599
U 7986 ; WX 390 ; N uni1F32 ; G 2600
U 7987 ; WX 390 ; N uni1F33 ; G 2601
U 7988 ; WX 390 ; N uni1F34 ; G 2602
U 7989 ; WX 390 ; N uni1F35 ; G 2603
U 7990 ; WX 390 ; N uni1F36 ; G 2604
U 7991 ; WX 390 ; N uni1F37 ; G 2605
U 7992 ; WX 483 ; N uni1F38 ; G 2606
U 7993 ; WX 489 ; N uni1F39 ; G 2607
U 7994 ; WX 777 ; N uni1F3A ; G 2608
U 7995 ; WX 785 ; N uni1F3B ; G 2609
U 7996 ; WX 712 ; N uni1F3C ; G 2610
U 7997 ; WX 738 ; N uni1F3D ; G 2611
U 7998 ; WX 604 ; N uni1F3E ; G 2612
U 7999 ; WX 604 ; N uni1F3F ; G 2613
U 8000 ; WX 687 ; N uni1F40 ; G 2614
U 8001 ; WX 687 ; N uni1F41 ; G 2615
U 8002 ; WX 687 ; N uni1F42 ; G 2616
U 8003 ; WX 687 ; N uni1F43 ; G 2617
U 8004 ; WX 687 ; N uni1F44 ; G 2618
U 8005 ; WX 687 ; N uni1F45 ; G 2619
U 8008 ; WX 892 ; N uni1F48 ; G 2620
U 8009 ; WX 933 ; N uni1F49 ; G 2621
U 8010 ; WX 1221 ; N uni1F4A ; G 2622
U 8011 ; WX 1224 ; N uni1F4B ; G 2623
U 8012 ; WX 1053 ; N uni1F4C ; G 2624
U 8013 ; WX 1082 ; N uni1F4D ; G 2625
U 8016 ; WX 675 ; N uni1F50 ; G 2626
U 8017 ; WX 675 ; N uni1F51 ; G 2627
U 8018 ; WX 675 ; N uni1F52 ; G 2628
U 8019 ; WX 675 ; N uni1F53 ; G 2629
U 8020 ; WX 675 ; N uni1F54 ; G 2630
U 8021 ; WX 675 ; N uni1F55 ; G 2631
U 8022 ; WX 675 ; N uni1F56 ; G 2632
U 8023 ; WX 675 ; N uni1F57 ; G 2633
U 8025 ; WX 930 ; N uni1F59 ; G 2634
U 8027 ; WX 1184 ; N uni1F5B ; G 2635
U 8029 ; WX 1199 ; N uni1F5D ; G 2636
U 8031 ; WX 1049 ; N uni1F5F ; G 2637
U 8032 ; WX 869 ; N uni1F60 ; G 2638
U 8033 ; WX 869 ; N uni1F61 ; G 2639
U 8034 ; WX 869 ; N uni1F62 ; G 2640
U 8035 ; WX 869 ; N uni1F63 ; G 2641
U 8036 ; WX 869 ; N uni1F64 ; G 2642
U 8037 ; WX 869 ; N uni1F65 ; G 2643
U 8038 ; WX 869 ; N uni1F66 ; G 2644
U 8039 ; WX 869 ; N uni1F67 ; G 2645
U 8040 ; WX 909 ; N uni1F68 ; G 2646
U 8041 ; WX 958 ; N uni1F69 ; G 2647
U 8042 ; WX 1246 ; N uni1F6A ; G 2648
U 8043 ; WX 1251 ; N uni1F6B ; G 2649
U 8044 ; WX 1076 ; N uni1F6C ; G 2650
U 8045 ; WX 1105 ; N uni1F6D ; G 2651
U 8046 ; WX 1028 ; N uni1F6E ; G 2652
U 8047 ; WX 1076 ; N uni1F6F ; G 2653
U 8048 ; WX 687 ; N uni1F70 ; G 2654
U 8049 ; WX 687 ; N uni1F71 ; G 2655
U 8050 ; WX 557 ; N uni1F72 ; G 2656
U 8051 ; WX 557 ; N uni1F73 ; G 2657
U 8052 ; WX 712 ; N uni1F74 ; G 2658
U 8053 ; WX 712 ; N uni1F75 ; G 2659
U 8054 ; WX 390 ; N uni1F76 ; G 2660
U 8055 ; WX 390 ; N uni1F77 ; G 2661
U 8056 ; WX 687 ; N uni1F78 ; G 2662
U 8057 ; WX 687 ; N uni1F79 ; G 2663
U 8058 ; WX 675 ; N uni1F7A ; G 2664
U 8059 ; WX 675 ; N uni1F7B ; G 2665
U 8060 ; WX 869 ; N uni1F7C ; G 2666
U 8061 ; WX 869 ; N uni1F7D ; G 2667
U 8064 ; WX 687 ; N uni1F80 ; G 2668
U 8065 ; WX 687 ; N uni1F81 ; G 2669
U 8066 ; WX 687 ; N uni1F82 ; G 2670
U 8067 ; WX 687 ; N uni1F83 ; G 2671
U 8068 ; WX 687 ; N uni1F84 ; G 2672
U 8069 ; WX 687 ; N uni1F85 ; G 2673
U 8070 ; WX 687 ; N uni1F86 ; G 2674
U 8071 ; WX 687 ; N uni1F87 ; G 2675
U 8072 ; WX 774 ; N uni1F88 ; G 2676
U 8073 ; WX 774 ; N uni1F89 ; G 2677
U 8074 ; WX 1041 ; N uni1F8A ; G 2678
U 8075 ; WX 1043 ; N uni1F8B ; G 2679
U 8076 ; WX 935 ; N uni1F8C ; G 2680
U 8077 ; WX 963 ; N uni1F8D ; G 2681
U 8078 ; WX 835 ; N uni1F8E ; G 2682
U 8079 ; WX 859 ; N uni1F8F ; G 2683
U 8080 ; WX 712 ; N uni1F90 ; G 2684
U 8081 ; WX 712 ; N uni1F91 ; G 2685
U 8082 ; WX 712 ; N uni1F92 ; G 2686
U 8083 ; WX 712 ; N uni1F93 ; G 2687
U 8084 ; WX 712 ; N uni1F94 ; G 2688
U 8085 ; WX 712 ; N uni1F95 ; G 2689
U 8086 ; WX 712 ; N uni1F96 ; G 2690
U 8087 ; WX 712 ; N uni1F97 ; G 2691
U 8088 ; WX 945 ; N uni1F98 ; G 2692
U 8089 ; WX 951 ; N uni1F99 ; G 2693
U 8090 ; WX 1250 ; N uni1F9A ; G 2694
U 8091 ; WX 1250 ; N uni1F9B ; G 2695
U 8092 ; WX 1180 ; N uni1F9C ; G 2696
U 8093 ; WX 1206 ; N uni1F9D ; G 2697
U 8094 ; WX 1054 ; N uni1F9E ; G 2698
U 8095 ; WX 1063 ; N uni1F9F ; G 2699
U 8096 ; WX 869 ; N uni1FA0 ; G 2700
U 8097 ; WX 869 ; N uni1FA1 ; G 2701
U 8098 ; WX 869 ; N uni1FA2 ; G 2702
U 8099 ; WX 869 ; N uni1FA3 ; G 2703
U 8100 ; WX 869 ; N uni1FA4 ; G 2704
U 8101 ; WX 869 ; N uni1FA5 ; G 2705
U 8102 ; WX 869 ; N uni1FA6 ; G 2706
U 8103 ; WX 869 ; N uni1FA7 ; G 2707
U 8104 ; WX 909 ; N uni1FA8 ; G 2708
U 8105 ; WX 958 ; N uni1FA9 ; G 2709
U 8106 ; WX 1246 ; N uni1FAA ; G 2710
U 8107 ; WX 1251 ; N uni1FAB ; G 2711
U 8108 ; WX 1076 ; N uni1FAC ; G 2712
U 8109 ; WX 1105 ; N uni1FAD ; G 2713
U 8110 ; WX 1028 ; N uni1FAE ; G 2714
U 8111 ; WX 1076 ; N uni1FAF ; G 2715
U 8112 ; WX 687 ; N uni1FB0 ; G 2716
U 8113 ; WX 687 ; N uni1FB1 ; G 2717
U 8114 ; WX 687 ; N uni1FB2 ; G 2718
U 8115 ; WX 687 ; N uni1FB3 ; G 2719
U 8116 ; WX 687 ; N uni1FB4 ; G 2720
U 8118 ; WX 687 ; N uni1FB6 ; G 2721
U 8119 ; WX 687 ; N uni1FB7 ; G 2722
U 8120 ; WX 774 ; N uni1FB8 ; G 2723
U 8121 ; WX 774 ; N uni1FB9 ; G 2724
U 8122 ; WX 876 ; N uni1FBA ; G 2725
U 8123 ; WX 797 ; N uni1FBB ; G 2726
U 8124 ; WX 774 ; N uni1FBC ; G 2727
U 8125 ; WX 500 ; N uni1FBD ; G 2728
U 8126 ; WX 500 ; N uni1FBE ; G 2729
U 8127 ; WX 500 ; N uni1FBF ; G 2730
U 8128 ; WX 500 ; N uni1FC0 ; G 2731
U 8129 ; WX 500 ; N uni1FC1 ; G 2732
U 8130 ; WX 712 ; N uni1FC2 ; G 2733
U 8131 ; WX 712 ; N uni1FC3 ; G 2734
U 8132 ; WX 712 ; N uni1FC4 ; G 2735
U 8134 ; WX 712 ; N uni1FC6 ; G 2736
U 8135 ; WX 712 ; N uni1FC7 ; G 2737
U 8136 ; WX 929 ; N uni1FC8 ; G 2738
U 8137 ; WX 846 ; N uni1FC9 ; G 2739
U 8138 ; WX 1080 ; N uni1FCA ; G 2740
U 8139 ; WX 1009 ; N uni1FCB ; G 2741
U 8140 ; WX 837 ; N uni1FCC ; G 2742
U 8141 ; WX 500 ; N uni1FCD ; G 2743
U 8142 ; WX 500 ; N uni1FCE ; G 2744
U 8143 ; WX 500 ; N uni1FCF ; G 2745
U 8144 ; WX 390 ; N uni1FD0 ; G 2746
U 8145 ; WX 390 ; N uni1FD1 ; G 2747
U 8146 ; WX 390 ; N uni1FD2 ; G 2748
U 8147 ; WX 390 ; N uni1FD3 ; G 2749
U 8150 ; WX 390 ; N uni1FD6 ; G 2750
U 8151 ; WX 390 ; N uni1FD7 ; G 2751
U 8152 ; WX 372 ; N uni1FD8 ; G 2752
U 8153 ; WX 372 ; N uni1FD9 ; G 2753
U 8154 ; WX 621 ; N uni1FDA ; G 2754
U 8155 ; WX 563 ; N uni1FDB ; G 2755
U 8157 ; WX 500 ; N uni1FDD ; G 2756
U 8158 ; WX 500 ; N uni1FDE ; G 2757
U 8159 ; WX 500 ; N uni1FDF ; G 2758
U 8160 ; WX 675 ; N uni1FE0 ; G 2759
U 8161 ; WX 675 ; N uni1FE1 ; G 2760
U 8162 ; WX 675 ; N uni1FE2 ; G 2761
U 8163 ; WX 675 ; N uni1FE3 ; G 2762
U 8164 ; WX 716 ; N uni1FE4 ; G 2763
U 8165 ; WX 716 ; N uni1FE5 ; G 2764
U 8166 ; WX 675 ; N uni1FE6 ; G 2765
U 8167 ; WX 675 ; N uni1FE7 ; G 2766
U 8168 ; WX 724 ; N uni1FE8 ; G 2767
U 8169 ; WX 724 ; N uni1FE9 ; G 2768
U 8170 ; WX 1020 ; N uni1FEA ; G 2769
U 8171 ; WX 980 ; N uni1FEB ; G 2770
U 8172 ; WX 838 ; N uni1FEC ; G 2771
U 8173 ; WX 500 ; N uni1FED ; G 2772
U 8174 ; WX 500 ; N uni1FEE ; G 2773
U 8175 ; WX 500 ; N uni1FEF ; G 2774
U 8178 ; WX 869 ; N uni1FF2 ; G 2775
U 8179 ; WX 869 ; N uni1FF3 ; G 2776
U 8180 ; WX 869 ; N uni1FF4 ; G 2777
U 8182 ; WX 869 ; N uni1FF6 ; G 2778
U 8183 ; WX 869 ; N uni1FF7 ; G 2779
U 8184 ; WX 1065 ; N uni1FF8 ; G 2780
U 8185 ; WX 891 ; N uni1FF9 ; G 2781
U 8186 ; WX 1084 ; N uni1FFA ; G 2782
U 8187 ; WX 894 ; N uni1FFB ; G 2783
U 8188 ; WX 850 ; N uni1FFC ; G 2784
U 8189 ; WX 500 ; N uni1FFD ; G 2785
U 8190 ; WX 500 ; N uni1FFE ; G 2786
U 8192 ; WX 500 ; N uni2000 ; G 2787
U 8193 ; WX 1000 ; N uni2001 ; G 2788
U 8194 ; WX 500 ; N uni2002 ; G 2789
U 8195 ; WX 1000 ; N uni2003 ; G 2790
U 8196 ; WX 330 ; N uni2004 ; G 2791
U 8197 ; WX 250 ; N uni2005 ; G 2792
U 8198 ; WX 167 ; N uni2006 ; G 2793
U 8199 ; WX 696 ; N uni2007 ; G 2794
U 8200 ; WX 380 ; N uni2008 ; G 2795
U 8201 ; WX 200 ; N uni2009 ; G 2796
U 8202 ; WX 100 ; N uni200A ; G 2797
U 8203 ; WX 0 ; N uni200B ; G 2798
U 8204 ; WX 0 ; N uni200C ; G 2799
U 8205 ; WX 0 ; N uni200D ; G 2800
U 8206 ; WX 0 ; N uni200E ; G 2801
U 8207 ; WX 0 ; N uni200F ; G 2802
U 8208 ; WX 415 ; N uni2010 ; G 2803
U 8209 ; WX 415 ; N uni2011 ; G 2804
U 8210 ; WX 696 ; N figuredash ; G 2805
U 8211 ; WX 500 ; N endash ; G 2806
U 8212 ; WX 1000 ; N emdash ; G 2807
U 8213 ; WX 1000 ; N uni2015 ; G 2808
U 8214 ; WX 500 ; N uni2016 ; G 2809
U 8215 ; WX 500 ; N underscoredbl ; G 2810
U 8216 ; WX 380 ; N quoteleft ; G 2811
U 8217 ; WX 380 ; N quoteright ; G 2812
U 8218 ; WX 380 ; N quotesinglbase ; G 2813
U 8219 ; WX 380 ; N quotereversed ; G 2814
U 8220 ; WX 657 ; N quotedblleft ; G 2815
U 8221 ; WX 657 ; N quotedblright ; G 2816
U 8222 ; WX 657 ; N quotedblbase ; G 2817
U 8223 ; WX 657 ; N uni201F ; G 2818
U 8224 ; WX 500 ; N dagger ; G 2819
U 8225 ; WX 500 ; N daggerdbl ; G 2820
U 8226 ; WX 639 ; N bullet ; G 2821
U 8227 ; WX 639 ; N uni2023 ; G 2822
U 8228 ; WX 333 ; N onedotenleader ; G 2823
U 8229 ; WX 667 ; N twodotenleader ; G 2824
U 8230 ; WX 1000 ; N ellipsis ; G 2825
U 8231 ; WX 348 ; N uni2027 ; G 2826
U 8232 ; WX 0 ; N uni2028 ; G 2827
U 8233 ; WX 0 ; N uni2029 ; G 2828
U 8234 ; WX 0 ; N uni202A ; G 2829
U 8235 ; WX 0 ; N uni202B ; G 2830
U 8236 ; WX 0 ; N uni202C ; G 2831
U 8237 ; WX 0 ; N uni202D ; G 2832
U 8238 ; WX 0 ; N uni202E ; G 2833
U 8239 ; WX 200 ; N uni202F ; G 2834
U 8240 ; WX 1440 ; N perthousand ; G 2835
U 8241 ; WX 1887 ; N uni2031 ; G 2836
U 8242 ; WX 264 ; N minute ; G 2837
U 8243 ; WX 447 ; N second ; G 2838
U 8244 ; WX 630 ; N uni2034 ; G 2839
U 8245 ; WX 264 ; N uni2035 ; G 2840
U 8246 ; WX 447 ; N uni2036 ; G 2841
U 8247 ; WX 630 ; N uni2037 ; G 2842
U 8248 ; WX 733 ; N uni2038 ; G 2843
U 8249 ; WX 412 ; N guilsinglleft ; G 2844
U 8250 ; WX 412 ; N guilsinglright ; G 2845
U 8251 ; WX 972 ; N uni203B ; G 2846
U 8252 ; WX 627 ; N exclamdbl ; G 2847
U 8253 ; WX 580 ; N uni203D ; G 2848
U 8254 ; WX 500 ; N uni203E ; G 2849
U 8255 ; WX 828 ; N uni203F ; G 2850
U 8256 ; WX 828 ; N uni2040 ; G 2851
U 8257 ; WX 329 ; N uni2041 ; G 2852
U 8258 ; WX 1023 ; N uni2042 ; G 2853
U 8259 ; WX 500 ; N uni2043 ; G 2854
U 8260 ; WX 167 ; N fraction ; G 2855
U 8261 ; WX 457 ; N uni2045 ; G 2856
U 8262 ; WX 457 ; N uni2046 ; G 2857
U 8263 ; WX 1030 ; N uni2047 ; G 2858
U 8264 ; WX 829 ; N uni2048 ; G 2859
U 8265 ; WX 829 ; N uni2049 ; G 2860
U 8266 ; WX 513 ; N uni204A ; G 2861
U 8267 ; WX 636 ; N uni204B ; G 2862
U 8268 ; WX 500 ; N uni204C ; G 2863
U 8269 ; WX 500 ; N uni204D ; G 2864
U 8270 ; WX 523 ; N uni204E ; G 2865
U 8271 ; WX 400 ; N uni204F ; G 2866
U 8272 ; WX 828 ; N uni2050 ; G 2867
U 8273 ; WX 523 ; N uni2051 ; G 2868
U 8274 ; WX 556 ; N uni2052 ; G 2869
U 8275 ; WX 1000 ; N uni2053 ; G 2870
U 8276 ; WX 828 ; N uni2054 ; G 2871
U 8277 ; WX 838 ; N uni2055 ; G 2872
U 8278 ; WX 684 ; N uni2056 ; G 2873
U 8279 ; WX 813 ; N uni2057 ; G 2874
U 8280 ; WX 838 ; N uni2058 ; G 2875
U 8281 ; WX 838 ; N uni2059 ; G 2876
U 8282 ; WX 380 ; N uni205A ; G 2877
U 8283 ; WX 872 ; N uni205B ; G 2878
U 8284 ; WX 838 ; N uni205C ; G 2879
U 8285 ; WX 380 ; N uni205D ; G 2880
U 8286 ; WX 380 ; N uni205E ; G 2881
U 8287 ; WX 222 ; N uni205F ; G 2882
U 8288 ; WX 0 ; N uni2060 ; G 2883
U 8289 ; WX 0 ; N uni2061 ; G 2884
U 8290 ; WX 0 ; N uni2062 ; G 2885
U 8291 ; WX 0 ; N uni2063 ; G 2886
U 8292 ; WX 0 ; N uni2064 ; G 2887
U 8298 ; WX 0 ; N uni206A ; G 2888
U 8299 ; WX 0 ; N uni206B ; G 2889
U 8300 ; WX 0 ; N uni206C ; G 2890
U 8301 ; WX 0 ; N uni206D ; G 2891
U 8302 ; WX 0 ; N uni206E ; G 2892
U 8303 ; WX 0 ; N uni206F ; G 2893
U 8304 ; WX 438 ; N uni2070 ; G 2894
U 8305 ; WX 219 ; N uni2071 ; G 2895
U 8308 ; WX 438 ; N uni2074 ; G 2896
U 8309 ; WX 438 ; N uni2075 ; G 2897
U 8310 ; WX 438 ; N uni2076 ; G 2898
U 8311 ; WX 438 ; N uni2077 ; G 2899
U 8312 ; WX 438 ; N uni2078 ; G 2900
U 8313 ; WX 438 ; N uni2079 ; G 2901
U 8314 ; WX 528 ; N uni207A ; G 2902
U 8315 ; WX 528 ; N uni207B ; G 2903
U 8316 ; WX 528 ; N uni207C ; G 2904
U 8317 ; WX 288 ; N uni207D ; G 2905
U 8318 ; WX 288 ; N uni207E ; G 2906
U 8319 ; WX 456 ; N uni207F ; G 2907
U 8320 ; WX 438 ; N uni2080 ; G 2908
U 8321 ; WX 438 ; N uni2081 ; G 2909
U 8322 ; WX 438 ; N uni2082 ; G 2910
U 8323 ; WX 438 ; N uni2083 ; G 2911
U 8324 ; WX 438 ; N uni2084 ; G 2912
U 8325 ; WX 438 ; N uni2085 ; G 2913
U 8326 ; WX 438 ; N uni2086 ; G 2914
U 8327 ; WX 438 ; N uni2087 ; G 2915
U 8328 ; WX 438 ; N uni2088 ; G 2916
U 8329 ; WX 438 ; N uni2089 ; G 2917
U 8330 ; WX 528 ; N uni208A ; G 2918
U 8331 ; WX 528 ; N uni208B ; G 2919
U 8332 ; WX 528 ; N uni208C ; G 2920
U 8333 ; WX 288 ; N uni208D ; G 2921
U 8334 ; WX 288 ; N uni208E ; G 2922
U 8336 ; WX 458 ; N uni2090 ; G 2923
U 8337 ; WX 479 ; N uni2091 ; G 2924
U 8338 ; WX 488 ; N uni2092 ; G 2925
U 8339 ; WX 413 ; N uni2093 ; G 2926
U 8340 ; WX 479 ; N uni2094 ; G 2927
U 8341 ; WX 456 ; N uni2095 ; G 2928
U 8342 ; WX 487 ; N uni2096 ; G 2929
U 8343 ; WX 219 ; N uni2097 ; G 2930
U 8344 ; WX 664 ; N uni2098 ; G 2931
U 8345 ; WX 456 ; N uni2099 ; G 2932
U 8346 ; WX 479 ; N uni209A ; G 2933
U 8347 ; WX 381 ; N uni209B ; G 2934
U 8348 ; WX 388 ; N uni209C ; G 2935
U 8352 ; WX 929 ; N uni20A0 ; G 2936
U 8353 ; WX 696 ; N colonmonetary ; G 2937
U 8354 ; WX 696 ; N uni20A2 ; G 2938
U 8355 ; WX 696 ; N franc ; G 2939
U 8356 ; WX 696 ; N lira ; G 2940
U 8357 ; WX 1042 ; N uni20A5 ; G 2941
U 8358 ; WX 696 ; N uni20A6 ; G 2942
U 8359 ; WX 1518 ; N peseta ; G 2943
U 8360 ; WX 1205 ; N uni20A8 ; G 2944
U 8361 ; WX 1103 ; N uni20A9 ; G 2945
U 8362 ; WX 904 ; N uni20AA ; G 2946
U 8363 ; WX 696 ; N dong ; G 2947
U 8364 ; WX 696 ; N Euro ; G 2948
U 8365 ; WX 696 ; N uni20AD ; G 2949
U 8366 ; WX 696 ; N uni20AE ; G 2950
U 8367 ; WX 1392 ; N uni20AF ; G 2951
U 8368 ; WX 696 ; N uni20B0 ; G 2952
U 8369 ; WX 696 ; N uni20B1 ; G 2953
U 8370 ; WX 696 ; N uni20B2 ; G 2954
U 8371 ; WX 696 ; N uni20B3 ; G 2955
U 8372 ; WX 859 ; N uni20B4 ; G 2956
U 8373 ; WX 696 ; N uni20B5 ; G 2957
U 8376 ; WX 696 ; N uni20B8 ; G 2958
U 8377 ; WX 696 ; N uni20B9 ; G 2959
U 8378 ; WX 696 ; N uni20BA ; G 2960
U 8381 ; WX 696 ; N uni20BD ; G 2961
U 8400 ; WX 0 ; N uni20D0 ; G 2962
U 8401 ; WX 0 ; N uni20D1 ; G 2963
U 8406 ; WX 0 ; N uni20D6 ; G 2964
U 8407 ; WX 0 ; N uni20D7 ; G 2965
U 8411 ; WX 0 ; N uni20DB ; G 2966
U 8412 ; WX 0 ; N uni20DC ; G 2967
U 8417 ; WX 0 ; N uni20E1 ; G 2968
U 8448 ; WX 1120 ; N uni2100 ; G 2969
U 8449 ; WX 1170 ; N uni2101 ; G 2970
U 8450 ; WX 734 ; N uni2102 ; G 2971
U 8451 ; WX 1211 ; N uni2103 ; G 2972
U 8452 ; WX 896 ; N uni2104 ; G 2973
U 8453 ; WX 1091 ; N uni2105 ; G 2974
U 8454 ; WX 1144 ; N uni2106 ; G 2975
U 8455 ; WX 614 ; N uni2107 ; G 2976
U 8456 ; WX 698 ; N uni2108 ; G 2977
U 8457 ; WX 1086 ; N uni2109 ; G 2978
U 8459 ; WX 1073 ; N uni210B ; G 2979
U 8460 ; WX 913 ; N uni210C ; G 2980
U 8461 ; WX 888 ; N uni210D ; G 2981
U 8462 ; WX 712 ; N uni210E ; G 2982
U 8463 ; WX 712 ; N uni210F ; G 2983
U 8464 ; WX 597 ; N uni2110 ; G 2984
U 8465 ; WX 697 ; N Ifraktur ; G 2985
U 8466 ; WX 856 ; N uni2112 ; G 2986
U 8467 ; WX 472 ; N uni2113 ; G 2987
U 8468 ; WX 974 ; N uni2114 ; G 2988
U 8469 ; WX 837 ; N uni2115 ; G 2989
U 8470 ; WX 1203 ; N uni2116 ; G 2990
U 8471 ; WX 1000 ; N uni2117 ; G 2991
U 8472 ; WX 697 ; N weierstrass ; G 2992
U 8473 ; WX 750 ; N uni2119 ; G 2993
U 8474 ; WX 850 ; N uni211A ; G 2994
U 8475 ; WX 938 ; N uni211B ; G 2995
U 8476 ; WX 814 ; N Rfraktur ; G 2996
U 8477 ; WX 801 ; N uni211D ; G 2997
U 8478 ; WX 896 ; N prescription ; G 2998
U 8479 ; WX 710 ; N uni211F ; G 2999
U 8480 ; WX 1020 ; N uni2120 ; G 3000
U 8481 ; WX 1281 ; N uni2121 ; G 3001
U 8482 ; WX 1000 ; N trademark ; G 3002
U 8483 ; WX 755 ; N uni2123 ; G 3003
U 8484 ; WX 754 ; N uni2124 ; G 3004
U 8485 ; WX 578 ; N uni2125 ; G 3005
U 8486 ; WX 850 ; N uni2126 ; G 3006
U 8487 ; WX 850 ; N uni2127 ; G 3007
U 8488 ; WX 763 ; N uni2128 ; G 3008
U 8489 ; WX 338 ; N uni2129 ; G 3009
U 8490 ; WX 775 ; N uni212A ; G 3010
U 8491 ; WX 774 ; N uni212B ; G 3011
U 8492 ; WX 928 ; N uni212C ; G 3012
U 8493 ; WX 818 ; N uni212D ; G 3013
U 8494 ; WX 854 ; N estimated ; G 3014
U 8495 ; WX 636 ; N uni212F ; G 3015
U 8496 ; WX 729 ; N uni2130 ; G 3016
U 8497 ; WX 808 ; N uni2131 ; G 3017
U 8498 ; WX 683 ; N uni2132 ; G 3018
U 8499 ; WX 1184 ; N uni2133 ; G 3019
U 8500 ; WX 465 ; N uni2134 ; G 3020
U 8501 ; WX 794 ; N aleph ; G 3021
U 8502 ; WX 731 ; N uni2136 ; G 3022
U 8503 ; WX 494 ; N uni2137 ; G 3023
U 8504 ; WX 684 ; N uni2138 ; G 3024
U 8505 ; WX 380 ; N uni2139 ; G 3025
U 8506 ; WX 945 ; N uni213A ; G 3026
U 8507 ; WX 1348 ; N uni213B ; G 3027
U 8508 ; WX 790 ; N uni213C ; G 3028
U 8509 ; WX 737 ; N uni213D ; G 3029
U 8510 ; WX 654 ; N uni213E ; G 3030
U 8511 ; WX 863 ; N uni213F ; G 3031
U 8512 ; WX 840 ; N uni2140 ; G 3032
U 8513 ; WX 775 ; N uni2141 ; G 3033
U 8514 ; WX 557 ; N uni2142 ; G 3034
U 8515 ; WX 637 ; N uni2143 ; G 3035
U 8516 ; WX 760 ; N uni2144 ; G 3036
U 8517 ; WX 830 ; N uni2145 ; G 3037
U 8518 ; WX 716 ; N uni2146 ; G 3038
U 8519 ; WX 678 ; N uni2147 ; G 3039
U 8520 ; WX 343 ; N uni2148 ; G 3040
U 8521 ; WX 343 ; N uni2149 ; G 3041
U 8523 ; WX 872 ; N uni214B ; G 3042
U 8526 ; WX 547 ; N uni214E ; G 3043
U 8528 ; WX 1035 ; N uni2150 ; G 3044
U 8529 ; WX 1035 ; N uni2151 ; G 3045
U 8530 ; WX 1483 ; N uni2152 ; G 3046
U 8531 ; WX 1035 ; N onethird ; G 3047
U 8532 ; WX 1035 ; N twothirds ; G 3048
U 8533 ; WX 1035 ; N uni2155 ; G 3049
U 8534 ; WX 1035 ; N uni2156 ; G 3050
U 8535 ; WX 1035 ; N uni2157 ; G 3051
U 8536 ; WX 1035 ; N uni2158 ; G 3052
U 8537 ; WX 1035 ; N uni2159 ; G 3053
U 8538 ; WX 1035 ; N uni215A ; G 3054
U 8539 ; WX 1035 ; N oneeighth ; G 3055
U 8540 ; WX 1035 ; N threeeighths ; G 3056
U 8541 ; WX 1035 ; N fiveeighths ; G 3057
U 8542 ; WX 1035 ; N seveneighths ; G 3058
U 8543 ; WX 615 ; N uni215F ; G 3059
U 8544 ; WX 372 ; N uni2160 ; G 3060
U 8545 ; WX 659 ; N uni2161 ; G 3061
U 8546 ; WX 945 ; N uni2162 ; G 3062
U 8547 ; WX 1099 ; N uni2163 ; G 3063
U 8548 ; WX 774 ; N uni2164 ; G 3064
U 8549 ; WX 1099 ; N uni2165 ; G 3065
U 8550 ; WX 1386 ; N uni2166 ; G 3066
U 8551 ; WX 1672 ; N uni2167 ; G 3067
U 8552 ; WX 1121 ; N uni2168 ; G 3068
U 8553 ; WX 771 ; N uni2169 ; G 3069
U 8554 ; WX 1120 ; N uni216A ; G 3070
U 8555 ; WX 1407 ; N uni216B ; G 3071
U 8556 ; WX 637 ; N uni216C ; G 3072
U 8557 ; WX 734 ; N uni216D ; G 3073
U 8558 ; WX 830 ; N uni216E ; G 3074
U 8559 ; WX 995 ; N uni216F ; G 3075
U 8560 ; WX 343 ; N uni2170 ; G 3076
U 8561 ; WX 607 ; N uni2171 ; G 3077
U 8562 ; WX 872 ; N uni2172 ; G 3078
U 8563 ; WX 984 ; N uni2173 ; G 3079
U 8564 ; WX 652 ; N uni2174 ; G 3080
U 8565 ; WX 962 ; N uni2175 ; G 3081
U 8566 ; WX 1227 ; N uni2176 ; G 3082
U 8567 ; WX 1491 ; N uni2177 ; G 3083
U 8568 ; WX 969 ; N uni2178 ; G 3084
U 8569 ; WX 645 ; N uni2179 ; G 3085
U 8570 ; WX 969 ; N uni217A ; G 3086
U 8571 ; WX 1233 ; N uni217B ; G 3087
U 8572 ; WX 343 ; N uni217C ; G 3088
U 8573 ; WX 593 ; N uni217D ; G 3089
U 8574 ; WX 716 ; N uni217E ; G 3090
U 8575 ; WX 1042 ; N uni217F ; G 3091
U 8576 ; WX 1289 ; N uni2180 ; G 3092
U 8577 ; WX 830 ; N uni2181 ; G 3093
U 8578 ; WX 1289 ; N uni2182 ; G 3094
U 8579 ; WX 734 ; N uni2183 ; G 3095
U 8580 ; WX 593 ; N uni2184 ; G 3096
U 8581 ; WX 734 ; N uni2185 ; G 3097
U 8585 ; WX 1035 ; N uni2189 ; G 3098
U 8592 ; WX 838 ; N arrowleft ; G 3099
U 8593 ; WX 838 ; N arrowup ; G 3100
U 8594 ; WX 838 ; N arrowright ; G 3101
U 8595 ; WX 838 ; N arrowdown ; G 3102
U 8596 ; WX 838 ; N arrowboth ; G 3103
U 8597 ; WX 838 ; N arrowupdn ; G 3104
U 8598 ; WX 838 ; N uni2196 ; G 3105
U 8599 ; WX 838 ; N uni2197 ; G 3106
U 8600 ; WX 838 ; N uni2198 ; G 3107
U 8601 ; WX 838 ; N uni2199 ; G 3108
U 8602 ; WX 838 ; N uni219A ; G 3109
U 8603 ; WX 838 ; N uni219B ; G 3110
U 8604 ; WX 838 ; N uni219C ; G 3111
U 8605 ; WX 838 ; N uni219D ; G 3112
U 8606 ; WX 838 ; N uni219E ; G 3113
U 8607 ; WX 838 ; N uni219F ; G 3114
U 8608 ; WX 838 ; N uni21A0 ; G 3115
U 8609 ; WX 838 ; N uni21A1 ; G 3116
U 8610 ; WX 838 ; N uni21A2 ; G 3117
U 8611 ; WX 838 ; N uni21A3 ; G 3118
U 8612 ; WX 838 ; N uni21A4 ; G 3119
U 8613 ; WX 838 ; N uni21A5 ; G 3120
U 8614 ; WX 838 ; N uni21A6 ; G 3121
U 8615 ; WX 838 ; N uni21A7 ; G 3122
U 8616 ; WX 838 ; N arrowupdnbse ; G 3123
U 8617 ; WX 838 ; N uni21A9 ; G 3124
U 8618 ; WX 838 ; N uni21AA ; G 3125
U 8619 ; WX 838 ; N uni21AB ; G 3126
U 8620 ; WX 838 ; N uni21AC ; G 3127
U 8621 ; WX 838 ; N uni21AD ; G 3128
U 8622 ; WX 838 ; N uni21AE ; G 3129
U 8623 ; WX 838 ; N uni21AF ; G 3130
U 8624 ; WX 838 ; N uni21B0 ; G 3131
U 8625 ; WX 838 ; N uni21B1 ; G 3132
U 8626 ; WX 838 ; N uni21B2 ; G 3133
U 8627 ; WX 838 ; N uni21B3 ; G 3134
U 8628 ; WX 838 ; N uni21B4 ; G 3135
U 8629 ; WX 838 ; N carriagereturn ; G 3136
U 8630 ; WX 838 ; N uni21B6 ; G 3137
U 8631 ; WX 838 ; N uni21B7 ; G 3138
U 8632 ; WX 838 ; N uni21B8 ; G 3139
U 8633 ; WX 838 ; N uni21B9 ; G 3140
U 8634 ; WX 838 ; N uni21BA ; G 3141
U 8635 ; WX 838 ; N uni21BB ; G 3142
U 8636 ; WX 838 ; N uni21BC ; G 3143
U 8637 ; WX 838 ; N uni21BD ; G 3144
U 8638 ; WX 838 ; N uni21BE ; G 3145
U 8639 ; WX 838 ; N uni21BF ; G 3146
U 8640 ; WX 838 ; N uni21C0 ; G 3147
U 8641 ; WX 838 ; N uni21C1 ; G 3148
U 8642 ; WX 838 ; N uni21C2 ; G 3149
U 8643 ; WX 838 ; N uni21C3 ; G 3150
U 8644 ; WX 838 ; N uni21C4 ; G 3151
U 8645 ; WX 838 ; N uni21C5 ; G 3152
U 8646 ; WX 838 ; N uni21C6 ; G 3153
U 8647 ; WX 838 ; N uni21C7 ; G 3154
U 8648 ; WX 838 ; N uni21C8 ; G 3155
U 8649 ; WX 838 ; N uni21C9 ; G 3156
U 8650 ; WX 838 ; N uni21CA ; G 3157
U 8651 ; WX 838 ; N uni21CB ; G 3158
U 8652 ; WX 838 ; N uni21CC ; G 3159
U 8653 ; WX 838 ; N uni21CD ; G 3160
U 8654 ; WX 838 ; N uni21CE ; G 3161
U 8655 ; WX 838 ; N uni21CF ; G 3162
U 8656 ; WX 838 ; N arrowdblleft ; G 3163
U 8657 ; WX 838 ; N arrowdblup ; G 3164
U 8658 ; WX 838 ; N arrowdblright ; G 3165
U 8659 ; WX 838 ; N arrowdbldown ; G 3166
U 8660 ; WX 838 ; N arrowdblboth ; G 3167
U 8661 ; WX 838 ; N uni21D5 ; G 3168
U 8662 ; WX 838 ; N uni21D6 ; G 3169
U 8663 ; WX 838 ; N uni21D7 ; G 3170
U 8664 ; WX 838 ; N uni21D8 ; G 3171
U 8665 ; WX 838 ; N uni21D9 ; G 3172
U 8666 ; WX 838 ; N uni21DA ; G 3173
U 8667 ; WX 838 ; N uni21DB ; G 3174
U 8668 ; WX 838 ; N uni21DC ; G 3175
U 8669 ; WX 838 ; N uni21DD ; G 3176
U 8670 ; WX 838 ; N uni21DE ; G 3177
U 8671 ; WX 838 ; N uni21DF ; G 3178
U 8672 ; WX 838 ; N uni21E0 ; G 3179
U 8673 ; WX 838 ; N uni21E1 ; G 3180
U 8674 ; WX 838 ; N uni21E2 ; G 3181
U 8675 ; WX 838 ; N uni21E3 ; G 3182
U 8676 ; WX 838 ; N uni21E4 ; G 3183
U 8677 ; WX 838 ; N uni21E5 ; G 3184
U 8678 ; WX 838 ; N uni21E6 ; G 3185
U 8679 ; WX 838 ; N uni21E7 ; G 3186
U 8680 ; WX 838 ; N uni21E8 ; G 3187
U 8681 ; WX 838 ; N uni21E9 ; G 3188
U 8682 ; WX 838 ; N uni21EA ; G 3189
U 8683 ; WX 838 ; N uni21EB ; G 3190
U 8684 ; WX 838 ; N uni21EC ; G 3191
U 8685 ; WX 838 ; N uni21ED ; G 3192
U 8686 ; WX 838 ; N uni21EE ; G 3193
U 8687 ; WX 838 ; N uni21EF ; G 3194
U 8688 ; WX 838 ; N uni21F0 ; G 3195
U 8689 ; WX 838 ; N uni21F1 ; G 3196
U 8690 ; WX 838 ; N uni21F2 ; G 3197
U 8691 ; WX 838 ; N uni21F3 ; G 3198
U 8692 ; WX 838 ; N uni21F4 ; G 3199
U 8693 ; WX 838 ; N uni21F5 ; G 3200
U 8694 ; WX 838 ; N uni21F6 ; G 3201
U 8695 ; WX 838 ; N uni21F7 ; G 3202
U 8696 ; WX 838 ; N uni21F8 ; G 3203
U 8697 ; WX 838 ; N uni21F9 ; G 3204
U 8698 ; WX 838 ; N uni21FA ; G 3205
U 8699 ; WX 838 ; N uni21FB ; G 3206
U 8700 ; WX 838 ; N uni21FC ; G 3207
U 8701 ; WX 838 ; N uni21FD ; G 3208
U 8702 ; WX 838 ; N uni21FE ; G 3209
U 8703 ; WX 838 ; N uni21FF ; G 3210
U 8704 ; WX 774 ; N universal ; G 3211
U 8705 ; WX 696 ; N uni2201 ; G 3212
U 8706 ; WX 544 ; N partialdiff ; G 3213
U 8707 ; WX 683 ; N existential ; G 3214
U 8708 ; WX 683 ; N uni2204 ; G 3215
U 8709 ; WX 856 ; N emptyset ; G 3216
U 8710 ; WX 697 ; N increment ; G 3217
U 8711 ; WX 697 ; N gradient ; G 3218
U 8712 ; WX 896 ; N element ; G 3219
U 8713 ; WX 896 ; N notelement ; G 3220
U 8714 ; WX 750 ; N uni220A ; G 3221
U 8715 ; WX 896 ; N suchthat ; G 3222
U 8716 ; WX 896 ; N uni220C ; G 3223
U 8717 ; WX 750 ; N uni220D ; G 3224
U 8718 ; WX 636 ; N uni220E ; G 3225
U 8719 ; WX 787 ; N product ; G 3226
U 8720 ; WX 787 ; N uni2210 ; G 3227
U 8721 ; WX 718 ; N summation ; G 3228
U 8722 ; WX 838 ; N minus ; G 3229
U 8723 ; WX 838 ; N uni2213 ; G 3230
U 8724 ; WX 696 ; N uni2214 ; G 3231
U 8725 ; WX 365 ; N uni2215 ; G 3232
U 8726 ; WX 696 ; N uni2216 ; G 3233
U 8727 ; WX 838 ; N asteriskmath ; G 3234
U 8728 ; WX 626 ; N uni2218 ; G 3235
U 8729 ; WX 380 ; N uni2219 ; G 3236
U 8730 ; WX 667 ; N radical ; G 3237
U 8731 ; WX 667 ; N uni221B ; G 3238
U 8732 ; WX 667 ; N uni221C ; G 3239
U 8733 ; WX 712 ; N proportional ; G 3240
U 8734 ; WX 833 ; N infinity ; G 3241
U 8735 ; WX 838 ; N orthogonal ; G 3242
U 8736 ; WX 896 ; N angle ; G 3243
U 8737 ; WX 896 ; N uni2221 ; G 3244
U 8738 ; WX 838 ; N uni2222 ; G 3245
U 8739 ; WX 500 ; N uni2223 ; G 3246
U 8740 ; WX 500 ; N uni2224 ; G 3247
U 8741 ; WX 500 ; N uni2225 ; G 3248
U 8742 ; WX 500 ; N uni2226 ; G 3249
U 8743 ; WX 812 ; N logicaland ; G 3250
U 8744 ; WX 812 ; N logicalor ; G 3251
U 8745 ; WX 812 ; N intersection ; G 3252
U 8746 ; WX 812 ; N union ; G 3253
U 8747 ; WX 610 ; N integral ; G 3254
U 8748 ; WX 929 ; N uni222C ; G 3255
U 8749 ; WX 1295 ; N uni222D ; G 3256
U 8750 ; WX 563 ; N uni222E ; G 3257
U 8751 ; WX 977 ; N uni222F ; G 3258
U 8752 ; WX 1313 ; N uni2230 ; G 3259
U 8753 ; WX 563 ; N uni2231 ; G 3260
U 8754 ; WX 563 ; N uni2232 ; G 3261
U 8755 ; WX 563 ; N uni2233 ; G 3262
U 8756 ; WX 696 ; N therefore ; G 3263
U 8757 ; WX 696 ; N uni2235 ; G 3264
U 8758 ; WX 294 ; N uni2236 ; G 3265
U 8759 ; WX 696 ; N uni2237 ; G 3266
U 8760 ; WX 838 ; N uni2238 ; G 3267
U 8761 ; WX 838 ; N uni2239 ; G 3268
U 8762 ; WX 838 ; N uni223A ; G 3269
U 8763 ; WX 838 ; N uni223B ; G 3270
U 8764 ; WX 838 ; N similar ; G 3271
U 8765 ; WX 838 ; N uni223D ; G 3272
U 8766 ; WX 838 ; N uni223E ; G 3273
U 8767 ; WX 838 ; N uni223F ; G 3274
U 8768 ; WX 375 ; N uni2240 ; G 3275
U 8769 ; WX 838 ; N uni2241 ; G 3276
U 8770 ; WX 838 ; N uni2242 ; G 3277
U 8771 ; WX 838 ; N uni2243 ; G 3278
U 8772 ; WX 838 ; N uni2244 ; G 3279
U 8773 ; WX 838 ; N congruent ; G 3280
U 8774 ; WX 838 ; N uni2246 ; G 3281
U 8775 ; WX 838 ; N uni2247 ; G 3282
U 8776 ; WX 838 ; N approxequal ; G 3283
U 8777 ; WX 838 ; N uni2249 ; G 3284
U 8778 ; WX 838 ; N uni224A ; G 3285
U 8779 ; WX 838 ; N uni224B ; G 3286
U 8780 ; WX 838 ; N uni224C ; G 3287
U 8781 ; WX 838 ; N uni224D ; G 3288
U 8782 ; WX 838 ; N uni224E ; G 3289
U 8783 ; WX 838 ; N uni224F ; G 3290
U 8784 ; WX 838 ; N uni2250 ; G 3291
U 8785 ; WX 838 ; N uni2251 ; G 3292
U 8786 ; WX 838 ; N uni2252 ; G 3293
U 8787 ; WX 838 ; N uni2253 ; G 3294
U 8788 ; WX 1063 ; N uni2254 ; G 3295
U 8789 ; WX 1063 ; N uni2255 ; G 3296
U 8790 ; WX 838 ; N uni2256 ; G 3297
U 8791 ; WX 838 ; N uni2257 ; G 3298
U 8792 ; WX 838 ; N uni2258 ; G 3299
U 8793 ; WX 838 ; N uni2259 ; G 3300
U 8794 ; WX 838 ; N uni225A ; G 3301
U 8795 ; WX 838 ; N uni225B ; G 3302
U 8796 ; WX 838 ; N uni225C ; G 3303
U 8797 ; WX 838 ; N uni225D ; G 3304
U 8798 ; WX 838 ; N uni225E ; G 3305
U 8799 ; WX 838 ; N uni225F ; G 3306
U 8800 ; WX 838 ; N notequal ; G 3307
U 8801 ; WX 838 ; N equivalence ; G 3308
U 8802 ; WX 838 ; N uni2262 ; G 3309
U 8803 ; WX 838 ; N uni2263 ; G 3310
U 8804 ; WX 838 ; N lessequal ; G 3311
U 8805 ; WX 838 ; N greaterequal ; G 3312
U 8806 ; WX 838 ; N uni2266 ; G 3313
U 8807 ; WX 838 ; N uni2267 ; G 3314
U 8808 ; WX 841 ; N uni2268 ; G 3315
U 8809 ; WX 841 ; N uni2269 ; G 3316
U 8810 ; WX 1047 ; N uni226A ; G 3317
U 8811 ; WX 1047 ; N uni226B ; G 3318
U 8812 ; WX 500 ; N uni226C ; G 3319
U 8813 ; WX 838 ; N uni226D ; G 3320
U 8814 ; WX 838 ; N uni226E ; G 3321
U 8815 ; WX 838 ; N uni226F ; G 3322
U 8816 ; WX 838 ; N uni2270 ; G 3323
U 8817 ; WX 838 ; N uni2271 ; G 3324
U 8818 ; WX 838 ; N uni2272 ; G 3325
U 8819 ; WX 838 ; N uni2273 ; G 3326
U 8820 ; WX 838 ; N uni2274 ; G 3327
U 8821 ; WX 838 ; N uni2275 ; G 3328
U 8822 ; WX 838 ; N uni2276 ; G 3329
U 8823 ; WX 838 ; N uni2277 ; G 3330
U 8824 ; WX 838 ; N uni2278 ; G 3331
U 8825 ; WX 838 ; N uni2279 ; G 3332
U 8826 ; WX 838 ; N uni227A ; G 3333
U 8827 ; WX 838 ; N uni227B ; G 3334
U 8828 ; WX 838 ; N uni227C ; G 3335
U 8829 ; WX 838 ; N uni227D ; G 3336
U 8830 ; WX 838 ; N uni227E ; G 3337
U 8831 ; WX 838 ; N uni227F ; G 3338
U 8832 ; WX 838 ; N uni2280 ; G 3339
U 8833 ; WX 838 ; N uni2281 ; G 3340
U 8834 ; WX 838 ; N propersubset ; G 3341
U 8835 ; WX 838 ; N propersuperset ; G 3342
U 8836 ; WX 838 ; N notsubset ; G 3343
U 8837 ; WX 838 ; N uni2285 ; G 3344
U 8838 ; WX 838 ; N reflexsubset ; G 3345
U 8839 ; WX 838 ; N reflexsuperset ; G 3346
U 8840 ; WX 838 ; N uni2288 ; G 3347
U 8841 ; WX 838 ; N uni2289 ; G 3348
U 8842 ; WX 838 ; N uni228A ; G 3349
U 8843 ; WX 838 ; N uni228B ; G 3350
U 8844 ; WX 812 ; N uni228C ; G 3351
U 8845 ; WX 812 ; N uni228D ; G 3352
U 8846 ; WX 812 ; N uni228E ; G 3353
U 8847 ; WX 838 ; N uni228F ; G 3354
U 8848 ; WX 838 ; N uni2290 ; G 3355
U 8849 ; WX 838 ; N uni2291 ; G 3356
U 8850 ; WX 838 ; N uni2292 ; G 3357
U 8851 ; WX 796 ; N uni2293 ; G 3358
U 8852 ; WX 796 ; N uni2294 ; G 3359
U 8853 ; WX 838 ; N circleplus ; G 3360
U 8854 ; WX 838 ; N uni2296 ; G 3361
U 8855 ; WX 838 ; N circlemultiply ; G 3362
U 8856 ; WX 838 ; N uni2298 ; G 3363
U 8857 ; WX 838 ; N uni2299 ; G 3364
U 8858 ; WX 838 ; N uni229A ; G 3365
U 8859 ; WX 838 ; N uni229B ; G 3366
U 8860 ; WX 838 ; N uni229C ; G 3367
U 8861 ; WX 838 ; N uni229D ; G 3368
U 8862 ; WX 838 ; N uni229E ; G 3369
U 8863 ; WX 838 ; N uni229F ; G 3370
U 8864 ; WX 838 ; N uni22A0 ; G 3371
U 8865 ; WX 838 ; N uni22A1 ; G 3372
U 8866 ; WX 914 ; N uni22A2 ; G 3373
U 8867 ; WX 914 ; N uni22A3 ; G 3374
U 8868 ; WX 914 ; N uni22A4 ; G 3375
U 8869 ; WX 914 ; N perpendicular ; G 3376
U 8870 ; WX 542 ; N uni22A6 ; G 3377
U 8871 ; WX 542 ; N uni22A7 ; G 3378
U 8872 ; WX 914 ; N uni22A8 ; G 3379
U 8873 ; WX 914 ; N uni22A9 ; G 3380
U 8874 ; WX 914 ; N uni22AA ; G 3381
U 8875 ; WX 914 ; N uni22AB ; G 3382
U 8876 ; WX 914 ; N uni22AC ; G 3383
U 8877 ; WX 914 ; N uni22AD ; G 3384
U 8878 ; WX 914 ; N uni22AE ; G 3385
U 8879 ; WX 914 ; N uni22AF ; G 3386
U 8880 ; WX 838 ; N uni22B0 ; G 3387
U 8881 ; WX 838 ; N uni22B1 ; G 3388
U 8882 ; WX 838 ; N uni22B2 ; G 3389
U 8883 ; WX 838 ; N uni22B3 ; G 3390
U 8884 ; WX 838 ; N uni22B4 ; G 3391
U 8885 ; WX 838 ; N uni22B5 ; G 3392
U 8886 ; WX 1000 ; N uni22B6 ; G 3393
U 8887 ; WX 1000 ; N uni22B7 ; G 3394
U 8888 ; WX 838 ; N uni22B8 ; G 3395
U 8889 ; WX 838 ; N uni22B9 ; G 3396
U 8890 ; WX 542 ; N uni22BA ; G 3397
U 8891 ; WX 812 ; N uni22BB ; G 3398
U 8892 ; WX 812 ; N uni22BC ; G 3399
U 8893 ; WX 812 ; N uni22BD ; G 3400
U 8894 ; WX 838 ; N uni22BE ; G 3401
U 8895 ; WX 838 ; N uni22BF ; G 3402
U 8896 ; WX 843 ; N uni22C0 ; G 3403
U 8897 ; WX 843 ; N uni22C1 ; G 3404
U 8898 ; WX 843 ; N uni22C2 ; G 3405
U 8899 ; WX 843 ; N uni22C3 ; G 3406
U 8900 ; WX 626 ; N uni22C4 ; G 3407
U 8901 ; WX 380 ; N dotmath ; G 3408
U 8902 ; WX 626 ; N uni22C6 ; G 3409
U 8903 ; WX 838 ; N uni22C7 ; G 3410
U 8904 ; WX 1000 ; N uni22C8 ; G 3411
U 8905 ; WX 1000 ; N uni22C9 ; G 3412
U 8906 ; WX 1000 ; N uni22CA ; G 3413
U 8907 ; WX 1000 ; N uni22CB ; G 3414
U 8908 ; WX 1000 ; N uni22CC ; G 3415
U 8909 ; WX 838 ; N uni22CD ; G 3416
U 8910 ; WX 812 ; N uni22CE ; G 3417
U 8911 ; WX 812 ; N uni22CF ; G 3418
U 8912 ; WX 838 ; N uni22D0 ; G 3419
U 8913 ; WX 838 ; N uni22D1 ; G 3420
U 8914 ; WX 838 ; N uni22D2 ; G 3421
U 8915 ; WX 838 ; N uni22D3 ; G 3422
U 8916 ; WX 838 ; N uni22D4 ; G 3423
U 8917 ; WX 838 ; N uni22D5 ; G 3424
U 8918 ; WX 838 ; N uni22D6 ; G 3425
U 8919 ; WX 838 ; N uni22D7 ; G 3426
U 8920 ; WX 1422 ; N uni22D8 ; G 3427
U 8921 ; WX 1422 ; N uni22D9 ; G 3428
U 8922 ; WX 838 ; N uni22DA ; G 3429
U 8923 ; WX 838 ; N uni22DB ; G 3430
U 8924 ; WX 838 ; N uni22DC ; G 3431
U 8925 ; WX 838 ; N uni22DD ; G 3432
U 8926 ; WX 838 ; N uni22DE ; G 3433
U 8927 ; WX 838 ; N uni22DF ; G 3434
U 8928 ; WX 838 ; N uni22E0 ; G 3435
U 8929 ; WX 838 ; N uni22E1 ; G 3436
U 8930 ; WX 838 ; N uni22E2 ; G 3437
U 8931 ; WX 838 ; N uni22E3 ; G 3438
U 8932 ; WX 838 ; N uni22E4 ; G 3439
U 8933 ; WX 838 ; N uni22E5 ; G 3440
U 8934 ; WX 838 ; N uni22E6 ; G 3441
U 8935 ; WX 838 ; N uni22E7 ; G 3442
U 8936 ; WX 838 ; N uni22E8 ; G 3443
U 8937 ; WX 838 ; N uni22E9 ; G 3444
U 8938 ; WX 838 ; N uni22EA ; G 3445
U 8939 ; WX 838 ; N uni22EB ; G 3446
U 8940 ; WX 838 ; N uni22EC ; G 3447
U 8941 ; WX 838 ; N uni22ED ; G 3448
U 8942 ; WX 1000 ; N uni22EE ; G 3449
U 8943 ; WX 1000 ; N uni22EF ; G 3450
U 8944 ; WX 1000 ; N uni22F0 ; G 3451
U 8945 ; WX 1000 ; N uni22F1 ; G 3452
U 8946 ; WX 1158 ; N uni22F2 ; G 3453
U 8947 ; WX 896 ; N uni22F3 ; G 3454
U 8948 ; WX 750 ; N uni22F4 ; G 3455
U 8949 ; WX 896 ; N uni22F5 ; G 3456
U 8950 ; WX 896 ; N uni22F6 ; G 3457
U 8951 ; WX 750 ; N uni22F7 ; G 3458
U 8952 ; WX 896 ; N uni22F8 ; G 3459
U 8953 ; WX 896 ; N uni22F9 ; G 3460
U 8954 ; WX 1158 ; N uni22FA ; G 3461
U 8955 ; WX 896 ; N uni22FB ; G 3462
U 8956 ; WX 750 ; N uni22FC ; G 3463
U 8957 ; WX 896 ; N uni22FD ; G 3464
U 8958 ; WX 750 ; N uni22FE ; G 3465
U 8959 ; WX 896 ; N uni22FF ; G 3466
U 8960 ; WX 602 ; N uni2300 ; G 3467
U 8961 ; WX 602 ; N uni2301 ; G 3468
U 8962 ; WX 716 ; N house ; G 3469
U 8963 ; WX 838 ; N uni2303 ; G 3470
U 8964 ; WX 838 ; N uni2304 ; G 3471
U 8965 ; WX 838 ; N uni2305 ; G 3472
U 8966 ; WX 838 ; N uni2306 ; G 3473
U 8967 ; WX 488 ; N uni2307 ; G 3474
U 8968 ; WX 457 ; N uni2308 ; G 3475
U 8969 ; WX 457 ; N uni2309 ; G 3476
U 8970 ; WX 457 ; N uni230A ; G 3477
U 8971 ; WX 457 ; N uni230B ; G 3478
U 8972 ; WX 809 ; N uni230C ; G 3479
U 8973 ; WX 809 ; N uni230D ; G 3480
U 8974 ; WX 809 ; N uni230E ; G 3481
U 8975 ; WX 809 ; N uni230F ; G 3482
U 8976 ; WX 838 ; N revlogicalnot ; G 3483
U 8977 ; WX 539 ; N uni2311 ; G 3484
U 8984 ; WX 928 ; N uni2318 ; G 3485
U 8985 ; WX 838 ; N uni2319 ; G 3486
U 8988 ; WX 469 ; N uni231C ; G 3487
U 8989 ; WX 469 ; N uni231D ; G 3488
U 8990 ; WX 469 ; N uni231E ; G 3489
U 8991 ; WX 469 ; N uni231F ; G 3490
U 8992 ; WX 610 ; N integraltp ; G 3491
U 8993 ; WX 610 ; N integralbt ; G 3492
U 8996 ; WX 1152 ; N uni2324 ; G 3493
U 8997 ; WX 1152 ; N uni2325 ; G 3494
U 8998 ; WX 1414 ; N uni2326 ; G 3495
U 8999 ; WX 1152 ; N uni2327 ; G 3496
U 9000 ; WX 1443 ; N uni2328 ; G 3497
U 9003 ; WX 1414 ; N uni232B ; G 3498
U 9004 ; WX 873 ; N uni232C ; G 3499
U 9075 ; WX 390 ; N uni2373 ; G 3500
U 9076 ; WX 716 ; N uni2374 ; G 3501
U 9077 ; WX 869 ; N uni2375 ; G 3502
U 9082 ; WX 687 ; N uni237A ; G 3503
U 9085 ; WX 863 ; N uni237D ; G 3504
U 9095 ; WX 1152 ; N uni2387 ; G 3505
U 9108 ; WX 873 ; N uni2394 ; G 3506
U 9115 ; WX 500 ; N uni239B ; G 3507
U 9116 ; WX 500 ; N uni239C ; G 3508
U 9117 ; WX 500 ; N uni239D ; G 3509
U 9118 ; WX 500 ; N uni239E ; G 3510
U 9119 ; WX 500 ; N uni239F ; G 3511
U 9120 ; WX 500 ; N uni23A0 ; G 3512
U 9121 ; WX 500 ; N uni23A1 ; G 3513
U 9122 ; WX 500 ; N uni23A2 ; G 3514
U 9123 ; WX 500 ; N uni23A3 ; G 3515
U 9124 ; WX 500 ; N uni23A4 ; G 3516
U 9125 ; WX 500 ; N uni23A5 ; G 3517
U 9126 ; WX 500 ; N uni23A6 ; G 3518
U 9127 ; WX 750 ; N uni23A7 ; G 3519
U 9128 ; WX 750 ; N uni23A8 ; G 3520
U 9129 ; WX 750 ; N uni23A9 ; G 3521
U 9130 ; WX 750 ; N uni23AA ; G 3522
U 9131 ; WX 750 ; N uni23AB ; G 3523
U 9132 ; WX 750 ; N uni23AC ; G 3524
U 9133 ; WX 750 ; N uni23AD ; G 3525
U 9134 ; WX 610 ; N uni23AE ; G 3526
U 9166 ; WX 838 ; N uni23CE ; G 3527
U 9167 ; WX 945 ; N uni23CF ; G 3528
U 9187 ; WX 873 ; N uni23E3 ; G 3529
U 9189 ; WX 769 ; N uni23E5 ; G 3530
U 9192 ; WX 696 ; N uni23E8 ; G 3531
U 9250 ; WX 716 ; N uni2422 ; G 3532
U 9251 ; WX 716 ; N uni2423 ; G 3533
U 9312 ; WX 847 ; N uni2460 ; G 3534
U 9313 ; WX 847 ; N uni2461 ; G 3535
U 9314 ; WX 847 ; N uni2462 ; G 3536
U 9315 ; WX 847 ; N uni2463 ; G 3537
U 9316 ; WX 847 ; N uni2464 ; G 3538
U 9317 ; WX 847 ; N uni2465 ; G 3539
U 9318 ; WX 847 ; N uni2466 ; G 3540
U 9319 ; WX 847 ; N uni2467 ; G 3541
U 9320 ; WX 847 ; N uni2468 ; G 3542
U 9321 ; WX 847 ; N uni2469 ; G 3543
U 9472 ; WX 602 ; N SF100000 ; G 3544
U 9473 ; WX 602 ; N uni2501 ; G 3545
U 9474 ; WX 602 ; N SF110000 ; G 3546
U 9475 ; WX 602 ; N uni2503 ; G 3547
U 9476 ; WX 602 ; N uni2504 ; G 3548
U 9477 ; WX 602 ; N uni2505 ; G 3549
U 9478 ; WX 602 ; N uni2506 ; G 3550
U 9479 ; WX 602 ; N uni2507 ; G 3551
U 9480 ; WX 602 ; N uni2508 ; G 3552
U 9481 ; WX 602 ; N uni2509 ; G 3553
U 9482 ; WX 602 ; N uni250A ; G 3554
U 9483 ; WX 602 ; N uni250B ; G 3555
U 9484 ; WX 602 ; N SF010000 ; G 3556
U 9485 ; WX 602 ; N uni250D ; G 3557
U 9486 ; WX 602 ; N uni250E ; G 3558
U 9487 ; WX 602 ; N uni250F ; G 3559
U 9488 ; WX 602 ; N SF030000 ; G 3560
U 9489 ; WX 602 ; N uni2511 ; G 3561
U 9490 ; WX 602 ; N uni2512 ; G 3562
U 9491 ; WX 602 ; N uni2513 ; G 3563
U 9492 ; WX 602 ; N SF020000 ; G 3564
U 9493 ; WX 602 ; N uni2515 ; G 3565
U 9494 ; WX 602 ; N uni2516 ; G 3566
U 9495 ; WX 602 ; N uni2517 ; G 3567
U 9496 ; WX 602 ; N SF040000 ; G 3568
U 9497 ; WX 602 ; N uni2519 ; G 3569
U 9498 ; WX 602 ; N uni251A ; G 3570
U 9499 ; WX 602 ; N uni251B ; G 3571
U 9500 ; WX 602 ; N SF080000 ; G 3572
U 9501 ; WX 602 ; N uni251D ; G 3573
U 9502 ; WX 602 ; N uni251E ; G 3574
U 9503 ; WX 602 ; N uni251F ; G 3575
U 9504 ; WX 602 ; N uni2520 ; G 3576
U 9505 ; WX 602 ; N uni2521 ; G 3577
U 9506 ; WX 602 ; N uni2522 ; G 3578
U 9507 ; WX 602 ; N uni2523 ; G 3579
U 9508 ; WX 602 ; N SF090000 ; G 3580
U 9509 ; WX 602 ; N uni2525 ; G 3581
U 9510 ; WX 602 ; N uni2526 ; G 3582
U 9511 ; WX 602 ; N uni2527 ; G 3583
U 9512 ; WX 602 ; N uni2528 ; G 3584
U 9513 ; WX 602 ; N uni2529 ; G 3585
U 9514 ; WX 602 ; N uni252A ; G 3586
U 9515 ; WX 602 ; N uni252B ; G 3587
U 9516 ; WX 602 ; N SF060000 ; G 3588
U 9517 ; WX 602 ; N uni252D ; G 3589
U 9518 ; WX 602 ; N uni252E ; G 3590
U 9519 ; WX 602 ; N uni252F ; G 3591
U 9520 ; WX 602 ; N uni2530 ; G 3592
U 9521 ; WX 602 ; N uni2531 ; G 3593
U 9522 ; WX 602 ; N uni2532 ; G 3594
U 9523 ; WX 602 ; N uni2533 ; G 3595
U 9524 ; WX 602 ; N SF070000 ; G 3596
U 9525 ; WX 602 ; N uni2535 ; G 3597
U 9526 ; WX 602 ; N uni2536 ; G 3598
U 9527 ; WX 602 ; N uni2537 ; G 3599
U 9528 ; WX 602 ; N uni2538 ; G 3600
U 9529 ; WX 602 ; N uni2539 ; G 3601
U 9530 ; WX 602 ; N uni253A ; G 3602
U 9531 ; WX 602 ; N uni253B ; G 3603
U 9532 ; WX 602 ; N SF050000 ; G 3604
U 9533 ; WX 602 ; N uni253D ; G 3605
U 9534 ; WX 602 ; N uni253E ; G 3606
U 9535 ; WX 602 ; N uni253F ; G 3607
U 9536 ; WX 602 ; N uni2540 ; G 3608
U 9537 ; WX 602 ; N uni2541 ; G 3609
U 9538 ; WX 602 ; N uni2542 ; G 3610
U 9539 ; WX 602 ; N uni2543 ; G 3611
U 9540 ; WX 602 ; N uni2544 ; G 3612
U 9541 ; WX 602 ; N uni2545 ; G 3613
U 9542 ; WX 602 ; N uni2546 ; G 3614
U 9543 ; WX 602 ; N uni2547 ; G 3615
U 9544 ; WX 602 ; N uni2548 ; G 3616
U 9545 ; WX 602 ; N uni2549 ; G 3617
U 9546 ; WX 602 ; N uni254A ; G 3618
U 9547 ; WX 602 ; N uni254B ; G 3619
U 9548 ; WX 602 ; N uni254C ; G 3620
U 9549 ; WX 602 ; N uni254D ; G 3621
U 9550 ; WX 602 ; N uni254E ; G 3622
U 9551 ; WX 602 ; N uni254F ; G 3623
U 9552 ; WX 602 ; N SF430000 ; G 3624
U 9553 ; WX 602 ; N SF240000 ; G 3625
U 9554 ; WX 602 ; N SF510000 ; G 3626
U 9555 ; WX 602 ; N SF520000 ; G 3627
U 9556 ; WX 602 ; N SF390000 ; G 3628
U 9557 ; WX 602 ; N SF220000 ; G 3629
U 9558 ; WX 602 ; N SF210000 ; G 3630
U 9559 ; WX 602 ; N SF250000 ; G 3631
U 9560 ; WX 602 ; N SF500000 ; G 3632
U 9561 ; WX 602 ; N SF490000 ; G 3633
U 9562 ; WX 602 ; N SF380000 ; G 3634
U 9563 ; WX 602 ; N SF280000 ; G 3635
U 9564 ; WX 602 ; N SF270000 ; G 3636
U 9565 ; WX 602 ; N SF260000 ; G 3637
U 9566 ; WX 602 ; N SF360000 ; G 3638
U 9567 ; WX 602 ; N SF370000 ; G 3639
U 9568 ; WX 602 ; N SF420000 ; G 3640
U 9569 ; WX 602 ; N SF190000 ; G 3641
U 9570 ; WX 602 ; N SF200000 ; G 3642
U 9571 ; WX 602 ; N SF230000 ; G 3643
U 9572 ; WX 602 ; N SF470000 ; G 3644
U 9573 ; WX 602 ; N SF480000 ; G 3645
U 9574 ; WX 602 ; N SF410000 ; G 3646
U 9575 ; WX 602 ; N SF450000 ; G 3647
U 9576 ; WX 602 ; N SF460000 ; G 3648
U 9577 ; WX 602 ; N SF400000 ; G 3649
U 9578 ; WX 602 ; N SF540000 ; G 3650
U 9579 ; WX 602 ; N SF530000 ; G 3651
U 9580 ; WX 602 ; N SF440000 ; G 3652
U 9581 ; WX 602 ; N uni256D ; G 3653
U 9582 ; WX 602 ; N uni256E ; G 3654
U 9583 ; WX 602 ; N uni256F ; G 3655
U 9584 ; WX 602 ; N uni2570 ; G 3656
U 9585 ; WX 602 ; N uni2571 ; G 3657
U 9586 ; WX 602 ; N uni2572 ; G 3658
U 9587 ; WX 602 ; N uni2573 ; G 3659
U 9588 ; WX 602 ; N uni2574 ; G 3660
U 9589 ; WX 602 ; N uni2575 ; G 3661
U 9590 ; WX 602 ; N uni2576 ; G 3662
U 9591 ; WX 602 ; N uni2577 ; G 3663
U 9592 ; WX 602 ; N uni2578 ; G 3664
U 9593 ; WX 602 ; N uni2579 ; G 3665
U 9594 ; WX 602 ; N uni257A ; G 3666
U 9595 ; WX 602 ; N uni257B ; G 3667
U 9596 ; WX 602 ; N uni257C ; G 3668
U 9597 ; WX 602 ; N uni257D ; G 3669
U 9598 ; WX 602 ; N uni257E ; G 3670
U 9599 ; WX 602 ; N uni257F ; G 3671
U 9600 ; WX 769 ; N upblock ; G 3672
U 9601 ; WX 769 ; N uni2581 ; G 3673
U 9602 ; WX 769 ; N uni2582 ; G 3674
U 9603 ; WX 769 ; N uni2583 ; G 3675
U 9604 ; WX 769 ; N dnblock ; G 3676
U 9605 ; WX 769 ; N uni2585 ; G 3677
U 9606 ; WX 769 ; N uni2586 ; G 3678
U 9607 ; WX 769 ; N uni2587 ; G 3679
U 9608 ; WX 769 ; N block ; G 3680
U 9609 ; WX 769 ; N uni2589 ; G 3681
U 9610 ; WX 769 ; N uni258A ; G 3682
U 9611 ; WX 769 ; N uni258B ; G 3683
U 9612 ; WX 769 ; N lfblock ; G 3684
U 9613 ; WX 769 ; N uni258D ; G 3685
U 9614 ; WX 769 ; N uni258E ; G 3686
U 9615 ; WX 769 ; N uni258F ; G 3687
U 9616 ; WX 769 ; N rtblock ; G 3688
U 9617 ; WX 769 ; N ltshade ; G 3689
U 9618 ; WX 769 ; N shade ; G 3690
U 9619 ; WX 769 ; N dkshade ; G 3691
U 9620 ; WX 769 ; N uni2594 ; G 3692
U 9621 ; WX 769 ; N uni2595 ; G 3693
U 9622 ; WX 769 ; N uni2596 ; G 3694
U 9623 ; WX 769 ; N uni2597 ; G 3695
U 9624 ; WX 769 ; N uni2598 ; G 3696
U 9625 ; WX 769 ; N uni2599 ; G 3697
U 9626 ; WX 769 ; N uni259A ; G 3698
U 9627 ; WX 769 ; N uni259B ; G 3699
U 9628 ; WX 769 ; N uni259C ; G 3700
U 9629 ; WX 769 ; N uni259D ; G 3701
U 9630 ; WX 769 ; N uni259E ; G 3702
U 9631 ; WX 769 ; N uni259F ; G 3703
U 9632 ; WX 945 ; N filledbox ; G 3704
U 9633 ; WX 945 ; N H22073 ; G 3705
U 9634 ; WX 945 ; N uni25A2 ; G 3706
U 9635 ; WX 945 ; N uni25A3 ; G 3707
U 9636 ; WX 945 ; N uni25A4 ; G 3708
U 9637 ; WX 945 ; N uni25A5 ; G 3709
U 9638 ; WX 945 ; N uni25A6 ; G 3710
U 9639 ; WX 945 ; N uni25A7 ; G 3711
U 9640 ; WX 945 ; N uni25A8 ; G 3712
U 9641 ; WX 945 ; N uni25A9 ; G 3713
U 9642 ; WX 678 ; N H18543 ; G 3714
U 9643 ; WX 678 ; N H18551 ; G 3715
U 9644 ; WX 945 ; N filledrect ; G 3716
U 9645 ; WX 945 ; N uni25AD ; G 3717
U 9646 ; WX 550 ; N uni25AE ; G 3718
U 9647 ; WX 550 ; N uni25AF ; G 3719
U 9648 ; WX 769 ; N uni25B0 ; G 3720
U 9649 ; WX 769 ; N uni25B1 ; G 3721
U 9650 ; WX 769 ; N triagup ; G 3722
U 9651 ; WX 769 ; N uni25B3 ; G 3723
U 9652 ; WX 502 ; N uni25B4 ; G 3724
U 9653 ; WX 502 ; N uni25B5 ; G 3725
U 9654 ; WX 769 ; N uni25B6 ; G 3726
U 9655 ; WX 769 ; N uni25B7 ; G 3727
U 9656 ; WX 502 ; N uni25B8 ; G 3728
U 9657 ; WX 502 ; N uni25B9 ; G 3729
U 9658 ; WX 769 ; N triagrt ; G 3730
U 9659 ; WX 769 ; N uni25BB ; G 3731
U 9660 ; WX 769 ; N triagdn ; G 3732
U 9661 ; WX 769 ; N uni25BD ; G 3733
U 9662 ; WX 502 ; N uni25BE ; G 3734
U 9663 ; WX 502 ; N uni25BF ; G 3735
U 9664 ; WX 769 ; N uni25C0 ; G 3736
U 9665 ; WX 769 ; N uni25C1 ; G 3737
U 9666 ; WX 502 ; N uni25C2 ; G 3738
U 9667 ; WX 502 ; N uni25C3 ; G 3739
U 9668 ; WX 769 ; N triaglf ; G 3740
U 9669 ; WX 769 ; N uni25C5 ; G 3741
U 9670 ; WX 769 ; N uni25C6 ; G 3742
U 9671 ; WX 769 ; N uni25C7 ; G 3743
U 9672 ; WX 769 ; N uni25C8 ; G 3744
U 9673 ; WX 873 ; N uni25C9 ; G 3745
U 9674 ; WX 494 ; N lozenge ; G 3746
U 9675 ; WX 873 ; N circle ; G 3747
U 9676 ; WX 873 ; N uni25CC ; G 3748
U 9677 ; WX 873 ; N uni25CD ; G 3749
U 9678 ; WX 873 ; N uni25CE ; G 3750
U 9679 ; WX 873 ; N H18533 ; G 3751
U 9680 ; WX 873 ; N uni25D0 ; G 3752
U 9681 ; WX 873 ; N uni25D1 ; G 3753
U 9682 ; WX 873 ; N uni25D2 ; G 3754
U 9683 ; WX 873 ; N uni25D3 ; G 3755
U 9684 ; WX 873 ; N uni25D4 ; G 3756
U 9685 ; WX 873 ; N uni25D5 ; G 3757
U 9686 ; WX 527 ; N uni25D6 ; G 3758
U 9687 ; WX 527 ; N uni25D7 ; G 3759
U 9688 ; WX 840 ; N invbullet ; G 3760
U 9689 ; WX 970 ; N invcircle ; G 3761
U 9690 ; WX 970 ; N uni25DA ; G 3762
U 9691 ; WX 970 ; N uni25DB ; G 3763
U 9692 ; WX 387 ; N uni25DC ; G 3764
U 9693 ; WX 387 ; N uni25DD ; G 3765
U 9694 ; WX 387 ; N uni25DE ; G 3766
U 9695 ; WX 387 ; N uni25DF ; G 3767
U 9696 ; WX 769 ; N uni25E0 ; G 3768
U 9697 ; WX 769 ; N uni25E1 ; G 3769
U 9698 ; WX 769 ; N uni25E2 ; G 3770
U 9699 ; WX 769 ; N uni25E3 ; G 3771
U 9700 ; WX 769 ; N uni25E4 ; G 3772
U 9701 ; WX 769 ; N uni25E5 ; G 3773
U 9702 ; WX 639 ; N openbullet ; G 3774
U 9703 ; WX 945 ; N uni25E7 ; G 3775
U 9704 ; WX 945 ; N uni25E8 ; G 3776
U 9705 ; WX 945 ; N uni25E9 ; G 3777
U 9706 ; WX 945 ; N uni25EA ; G 3778
U 9707 ; WX 945 ; N uni25EB ; G 3779
U 9708 ; WX 769 ; N uni25EC ; G 3780
U 9709 ; WX 769 ; N uni25ED ; G 3781
U 9710 ; WX 769 ; N uni25EE ; G 3782
U 9711 ; WX 1119 ; N uni25EF ; G 3783
U 9712 ; WX 945 ; N uni25F0 ; G 3784
U 9713 ; WX 945 ; N uni25F1 ; G 3785
U 9714 ; WX 945 ; N uni25F2 ; G 3786
U 9715 ; WX 945 ; N uni25F3 ; G 3787
U 9716 ; WX 873 ; N uni25F4 ; G 3788
U 9717 ; WX 873 ; N uni25F5 ; G 3789
U 9718 ; WX 873 ; N uni25F6 ; G 3790
U 9719 ; WX 873 ; N uni25F7 ; G 3791
U 9720 ; WX 769 ; N uni25F8 ; G 3792
U 9721 ; WX 769 ; N uni25F9 ; G 3793
U 9722 ; WX 769 ; N uni25FA ; G 3794
U 9723 ; WX 830 ; N uni25FB ; G 3795
U 9724 ; WX 830 ; N uni25FC ; G 3796
U 9725 ; WX 732 ; N uni25FD ; G 3797
U 9726 ; WX 732 ; N uni25FE ; G 3798
U 9727 ; WX 769 ; N uni25FF ; G 3799
U 9728 ; WX 896 ; N uni2600 ; G 3800
U 9729 ; WX 1000 ; N uni2601 ; G 3801
U 9730 ; WX 896 ; N uni2602 ; G 3802
U 9731 ; WX 896 ; N uni2603 ; G 3803
U 9732 ; WX 896 ; N uni2604 ; G 3804
U 9733 ; WX 896 ; N uni2605 ; G 3805
U 9734 ; WX 896 ; N uni2606 ; G 3806
U 9735 ; WX 573 ; N uni2607 ; G 3807
U 9736 ; WX 896 ; N uni2608 ; G 3808
U 9737 ; WX 896 ; N uni2609 ; G 3809
U 9738 ; WX 888 ; N uni260A ; G 3810
U 9739 ; WX 888 ; N uni260B ; G 3811
U 9740 ; WX 671 ; N uni260C ; G 3812
U 9741 ; WX 1013 ; N uni260D ; G 3813
U 9742 ; WX 1246 ; N uni260E ; G 3814
U 9743 ; WX 1250 ; N uni260F ; G 3815
U 9744 ; WX 896 ; N uni2610 ; G 3816
U 9745 ; WX 896 ; N uni2611 ; G 3817
U 9746 ; WX 896 ; N uni2612 ; G 3818
U 9747 ; WX 532 ; N uni2613 ; G 3819
U 9748 ; WX 896 ; N uni2614 ; G 3820
U 9749 ; WX 896 ; N uni2615 ; G 3821
U 9750 ; WX 896 ; N uni2616 ; G 3822
U 9751 ; WX 896 ; N uni2617 ; G 3823
U 9752 ; WX 896 ; N uni2618 ; G 3824
U 9753 ; WX 896 ; N uni2619 ; G 3825
U 9754 ; WX 896 ; N uni261A ; G 3826
U 9755 ; WX 896 ; N uni261B ; G 3827
U 9756 ; WX 896 ; N uni261C ; G 3828
U 9757 ; WX 609 ; N uni261D ; G 3829
U 9758 ; WX 896 ; N uni261E ; G 3830
U 9759 ; WX 609 ; N uni261F ; G 3831
U 9760 ; WX 896 ; N uni2620 ; G 3832
U 9761 ; WX 896 ; N uni2621 ; G 3833
U 9762 ; WX 896 ; N uni2622 ; G 3834
U 9763 ; WX 896 ; N uni2623 ; G 3835
U 9764 ; WX 669 ; N uni2624 ; G 3836
U 9765 ; WX 746 ; N uni2625 ; G 3837
U 9766 ; WX 649 ; N uni2626 ; G 3838
U 9767 ; WX 784 ; N uni2627 ; G 3839
U 9768 ; WX 545 ; N uni2628 ; G 3840
U 9769 ; WX 896 ; N uni2629 ; G 3841
U 9770 ; WX 896 ; N uni262A ; G 3842
U 9771 ; WX 896 ; N uni262B ; G 3843
U 9772 ; WX 710 ; N uni262C ; G 3844
U 9773 ; WX 896 ; N uni262D ; G 3845
U 9774 ; WX 896 ; N uni262E ; G 3846
U 9775 ; WX 896 ; N uni262F ; G 3847
U 9776 ; WX 896 ; N uni2630 ; G 3848
U 9777 ; WX 896 ; N uni2631 ; G 3849
U 9778 ; WX 896 ; N uni2632 ; G 3850
U 9779 ; WX 896 ; N uni2633 ; G 3851
U 9780 ; WX 896 ; N uni2634 ; G 3852
U 9781 ; WX 896 ; N uni2635 ; G 3853
U 9782 ; WX 896 ; N uni2636 ; G 3854
U 9783 ; WX 896 ; N uni2637 ; G 3855
U 9784 ; WX 896 ; N uni2638 ; G 3856
U 9785 ; WX 1042 ; N uni2639 ; G 3857
U 9786 ; WX 1042 ; N smileface ; G 3858
U 9787 ; WX 1042 ; N invsmileface ; G 3859
U 9788 ; WX 896 ; N sun ; G 3860
U 9789 ; WX 896 ; N uni263D ; G 3861
U 9790 ; WX 896 ; N uni263E ; G 3862
U 9791 ; WX 614 ; N uni263F ; G 3863
U 9792 ; WX 732 ; N female ; G 3864
U 9793 ; WX 732 ; N uni2641 ; G 3865
U 9794 ; WX 896 ; N male ; G 3866
U 9795 ; WX 896 ; N uni2643 ; G 3867
U 9796 ; WX 896 ; N uni2644 ; G 3868
U 9797 ; WX 896 ; N uni2645 ; G 3869
U 9798 ; WX 896 ; N uni2646 ; G 3870
U 9799 ; WX 896 ; N uni2647 ; G 3871
U 9800 ; WX 896 ; N uni2648 ; G 3872
U 9801 ; WX 896 ; N uni2649 ; G 3873
U 9802 ; WX 896 ; N uni264A ; G 3874
U 9803 ; WX 896 ; N uni264B ; G 3875
U 9804 ; WX 896 ; N uni264C ; G 3876
U 9805 ; WX 896 ; N uni264D ; G 3877
U 9806 ; WX 896 ; N uni264E ; G 3878
U 9807 ; WX 896 ; N uni264F ; G 3879
U 9808 ; WX 896 ; N uni2650 ; G 3880
U 9809 ; WX 896 ; N uni2651 ; G 3881
U 9810 ; WX 896 ; N uni2652 ; G 3882
U 9811 ; WX 896 ; N uni2653 ; G 3883
U 9812 ; WX 896 ; N uni2654 ; G 3884
U 9813 ; WX 896 ; N uni2655 ; G 3885
U 9814 ; WX 896 ; N uni2656 ; G 3886
U 9815 ; WX 896 ; N uni2657 ; G 3887
U 9816 ; WX 896 ; N uni2658 ; G 3888
U 9817 ; WX 896 ; N uni2659 ; G 3889
U 9818 ; WX 896 ; N uni265A ; G 3890
U 9819 ; WX 896 ; N uni265B ; G 3891
U 9820 ; WX 896 ; N uni265C ; G 3892
U 9821 ; WX 896 ; N uni265D ; G 3893
U 9822 ; WX 896 ; N uni265E ; G 3894
U 9823 ; WX 896 ; N uni265F ; G 3895
U 9824 ; WX 896 ; N spade ; G 3896
U 9825 ; WX 896 ; N uni2661 ; G 3897
U 9826 ; WX 896 ; N uni2662 ; G 3898
U 9827 ; WX 896 ; N club ; G 3899
U 9828 ; WX 896 ; N uni2664 ; G 3900
U 9829 ; WX 896 ; N heart ; G 3901
U 9830 ; WX 896 ; N diamond ; G 3902
U 9831 ; WX 896 ; N uni2667 ; G 3903
U 9832 ; WX 896 ; N uni2668 ; G 3904
U 9833 ; WX 472 ; N uni2669 ; G 3905
U 9834 ; WX 638 ; N musicalnote ; G 3906
U 9835 ; WX 896 ; N musicalnotedbl ; G 3907
U 9836 ; WX 896 ; N uni266C ; G 3908
U 9837 ; WX 472 ; N uni266D ; G 3909
U 9838 ; WX 357 ; N uni266E ; G 3910
U 9839 ; WX 484 ; N uni266F ; G 3911
U 9840 ; WX 748 ; N uni2670 ; G 3912
U 9841 ; WX 766 ; N uni2671 ; G 3913
U 9842 ; WX 896 ; N uni2672 ; G 3914
U 9843 ; WX 896 ; N uni2673 ; G 3915
U 9844 ; WX 896 ; N uni2674 ; G 3916
U 9845 ; WX 896 ; N uni2675 ; G 3917
U 9846 ; WX 896 ; N uni2676 ; G 3918
U 9847 ; WX 896 ; N uni2677 ; G 3919
U 9848 ; WX 896 ; N uni2678 ; G 3920
U 9849 ; WX 896 ; N uni2679 ; G 3921
U 9850 ; WX 896 ; N uni267A ; G 3922
U 9851 ; WX 896 ; N uni267B ; G 3923
U 9852 ; WX 896 ; N uni267C ; G 3924
U 9853 ; WX 896 ; N uni267D ; G 3925
U 9854 ; WX 896 ; N uni267E ; G 3926
U 9855 ; WX 896 ; N uni267F ; G 3927
U 9856 ; WX 869 ; N uni2680 ; G 3928
U 9857 ; WX 869 ; N uni2681 ; G 3929
U 9858 ; WX 869 ; N uni2682 ; G 3930
U 9859 ; WX 869 ; N uni2683 ; G 3931
U 9860 ; WX 869 ; N uni2684 ; G 3932
U 9861 ; WX 869 ; N uni2685 ; G 3933
U 9862 ; WX 896 ; N uni2686 ; G 3934
U 9863 ; WX 896 ; N uni2687 ; G 3935
U 9864 ; WX 896 ; N uni2688 ; G 3936
U 9865 ; WX 896 ; N uni2689 ; G 3937
U 9866 ; WX 896 ; N uni268A ; G 3938
U 9867 ; WX 896 ; N uni268B ; G 3939
U 9868 ; WX 896 ; N uni268C ; G 3940
U 9869 ; WX 896 ; N uni268D ; G 3941
U 9870 ; WX 896 ; N uni268E ; G 3942
U 9871 ; WX 896 ; N uni268F ; G 3943
U 9872 ; WX 896 ; N uni2690 ; G 3944
U 9873 ; WX 896 ; N uni2691 ; G 3945
U 9874 ; WX 896 ; N uni2692 ; G 3946
U 9875 ; WX 896 ; N uni2693 ; G 3947
U 9876 ; WX 896 ; N uni2694 ; G 3948
U 9877 ; WX 541 ; N uni2695 ; G 3949
U 9878 ; WX 896 ; N uni2696 ; G 3950
U 9879 ; WX 896 ; N uni2697 ; G 3951
U 9880 ; WX 896 ; N uni2698 ; G 3952
U 9881 ; WX 896 ; N uni2699 ; G 3953
U 9882 ; WX 896 ; N uni269A ; G 3954
U 9883 ; WX 896 ; N uni269B ; G 3955
U 9884 ; WX 896 ; N uni269C ; G 3956
U 9886 ; WX 896 ; N uni269E ; G 3957
U 9887 ; WX 896 ; N uni269F ; G 3958
U 9888 ; WX 896 ; N uni26A0 ; G 3959
U 9889 ; WX 702 ; N uni26A1 ; G 3960
U 9890 ; WX 1004 ; N uni26A2 ; G 3961
U 9891 ; WX 1089 ; N uni26A3 ; G 3962
U 9892 ; WX 1175 ; N uni26A4 ; G 3963
U 9893 ; WX 903 ; N uni26A5 ; G 3964
U 9894 ; WX 838 ; N uni26A6 ; G 3965
U 9895 ; WX 838 ; N uni26A7 ; G 3966
U 9896 ; WX 838 ; N uni26A8 ; G 3967
U 9897 ; WX 838 ; N uni26A9 ; G 3968
U 9898 ; WX 838 ; N uni26AA ; G 3969
U 9899 ; WX 838 ; N uni26AB ; G 3970
U 9900 ; WX 838 ; N uni26AC ; G 3971
U 9901 ; WX 838 ; N uni26AD ; G 3972
U 9902 ; WX 838 ; N uni26AE ; G 3973
U 9903 ; WX 838 ; N uni26AF ; G 3974
U 9904 ; WX 844 ; N uni26B0 ; G 3975
U 9905 ; WX 838 ; N uni26B1 ; G 3976
U 9906 ; WX 732 ; N uni26B2 ; G 3977
U 9907 ; WX 732 ; N uni26B3 ; G 3978
U 9908 ; WX 732 ; N uni26B4 ; G 3979
U 9909 ; WX 732 ; N uni26B5 ; G 3980
U 9910 ; WX 850 ; N uni26B6 ; G 3981
U 9911 ; WX 732 ; N uni26B7 ; G 3982
U 9912 ; WX 732 ; N uni26B8 ; G 3983
U 9920 ; WX 838 ; N uni26C0 ; G 3984
U 9921 ; WX 838 ; N uni26C1 ; G 3985
U 9922 ; WX 838 ; N uni26C2 ; G 3986
U 9923 ; WX 838 ; N uni26C3 ; G 3987
U 9954 ; WX 732 ; N uni26E2 ; G 3988
U 9985 ; WX 838 ; N uni2701 ; G 3989
U 9986 ; WX 838 ; N uni2702 ; G 3990
U 9987 ; WX 838 ; N uni2703 ; G 3991
U 9988 ; WX 838 ; N uni2704 ; G 3992
U 9990 ; WX 838 ; N uni2706 ; G 3993
U 9991 ; WX 838 ; N uni2707 ; G 3994
U 9992 ; WX 838 ; N uni2708 ; G 3995
U 9993 ; WX 838 ; N uni2709 ; G 3996
U 9996 ; WX 838 ; N uni270C ; G 3997
U 9997 ; WX 838 ; N uni270D ; G 3998
U 9998 ; WX 838 ; N uni270E ; G 3999
U 9999 ; WX 838 ; N uni270F ; G 4000
U 10000 ; WX 838 ; N uni2710 ; G 4001
U 10001 ; WX 838 ; N uni2711 ; G 4002
U 10002 ; WX 838 ; N uni2712 ; G 4003
U 10003 ; WX 838 ; N uni2713 ; G 4004
U 10004 ; WX 838 ; N uni2714 ; G 4005
U 10005 ; WX 838 ; N uni2715 ; G 4006
U 10006 ; WX 838 ; N uni2716 ; G 4007
U 10007 ; WX 838 ; N uni2717 ; G 4008
U 10008 ; WX 838 ; N uni2718 ; G 4009
U 10009 ; WX 838 ; N uni2719 ; G 4010
U 10010 ; WX 838 ; N uni271A ; G 4011
U 10011 ; WX 838 ; N uni271B ; G 4012
U 10012 ; WX 838 ; N uni271C ; G 4013
U 10013 ; WX 838 ; N uni271D ; G 4014
U 10014 ; WX 838 ; N uni271E ; G 4015
U 10015 ; WX 838 ; N uni271F ; G 4016
U 10016 ; WX 838 ; N uni2720 ; G 4017
U 10017 ; WX 838 ; N uni2721 ; G 4018
U 10018 ; WX 838 ; N uni2722 ; G 4019
U 10019 ; WX 838 ; N uni2723 ; G 4020
U 10020 ; WX 838 ; N uni2724 ; G 4021
U 10021 ; WX 838 ; N uni2725 ; G 4022
U 10022 ; WX 838 ; N uni2726 ; G 4023
U 10023 ; WX 838 ; N uni2727 ; G 4024
U 10025 ; WX 838 ; N uni2729 ; G 4025
U 10026 ; WX 838 ; N uni272A ; G 4026
U 10027 ; WX 838 ; N uni272B ; G 4027
U 10028 ; WX 838 ; N uni272C ; G 4028
U 10029 ; WX 838 ; N uni272D ; G 4029
U 10030 ; WX 838 ; N uni272E ; G 4030
U 10031 ; WX 838 ; N uni272F ; G 4031
U 10032 ; WX 838 ; N uni2730 ; G 4032
U 10033 ; WX 838 ; N uni2731 ; G 4033
U 10034 ; WX 838 ; N uni2732 ; G 4034
U 10035 ; WX 838 ; N uni2733 ; G 4035
U 10036 ; WX 838 ; N uni2734 ; G 4036
U 10037 ; WX 838 ; N uni2735 ; G 4037
U 10038 ; WX 838 ; N uni2736 ; G 4038
U 10039 ; WX 838 ; N uni2737 ; G 4039
U 10040 ; WX 838 ; N uni2738 ; G 4040
U 10041 ; WX 838 ; N uni2739 ; G 4041
U 10042 ; WX 838 ; N uni273A ; G 4042
U 10043 ; WX 838 ; N uni273B ; G 4043
U 10044 ; WX 838 ; N uni273C ; G 4044
U 10045 ; WX 838 ; N uni273D ; G 4045
U 10046 ; WX 838 ; N uni273E ; G 4046
U 10047 ; WX 838 ; N uni273F ; G 4047
U 10048 ; WX 838 ; N uni2740 ; G 4048
U 10049 ; WX 838 ; N uni2741 ; G 4049
U 10050 ; WX 838 ; N uni2742 ; G 4050
U 10051 ; WX 838 ; N uni2743 ; G 4051
U 10052 ; WX 838 ; N uni2744 ; G 4052
U 10053 ; WX 838 ; N uni2745 ; G 4053
U 10054 ; WX 838 ; N uni2746 ; G 4054
U 10055 ; WX 838 ; N uni2747 ; G 4055
U 10056 ; WX 838 ; N uni2748 ; G 4056
U 10057 ; WX 838 ; N uni2749 ; G 4057
U 10058 ; WX 838 ; N uni274A ; G 4058
U 10059 ; WX 838 ; N uni274B ; G 4059
U 10061 ; WX 896 ; N uni274D ; G 4060
U 10063 ; WX 896 ; N uni274F ; G 4061
U 10064 ; WX 896 ; N uni2750 ; G 4062
U 10065 ; WX 896 ; N uni2751 ; G 4063
U 10066 ; WX 896 ; N uni2752 ; G 4064
U 10070 ; WX 896 ; N uni2756 ; G 4065
U 10072 ; WX 838 ; N uni2758 ; G 4066
U 10073 ; WX 838 ; N uni2759 ; G 4067
U 10074 ; WX 838 ; N uni275A ; G 4068
U 10075 ; WX 347 ; N uni275B ; G 4069
U 10076 ; WX 347 ; N uni275C ; G 4070
U 10077 ; WX 587 ; N uni275D ; G 4071
U 10078 ; WX 587 ; N uni275E ; G 4072
U 10081 ; WX 838 ; N uni2761 ; G 4073
U 10082 ; WX 838 ; N uni2762 ; G 4074
U 10083 ; WX 838 ; N uni2763 ; G 4075
U 10084 ; WX 838 ; N uni2764 ; G 4076
U 10085 ; WX 838 ; N uni2765 ; G 4077
U 10086 ; WX 838 ; N uni2766 ; G 4078
U 10087 ; WX 838 ; N uni2767 ; G 4079
U 10088 ; WX 838 ; N uni2768 ; G 4080
U 10089 ; WX 838 ; N uni2769 ; G 4081
U 10090 ; WX 838 ; N uni276A ; G 4082
U 10091 ; WX 838 ; N uni276B ; G 4083
U 10092 ; WX 838 ; N uni276C ; G 4084
U 10093 ; WX 838 ; N uni276D ; G 4085
U 10094 ; WX 838 ; N uni276E ; G 4086
U 10095 ; WX 838 ; N uni276F ; G 4087
U 10096 ; WX 838 ; N uni2770 ; G 4088
U 10097 ; WX 838 ; N uni2771 ; G 4089
U 10098 ; WX 838 ; N uni2772 ; G 4090
U 10099 ; WX 838 ; N uni2773 ; G 4091
U 10100 ; WX 838 ; N uni2774 ; G 4092
U 10101 ; WX 838 ; N uni2775 ; G 4093
U 10102 ; WX 847 ; N uni2776 ; G 4094
U 10103 ; WX 847 ; N uni2777 ; G 4095
U 10104 ; WX 847 ; N uni2778 ; G 4096
U 10105 ; WX 847 ; N uni2779 ; G 4097
U 10106 ; WX 847 ; N uni277A ; G 4098
U 10107 ; WX 847 ; N uni277B ; G 4099
U 10108 ; WX 847 ; N uni277C ; G 4100
U 10109 ; WX 847 ; N uni277D ; G 4101
U 10110 ; WX 847 ; N uni277E ; G 4102
U 10111 ; WX 847 ; N uni277F ; G 4103
U 10112 ; WX 838 ; N uni2780 ; G 4104
U 10113 ; WX 838 ; N uni2781 ; G 4105
U 10114 ; WX 838 ; N uni2782 ; G 4106
U 10115 ; WX 838 ; N uni2783 ; G 4107
U 10116 ; WX 838 ; N uni2784 ; G 4108
U 10117 ; WX 838 ; N uni2785 ; G 4109
U 10118 ; WX 838 ; N uni2786 ; G 4110
U 10119 ; WX 838 ; N uni2787 ; G 4111
U 10120 ; WX 838 ; N uni2788 ; G 4112
U 10121 ; WX 838 ; N uni2789 ; G 4113
U 10122 ; WX 838 ; N uni278A ; G 4114
U 10123 ; WX 838 ; N uni278B ; G 4115
U 10124 ; WX 838 ; N uni278C ; G 4116
U 10125 ; WX 838 ; N uni278D ; G 4117
U 10126 ; WX 838 ; N uni278E ; G 4118
U 10127 ; WX 838 ; N uni278F ; G 4119
U 10128 ; WX 838 ; N uni2790 ; G 4120
U 10129 ; WX 838 ; N uni2791 ; G 4121
U 10130 ; WX 838 ; N uni2792 ; G 4122
U 10131 ; WX 838 ; N uni2793 ; G 4123
U 10132 ; WX 838 ; N uni2794 ; G 4124
U 10136 ; WX 838 ; N uni2798 ; G 4125
U 10137 ; WX 838 ; N uni2799 ; G 4126
U 10138 ; WX 838 ; N uni279A ; G 4127
U 10139 ; WX 838 ; N uni279B ; G 4128
U 10140 ; WX 838 ; N uni279C ; G 4129
U 10141 ; WX 838 ; N uni279D ; G 4130
U 10142 ; WX 838 ; N uni279E ; G 4131
U 10143 ; WX 838 ; N uni279F ; G 4132
U 10144 ; WX 838 ; N uni27A0 ; G 4133
U 10145 ; WX 838 ; N uni27A1 ; G 4134
U 10146 ; WX 838 ; N uni27A2 ; G 4135
U 10147 ; WX 838 ; N uni27A3 ; G 4136
U 10148 ; WX 838 ; N uni27A4 ; G 4137
U 10149 ; WX 838 ; N uni27A5 ; G 4138
U 10150 ; WX 838 ; N uni27A6 ; G 4139
U 10151 ; WX 838 ; N uni27A7 ; G 4140
U 10152 ; WX 838 ; N uni27A8 ; G 4141
U 10153 ; WX 838 ; N uni27A9 ; G 4142
U 10154 ; WX 838 ; N uni27AA ; G 4143
U 10155 ; WX 838 ; N uni27AB ; G 4144
U 10156 ; WX 838 ; N uni27AC ; G 4145
U 10157 ; WX 838 ; N uni27AD ; G 4146
U 10158 ; WX 838 ; N uni27AE ; G 4147
U 10159 ; WX 838 ; N uni27AF ; G 4148
U 10161 ; WX 838 ; N uni27B1 ; G 4149
U 10162 ; WX 838 ; N uni27B2 ; G 4150
U 10163 ; WX 838 ; N uni27B3 ; G 4151
U 10164 ; WX 838 ; N uni27B4 ; G 4152
U 10165 ; WX 838 ; N uni27B5 ; G 4153
U 10166 ; WX 838 ; N uni27B6 ; G 4154
U 10167 ; WX 838 ; N uni27B7 ; G 4155
U 10168 ; WX 838 ; N uni27B8 ; G 4156
U 10169 ; WX 838 ; N uni27B9 ; G 4157
U 10170 ; WX 838 ; N uni27BA ; G 4158
U 10171 ; WX 838 ; N uni27BB ; G 4159
U 10172 ; WX 838 ; N uni27BC ; G 4160
U 10173 ; WX 838 ; N uni27BD ; G 4161
U 10174 ; WX 838 ; N uni27BE ; G 4162
U 10181 ; WX 457 ; N uni27C5 ; G 4163
U 10182 ; WX 457 ; N uni27C6 ; G 4164
U 10208 ; WX 494 ; N uni27E0 ; G 4165
U 10214 ; WX 487 ; N uni27E6 ; G 4166
U 10215 ; WX 487 ; N uni27E7 ; G 4167
U 10216 ; WX 457 ; N uni27E8 ; G 4168
U 10217 ; WX 457 ; N uni27E9 ; G 4169
U 10218 ; WX 721 ; N uni27EA ; G 4170
U 10219 ; WX 721 ; N uni27EB ; G 4171
U 10224 ; WX 838 ; N uni27F0 ; G 4172
U 10225 ; WX 838 ; N uni27F1 ; G 4173
U 10226 ; WX 838 ; N uni27F2 ; G 4174
U 10227 ; WX 838 ; N uni27F3 ; G 4175
U 10228 ; WX 1157 ; N uni27F4 ; G 4176
U 10229 ; WX 1434 ; N uni27F5 ; G 4177
U 10230 ; WX 1434 ; N uni27F6 ; G 4178
U 10231 ; WX 1434 ; N uni27F7 ; G 4179
U 10232 ; WX 1434 ; N uni27F8 ; G 4180
U 10233 ; WX 1434 ; N uni27F9 ; G 4181
U 10234 ; WX 1434 ; N uni27FA ; G 4182
U 10235 ; WX 1434 ; N uni27FB ; G 4183
U 10236 ; WX 1434 ; N uni27FC ; G 4184
U 10237 ; WX 1434 ; N uni27FD ; G 4185
U 10238 ; WX 1434 ; N uni27FE ; G 4186
U 10239 ; WX 1434 ; N uni27FF ; G 4187
U 10240 ; WX 781 ; N uni2800 ; G 4188
U 10241 ; WX 781 ; N uni2801 ; G 4189
U 10242 ; WX 781 ; N uni2802 ; G 4190
U 10243 ; WX 781 ; N uni2803 ; G 4191
U 10244 ; WX 781 ; N uni2804 ; G 4192
U 10245 ; WX 781 ; N uni2805 ; G 4193
U 10246 ; WX 781 ; N uni2806 ; G 4194
U 10247 ; WX 781 ; N uni2807 ; G 4195
U 10248 ; WX 781 ; N uni2808 ; G 4196
U 10249 ; WX 781 ; N uni2809 ; G 4197
U 10250 ; WX 781 ; N uni280A ; G 4198
U 10251 ; WX 781 ; N uni280B ; G 4199
U 10252 ; WX 781 ; N uni280C ; G 4200
U 10253 ; WX 781 ; N uni280D ; G 4201
U 10254 ; WX 781 ; N uni280E ; G 4202
U 10255 ; WX 781 ; N uni280F ; G 4203
U 10256 ; WX 781 ; N uni2810 ; G 4204
U 10257 ; WX 781 ; N uni2811 ; G 4205
U 10258 ; WX 781 ; N uni2812 ; G 4206
U 10259 ; WX 781 ; N uni2813 ; G 4207
U 10260 ; WX 781 ; N uni2814 ; G 4208
U 10261 ; WX 781 ; N uni2815 ; G 4209
U 10262 ; WX 781 ; N uni2816 ; G 4210
U 10263 ; WX 781 ; N uni2817 ; G 4211
U 10264 ; WX 781 ; N uni2818 ; G 4212
U 10265 ; WX 781 ; N uni2819 ; G 4213
U 10266 ; WX 781 ; N uni281A ; G 4214
U 10267 ; WX 781 ; N uni281B ; G 4215
U 10268 ; WX 781 ; N uni281C ; G 4216
U 10269 ; WX 781 ; N uni281D ; G 4217
U 10270 ; WX 781 ; N uni281E ; G 4218
U 10271 ; WX 781 ; N uni281F ; G 4219
U 10272 ; WX 781 ; N uni2820 ; G 4220
U 10273 ; WX 781 ; N uni2821 ; G 4221
U 10274 ; WX 781 ; N uni2822 ; G 4222
U 10275 ; WX 781 ; N uni2823 ; G 4223
U 10276 ; WX 781 ; N uni2824 ; G 4224
U 10277 ; WX 781 ; N uni2825 ; G 4225
U 10278 ; WX 781 ; N uni2826 ; G 4226
U 10279 ; WX 781 ; N uni2827 ; G 4227
U 10280 ; WX 781 ; N uni2828 ; G 4228
U 10281 ; WX 781 ; N uni2829 ; G 4229
U 10282 ; WX 781 ; N uni282A ; G 4230
U 10283 ; WX 781 ; N uni282B ; G 4231
U 10284 ; WX 781 ; N uni282C ; G 4232
U 10285 ; WX 781 ; N uni282D ; G 4233
U 10286 ; WX 781 ; N uni282E ; G 4234
U 10287 ; WX 781 ; N uni282F ; G 4235
U 10288 ; WX 781 ; N uni2830 ; G 4236
U 10289 ; WX 781 ; N uni2831 ; G 4237
U 10290 ; WX 781 ; N uni2832 ; G 4238
U 10291 ; WX 781 ; N uni2833 ; G 4239
U 10292 ; WX 781 ; N uni2834 ; G 4240
U 10293 ; WX 781 ; N uni2835 ; G 4241
U 10294 ; WX 781 ; N uni2836 ; G 4242
U 10295 ; WX 781 ; N uni2837 ; G 4243
U 10296 ; WX 781 ; N uni2838 ; G 4244
U 10297 ; WX 781 ; N uni2839 ; G 4245
U 10298 ; WX 781 ; N uni283A ; G 4246
U 10299 ; WX 781 ; N uni283B ; G 4247
U 10300 ; WX 781 ; N uni283C ; G 4248
U 10301 ; WX 781 ; N uni283D ; G 4249
U 10302 ; WX 781 ; N uni283E ; G 4250
U 10303 ; WX 781 ; N uni283F ; G 4251
U 10304 ; WX 781 ; N uni2840 ; G 4252
U 10305 ; WX 781 ; N uni2841 ; G 4253
U 10306 ; WX 781 ; N uni2842 ; G 4254
U 10307 ; WX 781 ; N uni2843 ; G 4255
U 10308 ; WX 781 ; N uni2844 ; G 4256
U 10309 ; WX 781 ; N uni2845 ; G 4257
U 10310 ; WX 781 ; N uni2846 ; G 4258
U 10311 ; WX 781 ; N uni2847 ; G 4259
U 10312 ; WX 781 ; N uni2848 ; G 4260
U 10313 ; WX 781 ; N uni2849 ; G 4261
U 10314 ; WX 781 ; N uni284A ; G 4262
U 10315 ; WX 781 ; N uni284B ; G 4263
U 10316 ; WX 781 ; N uni284C ; G 4264
U 10317 ; WX 781 ; N uni284D ; G 4265
U 10318 ; WX 781 ; N uni284E ; G 4266
U 10319 ; WX 781 ; N uni284F ; G 4267
U 10320 ; WX 781 ; N uni2850 ; G 4268
U 10321 ; WX 781 ; N uni2851 ; G 4269
U 10322 ; WX 781 ; N uni2852 ; G 4270
U 10323 ; WX 781 ; N uni2853 ; G 4271
U 10324 ; WX 781 ; N uni2854 ; G 4272
U 10325 ; WX 781 ; N uni2855 ; G 4273
U 10326 ; WX 781 ; N uni2856 ; G 4274
U 10327 ; WX 781 ; N uni2857 ; G 4275
U 10328 ; WX 781 ; N uni2858 ; G 4276
U 10329 ; WX 781 ; N uni2859 ; G 4277
U 10330 ; WX 781 ; N uni285A ; G 4278
U 10331 ; WX 781 ; N uni285B ; G 4279
U 10332 ; WX 781 ; N uni285C ; G 4280
U 10333 ; WX 781 ; N uni285D ; G 4281
U 10334 ; WX 781 ; N uni285E ; G 4282
U 10335 ; WX 781 ; N uni285F ; G 4283
U 10336 ; WX 781 ; N uni2860 ; G 4284
U 10337 ; WX 781 ; N uni2861 ; G 4285
U 10338 ; WX 781 ; N uni2862 ; G 4286
U 10339 ; WX 781 ; N uni2863 ; G 4287
U 10340 ; WX 781 ; N uni2864 ; G 4288
U 10341 ; WX 781 ; N uni2865 ; G 4289
U 10342 ; WX 781 ; N uni2866 ; G 4290
U 10343 ; WX 781 ; N uni2867 ; G 4291
U 10344 ; WX 781 ; N uni2868 ; G 4292
U 10345 ; WX 781 ; N uni2869 ; G 4293
U 10346 ; WX 781 ; N uni286A ; G 4294
U 10347 ; WX 781 ; N uni286B ; G 4295
U 10348 ; WX 781 ; N uni286C ; G 4296
U 10349 ; WX 781 ; N uni286D ; G 4297
U 10350 ; WX 781 ; N uni286E ; G 4298
U 10351 ; WX 781 ; N uni286F ; G 4299
U 10352 ; WX 781 ; N uni2870 ; G 4300
U 10353 ; WX 781 ; N uni2871 ; G 4301
U 10354 ; WX 781 ; N uni2872 ; G 4302
U 10355 ; WX 781 ; N uni2873 ; G 4303
U 10356 ; WX 781 ; N uni2874 ; G 4304
U 10357 ; WX 781 ; N uni2875 ; G 4305
U 10358 ; WX 781 ; N uni2876 ; G 4306
U 10359 ; WX 781 ; N uni2877 ; G 4307
U 10360 ; WX 781 ; N uni2878 ; G 4308
U 10361 ; WX 781 ; N uni2879 ; G 4309
U 10362 ; WX 781 ; N uni287A ; G 4310
U 10363 ; WX 781 ; N uni287B ; G 4311
U 10364 ; WX 781 ; N uni287C ; G 4312
U 10365 ; WX 781 ; N uni287D ; G 4313
U 10366 ; WX 781 ; N uni287E ; G 4314
U 10367 ; WX 781 ; N uni287F ; G 4315
U 10368 ; WX 781 ; N uni2880 ; G 4316
U 10369 ; WX 781 ; N uni2881 ; G 4317
U 10370 ; WX 781 ; N uni2882 ; G 4318
U 10371 ; WX 781 ; N uni2883 ; G 4319
U 10372 ; WX 781 ; N uni2884 ; G 4320
U 10373 ; WX 781 ; N uni2885 ; G 4321
U 10374 ; WX 781 ; N uni2886 ; G 4322
U 10375 ; WX 781 ; N uni2887 ; G 4323
U 10376 ; WX 781 ; N uni2888 ; G 4324
U 10377 ; WX 781 ; N uni2889 ; G 4325
U 10378 ; WX 781 ; N uni288A ; G 4326
U 10379 ; WX 781 ; N uni288B ; G 4327
U 10380 ; WX 781 ; N uni288C ; G 4328
U 10381 ; WX 781 ; N uni288D ; G 4329
U 10382 ; WX 781 ; N uni288E ; G 4330
U 10383 ; WX 781 ; N uni288F ; G 4331
U 10384 ; WX 781 ; N uni2890 ; G 4332
U 10385 ; WX 781 ; N uni2891 ; G 4333
U 10386 ; WX 781 ; N uni2892 ; G 4334
U 10387 ; WX 781 ; N uni2893 ; G 4335
U 10388 ; WX 781 ; N uni2894 ; G 4336
U 10389 ; WX 781 ; N uni2895 ; G 4337
U 10390 ; WX 781 ; N uni2896 ; G 4338
U 10391 ; WX 781 ; N uni2897 ; G 4339
U 10392 ; WX 781 ; N uni2898 ; G 4340
U 10393 ; WX 781 ; N uni2899 ; G 4341
U 10394 ; WX 781 ; N uni289A ; G 4342
U 10395 ; WX 781 ; N uni289B ; G 4343
U 10396 ; WX 781 ; N uni289C ; G 4344
U 10397 ; WX 781 ; N uni289D ; G 4345
U 10398 ; WX 781 ; N uni289E ; G 4346
U 10399 ; WX 781 ; N uni289F ; G 4347
U 10400 ; WX 781 ; N uni28A0 ; G 4348
U 10401 ; WX 781 ; N uni28A1 ; G 4349
U 10402 ; WX 781 ; N uni28A2 ; G 4350
U 10403 ; WX 781 ; N uni28A3 ; G 4351
U 10404 ; WX 781 ; N uni28A4 ; G 4352
U 10405 ; WX 781 ; N uni28A5 ; G 4353
U 10406 ; WX 781 ; N uni28A6 ; G 4354
U 10407 ; WX 781 ; N uni28A7 ; G 4355
U 10408 ; WX 781 ; N uni28A8 ; G 4356
U 10409 ; WX 781 ; N uni28A9 ; G 4357
U 10410 ; WX 781 ; N uni28AA ; G 4358
U 10411 ; WX 781 ; N uni28AB ; G 4359
U 10412 ; WX 781 ; N uni28AC ; G 4360
U 10413 ; WX 781 ; N uni28AD ; G 4361
U 10414 ; WX 781 ; N uni28AE ; G 4362
U 10415 ; WX 781 ; N uni28AF ; G 4363
U 10416 ; WX 781 ; N uni28B0 ; G 4364
U 10417 ; WX 781 ; N uni28B1 ; G 4365
U 10418 ; WX 781 ; N uni28B2 ; G 4366
U 10419 ; WX 781 ; N uni28B3 ; G 4367
U 10420 ; WX 781 ; N uni28B4 ; G 4368
U 10421 ; WX 781 ; N uni28B5 ; G 4369
U 10422 ; WX 781 ; N uni28B6 ; G 4370
U 10423 ; WX 781 ; N uni28B7 ; G 4371
U 10424 ; WX 781 ; N uni28B8 ; G 4372
U 10425 ; WX 781 ; N uni28B9 ; G 4373
U 10426 ; WX 781 ; N uni28BA ; G 4374
U 10427 ; WX 781 ; N uni28BB ; G 4375
U 10428 ; WX 781 ; N uni28BC ; G 4376
U 10429 ; WX 781 ; N uni28BD ; G 4377
U 10430 ; WX 781 ; N uni28BE ; G 4378
U 10431 ; WX 781 ; N uni28BF ; G 4379
U 10432 ; WX 781 ; N uni28C0 ; G 4380
U 10433 ; WX 781 ; N uni28C1 ; G 4381
U 10434 ; WX 781 ; N uni28C2 ; G 4382
U 10435 ; WX 781 ; N uni28C3 ; G 4383
U 10436 ; WX 781 ; N uni28C4 ; G 4384
U 10437 ; WX 781 ; N uni28C5 ; G 4385
U 10438 ; WX 781 ; N uni28C6 ; G 4386
U 10439 ; WX 781 ; N uni28C7 ; G 4387
U 10440 ; WX 781 ; N uni28C8 ; G 4388
U 10441 ; WX 781 ; N uni28C9 ; G 4389
U 10442 ; WX 781 ; N uni28CA ; G 4390
U 10443 ; WX 781 ; N uni28CB ; G 4391
U 10444 ; WX 781 ; N uni28CC ; G 4392
U 10445 ; WX 781 ; N uni28CD ; G 4393
U 10446 ; WX 781 ; N uni28CE ; G 4394
U 10447 ; WX 781 ; N uni28CF ; G 4395
U 10448 ; WX 781 ; N uni28D0 ; G 4396
U 10449 ; WX 781 ; N uni28D1 ; G 4397
U 10450 ; WX 781 ; N uni28D2 ; G 4398
U 10451 ; WX 781 ; N uni28D3 ; G 4399
U 10452 ; WX 781 ; N uni28D4 ; G 4400
U 10453 ; WX 781 ; N uni28D5 ; G 4401
U 10454 ; WX 781 ; N uni28D6 ; G 4402
U 10455 ; WX 781 ; N uni28D7 ; G 4403
U 10456 ; WX 781 ; N uni28D8 ; G 4404
U 10457 ; WX 781 ; N uni28D9 ; G 4405
U 10458 ; WX 781 ; N uni28DA ; G 4406
U 10459 ; WX 781 ; N uni28DB ; G 4407
U 10460 ; WX 781 ; N uni28DC ; G 4408
U 10461 ; WX 781 ; N uni28DD ; G 4409
U 10462 ; WX 781 ; N uni28DE ; G 4410
U 10463 ; WX 781 ; N uni28DF ; G 4411
U 10464 ; WX 781 ; N uni28E0 ; G 4412
U 10465 ; WX 781 ; N uni28E1 ; G 4413
U 10466 ; WX 781 ; N uni28E2 ; G 4414
U 10467 ; WX 781 ; N uni28E3 ; G 4415
U 10468 ; WX 781 ; N uni28E4 ; G 4416
U 10469 ; WX 781 ; N uni28E5 ; G 4417
U 10470 ; WX 781 ; N uni28E6 ; G 4418
U 10471 ; WX 781 ; N uni28E7 ; G 4419
U 10472 ; WX 781 ; N uni28E8 ; G 4420
U 10473 ; WX 781 ; N uni28E9 ; G 4421
U 10474 ; WX 781 ; N uni28EA ; G 4422
U 10475 ; WX 781 ; N uni28EB ; G 4423
U 10476 ; WX 781 ; N uni28EC ; G 4424
U 10477 ; WX 781 ; N uni28ED ; G 4425
U 10478 ; WX 781 ; N uni28EE ; G 4426
U 10479 ; WX 781 ; N uni28EF ; G 4427
U 10480 ; WX 781 ; N uni28F0 ; G 4428
U 10481 ; WX 781 ; N uni28F1 ; G 4429
U 10482 ; WX 781 ; N uni28F2 ; G 4430
U 10483 ; WX 781 ; N uni28F3 ; G 4431
U 10484 ; WX 781 ; N uni28F4 ; G 4432
U 10485 ; WX 781 ; N uni28F5 ; G 4433
U 10486 ; WX 781 ; N uni28F6 ; G 4434
U 10487 ; WX 781 ; N uni28F7 ; G 4435
U 10488 ; WX 781 ; N uni28F8 ; G 4436
U 10489 ; WX 781 ; N uni28F9 ; G 4437
U 10490 ; WX 781 ; N uni28FA ; G 4438
U 10491 ; WX 781 ; N uni28FB ; G 4439
U 10492 ; WX 781 ; N uni28FC ; G 4440
U 10493 ; WX 781 ; N uni28FD ; G 4441
U 10494 ; WX 781 ; N uni28FE ; G 4442
U 10495 ; WX 781 ; N uni28FF ; G 4443
U 10502 ; WX 838 ; N uni2906 ; G 4444
U 10503 ; WX 838 ; N uni2907 ; G 4445
U 10506 ; WX 838 ; N uni290A ; G 4446
U 10507 ; WX 838 ; N uni290B ; G 4447
U 10560 ; WX 838 ; N uni2940 ; G 4448
U 10561 ; WX 838 ; N uni2941 ; G 4449
U 10627 ; WX 753 ; N uni2983 ; G 4450
U 10628 ; WX 753 ; N uni2984 ; G 4451
U 10702 ; WX 838 ; N uni29CE ; G 4452
U 10703 ; WX 1046 ; N uni29CF ; G 4453
U 10704 ; WX 1046 ; N uni29D0 ; G 4454
U 10705 ; WX 1000 ; N uni29D1 ; G 4455
U 10706 ; WX 1000 ; N uni29D2 ; G 4456
U 10707 ; WX 1000 ; N uni29D3 ; G 4457
U 10708 ; WX 1000 ; N uni29D4 ; G 4458
U 10709 ; WX 1000 ; N uni29D5 ; G 4459
U 10731 ; WX 494 ; N uni29EB ; G 4460
U 10746 ; WX 838 ; N uni29FA ; G 4461
U 10747 ; WX 838 ; N uni29FB ; G 4462
U 10752 ; WX 1000 ; N uni2A00 ; G 4463
U 10753 ; WX 1000 ; N uni2A01 ; G 4464
U 10754 ; WX 1000 ; N uni2A02 ; G 4465
U 10764 ; WX 1661 ; N uni2A0C ; G 4466
U 10765 ; WX 563 ; N uni2A0D ; G 4467
U 10766 ; WX 563 ; N uni2A0E ; G 4468
U 10767 ; WX 563 ; N uni2A0F ; G 4469
U 10768 ; WX 563 ; N uni2A10 ; G 4470
U 10769 ; WX 563 ; N uni2A11 ; G 4471
U 10770 ; WX 563 ; N uni2A12 ; G 4472
U 10771 ; WX 563 ; N uni2A13 ; G 4473
U 10772 ; WX 563 ; N uni2A14 ; G 4474
U 10773 ; WX 563 ; N uni2A15 ; G 4475
U 10774 ; WX 563 ; N uni2A16 ; G 4476
U 10775 ; WX 563 ; N uni2A17 ; G 4477
U 10776 ; WX 563 ; N uni2A18 ; G 4478
U 10777 ; WX 563 ; N uni2A19 ; G 4479
U 10778 ; WX 563 ; N uni2A1A ; G 4480
U 10779 ; WX 563 ; N uni2A1B ; G 4481
U 10780 ; WX 563 ; N uni2A1C ; G 4482
U 10799 ; WX 838 ; N uni2A2F ; G 4483
U 10858 ; WX 838 ; N uni2A6A ; G 4484
U 10859 ; WX 838 ; N uni2A6B ; G 4485
U 10877 ; WX 838 ; N uni2A7D ; G 4486
U 10878 ; WX 838 ; N uni2A7E ; G 4487
U 10879 ; WX 838 ; N uni2A7F ; G 4488
U 10880 ; WX 838 ; N uni2A80 ; G 4489
U 10881 ; WX 838 ; N uni2A81 ; G 4490
U 10882 ; WX 838 ; N uni2A82 ; G 4491
U 10883 ; WX 838 ; N uni2A83 ; G 4492
U 10884 ; WX 838 ; N uni2A84 ; G 4493
U 10885 ; WX 838 ; N uni2A85 ; G 4494
U 10886 ; WX 838 ; N uni2A86 ; G 4495
U 10887 ; WX 838 ; N uni2A87 ; G 4496
U 10888 ; WX 838 ; N uni2A88 ; G 4497
U 10889 ; WX 838 ; N uni2A89 ; G 4498
U 10890 ; WX 838 ; N uni2A8A ; G 4499
U 10891 ; WX 838 ; N uni2A8B ; G 4500
U 10892 ; WX 838 ; N uni2A8C ; G 4501
U 10893 ; WX 838 ; N uni2A8D ; G 4502
U 10894 ; WX 838 ; N uni2A8E ; G 4503
U 10895 ; WX 838 ; N uni2A8F ; G 4504
U 10896 ; WX 838 ; N uni2A90 ; G 4505
U 10897 ; WX 838 ; N uni2A91 ; G 4506
U 10898 ; WX 838 ; N uni2A92 ; G 4507
U 10899 ; WX 838 ; N uni2A93 ; G 4508
U 10900 ; WX 838 ; N uni2A94 ; G 4509
U 10901 ; WX 838 ; N uni2A95 ; G 4510
U 10902 ; WX 838 ; N uni2A96 ; G 4511
U 10903 ; WX 838 ; N uni2A97 ; G 4512
U 10904 ; WX 838 ; N uni2A98 ; G 4513
U 10905 ; WX 838 ; N uni2A99 ; G 4514
U 10906 ; WX 838 ; N uni2A9A ; G 4515
U 10907 ; WX 838 ; N uni2A9B ; G 4516
U 10908 ; WX 838 ; N uni2A9C ; G 4517
U 10909 ; WX 838 ; N uni2A9D ; G 4518
U 10910 ; WX 838 ; N uni2A9E ; G 4519
U 10911 ; WX 838 ; N uni2A9F ; G 4520
U 10912 ; WX 838 ; N uni2AA0 ; G 4521
U 10926 ; WX 838 ; N uni2AAE ; G 4522
U 10927 ; WX 838 ; N uni2AAF ; G 4523
U 10928 ; WX 838 ; N uni2AB0 ; G 4524
U 10929 ; WX 838 ; N uni2AB1 ; G 4525
U 10930 ; WX 838 ; N uni2AB2 ; G 4526
U 10931 ; WX 838 ; N uni2AB3 ; G 4527
U 10932 ; WX 838 ; N uni2AB4 ; G 4528
U 10933 ; WX 838 ; N uni2AB5 ; G 4529
U 10934 ; WX 838 ; N uni2AB6 ; G 4530
U 10935 ; WX 838 ; N uni2AB7 ; G 4531
U 10936 ; WX 838 ; N uni2AB8 ; G 4532
U 10937 ; WX 838 ; N uni2AB9 ; G 4533
U 10938 ; WX 838 ; N uni2ABA ; G 4534
U 11001 ; WX 838 ; N uni2AF9 ; G 4535
U 11002 ; WX 838 ; N uni2AFA ; G 4536
U 11008 ; WX 838 ; N uni2B00 ; G 4537
U 11009 ; WX 838 ; N uni2B01 ; G 4538
U 11010 ; WX 838 ; N uni2B02 ; G 4539
U 11011 ; WX 838 ; N uni2B03 ; G 4540
U 11012 ; WX 838 ; N uni2B04 ; G 4541
U 11013 ; WX 838 ; N uni2B05 ; G 4542
U 11014 ; WX 838 ; N uni2B06 ; G 4543
U 11015 ; WX 838 ; N uni2B07 ; G 4544
U 11016 ; WX 838 ; N uni2B08 ; G 4545
U 11017 ; WX 838 ; N uni2B09 ; G 4546
U 11018 ; WX 838 ; N uni2B0A ; G 4547
U 11019 ; WX 838 ; N uni2B0B ; G 4548
U 11020 ; WX 838 ; N uni2B0C ; G 4549
U 11021 ; WX 838 ; N uni2B0D ; G 4550
U 11022 ; WX 838 ; N uni2B0E ; G 4551
U 11023 ; WX 838 ; N uni2B0F ; G 4552
U 11024 ; WX 838 ; N uni2B10 ; G 4553
U 11025 ; WX 838 ; N uni2B11 ; G 4554
U 11026 ; WX 945 ; N uni2B12 ; G 4555
U 11027 ; WX 945 ; N uni2B13 ; G 4556
U 11028 ; WX 945 ; N uni2B14 ; G 4557
U 11029 ; WX 945 ; N uni2B15 ; G 4558
U 11030 ; WX 769 ; N uni2B16 ; G 4559
U 11031 ; WX 769 ; N uni2B17 ; G 4560
U 11032 ; WX 769 ; N uni2B18 ; G 4561
U 11033 ; WX 769 ; N uni2B19 ; G 4562
U 11034 ; WX 945 ; N uni2B1A ; G 4563
U 11039 ; WX 869 ; N uni2B1F ; G 4564
U 11040 ; WX 869 ; N uni2B20 ; G 4565
U 11041 ; WX 873 ; N uni2B21 ; G 4566
U 11042 ; WX 873 ; N uni2B22 ; G 4567
U 11043 ; WX 873 ; N uni2B23 ; G 4568
U 11044 ; WX 1119 ; N uni2B24 ; G 4569
U 11091 ; WX 869 ; N uni2B53 ; G 4570
U 11092 ; WX 869 ; N uni2B54 ; G 4571
U 11360 ; WX 637 ; N uni2C60 ; G 4572
U 11361 ; WX 360 ; N uni2C61 ; G 4573
U 11362 ; WX 637 ; N uni2C62 ; G 4574
U 11363 ; WX 733 ; N uni2C63 ; G 4575
U 11364 ; WX 770 ; N uni2C64 ; G 4576
U 11365 ; WX 675 ; N uni2C65 ; G 4577
U 11366 ; WX 478 ; N uni2C66 ; G 4578
U 11367 ; WX 956 ; N uni2C67 ; G 4579
U 11368 ; WX 712 ; N uni2C68 ; G 4580
U 11369 ; WX 775 ; N uni2C69 ; G 4581
U 11370 ; WX 665 ; N uni2C6A ; G 4582
U 11371 ; WX 725 ; N uni2C6B ; G 4583
U 11372 ; WX 582 ; N uni2C6C ; G 4584
U 11373 ; WX 860 ; N uni2C6D ; G 4585
U 11374 ; WX 995 ; N uni2C6E ; G 4586
U 11375 ; WX 774 ; N uni2C6F ; G 4587
U 11376 ; WX 860 ; N uni2C70 ; G 4588
U 11377 ; WX 778 ; N uni2C71 ; G 4589
U 11378 ; WX 1221 ; N uni2C72 ; G 4590
U 11379 ; WX 1056 ; N uni2C73 ; G 4591
U 11380 ; WX 652 ; N uni2C74 ; G 4592
U 11381 ; WX 698 ; N uni2C75 ; G 4593
U 11382 ; WX 565 ; N uni2C76 ; G 4594
U 11383 ; WX 782 ; N uni2C77 ; G 4595
U 11385 ; WX 538 ; N uni2C79 ; G 4596
U 11386 ; WX 687 ; N uni2C7A ; G 4597
U 11387 ; WX 559 ; N uni2C7B ; G 4598
U 11388 ; WX 219 ; N uni2C7C ; G 4599
U 11389 ; WX 487 ; N uni2C7D ; G 4600
U 11390 ; WX 720 ; N uni2C7E ; G 4601
U 11391 ; WX 725 ; N uni2C7F ; G 4602
U 11520 ; WX 663 ; N uni2D00 ; G 4603
U 11521 ; WX 676 ; N uni2D01 ; G 4604
U 11522 ; WX 661 ; N uni2D02 ; G 4605
U 11523 ; WX 629 ; N uni2D03 ; G 4606
U 11524 ; WX 661 ; N uni2D04 ; G 4607
U 11525 ; WX 1032 ; N uni2D05 ; G 4608
U 11526 ; WX 718 ; N uni2D06 ; G 4609
U 11527 ; WX 1032 ; N uni2D07 ; G 4610
U 11528 ; WX 648 ; N uni2D08 ; G 4611
U 11529 ; WX 667 ; N uni2D09 ; G 4612
U 11530 ; WX 1032 ; N uni2D0A ; G 4613
U 11531 ; WX 673 ; N uni2D0B ; G 4614
U 11532 ; WX 677 ; N uni2D0C ; G 4615
U 11533 ; WX 1036 ; N uni2D0D ; G 4616
U 11534 ; WX 680 ; N uni2D0E ; G 4617
U 11535 ; WX 886 ; N uni2D0F ; G 4618
U 11536 ; WX 1032 ; N uni2D10 ; G 4619
U 11537 ; WX 683 ; N uni2D11 ; G 4620
U 11538 ; WX 674 ; N uni2D12 ; G 4621
U 11539 ; WX 1035 ; N uni2D13 ; G 4622
U 11540 ; WX 1033 ; N uni2D14 ; G 4623
U 11541 ; WX 1027 ; N uni2D15 ; G 4624
U 11542 ; WX 676 ; N uni2D16 ; G 4625
U 11543 ; WX 673 ; N uni2D17 ; G 4626
U 11544 ; WX 667 ; N uni2D18 ; G 4627
U 11545 ; WX 667 ; N uni2D19 ; G 4628
U 11546 ; WX 660 ; N uni2D1A ; G 4629
U 11547 ; WX 671 ; N uni2D1B ; G 4630
U 11548 ; WX 1039 ; N uni2D1C ; G 4631
U 11549 ; WX 673 ; N uni2D1D ; G 4632
U 11550 ; WX 692 ; N uni2D1E ; G 4633
U 11551 ; WX 659 ; N uni2D1F ; G 4634
U 11552 ; WX 1048 ; N uni2D20 ; G 4635
U 11553 ; WX 660 ; N uni2D21 ; G 4636
U 11554 ; WX 654 ; N uni2D22 ; G 4637
U 11555 ; WX 670 ; N uni2D23 ; G 4638
U 11556 ; WX 733 ; N uni2D24 ; G 4639
U 11557 ; WX 1017 ; N uni2D25 ; G 4640
U 11568 ; WX 691 ; N uni2D30 ; G 4641
U 11569 ; WX 941 ; N uni2D31 ; G 4642
U 11570 ; WX 941 ; N uni2D32 ; G 4643
U 11571 ; WX 725 ; N uni2D33 ; G 4644
U 11572 ; WX 725 ; N uni2D34 ; G 4645
U 11573 ; WX 725 ; N uni2D35 ; G 4646
U 11574 ; WX 676 ; N uni2D36 ; G 4647
U 11575 ; WX 774 ; N uni2D37 ; G 4648
U 11576 ; WX 774 ; N uni2D38 ; G 4649
U 11577 ; WX 683 ; N uni2D39 ; G 4650
U 11578 ; WX 683 ; N uni2D3A ; G 4651
U 11579 ; WX 802 ; N uni2D3B ; G 4652
U 11580 ; WX 989 ; N uni2D3C ; G 4653
U 11581 ; WX 761 ; N uni2D3D ; G 4654
U 11582 ; WX 623 ; N uni2D3E ; G 4655
U 11583 ; WX 761 ; N uni2D3F ; G 4656
U 11584 ; WX 941 ; N uni2D40 ; G 4657
U 11585 ; WX 941 ; N uni2D41 ; G 4658
U 11586 ; WX 373 ; N uni2D42 ; G 4659
U 11587 ; WX 740 ; N uni2D43 ; G 4660
U 11588 ; WX 837 ; N uni2D44 ; G 4661
U 11589 ; WX 914 ; N uni2D45 ; G 4662
U 11590 ; WX 672 ; N uni2D46 ; G 4663
U 11591 ; WX 737 ; N uni2D47 ; G 4664
U 11592 ; WX 680 ; N uni2D48 ; G 4665
U 11593 ; WX 683 ; N uni2D49 ; G 4666
U 11594 ; WX 602 ; N uni2D4A ; G 4667
U 11595 ; WX 1039 ; N uni2D4B ; G 4668
U 11596 ; WX 778 ; N uni2D4C ; G 4669
U 11597 ; WX 837 ; N uni2D4D ; G 4670
U 11598 ; WX 683 ; N uni2D4E ; G 4671
U 11599 ; WX 372 ; N uni2D4F ; G 4672
U 11600 ; WX 778 ; N uni2D50 ; G 4673
U 11601 ; WX 373 ; N uni2D51 ; G 4674
U 11602 ; WX 725 ; N uni2D52 ; G 4675
U 11603 ; WX 691 ; N uni2D53 ; G 4676
U 11604 ; WX 941 ; N uni2D54 ; G 4677
U 11605 ; WX 941 ; N uni2D55 ; G 4678
U 11606 ; WX 837 ; N uni2D56 ; G 4679
U 11607 ; WX 373 ; N uni2D57 ; G 4680
U 11608 ; WX 836 ; N uni2D58 ; G 4681
U 11609 ; WX 941 ; N uni2D59 ; G 4682
U 11610 ; WX 941 ; N uni2D5A ; G 4683
U 11611 ; WX 734 ; N uni2D5B ; G 4684
U 11612 ; WX 876 ; N uni2D5C ; G 4685
U 11613 ; WX 771 ; N uni2D5D ; G 4686
U 11614 ; WX 734 ; N uni2D5E ; G 4687
U 11615 ; WX 683 ; N uni2D5F ; G 4688
U 11616 ; WX 774 ; N uni2D60 ; G 4689
U 11617 ; WX 837 ; N uni2D61 ; G 4690
U 11618 ; WX 683 ; N uni2D62 ; G 4691
U 11619 ; WX 850 ; N uni2D63 ; G 4692
U 11620 ; WX 697 ; N uni2D64 ; G 4693
U 11621 ; WX 850 ; N uni2D65 ; G 4694
U 11631 ; WX 716 ; N uni2D6F ; G 4695
U 11800 ; WX 580 ; N uni2E18 ; G 4696
U 11807 ; WX 838 ; N uni2E1F ; G 4697
U 11810 ; WX 457 ; N uni2E22 ; G 4698
U 11811 ; WX 457 ; N uni2E23 ; G 4699
U 11812 ; WX 457 ; N uni2E24 ; G 4700
U 11813 ; WX 457 ; N uni2E25 ; G 4701
U 11822 ; WX 580 ; N uni2E2E ; G 4702
U 19904 ; WX 896 ; N uni4DC0 ; G 4703
U 19905 ; WX 896 ; N uni4DC1 ; G 4704
U 19906 ; WX 896 ; N uni4DC2 ; G 4705
U 19907 ; WX 896 ; N uni4DC3 ; G 4706
U 19908 ; WX 896 ; N uni4DC4 ; G 4707
U 19909 ; WX 896 ; N uni4DC5 ; G 4708
U 19910 ; WX 896 ; N uni4DC6 ; G 4709
U 19911 ; WX 896 ; N uni4DC7 ; G 4710
U 19912 ; WX 896 ; N uni4DC8 ; G 4711
U 19913 ; WX 896 ; N uni4DC9 ; G 4712
U 19914 ; WX 896 ; N uni4DCA ; G 4713
U 19915 ; WX 896 ; N uni4DCB ; G 4714
U 19916 ; WX 896 ; N uni4DCC ; G 4715
U 19917 ; WX 896 ; N uni4DCD ; G 4716
U 19918 ; WX 896 ; N uni4DCE ; G 4717
U 19919 ; WX 896 ; N uni4DCF ; G 4718
U 19920 ; WX 896 ; N uni4DD0 ; G 4719
U 19921 ; WX 896 ; N uni4DD1 ; G 4720
U 19922 ; WX 896 ; N uni4DD2 ; G 4721
U 19923 ; WX 896 ; N uni4DD3 ; G 4722
U 19924 ; WX 896 ; N uni4DD4 ; G 4723
U 19925 ; WX 896 ; N uni4DD5 ; G 4724
U 19926 ; WX 896 ; N uni4DD6 ; G 4725
U 19927 ; WX 896 ; N uni4DD7 ; G 4726
U 19928 ; WX 896 ; N uni4DD8 ; G 4727
U 19929 ; WX 896 ; N uni4DD9 ; G 4728
U 19930 ; WX 896 ; N uni4DDA ; G 4729
U 19931 ; WX 896 ; N uni4DDB ; G 4730
U 19932 ; WX 896 ; N uni4DDC ; G 4731
U 19933 ; WX 896 ; N uni4DDD ; G 4732
U 19934 ; WX 896 ; N uni4DDE ; G 4733
U 19935 ; WX 896 ; N uni4DDF ; G 4734
U 19936 ; WX 896 ; N uni4DE0 ; G 4735
U 19937 ; WX 896 ; N uni4DE1 ; G 4736
U 19938 ; WX 896 ; N uni4DE2 ; G 4737
U 19939 ; WX 896 ; N uni4DE3 ; G 4738
U 19940 ; WX 896 ; N uni4DE4 ; G 4739
U 19941 ; WX 896 ; N uni4DE5 ; G 4740
U 19942 ; WX 896 ; N uni4DE6 ; G 4741
U 19943 ; WX 896 ; N uni4DE7 ; G 4742
U 19944 ; WX 896 ; N uni4DE8 ; G 4743
U 19945 ; WX 896 ; N uni4DE9 ; G 4744
U 19946 ; WX 896 ; N uni4DEA ; G 4745
U 19947 ; WX 896 ; N uni4DEB ; G 4746
U 19948 ; WX 896 ; N uni4DEC ; G 4747
U 19949 ; WX 896 ; N uni4DED ; G 4748
U 19950 ; WX 896 ; N uni4DEE ; G 4749
U 19951 ; WX 896 ; N uni4DEF ; G 4750
U 19952 ; WX 896 ; N uni4DF0 ; G 4751
U 19953 ; WX 896 ; N uni4DF1 ; G 4752
U 19954 ; WX 896 ; N uni4DF2 ; G 4753
U 19955 ; WX 896 ; N uni4DF3 ; G 4754
U 19956 ; WX 896 ; N uni4DF4 ; G 4755
U 19957 ; WX 896 ; N uni4DF5 ; G 4756
U 19958 ; WX 896 ; N uni4DF6 ; G 4757
U 19959 ; WX 896 ; N uni4DF7 ; G 4758
U 19960 ; WX 896 ; N uni4DF8 ; G 4759
U 19961 ; WX 896 ; N uni4DF9 ; G 4760
U 19962 ; WX 896 ; N uni4DFA ; G 4761
U 19963 ; WX 896 ; N uni4DFB ; G 4762
U 19964 ; WX 896 ; N uni4DFC ; G 4763
U 19965 ; WX 896 ; N uni4DFD ; G 4764
U 19966 ; WX 896 ; N uni4DFE ; G 4765
U 19967 ; WX 896 ; N uni4DFF ; G 4766
U 42192 ; WX 762 ; N uniA4D0 ; G 4767
U 42193 ; WX 733 ; N uniA4D1 ; G 4768
U 42194 ; WX 733 ; N uniA4D2 ; G 4769
U 42195 ; WX 830 ; N uniA4D3 ; G 4770
U 42196 ; WX 682 ; N uniA4D4 ; G 4771
U 42197 ; WX 682 ; N uniA4D5 ; G 4772
U 42198 ; WX 821 ; N uniA4D6 ; G 4773
U 42199 ; WX 775 ; N uniA4D7 ; G 4774
U 42200 ; WX 775 ; N uniA4D8 ; G 4775
U 42201 ; WX 530 ; N uniA4D9 ; G 4776
U 42202 ; WX 734 ; N uniA4DA ; G 4777
U 42203 ; WX 734 ; N uniA4DB ; G 4778
U 42204 ; WX 725 ; N uniA4DC ; G 4779
U 42205 ; WX 683 ; N uniA4DD ; G 4780
U 42206 ; WX 683 ; N uniA4DE ; G 4781
U 42207 ; WX 995 ; N uniA4DF ; G 4782
U 42208 ; WX 837 ; N uniA4E0 ; G 4783
U 42209 ; WX 637 ; N uniA4E1 ; G 4784
U 42210 ; WX 720 ; N uniA4E2 ; G 4785
U 42211 ; WX 770 ; N uniA4E3 ; G 4786
U 42212 ; WX 770 ; N uniA4E4 ; G 4787
U 42213 ; WX 774 ; N uniA4E5 ; G 4788
U 42214 ; WX 774 ; N uniA4E6 ; G 4789
U 42215 ; WX 837 ; N uniA4E7 ; G 4790
U 42216 ; WX 775 ; N uniA4E8 ; G 4791
U 42217 ; WX 530 ; N uniA4E9 ; G 4792
U 42218 ; WX 1103 ; N uniA4EA ; G 4793
U 42219 ; WX 771 ; N uniA4EB ; G 4794
U 42220 ; WX 724 ; N uniA4EC ; G 4795
U 42221 ; WX 762 ; N uniA4ED ; G 4796
U 42222 ; WX 774 ; N uniA4EE ; G 4797
U 42223 ; WX 774 ; N uniA4EF ; G 4798
U 42224 ; WX 683 ; N uniA4F0 ; G 4799
U 42225 ; WX 683 ; N uniA4F1 ; G 4800
U 42226 ; WX 372 ; N uniA4F2 ; G 4801
U 42227 ; WX 850 ; N uniA4F3 ; G 4802
U 42228 ; WX 812 ; N uniA4F4 ; G 4803
U 42229 ; WX 812 ; N uniA4F5 ; G 4804
U 42230 ; WX 557 ; N uniA4F6 ; G 4805
U 42231 ; WX 830 ; N uniA4F7 ; G 4806
U 42232 ; WX 322 ; N uniA4F8 ; G 4807
U 42233 ; WX 322 ; N uniA4F9 ; G 4808
U 42234 ; WX 674 ; N uniA4FA ; G 4809
U 42235 ; WX 674 ; N uniA4FB ; G 4810
U 42236 ; WX 322 ; N uniA4FC ; G 4811
U 42237 ; WX 322 ; N uniA4FD ; G 4812
U 42238 ; WX 588 ; N uniA4FE ; G 4813
U 42239 ; WX 588 ; N uniA4FF ; G 4814
U 42564 ; WX 720 ; N uniA644 ; G 4815
U 42565 ; WX 595 ; N uniA645 ; G 4816
U 42566 ; WX 436 ; N uniA646 ; G 4817
U 42567 ; WX 440 ; N uniA647 ; G 4818
U 42572 ; WX 1405 ; N uniA64C ; G 4819
U 42573 ; WX 1173 ; N uniA64D ; G 4820
U 42576 ; WX 1234 ; N uniA650 ; G 4821
U 42577 ; WX 1027 ; N uniA651 ; G 4822
U 42580 ; WX 1174 ; N uniA654 ; G 4823
U 42581 ; WX 972 ; N uniA655 ; G 4824
U 42582 ; WX 1093 ; N uniA656 ; G 4825
U 42583 ; WX 958 ; N uniA657 ; G 4826
U 42594 ; WX 1085 ; N uniA662 ; G 4827
U 42595 ; WX 924 ; N uniA663 ; G 4828
U 42596 ; WX 1096 ; N uniA664 ; G 4829
U 42597 ; WX 912 ; N uniA665 ; G 4830
U 42598 ; WX 1260 ; N uniA666 ; G 4831
U 42599 ; WX 997 ; N uniA667 ; G 4832
U 42600 ; WX 850 ; N uniA668 ; G 4833
U 42601 ; WX 687 ; N uniA669 ; G 4834
U 42602 ; WX 1037 ; N uniA66A ; G 4835
U 42603 ; WX 868 ; N uniA66B ; G 4836
U 42604 ; WX 1406 ; N uniA66C ; G 4837
U 42605 ; WX 1106 ; N uniA66D ; G 4838
U 42606 ; WX 961 ; N uniA66E ; G 4839
U 42634 ; WX 963 ; N uniA68A ; G 4840
U 42635 ; WX 787 ; N uniA68B ; G 4841
U 42636 ; WX 682 ; N uniA68C ; G 4842
U 42637 ; WX 580 ; N uniA68D ; G 4843
U 42644 ; WX 808 ; N uniA694 ; G 4844
U 42645 ; WX 712 ; N uniA695 ; G 4845
U 42648 ; WX 1406 ; N uniA698 ; G 4846
U 42649 ; WX 1106 ; N uniA699 ; G 4847
U 42760 ; WX 500 ; N uniA708 ; G 4848
U 42761 ; WX 500 ; N uniA709 ; G 4849
U 42762 ; WX 500 ; N uniA70A ; G 4850
U 42763 ; WX 500 ; N uniA70B ; G 4851
U 42764 ; WX 500 ; N uniA70C ; G 4852
U 42765 ; WX 500 ; N uniA70D ; G 4853
U 42766 ; WX 500 ; N uniA70E ; G 4854
U 42767 ; WX 500 ; N uniA70F ; G 4855
U 42768 ; WX 500 ; N uniA710 ; G 4856
U 42769 ; WX 500 ; N uniA711 ; G 4857
U 42770 ; WX 500 ; N uniA712 ; G 4858
U 42771 ; WX 500 ; N uniA713 ; G 4859
U 42772 ; WX 500 ; N uniA714 ; G 4860
U 42773 ; WX 500 ; N uniA715 ; G 4861
U 42774 ; WX 500 ; N uniA716 ; G 4862
U 42779 ; WX 400 ; N uniA71B ; G 4863
U 42780 ; WX 400 ; N uniA71C ; G 4864
U 42781 ; WX 287 ; N uniA71D ; G 4865
U 42782 ; WX 287 ; N uniA71E ; G 4866
U 42783 ; WX 287 ; N uniA71F ; G 4867
U 42786 ; WX 444 ; N uniA722 ; G 4868
U 42787 ; WX 390 ; N uniA723 ; G 4869
U 42788 ; WX 540 ; N uniA724 ; G 4870
U 42789 ; WX 540 ; N uniA725 ; G 4871
U 42790 ; WX 837 ; N uniA726 ; G 4872
U 42791 ; WX 712 ; N uniA727 ; G 4873
U 42792 ; WX 1031 ; N uniA728 ; G 4874
U 42793 ; WX 857 ; N uniA729 ; G 4875
U 42794 ; WX 696 ; N uniA72A ; G 4876
U 42795 ; WX 557 ; N uniA72B ; G 4877
U 42800 ; WX 559 ; N uniA730 ; G 4878
U 42801 ; WX 595 ; N uniA731 ; G 4879
U 42802 ; WX 1349 ; N uniA732 ; G 4880
U 42803 ; WX 1052 ; N uniA733 ; G 4881
U 42804 ; WX 1284 ; N uniA734 ; G 4882
U 42805 ; WX 1064 ; N uniA735 ; G 4883
U 42806 ; WX 1216 ; N uniA736 ; G 4884
U 42807 ; WX 1054 ; N uniA737 ; G 4885
U 42808 ; WX 1079 ; N uniA738 ; G 4886
U 42809 ; WX 922 ; N uniA739 ; G 4887
U 42810 ; WX 1079 ; N uniA73A ; G 4888
U 42811 ; WX 922 ; N uniA73B ; G 4889
U 42812 ; WX 1035 ; N uniA73C ; G 4890
U 42813 ; WX 922 ; N uniA73D ; G 4891
U 42814 ; WX 698 ; N uniA73E ; G 4892
U 42815 ; WX 549 ; N uniA73F ; G 4893
U 42816 ; WX 656 ; N uniA740 ; G 4894
U 42817 ; WX 688 ; N uniA741 ; G 4895
U 42822 ; WX 850 ; N uniA746 ; G 4896
U 42823 ; WX 542 ; N uniA747 ; G 4897
U 42824 ; WX 683 ; N uniA748 ; G 4898
U 42825 ; WX 531 ; N uniA749 ; G 4899
U 42826 ; WX 918 ; N uniA74A ; G 4900
U 42827 ; WX 814 ; N uniA74B ; G 4901
U 42830 ; WX 1406 ; N uniA74E ; G 4902
U 42831 ; WX 1106 ; N uniA74F ; G 4903
U 42832 ; WX 733 ; N uniA750 ; G 4904
U 42833 ; WX 716 ; N uniA751 ; G 4905
U 42834 ; WX 948 ; N uniA752 ; G 4906
U 42835 ; WX 937 ; N uniA753 ; G 4907
U 42838 ; WX 850 ; N uniA756 ; G 4908
U 42839 ; WX 716 ; N uniA757 ; G 4909
U 42852 ; WX 738 ; N uniA764 ; G 4910
U 42853 ; WX 716 ; N uniA765 ; G 4911
U 42854 ; WX 738 ; N uniA766 ; G 4912
U 42855 ; WX 716 ; N uniA767 ; G 4913
U 42880 ; WX 637 ; N uniA780 ; G 4914
U 42881 ; WX 343 ; N uniA781 ; G 4915
U 42882 ; WX 837 ; N uniA782 ; G 4916
U 42883 ; WX 712 ; N uniA783 ; G 4917
U 42889 ; WX 400 ; N uniA789 ; G 4918
U 42890 ; WX 386 ; N uniA78A ; G 4919
U 42891 ; WX 456 ; N uniA78B ; G 4920
U 42892 ; WX 306 ; N uniA78C ; G 4921
U 42893 ; WX 808 ; N uniA78D ; G 4922
U 42894 ; WX 693 ; N uniA78E ; G 4923
U 42896 ; WX 928 ; N uniA790 ; G 4924
U 42897 ; WX 768 ; N uniA791 ; G 4925
U 42912 ; WX 821 ; N uniA7A0 ; G 4926
U 42913 ; WX 716 ; N uniA7A1 ; G 4927
U 42914 ; WX 775 ; N uniA7A2 ; G 4928
U 42915 ; WX 665 ; N uniA7A3 ; G 4929
U 42916 ; WX 837 ; N uniA7A4 ; G 4930
U 42917 ; WX 712 ; N uniA7A5 ; G 4931
U 42918 ; WX 770 ; N uniA7A6 ; G 4932
U 42919 ; WX 493 ; N uniA7A7 ; G 4933
U 42920 ; WX 720 ; N uniA7A8 ; G 4934
U 42921 ; WX 595 ; N uniA7A9 ; G 4935
U 42922 ; WX 886 ; N uniA7AA ; G 4936
U 43000 ; WX 613 ; N uniA7F8 ; G 4937
U 43001 ; WX 689 ; N uniA7F9 ; G 4938
U 43002 ; WX 1062 ; N uniA7FA ; G 4939
U 43003 ; WX 683 ; N uniA7FB ; G 4940
U 43004 ; WX 733 ; N uniA7FC ; G 4941
U 43005 ; WX 995 ; N uniA7FD ; G 4942
U 43006 ; WX 372 ; N uniA7FE ; G 4943
U 43007 ; WX 1325 ; N uniA7FF ; G 4944
U 61184 ; WX 216 ; N uni02E5.5 ; G 4945
U 61185 ; WX 242 ; N uni02E6.5 ; G 4946
U 61186 ; WX 267 ; N uni02E7.5 ; G 4947
U 61187 ; WX 277 ; N uni02E8.5 ; G 4948
U 61188 ; WX 282 ; N uni02E9.5 ; G 4949
U 61189 ; WX 242 ; N uni02E5.4 ; G 4950
U 61190 ; WX 216 ; N uni02E6.4 ; G 4951
U 61191 ; WX 242 ; N uni02E7.4 ; G 4952
U 61192 ; WX 267 ; N uni02E8.4 ; G 4953
U 61193 ; WX 277 ; N uni02E9.4 ; G 4954
U 61194 ; WX 267 ; N uni02E5.3 ; G 4955
U 61195 ; WX 242 ; N uni02E6.3 ; G 4956
U 61196 ; WX 216 ; N uni02E7.3 ; G 4957
U 61197 ; WX 242 ; N uni02E8.3 ; G 4958
U 61198 ; WX 267 ; N uni02E9.3 ; G 4959
U 61199 ; WX 277 ; N uni02E5.2 ; G 4960
U 61200 ; WX 267 ; N uni02E6.2 ; G 4961
U 61201 ; WX 242 ; N uni02E7.2 ; G 4962
U 61202 ; WX 216 ; N uni02E8.2 ; G 4963
U 61203 ; WX 242 ; N uni02E9.2 ; G 4964
U 61204 ; WX 282 ; N uni02E5.1 ; G 4965
U 61205 ; WX 277 ; N uni02E6.1 ; G 4966
U 61206 ; WX 267 ; N uni02E7.1 ; G 4967
U 61207 ; WX 242 ; N uni02E8.1 ; G 4968
U 61208 ; WX 216 ; N uni02E9.1 ; G 4969
U 61209 ; WX 282 ; N stem ; G 4970
U 62464 ; WX 612 ; N uniF400 ; G 4971
U 62465 ; WX 612 ; N uniF401 ; G 4972
U 62466 ; WX 653 ; N uniF402 ; G 4973
U 62467 ; WX 902 ; N uniF403 ; G 4974
U 62468 ; WX 622 ; N uniF404 ; G 4975
U 62469 ; WX 622 ; N uniF405 ; G 4976
U 62470 ; WX 661 ; N uniF406 ; G 4977
U 62471 ; WX 895 ; N uniF407 ; G 4978
U 62472 ; WX 589 ; N uniF408 ; G 4979
U 62473 ; WX 622 ; N uniF409 ; G 4980
U 62474 ; WX 1163 ; N uniF40A ; G 4981
U 62475 ; WX 626 ; N uniF40B ; G 4982
U 62476 ; WX 627 ; N uniF40C ; G 4983
U 62477 ; WX 893 ; N uniF40D ; G 4984
U 62478 ; WX 612 ; N uniF40E ; G 4985
U 62479 ; WX 626 ; N uniF40F ; G 4986
U 62480 ; WX 924 ; N uniF410 ; G 4987
U 62481 ; WX 627 ; N uniF411 ; G 4988
U 62482 ; WX 744 ; N uniF412 ; G 4989
U 62483 ; WX 634 ; N uniF413 ; G 4990
U 62484 ; WX 886 ; N uniF414 ; G 4991
U 62485 ; WX 626 ; N uniF415 ; G 4992
U 62486 ; WX 907 ; N uniF416 ; G 4993
U 62487 ; WX 626 ; N uniF417 ; G 4994
U 62488 ; WX 621 ; N uniF418 ; G 4995
U 62489 ; WX 628 ; N uniF419 ; G 4996
U 62490 ; WX 677 ; N uniF41A ; G 4997
U 62491 ; WX 626 ; N uniF41B ; G 4998
U 62492 ; WX 621 ; N uniF41C ; G 4999
U 62493 ; WX 630 ; N uniF41D ; G 5000
U 62494 ; WX 627 ; N uniF41E ; G 5001
U 62495 ; WX 571 ; N uniF41F ; G 5002
U 62496 ; WX 622 ; N uniF420 ; G 5003
U 62497 ; WX 631 ; N uniF421 ; G 5004
U 62498 ; WX 612 ; N uniF422 ; G 5005
U 62499 ; WX 611 ; N uniF423 ; G 5006
U 62500 ; WX 618 ; N uniF424 ; G 5007
U 62501 ; WX 671 ; N uniF425 ; G 5008
U 62502 ; WX 963 ; N uniF426 ; G 5009
U 62504 ; WX 1023 ; N uniF428 ; G 5010
U 62505 ; WX 844 ; N uniF429 ; G 5011
U 62506 ; WX 563 ; N uniF42A ; G 5012
U 62507 ; WX 563 ; N uniF42B ; G 5013
U 62508 ; WX 563 ; N uniF42C ; G 5014
U 62509 ; WX 563 ; N uniF42D ; G 5015
U 62510 ; WX 563 ; N uniF42E ; G 5016
U 62511 ; WX 563 ; N uniF42F ; G 5017
U 62512 ; WX 555 ; N uniF430 ; G 5018
U 62513 ; WX 555 ; N uniF431 ; G 5019
U 62514 ; WX 555 ; N uniF432 ; G 5020
U 62515 ; WX 555 ; N uniF433 ; G 5021
U 62516 ; WX 573 ; N uniF434 ; G 5022
U 62517 ; WX 573 ; N uniF435 ; G 5023
U 62518 ; WX 573 ; N uniF436 ; G 5024
U 62519 ; WX 824 ; N uniF437 ; G 5025
U 62520 ; WX 824 ; N uniF438 ; G 5026
U 62521 ; WX 824 ; N uniF439 ; G 5027
U 62522 ; WX 824 ; N uniF43A ; G 5028
U 62523 ; WX 824 ; N uniF43B ; G 5029
U 62524 ; WX 611 ; N uniF43C ; G 5030
U 62525 ; WX 611 ; N uniF43D ; G 5031
U 62526 ; WX 611 ; N uniF43E ; G 5032
U 62527 ; WX 611 ; N uniF43F ; G 5033
U 62528 ; WX 611 ; N uniF440 ; G 5034
U 62529 ; WX 611 ; N uniF441 ; G 5035
U 63173 ; WX 687 ; N uniF6C5 ; G 5036
U 64256 ; WX 810 ; N uniFB00 ; G 5037
U 64257 ; WX 741 ; N fi ; G 5038
U 64258 ; WX 741 ; N fl ; G 5039
U 64259 ; WX 1115 ; N uniFB03 ; G 5040
U 64260 ; WX 1116 ; N uniFB04 ; G 5041
U 64261 ; WX 808 ; N uniFB05 ; G 5042
U 64262 ; WX 1020 ; N uniFB06 ; G 5043
U 64275 ; WX 1388 ; N uniFB13 ; G 5044
U 64276 ; WX 1384 ; N uniFB14 ; G 5045
U 64277 ; WX 1378 ; N uniFB15 ; G 5046
U 64278 ; WX 1384 ; N uniFB16 ; G 5047
U 64279 ; WX 1713 ; N uniFB17 ; G 5048
U 64285 ; WX 294 ; N uniFB1D ; G 5049
U 64286 ; WX 0 ; N uniFB1E ; G 5050
U 64287 ; WX 519 ; N uniFB1F ; G 5051
U 64288 ; WX 665 ; N uniFB20 ; G 5052
U 64289 ; WX 939 ; N uniFB21 ; G 5053
U 64290 ; WX 788 ; N uniFB22 ; G 5054
U 64291 ; WX 920 ; N uniFB23 ; G 5055
U 64292 ; WX 786 ; N uniFB24 ; G 5056
U 64293 ; WX 857 ; N uniFB25 ; G 5057
U 64294 ; WX 869 ; N uniFB26 ; G 5058
U 64295 ; WX 821 ; N uniFB27 ; G 5059
U 64296 ; WX 890 ; N uniFB28 ; G 5060
U 64297 ; WX 838 ; N uniFB29 ; G 5061
U 64298 ; WX 758 ; N uniFB2A ; G 5062
U 64299 ; WX 758 ; N uniFB2B ; G 5063
U 64300 ; WX 758 ; N uniFB2C ; G 5064
U 64301 ; WX 758 ; N uniFB2D ; G 5065
U 64302 ; WX 728 ; N uniFB2E ; G 5066
U 64303 ; WX 728 ; N uniFB2F ; G 5067
U 64304 ; WX 728 ; N uniFB30 ; G 5068
U 64305 ; WX 610 ; N uniFB31 ; G 5069
U 64306 ; WX 447 ; N uniFB32 ; G 5070
U 64307 ; WX 588 ; N uniFB33 ; G 5071
U 64308 ; WX 687 ; N uniFB34 ; G 5072
U 64309 ; WX 437 ; N uniFB35 ; G 5073
U 64310 ; WX 485 ; N uniFB36 ; G 5074
U 64312 ; WX 679 ; N uniFB38 ; G 5075
U 64313 ; WX 435 ; N uniFB39 ; G 5076
U 64314 ; WX 578 ; N uniFB3A ; G 5077
U 64315 ; WX 566 ; N uniFB3B ; G 5078
U 64316 ; WX 605 ; N uniFB3C ; G 5079
U 64318 ; WX 724 ; N uniFB3E ; G 5080
U 64320 ; WX 453 ; N uniFB40 ; G 5081
U 64321 ; WX 680 ; N uniFB41 ; G 5082
U 64323 ; WX 675 ; N uniFB43 ; G 5083
U 64324 ; WX 658 ; N uniFB44 ; G 5084
U 64326 ; WX 653 ; N uniFB46 ; G 5085
U 64327 ; WX 736 ; N uniFB47 ; G 5086
U 64328 ; WX 602 ; N uniFB48 ; G 5087
U 64329 ; WX 758 ; N uniFB49 ; G 5088
U 64330 ; WX 683 ; N uniFB4A ; G 5089
U 64331 ; WX 343 ; N uniFB4B ; G 5090
U 64332 ; WX 610 ; N uniFB4C ; G 5091
U 64333 ; WX 566 ; N uniFB4D ; G 5092
U 64334 ; WX 658 ; N uniFB4E ; G 5093
U 64335 ; WX 710 ; N uniFB4F ; G 5094
U 64338 ; WX 1005 ; N uniFB52 ; G 5095
U 64339 ; WX 1059 ; N uniFB53 ; G 5096
U 64340 ; WX 375 ; N uniFB54 ; G 5097
U 64341 ; WX 408 ; N uniFB55 ; G 5098
U 64342 ; WX 1005 ; N uniFB56 ; G 5099
U 64343 ; WX 1059 ; N uniFB57 ; G 5100
U 64344 ; WX 375 ; N uniFB58 ; G 5101
U 64345 ; WX 408 ; N uniFB59 ; G 5102
U 64346 ; WX 1005 ; N uniFB5A ; G 5103
U 64347 ; WX 1059 ; N uniFB5B ; G 5104
U 64348 ; WX 375 ; N uniFB5C ; G 5105
U 64349 ; WX 408 ; N uniFB5D ; G 5106
U 64350 ; WX 1005 ; N uniFB5E ; G 5107
U 64351 ; WX 1059 ; N uniFB5F ; G 5108
U 64352 ; WX 375 ; N uniFB60 ; G 5109
U 64353 ; WX 408 ; N uniFB61 ; G 5110
U 64354 ; WX 1005 ; N uniFB62 ; G 5111
U 64355 ; WX 1059 ; N uniFB63 ; G 5112
U 64356 ; WX 375 ; N uniFB64 ; G 5113
U 64357 ; WX 408 ; N uniFB65 ; G 5114
U 64358 ; WX 1005 ; N uniFB66 ; G 5115
U 64359 ; WX 1059 ; N uniFB67 ; G 5116
U 64360 ; WX 375 ; N uniFB68 ; G 5117
U 64361 ; WX 408 ; N uniFB69 ; G 5118
U 64362 ; WX 1162 ; N uniFB6A ; G 5119
U 64363 ; WX 1191 ; N uniFB6B ; G 5120
U 64364 ; WX 655 ; N uniFB6C ; G 5121
U 64365 ; WX 720 ; N uniFB6D ; G 5122
U 64366 ; WX 1162 ; N uniFB6E ; G 5123
U 64367 ; WX 1191 ; N uniFB6F ; G 5124
U 64368 ; WX 655 ; N uniFB70 ; G 5125
U 64369 ; WX 720 ; N uniFB71 ; G 5126
U 64370 ; WX 721 ; N uniFB72 ; G 5127
U 64371 ; WX 721 ; N uniFB73 ; G 5128
U 64372 ; WX 721 ; N uniFB74 ; G 5129
U 64373 ; WX 721 ; N uniFB75 ; G 5130
U 64374 ; WX 721 ; N uniFB76 ; G 5131
U 64375 ; WX 721 ; N uniFB77 ; G 5132
U 64376 ; WX 721 ; N uniFB78 ; G 5133
U 64377 ; WX 721 ; N uniFB79 ; G 5134
U 64378 ; WX 721 ; N uniFB7A ; G 5135
U 64379 ; WX 721 ; N uniFB7B ; G 5136
U 64380 ; WX 721 ; N uniFB7C ; G 5137
U 64381 ; WX 721 ; N uniFB7D ; G 5138
U 64382 ; WX 721 ; N uniFB7E ; G 5139
U 64383 ; WX 721 ; N uniFB7F ; G 5140
U 64384 ; WX 721 ; N uniFB80 ; G 5141
U 64385 ; WX 721 ; N uniFB81 ; G 5142
U 64386 ; WX 513 ; N uniFB82 ; G 5143
U 64387 ; WX 578 ; N uniFB83 ; G 5144
U 64388 ; WX 513 ; N uniFB84 ; G 5145
U 64389 ; WX 578 ; N uniFB85 ; G 5146
U 64390 ; WX 513 ; N uniFB86 ; G 5147
U 64391 ; WX 578 ; N uniFB87 ; G 5148
U 64392 ; WX 513 ; N uniFB88 ; G 5149
U 64393 ; WX 578 ; N uniFB89 ; G 5150
U 64394 ; WX 576 ; N uniFB8A ; G 5151
U 64395 ; WX 622 ; N uniFB8B ; G 5152
U 64396 ; WX 576 ; N uniFB8C ; G 5153
U 64397 ; WX 622 ; N uniFB8D ; G 5154
U 64398 ; WX 1024 ; N uniFB8E ; G 5155
U 64399 ; WX 1024 ; N uniFB8F ; G 5156
U 64400 ; WX 582 ; N uniFB90 ; G 5157
U 64401 ; WX 582 ; N uniFB91 ; G 5158
U 64402 ; WX 1024 ; N uniFB92 ; G 5159
U 64403 ; WX 1024 ; N uniFB93 ; G 5160
U 64404 ; WX 582 ; N uniFB94 ; G 5161
U 64405 ; WX 582 ; N uniFB95 ; G 5162
U 64406 ; WX 1024 ; N uniFB96 ; G 5163
U 64407 ; WX 1024 ; N uniFB97 ; G 5164
U 64408 ; WX 582 ; N uniFB98 ; G 5165
U 64409 ; WX 582 ; N uniFB99 ; G 5166
U 64410 ; WX 1024 ; N uniFB9A ; G 5167
U 64411 ; WX 1024 ; N uniFB9B ; G 5168
U 64412 ; WX 582 ; N uniFB9C ; G 5169
U 64413 ; WX 582 ; N uniFB9D ; G 5170
U 64414 ; WX 854 ; N uniFB9E ; G 5171
U 64415 ; WX 900 ; N uniFB9F ; G 5172
U 64416 ; WX 854 ; N uniFBA0 ; G 5173
U 64417 ; WX 900 ; N uniFBA1 ; G 5174
U 64418 ; WX 375 ; N uniFBA2 ; G 5175
U 64419 ; WX 408 ; N uniFBA3 ; G 5176
U 64426 ; WX 938 ; N uniFBAA ; G 5177
U 64427 ; WX 880 ; N uniFBAB ; G 5178
U 64428 ; WX 693 ; N uniFBAC ; G 5179
U 64429 ; WX 660 ; N uniFBAD ; G 5180
U 64467 ; WX 824 ; N uniFBD3 ; G 5181
U 64468 ; WX 843 ; N uniFBD4 ; G 5182
U 64469 ; WX 476 ; N uniFBD5 ; G 5183
U 64470 ; WX 552 ; N uniFBD6 ; G 5184
U 64471 ; WX 622 ; N uniFBD7 ; G 5185
U 64472 ; WX 627 ; N uniFBD8 ; G 5186
U 64473 ; WX 622 ; N uniFBD9 ; G 5187
U 64474 ; WX 627 ; N uniFBDA ; G 5188
U 64475 ; WX 622 ; N uniFBDB ; G 5189
U 64476 ; WX 627 ; N uniFBDC ; G 5190
U 64478 ; WX 622 ; N uniFBDE ; G 5191
U 64479 ; WX 627 ; N uniFBDF ; G 5192
U 64484 ; WX 917 ; N uniFBE4 ; G 5193
U 64485 ; WX 1012 ; N uniFBE5 ; G 5194
U 64486 ; WX 375 ; N uniFBE6 ; G 5195
U 64487 ; WX 408 ; N uniFBE7 ; G 5196
U 64488 ; WX 375 ; N uniFBE8 ; G 5197
U 64489 ; WX 408 ; N uniFBE9 ; G 5198
U 64508 ; WX 917 ; N uniFBFC ; G 5199
U 64509 ; WX 1012 ; N uniFBFD ; G 5200
U 64510 ; WX 375 ; N uniFBFE ; G 5201
U 64511 ; WX 408 ; N uniFBFF ; G 5202
U 65024 ; WX 0 ; N uniFE00 ; G 5203
U 65025 ; WX 0 ; N uniFE01 ; G 5204
U 65026 ; WX 0 ; N uniFE02 ; G 5205
U 65027 ; WX 0 ; N uniFE03 ; G 5206
U 65028 ; WX 0 ; N uniFE04 ; G 5207
U 65029 ; WX 0 ; N uniFE05 ; G 5208
U 65030 ; WX 0 ; N uniFE06 ; G 5209
U 65031 ; WX 0 ; N uniFE07 ; G 5210
U 65032 ; WX 0 ; N uniFE08 ; G 5211
U 65033 ; WX 0 ; N uniFE09 ; G 5212
U 65034 ; WX 0 ; N uniFE0A ; G 5213
U 65035 ; WX 0 ; N uniFE0B ; G 5214
U 65036 ; WX 0 ; N uniFE0C ; G 5215
U 65037 ; WX 0 ; N uniFE0D ; G 5216
U 65038 ; WX 0 ; N uniFE0E ; G 5217
U 65039 ; WX 0 ; N uniFE0F ; G 5218
U 65056 ; WX 0 ; N uniFE20 ; G 5219
U 65057 ; WX 0 ; N uniFE21 ; G 5220
U 65058 ; WX 0 ; N uniFE22 ; G 5221
U 65059 ; WX 0 ; N uniFE23 ; G 5222
U 65136 ; WX 342 ; N uniFE70 ; G 5223
U 65137 ; WX 342 ; N uniFE71 ; G 5224
U 65138 ; WX 342 ; N uniFE72 ; G 5225
U 65139 ; WX 346 ; N uniFE73 ; G 5226
U 65140 ; WX 342 ; N uniFE74 ; G 5227
U 65142 ; WX 342 ; N uniFE76 ; G 5228
U 65143 ; WX 342 ; N uniFE77 ; G 5229
U 65144 ; WX 342 ; N uniFE78 ; G 5230
U 65145 ; WX 342 ; N uniFE79 ; G 5231
U 65146 ; WX 342 ; N uniFE7A ; G 5232
U 65147 ; WX 342 ; N uniFE7B ; G 5233
U 65148 ; WX 342 ; N uniFE7C ; G 5234
U 65149 ; WX 342 ; N uniFE7D ; G 5235
U 65150 ; WX 342 ; N uniFE7E ; G 5236
U 65151 ; WX 342 ; N uniFE7F ; G 5237
U 65152 ; WX 511 ; N uniFE80 ; G 5238
U 65153 ; WX 343 ; N uniFE81 ; G 5239
U 65154 ; WX 375 ; N uniFE82 ; G 5240
U 65155 ; WX 343 ; N uniFE83 ; G 5241
U 65156 ; WX 375 ; N uniFE84 ; G 5242
U 65157 ; WX 622 ; N uniFE85 ; G 5243
U 65158 ; WX 627 ; N uniFE86 ; G 5244
U 65159 ; WX 343 ; N uniFE87 ; G 5245
U 65160 ; WX 375 ; N uniFE88 ; G 5246
U 65161 ; WX 917 ; N uniFE89 ; G 5247
U 65162 ; WX 917 ; N uniFE8A ; G 5248
U 65163 ; WX 375 ; N uniFE8B ; G 5249
U 65164 ; WX 408 ; N uniFE8C ; G 5250
U 65165 ; WX 343 ; N uniFE8D ; G 5251
U 65166 ; WX 375 ; N uniFE8E ; G 5252
U 65167 ; WX 1005 ; N uniFE8F ; G 5253
U 65168 ; WX 1059 ; N uniFE90 ; G 5254
U 65169 ; WX 375 ; N uniFE91 ; G 5255
U 65170 ; WX 408 ; N uniFE92 ; G 5256
U 65171 ; WX 590 ; N uniFE93 ; G 5257
U 65172 ; WX 606 ; N uniFE94 ; G 5258
U 65173 ; WX 1005 ; N uniFE95 ; G 5259
U 65174 ; WX 1059 ; N uniFE96 ; G 5260
U 65175 ; WX 375 ; N uniFE97 ; G 5261
U 65176 ; WX 408 ; N uniFE98 ; G 5262
U 65177 ; WX 1005 ; N uniFE99 ; G 5263
U 65178 ; WX 1059 ; N uniFE9A ; G 5264
U 65179 ; WX 375 ; N uniFE9B ; G 5265
U 65180 ; WX 408 ; N uniFE9C ; G 5266
U 65181 ; WX 721 ; N uniFE9D ; G 5267
U 65182 ; WX 721 ; N uniFE9E ; G 5268
U 65183 ; WX 721 ; N uniFE9F ; G 5269
U 65184 ; WX 721 ; N uniFEA0 ; G 5270
U 65185 ; WX 721 ; N uniFEA1 ; G 5271
U 65186 ; WX 721 ; N uniFEA2 ; G 5272
U 65187 ; WX 721 ; N uniFEA3 ; G 5273
U 65188 ; WX 721 ; N uniFEA4 ; G 5274
U 65189 ; WX 721 ; N uniFEA5 ; G 5275
U 65190 ; WX 721 ; N uniFEA6 ; G 5276
U 65191 ; WX 721 ; N uniFEA7 ; G 5277
U 65192 ; WX 721 ; N uniFEA8 ; G 5278
U 65193 ; WX 513 ; N uniFEA9 ; G 5279
U 65194 ; WX 578 ; N uniFEAA ; G 5280
U 65195 ; WX 513 ; N uniFEAB ; G 5281
U 65196 ; WX 578 ; N uniFEAC ; G 5282
U 65197 ; WX 576 ; N uniFEAD ; G 5283
U 65198 ; WX 622 ; N uniFEAE ; G 5284
U 65199 ; WX 576 ; N uniFEAF ; G 5285
U 65200 ; WX 622 ; N uniFEB0 ; G 5286
U 65201 ; WX 1380 ; N uniFEB1 ; G 5287
U 65202 ; WX 1414 ; N uniFEB2 ; G 5288
U 65203 ; WX 983 ; N uniFEB3 ; G 5289
U 65204 ; WX 1018 ; N uniFEB4 ; G 5290
U 65205 ; WX 1380 ; N uniFEB5 ; G 5291
U 65206 ; WX 1414 ; N uniFEB6 ; G 5292
U 65207 ; WX 983 ; N uniFEB7 ; G 5293
U 65208 ; WX 1018 ; N uniFEB8 ; G 5294
U 65209 ; WX 1345 ; N uniFEB9 ; G 5295
U 65210 ; WX 1364 ; N uniFEBA ; G 5296
U 65211 ; WX 966 ; N uniFEBB ; G 5297
U 65212 ; WX 985 ; N uniFEBC ; G 5298
U 65213 ; WX 1345 ; N uniFEBD ; G 5299
U 65214 ; WX 1364 ; N uniFEBE ; G 5300
U 65215 ; WX 966 ; N uniFEBF ; G 5301
U 65216 ; WX 985 ; N uniFEC0 ; G 5302
U 65217 ; WX 1039 ; N uniFEC1 ; G 5303
U 65218 ; WX 1071 ; N uniFEC2 ; G 5304
U 65219 ; WX 942 ; N uniFEC3 ; G 5305
U 65220 ; WX 974 ; N uniFEC4 ; G 5306
U 65221 ; WX 1039 ; N uniFEC5 ; G 5307
U 65222 ; WX 1071 ; N uniFEC6 ; G 5308
U 65223 ; WX 942 ; N uniFEC7 ; G 5309
U 65224 ; WX 974 ; N uniFEC8 ; G 5310
U 65225 ; WX 683 ; N uniFEC9 ; G 5311
U 65226 ; WX 683 ; N uniFECA ; G 5312
U 65227 ; WX 683 ; N uniFECB ; G 5313
U 65228 ; WX 564 ; N uniFECC ; G 5314
U 65229 ; WX 683 ; N uniFECD ; G 5315
U 65230 ; WX 683 ; N uniFECE ; G 5316
U 65231 ; WX 683 ; N uniFECF ; G 5317
U 65232 ; WX 564 ; N uniFED0 ; G 5318
U 65233 ; WX 1162 ; N uniFED1 ; G 5319
U 65234 ; WX 1191 ; N uniFED2 ; G 5320
U 65235 ; WX 655 ; N uniFED3 ; G 5321
U 65236 ; WX 720 ; N uniFED4 ; G 5322
U 65237 ; WX 894 ; N uniFED5 ; G 5323
U 65238 ; WX 901 ; N uniFED6 ; G 5324
U 65239 ; WX 655 ; N uniFED7 ; G 5325
U 65240 ; WX 720 ; N uniFED8 ; G 5326
U 65241 ; WX 917 ; N uniFED9 ; G 5327
U 65242 ; WX 931 ; N uniFEDA ; G 5328
U 65243 ; WX 582 ; N uniFEDB ; G 5329
U 65244 ; WX 582 ; N uniFEDC ; G 5330
U 65245 ; WX 868 ; N uniFEDD ; G 5331
U 65246 ; WX 893 ; N uniFEDE ; G 5332
U 65247 ; WX 375 ; N uniFEDF ; G 5333
U 65248 ; WX 408 ; N uniFEE0 ; G 5334
U 65249 ; WX 733 ; N uniFEE1 ; G 5335
U 65250 ; WX 784 ; N uniFEE2 ; G 5336
U 65251 ; WX 619 ; N uniFEE3 ; G 5337
U 65252 ; WX 670 ; N uniFEE4 ; G 5338
U 65253 ; WX 854 ; N uniFEE5 ; G 5339
U 65254 ; WX 900 ; N uniFEE6 ; G 5340
U 65255 ; WX 375 ; N uniFEE7 ; G 5341
U 65256 ; WX 408 ; N uniFEE8 ; G 5342
U 65257 ; WX 590 ; N uniFEE9 ; G 5343
U 65258 ; WX 606 ; N uniFEEA ; G 5344
U 65259 ; WX 693 ; N uniFEEB ; G 5345
U 65260 ; WX 660 ; N uniFEEC ; G 5346
U 65261 ; WX 622 ; N uniFEED ; G 5347
U 65262 ; WX 627 ; N uniFEEE ; G 5348
U 65263 ; WX 917 ; N uniFEEF ; G 5349
U 65264 ; WX 1012 ; N uniFEF0 ; G 5350
U 65265 ; WX 917 ; N uniFEF1 ; G 5351
U 65266 ; WX 1012 ; N uniFEF2 ; G 5352
U 65267 ; WX 375 ; N uniFEF3 ; G 5353
U 65268 ; WX 408 ; N uniFEF4 ; G 5354
U 65269 ; WX 745 ; N uniFEF5 ; G 5355
U 65270 ; WX 759 ; N uniFEF6 ; G 5356
U 65271 ; WX 745 ; N uniFEF7 ; G 5357
U 65272 ; WX 759 ; N uniFEF8 ; G 5358
U 65273 ; WX 745 ; N uniFEF9 ; G 5359
U 65274 ; WX 759 ; N uniFEFA ; G 5360
U 65275 ; WX 745 ; N uniFEFB ; G 5361
U 65276 ; WX 759 ; N uniFEFC ; G 5362
U 65279 ; WX 0 ; N uniFEFF ; G 5363
U 65529 ; WX 0 ; N uniFFF9 ; G 5364
U 65530 ; WX 0 ; N uniFFFA ; G 5365
U 65531 ; WX 0 ; N uniFFFB ; G 5366
U 65532 ; WX 0 ; N uniFFFC ; G 5367
U 65533 ; WX 1113 ; N uniFFFD ; G 5368
EndCharMetrics
StartKernData 
StartKernPairs 1538

KPX dollar seven -159
KPX dollar eight -63
KPX dollar nine -139
KPX dollar colon -92
KPX dollar less -196
KPX dollar Y -73
KPX dollar backslash -73
KPX dollar questiondown -73
KPX dollar Aacute -73
KPX dollar Hcircumflex -159
KPX dollar Hbar -159
KPX dollar Imacron -63
KPX dollar Ibreve -63
KPX dollar Iogonek -63
KPX dollar Idot -63
KPX dollar IJ -63
KPX dollar Kcommaaccent -92
KPX dollar kgreenlandic -196
KPX dollar Lacute -73
KPX dollar lacute -196
KPX dollar uni01DC -159
KPX dollar uni01F4 -196
KPX dollar uni01F5 -73

KPX percent nine -83
KPX percent colon -112
KPX percent less -112
KPX percent Kcommaaccent -112
KPX percent kgreenlandic -112
KPX percent lacute -112
KPX percent uni01F4 -112

KPX ampersand six 38
KPX ampersand Gcircumflex 38
KPX ampersand Gbreve 38
KPX ampersand Gdotaccent 38
KPX ampersand Gcommaaccent 38
KPX ampersand uni01DA 38

KPX quotesingle less -149
KPX quotesingle kgreenlandic -149
KPX quotesingle lacute -149
KPX quotesingle uni01F4 -149

KPX parenright dollar -235
KPX parenright D -120
KPX parenright H -83
KPX parenright R -83
KPX parenright U -131
KPX parenright X -102
KPX parenright backslash -112
KPX parenright cent -120
KPX parenright sterling -120
KPX parenright currency -120
KPX parenright yen -120
KPX parenright brokenbar -120
KPX parenright section -120
KPX parenright dieresis -120
KPX parenright ordfeminine -83
KPX parenright guillemotleft -83
KPX parenright logicalnot -83
KPX parenright sfthyphen -83
KPX parenright acute -83
KPX parenright mu -83
KPX parenright paragraph -83
KPX parenright periodcentered -83
KPX parenright cedilla -83
KPX parenright ordmasculine -83
KPX parenright guillemotright -102
KPX parenright onequarter -102
KPX parenright onehalf -102
KPX parenright threequarters -102
KPX parenright questiondown -112
KPX parenright Aacute -112
KPX parenright Acircumflex -235
KPX parenright Atilde -120
KPX parenright Adieresis -235
KPX parenright Aring -120
KPX parenright AE -235
KPX parenright Ccedilla -120
KPX parenright Otilde -83
KPX parenright multiply -83
KPX parenright Ugrave -83
KPX parenright Ucircumflex -83
KPX parenright Yacute -83
KPX parenright dcaron -83
KPX parenright dmacron -83
KPX parenright emacron -83
KPX parenright ebreve -83
KPX parenright edotaccent -131
KPX parenright eogonek -131
KPX parenright ecaron -131
KPX parenright imacron -102
KPX parenright ibreve -102
KPX parenright iogonek -102
KPX parenright dotlessi -102
KPX parenright ij -102
KPX parenright jcircumflex -102
KPX parenright Lacute -112
KPX parenright uni01A5 -120
KPX parenright uni01AD -83
KPX parenright Uhorn -83
KPX parenright uni01F1 -83
KPX parenright uni01F5 -112

KPX asterisk seven -36
KPX asterisk less -45
KPX asterisk Hbar -36
KPX asterisk lacute -45

KPX period ampersand -92
KPX period two -92
KPX period eight -36
KPX period H -36
KPX period R -36
KPX period X -36
KPX period backslash -131
KPX period ordfeminine -36
KPX period guillemotleft -36
KPX period logicalnot -36
KPX period sfthyphen -36
KPX period acute -36
KPX period mu -36
KPX period paragraph -36
KPX period periodcentered -36
KPX period cedilla -36
KPX period ordmasculine -36
KPX period guillemotright -36
KPX period onequarter -36
KPX period onehalf -36
KPX period threequarters -36
KPX period questiondown -131
KPX period Aacute -131
KPX period Egrave -92
KPX period Icircumflex -92
KPX period Yacute -36
KPX period Ebreve -102
KPX period ebreve -36
KPX period Idot -36
KPX period dotlessi -36

KPX slash two -73
KPX slash seven -339
KPX slash eight -73
KPX slash nine -282
KPX slash colon -159
KPX slash less -319
KPX slash backslash -139
KPX slash questiondown -139
KPX slash Aacute -139
KPX slash Ebreve -73
KPX slash Hbar -339
KPX slash Idot -73
KPX slash lacute -319

KPX two dollar -55
KPX two nine -55
KPX two semicolon -73
KPX two less -73
KPX two lacute -73

KPX three dollar -188
KPX three D -55
KPX three V -36
KPX three backslash 38
KPX three cent -55
KPX three sterling -55
KPX three currency -55
KPX three yen -55
KPX three brokenbar -55
KPX three section -55
KPX three dieresis -55
KPX three questiondown 38
KPX three Aacute 38
KPX three gdotaccent -36
KPX three gcommaaccent -36


KPX five seven -92
KPX five less -112
KPX five backslash -92
KPX five questiondown -92
KPX five Aacute -92
KPX five Hbar -92
KPX five lacute -112

KPX six six -92
KPX six Gdotaccent -92
KPX six Gcommaaccent -92

KPX seven dollar -159
KPX seven seven 47
KPX seven D -264
KPX seven F -272
KPX seven H -272
KPX seven R -272
KPX seven U -225
KPX seven V -272
KPX seven X -225
KPX seven Z -225
KPX seven backslash -243
KPX seven cent -164
KPX seven sterling -264
KPX seven currency -164
KPX seven yen -164
KPX seven brokenbar -164
KPX seven section -164
KPX seven dieresis -196
KPX seven copyright -272
KPX seven ordfeminine -212
KPX seven guillemotleft -272
KPX seven logicalnot -212
KPX seven sfthyphen -212
KPX seven acute -192
KPX seven mu -272
KPX seven paragraph -192
KPX seven periodcentered -192
KPX seven cedilla -192
KPX seven ordmasculine -159
KPX seven guillemotright -195
KPX seven onequarter -225
KPX seven onehalf -195
KPX seven threequarters -195
KPX seven questiondown -243
KPX seven Aacute -243
KPX seven Eacute -272
KPX seven Idieresis -272
KPX seven Yacute -272
KPX seven ebreve -159
KPX seven edotaccent -225
KPX seven ecaron -225
KPX seven gdotaccent -272
KPX seven gcommaaccent -272
KPX seven dotlessi -225

KPX eight dollar -63

KPX nine dollar -139
KPX nine two -36
KPX nine D -112
KPX nine H -112
KPX nine L -36
KPX nine R -112
KPX nine X -73
KPX nine cent -112
KPX nine sterling -112
KPX nine currency -112
KPX nine yen -112
KPX nine brokenbar -112
KPX nine section -112
KPX nine dieresis -112
KPX nine ordfeminine -112
KPX nine guillemotleft -112
KPX nine logicalnot -112
KPX nine sfthyphen -112
KPX nine acute -112
KPX nine mu -112
KPX nine paragraph -112
KPX nine periodcentered -112
KPX nine cedilla -112
KPX nine ordmasculine -112
KPX nine guillemotright -73
KPX nine onequarter -73
KPX nine onehalf -73
KPX nine threequarters -73
KPX nine Yacute -112
KPX nine Ebreve -36
KPX nine ebreve -112
KPX nine dotlessi -73

KPX colon dollar -92
KPX colon D -73
KPX colon H -73
KPX colon R -73
KPX colon U -36
KPX colon cent -73
KPX colon sterling -73
KPX colon currency -73
KPX colon yen -73
KPX colon brokenbar -73
KPX colon section -73
KPX colon dieresis -73
KPX colon ordfeminine -73
KPX colon guillemotleft -73
KPX colon logicalnot -73
KPX colon sfthyphen -73
KPX colon acute -73
KPX colon mu -73
KPX colon paragraph -73
KPX colon periodcentered -73
KPX colon cedilla -73
KPX colon ordmasculine -73
KPX colon Yacute -73
KPX colon ebreve -73
KPX colon edotaccent -36
KPX colon ecaron -36

KPX semicolon ampersand -73
KPX semicolon two -73
KPX semicolon H -55
KPX semicolon ordfeminine -55
KPX semicolon guillemotleft -55
KPX semicolon logicalnot -55
KPX semicolon sfthyphen -55
KPX semicolon Egrave -73
KPX semicolon Icircumflex -73
KPX semicolon Yacute -55
KPX semicolon Ebreve -73

KPX less dollar -196
KPX less ampersand -73
KPX less two -73
KPX less D -188
KPX less H -188
KPX less R -188
KPX less X -149
KPX less cent -188
KPX less sterling -188
KPX less currency -188
KPX less yen -188
KPX less brokenbar -188
KPX less section -188
KPX less dieresis -188
KPX less ordfeminine -188
KPX less guillemotleft -188
KPX less logicalnot -188
KPX less sfthyphen -188
KPX less acute -188
KPX less mu -188
KPX less paragraph -188
KPX less periodcentered -188
KPX less cedilla -188
KPX less ordmasculine -188
KPX less guillemotright -149
KPX less onequarter -149
KPX less onehalf -149
KPX less threequarters -149
KPX less Egrave -73
KPX less Icircumflex -73
KPX less Yacute -188
KPX less Ebreve -92
KPX less ebreve -188
KPX less dotlessi -149


KPX D backslash -63
KPX D questiondown -63
KPX D Aacute -63


KPX N H -55
KPX N R -55
KPX N ordfeminine -55
KPX N guillemotleft -55
KPX N logicalnot -55
KPX N sfthyphen -55
KPX N acute -55
KPX N mu -55
KPX N paragraph -55
KPX N periodcentered -55
KPX N cedilla -55
KPX N ordmasculine -45
KPX N Yacute -55
KPX N ebreve -55





KPX cent backslash -63
KPX cent questiondown -63
KPX cent Aacute -63

KPX sterling backslash -63
KPX sterling questiondown -63
KPX sterling Aacute -63

KPX currency backslash -63
KPX currency questiondown -63
KPX currency Aacute -63

KPX yen backslash -63
KPX yen questiondown -63
KPX yen Aacute -63

KPX brokenbar backslash -63
KPX brokenbar questiondown -63
KPX brokenbar Aacute -63

KPX section backslash -63
KPX section questiondown -63
KPX section Aacute -63



KPX Acircumflex seven -159
KPX Acircumflex eight -63
KPX Acircumflex nine -139
KPX Acircumflex colon -92
KPX Acircumflex less -196
KPX Acircumflex Y -73
KPX Acircumflex backslash -73
KPX Acircumflex questiondown -73
KPX Acircumflex Aacute -73
KPX Acircumflex Hcircumflex -159
KPX Acircumflex Hbar -159
KPX Acircumflex Imacron -63
KPX Acircumflex Ibreve -63
KPX Acircumflex Iogonek -63
KPX Acircumflex Idot -63
KPX Acircumflex IJ -63
KPX Acircumflex Kcommaaccent -92
KPX Acircumflex kgreenlandic -196
KPX Acircumflex Lacute -73
KPX Acircumflex lacute -196
KPX Acircumflex uni01DC -159
KPX Acircumflex uni01F4 -196
KPX Acircumflex uni01F5 -73

KPX Adieresis seven -159
KPX Adieresis eight -63
KPX Adieresis nine -139
KPX Adieresis colon -92
KPX Adieresis less -196
KPX Adieresis Y -73
KPX Adieresis backslash -73
KPX Adieresis questiondown -73
KPX Adieresis Aacute -73
KPX Adieresis Hcircumflex -159
KPX Adieresis Hbar -159
KPX Adieresis Imacron -63
KPX Adieresis Ibreve -63
KPX Adieresis Iogonek -63
KPX Adieresis Idot -63
KPX Adieresis IJ -63
KPX Adieresis Kcommaaccent -92
KPX Adieresis kgreenlandic -196
KPX Adieresis Lacute -73
KPX Adieresis lacute -196
KPX Adieresis uni01DC -159
KPX Adieresis uni01F4 -196
KPX Adieresis uni01F5 -73

KPX AE seven -159
KPX AE eight -63
KPX AE nine -139
KPX AE colon -92
KPX AE less -196
KPX AE Y -73
KPX AE backslash -73
KPX AE questiondown -73
KPX AE Aacute -73
KPX AE Hcircumflex -159
KPX AE Hbar -159
KPX AE Imacron -63
KPX AE Ibreve -63
KPX AE Iogonek -63
KPX AE Idot -63
KPX AE IJ -63
KPX AE Kcommaaccent -92
KPX AE kgreenlandic -196
KPX AE Lacute -73
KPX AE lacute -196
KPX AE uni01DC -159
KPX AE uni01F4 -196
KPX AE uni01F5 -73

KPX Egrave six 38
KPX Egrave Gcircumflex 38
KPX Egrave Gbreve 38
KPX Egrave Gdotaccent 38
KPX Egrave Gcommaaccent 38
KPX Egrave uni01DA 38

KPX Ecircumflex six 38
KPX Ecircumflex Gcircumflex 38
KPX Ecircumflex Gbreve 38
KPX Ecircumflex Gdotaccent 38
KPX Ecircumflex Gcommaaccent 38
KPX Ecircumflex uni01DA 38

KPX Igrave six 38
KPX Igrave Gcircumflex 38
KPX Igrave Gbreve 38
KPX Igrave Gdotaccent 38
KPX Igrave Gcommaaccent 38
KPX Igrave uni01DA 38

KPX Icircumflex six 38
KPX Icircumflex Gcircumflex 38
KPX Icircumflex Gbreve 38
KPX Icircumflex Gdotaccent 38
KPX Icircumflex Gcommaaccent 38
KPX Icircumflex uni01DA 38

KPX Eth less -149
KPX Eth kgreenlandic -149
KPX Eth lacute -149
KPX Eth uni01F4 -149

KPX Ograve less -149
KPX Ograve kgreenlandic -149
KPX Ograve lacute -149
KPX Ograve uni01F4 -149

KPX agrave seven -36
KPX agrave less -45
KPX agrave Hbar -36
KPX agrave lacute -45

KPX ucircumflex two -73
KPX ucircumflex seven -339
KPX ucircumflex eight -73
KPX ucircumflex nine -282
KPX ucircumflex colon -159
KPX ucircumflex less -319
KPX ucircumflex backslash -139
KPX ucircumflex questiondown -139
KPX ucircumflex Aacute -139
KPX ucircumflex Ebreve -73
KPX ucircumflex Hbar -339
KPX ucircumflex Idot -73
KPX ucircumflex lacute -319

KPX ydieresis two -73
KPX ydieresis seven -339
KPX ydieresis eight -73
KPX ydieresis nine -282
KPX ydieresis colon -159
KPX ydieresis less -319
KPX ydieresis backslash -139
KPX ydieresis questiondown -139
KPX ydieresis Aacute -139
KPX ydieresis Ebreve -73
KPX ydieresis Hbar -339
KPX ydieresis Idot -73
KPX ydieresis lacute -319

KPX Abreve O -246

KPX abreve two -73
KPX abreve seven -339
KPX abreve eight -73
KPX abreve nine -282
KPX abreve colon -159
KPX abreve less -319
KPX abreve backslash -139
KPX abreve questiondown -139
KPX abreve Aacute -139
KPX abreve Ebreve -73
KPX abreve Hbar -339
KPX abreve Idot -73
KPX abreve lacute -319

KPX Edotaccent seven -92
KPX Edotaccent less -112
KPX Edotaccent backslash -92
KPX Edotaccent questiondown -92
KPX Edotaccent Aacute -92
KPX Edotaccent Hbar -92
KPX Edotaccent lacute -112


KPX Ecaron seven -92
KPX Ecaron less -112
KPX Ecaron backslash -92
KPX Ecaron questiondown -92
KPX Ecaron Aacute -92
KPX Ecaron Hbar -92
KPX Ecaron lacute -112


KPX Gdotaccent six -92
KPX Gdotaccent Gdotaccent -92
KPX Gdotaccent Gcommaaccent -92

KPX Gcommaaccent six -92
KPX Gcommaaccent Gdotaccent -92
KPX Gcommaaccent Gcommaaccent -92

KPX Hbar dollar -159
KPX Hbar seven 47
KPX Hbar D -264
KPX Hbar F -272
KPX Hbar H -272
KPX Hbar R -272
KPX Hbar U -225
KPX Hbar V -272
KPX Hbar X -225
KPX Hbar Z -225
KPX Hbar backslash -243
KPX Hbar cent -264
KPX Hbar sterling -264
KPX Hbar currency -264
KPX Hbar yen -264
KPX Hbar brokenbar -264
KPX Hbar section -264
KPX Hbar dieresis -196
KPX Hbar copyright -272
KPX Hbar ordfeminine -272
KPX Hbar guillemotleft -272
KPX Hbar logicalnot -272
KPX Hbar sfthyphen -272
KPX Hbar acute -272
KPX Hbar mu -272
KPX Hbar paragraph -272
KPX Hbar periodcentered -272
KPX Hbar cedilla -272
KPX Hbar ordmasculine -159
KPX Hbar guillemotright -225
KPX Hbar onequarter -225
KPX Hbar onehalf -225
KPX Hbar threequarters -225
KPX Hbar questiondown -243
KPX Hbar Aacute -243
KPX Hbar Eacute -272
KPX Hbar Idieresis -272
KPX Hbar Yacute -272
KPX Hbar ebreve -159
KPX Hbar edotaccent -225
KPX Hbar ecaron -225
KPX Hbar gdotaccent -272
KPX Hbar gcommaaccent -272
KPX Hbar Hbar 47
KPX Hbar dotlessi -225

KPX Idot dollar -63

KPX lacute dollar -196
KPX lacute ampersand -73
KPX lacute two -73
KPX lacute D -188
KPX lacute H -188
KPX lacute R -188
KPX lacute X -149
KPX lacute cent -188
KPX lacute sterling -188
KPX lacute currency -188
KPX lacute yen -188
KPX lacute brokenbar -188
KPX lacute section -188
KPX lacute dieresis -188
KPX lacute ordfeminine -188
KPX lacute guillemotleft -188
KPX lacute logicalnot -188
KPX lacute sfthyphen -188
KPX lacute acute -188
KPX lacute mu -188
KPX lacute paragraph -188
KPX lacute periodcentered -188
KPX lacute cedilla -188
KPX lacute ordmasculine -188
KPX lacute guillemotright -149
KPX lacute onequarter -149
KPX lacute onehalf -149
KPX lacute threequarters -149
KPX lacute Egrave -73
KPX lacute Icircumflex -73
KPX lacute Yacute -188
KPX lacute Ebreve -92
KPX lacute ebreve -188
KPX lacute dotlessi -149


KPX uni027D dollar -235
KPX uni027D hyphen -92
KPX uni027D nine 38
KPX uni027D less 75
KPX uni027D lacute 75
EndKernPairs
EndKernData
EndFontMetrics
       0FFTMs  <   GDEF_`  X  GPOSb     VGSUBz  Y  OS/2  h<   Vcmap4  h  Fcvt s  {  fpgm  }   gasp    ~,   glyf&ī  ~8 lhead.    6hheaO    $hmtx˙ <  Tkern ?  -locaD@ l  Tmaxp-     name&3   =postf L  $prep|餖 	p  k       =    )    )          F                    	 

              !% && 'd ee fg ho pv w| }   
& 
'
' 
(
1 
2
4 
5
 

 

 

 

 

 

 

 

 

 

 
} ~             $                   
 DFLT zarab armn brai cans cher cyrl geor grek hani hebrkanalao latn.mathnnko zogamrunrtfngthai                                                 MKD  SRB                                                              4 ISM  4KSM  4LSM  4MOL  4NSM  4ROM  4SKS  4SSM  4                                                      kern ,kern 2mark :mark Dmark Jmkmk Rmkmk X    
    	 
                              ( 2 : B J R Z l t     d         $   f   f   
     
F    z    4|&    ?D    S     $      o  lm    
           N >  X        & , } a h k j }  ehijkn  w|             &   ,   2   8    | ~         ( . 4 : @ F L R X ^ d j p v |           8M  o       %           B   H   N   T   Z   `   f   l   r   x   ~                1   1   2   ;   ;   1   2   :   ;   ;   2   :   y   9   2   2   8   8 r x ~                      &,28>DJPV\bhntz f f f v v v |B v v .  f f   f  {B   v  > > 5 7 6  : pj ^ ^ pj     #f #f     v v                       	    !

 ' . / 0 7             

 % , 7 8                              $  *  0  6  <  B  H  N  T  Z  `  f  l  r  x  ~                                                         &  , 7{ 7{ 7{ F I I @ 8 L { .{ 7{ 7{ 7{ 7{ 7{ @ @   7{ 7{ F x   { { { " {     { {     L L  e{ e{ e{ e{ e{ e{ e{ e{ e{ e{ e{ 0{        0 6 < B H N T Z ` f l r x ~            0 T0 0 0  z0  0 <0   0 0 0 n0 +0 <0  [0 m 	0  ~ 0  1   '-  /3 55 78 :; =A         0    $   > D J P V \ b h n t z                       \            H   q         &   ~                             0       ] t      w         ?   ?   ?    'D    &    2   8   >   D   J   P   V   \   d   l   r   x                      Z    Z              0 &  8      ^ ^ Y_  (2;       
    9` `      < B H N T Z ` f l r x ~                             @    P   [         ~   n   Q                 y         `    W |    ' U        HJ  Lb pp    lmo                 r     0   > D J P V \ b h n t z                    V b fn  el  z ? ?  c _ [ >  ?  ] \ Z   C  C m   J    Hb      ehijknwxyz{|    2   8   >   D   J   P   V   \   b   h   n   t t b b b b t w ~ ~ ~ ~ T    06<BHNTZ`flrx~ &,28>DJPV\bhntz
"(.4:@FLRX^djpv| $*06<BHNTZ`flrx~ ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '     ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '   ' ' ' ' ' ' ' ' ' ' '                               ' ' ' '             ' '                             ' ' ' ' ' ' ' ' ' ' ' ' '        o   ' '  ' $ =   D ]    4   5   6   8   :() ;AA =HH >QR ?YY Aaa By{ C F G H I** J77 KTT L M N O Y \ ^ _ a c g s    !  !!       
    ' ' 4  :   < B H N T Z ` f l r x ~                  h      e            S   6   6   _   T   O    F       T   _   s      S      $R    L      T   R O        $ ( , 2 8 < = D H L R X \ ]   Yayz{*7T       z    v ^  ~  
   " ( . 4 : @ F L T   T     k e  U y k a  
 R     -      
    7{ 7{ N   ( R X ^ d j p v |                      $*06<    z                     S      E   l                                               S      $R    L   H         T   R            O       ( $ ' ( + 0 1 2 = D G H K L P Q ]    HQRYayz{*7T             .4:@FLRX^djpv| $*06<BHNTZ`flrx~ &,28>DJPV\bhntz
"(.4:@FLRX^djpv| $*06<BHNTZ`flrx~ &,28>DJPV\bhntz		
				"	(	.	4	:	@	F	L	R	X	^	d	j	p	v	|																					
 





$
*
0
6
<
B
H
N
T
Z
`
f
l
r
x
~




















 &,28>DJPV\bhntz
"(.4:@FLRX^djpv| 8   8   8   8   8   8   8   8   8   8            x   !                  R    =   i                6   .   )               T   S   M   &   p   E   l       "R "        R #          :   T   ?R ?R            j   /   E   &    R          AR -   T     x   E   R       M      )                              R S      $R Q           R          !   m    R  R AR 6       T    R    M   M   &   L   {   R E   H   H   H                R R %R P   R *   >R #   R                  R (R    R R R R    T      O   pR         R  R    F         R  R  R R R R  R L   >   g   /   E         R    R R ,   #   ,   R          #   V    R       R ,   #      R    wR 7   aR      R                     T   #      T   /   #   p   $   $         M      ^   T   L   7   7   6      Y   /   E      /      R x   E   #M M .  o s   s            R             Y   $R 6   f         i      R       #   >         R            }      ~R    s   *   =   =       M          >      >   r       =R    -      C   '         T      Q 1R        R R hR R V          O                           R    #                                R    R    R       :R R uR    :      "R    #      :   6       .      *   "        *   i         	   >               R       +   f         Q      T               R                ~   Z      S         R                                R       |   R  V     $ = 
 D ] $   >   ?   A   B   C   E   G   H   I J() KAA MHH NQR OYZ Qaa Svv Ty{ U X Y Z \g cik mm  JJ     44 }~ pp sx {{ }      	 	 

 

 

 

 

 

 

 

 









#&(*.0<L!PPQfSdhijzmm|oq}tuw|!!  	    	     ! " #                                                                        $  *  0  6  <  B  H  N  T  Z         1   1   2   ; ; 0        2      :       ;   ;                         2 :   y       4   9   4   4   9   1 2   U $*06<BHNTZ`flrx~ &,28>DJPV\bhntz
"(.4:@FLRX^djpv| $*06<BHNTZ`flrx~						 	&	,	2	8	>	D	J	P	V	\	b	h	n	t	z																						






"
(
.
4
:
@
F
L
R
X
^
d
j
p
v
|




















 $*06<BHNTZ`flrx~ &,28>DJPV\bhntz
"(.4:@FLRX^djpv| $,28>DJRX^dlrx~ &,28>DJPV\bhntz
"(.4:@FLRX^djpv| $*06<BHNTZ`flrx~
"(.4:@FLRX^djpv| ` ` ` ` ` ` ` ` ` `   4   H 9   6    4    z V P     } | { & 5{  ?{  9{ & "/ @/   { ){ { r{ r{ { { & 5{ { ,{ { !{ {  { s{ T {  {  y  { ,{ { P &      /{   H   D    2  	  -   V { Q  &   x /{ c { |  Y{ !   5 {    H L{  &/ = z { } 2{ ~{ { {  y{ 5{   5{ 5{ 5{ { }{ }{ { { u W{ /{ /{ 	{ q{   / { {     { { { C{ C{ { { { .{  {  { { { { 4{ { { {  G G{ 6 { Q +{ { F{ { ${ % { { { { { S J S s  { { J 5{ '/ u{ {  S J     {   6 {  y{ R {  Q { { X { { R s{ Z{ 6{ { { { /{ { { e e  { s` {  & V  6     H b  { `   `      4 P            W  { d { { { ?{ w{ { ={ H{ { { 3{ { 3{ r{ 5{ { !{  { R{ { { { { { '{ { { { '{ { "/ "/  {  { W {  {  3{    3{  &{ K{  {  d{  H{    v{  h   3{  { { { { 2 Z{  H{ { { { { O{ {  { { ,{ { ={ 3{ +{ { { { { 8{ { ${ { { { < %  T  U{ { K{          #          Y ${ 6 f 
   i     D >   R    }1 { ~{  s   	    ,{     '   {    {  !{ {  3{ {  3{ {    { ; { W { { {  {  { 6 { 6 {    D { {  { t {  {{  {  { ! {     o  C { 6 {  K{ r {  E{  {  B{   4 ){ 9 9{   4 ){ z { V { Q   { 8 Q  8  	 >        + f   Q  T   {  {   { { { { Z{ * { S{ { { { {         4 { {   { { {  v{ P{ { z{ 5{  z     $ = 
 D ] $   >   ?   A   B   C   E   F   H   I J() KAC MHJ PLL SOR TTU XX] Z__ `aa aff bij cmp et{ i q r s t vg }ik mm  FK MS UV X^ ef jk pp xx     '=A I
K$$Q+,R/7TAA]\\^}~_acdehjppkrxl{{s}t{}	 	

























!PQSdij1mm3oq4tu7w|9?AFGJ		LMOP!!T        ! # $  )

 / 6 A B  
        "  (  .  4  :  @  F  L  R  X  ^  d  j  p  v  |                                                         $  *  0  6  <  B  H  N  T  Z  `  f  l  r  x  ~       7{ 7{ 7{ 7{ 7{ 7{ 7{ '| 7{ { 7{ 7{ 7{ 7{ 7{ 7{ 7{ 7{ {  r  r { *r { 7{ 7{ 7{  r _{ { { { { { { { { { z{ X{ { { { { { { { { { { { 7{ 7{ { e{ e{ e{ e{ e{ e{ e{ e{ e{ e{ e{ 0{     & 2                                                                                                                          k2                                                                     &   & &      <u                  k              <<  k h h                                                                                                                                                                                               &                        a                                                        a        D<                        a    a    <  D    aa          <      D<  <                                                                                                        }  }                            2        N                     &   &                  N                                                           &                  k                                                                        D                    }                                                   9a &a     &                                                                                                 &   &                    D                  }                                                                                                                                          a         /                                     /                                                                                                                    ku                  a    k  k      k      k                                NN                    u    }                                                                                      }                                                          N<                                                                  k    k                                                                                                                                                                                                                                                                                          V                                                                                                                                                                                         V   &    Y  Y                                                                                              }  }                                                                                              a  D                                                                                                                                                                                                 &                                                                                                                                                                                                        a                                                                                                                                                                                                                                                                               &     K                                                                                      <    a                                              <                                               &                                                                    I    $ $  % %  & &  ' '  ) )  * *  . .  / / 	 2 2 
 3 3  4 4  5 5  6 6  7 7  8 8  9 9  : :  ; ;  < <  = =  D D  I I  N N  U U  Y Y  Z Z  \ \                
                                                   	   	          "" && '' !00 ":: ?? }} #		 

 #

 $

 %
	
	 $     |             $ $  & &  - -  2 2  6 6 	 7 7 
 8 8  9 9  : :  ; ;  < <  D D  F F  G G  H H  L L  O O  R R  U U  V V  W W  X X  Y Y  Z Z  \ \                                                     !       !       !                        "   "   "   "     "  "  " #   $  % %   	!! "" 	## $$ &%% && ''' ** (++ ),, (-- ).. (// )00 *11 22 (33 )44 (55 )66 +77 (88 ,99 -::  !  "  " % &   " , - + ( + ( + ( , -

 .

 /

 0
	
	 1  Y  $ % & ' ) * . / 2 3 4 5 6 7 8 9 : ; < = D I N U Y Z \                                        "&'0:?}	



	  `    $ X              x #                            ;    #'  )- /3 
59       
0 DFLT zarab armn brai cans cher cyrl georgrekhani hebr,kana>lao JlatnVmathnko ogamrunrtfngthai           KUR  SND  URD                  	                       MKD  SRB                                                            F CAT  ZESP  ZGAL  ZISM  bKSM  bLSM  bMOL  vNSM  bROM  vSKS  bSSM  b       
             
          
                                              aalt taalt zaalt case ccmp ccmp ccmp ccmp dlig dlig dlig hlig hlig liga locl locl salt salt salt                                                   	        
                          : B J d l t |                $        >    
V^0x                      
    N    ^    n   	   	    	
    	(    	F    	\   	    	    	    	    
    

    
    
    
"    
4           B    9           && 99                     8      9 L M *_3





  h $ =  E E  G G  I I  K K  L M  N O  W W                                                                                  		              "" $$ && (( ** ,, .. 00 22 44 66 88 :; == ?? AA HH RR TT VV yz             ** __                  33  

 

     &                                  &                                  $ $    4 F                                        $ $    4 F                                           $ $    4 F                                           $ $    4 F                                           $ $    4 F                                         (    0       #&                       .    6       '' )+                       .    6       ,- /0                       .    6       13 55                       (    0       69                      
         0D          6       " (  I O  I L  O  L~  I   I       3  '  B    8   	  
                    W   V        W  A     ( : F P Z f r   
4  "
'     
3  
2  "  
  $ ;  
  V  
  0  
  ( /  
   F   
   X
   R    " ) 5 6 7 D F  k     k      hgiefkj  $:@GMU[   hgiefkj  $:@GMU[      , - D O  *      " &     !    , - D O \  T  9          	! 
   L M *_3

  {                               ;;;;;       "#$   c )    3 63E f   R 
$ !  PfEd !  m`              ,   
       <     ,  
   h        ~OSXZbw%V_?5JR>PjGv#.[jx{}EMWY[]} d q         !	!I!K!N!!###!#(#,#u#z#}#######$#$i&&&&''	'''K'M'R'V'^''''''()))A))))***/*k***++$+T,w,-%...%..MGMQWn+AKSWg&AO#        QWZ\pz1Ya?	7LT@RtFn &0]w{}   HPY[]_   j t        ! !!K!N!P!!###$#+#s#z#}#######$"$`% &&&'''')'M'O'V'X'a''''''))
)@))))* **/*j*}**+ ++S,`,y- ..."..MЦDLPTb"0FNVd  (     a_WRpomlk_]\U@< A=;2& vmhd^\({wn\"	plk\kXkVkTkJk/k)k'jjjjjjjjjj~j}joj"#"<;~rm                                                                                                                                                                                                                                                                                                                                                                                                                            
              ~           b                       O    Q  S    W  X    Z  Z    \  b    p  w    z                #      $    %  8  1  V    Y  _    a                      %      '      B  ?  ?  G      H      J      K      M      N      O      S      Z      ]      ^      _      a      n      q      v      w      }                          	        5    7  J    L  R  #  T    *                >    @  P  
  R  j    t    4      F      S      c      d  F  G  e  n  v  g       p    #    &  .    0  [    ]  j    w  x    {  {    }  }                                   	      	     E  	  H  M  	D  P  W  	J  Y  Y  	R  [  [  	S  ]  ]  	T  _  }  	U      	t      	      	      	      	      	      	       d  	   j   q  
P   t     
X        
s        
        
        
        
        
        
        
  !   !	  
  !  !I  
  !K  !K  
  !N  !N  
  !P  !  
  !  !  "  !  #  #  #  #    #  #!    #$  #(    #+  #,    #s  #u    #z  #z    #}  #}    #  #    #  #    #  #    #  #    #  #    #  #    #  #    $"  $#    $`  $i    %   &    &  &  }  &  &    &  &    '  '    '  '	    '  ''    ')  'K    'M  'M    'O  'R    'V  'V    'X  '^    'a  '    '  '  %  '  '  =  '  '  K  '  '  M  '  '  N  '  (  T  )  )  d  )
  )  f  )@  )A  h  )  )  j  )  )  l  )  )  t  )  )  u  *   *  w  *  *  z  */  */    *j  *k    *}  *    *  *    *  *    +   +    +  +$    +S  +T    ,`  ,w    ,y  ,    -   -%    .  .  )  .  .  *  ."  .%  +  ..  ..  /  M  M  0      p  D  G    L  M    P  Q    T  W    b  n                                  "  +    0  A    F  K    N  S    V  W    d  g                                       "     &  <  (  A  c      }       ~          O              #                #     V   8 9  P ; >  R @ D  V F F  [ J P  \ R k  c < o  } א        0       Y    h    v         - .   1 1   5 5     #   % +   - @   C C   
                                                                       	 
                        ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a                                  
 r d e i
 x  p k
 v j   s g wU l |>    c nT m }
 b   		



  :
/

$
%
 y

	
                   q z    #/f3f      = ; +ffT }f   +\9//u   LfL DD;  P   w
/X#  /553  Xf   s  +       j   -  j  !f # ^`  3B3\  fy```{        j\{    X   P   L`    % !J J7   {      }3  X y9 b    s     , %Id@QX Y!-,%Id@QX Y!-,   Py PXY%%#  Py PXY%-,KPX EDY!-,%E`D-,KSX%%EDY!!-,ED-         ff   @ Q /1 0!%!!f sr)      	 Y@.   			:UT S  	
991 /0KSX9Y"!!!!iqlhE^    h   @V S 1 <20###h++       =   P@6	Z ZW	 
 91 /<2<<22<<220!!!3!!!!#!#!7!!7! F+`aa)5E)6````5F5`hh   7
 ! ( / v@C#
")^]	^][*	[ !*)#" &-	
!&-&-
&
09999991 /<29990#.'.54$%73.'>54&T;]1`x=ҿ+ ,+eX1?w93TdA7ckI-+&7=7	"%/$	DQ=07VK39  q    ' 3 M@+ e.e"a(eea`d4+%		1+%4991 2<0"32654&'2 #"&54 #3!2 #"&54 "32654&Vo=>Wn? ֝	k֝Vn==Wn?hWWUWꭍꪍXYTX   9 & 0@[	


0'0%&$ ''0:0'-	 -iYf!gd`	'* $	*0$*1999991 /99990KSX999Y" ]@`	*9KK'[\'bmn'  
&0'
'+'+0;';0III
HH'J0ZZ\
\\\#X'honki
il0$] ]	>7!!'#"$5467.54$32.#"3267m)>Z7+x JTv{ֿ.[e5WOVd<PSr<v;?spjDCǗr,Z00.H=&u3Lk**      @
V S 1 0#+     @ lk 9991 0!&5!
\NM "6?'M)ϖ    @l k 91 0!!4+%ML66`2)  )9  F@(
	 
md
	 	<2<2991 2290%#'-73%JLLNLNMXX        "@ o	n 
<<1 /<<0!!#!5!

    5@  :p T  1 0KSX9Y"!#h;ծu     3  @
r q 991 0!!mt9   ^    /@   : T   91 /0KSXY"!!hK}  ;By  .@  : S  91 0KSXY"3#m    JH  ) "@ ss'd`*	!*1 0%267>7>54&#"#" 476$32 dMw(.PTNv'1R8ncembg\Y?nY5piY[AbZ5oky    X   
 t@-
	 :uuS u		 

991 /20KSX9Y"K
TKT[X     @878Y!%!!!T3inR3
HH5        |@) : Xsd v 999991 /990KSX9Y"K
TKT[KT[X     @878Y]!!>54&#"6$3278{hmpe_@PMRZKN=21Ū     ( i@, s	^
xs ^xsw#d`)
 	 &	/9991 90KTKT[X )  ) ) @878Y !"&'32654&+732654&#">32q~wh9YiŖ1yUl7vp %s%%)49kYYraLP,*          @;    			
		: uS	
 		991 /<290KSXY"K
TKT[KT[KT[X     @878Y K  ] ]	!!3#!!Lo556`ARJ   '  @9   :^]]sysv S` 

9991 90KSX9Y"K	TKT[KT[KT[X     @878Y!!>32 !"&'32654&#"j7v-,_0r}t;ol|Ttѹ12/HD`q+-   fH  ' r@! ^] sss%d`(		(91 90K	TX (  ( ( @878Y@` ```	`
```````]"32654&.#">32 !" 476$32rZPqX6VQN]|pxG^ἔYc`f,,ȵ31ک!s          3@:v S 991 /0KSXY"!!!'f-<  -F  # / t@$*s s w$sd`0-'	-!0991 990K
TKT[KT[KT[KT[KT[X 0  0 0 @878Y"32654&%.54$!2 !"$546"32654&ufXwglkM&zt3f{YIf{YtSauSb-e谠-/yŰwbDTwbES  T7  ' @
 ^]s
s
"sd`(%%(91 90KTX (  ( ( @878YKTX ( @  ( (878Y@oooooo$o%o&o'	]73267#"&5 !  #"&2654&#"T5WQM]i |qx_rWQqX!-+ȵ31کa [b`f    T  `   N@(   :T zT   91 /0KSXY"!!!!-iJChL`}}  `  	 Z@.			   :Tp Tz
	   
991 0KSX9Y"!#!!h;լiJu}     =  @ |{ 291 90	5<     '   @ o}o <21 0!!!!     =  @ |{ <91 905511J      o  ! @I    !:!	
Y]iU Td
	 	!"999991 /9990KSX9Y"!!!7>?>54&#">32hFWJOHQLPs>ajLP9d1P}f:=j69=CB:*(wf<>M+  \j  L ]@5IM-.* LF~*1~!=WM	-.LC'7M991 <<29990"32654&#"&54 3273654 !" !267#"&'&5476$32 !"#"&'
jQMjP'-ZS}˅v\`Kvhm⎇bxroirg!ґTXɒV^KSBTEKnWSbbRMl>ɰH]\Yv  {    
 @A

	 
	
:
 uS
	 	91 /<90KSXY"]@

+
/
?




	+	)
] ]!!!!!uLZ+?     +       h@:: S		 !9991 /90KSXY"2654&+2654&+ )! 3gtQL>ebeLbk#A
 h[;>s~vKHyn՜   J  J@ uud` 991 990@))]]%#  476$32.#" 3267يrroqty>`oeF12J=78IDIN    +  J   @@!	 	: 	S 
		9991 /0KSXY"3  4&#! ):/""`abjq.#EQQzm\     +  \  T@/     : S

		  91 /0KSXY"!!!!!!N9s6g:B7     +  \ 	 O@+ 		 	 	  	: S  	
91 /0KSXY"!!!!!N9s6g:{     J9   h@6      : uud`!  !2991 99990KSX9Y"%#  476$32.#  3267#!sƳrqw;zv8p991VoGEC=87GF"  +    u@A
 	    : S

	  91 /<<0KSXY"!!!!!!No8n{{9+y   +    6@   : S  91 /0KSXY"]!!N+ f  [@% 	
:  S KTKT[X 8Y9991 990KSX9Y"! !#3267N:N9<w#    +   
@D	 

 
	 
  
: S		  
91 /<290KSXY"]@   	  &-0;FJTUehkvt~ 	#)&(+(56=<8GG@AG\Ug`emnopp~'] ]!!	!!Ni{<
y+ o    +    I@   : S  91 /0KSXY"]@	]!!!N7N     +   @@	
	

	 
  :
 S
	  91 /<290KSXY"]@~	
 

)$
IKI
X^]
joj
o
z~

	
	
&('
H[UXX
keii
}tyy

"] ]!!!#!N+N/     +   	 }@>	 	  	: S  	
9991 /<2990KSXY" ]	]!!!!NVlR
+
   J    /@	uud`! !KTX  @8Y1 04&#" 3267>  #  476$쟗s?<A*kojnkcqa_[JD    +     T@-     :u
u S
  9991 /0KSXY"!2+!32654&#N	XRYdoRՈga׿uOUM_zQV    J  & _@*   : '!uud`' 	'KTX 	 @8Y9991 990KSX9Y"#"&'.5476$3   !4&#" 3267>qRn{oja*k4s?<A>=QE'la_[    +  {   @H
	:
 u	uS

	 	99991 /<9990KSX9Y"]		]2654&+!!2!.#]dL3o#9ȫNh'p"a\?zvJEոXsoS    R '@;	
:
u u%d`("
 "(99991 90KSX99Y"]@9	9
99999999 9!I	I
IIIIIIII I!YZ	Z
ZZZZZZZZ Z!m	m
mmmmkkmmmmm m!y	y
yyyyyyyyy y!<
 	)````	] ].#" !"$'32654&/.54 !2R>qiGoƹɑ=zJ}e.y 87ZP39'265EMLlT7= '+%  b    `@: S 991 /20KSXY"K	TK
T[KT[X  @   878Y!!!!`9N    T  g@:	
   : ` S 91 290KSX99Y"!3267! ! $5467N
	ih$A
0Jba$Y;      q@'   : S 91 /290KSXY"]@ %5)76	] ]!!!nj5\+      	% @J

	
	
   :
 S
	 91 /<2290KSXY"KTX  @   878Y@j






/
/
?
?
O
O
YYY


	
 	
&%#' 6370BBUZVPP
!] ]!!!!!d.n1}L2B==+o     @I     	
	

		
	:	 
S	 91 /<290KSXY"
]@4	-$	<2	LC		
	
'$'	*
79	:DHG	] ]	!!	!!nyKa+     y  x@5   : S 		991 /290KSXY"  ]@
		D]]!!!yy)o       	 9@: S	 

91 /0KSXY"!!!7!08%:-<   F@"   :l k   991 0KSXY"!!!!Nl--  B5  @
 S  91 03Xƾm   @@  : lk  991 0KSXY"!7!!7!3++m`      @
 S91 290	#	#fg--      1 0!5۾   f  2@	  91 0 K	TKT[X     @878Y#'fx  #{ 
 + @c 
	:	 " g#"g&`
	 )#"),9991 /99990KSX99999Y";"]@83!0"C!@"S!P"c!`"!"!"!"5":#:$K#K$[#[$k#k$#$#$] ]"326?%!7#"&54$!37>54&#">32QGn}XsK8}{oa6p~	SQ=Fy)d_BC.."Q   ?j   @K :  ii`k	!  9991 /990KSX9999Y""32654&!!>32#"&?cX_.!.huRkMH[sw\ifk+b]ρd~]    L{  3@
i i`  9991 0.#"3267# $5476$329HCފ~TI7Y[ibmU=02u21ډgqn  J   @K : i i`k	 	! 9991 /990KSX9999Y"%2654&#"!!7#"&5467>32uaW_ti!RkMH[s]hfkXb]ρd~]     J{  ' H@( g$g`( '!(99991 90!3267# $54676$32%>54&#"q7[Wg`Ri'9mlDC0/݀dx|(YoP^sp  f  R  @<
	:ig kz

	
 K
TKT[KT[KT[KT[KT[X 8Y991 /22990KSX9Y"@	``pp]#"!!!#37>3R/KE/1Ѩ2%7CO ` N     )Fuy  + @Y+* )'&( : & &g iz&i) #!,99991 /99990KSX99999Y"%#"&5467>327! !"&'3267"32654&XViMHXv7i:h^5UY!T^Z^b\qdy\c3 !65fkhm   ?  ;  @L   
	: 	k %# 9991 /<99990KSX999Y"0]!>54&#"!!>32)qGAol.hucm	VH9O@Fa^ N   ?     X@(  : zk   91 /0KSXY"	]o	]!!!!h.h9`   F   @:  : g zk  KTKT[X  8Y...9991 990KSX9Y"o]!+73267!!h.ղ-?e]+h9`[   ?   
 @A		 

 
 
  
:z k		   
91 /<90KSXY" ]@<
			)EQXcwpvz*ESdpus]]!!	!!mhug^     ?    6@   : k   91 /0KSXY"]!!mh  ?  { + @x !	
	

	"#$# !$#(')&$#%$$#:!
 &$	
)$z"
%"!$	
 &$
% %
$#,99999991 /<<<299990KSX9999Y"]@#	
/-]>32!7654&#"!>54&#"!!>32Sr		q?6gls>7clh!TgtgnM1VH|#7@HKM8?`_`w   ?  ;{  @N   
	: 	z %#&9991 /<99990KSX999Y"0]!>54&#"!!>32)qGAolh!cm	VH9O@F`a^ N     J5{   )@i i`	!)!1 0p]"32654&2#"$54676$ a]a@ZVf\Vd{join cvx~dtx Vj{   @M : ii`z  !  9991 990KSX9999Y"0!]%!!>32#"&"32654&s-h!RkMH[sAcX_
b]ρd~]7\ifk   JVu{   @N : ii`z   ! 9991 990KSX9999Y"7!!#"&5467>322654&#"isPkMH[saW_Lb]ρd~]]hfk   ?  \{  @6			
		:	 	z
 		&91 /9990KSX99Y" ]@#      @ @@@@@` `````].#"!!>32%Z4 fh'GՂ0!/`jq    {{ ' @9	
:
g g%`(
 ,*"(K
TKT[K	T[X "8Y99991 90KSX99Y"@i	j
jjjj j!````o)vv] ].#"!"&'32654&/.54$!2{5i]js@^Aٮs}6atqr@dAs=2473$.$$9:64$((    X    @>
	 :izi  K
TKT[KT[KT[KT[K	T[X 8Y9991 /<2990KSX9Y")]!!;!"&5467#3=n3\=H3Ӣ\1> &
.( @! >   {s`  @M
	   : 	`z &%K	TK
T[KT[KT[KT[KT[KT[KT[KT[KT[KT[X 8Y9991 /299990KSX999Y"0]!3267!!7#"&546gqFAolg!\p9P?F'a`#N      m`  @&   : z KTKT[KT[KT[KT[KT[K	T[K
T[KT[X  8Y91 /290KSXY"@FVf fj] ]!!!Jkn`    j`  @F	
	

	
	
   :
 z
	 KTKT[KT[K	T[X  8Y91 /<2290KSXY"@(I
		%%GHFWfhxty] ]!!!!!J'R)P` %`       ^`  @I	
	   
 		  :	 z
	 KTKT[KT[K	T[KT[X 8Y91 /<290KSXY"@N		( %)+	1GJ		

( (')+*6 5G EGFG	G
Gkch	i

] ]	!!	!!t#8{=#Lb   F`  @C    :
 
g z
 
	/KTKT[KT[KT[KT[KT[K
T[KT[X 	8Y91 29990KSX9Y"@  


H] ]!!+7326?R;wʠ%qXa&!`6ρ;J<   ` 	 m@,,:i zi	 

KTKT[KT[KT[KT[X 8Y91 /0KSXY"@)&/] ]!!!7!1FC1/` f   Z 0 @g0/.-,+ *	$%&'()		"!# :	1 #)*  k110-*)&# 	 199999991 99999990KSX9999Y"#"&546?>54&+7326?>;#"3+ڳ%[u@->'%+Fg!vrPJ	 	Qtm{{<(7XHtWZMC(.0C4       1 0#    Z 0 @l+,+ 0,,+	
:+1''%, '% /k1'& 0/0+",%(&019999991 99999990KSX9999Y"326?>7.546?>54&+732;#"+Fg!wsPL	!QtC+۳']t?-=%%mYZND-*2D3z{="6XHu     R  #@ oo 1 990#"'&'&'&#"5>32326j`k^Xbk`k^VRPE:=MSPE:=K   `  	 ^@1	 :U TSz
  
991 0KSX9Y"!!!!Fiqd+=^    " a@8  ii #  #991 99990.+>7#.5 %3f{94p9K@	YG8HU77l(77DX.рJm520h10"#"#         }@E: ^]
gsds
		 99991 /222990KSX9Y".#"!!!!3#737$!27;G}!u-@34?-!4.\%({
F    J = # / @H
 !	!$!*00
	 'LKM- L
K0229999991 22999990'7.5467'7>327'#"&72654&#"ϙљ0l=6l9ϘϚ.j?:l[\[~Ϛ1k??l.͚Ϛ7n6?i/ϙ\\\]~      
  @S: 	S 

	9991 /2<<<290KSXY"!!!7!7'!7!!!!!!:RRA'o%#pH%%h;`LLLL       @   <21 0##
 
    = 3 ? @F@ 1:4%
$+1d@$7!
=%+.47!:=( !11.=070.(@99999991 99990.#"#"&'732654&/.5467.54$32>54&+Z=P^19Z96T_0f=Ma0Owp42S!PUaPXr(&=22)No{:$X6++?0/%=6f{;)\5Y>=V@[8=] 7;1   u@  99991 <20 KTK
T[X  @   878Y@*    0000/ ///? ???]]3#%3#f111     1 I H@(
 
2&>7,- 486 -9DJ21 /990.#"3267#"&54632'"3267>54&'.'2#"$'&5476$+9o9q~r@s.A>EyWWWWWVy{WWWWWXymmllmmmmllmmf%#rs~$#WWWzyWVVUWWyzWXVnmmmmnnmmmmn    Xu7   /F@o"! #BBB
BBB:'*&#
 
U_#*d0 0
 -&'-B09999991 9999990KSX99999Y"& ]@xO@@@@@	OOOOOOOOO O!PPPPP	________ _!%
&%&*%*&?????????:%<&K%K&Y%Y&i%i&y%y&%&%&]]!!"326?%#7#"&546;7>54&#"7>32/'\p>5TVBe}MLXU#bK=9F,4qXT@}LFod
,.##z3     } '   4@
	 
	 991 <290772+Z%L1+Z%'qsq       @
o  1 0!#!   3  @
r q 991 0!!mt9        4 L b@8-*+'0! 52+A'*,$0-+$!1837$4-;6-34GM299991 /29990"3267>54&'.#32654&'2#'.+#2#"$'&5476$ yWWWWWVy{WWWWWXϲ##NOM+i`)Gok&:1mmllmmmmllmm3WWWzyWVVUWWyzWXV5442wyVpP:NAD7nmmmmnnmmmmn  =X  1  K	QX @8Y0!!bw%     dL   @ 	-.-1 0"32654&'2#"&546 HdcIHdeGBz0/11-0|D\dHHbcGHd3/0xDCy-03          .@o 	o= =
<2<21 /<<0!!#!5!!!

bb    \s  c@! d P9991 9990@ 55Y Y   ]]!!7>54&#"7>32y!\nPNA:DG$SElxD
:c*(..,mdOT  Rj ( t@- #	 
#d)
 	 PP&	)9991 9990@          (]#"&'732654&+732654&#"7>32KNP>!:w<m{chLVjqLJ6MHIq`]L$%LC63:6&&d]Qp  Pf  \ 1 0 K	TKT[X     @878YKTKT[X  @   878Y@))<<LL]!#+%Jf    T\` & @W
	& #$"%  	  :%	"` z'&%  '999991 2<990KSX999Y"!3267!3267#"&'#"&'7-hVRfxh'29b-Xc>XJ]`Tu(INpu#LROO/0  ;  c@.
	: S 99991 20KSX9Y"!###.54 +Ӽ9fN     `  /@  :T    91 0KSXY"!!hL}   -o    #@
	  
		991 /0!#"&'732654&'%"1a3(Q&BL4X*hs9/E7     ) 
 @0	OO: 		b	
 9991 290KSX2Y"]@	

))99JMMJJ]3?33!fۅ9	41Z  ^u\    b@ d	DD	99991 0@,@@@OOOPPP___JJJEEEXXX	]]2 #"&54 !!"32654&Ϸ*7&XcFCcGMѹLPKQ  u '   4@
	 
	  991 <290?-77-7u1X +#L1X-#  r& { '
/  
Xzd rJ& { ' td
/   `& u '
/  
Xzd  Lp`  ! @M  !!!: UT Y]i z"  	 !	"999991 9990KSX9Y"!3267#"&546?>7%!!h
VKPFPLPr=`jLS8Fhh3P{f<=h69=DA*(wf<AK*d  {  k& $  Du{  k& $  Du{  k& $  Du{  m& $  Du{  k& $  Du {  m   ! @P!! ! !:!u	W"!  "99991 /<9990KSXY" ]@2   !!!-!9!?!Y!!!!
 
!  !(* +!!!] ]32654&#"!!!.54632!M66MN56Mh+u9vuZP6MM66MMP%M,uu0ML?   `     @M : 
u
S
	91 /<90KSXY"]@   % %]	!!!!!!!!!yw9s5f9A7Db ^ Jo& &   z   +  \k& (  u +  \k& (  u +  \k& (  u +  \k& (  u +  k& ,  u +  k& ,  u +  k& ,  u +  k& ,  u   m   p@: : S  	 .9999991 /<20KSXY" !]3#3  4&#! )#393F;0""`adk}3/ #EQQ{m\    +  m& 1  uu Jk& 2  u Jk& 2  u Jk& 2  u Jm& 2  u Jk& 2  u   )  /@
 	
	 <291 <290		'	7	NNNN3NPPN   ++ 
 ( 6@D(76)
 ,&#,'#,u#ud#`72'76) 
22&(27.99999991 99999990@                 ! . / 0 1 2 3 4 5 6@ @@@@@@@@@@@@@ @!@.@/@0@1@2@3@4@5@6P PPPPPPPPPPPPP P!P.P/P0P1P2P3P4P5P6H].#" 0.5476$32%#"&''3267>54'&'(zR**nkaXf--oj\f{'zNs?<Ch984JPDNN{LURR{F;>a_\t5  Tk& 8  mu Tk& 8  mu Tk& 8  mu Tk& 8  mu   yk& <  u  +     j@:        :uu S  9991 /0KSXY"!32+!32654&#N+
WSY9BP̈eb׿uOVN\zRV     ?T 7 @^&%%&%67 73425  7:5,&
%	 2gg2gk`667&%)"/	 57)
,/),"/,789999999991 /990KSX999Y"6$!2#"&'732654&/.5467>54&#"!*5f	=TNNJ18o4Rd.M=C<ROfuZڰ0I]H7H+;[L=(A7+/e?1CFkp   #f& D   C    #f& D   v    #f& D      #9& D      #1& D   j    #& D       #{ 
 @ J @T7@5=,&A	 A 5&%"g5)@G=g/)`KJAD76
	 ,:%&D5:@2:D2K999999999991 2<<<999990@6;;KK[[kk2?0@B?@@R?P@b?`@?@?@?@]]"326?>32>32!3267#"&'#"&54$!37>54&#">54&#"QGnuh9_Ղ


p5BuK<|xr^aQi%SQ=Fy)JIMMI-\/9mlCD0/ghifBC..P^to    Lo{& F   z    Jf& H   C    J3f& H   v    Jf& H      J1& H   j    ?  f&    Cs   ?  f&    vs   ?  Pf&   s   ?  R1&    js    Jm  , @c*+,+)(),,+&'&#$#%$$#'(&%&(#$#(( !"(:,+*)&%$#'"'i	i`'k-*+,)%$'&# "+!!-9999991 9990KSX9Y".#"32654'4#"$5 !2''%'!%4f4d^@A[Wel%1W$#T`R#ms(j\tdtx]l^tj^   ?  ;9& Q      J5f& R   C    J5f& R   v    J5f& R      J59& R      J51& R   j      V    *@ 
on	IJI <<1 0!!!!!!33Xˁ     $ + {@@$,+% ("(#(ii`,+#,
% +
+"
$+!!
,.999999991 99999990.#".54676$327#"&''3267E-
''[WdhDa))ZVemD`E/J;L~duw..o;Octz12p    {sf& X   C    {sf& X   v    {sf& X      {s1& X   j     Ff& \   v    Vj   @L : ii`k   ! 999991 990KSX9999Y"%!!>32#"&"32654&shuRkMH[sAcX_b]ρd~]7\ifk   F1& \   j   {  O& $   q; #& D   q  {  |'K6 $   #-'  D  {o'   $   #o{'   D   Jk& &  u L)f& F   v    Jk'u &   Lf'    F   Jk'u &   L' F   Jk& &  u Lf& F      +  Jk'ou '   J& G  #  m     J  ' @d &'%:% i% i`%k	 	!(9999991 /<2990KSX2999Y"%2654&#"!7!7!3#!7#"&5467>32uaW_9u%i%!RkMH[s]hfk'ttb]ρd~]    +  \O& (   q ; J& H   q   +  \k'u (   JF'    H   +  \k'u (   J' H   +o\'   (   Jo{'   H   +  \k& (  ?u Jf& H      J9k'u *   )Fuf'    J   J9k& *  u )FuF& J      J9k'u *   )Fu' J   J69'  *   )Fu' J   +  k'u +   ?  ;k'u K      {   @3:	 S	
 
 9991 /<<<<220KSX@(	

  <<<<Y!!7!3#!!!#73!7$8$$&{{،&[$8$ջyX¼      & @':! !k %%%# '991 /<99<20KSX@3
		   !<<999Y!67654'&'&#"!#737!!!67632e  /pk%fk%:dcdnN2V<"#kkb./wLxD +  m'u ,   ?  s9's      +  UO& ,   q|; ?  8&    q_  +  k'u ,   ?  kF's      +o& ,      ?o&  L     +  k& ,  u  ?  `  0@   : z  &91 /0KSXY"!!h`    +f& ,   -   @1   ?F& L   M   @1   fk'u -  Flf&      +S' 7 .   ?S' 7 N    ?  ` 
 @@		 

 
 
  
: z		  &
91 /<290KSXY" ]@<
			)EQXcwpvz*ESdpus]]!!	!!fPyN[`e- +  l'v /   ?  l'v O   +S'> 7 /  S' 7 O   +  'n /   ?  '6 O   +  ' y  /   ?  p' y  O       `@6	 	 	 	  	:
  S
	  	.9991 /90KSXY"!%!!'%eTiN7bh=iJׇ        @1     :
	 k	 
  .9991 /90KSXY"KTKT[KT[KT[KT[KT[KT[KT[X  @   878Y/]!7!'%hfdu` NˑVDˇ +  l'_v 1   ?  ;m' v   Q   +S' 7 1   ?S;{'r 7 Q   +  k& 1  u ?  ;f& Q      }  J&~  Q    @f4    %!#326764.#"!!6$329N9<xj*&eG'"t, X4x#~"فI4&w_y  gFb{ (  #!7326767654'&'&#"!!67632R+-f^b  .pQQlf dddnN1jyv\7$#WV`b./wLwD JO& 2   qf; J5& R   q   Jk'u 2   J5F'    R   Jk'u 2   JBf'    R    V  	;  ! @8     : S

 !"91 /220KSXY"]@ ## #0#`#p##
]#"!3!!!!!!#  476$3iLq kh9u8g9A9y7`Ѐ;/1J.zIF    Jo{ 	 3 ? j@:+(
 g:ig4i.(`@
1	 +=1=17!"@99999991 2<9990>54&#"!3267#"&'#"$54676$32>32"32654&`Ri%#p7:Z։[Ue@^a]aP^un9mlDC0/NRRNcuwQQQQ(]Bjoin   +  {l';v 5   ?  m' v   U   +S{' 7 5  S\{' 7 U   +  {k& 5  u ?  f& U      Rl';v 6   m' v   V   Rk'u 6   {f&u  V     oR& 6   z    o{{& V   zb    Rk& 6  u f& V  b    bo' z    7   Xo& zR  W     b  k& 7  u X  f& W  z    c     !!3#!#3!`8U3bb3UK        !!!!;!"'&?#37#3>q2q2\2GH*22>  MN XYM  >   Tm'mu 8   {s9'    X   TO& 8   q@; {s& X   q   Tk'mu 8   {sF'    X   Tc'D S 8   {s& X    Tk'mu 8   {sf'    X   oT& 8  6   {os`& X       	%r& :  |   jf'   Z     yr& <  <|  Ff'    \     yk& <  u  l';v =    m' v   ]    Y& =  7c  '} ]    k& =  !u  f& ]  T     f  R   )#37>3!#"2%/K#"` NC    6  &  67632#"'&'!#737!!!26&"7]dcuee32uQQ7(fH(I>XNN>-b.//.brr@UTT       
  8  27676'&+2676'&+)"#767676763! [76''[=ct10uLub*I.%=&W3AB7yz)BB((NM()sbca01y$jj"2!MA?^^mML +      K     67632#"'&'!!!26&"7]dcuee32uQQ7.9aN>XNN>-b.//.b@UTT   |   
   27676'&+!'3 y?C1,zHn}/.-1][0-ujju   Lj    67632#"'&'!'26&"k]dcuee32uQQ7j>XNN>-b.//.bӨ@UTT f  <@	  9991 @ u
ud`0@     ]'32 4&#">3  #"&>`o8eBr-hrotR5IDdINK12Ã7  BFd *  %# '&%$!2676!3#"&'&#"32767uxy}FEu1-@s3N9<xJK.]absΏ--\]snoyR7efYCCI""焄""I  7 &  .#"32767# '&76%676;#"n,?OedBCTPQI9ZYZWэ56,1\ͱ.>f^20WXXW1Rw\  m       	 .  327676&#%"#767676763! )씓++I.%=&W3ATbU!!LM}jquu"2!MA?10tfet10      
   3#" '&7676!3!!Hz>C1-*~/.7|8s-0[]1-ujju#+    4     !!!7#"'&763226&#"<c9]ccuee23uQNs>Xsr>X5#b.//,Ǩ@  tVLc  .  !276'&'&76! ! '67676'&#"mv646(=F595S10spST89a-vFIB!%p	ͤ2 OF:8WXXYZJM  +  r   	!!!!!r8C9g6r8+#V##   J  *  6'&!"6$32# '&67!3276765_v=&L><8j׵J.	EOsYZ?'=`FG578OONOS_01_<   K8 1  &'&7676!2.#";#"32767# '&7676Ɂ54%#llml7V]~?>1]^gppw:xwxs,ba%"ST_` )*^V].-54fcj6%stޕa`   f   7!!!!!#3276o9r6g8_6N9<xJKD銊#CC  VN   #"!!#!732767#376763N.L#$22ε$ww.L#$2$wwDN \WXD NWX  Bd *  %# '& !2676!3#".#"32767#![FFZT?v3N9<xJK.o|敖..<45-82XoFFei
[CCGF"   R  *  	!! '&54>?!32767654/d"&WnnO8K`|DC%$?2\ccXRQQ:_&j\)=*)      :  >'&'&#"!!67632?27676'&'7#'&7x !.pPQk.ftdddnMN,, /ve]#F"V'08&2XW+n#WVb./wwީ4aXksTH( %CSlyx        ;# '&ζ`x<8N}|6V݊   -   !3#!#3Zw2yy2m     (     	!!!632#76'&#"D!s"iApI7*)L]]FZ!q          	!	!!6763!#"zN[,-e01-Fyv..        !3#!#3Xf3xx3]m      I   #''%'!%!Z#%H$f\
\eaeca   qH +  %#"'&7!32767!32767!!7#"&:YhhpYP/hNfHG!h$RgHIhTgth67wkCw65TTC65UU+_`p   f   7!!!!#3276oXmR/i!N9<xJKD  + v #CC fVP{L    J   %    #  476$2767!&'&#"*kojnkczd0",H+HzH.JD
j+(wPrMMr PA& 2  Q*& R     fs 
 "  "327&6'&+!   !2! ư..zHŶ10x@FFgi6z|6ۂ'CCjkV  F {  #  "327&6&+! '&76!2!2*wOP>..wuN`-F:fIޅl"y]UU,{UVVUUUL\
(vw     
 )  327676'&#%"#767676763! !#!QpGH32pI.%=&W3A.-e_76dd66"2!MA?~~ V]  (  67632#"'&'!6763!#" "26/]ccuee23uQQ7s<!zh.L#$NN>-->b.//.bXfXUTTU@     Gy 	 !  26764&+!!3 !.#y{JyK3<"2'vX9Ld'fz!a^=Zg TJcI08Z/pR     .  6763 32767# '&7>%767676&#"{xy+#霍jv~|?{{0%y33vhz{%xx߲0!LFNT&'L5yx2!"!<PL7    E{ 2  >3232767# '&7676%767676'&#"Іcji# poAo))
0/itvuu5zzosr""no@d)*	
,-f_po}= VVQQ094#ZZPP#	+50  +  \8    FDO  (  323#;!"'&7'$%536'&+32qUGt7)L.UU#23!f,_
h@vcDXW@.:K   bF   !!;+732767&'&7#3>q2\\2.}ͱ.>f/,>G)\2> %N rv.+w
MY >   J  -   !!!#"!767638p	"#ppNLi1RQ    ,     !!;!"'&7#376763!#"q1]\2HG)]1 zi-L$#N %N XY NfX     f#   !!!;# '&z9`901x<9N}|6#߂CC݊ & 8  u]& X     U %  ! '&67!!327676'&'!,fD <ȗ< 2a9\\ 'ON}|' ()m9a2yǼ9y Utuut˥V#        !# '&!;27676'&'7!N}|6`x<}(0TR%#1Vu^_{     z     	!!632#76'&#"{{nՇI7*8%Pu`V]FZ!E     2F{ %  #76."+73276?!6!2s(7		mkm-p[0-'f,we"<!9!JJL4dV6=#&      !3!!!7#!!-}2f88-2HA    `   !3!!!?#7!7!1|+N21u+I` ݶ  *    %2676'&+7!!!"'&'IJ0u91+Mx@:+8&jcf45^#N!pgts="JL     *    %2$7# '&76767677!!#"D9+ckV190]^LJ=stޏgp!54fcj  H-` !  #"32767# '&76767677!!0]^gppw:xxws+ck[1245fcj6%tsޏfq!	     V` 9  32767#"'&547676%76767654'&+!!lEOie=l$'&.dnoom+itjqYhX>f'$.O21"08g!CA(%+K;jC9%&"       #  !!#!67676&#"6763 3!77]32 /tuZsr@z}~)S3,+?Di'&LH+vvzi     !  7!!3 ! '&7!32676'&+0}%9\D j;8++IJ_<(xstsscjjcf45  H` !  ?!!32!"'&'32676'&#0}Q+Rd58+spoj9beegIJ\/Fhsst%)6jcf54     $  #737!!!#"'&'327676'&#!;&f&T-*MNE:EJKPyG+?3C^ׅ#*+rB`GLr   V{    !!676;2 7654'&#"9-f l]p:1	a+~Y4
o%,p\])(UN& A,A    V   !!w   VC'K     V   !!!!!!!7!7!7!$m_.+_.._+._e  8     +  k'?   '   +  Tf'@   '   J
jf'@   G   +f' -   /   +F' M   /   ?F' M   O   +f	' -   1   +F	' M   1   ?F' M   Q  {  k& $  Du #f& D      +  k& ,  u ?  f&   n   Jk& 2  u J5f& R      Tk& 8  gu {sf& X      TR'h   8   {sO&    q; Tu'H   8   {sU'  X   Tv'@   8   {sV'  X   Tu'@   8   {sU'  X   W
{  {  R'8   $   #O&    q ;{  R';   $   #'  D  `  O&    q:; #&    q  J9 /  # '&476767632&'&#  3276?#737#!34¶99q;ztuv_^8889tx1VF{~G"#OO87G##cceWfW   )Fuy  ?  "327654'&6?#"'&54767676327!3#!"'&'327!7XW//ZXX//>&Vion&'HXrrvPQ7i%;Wh`a^5UUUY_Xwwwf56vwh67]A\Mb\z{qrqdy@?..c3iVYbC!6HY  J9k& *  u )Fud'  J   +  i& .  s ?  i& N  s Jo& 2  [   Jo5{& R      JoO&   qf; Jo5&   q   *k'!uy  HY&T q   Fg    !+732767!373h.~}ղ-?e/./`qr-.x  +  ' =   '   +  T' ]   '   J
j' ]   G   J9l';v *   )Fuc& J   v   .	   !32767! !'&7!!!o$--LL$ee>>{"o9OPPO
=#   V3    %!!67632 7654'&#"ivu$rlv@4	Y4P# /aqv-1|ej*+2p)#H1H +  k'u 1   ?  ;c& Q   CB{  '    #s'}   `  l'v    #d&    v+l'ev   g&    vu  {  p& $  z #f& D    {  & $  U #F& D     +  \p& (  Gz Jf& H  	   +  \& (   JF& H     +  ~p& ,  z ?  Fd'    +  & ,   ?  WF&      Jp& 2  z J5f& R     J& 2   J5F& R     +  {p& 5  +z ?  \f& U     +  {& 5   ?  \F& U     Tp& 8  z {sf& X     T& 8  U {sF& X     R':   6   {{'   V   b'   7   X'~   W   R2 :  >54.#"7%>54.#"$3224Q[y}<+poZ97O-9D6 ZO1)DF$6hhE"Sslr*g""hv@
"69LOa13I U_"SLT>*>  ,F^]  O{ 3  7>54&#"?>54.#"7632B^0V1@{usa6bB4<,R|D)'?? ,YZ<gyA8C@#h&2>DR*=EEME=C/#4~υ 4IL  +  i& +  s ?  ;i& K  s  BV   676'&'&#"!!67632!#24Fpo'"s,};SI#.ss&:=  @fJ   <  %276#"%276'&#"632"''67&'#"'&7632!K4.fsML>+-srLN>-,^j^(2 Sa[B3-D;Laee23tPQ7thY3/TT@TTTTTT\8EWiJPH7qD#,/.bX     3'  P  "32767654'&7! '&5476767&'&547676%&32767654'&.<Ka`9I"xceK6+z	po=5=p=]=9lZ7FvnN-;;:nL.:YO"&UU)*_D_$'rqqY+0^_*VJCldE	%8<
7)&:0wI&0   -@+ 4 H  %! '&5476767&'&547673267654"32767654'&w	WU<)	+~^_`5$?N/(\ZtlFE .lkED.i0;',~VU))`@W).rqqU28^_*)U:M$)oOi/M6"0`Y,;;n#@(;;:n$@(: F   !#!732767!7!!!;p.f/+S-9-"8mA.+v#7  F`   !#!732767!7!!!:p.f/+~121;NmA.+vf {  k'Du $   #' D   +w\& (   z   Jo{& H   z    JR'   2   J5O&    q ; JR'   2   J5P&    q < Jl& 2  fv J5' R   JQ' 2   J5P&   q <   yO& <   q ;  F& \   q    BfN    %276#"632#"''67&!%K4.^jW):"Sa[B3-DZFfY3/\0DXhJPH7qpi    Kfv{ , 5  632#"''67&676'&'&#"!!67632676#&^jQ*A#$[_[B2-D_B  .pQQlf dddnNM,J5.\*BX\JPH7qw=B7#WV`b./ww<U5/   Fd  (  %676#&!!632#"''67&'&7#3KJ5.>q2Dfj[)5 !Oa[B2.!8H)\2>U5/ `4EWlJPH>Z	Y > F`  n@$   : g z ...91 990KSX9Y"KTKT[X  @   878Yo]!+73267h.ղ-?e]`[   40 	  <  %26&#" 26&"367632#"'&'#!7#"'&7632Rs>Xsr>X?>XN@ %t\bcuee32uQP6]uee23tPP7u@@UEwnwE`-//-`c\/.bX     V{   E  "327676'& "27676'#!#"'&76327!367632#"'& rLM -,rsML ,-@N?!%-ML ,rr]uee32uQP6!f \bcuee23uQPwTTTTTTTTUEwnwEUTTT|Lc\..c`-//-  Z     !#'#5'7!!%'!'X<d4[
}j! JJ&S[qs\   1 " +  '&7%$!27&'3267# /	&#"s\MI1Eu}nUM[**\sy<uxy}	NYΐ-Jqf&sȘ!=%DI7
[D   8 " +  '7&776!27&'32767# '	&#"^E)5/XR53~Y+-	CTPQI9ZYZWde^^Ջ
pe"W1zWX        !3#!!#3Mw2A8y2m y    #!'!!77#v<U\h8)X[>(vqt#Jsp     C{ 9  &'&#";#"/&/327676'&/.7676325igf_f67
	!"^>OP""MN-Ϩ9
5alkti;:
 l= #c=05+	#PPZTGx490VV   `   !;#"/&'7!1ZaMN.ϧÿ1`':ZGxf     (  ""#767676763! !#!!27676'&#XN,&=&W3A.-!eypGH32p%/!MA?~~76dd66    r  {   27676'&#"! !oIG23pXC-.|#W76dd66~X      # .  )#3! 2676'&+3#27676'&+ub*>3B7yz)BBt10u3T[76''[=$jjA^^mMLbca01H;((NM()  )o    !!!3# !  7#73!32767Puuu&>>&`$--LL$[b6=bbOPPO  y  1    +Br     33#3!!!#7!!#!Ƭ^H89ܪ8^^"Cj6ݾNVy     JB  % * /  !32%#"'#7&547 !2737&#"7#364'j̞:d6c5"aN$h%"YfU	+wDMfasDO:	unE5< f   !3# !#3267#3N3R6N9<xR3j\#
   F    !!73!3#+73267nf9&^f^&Q,ͱ->f^Q^wv\     f  $  %2676&#"#   !27!;# ////|BBH-maxP8N7yTUz     F{  )  %276'&#" &?#"'&76327!;sNL>+-srLN>-+% ]ueedtPQ7 h:f-TT@TTTTTT_ Shc\/.b\      {  !  !#3!2!.#2654&+on29ȫN44'p"a\Z]dL55@?XsoS
zvJE      Y{   &'&#"3#!#73!67632+,-/QP%UU%_f$[cc}'/
JJNJn23    =  p    !!7!3#!#73#}Tp&dzz&qDջu     F`    !3!3!+73276?!73#fXf&mkn.p[0.&}&^`JJJJK    H{ 
 +  2654&#"!>32!#3267#"&546ɆQGn}f Xs}{oa6p~	fSQ=Fy)d_BC.."U  \{{    7!!7#"'&763226&#" h ]ueedtQPs>Xsr>Xc\/.ɨ@ {    %!!>32#"'&"326&w h ]ueedtQPBs>Xsr>X`c\/.7@   6 	 '  $26&"67632#"'&'!6763!#"%>XNN>-B\bcuee32uQQ7,.f^@UTT`-//.bFyv\   K{  4@	 9991 @i i`0>3 #"&'32654&#"Y[ibmUS9HCފ~TI=ډgqn$02u21   cs{  /  %3276#".#"63!+"#"'"''67&'&76!2`55S9?Ode#+9EfBl/XRS9K20WX{PrWD&I*     \F  (  %276&#" &?#"'&7632!;{sLM>Xsr>,-%]uee23tPQ7th:f-TT@TT_ Shc\/.bX \     4 	 (  %26&#"76763!#"!7#"'&7632Rs>Xsr>X0.f^]uee23tP)2'@Պuv\c\/A1     .
{  !  76!  !"'&'3267!%!6'&#"Y3"56{zu5pppq&56h`HG3
際0D"!~~n:;?>     W
{  !  7!6&#"6763  ! '&%32767WEq}}5065x0/`hLM%+f~~!"D0Ɵf>?;:n  M{ 	 3  32767 ! '&'&'&#"6763 ?;#"'&7(	/`hLM%5xEWBq}}50!"i+#`90!?;:n,Q`ƟVv)?!"D087o[   7({J   { 3  !"'&'7327676'&+7327676'&#"767632ŔFGcfej.Refqr%mZ;2*uhCY
N-{oU-~lk]!WT=JJp\["YO E1&	WB@    M{ B  !"'&'7327676'&+7327676'&#"767632?;#"'&75ŔFGcfej.Refqr%mZ;2*uhCY
N-{oU-}ml\}I!"i+#`9/ G=JJp\["YO E1&	O.N87o[$    nn{  /  %27676'&+7327676'&#& '&76!2tIJ<7v,|u8?	10_vc#!ADlfgDCqsb!'(:<'%",*$#dR]`囜*HGa@?p $F`   73!3#+73267%_f_%Q,ͱ.>f^Q^wv\   /F*  5  "3267#"'&76763!36763!#"#!"&'3267o-,sp=]ugf0,q.}-f^*5i]7SUU[ wOP:Gb\⡠rv\ !6   ZF`  )  %#"'&76763)!"&'3267"3267]ugf0,qh4i\6TTU[ Uo,-sp>b\⡠ !6OP:   X_ #  %# '&76!2.#"3276?!7! qutw55k_^P.QZkk"#+&& 1H2(10YX   P`    	! 6!276'A{ք@@ {4%BМH0WFHJDW   d`     67!!276'@{{g4%B,H|(|HW;HJ9S  J^   !32767!!#"&hP! .pQPkftdddnog77#WV'Xb./        $  !7676'&'&#"!6763!#"67632P! .pQPk,-f^ccdnVo77#WVFyv\a-/  @F* 0  67632#!7326?676'&'&#"!6763!#"bccdn,V*.-f^7! .pQPk,-f^a-/Ftv\[77#WVFyv\  j      !!!3#!#73f9f^&UU&ܐJ    `   !?'&7h"a.XW,`l.7	yx   ?  `   %#!#73#73!3#r..~.f.~v         !676?3!#6767"fJGg{IIj 9JH;JI         !3#!'$&#";&Gf*tu19\j7`'Y{hX96"BKT    BF   !;!"'&7phf-TW( /.vy     @HN %  !!!"'&'32676'&+7!!nfU0	Rw@;+sppj:beegJI0ͧLN	!qfst%)6jcf54  ^ +  %#"&7!3267!32767!!7#"'&VXhhp,hqNf!jhq$RgHIkh U_^gtONh67w65&65UT'_0088     TB^ +  %#"'&7!32767!32767!!#"&}YhhpNM,hqNfHG!khq$RgHIkhrTgth67www65TT&65UT'N_`p   eF{ 1  67632#!732676'&#"!6'&#"!!67632+Xhhp,+-f^Nf!kr$RgHIlh U_^gtONh67jyv\sw65H65UT`_0088    FR{ (  !7676'&'&#"#!7326?!67632RP  .pQQ=+--db+f dddnNMVo77#WVtv\pb./ww  gF{ #  6'&'&#"!!67632;!"'&7!",gZOlf gacoOM,g-T\&2"WK`d,/wxj/.v   ` 	  !!!!mR`uu    J5{   %  2#"$54676$2767!!&'&#"ZVf\VdwP< "--wuO.{cvx~dtxhUAmO3UL2UU2  Xa 
 #  #";!!!!!!"#   !22ofg!!EFojN+_(+|1+
	45KUUUV$"       .  '"3276?3376#"'&7#"'&767! 'EE"+,/ooc><8VTg>=.)G6aFFN9[jl`-SPvogD@ED~w\  zVj    ?[`   32767!!7#"'&'}+,-/[\ df$[cc}'1
XYn23      32767!!7#"'&'S*-,/\[!f$Zdc}'1
XXn23  gF`   32767!;!"'&?#"'&'+-,/\[!df:f.UV+ Zcc}'1
XY\vyߢl23   V{   &'&#"!!67632D*-,/^[!-f$Zdc}'/
XVR
n23     iF{   &'&#";!"'&7!67632F+,-/[\ a:f-UW+h$[cc}'/
XY\vyLn23  ?  `   %!736763!#"r..Q+.h-0Qyv.1Y     `   736'&+7!23!Si.UW,S.1.vyY      ` 
 "  27676'&+!!2!&'&#[-."![O4+P_`GGy<)) i[%'Kv  IH g`JKoHG!0/aG    ` 
 "  #327676'&'32767!#!!O4O[-."!%K313kF;;Bm++|}f HI  Ga/0!GHoKJ`     :F{ =  &'&#"!"';!"'&?327676'&/&'&7676324jfg_f67
B_=OP!#78f-UW+'alkti;:
  k=OQ #ckj=05+.	#PPZZb&.vyI490QQVV F&   #"+732676763&-L$#(ͱ->f^#wwDRwv\WX 'FO "  737#376763!#"3#+73267&-1#ww-L$#n&U.}ͱ->f^Q NWXCJrv\ F{   !2;#"'&76'&+FUU#:f>-UU'L{XW\vwD :D>   +  "'#5$%76763!#"3"+0&#"3276V;94#ww-L#$ͨ)8s.mq?h\,f/DWXDcvvK:. `   !!6'&+!23# >2q\\23GG)\2>> N XY%   bF   !!!;!"'&7#F>f>q2:f.UU,2`> \vwL      `  *  #!7#&'&'&75#73!!!!3276&Udcdm+9N,&_h
_f_fx@.pQ*xJb./!*wp[a3<#&V.     .` %  27676'&'!# '&76767#7![3I22ST=7&N7-20 Ubi&$ELQskXWWXksTH;lpA  `   #'&7!?27676'&'7D/&1XW,h!/uf\"E!;lyxl4aXksTH   `   )!!S`   `   )!!!!&''R`      )!676;#"zllmm.p[^&ʻKJ:K    m  /`   !!!mt.v\\`Yx(     F5`   !!;!"'&7!7!1;O..UR#}1`~ .vtf   s`    !3676#'7!7!276#"1;*3ւ0ߒ	_3`+(	f$0P  H` !  	!!!"'&'32676'&+S21
Qx@:+spoj9beegIJ N	!qfst%)6jcf54   3H` 	 -  &'&767676'&+7!!7#7#$!2c9*:J021
QwA:+h>:s}A	U9J*4 N	!qfs	%(#0    y  ^   327676'&#"67636!]lH-MPSRV:RUTk*-y`rLG`Br+*#Ӆ^  u     !&'&76762&'&#"3e`S-)NMF:FJKPyF*@ ^ׅ#+rB`GLr        !'"'&'327676'&#f`S-)NMF:FJKPyF*@3^ׅ#*+rB`GLr   V #  %32767#'&76762&'&#"T,MPTRV:STUj**MNE:FJJPyH`Br+#Ӆaׅ#+rC_  ff   %  67632"'&"3276   !   
/-65 
Zl ....zhGFFFF5''''56L&&&ddjk   ?  `    ?Q{  /  %7676'&";#" &7>7&'&76763 eif!#DO_>?	3,u|,vEJ:9 !g+,l`]Rd#$*,"%'<:('殭p?@aGH֜  -  $ -  %# '&76!236763!#"&'&#"3276?!7!rtuw23.~.f^9PTUYjk  FE+&& +e2rv\1YXYY   :  C`   D   %  !!!3#+0"'#5$%3"'"3276nf8f)8s.mq;94.?h\,f/ܐ0cvL9.     L` 
  !!	!!`(Z[fLOe^-   ?  `   !!!j9`  [V)  '  %#"'&7632736763!#"!"326&X^bauef32u7 .~.f^r>Xrs>Xc..\crv\!@      ^ $  327676'&#"67632!!!7#73]lH-MPSRV:RUTk*-y%%rLG`Br+*#҅^  u   $  3#!7!7!7&'&767632&'&#"3eM%%S-)NMF:FJKPyF*@v^ׅ#+rB`GLr    4	" 	 $ '  %26&#"!!!!#!7#"'&7632Rs>Xsr>XuhU0:N11]uee23tPPr@XL c\/.J    \H	J 	 ?  %26&#"!!!"'&'32676'&+7!!7#"'&7632zs>Xsr>XuhU0	Rw@;+sppj:beegJI0ͧ]uee23tQP@XLN	!qfst%)6jcf54c\/.   <	(  3 : =  %276&#"!!367632+'67!#!7#"'&76323276'&[sLM>Xsr>,-uhU0:..@2: ]uee23tPQ'%.rTT@TTXLu78878c\/.9GH   7  h % 8  !67632.#")"&7#3!3!2676'&/.76>q&2cz5j_fm
A_>JO!#Ԏ)\2><\3\xipl= - V 0035+.	(KP >%N79#    WF $ ,  !76763!#"+732767!"'&7#3!3>Q#ww-L$#(ͱ->f/,HG)]1>w]\NWXDRwv.+vXY >b`%N   Esb 5 ? J  !676!2.#"63 7!"''67&'&'!"'&7#323276#"!;&76=q%$/XRSO9?Ode!:gU:*,GH*\2=-=
SV\\-#"»20WXcG99^G%@.9XY >_9K%N     cF :  #"!3!67632#!73267676'&'&#"!!!#376763O-L$#/cdddnNL,,-f^a !.pQPkѨ1#wwDNb./wwjyv\77#WV`` NWX     v '  !!2676'&/.76$32.#")CfLipk> #cz5j_flB_=KO!#59 0035+.	(KP     
   !!!!#!CfU0;N27!qL `D  (       333##333##($Ϳ&%C$Ϳ%&sPTQ PTQ    1     7#!#!#!#!OWW9LWW:>)>)  Ju "  6&+7!23267!!#"'&7:f.UV+^  .pkfucmNM,F\vu-7#'Xa^wv  F ,  %#"'&76&+7!232767!;!"'&7UXpdnNM,9f-UV,_  /pPQkf9f-UV+Y5/ww\vyn#WV'\vy  5   #?676'.#"#3676325K-
*H32<B??@F|34>S01Ug7BC     4 %  #?676'.#"#676;#"676324J,	*G32<wSRkA>>@F|43>S01Ue}CBKL6BC  g    3+7327673#wRRr(A ~BCK\    0   &'&#"#3676322X:98y9?>Pd12\sg>     1   327673#7#"'&'TX:88y9|PG12\!g>8    G#   327673;#"'&?#"'"'jX:98wAj8:7~PG12\!LBD}[=8  	 !  #327>'&'3276?3#!3+22:T0!{+%%*ENOzR|(6')>Z*)s     k   333##k$Ϳ&%PTQ     .   33+73276?enMBEDcH:
WRi***  tf   tf&      X  9@   : S  91 0KSX9Y"!3;:'ժX`    X   !#uT7թ`       #7!e!ڬ@  X   27>'&#72#v7-.6vDC.cdvt'&l&'STTS F   0"'&6763"JvDC.cdv6-/tSTTS'&l&'    Y   327676'&#"7>32#<E,
2s3j6 5ltpEsK}68@+'6%@vJyQ5    G   #&'&767632&'&#"3,P6t7Tdt21- ./04rL,*8d5QyJv

@%6'+@  y"   %%!%!F    I"   7-7"!e!ʳ |f   ##	eTfD a|f   33d|F  f  8@ 991 290 K	TKT[X     @878Y!#'#!f 59f  P@ 991 <90 K	TKT[X     @878YK
TX  @   878Y!373x     #ll+   =X q   Pf   !#+%Jf    f   #'fx    [   #ll+   A q-      #'ox    P   !#+%Jo   d`    !!Me|  `   !|  &W`L   &F`L       !733#>#55 )   7!##)##55  ^ j   733##7#7a,,",,"   ^B   !7! >"մ TF  o@   	91 <90 K
TX  @   878Y KTX     @878Y@ 	 	]332673#"&546WVPQh"͜F	AFGI|y  ;-1  K@	  991 0 K
TKT[X  @   878Y@  00/ /? ?]]!!11  y   @@	K K1 0 K	TKT[KT[X     @878Y#"&546324&#"326wxxwTABTUAATxxxxATTAAUT  oF    @@
  

991 /0@I IIIY YYYi iii]!33267#"&5463G41-%R+9Z'joJJP"&EBA~     9  @" 	 	91 999999990 K	TKT[X     @878Y@(	 			








(]]'&'&#"#>3232673#"&{1&"4
^$C%5"&4^"<T%E<+C>  %f   @ 1 <20K	TK
T[X     @878Y K	TKT[X     @878Y@-           0 000@ @@@]3#3#ɮbfx    2   %7;#"'&7_!"i+#`81"s87o[    Mf   '#7'373AdڑCbڑWWVV     I    7673733276l*%n&ׂ3SFFFZ        3#     3  &'&#"#"'&'7327676'&/&'&767632EAB=B"#='45^_GIJL?EEJD%$E'54XW@CE-,`d32
	.-\d00 j   373#'#$oz2  G   #&'&767632&'&#"3,P6t7Tdt21- ./04rL,*8d5QyJv

@%6'+@  *     !!7!F%vмt        !!7!3F$<4t          !!7!3xF$xhht     w     !!7!3<F$4t     ;     %3!7%t  p  $' q   q X
    MB=    <!   '&'&#"#>3232673#"&1&"4
^$C%5"&4^"<j70mv"61mv   f C    7f v     f     9    X  q    <Md
)P    ; F      %  .@ k91 0@   :KSXY"!!f8 ; 1 j      "  #7676?67676'&#"7>32,	@%)"B$[^Uj1~	8%"1%+&#t^Y.$'$f     hf     f      	   #VVD8 '   C      f    ###yfxx  ;# '      F   #54&#"#>32VPQh"͜	AFGI|y  X   !3X*    !727#03yyz     #3$70yx30z  0 f   !#U%f 6"B C*  @B v   ~   #7373#"^!    u   33##ӫ"  FC n   !7!#L%+l        7326764'3#"&9B'<
tV5cR2&;1'M(7^)s{6    [t   "30"&7>3W&;(&cmc2%&2cb      73733%##%    3   #7!##%+%#˽       #73733##""   b   7!$+$b F(    '#!7326?++.f^+yv\   F     %!;!"'&7h+:f.UV+܇\vy  MC   !7!1MwMC j@       4&#"3267"&5462V3%&22&%3ƈƈ$32%&23$ccb  F   !#qD-o   z     oF        -A   #,VVD ]   #7##H$$Hov    /g@   #"'#"'&73276732767.5@k0Kj
MO(MF+@FF0:m |& ' K	TKTKTKT[[[X  @   878Y UY|& ' K	TKTKTKT[[[X  @   878Y @@H   =   #54&#"#>32VPQh"͜	AFGI|y(!?  {A     z   !79%%۾  t    !7!7	%%%%   R a(     (Sx   7!(&& :bx   7!:&& T 	   '^ZZ^^e     Y   '8\![Jqs       2#72676&#cmc%=)%bc3%$3    ]   3373H$$Hv  )g    !7#^ ^&&   4@   67632632#6'"#6'"/5@k0Kk	
LP(LG*@FF0:m    ~   '7'77lhilh  1 !  #732676'&/&'&7>3#"9E";C'RRz.!RSz#: '
)   
)   f C    7f v     9      @; 'l j	    V     XI   #7!#!:txx,   2    !7!7!7!>>2Z   /    3#3#LL`tt       !#!<X5*>   uf +  #7&#"#>76763273327673#"'&L 4	BBW%#W%BBW&!J\<2jAA
h9j@A
 x    $  '&'&#"#>3232673#"&3#3#1&"4
^$C%5"&4^"<BT%E<+C>C #~    T(   7!#'73!'39Q\ם\(͌     #77%'%  o   #";#"&>;7[
>6v-vM67L  '         '7'77b]^b]uytuxttxuty 8   732+732676&#v-v6\
=7짚L76M ;E1     q      >&" "'"&>26>&"p=)K;(m&5Pm&6OE=)K;(3I32K2Aŉ??ň??3I32K2;[_
*{    k
*P   `   !! % &kA   !!K %࿼  ' #  '&'&#"#67632327673#"'&X*$V<R~o<rX*$OCQ~o<@#
$0)JI#
$,-JI   &j
+     (   7!'3#7f\ל͌    +     ?  `         !!!!!!M``N          !!#!#!M8``N   tf   3Ant  oV H   %#H +     ?  \`   V 	  #"?3;X$3Vh   K{   L{' ywf F  K{' yf  `   f -   9f  \ 1 0 K	TKT[X     @878YKTKT[X  @   878Y@))<<LL]!#Ff   7;& j   ~l  f'  '0  ` y   .  f't  +J     :  f'  -\     4  +f'z  /\     9f'  5K  (  f'n  :      f'h  >Z  f!'j  N {   $   +   %   +  r   y      )!!KH|NT   +  \ (     =   +   +    Q{  $ (  &#"327654$ ! ! '&547%!!H.,H.ghsFs$9W[baO\abLΐ_mΐ_l  +   ,   +   .   y     !!!}Kw+   +   0   +   1    8       !!!!!!U99>8g8g\q    J 2   +     +   3    +  \   !!	!!8>8p<8a#A4l   b   7     y <    Y  s 
  /  6767654'&'!7&'&54776?!3's;,n2)q;q}6  |7[&"b@5S*$a: rx<Cr  rx;Cq    ;         !"'&547!3!2767!#<fOD567p;/DOE<6юcq9ǗP^g      ~ )    !!6767654'&#"!!&5477ΤyC39S=*#1/G%g"=S93=ΗLS8BUVUB<#{FO6 +  k'u/     yk'u:   Nf&F      7f&P J     fVPf'   L   W|f&N  C   oH'   Z    Ny  )  7!;#"'&'# '&4776!276'"2796DR,fA<66P.9CHH##LlT
='&X|&xԣVWX'Q   VG0  9  4#"32767654'&'767676	76763#"'m78U-s?>P7-P6tuL[[(ONfSR×krTUNA2UDD)fC+$W> xw!" 9A\\]([Z쪃     V`   !!&'&+732Ng]SS0$D-D;P VXJ       $   5  &!"! '&5767&547! 32767654'&'&m5a=Fk?	o95S1qrST
&8a-FbS F?I񜝝p52 @uDF8W=6XYZ2?>1L     7({ ( 9@&'
!
)291 @$i i `)90 4767&5476$32.#";#"327'jM语.7MM>HWu|,vGVja1cH+0 #)++;&-G.IN8   AV "  #727654'&# 47!! |G1	hi,F';]22Cc ^Ba)0WX'&%7@<  	   fVP{   !>'&'&#"!!67632PiO !.pPQkf dddnMNn#WV`b./ww     :E$ 
  %  32767654'&#"  '&7?YXxG.10ghgE*b9Grg=G^KJ-W @ED9a~}0o  W`   327#"'&547!89!%BC=nfjJH #m)Dw   ?  o`   !!!	!Tf?\WR`Au+     <   '&'&+732!! ^p-϶PW!mMJP<L  T\` w      9`   !! 4'&ޑwfl]`J("įt`O     6V -   %$!2#727654'&#$47%&54767!!m,2JwK0	hi,F"#;	E 2cA`*0WX""&%T*/eP +     J5{ R    L`   !#327#"'&547!!#2b89!%BC=n{Ϩ` 
J%$ #m)Dw`    V~  $  % '!76$324#"27676Nkr6OP%tE2͹sNN.LM:\PazUTA2UTTB    pV{ (  & #727654'&# '&54776!2|de
F0	hi,E(;ll5/bWX0']@`*0WX'&%wxCM>  K@`  #  4#"327676%# ! '&54776)vOOvON M6~ޅ_5 ?UVA5UVBGNMOȜoFO   jV`   !!327#"'&547j22Vb89!%BC=n{`  
JH #m*Cw     o(` !  654'!! '&547!3276Tb(=STfjku9q.W_-89FīLK/6@   Vj  &  2!$477634#"676t^`SSj6 ,;:&VM]1:*M4jiJX@V5bFRTU8Hnxa` V`   	!;#"'&/!&'&+732{Q<6p-QP'	AQ  0p-σTU(wO6JK-RFG   Va`   67!!$47!!ȟ.ffgfSSogffVd d@V5oM[C8H`   D` $  ! 47!32!326'!! 54CZ23=cqTf*?=13fsGub| (_B;FD   fA1&N  jb   o(1&Z   j    J5f&} T     o(f'   Z   Df&^  y    TV   !!	!	!wjs!=Vu  p$ 	  #   7676! '&76! 03276!'`xtI^!aKB@##%9fRu-m~`zUt]     ^$ 	 #  6'&#"'$%$! '&36766M%K@ҨAM_XSTujHQ3xJqRfR³#GBlO}վU          !6'&'&6%6'&dF ttj}8=w2:hRHˍUxT4!0u81R  .  f'g  t       k'ug    zV     '  7676'&!&'&76%!&uGc#@OOOg42|QdQ
Jh24ɕYu+l#Hc.At,ny}a}yY,tA    D.`  '  7#!#! 547! !32!32654Df11`sGZ ;cqTf*?=Z  QJID{}}B;EF    N~` /  !&767%&767676'&#"67327'7" R;S	g9p9WeS:S
g9p.>(܅'P|'qP~<l$9$ P'qP~<ljY    V  !  "327676'&!&'&76!  z{.-HG{z-.GHQwQpFGghHGFق낂삂^-jkdΌ    VN{     "327676'&!&'& !  (wOO ..wuON .-YRwRR65"!56w{UVVUUVVUZ#`8`     V' "  "#727>'&# '&%6%!0e-.^X|CK!nd,F<E?	9]zZb[TL&eF    V` "  "#727676'&#"'&76)nFdFL)}CJ!nc+F;slɧLw2`<XCKZb[T&&&~*    +  \ )   V4 &  767632.#"!!#"'&'73276Y'zsBB6.+\&Z26! .)srACBD/ 4Y24D7kf
9>_ff

:<     , u   	3 '&7	6'&# ͥMB3]t[/:2G]k<s}/'FW&) FP         	!!!*E,dy  V !  !6!$'"!06?&%&eZ6lV"kS:xJ)nn0I j	D*~P25 x   %!&'!&'&'7#676 |5 d!bv0B˻HS
,+RS;
  CKc E  "'&'# '&547667!3276?!3276654''!'676trgPkB (f@OS#"$ghHL /{/"elIM6*3?\$+5esȟU^UlFkC)mimU5imsuk=9AFRG褊b23G     Ua` %  %&76!!766!'676Niq+=,=qL&Po<,,=@+*RUi B@d6@ل|1+
&W    LV|    " 767!!# '&547766kj/80kk/~auqHC~kVhG~vI<؉m}X   FVv{   "3267!!#"'&54776'2r,rsmhs^udD2{B5K2T1Lc\mLV    *K )   '67676767654'&#"!!676tH(anSAߧ<IMXĄ%W"wq{7:НE5+Jg]Xlicqmk>BC      P  &#"327676#"'&'&'&54767676763267!"'&#"'63232767654Qt4!**44*h{]-W?B4"02AUkm~S<bpL	"nS@Nm=raJhgT"eD8(	$O%+AAC4D&0M`ds//.#AL.#YIX> V %  3 %!  67654'&#"!676!  g>=Xp1<}xs$_rJ2t)eǾLlR@P|Dno39ӻ    V{ %  32%!  67654'&#"!676!  M .1:^/6jsMM_gDznTQU<.6F.SlT&*     t  /  !'27&#"6763267632&'&#";!&QxZ:+N$#>)(,:J"#'o;)%&>$N*9=88#1b0>
N&K(N
0<1#      d{  /  %3'27&#"767632767632&'&#";!7[18RA /#!%26rJ2#!/ A$"1'j'ɞ9Y%33%9   5T & :  67632! '&5477676!2767#"2767654'&#" AuzcQ8m=LEYˏ+(}xPTS!4TV! 6D8/xAGߤpJW7x_VTTC6R3TUVA4T4U     & 8  67632! '&5477676!2767#"267654'&"]<jnVD9\<IAyU(fslzm6s!-MO .D8/sGNߤlP_7x_TI9L0TUVG8M1U     /V   !7#!#!!!RRHH`[u  WU   #7#!##!!HHsGeG_p
ppp    '` +  %&767676'&#"67327'$767a S;T	g9p8Xd S;T	g9p8X`|'qP~<l$9# P'qP~<l9#   fF{  $   7676#"'&'!"26"Uj7pj72uQQ7 %ux.NN>-->F!~'/.b1UTTU@    L{ F  F M   Ja    { !  %# '&76!2&'&#"%32767a{Ћl0v[1<vlX[!o+uyS.
!?@qr~!   { !  '3267%76'&#"76763 !"'53Imu"+mA@lD1a0l|}!~rq@?!
Қ   +     Vj    J &    +     !	!!#!MTW+DQ     V`   '!!!!d,o,N
   V{ 
 '   "276737676#"'&'!!!7NN>-.LM>%h6qi72uQQ77w%wUTTUTT@~'/.bpp   \ "  '0327676'&#"6763 !"'&<]absΏ--\]snoy<uxy}uEE}mnR5I""脄""I57    J' y3    \& yc      +  \k'cu   +  \k& (  u  fb '  %!#3276?67654'&'&#!!!!!!26N9<xKJ  .{996
O2銊#CC7###wKxDS    +  rk&  u  S   # '&547 !2&#"!!32<Eu<)8_oіXeeoˍx

m   R 6   +   ,   +  k&  uf -      	   327654&+!3 )! $~$Pz~'n[k8
p9P\7=3\8#/(A    +  O 	   27654&+!!!3 )!!$Pz~Hnnn[{,{9P97=3y     c  :   !!!2!654.#!!!86
N2Y6!@.{wKS5.-6'  +  k'/u   +  k'u     k&  pu  J   !!!!!!l8>>N+A  {   $    +      327654+!!3 )$i86[[\uM:=3    +   %    +  r   3!!+"%8\N      !!!3!!!3>x|Ew>>wpub}#[NAdE +  \ (     	   #	!!!	!!'sRxxjXTTVhhuN    X (  3267654& 6$3 ! ' 7654&+kL7H/^P2	ZI:a<\s}[]<T1")"'EB--;J)675BH^     +   	  	!!!R"m+     +  k&  u  +     3!!	!+"x:XTh|N      z   !!! $S'k8m+[8#K1    +   0   +   +   J 2    +     	!!!"+N   +   3   J &   b   7         !!!#32?8FF8j/X#U6m#E    Z     '  654&'>%47 %7! !7,	mt	mty6tj7j""/&VqU/&VrAJ@K      ;    J   )!!!3!\"8wNN     L   !!"'&47!3!!oP3Y5	^l{:uKSz=x+  +  	   !!!!!!X"#+N   J	   3!!!!!!!w>"#ANN         327654+!3 )!t$9nn [\7=3    +   'Q      +  ^    327654+!3 )$n[[\uM6A3       !654&#"63  !"'3267!W<uE<)_{

mݍ5oЗXd_o5x     +	  )  !36 !  ! '&547#!"327654'&MuMghrFu).,H.,Hzΐ_md\O\abO     	   ;#"	.5476$)!#zIyKy=WxD,?'jnF*L,?z+j!$+5  #{ D    1W  *    ! 5454767676%676 "2>4!E~4%T~3;$OsO& ,I,{EET":0)'	"0O[ BA    ?  `   "  327654+327654+!2)-maKK4R?(eK]~^F6h}S9/#   :  e`   !!!Q+`}  `    !3!!!3>#!	Ȩh 7p7 h<zFZH|O`&i,   J{ H     `   !'!	!!!	!HHII|3HfHzssW6qq9g G{ %  32654#"632!"'32654!#;χ2fO&!٩5ΌF5XE0G8h!33 #8^UCt   ?  \` 	  3!!!?fttt#`TT  ?  \'     ?  `   3!!	!?fJxG`{9g`    `   !!#!676U^t2?/U``%I $uY     :  E`   !!!#!i|l|`0{\   :  C`   !!!!!!fScSf\\`V'    J5{ R    :  C`   !!!!/`} Vj{ S   L{ F    E  `   !!!!p+ji`}     F` \    _V  * 7  "327&!632 #"'!#"547 32"3267654&AFAkKc.f^xϩ3ϑ\\\xϩ2Jϑ\kLc/kAFwBA@JJIKVI*ILWIIJJBA@     ^` [    [u`   !!!3!!4fcfh 7``    `   !;!!!"'&47f'L[fTA,`p^,Y:;     ?  3`   !!!!!!ftftf```     [``   !!!!!3!!4ftftfh 7,```    j  `    %327654+!3 )!͵S	C(ϯ~]W'/ ?  `&       ?  `    %327654+!3 #!ѵfS	#~]W(.    #u{   !54& 63  !"'3267! oΣ9/f6nѰ9m$Ib$>qCM>%cU     ?|{  %  !36 !  ! 547#!"3267654fW9c"!^6Xwu`?oFP>{A5֫B5      ` 	   ;#"	.5)!#9[4[.?KO!P~7+12g    Jm' C     J1' j       jF0 !  73!!!632 7>764&#"!j+UfU+9ɛ=I))3xS&LٿSf#_z^ :  m' v      I{   !327# '&547 !2& !$u9эf6/9{έQc>qCM7>bK    {{ V   ?   L   ?  >1' j_     F M     i`  !  !32#!#!676327654+S	#U^t2?/U>`Wu(.`%I $uY7~^     ?  +`    %32764&+!!!32#!!!>LOfScSfS	#\\~66VWu(.'     @     73!!!63 !764&"!@*UfU*:K@$,Ơ&LٿERO  ?  m' v     ?  \m' C      F'     [c`   !!!!!!4fcfi7 7h``     Cb <  3276?!3276654''!#"'&'# '&547667!$ghHL /{/"elIN5*3?\$*PhgPkB (f@OS#"tmiqU5imwuk=9AFPEf^^lFkC    D`^      (    !!!3 )!!327654+"9b[9"$ՠupR6>3$ѻ  I  D    !!!3 )!!327654+f>2>+	D)ϲ2X '- I~^  + +  32767# '&#!!367$!2&'&#"! E_snoy<uxy}i{"nrXu}mn_<]absΏS29yb""I7ѯ7I""Lm     ?{{ +  !!32767# '&7#!!3676!2&'&#"/o'CTQPJ9ZZYWэn	/VfU0D/XRSO9>FENe7L4W1yF`Mw2W1      O    )#!#!!Oee$̘		Lc     `    )#!#!!ŊEEh'egdd`  +  
=    )#!#!!!!!!
=ee{"n̘		y9Lc  ?  Z`    )#!#!!!!!!ZŊEE^XfX_'egdd>`=          )654'&'!!767!	!4/X\[[H-FZsKUGSM& Hkr3	3r_   w`    !!767!!654'&'#wf6`wGgA_&"<>=B3]M'<'MoFO8/X71:/U   *  	  %  	!!!!!!!654'&'!!76K{"oKZs4/X\[[H-G*9	3r_mSGUM& Hl#    :  `  $  !!!!!!!654'&'#!7Bw4rXfXGgA_&"<>=B3]7ʋ>`='MoFO8/X71:/U  V Y  #"&#"32632&'&#"#"'&547676;2767654'&#723 7654#"673767632&#"(®4&QR3D..|y)\],G!'iW]]HPA0Y=$7O@8'2b0'	.`3{nW
84'
):$*V].3YoS(}d&y++'+EC&  t3 _  #"&#"32632&'&#"##"'&547676327232767654'&#723 7654'&#"7673767632'&#"x'} *9W'2##gi#OO+E21X|RU]$GG%99=/,<F5>/gcO@7&3b1-'>UI
F+>'$3$+_OT$(7
Un2;}b(y+'!34      	   '&#"!!!!3!367632	/8Z3"w<<wgţmMebV6`E<N     ~V   '&#"!!!!3!367632/8Z2!wSSwgdmMebkVV`G<N    Ja   J5{7      ,   !632.#"!zw7>>rA54
r     z  {   !>32'&#"!zg{a4/9Z3"w`qV    ,p'uz	   z  f'  
    tF	|  ( >  !"'&5477!2%654#"032767	+7223276?!68td9tcq@$	 q?%);cau-"![,8<kfL\gf%g2r>|G3giE|H6KZ!jn   F  # 9  #"'&'&767632654'&#"32	+7223276?!600nh0/mha-a;c`u-!![-7<kfL\/鴺-鴺,t+ s, 6KZ!jn     RC % I   23 !#"'&'# '&54776!367"&'#";676232767654'&+RZiyAZ*#$NZyAiZ)%(P:Zxx*/I[*# T[wy*/JZ*!S]""R^N!"wxNBtLv!!vxOBtLw"   G{ + V  #";67676232767654'&+"'&'%3 !#"'&'&'# '&547676!37676215xNP-w2	
(B 6uON ,v9(B"94tc.;(B6td-«55)B!wTVA5N3U				UV@4M3TՊt7;윉t7<霊 L
m&  ')  ' @	&  '(2 Y CbG&       D'    RV !  !!# '&547%$!2&'&#"TS/wEu}nm`<]basΐ+A\#3U`f7I"";6~]  DV{   %!! '&54776!2.#")S؀\6/XRSO9?Oed	&<\lBJ20WX/(S7T  &>   '''7'77'77~֌[~}}|}}~} #_ /  "'&'&'&767676763!67676762#M>^>f F   #6#"76763 Qjb[0$[0L   &LG 	  07!#3$&ez  LG   727#7!88z   M   !2%$'$'&-4 Lh{t\q  wl  # 5 G Y k }   #54&#"#>32#54&#"#>32#54&#"#>32#54&#"#>32#54&#"#>32#54&#"#>32#54&#"#>32#54&#"#>32VPQh"͜VPQh"͜VPQh"͜KVPQh"͜VPQh"͜2VPQh"͜ VPQh"͜VPQh"͜C	AFGI|y	AFGI|y
	AFGI|y	AFGI|y
	AFGI|y	AFGI|y
	AFGI|y	AFGI|y 7-      # ) /  !73!#'7%'%'77#%73%!㽑!㽑_lkHk=8b,q;b,q5%0	5 %A@¬@yoyo zV!zRR   +Vk&  u :V&      +  ^  #  2767654'&+3#3 )#737!y?C$,zHˌ&$[,،&$-1]:#-¼uM6AluX»     7  d  #  %2767654'&+3#32#!#3!VO..!P02!qK	"2>f ?'  X;s(/QX` >  +      676'&+327'7+!!  32pQL<bĚe"-&wc d66_c~:L~vc~  V]{  +  676'&"37'7"'&'!!67632' -,NN--s)(gXIUuQQ7r-f ]ccuee32	WHcTTUTTU}/.b
b./}   +     3!!!+"<#t\2N    :     3!3!:t=h`:}  "     !!!!#3!t\98Byy8q%n#D      `   !!!!#73!i-T+WW+XQ?   +f $  !2 !#3276?67654'&'&#!!!!`
O2=7N9<xKJ  .|"%8\wKxER#CC/##   :Fo`   !2+7326?6&+!!!!UU,#,ͳ.>f^#:fSQ+vwwv\\S`  
   #	!!!	3!#!'TRwwj'9>>(TTVhhAuN    9`   #	!!!3!#!'3|4GfG+77kHHIIqq9DWsW6 oX' z     oG{& z]       J   !!	3!#!lw:19>>(ThA|N    [`   !!	3!#!4fI+77xG`{9D`     +     !73!	!#!Mx?!:X?ET~CQc}N  ?  `   !?37!	!#'!fJy-n.nJxG`a耲9g@~`    +     !3#!	!!#73M&B:XT&Sh|N     k   !!!!	!!#73CfG(`xG(r{9g`       q   !!	!!!x:XT8h|N#     j  `   !7)!	!!N+fJxG{9g`   J;   !!!!!!!!w>{{"n8n#Ay9  Z`   %!!!!!!!!gb7\\fRcRf'`V    +  	+   !!!!!!O{{#o8n%8Ny9    :  .`   !!!!!!\\fScSQ+}'`V  +f	d '  !2!#3276?67654'&'&#!!!!!O2=6N9<xKJ  .|":wKxER銊#CC/##N   :F8`   !2+7326?6&+!!!!UU,#,ͳ.>f^#:fT/vwwv\\S}`   Q  , 7  %!"'$&4676%327& 763227#"4#"66ꪂ;0k=9wL*SFKQYlyZJg:b|J52Q<3Jg:u"Dh
*M"H\pYڢt0,eT[   Qcz + 7  767"&' '&7676727&5476762%67654#"k,*/WVkc|x2R/y2<}DVUIgG}!L&J /.*8b|hX, mh:h@!Iϥ``#|`.e    Jo' z     Lo{' z          !!!!!!?w>8`8#A#     e#`   %!!!!7!!gb7i++j     y <    F`   !!!ff+NM`uq     }  p   	3#!7#737!p%%00%%o`    F`   	!!!7!7!7!+%%f`u??      3!#!	!!w>nCm#A% `   %3!#!	!!Ab7{({b=#L   {   !!!!!!!!B8w>8`8#NA#   e`   %!!!!!!7!!ffb77i++j}    !!!!"'&7!3!!w>{QN-L !.ln#Aywsoe@7#9  `   %!!!!"'&7!;!pgb7\D@"9f$Rf[V(TKh0+      L   #"'&7!;33!!##ҸQO-M !.??o{"ywsoe@7#E9+y    `   #"'&7!733!!##QC@"9f ,n,[Sf\[$n[V(TKh0+ټ    X   !2!?67654'&'&#!!|o
Q2Y  !.z"wIyFR5ohb% ?  ; K    W . 7  676! !32$7# '&547"'&54?!32%!&'&#"[hgk Jd|<~mO#&+'*HzI΄ꀞ&$r`FG78ϔ48n48NWF6>rMM  ='{ ) 2  6 ! !3267# 547"'&54?3!654&#"D["zq5tbE	_Q`h%CMfbuCD01	lL~4;0F4&@jun    W  :  !&'& 676! !32$7!$'&547"'&54?!32*H{IA[hfk Jd|<STEFmO#&+'rMNq΅逞&$r`FG7g%48n39NWF6>    ='{  6  654&#"!6 ! !3267!3.547"'&54?3Q`h%D["zq5R: <tbE	@junCMfbuCD0(7lL~4;0F 4&   +   ,    	k'"u    F'&      +f "  32!#3276?676'&'&#!!!!cNO-=6N9<xKJ  .{"jwu銊#CC77#!  ?Fo`   32+7326?6'&+!!!'UU,#,ͳ.>f^#fSf?vwwv\..S`A  V   !!!!676!9Tö6de7'#V[A- V`   %!#!#6767!g+A&2HhE)pVB "wd    +f   %!#32767!!!!!6N9<xKJa{#o8nꊊ#CAz9    :FC`   %+732767!!!!!o,ͳ.>f./X\fScSfwv..'`V    +V   !!!!!!!!9{{#o8n#Vy9    :V`   %!#!!!!!!g+\\fScSfV'`V   l   !"'&7!3!!!!BQN-L !.ln>w#Vwsoe@7#9+d    `   %7!"'&7!;!!!
1D@"9f$Rf7b[V(TKh0+    +Va   !!!#!!!9##VN/  :V`   %!#!#!!!g+|l|iV{\`0 ?   O  {  |'K6   #-'   {  k'Du   #1' j     `      #{    +  \k'u   JF'      JQ   W
{   Jk'um   W
1' j   n    	k'"u    1' j    Xk'u  Q1& jr      *y  H`T   +  O' q;   ?  \' q     +  k'u   ?  \1' j      Jk'u   J51' j      Ja   J5{7   Jk'u}   J51' j   ~   k'u   #u1& j5        O' qp;    F' q       k'pu    F1' j        k'pu    Ff'        Lk'lu     1' j       J 	  !!!!!w>"%8\#A   Z` 	  %!!!!!gb7Q+` +   k'8u   ?  1' j      ME   !!!!+732767!#3!\98BGf2(α.>i1*y8q% sy5-nn#D    @C`   !!!!+732767'!#73!,T+&g2(α.>i1+X+WQ sy5-n    f   	!#27#!	!qN9HCm%f#w   F`   	+72767!	!,(}ѳ.18{)`PG sz"'a=#L        	!!!!!!!W2-oCm2qdm     c`   !!3#!!#7{){f++LJ3b   K      3#"%676!3!! '&54Hz>C$-5/o\s-0[;$-ju9+uM7   "  `    %37#"%676;!!"'&540P-."x$SfoL !;( zOXX;r'    G $ 4  "'&547676!3!3267! ! '&'#"32767}P/o-kl$ff>ف#mvuVz>C$/sjPLsIDTju9S=L,P
ʛ+7==-0[<".TQ   !`  6  #"32767"'&'#"'&547676;!32767!P-."EC00pUUQqL>
$SRyQP5F5RA( !;( 89k'u )a/.XGr/7OX&#?6==Pm̎w  ?  654'&+732767654'&#">3 32767! ! '&5409J0PP/<~]f7xl#~aUU<(
);agQL$ff>iH)5-.]<%/*)  `K&+TS"'`@X,22&8PL
ʛj#     { A  32767!#"'&547654'&+732767654'&#"7676322*IR5F5RA(Z27v,|u8?	*0_;B/_][WfODDq|+&p+!=Pm̎wzTk
	/!%",## H7h"a@??88 V 0  )654'&+732767654'&#">3 !!\U9J0PP/<~]f7xl#~aUU<(
H)5-.]<%/*)  `K&+TS"'`@X,23     V{ 1  )654'&+732767654'&#"767632!!B27v,|u8?	*0_;B/_][WfODDqt1"g~R
	/!%",## H7h"a@?H2E"ay   	{ $  !676!32767! ! '&547Y6dd7'-kgQL$ff>فW[7-S=L,PPL
ʛiUg   ` $  32767! '&547#6767,yPR5F5RA((f_
Z?&2HgF)`'#?4==Pm̎wwl.1B "wf    .	    :` !  32767!#"'&54?!!!!CyNR5F5HA(f_
\fScS`'#?4==Pm̎wwl.1%'`V     SD   !  47%$! &#"!267!z|Hy*<ꖑ.|>#BV:X`toˍLAU     H_   327!# '&547 !2&# E[;H'([5xנ.EY3ˏwjEP,Pa;1c     a   32767!! '&547!!u-klLL$ff>فWu9`9S=L,PPQ
iUg\#   E`   32767!#"'&547!7!ANNR5F5HA(f^
Zi++n($@1==Pm̎wwk.2   K8R   7({J   f   #$! !#3267! 8m7'6N9<xk#K1#![   /F`   36767!+732767#/2?/U$,ͱ.>f/-U^ $uY.%L%I     
   #$!!	!!! 39m7)roCm$k#K1%[    `   36767!!	!!!2?/U$){8|V] $uYLb=#%I    +      32676&#! !	!!#!Qpeph
roe_mddlf%}w V{     "26 '!!6 !	!>Z>{Olr-f e/,{86w©@
Mb9Im       ;#"6$)!!!!!#!.XyJyzn,?'8r6g9B9nFf{ gZXU5z.  {  ( /  #.7>3!63  !3267# '&'#;#"6&#".K]?hx 4q6Њc}B[5[[A^`h%1jf~~CD01ngH@>f}un    J 4   JVu{ T     	% :     j` Z    +     !7!!'!!!'/@Y8wXT"xODf|NM   ?  `   37!#'!!!%'(W}*qxGfJyL2F4[g``Ζ  f	W /  !!2!#3276?67654'&'&#!!!$76S'oO2=6N9<xKJ  .{m8SRnwKxER銊#CC,##[8#2    F` &  !!2+7326?6'&+!#!676YUU,#,ͳ.>f^#fSU^t2?-W`8vwwv\-.S`%I $uU  +f	c +  !!!!2!#3276?67654'&'&#!!!!No8no
O2=6N9<xKJ  .{{{9wKxER銊#CC,##y  :F8` "  !!!!2+7326?6'&+!!!fScSfYUU,#,ͳ.>f^#fS\\`V8vwwv\-.S'  J=   !!!!!!w>":#AN    [`   !!!!!cgb7`}``     %  67!.'#".7!3267.'K,!P:8?r5٢4EmE -N"/X*')|!; DM]S%/_0     +     ) !2!76."!!>zE#/[iO6$2j=6K]S%&S\    g  q  $  76."3!".7>$ !!!++[mI)
0YF6 ,-+,2WBqS/.Kad_J- CΌHHޗ =   K  y   !6."!7 !  !!'/ZiO7?@E>%I2W\S&%S]B1ü =      !!2>?!#  !2j3/ZiO7 >` \S&%S]K6=     %   (  !!!>76.#"!7>$32gKP1O2tW4dNMwW8}.wm. )JkcVe74\{Fsw|՝Z\  +   	  !!!!!1"IR2      +     3 !2!76."!+>zE#/[iO6|1=6K]S%&S\      +)  =  %2>?#""!>$323#".>;6.=9.,A9/(7UW`8pбZ 2-zں~50}i
5Qbn1R=0R@AU4MfL"Cdcot;<xq5>`G0       $  "2>7!!! .7>$3!MoK+(YpN/2{I,221 `9YkdmZ:<a}Bu TTنϑO  +     !>32!76.#"!MS?IM$#/[EAfL7k[K]S%"JtQ     +     !!!M8N  +,   32>7!#".7!!!2e>6-N@3ee~y'3ԧ"I`K~\3&S\
LL
   & 8  !3>32.#"#".7>7#32>76.'-T\iQFalRQzϋ9Jnq-\B6jSRcA`D`<^A".0l__׎SwV0clW_g76bRYj?P         )#".7!32>?!M<I$ dd.[ECgN7K]S%$NzW    3.>76$7!27Jk-`z C/0 Z5`JCI-ff`''   C 6 E  .'#".>32>76.#"!7>$32"3267. {(N'+R'rl/hbV;<Ufmm0jX=X4dNMwW8}.&' 
&7m60\wy*X03e0AH 3Jb|bJ4!>8V`Ve74\{F:>|՝Z\|!6!&#+2  A     !6."!7 !  !/ZiO7?@E>|,1\S&%S]B1         "  "!".>7>7!6$33!Y{5BlD,vgZ[_8v6IR"(,/X[Q$Js|lMjaWzP.)-_        !3267!! !  M$Z$2|>> 6=  U 5   .7!2>76)!2>76&"!> w,	3csP.	$v23P:%Qwu ̇9	+=L*5R3kJUs<mQ0(DX02D'M^^rnu<9mc-TK?EVh     _   2>?!#  !>/ZiO7 >|2\S&%S]K6=    e 1  >7'.#!!2%.#"32>?! .krvA#2"OCNu662EybI2cNMwW7~,vtƕ\ m<qhVm?4\zGsw|՝Zc   +     3 !  !6'&#"+>zEF>$,.KM$=6POOP     h (  '32>76.#"!7>$32uiH;H3n*O~_A4dNMwW8}.wtɓQJEtV;m^Ve74\{Fsw|՝Z\   A     !6.'!!7>32Ac<Bx`Dcw0^DjO65PjEkgD!M      & =  >$32!!!>7>76.#".66.#"32>z.gKP1O@W	 B^5hU)8cFT|T,Ue:#5nȘZ\m. ?:
0J4&>LME;Ve73Si5##@]98}  +     !6."! !  !!/ZiO7?@E>%-2W\S&%S]B1ü =    T 8    G     )#".?!2>77!!SM<I$ .[iO6A##,K]S%&S\M    K >  32>76.'.7>32!6.#" .7=kN;bK0		(Lc2NsY6b藚x%u#D4/L:%	,M^)~ǂ7r-BmO+2F-0C-
%7Kc}MZxEEza'J8"+:!8B&	NpakJVr   +     3 !2!76."+>zE#/[iO6=6K]S%&S\    U / ?   .7!2>76)3.7> 2>76&"w,	3csP.	$v2	s̇8	+=L*5R3/O<(Wv
$?.kJUs<mQ0(DX0$-8#dl89mc-TK?EVh2D'VU\O'B2   +  S   )!!!"I22     1  5   1  !>76.'.>$?!!.-qjU$7@B.qjT#7?Cӟ;6  ?6CrZ<ZA,BrZ<ZB,	OҐP		OҏO
       -  "&'!!!7#3>32 32>.#"	Gu0\22n{0.{-XGFfF+-WFEfG||4؍CJIF~`A"!B`~eG&&G  I 2   >E ! . 9  ".7>3! $.7!!>76.'"23;ڒ>pIA8:D$7@B.qkT%8@C+XH2'DW*WJffx?	DݗOKڎ<X@)CrZ<W='
   F   X
     f   	! Fcfx  %   #>7>73!MF5Y`#ND2Q~ 4C&LsL!3C&ToF    !$   7 %  >32#".7332>76&#"Gm8=eZBcB!&&C?knAx͖V%LvR6fP1$B^9	92@d}=  O%   	3!Oͻ(4  %` $  %#"&7!3267!3267!!7#"&`Yp,h1Ngkhq4(gkhUguiluwk&`t='`_o V;{   !!!>32!7>54&#"!S,h eo-L98bO8: 1V
b]"J*H_lC=.TyK     YVy  #  "3276'&!#"'&76327!!!rLN>-+rsNL>+-r]ueeeu7 h,1wTTTTTT@TTLc\\c     ?V{   !!>&'.#"!!>32!S?/8aO8kh enÛ-S,1VK_=$#'-TyL`b]V    yv   !!32>?!!7#"&547!v 2 4M98bO8fdoh` bjA=.TxK0a^FO`  NVy     "2676#".>327!!j>W r^ug`2phu7 h,1wLc\WכW\c      ?  & 	  !!!!!Z1>.hU2Z  L   V9{   !>32!>54&#"!!f eoeL98bO81`b]"J*V
_lC=.TyK/     V{ * :  23##".>;6.#"!!>"32>7ni~<-,KSk3aG2Yo6]h@,h 2o*	#-46{Ozh`.&NvvO'IiC-UyK/
1H/	 %A4    Y     ! >3!!!!#"267F::9^}qUhU,2lJeC'W`'%t͘XL .RoB    V+   !>&'.#"!!>32+e>/8aO8huenÛVL`>##'-TyL/b]    V`   !!!1,h 
 V 1  32>7!!7#"&?>&'.#"!!>32?/8aN9khdoÚ->/8aO8huenÛ-VK`=##',TyM'c\RL`>##'-TyL/b]  Q  *  	!!# .7>72>7>.'#"12tw~(Vf7QZ\S@&nqG EfzΗUUzldSuJ""JuS<^NA      Vv   !32>7!!#"&h?/8aN9khrdoÚ^BK`=##',TyM'Nc\  ?  +   !>&'.#"!!>32+e?/8bN8k.hueoÛVKa>##'-TyLc\      ( :  !7#".7>7.6?!7>732>76&'ddoa\evKq2B?z!D0*P+:%QtG		$?.8bN8Ie4`M7c\=wpQO=nQMC//
h,L9!,RsH[/)[cj     ?V{   >&'.#"!!>32!?/8aO8kh enÛ-,1VK_=$#'-TyL`b]     k$ % 8  3>32&#"!7#".7>7#32>76.+Z-6/2Hym1q'sdoaXZD^$	#?08bN9:ye@R``yF6J-Vkc\<vrflj,N:#.VzM@kM*j      !32>7!!!7#"&he?/8aN92doÚK`=##',TyM c\   F`    v   32>7!!7#"&7!˺?/7bN9khdnÚ-2BK_=$#',TyM'b]^    V({ ,  %3!!".7>7>76&'&>32̂7R1L=`<<_WXlC	QV,\frB=9fce9z,c$^p ;\?3\`jA@urtAaY 9,<
7opZ     ?  +{   !>&'.#"!!>32+e?/8bN8kh eoÛV
K`=##'-TyL`c\  vV` /  !".7>7.7>7!32>731\h1	Y_2S80F1|G`<5<) >JgG ,G[/AM3Lb7&POL$)IDA3A
>F     yV` )  %#"&547!3267!3267!!#"&RYphs3=g!lhs3=flhrThuhmFO*T+?=(v><5)L^ao  V{ - ?  %6.7>23!!".7>7>6&">
	"+#
q4X}tK
Q1;\<	>Q[*aIt

	]{L&0VRQTY2Xh:7opLti]PD 5L/@kWF4^_]J&>BN7*CfRF     ?  Q{ "  !7>764.#"!!>32!r~	@78aO8kh en^Z4Nc:,1f1\F+-TyL`b]<vq5urg'      v`   !32>7!!7#"&he?/8aN9khdoÚK`=##',TyM'c\    V   !32>7!!!#"&he?/8aN9h,1lrdoÚK`=##',TyMB Nc\   { .  )>.#"!7#".47!3267!632?q4(gkUg.XL;yhq4(gkh .XM: H`t=٤`_,Lumm`t=',Lum  V+{   !>&'.#"!!>32+e?/8bN8,h enÛV
K_=$#'-UyK/
b] 'Fsy J   ?  `   !!!&1tf  `  V .  )>.#"!#".47!3267!632?q4(grUg.XL;yhq4(ghu.XM: H`t=/N`_,Lumm`t=,Lum    V^{  '  !67632#"'&'!!!7!276'&"(f ]ccuefeuQQ76 2 

2N>.,NL>+-tԤb.//.b 66 TTUTT@TT  L7{ R   ?z + 5 ?  !.?!".>3!"3 6.'>QrYLLQlDiHf5wxy1$czhUWmCv8L/%G8$Ei?w7rc>eyW;#u	#<Wxd]uDb%RR%J6Txy!*#~o> G     32>7!!!7#"&7! ]7`L8of&1tdoÜ,hTJ^=$I+PrH9 a^`    T  `    !!!!-iJChL`}}     oq   %'U8Ƒ߭JO 3*S    3#3#'
'2   2*/'   L     *     7!73#3#''r'
'2  *     3#3#'#7#7!S'
'ȗ,,''2    K;j   3#r&Ȗ   j'   j     *     3#3#%3#Z'%'!'        !!'D^     C      #7#7!""&&         3#&       3' t& :  YI    3#7'xd  8CN   3#N-p    RN q   !!t8q `    !!6'v*ȇ    58(   !!]f(   x   3#&      3#&    \  `    !!!!6fKDfK`     3  a   0!!76323!#"32v4~zF2EF ^zz KJ  *4   #7#7!,11''       `   !!7>7!67!PC:+>>\@0sC:I+'*:0E-M@\ZL%@(CrRH-,  X  `   %>.#!7!23!7G$J9/{j.A..l9KL,.Vr    [l`   %&7#"'3267>.+73 I.=%>tn4<5I<q{&#D>/
I5#
yWYhApJ      6`   #!!7!/rr       J`    !!6&#!7!2rou =x
/e.J[t<      `   !``      `   #"!>7#7/S(B.g]tM/`@shC܊       ;`   !6&+!! :uz?w&Zrm` "hm   2676&#"7632  r"S։"%)T0Q0pT͛8::q`,B  P`   ~`w  d`   !6&#!7!2F+K/:n ݡ=     X  `   !2#!7!26&#!2h{tB!Iz{.h8e`@kk@"        !!!LpKA r?A    N`    )! !6&#'6b}L?w`|m     n    !>3 !736&#"!676&2X4ogu.G S8.0#* `+mm}$C:_B7K;p  Z`   	!:`L  X  p`   %6&+73 !7WFA/ $r.A> 'm` 	   !   # 6.	,:;;D=BD4O`%.0^YxD   H1t`   !%!>=P=3RpՉ4YVGn})7pzh.[B D"`   !6&+327"&'&7! !Gm%P%X|`"H$P$ZGza#H      ?`   !  )7!26&+27"&'&7h..ED3&@c(T%`a6'!G  2c   >?!!6&'Y%DC*I*k΋6c[*"lj u    n  ]`   %!67!'!7QtP:I+QHBL.s2(ݛf[#     i"_  
  !%!7!d/6.r@     `   !6&#!7!2ooN/o5995^     `    !#!>767!#>76!IJ]V40LcN/bQJlee1flMΦYc?/c܄P6. .P]DEE   3`   !6'&+ '73267#7! 2uu"'%_Y2k_:,`26Y/`C*Z[522]SOux    q`&,  ,     q`&0  ,   P=`&0  0    `   !#E`     '`    !#!#FľE`|     "   $ ( 1  #!!73'#67676'&'#67676'&?:. //gv#|cq10%wCmCQAJ/@1#6m6C3*4&-"
HS`! UU|^[XU +WV* #EC$  {    6%76%363 !6#"6,98,@$HegYF$HMsf9   { (  %&#"# 6-676# #"7676!2$32o Ck ^q2(2G3G()&SaE=+,N|cxfnpAP\{z]A0"q   v   $!$63267&7! !2A,6%+6!yB}aaJt{hS-xYl~z   b    ! '&7%27'%pp7iPG"c($6i3:p{41     [  |     !76''$66! ! d^!}#`<3h%87|~sKh.
    \ +  %$7&!"! 6%63 3276&'&'&7C$U;
45$TNb_;a~g-9(=#*/9nMNo42;UW
ܲ`L=J     #   % !% 67&7! #"%eKp9p~]6U v*C&1,
/?x~YyaL3wG  $_   !6%$676_Ǟ;469Bd)0WhJ0TURG^   "] "  67$!6"'&76#"!232[5>MǞ 9`=241GdM>@t0ion   H   6!6! &6%6Ya9G326`20oQ6  F{ !  327>!6#"! 67&76(xzB*NTNSAL0tF'{ŊY޺k$ܕYiH    7767$7767!%&'% _)<2BHFiAi9Ji1#o4!ohJ	Uk     &7%$7!%$6l"E):3D!S7-8alJ0C/;ED~      &7%$7!%$6l"E):3D!R7.8alJ0C/;EC~    <Q (  "''$327!767$7%6'%CR8Gv6L%>1C}E9EzD-6"J1/SHHKjbjjfoi^ArGxxU     1   &''$327!327!ΣegFw6M!;/D|<:>p8I<Cibii4kl>   g %  !327!!#&'#"#$67&75% 32F8Gq8GUdgG.g86IC)T
s~Sfno/=@h@)Isk     H '  !327!!#&'#"#&'&767&75% 32}F8Gp8GUdYt(.g86IC)Tv~SfUV?=@E[@)IsR    `   327!!#&''.7632327#"eJqt(λ!&`6RV~uЕM   P   % !! 67&7! 7eJ9~\@Kv+D&1*W0w	Dy~\y^A2?"A  %$ $  $6%6&%$! '&77$76'&,9ߜZWyHS"oc4e-L ">6R,2?9J,Ri`Tc&        %%$37&#"%7! ! g.;<y @ZS,f&l.sӺ,2rw!;GX<   
X "  3$76%676$'&7gY*7I˄,s"&=+'*+̖^{DbZ*LXR_T
       (   76 '$6'%! 7%$bDt98r5k/r.<;z3cEj'''Va
%!ifƊX=,2r     B (  67&7%$7'&766!6#"%$B1;395!
09LB01AKFȵ"\kqN@D0Xj*MSPTt  8    %$6! 7'$6KUEy?F)*Aq4q}hs[;
h^B^E     
 +  6%$!632'&'&%$'&7 7$D3?%`9A	ߖ~`VQ/`u6.(9_m1S	Ee<,QV0*"%Z<i7/
     u/ !  	6'& ! ! ! 32?632݊)!]k854-*א֌+3)'"ixF     7t'e<Ue   ,   "'&767&'67$6+0Nt|?^H5)F2.eWs   h     !6#"! Ȏ*N?p;:k/

>+  &f  |     ~   %$ 7 76	$?IZ_E:$ 0~9e}    %$ 3!7 76
%?I[`G%f%	#G~9fP3}   ~    %$ 7 76#'?	$?IZ_E:$ $-$-0~9e}####       %$ 3!7 76#'?
%?I[`G%f%	# $-$,G~9fP3}####     &776'&762'6321
.9%*{JYj,.--Tbڂf  ,x    &757667&763273% ?<XL|??+ۺf@TwdD:0;QF ,    &'6767676`;ZL`o		,,,sWf-2G)4G^ } "    276&'&''&7767 a!!_Y`(/'E~ W`a^֗:",SV    >6 2  %&'&? %'7676%&!2?'&'&7(o,D21#Kw!12;Qx7>E]lF6$NWO+Nߠ_a?)sP/k7hmu~Sq    l|    &7! &'"66<{6x6\3o'+oy^eD(<  l|&q  q    3}   ! 76'&767632&	76F0.kI&*hilΟDuFBw(jixz;kS     6#"7!  $! 6 !&PޠXGKU+$%=51F;,\?zN.i.  ajx   6'7%!#$''=~-G355DbعXђt(bS     C .  %! '&7%! 76'&'&'&#" ! 3232763 J6ja`pH"<>',D0."6-2F@M, )+?TL=sY4a]kh]jHjiw    E   #IK|    X   !767&76$7673!!*6n>I%_pI,?^     K 4  7676367673!#7676'&'&'&3&76'$LB?2! UfYGgy% ="!BE`n%!9>TT	WK{;PH9;Ed>Gb*gW/A67	*ut7., U   3733##7#++$++zۺ  olP   +Y, 
   !#&7656776&U (- *.=C
AA566        "327676'&' ! '&676ukM'5tB*5mG-5^pT30{X`Wp`~|Ĕ     q $  !%66'&#"676#"'&'&7676! -=&Z:lOp"2,)]7!'!oGau8pH/CBe+V4yru   \   $327"76!2# '&7? 7~^E,7gj,:V"s/LΔ)ZH@\`u)ͥ}Mp    7  !#&''.7632327!3276%$676232?'&'&!rIqs)λ!&if_"!L+8vbAH;o=}K8RV~uЕM đ"mysR0hmIRr   @. !  $#$'&? 7!32&7! u57V]:V ^KkNUn"1
/%:m\HM     @. +  32&7! $#$'&6767&767!' ^KkNUn"1
/%:5u5'e5+.]?3nf\HMe:^~Tt\V      :  0%&''$32?!3276%$67632?'&'&"VI%dgF[7L"</(|!:#qL*8vbAH;o<I8J<Ciiiklđ"myqR0hmIRr     J{    6%7"73263 !6#"D7-01B$HegYF MMsf9  ! ; C  076'767676'&'&'&#" ! 3232763 	767D)^53\/aL#r8/{q+D1."6,3G?M,!)+>U/P`&QT	PGG4+
Ga]kh]jHji'!$Vg'    M     '&7! 327>!6#"K|.VF*@/0/C*OTNSBQ?h `޺k㕕R  B
 9  6%$67&7%$7'&766367!%&'%767BgMG1;395!
09LB01AFi2H9K.wk8^*U^tfD0Xj*MRUOJUk1#V   B
 :  6%$67&7%$7'&766327!!#&'+$7BgMG1;395!
09LB01AFi1]8H;g`,91U^tfD0Xj*MRUP[KN
'    n    !  67#7!!72 76'%JF'55DY4P,-"a6J4{ZaxȀ    #"76! 37!!At/6/Vysq>4r$[ܜ;f   3`   !6&#"&76$32!</QH\J'$I"[pDkQ[Ukԯ  8    6#" 32 % !  %!7!!2ꚟ12֭EwDDnR45H59 #BB]    R   !6&#"&6 ! -1~Tc'm;%e >?~zD      #!6&'"&76 32!_N:EhF"%J%[oBPl?pϡR@    ' 
   3>76&# ! !7!3  4S.V}U4-+;@3td{x.w)         %#  !%#!  )!
-=7?eWSN4Wl?r&       %!!!#T=!Y    :    6&#"3>7#$7!63 dg4zGMbg){VvAG|96>7Y1n2T5+       6&#"36 #!!63  i2X]sF2ec[GjÝ'mZG@tB#OR(     
   "767# %"  !37!7!!^f1$aY O.ƵO8>=/y5dיq]>"T(^   1    %6&#"!6$)!"63 B,pmi
-'5J^Q7sv<BPp&       "  6#& 3 !"&7   !   36756;ܫhR-IKE>NlJ>\|ECX_X_D2      #"7!7!>7!!/03 o`\!=O~      %# 767#7!327!Jr05O,4!fcX=7>⒞u:l        %! &7%3267!!P?-;,%vQq(>d@z>=ƶyQ'       $7!3>76'70=*}aL*'x5zNŷ   0z    6&+3>% !#!!! 3"krl.|I4/in   
 "  6  32 !7276'#   !  55:ݬoO4H<%=vM9W_x@ 'Q+B    X   #  32676&'!#; !#!#   )  '{&(|~''|@ZVV@?[紺ڸiZ,,P      Z   #!!!3!!BʼürF<r=rx>;w    2 {   %!6&#"!6 32 v\Y 0-ikO      %# 7!327!8-|>{ Mo>v*&G}8r          & ?!326?# 7!327!&0FjZd DB'z>zXxo=߳QNx||KB9   1    %6&#"!!632 KS0d=i9	@f    
   7#$  !$&#" 77!ĉfJT:*n@:نa@Ws
_n     h 
   "3267# # 7 !3!!q)sdR(Q%êQ=Ĺ2<h>hɃĿ{l-m     0 	   6&#!!>7$ #!!!7#!!2M/5N^%dlHa.^e_QRi7G     0     # !2676%$6 3 !6&#",>H,t#q?"M 5*TUVq$;t%ډz%#qff    0    !&'!!!267!@6J6%e>3Y1j>v   8     !!!!7!b(`N5?NqV;   5    '7#!!367!/y0K~"ko]!=UR}     1 -   76&+!!323*#Ld>d&	4Ç[J'Ѷ+      "     632676%$76$32!6#";E=.*+u'46Ø";Ar?JЋɪڜF      %#&7#7!;!|4 4g=K.ryOr       !.!;>7!D=OU>t>u%[4z1&u>j_!%ٯzs'  X 	  2  "32>&"326?+!!#.76$;7!7!7>32.R]:]"< "]@#'V&	$]#D2&& k#2e'YJ{N2f9ee:?M뱍ܳ{   @   ! 7!3276 ! @e,.gP:R45'7D'' T  k    '32! 67676'&7!-MML|*|4>(ALR#(kgE"0-7[5ye\wvAF   @%}  %  %6&'326% ! 7%676#"7! H?l!h^Q_--XoY?{E$BJklZM!-H(q     T3u  )  #"32! 676'"!6&#'67&7!63 `EEHx0x(s>_3]~yM-pJMGJ2HlAPq3Pv~    5%ht   ! !376#"!7! ]C)^[6]%%pXZ"GЫP[  4%t "  ! 7!7?6+736#"!7! ^?]B7L""'-]2=p
NO'7Dk~lU     L      6#"6&32! 7&7%$io/lkOOHx,+xF4FxImS!qT4F|Iq6     t    #"32!263 ! #&! QQH߁j.tD~=FGNF0S^;9p= Gn      st   ! !&7 s7:EF91uM>Gè&$     2%oU   # 7!3?6+73676'!.ZW3K,. (1 !e&&Ȭ0!ړ4ĳio    3~ 4  ! 76#"!6#"!6#" !.'&'67$!26263 O31\Brm[D;-2ij\j[I}+dwjixdamp{`j,mzxn      	   &#32! !76#"!7! e5GX$L;2i?}vA?0 x

NP^
I,喌33m        '"32! )!"63 -H?aL?{$6mO3@`:oU%P(b8tV!     wt   ! #"!6#"!!263 w=E=Ay@@zB;?rK^?7/5*{{     ! 7!32+73276$7!Qv,.jD<E7F?p2,J% J'rppU   4%{   ! 7!3277276'7%\4'\1>?!"XD4%"Gᜟ&nb^PA        $  ! #"!7#"!67 %3263 <kd<C<11=D=`~;)Ȣ97JS6A<_<P	  z   ! !3276&?!_p6$s4864h3FLhAÎq     %P]    3266&'!%! ! N|pO4+].DG!>uON>w    `%    ! 7!3276#"#6+'3263 	]=^R<["%FTYEG@[KD8dLH#HЩCOrC;bhh  %v  8  #"32!63 ! $?67326?6+7366#"! >@?@nla4)T`Z2(?5{[cp-*l*,ur?uV}zz"No]Rm xn;  4%4   ! !27&#"!7!!]F&]\@f$&JfG"VwmNz4!F֯4<    4t '  67&7!2>3 ! 76#"!76#"!6'ml&jM@Ze-./.4,.5e\<1ǚƑI(a}@=%*%ĳ     3%d   ! 7!27' 67!27!]7#\>CK#&EGYB_.l(/y`J4$ID*z     '  &#327%! !6#"#"?6'3263 ;JTKG-<eQ	w}XIAEi{0C]3p@`"(,H4U^<hh>=
Q<zz     P  }   76#"63 !#"!! #;^O9iIe<86PULv<2>$r <d   %b    ! 7!32+73276&7!<o!;I=?;/n$Bmgu;Tގ(ܑ@ꚜ   E    &#32%! !!iMQMK<;s,.{~JNw3s#'@S/   { 	 (  326&'"!26;'&?6#"63 ! 8K$(JDa>zFoyC4~wTUJc>x{[o_".}}Q
=>ggd66	     G% &  !!!! !3276.?#"3!3+2r-0GH*].,\\7`"'):gB.FHIʦ||lFU     m    '&32! !630JBiQA~3'y4xUZ3Y	%o:o    %W    ''72676/%7676+732W{(1$6ʲı'K	7/Kd ՟}Hk\Q2,1@W    '  ! 7!3276'#73276+73276$7!8]2(a:?=0I :-12.D'26~qyKɷ˜UWZIZaJLvp_o    '  ! !3276#73276+73276&7!8],.m4=+$"+;<,1#DmyLt˩_WЄU}smVtzMn  "Yt    6#"27&! 3$';;I*|RCyy!8Ca=hfXz6;:Ɲ\8`[    4%v   ! 7!32?6#737!%^*0]NGW.0%/.o9#Ok5D?r"i     5% %  ! 7!72?6+73$!"7%]0+^N>P0..(0bQ>(XT".&(CDA/#Hؾ/ٳКl    @   '  #"327;76#"! %37# ! 3#3$$#%r%%"&Q*.QUϮ#1TRR%k/k#k/Q}ݣ     %t  $  #"72!"'!7276#"3$!263 L5.7{*N:	\/-4LH/v{O2do)M-A   <$ht !  %! %#$76#"!5! 3267!Jf	fBu5^JE0+89	!"8מqup,;[[Ʃ
r    4%bd   !3676!!'36?!! *4:`y/(Kl"._B[9<//C\#7]c*ݻ
@׸L  %}  %  >76&#"6 ! 32767%! 67$Ja!h^Q,U,YoY?xEd$zFakl^Q!-H<q    vu   &'"'67&7! !76#"<ZCZ\ngG$b_>O06@h]q5d
A v3   <       3#3#3#../  4e      6;!"6#"32S?EEL)A"'{n)*tvFc~8з        	!J 5T#+ y  g&  bW y      !!!N0K#Ty  l&  hv  +      %	m`&"qZ5  +  l&  hv +  k&  hu +  &             	0 Z9   l&  hv   &        ~&        &     y  ~'        l&     y  ~l'        &      +  &        l&      +  l'      +  l&      	&        &        	l&        l'        l&        !!0   )x    	!!3W|NC    8   'lǔ    o   7p3     m#   "'&547332673D2GG76\G@vS?Qp%'M6p   ;]   #654'&#"#>2GG67[GGD2@p&'M6pvS?Q  C#]   !7!2#!7!267654'&vD2v7[
ÚS?QvM6&'     u#]  !  3267654'&#">2"'&54 67[
67[D2D2@&&M6&'M6vS?QvS?Q   j    ''J8IOOOO   *    3#3#C    nd   !!0d   l   7!l:   l#]   73733##7l((((К    #   !###:ZZ1     	(&  O  y  W&  ~   +  	.&  U     	&           !!!55+  y  g&
  bW y     !!!}Kw+  y  l&
  hv       	MIqZpzsx5     l&  hv   k&  hu   &        i     "HZ9IAp   i  l&  hv   &        ~'        &   
  y  ~'   
     l&     y  ~l'        &        '        l&        l'        '      i  '        l&      i  l'      i  k&  hu  bx   7 (2(g    )   3#    W   !3267! !  P$Z$>>6=    (  g&%  W  (     3 !  !6&#"(>zEF>$Z$=6  (  l&%  v       3!2$76&#!! !8'++8T:aU3!!}##ateeta     l&'  v   k&'  u   &'        k     ) $'&7676$)!"3!_jbU3!!}`T8++ate	eta   k  l&+  v K&   #   &#        &   %   (  '   %     l&   &   (  l'   &     &   '     &'        l&   (     l'   (     u&   +   k  &+        ul&   ,   k  l'   ,   j  u'+      y   #"&'.7>7676;#";z?7$\MWozËj^ED5@8]b8@!H@xCC    &#  "6   (  '"6  %     &'  "\   k  &+  "N      f    !# $7 !  "32>&fgl 11,
,^dsl-r zsltmz   (  g&C  W  (      6 !  !"'! "326760,11agelt zssmtls    (  l&C  v  $     !  6$!2! 2>&#"0m11bGagG-elt %zmtls  $l&E  v $k&E  u  n    !63  !  %2676&#"glG 11l^dsl-r zsltmz    nl&H  v   &   AI     8&A   R     &   C   (  8' R  C     l&   D   (  8l' R  D   &   EI   $8' R  E   "l&   FI   $8l' R  F   S&   H   8' R  H   Sl'I      8l' R  I   jS'H      `t    3632#"&2676&#"`n=u/Υ7sP@EeX6GC?D@C@I    Y  "  #"'&547>323>7654'&#"tZF/k?9t&E@j!,G7`!>@I@+ D?.#      _&A  "   (  _'"  C   $_'"  E   _'"  H      f   ! !  !6&#"1,
,0r_d sz    (  g&a  W  (     6&#"!6 !  M{d^0,1nzs     (  l&a  v  $   3267! !  {d^0m1nzs     $l&c  v $k&c  u  n   ! !  7!32610r_d sz    nl&f  v   &   _I     8' R  _     &   aI   (  8' R  a     l&   bI   (  8l' R  b   &   cI   $8' R  c   /l&   dI   $8l' R  d   &   fI   8' R  f   l&   gI   8l' R  g   j'fI      `t   3#"&73326nn[6?x6@JJ  _   32673#"&7F\?6wnn@JJ@6ʉ          !!!5r8#+ +  \g&{  1W  +  \   )!!"8r  +  \l&{  7v      !!!W8+#     l&}  v  k&}  u  +  r   !!8"N   +  rl&  v   'y
        B&y   \     A&   {   +  i&{        Al&   |   +  il'   |     &   }
    i'   }     l&   ~
    il'   ~     W&      +  i'        Wl&      +  il'      j  W'      *   !!qZC  qA   !"&'.47>76763!!"3! ?7	\MWo h^4DI5@8mR/b8@!H@P2C   )\   3!7!uq        $2>&"  $767!'e'_70.t .99lmmXyt]#   S?&   /  S    $2>&"!! $76761'e'_p9.t .0lmmX]ty   SU&   _         "2>!!&76$ B'e'9 .b .0lmm#]ty    U&  _   U&  _  U       "2> '&76$ !e'e'Ɏ0.b .9 9lmmyt]  U  U&  _ 	'       	f&        	:&   &   U  	?&   Y     	:U&   &   U  	?U' Y     U  U&  _  |    "327676'&"'&7>32! C30$%EF2/#([SΥ#W\ :8  8: uIBC3    Y   "'&5473>73`Lnn",99unnI:a6-$I@6ʉ     F  '  "32767654'&!7!&547>32_D4/&FE10'4WR@mw\ :&  8' u F5XBI         ! !2676&#8p70*8wdp##WPdm    P  ?&   /  P     !"3 &76$)`pU8*0q7pmdPW P  U&   _   #   !2676&# )ppU8[*0#mdPW#   #U&  _  #U&  _  X     ! $76$!"380*LZ8wdp#WPdm   X  U&  _   	&        	f'        	&   ]   P  	?' Y       	U&   ]   P  	?U' Y       	&   `    	#' =       	U&   `    	#U&   =     	s&   ]   X  	?' Y       	sU&   ]   X  	?U' Y      }   !"&7>3"34ĮVN	
DInw0.7?  5     %-7[ENF9nV8cdd ܃      %    !3! 7!V8*؛eG(vp  +  g&  	W  +     7! %!3  (Goe*rv_j   +  0l&  v      %!7 !#  X(Ge__p     l&  v  ok&  u       % !#!$ !8؛eG(_?j     l&  v   I&   $     &   1     &      +  V&   p     l&      +  Vl' p       &   $    ' 1       l&   $    l' 1       &        V' p       l&        Vl' p     j  '      t@   6&+3 #K#qX:г`   :M 0  .#"#"&'73267654'&/&'&547>32L"C>SV	.D^3&ɴUP$LJKY	NV3$ơJǱ+,"&:)A++/,
:+@}     )   0#76 73#" 
o:Xr4`):   '  3267!# '&547654'&#"!$3 @$.cK:eDd$.cK:EeDH09'n݇[DPH09'n'݆\DP   U '  6 !2!654'&#" !"'&547!326d03wQc.id0wQc.inKL`E3?NoJL`E3@N Ul&  v  D 9  .#"3 '&54776!232767654'&# !"&'&tsLmG*8wW3%ս?/uiGsF*8[wW2ݠ6<D-}4 +xX39~SF+}4 +#xX39~   DU&  I_  J 5  # '&5476$!"326767>3 !267654'&#"-jˠݘc*K[8w$YGi3o%c*8w%SLs\<GWP' DFS\=H#WP'ED  JU&  I_ 	&&   I   		&   #   	&   I   		' #     	l&   I   		l' #     /&   ]   D
&      /U&   ]   D
U'      )&   ]   J
'      )U&   ]   J
U'       v 5  #"'&547>3"326767>32#7267654'&#"`J?`]= OE	5*?hJB[= OF	1.DjwMQP4^!%z0-'(T.sGWN5^!&z0-''[         !!!!Ke6H +  g&   XW  +     	!!!6eKH   +  l&  gv    
   !!!!6LeH   .l&  v   k&  u       )!!!^~!eL6     l&  v   T&        s&        x&      +  c&   }     xl&      +  cl' }       &        s'        l&        sl'        &        c' }       l&        cl' }     j  l'      t   #!3!X:!}ם    l#]    )   33##alE  gV     267!! &7aea9(./adlld       ! &?!!267fa/.(9ae#dlld         !6&"!!76$ 2aeaz9(.\/adlld# \  p?&   /  \  p   )6$ !!6&"a/[.(9zaedlld  \  pU&   _  +     3!2>&#!! !#+Vp'ep6 .-eml +  l&  v  +  W   !3 )!2>&#!Me -.6Vp'eplm         )# $76$)!"3!e -.b6p'epVlm   l&  v  "     !"3!! $76$!3p'epV6 .-beml    l&   )     l&   2       ##"&63!!"3!282ܳJ\
BMy:57<          -5-<89FE#$         2>&"&7> 0!!c}c:)~_ofi5(`DD`D!gI7\w+  g&  bW      2>&"!! &76c}c}kIb)`DD`D7+w\7IВg!  l&  hv  h  N    #"&>32 2>&"S~)`JYH@c}cKВ5pz`DD`D  h  l&   hv    +N    632#"$6&"2|.HYET`)c}ccВ`DD`D    +l&"  hv   	l&   #     l'   #    j|f    7%632#">&"2(15<c}cd
@cN
?c}gPrQp4&&4&    T  2  267654'&"3267! ! '&547> *1}	)1~S-$=W:aP~{'"D0&"DXR>L,PʛiUfhI=QhIH     -  4  654'&"26&'&547>  ! '&547!3267l)1~	)2}_Q:aP=W-$&"D0'"DH=RhI=Q^ʛiUfR>L,P   R  4  %267654'&"7 '&547 ! !654'&#")1~	*1}_QaP={EFX-$&"D0'"DH=RhI=Q=6iUfR>L-O    +  2  %654'&"26654'&#"! !  '&547676)2}	)1~S-$={FEXaP~{'"D0&"D*R>L-O=6iUf^hI=QhIH Rl&)  v +l&*  v    &  7   267654'&"% '&547>; )!2$7654'&}
)2}	*%V}aQGT:aU!}j8'+G9gD0&"D0&@2II<Rhate:@S^eta#B9QA      &l&-  v  `  }  8   267654'&"'3!! $'&'&547676$!32 '&}
)2}	*nS+Gf8jbU!}`TGbQaBgD0&"D0&AtB9Ruate:AT_etaI<RhI2   `  }l&/  v   ql&   0   `  l'   0    qQ ( :  32"'&'3!!"&'&'&47>7676"3267654'&A9c?5?-L?^4DI ?7		\MWo1O 13N (".	9Q(&+BP2C5@8I$R/b8@!I&&    v    #  !# &547 ! %"32>54&fy!;gl1,^Ttlb]ڜ<E 5zs AcmGi         %  6 ! !"'!%"3267654'&0,h1bg:_#2lt*;`:BYzs#C&6tlI,=    l&5  hv  R  %   ! '&5476$!2!267654'&#"0mԌi1bGbgƙ_"3lt+:`:B]zs#C%7tlI,=  Rl&7  v  [  (  '!63  ! '&54267654'&#"kyglG]1qH^"2tl)9l~\<E f5zs A):ms!G,=  [l&9  v  i  $  '!632#"&54267654&#"O3v>u/Αp7sG@EeNLz]!`lGC+<@C,A  +   +   )     	g&  B     	'C       	l'D     	'E     	l'F     	c'H     	cl'I     i&  Y         	!654'&#"! ! !;)9_d1,
q] H,=n d6=     ~     6 ! !654'&#"!%Ry0,h->d^:l`:CH/@zs   S    ! '&547!3267!y0mԍh->d^S`:CH/@zs   N   	'!3267! ! '&547)9_d1qS H,=n e6=      g&Q  `     &Q  a     l&Q  b   
4&Q  cj   
Pl&Q  dj   6&Q  f   6l&Q  g    \  -  "32676&7!"'&767672326?3#"'&;G^
DJK[
D[Sl_R=%BX%%ffLKV;75><75=^6IBc<PQEZS97;;7CBDE   	   F  "32676&!"32676&3&767672326?3#"'&?!"'&767672;G^
DJK[
DG^
DJK[
D}l_R=%BX%%ffLK8[Sl_RV;75><75=;75><75=9Sc<PQEZS97;;7CBDE}6IBc<PQEZS         %	!"3 &76$!UpU8+0q7LmdPW     &S   _ S   !	!2676&# !25UppU8Z+0^mdPW#   SU&U  _  G   ) $76$!"3!0+KZ8weppUWPdmL GU&W   _     !"&7>3"3!''ĮV&'	$!I.eЋx.7        3#!7#737!!!6*$#*6!KܸrH      !!!3#!7#7yMK6*%$*Hrܸ     l&[  gv       !!!7#737!3M~6L*%$*AwHrܸ     l&]  v  L     #737!3#!!! *$#*L6~!AܸrH L  l&_  v  I   3#!#!7#7373[[!1\\i`}i`     .|  $  %!!63 #"267654'&#"
"glG]3^#2tl)966~\;Eyzs A):ms H,=     +  A    32$76&#! )'++-T:aU3!!}jq#ateeta   c  y    #";	! $'&7676$!++kjbU3!!}`T+ate	eta   ) 	  !!!7!I0߁۝#     )     #7!77!7!73!!!77}"r/("}"Hx+Vr찃5ܝqq__    js   373#'#$ozA2   	[&  A     .&Q  _     &R  a
/     l&R  b
/   &R  c   `l&R  dz   &R  f
/   l&R  g
/     `  
  )'!!!3"gr7:`J\      g`    #!7!!!!!!!6Y+S(z}++(+20,V`    W+{ , 3 >  %#"&'# 7!6&#"6$32>32!#3267%3267%2676&#"7}a8\z3Fq5~5z¼!&ws^E_`g%BpLQeMOMO>
f~~CD01kdkdŨŸUO..f}unLJDMm)     ` 	    %26+3#26+2)#73T0q&q~'~w'>]Q?( 3&&:j   L{ F    ?a    326&#%'%R#?JpuI@&s]k{kB"%WK}LW$&  a    '%#73326&+3JE01l\*</#?#'q*aFRWJB     O  5`   !!!!!!)+(+30,`  8!{ 0  #"'&'7327676'&+7327676'&#"7>3 g+,WWXV.7;_>?	3,u|,vEJ:9tMYcN1`\!?@aGH #$*,"%'<:('$p  L`    !!!!Cf9f`L$   `   ! #"&'3267\ht4KA2/`4ey` !"!    ?  `      `   !7!!'7j=Q79LoQ`iC  :  E`   ?  \`   J5{ R  K{    W     6&       ..Bqqx(~~|DDF   ( @   %!>76& !&67  R@M%;y*;A@JPT@TV0VX  [ 	  +  >76&#"3267>3 '# >7'7!*	)B$.	+Dn[{8N;zy^~8P<~tK/w}HO0u|CDjKmFEE!lMp  W^{ & / =  7!6&#"676326763 !"&'#  %32767276'&#"WEq}}5~cd7brs"lކAckk0/`hLM%3wOP>.-wuOO>--+f~~!"D0)(WT**؜RVW():f>?;:nUVBVUUVVU     /{   6&#"! !  y[uw6"!	6/8    c/   3267! !  	[uwu6}6/8     D` 
   !2+!32676&#"#zK9[McFM`MFGL   `  #  03#"#"!6767&'&76763!!O4O[-."!%K313F;;Bm++|}v HI  G>a/0!GHoKJ      ` 
 "  ";7!!"'&76767&'&'!3[-."![O4+Pf_`GGy<)) ik[%'K  IH JKoHG!0/a>G  E  `    L`   !3267! &7f@^_fg//``vddv`     A {z   %!323267>76&#!!#TFp[.z'4	E`ER:&hF.pfPl  P +|   !  7373!323267>76&#!!#P..--
TFp[.z'4	E`ER:&|hH.pfRn    { %  #!2676'#!!27>'!!, I1A5%&Fwx'5Fۺ<; +5FF!&UgtY;(88]peehFNN3h  4h    m` Y     j` Z    ` ]    '`   %2676&+7%!!!"&'4~	}0 21W4O)% |q8q,)*+ SLi--:;    ?  j`   3!!?Q9`    `N    ?  H`   !!!!/`}   D`      `   !!6767!!7&'&7fQ6ufuHQfQ/|//\/`au2
X
2uavRRv      `     
  !#!#!}Y!?4D3M  ]    3'!!!!!!7!#fBd}&d&ȂQV    %| 
  '  27676'&+27676'&+#!!2:""	:#GI+*
 J+J !hgmmMNP,+76,66Oy<;D54t=V  % 	   327676&#%!2#!dW[[ >7$0.MX =AB}|6A9]_JJ9A6     %V   !!!!!!d}&cࣜ   %d   !7!7!7!7!7dc&}d     @ %  #"'&767632&'&#"3276?#7!ceehss''^SSF!HIJN]\>=&"! z'uttt(HHHH	     %   3!3#!#>f>EE?b  %   3#   P   3+732767np1 %L..MN&%I     %1 
  3!	!#;@1tHI  %   3!!c_     %   !!###5/4wϚwAd=  % 	  !3!#oo==  % 	  #!3o;o=D=  @    "32676&'2#"&7676Zo^op^Rjj'(('Sstssts     ,  >   "2676'7#"'&76767&'&76767&327676'&i=>10x/&X_=>lo00{|ddDFwf(+	vQF&:/$jTC8.-!!>=!!B=?!a27kG/064Q|@??@|Q4604,=8'W !'!C<    %    !2+#327>'&#RSܴ8w.G,-! GGGp   %w 
    27676'&+#!2!'.#L&&Lf*=sLLn`0 !VJ>;m9:וD78xSj
$#I>.     8   !!#!Wcȃ_  g   3327673 '&7bWV0.bb"uufST"h,--,hVWWV     w   333!!w,,/``|    LJ  4  "3276?#7#"'&546;765654'&#"7>32T+,-F./N7>>He:;Ņ('NFAB="GOLM."%&CL]8..Ow%0/b.  cR  +  2676'&#"367632+3267#"&GP		3@44N9?>Qn88a`&%YI;!LI**&)(=Lf]998[n430    m    73#7#"&632 27676&";>=J@ЂI3201801\[8"3//ZZ^//ZZ  m[ 5 = J  #"'&'#"'&?!6'&#"76763267632+3267%32767%2676'&#"N>^@?#:MQP!*)YGNOW"UTSOq!MLMWz<;a`&%YI;d<<A/0lGP		3@44,+,YY9F$#'<8<77^n430K9F!!=d**&)(=  (j  &  "327654&#3>32#"'&W778U78<I3rCwFE-9IHRI23HGr4GFn9<j[g74CCtHED8F%$  b  $  27654'&#"3#7#"&54767>32W767U87<&I498Dw.9SHfGHr4GFn9<P[7tHED8GH4    do % 2  !32767#"'&5476767632'67654'&#"a*)RGPOW#SQRTZZ6A[ZnTT3B/. =&DC|HCD8C#"CDs2>,  ?    mb  !  7!6'&#"767632#"'&73267m*)YGNOW"USSPWW"!|{QP<<B`9F$#'VWXXYYR9FB=   O 2  &'&7>32&'&#";#"32767#"'&7676A7686#34%<'(
 JNJR+/%$I18>1<<<:KK10$#7TP		0~" 01a?((     K 2  #"'&'7327>'&+7327676'&#"767632A7686#34%<'(
 JNJR+/%$I18>1<<<:KK10#$7TP		0~" 01a?((     M % 4  #"'&547676763273#"&'732767"327654'&N6pBxEF.7HHRK23#w$Az;!6568p<<5Sn9R8764EDw?@?8D$#8]ߨ+*]d9BBc;         3##73#    ( 
  3%!	!#g0
f*<(    * 3  67632#7654'&#"#67654'&#"#367632+4CBH^76TG"A--DH	#>^D5<<@Jh:..QGF/0WG* bTs\6B  Be &  +73276767654'.#"#3>32[Ri@=
(G33D?~Fz1}KR10Us\74B+C&   d}  #  "327654'&'2#"&54767676W99>:X89(87@WXl6?XWGFm<>GGn:{G7B"!{FDC8A"!  -    67632#"'&'07327>'&#":878XYD~7541##,-5^@?&*)_2114	WWWW	1111        4&#"#46320NJK'(ηgfZ`00ZWW     327653#"'&5'(IK('ηfgZ0000ZWW   j  &  #3>32#"'&"327654&H3rCwFE-9IHRI23W778U78<b\74CCtHED8F%$HGr4GFn9<      3#;#"'&54767#737,& :-u f65:op(	&&H
     Vw   3327673#7#"&5476`RG)F32D:F`j #00V4\66ZS    p   !7323326767676'&#!7!#R,F9WVVL./`+,f4WX	?$$.23=m99    `" +  #"'&7332673327673#7#"&!8ABFz11SG2@ZCG4A-.D6;<AIb:BC~C^Y4h/0X4\5>       33#[
aJ   P  6  676'&#"327676'&'766767632#"'21	9E""/IP&'A#ojfUJI01};(
+5AZ1M]]F@1#/! /0YY/0&'P0PBH1e4.9/HqdJIk   O   3#7&'&+7327e..h*f+X&S1	*  !(  -  &#"#"'&76767&76!2327676&'&Fk
L]yxWWx'+T#LSk% 3!GH24J=`'74?KXWWXuZ,Y'1XW2122TTT   j  !  2#7$67637676'&_KW 6//6xcj%$M*5#*^	HS$$WH/0F9v6K''   t   73;#"&/#'&'&+732٬8"Fisha9FS669H-Ti.'(m    g
W  d   0  u  d   Vws  d     s  d  Pw  d   Os  d   j    $ '#>2'4#"32676DG@iѣdxK0
xI_yH_k 	T6\*1={_Y!{^Y"  jy  d  ts  d    Fcy  (  >32 #"&'! 32.#"2676&#"3]u11u7 5]7S[ VoYsp\b\\c !65  %    ?  `   %!737#737#7!#3#r..'&1..1&' V{  $ /  !&'&!#73!>33#"&!3276?rN,,r*Vf ]ueD*;u4-stL4wT0HI0T+wb]o]P4UT8  F   !!+7327675!fg2(ͱ.>f// wv..t    0b    #367632#"'& "27>%z9=>IAB8feI34/0"/1"\s[8\\\\//////   m   &'&#"3267#"'&7632 (+-1_=?"V_5d. 9797Z[<}|84511b	WW6WW	   sM  .  ;276#"&'&#"63+"#"''67&'&7632!"]R49),,1_|Sj ,~	A*[<}|845 *bXE-c@0&)W6XV	   Wu  0  &'&#"327676567#"&767632''7'37w"  J0/@HI01;xwmn`	`:<%%DS^00ZLHHSWWKJzBH6qA@H6   3 1  #"'&'7327676'&+7327676&#"767632J `^:896*831I-/'#QJNJ"(><%n);;97)*((?a10 "~(PT7#$    v   #"3###7376763}0	^^pp	IK&,,f11  M   33#+732767#73Y^ppMQp'@v?CB  u  )  #"'&7>;#"&'73267"3276?o9zJCC́nz|Bx;7569ox?F`IF/0"64Z[~̗PPV\\TV-,.-T     w   3327673##"'&wK-	*F31<B>?>Ez32~>R>01V4P7BC     HD    3#33##7#73I 500Qmm   b   3?'&7H<W~:8LDC~     0   !73#7!#1F~F l   0   !737#737#7!#3#1~~~ qmmq     "   %  3#33"+01"+5&7637&#"3276" jj#IDQG	! W(B	:AQvX7Cw*!   0   3;#"'&7Ai78KCCr     0   33+732767#PQo'@
(sBC=  0g   3!![4 0     G  0  67632+7327676&#"#6&#"#367632;7A@Fz42FSQi@G 2@X<?4A,,<z3;;AId:BC}CCAmB<^YGh</0Ws\6>    w0 ,  #"'&7332673327673##"&<7AAFz23J?1@X<?4A,,<@3;<AId:BC~C^Y4h/0X4K5>    0 '  #?676'&'&#"+7326?3>320J,	G12"NQi?<`=|Fz32>R01U{u@C4K{\74BC    G "  6'&'&#"#367632;#"'&7t
	A71<z?<=Gy42H&Ah7<01*[s\9BCK4CGn    0a 	  !3!#{Gz{Glm  mu     2#"&6"!36'&+32762UV<xw<K1%0KI0WWWW60$==$0*00     l  & /  !737&'&7676?#7!#'67676'&AVwZ~?VwXC*0JC'01`AWWAghAWWAaZ0ZZ0M0ZZ0     T <  &'&#"#"';#"'&?327676'&/&'&7>32D@@<A""*;(33]\#$Ah78=DDIB%%C&43?DB-,`d327CC}o).-\d`      %   #"+732676763%}/QQp'@:IK&asBC4Kf11     3#;+732767&'&7#737%"4:tMQo'@k(/4pp",v?CC,1w
  aA  *  ##7#&'&'&75#733!3#3276A/=|EZ$35	55
G1m[74Cm?2M6m	!
0   ob &  27676'&'7!##"'&76767#7!8-" 34(S2%}~Z\4<BYq+-A<O1111O<A/(n!K<YXXXX[>G%n  aN   3327673 &7I;< IIa_BBxBB    b)   #'&73?27676'&'7,qrW~:8HHJ?:-!J=XXXDC~q_71P<@/(f   0S   ##3S\Os   0! 	  !!!7!gJsX     H   !!;#"'&7!7!gJt	Ri76kFC@uX  8M:    !3676#'7!7!276#"gKe	ciQ}\R<mONX-   ; !  %!7!#"&'7327676'&+ge4K*'wxHC ?@@Aa89.0gv؏?:P|A@79    m     !327676'&#"2#"&767DB6/.DA7,ח?@Rnm~RmmG?DD<8<DD6>ivw^wwwv    "f   !73!Cǲ  df   3!!d!f    Cf   !#'!dvf   "f   !!#dv!ǲf    
f 	  373#'򶲛x     <f 	  #'#373Jx{'S  $   #{'  D   +  k'u %   ?j't E   +M& %     ?Mj& E  .   +& %      ?j& E  &   Jok'u    Lof&    v     +  Jk'ou '   J't G   +MJ'   '   JM'   G   +J'x   '   J'E   G   +rJ& '   z   Eo& G   z    +J'=   '   J'
   G   +  \u'    (   J0'  H   +  \u'    (   J3'  H   [a& (0  M Ja{& H   M +;\& (     J;{& H  '   +o\k'u& (   z    JoD& H  '  z    +  \l'v )   f  R't I   J91& *   )Fu& J      +  l'v +   ?  ;'t K   +M'k   +   ?M;'   K   +  k& +   j: ?  ;k& K   jF:o& +   zV  n;& K   zz +& +     ?;& K  h#<& ,  o  #<'o   L   +  u&  ,     ?  :'m    +  k'qu .   ?  'du N   +M& .  E   ?M& N     +& .  A   ?& N      +M'   /   M'_   O   +M'u<   MO' q;=   +& /     t&  O     +'m& /  '?& O   +  k'u 0   ?  g& P   v  +  l'v 0   ?  'w P   +M'   0   ?M{'/   P   +  k'u 1   ?  ;' Q   +M& 1  k   ?M;{'   Q   +& 1  4   ?;{& Q      +' & 1   ?;{'& Q   Ju'   2   J5U'  R   J}' $ 2   J53'  R   Ju'   2   J50'  R   Ju'   2   J53'  R   +  k'"u 3  Vjg& S   v   +  l'v 3  Vj'K S   +  {l'4v 5   ?  \' U   +M{'   5   M\{'_   U   +M{O' q';`   M\& qUa     +{& 5  ,  s\{& U      Rl'Cv 6   {' V   MR& 6     M{{'b   V   l'u'Tv 6   u& V  &!W v%    m'P   6   '  V   MRl'9vh   M{' i   b  l'v 7   X  't W   bM'   7   XM'   W   b& 7      8&O  W     N'v& 7  ' & W   MT& 8     {Ms`& X     ;T& 8  U   {<s`& X       aT& 8   M {as`& X  S M Tu'\   8   {sU'  X   TY'h   8   {s'  X     m'}u 9     m9& Y      M& 9     Mm`& Y       	%r& :  h|   jm' C  Z     	%r& :  h|   jm' v  Z     	%k' j: :     j1' j   Z     	%k'u :     j' Z   M	%& :  W   Mj`& Z      k'<u ;    ^' [    k& ;   jM:  ^2& [   j     yl'v <    F' \    k'Ju =    g& ]    M& =    M`& ]    & =     `& ]      ?;& K     X  k& W   j:   j& Z      F& \      #& D     f  R'tA     $   )'%7#37>3!#&7_Q1$-L$#5BV NDn    #  $   )#737#737>3!#&3#$-LG8D   Nv @  #"&'32>54./.54>3654.#  !>32sP;W\DlM?Toe='!-H0$;:'Pug%9z۔>#DoeLy'*P6ETRG</#9PT]O&2W86$2M'
WzE1  $I  {M& $  )   #M{& D    {  4& $  u #& D  9 {  u'4   $   #\'  D  {  u'4   $   #'  D  {  ';   $   #/M'  D  {  '4   $   #'  D  {Mk&      #Mf&     {  u'B   $   #+'  D  {  u' B   $   #'   D  {  'P   $   #'  D  {  ';   $   #
3'  D  {M|&      #M-&      +M\'   (   JM{'   H   +  \4& (  u J& H    +  \m'u (   J9& H      +  pu'    (   J'  H   +  .u'P   (   J'  H   +  e'    (   JaM'  H   +  \'    (   J/'  H   +M\k'      JMf'      +  V4& ,  Fu ?  (&     M'X   ,   M'_   L   JM'V   2   JM5{'   R   J4& 2  u J5& R  a  Ju't   2   J'  R   Ju'   2   J'  R   J'   2   JkM'  R   J'   2   J>'  R   JMk'V      JM5f'      PAk'ub   Q*f&c   v    PAk'ub   Q*c&c   C PA4&b  u Q*&c    PAm'ub   Q*9&c  6    PMA'V  b   QM*'  c   MT'   8   {Ms`'   X   T4& 8  u {s& X    k'muq   u]d&r   v  k'muq   u]g&r   C  4&q  u u]&r  ^  m'muq   u]9&r      M'  q   uM]'  r     yr& <  |  Fm' C   \   My& <      F`& \  [     y4& <  u  F& \  4    ym'Iu <    F9& \  }     +   	  !!!!!M8UNN         !!7!3#!!!#73Cff((rrr++ NG&F  	    NG&F  	}    Nf&F  	    Nf&F  	    Nf&F  	    Nf&F  	    Nm&F  	    Nm&F  	~   {  G&'  	  {  G&'  	   <  f''#  	    f''(  	̶  ;  f''J  	    
f''  	ͧ   m&'~ 	d   )  5m''   	c     7(G&J  	]    7(G&J  	>    7`f&J  	<    7Sf&J  	#    7f&J  	n    7f&J  	7    ?  :G'+   	       @G'+   	     <  f'+U  	    f'+N  	̶  ;  f'+  	    Pf'+  	ͧ  fVPG&L  	    fVPG&L  	    fVPf&L  	    fVPf&L  	    fVPf&L  	    fVxf&L  	    fVPm&L  	    fVPm&L  	    ?  eG'-   	       qG'-   	     <  	f'-O  	    	f'-N  	̶  ;  	Ef'-  	    	{f'-  	ͧ    Cm'-  	d       Um'-  	c     WG&N  	Q   WG&N  	[    f&N  	    hf&N  	8   W?f&N  	    W/f&N  	͗    Wm&N  	X   Wm&N  	R   ?  G'/   	       G'/   	     <  f'/=  	    f'/N  	̶  ;  f'/  	    f'/  	ͧ    m'/  	d       m'/  	c     J5G&T  	    J5G&T  	    J5f&T  	    J5f&T  	    JWf&T  	    Jqf&T  	    ?G&5U 	   -G'5   	     <	{f'5  	  	f'5  	̶  ;"f'5  	  ^f'5  	ͧ  o(G&Z  	    o(G&Z  	    o(f&Z  	    o(f&Z  	    ojf&Z  	    ovf&Z  	    o(m&Z  	    o(m&Z  	      G':  	       
'f':  	̶    
Ef':  	ͧ    	m':  	c     DG'	t  ^   DG'	o  ^   Df'	j  ^   Df'	`  ^   Df'	  ^   Df'	  ^   Dm'	  ^   Dm'	}  ^     G'	  >x    \G'	  >      <  	f&	 >+   	f&	̶ >6 ;  Lf&	 >     f&	ͧ >
     m'	d  >l       Lm'	c  >     Nf&F  	    NfA   7(f&J  	F    7fB   fVPf&L  	   fVPfC   Wf&N  	l   W|fD   J5f&T  	    J5fa   o(f&Z  	    o(fb   Df'	y  ^   Dfc   NVG&	  p    NVG&	  p    NVf&	  p    NVf&	  p    NVf&	  p    NVf&	  p    NVm&	  p    NVm&		  p   {VG&	
  	  {VG&	  	   <Vf&	  	;   Vf&	  	@   ;Vf&	  	b   V
f&	  	  Vm&	  	   )V5m&	  	   fVPG&	      fVPG&	      fVPf&	       fVPf&	!      fVPf&	"      fVxf&	#      fVPm&	$      fVPm&	%      ?VeG&	&  	6   VqG&	'  	B   <V	f&	(  	   V	f&	)  	   ;V	Ef&	*  	   V	{f&	+  	L   VCm&	,  	   VUm&	-  	&   DVG'o  	V   DVG'o  	W   DVf'o  	X   DVf'o  	Y   DVf'o  	Z   DVf'o  	[   DVm'o  	\   DVm'o  	]   VG'	  	^   V\G'	D  	_   <V	f'	  	`   V	f'	  	a   ;VLf'	4  	b   Vf'	p  	c   Vm'	  	d   VLm'	4  	e   NF&F      N&F   q    NVf&	f  p    NVy&F  p    NVf&A  p    N9&F  	    NV9&	  p   {  k&'  u{  O&'   q; M  Yf''   	ޠ   f  {V&'  	  G	  V   G   !727#8Gez  9  7;Rm'bu j   fVPf&	j      fVP{&L      fVPf&C      fVP9&L  	    fVP9&	        Tf'+  	ޠ  .  f      yf'-  	ޠ  :  f!   +V&-  	X   }$f'	  	,     f'	
  	0 dRm'bu	   WNF&N  V   W=&N   qd   W7&N  	X   f!&   Wd9&N  	d   Wm&N  	P   +  ek&/  |u +  UO&/   q|;   f'/  	ޠ  4  +f"   0f'	  	8     f'	  	H dRm'bu	   o(F&Z      o(&Z   q    o(&Z  	    oHE   VG&V  	    VG&V  	    o(9&Z  	    o(m&Z  	      yk&:  u   yO&:   q ;   f':^  	ޠ  (  f$     G'7   	    7;& j  	 Fl7;  f C   DVf'o  	r   DV`'o  ^   DVf'o  c   D9'	w  ^   DV9'o  	   ;f'5  	ޠ  9f#     ^f&	ޠ >    f%  V~'	f  >  Pf v   #G   #3$7#8Gze   3  @
r q 991 0!!mt9  3	    1  @ q 991 0!!d3K   1  @ q 991 0!!d$3   1  @ q 991 0!!d$3    @ q 991 0!!
 3  1& _   _J  & B   B    X  9@   : S  91 0KSX9Y"!3;:'ժX`    X  5@  : S  1 0KSX9Y"!#wT8ԩ`     5@  : T  1 0KSX9Y"!#T8ժ`     Xk   #k;Ԛ;`     X7   f@4   
	: 	S
  H
 991 <20KSX99Y"!3!3X7'ը:'ժX``  X   b@2   
	:	 S  H
 91 <20KSX99Y"!#!#T7ըT8ԩ`` 
   b@2   
	:	 T  H
 91 <20KSX99Y"!#!#T7ըT8ժ``  XH    ###H7 ՟78!ՠ8`^   N;  [@0     : S
	
 9991 220KSXY"!!!!!7!JJ!--#/   ;  @F
 	      :X
  S
	 .9999991 <2<20KSXY"!!!!!!!7!!7!JJ!-X#/JI/!X-!<}    '`  2 1 0467>32#"&'.'535II245633JI326J235624IJ336633  'AF   'AoH   ^     !!hK}  ^      !!!!%hKhK}}    ^      y@=
	   : T

	 	    999991 /<<220KSXY"!!!!!!%hKhKBhL}}}  oAe   !!/1e  q5   # / 3 ? K b@7e Fe:a@e2e$ a0*`42dL1C=3'!	-!	'I7'C=L991 2<<22202 #"&54 "32654&!"32654&'2 #"&54 #3!2 #"&54 "32654&	ۜםVn=>Wm>$Vo=>Wn? ֝	k֝Vn==Wn?魍WWUWWWUWꭍꪍXYTX   	 q   # / ; G K W c  2 #"&54 "32654&%2 #"&54 "32654&!"32654&'2 #"&54 #3!2 #"&54 "32654&}םVn=>Wm>@םVn=>Wm>$Vo=>Wn? ֝	k֝Vn==Wn?魍WWUW魍WWUWWWUWꭍꪍXYTX   `   !`u   `'
w  
   `'
  &
  
w   J`   #!Ţ`uJ`A'
 |  
   J`'
   '
 |  
      <   #%##  } '  @  91 9071+Z%'q    N '  @  91 990?-7N1X +#      3       		'	7	!!!!!!!!1NNNNhhhhNPPNt}}e}}  	' n           o   !  7>76&!>32!3#J6J>
@er=]%lpKP8	,EhE->U1FE"B:*(ǿbY9>K-d  M B  0   _    $'5 $CJ?ơSPPSEFE    &j   &$ 56$ :F;&FEFESPPS  _   #3	#ۊ@ v#"   )'   {'  {      m   !!w%    d1 0#3    !!!!!}-bl-}T"^    !7!!7!!7}+m+}^   H& "  "     & "       d' n   "      =_   327!#"'*'fm_{C    u;S   2###h:$8:ՊNeP_  fS    3+"&'.467>3،I326535IS1633235     fS    #;2+r،I535623I532336   )k   {    s`  	  #!8ճ9IIt1} j&
+  
*        #  %#'-73%%#'-73%===
====
qqpߋqqp  Bb'    ' P     dR   #"'&'&'&#"5>32326搬
錄ܔ吙錂RPE:=MSPE:=K   2v
+     #    #'%!7!'73%!!;;q '1;;q1'Ю1؎؎1َ׎     )     !!!@^@@^@A^AOJpJ J  `t'
  &
  '
w  
e    } +5      !!!!!:,::,:h;,;:,:T,,*,,     %B       !!!!!:,:>;,;}:,::,::,:T,>,,,p,   ?      !!!!ehKhK}1}     >0      !!!!!!!!iJiJiJiKt   X  Z       %!!!!#!7!3!;,;}:,::,::,:Szz.rzzr.,,,p,\rs   ?  w     !!!!!!hKhKzhK}}}}}  ?  w      !!!!!!!!h6h5h6h6a  <0    6&"3276%#"'&767632B'.,LK.,)wyKM))wyMM@@@AAAAoppqpqqp        3#3# zQ        	333##7!7Sey!   $ $  !!>32#"'&'7327676'&#"Lq8ONtuNIIG!C@?<S;:**V3<<HߞMLKL('&AB&&    K9  -  "327676'&&'&#">32#"&767632>&&>?&&35111jEF.c8po()?::9$%IJ$%%$JI%$56i{PQuv		   iY   !#!Fy6   )4  , :  "32676&'&'&767632#"'&7>732>'&#"C**CAS9O!!b`MK37V[#&gfOOs
97F79#$!!>=!!B=>BF00Gi8777jL+/45P|@??@|Pj26d    0  )  732767#"'&7>32#"'&27>&#"04c2iEF/237FHߢ((A:9>>&&0>?L56iJK|vv	$%JJ%$    k   !!#!5!hHIkۅ%%     F   !!'F    A    !!!!''ń{    cA   #&'&67673zF0FF{jAA0}|}~     67>'&'3kAB07E/FG|~}|}    /K   #?676'.#"#367632KJ,
*H23<y>?@F|44>R01Us\7BC <0T
V  d     )C {  d   \  sT t  d   RjT u  d     C
X  d   $C
Y  d   K9T
Z  d   i  YC
[  d   )4T
\  d   0T
]  d     
^  d   %
_  d    )
`  d   ciAf
a  d  if
b  d   LJ  d   do  d   d}  d    js  d   mb  d     5gr  d   (  g  d     g  d   *    d   /  K
c  d  j  d     d     %  d    m  Z %  !!!!!!#   !2.#"3267N+)+32*QX]44^G-FV"!V[`**99*)73Ʈ36  J9 * 0 9  &'#7&47676?373&'2767#"'#&+;4>ojgz$&22
	2M:45N\ii=jB8K	",47=SELQj

+f%$N12>*E
		&
   J /  6767#  476$32.#" !>32.#",/i=jjhzWmq:YgZ"- ;m(4 K+t	$N12J=78IDbǭ`e        !!!!3#!#79s6g:$w%v33%ݹ     #  !!37#737#7376!2.#"!!!$34$--5\T7;G}FBa-d-¸
Wz|%(=;zW  =B /  #6'&#"!!676323632!?6'&#"!Y6$Rhkh V^]htNLz41,rNeJ8k75``/085csVH)v75TR       #  7#737#73!3!3#3#!#!3'l,a!&~,~&~U<UnU}&},}&}UR=UU,b!xJJJJ  +  & ^  32654&##;7332654&/.54%+!!23!!632.#"!"'&'!"&5467RՈgaZ\=HFNntqr@dA,RYd#x5>h=nssq5i]js@^Aٮsx,-Ӣ\_zQV&
.(D)
64$((91iOUMkc>
%2473$.	@!  -	<  F  2676&+!.+!! 32676&/.76$32.#"!"'&y{XyK!fn!a^mn"L')Ld'#[ektiv	@j> "cz5j_fm
B_=!#or'?ZgfXspR֔-v/:90/ 0035+.	#    /  	%  " & ) - 1  '#73'!!7!!7!3#3#!#!#7!73'!!7{X
q
bs
bnbXz3D&D%3G~3@3vvVVBvvBvvvv       ! #6&+!% 3;!HMM+AIMM*?=Y*5=Y   J&   /    + ~@B ($+(ss"d`,$%#,%# +"%	#%,9999999991 <222990%#" '#73>7#736 32.#"!!!!3267|f%XVbil7RfpDV
Xz\hF12 F/78QL|u"H+w}WQ         !!!!!!#7zJjGa|btrn`u!8LȘ  q  	   '%!!!77!'%7# P8`8,""f~C!-yt#W{rX{sYYys     L7	  . i    '6767632#"'&'32767654'&#"67'6767632#"'&'&/#"'&54767632	327676767654&'&&#"32c.ENIZVkJ:H CSXZk>.":	+S@G
=DK$ '%NFB͕HB73Z2vGOPeK>,//16bB7XOJ."#F$/0`PTH34*&[l$#7+Уc]97#96O3<zav24?Le2ELy%!+'+>AHJB @@=kb3JMq~Es/4	
%UA4G_KBjoD7=AiK}f^<={@     G 1 @  '32327&54767632#72767654'#"'&#"6764'&#"ڤw=b,
"akO-,s,,zV>+|>1,2M$)$Dl26X``7a0<㫂&'lm@.j?3thP#l$:990C#i    +     , 3  !3276%!6=7#73!23#3#+!#7%!&'&+{{B
 TTADxlYKJP(JQߩ[Qw0Xy\@Z'/ZZHrkbH.,HjOUMyH+  N[ux & 1  #7!#7&'&54776?3&'&'6767}(hijwbFcZn]0]Pho%+VIjR354^TKF#dtiϥ"7?&6#PaQYU"   x  z     7!!!#3#!!!#737!!/3')&A{Y&&Q55.R&P[PL|_UÕeeÕÊ       6  0!!32$7# '&7#7367670!7!676&#"6$3 3!o&
v~|?׎{{0&&1@f8%vh={+% *ZNTML56yx8)5'PL87<%% #L        )  %#&'&%6?3&'&'6767jm;;65͗KGE$%95bT<BT>FIHcc	>610%R7r~or7N'(OQ"z!    %  	    !!!!!!`8`8~d+     |   '  7!!!!!.+36767!7!&'&#~n|f| 7ZL13&fn!a^3yB!(~}(y2?	M:_-@@XspR
B!*&@    _   '%!772$7!#!'%7D a>""UV1+!}j!ytX{rY{sOߩeta!Yys     x    32>&#! !#!!!7#737#3B%p#kp[N-S,,-6ON,֎     	3!  #   !7!'3:\ =z   !#'73!BF\ל͌ 0z   7!'3#70\ל͌    R;1     3#%3#%3#/111 ;K1      3#%3#%3#%3#`11111    =z   !#'73!'3#\ל\ל͌     
 + / L  "326?%!7#"&54$;7>54&#">32!!.#"3267#"&5467>32]V/*HbXa	]LUPs3e`04Ua-wZS:re5RGQLVސB43&(XUvA
Mq
')!7>P4J9"QT#EiPYV    * K O  !"'7 76&/.7!2'& "326?%!7#"&54$;7>54&#">32!!8cʠ07$M.70#G.|]]V/*HbXa	]LUPs3e`0
9LD
3G<}S43&(XUvA
Mq
')!7>P4  f\  !  .#"3267#   !2\jႹsmj}Lu}@C?k??D78ef84կ   	' &   r        #  $/ %/ ܸ  ܸ $  и  / A   &  6  F  V  f  v              ]A     ]   	и  и  и     
/   + 015!&'67!!&'&76TT.--.0+-.҃tXWe>W!xw    4    , >  .#"3267#"&5467>32!!"32654&'2#"&5467>4Ua-wZS:re5RGQLVސB0vZ|<9Z}=#FCPۆGBO9"QT#EiPYV5IFID˫cL]]ɬaM\^   4	[    :  .#"3267#"&5467>32!!!3267!!7#"&5464Ua-wZS:re5RGQLVސB0e@Y		'%GmU?[~9"QT#EiPYV5Z4+:)'uoCKv< K8R          & r   )    I n  !7632#"'&'&'&#"32767#"'&'&'&!#"'&54763232767676"#"'&54767632 D2ᐤL#.$3!.)%!'!!/&7/F+,WP"-tI1(5+,!,AD!#j[R.D)*6*!8U+De %%0!,	!%LDt˃*>%+'&%G8@N/ϭ@)49$'H::9U*9<==#;#%3buL/,     y ^  	&'&#"'6767632654'&5476767327#"'6%6"#"'?3276767654'&'&#"9<9%$,,=M,,HG,pc:@Bw9OIF5O9.Q%(H B'(Iq(9.w^$)*&0B%/^y5\Gnu85#.,M)(21tDOTʍ>ZZl5{D&%7{IF9Xau!X3!!5`_IH|je#O@Fe    M     3!3%!!!!!!!p8\\]x}+   ?  ; K         63 !676#"!'7!%5Zegkԯ%=f&P#p/V7D6K:h|    JD 7  #"'&54763232765"#"'&54767632DH)EXّXF+I/4$%BH>>@e)&0B-%2Z>MYҞiOP>>9&+T2"86/Y&]
/A"= + -]yM)(  jF  2  632327#"&#"7632327654'&547%#"'&#"^v{x}}ȋo֏z,\l/v~jX>6FF	PP5ʷ05^:11::b:~"FLxUBnb_Xċykb[OP     LK J  '&7676%2#"'&'&'&#"23276767657#"'&'.#"'676767676	%QPN# 6F &8S$-+s2'nK"??|m-]+%!;	XL)+oyV?=[4$ PA(Zkxv1/zgcD9;TXy$)D02.(^B),\A    6  %  273#"'#67&5477632654#7<FLx:AkQ
sjCH;q]Uf59dNT1QGdXEU     { ! /  !37!!!>32#"&'!#!#73 276'&#"Fff(97\tdfet6(NL>+-sqPN-rrra^^a+ETT@TTUTV         	3%!3!#eWx
4x]xK+C     	?  # 1 5  !>!"!!7267   &5476%"327654&!!MX',+W,R'+W,:*n!n!G:S
:w*
~' Ȏ>; VȎ>;ףa09ģb09,og4PT3'(T2      & 8   "32>54&'&#3264&'2'#  $&546yЮWWWVy{ήWWWX##NOM+ՙ0llll3WzyWVVUyzWX5h2wyxyD7nnn  n;C 0 <  67632"'67327654'&#"#"'&57&547327654It2݂DIzdM&dmU>"9yEY:?.m((6UE?LPק=+<$~\oA7n=BŨhb)<(,QB           3%! !#!327&+67654'&41\=66=E1mm1]x~#g)ZZ)    ff    '  %!#   !  % 7& 676'&-fgk{@{{{}L%lkh4334a     @<$ 
 [  27654'&'&'#"'&546323276765"#"'&5476!7232767#"'&̏hX&MM])zL5F,D!	3;1X00[Z.9'379GeϟHQrl}\IM=!&'E)TAhOM,2:pZϘM#B.97>#3*M*3D!!9!K.@_u20#"?Gc_3䂈/#>!8Z%,  Sl J Y  &54'&#"#"'&5327654'&#"3"'&547632763227767654'&#"HL^eZZfgr82ED2881VN2884@Bfggf\n/$~AB}:1$ $3CAA9Ya+.vuuvjVMMWWMMV[^SMpuvuuk# XW1W{|^1$h{r^Co(BP>;[Yj	)       Y   % - 1  3&'&7!.+!! !27&#676'&%3cT:[E5q>4>x\ u1E:PO"m=s@1F~h|hb)tL<M!0     l      Ǹ !/ "/ ! и / ܸ  и " ܸ A     ]A   )  9  I  Y  i  y              ]   9  / / /   +    +  и /   9  и /   90132654&#+!!237!	!'!bllbIv5(mkU$yz$_mddl=`o    mT   " %  3&#%!.''7#!27%7676'7'\	X8fU<z,U8}dx.ٖeGS|]/(tfK5F
9v,2$    ( ' 4  .#"#"&'532654&/.54632733###UW'AG/E8pi4sG[d/EK7?8pc|3iиY"*/( 	VAO[`*,2,*
	M=H\T(l    Q  	`     !!!!!!!!!!!!! $C%Q$&k,$C+߰/ͯ`z    'R   v@> 	 		:	 
 S 	;:	:;:91 <<2<<9990KSXY"73#######5ww㪉Lq  KBM   -   %7!!'!
g>|C˱k₰|`E	   \      	3%!!!5!.d#=&]x'x    )/7 #   7676&#!7!7!7!!2!#"/O/^*+T'*j+;+4~C>6^H-u00rpL  ~>    U    !  67!!32676'!,fD <>< 2a9 '' Qm9a2yy9y U˥V#  ] N  '72767654'&#"'67632 !"'&'&'&#"'6763232767654'&'&'&'*#ZMG!MIQnR'ynMy'ѰTX!<0Kra]?X3%;fX^@#!73*BZ@D^@7v_>ne}rwΪIF#2I'&*!DB>2Q5ecrRX.,   I  s   64'&#"7632!89!%BC=nJH #m)D   +   .  {  m     T. < N ]  232#!727676765#"'&5476%27654'&'&32767654'&'&KBha`pcy!))23I@F0$wtTS(0ch!#E2):|HBSfTi1'&05Q>M:nn.7#!B:yZX$^]yk!!25>PHIX1%.!(Ivy0@7H]<H&	K5tB5    # @  $%327&'&'&''67654'&7!27%# '&477/+$J.3`(,<.!#&)H&pg,>MQ#;T99#%c% 	gTrh870@2!.IO!@#7>!7,2@FMVy32._T{w<Y   }Y-  )  % 7673 $54$32!"53!25&'&#"C]JjMo_zggJF__DM3TT<`xGZAEIpP3RQ4O    SD    6'&"132673#  !2Up3Fs*Nghz"?K9U	n"Gzt#(Da   X I  7&'&5476!2#"'&547654'&#"3"32767267!"'&'&5476`Gej,sNV+E2//6' '\oSh]-liōFf|ekA)+>-!>Z`'9QT(+" #)"H[|T$?9]pX`88$6}yo  K/ S  76?#"'$#!!#"'&547632327676=7!&#"#"'&5476!27Q73P1!L,#%(JpR02W^Z91"@1(#>mx6!!}H;m,Ud0A7+6M?R	cBb8WkLSF?Q.J;$!!J?f/hiv&LWSH3+"P	H    +  \ 	  )!!!!996:f{##y  M	? m  %&'&'#"'&5476363276765&'&#"'47632767632#"'&'&#"32767#"'&'&'+19012YqU4/ ,3.&6&< !!"bc:)J4wWgZUPP.\a0.)0>' 4?''Chyo=+uz.2L1ǂde6Pb.,:-$
.48ny"!V"FrjNpZۙ-(".*87`aA?06 "C?Y6%nn   ;}\    4&#"322#"&54ID`IFa~ﳶr|tx
     g 6  	4'#!5654/&54?'&5477'&5474/c2-i>Bd=VE/b5c2Bc2c2Cc1NS2j?Bdjl,>8?]/c6gUc1NS2Bc1MS2c1MS2   ' (  32#!"54?>3!4'&#!"&476323!2k+"E!$:@ϨD!*Y[A''# I	q#= X     ? *   #"/#!"54?>3!!"&54623!21=
i$	c*tD!$ZkF,(Jib'2 !Q<_c'oA<      #".5!"&54623!2<
EVkF-)A
*|2 !Q'Ho{m<z\     F      4632#"&3!53#5!pQOooOQpoTQooQOonuyy5y  Z     !   !232$76&#"mHFGoB5H"$#"fgk-¾       `       !!!!!!!#!!!!!!	g^wb-#	;+(+3\:,#FY%     F` 
  5  3&5!#3#32767#"'&'&'&5#!#"#463!d.4U"_'165Ic@;6^7V)"xfQLW,3$p	Gx&#T+Ka~=2{Ɯ V}    3>3 3!#"F{!nDFvFuV;c ;         	  3!!4H\]x    +     3!3%!!!C\\]x+]   w    	!	!	!!5	5-ExwcS      6$3  #"$'3  4&#"3!ђ:>lrq;zvD8p991dGEÃ875GFX    n   )!!K^7%#      ^   	!!^9+#         )!!DCyy)fo  *  J     +  ! )327&#!3676654'&LTbU!LM}j';c10tf:@S^et10]6z5x3ZNq   F  # ' 2  %267654'&#"!!7#"'&5477632#3%-)C%u^ ^ueC2tPQ Ȧ;0r,)[ZJoIx\aXc\mLV/.~X2xZJoI2  C{ 
  1  !654'&#"32767# '&547 ! ! *NI~HefUr|sЊd5"Z}?8X<[s6z0oDO:qDM9            !!3%!!jh9'\px    F     !!6767#!+73267mh9]>^#%,>f]&9UGs\     z & 0  	!67!>3  #"&'32676&>76&#"CY2wMv+ [e6TON`
 KYwC|:FnkBmFDےj5j:0.;6"W-/wGs))     /` 	  !!7!!.8N9P`#{#   r0'
[d'
/   {  r'
]d& { 
/   r'
VXd' {d& { 
/   rA'
/  & {  ud \A' ud'
/   t   r'
/  & { 
Yd \'
/  & t  
Yd R'
/  '
Yd u   '
/  '
Yd
X   r'
/  & { 
Zd '
/  '
Zd
Y   r'
/  & { 
\d R'
/  & u  
\d '
/  &
Y  
\d i'
/  &
[  
\d r%'
/   {  +   ,   +  ' ,K   ,   +  e' ,  ' ,K   ,   +  	Q' 9   ,      9     ' ,   9     
' ,  ' ,   9     6' ,
g  ' ,
g  ' ,  ' ,  ' ,   9   +  	K' ;   ,     ;    & ;   ,    ' ,G  ' ,   ;   +   /   J &   +  J '   +   0   ?   L   ?  & L   L   ?  ' L<  ' L   L   ?  ' Yy   L     m` Y     ' L   Y     	& Y  ' L   L     & Y  ' L  ' L   L	0   ?  & L   [    ^` [    & [   L    	& [  ' L    L   ?   O   L{ F   J G   ?  { P    c  	 ! * 3   ) '&'&'&76767676!32$76&+#"3TbU!!LM}UbU!!LL~T'++Ͳ++10tfet1001teft01Nq   *  A    /  32$76&+'67676'&'! )'++k:M0*M=GWBOdAJ2-cT:aU3!!}jzWV:2ST2:4:on:3	ateeta   c  	    B [ d  32$76&#67676'&! '&'&'&76767676) 7&'&'.7>7676707#"3Ak:M0*M=GWBk'++XdAJ2-UbU!!LL~TTbU!!LM}Ri:O/+M>FW@m++eAH2.aV:2ST2:W>4:on:3901teft0110tfet10#W:2TS2:V3:no:4fH  K{    V   #   !2.#" 3267!m''EFu}`=]s.-szef87IDDI    <A&
V  ' ud
/    d ?Q 	 	 
2@	@@	00	]1@
	 o
 990@		 o 	 <<@o<<KSX 	<<o		 oY5!!dyƑ<Ƒ     * 	 @
	 o
991 	 
2@	OO	??	]0@		 o 	 <<@o<<KSX	<<o		 oY3'#'ƑwxƑ   u PQ 	 	 
2@	OO	__	]1@
	 o
 990@		 o 	 <<@o<<KSX 	<<o		 oY'7!5!'7PwyƑȌwƑ  * 	 @
	 o
991 	 
2@	@@	PP	]0@		 o 	 <<@o<<KSX	<<o		 oY#737wƑxƑ    d PQ  ڶ
	 22@PP_
_O
O]1 @
 	o9220@ o  <<@o<<@

	o		
<<@o<<KSX 
<<<<o oo

	oY5!'7'7!dDƑwƑ<ƑwwƑ    *  @
 	o9221 
	 22@__P
POO@
@]0@ o  <<@o<<@

	o		
<<@o<<KSX
<<<<o oo

	oY3'7#7'ƑwwƒvƑw;Ɛ    3 	  7!!#c,4c̪4  3 	  #'!5_c̪43c̪4  3 	  %!5!73c̪4c4   3 	  %'3!zc4c,4   d ?Q   5!!!'7!dyYyrƑ<JxxƑ   u PQ   '7!'7!5!!'7PwyyƑȌwxJxƑ   s /  &'."#"'&/#7!!267676767632 NZN  !D:[P_cLW>bc,a NZN  $A?VMbdKX=AW\)""!&OG='""'=`,c_""!&V@>&""(<A  
 s /  676763226?!5!##"'&'&'&'."
$A=XKdbMV?A$  NZN a,cb>WLc_P[:D!  NZN WUA<(""&>@V&!""_c`='""'=GO&!"")   d ?Q   53!!#dƾWYƑƑ<WƑWƑ    !   3''#'5'WƑWƑwƾXƑWƑ  u PQ   '7#'7!5!'73'7PwƾYƑWƑȌwƑƑ +   #757377wƑƑƾWXƑƑ   d XQ   5!	!dW>HƑ<WWƑ     \ PQ   '7!'	7!'7PwH>WƑȌw>>Ƒ    d ?Q   !5!3#OiƑw
Ƒ6    *   %'3'!!5Ƒ6Ƒwh    u PQ   !'7'7!#3eƑwiƑww\    *   7#7!5!Ƒww\hƑw    *   %7'3'7!!5wƑƑwhDƑwƑw  d ? (  5!276767654'&'&'&#52#ƑwJE4;,-0+,;5D
Ƒ+,x>@9>*+     u P (  !"'&'&'&54676763"3!'7'D5;,+0-,;4EJƑw
+*>9@>x,+Ƒww     d ?  ;  3276767654'&'&'&"#5!5!54676762#M Ƒw0-,;45;,+0-,;4EƑM>x,++*>9A=x,+    u P  ;  54'&'&'&"3#"'&'.547676762!'7'7!# MME4;,-0+,;54;,-0ƑwM+,x=A9>*++,x>MƑww    d PQ M  2676767676322676767'7'7"'&'&'&'&'&"#"'&'5#$


 "%'-0$+	

' בw	'Z&(%	

	"(&-0$	
w$

-#% $,	

'בww"*&	

	*&"  d PS   %'!5!!'7'7!r?ƑwAI?Ƒw2'ƑY2Ƒww     7'7v9j#Pu]W)9 Z  ,   !#!5!,rƑw~Ƒ   [   !!'7'7!~ƑwrƑww<    Z,   !5!,ƑwLƑ  [   3!'7'7!Ƒw<Ƒww   -   !7#7!ƑwwVƑw   d b   5!3Ƒw
Ƒ	    z %  #4'&'&'&"7#74767676 ><JHHJ<>Ƒww12^YzoozY^21VJG@9!!9@GJVƑwƆvx]Y6006Y]xv  .z %  4767676 7#74'&'&'&".12^YzoozY^21Ƒww><JHHJ<>vx]Y6006Y]xvƑwVJG@9!!9@GJV    M 	   7!!#7!3c,4B[cc̪4'ww    d#P    '73#'7!5#3!Ƒwi3ƑwjƑwhhw0Ƒ\     ]" 4  276767654'&'#7!! '&'&'&54767< <>7ODHL:< >c,a/11/a_trrt_a/11/a;LJVS=7# :;LJSVJL;,cepvvpeZ5005Zepvvpe   ] 4  7 '&'&'&54767!5!#2767>54'&a/11/a_trrt_a/11/a,c> <:LHDO7>< epvvpeZ5005Zepvvpec;LJVSJL;: #7=SVJL  d
?Q   5!d
  d ?   !!dyƑwƑ      *   3'#wx         #'Ƒ$Ƒ    u
PQ   !5!'7P%Ƒ
Ƒw    u P   '7!5Pwyw      *   !37ƑwxƑw      !#73Ӿw  dP}'#  %  ,   `V'&,  $     dP}'%  #  ,    d?}   '5!!!!5JyyƑwƑ    _  U   73'#'#'3ZƑwxxƑ    uP}   '7!5!'7!5!'7jwyyƑwƑw    _U   %#73737#ZwƑwxxƑw    dP'T  BO      dP'P  BS       d ?Q    %'7#5!7!!!!!!~@SwSr@?dVKKWoSSWo6KK   d PQ   !  7'!#5#53533'7'7#'5!)KKSwSخSwSخKK7KKSSSwwSKK     u PQ    3'7'7!'7!5!7!5!!7'!6@SwSr@VOOKK3WoSwwSWoKK  d ?Q   !!5!!SwSLK7SSK     )   #'3'#'RTKLRvRK    u PQ   7'!5!'7'7!5)KKLSwS7KKSwwS   )   737#73KKTxvR!KKRvR    d PQ    7'!!5!'7')KKbKKSwS^Sw7KKKKSSSww  )    7''3'7#7KKKKSSSwwKKKK^SwSSw  
   	#7!##Sqc,vqjqu+cqS     	'#5!#5'5yrt*dpRpdvpTj   !   	753!5373pdvpTjYRrtdp  !
   %3!'3FRrtdpRpd,vpj   d ?Q   !!!5!!!?Qv9iwiv2viiv     u PQ   !'!5!7'!5!7!uviwi9vQviwwiv  Z 5Q   ''#5!773Ƒwcc
Ƒcc  u PQ   #5377!'7'7#'sccƑw
ccƑwwƛ     *   !#!5!5!5!'3'!!!!Ƒ,҂6Ƒw҂ *   3!!!!7#7!5!5!5!Ƒww҂Ƒw6҂    d ?Q     5!35!%5!!  %5Ƒ
2Ƒ     *     3#3#3'#'2Ƒ w6Ƒ     u PQ     #5##5'7!5!'7w5Ƒ2wƑ *     #535#3#7372wƑ- $6Ƒ     d ?Q   #3!Ƒw
Ƒ\   u PQ   '73#'7!5ƑwiƑwhhw   7 ^?    5!5!	!!$T_i$$  6  ~    '33	!!,_i$$p$   H ^P    7'!!	!!$_%  6~    7##%	!!_%e$  6  ~      !!!'33	!!YK_i$$zzbJ$J 6  ~ 
   #!5#3'3!3!	!v_r$$pllx|`$  6  ~  
   #!5#7'3!3!	!v_r$$ll|`$   6  ~ 
    3!3!	!%#!%!5#3mr$$M  2|`$܌lzlx   6  ~     '33%!	!!!!'37,_$$$^ttL@$@tt   6  ~ 
    %3'3#!5'3!3!!	!!'37__v<r$$$$-^ttTll|<$$tt  H ^P 
   !5#35!7'!!!	llx|`$_/%%   z  M 	   7!!#!#c,4wcc̪4w  z  M 	   !5!735!3>c̪4<\wrc4bw^+ 6~ 	   3'3#?!	!!	!___-%%$$eҌ$$   u PQ ) 5 A  	'7#"'&'&'&'#53676767623'7$"!&'&'!27676Pw?>KJJK>?|{	?>KJJK>?	Ƒf\(( ~ (g ((\(( <wIB:"  ":BIIB:"  ":BIƑw  `V'$,  &      u7P   '7!5!'7!5!'7!5!'7XwyyyƑDwƑw  d ?Q   5!3!!#!d=,Ƒ<JJƑ   u PQ   '7!#!5!3!'7Pw,=ƑȌwJJƑ  d PQ   %#!5!3!'7'7!Ƒw**ƑwJƑJƑww   d ?Q   5!3333####!dHddƑ<JJJJƑ     u PQ   '7!####53333!'7PwddHƑȌwJJJJƑ    d PQ   %####533333'7'7#dƑwdƑwJJƑJJƑww   7 ?@  	  	!}BJ,Z  u }@  	  7'!5!	7xJB얖dBB   7 }@     7'	!	7BB얖dBBd<,    
  '  
  !!!F^5_`+R    b   76! !&'&"2767!! '&b'&Q(
5jj5
w(Q٠sf)rr)fs  ;e   0  563 #"'&547632654'&#"3276767&#"0j/<Fh|olnh'8	 _S}()G:3?1&Q3!e$tqz[n̠ERAIo:I-.$,Q?IY          !!!!!\\+#6#6#  4     3!!#7#3!!!!3!&Oaea:!aaa4_+__#6#6#6    `z  $ 2  73#"'&'#7&'&$32	&#"	32$767&'&IoFcξ<hE(ixuЋPRRh!&)
QSS9YZX|g IHveyKvGd           @  /91 /90	!!!#-3mV?           	!!GskV??       %&76763!!"!!3!!"efſ{wC""Bw}_cdZdAAx>@?=wBC    3  " * c  /   +    +    +   ܸ 	и  и  и  !и  #и  *и */01%&'&54$3!73!!!!!!##!!a[g"uu	C"5N"BwCH3cdh[[[>x>@?=wB%      v'   % '&76)! !!)P])7KyK1&vo{ o%2lc<'        %#!5!276767!5!&'&'&#!5!2}wB""Cw{Ųfe_cCBw=?@>xAAdZx    3  " * k  /   +   	 +    +    +  	 и  и  и  !и  #и  *и */01#!#7!5!!5!!5!733>767!7!&'&'&'ba\pu4uW\C"N"BwCH3c[[xx[x>@?=wB%     v'    )5! 765!5!4'&)5P) 7KyK1)o{o%2ld<'      Ol    /  /013!l  w  @ ?? 1 20!!!!)     u   !!!XlXuJ)   )w  0@
 
  91 990!!	!!5	Bl_{N      o n 1 0!!        !#!5!3!!5!

bb  d  -   W    +  и  и   
и     	/   +    +   и  013#!!#!5!QA ;By    R>.    /  /013`em          %73%%#'mvzzvzvvKJ 36 r     9    1 0!!h}     LZ 
 h@;		 
	

 
		:
	 
	 91 90KSXY"3##'%`w͑%hN7   LZv ( 3  #"&'532654&+532654&#"5>32%3##'%\fQDB<_hkrJTbZNP4{FAWZ`w͑%hnQ$%@;@=/3--piE`N7    IZe     333##5!53##'%y:`w͑%hFN7    # .  %"&'&'#"'&547632676;#";%27&#"Mq7;J;Nw^ccWMq7<K:NwQJmnJkmZ-1c@DU36IqtĻo@DU36I?FZb|     ! , 7  67632#"&'&'#"'&54763227&#""327654&TJ;Nw]ccXMq7;J;Nw]ccXMq7;ʊkmZ-1bkmZ-1b6Iqwo@DU36Iqwo@DUR?FZb|?FZb|        %!3!       %!!!3&     5  /   +  	ܸ к   9  и  01	!!!#4'!&'7!&'&fX32jO\-*u N#Q(H?vq-..-xy)q       / /   901	5'7%%'6^w=<P
Fp37;B<>b_kyPRP   X/   3#/)    bX/  ;   +   и    / /   9 	  901#'%3%:F;Edee  XW/    3#3#/))   bX/  { / /   и  / ܸ и  
ܸ ܸ 
 и  и     / / / /   9   9   9   9013737##'I;J:\,Y{*eLX+e   5  J   !!!5EG^    5  J   !!!5fgw^    5  J   76! !4'&#"!5o{ o.8</+P+COO=   5  J   !32765!! '&5/<8.o{ow+=OOC+    /b   #"'&'7327067632&#"0mDK6<AcmDK6<AW6N89\fW6N89\   /P'     /
>'  '      /c 9 E P  '&'7767'&'&'&54767676767676&67>54'&'&'m; }J "mDK6<AK>>>?J "mDK6<AP#"$0"#J;PLKJ}՜U5O9:[>?JKVXKK>?'U5O9:["$S13(*#b11S$  N/ Y e i t  %'&'776?!'&'7767'&'&'&54767676767676&!67676&67>54'&'&!'mDK6<AmDK6<AK>>>?J "mDK6<AmDK6<AP;; }J 
#"$""0"#՜U5O9:[U5O9:[>?JKVXKK>?'U5O9:[U5O9:[":;PLKJ}Tn$S13(*#`%/b11S$    //
Q y }     %'&'7767'&'&'&54767676767676&!67676&!67676&'&'776?!'&'776?%!)!67>54'&'&mDK6<AK>>>?J "mDK6<AmDK6<AmDK6<AP;; }J "mDK6<AmDK6<A"""0"##"$
vU5O9:[>?JKVXKK>?'U5O9:[U5O9:[U5O9:[":;PLKJ}՜U5O9:[U5O9:[%Tb11S$rn$S13(*#     / ?  #4767676767676&7%7&'&'&''&'7767U%#B<\mDK6<A+(XBA%4]8y(-6HmCK6;BB,!]XTF>&U5O9:[	%AAYw8'~2:)+U5O9:[01<   / ; C P Y  676?67676&7'&'7767&'.'&4767676776'&'&X',mDK6<AWA:- lT.AW+0mDK6<A		X'"",<$';$)&BQK	* L'	՜U5O9:['@;_CJy3/@'	U5O9:['XPP&K&+63{4;$7kB%9(     / < E R Z  &'&67676?67676&''&'7767&'&'%6767677&'&'&EL?FS(+mDK6<A\<C"}G%8NL,.mDK6<A		\<
6-n&1/).,C,9`W=B#
֜U5O9:[&>FT<;Om3F 	U5O9:[&?ǐ,@FF-'q9:80/n2/    z -''C   z -'C'   y -'   z -'''   '     ]g     !!!!!!hhQ}P}2    &  '''   H''    R   #"'&'&'&#"5>32326j`k^Xbian
^VRPE:=MSNE;=K  R   3276767632.#"#"&'gV^
naibX^k`jRUK=;ENSM=:EP  . )  .#"3".54>3232654&#72#"&&YH<dhb^LvHPH<dhb^Lv_ZZRTFcQzpzZZRTFcQz}     W   !2323!"#"وX_@IVX_AHVK/_/      P   !#.5476767654&'3PND:<LTND:<Jh`k
^Xbjbt^V     i   3267#"''&#"5>32T;Vgj`VnsuU<XbiaWmsKUPE&EYMSNE%UE          #"/&'&#"5>32326!!j`k^Xbk`k^VePE:
=LTPE:	>K     '#    #"'&/&#"5>32326!!j`k^Xbian^Ve#PE:	=MSNE;=KF        %  6767#"'!!'7!5!7&'&5>32-]q{@iaBLjuƩ ZvQ]Seian-9@;OEi0(#VNE;g   K   #  #"'&/&#"5>32326!!!!j`k^Xbian^VePE:	=MSNE;=KF       /  #"'&/&#"5>32326!5!7!5!7!!!!'j`k^Xbian^Vj`U>aPE:	=MSNE;=K튄튄    P 3  %#5!7!5!7/&#"5676326767!!!!'HrF9edXVVbiZYan)@Ă$TgjYVeHrʉK		='&SN#";Qk&UP#!l   #  ; C@!.9*1 oo"o9*o1< -<<21 9999990#"'&'&'&#"5>32326#"'&'&'&#"5>32326j`k^Xbian
^Vgj`k	^Xbk`k^V#PE:=MSNE;=KPE:=LTPE:>K      3  &#"5>323267#"'3267#"''&#"5>32RXbian^[,#Vgj`;L3RVgj`m^^,$Xbk`;L.MSNE;E	KUPE/KUPE=E#	LTPE   K  7 ;  #"'&/&#"5>32326#"'&/&#"5>32326!!j`k^Xbian^Vgj`k^Xbian^VeFPE:	=MSNE;=KPE:	=MSNE;=K      7 S  #"'&/&#"5>32326#"'&/&#"5>32326#"'&/&#"5>32326j`k^Xbian^Vgj`k^Xbian^Vgj`k^Xbian^VPE:	=MSNE;=KPE:	=MSNE;=KPE:	=MSNE;=K   K   #  3276?632.#"#"&'!5!5gV^naibX^k`jUK=;ENSM=	:EP@      	    %5 % $%5$[g&Y%Zh     6@  9  76767!!"'&'&'!5!!5!676762!!&'&'&[6/07VYYW60%AA%0M
6WYYV7
N0/%'H:f<0[2332[39a?H'N'H?a93[2332[0<f:H'%   `@     !5!676762!!&'&'&!![A%0M
6WYYV7
N0/Hd'H?a93[2332[0<f:H'%  '&    k '&    h C' 7&   = C' =&   7  (' '        (&   '   ' 	   654'!#&547!5!!!!5((''F2<:4.@>0773;0>>0     '    #  !!!!"32654&'2#"&6HdcIHdeGBz0/11-0|DdbcGHd3/0xDCy-03     '     !!!! &!56 z    '     !!!!	3#$ׅcK   '     !!!!33#$ށKc  '     !!!!!!%fpqeqp2TT    '   
   !!!!!3!,րMYz  '    ! 6 = Q  !!!!53#5#"&4632264&#"%!3267#"&546324&#"#"3###535463fuu9&CWWC%:4%''%%''2.$M()R)cmk^Vgx&"*DAcct99BF/4 kj6h66h6k!))Yd[Yeg/!(&#LSS;9    'J   -  !!!!>32#4654&#"#4&#"#3>32![6]b"&16(26 S28V35uo:5SN[5SM%Q//7     ':   % )  !!!!#546?>54&#"5>323#!5 0+)^2<d.z&0 "*?1.#'!!d_1N, %`      =@!
  o}
o	 <291 <2<2.990!3!!!'7#5!7!^P1}      M     !!!!!!n  s   !5!73!!!!!'7#5!7!5!M.{>orv8Or?Aftgs  i      !!!!!!!!         
 '@	
 o
 <2291 /90%!55PN         
 '@
	 o
 <<291 /907!!55%     &     !!5!556PN   &     3!!!!55%        !!!!'7!5!7!5!75"3I>~H~6\ڠ\ڟPN         !!!!'7!5!7!5!755%"3I>~H~6\ڠ\ڟ   H    	5	59696N33QQ33QQ  H    555569869N    P # +  #&'#67&'&'&767&'36736'&DD59gi;5FDDD59gi;5FGAGWedYVedۘۘ      &%5%67$%'5$7d0wL,ƦvS)^o'oS*[n&         %57%'\Z-VpR̩wSXT    ~    %'7'75%%5XEZVwopR̩SX_'T    (    %%!!'7!5!7%5%<lSUCBu;L6S]5-XdsEE   (    7'7!!'7#5!75%7%5ֶDXFL62.B	=^2*ςE\fuE  S  $  %#"'&'&'&#"5>323265j`k^Xbian
^VfPE:=MSNE;=KPN   S  $  %#"'&'&'&#"5>3232655%j`k^Xbian
^VdPE:=MSNE;=K    ( 1 4  %3267#"'&'&'&''75>32%5%%%P
^Vgj`s;3QOVbia
Z^0Q[Fl¢=KUPE:
	E$&SNEEXbrf5-    ( 1 4  3267#"'&'&'&''75676?5%7%57'WR9?
^Vgj`s\GE)VbiY13:D	?\ָ̼܂=KUPE:$Ex&SN#	]euE2,  l    55%5wPN   l    5	55%PN  <<   !  %7'%%'75%7%57%5%e\i4"*PW<2."W94Z_k󆑐3^am􇑓g3;5  <<   !  %7/%5%%'%5%75%F??8]]	' o_\\q 'V13{f네􊇑3i놣     s 
    %5$dos=== ||   s 
    %$sod=6 || 6==     y     %5 %5$>V|}0USx|   y     %  %$V>}|0B|SU     y  (  %#"'&'&'&#"5>32326 %5$j`k^Xbian
^Vg|}PE:=MSNE;=K USx|     y  (  %#"'&'&'&#"5>32326  %$j`k^Xbian
^Ve}|PE:=MSNE;=K |SU     J?    67%'&%5$%ސmUΠ<STIGynʳlqB[,=qB     J?    67&''67&'֐mUBΠ4PSTIGn6mr6 B	\,<BU      x   !!"3!!"'&54766nLNl6׃x|~KM᎚ِ     x   2#!5!27654&#!5̌6fTLnxސME|     ;    %&'&763!3!!!!##"3|ppRh>|mݴnLNle>moKM    3    #!#!5!!5!332654'&#,|ppmݴnLNlgle]moKM         %!!!!"3!!"'&76 6nLNl6ΌmoKM᎐         %!52#!5!27654&#!56̌6lNLnClMKom       &  %!!'7!5!7&'&763!7!!!!#";>Q=Z&zQ<Kl<{nLNlBw|BmoKM      	 &  327654'&/!5!7+!!'7!5!7!5!XlNLL0<[RCnVΝ%vFQ<&L&MKomM0B"WlsBs     9    %!!'7!5!7!"'&763!!"3!!P@jPhΌ6nLNl6v2HumoKM-  9   !!'7!5!7!5!27654&#!5!2)3@@jPhH6lNLn6̌}G.HHtMKom᎐l  5  J    !32765!! '&57!!5/<8.o{o%Hb"bHw+=OOC+8FIcxcI  5  J'     5  J  !  !32765!! '&3##5#5355/<8.o{oMw+=OOC+)        !!!!*          !5!!5T    U    !!!!5!U*l     U    !5!!5!5!UT          #!#*         33!3   $  3 ?   "2767>54&'&'$  &'&'&547676!!#!5!TSEFDDFESTTSEFDDFESbc1111cbbc1111cb88\##EFc`FE####EF`cFE#dbcwvwvcbddbcvwvwcb88     $  3 7   "2767>54&'&'$  &'&'&5476765!TSEFDDFESTTSEFDDFESbc1111cbbc1111cb$8\##EFc`FE####EF`cFE#dbcwvwvcbddbcvwvwcb^    $  3 ?   "2767>54&'&'$  &'&'&547676''7'77TSEFDDFESTTSEFDDFESbc1111cbbc1111cbݍݍݍ\##EFc`FE####EF`cFE#dbcwvwvcbddbcvwvwcbݍݍݍ     "  = A  32767>54'&'&'&#"'67632#"'&'&'&5476'ED"#FDSRcbSUDED"#DFSRcbSUbxwvwc`2111abxwvw`c1211aGEacSSFC##"#DEacSSCF##"#Ib0111cawvxwbb0111acvwxwF    $   7  !! "2767>54&'&'$  &'&'&547676hTSEFDDFESTTSEFDDFESbc1111cbbc1111cbE}##EFc`FE####EF`cFE#dbcwvwvcbddbcvwvwcb     $ 
  5 O  "32654&'2#"&>"2767>54&'&'$  &'&'&547676[HdcIHdeGBz0/11-0|DTSEFDDFESTTSEFDDFESbc1111cbbc1111cb.dbcGHd3/0xDCy-03##EFc`FE####EF`cFE#dbcwvwvcbddbcvwvwcb    $  + E  %#'-73%&"2767>54&'&'$  &'&'&547676===TSEFDDFESTTSEFDDFESbc1111cbbc1111cbqqp##EFc`FE####EF`cFE#dbcwvwvcbddbcvwvwcb   $   ! ;  !!!! "2767>54&'&'$  &'&'&547676TSEFDDFESTTSEFDDFESbc1111cbbc1111cbfp##EFc`FE####EF`cFE#dbcwvwvcbddbcvwvwcb  $  3 7   "2767>54&'&'$  &'&'&5476765!TSEFDDFESTTSEFDDFESbc1111cbbc1111cbCj\##EFc`FE####EF`cFE#dbcwvwvcbddbcvwvwcb^    B     /3ް222	
ް2/3ް2
22  ް201!!#!5!%!%!!88oNz88W   B    S 
/3 ް2ް2	/3ް2	
015!!%!!8oNzW  B    B /3ް2/3ް201			'	'!%!!NNNNNz]NNNN    B     !!!%!!hNzE}        3!!#      3  ?3/3$$ ///333 $$01#!5!\ff          !5!!#<ss4         /  ?3 $$$$// /3$$01%3!!5<4        3!!#!      N  ?3/3$$ ް2
$$/	//3$$$$	$
$01!!!#3!!!>rr        N  ?3/3$$ ް2
$$/	//3$$$$	$
$01!!!#3!>rr          #!3!!#j\           #!#!3!!#F\\         #!!!#3!jj\rr   3q   !!'!#3!RNEqY&Y   3q    !!!!'!#3!7!`:`&qYYrrP    3q     !!'7#3!##g94|;qY&Ytf\+   3q      3!!!'7#3!##?!`4ww`qYYtr\     r ,  #"'732654'&'$%5$%67654&#"'632aVn,@1>1Je@J1>1@,nVa;lhXNm1.'0&:6Y((Y6:&0'.1mNXhl   r ,  $'&547632&#"327#"'&5476.aVn,@1>1J@eJ1>1@,nVa;lhXNm1.'0&:6Y((Y6:&0'.1mNXhl       	5'        	<{
  ]   
  7!!	5'G   ]   
  %!5	<G{
  z6 ' 2  2#"'&'!#"&632!676"32654&:Bz0.22,0|D_4.0|DBz005`9PO::PQ3/0xDCy-03`4B
<-033/0<B6`PsOO9:P     z6 
 2  "32654&'2#"'&'!#"&632!676::PO;9PQ8Bz0.22,0|D_4.0|DBz005`PsOO9:P3/0xDCy-03`4B
<-033/0<B6`  z6:    5!6767>32#"&'&/"3264&z:/0zBD|0/79QP::OP<0/330/:
 P:9OOsP  Y[      3!5#%5!v
x        !5!!#W4         
  !!!!!5fgwX&^       
  !!!!!5EG7&^      
  !!!!!5fgwX&^        )3 !!&'.'&MIP5?֔$OJL$#?           	!53"      w   	!	!!J      w   	!	!8!>>!7wJ!     cw[  @1 @	 <0"! !  !4$_lgiHRP  cw[  @1 @ 	<02$5! !  !_4pk/PRHi        7'	δ   9     Xd 	  !!%fpqeqpTT  v     !!!!!5!7	!!	'33ͅbŨb<NNv~;NŨP   'e     			''6UU     'f    				?<'fU::U  'f    			{'f0U8U   'f   		 fNV  'f   		 Nf::  '#    3276?632.#"#"&'!5gV^naibX^k`j#UK=;ENSM=	:EP  d   
  !! !dx|{v"dcC
#  d   
  3 !!dc2d{|#
C  2  ?  "'.'&47>763!!"3!"'.'&7>763!!"3!nA;9XX9;Amm{4664{m_XS#%%#SX_mDX9;;9X(64{{46%#SXXS#%     2  ?  !5!27>764'.'&#!5!2!5!27>764'.'&#!5!2FmmA;9XX9;Am_XS#%%#SX_m{4664{D(X9;;9X%#SXXS#%64{{46      
  <  47>762#4'.'&"#47>76 #4'.'&"#X8<tX0(64z|46$$RXXT"&lB::X0XtBl$l|4664|l`XR$$$$RX`    
  <  ".5327>53 '.'&5327>7653X8<tX0(r64z|46$$RXXT"&B::X0XtBl$l|4664|l`XR$$$$RX`l   |  8   4'&'##47673#\K!((!K܋c܀elK!x!Lkcǌcebc  4    ###!5!5!5!333!!!!'5#7777     =  
  	5	!!< U     =  
  55%!!f 11J    
H     	5	5	5
86 :686N33QQ33QQ33QQ    
H     5555556:86886:N     P  
   5!-5	5
:nPN   P  
   !5!555%
LNP       
  !5!5LNP      
  5!-5:    y     5$ %5$ T@}|?_:|xSU   y     $ %$ @T|}?:B US|  mw ! &  67&% %'&'57&%5$%7~E9оD\eعCR([\GwY49^GY~Y>-*HM.DX    !  6%'6%7$%7$% ሗX,tǈrfOM
Y%7R/VY(`q:}݂\*[  x    3!!!!!'#5!7!!!MЫ=Mv0'`@`U@   x    3!!!'#5!7!5!!5!!MЫ=Mv<0 `j`@        !!!!!!'7!5!7!)iԻikG9@莊      !!!'7!5!7!5!!5)iԻikG9j莊    "  %3267#"''7&#"5>3275T;Vgj`VnNPU<XbiaWmOkKUPE&EMSNE%E[PN      "  %3267#"''7&#"5>32755%T;Vgj`VnNPU<XbiaWmOkKUPE&EMSNE%E[  Fy  &  %3267#"''7&#"5>327 %5$T;Vgj`VnNPU<XbiaWmO|}	KUPE&EMSNE%EeUSx|  Fy  &  %3267#"''7&#"5>327  %$T;Vgj`VnNPU<XbiaWmO}|	KUPE&EMSNE%Ee|SU   w     7%'%57ږ1[bwZSZ=܀l<&    w     ''7-j9[61rwZ(Z A
_xh     5&     7%!!'7#5!%57ږĆ{UA-g9&ZBZN`<  6&     !!'7#53777wEB]{U_R]G&ZsZq
ZCyWcL'{  '{X{   ^& '{  %   ^'{  '%X   ^'{  'X%     #  %&'&'!5!676763!!"!!3!!"&bC#Efſ{wC""Bw}_dxzZdAAx>@?=wBC      3#5!3!!"$$3!!"!5}wy9geCclAb    v'   % $76)! !53#5!)Pٛ])7KWK1&v5o%2lc<'    'V    Z  "  %&76763!!"!!3!!"!5efſ{wC""Bw}B_cdZdAAx>@?=wBC^   v'    % '&76)! !!)!5P])7KyK1&vo{ o%2lc<'x     X  "  %&76763!!"!!3!!"!5efſ{wC""Bw}B_cdZdAAx>@?=wBC      !!!!3!!"'&'&76763!!"L@g}ֲbcefſ{izb9CcdZdA9    #  !!#!5!276767!5!&'&'&#!5!2bC#DgſzxC""Bw}udxzZdAAx>@?=wBC     #3!&'&#!5!2#!5!2767!5}fy9meCxAb    v'    )5! 765!#3!4'&)5P') 7KWK1)ˇo%2ld<'    Z  "  %#!5!276767!5!&'&'&#!5!2!5}wB""Cw{ŲfeƁB_cCBw=?@>xAAdZx    v'     )5! 765!5!4'&)5!5P) 7KyK1)No{o%2ld<'c    S   !!!!!!Sz    @&   '  27#"''7&5476&#"327654'hwwweݰwwwgV[lk7wUZlk5hwwxݞfwwwߞ7kkkUw5kkkT    r8R   5:zJB     6  	  3	%!	XZ9(dT   *   '3'w    *   37#7ww"w  *b'  r  &  *k'  A'  {  &   j   %64&4>4'&767e*C1%FA1Wx	,SQdWXWqZTC1@7YDzZhW>tV       !!!am+     	!!77+A      !!bT+"       !7!!G+7TA b    3#5!Wl   db    !53#l      5!%#3WX   d    !5%#3DX      !#n   I,    $%%$nn!"nn8ʸ        ' + 6 @ K V  #"&6 3546 +32 &=# &6;5#'54&#"3!3264&#"32654&#!#"3265˭ʏʭʏeHGeeGHefGHefGHefGMGeeGHe`ʏʭʏ˭GffGHefffGMGeeHGeeHGeeG      !3!n     g   !!!xRU g   !!2RS     ~:   !!!:2vSU   Tc   3!!!SvS     h   06732#"&54&#"iRA@Ae e5jT@OMJ&e<    -   0
#"&5463232670iRA@Aee54jT@OMJ&<        	'3%!5)!V@QQ@tFDx@Q2           !!!!%!!CFDDV    O  	     3!	3	)	!	3	
	xXL&&XXbPXX&*VZ           )!3	)	!	#	  xXL&&MyXPXX&*&    + x     # / ; G S _ k w           +7CO[gs  !2#!"543!254#!"+"=4;2+"=4;2%+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2%+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2'+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2'+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;22+"=4#"=43+"=4;2+"=4;2"=43!2#UݓJIIJ%J%%J%%K$$K%J%J%%J%F%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%%%%C%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%$%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%$%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%%%%%%%*$%%%J%%J%%K$$K%%%%%JJJI%%I&%J%%J%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%%% %I%HJ%%J%%J%%J%%J%%J%       
  	     )	!#	3		#	3
W
xXx&&XX

&P&X  Ff       			7'3#vvr&999"9"rr5kk\SSAcc\cc  `   V^~   X`   c)y    .    !!!!!7!T.SNS .Q          !!5!!'7'5!yFCƑwVƑwo     #      !	!	!	!ll([Rvv   m   !5!ݠ r0p        !!#v      !&5 ƠT_C   m   5!] p g ]   !0v	        !!]#ƚ ΐ,U  m   !!! #	q       !!#v      !! 	r    m   !!]# N#   ]   !0v	        !!!]# #   sXm   !4763!!"{zf+!u0%    y   !4'&/32765!9+en:==@ne( =F|AEuH<  sXy   3!!"'&5!+f}{y%0W   sy   !!	  m   4'&#!!2s!+fz{}%0   sXy   &'&!;!76<<(en@==:ne+!<TuEA|R=   y   !#!!2765s{}f+!y0%       ! 	z  7 ^?    %	!!!%#!55[$X^$$T:__           !	!!$<   Ff    +  			 276764'&'&">  &vvrn66\]]\6666\]]\65kk\SS]\6666\]]\6666\   !   Z   $  %6'&"3276%#"'&767632?3.,(LK.,)wyKM))wyMM5ۤ@@@@AAoppqpqqp41  7    >32 #"&'!'%7!%26&"7]ueu7e&f
\>X>b]]b`jRP[@  ,.a    !3!3FTNd  xN   & ۺ   +  #  + #    +  A   &  6  F  V  f  v              ]A     ]A     ]A   )  9  I  Y  i  y              ]    +  
  + 
 $ % + $ 01 !  4$32" !  4$357!3!NKKggL7h׬z@+/     xN   4    +   $ +     +  A   &  6  F  V  f  v              ]A     ]A     ]A   )  9  I  Y  i  y              ] *   9  1и 1/    +  
  + 
   +  . ' + .01 !  4$32" !  4$!!5>54&#"5>32NKKggo.*OC6uhSXL7h׬z@'%D%7A,C Nl  xN   D   +  B 5 + B    +  A   &  6  F  V  f  v              ]A     ]A     ]A   )  9  I  Y  i  y              ]A  5  5 ]A  5 ) 5 9 5 I 5 Y 5 i 5 y 5  5  5  5  5  5  5 ]  5 B9 , 5 B9 ,/A  ,  , ]A  , ) , 9 , I , Y , i , y ,  ,  ,  ,  ,  ,  , ] ܺ &   9 ;   9    +  
  + 
 ) " + ) ? 8 + ? 2 / + 2  / 2901 !  4$32" !  4$#"&'532654&+532654&#"5>32NKKgg|rN^j@][]dXMKJ;x_^IeL7h׬z@_0 6135-.)/%|}Up    xN    )    +  !  + !    +  A   &  6  F  V  f  v              ]A     ]A     ]A   )  9  I  Y  i  y              ] ! $и  &    +  
  + 
 " # + " и # '01 !  4$32" !  4$3!3#!5!5NKKgg BKL7h׬z@Y5У   xN   9I   +  & 3 + &    +  A   &  6  F  V  f  v              ]A     ]A     ]A   )  9  I  Y  i  y              ] -   9A  3  3 ]A  3 ) 3 9 3 I 3 Y 3 i 3 y 3  3  3  3  3  3  3 ] 9   9    +  
  + 
 0 ) + 0   +  # 6 + #01 !  4$32" !  4$!!"632#"&'532654&#"NKKggS?!Wcu;S[[S3wiL7h׬z@\$=(F>?F(  xN   ' @   +   ; +  5 % + 5    +  A   &  6  F  V  f  v              ]A     ]A     ]A   )  9  I  Y  i  y              ]A   &  6  F  V  f  v              ]A     ]A  %  % ]A  % ) % 9 % I % Y % i % y %  %  %  %  %  %  % ] ) % 59    +  
  + 
 " 8 + " 2  + 201 !  4$32" !  4$"32654&.#">32#"&54 32NKKgg6666677ai1gqn@޹GL7h׬z@u@II@@II@*g;    xN   "  #/ $/  ܸ # и / A   &  6  F  V  f  v              ]A     ]   A     ]A   )  9  I  Y  i  y              ]     9 !   9    +  
  + 
  ! + 01 !  4$32" !  4$!!!NKKggxl1L7h׬z@  xN   ' ? K!   +   = +  1 F + 1    +  A   &  6  F  V  f  v              ]A     ]A     ]A   )  9  I  Y  i  y              ]A   &  6  F  V  f  v              ]A     ]A  F  F ]A  F ) F 9 F I F Y F i F y F  F  F  F  F  F  F ] % F 19 %/A  %  % ]A  % ) % 9 % I % Y % i % y %  %  %  %  %  %  % ] ( = 9 + = 9 +/ 4 F 19 % 7ܸ + @    +  
  + 
 " : + " . I + . C  + C (  C9 4  C901 !  4$32" !  4$"32654&%.54632#"&546732654&#"NKKgg<?>=;==e˽f$pq32033023L7h׬z@L:;;99;;:apS{{Sp	|]]|-.-..--     xN   4 @   +  > ) + > / 8 + /    +  A   &  6  F  V  f  v              ]A     ]A     ]A   )  9  I  Y  i  y              ]A  > & > 6 > F > V > f > v >  >  >  >  >  >  > ]A  >  > ]  ) >9A  8  8 ]A  8 ) 8 9 8 I 8 Y 8 i 8 y 8  8  8  8  8  8  8 ]    +  
  + 
 , ; + , 5 & + 501 !  4$32" !  4$53267#"&54632 #"&2654&#"NKKgg_i3frn?ݸG5885677L7h׬z@)f;!AHHBBHHA  xN   & 2 >   +  #  + # - 9 + - 3 ' + 3    +  A   &  6  F  V  f  v              ]A     ]A     ]A   )  9  I  Y  i  y              ] # ܸ  и /A  9  9 ]A  9 ) 9 9 9 I 9 Y 9 i 9 y 9  9  9  9  9  9  9 ] 9 $и $/A  '  ' ]A  ' ) ' 9 ' I ' Y ' i ' y '  '  '  '  '  '  ' ]    +  
  + 
 $ % + $ 01 !  4$32" !  4$35733!4&#"3267#"&54632NKKgg|'D')*''*)'ÏL7h׬z@&*jmmnn    j   5!j    l   !X      3 	      !@ 	  <j     5!!5!!5!r#B#B#j    <l     !!!!!r#B#B#XXX m     333mjjj  m     !!!@@@mjjj  <j      53353353353<xxxj    <l      3333333<xxxXXXX   n      3333p^^^^    n      !!!!@@@@p^^^^     !!      l   !! l       !!#      l   !!# l       !5! j     l   !! X       !5!$ j     l   !!$ X   j   3!-j    3!-m    j   !!@j       !!@m   j   5!3,jk     !3,X j   5!!@jk    !!@X        3!!- 	       3!!- 	    	  #!!!P@ j   	  33!!P-# k      !!!@# 	    	  #!!!P@ m      	  33!!P-# l     !!!@# 	     !5!3, jk       !!3, X    	  !5!!#@P jk   	  !5!33$,P jk      !5!!$@ jk    	  !!!#@P X      	  !!33$,P X     !!!$@ X     !5!! j    l 	  !!!!- XV  l 	  !5!5!!, jV  l   !!! X     !5!!$# j    l 	  !!!!$# XV  l 	  !5!5!!$# jV  l   !!!$# X j   5!3!,-jk  	  !3!!,-XV    	  5!3!!5,-3jkV      !3!,-X   j   5!!!@jk     	  !!!!@#XV   	  5!!!!5@jkV     !!!@X      #!5!3!,-jjk     !!3!!,- X       !5!3!!,- jk       !!3!!,- X      !5!!!!@ jk       !5!3!!$,-# jk        !5!!!!$@# jk       !!!!!#@#P XV      #5!5!!!!P$@ Vk      !!33!!$,P# XV       !5!533!!$P-# jV       !!!!!@ X     !!3!!$,-# X      !!!!!$@# X      !5!!!!$@# jk      !!!!!$@# X  <j    5!35!<yj  <l    !!!XX       33lUTT        !!@@lUTT     5!5!  x X    333x 		    	  !!!!- ¬B  x  	  !!##xms j  x     !!3!!xm3-s ¬jB    	  !5!5!5!, >   X 	  5!###ljjj     X    !5!!!5!4l t, >  	  3!!!--A   xj 	  333!xjk   x    3!3!kA  	  5!5!5!3,,=    jX 	  5!333jkk    X    5!35!3̠=      3!!!!-- 	AB x     333!!xs 		   x   	   3!33!!-skA	jB        !5!5!5!3,,   X    !5!333xt jk	    X     5!3!5!33t,	       !5!!5!4 B     5!!###sjjj      	   5!!5!3!!t,-sjB     5!5!3!,-XA   j   5!333!jkk     	   5!5!333!XkA       !5!5!5!3!!!!,,-- AB        5!333!!###sjkkjj         !!!!5!5!333!-s t, jBkA        43!!"yY[ p~|     4&#!5!2[Yx p~|  j   5!2653#xY[j~|q    j   !"&533![Yyjq|~  *m   3YѲ/	Y   *m   #3*/	Y *m   #	#	3	3*i    S   jh   5!|j       3?  hj   5!h}j       3 @  hl   |X    !@? hl   !h}X     !@ @ l   5!5!!5ijVV     333PP ?@    l   !!!iXVV     #!#P@P ?@  ;d      ;?   !O ?   ; j   !O j   ;   !O k   ;   !O @   ;   !O    ;   !O    ;B   !O B   ;   !O 	   q   ! 	      ! 	      ! 	      !' 	   I   !] 	      ! 	       3 	   :l'       bm         # ' + / 3 7 ; ?  53!5353!5353!5353!5353!5353!5353!5353!53('O'('('(67576    (  'l         # ' + / 3 7 ; ? C G K O S W [ _ c g k o s w {           #5353353353!3#%3#%3#%3#3#5#53#53#1#53#1#53#75353535313#3#3#3#75353535313#3#3#3#75353535313#3#3#3#bb~! 
  'm       5 9 = A  35#%35#35#%35#%35#35#35#35#35#35!35!#5#!5#35735#35#wNOŶZXYI6Z   B;a  B  q :o         !( @  ;v'    v      ;   !!!;(' 	@   ;'v  v'      ;   !!;@@	    ;   !!!O   ;v'   ;&v  v'  ;   !!'(      %   !     %    !!!,7r<R     %    %3!254#!") ) ,orVoVZttV   %&      %        !%!5!5!5!5!5!5!5!5!5!W77777 rrrrr  %        !%3#3#3#3#3#ᰰܲްܲް t88888   %         # ' + / 3 7 ; ? C G K O S W [ _ c g  35#35#35#35#35#35#35#35#35#35#35#35#35#35#35#35#35#35#35#35#35#35#35#35#35#!L$" $"$ܮ.,,.ܮ.,,.,,.,,.,,.   %   
       !33775353535W!yBߢ| T}<B     %   
       !%353555#5#5#57#!yyB| r!C}     %  	       $ ( - 1 5 9 = A F K O S W \ a e j o s  7'#7'7'#7'7'7'#7'7'7'75#7'7'7'7'7'37'75'7'7'7'37'75'7'37'35'!,2|5y2~~2O~~5~|~2~~2~~5~}}}}~~~~}1y|~||~|}|||~|}}| z4|2~12~~~~|~~~~54~}22~}~45~4z231|42~~1O~~4~|~1~}1~~4}}~~}}~~~|1|~|}~|||||~||}}4|1~21~~~~|~~~~44~~11}|~44~~41       7!         %!!!,rv        %!!        !!!cr   "   !    "    !!!,r8V     !   %!!n      !    	!!!bSnr     !%   	    !%    !	       7	        7!	  !%         !%    	x;rRff          7          7	x^rSS      !   7      !    7	xtrSS     !%   !$    !%    	%!bc6r        !         	%!QQZr    !%       !%    	W                  	z      !        !    		#W    !%   	  !%    	uvxx    !%     	>+uv))xx  p)   )  $7632#"' 327$%&#" %632#"'~~~~eMM>yJJJJJ6````qq|qq   #u   v@A      :  91 990KSXY"	9%-  p)    327$%&#" %632#"'MM>y````qq|qq     r' 	   ' / 7 ? G  %&'&'6767&'&'7%'676727"'64'7&"'62&47\+;.81F9K58.42d;E9G,:.80G9J6&8.;+d1O9FLL&_`JnLL'`_n<1& j(0=Ju &,A=N:0('<1& j(0=Ju &1<>EB0(n_II'[[JnII'[[   p)    % / 3  6%632#"'327&#"6767&'&6pyAAAA,+-,,-+A@@Rqq|qq%%mܱ[0$
%@%|"    p)   ) 7   3276'&#"7632#"' 327$%&#" %632#"'r99:9rr9:99XWXXXXWXMM>yB!!BB!!oe33eje33````qq|qq     p    $  $pkk]Ak^    p     $  $27$%&#pkk]<MAk^a``     p     $  $"3pkk]<MAk^``    p     $  $%&#"pkk]Ak^>``    p     $  $327$pkk]\LLAk^>``    p     $  $"327$!pkk]<MMgAk^```     p     $  $"!pkk]<Ak^`  p})   6%63"'pRqq     )    #2y|q*q   (     32>54&'."!623IJf654253ED3366fJI426532&<   	(     $%632#"' 327$%&#"!IMM>y_O````|qqqqH(     	(    !#%&#")%632OyyMMqq>~``     	    3327$3!#"'$@1 >qq``   ) 	  %63"æqv`  ) 	  2#%&#u)q>`   	  527$3Muyv`>q   	  "'$33yuMq`     !)   %632#%&#"uqq>``  !   03327$3#"'$uMMuyy``>qq  !%         !%         !%   !    !%   !$ '`  )   32>54&'."467>2#"&'&o+()h:;iR+**(iuh*)r5352456fJI325wh))++Rh<:g*(+*)(픂235624IJf6633    %    !%!!d r<     %    !%!!We r<     %    !%!W7 r<    %    !%!W7 r<  %     !%!!!!+c,b r<<     !% 
    4632"&!	W>>VV}V2j>VV>>VVJ      !%    !	c      !%    !	b    p (     7 &  $   %;<*X֖   %  	   !!!!!!,7,rWb<)) Ie  %  	   !!!!%!!,crWbM)<R re  %  	   !!!!%!!,br+ceR re   %  	   !!!!!!,7+r+ceR Ie  p      $  $!327$%&'pkk]]4MAk^Or``O+    p      $  $67$%&#"!pkk]uM14Ak^^O``rOc     p      $  $!%&#"67$!pkk]\M̦4Ak^OT``%OT     p      $  $327$!%&'pkk]\M40̉Ak^``TOTO     !%    7!!xtr R      !%    	%!#Wnr   !%    !xtr    y    !!!,Lr0R<6    y   !06    "K    %!!!,|rhOn    "K   !h#n    !%    !	#W   	       " * 2 : A I  3#''%#&'52#"'&5476!!'5%!!'53'5%3'5%3#'sMM7:==-0YG.b#CKSuYGr=;>MM^??@7`d?\gOOOOy>*<?v^  h "  3263#!5276;'4?'4?26u'6"gP39.4!'*C0.xV#m14He	'1l1Z+d    d   ?  33 #&'&+"'&#"/573;2?"#'57#&'#"#5676!5:+#9,p!j[%+>
7VCCc":8}V.e3B=Se`e9*=93@=}     k 	   ! = Z   4^	5_gow!M  73&'37&'67&'67&'67'32654'&'7654&#"3672 $54767&'&47'&327632#"/#"57#"54?'&5432'&27632#"/#"57#"54?'&5432'&327632#"/#"57#"54?'&5432'&27632#"/#"57#"54?'&5432'&327632#"/#"57#"54?'&5432'&27632#"/"57#"54?'&5432'4327632#"/#"57#"54?'&5432'&27632#"/#"57#"54?'&5432'&27632#"/#"57#"54?'&5432'&27632#"/#"57#"4?'&54327'4327632#"/#"57#"54?'&54327'&27632#"/"57#"54?'&5432&'67&'67&'67'&327632#"/#"57#"54?'&5432'&27632#"/"57#"54?'&5432'&27632#"/"57#"54?'&5432'&27632#"/"57#"54?'&5432'&327632#"/#"57#"54?'&5432O~	)*+')+(@&'$||e?/A}]\B-71SLoWj\vLL)(0/	((	.1(%%,*#$)*f$%+)$#*+f%%,*$$)*		\o		[	%)#&'%&)#`#$*)$#+,U		Q		0	E%%+)$$*+*EC*Z*,)-)-*,%&%&fБfU 5HhfeefhH2pu^QFs棥sKQGh!99!!77!44	22	K44	22	22		11				





		







7


		
%&%&%'%&%'%&22	
//
	g
		
	

					44
22
      ! 2 C T e v          +&'&54?6?6/&2#"/54762#"/54762#"/54762#"/54762#"/54762#"/54762#"/547672#"/54762#"/54762#"/5476%2#"/5476%2#"/5476%2#"/5476DQ=2`{4&/<)g>i#@3e E$$
#
#
#$
#$$U$
#"$
# aG<s-8PZy9}KW2{0R^j,:.4.=,,  --- -	.. ,  -     	  !!	WV9`8    	   !!	7	!!WVDu9`8NI         	7%7&54769	}V&7A6$8'^4?
          !2	7%7&547!&'6I@Y%14HFS"="l-2DC[9         &   !  4$32   4$ #"&54>2JJhhq0^mNMn2Z^Z2K7iwBNmmN1Z00Z     }   
  C   "32654%"32654&%#"&54767654$ #"&767&54 !  ggJIhIhhIJgg[ZQoy y}WZ[zADgJIggIJggJIhhIJgU\\Q	srW\\^    }   
  A  4&#"26%4&#"326 !  547&'&632 $54'&'&632hIJgggMgJIhhIJg#@@z[ZW}yOOyoQZ[sIhhIJggJJggJIgg][[Xrq	Q\\   }    "32654&7 #"  32ɏǾ/`T_ȐɎ;P12Y   }    1  "264& "3264 #" 54 327&54 32  #"'&'3xyx&   کZTdIU       	k  ) 5 A M Y d p {       3'%&76'!'4%$53!76=332654&#"#"&54632'#"&54632#"&54632&'&676&'&676'.7>'.76$6&'&%6&'&6>'.>'.	[&riX(tRSu(Yiq' LW쥨驧r^]]^ !!  !! .-.*)X,),*))+..-.
OyyO
vKK9__9KKݧꧦ]]_""""s!!""W&.-.-a),**))))/.-.    	p   % - 5 A M Y d p |       5#!4'&'5#2#"&546"264"264"2647>'.7>'.676&'&>&'&7>'.%7>'.676&'&676&'&53!76=3%'676%27'%&76'77&'$%'#7%6'&718楣 .  .  .  . --Y--))G))))U*)>--~--VFwDcDC0BDcDwETc==F\J
$06#
J\F==cS@@1AeA1@@H磤椣筁 .  . .  .E---,1))),(9)())u-,-- G77W6W77Gl^	ee	^l(q,&$pp$&,q(      u    !!'!Pn8h       v   "  !!'! ##+572367676MoL)>ueI3?ba8hA:F;/Itx    v     !!'!		##'	Mo_h[ei[i8hi[ef[l[     @   36273	##' 5)U.WW1@USV   d  v    # , 5 > ~  3+&=43+&=4%3+&=43+&=43+&=43+&=43+&=4%33 #&'&+"'&#"/573;2?"#'57#&'#"#5676!5\:V\9\:\:]:&]9[\::+#9,p!j[%+>
7VCCc":8
#8d#7$6$8;$7i$7	#9pPL)Z.;6ZV
Z3%Y63.87p    	    	   / > E q w   !674#!!6?676'&#'323276767654#3#&'&'&6%67!672!&=75$/563&43!32+'!67#>54&53#?	I	:W0 96;E,Q 2:&l6x0	bm!
ras"\>%Ef~e2U6g!6V#p5C+
C?P9
B;Q4XmM;YV /M(=H:,qLUD)8Wqke-Pm{NW


=$
U	/0c)H?2@[nDF8T$.L       	!'	!T4XKGwL5_K        	  	!' 7W4Z~wD     B  &547632632%6#"'&'##"'&'&6&'&547676xJX%&XWX:\8[Ez##FM!9@!#jL)_(Mi#"?8"MF##y4hok@mmr*%te2'BB90tU%)"ft(f")%Ut09CB'2      9 >  3#"'43727$'#"$4727%6725676&5&oJ 7.b<MD	,B3qY5**]d=HNN: sW$,J	]T.MMm@ed:	,'ZM'cM&T)2_M      2  %!"&54676737#&'&54>;7!"&546767!7!"&54>3!6763!26P+=6/2D>R+>2,+v*>>+2
,2
=,2
=,3>,       2  463!2!2#!!#!32#3#!>*v+,1>+R=D206=+P#,>3,=
2,=
2,
2+>      { ! C  %4&#!"!&3!!"3!#";#"3&'6737#&'6737!"'67!7!&'63!67!2I0!6SSSS:	SS>SS]]J]]]]h\\, Bv*>K%39KILKIOKHLKIhghghghgE?-     L ! D  72654'6#"'4#"'54#"'54#"'675674767#%$4:JILLHOKHLKIhghgighgD>-sJ1 b6'SScRR	SS?SS\\K\\;\\]]!A*>K     { ! C  %254+'3254+'!254#!'!254!&#!"463!!2!!#!3#3SS?SS	<RRSS6 1J(K>*vA!,]]j\\\\K\\IKLHKOIKLIK93%N-?Eghghghgi   L ! C  32=732=7325732'654&#'%2&'&5&'5&'IKLHKOHLLIJ:4$N->DghgighghSS=SS	SSbSS'6a!0J)K>*B \\]]:]]J]]   }   O                   !%)-15   3656;2#'7+"/#"'+"5&54775%"'5476;25'7&56%635&56;374765'75'76=4'&+ '"'4!#"'&3$365&5&#%#754'&5&&547'5367&7+&'&'735&2?"5%75537'7'3533553535'32767&5%2?&#%55'5757757751:e,$?F?Y>F_LA3ELH3,8LYLlEF'!0<k#gF EeY!!Gp&iq9:^N$%`BCf F4"4._?ee3&{E(1-+!$Kt8-
	$Gs sM rEF"2>_plTErf^5.>=9|5"-l)d,&>vv]cccWpC-+d8Bpp>W]oaxvuPp82,D^8,^B$K+"1R[+e*;GW
QU
I&?	gpo%w^SA$29i-5n02D|&IY^Pw^%\??\OWC,,1
/211/=;7777=321811{908hN%b\Dh,)h?17I21!122223
21       &  2%2#"'&=47 7654'#"'5473Bq4|lanN	ilmb9b؍MOb>YaYƮ58l7P P@         $ 0 < F X   + &=6&# 3 6=%&#"';27!5%67%!&'&'2+"'&=476r cR~UY082.ԍ_W_V"+}IR8D).P9H'S]ٱZYHYoX(I_ ;.2lOP%.G6R%&I8   d   	   8 P i  >'67&&&'6.7#"'&'#"'$76'773.#'6'5676&&5476'&'%&&8DN$$UE>!]J([Fhy*m.2\=w\`|:S?ED:@@]?]1fixpFFTD'yr,48eL@v(Nr%&&&+F	7!N &".\S$XE/KC\a*0/'rSCٟ
C

(RKpF|bphc'R"J$    d     1 F [ q                 7&&'7'6&'$#&7'&#"'5&767#&''5$'67'6'6'5$'67'656$'67&'6'&'''5$7676'&&'$'63&7"7&'7&'7&'7&'6'6%676767&77&77&''5& '6%35&'.54>23#67!&W=
y
/_I[l*OF_VhB""@.,<9tJ4Vt1PQJqMi
vhpHI!:JJJB7m\J_/
?ov!"t,`s&*_~P1>5='g=@24<1-s[,*&sd1PT>5J@=)j<42JCYT_Y)*)X^TY{ #m7"J}> 	"<H#%	-88)70*7f8Z\+HD 	&+>H1$&b5 4CUE '(!`9!,(MTE+}r}A"7,)f[4f AD <@0&9c?"V+GoMK~aGg9s&0@k"?c*GEKXGjt9hN&\6
''''
6\%      N  $  &'6&'67327&#!65#&3yyys~wccޱqZre[c77	c        ,  35'533#3!'#'5!5!5#53!5!5#!!-ʷ}}	ckvGG@<<3ffX苜qXGccG      J     326&#!2+73	###	3(ttvgnؐB(       33#!!#'!'57!5#'5735׫$"q~q     +  !#!573#'5!3!'573!#'73!#'5;jjŠJss<wѡIjj8/w    {  ,  32#' 3%+ &5%6323'#57'53^VQ6>ѨABؒ6ʞG2k>Y3~||~        O b s  32732753"'#"'4323$4'5;+"'#"'53275'&'&5?5572%#&'&5%634%476=%@.!%,BE,#!-Q2"
$nL/PuHED8<yVX}$c!u&# _A]&y#{Y6\K00D(;,,e"@ p$B(!cc*@rJ&*EcJkgFp/ԶQRm       T _ g  2#27654'73&#"#'&'#"56='"'46'4#"4735#5&547/63654'%654BR38xy}xO8x *@;^ThoP?).Rt}?ywW·FY3(p"AK|.PQUbKxưrɮ-(-;	)1Hv;<tM]%;@!(!My/xK\̾g|HJiS~J?scf=     2  2#'#"'#&'663327'#&'56=4'&+"6і}٪Yql	~Bw%bx׽ɊnX1UhstZ|$eE7          !   !   !   67	654 '67KJy_ͪq7IL6xbhp]B          ( 4  3265 !  >32#"&546324&"26% !   !  
Őb{=&*<<*(;E;R::R;KJ67Ϛ{ɬ)::)*<<**<<*):<'L67I    &j  'j  j     &j  'j k     &j  'k  j     &j  'k  k     &k  'j  j     &k  'j  k     &k  'k  j     &k  'k  k   
    < B H N T Z ` f l   3264'&#"&7367'67675673#''5&'&'7&'677&'67'%%&'&'%6767%&'0/CB^0/AC/88pkTcR|NOOfUip88pqUfONNQaQh!$b)dLQk
KRt!%c'd&//^000NN|P_Pfp88poQ`QyNNP\Qgp88pmQ\Py,
M
N>&`7"
bK*V&"g{M	M  jn 
  ! - =  4632#"&%462#"& !   !   !   !  676 &'& Q;:RR:;QBRtSS:;Qtu<=CA$32%s'l(;QQvRS:;QQ;:SSutC<=@%8338H,'(+    jn 
  ! - =  4632#"&%462#"& !   !   !   !  7 767 '&Q;:RR:;QBRtSS:;Qtu<=CAs('s%23;QQvRS:;QQ;:SSutC<=@G+'',H833    jn 
  ! 1  3264&#"32654&" !   !  % 767' '&'Q;:RR:;QBQ;:SStRtus$32%s'l(:SRvQQ;:SS:;QQu[8338H,''+ 
       " * 2 : A I X  3#''%#&'52#"'&5476!!'5%!!'53'5%3'5%3#'32765'&#"sNN99=>-1\H0e%FKSwZGr=;=NN$E| 1	?'_>?@7`d@\hPPPPy?+<>w_VG{?,rCA        +   +"'5$76%&'547327676=&#~jt1/Q}](+VRxbOP>nS]]	=f      P  +  ! &56;2'5$%75#"3ui1.P~N](7P,VSZycOpO
>S\^	f  0: 1 >  7#'#53'&'&54767&'&=33676=3#326'&i($lm$(($[Uu&tU[$&uU[[UV$|ddbe|$%
ZSSZ
%_TYYT  -     &  6&   !!#!5!&yEߩPSCL"~||	    -      6& %   767!5!3!!cE!%zG#Lޜ~||         &  67    !7!lE!Ypipؤ=Ug\u   S     5264&#"#4 32 33#!5z{ym㗗y{(|    j   #53533#632#4654&#"#*jjoon}mZyH{zF      2 
 1   "32654'#"&4767!!53#5!!3!!#3!!pOO87O:=0LmkL/>Λ2  1O79NN970LؙL1KӘJJ-   ' <  %#5#535&'&'5'73'3#'73'676=35'73'33◰zhNgeMjzzTThOʍ7NjYYӖy     ?    ! #!!!'!27674'&#.d ;6zFH%QM_\ǃ$P<    ]      ! #"#&5463 67!2#6#" V⩁9k]ts]k8X1((1E       u  .  " 6&'67>3" #" 54767&'&#52&͕LVa{.+ؔ)0zHUM\&ϖ=Bll)'ҕ*l8lB=     j    &'5 %$ 56?6'[W4ZZ//[[5   @Eo   $ 8   "3264,'5'&54632264&"&$#"&547>B_^^-͓hI^9l͓hI(+|T!%lgMLx)+{T!&lϔgMM    
 <   >'.4632 27#"&54 54&#"&'&5476766&IAKK@ߴGdAoc.%&3tu/3u]o:JKAKLݰ
|XHwyo<>bQs-.cx68<<r.3G   m 6 ?  2>32>32#&'567''#&&#4'3>$4&"?w(K>R0D<d.J|	1:?$)v$/ƀwϧ}wh^)etWW<aAktAO]R      k9  #  !!!5!&54 32 !!5#67654&"*-bCDVUhhUyzzyU   E< 4  353'5#"'&''#&&#4'3>32>32 gYYYD,1:?$)v$E?w(K>Ro}vvxJv<aAktAO]ƀwϧ     		'	7	!5!?=lXll= ?l=Xl=l       j ' /  27632#"'#576&#"4'5267>327&'"SkQmyz,~zi2@:$(.-)zW]	ݾgvxaX[&ŝ     9{   A   3276327632"'&#"'& #' 327627632#"'&#"'& #'Es-1V865+)|m^aVp5W7805Dt,1Wn6+)}m^aW784V8705(GG$3LKGHb'HH#2MLGHa  A      !5! 37 !!'  3(ͦ '3_76`S@ʬAR       c    $ T d  67&'&"!3!67>54.#"!&'.54>325467675#53533#63232>54.#"P#3JTRJWVJQSOMJ4"?*&ElnhPL$ llill%LOhnlD')----+)QPQ((QPQ)+/6klj$?6FWWF6?$jlk6}++--     J H N R h |     &'4>32"'4>32&'4>32&54>32&54>32#!5!'!567>54.#"32767>4.#"327732>4.#"327>54.#"732>54.#"M_6694S55.+C55C&.66V\+55c$M##$	6$#$s`%#$d0"%)h#"#_33@]22-"40446/*33UJ"+33^1/K=0T*
#### 
#&$$&##&$$&#

B

####
*"$$"  U  ! ' - 2  !35!#3!53573#'5#5!35!75!!5'57!s\\ss]]s	JRRIJ~֛E77__vtt4!    v 7 C Q ^  &54767&'&'5676767&'&54>32!	535#5##3654."! 2>4.#" <$))+N-N*)N-M,**%: @v<-MTM-?K5:66459<5&?HPPIK*
')+K**K+)'	*KIPPH>&5<:6uN|l||l|-I+N))N+@6:55:5 Q    * 3 V  6&7 !&54 ''&''67.76;+"'5#"=6&'76767 %25#6&'3Z(-6	Z8.	,Z0H&h6%`+EH
)#M+=;,Zga#iR6Uk''M.+`xo8:.@s.P mz "x?.#1p#41`&jD"acLHJ
~447|JlL"  0   P [   32>4.#"32>54.#"!5&54767&'&546767&'&4>32'&'.#":e79e89f76e`[S&(*UM,N)(N-KV)&&\@ECApd88dpg669:%N&KRS*
'TM**MT'	*SRK&N۠:9}qyyq}      c    $ T d h y   67&'&"!3!67>54.#"!&'.54>325467675#53533#63232>54.#"!57!&'.54>3234'67632!P#3JTRJWVJQSOMJ4"?*&ElnhPL$ llill%LOhnlD')----s=BDw@>=))==AwDB=+)QPQ((QPQ)+/6klj$?6FWWF6?$jlk6}++--!yCB{C!$$!C{BCy!    J H L P  &'4>32"'4>32&'4>32&54>32&54>32#!5!5!M_6694S55.+C55C&.66V\+55c$))_33@]22-"40446/*33UJ"+33^1/NNOO U   % )  5!5!!35!#3!53573#'5#5!35!s\\ss]]s	^^/oo#E77   v 4 @  4767&'&'5676767&'&54>32!&535#5##3 <$))+N-N*)N-M,**%: @%v<5&?HPPIK*
')+K**K+)'	*KIPPH>&5<:6n5|l||l|    L   " . 7 =  6&73# !&54 '''7&''676&7;2547#";65'" 3=QUU+-6E|]k0krd0cG&h8E+`%s
H>4wM-',Qo8:$whPSmh**z1"0@)5"@YR    0 .  &54767&'&546767&'&4>32;&(*UM,N)(N-KV)&&9:%N&KRS*
'TM**MT'	*SRK&N۠:9   C   #  #"'##56'##"/547 ?^'5@_*SU&/UL	;Yԧ9UP(`XI.     s  2  22732 #&547636=4'&# #4'&#"*tpz&=<xQ>hG:V
Hek%PF5NPB|-&pA&NF    X      	 &&5	<F:^;"Vgd     G 7  236;2"##'65##"'&5476;235&'&=476ex<JT`(GeRUdfB3	VNT<G48u<B<h	mMD:SGEnQh  B  " < B  +"'##56#+"'&57547 7;2732;276=4'3&'"~V"0b*SV*8UiQ"_|Q
)w`SgA
?6N#euB?gIo5	F(pZR      w   2367632#&5476(t*#\l~ ΨT]1klSI|-  X     	&47EosU     H 2 ` g  26;2"##'65##"'&5476;2&'5476&+"326733276=4/#"567654'&#"35&5hr=)\"IfRUdgC3&=cGkv	==Nr%SZU6vk 6)S<F98:d	mOE:Rp&i	C]&'Ax.+0	nM,W`c     T   , H  3#&'&'&6%3#&'&'&63#&'&'&6 $&54673 $64'&'v0A1Y1,KV.J/VL9?cyɦt3Z|`ŻN[O}БBr1a`bb`a1)EMUUME)       3#"/4?23hH0#!cZ-@   o   3#'654'&'#"54732XWz=\9`Y'6?F` 1TFG*֙-@ x/   #"=4?2%#"=4?26ձ'VQܖCت+YP*~:ۉ8z"C     o    "'4723!# 5472!5kmOdXX[;Z$}@Ϝ   "    3363'$6'"-8w?WXc1	      0    3%#'#3%#)N(4/c}    4 ( ,  377#'#'547#5773%%.wwzy.**  <<7CA<<{8AMt    P E  #&#"'5654'5673;54'56732733273+&##&"#&'565Q8cc 9S:--:S8!cc7Q:--:[#;17F-:S8!cc!8S:-F71;#[RS9 cc 9S           ; G  7567&'&'3#6737'#&'7#&'6735'67#3335#5;0/_^//,/,-D--C-,.-
zz
~jihh~zz~hihj~ntt6tt-.,-C..C.,.-n//_R_//~ijhh~Nyy~hiii~zzs..         # . 6 C M h w      !2732!'5675'&=32#$'57637&/&+"+&532?4/%32#'#&&=4?#'57335'3!273+#='!"/547354;2?!&=!(:MbR.qp7,_q>MT,P$66$0_	u3dUdt_}s*$"Rt0XX__/ik=ZG8*F1
.ъf)MC=g9EkO9!(-);&
]t!y"&2|ba$
U+      
  2 E  35733!&54?'7'7!!"'&%#'73676'77'7'&'676ի,&T>=c$(wK9.U:Cʈ%`T?<c&>?5̈'8/a\MOHK$k$823!a
IF7=c`O]BA6$k#-	kNA!       1 D W  !!5>7>54&#"5>32&54?'7'7!!"'&%#'73676'77'7'&'676]T@1$J</gYLp0&0
,&T>=c$(wK9.U:Cʈ%`T?<c&>?5̈'8/]U1)8(3&ncQ&D-mMOHK$k$823!a
IF7=c`O]BA6$k#-	kNA!     ( = P c  #"&'532654&+532654&#"5>32&54?'7'7!!"'&%#'73676'77'7'&'676Z_3lFHe5^\VOosHGJI)`VKm1Sj,&T>=c$(wK9.U:Cʈ%`T?<c&>?5̈'8/S<\el23-2['&')bYK4JMOHK$k$823!a
IF7=c`O]BA6$k#-	kNA!       " 5 H  333##5!5&54?'7'7!!"'&%#'73676'77'7'&'676yy,&T>=c$(wK9.U:Cʈ%`T?<c&>?5̈'8/Rv_`MOHK$k$823!a
IF7=c`O]BA6$k#-	kNA!         2 E X  !!632#"&'532654&#"&54?'7'7!!"'&%#'73676'77'7'&'67612hFL]5R]]R'PF,&T>=c$(wK9.U:Cʈ%`T?<c&>?5̈'8/_ptcdrr@89@SMOHK$k$823!a
IF7=c`O]BA6$k#-	kNA!      	 " 7 J ]  "3264&.#"632#"&54632&54?'7'7!!"'&%#'73676'77'7'&'6767DD7:BB=F"W\]8uu&M,&T>=c$(wK9.U:Cʈ%`T?<c&>?5̈'8/Av@@vAf`5(sa_tMOHK$k$823!a
IF7=c`O]BA6$k#-	kNA!         . A  !#!&54?'7'7!!"'&%#'73676'77'7'&'676&,&T>=c$(wK9.U:Cʈ%`T?<c&>?5̈'8/2{MOHK$k$823!a
IF7=c`O]BA6$k#-	kNA!        ' :  7&54?'7'7!!"'&%#'73676'77'7'&'676,&T>=c$(wK9.U:Cʈ%`T?<c&>?5̈'8/MOHK$k$823!a
IF7=c`O]BA6$k#-	kNA!         ' 9 H R  !273!567&#2$'76+&67'#'6765'533!273+#'!"/47*:!Jca#fi*11Za(}ypPd!^t/TT}75	b\V/V'f::p?)\ )9s	s%00       % 2 < J \ e  3 + &=%62!67#&'&#36&#&#"3274/"34?3'35732?5##!'53aoPS<&3y:
SO	B2_5Nvbe)PK	L$=j"AjOL5_k,ߋ~y}/M<4{1;C,[_ei'[)$           / : B R ` j   # &5%6; 65%&# !27!57&/#2#&'676+%!#'#&'47'3!27##'%!#"/6g^_b0h\{\[:5:QmMM[-w,ldNVNG+Q'XYtTpXYSmEb,#4'FV !	Y11_	Ug,1        7 H  27&' # &5%6367&#'.7&67263'#%; 65%&# aWg^_Wa+{|<b0h\{\&XYtTͿWzzWapXYS 1   .  2!2!!7&!"4#".547672670#Uq{|}@!/(S*E.َer(Y$h?}}|r<.<CSSSL2      `     4767632#"'&'&!%!!+****+*B3    `  / 3 7  4767632#"'&'&4767632#"'&'&!%!!**+*l+***q*+**+*3       `  / G K O  4767632#"'&'&4767632#"'&'&4767632#"'&'&!%!!**+*6+***6+***q*+*f*+*a*+*3      `  / G _ c g  4767632#"'&'&4767632#"'&'&%4767632#"'&'&4767632#"'&'&!%!!**+*l+*****+*l+***q*+**+*+*+**+*3      `  / G _ w {   4767632#"'&'&4767632#"'&'&%4767632#"'&'&4767632#"'&'&4767632#"'&'&!%!!**+*l+*****+*l+***+****+**+*+*+**+**+*B3     `  / G _ w     4767632#"'&'&%4767632#"'&'&4767632#"'&'&4767632#"'&'&%4767632#"'&'&4767632#"'&'&!%!!$+*+*+*+***+*l+*****+*l+***q*+*+*+**+*V*+*+*+* *+*3         )  2 $$ $54$#"4>32#"&e|e(<X<ħñ"<! <"#<!;zchŮ;?B<!!<B=           ) 6  2 $$ $54$#"4>32#"&$2#".46e|e(<X<ħñ"<! <"#<!;>@<#"<! <"#zchŮ;?B<!!<B=   =B<!!<B=         2 $$2>4.#"e|e:<#"< !<"#;zch =B<!!<B=        '  2 $$2>4.#"$32>4."e|e:<#"< !<"#;"< !<"#<@;zch =B<!!<B= B<!!<B=          7!!(            7!!%!!`x`    M&j  j     M&j  k     N&k  j     N&k  k   X  	   6%'&/#'!#67$#	cKL`5+b(}*]55(BJN  X    #'!#67$#KL`55(BJN  j    	'7'77	'77	''6ƺ.+ŸMMƸ,,E#?=~Qǻ,,ȺOȻ-,qt5@   e  R  32>54.#"##"'5##"$'&'0!5!5&'.4>32!!676767'%''H&(G()G'%H(%'VW3WImuw>DE}AB|GE=md^JW4WVs'H''H'(H''H`XAK|@X1(ԁ3"|}DD}|"	2/
"1X@|AX1#     /  	673&/'67&'"&'6?&'3	'	K[]><+Gg['fBBe&\h?(K?]\K !;<uI@*"O8B1"1B8H$LIu<;0:ƕ     }   * C T  '&#"'5&767#&$'&%'6'&'''$'676'&5$'6%'.54>32TD$#@F,MMMvE8p_Lc1M**+B@0"AR/0?wA%od/D&3.YaQ/5#3$"uI'@3/u= =#n-....    y   3  %	%	32+#".7!"&'&'#&=4;7337_8)0/_^aM`1/ 9534<LL<L*(D>?GG~F6F~GG?>D9/C  }    "  632&'.'#!#!#Ҹ62K#+~~R!Nx_TV_T	'NQ9;:;PHi?CD|))Z    )    1   32>4.#"367#&7&$735&'.4>22[02[24Z1/[)'5*.XA<NWXZXN9dY22Yd[00-&皗1#+UU+      j ? G O   277''"/&'&'7&'&'7&47'6767'676?      "&462jX+C@~L@T/!%%!/T@L~@C+X+C@~L@T/!%%!/T@L~@Cl[[[-@2<T\E#D#F[T<3@..@2=T[F#D#E\T<3@-ku[[[    %      ! & + 0 5 : ? D P    3&7"7&'7&'7&'7&'6'6%676767&77&77&'"32654&'5&'.4>323#67#&#"/&'&547&"'6%676V n*[n%'ZxL0<{2;&b;>/2:.m*nW)'$o`0LP;2F<;(e:2/"7LL75MLZ'&4)PNPUQ74(43(4:XUPNR	("@Dv>0&8a>!U*~EmLK}`G
f7r
&0>j!>a)E~CKW
Gis7g:M57LL75M-Z
'*''*'
Y	(5[J5(	\d	(5J [4
	'      '   & . F R           2#".54>&'767&%76'&''67&'&'&'6767654676'&7>326'##"'&'&'&54767&'&547676&'&#"6&%6767&'&'&676&5467&'&6732767&$$$$OG362ecce74GL944m/122102/.303112.OF}68ge"w?>v"rt #87!":;@A<:"!66# sr*./13/.UVT\<>"$!!	!"#">kcg86|FO	93399	<>#"#><	 "$ZTU./43..V5$##$59gTVV9Z^^Z9++VTg9'(''&()I8:9889:Z_59eUV-,	<8.>euvc>-7=bccb>7-?cwud?/8MWZZW **D@@D+8,-VTe95^&)(&''(DA:AD.*!Y[[Y!      &    ) p ~   67&'67&'4&6%67.'4'6&&'6767&54?67&'&#&'#&'5&'"'67&'&47632>4.#"%2#".4>'7,3	3%/0),7=*'0*+3.22'Q YfT,1'').UfY Z98 "2B2;F_  XB?2C3" 894ihgikce"S[XVWXZ#ejpMcNTvJKr?VlLWW7pjk%n^*V{ww[11[ww{V)\#fd-#JM7B/""0C7NK",df#νhhοggQUXXU     S     	!!Y,q@I@,qȤ7TU7      S     '!57|,q,Iw,q,ɤ窪8    d      %  3!'# !5 2#"62#".54>"	h9|M463%&$$5		O	Dn;$$$$       33'5 54#$/[QwGSGUWGJG   Z  * 1 = C  & 32632 !!#!#!5!&"327&7&!&7326&#"6'XP}}R?99XezfH9?A:uutLFF"~||	-
	
GP8lGrr     [0  $ , 8 >  & 6 7&  '&'&'& !7!!!  6'&265"ut.77!u$lYoip@qDi4tEu.$rl,36l%eUg\xuvSc?\7=1lHr-ؤ    - 9 E   6' #"'!!#!5!&'& 326!7!%"327&7&326&#"suuW~WdP|ojp?9:v8?A:llGrE,
||	~LDJg\uHO   U  (   &  6& 32!7!!!#!5!&yEߩPhpCLn[u~||	     / M  #"'&'&'&54767676327'7'%'276767654'&'&'&"(F3"D"&%#C:bV`ZZ^;D"&&$AB[X]:3G9:]:F=~=<.,/*??z?<.+.( !$HS\[Y[VF=*%%'>HS]ZY^XAA&%iiD^29i..=<?A<92-.*?:CA<91*   A a  62'%'!!#5!5!5&'&'&'&5476767''7'''7"3276767654'&'&'&4p69].(E$##$E@Z-<81VDE$###F'19T]9T:G5>+../:9CG5>+../:9\2:a(EVUb_UVE@(
	%CEVU_bUTG(Hij:ο\ij+.<;BA;<./+.<;AB;<./  4 / O  !!#"'&'&'&5476767675!5!'	276767654'&'&'&#"<-Z@E$##$EDVRbfNZ@E$##$EDV18kbbjC9:/..+>5GC9:/..+>5疑
(@EVU_bUVEC%##(@EVUb_UVEC%	kajP/.<;BA;<.+/.<;AB;<.+    	 / O  ####"'&'&'&5476767632333'7	'%3276767654'&'&'&#"ܖU
(@EVU_bUVEC%##(@EVUb_UVEC%	Uܭkaj/.<;BA;<.+/.<;AB;<.+<-Z@E$##$EDVRbfNZ@E$##$EDV18kjC9:/..+>5GC9:/..+>5 4  ;   2"'&'&'&5476767"327>7654'&'&'&RUEG"##"GEURRUEG"##"GEUC9;\.+>6FC9;\.+>6#&BIRUb_URIB&##&BIRU_bURIB&s\<;BA;<.+\<;AB;<.+    4    2"'&'&'&5476767RUEG"##"GEURRUEG"##"GEU#&BIRUb_URIB&##&BIRU_bURIB& J  ;   "276767654'&'&'&2"'&'&'&5476767R#$$#R#$$=>3443>==>3443>"$)($##$()$"06<?IF?<6006<?FI?<60   gMJ  J e u  &'&54767"#"32#"'&'&'&54767676326762#"'&73276767654'&'&'&#"#'67654'&'*")$#)	=HK:C.221@=HK:		==@122.C:KH=	)#!  !#)##?FM;" "$)($&t.2@?FI?@2112@?IF?@2.x&$()$'#?IF?#% $()$ $)($    TZ`z  ! A _   3# "276767654'&'&/2#"'&'&'&54767676"276767654'&'&/2#"'&'&'&54767676R#)$#R#$$LK:C.221@=HK:C.221@=R#)$#R#$$LK:C.221@=HK:C.221@=zZ"$)($&#$()$'.2@?IF?@21.2@?FI?@21"$)($&#$()$'.2@?IF?@21.2@?FI?@21   
J A _ }  676767632#"'&'&'&'!#"'&'&'&5476767632$"276767654'&'&'$"276767654'&'&'61@=HK:C.221@=HK:C.521@=HK:C.221@=HK:C.6R#$$#R#$$R#)$#R#$$5=51.2@?IF?@21.4>"@21.2@?FI?@21.5="$)($##$()$""$)($&#$()$'  R    5%%%xr6׊eMM^xx   V  )  7654'&'575#!&54767'5!s_vR$N::N$Rv_{aT,X@X,Ta{4b\)1%==%1)\b4ߴ:`\KDDK\`     -     &  6&   #&yEߩPSCL"~{ Y,   !#!5!326& '6  !I(4~uP|Gjt ~|  ,    	!!#!5!7	>>!VL;||oJ     ,   737!!'!!#!5!'!5!{{~zz~zdz|{||R{|  xT% 	    !	!5!	#!7!#	#T??LLwJ|A|JZt|J    ,    $264&"&7673%%&uuu>hH]%VgVYFhݦuuv#gGέҔEg DX   !#!5!&'&5%676'!HfN)]H;btWUJn|3Lu.:;͢8%|    V ^m   3   76= '&   7654'7! '.54676! NΫ.8l?ΫNΫ,spppsppp>9`VhhV`"xx hVc`VhhV`cVY9QN9ss9N^Q9s     V ^   - E     7654' 76= '& 76= '&! '.54676! ΫNΫkNΫ.8l?*NΫ.8l?spppsppp>9ghVc`VhhV`cV|`VhhV`"xx `VhhV`"xx Z9QN9ss9N^^Q9s     V ^m  ! 1 ? U  ! '&'!    '&'&76767 76= '&   7654'7! '.54676! x8;41 ::; 9٫NΫ.8l?ΫNΫ,spppsppp>9d]]c]]]Փ`VhhV`"xx hVc`VhhV`cVY9QN9ss9N^Q9s    V ^  ! - ; K [ s     '&'&76767! '&'! ! '&'!   7654' 76= '& 76= '&! '.54676! K ::; 98;418;41
ΫNΫkNΫ.8l?*NΫ.8l?spppsppp>9]]]]]c]]cehVc`VhhV`cV|`VhhV`"xx `VhhV`"xx Z9QN9ss9N^^Q9s   -    ,  "&54632 #" 767'	2654&#"@a^CF[^ccZ礡}[D>XUAB]~Lޜ~g]䤣أ   l Z y   '#"'&#"'&'&'&547676763232767676'&'&'&/&'&'&547676762!2!%3276767654'&'&'&#"&#"3276767654'&'&s*	$+$$$#*#%>aZ%NT>% #HH	")mROeb

0

 $&$ 'D"&% 
$ #mR )Ky						   V!E  r   26767654'&'."#"'%"'&'&'&54767676;27>764'.'&+"'&'&'&547676762%632$"26767654'&'&.&&.&m,mQjP
(!N!"(!'CVf&&bZC'!("!N!(
PjoQm,.&&.&ql?W,>#"#""		""#"#>,W?~    lO Y x   3!#!"'&'&'&547676?6767676'&'&'&#"#"'&'&'&547>763276;%326767654'&'&'&#"6767654'&'&'&#"32eOuRd2	HH# 
%>TN
+Za>%#+$4$$$+$	's	
*
	*
OK) Rd#!#&
"*"D'  ""! 2 	T	
:	   	 I  Z x    -4H  67&'&'&+"'&'&'&476767632%632#"'%#"'&'&'&54767676;276 276767654'&'&'&"276767654'&'&'&""'&'&'&547676762"'&'&'&547676762'&'&'&547654'&'&'&";276-&#"+"276767654'&5476%327%&"'&'&476762I	Q\C--%("(/*0.,+"(/X]\9<\X/"$)0*3')"*%1*0CR[	

		

		

		

	22				2				2				2				%'&J &%C\d#_*]OhXC%& J&O]*								
 ")&`&"'$"/'	<%ZS%SZ%<	/'* "%5"-($# 	;8\=
! ! "
/VC
" ! !
[uV/+							   V^ n    3276767654'&'&'&#"&'&5476767632#"'.54767&54732#"#"676767'&#"'67654

ozwbd011.f_zx|wbd011,k9995ulsp:995un*D$lQ$"	6*D?"5'K(2-
#%>

:7331cdvwwqi`4331cdvwxD>mwn<;;8rowp:;;BV0/+"8:D@*|sa 	-F(7"*=8&0!2  1-5$&
6:B4    V^   , J i   &'&'%&'&"632%676767654$2"'&'&'&5476767"3276767654'&'&'&'2#"'&'&'&54767676?!*$ 1$-+h+-$F3782*	!?1 $>>9|wbd0111c`zwbd011.f_zxsp:995unsp:995ulwIP"2-.$ 	""		PI $.-2!v31cdvwzwcaf31cdvwwqi`43d;8rowp:;;8rown<;     x ,A -  57'36%33#3#!2#!3#3##$'#7$@d5{sVd]F0  0F]dVs{5⒒d@(
jPP,PP`    0   " ) -  	!676762!"'&'&'&54!X$#R#+/RFF$#R#$1Sh,		k-"s!    | K     476?6763&'&'&547632676767654'&7632!54'&'&76'&&#"'&/&'&'&#"#"'&'&/&'&#"&'&'&?6'&'#"'&'&#"!'476/654'&76'327654'&'&327654'&/%4&)"$0JK&
$)7		%1'#
#6	+-L__^/s4*1(.266	|/(1	

\	#:7
lS&x71]%
/~[#<$ o_%?,:
*(;Y)$X$+|=L!6CX&PY89Do6b'n283eF]4T&
& /50$?- 1@&	3l
K
C"P1	:07@D:5XI6.D3[+-1:			q/A8	

g   + jl  9 L p {     7654'"'&#"+"'&54?67676763276323273#5%6767'&#"6"/67#"27632327654'73654'676547&p/l0&J!cS%YE]{@C"$4>-;%,(6Y>m!N$X6"/,(4sS?X$U>"sJ?K(`./4+2K2.0>SZp0+1^' ;cs /^"|Y/428ۇϕl%%ot5oA='Y$	aT*''G+-%_kj~r}jL`І|\gK@/.85c($       " ) 3 S Z  67654/##3276?%%54' 654'36767632#"'&54767632'%;66I
	}gA6qn
		
		

->
9@
H67;zh|	9
>6!q
	


B   5>     ' - E L   4'&'&/767675'7!	!'!654'! 4'!!$4767>2"&'&'!654'
33
^^^RXI#J2VlP#
	~!88!~	
Uppph,p<((zd        " ) 3 S Z  &'&#"227654'&'''%'654.#"65&'&'&547632#"'&'&6#"%	
I66;o|>A%6!q

		
		
9
		;76H
	|h>
96qm


	
B   X{[ # C  '%%.'&"27>7%$6%"'&'&'&47676762%'2&%k
Aڙ>>dIID`qS
	 
SqGYq>q     ) &  %$64'%%&'&'&"27676&22"k**!q``q!   3 W
   2327 632 #"'&'&5476'(> !~GH".4F+@xH	)0$'*'       2727 7632 #"'&'&5476'(e`}{*279HFb@yJL1 -  A   		'	7	Ɏ877Ɏ77ɍ8ɍ     ?   	tt7tt7t7tt7u   B  2632#"'&'#"'&54767'&54763267632676
Q x L$3z(		 
6X36*=P*>
"#
        Q  26#"'#"'&'#'&'#"'&547&'&54767&&5476326763276T
 디% $$YyX$		zc0+j:(̢1#:_&#-Խ=1 '2ĺ  p  D   #  !!!!!%!!!!!!!!#!5!36HVBBXBBUHVPBXyB    p  D   !!!!!!""p"p"#  p  D    35#7!!#!5!3rrsrs   p  D    !!%!!!!!!r"p"#p"#  R  b   !!#!5!3ppEU   l    3!!'#'!!#!!3!5@,r,,_r,,_ >  v   #  !!!!!'!!!!!!!!#!5!3hm_|P_H_     p  D Q  #"#3;54'&'&'&#5!"3276767653#4'&'&'&+3!52767>5{dZYIB,$22$*DE]Vh{%'GC_Rl|lR_CIJ{hV]ED*$22$,BF\Zd{%'GC_RllR_CIJ&%IB`Oo|oO\FG'$zdZ\GB+%22%+BIdz$'GF\OooO`BH&&{dZ\GB+%22%+BId            #  !!!!!373#'7#ZAA:Llحmllmzlmllm|}}|d d}c   T` C  54'&54762327632#"'&+"'&5476=#"#"'&476323(L,68x86,L zFvd0000dvFz L,68x86,L zFvd0000dvFz zFvd0000dvFz L,68x86,L yFvd0110dvFy L,68x86,L     V^   &'##"&'&'&4767>32367675&'&'.5467676236767>32#"&'&'&'#"'&'.546767675&

 R.-R  R-.R "	
*!""! ((\(( !""!#%
	" R.-R  R-.R 

%#!""! ((\(( !""!**!""! ((\(( !""!#%

 R.-R  R-.R "	
%#!""! ((\(( !""!*
	" R.-R  R-.R 

  Sa   4'&'&'&'.54767676322767676767632#"'&'&'&'&'&#"'&'&'&5476767676765"#"'&'&'&5476767632($
((& :.:806$&&
)D+:!
'228:/3&$$&3/:822'
)2/@!
'&$6/r/6$&'
'?03'
&d8:02&!$&20:=-2&
(20C,7"
&d8:02& $&20:=-2&
(10?!
'&$6/r/6$&'
'D+:!
'228:/3&$$&3/:822'
)2/@'
((& :.:806$&&
(   T`0  267632#"'&'&'!&'&'&54676763267632#"'&'#"'&'&'&5476767!6767632#"'&'"'&'&'&54767#"'&'&'&5476767632!#"'&'&'&54767#"'&'&'&476767632&'&5476767632!#"'.'&5476767632&'&54767676Z



(
&	 

		

<

4		











%
(






(


2



	

6

	

	%		

	

<

%

(


    W_   276767653"4'&'&'&Wsp:995ullu599:ps;8rown<;;<nwor8;  W_  ?  247676763"'&'&'&5!276767653"4'&'&'&ee\WJI&%%"MF[[ff[[FM"%%&IJW\sp:995ullu599:ps&%JHZYif\UMH'&&'HMU\fiYZHJ%&;8rown<;;<nwor8;  0 	   %	%!	!0$$ѿ6alLl    V^ 	 )  !	!2#"'&'&'&54767676Z¬ìӬsp:995unsp:995ulHH;8rowp:;;8rown<;     0  '   "276767654'&'&'!	!990000999900009|kk-28;BA;82--28;AB;82-&lLl  0 	 ' 1  %	% 2"'&'&'&5476767!	!0$$990000999900009|6a-28;BA;82--28;AB;82-&lLl     0 	    !''!!	!!	!Z`5__5`/xxxx/kkIٶڶ&GGlLl     0 	    3'7'3!	!7!%%!Z&|d&dd&d|&kks/u//u/IvIvIIvIlLlc   0        %5%7'%!!	!xxx`/kkKKGTlLl  2     	'%'!!!!>j>-'O^__^Oq44H4"hdd      0   !%%!-@jjjk **           37'7	#'xxxx.xx.x..x   p  D   	#'!5!73!GFdFGrEGdGErFGqFGdGFqGEd  @L   			-	FOFc,OO,cFd,PO,dGOP  	 T`         '  !%%%!%%%-wD{wwf#w%f{wwy||y{xxf#w%f{wwxEy||y        %	%	Zp/AppA/}}E   T`   			-	ZqNqqNNrqNqr   T`   %%-Zyllylyy   T`   %%%%-ZtGcVGttGVcGGstGWcGtsGc   p  D /  3%!!%#'''%!5!%777xo:U.cF.d;UǩoxoU:e.Ec.U9oE.f:UūoxoU9g.Ff.U:oxo9U.      54'&5476276767632#"#"#"323232#"'&'&/"'&5476=&'&'#"'&'&547676323232?&547'&#"#"#"'&'&54767632676'K,68x86,L
qA'C<4GW>L
df
L>WG4<C'CnL,68x86,M	nC'C<4GW>L
dd
L>WG4<C'ElwFNd0110dNFy~DzI'#4#,G2$:;$2G,#4#'I~?	yFNd0110dNFy?~I'#4#,G2$::$2G,#4#'I;         "276767654'&'&/54'&5476276767632+"#"32;2#"'&'&/"'&5476=&'&'#"'&'&547676;232?&547'&#"+"'&'&54767632676o**YK,68x86,L
qA'C<4GW>L
df
L>WG4<C'CnL,68x86,M	nC'C<4GW>L
dd
L>WG4<C'ElPLwFNd0110dNFy~DzI'#4#,G2$:;$2G,#4#'I~?	yFNd0110dNFy?~I'#4#,G2$::$2G,#4#'I;   j  '&'&'&767654'&54762767676'&76'&'&/#"'&5476='&'&76767/1oS\**nH\W+G80j@6RR6@j0/P1Q\Hn**\Wk9000oS\*,lLXW+G80j@6RTXN6@j03L/S\Hn*+[Wk6	05HoIH 53c!77\`j4OO4jfVA7g/5 HIoH53 	05HoIL43c!77\`j4OO7gfVA7f05 HLlH53           67654'&"327632#"'&'&/#"'&5476=#"'&'&5476763232?'&#"#"'&'&5476763254'&5476276767632#"'&#"#"'&#"327676%32767654'&'&#"#"Z8%1T1%85e %ZF\+m8BS/?JV@6RTXN6@VGB1QB8n*\FZ% e53e!&ZFZ*n8BS/?JV@6RR6@VGB1QB8m+\FZ&!e3DA	
5<;>
+F$H$F+
>;<5
	AcJ2QD++DQ2J (5H,'9,J&0f)
T|\`j4OO7g`\|T
'g/& H,9',I4( (3J,&9-H &0f)
T|\`j4OO4j`\|T
'g/&J,9',H5(""'!$(:UJJU:($!'""   n  F     "276767654'&'&'767632#"'#"'&'&'&'#"'&'&'&5476767#"'&'&'&5476767632&'&5476767632=>3443>==>3443>x>%85670-)-%8/>0!-)-02;>/8%0)-02;>/8%-'&$>/:#-)-02;>/;))-02;>/8%-06<?IF?<6006<?FI?<605+'61>:4/.&"./4;=16'+&1,"%&!6'+&./4:>1:#"$./4:>16'+,4:>16'+&./4;=1  n  F n       %#"'&'&'&5476767#"'&'&'&5476767632&'&54767676267632#"'#"'&'&'&27654'&'&'&"67&'&'&'276767&54767'&'&#"276767654'&/7676767654'&'&'&#"Z0%8/>;20-)-!0>/8%-)0-<1:3%>-%8/|/8%->%85670-)-%8/>0!-)-02;>/8%0M=	 H 	C# B/g H *x#$  -7 H g/B   $#x*%",1&+'61=;4/."&./4:>16'.51=;4/.&&./4;=15+'61>:4/.&"./4;=16'+&1,"8_/$  $/_c.,b" $# !I?30C!'# 	x! #$ "b,.$	 #'!C03?I    
 T` - [ 3b  &'#"'&'&'&547676763267'&#"327%327676764'&'.#"7632#"'&'&54767676324676762676322##"'&'"'&'.5#"'&'&'&54767"'&'&'&54767676&'&'&'&'&'67676?&'32767677676765&'&'.#"7676767&'&'&/326767674'&'&'67'&'&'&#"67'&'&'&'67676767"276767654'&'&'"'&'&'&54?&'276767654'7654'&'&'&"67'&547676762:	


	$4

$$

4$


% !()-+,)$"! ((\(( !"&',+-)(!'7'&"# ,*2% !()-.))$"! ((\(( !"(%*-,*(! #2*&"# "&'
		!


4 
!


4 g

		
	i 4


!g 4


!
	
	oR#$$#R#$$	

	8

<

c7

<

7	





8
<

d8

<
6


 %),++*) !$3R  R3&!-(-%2(&"#%(.2$( &',+,)) !$3R  R3'! )),,+)$"#%(.2$( "			
i
!xg
!				
%
			
!
!
g
			"$)($##$()$"$
		
%%%%

		
    V^  < \ l   "276767654'&'&/2#"'&'&'&47676762#"'&'&'&54767676%%-z35++++53z35++++5pWDM69 ;9JHSWDM69 ;9JHSsp:995unsp:995ul}}(.35<;53.((.35;<53.("68MITNLJ;9"68MILJ;9m;8rowp:;;8rown<;}}             "327632#"'&'&/#"'&5476=#"'&'&5476763232?'&#"#"'&'&5476763254'&5476276767632#"'&#"27654'&%&'&#"327676%327632654'&'&#"#"Z*1%85e %ZF\+m8BS/?JV@6RTXN6@VGB1QB8n*\FZ% e53e!&ZFZ*n8BS/?JV@6RR6@VGB1QB8m+\FZ&!e3*1%8~>
+F$$>
+F$H;<5
	A~;<5
	A+DQ2J (5H,'9,J&0f)
T|\`j4OO7g`\|T
'g/& H,9',I4( (3J,&9-H &0f)
T|\`j4OO4j`\|T
'g/&J,9',H5(G+DQ2J$(:U$(:U3!'""!'""     A  ''7'753'75377537'7'#5''#5'7#5'7'7<<x<x<x<Ć<<<x<x<x<Ć<phMrhrohMMhorhrMhpphMrhrohMMhorhrMhp      ! % ) - 1 5  3%%%%#'-75%77%7?5x#	<$	<x<	$<	##x̩hh3QhhP'cccchcbbccbbgccc     0 A  37%37'7'#%'#5'7#5'7'7-'7'753'7xdX<[ddY<\dxd[<Xdd\<YdhQΛ4h5QQ4h5ЋQheQ55h3QQ5h36Q        #"'&'67632#"'&'&547'".46767#"'&'&54767627'#".4767632&'.4676327&54767632./56..65/.-/531/.66\l\66.//56.../j/136\6./531/.66./56\66.0.65/3m6.5/../54///.6\l\66\l\6.//.65/.6\l.//.6\l\6\l\6.-  	 aS      . E \ s   "&462	7	7	'	'&'&'&5476762"'&'&547676#"'&'&47676326767632#"'&'&X|XX|}UU}UU9r99r<%DREA 11 AERD%<%DREA 11 AERD%,|XX|X.U|JU~-|U~U.<%DREA 11 AERD%<%DREA 11 AERD%9r99r    	 aS      + ? S g   "&462				"'&'&476762"'&'&476762 2"'&'&4767$2"'&'&4767;i)U)U
)UK)U'.n.''.n.''.n.''.n.'p17#((#71p17#((#7Mp17#((#71p17#((#7K8)UL)U~U)^U)Ip17#((#71p17#((#7p17#((#71p17#((#7Y'.n.''.n.''.n.''.n.'   	 T`   & 3 @ M Y a m  +%5%32476;#"'&'7632&54?#"632'&54#"/7 2#547"&462"'&=3`(
`
&(
`
&*G)*IG)(*(Ge))GIR2d2X|XX|R2d2*2d2((2d2M*'FI*'FeF)*IF)*(
a
'U|XX|Xc(
a
'    T` l  267632%632#"'%#"'&'"'&547#"'&54767#"'&47632&'&54763&5476Z+/#N42B4
{L"..$J%(4B+;
N#/V/#N
42B4(%J$.."L{
4B$BN#./#J"5C7/	N".X.$M51C5	"J#//#J{	5CLM$.X."N	51C!wJ#/  f  #     +   + A    &   6   F   V   f   v                     ]A       ]A     ]A   )  9  I  Y  i  y              ] %    +   
 +   и /  и /  и  "01 !  4$#"#  4$32632 !"?qq?pGQ?rA   z   7   +  
   + 
     
 +     + 01%!#!3!dd,S.Sd,     z  8   7   +     +       +   
  + 
01%!%!35!,dS.dd,    z  	 7   +     +       +     + 01%!!!SdJS.SԂJ    z  8  	 7   +  	   + 	      +     + 01%!!7!,S.SdJ          	/ /01	SSTRSSSSSSRU"S       #       !      !X    (      +  /    + 01!33R(n?  x(  '    +   /   +   01!##xnR?   (   K / /  и /  ܸ  ܸ   / 
/    +    и  01!33!33RR(n?n?     x(   S / /   и  / ܸ  ܸ   / 
/   +   и  и  01!##!##xnRnR?n? >B- O S  2#"327676765!"'&54$3!57!##"'&'&'&54767676#	
 ?>I-7އv3T%+>CPNHiDG-2/&D9	.	!-8=DD_o2{jTc@F'%.36<@M137+4V    5  2&'&547676762"'&'&'&5476767Zy*,&&%1]~|45,--,54|45,--,5(+&014|d΃fz410&$(F*.46=<64.**.46<=64.*   Nf % C  &%&547676762476767622"'&'&'&5476767Z{&%1-l./&%%&/.l-1%&|45,--,54|45,--,5ġS410&$%%1/66/1%%$&014R*.46=<64.**.46<=64.*   n F( %  %&%&54767676247676762Z_75EAAD6556DAAE57_qKFD6454FCNNCF4546DFKo  X '  #"'&'&'&547676763"'&'&'&5476767632rJFD6464FBNNBF4646DFJp`84F@NLBD6466D@NLBD66^  ~ *  i  654'&#"632327632!"'&5!267&'&#"#"'&54763247632327654'&547632#"
6+Jo.^V|;-˙it36?̺fQMeEJS?(*$ s]vh2K)*NL13<VL*-*8A*_xAg0,?)!:"9JOCQ>^v:Mc*ZeC03N35%&-Kt\K%9S >BWN=!$?$8(F!5{^?   Z  N  676 547&'&327#"'#536767&'&'&5432&5476323254'&5432?-BO>Bv06('K`dC+(k$'eM?$#=HbB=)+8=.m9ebPB>$3g:=TEB7WPfG+1KHP<Ff#&T'0P+A'<<QbF  /'    "'&'&'&547676763"3/FDD@mh`((((SNecrGCFG/C>}DC  /' "  05276767654'&'&#052rceNS((((`hm@DDF/CD}>C/GFCG       !&547>2;       0!!676PJKBA<      !	!$        	!	"        #{   !	!{<l`    9   	!	9`l        U?   !	!?     w`   	!	w        H   Zjjjj  l   '7'7Zjjj3j f $  #"&=4&+5326=46;#"3l==kDV[noZVtsݓXX N (  326=467&'&=4&+532;#"+DVZon.-VDUT65==lTUԾXGGXJI9:tJJ  xN   K / /  ܸ  и /   ܸ  ܸ и /    +  
  + 
01 !  4$32!5#!7#NKKggL7h/+   xN  & S '/ (/  ܸ ' и /   %ܸ и /  ܸ "и "/  #  + # 
  + 
01 !  4$32>54&#">32!5!NKKggɈXԺShu6CO*.qL7hlN C,A7%D%  xN  6 Ÿ 7/ 8/  ܸ 7 и /    9 *ܸ   1A  1  1 ]A  1 ) 1 9 1 I 1 Y 1 i 1 y 1  1  1  1  1  1  1 ] 4   9  .  + . 
  + 
 ! ' + !   +    9 * ' !901 !  4$32%4&#">32+32#"&'32654&'>NKKggI^_x;JKMXd][]@j^NreL7hA}|%/).-5316 0_p  xN    S / /  ܸ  и /    9    9 ܸ       +  
  + 
01 !  4$32#!!535#!NKKggK"L7hߣ5     xN  *    +    ! +    A  !  ! ]A  ! ) ! 9 ! I ! Y ! i ! y !  !  !  !  !  !  ! ]    +  
 * + 
   +  ' $ + '   901 !  4$32>32#"&'32654&#"5!5!NKKggiw3S[[S;ucW׿!=VL7h(F?>F(=$\    xN   21   +    +    # +  A     ]A   )  9  I  Y  i  y              ]A   &  6  F  V  f  v              ]A     ]A  #  # ]A  # ) # 9 # I # Y # i # y #  #  #  #  #  #  # ] )   9 /   9     +   
  + 
   + 01 !  4$32#"&54632" 32654&#">325.NKKgg766666676̹Ȣ@nqg1iaQL7hI@@II@@= ;g*     xN       +  
  + 
01 !  4$32%!!5!NKKgg.L7h*     xN   1 =   +    +      +  A     ]A   )  9  I  Y  i  y              ]A   &  6  F  V  f  v              ]A     ]A       ]A    )   9   I   Y   i   y                     ] #   9 /   9 ;  9 ;/A  ;  ; ]A  ; ) ; 9 ; I ; Y ; i ; y ;  ;  ;  ;  ;  ;  ; ] 5    +  
 ) + 
   +  2 8 + 201 !  4$32#"&5463232654&'>54&#"2#"&546NKKgg=;=>?<;=p$f˻e#q0330233L7h;99;;::G]|	pS{{Sp	|-..-.-.-    xN  & 21   +  - ' + -    +  A     ]A   )  9  I  Y  i  y              ]A   &  6  F  V  f  v              ]A     ]    9 #   9A  '  ' ]A  ' ) ' 9 ' I ' Y ' i ' y '  '  '  '  '  '  ' ]    +  
  + 
 * 0 + *01 !  4$322 54&#"3267#"&'4632#"&NKKgg͸Ȣ?nrf3i_O76588567L7h!;f)HBBHHAA     xN   $ 0    +  (  + ( "  + "   . +    и /  A     ]A   )  9  I  Y  i  y              ]A  .  . ]A  . ) . 9 . I . Y . i . y .  .  .  .  .  .  . ]  
/   +   +01 !  4$32!5##7#"&54632"32654&NKKggِ&*''*)'')L7h*& nmmn    	=  ( F     76767654'&'&'!5%3!!  '&'&'&5476767̆mo5885om4mo5885omP\|~<??<~||~<??<~|96oooo6996oooo6}9:݈@>}~~}>@@>}~~}>   	=  A _     76767654'&'&'!!5676767654'&#"5>32  '&'&'&5476767̆mo5885om4mo5885om)4
\)NBCkPQT`aFnoIkl\|~<??<~||~<??<~|96oooo6996oooo6_.X<<;_<<5'(]]IBBZooV@>}~~}>@@>}~~}>  	=  O m     76767654'&'&'#"'&'5327654'&+5327654&#"567632   '&'&'&5476767̆mo5885om4mo5885omttBAzyLOPUDWOPJJx??zBLL\R[PGjkr=\|~<??<~||~<??<~|96oooo6996oooo6yNNtaa'(<<rj<;0/Z\bSTd	@>}~~}>@@>}~~}>    	=    + I     76767654'&'&'!33##!5   '&'&'&5476767̆mo5885om4mo5885omh*˪+\|~<??<~||~<??<~|96oooo6996oooo6@>}~~}>@@>}~~}>   	=  ? ]     76767654'&'&'!!67632#"&'532654&#"  '&'&'&5476767̆mo5885om4mo5885omz##$#utKSLHMVA@AC\|~<??<~||~<??<~|96oooo6996oooo6cnm)}|X@>}~~}>@@>}~~}>    	=  , J h     76767654'&'&'"327654'&.#"67632#"'&7632   '&'&'&5476767̆mo5885om4mo5885oml@@lm@??@=|<UT/GGVhiڵmn=|^\|~<??<~||~<??<~|96oooo6996oooo6KJKKJKllE&%mnޟ- @>}~~}>@@>}~~}>  	=  $ B     76767654'&'&'!#!  '&'&'&5476767̆mo5885om4mo5885om\ N\|~<??<~||~<??<~|96oooo6996oooo6`E#@>}~~}>@@>}~~}>     	=  + B N l     76767654'&'&'"27654'&%.546  &54632654&#"  '&'&'&5476767̆mo5885om4mo5885omsBBBBCBBBhtdthuABtԄ9tihvvhit0\|~<??<~||~<??<~|96oooo6996oooo6,=>=>>>kl>=EggOOss\hh\]hh@>}~~}>@@>}~~}>  	=  < L j     76767654'&'&'532767#"'&54632#"'&27654'&#"  '&'&'&5476767̆mo5885om4mo5885om=|<UT.GHVghڴmm=?>m@??@ml@@@@J\|~<??<~||~<??<~|96oooo6996oooo6lkD%%lmޟ橨KJJKKJJK@>}~~}>@@>}~~}>     	=  + 8 C a     76767654'&'&'"32654'.  735733!   '&'&'&5476767̆mo5885om4mo5885omT,+VUVV++2QPPQΠP3p\|~<??<~||~<??<~|96oooo6996oooo6{z~{ӟ>-,g%&݈@>}~~}>@@>}~~}>   	= 
 (  !5!#%  '&'&'&5476767{\|~<??<~||~<??<~|#:9q @>}~~}>@@>}~~}>  	= # A  676767654'&#"67632!5   '&'&'&5476767lkIonFa`TULkCBN)\\|~<??<~||~<??<~| ooZBBI]]('5<<_;<<X._@>}~~}>@@>}~~}>   	= 1 O  >54'&#"67632+32#"&'327654'&   '&'&'&5476767irklGPQ\\LLBz??xJJPOWDUPOLyzAB2\|~<??<~||~<??<~|dTSb\Z/0;<jr<<('aatNN=@>}~~}>@@>}~~}>     	=   +  !	!335#$  '&'&'&5476767hno\|~<??<~||~<??<~|@>}~~}>@@>}~~}>  	= ! ?  67632#"'&'32654'&#"!5   '&'&'&5476767CA@AVMLHSKtu#$##\|~<??<~||~<??<~|=|}'mn% @>}~~}>@@>}~~}>    	=  , J  2#"&5476.#"32654'&#"67632   '&'&'&5476767Pm@??@ml@@C|=⇆nmϵihVGG/TU<|=\|~<??<~||~<??<~|+KJKKJKӟ޸nm%&Ell@>}~~}>@@>}~~}>  	=  $  !35$  '&'&'&5476767>h\|~<??<~||~<??<~|@fE@>}~~}>@@>}~~}>   	=  $ 0 N  2"'&476' 654'&'>54& 74632#"&  '&'&'&5476767YtBBBCBBBB/tBAuhtt-tihvvhit0\|~<??<~||~<??<~|=>lk>>>=>=EssOOgg]hh]\hh@>}~~}>@@>}~~}>  	=  . L  %3276'&#"32767#"&'"'&547632   '&'&'&5476767!C>?=ↆmmдhiVHG.TU<|=Al@@@@lm@??@\|~<??<~||~<??<~|/޸ml%%DklgKJJKKJJK@>}~~}>@@>}~~}>     	=   % C  2#"&5476$  '!5##7  '&'&'&5476767e22dedd22TUUTBU¡\|~<??<~||~<??<~|{zz{ӟ>-/g#&%q @>}~~}>@@>}~~}>   u Pj   	!!5!!Pp#@pp   pt   	7%FN4NG  u P8   5	zD<22pJJ    t   	'-ZKFGN  uP   !!u\lE>~~>  u u 2   "&'&'&5476?!".'&47>3!'&'&54767>2	p4,
		,$
		
$,		
,42p
"2"
p    u P8   !5!	%JZPJJ  u P8   !5!	%JHJJ  u P8      #3#3#3!!5	xx<<oJpppJJ     u P8      55!#3#3#3oPxx<<΄ΊXXXX   u ^}   	!!Y$%   PD    !	6>l>>    PD    	!	DR>l>>   P   	Blvv  u Pb   3!5	5!"'&'&'&u##+*15J1*+##0+*%!JJ!%*+   u P8   47676763!5	5!"u##+*15J1*+##0+*%!JJ!%*+0      !!	^r{VXeoo     u P8   55!Dq΄Ξ0     u j    %5!!53		!<9h9>     u j    %5!!53		!<9h9>     + Z    !73#57!!+ Id&+ъ2&     + Z    5!'53#'!!!+dI|&2     2 
   !'!'!53	!Odcndh    2 
   3#5!7!!!	ndnd;ch      dd    !53#'5!'!	!]n2n22r-hJdc;dJ      dd    7!573#5!!	!2+2n2nr-hLJd;cdJ    < !  6767632#"'&'&'!	<'CZmo~yti^Z...*^Vqo~yti^?)X6nGCZ.//+]Yonzqi_X0//+]>Iʞ   	 BP      " & * .  37#37#37#37#5!!!!3'#3'#3'#3'#<<<<xíy_<<(<<(<<(<<ZPh      pt>     7&#"7'7	!%*BF8WU{FC*9oX:W  ubP     55!5!!'!XXddPR    t     '327''	!!iFB*8X:*CF9XU   pt> 2  %&#"6767&'&"67632&'&547676767tBEHY'#&N'$X$)./,0+""" /%Hp*G&/$##*0,0.+"W!'&'&#'ZGGC     uaP /  4767!"!47676763"'&'&'&5!3!&'&5P%T)#$"/*11*/"X$#)%eeZ'&$(0+.!"-+0($&'Ze    t 2  &'&'&'&54767#"'&'2767&'&'32t)H%X"""+0,0-+"$'N&#/'YHEBCGGZ'!&'&'$W"+.0,0*##"/&G    s PX  + B  6%"'&'&'&547676$47676762"'&'&'&'&'&547676762$/+z>_$#R#af#R#)>xbQuR$'68" vc   <  .  676767632#"'&'&'&%&'&54767&'&5476A ''+/54<3o8n23'9%%bb%&:?$ fLLf#&#/:&'+-23-+'rr'+-32-+     V2 e   "'&'.54?654'&'&'&#!"#!".4?64/&4676763!23!276767654/&546767622	Zrrd	Z		c

c	    2 g   "'&'.54?654'&'&'&+"#!".4764'&4676763!2;276767654/&546767622pW\xj	\W	
 4
	    u P^   +  #76767&'&/3#6767!5!!5!&'&'PSJl
R&GG&R
lHSi*n::n**OUä'66'U=;JHd)))dHJ;=    & $  *'$476 7654#"'673  327	5"4
:<+Ó$
F&H
(+-2Adq1)+# & '  732767$76545476;&#""O+(H$OCYM<J[G
D.9+{?I#dAPBBF2S    #u   	  	!	!j.u-1       	3%!!!!U2xxx      #3	!7!!7oUx2x     !!1mpp      	!!2mp  'P  P  'Q  Q    T  `   	'#'#'##'RKKR@R"~KKLR     Vb   #73373737@RKKRRLKK~"R      ]z ?  3276767654'&'&'&#"7#7676767632#"'&'<JHUYGK<9! <:LHUVJI>9!ww
"3\^wvlyZ^2103\^wvox[9! <:LHUYGK<9!>9MwWOw\^2106Y^wvow\^2104[   . ]z ?  #"'&'&'&54767676327#7&'&'&'&#"3276[xovw^\3012^Zylvw^\3"
ˑww!9>IJVUHL:< !9<KGYUHJƪ[4012^\wovw^Y6012^\wOWˑwM9>!9<KGYUHL:< !   u$ % 9 M  '7! &'&'&'#536767> !'7$"!3!&'&'&'!#!2767676w1cbbc11cbbc1-ƑTSEF"ee"FES"FESTTSEF"ȌwGAvcbddbcvAGHBwcbddbcwBHƑ##EFS $ SFE#$SFE####EFS   d Q 	 	 
2@	@@	00	]1@
	 o
 990@		 o 	 <<@o<<KSX 	<<o		 oY5!!d	KƑ<Ƒ    u Q 	 	 
2@	OO	__	]1@
	 o
 990@		 o 	 <<@o<<KSX 	<<o		 oY'7!5!'7w	KƑȌwƑ   d Q  ڶ
	 22@PP_
_O
O]1 @
 	o9220@ o  <<@o<<@

	o		
<<@o<<KSX 
<<<<o oo

	oY5!'7'7!dƑwƑ<ƑwwƑ     d Q   !!5!!	x(SwSK7SSK    u Q   7'!5!'7'7!5	KKSwS(7KKSwwS    d Q    7'!!5!'7'	KKKKSwS"Sw7KKKKSSSww   d Q   !5!3#
Ƒw[
Ƒ6   u Q   !'7'7!#3e[ƑwƑww\   d Q    !!!5!53#
xKKSwSKKSS    u Q    !7'#3!'7'7eKKxSwS͖KK\SwwS   u Q   #5377777!'7'7#'''QcyAcƑwmccƑwwƛ   ,@,  ,+,  ,@',,  , ,   , @',,   , +',,   , @',',,   @  ,@',  ,@',  ,@',',  , @',   , @',',   , @',',   , @',',',   +  ,@',  ,+',  ,@',',  , +',   , @',',   , +',',   , @',',',   @'  ,@','  ,@','  ,@',','  , @', '  , @',', '  , @',', '  , @',',', '      , @',   , +',   , @',',   , ',    , @',',    , +',',    , @',',',     @'   , @','   , @','   , @',','   , @', '   , @',', '   , @',', '   , @',',', '    +'   , @','   , +','   , @',','   , +', '   , @',', '   , +',', '   , @',',', '    @''   , @',''   , @',''   , @',',''   , @', ''   , @',', ''   , @',', ''   , @',',', ''   ,p  ,p  ,p@',,p  ,p+',,p  ,p@',',,p  ,p', ,p  ,p@',', ,p  ,p+',', ,p  ,p@',',', ,p  ,p@',p  ,p@',',p  ,p@',',p  ,p@',',',p  ,p@', ',p  ,p@',', ',p  ,p@',', ',p  ,p@',',', ',p  ,p+',p  ,p@',',p  ,p+',',p  ,p@',',',p  ,p+', ',p  ,p@',', ',p  ,p+',', ',p  ,p@',',', ',p  ,p@'',p  ,p@','',p  ,p@','',p  ,p@',','',p  ,p@', '',p  ,p@',', '',p  ,p@',', '',p  ,p@',',', '',p  ,p' ,p  ,p@',' ,p  ,p+',' ,p  ,p@',',' ,p  ,p', ' ,p  ,p@',', ' ,p  ,p+',', ' ,p  ,p@',',', ' ,p  ,p@'' ,p  ,p@','' ,p  ,p@','' ,p  ,p@',','' ,p  ,p@', '' ,p  ,p@',', '' ,p  ,p@',', '' ,p  ,p@',',', '' ,p  ,p+'' ,p  ,p@','' ,p  ,p+','' ,p  ,p@',','' ,p  ,p+', '' ,p  ,p@',', '' ,p  ,p+',', '' ,p  ,p@',',', '' ,p  ,p@''' ,p  ,p@',''' ,p  ,p@',''' ,p  ,p@',',''' ,p  ,p@', ''' ,p  ,p@',', ''' ,p  ,p@',', ''' ,p  ,p@',',', ''' ,p  p  p  ,p@',p  ,p+',p  ,p@',',p  ,p', p  ,p@',', p  ,p+',', p  ,p@',',', p  p@'p  ,p@','p  ,p@','p  ,p@',','p  ,p@', 'p  ,p@',', 'p  ,p@',', 'p  ,p@',',', 'p  p+'p  ,p@','p  ,p+','p  ,p@',','p  ,p+', 'p  ,p@',', 'p  ,p+',', 'p  ,p@',',', 'p  p@''p  ,p@',''p  ,p@',''p  ,p@',',''p  ,p@', ''p  ,p@',', ''p  ,p@',', ''p  ,p@',',', ''p  p' p  ,p@',' p  ,p+',' p  ,p@',',' p  ,p', ' p  ,p@',', ' p  ,p+',', ' p  ,p@',',', ' p  p@'' p  ,p@','' p  ,p@','' p  ,p@',','' p  ,p@', '' p  ,p@',', '' p  ,p@',', '' p  ,p@',',', '' p  p+'' p  ,p@','' p  ,p+','' p  ,p@',','' p  ,p+', '' p  ,p@',', '' p  ,p+',', '' p  ,p@',',', '' p  p@''' p  ,p@',''' p  ,p@',''' p  ,p@',',''' p  ,p@', ''' p  ,p@',', ''' p  ,p@',', ''' p  ,p@',',', ''' p  ,p  ',pp  ,p@',',pp  ,p+',',pp  ,p@',',',pp  ,p', ',pp  ,p@',', ',pp  ,p+',', ',pp  ,p@',',', ',pp  ,p@'',pp  ,p@','',pp  ,p@','',pp  ,p@',','',pp  ,p@', '',pp  ,p@',', '',pp  ,p@',', '',pp  ,p@',',', '',pp  ,p+'',pp  ,p@','',pp  ,p+','',pp  ,p@',','',pp  ,p+', '',pp  ,p@',', '',pp  ,p+',', '',pp  ,p@',',', '',pp  ,p@''',pp  ,p@',''',pp  ,p@',''',pp  ,p@',',''',pp  ,p@', ''',pp  ,p@',', ''',pp  ,p@',', ''',pp  ,p@',',', ''',pp  ,p' ',pp  ,p@',' ',pp  ,p+',' ',pp  ,p@',',' ',pp  ,p', ' ',pp  ,p@',', ' ',pp  ,p+',', ' ',pp  ,p@',',', ' ',pp  ,p@'' ',pp  ,p@','' ',pp  ,p@','' ',pp  ,p@',','' ',pp  ,p@', '' ',pp  ,p@',', '' ',pp  ,p@',', '' ',pp  ,p@',',', '' ',pp  ,p+'' ',pp  ,p@','' ',pp  ,p+','' ',pp  ,p@',','' ',pp  ,p+', '' ',pp  ,p@',', '' ',pp  ,p+',', '' ',pp  ,p@',',', '' ',pp  ,p@''' ',pp  ,p@',''' ',pp  ,p@',''' ',pp  ,p@',',''' ',pp  ,p@', ''' ',pp  ,p@',', ''' ',pp  ,p@',', ''' ',pp  ,p@',',', ''' ',pp    d ?Q    !!!5!53#O<KKSwS$KKSS    u PQ    !7'#3!'7'7eKK<$SwS͖KK\SwwS       	'#'##'RvvRRg9vQvR       !#733737RvvRRvQv9gR     ]   A  3276767654'&'&'&'476767#"'&'&'& <:LHUYGK<9!>9MG89!03\^wZMw\^2106Y^wvow\^21YGK<9! <:LHUVJI>9!5 9:LHUow\^2
!3\^wvlyZ^2103\^wv     ]   A  4'&'&''7327676767#"'&'&'&547676767'7!98GˑM9>!9<KGYUHL:< 12^\wovw^Y6012^\wMZ̑w^\30UHL:9 ˑ!9>IJVUHL:< !9<KGYvw^\3012^Zylvw^\3!
̑w2^\wo      /  0&767#";!"&?6&+7326?>3m-D",-z$-@5fD5+-V> >-+<D:8INxWXXxtsݓ   H  .  7&76&'>7!2;#"#!732676&+4*-$d<Z1/+-V> >-+5fD5NI8:XD<stݔxXW   g   	   %5<'       
  3	5j'
     
  #3	<
{
     'e    			''6UU  'e    		'''cUU    'e   		'''cUU     'f   			 'fU::U     'f   			 'fU8U     #u   	u-       3!3!!#!#!5         333333#######5Szzz     :O    :  !!" 767>54'&'&'&$  $'&'&547676zeig44hi}&eig44hlzVGFFGrGFFG.48fj~fh4666fj}fk34ūʪ    :O  6 B  " 767>54'&'&'&$  $'&'&547676!!#!5! zeig44hi}&eig44hlzVGFFGrGFFG

48fj~fh4666fj}fk34ūʪ    :O  6 B  " 767>54'&'&'&$  $'&'&547676			'	 zeig44hi}&eig44hlzVGFFGrGFFGsqrq48fj~fh4666fj}fk34ūʪqrqs    /,'  '  '      /c #  5!67676&!!'&'7767:#mDK6<A 2mDK6<A/U5O9:[<JU5O9:[     /c +  5!67676&!!!!'&'7767!5!7JmDK6<A
+!mDK6<A*U5O9:[/U5O9:[    /c #  %'&'77675%67676&B0mDK6<A#X-mDK6<A_U5O9:[vU5O9:[     /c > I  %'&'7767'&'&'&54767676767676&&'&'67k?J "mDK6<AK>>>?J "mDK6<AP;; $0"#>՜U5O9:[>?JKVXKK>?'U5O9:[":;PG*#nb11S$    /  D  65'67673''&'776?&'&'&'&5367676&],:dh^##B<\mDK6<A+(XC>'%*-6HmCK6;B5>\/h[aUTE>&U5O9:[
$A<]Y]7<7*,U5O9:[    /c  '  !!!!67676&!!'&'776 ] lDK6<AnMlDK6<B*U5O9:[(؝T5O9:     /c ; ?  %'&'7767367>54'.'&"67676&!!4.mDK6<A!HD:+.N&N//4-A"mDK6<AlTD&$$$IFY TU5O9:[)N\59,/NԜU5O9:[$UD]YWWIF@   .5  ;  !!&676$&632''&'7767327654'& hMWS,mDK6<A47ʑHWmDK6<A-6aC?^lO $|kU5O9:[e$GAU5O9:[o8(6N;,   /c  S W  67>54'.'&&767676&'&'776?&'&'&'&4767676!!A8+.N&N//44//N&N./(mDK6<AlTD&$$$IFY4.mDK6<BTKG&$$'FJX: N\59,/NN/,95\NU5O9:[$UD]YWWIF&U5O9:[	!KH]XW^BH"   /c # ' +  7!767676&!!'&'776?3!#3tomDK6<A-mDK6<A.#fNU5O9:[hU5O9:[   /s @  '&'7767#5367676&32#5676'&'&#3mDK6<A0t:t%mCK6;B"6*0#"&$#0)7 6U5O9:[t:p:tU5O9:[$#!2-41`##     /c )  '&'7767'	767676&7	#mDK6<A'؆ mDK6<A(;U5O9:[')U5O9:[م    /c 3  76?67676&#4'&''&'7767#ULmDK6<Am?U$
EmDK6<AD'$,k`ԜU5O9:[IbT3<U5O9:[.T     /c 3  '&'7767&'&367676&67653UJmDK6<ArAU$?mDK6<A="$fk^МU5O9:[KbT3nU5O9:[.  /b0  !  #"'&'7327067632&#"0!5!mDK6<AcmDK6<Ah@W6N89\fW6N89\     b  !  #"'&'7327067632&#"0!!mDK6<AcmDK6<A<@W6N89\fW6N89\,     )    H'   H' '      
  5	5<:       
  55:1I11J     
   5	53#<:B      
   55%3#<:1I11J    
   5	5%3#< :s      
   553#:1I11J    
   5	53#<:      
   55	3#<:1I11J     C
  ; B  #"'&'&'&#"5>32326#"'&'&'&#"5>323265j`k^Xbian
^Vgj`k	^Xbk`k^VfUPE:=MSNE;=KPE:=LTPE:>KPN   C
  ; B  #"'&'&'&#"5>32326#"'&'&'&#"5>3232655%j`k^Xbian
^Vgj`k	^Xbk`k^VdUPE:=MSNE;=KPE:=LTPE:>K       %!!'7!5!7%5OOK>uMcu̵N       5!!'7!5!75%OOK>;ju   
 3 :  3267#"'3267#"''7&#"5>327&#"5>325C2'Vgj`@L&zOVgj`kFF2'Xbk`?M&zOXbiajEKUPEq,KUPE:ELTPEs+MSNE8PN     
 3 :  3267#"'3267#"''7&#"5>327&#"5>3255%C2'Vgj`@L&zOVgj`kFF2'Xbk`?M&zOXbiajEKUPEq,KUPE:ELTPEs+MSNE8         5!5!-5%%\ri         !5!!5!%%55%\iw    :   &  #"'&/&#"5>32326!!5j`k^Xbian^VePE:	=MSNE;=KFPN    :   &  #"'&/&#"5>32326!!55%j`k^Xbian^VePE:	=MSNE;=KF   
  " )  #"'&/&#"5>32326-5%%j`k^Xbian^VePE:	=MSNE;=Ko i    
  " )  #"'&/&#"5>32326%%55%j`k^Xbian^VgPE:	=MSNE;=Koi     B      !!!!55%%%|3Wi   B      !5!5%%55%Ei    ,      55%-5%%v i     ,      5%%5%%55%QTi{      
  	55<1       
  5	5<1LJ11       
   	55%3#<1      
   5	53#<1LJ11     m     !5!!5!5`NP     m     5!5!-5:  [     	555PPNP     [     55-5#;    p  $  .#"#"&'532767676325gV^
naibX^k`jUK=;ENSM=:EPKNP    p  $  .#"#"&'53276767632-5gV^
naibX^k`jUK=;ENSM=:EPK       % ,  !!!!.#"#"&'532767676325gV^
naibX^k`j|UK=;ENSM=:EP[NP        % ,  !!!!.#"#"&'53276767632-5gV^
naibX^k`j|UK=;ENSM=:EP[   -@    $  !!!5!676762!!&'&'&!!A%0M
6WYYV7
N0/H7'H?a93[2332[0<f:H'%,     Uy    %!5 %5$|}CUSx|  Uy    7!!  %$}|C|SU    y    7!!!'7! %5$>~~K|}CMuuUSx|    y    7!!!'7!  %$>~~K}|CMuu|SU  ]a     !5!5 %5$-&obn%$ ffuW    ]a     !5!5  %$bo&-nuf $%   a 
    %5$!!!'7!5!7!5!7-&ob,JXv2Jv2D%$ ffuWXuWuW     a 
     %$!!!'7!5!7!5!7bo&-,JXv2Jv2Duf $%tuWuW       ; F  #"'&'&'&#"5>32326#"'&'&'&#"5>32326 %5$j`k^Xbian
^Vgj`s	^Xbk`k^Vg-&obPE:=MSNE;=KPE:=LTPE:>KR%$ ffuW       ; F  #"'&'&'&#"5>32326#"'&'&'&#"5>32326  %$j`k^Xbian
^Vgj`s	^Xbk`k^Vebo&-PE:=MSNE;=KPE:=LTPE:>KRuf $%     y 3 >  3267#"'3267#"''7&#"5>327&#"5>32 %5$C2'Vgj`@L&zOVgj`kFF2'Xbk`?M&zOXbiaj-&obEKUPEq,KUPE:ELTPEs+MSNE8%$ ffuW   y 3 >  3267#"'3267#"''7&#"5>327&#"5>32  %$C2'Vgj`@L&zOVgj`kFF2'Xbk`?M&zOXbiajbo&-EKUPEq,KUPE:ELTPEs+MSNE8uf $%    q     5%55P#PPN   q     55%PfP       !	!'	hC@?)C?r@h       777!%	LC@C{?C@C?        !7	7hC?C)@hC?Ch@        !''	!	L)C?8h@C@?   7 ^P 	   %	!	!%7'!55![$$/]^$$%%-___   7 ^?   %	!![$^$$ 6  ~   	!!6$$$ 6~   	!!~%$     !'	?@h       	??       7	7@h0h@        !	h@0?     7 ^P 	  %	!	![$$/^$$%%    6~ 	  !	!!	!Y%%$$$$    ug   #75!5!7ތwUƑ4&Ƒ    u
g8   	'!5!5'eƑ8w&Ƒ    M?   7!!7wUƑw4Ƒw     M
?8   3'!!'֌eƑ8wƑ   %    !%!!W7 r     %    !!!W7     %    !!,7r<R      %    !!cr<R    !%    	vdxx    !%    	u    !%    	!	uv}x   !%    !	x     %  	      # ) - 1 7  #535#5#5#5##5#5#5##5##53#5#5#5##5qrrrrMrqrrrrrrrtr$ttttrtttttrttr     $#   	!$VVm   $#  	  !	!z0VVOm     Ff    			vvr5kk\SS  Ff   7	\SS    "   	!	R[RG     p (   $   %p@*X֖  MM   	:lLF    MM  	  		N lVF         !3#3#!!#3+3M52238U332         #3!3#3#!#33PfP332FF2mai        !676?3!!#6767MJGgC8۔IIjC 9JH;JI    %      ! !#!#3327676'&+3M.-e3NoIG32p3~lO76dd66N  of 	 )  27676&+! !&'&+;# '&y>=XyK L')L23&fn!10^mR01x<9N}|6?--gfX֔-@@Xsp))\CC݊  ' 0  !7#"''7&7676!37&'&#"6763 	3276?/Z/&| \ccrMz^w:&"U};shg^5xwwt	v\&OeTSetf./+l^j^\\o'.[%IHm)  B?   33!;!"'#&7#3=2\2oIj*"\2=3 ÞN :[ >  J;7    0(    )7676'&'&#"!!67632!!O  .pQQk/fudddnNM,Zgbo77#WVb./ww3  J   !!#!!!&w>b r"j#AL!=  0   !!	3!#!_fy,b7K[-  
   !!!!7!#-#w>-7A    `   !!!!7!0:h70`f     b    7!!7#   !226&#"-m,{^^+ނyz   Sf   % !#3267#!!!6N9Qx"#%      
  !!!!!GZ5gY+  =  %  %!!6$3  !"&"3267654'&k-#m,{YBM/&B/'CނyؑcqPzydQrJ~dPsJ~       a{   0!!!2#76.#"cwf-eD(' A` df<!9!"       
   0!!!!!2#76'&#"ZED2DAq0s.HEMJ*Qo=a][E     {   0!!!!!2#76.#"y(yN\&S+(ę5eD'K9`Zdf<!9!    Z  ~    !!'?67632%7676#&47gmwpp(u	0zoD2E6;X).=8#?H%*K     +     !!!!Mn9d{   ?  `   !!!!fS+9\`V'      j    2!$763676'&ss9``5à-;;/xL^f7)L4j@@TU}dxaEF   < $  32767654'&+7!2!#7#"'&'S*-,/ZN"if.U8$Ybd}'1
XP|@,1.vO|@Mk23  X'{      &"26     676&"6*As`At_zC	lCZ}PPsOO988b	\q     3  )`   !7!7!7!7!7),03+(+`   ggt  d    W1   33!Wpi   K @  .#";#"'&'&'&'3267654'&/&'&5476$!2=ph&qV<0[GNO9@y.B.H?|~&R:
+O{78LP("!2fGq19x@Gx/5ELMTN-&!2gJn.5%       #7!!;#"/&-9-"L_b`9#7,EGx    T|`   !76#"3$3276#"#"!$36*Lw&gK&*P!$PLL;.a.iBtw~D/   $M_    ! &7!3676&7#"7!37!wR**2}.ey+<.gҽ76ј n<RQ~-  9$` #  !"$?!32676&76'"!!$721	)b	+V,U_=-j-˟Y([iq\H	T    V*u 	 .  63 7# 6%#"?3327632#767$-=j-
52/޲`cg8%*.IBa?v7hk) x^cZ3<A,=G)%'	"|   ;-"_   !6#"!!$36i/i</\/-W     ,."_   !6#"!!$32$32!6#"+h`*A3[)t)+g֯.V_Q      $  6#"72767# 7#"7!;7!$32-6tā#_rg,A*|`%(o+8B~+BAk6Y  ?` 	 "  6#&37$36!6#"!7#&7!$%.Yt*rF//53<06JWN  V  `   )6#"!!$3+h~\ʷ8/r4   </$ 	   6#"327!#"7!$321obx*q-*K2g*Vǰ     (_ 	 "  6'"327!7#&76'!!$32$36.ix)f75/j})=/f-]/3U_     H  (  3267$76%'&#"#"?!326323P!qC7){8+J]ׄ17SrX-kxm|;@@]kJmѢE?Jӆ  (  ?   )6#"!'! !76#"$3 A*i (qo*8|{9At  >4_   %#"7!27!367!!7#"6* ;.h8'\8+  <U_   %#"7!77!!"* <,o8Ƭ  p.   !7!"7#"7!327327!B0o㻩&{@Q#g2u7Bڭ2D.Npv^'     >
   !$32!6#"!7#"7!32PE#l**h-%;5raHTQ     <X   !327!!7#"7;OZ/,h>)*a&鮻¯     5$_    6#"$7327! !$36-j(%:+]\TQ;-bMKCFF.Ǳ    <-2J   %#"7#"7!327!327'!!	(*@,r8'\C
+¯议讯i  R-_ 	  -  6&3276#27!7#'!7!"!$!2$!2o{,pR+rtu+,4%/L7*)*AMEnDV-;;1A    6.   %!!!%!%7!!B+l4@?mCR,:8oB{o S{x~    2  A_   $32!6#"!!ge**b'7Q_    <.X`   %#"7!727!!+*:,e;U¯=   <$Q_   %#"7!327! !#732$*<,h8h#UIb讯Wݳ    7-A   !!$32!6#"7$"<c**hB8Q    5%`   27#7!$!6!6#"OOo=:-"Qʾ+qi3֣3AǨ   S    3 7# %!3R+k6,LiJANvE0Jp'ֲ\-XC)    2.%`   !6#"!!$32$32!6#"/_((?1m/;/.[ı`N  /% _    !76#"6 %'73 76#"!!$6?1}T),y6d#>/1Q#஫iweJ|n<  @$j_   ! 7!%6A=?Y$=M  !.9    # 7!327!&'!%&'j$_Z榖1((PdRYQr|7dǿ     2V_   )7#"6#"!!$!232%!1*H)k+<- /*gi 91宫^     ?./   6"!	!3#"$72!-XyGL1ag)VC    M   ! !3 76?!7632hLRJN>H,!.&wH>2aav;<     Q.F   %!7#"!37!>:L81gKl1A5     =._   %!7!#"7!32%!~-* :#4;Fs>F܏    R  $   7!6! 6%!!76"% L.l+/ɯ1fIJ1#	w
"3H+	r29RM[n'  Hn^   !  !767#"&7>?>7!#3J6J>
@ier=]%lpKP8	EE|->U1FE-"B*(ǿbY9>K-%d    R'       !!!Nl-P      !7!!+m3o     !!!j-T-      !7!!3+T       !  76&/.76$32.#"!		85L0%']q=YQVp	#/4W*
EE--K>9Yb(*BCOF.\4:bR1d  '  6   '  6   '  6   '  6   '  6   &    6 '  6   &    6 '  6   &    6 &    6 '  6   &    6 '  6   &    6 &    6 '  6   '  6   '  6   &    6 '  6   &    6 &    6 '  6   '  6   &    6 &    6 &    6 &    6 &    6 &    6 &    6 '  6   &    6 '  6   &    6 &    6 &    6 &    6 '  6   &    6 &    6 &    6 &    6 &    6 &    6 '  6   &    6 &    6 &    6 &    6 &    6 &    6 &    6 &    6 &    6 &    6 &    6 &    6 &    6 &    6 &    6 &    6 '  6   +   %   +   3    "   
   ) $76$!3!#"3 ..aeQp&dpBml  +  J '   b   7   z     )!!!8#N    J9 *   +   .   {   
  )!	!!jkAXr!L       J &  fH     =   +  \ )   +  \
   +   0   +   1   +   /   R 6   +  { 5          ";!! &7>7.'!3:y{XyK3n*Lc'n!a^ZgfX
5+֔-pR y        9   +   +   
    &     .#"!$!2H8Ucr5_X\t&4     	% :     ;     y <            ";";.76$)! &7>[mN[=ctauLPub*M*)BPNMQ<bcaa$+m   {   $        +  \ (      L   )!!!!!*869gC\8%##V#  +   ,   J 2   T 8    (     )6&#"! !  /$Z$>zFE>=6    n
    c  y    #"3! $'&7676$)++jaU3!!}bP#ate	eta  #       #  &     #&     hF`     F`      o=    !!!!2xhL=}   Oe    !!!!1x+2x  i  E{j     X   `+    L
< =  "'0'&#"0# '&5476767!3276763232654'&'!-a~吐ai<*|@^'y|sqÇbajy6@?a&1@v@@v@aJV܍UB20,-00-,0rfqYokqm    @	` ;  #"'&'&"#"'&5476767!32767632326545&'=,~Ph^`xPU0UWo3IPJk9H`VWYC51#`:8sl『KEEKKKQyFSdŸ~A0JRQJ ud      	'     j  `'       \	9  +  03!!# ! '&547 ! "327654'&uuMBrFhgJ.,H.,H{Z+Xΐ^mk?\KwO\LwO  K{  +  !#! '&547 ! 3"3267654'&X:߄_6!"{kWu-uw-`oFP8}嫡B5M3UA5N3U  +  #    !!!!!!!!!ZuSu"uT?XZ+  ?>{ ( 3  !7#"&547#!!!6;7>54&#">32"326?,}Xs"XfW}{oa6p~	ȆQGnd_aM>`?.BC.."QSQ=Fy) 	&    !!676!!3!!!xu1/78\w>>w#[{Ef`qAd `    #)6767!!3!!!:H|OzIHF)+}h 7p7 h`&~i}    	   #$76!!!!38SRn78\m#2N[     `   36767!!!#2?-W$+Ra $uU}`%M  +  
n   !!!!#!N8\NN/    :  0`   !!!!##!i+{l|`0}x_  J' y  2   J5{' y:j R    f      !!!!  !  76   !   JG1JG4..Y..FF>?RFFPoddjk    X{      !!!!"326&   !   a<</>>xkll3B 8(8    f
&  ' y  yT  X{&  ' y:j yj  :Wv        ' / 7 ? G O    %3#%3#3#%3#3#%3# "2> "2>$"2>"2>$"2> "2>$"2>2+ '&' &767"#"&7>;&7> 676 3#LٓMؓX.N.I.O..N.b.O.l.N..O..N.	!!'"Jqœ"J!!&!;Jq:!J8IFP뇇݈ꇇꈈꇇ2뇇뇇뇇0뇇뇇뇇X̬\dfʬ\ʫZee̫ZҜ   bf   !!!2!#32764.#!!!`96
O2=lN9<2"@.{wKR#V6'    EFa`   !!!2+7326?6&+!!p+j.ͪ,#,ͳ.>f^#9fTi`\[S   b     !!;# '&!`9~3<8N}|6~y݊    E  `   !!?&7!p+nU?a.ʯ,Uh`Kf	       X   !2!654.#!!6$3!#""
Q2Y5"A.z+	-f_kwI`^S5(07%]     (   f
   X{   *      #733%мtt        #733$"t        #733s$^ht  w      #7337$4t  ;      3#733#%켼t   ;      #73#3%2мt    ;      #73#3e$n    ;  M    #73#3)$h    ;      #73#3$4    ;      !#73#3%!   ;     3#!!v%F  ;     3#3!!<$F̼    ;  M   3#3!!x$F    ;     3#3!!$Fd    ;     %!!3%   p 	  3'#'Yjh~~LQovoQ   "i 	  #'737GYkg~~KQovoQ   7  	  3#73#>O='   7  	  73737>N>g&&A}      :D~d    >  u   3 ! ! >9.59:$-H#W&#cmZ  N  `   326#26# N212&(6   aY     p= 	  7!$*.P)jcFN1    p V={ 	  7!$3>P)jc@^N1   Sf   !!! !#3267!!uo8o6N9<x_{9#   @F*    676'.#"!!>32#!73267A.pk.ftdn,.-f^
77#'b]Vtv\     F *  !!!!"'&'327676'&+7!!!`90*Nx@:+8\[IJ0uTN!pgts="J&&55cf45^   bH{ ( 0  !!!"'&'32676'&+!"&7#;7F>f>1
SuA;,zioj:_fJI*-ԏ*\2\4\'+`>N	!qgst%)58jcf54  %N7 K8R   c"{ '   4767&54676 .#";#32678@taa53;_Iu|+zLgYtMS9cUB$6rCf@0:c5dBZDwJ?J  O  5` 	  !!!!!)+(+Q\`%  {{ V   y  
0     !!!!!!!!!&Y}K˫$})}Y%R5+%R    -{ 
 2 = H  "326?%!7#"'#7#"&76$!376&#">326763 "326?6;76&#"pLQe}!\Ɓ]E!\Ɓ &3"ws^5ytunmwt/pLQe\qw^LJDMm)f]f]ˢŸUO..5lLJDMm)QnUO {	   *  !  # '&'!!!6764&#" 3267>+Z*k78j׵C*uL/{柗s?<A?NO=KINa_[    #;{ ) 4 @  2#"'&'#"&54$!37654&#">3 6"326?"32654&#--VfE#VXsK8}{oa6p~uhQGna]a{wxcvx>SadKBC..rr}SQ=Fy)join {	    !!!!32767!! '&+ZuLKK$@w?NOq]   #,{ . 9  %#"'&'!"&54$!37654&#">323267!!"326?ߙT6ҟK8}{oa6p~*##AolgQGnQ4Q֥BC..F\B:#'SQ=Fy)  y  	) 
   !!!!!!}K˿X5Y=+%R   -{ 
 (  "326?7#"&76$!376&#">3 !pLQeb!\Ɓ &3"ws^5yt/49gmLJDMm)f]ˢŸUO..    y  	)    !!!!!!!3!&Y^6<5)}K˦g
%RP    -{ " - 0  !7#"&76$!376&#">3 3!3#	"326?!#!\Ɓ &3"ws^5yt/p^g*{pLQe9f]ˢŸUO..wfmLJDMm) F    !!!!!+3276?QY}K˪xkڛ9[/)+
%R>#O     UF{ ) 4  !7#"&76$!376&#">3 !+7326?"326?!\Ɓ &3"ws^5yt2mo4:f;mkm-p[_%)pLQef]ˢŸUO..wz6JJ:KJLJDMm)\  K{    +     !3#!	!!#3Ni2j${<
y޻3^+ os     ?     !3#!	!!#73mh&cug^&    ;   
  %!!!r8۔3l_^         !%!ffh       !3#!!#3+3ƌ832     (   !3#!#3f733     	Q   '   3#! '&#376"!6'&!3276Ch2S2T0zT02HB*	4HzXΦΩZZ]]   {   '   3#! '&7#73676"!&'&!3276!f+@ޅm+BwP--!)-wuO5{wݾw U2JJ2UR[:UU:   f
   +   6!   ! '!   "3276!"3276mmhGFFFF0....°....ddjk  X{ 	  %  "326&   ! '!   ! 6"326&w>[wu>Z!	ll"w>[wu>Z{B ȇ8(8 B        !  3267674'&#!!#3#!7#3Qp%3o^.22_md?'6~]6=} [Vn{  ,   "2676'4'73!>3 #"&'3#!7-ss |+f ]ueC2u76+wA4L2TB5K2֤b]nLV]bWW     % 1  !!#!#"&'&547676;!3267674'&+^.eeCG6g:" Pp%3o~]6=!"G17h=M&)qkmd?'6   V3{ , =  "&'&54767632!>3 #"'!&%232676'4'&#"CBG5g:" 2-af ]ueC2zi(mr^,ts^!#F17h=M&)qkb]nLV4B5K2T     Q|  /  "327654'&# '&547 !  %!''7ǰ.*F-+HtGgkq1#O	$`NuL\LwO̏_mk̎ao\,^@rcD    EVuy  -  %#&'&547 327!3#!7#73"3267654'&S]ueC2Ju7 h++(r,rs,c\nLVG\c*WWB5K2TB5K2T  ,    #  32676'4'&#!#737!3#3!gRp$2p2		
^-]mc?(7F--7~]6>  Vm  ,   "267654'!#737!3#>3 #"&-sssE+f+8]ueC2uwA4L2TB5K2\\b]nLV]     #  32676'4'&#73!3!#3#!7gRp$2p^2^-
		]mc?(7t~]6>200  YVm  ,   "267654'73!>3 #"&'3#!7-ss|+Ffu]ueC2u77+wA4L2TB5K2b]nLV]bWW          )!!\8%#    V`   !!Bf`   V   3 7&#"!!6$32Cxx87<S'ut, 6|w   V{   3 '&?6'&!!63 P*8f.YV--ϡ-f ܇\vs<5F/
 T  `     !=    !7!7!7!D>"">"!   #   !!iq^        #ll+      L    F 	 $  &'&#"3!3#;!"'&7'$'Y{-4Rh*qf-TV't19\j7+T"B&%B/.vyX96   +   !!3!!!NVlw>z
NA
    ?{   !>54&#"!!>323!=qGAolh!cm		Sh 7H9O@F`a^ N.V      " .  %#  47'7676$327!&'&# 3267#7sƳ0/8aw:dsptwc
8p99,oGECECq87;B"##<B"  Fy 	 3 =  "%454&#"'&''676767>327!7 !"&'326732767X2^
Vinhh>?
&IXv7iQ
Q:h^5UY!y^ZX0wwDY4hmGb\zt:8rcy\c`] !65ifkvAS      !!%!!'7Ni{?<OG~+KJ8&hm         !!%!!'7mhu6
OBgmF>D9/fr=           !7!67!!'7%'7NtlmSSRpiA(<%1W		N_4л      {  %  65674&#!>327!!'GAoP= ih!cm
ofa^V(@FVBi)a^ '".      H  # *  !'%!27!.#2767&'&+oO9`4dNh'p"a\ZD.e5J\FxN<uXsoS
=)6O"U     \{   .#"%!'7!>32%Z4ZJ#VMrh'GՂ0!/XH}6;MKjq   +  .#"% !"$'32654&/'%&54 !2R>qiGo`4ɑ=zJ}&e.y 87ZP39"CQq65EMLlT7= %=Kc%   { /  .#"%!"&'32654&/&''7&54$!2{5i]js@^AWA
3s}6atqr@dAbE)s=2473$,Bc$$9:64$('Da      !!!!!0"#767673o8n{{J47=9+y2@!MA    ~    3!733##!##73!7 fXXyEEyYYfiiilbolljj    7E  & 0  6&#"!3267#"&'#"&632>32%"32>&k==B^VXGWTOh~$=R<Ty*>U~Kb"<KJa";9FA>C9GF&&-1//6.01-!````  ?  3`      L 	  	!!!!L{9g6r8+y##     
   	!# $76$!#";e -.bpep+lddm   +     3!3!!+"ml%D+     m   !!um     
   !!!!!!s-n~D2-+2=+o=   !   7!!$$м  ?   '?$D^̠P   <hq   '3#wh$h{    4   '3#w!}$4`         3'3#;j%N>      #76$P   X"   ohX#    45X$    JX%    h   	3#O$h; hX'   h$"   34$#    $$    4   	3#Oq$}id l2V,   U4$'   m4_"Ld    #Ld         	3#OD%0> ^  X1   0  $,     O'Ld   2  $ "0    ;     33;t     ! 7!3276 ! wx~S%463/D?2f:1$ ?    	   #32% 7%6'&7!@ENLBd02W<[ C_+Ofj8Ut!b3NH`:     7 	 "  #"32%! 7%3676#"!! JIJJG|e=1?qiPKGrN'ZY\	HpS=DcxmTE      	 0  #"3267&?!2>3 $767&#"!6%PF>LDb`l]*nsEvpxy8)d8,w;oϿ_F? ?!qfv:3!6oqgh]=FQ   n   ! !376#"!! kn_]--''XT	u    B !   7!32?6+7366#!7! B08lqOOf/.!'q6\l>$ZxGuڞ'   	k 
  '  >?6#"#"32%! 7>7&7! /l@
4|x#DEJHNԁJ?(Yf	N^"4Z@FT\AAX(     	 $  6#"32%!676#! !6>3 44;;b~:k2 ~~{vlLss0\d$MD,HA      '   !6#"!! KV`44`*#/NQvvka;o)   y   ! !2?6+7376'!kmJN`,*$5y5^3E0ڦ?Ǭls~ 	 8  %67$7!263263 ! ?#"!6#"!6#"6!.#"<j4kxPi&l&8$SS))SS#8m2nBw`Vɵ;yyla"4Z     d 	   &'"32%! 7%276'&!! ;6$?;5qq"p:'"R \"	!pQ     f 	   #"32%! )!"63 9lgZ;8>kkV,3V$5j,Yb&          ! 6#"!6#"!!263 $TAm2" 2mCT\vZvt3 -ۖ u7,    <   ! 7!32?6'#3276$!gk9I=56&g8O(8c#.*=?{qgM      ! !32%76%7%m~GJ9 Wq8^0: R{gY      %  ! 76'"!6#"!7$!$$63 hUs?)+%\\$++<%uVVQF
3/:Knl(NwoN       ! !32?6&?!o>8+!$hW3[PÔ    G  !  7276&' ! 76 %'ڵo%@ t@"?j &B)i,B&zHҐ7+?!Fh4bF  p   ! !3276#"!6+73263 rhgV.)OlHLc3Γ+U(oydgq  	 8  6#"327 !#"$7!;2676+73676#"%7!263 )(K,,7/o]#T\E)+2B13G_xxs]^0T@]r?P6vAj4yHc       !$7!32'!727!kkTZh59leojQo53 ljz       -  767 7!2632! ?6#"!6#"!6&'lenY4/80'#.aa."-SrGi}M6FZ|޻9֤x1h        ! !327'767!27!jbHKL.0Vkta#{0Xx25%&W3   `  #  &#" %! 7!76#"!76!7 63 ːC=C86psq35X]3D*Lg)jEGooG     R     76#"6 ! ?6&!! i(	kl,~sj5""-Sa?,;e,XBӇ      $    !32676#!7376&7!6;DR;`/R'Dp &j41+A❅o 4Rp~ژag   	   &#"32! 7!6!JFED-r{|Sk2.S=GEG$    #   7#"!26! !76#"67 ! 9@=CLHbD3]X53osp3j )eGooGE       #  ;7#"!#3#! 7!327# !3'!3fui/l	llMYh.1
7EHRlHQ   	   632%! !6304Y97Myx?k1{5\J1z
    ;   %! 676/%776'732x-+|G85Ɖ(AZMY5ݥ?[nqݠvEa!^w߸wm/T}ڐ   D %  ! !3276+3276'#3276!#73 b{GH/E7EF80ҹ4uNt5BډMB`{dTxnco     j &   !3276'#32?6+3276#7 Xk>7-"07,
/83?F%a4ԤJE{Ibdq~Qp9    jD 	   676#"27&! 3 '!--//7DT{|SDb9Zhhv ?Cz         ! 7!32?6+73$!%
ag*F6'"*.4E%rp0c!9ӗ97a    !  ! 7!327+3>7#!327!kkH/&&M6er.ld^G'Ğ7P۵j ,       $  #&327;6#"! 67&! 3#332&7H$Zf4:hW:*9+UBX{wi^    ! 	 *  #2!&'!7 76#"! 76 %63</P2DBwiI[4'2:295m2(9YF~'A$W>R     R.   #  327$76#"!!"6%!$!2J,t)rt-H8!(J>6-ONiFhI(2:(jn  c7 
 :  #36$67&'!6&#"'67&%&?!3276!V9;K+?<[~?7W=g=7MM	9|iHK-U/M0.8;&1!j@	:AASMl=s[fd5VaYEVg      !!! 7!3276 ! .~te,.gP:R45'7D'}' T  0     !!!!! 7!3276 ! 
99e,.gP:R45'7D'0' T          !!!!!!! 7!3276 7! 88.~e,.gP:R45',D6' TЊ       !!! 7!3276 ! L} e,.gP:R45'7D'' T         !#!!! 7!3276 7! .~e,.gP:R45'*D'' Tƀ    m     3327! 7!3276 ! b23ee,.gP:R45'7D'm[O' T     ?%    !!! !376#"!7! .~]C)^[6]%%pXZGЫP[     ?%Y    !#! !376#"!7! L|H]C)^[6]%%pXZYGЫP[    ?%1      !!!!! !376#"!7!  1.~]C)^[6]%%pXZ &GЫP[     ?%m     3 7! !376#"!7! b23B]C)^[6]%%pXZm[qGЫP[           !!! !&7 5.~v7:EF91u>Gè&$       Y    !#! !&7 B}7:EF91uY:>Gè&$      m     3 7! !&7 b23h7:EF91um[>Gè&$          !!! #"!6#"!!263 .~=E=Ay@@zB;?rK?7/5*{{  0   $  !!!!! #"!6#"!!263 99=E=Ay@@zB;?rK09?7/5*{{        (  !!!!!!! #"!6#"!!263 88.~=E=Ay@@zB;?rKq?7/5*{{  Y     !#! #"!6#"!!263 B}=E=Ay@@zB;?rKYK?7/5*{{     m  %   3327! #"!6#"!!263 b23i=E=Ay@@zB;?rKm[?7/5*{{    %  $  !!! 7!3276#"#6+'3263 J.~)]=^R<["%FTYEG@[KD8dLHHЩCOrC;bhh     %0   (  !!!!! 7!3276#"#6+'3263 E99]=^R<["%FTYEG@[KD8dLH0HЩCOrC;bhh    %&    ,  !!!!!!! 7!3276#"#6+'3263 88t.~8]=^R<["%FTYEG@[KD8dLH&qHЩCOrC;bhh    %Y  $  !#! 7!3276#"#6+'3263 5]=^R<["%FTYEG@[KD8dLHYHЩCOrC;bhh    %m  )   3327! 7!3276#"#6+'3263 b24]=^R<["%FTYEG@[KD8dLHm[pHЩCOrC;bhh    %  '  #'#! 7!3276#"#6+'3263 
lu]=^R<["%FTYEG@[KD8dLHPHЩCOrC;bhh    !/  )   "26764!!"3  ! 5477.5476O I+]!5~>fk{AB!L%LFPEO>eqPB     f  S ' @) "(K	TK
T[KT[KT[KT[KT[KT[X 8Y1 @ i!g'k!z/<<2<<220@&""<9<9#"!76763!#"!!!!!#376763S.L#$$ww.L#$22Ψf2$wwDNNWXDN `` NWX  f  b   @   K
TKT[KT[KT[KT[KT[X 8Y1 @i
g kz/<<<20@! 	
<9<!!#"!!!!#37>3h9o/KE^2%$7CO`` N     f  b  @ K
TKT[KT[KT[KT[KT[X 8Y1 @i	g k	z/<220@	<9<!!!"!!!#37>?#KE/1Ѩ2%)7CO ` N    f  	 ) - @ - * $ .K	TK
T[KT[KT[KT[KT[KT[X  8Y1 @"i-#g*)k#z /<<<<2<<220@5+,-*-!$ $ <9<9</+#"!76763!#"!!!!!!#376763)!S.L#$$ww.K"#kf2$ww\i9DNNWXDN``` NWX     f  	 ) @	 $ *K	TK
T[KT[KT[KT[KT[KT[X  8Y1 @"i#g)k#z /<<<2<<220@.!$ $ <9<9<+#"!76763!!!"!!!!!#376763S.L#$$wwL#$2f2$wwDNNWX)DN `` NWX     ]   5  #"!#37676;2!!;!"'&547#37654'&x"L#$2$vxֺT<
q2\\2G-\2)DR` NWXX=m.6N %% X9j=M N#    a k  &767632!!;!"'&547#37654'&#".#"!"'&'32767654'&/&'&54767632Eu\r2\\2G-\2!E;:5
5j_f67
 _=J8
#osk~5aklti:;o=P9	#@u_]_KgL %% X9j=M ?
	%$)&8
#005	 	(K8f+2ZZ%49
!Q:e(/VV    `
 U  !"'&7676;#"3!'&763!#&!3267!!7#"'&7#!7#"'&7!32676WV$${424*2?O2<	8		@.pkfdmNO,TdmLN+8h@.p1`^]RWS`8bz,!Jp[.w#&)b]wvТb]wy|*<#&     `
 D  !&!7#"&7!32676/&763!!!3276?!!7#"&7h<	'dm,h8		@.p112?O_U 1 5@.pPQfdm,,"X\Тb]p[.w#& 7bzL 69#&VW0b]    V
} ?  !&!7#"&7!32676/&763!>32!7>'.#"!=	& dm,h7		?.p202?O]udn,O@.p,"X\Тb]p[.w#& 7bzb]Von#'/   V
 @ G  !!#"'&7!3267#"'&76763!!3267!!7#"'&77#"3@,2nsdmKM+7h?.p:WV%#|4Ub7		?.plf dmON,S#΃` Lb]w{|*<#&)^]RWLp[.w#&)b]wv S`  Vt V  !&!7#"&7!32676/&763!676323267!!7#"&?676'.#"!=	& dm,h7		?.p202?O]u%vdn,?.Alf ]<cm,@.CQQ,"X\Тb]p[.w#& 7bzZ6/V*<#&)u/VH1 #'WX/  N`'0   2=   302673 '&54(*q"H7=@#%JFL;b     J=`' `D    N  `   676767!#!3M3-6K?1HZ}{@4`b8q~lC%T     i`   	!!>7!>7!9iDz:9StwAC|:I6VtyoKo&SqRoo(XuT   `   #!!7!/rr       `    !!>.#!7!2r\aa#JdM /ÌP!
.JWTn\2#?\     X  S`   !2#!7!2>.#!2B"B|.RU>!@sR`AiiA!7U[v[U7!        !!!!@{KL5$rxvV     `    )!2!>.#:7m }:+YQ`<ئ[|)nQ   Z`   !6&#!7!2@hh(H/8m̏<     bc`   !>.#!#"'73267#7!2MuuH?X+ӭV`*H2@X/C{e.Z[GXR&:]v.S    >o   !7!3!A.
ff
      &@  "d     &@       &@  '"^     &@  '"   `&'      C`&'      `&'       X  `&(     [l`&)  Z    6`&*       J`&+  W      `',   =       c`'-   =    "hm&/  i    P`'0!  u   d`&1     X  `&2      &3       n&5      X  p`&7  l  'm`&8  l   D"`&:        ?`&;      n  ]`&=     i"_&>  =     `&?        `&@   3`&A  c      &,  "e   X  &(       X  &2   v      ?&;        a     367!!!%'#Ha2f#S^0.2S+Dz)= W@;$?@vu ^    #6%$3Aa$orIG?. A 
  72#6$A4}r.9GI  HZ'   /&'&#"#676327X*$V<Q~o<n?#
$0)JI  7I'   327673#"'&'ZX*$PBQ~o<n#
$,-JI   	Ph  % )  !?676?>54&#"67632	FhFPLja>sedPL)(HOJ+,ndd-+&'><fw(*B"!96j=:f>?P1pB    
  	!'!D\fkuou}  7   "  7>76&#7>76&#63 !"'FTmHES
mj{{j"Ď# mihGElkz7XV    d   		^     7      33!6767676&'7"	>DisѕRS*.2yhѴ2%&T]Yl    4  ]   %!%%!(iP'jP&jHPHP   4  ] 	  !%(iP'jbHP         #3!3#:Ү:0:Ү:,},    7  A     !!!!!Yh<p<Zp<+w2          #    $&6$ >7!!!%!.C>8:C{;=Z:={T=:N{{ : {{%t;t.;%t    7     )!c",  7I 
  )!	c",X*59    7  d   	#!",}    4  
W   3		!V<s'?3_3v   4     3		!V<?_v   7  -       !!!!!!!!Y,^<2<<2<<2<<2<+2233        '   2"&6 >."26$ $&6$ |zHjzHm&)em&)e$C>8:CYzYYz~LL~~LL{{ : {{  5  x   676&#"#!63  6!"s7I<vX    7  5   3!	!3Z"+>$           6."26!&'&6$ %VrlK%VrlffC-6\6ra88ara88f::v뉉     5      2$76&   #!6UuƘTQ3kqD"|~i$  R 	  		^!L^^     n   %!%ng|H    4  c   !!fi",g    "   	%			'NDW       %  )7&'&7676?!67>'&+p11蟵,p11蟵l?9t/Q*l?9t/Q*&|{'&|{':.-ZZ--ZZ-          )7!jԆJJ,Jnf}           6&"2  7&  $6&"2G|iG|>MMM<tMG|iG|9|XX|Xrr|XX|X   5       !!63$676&$k"%{zQQO    9     %"'0! %676& &|",k9JOQ    G     !!!G:t,tU,T+U         2"&6%	zzHjzH+YzYYz}usu  7        		'D?fusu}   "    f  }   	!fԹ*5v       !5!5!)5!S2SR    ='  ]j  C   7'k  F  X   :
'j  :  b   ;
'  bk  <   =
'  b  ]     H'j   'j  &j  j     H&k  'j   'j  j     H'j   'j  'j          H'k  'j   &j  j     H&k  'j   'j  k     H'   'j  'j   k       H'j   'j  & j       H'j   'j  & k       H& 'j  'j         H'j  &j  'j  k      H&k  'j  'j  k      H'k   'j  'j          H'j  'k   'k  j     H'k  'k   'j  k     H'j  'k   'k          H&j  'k   'j        H'k   'j  &k        H'   'k   'j      H'j  &j  'j        H'   'j  'j  k     H'j  'j  '           H'   &j  'j  k     H'k  'j  &k        H'k  'j  '           H&j  & 'j          H&k  & 'j          H'   'j  &       H&j  'j  'j   k     H'j  'j   &k  k     H'   'j  'j   k       H&j  'j   'k  k     H'k  'j   &k  k     H'k  'j   '   k       H&j  & 'j   k       H&k  & 'j   k       H'   'j   & k     H'k   'j  &j  k     H'k   'j  &k  k     H'   'j  'k   k       H&j  'k  'k   k     H&k  'k   'k  k     H'   'k  'k   k       H& 'k   &j  k       H& &k  'k   k       H& 'k   '   k     H'   'j  &j  k     H&k  'j  '   k     H'   '   'j  k       H'k  &j  '   k     H'   &k  'k  k     H'   '   'k  k       H'   & &j  k       H'   & &k  k       H'   & '   k     H'j   'j  &j       H&k  'j   'j       H'j   'j  '          H'k  'j   &j       H&k  'j   'k       H'   'j   'k         H'j   & &j         H'j   & &k         H& 'j   '        H&j  'j  'k        H&k  'j  'k        H'k   'j  '          H'k   'k  &j       H'k  'k   &k       H'k   'k  '          H&j  'k   &        H'k   &k  &        H'   'k   &      H&j  'j  '        H'   'j  &k       H'j  '   '          H'   &j  'k       H'k  &k  '        H'k  '   '          H&j  & '          H&k  & '          H'   & '              	3	!#!!"\xw9:4]xi+          " + 3  3%! )327&#'327&+67654'&676'&4`7fa|cF<<FF<<FT1WW1K0aa0]xm%$\x$4~:"#F6F#     9      ! )327&#!36'TMwiffixj'ateeta]6z5]Z         3%!!!!!!2rg]xxxx         3%!!!!!2rg\]xxx2    f  '  &#"32767!5!#   !2&|ԙƘid XʥLyvm^EiA )	x2FFei87R έ      !    !#3!53#!#3xxlxxxxx f` 
   6765%! !#5327654J1pq<x=>]SC. -fxxCC          #3!3	#贴&r]xo@;      	  %3#'!!!4xxxx         !#!!	!3!3_Gb\}Դ!]>+]     ff    %  % 7& 676'&   !   K{@{{{}LLhhg4334Ь01ddjk  -  @  654&/&'&54.#"!"$'532654&/.54$!2~sLL;;Ѥ:'R{hZtӎ⏏|~Z {Ux]\3(5TUQ:O舼3(1kH5DD]b{T(<65[\e]Z%(=%%  
      !!!)#3
\x]       #  %&5#676#!3265! !  6~-?-~rplx**x	V޹"6=    
    
  %!	!	3!0  Xx]A+     =  h     %#!#	!	!	3!	!*5*>  {YZx]==+o   2  @    %#!	#	!	3Uy(6xxz[          !	3!3#\xu    X {  # , 4  %34'&'!5#"&54$!354&#"5>3 5#"676Դd+H#,\H"ӆsUzz@\G;q:4C*SH0xT%<Nf]ˢŸUO..8H9C-   [I 
   #  %27&#"'!!>32  #"&36a\Jt
u[Gb]\]$?hDG    X6{     .#"3267#   !26]Mx]]xL\TWV/XU\ %!!%7*7lzy   [I 
   #  %267.#"%#"  32!!#3C{Ju
tJ\,Ŵ[\Gc\II]bXceh   X
{      %#   !  !32%!&'&#"K"=Zrx~i~fD015:9|c|w<k  /  8    47&3#"!!!#5354763C,3-:9|\WX[5>|x97Fx$xZTV    \FJy 
 ( 4 <  6765#'! !"'&'5326=#" 54 323276'&#"2	
B1xogkf^[JuuJebjjbw/'jj'a'jwx!65b\CA\cvu3.b/    n  N  % )  !4&'.#"!!>32%34'&'3H.p\WvԴMB	
Ĵnn#'ub]Vx2TH%!A1.$    1     3%!!!!\hpx    F1     6765#!+73265!!Z4Mx>fKh9UGs\<         3!!3	#$x\tHѼg$du(           %&5#3#"&5'N3LfT
2U9~\sF     n  {   ! M  334'&'34'&'4&'.#"!!>3267>32!4&'.#"MB	
<MB	
LH.p\Wvm0Wv\H.pp2TH%!A1
2TH%!A1nn#'u`b]w5J b]Vnn#'u  n  N{  % )  !4&'.#"!!>32%34'&'3H.p\WvԴMB	
Ĵnn#'u`b]Vx2TH%!A1zp   X'{ 	   #     !   327&#"676'&!EG$~~RgeQQegR%~~{8(8(x>xH|1xx  [VI{ 
   #  "327&>32  #"&'!!3#6'aJu
tJ\Դ;Gc\]bpeGDh  \VH{ 
   %  "3267.05!!#"  32#0D^Jt
uty\GLb]II\Xi       *{    3.#"!!>32$R/]/\E}*(p-p`ne    jb{  B  >54&/&'&5432654'&/&'&54632.#"!"&'7U?~3k>5>|4bktij$%m?c`cڀs_fcKa?^_o}2	&:/*[E%
&Es%->?FD:	"daƲ ::=@47
,_`γ##     7   
   #&'4'!!;!"&5#53?2j$x{KsXբ&K#D\OxsNxkxJ   dD`  % )  3265!!5#"&5#&'&'&'&5#H.p\Wv,MB	
<`n#'b]xεTH%!A1p       `  
  %#	!	3!Zmxp  H  `     #3#3!!3!!'yp  (  \`    	3%!	3	!	#\d(^pxe9ge    F`    6?'#%3+532767!D1)H]_q>k|!qx6JJx1
Y   \  `    #3!!!5!NNxxxp {   $   +   %   J &   +  J '   +  \ (   +  \ )   J9 *   +   +    '  f -   +   .   +   /   +   0   +   1   J 2   +   3   J 4   +  { 5   R 6   b   7   T 8      9     	% :     ;     y <     =   #{ D   ?j E   L{ F   J G   J{ H   f  R I   )Fuy J   ?  ; K   ?   L  F M   ?   N        ?  { P   ?  ;{ Q   J5{ R  Vj{ S   JVu{ T   ?  \{ U   {{ V   X   W   {s` X     m` Y     j` Z    ^` [    F` \    ` ]  {  '   +  (   +  r)  y  *   +  \+    ,   +  -   Q{.   +  /   +  0  y  1   +  2   +  3   8  4   J5   +  6   +  7   J   +  \8   b  9     y:   Y  s;    <     =    ~>          !!!5|+  NyF  VG0G   V`H    $I   7({J   AVK   fVP{L   :E$M   W`N   ?  o`O    <P  T\`Q     9`R   6VS   J5{T   L`U   V~V   pV{W   K@`X   jV`Y   o(`Z   Vj[  V`\   Va`]   D`^   ;e   {   ^$f   '`   zVj   fF{   D.`k    b/    '  %'&'676 !   !  &#"320&&1&00&x@'&@/DQRDDRQ"//!J/"y"/Imstm	          %3#!5%!!!r6R[TxHxHx        %  %367654'&'"5$  %!5654&5<|>Ic6\D%$XŹSB-yxtY]3neclԵcw|
w     ! & .  !"'5327&#!5!27&#"563 65467>4&4%tU0480,C[ DϹ&d8XqEPJ~D{x<	}@+EDt   \  3     	!#3!3#!!5,\/6]RxQ       #   !!63  '527&'#6676'&!#0W?0mm0]Hx^VY0k{'W-W&   #     )  632  #   !2'& 676'&'&#"2PYkuEʾ&7-xi/D}!mVHNp7@:jX)oac.!0        
  	3%!!!y>+Q]xx]    }   ' / 8 B J  .54$! ! $546 '&'67 %6764'&'&#"27&#"32%כm,CD,d#44#D5#dd#7AC8789BA79BAD,lm,)ž)*ސFQ!">F)$FF(}V"QS!    n     )  %#"  3   !"'5 76'%327&"AYk:4?ʾ&:	7-xi/D}!mVH!v&Y@:j)oc.!      F
!;    3#!.	Y_$     F
!;     7!'!%3	YٍF%=     F
!;    "  4767632"'&'&!'!%30&$I	Yٍ$$%%=    F
!;  , 0 4 8  "'&'&4767632"'&'&4767632!'!%3$$%$%$	Yٍ?H%$HG%=   F
!;  + A E I M  "'&'&4767632"'&'&476762"'&'&4767632!'!%3$$%$H$%$	Yٍ?H%$	JHHG%=    F
!;  + A W [ _ c  476762#"'&'& 4767632"'&'$476762#"'&'4767632"'&'&!'!%3'H$%$%HH$%$%H	Yٍ$JJ%$J%$S$J%=      F
!;  + A W n r v z  476762#"'&'& 4767632"'&'$476762#"'&'4767632"'&'&4767632"'&'&!'!%3'H$%$%HH$%$%H&$I	Yٍ$JJ%$J%$S$J$$%%=  	  F
!;  * @ U i      "'&'&476762"'&'&5476762 "'&'&4767632 "'&'&'476762"'&'.76762 "'&'&54767632!'!%3$H%$HJ&$UJHJH~J&$	YٍRHJ%$HG$$%$HGH%$H%=     F
!;    !  476762"'&'&!'!%3JH	Yٍ$$%%=      F
!;  , 0 4 8  476762"'&'&%4767632"'&'&!'!%3JHd&$I	Yٍ$$%%$$%%=    F
!;  , B F J N  476762"'&'&"'&'&4767632"'&'&4767632!'!%3JH$$%$%$	Yٍ$$%H%$HG%=      F
!;  , A W [ _ c  476762"'&'&"'&'&4767632"'&'&476762"'&'&4767632!'!%3JH$$%$H$%$	Yٍ$$%H%$	JHHG%=   F
!;  + A W m q u y  476762"'&'&476762#"'&'& 4767632"'&'$476762#"'&'4767632"'&'&!'!%3JH]H$%$%HH$%$%H	Yٍ$$%.$JJ%$J%$S$J%=   	  F
!;  + A W m      476762"'&'&476762#"'&'& 4767632"'&'$476762#"'&'4767632"'&'&4767632"'&'&!'!%3JH]H$%$%HH$%$%H&$I	Yٍ$$%.$JJ%$J%$S$J$$%%= 
  F
!;  * @ V k       476762"'&'&%"'&'&476762"'&'&5476762 "'&'&4767632 "'&'&'476762"'&'.76762 "'&'&54767632!'!%3JH$H%$HJ&$UJHJH~J&$	Yٍ$$%HJ%$HG$$%$HGH%$H%=     F
!;  + / 3 7   "'&'&4767632"'&'&5476762!'!%3rJ%$$Jm	Yٍ@H$%$%H%=      F
!;    " 8 N  4767632"'&'&!'!%3"'&'&4767632"'&'&54767620&$I	YٍJ%$$J$$%%=H$%$%H    F
!;  , 0 4 8 N d  "'&'&4767632"'&'&4767632!'!%3"'&'&4767632"'&'&5476762$$%$%$	YٍJ%$$J?H%$HG%=H$%$%H   F
!;  + A E I M c y  "'&'&4767632"'&'&476762"'&'&4767632!'!%3"'&'&4767632"'&'&5476762$$%$H$%$	YٍJ%$$J?H%$	JHHG%=H$%$%H  	  F
!;  ) > S W [ _ t   476762"'&'& 476762"'&'$476762"'&'476762"'&'&!'!%3"'&'&4767632"'&'&476762'HIIHHIIH	YٍI%$$I$II%$I%$S$I%=HIIH    
  F
!;  + A W n r v z    476762#"'&'& 4767632"'&'$476762#"'&'4767632"'&'&4767632"'&'&!'!%3"'&'&4767632"'&'&5476762'H$%$%HH$%$%H&$I	YٍJ%$$J$JJ%$J%$S$J$$%%=H$%$%H    F
!;  * @ U i        "'&'&476762"'&'&5476762 "'&'&4767632 "'&'&'476762"'&'.76762 "'&'&54767632!'!%3"'&'&4767632"'&'&5476762$H%$HJ&$UJHJH~J&$	YٍJ%$$JRHJ%$HG$$%$HGH%$H%=H$%$%H     F
!;  + A E I M   "'&'&4767632%"'&'&4767632"'&'&5476762!'!%3rJ%$$$%$Jm	Yٍ@H$%JI	$%H%=      F
!;  + A X \ ` d   "'&'&4767632%"'&'&4767632"'&'&54767624767632"'&'&!'!%3rJ%$$$%$J&$I	Yٍ@H$%JI	$%H$$%%=    F
!;  + A X n r v z   "'&'&4767632%"'&'&4767632"'&'&5476762"'&'&4767632"'&'&4767632!'!%3rJ%$$$%$JV$$%$%$	Yٍ@H$%JI	$%HH%$HG%=    	  F
!;  + A X m       "'&'&4767632%"'&'&4767632"'&'&5476762"'&'&4767632"'&'&476762"'&'&4767632!'!%3rJ%$$$%$JV$$%$H$%$	Yٍ@H$%JI	$%HH%$	JHHG%= 
  F
!;  + A W m        "'&'&4767632%"'&'&4767632"'&'&5476762%476762#"'&'& 4767632"'&'$476762#"'&'4767632"'&'&!'!%3rJ%$$$%$JH$%$%HH$%$%H	Yٍ@H$%JI	$%Hz$JJ%$J%$S$J%=      F
!;  + A W m         "'&'&4767632%"'&'&4767632"'&'&5476762%476762#"'&'& 4767632"'&'$476762#"'&'4767632"'&'&4767632"'&'&!'!%3rJ%$$$%$JH$%$%HH$%$%H&$I	Yٍ@H$%JI	$%Hz$JJ%$J%$S$J$$%%=    F
!;  + A V l          "'&'&4767632%"'&'&4767632"'&'&5476762!"'&'&476762"'&'&5476762 "'&'&4767632 "'&'&'476762"'&'.76762 "'&'&54767632!'!%3rJ%$$$%$JI$H%$HJ&$UJHJH~J&$	Yٍ@H$%JI	$%HHJ%$HG$$%$HGH%$H%=      F
!;  ) > S W [ _  476762"'&'& 476762"'&'$476762"'&'476762"'&'&!'!%3HIIHHIIH	Yٍ$II%$I%$S$I%=      F
!;    ! 6 K ` u  4767632"'&'&!'!%3476762"'&'& 476762"'&'$476762"'&'476762"'&'&0&$I	YٍHIIHHIIH$I%=m$II%$I%$S$I   	  F
!;  , 0 4 8 N d z   "'&'&4767632"'&'&4767632!'!%3476762#"'&'& 4767632"'&'$476762#"'&'4767632"'&'&$$%$%$	YٍH$%$%HH$%$%H?H%$HG%=m$JJ%$J%$S$J    
  F
!;  + A E I M c y    "'&'&4767632"'&'&476762"'&'&4767632!'!%3476762#"'&'& 4767632"'&'$476762#"'&'4767632"'&'&$$%$H$%$	YٍH$%$%HH$%$%H?H%$	JHHG%=m$JJ%$J%$S$J   F
!;  + A W [ _ c y     476762#"'&'& 4767632"'&'$476762#"'&'4767632"'&'&!'!%3476762#"'&'& 4767632"'&'$476762#"'&'4767632"'&'&'H$%$%HH$%$%H	YٍH$%$%HH$%$%H$JJ%$J%$S$J%=m$JJ%$J%$S$J     F
!;  + A W n r v z      476762#"'&'& 4767632"'&'$476762#"'&'4767632"'&'&4767632"'&'&!'!%3476762#"'&'& 4767632"'&'$476762#"'&'4767632"'&'&'H$%$%HH$%$%H&$I	YٍH$%$%HH$%$%H$JJ%$J%$S$J$$%%=m$JJ%$J%$S$J   F
!;  * @ U i          "'&'&476762"'&'&5476762 "'&'&4767632 "'&'&'476762"'&'.76762 "'&'&54767632!'!%3476762#"'&'& 4767632"'&'$476762#"'&'4767632"'&'&$H%$HJ&$UJHJH~J&$	YٍH$%$%HH$%$%HRHJ%$HG$$%$HGH%$H%=m$JJ%$J%$S$J    F
!;    ! 7 M c y  7!'!%3476762#"'&'& 4767632"'&'$476762#"'&'4767632"'&'&476762"'&'&	YٍH$%$%HH$%$%HJHF%=m$JJ%$J%$S$J$$%  	  F
!;    " 8 N d z   4767632"'&'&!'!%3476762#"'&'& 4767632"'&'$476762#"'&'4767632"'&'&476762"'&'&0&$I	YٍH$%$%HH$%$%HJH$$%%=m$JJ%$J%$S$J$$% 
  F
!;  , 0 4 8 N d z    "'&'&4767632"'&'&4767632!'!%3476762#"'&'& 4767632"'&'$476762#"'&'4767632"'&'&476762"'&'&$$%$%$	YٍH$%$%HH$%$%HJH?H%$HG%=m$JJ%$J%$S$J$$%      F
!;  + A E I M c y     "'&'&4767632"'&'&476762"'&'&4767632!'!%3476762#"'&'& 4767632"'&'$476762#"'&'4767632"'&'&476762"'&'&$$%$H$%$	YٍH$%$%HH$%$%HJH?H%$	JHHG%=m$JJ%$J%$S$J$$%   F
!;  + A W [ _ c y      476762#"'&'& 4767632"'&'$476762#"'&'4767632"'&'&!'!%3476762#"'&'& 4767632"'&'$476762#"'&'4767632"'&'&476762"'&'&'H$%$%HH$%$%H	YٍH$%$%HH$%$%HJH$JJ%$J%$S$J%=m$JJ%$J%$S$J$$%     F
!;  + A W n r v z       476762#"'&'& 4767632"'&'$476762#"'&'4767632"'&'&4767632"'&'&!'!%3476762#"'&'& 4767632"'&'$476762#"'&'4767632"'&'&476762"'&'&'H$%$%HH$%$%H&$I	YٍH$%$%HH$%$%HJH$JJ%$J%$S$J$$%%=m$JJ%$J%$S$J$$%   F
!;  * @ U i           "'&'&476762"'&'&5476762 "'&'&4767632 "'&'&'476762"'&'.76762 "'&'&54767632!'!%3476762#"'&'& 4767632"'&'$476762#"'&'4767632"'&'&476762"'&'&$H%$HJ&$UJHJH~J&$	YٍH$%$%HH$%$%HJHRHJ%$HG$$%$HGH%$H%=m$JJ%$J%$S$J$$%  	  F
!;    " : P f |   7!'!%3"'&'&54767632"'&'&54767632 "'&'&4767632"'&'&'476762"'&'.76762 "'&'&54767632	Yٍ$$%%$$%J%$0$H%$HJ%$F%=%$J&$$%H$%$%HH$%$%H 
  F
!;    " 9 Q g }    4767632"'&'&!'!%3"'&'&54767632"'&'&54767632 "'&'&4767632"'&'&'476762"'&'.76762 "'&'&547676320&$I	Yٍ$$%%$$%J%$0$H%$HJ%$$$%%=%$J&$$%H$%$%HH$%$%H      F
!;  , 0 4 8 O g }     "'&'&4767632"'&'&4767632!'!%3"'&'&54767632"'&'&54767632 "'&'&4767632"'&'&'476762"'&'.76762 "'&'&54767632$$%$%$	Yٍ$$%%$$%J%$0$H%$HJ%$?H%$HG%=%$J&$$%H$%$%HH$%$%H     F
!;  + A E I M d |      "'&'&4767632"'&'&476762"'&'&4767632!'!%3"'&'&54767632"'&'&54767632 "'&'&4767632"'&'&'476762"'&'.76762 "'&'&54767632$$%$H$%$	Yٍ$$%%$$%J%$0$H%$HJ%$?H%$	JHHG%=%$J&$$%H$%$%HH$%$%H      F
!;  + A W [ _ c z       476762#"'&'& 4767632"'&'$476762#"'&'4767632"'&'&!'!%3"'&'&54767632"'&'&54767632 "'&'&4767632"'&'&'476762"'&'.76762 "'&'&54767632'H$%$%HH$%$%H	Yٍ$$%%$$%J%$0$H%$HJ%$$JJ%$J%$S$J%=%$J&$$%H$%$%HH$%$%H    F
!;  + A W n r v z       476762#"'&'& 4767632"'&'$476762#"'&'4767632"'&'&4767632"'&'&!'!%3"'&'&54767632"'&'&54767632 "'&'&4767632"'&'&'476762"'&'.76762 "'&'&54767632'H$%$%HH$%$%H&$I	Yٍ$$%%$$%J%$0$H%$HJ%$$JJ%$J%$S$J$$%%=%$J&$$%H$%$%HH$%$%H      F
!;  * @ U i           "'&'&476762"'&'&5476762 "'&'&4767632 "'&'&'476762"'&'.76762 "'&'&54767632!'!%3"'&'&5476762"'&'&5476762 "'&'&4767632"'&'.76762"'&'.76762 "'&'&4767632$H%$HI&$UIHIH}I&$	Yٍ$I%$II%$0$H%$HI%$RHI%$HG$$%$HGH%$H%=%$I&$IHIIHHIIH    m    !5!!$f    m     !!7!!!!%=m?'   m    "  2#"'&'&47676!!7!!!!E$$%%=&$Ih?'   m  + / 3 7  476762#"'&'&476762"'&'&!!7!!!!H%$HG%=|$I;$%$?'     m  + A E I M  476762#"'&'&476762"'&'&476762"'&'&!!7!!!!H%$	JHHG%=|$$%2$H.$%$?'    m  + A W [ _ c  2"'&'&547676 2#"'&'&47672#"'&'&547672"'&'&47676!!7!!!!N$JJ%$J%$S$J%=H$%$%H"H$%$%Hq?'     m  + A W n r v z  2"'&'&547676 2#"'&'&47672#"'&'&547672"'&'&476762#"'&'&47676!!7!!!!N$JJ%$J%$S$J$$%%=H$%$%H"H$%$%H	&$Ih?'  	 m  * @ U i      %476762"'&'&%4767632"'&'&476762"'&' 4767672"'&'$4767>"'&' 4767632'&'!!7!!!!HJ%$HG$$%$HGH%$H%=$H%$H3J&$JHJHJ&$?'     m    !  2#"'&'&47676!!7!!!!E$$%%=kJH?'     m  , 0 4 8  2#"'&'&476762#"'&'&47676!!7!!!!E$$%%$$%%=iJH&$Ih?'   m  , B F J N  2#"'&'&47676476762#"'&'&476762"'&'&!!7!!!!E$$%H%$HG%=kJH$$%;$%$?'     m  , A W [ _ c  2#"'&'&47676476762#"'&'&476762"'&'&476762"'&'&!!7!!!!E$$%H%$	JHHG%=kJH$$%2$H.$%$?'  m  + A W m q u y  2#"'&'&476762"'&'&547676 2#"'&'&47672#"'&'&547672"'&'&47676!!7!!!!E$$%.$JJ%$J%$S$J%=kJHH$%$%H"H$%$%Hq?'   	 m  + A W m      2#"'&'&476762"'&'&547676 2#"'&'&47672#"'&'&547672"'&'&476762#"'&'&47676!!7!!!!E$$%.$JJ%$J%$S$J$$%%=kJHH$%$%H"H$%$%H	&$Ih?' 
 m  * @ V k       2#"'&'&47676476762"'&'&%4767632"'&'&476762"'&' 4767672"'&'$4767>"'&' 4767632'&'!!7!!!!E$$%HJ%$HG$$%$HGH%$H%=kJH&$H%$H3J&$JHJHJ&$?'    m  + / 3 7   476762#"'&'4767632"'&'&!!7!!!!H$%$%H%=J%$S$J?'     m    " 8 N  2#"'&'&47676!!7!!!!476762#"'&'4767632"'&'&E$$%%=H$%$%H&$Ih?'IJ%$S$J   m  , 0 4 8 N d  476762#"'&'&476762"'&'&!!7!!!!476762#"'&'4767632"'&'&H%$HG%=H$%$%H|$$%;$%$?'IJ%$S$J   m  + A E I M c y  476762#"'&'&476762"'&'&476762"'&'&!!7!!!!476762#"'&'4767632"'&'&H%$	JHHG%=H$%$%H|$$%2$H.$%$?'IJ%$S$J   	 m  + A W [ _ c y   2"'&'&547676 2#"'&'&47672#"'&'&547672"'&'&47676!!7!!!!476762#"'&'4767632"'&'&N$JJ%$J%$S$J%=H$%$%HH$%$%H"H$%$%Hq?'IJ%$S$J    
 m  + A W n r v z    2"'&'&547676 2#"'&'&47672#"'&'&547672"'&'&476762#"'&'&47676!!7!!!!476762#"'&'4767632"'&'&N$JJ%$J%$S$J$$%%=H$%$%HH$%$%H"H$%$%H	&$Ih?'IJ%$S$J   m  * @ U i        %476762"'&'&%4767632"'&'&476762"'&' 4767672"'&'$4767>"'&' 4767632'&'!!7!!!!476762#"'&'4767632"'&'&HJ%$HG$$%$HGH%$H%=H$%$%H$H%$H3J&$JHJHJ&$?'IJ%$S$J     m  + A E I M   476762#"'&'476762"'&'&4767632"'&'&!!7!!!!H$%JI	$%H%=J%$J$$%.$J?'     m  + A X \ ` d   476762#"'&'476762"'&'&4767632"'&'&2#"'&'&47676!!7!!!!H$%JI	$%H$$%%=J%$J$$%.$J+&$Ih?'   m  + A X n r v z   476762#"'&'476762"'&'&4767632"'&'&476762#"'&'&476762"'&'&!!7!!!!H$%JI	$%HH%$HG%=J%$J$$%.$J$$%;$%$?'    	 m  + A X m       476762#"'&'476762"'&'&4767632"'&'&476762#"'&'&476762"'&'&476762"'&'&!!7!!!!H$%JI	$%HH%$	JHHG%=J%$J$$%.$J$$%2$H.$%$?' 
 m  + A W m        476762#"'&'476762"'&'&4767632"'&'&2"'&'&547676 2#"'&'&47672#"'&'&547672"'&'&47676!!7!!!!H$%JI	$%Hz$JJ%$J%$S$J%=J%$J$$%.$J4H$%$%H"H$%$%Hq?'     m  + A W m         476762#"'&'476762"'&'&4767632"'&'&2"'&'&547676 2#"'&'&47672#"'&'&547672"'&'&476762#"'&'&47676!!7!!!!H$%JI	$%Hz$JJ%$J%$S$J$$%%=J%$J$$%.$J4H$%$%H"H$%$%H	&$Ih?'   m  + A V l          476762#"'&'476762"'&'&4767632"'&'&476762"'&'&%4767632"'&'&476762"'&' 4767672"'&'$4767>"'&' 4767632'&'!!7!!!!H$%JI	$%HHJ%$HG$$%$HGH%$H%=J%$J$$%.$J$H%$H3J&$JHJHJ&$?'     m  ) > S W [ _  2"'&'&47676 2#"'&'&47672#"'&'&47672"'&'&47676!!7!!!!N$II%$I%$S$I%=tHIIH"HIIH?'     m    ! 6 K ` u  2"'&'&47676!!7!!!!2"'&'&47676 2#"'&'&47672#"'&'&47672"'&'&47676E$I%=m$II%$I%$S$I&$Ih?'HIIH"HIIH   	 m  , 0 4 8 N d z   476762#"'&'&476762"'&'&!!7!!!!2"'&'&547676 2#"'&'&47672#"'&'&547672"'&'&47676H%$HG%=m$JJ%$J%$S$J|$$%;$%$?'H$%$%H"H$%$%H 
 m  + A E I M c y    476762#"'&'&476762"'&'&476762"'&'&!!7!!!!2"'&'&547676 2#"'&'&47672#"'&'&547672"'&'&47676H%$	JHHG%=m$JJ%$J%$S$J|$$%2$H.$%$?'H$%$%H"H$%$%H   m  + A W [ _ c y     2"'&'&547676 2#"'&'&47672#"'&'&547672"'&'&47676!!7!!!!2"'&'&547676 2#"'&'&47672#"'&'&547672"'&'&47676N$JJ%$J%$S$J%=m$JJ%$J%$S$JH$%$%H"H$%$%Hq?'H$%$%H"H$%$%H    m  ) > S i m q u      2"'&'&47676 2#"'&'&47672#"'&'&47672"'&'&476762"'&'&47676!!7!!!!2"'&'&47676 2#"'&'&47672#"'&'&47672"'&'&47676N$II%$I%$S$I$I%=m$II%$I%$S$IHIIH"HIIH	&$Ih?'HIIH"HIIH    m  * @ U i          %476762"'&'&%4767632"'&'&476762"'&' 4767672"'&'$4767>"'&' 4767632'&'!!7!!!!2"'&'&547676 2#"'&'&47672#"'&'&547672"'&'&47676HJ%$HG$$%$HGH%$H%=m$JJ%$J%$S$J$H%$H3J&$JHJHJ&$?'H$%$%H"H$%$%H    m    ! 7 M c y  !!7!!!!2"'&'&547676 2#"'&'&47672#"'&'&547672"'&'&476762#"'&'&47676%=m$JJ%$J%$S$J$$%m?'H$%$%H"H$%$%H	JH 	 m    " 8 N d z   2#"'&'&47676!!7!!!!2"'&'&547676 2#"'&'&47672#"'&'&547672"'&'&476762#"'&'&47676E$$%%=m$JJ%$J%$S$J$$%&$Ih?'H$%$%H"H$%$%H	JH 
 m  + / 3 7 L a v    476762#"'&'&476762"'&'&!!7!!!!2"'&'&47676 2#"'&'&47672#"'&'&47672"'&'&476762"'&'&47676H%$HG%=m$II%$I%$S$I$I|$I;$%$?'HIIH"HIIH	JH  m  + A E I M c y     476762#"'&'&476762"'&'&476762"'&'&!!7!!!!2"'&'&547676 2#"'&'&47672#"'&'&547672"'&'&476762#"'&'&47676H%$	JHHG%=m$JJ%$J%$S$J$$%|$$%2$H.$%$?'H$%$%H"H$%$%H	JH   m  + A W [ _ c y      2"'&'&547676 2#"'&'&47672#"'&'&547672"'&'&47676!!7!!!!2"'&'&547676 2#"'&'&47672#"'&'&547672"'&'&476762#"'&'&47676N$JJ%$J%$S$J%=m$JJ%$J%$S$J$$%H$%$%H"H$%$%Hq?'H$%$%H"H$%$%H	JH    m  + A W n r v z       2"'&'&547676 2#"'&'&47672#"'&'&547672"'&'&476762#"'&'&47676!!7!!!!2"'&'&547676 2#"'&'&47672#"'&'&547672"'&'&476762#"'&'&47676N$JJ%$J%$S$J$$%%=m$JJ%$J%$S$J$$%H$%$%H"H$%$%H	&$Ih?'H$%$%H"H$%$%H	JH  m  * @ U i           %476762"'&'&%4767632"'&'&476762"'&' 4767672"'&'$4767>"'&' 4767632'&'!!7!!!!2"'&'&547676 2#"'&'&47672#"'&'&547672"'&'&476762#"'&'&47676HJ%$HG$$%$HGH%$H%=m$JJ%$J%$S$J$$%$H%$H3J&$JHJHJ&$?'H$%$%H"H$%$%H	JH   	 m    " : P f |   !!7!!!!4767632"'&'&%4767632#"'&'&476762"'&'4767672"'&'&%4767>#"'&'& 4767632'&'%=%$J&$$%H$%$%HH$%$%Hm?'|$$%%$$%3J%$$H%$HkJ%$    
 m    " 9 Q g }    2#"'&'&47676!!7!!!!4767632"'&'&%4767632#"'&'&476762"'&'4767672"'&'&%4767>#"'&'& 4767632'&'E$$%%=%$J&$$%H$%$%HH$%$%H&$Ih?'|$$%%$$%3J%$$H%$HkJ%$     m  , 0 4 8 O g }     476762#"'&'&476762"'&'&!!7!!!!4767632"'&'&%4767632#"'&'&476762"'&'4767672"'&'&%4767>#"'&'& 4767632'&'H%$HG%=%$J&$$%H$%$%HH$%$%H|$$%;$%$?'|$$%%$$%3J%$$H%$HkJ%$     m  + A E I M d |      476762#"'&'&476762"'&'&476762"'&'&!!7!!!!4767632"'&'&%4767632#"'&'&476762"'&'4767672"'&'&%4767>#"'&'& 4767632'&'H%$	JHHG%=%$J&$$%H$%$%HH$%$%H|$$%2$H.$%$?'|$$%%$$%3J%$$H%$HkJ%$  m  + A W [ _ c z       2"'&'&547676 2#"'&'&47672#"'&'&547672"'&'&47676!!7!!!!4767632"'&'&%4767632#"'&'&476762"'&'4767672"'&'&%4767>#"'&'& 4767632'&'N$JJ%$J%$S$J%=%$J&$$%H$%$%HH$%$%HH$%$%H"H$%$%Hq?'|$$%%$$%3J%$$H%$HkJ%$   m  ) > S i m q u        2"'&'&47676 2#"'&'&47672#"'&'&47672"'&'&476762"'&'&47676!!7!!!!4767632"'&'&%4767632"'&'&476762'&'4767>"'&'&%4767>"'&'& 476762'&'N$II%$I%$S$I$I%=%$I&$IHIIHHIIHHIIH"HIIH	&$Ih?'|$I%$I4I%$$H%$HlI%$     m  * @ U i           %476762"'&'&%4767632"'&'&476762"'&' 4767672"'&'$4767>"'&' 4767632'&'!!7!!!!4767632"'&'&%4767632"'&'&476762'&'4767>"'&'&%4767>"'&'& 476762'&'HI%$HG$$%$HGH%$H%=%$I&$IHIIHHIIH$H%$H4I&$IHIHI&$?'|$I%$I4I%$$H%$HlI%$     gm     "3!254#%!2#!"54!xxxxAA,Gxxxyxxy  gm  $ 0 3 ;   #"'##65##"5476 "3!254#%!2#!"54!3#'!#A;	lB;;Bl	;"xxxxAAKҚ DDy~&%Nkk̛N%&VxxxyxxyU    gm  $ 0 I   #"'##65##"5476 "3!254#%!2#!"54!!567 54&#"5>32A;	lB;;Bl	;"xxxxAA"?XhU4zHM98y~&%Nkk̛N%&Vxxxyxxy?rn81^BQ##{l0    gm  $ 0 Y   #"'##65##"5476 "3!254#%!2#!"54#"&'532654&+532654&#"5>32A;	lB;;Bl	;"xxxxAA\e9}F4wCmxolV^^ad_(fQI7Zy~&%Nkk̛N%&VxxxyxxymR|yOFJLl?<:=svcE`    gm  $ 0 3 >   #"'##65##"5476 "3!254#%!2#!"54	!33##5!5A;	lB;;Bl	;"xxxxAA5by~&%Nkk̛N%&Vxxxyxxy]my     gm  $ 0 Q   #"'##65##"5476 "3!254#%!2#!"54!!67632#"&'53264&#"A;	lB;;Bl	;"xxxxAAy^^a`<~B9>>Eoo4h6y~&%Nkk̛N%&Vxxxyxxy_	MLKJqff    gm  $ 0 @ `   #"'##65##"5476 "3!254#%!2#!"54"327654'&&'&#"67632#"&547632A;	lB;;Bl	;"xxxxAAGX3333XW33331221DD
&9:DTTXWll122y~&%Nkk̛N%&Vxxxyxxy45[Z4554Z[54bg
KL1LMONuv	     gm  $ 0 7   #"'##65##"5476 "3!254#%!2#!"54!#!A;	lB;;Bl	;"xxxxAAiH3y~&%Nkk̛N%&Vxxxyxxy0   gm  $ 0 = [ j   #"'##65##"5476 "3!254#%!2#!"54 "32764'%&'&546 #"'&54767327654'&"A;	lB;;Bl	;"xxxxAA55j]\655T./RQ./SZ85UVUV56-/.UQ100/0/y~&%Nkk̛N%&Vxxxyxxy[,+KLV,++]12Hdt::dJ01:7PyAAAAyN98?&%%$A?&%%$   gm  $ 0 P _   #"'##65##"5476 "3!254#%!2#!"54532767#"&547632#"'&2654'&#"A;	lB;;Bl	;"xxxxAA.1220DC
#<9EWXWXkl122Xf33XU5443y~&%Nkk̛N%&Vxxxyxxyg
KK/MNoouv	rh\Z4554Z\44    gm  $ 0 > J Q   #"'##65##"5476 "3!254#%!2#!"54 "27654/2#"&546573A;	lB;;Bl	;"xxxxAA2332233yty~&%Nkk̛N%&VxxxyxxyVVVVVVV)t'  gm  $ 0 =   #"'##65##"5476 "3!254#%!2#!"543+53265A;	lB;;Bl	;"xxxxAAA@1(TFy~&%Nkk̛N%&VxxxyxxyܕFE`Tl  gm  $ 0 J   #"'##65##"5476 "3!254#%!2#!"54#"&54632.#"3267A;	lB;;Bl	;"xxxxAA<1e9ɴ9f0/j6||{}7j.y~&%Nkk̛N%&Vxxxyxxyt"$$"   gm   4 @ L  "#"&54632&#"32 #"'##65##"5476 "3!254#%!2#!"54VX~_
Ua`UU`aA;	lB;;Bl	;"xxxxAA,ۥ(j8pny~&%Nkk̛N%&Vxxxyxxy   gm  $ 0 ;   #"'##65##"5476 "3!254#%!2#!"5433	##A;	lB;;Bl	;"xxxxAAjixy~&%Nkk̛N%&VxxxyxxyazBm     gm  ! - 0 8  67632	&547632"3!254#%!2#!"54!3#'!#7>T>}}?V<7xxxxAAKҚ DDv>G-;n;-GAxxxyxxyU    gm  ! - F  67632	&547632"3!254#%!2#!"54!!567 54&#"5>327>T>}}?V<7xxxxAA"?XhU4zHM98v>G-;n;-GAxxxyxxy?rn81^BQ##{l0    gm  ! - V  67632	&547632"3!254#%!2#!"54#"&'532654&+532654&#"5>327>T>}}?V<7xxxxAA\e9}F4wCmxolV^^ad_(fQI7Zv>G-;n;-GAxxxyxxymR|yOFJLl?<:=svcE`    gm  ! - 0 ;  67632	&547632"3!254#%!2#!"54	!33##5!57>T>}}?V<7xxxxAA5bv>G-;n;-GAxxxyxxy]my     gm  ! - N  67632	&547632"3!254#%!2#!"54!!67632#"&'53264&#"7>T>}}?V<7xxxxAAy^^a`<~B9>>Eoo4h6v>G-;n;-GAxxxyxxy_	MLKJqff    gm  ! - = ]  67632	&547632"3!254#%!2#!"54"327654'&&'&#"67632#"&5476327>T>}}?V<7xxxxAAGX3333XW33331221DD
&9:DTTXWll122v>G-;n;-GAxxxyxxy45[Z4554Z[54bg
KL1LMONuv	     gm  ! - 4  67632	&547632"3!254#%!2#!"54!#!7>T>}}?V<7xxxxAAiH3v>G-;n;-GAxxxyxxy0   gm  ! - : X g  67632	&547632"3!254#%!2#!"54 "32764'%&'&546 #"'&54767327654'&"7>T>}}?V<7xxxxAA55j]\655T./RQ./SZ85UVUV56-/.UQ100/0/v>G-;n;-GAxxxyxxy[,+KLV,++]12Hdt::dJ01:7PyAAAAyN98?&%%$A?&%%$   gm  ! - M \  67632	&547632"3!254#%!2#!"54532767#"&547632#"'&2654'&#"7>T>}}?V<7xxxxAA.1220DC
#<9EWXWXkl122Xf33XU5443v>G-;n;-GAxxxyxxyg
KK/MNoouv	rh\Z4554Z\44    gm  ! - ; G N  67632	&547632"3!254#%!2#!"54 "27654/2#"&5465737>T>}}?V<7xxxxAA2332233ytv>G-;n;-GAxxxyxxyVVVVVVV)t'  gm  ! - :  67632	&547632"3!254#%!2#!"543+532657>T>}}?V<7xxxxAAA@1(TFv>G-;n;-GAxxxyxxyܕFE`Tl  gm  ! - G  67632	&547632"3!254#%!2#!"54#"&54632.#"32677>T>}}?V<7xxxxAA<1e9ɴ9f0/j6||{}7j.v>G-;n;-GAxxxyxxyt"$$"   xm   1 = I  "#"&54632&#"3267632	&547632"3!254#%!2#!"54VX~_
Ua`UU`a7>T>}}?V<7xxxxAA,ۥ(j8p0v>G-;n;-GAxxxyxxy  gm  ! - 8  67632	&547632"3!254#%!2#!"5433	##7>T>}}?V<7xxxxAAjixv>G-;n;-GAxxxyxxyazBm     gm    ! )  0	00"3!254#%!2#!"54!3#'!#hfxxxxAAKҚ DD
xxxyxxyU     gm    7  0	00"3!254#%!2#!"54!!567 54&#"5>32hfxxxxAA"?XhU4zHM98
xxxyxxy?rn81^BQ##{l0     gm    G  0	00"3!254#%!2#!"54#"&'532654&+532654&#"5>32hfxxxxAA\e9}F4wCmxolV^^ad_(fQI7Z
xxxyxxymR|yOFJLl?<:=svcE`     gm    ! ,  0	00"3!254#%!2#!"54	!33##5!5hfxxxxAA5b
xxxyxxy]my  gm    ?  0	00"3!254#%!2#!"54!!67632#"&'53264&#"hfxxxxAAy^^a`<~B9>>Eoo4h6
xxxyxxy_	MLKJqff     gm    . N  0	00"3!254#%!2#!"54"327654'&&'&#"67632#"&547632hfxxxxAAGX3333XW33331221DD
&9:DTTXWll122
xxxyxxy45[Z4554Z[54bg
KL1LMONuv	  gm    %  0	00"3!254#%!2#!"54!#!hfxxxxAAiH3
xxxyxxy0    gm    + I X  0	00"3!254#%!2#!"54 "32764'%&'&546 #"'&54767327654'&"hfxxxxAA55j]\655T./RQ./SZ85UVUV56-/.UQ100/0/
xxxyxxy[,+KLV,++]12Hdt::dJ01:7PyAAAAyN98?&%%$A?&%%$    gm    > M  0	00"3!254#%!2#!"54532767#"&547632#"'&2654'&#"hfxxxxAA.1220DC
#<9EWXWXkl122Xf33XU5443
xxxyxxyg
KK/MNoouv	rh\Z4554Z\44     gm    , 8 ?  0	00"3!254#%!2#!"54 "27654/2#"&546573hfxxxxAA2332233yt
xxxyxxyVVVVVVV)t'   gm    +  0	00"3!254#%!2#!"543+53265hfxxxxAAA@1(TF
xxxyxxyܕFE`Tl   gm    8  0	00"3!254#%!2#!"54#"&54632.#"3267hfxxxxAA<1e9ɴ9f0/j6||{}7j.
xxxyxxyt"$$"    gm   " . :  0	00"#"&54632&#"32"3!254#%!2#!"54hf5VX~_
Ua`UU`auxxxxAAAۥ(j8poxxxyxxy    gm    )  0	00"3!254#%!2#!"5433	##hfxxxxAAjix
xxxyxxyazBm  gm 	  !  !	!"3!254#%!2#!"540xxxxAA1GG}xxxyxxy     gm # / ; > F  65'&'&547632&54 632'"3!254#%!2#!"54!3#'!#U9H5?K1||1K?5I9xxxxAAKҚ DDLC4$jj$4FLxxxyxxyU     gm # / ; T  65'&'&547632&54 632'"3!254#%!2#!"54!!567 54&#"5>32U9H5?K1||1K?5I9xxxxAA"?XhU4zHM98LC4$jj$4FLxxxyxxy?rn81^BQ##{l0     gm # / ; d  65'&'&547632&54 632'"3!254#%!2#!"54#"&'532654&+532654&#"5>32U9H5?K1||1K?5I9xxxxAA\e9}F4wCmxolV^^ad_(fQI7ZLC4$jj$4FLxxxyxxymR|yOFJLl?<:=svcE`     gm # / ; > I  65'&'&547632&54 632'"3!254#%!2#!"54	!33##5!5U9H5?K1||1K?5I9xxxxAA5bLC4$jj$4FLxxxyxxy]my  gm # / ; \  65'&'&547632&54 632'"3!254#%!2#!"54!!67632#"&'53264&#"U9H5?K1||1K?5I9xxxxAAy^^a`<~B9>>Eoo4h6LC4$jj$4FLxxxyxxy_	MLKJqff     gm # / ; K k  65'&'&547632&54 632'"3!254#%!2#!"54"327654'&&'&#"67632#"&547632U9H5?K1||1K?5I9xxxxAAGX3333XW33331221DD
&9:DTTXWll122LC4$jj$4FLxxxyxxy45[Z4554Z[54bg
KL1LMONuv	  gm # / ; B  65'&'&547632&54 632'"3!254#%!2#!"54!#!U9H5?K1||1K?5I9xxxxAAiH3LC4$jj$4FLxxxyxxy0    gm # / ; H f u  65'&'&547632&54 632'"3!254#%!2#!"54 "32764'%&'&546 #"'&54767327654'&"U9H5?K1||1K?5I9xxxxAA55j]\655T./RQ./SZ85UVUV56-/.UQ100/0/LC4$jj$4FLxxxyxxy[,+KLV,++]12Hdt::dJ01:7PyAAAAyN98?&%%$A?&%%$    gm # / ; [ j  65'&'&547632&54 632'"3!254#%!2#!"54532767#"&547632#"'&2654'&#"U9H5?K1||1K?5I9xxxxAA.1220DC
#<9EWXWXkl122Xf33XU5443LC4$jj$4FLxxxyxxyg
KK/MNoouv	rh\Z4554Z\44     gm # / ; I U \  65'&'&547632&54 632'"3!254#%!2#!"54 "27654/2#"&546573U9H5?K1||1K?5I9xxxxAA2332233ytLC4$jj$4FLxxxyxxyVVVVVVV)t'   gm # / ; H  65'&'&547632&54 632'"3!254#%!2#!"543+53265U9H5?K1||1K?5I9xxxxAAA@1(TFLC4$jj$4FLxxxyxxyܕFE`Tl   gm # / ; U  65'&'&547632&54 632'"3!254#%!2#!"54#"&54632.#"3267U9H5?K1||1K?5I9xxxxAA<1e9ɴ9f0/j6||{}7j.LC4$jj$4FLxxxyxxyt"$$"    gm # / ; M W  65'&'&547632&54 632'"3!254#%!2#!"54"#"&54632&#"32U9H5?K1||1K?5I9xxxxAA3VX~_
Ua`UU`aLC4$jj$4FLxxxyxxyۥ(j8p   gm # / ; F  65'&'&547632&54 632'"3!254#%!2#!"5433	##U9H5?K1||1K?5I9xxxxAAjixLC4$jj$4FLxxxyxxyazBm  gm 	   +  !%%!%%"3!254#%!2#!"54decb`bMxxxxAAnξ;3o(T"(Uxxxyxxy     jn    !   !  tuu   jn 	      ! !   !  ,=C`tu<=u    jn     !   !     !ut~<Atu<=     jn     !   !     !ut~<Atu<=   jn     !   !   !   !  tu<=CAutC<=@    jn     !   !   %   tu`Au{@C  jn     !   !  0   tuAu{@C     jn 	    %    !   !  +aCut@Ctu  jV    # + 3     462"7"32654$"&462"32654 462"6"&4622>7>54&'&'>54&#"&547&"'654.#"'72>32%%"&''%&/'%.547&54632B\BB\t-.B\BB\,-o    lN.	;qsV6C70AIbbOSC**CSObbIA07C6Vsq;	.8L+ʏ]KY  YK]+8ggg=>uggg=>"6''6']6''6'$9]W>:LktLJ73(#XQik\B?&STTS&?B\kiQX#(37JLtkL>W]9rlȡ~3D#@mm@#D3~lȬr    Kj	- 	   " ( ,      "&4632'2654#"3#"&46327'7#5%32767654'&'7>732>7>54'.#"&$ &/.#"3276%2654#"'747'&'#".'.54>7>32676 767>32+"&'&'&'&'& '326y2>=32>=-5nnI3=>23=>S39?*nB?94iEB9?B
R' 8%/61.4&++ #?Y==Y?# ++&4.16/%8 'R
-*?99
!;+57?
B:),#3A32%A(77(A%23A3#,):B
?75+;!
9"`	 B6Ĉ6B 	_#4aa7k~nnnnAnnnn-ںMғv$DK;7"D;KD$vh5WM' 1
*L7.4(#"NemmeN"#(4.7L*
1 'MW5hNA*,PI	,9	:kR4_5"2S''RNNR''S2"5_4Rk:	9,	IP,*0(sBD0H.&&.H0DBs($'&    =j   ( 2 A N    7327327#"'#""'72#"'&547632">7&>32#"'&327654'&#"654.'&'&#"&'%% 767%767%7&54>76?62>?''! '&'7&''\E[:TT:[E\lJDEI>zz>Z+Q (F65/AFeN$0+EdFB/56F( Qy0(,@

*tt*
B
g굤g
&<]ii];&l
m nmuvmmm
b@,,@bdx==x.L#$-G0,a&0$4%Ca,0G-$#;t.f>v::rAe.t+B,E@y>zwwz>y9L,B=|9jwAu:	aa	:uAwj9|BQW.>..>.QWB   j    % 1 ; G h      462"7"32654"547632 "&462432#"'&"3265473267!"& 7654'>54'&#".#" 632+ '.'&'#"&'&'&54632676&#";67&%32767654&'&#"RtRRt78,%,%RtRRt%,%,78j`;j|TVZGqpGZVT|j7aij"Y:8mm8:Y"jia (+G&<5t5<&G+( tRRtRh11R $ $tRRtR$ $k11TXLTr˚,0^1ioE55Eoi1^0, |,6[?Ki{pn7LL7np{iK?[6,|R:3/{W``W{/3:R    	 jn   " . 4 9 > B F  4632#"&%462#"& !   !   !   !  !   67##%67#5#Q;:RR:;QBRtSS:;Qm<=CAtuXLLHd e;QQ;:SS:;QQ;:SSC<=@ujj*%Z*Rdf 	 jn   # / 5 : ? C G   !   !   !   !  462#4&"!462#4&"!   67##%67#5#1<=CAtuČ=T=)Č=T=XLLHd eC<=@uŋSwwSŋSwwSj*%Z*Rdf 	 _jn      # / Y ~  5#67##67#%!   462#4&"!462#4&" !  "'&/ ! &"&5476?&7 !  4'#"'&/&'&! 6?"'<e)HdLLXLNXČ=T=ɌČ=T=tu];6L*+
L6<\<=%&-)//)-LfPRdZ**%jŋSwwSŋSwwSu%&69 96&%C<9-ǚ-9   jn   " . 4 <  4632#"&%462#"& !   !   !   !  !   %!$76Q;:RR:;QBRtSS:;Qtu<=CABW!\\;QQ;:SS:;QQ;:SSutC<=@j{u\\    jn   # / 5 >  462#4&"!462#4&" !   !   !   !  !   %!7276Č=T=ɌČ=T=tu<=CABW!\ʎ\ŋSwwSŋSwwSutC<=@j{u\\  jn   # / ; A J  "&547462#4&"!462#4&" !   !   !   !  !   %!7276AL6Č=T=ɌČ=T=tu<=CABW!\ʎ\,8"+6,#5 ŋSwwSŋSwwSutC<=@j{u\\  jn    % + 3  %%''7'7 !   !   !   !  !   %!$76|'MM٠MMtu<=CABW!\\'nnUUnnutC<=@j{u\\    jc   * 5 I W _  7767 '& !  /! '462#"&%4632#"&4$!  !  7&%654$! 6! &#"32s('s%22<=RtSS:;QQ;:RR:;QۼCAJKCݰG,&',H923QC<=99*;QQ;:SS:;QQvRS\\t[\6JQrrQJ6nn     j0     - 9 J  %462#"&%4632#"&'7 767 '& !   !  6 % !  7/M?RtSS:;QQ;:RR:;QMMs('s%22<=CA*go;QQ;:SS:;QQvRSno>G,&',H923QC<=@**t/0  jn   ' 2 9  7 767 '& !   !   !   !  4632#"&-%s('s%22<=CAtuQ;:RR:;Q'MMG,&',H923QC<=@u;QQvRSdnn  jn   ' 3 ?  7 767 '&462#4&"!462#4&" !   !   !   !  s('s%22,Č=T=ɌČ=T=tu<=CAG,&',H923ŋSwwSŋSwwSutC<=@     jn   7 C Q  462#4&"!462#4&" !27&'#  3   536 !   !   !  327674'&fČ=T=)Č=T=<veA+-{7CAtuO\&$!ŋSwwSŋSwwSC)0ljՠdc3=@u6C$(9.   jn   ' 3 ?  7 767 '&"&53265!"&53265 !   !   !   !  s('s%22 Č=T=7Č=T=?tu<=CAG,&',H923ŋSwwSŋSwwSbutC<=@   jn  / ; G W  2#'&5&7633476!2367672#'&'476 !   !   !   !  7 767 '&<2>
&?) 
#I=#
 )?&
>2<tu<=CAs('s%22%?A>ϾDLD  1GG1  DLD>A?%*utC<=@G,&',H923    jn  # 3 <   !  4'#"&5"&=# !   !  %7767 '&!&'&! 1<=Tn즦nUtuss('s%22`C<àOddddOu[G,&',H923;     jn     )  5!!5!2767! !   !   !   !  lʎ's%2~tu<=CA',H929utC<=@     jn    % 1  5!4632#"&%462#"& !   !   !   !  LvQ;:RR:;QBRtSS:;Qtu<=CAq;QQvRS:;QQ;:SSutC<=@     jn     #  5!!5!5! !   !   !   !  tu<=CA凇yutC<=@   jn    ) 7   !   !   !   !  5!5!2#"&545!5!2#"&5451<=CAtux:RR:;QVx:SS:;QC<=@u-Q;:SS:Q;:SS:  jn      * 6 B  "&475!%7'%4632#"&%462#"& !   !   !   !  PA6L6=MXMXMQ;:RR:;QBRtSS:;Qtu<=CA5O66O5Eonno;QQvRS:;QQ;:SSutC<=@    jn    ' 3  5!"&53265!"&53265 !   !   !   !  L6Č=T=7Č=T=?tu<=CAqŋSwwSŋSwwSbutC<=@  jn    % 1  %'4632#"&%462#"& !   !   !   !  9g9Q;:RR:;QBRtSS:;Qtu<=CA{{;QQvRS:;QQ;:SSutC<=@  jn     B  ' !   !   !   !  	7"'&'&#"'67623276762&__Z<=CAtu_4)FF"58 yFF"54(FFy\__C<=@u_Wi"bc(!__9("bb("_i"bb"(9_    jn   # / ;  4632#"&%462#"&7'7'7' !   !   !   !  Q;:RR:;QBRtSS:;QPA<<APtu<=CA;QQ;:SS:;QQ;:SS$>NvX..XvN>#utC<=@  jn  " ) 6 B N  2#'&5&76334764632#"&-%7'7'7' !   !   !   !  j<2>
&@( 
"VQ;:RR:;Q'MMنPA<<APtu<=CA%?A>ϾDLD  1GN;QQvRSdnn>NvX..XvN>#utC<=@   jn   $ 0 <  462#4&"!462#4&"7'7'7' !   !   !   !  Č=T=ɌČ=T=PA<<APtu<=CAŋSwwSŋSwwS]>NvX..XvN>#utC<=@     jn   $ 0 <  7'7'7'"&53265!"&53265 !   !   !   !  PA<<APLČ=T=7Č=T=?tu<=CA>NvX..XvN>ŋSwwSŋSwwSbutC<=@    jn   " . 8 >  4632#"&%462#"& !   !   !   !  %5!#"&5!#26Q;:RR:;QBRtSS:;Qm<=CAtuČU=T=;QQ;:SS:;QQ;:SSC<=@ucŋSww     jn 
   ) 3 9  4632#"&-% !   !   !   !  %5!#"&5!#26Q;:RR:;Q'MM<=CAtuČU=T=;QQvRSdnnC<=@ucŋSww   jn    % / 5   !   !   !   !  '7'7%%5!#"&5!#261<=CAtu2MM'MMČU=T=C<=@uUnnnnŋSww   jn     ) 5 F  %7'%4632#"&%462#"& !   !   !   !  676 &'&#&MXMXMQ;:RR:;QBRtSS:;Qtu<=CA%23$s(ʎ'onno;QQvRS:;QQ;:SSutC<=@%8338H,'',    jn    " - 9 E V  %'6762&'&"%7'%4632#"&%462#"& !   !   !   !  676 &'&#&yFFyT;MXMXMQ;:RR:;QBRtSS:;Qtu<=CA%23$s(ʎ'9("bb"(9<<donno;QQvRS:;QQ;:SSutC<=@%8338H,'',   jn     ) 5 F  '4632#"&%462#"&% !   !   !   !  676 &'&#&MM+Q;:RR:;QBRtSS:;Q/M%tu<=CA%23$s(ʎ'gno;QQvRS:;QQ;:SSoutC<=@%8338H,'',   jn   ( , 7 B F V  676 &'&#& !   !   !   !  %462#"&%4632#"&''6762&'&"%23$s(ʎ'<=CAtu(/M?RtSS:;QQ;:RR:;QMMyFFyTL8338H,'',C<=@uo;QQ;:SS:;QQvRSno9("bb"(9<<    jn   # 4 O   !   !   !   !  "&53265676 &'&#&"&54?&'&532651<=CAtuHČ=T=%23$s(ʎ'F:M L6 M:F=T=C<=@uŋSwwS8338H,'',bQ?7#+6,#5?RbSwwS    jn    * 6  676 &'&#&%%''7'7 !   !   !   !  %23$s(ʎ''MM٠MMtu<=CAL8338H,'',"nnUUnnutC<=@   jn    ! - 9  '	7	676 &'&#&"&47 !   !   !   !  ___/%23$s(ʎ'B6L6<=CAtu\___8338H,'',#5O66O5C<=@u   jn   " . 4 <  4632#"&%462#"& !   !   !   !  !4   !&'& Q;:RR:;QBRtSS:;Qtu<=CA''EkjE;QQ;:SS:;QQ;:SSutC<=@Fa`LtuL     jn     ) 5 ; C  %7'%4632#"&%462#"& !   !   !   !  !4   !&'& MXMXMQ;:RR:;QBRtSS:;Qtu<=CA''EkjEonno;QQvRS:;QQ;:SSutC<=@Fa`LtuL     jn    N Z f l x        32654&#"!&'& !4    !  4'#&'#5"'#5&47&'##"&'##5 !   !  4632#"&%6754&#"326'#"&546325&'&'67%&'%67%tJUioOLr7EkjE?''<=5D%Dm8D++!"D"!++D8nD%D6tuq"!# ## 	rLOoiUJt#!"$ g!"$!"+O# *"!$RluIOoo`LtuLF7C<;.)nY6G$@<<=j<<@$F7Y*.żu!!# 
OooOIulR #!!y
(
	&!--!	  jn      ' - 5  '	7	'	7 !   !   !   !  !4   !&'& ______tu<=CA''EkjE___X___?utC<=@Fa`LtuL    jn   ) 5 A G O  767632#"&53265!"&53265 !   !   !   !  !4   !&'& U%$
';Č=T=7Č=T=?tu<=CA''EkjEt2"$ŋSwwSŋSwwSbutC<=@Fa`LtuL   jn    % + 3  %%''7'7 !   !   !   !  !4   !&'& |'MM٠MMtu<=CA''EkjE'nnUUnnutC<=@Fa`LtuL     _jn    = b  %!4   '7'7%% !  "'&/ ! &"&5476?&7 !  4'#"'&/&'&! 6?"'''MM'MM.tu];6L*+
L6<\<=%&-)//)-LFtUnnnnu%&69 96&%C<9-ǚ-9  jn    * 6   462"4632#"&%462#"& !   !   !   !  ,ԖQ;:RR:;QBRtSS:;Qtu<=CAZԖԖ;;QQ;:SS:;QQ;:SSutC<=@     jn     % 1 =  %7'%4632#"&%462#"& 462" !   !   !   !  MXMXMQ;:RR:;QBRtSS:;QKjKKjtu<=CAonno;QQvRS:;QQ;:SSjKKjKutC<=@    jn     # . : F  "&47 462"%7'%4632#"&%462#"& !   !   !   !  PA6L6ԖUMXMXMQ;:RR:;QBRtSS:;Qtu<=CA5O66O5.ԖԖRonno;QQvRS:;QQ;:SSutC<=@     #<5n      k    &462 &462%'%%7 462"5.'46767  #5476764&"#5 '#54&/&'&'."% 7547676767>76767&'& QRtSSIQQuRRMXM~MXȖԖHVh=;;=hVH&z':%i)8^'ny'^8)i%:'z&Lw	l08<3233<80(SuQQuSSuQQvRnooԖԖx>[1'Sk
߰
kS1[>$n9(#mq,%@<?L N?<@%,qm#(9n$&%!Y;eV"Dx860
0nxD"Ve;Y   	 jn   # / ; G O [ g  #"&546324632#"&732654&#"4632#"&%4&#"326'#"&54632462" !   !   !   !  \jc_t_cj\0tJUioOLr"!#rLOoiUJt#!"Ԗtu<=CAf[cccc[fRluIOooO!!# OooOIulR #!!(ԖԖ&utC<=@  
 jn J V ^ b f k p t y ~   !  4'#&'#5##5##5##33'75& 733#5##5##5##'75# !   !  $462"335'35'5&575'1<=@D&D4DDDDDDD[MbM[DDDDDDD4D%DAtuKjKKjDDD414DD41C<,(g	-8?oi{``{io?)Ȉ	h(,}ujKKjKd8/c"#$zo/y$ہ"c     jql 	   % 1 = I U  !3!5#%!3!5#%!3!5# 462""&53265!"&53265 !   !   !   !  
{{{{{{KjKKjKČ=T=7Č=T=?tu<=CAlh\h\h\h\h\hjKKjKDŋSwwSŋSwwSbutC<=@    jn   # + 7  '7'77' !   !   !   !  462"'7'77'_qq_qr_qq_r+<=CAtuԖ_qq_qr_qq_r(_qr_qq_rq_qC<=@uԖԖd_qr_qq_rq_q     jn 
  ! -  4632#"&%462#"& !   !   !   !  Q;:RR:;QBRtSS:;Qtu<=CA;QQvRS:;QQ;:SSutC<=@  
 jn       $ ( , 7   !   !  5!35!%'%%7!!!! %6''&! !tulMXM~MX9Tv,unooa< 	 :j&   R         27#"'7327 $'&54732%% 76767%767%7654.'&'&#"&'&54>76?62>?''! '&&''7&''%4."#462!4."#462&'32?67#5#"'\>xcev>rt6;#y]M4f굡g.G

*tt*
&<]ii];&ikhdtt^b	e11B1Č1B1Č:$(2+$) `3H:G??4.x==x%B DG}KSB$bCJAi?l:1wv85j?g>LCR4.f>v::rAeME9jwAu:	aa	:uAwj9DMDVW$@"<<@6 @"O`DQ+ZEEY,Č+ZEEY,Č
c'F
aa	C    	 `j ? H ]        654.'&'& &'6?#"'% 76767%767#"&/27#"'7327 $'&54732"&546?4''7&54>76?62>?'#"&/ '&&'4."#462!4."#462&'32?67#5#"'

*tt*

P,3,04f鶢f.0,4.RȂ\>xbfv>rt6<"x|%7>4Zfd &<^ij]<&hjZ4<6$,4,tt*$0B2Č0B2Č:$(2,$( `4H:F>@4|(,.f>v::rAe.*',,3<%WLi?l:1wv85j?gD`(<3,.x==x%B DG}KSBA6%,4JDME9jwAu:	aa	:uAwj9DMD44,%6<3*hb]p-o+ZEEY,Č+ZEEY,Č
c'F
aa	C   	 :j&   * _        27#"'7327 $'&54732#"'267#"%% 76767%767%7654.'&'&#"&'&54>76?62>?''! '&&''7&''%4632#"'&7">7&#"'&'67632327654'&#"\>xcev>rt6;#yprw??52H:u}M4f굡g.G

*tt*
&<]ii];&ikhdtt^b	ecC>]0L!(C8$0+E8C%$M/2-;Cc.*,@.x==x%B DG}KSBh	ELME
N$bCJAi?l:1wv85j?g>LCR4.f>v::rAeME9jwAu:	aa	:uAwj9DMDVW$@"<<@6 @"O`DF_W;E!I+ /!-!CB*&_z5    =j   J     7327327#"'#""'72%654.'&'&#"&'%% 767%767%7&54>76?62>?''! '&'7&''>32#'&'4632%2347632#'&546\E[:TT:[E\lJDEI>zz>Z

*tt*
B
g굤g
&<]ii];&l
m nmuvmmm

:-.>>1@/=#-:
#=/@1>>b@,,@bdx==x.8t.f>v::rAe.t+B,E@y>zwwz>y9L,B=|9jwAu:	aa	:uAwj9|BQW.>..>.QWB0B=1JJ=B*HGrB0GH*B=ϾJJ1=    
 =j     ( 7 D u    -'"'72#"'&547632">7&>32#"'&327654'&#"654.'&'&#"&'%% 767%767%7&54>76?62>?''! '&'7&''2767!/MMMs>zz>Z+Q (F65/AFeN$0+EdFB/56F( Qy0(,@

*tt*
B
g굤g
&<]ii];&l
m nmuvmmm
ʎ(s"5gonno=x==x.L#$-G0,a&0$4%Ca,0G-$#;t.f>v::rAe.t+B,E@y>zwwz>y9L,B=|9jwAu:	aa	:uAwj9|BQW.>..>.QWB(+H65   =j   ' 4 i     #"'&547632">7&>32#"'&327654'&#"654.'&'&#"&'%% 76?%767%7 2>?''! '&''7&''7&'54>76?7'7'7'27#"'7l+Q (F65/AFeN$0+EdFB/56F( Qy0(,@

*tt*
	B
f굡g
i];&l
m nmttmmm
l&<]PA<<AP[>wdev>L#$-G0,a&0$4%Ca,0G-$#;s.f>v::rAe.$A+B,E@y>zwvz>y9L,Ba	:uAwj9WBQW.>..>.QWB`*9jwAu:	a:=NwY.-YwN=.x==x    =j   ' 4 e        #"'&547632">7&>32#"'&327654'&#"654.'&'&#"&'%% 767%767%7&54>76?62>?''! '&'7&''62&"%6 &#" 27#"'7'%%l+Q (F65/AFeN$0+EdFB/56F( Qy0(,@

*tt*
B
g굤g
&<]ii];&l
m nmuvmmm
GFF`T`Ȑ[>wdev>MM{/ML#$-G0,a&0$4%Ca,0G-$#;t.f>v::rAe.t+B,E@y>zwwz>y9L,B=|9jwAu:	aa	:uAwj9|BQW.>..>.QWBcc_<<`.x==x=noo   =j   , 4 d   "&545"'7276?.53265!"&532656 & &6?6?62>?''   '7&''!2$7%767%7654/&'& &'%%BM 6L6nv>[[3 M=T=7Č=T=`n &<]ii];&+l
m nmudfvmmm
;Yg
A+tt* B
?5O66,5=x..c?SwwSŋSwwSڵ`|jau:	aa	:ua̠|BQW.>.*.>.QWBz>y9L,B+Qb::Tnk+B,E@y>     =j 4 s {     654.'&'&#"&'%% 76?%767%7 2>?''! '&''7&''7&'54>76?!&'& !47632 7'*

*tt*
	B
f굡g
i];&l
m nmttmmm
l&<]EkjE?(___ڃs.f>v::rAe.$A+B,E@y>zwvz>y9L,Ba	:uAwj9WBQW.>..>.QWB`*9jwAu:	aGaKtuK礣~____    jn   ' 2 9  676 &'&  !   !   !   !  %4632#"&%5%%22%s'l(<=CAtuQ;:RR:;Q'MM8329H,'&,@=<Ctb:SRvQQUnn qf   !#L%f +    P@  99991 <20@"    0000/ ///? ???]]3#%3#Z/1    C 1 0 KTX     @878Y@ + +  / /]]!#   w@  91 <299990 KTX     @878Y@(	 	
)9]]'.#"#>3232673#"&j1!$4_%A#5$'5
]&@!%@8)=:    `  :  91 0 KTX     @878Y@  / /]#h    G@
 991 <90 KTX     @878Y@  / //	]!#'#\  3   M@
 991 290 KTX     @878Y@////]!373 N  3@  1 290 KTX     @878Y332673#"&5N
QOHj'Ɣ<7=6}     !  >@	  991 0 KTX     @878Y@
0000]]!!/        !#!#Q     ###搲\   N   #.#"#>32
QOHj'Ɣ<7=6}     @Fw   !!#!732767!bZ[,-f0/d<?yv..<     j  `   !3#!#73f^&UU&`J  HD`  !  !3#+"'#7$%3"'"3276Df)7t.mq::3.@h]+f/`0cvL9.NX)R' q P>#X  KX,Y'Yc q    X)R'#X q P>  NXdu'#X  NXu'#X  KXu' q    KXu' q    )A)R'(S q P>  NXYv'M#X  )A,Y'(SYc  [b5m'Vw)t  )Au'	(S  cu')u  cu')u  cQ')u`  b>Q'P`  e>\u'}P  e> u'6P  e> '8P  c~'n )u  i' \ vp            !!pp       73267!!"&H8Tcr5_JrX\t
4       !;#"&7mf:f-{ͪ+\    3'   -@+   ?o`&          `    3%!!X\px    F`    6767#!+732675]>^#%,>f]&9UGs\#<`'o      M`&   _    jG     !!!!/D/    '   !#3!399ɱ99Ǳ#q#     	    %!5	     c)y  !  7!;#"'&'$76%6'&'"7$6DRfQ0_q$CodJN0lT
=O.Mxѣ   `   27#"'&'&5!1q >CAhfj@[+Xw    V^~    67632 #"&'!$"26A{~y&%ÑuJ{{yĀ]bB©@    X`   !!76'!%$z"F3sfs3FT (7q  P*   'j  'j  j     'j  'j k     'j  'k  j     'j  'k  k     'k  'j  j     'k  'j  k     'k  'k  j     'k  'k  k     WCG   #'##'##'C<%S<%S<JGxxxx   +V   !!!!!!9R"m#V        :V`   %!#!!!!g+s:fttVQ`T    'Fs` '  %#"&54767!3267! !"&'3267R\pgqFAolg:h^5UY!a`#''*O(?F'3 !65      	 [@/	 :U TS  
991 /0KSX9Y"!!!!Fiqqd+=^     L  ! @M  !!!: UT Y]i` S"  	 !	"999991 9990KSX9Y"!3267#"&546?>7%!!h
VKPFPLPr=`jLS8Fh3P{f<=h69=DA*(wf<AK*d   H)  u      ^P_<      +    +w            m  !w d             $ f         +   7 q 9s  / ) 
R 3
 ^; J X     f  - T3 T3      \1{ + J +w +w + J + +3 + + + + J + J) + u b 1  +     f # ? L Jm J{ f ) ? ?R ? ?V ? ? J J ?  X {7 d )7    Z       J   7  X3 } R 3  =    \ R  
   -  ^3 uH rH rH ` L1{1{1{1{1{1{` Jw +w +w +w + + + + + + J J J J J       + ?f #f #f #f #f #f #b # Lm Jm Jm Jm J ? ? ? ? J ? J J J J J  { { { {7  7  1{f #1{f #1{f # J L J L J L J L + J Jw +m Jw +m Jw +m Jw +m Jw +m J J ) J ) J ) J ) + ? R  + ? + ? + ? + ? + ? +| ?3 +R ?R ? + ? + + ? + ?H  + ? + ? + ? } @ g J J J J J J	V V J) + ?) +) + ?        u b Xu b Xu c  {  {  {  {  {  { d  7   { f } +  | L B 7  4 tw + J Kw{ BX \ | 3 (R V q f J P Q f A) Gw +j F b J ,u   u' U a z: 2. *.    .   E Z 8b + +
t J + +\ ?	 +	 + ?1{f # + ? J J  {  {  {  {  {m W1{f #1{f #`b # J ) J )3 +R ? J J J J. *b + +
t J J )
O .L + ?1{f #`b #1{f #1{f #w +m Jw +m J + ? + ? J J J J) + ?) + ?  {  {  u b X + ? B @y 3E - 1{f #w +m J J J J J J J J J 7   B K F 4 1Z1u C A  r )1yw +m J T ) =7 f  \  cT \V 4m .m W Mt 7\1 n$V / Z X     @] j ] ?x   B @V V V eX g# JE Xt_ zN ?N 3 g  i ? ## :R{'j: b] ' .\ 7d7 m y   3 y u f ? ?z - : P ?V [ u	? 4	 \	= < 7& Wo E6 c =  (RjP  g 0 1 GI kV .j + 
 
 
XF Y G y I  a   5s  =  s         )T ^ ^ T  y    % MK I  M G *      w  ;   $'                 <  ;        f        8    ;          0  6      u  G    [                w      -        0    U      (  {  {  u    )  ;  U        )                  @                  T  	      p      9     q  ;      '       + ?-  j j o + ? f Le3 7a
  . : 4  9 (' f1{ + +1yw + + Q +3 +1y + + 8 J + +w +u b  Y+  +  Nt 7 f Wg o Ns   t 7 A f : W ?s  6 JT   p; K jg oB )Z  D fg o Jg o D3 T5 pI ^  . _ z D N    w + ,G Z  C  L Fl *4O^ 5 u / W ' f L J( ( + J +   Jw +w +  + S  + +	<	
 + c + ++  J1{ + + + w +	 + + + + + J + + Ju b+  Z+l Jw 	 +
 J J + + 	d +)f # 1 ?. :vm J ? ?n ?  : : J : L E7   _) [~  ? [ j< ? ? # ?#m Jm J j. : I  ? ? ? @n ? ?7   [ C D  I + ?
 + ?	 * :t } ~ J J  z  z	0 tY  R G> L	b @ C D R D8 &  #    &    XxX7 +r : + 7 + +. :S "X O +. :	3 Jn [ +n ? +n   j J Z + :
	 + : Q Q J Lu  e 7  }7 +)  ew~ w ~ w  ?6 Wz =6 Wz = +	9 +	 ?wo + : +r :w~  +t : ?1{f #1{f #`b #w +m J Jm W Jm W	. *  + ? + ? J J J J J J  #+ 7  + 7  + 7  w ~  J. ZJ +< ?S MX @+)+) K "	F G% !\  	"
O . : S H al E Kt 7 /
I  + J J d  +n ?	. 
 + : Jt [; { +y g K{  % +g + +y  + + +  W } C[ AB   U[ _K e + h AR  + [ G* K +4 U +h 14 I >F
  R  *OX B YJ ? y N ?B Y Q  ?\  ? k  S ?AvX y ?  N  'B ?N  L; ?8 3 TR   3  2      K                  Y  8R R   5     \ 3    X [  4  o"[  X   Z Xp'T HfDC J 9 n i w P P N         [ \  $ " H ` < 1 g H( %&  
 @ B 8E x     h+            ,    }\  l l! 33  a C            +, , q  @ @ Q J G M
 B
 B n3 $'P     1 @ 	 K   0  
 2   1   0   0 8  1   Xn   @ Tf 5x 4^   r 2    n x 4    ` p 4 x 3X  P  Y  G >n n m "o 4m 5   <x 4 o  < 1 1y1y1y= += += += += = %  % y% y	1 	 +	1 	 += +	1 	# 	1 	# = z < )f f o( m( ;( C( u *z ( l( l( 	 y	 +
a 1 1y1y1y     i i%  % y% y	1 	 	1 	 	1 	# i	1 	# i i b )  ( ( (     k ks b s b (s b (z o z o z j kz j kz j y
 
 (0 " k  ( ( ( $ $ $  ;    (  (;  $;  $     j ` Y  ( $   ( ( ( $ $ $  ;  ;  (;  (;  $;  $;  ;  ; j ` _  + + + + +    +  +    +  + j} *c q} )  S S Sssss Us U	 	 	 	 U	 	 Us UG | YG F  P P Pssss Xs X	 	 
D 	 P
D 	 P	 		 	
D 	 X
D 	 XG } 5  + + +      +  +       j t : )c c c 	 D	 D	 J	 J	 	 	 	 	 	 s \ Ds \ Ds \ Js \ J v5 5 +5 +5 +5 5 5 5 5     +  +         j t( l )C C  \ \ \ + + +   "    1 1 1 1 m hm hm m 	a 	#  j   R + R +   ` `z j `c q v        + )	 	 	 	 	 	 	    ~     
\ 
\    
/     sss s G 5 555 5 5 L5 L I . + c ) )M	  ! !  l ! ! 7b W Li ?i x Ot 8 R ?P : ? JH WH (H [ W  r##  E  A P7 d * 'P ?7 ?r?  w %/ %q %q %# @7 % %P %6 % %7 %7 %H @ , % %p 8 g w L c m m ( b d m O K M  (O * B dO -    V pO ` n Ov ! j@  0 V n O j@ 7 %] ?  0O mO s W 3 v  u w H@ b 0 0s " 0 0 0P GO w ~ G 0 mV l` T+    a o2 a b 0W 00 H 8  g m  "  d  C  "  
  1{f # + ? + ? + ? J L + J + J + J + E + Jw +m Jw +m Jw [m Jw +m Jw +m Jw +{ f J ) + ? + ? + ? + ?## + ?3 +R ?3 +R ?3 +R ? +  +  +u + +V ? +V ? +V ? + ? + ? + ? + ? J J J J J J J J + +) + ?) + ) + ) +t          u b Xu b Xu b 8u N  {  {  {  {  {1 7 1 7  d  d  d  d  d +)+) 7   ? Xd 7  f #{ f{{ #+ N  1{f #1{f #1{f #1{f #1{f #1{f #1{f #1{f #1{f #1{f #1{f #1{f #w +m Jw +m Jw +m Jw +m Jw +m Jw +m Jw +m Jw +m J + ?   J J J J J J J J J J J J J J P Q P Q P Q P Q P Q  {  {  u  u  u  u  u 7   7   7   7   +&  N N N N N N N N1{1{T <Y { ;  )t 7t 7t 7t 7t 7t 7U ?[  < / ;k  f f f f f f f f ? 
 <
  	p ;	 n   W W    W W W W ? 7 <H  ;    J J J J J J" ?w 	 <	 l ; g og og og og og og og oq 	y 	 d  D D D D D D D DE  	 <
  ; 9   N Nt 7t 7 f f W W J Jg og o D D N N N N N N N N1{1{T <Y { ;  ) f f f f f f f f ? 
 <
  	p ;	 n   D D D D D D D DE  	 <
  ; 9   N N N N N N N1{1{ Ma1{     7 f f f f fo  .  : +  }   d W W W f W W + +  4     dg og og og o  g og o  )  (  7 7  D D D D D   9 '                   V    
                           R 3R 3 1  1  1   
 
 

 ' ' 'B   N ''
 ^{ ^  ^                                qD q  
 JJ
J L }L N   / )  V>    u    / )3 s/ s  d#x   } 
 ? > X
 ?
 ?                                               <    K i ) 09 9 9 N cN / <  \ R   K i ) 09 9 9 N cN L d dM m  ( O * /  o m J J  V = +	 - / J  q" L  + Nx    % |    #  =  1  R    =   f	 ,  4	/ 4 K   IN   ?  J j L  	  n   f @ Si , l m(	 Q ' -	 \' Ul I3 +1{l T  } S v Kw +	y M ;Z g ' ?y 
 F Z
  Q F<   I     * Fm C  za H rH r rH rH \H rH \H RH H rH H rH RH H i r +E + + +1   a  ++A + J + + ? ? ? ?7  	   ?)	 ? L JV ?
O c *
O c H < d u d d u  
 d u d \ d u d u d u d d ZZ d  .  d   d d u u d ` d d _ u _ d d d d u d u d   d u Z u d u d u 76 H6666666 H z z6 u ` u d u d d u d 7 u 71 
 bZ ;w w  `    , ,   , ,    L L  )   d;R 3
 V LV LV I   , ,     b    b5555 n 
\   N
 /    z zZ y z                                                   ` `                                  555    ^ ^              P P P P W W P P P P P P P P         z  z z YW           c c 
              ~ d~ d    |   a a                      L      	C ,   , ,   , , 	C ,   ,   ,  @ r  xx dxx d O l    ~ T -	8 	8 P 	8  xP     X c 	8  #         ]           ]   s   s s   s   7  '  , x x x x x x x x x x < < < < < <xxxxxxxhh''''''''''''''''''  '  '  ''q''''''''''          l l   g g ' ' ' '   ' '   ' ' ' '   ' '   ' ' ' ' '  p  p r p p p p p p p p p7 p7         ' ' ' ' ' ' '     ' ' '  p     p p p p' ' '     ' ,   h, d, , , ,  + ,  } }_ } }	 
 , , , B , d, , , , , , , ,  ,  , }, , , dZ d 2 E \ , , ,  , , , , , , , , , , , , W W W , ,,    , ,S,, ,,, ], , , ,, m, , E, , , ,A, , ,U,,Q,0, , ,U,,L,0,C, ,X, ,B, ,X, ,   ,x,       , , , , , , , , , , , , , ,1      , , , , , , , , , , ,X,X, j, ,T }, y, },), ,,,, , , d 	  	f 9   	g T 
  Y   xD V V V V   V  I V V x  +  5  X 3     p p p pR> p  T V S T W W 0 V 0 0 0 0 0 2   p @ T  T T T p     n n T V      a a T T, f, z, z, z, z,   xN N x>N nX ~ #9Uwlf x x x x x x x x x x 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 u  u  u u u u u u u    u u u u u + +  <   u   u  s    u       T V  .	B ux dx ux dx dx ux dx dx ux dx ux u@  @,@,@,@,@,@,@,@@,@,@,@,@,@,@,@@,@,@,@,@,@,@,@@,@,@,@,@,@,@,@@,@,@,@,@,@,@,@@,@,@,@,@,@,@,@@,@,@,@,@,@,@,@@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@@,@,@,@,@,@,@,@@,@,@,@,@,@,@,@@,@,@,@,@,@,@,@@,@,@,@,@,@,@,@@,@,@,@,@,@,@,@@,@,@,@,@,@,@,@@,@,@,@,@,@,@,@@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@, d u    H _ _                :  :  :J                                                                           7 766     76 u u M M    ' ' ' '   $ $   " p M M %) of J 03 JR 0  b S1 : 	 s 7 Z + ?B N  Xx 3g W KM ThJ 9 VJ ;A , A ?/ VV <A (b Hk (J >q < pA >w <e 5G <D R7 6h 2b <V <V 7G 5_ SP 2b / @F !c 2G ?; M\ Q =# R H    , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,  + + " +u buz J3 +3{=  Jw +w + + + + ) +) 1y1  +I = & +  1{1 w +w  + J  (  c #d #d #h   O|  > L	b @	 8 j	d \ K + ?Q 
 + : J JL f X@ f X : b Eu b Ew  @ f X *      w  ;  ;  ;  ;  ;  ;  ;  ;  ;  ;  ;3p3"L7L7L  > NR pR p S @@  b Ktx O 
yj -
G{ #	{k #y` -y` -H` Ue? + ? V v @ X 	@ f X[   Q E ,Y   3 T, #s w  l +% ?3R) ~ 7 ?w   + 
! " <7B   o"  7"    3"7 " l U mB 7 ^" 0  2B ;  9 7   q	<   	M  $   e     B    Rk   
  } ;     U / R c      p ?p ?p ?p ?               ! fL fL f	 f	 fw ](  ` `   [   N Q N N\ I X  b>        X [  4    o"|  X        Xp'   fDC    9 n i w   X XC  a                                                                    A  H  7                 T 7 dF 7 4 4 x 7:  7{ 7 7
 4 4d 7:  5l 7( R 52 R \ 4 "L    5 9 G  7 " f, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,  ,  | |  f V < W  f  
 ( 
 =r 2 X [ X [m X / \ n    n n X [ \-  j 7 d < H (7  \1{ + J +w +w + J +3 + + + + J + J) + u b 1  + f # ? L Jm J{ f ) ? ?R ? V ? ? J J ?  X {7 d )7  1{ + +1yw + + Q +3 +1y + + 8 J + + Jw +u b  Y+ 1  Ns   t 7 A f : W ?s  6 JT   p; K jg oB )Z  DZ ;( I ^ '_ z f D b    \    } n
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
                                                   / / / / / / / / / / / / / / / / / / / / / / / / / / / @ / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / W W W W W W W W X 	x KW =	@ W W 	Y _W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W 	Y _W W W W #W W  W W W W :	Y `W :W =W =W =W =W =W =W     +      `    3  N        N @] jIxNxKxxNxNxKxKx)xNx)x[x)xxxxbxexexex  i  =  y 3E - ? # z j c   X  , , , , , , , ,  +r : '  L H       -   
  7  9k  :  ;2  <   & : $  & $  & $  & $  & $ & $ 2 $ 7< $ 8 $ 9u $ : $ < $ F $ G $ W $ Y $ Z $ \k $  $  $  $  $  $  $  $  $  $  $  $  $  $ k $ k $  $  $  $  $  $  $  $  $  $  $ $ $ $ $$< $% $&< $' $* $, $. $0 $2 $4 $6 $7 $8 $9k $: $ $ $< $ $ $ $k $ $ $ $ $ $ $ $k $
 $
 h $
 $
	 h % 9 % : % < %  %6 %8 %: % % % % % & 6 & & &  &" & '  & ' <a ' a '8a ':a 'a 'a '
 '
	 ) D )  ) < )  )  ) $ ) D ) Ha ) Ra ) U ) X< ) \D )  )  )  )  )  )  )  )  )  )  )  )  ) a ) a ) a ) a ) a ) a ) a ) a ) a ) a ) < ) < ) < ) < ) D ) D )  )  )  )  )  )  ) a ) a ) a ) a ) a )a )a )a )a ) ) ) )+< )-< )/< )1< )3< )5< )9D ) )a )a )a )D )D )
 )
< )
	< * 7 * < *  *& *: .  . &} . 2} . 8 . : . H . R . X . \2 . } . } . } . } . } . } .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  . 2 . 2 . } . } .  .N . .0 .1 .
 & .
	 & / 2 / 7 / 8 / 9 / :N / < / \ /  /  /  /  /  /  /  /  /  /  /  /  /  / /& /0 /: /
 /
 2  2  & 2  2 9 2 ; 2 <k 2 k 2:k 3  3  3  3 $D 3 D} 3 H 3 U 3 V 3 X 3 D 3 D 3 D 3 D 3 D 3 } 3 } 3 } 3 } 3 } 3 } 3 } 3  3  3  3  3  3  3  3  3  3 3 3! 3# 31 3
 9 3
a 3
 & 3
	a 4  & 5  & 5  & 5 7 5 <D 5 H 5 R 5 X 5 \} 5 D 5  5  5  5  5  5  5  5  5  5  5  5  5  5  5 } 5 } 5  5 5& 51 5:D 6 6 6  6" 7  7  7  7  7  7 $a 7 7 / 7 D 7 F 7 H 7 R 7 U 7 V 7 X 7 Z 7 \ 7 a 7 a 7 a 7 a 7 a 7  7  7  7  7  7  7  7  7  7  7  7  7  7  7  7  7  7  7  7  7  7  7  7  7  7  7  7 7 7 7! 7# 7& / 71 7
 7
	 8 $ 8  8  8  8  8  9  9 k 9  9  9  9 $u 9 2 9 Da 9 Hk 9 L 9 Rk 9 Xk 9 u 9 u 9 u 9 u 9 u 9  9  9  9  9  9  9 a 9 a 9 a 9 a 9 a 9 a 9 a 9 k 9 k 9 k 9 k 9 k 9 k 9 k 9 k 9 k 9 k 9 k 9 k 9 k 9 k 9 k 9 9k 91k 9
 9
	 : N :  : N :  :  : $ : Du : H} : R : U :  :  :  :  :  : u : u : u : u : u : u : u : } : } : } : } :  :  :  :  :  :  : } : : : ;  ; & ; 2 ; H} ;  ;  ;  ;  ;  ;  ;  ; } ; } ; } ; } ;  ;  ; } ; <  <  <  < N < N < $< < & < 2 < D < H < R < X < < < < < < < < < < <  <  <  <  <  <  <  <  <  <  <  <  <  <  <  <  <  <  <  <  <  <  <  <  <  <  <  <  <  <  <  < < <1 <
 <
	k = k D \ D  D  I  I  I  I
  I
 V N H N R N  N  N  N  N  N  N  N  N  N  N  N U  U  U
 V U
 & Y Y Y Y Z } Z } \ a \ D   &   &   &   &  &  2  7<  8  9u  :  <  F  G  W  Y  Z  \k                            k  k                         $< % &< ' * , . 0 2 4 6 7 8 9k :   <    k        k 
 
 h 
 
	 h   &   &   &   &  &  2  7<  8  9u  :  <  F  G  W  Y  Z  \k                            k  k                         $< % &< ' * , . 0 2 4 6 7 8 9k :   <    k        k 
 
 h 
 
	 h   &   &   &   &  &  2  7<  8  9u  :  <  F  G  W  Y  Z  \k                            k  k                         $< % &< ' * , . 0 2 4 6 7 8 9k :   <    k        k 
 
 h 
 
	 h   &   &   &   &  &  2  7<  8  9u  :  <  F  G  W  Y  Z  \k                            k  k                         $< % &< ' * , . 0 2 4 6 7 8 9k :   <    k        k 
 
 h 
 
	 h   &   &   &   &  &  2  7<  8  9u  :  <  F  G  W  Y  Z  \k                            k  k                         $< % &< ' * , . 0 2 4 6 7 8 9k :   <    k        k 
 
 h 
 
	 h    6     "    &  <a  a 8a :a a a 
 
	     &    9  ;  <k  k :k     &    9  ;  <k  k :k     &    9  ;  <k  k :k     &    9  ;  <k  k :k     &    9  ;  <k  k :k     &    $  9  ;  <             :  $            $            $            $                  N  N  $<  &  2  D  H  R  X  <  <  <  <  <                                                                 1 
 
	k  \      \      \      \      \      \      a  D  a  D   &   &   &   &  &  2  7<  8  9u  :  <  F  G  W  Y  Z  \k                            k  k                         $< % &< ' * , . 0 2 4 6 7 8 9k :   <    k        k 
 
 h 
 
	 h   &   &   &   &  &  2  7<  8  9u  :  <  F  G  W  Y  Z  \k                            k  k                         $< % &< ' * , . 0 2 4 6 7 8 9k :   <    k        k 
 
 h 
 
	 h   &   &   &   &  &  2  7<  8  9u  :  <  F  G  W  Y  Z  \k                            k  k                         $< % &< ' * , . 0 2 4 6 7 8 9k :   <    k        k 
 
 h 
 
	 h  6     "   6     "   6     "   6     "    &  <a  a 8a :a a a 
 
	   &  <a  a 8a :a a a 
 
	  7  <   & :  2  7  8  9  :N  <  \                            & 0 : 
 
  2  7  8  9  :N  <  \                            & 0 : 
 
 O 2 7 8 9 :a < \             &0:

  &  & 7 <D H R X \} D               } } &1:D  
 V
 &  &  & 7 <D H R X \} D               } } &1:D  
 V
 &  6   "" 6" ""& & & & & & $a& 7 /& D& F& H& R& U& V& X& Z& \& a& a& a& a& a& & & & & & & & & & & & & & & & & & & & & & & & & & & &&&&!&#&& /&1&
&
	'&0 $0 0 0 0 0 00: : : : N: N: $<: &: 2: D: H: R: X: <: <: <: <: <: : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : :::1:
:
	k? k} $} -} 9 &} < K} } } } } } }  K}: K	 7	 9k	 :	 ;2	 <	 	&	:
 $
 -
 9 &
 < K
 
 
 
 
 
 
  K
: K
 7<
 9
 :
 <a
 a
&<
:a
 $
 -
 < &
 
 
 
 
 
 
  &
: &
	 7<
	 9
	 :
	 <a
	 a
	&<
	:a      $a 7 / D F H R U V X Z \ a a a a a                           !#& /1

	  &} 2} 8 : H R X \2 } } } } } }                    2 2 } } N01
 &
	 & H R           #;$;%;&;x';);*;+;,;-;/;0;1;2;3;5;6;x7;8;9;       D   D   D   D                 4    $  x      T    	P  	  
                t    P                $    8            l    d        !  "  $  $  %h  &  'L  (L  (  )d  )  *  *t  *  *  +4  ,  -  .<  /4  /  0  2  3  3  4X  5T  5  74  8$  8  9  :  ;  <  =  >  ?  @  A  B  C`  D  D  F  F  F  G4  H  H  J  K  KP  L  M,  NT  P0  P  P  Q  Rh  R  S$  S  TL  U8  U  V  Wp  W  X$  X  Y  Z  Z4  ZT  Zt  [p  [  [  [  [  [  ]4  ^,  ^D  ^\  ^t  ^  ^  ^  ^  ^  _  _  `  `  `4  `L  `d  `|  `  b  b  b  c   c  c0  c  eH  e`  ex  e  e  e  e  g  g  g  g  g  h  h  h4  hL  hd  i  i  i  i  j  j   j8  j  k  k  k  k  l  l$  m   m8  mP  mh  m  m  m  m  m  m  n  n(  n@  nX  np  n  n  n  n  p   p  p0  pH  p`  px  p  p  p  p  p  q  q   q8  qP  qh  q  q  q  q  q  r  s  t  t$  t<  tT  tl  t  t  t  t  u  u@  ud  u|  u  u  u  v  v  v  w  w  w4  wL  wd  w|  x   x  y  y$  y<  yT  yl  y  y  z  z  z  z  z  z  {  {   |  }H  }`  }x  }  }  }  }  }  ~  ~   ~8  ~P  ~h  ~  ~  ~  ~  ~  ~  <               8  P  h                (  @  X  p              T  d    <    P    \  l    l        T    D    @          l      D    0  @        |          0      l    $               `    0  t    `            p        d  t                4  L  d  |              $  <  T  l                $  <  T  l            ,  D  \  t          $  <  T  l      \  t                4  L  d  |              $  <  T  l                ,  D  \  t        h      ,    X  L  (  x          (  @  X  p                   4    `  (    p        8    <         8  H    \        $       T    H        4    `    h        D    ì    Ĥ  0  Ũ    \    @       \  Ș    X  ɔ    ʬ  @    l      ͘    δ      d       Ј      ь        ӈ    d  Ը    ՠ     ֐  ָ    <  p    8  ذ  P  ٴ    ڄ    ې  ۠  <      `  ݜ    H    <      x  8          L      p     d    $  t    $        (  @        (  h    (  T  |      (            ,  @  `  |            8  h    0    $      D        ,      h          4  H  `  p             4  H  \  p      D  X  l             <  X              @  d        4  d            `  |          @  |          0  L  x            <  d                     ( P |   T     L L     (      h |     < X t                 0 H d |      	  	 	  	 	 	 	 
 
 
X 
h 
x 
 
 
 
          ( @     <       h x  T d  D  <      X     4 L     ( @  h          $      !t ! "T " # $\ $ % &$ & ' ' ( ( )8 )H )X )h ) *P *` *p * * + + , ,$ ,< ,T ,l , - -t - - - - .4 . /  / /0 /H / / / / 0  0x 0 0 1p 1 1 2  2H 2X 2h 2x 2 2 2 2 3 3 3 3 4H 4 4 5  58 5 5 6 6 6 7 7 8 8t 8 8 9X 9 9 9 :( :h : : : : ;  ;, ;< ; < << < < = =\ =t = >$ > ? ? ?4 ? ? @$ @4 @D @\ @l @ AP A A A A B8 B C Cp C Dl E  EH E E FT F G< G HT IT J` J K0 K@ KP K K K L L M Nl Ol O O O O PP P Q Q Q R R8 Rx T  T T T Ut U VT V W W@ W W X< X Y Yx Y Y Y ZH Z Z [D [ [ \0 \x \ ] ]D ] ^4 ^ _ _ _ ` `@ `P ` ` a ad a a b< b c cp c d8 dH d e fP f g g$ g< g h  h| h i, i i j j j k< k k k k k k l l l4 lL l\ ll l l l l l l m m m4 mL md m| m m m m m m n n, nD n\ nt n n n n n o  oP oh o o pH p q  qX q r rl s s t uH u vx w  w w x x| x yT y y y z8 z z {` { |< | }X }h }x } } } ~L ~ t     |  X     ,  `   T   X    l  h  `  8  \   4  @  0  d t , < L l   D h  P  <   H  `  8 \    P  t            <      ,  P ` $     $ X     ( X t        @ \ x      8 d    L    P   0 P   ,   <    x    $ D t ,     T  `  D  ,   \  l    P  X  |   8   $ l   ,   `     D Ô ì  Ą  ń Ť  Ƥ   4 Ǩ ( Ș P  l 8 ˔ x   Θ  \ ϸ , |  L Ѹ  X  P Ӵ @ Ԑ  P դ  ֈ  \ פ  h ش   ٘   |   t ۼ < ܄  ݄  D  h  @  @    $   d  P     L  <  0   h    P  X  4  H  H  <   ( X p      , \ t        4 L d |       < \ |   p   8 T p      ( T l      ( X p         0 H ` x        p    H ` x     4 L d |       $ < T l     (               , D \ t        4 L d |   d |     $ l     D \ t        4 L d |      @ d |      8 P h       	 	( 	@ 	X 	p 	 	 	 	 
@ 
d 
 
 , D    $ < T l      P  ( l     4 L         8 P h       4 |    , l      $ < T l        , D \  , d  d | 0 H     8 P h        ( @ X  ( @ t      4 L d |       $ < T l      `    T l    ` x     <       !X !p ! ! "@ "X "p " " # $0 $ %| % % &` &x ', 'D '\ 't (( ( ), )D ) ) *l * * + + +4 +L +d +| + + + + ,< , , -T -l - - - - - - . /l / / 0$ 0< 0 0 0 10 1x 1 1 1 24 2L 2 3 3l 3 4  4h 4 4 4 4 4 5 5, 5D 5\ 5 5 6 7  70 7 7 80 8 8 9< 9L 9 9 9 9 9 : :t ; ; < <X < =  = = = >P > ?P ?` ?p ? ? @ @  @L @\ @ @ A A` A BH B| B C0 Cd C C C D DP D D E E F0 F F G G\ G H H I JL J K` K Lp M M M N N O0 O P PD P P Q\ Q R( R R S S Tt T UX Ul U U U U U V8 VL V` V V W@ W X( X X Y Z$ Z [ [P [ \8 \t \ \ ], ] ] ^ ^8 ^ _h _ `\ ` ` a b` b c c d$ dp d e e< e e fp f g g( gL gp g g g g h h, hD h\ ht h h h h h i i i4 iL id i| i i i i i j j$ j< jT jl j j j j j k k$ k< kT kl k k k k k k l l, lD l\ lt l l l l l m m m4 mL md m| m m m m m n n$ n< nT nl n n n n n n o o, oD o\ ot o o o o o p p p4 pL pd p| p p p p p q q$ q< q\ q| q q q q q r r$ r< rT rl r r r r r r s s, sD s\ st s s s s s t t t4 tL td t| t t t t t u u$ u< uT ul u u u u u u v v, vD v\ vt v v w8 w x x x4 xL xd x| x x x x x y y$ y< yT yl y y y y y y z z, zD z\ zt z z z z z { { {4 {L {d {| { { { { { | |$ |< |T |l | | | | | | } }, }D }\ }t } } } } } ~ ~ ~4 ~L ~d ~| ~ ~ ~ ~ ~  $ < T l        , D \ t    $ < T l        , D \ x       $ @ X p         0 H ` |       0 H ` x       ( @ X p         8 P h        , D \ t       $ < T l         0 H ` |         ( 8 P ` x        ( @ X p         0 H ` x         8 P h        ( @ X p         0 H ` x         0 H X h        4 L \ t         0 @ X p        , D \ l        $ @ X h x        0 @ X h                     H     H    (  l  H    0 L | 4 P P P P P P P P P      4 L l      8 L     ( T      H      X p       4 \   D   L                ( d  p  T   , T   0 D X l           4 H \ p         $ 8 L `   D    $ @ (  P h t  (   @  \    d  D h     T  t p      ǐ Ǡ Ǵ   $ t ʄ  ː (  ͌ , p (  А  Ѡ Ҭ Ӭ \ ՘ 0  <  P ؔ  $ ٠ ڈ      X  ޜ ߔ   `    h  $  X   <   ( P    p      0 X x      8 X x        8 P ` x      0 @ P ` p        @ X h        8     (   8   , \    4 |    <    \    L  $  h  $  |   , d      L  \   $ L t     4 P l    `    	D 	 
  
` 
 
   |   X    \   L   8 |    < |   <   D   |   X     @   8   0 d   \  (  D   (   x   8 \    8  d   !4 !D !p ! ! "  " #8 # $  $ $ % % &( &D & & ' ' ' (H ( ( ) )0 *8 + - .x / 0 0 1 18 1d 1| 1 1 2 2h 2 3D 3 3 4L 4 5  5 6 6 7L 8D 8 9 : ; ;\ < < < < < = =( =H = > >d > > ?8 ?| @h @ Ax B  B4 B B C4 C C D D| D E( El F  Fp F G G G H` H I J< J J KH K L LH L L M N N N O8 O O PX P Q  Q R  Rh R S@ SX S S T TH T T T U VL W W X Y Z| [< [ \ ]L ] ^, ^P ^ ^ _( _L _ `L ` ` a  aD a a bh b c c c d dP d e e f8 f` f f g g` g g g hX h h i  i4 i i j0 jt j j k< kt k lt m< m n o ot o o pP p q qT q q r rh r s s tP t t u` u v\ v w< w x  xl x x x x yl y z( z@ z { { { |h | }$ } } ~0 ~ ~  @ l    8 `     $ L l      @ d   X   `      ( 8 p   @ \    $ H d     (     d    0   h   x (  H P  $ 8   $ @ \ x    X    d      < `      0 P p     < d     8 d     < d     8 d     0 X     < p    @ x     T    $ H t     H t     4 `     L |   $ X    < p   ( l   ( X       < X t      0 T |        8 T p       4 H    ¨ ¼     $ @ d È Ü ô     t Č  D ƀ  ǐ P l ɘ ɴ   ( H | ʘ      L h ˔ ˰   $ @ l ̈ ̴    D d ͘  l  | t (    x  , ӈ  @ h Ԑ  ` մ  4 ` ֌ ּ   D ` | ה ׬ 0 \ ؈ ذ   ` ٌ ٴ   ` ڠ    ۠   ܠ   H p ݘ    ( P @ ߬ d <  @   X         0   \  @ t H   @     T  H l  	 
p 
 l  T  , P   4 T t      4  | X     D  l  H    <        L   !` ! "P #  # $ & ' ( ) * ,l -d - . /x 0 0 1$ 1l 2 2 3( 3X 4| 5d 5 6  6d 6 7 7` 7 8 9 ; < = > ? @ A B C D E G4 H( H I4 I J L( M Ot P P Q8 Q Q R R  R8 RP Rh R S S T U4 VL W  W X  Y( Z ] _@ _ _ `H ` at b\ cD c d e f g h i  i k l n nH n o$ o o pD p q q| r$ s t u v  w y {< ~  L   0      ,     d     ( \    l   l (  p  8  d   L  X  @   `  x   d   D D   P    x   T (  ,   < Ĩ  ŀ  P ƴ    H ǔ   Ȱ ɬ X , ˨ ( H , Θ  D τ Ϭ    , T Ѐ Ь  < Ѭ X 0 Ԝ \ ֌ d  4  ޘ |     (  L   H     X <    l      P   D    D t   < h   ( |   h    0   (  h             4 \     ` (    L l   	H 	 	 
 
X 
 
 
 
   8 T x      ( L x      ( L x     , X      ( D h      H l     8 \     8 \     H |     ( D h      H l     8 \     8 \     H |     H l     H t    < x    ( T    $ X    8 t     ( D h        H  l       ! !8 !\ ! ! ! " "8 "\ " " " # #H #| # # # $ $H $l $ $ $ % %H %t % % & &< &x & & & '( 'T ' ' ' ($ (X ( ( ( )8 )t ) ) ) * *H *l * * * + +H +t + + , ,< ,x , , , -( -T - - - .$ .X . . . /8 /t / / 0 04 0h 0 0 0 18 1d 1 1 2 2< 2x 2 2 3$ 3X 3 3 3 48 4t 4 4 5( 5d 5 5 6( 6l 6 7 7P 7 7 8 9 :  : ; ;D ; ; ; < <T < < < =L > > ? ? @| A A B Ch C D E F G< H H IX J Jt J J K K, Kh K K L, Lt L M  MH N N O8 O P< P QP Q R4 R SL S T8 T T U\ U U V Vd V V W8 W W X| Y Y Z0 Zx Z [$ [ [ \0 \ ]  ^ ^ _ `x ` a aP a a b( b| b b b c  cL cx c c d dH d d d e eD ep e e e f( fX g g( gd g g g h8 h\ h h i@ i j j kL k k l< l l m mD m n n@ n o  o o ph p p q< q r( r` rt r sh s t( t u u v vt v wt w x x y( y y z4 z { {d { |@ | }L } } ~0 ~ ~ H  ( p  P   h  H    ( L p     0 H ` x         8 P h        ( @ X p         0 H ` x         8 P h        ( @ X p        T d t       , < L \ l |     ( 8 H X     H X h x     , <        8 d t    \  ( @  d  \    l   D \ t     l  8 |  ( 8 H X     0 \     ( P x    $ T    ( \   X      P `   D  p   h  P  T      t    , h  0  `  h   \          \     < L   |   @    4  (   t    T    T p       4 H \ p        0 D X |      D  8  H  T  @ Ĩ l  L  < ǜ 0 Ȉ  | 8 ʠ D ˴ 8 ̬ 4 ͌  Έ  X  \  D Ѽ D  p @ Ԝ  Ո  T  0 נ   ؜  \  H  |   ܐ  ݨ L  `  x   x  0             8   $    P   $ < T t       $ < X t t           8 8 P h h        ( @                     H      $ `   l     d   T    \  8 x  < t      \   0 x     4 P l        <  d        0 X     ( P x     D l     8 `     0 X     $ L x     @ l     8 `    	 	, 	X 	 	 	 	 
  
L 
t 
 
 
  @ h     8 `      ( h  0 h   0        @     |   |   , h   P @  P  \  x  h    T            0  @  P  `  p                 !  ! !  !0 !@ !P !` !p ! ! ! ! ! ! ! ! "  " "  "0 "@ "P "` "p " " " " " " " " #  # #  #0 #@ #P #` #p # # # # # # # # $  $ $  $0 $@ $P $` $p $ $ $ $ $ $ $ % % %, %< %L %\ %l %| % % % % % % % % & & &, &< &L &\ &l &| & & & & & & & ' ' (H ( ), ) *D * +x , ,< ,t , - . / 1` 3 3 4L 5L 6 8 9 ; <p =l > @$ A C F G  H< I Kx Mt O R$ SX T V X Z ]@ _ al c( e( gd i l o qP sX u x( z } $ P      t (  ` `        8   $   \     D x     L   x 4 $ `   Č P X ʠ $    d     ٸ ڤ ۼ h ݜ ް ߠ T ,    X P         ` <   4   T <    p   X  ` 8 0 H   ( X    p   | p l @      	D 	 
 
p 
         d h < x  \ <  H !( "P #$ # $ % % & ' (< )4 * + + , - .t /@ 0@ 1p 2p 3 4 5 6l 7L 8L :H ;4 <H = >h ?, @ A B D E F G H8 I K` M PT R\ T V Y$ Z \ ]x ] ^ ^l _@ _ ` `t ` a< ah a a b  bT b b b c c4 cP cl c c c c c d d0 dL dh d d d d d e e, el e e e e f fX fp f f f g g g h$ h h h h i i, iP it i i i j8 j k k l l   %N + x    @   !     >        2              	       H                            <             (       4;       <9       <_  	  0    	    	    	  0  	  0a  	    	  ,  	  "  	  :N  	 %:  	  h;  	  <!  	  <E C o p y r i g h t   ( c )   2 0 0 3   b y   B i t s t r e a m ,   I n c .   A l l   R i g h t s   R e s e r v e d . 
 C o p y r i g h t   ( c )   2 0 0 6   b y   T a v m j o n g   B a h .   A l l   R i g h t s   R e s e r v e d . 
 D e j a V u   c h a n g e s   a r e   i n   p u b l i c   d o m a i n 
  Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved.
Copyright (c) 2006 by Tavmjong Bah. All Rights Reserved.
DejaVu changes are in public domain
  D e j a V u   S a n s  DejaVu Sans  B o l d   O b l i q u e  Bold Oblique  D e j a V u   S a n s   B o l d   O b l i q u e  DejaVu Sans Bold Oblique  D e j a V u   S a n s   B o l d   O b l i q u e  DejaVu Sans Bold Oblique  V e r s i o n   2 . 3 7  Version 2.37  D e j a V u S a n s - B o l d O b l i q u e  DejaVuSans-BoldOblique  D e j a V u   f o n t s   t e a m  DejaVu fonts team  h t t p : / / d e j a v u . s o u r c e f o r g e . n e t  http://dejavu.sourceforge.net  F o n t s   a r e   ( c )   B i t s t r e a m   ( s e e   b e l o w ) .   D e j a V u   c h a n g e s   a r e   i n   p u b l i c   d o m a i n .   G l y p h s   i m p o r t e d   f r o m   A r e v   f o n t s   a r e   ( c )   T a v m j u n g   B a h   ( s e e   b e l o w ) 
 
 B i t s t r e a m   V e r a   F o n t s   C o p y r i g h t 
 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
 
 C o p y r i g h t   ( c )   2 0 0 3   b y   B i t s t r e a m ,   I n c .   A l l   R i g h t s   R e s e r v e d .   B i t s t r e a m   V e r a   i s 
 a   t r a d e m a r k   o f   B i t s t r e a m ,   I n c . 
 
 P e r m i s s i o n   i s   h e r e b y   g r a n t e d ,   f r e e   o f   c h a r g e ,   t o   a n y   p e r s o n   o b t a i n i n g   a   c o p y 
 o f   t h e   f o n t s   a c c o m p a n y i n g   t h i s   l i c e n s e   ( " F o n t s " )   a n d   a s s o c i a t e d 
 d o c u m e n t a t i o n   f i l e s   ( t h e   " F o n t   S o f t w a r e " ) ,   t o   r e p r o d u c e   a n d   d i s t r i b u t e   t h e 
 F o n t   S o f t w a r e ,   i n c l u d i n g   w i t h o u t   l i m i t a t i o n   t h e   r i g h t s   t o   u s e ,   c o p y ,   m e r g e , 
 p u b l i s h ,   d i s t r i b u t e ,   a n d / o r   s e l l   c o p i e s   o f   t h e   F o n t   S o f t w a r e ,   a n d   t o   p e r m i t 
 p e r s o n s   t o   w h o m   t h e   F o n t   S o f t w a r e   i s   f u r n i s h e d   t o   d o   s o ,   s u b j e c t   t o   t h e 
 f o l l o w i n g   c o n d i t i o n s : 
 
 T h e   a b o v e   c o p y r i g h t   a n d   t r a d e m a r k   n o t i c e s   a n d   t h i s   p e r m i s s i o n   n o t i c e   s h a l l 
 b e   i n c l u d e d   i n   a l l   c o p i e s   o f   o n e   o r   m o r e   o f   t h e   F o n t   S o f t w a r e   t y p e f a c e s . 
 
 T h e   F o n t   S o f t w a r e   m a y   b e   m o d i f i e d ,   a l t e r e d ,   o r   a d d e d   t o ,   a n d   i n   p a r t i c u l a r 
 t h e   d e s i g n s   o f   g l y p h s   o r   c h a r a c t e r s   i n   t h e   F o n t s   m a y   b e   m o d i f i e d   a n d 
 a d d i t i o n a l   g l y p h s   o r   c h a r a c t e r s   m a y   b e   a d d e d   t o   t h e   F o n t s ,   o n l y   i f   t h e   f o n t s 
 a r e   r e n a m e d   t o   n a m e s   n o t   c o n t a i n i n g   e i t h e r   t h e   w o r d s   " B i t s t r e a m "   o r   t h e   w o r d 
 " V e r a " . 
 
 T h i s   L i c e n s e   b e c o m e s   n u l l   a n d   v o i d   t o   t h e   e x t e n t   a p p l i c a b l e   t o   F o n t s   o r   F o n t 
 S o f t w a r e   t h a t   h a s   b e e n   m o d i f i e d   a n d   i s   d i s t r i b u t e d   u n d e r   t h e   " B i t s t r e a m 
 V e r a "   n a m e s . 
 
 T h e   F o n t   S o f t w a r e   m a y   b e   s o l d   a s   p a r t   o f   a   l a r g e r   s o f t w a r e   p a c k a g e   b u t   n o 
 c o p y   o f   o n e   o r   m o r e   o f   t h e   F o n t   S o f t w a r e   t y p e f a c e s   m a y   b e   s o l d   b y   i t s e l f . 
 
 T H E   F O N T   S O F T W A R E   I S   P R O V I D E D   " A S   I S " ,   W I T H O U T   W A R R A N T Y   O F   A N Y   K I N D ,   E X P R E S S 
 O R   I M P L I E D ,   I N C L U D I N G   B U T   N O T   L I M I T E D   T O   A N Y   W A R R A N T I E S   O F   M E R C H A N T A B I L I T Y , 
 F I T N E S S   F O R   A   P A R T I C U L A R   P U R P O S E   A N D   N O N I N F R I N G E M E N T   O F   C O P Y R I G H T ,   P A T E N T , 
 T R A D E M A R K ,   O R   O T H E R   R I G H T .   I N   N O   E V E N T   S H A L L   B I T S T R E A M   O R   T H E   G N O M E 
 F O U N D A T I O N   B E   L I A B L E   F O R   A N Y   C L A I M ,   D A M A G E S   O R   O T H E R   L I A B I L I T Y ,   I N C L U D I N G 
 A N Y   G E N E R A L ,   S P E C I A L ,   I N D I R E C T ,   I N C I D E N T A L ,   O R   C O N S E Q U E N T I A L   D A M A G E S , 
 W H E T H E R   I N   A N   A C T I O N   O F   C O N T R A C T ,   T O R T   O R   O T H E R W I S E ,   A R I S I N G   F R O M ,   O U T   O F 
 T H E   U S E   O R   I N A B I L I T Y   T O   U S E   T H E   F O N T   S O F T W A R E   O R   F R O M   O T H E R   D E A L I N G S   I N   T H E 
 F O N T   S O F T W A R E . 
 
 E x c e p t   a s   c o n t a i n e d   i n   t h i s   n o t i c e ,   t h e   n a m e s   o f   G n o m e ,   t h e   G n o m e 
 F o u n d a t i o n ,   a n d   B i t s t r e a m   I n c . ,   s h a l l   n o t   b e   u s e d   i n   a d v e r t i s i n g   o r 
 o t h e r w i s e   t o   p r o m o t e   t h e   s a l e ,   u s e   o r   o t h e r   d e a l i n g s   i n   t h i s   F o n t   S o f t w a r e 
 w i t h o u t   p r i o r   w r i t t e n   a u t h o r i z a t i o n   f r o m   t h e   G n o m e   F o u n d a t i o n   o r   B i t s t r e a m 
 I n c . ,   r e s p e c t i v e l y .   F o r   f u r t h e r   i n f o r m a t i o n ,   c o n t a c t :   f o n t s   a t   g n o m e   d o t 
 o r g .   
 
 A r e v   F o n t s   C o p y r i g h t 
 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
 
 C o p y r i g h t   ( c )   2 0 0 6   b y   T a v m j o n g   B a h .   A l l   R i g h t s   R e s e r v e d . 
 
 P e r m i s s i o n   i s   h e r e b y   g r a n t e d ,   f r e e   o f   c h a r g e ,   t o   a n y   p e r s o n   o b t a i n i n g 
 a   c o p y   o f   t h e   f o n t s   a c c o m p a n y i n g   t h i s   l i c e n s e   ( " F o n t s " )   a n d 
 a s s o c i a t e d   d o c u m e n t a t i o n   f i l e s   ( t h e   " F o n t   S o f t w a r e " ) ,   t o   r e p r o d u c e 
 a n d   d i s t r i b u t e   t h e   m o d i f i c a t i o n s   t o   t h e   B i t s t r e a m   V e r a   F o n t   S o f t w a r e , 
 i n c l u d i n g   w i t h o u t   l i m i t a t i o n   t h e   r i g h t s   t o   u s e ,   c o p y ,   m e r g e ,   p u b l i s h , 
 d i s t r i b u t e ,   a n d / o r   s e l l   c o p i e s   o f   t h e   F o n t   S o f t w a r e ,   a n d   t o   p e r m i t 
 p e r s o n s   t o   w h o m   t h e   F o n t   S o f t w a r e   i s   f u r n i s h e d   t o   d o   s o ,   s u b j e c t   t o 
 t h e   f o l l o w i n g   c o n d i t i o n s : 
 
 T h e   a b o v e   c o p y r i g h t   a n d   t r a d e m a r k   n o t i c e s   a n d   t h i s   p e r m i s s i o n   n o t i c e 
 s h a l l   b e   i n c l u d e d   i n   a l l   c o p i e s   o f   o n e   o r   m o r e   o f   t h e   F o n t   S o f t w a r e 
 t y p e f a c e s . 
 
 T h e   F o n t   S o f t w a r e   m a y   b e   m o d i f i e d ,   a l t e r e d ,   o r   a d d e d   t o ,   a n d   i n 
 p a r t i c u l a r   t h e   d e s i g n s   o f   g l y p h s   o r   c h a r a c t e r s   i n   t h e   F o n t s   m a y   b e 
 m o d i f i e d   a n d   a d d i t i o n a l   g l y p h s   o r   c h a r a c t e r s   m a y   b e   a d d e d   t o   t h e 
 F o n t s ,   o n l y   i f   t h e   f o n t s   a r e   r e n a m e d   t o   n a m e s   n o t   c o n t a i n i n g   e i t h e r 
 t h e   w o r d s   " T a v m j o n g   B a h "   o r   t h e   w o r d   " A r e v " . 
 
 T h i s   L i c e n s e   b e c o m e s   n u l l   a n d   v o i d   t o   t h e   e x t e n t   a p p l i c a b l e   t o   F o n t s 
 o r   F o n t   S o f t w a r e   t h a t   h a s   b e e n   m o d i f i e d   a n d   i s   d i s t r i b u t e d   u n d e r   t h e   
 " T a v m j o n g   B a h   A r e v "   n a m e s . 
 
 T h e   F o n t   S o f t w a r e   m a y   b e   s o l d   a s   p a r t   o f   a   l a r g e r   s o f t w a r e   p a c k a g e   b u t 
 n o   c o p y   o f   o n e   o r   m o r e   o f   t h e   F o n t   S o f t w a r e   t y p e f a c e s   m a y   b e   s o l d   b y 
 i t s e l f . 
 
 T H E   F O N T   S O F T W A R E   I S   P R O V I D E D   " A S   I S " ,   W I T H O U T   W A R R A N T Y   O F   A N Y   K I N D , 
 E X P R E S S   O R   I M P L I E D ,   I N C L U D I N G   B U T   N O T   L I M I T E D   T O   A N Y   W A R R A N T I E S   O F 
 M E R C H A N T A B I L I T Y ,   F I T N E S S   F O R   A   P A R T I C U L A R   P U R P O S E   A N D   N O N I N F R I N G E M E N T 
 O F   C O P Y R I G H T ,   P A T E N T ,   T R A D E M A R K ,   O R   O T H E R   R I G H T .   I N   N O   E V E N T   S H A L L 
 T A V M J O N G   B A H   B E   L I A B L E   F O R   A N Y   C L A I M ,   D A M A G E S   O R   O T H E R   L I A B I L I T Y , 
 I N C L U D I N G   A N Y   G E N E R A L ,   S P E C I A L ,   I N D I R E C T ,   I N C I D E N T A L ,   O R   C O N S E Q U E N T I A L 
 D A M A G E S ,   W H E T H E R   I N   A N   A C T I O N   O F   C O N T R A C T ,   T O R T   O R   O T H E R W I S E ,   A R I S I N G 
 F R O M ,   O U T   O F   T H E   U S E   O R   I N A B I L I T Y   T O   U S E   T H E   F O N T   S O F T W A R E   O R   F R O M 
 O T H E R   D E A L I N G S   I N   T H E   F O N T   S O F T W A R E . 
 
 E x c e p t   a s   c o n t a i n e d   i n   t h i s   n o t i c e ,   t h e   n a m e   o f   T a v m j o n g   B a h   s h a l l   n o t 
 b e   u s e d   i n   a d v e r t i s i n g   o r   o t h e r w i s e   t o   p r o m o t e   t h e   s a l e ,   u s e   o r   o t h e r 
 d e a l i n g s   i n   t h i s   F o n t   S o f t w a r e   w i t h o u t   p r i o r   w r i t t e n   a u t h o r i z a t i o n 
 f r o m   T a v m j o n g   B a h .   F o r   f u r t h e r   i n f o r m a t i o n ,   c o n t a c t :   t a v m j o n g   @   f r e e 
 .   f r .  Fonts are (c) Bitstream (see below). DejaVu changes are in public domain. Glyphs imported from Arev fonts are (c) Tavmjung Bah (see below)

Bitstream Vera Fonts Copyright
------------------------------

Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. Bitstream Vera is
a trademark of Bitstream, Inc.

Permission is hereby granted, free of charge, to any person obtaining a copy
of the fonts accompanying this license ("Fonts") and associated
documentation files (the "Font Software"), to reproduce and distribute the
Font Software, including without limitation the rights to use, copy, merge,
publish, distribute, and/or sell copies of the Font Software, and to permit
persons to whom the Font Software is furnished to do so, subject to the
following conditions:

The above copyright and trademark notices and this permission notice shall
be included in all copies of one or more of the Font Software typefaces.

The Font Software may be modified, altered, or added to, and in particular
the designs of glyphs or characters in the Fonts may be modified and
additional glyphs or characters may be added to the Fonts, only if the fonts
are renamed to names not containing either the words "Bitstream" or the word
"Vera".

This License becomes null and void to the extent applicable to Fonts or Font
Software that has been modified and is distributed under the "Bitstream
Vera" names.

The Font Software may be sold as part of a larger software package but no
copy of one or more of the Font Software typefaces may be sold by itself.

THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT,
TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL BITSTREAM OR THE GNOME
FOUNDATION BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING
ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES,
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE
FONT SOFTWARE.

Except as contained in this notice, the names of Gnome, the Gnome
Foundation, and Bitstream Inc., shall not be used in advertising or
otherwise to promote the sale, use or other dealings in this Font Software
without prior written authorization from the Gnome Foundation or Bitstream
Inc., respectively. For further information, contact: fonts at gnome dot
org. 

Arev Fonts Copyright
------------------------------

Copyright (c) 2006 by Tavmjong Bah. All Rights Reserved.

Permission is hereby granted, free of charge, to any person obtaining
a copy of the fonts accompanying this license ("Fonts") and
associated documentation files (the "Font Software"), to reproduce
and distribute the modifications to the Bitstream Vera Font Software,
including without limitation the rights to use, copy, merge, publish,
distribute, and/or sell copies of the Font Software, and to permit
persons to whom the Font Software is furnished to do so, subject to
the following conditions:

The above copyright and trademark notices and this permission notice
shall be included in all copies of one or more of the Font Software
typefaces.

The Font Software may be modified, altered, or added to, and in
particular the designs of glyphs or characters in the Fonts may be
modified and additional glyphs or characters may be added to the
Fonts, only if the fonts are renamed to names not containing either
the words "Tavmjong Bah" or the word "Arev".

This License becomes null and void to the extent applicable to Fonts
or Font Software that has been modified and is distributed under the 
"Tavmjong Bah Arev" names.

The Font Software may be sold as part of a larger software package but
no copy of one or more of the Font Software typefaces may be sold by
itself.

THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL
TAVMJONG BAH BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
OTHER DEALINGS IN THE FONT SOFTWARE.

Except as contained in this notice, the name of Tavmjong Bah shall not
be used in advertising or otherwise to promote the sale, use or other
dealings in this Font Software without prior written authorization
from Tavmjong Bah. For further information, contact: tavmjong @ free
. fr.  h t t p : / / d e j a v u . s o u r c e f o r g e . n e t / w i k i / i n d e x . p h p / L i c e n s e  http://dejavu.sourceforge.net/wiki/index.php/License  D e j a V u   S a n s  DejaVu Sans  B o l d   O b l i q u e  Bold Oblique        ~ Z                    %           	 
                        ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a                                    b c  d  e        f     g      h    j i k m l n  o q p r s u t v w  x z y { } |    ~       	
     !"#$%&'()*+  ,-./0123456789:  ;<=>?@ABCDEFGHI  JKLMNOPQRS    TUVWXYZ[\]^_`abcdefghi jklm  nopqrstuvwxyz{|}~  	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~         	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`a bcdefghijklmnopqrstuvw xyz{|}~ 	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ 	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ 	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ 	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ 	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~	 											
																						 	!	"	#	$	%	&	'	(	)	*	+	,	-	.	/	0	1	2	3	4	5	6	7	8	9	:	;	<	=	>	?	@	A	B	C	D	E	F	G	H	I	J	K	L	M	N	O	P	Q	R	S	T	U	V	W	X	Y	Z	[	\	]	^	_	`	a	b	c	d	e	f	g	h	i	j	k	l	m	n	o	p	q	r	s	t	u	v	w	x	y	z	{	|	}	~																																																																																																																																	
 








	






















  
 
!
"   
#   
$   
%
&
' 
(
)
*
+
,
-
.
/
0 
1
2
3
4
5
6
7
8  
9
:
;
<
=
>
?
@
A 
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
[
\
]
^
_
`
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
{
|
}
~





















 





























































 












































 	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~             	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ 	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~  	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ 	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ 	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ 	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ 	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~   	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ 	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ 	
 !"#$%	sfthyphenAmacronamacronAbreveabreveAogonekaogonekCcircumflexccircumflex
Cdotaccent
cdotaccentDcarondcaronDcroatEmacronemacronEbreveebreve
Edotaccent
edotaccentEogonekeogonekEcaronecaronGcircumflexgcircumflex
Gdotaccent
gdotaccentGcommaaccentgcommaaccentHcircumflexhcircumflexHbarhbarItildeitildeImacronimacronIbreveibreveIogonekiogonekIJijJcircumflexjcircumflexKcommaaccentkcommaaccentkgreenlandicLacutelacuteLcommaaccentlcommaaccentLcaronlcaronLdotldotNacutenacuteNcommaaccentncommaaccentNcaronncaronnapostropheEngengOmacronomacronObreveobreveOhungarumlautohungarumlautRacuteracuteRcommaaccentrcommaaccentRcaronrcaronSacutesacuteScircumflexscircumflexTcommaaccenttcommaaccentTcarontcaronTbartbarUtildeutildeUmacronumacronUbreveubreveUringuringUhungarumlautuhungarumlautUogonekuogonekWcircumflexwcircumflexYcircumflexycircumflexZacutezacute
Zdotaccent
zdotaccentlongsuni0180uni0181uni0182uni0183uni0184uni0185uni0186uni0187uni0188uni0189uni018Auni018Buni018Cuni018Duni018Euni018Funi0190uni0191uni0193uni0194uni0195uni0196uni0197uni0198uni0199uni019Auni019Buni019Cuni019Duni019Euni019FOhornohornuni01A2uni01A3uni01A4uni01A5uni01A6uni01A7uni01A8uni01A9uni01AAuni01ABuni01ACuni01ADuni01AEUhornuhornuni01B1uni01B2uni01B3uni01B4uni01B5uni01B6uni01B7uni01B8uni01B9uni01BAuni01BBuni01BCuni01BDuni01BEuni01BFuni01C0uni01C1uni01C2uni01C3uni01C4uni01C5uni01C6uni01C7uni01C8uni01C9uni01CAuni01CBuni01CCuni01CDuni01CEuni01CFuni01D0uni01D1uni01D2uni01D3uni01D4uni01D5uni01D6uni01D7uni01D8uni01D9uni01DAuni01DBuni01DCuni01DDuni01DEuni01DFuni01E0uni01E1uni01E2uni01E3uni01E4uni01E5Gcarongcaronuni01E8uni01E9uni01EAuni01EBuni01ECuni01EDuni01EEuni01EFuni01F0uni01F1uni01F2uni01F3uni01F4uni01F5uni01F6uni01F7uni01F8uni01F9
Aringacute
aringacuteAEacuteaeacuteOslashacuteoslashacuteuni0200uni0201uni0202uni0203uni0204uni0205uni0206uni0207uni0208uni0209uni020Auni020Buni020Cuni020Duni020Euni020Funi0210uni0211uni0212uni0213uni0214uni0215uni0216uni0217Scommaaccentscommaaccentuni021Auni021Buni021Cuni021Duni021Euni021Funi0220uni0221uni0222uni0223uni0224uni0225uni0226uni0227uni0228uni0229uni022Auni022Buni022Cuni022Duni022Euni022Funi0230uni0231uni0232uni0233uni0234uni0235uni0236dotlessjuni0238uni0239uni023Auni023Buni023Cuni023Duni023Euni023Funi0240uni0241uni0242uni0243uni0244uni0245uni0246uni0247uni0248uni0249uni024Auni024Buni024Cuni024Duni024Euni024Funi0250uni0251uni0252uni0253uni0254uni0255uni0256uni0257uni0258uni0259uni025Auni025Buni025Cuni025Duni025Euni025Funi0260uni0261uni0262uni0263uni0264uni0265uni0266uni0267uni0268uni0269uni026Auni026Buni026Cuni026Duni026Euni026Funi0270uni0271uni0272uni0273uni0274uni0275uni0276uni0277uni0278uni0279uni027Auni027Buni027Cuni027Duni027Euni027Funi0280uni0281uni0282uni0283uni0284uni0285uni0286uni0287uni0288uni0289uni028Auni028Buni028Cuni028Duni028Euni028Funi0290uni0291uni0292uni0293uni0294uni0295uni0296uni0297uni0298uni0299uni029Auni029Buni029Cuni029Duni029Euni029Funi02A0uni02A1uni02A2uni02A3uni02A4uni02A5uni02A6uni02A7uni02A8uni02A9uni02AAuni02ABuni02ACuni02ADuni02AEuni02AFuni02B0uni02B1uni02B2uni02B3uni02B4uni02B5uni02B6uni02B7uni02B8uni02B9uni02BAuni02BBuni02BCuni02BDuni02BEuni02BFuni02C0uni02C1uni02C2uni02C3uni02C4uni02C5uni02C8uni02C9uni02CAuni02CBuni02CCuni02CDuni02CEuni02CFuni02D0uni02D1uni02D2uni02D3uni02D4uni02D5uni02D6uni02D7uni02DEuni02DFuni02E0uni02E1uni02E2uni02E3uni02E4uni02E5uni02E6uni02E7uni02E8uni02E9uni02ECuni02EDuni02EEuni02F3uni02F7	gravecomb	acutecombuni0302	tildecombuni0304uni0305uni0306uni0307uni0308hookabovecombuni030Auni030Buni030Cuni030Duni030Euni030Funi0310uni0311uni0312uni0313uni0314uni0315uni0316uni0317uni0318uni0319uni031Auni031Buni031Cuni031Duni031Euni031Funi0320uni0321uni0322dotbelowcombuni0324uni0325uni0326uni0327uni0328uni0329uni032Auni032Buni032Cuni032Duni032Euni032Funi0330uni0331uni0332uni0333uni0334uni0335uni0336uni0337uni0338uni0339uni033Auni033Buni033Cuni033Duni033Euni033Funi0340uni0341uni0342uni0343uni0344uni0345uni0346uni0347uni0348uni0349uni034Auni034Buni034Cuni034Duni034Euni034Funi0351uni0352uni0353uni0357uni0358uni035Auni035Cuni035Duni035Euni035Funi0360uni0361uni0362uni0370uni0371uni0372uni0373uni0374uni0375uni0376uni0377uni037Auni037Buni037Cuni037Duni037Euni037Ftonosdieresistonos
Alphatonos	anoteleiaEpsilontonosEtatonos	IotatonosOmicrontonosUpsilontonos
OmegatonosiotadieresistonosAlphaBetaGammauni0394EpsilonZetaEtaThetaIotaKappaLambdaMuNuXiOmicronPiRhoSigmaTauUpsilonPhiChiPsiIotadieresisUpsilondieresis
alphatonosepsilontonosetatonos	iotatonosupsilondieresistonosalphabetagammadeltaepsilonzetaetathetaiotakappalambdauni03BCnuxiomicronrhosigma1sigmatauupsilonphichipsiomegaiotadieresisupsilondieresisomicrontonosupsilontonos
omegatonosuni03CFuni03D0theta1Upsilon1uni03D3uni03D4phi1omega1uni03D7uni03D8uni03D9uni03DAuni03DBuni03DCuni03DDuni03DEuni03DFuni03E0uni03E1uni03E2uni03E3uni03E4uni03E5uni03E6uni03E7uni03E8uni03E9uni03EAuni03EBuni03ECuni03EDuni03EEuni03EFuni03F0uni03F1uni03F2uni03F3uni03F4uni03F5uni03F6uni03F7uni03F8uni03F9uni03FAuni03FBuni03FCuni03FDuni03FEuni03FFuni0400uni0401uni0402uni0403uni0404uni0405uni0406uni0407uni0408uni0409uni040Auni040Buni040Cuni040Duni040Euni040Funi0410uni0411uni0412uni0413uni0414uni0415uni0416uni0417uni0418uni0419uni041Auni041Buni041Cuni041Duni041Euni041Funi0420uni0421uni0422uni0423uni0424uni0425uni0426uni0427uni0428uni0429uni042Auni042Buni042Cuni042Duni042Euni042Funi0430uni0431uni0432uni0433uni0434uni0435uni0436uni0437uni0438uni0439uni043Auni043Buni043Cuni043Duni043Euni043Funi0440uni0441uni0442uni0443uni0444uni0445uni0446uni0447uni0448uni0449uni044Auni044Buni044Cuni044Duni044Euni044Funi0450uni0451uni0452uni0453uni0454uni0455uni0456uni0457uni0458uni0459uni045Auni045Buni045Cuni045Duni045Euni045Funi0460uni0461uni0462uni0463uni0464uni0465uni0466uni0467uni0468uni0469uni046Auni046Buni046Cuni046Duni046Euni046Funi0470uni0471uni0472uni0473uni0474uni0475uni0476uni0477uni0478uni0479uni047Auni047Buni047Cuni047Duni047Euni047Funi0480uni0481uni0482uni0483uni0484uni0485uni0486uni0487uni0488uni0489uni048Auni048Buni048Cuni048Duni048Euni048Funi0490uni0491uni0492uni0493uni0494uni0495uni0496uni0497uni0498uni0499uni049Auni049Buni049Cuni049Duni049Euni049Funi04A0uni04A1uni04A2uni04A3uni04A4uni04A5uni04A6uni04A7uni04A8uni04A9uni04AAuni04ABuni04ACuni04ADuni04AEuni04AFuni04B0uni04B1uni04B2uni04B3uni04B4uni04B5uni04B6uni04B7uni04B8uni04B9uni04BAuni04BBuni04BCuni04BDuni04BEuni04BFuni04C0uni04C1uni04C2uni04C3uni04C4uni04C5uni04C6uni04C7uni04C8uni04C9uni04CAuni04CBuni04CCuni04CDuni04CEuni04CFuni04D0uni04D1uni04D2uni04D3uni04D4uni04D5uni04D6uni04D7uni04D8uni04D9uni04DAuni04DBuni04DCuni04DDuni04DEuni04DFuni04E0uni04E1uni04E2uni04E3uni04E4uni04E5uni04E6uni04E7uni04E8uni04E9uni04EAuni04EBuni04ECuni04EDuni04EEuni04EFuni04F0uni04F1uni04F2uni04F3uni04F4uni04F5uni04F6uni04F7uni04F8uni04F9uni04FAuni04FBuni04FCuni04FDuni04FEuni04FFuni0500uni0501uni0502uni0503uni0504uni0505uni0506uni0507uni0508uni0509uni050Auni050Buni050Cuni050Duni050Euni050Funi0510uni0511uni0512uni0513uni0514uni0515uni0516uni0517uni0518uni0519uni051Auni051Buni051Cuni051Duni051Euni051Funi0520uni0521uni0522uni0523uni0524uni0525uni0531uni0532uni0533uni0534uni0535uni0536uni0537uni0538uni0539uni053Auni053Buni053Cuni053Duni053Euni053Funi0540uni0541uni0542uni0543uni0544uni0545uni0546uni0547uni0548uni0549uni054Auni054Buni054Cuni054Duni054Euni054Funi0550uni0551uni0552uni0553uni0554uni0555uni0556uni0559uni055Auni055Buni055Cuni055Duni055Euni055Funi0561uni0562uni0563uni0564uni0565uni0566uni0567uni0568uni0569uni056Auni056Buni056Cuni056Duni056Euni056Funi0570uni0571uni0572uni0573uni0574uni0575uni0576uni0577uni0578uni0579uni057Auni057Buni057Cuni057Duni057Euni057Funi0580uni0581uni0582uni0583uni0584uni0585uni0586uni0587uni0589uni058Auni05B0uni05B1uni05B2uni05B3uni05B4uni05B5uni05B6uni05B7uni05B8uni05B9uni05BAuni05BBuni05BCuni05BDuni05BEuni05BFuni05C0uni05C1uni05C2uni05C3uni05C6uni05C7uni05D0uni05D1uni05D2uni05D3uni05D4uni05D5uni05D6uni05D7uni05D8uni05D9uni05DAuni05DBuni05DCuni05DDuni05DEuni05DFuni05E0uni05E1uni05E2uni05E3uni05E4uni05E5uni05E6uni05E7uni05E8uni05E9uni05EAuni05F0uni05F1uni05F2uni05F3uni05F4uni0E3Funi0E81uni0E82uni0E84uni0E87uni0E88uni0E8Auni0E8Duni0E94uni0E95uni0E96uni0E97uni0E99uni0E9Auni0E9Buni0E9Cuni0E9Duni0E9Euni0E9Funi0EA1uni0EA2uni0EA3uni0EA5uni0EA7uni0EAAuni0EABuni0EADuni0EAEuni0EAFuni0EB0uni0EB1uni0EB2uni0EB3uni0EB4uni0EB5uni0EB6uni0EB7uni0EB8uni0EB9uni0EBBuni0EBCuni0EBDuni0EC0uni0EC1uni0EC2uni0EC3uni0EC4uni0EC6uni0EC8uni0EC9uni0ECAuni0ECBuni0ECCuni0ECDuni0ED0uni0ED1uni0ED2uni0ED3uni0ED4uni0ED5uni0ED6uni0ED7uni0ED8uni0ED9uni0EDCuni0EDDuni10A0uni10A1uni10A2uni10A3uni10A4uni10A5uni10A6uni10A7uni10A8uni10A9uni10AAuni10ABuni10ACuni10ADuni10AEuni10AFuni10B0uni10B1uni10B2uni10B3uni10B4uni10B5uni10B6uni10B7uni10B8uni10B9uni10BAuni10BBuni10BCuni10BDuni10BEuni10BFuni10C0uni10C1uni10C2uni10C3uni10C4uni10C5uni10D0uni10D1uni10D2uni10D3uni10D4uni10D5uni10D6uni10D7uni10D8uni10D9uni10DAuni10DBuni10DCuni10DDuni10DEuni10DFuni10E0uni10E1uni10E2uni10E3uni10E4uni10E5uni10E6uni10E7uni10E8uni10E9uni10EAuni10EBuni10ECuni10EDuni10EEuni10EFuni10F0uni10F1uni10F2uni10F3uni10F4uni10F5uni10F6uni10F7uni10F8uni10F9uni10FAuni10FBuni10FCuni1401uni1402uni1403uni1404uni1405uni1406uni1407uni1409uni140Auni140Buni140Cuni140Duni140Euni140Funi1410uni1411uni1412uni1413uni1414uni1415uni1416uni1417uni1418uni1419uni141Auni141Buni141Duni141Euni141Funi1420uni1421uni1422uni1423uni1424uni1425uni1426uni1427uni1428uni1429uni142Auni142Buni142Cuni142Duni142Euni142Funi1430uni1431uni1432uni1433uni1434uni1435uni1437uni1438uni1439uni143Auni143Buni143Cuni143Duni143Euni143Funi1440uni1441uni1442uni1443uni1444uni1445uni1446uni1447uni1448uni1449uni144Auni144Cuni144Duni144Euni144Funi1450uni1451uni1452uni1454uni1455uni1456uni1457uni1458uni1459uni145Auni145Buni145Cuni145Duni145Euni145Funi1460uni1461uni1462uni1463uni1464uni1465uni1466uni1467uni1468uni1469uni146Auni146Buni146Cuni146Duni146Euni146Funi1470uni1471uni1472uni1473uni1474uni1475uni1476uni1477uni1478uni1479uni147Auni147Buni147Cuni147Duni147Euni147Funi1480uni1481uni1482uni1483uni1484uni1485uni1486uni1487uni1488uni1489uni148Auni148Buni148Cuni148Duni148Euni148Funi1490uni1491uni1492uni1493uni1494uni1495uni1496uni1497uni1498uni1499uni149Auni149Buni149Cuni149Duni149Euni149Funi14A0uni14A1uni14A2uni14A3uni14A4uni14A5uni14A6uni14A7uni14A8uni14A9uni14AAuni14ABuni14ACuni14ADuni14AEuni14AFuni14B0uni14B1uni14B2uni14B3uni14B4uni14B5uni14B6uni14B7uni14B8uni14B9uni14BAuni14BBuni14BCuni14BDuni14C0uni14C1uni14C2uni14C3uni14C4uni14C5uni14C6uni14C7uni14C8uni14C9uni14CAuni14CBuni14CCuni14CDuni14CEuni14CFuni14D0uni14D1uni14D2uni14D3uni14D4uni14D5uni14D6uni14D7uni14D8uni14D9uni14DAuni14DBuni14DCuni14DDuni14DEuni14DFuni14E0uni14E1uni14E2uni14E3uni14E4uni14E5uni14E6uni14E7uni14E8uni14E9uni14EAuni14ECuni14EDuni14EEuni14EFuni14F0uni14F1uni14F2uni14F3uni14F4uni14F5uni14F6uni14F7uni14F8uni14F9uni14FAuni14FBuni14FCuni14FDuni14FEuni14FFuni1500uni1501uni1502uni1503uni1504uni1505uni1506uni1507uni1510uni1511uni1512uni1513uni1514uni1515uni1516uni1517uni1518uni1519uni151Auni151Buni151Cuni151Duni151Euni151Funi1520uni1521uni1522uni1523uni1524uni1525uni1526uni1527uni1528uni1529uni152Auni152Buni152Cuni152Duni152Euni152Funi1530uni1531uni1532uni1533uni1534uni1535uni1536uni1537uni1538uni1539uni153Auni153Buni153Cuni153Duni153Euni1540uni1541uni1542uni1543uni1544uni1545uni1546uni1547uni1548uni1549uni154Auni154Buni154Cuni154Duni154Euni154Funi1550uni1552uni1553uni1554uni1555uni1556uni1557uni1558uni1559uni155Auni155Buni155Cuni155Duni155Euni155Funi1560uni1561uni1562uni1563uni1564uni1565uni1566uni1567uni1568uni1569uni156Auni1574uni1575uni1576uni1577uni1578uni1579uni157Auni157Buni157Cuni157Duni157Euni157Funi1580uni1581uni1582uni1583uni1584uni1585uni158Auni158Buni158Cuni158Duni158Euni158Funi1590uni1591uni1592uni1593uni1594uni1595uni1596uni15A0uni15A1uni15A2uni15A3uni15A4uni15A5uni15A6uni15A7uni15A8uni15A9uni15AAuni15ABuni15ACuni15ADuni15AEuni15AFuni15DEuni15E1uni1646uni1647uni166Euni166Funi1670uni1671uni1672uni1673uni1674uni1675uni1676uni1D00uni1D01uni1D02uni1D03uni1D04uni1D05uni1D06uni1D07uni1D08uni1D09uni1D0Auni1D0Buni1D0Cuni1D0Duni1D0Euni1D0Funi1D10uni1D11uni1D12uni1D13uni1D14uni1D16uni1D17uni1D18uni1D19uni1D1Auni1D1Buni1D1Cuni1D1Duni1D1Euni1D1Funi1D20uni1D21uni1D22uni1D23uni1D26uni1D27uni1D28uni1D29uni1D2Auni1D2Buni1D2Cuni1D2Duni1D2Euni1D30uni1D31uni1D32uni1D33uni1D34uni1D35uni1D36uni1D37uni1D38uni1D39uni1D3Auni1D3Buni1D3Cuni1D3Duni1D3Euni1D3Funi1D40uni1D41uni1D42uni1D43uni1D44uni1D45uni1D46uni1D47uni1D48uni1D49uni1D4Auni1D4Buni1D4Cuni1D4Duni1D4Euni1D4Funi1D50uni1D51uni1D52uni1D53uni1D54uni1D55uni1D56uni1D57uni1D58uni1D59uni1D5Auni1D5Buni1D5Duni1D5Euni1D5Funi1D60uni1D61uni1D62uni1D63uni1D64uni1D65uni1D66uni1D67uni1D68uni1D69uni1D6Auni1D77uni1D78uni1D7Buni1D7Duni1D85uni1D9Buni1D9Cuni1D9Duni1D9Euni1D9Funi1DA0uni1DA1uni1DA2uni1DA3uni1DA4uni1DA5uni1DA6uni1DA7uni1DA8uni1DA9uni1DAAuni1DABuni1DACuni1DADuni1DAEuni1DAFuni1DB0uni1DB1uni1DB2uni1DB3uni1DB4uni1DB5uni1DB6uni1DB7uni1DB8uni1DB9uni1DBAuni1DBBuni1DBCuni1DBDuni1DBEuni1DBFuni1DC4uni1DC5uni1DC6uni1DC7uni1DC8uni1DC9uni1E00uni1E01uni1E02uni1E03uni1E04uni1E05uni1E06uni1E07uni1E08uni1E09uni1E0Auni1E0Buni1E0Cuni1E0Duni1E0Euni1E0Funi1E10uni1E11uni1E12uni1E13uni1E14uni1E15uni1E16uni1E17uni1E18uni1E19uni1E1Auni1E1Buni1E1Cuni1E1Duni1E1Euni1E1Funi1E20uni1E21uni1E22uni1E23uni1E24uni1E25uni1E26uni1E27uni1E28uni1E29uni1E2Auni1E2Buni1E2Cuni1E2Duni1E2Euni1E2Funi1E30uni1E31uni1E32uni1E33uni1E34uni1E35uni1E36uni1E37uni1E38uni1E39uni1E3Auni1E3Buni1E3Cuni1E3Duni1E3Euni1E3Funi1E40uni1E41uni1E42uni1E43uni1E44uni1E45uni1E46uni1E47uni1E48uni1E49uni1E4Auni1E4Buni1E4Cuni1E4Duni1E4Euni1E4Funi1E50uni1E51uni1E52uni1E53uni1E54uni1E55uni1E56uni1E57uni1E58uni1E59uni1E5Auni1E5Buni1E5Cuni1E5Duni1E5Euni1E5Funi1E60uni1E61uni1E62uni1E63uni1E64uni1E65uni1E66uni1E67uni1E68uni1E69uni1E6Auni1E6Buni1E6Cuni1E6Duni1E6Euni1E6Funi1E70uni1E71uni1E72uni1E73uni1E74uni1E75uni1E76uni1E77uni1E78uni1E79uni1E7Auni1E7Buni1E7Cuni1E7Duni1E7Euni1E7FWgravewgraveWacutewacute	Wdieresis	wdieresisuni1E86uni1E87uni1E88uni1E89uni1E8Auni1E8Buni1E8Cuni1E8Duni1E8Euni1E8Funi1E90uni1E91uni1E92uni1E93uni1E94uni1E95uni1E96uni1E97uni1E98uni1E99uni1E9Auni1E9Buni1E9Cuni1E9Duni1E9Euni1E9Funi1EA0uni1EA1uni1EA2uni1EA3uni1EA4uni1EA5uni1EA6uni1EA7uni1EA8uni1EA9uni1EAAuni1EABuni1EACuni1EADuni1EAEuni1EAFuni1EB0uni1EB1uni1EB2uni1EB3uni1EB4uni1EB5uni1EB6uni1EB7uni1EB8uni1EB9uni1EBAuni1EBBuni1EBCuni1EBDuni1EBEuni1EBFuni1EC0uni1EC1uni1EC2uni1EC3uni1EC4uni1EC5uni1EC6uni1EC7uni1EC8uni1EC9uni1ECAuni1ECBuni1ECCuni1ECDuni1ECEuni1ECFuni1ED0uni1ED1uni1ED2uni1ED3uni1ED4uni1ED5uni1ED6uni1ED7uni1ED8uni1ED9uni1EDAuni1EDBuni1EDCuni1EDDuni1EDEuni1EDFuni1EE0uni1EE1uni1EE2uni1EE3uni1EE4uni1EE5uni1EE6uni1EE7uni1EE8uni1EE9uni1EEAuni1EEBuni1EECuni1EEDuni1EEEuni1EEFuni1EF0uni1EF1Ygraveygraveuni1EF4uni1EF5uni1EF6uni1EF7uni1EF8uni1EF9uni1EFAuni1EFBuni1F00uni1F01uni1F02uni1F03uni1F04uni1F05uni1F06uni1F07uni1F08uni1F09uni1F0Auni1F0Buni1F0Cuni1F0Duni1F0Euni1F0Funi1F10uni1F11uni1F12uni1F13uni1F14uni1F15uni1F18uni1F19uni1F1Auni1F1Buni1F1Cuni1F1Duni1F20uni1F21uni1F22uni1F23uni1F24uni1F25uni1F26uni1F27uni1F28uni1F29uni1F2Auni1F2Buni1F2Cuni1F2Duni1F2Euni1F2Funi1F30uni1F31uni1F32uni1F33uni1F34uni1F35uni1F36uni1F37uni1F38uni1F39uni1F3Auni1F3Buni1F3Cuni1F3Duni1F3Euni1F3Funi1F40uni1F41uni1F42uni1F43uni1F44uni1F45uni1F48uni1F49uni1F4Auni1F4Buni1F4Cuni1F4Duni1F50uni1F51uni1F52uni1F53uni1F54uni1F55uni1F56uni1F57uni1F59uni1F5Buni1F5Duni1F5Funi1F60uni1F61uni1F62uni1F63uni1F64uni1F65uni1F66uni1F67uni1F68uni1F69uni1F6Auni1F6Buni1F6Cuni1F6Duni1F6Euni1F6Funi1F70uni1F71uni1F72uni1F73uni1F74uni1F75uni1F76uni1F77uni1F78uni1F79uni1F7Auni1F7Buni1F7Cuni1F7Duni1F80uni1F81uni1F82uni1F83uni1F84uni1F85uni1F86uni1F87uni1F88uni1F89uni1F8Auni1F8Buni1F8Cuni1F8Duni1F8Euni1F8Funi1F90uni1F91uni1F92uni1F93uni1F94uni1F95uni1F96uni1F97uni1F98uni1F99uni1F9Auni1F9Buni1F9Cuni1F9Duni1F9Euni1F9Funi1FA0uni1FA1uni1FA2uni1FA3uni1FA4uni1FA5uni1FA6uni1FA7uni1FA8uni1FA9uni1FAAuni1FABuni1FACuni1FADuni1FAEuni1FAFuni1FB0uni1FB1uni1FB2uni1FB3uni1FB4uni1FB6uni1FB7uni1FB8uni1FB9uni1FBAuni1FBBuni1FBCuni1FBDuni1FBEuni1FBFuni1FC0uni1FC1uni1FC2uni1FC3uni1FC4uni1FC6uni1FC7uni1FC8uni1FC9uni1FCAuni1FCBuni1FCCuni1FCDuni1FCEuni1FCFuni1FD0uni1FD1uni1FD2uni1FD3uni1FD6uni1FD7uni1FD8uni1FD9uni1FDAuni1FDBuni1FDDuni1FDEuni1FDFuni1FE0uni1FE1uni1FE2uni1FE3uni1FE4uni1FE5uni1FE6uni1FE7uni1FE8uni1FE9uni1FEAuni1FEBuni1FECuni1FEDuni1FEEuni1FEFuni1FF2uni1FF3uni1FF4uni1FF6uni1FF7uni1FF8uni1FF9uni1FFAuni1FFBuni1FFCuni1FFDuni1FFEuni2000uni2001uni2002uni2003uni2004uni2005uni2006uni2007uni2008uni2009uni200Auni200Buni200Cuni200Duni200Euni200Funi2010uni2011
figuredashuni2015uni2016underscoredblquotereverseduni201Funi2023onedotenleadertwodotenleaderuni2027uni2028uni2029uni202Auni202Buni202Cuni202Duni202Euni202Funi2031minuteseconduni2034uni2035uni2036uni2037uni2038uni203B	exclamdbluni203Duni203Euni203Funi2040uni2041uni2042uni2043uni2045uni2046uni2047uni2048uni2049uni204Auni204Buni204Cuni204Duni204Euni204Funi2050uni2051uni2052uni2053uni2054uni2055uni2056uni2057uni2058uni2059uni205Auni205Buni205Cuni205Duni205Euni205Funi2060uni2061uni2062uni2063uni2064uni206Auni206Buni206Cuni206Duni206Euni206Funi2070uni2071uni2074uni2075uni2076uni2077uni2078uni2079uni207Auni207Buni207Cuni207Duni207Euni207Funi2080uni2081uni2082uni2083uni2084uni2085uni2086uni2087uni2088uni2089uni208Auni208Buni208Cuni208Duni208Euni2090uni2091uni2092uni2093uni2094uni2095uni2096uni2097uni2098uni2099uni209Auni209Buni209Cuni20A0colonmonetaryuni20A2lirauni20A5uni20A6pesetauni20A8uni20A9uni20AAdongEurouni20ADuni20AEuni20AFuni20B0uni20B1uni20B2uni20B3uni20B4uni20B5uni20B8uni20B9uni20BAuni20BDuni20D0uni20D1uni20D6uni20D7uni20DBuni20DCuni20E1uni2100uni2101uni2102uni2103uni2104uni2105uni2106uni2107uni2108uni2109uni210Buni210Cuni210Duni210Euni210Funi2110Ifrakturuni2112uni2113uni2114uni2115uni2116uni2117weierstrassuni2119uni211Auni211BRfrakturuni211Dprescriptionuni211Funi2120uni2121uni2123uni2124uni2125uni2126uni2127uni2128uni2129uni212Auni212Buni212Cuni212D	estimateduni212Funi2130uni2131uni2132uni2133uni2134alephuni2136uni2137uni2138uni2139uni213Auni213Buni213Cuni213Duni213Euni213Funi2140uni2141uni2142uni2143uni2144uni2145uni2146uni2147uni2148uni2149uni214Buni214Euni2150uni2151uni2152onethird	twothirdsuni2155uni2156uni2157uni2158uni2159uni215A	oneeighththreeeighthsfiveeighthsseveneighthsuni215Funi2160uni2161uni2162uni2163uni2164uni2165uni2166uni2167uni2168uni2169uni216Auni216Buni216Cuni216Duni216Euni216Funi2170uni2171uni2172uni2173uni2174uni2175uni2176uni2177uni2178uni2179uni217Auni217Buni217Cuni217Duni217Euni217Funi2180uni2181uni2182uni2183uni2184uni2185uni2189	arrowleftarrowup
arrowright	arrowdown	arrowboth	arrowupdnuni2196uni2197uni2198uni2199uni219Auni219Buni219Cuni219Duni219Euni219Funi21A0uni21A1uni21A2uni21A3uni21A4uni21A5uni21A6uni21A7arrowupdnbseuni21A9uni21AAuni21ABuni21ACuni21ADuni21AEuni21AFuni21B0uni21B1uni21B2uni21B3uni21B4carriagereturnuni21B6uni21B7uni21B8uni21B9uni21BAuni21BBuni21BCuni21BDuni21BEuni21BFuni21C0uni21C1uni21C2uni21C3uni21C4uni21C5uni21C6uni21C7uni21C8uni21C9uni21CAuni21CBuni21CCuni21CDuni21CEuni21CFarrowdblleft
arrowdbluparrowdblrightarrowdbldownarrowdblbothuni21D5uni21D6uni21D7uni21D8uni21D9uni21DAuni21DBuni21DCuni21DDuni21DEuni21DFuni21E0uni21E1uni21E2uni21E3uni21E4uni21E5uni21E6uni21E7uni21E8uni21E9uni21EAuni21EBuni21ECuni21EDuni21EEuni21EFuni21F0uni21F1uni21F2uni21F3uni21F4uni21F5uni21F6uni21F7uni21F8uni21F9uni21FAuni21FBuni21FCuni21FDuni21FEuni21FF	universaluni2201existentialuni2204emptysetgradientelement
notelementuni220Asuchthatuni220Cuni220Duni220Euni2210uni2213uni2214uni2215uni2216asteriskmathuni2218uni2219uni221Buni221Cproportional
orthogonalangleuni2221uni2222uni2223uni2224uni2225uni2226
logicaland	logicalorintersectionunionuni222Cuni222Duni222Euni222Funi2230uni2231uni2232uni2233	thereforeuni2235uni2236uni2237uni2238uni2239uni223Auni223Bsimilaruni223Duni223Euni223Funi2240uni2241uni2242uni2243uni2244	congruentuni2246uni2247uni2249uni224Auni224Buni224Cuni224Duni224Euni224Funi2250uni2251uni2252uni2253uni2254uni2255uni2256uni2257uni2258uni2259uni225Auni225Buni225Cuni225Duni225Euni225Fequivalenceuni2262uni2263uni2266uni2267uni2268uni2269uni226Auni226Buni226Cuni226Duni226Euni226Funi2270uni2271uni2272uni2273uni2274uni2275uni2276uni2277uni2278uni2279uni227Auni227Buni227Cuni227Duni227Euni227Funi2280uni2281propersubsetpropersuperset	notsubsetuni2285reflexsubsetreflexsupersetuni2288uni2289uni228Auni228Buni228Cuni228Duni228Euni228Funi2290uni2291uni2292uni2293uni2294
circleplusuni2296circlemultiplyuni2298uni2299uni229Auni229Buni229Cuni229Duni229Euni229Funi22A0uni22A1uni22A2uni22A3uni22A4perpendicularuni22A6uni22A7uni22A8uni22A9uni22AAuni22ABuni22ACuni22ADuni22AEuni22AFuni22B0uni22B1uni22B2uni22B3uni22B4uni22B5uni22B6uni22B7uni22B8uni22B9uni22BAuni22BBuni22BCuni22BDuni22BEuni22BFuni22C0uni22C1uni22C2uni22C3uni22C4dotmathuni22C6uni22C7uni22C8uni22C9uni22CAuni22CBuni22CCuni22CDuni22CEuni22CFuni22D0uni22D1uni22D2uni22D3uni22D4uni22D5uni22D6uni22D7uni22D8uni22D9uni22DAuni22DBuni22DCuni22DDuni22DEuni22DFuni22E0uni22E1uni22E2uni22E3uni22E4uni22E5uni22E6uni22E7uni22E8uni22E9uni22EAuni22EBuni22ECuni22EDuni22EEuni22EFuni22F0uni22F1uni22F2uni22F3uni22F4uni22F5uni22F6uni22F7uni22F8uni22F9uni22FAuni22FBuni22FCuni22FDuni22FEuni22FFuni2300uni2301houseuni2303uni2304uni2305uni2306uni2307uni2308uni2309uni230Auni230Buni230Cuni230Duni230Euni230Frevlogicalnotuni2311uni2318uni2319uni231Cuni231Duni231Euni231F
integraltp
integralbtuni2324uni2325uni2326uni2327uni2328uni232Buni232Cuni2373uni2374uni2375uni237Auni237Duni2387uni2394uni239Buni239Cuni239Duni239Euni239Funi23A0uni23A1uni23A2uni23A3uni23A4uni23A5uni23A6uni23A7uni23A8uni23A9uni23AAuni23ABuni23ACuni23ADuni23AEuni23CEuni23CFuni23E3uni23E5uni23E8uni2422uni2423uni2460uni2461uni2462uni2463uni2464uni2465uni2466uni2467uni2468uni2469SF100000uni2501SF110000uni2503uni2504uni2505uni2506uni2507uni2508uni2509uni250Auni250BSF010000uni250Duni250Euni250FSF030000uni2511uni2512uni2513SF020000uni2515uni2516uni2517SF040000uni2519uni251Auni251BSF080000uni251Duni251Euni251Funi2520uni2521uni2522uni2523SF090000uni2525uni2526uni2527uni2528uni2529uni252Auni252BSF060000uni252Duni252Euni252Funi2530uni2531uni2532uni2533SF070000uni2535uni2536uni2537uni2538uni2539uni253Auni253BSF050000uni253Duni253Euni253Funi2540uni2541uni2542uni2543uni2544uni2545uni2546uni2547uni2548uni2549uni254Auni254Buni254Cuni254Duni254Euni254FSF430000SF240000SF510000SF520000SF390000SF220000SF210000SF250000SF500000SF490000SF380000SF280000SF270000SF260000SF360000SF370000SF420000SF190000SF200000SF230000SF470000SF480000SF410000SF450000SF460000SF400000SF540000SF530000SF440000uni256Duni256Euni256Funi2570uni2571uni2572uni2573uni2574uni2575uni2576uni2577uni2578uni2579uni257Auni257Buni257Cuni257Duni257Euni257Fupblockuni2581uni2582uni2583dnblockuni2585uni2586uni2587blockuni2589uni258Auni258Blfblockuni258Duni258Euni258Frtblockltshadeshadedkshadeuni2594uni2595uni2596uni2597uni2598uni2599uni259Auni259Buni259Cuni259Duni259Euni259F	filledboxH22073uni25A2uni25A3uni25A4uni25A5uni25A6uni25A7uni25A8uni25A9H18543H18551
filledrectuni25ADuni25AEuni25AFuni25B0uni25B1triagupuni25B3uni25B4uni25B5uni25B6uni25B7uni25B8uni25B9triagrtuni25BBtriagdnuni25BDuni25BEuni25BFuni25C0uni25C1uni25C2uni25C3triaglfuni25C5uni25C6uni25C7uni25C8uni25C9circleuni25CCuni25CDuni25CEH18533uni25D0uni25D1uni25D2uni25D3uni25D4uni25D5uni25D6uni25D7	invbullet	invcircleuni25DAuni25DBuni25DCuni25DDuni25DEuni25DFuni25E0uni25E1uni25E2uni25E3uni25E4uni25E5
openbulletuni25E7uni25E8uni25E9uni25EAuni25EBuni25ECuni25EDuni25EEuni25EFuni25F0uni25F1uni25F2uni25F3uni25F4uni25F5uni25F6uni25F7uni25F8uni25F9uni25FAuni25FBuni25FCuni25FDuni25FEuni25FFuni2600uni2601uni2602uni2603uni2604uni2605uni2606uni2607uni2608uni2609uni260Auni260Buni260Cuni260Duni260Euni260Funi2610uni2611uni2612uni2613uni2614uni2615uni2616uni2617uni2618uni2619uni261Auni261Buni261Cuni261Duni261Euni261Funi2620uni2621uni2622uni2623uni2624uni2625uni2626uni2627uni2628uni2629uni262Auni262Buni262Cuni262Duni262Euni262Funi2630uni2631uni2632uni2633uni2634uni2635uni2636uni2637uni2638uni2639	smilefaceinvsmilefacesununi263Duni263Euni263Ffemaleuni2641maleuni2643uni2644uni2645uni2646uni2647uni2648uni2649uni264Auni264Buni264Cuni264Duni264Euni264Funi2650uni2651uni2652uni2653uni2654uni2655uni2656uni2657uni2658uni2659uni265Auni265Buni265Cuni265Duni265Euni265Fspadeuni2661uni2662clubuni2664heartdiamonduni2667uni2668uni2669musicalnotemusicalnotedbluni266Cuni266Duni266Euni266Funi2670uni2671uni2672uni2673uni2674uni2675uni2676uni2677uni2678uni2679uni267Auni267Buni267Cuni267Duni267Euni267Funi2680uni2681uni2682uni2683uni2684uni2685uni2686uni2687uni2688uni2689uni268Auni268Buni268Cuni268Duni268Euni268Funi2690uni2691uni2692uni2693uni2694uni2695uni2696uni2697uni2698uni2699uni269Auni269Buni269Cuni269Euni269Funi26A0uni26A1uni26A2uni26A3uni26A4uni26A5uni26A6uni26A7uni26A8uni26A9uni26AAuni26ABuni26ACuni26ADuni26AEuni26AFuni26B0uni26B1uni26B2uni26B3uni26B4uni26B5uni26B6uni26B7uni26B8uni26C0uni26C1uni26C2uni26C3uni26E2uni2701uni2702uni2703uni2704uni2706uni2707uni2708uni2709uni270Cuni270Duni270Euni270Funi2710uni2711uni2712uni2713uni2714uni2715uni2716uni2717uni2718uni2719uni271Auni271Buni271Cuni271Duni271Euni271Funi2720uni2721uni2722uni2723uni2724uni2725uni2726uni2727uni2729uni272Auni272Buni272Cuni272Duni272Euni272Funi2730uni2731uni2732uni2733uni2734uni2735uni2736uni2737uni2738uni2739uni273Auni273Buni273Cuni273Duni273Euni273Funi2740uni2741uni2742uni2743uni2744uni2745uni2746uni2747uni2748uni2749uni274Auni274Buni274Duni274Funi2750uni2751uni2752uni2756uni2758uni2759uni275Auni275Buni275Cuni275Duni275Euni2761uni2762uni2763uni2764uni2765uni2766uni2767uni2768uni2769uni276Auni276Buni276Cuni276Duni276Euni276Funi2770uni2771uni2772uni2773uni2774uni2775uni2776uni2777uni2778uni2779uni277Auni277Buni277Cuni277Duni277Euni277Funi2780uni2781uni2782uni2783uni2784uni2785uni2786uni2787uni2788uni2789uni278Auni278Buni278Cuni278Duni278Euni278Funi2790uni2791uni2792uni2793uni2794uni2798uni2799uni279Auni279Buni279Cuni279Duni279Euni279Funi27A0uni27A1uni27A2uni27A3uni27A4uni27A5uni27A6uni27A7uni27A8uni27A9uni27AAuni27ABuni27ACuni27ADuni27AEuni27AFuni27B1uni27B2uni27B3uni27B4uni27B5uni27B6uni27B7uni27B8uni27B9uni27BAuni27BBuni27BCuni27BDuni27BEuni27C5uni27C6uni27E0uni27E6uni27E7uni27E8uni27E9uni27EAuni27EBuni27F0uni27F1uni27F2uni27F3uni27F4uni27F5uni27F6uni27F7uni27F8uni27F9uni27FAuni27FBuni27FCuni27FDuni27FEuni27FFuni2800uni2801uni2802uni2803uni2804uni2805uni2806uni2807uni2808uni2809uni280Auni280Buni280Cuni280Duni280Euni280Funi2810uni2811uni2812uni2813uni2814uni2815uni2816uni2817uni2818uni2819uni281Auni281Buni281Cuni281Duni281Euni281Funi2820uni2821uni2822uni2823uni2824uni2825uni2826uni2827uni2828uni2829uni282Auni282Buni282Cuni282Duni282Euni282Funi2830uni2831uni2832uni2833uni2834uni2835uni2836uni2837uni2838uni2839uni283Auni283Buni283Cuni283Duni283Euni283Funi2840uni2841uni2842uni2843uni2844uni2845uni2846uni2847uni2848uni2849uni284Auni284Buni284Cuni284Duni284Euni284Funi2850uni2851uni2852uni2853uni2854uni2855uni2856uni2857uni2858uni2859uni285Auni285Buni285Cuni285Duni285Euni285Funi2860uni2861uni2862uni2863uni2864uni2865uni2866uni2867uni2868uni2869uni286Auni286Buni286Cuni286Duni286Euni286Funi2870uni2871uni2872uni2873uni2874uni2875uni2876uni2877uni2878uni2879uni287Auni287Buni287Cuni287Duni287Euni287Funi2880uni2881uni2882uni2883uni2884uni2885uni2886uni2887uni2888uni2889uni288Auni288Buni288Cuni288Duni288Euni288Funi2890uni2891uni2892uni2893uni2894uni2895uni2896uni2897uni2898uni2899uni289Auni289Buni289Cuni289Duni289Euni289Funi28A0uni28A1uni28A2uni28A3uni28A4uni28A5uni28A6uni28A7uni28A8uni28A9uni28AAuni28ABuni28ACuni28ADuni28AEuni28AFuni28B0uni28B1uni28B2uni28B3uni28B4uni28B5uni28B6uni28B7uni28B8uni28B9uni28BAuni28BBuni28BCuni28BDuni28BEuni28BFuni28C0uni28C1uni28C2uni28C3uni28C4uni28C5uni28C6uni28C7uni28C8uni28C9uni28CAuni28CBuni28CCuni28CDuni28CEuni28CFuni28D0uni28D1uni28D2uni28D3uni28D4uni28D5uni28D6uni28D7uni28D8uni28D9uni28DAuni28DBuni28DCuni28DDuni28DEuni28DFuni28E0uni28E1uni28E2uni28E3uni28E4uni28E5uni28E6uni28E7uni28E8uni28E9uni28EAuni28EBuni28ECuni28EDuni28EEuni28EFuni28F0uni28F1uni28F2uni28F3uni28F4uni28F5uni28F6uni28F7uni28F8uni28F9uni28FAuni28FBuni28FCuni28FDuni28FEuni28FFuni2906uni2907uni290Auni290Buni2940uni2941uni2983uni2984uni29CEuni29CFuni29D0uni29D1uni29D2uni29D3uni29D4uni29D5uni29EBuni29FAuni29FBuni2A00uni2A01uni2A02uni2A0Cuni2A0Duni2A0Euni2A0Funi2A10uni2A11uni2A12uni2A13uni2A14uni2A15uni2A16uni2A17uni2A18uni2A19uni2A1Auni2A1Buni2A1Cuni2A2Funi2A6Auni2A6Buni2A7Duni2A7Euni2A7Funi2A80uni2A81uni2A82uni2A83uni2A84uni2A85uni2A86uni2A87uni2A88uni2A89uni2A8Auni2A8Buni2A8Cuni2A8Duni2A8Euni2A8Funi2A90uni2A91uni2A92uni2A93uni2A94uni2A95uni2A96uni2A97uni2A98uni2A99uni2A9Auni2A9Buni2A9Cuni2A9Duni2A9Euni2A9Funi2AA0uni2AAEuni2AAFuni2AB0uni2AB1uni2AB2uni2AB3uni2AB4uni2AB5uni2AB6uni2AB7uni2AB8uni2AB9uni2ABAuni2AF9uni2AFAuni2B00uni2B01uni2B02uni2B03uni2B04uni2B05uni2B06uni2B07uni2B08uni2B09uni2B0Auni2B0Buni2B0Cuni2B0Duni2B0Euni2B0Funi2B10uni2B11uni2B12uni2B13uni2B14uni2B15uni2B16uni2B17uni2B18uni2B19uni2B1Auni2B1Funi2B20uni2B21uni2B22uni2B23uni2B24uni2B53uni2B54uni2C60uni2C61uni2C62uni2C63uni2C64uni2C65uni2C66uni2C67uni2C68uni2C69uni2C6Auni2C6Buni2C6Cuni2C6Duni2C6Euni2C6Funi2C70uni2C71uni2C72uni2C73uni2C74uni2C75uni2C76uni2C77uni2C79uni2C7Auni2C7Buni2C7Cuni2C7Duni2C7Euni2C7Funi2D00uni2D01uni2D02uni2D03uni2D04uni2D05uni2D06uni2D07uni2D08uni2D09uni2D0Auni2D0Buni2D0Cuni2D0Duni2D0Euni2D0Funi2D10uni2D11uni2D12uni2D13uni2D14uni2D15uni2D16uni2D17uni2D18uni2D19uni2D1Auni2D1Buni2D1Cuni2D1Duni2D1Euni2D1Funi2D20uni2D21uni2D22uni2D23uni2D24uni2D25uni2E18uni2E1Funi2E22uni2E23uni2E24uni2E25uni2E2Euni4DC0uni4DC1uni4DC2uni4DC3uni4DC4uni4DC5uni4DC6uni4DC7uni4DC8uni4DC9uni4DCAuni4DCBuni4DCCuni4DCDuni4DCEuni4DCFuni4DD0uni4DD1uni4DD2uni4DD3uni4DD4uni4DD5uni4DD6uni4DD7uni4DD8uni4DD9uni4DDAuni4DDBuni4DDCuni4DDDuni4DDEuni4DDFuni4DE0uni4DE1uni4DE2uni4DE3uni4DE4uni4DE5uni4DE6uni4DE7uni4DE8uni4DE9uni4DEAuni4DEBuni4DECuni4DEDuni4DEEuni4DEFuni4DF0uni4DF1uni4DF2uni4DF3uni4DF4uni4DF5uni4DF6uni4DF7uni4DF8uni4DF9uni4DFAuni4DFBuni4DFCuni4DFDuni4DFEuni4DFFuniA4D0uniA4D1uniA4D2uniA4D3uniA4D4uniA4D5uniA4D6uniA4D7uniA4D8uniA4D9uniA4DAuniA4DBuniA4DCuniA4DDuniA4DEuniA4DFuniA4E0uniA4E1uniA4E2uniA4E3uniA4E4uniA4E5uniA4E6uniA4E7uniA4E8uniA4E9uniA4EAuniA4EBuniA4ECuniA4EDuniA4EEuniA4EFuniA4F0uniA4F1uniA4F2uniA4F3uniA4F4uniA4F5uniA4F6uniA4F7uniA4F8uniA4F9uniA4FAuniA4FBuniA4FCuniA4FDuniA4FEuniA4FFuniA644uniA645uniA646uniA647uniA64CuniA64DuniA650uniA651uniA654uniA655uniA656uniA657uniA662uniA663uniA664uniA665uniA666uniA667uniA668uniA669uniA66AuniA66BuniA66CuniA66DuniA66EuniA68AuniA68BuniA68CuniA68DuniA694uniA695uniA698uniA699uniA708uniA709uniA70AuniA70BuniA70CuniA70DuniA70EuniA70FuniA710uniA711uniA712uniA713uniA714uniA715uniA716uniA71BuniA71CuniA71DuniA71EuniA71FuniA722uniA723uniA724uniA725uniA726uniA727uniA728uniA729uniA72AuniA72BuniA730uniA731uniA732uniA733uniA734uniA735uniA736uniA737uniA738uniA739uniA73AuniA73BuniA73CuniA73DuniA73EuniA73FuniA740uniA741uniA746uniA747uniA748uniA749uniA74AuniA74BuniA74EuniA74FuniA750uniA751uniA752uniA753uniA756uniA757uniA764uniA765uniA766uniA767uniA780uniA781uniA782uniA783uniA789uniA78AuniA78BuniA78CuniA78DuniA78EuniA790uniA791uniA7A0uniA7A1uniA7A2uniA7A3uniA7A4uniA7A5uniA7A6uniA7A7uniA7A8uniA7A9uniA7AAuniA7F8uniA7F9uniA7FAuniA7FBuniA7FCuniA7FDuniA7FEuniA7FF	uni02E5.5	uni02E6.5	uni02E7.5	uni02E8.5	uni02E9.5	uni02E5.4	uni02E6.4	uni02E7.4	uni02E8.4	uni02E9.4	uni02E5.3	uni02E6.3	uni02E7.3	uni02E8.3	uni02E9.3	uni02E5.2	uni02E6.2	uni02E7.2	uni02E8.2	uni02E9.2	uni02E5.1	uni02E6.1	uni02E7.1	uni02E8.1	uni02E9.1stemuniF400uniF401uniF402uniF403uniF404uniF405uniF406uniF407uniF408uniF409uniF40AuniF40BuniF40CuniF40DuniF40EuniF40FuniF410uniF411uniF412uniF413uniF414uniF415uniF416uniF417uniF418uniF419uniF41AuniF41BuniF41CuniF41DuniF41EuniF41FuniF420uniF421uniF422uniF423uniF424uniF425uniF426uniF428uniF429uniF42AuniF42BuniF42CuniF42DuniF42EuniF42FuniF430uniF431uniF432uniF433uniF434uniF435uniF436uniF437uniF438uniF439uniF43AuniF43BuniF43CuniF43DuniF43EuniF43FuniF440uniF441uniF5C5uniFB00uniFB03uniFB04uniFB05uniFB06uniFB13uniFB14uniFB15uniFB16uniFB17uniFB1DuniFB1EuniFB1FuniFB20uniFB21uniFB22uniFB23uniFB24uniFB25uniFB26uniFB27uniFB28uniFB29uniFB2AuniFB2BuniFB2CuniFB2DuniFB2EuniFB2FuniFB30uniFB31uniFB32uniFB33uniFB34uniFB35uniFB36uniFB37uniFB38uniFB39uniFB3AuniFB3BuniFB3CuniFB3DuniFB3EuniFB3FuniFB40uniFB41uniFB42uniFB43uniFB44uniFB45uniFB46uniFB47uniFB48uniFB49uniFB4AuniFB4BuniFB4CuniFB4DuniFB4EuniFB4FuniFE00uniFE01uniFE02uniFE03uniFE04uniFE05uniFE06uniFE07uniFE08uniFE09uniFE0AuniFE0BuniFE0CuniFE0DuniFE0EuniFE0FuniFE20uniFE21uniFE22uniFE23uniFFF9uniFFFAuniFFFBuniFFFCuniFFFDu10300u10301u10302u10303u10304u10305u10306u10307u10308u10309u1030Au1030Bu1030Cu1030Du1030Eu1030Fu10310u10311u10312u10313u10314u10315u10316u10317u10318u10319u1031Au1031Bu1031Cu1031Du1031Eu10320u10321u10322u10323u1D300u1D301u1D302u1D303u1D304u1D305u1D306u1D307u1D308u1D309u1D30Au1D30Bu1D30Cu1D30Du1D30Eu1D30Fu1D310u1D311u1D312u1D313u1D314u1D315u1D316u1D317u1D318u1D319u1D31Au1D31Bu1D31Cu1D31Du1D31Eu1D31Fu1D320u1D321u1D322u1D323u1D324u1D325u1D326u1D327u1D328u1D329u1D32Au1D32Bu1D32Cu1D32Du1D32Eu1D32Fu1D330u1D331u1D332u1D333u1D334u1D335u1D336u1D337u1D338u1D339u1D33Au1D33Bu1D33Cu1D33Du1D33Eu1D33Fu1D340u1D341u1D342u1D343u1D344u1D345u1D346u1D347u1D348u1D349u1D34Au1D34Bu1D34Cu1D34Du1D34Eu1D34Fu1D350u1D351u1D352u1D353u1D354u1D355u1D356u1D538u1D539u1D53Bu1D53Cu1D53Du1D53Eu1D540u1D541u1D542u1D543u1D544u1D546u1D54Au1D54Bu1D54Cu1D54Du1D54Eu1D54Fu1D550u1D552u1D553u1D554u1D555u1D556u1D557u1D558u1D559u1D55Au1D55Bu1D55Cu1D55Du1D55Eu1D55Fu1D560u1D561u1D562u1D563u1D564u1D565u1D566u1D567u1D568u1D569u1D56Au1D56Bu1D63Cu1D63Du1D63Eu1D63Fu1D640u1D641u1D642u1D643u1D644u1D645u1D646u1D647u1D648u1D649u1D64Au1D64Bu1D64Cu1D64Du1D64Eu1D64Fu1D650u1D651u1D652u1D653u1D654u1D655u1D656u1D657u1D658u1D659u1D65Au1D65Bu1D65Cu1D65Du1D65Eu1D65Fu1D660u1D661u1D662u1D663u1D664u1D665u1D666u1D667u1D668u1D669u1D66Au1D66Bu1D66Cu1D66Du1D66Eu1D66Fu1D790u1D791u1D792u1D793u1D794u1D795u1D796u1D797u1D798u1D799u1D79Au1D79Bu1D79Cu1D79Du1D79Eu1D79Fu1D7A0u1D7A1u1D7A2u1D7A3u1D7A4u1D7A5u1D7A6u1D7A7u1D7A8u1D7A9u1D7AAu1D7ABu1D7ACu1D7ADu1D7AEu1D7AFu1D7B0u1D7B1u1D7B2u1D7B3u1D7B4u1D7B5u1D7B6u1D7B7u1D7B8u1D7B9u1D7BAu1D7BBu1D7BCu1D7BDu1D7BEu1D7BFu1D7C0u1D7C1u1D7C2u1D7C3u1D7C4u1D7C5u1D7C6u1D7C7u1D7C8u1D7C9u1D7D8u1D7D9u1D7DAu1D7DBu1D7DCu1D7DDu1D7DEu1D7DFu1D7E0u1D7E1u1F030u1F031u1F032u1F033u1F034u1F035u1F036u1F037u1F038u1F039u1F03Au1F03Bu1F03Cu1F03Du1F03Eu1F03Fu1F040u1F041u1F042u1F043u1F044u1F045u1F046u1F047u1F048u1F049u1F04Au1F04Bu1F04Cu1F04Du1F04Eu1F04Fu1F050u1F051u1F052u1F053u1F054u1F055u1F056u1F057u1F058u1F059u1F05Au1F05Bu1F05Cu1F05Du1F05Eu1F05Fu1F060u1F061u1F062u1F063u1F064u1F065u1F066u1F067u1F068u1F069u1F06Au1F06Bu1F06Cu1F06Du1F06Eu1F06Fu1F070u1F071u1F072u1F073u1F074u1F075u1F076u1F077u1F078u1F079u1F07Au1F07Bu1F07Cu1F07Du1F07Eu1F07Fu1F080u1F081u1F082u1F083u1F084u1F085u1F086u1F087u1F088u1F089u1F08Au1F08Bu1F08Cu1F08Du1F08Eu1F08Fu1F090u1F091u1F092u1F093u1F0A0u1F0A1u1F0A2u1F0A3u1F0A4u1F0A5u1F0A6u1F0A7u1F0A8u1F0A9u1F0AAu1F0ABu1F0ACu1F0ADu1F0AEu1F0B1u1F0B2u1F0B3u1F0B4u1F0B5u1F0B6u1F0B7u1F0B8u1F0B9u1F0BAu1F0BBu1F0BCu1F0BDu1F0BEu1F0C1u1F0C2u1F0C3u1F0C4u1F0C5u1F0C6u1F0C7u1F0C8u1F0C9u1F0CAu1F0CBu1F0CCu1F0CDu1F0CEu1F0CFu1F0D1u1F0D2u1F0D3u1F0D4u1F0D5u1F0D6u1F0D7u1F0D8u1F0D9u1F0DAu1F0DBu1F0DCu1F0DDu1F0DEu1F0DFu1F311u1F312u1F313u1F314u1F315u1F316u1F317u1F318u1F42Du1F42Eu1F431u1F435u1F600u1F601u1F602u1F603u1F604u1F605u1F606u1F607u1F608u1F609u1F60Au1F60Bu1F60Cu1F60Du1F60Eu1F60Fu1F610u1F611u1F612u1F613u1F614u1F615u1F616u1F617u1F618u1F619u1F61Au1F61Bu1F61Cu1F61Du1F61Eu1F61Fu1F620u1F621u1F622u1F623u1F625u1F626u1F627u1F628u1F629u1F62Au1F62Bu1F62Du1F62Eu1F62Fu1F630u1F631u1F632u1F633u1F634u1F635u1F636u1F637u1F638u1F639u1F63Au1F63Bu1F63Cu1F63Du1F63Eu1F63Fu1F640u1F643	dlLtcaronDieresisAcuteTildeGrave
CircumflexCaronBreve	DotaccentHungarumlautDoublegraveuni0311.caseEng.altuni0268.dotlessuni029D.dotlessuni03080304uni03040308uni03070304uni03080301uni03080300uni03040301uni03040300uni03030304uni0308030Cuni03030308uni030C0307uni03030301uni03020301uni03020300uni03020303uni03060303uni03060301uni03060300uni03060309uni03020309uni03010307
brailledotJ.altl.altuni0478.monographuni0479.monographiogonek.dotlessuni2148.dotlessuni2149.dotlessuni1E2D.dotlessuni1ECB.dotlesscdoI.alt
arrow.basealpha.small.regulariota.small.regularrho.small.regularNameMe.65589	Ringaboveuni2630.altuni2631.altuni2632.altuni2633.altuni2634.altuni2635.altuni2636.altuni2637.altuni047E.diacuni048A.brevelessuni048B.brevelessy.altexclamdown.casequestiondown.caseuni2E18.case@::dػ}}ȌYȌȀ&Y@&}>,,G}G

@
2
YYdhd@%%Y %Y%&Y]%]@%dX:t:2Y~}|{zyxwvtvututYtsYs}rq&ponm
@lkjkjj@ihihYhgYgf\fedcdcb]ccbW%b]b@a`_.`_.^Y^]\] \[Y[KZYZYXYXW%VUTSRQPO%PO%NMLKJIH	H@FEFEDCDCC@BdB@A}@?>,>,=<;:949287265
6@5
5@43
43
211}0/0d//.-,+,K++**K)()('
('
&%$%2$#"#"!%! 
 2@

	@:%dd:%:%K
	

	
	@d:@

@ d++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ StartFontMetrics 4.1
Notice Converted by PHP-font-lib
Comment https://github.com/PhenX/php-font-lib
EncodingScheme FontSpecific
FontName DejaVu Sans
FontSubfamily Bold Oblique
UniqueID DejaVu Sans Bold Oblique
FullName DejaVu Sans Bold Oblique
Version Version 2.37
PostScriptName DejaVuSans-BoldOblique
Manufacturer DejaVu fonts team
FontVendorURL http://dejavu.sourceforge.net
LicenseURL http://dejavu.sourceforge.net/wiki/index.php/License
PreferredFamily DejaVu Sans
PreferredSubfamily Bold Oblique
Weight Bold
ItalicAngle -11
IsFixedPitch false
UnderlineThickness 44
UnderlinePosition -63
FontHeightOffset 0
Ascender 928
Descender -236
FontBBox -1067 -385 1999 1121
StartCharMetrics 5413
U 32 ; WX 348 ; N space ; G 3
U 33 ; WX 456 ; N exclam ; G 4
U 34 ; WX 521 ; N quotedbl ; G 5
U 35 ; WX 696 ; N numbersign ; G 6
U 36 ; WX 696 ; N dollar ; G 7
U 37 ; WX 1002 ; N percent ; G 8
U 38 ; WX 872 ; N ampersand ; G 9
U 39 ; WX 306 ; N quotesingle ; G 10
U 40 ; WX 457 ; N parenleft ; G 11
U 41 ; WX 457 ; N parenright ; G 12
U 42 ; WX 523 ; N asterisk ; G 13
U 43 ; WX 838 ; N plus ; G 14
U 44 ; WX 380 ; N comma ; G 15
U 45 ; WX 415 ; N hyphen ; G 16
U 46 ; WX 380 ; N period ; G 17
U 47 ; WX 365 ; N slash ; G 18
U 48 ; WX 696 ; N zero ; G 19
U 49 ; WX 696 ; N one ; G 20
U 50 ; WX 696 ; N two ; G 21
U 51 ; WX 696 ; N three ; G 22
U 52 ; WX 696 ; N four ; G 23
U 53 ; WX 696 ; N five ; G 24
U 54 ; WX 696 ; N six ; G 25
U 55 ; WX 696 ; N seven ; G 26
U 56 ; WX 696 ; N eight ; G 27
U 57 ; WX 696 ; N nine ; G 28
U 58 ; WX 400 ; N colon ; G 29
U 59 ; WX 400 ; N semicolon ; G 30
U 60 ; WX 838 ; N less ; G 31
U 61 ; WX 838 ; N equal ; G 32
U 62 ; WX 838 ; N greater ; G 33
U 63 ; WX 580 ; N question ; G 34
U 64 ; WX 1000 ; N at ; G 35
U 65 ; WX 774 ; N A ; G 36
U 66 ; WX 762 ; N B ; G 37
U 67 ; WX 734 ; N C ; G 38
U 68 ; WX 830 ; N D ; G 39
U 69 ; WX 683 ; N E ; G 40
U 70 ; WX 683 ; N F ; G 41
U 71 ; WX 821 ; N G ; G 42
U 72 ; WX 837 ; N H ; G 43
U 73 ; WX 372 ; N I ; G 44
U 74 ; WX 372 ; N J ; G 45
U 75 ; WX 775 ; N K ; G 46
U 76 ; WX 637 ; N L ; G 47
U 77 ; WX 995 ; N M ; G 48
U 78 ; WX 837 ; N N ; G 49
U 79 ; WX 850 ; N O ; G 50
U 80 ; WX 733 ; N P ; G 51
U 81 ; WX 850 ; N Q ; G 52
U 82 ; WX 770 ; N R ; G 53
U 83 ; WX 720 ; N S ; G 54
U 84 ; WX 682 ; N T ; G 55
U 85 ; WX 812 ; N U ; G 56
U 86 ; WX 774 ; N V ; G 57
U 87 ; WX 1103 ; N W ; G 58
U 88 ; WX 771 ; N X ; G 59
U 89 ; WX 724 ; N Y ; G 60
U 90 ; WX 725 ; N Z ; G 61
U 91 ; WX 457 ; N bracketleft ; G 62
U 92 ; WX 365 ; N backslash ; G 63
U 93 ; WX 457 ; N bracketright ; G 64
U 94 ; WX 838 ; N asciicircum ; G 65
U 95 ; WX 500 ; N underscore ; G 66
U 96 ; WX 500 ; N grave ; G 67
U 97 ; WX 675 ; N a ; G 68
U 98 ; WX 716 ; N b ; G 69
U 99 ; WX 593 ; N c ; G 70
U 100 ; WX 716 ; N d ; G 71
U 101 ; WX 678 ; N e ; G 72
U 102 ; WX 435 ; N f ; G 73
U 103 ; WX 716 ; N g ; G 74
U 104 ; WX 712 ; N h ; G 75
U 105 ; WX 343 ; N i ; G 76
U 106 ; WX 343 ; N j ; G 77
U 107 ; WX 665 ; N k ; G 78
U 108 ; WX 343 ; N l ; G 79
U 109 ; WX 1042 ; N m ; G 80
U 110 ; WX 712 ; N n ; G 81
U 111 ; WX 687 ; N o ; G 82
U 112 ; WX 716 ; N p ; G 83
U 113 ; WX 716 ; N q ; G 84
U 114 ; WX 493 ; N r ; G 85
U 115 ; WX 595 ; N s ; G 86
U 116 ; WX 478 ; N t ; G 87
U 117 ; WX 712 ; N u ; G 88
U 118 ; WX 652 ; N v ; G 89
U 119 ; WX 924 ; N w ; G 90
U 120 ; WX 645 ; N x ; G 91
U 121 ; WX 652 ; N y ; G 92
U 122 ; WX 582 ; N z ; G 93
U 123 ; WX 712 ; N braceleft ; G 94
U 124 ; WX 365 ; N bar ; G 95
U 125 ; WX 712 ; N braceright ; G 96
U 126 ; WX 838 ; N asciitilde ; G 97
U 160 ; WX 348 ; N nbspace ; G 98
U 161 ; WX 456 ; N exclamdown ; G 99
U 162 ; WX 696 ; N cent ; G 100
U 163 ; WX 696 ; N sterling ; G 101
U 164 ; WX 636 ; N currency ; G 102
U 165 ; WX 696 ; N yen ; G 103
U 166 ; WX 365 ; N brokenbar ; G 104
U 167 ; WX 500 ; N section ; G 105
U 168 ; WX 500 ; N dieresis ; G 106
U 169 ; WX 1000 ; N copyright ; G 107
U 170 ; WX 564 ; N ordfeminine ; G 108
U 171 ; WX 650 ; N guillemotleft ; G 109
U 172 ; WX 838 ; N logicalnot ; G 110
U 173 ; WX 415 ; N sfthyphen ; G 111
U 174 ; WX 1000 ; N registered ; G 112
U 175 ; WX 500 ; N macron ; G 113
U 176 ; WX 500 ; N degree ; G 114
U 177 ; WX 838 ; N plusminus ; G 115
U 178 ; WX 438 ; N twosuperior ; G 116
U 179 ; WX 438 ; N threesuperior ; G 117
U 180 ; WX 500 ; N acute ; G 118
U 181 ; WX 736 ; N mu ; G 119
U 182 ; WX 636 ; N paragraph ; G 120
U 183 ; WX 380 ; N periodcentered ; G 121
U 184 ; WX 500 ; N cedilla ; G 122
U 185 ; WX 438 ; N onesuperior ; G 123
U 186 ; WX 564 ; N ordmasculine ; G 124
U 187 ; WX 650 ; N guillemotright ; G 125
U 188 ; WX 1035 ; N onequarter ; G 126
U 189 ; WX 1035 ; N onehalf ; G 127
U 190 ; WX 1035 ; N threequarters ; G 128
U 191 ; WX 580 ; N questiondown ; G 129
U 192 ; WX 774 ; N Agrave ; G 130
U 193 ; WX 774 ; N Aacute ; G 131
U 194 ; WX 774 ; N Acircumflex ; G 132
U 195 ; WX 774 ; N Atilde ; G 133
U 196 ; WX 774 ; N Adieresis ; G 134
U 197 ; WX 774 ; N Aring ; G 135
U 198 ; WX 1085 ; N AE ; G 136
U 199 ; WX 734 ; N Ccedilla ; G 137
U 200 ; WX 683 ; N Egrave ; G 138
U 201 ; WX 683 ; N Eacute ; G 139
U 202 ; WX 683 ; N Ecircumflex ; G 140
U 203 ; WX 683 ; N Edieresis ; G 141
U 204 ; WX 372 ; N Igrave ; G 142
U 205 ; WX 372 ; N Iacute ; G 143
U 206 ; WX 372 ; N Icircumflex ; G 144
U 207 ; WX 372 ; N Idieresis ; G 145
U 208 ; WX 845 ; N Eth ; G 146
U 209 ; WX 837 ; N Ntilde ; G 147
U 210 ; WX 850 ; N Ograve ; G 148
U 211 ; WX 850 ; N Oacute ; G 149
U 212 ; WX 850 ; N Ocircumflex ; G 150
U 213 ; WX 850 ; N Otilde ; G 151
U 214 ; WX 850 ; N Odieresis ; G 152
U 215 ; WX 838 ; N multiply ; G 153
U 216 ; WX 850 ; N Oslash ; G 154
U 217 ; WX 812 ; N Ugrave ; G 155
U 218 ; WX 812 ; N Uacute ; G 156
U 219 ; WX 812 ; N Ucircumflex ; G 157
U 220 ; WX 812 ; N Udieresis ; G 158
U 221 ; WX 724 ; N Yacute ; G 159
U 222 ; WX 742 ; N Thorn ; G 160
U 223 ; WX 719 ; N germandbls ; G 161
U 224 ; WX 675 ; N agrave ; G 162
U 225 ; WX 675 ; N aacute ; G 163
U 226 ; WX 675 ; N acircumflex ; G 164
U 227 ; WX 675 ; N atilde ; G 165
U 228 ; WX 675 ; N adieresis ; G 166
U 229 ; WX 675 ; N aring ; G 167
U 230 ; WX 1048 ; N ae ; G 168
U 231 ; WX 593 ; N ccedilla ; G 169
U 232 ; WX 678 ; N egrave ; G 170
U 233 ; WX 678 ; N eacute ; G 171
U 234 ; WX 678 ; N ecircumflex ; G 172
U 235 ; WX 678 ; N edieresis ; G 173
U 236 ; WX 343 ; N igrave ; G 174
U 237 ; WX 343 ; N iacute ; G 175
U 238 ; WX 343 ; N icircumflex ; G 176
U 239 ; WX 343 ; N idieresis ; G 177
U 240 ; WX 687 ; N eth ; G 178
U 241 ; WX 712 ; N ntilde ; G 179
U 242 ; WX 687 ; N ograve ; G 180
U 243 ; WX 687 ; N oacute ; G 181
U 244 ; WX 687 ; N ocircumflex ; G 182
U 245 ; WX 687 ; N otilde ; G 183
U 246 ; WX 687 ; N odieresis ; G 184
U 247 ; WX 838 ; N divide ; G 185
U 248 ; WX 687 ; N oslash ; G 186
U 249 ; WX 712 ; N ugrave ; G 187
U 250 ; WX 712 ; N uacute ; G 188
U 251 ; WX 712 ; N ucircumflex ; G 189
U 252 ; WX 712 ; N udieresis ; G 190
U 253 ; WX 652 ; N yacute ; G 191
U 254 ; WX 716 ; N thorn ; G 192
U 255 ; WX 652 ; N ydieresis ; G 193
U 256 ; WX 774 ; N Amacron ; G 194
U 257 ; WX 675 ; N amacron ; G 195
U 258 ; WX 774 ; N Abreve ; G 196
U 259 ; WX 675 ; N abreve ; G 197
U 260 ; WX 774 ; N Aogonek ; G 198
U 261 ; WX 675 ; N aogonek ; G 199
U 262 ; WX 734 ; N Cacute ; G 200
U 263 ; WX 593 ; N cacute ; G 201
U 264 ; WX 734 ; N Ccircumflex ; G 202
U 265 ; WX 593 ; N ccircumflex ; G 203
U 266 ; WX 734 ; N Cdotaccent ; G 204
U 267 ; WX 593 ; N cdotaccent ; G 205
U 268 ; WX 734 ; N Ccaron ; G 206
U 269 ; WX 593 ; N ccaron ; G 207
U 270 ; WX 830 ; N Dcaron ; G 208
U 271 ; WX 716 ; N dcaron ; G 209
U 272 ; WX 845 ; N Dcroat ; G 210
U 273 ; WX 716 ; N dmacron ; G 211
U 274 ; WX 683 ; N Emacron ; G 212
U 275 ; WX 678 ; N emacron ; G 213
U 276 ; WX 683 ; N Ebreve ; G 214
U 277 ; WX 678 ; N ebreve ; G 215
U 278 ; WX 683 ; N Edotaccent ; G 216
U 279 ; WX 678 ; N edotaccent ; G 217
U 280 ; WX 683 ; N Eogonek ; G 218
U 281 ; WX 678 ; N eogonek ; G 219
U 282 ; WX 683 ; N Ecaron ; G 220
U 283 ; WX 678 ; N ecaron ; G 221
U 284 ; WX 821 ; N Gcircumflex ; G 222
U 285 ; WX 716 ; N gcircumflex ; G 223
U 286 ; WX 821 ; N Gbreve ; G 224
U 287 ; WX 716 ; N gbreve ; G 225
U 288 ; WX 821 ; N Gdotaccent ; G 226
U 289 ; WX 716 ; N gdotaccent ; G 227
U 290 ; WX 821 ; N Gcommaaccent ; G 228
U 291 ; WX 716 ; N gcommaaccent ; G 229
U 292 ; WX 837 ; N Hcircumflex ; G 230
U 293 ; WX 712 ; N hcircumflex ; G 231
U 294 ; WX 974 ; N Hbar ; G 232
U 295 ; WX 790 ; N hbar ; G 233
U 296 ; WX 372 ; N Itilde ; G 234
U 297 ; WX 343 ; N itilde ; G 235
U 298 ; WX 372 ; N Imacron ; G 236
U 299 ; WX 343 ; N imacron ; G 237
U 300 ; WX 372 ; N Ibreve ; G 238
U 301 ; WX 343 ; N ibreve ; G 239
U 302 ; WX 372 ; N Iogonek ; G 240
U 303 ; WX 343 ; N iogonek ; G 241
U 304 ; WX 372 ; N Idot ; G 242
U 305 ; WX 343 ; N dotlessi ; G 243
U 306 ; WX 744 ; N IJ ; G 244
U 307 ; WX 686 ; N ij ; G 245
U 308 ; WX 372 ; N Jcircumflex ; G 246
U 309 ; WX 343 ; N jcircumflex ; G 247
U 310 ; WX 775 ; N Kcommaaccent ; G 248
U 311 ; WX 665 ; N kcommaaccent ; G 249
U 312 ; WX 665 ; N kgreenlandic ; G 250
U 313 ; WX 637 ; N Lacute ; G 251
U 314 ; WX 343 ; N lacute ; G 252
U 315 ; WX 637 ; N Lcommaaccent ; G 253
U 316 ; WX 343 ; N lcommaaccent ; G 254
U 317 ; WX 637 ; N Lcaron ; G 255
U 318 ; WX 343 ; N lcaron ; G 256
U 319 ; WX 637 ; N Ldot ; G 257
U 320 ; WX 343 ; N ldot ; G 258
U 321 ; WX 660 ; N Lslash ; G 259
U 322 ; WX 375 ; N lslash ; G 260
U 323 ; WX 837 ; N Nacute ; G 261
U 324 ; WX 712 ; N nacute ; G 262
U 325 ; WX 837 ; N Ncommaaccent ; G 263
U 326 ; WX 712 ; N ncommaaccent ; G 264
U 327 ; WX 837 ; N Ncaron ; G 265
U 328 ; WX 712 ; N ncaron ; G 266
U 329 ; WX 983 ; N napostrophe ; G 267
U 330 ; WX 837 ; N Eng ; G 268
U 331 ; WX 712 ; N eng ; G 269
U 332 ; WX 850 ; N Omacron ; G 270
U 333 ; WX 687 ; N omacron ; G 271
U 334 ; WX 850 ; N Obreve ; G 272
U 335 ; WX 687 ; N obreve ; G 273
U 336 ; WX 850 ; N Ohungarumlaut ; G 274
U 337 ; WX 687 ; N ohungarumlaut ; G 275
U 338 ; WX 1167 ; N OE ; G 276
U 339 ; WX 1094 ; N oe ; G 277
U 340 ; WX 770 ; N Racute ; G 278
U 341 ; WX 493 ; N racute ; G 279
U 342 ; WX 770 ; N Rcommaaccent ; G 280
U 343 ; WX 493 ; N rcommaaccent ; G 281
U 344 ; WX 770 ; N Rcaron ; G 282
U 345 ; WX 493 ; N rcaron ; G 283
U 346 ; WX 720 ; N Sacute ; G 284
U 347 ; WX 595 ; N sacute ; G 285
U 348 ; WX 720 ; N Scircumflex ; G 286
U 349 ; WX 595 ; N scircumflex ; G 287
U 350 ; WX 720 ; N Scedilla ; G 288
U 351 ; WX 595 ; N scedilla ; G 289
U 352 ; WX 720 ; N Scaron ; G 290
U 353 ; WX 595 ; N scaron ; G 291
U 354 ; WX 682 ; N Tcommaaccent ; G 292
U 355 ; WX 478 ; N tcommaaccent ; G 293
U 356 ; WX 682 ; N Tcaron ; G 294
U 357 ; WX 478 ; N tcaron ; G 295
U 358 ; WX 682 ; N Tbar ; G 296
U 359 ; WX 478 ; N tbar ; G 297
U 360 ; WX 812 ; N Utilde ; G 298
U 361 ; WX 712 ; N utilde ; G 299
U 362 ; WX 812 ; N Umacron ; G 300
U 363 ; WX 712 ; N umacron ; G 301
U 364 ; WX 812 ; N Ubreve ; G 302
U 365 ; WX 712 ; N ubreve ; G 303
U 366 ; WX 812 ; N Uring ; G 304
U 367 ; WX 712 ; N uring ; G 305
U 368 ; WX 812 ; N Uhungarumlaut ; G 306
U 369 ; WX 712 ; N uhungarumlaut ; G 307
U 370 ; WX 812 ; N Uogonek ; G 308
U 371 ; WX 712 ; N uogonek ; G 309
U 372 ; WX 1103 ; N Wcircumflex ; G 310
U 373 ; WX 924 ; N wcircumflex ; G 311
U 374 ; WX 724 ; N Ycircumflex ; G 312
U 375 ; WX 652 ; N ycircumflex ; G 313
U 376 ; WX 724 ; N Ydieresis ; G 314
U 377 ; WX 725 ; N Zacute ; G 315
U 378 ; WX 582 ; N zacute ; G 316
U 379 ; WX 725 ; N Zdotaccent ; G 317
U 380 ; WX 582 ; N zdotaccent ; G 318
U 381 ; WX 725 ; N Zcaron ; G 319
U 382 ; WX 582 ; N zcaron ; G 320
U 383 ; WX 435 ; N longs ; G 321
U 384 ; WX 716 ; N uni0180 ; G 322
U 385 ; WX 811 ; N uni0181 ; G 323
U 386 ; WX 762 ; N uni0182 ; G 324
U 387 ; WX 716 ; N uni0183 ; G 325
U 388 ; WX 762 ; N uni0184 ; G 326
U 389 ; WX 716 ; N uni0185 ; G 327
U 390 ; WX 734 ; N uni0186 ; G 328
U 391 ; WX 734 ; N uni0187 ; G 329
U 392 ; WX 593 ; N uni0188 ; G 330
U 393 ; WX 845 ; N uni0189 ; G 331
U 394 ; WX 879 ; N uni018A ; G 332
U 395 ; WX 762 ; N uni018B ; G 333
U 396 ; WX 716 ; N uni018C ; G 334
U 397 ; WX 687 ; N uni018D ; G 335
U 398 ; WX 683 ; N uni018E ; G 336
U 399 ; WX 850 ; N uni018F ; G 337
U 400 ; WX 696 ; N uni0190 ; G 338
U 401 ; WX 683 ; N uni0191 ; G 339
U 402 ; WX 435 ; N florin ; G 340
U 403 ; WX 821 ; N uni0193 ; G 341
U 404 ; WX 793 ; N uni0194 ; G 342
U 405 ; WX 1045 ; N uni0195 ; G 343
U 406 ; WX 436 ; N uni0196 ; G 344
U 407 ; WX 389 ; N uni0197 ; G 345
U 408 ; WX 775 ; N uni0198 ; G 346
U 409 ; WX 665 ; N uni0199 ; G 347
U 410 ; WX 360 ; N uni019A ; G 348
U 411 ; WX 592 ; N uni019B ; G 349
U 412 ; WX 1042 ; N uni019C ; G 350
U 413 ; WX 837 ; N uni019D ; G 351
U 414 ; WX 712 ; N uni019E ; G 352
U 415 ; WX 850 ; N uni019F ; G 353
U 416 ; WX 850 ; N Ohorn ; G 354
U 417 ; WX 687 ; N ohorn ; G 355
U 418 ; WX 1114 ; N uni01A2 ; G 356
U 419 ; WX 962 ; N uni01A3 ; G 357
U 420 ; WX 782 ; N uni01A4 ; G 358
U 421 ; WX 716 ; N uni01A5 ; G 359
U 422 ; WX 770 ; N uni01A6 ; G 360
U 423 ; WX 720 ; N uni01A7 ; G 361
U 424 ; WX 595 ; N uni01A8 ; G 362
U 425 ; WX 683 ; N uni01A9 ; G 363
U 426 ; WX 552 ; N uni01AA ; G 364
U 427 ; WX 478 ; N uni01AB ; G 365
U 428 ; WX 707 ; N uni01AC ; G 366
U 429 ; WX 478 ; N uni01AD ; G 367
U 430 ; WX 682 ; N uni01AE ; G 368
U 431 ; WX 812 ; N Uhorn ; G 369
U 432 ; WX 712 ; N uhorn ; G 370
U 433 ; WX 769 ; N uni01B1 ; G 371
U 434 ; WX 813 ; N uni01B2 ; G 372
U 435 ; WX 797 ; N uni01B3 ; G 373
U 436 ; WX 778 ; N uni01B4 ; G 374
U 437 ; WX 725 ; N uni01B5 ; G 375
U 438 ; WX 582 ; N uni01B6 ; G 376
U 439 ; WX 772 ; N uni01B7 ; G 377
U 440 ; WX 772 ; N uni01B8 ; G 378
U 441 ; WX 641 ; N uni01B9 ; G 379
U 442 ; WX 582 ; N uni01BA ; G 380
U 443 ; WX 696 ; N uni01BB ; G 381
U 444 ; WX 772 ; N uni01BC ; G 382
U 445 ; WX 641 ; N uni01BD ; G 383
U 446 ; WX 573 ; N uni01BE ; G 384
U 447 ; WX 716 ; N uni01BF ; G 385
U 448 ; WX 372 ; N uni01C0 ; G 386
U 449 ; WX 659 ; N uni01C1 ; G 387
U 450 ; WX 544 ; N uni01C2 ; G 388
U 451 ; WX 372 ; N uni01C3 ; G 389
U 452 ; WX 1548 ; N uni01C4 ; G 390
U 453 ; WX 1450 ; N uni01C5 ; G 391
U 454 ; WX 1307 ; N uni01C6 ; G 392
U 455 ; WX 977 ; N uni01C7 ; G 393
U 456 ; WX 979 ; N uni01C8 ; G 394
U 457 ; WX 670 ; N uni01C9 ; G 395
U 458 ; WX 1193 ; N uni01CA ; G 396
U 459 ; WX 1213 ; N uni01CB ; G 397
U 460 ; WX 1063 ; N uni01CC ; G 398
U 461 ; WX 774 ; N uni01CD ; G 399
U 462 ; WX 675 ; N uni01CE ; G 400
U 463 ; WX 372 ; N uni01CF ; G 401
U 464 ; WX 343 ; N uni01D0 ; G 402
U 465 ; WX 850 ; N uni01D1 ; G 403
U 466 ; WX 687 ; N uni01D2 ; G 404
U 467 ; WX 812 ; N uni01D3 ; G 405
U 468 ; WX 712 ; N uni01D4 ; G 406
U 469 ; WX 812 ; N uni01D5 ; G 407
U 470 ; WX 712 ; N uni01D6 ; G 408
U 471 ; WX 812 ; N uni01D7 ; G 409
U 472 ; WX 712 ; N uni01D8 ; G 410
U 473 ; WX 812 ; N uni01D9 ; G 411
U 474 ; WX 712 ; N uni01DA ; G 412
U 475 ; WX 812 ; N uni01DB ; G 413
U 476 ; WX 712 ; N uni01DC ; G 414
U 477 ; WX 678 ; N uni01DD ; G 415
U 478 ; WX 774 ; N uni01DE ; G 416
U 479 ; WX 675 ; N uni01DF ; G 417
U 480 ; WX 774 ; N uni01E0 ; G 418
U 481 ; WX 675 ; N uni01E1 ; G 419
U 482 ; WX 1085 ; N uni01E2 ; G 420
U 483 ; WX 1048 ; N uni01E3 ; G 421
U 484 ; WX 821 ; N uni01E4 ; G 422
U 485 ; WX 716 ; N uni01E5 ; G 423
U 486 ; WX 821 ; N Gcaron ; G 424
U 487 ; WX 716 ; N gcaron ; G 425
U 488 ; WX 775 ; N uni01E8 ; G 426
U 489 ; WX 665 ; N uni01E9 ; G 427
U 490 ; WX 850 ; N uni01EA ; G 428
U 491 ; WX 687 ; N uni01EB ; G 429
U 492 ; WX 850 ; N uni01EC ; G 430
U 493 ; WX 687 ; N uni01ED ; G 431
U 494 ; WX 772 ; N uni01EE ; G 432
U 495 ; WX 582 ; N uni01EF ; G 433
U 496 ; WX 343 ; N uni01F0 ; G 434
U 497 ; WX 1548 ; N uni01F1 ; G 435
U 498 ; WX 1450 ; N uni01F2 ; G 436
U 499 ; WX 1307 ; N uni01F3 ; G 437
U 500 ; WX 821 ; N uni01F4 ; G 438
U 501 ; WX 716 ; N uni01F5 ; G 439
U 502 ; WX 1289 ; N uni01F6 ; G 440
U 503 ; WX 787 ; N uni01F7 ; G 441
U 504 ; WX 837 ; N uni01F8 ; G 442
U 505 ; WX 712 ; N uni01F9 ; G 443
U 506 ; WX 774 ; N Aringacute ; G 444
U 507 ; WX 675 ; N aringacute ; G 445
U 508 ; WX 1085 ; N AEacute ; G 446
U 509 ; WX 1048 ; N aeacute ; G 447
U 510 ; WX 850 ; N Oslashacute ; G 448
U 511 ; WX 687 ; N oslashacute ; G 449
U 512 ; WX 774 ; N uni0200 ; G 450
U 513 ; WX 675 ; N uni0201 ; G 451
U 514 ; WX 774 ; N uni0202 ; G 452
U 515 ; WX 675 ; N uni0203 ; G 453
U 516 ; WX 683 ; N uni0204 ; G 454
U 517 ; WX 678 ; N uni0205 ; G 455
U 518 ; WX 683 ; N uni0206 ; G 456
U 519 ; WX 678 ; N uni0207 ; G 457
U 520 ; WX 372 ; N uni0208 ; G 458
U 521 ; WX 343 ; N uni0209 ; G 459
U 522 ; WX 372 ; N uni020A ; G 460
U 523 ; WX 343 ; N uni020B ; G 461
U 524 ; WX 850 ; N uni020C ; G 462
U 525 ; WX 687 ; N uni020D ; G 463
U 526 ; WX 850 ; N uni020E ; G 464
U 527 ; WX 687 ; N uni020F ; G 465
U 528 ; WX 770 ; N uni0210 ; G 466
U 529 ; WX 493 ; N uni0211 ; G 467
U 530 ; WX 770 ; N uni0212 ; G 468
U 531 ; WX 493 ; N uni0213 ; G 469
U 532 ; WX 812 ; N uni0214 ; G 470
U 533 ; WX 712 ; N uni0215 ; G 471
U 534 ; WX 812 ; N uni0216 ; G 472
U 535 ; WX 712 ; N uni0217 ; G 473
U 536 ; WX 720 ; N Scommaaccent ; G 474
U 537 ; WX 595 ; N scommaaccent ; G 475
U 538 ; WX 682 ; N uni021A ; G 476
U 539 ; WX 478 ; N uni021B ; G 477
U 540 ; WX 690 ; N uni021C ; G 478
U 541 ; WX 607 ; N uni021D ; G 479
U 542 ; WX 837 ; N uni021E ; G 480
U 543 ; WX 712 ; N uni021F ; G 481
U 544 ; WX 837 ; N uni0220 ; G 482
U 545 ; WX 865 ; N uni0221 ; G 483
U 546 ; WX 809 ; N uni0222 ; G 484
U 547 ; WX 659 ; N uni0223 ; G 485
U 548 ; WX 725 ; N uni0224 ; G 486
U 549 ; WX 582 ; N uni0225 ; G 487
U 550 ; WX 774 ; N uni0226 ; G 488
U 551 ; WX 675 ; N uni0227 ; G 489
U 552 ; WX 683 ; N uni0228 ; G 490
U 553 ; WX 678 ; N uni0229 ; G 491
U 554 ; WX 850 ; N uni022A ; G 492
U 555 ; WX 687 ; N uni022B ; G 493
U 556 ; WX 850 ; N uni022C ; G 494
U 557 ; WX 687 ; N uni022D ; G 495
U 558 ; WX 850 ; N uni022E ; G 496
U 559 ; WX 687 ; N uni022F ; G 497
U 560 ; WX 850 ; N uni0230 ; G 498
U 561 ; WX 687 ; N uni0231 ; G 499
U 562 ; WX 724 ; N uni0232 ; G 500
U 563 ; WX 652 ; N uni0233 ; G 501
U 564 ; WX 492 ; N uni0234 ; G 502
U 565 ; WX 867 ; N uni0235 ; G 503
U 566 ; WX 512 ; N uni0236 ; G 504
U 567 ; WX 343 ; N dotlessj ; G 505
U 568 ; WX 1088 ; N uni0238 ; G 506
U 569 ; WX 1088 ; N uni0239 ; G 507
U 570 ; WX 774 ; N uni023A ; G 508
U 571 ; WX 734 ; N uni023B ; G 509
U 572 ; WX 593 ; N uni023C ; G 510
U 573 ; WX 637 ; N uni023D ; G 511
U 574 ; WX 682 ; N uni023E ; G 512
U 575 ; WX 595 ; N uni023F ; G 513
U 576 ; WX 582 ; N uni0240 ; G 514
U 577 ; WX 782 ; N uni0241 ; G 515
U 578 ; WX 614 ; N uni0242 ; G 516
U 579 ; WX 762 ; N uni0243 ; G 517
U 580 ; WX 812 ; N uni0244 ; G 518
U 581 ; WX 774 ; N uni0245 ; G 519
U 582 ; WX 683 ; N uni0246 ; G 520
U 583 ; WX 678 ; N uni0247 ; G 521
U 584 ; WX 372 ; N uni0248 ; G 522
U 585 ; WX 343 ; N uni0249 ; G 523
U 586 ; WX 860 ; N uni024A ; G 524
U 587 ; WX 791 ; N uni024B ; G 525
U 588 ; WX 770 ; N uni024C ; G 526
U 589 ; WX 493 ; N uni024D ; G 527
U 590 ; WX 724 ; N uni024E ; G 528
U 591 ; WX 652 ; N uni024F ; G 529
U 592 ; WX 675 ; N uni0250 ; G 530
U 593 ; WX 716 ; N uni0251 ; G 531
U 594 ; WX 716 ; N uni0252 ; G 532
U 595 ; WX 716 ; N uni0253 ; G 533
U 596 ; WX 593 ; N uni0254 ; G 534
U 597 ; WX 593 ; N uni0255 ; G 535
U 598 ; WX 791 ; N uni0256 ; G 536
U 599 ; WX 792 ; N uni0257 ; G 537
U 600 ; WX 678 ; N uni0258 ; G 538
U 601 ; WX 678 ; N uni0259 ; G 539
U 602 ; WX 876 ; N uni025A ; G 540
U 603 ; WX 557 ; N uni025B ; G 541
U 604 ; WX 545 ; N uni025C ; G 542
U 605 ; WX 774 ; N uni025D ; G 543
U 606 ; WX 731 ; N uni025E ; G 544
U 607 ; WX 343 ; N uni025F ; G 545
U 608 ; WX 792 ; N uni0260 ; G 546
U 609 ; WX 716 ; N uni0261 ; G 547
U 610 ; WX 627 ; N uni0262 ; G 548
U 611 ; WX 735 ; N uni0263 ; G 549
U 612 ; WX 635 ; N uni0264 ; G 550
U 613 ; WX 712 ; N uni0265 ; G 551
U 614 ; WX 712 ; N uni0266 ; G 552
U 615 ; WX 712 ; N uni0267 ; G 553
U 616 ; WX 545 ; N uni0268 ; G 554
U 617 ; WX 440 ; N uni0269 ; G 555
U 618 ; WX 545 ; N uni026A ; G 556
U 619 ; WX 559 ; N uni026B ; G 557
U 620 ; WX 693 ; N uni026C ; G 558
U 621 ; WX 343 ; N uni026D ; G 559
U 622 ; WX 841 ; N uni026E ; G 560
U 623 ; WX 1042 ; N uni026F ; G 561
U 624 ; WX 1042 ; N uni0270 ; G 562
U 625 ; WX 1042 ; N uni0271 ; G 563
U 626 ; WX 712 ; N uni0272 ; G 564
U 627 ; WX 793 ; N uni0273 ; G 565
U 628 ; WX 642 ; N uni0274 ; G 566
U 629 ; WX 687 ; N uni0275 ; G 567
U 630 ; WX 909 ; N uni0276 ; G 568
U 631 ; WX 682 ; N uni0277 ; G 569
U 632 ; WX 796 ; N uni0278 ; G 570
U 633 ; WX 538 ; N uni0279 ; G 571
U 634 ; WX 538 ; N uni027A ; G 572
U 635 ; WX 650 ; N uni027B ; G 573
U 636 ; WX 493 ; N uni027C ; G 574
U 637 ; WX 493 ; N uni027D ; G 575
U 638 ; WX 596 ; N uni027E ; G 576
U 639 ; WX 596 ; N uni027F ; G 577
U 640 ; WX 642 ; N uni0280 ; G 578
U 641 ; WX 642 ; N uni0281 ; G 579
U 642 ; WX 595 ; N uni0282 ; G 580
U 643 ; WX 415 ; N uni0283 ; G 581
U 644 ; WX 435 ; N uni0284 ; G 582
U 645 ; WX 605 ; N uni0285 ; G 583
U 646 ; WX 552 ; N uni0286 ; G 584
U 647 ; WX 478 ; N uni0287 ; G 585
U 648 ; WX 478 ; N uni0288 ; G 586
U 649 ; WX 920 ; N uni0289 ; G 587
U 650 ; WX 769 ; N uni028A ; G 588
U 651 ; WX 670 ; N uni028B ; G 589
U 652 ; WX 652 ; N uni028C ; G 590
U 653 ; WX 924 ; N uni028D ; G 591
U 654 ; WX 652 ; N uni028E ; G 592
U 655 ; WX 724 ; N uni028F ; G 593
U 656 ; WX 694 ; N uni0290 ; G 594
U 657 ; WX 684 ; N uni0291 ; G 595
U 658 ; WX 641 ; N uni0292 ; G 596
U 659 ; WX 641 ; N uni0293 ; G 597
U 660 ; WX 573 ; N uni0294 ; G 598
U 661 ; WX 573 ; N uni0295 ; G 599
U 662 ; WX 573 ; N uni0296 ; G 600
U 663 ; WX 573 ; N uni0297 ; G 601
U 664 ; WX 850 ; N uni0298 ; G 602
U 665 ; WX 633 ; N uni0299 ; G 603
U 666 ; WX 731 ; N uni029A ; G 604
U 667 ; WX 685 ; N uni029B ; G 605
U 668 ; WX 691 ; N uni029C ; G 606
U 669 ; WX 343 ; N uni029D ; G 607
U 670 ; WX 732 ; N uni029E ; G 608
U 671 ; WX 539 ; N uni029F ; G 609
U 672 ; WX 792 ; N uni02A0 ; G 610
U 673 ; WX 573 ; N uni02A1 ; G 611
U 674 ; WX 573 ; N uni02A2 ; G 612
U 675 ; WX 1156 ; N uni02A3 ; G 613
U 676 ; WX 1214 ; N uni02A4 ; G 614
U 677 ; WX 1155 ; N uni02A5 ; G 615
U 678 ; WX 975 ; N uni02A6 ; G 616
U 679 ; WX 769 ; N uni02A7 ; G 617
U 680 ; WX 929 ; N uni02A8 ; G 618
U 681 ; WX 1026 ; N uni02A9 ; G 619
U 682 ; WX 862 ; N uni02AA ; G 620
U 683 ; WX 780 ; N uni02AB ; G 621
U 684 ; WX 591 ; N uni02AC ; G 622
U 685 ; WX 415 ; N uni02AD ; G 623
U 686 ; WX 677 ; N uni02AE ; G 624
U 687 ; WX 789 ; N uni02AF ; G 625
U 688 ; WX 456 ; N uni02B0 ; G 626
U 689 ; WX 456 ; N uni02B1 ; G 627
U 690 ; WX 219 ; N uni02B2 ; G 628
U 691 ; WX 315 ; N uni02B3 ; G 629
U 692 ; WX 315 ; N uni02B4 ; G 630
U 693 ; WX 315 ; N uni02B5 ; G 631
U 694 ; WX 411 ; N uni02B6 ; G 632
U 695 ; WX 591 ; N uni02B7 ; G 633
U 696 ; WX 417 ; N uni02B8 ; G 634
U 697 ; WX 302 ; N uni02B9 ; G 635
U 698 ; WX 521 ; N uni02BA ; G 636
U 699 ; WX 380 ; N uni02BB ; G 637
U 700 ; WX 380 ; N uni02BC ; G 638
U 701 ; WX 380 ; N uni02BD ; G 639
U 702 ; WX 366 ; N uni02BE ; G 640
U 703 ; WX 366 ; N uni02BF ; G 641
U 704 ; WX 326 ; N uni02C0 ; G 642
U 705 ; WX 326 ; N uni02C1 ; G 643
U 706 ; WX 500 ; N uni02C2 ; G 644
U 707 ; WX 500 ; N uni02C3 ; G 645
U 708 ; WX 500 ; N uni02C4 ; G 646
U 709 ; WX 500 ; N uni02C5 ; G 647
U 710 ; WX 500 ; N circumflex ; G 648
U 711 ; WX 500 ; N caron ; G 649
U 712 ; WX 306 ; N uni02C8 ; G 650
U 713 ; WX 500 ; N uni02C9 ; G 651
U 714 ; WX 500 ; N uni02CA ; G 652
U 715 ; WX 500 ; N uni02CB ; G 653
U 716 ; WX 306 ; N uni02CC ; G 654
U 717 ; WX 500 ; N uni02CD ; G 655
U 718 ; WX 500 ; N uni02CE ; G 656
U 719 ; WX 500 ; N uni02CF ; G 657
U 720 ; WX 337 ; N uni02D0 ; G 658
U 721 ; WX 337 ; N uni02D1 ; G 659
U 722 ; WX 366 ; N uni02D2 ; G 660
U 723 ; WX 366 ; N uni02D3 ; G 661
U 724 ; WX 500 ; N uni02D4 ; G 662
U 725 ; WX 500 ; N uni02D5 ; G 663
U 726 ; WX 416 ; N uni02D6 ; G 664
U 727 ; WX 328 ; N uni02D7 ; G 665
U 728 ; WX 500 ; N breve ; G 666
U 729 ; WX 500 ; N dotaccent ; G 667
U 730 ; WX 500 ; N ring ; G 668
U 731 ; WX 500 ; N ogonek ; G 669
U 732 ; WX 500 ; N tilde ; G 670
U 733 ; WX 500 ; N hungarumlaut ; G 671
U 734 ; WX 351 ; N uni02DE ; G 672
U 735 ; WX 500 ; N uni02DF ; G 673
U 736 ; WX 412 ; N uni02E0 ; G 674
U 737 ; WX 219 ; N uni02E1 ; G 675
U 738 ; WX 381 ; N uni02E2 ; G 676
U 739 ; WX 413 ; N uni02E3 ; G 677
U 740 ; WX 326 ; N uni02E4 ; G 678
U 741 ; WX 500 ; N uni02E5 ; G 679
U 742 ; WX 500 ; N uni02E6 ; G 680
U 743 ; WX 500 ; N uni02E7 ; G 681
U 744 ; WX 500 ; N uni02E8 ; G 682
U 745 ; WX 500 ; N uni02E9 ; G 683
U 748 ; WX 500 ; N uni02EC ; G 684
U 749 ; WX 500 ; N uni02ED ; G 685
U 750 ; WX 644 ; N uni02EE ; G 686
U 755 ; WX 500 ; N uni02F3 ; G 687
U 759 ; WX 500 ; N uni02F7 ; G 688
U 768 ; WX 0 ; N gravecomb ; G 689
U 769 ; WX 0 ; N acutecomb ; G 690
U 770 ; WX 0 ; N uni0302 ; G 691
U 771 ; WX 0 ; N tildecomb ; G 692
U 772 ; WX 0 ; N uni0304 ; G 693
U 773 ; WX 0 ; N uni0305 ; G 694
U 774 ; WX 0 ; N uni0306 ; G 695
U 775 ; WX 0 ; N uni0307 ; G 696
U 776 ; WX 0 ; N uni0308 ; G 697
U 777 ; WX 0 ; N hookabovecomb ; G 698
U 778 ; WX 0 ; N uni030A ; G 699
U 779 ; WX 0 ; N uni030B ; G 700
U 780 ; WX 0 ; N uni030C ; G 701
U 781 ; WX 0 ; N uni030D ; G 702
U 782 ; WX 0 ; N uni030E ; G 703
U 783 ; WX 0 ; N uni030F ; G 704
U 784 ; WX 0 ; N uni0310 ; G 705
U 785 ; WX 0 ; N uni0311 ; G 706
U 786 ; WX 0 ; N uni0312 ; G 707
U 787 ; WX 0 ; N uni0313 ; G 708
U 788 ; WX 0 ; N uni0314 ; G 709
U 789 ; WX 0 ; N uni0315 ; G 710
U 790 ; WX 0 ; N uni0316 ; G 711
U 791 ; WX 0 ; N uni0317 ; G 712
U 792 ; WX 0 ; N uni0318 ; G 713
U 793 ; WX 0 ; N uni0319 ; G 714
U 794 ; WX 0 ; N uni031A ; G 715
U 795 ; WX 0 ; N uni031B ; G 716
U 796 ; WX 0 ; N uni031C ; G 717
U 797 ; WX 0 ; N uni031D ; G 718
U 798 ; WX 0 ; N uni031E ; G 719
U 799 ; WX 0 ; N uni031F ; G 720
U 800 ; WX 0 ; N uni0320 ; G 721
U 801 ; WX 0 ; N uni0321 ; G 722
U 802 ; WX 0 ; N uni0322 ; G 723
U 803 ; WX 0 ; N dotbelowcomb ; G 724
U 804 ; WX 0 ; N uni0324 ; G 725
U 805 ; WX 0 ; N uni0325 ; G 726
U 806 ; WX 0 ; N uni0326 ; G 727
U 807 ; WX 0 ; N uni0327 ; G 728
U 808 ; WX 0 ; N uni0328 ; G 729
U 809 ; WX 0 ; N uni0329 ; G 730
U 810 ; WX 0 ; N uni032A ; G 731
U 811 ; WX 0 ; N uni032B ; G 732
U 812 ; WX 0 ; N uni032C ; G 733
U 813 ; WX 0 ; N uni032D ; G 734
U 814 ; WX 0 ; N uni032E ; G 735
U 815 ; WX 0 ; N uni032F ; G 736
U 816 ; WX 0 ; N uni0330 ; G 737
U 817 ; WX 0 ; N uni0331 ; G 738
U 818 ; WX 0 ; N uni0332 ; G 739
U 819 ; WX 0 ; N uni0333 ; G 740
U 820 ; WX 0 ; N uni0334 ; G 741
U 821 ; WX 0 ; N uni0335 ; G 742
U 822 ; WX 0 ; N uni0336 ; G 743
U 823 ; WX 0 ; N uni0337 ; G 744
U 824 ; WX 0 ; N uni0338 ; G 745
U 825 ; WX 0 ; N uni0339 ; G 746
U 826 ; WX 0 ; N uni033A ; G 747
U 827 ; WX 0 ; N uni033B ; G 748
U 828 ; WX 0 ; N uni033C ; G 749
U 829 ; WX 0 ; N uni033D ; G 750
U 830 ; WX 0 ; N uni033E ; G 751
U 831 ; WX 0 ; N uni033F ; G 752
U 832 ; WX 0 ; N uni0340 ; G 753
U 833 ; WX 0 ; N uni0341 ; G 754
U 834 ; WX 0 ; N uni0342 ; G 755
U 835 ; WX 0 ; N uni0343 ; G 756
U 836 ; WX 0 ; N uni0344 ; G 757
U 837 ; WX 0 ; N uni0345 ; G 758
U 838 ; WX 0 ; N uni0346 ; G 759
U 839 ; WX 0 ; N uni0347 ; G 760
U 840 ; WX 0 ; N uni0348 ; G 761
U 841 ; WX 0 ; N uni0349 ; G 762
U 842 ; WX 0 ; N uni034A ; G 763
U 843 ; WX 0 ; N uni034B ; G 764
U 844 ; WX 0 ; N uni034C ; G 765
U 845 ; WX 0 ; N uni034D ; G 766
U 846 ; WX 0 ; N uni034E ; G 767
U 847 ; WX 0 ; N uni034F ; G 768
U 849 ; WX 0 ; N uni0351 ; G 769
U 850 ; WX 0 ; N uni0352 ; G 770
U 851 ; WX 0 ; N uni0353 ; G 771
U 855 ; WX 0 ; N uni0357 ; G 772
U 856 ; WX 0 ; N uni0358 ; G 773
U 858 ; WX 0 ; N uni035A ; G 774
U 860 ; WX 0 ; N uni035C ; G 775
U 861 ; WX 0 ; N uni035D ; G 776
U 862 ; WX 0 ; N uni035E ; G 777
U 863 ; WX 0 ; N uni035F ; G 778
U 864 ; WX 0 ; N uni0360 ; G 779
U 865 ; WX 0 ; N uni0361 ; G 780
U 866 ; WX 0 ; N uni0362 ; G 781
U 880 ; WX 698 ; N uni0370 ; G 782
U 881 ; WX 565 ; N uni0371 ; G 783
U 882 ; WX 1022 ; N uni0372 ; G 784
U 883 ; WX 836 ; N uni0373 ; G 785
U 884 ; WX 302 ; N uni0374 ; G 786
U 885 ; WX 302 ; N uni0375 ; G 787
U 886 ; WX 837 ; N uni0376 ; G 788
U 887 ; WX 701 ; N uni0377 ; G 789
U 890 ; WX 500 ; N uni037A ; G 790
U 891 ; WX 593 ; N uni037B ; G 791
U 892 ; WX 550 ; N uni037C ; G 792
U 893 ; WX 549 ; N uni037D ; G 793
U 894 ; WX 400 ; N uni037E ; G 794
U 895 ; WX 372 ; N uni037F ; G 795
U 900 ; WX 441 ; N tonos ; G 796
U 901 ; WX 500 ; N dieresistonos ; G 797
U 902 ; WX 797 ; N Alphatonos ; G 798
U 903 ; WX 380 ; N anoteleia ; G 799
U 904 ; WX 846 ; N Epsilontonos ; G 800
U 905 ; WX 1009 ; N Etatonos ; G 801
U 906 ; WX 563 ; N Iotatonos ; G 802
U 908 ; WX 891 ; N Omicrontonos ; G 803
U 910 ; WX 980 ; N Upsilontonos ; G 804
U 911 ; WX 894 ; N Omegatonos ; G 805
U 912 ; WX 390 ; N iotadieresistonos ; G 806
U 913 ; WX 774 ; N Alpha ; G 807
U 914 ; WX 762 ; N Beta ; G 808
U 915 ; WX 637 ; N Gamma ; G 809
U 916 ; WX 774 ; N uni0394 ; G 810
U 917 ; WX 683 ; N Epsilon ; G 811
U 918 ; WX 725 ; N Zeta ; G 812
U 919 ; WX 837 ; N Eta ; G 813
U 920 ; WX 850 ; N Theta ; G 814
U 921 ; WX 372 ; N Iota ; G 815
U 922 ; WX 775 ; N Kappa ; G 816
U 923 ; WX 774 ; N Lambda ; G 817
U 924 ; WX 995 ; N Mu ; G 818
U 925 ; WX 837 ; N Nu ; G 819
U 926 ; WX 632 ; N Xi ; G 820
U 927 ; WX 850 ; N Omicron ; G 821
U 928 ; WX 837 ; N Pi ; G 822
U 929 ; WX 733 ; N Rho ; G 823
U 931 ; WX 683 ; N Sigma ; G 824
U 932 ; WX 682 ; N Tau ; G 825
U 933 ; WX 724 ; N Upsilon ; G 826
U 934 ; WX 850 ; N Phi ; G 827
U 935 ; WX 771 ; N Chi ; G 828
U 936 ; WX 850 ; N Psi ; G 829
U 937 ; WX 850 ; N Omega ; G 830
U 938 ; WX 372 ; N Iotadieresis ; G 831
U 939 ; WX 724 ; N Upsilondieresis ; G 832
U 940 ; WX 687 ; N alphatonos ; G 833
U 941 ; WX 557 ; N epsilontonos ; G 834
U 942 ; WX 712 ; N etatonos ; G 835
U 943 ; WX 390 ; N iotatonos ; G 836
U 944 ; WX 675 ; N upsilondieresistonos ; G 837
U 945 ; WX 687 ; N alpha ; G 838
U 946 ; WX 716 ; N beta ; G 839
U 947 ; WX 681 ; N gamma ; G 840
U 948 ; WX 687 ; N delta ; G 841
U 949 ; WX 557 ; N epsilon ; G 842
U 950 ; WX 591 ; N zeta ; G 843
U 951 ; WX 712 ; N eta ; G 844
U 952 ; WX 687 ; N theta ; G 845
U 953 ; WX 390 ; N iota ; G 846
U 954 ; WX 710 ; N kappa ; G 847
U 955 ; WX 633 ; N lambda ; G 848
U 956 ; WX 736 ; N uni03BC ; G 849
U 957 ; WX 681 ; N nu ; G 850
U 958 ; WX 591 ; N xi ; G 851
U 959 ; WX 687 ; N omicron ; G 852
U 960 ; WX 791 ; N pi ; G 853
U 961 ; WX 716 ; N rho ; G 854
U 962 ; WX 593 ; N sigma1 ; G 855
U 963 ; WX 779 ; N sigma ; G 856
U 964 ; WX 638 ; N tau ; G 857
U 965 ; WX 675 ; N upsilon ; G 858
U 966 ; WX 782 ; N phi ; G 859
U 967 ; WX 645 ; N chi ; G 860
U 968 ; WX 794 ; N psi ; G 861
U 969 ; WX 869 ; N omega ; G 862
U 970 ; WX 390 ; N iotadieresis ; G 863
U 971 ; WX 675 ; N upsilondieresis ; G 864
U 972 ; WX 687 ; N omicrontonos ; G 865
U 973 ; WX 675 ; N upsilontonos ; G 866
U 974 ; WX 869 ; N omegatonos ; G 867
U 975 ; WX 775 ; N uni03CF ; G 868
U 976 ; WX 651 ; N uni03D0 ; G 869
U 977 ; WX 661 ; N theta1 ; G 870
U 978 ; WX 746 ; N Upsilon1 ; G 871
U 979 ; WX 981 ; N uni03D3 ; G 872
U 980 ; WX 746 ; N uni03D4 ; G 873
U 981 ; WX 796 ; N phi1 ; G 874
U 982 ; WX 869 ; N omega1 ; G 875
U 983 ; WX 744 ; N uni03D7 ; G 876
U 984 ; WX 850 ; N uni03D8 ; G 877
U 985 ; WX 687 ; N uni03D9 ; G 878
U 986 ; WX 734 ; N uni03DA ; G 879
U 987 ; WX 593 ; N uni03DB ; G 880
U 988 ; WX 683 ; N uni03DC ; G 881
U 989 ; WX 494 ; N uni03DD ; G 882
U 990 ; WX 702 ; N uni03DE ; G 883
U 991 ; WX 660 ; N uni03DF ; G 884
U 992 ; WX 919 ; N uni03E0 ; G 885
U 993 ; WX 627 ; N uni03E1 ; G 886
U 994 ; WX 1093 ; N uni03E2 ; G 887
U 995 ; WX 837 ; N uni03E3 ; G 888
U 996 ; WX 832 ; N uni03E4 ; G 889
U 997 ; WX 716 ; N uni03E5 ; G 890
U 998 ; WX 928 ; N uni03E6 ; G 891
U 999 ; WX 744 ; N uni03E7 ; G 892
U 1000 ; WX 733 ; N uni03E8 ; G 893
U 1001 ; WX 650 ; N uni03E9 ; G 894
U 1002 ; WX 789 ; N uni03EA ; G 895
U 1003 ; WX 671 ; N uni03EB ; G 896
U 1004 ; WX 752 ; N uni03EC ; G 897
U 1005 ; WX 716 ; N uni03ED ; G 898
U 1006 ; WX 682 ; N uni03EE ; G 899
U 1007 ; WX 590 ; N uni03EF ; G 900
U 1008 ; WX 744 ; N uni03F0 ; G 901
U 1009 ; WX 716 ; N uni03F1 ; G 902
U 1010 ; WX 593 ; N uni03F2 ; G 903
U 1011 ; WX 343 ; N uni03F3 ; G 904
U 1012 ; WX 850 ; N uni03F4 ; G 905
U 1013 ; WX 645 ; N uni03F5 ; G 906
U 1014 ; WX 645 ; N uni03F6 ; G 907
U 1015 ; WX 742 ; N uni03F7 ; G 908
U 1016 ; WX 716 ; N uni03F8 ; G 909
U 1017 ; WX 734 ; N uni03F9 ; G 910
U 1018 ; WX 995 ; N uni03FA ; G 911
U 1019 ; WX 732 ; N uni03FB ; G 912
U 1020 ; WX 716 ; N uni03FC ; G 913
U 1021 ; WX 734 ; N uni03FD ; G 914
U 1022 ; WX 734 ; N uni03FE ; G 915
U 1023 ; WX 698 ; N uni03FF ; G 916
U 1024 ; WX 683 ; N uni0400 ; G 917
U 1025 ; WX 683 ; N uni0401 ; G 918
U 1026 ; WX 878 ; N uni0402 ; G 919
U 1027 ; WX 637 ; N uni0403 ; G 920
U 1028 ; WX 734 ; N uni0404 ; G 921
U 1029 ; WX 720 ; N uni0405 ; G 922
U 1030 ; WX 372 ; N uni0406 ; G 923
U 1031 ; WX 372 ; N uni0407 ; G 924
U 1032 ; WX 372 ; N uni0408 ; G 925
U 1033 ; WX 1154 ; N uni0409 ; G 926
U 1034 ; WX 1130 ; N uni040A ; G 927
U 1035 ; WX 878 ; N uni040B ; G 928
U 1036 ; WX 817 ; N uni040C ; G 929
U 1037 ; WX 837 ; N uni040D ; G 930
U 1038 ; WX 771 ; N uni040E ; G 931
U 1039 ; WX 837 ; N uni040F ; G 932
U 1040 ; WX 774 ; N uni0410 ; G 933
U 1041 ; WX 762 ; N uni0411 ; G 934
U 1042 ; WX 762 ; N uni0412 ; G 935
U 1043 ; WX 637 ; N uni0413 ; G 936
U 1044 ; WX 891 ; N uni0414 ; G 937
U 1045 ; WX 683 ; N uni0415 ; G 938
U 1046 ; WX 1224 ; N uni0416 ; G 939
U 1047 ; WX 710 ; N uni0417 ; G 940
U 1048 ; WX 837 ; N uni0418 ; G 941
U 1049 ; WX 837 ; N uni0419 ; G 942
U 1050 ; WX 817 ; N uni041A ; G 943
U 1051 ; WX 831 ; N uni041B ; G 944
U 1052 ; WX 995 ; N uni041C ; G 945
U 1053 ; WX 837 ; N uni041D ; G 946
U 1054 ; WX 850 ; N uni041E ; G 947
U 1055 ; WX 837 ; N uni041F ; G 948
U 1056 ; WX 733 ; N uni0420 ; G 949
U 1057 ; WX 734 ; N uni0421 ; G 950
U 1058 ; WX 682 ; N uni0422 ; G 951
U 1059 ; WX 771 ; N uni0423 ; G 952
U 1060 ; WX 992 ; N uni0424 ; G 953
U 1061 ; WX 771 ; N uni0425 ; G 954
U 1062 ; WX 928 ; N uni0426 ; G 955
U 1063 ; WX 808 ; N uni0427 ; G 956
U 1064 ; WX 1235 ; N uni0428 ; G 957
U 1065 ; WX 1326 ; N uni0429 ; G 958
U 1066 ; WX 939 ; N uni042A ; G 959
U 1067 ; WX 1036 ; N uni042B ; G 960
U 1068 ; WX 762 ; N uni042C ; G 961
U 1069 ; WX 734 ; N uni042D ; G 962
U 1070 ; WX 1174 ; N uni042E ; G 963
U 1071 ; WX 770 ; N uni042F ; G 964
U 1072 ; WX 675 ; N uni0430 ; G 965
U 1073 ; WX 698 ; N uni0431 ; G 966
U 1074 ; WX 633 ; N uni0432 ; G 967
U 1075 ; WX 522 ; N uni0433 ; G 968
U 1076 ; WX 808 ; N uni0434 ; G 969
U 1077 ; WX 678 ; N uni0435 ; G 970
U 1078 ; WX 995 ; N uni0436 ; G 971
U 1079 ; WX 581 ; N uni0437 ; G 972
U 1080 ; WX 701 ; N uni0438 ; G 973
U 1081 ; WX 701 ; N uni0439 ; G 974
U 1082 ; WX 679 ; N uni043A ; G 975
U 1083 ; WX 732 ; N uni043B ; G 976
U 1084 ; WX 817 ; N uni043C ; G 977
U 1085 ; WX 691 ; N uni043D ; G 978
U 1086 ; WX 687 ; N uni043E ; G 979
U 1087 ; WX 691 ; N uni043F ; G 980
U 1088 ; WX 716 ; N uni0440 ; G 981
U 1089 ; WX 593 ; N uni0441 ; G 982
U 1090 ; WX 580 ; N uni0442 ; G 983
U 1091 ; WX 652 ; N uni0443 ; G 984
U 1092 ; WX 992 ; N uni0444 ; G 985
U 1093 ; WX 645 ; N uni0445 ; G 986
U 1094 ; WX 741 ; N uni0446 ; G 987
U 1095 ; WX 687 ; N uni0447 ; G 988
U 1096 ; WX 1062 ; N uni0448 ; G 989
U 1097 ; WX 1105 ; N uni0449 ; G 990
U 1098 ; WX 751 ; N uni044A ; G 991
U 1099 ; WX 904 ; N uni044B ; G 992
U 1100 ; WX 632 ; N uni044C ; G 993
U 1101 ; WX 593 ; N uni044D ; G 994
U 1102 ; WX 972 ; N uni044E ; G 995
U 1103 ; WX 642 ; N uni044F ; G 996
U 1104 ; WX 678 ; N uni0450 ; G 997
U 1105 ; WX 678 ; N uni0451 ; G 998
U 1106 ; WX 714 ; N uni0452 ; G 999
U 1107 ; WX 522 ; N uni0453 ; G 1000
U 1108 ; WX 593 ; N uni0454 ; G 1001
U 1109 ; WX 595 ; N uni0455 ; G 1002
U 1110 ; WX 343 ; N uni0456 ; G 1003
U 1111 ; WX 343 ; N uni0457 ; G 1004
U 1112 ; WX 343 ; N uni0458 ; G 1005
U 1113 ; WX 991 ; N uni0459 ; G 1006
U 1114 ; WX 956 ; N uni045A ; G 1007
U 1115 ; WX 734 ; N uni045B ; G 1008
U 1116 ; WX 679 ; N uni045C ; G 1009
U 1117 ; WX 701 ; N uni045D ; G 1010
U 1118 ; WX 652 ; N uni045E ; G 1011
U 1119 ; WX 691 ; N uni045F ; G 1012
U 1120 ; WX 1093 ; N uni0460 ; G 1013
U 1121 ; WX 869 ; N uni0461 ; G 1014
U 1122 ; WX 840 ; N uni0462 ; G 1015
U 1123 ; WX 736 ; N uni0463 ; G 1016
U 1124 ; WX 1012 ; N uni0464 ; G 1017
U 1125 ; WX 839 ; N uni0465 ; G 1018
U 1126 ; WX 992 ; N uni0466 ; G 1019
U 1127 ; WX 832 ; N uni0467 ; G 1020
U 1128 ; WX 1358 ; N uni0468 ; G 1021
U 1129 ; WX 1121 ; N uni0469 ; G 1022
U 1130 ; WX 850 ; N uni046A ; G 1023
U 1131 ; WX 687 ; N uni046B ; G 1024
U 1132 ; WX 1236 ; N uni046C ; G 1025
U 1133 ; WX 1007 ; N uni046D ; G 1026
U 1134 ; WX 696 ; N uni046E ; G 1027
U 1135 ; WX 557 ; N uni046F ; G 1028
U 1136 ; WX 1075 ; N uni0470 ; G 1029
U 1137 ; WX 1061 ; N uni0471 ; G 1030
U 1138 ; WX 850 ; N uni0472 ; G 1031
U 1139 ; WX 687 ; N uni0473 ; G 1032
U 1140 ; WX 850 ; N uni0474 ; G 1033
U 1141 ; WX 695 ; N uni0475 ; G 1034
U 1142 ; WX 850 ; N uni0476 ; G 1035
U 1143 ; WX 695 ; N uni0477 ; G 1036
U 1144 ; WX 1148 ; N uni0478 ; G 1037
U 1145 ; WX 1043 ; N uni0479 ; G 1038
U 1146 ; WX 1074 ; N uni047A ; G 1039
U 1147 ; WX 863 ; N uni047B ; G 1040
U 1148 ; WX 1405 ; N uni047C ; G 1041
U 1149 ; WX 1173 ; N uni047D ; G 1042
U 1150 ; WX 1093 ; N uni047E ; G 1043
U 1151 ; WX 869 ; N uni047F ; G 1044
U 1152 ; WX 734 ; N uni0480 ; G 1045
U 1153 ; WX 593 ; N uni0481 ; G 1046
U 1154 ; WX 652 ; N uni0482 ; G 1047
U 1155 ; WX 0 ; N uni0483 ; G 1048
U 1156 ; WX 0 ; N uni0484 ; G 1049
U 1157 ; WX 0 ; N uni0485 ; G 1050
U 1158 ; WX 0 ; N uni0486 ; G 1051
U 1159 ; WX 0 ; N uni0487 ; G 1052
U 1160 ; WX 418 ; N uni0488 ; G 1053
U 1161 ; WX 418 ; N uni0489 ; G 1054
U 1162 ; WX 938 ; N uni048A ; G 1055
U 1163 ; WX 806 ; N uni048B ; G 1056
U 1164 ; WX 762 ; N uni048C ; G 1057
U 1165 ; WX 611 ; N uni048D ; G 1058
U 1166 ; WX 736 ; N uni048E ; G 1059
U 1167 ; WX 718 ; N uni048F ; G 1060
U 1168 ; WX 637 ; N uni0490 ; G 1061
U 1169 ; WX 522 ; N uni0491 ; G 1062
U 1170 ; WX 666 ; N uni0492 ; G 1063
U 1171 ; WX 543 ; N uni0493 ; G 1064
U 1172 ; WX 789 ; N uni0494 ; G 1065
U 1173 ; WX 522 ; N uni0495 ; G 1066
U 1174 ; WX 1224 ; N uni0496 ; G 1067
U 1175 ; WX 995 ; N uni0497 ; G 1068
U 1176 ; WX 710 ; N uni0498 ; G 1069
U 1177 ; WX 581 ; N uni0499 ; G 1070
U 1178 ; WX 775 ; N uni049A ; G 1071
U 1179 ; WX 679 ; N uni049B ; G 1072
U 1180 ; WX 817 ; N uni049C ; G 1073
U 1181 ; WX 679 ; N uni049D ; G 1074
U 1182 ; WX 817 ; N uni049E ; G 1075
U 1183 ; WX 679 ; N uni049F ; G 1076
U 1184 ; WX 1015 ; N uni04A0 ; G 1077
U 1185 ; WX 826 ; N uni04A1 ; G 1078
U 1186 ; WX 837 ; N uni04A2 ; G 1079
U 1187 ; WX 691 ; N uni04A3 ; G 1080
U 1188 ; WX 1103 ; N uni04A4 ; G 1081
U 1189 ; WX 871 ; N uni04A5 ; G 1082
U 1190 ; WX 1254 ; N uni04A6 ; G 1083
U 1191 ; WX 979 ; N uni04A7 ; G 1084
U 1192 ; WX 946 ; N uni04A8 ; G 1085
U 1193 ; WX 859 ; N uni04A9 ; G 1086
U 1194 ; WX 734 ; N uni04AA ; G 1087
U 1195 ; WX 593 ; N uni04AB ; G 1088
U 1196 ; WX 682 ; N uni04AC ; G 1089
U 1197 ; WX 580 ; N uni04AD ; G 1090
U 1198 ; WX 724 ; N uni04AE ; G 1091
U 1199 ; WX 652 ; N uni04AF ; G 1092
U 1200 ; WX 724 ; N uni04B0 ; G 1093
U 1201 ; WX 652 ; N uni04B1 ; G 1094
U 1202 ; WX 771 ; N uni04B2 ; G 1095
U 1203 ; WX 645 ; N uni04B3 ; G 1096
U 1204 ; WX 1104 ; N uni04B4 ; G 1097
U 1205 ; WX 1001 ; N uni04B5 ; G 1098
U 1206 ; WX 808 ; N uni04B6 ; G 1099
U 1207 ; WX 687 ; N uni04B7 ; G 1100
U 1208 ; WX 808 ; N uni04B8 ; G 1101
U 1209 ; WX 687 ; N uni04B9 ; G 1102
U 1210 ; WX 808 ; N uni04BA ; G 1103
U 1211 ; WX 712 ; N uni04BB ; G 1104
U 1212 ; WX 1026 ; N uni04BC ; G 1105
U 1213 ; WX 810 ; N uni04BD ; G 1106
U 1214 ; WX 1026 ; N uni04BE ; G 1107
U 1215 ; WX 810 ; N uni04BF ; G 1108
U 1216 ; WX 372 ; N uni04C0 ; G 1109
U 1217 ; WX 1224 ; N uni04C1 ; G 1110
U 1218 ; WX 995 ; N uni04C2 ; G 1111
U 1219 ; WX 778 ; N uni04C3 ; G 1112
U 1220 ; WX 629 ; N uni04C4 ; G 1113
U 1221 ; WX 933 ; N uni04C5 ; G 1114
U 1222 ; WX 804 ; N uni04C6 ; G 1115
U 1223 ; WX 837 ; N uni04C7 ; G 1116
U 1224 ; WX 691 ; N uni04C8 ; G 1117
U 1225 ; WX 938 ; N uni04C9 ; G 1118
U 1226 ; WX 806 ; N uni04CA ; G 1119
U 1227 ; WX 808 ; N uni04CB ; G 1120
U 1228 ; WX 687 ; N uni04CC ; G 1121
U 1229 ; WX 1096 ; N uni04CD ; G 1122
U 1230 ; WX 932 ; N uni04CE ; G 1123
U 1231 ; WX 343 ; N uni04CF ; G 1124
U 1232 ; WX 774 ; N uni04D0 ; G 1125
U 1233 ; WX 675 ; N uni04D1 ; G 1126
U 1234 ; WX 774 ; N uni04D2 ; G 1127
U 1235 ; WX 675 ; N uni04D3 ; G 1128
U 1236 ; WX 1085 ; N uni04D4 ; G 1129
U 1237 ; WX 1048 ; N uni04D5 ; G 1130
U 1238 ; WX 683 ; N uni04D6 ; G 1131
U 1239 ; WX 678 ; N uni04D7 ; G 1132
U 1240 ; WX 850 ; N uni04D8 ; G 1133
U 1241 ; WX 678 ; N uni04D9 ; G 1134
U 1242 ; WX 850 ; N uni04DA ; G 1135
U 1243 ; WX 678 ; N uni04DB ; G 1136
U 1244 ; WX 1224 ; N uni04DC ; G 1137
U 1245 ; WX 995 ; N uni04DD ; G 1138
U 1246 ; WX 710 ; N uni04DE ; G 1139
U 1247 ; WX 581 ; N uni04DF ; G 1140
U 1248 ; WX 772 ; N uni04E0 ; G 1141
U 1249 ; WX 641 ; N uni04E1 ; G 1142
U 1250 ; WX 837 ; N uni04E2 ; G 1143
U 1251 ; WX 701 ; N uni04E3 ; G 1144
U 1252 ; WX 837 ; N uni04E4 ; G 1145
U 1253 ; WX 701 ; N uni04E5 ; G 1146
U 1254 ; WX 850 ; N uni04E6 ; G 1147
U 1255 ; WX 687 ; N uni04E7 ; G 1148
U 1256 ; WX 850 ; N uni04E8 ; G 1149
U 1257 ; WX 687 ; N uni04E9 ; G 1150
U 1258 ; WX 850 ; N uni04EA ; G 1151
U 1259 ; WX 687 ; N uni04EB ; G 1152
U 1260 ; WX 734 ; N uni04EC ; G 1153
U 1261 ; WX 593 ; N uni04ED ; G 1154
U 1262 ; WX 771 ; N uni04EE ; G 1155
U 1263 ; WX 652 ; N uni04EF ; G 1156
U 1264 ; WX 771 ; N uni04F0 ; G 1157
U 1265 ; WX 652 ; N uni04F1 ; G 1158
U 1266 ; WX 771 ; N uni04F2 ; G 1159
U 1267 ; WX 652 ; N uni04F3 ; G 1160
U 1268 ; WX 808 ; N uni04F4 ; G 1161
U 1269 ; WX 687 ; N uni04F5 ; G 1162
U 1270 ; WX 637 ; N uni04F6 ; G 1163
U 1271 ; WX 522 ; N uni04F7 ; G 1164
U 1272 ; WX 1036 ; N uni04F8 ; G 1165
U 1273 ; WX 904 ; N uni04F9 ; G 1166
U 1274 ; WX 666 ; N uni04FA ; G 1167
U 1275 ; WX 543 ; N uni04FB ; G 1168
U 1276 ; WX 771 ; N uni04FC ; G 1169
U 1277 ; WX 645 ; N uni04FD ; G 1170
U 1278 ; WX 771 ; N uni04FE ; G 1171
U 1279 ; WX 645 ; N uni04FF ; G 1172
U 1280 ; WX 762 ; N uni0500 ; G 1173
U 1281 ; WX 608 ; N uni0501 ; G 1174
U 1282 ; WX 1159 ; N uni0502 ; G 1175
U 1283 ; WX 893 ; N uni0503 ; G 1176
U 1284 ; WX 1119 ; N uni0504 ; G 1177
U 1285 ; WX 920 ; N uni0505 ; G 1178
U 1286 ; WX 828 ; N uni0506 ; G 1179
U 1287 ; WX 693 ; N uni0507 ; G 1180
U 1288 ; WX 1242 ; N uni0508 ; G 1181
U 1289 ; WX 1017 ; N uni0509 ; G 1182
U 1290 ; WX 1289 ; N uni050A ; G 1183
U 1291 ; WX 1013 ; N uni050B ; G 1184
U 1292 ; WX 839 ; N uni050C ; G 1185
U 1293 ; WX 638 ; N uni050D ; G 1186
U 1294 ; WX 938 ; N uni050E ; G 1187
U 1295 ; WX 803 ; N uni050F ; G 1188
U 1296 ; WX 696 ; N uni0510 ; G 1189
U 1297 ; WX 557 ; N uni0511 ; G 1190
U 1298 ; WX 831 ; N uni0512 ; G 1191
U 1299 ; WX 732 ; N uni0513 ; G 1192
U 1300 ; WX 1286 ; N uni0514 ; G 1193
U 1301 ; WX 1070 ; N uni0515 ; G 1194
U 1302 ; WX 1065 ; N uni0516 ; G 1195
U 1303 ; WX 982 ; N uni0517 ; G 1196
U 1304 ; WX 1082 ; N uni0518 ; G 1197
U 1305 ; WX 960 ; N uni0519 ; G 1198
U 1306 ; WX 850 ; N uni051A ; G 1199
U 1307 ; WX 716 ; N uni051B ; G 1200
U 1308 ; WX 1103 ; N uni051C ; G 1201
U 1309 ; WX 924 ; N uni051D ; G 1202
U 1310 ; WX 817 ; N uni051E ; G 1203
U 1311 ; WX 679 ; N uni051F ; G 1204
U 1312 ; WX 1248 ; N uni0520 ; G 1205
U 1313 ; WX 1022 ; N uni0521 ; G 1206
U 1314 ; WX 1254 ; N uni0522 ; G 1207
U 1315 ; WX 979 ; N uni0523 ; G 1208
U 1316 ; WX 957 ; N uni0524 ; G 1209
U 1317 ; WX 807 ; N uni0525 ; G 1210
U 1329 ; WX 904 ; N uni0531 ; G 1211
U 1330 ; WX 810 ; N uni0532 ; G 1212
U 1331 ; WX 809 ; N uni0533 ; G 1213
U 1332 ; WX 813 ; N uni0534 ; G 1214
U 1333 ; WX 810 ; N uni0535 ; G 1215
U 1334 ; WX 815 ; N uni0536 ; G 1216
U 1335 ; WX 724 ; N uni0537 ; G 1217
U 1336 ; WX 800 ; N uni0538 ; G 1218
U 1337 ; WX 1004 ; N uni0539 ; G 1219
U 1338 ; WX 809 ; N uni053A ; G 1220
U 1339 ; WX 740 ; N uni053B ; G 1221
U 1340 ; WX 620 ; N uni053C ; G 1222
U 1341 ; WX 1068 ; N uni053D ; G 1223
U 1342 ; WX 875 ; N uni053E ; G 1224
U 1343 ; WX 792 ; N uni053F ; G 1225
U 1344 ; WX 723 ; N uni0540 ; G 1226
U 1345 ; WX 811 ; N uni0541 ; G 1227
U 1346 ; WX 794 ; N uni0542 ; G 1228
U 1347 ; WX 782 ; N uni0543 ; G 1229
U 1348 ; WX 867 ; N uni0544 ; G 1230
U 1349 ; WX 766 ; N uni0545 ; G 1231
U 1350 ; WX 794 ; N uni0546 ; G 1232
U 1351 ; WX 787 ; N uni0547 ; G 1233
U 1352 ; WX 812 ; N uni0548 ; G 1234
U 1353 ; WX 752 ; N uni0549 ; G 1235
U 1354 ; WX 963 ; N uni054A ; G 1236
U 1355 ; WX 790 ; N uni054B ; G 1237
U 1356 ; WX 867 ; N uni054C ; G 1238
U 1357 ; WX 812 ; N uni054D ; G 1239
U 1358 ; WX 794 ; N uni054E ; G 1240
U 1359 ; WX 771 ; N uni054F ; G 1241
U 1360 ; WX 740 ; N uni0550 ; G 1242
U 1361 ; WX 775 ; N uni0551 ; G 1243
U 1362 ; WX 640 ; N uni0552 ; G 1244
U 1363 ; WX 926 ; N uni0553 ; G 1245
U 1364 ; WX 775 ; N uni0554 ; G 1246
U 1365 ; WX 848 ; N uni0555 ; G 1247
U 1366 ; WX 951 ; N uni0556 ; G 1248
U 1369 ; WX 366 ; N uni0559 ; G 1249
U 1370 ; WX 380 ; N uni055A ; G 1250
U 1371 ; WX 342 ; N uni055B ; G 1251
U 1372 ; WX 415 ; N uni055C ; G 1252
U 1373 ; WX 348 ; N uni055D ; G 1253
U 1374 ; WX 513 ; N uni055E ; G 1254
U 1375 ; WX 521 ; N uni055F ; G 1255
U 1377 ; WX 1043 ; N uni0561 ; G 1256
U 1378 ; WX 713 ; N uni0562 ; G 1257
U 1379 ; WX 782 ; N uni0563 ; G 1258
U 1380 ; WX 786 ; N uni0564 ; G 1259
U 1381 ; WX 713 ; N uni0565 ; G 1260
U 1382 ; WX 715 ; N uni0566 ; G 1261
U 1383 ; WX 628 ; N uni0567 ; G 1262
U 1384 ; WX 713 ; N uni0568 ; G 1263
U 1385 ; WX 840 ; N uni0569 ; G 1264
U 1386 ; WX 782 ; N uni056A ; G 1265
U 1387 ; WX 714 ; N uni056B ; G 1266
U 1388 ; WX 344 ; N uni056C ; G 1267
U 1389 ; WX 1094 ; N uni056D ; G 1268
U 1390 ; WX 708 ; N uni056E ; G 1269
U 1391 ; WX 714 ; N uni056F ; G 1270
U 1392 ; WX 714 ; N uni0570 ; G 1271
U 1393 ; WX 670 ; N uni0571 ; G 1272
U 1394 ; WX 714 ; N uni0572 ; G 1273
U 1395 ; WX 713 ; N uni0573 ; G 1274
U 1396 ; WX 714 ; N uni0574 ; G 1275
U 1397 ; WX 343 ; N uni0575 ; G 1276
U 1398 ; WX 714 ; N uni0576 ; G 1277
U 1399 ; WX 541 ; N uni0577 ; G 1278
U 1400 ; WX 714 ; N uni0578 ; G 1279
U 1401 ; WX 407 ; N uni0579 ; G 1280
U 1402 ; WX 1043 ; N uni057A ; G 1281
U 1403 ; WX 636 ; N uni057B ; G 1282
U 1404 ; WX 740 ; N uni057C ; G 1283
U 1405 ; WX 714 ; N uni057D ; G 1284
U 1406 ; WX 714 ; N uni057E ; G 1285
U 1407 ; WX 1038 ; N uni057F ; G 1286
U 1408 ; WX 714 ; N uni0580 ; G 1287
U 1409 ; WX 714 ; N uni0581 ; G 1288
U 1410 ; WX 532 ; N uni0582 ; G 1289
U 1411 ; WX 1038 ; N uni0583 ; G 1290
U 1412 ; WX 720 ; N uni0584 ; G 1291
U 1413 ; WX 689 ; N uni0585 ; G 1292
U 1414 ; WX 904 ; N uni0586 ; G 1293
U 1415 ; WX 902 ; N uni0587 ; G 1294
U 1417 ; WX 400 ; N uni0589 ; G 1295
U 1418 ; WX 415 ; N uni058A ; G 1296
U 1456 ; WX 0 ; N uni05B0 ; G 1297
U 1457 ; WX 0 ; N uni05B1 ; G 1298
U 1458 ; WX 0 ; N uni05B2 ; G 1299
U 1459 ; WX 0 ; N uni05B3 ; G 1300
U 1460 ; WX 0 ; N uni05B4 ; G 1301
U 1461 ; WX 0 ; N uni05B5 ; G 1302
U 1462 ; WX 0 ; N uni05B6 ; G 1303
U 1463 ; WX 0 ; N uni05B7 ; G 1304
U 1464 ; WX 0 ; N uni05B8 ; G 1305
U 1465 ; WX 0 ; N uni05B9 ; G 1306
U 1466 ; WX 0 ; N uni05BA ; G 1307
U 1467 ; WX 0 ; N uni05BB ; G 1308
U 1468 ; WX 0 ; N uni05BC ; G 1309
U 1469 ; WX 0 ; N uni05BD ; G 1310
U 1470 ; WX 415 ; N uni05BE ; G 1311
U 1471 ; WX 0 ; N uni05BF ; G 1312
U 1472 ; WX 372 ; N uni05C0 ; G 1313
U 1473 ; WX 0 ; N uni05C1 ; G 1314
U 1474 ; WX 0 ; N uni05C2 ; G 1315
U 1475 ; WX 372 ; N uni05C3 ; G 1316
U 1478 ; WX 497 ; N uni05C6 ; G 1317
U 1479 ; WX 0 ; N uni05C7 ; G 1318
U 1488 ; WX 728 ; N uni05D0 ; G 1319
U 1489 ; WX 610 ; N uni05D1 ; G 1320
U 1490 ; WX 447 ; N uni05D2 ; G 1321
U 1491 ; WX 588 ; N uni05D3 ; G 1322
U 1492 ; WX 687 ; N uni05D4 ; G 1323
U 1493 ; WX 343 ; N uni05D5 ; G 1324
U 1494 ; WX 400 ; N uni05D6 ; G 1325
U 1495 ; WX 687 ; N uni05D7 ; G 1326
U 1496 ; WX 679 ; N uni05D8 ; G 1327
U 1497 ; WX 294 ; N uni05D9 ; G 1328
U 1498 ; WX 578 ; N uni05DA ; G 1329
U 1499 ; WX 566 ; N uni05DB ; G 1330
U 1500 ; WX 605 ; N uni05DC ; G 1331
U 1501 ; WX 696 ; N uni05DD ; G 1332
U 1502 ; WX 724 ; N uni05DE ; G 1333
U 1503 ; WX 343 ; N uni05DF ; G 1334
U 1504 ; WX 453 ; N uni05E0 ; G 1335
U 1505 ; WX 680 ; N uni05E1 ; G 1336
U 1506 ; WX 666 ; N uni05E2 ; G 1337
U 1507 ; WX 675 ; N uni05E3 ; G 1338
U 1508 ; WX 658 ; N uni05E4 ; G 1339
U 1509 ; WX 661 ; N uni05E5 ; G 1340
U 1510 ; WX 653 ; N uni05E6 ; G 1341
U 1511 ; WX 736 ; N uni05E7 ; G 1342
U 1512 ; WX 602 ; N uni05E8 ; G 1343
U 1513 ; WX 749 ; N uni05E9 ; G 1344
U 1514 ; WX 683 ; N uni05EA ; G 1345
U 1520 ; WX 664 ; N uni05F0 ; G 1346
U 1521 ; WX 664 ; N uni05F1 ; G 1347
U 1522 ; WX 663 ; N uni05F2 ; G 1348
U 1523 ; WX 444 ; N uni05F3 ; G 1349
U 1524 ; WX 710 ; N uni05F4 ; G 1350
U 3647 ; WX 696 ; N uni0E3F ; G 1351
U 3713 ; WX 815 ; N uni0E81 ; G 1352
U 3714 ; WX 748 ; N uni0E82 ; G 1353
U 3716 ; WX 749 ; N uni0E84 ; G 1354
U 3719 ; WX 569 ; N uni0E87 ; G 1355
U 3720 ; WX 742 ; N uni0E88 ; G 1356
U 3722 ; WX 744 ; N uni0E8A ; G 1357
U 3725 ; WX 761 ; N uni0E8D ; G 1358
U 3732 ; WX 706 ; N uni0E94 ; G 1359
U 3733 ; WX 704 ; N uni0E95 ; G 1360
U 3734 ; WX 747 ; N uni0E96 ; G 1361
U 3735 ; WX 819 ; N uni0E97 ; G 1362
U 3737 ; WX 730 ; N uni0E99 ; G 1363
U 3738 ; WX 727 ; N uni0E9A ; G 1364
U 3739 ; WX 727 ; N uni0E9B ; G 1365
U 3740 ; WX 922 ; N uni0E9C ; G 1366
U 3741 ; WX 827 ; N uni0E9D ; G 1367
U 3742 ; WX 866 ; N uni0E9E ; G 1368
U 3743 ; WX 866 ; N uni0E9F ; G 1369
U 3745 ; WX 836 ; N uni0EA1 ; G 1370
U 3746 ; WX 761 ; N uni0EA2 ; G 1371
U 3747 ; WX 770 ; N uni0EA3 ; G 1372
U 3749 ; WX 769 ; N uni0EA5 ; G 1373
U 3751 ; WX 713 ; N uni0EA7 ; G 1374
U 3754 ; WX 827 ; N uni0EAA ; G 1375
U 3755 ; WX 1031 ; N uni0EAB ; G 1376
U 3757 ; WX 724 ; N uni0EAD ; G 1377
U 3758 ; WX 784 ; N uni0EAE ; G 1378
U 3759 ; WX 934 ; N uni0EAF ; G 1379
U 3760 ; WX 688 ; N uni0EB0 ; G 1380
U 3761 ; WX 0 ; N uni0EB1 ; G 1381
U 3762 ; WX 610 ; N uni0EB2 ; G 1382
U 3763 ; WX 610 ; N uni0EB3 ; G 1383
U 3764 ; WX 0 ; N uni0EB4 ; G 1384
U 3765 ; WX 0 ; N uni0EB5 ; G 1385
U 3766 ; WX 0 ; N uni0EB6 ; G 1386
U 3767 ; WX 0 ; N uni0EB7 ; G 1387
U 3768 ; WX 0 ; N uni0EB8 ; G 1388
U 3769 ; WX 0 ; N uni0EB9 ; G 1389
U 3771 ; WX 0 ; N uni0EBB ; G 1390
U 3772 ; WX 0 ; N uni0EBC ; G 1391
U 3773 ; WX 670 ; N uni0EBD ; G 1392
U 3776 ; WX 516 ; N uni0EC0 ; G 1393
U 3777 ; WX 860 ; N uni0EC1 ; G 1394
U 3778 ; WX 516 ; N uni0EC2 ; G 1395
U 3779 ; WX 650 ; N uni0EC3 ; G 1396
U 3780 ; WX 632 ; N uni0EC4 ; G 1397
U 3782 ; WX 759 ; N uni0EC6 ; G 1398
U 3784 ; WX 0 ; N uni0EC8 ; G 1399
U 3785 ; WX 0 ; N uni0EC9 ; G 1400
U 3786 ; WX 0 ; N uni0ECA ; G 1401
U 3787 ; WX 0 ; N uni0ECB ; G 1402
U 3788 ; WX 0 ; N uni0ECC ; G 1403
U 3789 ; WX 0 ; N uni0ECD ; G 1404
U 3792 ; WX 771 ; N uni0ED0 ; G 1405
U 3793 ; WX 771 ; N uni0ED1 ; G 1406
U 3794 ; WX 693 ; N uni0ED2 ; G 1407
U 3795 ; WX 836 ; N uni0ED3 ; G 1408
U 3796 ; WX 729 ; N uni0ED4 ; G 1409
U 3797 ; WX 729 ; N uni0ED5 ; G 1410
U 3798 ; WX 849 ; N uni0ED6 ; G 1411
U 3799 ; WX 790 ; N uni0ED7 ; G 1412
U 3800 ; WX 759 ; N uni0ED8 ; G 1413
U 3801 ; WX 910 ; N uni0ED9 ; G 1414
U 3804 ; WX 1363 ; N uni0EDC ; G 1415
U 3805 ; WX 1363 ; N uni0EDD ; G 1416
U 4256 ; WX 874 ; N uni10A0 ; G 1417
U 4257 ; WX 733 ; N uni10A1 ; G 1418
U 4258 ; WX 679 ; N uni10A2 ; G 1419
U 4259 ; WX 834 ; N uni10A3 ; G 1420
U 4260 ; WX 615 ; N uni10A4 ; G 1421
U 4261 ; WX 768 ; N uni10A5 ; G 1422
U 4262 ; WX 753 ; N uni10A6 ; G 1423
U 4263 ; WX 914 ; N uni10A7 ; G 1424
U 4264 ; WX 453 ; N uni10A8 ; G 1425
U 4265 ; WX 620 ; N uni10A9 ; G 1426
U 4266 ; WX 843 ; N uni10AA ; G 1427
U 4267 ; WX 882 ; N uni10AB ; G 1428
U 4268 ; WX 625 ; N uni10AC ; G 1429
U 4269 ; WX 854 ; N uni10AD ; G 1430
U 4270 ; WX 781 ; N uni10AE ; G 1431
U 4271 ; WX 629 ; N uni10AF ; G 1432
U 4272 ; WX 912 ; N uni10B0 ; G 1433
U 4273 ; WX 621 ; N uni10B1 ; G 1434
U 4274 ; WX 620 ; N uni10B2 ; G 1435
U 4275 ; WX 854 ; N uni10B3 ; G 1436
U 4276 ; WX 866 ; N uni10B4 ; G 1437
U 4277 ; WX 724 ; N uni10B5 ; G 1438
U 4278 ; WX 630 ; N uni10B6 ; G 1439
U 4279 ; WX 621 ; N uni10B7 ; G 1440
U 4280 ; WX 625 ; N uni10B8 ; G 1441
U 4281 ; WX 620 ; N uni10B9 ; G 1442
U 4282 ; WX 818 ; N uni10BA ; G 1443
U 4283 ; WX 874 ; N uni10BB ; G 1444
U 4284 ; WX 615 ; N uni10BC ; G 1445
U 4285 ; WX 623 ; N uni10BD ; G 1446
U 4286 ; WX 625 ; N uni10BE ; G 1447
U 4287 ; WX 725 ; N uni10BF ; G 1448
U 4288 ; WX 844 ; N uni10C0 ; G 1449
U 4289 ; WX 596 ; N uni10C1 ; G 1450
U 4290 ; WX 688 ; N uni10C2 ; G 1451
U 4291 ; WX 596 ; N uni10C3 ; G 1452
U 4292 ; WX 594 ; N uni10C4 ; G 1453
U 4293 ; WX 738 ; N uni10C5 ; G 1454
U 4304 ; WX 554 ; N uni10D0 ; G 1455
U 4305 ; WX 563 ; N uni10D1 ; G 1456
U 4306 ; WX 622 ; N uni10D2 ; G 1457
U 4307 ; WX 834 ; N uni10D3 ; G 1458
U 4308 ; WX 550 ; N uni10D4 ; G 1459
U 4309 ; WX 559 ; N uni10D5 ; G 1460
U 4310 ; WX 546 ; N uni10D6 ; G 1461
U 4311 ; WX 828 ; N uni10D7 ; G 1462
U 4312 ; WX 563 ; N uni10D8 ; G 1463
U 4313 ; WX 556 ; N uni10D9 ; G 1464
U 4314 ; WX 1074 ; N uni10DA ; G 1465
U 4315 ; WX 563 ; N uni10DB ; G 1466
U 4316 ; WX 563 ; N uni10DC ; G 1467
U 4317 ; WX 814 ; N uni10DD ; G 1468
U 4318 ; WX 554 ; N uni10DE ; G 1469
U 4319 ; WX 559 ; N uni10DF ; G 1470
U 4320 ; WX 823 ; N uni10E0 ; G 1471
U 4321 ; WX 563 ; N uni10E1 ; G 1472
U 4322 ; WX 700 ; N uni10E2 ; G 1473
U 4323 ; WX 582 ; N uni10E3 ; G 1474
U 4324 ; WX 847 ; N uni10E4 ; G 1475
U 4325 ; WX 555 ; N uni10E5 ; G 1476
U 4326 ; WX 814 ; N uni10E6 ; G 1477
U 4327 ; WX 559 ; N uni10E7 ; G 1478
U 4328 ; WX 543 ; N uni10E8 ; G 1479
U 4329 ; WX 563 ; N uni10E9 ; G 1480
U 4330 ; WX 622 ; N uni10EA ; G 1481
U 4331 ; WX 563 ; N uni10EB ; G 1482
U 4332 ; WX 543 ; N uni10EC ; G 1483
U 4333 ; WX 566 ; N uni10ED ; G 1484
U 4334 ; WX 563 ; N uni10EE ; G 1485
U 4335 ; WX 530 ; N uni10EF ; G 1486
U 4336 ; WX 554 ; N uni10F0 ; G 1487
U 4337 ; WX 554 ; N uni10F1 ; G 1488
U 4338 ; WX 553 ; N uni10F2 ; G 1489
U 4339 ; WX 554 ; N uni10F3 ; G 1490
U 4340 ; WX 553 ; N uni10F4 ; G 1491
U 4341 ; WX 583 ; N uni10F5 ; G 1492
U 4342 ; WX 853 ; N uni10F6 ; G 1493
U 4343 ; WX 604 ; N uni10F7 ; G 1494
U 4344 ; WX 559 ; N uni10F8 ; G 1495
U 4345 ; WX 632 ; N uni10F9 ; G 1496
U 4346 ; WX 554 ; N uni10FA ; G 1497
U 4347 ; WX 448 ; N uni10FB ; G 1498
U 4348 ; WX 324 ; N uni10FC ; G 1499
U 5121 ; WX 774 ; N uni1401 ; G 1500
U 5122 ; WX 774 ; N uni1402 ; G 1501
U 5123 ; WX 774 ; N uni1403 ; G 1502
U 5124 ; WX 774 ; N uni1404 ; G 1503
U 5125 ; WX 905 ; N uni1405 ; G 1504
U 5126 ; WX 905 ; N uni1406 ; G 1505
U 5127 ; WX 905 ; N uni1407 ; G 1506
U 5129 ; WX 905 ; N uni1409 ; G 1507
U 5130 ; WX 905 ; N uni140A ; G 1508
U 5131 ; WX 905 ; N uni140B ; G 1509
U 5132 ; WX 1018 ; N uni140C ; G 1510
U 5133 ; WX 1009 ; N uni140D ; G 1511
U 5134 ; WX 1018 ; N uni140E ; G 1512
U 5135 ; WX 1009 ; N uni140F ; G 1513
U 5136 ; WX 1018 ; N uni1410 ; G 1514
U 5137 ; WX 1009 ; N uni1411 ; G 1515
U 5138 ; WX 1149 ; N uni1412 ; G 1516
U 5139 ; WX 1140 ; N uni1413 ; G 1517
U 5140 ; WX 1149 ; N uni1414 ; G 1518
U 5141 ; WX 1140 ; N uni1415 ; G 1519
U 5142 ; WX 905 ; N uni1416 ; G 1520
U 5143 ; WX 1149 ; N uni1417 ; G 1521
U 5144 ; WX 1142 ; N uni1418 ; G 1522
U 5145 ; WX 1149 ; N uni1419 ; G 1523
U 5146 ; WX 1142 ; N uni141A ; G 1524
U 5147 ; WX 905 ; N uni141B ; G 1525
U 5149 ; WX 310 ; N uni141D ; G 1526
U 5150 ; WX 529 ; N uni141E ; G 1527
U 5151 ; WX 425 ; N uni141F ; G 1528
U 5152 ; WX 425 ; N uni1420 ; G 1529
U 5153 ; WX 395 ; N uni1421 ; G 1530
U 5154 ; WX 395 ; N uni1422 ; G 1531
U 5155 ; WX 395 ; N uni1423 ; G 1532
U 5156 ; WX 395 ; N uni1424 ; G 1533
U 5157 ; WX 564 ; N uni1425 ; G 1534
U 5158 ; WX 470 ; N uni1426 ; G 1535
U 5159 ; WX 310 ; N uni1427 ; G 1536
U 5160 ; WX 395 ; N uni1428 ; G 1537
U 5161 ; WX 395 ; N uni1429 ; G 1538
U 5162 ; WX 395 ; N uni142A ; G 1539
U 5163 ; WX 1213 ; N uni142B ; G 1540
U 5164 ; WX 986 ; N uni142C ; G 1541
U 5165 ; WX 1216 ; N uni142D ; G 1542
U 5166 ; WX 1297 ; N uni142E ; G 1543
U 5167 ; WX 774 ; N uni142F ; G 1544
U 5168 ; WX 774 ; N uni1430 ; G 1545
U 5169 ; WX 774 ; N uni1431 ; G 1546
U 5170 ; WX 774 ; N uni1432 ; G 1547
U 5171 ; WX 886 ; N uni1433 ; G 1548
U 5172 ; WX 886 ; N uni1434 ; G 1549
U 5173 ; WX 886 ; N uni1435 ; G 1550
U 5175 ; WX 886 ; N uni1437 ; G 1551
U 5176 ; WX 886 ; N uni1438 ; G 1552
U 5177 ; WX 886 ; N uni1439 ; G 1553
U 5178 ; WX 1018 ; N uni143A ; G 1554
U 5179 ; WX 1009 ; N uni143B ; G 1555
U 5180 ; WX 1018 ; N uni143C ; G 1556
U 5181 ; WX 1009 ; N uni143D ; G 1557
U 5182 ; WX 1018 ; N uni143E ; G 1558
U 5183 ; WX 1009 ; N uni143F ; G 1559
U 5184 ; WX 1149 ; N uni1440 ; G 1560
U 5185 ; WX 1140 ; N uni1441 ; G 1561
U 5186 ; WX 1149 ; N uni1442 ; G 1562
U 5187 ; WX 1140 ; N uni1443 ; G 1563
U 5188 ; WX 1149 ; N uni1444 ; G 1564
U 5189 ; WX 1142 ; N uni1445 ; G 1565
U 5190 ; WX 1149 ; N uni1446 ; G 1566
U 5191 ; WX 1142 ; N uni1447 ; G 1567
U 5192 ; WX 886 ; N uni1448 ; G 1568
U 5193 ; WX 576 ; N uni1449 ; G 1569
U 5194 ; WX 229 ; N uni144A ; G 1570
U 5196 ; WX 812 ; N uni144C ; G 1571
U 5197 ; WX 812 ; N uni144D ; G 1572
U 5198 ; WX 812 ; N uni144E ; G 1573
U 5199 ; WX 812 ; N uni144F ; G 1574
U 5200 ; WX 815 ; N uni1450 ; G 1575
U 5201 ; WX 815 ; N uni1451 ; G 1576
U 5202 ; WX 815 ; N uni1452 ; G 1577
U 5204 ; WX 815 ; N uni1454 ; G 1578
U 5205 ; WX 815 ; N uni1455 ; G 1579
U 5206 ; WX 815 ; N uni1456 ; G 1580
U 5207 ; WX 1056 ; N uni1457 ; G 1581
U 5208 ; WX 1048 ; N uni1458 ; G 1582
U 5209 ; WX 1056 ; N uni1459 ; G 1583
U 5210 ; WX 1048 ; N uni145A ; G 1584
U 5211 ; WX 1056 ; N uni145B ; G 1585
U 5212 ; WX 1048 ; N uni145C ; G 1586
U 5213 ; WX 1060 ; N uni145D ; G 1587
U 5214 ; WX 1054 ; N uni145E ; G 1588
U 5215 ; WX 1060 ; N uni145F ; G 1589
U 5216 ; WX 1054 ; N uni1460 ; G 1590
U 5217 ; WX 1060 ; N uni1461 ; G 1591
U 5218 ; WX 1052 ; N uni1462 ; G 1592
U 5219 ; WX 1060 ; N uni1463 ; G 1593
U 5220 ; WX 1052 ; N uni1464 ; G 1594
U 5221 ; WX 1060 ; N uni1465 ; G 1595
U 5222 ; WX 483 ; N uni1466 ; G 1596
U 5223 ; WX 1005 ; N uni1467 ; G 1597
U 5224 ; WX 1005 ; N uni1468 ; G 1598
U 5225 ; WX 1023 ; N uni1469 ; G 1599
U 5226 ; WX 1017 ; N uni146A ; G 1600
U 5227 ; WX 743 ; N uni146B ; G 1601
U 5228 ; WX 743 ; N uni146C ; G 1602
U 5229 ; WX 743 ; N uni146D ; G 1603
U 5230 ; WX 743 ; N uni146E ; G 1604
U 5231 ; WX 743 ; N uni146F ; G 1605
U 5232 ; WX 743 ; N uni1470 ; G 1606
U 5233 ; WX 743 ; N uni1471 ; G 1607
U 5234 ; WX 743 ; N uni1472 ; G 1608
U 5235 ; WX 743 ; N uni1473 ; G 1609
U 5236 ; WX 1029 ; N uni1474 ; G 1610
U 5237 ; WX 975 ; N uni1475 ; G 1611
U 5238 ; WX 980 ; N uni1476 ; G 1612
U 5239 ; WX 975 ; N uni1477 ; G 1613
U 5240 ; WX 980 ; N uni1478 ; G 1614
U 5241 ; WX 975 ; N uni1479 ; G 1615
U 5242 ; WX 1029 ; N uni147A ; G 1616
U 5243 ; WX 975 ; N uni147B ; G 1617
U 5244 ; WX 1029 ; N uni147C ; G 1618
U 5245 ; WX 975 ; N uni147D ; G 1619
U 5246 ; WX 980 ; N uni147E ; G 1620
U 5247 ; WX 975 ; N uni147F ; G 1621
U 5248 ; WX 980 ; N uni1480 ; G 1622
U 5249 ; WX 975 ; N uni1481 ; G 1623
U 5250 ; WX 980 ; N uni1482 ; G 1624
U 5251 ; WX 501 ; N uni1483 ; G 1625
U 5252 ; WX 501 ; N uni1484 ; G 1626
U 5253 ; WX 938 ; N uni1485 ; G 1627
U 5254 ; WX 938 ; N uni1486 ; G 1628
U 5255 ; WX 938 ; N uni1487 ; G 1629
U 5256 ; WX 938 ; N uni1488 ; G 1630
U 5257 ; WX 743 ; N uni1489 ; G 1631
U 5258 ; WX 743 ; N uni148A ; G 1632
U 5259 ; WX 743 ; N uni148B ; G 1633
U 5260 ; WX 743 ; N uni148C ; G 1634
U 5261 ; WX 743 ; N uni148D ; G 1635
U 5262 ; WX 743 ; N uni148E ; G 1636
U 5263 ; WX 743 ; N uni148F ; G 1637
U 5264 ; WX 743 ; N uni1490 ; G 1638
U 5265 ; WX 743 ; N uni1491 ; G 1639
U 5266 ; WX 1029 ; N uni1492 ; G 1640
U 5267 ; WX 975 ; N uni1493 ; G 1641
U 5268 ; WX 1029 ; N uni1494 ; G 1642
U 5269 ; WX 975 ; N uni1495 ; G 1643
U 5270 ; WX 1029 ; N uni1496 ; G 1644
U 5271 ; WX 975 ; N uni1497 ; G 1645
U 5272 ; WX 1029 ; N uni1498 ; G 1646
U 5273 ; WX 975 ; N uni1499 ; G 1647
U 5274 ; WX 1029 ; N uni149A ; G 1648
U 5275 ; WX 975 ; N uni149B ; G 1649
U 5276 ; WX 1029 ; N uni149C ; G 1650
U 5277 ; WX 975 ; N uni149D ; G 1651
U 5278 ; WX 1029 ; N uni149E ; G 1652
U 5279 ; WX 975 ; N uni149F ; G 1653
U 5280 ; WX 1029 ; N uni14A0 ; G 1654
U 5281 ; WX 501 ; N uni14A1 ; G 1655
U 5282 ; WX 501 ; N uni14A2 ; G 1656
U 5283 ; WX 626 ; N uni14A3 ; G 1657
U 5284 ; WX 626 ; N uni14A4 ; G 1658
U 5285 ; WX 626 ; N uni14A5 ; G 1659
U 5286 ; WX 626 ; N uni14A6 ; G 1660
U 5287 ; WX 626 ; N uni14A7 ; G 1661
U 5288 ; WX 626 ; N uni14A8 ; G 1662
U 5289 ; WX 626 ; N uni14A9 ; G 1663
U 5290 ; WX 626 ; N uni14AA ; G 1664
U 5291 ; WX 626 ; N uni14AB ; G 1665
U 5292 ; WX 881 ; N uni14AC ; G 1666
U 5293 ; WX 854 ; N uni14AD ; G 1667
U 5294 ; WX 863 ; N uni14AE ; G 1668
U 5295 ; WX 874 ; N uni14AF ; G 1669
U 5296 ; WX 863 ; N uni14B0 ; G 1670
U 5297 ; WX 874 ; N uni14B1 ; G 1671
U 5298 ; WX 881 ; N uni14B2 ; G 1672
U 5299 ; WX 874 ; N uni14B3 ; G 1673
U 5300 ; WX 881 ; N uni14B4 ; G 1674
U 5301 ; WX 874 ; N uni14B5 ; G 1675
U 5302 ; WX 863 ; N uni14B6 ; G 1676
U 5303 ; WX 874 ; N uni14B7 ; G 1677
U 5304 ; WX 863 ; N uni14B8 ; G 1678
U 5305 ; WX 874 ; N uni14B9 ; G 1679
U 5306 ; WX 863 ; N uni14BA ; G 1680
U 5307 ; WX 436 ; N uni14BB ; G 1681
U 5308 ; WX 548 ; N uni14BC ; G 1682
U 5309 ; WX 436 ; N uni14BD ; G 1683
U 5312 ; WX 988 ; N uni14C0 ; G 1684
U 5313 ; WX 988 ; N uni14C1 ; G 1685
U 5314 ; WX 988 ; N uni14C2 ; G 1686
U 5315 ; WX 988 ; N uni14C3 ; G 1687
U 5316 ; WX 931 ; N uni14C4 ; G 1688
U 5317 ; WX 931 ; N uni14C5 ; G 1689
U 5318 ; WX 931 ; N uni14C6 ; G 1690
U 5319 ; WX 931 ; N uni14C7 ; G 1691
U 5320 ; WX 931 ; N uni14C8 ; G 1692
U 5321 ; WX 1238 ; N uni14C9 ; G 1693
U 5322 ; WX 1247 ; N uni14CA ; G 1694
U 5323 ; WX 1200 ; N uni14CB ; G 1695
U 5324 ; WX 1228 ; N uni14CC ; G 1696
U 5325 ; WX 1200 ; N uni14CD ; G 1697
U 5326 ; WX 1228 ; N uni14CE ; G 1698
U 5327 ; WX 931 ; N uni14CF ; G 1699
U 5328 ; WX 660 ; N uni14D0 ; G 1700
U 5329 ; WX 497 ; N uni14D1 ; G 1701
U 5330 ; WX 660 ; N uni14D2 ; G 1702
U 5331 ; WX 988 ; N uni14D3 ; G 1703
U 5332 ; WX 988 ; N uni14D4 ; G 1704
U 5333 ; WX 988 ; N uni14D5 ; G 1705
U 5334 ; WX 988 ; N uni14D6 ; G 1706
U 5335 ; WX 931 ; N uni14D7 ; G 1707
U 5336 ; WX 931 ; N uni14D8 ; G 1708
U 5337 ; WX 931 ; N uni14D9 ; G 1709
U 5338 ; WX 931 ; N uni14DA ; G 1710
U 5339 ; WX 931 ; N uni14DB ; G 1711
U 5340 ; WX 1231 ; N uni14DC ; G 1712
U 5341 ; WX 1247 ; N uni14DD ; G 1713
U 5342 ; WX 1283 ; N uni14DE ; G 1714
U 5343 ; WX 1228 ; N uni14DF ; G 1715
U 5344 ; WX 1283 ; N uni14E0 ; G 1716
U 5345 ; WX 1228 ; N uni14E1 ; G 1717
U 5346 ; WX 1228 ; N uni14E2 ; G 1718
U 5347 ; WX 1214 ; N uni14E3 ; G 1719
U 5348 ; WX 1228 ; N uni14E4 ; G 1720
U 5349 ; WX 1214 ; N uni14E5 ; G 1721
U 5350 ; WX 1283 ; N uni14E6 ; G 1722
U 5351 ; WX 1228 ; N uni14E7 ; G 1723
U 5352 ; WX 1283 ; N uni14E8 ; G 1724
U 5353 ; WX 1228 ; N uni14E9 ; G 1725
U 5354 ; WX 660 ; N uni14EA ; G 1726
U 5356 ; WX 886 ; N uni14EC ; G 1727
U 5357 ; WX 730 ; N uni14ED ; G 1728
U 5358 ; WX 730 ; N uni14EE ; G 1729
U 5359 ; WX 730 ; N uni14EF ; G 1730
U 5360 ; WX 730 ; N uni14F0 ; G 1731
U 5361 ; WX 730 ; N uni14F1 ; G 1732
U 5362 ; WX 730 ; N uni14F2 ; G 1733
U 5363 ; WX 730 ; N uni14F3 ; G 1734
U 5364 ; WX 730 ; N uni14F4 ; G 1735
U 5365 ; WX 730 ; N uni14F5 ; G 1736
U 5366 ; WX 998 ; N uni14F6 ; G 1737
U 5367 ; WX 958 ; N uni14F7 ; G 1738
U 5368 ; WX 967 ; N uni14F8 ; G 1739
U 5369 ; WX 989 ; N uni14F9 ; G 1740
U 5370 ; WX 967 ; N uni14FA ; G 1741
U 5371 ; WX 989 ; N uni14FB ; G 1742
U 5372 ; WX 998 ; N uni14FC ; G 1743
U 5373 ; WX 958 ; N uni14FD ; G 1744
U 5374 ; WX 998 ; N uni14FE ; G 1745
U 5375 ; WX 958 ; N uni14FF ; G 1746
U 5376 ; WX 967 ; N uni1500 ; G 1747
U 5377 ; WX 989 ; N uni1501 ; G 1748
U 5378 ; WX 967 ; N uni1502 ; G 1749
U 5379 ; WX 989 ; N uni1503 ; G 1750
U 5380 ; WX 967 ; N uni1504 ; G 1751
U 5381 ; WX 493 ; N uni1505 ; G 1752
U 5382 ; WX 460 ; N uni1506 ; G 1753
U 5383 ; WX 493 ; N uni1507 ; G 1754
U 5392 ; WX 923 ; N uni1510 ; G 1755
U 5393 ; WX 923 ; N uni1511 ; G 1756
U 5394 ; WX 923 ; N uni1512 ; G 1757
U 5395 ; WX 1136 ; N uni1513 ; G 1758
U 5396 ; WX 1136 ; N uni1514 ; G 1759
U 5397 ; WX 1136 ; N uni1515 ; G 1760
U 5398 ; WX 1136 ; N uni1516 ; G 1761
U 5399 ; WX 1209 ; N uni1517 ; G 1762
U 5400 ; WX 1202 ; N uni1518 ; G 1763
U 5401 ; WX 1209 ; N uni1519 ; G 1764
U 5402 ; WX 1202 ; N uni151A ; G 1765
U 5403 ; WX 1209 ; N uni151B ; G 1766
U 5404 ; WX 1202 ; N uni151C ; G 1767
U 5405 ; WX 1431 ; N uni151D ; G 1768
U 5406 ; WX 1420 ; N uni151E ; G 1769
U 5407 ; WX 1431 ; N uni151F ; G 1770
U 5408 ; WX 1420 ; N uni1520 ; G 1771
U 5409 ; WX 1431 ; N uni1521 ; G 1772
U 5410 ; WX 1420 ; N uni1522 ; G 1773
U 5411 ; WX 1431 ; N uni1523 ; G 1774
U 5412 ; WX 1420 ; N uni1524 ; G 1775
U 5413 ; WX 746 ; N uni1525 ; G 1776
U 5414 ; WX 776 ; N uni1526 ; G 1777
U 5415 ; WX 776 ; N uni1527 ; G 1778
U 5416 ; WX 776 ; N uni1528 ; G 1779
U 5417 ; WX 776 ; N uni1529 ; G 1780
U 5418 ; WX 776 ; N uni152A ; G 1781
U 5419 ; WX 776 ; N uni152B ; G 1782
U 5420 ; WX 776 ; N uni152C ; G 1783
U 5421 ; WX 776 ; N uni152D ; G 1784
U 5422 ; WX 776 ; N uni152E ; G 1785
U 5423 ; WX 1003 ; N uni152F ; G 1786
U 5424 ; WX 1003 ; N uni1530 ; G 1787
U 5425 ; WX 1013 ; N uni1531 ; G 1788
U 5426 ; WX 996 ; N uni1532 ; G 1789
U 5427 ; WX 1013 ; N uni1533 ; G 1790
U 5428 ; WX 996 ; N uni1534 ; G 1791
U 5429 ; WX 1003 ; N uni1535 ; G 1792
U 5430 ; WX 1003 ; N uni1536 ; G 1793
U 5431 ; WX 1003 ; N uni1537 ; G 1794
U 5432 ; WX 1003 ; N uni1538 ; G 1795
U 5433 ; WX 1013 ; N uni1539 ; G 1796
U 5434 ; WX 996 ; N uni153A ; G 1797
U 5435 ; WX 1013 ; N uni153B ; G 1798
U 5436 ; WX 996 ; N uni153C ; G 1799
U 5437 ; WX 1013 ; N uni153D ; G 1800
U 5438 ; WX 495 ; N uni153E ; G 1801
U 5440 ; WX 395 ; N uni1540 ; G 1802
U 5441 ; WX 510 ; N uni1541 ; G 1803
U 5442 ; WX 1033 ; N uni1542 ; G 1804
U 5443 ; WX 1033 ; N uni1543 ; G 1805
U 5444 ; WX 976 ; N uni1544 ; G 1806
U 5445 ; WX 976 ; N uni1545 ; G 1807
U 5446 ; WX 976 ; N uni1546 ; G 1808
U 5447 ; WX 976 ; N uni1547 ; G 1809
U 5448 ; WX 733 ; N uni1548 ; G 1810
U 5449 ; WX 733 ; N uni1549 ; G 1811
U 5450 ; WX 733 ; N uni154A ; G 1812
U 5451 ; WX 733 ; N uni154B ; G 1813
U 5452 ; WX 733 ; N uni154C ; G 1814
U 5453 ; WX 733 ; N uni154D ; G 1815
U 5454 ; WX 1003 ; N uni154E ; G 1816
U 5455 ; WX 959 ; N uni154F ; G 1817
U 5456 ; WX 495 ; N uni1550 ; G 1818
U 5458 ; WX 886 ; N uni1552 ; G 1819
U 5459 ; WX 774 ; N uni1553 ; G 1820
U 5460 ; WX 774 ; N uni1554 ; G 1821
U 5461 ; WX 774 ; N uni1555 ; G 1822
U 5462 ; WX 774 ; N uni1556 ; G 1823
U 5463 ; WX 928 ; N uni1557 ; G 1824
U 5464 ; WX 928 ; N uni1558 ; G 1825
U 5465 ; WX 928 ; N uni1559 ; G 1826
U 5466 ; WX 928 ; N uni155A ; G 1827
U 5467 ; WX 1172 ; N uni155B ; G 1828
U 5468 ; WX 1142 ; N uni155C ; G 1829
U 5469 ; WX 602 ; N uni155D ; G 1830
U 5470 ; WX 812 ; N uni155E ; G 1831
U 5471 ; WX 812 ; N uni155F ; G 1832
U 5472 ; WX 812 ; N uni1560 ; G 1833
U 5473 ; WX 812 ; N uni1561 ; G 1834
U 5474 ; WX 812 ; N uni1562 ; G 1835
U 5475 ; WX 812 ; N uni1563 ; G 1836
U 5476 ; WX 815 ; N uni1564 ; G 1837
U 5477 ; WX 815 ; N uni1565 ; G 1838
U 5478 ; WX 815 ; N uni1566 ; G 1839
U 5479 ; WX 815 ; N uni1567 ; G 1840
U 5480 ; WX 1060 ; N uni1568 ; G 1841
U 5481 ; WX 1052 ; N uni1569 ; G 1842
U 5482 ; WX 548 ; N uni156A ; G 1843
U 5492 ; WX 977 ; N uni1574 ; G 1844
U 5493 ; WX 977 ; N uni1575 ; G 1845
U 5494 ; WX 977 ; N uni1576 ; G 1846
U 5495 ; WX 977 ; N uni1577 ; G 1847
U 5496 ; WX 977 ; N uni1578 ; G 1848
U 5497 ; WX 977 ; N uni1579 ; G 1849
U 5498 ; WX 977 ; N uni157A ; G 1850
U 5499 ; WX 618 ; N uni157B ; G 1851
U 5500 ; WX 837 ; N uni157C ; G 1852
U 5501 ; WX 510 ; N uni157D ; G 1853
U 5502 ; WX 1238 ; N uni157E ; G 1854
U 5503 ; WX 1238 ; N uni157F ; G 1855
U 5504 ; WX 1238 ; N uni1580 ; G 1856
U 5505 ; WX 1238 ; N uni1581 ; G 1857
U 5506 ; WX 1238 ; N uni1582 ; G 1858
U 5507 ; WX 1238 ; N uni1583 ; G 1859
U 5508 ; WX 1238 ; N uni1584 ; G 1860
U 5509 ; WX 989 ; N uni1585 ; G 1861
U 5514 ; WX 977 ; N uni158A ; G 1862
U 5515 ; WX 977 ; N uni158B ; G 1863
U 5516 ; WX 977 ; N uni158C ; G 1864
U 5517 ; WX 977 ; N uni158D ; G 1865
U 5518 ; WX 1591 ; N uni158E ; G 1866
U 5519 ; WX 1591 ; N uni158F ; G 1867
U 5520 ; WX 1591 ; N uni1590 ; G 1868
U 5521 ; WX 1295 ; N uni1591 ; G 1869
U 5522 ; WX 1295 ; N uni1592 ; G 1870
U 5523 ; WX 1591 ; N uni1593 ; G 1871
U 5524 ; WX 1591 ; N uni1594 ; G 1872
U 5525 ; WX 848 ; N uni1595 ; G 1873
U 5526 ; WX 1273 ; N uni1596 ; G 1874
U 5536 ; WX 988 ; N uni15A0 ; G 1875
U 5537 ; WX 988 ; N uni15A1 ; G 1876
U 5538 ; WX 931 ; N uni15A2 ; G 1877
U 5539 ; WX 931 ; N uni15A3 ; G 1878
U 5540 ; WX 931 ; N uni15A4 ; G 1879
U 5541 ; WX 931 ; N uni15A5 ; G 1880
U 5542 ; WX 660 ; N uni15A6 ; G 1881
U 5543 ; WX 776 ; N uni15A7 ; G 1882
U 5544 ; WX 776 ; N uni15A8 ; G 1883
U 5545 ; WX 776 ; N uni15A9 ; G 1884
U 5546 ; WX 776 ; N uni15AA ; G 1885
U 5547 ; WX 776 ; N uni15AB ; G 1886
U 5548 ; WX 776 ; N uni15AC ; G 1887
U 5549 ; WX 776 ; N uni15AD ; G 1888
U 5550 ; WX 495 ; N uni15AE ; G 1889
U 5551 ; WX 743 ; N uni15AF ; G 1890
U 5598 ; WX 830 ; N uni15DE ; G 1891
U 5601 ; WX 830 ; N uni15E1 ; G 1892
U 5702 ; WX 496 ; N uni1646 ; G 1893
U 5703 ; WX 496 ; N uni1647 ; G 1894
U 5742 ; WX 413 ; N uni166E ; G 1895
U 5743 ; WX 1238 ; N uni166F ; G 1896
U 5744 ; WX 1591 ; N uni1670 ; G 1897
U 5745 ; WX 2016 ; N uni1671 ; G 1898
U 5746 ; WX 2016 ; N uni1672 ; G 1899
U 5747 ; WX 1720 ; N uni1673 ; G 1900
U 5748 ; WX 1678 ; N uni1674 ; G 1901
U 5749 ; WX 2016 ; N uni1675 ; G 1902
U 5750 ; WX 2016 ; N uni1676 ; G 1903
U 7424 ; WX 652 ; N uni1D00 ; G 1904
U 7425 ; WX 833 ; N uni1D01 ; G 1905
U 7426 ; WX 1048 ; N uni1D02 ; G 1906
U 7427 ; WX 608 ; N uni1D03 ; G 1907
U 7428 ; WX 593 ; N uni1D04 ; G 1908
U 7429 ; WX 676 ; N uni1D05 ; G 1909
U 7430 ; WX 676 ; N uni1D06 ; G 1910
U 7431 ; WX 559 ; N uni1D07 ; G 1911
U 7432 ; WX 557 ; N uni1D08 ; G 1912
U 7433 ; WX 343 ; N uni1D09 ; G 1913
U 7434 ; WX 494 ; N uni1D0A ; G 1914
U 7435 ; WX 665 ; N uni1D0B ; G 1915
U 7436 ; WX 539 ; N uni1D0C ; G 1916
U 7437 ; WX 817 ; N uni1D0D ; G 1917
U 7438 ; WX 701 ; N uni1D0E ; G 1918
U 7439 ; WX 687 ; N uni1D0F ; G 1919
U 7440 ; WX 593 ; N uni1D10 ; G 1920
U 7441 ; WX 660 ; N uni1D11 ; G 1921
U 7442 ; WX 660 ; N uni1D12 ; G 1922
U 7443 ; WX 660 ; N uni1D13 ; G 1923
U 7444 ; WX 1094 ; N uni1D14 ; G 1924
U 7446 ; WX 687 ; N uni1D16 ; G 1925
U 7447 ; WX 687 ; N uni1D17 ; G 1926
U 7448 ; WX 556 ; N uni1D18 ; G 1927
U 7449 ; WX 642 ; N uni1D19 ; G 1928
U 7450 ; WX 642 ; N uni1D1A ; G 1929
U 7451 ; WX 580 ; N uni1D1B ; G 1930
U 7452 ; WX 634 ; N uni1D1C ; G 1931
U 7453 ; WX 737 ; N uni1D1D ; G 1932
U 7454 ; WX 948 ; N uni1D1E ; G 1933
U 7455 ; WX 695 ; N uni1D1F ; G 1934
U 7456 ; WX 652 ; N uni1D20 ; G 1935
U 7457 ; WX 924 ; N uni1D21 ; G 1936
U 7458 ; WX 582 ; N uni1D22 ; G 1937
U 7459 ; WX 646 ; N uni1D23 ; G 1938
U 7462 ; WX 539 ; N uni1D26 ; G 1939
U 7463 ; WX 652 ; N uni1D27 ; G 1940
U 7464 ; WX 691 ; N uni1D28 ; G 1941
U 7465 ; WX 556 ; N uni1D29 ; G 1942
U 7466 ; WX 781 ; N uni1D2A ; G 1943
U 7467 ; WX 732 ; N uni1D2B ; G 1944
U 7468 ; WX 487 ; N uni1D2C ; G 1945
U 7469 ; WX 683 ; N uni1D2D ; G 1946
U 7470 ; WX 480 ; N uni1D2E ; G 1947
U 7472 ; WX 523 ; N uni1D30 ; G 1948
U 7473 ; WX 430 ; N uni1D31 ; G 1949
U 7474 ; WX 430 ; N uni1D32 ; G 1950
U 7475 ; WX 517 ; N uni1D33 ; G 1951
U 7476 ; WX 527 ; N uni1D34 ; G 1952
U 7477 ; WX 234 ; N uni1D35 ; G 1953
U 7478 ; WX 234 ; N uni1D36 ; G 1954
U 7479 ; WX 488 ; N uni1D37 ; G 1955
U 7480 ; WX 401 ; N uni1D38 ; G 1956
U 7481 ; WX 626 ; N uni1D39 ; G 1957
U 7482 ; WX 527 ; N uni1D3A ; G 1958
U 7483 ; WX 527 ; N uni1D3B ; G 1959
U 7484 ; WX 535 ; N uni1D3C ; G 1960
U 7485 ; WX 509 ; N uni1D3D ; G 1961
U 7486 ; WX 461 ; N uni1D3E ; G 1962
U 7487 ; WX 485 ; N uni1D3F ; G 1963
U 7488 ; WX 430 ; N uni1D40 ; G 1964
U 7489 ; WX 511 ; N uni1D41 ; G 1965
U 7490 ; WX 695 ; N uni1D42 ; G 1966
U 7491 ; WX 458 ; N uni1D43 ; G 1967
U 7492 ; WX 458 ; N uni1D44 ; G 1968
U 7493 ; WX 479 ; N uni1D45 ; G 1969
U 7494 ; WX 712 ; N uni1D46 ; G 1970
U 7495 ; WX 479 ; N uni1D47 ; G 1971
U 7496 ; WX 479 ; N uni1D48 ; G 1972
U 7497 ; WX 479 ; N uni1D49 ; G 1973
U 7498 ; WX 479 ; N uni1D4A ; G 1974
U 7499 ; WX 386 ; N uni1D4B ; G 1975
U 7500 ; WX 386 ; N uni1D4C ; G 1976
U 7501 ; WX 479 ; N uni1D4D ; G 1977
U 7502 ; WX 219 ; N uni1D4E ; G 1978
U 7503 ; WX 487 ; N uni1D4F ; G 1979
U 7504 ; WX 664 ; N uni1D50 ; G 1980
U 7505 ; WX 456 ; N uni1D51 ; G 1981
U 7506 ; WX 488 ; N uni1D52 ; G 1982
U 7507 ; WX 414 ; N uni1D53 ; G 1983
U 7508 ; WX 488 ; N uni1D54 ; G 1984
U 7509 ; WX 488 ; N uni1D55 ; G 1985
U 7510 ; WX 479 ; N uni1D56 ; G 1986
U 7511 ; WX 388 ; N uni1D57 ; G 1987
U 7512 ; WX 456 ; N uni1D58 ; G 1988
U 7513 ; WX 462 ; N uni1D59 ; G 1989
U 7514 ; WX 664 ; N uni1D5A ; G 1990
U 7515 ; WX 501 ; N uni1D5B ; G 1991
U 7517 ; WX 451 ; N uni1D5D ; G 1992
U 7518 ; WX 429 ; N uni1D5E ; G 1993
U 7519 ; WX 433 ; N uni1D5F ; G 1994
U 7520 ; WX 493 ; N uni1D60 ; G 1995
U 7521 ; WX 406 ; N uni1D61 ; G 1996
U 7522 ; WX 219 ; N uni1D62 ; G 1997
U 7523 ; WX 315 ; N uni1D63 ; G 1998
U 7524 ; WX 456 ; N uni1D64 ; G 1999
U 7525 ; WX 501 ; N uni1D65 ; G 2000
U 7526 ; WX 451 ; N uni1D66 ; G 2001
U 7527 ; WX 429 ; N uni1D67 ; G 2002
U 7528 ; WX 451 ; N uni1D68 ; G 2003
U 7529 ; WX 493 ; N uni1D69 ; G 2004
U 7530 ; WX 406 ; N uni1D6A ; G 2005
U 7543 ; WX 716 ; N uni1D77 ; G 2006
U 7544 ; WX 527 ; N uni1D78 ; G 2007
U 7547 ; WX 545 ; N uni1D7B ; G 2008
U 7549 ; WX 747 ; N uni1D7D ; G 2009
U 7557 ; WX 514 ; N uni1D85 ; G 2010
U 7579 ; WX 479 ; N uni1D9B ; G 2011
U 7580 ; WX 414 ; N uni1D9C ; G 2012
U 7581 ; WX 414 ; N uni1D9D ; G 2013
U 7582 ; WX 488 ; N uni1D9E ; G 2014
U 7583 ; WX 386 ; N uni1D9F ; G 2015
U 7584 ; WX 377 ; N uni1DA0 ; G 2016
U 7585 ; WX 348 ; N uni1DA1 ; G 2017
U 7586 ; WX 479 ; N uni1DA2 ; G 2018
U 7587 ; WX 456 ; N uni1DA3 ; G 2019
U 7588 ; WX 347 ; N uni1DA4 ; G 2020
U 7589 ; WX 281 ; N uni1DA5 ; G 2021
U 7590 ; WX 347 ; N uni1DA6 ; G 2022
U 7591 ; WX 347 ; N uni1DA7 ; G 2023
U 7592 ; WX 431 ; N uni1DA8 ; G 2024
U 7593 ; WX 326 ; N uni1DA9 ; G 2025
U 7594 ; WX 330 ; N uni1DAA ; G 2026
U 7595 ; WX 370 ; N uni1DAB ; G 2027
U 7596 ; WX 664 ; N uni1DAC ; G 2028
U 7597 ; WX 664 ; N uni1DAD ; G 2029
U 7598 ; WX 562 ; N uni1DAE ; G 2030
U 7599 ; WX 562 ; N uni1DAF ; G 2031
U 7600 ; WX 448 ; N uni1DB0 ; G 2032
U 7601 ; WX 488 ; N uni1DB1 ; G 2033
U 7602 ; WX 542 ; N uni1DB2 ; G 2034
U 7603 ; WX 422 ; N uni1DB3 ; G 2035
U 7604 ; WX 396 ; N uni1DB4 ; G 2036
U 7605 ; WX 388 ; N uni1DB5 ; G 2037
U 7606 ; WX 583 ; N uni1DB6 ; G 2038
U 7607 ; WX 494 ; N uni1DB7 ; G 2039
U 7608 ; WX 399 ; N uni1DB8 ; G 2040
U 7609 ; WX 451 ; N uni1DB9 ; G 2041
U 7610 ; WX 501 ; N uni1DBA ; G 2042
U 7611 ; WX 417 ; N uni1DBB ; G 2043
U 7612 ; WX 523 ; N uni1DBC ; G 2044
U 7613 ; WX 470 ; N uni1DBD ; G 2045
U 7614 ; WX 455 ; N uni1DBE ; G 2046
U 7615 ; WX 425 ; N uni1DBF ; G 2047
U 7620 ; WX 0 ; N uni1DC4 ; G 2048
U 7621 ; WX 0 ; N uni1DC5 ; G 2049
U 7622 ; WX 0 ; N uni1DC6 ; G 2050
U 7623 ; WX 0 ; N uni1DC7 ; G 2051
U 7624 ; WX 0 ; N uni1DC8 ; G 2052
U 7625 ; WX 0 ; N uni1DC9 ; G 2053
U 7680 ; WX 774 ; N uni1E00 ; G 2054
U 7681 ; WX 675 ; N uni1E01 ; G 2055
U 7682 ; WX 762 ; N uni1E02 ; G 2056
U 7683 ; WX 716 ; N uni1E03 ; G 2057
U 7684 ; WX 762 ; N uni1E04 ; G 2058
U 7685 ; WX 716 ; N uni1E05 ; G 2059
U 7686 ; WX 762 ; N uni1E06 ; G 2060
U 7687 ; WX 716 ; N uni1E07 ; G 2061
U 7688 ; WX 734 ; N uni1E08 ; G 2062
U 7689 ; WX 593 ; N uni1E09 ; G 2063
U 7690 ; WX 830 ; N uni1E0A ; G 2064
U 7691 ; WX 716 ; N uni1E0B ; G 2065
U 7692 ; WX 830 ; N uni1E0C ; G 2066
U 7693 ; WX 716 ; N uni1E0D ; G 2067
U 7694 ; WX 830 ; N uni1E0E ; G 2068
U 7695 ; WX 716 ; N uni1E0F ; G 2069
U 7696 ; WX 830 ; N uni1E10 ; G 2070
U 7697 ; WX 716 ; N uni1E11 ; G 2071
U 7698 ; WX 830 ; N uni1E12 ; G 2072
U 7699 ; WX 716 ; N uni1E13 ; G 2073
U 7700 ; WX 683 ; N uni1E14 ; G 2074
U 7701 ; WX 678 ; N uni1E15 ; G 2075
U 7702 ; WX 683 ; N uni1E16 ; G 2076
U 7703 ; WX 678 ; N uni1E17 ; G 2077
U 7704 ; WX 683 ; N uni1E18 ; G 2078
U 7705 ; WX 678 ; N uni1E19 ; G 2079
U 7706 ; WX 683 ; N uni1E1A ; G 2080
U 7707 ; WX 678 ; N uni1E1B ; G 2081
U 7708 ; WX 683 ; N uni1E1C ; G 2082
U 7709 ; WX 678 ; N uni1E1D ; G 2083
U 7710 ; WX 683 ; N uni1E1E ; G 2084
U 7711 ; WX 435 ; N uni1E1F ; G 2085
U 7712 ; WX 821 ; N uni1E20 ; G 2086
U 7713 ; WX 716 ; N uni1E21 ; G 2087
U 7714 ; WX 837 ; N uni1E22 ; G 2088
U 7715 ; WX 712 ; N uni1E23 ; G 2089
U 7716 ; WX 837 ; N uni1E24 ; G 2090
U 7717 ; WX 712 ; N uni1E25 ; G 2091
U 7718 ; WX 837 ; N uni1E26 ; G 2092
U 7719 ; WX 712 ; N uni1E27 ; G 2093
U 7720 ; WX 837 ; N uni1E28 ; G 2094
U 7721 ; WX 712 ; N uni1E29 ; G 2095
U 7722 ; WX 837 ; N uni1E2A ; G 2096
U 7723 ; WX 712 ; N uni1E2B ; G 2097
U 7724 ; WX 372 ; N uni1E2C ; G 2098
U 7725 ; WX 343 ; N uni1E2D ; G 2099
U 7726 ; WX 372 ; N uni1E2E ; G 2100
U 7727 ; WX 343 ; N uni1E2F ; G 2101
U 7728 ; WX 775 ; N uni1E30 ; G 2102
U 7729 ; WX 665 ; N uni1E31 ; G 2103
U 7730 ; WX 775 ; N uni1E32 ; G 2104
U 7731 ; WX 665 ; N uni1E33 ; G 2105
U 7732 ; WX 775 ; N uni1E34 ; G 2106
U 7733 ; WX 665 ; N uni1E35 ; G 2107
U 7734 ; WX 637 ; N uni1E36 ; G 2108
U 7735 ; WX 343 ; N uni1E37 ; G 2109
U 7736 ; WX 637 ; N uni1E38 ; G 2110
U 7737 ; WX 343 ; N uni1E39 ; G 2111
U 7738 ; WX 637 ; N uni1E3A ; G 2112
U 7739 ; WX 343 ; N uni1E3B ; G 2113
U 7740 ; WX 637 ; N uni1E3C ; G 2114
U 7741 ; WX 343 ; N uni1E3D ; G 2115
U 7742 ; WX 995 ; N uni1E3E ; G 2116
U 7743 ; WX 1042 ; N uni1E3F ; G 2117
U 7744 ; WX 995 ; N uni1E40 ; G 2118
U 7745 ; WX 1042 ; N uni1E41 ; G 2119
U 7746 ; WX 995 ; N uni1E42 ; G 2120
U 7747 ; WX 1042 ; N uni1E43 ; G 2121
U 7748 ; WX 837 ; N uni1E44 ; G 2122
U 7749 ; WX 712 ; N uni1E45 ; G 2123
U 7750 ; WX 837 ; N uni1E46 ; G 2124
U 7751 ; WX 712 ; N uni1E47 ; G 2125
U 7752 ; WX 837 ; N uni1E48 ; G 2126
U 7753 ; WX 712 ; N uni1E49 ; G 2127
U 7754 ; WX 837 ; N uni1E4A ; G 2128
U 7755 ; WX 712 ; N uni1E4B ; G 2129
U 7756 ; WX 850 ; N uni1E4C ; G 2130
U 7757 ; WX 687 ; N uni1E4D ; G 2131
U 7758 ; WX 850 ; N uni1E4E ; G 2132
U 7759 ; WX 687 ; N uni1E4F ; G 2133
U 7760 ; WX 850 ; N uni1E50 ; G 2134
U 7761 ; WX 687 ; N uni1E51 ; G 2135
U 7762 ; WX 850 ; N uni1E52 ; G 2136
U 7763 ; WX 687 ; N uni1E53 ; G 2137
U 7764 ; WX 733 ; N uni1E54 ; G 2138
U 7765 ; WX 716 ; N uni1E55 ; G 2139
U 7766 ; WX 733 ; N uni1E56 ; G 2140
U 7767 ; WX 716 ; N uni1E57 ; G 2141
U 7768 ; WX 770 ; N uni1E58 ; G 2142
U 7769 ; WX 493 ; N uni1E59 ; G 2143
U 7770 ; WX 770 ; N uni1E5A ; G 2144
U 7771 ; WX 493 ; N uni1E5B ; G 2145
U 7772 ; WX 770 ; N uni1E5C ; G 2146
U 7773 ; WX 493 ; N uni1E5D ; G 2147
U 7774 ; WX 770 ; N uni1E5E ; G 2148
U 7775 ; WX 493 ; N uni1E5F ; G 2149
U 7776 ; WX 720 ; N uni1E60 ; G 2150
U 7777 ; WX 595 ; N uni1E61 ; G 2151
U 7778 ; WX 720 ; N uni1E62 ; G 2152
U 7779 ; WX 595 ; N uni1E63 ; G 2153
U 7780 ; WX 720 ; N uni1E64 ; G 2154
U 7781 ; WX 595 ; N uni1E65 ; G 2155
U 7782 ; WX 720 ; N uni1E66 ; G 2156
U 7783 ; WX 595 ; N uni1E67 ; G 2157
U 7784 ; WX 720 ; N uni1E68 ; G 2158
U 7785 ; WX 595 ; N uni1E69 ; G 2159
U 7786 ; WX 682 ; N uni1E6A ; G 2160
U 7787 ; WX 478 ; N uni1E6B ; G 2161
U 7788 ; WX 682 ; N uni1E6C ; G 2162
U 7789 ; WX 478 ; N uni1E6D ; G 2163
U 7790 ; WX 682 ; N uni1E6E ; G 2164
U 7791 ; WX 478 ; N uni1E6F ; G 2165
U 7792 ; WX 682 ; N uni1E70 ; G 2166
U 7793 ; WX 478 ; N uni1E71 ; G 2167
U 7794 ; WX 812 ; N uni1E72 ; G 2168
U 7795 ; WX 712 ; N uni1E73 ; G 2169
U 7796 ; WX 812 ; N uni1E74 ; G 2170
U 7797 ; WX 712 ; N uni1E75 ; G 2171
U 7798 ; WX 812 ; N uni1E76 ; G 2172
U 7799 ; WX 712 ; N uni1E77 ; G 2173
U 7800 ; WX 812 ; N uni1E78 ; G 2174
U 7801 ; WX 712 ; N uni1E79 ; G 2175
U 7802 ; WX 812 ; N uni1E7A ; G 2176
U 7803 ; WX 712 ; N uni1E7B ; G 2177
U 7804 ; WX 774 ; N uni1E7C ; G 2178
U 7805 ; WX 652 ; N uni1E7D ; G 2179
U 7806 ; WX 774 ; N uni1E7E ; G 2180
U 7807 ; WX 652 ; N uni1E7F ; G 2181
U 7808 ; WX 1103 ; N Wgrave ; G 2182
U 7809 ; WX 924 ; N wgrave ; G 2183
U 7810 ; WX 1103 ; N Wacute ; G 2184
U 7811 ; WX 924 ; N wacute ; G 2185
U 7812 ; WX 1103 ; N Wdieresis ; G 2186
U 7813 ; WX 924 ; N wdieresis ; G 2187
U 7814 ; WX 1103 ; N uni1E86 ; G 2188
U 7815 ; WX 924 ; N uni1E87 ; G 2189
U 7816 ; WX 1103 ; N uni1E88 ; G 2190
U 7817 ; WX 924 ; N uni1E89 ; G 2191
U 7818 ; WX 771 ; N uni1E8A ; G 2192
U 7819 ; WX 645 ; N uni1E8B ; G 2193
U 7820 ; WX 771 ; N uni1E8C ; G 2194
U 7821 ; WX 645 ; N uni1E8D ; G 2195
U 7822 ; WX 724 ; N uni1E8E ; G 2196
U 7823 ; WX 652 ; N uni1E8F ; G 2197
U 7824 ; WX 725 ; N uni1E90 ; G 2198
U 7825 ; WX 582 ; N uni1E91 ; G 2199
U 7826 ; WX 725 ; N uni1E92 ; G 2200
U 7827 ; WX 582 ; N uni1E93 ; G 2201
U 7828 ; WX 725 ; N uni1E94 ; G 2202
U 7829 ; WX 582 ; N uni1E95 ; G 2203
U 7830 ; WX 712 ; N uni1E96 ; G 2204
U 7831 ; WX 478 ; N uni1E97 ; G 2205
U 7832 ; WX 924 ; N uni1E98 ; G 2206
U 7833 ; WX 652 ; N uni1E99 ; G 2207
U 7834 ; WX 675 ; N uni1E9A ; G 2208
U 7835 ; WX 435 ; N uni1E9B ; G 2209
U 7836 ; WX 435 ; N uni1E9C ; G 2210
U 7837 ; WX 435 ; N uni1E9D ; G 2211
U 7838 ; WX 896 ; N uni1E9E ; G 2212
U 7839 ; WX 687 ; N uni1E9F ; G 2213
U 7840 ; WX 774 ; N uni1EA0 ; G 2214
U 7841 ; WX 675 ; N uni1EA1 ; G 2215
U 7842 ; WX 774 ; N uni1EA2 ; G 2216
U 7843 ; WX 675 ; N uni1EA3 ; G 2217
U 7844 ; WX 774 ; N uni1EA4 ; G 2218
U 7845 ; WX 675 ; N uni1EA5 ; G 2219
U 7846 ; WX 774 ; N uni1EA6 ; G 2220
U 7847 ; WX 675 ; N uni1EA7 ; G 2221
U 7848 ; WX 774 ; N uni1EA8 ; G 2222
U 7849 ; WX 675 ; N uni1EA9 ; G 2223
U 7850 ; WX 774 ; N uni1EAA ; G 2224
U 7851 ; WX 675 ; N uni1EAB ; G 2225
U 7852 ; WX 774 ; N uni1EAC ; G 2226
U 7853 ; WX 675 ; N uni1EAD ; G 2227
U 7854 ; WX 774 ; N uni1EAE ; G 2228
U 7855 ; WX 675 ; N uni1EAF ; G 2229
U 7856 ; WX 774 ; N uni1EB0 ; G 2230
U 7857 ; WX 675 ; N uni1EB1 ; G 2231
U 7858 ; WX 774 ; N uni1EB2 ; G 2232
U 7859 ; WX 675 ; N uni1EB3 ; G 2233
U 7860 ; WX 774 ; N uni1EB4 ; G 2234
U 7861 ; WX 675 ; N uni1EB5 ; G 2235
U 7862 ; WX 774 ; N uni1EB6 ; G 2236
U 7863 ; WX 675 ; N uni1EB7 ; G 2237
U 7864 ; WX 683 ; N uni1EB8 ; G 2238
U 7865 ; WX 678 ; N uni1EB9 ; G 2239
U 7866 ; WX 683 ; N uni1EBA ; G 2240
U 7867 ; WX 678 ; N uni1EBB ; G 2241
U 7868 ; WX 683 ; N uni1EBC ; G 2242
U 7869 ; WX 678 ; N uni1EBD ; G 2243
U 7870 ; WX 683 ; N uni1EBE ; G 2244
U 7871 ; WX 678 ; N uni1EBF ; G 2245
U 7872 ; WX 683 ; N uni1EC0 ; G 2246
U 7873 ; WX 678 ; N uni1EC1 ; G 2247
U 7874 ; WX 683 ; N uni1EC2 ; G 2248
U 7875 ; WX 678 ; N uni1EC3 ; G 2249
U 7876 ; WX 683 ; N uni1EC4 ; G 2250
U 7877 ; WX 678 ; N uni1EC5 ; G 2251
U 7878 ; WX 683 ; N uni1EC6 ; G 2252
U 7879 ; WX 678 ; N uni1EC7 ; G 2253
U 7880 ; WX 372 ; N uni1EC8 ; G 2254
U 7881 ; WX 343 ; N uni1EC9 ; G 2255
U 7882 ; WX 372 ; N uni1ECA ; G 2256
U 7883 ; WX 343 ; N uni1ECB ; G 2257
U 7884 ; WX 850 ; N uni1ECC ; G 2258
U 7885 ; WX 687 ; N uni1ECD ; G 2259
U 7886 ; WX 850 ; N uni1ECE ; G 2260
U 7887 ; WX 687 ; N uni1ECF ; G 2261
U 7888 ; WX 850 ; N uni1ED0 ; G 2262
U 7889 ; WX 687 ; N uni1ED1 ; G 2263
U 7890 ; WX 850 ; N uni1ED2 ; G 2264
U 7891 ; WX 687 ; N uni1ED3 ; G 2265
U 7892 ; WX 850 ; N uni1ED4 ; G 2266
U 7893 ; WX 687 ; N uni1ED5 ; G 2267
U 7894 ; WX 850 ; N uni1ED6 ; G 2268
U 7895 ; WX 687 ; N uni1ED7 ; G 2269
U 7896 ; WX 850 ; N uni1ED8 ; G 2270
U 7897 ; WX 687 ; N uni1ED9 ; G 2271
U 7898 ; WX 850 ; N uni1EDA ; G 2272
U 7899 ; WX 687 ; N uni1EDB ; G 2273
U 7900 ; WX 850 ; N uni1EDC ; G 2274
U 7901 ; WX 687 ; N uni1EDD ; G 2275
U 7902 ; WX 850 ; N uni1EDE ; G 2276
U 7903 ; WX 687 ; N uni1EDF ; G 2277
U 7904 ; WX 850 ; N uni1EE0 ; G 2278
U 7905 ; WX 687 ; N uni1EE1 ; G 2279
U 7906 ; WX 850 ; N uni1EE2 ; G 2280
U 7907 ; WX 687 ; N uni1EE3 ; G 2281
U 7908 ; WX 812 ; N uni1EE4 ; G 2282
U 7909 ; WX 712 ; N uni1EE5 ; G 2283
U 7910 ; WX 812 ; N uni1EE6 ; G 2284
U 7911 ; WX 712 ; N uni1EE7 ; G 2285
U 7912 ; WX 812 ; N uni1EE8 ; G 2286
U 7913 ; WX 712 ; N uni1EE9 ; G 2287
U 7914 ; WX 812 ; N uni1EEA ; G 2288
U 7915 ; WX 712 ; N uni1EEB ; G 2289
U 7916 ; WX 812 ; N uni1EEC ; G 2290
U 7917 ; WX 712 ; N uni1EED ; G 2291
U 7918 ; WX 812 ; N uni1EEE ; G 2292
U 7919 ; WX 712 ; N uni1EEF ; G 2293
U 7920 ; WX 812 ; N uni1EF0 ; G 2294
U 7921 ; WX 712 ; N uni1EF1 ; G 2295
U 7922 ; WX 724 ; N Ygrave ; G 2296
U 7923 ; WX 652 ; N ygrave ; G 2297
U 7924 ; WX 724 ; N uni1EF4 ; G 2298
U 7925 ; WX 652 ; N uni1EF5 ; G 2299
U 7926 ; WX 724 ; N uni1EF6 ; G 2300
U 7927 ; WX 652 ; N uni1EF7 ; G 2301
U 7928 ; WX 724 ; N uni1EF8 ; G 2302
U 7929 ; WX 652 ; N uni1EF9 ; G 2303
U 7930 ; WX 953 ; N uni1EFA ; G 2304
U 7931 ; WX 644 ; N uni1EFB ; G 2305
U 7936 ; WX 687 ; N uni1F00 ; G 2306
U 7937 ; WX 687 ; N uni1F01 ; G 2307
U 7938 ; WX 687 ; N uni1F02 ; G 2308
U 7939 ; WX 687 ; N uni1F03 ; G 2309
U 7940 ; WX 687 ; N uni1F04 ; G 2310
U 7941 ; WX 687 ; N uni1F05 ; G 2311
U 7942 ; WX 687 ; N uni1F06 ; G 2312
U 7943 ; WX 687 ; N uni1F07 ; G 2313
U 7944 ; WX 774 ; N uni1F08 ; G 2314
U 7945 ; WX 774 ; N uni1F09 ; G 2315
U 7946 ; WX 1041 ; N uni1F0A ; G 2316
U 7947 ; WX 1043 ; N uni1F0B ; G 2317
U 7948 ; WX 935 ; N uni1F0C ; G 2318
U 7949 ; WX 963 ; N uni1F0D ; G 2319
U 7950 ; WX 835 ; N uni1F0E ; G 2320
U 7951 ; WX 859 ; N uni1F0F ; G 2321
U 7952 ; WX 557 ; N uni1F10 ; G 2322
U 7953 ; WX 557 ; N uni1F11 ; G 2323
U 7954 ; WX 557 ; N uni1F12 ; G 2324
U 7955 ; WX 557 ; N uni1F13 ; G 2325
U 7956 ; WX 557 ; N uni1F14 ; G 2326
U 7957 ; WX 557 ; N uni1F15 ; G 2327
U 7960 ; WX 792 ; N uni1F18 ; G 2328
U 7961 ; WX 794 ; N uni1F19 ; G 2329
U 7962 ; WX 1100 ; N uni1F1A ; G 2330
U 7963 ; WX 1096 ; N uni1F1B ; G 2331
U 7964 ; WX 1023 ; N uni1F1C ; G 2332
U 7965 ; WX 1052 ; N uni1F1D ; G 2333
U 7968 ; WX 712 ; N uni1F20 ; G 2334
U 7969 ; WX 712 ; N uni1F21 ; G 2335
U 7970 ; WX 712 ; N uni1F22 ; G 2336
U 7971 ; WX 712 ; N uni1F23 ; G 2337
U 7972 ; WX 712 ; N uni1F24 ; G 2338
U 7973 ; WX 712 ; N uni1F25 ; G 2339
U 7974 ; WX 712 ; N uni1F26 ; G 2340
U 7975 ; WX 712 ; N uni1F27 ; G 2341
U 7976 ; WX 945 ; N uni1F28 ; G 2342
U 7977 ; WX 951 ; N uni1F29 ; G 2343
U 7978 ; WX 1250 ; N uni1F2A ; G 2344
U 7979 ; WX 1250 ; N uni1F2B ; G 2345
U 7980 ; WX 1180 ; N uni1F2C ; G 2346
U 7981 ; WX 1206 ; N uni1F2D ; G 2347
U 7982 ; WX 1054 ; N uni1F2E ; G 2348
U 7983 ; WX 1063 ; N uni1F2F ; G 2349
U 7984 ; WX 390 ; N uni1F30 ; G 2350
U 7985 ; WX 390 ; N uni1F31 ; G 2351
U 7986 ; WX 390 ; N uni1F32 ; G 2352
U 7987 ; WX 390 ; N uni1F33 ; G 2353
U 7988 ; WX 390 ; N uni1F34 ; G 2354
U 7989 ; WX 390 ; N uni1F35 ; G 2355
U 7990 ; WX 390 ; N uni1F36 ; G 2356
U 7991 ; WX 390 ; N uni1F37 ; G 2357
U 7992 ; WX 483 ; N uni1F38 ; G 2358
U 7993 ; WX 489 ; N uni1F39 ; G 2359
U 7994 ; WX 777 ; N uni1F3A ; G 2360
U 7995 ; WX 785 ; N uni1F3B ; G 2361
U 7996 ; WX 712 ; N uni1F3C ; G 2362
U 7997 ; WX 738 ; N uni1F3D ; G 2363
U 7998 ; WX 604 ; N uni1F3E ; G 2364
U 7999 ; WX 604 ; N uni1F3F ; G 2365
U 8000 ; WX 687 ; N uni1F40 ; G 2366
U 8001 ; WX 687 ; N uni1F41 ; G 2367
U 8002 ; WX 687 ; N uni1F42 ; G 2368
U 8003 ; WX 687 ; N uni1F43 ; G 2369
U 8004 ; WX 687 ; N uni1F44 ; G 2370
U 8005 ; WX 687 ; N uni1F45 ; G 2371
U 8008 ; WX 892 ; N uni1F48 ; G 2372
U 8009 ; WX 933 ; N uni1F49 ; G 2373
U 8010 ; WX 1221 ; N uni1F4A ; G 2374
U 8011 ; WX 1224 ; N uni1F4B ; G 2375
U 8012 ; WX 1053 ; N uni1F4C ; G 2376
U 8013 ; WX 1082 ; N uni1F4D ; G 2377
U 8016 ; WX 675 ; N uni1F50 ; G 2378
U 8017 ; WX 675 ; N uni1F51 ; G 2379
U 8018 ; WX 675 ; N uni1F52 ; G 2380
U 8019 ; WX 675 ; N uni1F53 ; G 2381
U 8020 ; WX 675 ; N uni1F54 ; G 2382
U 8021 ; WX 675 ; N uni1F55 ; G 2383
U 8022 ; WX 675 ; N uni1F56 ; G 2384
U 8023 ; WX 675 ; N uni1F57 ; G 2385
U 8025 ; WX 930 ; N uni1F59 ; G 2386
U 8027 ; WX 1184 ; N uni1F5B ; G 2387
U 8029 ; WX 1199 ; N uni1F5D ; G 2388
U 8031 ; WX 1049 ; N uni1F5F ; G 2389
U 8032 ; WX 869 ; N uni1F60 ; G 2390
U 8033 ; WX 869 ; N uni1F61 ; G 2391
U 8034 ; WX 869 ; N uni1F62 ; G 2392
U 8035 ; WX 869 ; N uni1F63 ; G 2393
U 8036 ; WX 869 ; N uni1F64 ; G 2394
U 8037 ; WX 869 ; N uni1F65 ; G 2395
U 8038 ; WX 869 ; N uni1F66 ; G 2396
U 8039 ; WX 869 ; N uni1F67 ; G 2397
U 8040 ; WX 909 ; N uni1F68 ; G 2398
U 8041 ; WX 958 ; N uni1F69 ; G 2399
U 8042 ; WX 1246 ; N uni1F6A ; G 2400
U 8043 ; WX 1251 ; N uni1F6B ; G 2401
U 8044 ; WX 1076 ; N uni1F6C ; G 2402
U 8045 ; WX 1105 ; N uni1F6D ; G 2403
U 8046 ; WX 1028 ; N uni1F6E ; G 2404
U 8047 ; WX 1076 ; N uni1F6F ; G 2405
U 8048 ; WX 687 ; N uni1F70 ; G 2406
U 8049 ; WX 687 ; N uni1F71 ; G 2407
U 8050 ; WX 557 ; N uni1F72 ; G 2408
U 8051 ; WX 557 ; N uni1F73 ; G 2409
U 8052 ; WX 712 ; N uni1F74 ; G 2410
U 8053 ; WX 712 ; N uni1F75 ; G 2411
U 8054 ; WX 390 ; N uni1F76 ; G 2412
U 8055 ; WX 390 ; N uni1F77 ; G 2413
U 8056 ; WX 687 ; N uni1F78 ; G 2414
U 8057 ; WX 687 ; N uni1F79 ; G 2415
U 8058 ; WX 675 ; N uni1F7A ; G 2416
U 8059 ; WX 675 ; N uni1F7B ; G 2417
U 8060 ; WX 869 ; N uni1F7C ; G 2418
U 8061 ; WX 869 ; N uni1F7D ; G 2419
U 8064 ; WX 687 ; N uni1F80 ; G 2420
U 8065 ; WX 687 ; N uni1F81 ; G 2421
U 8066 ; WX 687 ; N uni1F82 ; G 2422
U 8067 ; WX 687 ; N uni1F83 ; G 2423
U 8068 ; WX 687 ; N uni1F84 ; G 2424
U 8069 ; WX 687 ; N uni1F85 ; G 2425
U 8070 ; WX 687 ; N uni1F86 ; G 2426
U 8071 ; WX 687 ; N uni1F87 ; G 2427
U 8072 ; WX 774 ; N uni1F88 ; G 2428
U 8073 ; WX 774 ; N uni1F89 ; G 2429
U 8074 ; WX 1041 ; N uni1F8A ; G 2430
U 8075 ; WX 1043 ; N uni1F8B ; G 2431
U 8076 ; WX 935 ; N uni1F8C ; G 2432
U 8077 ; WX 963 ; N uni1F8D ; G 2433
U 8078 ; WX 835 ; N uni1F8E ; G 2434
U 8079 ; WX 859 ; N uni1F8F ; G 2435
U 8080 ; WX 712 ; N uni1F90 ; G 2436
U 8081 ; WX 712 ; N uni1F91 ; G 2437
U 8082 ; WX 712 ; N uni1F92 ; G 2438
U 8083 ; WX 712 ; N uni1F93 ; G 2439
U 8084 ; WX 712 ; N uni1F94 ; G 2440
U 8085 ; WX 712 ; N uni1F95 ; G 2441
U 8086 ; WX 712 ; N uni1F96 ; G 2442
U 8087 ; WX 712 ; N uni1F97 ; G 2443
U 8088 ; WX 945 ; N uni1F98 ; G 2444
U 8089 ; WX 951 ; N uni1F99 ; G 2445
U 8090 ; WX 1250 ; N uni1F9A ; G 2446
U 8091 ; WX 1250 ; N uni1F9B ; G 2447
U 8092 ; WX 1180 ; N uni1F9C ; G 2448
U 8093 ; WX 1206 ; N uni1F9D ; G 2449
U 8094 ; WX 1054 ; N uni1F9E ; G 2450
U 8095 ; WX 1063 ; N uni1F9F ; G 2451
U 8096 ; WX 869 ; N uni1FA0 ; G 2452
U 8097 ; WX 869 ; N uni1FA1 ; G 2453
U 8098 ; WX 869 ; N uni1FA2 ; G 2454
U 8099 ; WX 869 ; N uni1FA3 ; G 2455
U 8100 ; WX 869 ; N uni1FA4 ; G 2456
U 8101 ; WX 869 ; N uni1FA5 ; G 2457
U 8102 ; WX 869 ; N uni1FA6 ; G 2458
U 8103 ; WX 869 ; N uni1FA7 ; G 2459
U 8104 ; WX 909 ; N uni1FA8 ; G 2460
U 8105 ; WX 958 ; N uni1FA9 ; G 2461
U 8106 ; WX 1246 ; N uni1FAA ; G 2462
U 8107 ; WX 1251 ; N uni1FAB ; G 2463
U 8108 ; WX 1076 ; N uni1FAC ; G 2464
U 8109 ; WX 1105 ; N uni1FAD ; G 2465
U 8110 ; WX 1028 ; N uni1FAE ; G 2466
U 8111 ; WX 1076 ; N uni1FAF ; G 2467
U 8112 ; WX 687 ; N uni1FB0 ; G 2468
U 8113 ; WX 687 ; N uni1FB1 ; G 2469
U 8114 ; WX 687 ; N uni1FB2 ; G 2470
U 8115 ; WX 687 ; N uni1FB3 ; G 2471
U 8116 ; WX 687 ; N uni1FB4 ; G 2472
U 8118 ; WX 687 ; N uni1FB6 ; G 2473
U 8119 ; WX 687 ; N uni1FB7 ; G 2474
U 8120 ; WX 774 ; N uni1FB8 ; G 2475
U 8121 ; WX 774 ; N uni1FB9 ; G 2476
U 8122 ; WX 876 ; N uni1FBA ; G 2477
U 8123 ; WX 797 ; N uni1FBB ; G 2478
U 8124 ; WX 774 ; N uni1FBC ; G 2479
U 8125 ; WX 500 ; N uni1FBD ; G 2480
U 8126 ; WX 500 ; N uni1FBE ; G 2481
U 8127 ; WX 500 ; N uni1FBF ; G 2482
U 8128 ; WX 500 ; N uni1FC0 ; G 2483
U 8129 ; WX 500 ; N uni1FC1 ; G 2484
U 8130 ; WX 712 ; N uni1FC2 ; G 2485
U 8131 ; WX 712 ; N uni1FC3 ; G 2486
U 8132 ; WX 712 ; N uni1FC4 ; G 2487
U 8134 ; WX 712 ; N uni1FC6 ; G 2488
U 8135 ; WX 712 ; N uni1FC7 ; G 2489
U 8136 ; WX 929 ; N uni1FC8 ; G 2490
U 8137 ; WX 846 ; N uni1FC9 ; G 2491
U 8138 ; WX 1080 ; N uni1FCA ; G 2492
U 8139 ; WX 1009 ; N uni1FCB ; G 2493
U 8140 ; WX 837 ; N uni1FCC ; G 2494
U 8141 ; WX 500 ; N uni1FCD ; G 2495
U 8142 ; WX 500 ; N uni1FCE ; G 2496
U 8143 ; WX 500 ; N uni1FCF ; G 2497
U 8144 ; WX 390 ; N uni1FD0 ; G 2498
U 8145 ; WX 390 ; N uni1FD1 ; G 2499
U 8146 ; WX 390 ; N uni1FD2 ; G 2500
U 8147 ; WX 390 ; N uni1FD3 ; G 2501
U 8150 ; WX 390 ; N uni1FD6 ; G 2502
U 8151 ; WX 390 ; N uni1FD7 ; G 2503
U 8152 ; WX 372 ; N uni1FD8 ; G 2504
U 8153 ; WX 372 ; N uni1FD9 ; G 2505
U 8154 ; WX 621 ; N uni1FDA ; G 2506
U 8155 ; WX 563 ; N uni1FDB ; G 2507
U 8157 ; WX 500 ; N uni1FDD ; G 2508
U 8158 ; WX 500 ; N uni1FDE ; G 2509
U 8159 ; WX 500 ; N uni1FDF ; G 2510
U 8160 ; WX 675 ; N uni1FE0 ; G 2511
U 8161 ; WX 675 ; N uni1FE1 ; G 2512
U 8162 ; WX 675 ; N uni1FE2 ; G 2513
U 8163 ; WX 675 ; N uni1FE3 ; G 2514
U 8164 ; WX 716 ; N uni1FE4 ; G 2515
U 8165 ; WX 716 ; N uni1FE5 ; G 2516
U 8166 ; WX 675 ; N uni1FE6 ; G 2517
U 8167 ; WX 675 ; N uni1FE7 ; G 2518
U 8168 ; WX 724 ; N uni1FE8 ; G 2519
U 8169 ; WX 724 ; N uni1FE9 ; G 2520
U 8170 ; WX 1020 ; N uni1FEA ; G 2521
U 8171 ; WX 980 ; N uni1FEB ; G 2522
U 8172 ; WX 838 ; N uni1FEC ; G 2523
U 8173 ; WX 500 ; N uni1FED ; G 2524
U 8174 ; WX 500 ; N uni1FEE ; G 2525
U 8175 ; WX 500 ; N uni1FEF ; G 2526
U 8178 ; WX 869 ; N uni1FF2 ; G 2527
U 8179 ; WX 869 ; N uni1FF3 ; G 2528
U 8180 ; WX 869 ; N uni1FF4 ; G 2529
U 8182 ; WX 869 ; N uni1FF6 ; G 2530
U 8183 ; WX 869 ; N uni1FF7 ; G 2531
U 8184 ; WX 1065 ; N uni1FF8 ; G 2532
U 8185 ; WX 891 ; N uni1FF9 ; G 2533
U 8186 ; WX 1084 ; N uni1FFA ; G 2534
U 8187 ; WX 894 ; N uni1FFB ; G 2535
U 8188 ; WX 850 ; N uni1FFC ; G 2536
U 8189 ; WX 500 ; N uni1FFD ; G 2537
U 8190 ; WX 500 ; N uni1FFE ; G 2538
U 8192 ; WX 500 ; N uni2000 ; G 2539
U 8193 ; WX 1000 ; N uni2001 ; G 2540
U 8194 ; WX 500 ; N uni2002 ; G 2541
U 8195 ; WX 1000 ; N uni2003 ; G 2542
U 8196 ; WX 330 ; N uni2004 ; G 2543
U 8197 ; WX 250 ; N uni2005 ; G 2544
U 8198 ; WX 167 ; N uni2006 ; G 2545
U 8199 ; WX 696 ; N uni2007 ; G 2546
U 8200 ; WX 380 ; N uni2008 ; G 2547
U 8201 ; WX 200 ; N uni2009 ; G 2548
U 8202 ; WX 100 ; N uni200A ; G 2549
U 8203 ; WX 0 ; N uni200B ; G 2550
U 8204 ; WX 0 ; N uni200C ; G 2551
U 8205 ; WX 0 ; N uni200D ; G 2552
U 8206 ; WX 0 ; N uni200E ; G 2553
U 8207 ; WX 0 ; N uni200F ; G 2554
U 8208 ; WX 415 ; N uni2010 ; G 2555
U 8209 ; WX 415 ; N uni2011 ; G 2556
U 8210 ; WX 696 ; N figuredash ; G 2557
U 8211 ; WX 500 ; N endash ; G 2558
U 8212 ; WX 1000 ; N emdash ; G 2559
U 8213 ; WX 1000 ; N uni2015 ; G 2560
U 8214 ; WX 500 ; N uni2016 ; G 2561
U 8215 ; WX 500 ; N underscoredbl ; G 2562
U 8216 ; WX 380 ; N quoteleft ; G 2563
U 8217 ; WX 380 ; N quoteright ; G 2564
U 8218 ; WX 380 ; N quotesinglbase ; G 2565
U 8219 ; WX 380 ; N quotereversed ; G 2566
U 8220 ; WX 644 ; N quotedblleft ; G 2567
U 8221 ; WX 644 ; N quotedblright ; G 2568
U 8222 ; WX 644 ; N quotedblbase ; G 2569
U 8223 ; WX 657 ; N uni201F ; G 2570
U 8224 ; WX 500 ; N dagger ; G 2571
U 8225 ; WX 500 ; N daggerdbl ; G 2572
U 8226 ; WX 639 ; N bullet ; G 2573
U 8227 ; WX 639 ; N uni2023 ; G 2574
U 8228 ; WX 380 ; N onedotenleader ; G 2575
U 8229 ; WX 685 ; N twodotenleader ; G 2576
U 8230 ; WX 1000 ; N ellipsis ; G 2577
U 8231 ; WX 348 ; N uni2027 ; G 2578
U 8232 ; WX 0 ; N uni2028 ; G 2579
U 8233 ; WX 0 ; N uni2029 ; G 2580
U 8234 ; WX 0 ; N uni202A ; G 2581
U 8235 ; WX 0 ; N uni202B ; G 2582
U 8236 ; WX 0 ; N uni202C ; G 2583
U 8237 ; WX 0 ; N uni202D ; G 2584
U 8238 ; WX 0 ; N uni202E ; G 2585
U 8239 ; WX 200 ; N uni202F ; G 2586
U 8240 ; WX 1454 ; N perthousand ; G 2587
U 8241 ; WX 1908 ; N uni2031 ; G 2588
U 8242 ; WX 264 ; N minute ; G 2589
U 8243 ; WX 447 ; N second ; G 2590
U 8244 ; WX 630 ; N uni2034 ; G 2591
U 8245 ; WX 264 ; N uni2035 ; G 2592
U 8246 ; WX 447 ; N uni2036 ; G 2593
U 8247 ; WX 630 ; N uni2037 ; G 2594
U 8248 ; WX 733 ; N uni2038 ; G 2595
U 8249 ; WX 412 ; N guilsinglleft ; G 2596
U 8250 ; WX 412 ; N guilsinglright ; G 2597
U 8251 ; WX 972 ; N uni203B ; G 2598
U 8252 ; WX 627 ; N exclamdbl ; G 2599
U 8253 ; WX 580 ; N uni203D ; G 2600
U 8254 ; WX 500 ; N uni203E ; G 2601
U 8255 ; WX 828 ; N uni203F ; G 2602
U 8256 ; WX 828 ; N uni2040 ; G 2603
U 8257 ; WX 329 ; N uni2041 ; G 2604
U 8258 ; WX 1023 ; N uni2042 ; G 2605
U 8259 ; WX 500 ; N uni2043 ; G 2606
U 8260 ; WX 167 ; N fraction ; G 2607
U 8261 ; WX 457 ; N uni2045 ; G 2608
U 8262 ; WX 457 ; N uni2046 ; G 2609
U 8263 ; WX 1030 ; N uni2047 ; G 2610
U 8264 ; WX 829 ; N uni2048 ; G 2611
U 8265 ; WX 829 ; N uni2049 ; G 2612
U 8266 ; WX 513 ; N uni204A ; G 2613
U 8267 ; WX 687 ; N uni204B ; G 2614
U 8268 ; WX 500 ; N uni204C ; G 2615
U 8269 ; WX 500 ; N uni204D ; G 2616
U 8270 ; WX 523 ; N uni204E ; G 2617
U 8271 ; WX 400 ; N uni204F ; G 2618
U 8272 ; WX 828 ; N uni2050 ; G 2619
U 8273 ; WX 523 ; N uni2051 ; G 2620
U 8274 ; WX 556 ; N uni2052 ; G 2621
U 8275 ; WX 838 ; N uni2053 ; G 2622
U 8276 ; WX 828 ; N uni2054 ; G 2623
U 8277 ; WX 838 ; N uni2055 ; G 2624
U 8278 ; WX 684 ; N uni2056 ; G 2625
U 8279 ; WX 813 ; N uni2057 ; G 2626
U 8280 ; WX 838 ; N uni2058 ; G 2627
U 8281 ; WX 838 ; N uni2059 ; G 2628
U 8282 ; WX 380 ; N uni205A ; G 2629
U 8283 ; WX 872 ; N uni205B ; G 2630
U 8284 ; WX 838 ; N uni205C ; G 2631
U 8285 ; WX 380 ; N uni205D ; G 2632
U 8286 ; WX 380 ; N uni205E ; G 2633
U 8287 ; WX 222 ; N uni205F ; G 2634
U 8288 ; WX 0 ; N uni2060 ; G 2635
U 8289 ; WX 0 ; N uni2061 ; G 2636
U 8290 ; WX 0 ; N uni2062 ; G 2637
U 8291 ; WX 0 ; N uni2063 ; G 2638
U 8292 ; WX 0 ; N uni2064 ; G 2639
U 8298 ; WX 0 ; N uni206A ; G 2640
U 8299 ; WX 0 ; N uni206B ; G 2641
U 8300 ; WX 0 ; N uni206C ; G 2642
U 8301 ; WX 0 ; N uni206D ; G 2643
U 8302 ; WX 0 ; N uni206E ; G 2644
U 8303 ; WX 0 ; N uni206F ; G 2645
U 8304 ; WX 438 ; N uni2070 ; G 2646
U 8305 ; WX 219 ; N uni2071 ; G 2647
U 8308 ; WX 438 ; N uni2074 ; G 2648
U 8309 ; WX 438 ; N uni2075 ; G 2649
U 8310 ; WX 438 ; N uni2076 ; G 2650
U 8311 ; WX 438 ; N uni2077 ; G 2651
U 8312 ; WX 438 ; N uni2078 ; G 2652
U 8313 ; WX 438 ; N uni2079 ; G 2653
U 8314 ; WX 528 ; N uni207A ; G 2654
U 8315 ; WX 528 ; N uni207B ; G 2655
U 8316 ; WX 528 ; N uni207C ; G 2656
U 8317 ; WX 288 ; N uni207D ; G 2657
U 8318 ; WX 288 ; N uni207E ; G 2658
U 8319 ; WX 456 ; N uni207F ; G 2659
U 8320 ; WX 438 ; N uni2080 ; G 2660
U 8321 ; WX 438 ; N uni2081 ; G 2661
U 8322 ; WX 438 ; N uni2082 ; G 2662
U 8323 ; WX 438 ; N uni2083 ; G 2663
U 8324 ; WX 438 ; N uni2084 ; G 2664
U 8325 ; WX 438 ; N uni2085 ; G 2665
U 8326 ; WX 438 ; N uni2086 ; G 2666
U 8327 ; WX 438 ; N uni2087 ; G 2667
U 8328 ; WX 438 ; N uni2088 ; G 2668
U 8329 ; WX 438 ; N uni2089 ; G 2669
U 8330 ; WX 528 ; N uni208A ; G 2670
U 8331 ; WX 528 ; N uni208B ; G 2671
U 8332 ; WX 528 ; N uni208C ; G 2672
U 8333 ; WX 288 ; N uni208D ; G 2673
U 8334 ; WX 288 ; N uni208E ; G 2674
U 8336 ; WX 458 ; N uni2090 ; G 2675
U 8337 ; WX 479 ; N uni2091 ; G 2676
U 8338 ; WX 488 ; N uni2092 ; G 2677
U 8339 ; WX 413 ; N uni2093 ; G 2678
U 8340 ; WX 479 ; N uni2094 ; G 2679
U 8341 ; WX 456 ; N uni2095 ; G 2680
U 8342 ; WX 487 ; N uni2096 ; G 2681
U 8343 ; WX 219 ; N uni2097 ; G 2682
U 8344 ; WX 664 ; N uni2098 ; G 2683
U 8345 ; WX 456 ; N uni2099 ; G 2684
U 8346 ; WX 479 ; N uni209A ; G 2685
U 8347 ; WX 381 ; N uni209B ; G 2686
U 8348 ; WX 388 ; N uni209C ; G 2687
U 8352 ; WX 929 ; N uni20A0 ; G 2688
U 8353 ; WX 696 ; N colonmonetary ; G 2689
U 8354 ; WX 696 ; N uni20A2 ; G 2690
U 8355 ; WX 696 ; N franc ; G 2691
U 8356 ; WX 696 ; N lira ; G 2692
U 8357 ; WX 1042 ; N uni20A5 ; G 2693
U 8358 ; WX 696 ; N uni20A6 ; G 2694
U 8359 ; WX 1488 ; N peseta ; G 2695
U 8360 ; WX 1205 ; N uni20A8 ; G 2696
U 8361 ; WX 1103 ; N uni20A9 ; G 2697
U 8362 ; WX 854 ; N uni20AA ; G 2698
U 8363 ; WX 696 ; N dong ; G 2699
U 8364 ; WX 696 ; N Euro ; G 2700
U 8365 ; WX 696 ; N uni20AD ; G 2701
U 8366 ; WX 696 ; N uni20AE ; G 2702
U 8367 ; WX 1392 ; N uni20AF ; G 2703
U 8368 ; WX 696 ; N uni20B0 ; G 2704
U 8369 ; WX 696 ; N uni20B1 ; G 2705
U 8370 ; WX 696 ; N uni20B2 ; G 2706
U 8371 ; WX 696 ; N uni20B3 ; G 2707
U 8372 ; WX 859 ; N uni20B4 ; G 2708
U 8373 ; WX 696 ; N uni20B5 ; G 2709
U 8376 ; WX 696 ; N uni20B8 ; G 2710
U 8377 ; WX 696 ; N uni20B9 ; G 2711
U 8378 ; WX 696 ; N uni20BA ; G 2712
U 8381 ; WX 696 ; N uni20BD ; G 2713
U 8400 ; WX 0 ; N uni20D0 ; G 2714
U 8401 ; WX 0 ; N uni20D1 ; G 2715
U 8406 ; WX 0 ; N uni20D6 ; G 2716
U 8407 ; WX 0 ; N uni20D7 ; G 2717
U 8411 ; WX 0 ; N uni20DB ; G 2718
U 8412 ; WX 0 ; N uni20DC ; G 2719
U 8417 ; WX 0 ; N uni20E1 ; G 2720
U 8448 ; WX 1106 ; N uni2100 ; G 2721
U 8449 ; WX 1106 ; N uni2101 ; G 2722
U 8450 ; WX 734 ; N uni2102 ; G 2723
U 8451 ; WX 1211 ; N uni2103 ; G 2724
U 8452 ; WX 896 ; N uni2104 ; G 2725
U 8453 ; WX 1114 ; N uni2105 ; G 2726
U 8454 ; WX 1148 ; N uni2106 ; G 2727
U 8455 ; WX 696 ; N uni2107 ; G 2728
U 8456 ; WX 698 ; N uni2108 ; G 2729
U 8457 ; WX 952 ; N uni2109 ; G 2730
U 8459 ; WX 1073 ; N uni210B ; G 2731
U 8460 ; WX 913 ; N uni210C ; G 2732
U 8461 ; WX 888 ; N uni210D ; G 2733
U 8462 ; WX 712 ; N uni210E ; G 2734
U 8463 ; WX 712 ; N uni210F ; G 2735
U 8464 ; WX 597 ; N uni2110 ; G 2736
U 8465 ; WX 697 ; N Ifraktur ; G 2737
U 8466 ; WX 856 ; N uni2112 ; G 2738
U 8467 ; WX 472 ; N uni2113 ; G 2739
U 8468 ; WX 974 ; N uni2114 ; G 2740
U 8469 ; WX 837 ; N uni2115 ; G 2741
U 8470 ; WX 1203 ; N uni2116 ; G 2742
U 8471 ; WX 1000 ; N uni2117 ; G 2743
U 8472 ; WX 697 ; N weierstrass ; G 2744
U 8473 ; WX 750 ; N uni2119 ; G 2745
U 8474 ; WX 850 ; N uni211A ; G 2746
U 8475 ; WX 938 ; N uni211B ; G 2747
U 8476 ; WX 814 ; N Rfraktur ; G 2748
U 8477 ; WX 801 ; N uni211D ; G 2749
U 8478 ; WX 896 ; N prescription ; G 2750
U 8479 ; WX 710 ; N uni211F ; G 2751
U 8480 ; WX 1020 ; N uni2120 ; G 2752
U 8481 ; WX 1239 ; N uni2121 ; G 2753
U 8482 ; WX 1000 ; N trademark ; G 2754
U 8483 ; WX 834 ; N uni2123 ; G 2755
U 8484 ; WX 754 ; N uni2124 ; G 2756
U 8485 ; WX 622 ; N uni2125 ; G 2757
U 8486 ; WX 850 ; N uni2126 ; G 2758
U 8487 ; WX 769 ; N uni2127 ; G 2759
U 8488 ; WX 763 ; N uni2128 ; G 2760
U 8489 ; WX 303 ; N uni2129 ; G 2761
U 8490 ; WX 775 ; N uni212A ; G 2762
U 8491 ; WX 774 ; N uni212B ; G 2763
U 8492 ; WX 928 ; N uni212C ; G 2764
U 8493 ; WX 818 ; N uni212D ; G 2765
U 8494 ; WX 854 ; N estimated ; G 2766
U 8495 ; WX 636 ; N uni212F ; G 2767
U 8496 ; WX 729 ; N uni2130 ; G 2768
U 8497 ; WX 808 ; N uni2131 ; G 2769
U 8498 ; WX 683 ; N uni2132 ; G 2770
U 8499 ; WX 1184 ; N uni2133 ; G 2771
U 8500 ; WX 465 ; N uni2134 ; G 2772
U 8501 ; WX 794 ; N aleph ; G 2773
U 8502 ; WX 731 ; N uni2136 ; G 2774
U 8503 ; WX 494 ; N uni2137 ; G 2775
U 8504 ; WX 684 ; N uni2138 ; G 2776
U 8505 ; WX 380 ; N uni2139 ; G 2777
U 8506 ; WX 945 ; N uni213A ; G 2778
U 8507 ; WX 1370 ; N uni213B ; G 2779
U 8508 ; WX 790 ; N uni213C ; G 2780
U 8509 ; WX 737 ; N uni213D ; G 2781
U 8510 ; WX 654 ; N uni213E ; G 2782
U 8511 ; WX 863 ; N uni213F ; G 2783
U 8512 ; WX 840 ; N uni2140 ; G 2784
U 8513 ; WX 786 ; N uni2141 ; G 2785
U 8514 ; WX 576 ; N uni2142 ; G 2786
U 8515 ; WX 637 ; N uni2143 ; G 2787
U 8516 ; WX 760 ; N uni2144 ; G 2788
U 8517 ; WX 830 ; N uni2145 ; G 2789
U 8518 ; WX 716 ; N uni2146 ; G 2790
U 8519 ; WX 678 ; N uni2147 ; G 2791
U 8520 ; WX 343 ; N uni2148 ; G 2792
U 8521 ; WX 343 ; N uni2149 ; G 2793
U 8523 ; WX 872 ; N uni214B ; G 2794
U 8526 ; WX 547 ; N uni214E ; G 2795
U 8528 ; WX 1035 ; N uni2150 ; G 2796
U 8529 ; WX 1035 ; N uni2151 ; G 2797
U 8530 ; WX 1483 ; N uni2152 ; G 2798
U 8531 ; WX 1035 ; N onethird ; G 2799
U 8532 ; WX 1035 ; N twothirds ; G 2800
U 8533 ; WX 1035 ; N uni2155 ; G 2801
U 8534 ; WX 1035 ; N uni2156 ; G 2802
U 8535 ; WX 1035 ; N uni2157 ; G 2803
U 8536 ; WX 1035 ; N uni2158 ; G 2804
U 8537 ; WX 1035 ; N uni2159 ; G 2805
U 8538 ; WX 1035 ; N uni215A ; G 2806
U 8539 ; WX 1035 ; N oneeighth ; G 2807
U 8540 ; WX 1035 ; N threeeighths ; G 2808
U 8541 ; WX 1035 ; N fiveeighths ; G 2809
U 8542 ; WX 1035 ; N seveneighths ; G 2810
U 8543 ; WX 615 ; N uni215F ; G 2811
U 8544 ; WX 372 ; N uni2160 ; G 2812
U 8545 ; WX 659 ; N uni2161 ; G 2813
U 8546 ; WX 945 ; N uni2162 ; G 2814
U 8547 ; WX 1099 ; N uni2163 ; G 2815
U 8548 ; WX 774 ; N uni2164 ; G 2816
U 8549 ; WX 1099 ; N uni2165 ; G 2817
U 8550 ; WX 1386 ; N uni2166 ; G 2818
U 8551 ; WX 1672 ; N uni2167 ; G 2819
U 8552 ; WX 1121 ; N uni2168 ; G 2820
U 8553 ; WX 771 ; N uni2169 ; G 2821
U 8554 ; WX 1120 ; N uni216A ; G 2822
U 8555 ; WX 1407 ; N uni216B ; G 2823
U 8556 ; WX 637 ; N uni216C ; G 2824
U 8557 ; WX 734 ; N uni216D ; G 2825
U 8558 ; WX 830 ; N uni216E ; G 2826
U 8559 ; WX 995 ; N uni216F ; G 2827
U 8560 ; WX 343 ; N uni2170 ; G 2828
U 8561 ; WX 607 ; N uni2171 ; G 2829
U 8562 ; WX 872 ; N uni2172 ; G 2830
U 8563 ; WX 984 ; N uni2173 ; G 2831
U 8564 ; WX 652 ; N uni2174 ; G 2832
U 8565 ; WX 962 ; N uni2175 ; G 2833
U 8566 ; WX 1227 ; N uni2176 ; G 2834
U 8567 ; WX 1491 ; N uni2177 ; G 2835
U 8568 ; WX 969 ; N uni2178 ; G 2836
U 8569 ; WX 645 ; N uni2179 ; G 2837
U 8570 ; WX 969 ; N uni217A ; G 2838
U 8571 ; WX 1233 ; N uni217B ; G 2839
U 8572 ; WX 343 ; N uni217C ; G 2840
U 8573 ; WX 593 ; N uni217D ; G 2841
U 8574 ; WX 716 ; N uni217E ; G 2842
U 8575 ; WX 1042 ; N uni217F ; G 2843
U 8576 ; WX 1289 ; N uni2180 ; G 2844
U 8577 ; WX 830 ; N uni2181 ; G 2845
U 8578 ; WX 1289 ; N uni2182 ; G 2846
U 8579 ; WX 734 ; N uni2183 ; G 2847
U 8580 ; WX 593 ; N uni2184 ; G 2848
U 8581 ; WX 734 ; N uni2185 ; G 2849
U 8585 ; WX 1035 ; N uni2189 ; G 2850
U 8592 ; WX 838 ; N arrowleft ; G 2851
U 8593 ; WX 838 ; N arrowup ; G 2852
U 8594 ; WX 838 ; N arrowright ; G 2853
U 8595 ; WX 838 ; N arrowdown ; G 2854
U 8596 ; WX 838 ; N arrowboth ; G 2855
U 8597 ; WX 838 ; N arrowupdn ; G 2856
U 8598 ; WX 838 ; N uni2196 ; G 2857
U 8599 ; WX 838 ; N uni2197 ; G 2858
U 8600 ; WX 838 ; N uni2198 ; G 2859
U 8601 ; WX 838 ; N uni2199 ; G 2860
U 8602 ; WX 838 ; N uni219A ; G 2861
U 8603 ; WX 838 ; N uni219B ; G 2862
U 8604 ; WX 838 ; N uni219C ; G 2863
U 8605 ; WX 838 ; N uni219D ; G 2864
U 8606 ; WX 838 ; N uni219E ; G 2865
U 8607 ; WX 838 ; N uni219F ; G 2866
U 8608 ; WX 838 ; N uni21A0 ; G 2867
U 8609 ; WX 838 ; N uni21A1 ; G 2868
U 8610 ; WX 838 ; N uni21A2 ; G 2869
U 8611 ; WX 838 ; N uni21A3 ; G 2870
U 8612 ; WX 838 ; N uni21A4 ; G 2871
U 8613 ; WX 838 ; N uni21A5 ; G 2872
U 8614 ; WX 838 ; N uni21A6 ; G 2873
U 8615 ; WX 838 ; N uni21A7 ; G 2874
U 8616 ; WX 838 ; N arrowupdnbse ; G 2875
U 8617 ; WX 838 ; N uni21A9 ; G 2876
U 8618 ; WX 838 ; N uni21AA ; G 2877
U 8619 ; WX 838 ; N uni21AB ; G 2878
U 8620 ; WX 838 ; N uni21AC ; G 2879
U 8621 ; WX 838 ; N uni21AD ; G 2880
U 8622 ; WX 838 ; N uni21AE ; G 2881
U 8623 ; WX 838 ; N uni21AF ; G 2882
U 8624 ; WX 838 ; N uni21B0 ; G 2883
U 8625 ; WX 838 ; N uni21B1 ; G 2884
U 8626 ; WX 838 ; N uni21B2 ; G 2885
U 8627 ; WX 838 ; N uni21B3 ; G 2886
U 8628 ; WX 838 ; N uni21B4 ; G 2887
U 8629 ; WX 838 ; N carriagereturn ; G 2888
U 8630 ; WX 838 ; N uni21B6 ; G 2889
U 8631 ; WX 838 ; N uni21B7 ; G 2890
U 8632 ; WX 838 ; N uni21B8 ; G 2891
U 8633 ; WX 838 ; N uni21B9 ; G 2892
U 8634 ; WX 838 ; N uni21BA ; G 2893
U 8635 ; WX 838 ; N uni21BB ; G 2894
U 8636 ; WX 838 ; N uni21BC ; G 2895
U 8637 ; WX 838 ; N uni21BD ; G 2896
U 8638 ; WX 838 ; N uni21BE ; G 2897
U 8639 ; WX 838 ; N uni21BF ; G 2898
U 8640 ; WX 838 ; N uni21C0 ; G 2899
U 8641 ; WX 838 ; N uni21C1 ; G 2900
U 8642 ; WX 838 ; N uni21C2 ; G 2901
U 8643 ; WX 838 ; N uni21C3 ; G 2902
U 8644 ; WX 838 ; N uni21C4 ; G 2903
U 8645 ; WX 838 ; N uni21C5 ; G 2904
U 8646 ; WX 838 ; N uni21C6 ; G 2905
U 8647 ; WX 838 ; N uni21C7 ; G 2906
U 8648 ; WX 838 ; N uni21C8 ; G 2907
U 8649 ; WX 838 ; N uni21C9 ; G 2908
U 8650 ; WX 838 ; N uni21CA ; G 2909
U 8651 ; WX 838 ; N uni21CB ; G 2910
U 8652 ; WX 838 ; N uni21CC ; G 2911
U 8653 ; WX 838 ; N uni21CD ; G 2912
U 8654 ; WX 838 ; N uni21CE ; G 2913
U 8655 ; WX 838 ; N uni21CF ; G 2914
U 8656 ; WX 838 ; N arrowdblleft ; G 2915
U 8657 ; WX 838 ; N arrowdblup ; G 2916
U 8658 ; WX 838 ; N arrowdblright ; G 2917
U 8659 ; WX 838 ; N arrowdbldown ; G 2918
U 8660 ; WX 838 ; N arrowdblboth ; G 2919
U 8661 ; WX 838 ; N uni21D5 ; G 2920
U 8662 ; WX 838 ; N uni21D6 ; G 2921
U 8663 ; WX 838 ; N uni21D7 ; G 2922
U 8664 ; WX 838 ; N uni21D8 ; G 2923
U 8665 ; WX 838 ; N uni21D9 ; G 2924
U 8666 ; WX 838 ; N uni21DA ; G 2925
U 8667 ; WX 838 ; N uni21DB ; G 2926
U 8668 ; WX 838 ; N uni21DC ; G 2927
U 8669 ; WX 838 ; N uni21DD ; G 2928
U 8670 ; WX 838 ; N uni21DE ; G 2929
U 8671 ; WX 838 ; N uni21DF ; G 2930
U 8672 ; WX 838 ; N uni21E0 ; G 2931
U 8673 ; WX 838 ; N uni21E1 ; G 2932
U 8674 ; WX 838 ; N uni21E2 ; G 2933
U 8675 ; WX 838 ; N uni21E3 ; G 2934
U 8676 ; WX 838 ; N uni21E4 ; G 2935
U 8677 ; WX 838 ; N uni21E5 ; G 2936
U 8678 ; WX 838 ; N uni21E6 ; G 2937
U 8679 ; WX 838 ; N uni21E7 ; G 2938
U 8680 ; WX 838 ; N uni21E8 ; G 2939
U 8681 ; WX 838 ; N uni21E9 ; G 2940
U 8682 ; WX 838 ; N uni21EA ; G 2941
U 8683 ; WX 838 ; N uni21EB ; G 2942
U 8684 ; WX 838 ; N uni21EC ; G 2943
U 8685 ; WX 838 ; N uni21ED ; G 2944
U 8686 ; WX 838 ; N uni21EE ; G 2945
U 8687 ; WX 838 ; N uni21EF ; G 2946
U 8688 ; WX 838 ; N uni21F0 ; G 2947
U 8689 ; WX 838 ; N uni21F1 ; G 2948
U 8690 ; WX 838 ; N uni21F2 ; G 2949
U 8691 ; WX 838 ; N uni21F3 ; G 2950
U 8692 ; WX 838 ; N uni21F4 ; G 2951
U 8693 ; WX 838 ; N uni21F5 ; G 2952
U 8694 ; WX 838 ; N uni21F6 ; G 2953
U 8695 ; WX 838 ; N uni21F7 ; G 2954
U 8696 ; WX 838 ; N uni21F8 ; G 2955
U 8697 ; WX 838 ; N uni21F9 ; G 2956
U 8698 ; WX 838 ; N uni21FA ; G 2957
U 8699 ; WX 838 ; N uni21FB ; G 2958
U 8700 ; WX 838 ; N uni21FC ; G 2959
U 8701 ; WX 838 ; N uni21FD ; G 2960
U 8702 ; WX 838 ; N uni21FE ; G 2961
U 8703 ; WX 838 ; N uni21FF ; G 2962
U 8704 ; WX 774 ; N universal ; G 2963
U 8705 ; WX 696 ; N uni2201 ; G 2964
U 8706 ; WX 544 ; N partialdiff ; G 2965
U 8707 ; WX 683 ; N existential ; G 2966
U 8708 ; WX 683 ; N uni2204 ; G 2967
U 8709 ; WX 856 ; N emptyset ; G 2968
U 8710 ; WX 697 ; N increment ; G 2969
U 8711 ; WX 697 ; N gradient ; G 2970
U 8712 ; WX 896 ; N element ; G 2971
U 8713 ; WX 896 ; N notelement ; G 2972
U 8714 ; WX 750 ; N uni220A ; G 2973
U 8715 ; WX 896 ; N suchthat ; G 2974
U 8716 ; WX 896 ; N uni220C ; G 2975
U 8717 ; WX 750 ; N uni220D ; G 2976
U 8718 ; WX 636 ; N uni220E ; G 2977
U 8719 ; WX 787 ; N product ; G 2978
U 8720 ; WX 787 ; N uni2210 ; G 2979
U 8721 ; WX 718 ; N summation ; G 2980
U 8722 ; WX 838 ; N minus ; G 2981
U 8723 ; WX 838 ; N uni2213 ; G 2982
U 8724 ; WX 696 ; N uni2214 ; G 2983
U 8725 ; WX 365 ; N uni2215 ; G 2984
U 8726 ; WX 696 ; N uni2216 ; G 2985
U 8727 ; WX 838 ; N asteriskmath ; G 2986
U 8728 ; WX 626 ; N uni2218 ; G 2987
U 8729 ; WX 380 ; N uni2219 ; G 2988
U 8730 ; WX 667 ; N radical ; G 2989
U 8731 ; WX 667 ; N uni221B ; G 2990
U 8732 ; WX 667 ; N uni221C ; G 2991
U 8733 ; WX 712 ; N proportional ; G 2992
U 8734 ; WX 833 ; N infinity ; G 2993
U 8735 ; WX 838 ; N orthogonal ; G 2994
U 8736 ; WX 896 ; N angle ; G 2995
U 8737 ; WX 896 ; N uni2221 ; G 2996
U 8738 ; WX 838 ; N uni2222 ; G 2997
U 8739 ; WX 500 ; N uni2223 ; G 2998
U 8740 ; WX 500 ; N uni2224 ; G 2999
U 8741 ; WX 500 ; N uni2225 ; G 3000
U 8742 ; WX 500 ; N uni2226 ; G 3001
U 8743 ; WX 812 ; N logicaland ; G 3002
U 8744 ; WX 812 ; N logicalor ; G 3003
U 8745 ; WX 812 ; N intersection ; G 3004
U 8746 ; WX 812 ; N union ; G 3005
U 8747 ; WX 610 ; N integral ; G 3006
U 8748 ; WX 929 ; N uni222C ; G 3007
U 8749 ; WX 1295 ; N uni222D ; G 3008
U 8750 ; WX 563 ; N uni222E ; G 3009
U 8751 ; WX 977 ; N uni222F ; G 3010
U 8752 ; WX 1313 ; N uni2230 ; G 3011
U 8753 ; WX 563 ; N uni2231 ; G 3012
U 8754 ; WX 563 ; N uni2232 ; G 3013
U 8755 ; WX 563 ; N uni2233 ; G 3014
U 8756 ; WX 696 ; N therefore ; G 3015
U 8757 ; WX 696 ; N uni2235 ; G 3016
U 8758 ; WX 294 ; N uni2236 ; G 3017
U 8759 ; WX 696 ; N uni2237 ; G 3018
U 8760 ; WX 838 ; N uni2238 ; G 3019
U 8761 ; WX 838 ; N uni2239 ; G 3020
U 8762 ; WX 838 ; N uni223A ; G 3021
U 8763 ; WX 838 ; N uni223B ; G 3022
U 8764 ; WX 838 ; N similar ; G 3023
U 8765 ; WX 838 ; N uni223D ; G 3024
U 8766 ; WX 838 ; N uni223E ; G 3025
U 8767 ; WX 838 ; N uni223F ; G 3026
U 8768 ; WX 375 ; N uni2240 ; G 3027
U 8769 ; WX 838 ; N uni2241 ; G 3028
U 8770 ; WX 838 ; N uni2242 ; G 3029
U 8771 ; WX 838 ; N uni2243 ; G 3030
U 8772 ; WX 838 ; N uni2244 ; G 3031
U 8773 ; WX 838 ; N congruent ; G 3032
U 8774 ; WX 838 ; N uni2246 ; G 3033
U 8775 ; WX 838 ; N uni2247 ; G 3034
U 8776 ; WX 838 ; N approxequal ; G 3035
U 8777 ; WX 838 ; N uni2249 ; G 3036
U 8778 ; WX 838 ; N uni224A ; G 3037
U 8779 ; WX 838 ; N uni224B ; G 3038
U 8780 ; WX 838 ; N uni224C ; G 3039
U 8781 ; WX 838 ; N uni224D ; G 3040
U 8782 ; WX 838 ; N uni224E ; G 3041
U 8783 ; WX 838 ; N uni224F ; G 3042
U 8784 ; WX 838 ; N uni2250 ; G 3043
U 8785 ; WX 838 ; N uni2251 ; G 3044
U 8786 ; WX 838 ; N uni2252 ; G 3045
U 8787 ; WX 838 ; N uni2253 ; G 3046
U 8788 ; WX 1063 ; N uni2254 ; G 3047
U 8789 ; WX 1063 ; N uni2255 ; G 3048
U 8790 ; WX 838 ; N uni2256 ; G 3049
U 8791 ; WX 838 ; N uni2257 ; G 3050
U 8792 ; WX 838 ; N uni2258 ; G 3051
U 8793 ; WX 838 ; N uni2259 ; G 3052
U 8794 ; WX 838 ; N uni225A ; G 3053
U 8795 ; WX 838 ; N uni225B ; G 3054
U 8796 ; WX 838 ; N uni225C ; G 3055
U 8797 ; WX 838 ; N uni225D ; G 3056
U 8798 ; WX 838 ; N uni225E ; G 3057
U 8799 ; WX 838 ; N uni225F ; G 3058
U 8800 ; WX 838 ; N notequal ; G 3059
U 8801 ; WX 838 ; N equivalence ; G 3060
U 8802 ; WX 838 ; N uni2262 ; G 3061
U 8803 ; WX 838 ; N uni2263 ; G 3062
U 8804 ; WX 838 ; N lessequal ; G 3063
U 8805 ; WX 838 ; N greaterequal ; G 3064
U 8806 ; WX 838 ; N uni2266 ; G 3065
U 8807 ; WX 838 ; N uni2267 ; G 3066
U 8808 ; WX 841 ; N uni2268 ; G 3067
U 8809 ; WX 841 ; N uni2269 ; G 3068
U 8810 ; WX 1047 ; N uni226A ; G 3069
U 8811 ; WX 1047 ; N uni226B ; G 3070
U 8812 ; WX 500 ; N uni226C ; G 3071
U 8813 ; WX 838 ; N uni226D ; G 3072
U 8814 ; WX 838 ; N uni226E ; G 3073
U 8815 ; WX 838 ; N uni226F ; G 3074
U 8816 ; WX 838 ; N uni2270 ; G 3075
U 8817 ; WX 838 ; N uni2271 ; G 3076
U 8818 ; WX 838 ; N uni2272 ; G 3077
U 8819 ; WX 838 ; N uni2273 ; G 3078
U 8820 ; WX 838 ; N uni2274 ; G 3079
U 8821 ; WX 838 ; N uni2275 ; G 3080
U 8822 ; WX 838 ; N uni2276 ; G 3081
U 8823 ; WX 838 ; N uni2277 ; G 3082
U 8824 ; WX 838 ; N uni2278 ; G 3083
U 8825 ; WX 838 ; N uni2279 ; G 3084
U 8826 ; WX 838 ; N uni227A ; G 3085
U 8827 ; WX 838 ; N uni227B ; G 3086
U 8828 ; WX 838 ; N uni227C ; G 3087
U 8829 ; WX 838 ; N uni227D ; G 3088
U 8830 ; WX 838 ; N uni227E ; G 3089
U 8831 ; WX 838 ; N uni227F ; G 3090
U 8832 ; WX 838 ; N uni2280 ; G 3091
U 8833 ; WX 838 ; N uni2281 ; G 3092
U 8834 ; WX 838 ; N propersubset ; G 3093
U 8835 ; WX 838 ; N propersuperset ; G 3094
U 8836 ; WX 838 ; N notsubset ; G 3095
U 8837 ; WX 838 ; N uni2285 ; G 3096
U 8838 ; WX 838 ; N reflexsubset ; G 3097
U 8839 ; WX 838 ; N reflexsuperset ; G 3098
U 8840 ; WX 838 ; N uni2288 ; G 3099
U 8841 ; WX 838 ; N uni2289 ; G 3100
U 8842 ; WX 838 ; N uni228A ; G 3101
U 8843 ; WX 838 ; N uni228B ; G 3102
U 8844 ; WX 812 ; N uni228C ; G 3103
U 8845 ; WX 812 ; N uni228D ; G 3104
U 8846 ; WX 812 ; N uni228E ; G 3105
U 8847 ; WX 838 ; N uni228F ; G 3106
U 8848 ; WX 838 ; N uni2290 ; G 3107
U 8849 ; WX 838 ; N uni2291 ; G 3108
U 8850 ; WX 838 ; N uni2292 ; G 3109
U 8851 ; WX 796 ; N uni2293 ; G 3110
U 8852 ; WX 796 ; N uni2294 ; G 3111
U 8853 ; WX 838 ; N circleplus ; G 3112
U 8854 ; WX 838 ; N uni2296 ; G 3113
U 8855 ; WX 838 ; N circlemultiply ; G 3114
U 8856 ; WX 838 ; N uni2298 ; G 3115
U 8857 ; WX 838 ; N uni2299 ; G 3116
U 8858 ; WX 838 ; N uni229A ; G 3117
U 8859 ; WX 838 ; N uni229B ; G 3118
U 8860 ; WX 838 ; N uni229C ; G 3119
U 8861 ; WX 838 ; N uni229D ; G 3120
U 8862 ; WX 838 ; N uni229E ; G 3121
U 8863 ; WX 838 ; N uni229F ; G 3122
U 8864 ; WX 838 ; N uni22A0 ; G 3123
U 8865 ; WX 838 ; N uni22A1 ; G 3124
U 8866 ; WX 914 ; N uni22A2 ; G 3125
U 8867 ; WX 914 ; N uni22A3 ; G 3126
U 8868 ; WX 914 ; N uni22A4 ; G 3127
U 8869 ; WX 914 ; N perpendicular ; G 3128
U 8870 ; WX 542 ; N uni22A6 ; G 3129
U 8871 ; WX 542 ; N uni22A7 ; G 3130
U 8872 ; WX 914 ; N uni22A8 ; G 3131
U 8873 ; WX 914 ; N uni22A9 ; G 3132
U 8874 ; WX 914 ; N uni22AA ; G 3133
U 8875 ; WX 914 ; N uni22AB ; G 3134
U 8876 ; WX 914 ; N uni22AC ; G 3135
U 8877 ; WX 914 ; N uni22AD ; G 3136
U 8878 ; WX 914 ; N uni22AE ; G 3137
U 8879 ; WX 914 ; N uni22AF ; G 3138
U 8880 ; WX 838 ; N uni22B0 ; G 3139
U 8881 ; WX 838 ; N uni22B1 ; G 3140
U 8882 ; WX 838 ; N uni22B2 ; G 3141
U 8883 ; WX 838 ; N uni22B3 ; G 3142
U 8884 ; WX 838 ; N uni22B4 ; G 3143
U 8885 ; WX 838 ; N uni22B5 ; G 3144
U 8886 ; WX 1000 ; N uni22B6 ; G 3145
U 8887 ; WX 1000 ; N uni22B7 ; G 3146
U 8888 ; WX 838 ; N uni22B8 ; G 3147
U 8889 ; WX 838 ; N uni22B9 ; G 3148
U 8890 ; WX 542 ; N uni22BA ; G 3149
U 8891 ; WX 812 ; N uni22BB ; G 3150
U 8892 ; WX 812 ; N uni22BC ; G 3151
U 8893 ; WX 812 ; N uni22BD ; G 3152
U 8894 ; WX 838 ; N uni22BE ; G 3153
U 8895 ; WX 838 ; N uni22BF ; G 3154
U 8896 ; WX 843 ; N uni22C0 ; G 3155
U 8897 ; WX 843 ; N uni22C1 ; G 3156
U 8898 ; WX 843 ; N uni22C2 ; G 3157
U 8899 ; WX 843 ; N uni22C3 ; G 3158
U 8900 ; WX 626 ; N uni22C4 ; G 3159
U 8901 ; WX 380 ; N dotmath ; G 3160
U 8902 ; WX 626 ; N uni22C6 ; G 3161
U 8903 ; WX 838 ; N uni22C7 ; G 3162
U 8904 ; WX 1000 ; N uni22C8 ; G 3163
U 8905 ; WX 1000 ; N uni22C9 ; G 3164
U 8906 ; WX 1000 ; N uni22CA ; G 3165
U 8907 ; WX 1000 ; N uni22CB ; G 3166
U 8908 ; WX 1000 ; N uni22CC ; G 3167
U 8909 ; WX 838 ; N uni22CD ; G 3168
U 8910 ; WX 812 ; N uni22CE ; G 3169
U 8911 ; WX 812 ; N uni22CF ; G 3170
U 8912 ; WX 838 ; N uni22D0 ; G 3171
U 8913 ; WX 838 ; N uni22D1 ; G 3172
U 8914 ; WX 838 ; N uni22D2 ; G 3173
U 8915 ; WX 838 ; N uni22D3 ; G 3174
U 8916 ; WX 838 ; N uni22D4 ; G 3175
U 8917 ; WX 838 ; N uni22D5 ; G 3176
U 8918 ; WX 838 ; N uni22D6 ; G 3177
U 8919 ; WX 838 ; N uni22D7 ; G 3178
U 8920 ; WX 1422 ; N uni22D8 ; G 3179
U 8921 ; WX 1422 ; N uni22D9 ; G 3180
U 8922 ; WX 838 ; N uni22DA ; G 3181
U 8923 ; WX 838 ; N uni22DB ; G 3182
U 8924 ; WX 838 ; N uni22DC ; G 3183
U 8925 ; WX 838 ; N uni22DD ; G 3184
U 8926 ; WX 838 ; N uni22DE ; G 3185
U 8927 ; WX 838 ; N uni22DF ; G 3186
U 8928 ; WX 838 ; N uni22E0 ; G 3187
U 8929 ; WX 838 ; N uni22E1 ; G 3188
U 8930 ; WX 838 ; N uni22E2 ; G 3189
U 8931 ; WX 838 ; N uni22E3 ; G 3190
U 8932 ; WX 838 ; N uni22E4 ; G 3191
U 8933 ; WX 838 ; N uni22E5 ; G 3192
U 8934 ; WX 838 ; N uni22E6 ; G 3193
U 8935 ; WX 838 ; N uni22E7 ; G 3194
U 8936 ; WX 838 ; N uni22E8 ; G 3195
U 8937 ; WX 838 ; N uni22E9 ; G 3196
U 8938 ; WX 838 ; N uni22EA ; G 3197
U 8939 ; WX 838 ; N uni22EB ; G 3198
U 8940 ; WX 838 ; N uni22EC ; G 3199
U 8941 ; WX 838 ; N uni22ED ; G 3200
U 8942 ; WX 1000 ; N uni22EE ; G 3201
U 8943 ; WX 1000 ; N uni22EF ; G 3202
U 8944 ; WX 1000 ; N uni22F0 ; G 3203
U 8945 ; WX 1000 ; N uni22F1 ; G 3204
U 8946 ; WX 1158 ; N uni22F2 ; G 3205
U 8947 ; WX 896 ; N uni22F3 ; G 3206
U 8948 ; WX 750 ; N uni22F4 ; G 3207
U 8949 ; WX 896 ; N uni22F5 ; G 3208
U 8950 ; WX 896 ; N uni22F6 ; G 3209
U 8951 ; WX 750 ; N uni22F7 ; G 3210
U 8952 ; WX 896 ; N uni22F8 ; G 3211
U 8953 ; WX 896 ; N uni22F9 ; G 3212
U 8954 ; WX 1158 ; N uni22FA ; G 3213
U 8955 ; WX 896 ; N uni22FB ; G 3214
U 8956 ; WX 750 ; N uni22FC ; G 3215
U 8957 ; WX 896 ; N uni22FD ; G 3216
U 8958 ; WX 750 ; N uni22FE ; G 3217
U 8959 ; WX 896 ; N uni22FF ; G 3218
U 8960 ; WX 602 ; N uni2300 ; G 3219
U 8961 ; WX 602 ; N uni2301 ; G 3220
U 8962 ; WX 716 ; N house ; G 3221
U 8963 ; WX 838 ; N uni2303 ; G 3222
U 8964 ; WX 838 ; N uni2304 ; G 3223
U 8965 ; WX 838 ; N uni2305 ; G 3224
U 8966 ; WX 838 ; N uni2306 ; G 3225
U 8967 ; WX 488 ; N uni2307 ; G 3226
U 8968 ; WX 457 ; N uni2308 ; G 3227
U 8969 ; WX 457 ; N uni2309 ; G 3228
U 8970 ; WX 457 ; N uni230A ; G 3229
U 8971 ; WX 457 ; N uni230B ; G 3230
U 8972 ; WX 809 ; N uni230C ; G 3231
U 8973 ; WX 809 ; N uni230D ; G 3232
U 8974 ; WX 809 ; N uni230E ; G 3233
U 8975 ; WX 809 ; N uni230F ; G 3234
U 8976 ; WX 838 ; N revlogicalnot ; G 3235
U 8977 ; WX 539 ; N uni2311 ; G 3236
U 8984 ; WX 928 ; N uni2318 ; G 3237
U 8985 ; WX 838 ; N uni2319 ; G 3238
U 8988 ; WX 469 ; N uni231C ; G 3239
U 8989 ; WX 469 ; N uni231D ; G 3240
U 8990 ; WX 469 ; N uni231E ; G 3241
U 8991 ; WX 469 ; N uni231F ; G 3242
U 8992 ; WX 610 ; N integraltp ; G 3243
U 8993 ; WX 610 ; N integralbt ; G 3244
U 8996 ; WX 1152 ; N uni2324 ; G 3245
U 8997 ; WX 1152 ; N uni2325 ; G 3246
U 8998 ; WX 1414 ; N uni2326 ; G 3247
U 8999 ; WX 1152 ; N uni2327 ; G 3248
U 9000 ; WX 1443 ; N uni2328 ; G 3249
U 9003 ; WX 1414 ; N uni232B ; G 3250
U 9004 ; WX 873 ; N uni232C ; G 3251
U 9075 ; WX 390 ; N uni2373 ; G 3252
U 9076 ; WX 716 ; N uni2374 ; G 3253
U 9077 ; WX 869 ; N uni2375 ; G 3254
U 9082 ; WX 687 ; N uni237A ; G 3255
U 9085 ; WX 863 ; N uni237D ; G 3256
U 9095 ; WX 1152 ; N uni2387 ; G 3257
U 9108 ; WX 873 ; N uni2394 ; G 3258
U 9115 ; WX 500 ; N uni239B ; G 3259
U 9116 ; WX 500 ; N uni239C ; G 3260
U 9117 ; WX 500 ; N uni239D ; G 3261
U 9118 ; WX 500 ; N uni239E ; G 3262
U 9119 ; WX 500 ; N uni239F ; G 3263
U 9120 ; WX 500 ; N uni23A0 ; G 3264
U 9121 ; WX 500 ; N uni23A1 ; G 3265
U 9122 ; WX 500 ; N uni23A2 ; G 3266
U 9123 ; WX 500 ; N uni23A3 ; G 3267
U 9124 ; WX 500 ; N uni23A4 ; G 3268
U 9125 ; WX 500 ; N uni23A5 ; G 3269
U 9126 ; WX 500 ; N uni23A6 ; G 3270
U 9127 ; WX 750 ; N uni23A7 ; G 3271
U 9128 ; WX 750 ; N uni23A8 ; G 3272
U 9129 ; WX 750 ; N uni23A9 ; G 3273
U 9130 ; WX 750 ; N uni23AA ; G 3274
U 9131 ; WX 750 ; N uni23AB ; G 3275
U 9132 ; WX 750 ; N uni23AC ; G 3276
U 9133 ; WX 750 ; N uni23AD ; G 3277
U 9134 ; WX 610 ; N uni23AE ; G 3278
U 9166 ; WX 838 ; N uni23CE ; G 3279
U 9167 ; WX 945 ; N uni23CF ; G 3280
U 9187 ; WX 873 ; N uni23E3 ; G 3281
U 9189 ; WX 769 ; N uni23E5 ; G 3282
U 9192 ; WX 696 ; N uni23E8 ; G 3283
U 9250 ; WX 716 ; N uni2422 ; G 3284
U 9251 ; WX 716 ; N uni2423 ; G 3285
U 9312 ; WX 847 ; N uni2460 ; G 3286
U 9313 ; WX 847 ; N uni2461 ; G 3287
U 9314 ; WX 847 ; N uni2462 ; G 3288
U 9315 ; WX 847 ; N uni2463 ; G 3289
U 9316 ; WX 847 ; N uni2464 ; G 3290
U 9317 ; WX 847 ; N uni2465 ; G 3291
U 9318 ; WX 847 ; N uni2466 ; G 3292
U 9319 ; WX 847 ; N uni2467 ; G 3293
U 9320 ; WX 847 ; N uni2468 ; G 3294
U 9321 ; WX 847 ; N uni2469 ; G 3295
U 9472 ; WX 602 ; N SF100000 ; G 3296
U 9473 ; WX 602 ; N uni2501 ; G 3297
U 9474 ; WX 602 ; N SF110000 ; G 3298
U 9475 ; WX 602 ; N uni2503 ; G 3299
U 9476 ; WX 602 ; N uni2504 ; G 3300
U 9477 ; WX 602 ; N uni2505 ; G 3301
U 9478 ; WX 602 ; N uni2506 ; G 3302
U 9479 ; WX 602 ; N uni2507 ; G 3303
U 9480 ; WX 602 ; N uni2508 ; G 3304
U 9481 ; WX 602 ; N uni2509 ; G 3305
U 9482 ; WX 602 ; N uni250A ; G 3306
U 9483 ; WX 602 ; N uni250B ; G 3307
U 9484 ; WX 602 ; N SF010000 ; G 3308
U 9485 ; WX 602 ; N uni250D ; G 3309
U 9486 ; WX 602 ; N uni250E ; G 3310
U 9487 ; WX 602 ; N uni250F ; G 3311
U 9488 ; WX 602 ; N SF030000 ; G 3312
U 9489 ; WX 602 ; N uni2511 ; G 3313
U 9490 ; WX 602 ; N uni2512 ; G 3314
U 9491 ; WX 602 ; N uni2513 ; G 3315
U 9492 ; WX 602 ; N SF020000 ; G 3316
U 9493 ; WX 602 ; N uni2515 ; G 3317
U 9494 ; WX 602 ; N uni2516 ; G 3318
U 9495 ; WX 602 ; N uni2517 ; G 3319
U 9496 ; WX 602 ; N SF040000 ; G 3320
U 9497 ; WX 602 ; N uni2519 ; G 3321
U 9498 ; WX 602 ; N uni251A ; G 3322
U 9499 ; WX 602 ; N uni251B ; G 3323
U 9500 ; WX 602 ; N SF080000 ; G 3324
U 9501 ; WX 602 ; N uni251D ; G 3325
U 9502 ; WX 602 ; N uni251E ; G 3326
U 9503 ; WX 602 ; N uni251F ; G 3327
U 9504 ; WX 602 ; N uni2520 ; G 3328
U 9505 ; WX 602 ; N uni2521 ; G 3329
U 9506 ; WX 602 ; N uni2522 ; G 3330
U 9507 ; WX 602 ; N uni2523 ; G 3331
U 9508 ; WX 602 ; N SF090000 ; G 3332
U 9509 ; WX 602 ; N uni2525 ; G 3333
U 9510 ; WX 602 ; N uni2526 ; G 3334
U 9511 ; WX 602 ; N uni2527 ; G 3335
U 9512 ; WX 602 ; N uni2528 ; G 3336
U 9513 ; WX 602 ; N uni2529 ; G 3337
U 9514 ; WX 602 ; N uni252A ; G 3338
U 9515 ; WX 602 ; N uni252B ; G 3339
U 9516 ; WX 602 ; N SF060000 ; G 3340
U 9517 ; WX 602 ; N uni252D ; G 3341
U 9518 ; WX 602 ; N uni252E ; G 3342
U 9519 ; WX 602 ; N uni252F ; G 3343
U 9520 ; WX 602 ; N uni2530 ; G 3344
U 9521 ; WX 602 ; N uni2531 ; G 3345
U 9522 ; WX 602 ; N uni2532 ; G 3346
U 9523 ; WX 602 ; N uni2533 ; G 3347
U 9524 ; WX 602 ; N SF070000 ; G 3348
U 9525 ; WX 602 ; N uni2535 ; G 3349
U 9526 ; WX 602 ; N uni2536 ; G 3350
U 9527 ; WX 602 ; N uni2537 ; G 3351
U 9528 ; WX 602 ; N uni2538 ; G 3352
U 9529 ; WX 602 ; N uni2539 ; G 3353
U 9530 ; WX 602 ; N uni253A ; G 3354
U 9531 ; WX 602 ; N uni253B ; G 3355
U 9532 ; WX 602 ; N SF050000 ; G 3356
U 9533 ; WX 602 ; N uni253D ; G 3357
U 9534 ; WX 602 ; N uni253E ; G 3358
U 9535 ; WX 602 ; N uni253F ; G 3359
U 9536 ; WX 602 ; N uni2540 ; G 3360
U 9537 ; WX 602 ; N uni2541 ; G 3361
U 9538 ; WX 602 ; N uni2542 ; G 3362
U 9539 ; WX 602 ; N uni2543 ; G 3363
U 9540 ; WX 602 ; N uni2544 ; G 3364
U 9541 ; WX 602 ; N uni2545 ; G 3365
U 9542 ; WX 602 ; N uni2546 ; G 3366
U 9543 ; WX 602 ; N uni2547 ; G 3367
U 9544 ; WX 602 ; N uni2548 ; G 3368
U 9545 ; WX 602 ; N uni2549 ; G 3369
U 9546 ; WX 602 ; N uni254A ; G 3370
U 9547 ; WX 602 ; N uni254B ; G 3371
U 9548 ; WX 602 ; N uni254C ; G 3372
U 9549 ; WX 602 ; N uni254D ; G 3373
U 9550 ; WX 602 ; N uni254E ; G 3374
U 9551 ; WX 602 ; N uni254F ; G 3375
U 9552 ; WX 602 ; N SF430000 ; G 3376
U 9553 ; WX 602 ; N SF240000 ; G 3377
U 9554 ; WX 602 ; N SF510000 ; G 3378
U 9555 ; WX 602 ; N SF520000 ; G 3379
U 9556 ; WX 602 ; N SF390000 ; G 3380
U 9557 ; WX 602 ; N SF220000 ; G 3381
U 9558 ; WX 602 ; N SF210000 ; G 3382
U 9559 ; WX 602 ; N SF250000 ; G 3383
U 9560 ; WX 602 ; N SF500000 ; G 3384
U 9561 ; WX 602 ; N SF490000 ; G 3385
U 9562 ; WX 602 ; N SF380000 ; G 3386
U 9563 ; WX 602 ; N SF280000 ; G 3387
U 9564 ; WX 602 ; N SF270000 ; G 3388
U 9565 ; WX 602 ; N SF260000 ; G 3389
U 9566 ; WX 602 ; N SF360000 ; G 3390
U 9567 ; WX 602 ; N SF370000 ; G 3391
U 9568 ; WX 602 ; N SF420000 ; G 3392
U 9569 ; WX 602 ; N SF190000 ; G 3393
U 9570 ; WX 602 ; N SF200000 ; G 3394
U 9571 ; WX 602 ; N SF230000 ; G 3395
U 9572 ; WX 602 ; N SF470000 ; G 3396
U 9573 ; WX 602 ; N SF480000 ; G 3397
U 9574 ; WX 602 ; N SF410000 ; G 3398
U 9575 ; WX 602 ; N SF450000 ; G 3399
U 9576 ; WX 602 ; N SF460000 ; G 3400
U 9577 ; WX 602 ; N SF400000 ; G 3401
U 9578 ; WX 602 ; N SF540000 ; G 3402
U 9579 ; WX 602 ; N SF530000 ; G 3403
U 9580 ; WX 602 ; N SF440000 ; G 3404
U 9581 ; WX 602 ; N uni256D ; G 3405
U 9582 ; WX 602 ; N uni256E ; G 3406
U 9583 ; WX 602 ; N uni256F ; G 3407
U 9584 ; WX 602 ; N uni2570 ; G 3408
U 9585 ; WX 602 ; N uni2571 ; G 3409
U 9586 ; WX 602 ; N uni2572 ; G 3410
U 9587 ; WX 602 ; N uni2573 ; G 3411
U 9588 ; WX 602 ; N uni2574 ; G 3412
U 9589 ; WX 602 ; N uni2575 ; G 3413
U 9590 ; WX 602 ; N uni2576 ; G 3414
U 9591 ; WX 602 ; N uni2577 ; G 3415
U 9592 ; WX 602 ; N uni2578 ; G 3416
U 9593 ; WX 602 ; N uni2579 ; G 3417
U 9594 ; WX 602 ; N uni257A ; G 3418
U 9595 ; WX 602 ; N uni257B ; G 3419
U 9596 ; WX 602 ; N uni257C ; G 3420
U 9597 ; WX 602 ; N uni257D ; G 3421
U 9598 ; WX 602 ; N uni257E ; G 3422
U 9599 ; WX 602 ; N uni257F ; G 3423
U 9600 ; WX 769 ; N upblock ; G 3424
U 9601 ; WX 769 ; N uni2581 ; G 3425
U 9602 ; WX 769 ; N uni2582 ; G 3426
U 9603 ; WX 769 ; N uni2583 ; G 3427
U 9604 ; WX 769 ; N dnblock ; G 3428
U 9605 ; WX 769 ; N uni2585 ; G 3429
U 9606 ; WX 769 ; N uni2586 ; G 3430
U 9607 ; WX 769 ; N uni2587 ; G 3431
U 9608 ; WX 769 ; N block ; G 3432
U 9609 ; WX 769 ; N uni2589 ; G 3433
U 9610 ; WX 769 ; N uni258A ; G 3434
U 9611 ; WX 769 ; N uni258B ; G 3435
U 9612 ; WX 769 ; N lfblock ; G 3436
U 9613 ; WX 769 ; N uni258D ; G 3437
U 9614 ; WX 769 ; N uni258E ; G 3438
U 9615 ; WX 769 ; N uni258F ; G 3439
U 9616 ; WX 769 ; N rtblock ; G 3440
U 9617 ; WX 769 ; N ltshade ; G 3441
U 9618 ; WX 769 ; N shade ; G 3442
U 9619 ; WX 769 ; N dkshade ; G 3443
U 9620 ; WX 769 ; N uni2594 ; G 3444
U 9621 ; WX 769 ; N uni2595 ; G 3445
U 9622 ; WX 769 ; N uni2596 ; G 3446
U 9623 ; WX 769 ; N uni2597 ; G 3447
U 9624 ; WX 769 ; N uni2598 ; G 3448
U 9625 ; WX 769 ; N uni2599 ; G 3449
U 9626 ; WX 769 ; N uni259A ; G 3450
U 9627 ; WX 769 ; N uni259B ; G 3451
U 9628 ; WX 769 ; N uni259C ; G 3452
U 9629 ; WX 769 ; N uni259D ; G 3453
U 9630 ; WX 769 ; N uni259E ; G 3454
U 9631 ; WX 769 ; N uni259F ; G 3455
U 9632 ; WX 945 ; N filledbox ; G 3456
U 9633 ; WX 945 ; N H22073 ; G 3457
U 9634 ; WX 945 ; N uni25A2 ; G 3458
U 9635 ; WX 945 ; N uni25A3 ; G 3459
U 9636 ; WX 945 ; N uni25A4 ; G 3460
U 9637 ; WX 945 ; N uni25A5 ; G 3461
U 9638 ; WX 945 ; N uni25A6 ; G 3462
U 9639 ; WX 945 ; N uni25A7 ; G 3463
U 9640 ; WX 945 ; N uni25A8 ; G 3464
U 9641 ; WX 945 ; N uni25A9 ; G 3465
U 9642 ; WX 678 ; N H18543 ; G 3466
U 9643 ; WX 678 ; N H18551 ; G 3467
U 9644 ; WX 945 ; N filledrect ; G 3468
U 9645 ; WX 945 ; N uni25AD ; G 3469
U 9646 ; WX 550 ; N uni25AE ; G 3470
U 9647 ; WX 550 ; N uni25AF ; G 3471
U 9648 ; WX 769 ; N uni25B0 ; G 3472
U 9649 ; WX 769 ; N uni25B1 ; G 3473
U 9650 ; WX 769 ; N triagup ; G 3474
U 9651 ; WX 769 ; N uni25B3 ; G 3475
U 9652 ; WX 502 ; N uni25B4 ; G 3476
U 9653 ; WX 502 ; N uni25B5 ; G 3477
U 9654 ; WX 769 ; N uni25B6 ; G 3478
U 9655 ; WX 769 ; N uni25B7 ; G 3479
U 9656 ; WX 502 ; N uni25B8 ; G 3480
U 9657 ; WX 502 ; N uni25B9 ; G 3481
U 9658 ; WX 769 ; N triagrt ; G 3482
U 9659 ; WX 769 ; N uni25BB ; G 3483
U 9660 ; WX 769 ; N triagdn ; G 3484
U 9661 ; WX 769 ; N uni25BD ; G 3485
U 9662 ; WX 502 ; N uni25BE ; G 3486
U 9663 ; WX 502 ; N uni25BF ; G 3487
U 9664 ; WX 769 ; N uni25C0 ; G 3488
U 9665 ; WX 769 ; N uni25C1 ; G 3489
U 9666 ; WX 502 ; N uni25C2 ; G 3490
U 9667 ; WX 502 ; N uni25C3 ; G 3491
U 9668 ; WX 769 ; N triaglf ; G 3492
U 9669 ; WX 769 ; N uni25C5 ; G 3493
U 9670 ; WX 769 ; N uni25C6 ; G 3494
U 9671 ; WX 769 ; N uni25C7 ; G 3495
U 9672 ; WX 769 ; N uni25C8 ; G 3496
U 9673 ; WX 873 ; N uni25C9 ; G 3497
U 9674 ; WX 494 ; N lozenge ; G 3498
U 9675 ; WX 873 ; N circle ; G 3499
U 9676 ; WX 873 ; N uni25CC ; G 3500
U 9677 ; WX 873 ; N uni25CD ; G 3501
U 9678 ; WX 873 ; N uni25CE ; G 3502
U 9679 ; WX 873 ; N H18533 ; G 3503
U 9680 ; WX 873 ; N uni25D0 ; G 3504
U 9681 ; WX 873 ; N uni25D1 ; G 3505
U 9682 ; WX 873 ; N uni25D2 ; G 3506
U 9683 ; WX 873 ; N uni25D3 ; G 3507
U 9684 ; WX 873 ; N uni25D4 ; G 3508
U 9685 ; WX 873 ; N uni25D5 ; G 3509
U 9686 ; WX 527 ; N uni25D6 ; G 3510
U 9687 ; WX 527 ; N uni25D7 ; G 3511
U 9688 ; WX 840 ; N invbullet ; G 3512
U 9689 ; WX 970 ; N invcircle ; G 3513
U 9690 ; WX 970 ; N uni25DA ; G 3514
U 9691 ; WX 970 ; N uni25DB ; G 3515
U 9692 ; WX 387 ; N uni25DC ; G 3516
U 9693 ; WX 387 ; N uni25DD ; G 3517
U 9694 ; WX 387 ; N uni25DE ; G 3518
U 9695 ; WX 387 ; N uni25DF ; G 3519
U 9696 ; WX 769 ; N uni25E0 ; G 3520
U 9697 ; WX 769 ; N uni25E1 ; G 3521
U 9698 ; WX 769 ; N uni25E2 ; G 3522
U 9699 ; WX 769 ; N uni25E3 ; G 3523
U 9700 ; WX 769 ; N uni25E4 ; G 3524
U 9701 ; WX 769 ; N uni25E5 ; G 3525
U 9702 ; WX 639 ; N openbullet ; G 3526
U 9703 ; WX 945 ; N uni25E7 ; G 3527
U 9704 ; WX 945 ; N uni25E8 ; G 3528
U 9705 ; WX 945 ; N uni25E9 ; G 3529
U 9706 ; WX 945 ; N uni25EA ; G 3530
U 9707 ; WX 945 ; N uni25EB ; G 3531
U 9708 ; WX 769 ; N uni25EC ; G 3532
U 9709 ; WX 769 ; N uni25ED ; G 3533
U 9710 ; WX 769 ; N uni25EE ; G 3534
U 9711 ; WX 1119 ; N uni25EF ; G 3535
U 9712 ; WX 945 ; N uni25F0 ; G 3536
U 9713 ; WX 945 ; N uni25F1 ; G 3537
U 9714 ; WX 945 ; N uni25F2 ; G 3538
U 9715 ; WX 945 ; N uni25F3 ; G 3539
U 9716 ; WX 873 ; N uni25F4 ; G 3540
U 9717 ; WX 873 ; N uni25F5 ; G 3541
U 9718 ; WX 873 ; N uni25F6 ; G 3542
U 9719 ; WX 873 ; N uni25F7 ; G 3543
U 9720 ; WX 769 ; N uni25F8 ; G 3544
U 9721 ; WX 769 ; N uni25F9 ; G 3545
U 9722 ; WX 769 ; N uni25FA ; G 3546
U 9723 ; WX 830 ; N uni25FB ; G 3547
U 9724 ; WX 830 ; N uni25FC ; G 3548
U 9725 ; WX 732 ; N uni25FD ; G 3549
U 9726 ; WX 732 ; N uni25FE ; G 3550
U 9727 ; WX 769 ; N uni25FF ; G 3551
U 9728 ; WX 896 ; N uni2600 ; G 3552
U 9729 ; WX 1000 ; N uni2601 ; G 3553
U 9730 ; WX 896 ; N uni2602 ; G 3554
U 9731 ; WX 896 ; N uni2603 ; G 3555
U 9732 ; WX 896 ; N uni2604 ; G 3556
U 9733 ; WX 896 ; N uni2605 ; G 3557
U 9734 ; WX 896 ; N uni2606 ; G 3558
U 9735 ; WX 573 ; N uni2607 ; G 3559
U 9736 ; WX 896 ; N uni2608 ; G 3560
U 9737 ; WX 896 ; N uni2609 ; G 3561
U 9738 ; WX 888 ; N uni260A ; G 3562
U 9739 ; WX 888 ; N uni260B ; G 3563
U 9740 ; WX 671 ; N uni260C ; G 3564
U 9741 ; WX 1013 ; N uni260D ; G 3565
U 9742 ; WX 1246 ; N uni260E ; G 3566
U 9743 ; WX 1250 ; N uni260F ; G 3567
U 9744 ; WX 896 ; N uni2610 ; G 3568
U 9745 ; WX 896 ; N uni2611 ; G 3569
U 9746 ; WX 896 ; N uni2612 ; G 3570
U 9747 ; WX 532 ; N uni2613 ; G 3571
U 9748 ; WX 896 ; N uni2614 ; G 3572
U 9749 ; WX 896 ; N uni2615 ; G 3573
U 9750 ; WX 896 ; N uni2616 ; G 3574
U 9751 ; WX 896 ; N uni2617 ; G 3575
U 9752 ; WX 896 ; N uni2618 ; G 3576
U 9753 ; WX 896 ; N uni2619 ; G 3577
U 9754 ; WX 896 ; N uni261A ; G 3578
U 9755 ; WX 896 ; N uni261B ; G 3579
U 9756 ; WX 896 ; N uni261C ; G 3580
U 9757 ; WX 609 ; N uni261D ; G 3581
U 9758 ; WX 896 ; N uni261E ; G 3582
U 9759 ; WX 609 ; N uni261F ; G 3583
U 9760 ; WX 896 ; N uni2620 ; G 3584
U 9761 ; WX 896 ; N uni2621 ; G 3585
U 9762 ; WX 896 ; N uni2622 ; G 3586
U 9763 ; WX 896 ; N uni2623 ; G 3587
U 9764 ; WX 669 ; N uni2624 ; G 3588
U 9765 ; WX 746 ; N uni2625 ; G 3589
U 9766 ; WX 649 ; N uni2626 ; G 3590
U 9767 ; WX 784 ; N uni2627 ; G 3591
U 9768 ; WX 545 ; N uni2628 ; G 3592
U 9769 ; WX 896 ; N uni2629 ; G 3593
U 9770 ; WX 896 ; N uni262A ; G 3594
U 9771 ; WX 896 ; N uni262B ; G 3595
U 9772 ; WX 710 ; N uni262C ; G 3596
U 9773 ; WX 896 ; N uni262D ; G 3597
U 9774 ; WX 896 ; N uni262E ; G 3598
U 9775 ; WX 896 ; N uni262F ; G 3599
U 9776 ; WX 896 ; N uni2630 ; G 3600
U 9777 ; WX 896 ; N uni2631 ; G 3601
U 9778 ; WX 896 ; N uni2632 ; G 3602
U 9779 ; WX 896 ; N uni2633 ; G 3603
U 9780 ; WX 896 ; N uni2634 ; G 3604
U 9781 ; WX 896 ; N uni2635 ; G 3605
U 9782 ; WX 896 ; N uni2636 ; G 3606
U 9783 ; WX 896 ; N uni2637 ; G 3607
U 9784 ; WX 896 ; N uni2638 ; G 3608
U 9785 ; WX 1042 ; N uni2639 ; G 3609
U 9786 ; WX 1042 ; N smileface ; G 3610
U 9787 ; WX 1042 ; N invsmileface ; G 3611
U 9788 ; WX 896 ; N sun ; G 3612
U 9789 ; WX 896 ; N uni263D ; G 3613
U 9790 ; WX 896 ; N uni263E ; G 3614
U 9791 ; WX 614 ; N uni263F ; G 3615
U 9792 ; WX 732 ; N female ; G 3616
U 9793 ; WX 732 ; N uni2641 ; G 3617
U 9794 ; WX 896 ; N male ; G 3618
U 9795 ; WX 896 ; N uni2643 ; G 3619
U 9796 ; WX 896 ; N uni2644 ; G 3620
U 9797 ; WX 896 ; N uni2645 ; G 3621
U 9798 ; WX 896 ; N uni2646 ; G 3622
U 9799 ; WX 896 ; N uni2647 ; G 3623
U 9800 ; WX 896 ; N uni2648 ; G 3624
U 9801 ; WX 896 ; N uni2649 ; G 3625
U 9802 ; WX 896 ; N uni264A ; G 3626
U 9803 ; WX 896 ; N uni264B ; G 3627
U 9804 ; WX 896 ; N uni264C ; G 3628
U 9805 ; WX 896 ; N uni264D ; G 3629
U 9806 ; WX 896 ; N uni264E ; G 3630
U 9807 ; WX 896 ; N uni264F ; G 3631
U 9808 ; WX 896 ; N uni2650 ; G 3632
U 9809 ; WX 896 ; N uni2651 ; G 3633
U 9810 ; WX 896 ; N uni2652 ; G 3634
U 9811 ; WX 896 ; N uni2653 ; G 3635
U 9812 ; WX 896 ; N uni2654 ; G 3636
U 9813 ; WX 896 ; N uni2655 ; G 3637
U 9814 ; WX 896 ; N uni2656 ; G 3638
U 9815 ; WX 896 ; N uni2657 ; G 3639
U 9816 ; WX 896 ; N uni2658 ; G 3640
U 9817 ; WX 896 ; N uni2659 ; G 3641
U 9818 ; WX 896 ; N uni265A ; G 3642
U 9819 ; WX 896 ; N uni265B ; G 3643
U 9820 ; WX 896 ; N uni265C ; G 3644
U 9821 ; WX 896 ; N uni265D ; G 3645
U 9822 ; WX 896 ; N uni265E ; G 3646
U 9823 ; WX 896 ; N uni265F ; G 3647
U 9824 ; WX 896 ; N spade ; G 3648
U 9825 ; WX 896 ; N uni2661 ; G 3649
U 9826 ; WX 896 ; N uni2662 ; G 3650
U 9827 ; WX 896 ; N club ; G 3651
U 9828 ; WX 896 ; N uni2664 ; G 3652
U 9829 ; WX 896 ; N heart ; G 3653
U 9830 ; WX 896 ; N diamond ; G 3654
U 9831 ; WX 896 ; N uni2667 ; G 3655
U 9832 ; WX 896 ; N uni2668 ; G 3656
U 9833 ; WX 472 ; N uni2669 ; G 3657
U 9834 ; WX 638 ; N musicalnote ; G 3658
U 9835 ; WX 896 ; N musicalnotedbl ; G 3659
U 9836 ; WX 896 ; N uni266C ; G 3660
U 9837 ; WX 472 ; N uni266D ; G 3661
U 9838 ; WX 357 ; N uni266E ; G 3662
U 9839 ; WX 484 ; N uni266F ; G 3663
U 9840 ; WX 748 ; N uni2670 ; G 3664
U 9841 ; WX 766 ; N uni2671 ; G 3665
U 9842 ; WX 896 ; N uni2672 ; G 3666
U 9843 ; WX 896 ; N uni2673 ; G 3667
U 9844 ; WX 896 ; N uni2674 ; G 3668
U 9845 ; WX 896 ; N uni2675 ; G 3669
U 9846 ; WX 896 ; N uni2676 ; G 3670
U 9847 ; WX 896 ; N uni2677 ; G 3671
U 9848 ; WX 896 ; N uni2678 ; G 3672
U 9849 ; WX 896 ; N uni2679 ; G 3673
U 9850 ; WX 896 ; N uni267A ; G 3674
U 9851 ; WX 896 ; N uni267B ; G 3675
U 9852 ; WX 896 ; N uni267C ; G 3676
U 9853 ; WX 896 ; N uni267D ; G 3677
U 9854 ; WX 896 ; N uni267E ; G 3678
U 9855 ; WX 896 ; N uni267F ; G 3679
U 9856 ; WX 869 ; N uni2680 ; G 3680
U 9857 ; WX 869 ; N uni2681 ; G 3681
U 9858 ; WX 869 ; N uni2682 ; G 3682
U 9859 ; WX 869 ; N uni2683 ; G 3683
U 9860 ; WX 869 ; N uni2684 ; G 3684
U 9861 ; WX 869 ; N uni2685 ; G 3685
U 9862 ; WX 896 ; N uni2686 ; G 3686
U 9863 ; WX 896 ; N uni2687 ; G 3687
U 9864 ; WX 896 ; N uni2688 ; G 3688
U 9865 ; WX 896 ; N uni2689 ; G 3689
U 9866 ; WX 896 ; N uni268A ; G 3690
U 9867 ; WX 896 ; N uni268B ; G 3691
U 9868 ; WX 896 ; N uni268C ; G 3692
U 9869 ; WX 896 ; N uni268D ; G 3693
U 9870 ; WX 896 ; N uni268E ; G 3694
U 9871 ; WX 896 ; N uni268F ; G 3695
U 9872 ; WX 896 ; N uni2690 ; G 3696
U 9873 ; WX 896 ; N uni2691 ; G 3697
U 9874 ; WX 896 ; N uni2692 ; G 3698
U 9875 ; WX 896 ; N uni2693 ; G 3699
U 9876 ; WX 896 ; N uni2694 ; G 3700
U 9877 ; WX 541 ; N uni2695 ; G 3701
U 9878 ; WX 896 ; N uni2696 ; G 3702
U 9879 ; WX 896 ; N uni2697 ; G 3703
U 9880 ; WX 896 ; N uni2698 ; G 3704
U 9881 ; WX 896 ; N uni2699 ; G 3705
U 9882 ; WX 896 ; N uni269A ; G 3706
U 9883 ; WX 896 ; N uni269B ; G 3707
U 9884 ; WX 896 ; N uni269C ; G 3708
U 9886 ; WX 896 ; N uni269E ; G 3709
U 9887 ; WX 896 ; N uni269F ; G 3710
U 9888 ; WX 896 ; N uni26A0 ; G 3711
U 9889 ; WX 702 ; N uni26A1 ; G 3712
U 9890 ; WX 1004 ; N uni26A2 ; G 3713
U 9891 ; WX 1089 ; N uni26A3 ; G 3714
U 9892 ; WX 1175 ; N uni26A4 ; G 3715
U 9893 ; WX 903 ; N uni26A5 ; G 3716
U 9894 ; WX 838 ; N uni26A6 ; G 3717
U 9895 ; WX 838 ; N uni26A7 ; G 3718
U 9896 ; WX 838 ; N uni26A8 ; G 3719
U 9897 ; WX 838 ; N uni26A9 ; G 3720
U 9898 ; WX 838 ; N uni26AA ; G 3721
U 9899 ; WX 838 ; N uni26AB ; G 3722
U 9900 ; WX 838 ; N uni26AC ; G 3723
U 9901 ; WX 838 ; N uni26AD ; G 3724
U 9902 ; WX 838 ; N uni26AE ; G 3725
U 9903 ; WX 838 ; N uni26AF ; G 3726
U 9904 ; WX 844 ; N uni26B0 ; G 3727
U 9905 ; WX 838 ; N uni26B1 ; G 3728
U 9906 ; WX 732 ; N uni26B2 ; G 3729
U 9907 ; WX 732 ; N uni26B3 ; G 3730
U 9908 ; WX 732 ; N uni26B4 ; G 3731
U 9909 ; WX 732 ; N uni26B5 ; G 3732
U 9910 ; WX 850 ; N uni26B6 ; G 3733
U 9911 ; WX 732 ; N uni26B7 ; G 3734
U 9912 ; WX 732 ; N uni26B8 ; G 3735
U 9920 ; WX 838 ; N uni26C0 ; G 3736
U 9921 ; WX 838 ; N uni26C1 ; G 3737
U 9922 ; WX 838 ; N uni26C2 ; G 3738
U 9923 ; WX 838 ; N uni26C3 ; G 3739
U 9954 ; WX 732 ; N uni26E2 ; G 3740
U 9985 ; WX 838 ; N uni2701 ; G 3741
U 9986 ; WX 838 ; N uni2702 ; G 3742
U 9987 ; WX 838 ; N uni2703 ; G 3743
U 9988 ; WX 838 ; N uni2704 ; G 3744
U 9990 ; WX 838 ; N uni2706 ; G 3745
U 9991 ; WX 838 ; N uni2707 ; G 3746
U 9992 ; WX 838 ; N uni2708 ; G 3747
U 9993 ; WX 838 ; N uni2709 ; G 3748
U 9996 ; WX 838 ; N uni270C ; G 3749
U 9997 ; WX 838 ; N uni270D ; G 3750
U 9998 ; WX 838 ; N uni270E ; G 3751
U 9999 ; WX 838 ; N uni270F ; G 3752
U 10000 ; WX 838 ; N uni2710 ; G 3753
U 10001 ; WX 838 ; N uni2711 ; G 3754
U 10002 ; WX 838 ; N uni2712 ; G 3755
U 10003 ; WX 838 ; N uni2713 ; G 3756
U 10004 ; WX 838 ; N uni2714 ; G 3757
U 10005 ; WX 838 ; N uni2715 ; G 3758
U 10006 ; WX 838 ; N uni2716 ; G 3759
U 10007 ; WX 838 ; N uni2717 ; G 3760
U 10008 ; WX 838 ; N uni2718 ; G 3761
U 10009 ; WX 838 ; N uni2719 ; G 3762
U 10010 ; WX 838 ; N uni271A ; G 3763
U 10011 ; WX 838 ; N uni271B ; G 3764
U 10012 ; WX 838 ; N uni271C ; G 3765
U 10013 ; WX 838 ; N uni271D ; G 3766
U 10014 ; WX 838 ; N uni271E ; G 3767
U 10015 ; WX 838 ; N uni271F ; G 3768
U 10016 ; WX 838 ; N uni2720 ; G 3769
U 10017 ; WX 838 ; N uni2721 ; G 3770
U 10018 ; WX 838 ; N uni2722 ; G 3771
U 10019 ; WX 838 ; N uni2723 ; G 3772
U 10020 ; WX 838 ; N uni2724 ; G 3773
U 10021 ; WX 838 ; N uni2725 ; G 3774
U 10022 ; WX 838 ; N uni2726 ; G 3775
U 10023 ; WX 838 ; N uni2727 ; G 3776
U 10025 ; WX 838 ; N uni2729 ; G 3777
U 10026 ; WX 838 ; N uni272A ; G 3778
U 10027 ; WX 838 ; N uni272B ; G 3779
U 10028 ; WX 838 ; N uni272C ; G 3780
U 10029 ; WX 838 ; N uni272D ; G 3781
U 10030 ; WX 838 ; N uni272E ; G 3782
U 10031 ; WX 838 ; N uni272F ; G 3783
U 10032 ; WX 838 ; N uni2730 ; G 3784
U 10033 ; WX 838 ; N uni2731 ; G 3785
U 10034 ; WX 838 ; N uni2732 ; G 3786
U 10035 ; WX 838 ; N uni2733 ; G 3787
U 10036 ; WX 838 ; N uni2734 ; G 3788
U 10037 ; WX 838 ; N uni2735 ; G 3789
U 10038 ; WX 838 ; N uni2736 ; G 3790
U 10039 ; WX 838 ; N uni2737 ; G 3791
U 10040 ; WX 838 ; N uni2738 ; G 3792
U 10041 ; WX 838 ; N uni2739 ; G 3793
U 10042 ; WX 838 ; N uni273A ; G 3794
U 10043 ; WX 838 ; N uni273B ; G 3795
U 10044 ; WX 838 ; N uni273C ; G 3796
U 10045 ; WX 838 ; N uni273D ; G 3797
U 10046 ; WX 838 ; N uni273E ; G 3798
U 10047 ; WX 838 ; N uni273F ; G 3799
U 10048 ; WX 838 ; N uni2740 ; G 3800
U 10049 ; WX 838 ; N uni2741 ; G 3801
U 10050 ; WX 838 ; N uni2742 ; G 3802
U 10051 ; WX 838 ; N uni2743 ; G 3803
U 10052 ; WX 838 ; N uni2744 ; G 3804
U 10053 ; WX 838 ; N uni2745 ; G 3805
U 10054 ; WX 838 ; N uni2746 ; G 3806
U 10055 ; WX 838 ; N uni2747 ; G 3807
U 10056 ; WX 838 ; N uni2748 ; G 3808
U 10057 ; WX 838 ; N uni2749 ; G 3809
U 10058 ; WX 838 ; N uni274A ; G 3810
U 10059 ; WX 838 ; N uni274B ; G 3811
U 10061 ; WX 896 ; N uni274D ; G 3812
U 10063 ; WX 896 ; N uni274F ; G 3813
U 10064 ; WX 896 ; N uni2750 ; G 3814
U 10065 ; WX 896 ; N uni2751 ; G 3815
U 10066 ; WX 896 ; N uni2752 ; G 3816
U 10070 ; WX 896 ; N uni2756 ; G 3817
U 10072 ; WX 838 ; N uni2758 ; G 3818
U 10073 ; WX 838 ; N uni2759 ; G 3819
U 10074 ; WX 838 ; N uni275A ; G 3820
U 10075 ; WX 322 ; N uni275B ; G 3821
U 10076 ; WX 322 ; N uni275C ; G 3822
U 10077 ; WX 538 ; N uni275D ; G 3823
U 10078 ; WX 538 ; N uni275E ; G 3824
U 10081 ; WX 838 ; N uni2761 ; G 3825
U 10082 ; WX 838 ; N uni2762 ; G 3826
U 10083 ; WX 838 ; N uni2763 ; G 3827
U 10084 ; WX 838 ; N uni2764 ; G 3828
U 10085 ; WX 838 ; N uni2765 ; G 3829
U 10086 ; WX 838 ; N uni2766 ; G 3830
U 10087 ; WX 838 ; N uni2767 ; G 3831
U 10088 ; WX 838 ; N uni2768 ; G 3832
U 10089 ; WX 838 ; N uni2769 ; G 3833
U 10090 ; WX 838 ; N uni276A ; G 3834
U 10091 ; WX 838 ; N uni276B ; G 3835
U 10092 ; WX 838 ; N uni276C ; G 3836
U 10093 ; WX 838 ; N uni276D ; G 3837
U 10094 ; WX 838 ; N uni276E ; G 3838
U 10095 ; WX 838 ; N uni276F ; G 3839
U 10096 ; WX 838 ; N uni2770 ; G 3840
U 10097 ; WX 838 ; N uni2771 ; G 3841
U 10098 ; WX 838 ; N uni2772 ; G 3842
U 10099 ; WX 838 ; N uni2773 ; G 3843
U 10100 ; WX 838 ; N uni2774 ; G 3844
U 10101 ; WX 838 ; N uni2775 ; G 3845
U 10102 ; WX 847 ; N uni2776 ; G 3846
U 10103 ; WX 847 ; N uni2777 ; G 3847
U 10104 ; WX 847 ; N uni2778 ; G 3848
U 10105 ; WX 847 ; N uni2779 ; G 3849
U 10106 ; WX 847 ; N uni277A ; G 3850
U 10107 ; WX 847 ; N uni277B ; G 3851
U 10108 ; WX 847 ; N uni277C ; G 3852
U 10109 ; WX 847 ; N uni277D ; G 3853
U 10110 ; WX 847 ; N uni277E ; G 3854
U 10111 ; WX 847 ; N uni277F ; G 3855
U 10112 ; WX 838 ; N uni2780 ; G 3856
U 10113 ; WX 838 ; N uni2781 ; G 3857
U 10114 ; WX 838 ; N uni2782 ; G 3858
U 10115 ; WX 838 ; N uni2783 ; G 3859
U 10116 ; WX 838 ; N uni2784 ; G 3860
U 10117 ; WX 838 ; N uni2785 ; G 3861
U 10118 ; WX 838 ; N uni2786 ; G 3862
U 10119 ; WX 838 ; N uni2787 ; G 3863
U 10120 ; WX 838 ; N uni2788 ; G 3864
U 10121 ; WX 838 ; N uni2789 ; G 3865
U 10122 ; WX 838 ; N uni278A ; G 3866
U 10123 ; WX 838 ; N uni278B ; G 3867
U 10124 ; WX 838 ; N uni278C ; G 3868
U 10125 ; WX 838 ; N uni278D ; G 3869
U 10126 ; WX 838 ; N uni278E ; G 3870
U 10127 ; WX 838 ; N uni278F ; G 3871
U 10128 ; WX 838 ; N uni2790 ; G 3872
U 10129 ; WX 838 ; N uni2791 ; G 3873
U 10130 ; WX 838 ; N uni2792 ; G 3874
U 10131 ; WX 838 ; N uni2793 ; G 3875
U 10132 ; WX 838 ; N uni2794 ; G 3876
U 10136 ; WX 838 ; N uni2798 ; G 3877
U 10137 ; WX 838 ; N uni2799 ; G 3878
U 10138 ; WX 838 ; N uni279A ; G 3879
U 10139 ; WX 838 ; N uni279B ; G 3880
U 10140 ; WX 838 ; N uni279C ; G 3881
U 10141 ; WX 838 ; N uni279D ; G 3882
U 10142 ; WX 838 ; N uni279E ; G 3883
U 10143 ; WX 838 ; N uni279F ; G 3884
U 10144 ; WX 838 ; N uni27A0 ; G 3885
U 10145 ; WX 838 ; N uni27A1 ; G 3886
U 10146 ; WX 838 ; N uni27A2 ; G 3887
U 10147 ; WX 838 ; N uni27A3 ; G 3888
U 10148 ; WX 838 ; N uni27A4 ; G 3889
U 10149 ; WX 838 ; N uni27A5 ; G 3890
U 10150 ; WX 838 ; N uni27A6 ; G 3891
U 10151 ; WX 838 ; N uni27A7 ; G 3892
U 10152 ; WX 838 ; N uni27A8 ; G 3893
U 10153 ; WX 838 ; N uni27A9 ; G 3894
U 10154 ; WX 838 ; N uni27AA ; G 3895
U 10155 ; WX 838 ; N uni27AB ; G 3896
U 10156 ; WX 838 ; N uni27AC ; G 3897
U 10157 ; WX 838 ; N uni27AD ; G 3898
U 10158 ; WX 838 ; N uni27AE ; G 3899
U 10159 ; WX 838 ; N uni27AF ; G 3900
U 10161 ; WX 838 ; N uni27B1 ; G 3901
U 10162 ; WX 838 ; N uni27B2 ; G 3902
U 10163 ; WX 838 ; N uni27B3 ; G 3903
U 10164 ; WX 838 ; N uni27B4 ; G 3904
U 10165 ; WX 838 ; N uni27B5 ; G 3905
U 10166 ; WX 838 ; N uni27B6 ; G 3906
U 10167 ; WX 838 ; N uni27B7 ; G 3907
U 10168 ; WX 838 ; N uni27B8 ; G 3908
U 10169 ; WX 838 ; N uni27B9 ; G 3909
U 10170 ; WX 838 ; N uni27BA ; G 3910
U 10171 ; WX 838 ; N uni27BB ; G 3911
U 10172 ; WX 838 ; N uni27BC ; G 3912
U 10173 ; WX 838 ; N uni27BD ; G 3913
U 10174 ; WX 838 ; N uni27BE ; G 3914
U 10181 ; WX 457 ; N uni27C5 ; G 3915
U 10182 ; WX 457 ; N uni27C6 ; G 3916
U 10208 ; WX 494 ; N uni27E0 ; G 3917
U 10214 ; WX 487 ; N uni27E6 ; G 3918
U 10215 ; WX 487 ; N uni27E7 ; G 3919
U 10216 ; WX 457 ; N uni27E8 ; G 3920
U 10217 ; WX 457 ; N uni27E9 ; G 3921
U 10218 ; WX 721 ; N uni27EA ; G 3922
U 10219 ; WX 721 ; N uni27EB ; G 3923
U 10224 ; WX 838 ; N uni27F0 ; G 3924
U 10225 ; WX 838 ; N uni27F1 ; G 3925
U 10226 ; WX 838 ; N uni27F2 ; G 3926
U 10227 ; WX 838 ; N uni27F3 ; G 3927
U 10228 ; WX 1157 ; N uni27F4 ; G 3928
U 10229 ; WX 1434 ; N uni27F5 ; G 3929
U 10230 ; WX 1434 ; N uni27F6 ; G 3930
U 10231 ; WX 1434 ; N uni27F7 ; G 3931
U 10232 ; WX 1434 ; N uni27F8 ; G 3932
U 10233 ; WX 1434 ; N uni27F9 ; G 3933
U 10234 ; WX 1434 ; N uni27FA ; G 3934
U 10235 ; WX 1434 ; N uni27FB ; G 3935
U 10236 ; WX 1434 ; N uni27FC ; G 3936
U 10237 ; WX 1434 ; N uni27FD ; G 3937
U 10238 ; WX 1434 ; N uni27FE ; G 3938
U 10239 ; WX 1434 ; N uni27FF ; G 3939
U 10240 ; WX 781 ; N uni2800 ; G 3940
U 10241 ; WX 781 ; N uni2801 ; G 3941
U 10242 ; WX 781 ; N uni2802 ; G 3942
U 10243 ; WX 781 ; N uni2803 ; G 3943
U 10244 ; WX 781 ; N uni2804 ; G 3944
U 10245 ; WX 781 ; N uni2805 ; G 3945
U 10246 ; WX 781 ; N uni2806 ; G 3946
U 10247 ; WX 781 ; N uni2807 ; G 3947
U 10248 ; WX 781 ; N uni2808 ; G 3948
U 10249 ; WX 781 ; N uni2809 ; G 3949
U 10250 ; WX 781 ; N uni280A ; G 3950
U 10251 ; WX 781 ; N uni280B ; G 3951
U 10252 ; WX 781 ; N uni280C ; G 3952
U 10253 ; WX 781 ; N uni280D ; G 3953
U 10254 ; WX 781 ; N uni280E ; G 3954
U 10255 ; WX 781 ; N uni280F ; G 3955
U 10256 ; WX 781 ; N uni2810 ; G 3956
U 10257 ; WX 781 ; N uni2811 ; G 3957
U 10258 ; WX 781 ; N uni2812 ; G 3958
U 10259 ; WX 781 ; N uni2813 ; G 3959
U 10260 ; WX 781 ; N uni2814 ; G 3960
U 10261 ; WX 781 ; N uni2815 ; G 3961
U 10262 ; WX 781 ; N uni2816 ; G 3962
U 10263 ; WX 781 ; N uni2817 ; G 3963
U 10264 ; WX 781 ; N uni2818 ; G 3964
U 10265 ; WX 781 ; N uni2819 ; G 3965
U 10266 ; WX 781 ; N uni281A ; G 3966
U 10267 ; WX 781 ; N uni281B ; G 3967
U 10268 ; WX 781 ; N uni281C ; G 3968
U 10269 ; WX 781 ; N uni281D ; G 3969
U 10270 ; WX 781 ; N uni281E ; G 3970
U 10271 ; WX 781 ; N uni281F ; G 3971
U 10272 ; WX 781 ; N uni2820 ; G 3972
U 10273 ; WX 781 ; N uni2821 ; G 3973
U 10274 ; WX 781 ; N uni2822 ; G 3974
U 10275 ; WX 781 ; N uni2823 ; G 3975
U 10276 ; WX 781 ; N uni2824 ; G 3976
U 10277 ; WX 781 ; N uni2825 ; G 3977
U 10278 ; WX 781 ; N uni2826 ; G 3978
U 10279 ; WX 781 ; N uni2827 ; G 3979
U 10280 ; WX 781 ; N uni2828 ; G 3980
U 10281 ; WX 781 ; N uni2829 ; G 3981
U 10282 ; WX 781 ; N uni282A ; G 3982
U 10283 ; WX 781 ; N uni282B ; G 3983
U 10284 ; WX 781 ; N uni282C ; G 3984
U 10285 ; WX 781 ; N uni282D ; G 3985
U 10286 ; WX 781 ; N uni282E ; G 3986
U 10287 ; WX 781 ; N uni282F ; G 3987
U 10288 ; WX 781 ; N uni2830 ; G 3988
U 10289 ; WX 781 ; N uni2831 ; G 3989
U 10290 ; WX 781 ; N uni2832 ; G 3990
U 10291 ; WX 781 ; N uni2833 ; G 3991
U 10292 ; WX 781 ; N uni2834 ; G 3992
U 10293 ; WX 781 ; N uni2835 ; G 3993
U 10294 ; WX 781 ; N uni2836 ; G 3994
U 10295 ; WX 781 ; N uni2837 ; G 3995
U 10296 ; WX 781 ; N uni2838 ; G 3996
U 10297 ; WX 781 ; N uni2839 ; G 3997
U 10298 ; WX 781 ; N uni283A ; G 3998
U 10299 ; WX 781 ; N uni283B ; G 3999
U 10300 ; WX 781 ; N uni283C ; G 4000
U 10301 ; WX 781 ; N uni283D ; G 4001
U 10302 ; WX 781 ; N uni283E ; G 4002
U 10303 ; WX 781 ; N uni283F ; G 4003
U 10304 ; WX 781 ; N uni2840 ; G 4004
U 10305 ; WX 781 ; N uni2841 ; G 4005
U 10306 ; WX 781 ; N uni2842 ; G 4006
U 10307 ; WX 781 ; N uni2843 ; G 4007
U 10308 ; WX 781 ; N uni2844 ; G 4008
U 10309 ; WX 781 ; N uni2845 ; G 4009
U 10310 ; WX 781 ; N uni2846 ; G 4010
U 10311 ; WX 781 ; N uni2847 ; G 4011
U 10312 ; WX 781 ; N uni2848 ; G 4012
U 10313 ; WX 781 ; N uni2849 ; G 4013
U 10314 ; WX 781 ; N uni284A ; G 4014
U 10315 ; WX 781 ; N uni284B ; G 4015
U 10316 ; WX 781 ; N uni284C ; G 4016
U 10317 ; WX 781 ; N uni284D ; G 4017
U 10318 ; WX 781 ; N uni284E ; G 4018
U 10319 ; WX 781 ; N uni284F ; G 4019
U 10320 ; WX 781 ; N uni2850 ; G 4020
U 10321 ; WX 781 ; N uni2851 ; G 4021
U 10322 ; WX 781 ; N uni2852 ; G 4022
U 10323 ; WX 781 ; N uni2853 ; G 4023
U 10324 ; WX 781 ; N uni2854 ; G 4024
U 10325 ; WX 781 ; N uni2855 ; G 4025
U 10326 ; WX 781 ; N uni2856 ; G 4026
U 10327 ; WX 781 ; N uni2857 ; G 4027
U 10328 ; WX 781 ; N uni2858 ; G 4028
U 10329 ; WX 781 ; N uni2859 ; G 4029
U 10330 ; WX 781 ; N uni285A ; G 4030
U 10331 ; WX 781 ; N uni285B ; G 4031
U 10332 ; WX 781 ; N uni285C ; G 4032
U 10333 ; WX 781 ; N uni285D ; G 4033
U 10334 ; WX 781 ; N uni285E ; G 4034
U 10335 ; WX 781 ; N uni285F ; G 4035
U 10336 ; WX 781 ; N uni2860 ; G 4036
U 10337 ; WX 781 ; N uni2861 ; G 4037
U 10338 ; WX 781 ; N uni2862 ; G 4038
U 10339 ; WX 781 ; N uni2863 ; G 4039
U 10340 ; WX 781 ; N uni2864 ; G 4040
U 10341 ; WX 781 ; N uni2865 ; G 4041
U 10342 ; WX 781 ; N uni2866 ; G 4042
U 10343 ; WX 781 ; N uni2867 ; G 4043
U 10344 ; WX 781 ; N uni2868 ; G 4044
U 10345 ; WX 781 ; N uni2869 ; G 4045
U 10346 ; WX 781 ; N uni286A ; G 4046
U 10347 ; WX 781 ; N uni286B ; G 4047
U 10348 ; WX 781 ; N uni286C ; G 4048
U 10349 ; WX 781 ; N uni286D ; G 4049
U 10350 ; WX 781 ; N uni286E ; G 4050
U 10351 ; WX 781 ; N uni286F ; G 4051
U 10352 ; WX 781 ; N uni2870 ; G 4052
U 10353 ; WX 781 ; N uni2871 ; G 4053
U 10354 ; WX 781 ; N uni2872 ; G 4054
U 10355 ; WX 781 ; N uni2873 ; G 4055
U 10356 ; WX 781 ; N uni2874 ; G 4056
U 10357 ; WX 781 ; N uni2875 ; G 4057
U 10358 ; WX 781 ; N uni2876 ; G 4058
U 10359 ; WX 781 ; N uni2877 ; G 4059
U 10360 ; WX 781 ; N uni2878 ; G 4060
U 10361 ; WX 781 ; N uni2879 ; G 4061
U 10362 ; WX 781 ; N uni287A ; G 4062
U 10363 ; WX 781 ; N uni287B ; G 4063
U 10364 ; WX 781 ; N uni287C ; G 4064
U 10365 ; WX 781 ; N uni287D ; G 4065
U 10366 ; WX 781 ; N uni287E ; G 4066
U 10367 ; WX 781 ; N uni287F ; G 4067
U 10368 ; WX 781 ; N uni2880 ; G 4068
U 10369 ; WX 781 ; N uni2881 ; G 4069
U 10370 ; WX 781 ; N uni2882 ; G 4070
U 10371 ; WX 781 ; N uni2883 ; G 4071
U 10372 ; WX 781 ; N uni2884 ; G 4072
U 10373 ; WX 781 ; N uni2885 ; G 4073
U 10374 ; WX 781 ; N uni2886 ; G 4074
U 10375 ; WX 781 ; N uni2887 ; G 4075
U 10376 ; WX 781 ; N uni2888 ; G 4076
U 10377 ; WX 781 ; N uni2889 ; G 4077
U 10378 ; WX 781 ; N uni288A ; G 4078
U 10379 ; WX 781 ; N uni288B ; G 4079
U 10380 ; WX 781 ; N uni288C ; G 4080
U 10381 ; WX 781 ; N uni288D ; G 4081
U 10382 ; WX 781 ; N uni288E ; G 4082
U 10383 ; WX 781 ; N uni288F ; G 4083
U 10384 ; WX 781 ; N uni2890 ; G 4084
U 10385 ; WX 781 ; N uni2891 ; G 4085
U 10386 ; WX 781 ; N uni2892 ; G 4086
U 10387 ; WX 781 ; N uni2893 ; G 4087
U 10388 ; WX 781 ; N uni2894 ; G 4088
U 10389 ; WX 781 ; N uni2895 ; G 4089
U 10390 ; WX 781 ; N uni2896 ; G 4090
U 10391 ; WX 781 ; N uni2897 ; G 4091
U 10392 ; WX 781 ; N uni2898 ; G 4092
U 10393 ; WX 781 ; N uni2899 ; G 4093
U 10394 ; WX 781 ; N uni289A ; G 4094
U 10395 ; WX 781 ; N uni289B ; G 4095
U 10396 ; WX 781 ; N uni289C ; G 4096
U 10397 ; WX 781 ; N uni289D ; G 4097
U 10398 ; WX 781 ; N uni289E ; G 4098
U 10399 ; WX 781 ; N uni289F ; G 4099
U 10400 ; WX 781 ; N uni28A0 ; G 4100
U 10401 ; WX 781 ; N uni28A1 ; G 4101
U 10402 ; WX 781 ; N uni28A2 ; G 4102
U 10403 ; WX 781 ; N uni28A3 ; G 4103
U 10404 ; WX 781 ; N uni28A4 ; G 4104
U 10405 ; WX 781 ; N uni28A5 ; G 4105
U 10406 ; WX 781 ; N uni28A6 ; G 4106
U 10407 ; WX 781 ; N uni28A7 ; G 4107
U 10408 ; WX 781 ; N uni28A8 ; G 4108
U 10409 ; WX 781 ; N uni28A9 ; G 4109
U 10410 ; WX 781 ; N uni28AA ; G 4110
U 10411 ; WX 781 ; N uni28AB ; G 4111
U 10412 ; WX 781 ; N uni28AC ; G 4112
U 10413 ; WX 781 ; N uni28AD ; G 4113
U 10414 ; WX 781 ; N uni28AE ; G 4114
U 10415 ; WX 781 ; N uni28AF ; G 4115
U 10416 ; WX 781 ; N uni28B0 ; G 4116
U 10417 ; WX 781 ; N uni28B1 ; G 4117
U 10418 ; WX 781 ; N uni28B2 ; G 4118
U 10419 ; WX 781 ; N uni28B3 ; G 4119
U 10420 ; WX 781 ; N uni28B4 ; G 4120
U 10421 ; WX 781 ; N uni28B5 ; G 4121
U 10422 ; WX 781 ; N uni28B6 ; G 4122
U 10423 ; WX 781 ; N uni28B7 ; G 4123
U 10424 ; WX 781 ; N uni28B8 ; G 4124
U 10425 ; WX 781 ; N uni28B9 ; G 4125
U 10426 ; WX 781 ; N uni28BA ; G 4126
U 10427 ; WX 781 ; N uni28BB ; G 4127
U 10428 ; WX 781 ; N uni28BC ; G 4128
U 10429 ; WX 781 ; N uni28BD ; G 4129
U 10430 ; WX 781 ; N uni28BE ; G 4130
U 10431 ; WX 781 ; N uni28BF ; G 4131
U 10432 ; WX 781 ; N uni28C0 ; G 4132
U 10433 ; WX 781 ; N uni28C1 ; G 4133
U 10434 ; WX 781 ; N uni28C2 ; G 4134
U 10435 ; WX 781 ; N uni28C3 ; G 4135
U 10436 ; WX 781 ; N uni28C4 ; G 4136
U 10437 ; WX 781 ; N uni28C5 ; G 4137
U 10438 ; WX 781 ; N uni28C6 ; G 4138
U 10439 ; WX 781 ; N uni28C7 ; G 4139
U 10440 ; WX 781 ; N uni28C8 ; G 4140
U 10441 ; WX 781 ; N uni28C9 ; G 4141
U 10442 ; WX 781 ; N uni28CA ; G 4142
U 10443 ; WX 781 ; N uni28CB ; G 4143
U 10444 ; WX 781 ; N uni28CC ; G 4144
U 10445 ; WX 781 ; N uni28CD ; G 4145
U 10446 ; WX 781 ; N uni28CE ; G 4146
U 10447 ; WX 781 ; N uni28CF ; G 4147
U 10448 ; WX 781 ; N uni28D0 ; G 4148
U 10449 ; WX 781 ; N uni28D1 ; G 4149
U 10450 ; WX 781 ; N uni28D2 ; G 4150
U 10451 ; WX 781 ; N uni28D3 ; G 4151
U 10452 ; WX 781 ; N uni28D4 ; G 4152
U 10453 ; WX 781 ; N uni28D5 ; G 4153
U 10454 ; WX 781 ; N uni28D6 ; G 4154
U 10455 ; WX 781 ; N uni28D7 ; G 4155
U 10456 ; WX 781 ; N uni28D8 ; G 4156
U 10457 ; WX 781 ; N uni28D9 ; G 4157
U 10458 ; WX 781 ; N uni28DA ; G 4158
U 10459 ; WX 781 ; N uni28DB ; G 4159
U 10460 ; WX 781 ; N uni28DC ; G 4160
U 10461 ; WX 781 ; N uni28DD ; G 4161
U 10462 ; WX 781 ; N uni28DE ; G 4162
U 10463 ; WX 781 ; N uni28DF ; G 4163
U 10464 ; WX 781 ; N uni28E0 ; G 4164
U 10465 ; WX 781 ; N uni28E1 ; G 4165
U 10466 ; WX 781 ; N uni28E2 ; G 4166
U 10467 ; WX 781 ; N uni28E3 ; G 4167
U 10468 ; WX 781 ; N uni28E4 ; G 4168
U 10469 ; WX 781 ; N uni28E5 ; G 4169
U 10470 ; WX 781 ; N uni28E6 ; G 4170
U 10471 ; WX 781 ; N uni28E7 ; G 4171
U 10472 ; WX 781 ; N uni28E8 ; G 4172
U 10473 ; WX 781 ; N uni28E9 ; G 4173
U 10474 ; WX 781 ; N uni28EA ; G 4174
U 10475 ; WX 781 ; N uni28EB ; G 4175
U 10476 ; WX 781 ; N uni28EC ; G 4176
U 10477 ; WX 781 ; N uni28ED ; G 4177
U 10478 ; WX 781 ; N uni28EE ; G 4178
U 10479 ; WX 781 ; N uni28EF ; G 4179
U 10480 ; WX 781 ; N uni28F0 ; G 4180
U 10481 ; WX 781 ; N uni28F1 ; G 4181
U 10482 ; WX 781 ; N uni28F2 ; G 4182
U 10483 ; WX 781 ; N uni28F3 ; G 4183
U 10484 ; WX 781 ; N uni28F4 ; G 4184
U 10485 ; WX 781 ; N uni28F5 ; G 4185
U 10486 ; WX 781 ; N uni28F6 ; G 4186
U 10487 ; WX 781 ; N uni28F7 ; G 4187
U 10488 ; WX 781 ; N uni28F8 ; G 4188
U 10489 ; WX 781 ; N uni28F9 ; G 4189
U 10490 ; WX 781 ; N uni28FA ; G 4190
U 10491 ; WX 781 ; N uni28FB ; G 4191
U 10492 ; WX 781 ; N uni28FC ; G 4192
U 10493 ; WX 781 ; N uni28FD ; G 4193
U 10494 ; WX 781 ; N uni28FE ; G 4194
U 10495 ; WX 781 ; N uni28FF ; G 4195
U 10502 ; WX 838 ; N uni2906 ; G 4196
U 10503 ; WX 838 ; N uni2907 ; G 4197
U 10506 ; WX 838 ; N uni290A ; G 4198
U 10507 ; WX 838 ; N uni290B ; G 4199
U 10560 ; WX 838 ; N uni2940 ; G 4200
U 10561 ; WX 838 ; N uni2941 ; G 4201
U 10627 ; WX 753 ; N uni2983 ; G 4202
U 10628 ; WX 753 ; N uni2984 ; G 4203
U 10702 ; WX 838 ; N uni29CE ; G 4204
U 10703 ; WX 1046 ; N uni29CF ; G 4205
U 10704 ; WX 1046 ; N uni29D0 ; G 4206
U 10705 ; WX 1000 ; N uni29D1 ; G 4207
U 10706 ; WX 1000 ; N uni29D2 ; G 4208
U 10707 ; WX 1000 ; N uni29D3 ; G 4209
U 10708 ; WX 1000 ; N uni29D4 ; G 4210
U 10709 ; WX 1000 ; N uni29D5 ; G 4211
U 10731 ; WX 494 ; N uni29EB ; G 4212
U 10746 ; WX 838 ; N uni29FA ; G 4213
U 10747 ; WX 838 ; N uni29FB ; G 4214
U 10752 ; WX 1000 ; N uni2A00 ; G 4215
U 10753 ; WX 1000 ; N uni2A01 ; G 4216
U 10754 ; WX 1000 ; N uni2A02 ; G 4217
U 10764 ; WX 1661 ; N uni2A0C ; G 4218
U 10765 ; WX 563 ; N uni2A0D ; G 4219
U 10766 ; WX 563 ; N uni2A0E ; G 4220
U 10767 ; WX 563 ; N uni2A0F ; G 4221
U 10768 ; WX 563 ; N uni2A10 ; G 4222
U 10769 ; WX 563 ; N uni2A11 ; G 4223
U 10770 ; WX 563 ; N uni2A12 ; G 4224
U 10771 ; WX 563 ; N uni2A13 ; G 4225
U 10772 ; WX 563 ; N uni2A14 ; G 4226
U 10773 ; WX 563 ; N uni2A15 ; G 4227
U 10774 ; WX 563 ; N uni2A16 ; G 4228
U 10775 ; WX 563 ; N uni2A17 ; G 4229
U 10776 ; WX 563 ; N uni2A18 ; G 4230
U 10777 ; WX 563 ; N uni2A19 ; G 4231
U 10778 ; WX 563 ; N uni2A1A ; G 4232
U 10779 ; WX 563 ; N uni2A1B ; G 4233
U 10780 ; WX 563 ; N uni2A1C ; G 4234
U 10799 ; WX 838 ; N uni2A2F ; G 4235
U 10858 ; WX 838 ; N uni2A6A ; G 4236
U 10859 ; WX 838 ; N uni2A6B ; G 4237
U 10877 ; WX 838 ; N uni2A7D ; G 4238
U 10878 ; WX 838 ; N uni2A7E ; G 4239
U 10879 ; WX 838 ; N uni2A7F ; G 4240
U 10880 ; WX 838 ; N uni2A80 ; G 4241
U 10881 ; WX 838 ; N uni2A81 ; G 4242
U 10882 ; WX 838 ; N uni2A82 ; G 4243
U 10883 ; WX 838 ; N uni2A83 ; G 4244
U 10884 ; WX 838 ; N uni2A84 ; G 4245
U 10885 ; WX 838 ; N uni2A85 ; G 4246
U 10886 ; WX 838 ; N uni2A86 ; G 4247
U 10887 ; WX 838 ; N uni2A87 ; G 4248
U 10888 ; WX 838 ; N uni2A88 ; G 4249
U 10889 ; WX 838 ; N uni2A89 ; G 4250
U 10890 ; WX 838 ; N uni2A8A ; G 4251
U 10891 ; WX 838 ; N uni2A8B ; G 4252
U 10892 ; WX 838 ; N uni2A8C ; G 4253
U 10893 ; WX 838 ; N uni2A8D ; G 4254
U 10894 ; WX 838 ; N uni2A8E ; G 4255
U 10895 ; WX 838 ; N uni2A8F ; G 4256
U 10896 ; WX 838 ; N uni2A90 ; G 4257
U 10897 ; WX 838 ; N uni2A91 ; G 4258
U 10898 ; WX 838 ; N uni2A92 ; G 4259
U 10899 ; WX 838 ; N uni2A93 ; G 4260
U 10900 ; WX 838 ; N uni2A94 ; G 4261
U 10901 ; WX 838 ; N uni2A95 ; G 4262
U 10902 ; WX 838 ; N uni2A96 ; G 4263
U 10903 ; WX 838 ; N uni2A97 ; G 4264
U 10904 ; WX 838 ; N uni2A98 ; G 4265
U 10905 ; WX 838 ; N uni2A99 ; G 4266
U 10906 ; WX 838 ; N uni2A9A ; G 4267
U 10907 ; WX 838 ; N uni2A9B ; G 4268
U 10908 ; WX 838 ; N uni2A9C ; G 4269
U 10909 ; WX 838 ; N uni2A9D ; G 4270
U 10910 ; WX 838 ; N uni2A9E ; G 4271
U 10911 ; WX 838 ; N uni2A9F ; G 4272
U 10912 ; WX 838 ; N uni2AA0 ; G 4273
U 10926 ; WX 838 ; N uni2AAE ; G 4274
U 10927 ; WX 838 ; N uni2AAF ; G 4275
U 10928 ; WX 838 ; N uni2AB0 ; G 4276
U 10929 ; WX 838 ; N uni2AB1 ; G 4277
U 10930 ; WX 838 ; N uni2AB2 ; G 4278
U 10931 ; WX 838 ; N uni2AB3 ; G 4279
U 10932 ; WX 838 ; N uni2AB4 ; G 4280
U 10933 ; WX 838 ; N uni2AB5 ; G 4281
U 10934 ; WX 838 ; N uni2AB6 ; G 4282
U 10935 ; WX 838 ; N uni2AB7 ; G 4283
U 10936 ; WX 838 ; N uni2AB8 ; G 4284
U 10937 ; WX 838 ; N uni2AB9 ; G 4285
U 10938 ; WX 838 ; N uni2ABA ; G 4286
U 11001 ; WX 838 ; N uni2AF9 ; G 4287
U 11002 ; WX 838 ; N uni2AFA ; G 4288
U 11008 ; WX 838 ; N uni2B00 ; G 4289
U 11009 ; WX 838 ; N uni2B01 ; G 4290
U 11010 ; WX 838 ; N uni2B02 ; G 4291
U 11011 ; WX 838 ; N uni2B03 ; G 4292
U 11012 ; WX 838 ; N uni2B04 ; G 4293
U 11013 ; WX 838 ; N uni2B05 ; G 4294
U 11014 ; WX 838 ; N uni2B06 ; G 4295
U 11015 ; WX 838 ; N uni2B07 ; G 4296
U 11016 ; WX 838 ; N uni2B08 ; G 4297
U 11017 ; WX 838 ; N uni2B09 ; G 4298
U 11018 ; WX 838 ; N uni2B0A ; G 4299
U 11019 ; WX 838 ; N uni2B0B ; G 4300
U 11020 ; WX 838 ; N uni2B0C ; G 4301
U 11021 ; WX 838 ; N uni2B0D ; G 4302
U 11022 ; WX 838 ; N uni2B0E ; G 4303
U 11023 ; WX 838 ; N uni2B0F ; G 4304
U 11024 ; WX 838 ; N uni2B10 ; G 4305
U 11025 ; WX 838 ; N uni2B11 ; G 4306
U 11026 ; WX 945 ; N uni2B12 ; G 4307
U 11027 ; WX 945 ; N uni2B13 ; G 4308
U 11028 ; WX 945 ; N uni2B14 ; G 4309
U 11029 ; WX 945 ; N uni2B15 ; G 4310
U 11030 ; WX 769 ; N uni2B16 ; G 4311
U 11031 ; WX 769 ; N uni2B17 ; G 4312
U 11032 ; WX 769 ; N uni2B18 ; G 4313
U 11033 ; WX 769 ; N uni2B19 ; G 4314
U 11034 ; WX 945 ; N uni2B1A ; G 4315
U 11039 ; WX 869 ; N uni2B1F ; G 4316
U 11040 ; WX 869 ; N uni2B20 ; G 4317
U 11041 ; WX 873 ; N uni2B21 ; G 4318
U 11042 ; WX 873 ; N uni2B22 ; G 4319
U 11043 ; WX 873 ; N uni2B23 ; G 4320
U 11044 ; WX 1119 ; N uni2B24 ; G 4321
U 11091 ; WX 869 ; N uni2B53 ; G 4322
U 11092 ; WX 869 ; N uni2B54 ; G 4323
U 11360 ; WX 637 ; N uni2C60 ; G 4324
U 11361 ; WX 360 ; N uni2C61 ; G 4325
U 11362 ; WX 637 ; N uni2C62 ; G 4326
U 11363 ; WX 733 ; N uni2C63 ; G 4327
U 11364 ; WX 770 ; N uni2C64 ; G 4328
U 11365 ; WX 675 ; N uni2C65 ; G 4329
U 11366 ; WX 478 ; N uni2C66 ; G 4330
U 11367 ; WX 956 ; N uni2C67 ; G 4331
U 11368 ; WX 712 ; N uni2C68 ; G 4332
U 11369 ; WX 775 ; N uni2C69 ; G 4333
U 11370 ; WX 665 ; N uni2C6A ; G 4334
U 11371 ; WX 725 ; N uni2C6B ; G 4335
U 11372 ; WX 582 ; N uni2C6C ; G 4336
U 11373 ; WX 860 ; N uni2C6D ; G 4337
U 11374 ; WX 995 ; N uni2C6E ; G 4338
U 11375 ; WX 774 ; N uni2C6F ; G 4339
U 11376 ; WX 860 ; N uni2C70 ; G 4340
U 11377 ; WX 778 ; N uni2C71 ; G 4341
U 11378 ; WX 1221 ; N uni2C72 ; G 4342
U 11379 ; WX 1056 ; N uni2C73 ; G 4343
U 11380 ; WX 652 ; N uni2C74 ; G 4344
U 11381 ; WX 698 ; N uni2C75 ; G 4345
U 11382 ; WX 565 ; N uni2C76 ; G 4346
U 11383 ; WX 782 ; N uni2C77 ; G 4347
U 11385 ; WX 538 ; N uni2C79 ; G 4348
U 11386 ; WX 687 ; N uni2C7A ; G 4349
U 11387 ; WX 559 ; N uni2C7B ; G 4350
U 11388 ; WX 219 ; N uni2C7C ; G 4351
U 11389 ; WX 487 ; N uni2C7D ; G 4352
U 11390 ; WX 720 ; N uni2C7E ; G 4353
U 11391 ; WX 725 ; N uni2C7F ; G 4354
U 11520 ; WX 663 ; N uni2D00 ; G 4355
U 11521 ; WX 676 ; N uni2D01 ; G 4356
U 11522 ; WX 661 ; N uni2D02 ; G 4357
U 11523 ; WX 629 ; N uni2D03 ; G 4358
U 11524 ; WX 661 ; N uni2D04 ; G 4359
U 11525 ; WX 1032 ; N uni2D05 ; G 4360
U 11526 ; WX 718 ; N uni2D06 ; G 4361
U 11527 ; WX 1032 ; N uni2D07 ; G 4362
U 11528 ; WX 648 ; N uni2D08 ; G 4363
U 11529 ; WX 667 ; N uni2D09 ; G 4364
U 11530 ; WX 1032 ; N uni2D0A ; G 4365
U 11531 ; WX 673 ; N uni2D0B ; G 4366
U 11532 ; WX 677 ; N uni2D0C ; G 4367
U 11533 ; WX 1036 ; N uni2D0D ; G 4368
U 11534 ; WX 680 ; N uni2D0E ; G 4369
U 11535 ; WX 886 ; N uni2D0F ; G 4370
U 11536 ; WX 1032 ; N uni2D10 ; G 4371
U 11537 ; WX 683 ; N uni2D11 ; G 4372
U 11538 ; WX 674 ; N uni2D12 ; G 4373
U 11539 ; WX 1035 ; N uni2D13 ; G 4374
U 11540 ; WX 1033 ; N uni2D14 ; G 4375
U 11541 ; WX 1027 ; N uni2D15 ; G 4376
U 11542 ; WX 676 ; N uni2D16 ; G 4377
U 11543 ; WX 673 ; N uni2D17 ; G 4378
U 11544 ; WX 667 ; N uni2D18 ; G 4379
U 11545 ; WX 667 ; N uni2D19 ; G 4380
U 11546 ; WX 660 ; N uni2D1A ; G 4381
U 11547 ; WX 671 ; N uni2D1B ; G 4382
U 11548 ; WX 1039 ; N uni2D1C ; G 4383
U 11549 ; WX 673 ; N uni2D1D ; G 4384
U 11550 ; WX 692 ; N uni2D1E ; G 4385
U 11551 ; WX 659 ; N uni2D1F ; G 4386
U 11552 ; WX 1048 ; N uni2D20 ; G 4387
U 11553 ; WX 660 ; N uni2D21 ; G 4388
U 11554 ; WX 654 ; N uni2D22 ; G 4389
U 11555 ; WX 670 ; N uni2D23 ; G 4390
U 11556 ; WX 733 ; N uni2D24 ; G 4391
U 11557 ; WX 1017 ; N uni2D25 ; G 4392
U 11800 ; WX 580 ; N uni2E18 ; G 4393
U 11807 ; WX 838 ; N uni2E1F ; G 4394
U 11810 ; WX 457 ; N uni2E22 ; G 4395
U 11811 ; WX 457 ; N uni2E23 ; G 4396
U 11812 ; WX 457 ; N uni2E24 ; G 4397
U 11813 ; WX 457 ; N uni2E25 ; G 4398
U 11822 ; WX 580 ; N uni2E2E ; G 4399
U 19904 ; WX 896 ; N uni4DC0 ; G 4400
U 19905 ; WX 896 ; N uni4DC1 ; G 4401
U 19906 ; WX 896 ; N uni4DC2 ; G 4402
U 19907 ; WX 896 ; N uni4DC3 ; G 4403
U 19908 ; WX 896 ; N uni4DC4 ; G 4404
U 19909 ; WX 896 ; N uni4DC5 ; G 4405
U 19910 ; WX 896 ; N uni4DC6 ; G 4406
U 19911 ; WX 896 ; N uni4DC7 ; G 4407
U 19912 ; WX 896 ; N uni4DC8 ; G 4408
U 19913 ; WX 896 ; N uni4DC9 ; G 4409
U 19914 ; WX 896 ; N uni4DCA ; G 4410
U 19915 ; WX 896 ; N uni4DCB ; G 4411
U 19916 ; WX 896 ; N uni4DCC ; G 4412
U 19917 ; WX 896 ; N uni4DCD ; G 4413
U 19918 ; WX 896 ; N uni4DCE ; G 4414
U 19919 ; WX 896 ; N uni4DCF ; G 4415
U 19920 ; WX 896 ; N uni4DD0 ; G 4416
U 19921 ; WX 896 ; N uni4DD1 ; G 4417
U 19922 ; WX 896 ; N uni4DD2 ; G 4418
U 19923 ; WX 896 ; N uni4DD3 ; G 4419
U 19924 ; WX 896 ; N uni4DD4 ; G 4420
U 19925 ; WX 896 ; N uni4DD5 ; G 4421
U 19926 ; WX 896 ; N uni4DD6 ; G 4422
U 19927 ; WX 896 ; N uni4DD7 ; G 4423
U 19928 ; WX 896 ; N uni4DD8 ; G 4424
U 19929 ; WX 896 ; N uni4DD9 ; G 4425
U 19930 ; WX 896 ; N uni4DDA ; G 4426
U 19931 ; WX 896 ; N uni4DDB ; G 4427
U 19932 ; WX 896 ; N uni4DDC ; G 4428
U 19933 ; WX 896 ; N uni4DDD ; G 4429
U 19934 ; WX 896 ; N uni4DDE ; G 4430
U 19935 ; WX 896 ; N uni4DDF ; G 4431
U 19936 ; WX 896 ; N uni4DE0 ; G 4432
U 19937 ; WX 896 ; N uni4DE1 ; G 4433
U 19938 ; WX 896 ; N uni4DE2 ; G 4434
U 19939 ; WX 896 ; N uni4DE3 ; G 4435
U 19940 ; WX 896 ; N uni4DE4 ; G 4436
U 19941 ; WX 896 ; N uni4DE5 ; G 4437
U 19942 ; WX 896 ; N uni4DE6 ; G 4438
U 19943 ; WX 896 ; N uni4DE7 ; G 4439
U 19944 ; WX 896 ; N uni4DE8 ; G 4440
U 19945 ; WX 896 ; N uni4DE9 ; G 4441
U 19946 ; WX 896 ; N uni4DEA ; G 4442
U 19947 ; WX 896 ; N uni4DEB ; G 4443
U 19948 ; WX 896 ; N uni4DEC ; G 4444
U 19949 ; WX 896 ; N uni4DED ; G 4445
U 19950 ; WX 896 ; N uni4DEE ; G 4446
U 19951 ; WX 896 ; N uni4DEF ; G 4447
U 19952 ; WX 896 ; N uni4DF0 ; G 4448
U 19953 ; WX 896 ; N uni4DF1 ; G 4449
U 19954 ; WX 896 ; N uni4DF2 ; G 4450
U 19955 ; WX 896 ; N uni4DF3 ; G 4451
U 19956 ; WX 896 ; N uni4DF4 ; G 4452
U 19957 ; WX 896 ; N uni4DF5 ; G 4453
U 19958 ; WX 896 ; N uni4DF6 ; G 4454
U 19959 ; WX 896 ; N uni4DF7 ; G 4455
U 19960 ; WX 896 ; N uni4DF8 ; G 4456
U 19961 ; WX 896 ; N uni4DF9 ; G 4457
U 19962 ; WX 896 ; N uni4DFA ; G 4458
U 19963 ; WX 896 ; N uni4DFB ; G 4459
U 19964 ; WX 896 ; N uni4DFC ; G 4460
U 19965 ; WX 896 ; N uni4DFD ; G 4461
U 19966 ; WX 896 ; N uni4DFE ; G 4462
U 19967 ; WX 896 ; N uni4DFF ; G 4463
U 42192 ; WX 762 ; N uniA4D0 ; G 4464
U 42193 ; WX 733 ; N uniA4D1 ; G 4465
U 42194 ; WX 733 ; N uniA4D2 ; G 4466
U 42195 ; WX 830 ; N uniA4D3 ; G 4467
U 42196 ; WX 682 ; N uniA4D4 ; G 4468
U 42197 ; WX 682 ; N uniA4D5 ; G 4469
U 42198 ; WX 821 ; N uniA4D6 ; G 4470
U 42199 ; WX 775 ; N uniA4D7 ; G 4471
U 42200 ; WX 775 ; N uniA4D8 ; G 4472
U 42201 ; WX 530 ; N uniA4D9 ; G 4473
U 42202 ; WX 734 ; N uniA4DA ; G 4474
U 42203 ; WX 734 ; N uniA4DB ; G 4475
U 42204 ; WX 725 ; N uniA4DC ; G 4476
U 42205 ; WX 683 ; N uniA4DD ; G 4477
U 42206 ; WX 683 ; N uniA4DE ; G 4478
U 42207 ; WX 995 ; N uniA4DF ; G 4479
U 42208 ; WX 837 ; N uniA4E0 ; G 4480
U 42209 ; WX 637 ; N uniA4E1 ; G 4481
U 42210 ; WX 720 ; N uniA4E2 ; G 4482
U 42211 ; WX 770 ; N uniA4E3 ; G 4483
U 42212 ; WX 770 ; N uniA4E4 ; G 4484
U 42213 ; WX 774 ; N uniA4E5 ; G 4485
U 42214 ; WX 774 ; N uniA4E6 ; G 4486
U 42215 ; WX 837 ; N uniA4E7 ; G 4487
U 42216 ; WX 786 ; N uniA4E8 ; G 4488
U 42217 ; WX 530 ; N uniA4E9 ; G 4489
U 42218 ; WX 1103 ; N uniA4EA ; G 4490
U 42219 ; WX 771 ; N uniA4EB ; G 4491
U 42220 ; WX 724 ; N uniA4EC ; G 4492
U 42221 ; WX 762 ; N uniA4ED ; G 4493
U 42222 ; WX 774 ; N uniA4EE ; G 4494
U 42223 ; WX 774 ; N uniA4EF ; G 4495
U 42224 ; WX 683 ; N uniA4F0 ; G 4496
U 42225 ; WX 683 ; N uniA4F1 ; G 4497
U 42226 ; WX 372 ; N uniA4F2 ; G 4498
U 42227 ; WX 850 ; N uniA4F3 ; G 4499
U 42228 ; WX 812 ; N uniA4F4 ; G 4500
U 42229 ; WX 812 ; N uniA4F5 ; G 4501
U 42230 ; WX 576 ; N uniA4F6 ; G 4502
U 42231 ; WX 830 ; N uniA4F7 ; G 4503
U 42232 ; WX 322 ; N uniA4F8 ; G 4504
U 42233 ; WX 322 ; N uniA4F9 ; G 4505
U 42234 ; WX 674 ; N uniA4FA ; G 4506
U 42235 ; WX 674 ; N uniA4FB ; G 4507
U 42236 ; WX 322 ; N uniA4FC ; G 4508
U 42237 ; WX 322 ; N uniA4FD ; G 4509
U 42238 ; WX 588 ; N uniA4FE ; G 4510
U 42239 ; WX 588 ; N uniA4FF ; G 4511
U 42564 ; WX 720 ; N uniA644 ; G 4512
U 42565 ; WX 595 ; N uniA645 ; G 4513
U 42566 ; WX 436 ; N uniA646 ; G 4514
U 42567 ; WX 440 ; N uniA647 ; G 4515
U 42572 ; WX 1405 ; N uniA64C ; G 4516
U 42573 ; WX 1173 ; N uniA64D ; G 4517
U 42576 ; WX 1234 ; N uniA650 ; G 4518
U 42577 ; WX 1027 ; N uniA651 ; G 4519
U 42580 ; WX 1174 ; N uniA654 ; G 4520
U 42581 ; WX 972 ; N uniA655 ; G 4521
U 42582 ; WX 1100 ; N uniA656 ; G 4522
U 42583 ; WX 969 ; N uniA657 ; G 4523
U 42594 ; WX 1100 ; N uniA662 ; G 4524
U 42595 ; WX 940 ; N uniA663 ; G 4525
U 42596 ; WX 1096 ; N uniA664 ; G 4526
U 42597 ; WX 915 ; N uniA665 ; G 4527
U 42598 ; WX 1260 ; N uniA666 ; G 4528
U 42599 ; WX 997 ; N uniA667 ; G 4529
U 42600 ; WX 850 ; N uniA668 ; G 4530
U 42601 ; WX 687 ; N uniA669 ; G 4531
U 42602 ; WX 1037 ; N uniA66A ; G 4532
U 42603 ; WX 868 ; N uniA66B ; G 4533
U 42604 ; WX 1406 ; N uniA66C ; G 4534
U 42605 ; WX 1106 ; N uniA66D ; G 4535
U 42606 ; WX 961 ; N uniA66E ; G 4536
U 42634 ; WX 944 ; N uniA68A ; G 4537
U 42635 ; WX 749 ; N uniA68B ; G 4538
U 42636 ; WX 682 ; N uniA68C ; G 4539
U 42637 ; WX 580 ; N uniA68D ; G 4540
U 42644 ; WX 808 ; N uniA694 ; G 4541
U 42645 ; WX 712 ; N uniA695 ; G 4542
U 42648 ; WX 1406 ; N uniA698 ; G 4543
U 42649 ; WX 1106 ; N uniA699 ; G 4544
U 42760 ; WX 500 ; N uniA708 ; G 4545
U 42761 ; WX 500 ; N uniA709 ; G 4546
U 42762 ; WX 500 ; N uniA70A ; G 4547
U 42763 ; WX 500 ; N uniA70B ; G 4548
U 42764 ; WX 500 ; N uniA70C ; G 4549
U 42765 ; WX 500 ; N uniA70D ; G 4550
U 42766 ; WX 500 ; N uniA70E ; G 4551
U 42767 ; WX 500 ; N uniA70F ; G 4552
U 42768 ; WX 500 ; N uniA710 ; G 4553
U 42769 ; WX 500 ; N uniA711 ; G 4554
U 42770 ; WX 500 ; N uniA712 ; G 4555
U 42771 ; WX 500 ; N uniA713 ; G 4556
U 42772 ; WX 500 ; N uniA714 ; G 4557
U 42773 ; WX 500 ; N uniA715 ; G 4558
U 42774 ; WX 500 ; N uniA716 ; G 4559
U 42779 ; WX 400 ; N uniA71B ; G 4560
U 42780 ; WX 400 ; N uniA71C ; G 4561
U 42781 ; WX 287 ; N uniA71D ; G 4562
U 42782 ; WX 287 ; N uniA71E ; G 4563
U 42783 ; WX 287 ; N uniA71F ; G 4564
U 42786 ; WX 444 ; N uniA722 ; G 4565
U 42787 ; WX 390 ; N uniA723 ; G 4566
U 42788 ; WX 540 ; N uniA724 ; G 4567
U 42789 ; WX 540 ; N uniA725 ; G 4568
U 42790 ; WX 837 ; N uniA726 ; G 4569
U 42791 ; WX 712 ; N uniA727 ; G 4570
U 42792 ; WX 1031 ; N uniA728 ; G 4571
U 42793 ; WX 857 ; N uniA729 ; G 4572
U 42794 ; WX 696 ; N uniA72A ; G 4573
U 42795 ; WX 557 ; N uniA72B ; G 4574
U 42800 ; WX 559 ; N uniA730 ; G 4575
U 42801 ; WX 595 ; N uniA731 ; G 4576
U 42802 ; WX 1349 ; N uniA732 ; G 4577
U 42803 ; WX 1052 ; N uniA733 ; G 4578
U 42804 ; WX 1285 ; N uniA734 ; G 4579
U 42805 ; WX 1065 ; N uniA735 ; G 4580
U 42806 ; WX 1245 ; N uniA736 ; G 4581
U 42807 ; WX 1052 ; N uniA737 ; G 4582
U 42808 ; WX 1079 ; N uniA738 ; G 4583
U 42809 ; WX 922 ; N uniA739 ; G 4584
U 42810 ; WX 1079 ; N uniA73A ; G 4585
U 42811 ; WX 922 ; N uniA73B ; G 4586
U 42812 ; WX 1035 ; N uniA73C ; G 4587
U 42813 ; WX 922 ; N uniA73D ; G 4588
U 42814 ; WX 698 ; N uniA73E ; G 4589
U 42815 ; WX 549 ; N uniA73F ; G 4590
U 42816 ; WX 656 ; N uniA740 ; G 4591
U 42817 ; WX 579 ; N uniA741 ; G 4592
U 42822 ; WX 850 ; N uniA746 ; G 4593
U 42823 ; WX 542 ; N uniA747 ; G 4594
U 42824 ; WX 683 ; N uniA748 ; G 4595
U 42825 ; WX 531 ; N uniA749 ; G 4596
U 42826 ; WX 918 ; N uniA74A ; G 4597
U 42827 ; WX 814 ; N uniA74B ; G 4598
U 42830 ; WX 1406 ; N uniA74E ; G 4599
U 42831 ; WX 1106 ; N uniA74F ; G 4600
U 42832 ; WX 733 ; N uniA750 ; G 4601
U 42833 ; WX 716 ; N uniA751 ; G 4602
U 42834 ; WX 948 ; N uniA752 ; G 4603
U 42835 ; WX 937 ; N uniA753 ; G 4604
U 42838 ; WX 850 ; N uniA756 ; G 4605
U 42839 ; WX 716 ; N uniA757 ; G 4606
U 42852 ; WX 738 ; N uniA764 ; G 4607
U 42853 ; WX 716 ; N uniA765 ; G 4608
U 42854 ; WX 738 ; N uniA766 ; G 4609
U 42855 ; WX 716 ; N uniA767 ; G 4610
U 42880 ; WX 637 ; N uniA780 ; G 4611
U 42881 ; WX 343 ; N uniA781 ; G 4612
U 42882 ; WX 837 ; N uniA782 ; G 4613
U 42883 ; WX 712 ; N uniA783 ; G 4614
U 42889 ; WX 400 ; N uniA789 ; G 4615
U 42890 ; WX 396 ; N uniA78A ; G 4616
U 42891 ; WX 456 ; N uniA78B ; G 4617
U 42892 ; WX 306 ; N uniA78C ; G 4618
U 42893 ; WX 808 ; N uniA78D ; G 4619
U 42894 ; WX 693 ; N uniA78E ; G 4620
U 42896 ; WX 928 ; N uniA790 ; G 4621
U 42897 ; WX 768 ; N uniA791 ; G 4622
U 42912 ; WX 821 ; N uniA7A0 ; G 4623
U 42913 ; WX 716 ; N uniA7A1 ; G 4624
U 42914 ; WX 775 ; N uniA7A2 ; G 4625
U 42915 ; WX 665 ; N uniA7A3 ; G 4626
U 42916 ; WX 837 ; N uniA7A4 ; G 4627
U 42917 ; WX 712 ; N uniA7A5 ; G 4628
U 42918 ; WX 770 ; N uniA7A6 ; G 4629
U 42919 ; WX 493 ; N uniA7A7 ; G 4630
U 42920 ; WX 720 ; N uniA7A8 ; G 4631
U 42921 ; WX 595 ; N uniA7A9 ; G 4632
U 42922 ; WX 886 ; N uniA7AA ; G 4633
U 43000 ; WX 613 ; N uniA7F8 ; G 4634
U 43001 ; WX 689 ; N uniA7F9 ; G 4635
U 43002 ; WX 1062 ; N uniA7FA ; G 4636
U 43003 ; WX 683 ; N uniA7FB ; G 4637
U 43004 ; WX 733 ; N uniA7FC ; G 4638
U 43005 ; WX 995 ; N uniA7FD ; G 4639
U 43006 ; WX 372 ; N uniA7FE ; G 4640
U 43007 ; WX 1325 ; N uniA7FF ; G 4641
U 61184 ; WX 216 ; N uni02E5.5 ; G 4642
U 61185 ; WX 242 ; N uni02E6.5 ; G 4643
U 61186 ; WX 267 ; N uni02E7.5 ; G 4644
U 61187 ; WX 277 ; N uni02E8.5 ; G 4645
U 61188 ; WX 282 ; N uni02E9.5 ; G 4646
U 61189 ; WX 242 ; N uni02E5.4 ; G 4647
U 61190 ; WX 216 ; N uni02E6.4 ; G 4648
U 61191 ; WX 242 ; N uni02E7.4 ; G 4649
U 61192 ; WX 267 ; N uni02E8.4 ; G 4650
U 61193 ; WX 277 ; N uni02E9.4 ; G 4651
U 61194 ; WX 267 ; N uni02E5.3 ; G 4652
U 61195 ; WX 242 ; N uni02E6.3 ; G 4653
U 61196 ; WX 216 ; N uni02E7.3 ; G 4654
U 61197 ; WX 242 ; N uni02E8.3 ; G 4655
U 61198 ; WX 267 ; N uni02E9.3 ; G 4656
U 61199 ; WX 277 ; N uni02E5.2 ; G 4657
U 61200 ; WX 267 ; N uni02E6.2 ; G 4658
U 61201 ; WX 242 ; N uni02E7.2 ; G 4659
U 61202 ; WX 216 ; N uni02E8.2 ; G 4660
U 61203 ; WX 242 ; N uni02E9.2 ; G 4661
U 61204 ; WX 282 ; N uni02E5.1 ; G 4662
U 61205 ; WX 277 ; N uni02E6.1 ; G 4663
U 61206 ; WX 267 ; N uni02E7.1 ; G 4664
U 61207 ; WX 242 ; N uni02E8.1 ; G 4665
U 61208 ; WX 216 ; N uni02E9.1 ; G 4666
U 61209 ; WX 282 ; N stem ; G 4667
U 62464 ; WX 612 ; N uniF400 ; G 4668
U 62465 ; WX 612 ; N uniF401 ; G 4669
U 62466 ; WX 653 ; N uniF402 ; G 4670
U 62467 ; WX 902 ; N uniF403 ; G 4671
U 62468 ; WX 617 ; N uniF404 ; G 4672
U 62469 ; WX 617 ; N uniF405 ; G 4673
U 62470 ; WX 680 ; N uniF406 ; G 4674
U 62471 ; WX 904 ; N uniF407 ; G 4675
U 62472 ; WX 599 ; N uniF408 ; G 4676
U 62473 ; WX 617 ; N uniF409 ; G 4677
U 62474 ; WX 1163 ; N uniF40A ; G 4678
U 62475 ; WX 621 ; N uniF40B ; G 4679
U 62476 ; WX 622 ; N uniF40C ; G 4680
U 62477 ; WX 893 ; N uniF40D ; G 4681
U 62478 ; WX 612 ; N uniF40E ; G 4682
U 62479 ; WX 622 ; N uniF40F ; G 4683
U 62480 ; WX 924 ; N uniF410 ; G 4684
U 62481 ; WX 622 ; N uniF411 ; G 4685
U 62482 ; WX 754 ; N uniF412 ; G 4686
U 62483 ; WX 624 ; N uniF413 ; G 4687
U 62484 ; WX 886 ; N uniF414 ; G 4688
U 62485 ; WX 622 ; N uniF415 ; G 4689
U 62486 ; WX 907 ; N uniF416 ; G 4690
U 62487 ; WX 621 ; N uniF417 ; G 4691
U 62488 ; WX 611 ; N uniF418 ; G 4692
U 62489 ; WX 624 ; N uniF419 ; G 4693
U 62490 ; WX 677 ; N uniF41A ; G 4694
U 62491 ; WX 621 ; N uniF41B ; G 4695
U 62492 ; WX 611 ; N uniF41C ; G 4696
U 62493 ; WX 630 ; N uniF41D ; G 4697
U 62494 ; WX 622 ; N uniF41E ; G 4698
U 62495 ; WX 561 ; N uniF41F ; G 4699
U 62496 ; WX 612 ; N uniF420 ; G 4700
U 62497 ; WX 626 ; N uniF421 ; G 4701
U 62498 ; WX 612 ; N uniF422 ; G 4702
U 62499 ; WX 611 ; N uniF423 ; G 4703
U 62500 ; WX 618 ; N uniF424 ; G 4704
U 62501 ; WX 667 ; N uniF425 ; G 4705
U 62502 ; WX 963 ; N uniF426 ; G 4706
U 62504 ; WX 1023 ; N uniF428 ; G 4707
U 62505 ; WX 844 ; N uniF429 ; G 4708
U 62506 ; WX 563 ; N uniF42A ; G 4709
U 62507 ; WX 563 ; N uniF42B ; G 4710
U 62508 ; WX 563 ; N uniF42C ; G 4711
U 62509 ; WX 563 ; N uniF42D ; G 4712
U 62510 ; WX 563 ; N uniF42E ; G 4713
U 62511 ; WX 563 ; N uniF42F ; G 4714
U 62512 ; WX 555 ; N uniF430 ; G 4715
U 62513 ; WX 555 ; N uniF431 ; G 4716
U 62514 ; WX 555 ; N uniF432 ; G 4717
U 62515 ; WX 555 ; N uniF433 ; G 4718
U 62516 ; WX 573 ; N uniF434 ; G 4719
U 62517 ; WX 573 ; N uniF435 ; G 4720
U 62518 ; WX 573 ; N uniF436 ; G 4721
U 62519 ; WX 824 ; N uniF437 ; G 4722
U 62520 ; WX 824 ; N uniF438 ; G 4723
U 62521 ; WX 824 ; N uniF439 ; G 4724
U 62522 ; WX 824 ; N uniF43A ; G 4725
U 62523 ; WX 824 ; N uniF43B ; G 4726
U 62524 ; WX 611 ; N uniF43C ; G 4727
U 62525 ; WX 611 ; N uniF43D ; G 4728
U 62526 ; WX 611 ; N uniF43E ; G 4729
U 62527 ; WX 611 ; N uniF43F ; G 4730
U 62528 ; WX 611 ; N uniF440 ; G 4731
U 62529 ; WX 611 ; N uniF441 ; G 4732
U 62917 ; WX 687 ; N uniF5C5 ; G 4733
U 64256 ; WX 833 ; N uniFB00 ; G 4734
U 64257 ; WX 787 ; N fi ; G 4735
U 64258 ; WX 787 ; N fl ; G 4736
U 64259 ; WX 1138 ; N uniFB03 ; G 4737
U 64260 ; WX 1139 ; N uniFB04 ; G 4738
U 64261 ; WX 808 ; N uniFB05 ; G 4739
U 64262 ; WX 1020 ; N uniFB06 ; G 4740
U 64275 ; WX 1388 ; N uniFB13 ; G 4741
U 64276 ; WX 1384 ; N uniFB14 ; G 4742
U 64277 ; WX 1378 ; N uniFB15 ; G 4743
U 64278 ; WX 1384 ; N uniFB16 ; G 4744
U 64279 ; WX 1713 ; N uniFB17 ; G 4745
U 64285 ; WX 294 ; N uniFB1D ; G 4746
U 64286 ; WX 0 ; N uniFB1E ; G 4747
U 64287 ; WX 663 ; N uniFB1F ; G 4748
U 64288 ; WX 665 ; N uniFB20 ; G 4749
U 64289 ; WX 939 ; N uniFB21 ; G 4750
U 64290 ; WX 788 ; N uniFB22 ; G 4751
U 64291 ; WX 920 ; N uniFB23 ; G 4752
U 64292 ; WX 786 ; N uniFB24 ; G 4753
U 64293 ; WX 857 ; N uniFB25 ; G 4754
U 64294 ; WX 869 ; N uniFB26 ; G 4755
U 64295 ; WX 821 ; N uniFB27 ; G 4756
U 64296 ; WX 890 ; N uniFB28 ; G 4757
U 64297 ; WX 838 ; N uniFB29 ; G 4758
U 64298 ; WX 749 ; N uniFB2A ; G 4759
U 64299 ; WX 749 ; N uniFB2B ; G 4760
U 64300 ; WX 749 ; N uniFB2C ; G 4761
U 64301 ; WX 749 ; N uniFB2D ; G 4762
U 64302 ; WX 728 ; N uniFB2E ; G 4763
U 64303 ; WX 728 ; N uniFB2F ; G 4764
U 64304 ; WX 728 ; N uniFB30 ; G 4765
U 64305 ; WX 610 ; N uniFB31 ; G 4766
U 64306 ; WX 447 ; N uniFB32 ; G 4767
U 64307 ; WX 588 ; N uniFB33 ; G 4768
U 64308 ; WX 687 ; N uniFB34 ; G 4769
U 64309 ; WX 343 ; N uniFB35 ; G 4770
U 64310 ; WX 400 ; N uniFB36 ; G 4771
U 64311 ; WX 1000 ; N uniFB37 ; G 4772
U 64312 ; WX 679 ; N uniFB38 ; G 4773
U 64313 ; WX 436 ; N uniFB39 ; G 4774
U 64314 ; WX 578 ; N uniFB3A ; G 4775
U 64315 ; WX 566 ; N uniFB3B ; G 4776
U 64316 ; WX 605 ; N uniFB3C ; G 4777
U 64317 ; WX 1000 ; N uniFB3D ; G 4778
U 64318 ; WX 724 ; N uniFB3E ; G 4779
U 64319 ; WX 1000 ; N uniFB3F ; G 4780
U 64320 ; WX 453 ; N uniFB40 ; G 4781
U 64321 ; WX 680 ; N uniFB41 ; G 4782
U 64322 ; WX 1000 ; N uniFB42 ; G 4783
U 64323 ; WX 675 ; N uniFB43 ; G 4784
U 64324 ; WX 658 ; N uniFB44 ; G 4785
U 64325 ; WX 1000 ; N uniFB45 ; G 4786
U 64326 ; WX 653 ; N uniFB46 ; G 4787
U 64327 ; WX 736 ; N uniFB47 ; G 4788
U 64328 ; WX 602 ; N uniFB48 ; G 4789
U 64329 ; WX 749 ; N uniFB49 ; G 4790
U 64330 ; WX 683 ; N uniFB4A ; G 4791
U 64331 ; WX 343 ; N uniFB4B ; G 4792
U 64332 ; WX 610 ; N uniFB4C ; G 4793
U 64333 ; WX 566 ; N uniFB4D ; G 4794
U 64334 ; WX 658 ; N uniFB4E ; G 4795
U 64335 ; WX 710 ; N uniFB4F ; G 4796
U 65024 ; WX 0 ; N uniFE00 ; G 4797
U 65025 ; WX 0 ; N uniFE01 ; G 4798
U 65026 ; WX 0 ; N uniFE02 ; G 4799
U 65027 ; WX 0 ; N uniFE03 ; G 4800
U 65028 ; WX 0 ; N uniFE04 ; G 4801
U 65029 ; WX 0 ; N uniFE05 ; G 4802
U 65030 ; WX 0 ; N uniFE06 ; G 4803
U 65031 ; WX 0 ; N uniFE07 ; G 4804
U 65032 ; WX 0 ; N uniFE08 ; G 4805
U 65033 ; WX 0 ; N uniFE09 ; G 4806
U 65034 ; WX 0 ; N uniFE0A ; G 4807
U 65035 ; WX 0 ; N uniFE0B ; G 4808
U 65036 ; WX 0 ; N uniFE0C ; G 4809
U 65037 ; WX 0 ; N uniFE0D ; G 4810
U 65038 ; WX 0 ; N uniFE0E ; G 4811
U 65039 ; WX 0 ; N uniFE0F ; G 4812
U 65056 ; WX 0 ; N uniFE20 ; G 4813
U 65057 ; WX 0 ; N uniFE21 ; G 4814
U 65058 ; WX 0 ; N uniFE22 ; G 4815
U 65059 ; WX 0 ; N uniFE23 ; G 4816
U 65529 ; WX 0 ; N uniFFF9 ; G 4817
U 65530 ; WX 0 ; N uniFFFA ; G 4818
U 65531 ; WX 0 ; N uniFFFB ; G 4819
U 65532 ; WX 0 ; N uniFFFC ; G 4820
U 65533 ; WX 1113 ; N uniFFFD ; G 4821
EndCharMetrics
StartKernData 
StartKernPairs 1921

KPX dollar ampersand -63
KPX dollar two -63
KPX dollar seven -196
KPX dollar eight -92
KPX dollar nine -139
KPX dollar colon -112
KPX dollar less -235
KPX dollar F -63
KPX dollar G -63
KPX dollar W -112
KPX dollar Y -112
KPX dollar Z -92
KPX dollar backslash -149
KPX dollar copyright -63
KPX dollar questiondown -149
KPX dollar Aacute -149
KPX dollar Egrave -63
KPX dollar Eacute -63
KPX dollar Ecircumflex -63
KPX dollar Edieresis -63
KPX dollar Igrave -63
KPX dollar Iacute -63
KPX dollar Icircumflex -63
KPX dollar Idieresis -63
KPX dollar Ntilde -63
KPX dollar Oacute -63
KPX dollar Dcaron -63
KPX dollar Dcroat -63
KPX dollar Emacron -63
KPX dollar Ebreve -63
KPX dollar Hcircumflex -196
KPX dollar hcircumflex -112
KPX dollar Hbar -196
KPX dollar hbar -112
KPX dollar Imacron -92
KPX dollar Ibreve -92
KPX dollar Iogonek -92
KPX dollar Idot -92
KPX dollar IJ -92
KPX dollar Jcircumflex -92
KPX dollar Kcommaaccent -112
KPX dollar kcommaaccent -92
KPX dollar kgreenlandic -235
KPX dollar Lacute -149
KPX dollar lacute -235
KPX dollar uni01AC -63
KPX dollar uni01AE -63
KPX dollar uni01DC -196
KPX dollar uni01DD -112
KPX dollar uni01F0 -63
KPX dollar uni01F4 -235
KPX dollar uni01F5 -149

KPX percent nine -83
KPX percent colon -112
KPX percent less -112
KPX percent Kcommaaccent -112
KPX percent kgreenlandic -112
KPX percent lacute -112
KPX percent uni01F4 -112

KPX ampersand six -73
KPX ampersand Gcircumflex -73
KPX ampersand Gbreve -73
KPX ampersand Gdotaccent -73
KPX ampersand Gcommaaccent -73
KPX ampersand uni01DA -73

KPX quotesingle less -159
KPX quotesingle kgreenlandic -159
KPX quotesingle lacute -159
KPX quotesingle uni01F4 -159

KPX parenright dollar -264
KPX parenright D -235
KPX parenright H -159
KPX parenright R -159
KPX parenright U -225
KPX parenright X -196
KPX parenright backslash -188
KPX parenright cent -235
KPX parenright sterling -235
KPX parenright currency -235
KPX parenright yen -235
KPX parenright brokenbar -235
KPX parenright section -235
KPX parenright dieresis -235
KPX parenright ordfeminine -159
KPX parenright guillemotleft -159
KPX parenright logicalnot -159
KPX parenright sfthyphen -159
KPX parenright acute -159
KPX parenright mu -159
KPX parenright paragraph -159
KPX parenright periodcentered -159
KPX parenright cedilla -159
KPX parenright ordmasculine -159
KPX parenright guillemotright -196
KPX parenright onequarter -196
KPX parenright onehalf -196
KPX parenright threequarters -196
KPX parenright questiondown -188
KPX parenright Aacute -188
KPX parenright Acircumflex -264
KPX parenright Atilde -235
KPX parenright Adieresis -264
KPX parenright Aring -235
KPX parenright AE -264
KPX parenright Ccedilla -235
KPX parenright Otilde -159
KPX parenright multiply -159
KPX parenright Ugrave -159
KPX parenright Ucircumflex -159
KPX parenright Yacute -159
KPX parenright dcaron -159
KPX parenright dmacron -159
KPX parenright emacron -159
KPX parenright ebreve -159
KPX parenright edotaccent -225
KPX parenright eogonek -225
KPX parenright ecaron -225
KPX parenright imacron -196
KPX parenright ibreve -196
KPX parenright iogonek -196
KPX parenright dotlessi -196
KPX parenright ij -196
KPX parenright jcircumflex -196
KPX parenright Lacute -188
KPX parenright uni01A5 -235
KPX parenright uni01AD -159
KPX parenright Uhorn -159
KPX parenright uni01F1 -159
KPX parenright uni01F5 -188

KPX asterisk seven -36
KPX asterisk less -83
KPX asterisk Hbar -36
KPX asterisk lacute -83

KPX period ampersand -131
KPX period two -131
KPX period eight -73
KPX period colon -55
KPX period H -112
KPX period R -112
KPX period X -112
KPX period backslash -206
KPX period ordfeminine -112
KPX period guillemotleft -112
KPX period logicalnot -112
KPX period sfthyphen -112
KPX period acute -112
KPX period mu -112
KPX period paragraph -112
KPX period periodcentered -112
KPX period cedilla -112
KPX period ordmasculine -112
KPX period guillemotright -112
KPX period onequarter -112
KPX period onehalf -112
KPX period threequarters -112
KPX period questiondown -206
KPX period Aacute -206
KPX period Egrave -131
KPX period Icircumflex -131
KPX period Yacute -112
KPX period Ebreve -178
KPX period ebreve -112
KPX period Idot -73
KPX period dotlessi -112

KPX slash two -73
KPX slash seven -339
KPX slash eight -112
KPX slash nine -282
KPX slash colon -178
KPX slash less -319
KPX slash backslash -253
KPX slash questiondown -253
KPX slash Aacute -253
KPX slash Ebreve -73
KPX slash Hbar -339
KPX slash Idot -112
KPX slash lacute -319

KPX two nine -73
KPX two semicolon -73
KPX two less -149
KPX two lacute -149

KPX three dollar -188
KPX three D -131
KPX three H -55
KPX three U -63
KPX three V -73
KPX three X -73
KPX three cent -131
KPX three sterling -131
KPX three currency -131
KPX three yen -131
KPX three brokenbar -131
KPX three section -131
KPX three dieresis -131
KPX three ordfeminine -55
KPX three guillemotleft -55
KPX three logicalnot -55
KPX three sfthyphen -55
KPX three guillemotright -73
KPX three onequarter -73
KPX three onehalf -73
KPX three threequarters -73
KPX three Yacute -55
KPX three edotaccent -63
KPX three ecaron -63
KPX three gdotaccent -73
KPX three gcommaaccent -73
KPX three dotlessi -73


KPX five seven -92
KPX five less -188
KPX five H -102
KPX five R -102
KPX five X -112
KPX five backslash -131
KPX five ordfeminine -102
KPX five guillemotleft -102
KPX five logicalnot -102
KPX five sfthyphen -102
KPX five acute -102
KPX five mu -102
KPX five paragraph -102
KPX five periodcentered -102
KPX five cedilla -102
KPX five ordmasculine -102
KPX five guillemotright -112
KPX five onequarter -112
KPX five onehalf -112
KPX five threequarters -112
KPX five questiondown -131
KPX five Aacute -131
KPX five Yacute -102
KPX five ebreve -102
KPX five Hbar -92
KPX five dotlessi -112
KPX five lacute -188

KPX six six -73
KPX six Gdotaccent -73
KPX six Gcommaaccent -73

KPX seven dollar -159
KPX seven seven 47
KPX seven D -243
KPX seven F -264
KPX seven H -264
KPX seven R -264
KPX seven U -225
KPX seven V -243
KPX seven X -264
KPX seven Z -282
KPX seven backslash -339
KPX seven cent -243
KPX seven sterling -243
KPX seven currency -243
KPX seven yen -243
KPX seven brokenbar -243
KPX seven section -243
KPX seven dieresis -243
KPX seven copyright -264
KPX seven ordfeminine -264
KPX seven guillemotleft -264
KPX seven logicalnot -264
KPX seven sfthyphen -264
KPX seven acute -264
KPX seven mu -264
KPX seven paragraph -264
KPX seven periodcentered -264
KPX seven cedilla -264
KPX seven ordmasculine -264
KPX seven guillemotright -264
KPX seven onequarter -264
KPX seven onehalf -264
KPX seven threequarters -264
KPX seven questiondown -339
KPX seven Aacute -339
KPX seven Eacute -264
KPX seven Idieresis -264
KPX seven Yacute -264
KPX seven ebreve -264
KPX seven edotaccent -225
KPX seven ecaron -225
KPX seven gdotaccent -243
KPX seven gcommaaccent -243
KPX seven Hbar 47
KPX seven dotlessi -264

KPX eight dollar -92

KPX nine dollar -139
KPX nine two -36
KPX nine D -159
KPX nine H -149
KPX nine L -36
KPX nine R -149
KPX nine X -149
KPX nine cent -159
KPX nine sterling -159
KPX nine currency -159
KPX nine yen -159
KPX nine brokenbar -159
KPX nine section -159
KPX nine dieresis -159
KPX nine ordfeminine -149
KPX nine guillemotleft -149
KPX nine logicalnot -149
KPX nine sfthyphen -149
KPX nine acute -149
KPX nine mu -149
KPX nine paragraph -149
KPX nine periodcentered -149
KPX nine cedilla -149
KPX nine ordmasculine -149
KPX nine guillemotright -149
KPX nine onequarter -149
KPX nine onehalf -149
KPX nine threequarters -149
KPX nine Yacute -149
KPX nine Ebreve -45
KPX nine ebreve -149
KPX nine dotlessi -149

KPX colon dollar -73
KPX colon D -139
KPX colon H -131
KPX colon R -112
KPX colon U -120
KPX colon cent -139
KPX colon sterling -139
KPX colon currency -139
KPX colon yen -139
KPX colon brokenbar -139
KPX colon section -139
KPX colon dieresis -139
KPX colon ordfeminine -131
KPX colon guillemotleft -131
KPX colon logicalnot -131
KPX colon sfthyphen -131
KPX colon acute -112
KPX colon mu -112
KPX colon paragraph -112
KPX colon periodcentered -112
KPX colon cedilla -112
KPX colon ordmasculine -112
KPX colon Yacute -131
KPX colon ebreve -112
KPX colon edotaccent -120
KPX colon ecaron -120

KPX semicolon ampersand -73
KPX semicolon two -73
KPX semicolon H -131
KPX semicolon ordfeminine -131
KPX semicolon guillemotleft -131
KPX semicolon logicalnot -131
KPX semicolon sfthyphen -131
KPX semicolon Egrave -73
KPX semicolon Icircumflex -73
KPX semicolon Yacute -131
KPX semicolon Ebreve -112

KPX less dollar -196
KPX less ampersand -73
KPX less two -73
KPX less D -243
KPX less H -264
KPX less R -264
KPX less X -225
KPX less cent -243
KPX less sterling -243
KPX less currency -243
KPX less yen -243
KPX less brokenbar -243
KPX less section -243
KPX less dieresis -243
KPX less ordfeminine -264
KPX less guillemotleft -264
KPX less logicalnot -264
KPX less sfthyphen -264
KPX less acute -264
KPX less mu -264
KPX less paragraph -264
KPX less periodcentered -264
KPX less cedilla -264
KPX less ordmasculine -264
KPX less guillemotright -225
KPX less onequarter -225
KPX less onehalf -225
KPX less threequarters -225
KPX less Egrave -73
KPX less Icircumflex -73
KPX less Yacute -264
KPX less Ebreve -120
KPX less ebreve -264
KPX less dotlessi -225


KPX D backslash -63
KPX D questiondown -63
KPX D Aacute -63


KPX N H -73
KPX N R -73
KPX N ordfeminine -73
KPX N guillemotleft -73
KPX N logicalnot -73
KPX N sfthyphen -73
KPX N acute -73
KPX N mu -73
KPX N paragraph -73
KPX N periodcentered -73
KPX N cedilla -73
KPX N ordmasculine -45
KPX N Yacute -73
KPX N ebreve -73





KPX cent backslash -63
KPX cent questiondown -63
KPX cent Aacute -63

KPX sterling backslash -63
KPX sterling questiondown -63
KPX sterling Aacute -63

KPX currency backslash -63
KPX currency questiondown -63
KPX currency Aacute -63

KPX yen backslash -63
KPX yen questiondown -63
KPX yen Aacute -63

KPX brokenbar backslash -63
KPX brokenbar questiondown -63
KPX brokenbar Aacute -63

KPX section backslash -63
KPX section questiondown -63
KPX section Aacute -63



KPX Acircumflex ampersand -63
KPX Acircumflex two -63
KPX Acircumflex seven -196
KPX Acircumflex eight -92
KPX Acircumflex nine -139
KPX Acircumflex colon -112
KPX Acircumflex less -235
KPX Acircumflex F -63
KPX Acircumflex G -63
KPX Acircumflex W -112
KPX Acircumflex Y -112
KPX Acircumflex Z -92
KPX Acircumflex backslash -149
KPX Acircumflex copyright -63
KPX Acircumflex questiondown -149
KPX Acircumflex Aacute -149
KPX Acircumflex Egrave -63
KPX Acircumflex Eacute -63
KPX Acircumflex Ecircumflex -63
KPX Acircumflex Edieresis -63
KPX Acircumflex Igrave -63
KPX Acircumflex Iacute -63
KPX Acircumflex Icircumflex -63
KPX Acircumflex Idieresis -63
KPX Acircumflex Ntilde -63
KPX Acircumflex Oacute -63
KPX Acircumflex Dcaron -63
KPX Acircumflex Dcroat -63
KPX Acircumflex Emacron -63
KPX Acircumflex Ebreve -63
KPX Acircumflex Hcircumflex -196
KPX Acircumflex hcircumflex -112
KPX Acircumflex Hbar -196
KPX Acircumflex hbar -112
KPX Acircumflex Imacron -92
KPX Acircumflex Ibreve -92
KPX Acircumflex Iogonek -92
KPX Acircumflex Idot -92
KPX Acircumflex IJ -92
KPX Acircumflex Jcircumflex -92
KPX Acircumflex Kcommaaccent -112
KPX Acircumflex kcommaaccent -92
KPX Acircumflex kgreenlandic -235
KPX Acircumflex Lacute -149
KPX Acircumflex lacute -235
KPX Acircumflex uni01AC -63
KPX Acircumflex uni01AE -63
KPX Acircumflex uni01DC -196
KPX Acircumflex uni01DD -112
KPX Acircumflex uni01F0 -63
KPX Acircumflex uni01F4 -235
KPX Acircumflex uni01F5 -149

KPX Adieresis ampersand -63
KPX Adieresis two -63
KPX Adieresis seven -196
KPX Adieresis eight -92
KPX Adieresis nine -139
KPX Adieresis colon -112
KPX Adieresis less -235
KPX Adieresis F -63
KPX Adieresis G -63
KPX Adieresis W -112
KPX Adieresis Y -112
KPX Adieresis Z -92
KPX Adieresis backslash -149
KPX Adieresis copyright -63
KPX Adieresis questiondown -149
KPX Adieresis Aacute -149
KPX Adieresis Egrave -63
KPX Adieresis Eacute -63
KPX Adieresis Ecircumflex -63
KPX Adieresis Edieresis -63
KPX Adieresis Igrave -63
KPX Adieresis Iacute -63
KPX Adieresis Icircumflex -63
KPX Adieresis Idieresis -63
KPX Adieresis Ntilde -63
KPX Adieresis Oacute -63
KPX Adieresis Dcaron -63
KPX Adieresis Dcroat -63
KPX Adieresis Emacron -63
KPX Adieresis Ebreve -63
KPX Adieresis Hcircumflex -196
KPX Adieresis hcircumflex -112
KPX Adieresis Hbar -196
KPX Adieresis hbar -112
KPX Adieresis Imacron -92
KPX Adieresis Ibreve -92
KPX Adieresis Iogonek -92
KPX Adieresis Idot -92
KPX Adieresis IJ -92
KPX Adieresis Jcircumflex -92
KPX Adieresis Kcommaaccent -112
KPX Adieresis kcommaaccent -92
KPX Adieresis kgreenlandic -235
KPX Adieresis Lacute -149
KPX Adieresis lacute -235
KPX Adieresis uni01AC -63
KPX Adieresis uni01AE -63
KPX Adieresis uni01DC -196
KPX Adieresis uni01DD -112
KPX Adieresis uni01F0 -63
KPX Adieresis uni01F4 -235
KPX Adieresis uni01F5 -149

KPX AE ampersand -63
KPX AE two -63
KPX AE seven -196
KPX AE eight -92
KPX AE nine -139
KPX AE colon -112
KPX AE less -235
KPX AE F -63
KPX AE G -63
KPX AE W -112
KPX AE Y -112
KPX AE Z -92
KPX AE backslash -149
KPX AE copyright -63
KPX AE questiondown -149
KPX AE Aacute -149
KPX AE Egrave -63
KPX AE Eacute -63
KPX AE Ecircumflex -63
KPX AE Edieresis -63
KPX AE Igrave -63
KPX AE Iacute -63
KPX AE Icircumflex -63
KPX AE Idieresis -63
KPX AE Ntilde -63
KPX AE Oacute -63
KPX AE Dcaron -63
KPX AE Dcroat -63
KPX AE Emacron -63
KPX AE Ebreve -63
KPX AE Hcircumflex -196
KPX AE hcircumflex -112
KPX AE Hbar -196
KPX AE hbar -112
KPX AE Imacron -92
KPX AE Ibreve -92
KPX AE Iogonek -92
KPX AE Idot -92
KPX AE IJ -92
KPX AE Jcircumflex -92
KPX AE Kcommaaccent -112
KPX AE kcommaaccent -92
KPX AE kgreenlandic -235
KPX AE Lacute -149
KPX AE lacute -235
KPX AE uni01AC -63
KPX AE uni01AE -63
KPX AE uni01DC -196
KPX AE uni01DD -112
KPX AE uni01F0 -63
KPX AE uni01F4 -235
KPX AE uni01F5 -149

KPX Egrave six -73
KPX Egrave Gcircumflex -73
KPX Egrave Gbreve -73
KPX Egrave Gdotaccent -73
KPX Egrave Gcommaaccent -73
KPX Egrave uni01DA -73

KPX Ecircumflex six -73
KPX Ecircumflex Gcircumflex -73
KPX Ecircumflex Gbreve -73
KPX Ecircumflex Gdotaccent -73
KPX Ecircumflex Gcommaaccent -73
KPX Ecircumflex uni01DA -73

KPX Igrave six -73
KPX Igrave Gcircumflex -73
KPX Igrave Gbreve -73
KPX Igrave Gdotaccent -73
KPX Igrave Gcommaaccent -73
KPX Igrave uni01DA -73

KPX Icircumflex six -73
KPX Icircumflex Gcircumflex -73
KPX Icircumflex Gbreve -73
KPX Icircumflex Gdotaccent -73
KPX Icircumflex Gcommaaccent -73
KPX Icircumflex uni01DA -73

KPX Eth less -159
KPX Eth kgreenlandic -159
KPX Eth lacute -159
KPX Eth uni01F4 -159

KPX Ograve less -159
KPX Ograve kgreenlandic -159
KPX Ograve lacute -159
KPX Ograve uni01F4 -159

KPX agrave seven -36
KPX agrave less -83
KPX agrave Hbar -36
KPX agrave lacute -83

KPX ucircumflex two -73
KPX ucircumflex seven -339
KPX ucircumflex eight -112
KPX ucircumflex nine -282
KPX ucircumflex colon -178
KPX ucircumflex less -319
KPX ucircumflex backslash -253
KPX ucircumflex questiondown -253
KPX ucircumflex Aacute -253
KPX ucircumflex Ebreve -73
KPX ucircumflex Hbar -339
KPX ucircumflex Idot -112
KPX ucircumflex lacute -319

KPX ydieresis two -73
KPX ydieresis seven -339
KPX ydieresis eight -112
KPX ydieresis nine -282
KPX ydieresis colon -178
KPX ydieresis less -319
KPX ydieresis backslash -253
KPX ydieresis questiondown -253
KPX ydieresis Aacute -253
KPX ydieresis Ebreve -73
KPX ydieresis Hbar -339
KPX ydieresis Idot -112
KPX ydieresis lacute -319

KPX Abreve O -8

KPX abreve two -73
KPX abreve seven -339
KPX abreve eight -73
KPX abreve nine -282
KPX abreve colon -159
KPX abreve less -319
KPX abreve backslash -253
KPX abreve questiondown -253
KPX abreve Aacute -253
KPX abreve Ebreve -73
KPX abreve Hbar -339
KPX abreve Idot -73
KPX abreve lacute -319

KPX Edotaccent seven -92
KPX Edotaccent less -188
KPX Edotaccent H -102
KPX Edotaccent R -102
KPX Edotaccent X -112
KPX Edotaccent backslash -131
KPX Edotaccent ordfeminine -102
KPX Edotaccent guillemotleft -102
KPX Edotaccent logicalnot -102
KPX Edotaccent sfthyphen -102
KPX Edotaccent acute -102
KPX Edotaccent mu -102
KPX Edotaccent paragraph -102
KPX Edotaccent periodcentered -102
KPX Edotaccent cedilla -102
KPX Edotaccent ordmasculine -102
KPX Edotaccent guillemotright -112
KPX Edotaccent onequarter -112
KPX Edotaccent onehalf -112
KPX Edotaccent threequarters -112
KPX Edotaccent questiondown -131
KPX Edotaccent Aacute -131
KPX Edotaccent Yacute -102
KPX Edotaccent ebreve -102
KPX Edotaccent Hbar -92
KPX Edotaccent dotlessi -112
KPX Edotaccent lacute -188


KPX Ecaron seven -92
KPX Ecaron less -188
KPX Ecaron H -102
KPX Ecaron R -102
KPX Ecaron X -112
KPX Ecaron backslash -131
KPX Ecaron ordfeminine -102
KPX Ecaron guillemotleft -102
KPX Ecaron logicalnot -102
KPX Ecaron sfthyphen -102
KPX Ecaron acute -102
KPX Ecaron mu -102
KPX Ecaron paragraph -102
KPX Ecaron periodcentered -102
KPX Ecaron cedilla -102
KPX Ecaron ordmasculine -102
KPX Ecaron guillemotright -112
KPX Ecaron onequarter -112
KPX Ecaron onehalf -112
KPX Ecaron threequarters -112
KPX Ecaron questiondown -131
KPX Ecaron Aacute -131
KPX Ecaron Yacute -102
KPX Ecaron ebreve -102
KPX Ecaron Hbar -92
KPX Ecaron dotlessi -112
KPX Ecaron lacute -188


KPX Gdotaccent six -73
KPX Gdotaccent Gdotaccent -73
KPX Gdotaccent Gcommaaccent -73

KPX Gcommaaccent six -73
KPX Gcommaaccent Gdotaccent -73
KPX Gcommaaccent Gcommaaccent -73

KPX Hbar dollar -159
KPX Hbar seven 47
KPX Hbar D -243
KPX Hbar F -264
KPX Hbar H -264
KPX Hbar R -264
KPX Hbar U -225
KPX Hbar V -243
KPX Hbar X -264
KPX Hbar Z -282
KPX Hbar backslash -339
KPX Hbar cent -243
KPX Hbar sterling -243
KPX Hbar currency -243
KPX Hbar yen -243
KPX Hbar brokenbar -243
KPX Hbar section -243
KPX Hbar dieresis -243
KPX Hbar copyright -264
KPX Hbar ordfeminine -264
KPX Hbar guillemotleft -264
KPX Hbar logicalnot -264
KPX Hbar sfthyphen -264
KPX Hbar acute -264
KPX Hbar mu -264
KPX Hbar paragraph -264
KPX Hbar periodcentered -264
KPX Hbar cedilla -264
KPX Hbar ordmasculine -264
KPX Hbar guillemotright -264
KPX Hbar onequarter -264
KPX Hbar onehalf -264
KPX Hbar threequarters -264
KPX Hbar questiondown -339
KPX Hbar Aacute -339
KPX Hbar Eacute -264
KPX Hbar Idieresis -264
KPX Hbar Yacute -264
KPX Hbar ebreve -264
KPX Hbar edotaccent -225
KPX Hbar ecaron -225
KPX Hbar gdotaccent -243
KPX Hbar gcommaaccent -243
KPX Hbar Hbar 47
KPX Hbar dotlessi -264

KPX hbar Hbar -112

KPX Idot dollar -92
KPX Idot Idot -92

KPX lacute dollar -196
KPX lacute ampersand -73
KPX lacute two -73
KPX lacute D -243
KPX lacute H -264
KPX lacute R -264
KPX lacute X -225
KPX lacute cent -243
KPX lacute sterling -243
KPX lacute currency -243
KPX lacute yen -243
KPX lacute brokenbar -243
KPX lacute section -243
KPX lacute dieresis -243
KPX lacute ordfeminine -264
KPX lacute guillemotleft -264
KPX lacute logicalnot -264
KPX lacute sfthyphen -264
KPX lacute acute -264
KPX lacute mu -264
KPX lacute paragraph -264
KPX lacute periodcentered -264
KPX lacute cedilla -264
KPX lacute ordmasculine -264
KPX lacute guillemotright -225
KPX lacute onequarter -225
KPX lacute onehalf -225
KPX lacute threequarters -225
KPX lacute Egrave -73
KPX lacute Icircumflex -73
KPX lacute Yacute -264
KPX lacute Ebreve -120
KPX lacute ebreve -264
KPX lacute dotlessi -225


KPX uni027D dollar -272
KPX uni027D hyphen -92
KPX uni027D nine 38
KPX uni027D less 75
KPX uni027D lacute 75
EndKernPairs
EndKernData
EndFontMetrics
       0FFTMs  <   GDEF^^  X  GPOSqm#     Q$GSUBv  TD  OS/2j  b   Vcmap0@  c8  :cvt &  vt  lfpgmj  w   gasp    xl   glyf|  xx nheadh |   6hhea    $hmtx9d   Skernj3 :  0locaD( R  SmaxpP	 d    name0   =bpost6QL   !prep" 	         =    )    )          F                    	 

              !% && 'd ee fg ho pv w| }   
& 
'
' 
(
1 
2
4 
5
 

 

 

 

 

 

 

 

 

 

 
} ~                                
B DFLT zarab armn brai cans cher cyrl geor grekhanihebr"kana0lao <latnLmathnko ogamrunrtfngthai          KUR   SND   URD                                                MKD  SRB                                                               4 ISM  4KSM  4LSM  4MOL  4NSM  4ROM  4SKS  4SSM  4                                                        kern ,kern 2mark :mark Dmark Lmkmk Tmkmk Z        
            	                  " * 4 < D L T \ d v ~     l         ,      	$   
"    
h        6    `(    A
    M  N >  X        & ,  w T t n   ehijkn  w|             &   ,   2   8 .~ !~ (~ ~  ~ *~     $    C  o  lm    
             
   , 2 8 > D J P V \ b h n t z                /t          (  /t        F   L   R   X   ^   d   j   p   v   |                      5   5   7   A   A   5   7   9   4   <   ;   7   2   6   9   5   6   8   8 r x ~                      &,28>DJPV\bhntz >h >h >h . .  . - . Q ] >h ?h + + >h  ;D    . 4 D D C C 5 * 5 qn qn qn qn     ?h ?h     . .           %            	    !

 ' . / 0 7             

 % , 7 8                              $  *  0  6  <  B  H  N  T  Z  `  f  l  r  x  ~                                                         &  , { { {       { { { { { { { w     { {     { { {  {     { {        { { { { { { { { { { { {   $   > D J P V \ b h n t z                       U               ,                !             8         z    Q       '            n   u   u   G    'D    &    2   8   >   D   J   P   V   \   b   h   n   t                                            0 6 < B H N T Z ` f l r x ~          ~  =0 ^0 0 0    0 !0   0 = 0 A0 T0 0 1 0 k 0 P0 = 20  t  '-  /3 55 78 :; =A         0  0 &  8      +` ` ,`  (2;       
    a` T`   6   > D J P V \ b h n t z                    $k ,y +y y  Xy .z w w h 
y y y M [  /[ >t g 4Y +y { u   u   -J  J   Hb  vv     ehijknwxyz{|    2   8   >   D   J   P   V   \   b   h   n   t 6t b b b b 6t .~ !~ (~ ~  ~ *~      : @ F L R X ^ d j p v |                 H   M L   J    T@ O     @ ,            =      U   .    *   L   T            E          H^  `b    lmo                         Z      	R     	    	     ! " #                                                                        $  *  0  6  <  B  H  N  T  Z 
  5   5   7 A A 4         7 A 9 4   ; ;                 7 2 6   4 9 4 4 9 5 6 f l  " F L R X ^ d j p v |                       U                    .      ,   T                        V                     ,   @   DR    D         R           " $ ' ( + , 2 8 < = D G H K L R X \ ]   Yayz{*7T             (.4:@FLRX^djpv| $*06<BHNTZ`flrx~ &,28>DJPV\bhntz
"(.4:@FLRX^djpv| ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '     ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '   ' ' ' ' ' ' ' ' ' ' '   ' ' '                     ' ' ' '                                       ' ' ' ' ' ' ' ' ' ' ' ' '        o   ' '  & $ =   D ]    4   5   6   8   :() ;AA =HH >QR ?YY Aaa By{ C F G H I** J77 KTT L M N O Y \ ^ _ a c g r z { !         
    ' '  b N  j      $ * 0 6 <   q l  @ H P 	      -      
    { { ~   . ^ d j p v |                      $*06<BHNTZ`fl      [                  ,   s                                           l                ,   @   DR    D                R          `               v        . $ ' ( + 0 1 2 = D G H K L P Q R ]     HQRYayz{*7T       
            ,28>DJPV\bhntz
"(.4:@FLRX^djpv| $*06<BHNTZ`flrx~ &,28>DJPV\bhntz
"(.4:@FLRX^djpv| $*06<BHNTZ`flrx~						 	&	,	2	8	>	D	J	P	V	\	b	h	n	t	z																						






"
(
.
4
:
@
F
L
R
X
^
d
j
p
v
|




















 $*06<BHNTZ`flrx~ &,28>DJPV\bhntz                               *   +      [   [         q        qR          d                     `   +   d   <      ,      K   2             R         ^R -       z   7      R R          <            R       v          n [         9       9   R       h       l          vR         \z R ,   @   DR   E   v   +   `   +      %    FR  ZR             R              D   E   R                          R R R 4   R    R    R               g    UR .R ~   RR OR R R           |   R <      R  ;R }R       F   \   R  UR  UR YR  UR lR >R                      R    R R          zR             4  ^R R    R       j   >R r   R    _R      qR R                                     [   [            9               9               D   P   P   P      #   #                           R [          Ly t      Q   L   B   RR f         ,   4   $R    '         _      zR f   4            L             }      `R    e               c      *   ,   *   L         R    - ^      G      q   4          R 
R       ER R R R V    o   d            s   k   	   k       R        :         `            R    R    R I    R OR R R d   7      R    -   d   7               f    U <             v   ;         <         \      R          &         R      x   9         \         w                             R       6   R  P     $ = 
 D ] $   >   ?   @   A   B   D   F   H   I J K() LAA NHH OQR PTT RYY Saa Tll Uvv Vy{ W Z ]g eik mm  GG MM     ## 44 }~ cd pq sx {     	 	 

 

 

 





	












/246:<HV!ZPbpzz||  	    	     ! " #                                                                        $  *  0  6  <  B  H  N  T  Z 
  5   5   7 A A 4         7 A 9 4   ; ;                 7 2 6   4 9 4 4 9 5 6   W
"(.4:@FLRX^djpv| $*06<BHNTZ`flrx~ &,28>DJPV\bhntz
"(.4:@FLRX^djpv|	 						$	*	0	6	<	B	H	N	T	Z	`	f	l	r	x	~																					





 
&
,
2
8
>
D
J
P
V
\
b
h
n
t
z






















"(.4:@FLRX^djpv| $*06<BHNTZ`flrx~ &,28>DJPV\bhntz
"(.4:@FLRX^dlrx~
"(.4:@FLRX^djpv| $*06<BHNTZ`flrx~
$*06<BHNTZ`flrx~ &,28>DJPV\bhntz " " " " " " " " " " ] R  c $ 4     4  	   4     ~ R  c  O {  {  { s {  / /   X{ { { >{ { L{ {  { { { { { {  U{  { ] {  M  h{ { { { 	  s       \      3      ) * {     / =  { T { O c ({   {  {{ R  R 3 {  /   { 	 { { { {  ^{ {   { { { { { { `{ { $ { { { { {   / { { )    ]{ { { "{ !{ { { { [{ Z { 8 @{ { { { { %{ ;{ {   {  {  { { { { {  { { { { { @  @   { { 6 { / G{ { $ @      {    { 6 {  {   { {  { {  { { { { { E{ { @{ {   Z { { { c{     ] R R / * $  
    	    4     c  H     R  
 v { + { { { { { { { { j{ w{ { { { >{ { { { + { +{ { { 7{ x{ { { ${ i{ { { / / l{ e{  +{ U {  { 
 h{  {  {  {  {    {  { 3 {  ){  {  {    {  { { {   { { c { {  { j{ {   { z { { { { { { { { { w{ { { #{ /{ /{ /{ { {  t  { { { { {  { r{ { { j{ { c  c  c  c  ) x L  B R f   , 4 ${  '    _  z f 4 D   L     }1 { `{  e    4 8 {    T  t {  1  T ={  &{ {  q {  { { W   {  8{ 
 i{ { j{ w{  {  L{  { { {  {   8 d { {  C{  b{ D M{  {  q  {  "  >  ?{    { 3 { > 7{  {   q {    "{ H   {  { 4   {  L{  {    {   	  b   <   \      &   R  x 9  { \{   w         { {   h{ h{ h{ ] J{ { { ^{ {  s     $ = 
 D ] $   >   ?   @   A   B   D   E   G   H I J() KAB MHI OPV QX] X__ ^aa _ff `ij alp ct{ h p q ug }ik mm  FK MS UU W^ ef jj ll pp xx     %;<>A
P#$V+,X/6ZAAbDDcNNdYYe\\f}~gijlmopcdqpxs{|	 	























  !Pb*zz=||>?ILNOQRV        ! # $  )

 / 6 A B  
        "  (  .  4  :  @  F  L  R  X  ^  d  j  p  v  |                                                         $  *  0  6  <  B  H  N  T  Z  `  f  l  r  x  ~       { { { { { { { { { { { { { { { { \{ { o r r  { Gr { { { { r { { { { { { { { S{ A{ { { { 5{ 5{ 5{ 5{ { { { { { { { { { { { { { { { { { { { { { `   
^  &                                                                                              k  k                                                 &   &          k                                        k                                                                                             &                                             &                                                                            2                                                    a          u  k  <                                    D     &                                                                                                                                           &                                                                                                                                                  DD                    )  a2  YN                        Nu                    }                  k                    Ya                                                                D                                                                Na                D      D        D                                                                                                                                                              ^  D                                                                        Y                                                                          }                                                                          a                                                                         &   &          k                                                                                                                           & &                                                                    k K                                                                                           K     /                                                          k                                                    k                k                        ;    $ $  % %  & &  ) )  . .  / /  2 2  3 3 	 4 4 
 6 6  7 7  9 9  : :  ; ;  < <  = =  I I  U U  Y Y  Z Z  \ \                   
                                                   "" && :: ?? }} 		 

 

 

 
	
	     U             $ $  & &  2 2  4 4  6 6  7 7 	 8 8 
 9 9  : :  ; ;  < <  D D  F F  H H  I I  L L  R R  U U  V V  X X  Y Y  Z Z  \ \                   
                                                               !! "" ## $$  && 	++ !-- !// !00 
11 33 !55 !66 "88 #::     # " " " #

 $

 %

 $

 %   A  $ % & ) . / 2 3 4 6 7 9 : ; < = I U Y Z \                            "&:?}	



	  `    $ X               #                            ;    #'  )- /3 
59     
0 DFLT zarab armn brai cans cher cyrl georgrekhani hebr,kana>lao JlatnVmathnko ogamrunrtfngthai           KUR  SND  URD                  	                       MKD  SRB                                                            F CAT  ZESP  ZGAL  ZISM  bKSM  bLSM  bMOL  vNSM  bROM  vSKS  bSSM  b       
             
          
                                              aalt taalt zaalt case ccmp ccmp ccmp ccmp dlig dlig dlig hlig hlig liga locl locl salt salt salt                                                   	        
                          : B J d l t |                $        >    
fn@                  
        ^    n    ~   	   	    	    	8    	V    	l   	    	    	    

    
    
    
"    
*    
2    
D           B    9           && 99                    H      8 L M *_3





  k $ =  E E  G G  I I  K K  L M  N O  W W                                                                                           		              "" $$ && (( ** ,, .. 00 22 44 66 88 :; == ?? AA HH RR TT VV yz             ** __                  33  

 

     &                                  &                                  $ $    4 F                                        $ $    4 F                                           $ $    4 F                                           $ $    4 F                                           $ $    4 F                                         (    0       #&                       .    6       '' )+                       .    6       ,- /0                       .    6       13 55                       (    0       69                      
         0D          6       " (  I O  I L  O  L~  I   I       3  '  B    8   	  
                    W   V        W  A     ( : F P Z f r   
4  "
'     
3  
2  "  
  $ ;  
  V  
  0  
  ( /  
   F   
   X
   R    " ) 5 6 7 D F  k     k      hgiefkj  $:@GMU[   hgiefkj  $:@GMU[      , - D O  *      " &         , - D O \  T  9          !    L M *_3

  {                               ;;;;;          c )    3 63E f   R 
$ !  PfEd   m`              ,   
       0     ,  
   h        ~OSXZbw%V_?5JR>PjGv#.[jx{}EMWY[]} d q         !	!I!K!N!!###!#(#,#u#z#}#######$#$i&&&&''	'''K'M'R'V'^''''''()))A))))***/*k***++$+T,w,-%...%..MGMQWn+AKSWg&AO#        QWZ\pz1Ya?	7LT@RtFn &0]w{}   HPY[]_   j t        ! !!K!N!P!!###$#+#s#z#}#######$"$`% &&&'''')'M'O'V'X'a''''''))
)@))))* **/*j*}**+ ++S,`,y- ..."..MЦDLPTb"0FNVd  (     a_WRpomlk_]\U@< A=;2& vmhd^\({wn\"	plk\kXkVkTkJk/k)k'jjjjjjjjjj~j}joj"#"<;~rm                                                                                                                                                                                                                                                                                                                                                                                                                            
              ~           b                       O    Q  S    W  X    Z  Z    \  b    p  w    z                #      $    %  8  1  V    Y  _    a                      %      '      B  ?  ?  G      H      J      K      M      N      O      S      Z      ]      ^      _      a      n      q      v      w      }                          	        5    7  J    L  R  #  T    *                >    @  P  
  R  j    t    4      F      S      c      d  F  G  e  n  v  g       p    #    &  .    0  [    ]  j    w  x    {  {    }  }                                   	      	     E  	  H  M  	D  P  W  	J  Y  Y  	R  [  [  	S  ]  ]  	T  _  }  	U      	t      	      	      	      	      	      	       d  	   j   q  
P   t     
X        
s        
        
        
        
        
        
        
  !   !	  
  !  !I  
  !K  !K  
  !N  !N  
  !P  !  
  !  !  "  !  #  #  #  #    #  #!    #$  #(    #+  #,    #s  #u    #z  #z    #}  #}    #  #    #  #    #  #    #  #    #  #    #  #    #  #    $"  $#    $`  $i    %   &    &  &  }  &  &    &  &    '  '    '  '	    '  ''    ')  'K    'M  'M    'O  'R    'V  'V    'X  '^    'a  '    '  '  %  '  '  =  '  '  K  '  '  M  '  '  N  '  (  T  )  )  d  )
  )  f  )@  )A  h  )  )  j  )  )  l  )  )  t  )  )  u  *   *  w  *  *  z  */  */    *j  *k    *}  *    *  *    *  *    +   +    +  +$    +S  +T    ,`  ,w    ,y  ,    -   -%    .  .  )  .  .  *  ."  .%  +  ..  ..  /  M  M  0      p  D  G    L  M    P  Q    T  W    b  n                                  "  +    0  A    F  K    N  S    V  W    d  g                                       "     &  <  (  A  c      }       ~          O              #                #     V   8 9  P ; >  R @ D  V F F  [ J P  \ R k  c  ;  }     0           .    <    K    Z - .  b 1 1  d 5 5  e   #  f % +   - @   C C   
                                                                       	 
                        ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a                                  
 r d e i
 x  p k
 v j   s g wU l |>    c nT m }
 b   		



  :
/

$
%
 y

	
                   q z    #/        7 7 R -      99 7 y  \  H/        {P f    o       H  T    s 
 +       b   -  { T       \q b  #H 99` ```{  w `  {  P f  f w ;  {    J/    }5 o   o   -{  Tf f q D ) f s      , %Id@QX Y!-,%Id@QX Y!-,   Py PXY%%#  Py PXY%-,KPX EDY!-,%E`D-,KSX%%EDY!!-,ED-         ff   @ D /1 0!%!!f sr)      	 @-   			:H F  	
991 /0KSX9Y"K	TK
T[KT[KT[X 
 @  
 
878Y3#3#Z2q1qe      @I F 1 <20#!#o$++      /   N@4L 	L
	  91 /<<<<<<<2220!3!!!!#!#!7!!7!!!h$igP'RT$hggh%JT'Pf8T%aabbN    D   / `@9$ KOM+* K# M-*',+ -#$*

'09991 /<2290%>54&'.'#.'7.54$?3Xfs_l""VOT;d;tS"\jX/d,ZgT\ZdFO.2U-/*>D$~       # / 3 O@,W*W RW!W*R1$Q0V40-2
'
	
'	-
		4991 2<0"&54324&#"3264&#"326"&5432#ሟ躈HNMp~QKk\LMoQKk 纈.ñij­\dkjí]dò  ` 	 3 @T//	 ///:0 /&
Z&%Y)Z"VQ
0/&,
% 3,3
4999991 /9990KSX999Y"]@X*:I t 	 

	%	& %&+ )*%*&69%9&6/K Ik xu/ ] ]	326#'#"$547.5467>32.#">7Vy}^n-gjj.+ExNQ#KF|&EKjXgA[lSUڴt._6Dz2RZ$$/1d,VXOz    o  @
I F 1 0#o+  j  @ \
 
9991 0#&5 jLL\ZəE)G#   N  !@ \
 
 9991 04'3 
KL\ZKS7     =J  N@, 	]]
V
	 	<2<2991 <22990%#'-73%g:r:g:PrPbybcy        #@ 	` 
<<1 /<<0!!#!5!-Ө-Ӫ--     @  :b H  1 0KSX9Y"K	TK
T[X  @   878Y@%%55FFVV]KTX     878Y73#!ぐ@    \  ?@	c  991 0KTX  @   878Y@__oo ]!!}    w  {   Q@   : H   91 /0KSXY"K	TK
T[KT[X  @   878Y73#1    jBj  .@  : F  91 0KSXY"3#m    f  # D@d	d V	Q$!$1 0K	TK
T[KT[X $ @  $ $878Y2#"547>"3267654&e[]g\\L7\murP7[ku}QOuХQOѥ    d   
 T@*	:ddF d		 

99991 /20KSX2Y"7!7%3!!J#sI }HHժ       @, : eYdVd 	999991 /990KSX9Y"K
TX  @   878Y@(
 
 , ,ey uxy'4Ucv] ]	!!7>54&#"7>32{#7!qn_%|`rרBu]azDA12Щr     + @+	d!KXd+K X(dVQ!g,! 	"+ %,991 90K
TX , @  , ,878YKTKT[KT[X ,  , , @878Y@a ff*a+ +] ]>32#"&'732654&+732654&#"Dnd跡~vslR^c%^d`l  &$}xL:9%%43ˢhq^g))    %   
  @;
 
  
: d F		991 /<290KSXY"KTKT[KT[KT[KT[KT[X     @878Y@$:	  + *): 896fy u  ] ]33##!7	!q!CD^'7f3`   )   @6   :dKOdd FQ! 	  	!9991 90KSX2Y"KTKT[KT[X !  ! ! @878Y!>32#"&'732$54&#"H._1{qPZg%\^ OZը޾\@E  --갂%%     * @#	d	dkKhj(VQ+  "+91 90K
TX + @  + +878Y@`z{JJJJ*ZZZZ*jjjj*zzzyz********-] ]4&#"326.#">32#"5476$32pӁr":U>IpkfFimbg%N)ﰄ:&(UWӲ_AF      @:d F 991 /0KSXY"K
TX  @   878YKTKT[KT[X     @878Y@	')Zhxy]!#!' V+     D   / c@#$d	dd*VQg0$ '-'!0991 990KTKT[KT[X 0  0 0 @878Y4&#"3264&#"326 #"&5467.54$32˛gtsqxگin-qrD_ttdz+{Ӱ"$lŘ     Z  * @("K "d
kj h(dVQ+%+91 90K
TX + @  + +878YKTKT[KT[KT[KT[KT[X +  + + @878Y@F FFd ddd ]?32#"&5467>32#"&32654&#"Z%:U>JpjgFhobhܲMǄp҂r!&(UYӲ^BFv  j  #   k@(   :H lH   91 /0KSXY"K
TKT[X  @   878Y3#3#91l2#    ##  	 @.			   :Hb Hl
	   
991 0KSX9Y"]]K	TK
T[KT[X 
 @  
 
878Y@%%55FFVV
]73#3##၏1@     ^  M@*`` ` `: nm 291 90KSXY"	5Ѧ   `   @ `` <21 0!!!!     ^  O@+` ` ``: nm <91 90KSXY"55//m        ! @F
 :K!NZ HV 

!"9991 /9990KSX9Y"KTX " @  " "878Y@ttttt]%#7>32#7>?>54&#"11fjkyhT8NojTDm`Ph98gbTB^\{^\YFj9LVGB    w 4 @ Z@3 5"!4;or!o%5o	ro%.A>!"4 811(A991 2990%#"&54 3273654 !" !267#  476$3   "32654&EW)\']RǥUѼhAiāresJLƘIPG0'}rW]rfiGr~wߜp~fy        
 @@	
	 
    : Z	 F
	91 /<90KSXY"]@,	
 
 * H IHGWh gw] ]3#!#	!>`]$+   7        l@<      :ZZ FZs  
 !9991 /90KSXY"!2 )!2654&#!2654&#Zг||TjEƃX-z՜ݨvlf>|aY     V  S@Ze tZVQ  
  9991 0KTKT[X        @878Yo!].#"32$7#  476$32)`}^<?ɋ y/wz{sz9Ѐba^lzYY348XG   7     E@#  :Z FZ

  99991 /0KSXY"!  #!!  4&!ZZavwKSt ߿y|z/wc  7  
  Y@1     :ZZ FZs

	  991 /0KSXY"!!!!!!Z!V!7h!=ժF   7   	 T@-	 	 	 	  	:ZZ Fs	  	
991 /0KSXY"!!!!#ZX!qVP!ժH7   \ # @5"#! : !Zu!ZetZVQ$ $9991 990KSX9Y"KTKT[X $  $ $ @878Y%!7!#  47>32.#"326^NƟku)Z_Q]joIO8WUGG^cylۘ-     7    }@D
 	    :Zs F

	  9991 /<20KSXY"3!3#!#Zwwˋ#d+9   7  %  2@   : F  91 /0KSXY"3#Z+   f!  K@& 	
: Zv F 9991 990KSX9Y"3+73267V5P!?%󪚾     7   
 @G	
 
 
 
  
: F		
  
991 /<290KSXY"]@j$%#675HXkixx
	&&%'787=<IGFYX\[hfbbzxx~~$] ]3!	##Z{u7)   7    9@   :Z F  9991 /0KSXY"3!!X !^Ө  7   @Q	
	

	 
	
  :
 F
	  9991 /<290KSXY"]@		)70
JC
x

&)(')	2547	5
DGJCI	F
X YWhfw	
*] ]!!###Z/B7ž+   7   	 @@	 	  	: F	  	
999991 /<2990KSXY"]@P' ?6H[j
")&5:=7IWY_hkw] ]!3!#Ze  +   R  # D@	Z ZVQ$ $KTKT[KT[KT[X  @8Y1 00%]"32$7>54&  476$3  ^<?Ƕ[=@E{l8<xpLix⣡lvFR   7   
  _@/ 
  
	 

 
:ZZ F		
  
99991 /0KSXY"]!2 !##32654&#Zul}qվ/ϰit     T  & ~@,! !  : 'ZZVQ' $ 'KTKT[KT[KT[X  @8Y991 990KSX9Y"0(]Vz z]#  476$3   #"32$7>54&yl}9<^<?Ƕ[=@APgTix⣡lv     7     @< :	Z ZF 	9999991 /<9990KSXY"X]@XYYYkkk{{{
]!2654&##.+#!2fwu@U8u-vz{#ݼ/mtvhdջ    ' @7	
:
eYZ YZ%VQ(
 "(99991 90KSX99Y"	 ]@  ) )9 93333	]].#" !"&'732654&/.54 !2'e]Oy͠wy)oo[yϗWk67HM,5/0EFZ]&6&    X  h  s@!:Z F 99991 /20KSX2Y"]@%%%> >O O]]`` ]!!#!y   ժ+     w  @<	
   : ZQ F 9991 299990KSX99Y"@!	
4	4
444444]K	TX  @   878Y ]332673 !"$5467=˰	.˴;

u=O\#W2         @&   :F  91 /290KSXY" ]@0* (8GGXWgieyyw h]]!33+    ) @I	
	
	


   :
 F
	 91 /<2290KSXY"]@	
()&
;;3
KF



')$)+*(-	&
*6756
68KGCH
GVVgihggyx	
1] ]333##H3J-hE

+#     M@I   	


: F	 

91 /<290KSXY"]@	)+):8;IJIYZhhhy 		
' '()())&	(8::665	5
8F FGGD	F
HYYXT	T
Xf fehfggfe	e
fzzzyu	u
 	 	
 	
I] ]3	3	#	# s7u#     h  @7   : F  	9991 /290KSXY" ]@:(9I IZY{y$5Vj]]3	3#[ʉf9      	 P@:Z FZ	 

91 /0KSXY"x ]@ w]]!!!7!{ =w՚o    R\  Q@!   :oo \   991 0KSXY"]]!#3!X     B  0@ : F 91 0KSXY"#Xm      D@    :oo \   991 0KSXY"	!73#7X+ޏ      @
 F91 290	#	#HHu-     o 1 0!5  f  k  91 0 K	TKT[X     @878YK	TK
T[KT[KT[KT[X  @   878Y@D DU gv]#Jњfv  T`{   +@d 
 #"$! )*(+    :+( !!o(LK{LzQ+"!% %#%	",	]Բ?]99991 /99990KSX99999Y"0 ]@.<<O[[jjzz2C@TPd`tp]]@
!"#$+	 ]@---p-P-?-]#7#"&54$)7>54&#"7>32#"3267L}"Q9 
Zd h]
Ѹob$dc1Yc..''!Y~yXd״     J  % @M
	$#$#"$# !#$#$#%$$#:!LLQz$\""#% 	!#$ $%#$&#]Դ]999991 /990KSX9999Y"`']'']4&#"3267>>32#"&'#3uU7:CsW89FDpwnHgm2!/SOSmQORm\iƢvNTdc   ^J{  K@KNL KNLzQ  
 " 9991 0KTX        @878Y.#"3267#"&547>32J%BPX6V^L]#PY}{TN500>9W}..!!Ϯ%uPR#  ^  % @L  :  LLQz\ %"&]@_?]999991 /990KSX9999Y"`''']%#"&547>323#3267>54&#"XJ{vpJfl-xѹtV8;DsW5:EadǦ-wOShabSQTkRMS  ^{ 	 & @$ o
KNL
|L!zQ'
$	 #$#"']@$$$_$?$]99991 0p(]@,o ooolo	o
oo$o%o&] ]6]@	(((?(]>54&#"!3267#"&547>32{65x\#cm}yNy"z&,64((ͯ-vJP.i        @<
	:o} \~

		 K	TK
T[KT[KT[KT[KT[KT[KT[KT[X 8YĴp`]̴ P ]991 /22990KSX9Y"P@]#"!!##737>3d[/Ѿ&Oic/яNƠ  BV{  . @X"#! -.,        :#,KL#Lz,L ~   ) "/]99991 /99990KSX99999Y"`0]00] !"&'7326?#"&547>3274&#"32ſ7aH"DV$MvvkGgq) \vI/LUy`+,*TX\ś)sLRi`e:4V|=  H    @M   
	: 	Lz\ '%$]Դ_?]99991 /<99990KSX999Y"0]`]]?]#>54&#"#3>32u	
j_ y/wFx	\/HT^Ȧ^m$R    H  /   p@*   :c \~( %$]@p`]9991 /0KSXY"@	]@p	`	P	]3#3#w-'۸  V7   @A	   :
 c
} ~\
		( @p ` P @ 0   ]...	]9991 9990KSX9Y"@)////````oooo]@	o_O]3+732673#)%0-vE/l[3-`GCHZ(   H   
 @H))	 
 

 
  
:~ \		
  %
$9991 /<90KSXY"]@>6STThi
::@XXWWiljyyy] ]KTX     @878Y33	##ww@"ju#  H  /  J@   : \  %$]91 /0KSXY"@]`]pP]3#wѸ    H  ?{ +@s	    :# 	L& z~# )#'#')$,]Ĵp`]@))))o)O)]Դ#`#]99999991 /<<<2990KSX9999Y"0-]@-`-p-]@------o-P-O-	]#>54&#"#>54&#"#3>32>32/dZ{dX{۸#KszT{\+>Zdɡ%?[eɡ`bgrv|!O     H  {  @M   
	: 	Lz~ '*$]Դ_?]99991 /<99990KSX999Y"0?]`]]#>54&#"#3>32u	
j_!{ٸ%Mw	\/HT^ũ`aj$R     ^{    E@L L	z Q!"!]@	_?]1 0p"]@	"""?"]"&5467>323254&#"O?cN?by~h@/3zVW˘CacJ  V{  % @O
	$#$$#"$# !#$#$#%$$#:!LLzQ"$~&"&%	 !#$ $%#&K	TK
T[KT[KT[KT[KT[KT[KT[KT[X #8Y@	_?]999991 990KSX9999Y"`'p'']@	'''']4&#"3267>>32#"&'#3xR:9DvW59FJ{voJgw(s-TPOnRNRiad˦wOScb
  ^Z{  " @L : LLzQ~# %"#KTX  @8YԲ]999991 990KSX9999Y"`$]$$]%#"&547>3273#3254&#"VJzwoHg|$ չ:|uwW7:Cadɢ.xNTbcRMQNR    H  {  @
 		$Ĵp	`	]̴pP]991 @ Lz	~/990K:PX@			
		99Y"O]@@ @@@@@@@P	]].#"#3>32H)$q۸#Is:߻`ah     { ( @? 	
 : KOL KOL&zQ)  #)K
TKT[KT[X #8Y9991 990KSX99Y"@(   //)X	X
XXXX) )9 9J JY Y] ].#"#"&'732654/.54$32 #IV;{Yv$eZ?[?((cUc53pa"$46tY`;%y^     b  @>	
:	o ~	}
	 K	TK
T[KT[KT[X 8Y991 /<2990KSX9Y"]@gyy]!;#"&5467#733bwMUw>=`".@:7!`>     u`  @L
	   : 	LQ~ 'K	TK
T[KT[KT[KT[KT[KT[KT[X 8Y]Դ_?]Ĵo]99991 /299990KSX999Y"`]332673#7#"&546
	h_!{ٸ%Ny
c1FU]ȩlbkZ     `  @'+++ +  : ~ K	TKT[KT[KT[KT[KT[X  8Y91 /290KSXY"]@,x%75IIgftsu] ]0]33#ä`H    ` m@J++

	


+ +  :
 ~
	 KTK	T[KT[X  8Y91 /<2290KSXY"]@5
ED
ST
gdvt




	,&(	)
$6=768
36LHJJII	H
F[XZYZX
feeddf`	fv{zyvv	
	=] ]@.







] ]333##/> 7T`{{`      ` ~@H+++  
+	
 
+
	+++:
 ~
	 KTKT[KT[KT[X 8Y91 /<290KSXY" ]@ * )&'%&))	)
+: 865579
;J IGEEGI
JV VUVXW	f fffefg	f
fv uvuuw
v	
 
 J		
&+)&
6886
FIIF
Xihh
wx


]]]	##	3;d'w`DNk V` @F
+
 	+  + +  +

+
:	 }~
	 K	TKT[KT[KT[KT[X 8YKTX  @8Y991 29990KSX9Y"]@f&7Fv	w
v  & $$)9	9
98I	I
HHw wwx	x
vvyy	
 
*] ]+7326?33}jMlC9úhkTzk7Z    X` 	 s@++:o ~o	 

KTKT[KT[KT[X 8Y91 /0KSXY"x ]@xw]]!!!7!j!s!Kk`ۓ%   4@f	-.-..- 
	  : 5'-	)'.)o'oo' \5)(54. 	 $- 59991 99999990KSX9999Y"]@K%%%%%55555HHHHHK K!K"K#K$K%Z Z!Z"Z#Z$Z%%]#";#"&546?47654&+7326?>7>3M^3 yoIQ/UaNG-
bq=> /G7.OgKB&5?9m{ D%	2-UKm{'"       1 0#        4 @f	-.-..- 
	  :-5) 	)'.'o)o )o\54.  	5)('*(5991 99999990KSX9999Y"7326?>7.546?>54&+732;#"#N^3!xoIP/UaNJ-
bq>>~5F5/OfL@&"2@9l{D'	1-VJn~&"  1  #@ `` 1 990#"'&'&'&#"5>32326ian^Xbian
^V1OD;>MSOE<>L   `  	 n@1	 :H F~
	 	 
99991 0KSX9Y" ]  ]#3#73yZ1p1eH      ! @[   	
 !  :
KNKNLL L LzQ"!  

"91 2<0KSX9999Y".'>7#.5 %3z+I>#/|YBS#AM<d;b8d׆!%--*!2     1    @E:
oK dVd
	
 9991 /2<2990KSX9Y".#"!!!!73#737$32#=@))yZ!3![-4F(*׏/я     ^ R # / @I	- '!-
-L'L!0 *$0*	$
$?@*?09999999991 9999999907'#"&''7.5467'7>324&#"326{r%$&(r;t=:x=q%%&&s7t@<u\rpqqs;w>?s9q(&%%s>v:@t8s'%$|ppr   \  b  @]:	 	F 	
	9991 /2<2<290KSXY"]@85ESww

&&&::GFWUT``vvuu] ]!#!7!7'!7!33!!!beXX`6
̾ Rq
9{3{JD{3       @  <21 0##
 
     =  B @J23-4  3:*M)-o&Mo@V&C230
 0:34
 00#=
#
7C99999991 9990>54&/.#"#"&'732654/.5467.54632ZRVkPQUU~ H:gXzUr))ER L;pL{Rv+'G1o96q[33p82aSϤ''aIOZ<UuFe5#Z7&(_Oby
3TqJ`?&Q3   yF   @  99991 <20K	TK
T[KT[KT[KT[X  @   878Y K
TKT[X  @   878Y@"@@@@QQQQO OOOPPPP]]3#%3#)'        / I C@&=>:A$104G $73D=00*/D0/J21 /02#"$'&5476$"3267>54&'..#"3267#"&54632 mmllmmmmllmm^^``^^⃄^]]^\^BB@zBCFInmmmmnnmmmmng^^^傁^^__^]⃅]^^! "     R 
 + / r@@	 " .,#",&V0.-)/,0
	 #";);09999991 99990"326?#7#"&546;5>54&#"7>32!!RLAsX:`kж]dFIODPPKS;F{=@pABzdFA""|x7{    q#   1@	 l
	  991 <299077'%}'%}#RR     ^  @
`  1 0!#!^  \        / 8 L `@6EBC?2H09JC9 $HE301B<?96I12K62C<0/K0/1*M299991 /29990"3267>54&'.'2#"$'&5476$#32654&'2#'.+# ^^``^^⃄^]]^\^ㄘmmllmmmmllmm}{{nWXfi`C.;I6Bf^^^傁^^__^]⃅]^^gnmmmmnnmmmmnb>KL?gwyVpMI`3D }b   @1 @o K	QX @8Y0!!V  u=    @ V	,-,1 0"32654&'2#"&546 PnnPPnoO@v+..ooPOmmOOp1.-rB          .@` 	` 
<2<21 /<<0!!#!5!!!-Ө-}}    J  @/A A: V 	C9991 990KSX9Y"]@	)),,]KTKT[KT[KT[KT[KT[KT[KT[X  @   878Y@#6 99F OOLLLLFYYjjzz]	!!7>54&#"7>32;:TF7SL@{@BrnT.V(6C"${rY>q  ! ( k@*	( %V)	( C"C)991 90@ (


	
 ]]>32#"&'732654&+732654&#"S~7}raKP߸@@5p?{abV\fsRR8|=iVMr^Hy\R>?lH@55    -f   1 0 K	TKT[X     @878YK	TKT[KT[KT[KT[X  @   878YK
TX     878Y@VV   ]3#fqf    V` & @X
	& #$"%  	  :%	L"Q ~'&'	% % '9991 2<990KSX999Y"3326733267#"&5#"&'-um 
# ,P&BK8i]lV
G4]d
TJPNVF     ;  i@2
	: F %%99991 290KSX9Y"!###.54  1ύXfN   HF  /@  :H    91 0KSXY"3#2F     du#    &@	
  
		991 /90!#"&'732654&'$"+V+'O*<G3W*ds=5H9   
 @/	AA: 		V	
 9991 20KSX2Y"]@		//??OO__]3?33!w摍
c)t'+n     R    4@	V ;;99991 04&#"3262 #"&5467>!!catc\z˖&%>wPns֗mvⴚD?jv`{   o#   1@	 l
	 991 <2990%77779'c''`%^R^^R '
Xd& {  
/5   & {  '
/5   td !'
Xd& u  
/5    Lpf`  ! @I
 :! HK!NZ~" 	!
$"9991 9990KSX9Y"KTX "  " " @878Y@#ddddddd zyzzzz]73#"&546?>?33267d21gkkxgU9NnkTCm_Qhb98gbTD^Z{^\YFj9LVGB  k& $  u  k& $  u  m& $  u  ^& $  u  N& $  u   m   ! @P ! !: 	Z 	S "!  "999991 /<9990KSXY" ]@8&9MW (98HGHW[YXX!gww ] ]4&#"326.54632#!#	!Y?@WW@?Y69rrIE>`]$Z?YWA?XX%qErrOz$        @L
 :	ZZ ZZFZs
	91 /<0KSXY"]@- 	
	 G IIIGWXg fwuwwy ]	!%!!!!!!#ʚ!X!8i!>I7F   Vu& &   z   7  
k& (  u 7  
k& (  u 7  
m& (  u 7  
N& (  u 7  Vk& ,  ;u 7  k& ,  ;u 7  m& ,  ;u 7  "N& ,  ;u        o@=     :oZ FZ

  /999991 /220KSXY"!  #!#73!!!  4&!dYawwL)^PfTs ߾z|zc   7  ^& 1  u Rk& 2  Tu Rk& 2  Tu Rm& 2  Tu R^& 2  Tu RN& 2  Tu  ?  @M
`
	``````  
`	
 :
 	
	 <291 <290KSXY"		'	7	7w55v8vL57y5yy5 y   7@B78(&# )562'#Z2Z#V2Q8',(68), 	&,5	(,7, 	8.99999991 999990@  $7754709	&5&5')765]]KTKT[KT[KT[X 8  8 8 @878Y@>I JJ7Y Zdjgu{w) D6C7W S6S7`6`7wq6q76767] ].#"	32$7>54&.5476$327#"&''-b\>Au3c[>?''zm}9TZ((vp˽LZ<=mr-W,DCpz8]PUPMMcIbTRc  wk& 8  u wk& 8  u wm& 8  u wN& 8  u   hk& <  u  7     q@=:Z ZF 
999991 /0KSXY"!#3!2 32654&#D B#3
qm|rRѯhs  ` 5@\#$#$$#45 51203  5:3*$	# 0KL0L\Q445$'#  35'*- 	' '-#56999999991 /990KSX999Y" ]@     ] ]KTKT[KT[KT[KT[KT[KT[KT[X 6 @  6 6878Y6$32#"&'732654&/.5467>54&#"#=&	Ů*01wRL?AG|/N3aCԭqd۹q޺=%a(H%'^Pr[-NC+RoC~%NZ  T`f& D   Cd    Tf& D   vd    T`f& D  d    T7& D  d    T`& D   jd    T`& D  d     T{ 	 > I@T5>3*# I?>?o3 o$K#NF L'
K>{;L|z-'Q3JI@C54?	 	>3
C8*?	#$	?C0"J9999999991 2<<<99990@2;
;K
K\
\k
k{
{
3=0>D=@>T=P>c=`>t=p>=>]]KTX J  J J @878Y@,o ooolo	ooooo1234?@AB"#] ]>54&#">32>32!3267#"&'#"&54$)7>54&#"#"3267|6h]-Vx["dm8f܄9 
Zdfob$"z''Z\Z\.i<&,64((sqvn1Yc..yXd״ ^uJ{& F   zw    ^f& H   Co    ^f& H   vo    ^f& H  o    ^& H   jo    H  f&    C   H  +f&    v   H  f&      H  &    j    \  . @`     :# #L)L	Q\/& ,,&,&"/99991 9990KSX9Y"KTX /  / / @878Y#"&5467>32''%'3%.#"3254&DEOKTRLX:(| G`P#+W,ufvdt|xet|k^ȃm_bdCDl    H  7& Q      ^f& R   Cs    ^f& R   vs    ^f& R  s    ^7& R  s    ^& R   js      o    )@ `
	> <<1 03#3#!!oA  	 ' 1 @B'2")(	 ,%"
,&",L"Lz"Q2/&2)( 	/
/%/'"299999991 99999990@DJ
HEGV%U&X)kkg%b&f's&w'p3I
IFFU	VWWY(fh%u vx%y&y'y)]]KTX 2  2 2 @878Y	()] ].#".547>327#"&''	324&%]:O?bW:VO>aW9V'[;#"/)1~Kz V43V7}D|V54T3%#G'& uf& X   Cj    uf& X   vj    uf& X  j    u& X   jj   Vf& \   v^    V  % @L
	$#$#"$# !#$#$#%$$#:!LLQz"$\&"&% 	!#$ $#&999991 990KSX9999Y"K
TKT[KT[KT[KT[X & @  & &878Y`'p'']4&#"3267>>32#"&'#3xR:9DvW59FJ{voJgw(s}TPOnRNRiad˦wOScb V& \   j^     1& $   q ; T`& D   qJ     i' ! $   T&q D    s'   $   Ts`{'   D   Vk& &  -u ^f& F   vw    Vm'Ou &   ^if'    F   VP'Gu &   ^J'#   F   Vm& &  -u ^f& F  w    7  m& '  u ^& G  B         ^  - @i'&(% !"#$ : ((LLQz\% %".999991 /<2990KSX9999Y"`/]KTX .  . . @878Y%#"&547>32!7!733##3267>54&#"XJ{vpJfl-CFtV8;DsW5:EadǦ-wOShaR{{SQTkRMS    7  
3& (   q = ^& H   q    7  
m'u (   ^H&o  H     7  
P'u (   ^'   H   7s
'   (   ^s{'e   H   7  
m& (  u ^f& H  w    \m'Su *   BVf'    J   \m& *  'u BVH& J      \P'Ku *   BV'   J   \' *   BV4' J   7  m'!u +   H  m'Bu K         @4:Z	Zs F	
	 
 9991 /<2<<220KSX@(	

  <<<<Y3!733##!##73!7+++ ʊ"ר ,,9Q   ^   # @(:L 	Lz\ "'"%$9991 /<9<20KSX@0	  
	<<999Y#654'&#"##7373!!67632.|ih {} }` ?UdbvL0\?3L0O__zze22wLvH  7  R^';u ,   H  7'      7  1& ,   q.; H  &    q 7  3m';u ,   H  H'     s%')   ,  s/''   L   7  oP& ,  Ju  H  `  O@   : ~  $91 /0KSXY"@]KTX     @878Y3##۸`   7f}& ,   -\   @1   HVo& L   M8   @1   fm'Iu -  Vf'     7' 
 .   H'q 
 N    M  ` 
 @G))	 
 

 
  
: ~		
  *
$9991 /<290KSXY"]@>6STThi
::@XXWWiljyyy] ]KTX     @878Y33	##'^H1j`!  7  l'v /   H  al'v O   7'A 
 /   (/' 
 O   7  'zn /   H  '~ O   7  ' y % /   H  ' y O       b@7 		 	 	  	:
 Z F
	  	.99991 /90KSXY"3%!!'7b}`8Id!_r9}XL{q  #    j@3     :
	 \
	  %$9991 /90KSXY"p]ed`]37#'7t5ߞ5@wf=wb  7  l'v 1   H  m& v6 Q     7' 
 1   H{'V 
 Q   7  m& 1  -u H  f& Q  w      &~  QU    ^Vu    +7326765#"#3>
k*ȵW1g`+"/hrfoZ[H	    HV{ # @ !	!*$&999919 @ } Lz~/9990@0  
	 :KSX9999Y"0%]`%]KTX $  $ $ @878Y%]#!73267>54&#"#3>32u%0-vl[	
j_!{ٸ%Mw	CGCHZ/HT^ũ`aj$R  R1& 2   q'; ^& R   qs   Rm'Tu 2   ^H&s  R     R0k'Tu 2   ^f&s  R      ^    # @9     :Z ZF
Zs
 #$91 /220KSXY"KTKT[KT[KT[X $  $ $ @878Y#";!!!!!"&'&5476$3xW1!X!9h!N{^+LInӵ+F#Ftba    ^{ ( 2 A @9 /)
)o K
N6L |</L#zQB9)2 ,& 92
,&29,&3"B9999991 2<2<990KTX B  B B @878Y@2o oho&o'o(o)o*o+o,k1o2	
	
	
	
] ]!3267#"&'#"&547>32>32'>54&#"3254&#"x[%cm/e燿LBc6c{7h@/3264')ncihXulpq.iT"z嘗@acJ   7  l'v 5   H  dm& v6 U     7' 
 5   ({' 
 U   7  g& 5  [o H  f& U      l'v 6   dm& v6 V     m'u 6    f&*  V     u& 6   zd    u {& V   z    m& 6  u 0f& V      Xuh& zL  7     ub& z  W     X  hm& 7  u   m& W     j  z   !!!!#!7!!!p	!pp!	pժA@       @   !!!!;#"'&?#737#73>{-{-<sAB)-->NPO>    w^'u 8   u7&j  X     w1& 8   q ; u& X   q  wm'u 8   uH&j  X     wo'  i 8   u& X  F   wk'u 8   uf&j  X     ws& 8      us`& X       )t& :  |   f')   Z     ht& <  {|Vf&>  \       hN& <  u  l'v =    dm& v6 ]      L& =  q  X'   ]    m& =  u  Xf& ]            !##737676;#"D&_`ͮd.-яNPP'(i    &|  (  6'&  7667632 #"'&'##7373!!(==jj('==$jjNbb{43{OO' E/tssttsstRd0110d}}     i   
 & 1  !27676'&#2#!"#76763!27676'&#kD\\BAkj#??'E8	$op֪X+TS=>DCBC`` ef//&r1FRQ>78rq88  8      &  "  67632 #"'&'#!%6'&  76Nbb{43{OO' .N k(==jj('==$jjd0110dtssttsst  W   
   6'&#!!276!2#!#AAkD[]cwNsr++DCDCmmD  H  "  67632 #"'&'##36'&  76Mbb{34{OO&!Ժ}Q'==jj'(==$jjd0110dDtssttsst      9@	 
  9991 @ ZetZVQ 0 o ]?32$7>54&#"7>3  #"&)`}^<?ɋ y/wzC{szЀqa^lzYY34G   Od n  676;#"&'&#"000#000000#00000000#0000000000#000000!2767# '&76!26eM!?FE&*Skj9:jj |}x)x}~FFSpbzKK_//ٜ//_H$$gh$    P` &  676;#"&'&#"32767#" !2+VdF1i0/!FJKPyyPMMPSSV!T]46jGoS`10+qrfrq+$$>:         i   	   3  '&!7  )"#767635V:;utKK"PaE8	$op/w.,~//&r1FRQ      } 
   3!!"!!"&76763!!bBADj[\N++NW|CD#CD+mm    I  "  7!#7#" 32 7676'& Vk MҸ Mbb{34>{OOh'==$jj'(==jjd01DD10tssttsst     qVc  .  3276'&'&7632!"'67676'&#"X`t64kk6'BR5GjDIFl'(?@lm%&HM|?Fu\0%p	̥@$OFIqrstt`g    g   	!7!!7!!7g>!i9!V!+  i ! ,  6'&'&#"767632# '&!327676#3.ab+noItQ<p܌N8nd[5=<21^G#$*+WߦLLqQR^  i 3  &'&767632&'&#";#"3267# '&7676t|67#Ybam#k[\S]]DC kkTUm^&qhg^老+ed%!VU|ih &>=sp<;KJKK21%yyݐbb    f   !!!!+732767Z!pVP!v5M!?FE&ժHKK V   #"!!+732767#7376763c.//$hhc./ϰ$hh((hcUV((h*NUV     ORd -  %!7!# '&76!2676;#"&'&#  !2767N!}GG^}6gM!?%*^tu;;kWXS*+mn$dz_00    R1 
 "  254'#"'&54767673	3%@=%,pXuT,
VU1FbI  AWW-Q$661^   "  - 0   3237>7654'7 +"'&47654#"#36%<4b3_2F;#3ƕ {.v{FWKc2eN6.Ymd<S?3˾      V   3;#"&ʾ&)(?!M-KK     e   33###73Z~ʈwD     5  W   654'&#"	!#3632#&F,x"zdrC3%(#1CO\EP  #     676;#"3	##$ihc\qI1jVVPh#    7   33###73X8D      G   #''%'3%#Z#;$OÙ2eccŊhah<     z *  %#"'&73327673327673#7#"'&A]klGG,%*uef  **w{fe "SabyzIJ|;;{z5N__NM_`)g11>>  f   !3!+732767]5xM!?FE&+t|KK tV{L    R   $    476$3  !  654'& {l8<xpE?a6T>`Hw>FRRGi=jy F'6 2  cB'   R   s  $  "327&6'&#! '&76!2!2ܢ77baܯj1&)(zœ;p['ON4L椤}KKzz-     V{ 
 "  & 7&6'&##"'& 3232nlN??*=ijj65NdLٵ>?)utntsY_wt108``    i       32676&#72+#"#76763m~ kj*+uT8	$op/ϒqrqq/8&i1FRQ  V  )  6'&  7667632 #"'&'#676;#"'==jj'(==$jj64Mbb{f{PO&t<$hhc.//tssttsst_d0110dXUV((     Q  !   #.+#33267654'&#wK}t-xxG"4 l,?4>$+hbђ'#Q3I   /  >323267# '&7676?67676&#"'yi&"wxPOQPr(|}j{|*$EF_lk~&&ƫ``->>n~DDFE/ppٶlm+23cv7     { 1  >3232767#"&7676?67676'&#"Qf`_[ZC:;=>ahhp%reeZabB88<=ZXWV?VVKJ$%((KQ,-5#LM*!$%@T**(    8  
8   V  !  6'&#"3;#"'&7# 76!23@n|wZdAE#)*/@)-0A3=g)(V\`@o     Vi    !!;+73276?#"'&7#73,>{w<s#)edF1i/0BA(w>N``01PO`>     Y  z   "#76763!!#O7	#pp;!+4&i1FRQ+    ^  n   676;#"!!;#"'&7#73$hgc..{w<sBA(wUV()gcNPO`     f   !7!!;#"&!!&((?!M5+=JK    r'I6 8 w& X 6   Vb "  !!  6767!7!  76'7!?T%<>#fe#X#Ń'/hi@/'#X>a"La     m   %27676'&'7!'&'&33Vؠ.'B,]+*&<MKN4ʾ&)(ʦmWDtz-KK       P   "#3	632#7654'&J9*ˊ'uC3G9\EPy%(   	V8{ $  +7326?367632#7654'&"9u|lLbM1ó:kJ6!r1hzHTN43`_G\ #rr(**         !!!!!7!7!!s!=#g՚"     H`   !3!!!7#7!!j!{}!oPJe`ܐ\9   /7 %  %27676'&+7!7!2!"'&'72qsNO!!  juZA=K$4wzz&azykKKIJܪ$8*mhU)$y%1  K $  %2767# '&/&76767637!!#"6s&w&+ekjj  !%!kjk1%y$)Uhm*8ܨ$JI     +L` #  	7!!#"3267# '&/&767676u jeM!kkm]&qhf^S$ekjܨJK21%y!rhm*8  VC` '  2767# 5476%$7654#!!7! TQSZ#^RYaQ.$Sej!NG6&, 5%b
f8d1a	w        #  %!!77!7!67676&#"7>323#!L!xu35_'Xst&3,]h9@umHLIwBC12tt\RI`1     (  2! '&/&73327676'&#!#!! hwZA=K$4܁&+rsNOʞ!)\Q8+lhU)$yy$)UKKIJ-%   Lg` %  2!"'&'7327676'&#!73!!fivZA=K$4^``c&KmrsNO!!_8+lhU)$y%12KKIJ&   q $  !"'&'7327676'&+#7333ZYU!$UMNE!BOJPyF+@>7 66 }ws}#(rAbLr    V{    #367632 7654'&+";-!DZҸ7%
S0
*vBz
FN1pJ[05W2(E(A  VN   3# V'     V   3!!!!#!7!7!7!.x_!/_!ʍ!_/!_,Ԫ    6  #   7  m& '  ?)   7  
f& '  @)   ^	lf& G  @   7f' -u   /   7V' Mu   /   HVp' M9   O   7f' -   1   7V3' M   1   HVI' M   Q    m& $  u Tsf&Z  D     7  Om& ,  Eu H  3f'      Rm& 2  Pu ^f'    R   wm& 8  u uf&x  X     w3& 8      u1' q ;    w`& 8    u:& X   ~ wZ& 8      u@& X   ~ wZ& 8      u:& X   ~ h{    3& $      Tc1' q s;     3& $      T& D   ~  4&    q> T&    q  \ 5  # '&476767632&'&#"3276?#737!7!3C3矞`aku)Zyyyy_Q./kkjccS =}I('ыW+*$#G^12<=lji+XX   BV{  A  4&#"32766?#"'&547676763273#!"'&'732?!7vI/L*+A@yuu/Mvab;;kG^_gqTT) ,!.<aSSH"DVq"ň:4Vut|JJLhTX\pqśsL))54`+~`FM7,*`F \m& *  u BVf'    J   7  m& .  u H  m& N  fu Rs& 2      ^s{& R  r    Rs1&   q'; ^s&   qs   /7m'uy  L>Y&T   V"Y'	   7  & '   =)   7  
& '   ])   ^	l& G   ]   \l'v *   BVf& J   v     ;x   ! '&7!#3!32767x,}wPM.4""ww/.RL `Z߀xxv9dPNOK  VS    %#367632 654'&#"qu$Fa<'XU4
.HW5xPb3975+I-F    7  k'u 1   H  f& Q   C.     Jm&   uv T.l'Yv     l'v    Tf&    v   yl'{v   f&    v      p& $  z T`f& D      V& $  ^ TeH& D     7  
p& (  z ^f& H     7  
V& (  ^ ^H& H     7  p& ,  Az .  f'      7  $V& ,  ,^ H  H'|      Rp& 2  jz ^f'   R   RV& 2  x^ ^H'   R   7  p& 5  z H  f& U  z   7  V& 5  g^ H  H& U  i   wp& 8  z uf& X     wV& 8  ^ uH& X     '   6    {'   V   Xh'   7   b'   W   R 2   76$>54.7%>54.#"7$32..;.9!)Fd2";͈:_$m`0*GL*(Ϋ/\KJ99&(?SP,Fu3~}=Uc
6Hj+v~}<2I%    O{ 3  7,54&#"?>54.#"7$32/M1!]P;E%AE(D!&c_'!5!:3%3?=a.pFTVU@l)=;Z:tO#C8;+2)! 7  m'!u +   H  m'Bu K    7VM   	#654'&#"#3676324 !7+"/hvvU3})YGb?k~BC^f  Tp  ( 6  %3276'"632!"'#67&7#"76323 7676'& F%"	44В(?I20#*`%Mac|34|OO&v'<>$jk'(>=ki- H:E<$d01D10d^tssttsst   &N  K  " 767654'&32767654'&'72 '&547>7&'&547676!øyzG[pzzF[E3̨km
/^\̟L8*f
豥56MM_<MMN^<M'|O

;>-AA1&TMdhK&+ "cI`#&tX.4"FGFSJ  E/  F  " 767654'& '&547>7&'&5476732767654'ba1D bb1CvAZ?**mPʙ,P8+<UW	MM&!V7MMN&!U8Mj6C#&@Y "cDY),tttT4<"#V+B0<jX At K/AAAt2(7$   V   +73276?!7!7!!8Osi/0g"lP%01o    Vq`   +73276?!7!7!!8Ori/05 Qej P%01%    P'u $   T`'   D   7|
& (   z   ^u{& H   zE    R3& 2  U   ^1' q ;    R3& 2     ^& R    RO& 2  't ^'   R   R;& 2  V  ^1' q ;     h1& <   q r;V& \   q^   p    %3276'"632!"'#67&73_%"34ђ(>I20$+_%- H:E<Z0    Yp%{  +  %3276'"632!"'#67&76&#"#3>32x%"	44Б(>I20#*`&W^|hi{ٹ"VuLL-- H:E<Z__`edwx pN  !  %3276'"632!"'#67&7#733!!o%"44В(>I3/$+_%>>{- H:E<Z>    V`  n@)	   :
 
} ~
		 ...91 9990KSX9Y"KTKT[X  @   878Y3+73267)%0-vE/l[`GCHZ   Id  1 ?   7676'& %67632 #"'&'+7#" 32;6'&  76'==$jk'(>=jjPNbb{43{OO'  Mbb|34>|OO&v(==jj('==$jj/tssttsstd0110dd01DD10d^tssttsst    V{  1 ?  6'&  76+#" 327;67632 #"'& 7676'& '==jj'(==$jjjttNbb|43>|OO'!!Mbb{34{OO(==$kj('>=jj/tssttsstRd01DD10dd0110tssttsst  p	     3#!#'#7'7	3	!BU=NEIE:}]]2Y'FF8O    ~ " ,  '&76!27&'!2767# '#&# ,VQ6FSo:3~U{$&*@j }|y)x~}ok :!FXh$xYv+!f//_H$$\/ح    )  '7&7 !27&'32767#"'&#"Q:(5jUN,*nPQMPSRW!T]vibCGyy(^N:
lOU^q+$$Vqrg        33#!!#73Z~g!_w $    ##'!7!7	!f4eVs!EUEpi>	XRBYb    8{ =  .#"3#"'&/&'&'&'7327676&/&'&76$32"FZ*)<BCcz#L'Tf@G!^e%TV`:ONV==>f?((TT@%$!,KL[@~$=&[#1-,QKP%$JK    x`   !;#"'&/&+?!j!Y({#LlTf@G1Z^Pe`1~$=&[?%   A  Y   3276'&+"76763032+#5[\4?>E^ZW$RUTUkj*+'u IIHI+#qpqq       {   2676'&'&767632#v?DBaZW$STTUmk+]q2RAF+#qpl&        .  !2#!#73!27676'&#!!27676'&#!Zjk#??'GiX+TS>=o'D\[BB'`` efp/>78rq88ѐDCBC     !  3!33#! '&7#73!32767Fxxx 9st9 /BCkl/jܕ$}jiij    1    7B     33#!!!!#7#!	#!mfX!
!.!ff";"iVVF㪾F  JB  $ + 1  654'!327#"'#&547 3273&#"#	G+Ee"{^u5h80h-
-'vDfEPZhV!	vDMC	uJc,'r   fY   33#+73267#73Wʇ!f5M!?&f!H  V6    3#33#+73267#73~.'b \)ɵF1i_\ (aؤ    f. 	 !   32 #"73;#"&7#   !2o*or-%PE!M4gE:E^     V{    #"&?#" 3273;  6& F~*%N|g>|'!9i1Oz$O{VּdaDDadaj       !  !2654&##&'&+##73!2fwu@U8u-;;z{{ ݼ/mtvh22w     {   &'&#"3###73367632#",hg  WW b"Ngf	ef<Ĥf21  <  x    3!733!#!73!l ˊ Wlv9     V`    +7326?!733!33!+;uUV|lLbM1le_L8h==HT33    {   +  3>32)3267#"&546732654&#"$Q 
Zd h]
Ѹob$dc1Yc..''!Y~yXd״  q{    73#7#"'& 32  76'& !ڸ!Mbb|a_f>|PNN<>$jkN=>jd01D10jtssttss     Z{    7#367632#"'& '&  7!ڸ!Mca|f|OOqN==jkN=>$i`d0110 tsstjtss    &|  -  6'&  7667632#"'&'#7>;#"(==ki('<>$jj Ncb{_a43{OO' *ȵm,0/tssttsstRd0110d04  {  4@	 
  9991 @ KNLNNLzQ 0?3267>54&#"7>32#"&%BPX6V^L]#PY}{TN)00>9W}..!!ϮuPR#   |pW{  ,  %3276#"67&'&76!2&'&#"63 !"7Le2%v45SPKH"BNJPzyPMw*.#P9K9DhT#3$*qrfr	   pV  +   7676'& %3;#"'&?#"'& 32.(==$kj('=>jjvi1F>?)Nab|a_f>|PN/tssttsst^ؙ10``֔(d01D10   I  -  #7#"'&7632?>;#" 7676'& ¸ Mbb|a_34|OO&
*ȵm,0b'<>$jk'(>=kid0110d404tssttsst  :}{  !  67632!"&'732767!76'&#"z1uv64k["X_^jy{1LK^,*4cdWW   h{  "  7!6'&#"7>3 #"'&732767hNSSjhil"kk~46hgB@mn- Zdc4*,ėZZWW     S{ 
 5  %676732#"'&7&'&76763 73;#"'&7'RA6eIT8lfim"kmlk~i+@DA'֊>8E#Z`vg'#d4*#)u10`Z O|J    
	{ 2  #"&'7327676'&+7327676'&#"767632x U["EXWdeeKIQPACKYYm n]_PjkNM_m\["45bQ77,+=J++OO^@A     8| >  #"'&'7327676'&+7327676'&#"7>32%3;#"'&7wn"PSQU"@QQ]`_C>tLL=<wGf gLbRi+@EA'N\l[[%88ZX83,-F@..NBj10`ZȦF    q|  1  "327676'&+7327676'&'2# '&76Dvy()NQҗ`_C>tLL=<IbcHItwn"vw55nrot88ZX83,-F@..NO]@Al[[    EVP`   33#+732767#73Wb [*ȵF1i/0[ `(01ؤ     CVy  9  6&#"326!"'&'73276?#"'&76327676;#"&z&'zЊ7aSSK#HRlm%Lbc|_`32|PO&')dei/0=⋌,*^_[c1111c``01  mV`  +  !"3276!"'&'73276?#"'&6763RƔ''><igI8aTSK#HRml%Lcb|`_2-=nnnn+⋌,*^_[c11靝   q   !  %#7!#"76!2&'&#"32Y7AfO[Q45>edq"iiSGyyPMM">KMrqfqr   R`  "  	3 &76767327676'&'~H"|T63B%!&N;*xܱSccS$-EIdccdIE-   `  $  	3 '&76767327676'&'w
4.XX>>\:[hB%!*E(4bLx>@AA@>xLb-!@2FF2@!-     V`   332673##"'&./| {ԸtWcauMLaPO{Vf21xx   #  P #  367632#6'&#"#7676;#"UcduLK-/.|ih {*eci/0e22wx\OO__``01     LVz -  367632+7327676'&#"#7676;#"VbduLL-)edi/0./|hi {)edi/0e22wxH``01OO__``01  5  x    7333##3#5 bb XX׸.Ĥ<P     `   ;#"&7i1F~*`610       `   7!#3!73    褤    .   #  3327673#"'#&'&#"#67632Ը&}AB[{&}AA[	%$RIJ	%$RIJ   T  V    33##07# 76326#"39 yt=&15%A7M\TK9  OV:   3;#"'&7i1F>?)ؙ10``   TLK %  2!"'&'7327676'&+7!#3!3hwZ@=+^_`c&JmrsMM j/Ue!8+lhyy%12KKKJ3L  b '  %#"&73327673327673#7#"'&m]kl,Tuee |Twef|ڹ"TabyzJH|:<b`^zb``zh02>>     Va (  %#"'&7332673327673##"'&]klGG,Tt {*)xff{ԹtSabyzJH|;;z{bybMN`_yYg11>>    tVZ{ 6  67632+7327676676'&#"#6'&#"#367632]klGG,*ȵi0/S)*ufe { **wfe {ڹ"SabyzIJ|;;{zH01VnPNN__NM_``g11>> BV{ !  +732767367632#6'&#"/*ceF1i0/޹"UdcuLK-/.|ih ``01te22wx\OO__    tV{ !  6'&#"#367632;#"'&7/.|ih {ڹ"UcduLK-i1F>@*OO__`e22wxH10``   F  ` 	  !3!# -ͪ`yl   qu{      2#"'&762767!!6'&#"65jj56%l^*7?;p,@mL{휝sedu ~OstQ  q  `    !!!!! '&76!#";9G:55E%**cb%`ݛlklm  C{  9  3276?332767676'&#"#"'&'#"'&7676N.	!,NMF&$$$$(MKO.5	*J/,g:96UTg=D3,#`pB?UO++OU0Kg]pxeYGGGGB  oVj    p`   7327673#7#"'&'("#,gh%rٹ"Ngf	efNf21 
   '327673#7#"'&'##,dh$ƹӹ"Nfg	eif21     +V`   7327673;#"&?#"'&'O##,gh%ri1F~*$Mgg	efN10f21 V{   &'&#"#367632s##,gg%ƹ-"Nfg	ef
f21   &V{    &'&#"#;#"'&7367632s##,%si>@*޺"Nfg	ʿ10``tf21     {   76;#"3!73I8Ori/1S!P%02V       .{   3!7376'&+732qSis@20%P      `    #&'&+#!232676&#4T#rj)44a\\\ FBwnwl^q$%'`PQiVSTT     |`  !  #!3327673327676'&+eT z||ڹ\aBBUG>@wGI86wSiQP`'%$q^667**TS++     %V{ <  .#"#"/;#"'&?327676'&/&'&76$32"FZLM**=CEZ^i>@*%\]^aOO*,=>>f?((**T@%$!*ML[[10``=5-,QK((%$JK  V   676;#"+73276Oyq#ibîc./)deF1i/0pR[V((h)``01 V $  7676;#"3#+732767#73#7*$hhc./u \)deF1i//\ F`NUV((h(``01ؤi    Ve   ;#"'&76'&+732i1F??*c@J(10`a(h((VaY  [V  !  #"327673## 76!3676;#"(w	|n*'Be*)#ibîd-/3A0Ǜo@`\V()g  `   !7!6'&+7323#&>{vsAB)v>>`''PO  QWi   !!;#"'&7#73,>{sBA)ȇ>''OO	>  `  "  733!33##7#"'&?)3276 bb:bb X!VcbuLM-/.|j^Ĥ<f21xx
PO_U     s` %  7! 7676'&'7!# '&76767 +zTWFE kk/1X+ ^"!.>rq,HKEioaaabdo?ܤdqn뒒kmh    ib   +"&73?27676'&'7U1F~*g3kk-66hfO612abec0Ys     `   !##3ç~T`      `   !###33ȸ<q<q>jj`j    
   676;#"##uUV|lLbM1ô==HTl       `   33#aa`8    Vq`   !!#;#"&?!7!j i1F~*7 Qe`ۓ10% S`    !#67!7!7!332!73276#!Pej!t.$	
FY3<;4% 6[   Ln` !  2!"'&'7327676'&+7!7!VjuZA=+^``c&KmqsMO!ej 8*mhyy%12KKKJ    (Ln` # ,   76676'&+7!7!2#6'7&#"327P'2)
NO!ej iv[@=8Q 9tŃ	qL;*1JJ$8+lgqUeR8y*K/K         327676'&#"76763 #X?lI,MPTRV!SUTUlT$!rLbAr+#}swt      .   #&'&7676!2&'&#"3YV!$UNME!FKIPyF+@ws}#+rAbLr   i   3!"'&'7327676'&#PYV!$UNME!FJJPyF+@tws}#+rAbLr LY #  676!2&'&#"32767# '&7$UMNE!FKJPyF,MPRSV!STUUjV$@}#+rAAr+#}    s   "  67632"'&        !   	('0.		O^H77A77:&EE6ي.""""./B!!H[[   M  F`    D|  1  ";#"327676'&' !"'&7>7&'&7676wNO<:tQYIJx)(MKayx55po"l/0..@F-,38XZ88torn[[lA@]ON    L  h 0  %#7!#"'&76!25676;#"#&'&#"3256AgO[Quv46>d*ddj//jiQIyyPMM"_`02jMrpdpr    M  `   \V:     3#33## 76!3#"3276.'ڵ*D]+(#u_4#xG`͋BA0     L3` 
  ##	33~	jLT#   M  `   3!!'`3    pV   ,  %#"'& 32?676;#"#  76'& UMbb|a_f>|PN'
)eci/0sN<>$jkN=>jd01D10d2x``01xnjtssttss       $  327676'&#"76763 3###73X?lI,MPTRV!SUTUlT$!*65rLbAr+#}swԤ     . $  7&'&7676!2&'&#";3###7*YV!$UNME!FKIPyF+@>F66ws}#+rAbLr     I  ) ,   7676'& %3!!!+7#"'&7632'<>$jk'(>=kivUi  Mbb|a_34|OO1/tssttsst^Lۓd0110M    qL1 5 C  #7#"'& 323!2!"'&'7327676'&+7	 7676'& !Nba|`a43>|OO'vUj!	juZ@=+^_`c&JmrsMO (==$kj('=>jj3d01D10d^L$8*mhyy%12KKKJbtssttsst   Q   4 ;   7676'& %%!332!##67!#7#" 3233276#'==$jk'(>=jjT0h t/#) Mbb|34>|OO&vFX/tssttsst 3<;4d01DD10d^6[   i  L 6  !!3!27676&/.76$32.#")"'&7#73>{v<s@OO
P={fG"FZS<XAB)v>N-,4IM*$((TT@I!,e>PO`>     V & .  !67676;#"+73276?#"'&7#73!3!>x#ibîc./)deF1i/0AB)v>9PNv<s''[V((h)``01PO`>N   wp - 9 C  !6!2&'&#"63 #"'67!"'&7#73327676#"&77!3>{ UNMF"EKJPyyPMq+.nPTEAB)v>A=S_!r:a03v<sz#+qrfr	v)2LOAPO`>'KV
	N   qV 7  +7327676'&#"#!##737676;#"!;67632)edi/0./|hi {Ӿ$hhc./-"VbduLLH``01OO__/яNUV((hce22wx  *  A '  3!27676&/.76$32.#")XNO
O={fF"FZT<XO-,4IM*$((TT@I!,e>     *  $ 
   3!!!+XUi u1Lۓ     .k    333##333##.t11t͉3Ms22sΉ4U=    X    !#!#!#!#S3k3S3k3UXrX  J "  327673##"'&776'&+732./|hi {ѹwVuLL-i1F>?)OO__ybedwx 10``   V ,  !7#"'&776'&+732327673;#"'&7i"VuLL-i1F>?)^|hi{ h2F?:&edwx 10`` b__y60`Y      #6'&#"#367632JsHN^A@EutB5=>JzbwY,-56\g8     !  367632#6'&#"#7>;#"5=>JzbJsHN^A@Eun|rB9wY,,55\1SwlWU   }Y    3+732673#t||r,B:ttxlX6Vr  7O   &'&#"#367632;b@@Atzt0@@T
89ksa9   
#   327673#7#"'&'b@?@uzu/@@T
98kJa9      8 !  327673;#"'&?#7#"'&'4c?@@tz&B,r)(0?BS
98kJV6X66xa9         +33276?3327676'&+?8MLyu3j=))4{,N}K,-		$#K|N;[--s?5< /.   s&   333##st22tΉ4     )   +7326?33nG55N]D0</z~;{bp"#W(K/i   Ptf  Pt$f&  t     T@   : bF 91 0KSX9Y"@**99IIYY]#73#၏?    ~   3#0"⁐խ?   nb   #7b!e!ڬ@  ^   672676'&#672@j#$@sA?,=>X@?,,=>PO a   "'&6763"3sA?,__s@45F@PPOP>=,,?@X>       327676'&#"767632#(yB-2q25364555F7PTnG[@*7K$@`	
XFh_@C        #&'&767632.#"3WGh98Sg611,-^3pK+*y[AmC@_hFX
	`@$K7*@ 2B   %%(vDE    2   7-7'    |f   3##nfg    |}f   33o|g Rf  d@ 91 290 K	TKT[X     @878YK
TKT[KT[KT[KT[X  @   878Y3#'#f  f  d@ 91 <90 K	TX     @878YK	TK
T[KT[KT[KT[KT[X  @   878Y#373ٓx   ^   #^+ }b q   -f   3#fqf f   #Jњfv     ^    %#^+   2T q^      #Jњnv -   3#fqn     ;#    !!HrerJ'  #   !reJ   #    #       !733>;;j, .   7!##.;; ,  ` U   733##7#7],,,,u   `@u   !7!">ߖ )H  @   	91 <90 K	TX     @878YK	TK
T[KT[KT[KT[KT[X  @   878Y KTKT[KT[KT[X  @   878Y332673#"&546rTVUnt HDCIM}    ;D/  @  :  991 0KSXY"K	TK
T[KT[KT[KT[KT[X  @   878Y@O OPPUU] ] KTX  @   878Y3#d'       @	 1 0 K	TKT[X     @878Y@  	 
]K
TKT[KT[KT[KT[X  @   878Y@I44400044	4
444000444O OKKKKK	K
OOOKKKKKKO$]KTX     878Y#"&546324&#"326џtsst{WABUUBCUsstt@WUBBVV     s;    A@
 
 
91 /90@I IIIY YYYi iii]!33267#"&546bw@?--E%%GghMCe##"LK4{   P7  @  91 <<99990 K	TKT[X     @878Y@ 

		

 ]]K	TKT[KT[KT[X  @   878Y@! 
]K
TX     878Y KTKT[X  @   878Y'.'"#>322673#"&- '3}[%@/&1}\&BZ7IR7GT   f   @
 1 <20 K	TX     @878Y@-           2 222B BBB{{]KTKT[X  @   878Y3#3#׉Vfx     %3;#"'&76i+@DA'd10`ZȢ  @f   '#7'373CIpڑKnڑaa``     Q    7673733276##s/MM   >   3#tt    =/ 2  &'&#"#"'&'732676'&/&'&767632-329V00	Z&x*,XW9<;@;;<=Rb	k'g((PP@77a/$*+MW33

k2-*)*IX01	     8Q   	#'#37QΈRH+      #&'&767632.#"3WGh98Sg611,-^3pK+*y[AmC@_hFX
	`@$K7*@ A  X   !!7!AGЈ    X   !!7!3A<4       X   3#!7xxAhh      X   3#!7f<A4    Q  X   %3!7*  Cp  d	v& q q  3
    93    utV !  '.'"#6763227673#"&- '}A@[%  /&}A@\&B,Am::,Cm::  f Ch    ` f v\     9fh     }7b    b R qb    | 
)     ) vHh     +  3@ H   91 0@   :KSXY"3#Ҹ-   F Z jh     ^ {   62#7>?676&#"pzoe2(
w):357GZnH3UC=A 	 (6%""($4  9h     fb     uf\     p   #oVVD   <'   4     [ f    #!#͇ fxx) '      ) zH   #54&#"#>32xrTVUnt )DCIM}  }(   #3?   ^   #77#732po1{       73#7"22oq{ \ f   3##Ǯf  U C   +U v   g   #7373#xVxxF       33##xx2x  j op   !7!#4`    k    732676&'3#"&4P.8	m]0_w-+76 >&Dzs5  {   "&54763"3,ZV`JZ(*Mm=tP>x#'U    M   3!7373@"    M   #7!##"ň       #73733##xxxx      7! JV     7+73276?)edi//``01 JVp    %3;#"'&7gi??*10`` Y>p   3#-   S jC   (    4&#"3267"&5462[6'(55('6y||||&65'(56&Z}}ZY|| JT   3#⁬  du#   z     s;        j   #jLL`t P7   #7!#@&&@fJ   A9wX   #"6533273273"Lt&uhf,vie-vGtR iP& " K	TKTKT[[X  @   878Y  @& ' K	TKTKTKT[[[X  @   878Y 9X   S6U   #54&#"#>32rTVUnt 6DCIM}F9S  xTF     x   !7D       !7!7   p   #"'&'.#"7>323267"VOZg
Gb3OU"YS5`Di]F;73
!;?<6
7=  gh   !7ih   h   7!  Ĥ  ,   'IQP^NO        'VDUFXY       2#727654#ZV`JZ(*MBm=tP>x#'U [8   3!73@&&@[J     !7#X>X
((*>  
9@X   632#6#"#6'"#72Lt&uhf,vie-vGtR   
   '7'77NeseNes[}`}}`}}`}}` T   .7>77>76'&'BRO/RO0PQn
+0PQn
  : '
)   
)   f Ch    ` f v\     }7b    ^  F |    'V     II   #7!#!:V,   2    !7!7!7!>>2xx       3#3#;LL`tt    -   !#!KX;*>,   ff '  73327673#"'&'#7&'&#"#67632Vm	&}AA[&Vn&}AA[&g	
$%RJIg
$%RJI f   #  /&#"#>3232673#"&3#3#"*&"6~$zV">$ &&:
~"|\ 6Xh 32mn6.mn3Cf#O O   c(   7!#'73!'3Hff~(͛     #7?'d-~~   x   &'&6767@24$"@r?@,`]r*,@A++{OPPN #'   
  6   B   070767676'&r?@,`]r@24$"{NPPO{++A@,*    /D#     o      2>&"%62"'"&>2>&"*O@-O?Kd"0Kc#A,O?*55M75m?|}A@}|6M65O5   "B
*{    k
*P   k   !!k QT   !!0!߬  W:' #  '&'&#"#67632327673#"'&5L*$e<O~[<7SL*$a@O~[<7J7
$0GJI"7
$,KJI  n
+     (   7!'3#7sf~~d͛    8     T  `         !#!#!#ZSwwb+       !#####Zwwb+   Ptf   3Pt     7V H   %#H 8     M  `   V   #"'&?3;ߔ--	#V!.    {   ^J{& F   y7 {&   yv   ##   f! -   -f   1 0 K	TKT[X     @878YK	TKT[KT[KT[KT[X  @   878YK
TX     878Y@VV   ]3#fqf   yFl' ?l j    f&'     HF y   x  f'+  t       f'-&       ~  Ef'/   z     Yf&5_    r  Zf':  n     l  f'>   h       &N .     $   7    %    8     3!!8"!)ժ        	!3&5\+    7  
 (     =   7   +    s      !!   76' ! '&76!>H77ba77a:EEœp椤H   7  % ,   7   .        3#3#T\+ 7   0   7   1    8       !!!!!!L!9/!g!gq   R 2   8     7   3    8  
   %!!7	7!!A!>!X!!8yp    X  h 7     h <    f   
  /  36767654'&'&'&54776?3#r&
OQʚs'
MRrv4ݷu5۷Ws4/TWWs5.TWx=Dy=D      ;      l   !67"'&336763#1!֔AOO7aTč7OOL-hg椌gH       "  %!76 76 !7!&'&7 ! _##'/P/'CD##?,+#>1/<%ȼaL"ʦa>؍ 7  2N&/  Ku   hN&:  qu q)f&n F     O}f&J  P    tVf&L        sf'F  N   x  & Z      q)y  +  76'&327 03;#"'&''&'&767FSh#+68yq Yo^D Ap5UW6:	oik*%1)0T*Xk[*) V!    %#! %&7 76 `+YI23ZM =7,!j?+<EdZ%I:F  V`   3#&+732obSS_1FLdVD~   Mu  .  &#"#"'&6767&7!2327676'&'&WX `t64kk6'BR5jIFl'(?@lm%&HM|?Fu\0%p̥@$OF(Iqrstt`g   O| 3 >@ '(04291 @ o#L,Lz,Q4ܲ]90&'&547632&'&#";#"32767#"'&5476l/#L] \MOGwN^1:tQn;J]YYN"_WWPpUpS\A.>cN.7P5%,3ElD-8%[FvbI    eR   %#677676'&# !7! u@EYaD3'
9l`~$f$\OKOxsPWKL,#%5,*3Y'i   tV{   #6'&#"#367632ָ/.|ih {ڹ"UdcuLKHOO__`e22wx     qu$   !  !3276'&#"2#"'&76+,7rdb#7pXE``IH__HId~uv       `   ;#"'&7ЍlYo??)`+.0`b  R  `   33	##,[>vҢW`/ZFB?        ##'&+7Ù#k`ue<2~V` w      6`   !367676'&'313|jeP4&ޑ`T|p5dwY|rNįt    MR &  %#677676'&# %$67#7! $@EYaD3'
9U:^3&$$9%!=3KOxsPWKL,#%5,*,X$Rݿ	  ^{ R    p`   !#32767#"'&7!##1$7%&'%x!!"c`PH ABX  !V{     67632 #"'&'#66'&  76PB34{OO&t- '==jj'(==$jjfZ#10dtssttsst  Rs{ (   '& !2&'&#"32#677676'&]vw55jUNMF"EKJPyyPMMAEYbD3&
:#+qrfrqLOxsPWKL,#%5,*     tFa     "327676'&'##"'&76Ƙgm$(@?lm'#>:}c$N*6jj65nststtȷzn휝     `   %;#"'&7!7!!lXn@?*g[$	$Xj0`b   x  C`   327676'&'31%"'&7("v}R4P4,@L&`+90vfwZ{s`v  Vh 
 )  "27676'&'2##"'&7673A^ti*'?4bi51NNgj57} FIn$&>9q;ˑRh]p[nmNssg.   Ua   #&+73;'$gJaL[1F J[1F~0)~   Vg`   &'&73367673#Xl/~}#F>yOf"|~1N%aw~LB,BTxnc#n    +`    633237663%$at-.VdmT.P\-r`cR@O@*       ' j.  N  x  C&Z   j    ^f&T  }    x  Of&Z  "    +f'Y  ^    aV   3!	#	#{?\wHV1     F$  % 5  2767676'&'&#"'&76#327676'&}QTwP#txLT+DLbNPLҤUYK6F]KM6!.u"AMp=lW5I	
pAKu_ըoskKꀰ-V{HV    u$  (  6'&#"'&67632#"'&32766*SNEd=t:}~^YTTcigkK7xp~GBZkA	Jx'np}כ        #6''&76%6'&F ~~ j}!G9+u6fS2pRHvH40r{C1]V  r  f'gP  n       N'ug    oV   '  2##"'&76327676'&#"Qgj56NNhj65Q]qaj)(@9qpam&&>8c휙owgsugHgusg  `    7!#%$! 67)323766$,$% tbcat u:p TdmT Ϥ*RѧO  :R` /  &767767676'&#"76776327'7	,ҔNy
9p,]{@ҔNy	9pড়
 cl|YDT|˩hl="pl	|YDT|˩hlfMZ   X    #&'&76!    'NN~;:EDH77@77`pҳIH   V{     "327676'&#&'& 32mlN??lm'&??NNSj65Nkj56stntstttu	n}8{     Rf $   32#677676'&# '&76)w;ABPzIDZaD3'
:gkEAxe!+wTOxsPWKL,#%5,*eN   R` #  "32#677676'&#"676!Ly%(MMnBDZaD2':5/5$HqrqLOxsPWKL,#%5,*>    7   )   V  '  367632&'&#"!!#"'&'73276 s1/00 &&,xF[<Ax911) +./0WOdd		>Qoɏ?s
K_     0	7"'&7	6'&72V9-$DO6,9-$DO[~,`*l#FR`*l#FR          	#!3<l&pM]    V< !  #76# '#66?&%&zq}'״qRDY[:>O$nh0נ0:IKi
XL} \4!  ,x   	#&'#&'&#7 #'^ֹ#ڹI( -ȹX<ID04#M!P^     JK F  '6767&'&'#"'&54766733276?33276654''35epGݼb8QHV/&'Zvbb#!4}r\\&//2tV^:IFF榈d*0QA^^Fl\1mihVEX;imw'[UVPAFh  UQ` %  !$! 6337663'676EWbm./FV^E/QI.(RrsFS5@+h@ф{I%l+?     YV !  32763## '&5476%ay5/DĀ4ـ^ut rN<(J`Ui@?Րer6    [V{     7673##"'&5476763c(,=Lkj(mӸtNbbeG.ğcB;mUsst1Rd01sFNȢ    7K )   '67676767654'&#"#3676'r([fKGꯞ@N&JYˌ+\"whvv{=@̡E52Wzmh&%vr~'BC     S  &#"327676%!"'&#"'63232767654''&'&'&'&54767676763267]b;,"
"L?S(-"ZD5A]8_I8[a] $P}nF)F19+)+7JWm^qI>yTD! ! 12yKN.#AL.#^YF@?84+&
"H $;;=/?"+VhP VG %  !  767654'&#"#676!  3 %:ޅCQ{-$Kjd*y)ۄ!eM]6?fk9>ض   V{ %  #  767654'&#"#67632327q;Eg'>YsX
 myYk}QAKu,2RtW+0ຐ    G  5  %!	&'&#"76763267632'&#"	;!73276in?G$#! r>$"TB.Xr$B<,!|EG!!GH h="
C(FK#C
"&E	!!   2{    6  %)	&'&#"76763267632'&#";!73276x̨&6;62+J96!:IkI:8=3553g   C $ 8  $67632! '&54776!2767654'&#"3276nF5b[yV3΅Z]sS#en5M&8Ox{-sJV"1rFNh[oһ

'$?6qNsst;4sSsst    ^ # 7  &67632 #"'&54776!2767654'&#"3276-`;57pdx`?4jB]O_^UO!dF[%>lo')=ii7xJF61jO\`fһ

''QCfEsstJ@jKsst    ?V   #7!#!#!355HH`d`du  mU|   #7####!3|22GG_ pzp p    *` +  767676'&#"76776327'&767Mz
9p,^{	?ғMz
9p,^{	?|YDT|˩hl= pl	|YDT|˩hl= p    V{  %  6767632 #"'&')! 6'&  76)yPB34{OO&N !
_'==jj'(==$jj%̧fZ#10dX tssttsst ^J{ F  V7 M   Ra    qB{ !  &'&#"!!32?# '&76!2""#^jyq3[MSRO!Rlk~lej&%
c\\c(     Y+{ "  076763 !"/732767!7!6'&#" *)re~lkdL!EHyq3[MSjh'؜c\\c
   7     V    V &    8     !	!#	##Z- -  !+    VI`   !!###Kٹ`{`   V{  (  6767632 #"'&'!!#7#76'&  76X-uPB34{OO&=!e!'==jj'(==$jjfZ#10dȪpptssttsst   H   V' y3     &   y,   7  
k&  u 7  
N&  u  f #  %+732767654'&#!#!7!!!2W5}~L!>GE&8/|R!!VZ8hzzKK"@3L/O9+FwJ~ES   8  k'u    ]    &  !! 7! '&547 )E!H\)kFս2-pӐϏbpg  6   7  % ,   7  N'/u  f! -       !  ! 7677!32#!4!#3 6$n!^u1xwsS+LGj@5+8/XmO4<)  8      !!#3!332#4!#3 6|"wzwwsS+j@59dmO4=(    j  {   2#654'&#!#!7!!.Z9PL/|R!!VqwKDRf@3L/O9+F 8  k'u   8  k'u   2  Nm&  u  W   )3!3!#;">++   $    8      4)! 6!!2#!jD@51 WNrT+"(@mO4= 7    %    8     3!!8"!)ժ      %!!67!3#!#)a%>j7x_>>_D+?x4&A  7  
 (        33	#	##	3{ʏ9m__~QxM   (  2#"$'732676&+732676&#"7>#|,oz&(| ԳƆa&yѲ|!ĐBY+wps{M("   8   	  	#!3w"+   8  m&  u  8     3!	#	#ZʏaL_y         #7677!#! =!^u1x$nԪ/X++   7   0   7   +   R 2    8     	#!#""++   7   3   V &   X  h 7    2  N   33+7326?'aM!?wRAl2&],*j     o  |   $  36$765%$547 %73 #b9Ix'q3A94q")81#91#?F	-?H      ;    W   )3!33#"_+     D   3!3#!"'&5473xw_Y:PL+dtMDQv@    8  V   %!3!3!3<O"Oʪ+++    Wu   )3!3!33#S"OO_++          !!7!!2#4)! 6dG!wNrT+jD@5+mO4=(   8  ' ,      8      4)! 63!2#!jD@5wwNsS+(mO4=  #      ! '7!  7!7!6! 76O5FF)) %D! )aaӽՎ  BF  &       654'3!    '&547!#H7?aA7=2ʀ0DudE6l	ЁLfViHgWh-jҐcq[͟<?k      W    3!! 	&'&5476$)#!:g2&_pQ(/{&U=0;+w  T`{ D    @7 ! /   '&54?67676$%676 
  6764'gG& P[z95-U1jH6''?('(hMZw)v	,u8whN\MHsLH   M  F`   $  4#!! 7632654&#%!2#!RG%p<hjhsŤ(z7'9sl][7G]L6J!  M  =`   3!!M`3    `    %!!6767!3#!#}Qc9R)S7t7S:d6(U3R ^{ H     "`   33	##'#	3fOFGGR`QO6m     | '  32654&#"7632#"'7 654&+vto_ ά`Itw7(""VsbR3T70cUAI5G8J}oA`   M  ` 	  ##3ڷ5ڷ`}`  M  '     M  `   33	##'fm ]G`OQ5     `   !#! 7676ڸ{TQfX`oPo~   M  `   !!###'ڹ=`'P     M  `   3!3#!#'YUYڹdd`7    ^{ R    M  `   #!#ڹ`3`  V{ S   ^J{ F      `   !!#!1BB`3V` \    _V  . ;  %26764'&#"3>32 #"&'##"'&47 3227&#"M{.6{bhR!eKSV55ۧSt'ooKSV66&St'bhRb{.5}m6cX^LajN^9^N_h=L^m6c     ` [    i	`   )3!33#09ٹUS`33R     m`   3#!"'&54733!ڸ\T374)`_:g1<*#   M  `   %!3!3!3ڽ"ڹٽ`3     i `   )3!3!33#G"ٹٽڽS`333R    
`     )!7!4#!! 76AC8$YG$$)͓7ݐ   M  `&   "    M  `    4#!! 76 )3RG %AC9ڹYs6$)`7    {     !"'7 67!7!654&#"76&xS4!0>2lǚ"{mHSHVړ\VF   T^{  $     6764'%336    '&547##1''?('(W80kG5gIfMHsLHAhO]Ǘm>F     ` 	   ;#"	&547)##]bwDw@ڹ\Z;k:Sa33%+C'   ^k& CZ     ^' j       qVj    3#733!!632 76 7654#"qUUN綉+V~0(Ú3яLmɼlY).aJĞ  M  m' v      aL{   2&#"!! 7# '&547 "!2EY0!tO5j{FVi/(DUVHnIT=     { V   H  / L   H  ' j     V7 M     `     )! 76767!4+3 76ACTQfX$YiG%#)oPo~ŷ7ܑ  M  `     )!#3!34+3276@CddڹY"YYiG~Ka$)`77ݐ/>    H  >   3#733!!632#654#"HUUOO1;:ǘ3яLmuJX*?3  M  m& v[     M  k& Cd    V&6      i	`   !#!3!377fٹU`3     J =  3276?33276654''3#"'&'#"'&5476673C4}r\\&//2tV^:IFFPђSQHV/&'Zvbb#!ZmihVEX;imw'[UVPAFhUf^^_Fl\   +`^    d      !2#!!7!73!4)! 6,NsS+ p++q jD@5QmO4=Q(    J      4#!!276 )!7!3!!H~Ka@C9EHHW<t/>$)͓u   B +  #3376!2&'&# !!!2767# '&"wRSopZ)Tjk ~@!F-dk }|x)w}89$#G_//wƪ//_H$$O  T{ #  2&#"!!327# '&7##33676"/,"Kx!s^"eڸZ?{FVAW^3VH`3ʀ      g    !#!#!#3gii$m7   `    !#####3ÝOOh kk`_    8      !#!#!#!#3!3ii"w`m9d7  T  c`    !#####!#3!3cÝOO{k_ڸ_} kk`_      E    ##767!#654'&'!nuu|7E哳Ze=HYY~b҆12bqhXfz(     `    !	#654'&'##767]pMd:G(*QRQXFm'6Zt&VhO\K@hHO\KtU'4     7  0 " %  !#654'&'##767!#3!Ze=Huu|7Ehx"woqd2bqhXfz Y~b_49n(     O  ` " %  !#654'&'##767!#3!@Md:G(*QRQXFm'6!$_ڸ_]w&VhO\K@hHO\Kt`?  Vz [  #"&#"3276&#"#"'&5476763!2767654'&#7232767654!"767376767632'&#"9(D#5%!Av `M =t;<}BxEQu_iWPM!UX#TsV+'B"&"H93g2.7]%',QszQ^XRj!)&6J-@'
Wo/&*E6% t% Z  #"&#"32632&#"#"'&5473!2767654'&'"#7223 7654'&#"7673767632&#"}DPM &,-cQ5b12i8a4,[>B73q! 5S@S hUtVB5Q"1"H&R^VE	$'"%Bo/1Y<.+E$7c2
Wo)2+      H   '&#"###333367632H9 %"M\Q<<ç}}axwL38
6`TrP3    V=   '&#"###333367632=9 %"M\QSSç}}axwL3k8
V`TjrP3 Ra   qu{7         !#37632'&#"ٮp[?;$BI)T=2RC
"C      {   67632'&#"#3ezuL269&%!L]Qç$O37
`T     p'z	     f&
      ~V"  # 3  	+7327673	!"'&5477! 65#"3276"&yQV|lL1,RÃw9 [J9 b.g33-f1`8:=$!7kv은ڄ"j
tkr   V{  % 1  	+7327673	#"'&54767632654#"32&yQV|lL1,RÃw*ͥTF+ΣSET`8:=$!7kvܧɄoSRަȄoTRxTPuT   `> - [  %32767654'&+"'&'&'#";676762# '&54776!36767623 !#"'&'&ꏠ/@V>.뎢/CV.>.wi=_->^wh=>PHnNGoR\:ӪS\ҫ  ^{ * X  %32767654'&+"&'&'#";67>2# '&547676!36767623 !#"'&'& -[l$',-
04(-Zl$(6-	04
.^J-.	4
.]J-.	4
`t:6eUa

_tE;eG_


m@H颈





m@I袉




 Ht&  'X  	' }&  'L J3&       +'    ^V !  !# '&54776!2&'&# 3!#hlFSpo[*Skj 9I{ksƒZeh$#G_//hTU    ^VF{    ! '&547 !2&'&#";#&pS5jUNME!FJJPyy(5MpSqAI:#+qr;4nNq  -   '''7'77'77߆}}}d}}}}d Pz /  !"'&'&'&767676763!67676762388g





    )M   #6#"76763 v\eR})/K'*C    {a   "54?3#7C	n¶&/g aa   #77#733g    M   !2%$'$'&r- cdL{t\q  R`  # 5 G Y k }   #54&#"#>32#54&#"#>32#54&#"#>32#54&#"#>32#54&#"#>32#54&#"#>32#54&#"#>32#54&#"#>32rTVUnt @rTVUnt rTVUnt rTVUnt \rTVUnt rTVUnt \rTVUnt 
rTVUnt DCIM}DCIM}DCIM}CDCIM}DCIM}kDCIM}DCIM}DCIM}    -      # ) /  '7'7'7%'%73-#%7#733#γb,nqb,nqylJjxI=) )0!け!けZy\yW\zn[wyo\ԤRԤR߬@¬@  8Vm&  u OV&     8    "  654'&#!!2763#!2#!#7373/AjD[\9 ,NsS+ש +(#T0CDCȤmO4=Q   O    #  654'&#!!2763#!2#!#733P(:FKF<hL!9>L< ..+nU>o$)RRя>   7      '+#!2'676&+327'7_uzu"kj*~mrP#u~{Sqrے-,9/~    V{  *  %'7676'& 32'#"'&'#367632lje&(==jj('==Fps_m{OO's-"Nbb{43]stststs].01d
d01          3!3!"<])2$    /  [   3!3!/=Y`:33  6     !!!#!7!!`)`#!݁ʁ!+l     ,  `   !!!#!7!!9!`aa!W۪     8f !  #!!!2+732767654'&#"!)PZ8;4~~L!>GE&8-~9ժFwJ~ES{zKI">5L/O    HV8`   #!!3 +7327676'&__!>8B,5)edn*13 (`GQ``07&.    	   33	3##	##	3ʏ9mH_>)__}Q"AM =`   333###'#	3ǷfOzT7!GGR`QL6m u&   z9    u|&   z     W   3!	3##	#yʏaM^_>E_#A     i`   33	3###Bfm T78G`OL5    8     373!	###ZʏBd.L\dI_Ty%u     M  `   3?33	##7#'fr+e ]=e)sG`avFOQ5a    8     33#!	#	##73Z+HaL_ۨye    #     3!!3	###73Qdm ^G}}z}5OQ5}       %   !7!!	#	#e=!aL_+y  y  `   !7!3	##8fm ]GƚOQ5     W   !!#3!33#""ww_>9dA   o`   %3##!#3!3TT7ddٸYWYL`3  7     	#!#3!!ˋ##ww!+9d   O  N`   #!#3!!ϹddڸZWZ!J`3ͪ     8f@ #  !2+732767654'&#!#!#!SZ8;4~~L!>GE&8-~""rqwJ~ES{zKI">5L/O9+    OV`   3 +7327676'&#!#!#!8B,5)ecn*14 !`wGS``07&):`    \ 
 6  4&#"6 '$476%327&47632 7 OFtz2j;!ZUjSEQM0l<a!Zgy}:Z:[eAk1'3EYň/-)     Z'z , 8  % '&476767327&54762267 67654#"Qacxq$%Mk3`@3y;0P5W /0I5c)+H*f"˷X,BUk9w|ѓ4A!D5<Ϲ.GD  Vu' z     ^uJ{& zw          %3##!7!!_>!!A+  l`   %3##!7!!DT7B!1!BL    h <    V` 	  %0#33LXZú)-7Z      x   !#!7!73	3!HH!!'X!ssf    V`   	!!#7!7!73p!$$!ô`XXNl     %3##	#	3	3zp_>A{+3    `   %3###	33qT7!e%vLHJq   /   %!33#!!7!!_>!!+A+  l`   %!33#!!7!!DZT79B!1!B9L    "d   %3##!"'&733!3b_>ˊ_ZV.<9]|xw˪Awr7ٟd     `   %3##!"'&?33!3̸T7eTK$-)(*h)VL	_Vu;;     E   #"'&73;333###|;YW.=:^|<<wˋ<wr7ٟ9d+       h`   7333###7#"'&?3%&Wڸf''TK$-))!	_Vu;0       W   !2#654'&#!#wZ8OL.|"wJ~ESf>4L0O9 H   K    T& . 8  76! !!2767# '&547"'&54?3!654'& U:B`pHl)}mfG*?9>bHymґnXKg00_F$$͍R]fG9EL>9-V%6i|   ?{ . 9  "'&54?3367632!32767# '&54%654'&#"PP8	/MChF@Sjihl"kk~Z{.Amn-R8h.8F1?*;&}cFPZ,'Mc4*,o4,'^@ZWW   T& 	 ;  !654'& 76! !!2767#&'&547"'&54?3>bHyU:B`pHl)}uyDFmfG*?mi|ґnXKg00_F$d R]fG9EL>9-V%6    ?{ 
 =  654'&#""'&54?3367632!32767#&'&54.Amn-P8	/MChF@Sjihl"klUT;<`Z,'^@ZWXR8h.8F1A(;&}cFPZ,'Mc4*5wo4 7  % ,    m'pu    "H'      7f   32+7327676'&#!#3!ÊZW.<4L!>GF%9./|"zqwrKK"OO9w    MV`   3 +7327676'&#!#33f:B,5)edn*13!$_ڹ^wGQ``07$)`  V   !#!767!3#)^ȓ!dn7x!?+8.%5ժV   V`   %3##!76767!{8{GTQ)Vǆ  7f   %+732767!#3!34~~L!>GE&w##wwh{zKI_9d     OV`   +732767!#3!3*ȵn+5fdڸZWZ0= `3  7V   !#!#3!33#΋##ww!?9dժV  OV`   %3##!#3!34{8ddڸZWZV`3    "d   %!"'&733!3##i_ZV.<9]|xw>_wr7ٟd+  `   %!"'&?33!3##HTK$-)(*h)Vٸ7Tp_Vu;;  7V   %3####!!!?~ž#/B7V    OV`   %3####!!{8=V'P`    H  / O    i' !   T&q      N'u   T`& jd           T{    7  
m'u   ^H&o      iQ   h{   iN'#um   h& jJ n      N'gu    "' j     N'Ou   & j      /7y  Ln`T   8  1' q;   M  &   q  8  N'u   M  &   j    RN'Tu   ^& js      Ra   qu{7   RN'Tu}   qu& js ~    #N'u   & j      2  N1' q ;  V& q6     2  NN'u  V& j6      2  k'u  Vf&6        DN'u     m& jd       W 	  %3##!!B_>"!)Aժ    hY` 	  %3##!!>T7!L`    8  N&  Wu M  ' j      `V   !!!!+73267!!7!!)`#!gh'Ygi^"!+_oa    VV`   !!!!+73267!!7!!9!`Hn'Ygi^"a!X۪_oa   f   	+732767	#	3	]3g~L!>F2!3dzK5sx+ V`   	+727>7#	3(VgQJe$v`&9as
mHJq      3	3!!#	#!7!tF\+wD{   `   33!!##!7wPdq4H   H  D    3!!"	!"'&5476763!)/ADj[\ sT+Nw("S0D#CD+mO4<mmf  8  ]`    3!!"!"'&5476763!)9FLFG9cK XL< .i.*R>o$)RU   J  8  !"32767#"'&5476763!3327673#"'&[\-L`oFthnhP
+Nw
%piJNʄ,N&CD*$U8_m}`61e15mmf6/M8JJOZxx9  6`  6  !"32767#"'&5476763!3327673#"'&/LF(5jq8WghR<	!X-jhKN?@.zL.*^>,9m4l01aEi)/RUa@3L0OORAsxx%   /K C  654'&+732767654'&#"767632327673#"'&'&54l;N [Z4FSbcy#yghYrWXW?+%piJNʄ,N&!X8K;<pM.>& hP|%*|UV!bDY(Z)J;JJOZxx8P'(>     j| @  654'&+732767654'&#"7>32327673#"'&544>tKM3<wGg!gLbMHIu}2*$0ihKN?@.zY<8G+3,-F
3&.N>d]@AH?:>2EORAsxuM[ /V 2  !#654'&+732767654'&#"7676323#T:N [Z4FSbcy#yghYrWXW?+	3t!X8K;<pM.>& hP|%*|UV!bCY).   V/| 0  %3##654'&+732767654'&#"7>32tqS?6>tKM3<wGg!gLbMHIuz5'FA-3,-F
3&.N>d]@AI6G    %  327673#"'&547!767
%piJNʄ,Q9)_Ǔ!cn76/M8JJOZxxS~AMq8.%5  ` %  327673#"'&547!76767ە#0ghKN?@.zY<{GTS)`=3EORAsxuM[    ;x    O'` !  327673#"'&54?!#3!#0ghKN?@.zY<'dڸZWZ`=3EORAsxuM[`3    ]    # '&54776! &! !2673N,|9mFg&*vח a9!͍bqfԎ׿jV`  a{   7&54776!2&#"!273#"R4Х!Ľ{o&3>%'-nISn|}qF;>   i   327673#"'&547!7!F
%oiJNʄ,Q9!!+6/M8JJOZxxS~AMq     L`   327673#"'&547!7!t$0ihKN?@.zY<|B!1!=4EORAsxuM[~    iR   O|J   f   !76767!+732767$n!Yw1x5M!?FE&+80dKL    	V	`   !76767!+7327675{T~KeZ#*ȵF1a7. oP}з0)    	   #7677!	3	#	#!!^u1yi$n/X+3{      
`   	##!76767!
:d%0T~QfX$w`HJoP~ŷt   7  X    32654&#%!23	#!##m~{X$iu/jrsJ3   V {  "  	##"&'#3>32	6&  6 :;r{&t-!M{_@r'z'(z$`tad
dak    ;    3!!" )!!!!!!#.8gȩ>&!V!;i!>{ Fw    {   /  ;#"654& %46)632!!27# 547##&bwD.m-e[g!W"Z:Sa|-(]9t,'hV(*'3  T 4   ^Z{ T     ) :     ` Z    8     3%!#'#	#3'y	^g_"ʏȀy     M  `   373#'##35w=]Gڷg)@wLQ5`P f@ +  #7677!!2+732767654'&#!#!=!^u1xwZ8;4~~L!>GE&8-~$o/XwJ~ES{zKI">5L/O9+   V` %  !3 +7327676'&#!#! 7676_8B,5*ȴn*04 !_{TQdZ`GT06')oPo~     7f@ '  3!3!2+732767654'&#!#!#ZwwwZ8;4~~L!>GE&8-~ˋ#dwJ~ES{zKI">5L/O99   MV` "  3!33 +7327676'&#!#!#'YUY_8B,5*ȴn*04 !_dd`7GT06')   W   !!#!3#""r_>+A     i	`   3##!#	T7`9L3`     %  673.'# 33267.'SD&?$˵-}#K)e3b0Nk9˱Eb?i--K4Z)f\,>$./)%uxm3-`4       L   3 ! #76.#"!! 9[9
E`bnK7"JW%)9 ym22my=        $  3##!".7>3 6.#"3"WWx(t87
D`ii@H_r=PttŏQym2:d_5     r     !6.#"#7 ! 3#t	Ea`oL9]9<"Wym22my 9''ί=     z   !!32>?3 ! I"JF	Eb`oL:9ym22my 9)%     A   )  !!332>76."#7> Vrz.!d@V=nNܩyKu2ـ$g|]=L+S{ugyC@pVGKyҚXZ    *  4 	  %!!3!!"Z"If"      L   3 ! #76.#"! 9[9
E`bnK"%)9 ym22my$     ) 8   "#>$ 3##".>;76. 2>7#"8W˵60
":a^_] .d[[- 4Sh[K789_KN2myuݔJJݓ4kn9:sl3zmpBAkP#?   0  $  #".7>3!33#!"3267v拌u%voII"_pH@i/>WW]ttО\uBnsEA   *     3>32#76."#L^Qvu 

EoLf?CHݖK2ym22ly  *     	!! "x"گ    *   2>73".7!#3"Ha`h\Gˇiҩn*e"I`1Kf>>fKIwo55owO   + @  33>32.#"#".7>7#32>76.+0NOR<bUN**/`_Z'aY IEgj~#yWqJ}|O,Xǅ_?eG%	#/:3	ZSuT/c퉀e4_PL\@ykX@$a     p   !##".732>?3]Qvu kf
EpL?CHݖ&ym22lz   ^   %.>76$73(T;\/RYymNe7*@9L`uPhG/+Xam@.G7(
     X 5 C  >32>76."#7> .'#".%"3267.XRsHxg1XH3MxJw,ف'B]sB/\--Z/~G}W(!C7(IXV^Q	IrN(`P2s|Fg}F@pVGKyҚXXV?-_34e/Xd$Kq$3 AOH@BP     |  e   %3!6.#"#7 ! k";
EabnJ9Y8ym24mw 9''      $  "!".>7>73>33!.wNBh>1xeYj]8jeRM|U3#A]9k El~mXBkJ(c'I        332>7!9:˱	DbanK"&''uxm33mx     WF 7   .7332>76&#!7!2>76& #>2n*Pqpp?"PQ~Z7
ʶhu/:O`1@jEg~GJeArW22Vp>'C\5vqr{_g65f];hS<?[v  mW   32>?3 ! #7UDcbmK98#uxm33nx 9-!     | .  .+732%.#"32>?3#".7>73U!jA9)>*oȡp.i{Oz؄(xs ԔHy<m\GKӗSV~ץk       L   3 ! #6.#" 9Y8˰
E`bnK''\ym22myu   t '  %732>76&#"#7> *:*H*rˢo+h{Pz$؄*?[rUEgVq<m\GKӗSSNw^@   r     ##7>$32#6.۪˪YxQ	9˲OGlIpX*9ٜWWق\OvO    4   " ;  ".67>32!!332676&%6.#"32>VqE 
u{ vu!d@NQkK}NokyH	$H;yW	#4\L7#9GG@kX^yݼ1L?=d{E9dM&7%@r[-ix        
   !6.#"# ! 3#̰	Ea`oL˵9]9<"Wym22myu''ί=  w 8    |  k   )#".?32>733C;]Qvu "
EpLf ?CHݖym22lz    [) =  332>76.'.7>2#6.#" .[P}RPqM%VQAyhT5gx1ArVO\7@kM0r{/DtT0 DiI:U=(
-?XsKZr@=lT,TB)'F_72I5%Binfs=K     L   3 ! #76.#" 9[:F`bmJ%)9 ym22myu     eT 1 @   .7332>76&#!73.7>22>76& +n*Pqpp?"-	hu/:O`1@jEQ~Z7
ʷ7rg~GJeArW22Vp>2?J)_g65f];hS<?[vg'C\5vst{&UJ0  *     !!#I":"O   s     *  3>.'.>?3#'a{T&^}U&S\qσ/4Є04;lb;kęl;T֘TT՘T       *  "&'!!#7#73 !2 2>."|)7"h"x8Zy'r{Cҗh>EЗgO=毚e$ NttMZ\22[a67a R 2    @  ) 4    .?3".76$;2%"6.#>2;"YWwc"
T҇W4OiB!6cBV\[|SɌKM|''V]4*PpGQK!3F2 U`34_ a    g   3#⁐՘?   m v     h%   #>7>73;aH-zKqTCbD(zEm$9H(@{b?%9H(G{^; pf CU      k )  #>32#".7332>76.'&mlf?sS'	0Ja<'K;#*(>%HxXyD"FnL0R>#+G3	%'<*.c    -   3!9!#z     x` *  %#".7332>7332>73#7#"&Y]ׂW|F,P;G|bE{ SxF|bD{ٹ!Sy|}u?xqNQqH 1\Rzb2]Qzhbz   Vu{   7#"!!#3>32+= \S,"Wv-,='V
fc  kV{  #  3276'&#"##"'& 32733#)'<=jkN=>kjEsN}`_33>L!/tsststtu^Rda	DŪ@   HV{   !##"#3>323S= {ٹ"Wv-dVH=`fc        3!!3276?3#7#"'&ٸUc..}gi -!XvNMZLRO_b0gbxy     ]V{  -  3!#".7>327332>76.#"ssN}f[mfL!h1iW<dS@1!	3hW<dRA1!RdaUكٛUŪN{M%AUaf0N|M&@V`f    H  S 	  )3!!!%#.Uz%L  Vu{   !#"!!3>32:= V,"Wv-=}
fc\   V{ + ;  !6.#"#3>323##".7>!"32>`1(`ORyW˹,!6qvy=f:(FHxR#Lh{G5."%;)U^X/dp=)Ze
<L,V؃qi1$InJJoI%!3$1&=i  ^  &  !"32>7".7>3!33IdH;iIQcDXhah{<UU5faep<<qe9rÐQV؃q˚[L    Vu   ##"#3>32u= ιwWv\=fc    V`   3!3N,
    V *  32>73#7#".7#"#3>32Y, SxF|bD{ٹ!Sy=yW#2>KwZ=ιwObn;Ö⣛2]Qzhb)e=2\Q'I7"  ]  -  3!#".7>732>7>.'#"7}4lee^:kPOeE6+NhG

ҠNׄzΗUUzxƔ^SoAAoSMwcV,Eu     V   3327673##"&ٸ>hj {ԸtXvZ_^{Vgb  H   K    ?! , A  #7#".7>7.7>?37>32>?6.'#:{#c!ĞbSalAT-
/6
 AV+ ?c3\DMeC
.[JGlM,!dZpBxi`K
4GS)!>9?;-?!#EsS-7]{DV5wuh&2u   HV{   !#"#3>32s= {ٹ"Wv-H=`fcR    k $ ( @  73>32&#"32#7#".76732>?64.+!Jk,%.2Gw6w5s! TgzEfPnS<[8F}eF2RtNF*D5#`zE*Kh=Lw,J6ArZXuF3[|Ih+YTI7 A~      332>7!##7#"&>KeF!XvØa2\Q/gb  V`   v   !32>73#7#"&7#>KeF{ٸ!XvØ-2\Q{gb    ]V{ 1  3!!".7>76.#"7>32$Pt*>'	Qw{VDmG[V"(NSZ5sl%X~tK	/?$1jqv|CHiD!&*5lmK|o^J H  { Q   jV` 3  !!".7>7.7>737>7V$B-	<Xo{?/gR+-J9B[9	8O.F&%PkP4	.F/:}3 DkL?FM,%HC>0D(<}r.  Vx` *  %#".7332>7332>73##"&Y]ׂW|F,P;G|bE{ SxF|bD{ԹtSy|}u?xqNQqH 1\Rzb2]QzXhbz V| , E  3!!".7>7>76.7>32%">76.ZuJPt&>)mW0#'-"
dPnf#F+[N9
!( 	) Ha=cN}n]I+9 BIDLO$/RKHMT2O`6:n4M3!BDHLS,*O':~HEiH$    H  { $  "#3>32!!7>76.OgE~ٹ!Ryc[<Ul@)IvY=	5a4ZzFs`afF}gS{q94myPIa8    u` X    V   332>733!#"&>KeFиstXvØa2\Q/Vgb   -{ '  3>32##"#7#"&7332>{{"+^``,Ö-><tbG{!XdØ->?xeI{3K2\=2\Qgba/[ Vu{   ##"#3>32u>KdEι,"WvÖ\=2\Q
gb    @V{ J   H  E`   %!!3&"ٸ`     V- '  3>32##"##"&7332>{иw+^``,Ö->9sbKθtXdØ->?xeI/3K2\=/ZUVgba/[   wV{  -  %!!#7#733>32#"6."2>!C!N|f[mfr;hgK;igI__daV؃؛VLdp=<peep<<q   \{ R   CV & - 8  ##".?33".7>;2"6.#2>SSە@2mZb_&Q~fU>9|l)kjjcC֗RVW|]VWrB+OnCHpM'LF&OHBM`_/9k     +   %!!7#"&7332>73&"!XvØ-ٸ>I~eFgbZ/X}M     ^  R    73#3#1ӥ2R     /i   %$'N ZZ-,  C    3#3#k-d    C'        C     7!73#3#	Öd  C     3#3#'#7#7!3''}-dȖ    5Q   3#S   fQ& }    C~     3#3#%3#:/ٖ TQ   !!rX  cu   #7#7!X         3#       ;' & ` ?{   3#]{   C   3#kN-p    Tj   !!t j  T    !!rX  =8(   3#eغ(  H   3#   L     3#j    d  `    3#3#>''`4    `   0!!76;#"._v4~y^zz    lC   #7#7!11X       y` '  ##7>73>73'B./4$/1B7I0"+'B//4$/2A8I0eX5AnEQ`Q2,6AnERaQ1,  X  d`   %>.#!7!23!7Z	9rWJ{c*SKcf:%.UrU    X`   #&'#"'732>76.+7321 1ZZT7.0! $,G`JIY\Z`ݛ^pQg6
4[u;   `   ##!7!ƾ/я    `    ##6&#!7! vov*c.T`&`ؙ    N`   #Nں``       G`   #"#>7#7GPW_%{{o@`y'    `   #6&#!#! v{'f羹^yƒ/`  !Fk   2>7>.#"7632  LsHl|jMNCBcxWf5::q`t[(([tq}=Qҍ,D  `   zɉ`L   V`   #>.#!7!2򳺳	Ky]ihruB=  X  F`   !2#!7!2>.#!2Xuc4"@muXdd?$7d`@kk@>uu>        !!3RCdHn     `    )!2!6&#%㍴^'g_'f`:sƒ      +p %  3>3 !7!6&#"#>762#)aVhN3gvxZ&VauBQ	º

*`NFd6û[I3'@     gVN`   	#NӺ-`
   X  `   %6&+732!7tNj~~͘+X{o.  '.` 	   !   ! 6.:;;4OUWNx`'0kIuX$  ;B"`   37%3>*886Sr׋e!8bVyDvj/h29    NV`   #6&+327#"&7! ɺ)r/:J)EUC#E^
СIEd    `   !  )7!2676&+327#"&7hV^.+,:J)FUC~"`܎ۺIE 2Vc   >?3#6.'sJ~aL)#c䒙.×o~S&PjI9  X  `   %367>73!7"6"%4$*+=/F(!S47Z7J}XM./G  V_  
  #7!7!9ɔRWV
LTюn   M`   #>.#!7!29ooBvRO~h2::IviF)5]      -` (  !#3>732>73@0N?/)!$E,Jzjbywa_R)3[ik`!#@5]Ey+gE=(Ci䣉W=    `   #>.+#"'73267#7!2vv	4iPn)5J?&GDn]Q	^`Jce:%r3C     `&,  ,     `&0  ,   `&0  0    `   3#p`  `    3#3#psp`|   2'    ' /  33!!3'#67676'&67676&MM]]zu4d4bexx"6d|LyFM;5]TT{v!RTx`aw,0dc1-!:;z{t  8{   )  %&7676&767#"76%#"763263 #6#")>?B~?B#(('(H-,$\?!sBA?>BA?pطQQ9    P0  8  "32676&&7656767$!27632&#"# 76-676$" %"Y(@A4fuaLUCc:0/$knW3Ho  %"%wJN;EjfR<a7He:.77V     ^   <  327&'"76#"%67&7676#6'&67 #"'632p24F616C!/=!hT4pp$D; qL-;! 9%	2'#u`0'"/6OgrAvnJK$\9.ȵ     6  !  >3 #"&?327#'&&776efz3Ly/F-
C
BB
quЍ
h!	ACBB    )  "32676& 6''&7632#7676$" %"%dd:|;U!$%"Of!*`  %"%:yx~)RhKK>  | h  9  "32676&&7656767$!276320! 76-676$" $"X(A50
0x*2MyI~i92)djnW3Io  %"%wJqjPbfDQcwiC77V     =b  ,  2676&'&3%$6567&7'7($"%!!{Vppr=.<l#'݁"L7  $! $?=Qm-G4   E    "  %"32676&#6 #"676764$# %!l'(&T/%5o'  %"%P/0LԨ:1C     4  .  %"32676&672#6#"#"'&#" #"73232+$# %!8C+7*`>z(#6-U&*)C"$  %"%3|0ۯqiPWu     H{   4  %"32676&"32676& #"7#&76766! #4#".$" %!$" %"V)$,i"+(Ӣ#I
\<  f  %"%  %"%ed~Sq%  (  ,  "32676&6323276#6%$7"$# %!*)" '"u1'(1ukvAD5  %"%@կ̰Xsjf\   '  2676&'&732767$76763673%"'#n$"%!yzY93E&/&6!?i7zs  $! $|3-g_Jgg    "  "32676&67&76! 3%$$" %"j/ܰ%'&#w!&Mg9V  %"%<%l'4B    "  "32676&67&76! 3%$g$" %"k.ܰ%'&#w 'Mg:۸W  %"%<%l'hB   $   K  "32676&!"32676&+&''"'&76323273767$76676'7e$# %!$# %!Wv?=v-/(G<=M(.'
'X lc  %"%  %"%IKTOb4ˋ42@7-]fn9OI  ^  !  %&'' 63232733273 "2>Xu>{,/(Q  >@ ! IK=|\@̀     4}  -  "32676&2737673%&'' 67&76$" %"c <=# >Xv=/ 3* R   %"%4ˮ/IK=%ۑM    -  "32676&2737673%&'' 67&76$# %!d!<=# >Wv>. 2-R!  %"%4ˮIK=%ۏM `   3!273!"'#763227""?O\o)`Ŭ;EE{    +  2676&'&%$3%$4767&7'$$"%"#}Tr>.<k#'݁H   $! $&=Qm-Z$     SZ  ,  "32676&6! ! &'$%$'&767$6$" $",>:5bHHsI)(BX  $  $8${mE{N&     
  0  7"32676&6'&'&7! 767! '676%&%" $"D%,/M(<	Dw!S6>(w&Il1!$  $TrJco<    6  '  "32676&73 76! '%$!&'&767$%! $",S.*Y(Bi<s9o*^!$  $?GP		[B    o  5 =  7"32676&%!$76! 6756'7%&76'&'&7! 76 76! %" $"PI30TJISo1C%,/M(<Ewt!$  $=6TbZdTEmMd  cO  	 5   "32$"32$7&76%$7+&7626#6 A?A?F;4̹*+*#T/(Ӣ">RXA.)kAd-
/ԋu	cdW7'   7  ' /  "32676&%$%&'&763 76"$" %!:<<;z1֜{#*)E:D5"9] NHS  %"$36H9G)#$67    R  6  "32676&$76%$76!232'&#"%$'&76>$" %"1#04QUjhrZ;i?Oq\,)l  %"%1FYl0yP^b8Sqt^}]F   %  )   "27' '&'$!32'&767"32?6gj0.ߨiNPh)*(3,Mc !t@@@+;9jq!Ba    9 l'ePeI   e    ! '&763$76'76"3W4ei,; A[	IC8?`_TWDU.F~=?       {     ##"2'&73276N6nN%''SS;C>A{jVR779   %  '|   f   @ji   ! ! !7 76! $%LI>>?&&%~?>~   Ai   ! ! 3!? 76! %%LH=M'&%~?>wJ~ @ji    ! ! !7 76! #7$%LI>>?&&++%~?>~N Ai    ! ! 3!? 76! #7%%LH=M'&**%~?>wJ~T   3    "366'#"7632AA/Df>Iτg$N[u     "327"767&7623273V,JHL9??&,Ws>
[ybRF5EBXF [    '676%"7676!  6"3[oc	A"!7*9<?8
_F.UDWT_`~?=       "  76&'0#"&'&"'&727671	Q]}W)#@KHXb]pN10ptDr   4  2676&'&7'&'6 7627#"&#" $" %!7V 6:m#$ލQF@z++t//pITMn?  $! $`D-rkHr}3	TWW  G{  !  %#"632&#">322676&#"AJL?y,\]HHaP$!%!p'(FnJv-O!3]  $  $  G,{'q0  q    fU,  (  "32676&&3 #"6/&7632$" %"_W%)iL#^.)<m"lhT ɘ\  %"%82y,v  ^#     6$76%&&7! $#"7$"27$$$
AA e#e-*+;X4|`Pٳ
?@@@    I  "  "32676&76'7!$#"67#3$" %!NS.I0)<p  %"%Ȉ_p
8>u   :%t / ;  6#"#"'&#"$#&732327632! '&?"32676&F"3U?z)9,"0)<02#7N\N=24Vq=91FF$# %!Xt\DD\t]
5<\UCfwpv
	gH  %"%    t   3#;Ft  m   !  2676&#"%)76776 767&!pU 'OjEgՌ.pp\(>U   > / 4  "!27676327673!#7676#"'&'&#";&76366%2d+&VTH*ERy/LNO\i1e>.`hG;A?~=h\$kb8:;-F_Zkf2) @<   73733##7@****׌ٌ oP   @    632#3276%#'һLTPܴHI   `    " 7676&' ! '&676܏x`#%(4bvB" l~bF-1`T3-h`WĒ  g  &   26%66'&#"676'&'&7676 rYZ:tpIp,)8+
k'mupHECle\gUܚsuϨ   #yw  "   26"27"7632# '&7?$7d.0j'CJ.<\2Z:^c`uUܮcpH   ! /  %26'$7632327#"'&#"%$'#"7632273?F%&-(HL/pkF&A*'M\f>)k6DjR:jTh8KOpt$68{  'Wz  %   26"$'&7?$732&7632$\n!BK-=]2C-l_&+63R?LvTamY<K     'Wz  - 2   26"%&76326732&7632$'& 326H!,1%e04C-l_&+63R\n=Ch(筭?fXmY<KLvtt | 4 @  '&''"&76323273767'$763227#"&#""32676& ϥXu}w+.(M<=G?*(u^pISL3?u$" %",IKbv4ˋjEaTW8ҋ  %"%    e<{   *  %"3276"3276#"76!#"763263 #6#"W??AV??A(')'G,*#[>  !s@@@@@@@@pطQQ%  Rnt   M U  "32676& 276"#&76767%6#"#"'&#"$#&3232763276'767$" %"on
n
p47F"2V?z*8,"80)=U3$7N\N=3n:!'6=?"I-
ÔZ  %"%933hk//3wt\DD\t
5<\UCrTF-2bG;"b,  #f  "  $7376#" #"7276"7n?s}02t# R(-+|<ejsX\|9@@@  c  	 D   "32$"323673%"'%7276%$7&76%$7+&7626 A?A?Td?a"J$(]RXA.)k@H;4̹*+*#T/(Ӣ"-o6J,/7'-
/ԋu	cd     c8  	 G S   "32$"323273!"''&76326%$7&76%$7+&76262676&'& A?A?lfx?ԅK+*$)^Ug2Ak@H;4̹*+*#T/(Ӣ"A$"%!-ӔJce$3-
/ԋu	cd  $! $    \    !  !7!!%6 6'7MI`$J$Mf99*L;X"]|K  K   #"77!3273!̖/84)qͮ-#JLX1  h6   !6&#"&76$32!@ToNk$.%sc.xsgd{1    %     #"  32 7 % %7!7!! 8b87 FFy$$p=`II=?<  K  8   !&#"&6 327-n<&Q@YӅ4   F    !#6&#"&76$32!Rkٵ|_kAs"$1%#giMk|謃l  d 
   !3>6& #"!7!!  d5z95D?A"m
+W5       %#  !!!  )!V/hD=^pdUS.*rzMjO U Y   %!3!M7E#/C        6&#"36#&3632\Y!t~N֑7Bl3}9^DoUD<N         &#">!#!63  9Q8x|@qzЂ8	=10<  t 
   "3267! %" 3!!7!!e6,._C_:??yIL$imA-*'=Xx   d a   %6&#"#6$3!!&6320Ĵ+$!%6waf	ɪXP      !  #"  3  3!    !   36N:U<BrI,LM289jM:2biVGej4T ^    #"7!7!3>73.1{"9$% =Rծ  [    %#"767#7!32731""='ЯV-ؠv湯V4b        %! #"7732673!Ia@,=[*,ni߃y8/quŚl        # 733>76'7:2(/,y~*jiю   ca    6&#!!6$7 )!!! *  /c#m +     !  #"  32 !7276'!   !  M;W9@>Im"*qKK+I=]LBa]Mv8"`_؀  + P   #  #32 76%# ; !###  )  dbb,+6e,,¢eBjb\\eBAt
4 LN44B   @   !#!3!3!HʳeAr{z4lfQJA     ^b   #6&"#6 32c%%2l-۬TA   >    %#"733273.zy(tůM=űU5a        .?3326?#"733273'0$5ȩ'yyθ$!S98ȗX2    d    %6&#"#3632 qχδhx?050      7#$  !&#   %%3HuNRCwӌ$G@&janX     W 
   " 3267! #  !33!!/.e6e>=9nn$P ;w  c~    6&#!!>7#!!#7!#!2Y]9iQ$96R1ei{m{(          # 7332676%$6 32#6&#" -6(!*="8,+y,eȪƋv    c    #"'!!33263pBf%i8g        !###7! ׀$T6O_ #    # 7!#!326732,Pr$Z^ѫ     d    76&+#3!23i"!;شhn #"7b  n !   #" 673267 7>32#6#" n<U>0m"0,>A4}}%5:#ÃL}     %#&?#7!;3q֙&"v#%tmfa    F    #&$3;>73*?L[>rs)a^+s}#ǩ    { 
  3  "326?"32676&+!!.76$;!7!7>324EkHP2?c}&he#;Z!2$% ; ~&+᡾9]~}_h`ۇZy`dYǲ¼     ! 73326 73 a[]cRNEC,-"28<kԤ        ! %76'&73'!2zYKzn"R}|dfV#$]]\!<ACijAI{2HP  D6i  $  % #"7%676#"7! 6&'3266--Z8ES>Z ]%*6w1(W  g(ra  '  ! 67&#"#6%'67$!26! # !2rt^Nv*4uHk< (}cgiJ QPXP(BԞclq/쬱zb   9`   ! 7332#"#'! lYtYYPI;;74SnV?\o     7*` "  ! 73!76'#73676#"#7! ZoJWVQ:<. .,)
IyK,6=Z\ϿT҅h       ! 7&%&326#"6v\ZvO:E_BH&>ZZXH6.<*qaqEtD'\a  a`    !263 # #"! #"32@rFNDWe(s`
aaXU@J(6d    `   # # 9ѷ>UV=TK9s\D #m8     ,V   ! 73!76+73$76'3yWmGVdY:	<"6g8)&V',9>[Fa[  (j 0  # 7#"#7#"#7#"#4%'67$!263263 3 $3@:;$99:&8J`UQdg0*+>fTo'       ! !6#"#7! &' !2eoIzt}ZG-*

HzK;V\I&?!1N//T-,
jNY       ! )!"67 #32yRfjJN0vVW}VN{\n@
;k    F`   # #"#7#"#!263 F@jDPJ,,JQBBo&V@~Y$3
     g   ! 7332+73276$73t[]e<:GVMǮ @")$%mdȨH    8|i   ! 73327 76%7%XcXV33;;S>9#)O@]OruGv       X #  # #"#7#"# %7263 X>DRK**LTD=UDC$rh	%KBbw+ IH@Q)M      ! 3!26?3mfRp RO%*>MLT|u]  ~p    %3 ! 32 %#~"QDaA/Bwq:_\2)K[60~  ?C    ! 73!26#"#6+'73263 YnGYIG;;%{T@Rd6MP'k0C@]g[x(2  ` 4 <  ! 63 ! &?676326?6+73267#"! #"32l2]5!'89++#P SBԟ
h]YONJeRj\w"!!#4soX7<\"q    8   ! 7332&'"#7!3lYwVXQS;;W+Q>k?\K|
P    )T_ %  67 !263 #7#"#7#"#6'&]Vf/a.,B;-%;IcJ4$ε<5)5A/q$  7xN   ! 7332 6733673XgRW25;;Pz[/-=ӓxB_v?
>        *  ! !6#"'&?6#73263 .'"32a5tzqW('##~+Z1y8:vn2vG\V9!?
,V55X4ʸMk  d  1   76#"63 # #"#! S7,Ltb>=D!KNA42%tG4SD9S`     ~A "  ! 73! +73276'&73$Am#?C!>@MA׭*]\RR`W(;Ƙnl=WFGKJ         ! !3&'"32p[]xvJt.PZ=XZ4+$.7aX    6   )  !26;'"'&?6#"67 ! 3 #99+Z+~++ Yvvx+kFZXv4X54V`<$
3  K %  3!!! 733267#";#!3T4,X^[WQN8<#4V'$//?CUQK_K+;   ! 
   ! 367 #32!|bVw[7N\P(/4L    %  '#727676/%77676&+732l&)d.o<w
4LEDFH1}Հxhh:9p2E"%-4.-UA      )  ! 73326'#73276+73276'&73XaW]GG?9.pe"gZ!#&"amJKVEE=EHq    )  ! 3326+73276+73276'&73X[]iK90wo !qd+uv)nn&aHx{m)(-,>EHq    1`    27&! 3&'$#"]^KwwI:,e@KLYTs_0sIKSzyd     8{_   ! 73327#73$?#%ZY`XOV;="=ݵo64>4P%v
9=ZZyu?  9 %  ! 733276+73$#$! 72%Y_[YOP>>,6CQ]eWTO 36=P6A^!)vTw      '  ! %!! ! 3#3!"3273!76#"3LY^LP
;aOMM2rr;r10222/6fwwi   `  $  !"'!727#"!$!263 #"72zYC*S^4Y[XIty*[C1F'zSe"8    6`   ! %$76#"#5! ! 6'3a7`C_^%&EbO?/3E4F@469</B޹L     9N   326'3!"'3273! 0_='ً/[zqG=<Y_ZYMl>"S+\     h  $  6 3 32?! 67$3276&#"08/^8> [(iH=Few1(W~d	  c!a   56'&#"'67$% #7#"++_as[R_[6D>EI"ZMKOm0T$,    K     3#3#3#"('(ʺ =\s    2"6;!"6#"32a?@AL)A#'{n))tv2c`Lз          %#v1.d+    K&   E  *    O&  t  7      	ϸ""l,N   7  O&  qt 7  N&  ru 7  &   e    `      	7Gu,b(&xy  `  O&  yt  /&   5    J&        '5       J&        O&   5    JO'        \&      7  Y&        \O&      7  YO'      7  O&   0   &      `  Y'        O&      `  YO'      `  O&  H 0  	   3#(     7    	!3pD	`nC  (   )\k7]      7c7]]    0d   "&7332676738z8FA@i0zCss!AWX@+   R!U   #676&#"#>28z0G@Ah8z8B+@XWA!s  S0U   0!7!2676&#!7!2n@iG@s,0{X@?X{     0U    6&#"32>"&>23G@AgGA@i,,C?XW@AWX栠       	%R}K1}K111   8    3!3Ģ䢐CC  ~K   3#(K     }   !7!${  }1V   #7#73733)z))z){{   1   ##7!\z\$%{{  &  U    &     7  &  =   `  <&        9    K&
   E  1    O&
  t   u   7	7	 $l,40   uO&  qt  uN&  ru  u&        `     %7#,b$Fxy   `  O&  yt   %&   5     J'    9     &   
5    J'   
     O&   5    JO'        
&       Y'        
O&       YO'        '      `  Y'        O&      `  YO'      `  N&  zu  }   7e.\%sbbs   7k   38C     332673 ! F˰//˵99u\*$     JK&%  /E    J   3 ! #6&#"9[9˰//$*\u      JO&%  /t   ^   7!  )7!   )5V:;B PKK"Pa.,~   ^O&'  t  ^N&'  u  ^&'        y     %!   )!  ! aPKK B;:5ji y  O&+  jt @'#      &#        &   %     '   %     O&   &     O'   &     &   '    &'   (     O&   (    O' (  (     &   +   y  &+   (     O&   ,   y  O' (  ,   u  &  +    Z   # &$!3#"3nT'nͶ$
nn{ &#  "|     &%  "|    &'  "d   y  &+  "    ~  u    "32676&"&76$32#z!_@.0O.R3I 5  K&C   E  5      "32676&#6$32#&:f_!}.?0.R3{  5  O&C  t      %2676&#"3#"&76$3f_!8}.0.@벃   @O&E  t N&E  u      %2676&#"672#"&73Pz!_@.0.ʃI  O&H  }t   O&   A   ~  &A        w&   C~   5  %&C   |     wO'D~      5  %O' |  D   &   E   '   E   O&   F   O'   F   &   H~   %' |  H   O&   I~   %O' |  I   u'H~      j    2676&#"632#"&73X`PJ\dSY_ЉrVFTHUGQK})~J      "  267654'&#"3#"'&547>32;Oo"\Jl RFrŕO;Ɣ_KQ,+HT++}i?/Y$    ~  &A  "x   5  &C  "   &E  "x   &H  "    ~  u   #6$32#6&#"H0O.f    5  K&a   E  5     6&#"#6$32/f.?0   5  O&a  t     32673#"&7f.0    @O&c  t N&c  u     3#"&733260.f餗    O&f  }t   O&   _   ~  '   _     w&   a~   5  %' |  a     wO&   b~   5  %O' |  b   &   c   '   c   O&   d   O'   d   &   f~   %' |  f   O&   g~   %O' |  g   u'f~      j   3#"&73326ZЉrrRO\c~JPML  b\   32673#"'&547"\OprrŕO;/&MPJ?/Y$         !#!7!)!+    7  K&{   E  7     3!!8"!)ժ  7  O&{  t      	!7!_!++    !O&}  t  N&}  u 7   /   7  O&  }t   'y        &y        '{      7  &{        O&   |   7  O'   |     &   }    '   }     >O&   ~    O'   ~     }&      7  '        }O&      7  O'      u  }'      8i   !!3䢐
nC     }   ! &5476$)!"3d*'Ͷ
n3<n8-gh     7   3!7ٍ
n   }  $  "267654'&'2#"'&54767!7Ɯ	>U!,=nkM.qP!a!Ӧn.(f6J&!Q3IqP6?xU:Dj    ;
&   8  ;}  $  "3267654'&'!!#"'&5476$|	>U`^!&5z!#.qP+/ӑ.(f6JI;SC\6?xU:D    x& C<      #  %267654'&"!7!&5476$32T	>U!&5{!f".@qP+Ѫ.(f6JI;SB\6@xU:D    &  <   &  <  6  !  %  %267654'&#""'&5476$32!
	>U^`!,>nkM.@qP!bg!n.(f6J&!Q4HpQ6?xU:Dj   6  !&  ~< X}&      }&   ;     &      6  "&   y     &      6  "' y     6  !&  .<  ?    2676&#""&7> !jMPIEq;J(<MJBSKFXCIn~|Q;n     c   "'&547332673H6rr)baprrC1U#J2&MPJ   Vb  #  267654'&#"!7!&547> _W+EInUm(I6MIC4#KS$%nn)4D1V"|~        %267654'&#!7!2#Sb ,=!kM.쥒&!Q4HpQ6?   ;  
&   s  ;     %"'&5476$3!!"	 qP+/!ꏶ	>TxU:D᪑-'e5I  ;  &  ~<       72#!7!267654'& qP+!	=TxU:D᪑-'e5I   &  <   &  <  6  !   "3!!"'&5476$3}b ,>!kM.@&!Q4HpQ6?  6  !&  ~<   X&        ' ;       &      ;  ' 1       &      ;  ' 1       S&        ' ;       S&        ' ;       &      6  ' 1       &      6  ' 1      ?   "3!!"&7>3RvCYnƧvDZHCn~}  !     %7-7#T--"$$綶22         !3#$ 73ECcuSQXon    8  1K&  _E  8     73 #3  K	QuʕcC-ncC 8  O&  ht      7#7 %3#  	Q;uʕcm--noX    O&  t  N&  u       % !#3 #;EcuQ-gCcn   O&  {t   &        &        &      8  &        O&      8  O'        u&       '        O&       O'        &        '        O&        O'      u  '         6&+3#'HU?߿"ǜV     C 3  .#"#"&'73267654'&/&'&547>32=q7Bv(5D{6$=E?BA{&.D{3#=zÇH)$@+Ay~''L8'(	;'=o  7:   0#76$703#""?UH*VGJ   2 '  32673#"'&547654'&#"#632!\ac,7©X5t!\ac,7©X5uD74Z[8TtXuD74Z\7Tt     '  632#654'&#"#"'&5473326:t9K+ `]j)t9K+ `]jX%a8uVwF4-h۷a8uVwF4-h  O&  ;t  B 3  3267654'&#7 !"/.#"3"'&5476!2]rz E.٬]s	
 I3
'X˧|5:03skq79~pX˧|.27;stq003~  B&  e<  6 3  76 3  #7267654'&#" # '&5476 !"326"HM'3"
! +r2HM3"
" x.zsp~eb55`-'F6SXp~eb55=`+&H7S  6&  e< '      '      S&     '      SO&     O'      &      Bi&      &      Bi'      &      6i'      &      6i'        3  >72#7267654'&#"#"'&547>3"326X83o!IU<K?Xs"MP	:BTF=T;7]nw--6A#vW<;aky.%%3M  [  @   !#!73!u!7X- 8  K&   !E  8     3!3!8O!u0    8  O&  *t  r     !#7!̖O!u-ЭX r  GO&  "t r  
N&  "u       3!#!Zu!70     O&  }t   &      [  &   3     &      8  )&        O&      8  )O'        &      r  ' 3       O&      r  O' 3       ,&        )'        ,O&        )O'      u  ,'         3!#!ڐ@Z y~    }1V    7   33##ϑۑ"yDR    6}   33267!!#"&7#W e^!W!6..}B   }   #"&7!7!3267W..6!W!_e W}BB         !#6&#"!7!6$32W e_!W!6.@.B    o  
&     o     36$32!!6&#"oW.@.6!W!^e WB   o  &  H<  8     7!2+#!2676&#: ++uʕȍ}/    8  O&  ^t  8  S   7!2676&#!332#!Xȍ~8u++8        !"3!##"&76$3!{8~ȕu++-/X      O&  t       %!"&76$;3!"3 8++,uʕ8}X   uO&        O&       9   !"3!##"'&7>3!$V`JPU@NDqEPBJKHG?|{       7-7-7	A$B$-lB-޶       )  "3267654'&&547676;23#4E
2,O	gf_jE5N/0"B,15<AiNMI6Of+  0K&   E  0  *  %267654'&#"3##"#"'&547622F,2EtTC}@1j_H9="
!.@B+N<IsM=My    0O&  t   |L  %  267654'&#"%#"'&547>3272E,2EO`mA3GAB2,$="
!.@;aP>J%64    |O&   t  n  L  (  267654'&#"'	7632#"'&544E	2,N	t$,RAGJ6Yo?:/0"B,;̶x%@0X!&mC>O   n  O&"  yt   nO&   #   n  YO'   #    {    2676&#"'7%6'.(!+!1e.ii~=CQ$%#sb+_O;XH    {  6  267654'&"32673 ! '&547>32#":(OdF]S'B/˵9sN͊jE5Z[~;B,>"
!RcLl?i\֕dQ`jH6P_UV   {  8  267654'&"#"'&547>32 ! '&54733267?,OdF{4<~9*jF79sN˰'B/B,>"
!V@FtS?NN֕dQ`ucLl?i    K`  8  "267654'&'632#"'&547 ! #654'&#",OdF{4<~9*jF79[sN˰'B/UB,>"
!V@FtS?N$*dQ`\cLl>j    !`  6  "267654'&7654'&#"# ! #"'&54767632(OdF]S'B/˵9[sN͊jE5Z[~;UB,>"
!cLl>ju$*dQ`NjH6P_UV  K`O&)  /t !`O&*  /t   u  :  267654'&#0#"%"#"'&547>;  )7!  654'&RhE
25Dum=0mtK"Pa 5V:Nl/0.-jI8Lc|cv~.dR]   uO&-  t  b    >  654'&#0#"26%)! '&547 !32#"#&'&5476C53 "	hE韪;Mt5 aPuKmB3]Zm7(	0/	eS]}cwiP>JpKIL7G1   b  O&/  jt   O&   0   b  O' (  0    }  .  "32676&#3!! &5476$!32"&5476Q+ !,!V\*'rRCrIq$$FJ8-ghn3<L2;WM,!  p    $  "3267654&"&5476$32z	_=}0OR.(f,%gI͑:D͐;Df   Z    "  "3267654&!76$32#&'f|_!xK߮.?.rR*$],'\dfX;GI  Z  O&5  t  K  "  %267654&#"!#"&5476$3f|_!x"!..@r*$],'\Rf;GI   KO&7  t  5  $  %267654&#"672#"&547'z	_=}0D.(f,%gR{I͑:D͐;DXfd   5O&9  t    $  '3632#"&54267654&#"rW68FY_Љ~)X`EJ\dG=O)uU"~tUyVF1>UG2A  7   +   7     RK&  BY     R'CY       RO'DY     +'EY     O'FY     'HY     O'IY     C&  YY    }     %!654'&#"#6$32@Wf0OqPf,%g7LxU;D   Z     %6$32#654'&#"!7.?|X5Hf߮XpQ;G)$]=Tdf     K   #"'&54733267!.|X5Hf"!qP;G)$]<Uf   (   	'!32673#"'&547D"@Wf0qPfd,%g8KxU;D   
K&Q  `     
&Q  a     
O&Q  b   &Q  c   =O&Q  d   	&Q  f   	O&Q  g    , 
 (  2676&""&7>323326?3#"&?bV_t}BCƔ:!D,CS!!maZT:KMMKFHn|ppX;oBGj9    ( 
 3 >  2676&"!&7>323326?3#"&?!"&7>32!2676&"bV_t}B? Ɣ:!D,CS!!maʔƔ:bV_t}BZT:KMMKFH;XppX;oBGj9|ppX;T:KMMKFH         !"3"&76$3!73ꏵ b .+.X5U      &S  ~< K   !2676&#72#!03 b .+ʅX K&U  6<  sQ   '!"&76$3"3!MJQ+.@ b }XiU𥒥    sQ&W  C<  \   '%!"&7>3"3!=0[̞ƧRvCYB~}nDZHC   Z     %#737!73!3## *!7K +ԭ-         %#7#73!3!3N++ KO!* ~0Ԥ    O&[  Kt  q  j   733#!#7!7#7++ KO!* -ЭԤ  q  jO&]  "t  g     3#!#!#7373 *!7K +ԭ0~   g  O&_  t  /   33#!#!7#73ڐZ )unfy~n  ;  $  %267654'&#"672#"'"#3Pz	>U_@W@qQ0ٷmPz"ʃ.(f6J,%g8KIxU:DH+     8      3  !%!   )5V:;bPKK"Pa/w.,~    A    #  !3	!   !W;:5aPKK//+ji     7 	  !!!7!};VnV     7     #7!7!7!73!!77"i"{3$"i"8*VxnVnՆ     8  Qs   	#'#37Q͉RsH+    &  AY     	'_s  Q     'a  R     O'b  R   
'c  R   9O'd  R   'f  R   O'g  R     `  
  !#!#3!0~;[`G      `    #!!!!!!!	!bj:I/6Wk`Ӕ&    r{ 4 = J  %#"'&?!6&#"7>32>32#!3267#"'&32767%2676'&#"[hh1Nhiin"ljpq6`WW!$EG`]!mcbZabCB@mn-{65oqr#Z^Z5*,=<wxx]^``FE..'00ZZWW`f{b:9ml)       @` 
  #  % 76)3#6+327#!7#73!2)## `9(zn90| |Ÿf_ڪrĐ   ^J{ F    M  g`    32676&#%!  )à)*7F88Ǔ    g`    !  )#73!#32676&+'7F88bzE)*ٍ<`     M  `   !!!!!!':I/`Ӕ    ?| 0  #"&'7327676'&+7327676'&#"7>32l/0L] \MOGwNO<:tRYIJ]YYN"_P"A@]ON..@F-,38XZ88%l   *L`    3#73XٸU--`L    `   '7327673#"&^$8Ng=9*{{7̺G=<=MFy,  M  `      {   37!!'7)P8N!V}6{dajkNj M  `   M  `   ^{ R   {    q -	1 
   6& 32$7 !  76 !  mn
///n/   L t   %#>76& #.76 !  m:J#f#1x 3BtNPƳPNM]*U    t Y 	  +  	3267>76&#"'>3  '#  7>7'7|2<Oy1=Hr2~Ww/RAbXx/T?a)gA\*g>}66]C_56`?`  h{ & / =  7!6'&#"7>3267632#"'&'#"'&732767276'&#"hNRSjl"lj<\ssjj56__-chh@Amn-ǔlmN>@''@? Zdc44*,nmn67윜78lkpĘZYWWsttstu   8/<{   6&#"# 32y''6M6/8    /   32673 #"m''66/8    *  `    !2>&#%!2#!#F[u!P[f@X^^>    |`  !  .76763!##"#676#";eT z|ڹ\aBBUG>@1wGI86wiQP%$q2^66**TS++       |`    .'3;3!"'&7>#"34T#rj)44a\|\\ BwnwSl^2q$%PQicQVSTT     `    `   $ 673 &73 *X* };M    S Li   %!7!2676&#!7!#Z$$`$Z@%L||Bt     s N     7373!7!2676&#!7!#''''lZ$$`$YA%xzʤ||Dv   .{ '  #!7!2676&#!7!27676'&#!7!#oP"\$$XYPO$`$[ NOE__ru99wSS?XXyzVU     ` Y     ` Z    X` ]    %`   732>&+7%7!2 'EӀ%hnH FP}Bdd>Jm7   D  k{   3!!DI!{/     `N    *  Y`   #!#Yڶ`I`   *  `      `   367673#7&'&3mZHl(::6..Tl6::'?*N`1Ms,}},uM   `     
  !3#'!#Zń-Xq`      !!!!!7!#!.0A;),F"U___DXI   . 
  '  327676'&#327676'&#%!2#!;g8:+*g1^34('^EED20Q[Rab+&&MO%%X@? ]65dL.-rUp==    . 
   327676'&#%! )=~ji!!KL**vNONN]fe  ."   !!!!!!R-0@;___     !7!!7!7!7;@0-_/__    H $  7#7!#"'&767632&'&#"326,NFS^\efg((\ON?;KJWgg!!EGCn]/rssr'y5UVVU   .   3!3#!#BBM2MWr  .O   3#   Uf   3+73267NN1(TVDE`Tl    . 
  33	##DNazBm    .   3!!_     .,   33###н`|{9="    . 	  33##Ы|{EE  . 	  ##3|׫{)EDE   H    "327676'&$  '&76>cc?Abc?@`_&&ta`'&[\\[[\\[\vvvvuv   $N  ?  "327676&327676'&'72#"'&76767&'&76763sKM;;stLLt^R=<4 jCE,<RSM~di12pmVUHHoh#,
[Q)++LK,++,KLV5##,&)$%LY+8:6iGd78PyAAAAyP87'21I.*    . 
   327676'&#%!2+#==Y89)(YEE0^]A))KK))]?@@?   .
  !  #'&'&+#!2327676&#8'UP''LDEC34:\76P\$)(GTD<<yO44K&&IJJ     ;i   !!#!M_  ]   3327673 '&7Àc,+z{CAcflkKJ;;;;TSST     |#   333##|=N=Nq9==*  4  +  "326?#7#"'&7676;76'&#"767632;=FF`|Fs3Um56[Z.-_<x:D>=9>>E7@zd+_9666[i66
G''`FG    D  +  27676&#"3>32+3267#"'&5;=FF`FF}Ft3Umj[Y.-_<x:D>>8>?E7@=<e+f_96lZj66
G''`
FG    G    73#7#"'&763227>'&"utzt/zN??:acN31{,')AB,()A_^86Z[([ZA@@AA@@    H 3 ; I  #"'&?!6'&#"7>3267632+32767#"'&%326?27676'&#"^9SCD
56sADCBjGH#;KJ[wp[YZ_=;<:C|9Y>=@**V`;<#"FaFE34QR2k88a"!CC"!h^j66
GN`T23bX6E7  =<e  "     6'&"2767632#"&'#3H,((B@,')A/=>M>?:baMfuuc@AA@@AA8Z[[Z68^g   1    3#7#"'&763227>'&"^Btt0<=N??:bbNd{,')AB,)(BS^8Z[([Z6@AA@@AA   F  #  !32767#"'&7676326'&#"
56sCBACBECDQRooCC**VaCD2j88aWW[ZQRmT3210Y    B  !  7!6'&#"7>32#"'&73267B
66sCABCCCRQooCC**Va2k87aWW[ZRQmT23bX   ; 2  &'&7>32&'&#";#"32767#"&7676E{053<:21,K11&%Ib]W37	
/._;971<67334$$4OX^$'U13 
`fa<))  /y 2  #"'&'732676'&+7327676'&#"767632D>QO{054;:11-Kb&%Ib]V47	
/0_:871<672HG43H4O-+]4$'U 12 
`33a<))     M  1   6'&#"327#"'&'73276?#"'&763273K,((^]@@,)(]^@_`=540//03rCD
.>=N>?8b`N23tm=>>==>>FNO	e45k37XX"XX7_  %C    3#73tzt0t     
  33	##udPE<u2    7 *  67632#6'&#"#6'&#"#3676329CBRo./ItHJZ>@DtHKY>?Duyu2=<ML0/E!!DE~wZ,,56\w[+,65\sa9"#   N    +7327676'&#"#367632L|rBKN^@@Euzu4=?Jy21zxlXVY,-56\sa8BD     G     "327676/2#"'&7>CC,)*^]CB*uFEghEEA@@AAApoBWWWXXW   u   67632#"'&'7327>'&#"4556MNޠ:31--^3pKK,13p3355
	XX

_?@@?  '   6'&"#>3204*)CCzΘFEoBAA@qWW     g   27673#"'&70*)CCzΘEFoBAA@qWW      #367632#"&$6'&"27Auu/=>M>>baMf,((B@,'(Bb_8Z[[Z6@AA@@AA  ?   3#;#"'&7#737:"BHww*+BUU"PMV-,vTP  c   3327673#7#"&cItIN^@BEtyt6<=Jyd{Y,-65\c`9     ;b   !7!27676'&#!7!#Ue9823gpl9*VWg#"FS10gg%dAl88    j )  #"&73327673327673#7#"'&-8CCRn^IuHIZ??EtHKY>@Etyt4<=LM0/E!"z[+,64\c[+,66Zcb;##  c   33#c{wB{~        #! !&'3276776#"6t2)y3τ4}"#"^ ؙ83a_{  W)   3#7&+732$P:{i.t.^<,||GX     3  ,  &#" '&76767&76!2327676'&'&9
~=LghEFi(3ZE.*C,)*^]BC.2O'r(B4?KWXXWr]$,O'(@?AAAjp69    ^  
 )  "27676'&'2##7"'&7676736N)K;HA)![?Die~,s,~BEgMj-,D)%GK!Q:5}t?3XJOZUUXR=\,Ajq@:     '#&+73;'&4h@a,4?a,GX]:DFY   %  Cg
W  d   7  Ou  d   cs  d   c  s  d   o  d   W)s  d        $ '#676762'4'&"2764AtkH1i)>+	q((A_o"O92Z>Y)/X0*Aq(a*@@_  ^ x  d  t  d    &V{  (   !2.#">32 #"&'#32676&#"84aK"IR&L|ο23|&!#'z'&zF,*[cbbc#   .      `   7!#3#3!73#73  B8  8Bत T V7{  ) 6  %##733>323##"&!3021276!656'&+"'tZ!M{`?8{%=j]f%=jO̪dak!#ꕢa81fEttf>cFttV  >V   %+73276?#3M")ʴF0j/5.06  
    #367632#"&$6'&"27tzt/><N>@:bbNd,((AB,()@_s^8Z[[Z6A@@AA@@     G   &'&#"3267#"'&7>32-.02qJL,22q2h54l;ML511`@??@_YY	
    MK  ,  3276#"67&'&7>32&'&#"632#"3#0\R@S
` M43/.+1/2qJK3H{3 * &;/Z	
`?@ss@bi     .  /  &'&#"32676'&7#"&767632''7'37 iFFV\[&@kjhgP
\@

=<mj||jD54PQPaWWWWe<83rQ>67     o 2  #"'&'7327676'&+732676'&#"767632K#$[\2445)33:_=;
	+(V]aI`(&K-53@?87/|>@Z))<a33`
 31U2'$^,,O4H     44   #"3###73767634o>kuknn	@AwU:8P#P,i/0 F   7333#+73276?rjtjnn?=r,BP#Px66XU   N  ,  7#"3276#"'&'73276?#"&76763c-]@@((]^@@k__=640.003rCC
/=>N|a`>=pp=>>=۠NO	e45k37XX  x   3327673##"&xJtIN^AAEttA6><Jyd{Y,-65\cO9    &    7333##73#&r7t7gg2t2xtt\\j     iR   ;#"'&7+NC,r()NpUW66w     7!#3!73tMjVjoV\\E\\       7!#3#3!737#737tMj%jjjooo%\\\\\\ Z     3#"76;33#7#"3276ttܿzytyry(>
rKNB,|ssW?#5$   :Z   3;#"'&7KtC,r()SVX66x Z   +73276?#33=?r,B!ttax66XSg    3W   3!!j_     N 6  >32+73276767676'&#"#6'&#"#3676329Ro-/L=>rB.	JZ>?EtIKY>>Euzu2==ML//EBED~zx66XV0=-Z,,56\w[,+56\sa9"#    )  #"'&73327673327673##"&C9BDRn./IuIIZ?>EtIKY>@EttA3<>LM^E"!EE~{[+,55\c[+,65[cQ:F        +732767367632#6'&#"|r,B|t5=>Jz12JtI N^@@xlXV~a8BDwY,-56\   N !  6'&#"#367632;#"'&7rN^@@Euzu4=?Jy21LB,r(*Y,-56\sa8BDzVX66x   3 	  33##b{|b{~    G      2#"'&7676"!6'!3276˗FEghDFhfB:$w)^]C/WWWXXWWWW@9\[8E-AA.     F  & .  #7!#3!737&'&7676767676'&m8EgSs^k6FhQqb[8.C)[7+D,*\\FWWG\\FWWE[*,ApoA-9*A@+      <  .#"#"/;#"'&?32676'&/&'&7>32,f8W/0	Y'v,+WX9=Br(*:<;=Rb	h(g'(@78b/$+*MW33	VX66x"j2-***IX`   }6   676;#"+73276:C@A<zno>|r,B]Me30U:JxlX    V   3#;+7326?#"'&7#737Q"B(Hw?=r,B:*+BUU"PM,ax66X6V-,vTP    T  !  733!33##7#"&?)3276Tn6t6g6t6uu1t6=<JydN^@:\\`9Y,-6/     I &  7!327676'&'7!# '&76767tM35,.Z[AC 8<jiIJ--V\{':?KY7667YR8>#{\8?>LRRQRR<=:     g   2673#"'&73VQXLuMPR88MuL8PZs{>??>{}ZP   i   3+"'&73?27676'&'&=ij,r()NtNA ZCA%4+8?>LRR66wpU67YQ8C    ##3{v{s   	  !!!7!'\^=R^        !!#;#"'&?!7!'C,r)(>\^=RVX66x^     ^    #67#7!7!3632#73276#E`\'nFm
,7!!^R^=jR3     "  2#"'&'7327676'&+7!7!wCJ:*(mn;==?/=<ExFG22hnF\& =;M|CD
m**PJ*)]R^  G     !327676'&"2#"&76Lo %^]G>1%G:@?Rmn~Rmm*MWXMmGYXFovw^wwwv bf   !'!73    :f   	3!qɋx  :f   	#'!'7f  |f   !!#/U逋f     f 	  3#'#3䔬fx  7 f 	  73#'#>fx  '  $   T`{'  D   7   N's %   JR& E  > 7 & %     J& E     7 & %  E   J& E  +   Vul'-v    ^uJf&    v     7  P'u '   ^d'u G   7'[   '   ^'   G   7'[   '   ^' G   7u& '   z'    Zu& G   z    7'   '   E'  G   7  
Z& (      ^& H    7  
Z& (      ^& H    7K
& (  6 7 ^K{& H  ] 7 7u
& (      ^u{& H      7u
m'u& (   z    ^u=& H  '  z    7  O'vt )     'u I   \2& *  U< BV& J  I    7  O'(t +   H  'u K   7& +  z   H'   K   7  N& +   j> H  N& K   j >^u& +   z  bu& K   z   79& +     H9& K  6  u%& ,  u  u/'R   L   7  Z& ,  _   H  &   J 7  l'v .   H  l'Zv N   7& .  .   H& N     7& .    H& N  h   7& /    /'   O   7k'  & /  *uJ1&=   qZ; 7& /  k  D/' O   7'& /  /'& O   7  l'sv 0   H  ?f& P   v?   7  O't 0   H  ?'y   P   7& 0     H?{'x   P   7  N's 1   H  '   Q   7& 1  v   H{'   Q   7& 1    H{& Q  K   7'{& 1   H{'2& Q   RZ& 2  \   ^& R    RX& 2     ^& R    RZ& 2  J   ^& R    R\& 2  P  ^& R    7  l'v 3  Vf& S   v2    7  O't 3  V'_   S   7  O't 5   H  'm   U   7& 5    {'   U   71' q };`  &a   q   7& 5   B{& U   O't 6    '   V   & 6      {& V     /l'Zv'
t 6   "f' v   &V V     FW& 6  D   & V    O'th    '  i   X  hO'rt 7     b'u W   Xh& 7     b& W  p   Xh& 7  0   &b&  W     /h'& 7  b'& W   w& 8  c   u`& X     vu& 8      :u`& X      wK& 8  d 7 uK`& X   7 wZ& 8      u& X    w4& 8     u& X   u   }' F 9     7& Y  '    & 9    `& Y       )r& :  |   k' C   Z     )r& :  |   m' vi  Z     )N' j> :     ' j(   Z     )N's :     '   Z   )& :  .   `& Z      O't ;    '   [    N& ;   j >  & [   jz      hO'ot <  V'   \    m'u =    Xf& ]  U   & =    X`& ]    & =  [  X`& ]     H& K  N     bM& W   j_=   & Z    V& \  1    T8'   D     'uA        !#'7#737>;#"7g58$Ͻd-.M7hjN()gti    :     !##737#73676;#"3#(Uhd-$EFV( D  !t 7  &#"#>32"#"'732676.76$h[@kkTG˱ac		6ayuY( Ӵ(`ob
<S^]Q9Z@hoϋ\(Ž}_-C-->T\_EFvX5P3) $2BgC    MuI  '   $   T`{& D      'u $   Tp{'T   D    )9& $      T& D   i  9& $      T`& D   i  /[& $      T& D   b  !Y& $      T& D   bm'      T`f'       1Z& $      T& D     Z& $      Tv& D     & $      Tk)& D   z  6Y& $      T& D   i'      T'      7
& (     ^{& H     7  
'u (   ^{'   H   7  
^'u (   ^7&  H     7  9& (      ^& H    7  
9& (      ^& H    7  [& (      ^& H    7  Y& (      ^& H    7
m&      ^f&      7  't ,   H  {'     %& ,    /& L     R& 2     ^{& R     R''u 2   ^{'}   R   R9& 2  I   ^& R    R9& 2  M   ^& R    R[& 2  I   ^& R    RY& 2  D   ^& R    Rm&      ^f&      Fk''ub   cBf& v c     Fk''ub   cBf& CF c     F'sb   cB{'  c   F^''ub   cB7&6 c     F&b     cB&c     w& 8  U   u`& X     w'u 8   u{'}   X   rk'uq   wf& v r     rk'uq   wf& C r     r&q  u w{&r  }   r^'uq   w7& r     r&q  U   w'  r     hr'r| <  Vk& \   C   h& <    V`'   \     h'r| <  V'`  \     h^'ru <  V7&  \      8   	  333!!Z!+ժ     *  -   33733#####73X}}   q)a&	p F     q)a&	H F     q)f'	   F   q)f'	   F   q)f'	   F   q,f'	   F   q)m&	v F     q)m&	D F      a'	#  '    a'	  '   i  xf'	|  '       xf&	̈ '   A  f'	S  '        f'	o  '       m'	Q  '1    dm'	N  'x  Oa&	D J     Oa&	9 J     ODf&	  J     OBf&	% J     Of&	O J     Of&	R J     k  a'	  +        a'	  +      i  f'	|  +       f&	̈ +   k  ,f'	S  +"       hf'	o  +^     tVa'	   L   tVa'	   L   tVf'	   L   tVf&	p L     tVf'	   L   tV:f'	   L   tVm'	   L   tVm'	   L   k  {a'	  -        xa'	  -      i  yf'	|  -       f&	̈ -   k   f'	S  -3       1f'	o  -d       Am'	Q  -t       \m'	N  -       Ba'	  N     ;a'	  N     Kf'	'  N   U  Yf'	<  N   i  f'	Q  N   m  f'	=  N     rm'	  N     mm'	  N   k  a'	  /        a'	  /      i  f'	|  /       f&	̈ /   k  Yf'	S  /4       f'	o  /p       m'	Q  /       m'	N  /     ^a&	x T     ^a&	n T     ^f&	e T     ^f&	T T     ^f'	   T   ^f'	   T   ka'	  5#  wa'	  5}  ipf'	|  5v     zf&	̈ 5   k0f'	S  56     qf'	o  5w     x  Ca&	= Z     x  Ca&	 Z     x  Kf&	' Z     x  Cf&	! Z     x  f&	` Z     x  f&	W Z     x  m&	8 Z     x  um&	 Z       a'	  :b       f&	̈ :     f'	o  :6       m'	N  :L     +a'	^  ^   +a'	T  ^   +f'	Y  ^   +f'	^  ^   +f'	  ^   +f'	  ^   +m'	c  ^   +m'	^  ^   	  a'	  >N  ]  ja'	  >      i  bf'	|  >       nf&	̈ >   k  <f'	S  >t       rf'	o  >       
m'	Q  >B       Im'	N  >     q)f&	t F     q)fA   Of&	T J     O}fB   tVf'	   L   tVfC   h  f'	  N     sfD   ^f&	{ T     ^fa   x  Cf&	0 Z     x  Ofb   +f'	M  ^   +fc   qV)a&H 	     qV)a&H 	     qV)f&H 	     qV)f&H 	     qV)f&H 	     qV,f&H 	     qV)m&H 	     qV)m&H 		    Va'	   	
  Va'	   	   iVxf'	F  	   Vxf'	F  	   AVf'	h  	   Vf'	  	  Vm'	   	   Vdm'	2  	   OVa'8  	   OVa'8  	   OVf'8  	    OVf'8  	!   OVf'8  	"   OV:f'8  	#   OVm'8  	$   OVm'8  	%   kV{a'	  	&   Vxa'	  	'   iVyf'	  	(   Vf'	  	)   kV f'	#  	*   V1f'	T  	+   VAm'	d  	,   V\m'	  	-   V+a'Y  	V   V+a'Y  	W   V+f'Y  	X   V+f'Y  	Y   V+f'Y  	Z   V+f'Y  	[   V+m'Y  	\   V+m'Y  	]   	Va'	\  	^   ]Vja'	  	_   iVbf'	  	`   Vnf'	  	a   kV<f'	  	b   Vrf'	  	c   V
m'	P  	d   VIm'	  	e   q)H&z F     q)& qy F     qV)f&H 	f     qV)y&H F     qV)f&H A     q)7&	n F     qV)7&H 	      m'u'    1' q ;'    .f'	R  'B   f  V'	   '  -a	  V   -a   #77#734g   P7  yF]m'F j   OVf'8  	j   OV{'8  L   OVf'8  C   tV7'	   L   OV7'8  	     lf'	R  +b     x  f      ;f'	R  -n       f!   7V'	   -   $f'		  	    of&	B 	.  ]m'F	     2H'$  N     ' q  N      '	.  N     &   ~  I7'	.  N     m'	0  N   7  &m'.u/   7   1' q0;/     f'	R  /q     ~  Ef"  f'	  	    0f&	_ 	  ]m'F	   x  CH&' Z     x  C& q$ Z     x  C&	 Z     x  E   !Va'	   V   !Va'	   V   x  C7&	' Z     x  wm&	 Z       hm'vu:     h1' q ;:     Hf'	R  :     r  Zf$     wa'	  7     yF'	 1l j  yFl  f C   V+f'Y  	r   V+`'Y  ^   V+f'Y  c   +7'	O  ^   V+7'Y  	   5f'	R  5;     Yf#     f'	R  >D     l  f%  V'	  >  -f v   !0a   73#7""͔g  \  ?@	c  991 0KTX  @   878Y@__oo ]!!}   \	    Vy  @o  991 0!!rOy  Vy  @o  991 0!!r8y  Vy  @
o  991 0!!r8y  y  @
o  991 0!!  y & _   _J  & B   B  B   T@   : bF 91 0KSX9Y"@**99IIYY]#73#၏?     V@  :b F 1 0KSX9Y"]@%%66FFVV]3#!ゐլ@     4@  :b H 1 0KSX9Y"73##ၐ@ RK   #7J"b$լ@  +   @1
	   : b	F 
 991 <20KSX99Y"@1


	

	
***	*
:::	:
III	I
YYY	Y
]#73#73#၏w#၏??   3   @.
	  :	b F
 
 91 <20KSX99Y"
]@1	
	
%%%	%
666	6
FFF	F
UUU	U
]3#%3##႐#၏լ@@    %    ]@.
	  :	b H
 
 91 <20KSX99Y"73#%3##ၐ#၏@@    K    #7!#7"f"m"f"խ??  V;  Y@.     :L
 F	
 99991 <20KSXY"3!!#!7!5Poٰp\]   ;  @I:L L
 F 

	.999991 2<220KSXY"%!#!7!!7!3!!!jRRnkoRRpjn\\    3!  	. 1 04632#"&3~|}}||}  3q   3         73#1    3     73#%3#11            v@:
	   : H

	  999991 /<<220KSXY"73#%3#%3#111  ki   3#1i     
   # / ; G K d@83W-WR'W9WBRI< QHVLHE0J*6
?
		
$
!0
?	E*
!	L991 2<<2220"&54324&#"326"&54324&#"3264&#"326"&5432#s织HMMo~PKkn躈HNMp~QKk\LMoQKk 纈.kjí]dij­\dkjí]dò  	 F   # / ; G S _ c  "&54324&#"326"&54324&#"326"&54324&#"3264&#"326"&5432#漆HLNn~PJl͉织HMMo~PKkn躈HNMp~QKk\LMoQKk 纈.kjí]dòkjí]dij­\dkjí]dò    `   3`u    `'
,  
   `'
X  &
  
,    `   #3W`u  `'
 ,  
    `@'
 ,  '
 X  
        #'#R     #  @ l 91 907%%}#R      #  @ l 91 90?7'd#^R    &   '  s' Y' Y   A    ' ^   O            $  #7>323#7>76'&!"an%igbki81

2T6CF	6#C98LVV/5<4BR-5^1Y7 | B  _        $7#"$'5O:<hh~vvuw~i   n   2&$ 56$6;2>nvv~hhgi~wu I   3	##bbc$$v  ='   {'  {       I_   !!V,_  m  _@   :Q V  1 0KSXY"]@)	 %8 6EY Vi ex uu  ]3#/   Q]   3!!#3Xb^#"#J       73#7!!73\X^Jݏޏ   ~& "  "f     & "   J      ' ^   "      ] 
  327#%!v](    n;    ###!WuE"=2΋KՌSkKW    !    3+"&54767w|WU|!}|VT  !    #;#zw|UW|PTV|} =k   {    L#  	  %#73#73gg/R?'  n&
+  
*     ='        B'    '     %H    d1   #"'&'&'&#"5>32326撔
錄ܔ撰錂1OD;>MSOE<>L      / / 
  + 
01&$#"56$32>;ighh~vvuw H    #'%!7!'73%!!ED[*aʇDD*[aɇ)`rrbqr   2/     737373&&&&@''  `H'
X  '
  &
  
,   t       73!737373t&&X&&Z''-''p     <        7373737373''z''-''''E''p   i  ^    3#3#11'   j5      3#%3#3#3#22~11i      s       %73737373#!7!3!D''-''''E''3f fe   y PA>     3#3#3#n1ӓ1ӓ1>  l Lw      3#3#3#3#11Ӫ21  W     "27676/2#"&7>KCC""#!CC""#u))ա))VVVVVVV   %C    3#3#tztttg   T   @*A	A	
A		: 	V
 		99991 <290KSXY"KTKT[KT[K
T[KT[KT[KT[X  @   878Y@) +/--//6Fy ]KTKT[KT[KT[X     878Y	!33##7!7Zw7Rj%%`bam        !!67632#"&'732>&#"y(OOoo<z?4;<Eo"oo4l:_	MLKJqff    \  /  "327676'&&'&#"67632#"&767632X==))XW==))-001SS'/>?DFEgf)'110m45[Z4554Z[54bg
KL1LMONuv	  '   !#!i	30   5   * :   "327>'%&'&7> #"'&76767327676'&#">=Y]\?=-Q$&GF79VV-*bbII@AS(&UQ97((SS76*,+KLV,++]12Hdt::dJ01:7PyAAAAyN98?&%%$A?&%%$     C  .  732767#"&767632#"'&2676'&#"C-000SQ(,A>EfgBB)'110Xz))XU?>*)g
KK/MNoouv	rh\Z4554Z\44     k   !!#!5!Q_i_k_8_8     3   !!'3_    a    !!!!''^_    q   #&'&6767m2!;eE0HFy~       3#676'&eE1FHyemBC2~~~    6   #6&#"#3>32ItI=N^Etzt5|IzcwYYk\sa88    WT
V  d     C {  d   J  T t  d   !T u  d   T  C
X  d   C
Y  d   \T
Z  d     'C
[  d   5 T
\  d   CT
]  d     
^  d   8
_  d    	
`  d   qif
a  d   if
b  d   4  d   F  d   G  d   8  Qs  d   B  d      gr  d      g  d      >g  d   7    d   6  
c  d     d   =    d   ?  %  d    v   #  #" 32.#"3267!!!!!!YciaeC>bVbZfAN:/667756GFDFG
k  V9 , 6 <  073&'3267#"'#7&'#7&'&476$;73&'*'3L""%37 }n+kn%"'1*9Y
	ohn!cvT79:/1(1r9(YY34@W}

XI
FRlzd	  V 2  %6767#  476$32.#"3>32.#"RNun+lophouZ%XrU79`M<_0;!x
,Y348XGGa^lzkVeX]ɨ  A  A   !!!!3###7X!qVP!;33=Hϔ   1   #  !!73#737#737$32.#"!!!MG!3!G	4FE#=@)~m.(*   MB4 ,  #6'&#"#3676323632#6&#"#:&*wef {ڹ"RcayzI/Īfx+ Tuef {8xGM_a`f21>&>E3\__         " & )  ''#!333#3#!###737#73377((%ikkkikk((4&{{&&{{{   7	  ? X  32654&#!##!233!632.#"#"'&'#"&5467);732654/.54l}q"mu#t>=p	~[T#IV;{Yb'+wwMU+eZ?/ϰit^վ>/J((cUc53pa
7!`".@:M46tY`;%y^    :<  E  326&##.+#! 32676&/.76$32.#"#"'&g3{u-xxz" *=_%8X[^aV={fF"FZS<Z]+/b؍$~3YQKP%$((TT@I!*   X  8  " & ) - 1  '#73'3!73!733#3#####7	!7	3'!!7]:
V
VW9]4zq,v2$&4$&4}L4uuguuguuuu     %2#6&#!#)"33!3/CVP7hñeDUO7hH9V*$oN  ^&   k    + @>Ze tZ)%#	)VQ,,%$# 
	& $ ,9999999991 <2220@ooooooooo o!
].#"!!!!3267#" #73>7#73 32!S`G57w	mf'^a
78a@gbe^{2f7{V`34${7g1{G    &  u   33!!###7|{X!댽Tws1s       !7!!%%#'%7'FP!!5:;qV8^8o؈onوn    `9	l  3 l    '67>32#"'&'"32676767654'&'&67'>7632#"'.'&/#"'&547>32	32676767654'&'&&#"32.@RAaJp
CE\gW78*YWE	>$CY0$(+|JIB73Z2vGOPeK>,1Y8_\u?2iI1"#H/45lO<4-+fm!/& -9)ЗiRm:37N/6wdg7? 2j7#=6$ 629&%(2M
!:5S}$@{mb3JMq~Es/4	
-&

"TA3E]|@8nRkc>;%#aC"      1 A  '632327&54767632#72767654'#"'&#"%67654'&#"xp{1C"0D
"aktO-,w& iURmq6$53ZY"	24."`NkB04X``7a0<㫃%&qJ<Na~hFl*!#??0W!}    7  =   ) 0  !3276%!6=7#73!23#3#!###7%!&'&#!!\%*ut8kQu[[]&]u˶kX?qX#Y%+	YYZ _HyZ.+ZvQZ%:   B[
x & 1  #7&'&54776?3&'&'6767#7!'GiSGЩhZiQ*MaYkNCK@Nx "|sovid;/:nnͦ$F_0,?'S*% ldYl   ~       7!3!!3##!##7373!/3F0P0PEqk+R{{{{{A     N 6  6767!7!67676&#"7>323!!!3267# &767#7NX4D_~'yi&%yES<r(j*J,{	+kv67&&UB{\*{;^~FE/0K?{   ! ,  &'&#2767#&'&776?3)GLKff]]o)gc_\4d5]=?,e+\RV_P0-
W6i----iH$"u9Bt"#BuflC     L      !!!!#!!!ժx	    r  @ (  7!!!##&'&+73767!7!&'&#OO=5OMT=/-(~u.:<x WPO!9Z{{Jw{~U]$HDh01D=s{C4X       !#'%7'%3%%2 K"i9^6^^B;:eV:~n؉noوo.       !2+!!##737#7;2676&+++!* 44 ! }⦦     	3!~ d  $   !7!'3#Gf~d =z   !#'73!?f~~͛ 3z   7!'3#73f~~d͛    F     3#%3#%3#S')'  ZF      3#%3#%3#%3#'))'    =z   !#'73!'3#f~~<f~~͛     #   + / O  #74#"&546;7>54&#"7>32#"32673#.#"3267#"&5467>32Oafw׫]Y@u"\ImE?e^&Pg7=m%=Ddh5yq$JE`_Cj=zA9Pn:?!6#DpQU;>d:"+'>[jb 8[?B     # # D O S    '&#" '73276&/.?6#74#"&546;7>54&#"7>32#"32673#Im"f5g-l$t	4z.`Pafw׫]Y@u"\ImE?em2:k'/
"{o|:Nm/1 ujt^9Pn:?!6#DpQU;>  s'  !  .#"3267#   !2'Y藣yyYjzS#bvAZ4-4ZBuHHghG[!!   ' &F   r      ,  +  ,/ -/ ܸ  ܸ , (и (/ A   &  6  F  V  f  v              ]A     ]   	и  и  и   #  
/ ! " + !0153&'&'6767!!5&'&76I3cc3I86QLNN7887NNMR48_ki:rq;zn#++$* rn     .d  # 5 D  .#"3267#"&5467>32%3#%"&5467>3232654&#"S&Pg7=l%>Ddh5zq%JF``Bj>y<1N{<1LST}VQFn-"%:!*'?[jb!8Z@AKä^ChffDielmcfaBF5   .  # =  .#"3267#"&5467>32%3#332673#76#"&546S&Pg7=l%>Ddh5zq%JF``Cj>yfg@=c_bz:!*'>Zkb!8[?AJ$399y:UsE   iR  #       T& r   )    I o  !6767632#"'&#"32767#"'&'&547!#"'&54632327676"#"'&'&54767632l(9BKc{=&%%03!((!,739%7`lG;725]hB4,'5	'B[QF$%]c'G			%!	}Kr~,1ьIg)*!&!(D;w},75;!_']7:y}[Ϟ\@4>#,!,'QF j(JG4$$,*)/9yK#%     P  73276767654'&'&#"&'&"'632654'&'&54767767#"'&'672 #"*i(X%#1FSE/O.55FuPU[QF[00rl~"KI}!;IFs;n;_T^͌Q79}w^l.Gyr\[4O9%#i#^MX;yv@c}e.ID\7I;>2V秉uӰ           3!3%!!!!!!nnqdx+%  H   K    Z     3%632##"#'7-P4-> {|a\=BcL   ;t 9  #"'&5476323276765"#"'&54767632thn<7#;KQ>!|Za,4(XM!},<7D9#7.M=.1?@	'(MXI('     jF ! 2  ?632327654'&54?#"'&#"632327#"&#"jou9!ydG>PPPP5ʺ68^nm{z}}ȋo֏zZ'PVaK~pmdykb^OP681/::b:    Dn J  327654'7#"'&'$#5"'47676766767632#"'&'&'&#"32nZS<gVB	,nyy4fXRD755I1%07#!@crGB),)39K.#$&7B>_n0VBRny#HB?X!$9BMw>7l.;7%,;(ӧuy,D0     &  3273#"'#67&5477632654#0)W:K<FLF?KlP
uhH{}H9masf59nNU;uQN]\&EW  -  '  3373!!>32 #"&'####73 &  [OAN{g{' OzOz$}daad}j          %#	!3!# dX0ddq+         -   2"'&5472764#"!!!!"!!7275$~[5$~^2'=O2'<6W!]6!_@>І``@>І`4R4Q{k@4k      " -   !   ! !   !  '32654&#%!2+#JR12)uyӲckkc?L00ey	wXQPXd     n;C 0 <  67632#"'67327654'&#"#"'&57&547276545[ۄFIyeL	)qz]E& JEYq:?.蔁0.A ƂMkeLPק<+(h|H=y|n=B{u.F/4_N     T      33!27&#%!2+!67654'&,d.@nX<-]\,qjdZ)VV)  s   ! )  %#'#   !  % 7& 676'&B
3y;:x+lllli$  #ab[2222jT%%5$c$    B2  _  327654'&'&'#"'&5476323276765""'&5476!6?232767#"'&B=]iS\ZV30Fn7;#FfS9!!<	#5,h";<2XngZR{,##9>;K!QIag£S	D5@7*'S:y}*7H0	5#!,Il@3Xnh0{(2r:=O   Sl I X  &54'&#"#"'&527654'&#"3"'&547632763227767654'&#"R(O*\xggfg-.@@?@@?\QA@@@S6fggfeӻp/$~AB}:1$ -*MJJ@f[+8vuuvzVWWWXWWVVW\uvuuu# bW1W{|^1$h{vC[SK\GChfy 
/    2 	  & . 2  &'&+3!.+!! !27&#676'&%3LDEx-Me5q>HJxn u1EA+ZY*01/O~hbb)j)V>U)-          / !/   и / ܸ  и ! ܸ A     ]A   )  9  I  Y  i  y              ] 	и 	/   9  / / /    +    + 0132654&#+#!273	##s sNCI/ϒ_6۬kk    %\  $ + .  3&##&'&''7#!27%767676#g*:\=/-(~u-;/S	fh^"YARj*V<W.Ԏ/HDh0&	,ok؍]-Dbg   ( ' 4  .#"#"&'532654&/.54632733###UW'AG/E8pi4sG[d/EK7?8pc|3iиY"*/( 	VAO[`*,2,*
	M=H\T(l    B  `     !!#!!!!!!!3!![pto9*EƆ` `fffe  'F   >@!
	 F	4	454591 <<2<<903#######5Jq7rqr  /B^^     "   	%73#'3{BQMgMoF+,     \      %#!!!5!8kO8dqddd  L    676&#!7!7!7!!2!"'8(!<	=$  |;ŧc̆eeaԊfJ  >   Vbs    D U  767654'&#"#"'&5733272632632!"'4'&'&#"'6763232767654'&'&#"_}yj#1Q\$####,TGG\<lG2e$sa#0EKXQ<M@uJ&'!gl]	yj.#.#!<#!;GBw,<$=,##wUtKyyV?@!j.     (`   36'&+732lYo??)Ց.0`b6    7   .    m     \  . 2 ? R  2)7276765"#"'&5476%7227654'&'&#2767654'&'&#"q__ys;9M!,&q	Ƒ0IgKqSF*el\lh0XV.TMvKI.XTa^}u;IM=,3!#Vt'I@3HlhJ3pRuF*(0XrV,n    7 =  6%7&''67654'&7"-$'&'&5476KG/(ih;u)FsZI#.!}Iike].0^5#lrw(!.D$"9BG32K%Fn#I#t3tR]&9K(V\ѽ    }Y-  )  % 7673 $54$32!"53!25&'&#"C]JjMo_zggJF__DM3TT<`xGZAEIpP3RQ4O    VaD  %  327673 '&5476 3 7654#"$,";t9f(hdoN1Rkpㆺ9A&"^>n#?QY>kDM4ceB|    E  #"'&'&5476?&'&547632#"'&547654'&#"3"32767'_ilE_ml=Oc{T3-2")%+fa@aP/Z_|{w:maZu>IhA"%@_l$=PczS2VN-2!$+%$+@e}N069na[u>_   T M  #"'&'!#!"'&547632327676=!7!&#"#"'&5476!27327#X':'7?<=**M_4.B^l{>!'Ba>nG#&#w4$B00!K=DcK_4B(03B{>ceDInFT=I,Fw7K.	0   7   	  )7!!7!3!V!Pɪ     9B k  32767"'&'&47'&'&'#"'&547632326765&#"6767632377632#"'&'&'&#",5(.'*'E`97y{7a;f7;>F3.^PeMD*#7@,j!HhH<=.%_yipp3T}B',$*5܀/,,@!;Da97TVM;nwF^O?/,%!;>jytX<;}f?E'_nH''#	.   hJ)    4&#"322#"&54WOmVPmݢt}t{أأ     g 4  	4'+5654/&4?'&547	'&5474/c2>Bd=VE/b5c2ltc2c2uc1LS2?Bd,>8?]/c6c1LS2tc1LS2c1LS2 9 0  3#!".54?>3!4'.#!".54>323!2O,""$%@;5H*Y[#$"x21[G(  W   A ,  !2#"&/#!"54?>3!!"&5462TPl0%=
-d,mF"$mG-.7#*(/
$"Sae(!q~B;   V &  !"&54>323!2#"&'&5
 mG*
5G0%9
.q~( 0(/
&Js!S'DQI    F      4632#"&3!53#5!pQOooOQpoTQooQOonuyy5y  Z; 	     !   !  !   ! )VzVW0===bJeH
!#y;:x  )  	` 	      !!!!#3#'!#	!33##ADh)Ejjև2j`C5DT,y   $z`  - 1  %5"'&'&5#2327#"'&5#!#"#463!#3#,	9Yl(Ht*=Z2dr!Z4@'!8֦zEB
bLs{dY   sZ{    3#"#4763 3׮UEEl4FũdGQnCF\xB*WbOZ=      0  	  3%!!,:*nqdd          3!3!!!!
nn8qq  wS    	!	!	!!5	5Y*dccS  a #  !!6$3  #"$'73267654&#"NL:=ku)Z_Q]jyIO_WUGG^cyl%-    x  ;   !#!7! )!-          	!7!_!++   {  b   !#	#3bʉf9    W  J    "    )327&#!3676654'&|tK"P"coAfյ|cv~dAAxPfUm  Z 
  # 2  !7#"5476 32!3	32767654'&#"* 6B8wx!Nbb|˞"#>|OO'vN	2wx87tKsO=  =d01PD10d^dTd6Jthi     [{ 
 ( 2  32767# '&5477632!7!654'&#"N&#G_yZ\klmk}Z5fF
9NJC0<7h:J(u*oDMcFPZd82vRs  O       3#3#!!ɸ.Ԇ$N9` V     3##676#732767!ɸ.fʆ#5H2K1i0/N)deеT0Hd01``     v & 0  	#673>32#"&'732676&7>76&#"iLj&vrz*$SN$NDi
'Zkt_V@Yr~YW׀c?}<$$/1oX3gQX?@      ` 	  !7!!7!GY`o    '
[d& {  
/5   t'
]d& {  
/5   
'
Vd' {d& {  
/5   }& {  '
/5   ud J}& t  '
/5   ud j& {  '
/5  
Yd Jj& t  '
/5  
Yd !j& u  '
/5  
Yd Tj&
X  '
/5  
Yd & {  '
/5  
Zd &
Y  '
/5  
Zd & {  '
/5  
\d !& u  '
/5  
\d &
Y  '
/5  
\d &
[  '
/5  
\d & {  
/5   7  % ,   7  & ,   ,   7  M& ,  ' ,   ,(   7  & ,   9      9     *& 9   ,     & 9  ' ,   ,     
R& 9  ' ,  ' ,   ,-   7  |& ,   ;     ;    @& ;   ,    & ;  ' ,   ,   7   /   V &   7   '   7   0   H  / L   H  & L   Lp   H  & L  ' Lp   L   H  & L   Y     ` Y     s& Y   LD     & Y  ' LD   L     	S& Y  ' LD  ' L   L$   H  & L   [    ` [    & [   L[    & [  ' L[   L   H  / O   ^J{ F   ^ G   H  ?{ P    y  	~        )   !3  !##  !PKK"PPKK5V:;T;:5~ji.,w   7     #  3  !#3 #32676&#!   )E#5V:;#H )(:hNzPKK"PaY.,职~  y  	~   ( 1 C  3 +3  !32676&+!   )   #"37#  !37#"&76$!#H )(H#5V:;gNzNPKKtPKK"hNz#;:5#H() /ó.,	ji~ H   {    V   .#  !267##   !2*TԂ :9 xU}EFSb_^^_$ghG  W}&
V  ' ud
/5    d ?8 	 	 
2@	@@	00	]1@
	 `
 990@		 ` 	 <<@`<<KSX 	<<`		 `Y5!!dx=xUZxx      	 @
	 `
991 	 
2@	OO	??	]0@		 ` 	 <<@`<<KSX	<<`		 `Y3'#'-Zxxvx<x   u P8 	 	 
2@	OO	__	]1@
	 `
 990@		 ` 	 <<@`<<KSX 	<<`		 `Y'7!5!'7Pwx=xZwxx   	 @
	 `
991 	 
2@	@@	PP	]0@		 ` 	 <<@`<<KSX	<<`		 `Y#737Zvxxx<x    d P8  ڶ
	 22@PP_
_O
O]1 @
 	`9220@ `  <<@`<<@

	`		
<<@`<<KSX 
<<<<` ``

	`Y5!'7'7!dxxwxDxUZxxwZwxx      @
 	`9221 
	 22@__P
POO@
@]0@ `  <<@`<<@

	`		
<<@`<<KSX
<<<<` ``

	`Y3'7#7'-ZxxxZvxxvxCxvxx     4 	  7!!# ?,^xt?x^   4 	  #'!5`?x^?Jx^   4 	  %!5!73?Jx^s?^xJ    4 	  %'3!_?^xJ4?,^x   d ?8   '!5!!BȔxwxdȔ-UxZx[U  u P8   !'7'7!'!5rȔxwxȔf[UxwZwxU  , P 4  327>76767632&'&'&#"#"'&/#7!#/)85,0F"<;NJX[GR7<"#!2)85,/$#?2WG[XJN;?,!F0O<:"  %7<OA0#!$#0IB5'  ":,?     P 4  7%5!##"'&'&'&'&'&#"'67676323276Ǡ,?;NJX[GW2?#$/,58)2!#"<7RG[XJN;<"F0,58)/?J:"  '5BI0#$!#0AO<7%  ":<O0F    d ?8   3!!#dxaxxxwxaxxax        	''#'5'xbxx`xvxxxbx   u P8   	'7#'7!5!'73'7PwxxxaxUwxxxxw     757377/vxxxxxxbxxxv    d ?8   5!	!dxax>xxUZxaxxax     u P8   	'7!'	7!'7Pwxx>xaxUwxx>>xxw     d ?8   !5!3#xwx-xZxY       %'3'!!5xZxZxvx檪    u P8   #3!'7'7xwx-\xwZwx     !5!!7#7\xxZxx+xvx       7!!5!7'3'xxxxxZxxvxxvx     d > %  52#!5! 767>54&'&'&>42/+-+-':1 Hxwxܪ-)o=<j.(xZx

1.

    v P )  "3!'7'7!"'&'&'&547676763


xwxiA1:'-+/24>



xwZwx(.46<=69)-     d >  >  3276767654'&'&'&"5476767632+#5!5



6
+/24>A1:'-+/24>xwx





=69)-(.46=<69)-xZx     v P  >  54'&'&'&"3)'7'7!#5#"'&'&'&5476767632#
6



+lxwx>42/+-':1A>42/+ׂ





xwZwx-)96<=64.(-)96=    d P8 X  #532267676767632267676;'7'7#""'&'&'&'&'&""'&'&'&
xwx
0$#$


 "%'-0$' !


' '-
xwx

('Z&("


	"(&Z'(
-xZx$

-#%"&*

'xwZwx
""&*

	*&""
   d PF   %'!5!!'7'7!pxwxpdxwx^:5xZxo:xwZwx *   	%'7	!^b9YXxb  Z  	   #!5	xwxoxZx     [   !'7'7!#xwxxwZwx   Z	   !5!3	ixwxDxZx   [   3!'7'7xwxDxwZwx      7#7!5xwZwx=xwx    d ?   !5!3?=xwx-xZx,    -eX &  7#754767676 #4&'&'&"9xxZvx.-\Znl lnZ\-.BB<VJNR@@#!xvx2pk_V1..1V_kp]B;'!!#?@SQ]     OX &  54'&'&'&"#4767676 7#7{!#@@RNJV<BB.-\Znl lnZ\-.xvZxx2]QS@?#!!';B]pk_V1..1V_kp2xvx   4M    5!7!!#o?,^xrcc?x^  pDc    5!'73#'7!#3!pxvxxvxxxNPxxXxx     p 6  2767>54'&/#7!!#"'&'&'&54767D !BB<VJNR@BB!"B#@,#Z/..0YTtglpXY0..-\+BQQ]ZB;'!!#?BZ]QQB#,@#Zpp|pqYS4..0WYqp|pk_   p 6  7#"'&'&'&5476?!5!#2767>54'&x\-..0YXplgtTY0../Z#,@#B"!BB@RNJV<BB! +x_kp|pqYW0..4SYqp|ppZ#@J#BQQ]ZB?#!!';BZ]QQ  d-?8   5!dx-x  d ?   !!d=xwתx         3'#xvx<         #'x$x    u-P8   !5!'7P%x-xw    u P   '7!5Pwx=ׂwx         !37xx<xv      !#73vxx  dPd'%  ,#     w;'$  &,     dPd'#  ,%      d?d   5!!!!5cx==xw ZxתxZ   x  <   3'#'#'3ZZxتxZ vx<<x   vQd   '7!5!'7!5!'7R wx==xZwxתxwZ   x<   %#73737#Z Zxx֪xvZ x<<xv  d P'O   T  B   d P'S   P  B    d ?8    !!%!!'7!5!7!ii&yuI]xwx]4uIUiixK]xZx]Kx     d PC   !  %'7#5!73'7'7!!7')!>]xwx]TQ>]xwx]xLii`iiT4]xZx]4]xwZwx]Jiiii    u P8    !7'!7!5!7!'7'7!'7!5giiyYuI0]xwx]uIiixK]xwZwx]Kx     d ?8   !!5!!]xwx]7Qix]xZx]xi        #'3'#'x\xZx^xhP8^xvx^h    u P8   7'!5!'7'7!5$iiQ7]xwx]iix]xwZwx]x      737#73jhx^xvZxx\x%hh^xvx^8    d P8    !7'!!5!'7'iili\]xwx]]xwxiii]xZx]]xwZwx      7''3'7#7iii]xZx]]xwZwxliii{]xwx]\]xwx      	#7!##PU?,UvU,?UP     5#'#5!#5'U,?UvU?ԄU      4   	753!5373U?ԃUPqPU?U   4   33!'3ɕPU?UqPU?,U     d ?8   !!!!5!!c$R&xwxxxxZxx  u P8   !5!'!5!7'!5!Q$܊xwx&RFxxxwZwxx  d ?8   #''''#53777?(FncxwxFn-FnxZxFn   u P8   577773'7'7#'''unFxwxcnF-nFxwZwxnF        3'!!!!#!5!5!5!'-Zx((ت&&xvxTrx    #7!5!5!5!3!!!!7Zxx((&&xxrTx   d ?8 	    5!!5!35!dxqx  UZxxa      	    3'#'3#3#-ZxxbvxrxV     u P8 	    	'7!5!'7%!#'#5Pwxqx Uwxxw(     	    737533-vxxvxrxv4      k ?9   !#3?xvxתx~\x   u I9   !'73#'7!uxvxxvvx   7 ?~    	5!!	!!
d}*  ^  V    	3!	!!d}*p
d   H P~    !!	!!

 ^V    #!#	!!!d
en ^  V      !!	!3	3!!!E*dr*r$|
\d    ^  V 
   )3!	!3#!5#3	3ȃ\Pdx
  @  t     %#!5#3'!3!3!	!33'ȡdxd:tZdd\nt ^  V     %#!3!3!	!3!5#3ĹtIt\Px   ^  V     %3	3!!!	!!3	37r*kd
d|
    ^  V 
    %#!5#3	3!3!!	!!33	37ȃ:͊`
\h
     u }~ 
   7!!	!5#35!	u\Pdx
f:bȃ

   z  M    !#7!!#Mc"?,^xc?x^  z  M    35!3!5!73zpc?Jx^cr+a?^xJ    ^V 	   3	3#	'!	!!	!

e

dC   u P8 ) 5 A  	'7!"'&'&'&'#5367676762!'7$"!&'&'!27676Pwx
21@=:C.2

21@=:C.2
_x_R#)l$h$#R#$Uwx@21.2@@21.2@xw#    w;'&  $,      utP   '7!5!'7!5!'7!5!'7P wx===x UZwxתתxwZ   d ?D   5!3!!#!dx3xUZxmmx   u PD   	'7!#!5!3!'7Pwxͪ3xUwxmmxw   d PD   3!'7'7!#!5xwxwwxwxmxwZwxmxZx  d ?D   5!333!!###!dx⪪YxUZxmmmmx   u PD   	'7!###!5!333!'7PwxYxUwxmmmmxw   d PD   333!'7'7!###!5d xwxdxwxmmxwZwxmmxZx  7 ?@  	  	!JBJA  u }@  	  7'!5!	PJBł}BB  7 }@     7'!	!	6BBA}BB     h  
  %!3!3۠ՈR+     n     #&'&#"327673 	B!OO!B
ocI7͙7Ic   _L   0  "'&547632654'&#"563 3276767&#"\m`cu\6% GGnthr5?,/H@3H5,Y:$UeI+HQ\N,tqzSd69->eSY׮l          !5!!5!!5>+     5     !#7#53!5!!5!733!Kcd04+^^``k    ]  ( 6  73#"'&'#7&'&$32	'&#"	32$767&'&YjiEd80~i?/c`RQQ$g'-"SRR:;nSz_'BTc_
N@DROg      `   @  91 /90	!3!^DC?    `    %!	!3f<?    I   !!"$54$3!!!W?JGcGK@	sJxNL``ȟMOx]  I  & /  !!!!3!!"''&'&54$;7#ؖI$$$GA?d`,,c?J;K@	7ʟ7c``JxNMOx]      g   % $54$)!!3!+*(FiNv%FrO:0Q     I   &'&'&'!5!2#!5!676767!5?JGcGK@	'JxNLȟMOx]  I  & /  '7!5!!5!&#!5!2+&'&'&'3676767 I^Q$$GA?d`,,#?J;K@	7ʟ7c;JxNHMOx]      g    )5%2767!5&'&!5(*FiNv%FtFgP:1R  ,      /  /01!!,     wq  @ 77 1 20!#!#
}   wq   3!3wJ}     w;  [@
 
 91 990@.UPQVPb`g`e`tppupx
Vpp]]!!	!!5	7AJI3!   -   ` 1 0!!ת         !#!5!3!!5!--+}ת       W   +   и  
и  и    /   +    +   и  	01!!#!5!3#-Ө-5 jBj    <%     / /01	#4%m        %73%%#'TUUTUTTU DG r   XY
%  =} 
 *@
	 
	 91 903##'%\sB} }`s-Pb;    =v ( 3  #"&'532654&+532654&#"5>32%3##'%\e9}F4wCmxolV^^ad_(fQI7ZsB} mR|yOFJLl?<:=svcE``s-Pb;   =e     	!33##5!53##'%P5bsB} ]my(`s-Pb;      1  27#"#"'&'&'#"'&547632676;#"3cd3668+MI6641C;ItY^^SI6?+((C;ItK@tkHMfpEF?$Tx5@ejre!93Ex5@     # / ;  &'#"'&54763267632#"'&%27#""327654'&1C;JsY^^TI6?+((C;JsY^^TI666cd3778s~d3778]$Tx5@ejre!93Ex5@ejreMHMfpEFHMfpEF   I   %!3!~,    I   %!3If   I   A  / /   +   к   9   9  к   901%&'&'3!!#4'!&'7`'JAW`LqR]+X*Pʋs^(Rs57756u       5   +   	/ /   	9   	9   	901	7&'7%%'6	676r{EG%y44RW!L!$Ҿ	&!L {  JP+   3#+    fJ+  7    +  и     / /   9 	  90137#'PMVo)gn   J+    3#3#@+  fJ+  { / /   и  / ܸ и  
ܸ ܸ 
 и  и     / / / /   9   9   9   9013737##'[P]ME+qd@oxpAn       !3#	ih^T         3	3##"T^      32#4&#"#P(*7      332653#"RP7*  uM   >2&#""&'7327~9GA~9G⧅}}    uM'%     uM 'J  '%      tM - 6 ?  676&'&'&'&'77&'&5476767654'&'SOJMG79GcBnnVsSOJMG79G]InoSu=,EG%,=,HK%GCD4K|oUFCD41IosV/HgjG$4.JhgH$    tM M Q Z c  676&'&!676&'&'&'&'77!'&'&'77&'&54767!!67654'&SOJMG79G~SOJMG79GcBnnVsSOJMG79GSOJMG79G]InoSu~=,HK%=,EG%GCD47GCD4K|oUFCD4$åFCD40IosV!.JhgH$+/HgjG$  tM m q u ~   676&'&!676&'&!676&'&'&'&'77!'&'&'77!'&'&'77&'&54767!)!67654'&SOJMG79G~SOJMG79G~SOJMG79GcBnnVsSOJMG79GSOJMG79GSOJMG79G]InoSu,~=,HK%2=,EG%GCD47GCD47GCD4K|oUFCD4$åFCD4$åFCD40IosV!.JhgH$+/HgjG$     tM. F  54'&'&'&''&'&'77#47676767676&'&7#'7"'&1,SOJMG79G+3$('f55C$'SOJMG79GE35^H6H802&&gFCD4$'a8LCD55_FCD4	25DCL]HH     tM   D   '&'>7'7'&'&'77&'&54767676&'&7=,HK%{C$,=Q	HVVsSOJMG79G]InoSuSOJMG79GcBc
HHJ.JhgH$M; +eHWZFCD41IosV<GCD4Ko|HHC  tM   E  &'6767'7&'&'&'77&'&54767676&'&'=,HK%8$,=(ASH#JVsSOJMG79G]InoSuSOJMG79GcBIHKJ.JhgH$ +2P@THBTZFCD41IosV<GCD4KR?HK|  y 'XG'XX   y 'X'XXG    t'XX   y 'X'X'XX   -j&  X$   j     3#3#!!	Xj18  j'X.$'X-W'X$'XW    j'X$'XW    2   #"'&'&'&#"5>32326ian
^Xbian^V2NE;=LTNE;=K  2   3276767632.#"#"&'gV^naibX^
nai2UK=;ENTL=;EN  1 )  .#"3".54>323265.#72#"&:QHRdhNi\dnx>@HRdhNi\dnx.ttlH=YOHL\}X[lH=YOHL\}   W   #"'"#322{dfftX{dfftX#*$    0   %#.5476767654&'30ND:<LTND:<Jh`n
^Xbjbn^V    l   &#"5>323267#"''cDXbia]yeEVgia`yS LTNE+~F KUNE,F          #"/&'&#"5>32326!!ian^Xbian^VeoNE;=LTNE;=K  `    #"/&'&#"5>32326!!ian^Xbian^VeOE;=LSNE;	=Kk      a $ %  767#"'!!'7!5!7&#"5>32^iaBP﹉lZXbian$}o"DX"OEd8LSNE;I         "  #"/&'&#"5>32326!!!!ian^Xbian^VeOE;=LSNE;?Kk˪        .  #"/&'&#"5>32326#5!7!5!7!!!!'ian^Xbian^VLoKɦoOE;=LSNE;?KL˪s˪s     C 3  3267#"'!!!!'7#5!7!5!7/&'&#"5>327b
	Vgia'+\+zlh>Tm?u^Xbian "KUOE˪Nt˪=LSNE;N    ; ?@.9* -"*`19`"``< -<<21 9999990#"'&'&'&#"5>32326#"'&'&'&#"5>32326ian
^Xbian^Vgian
^Xbian
^VoNE;=LTNE;=KڲOE;=LSNE;=K      4  3267#"'3267#"/'&#"5>327&#"5>29+Vgia@LJZVgia}9+Xbia@MHZXbi aKUOE8KUNE;	@^LTNE8LSNE;f@      5 9  #"/&'&#"5>32326#"/&'&#"5>32326!!ian^Xbian^Vgiaq^Xbian3VeLOE;=LSNE;?KҲOE;=LSNE;?K     y  5 P  #"/&'&#"5>32326#"/&'&#"5>32326#"/&'&#"5>32326ian^Xbian^Vgian^Xbian^Vgiaq^Xbian3VײOE;=LSNE;?KҲOE;=LSNE;?KҲOE;=LSNE;?K      "  32?632.#"#"&'!5!5gV^naibX^naiUK?;ENSL=;EOȪ     + 	    %5 % $%5$[g&Y%ZhӦ     6  9  %676767!!"'&'&'!5!!5!676762!!&'&'&[C-87VYYW68.CC.8d
6WYYV7
e8-,CE[<0[2332[39\DD+N+DD\93[2332[0<[EC,    `     !5!676762!!&'&'&!![C.8d
6WYYV7
e8-;++DD\93[2332[0<[EC,  `&    X  &    'XX  'X.&   X  'X*&   X 62'  V  'X X   63'X'X      ` 	   3654'!!5!&547!5!!4434w~0IG00GG2?8>;_8    `       !!!!"264&'2#"&546HdddeH;k'**z{DbFE``bq+((d:svv   `K     !!!! &!56 뗲    `     !!!!	3#$c'   `     !!!!33#$'c  `     !!!!!!'+]^*^]N䰰   `   
   !!!!!3!Np!NNf  `    0 7 G O  !!!!#"3###535463!3267#"&546324&#"'53#5#"&4632264&"?$mmC???DJB&H#$J'`qk[Q_C<17CBB@,I\\I,@<i==i7%$3`3D= DH>p`ctiF6A?9i=$#tu#gSSS    `   *  !!!!>32#4&#"#4&#"#3>32!]?U\Z79EPZ7:DPZZV:;S==:xoHOM]QHPL^P%U20=     `    ,  !!!!3#7#546?>54&#"5>324eeb_--B6'Z0/`4\o$-,N2A+,/-7#!^aO&E++
    '  >@"
 `
`	 <291 <2<<990!!!!!'7!5!7! }/H{};fըfӪ     L     !!!!!!ת  4   !5!7!!!!!!'7!5!7!5!DQ"rn遙RoLT˪˪T˪      	      !!!!!!!!K         
 T@.`` ` `: m`	 <2291 /90KSXY"	5	!!@po         
 V@/` ` ``: m`	 <<291 /90KSXY"55	!5AǪ   V  
   3!!	5	!!@po     V  
   !!555	!5BkǪ      !5!7!5!7!!!!'	5'`ȉ)P"_=6@ss1stFpo         !5!7!5!7!!!!'55'`ȉ)P"_=6ss1stF    .    	5	5:6:6pr
pr
   .    55556:86:      '  !67&'&54767&'676'&'{)#Y4JJ4Y#))#Y4JJ4Y#)AAAAGF㞢GGGG➣FG2;;;<<;2;       5$?$%5%67$'W	e Ĕd?N Ĕ])]o&
bR)`q%R   d    %'%5%>zmzF<˶@6 o@hGp      %5'75%7-孈m%˶C@ʴ@hGp  /V    !5!%5%%%!!'/xvH-rf5LOlUrC@=Vlь=   /V    %'!5!75%7%5!!'	GWb[mm NL>ߪwe=ت=      $  %#"'&'&'&#"5>32326	5jbn
^Xbh`n
^Vg@ND:<LTND:<J^po       $  #"'&'&'&#"5>3232655jbn
^Xbh`n
^VeNF<>LTNF<>L>  )P 1 4  %&#"5>32%5%%%3267#"'&'&/'kXbh`'+kuE%sk
^Vhjbn
"Pv1-LTND9ATj͊<JVND:<nW     /V 1 4  3267#"'&'&'&''75676?5%7%5%'u^06
^Vhjbn
G;hV86VbhZMS<a^>LTNF<=	&TN#wf=J;    N}    55	58@'po  N}    	5	55@'po    m`   !  -%5%%%'5%%5MM`ZDOA@FZDt@m*_TW&o}䎲w&-r~bU    m`   !  7/%5%%'%5%75%Jvad",,V`bL"_D2,/*/&O{¸[&}    P 
    %5$r	osaa^~ ||    P 
  5 5 %$so	a || ^a   )W    ! %5  %5$gV$}]]x|     )W    3 %5 5 %$Vg}$BW|]]    RW  (  %#"'&'&'&#"5>32326  %5$ian
^Xbian^Vg$}NE;=LTNE;=K$]]x|     RW  (  %#"'&'&'&#"5>323265 5 %$ian
^Xbian^Ve}$NE;=LTNE;=K$|]]       &%5$%67%'Et֋$k}uU)?eKtuu"	K
9'         '567$'567&'%=⃹t֋~}uRU)?Kuu,ަK9'      _   %!"'&54763!!"3!ʊ@^`@ƍ^`      _   75!27654&#!5!2#@`^@Ȋʣ`^ȋ   ; 	   #";3!!!!#" 54763^`0rrndflppꊊ^`&pphƍ     3 	   32654'&+#!5!!5!32 #^`0rrpp9^`phƍ           7!!!"'&54763!!"3!Ɋ@_`@,ƍ^`         7!!5!27654&#!5!2#@`_@Ȋɖ,`^ȋ   	 '  !";!!!!'7!5!7&'&54763!7!!ʉ_`'}E=aLT>scL0R^`5ƍ7   	 '  327654'&/!5!7+!!'7!5!7!5!^`__BV	5cTpX?bLm>U`^`C	7 Xȋ5    j     )5!7!!'!"'&54763!!"3!.Bqx-qxDɊ@_`@Z<Zhƍ^`    j     )5!7!!'5!27654&#!5!2#.Bqx-qx'@`_@ȊɖZ<Zh`^ȋ          332653#"757!!<tct<RP7*-<uUt<         332653#"3#|RP7*O         332653#"3##5#535eWP7*dd          !!!!Xɪ          !5!!5Xu7    V    !!!!!!Xɪ     V    !5!!5!5Xu7    e   #!#eȪX      e   33!3٪8X   $  3 ?   "2767>54&'&'$  &'&'&547676!!#!5!]\LMLLML\]]\LMLLML\bc1111cbbc1111cbdd''LMmjML''''LMjmML'dbcwvwvcbddbcvwvwcbee     $   7  !! "2767>54&'&'$  &'&'&547676r$]\LMLLML\]]\LMLLML\bc1111cbbc1111cbתa''LMmjML''''LMjmML'dbcwvwvcbddbcvwvwcb  $  3 ?   "2767>54&'&'$  &'&'&547676''7'77]\LMLLML\]]\LMLLML\bc1111cbbc1111cbxyx''LMmjML''''LMjmML'dbcwvwvcbddbcvwvwcbxyx     $   7  	 "2767>54&'&'$  &'&'&547676pxg]\LMLLML\]]\LMLLML\bc1111cbbc1111cbpx''LMmjML''''LMjmML'dbcwvwvcbddbcvwvwcb     $   7  3#"2767>54&'&'$  &'&'&547676]\LMLLML\]]\LMLLML\bc1111cbbc1111cb''LMmjML''''LMjmML'dbcwvwvcbddbcvwvwcb     $ 	  2 L  "264&'2#"&54>"2767>54&'&'$  &'&'&547676ZPnnnoO@v+..]\LMLLML\]]\LMLLML\bc1111cbbc1111cbAoPOmmp1.-rB''LMmjML''''LMjmML'dbcwvwvcbddbcvwvwcb  $  + E  %#'-73%"2767>54&'&'$  &'&'&547676C4f4C4/f/]\LMLLML\]]\LMLLML\bc1111cbbc1111cb1XSXYS''LMmjML''''LMjmML'dbcwvwvcbddbcvwvwcb  $   ! ;  !!!! "2767>54&'&'$  &'&'&547676]\LMLLML\]]\LMLLML\bc1111cbbc1111cbj''LMmjML''''LMjmML'dbcwvwvcbddbcvwvwcb  $  3 7   "2767>54&'&'$  &'&'&547676!!]\LMLLML\]]\LMLLML\bc1111cbbc1111cb8''LMmjML''''LMjmML'dbcwvwvcbddbcvwvwcb   $      ?3ް222	
 	ް2/3  ް222	ް201!%!!!!#!5!QX>ddYee     $    T 
 ?3ް2  ް2	/3ް2	
01!!!%!!rPX>ת\     $    C  ?3ް2/3ް201		'	7	%!%!!=kyykyjjX>xjyjjyk$  $     3#!%!!aX>    J  5   ?3/3,,// /3,,,,0133!!up    J  , 21 , 
?//0!#!5!3J       I   , /20, 
?//1!#!5Iss      I  /  ?3 ,,,,// /3,,01%3!!5<f     |  5   ?3/3,,// /3,,,,0133!!Nup    |  N   ?3
/3,	,ް2,,///3 ,,,,,,01!#3!!!!.NN$     J  N   ?3
/3,	,ް2,,///3 ,,,,,,01!#3!!!!.$     J   R   ?33	3/3,,//
//	/
3,, ް2,,,,01!3!!!#3Gup      J    o   ?33333	/
3,,///////3 ,, ް2,,ް2,,
,,01!#33!!!#3.GVfup       J   k   ?333/3,,
ް2,	,/////3 ,, ް2,,,,,,01!#3#3!!!!.cGGf$    J   33!!!'!'Ssj\s=u5Y6p   J    !!!!'!#3!7!sjshxj56$$    J    !!'!#3!#3s6s=5Y6pu     J     !#3!!!!!'!#37!s:jsjG$-56$     ] *  5$%67654&#"'632#"'732654'&'$@e=M>P7sZw㔰Zs7P>M=e.(Y7O0<0:>~jy[<<[yj~>:0<0O7Y  ] *  327#"&5476%$'&54632&#"ee=M>P7sZw㔰Zs7P>M=e@.(Y7O0<0:>~jy[<<[yj~>:0<0O7Y(        	51           	^ bb:  d   
  5!	5b   d   
  5!	^b bb:  yf % /  2#"'&'!#"&54632!676"264&j95/-)*xzQ3Q3Txzw:5/-)4S9OOsOP,)f<wQ3CB3Ryy,)3D5SP99OOqQ   yf % /  2#"'&'!#"&54632!676"264&j95/-)*xzQ3Q3Txzw:5/-)4Sx:OOsOP,)f<wQ3CB3Ryy,)3D5SP99OOqQ    afS    7!676767632#"'&'%"2654&b*-.5:xyyS49POtOO.3),yyR3BQqOO99P  y;d      3#!!#3%!5!(󀨨ds     <   !##5!#T~N         
  35!3	3#K#"T^       
  !!3#	K@ih^T      
  !!3	3#K@#"쪠T^   ~    )3!!&'.'&ZVF%,E=Ώ?~%FVZDA?=    ~    	!53*,Ԫ֪    w   	#	#}}wJ  w   	3	3!#wJw   w  @1 @ 0"#   #4$H̭9B(      w  @1 @ 02$53   3H4CC1 (B9       	r      HF  H  1 03#F    1	 	  !!'+]^*^]䰰           3#3#!5!7	!!	'RLxxLux66x<ux6xx6x     'B     	'	''ٛ>PNq^D^    'B    %		!'''tNP^D   'B    5		5!''6bNP   'B   5	5tN>]P   'B   	5	'Nt>P   `    32?632.#"#"&'!5gV^naibX^naiUK=	;ENSL=;EOȪ  c  y 
  3 3 #cu?Ik8ff%q#   c  y 
  3 3# cffI?#q%  
  )  !"3!!"'&5463!! '&76)!"3!k:((P:jZYk񼽽jȊ()9:PZXDȋ    
  )  5!2#!5!2654'&#5!27654'&#!5! !YZj:P((:kɊjXZP:9)(ƍ       N  $  !4&"#47632!  #4'& PtPZXD|p:PP::ȀZX8x8Ȋ:    1  $  2653#"&5!  '&3 765PtPZX1::PP:8ZX:8Ȋ |  8   4'&'##47673#Z:KK:ZllY:::ZaȌlala  4    ###!5!5!5!333!!!!'5#Y~~~~,,33ͨ     ^  
  3#	57 Ѧ    ^  
  3#55=d //m   .
     	5	5	5
:6 :6:6pr
pr
pr
     .
     5555556:86::6:     .  
   	5	!5!	5?@Npo    .  
   5	5!55?ްop9        
  %5	5!@op9         
  7	5	!5!?  )W     5$ %5$ Ti}$_|x]]     )W    5 $ %$5 iT$}B!]]|     ! &  ! %'&'57&%5$%67&%7* ?;i@]0qw^%KA6#(AF+<zKdה`gևf#     ! &  5$%'56?5$%7$67&X'}8uc̻B8#%MK.0Qt;LK1gעv}iwi   #    !!!!!!'7!5!7!!!MXF}`c.mX.P#::h   #    !!!!'7!5!7!5!!5!!MXFc.mX.P6x#:D:hh     ?   !!!!!!'7!5!7!XUMM#UZQmbm    ?   %!'7!5!7!5!!5!!M#UZQXUMbmhDm      "  %&#"5>3273267#"''	5cCXbh`^xnieEVhjb_zl]@LTND*F JVND+Fpo     "  %&#"5>3273267#"''55cCXbh`^xnieEVhjb_zl[LTND*F JVND+FͰ     W  &  &#"5>3273267#"''  %5$cDXbia]ymieEVgia`yl]$}. LTNE+F KUNE,F]]x|  W  &  &#"5>3273267#"''5 5 %$cDXbia]ymieEVgia`ylS}$3 LTNE+F KUNE,F|]]          7%'%5	'瞃۞LО
@Y8@\9@a       '	7%͞G۞О@?Y@<9@  }     5!%57%!!'71|Iv\':qߦ[@Z8@_    }     7!!'7#5!7%%%9Jpv\ ]FGjq8@ǹ@<p^Bi'X'XrX   &X'XXe B'X 'XerX   B'Xe'X rX    W !  !5!676$3!!!!!!"$'&DM^dGKA@JH^HsȟMOx]JxNLư    I   !!"$$3!!!3#WGcG	UsJ`t`ȟ]@     g   % $$)!"!53#5!3!+*(FkN莎%FrQ;0Q  IH'X8    I     !!"$54$3!!!!5!W?JGcGK@	[sJxNL``ȟMOx]      }    % $54$)!!3!!5!+*(FiNv%FrO:0QV    I     !!"$54$3!!!!5!W?JGcGK@	[sJxNL``ȟMOx]g     I   !!!!"$54$3!!!!WCJGcGKs"NL``ȟMO  W !  !!#!5!676767!5!&'&'&'!5!2FM^HKA@JGd^H'ȟMOx]JxNLư    I   &$'!5!2#!5!6$7!#3GcG	'Jȟ]     g    )5!2767!#3!&'&#%5(*FkN%FrFg Q:欑0P     I     &'&'&'!5!2#!5!676767!5!5!?JGcGK@	[['JxNLȟMOx]    }     )5%2767!5&'&!5%!5!(*FiNv%FtFgP:1R          !!!!!!dFd(ª       #  27 #"''7&54 &#"32654'ucvnݸvcuo<dGcc~Eqvcvovcv<H饀cbG飀b    rLR   50zJ.       	  3	%!	$`y      	'3-xZxxvx       %3#7-ZxxZvxxvx   ?'  &    '  &&     mS   '64'&54764'&54po0Rp1Rpp0Sp0RS`E-@llbB/@llaq?mfaq?le   
   !##am   !   	##7 G    33b"m   !   !733XG   b    3#5!W   db    !53#      5!%#3WqX   d    !5%#3 8X   ^   !#^k?      $%%$~      	  1 ; F O Y  !! &546;#"&546 !54632+32#"&=54&#"3#"32653264&"2654&#l(ع(DbEDbbEEbbEDbPDbabbabDv(D(غPEaabbDEbbDbaaE	DbbEDb     ^   !3!Z?k     g   !#!i  g   7!#iS   p:   !!3:vi     jpy   3!3!ivS  l   4732#"'&'.#"0Pd@7+	h $TA6?&H    *u   
#"&546323250uPd@7+	h$DTA6?&Hk-k         	'3%!5)!o&xRZPx(FD(xRxH           !!!!%!!bFDD    O  	     3!	3	)	!	3	
vvvvv!tx           3!3	)	!	3 vvvv!  + x     # / ; G S _ k w           +7CO[gs  !2#!"543!254#!"+"=4;2+"=4;2%+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2%+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2'+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2'+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;22+"=4#"=43+"=4;2+"=4;2"=43!2#UݓJIIJ%J%%J%%K$$K%J%J%%J%F%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%%%%C%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%$%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%$%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%%%%%%%*$%%%J%%J%%K$$K%%%%%JJJI%%I&%J%%J%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%%% %I%HJ%%J%%J%%J%%J%%J%       
  	     )	!#	3		#	3
W
vЎvv

v  Ff       			7'3#vvr&999"9"rr5kk\SSAcc\cc    n`   V{   '`   qy    	.    !!#!#7!fb"bb"           !'7'7!!5!5!xwxFbxwZwx   #      %!	!	!	l(+R[Srvv   P   #53 sàZ0  s   3#s     P   #5sˠАWeE&2   P   53Zyi P   #0Ps	  P   3#àР˓[   Pm   #!!s#	q  s   3#s     P   !!s`N	u     Pm   !5!#    Pz   3#z    Pz   3!5!`z Xm   #4763!!"]oyeD9uߑfW  ]   #'&%'53 763:*enK==Mne( =C_AEcH< X   3!!"'&5]9De{oVfd    ]   #3]	    ]m   4'&#!5!29Deyo}Wf    X   &'&3!3#76l<(enM==Kne*!<McEA_I=  ]   3#!5!2765o{eD9ᏞfV  u   3 	w   7 @    %	!!!5	5!!37d
hrv           !	!!$<   Ff    +  			 276764'&'&">  &vvrn66\]]\6666\]]\65kk\SS]\6666\]]\6666\   !     mZ   "   "2676/2#"'&7676?3ʆ""#!ʆ""#u@?))kj@?))kj摤VVVoooooooo)t'  }    >32 #"&'#'%73% &  N{g{' L%6OzOz$daad]chaam@j     5.    !3!3 b^        & ۺ   +  #  + #    +  A   &  6  F  V  f  v              ]A     ]A     ]A   )  9  I  Y  i  y              ]    +  
  + 
 $ % + $ 01 !  4$32 !  4$#"35%33!??qqW|A?rpG~+/        8?   +  3 & + 3    +  A   &  6  F  V  f  v              ]A     ]A     ]A   )  9  I  Y  i  y              ] 3 и /A  &  & ]A  & ) & 9 & I & Y & i & y &  &  &  &  &  &  & ] ,   9    +  
  + 
   +  0 ) + 001 !  4$32 !  4$#"!!56$7>54&#"5>32??qqWO\R!>/_N;sa=0>A?rpGM"?U(?N&:$}:iF        D   +  B 5 + B    +  A   &  6  F  V  f  v              ]A     ]A     ]A   )  9  I  Y  i  y              ]A  5  5 ]A  5 ) 5 9 5 I 5 Y 5 i 5 y 5  5  5  5  5  5  5 ]  5 B9 , 5 B9 ,/A  ,  , ]A  , ) , 9 , I , Y , i , y ,  ,  ,  ,  ,  ,  , ] ܺ &   9 ;   9    +  
  + 
 ) " + ) ? 8 + ? 2 / + 2  / 2901 !  4$32 !  4$#"#"&'532654&+532654&#"5>32??qqWv@X[}DuskcZX\[4yk_=hA?rpG]0OLGN<:<? sQr         )    +     +      +  A   &  6  F  V  f  v              ]A     ]A     ]A   )  9  I  Y  i  y              ]   $и  &    +  
  + 
 " # + " и # '01 !  4$32 !  4$#"%!33##5!5??qqW΍CA?rpGOHӎ       9K   +    +  & 3 + &    +  A   &  6  F  V  f  v              ]A     ]A     ]A   )  9  I  Y  i  y              ] -   9A  3  3 ]A  3 ) 3 9 3 I 3 Y 3 i 3 y 3  3  3  3  3  3  3 ]    +  
  + 
 0 ) + 0   +  # 6 + #01 !  4$32 !  4$#"!!632#"&'532654&#"??qqW=o?վ@X_wDhvvh2eYA?rpG
/aUVa%      ' @   +   ; +  5 % + 5    +  A   &  6  F  V  f  v              ]A     ]A     ]A   )  9  I  Y  i  y              ]A   &  6  F  V  f  v              ]A     ]A  %  % ]A  % ) % 9 % I % Y % i % y %  %  %  %  %  %  % ] ) % 59    +  
  + 
 " 8 + " > , + > 2  + 201 !  4$32 !  4$#""32654&.#"632#"&5432??qqWN\\NN\\Ta/w	N 5jA?rpGb[ZbbZ[b#P=     "  #/ $/  ܸ # и / A   &  6  F  V  f  v              ]A     ]   A     ]A   )  9  I  Y  i  y              ]     9 !   9    +  
  + 
  ! + 01 !  4$32 !  4$#"!#!??qqWkQ1A?rpGK      ' ? K   +   = +  1 F + 1    +  A   &  6  F  V  f  v              ]A     ]A     ]A   )  9  I  Y  i  y              ]A   &  6  F  V  f  v              ]A     ]A  F  F ]A  F ) F 9 F I F Y F i F y F  F  F  F  F  F  F ] % F 19 %/A  %  % ]A  % ) % 9 % I % Y % i % y %  %  %  %  %  %  % ] + = 9 +/ 4 F 19 % 7ܸ + @    +  
  + 
 " : + " . I + . C  + C 4  C901 !  4$32 !  4$#""32654&%.54632#"&546732654&#"??qqWT__TT__jivvWQMKRRKMQA?rpGPIIPQHIPIvSttSv\\=BB=>BB     4 @   +  > ) + >    +   / 8 + /A   &  6  F  V  f  v              ]A     ]A     ]A   )  9  I  Y  i  y              ]A  > & > 6 > F > V > f > v >  >  >  >  >  >  > ]A  >  > ]  ) >9A  8  8 ]A  8 ) 8 9 8 I 8 Y 8 i 8 y 8  8  8  8  8  8  8 ]    +  
  + 
   2 +   , ; + , 5 & + 501 !  4$32 !  4$#"532676#"&54632#"&2654&#"??qqWUa.w
O 5kN[[NN\\A?rpG$O<b[[bb[[b        & 2 >   +  #  + # * < + * 6 0 + 6    +  A   &  6  F  V  f  v              ]A     ]A     ]A   )  9  I  Y  i  y              ]A  0  0 ]A  0 ) 0 9 0 I 0 Y 0 i 0 y 0  0  0  0  0  0  0 ]A  <  < ]A  < ) < 9 < I < Y < i < y <  <  <  <  <  <  < ]    +  
  + 
 - 9 + - $ % + $ 3 ' + 3 $ 01 !  4$32 !  4$#"35733!"32654&'2#"&546??qqW͞u>@EE@?FF?A?rpG>>'*6ޗ{  j   5!j    l   !X      3 	      !@ 	  <j     5!!5!!5!r#B#B#j    <l     !!!!!r#B#B#XXX m     333mjjj  m     !!!@@@mjjj  <j      53353353353<xxxj    <l      3333333<xxxXXXX   n      3333p^^^^    n      !!!!@@@@p^^^^     !!      l   !! l       !!#      l   !!# l       !5! j     l   !! X       !5!$ j     l   !!$ X   j   3!-j    3!-m    j   !!@j       !!@m   j   5!3,jk     !3,X j   5!!@jk    !!@X        3!!- 	       3!!- 	    	  #!!!P@ j   	  33!!P-# k      !!!@# 	    	  #!!!P@ m      	  33!!P-# l     !!!@# 	     !5!3, jk       !!3, X    	  !5!!#@P jk   	  !5!33$,P jk      !5!!$@ jk    	  !!!#@P X      	  !!33$,P X     !!!$@ X     !5!! j    l 	  !!!!- XV  l 	  !5!5!!, jV  l   !!! X     !5!!$# j    l 	  !!!!$# XV  l 	  !5!5!!$# jV  l   !!!$# X j   5!3!,-jk  	  !3!!,-XV    	  5!3!!5,-3jkV      !3!,-X   j   5!!!@jk     	  !!!!@#XV   	  5!!!!5@jkV     !!!@X      #!5!3!,-jjk     !!3!!,- X       !5!3!!,- jk       !!3!!,- X      !5!!!!@ jk       !5!3!!$,-# jk        !5!!!!$@# jk       !!!!!#@#P XV      #5!5!!!!P$@ Vk      !!33!!$,P# XV       !5!533!!$P-# jV       !!!!!@ X     !!3!!$,-# X      !!!!!$@# X      !5!!!!$@# jk      !!!!!$@# X  <j    5!35!<yj  <l    !!!XX       33lUTT        !!@@lUTT     5!5!  x X    333x 		    	  !!!!- ¬B  x  	  !!##xms j  x     !!3!!xm3-s ¬jB    	  !5!5!5!, >   X 	  5!###ljjj     X    !5!!!5!4l t, >  	  3!!!--A   xj 	  333!xjk   x    3!3!kA  	  5!5!5!3,,=    jX 	  5!333jkk    X    5!35!3̠=      3!!!!-- 	AB x     333!!xs 		   x   	   3!33!!-skA	jB        !5!5!5!3,,   X    !5!333xt jk	    X     5!3!5!33t,	       !5!!5!4 B     5!!###sjjj      	   5!!5!3!!t,-sjB     5!5!3!,-XA   j   5!333!jkk     	   5!5!333!XkA       !5!5!5!3!!!!,,-- AB        5!333!!###sjkkjj         !!!!5!5!333!-s t, jBkA        43!!"yY[ p~|     4&#!5!2[Yx p~|  j   5!2653#xY[j~|q    j   !"&533![Yyjq|~  *m   3YѲ/	Y   *m   #3*/	Y *m   #	#	3	3*i    S   jh   5!|j       3?  hj   5!h}j       3 @  hl   |X    !@? hl   !h}X     !@ @ l   5!5!!5ijVV     333PP ?@    l   !!!iXVV     #!#P@P ?@  ;d      ;?   !O ?   ; j   !O j   ;   !O k   ;   !O @   ;   !O    ;   !O    ;B   !O B   ;   !O 	   q   ! 	      ! 	      ! 	      !' 	   I   !] 	      ! 	       3 	   :l'       bm         # ' + / 3 7 ; ?  53!5353!5353!5353!5353!5353!5353!5353!53('O'('('(67576    (  'l         # ' + / 3 7 ; ? C G K O S W [ _ c g k o s w {           #5353353353!3#%3#%3#%3#3#5#53#53#1#53#1#53#75353535313#3#3#3#75353535313#3#3#3#75353535313#3#3#3#bb~! 
  'm       5 9 = A  35#%35#35#%35#%35#35#35#35#35#35!35!#5#!5#35735#35#wNOŶZXYI6Z   B;a  B  q :o         !( @  ;v'    v      ;   !!!;(' 	@   ;'v  v'      ;   !!;@@	    ;   !!!O   ;v'   ;&v  v'  ;   !!'(      %   !     %    !!!,7r<R     %    %3!254#!") ) ,orVoVZttV   %&      %        !%!5!5!5!5!5!5!5!5!5!W77777 rrrrr  %        !%3#3#3#3#3#ᰰܲްܲް t88888   %         # ' + / 3 7 ; ? C G K O S W [ _ c g  35#35#35#35#35#35#35#35#35#35#35#35#35#35#35#35#35#35#35#35#35#35#35#35#35#!L$" $"$ܮ.,,.ܮ.,,.,,.,,.,,.   %   
       !33775353535W!yBߢ| T}<B     %   
       !%353555#5#5#57#!yyB| r!C}     %  	       $ ( - 1 5 9 = A F K O S W \ a e j o s  7'#7'7'#7'7'7'#7'7'7'75#7'7'7'7'7'37'75'7'7'7'37'75'7'37'35'!,2|5y2~~2O~~5~|~2~~2~~5~}}}}~~~~}1y|~||~|}|||~|}}| z4|2~12~~~~|~~~~54~}22~}~45~4z231|42~~1O~~4~|~1~}1~~4}}~~}}~~~|1|~|}~|||||~||}}4|1~21~~~~|~~~~44~~11}|~44~~41       7!         %!!!,rv        %!!        !!!cr   "   !    "    !!!,r8V     !   %!!n      !    	!!!bSnr     !%   	    !%    !	       7	        7!	  !%         !%    	x;rRff          7          7	x^rSS      !   7      !    7	xtrSS     !%   !$    !%    	%!bc6r        !         	%!QQZr    !%       !%    	W                  	z      !        !    		#W    !%   	  !%    	uvxx    !%     	>+uv))xx  p)   )  $7632#"' 327$%&#" %632#"'~~~~eMM>yJJJJJ6````qq|qq   #u   "@  91 990	9%-  p)    327$%&#" %632#"'MM>y````qq|qq     r' 	   ' / 7 ? G  %&'&'6767&'&'7%'676727"'64'7&"'62&47\+;.81F9K58.42d;E9G,:.80G9J6&8.;+d1O9FLL&_`JnLL'`_n<1& j(0=Ju &,A=N:0('<1& j(0=Ju &1<>EB0(n_II'[[JnII'[[   p)    % / 3  6%632#"'327&#"6767&'&6pyAAAA,+-,,-+A@@Rqq|qq%%mܱ[0$
%@%|"    p)   ) 7   3276'&#"7632#"' 327$%&#" %632#"'r99:9rr9:99XWXXXXWXMM>yB!!BB!!oe33eje33````qq|qq     p    $  $pkk]Ak^    p     $  $27$%&#pkk]<MAk^a``     p     $  $"3pkk]<MAk^``    p     $  $%&#"pkk]Ak^>``    p     $  $327$pkk]\LLAk^>``    p     $  $"327$!pkk]<MMgAk^```     p     $  $"!pkk]<Ak^`  p})   6%63"'pRqq     )    #2y|q*q   ( 
   2654&#"!|~}}|v<    	(     $%632#"' 327$%&#"!IMM>y_O````|qqqqH(     	(    !#%&#")%632OyyMMqq>~``     	    3327$3!#"'$@1 >qq``   ) 	  %63"æqv`  ) 	  2#%&#u)q>`   	  527$3Muyv`>q   	  "'$33yuMq`     !)   %632#%&#"uqq>``  !   03327$3#"'$uMMuyy``>qq  !%         !%         !%   !    !%   !$ 3! 
   2654&#"4632"&nȊce;~|ddcc||}  %    !%!!d r<     %    !%!!We r<     %    !%!W7 r<    %    !%!W7 r<  %     !%!!!!+c,b r<<     !% 
    4632"&!	W>>VV}V2j>VV>>VVJ      !%    !	c      !%    !	b    p (     7 &  $   %;<*X֖   %  	   !!!!!!,7,rWb<)) Ie  %  	   !!!!%!!,crWbM)<R re  %  	   !!!!%!!,br+ceR re   %  	   !!!!!!,7+r+ceR Ie  p      $  $!327$%&'pkk]]4MAk^Or``O+    p      $  $67$%&#"!pkk]uM14Ak^^O``rOc     p      $  $!%&#"67$!pkk]\M̦4Ak^OT``%OT     p      $  $327$!%&'pkk]\M40̉Ak^``TOTO     !%    7!!xtr R      !%    	%!#Wnr   !%    !xtr    y    !!!,Lr0R<6    y   !06    "K    %!!!,|rhOn    "K   !h#n    !%    !	#W   	       " * 2 : A I  3#''%#&'52#"'&5476!!'5%!!'53'5%3'5%3#'sMM7:==-0YG.b#CKSuYGr=;>MM^??@7`d?\gOOOOy>*<?v^  h "  3263#!5276;'4?'4?26u'6"gP39.4!'*C0.xV#m14He	'1l1Z+d    d   ?  33 #&'&+"'&#"/573;2?"#'57#&'#"#5676!5:+#9,p!j[%+>
7VCCc":8}V.e3B=Se`e9*=93@=}     k 	   ! = Z   4^	5_gow!M  73&'37&'67&'67&'67'32654'&'7654&#"3672 $54767&'&47'&327632#"/#"57#"54?'&5432'&27632#"/#"57#"54?'&5432'&327632#"/#"57#"54?'&5432'&27632#"/#"57#"54?'&5432'&327632#"/#"57#"54?'&5432'&27632#"/"57#"54?'&5432'4327632#"/#"57#"54?'&5432'&27632#"/#"57#"54?'&5432'&27632#"/#"57#"54?'&5432'&27632#"/#"57#"4?'&54327'4327632#"/#"57#"54?'&54327'&27632#"/"57#"54?'&5432&'67&'67&'67'&327632#"/#"57#"54?'&5432'&27632#"/"57#"54?'&5432'&27632#"/"57#"54?'&5432'&27632#"/"57#"54?'&5432'&327632#"/#"57#"54?'&5432O~	)*+')+(@&'$||e?/A}]\B-71SLoWj\vLL)(0/	((	.1(%%,*#$)*f$%+)$#*+f%%,*$$)*		\o		[	%)#&'%&)#`#$*)$#+,U		Q		0	E%%+)$$*+*EC*Z*,)-)-*,%&%&fБfU 5HhfeefhH2pu^QFs棥sKQGh!99!!77!44	22	K44	22	22		11				





		







7


		
%&%&%'%&%'%&22	
//
	g
		
	

					44
22
      ! 2 C T e v          +&'&54?6?6/&2#"/54762#"/54762#"/54762#"/54762#"/54762#"/54762#"/547672#"/54762#"/54762#"/5476%2#"/5476%2#"/5476%2#"/5476DQ=2`{4&/<)g>i#@3e E$$
#
#
#$
#$$U$
#"$
# aG<s-8PZy9}KW2{0R^j,:.4.=,,  --- -	.. ,  -     	  !!	WV9`8    	   !!	7	!!WVDu9`8NI         	7%7&54769	}V&7A6$8'^4?
          !2	7%7&547!&'6I@Y%14HFS"="l-2DC[9         &   !  4$32   4$ #"&54>2JJhhq0^mNMn2Z^Z2K7iwBNmmN1Z00Z     }   
  C   "32654%"32654&%#"&54767654$ #"&767&54 !  ggJIhIhhIJgg[ZQoy y}WZ[zADgJIggIJggJIhhIJgU\\Q	srW\\^    }   
  A  4&#"26%4&#"326 !  547&'&632 $54'&'&632hIJgggMgJIhhIJg#@@z[ZW}yOOyoQZ[sIhhIJggJJggJIgg][[Xrq	Q\\   }    "32654&7 #"  32ɏǾ/`T_ȐɎ;P12Y   }    1  "264& "3264 #" 54 327&54 32  #"'&'3xyx&   کZTdIU       	k  ) 5 A M Y d p {       3'%&76'!'4%$53!76=332654&#"#"&54632'#"&54632#"&54632&'&676&'&676'.7>'.76$6&'&%6&'&6>'.>'.	[&riX(tRSu(Yiq' LW쥨驧r^]]^ !!  !! .-.*)X,),*))+..-.
OyyO
vKK9__9KKݧꧦ]]_""""s!!""W&.-.-a),**))))/.-.    	p   % - 5 A M Y d p |       5#!4'&'5#2#"&546"264"264"2647>'.7>'.676&'&>&'&7>'.%7>'.676&'&676&'&53!76=3%'676%27'%&76'77&'$%'#7%6'&718楣 .  .  .  . --Y--))G))))U*)>--~--VFwDcDC0BDcDwETc==F\J
$06#
J\F==cS@@1AeA1@@H磤椣筁 .  . .  .E---,1))),(9)())u-,-- G77W6W77Gl^	ee	^l(q,&$pp$&,q(      u    !!'!Pn8h       v   "  !!'! ##+572367676MoL)>ueI3?ba8hA:F;/Itx    v     !!'!		##'	Mo_h[ei[i8hi[ef[l[     @   36273	##' 5)U.WW1@USV   d  v    # , 5 > ~  3+&=43+&=4%3+&=43+&=43+&=43+&=43+&=4%33 #&'&+"'&#"/573;2?"#'57#&'#"#5676!5\:V\9\:\:]:&]9[\::+#9,p!j[%+>
7VCCc":8
#8d#7$6$8;$7i$7	#9pPL)Z.;6ZV
Z3%Y63.87p    	    	   / > E q w   !674#!!6?676'&#'323276767654#3#&'&'&6%67!672!&=75$/563&43!32+'!67#>54&53#?	I	:W0 96;E,Q 2:&l6x0	bm!
ras"\>%Ef~e2U6g!6V#p5C+
C?P9
B;Q4XmM;YV /M(=H:,qLUD)8Wqke-Pm{NW


=$
U	/0c)H?2@[nDF8T$.L       	!'	!T4XKGwL5_K        	  	!' 7W4Z~wD     B  &547632632%6#"'&'##"'&'&6&'&547676xJX%&XWX:\8[Ez##FM!9@!#jL)_(Mi#"?8"MF##y4hok@mmr*%te2'BB90tU%)"ft(f")%Ut09CB'2      9 >  3#"'43727$'#"$4727%6725676&5&oJ 7.b<MD	,B3qY5**]d=HNN: sW$,J	]T.MMm@ed:	,'ZM'cM&T)2_M      2  %!"&54676737#&'&54>;7!"&546767!7!"&54>3!6763!26P+=6/2D>R+>2,+v*>>+2
,2
=,2
=,3>,       2  463!2!2#!!#!32#3#!>*v+,1>+R=D206=+P#,>3,=
2,=
2,
2+>      { ! C  %4&#!"!&3!!"3!#";#"3&'6737#&'6737!"'67!7!&'63!67!2I0!6SSSS:	SS>SS]]J]]]]h\\, Bv*>K%39KILKIOKHLKIhghghghgE?-     L ! D  72654'6#"'4#"'54#"'54#"'675674767#%$4:JILLHOKHLKIhghgighgD>-sJ1 b6'SScRR	SS?SS\\K\\;\\]]!A*>K     { ! C  %254+'3254+'!254#!'!254!&#!"463!!2!!#!3#3SS?SS	<RRSS6 1J(K>*vA!,]]j\\\\K\\IKLHKOIKLIK93%N-?Eghghghgi   L ! C  32=732=7325732'654&#'%2&'&5&'5&'IKLHKOHLLIJ:4$N->DghgighghSS=SS	SSbSS'6a!0J)K>*B \\]]:]]J]]   }   O                   !%)-15   3656;2#'7+"/#"'+"5&54775%"'5476;25'7&56%635&56;374765'75'76=4'&+ '"'4!#"'&3$365&5&#%#754'&5&&547'5367&7+&'&'735&2?"5%75537'7'3533553535'32767&5%2?&#%55'5757757751:e,$?F?Y>F_LA3ELH3,8LYLlEF'!0<k#gF EeY!!Gp&iq9:^N$%`BCf F4"4._?ee3&{E(1-+!$Kt8-
	$Gs sM rEF"2>_plTErf^5.>=9|5"-l)d,&>vv]cccWpC-+d8Bpp>W]oaxvuPp82,D^8,^B$K+"1R[+e*;GW
QU
I&?	gpo%w^SA$29i-5n02D|&IY^Pw^%\??\OWC,,1
/211/=;7777=321811{908hN%b\Dh,)h?17I21!122223
21       &  2%2#"'&=47 7654'#"'5473Bq4|lanN	ilmb9b؍MOb>YaYƮ58l7P P@         $ 0 < F X   + &=6&# 3 6=%&#"';27!5%67%!&'&'2+"'&=476r cR~UY082.ԍ_W_V"+}IR8D).P9H'S]ٱZYHYoX(I_ ;.2lOP%.G6R%&I8   d   	   8 P i  >'67&&&'6.7#"'&'#"'$76'773.#'6'5676&&5476'&'%&&8DN$$UE>!]J([Fhy*m.2\=w\`|:S?ED:@@]?]1fixpFFTD'yr,48eL@v(Nr%&&&+F	7!N &".\S$XE/KC\a*0/'rSCٟ
C

(RKpF|bphc'R"J$    d     1 F [ q                 7&&'7'6&'$#&7'&#"'5&767#&''5$'67'6'6'5$'67'656$'67&'6'&'''5$7676'&&'$'63&7"7&'7&'7&'7&'6'6%676767&77&77&''5& '6%35&'.54>23#67!&W=
y
/_I[l*OF_VhB""@.,<9tJ4Vt1PQJqMi
vhpHI!:JJJB7m\J_/
?ov!"t,`s&*_~P1>5='g=@24<1-s[,*&sd1PT>5J@=)j<42JCYT_Y)*)X^TY{ #m7"J}> 	"<H#%	-88)70*7f8Z\+HD 	&+>H1$&b5 4CUE '(!`9!,(MTE+}r}A"7,)f[4f AD <@0&9c?"V+GoMK~aGg9s&0@k"?c*GEKXGjt9hN&\6
''''
6\%      N  $  &'6&'67327&#!65#&3yyys~wccޱqZre[c77	c        ,  35'533#3!'#'5!5!5#53!5!5#!!-ʷ}}	ckvGG@<<3ffX苜qXGccG      J     326&#!2+73	###	3(ttvgnؐB(       33#!!#'!'57!5#'5735׫$"q~q     +  !#!573#'5!3!'573!#'73!#'5;jjŠJss<wѡIjj8/w    {  ,  32#' 3%+ &5%6323'#57'53^VQ6>ѨABؒ6ʞG2k>Y3~||~        O b s  32732753"'#"'4323$4'5;+"'#"'53275'&'&5?5572%#&'&5%634%476=%@.!%,BE,#!-Q2"
$nL/PuHED8<yVX}$c!u&# _A]&y#{Y6\K00D(;,,e"@ p$B(!cc*@rJ&*EcJkgFp/ԶQRm       T _ g  2#27654'73&#"#'&'#"56='"'46'4#"4735#5&547/63654'%654BR38xy}xO8x *@;^ThoP?).Rt}?ywW·FY3(p"AK|.PQUbKxưrɮ-(-;	)1Hv;<tM]%;@!(!My/xK\̾g|HJiS~J?scf=     2  2#'#"'#&'663327'#&'56=4'&+"6і}٪Yql	~Bw%bx׽ɊnX1UhstZ|$eE7          !   !   !   67	654 '67KJy_ͪq7IL6xbhp]B          ( 4  3265 !  >32#"&546324&"26% !   !  
Őb{=&*<<*(;E;R::R;KJ67Ϛ{ɬ)::)*<<**<<*):<'L67I    t&j  'j  j     u&j  'j k     t&j  'k  j     t&j  'k  k     t&k  'j  j     t&k  'j  k     t&k  'k  j     t&k  'k  k   
    < B H N T Z ` f l   3264'&#"&7367'67675673#''5&'&'7&'677&'67'%%&'&'%6767%&'0/CB^0/AC/88pkTcR|NOOfUip88pqUfONNQaQh!$b)dLQk
KRt!%c'd&//^000NN|P_Pfp88poQ`QyNNP\Qgp88pmQ\Py,
M
N>&`7"
bK*V&"g{M	M  jn 
  ! - =  4632#"&%462#"& !   !   !   !  676 &'& Q;:RR:;QBRtSS:;Qtu<=CA$32%s'l(;QQvRS:;QQ;:SSutC<=@%8338H,'(+    jn 
  ! - =  4632#"&%462#"& !   !   !   !  7 767 '&Q;:RR:;QBRtSS:;Qtu<=CAs('s%23;QQvRS:;QQ;:SSutC<=@G+'',H833    jn 
  ! 1  3264&#"32654&" !   !  % 767' '&'Q;:RR:;QBQ;:SStRtus$32%s'l(:SRvQQ;:SS:;QQu[8338H,''+ 
       " * 2 : A I X  3#''%#&'52#"'&5476!!'5%!!'53'5%3'5%3#'32765'&#"sNN99=>-1\H0e%FKSwZGr=;=NN$E| 1	?'_>?@7`d@\hPPPPy?+<>w_VG{?,rCA        +   +"'5$76%&'547327676=&#~jt1/Q}](+VRxbOP>nS]]	=f      P  +  ! &56;2'5$%75#"3ui1.P~N](7P,VSZycOpO
>S\^	f  0: 1 >  7#'#53'&'&54767&'&=33676=3#326'&i($lm$(($[Uu&tU[$&uU[[UV$|ddbe|$%
ZSSZ
%_TYYT  -     &  6&   !!#!5!&yEߩPSCL"~||	    -      6& %   767!5!3!!cE!%zG#Lޜ~||         &  67    !7!lE!Ypipؤ=Ug\u   S     5264&#"#4 32 33#!5z{ym㗗y{(|    j   #53533#632#4654&#"#*jjoon}mZyH{zF      2 
 1   "32654'#"&4767!!53#5!!3!!#3!!pOO87O:=0LmkL/>Λ2  1O79NN970LؙL1KӘJJ-   ' <  %#5#535&'&'5'73'3#'73'676=35'73'33◰zhNgeMjzzTThOʍ7NjYYӖy     ?    ! #!!!'!27674'&#.d ;6zFH%QM_\ǃ$P<    ]      ! #"#&5463 67!2#6#" V⩁9k]ts]k8X1((1E       u  .  " 6&'67>3" #" 54767&'&#52&͕LVa{.+ؔ)0zHUM\&ϖ=Bll)'ҕ*l8lB=     j    &'5 %$ 56?6'[W4ZZ//[[5   @Eo   $ 8   "3264,'5'&54632264&"&$#"&547>B_^^-͓hI^9l͓hI(+|T!%lgMLx)+{T!&lϔgMM    
 <   >'.4632 27#"&54 54&#"&'&5476766&IAKK@ߴGdAoc.%&3tu/3u]o:JKAKLݰ
|XHwyo<>bQs-.cx68<<r.3G   m 6 ?  2>32>32#&'567''#&&#4'3>$4&"?w(K>R0D<d.J|	1:?$)v$/ƀwϧ}wh^)etWW<aAktAO]R      k9  #  !!!5!&54 32 !!5#67654&"*-bCDVUhhUyzzyU   E< 4  353'5#"'&''#&&#4'3>32>32 gYYYD,1:?$)v$E?w(K>Ro}vvxJv<aAktAO]ƀwϧ     		'	7	!5!?=lXll= ?l=Xl=l       j ' /  27632#"'#576&#"4'5267>327&'"SkQmyz,~zi2@:$(.-)zW]	ݾgvxaX[&ŝ     9{   A   3276327632"'&#"'& #' 327627632#"'&#"'& #'Es-1V865+)|m^aVp5W7805Dt,1Wn6+)}m^aW784V8705(GG$3LKGHb'HH#2MLGHa  A      !5! 37 !!'  3(ͦ '3_76`S@ʬAR       c    $ T d  67&'&"!3!67>54.#"!&'.54>325467675#53533#63232>54.#"P#3JTRJWVJQSOMJ4"?*&ElnhPL$ llill%LOhnlD')----+)QPQ((QPQ)+/6klj$?6FWWF6?$jlk6}++--     J H N R h |     &'4>32"'4>32&'4>32&54>32&54>32#!5!'!567>54.#"32767>4.#"327732>4.#"327>54.#"732>54.#"M_6694S55.+C55C&.66V\+55c$M##$	6$#$s`%#$d0"%)h#"#_33@]22-"40446/*33UJ"+33^1/K=0T*
#### 
#&$$&##&$$&#

B

####
*"$$"  U  ! ' - 2  !35!#3!53573#'5#5!35!75!!5'57!s\\ss]]s	JRRIJ~֛E77__vtt4!    v 7 C Q ^  &54767&'&'5676767&'&54>32!	535#5##3654."! 2>4.#" <$))+N-N*)N-M,**%: @v<-MTM-?K5:66459<5&?HPPIK*
')+K**K+)'	*KIPPH>&5<:6uN|l||l|-I+N))N+@6:55:5 Q    * 3 V  6&7 !&54 ''&''67.76;+"'5#"=6&'76767 %25#6&'3Z(-6	Z8.	,Z0H&h6%`+EH
)#M+=;,Zga#iR6Uk''M.+`xo8:.@s.P mz "x?.#1p#41`&jD"acLHJ
~447|JlL"  0   P [   32>4.#"32>54.#"!5&54767&'&546767&'&4>32'&'.#":e79e89f76e`[S&(*UM,N)(N-KV)&&\@ECApd88dpg669:%N&KRS*
'TM**MT'	*SRK&N۠:9}qyyq}      c    $ T d h y   67&'&"!3!67>54.#"!&'.54>325467675#53533#63232>54.#"!57!&'.54>3234'67632!P#3JTRJWVJQSOMJ4"?*&ElnhPL$ llill%LOhnlD')----s=BDw@>=))==AwDB=+)QPQ((QPQ)+/6klj$?6FWWF6?$jlk6}++--!yCB{C!$$!C{BCy!    J H L P  &'4>32"'4>32&'4>32&54>32&54>32#!5!5!M_6694S55.+C55C&.66V\+55c$))_33@]22-"40446/*33UJ"+33^1/NNOO U   % )  5!5!!35!#3!53573#'5#5!35!s\\ss]]s	^^/oo#E77   v 4 @  4767&'&'5676767&'&54>32!&535#5##3 <$))+N-N*)N-M,**%: @%v<5&?HPPIK*
')+K**K+)'	*KIPPH>&5<:6n5|l||l|    L   " . 7 =  6&73# !&54 '''7&''676&7;2547#";65'" 3=QUU+-6E|]k0krd0cG&h8E+`%s
H>4wM-',Qo8:$whPSmh**z1"0@)5"@YR    0 .  &54767&'&546767&'&4>32;&(*UM,N)(N-KV)&&9:%N&KRS*
'TM**MT'	*SRK&N۠:9   C   #  #"'##56'##"/547 ?^'5@_*SU&/UL	;Yԧ9UP(`XI.     s  2  22732 #&547636=4'&# #4'&#"*tpz&=<xQ>hG:V
Hek%PF5NPB|-&pA&NF    X      	 &&5	<F:^;"Vgd     G 7  236;2"##'65##"'&5476;235&'&=476ex<JT`(GeRUdfB3	VNT<G48u<B<h	mMD:SGEnQh  B  " < B  +"'##56#+"'&57547 7;2732;276=4'3&'"~V"0b*SV*8UiQ"_|Q
)w`SgA
?6N#euB?gIo5	F(pZR      w   2367632#&5476(t*#\l~ ΨT]1klSI|-  X     	&47EosU     H 2 ` g  26;2"##'65##"'&5476;2&'5476&+"326733276=4/#"567654'&#"35&5hr=)\"IfRUdgC3&=cGkv	==Nr%SZU6vk 6)S<F98:d	mOE:Rp&i	C]&'Ax.+0	nM,W`c     T   , H  3#&'&'&6%3#&'&'&63#&'&'&6 $&54673 $64'&'v0A1Y1,KV.J/VL9?cyɦt3Z|`ŻN[O}БBr1a`bb`a1)EMUUME)       3#"/4?23hH0#!cZ-@   o   3#'654'&'#"54732XWz=\9`Y'6?F` 1TFG*֙-@ x/   #"=4?2%#"=4?26ձ'VQܖCت+YP*~:ۉ8z"C     o    "'4723!# 5472!5kmOdXX[;Z$}@Ϝ   "    3363'$6'"-8w?WXc1	      0    3%#'#3%#)N(4/c}    4 ( ,  377#'#'547#5773%%.wwzy.**  <<7CA<<{8AMt    P E  #&#"'5654'5673;54'56732733273+&##&"#&'565Q8cc 9S:--:S8!cc7Q:--:[#;17F-:S8!cc!8S:-F71;#[RS9 cc 9S           ; G  7567&'&'3#6737'#&'7#&'6735'67#3335#5;0/_^//,/,-D--C-,.-
zz
~jihh~zz~hihj~ntt6tt-.,-C..C.,.-n//_R_//~ijhh~Nyy~hiii~zzs..         # . 6 C M h w      !2732!'5675'&=32#$'57637&/&+"+&532?4/%32#'#&&=4?#'57335'3!273+#='!"/547354;2?!&=!(:MbR.qp7,_q>MT,P$66$0_	u3dUdt_}s*$"Rt0XX__/ik=ZG8*F1
.ъf)MC=g9EkO9!(-);&
]t!y"&2|ba$
U+      
  2 E  35733!&54?'7'7!!"'&%#'73676'77'7'&'676ի,&T>=c$(wK9.U:Cʈ%`T?<c&>?5̈'8/a\MOHK$k$823!a
IF7=c`O]BA6$k#-	kNA!       1 D W  !!5>7>54&#"5>32&54?'7'7!!"'&%#'73676'77'7'&'676]T@1$J</gYLp0&0
,&T>=c$(wK9.U:Cʈ%`T?<c&>?5̈'8/]U1)8(3&ncQ&D-mMOHK$k$823!a
IF7=c`O]BA6$k#-	kNA!     ( = P c  #"&'532654&+532654&#"5>32&54?'7'7!!"'&%#'73676'77'7'&'676Z_3lFHe5^\VOosHGJI)`VKm1Sj,&T>=c$(wK9.U:Cʈ%`T?<c&>?5̈'8/S<\el23-2['&')bYK4JMOHK$k$823!a
IF7=c`O]BA6$k#-	kNA!       " 5 H  333##5!5&54?'7'7!!"'&%#'73676'77'7'&'676yy,&T>=c$(wK9.U:Cʈ%`T?<c&>?5̈'8/Rv_`MOHK$k$823!a
IF7=c`O]BA6$k#-	kNA!         2 E X  !!632#"&'532654&#"&54?'7'7!!"'&%#'73676'77'7'&'67612hFL]5R]]R'PF,&T>=c$(wK9.U:Cʈ%`T?<c&>?5̈'8/_ptcdrr@89@SMOHK$k$823!a
IF7=c`O]BA6$k#-	kNA!      	 " 7 J ]  "3264&.#"632#"&54632&54?'7'7!!"'&%#'73676'77'7'&'6767DD7:BB=F"W\]8uu&M,&T>=c$(wK9.U:Cʈ%`T?<c&>?5̈'8/Av@@vAf`5(sa_tMOHK$k$823!a
IF7=c`O]BA6$k#-	kNA!         . A  !#!&54?'7'7!!"'&%#'73676'77'7'&'676&,&T>=c$(wK9.U:Cʈ%`T?<c&>?5̈'8/2{MOHK$k$823!a
IF7=c`O]BA6$k#-	kNA!        ' :  7&54?'7'7!!"'&%#'73676'77'7'&'676,&T>=c$(wK9.U:Cʈ%`T?<c&>?5̈'8/MOHK$k$823!a
IF7=c`O]BA6$k#-	kNA!         ' 9 H R  !273!567&#2$'76+&67'#'6765'533!273+#'!"/47*:!Jca#fi*11Za(}ypPd!^t/TT}75	b\V/V'f::p?)\ )9s	s%00       % 2 < J \ e  3 + &=%62!67#&'&#36&#&#"3274/"34?3'35732?5##!'53aoPS<&3y:
SO	B2_5Nvbe)PK	L$=j"AjOL5_k,ߋ~y}/M<4{1;C,[_ei'[)$           / : B R ` j   # &5%6; 65%&# !27!57&/#2#&'676+%!#'#&'47'3!27##'%!#"/6g^_b0h\{\[:5:QmMM[-w,ldNVNG+Q'XYtTpXYSmEb,#4'FV !	Y11_	Ug,1        7 H  27&' # &5%6367&#'.7&67263'#%; 65%&# aWg^_Wa+{|<b0h\{\&XYtTͿWzzWapXYS 1   .  2!2!!7&!"4#".547672670#Uq{|}@!/(S*E.َer(Y$h?}}|r<.<CSSSL2      `     4767632#"'&'&!%!!+****+*B3    `  / 3 7  4767632#"'&'&4767632#"'&'&!%!!**+*l+***q*+**+*3       `  / G K O  4767632#"'&'&4767632#"'&'&4767632#"'&'&!%!!**+*6+***6+***q*+*f*+*a*+*3      `  / G _ c g  4767632#"'&'&4767632#"'&'&%4767632#"'&'&4767632#"'&'&!%!!**+*l+*****+*l+***q*+**+*+*+**+*3      `  / G _ w {   4767632#"'&'&4767632#"'&'&%4767632#"'&'&4767632#"'&'&4767632#"'&'&!%!!**+*l+*****+*l+***+****+**+*+*+**+**+*B3     `  / G _ w     4767632#"'&'&%4767632#"'&'&4767632#"'&'&4767632#"'&'&%4767632#"'&'&4767632#"'&'&!%!!$+*+*+*+***+*l+*****+*l+***q*+*+*+**+*V*+*+*+* *+*3       t   &  2 $$  $$#" 4>2#"&bb,9T9ǥ!<@<!"< ;ʿ~`eȭ8V<B;!!;B<      v   & 3  2 $$  $$#" 4>2#"&%2".4>bb,9T9ǥ!<@<!"< ;e<"!<@<!";ʿ~`eȭ8V<B;!!;B<   <B;!!;B<       v    2 $$2>4."bb4<"!<@<!";ʿ~`e <B;!!;B<        v   &  2 $$2>4."$2>4.#"bb4<"!<@<!";!<@<!"< ;ʿ~`e <B;!!;B< B;!!;B<        t    7!!'5B    t     7!!'5%!!'5NvN      tI&j  j     tI&j  k     tI&k  j     tI&k  k      	   6%'&/#'!#67$#P bJK_5+\(|)\44(BIN       #'!#67$#JK_44(BIN   k    	'7'77	'77	''0ĸ-+öJIĶ,,D#<:xMŹ,,ƸLƹ-,px2=÷   |  P   32>4.#"##"'5##"$'&'!5!5&'.54>2!!676767'%''G&'G'(G&%G%&UV0VHlss=DE{{FD=ic]IV1VUrNG''GNH&&_W@Gz@W0(̀2"zDC|CC|CDz"	16
"0W@z@W0#   [  ` /  	673&/'67&'"&'6?&'3	'	)JZ\=;+Ff[&eAAd%[g>(J>\[J !:<tH@)"N8A11A8G#LHt<:-~A     ~   * C S  '&#"'5&767#&$'&%'6'&'''$'676'&5$'6%'.54>2SC##?C&LLLzD8o^Lb0L*,**A@/"@Q/0>vA%nc.C&2.X`P/5#2$!rI'@2/t< <#m*----  T}   3  %	%	32+#".7!"&'&'#&=4;7337+8)//^]`T_0/84343LL3L)(D=?FF}F-F}FF?=D0.@  e    "  632&'.'#!#!#52J#+}|Q!Mw^}TU}^yS	&MP9:9:OGh>BD..T     V  "  5  32>54.#"367#&7&$735&'.54>21Z01Z24Y0/Z2߬-&5).W@<MVWYWM81X22X12Z00Z&嘖󱢂."+UVTTVU+    j ? G O   277''"/&'&'7&'&'7&47'6767'676?      "&462jX+C@~L@T/!%%!/T@L~@C+X+C@~L@T/!%%!/T@L~@Cl[[[-@2<T\E#D#F[T<3@..@2=T[F#D#E\T<3@-ku[[[     L^      ! & + 0 5 : ? D O    3&7"7&'7&'7&'7&'6'6%676767&77&77&'"32654'5&'.4>23#67#&#"/&'&547&"'6%676 m*Zm$'YwK/;z2:%a:=/19.v*mV)'$m_/KO:2F<:'d91/UlKK65L'(&4(OKOTP64'43'49WTOKQ	'"?Ct>/%8`>!T*}ElKJ{_F
e7p
%/>i!>`)E}CJV
Fhq7f9L56KK65yY
&*&&*&
X	(4ZI4(	[c	(4I Z3
	'      " ) > J            2".46&'767&%6'&''67&'&'&'>764676'&7>26'#"'&'&'&54767&'&547>&'&#"6&%>7&'&'&676&467&'&672767&|&$$&$NG}35dbbd264}GK844k/021101/.2021b.NF{67fd!v|u!qr #76!߫!::;:!!55# %-/12/-TUT[<="#B	!D"=jbf76zFN	83388	<=#!#=<	 "#YTT-/f.-U-$(##($49fSU++9Y]]Y9VUSf9'N'&((H7r787r	Y^49dTV,,	;7->dsub>,6<abba=6,?bvsc?.7LWYYW ))(C@@C(*8,,VSd94]&((&'NC@:@C.)!X[[X!         ) p }   67&'67&'4&6%67.'4'6&&'6767&54?67&'&#&'#&'5&'"'67&'&4762>4.#"%2".4>'6,3	3%//)+6<)'/*+3.21'Q XeT+1'')-TeX Y87 "2B1;E^ WB>1C3" 784h̻hjcdSZWWY~"dioLbMSuIJq>UkKVV6oij$k]*UzvvZ11ZvvzU)[#ec,#IL6B/!!0C6MJ"+ce#̻gg̽ffQUWWU     S     	!!Y,q@I@,qȤ7TU7      S     '!57|,q,Iw,q,ɤ窪8    e      #  3!'# !5 2#"62#".4>	n,L353$%$$D		[	Ch:$($$($       33'5 54#$/[QwGSGUWGJG   Z  * 1 = C  & 32632 !!#!#!5!&"327&7&!&7326&#"6'XP}}R?99XezfH9?A:uutLFF"~||	-
	
GP8lGrr     [0  $ , 8 >  & 6 7&  '&'&'& !7!!!  6'&265"ut.77!u$lYoip@qDi4tEu.$rl,36l%eUg\xuvSc?\7=1lHr-ؤ    - 9 E   6' #"'!!#!5!&'& 326!7!%"327&7&326&#"suuW~WdP|ojp?9:v8?A:llGrE,
||	~LDJg\uHO   U  (   &  6& 32!7!!!#!5!&yEߩPhpCLn[u~||	     / M  #"'&'&'&54767676327'7'%'276767654'&'&'&"(F3"D"&%#C:bV`ZZ^;D"&&$AB[X]:3G9:]:F=~=<.,/*??z?<.+.( !$HS\[Y[VF=*%%'>HS]ZY^XAA&%iiD^29i..=<?A<92-.*?:CA<91*   A a  62'%'!!#5!5!5&'&'&'&5476767''7'''7"3276767654'&'&'&4p69].(E$##$E@Z-<81VDE$###F'19T]9T:G5>+../:9CG5>+../:9\2:a(EVUb_UVE@(
	%CEVU_bUTG(Hij:ο\ij+.<;BA;<./+.<;AB;<./  4 / O  !!#"'&'&'&5476767675!5!'	276767654'&'&'&#"<-Z@E$##$EDVRbfNZ@E$##$EDV18kbbjC9:/..+>5GC9:/..+>5疑
(@EVU_bUVEC%##(@EVUb_UVEC%	kajP/.<;BA;<.+/.<;AB;<.+    	 / O  ####"'&'&'&5476767632333'7	'%3276767654'&'&'&#"ܖU
(@EVU_bUVEC%##(@EVUb_UVEC%	Uܭkaj/.<;BA;<.+/.<;AB;<.+<-Z@E$##$EDVRbfNZ@E$##$EDV18kjC9:/..+>5GC9:/..+>5 4  ;   2"'&'&'&5476767"327>7654'&'&'&RUEG"##"GEURRUEG"##"GEUC9;\.+>6FC9;\.+>6#&BIRUb_URIB&##&BIRU_bURIB&s\<;BA;<.+\<;AB;<.+    4    2"'&'&'&5476767RUEG"##"GEURRUEG"##"GEU#&BIRUb_URIB&##&BIRU_bURIB& J  ;   "276767654'&'&'&2"'&'&'&5476767R#$$#R#$$=>3443>==>3443>"$)($##$()$"06<?IF?<6006<?FI?<60   gMJ  J e u  &'&54767"#"32#"'&'&'&54767676326762#"'&73276767654'&'&'&#"#'67654'&'*")$#)	=HK:C.221@=HK:		==@122.C:KH=	)#!  !#)##?FM;" "$)($&t.2@?FI?@2112@?IF?@2.x&$()$'#?IF?#% $()$ $)($    TZ`z  ! A _   3# "276767654'&'&/2#"'&'&'&54767676"276767654'&'&/2#"'&'&'&54767676R#)$#R#$$LK:C.221@=HK:C.221@=R#)$#R#$$LK:C.221@=HK:C.221@=zZ"$)($&#$()$'.2@?IF?@21.2@?FI?@21"$)($&#$()$'.2@?IF?@21.2@?FI?@21   
J A _ }  676767632#"'&'&'&'!#"'&'&'&5476767632$"276767654'&'&'$"276767654'&'&'61@=HK:C.221@=HK:C.521@=HK:C.221@=HK:C.6R#$$#R#$$R#)$#R#$$5=51.2@?IF?@21.4>"@21.2@?FI?@21.5="$)($##$()$""$)($&#$()$'  R    5%%%xr6׊eMM^xx   V  )  7654'&'575#!&54767'5!s_vR$N::N$Rv_{aT,X@X,Ta{4b\)1%==%1)\b4ߴ:`\KDDK\`     -     &  6&   #&yEߩPSCL"~{ Y,   !#!5!326& '6  !I(4~uP|Gjt ~|  ,    	!!#!5!7	>>!VL;||oJ     ,   737!!'!!#!5!'!5!{{~zz~zdz|{||R{|  xT% 	    !	!5!	#!7!#	#T??LLwJ|A|JZt|J    ,    $264&"&7673%%&uuu>hH]%VgVYFhݦuuv#gGέҔEg DX   !#!5!&'&5%676'!HfN)]H;btWUJn|3Lu.:;͢8%|    V ^m   3   76= '&   7654'7! '.54676! NΫ.8l?ΫNΫ,spppsppp>9`VhhV`"xx hVc`VhhV`cVY9QN9ss9N^Q9s     V ^   - E     7654' 76= '& 76= '&! '.54676! ΫNΫkNΫ.8l?*NΫ.8l?spppsppp>9ghVc`VhhV`cV|`VhhV`"xx `VhhV`"xx Z9QN9ss9N^^Q9s     V ^m  ! 1 ? U  ! '&'!    '&'&76767 76= '&   7654'7! '.54676! x8;41 ::; 9٫NΫ.8l?ΫNΫ,spppsppp>9d]]c]]]Փ`VhhV`"xx hVc`VhhV`cVY9QN9ss9N^Q9s    V ^  ! - ; K [ s     '&'&76767! '&'! ! '&'!   7654' 76= '& 76= '&! '.54676! K ::; 98;418;41
ΫNΫkNΫ.8l?*NΫ.8l?spppsppp>9]]]]]c]]cehVc`VhhV`cV|`VhhV`"xx `VhhV`"xx Z9QN9ss9N^^Q9s   -    ,  "&54632 #" 767'	2654&#"@a^CF[^ccZ礡}[D>XUAB]~Lޜ~g]䤣أ   l Z y   '#"'&#"'&'&'&547676763232767676'&'&'&/&'&'&547676762!2!%3276767654'&'&'&#"&#"3276767654'&'&s*	$+$$$#*#%>aZ%NT>% #HH	")mROeb

0

 $&$ 'D"&% 
$ #mR )Ky						   V!E  r   26767654'&'."#"'%"'&'&'&54767676;27>764'.'&+"'&'&'&547676762%632$"26767654'&'&.&&.&m,mQjP
(!N!"(!'CVf&&bZC'!("!N!(
PjoQm,.&&.&ql?W,>#"#""		""#"#>,W?~    lO Y x   3!#!"'&'&'&547676?6767676'&'&'&#"#"'&'&'&547>763276;%326767654'&'&'&#"6767654'&'&'&#"32eOuRd2	HH# 
%>TN
+Za>%#+$4$$$+$	's	
*
	*
OK) Rd#!#&
"*"D'  ""! 2 	T	
:	   	 I  Z x    -4H  67&'&'&+"'&'&'&476767632%632#"'%#"'&'&'&54767676;276 276767654'&'&'&"276767654'&'&'&""'&'&'&547676762"'&'&'&547676762'&'&'&547654'&'&'&";276-&#"+"276767654'&5476%327%&"'&'&476762I	Q\C--%("(/*0.,+"(/X]\9<\X/"$)0*3')"*%1*0CR[	

		

		

		

	22				2				2				2				%'&J &%C\d#_*]OhXC%& J&O]*								
 ")&`&"'$"/'	<%ZS%SZ%<	/'* "%5"-($# 	;8\=
! ! "
/VC
" ! !
[uV/+							   V^ n    3276767654'&'&'&#"&'&5476767632#"'.54767&54732#"#"676767'&#"'67654

ozwbd011.f_zx|wbd011,k9995ulsp:995un*D$lQ$"	6*D?"5'K(2-
#%>

:7331cdvwwqi`4331cdvwxD>mwn<;;8rowp:;;BV0/+"8:D@*|sa 	-F(7"*=8&0!2  1-5$&
6:B4    V^   , J i   &'&'%&'&"632%676767654$2"'&'&'&5476767"3276767654'&'&'&'2#"'&'&'&54767676?!*$ 1$-+h+-$F3782*	!?1 $>>9|wbd0111c`zwbd011.f_zxsp:995unsp:995ulwIP"2-.$ 	""		PI $.-2!v31cdvwzwcaf31cdvwwqi`43d;8rowp:;;8rown<;     x ,A -  57'36%33#3#!2#!3#3##$'#7$@d5{sVd]F0  0F]dVs{5⒒d@(
jPP,PP`    0   " ) -  	!676762!"'&'&'&54!X$#R#+/RFF$#R#$1Sh,		k-"s!    | K     476?6763&'&'&547632676767654'&7632!54'&'&76'&&#"'&/&'&'&#"#"'&'&/&'&#"&'&'&?6'&'#"'&'&#"!'476/654'&76'327654'&'&327654'&/%4&)"$0JK&
$)7		%1'#
#6	+-L__^/s4*1(.266	|/(1	

\	#:7
lS&x71]%
/~[#<$ o_%?,:
*(;Y)$X$+|=L!6CX&PY89Do6b'n283eF]4T&
& /50$?- 1@&	3l
K
C"P1	:07@D:5XI6.D3[+-1:			q/A8	

g   + jl  9 L p {     7654'"'&#"+"'&54?67676763276323273#5%6767'&#"6"/67#"27632327654'73654'676547&p/l0&J!cS%YE]{@C"$4>-;%,(6Y>m!N$X6"/,(4sS?X$U>"sJ?K(`./4+2K2.0>SZp0+1^' ;cs /^"|Y/428ۇϕl%%ot5oA='Y$	aT*''G+-%_kj~r}jL`І|\gK@/.85c($       " ) 3 S Z  67654/##3276?%%54' 654'36767632#"'&54767632'%;66I
	}gA6qn
		
		

->
9@
H67;zh|	9
>6!q
	


B   5>     ' - E L   4'&'&/767675'7!	!'!654'! 4'!!$4767>2"&'&'!654'
33
^^^RXI#J2VlP#
	~!88!~	
Uppph,p<((zd        " ) 3 S Z  &'&#"227654'&'''%'654.#"65&'&'&547632#"'&'&6#"%	
I66;o|>A%6!q

		
		
9
		;76H
	|h>
96qm


	
B   X{[ # C  '%%.'&"27>7%$6%"'&'&'&47676762%'2&%k
Aڙ>>dIID`qS
	 
SqGYq>q     ) &  %$64'%%&'&'&"27676&22"k**!q``q!   3 W
   2327 632 #"'&'&5476'(> !~GH".4F+@xH	)0$'*'       2727 7632 #"'&'&5476'(e`}{*279HFb@yJL1 -  A   		'	7	Ɏ877Ɏ77ɍ8ɍ     ?   	tt7tt7t7tt7u   B  2632#"'&'#"'&54767'&54763267632676
Q x L$3z(		 
6X36*=P*>
"#
        Q  26#"'#"'&'#'&'#"'&547&'&54767&&5476326763276T
 디% $$YyX$		zc0+j:(̢1#:_&#-Խ=1 '2ĺ  p  D   #  !!!!!%!!!!!!!!#!5!36HVBBXBBUHVPBXyB    p  D   !!!!!!""p"p"#  p  D    35#7!!#!5!3rrsrs   p  D    !!%!!!!!!r"p"#p"#  R  b   !!#!5!3ppEU   l    3!!'#'!!#!!3!5@,r,,_r,,_ >  v   #  !!!!!'!!!!!!!!#!5!3hm_|P_H_     p  D Q  #"#3;54'&'&'&#5!"3276767653#4'&'&'&+3!52767>5{dZYIB,$22$*DE]Vh{%'GC_Rl|lR_CIJ{hV]ED*$22$,BF\Zd{%'GC_RllR_CIJ&%IB`Oo|oO\FG'$zdZ\GB+%22%+BIdz$'GF\OooO`BH&&{dZ\GB+%22%+BId            #  !!!!!373#'7#ZAA:Llحmllmzlmllm|}}|d d}c   T` C  54'&54762327632#"'&+"'&5476=#"#"'&476323(L,68x86,L zFvd0000dvFz L,68x86,L zFvd0000dvFz zFvd0000dvFz L,68x86,L yFvd0110dvFy L,68x86,L     V^   &'##"&'&'&4767>32367675&'&'.5467676236767>32#"&'&'&'#"'&'.546767675&

 R.-R  R-.R "	
*!""! ((\(( !""!#%
	" R.-R  R-.R 

%#!""! ((\(( !""!**!""! ((\(( !""!#%

 R.-R  R-.R "	
%#!""! ((\(( !""!*
	" R.-R  R-.R 

  Sa   4'&'&'&'.54767676322767676767632#"'&'&'&'&'&#"'&'&'&5476767676765"#"'&'&'&5476767632($
((& :.:806$&&
)D+:!
'228:/3&$$&3/:822'
)2/@!
'&$6/r/6$&'
'?03'
&d8:02&!$&20:=-2&
(20C,7"
&d8:02& $&20:=-2&
(10?!
'&$6/r/6$&'
'D+:!
'228:/3&$$&3/:822'
)2/@'
((& :.:806$&&
(   T`0  267632#"'&'&'!&'&'&54676763267632#"'&'#"'&'&'&5476767!6767632#"'&'"'&'&'&54767#"'&'&'&5476767632!#"'&'&'&54767#"'&'&'&476767632&'&5476767632!#"'.'&5476767632&'&54767676Z



(
&	 

		

<

4		











%
(






(


2



	

6

	

	%		

	

<

%

(


    W_   276767653"4'&'&'&Wsp:995ullu599:ps;8rown<;;<nwor8;  W_  ?  247676763"'&'&'&5!276767653"4'&'&'&ee\WJI&%%"MF[[ff[[FM"%%&IJW\sp:995ullu599:ps&%JHZYif\UMH'&&'HMU\fiYZHJ%&;8rown<;;<nwor8;  0 	   %	%!	!0$$ѿ6alLl    V^ 	 )  !	!2#"'&'&'&54767676Z¬ìӬsp:995unsp:995ulHH;8rowp:;;8rown<;     0  '   "276767654'&'&'!	!990000999900009|kk-28;BA;82--28;AB;82-&lLl  0 	 ' 1  %	% 2"'&'&'&5476767!	!0$$990000999900009|6a-28;BA;82--28;AB;82-&lLl     0 	    !''!!	!!	!Z`5__5`/xxxx/kkIٶڶ&GGlLl     0 	    3'7'3!	!7!%%!Z&|d&dd&d|&kks/u//u/IvIvIIvIlLlc   0        %5%7'%!!	!xxx`/kkKKGTlLl  2     	'%'!!!!>j>-'O^__^Oq44H4"hdd      0   !%%!-@jjjk **           37'7	#'xxxx.xx.x..x   p  D   	#'!5!73!GFdFGrEGdGErFGqFGdGFqGEd  @L   			-	FOFc,OO,cFd,PO,dGOP  	 T`         '  !%%%!%%%-wD{wwf#w%f{wwy||y{xxf#w%f{wwxEy||y        %	%	Zp/AppA/}}E   T`   			-	ZqNqqNNrqNqr   T`   %%-Zyllylyy   T`   %%%%-ZtGcVGttGVcGGstGWcGtsGc   p  D /  3%!!%#'''%!5!%777xo:U.cF.d;UǩoxoU:e.Ec.U9oE.f:UūoxoU9g.Ff.U:oxo9U.      54'&5476276767632#"#"#"323232#"'&'&/"'&5476=&'&'#"'&'&547676323232?&547'&#"#"#"'&'&54767632676'K,68x86,L
qA'C<4GW>L
df
L>WG4<C'CnL,68x86,M	nC'C<4GW>L
dd
L>WG4<C'ElwFNd0110dNFy~DzI'#4#,G2$:;$2G,#4#'I~?	yFNd0110dNFy?~I'#4#,G2$::$2G,#4#'I;         "276767654'&'&/54'&5476276767632+"#"32;2#"'&'&/"'&5476=&'&'#"'&'&547676;232?&547'&#"+"'&'&54767632676o**YK,68x86,L
qA'C<4GW>L
df
L>WG4<C'CnL,68x86,M	nC'C<4GW>L
dd
L>WG4<C'ElPLwFNd0110dNFy~DzI'#4#,G2$:;$2G,#4#'I~?	yFNd0110dNFy?~I'#4#,G2$::$2G,#4#'I;   j  '&'&'&767654'&54762767676'&76'&'&/#"'&5476='&'&76767/1oS\**nH\W+G80j@6RR6@j0/P1Q\Hn**\Wk9000oS\*,lLXW+G80j@6RTXN6@j03L/S\Hn*+[Wk6	05HoIH 53c!77\`j4OO4jfVA7g/5 HIoH53 	05HoIL43c!77\`j4OO7gfVA7f05 HLlH53           67654'&"327632#"'&'&/#"'&5476=#"'&'&5476763232?'&#"#"'&'&5476763254'&5476276767632#"'&#"#"'&#"327676%32767654'&'&#"#"Z8%1T1%85e %ZF\+m8BS/?JV@6RTXN6@VGB1QB8n*\FZ% e53e!&ZFZ*n8BS/?JV@6RR6@VGB1QB8m+\FZ&!e3DA	
5<;>
+F$H$F+
>;<5
	AcJ2QD++DQ2J (5H,'9,J&0f)
T|\`j4OO7g`\|T
'g/& H,9',I4( (3J,&9-H &0f)
T|\`j4OO4j`\|T
'g/&J,9',H5(""'!$(:UJJU:($!'""   n  F     "276767654'&'&'767632#"'#"'&'&'&'#"'&'&'&5476767#"'&'&'&5476767632&'&5476767632=>3443>==>3443>x>%85670-)-%8/>0!-)-02;>/8%0)-02;>/8%-'&$>/:#-)-02;>/;))-02;>/8%-06<?IF?<6006<?FI?<605+'61>:4/.&"./4;=16'+&1,"%&!6'+&./4:>1:#"$./4:>16'+,4:>16'+&./4;=1  n  F n       %#"'&'&'&5476767#"'&'&'&5476767632&'&54767676267632#"'#"'&'&'&27654'&'&'&"67&'&'&'276767&54767'&'&#"276767654'&/7676767654'&'&'&#"Z0%8/>;20-)-!0>/8%-)0-<1:3%>-%8/|/8%->%85670-)-%8/>0!-)-02;>/8%0M=	 H 	C# B/g H *x#$  -7 H g/B   $#x*%",1&+'61=;4/."&./4:>16'.51=;4/.&&./4;=15+'61>:4/.&"./4;=16'+&1,"8_/$  $/_c.,b" $# !I?30C!'# 	x! #$ "b,.$	 #'!C03?I    
 T` - [ 3b  &'#"'&'&'&547676763267'&#"327%327676764'&'.#"7632#"'&'&54767676324676762676322##"'&'"'&'.5#"'&'&'&54767"'&'&'&54767676&'&'&'&'&'67676?&'32767677676765&'&'.#"7676767&'&'&/326767674'&'&'67'&'&'&#"67'&'&'&'67676767"276767654'&'&'"'&'&'&54?&'276767654'7654'&'&'&"67'&547676762:	


	$4

$$

4$


% !()-+,)$"! ((\(( !"&',+-)(!'7'&"# ,*2% !()-.))$"! ((\(( !"(%*-,*(! #2*&"# "&'
		!


4 
!


4 g

		
	i 4


!g 4


!
	
	oR#$$#R#$$	

	8

<

c7

<

7	





8
<

d8

<
6


 %),++*) !$3R  R3&!-(-%2(&"#%(.2$( &',+,)) !$3R  R3'! )),,+)$"#%(.2$( "			
i
!xg
!				
%
			
!
!
g
			"$)($##$()$"$
		
%%%%

		
    V^  < \ l   "276767654'&'&/2#"'&'&'&47676762#"'&'&'&54767676%%-z35++++53z35++++5pWDM69 ;9JHSWDM69 ;9JHSsp:995unsp:995ul}}(.35<;53.((.35;<53.("68MITNLJ;9"68MILJ;9m;8rowp:;;8rown<;}}             "327632#"'&'&/#"'&5476=#"'&'&5476763232?'&#"#"'&'&5476763254'&5476276767632#"'&#"27654'&%&'&#"327676%327632654'&'&#"#"Z*1%85e %ZF\+m8BS/?JV@6RTXN6@VGB1QB8n*\FZ% e53e!&ZFZ*n8BS/?JV@6RR6@VGB1QB8m+\FZ&!e3*1%8~>
+F$$>
+F$H;<5
	A~;<5
	A+DQ2J (5H,'9,J&0f)
T|\`j4OO7g`\|T
'g/& H,9',I4( (3J,&9-H &0f)
T|\`j4OO4j`\|T
'g/&J,9',H5(G+DQ2J$(:U$(:U3!'""!'""     A  ''7'753'75377537'7'#5''#5'7#5'7'7<<x<x<x<Ć<<<x<x<x<Ć<phMrhrohMMhorhrMhpphMrhrohMMhorhrMhp      ! % ) - 1 5  3%%%%#'-75%77%7?5x#	<$	<x<	$<	##x̩hh3QhhP'cccchcbbccbbgccc     0 A  37%37'7'#%'#5'7#5'7'7-'7'753'7xdX<[ddY<\dxd[<Xdd\<YdhQΛ4h5QQ4h5ЋQheQ55h3QQ5h36Q        #"'&'67632#"'&'&547'".46767#"'&'&54767627'#".4767632&'.4676327&54767632./56..65/.-/531/.66\l\66.//56.../j/136\6./531/.66./56\66.0.65/3m6.5/../54///.6\l\66\l\6.//.65/.6\l.//.6\l\6\l\6.-  	 aS      . E \ s   "&462	7	7	'	'&'&'&5476762"'&'&547676#"'&'&47676326767632#"'&'&X|XX|}UU}UU9r99r<%DREA 11 AERD%<%DREA 11 AERD%,|XX|X.U|JU~-|U~U.<%DREA 11 AERD%<%DREA 11 AERD%9r99r    	 aS      + ? S g   "&462				"'&'&476762"'&'&476762 2"'&'&4767$2"'&'&4767;i)U)U
)UK)U'.n.''.n.''.n.''.n.'p17#((#71p17#((#7Mp17#((#71p17#((#7K8)UL)U~U)^U)Ip17#((#71p17#((#7p17#((#71p17#((#7Y'.n.''.n.''.n.''.n.'   	 T`   & 3 @ M Y a m  +%5%32476;#"'&'7632&54?#"632'&54#"/7 2#547"&462"'&=3`(
`
&(
`
&*G)*IG)(*(Ge))GIR2d2X|XX|R2d2*2d2((2d2M*'FI*'FeF)*IF)*(
a
'U|XX|Xc(
a
'    T` l  267632%632#"'%#"'&'"'&547#"'&54767#"'&47632&'&54763&5476Z+/#N42B4
{L"..$J%(4B+;
N#/V/#N
42B4(%J$.."L{
4B$BN#./#J"5C7/	N".X.$M51C5	"J#//#J{	5CLM$.X."N	51C!wJ#/  f  #     +   + A    &   6   F   V   f   v                     ]A       ]A     ]A   )  9  I  Y  i  y              ] %    +   
 +   и /  и /  и  "01 !  4$#"#  4$32632 !"?qq?pGQ?rA   z   7   +  
   + 
     
 +     + 01%!#!3!dd,S.Sd,     z  8   7   +     +       +   
  + 
01%!%!35!,dS.dd,    z  	 7   +     +       +     + 01%!!!SdJS.SԂJ    z  8  	 7   +  	   + 	      +     + 01%!!7!,S.SdJ          	/ /01	SSTRSSSSSSRU"S       #       !      !X    (      +  /    + 01!33R(n?  x(  '    +   /   +   01!##xnR?   (   K / /  и /  ܸ  ܸ   / 
/    +    и  01!33!33RR(n?n?     x(   S / /   и  / ܸ  ܸ   / 
/   +   и  и  01!##!##xnRnR?n? >B- O S  2#"327676765!"'&54$3!57!##"'&'&'&54767676#	
 ?>I-7އv3T%+>CPNHiDG-2/&D9	.	!-8=DD_o2{jTc@F'%.36<@M137+4V    5  2&'&547676762"'&'&'&5476767Zy*,&&%1]~|45,--,54|45,--,5(+&014|d΃fz410&$(F*.46=<64.**.46<=64.*   Nf % C  &%&547676762476767622"'&'&'&5476767Z{&%1-l./&%%&/.l-1%&|45,--,54|45,--,5ġS410&$%%1/66/1%%$&014R*.46=<64.**.46<=64.*   n F( %  %&%&54767676247676762Z_75EAAD6556DAAE57_qKFD6454FCNNCF4546DFKo  X '  #"'&'&'&547676763"'&'&'&5476767632rJFD6464FBNNBF4646DFJp`84F@NLBD6466D@NLBD66^  ~ *  i  654'&#"632327632!"'&5!267&'&#"#"'&54763247632327654'&547632#"
6+Jo.^V|;-˙it36?̺fQMeEJS?(*$ s]vh2K)*NL13<VL*-*8A*_xAg0,?)!:"9JOCQ>^v:Mc*ZeC03N35%&-Kt\K%9S >BWN=!$?$8(F!5{^?   Z  N  676 547&'&327#"'#536767&'&'&5432&5476323254'&5432?-BO>Bv06('K`dC+(k$'eM?$#=HbB=)+8=.m9ebPB>$3g:=TEB7WPfG+1KHP<Ff#&T'0P+A'<<QbF  /'    "'&'&'&547676763"3/FDD@mh`((((SNecrGCFG/C>}DC  /' "  05276767654'&'&#052rceNS((((`hm@DDF/CD}>C/GFCG       !&547>2;       0!!676PJKBA<      !	!$        	!	"        #{   !	!{<l`    9   	!	9`l        U?   !	!?     w`   	!	w        H   Zjjjj  l   '7'7Zjjj3j f $  #"&=4&+5326=46;#"3l==kDV[noZVtsݓXX N (  326=467&'&=4&+532;#"+DVZon.-VDUT65==lTUԾXGGXJI9:tJJ         +  
  + 
01 !  4$32!5##7#??qqiڡA?r\/+     *   %  + % 
  + 
01 !  4$32>54&#">32!5!>??qq>0ţ=as;N_/>!RL}A?rFi:}$:&N?(U?"Mt      6     +A     ]A   )  9  I  Y  i  y              ] 1  .  + . 
  + 
 ! ' + !   +    9 * ' !901 !  4$32%4&#">32+32#"&'32654&'26??qq|=_ky4[\XZcksuD}[X@vhA?rs ?<:<NGLO0]r           +  
  + 
01 !  4$32!	!3535##??qqCA?r~ӍH      +    ! +A  !  ! ]A  ! ) ! 9 ! I ! Y ! i ! y !  !  !  !  !  !  ! ]    +  
 + + 
   +  ( $ + (   901 !  4$32>32#"&'32654&#"75!5!??qqYe2hvvhDw_X@ϰ?A?r%aVUa/
     2  3/ 4/ 3 и / 4 ܸ A     ]A   )  9  I  Y  i  y              ]  A   &  6  F  V  f  v              ]A     ]     +   
  + 
   +  , & + , / & ,901 !  4$32#"&54632"32654&#"7>325.??qq\NN\\NN\qºN	w/aTJjA?rZbbZ[bb*=P#         +  
  + 
01 !  4$32%!35!??qqlUA?rv]K     1 =   +    +      +  A     ]A   )  9  I  Y  i  y              ]A   &  6  F  V  f  v              ]A     ]A       ]A    )   9   I   Y   i   y                     ] /   9 ;  9 ;/A  ;  ; ]A  ; ) ; 9 ; I ; Y ; i ; y ;  ;  ;  ;  ;  ;  ; ] 5    +  
 ) + 
   +  2 8 + 201 !  4$32#"&5463232654&'>54&#"2#"&546??qq_TT__TT_⾭vijvkKRRKMQQA?rlHQPIIPPI\vSttSvB>=BB=>B    & 2  3/ 4/  ܸ A     ]A   )  9  I  Y  i  y              ] 3 'и '/ -A  - & - 6 - F - V - f - v -  -  -  -  -  -  - ]A  -  - ]    +  
  + 
    +  * 0 + * #   901 !  4$32254&#"326#"&'4632#"&??qq鿹ºO
w.aUJk<\NN[[NN\A?rK
<O$[bb[[bb     $ 0 Ӻ %  + %   +    + +  A     ]A   )  9  I  Y  i  y              ]A  +  + ]A  + ) + 9 + I + Y + i + y +  +  +  +  +  +  + ]    +  
 . + 
  (01 !  4$32!5##7##"&5463232654&#"??qq$uF?@EE@?FpA?r*'$   	=  ( F     76767654'&'&'!5%3!!  '&'&'&5476767̆mo5885om4mo5885omP\|~<??<~||~<??<~|96oooo6996oooo6}9:݈@>}~~}>@@>}~~}>   	=  A _     76767654'&'&'!!5676767654'&#"5>32  '&'&'&5476767̆mo5885om4mo5885om)4
\)NBCkPQT`aFnoIkl\|~<??<~||~<??<~|96oooo6996oooo6_.X<<;_<<5'(]]IBBZooV@>}~~}>@@>}~~}>  	=  O m     76767654'&'&'#"'&'5327654'&+5327654&#"567632   '&'&'&5476767̆mo5885om4mo5885omttBAzyLOPUDWOPJJx??zBLL\R[PGjkr=\|~<??<~||~<??<~|96oooo6996oooo6yNNtaa'(<<rj<;0/Z\bSTd	@>}~~}>@@>}~~}>    	=    + I     76767654'&'&'!33##!5   '&'&'&5476767̆mo5885om4mo5885omh*˪+\|~<??<~||~<??<~|96oooo6996oooo6@>}~~}>@@>}~~}>   	=  ? ]     76767654'&'&'!!67632#"&'532654&#"  '&'&'&5476767̆mo5885om4mo5885omz##$#utKSLHMVA@AC\|~<??<~||~<??<~|96oooo6996oooo6cnm)}|X@>}~~}>@@>}~~}>    	=  , J h     76767654'&'&'"327654'&.#"67632#"'&7632   '&'&'&5476767̆mo5885om4mo5885oml@@lm@??@=|<UT/GGVhiڵmn=|^\|~<??<~||~<??<~|96oooo6996oooo6KJKKJKllE&%mnޟ- @>}~~}>@@>}~~}>  	=  $ B     76767654'&'&'!#!  '&'&'&5476767̆mo5885om4mo5885om\ N\|~<??<~||~<??<~|96oooo6996oooo6`E#@>}~~}>@@>}~~}>     	=  + B N l     76767654'&'&'"27654'&%.546  &54632654&#"  '&'&'&5476767̆mo5885om4mo5885omsBBBBCBBBhtdthuABtԄ9tihvvhit0\|~<??<~||~<??<~|96oooo6996oooo6,=>=>>>kl>=EggOOss\hh\]hh@>}~~}>@@>}~~}>  	=  < L j     76767654'&'&'532767#"'&54632#"'&27654'&#"  '&'&'&5476767̆mo5885om4mo5885om=|<UT.GHVghڴmm=?>m@??@ml@@@@J\|~<??<~||~<??<~|96oooo6996oooo6lkD%%lmޟ橨KJJKKJJK@>}~~}>@@>}~~}>     	=  + 8 C a     76767654'&'&'"32654'.  735733!   '&'&'&5476767̆mo5885om4mo5885omT,+VUVV++2QPPQΠP3p\|~<??<~||~<??<~|96oooo6996oooo6{z~{ӟ>-,g%&݈@>}~~}>@@>}~~}>   	= 
 (  !5!#%  '&'&'&5476767{\|~<??<~||~<??<~|#:9q @>}~~}>@@>}~~}>  	= # A  676767654'&#"67632!5   '&'&'&5476767lkIonFa`TULkCBN)\\|~<??<~||~<??<~| ooZBBI]]('5<<_;<<X._@>}~~}>@@>}~~}>   	= 1 O  >54'&#"67632+32#"&'327654'&   '&'&'&5476767irklGPQ\\LLBz??xJJPOWDUPOLyzAB2\|~<??<~||~<??<~|dTSb\Z/0;<jr<<('aatNN=@>}~~}>@@>}~~}>     	=   +  !	!335#$  '&'&'&5476767hno\|~<??<~||~<??<~|@>}~~}>@@>}~~}>  	= ! ?  67632#"'&'32654'&#"!5   '&'&'&5476767CA@AVMLHSKtu#$##\|~<??<~||~<??<~|=|}'mn% @>}~~}>@@>}~~}>    	=  , J  2#"&5476.#"32654'&#"67632   '&'&'&5476767Pm@??@ml@@C|=⇆nmϵihVGG/TU<|=\|~<??<~||~<??<~|+KJKKJKӟ޸nm%&Ell@>}~~}>@@>}~~}>  	=  $  !35$  '&'&'&5476767>h\|~<??<~||~<??<~|@fE@>}~~}>@@>}~~}>   	=  $ 0 N  2"'&476' 654'&'>54& 74632#"&  '&'&'&5476767YtBBBCBBBB/tBAuhtt-tihvvhit0\|~<??<~||~<??<~|=>lk>>>=>=EssOOgg]hh]\hh@>}~~}>@@>}~~}>  	=  . L  %3276'&#"32767#"&'"'&547632   '&'&'&5476767!C>?=ↆmmдhiVHG.TU<|=Al@@@@lm@??@\|~<??<~||~<??<~|/޸ml%%DklgKJJKKJJK@>}~~}>@@>}~~}>     	=   % C  2#"&5476$  '!5##7  '&'&'&5476767e22dedd22TUUTBU¡\|~<??<~||~<??<~|{zz{ӟ>-/g#&%q @>}~~}>@@>}~~}>   u Pj   	!!5!!Pp#@pp   pt   	7%FN4NG  u P8   5	zD<22pJJ    t   	'-ZKFGN  uP   !!u\lE>~~>  u u 2   "&'&'&5476?!".'&47>3!'&'&54767>2	p4,
		,$
		
$,		
,42p
"2"
p    u P8   !5!	%JZPJJ  u P8   !5!	%JHJJ  u P8      #3#3#3!!5	xx<<oJpppJJ     u P8      55!#3#3#3oPxx<<΄ΊXXXX   u }~   	!!~   PD    !	6>l>>    PD    	!	DR>l>>   P   	Blvv  u Pb   3!5	5!"'&'&'&u##+*15J1*+##0+*%!JJ!%*+   u P8   47676763!5	5!"u##+*15J1*+##0+*%!JJ!%*+0      !!	^r{VXeoo     u P8   55!Dq΄Ξ0     u j    %5!!53		!<9h9>     u j    %5!!53		!<9h9>     + Z    !73#57!!+ Id&+ъ2&     + Z    5!'53#'!!!+dI|&2     2 
   !'!'!53	!Odcndh    2 
   3#5!7!!!	ndnd;ch      dd    !53#'5!'!	!]n2n22r-hJdc;dJ      dd    7!573#5!!	!2+2n2nr-hLJd;cdJ    < !  6767632#"'&'&'!	<'CZmo~yti^Z...*^Vqo~yti^?)X6nGCZ.//+]Yonzqi_X0//+]>Iʞ   	 BP      " & * .  37#37#37#37#5!!!!3'#3'#3'#3'#<<<<xíy_<<(<<(<<(<<ZPh      pt>     7&#"7'7	!%*BF8WU{FC*9oX:W  ubP     55!5!!'!XXddPR    t     '327''	!!iFB*8X:*CF9XU   pt> 2  %&#"6767&'&"67632&'&547676767tBEHY'#&N'$X$)./,0+""" /%Hp*G&/$##*0,0.+"W!'&'&#'ZGGC     uaP /  4767!"!47676763"'&'&'&5!3!&'&5P%T)#$"/*11*/"X$#)%eeZ'&$(0+.!"-+0($&'Ze    t 2  &'&'&'&54767#"'&'2767&'&'32t)H%X"""+0,0-+"$'N&#/'YHEBCGGZ'!&'&'$W"+.0,0*##"/&G    s PX  + B  6%"'&'&'&547676$47676762"'&'&'&'&'&547676762$/+z>_$#R#af#R#)>xbQuR$'68" vc   <  .  676767632#"'&'&'&%&'&54767&'&5476A ''+/54<3o8n23'9%%bb%&:?$ fLLf#&#/:&'+-23-+'rr'+-32-+     V2 e   "'&'.54?654'&'&'&#!"#!".4?64/&4676763!23!276767654/&546767622	Zrrd	Z		c

c	    2 g   "'&'.54?654'&'&'&+"#!".4764'&4676763!2;276767654/&546767622pW\xj	\W	
 4
	    u P^   +  #76767&'&/3#6767!5!!5!&'&'PSJl
R&GG&R
lHSi*n::n**OUä'66'U=;JHd)))dHJ;=    & $  *'$476 7654#"'6732 3267	h5 2S:G]"	L##H	(,Q	>1L%!<    (& $  7327$76545476;&#""j##T*q	(	:^
D89hH,ǳI/1ON2S  #u   	  	!	!j.u-1      	3%!#3!<Zddd       #3	!73#7i<dZd    -   3#˪5ipp h   	#3h5ip    'PT  P  'QT  Q    [  [   	'#'#'##'x\xxjjxx\x,x\ehhP8\x     YY   73373737+.x\xxjjxx\x.x\8Phhe\x,  lE =  072767>54'&'&'&"7#7676767632#"'&w@RNJV<BB!#@@RNJV<B!xxZvx$0YTtglqWZ/../ZSuglj!x?#!!';B]YQS@?#!!';BQ9?xvx`XqYS4..0WYqp{pqYS4..-     O |T <  #"'&'&'&54767676327#7&'&'&'&"2767n^jlgtTY0..0YXplgtTY0$xvZxx!B<VJNR@@#!BB<VJNR@1Z-..4SYqp{pqYW0..4SYqX`xvx?9QB;'!!#?@SQY]B;'!!#?  u$ % 9 M  '7! &'&'&'#536767> !'7$"!3!&'&'&'!#!2767676wx!1cbbc1!
"1cbbc1"
`x]\LM&		&ML\;RR
&ML\]]\LM&ZwxZQvcbddbcvQZ[RwcbddbcwR[xV''LM\7=e=7\ML'e;6\ML''''LM\6   d 8 	 	 
2@	@@	00	]1@
	 `
 990@		 ` 	 <<@`<<KSX 	<<`		 `Y5!!dx	yxUZxx    u 8 	 	 
2@	OO	__	]1@
	 `
 990@		 ` 	 <<@`<<KSX 	<<`		 `Y'7!5!'7wxy	xZwxx   d 8  ڶ
	 22@PP_
_O
O]1 @
 	`9220@ `  <<@`<<@

	`		
<<@`<<KSX 
<<<<` ``

	`Y5!'7'7!dxxwxxUZxxwZwxx     d 8   !!5!!	s]xwx]ix]xZx]xi    u 8   7'!5!'7'7!5	ii]xwx]iix]xwZwx]x    d 8    !7'!!5!'7'XiiiI]xwx]h]xwxiii]xZx]]xwZwx   d 8   !5!3#
Y#xwxݪ-xZxY   u 8   #3!'7'7xwx-\xwZwx   d 8    !5!53#5!
Y]xwx]Q7ii]xZx]Eii    u 8    !'7'7!#3!7'Q]xwx]iic]xwZwx]\ii    u 8 %  77777773'7'7#'''''''uFFxwxcnFFFxwZwxnF  ,X@,  ,X
,  ,X@',,  , X,   , X@',,   , X
',,   , X@',',,   @  ,@',  ,@',  ,@',',  , @',   , @',',   , @',',   , @',',',   
  ,@',  ,
',  ,@',',  , 
',   , @',',   , 
',',   , @',',',   @'  ,@','  ,@','  ,@',','  , @', '  , @',', '  , @',', '  , @',',', '      , @',   , 
',   , @',',   , ',    , @',',    , 
',',    , @',',',     @'   , @','   , @','   , @',','   , @', '   , @',', '   , @',', '   , @',',', '    
'   , @','   , 
','   , @',','   , 
', '   , @',', '   , 
',', '   , @',',', '    @''   , @',''   , @',''   , @',',''   , @', ''   , @',', ''   , @',', ''   , @',',', ''   ,pX,p  ,pX@',,p  ,pX
',,p  ,pX@',',,p  ,pX', ,p  ,pX@',', ,p  ,pX
',', ,p  ,pX@',',', ,p  ,p@',p  ,p@',',p  ,p@',',p  ,p@',',',p  ,p@', ',p  ,p@',', ',p  ,p@',', ',p  ,p@',',', ',p  ,p
',p  ,p@',',p  ,p
',',p  ,p@',',',p  ,p
', ',p  ,p@',', ',p  ,p
',', ',p  ,p@',',', ',p  ,p@'',p  ,p@','',p  ,p@','',p  ,p@',','',p  ,p@', '',p  ,p@',', '',p  ,p@',', '',p  ,p@',',', '',p  ,p' ,p  ,p@',' ,p  ,p
',' ,p  ,p@',',' ,p  ,p', ' ,p  ,p@',', ' ,p  ,p
',', ' ,p  ,p@',',', ' ,p  ,p@'' ,p  ,p@','' ,p  ,p@','' ,p  ,p@',','' ,p  ,p@', '' ,p  ,p@',', '' ,p  ,p@',', '' ,p  ,p@',',', '' ,p  ,p
'' ,p  ,p@','' ,p  ,p
','' ,p  ,p@',','' ,p  ,p
', '' ,p  ,p@',', '' ,p  ,p
',', '' ,p  ,p@',',', '' ,p  ,p@''' ,p  ,p@',''' ,p  ,p@',''' ,p  ,p@',',''' ,p  ,p@', ''' ,p  ,p@',', ''' ,p  ,p@',', ''' ,p  ,p@',',', ''' ,p  pp  ,p@',p  ,p
',p  ,p@',',p  ,p', p  ,p@',', p  ,p
',', p  ,p@',',', p  p@'p  ,p@','p  ,p@','p  ,p@',','p  ,p@', 'p  ,p@',', 'p  ,p@',', 'p  ,p@',',', 'p  p
'p  ,p@','p  ,p
','p  ,p@',','p  ,p
', 'p  ,p@',', 'p  ,p
',', 'p  ,p@',',', 'p  p@''p  ,p@',''p  ,p@',''p  ,p@',',''p  ,p@', ''p  ,p@',', ''p  ,p@',', ''p  ,p@',',', ''p  p' p  ,p@',' p  ,p
',' p  ,p@',',' p  ,p', ' p  ,p@',', ' p  ,p
',', ' p  ,p@',',', ' p  p@'' p  ,p@','' p  ,p@','' p  ,p@',','' p  ,p@', '' p  ,p@',', '' p  ,p@',', '' p  ,p@',',', '' p  p
'' p  ,p@','' p  ,p
','' p  ,p@',','' p  ,p
', '' p  ,p@',', '' p  ,p
',', '' p  ,p@',',', '' p  p@''' p  ,p@',''' p  ,p@',''' p  ,p@',',''' p  ,p@', ''' p  ,p@',', ''' p  ,p@',', ''' p  ,p@',',', ''' p  ,p',pp  ,p@',',pp  ,p
',',pp  ,p@',',',pp  ,p', ',pp  ,p@',', ',pp  ,p
',', ',pp  ,p@',',', ',pp  ,p@'',pp  ,p@','',pp  ,p@','',pp  ,p@',','',pp  ,p@', '',pp  ,p@',', '',pp  ,p@',', '',pp  ,p@',',', '',pp  ,p
'',pp  ,p@','',pp  ,p
','',pp  ,p@',','',pp  ,p
', '',pp  ,p@',', '',pp  ,p
',', '',pp  ,p@',',', '',pp  ,p@''',pp  ,p@',''',pp  ,p@',''',pp  ,p@',',''',pp  ,p@', ''',pp  ,p@',', ''',pp  ,p@',', ''',pp  ,p@',',', ''',pp  ,p' ',pp  ,p@',' ',pp  ,p
',' ',pp  ,p@',',' ',pp  ,p', ' ',pp  ,p@',', ' ',pp  ,p
',', ' ',pp  ,p@',',', ' ',pp  ,p@'' ',pp  ,p@','' ',pp  ,p@','' ',pp  ,p@',','' ',pp  ,p@', '' ',pp  ,p@',', '' ',pp  ,p@',', '' ',pp  ,p@',',', '' ',pp  ,p
'' ',pp  ,p@','' ',pp  ,p
','' ',pp  ,p@',','' ',pp  ,p
', '' ',pp  ,p@',', '' ',pp  ,p
',', '' ',pp  ,p@',',', '' ',pp  ,p@''' ',pp  ,p@',''' ',pp  ,p@',''' ',pp  ,p@',',''' ',pp  ,p@', ''' ',pp  ,p@',', ''' ',pp  ,p@',', ''' ',pp  ,p@',',', ''' ',pp    d ?8    !5!53#5!s]xwx]ii]xZx]Eii    u P8    !'7'7!#3!7']xwx]siic]xwZwx]\ii         	3'#'## -Z-x\xxx\.x\n
#\       733737# x\xxx\xZ'x\#
n\x  O '  =  %"'&'&'&767670327676764'&'&'&pk_V1..1Vbrx`Xk_V1..1V_kpIxXE?#!!';B]YQS@?#!!';BQ9.-\Znl lnZ_.x$-\Znl lnZ\-.)xF!F@RNJV<BB!#@@RNJV<B!     O '  <  %"'&'&'&7676767'732676764'&'&''{pk_V1..1V_kX`xrbV1..1V_kp?9QB;'!!#?@SQY]B;'!!#?EXx.-\Znl lnZ\-$xw._Znl lnZ\-.)!B<VJNR@@#!BB<VJNR@F!x    ?  &54767%#";!"'&54?654'&+7326?>3m>#.4x.=5f"5E+.+>>.+(?35EQ214	'@7FСBndW0>,6,dJ.e?U>.C":sݓ  H  ?   '&'676?7&54?65%!2;#"#!73267654'&+*?.2.4y.E+.+>>.+5f"5o##>7K0F	48D.5GP2J-e?U<.B":tݔdX?+7,     2   	   	5	1 Vd22h   '   
  %#3	5'
:     '   
  73	٪L^8bb:     'B    	7''ٛ>PNq   'B    	'''ٛ>PNq^D   'B   	''>PN    'B   %		'''tNP    'B   5		5''bNP    #u   	u-       3!3!!#!#!5L3ͨ--Ӫ--         333333#######5Ϩ---Ӫ---     :k   7  !!   767654'&'$  $'&'&547676h08rtrrtr@rtrrtrVGFFGrGFFG;:rs죟sr:;;:rssr:Ŭɪ    :k  3 ?     767654'&'$  $'&'&547676!!#!5!rtrrtr@rtrrtrVGFFGrGFFGssB;:rs죟sr:;;:rssr:ŬɪKss    :k  3 ?     767654'&'$  $'&'&547676			'	rtrrtr@rtrrtrVGFFGrGFFG]x3w32x3B;:rs죟sr:;;:rssr:Ŭɪ3x23w3x uM
%'J  '%  &  o    tM #  5!676&'&!!'&'&'77SOJMG79G!SOJMG79G ,FCD4MFCD4     tM +  5!676&'&!!!!'&'&'77!5!7$SOJMG79GSOJMG79G@FCD4٨FCD4Ϊ   tM #  %'&'&'775%676&'&oCSOJMG79GJSOJMG79GmFCD4FCD4     tM 0 9  %'&'&'77&'&54767676&'&&'67'WSOJMG79G]InoSuSOJMG79GIq(P >6=,HK%FCD41IosV<GCD4)AH!+p$.JhgH$     tM. F  '&'&'77&'&'&'&53676&'&6767>='73'64D#'SOJMG79F	F25f'&1,SOJMG69G+4$(']H6H\GLCD55FCD4M	25DCL802&&FCD4x$'a8]HH]    tM  '  3#!!676&'&!!'&'&'7wSOJMG79F	9SWBMG69Gr0FCD4FJ	
<-  tM  5  3#676&'&'&'&'77767654'&c)SOJMG79GcBnnVsSOJMG79F	(6oBEGM~äGCD4K|oUFCD4BDkt=B    tMp  =  3#767654'&676&'&632#"''&'&'77mofdKHGEkyJ?*UOJMG79G;DblmoWISOJMG79G-E6HFgjJG*$Q]GCD4ozlo!FCD43>     tM   A  3#654'&#"32676&'&'&'&'77&'&54767HGCljHHHGkbSOJMG79GcBnnVsSOJMG79G]InoSu/EgjJEHIhgHHGCD4K|oUFCD41IosV  tM # ' +  7!676&'&!!'&'&'773!#3;SOJMG79GSWBKI69GūIFCD4ޥFJ	
</	t    Mm A  6767&'&'!'&'&'77!5!676&'&!2#~-/!SOJMG79F	 ܻ`;`*SOJMG69G4'.$$%(*1_21IFCD4`:H:`*FCD4 %*+0..+#$     tM )  ''&'&'77'7'7676&'&7xSOJMG79GzxSOJMG79GExFCD4yxإFCD4X    tM 3  4767676&'&#4'&''&'&'77#VEySOJMG79GZ>Vy4--SOJMG79G-A 4yhT+FCD4Ea8J'JFCD42P     tM 3  '&'&'77&'&53676&'&67653jVDwSOJMG79G\?Vy4.+SOJMG79G*> 4yriRFCD4LFaIȢJ(FCD41P8    uM    >2&#""&'7327!5~9GA~9G⧅}}g   kb    >2&#""&'73275!~9GA~9G⧅}}Р  ?    j'X$    j'X@$'X W      
  5	5FѶeѦ       
  55FѶ///m  &  X/ &  X   '&  X '&  X &  X/ &  X  N  ; B  %#"'&'&'&#"5>32326#"'&'&'&#"5>32326	5jbn
^Xbh`n
^Vhjbn
^Xbh`n
^Vg@PNE;=LTNE;=KPD:<LRND:<J^po  N  ; B  %#"'&'&'&#"5>32326#"'&'&'&#"5>3232655jbn
^Xbh`n
^Vhjbn
^Xbh`n
^VePNE;=LTNE;=KPD:<LRND:<J^        !!'7!5!	5ZZN@PPNpo      !!'7!5!55ZZNPPN    _N 6 =  #"'3267#"/'7&#"5>327&#"56767326	5jbDS4WVhjbm\Y@/Xbh`ES3VXbhZmMp[Y@1Vg@PD4KUNE;@LTNE4LRN"*,@J^po     _N 5 <  #"'3267#"/'7&#"5>327&#"5>32732655jbDS4WVhjbm\Y@/Xbh`ES3VXbh`n[Y@1VePD4KUNE;@LTNE4LRND:@J^    T  
    5!5!-5	!5!uu/0\^ҲЪ~    T  
    -55!55!usҲЪ᪪/0   N   %  #"/&'&#"5>32326!!	5jan^Xbh`n^Vf@PD:<KSND:
<Jlpo   N   %  #"/&'&#"5>32326!!55jan^Xbh`n^VfPD:<KSND:
<Jl    ! (  #"/&'&#"5>323265-5ian^Xbian^VgsuOE;=LSNE;	=KJ/0:ҲЪ       ! (  #"/&'&#"5>32326-5	5ian^Xbian^VeuOE;=LSNE;	=KJҲЪ/0    ,  
    -55!55!us%ҲЪ᪪(/0٪   ,  
    5!5!-5	!5!uu%/0\~ҲЪ^    6  
    5	5	-55uu/0V/ҲЪа/     6  
    -555	5uuҲЪ۰/'/0K/    &  
  	55p/ѦѶ     &  
  5	5p/om//    &&  X/ &&  X  {  
   5!5	5!@Ѫop9     {  
   !5!	5	!5!@Ѫ       555@pNpop          	55	5@ppU      )  $  .#"#"&'532767676325hV^
n`hbX^
nbj@TL><FNTL><FNEop   0)  $  .#"#"&'53276767632	5hV^
n`hbX^
nbj?TL><FNTL><FNd      % ,  5!5!.#"#"&'532767676325hV^
n`hbX^
nbj@>֪VJ<:DNTL<:DNDop        % ,  5!5!.#"#"&'53276767632	5hV^
n`hbX^
nbj@>֪VJ<:DNTL<:DND   f    $  !!!5!676762!!&'&'&!!C.8d
6WYYV7
e8-;Z{+DD\93[2332[0<[EC,     W    7!!  %5$$}y]]x|  W    %!55 05 %$}$y|]]  W    !!'7!5!  %5$ZZN$}qPP]]x|     W    !!'7!5!5 5 %$ZZN}$qPP|]]    	K     75!5!  %5$!:[]3֪k-QtXVv    	K     75!5!5 5$%$][:!3֪kVXQ-     qK    !5!7!5!7!!!!'  %5$&`ȉ)P"_=6!:[]ss1st-QtXVv     qK    !5!7!5!7!!!!'5 5$%$&`ȉ)P"_=6][:!ss1stVXQ-    y  ; F  #"'&'&'&#"5>76326#"'&'&'&#"5>327>  %5$ian
^Xbib`^Vgian
^Xbian
OOg!:[](NE;=LTN9A=KOE;=LSNE;CE-QtXVv   y  ; F  #"'&'&'&#"5>76326#"'&'&'&#"5>327>5 5$%$ian
^Xbib`^Vgian
^Xbian
OOe][:!(NE;=LTN9A=KOE;=LSNE;CEVXQ-      6 A  #"'3267#"/'7&#"5>327&#"56767326  %5$jbDS4WVhjbm\Y@/Xbh`ES3VXbhZmMp[Y@1Vg!:[]$PD4KUNE;@LTNE4LRN"*,@J-QtXVv   6 A  #"'3267#"/'7&#"5>327&#"567673265 5$%$jbDS4WVhjbm\Y@/Xbh`ES3VXbhZmMp[Y@1Ve][:!$PD4KUNE;@LTNE4LRN"*,@JVXQ-         7	5@pppo        %5555òi         '	'!]#\e#N\#]x#L    
    !77	!	\ݿ##N]##    4    !7	7:\#]x#L]ݿ#\eL#1     4
    %'''	!]ݿ#\eL#1\ݿ#]j#     7 P~ 	   %	!	!!5	5!3!


     7 ?~   %	!!3* ^  V   	!!^* ^V   !!!^      '	'!##L    
   !	 ##     4   %7	7#L4L#1      4
   	! L#1#    7 P~ 	  %	!	!3!߆    ^V 	  !	!!	!EC    uR   #7!5!7Zxx/{xx:x   u-R   	'!5!'xxvx:x   H%   7!!7vx{/xxxƪxv    H-%   3'!!'Zxxvxx  %    !%!!W7 r     %    !!!W7     %    !!,7r<R      %    !!cr<R    !%    	vdxx    !%    	u    !%    	!	uv}x   !%    !	x     %  	      # ) - 1 7  #535#5#5#5##5#5#5##5##53#5#5#5##5qrrrrMrqrrrrrrrtr$ttttrtttttrttr     $#   	!$VVm   $#  	  !	!z0VVOm     Ff    			vvr5kk\SS  Ff   7	\SS    "   	!	R[RG     p (   $   %p@*X֖  MM   	:lLF    MM  	  		N lVF         3!!!!!!#737#73Zb[[K!_l~,   S   3###737#7333#jllnn,8Ȑ      #  3327673#"'!!&'&#"#>32Zʍ&}[Z!_&}[,	%$R/	%$R  6      !2+##7332676'&+!Zjk++uʽ(>?)[qrqqϐђIIА   tf  *  #&'&+;#"&! %327676'&+=/-(~u.;<xf&)(?!M5 *TSWX>=HDh01KKm؍]]=CDBC   & + 4 ;  #7 ''7&7676;7&'&#"76763273763276?	=}!RhgPQ*$)	F`_`]!mcbZaP#B9p5cqr#e9`f01<}NV{``E.'rOs+Ax.ml)3{   2B   333#;#"'&'##73=0.ҡ<sB
Pi=3͏oNPr> W7    >   !#6'&#"#3>323#踃./|hi {/wVuLL-fUOO__edwxL     W   %3###3!p_>E"zA1wH   >   33	3###mHvU782kiEL#     !!#!7!#m_>=g՚oA     c`   !!#!7!j lS7} Qe`R%  s	        73#7#   !2|o*ogr--gE:E^+焀     `f   !!+73267##-E-5M!D&˺   2    
  %!#3!3>R     %  7#36$3$ !"&654'&'" 2 -"-gTDY4U85V(焀֌hxUp]bp]bE   {   0#3632#76&"çރAr1m`Tῆrr:T*    f  	   	##3367632#76&#"Y?TE.E HhDC
A.*1!&G@\\[ny6P(    0  Q{   67632#76&"##33'EnAr1
q?\K<<V=`rr:T*j`j    P      %63#76?676#"<]5ʌQd&5A
	-M21]@/2UPn44%  8     !#3!j""w9    T  `   !#3!dڸZW`3     qh 
 '  "27676'&'2#"'&7673A^th+'?4aj51Ƿhj57~ FIn$&?8q;ˑRh]p[mNssg.  i   !7!"'732676&+732B"%6$5X%y:i=>)
#˾la`b     qv{       &"26    & 6763267LoKoMk'$BnG)
 a_^\\h89`MG8]_2BI[    b  `   !7!!7!!7/I;`x- }Ygt  d    [   33 ŅD@     6 D  .#";#"./&'&'&'73267654'&/&'&7476$32&h_$.uT=
*pgF!?"K`j2(,$sw)nr(7vS;	&Di76v?$/"0hMq/5pYwnI'O8-
!/EF~F,>-`Dk+1&      3#"./&+7!7!l!'Wn|:Bq}g!rpbr'O8?o_nI     }~`   #76#"32632#76##"3$32a!+jz.sZI   4YJɿ*+₂1/     _    # $733>76&7#"733%3R+)%l%Te+*r#-xўD|Hv`Q~    "a_ #  #"$?332676&76#"#3$32-Ұ	7+hr)d*˟YP[yfP  u 	 .  63 ?# 6%#"?3327632#767$.<w/7)ca8*\.IBau{i'\Q (dcZe~PA45Gx=%'	    ]_   #6#"#3$32+iؿ+*f    2*_   #6#"#3$32$32#6#"+hЦ&)~)+oڳg_Q,X   y  $  6#"72767#"7#"?3;73$32 +iǊ#_ԁr!A*jW++Ά8B~BADk6Y  `  y_ 	 "  6#"3%$32#6#"#7#"73$32.e-rNj{**h׸3f6.,
}Q,ȯ      _   !#6#"#3$3+h\)4,     Z 	   6#"32%##"73$321o*q*+v*2*,ǰ   2  ~_ 	 "  6#"32%#7#"76##3$32$32+o-m\p0e*+fy+**,ο}_  h 	 )  32767$76%&#"#"?3326323"x7sf)8+J]z7SrX-;=m;@@]krw?|ӆ    2     !#6#"#'! #76#"$32*iȿ
(
*,8|{aAt     \  p_   %#"7332%332%3#7#" *	-r(\-+nӮ-Ӯ-  \  _   %#"7332%3# *-r$¯Ӯ-   h   #7#"7#"73327332%30p&p#j2⾊B$2Ns^y'     \  P   3$32#6#"#7#"73327**h)*-r2 UyQ,ԯӮ  \     332%3#7#"7D-h)*a&Ԯ-    F_    6#"$7327! 3$36-jǰ':=,`UR'M+9KFƺF4Ǳ  \oJ   %#"7#"7332%332%'3#n(*-r(\-
*ЯӮ-Ӯ,i    }Y_ 	  -  6&32%6#2%#7#'#7!"3$32$32o|-pJ+}Y}+u,Ėp$/Lɿ*e*bMmnϯ-;,ů1.   T   %##3%3%73#Z)_M6ǆqW0̉OoR{oS{x~  2  _   $32#6#"#3**^Q,_  \`   %#"7332%3#*-r@گӮ.@~   _   %#"7332%3 !#732$*-r$hUIqӮ-W׋     7   #3$32#6#")**h,8Q,   ?x`   27#73$32#6#"wL> -:Kо+s4z3殮   ~    3 7# %33+s68,iJNlE0p'2ֲ\-XC)     2;`   !6#"#3$32$32#6#"-_β&&({(-q,`Q,   ~_    #6#"6 %'73 6!"#3$6=E'gɝ',2س/>J#s^Qzn(   L_   3 73!w9 ;?6_C%        $# ?33 73&'#%&'w`2	aZêI3(dRmQr<z׿     2  W_   !#7#"6#"#3$3232%3Z*L~)kλ(2++giV2^-     S   6#"#	!3#"$7#-i|q3Lp/[+,ofCx     |     ! 33 76?37632LJ>A-8/&h>222Ԥv;<  ~   %#7#"33%3.~L߾*h=ӄ%l1.ҭ!5    \)_   %#7##"7332%3.,@*#Fsa3.     z  %  3 7#6! 6%!#76"% .s+G/1fIJ1#W"b3H+0	J29RM?['  Lpg`   )  36767#"'&547>?>7>7#73M!#`n$ig]Fcji81

16S6CE
*S#C98aIk$(LVV/5<4-5^1>*    2'XW   \   !##        #7!#o     R   3!3%X    !733ZX       .  $  %#?>'./.76$32.#"Z22"
&GI.gS%TOl	 /II{4<5/VVL89CFnY1^5YVe  t'  6   t'  6   t'  6   t'  6   t'  6   t&    6 t'  6   t&    6 t'  6   u&    6 t&    6 t'  6   t&    6 t'  6   t&    6 t&    6 u'  6   t'  6   u'  6   t&    6 t'  6   t&    6 t&    6 t'  6   t'  6   t&    6 t&    6 u&    6 t&    6 t&    6 u&    6 t&    6 t'  6   t&    6 t'  6   t&    6 t&    6 u&    6 t&    6 t'  6   u&    6 t&    6 u&    6 t&    6 u&    6 t&    6 u'  6   t&    6 u&    6 t&    6 t&    6 t&    6 t&    6 u&    6 t&    6 t&    6 t&    6 u&    6 t&    6 u&    6 u&    6 t&    6 t&    6 t'  6   7    %   7   3          %#"3!"&76$;3m}8++,uʦ1X   7   '   X  h 7   i  y   )7!3!X!+    \ *   7   .   y   
  !#!	!3{l
Aw1  r   V &   H     =   7   )   7  
   7   0   7   1   7   /    6   7   5      W    .'3;3! &7>#"3=_%~u-wx{8 *g{~bw+؍          9   7   +   a
    5     .#"#$32-Kh'7 `QQ,    ) :     ;     h <      E      !"3!"3!"&7>7.76$3!jXՔ{#~':#orqp ˘     $  2     7  
 (         )7!!7!!7!P!V9!i!ª 7  % ,   R 2   w 8      J   3 ! #6&#"9[9˰//$*\u    x  ;
    s      #  !3	!   !;;5aPKK//+ji       >   !!>>  T>   !##>>@      5>&  _   T>&  _    =#  
  !##!!>>>@#     H  #    !!!!>>>#    L    !!!!>@V!>֨     w`=    !!!!V /V!    i   {j     VX     `+    H) <  #"'&'&#"#"'&54767673327676323 654'&'3/[aUSmxz{[V.'ou#͊hVUpZA@R @,iR	D@@DDDU}N]kA463366336FT]mzkUQ   } )  !"&"# 473327676232654'x1TrTR51
>TnZh>?34ŬonP&?L3(8[77[8\f   ' ,       `'       \a  +     76654'!3#! ! '&54776! xH7>`7?0ʁEHƓdE:;mLfWifVi+fӏbqb̟;  ^h{  *  "3267654'&033## #"'&547  Ɠ'(?''@*Wڸf:jH6NaRL@hHtLAhHs	ҝhO[8x    B  T    	!3#!#!#3!]$>`~"ʀ-+kj   T?{ 
 4  #"326?#7#"&547!#3!63!7>54&#"7>32dob$}"QPfڸWs 
Zd h]3yXd״udcb`A"1Yc..''!,*      767!!3#!#)![>l7O!)_>>_n)a%?x0*AD   p`    76767!!3#!#)!{c9R)SS7t7SP}Q(UԓR:d      #76767!!#!=!Yu1O!)$o0`+     =`   #76767!!+!!Lb\$R|Q}Է3oU  7  	   !!!###Z/B!*ž  M  `   !!!###'h=`3(P  R& 2   y   ^{' y R    se      3#%3# '&76     C11yLS77`77F<H    qC{      3#%3#"32$76&'   !   11N'' 65z56n98    s
j' y  ' y@     q{&  ' y yQ  9W        ' / 7 ? G O    %3#%3#3#%3#3#%3# "2> "2>$"2>"2>$"2> "2>$"2>2+ '&' &767"#"&7>;&7> 676 3#@0M000N0Ŵ0N0I0M00M070M0Ĵ0M0썃!!Ӎ""B
i"E!!ӏ!!B
i!EtIF]97R̬\dfʬ\ʫZee̫ZҜ    Xf #  !!!2+732767654'&#!#!y VZ8;4~~L!>GE&8-~ ժFwJ~ES{zKI">5L/O9+   V`   !!3 +7327676'&#!#!1BB8B,5*ȴn*04 !_B`GT06')    X  h   !!;#"&!y &Q?!M5ժ)      `   !!;#"&7!1?n9i1F~*nH`əa7       W   !2#654'&#!#>;#"(Z8OL.|*ȵi_?wJ~ESf>4L0O9?a   #  P(   s
j   q{   A  X    3#3[
X0X   X    3#	3
$dX       X    3#	3G
X    X    3#	3
X  Q  X    73#3#kɈX  Q  X    3##3
X0X    Q  fX    3##37
$dX    Q  *X    3##3s
X    Q  X    3##3D
X    Q  X    %3#!#3
X   Q  X   3#!!و
GAX  Q  fX   3#3!!و
<AẌ    Q  *X   3#3!!و
xAX    Q  X   3#3!!و
AXd    Q  X   7!!3
X      	  3'#'9Yyk?CUC    ?g 	  #'737E9Yzk?CUC    r  	  3#3#7G4f*D     r  	  #73#73yG3fRo   r  D  d    >     37 !7 !7 > JWJ;:$-H'ŢcmZ     N  `   37 !7 !7 N,6,)~6|MY  p 	  7! *2LP)j*.1      p V{ 	  7! *2LP)j%X.1      `f   3!3+73267!#ww5M!?&v"d_9  LVz   6&#"#3>32+732767]| {/wVu-)ɵF1n*1edH08    L (  !!!2!"&'7327676'&+7!#!!'^iv[@<+s{&`qsNOժ˚8+lhzy&$12KKIJJ+    LT 0  2!"'&'7327676'&+7!;#"&7#733!<iv[@=+^``c&KmqsNM!jv<sՃ(w>>e 8+lh%12KKKJN`>¨    iR    h| &  &54>32& ;#"!27#"'&5476mOĔ$Nh]tA %jJX5RԵ@VCZFxwepJxTa  M  ` 	  !!!!#':+f`Ӕ   { V     	]     33#!+!#	!	!>_>_^%^%>+     N7{ 
 5 @ M  "326?%#7#"'#7#"&76$3!76&#"7>3207>32"326?63!76&#"ko#}!RψnJ!Rψ $#`]!mZ`mZQko#`_E3f{bsٴ)Lfa'
fa..''~D''f{bsٴ)hn<  	n   0  	!3676$3  # '&'!#"32$7>54&;]$Y4I8<<<pb%^^< Ƕ[=@"kZ鬦KLeLPQivvx⣡lv    T{ , ; F  "'&' &54$)7>54&#"7>3267632'254&#"#"3267#r=mr9 
Zd h]g3JUzN?b~h@/3θob$yAZ6'1Yc..''V*<O-@WCacJeyXd״  	    	!3!2673 !"'&/!#;]$'.˴;v[`\qUT    T{ 0 ;  %!"&54$)7654&#"7>3232673#7 '&#"3267d
ޏ9 
Zd h]+h_"{ٸ%NR5ob$1Yc..''FfB,U]ǪlbkQ4yXd״     E    	!!#33&^%\>_\+     N{ 
 (  "326?7#"&76$3!76&#"7>323ko#n!Rψ $#`]!mZ1Z3f{bsٴ)ͪfa..'' 5     E     	)!#!#333#&^%~g!Y>_\iR   N{ " - 0  !7#"&76$3!76&#"7>32333#	"326?!#!Rψ $#`]!mZ`Rko#FKfa..''~mc3f{bsٴ)   VV    	!+73276?!#33P]%qZV|"L12L=_]q?=$%2@  tV{ ' 2  !7#"&76$3!76&#"7>323+7326?"326?/!Sψ%"`]!lZ2L&u|lLbM'߿jo#fa..'' wj8zHB3f{bsٴ)      {    7     33#!	###73Z$;ոu7)     H     33#3	###73w! ow@"j #Ĥ     	  3%!!ʃ!_(^M*       t   37#xI     j  ,   33#!!#73+ !_ר YQ     R   33###737 ׸ R     }   %   3#! '&#7376 !6'! 76:~!~Iœ3~OH=O F'ZaҵCҤֆ  {   '  23##"'&7#73676"!6'&!3276?kV:jb&<ӔlP*r	/?O8?m`{~͐~sUUu%gstg   s
j  $ .   676!   ! '&'!            :$.9;:&EE6Ŕ$.9يH77A77H77A775==5[[4=<4HHH     q{ 
  1  "32676&!"32676&'267632 #"'&'#" N~'',N~''uk65k56Mnn霜ǝ98        "  326765&'&#%!2+3###73m,>XjL+'22/ϒ'"R4IqQ6?qqĐ    WV{  -  654'&"726733>32 #"&'3##7%='$<!M{`?3{&</OBhFtPBgFtdajO\ad̐      % 1  !6+##"&'&747676;267654'&+dkL+uu-\5@6aK6'm!,?rQ6?X=! I4L!'L;'"R4I  V{  =  3767654'&"&#"&'&547676323>32 #"'#`|nj(%='.)-8?7aJ7'_g62!M{`>4ʿm2tpPBgFt@  I4L"&Y;daiP\   Z  /       654''7'#$'&747 !  7#'vH7>bA6=0T4ŔeE;:d360MLeWiHgWh}btҐbpbҏbqXK|}lk     _V{  -  %#"'&747 32733##7#7!7267654'&"VM|`?3>|'! %=(&>ԨdajP\DadPBgFtOBhFt    8    #  3267654'&'33#3+##73m,>	jL+B'ђ'#R2H-KpP6?   V  -  654'&"726##73733#>32 #"&%='%=itI=M{`?3{/PBgFtPBgFtdajP\a      #  3267654'&'33+3##7#73m,>3jL+'ђ'#R2HpP6?^dd    RV  -  654'&"726733>32 #"&'3##7%='%=JvM{`?3{&</PBgFtPBgFtdajP\ad̐     {  >   !#!7!)!+     +V{     3#bԸ{     V   3"&6&#"#367632\I&R!5J*q+u/ksr}}CB     !V{   3"&76&#"#3>3267l~)3]| ι-"Vua
ed  j  #     ~I    !7!7!7!@>>I      3#Z2qe     @
I F 1 0#ll+     D    TVV  !  6#"3#"&763233#;#"'&77M\/=y15%f ~i1F>?)K9^_z10`a     7   !33#!#Z_>e  A  H{   3##>54&#"#3>32ugS7	
j_!{ٸ%Mw	R/HT^ũ`aj$R  O -  %!7!#  47'76767>32.#"%326^NƟp`ku)Z_8( joIO8jf-.ЌWUGG^cyK^w|-  V#{  6 @  4&#"%6'76767>32737 !"&'7326?#"&54?32767vI/L*
Oy ;kGgq) SW7aH"DV$MvyuNň:4Wt01SgVRsLRi`TgC,*TX\j          3!%##'7%'Z{b\^Y0Lu7vUJ ']i         33%##'7%'ww@U&ZB>Ju`Gg>vp>g$Ua           !%37!#'7%ZA|vْyu̝fݙc^)y*V;J$    #{  &  '73>327##%05>54&#"k%Mwqn`Y	
j_!g(aj$)"&g1L/HT^ũ     $ +  #.+#'%!667%&'&+!6767w@U8u-vz{˫]nj`_7^*<@vQ^/vhdo#^YQCr+Hb6:[mT*7   {   .#"%#'73>32H)$	WQu#Is:߻=fBKgXah   1  .#"% !"&'732654&/&#'%&'&74 !2'e]O[(Pwy)oo[y4LWk67HM,G(R/0EFZ]&F(

F& 4{ 2  .#"%#"&'732654/&#'%&'&54$32 #IV2>Yv$eZ?J	A[?((cUc59g 8a"$46tY`;9h#<^  i     3!3#!#"#7676Owwˋ#E8	$opd+9//&r1FRQ   X    3!733##!##73!79jjxM2Mxiin}}}\rk\\~~    G  ' 1  6&#"!3267#"&'#"&7>32>32$"32676zTW`
ksCCDCe'9XΘXy=Z,S^]UdaY2jpa==><><<>L⁂po    M  `      b 	  	#!7!!7bʊ"PUp!+ɪ           #";	##"&76$3~Wu++-/+X  8     3333!8"H˺ Ӻ  +      Lm   3#m   	   %33###3:E.g?E+ -X   !7! -Ј  BX   '33H(sI  rhiX   #'3OWOW  $4wX   #'3]>i]dD   tX   #'3Zq:d07!  X   	#[(8ẌI   $"   h$#   64-$$    ;$%    hX   #7OZyW    h$'   h"   Z4#    $    4X   #7]ZDd    4$,   4'   y4f"Ld     #Ld      X   %#7dć(!70   $1   j  y,   H  R'Ld   >  + "0    Q  X   33Q
X     ! 73! 76 3 "t&utȄR0&T'5p<)%	s    	   %! 7 7%36'&733MS\&0[8iVtt$XQgUNK7a<=QRlE      	 !  ! ! 7! 7%3676#"#! ;YXYXNY}zd^a"*LW\E)V~b_]aW>xN\adUr     $ .  %67 7!26! $767&# !6'&! $takym v :wD3FcaurUL!T ON!Vm0w_c-SR@@]wl   5   ! 3!6!"#! xg"iЮF':G,6TO/Os      !   3! 76'#7366##7! 66h8mpyI'0G+$[6.7	U|s}Ns(P
    2 	  &  "673! ! 7! 767&7! 3D/'T{STYG=W|~+Uc-6ߴ_c	vK]XKRF.%@     z 	 "  ! ! %!$#"! !663 #RRYYxh8|cPM{.<{tep\Fy-Cm!       ## #! P^WQQW\hTRWss{C~fSy    @   ! 3 7+73$76'!xhjizH'0EC#% <8K$Dx<mdc  8  	 5  %67$7!26 63 # ?# ###6!"6!&%$bp:hJEf(X*E 1YY76YY/F2xC{벻gd?GZ ZyA#v\[  * 	   &'  ! 7%276%#! b]C'N:%m2m%i融,5JIQX?bJ88l|c    	   !"! 7! )!"63 	GɨeH5+E5h#hRQ"1*OK&DTU     `    # !"#!"#!263 XIbR@>RbJXbtEtfnU(}1(!        ! 73! 76'#73$76$73|c0f:CD5!D)&s%#u4 ]/&%0߳?C-?rݲyn        % 3! %776%7%yi!}[!3GF-R&+(q#JVO;2x}ΰ_       l &  # 7% #! # 7%$!$7 63 lXkFG@JJ?GDIXYJJ"
W|bbIK^(w4        ! 3! 76'&?3
k#~T+5F&_^[{hh-RkmvIK|   ,  327676'&'##733! '&76767FE(E@A D'JG1RT'F+kj-F&/xx@D\űIR  %   ! 3! 6#"#6'#7363 ro4dx˃GBB#§VF
")qP.5ThM . 	 ;  ! ! !#"'&73;2767+?67!"%7!263 #ONSS.dϏ_`JƉ6| </B#uI+upCZ<vyԒlm;B>di5pr)Z{      ! 73! '#'23xh#hftF!?Gut%JmYN$^     *  %67 7!23 # ?! # !6'$skQe4!3HTDDTG^kvOb" K a`TRt@mMpRcE    ~   ! 3! 7673673vg!^W\;!?Ek4^	#	>y	Dc(Ԕ(
t9   ;  #  &#  ! 7!6#"#76!7 63 adNQ`l1	pl㈥K&&"~KGIr]=`|::    e     76#"6# ?&#! /;0Ěa77%%;ـο_U93rh=^ub|      *  #".7327676+73$76'&73#8=m%X>4X7rt$3"Z){⣥X,=ceHITDD    ~ 	   &# ! ! 7!3YTUUDpzz䣅}PpYql>J=OI      $  !26! #76#"67 ! 3! 7!"C[8M"""!Kgu	0uQIOHωy:DDUwqR`     #  #3#! 73! # !3'33;#"c~
h#hjwF 5Gg@B^#i5N-6ϥG     	   !! 7! 363RˣZT9&Rw&u{UXvn_%O   E %  %!7 7676/%77676&#732j9.+"sq(d?mW	>@!:;*̊ntr?@z(E)*8KJhJ7     &  ! 3! 6+73276'#73276!#73 3m]!nL!-;*&Ӛ' 'mv"vQI!IųyaNGn   % +   3! 6'#73276+73676!7 #7gE0':0&l!'p&"@&)|k\M}ҩOg~!<6-)NNrN    -_ 	 !  $! 27#! 3"'#'WCWYXXVPJZyzYJEFi)hxxbS^9^<
	       ! 73! 7+73$#%l]%d,/?%(;!<#{P2Uz.@Lxq      ! 73! !#73$#3!273wg!gE -EK%nm]!O*!ާ0\掎F`ou     %  !$! 7)6! ! %#&! 3#3A@&24`E9X0(V#b=#DeR (B'bxl!j`?ʸ    .  6'&#  !"'!7 7!"! 7$7 6!'7)00<V@ 't}"V/"4>ڋ]])6G%#i66N['v(LNk݇lx#NM Ľ     |0   #  32%$76#"##"6%3$32-s*prA}-Z%8@&J}>@JN,FhI(2:(jn     i(Y 4 @  $67#&'#6%'67$%&?3327676'&73#"6-kc{mgTZFo@9WB*{cSSFQI.JaoTI{-"HB]W"C jfE, fU)fިYlg/8Mu=SN;zԤR4]

  ]    !!! 73326$73V a[]_SOAC./# 8<ݭ~~    K8     3#%3#! 73326$73++a[]_SOAC./#8<8<ݭ~~     k       ! 73326$73!!3#%3#a[]_SOAC./#V++8<ݭ~~%     X    3#! 73326$73mƭwa[]_SOAC./#&8<ݭ~~    D     3#!!! 73326$73㙯V )a[]_SOAC./#y8<ݭ~~  jy     3327! 73326$73jP*v7a[]_SOAC./#y18<ݭ~~   9    !!! 7332#"#'! 9VRYtYYPI;;74SnV7\o    9d    3#! 7332#"#'! ƭYtYYPI;;74SnVde\o     96     3#!!! 7332#"#'! ䷰VtYtYYPI;;74SnV6y\o  9y      3327! 7332#"#'! P*v7YtYYPI;;74SnVyH\o     {    ##"#! !!9ۭ>UV=TU9sVD!#m:       d    ##"#! 3#9ۭ>UV=TU9sƣD #m:    y    ##"#!  33279ۭ>UV=TU9sP*v7D #m:    G     # #"#7#"#!263 !!G@jDPJ,,JQCBo&rVV@~Y$3
     G8    $  # #"#7#"#!263 3#%3#G@jDPJ,,JQCBo&++V@~Y$3
  G(    $ (  # #"#7#"#!263 !!3#%3#G@jDPJ,,JQCBo&TV ++V@~Y$3
7%  Gd     # #"#7#"#!263 3#G@jDPJ,,JQCBo&ƣV@~Y$3
     Gy  %  # #"#7#"#!263  3327G@jDPJ,,JQCBo&P*v7V@~Y$3
   qu  $  !!! 73!26#"#6+'73263 VYnGYIG;;%{T@Rd6MP'k0C6]g[x(2     qu8   (  3#%3#! 73!26#"#6+'73263 ++YnGYIG;;%{T@Rd6MP'k0C8R]g[x(2  q<    ,  !!3#%3#! 73!26#"#6+'73263 V ++YnGYIG;;%{T@Rd6MP'k0C%N]g[x(2  qud  $  3#! 73!26#"#6+'73263 У"YnGYIG;;%{T@Rd6MP'k0Cdd]g[x(2     qy  )   3327! 73!26#"#6+'73263 P*v7VYnGYIG;;%{T@Rd6MP'k0CyG]g[x(2    qu  '  #'#! 73!26#"#6+'73263 EYnGYIG;;%{T@Rd6MP'k0Cx]g[x(2    7  /  " 6764'&!!"32  '&5477&547>''?(''@(`lH5 jGAeMHsLHu52/hN\ƝhN\MD|        % @'  &K	TK
T[KT[KT[KT[KT[KT[KT[X 8Y1 @	o}%\~/<<2<<220@$	 
 <9<9#"!!#!##737676;#"!76763c\/Ѿ$hgc\$hgPhc//яNUVPhcNUV    !   @ (%K	TK
T[KT[KT[KT[KT[KT[KT[X 8Y1 @o
c} \~/<<<20@" 	
<9@o_]3#'#"!#!##7376763h-hd[۹&_`Oic.яNPP    !  @%K	TK
T[KT[KT[KT[KT[KT[KT[X 8Y1 @o	} \	~/<22990@!	9@_]!#!"!!##737>%ѹd[/Ѿ&{Oic/яNǟ       + / @,1.(-% &"0K	TK
T[KT[KT[KT[KT[KT[KT[X "8Y1 @ $o%/c},+\%~"/<<<<2<<220@6,-/.-. #&!"&"<9<9@1o1_1]#"!767676;#"!#!#!##73767633#c..$h!+Vc..ٹ$hg-((hcNU'((hc//яNUV     ' @)% "(K	TK
T[KT[KT[KT[KT[KT[KT[X 8Y1 @ o!}'\!~/<<<2<<220@+""<9<9@)_)]#"!76763!#!"!!#!##7376763c\$hg ҹc\/Ѿ$hgPhcNUV{Phc//яNUV   m   5  7654'&+"##737676;2!!;#"'&547#7e"c/.$hhF-{vsA)v`c+!-(((h=яNUVV6c5BNA+0'P1b=Q`   l  &'&#"#"'&'732767654'&/&'&547676326767632!!;#"'&547#737654'&"!NFPFuGC *=D1`X^e%\^]aOO%=>+ uHKnlM8{vsA)v.CE?=?+*'W,$!+L7V"&[[#5-,Q1#*$J5Q!&NV_]_D] #LA+0'P1b=Q`N. 210@+    o	) J  #7#"&73326765!"'&7676;#"3!'&76;#&!32673#7#"&7t!Wu-ED]| NSLD dvY"Ym).O"`݃/.| {ٸ!Wu-b%!fcf$^SBW{8Hz,'"aOO{fc   o	) :  !&#7#"&7332676/&763!!!327673#7#"&7`)!Wu-]| N)(-OU!a]|fj=!Wu-e,'"xMfca?'GzL_b;fc  V 5  !&#7#"&7332676/&763!>32#6&#"#`	)"Wu-]|N	().OwVu-]| ιe,'"xMfca?'Gzed\     V	O 5 <  !"'&76763!!32673#7#"&7#3!#"&7332767!"3ەLCdvU]||ڸ"Wu-c suWu-FE]|ii|3ۃ^SBWLa{fcBVfcf__{{   V H  !&#7#"&7332676/&763!6763232673#7#"'&?6&#"#`	)"Wu-]|N	().Ow|*ck---)n|ڸ"WlJL,,]|x ιe,'"xMfca?'Gz2XO{fcx{䟞     [`'x0   n    332673 '&54rv&)WVnv&A3B#%JLH9d  [`'OD    N  X`   27676?3#!7!=	|V70:1HY{xj"	`Qq<vtoE'    `    	##>73>734.mmY44kC3.mnY40Pczji8^X
dwNji8^XVnZ7      `   ##!7!{ʾe/я    `    #>.#!7!2%#}``2ei+ՅL
xvjt@,?]ET`   X  7`   !2#!7!2>.#!2ז{?"Ay(qtR-(Xq(`AiiA*HnuunH*        !!3!\pTCL$      `    )!2!>.#5g!K'OjO`<٧^h=)   >`   #>.#!7!2"gg?t7fm)<    aE`   #>.#!#"'73267#7!20vv	4iP$n)5J?&GDnCQ	^`Jce:%r3C  E-i   !7!3!G!-mm---      X&@  "      -&@  V     `&@  &" X     -&@  '"  X y`&'       uy`&'       y`&'       X  d`&(  G   X`&)      `&*  )     `&+  l      `',          `&-z k  !Fk&/  {    `'0   {   V`&1  5   X  F`&2  \    &3  #     +p&5      X  `&7    '.`&8  r    Vi`&: c      `&;      X  `&=     V_&>  A     M`&?  t     -`&@  r `&A  c      w&,  "/   X  d&(   [    X  F&2   7      &;          k ,  ##7>7#33>73'B./4$/1B7I0"pTx*'B//4$/2A8I0eX5AnEQ`Q2,BL6AnERaQ1,  rn   "7,3T)gi~wu    Tn   72&$TQԚuw~ig    WX'   /&'&#"#676329L*$e<O~[<5QH7
$0GJI   9:'   327673#"'&'XL*$a@O~[<5Q7
$,KJI    TL  ! %  %#3>3237>?>54&#"	1ˬ%hP`mDTjoN8ThykjL6>BGVL9jFY\^{\^BTbg8    #  
  '3!	!#K_z#N@
|    7V 	  $  327676&#632!"'327676&#g]4H|d(),d`ow8п~#r;BYWa{zzp4=8h   dh   		f
ww     7  -    33 !7>76&'7"Z
P?\kIxzebcz\
  4     #%%$<(>>?>?6uSXSX   4   	  #%(>>?*uSX       !#3!73#'X###մm    7       !!!!!Yp_\\]+E$#       #    $&6$ 6 7!!! !6C>8:CGDaݳaaN{{ : {{0     7     3#Y޴+  7 
  3#3	"j^[={C   7     	#3'bgǀ"3 M     4  O   3		#Vtg>e9/S.L    4     3		#Vtg9SL    7  -       !!!!!!!j\\,C\\\\4\\$E+!$$o$      '   >."26  $&6$ "&>2O.2.2C>8:C[btBbtBߞ__ߞ__X{{ : {{RRtRR  5     $76&!"#63  
)#58"~b_6AdYfԶ     7     33	3#	7"s޴y^+_C    W     6."26$#&'.>20o`0oqGK{{D:\P/Q|HH|}HHL;%w%<yy     5  o     ##63 7676'&#"k51}R"~	va*0N$\osrlX   R/ 	  		^gL^^    J   %#%7JYNݴ?Z   5  .   #3g(m"\  k   	7			'Qɩ	7b_b]Xbdb         $  !#7&'&76?3676'&(iY''hYdZ<X=edZW<Ǣ90Ll2lKHLnnL        !#73^^cg~     R   %   6&"2$ &767&'&$ 6&"2"c"c9>8<2&\?B>8<2&\]"c"c {{{1Bs/.rCs/.rî{{{     5  " 
   3632!2$76&#"5"$(} *1gNvc  9 
   3 #"'032676&[,)%2a/*gнcv  S  M   7!3#S#޴+       1    	#7 "&>21&btBbtBN@&RRtRR    7     #   '3#K#N@&    k    n  1   	#nRq>,;X        !5!5!)5!S2SR    ='  ]j  C   7'k  F  X   :
'j  :  b   ;
'  bk  <   =
'  b  ]     tH'j   'j  &j  j     tH&k  'j   'j  j     H'j   'j  'j          tH'k  'j   &j  j     tH&k  'j   'j  k     H'   'j  'j   k       H'j   'j  & j       H'j   'j  & k       H& 'j  'j         tH'j  &j  'j  k      tH&k  'j  'j  k      H'k   'j  'j          tH'j  'k   'k  j     tH'k  'k   'j  k     H'j  'k   'k          H&j  'k   'j        H'k   'j  &k        H'   'k   'j      H'j  &j  'j        H'   'j  'j  k     H'j  'j  '           H'   &j  'j  k     H'k  'j  &k        H'k  'j  '           H&j  & 'j          H&k  & 'j          H'   'j  &       tH&j  'j  'j   k     tH'j  'j   &k  k     H'   'j  'j   k       tH&j  'j   'k  k     tH'k  'j   &k  k     H'k  'j   '   k       H&j  & 'j   k       H&k  & 'j   k       H'   'j   & k     tH'k   'j  &j  k     tH'k   'j  &k  k     H'   'j  'k   k       tH&j  'k  'k   k     tH&k  'k   'k  k     H'   'k  'k   k       H& 'k   &j  k       H& &k  'k   k       H& 'k   '   k     H'   'j  &j  k     H&k  'j  '   k     H'   '   'j  k       H'k  &j  '   k     H'   &k  'k  k     H'   '   'k  k       H'   & &j  k       H'   & &k  k       H'   & '   k     H'j   'j  &j       H&k  'j   'j       H'j   'j  '          H'k  'j   &j       H&k  'j   'k       H'   'j   'k         H'j   & &j         H'j   & &k         H& 'j   '        H&j  'j  'k        H&k  'j  'k        H'k   'j  '          H'k   'k  &j       H'k  'k   &k       H'k   'k  '          H&j  'k   &        H'k   &k  &        H'   'k   &      H&j  'j  '        H'   'j  &k       H'j  '   '          H'   &j  'k       H'k  &k  '        H'k  '   '          H&j  & '          H&k  & '          H'   & '              #3	!!#!]W:\w98qq+_      N      % *  !2#!327&#363&#!3654/654'f;33;$  $#>]a{wDD66    3      !   )327&#!36'hPcp~qAAk{q       S    3%!!!!!!-x9vqdddsd      	   !!!!!#3#oQn.ddq     s  &  &$#"32767!5!#   !2deVRuu^oRaG@;@&5dSUmnHFcI     f      3%!#3!53#.nXddddqdddd  fY    6765%!#!53265-V?O?nqd
J^	dd     0 
   !3	#!3pdw@1q    2  	  !!!3ddo      o     !#!!	!3!3_Gbn}qR+q     r    ' (   ! '&76 7& 676'&&:żGlllli$  #ab2222jT%%5$c$       -  6&/.4%&  %5 64&/.$ Pdo&nŢmngzoʷ-[ʚ)'NXd''pui$2Xf| /        3%!!!!rpqddq          $!&%! 65!   X!!Y fqba@`|gd5\*$      
  3%!	3!dqd+   D       	3!3%!	!	3!	!D5D:9:9d|qd+   l      	3%!	3	!	#(\~vbL:H|dqd22{         	3!!	#3ndp29V  {{  " , 3  4&'3!5#"&546;54&#"5>3 5#">76/=Kd?Vu`Tw86/^b;:gCzӆ]YfaH..t''UNHGgwt        -  !>32 #"&'!4'&'676763&#"327N:| |:^,<<,9RKM_]daadt= z =OsKTdihtJ   q{  #  %#"  !2&'&#"3276%M]-ULEmGJXHCQRHV,${z$d$$>:##dWS%&       -  !!5#" 323327654'&'&#"N:| |v9,<<,^(]_MK^daDDaZKsO=  =Td6Jthi  o}{     !327#   32 !.#"}K_mk)#i̩J@b]u-)8
CqzӾ    /   
    3476%#"!!!#5354763g.9:9|WX
-8J_D8d97ddddTV   qV{  # . =  65326=#" 325! !"&32767654'&#"jlQR:| |:Nry^,<<,9/KM_]=ʌo,*qdaDDad-w=  =OsKihtJ     H 
  "  34'&3'!>32!4&#"! 	GS5OIƁkkh@[:Lded\ПU    5     33#!!JKOh    V     #676#532765!3#%G(=1l$%OQRaеT0Hd01``      2 
   !3	#!3OHіmdi#L        &5#"'&5!3J=(G%RQOLiH0T0Z``~J^d      { " & 1 <  !>32>32!4&#"!4&#"!3%34'&%34'&OIƁԝTށkkkkd[	GS5	GS5`edJv\П\ПUhh@[:h@[:      H{ 
  "  34'&%3'!>32!4&#"! 	GS5OIƁkkh@[:hded\ПU    qu{    #  2  #"  27&"676'&s3x33x3d4'pp'3(pp({98kp-$-R-ۀ-     qV{    -  %!!>32 #"&4'&'&'676#&#"32N:| |9,<<,^؆]_MKdaaKsO= z =oHJthi   qV{    -  %#" 325!!3#32767654'&#":| |:N<^,<<,9(KM_]daDDad=  =OsK2HHihtJ      {    3'!>32.#"!N:4I,hdfc˾z  o{  E  67654'&/&'&5432654&/.54632.#"#"&'i'K&'q4=B%%U+.39GSOjqL4vfLJ\_opPx3Zl=vf03"3;@{R?Bsl37'*7CoT78^UNO,, z1$YXDL#/%%  7      %&7#!!;!"&5#53*\{KsբjU|7N(dUNdudT   D` 
  "  %&'&5##!5#"&5!3265!	GS5CIƁTkkTShl[:hded0     =  `  
  3%!	3!YT^^d\hdT   V  `     3!3%!!3!!bTNdhhdjjj     L  `    	3%!	3	!	#U|p|[hd-s    =V`    7%!	3+53267>^]_lP|XQ+ۙdi8{dCY   X  b`    	3%!!!5!\vwhddhdd      $   7    %   V &   7   '   7  
 (   7   )   \ *   7   +       f! -   7   .   7   /   7   0   7   1   R 2   7   3   T 4   7   5    6   X  h 7   w 8      9     ) :     ;     h <     =   T`{ D   J E   ^J{ F   ^ G   ^{ H      I   BV{ J   H   K   H  / L  V7 M   H   N     /   H  ?{ P   H  { Q   ^{ R  V{ S   ^Z{ T   H  { U    { V     b W   u` X     ` Y     ` Z    ` [  V` \    X` ]                6/&"27

d3{44{3ss#Տ0,-  k      37!!5!5%6bJJgqdddHdH         (  7!676'&'$32!!76 76&#" )`"LlDbZE0Q](=ymd͕@9\9pd9hbiddAb     s $ * 0  "'5327&+5327&#"56325654&'>54+!ĪeO6?;2:LuWEdJjD
d 
<h@Ѳ|!ŐUl$yX     Z       #3	!!3#!!5Qpq3d\         #66'&#"!!!"'532gd1jKEн܁\`I
Kd#	F<d   q  	  %  %6'27&"2'& 632  #   |&d:-(?"^BhPpc\ʳ#2"<j6-f/   A    
  	3%!!!Sqddq       $ ) 1 9 A  %6'&' 5.54$  $54627&"27&"676'&X_!,, L 51p11p10r00r, `_!dJN'M г #ŏُlfNa0!MM  j  	  %  6/&"27"'5 7#"  3   d:-(?"*^Bh!cc\6oݕ2t<j6-s%[   F
!;    3#!.	Y_$     F
!;     7!'!%3	YٍF%=     F
!;    "  4767632"'&'&!'!%30&$I	Yٍ$$%%=    F
!;  , 0 4 8  "'&'&4767632"'&'&4767632!'!%3$$%$%$	Yٍ?H%$HG%=   F
!;  + A E I M  "'&'&4767632"'&'&476762"'&'&4767632!'!%3$$%$H$%$	Yٍ?H%$	JHHG%=    F
!;  + A W [ _ c  476762#"'&'& 4767632"'&'$476762#"'&'4767632"'&'&!'!%3'H$%$%HH$%$%H	Yٍ$JJ%$J%$S$J%=      F
!;  + A W n r v z  476762#"'&'& 4767632"'&'$476762#"'&'4767632"'&'&4767632"'&'&!'!%3'H$%$%HH$%$%H&$I	Yٍ$JJ%$J%$S$J$$%%=  	  F
!;  * @ U i      "'&'&476762"'&'&5476762 "'&'&4767632 "'&'&'476762"'&'.76762 "'&'&54767632!'!%3$H%$HJ&$UJHJH~J&$	YٍRHJ%$HG$$%$HGH%$H%=     F
!;    !  476762"'&'&!'!%3JH	Yٍ$$%%=      F
!;  , 0 4 8  476762"'&'&%4767632"'&'&!'!%3JHd&$I	Yٍ$$%%$$%%=    F
!;  , B F J N  476762"'&'&"'&'&4767632"'&'&4767632!'!%3JH$$%$%$	Yٍ$$%H%$HG%=      F
!;  , A W [ _ c  476762"'&'&"'&'&4767632"'&'&476762"'&'&4767632!'!%3JH$$%$H$%$	Yٍ$$%H%$	JHHG%=   F
!;  + A W m q u y  476762"'&'&476762#"'&'& 4767632"'&'$476762#"'&'4767632"'&'&!'!%3JH]H$%$%HH$%$%H	Yٍ$$%.$JJ%$J%$S$J%=   	  F
!;  + A W m      476762"'&'&476762#"'&'& 4767632"'&'$476762#"'&'4767632"'&'&4767632"'&'&!'!%3JH]H$%$%HH$%$%H&$I	Yٍ$$%.$JJ%$J%$S$J$$%%= 
  F
!;  * @ V k       476762"'&'&%"'&'&476762"'&'&5476762 "'&'&4767632 "'&'&'476762"'&'.76762 "'&'&54767632!'!%3JH$H%$HJ&$UJHJH~J&$	Yٍ$$%HJ%$HG$$%$HGH%$H%=     F
!;  + / 3 7   "'&'&4767632"'&'&5476762!'!%3rJ%$$Jm	Yٍ@H$%$%H%=      F
!;    " 8 N  4767632"'&'&!'!%3"'&'&4767632"'&'&54767620&$I	YٍJ%$$J$$%%=H$%$%H    F
!;  , 0 4 8 N d  "'&'&4767632"'&'&4767632!'!%3"'&'&4767632"'&'&5476762$$%$%$	YٍJ%$$J?H%$HG%=H$%$%H   F
!;  + A E I M c y  "'&'&4767632"'&'&476762"'&'&4767632!'!%3"'&'&4767632"'&'&5476762$$%$H$%$	YٍJ%$$J?H%$	JHHG%=H$%$%H  	  F
!;  ) > S W [ _ t   476762"'&'& 476762"'&'$476762"'&'476762"'&'&!'!%3"'&'&4767632"'&'&476762'HIIHHIIH	YٍI%$$I$II%$I%$S$I%=HIIH    
  F
!;  + A W n r v z    476762#"'&'& 4767632"'&'$476762#"'&'4767632"'&'&4767632"'&'&!'!%3"'&'&4767632"'&'&5476762'H$%$%HH$%$%H&$I	YٍJ%$$J$JJ%$J%$S$J$$%%=H$%$%H    F
!;  * @ U i        "'&'&476762"'&'&5476762 "'&'&4767632 "'&'&'476762"'&'.76762 "'&'&54767632!'!%3"'&'&4767632"'&'&5476762$H%$HJ&$UJHJH~J&$	YٍJ%$$JRHJ%$HG$$%$HGH%$H%=H$%$%H     F
!;  + A E I M   "'&'&4767632%"'&'&4767632"'&'&5476762!'!%3rJ%$$$%$Jm	Yٍ@H$%JI	$%H%=      F
!;  + A X \ ` d   "'&'&4767632%"'&'&4767632"'&'&54767624767632"'&'&!'!%3rJ%$$$%$J&$I	Yٍ@H$%JI	$%H$$%%=    F
!;  + A X n r v z   "'&'&4767632%"'&'&4767632"'&'&5476762"'&'&4767632"'&'&4767632!'!%3rJ%$$$%$JV$$%$%$	Yٍ@H$%JI	$%HH%$HG%=    	  F
!;  + A X m       "'&'&4767632%"'&'&4767632"'&'&5476762"'&'&4767632"'&'&476762"'&'&4767632!'!%3rJ%$$$%$JV$$%$H$%$	Yٍ@H$%JI	$%HH%$	JHHG%= 
  F
!;  + A W m        "'&'&4767632%"'&'&4767632"'&'&5476762%476762#"'&'& 4767632"'&'$476762#"'&'4767632"'&'&!'!%3rJ%$$$%$JH$%$%HH$%$%H	Yٍ@H$%JI	$%Hz$JJ%$J%$S$J%=      F
!;  + A W m         "'&'&4767632%"'&'&4767632"'&'&5476762%476762#"'&'& 4767632"'&'$476762#"'&'4767632"'&'&4767632"'&'&!'!%3rJ%$$$%$JH$%$%HH$%$%H&$I	Yٍ@H$%JI	$%Hz$JJ%$J%$S$J$$%%=    F
!;  + A V l          "'&'&4767632%"'&'&4767632"'&'&5476762!"'&'&476762"'&'&5476762 "'&'&4767632 "'&'&'476762"'&'.76762 "'&'&54767632!'!%3rJ%$$$%$JI$H%$HJ&$UJHJH~J&$	Yٍ@H$%JI	$%HHJ%$HG$$%$HGH%$H%=      F
!;  ) > S W [ _  476762"'&'& 476762"'&'$476762"'&'476762"'&'&!'!%3HIIHHIIH	Yٍ$II%$I%$S$I%=      F
!;    ! 6 K ` u  4767632"'&'&!'!%3476762"'&'& 476762"'&'$476762"'&'476762"'&'&0&$I	YٍHIIHHIIH$I%=m$II%$I%$S$I   	  F
!;  , 0 4 8 N d z   "'&'&4767632"'&'&4767632!'!%3476762#"'&'& 4767632"'&'$476762#"'&'4767632"'&'&$$%$%$	YٍH$%$%HH$%$%H?H%$HG%=m$JJ%$J%$S$J    
  F
!;  + A E I M c y    "'&'&4767632"'&'&476762"'&'&4767632!'!%3476762#"'&'& 4767632"'&'$476762#"'&'4767632"'&'&$$%$H$%$	YٍH$%$%HH$%$%H?H%$	JHHG%=m$JJ%$J%$S$J   F
!;  + A W [ _ c y     476762#"'&'& 4767632"'&'$476762#"'&'4767632"'&'&!'!%3476762#"'&'& 4767632"'&'$476762#"'&'4767632"'&'&'H$%$%HH$%$%H	YٍH$%$%HH$%$%H$JJ%$J%$S$J%=m$JJ%$J%$S$J     F
!;  + A W n r v z      476762#"'&'& 4767632"'&'$476762#"'&'4767632"'&'&4767632"'&'&!'!%3476762#"'&'& 4767632"'&'$476762#"'&'4767632"'&'&'H$%$%HH$%$%H&$I	YٍH$%$%HH$%$%H$JJ%$J%$S$J$$%%=m$JJ%$J%$S$J   F
!;  * @ U i          "'&'&476762"'&'&5476762 "'&'&4767632 "'&'&'476762"'&'.76762 "'&'&54767632!'!%3476762#"'&'& 4767632"'&'$476762#"'&'4767632"'&'&$H%$HJ&$UJHJH~J&$	YٍH$%$%HH$%$%HRHJ%$HG$$%$HGH%$H%=m$JJ%$J%$S$J    F
!;    ! 7 M c y  7!'!%3476762#"'&'& 4767632"'&'$476762#"'&'4767632"'&'&476762"'&'&	YٍH$%$%HH$%$%HJHF%=m$JJ%$J%$S$J$$%  	  F
!;    " 8 N d z   4767632"'&'&!'!%3476762#"'&'& 4767632"'&'$476762#"'&'4767632"'&'&476762"'&'&0&$I	YٍH$%$%HH$%$%HJH$$%%=m$JJ%$J%$S$J$$% 
  F
!;  , 0 4 8 N d z    "'&'&4767632"'&'&4767632!'!%3476762#"'&'& 4767632"'&'$476762#"'&'4767632"'&'&476762"'&'&$$%$%$	YٍH$%$%HH$%$%HJH?H%$HG%=m$JJ%$J%$S$J$$%      F
!;  + A E I M c y     "'&'&4767632"'&'&476762"'&'&4767632!'!%3476762#"'&'& 4767632"'&'$476762#"'&'4767632"'&'&476762"'&'&$$%$H$%$	YٍH$%$%HH$%$%HJH?H%$	JHHG%=m$JJ%$J%$S$J$$%   F
!;  + A W [ _ c y      476762#"'&'& 4767632"'&'$476762#"'&'4767632"'&'&!'!%3476762#"'&'& 4767632"'&'$476762#"'&'4767632"'&'&476762"'&'&'H$%$%HH$%$%H	YٍH$%$%HH$%$%HJH$JJ%$J%$S$J%=m$JJ%$J%$S$J$$%     F
!;  + A W n r v z       476762#"'&'& 4767632"'&'$476762#"'&'4767632"'&'&4767632"'&'&!'!%3476762#"'&'& 4767632"'&'$476762#"'&'4767632"'&'&476762"'&'&'H$%$%HH$%$%H&$I	YٍH$%$%HH$%$%HJH$JJ%$J%$S$J$$%%=m$JJ%$J%$S$J$$%   F
!;  * @ U i           "'&'&476762"'&'&5476762 "'&'&4767632 "'&'&'476762"'&'.76762 "'&'&54767632!'!%3476762#"'&'& 4767632"'&'$476762#"'&'4767632"'&'&476762"'&'&$H%$HJ&$UJHJH~J&$	YٍH$%$%HH$%$%HJHRHJ%$HG$$%$HGH%$H%=m$JJ%$J%$S$J$$%  	  F
!;    " : P f |   7!'!%3"'&'&54767632"'&'&54767632 "'&'&4767632"'&'&'476762"'&'.76762 "'&'&54767632	Yٍ$$%%$$%J%$0$H%$HJ%$F%=%$J&$$%H$%$%HH$%$%H 
  F
!;    " 9 Q g }    4767632"'&'&!'!%3"'&'&54767632"'&'&54767632 "'&'&4767632"'&'&'476762"'&'.76762 "'&'&547676320&$I	Yٍ$$%%$$%J%$0$H%$HJ%$$$%%=%$J&$$%H$%$%HH$%$%H      F
!;  , 0 4 8 O g }     "'&'&4767632"'&'&4767632!'!%3"'&'&54767632"'&'&54767632 "'&'&4767632"'&'&'476762"'&'.76762 "'&'&54767632$$%$%$	Yٍ$$%%$$%J%$0$H%$HJ%$?H%$HG%=%$J&$$%H$%$%HH$%$%H     F
!;  + A E I M d |      "'&'&4767632"'&'&476762"'&'&4767632!'!%3"'&'&54767632"'&'&54767632 "'&'&4767632"'&'&'476762"'&'.76762 "'&'&54767632$$%$H$%$	Yٍ$$%%$$%J%$0$H%$HJ%$?H%$	JHHG%=%$J&$$%H$%$%HH$%$%H      F
!;  + A W [ _ c z       476762#"'&'& 4767632"'&'$476762#"'&'4767632"'&'&!'!%3"'&'&54767632"'&'&54767632 "'&'&4767632"'&'&'476762"'&'.76762 "'&'&54767632'H$%$%HH$%$%H	Yٍ$$%%$$%J%$0$H%$HJ%$$JJ%$J%$S$J%=%$J&$$%H$%$%HH$%$%H    F
!;  + A W n r v z       476762#"'&'& 4767632"'&'$476762#"'&'4767632"'&'&4767632"'&'&!'!%3"'&'&54767632"'&'&54767632 "'&'&4767632"'&'&'476762"'&'.76762 "'&'&54767632'H$%$%HH$%$%H&$I	Yٍ$$%%$$%J%$0$H%$HJ%$$JJ%$J%$S$J$$%%=%$J&$$%H$%$%HH$%$%H      F
!;  * @ U i           "'&'&476762"'&'&5476762 "'&'&4767632 "'&'&'476762"'&'.76762 "'&'&54767632!'!%3"'&'&5476762"'&'&5476762 "'&'&4767632"'&'.76762"'&'.76762 "'&'&4767632$H%$HI&$UIHIH}I&$	Yٍ$I%$II%$0$H%$HI%$RHI%$HG$$%$HGH%$H%=%$I&$IHIIHHIIH    m    !5!!$f    m     !!7!!!!%=m?'   m    "  2#"'&'&47676!!7!!!!E$$%%=&$Ih?'   m  + / 3 7  476762#"'&'&476762"'&'&!!7!!!!H%$HG%=|$I;$%$?'     m  + A E I M  476762#"'&'&476762"'&'&476762"'&'&!!7!!!!H%$	JHHG%=|$$%2$H.$%$?'    m  + A W [ _ c  2"'&'&547676 2#"'&'&47672#"'&'&547672"'&'&47676!!7!!!!N$JJ%$J%$S$J%=H$%$%H"H$%$%Hq?'     m  + A W n r v z  2"'&'&547676 2#"'&'&47672#"'&'&547672"'&'&476762#"'&'&47676!!7!!!!N$JJ%$J%$S$J$$%%=H$%$%H"H$%$%H	&$Ih?'  	 m  * @ U i      %476762"'&'&%4767632"'&'&476762"'&' 4767672"'&'$4767>"'&' 4767632'&'!!7!!!!HJ%$HG$$%$HGH%$H%=$H%$H3J&$JHJHJ&$?'     m    !  2#"'&'&47676!!7!!!!E$$%%=kJH?'     m  , 0 4 8  2#"'&'&476762#"'&'&47676!!7!!!!E$$%%$$%%=iJH&$Ih?'   m  , B F J N  2#"'&'&47676476762#"'&'&476762"'&'&!!7!!!!E$$%H%$HG%=kJH$$%;$%$?'     m  , A W [ _ c  2#"'&'&47676476762#"'&'&476762"'&'&476762"'&'&!!7!!!!E$$%H%$	JHHG%=kJH$$%2$H.$%$?'  m  + A W m q u y  2#"'&'&476762"'&'&547676 2#"'&'&47672#"'&'&547672"'&'&47676!!7!!!!E$$%.$JJ%$J%$S$J%=kJHH$%$%H"H$%$%Hq?'   	 m  + A W m      2#"'&'&476762"'&'&547676 2#"'&'&47672#"'&'&547672"'&'&476762#"'&'&47676!!7!!!!E$$%.$JJ%$J%$S$J$$%%=kJHH$%$%H"H$%$%H	&$Ih?' 
 m  * @ V k       2#"'&'&47676476762"'&'&%4767632"'&'&476762"'&' 4767672"'&'$4767>"'&' 4767632'&'!!7!!!!E$$%HJ%$HG$$%$HGH%$H%=kJH&$H%$H3J&$JHJHJ&$?'    m  + / 3 7   476762#"'&'4767632"'&'&!!7!!!!H$%$%H%=J%$S$J?'     m    " 8 N  2#"'&'&47676!!7!!!!476762#"'&'4767632"'&'&E$$%%=H$%$%H&$Ih?'IJ%$S$J   m  , 0 4 8 N d  476762#"'&'&476762"'&'&!!7!!!!476762#"'&'4767632"'&'&H%$HG%=H$%$%H|$$%;$%$?'IJ%$S$J   m  + A E I M c y  476762#"'&'&476762"'&'&476762"'&'&!!7!!!!476762#"'&'4767632"'&'&H%$	JHHG%=H$%$%H|$$%2$H.$%$?'IJ%$S$J   	 m  + A W [ _ c y   2"'&'&547676 2#"'&'&47672#"'&'&547672"'&'&47676!!7!!!!476762#"'&'4767632"'&'&N$JJ%$J%$S$J%=H$%$%HH$%$%H"H$%$%Hq?'IJ%$S$J    
 m  + A W n r v z    2"'&'&547676 2#"'&'&47672#"'&'&547672"'&'&476762#"'&'&47676!!7!!!!476762#"'&'4767632"'&'&N$JJ%$J%$S$J$$%%=H$%$%HH$%$%H"H$%$%H	&$Ih?'IJ%$S$J   m  * @ U i        %476762"'&'&%4767632"'&'&476762"'&' 4767672"'&'$4767>"'&' 4767632'&'!!7!!!!476762#"'&'4767632"'&'&HJ%$HG$$%$HGH%$H%=H$%$%H$H%$H3J&$JHJHJ&$?'IJ%$S$J     m  + A E I M   476762#"'&'476762"'&'&4767632"'&'&!!7!!!!H$%JI	$%H%=J%$J$$%.$J?'     m  + A X \ ` d   476762#"'&'476762"'&'&4767632"'&'&2#"'&'&47676!!7!!!!H$%JI	$%H$$%%=J%$J$$%.$J+&$Ih?'   m  + A X n r v z   476762#"'&'476762"'&'&4767632"'&'&476762#"'&'&476762"'&'&!!7!!!!H$%JI	$%HH%$HG%=J%$J$$%.$J$$%;$%$?'    	 m  + A X m       476762#"'&'476762"'&'&4767632"'&'&476762#"'&'&476762"'&'&476762"'&'&!!7!!!!H$%JI	$%HH%$	JHHG%=J%$J$$%.$J$$%2$H.$%$?' 
 m  + A W m        476762#"'&'476762"'&'&4767632"'&'&2"'&'&547676 2#"'&'&47672#"'&'&547672"'&'&47676!!7!!!!H$%JI	$%Hz$JJ%$J%$S$J%=J%$J$$%.$J4H$%$%H"H$%$%Hq?'     m  + A W m         476762#"'&'476762"'&'&4767632"'&'&2"'&'&547676 2#"'&'&47672#"'&'&547672"'&'&476762#"'&'&47676!!7!!!!H$%JI	$%Hz$JJ%$J%$S$J$$%%=J%$J$$%.$J4H$%$%H"H$%$%H	&$Ih?'   m  + A V l          476762#"'&'476762"'&'&4767632"'&'&476762"'&'&%4767632"'&'&476762"'&' 4767672"'&'$4767>"'&' 4767632'&'!!7!!!!H$%JI	$%HHJ%$HG$$%$HGH%$H%=J%$J$$%.$J$H%$H3J&$JHJHJ&$?'     m  ) > S W [ _  2"'&'&47676 2#"'&'&47672#"'&'&47672"'&'&47676!!7!!!!N$II%$I%$S$I%=tHIIH"HIIH?'     m    ! 6 K ` u  2"'&'&47676!!7!!!!2"'&'&47676 2#"'&'&47672#"'&'&47672"'&'&47676E$I%=m$II%$I%$S$I&$Ih?'HIIH"HIIH   	 m  , 0 4 8 N d z   476762#"'&'&476762"'&'&!!7!!!!2"'&'&547676 2#"'&'&47672#"'&'&547672"'&'&47676H%$HG%=m$JJ%$J%$S$J|$$%;$%$?'H$%$%H"H$%$%H 
 m  + A E I M c y    476762#"'&'&476762"'&'&476762"'&'&!!7!!!!2"'&'&547676 2#"'&'&47672#"'&'&547672"'&'&47676H%$	JHHG%=m$JJ%$J%$S$J|$$%2$H.$%$?'H$%$%H"H$%$%H   m  + A W [ _ c y     2"'&'&547676 2#"'&'&47672#"'&'&547672"'&'&47676!!7!!!!2"'&'&547676 2#"'&'&47672#"'&'&547672"'&'&47676N$JJ%$J%$S$J%=m$JJ%$J%$S$JH$%$%H"H$%$%Hq?'H$%$%H"H$%$%H    m  ) > S i m q u      2"'&'&47676 2#"'&'&47672#"'&'&47672"'&'&476762"'&'&47676!!7!!!!2"'&'&47676 2#"'&'&47672#"'&'&47672"'&'&47676N$II%$I%$S$I$I%=m$II%$I%$S$IHIIH"HIIH	&$Ih?'HIIH"HIIH    m  * @ U i          %476762"'&'&%4767632"'&'&476762"'&' 4767672"'&'$4767>"'&' 4767632'&'!!7!!!!2"'&'&547676 2#"'&'&47672#"'&'&547672"'&'&47676HJ%$HG$$%$HGH%$H%=m$JJ%$J%$S$J$H%$H3J&$JHJHJ&$?'H$%$%H"H$%$%H    m    ! 7 M c y  !!7!!!!2"'&'&547676 2#"'&'&47672#"'&'&547672"'&'&476762#"'&'&47676%=m$JJ%$J%$S$J$$%m?'H$%$%H"H$%$%H	JH 	 m    " 8 N d z   2#"'&'&47676!!7!!!!2"'&'&547676 2#"'&'&47672#"'&'&547672"'&'&476762#"'&'&47676E$$%%=m$JJ%$J%$S$J$$%&$Ih?'H$%$%H"H$%$%H	JH 
 m  + / 3 7 L a v    476762#"'&'&476762"'&'&!!7!!!!2"'&'&47676 2#"'&'&47672#"'&'&47672"'&'&476762"'&'&47676H%$HG%=m$II%$I%$S$I$I|$I;$%$?'HIIH"HIIH	JH  m  + A E I M c y     476762#"'&'&476762"'&'&476762"'&'&!!7!!!!2"'&'&547676 2#"'&'&47672#"'&'&547672"'&'&476762#"'&'&47676H%$	JHHG%=m$JJ%$J%$S$J$$%|$$%2$H.$%$?'H$%$%H"H$%$%H	JH   m  + A W [ _ c y      2"'&'&547676 2#"'&'&47672#"'&'&547672"'&'&47676!!7!!!!2"'&'&547676 2#"'&'&47672#"'&'&547672"'&'&476762#"'&'&47676N$JJ%$J%$S$J%=m$JJ%$J%$S$J$$%H$%$%H"H$%$%Hq?'H$%$%H"H$%$%H	JH    m  + A W n r v z       2"'&'&547676 2#"'&'&47672#"'&'&547672"'&'&476762#"'&'&47676!!7!!!!2"'&'&547676 2#"'&'&47672#"'&'&547672"'&'&476762#"'&'&47676N$JJ%$J%$S$J$$%%=m$JJ%$J%$S$J$$%H$%$%H"H$%$%H	&$Ih?'H$%$%H"H$%$%H	JH  m  * @ U i           %476762"'&'&%4767632"'&'&476762"'&' 4767672"'&'$4767>"'&' 4767632'&'!!7!!!!2"'&'&547676 2#"'&'&47672#"'&'&547672"'&'&476762#"'&'&47676HJ%$HG$$%$HGH%$H%=m$JJ%$J%$S$J$$%$H%$H3J&$JHJHJ&$?'H$%$%H"H$%$%H	JH   	 m    " : P f |   !!7!!!!4767632"'&'&%4767632#"'&'&476762"'&'4767672"'&'&%4767>#"'&'& 4767632'&'%=%$J&$$%H$%$%HH$%$%Hm?'|$$%%$$%3J%$$H%$HkJ%$    
 m    " 9 Q g }    2#"'&'&47676!!7!!!!4767632"'&'&%4767632#"'&'&476762"'&'4767672"'&'&%4767>#"'&'& 4767632'&'E$$%%=%$J&$$%H$%$%HH$%$%H&$Ih?'|$$%%$$%3J%$$H%$HkJ%$     m  , 0 4 8 O g }     476762#"'&'&476762"'&'&!!7!!!!4767632"'&'&%4767632#"'&'&476762"'&'4767672"'&'&%4767>#"'&'& 4767632'&'H%$HG%=%$J&$$%H$%$%HH$%$%H|$$%;$%$?'|$$%%$$%3J%$$H%$HkJ%$     m  + A E I M d |      476762#"'&'&476762"'&'&476762"'&'&!!7!!!!4767632"'&'&%4767632#"'&'&476762"'&'4767672"'&'&%4767>#"'&'& 4767632'&'H%$	JHHG%=%$J&$$%H$%$%HH$%$%H|$$%2$H.$%$?'|$$%%$$%3J%$$H%$HkJ%$  m  + A W [ _ c z       2"'&'&547676 2#"'&'&47672#"'&'&547672"'&'&47676!!7!!!!4767632"'&'&%4767632#"'&'&476762"'&'4767672"'&'&%4767>#"'&'& 4767632'&'N$JJ%$J%$S$J%=%$J&$$%H$%$%HH$%$%HH$%$%H"H$%$%Hq?'|$$%%$$%3J%$$H%$HkJ%$   m  ) > S i m q u        2"'&'&47676 2#"'&'&47672#"'&'&47672"'&'&476762"'&'&47676!!7!!!!4767632"'&'&%4767632"'&'&476762'&'4767>"'&'&%4767>"'&'& 476762'&'N$II%$I%$S$I$I%=%$I&$IHIIHHIIHHIIH"HIIH	&$Ih?'|$I%$I4I%$$H%$HlI%$     m  * @ U i           %476762"'&'&%4767632"'&'&476762"'&' 4767672"'&'$4767>"'&' 4767632'&'!!7!!!!4767632"'&'&%4767632"'&'&476762'&'4767>"'&'&%4767>"'&'& 476762'&'HI%$HG$$%$HGH%$H%=%$I&$IHIIHHIIH$H%$H4I&$IHIHI&$?'|$I%$I4I%$$H%$HlI%$     gm     "3!254#%!2#!"54!xxxxAA,Gxxxyxxy  gm  $ 0 3 ;   #"'##65##"5476 "3!254#%!2#!"54!3#'!#A;	lB;;Bl	;"xxxxAAKҚ DDy~&%Nkk̛N%&VxxxyxxyU    gm  $ 0 I   #"'##65##"5476 "3!254#%!2#!"54!!567 54&#"5>32A;	lB;;Bl	;"xxxxAA"?XhU4zHM98y~&%Nkk̛N%&Vxxxyxxy?rn81^BQ##{l0    gm  $ 0 Y   #"'##65##"5476 "3!254#%!2#!"54#"&'532654&+532654&#"5>32A;	lB;;Bl	;"xxxxAA\e9}F4wCmxolV^^ad_(fQI7Zy~&%Nkk̛N%&VxxxyxxymR|yOFJLl?<:=svcE`    gm  $ 0 3 >   #"'##65##"5476 "3!254#%!2#!"54	!33##5!5A;	lB;;Bl	;"xxxxAA5by~&%Nkk̛N%&Vxxxyxxy]my     gm  $ 0 Q   #"'##65##"5476 "3!254#%!2#!"54!!67632#"&'53264&#"A;	lB;;Bl	;"xxxxAAy^^a`<~B9>>Eoo4h6y~&%Nkk̛N%&Vxxxyxxy_	MLKJqff    gm  $ 0 @ `   #"'##65##"5476 "3!254#%!2#!"54"327654'&&'&#"67632#"&547632A;	lB;;Bl	;"xxxxAAGX3333XW33331221DD
&9:DTTXWll122y~&%Nkk̛N%&Vxxxyxxy45[Z4554Z[54bg
KL1LMONuv	     gm  $ 0 7   #"'##65##"5476 "3!254#%!2#!"54!#!A;	lB;;Bl	;"xxxxAAiH3y~&%Nkk̛N%&Vxxxyxxy0   gm  $ 0 = [ j   #"'##65##"5476 "3!254#%!2#!"54 "32764'%&'&546 #"'&54767327654'&"A;	lB;;Bl	;"xxxxAA55j]\655T./RQ./SZ85UVUV56-/.UQ100/0/y~&%Nkk̛N%&Vxxxyxxy[,+KLV,++]12Hdt::dJ01:7PyAAAAyN98?&%%$A?&%%$   gm  $ 0 P _   #"'##65##"5476 "3!254#%!2#!"54532767#"&547632#"'&2654'&#"A;	lB;;Bl	;"xxxxAA.1220DC
#<9EWXWXkl122Xf33XU5443y~&%Nkk̛N%&Vxxxyxxyg
KK/MNoouv	rh\Z4554Z\44    gm  $ 0 > J Q   #"'##65##"5476 "3!254#%!2#!"54 "27654/2#"&546573A;	lB;;Bl	;"xxxxAA2332233yty~&%Nkk̛N%&VxxxyxxyVVVVVVV)t'  gm  $ 0 =   #"'##65##"5476 "3!254#%!2#!"543+53265A;	lB;;Bl	;"xxxxAAA@1(TFy~&%Nkk̛N%&VxxxyxxyܕFE`Tl  gm  $ 0 J   #"'##65##"5476 "3!254#%!2#!"54#"&54632.#"3267A;	lB;;Bl	;"xxxxAA<1e9ɴ9f0/j6||{}7j.y~&%Nkk̛N%&Vxxxyxxyt"$$"   gm   4 @ L  "#"&54632&#"32 #"'##65##"5476 "3!254#%!2#!"54VX~_
Ua`UU`aA;	lB;;Bl	;"xxxxAA,ۥ(j8pny~&%Nkk̛N%&Vxxxyxxy   gm  $ 0 ;   #"'##65##"5476 "3!254#%!2#!"5433	##A;	lB;;Bl	;"xxxxAAjixy~&%Nkk̛N%&VxxxyxxyazBm     gm  ! - 0 8  67632	&547632"3!254#%!2#!"54!3#'!#7>T>}}?V<7xxxxAAKҚ DDv>G-;n;-GAxxxyxxyU    gm  ! - F  67632	&547632"3!254#%!2#!"54!!567 54&#"5>327>T>}}?V<7xxxxAA"?XhU4zHM98v>G-;n;-GAxxxyxxy?rn81^BQ##{l0    gm  ! - V  67632	&547632"3!254#%!2#!"54#"&'532654&+532654&#"5>327>T>}}?V<7xxxxAA\e9}F4wCmxolV^^ad_(fQI7Zv>G-;n;-GAxxxyxxymR|yOFJLl?<:=svcE`    gm  ! - 0 ;  67632	&547632"3!254#%!2#!"54	!33##5!57>T>}}?V<7xxxxAA5bv>G-;n;-GAxxxyxxy]my     gm  ! - N  67632	&547632"3!254#%!2#!"54!!67632#"&'53264&#"7>T>}}?V<7xxxxAAy^^a`<~B9>>Eoo4h6v>G-;n;-GAxxxyxxy_	MLKJqff    gm  ! - = ]  67632	&547632"3!254#%!2#!"54"327654'&&'&#"67632#"&5476327>T>}}?V<7xxxxAAGX3333XW33331221DD
&9:DTTXWll122v>G-;n;-GAxxxyxxy45[Z4554Z[54bg
KL1LMONuv	     gm  ! - 4  67632	&547632"3!254#%!2#!"54!#!7>T>}}?V<7xxxxAAiH3v>G-;n;-GAxxxyxxy0   gm  ! - : X g  67632	&547632"3!254#%!2#!"54 "32764'%&'&546 #"'&54767327654'&"7>T>}}?V<7xxxxAA55j]\655T./RQ./SZ85UVUV56-/.UQ100/0/v>G-;n;-GAxxxyxxy[,+KLV,++]12Hdt::dJ01:7PyAAAAyN98?&%%$A?&%%$   gm  ! - M \  67632	&547632"3!254#%!2#!"54532767#"&547632#"'&2654'&#"7>T>}}?V<7xxxxAA.1220DC
#<9EWXWXkl122Xf33XU5443v>G-;n;-GAxxxyxxyg
KK/MNoouv	rh\Z4554Z\44    gm  ! - ; G N  67632	&547632"3!254#%!2#!"54 "27654/2#"&5465737>T>}}?V<7xxxxAA2332233ytv>G-;n;-GAxxxyxxyVVVVVVV)t'  gm  ! - :  67632	&547632"3!254#%!2#!"543+532657>T>}}?V<7xxxxAAA@1(TFv>G-;n;-GAxxxyxxyܕFE`Tl  gm  ! - G  67632	&547632"3!254#%!2#!"54#"&54632.#"32677>T>}}?V<7xxxxAA<1e9ɴ9f0/j6||{}7j.v>G-;n;-GAxxxyxxyt"$$"   xm   1 = I  "#"&54632&#"3267632	&547632"3!254#%!2#!"54VX~_
Ua`UU`a7>T>}}?V<7xxxxAA,ۥ(j8p0v>G-;n;-GAxxxyxxy  gm  ! - 8  67632	&547632"3!254#%!2#!"5433	##7>T>}}?V<7xxxxAAjixv>G-;n;-GAxxxyxxyazBm     gm    ! )  0	00"3!254#%!2#!"54!3#'!#hfxxxxAAKҚ DD
xxxyxxyU     gm    7  0	00"3!254#%!2#!"54!!567 54&#"5>32hfxxxxAA"?XhU4zHM98
xxxyxxy?rn81^BQ##{l0     gm    G  0	00"3!254#%!2#!"54#"&'532654&+532654&#"5>32hfxxxxAA\e9}F4wCmxolV^^ad_(fQI7Z
xxxyxxymR|yOFJLl?<:=svcE`     gm    ! ,  0	00"3!254#%!2#!"54	!33##5!5hfxxxxAA5b
xxxyxxy]my  gm    ?  0	00"3!254#%!2#!"54!!67632#"&'53264&#"hfxxxxAAy^^a`<~B9>>Eoo4h6
xxxyxxy_	MLKJqff     gm    . N  0	00"3!254#%!2#!"54"327654'&&'&#"67632#"&547632hfxxxxAAGX3333XW33331221DD
&9:DTTXWll122
xxxyxxy45[Z4554Z[54bg
KL1LMONuv	  gm    %  0	00"3!254#%!2#!"54!#!hfxxxxAAiH3
xxxyxxy0    gm    + I X  0	00"3!254#%!2#!"54 "32764'%&'&546 #"'&54767327654'&"hfxxxxAA55j]\655T./RQ./SZ85UVUV56-/.UQ100/0/
xxxyxxy[,+KLV,++]12Hdt::dJ01:7PyAAAAyN98?&%%$A?&%%$    gm    > M  0	00"3!254#%!2#!"54532767#"&547632#"'&2654'&#"hfxxxxAA.1220DC
#<9EWXWXkl122Xf33XU5443
xxxyxxyg
KK/MNoouv	rh\Z4554Z\44     gm    , 8 ?  0	00"3!254#%!2#!"54 "27654/2#"&546573hfxxxxAA2332233yt
xxxyxxyVVVVVVV)t'   gm    +  0	00"3!254#%!2#!"543+53265hfxxxxAAA@1(TF
xxxyxxyܕFE`Tl   gm    8  0	00"3!254#%!2#!"54#"&54632.#"3267hfxxxxAA<1e9ɴ9f0/j6||{}7j.
xxxyxxyt"$$"    gm   " . :  0	00"#"&54632&#"32"3!254#%!2#!"54hf5VX~_
Ua`UU`auxxxxAAAۥ(j8poxxxyxxy    gm    )  0	00"3!254#%!2#!"5433	##hfxxxxAAjix
xxxyxxyazBm  gm 	  !  !	!"3!254#%!2#!"540xxxxAA1GG}xxxyxxy     gm # / ; > F  65'&'&547632&54 632'"3!254#%!2#!"54!3#'!#U9H5?K1||1K?5I9xxxxAAKҚ DDLC4$jj$4FLxxxyxxyU     gm # / ; T  65'&'&547632&54 632'"3!254#%!2#!"54!!567 54&#"5>32U9H5?K1||1K?5I9xxxxAA"?XhU4zHM98LC4$jj$4FLxxxyxxy?rn81^BQ##{l0     gm # / ; d  65'&'&547632&54 632'"3!254#%!2#!"54#"&'532654&+532654&#"5>32U9H5?K1||1K?5I9xxxxAA\e9}F4wCmxolV^^ad_(fQI7ZLC4$jj$4FLxxxyxxymR|yOFJLl?<:=svcE`     gm # / ; > I  65'&'&547632&54 632'"3!254#%!2#!"54	!33##5!5U9H5?K1||1K?5I9xxxxAA5bLC4$jj$4FLxxxyxxy]my  gm # / ; \  65'&'&547632&54 632'"3!254#%!2#!"54!!67632#"&'53264&#"U9H5?K1||1K?5I9xxxxAAy^^a`<~B9>>Eoo4h6LC4$jj$4FLxxxyxxy_	MLKJqff     gm # / ; K k  65'&'&547632&54 632'"3!254#%!2#!"54"327654'&&'&#"67632#"&547632U9H5?K1||1K?5I9xxxxAAGX3333XW33331221DD
&9:DTTXWll122LC4$jj$4FLxxxyxxy45[Z4554Z[54bg
KL1LMONuv	  gm # / ; B  65'&'&547632&54 632'"3!254#%!2#!"54!#!U9H5?K1||1K?5I9xxxxAAiH3LC4$jj$4FLxxxyxxy0    gm # / ; H f u  65'&'&547632&54 632'"3!254#%!2#!"54 "32764'%&'&546 #"'&54767327654'&"U9H5?K1||1K?5I9xxxxAA55j]\655T./RQ./SZ85UVUV56-/.UQ100/0/LC4$jj$4FLxxxyxxy[,+KLV,++]12Hdt::dJ01:7PyAAAAyN98?&%%$A?&%%$    gm # / ; [ j  65'&'&547632&54 632'"3!254#%!2#!"54532767#"&547632#"'&2654'&#"U9H5?K1||1K?5I9xxxxAA.1220DC
#<9EWXWXkl122Xf33XU5443LC4$jj$4FLxxxyxxyg
KK/MNoouv	rh\Z4554Z\44     gm # / ; I U \  65'&'&547632&54 632'"3!254#%!2#!"54 "27654/2#"&546573U9H5?K1||1K?5I9xxxxAA2332233ytLC4$jj$4FLxxxyxxyVVVVVVV)t'   gm # / ; H  65'&'&547632&54 632'"3!254#%!2#!"543+53265U9H5?K1||1K?5I9xxxxAAA@1(TFLC4$jj$4FLxxxyxxyܕFE`Tl   gm # / ; U  65'&'&547632&54 632'"3!254#%!2#!"54#"&54632.#"3267U9H5?K1||1K?5I9xxxxAA<1e9ɴ9f0/j6||{}7j.LC4$jj$4FLxxxyxxyt"$$"    gm # / ; M W  65'&'&547632&54 632'"3!254#%!2#!"54"#"&54632&#"32U9H5?K1||1K?5I9xxxxAA3VX~_
Ua`UU`aLC4$jj$4FLxxxyxxyۥ(j8p   gm # / ; F  65'&'&547632&54 632'"3!254#%!2#!"5433	##U9H5?K1||1K?5I9xxxxAAjixLC4$jj$4FLxxxyxxyazBm  gm 	   +  !%%!%%"3!254#%!2#!"54decb`bMxxxxAAnξ;3o(T"(Uxxxyxxy     jn    !   !  tuu   jn 	      ! !   !  ,=C`tu<=u    jn     !   !     !ut~<Atu<=     jn     !   !     !ut~<Atu<=   jn     !   !   !   !  tu<=CAutC<=@    jn     !   !   %   tu`Au{@C  jn     !   !  0   tuAu{@C     jn 	    %    !   !  +aCut@Ctu  jV    # + 3     462"7"32654$"&462"32654 462"6"&4622>7>54&'&'>54&#"&547&"'654.#"'72>32%%"&''%&/'%.547&54632B\BB\t-.B\BB\,-o    lN.	;qsV6C70AIbbOSC**CSObbIA07C6Vsq;	.8L+ʏ]KY  YK]+8ggg=>uggg=>"6''6']6''6'$9]W>:LktLJ73(#XQik\B?&STTS&?B\kiQX#(37JLtkL>W]9rlȡ~3D#@mm@#D3~lȬr    Kj	- 	   " ( ,      "&4632'2654#"3#"&46327'7#5%32767654'&'7>732>7>54'.#"&$ &/.#"3276%2654#"'747'&'#".'.54>7>32676 767>32+"&'&'&'&'& '326y2>=32>=-5nnI3=>23=>S39?*nB?94iEB9?B
R' 8%/61.4&++ #?Y==Y?# ++&4.16/%8 'R
-*?99
!;+57?
B:),#3A32%A(77(A%23A3#,):B
?75+;!
9"`	 B6Ĉ6B 	_#4aa7k~nnnnAnnnn-ںMғv$DK;7"D;KD$vh5WM' 1
*L7.4(#"NemmeN"#(4.7L*
1 'MW5hNA*,PI	,9	:kR4_5"2S''RNNR''S2"5_4Rk:	9,	IP,*0(sBD0H.&&.H0DBs($'&    =j   ( 2 A N    7327327#"'#""'72#"'&547632">7&>32#"'&327654'&#"654.'&'&#"&'%% 767%767%7&54>76?62>?''! '&'7&''\E[:TT:[E\lJDEI>zz>Z+Q (F65/AFeN$0+EdFB/56F( Qy0(,@

*tt*
B
g굤g
&<]ii];&l
m nmuvmmm
b@,,@bdx==x.L#$-G0,a&0$4%Ca,0G-$#;t.f>v::rAe.t+B,E@y>zwwz>y9L,B=|9jwAu:	aa	:uAwj9|BQW.>..>.QWB   j    % 1 ; G h      462"7"32654"547632 "&462432#"'&"3265473267!"& 7654'>54'&#".#" 632+ '.'&'#"&'&'&54632676&#";67&%32767654&'&#"RtRRt78,%,%RtRRt%,%,78j`;j|TVZGqpGZVT|j7aij"Y:8mm8:Y"jia (+G&<5t5<&G+( tRRtRh11R $ $tRRtR$ $k11TXLTr˚,0^1ioE55Eoi1^0, |,6[?Ki{pn7LL7np{iK?[6,|R:3/{W``W{/3:R    	 jn   " . 4 9 > B F  4632#"&%462#"& !   !   !   !  !   67##%67#5#Q;:RR:;QBRtSS:;Qm<=CAtuXLLHd e;QQ;:SS:;QQ;:SSC<=@ujj*%Z*Rdf 	 jn   # / 5 : ? C G   !   !   !   !  462#4&"!462#4&"!   67##%67#5#1<=CAtuČ=T=)Č=T=XLLHd eC<=@uŋSwwSŋSwwSj*%Z*Rdf 	 _jn      # / Y ~  5#67##67#%!   462#4&"!462#4&" !  "'&/ ! &"&5476?&7 !  4'#"'&/&'&! 6?"'<e)HdLLXLNXČ=T=ɌČ=T=tu];6L*+
L6<\<=%&-)//)-LfPRdZ**%jŋSwwSŋSwwSu%&69 96&%C<9-ǚ-9   jn   " . 4 <  4632#"&%462#"& !   !   !   !  !   %!$76Q;:RR:;QBRtSS:;Qtu<=CABW!\\;QQ;:SS:;QQ;:SSutC<=@j{u\\    jn   # / 5 >  462#4&"!462#4&" !   !   !   !  !   %!7276Č=T=ɌČ=T=tu<=CABW!\ʎ\ŋSwwSŋSwwSutC<=@j{u\\  jn   # / ; A J  "&547462#4&"!462#4&" !   !   !   !  !   %!7276AL6Č=T=ɌČ=T=tu<=CABW!\ʎ\,8"+6,#5 ŋSwwSŋSwwSutC<=@j{u\\  jn    % + 3  %%''7'7 !   !   !   !  !   %!$76|'MM٠MMtu<=CABW!\\'nnUUnnutC<=@j{u\\    jc   * 5 I W _  7767 '& !  /! '462#"&%4632#"&4$!  !  7&%654$! 6! &#"32s('s%22<=RtSS:;QQ;:RR:;QۼCAJKCݰG,&',H923QC<=99*;QQ;:SS:;QQvRS\\t[\6JQrrQJ6nn     j0     - 9 J  %462#"&%4632#"&'7 767 '& !   !  6 % !  7/M?RtSS:;QQ;:RR:;QMMs('s%22<=CA*go;QQ;:SS:;QQvRSno>G,&',H923QC<=@**t/0  jn   ' 2 9  7 767 '& !   !   !   !  4632#"&-%s('s%22<=CAtuQ;:RR:;Q'MMG,&',H923QC<=@u;QQvRSdnn  jn   ' 3 ?  7 767 '&462#4&"!462#4&" !   !   !   !  s('s%22,Č=T=ɌČ=T=tu<=CAG,&',H923ŋSwwSŋSwwSutC<=@     jn   7 C Q  462#4&"!462#4&" !27&'#  3   536 !   !   !  327674'&fČ=T=)Č=T=<veA+-{7CAtuO\&$!ŋSwwSŋSwwSC)0ljՠdc3=@u6C$(9.   jn   ' 3 ?  7 767 '&"&53265!"&53265 !   !   !   !  s('s%22 Č=T=7Č=T=?tu<=CAG,&',H923ŋSwwSŋSwwSbutC<=@   jn  / ; G W  2#'&5&7633476!2367672#'&'476 !   !   !   !  7 767 '&<2>
&?) 
#I=#
 )?&
>2<tu<=CAs('s%22%?A>ϾDLD  1GG1  DLD>A?%*utC<=@G,&',H923    jn  # 3 <   !  4'#"&5"&=# !   !  %7767 '&!&'&! 1<=Tn즦nUtuss('s%22`C<àOddddOu[G,&',H923;     jn     )  5!!5!2767! !   !   !   !  lʎ's%2~tu<=CA',H929utC<=@     jn    % 1  5!4632#"&%462#"& !   !   !   !  LvQ;:RR:;QBRtSS:;Qtu<=CAq;QQvRS:;QQ;:SSutC<=@     jn     #  5!!5!5! !   !   !   !  tu<=CA凇yutC<=@   jn    ) 7   !   !   !   !  5!5!2#"&545!5!2#"&5451<=CAtux:RR:;QVx:SS:;QC<=@u-Q;:SS:Q;:SS:  jn      * 6 B  "&475!%7'%4632#"&%462#"& !   !   !   !  PA6L6=MXMXMQ;:RR:;QBRtSS:;Qtu<=CA5O66O5Eonno;QQvRS:;QQ;:SSutC<=@    jn    ' 3  5!"&53265!"&53265 !   !   !   !  L6Č=T=7Č=T=?tu<=CAqŋSwwSŋSwwSbutC<=@  jn    % 1  %'4632#"&%462#"& !   !   !   !  9g9Q;:RR:;QBRtSS:;Qtu<=CA{{;QQvRS:;QQ;:SSutC<=@  jn     B  ' !   !   !   !  	7"'&'&#"'67623276762&__Z<=CAtu_4)FF"58 yFF"54(FFy\__C<=@u_Wi"bc(!__9("bb("_i"bb"(9_    jn   # / ;  4632#"&%462#"&7'7'7' !   !   !   !  Q;:RR:;QBRtSS:;QPA<<APtu<=CA;QQ;:SS:;QQ;:SS$>NvX..XvN>#utC<=@  jn  " ) 6 B N  2#'&5&76334764632#"&-%7'7'7' !   !   !   !  j<2>
&@( 
"VQ;:RR:;Q'MMنPA<<APtu<=CA%?A>ϾDLD  1GN;QQvRSdnn>NvX..XvN>#utC<=@   jn   $ 0 <  462#4&"!462#4&"7'7'7' !   !   !   !  Č=T=ɌČ=T=PA<<APtu<=CAŋSwwSŋSwwS]>NvX..XvN>#utC<=@     jn   $ 0 <  7'7'7'"&53265!"&53265 !   !   !   !  PA<<APLČ=T=7Č=T=?tu<=CA>NvX..XvN>ŋSwwSŋSwwSbutC<=@    jn   " . 8 >  4632#"&%462#"& !   !   !   !  %5!#"&5!#26Q;:RR:;QBRtSS:;Qm<=CAtuČU=T=;QQ;:SS:;QQ;:SSC<=@ucŋSww     jn 
   ) 3 9  4632#"&-% !   !   !   !  %5!#"&5!#26Q;:RR:;Q'MM<=CAtuČU=T=;QQvRSdnnC<=@ucŋSww   jn    % / 5   !   !   !   !  '7'7%%5!#"&5!#261<=CAtu2MM'MMČU=T=C<=@uUnnnnŋSww   jn     ) 5 F  %7'%4632#"&%462#"& !   !   !   !  676 &'&#&MXMXMQ;:RR:;QBRtSS:;Qtu<=CA%23$s(ʎ'onno;QQvRS:;QQ;:SSutC<=@%8338H,'',    jn    " - 9 E V  %'6762&'&"%7'%4632#"&%462#"& !   !   !   !  676 &'&#&yFFyT;MXMXMQ;:RR:;QBRtSS:;Qtu<=CA%23$s(ʎ'9("bb"(9<<donno;QQvRS:;QQ;:SSutC<=@%8338H,'',   jn     ) 5 F  '4632#"&%462#"&% !   !   !   !  676 &'&#&MM+Q;:RR:;QBRtSS:;Q/M%tu<=CA%23$s(ʎ'gno;QQvRS:;QQ;:SSoutC<=@%8338H,'',   jn   ( , 7 B F V  676 &'&#& !   !   !   !  %462#"&%4632#"&''6762&'&"%23$s(ʎ'<=CAtu(/M?RtSS:;QQ;:RR:;QMMyFFyTL8338H,'',C<=@uo;QQ;:SS:;QQvRSno9("bb"(9<<    jn   # 4 O   !   !   !   !  "&53265676 &'&#&"&54?&'&532651<=CAtuHČ=T=%23$s(ʎ'F:M L6 M:F=T=C<=@uŋSwwS8338H,'',bQ?7#+6,#5?RbSwwS    jn    * 6  676 &'&#&%%''7'7 !   !   !   !  %23$s(ʎ''MM٠MMtu<=CAL8338H,'',"nnUUnnutC<=@   jn    ! - 9  '	7	676 &'&#&"&47 !   !   !   !  ___/%23$s(ʎ'B6L6<=CAtu\___8338H,'',#5O66O5C<=@u   jn   " . 4 <  4632#"&%462#"& !   !   !   !  !4   !&'& Q;:RR:;QBRtSS:;Qtu<=CA''EkjE;QQ;:SS:;QQ;:SSutC<=@Fa`LtuL     jn     ) 5 ; C  %7'%4632#"&%462#"& !   !   !   !  !4   !&'& MXMXMQ;:RR:;QBRtSS:;Qtu<=CA''EkjEonno;QQvRS:;QQ;:SSutC<=@Fa`LtuL     jn    N Z f l x        32654&#"!&'& !4    !  4'#&'#5"'#5&47&'##"&'##5 !   !  4632#"&%6754&#"326'#"&546325&'&'67%&'%67%tJUioOLr7EkjE?''<=5D%Dm8D++!"D"!++D8nD%D6tuq"!# ## 	rLOoiUJt#!"$ g!"$!"+O# *"!$RluIOoo`LtuLF7C<;.)nY6G$@<<=j<<@$F7Y*.żu!!# 
OooOIulR #!!y
(
	&!--!	  jn      ' - 5  '	7	'	7 !   !   !   !  !4   !&'& ______tu<=CA''EkjE___X___?utC<=@Fa`LtuL    jn   ) 5 A G O  767632#"&53265!"&53265 !   !   !   !  !4   !&'& U%$
';Č=T=7Č=T=?tu<=CA''EkjEt2"$ŋSwwSŋSwwSbutC<=@Fa`LtuL   jn    % + 3  %%''7'7 !   !   !   !  !4   !&'& |'MM٠MMtu<=CA''EkjE'nnUUnnutC<=@Fa`LtuL     _jn    = b  %!4   '7'7%% !  "'&/ ! &"&5476?&7 !  4'#"'&/&'&! 6?"'''MM'MM.tu];6L*+
L6<\<=%&-)//)-LFtUnnnnu%&69 96&%C<9-ǚ-9  jn    * 6   462"4632#"&%462#"& !   !   !   !  ,ԖQ;:RR:;QBRtSS:;Qtu<=CAZԖԖ;;QQ;:SS:;QQ;:SSutC<=@     jn     % 1 =  %7'%4632#"&%462#"& 462" !   !   !   !  MXMXMQ;:RR:;QBRtSS:;QKjKKjtu<=CAonno;QQvRS:;QQ;:SSjKKjKutC<=@    jn     # . : F  "&47 462"%7'%4632#"&%462#"& !   !   !   !  PA6L6ԖUMXMXMQ;:RR:;QBRtSS:;Qtu<=CA5O66O5.ԖԖRonno;QQvRS:;QQ;:SSutC<=@     #<5n      k    &462 &462%'%%7 462"5.'46767  #5476764&"#5 '#54&/&'&'."% 7547676767>76767&'& QRtSSIQQuRRMXM~MXȖԖHVh=;;=hVH&z':%i)8^'ny'^8)i%:'z&Lw	l08<3233<80(SuQQuSSuQQvRnooԖԖx>[1'Sk
߰
kS1[>$n9(#mq,%@<?L N?<@%,qm#(9n$&%!Y;eV"Dx860
0nxD"Ve;Y   	 jn   # / ; G O [ g  #"&546324632#"&732654&#"4632#"&%4&#"326'#"&54632462" !   !   !   !  \jc_t_cj\0tJUioOLr"!#rLOoiUJt#!"Ԗtu<=CAf[cccc[fRluIOooO!!# OooOIulR #!!(ԖԖ&utC<=@  
 jn J V ^ b f k p t y ~   !  4'#&'#5##5##5##33'75& 733#5##5##5##'75# !   !  $462"335'35'5&575'1<=@D&D4DDDDDDD[MbM[DDDDDDD4D%DAtuKjKKjDDD414DD41C<,(g	-8?oi{``{io?)Ȉ	h(,}ujKKjKd8/c"#$zo/y$ہ"c     jql 	   % 1 = I U  !3!5#%!3!5#%!3!5# 462""&53265!"&53265 !   !   !   !  
{{{{{{KjKKjKČ=T=7Č=T=?tu<=CAlh\h\h\h\h\hjKKjKDŋSwwSŋSwwSbutC<=@    jn   # + 7  '7'77' !   !   !   !  462"'7'77'_qq_qr_qq_r+<=CAtuԖ_qq_qr_qq_r(_qr_qq_rq_qC<=@uԖԖd_qr_qq_rq_q     jn 
  ! -  4632#"&%462#"& !   !   !   !  Q;:RR:;QBRtSS:;Qtu<=CA;QQvRS:;QQ;:SSutC<=@  
 jn       $ ( , 7   !   !  5!35!%'%%7!!!! %6''&! !tulMXM~MX9Tv,unooa< 	 :j&   R         27#"'7327 $'&54732%% 76767%767%7654.'&'&#"&'&54>76?62>?''! '&&''7&''%4."#462!4."#462&'32?67#5#"'\>xcev>rt6;#y]M4f굡g.G

*tt*
&<]ii];&ikhdtt^b	e11B1Č1B1Č:$(2+$) `3H:G??4.x==x%B DG}KSB$bCJAi?l:1wv85j?g>LCR4.f>v::rAeME9jwAu:	aa	:uAwj9DMDVW$@"<<@6 @"O`DQ+ZEEY,Č+ZEEY,Č
c'F
aa	C    	 `j ? H ]        654.'&'& &'6?#"'% 76767%767#"&/27#"'7327 $'&54732"&546?4''7&54>76?62>?'#"&/ '&&'4."#462!4."#462&'32?67#5#"'

*tt*

P,3,04f鶢f.0,4.RȂ\>xbfv>rt6<"x|%7>4Zfd &<^ij]<&hjZ4<6$,4,tt*$0B2Č0B2Č:$(2,$( `4H:F>@4|(,.f>v::rAe.*',,3<%WLi?l:1wv85j?gD`(<3,.x==x%B DG}KSBA6%,4JDME9jwAu:	aa	:uAwj9DMD44,%6<3*hb]p-o+ZEEY,Č+ZEEY,Č
c'F
aa	C   	 :j&   * _        27#"'7327 $'&54732#"'267#"%% 76767%767%7654.'&'&#"&'&54>76?62>?''! '&&''7&''%4632#"'&7">7&#"'&'67632327654'&#"\>xcev>rt6;#yprw??52H:u}M4f굡g.G

*tt*
&<]ii];&ikhdtt^b	ecC>]0L!(C8$0+E8C%$M/2-;Cc.*,@.x==x%B DG}KSBh	ELME
N$bCJAi?l:1wv85j?g>LCR4.f>v::rAeME9jwAu:	aa	:uAwj9DMDVW$@"<<@6 @"O`DF_W;E!I+ /!-!CB*&_z5    =j   J     7327327#"'#""'72%654.'&'&#"&'%% 767%767%7&54>76?62>?''! '&'7&''>32#'&'4632%2347632#'&546\E[:TT:[E\lJDEI>zz>Z

*tt*
B
g굤g
&<]ii];&l
m nmuvmmm

:-.>>1@/=#-:
#=/@1>>b@,,@bdx==x.8t.f>v::rAe.t+B,E@y>zwwz>y9L,B=|9jwAu:	aa	:uAwj9|BQW.>..>.QWB0B=1JJ=B*HGrB0GH*B=ϾJJ1=    
 =j     ( 7 D u    -'"'72#"'&547632">7&>32#"'&327654'&#"654.'&'&#"&'%% 767%767%7&54>76?62>?''! '&'7&''2767!/MMMs>zz>Z+Q (F65/AFeN$0+EdFB/56F( Qy0(,@

*tt*
B
g굤g
&<]ii];&l
m nmuvmmm
ʎ(s"5gonno=x==x.L#$-G0,a&0$4%Ca,0G-$#;t.f>v::rAe.t+B,E@y>zwwz>y9L,B=|9jwAu:	aa	:uAwj9|BQW.>..>.QWB(+H65   =j   ' 4 i     #"'&547632">7&>32#"'&327654'&#"654.'&'&#"&'%% 76?%767%7 2>?''! '&''7&''7&'54>76?7'7'7'27#"'7l+Q (F65/AFeN$0+EdFB/56F( Qy0(,@

*tt*
	B
f굡g
i];&l
m nmttmmm
l&<]PA<<AP[>wdev>L#$-G0,a&0$4%Ca,0G-$#;s.f>v::rAe.$A+B,E@y>zwvz>y9L,Ba	:uAwj9WBQW.>..>.QWB`*9jwAu:	a:=NwY.-YwN=.x==x    =j   ' 4 e        #"'&547632">7&>32#"'&327654'&#"654.'&'&#"&'%% 767%767%7&54>76?62>?''! '&'7&''62&"%6 &#" 27#"'7'%%l+Q (F65/AFeN$0+EdFB/56F( Qy0(,@

*tt*
B
g굤g
&<]ii];&l
m nmuvmmm
GFF`T`Ȑ[>wdev>MM{/ML#$-G0,a&0$4%Ca,0G-$#;t.f>v::rAe.t+B,E@y>zwwz>y9L,B=|9jwAu:	aa	:uAwj9|BQW.>..>.QWBcc_<<`.x==x=noo   =j   , 4 d   "&545"'7276?.53265!"&532656 & &6?6?62>?''   '7&''!2$7%767%7654/&'& &'%%BM 6L6nv>[[3 M=T=7Č=T=`n &<]ii];&+l
m nmudfvmmm
;Yg
A+tt* B
?5O66,5=x..c?SwwSŋSwwSڵ`|jau:	aa	:ua̠|BQW.>.*.>.QWBz>y9L,B+Qb::Tnk+B,E@y>     =j 4 s {     654.'&'&#"&'%% 76?%767%7 2>?''! '&''7&''7&'54>76?!&'& !47632 7'*

*tt*
	B
f굡g
i];&l
m nmttmmm
l&<]EkjE?(___ڃs.f>v::rAe.$A+B,E@y>zwvz>y9L,Ba	:uAwj9WBQW.>..>.QWB`*9jwAu:	aGaKtuK礣~____    jn   ' 2 9  676 &'&  !   !   !   !  %4632#"&%5%%22%s'l(<=CAtuQ;:RR:;Q'MM8329H,'&,@=<Ctb:SRvQQUnn Lf   3#Ǯf  o   @  99991 <20@"@@@@PPPPO OOO_ ___]]KTKT[KT[K	T[X  @   878Y KTKT[X  @   878YKTKT[X     @878Y3#%3#)&      µ 1 0@	 ]K
TK	T[KT[KT[X  @   878Y@	 ] KTX     @878Y@(  * *)66GGWW  / /]] KTX  @   878Y@ff]3#͞    L   n@ WW 91 <<9990 KTKT[X  @   878YKTKT[X  @   878Y/&#"#>3232673#"&#+&"6}#{U#=$ &'9}!}\79 32mn6.mn     91 0 KTX     @878Y@ 
   / /]] KTX  @   878YKTKT[X  @   878Y@t t ]#    R  @	 91 <90 K	TK
T[KT[KT[X     @878Y@        ] KTX  @   878YKTKT[X  @   878Y3#'#Xמї    
  c@	 91 290@////] KTX     @878Y KTX  @   878Y#373՞ї
       #.#"#>32wNLVlw"y=67<qy    O@  1 20 KTKT[X  @   878YKTX     @878Y332673#"&wNLVlw"y=67<qy  1%  l@   :  991 0KSXY" KTX  @   878Y@
SS_ _]]KTX  @   878Y3#Z'        3#3#͞:͞   E    ###플b    MV   33+732767#p*ech05}``0A}     5  e`   7333##5 bb XXĤ<   V`     76!333##"3276u+(ٸٵ)Adw	{i/V`p?`3A0ec3' q $=U  ea4' q ,[  ^3'P q '=  ec5Z'`dU  ecZ'dU  ea5Z' q `d  eaZ' q d  @j3'\ q '=  ec0Z'&bU  @jX'\,  cW'/|u  @jhZ'\d  KcI9'utC   c9'uC  KcAY'*pu  uVAY'P*p  ~V5Z'P`d  ~VZ'dP  ~V'P  KcO['3u  um'a ] vH         ,,   !!,,    r   ?32673#"&.Kh(7`=QQ,       /   3;#"&7w9i ~)a &N   E/  s`&   '    O  w`    73#!!ǆ$Nd`    Vw`    #676#732767!5ʆ#5H2K1i0/N)deеT0Hd01`` u`'R     `&       u<    3#3#1Ӧ1:[         !#3!73#'^!!!ժ   	?   !5	?    qy  *  '&#"3273;#"'&'#"'&763 N,-=MKLyHc(	#) Xn^T).^,ru7	nik%1)0T*XoW)&     n`   ;#"'&5c"$lYoRR`+.0`b  V{    67632 #"&'#4 &  =; {:+ܧ$fZ#adXj  '`    433233243! &aƏ˪ޏƛa!)R@O@+     t'j  'j  j     u'j  'j k     t'j  'k  j     t'j  'k  k     t'k  'j  j     t'k  'j  k     t'k  'k  j     t'k  'k  k     k3   #'##'##'2E2E2>3dddd   8V   %3##!3!!?~w"V  OV`   %3###33,{85ڷ홙V}`     3U` %  %#"&5467332673 !"&'73267JNy


	h_!{7aH"DV$bkZ0c1FU]ȩl+,*       	 k@/	 :HF 	 	 
99991 /0KSX9Y" ]  ]!#3#73yZ1p1eH     Lf  ! @I
 :! HK!NZQF" 	!
$"9991 9990KSX9Y"KTX "  " " @878Y@#ddddddd zyzzzz]73#"&546?>?33267d21gkkxgU9NnkTCm_Qh98gbTD^Z{^\YFj9LVGB Lg)  u      ^l_<      +    +3F            m  F d              f        5    D = `3    =   \ wj f d   % )   D Z j    ?   wy} 7 V) 7 7 73 \ 7\ 7\? 7u 7 7 7L R 7L T 7  X wy  { { R     T Jf ^ ^ ^  B H9 H9 H9 H H H ^ ^J H+ #  u  3     5   1 ^ \   y  R   \  }   5 J5 !     d5  R    !? Lyyyyyy V 7 7 7 7\ 7\ 7\ 7\ 73   7L RL RL RL RL RL w w w w  7
 ` T T T T T T Tf ^ ^ ^ ^ ^9 H9 H9 H9 H \ H ^ ^ ^ ^ ^  u u u uy Ty Ty T Vf ^ Vf ^ Vf ^ Vf ^) 7 ^3   ^ 7 ^ 7 ^ 7 ^ 7 ^ 7 ^3 \ B3 \ B3 \ B3 \ B 7 HT  ^\ 79 H\ 79 H\ 79 H\9\ 79 H 7r H\9? 7 H Mu 79 Hu 79 (u 79 Hu 79 HL # 7 H 7 H 7 H  ^ HL R ^L R ^L R ^ ^9 ^ 7J H 7J ( 7J H +  +  +  +  X#  X#  j#   w u w u w u w u w u w u    {3{3{3  & i} 8 &} W H  Of P3   i}  I q L i 3 O~  " \  5 #9 z tL RN F c s 7 i Q +  8#  Y# ^  r w V   	{3T /T  +3 T  \  ] 6 7
\ 7	G ^ 7 7r HX 75 7K Hy T\ 79 HL R ^ w u w u w u w u w u hy Ty T T3 \ B3 \ B? 7 HL R ^L R ^T /39 7
\ 7	G ^3 \ B ;u 7 Hy T TLy Ty T 7 ^ 7 ^\ 79 .\ 79 HL R ^L R ^ 7J H 7J H w u w u +  X# , 7 H 7 T & E{3 y T 7 ^L R ^L R ^L R ^L R ^  Y9 I yp~fu %+ 83 A } y 7 J\9@  J <   q  &f f | p I : h S\ O\ 
4 P qE C m	 q    # L 5  * . T: O T   t+B# t F q q G o  + &> > + % [## Q s  3 3 (  L s MP D L; MV\V  M p   Iv q Q i : w q *< * . O 1  1  f} 7] 
^   s :PP ~nuu       R 3  }  3   2    u u    . ` `  ;    P   h T   = 8 A   Q   d%        `                _            [      }  _    \          k    |          K  K  Y    (  K  d        B        S  F  y  y    q  h                        `    _    (        .        c         y      C   /    "        X    < 8 T . :P: 7 83 M e f ^e  \  yy " x: z ~  r= l y} 7u 8y 7{ 7L s\ 7? 7y 7 7 8L R 8 7 8 X L f{L \ 7 F qS O t  xF q  MS OZ e t q  Rx v M ^ p !  t  xG G    x ^ x ? a    r G o O :L  0   7G G   ,x J  YF [U 7~$  C ^ ?J mO  f ^9L R q Y 7 V 85  V  7 7J u 8 ] \ 7\ 7\\ 8J j 8 8 2 Wy} 8} 7u 8@ 7!  8 8 8 7 7L R 8 7 V X 2 o{6 W|  8 W  8} 8 B T @ M4 M ^5A 3 M3 M M	 M; M ^; Mf ^  _r i R M i Q M Md  T  ^ ^  q4 Md a+ 9 H9 H980 M7 H M3 M; ix J * d` J B T	D	G 8 TL7 7 OS  L R q@ R @ R  ~<  ` ^	p H9 }x J  ^f ^ -      {  a  XX 8A O} 8 O 7 4 /f 6s ,u 8 H5! A  W i 8 M 8 #  y WI o 7 O 8 O \ Z Vf ^ ; l    {y t l|" | |  Ho T ?o T ?\ 75= 7 M 7I O 7I O|"  7	 O9 Hy Ty T T 7 ^L i hL i h5! A T / 83 M 83 ML R ^L R qL R qd  2 2 2|  u W h 8Q Mf `s V{{} H 8 J- 6/ n/  ; O3 ]G a/ i L S O 		3 7? L T ^   8 M 7 MX Wv i!     r - A *     0 *D *` *     X |#U  W m |   g r% 4U   w | [   eM *| sL RR @u   h > k   C kN H  ] HC ^, ]  H ? H k 9 v] H<j {0 H u   @z H w \q C~  ^ /           5      T  c      ;  ?   T  T\ =    L\ d  lY  XL X^: .  : 0! L; XO o . g4 X1' ;N Q2 X  B    S (  2] 8x P ^ 6 x | =" E" 4a > (   " ^~ 4~  x S2 
 6 c 7x RM 9  eP P%  @  A  @  A      [  N Gn G fa Id :    m  >  @         #]  '  '] ed j #: c: cKnh K$FdPU   d @^	[K   c +
 ^>   d  c   c  d F { $  D g 9 7 h $  , . . J  $ 8^ . < ~. ?  8J $ 7$ . d ~. $ ) K.  $  1 8$ 9o  j 6 9   K=y yyy' 7' 7' 7' 7' `' `      7  7' 7  `  `' ` X 7c (c   R% S    8  } }  E 7 `y yyy ` ` y       `  ` ` } 7     y y^  ^  ^  l 4l 4 4 y 4 y uy    y ~ 5 5 5      * ~  5  5 *  *      uA jA  ~3 5 3  ~ 5 5 5      * ~  5  5 *  *      uz jz b u 7u 7u 7u 7u 7 &   7  7 & &  7  7 u 8 } 7  ; ;      6 6 G y  6y  6 6  c V  ; ; ;    6 6 G y = ;y = ; G  G  = 6 = 6  !  8 8 8    V + 8V + 8  V + V + V uY ] CY 7 " B" B" 6" 6G  G G 	  B	  B	  6	  6   [ 8 8 8 r r r   ? [  8  8 ? r ? r     uY  } 7S S S o o o 8 8 8     Y y y 0y 0y 0 n nd  n  { { K ! K ! b b 4 b } p Z Z      7 7` ` ` ` ` ` `   } Z   
 
 
   
 
     ddd sd s % Z%%% q% q% g% gY / ;) 8)  7 7 8` 
z          r f ^ M  MS ?9 *( M	 M3 M ^f y qy Ly t/ h 8 2 *    S s  35 % D *2 * ru . ./ ./  H .| .|UN . .Y . . . H $
 . . ; ] |" 4" D> G/ Hm "> 1V FV B ; /> Mn %h   7E NO G O 'O gm \ ?= c ; jV c7  W 3S ^n % 7= cV c7  WK S ^ & . V9 >> 
 G MO . _ 4> N= x & i   : 3 N I NE 3O GO F K}\ V TY I g@ iV~   #O G  b  :  :  |    7y T} 7 J} 7 J} 7 J Vf ^) 7 ^) 7 ^) 7 ^) 7 Z) 7 E 7 ^ 7 ^ 7 ^ 7 ^ 7 ^ 7 3 \ B 7 H 7 H 7 H^b 7 H\9\ 79 H? 7 H? 7 H? 7 Hu 79u 79u 79Eu 79 7 H 7 H 7 H 7 H 7 H 7 H 7 HL R ^L R ^L R ^L R ^ 7 7 7J H 7J 7J 7JC +  +  +  +  +  X#  X#  X# & /# w u v : w u w u w uy  y            {{ {3{3{3 H#   T  :& ! My Ty Ty Ty Ty Ty Ty Ty Ty Ty Ty Ty T 7 ^ 7 ^ 7 ^ 7 ^ 7 ^ 7 ^ 7 ^ 7 ^\ 79 H\9L R ^L R ^L R ^L R ^L R ^L R ^L R ^N F cN F cN F cN F cN F c w u w u r w r w r w r w r w    ' 8 *F qF qF qF qF qF qF qF qyy i ' Ai  S OS OS OS OS OS O k  i 0 kl  t t t t t t t t k  i 7 kh x      U i m  
 k  i  k    ^ ^ ^ ^ ^ ^o k  i  k  x x x x x x x xE   .         k 	 ] i  k _  F qF qS Oc O t< t h  ^ ^ x x  F qF qF qF qF qF qF qF qyy i ' Ai   O O O O O O O O k  i 7 kh x          k 	 ] i  k _  F qF qF qF qF qF qF qyyy    P y O O< O t Op  xr   7         ~ \ 7\ 7 D ~  0  x x x x ! ! x x    r{  y y        a  l  !                 V                                \ \ V  V  V    R%%% %   V 33 U                                  
    )   )  3 3    ?  nn   =  V Q`      n      = n  =  dnHN t< ia j  y l                                              5 Wn %5 T5 5 \5 5 55 C9 9 9  q 1 65 W5 5 J5 !5 T5 5 \5 5 55 C9 9 9  q " 4V FO G 8V B1  h  T   71 6m  =\ ? v V V A 1 M
* 7 : X ^ & 
. `  7 B~1 N  L r    $  =  4    Z  = # # s ,  .B .   I	   H Z ; j DN -h R  n L sb B SV , y ( B 'y  \  V  ? 7yJ \  } V J T 7 9 h gd ( V
 Fh Z	A ) $  <  | 3 au xu { W Z [ O= v6  
   J  J ! T    !   \ 7 7 7b 7y a  
 W 7{w	u 7 V) 7 79 H H H~ H }  	]  H9 Hf ^ ^ H	 y) 7	 y e   W d u d     d u ,  d u d u d u d v d v d d*ZZ d - O  p   d d u u d w d d x v x d d d d u d u d     d u d u d u k u 7^ H^^^@^^^ u z z^ u w u d u d d u d 7 u 7y  # _   ZZ      ,  d    jDX = = =  , ,     f   f+ uP uu u+ tP tu t+ t+ t+ t y y  y                                                     ` `                                     > >                  * *                 y  y a y*                      c c    |   a a                              W         W       r  xx dxx d        j++ *	8 	8 P 	8  xP     F q 		8  #                                + 7  '    5, , , , , , , , , ,  < < < < < <xxxxxxxhh''''''''''''''''''  '  '  ''q''''''''''          l l   g g ' ' ' '   ' '   ' ' ' '   ' '   ' ' ' ' '  p  p r p p p p p p p p p7 p7 T        ' ' ' ' ' ' 3     ' ' '  p     p p p p' ' '     ' ,   h, d, , , ,  + ,  } }_ } }	 
 , , , B , d, , , , , , , ,  ,  , }, , , dZ d 2 E \ , , ,  , , ,         , W W W , ,,    , ,S,, ,,, ], , , ,, m, , E, , , ,A, , ,U,,Q,0, , ,U,,L,0,C, ,X, ,B, ,X, ,   ,x,       , , , , , , , , , , , , , ,1                     k | [L ~ T ex V,  L, ,  e 	  	f 9   	g T 
  Y   xD V V V V   V  I V V x  +  5  X 3     p p p pR> p  T V S T W W 0 V 0 0 0 0 0 2   p @ T  T T T p     n n T V      a a T T, f, z, z, z, z,   xN N x>N nX ~ #9Uwlf, , , , , , , , , ,  	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 u  u  u u u u u u u    u u u u u + +  <   u   u  s    u   s s [ Y O	B ux dx ux dx dx ux dx dx ux dx ux u  ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, d u  w Ow O  H                    :  :  :
 u+ t+ t+ t+ t+ t+ t+ t+ t+ t+ t++ t+ t+ t+ u+ k                                                          7 7^^     7^ u u H H    ' ' ' '   $ $   " p M Mu9u 6 t#2 W >? W >{3 @ s `y2@	f0 P< 8 TG qPi q bf}r [ 6{ }  "  ]I 2 y `  Z 2 h 2i \ \s s \ \ Fc \ } T 2 \  7 ? ~] 2 L P 2 S | ~" \5 z@ L   R? , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , } 7 7 ) 7 Xi3 \? 7?y  V { 7 7 7 7u 7  7 yy  73 a 5 { } yy2 7 \ 7L R w u x# sf f T  f f H  w +   	p H9 }; @  \ ^ B T2g4 7 ML R ^ s q
 s& q 9q X  X |  #
 s& qA   Q Q Q Q Q Q Q Q Q Q Q  ? r r r > N p p ` L   S  M+ 	 N	  T	= T N N t e ? 7 Hq #  jj t  
 s& qW2L Z _ 8Ru {9 +  ! j ~53 |  T. 7U H3?J+ i ' GR M   8\ 	-  r $#    6    Z    y #   j H >3 Q     9  q  	Y8     O    . )   e1     ! E   -   s |w i       9 9 9 9$ $ $ K K K K K _ q_ q_ q_ q_ q_ q 7 + +   } m 	 o	 o	 	} <    n  N 1? , X u aE    Y Y Y  XL X^: .     0!t L; X   o    4 X1'         X  B .  X; X                                                                      T  W  9                4  7 d 7d 4d 4   7: D 7 7_ 7j 4 4d 7: } 5 7  5 R  5} x z 8 Rv 5v 9 S D 7}  n, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,     c 3 s$ f" = 3 L r    Dr lK { f q  o / q  5  	"   q q q + o 7  =H Vh L = Xy} 7 V) 7 7 73 \ 7 \? 7u 7 7 7L R 7L T 7  X wy  { { T Jf ^ ^ ^  B H9 H9 H9  H H ^ ^J H+ #  u  3  k   Z  q A  j
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
                                                   / / / / / / / / / / / / / / / / / / / / / / / / / / / @ / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / W W W W W W W W X 	x KW =	@ W W 	Y _W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W 	Y _W W W W #W W  W W W W :	Y `W :W =W =W =W =W =W =W     o    L    R        1    E M 5xexexxexexexex@xex@xx@xKx xKxux~x~x~xK  ,   9  & E9 O99 u F q             x 8A O 35 ? L@ L     ,   
   7k  9  :  ;  <k  k &k :k $  & $  & $  & $  & $ 7k $ 9 $ : $$k $&k $6 $k $ $ $ $
 $
 %  % < %  %8 %: % % & 6 & & & & & &  & &" & & & &
 &
 )  )  )  )  )  ) $ ) X )  )  )  )  )  )  )  )  )  )  )  )  )+ )- )/ )1 )3 )5 . 2 . & . 2 . 8 . D . H . R . X . \ .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  . . .0 .1 / a / 2 / 7u / 9k / : / << / \ /  /  /  /  /  /  / < /  /  / /&u /:< /
D /
 /
D /
 2  2  2  & 2  & 2 ; 3  3  3  3  3  3 $ 3  3  3  3  3  4  & 6 6 6  6" 7  7  7  7 D 7 D 7 $D 7 D) 7 F 7 H 7 R 7 Ua 7 V 7 X2 7 ZY 7 \N 7 D 7 D 7 D 7 D 7 D 7 ) 7 ) 7 ) 7 ) 7 ) 7 ) 7  7  7  7  7  7  7  7  7  7  7  7  7 2 7 2 7 2 7 2 7 N 7 N 7  7  7  7 7a 7a 7! 7# 712 9  9 N 9  9  9  9 $u 9 D} 9 H 9 R 9 X 9 u 9 u 9 u 9 u 9 u 9 } 9 } 9 } 9 } 9 } 9 } 9 k 9  9  9  9  9  9  9  9  9  9  9  9  9  9  9  9 91 : Y : a : Y : $ : D : U :  :  :  :  :  :  :  :  :  :  :  :  : : :
 :
 ; D ; & ; 2 ;  ;  ;  ;  ;  ;  ;  ;  ;  ; <  <  <  < N < N < $a < & < 2 < DD < H < L < R < XD < a < a < a < a < a <  <  <  <  <  <  <  < D < D < D < D < D < D < D <  <  <  <  <  <  <  <  <  <  < D < D < D < D <  <  <  < < <1D <
 <
 =  I  I  I  I
  I
 ^ I
  I
 ^ U D U  U D Y Y Y Y Z } Z } \ a \  \ a   &   &   &   &  7k  9  : $k &k 6 k    
 
   &   &   &   &  7k  9  : $k &k 6 k    
 
   &   &   &   &  7k  9  : $ &k 6     
 
   &   &   &   &  7k  9  : $k &k 6 k    
 
   &   &   &   &  7k  9  : $k &k 6 k    
 
    6 &  &  &   & " &  & 
 
   &       &   &  ;       &   &  ;       &   &  ;       &   &  ;       &   &  ;     &     &   &  ;        N  N  $a  &  2  DD  H  L  R  XD  a  a  a  a  a                D  D  D  D  D  D  D                      D  D  D  D         1D 
 
  k   K  k  a    a  a    a   &   &   &   &  7k  9  : $k &k 6 k    
 
   &   &   &   &  7k  9  : $k &k 6 k    
 
   &   &   &   &  7k  9  : $k &k 6 k    
 
  6 &  &  &   & " &  & 
 
  6 &  &  &   & " &  & 
 
  6 &  &  &   & " &  & 
 
  6 &  &  &   & " &  & 
 
  a  2  7u  9k  :  <<  \              <      &u :< 
D 
 
D 
  a  2  7u  9k  :  <<  \              <      &u :< 
D 
 
D 
 a 2 7u 9k : << \       <  &u:<
D

D
 D  D D  D  6   "" 6" ""& & & & D& D& $D& D)& F& H& R& Ua& V& X2& ZY& \N& D& D& D& D& D& )& )& )& )& )& )& & & & & & & & & & & & & 2& 2& 2& 2& N& N& & & &&a&a&!&#&12: : : : N: N: $a: &: 2: DD: H: L: R: XD: a: a: a: a: a: : : : : : : : D: D: D: D: D: D: D: : : : : : : : : : : D: D: D: D: : : :::1D:
:
? } $} 9 K} < /} } } } } } }  /}: /	 7k	 9	 :	 ;	 <k	 k	&k	:k
 $
 9 K
 < /
 
 
 
 
 
 
  /
: /
 &
 2
 4
 7
 9
 :k
 <
 I
 Y
 Z
 \
 
 
 
 
 
 
 
 
 
 
 
 

&
:


 $
 9 K
 < /
 
 
 
 
 
 
  /
: /
	 &
	 2
	 4
	 7
	 9
	 :k
	 <
	 I
	 Yk
	 Z
	 \
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	 
	
	&
	:
	
	    D D $D D) F H R Ua V X2 ZY \N D D D D D ) ) ) ) ) )             2 2 2 2 N N   aa!#12 2 & 2 8 D H R X \                                     01#;$;%;&;';);*;+;,;-;/;0;1;2;3;5;6;7;8;9;       D   D   D   D     <             4    4    0      	D  
   
  |            t    (    p    ,  <  l  P  0            P       L    !  "  "  #|  $  %x  &  ',  (8  (  *,  +  ,  -  -  -  .X  .  .  /P  0  2  2  3  5   6   7L  8X  8  :  ;  ;  =$  >,  >  @@  A`  B<  Cp  Dd  E  Fd  H  I  K$  K  Mh  M  N  Od  Od  P  Q(  R  S$  Tl  T  U  V  W  X  Yd  Y  Y  Z  [4  [  \  ]H  ^,  ^  _  `  `  aD  a  b  c  c,  cL  cl  d  d  d  d  d  e  f`  gt  g  g  g  g  g  h  h  h4  hL  i,  iD  i\  it  i  i  i  j  l@  lX  lp  l  l  l  m|  o   o8  oP  oh  o  o  o  q  q  q  q  r   r  r0  rH  r`  rx  s  s  t   t  t0  tH  t`  t  vH  v`  vx  v  v  v  x   x  x0  xH  x`  xx  x  x  x  x  x  y  y   y8  yP  yh  y  y  y  {  {,  {D  {\  {t  {  {  {  {  {  |  |  |4  |L  |d  ||  |  |  |  |  |  }  ~    (  @  X  p          <  `                ,  D  \  t        \      ,  D  \  t        L  d  |            `  x                 8  P  h                T             0  H  `  x                 8  P  h                 X  h    H    l             l    @    x    ,    @      D      0  x    T  d          $    (    8      \      |        t    L      `    `    d    d    `        L  \  t                4  L  d  |              $  <  T  l                $  <  T            $  <  T  l                ,  D      4  L  d  |              $  <  T  l                ,  D  \  t                4  L  d  |          @          X  p                 0  H  `  x                \    h    0    L      p          ð    L    @  Ŵ    h    T    8    h    ʐ  (  ˜        t  4    $    l    `    <  Ҵ  D  ӄ  Ӽ    d  Ը    p    |  (  ט    <  ش         8  ڈ    <  ۨ    8  ܨ       0  ި    h  ߸         l        D      p    l    4    @  P           8  \    l      h  4      `        @          H              <           D  h      P        0  X    h                 8  `  |          $  @        `    `      $  @    |    $ H \ t     0 D X l     P d x      L h       ( L p    @ p     $ l      	< 	t 	 	 
  
 
( 
D 
p 
 
  $ D x    H       0 D l    d   , X X     (      h |      8 X t        ,      , H d |       @ P ` p    8 H X            @       8 P h  t  T ,   t   $ 4           !< ! "4 " " #h # # # # # $$ $ %h % % & & ' ' ($ ( )  ) ) *, * * +D + ,| - - - .| /x / 0x 1, 1 2 3H 3 3 4d 4 4 5 5 5 6 6 6$ 64 6x 6 7H 7X 7p 7 7 7 80 8H 8 8 8 8 8 9t 9 :@ :X :p : : : ;0 ;@ ;d ; ; <4 < < = =H = = = = = = > > >` > ?  ?8 ? ? @ @h @ @ A< A B4 BD B C` C C C DL D D E EL E E F F FD FT Fd F F G` Gp G G H$ Hd H H I$ I J Jd J| J K K K K K K K L@ L M M$ M< MT M NH NX N O0 O P< P P Q$ Q Q Rl R S T U U VX Vh Vx V W W( W@ W X Y Z Z Z Z [ [ [ \< \ ] ]H ]t ] _@ ` ` `4 ` a  a b bH bp b b cd c d8 d d d e e` e f fX f f g4 gx g g h8 h i$ i j j j j k$ k4 kd k k lD l l m md m n nh n n ox p$ p q q q q rD r s s\ s s t@ t t u( ux u u u v v  v8 vH vX vp v v v v v v w w  w8 wH wX wp w w w w w w x x  x8 xP xh x x x x x x y y( yX y y y z zx z {8 { { |< | }P } ~    0   8   t    \      l  |      h       x  T        D   (  8  h  @  @  ,   `  t       \       4 H   p  @        0 |  (     4  D T  4 D  d 0         $ 4  @ h     H d |       @ \ x      , l   `   0 P   4 T    \   4   0   D |  8      0  t 4   x   t   8  `  ` T  p  d  Ŭ X  Ǹ t $  x ʔ  \ t   l   x  X  τ Ϝ ( Ф      x  L ` Ӝ  Ԕ  լ 8  ׸ D X    L ܠ  x  ( ޔ   , ߘ    x      0  L   $   L  (   4   H     L  d  8  , x    d  <  ,   ` (   t  t  L  `  <  P  (  @  @  ,     P h x        8  P  h              ( @ X p       8 X   $ l     4 \ t        8 P h       $ < T l        , X t   $ <     	$ 	< 	T 	l 	 	 	 	 	 	 
 
, 
D 
\ 
t 
 
 
 
  , D    0     4 L d |       $ < T l    l      $ d |    , D \ t        4 L d |    4 X p       , D \ t        4 L d |    ,   4 L    h        (   L     ` x     $ < T l        , D      T l     , D \ t           4  L  d  |     !h ! " " " #P #h $ $$ $< $T $l $ $ $ $ $ $ % %, %D %\ %t & &8 &P & & & & & '( '@ 'X 'p ' ' ' ' ' (  ( (0 (H (` (x ( ( ( ( )$ )p ) * *$ *p * * * +4 + + + + , ,\ , -$ -< - - .` .x /  / /0 /H / 0\ 1 1 2h 2 2 3L 3d 4$ 4< 4T 4l 4 5x 5 6 6 6 7 7, 7 7 7 7 7 8 8$ 8< 8T 8l 8 8 94 9 9 9 : :, :D :\ :t : ; ; <  <8 < < < < =D = = = >( >@ > > > ?T ? @  @4 @ @ @ A A  A8 AP Ah A A A B( C C C C DL D E EH E E E E E F F Ft F Gl H0 Hl H H Ih I I J, Jx J Kd Kt K K K L L  LL L\ L L M M\ M N4 Nh N O OL Oh O O O P4 Pd P Q  Q R  R R S SL S Td T U V V W  Wp X X YH Yp Y Z4 Z [ [l [ [ \T \ \ ]H ] ] ^` ^ _8 _ `  `4 `H `\ `p ` ` a a a, a a b b b c` c dT d e e f( f g gL g g g h\ h h i  i j8 j k kD k l\ m ml m nH n o o o o p8 p q q| q q q r r8 rh r r r r r r s s( s@ sX sp s s s s s t  t t0 tH t` tx t t t t t u u( uH u` ux u u u u u v v  v8 vP vh v v v v v v w w( w@ wX wp w w w w w x x  x8 xP xh x x x x x x y y( y@ yX yp y y y y y z  z z0 zH z` zx z z z z z { {  {8 {P {h { { { { { |  |  |8 |P |h | | | | | | } }( }@ }X }p } } } } } ~  ~ ~0 ~H ~` ~x ~ ~ ~ ~ ~    8 P h        ( @ X p         0   |        4 L d |       $ < T l        , D \ t        4 L d |       $ < T l        , D \ t        4 L d |       $ < T l       0 x         8 P h        4 L d |        8 P h        0 L d        4 L d |        8 T p         0 L d        , D \ x       ( @ X p       ( D ` x          ( @ P h x         8 P h        ( @ X p         0 H ` x         8 P h        ( @ X p          0 \ l        ( D T l         ( @ X p         0 @ X p        0 @ P h          8 H p p p p p p p p p p p p p p p p p    D x    T    D   x  @  X t   \ x x x x x x x x x    ( H d |    L |   0 h         $ @ t    0 ` x    h    ( p   0                p       , ` |     l           4 H \ p         $ 8 L ` t     |  <  d l L   l Ä Ġ  P   l  Ɉ 4   ː   h ̌ ̬    4 x Ͱ Μ Ϙ  ( P       \ L ՜ լ  ָ L , ج 8 |   x  ܈ ݠ ޜ L d      <          `      L      H  d   L   @ h    l      $ L l      , L l       , D T l       $ 4 D T d |      $ < L d      P     \ | ,   <  \     @    ( t   X   ( d   0  < 	  	 
 8    ( `   T   | $    @ h       8 T   , t      < |   X   4 t   4   D   , x    <    D   \  (   @      8  |   !  !x ! "D "x " " #8 # $, $` $ % % & &h ' 'd ' (p ( ( )0 )X ) * *T * * +$ +p + + + , , - .@ .` . /0 / / 0d 0 1P 1| 1 1 2$ 2t 2 2 3 4 6 7l 8T 9@ 9d 9 9 9 9 : :L :l : ;, ; ; <P < = = > >x ? ? @ A< A B CH C D\ D D E E( EH El E E FT F F G  Gl G H I I J0 Jd J K K L$ Ll L M Mx M N N N OL O P Px P Qt R( R S  Sh S T| T T UD U V$ V W  W W X X X YH Y Z Z [  [l [ \ \| \ \ ]  ]4 ]\ ] ^L _  _ ` a@ b( c c d eT e f f g gX g g hD h i< i jp k k\ k l lx l m m m n nP n ox o p  pD px p p q8 qh q q r$ r r r s s s t tH tt t u u@ ux u v v wp w x0 xh x y yd y z zH z z {( { |P | }  }l } ~0 ~ 0   h  L p    L   $   l  L         ( T l    8 \       @        @   < t  @  d      P    4 l     4 X |    D |   ( \ x     ,   D H  h t  P L    < X t    4 p   0 |     0 T x     ( H h     ( T |     ( P |     , T |    $ P |      H p      T    $ X     8 l    < `     4 `     L x    0 d    < p    T  ¸  @ Ä   @ p Ġ    8 T p Ō Ũ      H l Ɣ ƨ     4 P l ǈ Ǥ     0 L ` ,  ˬ      < X | ̠ ̴    8 ͌ ͤ  \ Ϙ   Ш h ҄ Ұ    @ ` Ӕ Ӱ    8 d Ԁ Ԭ    < X Մ ՠ    0 \ | ְ  ׄ  @ 8  ڨ  < ۔  L ܴ  , T ݐ  \ ް   4 d ߨ   $ < T     D         L         0 L x       t   `  X $  T  4  $   h   d    |   p 8   8   4 `  d  <  P   X         @ `      p       !h ! "H " # #h # $ % % & &x '0 ' ( ), ) *  * + , -4 /` / 1 20 3D 4 5 6P 7 7 8x 8 9 9 :x ;@ ; ; < = > >l > ?0 ? ? @` A  B D D F G8 H( I< J` K@ L M NH O P Q0 Q RX ST T V W Xt Y0 Y Z$ ZH Z Z Z Z Z [L [ \ ] ] ^ _x _ ` a cp e g g h h h i j k l  m n@ o8 p, p qL r s` t vX v w wp w x  x x y` y zp {P |d } ~l 0   H   $  |  L L x `  L   4    t   ( X  8    t     H  H   $     H     `           l h    à t  x  < ˈ  `  4 Μ    8 T ϔ  l   Ҥ x  t Ք x  T א   $ L x ؠ   $ و  t   `    ߔ  T  T 8 \       L |    P   x d P ( X         T     0 P   $ T   8   $ |  H   D      $   H t  D  0 l   	 	0 	H 	` 	 
 
   <   L   $ `   | |       0 D ` |     0 D ` |     0 L p     < p        D p      $ P |     @ d     @ l     4 p        D p      $ P |     @ d     @ l     4 p        $  P  |     !  !, !` ! ! ! "0 "T " " " # #@ #t # # $ $D $ $ $ %, %p % % % % % &  &D &p & & & '  '$ 'P '| ' ' ' ( (@ (d ( ( ( ) )@ )l ) ) *  *4 *p * * * +  +$ +P +| + + ,  ,, ,` , , , -0 -T - - - . .@ .t . . / /D / / / 0, 0p 0 0 0 1  1$ 1P 1| 1 1 2  2, 2` 2 2 2 30 3T 3 3 3 4 4@ 4t 4 4 5 5D 5 5 5 6, 6p 6 6 6 7  7L 7 7 7 8 8P 8 8 8 90 9l 9 9 : :D : : : ;, ;p ; ; < <` < < =$ =p = > >P > ?` @( @ A A B4 Bp B B C  C4 Ch C C D( D E F F GH G H` I$ J J KH L L M| NX N O PD P P Q Q$ QD Q Q Q Q R  R R0 RH S S T8 T UL V Vl V WL W X\ X YH Y Z Zx Z Z [ [  [d [ [ \D \ ]@ ] ^p ^ _< _ _ `D ` ` ad a b c dp e@ e e f fd f f gP gx g g g h  hL hx h h i iT i i i j jD jl j j j k, k k l8 l| l l m m0 ml m n nx n op p8 p p q qT q q r rt r s  s s tD t u u< uh u vH v w  w w@ x xl x yL y zd z { { | |L | }( } ~ ~| ~ ,   H  X   <   D     @   `     4 X |   < T l        , D \ t        4 L d |       $ < T l        , D \ t        4 L d |       $ < L \       L \ l |         h x               $ p     4 L      , < L      L  ,  4   ( l    \     @   ,       H t      L t     0 `     L    D  4   X      h    T  P  T d t   D p   d   X  `   d  p  |  8 \   , X |   0 p  l <   t     ,   |    L h     4 X |  ¤ ¸     0 D l À Ô è ü     0 L Ĩ  Ŝ P ƴ 0  P Ȱ    \  L  $   ʹ $  X  p  l  `  d  H  \  T  `  ؜ |  @ ڸ  |  P ܼ 4 ݬ  h  T  t     ,  @  h     H      p 4  0 p   L t  $ T   H t       , D \ t        $ < < T T l          , D \ t                   D p              @ l   8 l  L h    D  8   0        d   (    P |      D |      0 X      ( P x     D p     8 d     0 X     	$ 	P 	x 	 	 	 
 
D 
l 
 
 
  8 `     0 X     $ L t     @ h     8 `     , T     D  @   H    D  <     ( |  h  |     4 l   X      L   !d ! "4 "p " #$ #t # # # # # $ $ $( $8 $H $X $h $x $ $ $ $ $ $ $ $ % % %( %8 %H %X %h %x % % % % % % % % & & &( &8 &H &X &h &x & & & & & & & & 'd ' (4 ( ) ) * *L +( + + , , -P .L / 1 2 34 3 4 6, 7 9d ;X < = >L ? Ax Ct E F G I` K M OT Q R Tp V0 X, Zh \ _ a b d g i l@ o4 p r uD w z }   ,  d `    H   @  x l ( $ `         < 8 t    L H         < 0   D  ό | լ   נ ؜ \ H `  @ T D    l $      T    0    (   8   ` h P   H            D P        (   	T 	 
 
x  h     H (     (       ! " #p $( $ %| &p '( ' ( ) * + ,p -H . . / 1 2 3H 4X 5, 6 6 7 9 : ; < > > ? @ B C E@ F` G4 G H K M O R  T8 Vx X Z \H ] ]8 ^ ^ _ `d a a a bX b c c8 c c d d, dH dd d d d d d e e( eD e` e| e e e e f f$ f@ f\ fx f f f g g  gL g g g g h0 hL h i id i i i j j@ jd j j j j k$ kh k l( l m n   N + h    @        >        2                     /       k                            Q      (       4;       <        <  	  0    	    	    	  &  	  &C  	    	  $  	  "  	  :  	 %:o  	  h;I  	  ;  	  < C o p y r i g h t   ( c )   2 0 0 3   b y   B i t s t r e a m ,   I n c .   A l l   R i g h t s   R e s e r v e d . 
 C o p y r i g h t   ( c )   2 0 0 6   b y   T a v m j o n g   B a h .   A l l   R i g h t s   R e s e r v e d . 
 D e j a V u   c h a n g e s   a r e   i n   p u b l i c   d o m a i n 
  Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved.
Copyright (c) 2006 by Tavmjong Bah. All Rights Reserved.
DejaVu changes are in public domain
  D e j a V u   S a n s  DejaVu Sans  O b l i q u e  Oblique  D e j a V u   S a n s   O b l i q u e  DejaVu Sans Oblique  D e j a V u   S a n s   O b l i q u e  DejaVu Sans Oblique  V e r s i o n   2 . 3 7  Version 2.37  D e j a V u S a n s - O b l i q u e  DejaVuSans-Oblique  D e j a V u   f o n t s   t e a m  DejaVu fonts team  h t t p : / / d e j a v u . s o u r c e f o r g e . n e t  http://dejavu.sourceforge.net  F o n t s   a r e   ( c )   B i t s t r e a m   ( s e e   b e l o w ) .   D e j a V u   c h a n g e s   a r e   i n   p u b l i c   d o m a i n .   G l y p h s   i m p o r t e d   f r o m   A r e v   f o n t s   a r e   ( c )   T a v m j u n g   B a h   ( s e e   b e l o w ) 
 
 B i t s t r e a m   V e r a   F o n t s   C o p y r i g h t 
 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
 
 C o p y r i g h t   ( c )   2 0 0 3   b y   B i t s t r e a m ,   I n c .   A l l   R i g h t s   R e s e r v e d .   B i t s t r e a m   V e r a   i s 
 a   t r a d e m a r k   o f   B i t s t r e a m ,   I n c . 
 
 P e r m i s s i o n   i s   h e r e b y   g r a n t e d ,   f r e e   o f   c h a r g e ,   t o   a n y   p e r s o n   o b t a i n i n g   a   c o p y 
 o f   t h e   f o n t s   a c c o m p a n y i n g   t h i s   l i c e n s e   ( " F o n t s " )   a n d   a s s o c i a t e d 
 d o c u m e n t a t i o n   f i l e s   ( t h e   " F o n t   S o f t w a r e " ) ,   t o   r e p r o d u c e   a n d   d i s t r i b u t e   t h e 
 F o n t   S o f t w a r e ,   i n c l u d i n g   w i t h o u t   l i m i t a t i o n   t h e   r i g h t s   t o   u s e ,   c o p y ,   m e r g e , 
 p u b l i s h ,   d i s t r i b u t e ,   a n d / o r   s e l l   c o p i e s   o f   t h e   F o n t   S o f t w a r e ,   a n d   t o   p e r m i t 
 p e r s o n s   t o   w h o m   t h e   F o n t   S o f t w a r e   i s   f u r n i s h e d   t o   d o   s o ,   s u b j e c t   t o   t h e 
 f o l l o w i n g   c o n d i t i o n s : 
 
 T h e   a b o v e   c o p y r i g h t   a n d   t r a d e m a r k   n o t i c e s   a n d   t h i s   p e r m i s s i o n   n o t i c e   s h a l l 
 b e   i n c l u d e d   i n   a l l   c o p i e s   o f   o n e   o r   m o r e   o f   t h e   F o n t   S o f t w a r e   t y p e f a c e s . 
 
 T h e   F o n t   S o f t w a r e   m a y   b e   m o d i f i e d ,   a l t e r e d ,   o r   a d d e d   t o ,   a n d   i n   p a r t i c u l a r 
 t h e   d e s i g n s   o f   g l y p h s   o r   c h a r a c t e r s   i n   t h e   F o n t s   m a y   b e   m o d i f i e d   a n d 
 a d d i t i o n a l   g l y p h s   o r   c h a r a c t e r s   m a y   b e   a d d e d   t o   t h e   F o n t s ,   o n l y   i f   t h e   f o n t s 
 a r e   r e n a m e d   t o   n a m e s   n o t   c o n t a i n i n g   e i t h e r   t h e   w o r d s   " B i t s t r e a m "   o r   t h e   w o r d 
 " V e r a " . 
 
 T h i s   L i c e n s e   b e c o m e s   n u l l   a n d   v o i d   t o   t h e   e x t e n t   a p p l i c a b l e   t o   F o n t s   o r   F o n t 
 S o f t w a r e   t h a t   h a s   b e e n   m o d i f i e d   a n d   i s   d i s t r i b u t e d   u n d e r   t h e   " B i t s t r e a m 
 V e r a "   n a m e s . 
 
 T h e   F o n t   S o f t w a r e   m a y   b e   s o l d   a s   p a r t   o f   a   l a r g e r   s o f t w a r e   p a c k a g e   b u t   n o 
 c o p y   o f   o n e   o r   m o r e   o f   t h e   F o n t   S o f t w a r e   t y p e f a c e s   m a y   b e   s o l d   b y   i t s e l f . 
 
 T H E   F O N T   S O F T W A R E   I S   P R O V I D E D   " A S   I S " ,   W I T H O U T   W A R R A N T Y   O F   A N Y   K I N D ,   E X P R E S S 
 O R   I M P L I E D ,   I N C L U D I N G   B U T   N O T   L I M I T E D   T O   A N Y   W A R R A N T I E S   O F   M E R C H A N T A B I L I T Y , 
 F I T N E S S   F O R   A   P A R T I C U L A R   P U R P O S E   A N D   N O N I N F R I N G E M E N T   O F   C O P Y R I G H T ,   P A T E N T , 
 T R A D E M A R K ,   O R   O T H E R   R I G H T .   I N   N O   E V E N T   S H A L L   B I T S T R E A M   O R   T H E   G N O M E 
 F O U N D A T I O N   B E   L I A B L E   F O R   A N Y   C L A I M ,   D A M A G E S   O R   O T H E R   L I A B I L I T Y ,   I N C L U D I N G 
 A N Y   G E N E R A L ,   S P E C I A L ,   I N D I R E C T ,   I N C I D E N T A L ,   O R   C O N S E Q U E N T I A L   D A M A G E S , 
 W H E T H E R   I N   A N   A C T I O N   O F   C O N T R A C T ,   T O R T   O R   O T H E R W I S E ,   A R I S I N G   F R O M ,   O U T   O F 
 T H E   U S E   O R   I N A B I L I T Y   T O   U S E   T H E   F O N T   S O F T W A R E   O R   F R O M   O T H E R   D E A L I N G S   I N   T H E 
 F O N T   S O F T W A R E . 
 
 E x c e p t   a s   c o n t a i n e d   i n   t h i s   n o t i c e ,   t h e   n a m e s   o f   G n o m e ,   t h e   G n o m e 
 F o u n d a t i o n ,   a n d   B i t s t r e a m   I n c . ,   s h a l l   n o t   b e   u s e d   i n   a d v e r t i s i n g   o r 
 o t h e r w i s e   t o   p r o m o t e   t h e   s a l e ,   u s e   o r   o t h e r   d e a l i n g s   i n   t h i s   F o n t   S o f t w a r e 
 w i t h o u t   p r i o r   w r i t t e n   a u t h o r i z a t i o n   f r o m   t h e   G n o m e   F o u n d a t i o n   o r   B i t s t r e a m 
 I n c . ,   r e s p e c t i v e l y .   F o r   f u r t h e r   i n f o r m a t i o n ,   c o n t a c t :   f o n t s   a t   g n o m e   d o t 
 o r g .   
 
 A r e v   F o n t s   C o p y r i g h t 
 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
 
 C o p y r i g h t   ( c )   2 0 0 6   b y   T a v m j o n g   B a h .   A l l   R i g h t s   R e s e r v e d . 
 
 P e r m i s s i o n   i s   h e r e b y   g r a n t e d ,   f r e e   o f   c h a r g e ,   t o   a n y   p e r s o n   o b t a i n i n g 
 a   c o p y   o f   t h e   f o n t s   a c c o m p a n y i n g   t h i s   l i c e n s e   ( " F o n t s " )   a n d 
 a s s o c i a t e d   d o c u m e n t a t i o n   f i l e s   ( t h e   " F o n t   S o f t w a r e " ) ,   t o   r e p r o d u c e 
 a n d   d i s t r i b u t e   t h e   m o d i f i c a t i o n s   t o   t h e   B i t s t r e a m   V e r a   F o n t   S o f t w a r e , 
 i n c l u d i n g   w i t h o u t   l i m i t a t i o n   t h e   r i g h t s   t o   u s e ,   c o p y ,   m e r g e ,   p u b l i s h , 
 d i s t r i b u t e ,   a n d / o r   s e l l   c o p i e s   o f   t h e   F o n t   S o f t w a r e ,   a n d   t o   p e r m i t 
 p e r s o n s   t o   w h o m   t h e   F o n t   S o f t w a r e   i s   f u r n i s h e d   t o   d o   s o ,   s u b j e c t   t o 
 t h e   f o l l o w i n g   c o n d i t i o n s : 
 
 T h e   a b o v e   c o p y r i g h t   a n d   t r a d e m a r k   n o t i c e s   a n d   t h i s   p e r m i s s i o n   n o t i c e 
 s h a l l   b e   i n c l u d e d   i n   a l l   c o p i e s   o f   o n e   o r   m o r e   o f   t h e   F o n t   S o f t w a r e 
 t y p e f a c e s . 
 
 T h e   F o n t   S o f t w a r e   m a y   b e   m o d i f i e d ,   a l t e r e d ,   o r   a d d e d   t o ,   a n d   i n 
 p a r t i c u l a r   t h e   d e s i g n s   o f   g l y p h s   o r   c h a r a c t e r s   i n   t h e   F o n t s   m a y   b e 
 m o d i f i e d   a n d   a d d i t i o n a l   g l y p h s   o r   c h a r a c t e r s   m a y   b e   a d d e d   t o   t h e 
 F o n t s ,   o n l y   i f   t h e   f o n t s   a r e   r e n a m e d   t o   n a m e s   n o t   c o n t a i n i n g   e i t h e r 
 t h e   w o r d s   " T a v m j o n g   B a h "   o r   t h e   w o r d   " A r e v " . 
 
 T h i s   L i c e n s e   b e c o m e s   n u l l   a n d   v o i d   t o   t h e   e x t e n t   a p p l i c a b l e   t o   F o n t s 
 o r   F o n t   S o f t w a r e   t h a t   h a s   b e e n   m o d i f i e d   a n d   i s   d i s t r i b u t e d   u n d e r   t h e   
 " T a v m j o n g   B a h   A r e v "   n a m e s . 
 
 T h e   F o n t   S o f t w a r e   m a y   b e   s o l d   a s   p a r t   o f   a   l a r g e r   s o f t w a r e   p a c k a g e   b u t 
 n o   c o p y   o f   o n e   o r   m o r e   o f   t h e   F o n t   S o f t w a r e   t y p e f a c e s   m a y   b e   s o l d   b y 
 i t s e l f . 
 
 T H E   F O N T   S O F T W A R E   I S   P R O V I D E D   " A S   I S " ,   W I T H O U T   W A R R A N T Y   O F   A N Y   K I N D , 
 E X P R E S S   O R   I M P L I E D ,   I N C L U D I N G   B U T   N O T   L I M I T E D   T O   A N Y   W A R R A N T I E S   O F 
 M E R C H A N T A B I L I T Y ,   F I T N E S S   F O R   A   P A R T I C U L A R   P U R P O S E   A N D   N O N I N F R I N G E M E N T 
 O F   C O P Y R I G H T ,   P A T E N T ,   T R A D E M A R K ,   O R   O T H E R   R I G H T .   I N   N O   E V E N T   S H A L L 
 T A V M J O N G   B A H   B E   L I A B L E   F O R   A N Y   C L A I M ,   D A M A G E S   O R   O T H E R   L I A B I L I T Y , 
 I N C L U D I N G   A N Y   G E N E R A L ,   S P E C I A L ,   I N D I R E C T ,   I N C I D E N T A L ,   O R   C O N S E Q U E N T I A L 
 D A M A G E S ,   W H E T H E R   I N   A N   A C T I O N   O F   C O N T R A C T ,   T O R T   O R   O T H E R W I S E ,   A R I S I N G 
 F R O M ,   O U T   O F   T H E   U S E   O R   I N A B I L I T Y   T O   U S E   T H E   F O N T   S O F T W A R E   O R   F R O M 
 O T H E R   D E A L I N G S   I N   T H E   F O N T   S O F T W A R E . 
 
 E x c e p t   a s   c o n t a i n e d   i n   t h i s   n o t i c e ,   t h e   n a m e   o f   T a v m j o n g   B a h   s h a l l   n o t 
 b e   u s e d   i n   a d v e r t i s i n g   o r   o t h e r w i s e   t o   p r o m o t e   t h e   s a l e ,   u s e   o r   o t h e r 
 d e a l i n g s   i n   t h i s   F o n t   S o f t w a r e   w i t h o u t   p r i o r   w r i t t e n   a u t h o r i z a t i o n 
 f r o m   T a v m j o n g   B a h .   F o r   f u r t h e r   i n f o r m a t i o n ,   c o n t a c t :   t a v m j o n g   @   f r e e 
 .   f r .  Fonts are (c) Bitstream (see below). DejaVu changes are in public domain. Glyphs imported from Arev fonts are (c) Tavmjung Bah (see below)

Bitstream Vera Fonts Copyright
------------------------------

Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. Bitstream Vera is
a trademark of Bitstream, Inc.

Permission is hereby granted, free of charge, to any person obtaining a copy
of the fonts accompanying this license ("Fonts") and associated
documentation files (the "Font Software"), to reproduce and distribute the
Font Software, including without limitation the rights to use, copy, merge,
publish, distribute, and/or sell copies of the Font Software, and to permit
persons to whom the Font Software is furnished to do so, subject to the
following conditions:

The above copyright and trademark notices and this permission notice shall
be included in all copies of one or more of the Font Software typefaces.

The Font Software may be modified, altered, or added to, and in particular
the designs of glyphs or characters in the Fonts may be modified and
additional glyphs or characters may be added to the Fonts, only if the fonts
are renamed to names not containing either the words "Bitstream" or the word
"Vera".

This License becomes null and void to the extent applicable to Fonts or Font
Software that has been modified and is distributed under the "Bitstream
Vera" names.

The Font Software may be sold as part of a larger software package but no
copy of one or more of the Font Software typefaces may be sold by itself.

THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT,
TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL BITSTREAM OR THE GNOME
FOUNDATION BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING
ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES,
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE
FONT SOFTWARE.

Except as contained in this notice, the names of Gnome, the Gnome
Foundation, and Bitstream Inc., shall not be used in advertising or
otherwise to promote the sale, use or other dealings in this Font Software
without prior written authorization from the Gnome Foundation or Bitstream
Inc., respectively. For further information, contact: fonts at gnome dot
org. 

Arev Fonts Copyright
------------------------------

Copyright (c) 2006 by Tavmjong Bah. All Rights Reserved.

Permission is hereby granted, free of charge, to any person obtaining
a copy of the fonts accompanying this license ("Fonts") and
associated documentation files (the "Font Software"), to reproduce
and distribute the modifications to the Bitstream Vera Font Software,
including without limitation the rights to use, copy, merge, publish,
distribute, and/or sell copies of the Font Software, and to permit
persons to whom the Font Software is furnished to do so, subject to
the following conditions:

The above copyright and trademark notices and this permission notice
shall be included in all copies of one or more of the Font Software
typefaces.

The Font Software may be modified, altered, or added to, and in
particular the designs of glyphs or characters in the Fonts may be
modified and additional glyphs or characters may be added to the
Fonts, only if the fonts are renamed to names not containing either
the words "Tavmjong Bah" or the word "Arev".

This License becomes null and void to the extent applicable to Fonts
or Font Software that has been modified and is distributed under the 
"Tavmjong Bah Arev" names.

The Font Software may be sold as part of a larger software package but
no copy of one or more of the Font Software typefaces may be sold by
itself.

THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL
TAVMJONG BAH BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
OTHER DEALINGS IN THE FONT SOFTWARE.

Except as contained in this notice, the name of Tavmjong Bah shall not
be used in advertising or otherwise to promote the sale, use or other
dealings in this Font Software without prior written authorization
from Tavmjong Bah. For further information, contact: tavmjong @ free
. fr.  h t t p : / / d e j a v u . s o u r c e f o r g e . n e t / w i k i / i n d e x . p h p / L i c e n s e  http://dejavu.sourceforge.net/wiki/index.php/License  D e j a V u   S a n s  DejaVu Sans  O b l i q u e  Oblique        ~ Z                               	 
                        ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a                                    b c  d  e        f     g      h    j i k m l n  o q p r s u t v w  x z y { } |    ~       	
     !"#$%&'()*+  ,-./0123456789:  ;<=>?@ABCDEFGHI  JKLMNOPQRS    TUVWXYZ[\]^_`abcdefghi jklm  nopqrstuvwxyz{|}~  	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~         	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`a bcdefghijklmnopqrstuvw xyz{|}~ 	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ 	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ 	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ 	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ 	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~	 											
																						 	!	"	#	$	%	&	'	(	)	*	+	,	-	.	/	0	1	2	3	4	5	6	7	8	9	:	;	<	=	>	?	@	A	B	C	D	E	F	G	H	I	J	K	L	M	N	O	P	Q	R	S	T	U	V	W	X	Y	Z	[	\	]	^	_	`	a	b	c	d	e	f	g	h	i	j	k	l	m	n	o	p	q	r	s	t	u	v	w	x	y	z	{	|	}	~																																																																																																																																	
 








	






















  
 
!
"   
#   
$   
%
&
' 
(
)
*
+
,
-
.
/
0 
1
2
3
4
5
6
7
8  
9
:
;
<
=
>
?
@
A 
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
[
\
]
^
_
`
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
{
|
}
~





















 





























































 












































 	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~             	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ 	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~  	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ 	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ 	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ 	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ 	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~   	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ 	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~	sfthyphenAmacronamacronAbreveabreveAogonekaogonekCcircumflexccircumflex
Cdotaccent
cdotaccentDcarondcaronDcroatEmacronemacronEbreveebreve
Edotaccent
edotaccentEogonekeogonekEcaronecaronGcircumflexgcircumflex
Gdotaccent
gdotaccentGcommaaccentgcommaaccentHcircumflexhcircumflexHbarhbarItildeitildeImacronimacronIbreveibreveIogonekiogonekIJijJcircumflexjcircumflexKcommaaccentkcommaaccentkgreenlandicLacutelacuteLcommaaccentlcommaaccentLcaronlcaronLdotldotNacutenacuteNcommaaccentncommaaccentNcaronncaronnapostropheEngengOmacronomacronObreveobreveOhungarumlautohungarumlautRacuteracuteRcommaaccentrcommaaccentRcaronrcaronSacutesacuteScircumflexscircumflexTcommaaccenttcommaaccentTcarontcaronTbartbarUtildeutildeUmacronumacronUbreveubreveUringuringUhungarumlautuhungarumlautUogonekuogonekWcircumflexwcircumflexYcircumflexycircumflexZacutezacute
Zdotaccent
zdotaccentlongsuni0180uni0181uni0182uni0183uni0184uni0185uni0186uni0187uni0188uni0189uni018Auni018Buni018Cuni018Duni018Euni018Funi0190uni0191uni0193uni0194uni0195uni0196uni0197uni0198uni0199uni019Auni019Buni019Cuni019Duni019Euni019FOhornohornuni01A2uni01A3uni01A4uni01A5uni01A6uni01A7uni01A8uni01A9uni01AAuni01ABuni01ACuni01ADuni01AEUhornuhornuni01B1uni01B2uni01B3uni01B4uni01B5uni01B6uni01B7uni01B8uni01B9uni01BAuni01BBuni01BCuni01BDuni01BEuni01BFuni01C0uni01C1uni01C2uni01C3uni01C4uni01C5uni01C6uni01C7uni01C8uni01C9uni01CAuni01CBuni01CCuni01CDuni01CEuni01CFuni01D0uni01D1uni01D2uni01D3uni01D4uni01D5uni01D6uni01D7uni01D8uni01D9uni01DAuni01DBuni01DCuni01DDuni01DEuni01DFuni01E0uni01E1uni01E2uni01E3uni01E4uni01E5Gcarongcaronuni01E8uni01E9uni01EAuni01EBuni01ECuni01EDuni01EEuni01EFuni01F0uni01F1uni01F2uni01F3uni01F4uni01F5uni01F6uni01F7uni01F8uni01F9
Aringacute
aringacuteAEacuteaeacuteOslashacuteoslashacuteuni0200uni0201uni0202uni0203uni0204uni0205uni0206uni0207uni0208uni0209uni020Auni020Buni020Cuni020Duni020Euni020Funi0210uni0211uni0212uni0213uni0214uni0215uni0216uni0217Scommaaccentscommaaccentuni021Auni021Buni021Cuni021Duni021Euni021Funi0220uni0221uni0222uni0223uni0224uni0225uni0226uni0227uni0228uni0229uni022Auni022Buni022Cuni022Duni022Euni022Funi0230uni0231uni0232uni0233uni0234uni0235uni0236dotlessjuni0238uni0239uni023Auni023Buni023Cuni023Duni023Euni023Funi0240uni0241uni0242uni0243uni0244uni0245uni0246uni0247uni0248uni0249uni024Auni024Buni024Cuni024Duni024Euni024Funi0250uni0251uni0252uni0253uni0254uni0255uni0256uni0257uni0258uni0259uni025Auni025Buni025Cuni025Duni025Euni025Funi0260uni0261uni0262uni0263uni0264uni0265uni0266uni0267uni0268uni0269uni026Auni026Buni026Cuni026Duni026Euni026Funi0270uni0271uni0272uni0273uni0274uni0275uni0276uni0277uni0278uni0279uni027Auni027Buni027Cuni027Duni027Euni027Funi0280uni0281uni0282uni0283uni0284uni0285uni0286uni0287uni0288uni0289uni028Auni028Buni028Cuni028Duni028Euni028Funi0290uni0291uni0292uni0293uni0294uni0295uni0296uni0297uni0298uni0299uni029Auni029Buni029Cuni029Duni029Euni029Funi02A0uni02A1uni02A2uni02A3uni02A4uni02A5uni02A6uni02A7uni02A8uni02A9uni02AAuni02ABuni02ACuni02ADuni02AEuni02AFuni02B0uni02B1uni02B2uni02B3uni02B4uni02B5uni02B6uni02B7uni02B8uni02B9uni02BAuni02BBuni02BCuni02BDuni02BEuni02BFuni02C0uni02C1uni02C2uni02C3uni02C4uni02C5uni02C8uni02C9uni02CAuni02CBuni02CCuni02CDuni02CEuni02CFuni02D0uni02D1uni02D2uni02D3uni02D4uni02D5uni02D6uni02D7uni02DEuni02DFuni02E0uni02E1uni02E2uni02E3uni02E4uni02E5uni02E6uni02E7uni02E8uni02E9uni02ECuni02EDuni02EEuni02F3uni02F7	gravecomb	acutecombuni0302	tildecombuni0304uni0305uni0306uni0307uni0308hookabovecombuni030Auni030Buni030Cuni030Duni030Euni030Funi0310uni0311uni0312uni0313uni0314uni0315uni0316uni0317uni0318uni0319uni031Auni031Buni031Cuni031Duni031Euni031Funi0320uni0321uni0322dotbelowcombuni0324uni0325uni0326uni0327uni0328uni0329uni032Auni032Buni032Cuni032Duni032Euni032Funi0330uni0331uni0332uni0333uni0334uni0335uni0336uni0337uni0338uni0339uni033Auni033Buni033Cuni033Duni033Euni033Funi0340uni0341uni0342uni0343uni0344uni0345uni0346uni0347uni0348uni0349uni034Auni034Buni034Cuni034Duni034Euni034Funi0351uni0352uni0353uni0357uni0358uni035Auni035Cuni035Duni035Euni035Funi0360uni0361uni0362uni0370uni0371uni0372uni0373uni0374uni0375uni0376uni0377uni037Auni037Buni037Cuni037Duni037Euni037Ftonosdieresistonos
Alphatonos	anoteleiaEpsilontonosEtatonos	IotatonosOmicrontonosUpsilontonos
OmegatonosiotadieresistonosAlphaBetaGammauni0394EpsilonZetaEtaThetaIotaKappaLambdaMuNuXiOmicronPiRhoSigmaTauUpsilonPhiChiPsiIotadieresisUpsilondieresis
alphatonosepsilontonosetatonos	iotatonosupsilondieresistonosalphabetagammadeltaepsilonzetaetathetaiotakappalambdauni03BCnuxiomicronrhosigma1sigmatauupsilonphichipsiomegaiotadieresisupsilondieresisomicrontonosupsilontonos
omegatonosuni03CFuni03D0theta1Upsilon1uni03D3uni03D4phi1omega1uni03D7uni03D8uni03D9uni03DAuni03DBuni03DCuni03DDuni03DEuni03DFuni03E0uni03E1uni03E2uni03E3uni03E4uni03E5uni03E6uni03E7uni03E8uni03E9uni03EAuni03EBuni03ECuni03EDuni03EEuni03EFuni03F0uni03F1uni03F2uni03F3uni03F4uni03F5uni03F6uni03F7uni03F8uni03F9uni03FAuni03FBuni03FCuni03FDuni03FEuni03FFuni0400uni0401uni0402uni0403uni0404uni0405uni0406uni0407uni0408uni0409uni040Auni040Buni040Cuni040Duni040Euni040Funi0410uni0411uni0412uni0413uni0414uni0415uni0416uni0417uni0418uni0419uni041Auni041Buni041Cuni041Duni041Euni041Funi0420uni0421uni0422uni0423uni0424uni0425uni0426uni0427uni0428uni0429uni042Auni042Buni042Cuni042Duni042Euni042Funi0430uni0431uni0432uni0433uni0434uni0435uni0436uni0437uni0438uni0439uni043Auni043Buni043Cuni043Duni043Euni043Funi0440uni0441uni0442uni0443uni0444uni0445uni0446uni0447uni0448uni0449uni044Auni044Buni044Cuni044Duni044Euni044Funi0450uni0451uni0452uni0453uni0454uni0455uni0456uni0457uni0458uni0459uni045Auni045Buni045Cuni045Duni045Euni045Funi0460uni0461uni0462uni0463uni0464uni0465uni0466uni0467uni0468uni0469uni046Auni046Buni046Cuni046Duni046Euni046Funi0470uni0471uni0472uni0473uni0474uni0475uni0476uni0477uni0478uni0479uni047Auni047Buni047Cuni047Duni047Euni047Funi0480uni0481uni0482uni0483uni0484uni0485uni0486uni0487uni0488uni0489uni048Auni048Buni048Cuni048Duni048Euni048Funi0490uni0491uni0492uni0493uni0494uni0495uni0496uni0497uni0498uni0499uni049Auni049Buni049Cuni049Duni049Euni049Funi04A0uni04A1uni04A2uni04A3uni04A4uni04A5uni04A6uni04A7uni04A8uni04A9uni04AAuni04ABuni04ACuni04ADuni04AEuni04AFuni04B0uni04B1uni04B2uni04B3uni04B4uni04B5uni04B6uni04B7uni04B8uni04B9uni04BAuni04BBuni04BCuni04BDuni04BEuni04BFuni04C0uni04C1uni04C2uni04C3uni04C4uni04C5uni04C6uni04C7uni04C8uni04C9uni04CAuni04CBuni04CCuni04CDuni04CEuni04CFuni04D0uni04D1uni04D2uni04D3uni04D4uni04D5uni04D6uni04D7uni04D8uni04D9uni04DAuni04DBuni04DCuni04DDuni04DEuni04DFuni04E0uni04E1uni04E2uni04E3uni04E4uni04E5uni04E6uni04E7uni04E8uni04E9uni04EAuni04EBuni04ECuni04EDuni04EEuni04EFuni04F0uni04F1uni04F2uni04F3uni04F4uni04F5uni04F6uni04F7uni04F8uni04F9uni04FAuni04FBuni04FCuni04FDuni04FEuni04FFuni0500uni0501uni0502uni0503uni0504uni0505uni0506uni0507uni0508uni0509uni050Auni050Buni050Cuni050Duni050Euni050Funi0510uni0511uni0512uni0513uni0514uni0515uni0516uni0517uni0518uni0519uni051Auni051Buni051Cuni051Duni051Euni051Funi0520uni0521uni0522uni0523uni0524uni0525uni0531uni0532uni0533uni0534uni0535uni0536uni0537uni0538uni0539uni053Auni053Buni053Cuni053Duni053Euni053Funi0540uni0541uni0542uni0543uni0544uni0545uni0546uni0547uni0548uni0549uni054Auni054Buni054Cuni054Duni054Euni054Funi0550uni0551uni0552uni0553uni0554uni0555uni0556uni0559uni055Auni055Buni055Cuni055Duni055Euni055Funi0561uni0562uni0563uni0564uni0565uni0566uni0567uni0568uni0569uni056Auni056Buni056Cuni056Duni056Euni056Funi0570uni0571uni0572uni0573uni0574uni0575uni0576uni0577uni0578uni0579uni057Auni057Buni057Cuni057Duni057Euni057Funi0580uni0581uni0582uni0583uni0584uni0585uni0586uni0587uni0589uni058Auni05B0uni05B1uni05B2uni05B3uni05B4uni05B5uni05B6uni05B7uni05B8uni05B9uni05BAuni05BBuni05BCuni05BDuni05BEuni05BFuni05C0uni05C1uni05C2uni05C3uni05C6uni05C7uni05D0uni05D1uni05D2uni05D3uni05D4uni05D5uni05D6uni05D7uni05D8uni05D9uni05DAuni05DBuni05DCuni05DDuni05DEuni05DFuni05E0uni05E1uni05E2uni05E3uni05E4uni05E5uni05E6uni05E7uni05E8uni05E9uni05EAuni05F0uni05F1uni05F2uni05F3uni05F4uni0E3Funi0E81uni0E82uni0E84uni0E87uni0E88uni0E8Auni0E8Duni0E94uni0E95uni0E96uni0E97uni0E99uni0E9Auni0E9Buni0E9Cuni0E9Duni0E9Euni0E9Funi0EA1uni0EA2uni0EA3uni0EA5uni0EA7uni0EAAuni0EABuni0EADuni0EAEuni0EAFuni0EB0uni0EB1uni0EB2uni0EB3uni0EB4uni0EB5uni0EB6uni0EB7uni0EB8uni0EB9uni0EBBuni0EBCuni0EBDuni0EC0uni0EC1uni0EC2uni0EC3uni0EC4uni0EC6uni0EC8uni0EC9uni0ECAuni0ECBuni0ECCuni0ECDuni0ED0uni0ED1uni0ED2uni0ED3uni0ED4uni0ED5uni0ED6uni0ED7uni0ED8uni0ED9uni0EDCuni0EDDuni10A0uni10A1uni10A2uni10A3uni10A4uni10A5uni10A6uni10A7uni10A8uni10A9uni10AAuni10ABuni10ACuni10ADuni10AEuni10AFuni10B0uni10B1uni10B2uni10B3uni10B4uni10B5uni10B6uni10B7uni10B8uni10B9uni10BAuni10BBuni10BCuni10BDuni10BEuni10BFuni10C0uni10C1uni10C2uni10C3uni10C4uni10C5uni10D0uni10D1uni10D2uni10D3uni10D4uni10D5uni10D6uni10D7uni10D8uni10D9uni10DAuni10DBuni10DCuni10DDuni10DEuni10DFuni10E0uni10E1uni10E2uni10E3uni10E4uni10E5uni10E6uni10E7uni10E8uni10E9uni10EAuni10EBuni10ECuni10EDuni10EEuni10EFuni10F0uni10F1uni10F2uni10F3uni10F4uni10F5uni10F6uni10F7uni10F8uni10F9uni10FAuni10FBuni10FCuni1401uni1402uni1403uni1404uni1405uni1406uni1407uni1409uni140Auni140Buni140Cuni140Duni140Euni140Funi1410uni1411uni1412uni1413uni1414uni1415uni1416uni1417uni1418uni1419uni141Auni141Buni141Duni141Euni141Funi1420uni1421uni1422uni1423uni1424uni1425uni1426uni1427uni1428uni1429uni142Auni142Buni142Cuni142Duni142Euni142Funi1430uni1431uni1432uni1433uni1434uni1435uni1437uni1438uni1439uni143Auni143Buni143Cuni143Duni143Euni143Funi1440uni1441uni1442uni1443uni1444uni1445uni1446uni1447uni1448uni1449uni144Auni144Cuni144Duni144Euni144Funi1450uni1451uni1452uni1454uni1455uni1456uni1457uni1458uni1459uni145Auni145Buni145Cuni145Duni145Euni145Funi1460uni1461uni1462uni1463uni1464uni1465uni1466uni1467uni1468uni1469uni146Auni146Buni146Cuni146Duni146Euni146Funi1470uni1471uni1472uni1473uni1474uni1475uni1476uni1477uni1478uni1479uni147Auni147Buni147Cuni147Duni147Euni147Funi1480uni1481uni1482uni1483uni1484uni1485uni1486uni1487uni1488uni1489uni148Auni148Buni148Cuni148Duni148Euni148Funi1490uni1491uni1492uni1493uni1494uni1495uni1496uni1497uni1498uni1499uni149Auni149Buni149Cuni149Duni149Euni149Funi14A0uni14A1uni14A2uni14A3uni14A4uni14A5uni14A6uni14A7uni14A8uni14A9uni14AAuni14ABuni14ACuni14ADuni14AEuni14AFuni14B0uni14B1uni14B2uni14B3uni14B4uni14B5uni14B6uni14B7uni14B8uni14B9uni14BAuni14BBuni14BCuni14BDuni14C0uni14C1uni14C2uni14C3uni14C4uni14C5uni14C6uni14C7uni14C8uni14C9uni14CAuni14CBuni14CCuni14CDuni14CEuni14CFuni14D0uni14D1uni14D2uni14D3uni14D4uni14D5uni14D6uni14D7uni14D8uni14D9uni14DAuni14DBuni14DCuni14DDuni14DEuni14DFuni14E0uni14E1uni14E2uni14E3uni14E4uni14E5uni14E6uni14E7uni14E8uni14E9uni14EAuni14ECuni14EDuni14EEuni14EFuni14F0uni14F1uni14F2uni14F3uni14F4uni14F5uni14F6uni14F7uni14F8uni14F9uni14FAuni14FBuni14FCuni14FDuni14FEuni14FFuni1500uni1501uni1502uni1503uni1504uni1505uni1506uni1507uni1510uni1511uni1512uni1513uni1514uni1515uni1516uni1517uni1518uni1519uni151Auni151Buni151Cuni151Duni151Euni151Funi1520uni1521uni1522uni1523uni1524uni1525uni1526uni1527uni1528uni1529uni152Auni152Buni152Cuni152Duni152Euni152Funi1530uni1531uni1532uni1533uni1534uni1535uni1536uni1537uni1538uni1539uni153Auni153Buni153Cuni153Duni153Euni1540uni1541uni1542uni1543uni1544uni1545uni1546uni1547uni1548uni1549uni154Auni154Buni154Cuni154Duni154Euni154Funi1550uni1552uni1553uni1554uni1555uni1556uni1557uni1558uni1559uni155Auni155Buni155Cuni155Duni155Euni155Funi1560uni1561uni1562uni1563uni1564uni1565uni1566uni1567uni1568uni1569uni156Auni1574uni1575uni1576uni1577uni1578uni1579uni157Auni157Buni157Cuni157Duni157Euni157Funi1580uni1581uni1582uni1583uni1584uni1585uni158Auni158Buni158Cuni158Duni158Euni158Funi1590uni1591uni1592uni1593uni1594uni1595uni1596uni15A0uni15A1uni15A2uni15A3uni15A4uni15A5uni15A6uni15A7uni15A8uni15A9uni15AAuni15ABuni15ACuni15ADuni15AEuni15AFuni15DEuni15E1uni1646uni1647uni166Euni166Funi1670uni1671uni1672uni1673uni1674uni1675uni1676uni1D00uni1D01uni1D02uni1D03uni1D04uni1D05uni1D06uni1D07uni1D08uni1D09uni1D0Auni1D0Buni1D0Cuni1D0Duni1D0Euni1D0Funi1D10uni1D11uni1D12uni1D13uni1D14uni1D16uni1D17uni1D18uni1D19uni1D1Auni1D1Buni1D1Cuni1D1Duni1D1Euni1D1Funi1D20uni1D21uni1D22uni1D23uni1D26uni1D27uni1D28uni1D29uni1D2Auni1D2Buni1D2Cuni1D2Duni1D2Euni1D30uni1D31uni1D32uni1D33uni1D34uni1D35uni1D36uni1D37uni1D38uni1D39uni1D3Auni1D3Buni1D3Cuni1D3Duni1D3Euni1D3Funi1D40uni1D41uni1D42uni1D43uni1D44uni1D45uni1D46uni1D47uni1D48uni1D49uni1D4Auni1D4Buni1D4Cuni1D4Duni1D4Euni1D4Funi1D50uni1D51uni1D52uni1D53uni1D54uni1D55uni1D56uni1D57uni1D58uni1D59uni1D5Auni1D5Buni1D5Duni1D5Euni1D5Funi1D60uni1D61uni1D62uni1D63uni1D64uni1D65uni1D66uni1D67uni1D68uni1D69uni1D6Auni1D77uni1D78uni1D7Buni1D7Duni1D85uni1D9Buni1D9Cuni1D9Duni1D9Euni1D9Funi1DA0uni1DA1uni1DA2uni1DA3uni1DA4uni1DA5uni1DA6uni1DA7uni1DA8uni1DA9uni1DAAuni1DABuni1DACuni1DADuni1DAEuni1DAFuni1DB0uni1DB1uni1DB2uni1DB3uni1DB4uni1DB5uni1DB6uni1DB7uni1DB8uni1DB9uni1DBAuni1DBBuni1DBCuni1DBDuni1DBEuni1DBFuni1DC4uni1DC5uni1DC6uni1DC7uni1DC8uni1DC9uni1E00uni1E01uni1E02uni1E03uni1E04uni1E05uni1E06uni1E07uni1E08uni1E09uni1E0Auni1E0Buni1E0Cuni1E0Duni1E0Euni1E0Funi1E10uni1E11uni1E12uni1E13uni1E14uni1E15uni1E16uni1E17uni1E18uni1E19uni1E1Auni1E1Buni1E1Cuni1E1Duni1E1Euni1E1Funi1E20uni1E21uni1E22uni1E23uni1E24uni1E25uni1E26uni1E27uni1E28uni1E29uni1E2Auni1E2Buni1E2Cuni1E2Duni1E2Euni1E2Funi1E30uni1E31uni1E32uni1E33uni1E34uni1E35uni1E36uni1E37uni1E38uni1E39uni1E3Auni1E3Buni1E3Cuni1E3Duni1E3Euni1E3Funi1E40uni1E41uni1E42uni1E43uni1E44uni1E45uni1E46uni1E47uni1E48uni1E49uni1E4Auni1E4Buni1E4Cuni1E4Duni1E4Euni1E4Funi1E50uni1E51uni1E52uni1E53uni1E54uni1E55uni1E56uni1E57uni1E58uni1E59uni1E5Auni1E5Buni1E5Cuni1E5Duni1E5Euni1E5Funi1E60uni1E61uni1E62uni1E63uni1E64uni1E65uni1E66uni1E67uni1E68uni1E69uni1E6Auni1E6Buni1E6Cuni1E6Duni1E6Euni1E6Funi1E70uni1E71uni1E72uni1E73uni1E74uni1E75uni1E76uni1E77uni1E78uni1E79uni1E7Auni1E7Buni1E7Cuni1E7Duni1E7Euni1E7FWgravewgraveWacutewacute	Wdieresis	wdieresisuni1E86uni1E87uni1E88uni1E89uni1E8Auni1E8Buni1E8Cuni1E8Duni1E8Euni1E8Funi1E90uni1E91uni1E92uni1E93uni1E94uni1E95uni1E96uni1E97uni1E98uni1E99uni1E9Auni1E9Buni1E9Cuni1E9Duni1E9Euni1E9Funi1EA0uni1EA1uni1EA2uni1EA3uni1EA4uni1EA5uni1EA6uni1EA7uni1EA8uni1EA9uni1EAAuni1EABuni1EACuni1EADuni1EAEuni1EAFuni1EB0uni1EB1uni1EB2uni1EB3uni1EB4uni1EB5uni1EB6uni1EB7uni1EB8uni1EB9uni1EBAuni1EBBuni1EBCuni1EBDuni1EBEuni1EBFuni1EC0uni1EC1uni1EC2uni1EC3uni1EC4uni1EC5uni1EC6uni1EC7uni1EC8uni1EC9uni1ECAuni1ECBuni1ECCuni1ECDuni1ECEuni1ECFuni1ED0uni1ED1uni1ED2uni1ED3uni1ED4uni1ED5uni1ED6uni1ED7uni1ED8uni1ED9uni1EDAuni1EDBuni1EDCuni1EDDuni1EDEuni1EDFuni1EE0uni1EE1uni1EE2uni1EE3uni1EE4uni1EE5uni1EE6uni1EE7uni1EE8uni1EE9uni1EEAuni1EEBuni1EECuni1EEDuni1EEEuni1EEFuni1EF0uni1EF1Ygraveygraveuni1EF4uni1EF5uni1EF6uni1EF7uni1EF8uni1EF9uni1EFAuni1EFBuni1F00uni1F01uni1F02uni1F03uni1F04uni1F05uni1F06uni1F07uni1F08uni1F09uni1F0Auni1F0Buni1F0Cuni1F0Duni1F0Euni1F0Funi1F10uni1F11uni1F12uni1F13uni1F14uni1F15uni1F18uni1F19uni1F1Auni1F1Buni1F1Cuni1F1Duni1F20uni1F21uni1F22uni1F23uni1F24uni1F25uni1F26uni1F27uni1F28uni1F29uni1F2Auni1F2Buni1F2Cuni1F2Duni1F2Euni1F2Funi1F30uni1F31uni1F32uni1F33uni1F34uni1F35uni1F36uni1F37uni1F38uni1F39uni1F3Auni1F3Buni1F3Cuni1F3Duni1F3Euni1F3Funi1F40uni1F41uni1F42uni1F43uni1F44uni1F45uni1F48uni1F49uni1F4Auni1F4Buni1F4Cuni1F4Duni1F50uni1F51uni1F52uni1F53uni1F54uni1F55uni1F56uni1F57uni1F59uni1F5Buni1F5Duni1F5Funi1F60uni1F61uni1F62uni1F63uni1F64uni1F65uni1F66uni1F67uni1F68uni1F69uni1F6Auni1F6Buni1F6Cuni1F6Duni1F6Euni1F6Funi1F70uni1F71uni1F72uni1F73uni1F74uni1F75uni1F76uni1F77uni1F78uni1F79uni1F7Auni1F7Buni1F7Cuni1F7Duni1F80uni1F81uni1F82uni1F83uni1F84uni1F85uni1F86uni1F87uni1F88uni1F89uni1F8Auni1F8Buni1F8Cuni1F8Duni1F8Euni1F8Funi1F90uni1F91uni1F92uni1F93uni1F94uni1F95uni1F96uni1F97uni1F98uni1F99uni1F9Auni1F9Buni1F9Cuni1F9Duni1F9Euni1F9Funi1FA0uni1FA1uni1FA2uni1FA3uni1FA4uni1FA5uni1FA6uni1FA7uni1FA8uni1FA9uni1FAAuni1FABuni1FACuni1FADuni1FAEuni1FAFuni1FB0uni1FB1uni1FB2uni1FB3uni1FB4uni1FB6uni1FB7uni1FB8uni1FB9uni1FBAuni1FBBuni1FBCuni1FBDuni1FBEuni1FBFuni1FC0uni1FC1uni1FC2uni1FC3uni1FC4uni1FC6uni1FC7uni1FC8uni1FC9uni1FCAuni1FCBuni1FCCuni1FCDuni1FCEuni1FCFuni1FD0uni1FD1uni1FD2uni1FD3uni1FD6uni1FD7uni1FD8uni1FD9uni1FDAuni1FDBuni1FDDuni1FDEuni1FDFuni1FE0uni1FE1uni1FE2uni1FE3uni1FE4uni1FE5uni1FE6uni1FE7uni1FE8uni1FE9uni1FEAuni1FEBuni1FECuni1FEDuni1FEEuni1FEFuni1FF2uni1FF3uni1FF4uni1FF6uni1FF7uni1FF8uni1FF9uni1FFAuni1FFBuni1FFCuni1FFDuni1FFEuni2000uni2001uni2002uni2003uni2004uni2005uni2006uni2007uni2008uni2009uni200Auni200Buni200Cuni200Duni200Euni200Funi2010uni2011
figuredashuni2015uni2016underscoredblquotereverseduni201Funi2023onedotenleadertwodotenleaderuni2027uni2028uni2029uni202Auni202Buni202Cuni202Duni202Euni202Funi2031minuteseconduni2034uni2035uni2036uni2037uni2038uni203B	exclamdbluni203Duni203Euni203Funi2040uni2041uni2042uni2043uni2045uni2046uni2047uni2048uni2049uni204Auni204Buni204Cuni204Duni204Euni204Funi2050uni2051uni2052uni2053uni2054uni2055uni2056uni2057uni2058uni2059uni205Auni205Buni205Cuni205Duni205Euni205Funi2060uni2061uni2062uni2063uni2064uni206Auni206Buni206Cuni206Duni206Euni206Funi2070uni2071uni2074uni2075uni2076uni2077uni2078uni2079uni207Auni207Buni207Cuni207Duni207Euni207Funi2080uni2081uni2082uni2083uni2084uni2085uni2086uni2087uni2088uni2089uni208Auni208Buni208Cuni208Duni208Euni2090uni2091uni2092uni2093uni2094uni2095uni2096uni2097uni2098uni2099uni209Auni209Buni209Cuni20A0colonmonetaryuni20A2lirauni20A5uni20A6pesetauni20A8uni20A9uni20AAdongEurouni20ADuni20AEuni20AFuni20B0uni20B1uni20B2uni20B3uni20B4uni20B5uni20B8uni20B9uni20BAuni20BDuni20D0uni20D1uni20D6uni20D7uni20DBuni20DCuni20E1uni2100uni2101uni2102uni2103uni2104uni2105uni2106uni2107uni2108uni2109uni210Buni210Cuni210Duni210Euni210Funi2110Ifrakturuni2112uni2113uni2114uni2115uni2116uni2117weierstrassuni2119uni211Auni211BRfrakturuni211Dprescriptionuni211Funi2120uni2121uni2123uni2124uni2125uni2126uni2127uni2128uni2129uni212Auni212Buni212Cuni212D	estimateduni212Funi2130uni2131uni2132uni2133uni2134alephuni2136uni2137uni2138uni2139uni213Auni213Buni213Cuni213Duni213Euni213Funi2140uni2141uni2142uni2143uni2144uni2145uni2146uni2147uni2148uni2149uni214Buni214Euni2150uni2151uni2152onethird	twothirdsuni2155uni2156uni2157uni2158uni2159uni215A	oneeighththreeeighthsfiveeighthsseveneighthsuni215Funi2160uni2161uni2162uni2163uni2164uni2165uni2166uni2167uni2168uni2169uni216Auni216Buni216Cuni216Duni216Euni216Funi2170uni2171uni2172uni2173uni2174uni2175uni2176uni2177uni2178uni2179uni217Auni217Buni217Cuni217Duni217Euni217Funi2180uni2181uni2182uni2183uni2184uni2185uni2189	arrowleftarrowup
arrowright	arrowdown	arrowboth	arrowupdnuni2196uni2197uni2198uni2199uni219Auni219Buni219Cuni219Duni219Euni219Funi21A0uni21A1uni21A2uni21A3uni21A4uni21A5uni21A6uni21A7arrowupdnbseuni21A9uni21AAuni21ABuni21ACuni21ADuni21AEuni21AFuni21B0uni21B1uni21B2uni21B3uni21B4carriagereturnuni21B6uni21B7uni21B8uni21B9uni21BAuni21BBuni21BCuni21BDuni21BEuni21BFuni21C0uni21C1uni21C2uni21C3uni21C4uni21C5uni21C6uni21C7uni21C8uni21C9uni21CAuni21CBuni21CCuni21CDuni21CEuni21CFarrowdblleft
arrowdbluparrowdblrightarrowdbldownarrowdblbothuni21D5uni21D6uni21D7uni21D8uni21D9uni21DAuni21DBuni21DCuni21DDuni21DEuni21DFuni21E0uni21E1uni21E2uni21E3uni21E4uni21E5uni21E6uni21E7uni21E8uni21E9uni21EAuni21EBuni21ECuni21EDuni21EEuni21EFuni21F0uni21F1uni21F2uni21F3uni21F4uni21F5uni21F6uni21F7uni21F8uni21F9uni21FAuni21FBuni21FCuni21FDuni21FEuni21FF	universaluni2201existentialuni2204emptysetgradientelement
notelementuni220Asuchthatuni220Cuni220Duni220Euni2210uni2213uni2214uni2215uni2216asteriskmathuni2218uni2219uni221Buni221Cproportional
orthogonalangleuni2221uni2222uni2223uni2224uni2225uni2226
logicaland	logicalorintersectionunionuni222Cuni222Duni222Euni222Funi2230uni2231uni2232uni2233	thereforeuni2235uni2236uni2237uni2238uni2239uni223Auni223Bsimilaruni223Duni223Euni223Funi2240uni2241uni2242uni2243uni2244	congruentuni2246uni2247uni2249uni224Auni224Buni224Cuni224Duni224Euni224Funi2250uni2251uni2252uni2253uni2254uni2255uni2256uni2257uni2258uni2259uni225Auni225Buni225Cuni225Duni225Euni225Fequivalenceuni2262uni2263uni2266uni2267uni2268uni2269uni226Auni226Buni226Cuni226Duni226Euni226Funi2270uni2271uni2272uni2273uni2274uni2275uni2276uni2277uni2278uni2279uni227Auni227Buni227Cuni227Duni227Euni227Funi2280uni2281propersubsetpropersuperset	notsubsetuni2285reflexsubsetreflexsupersetuni2288uni2289uni228Auni228Buni228Cuni228Duni228Euni228Funi2290uni2291uni2292uni2293uni2294
circleplusuni2296circlemultiplyuni2298uni2299uni229Auni229Buni229Cuni229Duni229Euni229Funi22A0uni22A1uni22A2uni22A3uni22A4perpendicularuni22A6uni22A7uni22A8uni22A9uni22AAuni22ABuni22ACuni22ADuni22AEuni22AFuni22B0uni22B1uni22B2uni22B3uni22B4uni22B5uni22B6uni22B7uni22B8uni22B9uni22BAuni22BBuni22BCuni22BDuni22BEuni22BFuni22C0uni22C1uni22C2uni22C3uni22C4dotmathuni22C6uni22C7uni22C8uni22C9uni22CAuni22CBuni22CCuni22CDuni22CEuni22CFuni22D0uni22D1uni22D2uni22D3uni22D4uni22D5uni22D6uni22D7uni22D8uni22D9uni22DAuni22DBuni22DCuni22DDuni22DEuni22DFuni22E0uni22E1uni22E2uni22E3uni22E4uni22E5uni22E6uni22E7uni22E8uni22E9uni22EAuni22EBuni22ECuni22EDuni22EEuni22EFuni22F0uni22F1uni22F2uni22F3uni22F4uni22F5uni22F6uni22F7uni22F8uni22F9uni22FAuni22FBuni22FCuni22FDuni22FEuni22FFuni2300uni2301houseuni2303uni2304uni2305uni2306uni2307uni2308uni2309uni230Auni230Buni230Cuni230Duni230Euni230Frevlogicalnotuni2311uni2318uni2319uni231Cuni231Duni231Euni231F
integraltp
integralbtuni2324uni2325uni2326uni2327uni2328uni232Buni232Cuni2373uni2374uni2375uni237Auni237Duni2387uni2394uni239Buni239Cuni239Duni239Euni239Funi23A0uni23A1uni23A2uni23A3uni23A4uni23A5uni23A6uni23A7uni23A8uni23A9uni23AAuni23ABuni23ACuni23ADuni23AEuni23CEuni23CFuni23E3uni23E5uni23E8uni2422uni2423uni2460uni2461uni2462uni2463uni2464uni2465uni2466uni2467uni2468uni2469SF100000uni2501SF110000uni2503uni2504uni2505uni2506uni2507uni2508uni2509uni250Auni250BSF010000uni250Duni250Euni250FSF030000uni2511uni2512uni2513SF020000uni2515uni2516uni2517SF040000uni2519uni251Auni251BSF080000uni251Duni251Euni251Funi2520uni2521uni2522uni2523SF090000uni2525uni2526uni2527uni2528uni2529uni252Auni252BSF060000uni252Duni252Euni252Funi2530uni2531uni2532uni2533SF070000uni2535uni2536uni2537uni2538uni2539uni253Auni253BSF050000uni253Duni253Euni253Funi2540uni2541uni2542uni2543uni2544uni2545uni2546uni2547uni2548uni2549uni254Auni254Buni254Cuni254Duni254Euni254FSF430000SF240000SF510000SF520000SF390000SF220000SF210000SF250000SF500000SF490000SF380000SF280000SF270000SF260000SF360000SF370000SF420000SF190000SF200000SF230000SF470000SF480000SF410000SF450000SF460000SF400000SF540000SF530000SF440000uni256Duni256Euni256Funi2570uni2571uni2572uni2573uni2574uni2575uni2576uni2577uni2578uni2579uni257Auni257Buni257Cuni257Duni257Euni257Fupblockuni2581uni2582uni2583dnblockuni2585uni2586uni2587blockuni2589uni258Auni258Blfblockuni258Duni258Euni258Frtblockltshadeshadedkshadeuni2594uni2595uni2596uni2597uni2598uni2599uni259Auni259Buni259Cuni259Duni259Euni259F	filledboxH22073uni25A2uni25A3uni25A4uni25A5uni25A6uni25A7uni25A8uni25A9H18543H18551
filledrectuni25ADuni25AEuni25AFuni25B0uni25B1triagupuni25B3uni25B4uni25B5uni25B6uni25B7uni25B8uni25B9triagrtuni25BBtriagdnuni25BDuni25BEuni25BFuni25C0uni25C1uni25C2uni25C3triaglfuni25C5uni25C6uni25C7uni25C8uni25C9circleuni25CCuni25CDuni25CEH18533uni25D0uni25D1uni25D2uni25D3uni25D4uni25D5uni25D6uni25D7	invbullet	invcircleuni25DAuni25DBuni25DCuni25DDuni25DEuni25DFuni25E0uni25E1uni25E2uni25E3uni25E4uni25E5
openbulletuni25E7uni25E8uni25E9uni25EAuni25EBuni25ECuni25EDuni25EEuni25EFuni25F0uni25F1uni25F2uni25F3uni25F4uni25F5uni25F6uni25F7uni25F8uni25F9uni25FAuni25FBuni25FCuni25FDuni25FEuni25FFuni2600uni2601uni2602uni2603uni2604uni2605uni2606uni2607uni2608uni2609uni260Auni260Buni260Cuni260Duni260Euni260Funi2610uni2611uni2612uni2613uni2614uni2615uni2616uni2617uni2618uni2619uni261Auni261Buni261Cuni261Duni261Euni261Funi2620uni2621uni2622uni2623uni2624uni2625uni2626uni2627uni2628uni2629uni262Auni262Buni262Cuni262Duni262Euni262Funi2630uni2631uni2632uni2633uni2634uni2635uni2636uni2637uni2638uni2639	smilefaceinvsmilefacesununi263Duni263Euni263Ffemaleuni2641maleuni2643uni2644uni2645uni2646uni2647uni2648uni2649uni264Auni264Buni264Cuni264Duni264Euni264Funi2650uni2651uni2652uni2653uni2654uni2655uni2656uni2657uni2658uni2659uni265Auni265Buni265Cuni265Duni265Euni265Fspadeuni2661uni2662clubuni2664heartdiamonduni2667uni2668uni2669musicalnotemusicalnotedbluni266Cuni266Duni266Euni266Funi2670uni2671uni2672uni2673uni2674uni2675uni2676uni2677uni2678uni2679uni267Auni267Buni267Cuni267Duni267Euni267Funi2680uni2681uni2682uni2683uni2684uni2685uni2686uni2687uni2688uni2689uni268Auni268Buni268Cuni268Duni268Euni268Funi2690uni2691uni2692uni2693uni2694uni2695uni2696uni2697uni2698uni2699uni269Auni269Buni269Cuni269Euni269Funi26A0uni26A1uni26A2uni26A3uni26A4uni26A5uni26A6uni26A7uni26A8uni26A9uni26AAuni26ABuni26ACuni26ADuni26AEuni26AFuni26B0uni26B1uni26B2uni26B3uni26B4uni26B5uni26B6uni26B7uni26B8uni26C0uni26C1uni26C2uni26C3uni26E2uni2701uni2702uni2703uni2704uni2706uni2707uni2708uni2709uni270Cuni270Duni270Euni270Funi2710uni2711uni2712uni2713uni2714uni2715uni2716uni2717uni2718uni2719uni271Auni271Buni271Cuni271Duni271Euni271Funi2720uni2721uni2722uni2723uni2724uni2725uni2726uni2727uni2729uni272Auni272Buni272Cuni272Duni272Euni272Funi2730uni2731uni2732uni2733uni2734uni2735uni2736uni2737uni2738uni2739uni273Auni273Buni273Cuni273Duni273Euni273Funi2740uni2741uni2742uni2743uni2744uni2745uni2746uni2747uni2748uni2749uni274Auni274Buni274Duni274Funi2750uni2751uni2752uni2756uni2758uni2759uni275Auni275Buni275Cuni275Duni275Euni2761uni2762uni2763uni2764uni2765uni2766uni2767uni2768uni2769uni276Auni276Buni276Cuni276Duni276Euni276Funi2770uni2771uni2772uni2773uni2774uni2775uni2776uni2777uni2778uni2779uni277Auni277Buni277Cuni277Duni277Euni277Funi2780uni2781uni2782uni2783uni2784uni2785uni2786uni2787uni2788uni2789uni278Auni278Buni278Cuni278Duni278Euni278Funi2790uni2791uni2792uni2793uni2794uni2798uni2799uni279Auni279Buni279Cuni279Duni279Euni279Funi27A0uni27A1uni27A2uni27A3uni27A4uni27A5uni27A6uni27A7uni27A8uni27A9uni27AAuni27ABuni27ACuni27ADuni27AEuni27AFuni27B1uni27B2uni27B3uni27B4uni27B5uni27B6uni27B7uni27B8uni27B9uni27BAuni27BBuni27BCuni27BDuni27BEuni27C5uni27C6uni27E0uni27E6uni27E7uni27E8uni27E9uni27EAuni27EBuni27F0uni27F1uni27F2uni27F3uni27F4uni27F5uni27F6uni27F7uni27F8uni27F9uni27FAuni27FBuni27FCuni27FDuni27FEuni27FFuni2800uni2801uni2802uni2803uni2804uni2805uni2806uni2807uni2808uni2809uni280Auni280Buni280Cuni280Duni280Euni280Funi2810uni2811uni2812uni2813uni2814uni2815uni2816uni2817uni2818uni2819uni281Auni281Buni281Cuni281Duni281Euni281Funi2820uni2821uni2822uni2823uni2824uni2825uni2826uni2827uni2828uni2829uni282Auni282Buni282Cuni282Duni282Euni282Funi2830uni2831uni2832uni2833uni2834uni2835uni2836uni2837uni2838uni2839uni283Auni283Buni283Cuni283Duni283Euni283Funi2840uni2841uni2842uni2843uni2844uni2845uni2846uni2847uni2848uni2849uni284Auni284Buni284Cuni284Duni284Euni284Funi2850uni2851uni2852uni2853uni2854uni2855uni2856uni2857uni2858uni2859uni285Auni285Buni285Cuni285Duni285Euni285Funi2860uni2861uni2862uni2863uni2864uni2865uni2866uni2867uni2868uni2869uni286Auni286Buni286Cuni286Duni286Euni286Funi2870uni2871uni2872uni2873uni2874uni2875uni2876uni2877uni2878uni2879uni287Auni287Buni287Cuni287Duni287Euni287Funi2880uni2881uni2882uni2883uni2884uni2885uni2886uni2887uni2888uni2889uni288Auni288Buni288Cuni288Duni288Euni288Funi2890uni2891uni2892uni2893uni2894uni2895uni2896uni2897uni2898uni2899uni289Auni289Buni289Cuni289Duni289Euni289Funi28A0uni28A1uni28A2uni28A3uni28A4uni28A5uni28A6uni28A7uni28A8uni28A9uni28AAuni28ABuni28ACuni28ADuni28AEuni28AFuni28B0uni28B1uni28B2uni28B3uni28B4uni28B5uni28B6uni28B7uni28B8uni28B9uni28BAuni28BBuni28BCuni28BDuni28BEuni28BFuni28C0uni28C1uni28C2uni28C3uni28C4uni28C5uni28C6uni28C7uni28C8uni28C9uni28CAuni28CBuni28CCuni28CDuni28CEuni28CFuni28D0uni28D1uni28D2uni28D3uni28D4uni28D5uni28D6uni28D7uni28D8uni28D9uni28DAuni28DBuni28DCuni28DDuni28DEuni28DFuni28E0uni28E1uni28E2uni28E3uni28E4uni28E5uni28E6uni28E7uni28E8uni28E9uni28EAuni28EBuni28ECuni28EDuni28EEuni28EFuni28F0uni28F1uni28F2uni28F3uni28F4uni28F5uni28F6uni28F7uni28F8uni28F9uni28FAuni28FBuni28FCuni28FDuni28FEuni28FFuni2906uni2907uni290Auni290Buni2940uni2941uni2983uni2984uni29CEuni29CFuni29D0uni29D1uni29D2uni29D3uni29D4uni29D5uni29EBuni29FAuni29FBuni2A00uni2A01uni2A02uni2A0Cuni2A0Duni2A0Euni2A0Funi2A10uni2A11uni2A12uni2A13uni2A14uni2A15uni2A16uni2A17uni2A18uni2A19uni2A1Auni2A1Buni2A1Cuni2A2Funi2A6Auni2A6Buni2A7Duni2A7Euni2A7Funi2A80uni2A81uni2A82uni2A83uni2A84uni2A85uni2A86uni2A87uni2A88uni2A89uni2A8Auni2A8Buni2A8Cuni2A8Duni2A8Euni2A8Funi2A90uni2A91uni2A92uni2A93uni2A94uni2A95uni2A96uni2A97uni2A98uni2A99uni2A9Auni2A9Buni2A9Cuni2A9Duni2A9Euni2A9Funi2AA0uni2AAEuni2AAFuni2AB0uni2AB1uni2AB2uni2AB3uni2AB4uni2AB5uni2AB6uni2AB7uni2AB8uni2AB9uni2ABAuni2AF9uni2AFAuni2B00uni2B01uni2B02uni2B03uni2B04uni2B05uni2B06uni2B07uni2B08uni2B09uni2B0Auni2B0Buni2B0Cuni2B0Duni2B0Euni2B0Funi2B10uni2B11uni2B12uni2B13uni2B14uni2B15uni2B16uni2B17uni2B18uni2B19uni2B1Auni2B1Funi2B20uni2B21uni2B22uni2B23uni2B24uni2B53uni2B54uni2C60uni2C61uni2C62uni2C63uni2C64uni2C65uni2C66uni2C67uni2C68uni2C69uni2C6Auni2C6Buni2C6Cuni2C6Duni2C6Euni2C6Funi2C70uni2C71uni2C72uni2C73uni2C74uni2C75uni2C76uni2C77uni2C79uni2C7Auni2C7Buni2C7Cuni2C7Duni2C7Euni2C7Funi2D00uni2D01uni2D02uni2D03uni2D04uni2D05uni2D06uni2D07uni2D08uni2D09uni2D0Auni2D0Buni2D0Cuni2D0Duni2D0Euni2D0Funi2D10uni2D11uni2D12uni2D13uni2D14uni2D15uni2D16uni2D17uni2D18uni2D19uni2D1Auni2D1Buni2D1Cuni2D1Duni2D1Euni2D1Funi2D20uni2D21uni2D22uni2D23uni2D24uni2D25uni2E18uni2E1Funi2E22uni2E23uni2E24uni2E25uni2E2Euni4DC0uni4DC1uni4DC2uni4DC3uni4DC4uni4DC5uni4DC6uni4DC7uni4DC8uni4DC9uni4DCAuni4DCBuni4DCCuni4DCDuni4DCEuni4DCFuni4DD0uni4DD1uni4DD2uni4DD3uni4DD4uni4DD5uni4DD6uni4DD7uni4DD8uni4DD9uni4DDAuni4DDBuni4DDCuni4DDDuni4DDEuni4DDFuni4DE0uni4DE1uni4DE2uni4DE3uni4DE4uni4DE5uni4DE6uni4DE7uni4DE8uni4DE9uni4DEAuni4DEBuni4DECuni4DEDuni4DEEuni4DEFuni4DF0uni4DF1uni4DF2uni4DF3uni4DF4uni4DF5uni4DF6uni4DF7uni4DF8uni4DF9uni4DFAuni4DFBuni4DFCuni4DFDuni4DFEuni4DFFuniA4D0uniA4D1uniA4D2uniA4D3uniA4D4uniA4D5uniA4D6uniA4D7uniA4D8uniA4D9uniA4DAuniA4DBuniA4DCuniA4DDuniA4DEuniA4DFuniA4E0uniA4E1uniA4E2uniA4E3uniA4E4uniA4E5uniA4E6uniA4E7uniA4E8uniA4E9uniA4EAuniA4EBuniA4ECuniA4EDuniA4EEuniA4EFuniA4F0uniA4F1uniA4F2uniA4F3uniA4F4uniA4F5uniA4F6uniA4F7uniA4F8uniA4F9uniA4FAuniA4FBuniA4FCuniA4FDuniA4FEuniA4FFuniA644uniA645uniA646uniA647uniA64CuniA64DuniA650uniA651uniA654uniA655uniA656uniA657uniA662uniA663uniA664uniA665uniA666uniA667uniA668uniA669uniA66AuniA66BuniA66CuniA66DuniA66EuniA68AuniA68BuniA68CuniA68DuniA694uniA695uniA698uniA699uniA708uniA709uniA70AuniA70BuniA70CuniA70DuniA70EuniA70FuniA710uniA711uniA712uniA713uniA714uniA715uniA716uniA71BuniA71CuniA71DuniA71EuniA71FuniA722uniA723uniA724uniA725uniA726uniA727uniA728uniA729uniA72AuniA72BuniA730uniA731uniA732uniA733uniA734uniA735uniA736uniA737uniA738uniA739uniA73AuniA73BuniA73CuniA73DuniA73EuniA73FuniA740uniA741uniA746uniA747uniA748uniA749uniA74AuniA74BuniA74EuniA74FuniA750uniA751uniA752uniA753uniA756uniA757uniA764uniA765uniA766uniA767uniA780uniA781uniA782uniA783uniA789uniA78AuniA78BuniA78CuniA78DuniA78EuniA790uniA791uniA7A0uniA7A1uniA7A2uniA7A3uniA7A4uniA7A5uniA7A6uniA7A7uniA7A8uniA7A9uniA7AAuniA7F8uniA7F9uniA7FAuniA7FBuniA7FCuniA7FDuniA7FEuniA7FF	uni02E5.5	uni02E6.5	uni02E7.5	uni02E8.5	uni02E9.5	uni02E5.4	uni02E6.4	uni02E7.4	uni02E8.4	uni02E9.4	uni02E5.3	uni02E6.3	uni02E7.3	uni02E8.3	uni02E9.3	uni02E5.2	uni02E6.2	uni02E7.2	uni02E8.2	uni02E9.2	uni02E5.1	uni02E6.1	uni02E7.1	uni02E8.1	uni02E9.1stemuniF400uniF401uniF402uniF403uniF404uniF405uniF406uniF407uniF408uniF409uniF40AuniF40BuniF40CuniF40DuniF40EuniF40FuniF410uniF411uniF412uniF413uniF414uniF415uniF416uniF417uniF418uniF419uniF41AuniF41BuniF41CuniF41DuniF41EuniF41FuniF420uniF421uniF422uniF423uniF424uniF425uniF426uniF428uniF429uniF42AuniF42BuniF42CuniF42DuniF42EuniF42FuniF430uniF431uniF432uniF433uniF434uniF435uniF436uniF437uniF438uniF439uniF43AuniF43BuniF43CuniF43DuniF43EuniF43FuniF440uniF441uniF6C5uniFB00uniFB03uniFB04uniFB05uniFB06uniFB13uniFB14uniFB15uniFB16uniFB17uniFB1DuniFB1EuniFB1FuniFB20uniFB21uniFB22uniFB23uniFB24uniFB25uniFB26uniFB27uniFB28uniFB29uniFB2AuniFB2BuniFB2CuniFB2DuniFB2EuniFB2FuniFB30uniFB31uniFB32uniFB33uniFB34uniFB35uniFB36uniFB37uniFB38uniFB39uniFB3AuniFB3BuniFB3CuniFB3DuniFB3EuniFB3FuniFB40uniFB41uniFB42uniFB43uniFB44uniFB45uniFB46uniFB47uniFB48uniFB49uniFB4AuniFB4BuniFB4CuniFB4DuniFB4EuniFB4FuniFE00uniFE01uniFE02uniFE03uniFE04uniFE05uniFE06uniFE07uniFE08uniFE09uniFE0AuniFE0BuniFE0CuniFE0DuniFE0EuniFE0FuniFE20uniFE21uniFE22uniFE23uniFFF9uniFFFAuniFFFBuniFFFCuniFFFDu10300u10301u10302u10303u10304u10305u10306u10307u10308u10309u1030Au1030Bu1030Cu1030Du1030Eu1030Fu10310u10311u10312u10313u10314u10315u10316u10317u10318u10319u1031Au1031Bu1031Cu1031Du1031Eu10320u10321u10322u10323u1D300u1D301u1D302u1D303u1D304u1D305u1D306u1D307u1D308u1D309u1D30Au1D30Bu1D30Cu1D30Du1D30Eu1D30Fu1D310u1D311u1D312u1D313u1D314u1D315u1D316u1D317u1D318u1D319u1D31Au1D31Bu1D31Cu1D31Du1D31Eu1D31Fu1D320u1D321u1D322u1D323u1D324u1D325u1D326u1D327u1D328u1D329u1D32Au1D32Bu1D32Cu1D32Du1D32Eu1D32Fu1D330u1D331u1D332u1D333u1D334u1D335u1D336u1D337u1D338u1D339u1D33Au1D33Bu1D33Cu1D33Du1D33Eu1D33Fu1D340u1D341u1D342u1D343u1D344u1D345u1D346u1D347u1D348u1D349u1D34Au1D34Bu1D34Cu1D34Du1D34Eu1D34Fu1D350u1D351u1D352u1D353u1D354u1D355u1D356u1D538u1D539u1D53Bu1D53Cu1D53Du1D53Eu1D540u1D541u1D542u1D543u1D544u1D546u1D54Au1D54Bu1D54Cu1D54Du1D54Eu1D54Fu1D550u1D552u1D553u1D554u1D555u1D556u1D557u1D558u1D559u1D55Au1D55Bu1D55Cu1D55Du1D55Eu1D55Fu1D560u1D561u1D562u1D563u1D564u1D565u1D566u1D567u1D568u1D569u1D56Au1D56Bu1D608u1D609u1D60Au1D60Bu1D60Cu1D60Du1D60Eu1D60Fu1D610u1D611u1D612u1D613u1D614u1D615u1D616u1D617u1D618u1D619u1D61Au1D61Bu1D61Cu1D61Du1D61Eu1D61Fu1D620u1D621u1D622u1D623u1D624u1D625u1D626u1D627u1D628u1D629u1D62Au1D62Bu1D62Cu1D62Du1D62Eu1D62Fu1D630u1D631u1D632u1D633u1D634u1D635u1D636u1D637u1D638u1D639u1D63Au1D63Bu1D7D8u1D7D9u1D7DAu1D7DBu1D7DCu1D7DDu1D7DEu1D7DFu1D7E0u1D7E1u1F030u1F031u1F032u1F033u1F034u1F035u1F036u1F037u1F038u1F039u1F03Au1F03Bu1F03Cu1F03Du1F03Eu1F03Fu1F040u1F041u1F042u1F043u1F044u1F045u1F046u1F047u1F048u1F049u1F04Au1F04Bu1F04Cu1F04Du1F04Eu1F04Fu1F050u1F051u1F052u1F053u1F054u1F055u1F056u1F057u1F058u1F059u1F05Au1F05Bu1F05Cu1F05Du1F05Eu1F05Fu1F060u1F061u1F062u1F063u1F064u1F065u1F066u1F067u1F068u1F069u1F06Au1F06Bu1F06Cu1F06Du1F06Eu1F06Fu1F070u1F071u1F072u1F073u1F074u1F075u1F076u1F077u1F078u1F079u1F07Au1F07Bu1F07Cu1F07Du1F07Eu1F07Fu1F080u1F081u1F082u1F083u1F084u1F085u1F086u1F087u1F088u1F089u1F08Au1F08Bu1F08Cu1F08Du1F08Eu1F08Fu1F090u1F091u1F092u1F093u1F0A0u1F0A1u1F0A2u1F0A3u1F0A4u1F0A5u1F0A6u1F0A7u1F0A8u1F0A9u1F0AAu1F0ABu1F0ACu1F0ADu1F0AEu1F0B1u1F0B2u1F0B3u1F0B4u1F0B5u1F0B6u1F0B7u1F0B8u1F0B9u1F0BAu1F0BBu1F0BCu1F0BDu1F0BEu1F0C1u1F0C2u1F0C3u1F0C4u1F0C5u1F0C6u1F0C7u1F0C8u1F0C9u1F0CAu1F0CBu1F0CCu1F0CDu1F0CEu1F0CFu1F0D1u1F0D2u1F0D3u1F0D4u1F0D5u1F0D6u1F0D7u1F0D8u1F0D9u1F0DAu1F0DBu1F0DCu1F0DDu1F0DEu1F0DFu1F311u1F312u1F313u1F314u1F315u1F316u1F317u1F318u1F42Du1F42Eu1F431u1F435u1F600u1F601u1F602u1F603u1F604u1F605u1F606u1F607u1F608u1F609u1F60Au1F60Bu1F60Cu1F60Du1F60Eu1F60Fu1F610u1F611u1F612u1F613u1F614u1F615u1F616u1F617u1F618u1F619u1F61Au1F61Bu1F61Cu1F61Du1F61Eu1F61Fu1F620u1F621u1F622u1F623u1F625u1F626u1F627u1F628u1F629u1F62Au1F62Bu1F62Du1F62Eu1F62Fu1F630u1F631u1F632u1F633u1F634u1F635u1F636u1F637u1F638u1F639u1F63Au1F63Bu1F63Cu1F63Du1F63Eu1F63Fu1F640u1F643	dlLtcaronDieresisAcuteTildeGrave
CircumflexCaronuni0311.caseBreve	DotaccentHungarumlautDoublegraveEng.altuni0268.dotlessuni029D.dotlessuni03080304uni03040308uni03070304uni03080301uni03080300uni03040301uni03040300uni03030304uni0308030Cuni03030308uni030C0307uni03030301uni03020301uni03020300uni03020303uni03060303uni03060301uni03060300uni03060309uni03020309uni03010307
brailledotJ.altl.altuni0478.monographuni0479.monographiogonek.dotlessuni2148.dotlessuni2149.dotlessuni1E2D.dotlessuni1ECB.dotlessdcoI.alt
arrow.basealpha.small.regulariota.small.regularrho.small.regularomega.small.regular	Ringaboveuni2630.altuni2631.altuni2632.altuni2633.altuni2634.altuni2635.altuni2636.altuni2637.altuni047E.diacuni048A.brevelessuni048B.brevelessy.altexclamdown.casequestiondown.caseuni2E18.case   @%2s2%%:2SMAS2
}MA}G}G2~}K%}d|{zyzyx]yyxw%x]x@w%vutdsrq%rdqpq%poMAon@mlkji:jdiK%i:hNhgfg2feddMAdcbaba`_`d_^_^]
\[\[ZMAZYXY(XWVUVUT]UUTS%T]T@S%RQP.QP.ONONMK%MALK%LKJK%JIHGHGFEDCB}CB}A@?><6B<;:6B:S9@p8}76B6-6B543:20/-,+-+1*))#('&'d&%
%2$$}#:#""!!   @	@:%d%%A%:}
:-:-

@ d+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++StartFontMetrics 4.1
Notice Converted by PHP-font-lib
Comment https://github.com/PhenX/php-font-lib
EncodingScheme FontSpecific
FontName DejaVu Sans
FontSubfamily Oblique
UniqueID DejaVu Sans Oblique
FullName DejaVu Sans Oblique
Version Version 2.37
PostScriptName DejaVuSans-Oblique
Manufacturer DejaVu fonts team
FontVendorURL http://dejavu.sourceforge.net
LicenseURL http://dejavu.sourceforge.net/wiki/index.php/License
PreferredFamily DejaVu Sans
PreferredSubfamily Oblique
Weight Medium
ItalicAngle -11
IsFixedPitch false
UnderlineThickness 44
UnderlinePosition -63
FontHeightOffset 0
Ascender 928
Descender -236
FontBBox -1016 -350 1659 1068
StartCharMetrics 5355
U 32 ; WX 318 ; N space ; G 3
U 33 ; WX 401 ; N exclam ; G 4
U 34 ; WX 460 ; N quotedbl ; G 5
U 35 ; WX 838 ; N numbersign ; G 6
U 36 ; WX 636 ; N dollar ; G 7
U 37 ; WX 950 ; N percent ; G 8
U 38 ; WX 780 ; N ampersand ; G 9
U 39 ; WX 275 ; N quotesingle ; G 10
U 40 ; WX 390 ; N parenleft ; G 11
U 41 ; WX 390 ; N parenright ; G 12
U 42 ; WX 500 ; N asterisk ; G 13
U 43 ; WX 838 ; N plus ; G 14
U 44 ; WX 318 ; N comma ; G 15
U 45 ; WX 361 ; N hyphen ; G 16
U 46 ; WX 318 ; N period ; G 17
U 47 ; WX 337 ; N slash ; G 18
U 48 ; WX 636 ; N zero ; G 19
U 49 ; WX 636 ; N one ; G 20
U 50 ; WX 636 ; N two ; G 21
U 51 ; WX 636 ; N three ; G 22
U 52 ; WX 636 ; N four ; G 23
U 53 ; WX 636 ; N five ; G 24
U 54 ; WX 636 ; N six ; G 25
U 55 ; WX 636 ; N seven ; G 26
U 56 ; WX 636 ; N eight ; G 27
U 57 ; WX 636 ; N nine ; G 28
U 58 ; WX 337 ; N colon ; G 29
U 59 ; WX 337 ; N semicolon ; G 30
U 60 ; WX 838 ; N less ; G 31
U 61 ; WX 838 ; N equal ; G 32
U 62 ; WX 838 ; N greater ; G 33
U 63 ; WX 531 ; N question ; G 34
U 64 ; WX 1000 ; N at ; G 35
U 65 ; WX 684 ; N A ; G 36
U 66 ; WX 686 ; N B ; G 37
U 67 ; WX 698 ; N C ; G 38
U 68 ; WX 770 ; N D ; G 39
U 69 ; WX 632 ; N E ; G 40
U 70 ; WX 575 ; N F ; G 41
U 71 ; WX 775 ; N G ; G 42
U 72 ; WX 752 ; N H ; G 43
U 73 ; WX 295 ; N I ; G 44
U 74 ; WX 295 ; N J ; G 45
U 75 ; WX 656 ; N K ; G 46
U 76 ; WX 557 ; N L ; G 47
U 77 ; WX 863 ; N M ; G 48
U 78 ; WX 748 ; N N ; G 49
U 79 ; WX 787 ; N O ; G 50
U 80 ; WX 603 ; N P ; G 51
U 81 ; WX 787 ; N Q ; G 52
U 82 ; WX 695 ; N R ; G 53
U 83 ; WX 635 ; N S ; G 54
U 84 ; WX 611 ; N T ; G 55
U 85 ; WX 732 ; N U ; G 56
U 86 ; WX 684 ; N V ; G 57
U 87 ; WX 989 ; N W ; G 58
U 88 ; WX 685 ; N X ; G 59
U 89 ; WX 611 ; N Y ; G 60
U 90 ; WX 685 ; N Z ; G 61
U 91 ; WX 390 ; N bracketleft ; G 62
U 92 ; WX 337 ; N backslash ; G 63
U 93 ; WX 390 ; N bracketright ; G 64
U 94 ; WX 838 ; N asciicircum ; G 65
U 95 ; WX 500 ; N underscore ; G 66
U 96 ; WX 500 ; N grave ; G 67
U 97 ; WX 613 ; N a ; G 68
U 98 ; WX 635 ; N b ; G 69
U 99 ; WX 550 ; N c ; G 70
U 100 ; WX 635 ; N d ; G 71
U 101 ; WX 615 ; N e ; G 72
U 102 ; WX 352 ; N f ; G 73
U 103 ; WX 635 ; N g ; G 74
U 104 ; WX 634 ; N h ; G 75
U 105 ; WX 278 ; N i ; G 76
U 106 ; WX 278 ; N j ; G 77
U 107 ; WX 579 ; N k ; G 78
U 108 ; WX 278 ; N l ; G 79
U 109 ; WX 974 ; N m ; G 80
U 110 ; WX 634 ; N n ; G 81
U 111 ; WX 612 ; N o ; G 82
U 112 ; WX 635 ; N p ; G 83
U 113 ; WX 635 ; N q ; G 84
U 114 ; WX 411 ; N r ; G 85
U 115 ; WX 521 ; N s ; G 86
U 116 ; WX 392 ; N t ; G 87
U 117 ; WX 634 ; N u ; G 88
U 118 ; WX 592 ; N v ; G 89
U 119 ; WX 818 ; N w ; G 90
U 120 ; WX 592 ; N x ; G 91
U 121 ; WX 592 ; N y ; G 92
U 122 ; WX 525 ; N z ; G 93
U 123 ; WX 636 ; N braceleft ; G 94
U 124 ; WX 337 ; N bar ; G 95
U 125 ; WX 636 ; N braceright ; G 96
U 126 ; WX 838 ; N asciitilde ; G 97
U 160 ; WX 318 ; N nbspace ; G 98
U 161 ; WX 401 ; N exclamdown ; G 99
U 162 ; WX 636 ; N cent ; G 100
U 163 ; WX 636 ; N sterling ; G 101
U 164 ; WX 636 ; N currency ; G 102
U 165 ; WX 636 ; N yen ; G 103
U 166 ; WX 337 ; N brokenbar ; G 104
U 167 ; WX 500 ; N section ; G 105
U 168 ; WX 500 ; N dieresis ; G 106
U 169 ; WX 1000 ; N copyright ; G 107
U 170 ; WX 471 ; N ordfeminine ; G 108
U 171 ; WX 617 ; N guillemotleft ; G 109
U 172 ; WX 838 ; N logicalnot ; G 110
U 173 ; WX 361 ; N sfthyphen ; G 111
U 174 ; WX 1000 ; N registered ; G 112
U 175 ; WX 500 ; N macron ; G 113
U 176 ; WX 500 ; N degree ; G 114
U 177 ; WX 838 ; N plusminus ; G 115
U 178 ; WX 401 ; N twosuperior ; G 116
U 179 ; WX 401 ; N threesuperior ; G 117
U 180 ; WX 500 ; N acute ; G 118
U 181 ; WX 636 ; N mu ; G 119
U 182 ; WX 636 ; N paragraph ; G 120
U 183 ; WX 318 ; N periodcentered ; G 121
U 184 ; WX 500 ; N cedilla ; G 122
U 185 ; WX 401 ; N onesuperior ; G 123
U 186 ; WX 471 ; N ordmasculine ; G 124
U 187 ; WX 617 ; N guillemotright ; G 125
U 188 ; WX 969 ; N onequarter ; G 126
U 189 ; WX 969 ; N onehalf ; G 127
U 190 ; WX 969 ; N threequarters ; G 128
U 191 ; WX 531 ; N questiondown ; G 129
U 192 ; WX 684 ; N Agrave ; G 130
U 193 ; WX 684 ; N Aacute ; G 131
U 194 ; WX 684 ; N Acircumflex ; G 132
U 195 ; WX 684 ; N Atilde ; G 133
U 196 ; WX 684 ; N Adieresis ; G 134
U 197 ; WX 684 ; N Aring ; G 135
U 198 ; WX 974 ; N AE ; G 136
U 199 ; WX 698 ; N Ccedilla ; G 137
U 200 ; WX 632 ; N Egrave ; G 138
U 201 ; WX 632 ; N Eacute ; G 139
U 202 ; WX 632 ; N Ecircumflex ; G 140
U 203 ; WX 632 ; N Edieresis ; G 141
U 204 ; WX 295 ; N Igrave ; G 142
U 205 ; WX 295 ; N Iacute ; G 143
U 206 ; WX 295 ; N Icircumflex ; G 144
U 207 ; WX 295 ; N Idieresis ; G 145
U 208 ; WX 775 ; N Eth ; G 146
U 209 ; WX 748 ; N Ntilde ; G 147
U 210 ; WX 787 ; N Ograve ; G 148
U 211 ; WX 787 ; N Oacute ; G 149
U 212 ; WX 787 ; N Ocircumflex ; G 150
U 213 ; WX 787 ; N Otilde ; G 151
U 214 ; WX 787 ; N Odieresis ; G 152
U 215 ; WX 838 ; N multiply ; G 153
U 216 ; WX 787 ; N Oslash ; G 154
U 217 ; WX 732 ; N Ugrave ; G 155
U 218 ; WX 732 ; N Uacute ; G 156
U 219 ; WX 732 ; N Ucircumflex ; G 157
U 220 ; WX 732 ; N Udieresis ; G 158
U 221 ; WX 611 ; N Yacute ; G 159
U 222 ; WX 608 ; N Thorn ; G 160
U 223 ; WX 630 ; N germandbls ; G 161
U 224 ; WX 613 ; N agrave ; G 162
U 225 ; WX 613 ; N aacute ; G 163
U 226 ; WX 613 ; N acircumflex ; G 164
U 227 ; WX 613 ; N atilde ; G 165
U 228 ; WX 613 ; N adieresis ; G 166
U 229 ; WX 613 ; N aring ; G 167
U 230 ; WX 995 ; N ae ; G 168
U 231 ; WX 550 ; N ccedilla ; G 169
U 232 ; WX 615 ; N egrave ; G 170
U 233 ; WX 615 ; N eacute ; G 171
U 234 ; WX 615 ; N ecircumflex ; G 172
U 235 ; WX 615 ; N edieresis ; G 173
U 236 ; WX 278 ; N igrave ; G 174
U 237 ; WX 278 ; N iacute ; G 175
U 238 ; WX 278 ; N icircumflex ; G 176
U 239 ; WX 278 ; N idieresis ; G 177
U 240 ; WX 612 ; N eth ; G 178
U 241 ; WX 634 ; N ntilde ; G 179
U 242 ; WX 612 ; N ograve ; G 180
U 243 ; WX 612 ; N oacute ; G 181
U 244 ; WX 612 ; N ocircumflex ; G 182
U 245 ; WX 612 ; N otilde ; G 183
U 246 ; WX 612 ; N odieresis ; G 184
U 247 ; WX 838 ; N divide ; G 185
U 248 ; WX 612 ; N oslash ; G 186
U 249 ; WX 634 ; N ugrave ; G 187
U 250 ; WX 634 ; N uacute ; G 188
U 251 ; WX 634 ; N ucircumflex ; G 189
U 252 ; WX 634 ; N udieresis ; G 190
U 253 ; WX 592 ; N yacute ; G 191
U 254 ; WX 635 ; N thorn ; G 192
U 255 ; WX 592 ; N ydieresis ; G 193
U 256 ; WX 684 ; N Amacron ; G 194
U 257 ; WX 613 ; N amacron ; G 195
U 258 ; WX 684 ; N Abreve ; G 196
U 259 ; WX 613 ; N abreve ; G 197
U 260 ; WX 684 ; N Aogonek ; G 198
U 261 ; WX 613 ; N aogonek ; G 199
U 262 ; WX 698 ; N Cacute ; G 200
U 263 ; WX 550 ; N cacute ; G 201
U 264 ; WX 698 ; N Ccircumflex ; G 202
U 265 ; WX 550 ; N ccircumflex ; G 203
U 266 ; WX 698 ; N Cdotaccent ; G 204
U 267 ; WX 550 ; N cdotaccent ; G 205
U 268 ; WX 698 ; N Ccaron ; G 206
U 269 ; WX 550 ; N ccaron ; G 207
U 270 ; WX 770 ; N Dcaron ; G 208
U 271 ; WX 635 ; N dcaron ; G 209
U 272 ; WX 775 ; N Dcroat ; G 210
U 273 ; WX 635 ; N dmacron ; G 211
U 274 ; WX 632 ; N Emacron ; G 212
U 275 ; WX 615 ; N emacron ; G 213
U 276 ; WX 632 ; N Ebreve ; G 214
U 277 ; WX 615 ; N ebreve ; G 215
U 278 ; WX 632 ; N Edotaccent ; G 216
U 279 ; WX 615 ; N edotaccent ; G 217
U 280 ; WX 632 ; N Eogonek ; G 218
U 281 ; WX 615 ; N eogonek ; G 219
U 282 ; WX 632 ; N Ecaron ; G 220
U 283 ; WX 615 ; N ecaron ; G 221
U 284 ; WX 775 ; N Gcircumflex ; G 222
U 285 ; WX 635 ; N gcircumflex ; G 223
U 286 ; WX 775 ; N Gbreve ; G 224
U 287 ; WX 635 ; N gbreve ; G 225
U 288 ; WX 775 ; N Gdotaccent ; G 226
U 289 ; WX 635 ; N gdotaccent ; G 227
U 290 ; WX 775 ; N Gcommaaccent ; G 228
U 291 ; WX 635 ; N gcommaaccent ; G 229
U 292 ; WX 752 ; N Hcircumflex ; G 230
U 293 ; WX 634 ; N hcircumflex ; G 231
U 294 ; WX 916 ; N Hbar ; G 232
U 295 ; WX 695 ; N hbar ; G 233
U 296 ; WX 295 ; N Itilde ; G 234
U 297 ; WX 278 ; N itilde ; G 235
U 298 ; WX 295 ; N Imacron ; G 236
U 299 ; WX 278 ; N imacron ; G 237
U 300 ; WX 295 ; N Ibreve ; G 238
U 301 ; WX 278 ; N ibreve ; G 239
U 302 ; WX 295 ; N Iogonek ; G 240
U 303 ; WX 278 ; N iogonek ; G 241
U 304 ; WX 295 ; N Idot ; G 242
U 305 ; WX 278 ; N dotlessi ; G 243
U 306 ; WX 590 ; N IJ ; G 244
U 307 ; WX 556 ; N ij ; G 245
U 308 ; WX 295 ; N Jcircumflex ; G 246
U 309 ; WX 278 ; N jcircumflex ; G 247
U 310 ; WX 656 ; N Kcommaaccent ; G 248
U 311 ; WX 579 ; N kcommaaccent ; G 249
U 312 ; WX 579 ; N kgreenlandic ; G 250
U 313 ; WX 557 ; N Lacute ; G 251
U 314 ; WX 278 ; N lacute ; G 252
U 315 ; WX 557 ; N Lcommaaccent ; G 253
U 316 ; WX 278 ; N lcommaaccent ; G 254
U 317 ; WX 557 ; N Lcaron ; G 255
U 318 ; WX 278 ; N lcaron ; G 256
U 319 ; WX 557 ; N Ldot ; G 257
U 320 ; WX 278 ; N ldot ; G 258
U 321 ; WX 562 ; N Lslash ; G 259
U 322 ; WX 287 ; N lslash ; G 260
U 323 ; WX 748 ; N Nacute ; G 261
U 324 ; WX 634 ; N nacute ; G 262
U 325 ; WX 748 ; N Ncommaaccent ; G 263
U 326 ; WX 634 ; N ncommaaccent ; G 264
U 327 ; WX 748 ; N Ncaron ; G 265
U 328 ; WX 634 ; N ncaron ; G 266
U 329 ; WX 813 ; N napostrophe ; G 267
U 330 ; WX 748 ; N Eng ; G 268
U 331 ; WX 634 ; N eng ; G 269
U 332 ; WX 787 ; N Omacron ; G 270
U 333 ; WX 612 ; N omacron ; G 271
U 334 ; WX 787 ; N Obreve ; G 272
U 335 ; WX 612 ; N obreve ; G 273
U 336 ; WX 787 ; N Ohungarumlaut ; G 274
U 337 ; WX 612 ; N ohungarumlaut ; G 275
U 338 ; WX 1070 ; N OE ; G 276
U 339 ; WX 1028 ; N oe ; G 277
U 340 ; WX 695 ; N Racute ; G 278
U 341 ; WX 411 ; N racute ; G 279
U 342 ; WX 695 ; N Rcommaaccent ; G 280
U 343 ; WX 411 ; N rcommaaccent ; G 281
U 344 ; WX 695 ; N Rcaron ; G 282
U 345 ; WX 411 ; N rcaron ; G 283
U 346 ; WX 635 ; N Sacute ; G 284
U 347 ; WX 521 ; N sacute ; G 285
U 348 ; WX 635 ; N Scircumflex ; G 286
U 349 ; WX 521 ; N scircumflex ; G 287
U 350 ; WX 635 ; N Scedilla ; G 288
U 351 ; WX 521 ; N scedilla ; G 289
U 352 ; WX 635 ; N Scaron ; G 290
U 353 ; WX 521 ; N scaron ; G 291
U 354 ; WX 611 ; N Tcommaaccent ; G 292
U 355 ; WX 392 ; N tcommaaccent ; G 293
U 356 ; WX 611 ; N Tcaron ; G 294
U 357 ; WX 392 ; N tcaron ; G 295
U 358 ; WX 611 ; N Tbar ; G 296
U 359 ; WX 392 ; N tbar ; G 297
U 360 ; WX 732 ; N Utilde ; G 298
U 361 ; WX 634 ; N utilde ; G 299
U 362 ; WX 732 ; N Umacron ; G 300
U 363 ; WX 634 ; N umacron ; G 301
U 364 ; WX 732 ; N Ubreve ; G 302
U 365 ; WX 634 ; N ubreve ; G 303
U 366 ; WX 732 ; N Uring ; G 304
U 367 ; WX 634 ; N uring ; G 305
U 368 ; WX 732 ; N Uhungarumlaut ; G 306
U 369 ; WX 634 ; N uhungarumlaut ; G 307
U 370 ; WX 732 ; N Uogonek ; G 308
U 371 ; WX 634 ; N uogonek ; G 309
U 372 ; WX 989 ; N Wcircumflex ; G 310
U 373 ; WX 818 ; N wcircumflex ; G 311
U 374 ; WX 611 ; N Ycircumflex ; G 312
U 375 ; WX 592 ; N ycircumflex ; G 313
U 376 ; WX 611 ; N Ydieresis ; G 314
U 377 ; WX 685 ; N Zacute ; G 315
U 378 ; WX 525 ; N zacute ; G 316
U 379 ; WX 685 ; N Zdotaccent ; G 317
U 380 ; WX 525 ; N zdotaccent ; G 318
U 381 ; WX 685 ; N Zcaron ; G 319
U 382 ; WX 525 ; N zcaron ; G 320
U 383 ; WX 352 ; N longs ; G 321
U 384 ; WX 635 ; N uni0180 ; G 322
U 385 ; WX 735 ; N uni0181 ; G 323
U 386 ; WX 686 ; N uni0182 ; G 324
U 387 ; WX 635 ; N uni0183 ; G 325
U 388 ; WX 686 ; N uni0184 ; G 326
U 389 ; WX 635 ; N uni0185 ; G 327
U 390 ; WX 703 ; N uni0186 ; G 328
U 391 ; WX 698 ; N uni0187 ; G 329
U 392 ; WX 550 ; N uni0188 ; G 330
U 393 ; WX 775 ; N uni0189 ; G 331
U 394 ; WX 819 ; N uni018A ; G 332
U 395 ; WX 686 ; N uni018B ; G 333
U 396 ; WX 635 ; N uni018C ; G 334
U 397 ; WX 612 ; N uni018D ; G 335
U 398 ; WX 632 ; N uni018E ; G 336
U 399 ; WX 787 ; N uni018F ; G 337
U 400 ; WX 614 ; N uni0190 ; G 338
U 401 ; WX 575 ; N uni0191 ; G 339
U 402 ; WX 352 ; N florin ; G 340
U 403 ; WX 775 ; N uni0193 ; G 341
U 404 ; WX 687 ; N uni0194 ; G 342
U 405 ; WX 984 ; N uni0195 ; G 343
U 406 ; WX 354 ; N uni0196 ; G 344
U 407 ; WX 295 ; N uni0197 ; G 345
U 408 ; WX 746 ; N uni0198 ; G 346
U 409 ; WX 579 ; N uni0199 ; G 347
U 410 ; WX 278 ; N uni019A ; G 348
U 411 ; WX 592 ; N uni019B ; G 349
U 412 ; WX 974 ; N uni019C ; G 350
U 413 ; WX 748 ; N uni019D ; G 351
U 414 ; WX 634 ; N uni019E ; G 352
U 415 ; WX 787 ; N uni019F ; G 353
U 416 ; WX 913 ; N Ohorn ; G 354
U 417 ; WX 612 ; N ohorn ; G 355
U 418 ; WX 938 ; N uni01A2 ; G 356
U 419 ; WX 737 ; N uni01A3 ; G 357
U 420 ; WX 652 ; N uni01A4 ; G 358
U 421 ; WX 635 ; N uni01A5 ; G 359
U 422 ; WX 695 ; N uni01A6 ; G 360
U 423 ; WX 635 ; N uni01A7 ; G 361
U 424 ; WX 521 ; N uni01A8 ; G 362
U 425 ; WX 632 ; N uni01A9 ; G 363
U 426 ; WX 336 ; N uni01AA ; G 364
U 427 ; WX 392 ; N uni01AB ; G 365
U 428 ; WX 611 ; N uni01AC ; G 366
U 429 ; WX 392 ; N uni01AD ; G 367
U 430 ; WX 611 ; N uni01AE ; G 368
U 431 ; WX 838 ; N Uhorn ; G 369
U 432 ; WX 634 ; N uhorn ; G 370
U 433 ; WX 764 ; N uni01B1 ; G 371
U 434 ; WX 721 ; N uni01B2 ; G 372
U 435 ; WX 744 ; N uni01B3 ; G 373
U 436 ; WX 730 ; N uni01B4 ; G 374
U 437 ; WX 685 ; N uni01B5 ; G 375
U 438 ; WX 525 ; N uni01B6 ; G 376
U 439 ; WX 666 ; N uni01B7 ; G 377
U 440 ; WX 666 ; N uni01B8 ; G 378
U 441 ; WX 578 ; N uni01B9 ; G 379
U 442 ; WX 525 ; N uni01BA ; G 380
U 443 ; WX 636 ; N uni01BB ; G 381
U 444 ; WX 666 ; N uni01BC ; G 382
U 445 ; WX 578 ; N uni01BD ; G 383
U 446 ; WX 510 ; N uni01BE ; G 384
U 447 ; WX 635 ; N uni01BF ; G 385
U 448 ; WX 295 ; N uni01C0 ; G 386
U 449 ; WX 492 ; N uni01C1 ; G 387
U 450 ; WX 459 ; N uni01C2 ; G 388
U 451 ; WX 295 ; N uni01C3 ; G 389
U 452 ; WX 1455 ; N uni01C4 ; G 390
U 453 ; WX 1295 ; N uni01C5 ; G 391
U 454 ; WX 1160 ; N uni01C6 ; G 392
U 455 ; WX 852 ; N uni01C7 ; G 393
U 456 ; WX 835 ; N uni01C8 ; G 394
U 457 ; WX 556 ; N uni01C9 ; G 395
U 458 ; WX 1043 ; N uni01CA ; G 396
U 459 ; WX 1026 ; N uni01CB ; G 397
U 460 ; WX 912 ; N uni01CC ; G 398
U 461 ; WX 684 ; N uni01CD ; G 399
U 462 ; WX 613 ; N uni01CE ; G 400
U 463 ; WX 295 ; N uni01CF ; G 401
U 464 ; WX 278 ; N uni01D0 ; G 402
U 465 ; WX 787 ; N uni01D1 ; G 403
U 466 ; WX 612 ; N uni01D2 ; G 404
U 467 ; WX 732 ; N uni01D3 ; G 405
U 468 ; WX 634 ; N uni01D4 ; G 406
U 469 ; WX 732 ; N uni01D5 ; G 407
U 470 ; WX 634 ; N uni01D6 ; G 408
U 471 ; WX 732 ; N uni01D7 ; G 409
U 472 ; WX 634 ; N uni01D8 ; G 410
U 473 ; WX 732 ; N uni01D9 ; G 411
U 474 ; WX 634 ; N uni01DA ; G 412
U 475 ; WX 732 ; N uni01DB ; G 413
U 476 ; WX 634 ; N uni01DC ; G 414
U 477 ; WX 615 ; N uni01DD ; G 415
U 478 ; WX 684 ; N uni01DE ; G 416
U 479 ; WX 613 ; N uni01DF ; G 417
U 480 ; WX 684 ; N uni01E0 ; G 418
U 481 ; WX 613 ; N uni01E1 ; G 419
U 482 ; WX 974 ; N uni01E2 ; G 420
U 483 ; WX 995 ; N uni01E3 ; G 421
U 484 ; WX 775 ; N uni01E4 ; G 422
U 485 ; WX 635 ; N uni01E5 ; G 423
U 486 ; WX 775 ; N Gcaron ; G 424
U 487 ; WX 635 ; N gcaron ; G 425
U 488 ; WX 656 ; N uni01E8 ; G 426
U 489 ; WX 579 ; N uni01E9 ; G 427
U 490 ; WX 787 ; N uni01EA ; G 428
U 491 ; WX 612 ; N uni01EB ; G 429
U 492 ; WX 787 ; N uni01EC ; G 430
U 493 ; WX 612 ; N uni01ED ; G 431
U 494 ; WX 666 ; N uni01EE ; G 432
U 495 ; WX 525 ; N uni01EF ; G 433
U 496 ; WX 278 ; N uni01F0 ; G 434
U 497 ; WX 1455 ; N uni01F1 ; G 435
U 498 ; WX 1295 ; N uni01F2 ; G 436
U 499 ; WX 1160 ; N uni01F3 ; G 437
U 500 ; WX 775 ; N uni01F4 ; G 438
U 501 ; WX 635 ; N uni01F5 ; G 439
U 502 ; WX 1113 ; N uni01F6 ; G 440
U 503 ; WX 682 ; N uni01F7 ; G 441
U 504 ; WX 748 ; N uni01F8 ; G 442
U 505 ; WX 634 ; N uni01F9 ; G 443
U 506 ; WX 684 ; N Aringacute ; G 444
U 507 ; WX 613 ; N aringacute ; G 445
U 508 ; WX 974 ; N AEacute ; G 446
U 509 ; WX 995 ; N aeacute ; G 447
U 510 ; WX 787 ; N Oslashacute ; G 448
U 511 ; WX 612 ; N oslashacute ; G 449
U 512 ; WX 684 ; N uni0200 ; G 450
U 513 ; WX 613 ; N uni0201 ; G 451
U 514 ; WX 684 ; N uni0202 ; G 452
U 515 ; WX 613 ; N uni0203 ; G 453
U 516 ; WX 632 ; N uni0204 ; G 454
U 517 ; WX 615 ; N uni0205 ; G 455
U 518 ; WX 632 ; N uni0206 ; G 456
U 519 ; WX 615 ; N uni0207 ; G 457
U 520 ; WX 295 ; N uni0208 ; G 458
U 521 ; WX 278 ; N uni0209 ; G 459
U 522 ; WX 295 ; N uni020A ; G 460
U 523 ; WX 278 ; N uni020B ; G 461
U 524 ; WX 787 ; N uni020C ; G 462
U 525 ; WX 612 ; N uni020D ; G 463
U 526 ; WX 787 ; N uni020E ; G 464
U 527 ; WX 612 ; N uni020F ; G 465
U 528 ; WX 695 ; N uni0210 ; G 466
U 529 ; WX 411 ; N uni0211 ; G 467
U 530 ; WX 695 ; N uni0212 ; G 468
U 531 ; WX 411 ; N uni0213 ; G 469
U 532 ; WX 732 ; N uni0214 ; G 470
U 533 ; WX 634 ; N uni0215 ; G 471
U 534 ; WX 732 ; N uni0216 ; G 472
U 535 ; WX 634 ; N uni0217 ; G 473
U 536 ; WX 635 ; N Scommaaccent ; G 474
U 537 ; WX 521 ; N scommaaccent ; G 475
U 538 ; WX 611 ; N uni021A ; G 476
U 539 ; WX 392 ; N uni021B ; G 477
U 540 ; WX 627 ; N uni021C ; G 478
U 541 ; WX 521 ; N uni021D ; G 479
U 542 ; WX 752 ; N uni021E ; G 480
U 543 ; WX 634 ; N uni021F ; G 481
U 544 ; WX 735 ; N uni0220 ; G 482
U 545 ; WX 838 ; N uni0221 ; G 483
U 546 ; WX 698 ; N uni0222 ; G 484
U 547 ; WX 610 ; N uni0223 ; G 485
U 548 ; WX 685 ; N uni0224 ; G 486
U 549 ; WX 525 ; N uni0225 ; G 487
U 550 ; WX 684 ; N uni0226 ; G 488
U 551 ; WX 613 ; N uni0227 ; G 489
U 552 ; WX 632 ; N uni0228 ; G 490
U 553 ; WX 615 ; N uni0229 ; G 491
U 554 ; WX 787 ; N uni022A ; G 492
U 555 ; WX 612 ; N uni022B ; G 493
U 556 ; WX 787 ; N uni022C ; G 494
U 557 ; WX 612 ; N uni022D ; G 495
U 558 ; WX 787 ; N uni022E ; G 496
U 559 ; WX 612 ; N uni022F ; G 497
U 560 ; WX 787 ; N uni0230 ; G 498
U 561 ; WX 612 ; N uni0231 ; G 499
U 562 ; WX 611 ; N uni0232 ; G 500
U 563 ; WX 592 ; N uni0233 ; G 501
U 564 ; WX 475 ; N uni0234 ; G 502
U 565 ; WX 843 ; N uni0235 ; G 503
U 566 ; WX 477 ; N uni0236 ; G 504
U 567 ; WX 278 ; N dotlessj ; G 505
U 568 ; WX 998 ; N uni0238 ; G 506
U 569 ; WX 998 ; N uni0239 ; G 507
U 570 ; WX 684 ; N uni023A ; G 508
U 571 ; WX 698 ; N uni023B ; G 509
U 572 ; WX 550 ; N uni023C ; G 510
U 573 ; WX 557 ; N uni023D ; G 511
U 574 ; WX 611 ; N uni023E ; G 512
U 575 ; WX 521 ; N uni023F ; G 513
U 576 ; WX 525 ; N uni0240 ; G 514
U 577 ; WX 603 ; N uni0241 ; G 515
U 578 ; WX 479 ; N uni0242 ; G 516
U 579 ; WX 686 ; N uni0243 ; G 517
U 580 ; WX 732 ; N uni0244 ; G 518
U 581 ; WX 684 ; N uni0245 ; G 519
U 582 ; WX 632 ; N uni0246 ; G 520
U 583 ; WX 615 ; N uni0247 ; G 521
U 584 ; WX 295 ; N uni0248 ; G 522
U 585 ; WX 278 ; N uni0249 ; G 523
U 586 ; WX 781 ; N uni024A ; G 524
U 587 ; WX 635 ; N uni024B ; G 525
U 588 ; WX 695 ; N uni024C ; G 526
U 589 ; WX 411 ; N uni024D ; G 527
U 590 ; WX 611 ; N uni024E ; G 528
U 591 ; WX 592 ; N uni024F ; G 529
U 592 ; WX 613 ; N uni0250 ; G 530
U 593 ; WX 635 ; N uni0251 ; G 531
U 594 ; WX 635 ; N uni0252 ; G 532
U 595 ; WX 635 ; N uni0253 ; G 533
U 596 ; WX 550 ; N uni0254 ; G 534
U 597 ; WX 550 ; N uni0255 ; G 535
U 598 ; WX 635 ; N uni0256 ; G 536
U 599 ; WX 727 ; N uni0257 ; G 537
U 600 ; WX 615 ; N uni0258 ; G 538
U 601 ; WX 615 ; N uni0259 ; G 539
U 602 ; WX 844 ; N uni025A ; G 540
U 603 ; WX 545 ; N uni025B ; G 541
U 604 ; WX 545 ; N uni025C ; G 542
U 605 ; WX 775 ; N uni025D ; G 543
U 606 ; WX 664 ; N uni025E ; G 544
U 607 ; WX 326 ; N uni025F ; G 545
U 608 ; WX 696 ; N uni0260 ; G 546
U 609 ; WX 635 ; N uni0261 ; G 547
U 610 ; WX 629 ; N uni0262 ; G 548
U 611 ; WX 596 ; N uni0263 ; G 549
U 612 ; WX 596 ; N uni0264 ; G 550
U 613 ; WX 634 ; N uni0265 ; G 551
U 614 ; WX 634 ; N uni0266 ; G 552
U 615 ; WX 634 ; N uni0267 ; G 553
U 616 ; WX 372 ; N uni0268 ; G 554
U 617 ; WX 387 ; N uni0269 ; G 555
U 618 ; WX 372 ; N uni026A ; G 556
U 619 ; WX 396 ; N uni026B ; G 557
U 620 ; WX 487 ; N uni026C ; G 558
U 621 ; WX 278 ; N uni026D ; G 559
U 622 ; WX 706 ; N uni026E ; G 560
U 623 ; WX 974 ; N uni026F ; G 561
U 624 ; WX 974 ; N uni0270 ; G 562
U 625 ; WX 974 ; N uni0271 ; G 563
U 626 ; WX 646 ; N uni0272 ; G 564
U 627 ; WX 642 ; N uni0273 ; G 565
U 628 ; WX 634 ; N uni0274 ; G 566
U 629 ; WX 612 ; N uni0275 ; G 567
U 630 ; WX 858 ; N uni0276 ; G 568
U 631 ; WX 728 ; N uni0277 ; G 569
U 632 ; WX 660 ; N uni0278 ; G 570
U 633 ; WX 469 ; N uni0279 ; G 571
U 634 ; WX 469 ; N uni027A ; G 572
U 635 ; WX 469 ; N uni027B ; G 573
U 636 ; WX 469 ; N uni027C ; G 574
U 637 ; WX 469 ; N uni027D ; G 575
U 638 ; WX 530 ; N uni027E ; G 576
U 639 ; WX 530 ; N uni027F ; G 577
U 640 ; WX 602 ; N uni0280 ; G 578
U 641 ; WX 602 ; N uni0281 ; G 579
U 642 ; WX 521 ; N uni0282 ; G 580
U 643 ; WX 336 ; N uni0283 ; G 581
U 644 ; WX 336 ; N uni0284 ; G 582
U 645 ; WX 461 ; N uni0285 ; G 583
U 646 ; WX 336 ; N uni0286 ; G 584
U 647 ; WX 392 ; N uni0287 ; G 585
U 648 ; WX 392 ; N uni0288 ; G 586
U 649 ; WX 634 ; N uni0289 ; G 587
U 650 ; WX 618 ; N uni028A ; G 588
U 651 ; WX 598 ; N uni028B ; G 589
U 652 ; WX 592 ; N uni028C ; G 590
U 653 ; WX 818 ; N uni028D ; G 591
U 654 ; WX 592 ; N uni028E ; G 592
U 655 ; WX 611 ; N uni028F ; G 593
U 656 ; WX 525 ; N uni0290 ; G 594
U 657 ; WX 525 ; N uni0291 ; G 595
U 658 ; WX 578 ; N uni0292 ; G 596
U 659 ; WX 578 ; N uni0293 ; G 597
U 660 ; WX 510 ; N uni0294 ; G 598
U 661 ; WX 510 ; N uni0295 ; G 599
U 662 ; WX 510 ; N uni0296 ; G 600
U 663 ; WX 510 ; N uni0297 ; G 601
U 664 ; WX 787 ; N uni0298 ; G 602
U 665 ; WX 580 ; N uni0299 ; G 603
U 666 ; WX 664 ; N uni029A ; G 604
U 667 ; WX 708 ; N uni029B ; G 605
U 668 ; WX 654 ; N uni029C ; G 606
U 669 ; WX 292 ; N uni029D ; G 607
U 670 ; WX 667 ; N uni029E ; G 608
U 671 ; WX 507 ; N uni029F ; G 609
U 672 ; WX 727 ; N uni02A0 ; G 610
U 673 ; WX 510 ; N uni02A1 ; G 611
U 674 ; WX 510 ; N uni02A2 ; G 612
U 675 ; WX 1014 ; N uni02A3 ; G 613
U 676 ; WX 1058 ; N uni02A4 ; G 614
U 677 ; WX 1013 ; N uni02A5 ; G 615
U 678 ; WX 830 ; N uni02A6 ; G 616
U 679 ; WX 610 ; N uni02A7 ; G 617
U 680 ; WX 778 ; N uni02A8 ; G 618
U 681 ; WX 848 ; N uni02A9 ; G 619
U 682 ; WX 706 ; N uni02AA ; G 620
U 683 ; WX 654 ; N uni02AB ; G 621
U 684 ; WX 515 ; N uni02AC ; G 622
U 685 ; WX 515 ; N uni02AD ; G 623
U 686 ; WX 570 ; N uni02AE ; G 624
U 687 ; WX 664 ; N uni02AF ; G 625
U 688 ; WX 399 ; N uni02B0 ; G 626
U 689 ; WX 399 ; N uni02B1 ; G 627
U 690 ; WX 175 ; N uni02B2 ; G 628
U 691 ; WX 259 ; N uni02B3 ; G 629
U 692 ; WX 295 ; N uni02B4 ; G 630
U 693 ; WX 296 ; N uni02B5 ; G 631
U 694 ; WX 379 ; N uni02B6 ; G 632
U 695 ; WX 515 ; N uni02B7 ; G 633
U 696 ; WX 373 ; N uni02B8 ; G 634
U 697 ; WX 278 ; N uni02B9 ; G 635
U 698 ; WX 460 ; N uni02BA ; G 636
U 699 ; WX 318 ; N uni02BB ; G 637
U 700 ; WX 318 ; N uni02BC ; G 638
U 701 ; WX 318 ; N uni02BD ; G 639
U 702 ; WX 307 ; N uni02BE ; G 640
U 703 ; WX 307 ; N uni02BF ; G 641
U 704 ; WX 370 ; N uni02C0 ; G 642
U 705 ; WX 370 ; N uni02C1 ; G 643
U 706 ; WX 500 ; N uni02C2 ; G 644
U 707 ; WX 500 ; N uni02C3 ; G 645
U 708 ; WX 500 ; N uni02C4 ; G 646
U 709 ; WX 500 ; N uni02C5 ; G 647
U 710 ; WX 500 ; N circumflex ; G 648
U 711 ; WX 500 ; N caron ; G 649
U 712 ; WX 275 ; N uni02C8 ; G 650
U 713 ; WX 500 ; N uni02C9 ; G 651
U 714 ; WX 500 ; N uni02CA ; G 652
U 715 ; WX 500 ; N uni02CB ; G 653
U 716 ; WX 275 ; N uni02CC ; G 654
U 717 ; WX 500 ; N uni02CD ; G 655
U 718 ; WX 500 ; N uni02CE ; G 656
U 719 ; WX 500 ; N uni02CF ; G 657
U 720 ; WX 337 ; N uni02D0 ; G 658
U 721 ; WX 337 ; N uni02D1 ; G 659
U 722 ; WX 307 ; N uni02D2 ; G 660
U 723 ; WX 307 ; N uni02D3 ; G 661
U 724 ; WX 500 ; N uni02D4 ; G 662
U 725 ; WX 500 ; N uni02D5 ; G 663
U 726 ; WX 390 ; N uni02D6 ; G 664
U 727 ; WX 317 ; N uni02D7 ; G 665
U 728 ; WX 500 ; N breve ; G 666
U 729 ; WX 500 ; N dotaccent ; G 667
U 730 ; WX 500 ; N ring ; G 668
U 731 ; WX 500 ; N ogonek ; G 669
U 732 ; WX 500 ; N tilde ; G 670
U 733 ; WX 500 ; N hungarumlaut ; G 671
U 734 ; WX 315 ; N uni02DE ; G 672
U 735 ; WX 500 ; N uni02DF ; G 673
U 736 ; WX 426 ; N uni02E0 ; G 674
U 737 ; WX 166 ; N uni02E1 ; G 675
U 738 ; WX 373 ; N uni02E2 ; G 676
U 739 ; WX 444 ; N uni02E3 ; G 677
U 740 ; WX 370 ; N uni02E4 ; G 678
U 741 ; WX 493 ; N uni02E5 ; G 679
U 742 ; WX 493 ; N uni02E6 ; G 680
U 743 ; WX 493 ; N uni02E7 ; G 681
U 744 ; WX 493 ; N uni02E8 ; G 682
U 745 ; WX 493 ; N uni02E9 ; G 683
U 748 ; WX 500 ; N uni02EC ; G 684
U 749 ; WX 500 ; N uni02ED ; G 685
U 750 ; WX 518 ; N uni02EE ; G 686
U 755 ; WX 500 ; N uni02F3 ; G 687
U 759 ; WX 500 ; N uni02F7 ; G 688
U 768 ; WX 0 ; N gravecomb ; G 689
U 769 ; WX 0 ; N acutecomb ; G 690
U 770 ; WX 0 ; N uni0302 ; G 691
U 771 ; WX 0 ; N tildecomb ; G 692
U 772 ; WX 0 ; N uni0304 ; G 693
U 773 ; WX 0 ; N uni0305 ; G 694
U 774 ; WX 0 ; N uni0306 ; G 695
U 775 ; WX 0 ; N uni0307 ; G 696
U 776 ; WX 0 ; N uni0308 ; G 697
U 777 ; WX 0 ; N hookabovecomb ; G 698
U 778 ; WX 0 ; N uni030A ; G 699
U 779 ; WX 0 ; N uni030B ; G 700
U 780 ; WX 0 ; N uni030C ; G 701
U 781 ; WX 0 ; N uni030D ; G 702
U 782 ; WX 0 ; N uni030E ; G 703
U 783 ; WX 0 ; N uni030F ; G 704
U 784 ; WX 0 ; N uni0310 ; G 705
U 785 ; WX 0 ; N uni0311 ; G 706
U 786 ; WX 0 ; N uni0312 ; G 707
U 787 ; WX 0 ; N uni0313 ; G 708
U 788 ; WX 0 ; N uni0314 ; G 709
U 789 ; WX 0 ; N uni0315 ; G 710
U 790 ; WX 0 ; N uni0316 ; G 711
U 791 ; WX 0 ; N uni0317 ; G 712
U 792 ; WX 0 ; N uni0318 ; G 713
U 793 ; WX 0 ; N uni0319 ; G 714
U 794 ; WX 0 ; N uni031A ; G 715
U 795 ; WX 0 ; N uni031B ; G 716
U 796 ; WX 0 ; N uni031C ; G 717
U 797 ; WX 0 ; N uni031D ; G 718
U 798 ; WX 0 ; N uni031E ; G 719
U 799 ; WX 0 ; N uni031F ; G 720
U 800 ; WX 0 ; N uni0320 ; G 721
U 801 ; WX 0 ; N uni0321 ; G 722
U 802 ; WX 0 ; N uni0322 ; G 723
U 803 ; WX 0 ; N dotbelowcomb ; G 724
U 804 ; WX 0 ; N uni0324 ; G 725
U 805 ; WX 0 ; N uni0325 ; G 726
U 806 ; WX 0 ; N uni0326 ; G 727
U 807 ; WX 0 ; N uni0327 ; G 728
U 808 ; WX 0 ; N uni0328 ; G 729
U 809 ; WX 0 ; N uni0329 ; G 730
U 810 ; WX 0 ; N uni032A ; G 731
U 811 ; WX 0 ; N uni032B ; G 732
U 812 ; WX 0 ; N uni032C ; G 733
U 813 ; WX 0 ; N uni032D ; G 734
U 814 ; WX 0 ; N uni032E ; G 735
U 815 ; WX 0 ; N uni032F ; G 736
U 816 ; WX 0 ; N uni0330 ; G 737
U 817 ; WX 0 ; N uni0331 ; G 738
U 818 ; WX 0 ; N uni0332 ; G 739
U 819 ; WX 0 ; N uni0333 ; G 740
U 820 ; WX 0 ; N uni0334 ; G 741
U 821 ; WX 0 ; N uni0335 ; G 742
U 822 ; WX 0 ; N uni0336 ; G 743
U 823 ; WX 0 ; N uni0337 ; G 744
U 824 ; WX 0 ; N uni0338 ; G 745
U 825 ; WX 0 ; N uni0339 ; G 746
U 826 ; WX 0 ; N uni033A ; G 747
U 827 ; WX 0 ; N uni033B ; G 748
U 828 ; WX 0 ; N uni033C ; G 749
U 829 ; WX 0 ; N uni033D ; G 750
U 830 ; WX 0 ; N uni033E ; G 751
U 831 ; WX 0 ; N uni033F ; G 752
U 832 ; WX 0 ; N uni0340 ; G 753
U 833 ; WX 0 ; N uni0341 ; G 754
U 834 ; WX 0 ; N uni0342 ; G 755
U 835 ; WX 0 ; N uni0343 ; G 756
U 836 ; WX 0 ; N uni0344 ; G 757
U 837 ; WX 0 ; N uni0345 ; G 758
U 838 ; WX 0 ; N uni0346 ; G 759
U 839 ; WX 0 ; N uni0347 ; G 760
U 840 ; WX 0 ; N uni0348 ; G 761
U 841 ; WX 0 ; N uni0349 ; G 762
U 842 ; WX 0 ; N uni034A ; G 763
U 843 ; WX 0 ; N uni034B ; G 764
U 844 ; WX 0 ; N uni034C ; G 765
U 845 ; WX 0 ; N uni034D ; G 766
U 846 ; WX 0 ; N uni034E ; G 767
U 847 ; WX 0 ; N uni034F ; G 768
U 849 ; WX 0 ; N uni0351 ; G 769
U 850 ; WX 0 ; N uni0352 ; G 770
U 851 ; WX 0 ; N uni0353 ; G 771
U 855 ; WX 0 ; N uni0357 ; G 772
U 856 ; WX 0 ; N uni0358 ; G 773
U 858 ; WX 0 ; N uni035A ; G 774
U 860 ; WX 0 ; N uni035C ; G 775
U 861 ; WX 0 ; N uni035D ; G 776
U 862 ; WX 0 ; N uni035E ; G 777
U 863 ; WX 0 ; N uni035F ; G 778
U 864 ; WX 0 ; N uni0360 ; G 779
U 865 ; WX 0 ; N uni0361 ; G 780
U 866 ; WX 0 ; N uni0362 ; G 781
U 880 ; WX 654 ; N uni0370 ; G 782
U 881 ; WX 568 ; N uni0371 ; G 783
U 882 ; WX 862 ; N uni0372 ; G 784
U 883 ; WX 647 ; N uni0373 ; G 785
U 884 ; WX 278 ; N uni0374 ; G 786
U 885 ; WX 278 ; N uni0375 ; G 787
U 886 ; WX 748 ; N uni0376 ; G 788
U 887 ; WX 650 ; N uni0377 ; G 789
U 890 ; WX 500 ; N uni037A ; G 790
U 891 ; WX 549 ; N uni037B ; G 791
U 892 ; WX 550 ; N uni037C ; G 792
U 893 ; WX 549 ; N uni037D ; G 793
U 894 ; WX 337 ; N uni037E ; G 794
U 895 ; WX 295 ; N uni037F ; G 795
U 900 ; WX 500 ; N tonos ; G 796
U 901 ; WX 500 ; N dieresistonos ; G 797
U 902 ; WX 684 ; N Alphatonos ; G 798
U 903 ; WX 318 ; N anoteleia ; G 799
U 904 ; WX 767 ; N Epsilontonos ; G 800
U 905 ; WX 903 ; N Etatonos ; G 801
U 906 ; WX 435 ; N Iotatonos ; G 802
U 908 ; WX 839 ; N Omicrontonos ; G 803
U 910 ; WX 860 ; N Upsilontonos ; G 804
U 911 ; WX 905 ; N Omegatonos ; G 805
U 912 ; WX 338 ; N iotadieresistonos ; G 806
U 913 ; WX 684 ; N Alpha ; G 807
U 914 ; WX 686 ; N Beta ; G 808
U 915 ; WX 557 ; N Gamma ; G 809
U 916 ; WX 684 ; N uni0394 ; G 810
U 917 ; WX 632 ; N Epsilon ; G 811
U 918 ; WX 685 ; N Zeta ; G 812
U 919 ; WX 752 ; N Eta ; G 813
U 920 ; WX 787 ; N Theta ; G 814
U 921 ; WX 295 ; N Iota ; G 815
U 922 ; WX 656 ; N Kappa ; G 816
U 923 ; WX 684 ; N Lambda ; G 817
U 924 ; WX 863 ; N Mu ; G 818
U 925 ; WX 748 ; N Nu ; G 819
U 926 ; WX 632 ; N Xi ; G 820
U 927 ; WX 787 ; N Omicron ; G 821
U 928 ; WX 752 ; N Pi ; G 822
U 929 ; WX 603 ; N Rho ; G 823
U 931 ; WX 632 ; N Sigma ; G 824
U 932 ; WX 611 ; N Tau ; G 825
U 933 ; WX 611 ; N Upsilon ; G 826
U 934 ; WX 787 ; N Phi ; G 827
U 935 ; WX 685 ; N Chi ; G 828
U 936 ; WX 787 ; N Psi ; G 829
U 937 ; WX 764 ; N Omega ; G 830
U 938 ; WX 295 ; N Iotadieresis ; G 831
U 939 ; WX 611 ; N Upsilondieresis ; G 832
U 940 ; WX 659 ; N alphatonos ; G 833
U 941 ; WX 541 ; N epsilontonos ; G 834
U 942 ; WX 634 ; N etatonos ; G 835
U 943 ; WX 338 ; N iotatonos ; G 836
U 944 ; WX 579 ; N upsilondieresistonos ; G 837
U 945 ; WX 659 ; N alpha ; G 838
U 946 ; WX 638 ; N beta ; G 839
U 947 ; WX 592 ; N gamma ; G 840
U 948 ; WX 612 ; N delta ; G 841
U 949 ; WX 541 ; N epsilon ; G 842
U 950 ; WX 544 ; N zeta ; G 843
U 951 ; WX 634 ; N eta ; G 844
U 952 ; WX 612 ; N theta ; G 845
U 953 ; WX 338 ; N iota ; G 846
U 954 ; WX 589 ; N kappa ; G 847
U 955 ; WX 592 ; N lambda ; G 848
U 956 ; WX 636 ; N uni03BC ; G 849
U 957 ; WX 559 ; N nu ; G 850
U 958 ; WX 558 ; N xi ; G 851
U 959 ; WX 612 ; N omicron ; G 852
U 960 ; WX 602 ; N pi ; G 853
U 961 ; WX 635 ; N rho ; G 854
U 962 ; WX 587 ; N sigma1 ; G 855
U 963 ; WX 634 ; N sigma ; G 856
U 964 ; WX 602 ; N tau ; G 857
U 965 ; WX 579 ; N upsilon ; G 858
U 966 ; WX 660 ; N phi ; G 859
U 967 ; WX 592 ; N chi ; G 860
U 968 ; WX 660 ; N psi ; G 861
U 969 ; WX 837 ; N omega ; G 862
U 970 ; WX 338 ; N iotadieresis ; G 863
U 971 ; WX 579 ; N upsilondieresis ; G 864
U 972 ; WX 612 ; N omicrontonos ; G 865
U 973 ; WX 579 ; N upsilontonos ; G 866
U 974 ; WX 837 ; N omegatonos ; G 867
U 975 ; WX 656 ; N uni03CF ; G 868
U 976 ; WX 614 ; N uni03D0 ; G 869
U 977 ; WX 619 ; N theta1 ; G 870
U 978 ; WX 699 ; N Upsilon1 ; G 871
U 979 ; WX 842 ; N uni03D3 ; G 872
U 980 ; WX 699 ; N uni03D4 ; G 873
U 981 ; WX 660 ; N phi1 ; G 874
U 982 ; WX 837 ; N omega1 ; G 875
U 983 ; WX 664 ; N uni03D7 ; G 876
U 984 ; WX 787 ; N uni03D8 ; G 877
U 985 ; WX 612 ; N uni03D9 ; G 878
U 986 ; WX 648 ; N uni03DA ; G 879
U 987 ; WX 587 ; N uni03DB ; G 880
U 988 ; WX 575 ; N uni03DC ; G 881
U 989 ; WX 458 ; N uni03DD ; G 882
U 990 ; WX 660 ; N uni03DE ; G 883
U 991 ; WX 660 ; N uni03DF ; G 884
U 992 ; WX 865 ; N uni03E0 ; G 885
U 993 ; WX 627 ; N uni03E1 ; G 886
U 994 ; WX 934 ; N uni03E2 ; G 887
U 995 ; WX 837 ; N uni03E3 ; G 888
U 996 ; WX 758 ; N uni03E4 ; G 889
U 997 ; WX 659 ; N uni03E5 ; G 890
U 998 ; WX 792 ; N uni03E6 ; G 891
U 999 ; WX 615 ; N uni03E7 ; G 892
U 1000 ; WX 687 ; N uni03E8 ; G 893
U 1001 ; WX 607 ; N uni03E9 ; G 894
U 1002 ; WX 768 ; N uni03EA ; G 895
U 1003 ; WX 625 ; N uni03EB ; G 896
U 1004 ; WX 699 ; N uni03EC ; G 897
U 1005 ; WX 612 ; N uni03ED ; G 898
U 1006 ; WX 611 ; N uni03EE ; G 899
U 1007 ; WX 536 ; N uni03EF ; G 900
U 1008 ; WX 664 ; N uni03F0 ; G 901
U 1009 ; WX 635 ; N uni03F1 ; G 902
U 1010 ; WX 550 ; N uni03F2 ; G 903
U 1011 ; WX 278 ; N uni03F3 ; G 904
U 1012 ; WX 787 ; N uni03F4 ; G 905
U 1013 ; WX 615 ; N uni03F5 ; G 906
U 1014 ; WX 615 ; N uni03F6 ; G 907
U 1015 ; WX 608 ; N uni03F7 ; G 908
U 1016 ; WX 635 ; N uni03F8 ; G 909
U 1017 ; WX 698 ; N uni03F9 ; G 910
U 1018 ; WX 863 ; N uni03FA ; G 911
U 1019 ; WX 651 ; N uni03FB ; G 912
U 1020 ; WX 635 ; N uni03FC ; G 913
U 1021 ; WX 703 ; N uni03FD ; G 914
U 1022 ; WX 698 ; N uni03FE ; G 915
U 1023 ; WX 703 ; N uni03FF ; G 916
U 1024 ; WX 632 ; N uni0400 ; G 917
U 1025 ; WX 632 ; N uni0401 ; G 918
U 1026 ; WX 786 ; N uni0402 ; G 919
U 1027 ; WX 557 ; N uni0403 ; G 920
U 1028 ; WX 698 ; N uni0404 ; G 921
U 1029 ; WX 635 ; N uni0405 ; G 922
U 1030 ; WX 295 ; N uni0406 ; G 923
U 1031 ; WX 295 ; N uni0407 ; G 924
U 1032 ; WX 295 ; N uni0408 ; G 925
U 1033 ; WX 1094 ; N uni0409 ; G 926
U 1034 ; WX 1045 ; N uni040A ; G 927
U 1035 ; WX 786 ; N uni040B ; G 928
U 1036 ; WX 710 ; N uni040C ; G 929
U 1037 ; WX 748 ; N uni040D ; G 930
U 1038 ; WX 609 ; N uni040E ; G 931
U 1039 ; WX 752 ; N uni040F ; G 932
U 1040 ; WX 684 ; N uni0410 ; G 933
U 1041 ; WX 686 ; N uni0411 ; G 934
U 1042 ; WX 686 ; N uni0412 ; G 935
U 1043 ; WX 557 ; N uni0413 ; G 936
U 1044 ; WX 781 ; N uni0414 ; G 937
U 1045 ; WX 632 ; N uni0415 ; G 938
U 1046 ; WX 1077 ; N uni0416 ; G 939
U 1047 ; WX 641 ; N uni0417 ; G 940
U 1048 ; WX 748 ; N uni0418 ; G 941
U 1049 ; WX 748 ; N uni0419 ; G 942
U 1050 ; WX 710 ; N uni041A ; G 943
U 1051 ; WX 752 ; N uni041B ; G 944
U 1052 ; WX 863 ; N uni041C ; G 945
U 1053 ; WX 752 ; N uni041D ; G 946
U 1054 ; WX 787 ; N uni041E ; G 947
U 1055 ; WX 752 ; N uni041F ; G 948
U 1056 ; WX 603 ; N uni0420 ; G 949
U 1057 ; WX 698 ; N uni0421 ; G 950
U 1058 ; WX 611 ; N uni0422 ; G 951
U 1059 ; WX 609 ; N uni0423 ; G 952
U 1060 ; WX 861 ; N uni0424 ; G 953
U 1061 ; WX 685 ; N uni0425 ; G 954
U 1062 ; WX 776 ; N uni0426 ; G 955
U 1063 ; WX 686 ; N uni0427 ; G 956
U 1064 ; WX 1069 ; N uni0428 ; G 957
U 1065 ; WX 1094 ; N uni0429 ; G 958
U 1066 ; WX 833 ; N uni042A ; G 959
U 1067 ; WX 818 ; N uni042B ; G 960
U 1068 ; WX 686 ; N uni042C ; G 961
U 1069 ; WX 698 ; N uni042D ; G 962
U 1070 ; WX 1080 ; N uni042E ; G 963
U 1071 ; WX 695 ; N uni042F ; G 964
U 1072 ; WX 613 ; N uni0430 ; G 965
U 1073 ; WX 617 ; N uni0431 ; G 966
U 1074 ; WX 589 ; N uni0432 ; G 967
U 1075 ; WX 525 ; N uni0433 ; G 968
U 1076 ; WX 691 ; N uni0434 ; G 969
U 1077 ; WX 615 ; N uni0435 ; G 970
U 1078 ; WX 901 ; N uni0436 ; G 971
U 1079 ; WX 532 ; N uni0437 ; G 972
U 1080 ; WX 650 ; N uni0438 ; G 973
U 1081 ; WX 650 ; N uni0439 ; G 974
U 1082 ; WX 604 ; N uni043A ; G 975
U 1083 ; WX 639 ; N uni043B ; G 976
U 1084 ; WX 754 ; N uni043C ; G 977
U 1085 ; WX 654 ; N uni043D ; G 978
U 1086 ; WX 612 ; N uni043E ; G 979
U 1087 ; WX 654 ; N uni043F ; G 980
U 1088 ; WX 635 ; N uni0440 ; G 981
U 1089 ; WX 550 ; N uni0441 ; G 982
U 1090 ; WX 583 ; N uni0442 ; G 983
U 1091 ; WX 592 ; N uni0443 ; G 984
U 1092 ; WX 855 ; N uni0444 ; G 985
U 1093 ; WX 592 ; N uni0445 ; G 986
U 1094 ; WX 681 ; N uni0446 ; G 987
U 1095 ; WX 591 ; N uni0447 ; G 988
U 1096 ; WX 915 ; N uni0448 ; G 989
U 1097 ; WX 942 ; N uni0449 ; G 990
U 1098 ; WX 707 ; N uni044A ; G 991
U 1099 ; WX 790 ; N uni044B ; G 992
U 1100 ; WX 589 ; N uni044C ; G 993
U 1101 ; WX 549 ; N uni044D ; G 994
U 1102 ; WX 842 ; N uni044E ; G 995
U 1103 ; WX 602 ; N uni044F ; G 996
U 1104 ; WX 615 ; N uni0450 ; G 997
U 1105 ; WX 615 ; N uni0451 ; G 998
U 1106 ; WX 625 ; N uni0452 ; G 999
U 1107 ; WX 525 ; N uni0453 ; G 1000
U 1108 ; WX 549 ; N uni0454 ; G 1001
U 1109 ; WX 521 ; N uni0455 ; G 1002
U 1110 ; WX 278 ; N uni0456 ; G 1003
U 1111 ; WX 278 ; N uni0457 ; G 1004
U 1112 ; WX 278 ; N uni0458 ; G 1005
U 1113 ; WX 902 ; N uni0459 ; G 1006
U 1114 ; WX 898 ; N uni045A ; G 1007
U 1115 ; WX 652 ; N uni045B ; G 1008
U 1116 ; WX 604 ; N uni045C ; G 1009
U 1117 ; WX 650 ; N uni045D ; G 1010
U 1118 ; WX 592 ; N uni045E ; G 1011
U 1119 ; WX 654 ; N uni045F ; G 1012
U 1120 ; WX 934 ; N uni0460 ; G 1013
U 1121 ; WX 837 ; N uni0461 ; G 1014
U 1122 ; WX 771 ; N uni0462 ; G 1015
U 1123 ; WX 672 ; N uni0463 ; G 1016
U 1124 ; WX 942 ; N uni0464 ; G 1017
U 1125 ; WX 749 ; N uni0465 ; G 1018
U 1126 ; WX 879 ; N uni0466 ; G 1019
U 1127 ; WX 783 ; N uni0467 ; G 1020
U 1128 ; WX 1160 ; N uni0468 ; G 1021
U 1129 ; WX 1001 ; N uni0469 ; G 1022
U 1130 ; WX 787 ; N uni046A ; G 1023
U 1131 ; WX 612 ; N uni046B ; G 1024
U 1132 ; WX 1027 ; N uni046C ; G 1025
U 1133 ; WX 824 ; N uni046D ; G 1026
U 1134 ; WX 636 ; N uni046E ; G 1027
U 1135 ; WX 541 ; N uni046F ; G 1028
U 1136 ; WX 856 ; N uni0470 ; G 1029
U 1137 ; WX 876 ; N uni0471 ; G 1030
U 1138 ; WX 787 ; N uni0472 ; G 1031
U 1139 ; WX 612 ; N uni0473 ; G 1032
U 1140 ; WX 781 ; N uni0474 ; G 1033
U 1141 ; WX 665 ; N uni0475 ; G 1034
U 1142 ; WX 781 ; N uni0476 ; G 1035
U 1143 ; WX 665 ; N uni0477 ; G 1036
U 1144 ; WX 992 ; N uni0478 ; G 1037
U 1145 ; WX 904 ; N uni0479 ; G 1038
U 1146 ; WX 953 ; N uni047A ; G 1039
U 1147 ; WX 758 ; N uni047B ; G 1040
U 1148 ; WX 1180 ; N uni047C ; G 1041
U 1149 ; WX 1028 ; N uni047D ; G 1042
U 1150 ; WX 934 ; N uni047E ; G 1043
U 1151 ; WX 837 ; N uni047F ; G 1044
U 1152 ; WX 698 ; N uni0480 ; G 1045
U 1153 ; WX 550 ; N uni0481 ; G 1046
U 1154 ; WX 502 ; N uni0482 ; G 1047
U 1155 ; WX 0 ; N uni0483 ; G 1048
U 1156 ; WX 0 ; N uni0484 ; G 1049
U 1157 ; WX 0 ; N uni0485 ; G 1050
U 1158 ; WX 0 ; N uni0486 ; G 1051
U 1159 ; WX 0 ; N uni0487 ; G 1052
U 1160 ; WX 418 ; N uni0488 ; G 1053
U 1161 ; WX 418 ; N uni0489 ; G 1054
U 1162 ; WX 748 ; N uni048A ; G 1055
U 1163 ; WX 657 ; N uni048B ; G 1056
U 1164 ; WX 686 ; N uni048C ; G 1057
U 1165 ; WX 589 ; N uni048D ; G 1058
U 1166 ; WX 603 ; N uni048E ; G 1059
U 1167 ; WX 635 ; N uni048F ; G 1060
U 1168 ; WX 610 ; N uni0490 ; G 1061
U 1169 ; WX 525 ; N uni0491 ; G 1062
U 1170 ; WX 675 ; N uni0492 ; G 1063
U 1171 ; WX 556 ; N uni0493 ; G 1064
U 1172 ; WX 557 ; N uni0494 ; G 1065
U 1173 ; WX 491 ; N uni0495 ; G 1066
U 1174 ; WX 1077 ; N uni0496 ; G 1067
U 1175 ; WX 901 ; N uni0497 ; G 1068
U 1176 ; WX 641 ; N uni0498 ; G 1069
U 1177 ; WX 532 ; N uni0499 ; G 1070
U 1178 ; WX 710 ; N uni049A ; G 1071
U 1179 ; WX 604 ; N uni049B ; G 1072
U 1180 ; WX 710 ; N uni049C ; G 1073
U 1181 ; WX 604 ; N uni049D ; G 1074
U 1182 ; WX 710 ; N uni049E ; G 1075
U 1183 ; WX 604 ; N uni049F ; G 1076
U 1184 ; WX 856 ; N uni04A0 ; G 1077
U 1185 ; WX 832 ; N uni04A1 ; G 1078
U 1186 ; WX 752 ; N uni04A2 ; G 1079
U 1187 ; WX 661 ; N uni04A3 ; G 1080
U 1188 ; WX 1014 ; N uni04A4 ; G 1081
U 1189 ; WX 877 ; N uni04A5 ; G 1082
U 1190 ; WX 1113 ; N uni04A6 ; G 1083
U 1191 ; WX 950 ; N uni04A7 ; G 1084
U 1192 ; WX 890 ; N uni04A8 ; G 1085
U 1193 ; WX 707 ; N uni04A9 ; G 1086
U 1194 ; WX 698 ; N uni04AA ; G 1087
U 1195 ; WX 550 ; N uni04AB ; G 1088
U 1196 ; WX 611 ; N uni04AC ; G 1089
U 1197 ; WX 529 ; N uni04AD ; G 1090
U 1198 ; WX 611 ; N uni04AE ; G 1091
U 1199 ; WX 592 ; N uni04AF ; G 1092
U 1200 ; WX 611 ; N uni04B0 ; G 1093
U 1201 ; WX 592 ; N uni04B1 ; G 1094
U 1202 ; WX 685 ; N uni04B2 ; G 1095
U 1203 ; WX 592 ; N uni04B3 ; G 1096
U 1204 ; WX 934 ; N uni04B4 ; G 1097
U 1205 ; WX 807 ; N uni04B5 ; G 1098
U 1206 ; WX 686 ; N uni04B6 ; G 1099
U 1207 ; WX 591 ; N uni04B7 ; G 1100
U 1208 ; WX 686 ; N uni04B8 ; G 1101
U 1209 ; WX 591 ; N uni04B9 ; G 1102
U 1210 ; WX 686 ; N uni04BA ; G 1103
U 1211 ; WX 634 ; N uni04BB ; G 1104
U 1212 ; WX 929 ; N uni04BC ; G 1105
U 1213 ; WX 731 ; N uni04BD ; G 1106
U 1214 ; WX 929 ; N uni04BE ; G 1107
U 1215 ; WX 731 ; N uni04BF ; G 1108
U 1216 ; WX 295 ; N uni04C0 ; G 1109
U 1217 ; WX 1077 ; N uni04C1 ; G 1110
U 1218 ; WX 901 ; N uni04C2 ; G 1111
U 1219 ; WX 655 ; N uni04C3 ; G 1112
U 1220 ; WX 604 ; N uni04C4 ; G 1113
U 1221 ; WX 752 ; N uni04C5 ; G 1114
U 1222 ; WX 639 ; N uni04C6 ; G 1115
U 1223 ; WX 752 ; N uni04C7 ; G 1116
U 1224 ; WX 661 ; N uni04C8 ; G 1117
U 1225 ; WX 752 ; N uni04C9 ; G 1118
U 1226 ; WX 661 ; N uni04CA ; G 1119
U 1227 ; WX 686 ; N uni04CB ; G 1120
U 1228 ; WX 591 ; N uni04CC ; G 1121
U 1229 ; WX 863 ; N uni04CD ; G 1122
U 1230 ; WX 754 ; N uni04CE ; G 1123
U 1231 ; WX 278 ; N uni04CF ; G 1124
U 1232 ; WX 684 ; N uni04D0 ; G 1125
U 1233 ; WX 613 ; N uni04D1 ; G 1126
U 1234 ; WX 684 ; N uni04D2 ; G 1127
U 1235 ; WX 613 ; N uni04D3 ; G 1128
U 1236 ; WX 974 ; N uni04D4 ; G 1129
U 1237 ; WX 995 ; N uni04D5 ; G 1130
U 1238 ; WX 632 ; N uni04D6 ; G 1131
U 1239 ; WX 615 ; N uni04D7 ; G 1132
U 1240 ; WX 787 ; N uni04D8 ; G 1133
U 1241 ; WX 615 ; N uni04D9 ; G 1134
U 1242 ; WX 787 ; N uni04DA ; G 1135
U 1243 ; WX 615 ; N uni04DB ; G 1136
U 1244 ; WX 1077 ; N uni04DC ; G 1137
U 1245 ; WX 901 ; N uni04DD ; G 1138
U 1246 ; WX 641 ; N uni04DE ; G 1139
U 1247 ; WX 532 ; N uni04DF ; G 1140
U 1248 ; WX 666 ; N uni04E0 ; G 1141
U 1249 ; WX 578 ; N uni04E1 ; G 1142
U 1250 ; WX 748 ; N uni04E2 ; G 1143
U 1251 ; WX 650 ; N uni04E3 ; G 1144
U 1252 ; WX 748 ; N uni04E4 ; G 1145
U 1253 ; WX 650 ; N uni04E5 ; G 1146
U 1254 ; WX 787 ; N uni04E6 ; G 1147
U 1255 ; WX 612 ; N uni04E7 ; G 1148
U 1256 ; WX 787 ; N uni04E8 ; G 1149
U 1257 ; WX 612 ; N uni04E9 ; G 1150
U 1258 ; WX 787 ; N uni04EA ; G 1151
U 1259 ; WX 612 ; N uni04EB ; G 1152
U 1260 ; WX 698 ; N uni04EC ; G 1153
U 1261 ; WX 549 ; N uni04ED ; G 1154
U 1262 ; WX 609 ; N uni04EE ; G 1155
U 1263 ; WX 592 ; N uni04EF ; G 1156
U 1264 ; WX 609 ; N uni04F0 ; G 1157
U 1265 ; WX 592 ; N uni04F1 ; G 1158
U 1266 ; WX 609 ; N uni04F2 ; G 1159
U 1267 ; WX 592 ; N uni04F3 ; G 1160
U 1268 ; WX 686 ; N uni04F4 ; G 1161
U 1269 ; WX 591 ; N uni04F5 ; G 1162
U 1270 ; WX 557 ; N uni04F6 ; G 1163
U 1271 ; WX 491 ; N uni04F7 ; G 1164
U 1272 ; WX 818 ; N uni04F8 ; G 1165
U 1273 ; WX 790 ; N uni04F9 ; G 1166
U 1274 ; WX 675 ; N uni04FA ; G 1167
U 1275 ; WX 556 ; N uni04FB ; G 1168
U 1276 ; WX 685 ; N uni04FC ; G 1169
U 1277 ; WX 592 ; N uni04FD ; G 1170
U 1278 ; WX 685 ; N uni04FE ; G 1171
U 1279 ; WX 592 ; N uni04FF ; G 1172
U 1280 ; WX 686 ; N uni0500 ; G 1173
U 1281 ; WX 589 ; N uni0501 ; G 1174
U 1282 ; WX 1006 ; N uni0502 ; G 1175
U 1283 ; WX 897 ; N uni0503 ; G 1176
U 1284 ; WX 975 ; N uni0504 ; G 1177
U 1285 ; WX 869 ; N uni0505 ; G 1178
U 1286 ; WX 679 ; N uni0506 ; G 1179
U 1287 ; WX 588 ; N uni0507 ; G 1180
U 1288 ; WX 1072 ; N uni0508 ; G 1181
U 1289 ; WX 957 ; N uni0509 ; G 1182
U 1290 ; WX 1113 ; N uni050A ; G 1183
U 1291 ; WX 967 ; N uni050B ; G 1184
U 1292 ; WX 775 ; N uni050C ; G 1185
U 1293 ; WX 660 ; N uni050D ; G 1186
U 1294 ; WX 773 ; N uni050E ; G 1187
U 1295 ; WX 711 ; N uni050F ; G 1188
U 1296 ; WX 614 ; N uni0510 ; G 1189
U 1297 ; WX 541 ; N uni0511 ; G 1190
U 1298 ; WX 752 ; N uni0512 ; G 1191
U 1299 ; WX 639 ; N uni0513 ; G 1192
U 1300 ; WX 1195 ; N uni0514 ; G 1193
U 1301 ; WX 997 ; N uni0515 ; G 1194
U 1302 ; WX 900 ; N uni0516 ; G 1195
U 1303 ; WX 867 ; N uni0517 ; G 1196
U 1304 ; WX 1031 ; N uni0518 ; G 1197
U 1305 ; WX 989 ; N uni0519 ; G 1198
U 1306 ; WX 787 ; N uni051A ; G 1199
U 1307 ; WX 635 ; N uni051B ; G 1200
U 1308 ; WX 989 ; N uni051C ; G 1201
U 1309 ; WX 818 ; N uni051D ; G 1202
U 1310 ; WX 710 ; N uni051E ; G 1203
U 1311 ; WX 604 ; N uni051F ; G 1204
U 1312 ; WX 1113 ; N uni0520 ; G 1205
U 1313 ; WX 942 ; N uni0521 ; G 1206
U 1314 ; WX 1113 ; N uni0522 ; G 1207
U 1315 ; WX 949 ; N uni0523 ; G 1208
U 1316 ; WX 793 ; N uni0524 ; G 1209
U 1317 ; WX 683 ; N uni0525 ; G 1210
U 1329 ; WX 766 ; N uni0531 ; G 1211
U 1330 ; WX 732 ; N uni0532 ; G 1212
U 1331 ; WX 753 ; N uni0533 ; G 1213
U 1332 ; WX 753 ; N uni0534 ; G 1214
U 1333 ; WX 732 ; N uni0535 ; G 1215
U 1334 ; WX 772 ; N uni0536 ; G 1216
U 1335 ; WX 640 ; N uni0537 ; G 1217
U 1336 ; WX 732 ; N uni0538 ; G 1218
U 1337 ; WX 859 ; N uni0539 ; G 1219
U 1338 ; WX 753 ; N uni053A ; G 1220
U 1339 ; WX 691 ; N uni053B ; G 1221
U 1340 ; WX 533 ; N uni053C ; G 1222
U 1341 ; WX 922 ; N uni053D ; G 1223
U 1342 ; WX 863 ; N uni053E ; G 1224
U 1343 ; WX 732 ; N uni053F ; G 1225
U 1344 ; WX 716 ; N uni0540 ; G 1226
U 1345 ; WX 766 ; N uni0541 ; G 1227
U 1346 ; WX 753 ; N uni0542 ; G 1228
U 1347 ; WX 767 ; N uni0543 ; G 1229
U 1348 ; WX 792 ; N uni0544 ; G 1230
U 1349 ; WX 728 ; N uni0545 ; G 1231
U 1350 ; WX 729 ; N uni0546 ; G 1232
U 1351 ; WX 757 ; N uni0547 ; G 1233
U 1352 ; WX 732 ; N uni0548 ; G 1234
U 1353 ; WX 713 ; N uni0549 ; G 1235
U 1354 ; WX 800 ; N uni054A ; G 1236
U 1355 ; WX 768 ; N uni054B ; G 1237
U 1356 ; WX 792 ; N uni054C ; G 1238
U 1357 ; WX 732 ; N uni054D ; G 1239
U 1358 ; WX 753 ; N uni054E ; G 1240
U 1359 ; WX 705 ; N uni054F ; G 1241
U 1360 ; WX 694 ; N uni0550 ; G 1242
U 1361 ; WX 744 ; N uni0551 ; G 1243
U 1362 ; WX 538 ; N uni0552 ; G 1244
U 1363 ; WX 811 ; N uni0553 ; G 1245
U 1364 ; WX 757 ; N uni0554 ; G 1246
U 1365 ; WX 787 ; N uni0555 ; G 1247
U 1366 ; WX 790 ; N uni0556 ; G 1248
U 1369 ; WX 307 ; N uni0559 ; G 1249
U 1370 ; WX 318 ; N uni055A ; G 1250
U 1371 ; WX 234 ; N uni055B ; G 1251
U 1372 ; WX 361 ; N uni055C ; G 1252
U 1373 ; WX 238 ; N uni055D ; G 1253
U 1374 ; WX 405 ; N uni055E ; G 1254
U 1375 ; WX 500 ; N uni055F ; G 1255
U 1377 ; WX 974 ; N uni0561 ; G 1256
U 1378 ; WX 634 ; N uni0562 ; G 1257
U 1379 ; WX 658 ; N uni0563 ; G 1258
U 1380 ; WX 663 ; N uni0564 ; G 1259
U 1381 ; WX 634 ; N uni0565 ; G 1260
U 1382 ; WX 635 ; N uni0566 ; G 1261
U 1383 ; WX 515 ; N uni0567 ; G 1262
U 1384 ; WX 634 ; N uni0568 ; G 1263
U 1385 ; WX 738 ; N uni0569 ; G 1264
U 1386 ; WX 658 ; N uni056A ; G 1265
U 1387 ; WX 634 ; N uni056B ; G 1266
U 1388 ; WX 271 ; N uni056C ; G 1267
U 1389 ; WX 980 ; N uni056D ; G 1268
U 1390 ; WX 623 ; N uni056E ; G 1269
U 1391 ; WX 634 ; N uni056F ; G 1270
U 1392 ; WX 634 ; N uni0570 ; G 1271
U 1393 ; WX 608 ; N uni0571 ; G 1272
U 1394 ; WX 634 ; N uni0572 ; G 1273
U 1395 ; WX 629 ; N uni0573 ; G 1274
U 1396 ; WX 634 ; N uni0574 ; G 1275
U 1397 ; WX 278 ; N uni0575 ; G 1276
U 1398 ; WX 634 ; N uni0576 ; G 1277
U 1399 ; WX 499 ; N uni0577 ; G 1278
U 1400 ; WX 634 ; N uni0578 ; G 1279
U 1401 ; WX 404 ; N uni0579 ; G 1280
U 1402 ; WX 974 ; N uni057A ; G 1281
U 1403 ; WX 560 ; N uni057B ; G 1282
U 1404 ; WX 648 ; N uni057C ; G 1283
U 1405 ; WX 634 ; N uni057D ; G 1284
U 1406 ; WX 634 ; N uni057E ; G 1285
U 1407 ; WX 974 ; N uni057F ; G 1286
U 1408 ; WX 634 ; N uni0580 ; G 1287
U 1409 ; WX 635 ; N uni0581 ; G 1288
U 1410 ; WX 435 ; N uni0582 ; G 1289
U 1411 ; WX 974 ; N uni0583 ; G 1290
U 1412 ; WX 636 ; N uni0584 ; G 1291
U 1413 ; WX 612 ; N uni0585 ; G 1292
U 1414 ; WX 805 ; N uni0586 ; G 1293
U 1415 ; WX 812 ; N uni0587 ; G 1294
U 1417 ; WX 337 ; N uni0589 ; G 1295
U 1418 ; WX 361 ; N uni058A ; G 1296
U 1456 ; WX 0 ; N uni05B0 ; G 1297
U 1457 ; WX 0 ; N uni05B1 ; G 1298
U 1458 ; WX 0 ; N uni05B2 ; G 1299
U 1459 ; WX 0 ; N uni05B3 ; G 1300
U 1460 ; WX 0 ; N uni05B4 ; G 1301
U 1461 ; WX 0 ; N uni05B5 ; G 1302
U 1462 ; WX 0 ; N uni05B6 ; G 1303
U 1463 ; WX 0 ; N uni05B7 ; G 1304
U 1464 ; WX 0 ; N uni05B8 ; G 1305
U 1465 ; WX 0 ; N uni05B9 ; G 1306
U 1466 ; WX 0 ; N uni05BA ; G 1307
U 1467 ; WX 0 ; N uni05BB ; G 1308
U 1468 ; WX 0 ; N uni05BC ; G 1309
U 1469 ; WX 0 ; N uni05BD ; G 1310
U 1470 ; WX 361 ; N uni05BE ; G 1311
U 1471 ; WX 0 ; N uni05BF ; G 1312
U 1472 ; WX 295 ; N uni05C0 ; G 1313
U 1473 ; WX 0 ; N uni05C1 ; G 1314
U 1474 ; WX 0 ; N uni05C2 ; G 1315
U 1475 ; WX 295 ; N uni05C3 ; G 1316
U 1478 ; WX 456 ; N uni05C6 ; G 1317
U 1479 ; WX 0 ; N uni05C7 ; G 1318
U 1488 ; WX 668 ; N uni05D0 ; G 1319
U 1489 ; WX 578 ; N uni05D1 ; G 1320
U 1490 ; WX 412 ; N uni05D2 ; G 1321
U 1491 ; WX 546 ; N uni05D3 ; G 1322
U 1492 ; WX 653 ; N uni05D4 ; G 1323
U 1493 ; WX 272 ; N uni05D5 ; G 1324
U 1494 ; WX 346 ; N uni05D6 ; G 1325
U 1495 ; WX 653 ; N uni05D7 ; G 1326
U 1496 ; WX 648 ; N uni05D8 ; G 1327
U 1497 ; WX 224 ; N uni05D9 ; G 1328
U 1498 ; WX 537 ; N uni05DA ; G 1329
U 1499 ; WX 529 ; N uni05DB ; G 1330
U 1500 ; WX 568 ; N uni05DC ; G 1331
U 1501 ; WX 664 ; N uni05DD ; G 1332
U 1502 ; WX 679 ; N uni05DE ; G 1333
U 1503 ; WX 272 ; N uni05DF ; G 1334
U 1504 ; WX 400 ; N uni05E0 ; G 1335
U 1505 ; WX 649 ; N uni05E1 ; G 1336
U 1506 ; WX 626 ; N uni05E2 ; G 1337
U 1507 ; WX 640 ; N uni05E3 ; G 1338
U 1508 ; WX 625 ; N uni05E4 ; G 1339
U 1509 ; WX 540 ; N uni05E5 ; G 1340
U 1510 ; WX 593 ; N uni05E6 ; G 1341
U 1511 ; WX 709 ; N uni05E7 ; G 1342
U 1512 ; WX 564 ; N uni05E8 ; G 1343
U 1513 ; WX 708 ; N uni05E9 ; G 1344
U 1514 ; WX 657 ; N uni05EA ; G 1345
U 1520 ; WX 471 ; N uni05F0 ; G 1346
U 1521 ; WX 454 ; N uni05F1 ; G 1347
U 1522 ; WX 471 ; N uni05F2 ; G 1348
U 1523 ; WX 416 ; N uni05F3 ; G 1349
U 1524 ; WX 645 ; N uni05F4 ; G 1350
U 3647 ; WX 636 ; N uni0E3F ; G 1351
U 3713 ; WX 670 ; N uni0E81 ; G 1352
U 3714 ; WX 684 ; N uni0E82 ; G 1353
U 3716 ; WX 688 ; N uni0E84 ; G 1354
U 3719 ; WX 482 ; N uni0E87 ; G 1355
U 3720 ; WX 628 ; N uni0E88 ; G 1356
U 3722 ; WX 684 ; N uni0E8A ; G 1357
U 3725 ; WX 688 ; N uni0E8D ; G 1358
U 3732 ; WX 642 ; N uni0E94 ; G 1359
U 3733 ; WX 642 ; N uni0E95 ; G 1360
U 3734 ; WX 672 ; N uni0E96 ; G 1361
U 3735 ; WX 655 ; N uni0E97 ; G 1362
U 3737 ; WX 641 ; N uni0E99 ; G 1363
U 3738 ; WX 592 ; N uni0E9A ; G 1364
U 3739 ; WX 592 ; N uni0E9B ; G 1365
U 3740 ; WX 745 ; N uni0E9C ; G 1366
U 3741 ; WX 767 ; N uni0E9D ; G 1367
U 3742 ; WX 687 ; N uni0E9E ; G 1368
U 3743 ; WX 687 ; N uni0E9F ; G 1369
U 3745 ; WX 702 ; N uni0EA1 ; G 1370
U 3746 ; WX 688 ; N uni0EA2 ; G 1371
U 3747 ; WX 684 ; N uni0EA3 ; G 1372
U 3749 ; WX 649 ; N uni0EA5 ; G 1373
U 3751 ; WX 632 ; N uni0EA7 ; G 1374
U 3754 ; WX 703 ; N uni0EAA ; G 1375
U 3755 ; WX 819 ; N uni0EAB ; G 1376
U 3757 ; WX 633 ; N uni0EAD ; G 1377
U 3758 ; WX 684 ; N uni0EAE ; G 1378
U 3759 ; WX 788 ; N uni0EAF ; G 1379
U 3760 ; WX 632 ; N uni0EB0 ; G 1380
U 3761 ; WX 0 ; N uni0EB1 ; G 1381
U 3762 ; WX 539 ; N uni0EB2 ; G 1382
U 3763 ; WX 539 ; N uni0EB3 ; G 1383
U 3764 ; WX 0 ; N uni0EB4 ; G 1384
U 3765 ; WX 0 ; N uni0EB5 ; G 1385
U 3766 ; WX 0 ; N uni0EB6 ; G 1386
U 3767 ; WX 0 ; N uni0EB7 ; G 1387
U 3768 ; WX 0 ; N uni0EB8 ; G 1388
U 3769 ; WX 0 ; N uni0EB9 ; G 1389
U 3771 ; WX 0 ; N uni0EBB ; G 1390
U 3772 ; WX 0 ; N uni0EBC ; G 1391
U 3773 ; WX 663 ; N uni0EBD ; G 1392
U 3776 ; WX 360 ; N uni0EC0 ; G 1393
U 3777 ; WX 679 ; N uni0EC1 ; G 1394
U 3778 ; WX 460 ; N uni0EC2 ; G 1395
U 3779 ; WX 547 ; N uni0EC3 ; G 1396
U 3780 ; WX 491 ; N uni0EC4 ; G 1397
U 3782 ; WX 674 ; N uni0EC6 ; G 1398
U 3784 ; WX 0 ; N uni0EC8 ; G 1399
U 3785 ; WX 0 ; N uni0EC9 ; G 1400
U 3786 ; WX 0 ; N uni0ECA ; G 1401
U 3787 ; WX 0 ; N uni0ECB ; G 1402
U 3788 ; WX 0 ; N uni0ECC ; G 1403
U 3789 ; WX 0 ; N uni0ECD ; G 1404
U 3792 ; WX 636 ; N uni0ED0 ; G 1405
U 3793 ; WX 641 ; N uni0ED1 ; G 1406
U 3794 ; WX 641 ; N uni0ED2 ; G 1407
U 3795 ; WX 670 ; N uni0ED3 ; G 1408
U 3796 ; WX 625 ; N uni0ED4 ; G 1409
U 3797 ; WX 625 ; N uni0ED5 ; G 1410
U 3798 ; WX 703 ; N uni0ED6 ; G 1411
U 3799 ; WX 670 ; N uni0ED7 ; G 1412
U 3800 ; WX 674 ; N uni0ED8 ; G 1413
U 3801 ; WX 677 ; N uni0ED9 ; G 1414
U 3804 ; WX 1028 ; N uni0EDC ; G 1415
U 3805 ; WX 1028 ; N uni0EDD ; G 1416
U 4256 ; WX 874 ; N uni10A0 ; G 1417
U 4257 ; WX 733 ; N uni10A1 ; G 1418
U 4258 ; WX 679 ; N uni10A2 ; G 1419
U 4259 ; WX 834 ; N uni10A3 ; G 1420
U 4260 ; WX 615 ; N uni10A4 ; G 1421
U 4261 ; WX 768 ; N uni10A5 ; G 1422
U 4262 ; WX 753 ; N uni10A6 ; G 1423
U 4263 ; WX 914 ; N uni10A7 ; G 1424
U 4264 ; WX 453 ; N uni10A8 ; G 1425
U 4265 ; WX 620 ; N uni10A9 ; G 1426
U 4266 ; WX 843 ; N uni10AA ; G 1427
U 4267 ; WX 882 ; N uni10AB ; G 1428
U 4268 ; WX 625 ; N uni10AC ; G 1429
U 4269 ; WX 854 ; N uni10AD ; G 1430
U 4270 ; WX 781 ; N uni10AE ; G 1431
U 4271 ; WX 629 ; N uni10AF ; G 1432
U 4272 ; WX 912 ; N uni10B0 ; G 1433
U 4273 ; WX 621 ; N uni10B1 ; G 1434
U 4274 ; WX 620 ; N uni10B2 ; G 1435
U 4275 ; WX 854 ; N uni10B3 ; G 1436
U 4276 ; WX 866 ; N uni10B4 ; G 1437
U 4277 ; WX 724 ; N uni10B5 ; G 1438
U 4278 ; WX 630 ; N uni10B6 ; G 1439
U 4279 ; WX 621 ; N uni10B7 ; G 1440
U 4280 ; WX 625 ; N uni10B8 ; G 1441
U 4281 ; WX 620 ; N uni10B9 ; G 1442
U 4282 ; WX 818 ; N uni10BA ; G 1443
U 4283 ; WX 874 ; N uni10BB ; G 1444
U 4284 ; WX 615 ; N uni10BC ; G 1445
U 4285 ; WX 623 ; N uni10BD ; G 1446
U 4286 ; WX 625 ; N uni10BE ; G 1447
U 4287 ; WX 725 ; N uni10BF ; G 1448
U 4288 ; WX 844 ; N uni10C0 ; G 1449
U 4289 ; WX 596 ; N uni10C1 ; G 1450
U 4290 ; WX 688 ; N uni10C2 ; G 1451
U 4291 ; WX 596 ; N uni10C3 ; G 1452
U 4292 ; WX 594 ; N uni10C4 ; G 1453
U 4293 ; WX 738 ; N uni10C5 ; G 1454
U 4304 ; WX 508 ; N uni10D0 ; G 1455
U 4305 ; WX 518 ; N uni10D1 ; G 1456
U 4306 ; WX 581 ; N uni10D2 ; G 1457
U 4307 ; WX 818 ; N uni10D3 ; G 1458
U 4308 ; WX 508 ; N uni10D4 ; G 1459
U 4309 ; WX 513 ; N uni10D5 ; G 1460
U 4310 ; WX 500 ; N uni10D6 ; G 1461
U 4311 ; WX 801 ; N uni10D7 ; G 1462
U 4312 ; WX 518 ; N uni10D8 ; G 1463
U 4313 ; WX 510 ; N uni10D9 ; G 1464
U 4314 ; WX 1064 ; N uni10DA ; G 1465
U 4315 ; WX 522 ; N uni10DB ; G 1466
U 4316 ; WX 522 ; N uni10DC ; G 1467
U 4317 ; WX 786 ; N uni10DD ; G 1468
U 4318 ; WX 508 ; N uni10DE ; G 1469
U 4319 ; WX 518 ; N uni10DF ; G 1470
U 4320 ; WX 796 ; N uni10E0 ; G 1471
U 4321 ; WX 522 ; N uni10E1 ; G 1472
U 4322 ; WX 654 ; N uni10E2 ; G 1473
U 4323 ; WX 522 ; N uni10E3 ; G 1474
U 4324 ; WX 825 ; N uni10E4 ; G 1475
U 4325 ; WX 513 ; N uni10E5 ; G 1476
U 4326 ; WX 786 ; N uni10E6 ; G 1477
U 4327 ; WX 518 ; N uni10E7 ; G 1478
U 4328 ; WX 518 ; N uni10E8 ; G 1479
U 4329 ; WX 522 ; N uni10E9 ; G 1480
U 4330 ; WX 571 ; N uni10EA ; G 1481
U 4331 ; WX 522 ; N uni10EB ; G 1482
U 4332 ; WX 518 ; N uni10EC ; G 1483
U 4333 ; WX 520 ; N uni10ED ; G 1484
U 4334 ; WX 522 ; N uni10EE ; G 1485
U 4335 ; WX 454 ; N uni10EF ; G 1486
U 4336 ; WX 508 ; N uni10F0 ; G 1487
U 4337 ; WX 518 ; N uni10F1 ; G 1488
U 4338 ; WX 508 ; N uni10F2 ; G 1489
U 4339 ; WX 508 ; N uni10F3 ; G 1490
U 4340 ; WX 518 ; N uni10F4 ; G 1491
U 4341 ; WX 554 ; N uni10F5 ; G 1492
U 4342 ; WX 828 ; N uni10F6 ; G 1493
U 4343 ; WX 552 ; N uni10F7 ; G 1494
U 4344 ; WX 508 ; N uni10F8 ; G 1495
U 4345 ; WX 571 ; N uni10F9 ; G 1496
U 4346 ; WX 508 ; N uni10FA ; G 1497
U 4347 ; WX 448 ; N uni10FB ; G 1498
U 4348 ; WX 324 ; N uni10FC ; G 1499
U 5121 ; WX 684 ; N uni1401 ; G 1500
U 5122 ; WX 684 ; N uni1402 ; G 1501
U 5123 ; WX 684 ; N uni1403 ; G 1502
U 5124 ; WX 684 ; N uni1404 ; G 1503
U 5125 ; WX 769 ; N uni1405 ; G 1504
U 5126 ; WX 769 ; N uni1406 ; G 1505
U 5127 ; WX 769 ; N uni1407 ; G 1506
U 5129 ; WX 769 ; N uni1409 ; G 1507
U 5130 ; WX 769 ; N uni140A ; G 1508
U 5131 ; WX 769 ; N uni140B ; G 1509
U 5132 ; WX 835 ; N uni140C ; G 1510
U 5133 ; WX 834 ; N uni140D ; G 1511
U 5134 ; WX 835 ; N uni140E ; G 1512
U 5135 ; WX 834 ; N uni140F ; G 1513
U 5136 ; WX 835 ; N uni1410 ; G 1514
U 5137 ; WX 834 ; N uni1411 ; G 1515
U 5138 ; WX 967 ; N uni1412 ; G 1516
U 5139 ; WX 1007 ; N uni1413 ; G 1517
U 5140 ; WX 967 ; N uni1414 ; G 1518
U 5141 ; WX 1007 ; N uni1415 ; G 1519
U 5142 ; WX 769 ; N uni1416 ; G 1520
U 5143 ; WX 967 ; N uni1417 ; G 1521
U 5144 ; WX 1007 ; N uni1418 ; G 1522
U 5145 ; WX 967 ; N uni1419 ; G 1523
U 5146 ; WX 1007 ; N uni141A ; G 1524
U 5147 ; WX 769 ; N uni141B ; G 1525
U 5149 ; WX 256 ; N uni141D ; G 1526
U 5150 ; WX 543 ; N uni141E ; G 1527
U 5151 ; WX 423 ; N uni141F ; G 1528
U 5152 ; WX 423 ; N uni1420 ; G 1529
U 5153 ; WX 389 ; N uni1421 ; G 1530
U 5154 ; WX 389 ; N uni1422 ; G 1531
U 5155 ; WX 393 ; N uni1423 ; G 1532
U 5156 ; WX 389 ; N uni1424 ; G 1533
U 5157 ; WX 466 ; N uni1425 ; G 1534
U 5158 ; WX 385 ; N uni1426 ; G 1535
U 5159 ; WX 256 ; N uni1427 ; G 1536
U 5160 ; WX 389 ; N uni1428 ; G 1537
U 5161 ; WX 389 ; N uni1429 ; G 1538
U 5162 ; WX 389 ; N uni142A ; G 1539
U 5163 ; WX 1090 ; N uni142B ; G 1540
U 5164 ; WX 909 ; N uni142C ; G 1541
U 5165 ; WX 953 ; N uni142D ; G 1542
U 5166 ; WX 1117 ; N uni142E ; G 1543
U 5167 ; WX 684 ; N uni142F ; G 1544
U 5168 ; WX 684 ; N uni1430 ; G 1545
U 5169 ; WX 684 ; N uni1431 ; G 1546
U 5170 ; WX 684 ; N uni1432 ; G 1547
U 5171 ; WX 729 ; N uni1433 ; G 1548
U 5172 ; WX 729 ; N uni1434 ; G 1549
U 5173 ; WX 729 ; N uni1435 ; G 1550
U 5175 ; WX 729 ; N uni1437 ; G 1551
U 5176 ; WX 729 ; N uni1438 ; G 1552
U 5177 ; WX 729 ; N uni1439 ; G 1553
U 5178 ; WX 835 ; N uni143A ; G 1554
U 5179 ; WX 684 ; N uni143B ; G 1555
U 5180 ; WX 835 ; N uni143C ; G 1556
U 5181 ; WX 834 ; N uni143D ; G 1557
U 5182 ; WX 835 ; N uni143E ; G 1558
U 5183 ; WX 834 ; N uni143F ; G 1559
U 5184 ; WX 967 ; N uni1440 ; G 1560
U 5185 ; WX 1007 ; N uni1441 ; G 1561
U 5186 ; WX 967 ; N uni1442 ; G 1562
U 5187 ; WX 1007 ; N uni1443 ; G 1563
U 5188 ; WX 967 ; N uni1444 ; G 1564
U 5189 ; WX 1007 ; N uni1445 ; G 1565
U 5190 ; WX 967 ; N uni1446 ; G 1566
U 5191 ; WX 1007 ; N uni1447 ; G 1567
U 5192 ; WX 729 ; N uni1448 ; G 1568
U 5193 ; WX 508 ; N uni1449 ; G 1569
U 5194 ; WX 192 ; N uni144A ; G 1570
U 5196 ; WX 732 ; N uni144C ; G 1571
U 5197 ; WX 732 ; N uni144D ; G 1572
U 5198 ; WX 732 ; N uni144E ; G 1573
U 5199 ; WX 732 ; N uni144F ; G 1574
U 5200 ; WX 730 ; N uni1450 ; G 1575
U 5201 ; WX 730 ; N uni1451 ; G 1576
U 5202 ; WX 730 ; N uni1452 ; G 1577
U 5204 ; WX 730 ; N uni1454 ; G 1578
U 5205 ; WX 730 ; N uni1455 ; G 1579
U 5206 ; WX 730 ; N uni1456 ; G 1580
U 5207 ; WX 921 ; N uni1457 ; G 1581
U 5208 ; WX 889 ; N uni1458 ; G 1582
U 5209 ; WX 921 ; N uni1459 ; G 1583
U 5210 ; WX 889 ; N uni145A ; G 1584
U 5211 ; WX 921 ; N uni145B ; G 1585
U 5212 ; WX 889 ; N uni145C ; G 1586
U 5213 ; WX 928 ; N uni145D ; G 1587
U 5214 ; WX 900 ; N uni145E ; G 1588
U 5215 ; WX 928 ; N uni145F ; G 1589
U 5216 ; WX 900 ; N uni1460 ; G 1590
U 5217 ; WX 947 ; N uni1461 ; G 1591
U 5218 ; WX 900 ; N uni1462 ; G 1592
U 5219 ; WX 947 ; N uni1463 ; G 1593
U 5220 ; WX 900 ; N uni1464 ; G 1594
U 5221 ; WX 947 ; N uni1465 ; G 1595
U 5222 ; WX 434 ; N uni1466 ; G 1596
U 5223 ; WX 877 ; N uni1467 ; G 1597
U 5224 ; WX 877 ; N uni1468 ; G 1598
U 5225 ; WX 866 ; N uni1469 ; G 1599
U 5226 ; WX 890 ; N uni146A ; G 1600
U 5227 ; WX 628 ; N uni146B ; G 1601
U 5228 ; WX 628 ; N uni146C ; G 1602
U 5229 ; WX 628 ; N uni146D ; G 1603
U 5230 ; WX 628 ; N uni146E ; G 1604
U 5231 ; WX 628 ; N uni146F ; G 1605
U 5232 ; WX 628 ; N uni1470 ; G 1606
U 5233 ; WX 628 ; N uni1471 ; G 1607
U 5234 ; WX 628 ; N uni1472 ; G 1608
U 5235 ; WX 628 ; N uni1473 ; G 1609
U 5236 ; WX 860 ; N uni1474 ; G 1610
U 5237 ; WX 771 ; N uni1475 ; G 1611
U 5238 ; WX 815 ; N uni1476 ; G 1612
U 5239 ; WX 816 ; N uni1477 ; G 1613
U 5240 ; WX 815 ; N uni1478 ; G 1614
U 5241 ; WX 816 ; N uni1479 ; G 1615
U 5242 ; WX 860 ; N uni147A ; G 1616
U 5243 ; WX 771 ; N uni147B ; G 1617
U 5244 ; WX 860 ; N uni147C ; G 1618
U 5245 ; WX 771 ; N uni147D ; G 1619
U 5246 ; WX 815 ; N uni147E ; G 1620
U 5247 ; WX 816 ; N uni147F ; G 1621
U 5248 ; WX 815 ; N uni1480 ; G 1622
U 5249 ; WX 816 ; N uni1481 ; G 1623
U 5250 ; WX 815 ; N uni1482 ; G 1624
U 5251 ; WX 407 ; N uni1483 ; G 1625
U 5252 ; WX 407 ; N uni1484 ; G 1626
U 5253 ; WX 750 ; N uni1485 ; G 1627
U 5254 ; WX 775 ; N uni1486 ; G 1628
U 5255 ; WX 750 ; N uni1487 ; G 1629
U 5256 ; WX 775 ; N uni1488 ; G 1630
U 5257 ; WX 628 ; N uni1489 ; G 1631
U 5258 ; WX 628 ; N uni148A ; G 1632
U 5259 ; WX 628 ; N uni148B ; G 1633
U 5260 ; WX 628 ; N uni148C ; G 1634
U 5261 ; WX 628 ; N uni148D ; G 1635
U 5262 ; WX 628 ; N uni148E ; G 1636
U 5263 ; WX 628 ; N uni148F ; G 1637
U 5264 ; WX 628 ; N uni1490 ; G 1638
U 5265 ; WX 628 ; N uni1491 ; G 1639
U 5266 ; WX 860 ; N uni1492 ; G 1640
U 5267 ; WX 771 ; N uni1493 ; G 1641
U 5268 ; WX 815 ; N uni1494 ; G 1642
U 5269 ; WX 816 ; N uni1495 ; G 1643
U 5270 ; WX 815 ; N uni1496 ; G 1644
U 5271 ; WX 816 ; N uni1497 ; G 1645
U 5272 ; WX 860 ; N uni1498 ; G 1646
U 5273 ; WX 771 ; N uni1499 ; G 1647
U 5274 ; WX 860 ; N uni149A ; G 1648
U 5275 ; WX 771 ; N uni149B ; G 1649
U 5276 ; WX 815 ; N uni149C ; G 1650
U 5277 ; WX 816 ; N uni149D ; G 1651
U 5278 ; WX 815 ; N uni149E ; G 1652
U 5279 ; WX 816 ; N uni149F ; G 1653
U 5280 ; WX 815 ; N uni14A0 ; G 1654
U 5281 ; WX 435 ; N uni14A1 ; G 1655
U 5282 ; WX 435 ; N uni14A2 ; G 1656
U 5283 ; WX 610 ; N uni14A3 ; G 1657
U 5284 ; WX 557 ; N uni14A4 ; G 1658
U 5285 ; WX 557 ; N uni14A5 ; G 1659
U 5286 ; WX 557 ; N uni14A6 ; G 1660
U 5287 ; WX 610 ; N uni14A7 ; G 1661
U 5288 ; WX 610 ; N uni14A8 ; G 1662
U 5289 ; WX 610 ; N uni14A9 ; G 1663
U 5290 ; WX 557 ; N uni14AA ; G 1664
U 5291 ; WX 557 ; N uni14AB ; G 1665
U 5292 ; WX 749 ; N uni14AC ; G 1666
U 5293 ; WX 769 ; N uni14AD ; G 1667
U 5294 ; WX 746 ; N uni14AE ; G 1668
U 5295 ; WX 764 ; N uni14AF ; G 1669
U 5296 ; WX 746 ; N uni14B0 ; G 1670
U 5297 ; WX 764 ; N uni14B1 ; G 1671
U 5298 ; WX 749 ; N uni14B2 ; G 1672
U 5299 ; WX 769 ; N uni14B3 ; G 1673
U 5300 ; WX 749 ; N uni14B4 ; G 1674
U 5301 ; WX 769 ; N uni14B5 ; G 1675
U 5302 ; WX 746 ; N uni14B6 ; G 1676
U 5303 ; WX 764 ; N uni14B7 ; G 1677
U 5304 ; WX 746 ; N uni14B8 ; G 1678
U 5305 ; WX 764 ; N uni14B9 ; G 1679
U 5306 ; WX 746 ; N uni14BA ; G 1680
U 5307 ; WX 386 ; N uni14BB ; G 1681
U 5308 ; WX 508 ; N uni14BC ; G 1682
U 5309 ; WX 386 ; N uni14BD ; G 1683
U 5312 ; WX 852 ; N uni14C0 ; G 1684
U 5313 ; WX 852 ; N uni14C1 ; G 1685
U 5314 ; WX 852 ; N uni14C2 ; G 1686
U 5315 ; WX 852 ; N uni14C3 ; G 1687
U 5316 ; WX 852 ; N uni14C4 ; G 1688
U 5317 ; WX 852 ; N uni14C5 ; G 1689
U 5318 ; WX 852 ; N uni14C6 ; G 1690
U 5319 ; WX 852 ; N uni14C7 ; G 1691
U 5320 ; WX 852 ; N uni14C8 ; G 1692
U 5321 ; WX 1069 ; N uni14C9 ; G 1693
U 5322 ; WX 1035 ; N uni14CA ; G 1694
U 5323 ; WX 1059 ; N uni14CB ; G 1695
U 5324 ; WX 852 ; N uni14CC ; G 1696
U 5325 ; WX 1059 ; N uni14CD ; G 1697
U 5326 ; WX 852 ; N uni14CE ; G 1698
U 5327 ; WX 852 ; N uni14CF ; G 1699
U 5328 ; WX 600 ; N uni14D0 ; G 1700
U 5329 ; WX 453 ; N uni14D1 ; G 1701
U 5330 ; WX 600 ; N uni14D2 ; G 1702
U 5331 ; WX 852 ; N uni14D3 ; G 1703
U 5332 ; WX 852 ; N uni14D4 ; G 1704
U 5333 ; WX 852 ; N uni14D5 ; G 1705
U 5334 ; WX 852 ; N uni14D6 ; G 1706
U 5335 ; WX 852 ; N uni14D7 ; G 1707
U 5336 ; WX 852 ; N uni14D8 ; G 1708
U 5337 ; WX 852 ; N uni14D9 ; G 1709
U 5338 ; WX 852 ; N uni14DA ; G 1710
U 5339 ; WX 852 ; N uni14DB ; G 1711
U 5340 ; WX 1069 ; N uni14DC ; G 1712
U 5341 ; WX 1035 ; N uni14DD ; G 1713
U 5342 ; WX 1059 ; N uni14DE ; G 1714
U 5343 ; WX 1030 ; N uni14DF ; G 1715
U 5344 ; WX 1059 ; N uni14E0 ; G 1716
U 5345 ; WX 1030 ; N uni14E1 ; G 1717
U 5346 ; WX 1069 ; N uni14E2 ; G 1718
U 5347 ; WX 1035 ; N uni14E3 ; G 1719
U 5348 ; WX 1069 ; N uni14E4 ; G 1720
U 5349 ; WX 1035 ; N uni14E5 ; G 1721
U 5350 ; WX 1083 ; N uni14E6 ; G 1722
U 5351 ; WX 1030 ; N uni14E7 ; G 1723
U 5352 ; WX 1083 ; N uni14E8 ; G 1724
U 5353 ; WX 1030 ; N uni14E9 ; G 1725
U 5354 ; WX 600 ; N uni14EA ; G 1726
U 5356 ; WX 729 ; N uni14EC ; G 1727
U 5357 ; WX 603 ; N uni14ED ; G 1728
U 5358 ; WX 603 ; N uni14EE ; G 1729
U 5359 ; WX 603 ; N uni14EF ; G 1730
U 5360 ; WX 603 ; N uni14F0 ; G 1731
U 5361 ; WX 603 ; N uni14F1 ; G 1732
U 5362 ; WX 603 ; N uni14F2 ; G 1733
U 5363 ; WX 603 ; N uni14F3 ; G 1734
U 5364 ; WX 603 ; N uni14F4 ; G 1735
U 5365 ; WX 603 ; N uni14F5 ; G 1736
U 5366 ; WX 834 ; N uni14F6 ; G 1737
U 5367 ; WX 754 ; N uni14F7 ; G 1738
U 5368 ; WX 792 ; N uni14F8 ; G 1739
U 5369 ; WX 771 ; N uni14F9 ; G 1740
U 5370 ; WX 792 ; N uni14FA ; G 1741
U 5371 ; WX 771 ; N uni14FB ; G 1742
U 5372 ; WX 834 ; N uni14FC ; G 1743
U 5373 ; WX 754 ; N uni14FD ; G 1744
U 5374 ; WX 834 ; N uni14FE ; G 1745
U 5375 ; WX 754 ; N uni14FF ; G 1746
U 5376 ; WX 792 ; N uni1500 ; G 1747
U 5377 ; WX 771 ; N uni1501 ; G 1748
U 5378 ; WX 792 ; N uni1502 ; G 1749
U 5379 ; WX 771 ; N uni1503 ; G 1750
U 5380 ; WX 792 ; N uni1504 ; G 1751
U 5381 ; WX 418 ; N uni1505 ; G 1752
U 5382 ; WX 420 ; N uni1506 ; G 1753
U 5383 ; WX 418 ; N uni1507 ; G 1754
U 5392 ; WX 712 ; N uni1510 ; G 1755
U 5393 ; WX 712 ; N uni1511 ; G 1756
U 5394 ; WX 712 ; N uni1512 ; G 1757
U 5395 ; WX 892 ; N uni1513 ; G 1758
U 5396 ; WX 892 ; N uni1514 ; G 1759
U 5397 ; WX 892 ; N uni1515 ; G 1760
U 5398 ; WX 892 ; N uni1516 ; G 1761
U 5399 ; WX 910 ; N uni1517 ; G 1762
U 5400 ; WX 872 ; N uni1518 ; G 1763
U 5401 ; WX 910 ; N uni1519 ; G 1764
U 5402 ; WX 872 ; N uni151A ; G 1765
U 5403 ; WX 910 ; N uni151B ; G 1766
U 5404 ; WX 872 ; N uni151C ; G 1767
U 5405 ; WX 1140 ; N uni151D ; G 1768
U 5406 ; WX 1100 ; N uni151E ; G 1769
U 5407 ; WX 1140 ; N uni151F ; G 1770
U 5408 ; WX 1100 ; N uni1520 ; G 1771
U 5409 ; WX 1140 ; N uni1521 ; G 1772
U 5410 ; WX 1100 ; N uni1522 ; G 1773
U 5411 ; WX 1140 ; N uni1523 ; G 1774
U 5412 ; WX 1100 ; N uni1524 ; G 1775
U 5413 ; WX 641 ; N uni1525 ; G 1776
U 5414 ; WX 627 ; N uni1526 ; G 1777
U 5415 ; WX 627 ; N uni1527 ; G 1778
U 5416 ; WX 627 ; N uni1528 ; G 1779
U 5417 ; WX 627 ; N uni1529 ; G 1780
U 5418 ; WX 627 ; N uni152A ; G 1781
U 5419 ; WX 627 ; N uni152B ; G 1782
U 5420 ; WX 627 ; N uni152C ; G 1783
U 5421 ; WX 627 ; N uni152D ; G 1784
U 5422 ; WX 627 ; N uni152E ; G 1785
U 5423 ; WX 844 ; N uni152F ; G 1786
U 5424 ; WX 781 ; N uni1530 ; G 1787
U 5425 ; WX 816 ; N uni1531 ; G 1788
U 5426 ; WX 818 ; N uni1532 ; G 1789
U 5427 ; WX 816 ; N uni1533 ; G 1790
U 5428 ; WX 818 ; N uni1534 ; G 1791
U 5429 ; WX 844 ; N uni1535 ; G 1792
U 5430 ; WX 781 ; N uni1536 ; G 1793
U 5431 ; WX 844 ; N uni1537 ; G 1794
U 5432 ; WX 781 ; N uni1538 ; G 1795
U 5433 ; WX 816 ; N uni1539 ; G 1796
U 5434 ; WX 818 ; N uni153A ; G 1797
U 5435 ; WX 816 ; N uni153B ; G 1798
U 5436 ; WX 818 ; N uni153C ; G 1799
U 5437 ; WX 816 ; N uni153D ; G 1800
U 5438 ; WX 418 ; N uni153E ; G 1801
U 5440 ; WX 389 ; N uni1540 ; G 1802
U 5441 ; WX 484 ; N uni1541 ; G 1803
U 5442 ; WX 916 ; N uni1542 ; G 1804
U 5443 ; WX 916 ; N uni1543 ; G 1805
U 5444 ; WX 863 ; N uni1544 ; G 1806
U 5445 ; WX 916 ; N uni1545 ; G 1807
U 5446 ; WX 863 ; N uni1546 ; G 1808
U 5447 ; WX 863 ; N uni1547 ; G 1809
U 5448 ; WX 603 ; N uni1548 ; G 1810
U 5449 ; WX 603 ; N uni1549 ; G 1811
U 5450 ; WX 603 ; N uni154A ; G 1812
U 5451 ; WX 603 ; N uni154B ; G 1813
U 5452 ; WX 603 ; N uni154C ; G 1814
U 5453 ; WX 603 ; N uni154D ; G 1815
U 5454 ; WX 834 ; N uni154E ; G 1816
U 5455 ; WX 754 ; N uni154F ; G 1817
U 5456 ; WX 418 ; N uni1550 ; G 1818
U 5458 ; WX 729 ; N uni1552 ; G 1819
U 5459 ; WX 684 ; N uni1553 ; G 1820
U 5460 ; WX 684 ; N uni1554 ; G 1821
U 5461 ; WX 684 ; N uni1555 ; G 1822
U 5462 ; WX 684 ; N uni1556 ; G 1823
U 5463 ; WX 726 ; N uni1557 ; G 1824
U 5464 ; WX 726 ; N uni1558 ; G 1825
U 5465 ; WX 726 ; N uni1559 ; G 1826
U 5466 ; WX 726 ; N uni155A ; G 1827
U 5467 ; WX 924 ; N uni155B ; G 1828
U 5468 ; WX 1007 ; N uni155C ; G 1829
U 5469 ; WX 508 ; N uni155D ; G 1830
U 5470 ; WX 732 ; N uni155E ; G 1831
U 5471 ; WX 732 ; N uni155F ; G 1832
U 5472 ; WX 732 ; N uni1560 ; G 1833
U 5473 ; WX 732 ; N uni1561 ; G 1834
U 5474 ; WX 732 ; N uni1562 ; G 1835
U 5475 ; WX 732 ; N uni1563 ; G 1836
U 5476 ; WX 730 ; N uni1564 ; G 1837
U 5477 ; WX 730 ; N uni1565 ; G 1838
U 5478 ; WX 730 ; N uni1566 ; G 1839
U 5479 ; WX 730 ; N uni1567 ; G 1840
U 5480 ; WX 947 ; N uni1568 ; G 1841
U 5481 ; WX 900 ; N uni1569 ; G 1842
U 5482 ; WX 508 ; N uni156A ; G 1843
U 5492 ; WX 831 ; N uni1574 ; G 1844
U 5493 ; WX 831 ; N uni1575 ; G 1845
U 5494 ; WX 831 ; N uni1576 ; G 1846
U 5495 ; WX 831 ; N uni1577 ; G 1847
U 5496 ; WX 831 ; N uni1578 ; G 1848
U 5497 ; WX 831 ; N uni1579 ; G 1849
U 5498 ; WX 831 ; N uni157A ; G 1850
U 5499 ; WX 563 ; N uni157B ; G 1851
U 5500 ; WX 752 ; N uni157C ; G 1852
U 5501 ; WX 484 ; N uni157D ; G 1853
U 5502 ; WX 1047 ; N uni157E ; G 1854
U 5503 ; WX 1047 ; N uni157F ; G 1855
U 5504 ; WX 1047 ; N uni1580 ; G 1856
U 5505 ; WX 1047 ; N uni1581 ; G 1857
U 5506 ; WX 1047 ; N uni1582 ; G 1858
U 5507 ; WX 1047 ; N uni1583 ; G 1859
U 5508 ; WX 1047 ; N uni1584 ; G 1860
U 5509 ; WX 825 ; N uni1585 ; G 1861
U 5514 ; WX 831 ; N uni158A ; G 1862
U 5515 ; WX 831 ; N uni158B ; G 1863
U 5516 ; WX 831 ; N uni158C ; G 1864
U 5517 ; WX 831 ; N uni158D ; G 1865
U 5518 ; WX 1259 ; N uni158E ; G 1866
U 5519 ; WX 1259 ; N uni158F ; G 1867
U 5520 ; WX 1259 ; N uni1590 ; G 1868
U 5521 ; WX 1002 ; N uni1591 ; G 1869
U 5522 ; WX 1002 ; N uni1592 ; G 1870
U 5523 ; WX 1259 ; N uni1593 ; G 1871
U 5524 ; WX 1259 ; N uni1594 ; G 1872
U 5525 ; WX 700 ; N uni1595 ; G 1873
U 5526 ; WX 1073 ; N uni1596 ; G 1874
U 5536 ; WX 852 ; N uni15A0 ; G 1875
U 5537 ; WX 852 ; N uni15A1 ; G 1876
U 5538 ; WX 799 ; N uni15A2 ; G 1877
U 5539 ; WX 799 ; N uni15A3 ; G 1878
U 5540 ; WX 799 ; N uni15A4 ; G 1879
U 5541 ; WX 799 ; N uni15A5 ; G 1880
U 5542 ; WX 600 ; N uni15A6 ; G 1881
U 5543 ; WX 643 ; N uni15A7 ; G 1882
U 5544 ; WX 643 ; N uni15A8 ; G 1883
U 5545 ; WX 643 ; N uni15A9 ; G 1884
U 5546 ; WX 643 ; N uni15AA ; G 1885
U 5547 ; WX 643 ; N uni15AB ; G 1886
U 5548 ; WX 643 ; N uni15AC ; G 1887
U 5549 ; WX 643 ; N uni15AD ; G 1888
U 5550 ; WX 418 ; N uni15AE ; G 1889
U 5551 ; WX 628 ; N uni15AF ; G 1890
U 5598 ; WX 770 ; N uni15DE ; G 1891
U 5601 ; WX 770 ; N uni15E1 ; G 1892
U 5702 ; WX 468 ; N uni1646 ; G 1893
U 5703 ; WX 468 ; N uni1647 ; G 1894
U 5742 ; WX 444 ; N uni166E ; G 1895
U 5743 ; WX 1047 ; N uni166F ; G 1896
U 5744 ; WX 1310 ; N uni1670 ; G 1897
U 5745 ; WX 1632 ; N uni1671 ; G 1898
U 5746 ; WX 1632 ; N uni1672 ; G 1899
U 5747 ; WX 1375 ; N uni1673 ; G 1900
U 5748 ; WX 1375 ; N uni1674 ; G 1901
U 5749 ; WX 1632 ; N uni1675 ; G 1902
U 5750 ; WX 1632 ; N uni1676 ; G 1903
U 7424 ; WX 592 ; N uni1D00 ; G 1904
U 7425 ; WX 717 ; N uni1D01 ; G 1905
U 7426 ; WX 982 ; N uni1D02 ; G 1906
U 7427 ; WX 586 ; N uni1D03 ; G 1907
U 7428 ; WX 550 ; N uni1D04 ; G 1908
U 7429 ; WX 605 ; N uni1D05 ; G 1909
U 7430 ; WX 605 ; N uni1D06 ; G 1910
U 7431 ; WX 491 ; N uni1D07 ; G 1911
U 7432 ; WX 541 ; N uni1D08 ; G 1912
U 7433 ; WX 278 ; N uni1D09 ; G 1913
U 7434 ; WX 395 ; N uni1D0A ; G 1914
U 7435 ; WX 579 ; N uni1D0B ; G 1915
U 7436 ; WX 583 ; N uni1D0C ; G 1916
U 7437 ; WX 754 ; N uni1D0D ; G 1917
U 7438 ; WX 650 ; N uni1D0E ; G 1918
U 7439 ; WX 612 ; N uni1D0F ; G 1919
U 7440 ; WX 550 ; N uni1D10 ; G 1920
U 7441 ; WX 684 ; N uni1D11 ; G 1921
U 7442 ; WX 684 ; N uni1D12 ; G 1922
U 7443 ; WX 684 ; N uni1D13 ; G 1923
U 7444 ; WX 1023 ; N uni1D14 ; G 1924
U 7446 ; WX 612 ; N uni1D16 ; G 1925
U 7447 ; WX 612 ; N uni1D17 ; G 1926
U 7448 ; WX 524 ; N uni1D18 ; G 1927
U 7449 ; WX 602 ; N uni1D19 ; G 1928
U 7450 ; WX 602 ; N uni1D1A ; G 1929
U 7451 ; WX 583 ; N uni1D1B ; G 1930
U 7452 ; WX 574 ; N uni1D1C ; G 1931
U 7453 ; WX 737 ; N uni1D1D ; G 1932
U 7454 ; WX 948 ; N uni1D1E ; G 1933
U 7455 ; WX 638 ; N uni1D1F ; G 1934
U 7456 ; WX 592 ; N uni1D20 ; G 1935
U 7457 ; WX 818 ; N uni1D21 ; G 1936
U 7458 ; WX 525 ; N uni1D22 ; G 1937
U 7459 ; WX 526 ; N uni1D23 ; G 1938
U 7462 ; WX 583 ; N uni1D26 ; G 1939
U 7463 ; WX 592 ; N uni1D27 ; G 1940
U 7464 ; WX 564 ; N uni1D28 ; G 1941
U 7465 ; WX 524 ; N uni1D29 ; G 1942
U 7466 ; WX 590 ; N uni1D2A ; G 1943
U 7467 ; WX 639 ; N uni1D2B ; G 1944
U 7468 ; WX 431 ; N uni1D2C ; G 1945
U 7469 ; WX 613 ; N uni1D2D ; G 1946
U 7470 ; WX 432 ; N uni1D2E ; G 1947
U 7472 ; WX 485 ; N uni1D30 ; G 1948
U 7473 ; WX 398 ; N uni1D31 ; G 1949
U 7474 ; WX 398 ; N uni1D32 ; G 1950
U 7475 ; WX 488 ; N uni1D33 ; G 1951
U 7476 ; WX 474 ; N uni1D34 ; G 1952
U 7477 ; WX 186 ; N uni1D35 ; G 1953
U 7478 ; WX 186 ; N uni1D36 ; G 1954
U 7479 ; WX 413 ; N uni1D37 ; G 1955
U 7480 ; WX 351 ; N uni1D38 ; G 1956
U 7481 ; WX 543 ; N uni1D39 ; G 1957
U 7482 ; WX 471 ; N uni1D3A ; G 1958
U 7483 ; WX 471 ; N uni1D3B ; G 1959
U 7484 ; WX 496 ; N uni1D3C ; G 1960
U 7485 ; WX 439 ; N uni1D3D ; G 1961
U 7486 ; WX 380 ; N uni1D3E ; G 1962
U 7487 ; WX 438 ; N uni1D3F ; G 1963
U 7488 ; WX 385 ; N uni1D40 ; G 1964
U 7489 ; WX 461 ; N uni1D41 ; G 1965
U 7490 ; WX 623 ; N uni1D42 ; G 1966
U 7491 ; WX 392 ; N uni1D43 ; G 1967
U 7492 ; WX 392 ; N uni1D44 ; G 1968
U 7493 ; WX 405 ; N uni1D45 ; G 1969
U 7494 ; WX 648 ; N uni1D46 ; G 1970
U 7495 ; WX 428 ; N uni1D47 ; G 1971
U 7496 ; WX 405 ; N uni1D48 ; G 1972
U 7497 ; WX 417 ; N uni1D49 ; G 1973
U 7498 ; WX 417 ; N uni1D4A ; G 1974
U 7499 ; WX 360 ; N uni1D4B ; G 1975
U 7500 ; WX 359 ; N uni1D4C ; G 1976
U 7501 ; WX 405 ; N uni1D4D ; G 1977
U 7502 ; WX 179 ; N uni1D4E ; G 1978
U 7503 ; WX 426 ; N uni1D4F ; G 1979
U 7504 ; WX 623 ; N uni1D50 ; G 1980
U 7505 ; WX 409 ; N uni1D51 ; G 1981
U 7506 ; WX 414 ; N uni1D52 ; G 1982
U 7507 ; WX 370 ; N uni1D53 ; G 1983
U 7508 ; WX 414 ; N uni1D54 ; G 1984
U 7509 ; WX 414 ; N uni1D55 ; G 1985
U 7510 ; WX 428 ; N uni1D56 ; G 1986
U 7511 ; WX 295 ; N uni1D57 ; G 1987
U 7512 ; WX 405 ; N uni1D58 ; G 1988
U 7513 ; WX 470 ; N uni1D59 ; G 1989
U 7514 ; WX 623 ; N uni1D5A ; G 1990
U 7515 ; WX 417 ; N uni1D5B ; G 1991
U 7517 ; WX 402 ; N uni1D5D ; G 1992
U 7518 ; WX 373 ; N uni1D5E ; G 1993
U 7519 ; WX 385 ; N uni1D5F ; G 1994
U 7520 ; WX 416 ; N uni1D60 ; G 1995
U 7521 ; WX 364 ; N uni1D61 ; G 1996
U 7522 ; WX 179 ; N uni1D62 ; G 1997
U 7523 ; WX 259 ; N uni1D63 ; G 1998
U 7524 ; WX 405 ; N uni1D64 ; G 1999
U 7525 ; WX 417 ; N uni1D65 ; G 2000
U 7526 ; WX 402 ; N uni1D66 ; G 2001
U 7527 ; WX 373 ; N uni1D67 ; G 2002
U 7528 ; WX 412 ; N uni1D68 ; G 2003
U 7529 ; WX 416 ; N uni1D69 ; G 2004
U 7530 ; WX 364 ; N uni1D6A ; G 2005
U 7543 ; WX 635 ; N uni1D77 ; G 2006
U 7544 ; WX 474 ; N uni1D78 ; G 2007
U 7547 ; WX 372 ; N uni1D7B ; G 2008
U 7549 ; WX 667 ; N uni1D7D ; G 2009
U 7557 ; WX 278 ; N uni1D85 ; G 2010
U 7579 ; WX 405 ; N uni1D9B ; G 2011
U 7580 ; WX 370 ; N uni1D9C ; G 2012
U 7581 ; WX 370 ; N uni1D9D ; G 2013
U 7582 ; WX 414 ; N uni1D9E ; G 2014
U 7583 ; WX 360 ; N uni1D9F ; G 2015
U 7584 ; WX 296 ; N uni1DA0 ; G 2016
U 7585 ; WX 233 ; N uni1DA1 ; G 2017
U 7586 ; WX 405 ; N uni1DA2 ; G 2018
U 7587 ; WX 405 ; N uni1DA3 ; G 2019
U 7588 ; WX 261 ; N uni1DA4 ; G 2020
U 7589 ; WX 250 ; N uni1DA5 ; G 2021
U 7590 ; WX 261 ; N uni1DA6 ; G 2022
U 7591 ; WX 261 ; N uni1DA7 ; G 2023
U 7592 ; WX 234 ; N uni1DA8 ; G 2024
U 7593 ; WX 250 ; N uni1DA9 ; G 2025
U 7594 ; WX 235 ; N uni1DAA ; G 2026
U 7595 ; WX 376 ; N uni1DAB ; G 2027
U 7596 ; WX 623 ; N uni1DAC ; G 2028
U 7597 ; WX 623 ; N uni1DAD ; G 2029
U 7598 ; WX 411 ; N uni1DAE ; G 2030
U 7599 ; WX 479 ; N uni1DAF ; G 2031
U 7600 ; WX 409 ; N uni1DB0 ; G 2032
U 7601 ; WX 414 ; N uni1DB1 ; G 2033
U 7602 ; WX 414 ; N uni1DB2 ; G 2034
U 7603 ; WX 360 ; N uni1DB3 ; G 2035
U 7604 ; WX 287 ; N uni1DB4 ; G 2036
U 7605 ; WX 295 ; N uni1DB5 ; G 2037
U 7606 ; WX 508 ; N uni1DB6 ; G 2038
U 7607 ; WX 418 ; N uni1DB7 ; G 2039
U 7608 ; WX 361 ; N uni1DB8 ; G 2040
U 7609 ; WX 406 ; N uni1DB9 ; G 2041
U 7610 ; WX 417 ; N uni1DBA ; G 2042
U 7611 ; WX 366 ; N uni1DBB ; G 2043
U 7612 ; WX 437 ; N uni1DBC ; G 2044
U 7613 ; WX 366 ; N uni1DBD ; G 2045
U 7614 ; WX 392 ; N uni1DBE ; G 2046
U 7615 ; WX 414 ; N uni1DBF ; G 2047
U 7620 ; WX 0 ; N uni1DC4 ; G 2048
U 7621 ; WX 0 ; N uni1DC5 ; G 2049
U 7622 ; WX 0 ; N uni1DC6 ; G 2050
U 7623 ; WX 0 ; N uni1DC7 ; G 2051
U 7624 ; WX 0 ; N uni1DC8 ; G 2052
U 7625 ; WX 0 ; N uni1DC9 ; G 2053
U 7680 ; WX 684 ; N uni1E00 ; G 2054
U 7681 ; WX 613 ; N uni1E01 ; G 2055
U 7682 ; WX 686 ; N uni1E02 ; G 2056
U 7683 ; WX 635 ; N uni1E03 ; G 2057
U 7684 ; WX 686 ; N uni1E04 ; G 2058
U 7685 ; WX 635 ; N uni1E05 ; G 2059
U 7686 ; WX 686 ; N uni1E06 ; G 2060
U 7687 ; WX 635 ; N uni1E07 ; G 2061
U 7688 ; WX 698 ; N uni1E08 ; G 2062
U 7689 ; WX 550 ; N uni1E09 ; G 2063
U 7690 ; WX 770 ; N uni1E0A ; G 2064
U 7691 ; WX 635 ; N uni1E0B ; G 2065
U 7692 ; WX 770 ; N uni1E0C ; G 2066
U 7693 ; WX 635 ; N uni1E0D ; G 2067
U 7694 ; WX 770 ; N uni1E0E ; G 2068
U 7695 ; WX 635 ; N uni1E0F ; G 2069
U 7696 ; WX 770 ; N uni1E10 ; G 2070
U 7697 ; WX 635 ; N uni1E11 ; G 2071
U 7698 ; WX 770 ; N uni1E12 ; G 2072
U 7699 ; WX 635 ; N uni1E13 ; G 2073
U 7700 ; WX 632 ; N uni1E14 ; G 2074
U 7701 ; WX 615 ; N uni1E15 ; G 2075
U 7702 ; WX 632 ; N uni1E16 ; G 2076
U 7703 ; WX 615 ; N uni1E17 ; G 2077
U 7704 ; WX 632 ; N uni1E18 ; G 2078
U 7705 ; WX 615 ; N uni1E19 ; G 2079
U 7706 ; WX 632 ; N uni1E1A ; G 2080
U 7707 ; WX 615 ; N uni1E1B ; G 2081
U 7708 ; WX 632 ; N uni1E1C ; G 2082
U 7709 ; WX 615 ; N uni1E1D ; G 2083
U 7710 ; WX 575 ; N uni1E1E ; G 2084
U 7711 ; WX 352 ; N uni1E1F ; G 2085
U 7712 ; WX 775 ; N uni1E20 ; G 2086
U 7713 ; WX 635 ; N uni1E21 ; G 2087
U 7714 ; WX 752 ; N uni1E22 ; G 2088
U 7715 ; WX 634 ; N uni1E23 ; G 2089
U 7716 ; WX 752 ; N uni1E24 ; G 2090
U 7717 ; WX 634 ; N uni1E25 ; G 2091
U 7718 ; WX 752 ; N uni1E26 ; G 2092
U 7719 ; WX 634 ; N uni1E27 ; G 2093
U 7720 ; WX 752 ; N uni1E28 ; G 2094
U 7721 ; WX 634 ; N uni1E29 ; G 2095
U 7722 ; WX 752 ; N uni1E2A ; G 2096
U 7723 ; WX 634 ; N uni1E2B ; G 2097
U 7724 ; WX 295 ; N uni1E2C ; G 2098
U 7725 ; WX 278 ; N uni1E2D ; G 2099
U 7726 ; WX 295 ; N uni1E2E ; G 2100
U 7727 ; WX 278 ; N uni1E2F ; G 2101
U 7728 ; WX 656 ; N uni1E30 ; G 2102
U 7729 ; WX 579 ; N uni1E31 ; G 2103
U 7730 ; WX 656 ; N uni1E32 ; G 2104
U 7731 ; WX 579 ; N uni1E33 ; G 2105
U 7732 ; WX 656 ; N uni1E34 ; G 2106
U 7733 ; WX 579 ; N uni1E35 ; G 2107
U 7734 ; WX 557 ; N uni1E36 ; G 2108
U 7735 ; WX 278 ; N uni1E37 ; G 2109
U 7736 ; WX 557 ; N uni1E38 ; G 2110
U 7737 ; WX 278 ; N uni1E39 ; G 2111
U 7738 ; WX 557 ; N uni1E3A ; G 2112
U 7739 ; WX 278 ; N uni1E3B ; G 2113
U 7740 ; WX 557 ; N uni1E3C ; G 2114
U 7741 ; WX 278 ; N uni1E3D ; G 2115
U 7742 ; WX 863 ; N uni1E3E ; G 2116
U 7743 ; WX 974 ; N uni1E3F ; G 2117
U 7744 ; WX 863 ; N uni1E40 ; G 2118
U 7745 ; WX 974 ; N uni1E41 ; G 2119
U 7746 ; WX 863 ; N uni1E42 ; G 2120
U 7747 ; WX 974 ; N uni1E43 ; G 2121
U 7748 ; WX 748 ; N uni1E44 ; G 2122
U 7749 ; WX 634 ; N uni1E45 ; G 2123
U 7750 ; WX 748 ; N uni1E46 ; G 2124
U 7751 ; WX 634 ; N uni1E47 ; G 2125
U 7752 ; WX 748 ; N uni1E48 ; G 2126
U 7753 ; WX 634 ; N uni1E49 ; G 2127
U 7754 ; WX 748 ; N uni1E4A ; G 2128
U 7755 ; WX 634 ; N uni1E4B ; G 2129
U 7756 ; WX 787 ; N uni1E4C ; G 2130
U 7757 ; WX 612 ; N uni1E4D ; G 2131
U 7758 ; WX 787 ; N uni1E4E ; G 2132
U 7759 ; WX 612 ; N uni1E4F ; G 2133
U 7760 ; WX 787 ; N uni1E50 ; G 2134
U 7761 ; WX 612 ; N uni1E51 ; G 2135
U 7762 ; WX 787 ; N uni1E52 ; G 2136
U 7763 ; WX 612 ; N uni1E53 ; G 2137
U 7764 ; WX 603 ; N uni1E54 ; G 2138
U 7765 ; WX 635 ; N uni1E55 ; G 2139
U 7766 ; WX 603 ; N uni1E56 ; G 2140
U 7767 ; WX 635 ; N uni1E57 ; G 2141
U 7768 ; WX 695 ; N uni1E58 ; G 2142
U 7769 ; WX 411 ; N uni1E59 ; G 2143
U 7770 ; WX 695 ; N uni1E5A ; G 2144
U 7771 ; WX 411 ; N uni1E5B ; G 2145
U 7772 ; WX 695 ; N uni1E5C ; G 2146
U 7773 ; WX 411 ; N uni1E5D ; G 2147
U 7774 ; WX 695 ; N uni1E5E ; G 2148
U 7775 ; WX 411 ; N uni1E5F ; G 2149
U 7776 ; WX 635 ; N uni1E60 ; G 2150
U 7777 ; WX 521 ; N uni1E61 ; G 2151
U 7778 ; WX 635 ; N uni1E62 ; G 2152
U 7779 ; WX 521 ; N uni1E63 ; G 2153
U 7780 ; WX 635 ; N uni1E64 ; G 2154
U 7781 ; WX 521 ; N uni1E65 ; G 2155
U 7782 ; WX 635 ; N uni1E66 ; G 2156
U 7783 ; WX 521 ; N uni1E67 ; G 2157
U 7784 ; WX 635 ; N uni1E68 ; G 2158
U 7785 ; WX 521 ; N uni1E69 ; G 2159
U 7786 ; WX 611 ; N uni1E6A ; G 2160
U 7787 ; WX 392 ; N uni1E6B ; G 2161
U 7788 ; WX 611 ; N uni1E6C ; G 2162
U 7789 ; WX 392 ; N uni1E6D ; G 2163
U 7790 ; WX 611 ; N uni1E6E ; G 2164
U 7791 ; WX 392 ; N uni1E6F ; G 2165
U 7792 ; WX 611 ; N uni1E70 ; G 2166
U 7793 ; WX 392 ; N uni1E71 ; G 2167
U 7794 ; WX 732 ; N uni1E72 ; G 2168
U 7795 ; WX 634 ; N uni1E73 ; G 2169
U 7796 ; WX 732 ; N uni1E74 ; G 2170
U 7797 ; WX 634 ; N uni1E75 ; G 2171
U 7798 ; WX 732 ; N uni1E76 ; G 2172
U 7799 ; WX 634 ; N uni1E77 ; G 2173
U 7800 ; WX 732 ; N uni1E78 ; G 2174
U 7801 ; WX 634 ; N uni1E79 ; G 2175
U 7802 ; WX 732 ; N uni1E7A ; G 2176
U 7803 ; WX 634 ; N uni1E7B ; G 2177
U 7804 ; WX 684 ; N uni1E7C ; G 2178
U 7805 ; WX 592 ; N uni1E7D ; G 2179
U 7806 ; WX 684 ; N uni1E7E ; G 2180
U 7807 ; WX 592 ; N uni1E7F ; G 2181
U 7808 ; WX 989 ; N Wgrave ; G 2182
U 7809 ; WX 818 ; N wgrave ; G 2183
U 7810 ; WX 989 ; N Wacute ; G 2184
U 7811 ; WX 818 ; N wacute ; G 2185
U 7812 ; WX 989 ; N Wdieresis ; G 2186
U 7813 ; WX 818 ; N wdieresis ; G 2187
U 7814 ; WX 989 ; N uni1E86 ; G 2188
U 7815 ; WX 818 ; N uni1E87 ; G 2189
U 7816 ; WX 989 ; N uni1E88 ; G 2190
U 7817 ; WX 818 ; N uni1E89 ; G 2191
U 7818 ; WX 685 ; N uni1E8A ; G 2192
U 7819 ; WX 592 ; N uni1E8B ; G 2193
U 7820 ; WX 685 ; N uni1E8C ; G 2194
U 7821 ; WX 592 ; N uni1E8D ; G 2195
U 7822 ; WX 611 ; N uni1E8E ; G 2196
U 7823 ; WX 592 ; N uni1E8F ; G 2197
U 7824 ; WX 685 ; N uni1E90 ; G 2198
U 7825 ; WX 525 ; N uni1E91 ; G 2199
U 7826 ; WX 685 ; N uni1E92 ; G 2200
U 7827 ; WX 525 ; N uni1E93 ; G 2201
U 7828 ; WX 685 ; N uni1E94 ; G 2202
U 7829 ; WX 525 ; N uni1E95 ; G 2203
U 7830 ; WX 634 ; N uni1E96 ; G 2204
U 7831 ; WX 392 ; N uni1E97 ; G 2205
U 7832 ; WX 818 ; N uni1E98 ; G 2206
U 7833 ; WX 592 ; N uni1E99 ; G 2207
U 7834 ; WX 613 ; N uni1E9A ; G 2208
U 7835 ; WX 352 ; N uni1E9B ; G 2209
U 7836 ; WX 352 ; N uni1E9C ; G 2210
U 7837 ; WX 352 ; N uni1E9D ; G 2211
U 7838 ; WX 769 ; N uni1E9E ; G 2212
U 7839 ; WX 612 ; N uni1E9F ; G 2213
U 7840 ; WX 684 ; N uni1EA0 ; G 2214
U 7841 ; WX 613 ; N uni1EA1 ; G 2215
U 7842 ; WX 684 ; N uni1EA2 ; G 2216
U 7843 ; WX 613 ; N uni1EA3 ; G 2217
U 7844 ; WX 684 ; N uni1EA4 ; G 2218
U 7845 ; WX 613 ; N uni1EA5 ; G 2219
U 7846 ; WX 684 ; N uni1EA6 ; G 2220
U 7847 ; WX 613 ; N uni1EA7 ; G 2221
U 7848 ; WX 684 ; N uni1EA8 ; G 2222
U 7849 ; WX 613 ; N uni1EA9 ; G 2223
U 7850 ; WX 684 ; N uni1EAA ; G 2224
U 7851 ; WX 613 ; N uni1EAB ; G 2225
U 7852 ; WX 684 ; N uni1EAC ; G 2226
U 7853 ; WX 613 ; N uni1EAD ; G 2227
U 7854 ; WX 684 ; N uni1EAE ; G 2228
U 7855 ; WX 613 ; N uni1EAF ; G 2229
U 7856 ; WX 684 ; N uni1EB0 ; G 2230
U 7857 ; WX 613 ; N uni1EB1 ; G 2231
U 7858 ; WX 684 ; N uni1EB2 ; G 2232
U 7859 ; WX 613 ; N uni1EB3 ; G 2233
U 7860 ; WX 684 ; N uni1EB4 ; G 2234
U 7861 ; WX 613 ; N uni1EB5 ; G 2235
U 7862 ; WX 684 ; N uni1EB6 ; G 2236
U 7863 ; WX 613 ; N uni1EB7 ; G 2237
U 7864 ; WX 632 ; N uni1EB8 ; G 2238
U 7865 ; WX 615 ; N uni1EB9 ; G 2239
U 7866 ; WX 632 ; N uni1EBA ; G 2240
U 7867 ; WX 615 ; N uni1EBB ; G 2241
U 7868 ; WX 632 ; N uni1EBC ; G 2242
U 7869 ; WX 615 ; N uni1EBD ; G 2243
U 7870 ; WX 632 ; N uni1EBE ; G 2244
U 7871 ; WX 615 ; N uni1EBF ; G 2245
U 7872 ; WX 632 ; N uni1EC0 ; G 2246
U 7873 ; WX 615 ; N uni1EC1 ; G 2247
U 7874 ; WX 632 ; N uni1EC2 ; G 2248
U 7875 ; WX 615 ; N uni1EC3 ; G 2249
U 7876 ; WX 632 ; N uni1EC4 ; G 2250
U 7877 ; WX 615 ; N uni1EC5 ; G 2251
U 7878 ; WX 632 ; N uni1EC6 ; G 2252
U 7879 ; WX 615 ; N uni1EC7 ; G 2253
U 7880 ; WX 295 ; N uni1EC8 ; G 2254
U 7881 ; WX 278 ; N uni1EC9 ; G 2255
U 7882 ; WX 295 ; N uni1ECA ; G 2256
U 7883 ; WX 278 ; N uni1ECB ; G 2257
U 7884 ; WX 787 ; N uni1ECC ; G 2258
U 7885 ; WX 612 ; N uni1ECD ; G 2259
U 7886 ; WX 787 ; N uni1ECE ; G 2260
U 7887 ; WX 612 ; N uni1ECF ; G 2261
U 7888 ; WX 787 ; N uni1ED0 ; G 2262
U 7889 ; WX 612 ; N uni1ED1 ; G 2263
U 7890 ; WX 787 ; N uni1ED2 ; G 2264
U 7891 ; WX 612 ; N uni1ED3 ; G 2265
U 7892 ; WX 787 ; N uni1ED4 ; G 2266
U 7893 ; WX 612 ; N uni1ED5 ; G 2267
U 7894 ; WX 787 ; N uni1ED6 ; G 2268
U 7895 ; WX 612 ; N uni1ED7 ; G 2269
U 7896 ; WX 787 ; N uni1ED8 ; G 2270
U 7897 ; WX 612 ; N uni1ED9 ; G 2271
U 7898 ; WX 913 ; N uni1EDA ; G 2272
U 7899 ; WX 612 ; N uni1EDB ; G 2273
U 7900 ; WX 913 ; N uni1EDC ; G 2274
U 7901 ; WX 612 ; N uni1EDD ; G 2275
U 7902 ; WX 913 ; N uni1EDE ; G 2276
U 7903 ; WX 612 ; N uni1EDF ; G 2277
U 7904 ; WX 913 ; N uni1EE0 ; G 2278
U 7905 ; WX 612 ; N uni1EE1 ; G 2279
U 7906 ; WX 913 ; N uni1EE2 ; G 2280
U 7907 ; WX 612 ; N uni1EE3 ; G 2281
U 7908 ; WX 732 ; N uni1EE4 ; G 2282
U 7909 ; WX 634 ; N uni1EE5 ; G 2283
U 7910 ; WX 732 ; N uni1EE6 ; G 2284
U 7911 ; WX 634 ; N uni1EE7 ; G 2285
U 7912 ; WX 838 ; N uni1EE8 ; G 2286
U 7913 ; WX 634 ; N uni1EE9 ; G 2287
U 7914 ; WX 838 ; N uni1EEA ; G 2288
U 7915 ; WX 634 ; N uni1EEB ; G 2289
U 7916 ; WX 838 ; N uni1EEC ; G 2290
U 7917 ; WX 634 ; N uni1EED ; G 2291
U 7918 ; WX 838 ; N uni1EEE ; G 2292
U 7919 ; WX 634 ; N uni1EEF ; G 2293
U 7920 ; WX 838 ; N uni1EF0 ; G 2294
U 7921 ; WX 634 ; N uni1EF1 ; G 2295
U 7922 ; WX 611 ; N Ygrave ; G 2296
U 7923 ; WX 592 ; N ygrave ; G 2297
U 7924 ; WX 611 ; N uni1EF4 ; G 2298
U 7925 ; WX 592 ; N uni1EF5 ; G 2299
U 7926 ; WX 611 ; N uni1EF6 ; G 2300
U 7927 ; WX 592 ; N uni1EF7 ; G 2301
U 7928 ; WX 611 ; N uni1EF8 ; G 2302
U 7929 ; WX 592 ; N uni1EF9 ; G 2303
U 7930 ; WX 769 ; N uni1EFA ; G 2304
U 7931 ; WX 477 ; N uni1EFB ; G 2305
U 7936 ; WX 659 ; N uni1F00 ; G 2306
U 7937 ; WX 659 ; N uni1F01 ; G 2307
U 7938 ; WX 659 ; N uni1F02 ; G 2308
U 7939 ; WX 659 ; N uni1F03 ; G 2309
U 7940 ; WX 659 ; N uni1F04 ; G 2310
U 7941 ; WX 659 ; N uni1F05 ; G 2311
U 7942 ; WX 659 ; N uni1F06 ; G 2312
U 7943 ; WX 659 ; N uni1F07 ; G 2313
U 7944 ; WX 684 ; N uni1F08 ; G 2314
U 7945 ; WX 684 ; N uni1F09 ; G 2315
U 7946 ; WX 877 ; N uni1F0A ; G 2316
U 7947 ; WX 877 ; N uni1F0B ; G 2317
U 7948 ; WX 769 ; N uni1F0C ; G 2318
U 7949 ; WX 801 ; N uni1F0D ; G 2319
U 7950 ; WX 708 ; N uni1F0E ; G 2320
U 7951 ; WX 743 ; N uni1F0F ; G 2321
U 7952 ; WX 541 ; N uni1F10 ; G 2322
U 7953 ; WX 541 ; N uni1F11 ; G 2323
U 7954 ; WX 541 ; N uni1F12 ; G 2324
U 7955 ; WX 541 ; N uni1F13 ; G 2325
U 7956 ; WX 541 ; N uni1F14 ; G 2326
U 7957 ; WX 541 ; N uni1F15 ; G 2327
U 7960 ; WX 711 ; N uni1F18 ; G 2328
U 7961 ; WX 711 ; N uni1F19 ; G 2329
U 7962 ; WX 966 ; N uni1F1A ; G 2330
U 7963 ; WX 975 ; N uni1F1B ; G 2331
U 7964 ; WX 898 ; N uni1F1C ; G 2332
U 7965 ; WX 928 ; N uni1F1D ; G 2333
U 7968 ; WX 634 ; N uni1F20 ; G 2334
U 7969 ; WX 634 ; N uni1F21 ; G 2335
U 7970 ; WX 634 ; N uni1F22 ; G 2336
U 7971 ; WX 634 ; N uni1F23 ; G 2337
U 7972 ; WX 634 ; N uni1F24 ; G 2338
U 7973 ; WX 634 ; N uni1F25 ; G 2339
U 7974 ; WX 634 ; N uni1F26 ; G 2340
U 7975 ; WX 634 ; N uni1F27 ; G 2341
U 7976 ; WX 837 ; N uni1F28 ; G 2342
U 7977 ; WX 835 ; N uni1F29 ; G 2343
U 7978 ; WX 1086 ; N uni1F2A ; G 2344
U 7979 ; WX 1089 ; N uni1F2B ; G 2345
U 7980 ; WX 1027 ; N uni1F2C ; G 2346
U 7981 ; WX 1051 ; N uni1F2D ; G 2347
U 7982 ; WX 934 ; N uni1F2E ; G 2348
U 7983 ; WX 947 ; N uni1F2F ; G 2349
U 7984 ; WX 338 ; N uni1F30 ; G 2350
U 7985 ; WX 338 ; N uni1F31 ; G 2351
U 7986 ; WX 338 ; N uni1F32 ; G 2352
U 7987 ; WX 338 ; N uni1F33 ; G 2353
U 7988 ; WX 338 ; N uni1F34 ; G 2354
U 7989 ; WX 338 ; N uni1F35 ; G 2355
U 7990 ; WX 338 ; N uni1F36 ; G 2356
U 7991 ; WX 338 ; N uni1F37 ; G 2357
U 7992 ; WX 380 ; N uni1F38 ; G 2358
U 7993 ; WX 374 ; N uni1F39 ; G 2359
U 7994 ; WX 635 ; N uni1F3A ; G 2360
U 7995 ; WX 635 ; N uni1F3B ; G 2361
U 7996 ; WX 570 ; N uni1F3C ; G 2362
U 7997 ; WX 600 ; N uni1F3D ; G 2363
U 7998 ; WX 489 ; N uni1F3E ; G 2364
U 7999 ; WX 493 ; N uni1F3F ; G 2365
U 8000 ; WX 612 ; N uni1F40 ; G 2366
U 8001 ; WX 612 ; N uni1F41 ; G 2367
U 8002 ; WX 612 ; N uni1F42 ; G 2368
U 8003 ; WX 612 ; N uni1F43 ; G 2369
U 8004 ; WX 612 ; N uni1F44 ; G 2370
U 8005 ; WX 612 ; N uni1F45 ; G 2371
U 8008 ; WX 804 ; N uni1F48 ; G 2372
U 8009 ; WX 848 ; N uni1F49 ; G 2373
U 8010 ; WX 1095 ; N uni1F4A ; G 2374
U 8011 ; WX 1100 ; N uni1F4B ; G 2375
U 8012 ; WX 938 ; N uni1F4C ; G 2376
U 8013 ; WX 970 ; N uni1F4D ; G 2377
U 8016 ; WX 579 ; N uni1F50 ; G 2378
U 8017 ; WX 579 ; N uni1F51 ; G 2379
U 8018 ; WX 579 ; N uni1F52 ; G 2380
U 8019 ; WX 579 ; N uni1F53 ; G 2381
U 8020 ; WX 579 ; N uni1F54 ; G 2382
U 8021 ; WX 579 ; N uni1F55 ; G 2383
U 8022 ; WX 579 ; N uni1F56 ; G 2384
U 8023 ; WX 579 ; N uni1F57 ; G 2385
U 8025 ; WX 784 ; N uni1F59 ; G 2386
U 8027 ; WX 998 ; N uni1F5B ; G 2387
U 8029 ; WX 1012 ; N uni1F5D ; G 2388
U 8031 ; WX 897 ; N uni1F5F ; G 2389
U 8032 ; WX 837 ; N uni1F60 ; G 2390
U 8033 ; WX 837 ; N uni1F61 ; G 2391
U 8034 ; WX 837 ; N uni1F62 ; G 2392
U 8035 ; WX 837 ; N uni1F63 ; G 2393
U 8036 ; WX 837 ; N uni1F64 ; G 2394
U 8037 ; WX 837 ; N uni1F65 ; G 2395
U 8038 ; WX 837 ; N uni1F66 ; G 2396
U 8039 ; WX 837 ; N uni1F67 ; G 2397
U 8040 ; WX 802 ; N uni1F68 ; G 2398
U 8041 ; WX 843 ; N uni1F69 ; G 2399
U 8042 ; WX 1089 ; N uni1F6A ; G 2400
U 8043 ; WX 1095 ; N uni1F6B ; G 2401
U 8044 ; WX 946 ; N uni1F6C ; G 2402
U 8045 ; WX 972 ; N uni1F6D ; G 2403
U 8046 ; WX 921 ; N uni1F6E ; G 2404
U 8047 ; WX 952 ; N uni1F6F ; G 2405
U 8048 ; WX 659 ; N uni1F70 ; G 2406
U 8049 ; WX 659 ; N uni1F71 ; G 2407
U 8050 ; WX 541 ; N uni1F72 ; G 2408
U 8051 ; WX 548 ; N uni1F73 ; G 2409
U 8052 ; WX 634 ; N uni1F74 ; G 2410
U 8053 ; WX 654 ; N uni1F75 ; G 2411
U 8054 ; WX 338 ; N uni1F76 ; G 2412
U 8055 ; WX 338 ; N uni1F77 ; G 2413
U 8056 ; WX 612 ; N uni1F78 ; G 2414
U 8057 ; WX 612 ; N uni1F79 ; G 2415
U 8058 ; WX 579 ; N uni1F7A ; G 2416
U 8059 ; WX 579 ; N uni1F7B ; G 2417
U 8060 ; WX 837 ; N uni1F7C ; G 2418
U 8061 ; WX 837 ; N uni1F7D ; G 2419
U 8064 ; WX 659 ; N uni1F80 ; G 2420
U 8065 ; WX 659 ; N uni1F81 ; G 2421
U 8066 ; WX 659 ; N uni1F82 ; G 2422
U 8067 ; WX 659 ; N uni1F83 ; G 2423
U 8068 ; WX 659 ; N uni1F84 ; G 2424
U 8069 ; WX 659 ; N uni1F85 ; G 2425
U 8070 ; WX 659 ; N uni1F86 ; G 2426
U 8071 ; WX 659 ; N uni1F87 ; G 2427
U 8072 ; WX 684 ; N uni1F88 ; G 2428
U 8073 ; WX 684 ; N uni1F89 ; G 2429
U 8074 ; WX 877 ; N uni1F8A ; G 2430
U 8075 ; WX 877 ; N uni1F8B ; G 2431
U 8076 ; WX 769 ; N uni1F8C ; G 2432
U 8077 ; WX 801 ; N uni1F8D ; G 2433
U 8078 ; WX 708 ; N uni1F8E ; G 2434
U 8079 ; WX 743 ; N uni1F8F ; G 2435
U 8080 ; WX 634 ; N uni1F90 ; G 2436
U 8081 ; WX 634 ; N uni1F91 ; G 2437
U 8082 ; WX 634 ; N uni1F92 ; G 2438
U 8083 ; WX 634 ; N uni1F93 ; G 2439
U 8084 ; WX 634 ; N uni1F94 ; G 2440
U 8085 ; WX 634 ; N uni1F95 ; G 2441
U 8086 ; WX 634 ; N uni1F96 ; G 2442
U 8087 ; WX 634 ; N uni1F97 ; G 2443
U 8088 ; WX 837 ; N uni1F98 ; G 2444
U 8089 ; WX 835 ; N uni1F99 ; G 2445
U 8090 ; WX 1086 ; N uni1F9A ; G 2446
U 8091 ; WX 1089 ; N uni1F9B ; G 2447
U 8092 ; WX 1027 ; N uni1F9C ; G 2448
U 8093 ; WX 1051 ; N uni1F9D ; G 2449
U 8094 ; WX 934 ; N uni1F9E ; G 2450
U 8095 ; WX 947 ; N uni1F9F ; G 2451
U 8096 ; WX 837 ; N uni1FA0 ; G 2452
U 8097 ; WX 837 ; N uni1FA1 ; G 2453
U 8098 ; WX 837 ; N uni1FA2 ; G 2454
U 8099 ; WX 837 ; N uni1FA3 ; G 2455
U 8100 ; WX 837 ; N uni1FA4 ; G 2456
U 8101 ; WX 837 ; N uni1FA5 ; G 2457
U 8102 ; WX 837 ; N uni1FA6 ; G 2458
U 8103 ; WX 837 ; N uni1FA7 ; G 2459
U 8104 ; WX 802 ; N uni1FA8 ; G 2460
U 8105 ; WX 843 ; N uni1FA9 ; G 2461
U 8106 ; WX 1089 ; N uni1FAA ; G 2462
U 8107 ; WX 1095 ; N uni1FAB ; G 2463
U 8108 ; WX 946 ; N uni1FAC ; G 2464
U 8109 ; WX 972 ; N uni1FAD ; G 2465
U 8110 ; WX 921 ; N uni1FAE ; G 2466
U 8111 ; WX 952 ; N uni1FAF ; G 2467
U 8112 ; WX 659 ; N uni1FB0 ; G 2468
U 8113 ; WX 659 ; N uni1FB1 ; G 2469
U 8114 ; WX 659 ; N uni1FB2 ; G 2470
U 8115 ; WX 659 ; N uni1FB3 ; G 2471
U 8116 ; WX 659 ; N uni1FB4 ; G 2472
U 8118 ; WX 659 ; N uni1FB6 ; G 2473
U 8119 ; WX 659 ; N uni1FB7 ; G 2474
U 8120 ; WX 684 ; N uni1FB8 ; G 2475
U 8121 ; WX 684 ; N uni1FB9 ; G 2476
U 8122 ; WX 716 ; N uni1FBA ; G 2477
U 8123 ; WX 692 ; N uni1FBB ; G 2478
U 8124 ; WX 684 ; N uni1FBC ; G 2479
U 8125 ; WX 500 ; N uni1FBD ; G 2480
U 8126 ; WX 500 ; N uni1FBE ; G 2481
U 8127 ; WX 500 ; N uni1FBF ; G 2482
U 8128 ; WX 500 ; N uni1FC0 ; G 2483
U 8129 ; WX 500 ; N uni1FC1 ; G 2484
U 8130 ; WX 634 ; N uni1FC2 ; G 2485
U 8131 ; WX 634 ; N uni1FC3 ; G 2486
U 8132 ; WX 654 ; N uni1FC4 ; G 2487
U 8134 ; WX 634 ; N uni1FC6 ; G 2488
U 8135 ; WX 634 ; N uni1FC7 ; G 2489
U 8136 ; WX 805 ; N uni1FC8 ; G 2490
U 8137 ; WX 746 ; N uni1FC9 ; G 2491
U 8138 ; WX 931 ; N uni1FCA ; G 2492
U 8139 ; WX 871 ; N uni1FCB ; G 2493
U 8140 ; WX 752 ; N uni1FCC ; G 2494
U 8141 ; WX 500 ; N uni1FCD ; G 2495
U 8142 ; WX 500 ; N uni1FCE ; G 2496
U 8143 ; WX 500 ; N uni1FCF ; G 2497
U 8144 ; WX 338 ; N uni1FD0 ; G 2498
U 8145 ; WX 338 ; N uni1FD1 ; G 2499
U 8146 ; WX 338 ; N uni1FD2 ; G 2500
U 8147 ; WX 338 ; N uni1FD3 ; G 2501
U 8150 ; WX 338 ; N uni1FD6 ; G 2502
U 8151 ; WX 338 ; N uni1FD7 ; G 2503
U 8152 ; WX 295 ; N uni1FD8 ; G 2504
U 8153 ; WX 295 ; N uni1FD9 ; G 2505
U 8154 ; WX 475 ; N uni1FDA ; G 2506
U 8155 ; WX 408 ; N uni1FDB ; G 2507
U 8157 ; WX 500 ; N uni1FDD ; G 2508
U 8158 ; WX 500 ; N uni1FDE ; G 2509
U 8159 ; WX 500 ; N uni1FDF ; G 2510
U 8160 ; WX 579 ; N uni1FE0 ; G 2511
U 8161 ; WX 579 ; N uni1FE1 ; G 2512
U 8162 ; WX 579 ; N uni1FE2 ; G 2513
U 8163 ; WX 579 ; N uni1FE3 ; G 2514
U 8164 ; WX 635 ; N uni1FE4 ; G 2515
U 8165 ; WX 635 ; N uni1FE5 ; G 2516
U 8166 ; WX 579 ; N uni1FE6 ; G 2517
U 8167 ; WX 579 ; N uni1FE7 ; G 2518
U 8168 ; WX 611 ; N uni1FE8 ; G 2519
U 8169 ; WX 611 ; N uni1FE9 ; G 2520
U 8170 ; WX 845 ; N uni1FEA ; G 2521
U 8171 ; WX 825 ; N uni1FEB ; G 2522
U 8172 ; WX 685 ; N uni1FEC ; G 2523
U 8173 ; WX 500 ; N uni1FED ; G 2524
U 8174 ; WX 500 ; N uni1FEE ; G 2525
U 8175 ; WX 500 ; N uni1FEF ; G 2526
U 8178 ; WX 837 ; N uni1FF2 ; G 2527
U 8179 ; WX 837 ; N uni1FF3 ; G 2528
U 8180 ; WX 837 ; N uni1FF4 ; G 2529
U 8182 ; WX 837 ; N uni1FF6 ; G 2530
U 8183 ; WX 837 ; N uni1FF7 ; G 2531
U 8184 ; WX 941 ; N uni1FF8 ; G 2532
U 8185 ; WX 813 ; N uni1FF9 ; G 2533
U 8186 ; WX 922 ; N uni1FFA ; G 2534
U 8187 ; WX 826 ; N uni1FFB ; G 2535
U 8188 ; WX 764 ; N uni1FFC ; G 2536
U 8189 ; WX 500 ; N uni1FFD ; G 2537
U 8190 ; WX 500 ; N uni1FFE ; G 2538
U 8192 ; WX 500 ; N uni2000 ; G 2539
U 8193 ; WX 1000 ; N uni2001 ; G 2540
U 8194 ; WX 500 ; N uni2002 ; G 2541
U 8195 ; WX 1000 ; N uni2003 ; G 2542
U 8196 ; WX 330 ; N uni2004 ; G 2543
U 8197 ; WX 250 ; N uni2005 ; G 2544
U 8198 ; WX 167 ; N uni2006 ; G 2545
U 8199 ; WX 636 ; N uni2007 ; G 2546
U 8200 ; WX 318 ; N uni2008 ; G 2547
U 8201 ; WX 200 ; N uni2009 ; G 2548
U 8202 ; WX 100 ; N uni200A ; G 2549
U 8203 ; WX 0 ; N uni200B ; G 2550
U 8204 ; WX 0 ; N uni200C ; G 2551
U 8205 ; WX 0 ; N uni200D ; G 2552
U 8206 ; WX 0 ; N uni200E ; G 2553
U 8207 ; WX 0 ; N uni200F ; G 2554
U 8208 ; WX 361 ; N uni2010 ; G 2555
U 8209 ; WX 361 ; N uni2011 ; G 2556
U 8210 ; WX 636 ; N figuredash ; G 2557
U 8211 ; WX 500 ; N endash ; G 2558
U 8212 ; WX 1000 ; N emdash ; G 2559
U 8213 ; WX 1000 ; N uni2015 ; G 2560
U 8214 ; WX 500 ; N uni2016 ; G 2561
U 8215 ; WX 500 ; N underscoredbl ; G 2562
U 8216 ; WX 318 ; N quoteleft ; G 2563
U 8217 ; WX 318 ; N quoteright ; G 2564
U 8218 ; WX 318 ; N quotesinglbase ; G 2565
U 8219 ; WX 318 ; N quotereversed ; G 2566
U 8220 ; WX 518 ; N quotedblleft ; G 2567
U 8221 ; WX 518 ; N quotedblright ; G 2568
U 8222 ; WX 518 ; N quotedblbase ; G 2569
U 8223 ; WX 518 ; N uni201F ; G 2570
U 8224 ; WX 500 ; N dagger ; G 2571
U 8225 ; WX 500 ; N daggerdbl ; G 2572
U 8226 ; WX 590 ; N bullet ; G 2573
U 8227 ; WX 590 ; N uni2023 ; G 2574
U 8228 ; WX 333 ; N onedotenleader ; G 2575
U 8229 ; WX 667 ; N twodotenleader ; G 2576
U 8230 ; WX 1000 ; N ellipsis ; G 2577
U 8231 ; WX 318 ; N uni2027 ; G 2578
U 8232 ; WX 0 ; N uni2028 ; G 2579
U 8233 ; WX 0 ; N uni2029 ; G 2580
U 8234 ; WX 0 ; N uni202A ; G 2581
U 8235 ; WX 0 ; N uni202B ; G 2582
U 8236 ; WX 0 ; N uni202C ; G 2583
U 8237 ; WX 0 ; N uni202D ; G 2584
U 8238 ; WX 0 ; N uni202E ; G 2585
U 8239 ; WX 200 ; N uni202F ; G 2586
U 8240 ; WX 1350 ; N perthousand ; G 2587
U 8241 ; WX 1690 ; N uni2031 ; G 2588
U 8242 ; WX 227 ; N minute ; G 2589
U 8243 ; WX 374 ; N second ; G 2590
U 8244 ; WX 520 ; N uni2034 ; G 2591
U 8245 ; WX 227 ; N uni2035 ; G 2592
U 8246 ; WX 374 ; N uni2036 ; G 2593
U 8247 ; WX 520 ; N uni2037 ; G 2594
U 8248 ; WX 339 ; N uni2038 ; G 2595
U 8249 ; WX 400 ; N guilsinglleft ; G 2596
U 8250 ; WX 400 ; N guilsinglright ; G 2597
U 8251 ; WX 838 ; N uni203B ; G 2598
U 8252 ; WX 485 ; N exclamdbl ; G 2599
U 8253 ; WX 531 ; N uni203D ; G 2600
U 8254 ; WX 500 ; N uni203E ; G 2601
U 8255 ; WX 804 ; N uni203F ; G 2602
U 8256 ; WX 804 ; N uni2040 ; G 2603
U 8257 ; WX 250 ; N uni2041 ; G 2604
U 8258 ; WX 1000 ; N uni2042 ; G 2605
U 8259 ; WX 500 ; N uni2043 ; G 2606
U 8260 ; WX 167 ; N fraction ; G 2607
U 8261 ; WX 390 ; N uni2045 ; G 2608
U 8262 ; WX 390 ; N uni2046 ; G 2609
U 8263 ; WX 922 ; N uni2047 ; G 2610
U 8264 ; WX 733 ; N uni2048 ; G 2611
U 8265 ; WX 733 ; N uni2049 ; G 2612
U 8266 ; WX 497 ; N uni204A ; G 2613
U 8267 ; WX 636 ; N uni204B ; G 2614
U 8268 ; WX 500 ; N uni204C ; G 2615
U 8269 ; WX 500 ; N uni204D ; G 2616
U 8270 ; WX 500 ; N uni204E ; G 2617
U 8271 ; WX 337 ; N uni204F ; G 2618
U 8272 ; WX 804 ; N uni2050 ; G 2619
U 8273 ; WX 500 ; N uni2051 ; G 2620
U 8274 ; WX 450 ; N uni2052 ; G 2621
U 8275 ; WX 1000 ; N uni2053 ; G 2622
U 8276 ; WX 804 ; N uni2054 ; G 2623
U 8277 ; WX 838 ; N uni2055 ; G 2624
U 8278 ; WX 586 ; N uni2056 ; G 2625
U 8279 ; WX 663 ; N uni2057 ; G 2626
U 8280 ; WX 838 ; N uni2058 ; G 2627
U 8281 ; WX 838 ; N uni2059 ; G 2628
U 8282 ; WX 318 ; N uni205A ; G 2629
U 8283 ; WX 797 ; N uni205B ; G 2630
U 8284 ; WX 838 ; N uni205C ; G 2631
U 8285 ; WX 318 ; N uni205D ; G 2632
U 8286 ; WX 318 ; N uni205E ; G 2633
U 8287 ; WX 222 ; N uni205F ; G 2634
U 8288 ; WX 0 ; N uni2060 ; G 2635
U 8289 ; WX 0 ; N uni2061 ; G 2636
U 8290 ; WX 0 ; N uni2062 ; G 2637
U 8291 ; WX 0 ; N uni2063 ; G 2638
U 8292 ; WX 0 ; N uni2064 ; G 2639
U 8298 ; WX 0 ; N uni206A ; G 2640
U 8299 ; WX 0 ; N uni206B ; G 2641
U 8300 ; WX 0 ; N uni206C ; G 2642
U 8301 ; WX 0 ; N uni206D ; G 2643
U 8302 ; WX 0 ; N uni206E ; G 2644
U 8303 ; WX 0 ; N uni206F ; G 2645
U 8304 ; WX 401 ; N uni2070 ; G 2646
U 8305 ; WX 179 ; N uni2071 ; G 2647
U 8308 ; WX 401 ; N uni2074 ; G 2648
U 8309 ; WX 401 ; N uni2075 ; G 2649
U 8310 ; WX 401 ; N uni2076 ; G 2650
U 8311 ; WX 401 ; N uni2077 ; G 2651
U 8312 ; WX 401 ; N uni2078 ; G 2652
U 8313 ; WX 401 ; N uni2079 ; G 2653
U 8314 ; WX 528 ; N uni207A ; G 2654
U 8315 ; WX 528 ; N uni207B ; G 2655
U 8316 ; WX 528 ; N uni207C ; G 2656
U 8317 ; WX 246 ; N uni207D ; G 2657
U 8318 ; WX 246 ; N uni207E ; G 2658
U 8319 ; WX 399 ; N uni207F ; G 2659
U 8320 ; WX 401 ; N uni2080 ; G 2660
U 8321 ; WX 401 ; N uni2081 ; G 2661
U 8322 ; WX 401 ; N uni2082 ; G 2662
U 8323 ; WX 401 ; N uni2083 ; G 2663
U 8324 ; WX 401 ; N uni2084 ; G 2664
U 8325 ; WX 401 ; N uni2085 ; G 2665
U 8326 ; WX 401 ; N uni2086 ; G 2666
U 8327 ; WX 401 ; N uni2087 ; G 2667
U 8328 ; WX 401 ; N uni2088 ; G 2668
U 8329 ; WX 401 ; N uni2089 ; G 2669
U 8330 ; WX 528 ; N uni208A ; G 2670
U 8331 ; WX 528 ; N uni208B ; G 2671
U 8332 ; WX 528 ; N uni208C ; G 2672
U 8333 ; WX 246 ; N uni208D ; G 2673
U 8334 ; WX 246 ; N uni208E ; G 2674
U 8336 ; WX 392 ; N uni2090 ; G 2675
U 8337 ; WX 417 ; N uni2091 ; G 2676
U 8338 ; WX 414 ; N uni2092 ; G 2677
U 8339 ; WX 444 ; N uni2093 ; G 2678
U 8340 ; WX 417 ; N uni2094 ; G 2679
U 8341 ; WX 399 ; N uni2095 ; G 2680
U 8342 ; WX 426 ; N uni2096 ; G 2681
U 8343 ; WX 166 ; N uni2097 ; G 2682
U 8344 ; WX 623 ; N uni2098 ; G 2683
U 8345 ; WX 399 ; N uni2099 ; G 2684
U 8346 ; WX 428 ; N uni209A ; G 2685
U 8347 ; WX 373 ; N uni209B ; G 2686
U 8348 ; WX 295 ; N uni209C ; G 2687
U 8352 ; WX 877 ; N uni20A0 ; G 2688
U 8353 ; WX 636 ; N colonmonetary ; G 2689
U 8354 ; WX 636 ; N uni20A2 ; G 2690
U 8355 ; WX 636 ; N franc ; G 2691
U 8356 ; WX 636 ; N lira ; G 2692
U 8357 ; WX 974 ; N uni20A5 ; G 2693
U 8358 ; WX 636 ; N uni20A6 ; G 2694
U 8359 ; WX 1271 ; N peseta ; G 2695
U 8360 ; WX 1074 ; N uni20A8 ; G 2696
U 8361 ; WX 989 ; N uni20A9 ; G 2697
U 8362 ; WX 838 ; N uni20AA ; G 2698
U 8363 ; WX 636 ; N dong ; G 2699
U 8364 ; WX 636 ; N Euro ; G 2700
U 8365 ; WX 636 ; N uni20AD ; G 2701
U 8366 ; WX 636 ; N uni20AE ; G 2702
U 8367 ; WX 1272 ; N uni20AF ; G 2703
U 8368 ; WX 636 ; N uni20B0 ; G 2704
U 8369 ; WX 636 ; N uni20B1 ; G 2705
U 8370 ; WX 636 ; N uni20B2 ; G 2706
U 8371 ; WX 636 ; N uni20B3 ; G 2707
U 8372 ; WX 774 ; N uni20B4 ; G 2708
U 8373 ; WX 636 ; N uni20B5 ; G 2709
U 8376 ; WX 636 ; N uni20B8 ; G 2710
U 8377 ; WX 636 ; N uni20B9 ; G 2711
U 8378 ; WX 636 ; N uni20BA ; G 2712
U 8381 ; WX 636 ; N uni20BD ; G 2713
U 8400 ; WX 0 ; N uni20D0 ; G 2714
U 8401 ; WX 0 ; N uni20D1 ; G 2715
U 8406 ; WX 0 ; N uni20D6 ; G 2716
U 8407 ; WX 0 ; N uni20D7 ; G 2717
U 8411 ; WX 0 ; N uni20DB ; G 2718
U 8412 ; WX 0 ; N uni20DC ; G 2719
U 8417 ; WX 0 ; N uni20E1 ; G 2720
U 8448 ; WX 970 ; N uni2100 ; G 2721
U 8449 ; WX 970 ; N uni2101 ; G 2722
U 8450 ; WX 698 ; N uni2102 ; G 2723
U 8451 ; WX 1123 ; N uni2103 ; G 2724
U 8452 ; WX 896 ; N uni2104 ; G 2725
U 8453 ; WX 969 ; N uni2105 ; G 2726
U 8454 ; WX 1032 ; N uni2106 ; G 2727
U 8455 ; WX 614 ; N uni2107 ; G 2728
U 8456 ; WX 698 ; N uni2108 ; G 2729
U 8457 ; WX 952 ; N uni2109 ; G 2730
U 8459 ; WX 988 ; N uni210B ; G 2731
U 8460 ; WX 754 ; N uni210C ; G 2732
U 8461 ; WX 850 ; N uni210D ; G 2733
U 8462 ; WX 634 ; N uni210E ; G 2734
U 8463 ; WX 634 ; N uni210F ; G 2735
U 8464 ; WX 470 ; N uni2110 ; G 2736
U 8465 ; WX 697 ; N Ifraktur ; G 2737
U 8466 ; WX 720 ; N uni2112 ; G 2738
U 8467 ; WX 413 ; N uni2113 ; G 2739
U 8468 ; WX 818 ; N uni2114 ; G 2740
U 8469 ; WX 801 ; N uni2115 ; G 2741
U 8470 ; WX 1040 ; N uni2116 ; G 2742
U 8471 ; WX 1000 ; N uni2117 ; G 2743
U 8472 ; WX 697 ; N weierstrass ; G 2744
U 8473 ; WX 701 ; N uni2119 ; G 2745
U 8474 ; WX 787 ; N uni211A ; G 2746
U 8475 ; WX 798 ; N uni211B ; G 2747
U 8476 ; WX 814 ; N Rfraktur ; G 2748
U 8477 ; WX 792 ; N uni211D ; G 2749
U 8478 ; WX 896 ; N prescription ; G 2750
U 8479 ; WX 684 ; N uni211F ; G 2751
U 8480 ; WX 1020 ; N uni2120 ; G 2752
U 8481 ; WX 1014 ; N uni2121 ; G 2753
U 8482 ; WX 1000 ; N trademark ; G 2754
U 8483 ; WX 684 ; N uni2123 ; G 2755
U 8484 ; WX 745 ; N uni2124 ; G 2756
U 8485 ; WX 578 ; N uni2125 ; G 2757
U 8486 ; WX 764 ; N uni2126 ; G 2758
U 8487 ; WX 764 ; N uni2127 ; G 2759
U 8488 ; WX 616 ; N uni2128 ; G 2760
U 8489 ; WX 338 ; N uni2129 ; G 2761
U 8490 ; WX 656 ; N uni212A ; G 2762
U 8491 ; WX 684 ; N uni212B ; G 2763
U 8492 ; WX 786 ; N uni212C ; G 2764
U 8493 ; WX 703 ; N uni212D ; G 2765
U 8494 ; WX 854 ; N estimated ; G 2766
U 8495 ; WX 592 ; N uni212F ; G 2767
U 8496 ; WX 605 ; N uni2130 ; G 2768
U 8497 ; WX 786 ; N uni2131 ; G 2769
U 8498 ; WX 575 ; N uni2132 ; G 2770
U 8499 ; WX 1069 ; N uni2133 ; G 2771
U 8500 ; WX 462 ; N uni2134 ; G 2772
U 8501 ; WX 745 ; N aleph ; G 2773
U 8502 ; WX 674 ; N uni2136 ; G 2774
U 8503 ; WX 466 ; N uni2137 ; G 2775
U 8504 ; WX 645 ; N uni2138 ; G 2776
U 8505 ; WX 380 ; N uni2139 ; G 2777
U 8506 ; WX 926 ; N uni213A ; G 2778
U 8507 ; WX 1157 ; N uni213B ; G 2779
U 8508 ; WX 702 ; N uni213C ; G 2780
U 8509 ; WX 728 ; N uni213D ; G 2781
U 8510 ; WX 654 ; N uni213E ; G 2782
U 8511 ; WX 849 ; N uni213F ; G 2783
U 8512 ; WX 811 ; N uni2140 ; G 2784
U 8513 ; WX 775 ; N uni2141 ; G 2785
U 8514 ; WX 557 ; N uni2142 ; G 2786
U 8515 ; WX 557 ; N uni2143 ; G 2787
U 8516 ; WX 611 ; N uni2144 ; G 2788
U 8517 ; WX 819 ; N uni2145 ; G 2789
U 8518 ; WX 708 ; N uni2146 ; G 2790
U 8519 ; WX 615 ; N uni2147 ; G 2791
U 8520 ; WX 351 ; N uni2148 ; G 2792
U 8521 ; WX 351 ; N uni2149 ; G 2793
U 8523 ; WX 780 ; N uni214B ; G 2794
U 8526 ; WX 526 ; N uni214E ; G 2795
U 8528 ; WX 969 ; N uni2150 ; G 2796
U 8529 ; WX 969 ; N uni2151 ; G 2797
U 8530 ; WX 1370 ; N uni2152 ; G 2798
U 8531 ; WX 969 ; N onethird ; G 2799
U 8532 ; WX 969 ; N twothirds ; G 2800
U 8533 ; WX 969 ; N uni2155 ; G 2801
U 8534 ; WX 969 ; N uni2156 ; G 2802
U 8535 ; WX 969 ; N uni2157 ; G 2803
U 8536 ; WX 969 ; N uni2158 ; G 2804
U 8537 ; WX 969 ; N uni2159 ; G 2805
U 8538 ; WX 969 ; N uni215A ; G 2806
U 8539 ; WX 969 ; N oneeighth ; G 2807
U 8540 ; WX 969 ; N threeeighths ; G 2808
U 8541 ; WX 969 ; N fiveeighths ; G 2809
U 8542 ; WX 969 ; N seveneighths ; G 2810
U 8543 ; WX 568 ; N uni215F ; G 2811
U 8544 ; WX 295 ; N uni2160 ; G 2812
U 8545 ; WX 492 ; N uni2161 ; G 2813
U 8546 ; WX 689 ; N uni2162 ; G 2814
U 8547 ; WX 923 ; N uni2163 ; G 2815
U 8548 ; WX 684 ; N uni2164 ; G 2816
U 8549 ; WX 922 ; N uni2165 ; G 2817
U 8550 ; WX 1120 ; N uni2166 ; G 2818
U 8551 ; WX 1317 ; N uni2167 ; G 2819
U 8552 ; WX 917 ; N uni2168 ; G 2820
U 8553 ; WX 685 ; N uni2169 ; G 2821
U 8554 ; WX 933 ; N uni216A ; G 2822
U 8555 ; WX 1131 ; N uni216B ; G 2823
U 8556 ; WX 557 ; N uni216C ; G 2824
U 8557 ; WX 698 ; N uni216D ; G 2825
U 8558 ; WX 770 ; N uni216E ; G 2826
U 8559 ; WX 863 ; N uni216F ; G 2827
U 8560 ; WX 278 ; N uni2170 ; G 2828
U 8561 ; WX 458 ; N uni2171 ; G 2829
U 8562 ; WX 637 ; N uni2172 ; G 2830
U 8563 ; WX 812 ; N uni2173 ; G 2831
U 8564 ; WX 592 ; N uni2174 ; G 2832
U 8565 ; WX 811 ; N uni2175 ; G 2833
U 8566 ; WX 991 ; N uni2176 ; G 2834
U 8567 ; WX 1170 ; N uni2177 ; G 2835
U 8568 ; WX 819 ; N uni2178 ; G 2836
U 8569 ; WX 592 ; N uni2179 ; G 2837
U 8570 ; WX 822 ; N uni217A ; G 2838
U 8571 ; WX 1002 ; N uni217B ; G 2839
U 8572 ; WX 278 ; N uni217C ; G 2840
U 8573 ; WX 550 ; N uni217D ; G 2841
U 8574 ; WX 635 ; N uni217E ; G 2842
U 8575 ; WX 974 ; N uni217F ; G 2843
U 8576 ; WX 1245 ; N uni2180 ; G 2844
U 8577 ; WX 770 ; N uni2181 ; G 2845
U 8578 ; WX 1245 ; N uni2182 ; G 2846
U 8579 ; WX 703 ; N uni2183 ; G 2847
U 8580 ; WX 549 ; N uni2184 ; G 2848
U 8581 ; WX 698 ; N uni2185 ; G 2849
U 8585 ; WX 969 ; N uni2189 ; G 2850
U 8592 ; WX 838 ; N arrowleft ; G 2851
U 8593 ; WX 838 ; N arrowup ; G 2852
U 8594 ; WX 838 ; N arrowright ; G 2853
U 8595 ; WX 838 ; N arrowdown ; G 2854
U 8596 ; WX 838 ; N arrowboth ; G 2855
U 8597 ; WX 838 ; N arrowupdn ; G 2856
U 8598 ; WX 838 ; N uni2196 ; G 2857
U 8599 ; WX 838 ; N uni2197 ; G 2858
U 8600 ; WX 838 ; N uni2198 ; G 2859
U 8601 ; WX 838 ; N uni2199 ; G 2860
U 8602 ; WX 838 ; N uni219A ; G 2861
U 8603 ; WX 838 ; N uni219B ; G 2862
U 8604 ; WX 838 ; N uni219C ; G 2863
U 8605 ; WX 838 ; N uni219D ; G 2864
U 8606 ; WX 838 ; N uni219E ; G 2865
U 8607 ; WX 838 ; N uni219F ; G 2866
U 8608 ; WX 838 ; N uni21A0 ; G 2867
U 8609 ; WX 838 ; N uni21A1 ; G 2868
U 8610 ; WX 838 ; N uni21A2 ; G 2869
U 8611 ; WX 838 ; N uni21A3 ; G 2870
U 8612 ; WX 838 ; N uni21A4 ; G 2871
U 8613 ; WX 838 ; N uni21A5 ; G 2872
U 8614 ; WX 838 ; N uni21A6 ; G 2873
U 8615 ; WX 838 ; N uni21A7 ; G 2874
U 8616 ; WX 838 ; N arrowupdnbse ; G 2875
U 8617 ; WX 838 ; N uni21A9 ; G 2876
U 8618 ; WX 838 ; N uni21AA ; G 2877
U 8619 ; WX 838 ; N uni21AB ; G 2878
U 8620 ; WX 838 ; N uni21AC ; G 2879
U 8621 ; WX 838 ; N uni21AD ; G 2880
U 8622 ; WX 838 ; N uni21AE ; G 2881
U 8623 ; WX 838 ; N uni21AF ; G 2882
U 8624 ; WX 838 ; N uni21B0 ; G 2883
U 8625 ; WX 838 ; N uni21B1 ; G 2884
U 8626 ; WX 838 ; N uni21B2 ; G 2885
U 8627 ; WX 838 ; N uni21B3 ; G 2886
U 8628 ; WX 838 ; N uni21B4 ; G 2887
U 8629 ; WX 838 ; N carriagereturn ; G 2888
U 8630 ; WX 838 ; N uni21B6 ; G 2889
U 8631 ; WX 838 ; N uni21B7 ; G 2890
U 8632 ; WX 838 ; N uni21B8 ; G 2891
U 8633 ; WX 838 ; N uni21B9 ; G 2892
U 8634 ; WX 838 ; N uni21BA ; G 2893
U 8635 ; WX 838 ; N uni21BB ; G 2894
U 8636 ; WX 838 ; N uni21BC ; G 2895
U 8637 ; WX 838 ; N uni21BD ; G 2896
U 8638 ; WX 838 ; N uni21BE ; G 2897
U 8639 ; WX 838 ; N uni21BF ; G 2898
U 8640 ; WX 838 ; N uni21C0 ; G 2899
U 8641 ; WX 838 ; N uni21C1 ; G 2900
U 8642 ; WX 838 ; N uni21C2 ; G 2901
U 8643 ; WX 838 ; N uni21C3 ; G 2902
U 8644 ; WX 838 ; N uni21C4 ; G 2903
U 8645 ; WX 838 ; N uni21C5 ; G 2904
U 8646 ; WX 838 ; N uni21C6 ; G 2905
U 8647 ; WX 838 ; N uni21C7 ; G 2906
U 8648 ; WX 838 ; N uni21C8 ; G 2907
U 8649 ; WX 838 ; N uni21C9 ; G 2908
U 8650 ; WX 838 ; N uni21CA ; G 2909
U 8651 ; WX 838 ; N uni21CB ; G 2910
U 8652 ; WX 838 ; N uni21CC ; G 2911
U 8653 ; WX 838 ; N uni21CD ; G 2912
U 8654 ; WX 838 ; N uni21CE ; G 2913
U 8655 ; WX 838 ; N uni21CF ; G 2914
U 8656 ; WX 838 ; N arrowdblleft ; G 2915
U 8657 ; WX 838 ; N arrowdblup ; G 2916
U 8658 ; WX 838 ; N arrowdblright ; G 2917
U 8659 ; WX 838 ; N arrowdbldown ; G 2918
U 8660 ; WX 838 ; N arrowdblboth ; G 2919
U 8661 ; WX 838 ; N uni21D5 ; G 2920
U 8662 ; WX 838 ; N uni21D6 ; G 2921
U 8663 ; WX 838 ; N uni21D7 ; G 2922
U 8664 ; WX 838 ; N uni21D8 ; G 2923
U 8665 ; WX 838 ; N uni21D9 ; G 2924
U 8666 ; WX 838 ; N uni21DA ; G 2925
U 8667 ; WX 838 ; N uni21DB ; G 2926
U 8668 ; WX 838 ; N uni21DC ; G 2927
U 8669 ; WX 838 ; N uni21DD ; G 2928
U 8670 ; WX 838 ; N uni21DE ; G 2929
U 8671 ; WX 838 ; N uni21DF ; G 2930
U 8672 ; WX 838 ; N uni21E0 ; G 2931
U 8673 ; WX 838 ; N uni21E1 ; G 2932
U 8674 ; WX 838 ; N uni21E2 ; G 2933
U 8675 ; WX 838 ; N uni21E3 ; G 2934
U 8676 ; WX 838 ; N uni21E4 ; G 2935
U 8677 ; WX 838 ; N uni21E5 ; G 2936
U 8678 ; WX 838 ; N uni21E6 ; G 2937
U 8679 ; WX 838 ; N uni21E7 ; G 2938
U 8680 ; WX 838 ; N uni21E8 ; G 2939
U 8681 ; WX 838 ; N uni21E9 ; G 2940
U 8682 ; WX 838 ; N uni21EA ; G 2941
U 8683 ; WX 838 ; N uni21EB ; G 2942
U 8684 ; WX 838 ; N uni21EC ; G 2943
U 8685 ; WX 838 ; N uni21ED ; G 2944
U 8686 ; WX 838 ; N uni21EE ; G 2945
U 8687 ; WX 838 ; N uni21EF ; G 2946
U 8688 ; WX 838 ; N uni21F0 ; G 2947
U 8689 ; WX 838 ; N uni21F1 ; G 2948
U 8690 ; WX 838 ; N uni21F2 ; G 2949
U 8691 ; WX 838 ; N uni21F3 ; G 2950
U 8692 ; WX 838 ; N uni21F4 ; G 2951
U 8693 ; WX 838 ; N uni21F5 ; G 2952
U 8694 ; WX 838 ; N uni21F6 ; G 2953
U 8695 ; WX 838 ; N uni21F7 ; G 2954
U 8696 ; WX 838 ; N uni21F8 ; G 2955
U 8697 ; WX 838 ; N uni21F9 ; G 2956
U 8698 ; WX 838 ; N uni21FA ; G 2957
U 8699 ; WX 838 ; N uni21FB ; G 2958
U 8700 ; WX 838 ; N uni21FC ; G 2959
U 8701 ; WX 838 ; N uni21FD ; G 2960
U 8702 ; WX 838 ; N uni21FE ; G 2961
U 8703 ; WX 838 ; N uni21FF ; G 2962
U 8704 ; WX 684 ; N universal ; G 2963
U 8705 ; WX 636 ; N uni2201 ; G 2964
U 8706 ; WX 517 ; N partialdiff ; G 2965
U 8707 ; WX 632 ; N existential ; G 2966
U 8708 ; WX 632 ; N uni2204 ; G 2967
U 8709 ; WX 871 ; N emptyset ; G 2968
U 8710 ; WX 669 ; N increment ; G 2969
U 8711 ; WX 669 ; N gradient ; G 2970
U 8712 ; WX 871 ; N element ; G 2971
U 8713 ; WX 871 ; N notelement ; G 2972
U 8714 ; WX 718 ; N uni220A ; G 2973
U 8715 ; WX 871 ; N suchthat ; G 2974
U 8716 ; WX 871 ; N uni220C ; G 2975
U 8717 ; WX 718 ; N uni220D ; G 2976
U 8718 ; WX 636 ; N uni220E ; G 2977
U 8719 ; WX 757 ; N product ; G 2978
U 8720 ; WX 757 ; N uni2210 ; G 2979
U 8721 ; WX 674 ; N summation ; G 2980
U 8722 ; WX 838 ; N minus ; G 2981
U 8723 ; WX 838 ; N uni2213 ; G 2982
U 8724 ; WX 838 ; N uni2214 ; G 2983
U 8725 ; WX 337 ; N uni2215 ; G 2984
U 8726 ; WX 637 ; N uni2216 ; G 2985
U 8727 ; WX 838 ; N asteriskmath ; G 2986
U 8728 ; WX 626 ; N uni2218 ; G 2987
U 8729 ; WX 626 ; N uni2219 ; G 2988
U 8730 ; WX 637 ; N radical ; G 2989
U 8731 ; WX 637 ; N uni221B ; G 2990
U 8732 ; WX 637 ; N uni221C ; G 2991
U 8733 ; WX 714 ; N proportional ; G 2992
U 8734 ; WX 833 ; N infinity ; G 2993
U 8735 ; WX 838 ; N orthogonal ; G 2994
U 8736 ; WX 896 ; N angle ; G 2995
U 8737 ; WX 896 ; N uni2221 ; G 2996
U 8738 ; WX 838 ; N uni2222 ; G 2997
U 8739 ; WX 500 ; N uni2223 ; G 2998
U 8740 ; WX 500 ; N uni2224 ; G 2999
U 8741 ; WX 500 ; N uni2225 ; G 3000
U 8742 ; WX 500 ; N uni2226 ; G 3001
U 8743 ; WX 732 ; N logicaland ; G 3002
U 8744 ; WX 732 ; N logicalor ; G 3003
U 8745 ; WX 732 ; N intersection ; G 3004
U 8746 ; WX 732 ; N union ; G 3005
U 8747 ; WX 521 ; N integral ; G 3006
U 8748 ; WX 789 ; N uni222C ; G 3007
U 8749 ; WX 1057 ; N uni222D ; G 3008
U 8750 ; WX 521 ; N uni222E ; G 3009
U 8751 ; WX 789 ; N uni222F ; G 3010
U 8752 ; WX 1057 ; N uni2230 ; G 3011
U 8753 ; WX 521 ; N uni2231 ; G 3012
U 8754 ; WX 521 ; N uni2232 ; G 3013
U 8755 ; WX 521 ; N uni2233 ; G 3014
U 8756 ; WX 636 ; N therefore ; G 3015
U 8757 ; WX 636 ; N uni2235 ; G 3016
U 8758 ; WX 260 ; N uni2236 ; G 3017
U 8759 ; WX 636 ; N uni2237 ; G 3018
U 8760 ; WX 838 ; N uni2238 ; G 3019
U 8761 ; WX 838 ; N uni2239 ; G 3020
U 8762 ; WX 838 ; N uni223A ; G 3021
U 8763 ; WX 838 ; N uni223B ; G 3022
U 8764 ; WX 838 ; N similar ; G 3023
U 8765 ; WX 838 ; N uni223D ; G 3024
U 8766 ; WX 838 ; N uni223E ; G 3025
U 8767 ; WX 838 ; N uni223F ; G 3026
U 8768 ; WX 375 ; N uni2240 ; G 3027
U 8769 ; WX 838 ; N uni2241 ; G 3028
U 8770 ; WX 838 ; N uni2242 ; G 3029
U 8771 ; WX 838 ; N uni2243 ; G 3030
U 8772 ; WX 838 ; N uni2244 ; G 3031
U 8773 ; WX 838 ; N congruent ; G 3032
U 8774 ; WX 838 ; N uni2246 ; G 3033
U 8775 ; WX 838 ; N uni2247 ; G 3034
U 8776 ; WX 838 ; N approxequal ; G 3035
U 8777 ; WX 838 ; N uni2249 ; G 3036
U 8778 ; WX 838 ; N uni224A ; G 3037
U 8779 ; WX 838 ; N uni224B ; G 3038
U 8780 ; WX 838 ; N uni224C ; G 3039
U 8781 ; WX 838 ; N uni224D ; G 3040
U 8782 ; WX 838 ; N uni224E ; G 3041
U 8783 ; WX 838 ; N uni224F ; G 3042
U 8784 ; WX 838 ; N uni2250 ; G 3043
U 8785 ; WX 838 ; N uni2251 ; G 3044
U 8786 ; WX 838 ; N uni2252 ; G 3045
U 8787 ; WX 838 ; N uni2253 ; G 3046
U 8788 ; WX 1000 ; N uni2254 ; G 3047
U 8789 ; WX 1000 ; N uni2255 ; G 3048
U 8790 ; WX 838 ; N uni2256 ; G 3049
U 8791 ; WX 838 ; N uni2257 ; G 3050
U 8792 ; WX 838 ; N uni2258 ; G 3051
U 8793 ; WX 838 ; N uni2259 ; G 3052
U 8794 ; WX 838 ; N uni225A ; G 3053
U 8795 ; WX 838 ; N uni225B ; G 3054
U 8796 ; WX 838 ; N uni225C ; G 3055
U 8797 ; WX 838 ; N uni225D ; G 3056
U 8798 ; WX 838 ; N uni225E ; G 3057
U 8799 ; WX 838 ; N uni225F ; G 3058
U 8800 ; WX 838 ; N notequal ; G 3059
U 8801 ; WX 838 ; N equivalence ; G 3060
U 8802 ; WX 838 ; N uni2262 ; G 3061
U 8803 ; WX 838 ; N uni2263 ; G 3062
U 8804 ; WX 838 ; N lessequal ; G 3063
U 8805 ; WX 838 ; N greaterequal ; G 3064
U 8806 ; WX 838 ; N uni2266 ; G 3065
U 8807 ; WX 838 ; N uni2267 ; G 3066
U 8808 ; WX 838 ; N uni2268 ; G 3067
U 8809 ; WX 838 ; N uni2269 ; G 3068
U 8810 ; WX 1047 ; N uni226A ; G 3069
U 8811 ; WX 1047 ; N uni226B ; G 3070
U 8812 ; WX 464 ; N uni226C ; G 3071
U 8813 ; WX 838 ; N uni226D ; G 3072
U 8814 ; WX 838 ; N uni226E ; G 3073
U 8815 ; WX 838 ; N uni226F ; G 3074
U 8816 ; WX 838 ; N uni2270 ; G 3075
U 8817 ; WX 838 ; N uni2271 ; G 3076
U 8818 ; WX 838 ; N uni2272 ; G 3077
U 8819 ; WX 838 ; N uni2273 ; G 3078
U 8820 ; WX 838 ; N uni2274 ; G 3079
U 8821 ; WX 838 ; N uni2275 ; G 3080
U 8822 ; WX 838 ; N uni2276 ; G 3081
U 8823 ; WX 838 ; N uni2277 ; G 3082
U 8824 ; WX 838 ; N uni2278 ; G 3083
U 8825 ; WX 838 ; N uni2279 ; G 3084
U 8826 ; WX 838 ; N uni227A ; G 3085
U 8827 ; WX 838 ; N uni227B ; G 3086
U 8828 ; WX 838 ; N uni227C ; G 3087
U 8829 ; WX 838 ; N uni227D ; G 3088
U 8830 ; WX 838 ; N uni227E ; G 3089
U 8831 ; WX 838 ; N uni227F ; G 3090
U 8832 ; WX 838 ; N uni2280 ; G 3091
U 8833 ; WX 838 ; N uni2281 ; G 3092
U 8834 ; WX 838 ; N propersubset ; G 3093
U 8835 ; WX 838 ; N propersuperset ; G 3094
U 8836 ; WX 838 ; N notsubset ; G 3095
U 8837 ; WX 838 ; N uni2285 ; G 3096
U 8838 ; WX 838 ; N reflexsubset ; G 3097
U 8839 ; WX 838 ; N reflexsuperset ; G 3098
U 8840 ; WX 838 ; N uni2288 ; G 3099
U 8841 ; WX 838 ; N uni2289 ; G 3100
U 8842 ; WX 838 ; N uni228A ; G 3101
U 8843 ; WX 838 ; N uni228B ; G 3102
U 8844 ; WX 732 ; N uni228C ; G 3103
U 8845 ; WX 732 ; N uni228D ; G 3104
U 8846 ; WX 732 ; N uni228E ; G 3105
U 8847 ; WX 838 ; N uni228F ; G 3106
U 8848 ; WX 838 ; N uni2290 ; G 3107
U 8849 ; WX 838 ; N uni2291 ; G 3108
U 8850 ; WX 838 ; N uni2292 ; G 3109
U 8851 ; WX 780 ; N uni2293 ; G 3110
U 8852 ; WX 780 ; N uni2294 ; G 3111
U 8853 ; WX 838 ; N circleplus ; G 3112
U 8854 ; WX 838 ; N uni2296 ; G 3113
U 8855 ; WX 838 ; N circlemultiply ; G 3114
U 8856 ; WX 838 ; N uni2298 ; G 3115
U 8857 ; WX 838 ; N uni2299 ; G 3116
U 8858 ; WX 838 ; N uni229A ; G 3117
U 8859 ; WX 838 ; N uni229B ; G 3118
U 8860 ; WX 838 ; N uni229C ; G 3119
U 8861 ; WX 838 ; N uni229D ; G 3120
U 8862 ; WX 838 ; N uni229E ; G 3121
U 8863 ; WX 838 ; N uni229F ; G 3122
U 8864 ; WX 838 ; N uni22A0 ; G 3123
U 8865 ; WX 838 ; N uni22A1 ; G 3124
U 8866 ; WX 871 ; N uni22A2 ; G 3125
U 8867 ; WX 871 ; N uni22A3 ; G 3126
U 8868 ; WX 871 ; N uni22A4 ; G 3127
U 8869 ; WX 871 ; N perpendicular ; G 3128
U 8870 ; WX 521 ; N uni22A6 ; G 3129
U 8871 ; WX 521 ; N uni22A7 ; G 3130
U 8872 ; WX 871 ; N uni22A8 ; G 3131
U 8873 ; WX 871 ; N uni22A9 ; G 3132
U 8874 ; WX 871 ; N uni22AA ; G 3133
U 8875 ; WX 871 ; N uni22AB ; G 3134
U 8876 ; WX 871 ; N uni22AC ; G 3135
U 8877 ; WX 871 ; N uni22AD ; G 3136
U 8878 ; WX 871 ; N uni22AE ; G 3137
U 8879 ; WX 871 ; N uni22AF ; G 3138
U 8880 ; WX 838 ; N uni22B0 ; G 3139
U 8881 ; WX 838 ; N uni22B1 ; G 3140
U 8882 ; WX 838 ; N uni22B2 ; G 3141
U 8883 ; WX 838 ; N uni22B3 ; G 3142
U 8884 ; WX 838 ; N uni22B4 ; G 3143
U 8885 ; WX 838 ; N uni22B5 ; G 3144
U 8886 ; WX 1000 ; N uni22B6 ; G 3145
U 8887 ; WX 1000 ; N uni22B7 ; G 3146
U 8888 ; WX 838 ; N uni22B8 ; G 3147
U 8889 ; WX 838 ; N uni22B9 ; G 3148
U 8890 ; WX 521 ; N uni22BA ; G 3149
U 8891 ; WX 732 ; N uni22BB ; G 3150
U 8892 ; WX 732 ; N uni22BC ; G 3151
U 8893 ; WX 732 ; N uni22BD ; G 3152
U 8894 ; WX 838 ; N uni22BE ; G 3153
U 8895 ; WX 838 ; N uni22BF ; G 3154
U 8896 ; WX 820 ; N uni22C0 ; G 3155
U 8897 ; WX 820 ; N uni22C1 ; G 3156
U 8898 ; WX 820 ; N uni22C2 ; G 3157
U 8899 ; WX 820 ; N uni22C3 ; G 3158
U 8900 ; WX 626 ; N uni22C4 ; G 3159
U 8901 ; WX 318 ; N dotmath ; G 3160
U 8902 ; WX 626 ; N uni22C6 ; G 3161
U 8903 ; WX 838 ; N uni22C7 ; G 3162
U 8904 ; WX 1000 ; N uni22C8 ; G 3163
U 8905 ; WX 1000 ; N uni22C9 ; G 3164
U 8906 ; WX 1000 ; N uni22CA ; G 3165
U 8907 ; WX 1000 ; N uni22CB ; G 3166
U 8908 ; WX 1000 ; N uni22CC ; G 3167
U 8909 ; WX 838 ; N uni22CD ; G 3168
U 8910 ; WX 732 ; N uni22CE ; G 3169
U 8911 ; WX 732 ; N uni22CF ; G 3170
U 8912 ; WX 838 ; N uni22D0 ; G 3171
U 8913 ; WX 838 ; N uni22D1 ; G 3172
U 8914 ; WX 838 ; N uni22D2 ; G 3173
U 8915 ; WX 838 ; N uni22D3 ; G 3174
U 8916 ; WX 838 ; N uni22D4 ; G 3175
U 8917 ; WX 838 ; N uni22D5 ; G 3176
U 8918 ; WX 838 ; N uni22D6 ; G 3177
U 8919 ; WX 838 ; N uni22D7 ; G 3178
U 8920 ; WX 1422 ; N uni22D8 ; G 3179
U 8921 ; WX 1422 ; N uni22D9 ; G 3180
U 8922 ; WX 838 ; N uni22DA ; G 3181
U 8923 ; WX 838 ; N uni22DB ; G 3182
U 8924 ; WX 838 ; N uni22DC ; G 3183
U 8925 ; WX 838 ; N uni22DD ; G 3184
U 8926 ; WX 838 ; N uni22DE ; G 3185
U 8927 ; WX 838 ; N uni22DF ; G 3186
U 8928 ; WX 838 ; N uni22E0 ; G 3187
U 8929 ; WX 838 ; N uni22E1 ; G 3188
U 8930 ; WX 838 ; N uni22E2 ; G 3189
U 8931 ; WX 838 ; N uni22E3 ; G 3190
U 8932 ; WX 838 ; N uni22E4 ; G 3191
U 8933 ; WX 838 ; N uni22E5 ; G 3192
U 8934 ; WX 838 ; N uni22E6 ; G 3193
U 8935 ; WX 838 ; N uni22E7 ; G 3194
U 8936 ; WX 838 ; N uni22E8 ; G 3195
U 8937 ; WX 838 ; N uni22E9 ; G 3196
U 8938 ; WX 838 ; N uni22EA ; G 3197
U 8939 ; WX 838 ; N uni22EB ; G 3198
U 8940 ; WX 838 ; N uni22EC ; G 3199
U 8941 ; WX 838 ; N uni22ED ; G 3200
U 8942 ; WX 1000 ; N uni22EE ; G 3201
U 8943 ; WX 1000 ; N uni22EF ; G 3202
U 8944 ; WX 1000 ; N uni22F0 ; G 3203
U 8945 ; WX 1000 ; N uni22F1 ; G 3204
U 8946 ; WX 1000 ; N uni22F2 ; G 3205
U 8947 ; WX 871 ; N uni22F3 ; G 3206
U 8948 ; WX 718 ; N uni22F4 ; G 3207
U 8949 ; WX 871 ; N uni22F5 ; G 3208
U 8950 ; WX 871 ; N uni22F6 ; G 3209
U 8951 ; WX 718 ; N uni22F7 ; G 3210
U 8952 ; WX 871 ; N uni22F8 ; G 3211
U 8953 ; WX 871 ; N uni22F9 ; G 3212
U 8954 ; WX 1000 ; N uni22FA ; G 3213
U 8955 ; WX 871 ; N uni22FB ; G 3214
U 8956 ; WX 718 ; N uni22FC ; G 3215
U 8957 ; WX 871 ; N uni22FD ; G 3216
U 8958 ; WX 718 ; N uni22FE ; G 3217
U 8959 ; WX 871 ; N uni22FF ; G 3218
U 8960 ; WX 602 ; N uni2300 ; G 3219
U 8961 ; WX 602 ; N uni2301 ; G 3220
U 8962 ; WX 635 ; N house ; G 3221
U 8963 ; WX 838 ; N uni2303 ; G 3222
U 8964 ; WX 838 ; N uni2304 ; G 3223
U 8965 ; WX 838 ; N uni2305 ; G 3224
U 8966 ; WX 838 ; N uni2306 ; G 3225
U 8967 ; WX 488 ; N uni2307 ; G 3226
U 8968 ; WX 390 ; N uni2308 ; G 3227
U 8969 ; WX 390 ; N uni2309 ; G 3228
U 8970 ; WX 390 ; N uni230A ; G 3229
U 8971 ; WX 390 ; N uni230B ; G 3230
U 8972 ; WX 809 ; N uni230C ; G 3231
U 8973 ; WX 809 ; N uni230D ; G 3232
U 8974 ; WX 809 ; N uni230E ; G 3233
U 8975 ; WX 809 ; N uni230F ; G 3234
U 8976 ; WX 838 ; N revlogicalnot ; G 3235
U 8977 ; WX 513 ; N uni2311 ; G 3236
U 8984 ; WX 1000 ; N uni2318 ; G 3237
U 8985 ; WX 838 ; N uni2319 ; G 3238
U 8988 ; WX 469 ; N uni231C ; G 3239
U 8989 ; WX 469 ; N uni231D ; G 3240
U 8990 ; WX 469 ; N uni231E ; G 3241
U 8991 ; WX 469 ; N uni231F ; G 3242
U 8992 ; WX 521 ; N integraltp ; G 3243
U 8993 ; WX 521 ; N integralbt ; G 3244
U 8996 ; WX 1152 ; N uni2324 ; G 3245
U 8997 ; WX 1152 ; N uni2325 ; G 3246
U 8998 ; WX 1414 ; N uni2326 ; G 3247
U 8999 ; WX 1152 ; N uni2327 ; G 3248
U 9000 ; WX 1443 ; N uni2328 ; G 3249
U 9003 ; WX 1414 ; N uni232B ; G 3250
U 9004 ; WX 873 ; N uni232C ; G 3251
U 9075 ; WX 338 ; N uni2373 ; G 3252
U 9076 ; WX 635 ; N uni2374 ; G 3253
U 9077 ; WX 837 ; N uni2375 ; G 3254
U 9082 ; WX 659 ; N uni237A ; G 3255
U 9085 ; WX 757 ; N uni237D ; G 3256
U 9095 ; WX 1152 ; N uni2387 ; G 3257
U 9108 ; WX 873 ; N uni2394 ; G 3258
U 9115 ; WX 500 ; N uni239B ; G 3259
U 9116 ; WX 500 ; N uni239C ; G 3260
U 9117 ; WX 500 ; N uni239D ; G 3261
U 9118 ; WX 500 ; N uni239E ; G 3262
U 9119 ; WX 500 ; N uni239F ; G 3263
U 9120 ; WX 500 ; N uni23A0 ; G 3264
U 9121 ; WX 500 ; N uni23A1 ; G 3265
U 9122 ; WX 500 ; N uni23A2 ; G 3266
U 9123 ; WX 500 ; N uni23A3 ; G 3267
U 9124 ; WX 500 ; N uni23A4 ; G 3268
U 9125 ; WX 500 ; N uni23A5 ; G 3269
U 9126 ; WX 500 ; N uni23A6 ; G 3270
U 9127 ; WX 750 ; N uni23A7 ; G 3271
U 9128 ; WX 750 ; N uni23A8 ; G 3272
U 9129 ; WX 750 ; N uni23A9 ; G 3273
U 9130 ; WX 750 ; N uni23AA ; G 3274
U 9131 ; WX 750 ; N uni23AB ; G 3275
U 9132 ; WX 750 ; N uni23AC ; G 3276
U 9133 ; WX 750 ; N uni23AD ; G 3277
U 9134 ; WX 521 ; N uni23AE ; G 3278
U 9166 ; WX 838 ; N uni23CE ; G 3279
U 9167 ; WX 945 ; N uni23CF ; G 3280
U 9187 ; WX 873 ; N uni23E3 ; G 3281
U 9189 ; WX 769 ; N uni23E5 ; G 3282
U 9192 ; WX 636 ; N uni23E8 ; G 3283
U 9250 ; WX 635 ; N uni2422 ; G 3284
U 9251 ; WX 635 ; N uni2423 ; G 3285
U 9312 ; WX 896 ; N uni2460 ; G 3286
U 9313 ; WX 896 ; N uni2461 ; G 3287
U 9314 ; WX 896 ; N uni2462 ; G 3288
U 9315 ; WX 896 ; N uni2463 ; G 3289
U 9316 ; WX 896 ; N uni2464 ; G 3290
U 9317 ; WX 896 ; N uni2465 ; G 3291
U 9318 ; WX 896 ; N uni2466 ; G 3292
U 9319 ; WX 896 ; N uni2467 ; G 3293
U 9320 ; WX 896 ; N uni2468 ; G 3294
U 9321 ; WX 896 ; N uni2469 ; G 3295
U 9472 ; WX 602 ; N SF100000 ; G 3296
U 9473 ; WX 602 ; N uni2501 ; G 3297
U 9474 ; WX 602 ; N SF110000 ; G 3298
U 9475 ; WX 602 ; N uni2503 ; G 3299
U 9476 ; WX 602 ; N uni2504 ; G 3300
U 9477 ; WX 602 ; N uni2505 ; G 3301
U 9478 ; WX 602 ; N uni2506 ; G 3302
U 9479 ; WX 602 ; N uni2507 ; G 3303
U 9480 ; WX 602 ; N uni2508 ; G 3304
U 9481 ; WX 602 ; N uni2509 ; G 3305
U 9482 ; WX 602 ; N uni250A ; G 3306
U 9483 ; WX 602 ; N uni250B ; G 3307
U 9484 ; WX 602 ; N SF010000 ; G 3308
U 9485 ; WX 602 ; N uni250D ; G 3309
U 9486 ; WX 602 ; N uni250E ; G 3310
U 9487 ; WX 602 ; N uni250F ; G 3311
U 9488 ; WX 602 ; N SF030000 ; G 3312
U 9489 ; WX 602 ; N uni2511 ; G 3313
U 9490 ; WX 602 ; N uni2512 ; G 3314
U 9491 ; WX 602 ; N uni2513 ; G 3315
U 9492 ; WX 602 ; N SF020000 ; G 3316
U 9493 ; WX 602 ; N uni2515 ; G 3317
U 9494 ; WX 602 ; N uni2516 ; G 3318
U 9495 ; WX 602 ; N uni2517 ; G 3319
U 9496 ; WX 602 ; N SF040000 ; G 3320
U 9497 ; WX 602 ; N uni2519 ; G 3321
U 9498 ; WX 602 ; N uni251A ; G 3322
U 9499 ; WX 602 ; N uni251B ; G 3323
U 9500 ; WX 602 ; N SF080000 ; G 3324
U 9501 ; WX 602 ; N uni251D ; G 3325
U 9502 ; WX 602 ; N uni251E ; G 3326
U 9503 ; WX 602 ; N uni251F ; G 3327
U 9504 ; WX 602 ; N uni2520 ; G 3328
U 9505 ; WX 602 ; N uni2521 ; G 3329
U 9506 ; WX 602 ; N uni2522 ; G 3330
U 9507 ; WX 602 ; N uni2523 ; G 3331
U 9508 ; WX 602 ; N SF090000 ; G 3332
U 9509 ; WX 602 ; N uni2525 ; G 3333
U 9510 ; WX 602 ; N uni2526 ; G 3334
U 9511 ; WX 602 ; N uni2527 ; G 3335
U 9512 ; WX 602 ; N uni2528 ; G 3336
U 9513 ; WX 602 ; N uni2529 ; G 3337
U 9514 ; WX 602 ; N uni252A ; G 3338
U 9515 ; WX 602 ; N uni252B ; G 3339
U 9516 ; WX 602 ; N SF060000 ; G 3340
U 9517 ; WX 602 ; N uni252D ; G 3341
U 9518 ; WX 602 ; N uni252E ; G 3342
U 9519 ; WX 602 ; N uni252F ; G 3343
U 9520 ; WX 602 ; N uni2530 ; G 3344
U 9521 ; WX 602 ; N uni2531 ; G 3345
U 9522 ; WX 602 ; N uni2532 ; G 3346
U 9523 ; WX 602 ; N uni2533 ; G 3347
U 9524 ; WX 602 ; N SF070000 ; G 3348
U 9525 ; WX 602 ; N uni2535 ; G 3349
U 9526 ; WX 602 ; N uni2536 ; G 3350
U 9527 ; WX 602 ; N uni2537 ; G 3351
U 9528 ; WX 602 ; N uni2538 ; G 3352
U 9529 ; WX 602 ; N uni2539 ; G 3353
U 9530 ; WX 602 ; N uni253A ; G 3354
U 9531 ; WX 602 ; N uni253B ; G 3355
U 9532 ; WX 602 ; N SF050000 ; G 3356
U 9533 ; WX 602 ; N uni253D ; G 3357
U 9534 ; WX 602 ; N uni253E ; G 3358
U 9535 ; WX 602 ; N uni253F ; G 3359
U 9536 ; WX 602 ; N uni2540 ; G 3360
U 9537 ; WX 602 ; N uni2541 ; G 3361
U 9538 ; WX 602 ; N uni2542 ; G 3362
U 9539 ; WX 602 ; N uni2543 ; G 3363
U 9540 ; WX 602 ; N uni2544 ; G 3364
U 9541 ; WX 602 ; N uni2545 ; G 3365
U 9542 ; WX 602 ; N uni2546 ; G 3366
U 9543 ; WX 602 ; N uni2547 ; G 3367
U 9544 ; WX 602 ; N uni2548 ; G 3368
U 9545 ; WX 602 ; N uni2549 ; G 3369
U 9546 ; WX 602 ; N uni254A ; G 3370
U 9547 ; WX 602 ; N uni254B ; G 3371
U 9548 ; WX 602 ; N uni254C ; G 3372
U 9549 ; WX 602 ; N uni254D ; G 3373
U 9550 ; WX 602 ; N uni254E ; G 3374
U 9551 ; WX 602 ; N uni254F ; G 3375
U 9552 ; WX 602 ; N SF430000 ; G 3376
U 9553 ; WX 602 ; N SF240000 ; G 3377
U 9554 ; WX 602 ; N SF510000 ; G 3378
U 9555 ; WX 602 ; N SF520000 ; G 3379
U 9556 ; WX 602 ; N SF390000 ; G 3380
U 9557 ; WX 602 ; N SF220000 ; G 3381
U 9558 ; WX 602 ; N SF210000 ; G 3382
U 9559 ; WX 602 ; N SF250000 ; G 3383
U 9560 ; WX 602 ; N SF500000 ; G 3384
U 9561 ; WX 602 ; N SF490000 ; G 3385
U 9562 ; WX 602 ; N SF380000 ; G 3386
U 9563 ; WX 602 ; N SF280000 ; G 3387
U 9564 ; WX 602 ; N SF270000 ; G 3388
U 9565 ; WX 602 ; N SF260000 ; G 3389
U 9566 ; WX 602 ; N SF360000 ; G 3390
U 9567 ; WX 602 ; N SF370000 ; G 3391
U 9568 ; WX 602 ; N SF420000 ; G 3392
U 9569 ; WX 602 ; N SF190000 ; G 3393
U 9570 ; WX 602 ; N SF200000 ; G 3394
U 9571 ; WX 602 ; N SF230000 ; G 3395
U 9572 ; WX 602 ; N SF470000 ; G 3396
U 9573 ; WX 602 ; N SF480000 ; G 3397
U 9574 ; WX 602 ; N SF410000 ; G 3398
U 9575 ; WX 602 ; N SF450000 ; G 3399
U 9576 ; WX 602 ; N SF460000 ; G 3400
U 9577 ; WX 602 ; N SF400000 ; G 3401
U 9578 ; WX 602 ; N SF540000 ; G 3402
U 9579 ; WX 602 ; N SF530000 ; G 3403
U 9580 ; WX 602 ; N SF440000 ; G 3404
U 9581 ; WX 602 ; N uni256D ; G 3405
U 9582 ; WX 602 ; N uni256E ; G 3406
U 9583 ; WX 602 ; N uni256F ; G 3407
U 9584 ; WX 602 ; N uni2570 ; G 3408
U 9585 ; WX 602 ; N uni2571 ; G 3409
U 9586 ; WX 602 ; N uni2572 ; G 3410
U 9587 ; WX 602 ; N uni2573 ; G 3411
U 9588 ; WX 602 ; N uni2574 ; G 3412
U 9589 ; WX 602 ; N uni2575 ; G 3413
U 9590 ; WX 602 ; N uni2576 ; G 3414
U 9591 ; WX 602 ; N uni2577 ; G 3415
U 9592 ; WX 602 ; N uni2578 ; G 3416
U 9593 ; WX 602 ; N uni2579 ; G 3417
U 9594 ; WX 602 ; N uni257A ; G 3418
U 9595 ; WX 602 ; N uni257B ; G 3419
U 9596 ; WX 602 ; N uni257C ; G 3420
U 9597 ; WX 602 ; N uni257D ; G 3421
U 9598 ; WX 602 ; N uni257E ; G 3422
U 9599 ; WX 602 ; N uni257F ; G 3423
U 9600 ; WX 769 ; N upblock ; G 3424
U 9601 ; WX 769 ; N uni2581 ; G 3425
U 9602 ; WX 769 ; N uni2582 ; G 3426
U 9603 ; WX 769 ; N uni2583 ; G 3427
U 9604 ; WX 769 ; N dnblock ; G 3428
U 9605 ; WX 769 ; N uni2585 ; G 3429
U 9606 ; WX 769 ; N uni2586 ; G 3430
U 9607 ; WX 769 ; N uni2587 ; G 3431
U 9608 ; WX 769 ; N block ; G 3432
U 9609 ; WX 769 ; N uni2589 ; G 3433
U 9610 ; WX 769 ; N uni258A ; G 3434
U 9611 ; WX 769 ; N uni258B ; G 3435
U 9612 ; WX 769 ; N lfblock ; G 3436
U 9613 ; WX 769 ; N uni258D ; G 3437
U 9614 ; WX 769 ; N uni258E ; G 3438
U 9615 ; WX 769 ; N uni258F ; G 3439
U 9616 ; WX 769 ; N rtblock ; G 3440
U 9617 ; WX 769 ; N ltshade ; G 3441
U 9618 ; WX 769 ; N shade ; G 3442
U 9619 ; WX 769 ; N dkshade ; G 3443
U 9620 ; WX 769 ; N uni2594 ; G 3444
U 9621 ; WX 769 ; N uni2595 ; G 3445
U 9622 ; WX 769 ; N uni2596 ; G 3446
U 9623 ; WX 769 ; N uni2597 ; G 3447
U 9624 ; WX 769 ; N uni2598 ; G 3448
U 9625 ; WX 769 ; N uni2599 ; G 3449
U 9626 ; WX 769 ; N uni259A ; G 3450
U 9627 ; WX 769 ; N uni259B ; G 3451
U 9628 ; WX 769 ; N uni259C ; G 3452
U 9629 ; WX 769 ; N uni259D ; G 3453
U 9630 ; WX 769 ; N uni259E ; G 3454
U 9631 ; WX 769 ; N uni259F ; G 3455
U 9632 ; WX 945 ; N filledbox ; G 3456
U 9633 ; WX 945 ; N H22073 ; G 3457
U 9634 ; WX 945 ; N uni25A2 ; G 3458
U 9635 ; WX 945 ; N uni25A3 ; G 3459
U 9636 ; WX 945 ; N uni25A4 ; G 3460
U 9637 ; WX 945 ; N uni25A5 ; G 3461
U 9638 ; WX 945 ; N uni25A6 ; G 3462
U 9639 ; WX 945 ; N uni25A7 ; G 3463
U 9640 ; WX 945 ; N uni25A8 ; G 3464
U 9641 ; WX 945 ; N uni25A9 ; G 3465
U 9642 ; WX 678 ; N H18543 ; G 3466
U 9643 ; WX 678 ; N H18551 ; G 3467
U 9644 ; WX 945 ; N filledrect ; G 3468
U 9645 ; WX 945 ; N uni25AD ; G 3469
U 9646 ; WX 550 ; N uni25AE ; G 3470
U 9647 ; WX 550 ; N uni25AF ; G 3471
U 9648 ; WX 769 ; N uni25B0 ; G 3472
U 9649 ; WX 769 ; N uni25B1 ; G 3473
U 9650 ; WX 769 ; N triagup ; G 3474
U 9651 ; WX 769 ; N uni25B3 ; G 3475
U 9652 ; WX 502 ; N uni25B4 ; G 3476
U 9653 ; WX 502 ; N uni25B5 ; G 3477
U 9654 ; WX 769 ; N uni25B6 ; G 3478
U 9655 ; WX 769 ; N uni25B7 ; G 3479
U 9656 ; WX 502 ; N uni25B8 ; G 3480
U 9657 ; WX 502 ; N uni25B9 ; G 3481
U 9658 ; WX 769 ; N triagrt ; G 3482
U 9659 ; WX 769 ; N uni25BB ; G 3483
U 9660 ; WX 769 ; N triagdn ; G 3484
U 9661 ; WX 769 ; N uni25BD ; G 3485
U 9662 ; WX 502 ; N uni25BE ; G 3486
U 9663 ; WX 502 ; N uni25BF ; G 3487
U 9664 ; WX 769 ; N uni25C0 ; G 3488
U 9665 ; WX 769 ; N uni25C1 ; G 3489
U 9666 ; WX 502 ; N uni25C2 ; G 3490
U 9667 ; WX 502 ; N uni25C3 ; G 3491
U 9668 ; WX 769 ; N triaglf ; G 3492
U 9669 ; WX 769 ; N uni25C5 ; G 3493
U 9670 ; WX 769 ; N uni25C6 ; G 3494
U 9671 ; WX 769 ; N uni25C7 ; G 3495
U 9672 ; WX 769 ; N uni25C8 ; G 3496
U 9673 ; WX 873 ; N uni25C9 ; G 3497
U 9674 ; WX 494 ; N lozenge ; G 3498
U 9675 ; WX 873 ; N circle ; G 3499
U 9676 ; WX 873 ; N uni25CC ; G 3500
U 9677 ; WX 873 ; N uni25CD ; G 3501
U 9678 ; WX 873 ; N uni25CE ; G 3502
U 9679 ; WX 873 ; N H18533 ; G 3503
U 9680 ; WX 873 ; N uni25D0 ; G 3504
U 9681 ; WX 873 ; N uni25D1 ; G 3505
U 9682 ; WX 873 ; N uni25D2 ; G 3506
U 9683 ; WX 873 ; N uni25D3 ; G 3507
U 9684 ; WX 873 ; N uni25D4 ; G 3508
U 9685 ; WX 873 ; N uni25D5 ; G 3509
U 9686 ; WX 527 ; N uni25D6 ; G 3510
U 9687 ; WX 527 ; N uni25D7 ; G 3511
U 9688 ; WX 791 ; N invbullet ; G 3512
U 9689 ; WX 970 ; N invcircle ; G 3513
U 9690 ; WX 970 ; N uni25DA ; G 3514
U 9691 ; WX 970 ; N uni25DB ; G 3515
U 9692 ; WX 387 ; N uni25DC ; G 3516
U 9693 ; WX 387 ; N uni25DD ; G 3517
U 9694 ; WX 387 ; N uni25DE ; G 3518
U 9695 ; WX 387 ; N uni25DF ; G 3519
U 9696 ; WX 769 ; N uni25E0 ; G 3520
U 9697 ; WX 769 ; N uni25E1 ; G 3521
U 9698 ; WX 769 ; N uni25E2 ; G 3522
U 9699 ; WX 769 ; N uni25E3 ; G 3523
U 9700 ; WX 769 ; N uni25E4 ; G 3524
U 9701 ; WX 769 ; N uni25E5 ; G 3525
U 9702 ; WX 590 ; N openbullet ; G 3526
U 9703 ; WX 945 ; N uni25E7 ; G 3527
U 9704 ; WX 945 ; N uni25E8 ; G 3528
U 9705 ; WX 945 ; N uni25E9 ; G 3529
U 9706 ; WX 945 ; N uni25EA ; G 3530
U 9707 ; WX 945 ; N uni25EB ; G 3531
U 9708 ; WX 769 ; N uni25EC ; G 3532
U 9709 ; WX 769 ; N uni25ED ; G 3533
U 9710 ; WX 769 ; N uni25EE ; G 3534
U 9711 ; WX 1119 ; N uni25EF ; G 3535
U 9712 ; WX 945 ; N uni25F0 ; G 3536
U 9713 ; WX 945 ; N uni25F1 ; G 3537
U 9714 ; WX 945 ; N uni25F2 ; G 3538
U 9715 ; WX 945 ; N uni25F3 ; G 3539
U 9716 ; WX 873 ; N uni25F4 ; G 3540
U 9717 ; WX 873 ; N uni25F5 ; G 3541
U 9718 ; WX 873 ; N uni25F6 ; G 3542
U 9719 ; WX 873 ; N uni25F7 ; G 3543
U 9720 ; WX 769 ; N uni25F8 ; G 3544
U 9721 ; WX 769 ; N uni25F9 ; G 3545
U 9722 ; WX 769 ; N uni25FA ; G 3546
U 9723 ; WX 830 ; N uni25FB ; G 3547
U 9724 ; WX 830 ; N uni25FC ; G 3548
U 9725 ; WX 732 ; N uni25FD ; G 3549
U 9726 ; WX 732 ; N uni25FE ; G 3550
U 9727 ; WX 769 ; N uni25FF ; G 3551
U 9728 ; WX 896 ; N uni2600 ; G 3552
U 9729 ; WX 1000 ; N uni2601 ; G 3553
U 9730 ; WX 896 ; N uni2602 ; G 3554
U 9731 ; WX 896 ; N uni2603 ; G 3555
U 9732 ; WX 896 ; N uni2604 ; G 3556
U 9733 ; WX 896 ; N uni2605 ; G 3557
U 9734 ; WX 896 ; N uni2606 ; G 3558
U 9735 ; WX 573 ; N uni2607 ; G 3559
U 9736 ; WX 896 ; N uni2608 ; G 3560
U 9737 ; WX 896 ; N uni2609 ; G 3561
U 9738 ; WX 888 ; N uni260A ; G 3562
U 9739 ; WX 888 ; N uni260B ; G 3563
U 9740 ; WX 671 ; N uni260C ; G 3564
U 9741 ; WX 1013 ; N uni260D ; G 3565
U 9742 ; WX 1246 ; N uni260E ; G 3566
U 9743 ; WX 1250 ; N uni260F ; G 3567
U 9744 ; WX 896 ; N uni2610 ; G 3568
U 9745 ; WX 896 ; N uni2611 ; G 3569
U 9746 ; WX 896 ; N uni2612 ; G 3570
U 9747 ; WX 532 ; N uni2613 ; G 3571
U 9748 ; WX 896 ; N uni2614 ; G 3572
U 9749 ; WX 896 ; N uni2615 ; G 3573
U 9750 ; WX 896 ; N uni2616 ; G 3574
U 9751 ; WX 896 ; N uni2617 ; G 3575
U 9752 ; WX 896 ; N uni2618 ; G 3576
U 9753 ; WX 896 ; N uni2619 ; G 3577
U 9754 ; WX 896 ; N uni261A ; G 3578
U 9755 ; WX 896 ; N uni261B ; G 3579
U 9756 ; WX 896 ; N uni261C ; G 3580
U 9757 ; WX 609 ; N uni261D ; G 3581
U 9758 ; WX 896 ; N uni261E ; G 3582
U 9759 ; WX 609 ; N uni261F ; G 3583
U 9760 ; WX 896 ; N uni2620 ; G 3584
U 9761 ; WX 896 ; N uni2621 ; G 3585
U 9762 ; WX 896 ; N uni2622 ; G 3586
U 9763 ; WX 896 ; N uni2623 ; G 3587
U 9764 ; WX 669 ; N uni2624 ; G 3588
U 9765 ; WX 746 ; N uni2625 ; G 3589
U 9766 ; WX 649 ; N uni2626 ; G 3590
U 9767 ; WX 784 ; N uni2627 ; G 3591
U 9768 ; WX 545 ; N uni2628 ; G 3592
U 9769 ; WX 896 ; N uni2629 ; G 3593
U 9770 ; WX 896 ; N uni262A ; G 3594
U 9771 ; WX 896 ; N uni262B ; G 3595
U 9772 ; WX 710 ; N uni262C ; G 3596
U 9773 ; WX 896 ; N uni262D ; G 3597
U 9774 ; WX 896 ; N uni262E ; G 3598
U 9775 ; WX 896 ; N uni262F ; G 3599
U 9776 ; WX 890 ; N uni2630 ; G 3600
U 9777 ; WX 890 ; N uni2631 ; G 3601
U 9778 ; WX 890 ; N uni2632 ; G 3602
U 9779 ; WX 890 ; N uni2633 ; G 3603
U 9780 ; WX 890 ; N uni2634 ; G 3604
U 9781 ; WX 890 ; N uni2635 ; G 3605
U 9782 ; WX 890 ; N uni2636 ; G 3606
U 9783 ; WX 890 ; N uni2637 ; G 3607
U 9784 ; WX 896 ; N uni2638 ; G 3608
U 9785 ; WX 1042 ; N uni2639 ; G 3609
U 9786 ; WX 1042 ; N smileface ; G 3610
U 9787 ; WX 1042 ; N invsmileface ; G 3611
U 9788 ; WX 896 ; N sun ; G 3612
U 9789 ; WX 896 ; N uni263D ; G 3613
U 9790 ; WX 896 ; N uni263E ; G 3614
U 9791 ; WX 614 ; N uni263F ; G 3615
U 9792 ; WX 732 ; N female ; G 3616
U 9793 ; WX 732 ; N uni2641 ; G 3617
U 9794 ; WX 896 ; N male ; G 3618
U 9795 ; WX 896 ; N uni2643 ; G 3619
U 9796 ; WX 896 ; N uni2644 ; G 3620
U 9797 ; WX 896 ; N uni2645 ; G 3621
U 9798 ; WX 896 ; N uni2646 ; G 3622
U 9799 ; WX 896 ; N uni2647 ; G 3623
U 9800 ; WX 896 ; N uni2648 ; G 3624
U 9801 ; WX 896 ; N uni2649 ; G 3625
U 9802 ; WX 896 ; N uni264A ; G 3626
U 9803 ; WX 896 ; N uni264B ; G 3627
U 9804 ; WX 896 ; N uni264C ; G 3628
U 9805 ; WX 896 ; N uni264D ; G 3629
U 9806 ; WX 896 ; N uni264E ; G 3630
U 9807 ; WX 896 ; N uni264F ; G 3631
U 9808 ; WX 896 ; N uni2650 ; G 3632
U 9809 ; WX 896 ; N uni2651 ; G 3633
U 9810 ; WX 896 ; N uni2652 ; G 3634
U 9811 ; WX 896 ; N uni2653 ; G 3635
U 9812 ; WX 896 ; N uni2654 ; G 3636
U 9813 ; WX 896 ; N uni2655 ; G 3637
U 9814 ; WX 896 ; N uni2656 ; G 3638
U 9815 ; WX 896 ; N uni2657 ; G 3639
U 9816 ; WX 896 ; N uni2658 ; G 3640
U 9817 ; WX 896 ; N uni2659 ; G 3641
U 9818 ; WX 896 ; N uni265A ; G 3642
U 9819 ; WX 896 ; N uni265B ; G 3643
U 9820 ; WX 896 ; N uni265C ; G 3644
U 9821 ; WX 896 ; N uni265D ; G 3645
U 9822 ; WX 896 ; N uni265E ; G 3646
U 9823 ; WX 896 ; N uni265F ; G 3647
U 9824 ; WX 896 ; N spade ; G 3648
U 9825 ; WX 896 ; N uni2661 ; G 3649
U 9826 ; WX 896 ; N uni2662 ; G 3650
U 9827 ; WX 896 ; N club ; G 3651
U 9828 ; WX 896 ; N uni2664 ; G 3652
U 9829 ; WX 896 ; N heart ; G 3653
U 9830 ; WX 896 ; N diamond ; G 3654
U 9831 ; WX 896 ; N uni2667 ; G 3655
U 9832 ; WX 896 ; N uni2668 ; G 3656
U 9833 ; WX 472 ; N uni2669 ; G 3657
U 9834 ; WX 638 ; N musicalnote ; G 3658
U 9835 ; WX 896 ; N musicalnotedbl ; G 3659
U 9836 ; WX 896 ; N uni266C ; G 3660
U 9837 ; WX 472 ; N uni266D ; G 3661
U 9838 ; WX 357 ; N uni266E ; G 3662
U 9839 ; WX 484 ; N uni266F ; G 3663
U 9840 ; WX 748 ; N uni2670 ; G 3664
U 9841 ; WX 766 ; N uni2671 ; G 3665
U 9842 ; WX 896 ; N uni2672 ; G 3666
U 9843 ; WX 896 ; N uni2673 ; G 3667
U 9844 ; WX 896 ; N uni2674 ; G 3668
U 9845 ; WX 896 ; N uni2675 ; G 3669
U 9846 ; WX 896 ; N uni2676 ; G 3670
U 9847 ; WX 896 ; N uni2677 ; G 3671
U 9848 ; WX 896 ; N uni2678 ; G 3672
U 9849 ; WX 896 ; N uni2679 ; G 3673
U 9850 ; WX 896 ; N uni267A ; G 3674
U 9851 ; WX 896 ; N uni267B ; G 3675
U 9852 ; WX 896 ; N uni267C ; G 3676
U 9853 ; WX 896 ; N uni267D ; G 3677
U 9854 ; WX 896 ; N uni267E ; G 3678
U 9855 ; WX 896 ; N uni267F ; G 3679
U 9856 ; WX 869 ; N uni2680 ; G 3680
U 9857 ; WX 869 ; N uni2681 ; G 3681
U 9858 ; WX 869 ; N uni2682 ; G 3682
U 9859 ; WX 869 ; N uni2683 ; G 3683
U 9860 ; WX 869 ; N uni2684 ; G 3684
U 9861 ; WX 869 ; N uni2685 ; G 3685
U 9862 ; WX 890 ; N uni2686 ; G 3686
U 9863 ; WX 890 ; N uni2687 ; G 3687
U 9864 ; WX 890 ; N uni2688 ; G 3688
U 9865 ; WX 890 ; N uni2689 ; G 3689
U 9866 ; WX 890 ; N uni268A ; G 3690
U 9867 ; WX 890 ; N uni268B ; G 3691
U 9868 ; WX 890 ; N uni268C ; G 3692
U 9869 ; WX 890 ; N uni268D ; G 3693
U 9870 ; WX 890 ; N uni268E ; G 3694
U 9871 ; WX 890 ; N uni268F ; G 3695
U 9872 ; WX 750 ; N uni2690 ; G 3696
U 9873 ; WX 750 ; N uni2691 ; G 3697
U 9874 ; WX 890 ; N uni2692 ; G 3698
U 9875 ; WX 816 ; N uni2693 ; G 3699
U 9876 ; WX 716 ; N uni2694 ; G 3700
U 9877 ; WX 537 ; N uni2695 ; G 3701
U 9878 ; WX 852 ; N uni2696 ; G 3702
U 9879 ; WX 890 ; N uni2697 ; G 3703
U 9880 ; WX 684 ; N uni2698 ; G 3704
U 9881 ; WX 896 ; N uni2699 ; G 3705
U 9882 ; WX 708 ; N uni269A ; G 3706
U 9883 ; WX 890 ; N uni269B ; G 3707
U 9884 ; WX 890 ; N uni269C ; G 3708
U 9886 ; WX 896 ; N uni269E ; G 3709
U 9887 ; WX 896 ; N uni269F ; G 3710
U 9888 ; WX 890 ; N uni26A0 ; G 3711
U 9889 ; WX 702 ; N uni26A1 ; G 3712
U 9890 ; WX 1004 ; N uni26A2 ; G 3713
U 9891 ; WX 1089 ; N uni26A3 ; G 3714
U 9892 ; WX 1175 ; N uni26A4 ; G 3715
U 9893 ; WX 903 ; N uni26A5 ; G 3716
U 9894 ; WX 838 ; N uni26A6 ; G 3717
U 9895 ; WX 838 ; N uni26A7 ; G 3718
U 9896 ; WX 838 ; N uni26A8 ; G 3719
U 9897 ; WX 838 ; N uni26A9 ; G 3720
U 9898 ; WX 838 ; N uni26AA ; G 3721
U 9899 ; WX 838 ; N uni26AB ; G 3722
U 9900 ; WX 838 ; N uni26AC ; G 3723
U 9901 ; WX 838 ; N uni26AD ; G 3724
U 9902 ; WX 838 ; N uni26AE ; G 3725
U 9903 ; WX 838 ; N uni26AF ; G 3726
U 9904 ; WX 844 ; N uni26B0 ; G 3727
U 9905 ; WX 838 ; N uni26B1 ; G 3728
U 9906 ; WX 732 ; N uni26B2 ; G 3729
U 9907 ; WX 732 ; N uni26B3 ; G 3730
U 9908 ; WX 732 ; N uni26B4 ; G 3731
U 9909 ; WX 732 ; N uni26B5 ; G 3732
U 9910 ; WX 850 ; N uni26B6 ; G 3733
U 9911 ; WX 732 ; N uni26B7 ; G 3734
U 9912 ; WX 732 ; N uni26B8 ; G 3735
U 9920 ; WX 838 ; N uni26C0 ; G 3736
U 9921 ; WX 838 ; N uni26C1 ; G 3737
U 9922 ; WX 838 ; N uni26C2 ; G 3738
U 9923 ; WX 838 ; N uni26C3 ; G 3739
U 9954 ; WX 732 ; N uni26E2 ; G 3740
U 9985 ; WX 838 ; N uni2701 ; G 3741
U 9986 ; WX 838 ; N uni2702 ; G 3742
U 9987 ; WX 838 ; N uni2703 ; G 3743
U 9988 ; WX 838 ; N uni2704 ; G 3744
U 9990 ; WX 838 ; N uni2706 ; G 3745
U 9991 ; WX 838 ; N uni2707 ; G 3746
U 9992 ; WX 838 ; N uni2708 ; G 3747
U 9993 ; WX 838 ; N uni2709 ; G 3748
U 9996 ; WX 838 ; N uni270C ; G 3749
U 9997 ; WX 838 ; N uni270D ; G 3750
U 9998 ; WX 838 ; N uni270E ; G 3751
U 9999 ; WX 838 ; N uni270F ; G 3752
U 10000 ; WX 838 ; N uni2710 ; G 3753
U 10001 ; WX 838 ; N uni2711 ; G 3754
U 10002 ; WX 838 ; N uni2712 ; G 3755
U 10003 ; WX 838 ; N uni2713 ; G 3756
U 10004 ; WX 838 ; N uni2714 ; G 3757
U 10005 ; WX 838 ; N uni2715 ; G 3758
U 10006 ; WX 838 ; N uni2716 ; G 3759
U 10007 ; WX 838 ; N uni2717 ; G 3760
U 10008 ; WX 838 ; N uni2718 ; G 3761
U 10009 ; WX 838 ; N uni2719 ; G 3762
U 10010 ; WX 838 ; N uni271A ; G 3763
U 10011 ; WX 838 ; N uni271B ; G 3764
U 10012 ; WX 838 ; N uni271C ; G 3765
U 10013 ; WX 838 ; N uni271D ; G 3766
U 10014 ; WX 838 ; N uni271E ; G 3767
U 10015 ; WX 838 ; N uni271F ; G 3768
U 10016 ; WX 838 ; N uni2720 ; G 3769
U 10017 ; WX 838 ; N uni2721 ; G 3770
U 10018 ; WX 838 ; N uni2722 ; G 3771
U 10019 ; WX 838 ; N uni2723 ; G 3772
U 10020 ; WX 838 ; N uni2724 ; G 3773
U 10021 ; WX 838 ; N uni2725 ; G 3774
U 10022 ; WX 838 ; N uni2726 ; G 3775
U 10023 ; WX 838 ; N uni2727 ; G 3776
U 10025 ; WX 838 ; N uni2729 ; G 3777
U 10026 ; WX 838 ; N uni272A ; G 3778
U 10027 ; WX 838 ; N uni272B ; G 3779
U 10028 ; WX 838 ; N uni272C ; G 3780
U 10029 ; WX 838 ; N uni272D ; G 3781
U 10030 ; WX 838 ; N uni272E ; G 3782
U 10031 ; WX 838 ; N uni272F ; G 3783
U 10032 ; WX 838 ; N uni2730 ; G 3784
U 10033 ; WX 838 ; N uni2731 ; G 3785
U 10034 ; WX 838 ; N uni2732 ; G 3786
U 10035 ; WX 838 ; N uni2733 ; G 3787
U 10036 ; WX 838 ; N uni2734 ; G 3788
U 10037 ; WX 838 ; N uni2735 ; G 3789
U 10038 ; WX 838 ; N uni2736 ; G 3790
U 10039 ; WX 838 ; N uni2737 ; G 3791
U 10040 ; WX 838 ; N uni2738 ; G 3792
U 10041 ; WX 838 ; N uni2739 ; G 3793
U 10042 ; WX 838 ; N uni273A ; G 3794
U 10043 ; WX 838 ; N uni273B ; G 3795
U 10044 ; WX 838 ; N uni273C ; G 3796
U 10045 ; WX 838 ; N uni273D ; G 3797
U 10046 ; WX 838 ; N uni273E ; G 3798
U 10047 ; WX 838 ; N uni273F ; G 3799
U 10048 ; WX 838 ; N uni2740 ; G 3800
U 10049 ; WX 838 ; N uni2741 ; G 3801
U 10050 ; WX 838 ; N uni2742 ; G 3802
U 10051 ; WX 838 ; N uni2743 ; G 3803
U 10052 ; WX 838 ; N uni2744 ; G 3804
U 10053 ; WX 838 ; N uni2745 ; G 3805
U 10054 ; WX 838 ; N uni2746 ; G 3806
U 10055 ; WX 838 ; N uni2747 ; G 3807
U 10056 ; WX 838 ; N uni2748 ; G 3808
U 10057 ; WX 838 ; N uni2749 ; G 3809
U 10058 ; WX 838 ; N uni274A ; G 3810
U 10059 ; WX 838 ; N uni274B ; G 3811
U 10061 ; WX 896 ; N uni274D ; G 3812
U 10063 ; WX 896 ; N uni274F ; G 3813
U 10064 ; WX 896 ; N uni2750 ; G 3814
U 10065 ; WX 896 ; N uni2751 ; G 3815
U 10066 ; WX 896 ; N uni2752 ; G 3816
U 10070 ; WX 896 ; N uni2756 ; G 3817
U 10072 ; WX 838 ; N uni2758 ; G 3818
U 10073 ; WX 838 ; N uni2759 ; G 3819
U 10074 ; WX 838 ; N uni275A ; G 3820
U 10075 ; WX 322 ; N uni275B ; G 3821
U 10076 ; WX 322 ; N uni275C ; G 3822
U 10077 ; WX 538 ; N uni275D ; G 3823
U 10078 ; WX 538 ; N uni275E ; G 3824
U 10081 ; WX 838 ; N uni2761 ; G 3825
U 10082 ; WX 838 ; N uni2762 ; G 3826
U 10083 ; WX 838 ; N uni2763 ; G 3827
U 10084 ; WX 838 ; N uni2764 ; G 3828
U 10085 ; WX 838 ; N uni2765 ; G 3829
U 10086 ; WX 838 ; N uni2766 ; G 3830
U 10087 ; WX 838 ; N uni2767 ; G 3831
U 10088 ; WX 838 ; N uni2768 ; G 3832
U 10089 ; WX 838 ; N uni2769 ; G 3833
U 10090 ; WX 838 ; N uni276A ; G 3834
U 10091 ; WX 838 ; N uni276B ; G 3835
U 10092 ; WX 838 ; N uni276C ; G 3836
U 10093 ; WX 838 ; N uni276D ; G 3837
U 10094 ; WX 838 ; N uni276E ; G 3838
U 10095 ; WX 838 ; N uni276F ; G 3839
U 10096 ; WX 838 ; N uni2770 ; G 3840
U 10097 ; WX 838 ; N uni2771 ; G 3841
U 10098 ; WX 838 ; N uni2772 ; G 3842
U 10099 ; WX 838 ; N uni2773 ; G 3843
U 10100 ; WX 838 ; N uni2774 ; G 3844
U 10101 ; WX 838 ; N uni2775 ; G 3845
U 10102 ; WX 896 ; N uni2776 ; G 3846
U 10103 ; WX 896 ; N uni2777 ; G 3847
U 10104 ; WX 896 ; N uni2778 ; G 3848
U 10105 ; WX 896 ; N uni2779 ; G 3849
U 10106 ; WX 896 ; N uni277A ; G 3850
U 10107 ; WX 896 ; N uni277B ; G 3851
U 10108 ; WX 896 ; N uni277C ; G 3852
U 10109 ; WX 896 ; N uni277D ; G 3853
U 10110 ; WX 896 ; N uni277E ; G 3854
U 10111 ; WX 896 ; N uni277F ; G 3855
U 10112 ; WX 838 ; N uni2780 ; G 3856
U 10113 ; WX 838 ; N uni2781 ; G 3857
U 10114 ; WX 838 ; N uni2782 ; G 3858
U 10115 ; WX 838 ; N uni2783 ; G 3859
U 10116 ; WX 838 ; N uni2784 ; G 3860
U 10117 ; WX 838 ; N uni2785 ; G 3861
U 10118 ; WX 838 ; N uni2786 ; G 3862
U 10119 ; WX 838 ; N uni2787 ; G 3863
U 10120 ; WX 838 ; N uni2788 ; G 3864
U 10121 ; WX 838 ; N uni2789 ; G 3865
U 10122 ; WX 838 ; N uni278A ; G 3866
U 10123 ; WX 838 ; N uni278B ; G 3867
U 10124 ; WX 838 ; N uni278C ; G 3868
U 10125 ; WX 838 ; N uni278D ; G 3869
U 10126 ; WX 838 ; N uni278E ; G 3870
U 10127 ; WX 838 ; N uni278F ; G 3871
U 10128 ; WX 838 ; N uni2790 ; G 3872
U 10129 ; WX 838 ; N uni2791 ; G 3873
U 10130 ; WX 838 ; N uni2792 ; G 3874
U 10131 ; WX 838 ; N uni2793 ; G 3875
U 10132 ; WX 838 ; N uni2794 ; G 3876
U 10136 ; WX 838 ; N uni2798 ; G 3877
U 10137 ; WX 838 ; N uni2799 ; G 3878
U 10138 ; WX 838 ; N uni279A ; G 3879
U 10139 ; WX 838 ; N uni279B ; G 3880
U 10140 ; WX 838 ; N uni279C ; G 3881
U 10141 ; WX 838 ; N uni279D ; G 3882
U 10142 ; WX 838 ; N uni279E ; G 3883
U 10143 ; WX 838 ; N uni279F ; G 3884
U 10144 ; WX 838 ; N uni27A0 ; G 3885
U 10145 ; WX 838 ; N uni27A1 ; G 3886
U 10146 ; WX 838 ; N uni27A2 ; G 3887
U 10147 ; WX 838 ; N uni27A3 ; G 3888
U 10148 ; WX 838 ; N uni27A4 ; G 3889
U 10149 ; WX 838 ; N uni27A5 ; G 3890
U 10150 ; WX 838 ; N uni27A6 ; G 3891
U 10151 ; WX 838 ; N uni27A7 ; G 3892
U 10152 ; WX 838 ; N uni27A8 ; G 3893
U 10153 ; WX 838 ; N uni27A9 ; G 3894
U 10154 ; WX 838 ; N uni27AA ; G 3895
U 10155 ; WX 838 ; N uni27AB ; G 3896
U 10156 ; WX 838 ; N uni27AC ; G 3897
U 10157 ; WX 838 ; N uni27AD ; G 3898
U 10158 ; WX 838 ; N uni27AE ; G 3899
U 10159 ; WX 838 ; N uni27AF ; G 3900
U 10161 ; WX 838 ; N uni27B1 ; G 3901
U 10162 ; WX 838 ; N uni27B2 ; G 3902
U 10163 ; WX 838 ; N uni27B3 ; G 3903
U 10164 ; WX 838 ; N uni27B4 ; G 3904
U 10165 ; WX 838 ; N uni27B5 ; G 3905
U 10166 ; WX 838 ; N uni27B6 ; G 3906
U 10167 ; WX 838 ; N uni27B7 ; G 3907
U 10168 ; WX 838 ; N uni27B8 ; G 3908
U 10169 ; WX 838 ; N uni27B9 ; G 3909
U 10170 ; WX 838 ; N uni27BA ; G 3910
U 10171 ; WX 838 ; N uni27BB ; G 3911
U 10172 ; WX 838 ; N uni27BC ; G 3912
U 10173 ; WX 838 ; N uni27BD ; G 3913
U 10174 ; WX 838 ; N uni27BE ; G 3914
U 10181 ; WX 390 ; N uni27C5 ; G 3915
U 10182 ; WX 390 ; N uni27C6 ; G 3916
U 10208 ; WX 494 ; N uni27E0 ; G 3917
U 10214 ; WX 495 ; N uni27E6 ; G 3918
U 10215 ; WX 495 ; N uni27E7 ; G 3919
U 10216 ; WX 390 ; N uni27E8 ; G 3920
U 10217 ; WX 390 ; N uni27E9 ; G 3921
U 10218 ; WX 556 ; N uni27EA ; G 3922
U 10219 ; WX 556 ; N uni27EB ; G 3923
U 10224 ; WX 838 ; N uni27F0 ; G 3924
U 10225 ; WX 838 ; N uni27F1 ; G 3925
U 10226 ; WX 838 ; N uni27F2 ; G 3926
U 10227 ; WX 838 ; N uni27F3 ; G 3927
U 10228 ; WX 1157 ; N uni27F4 ; G 3928
U 10229 ; WX 1434 ; N uni27F5 ; G 3929
U 10230 ; WX 1434 ; N uni27F6 ; G 3930
U 10231 ; WX 1434 ; N uni27F7 ; G 3931
U 10232 ; WX 1434 ; N uni27F8 ; G 3932
U 10233 ; WX 1434 ; N uni27F9 ; G 3933
U 10234 ; WX 1434 ; N uni27FA ; G 3934
U 10235 ; WX 1434 ; N uni27FB ; G 3935
U 10236 ; WX 1434 ; N uni27FC ; G 3936
U 10237 ; WX 1434 ; N uni27FD ; G 3937
U 10238 ; WX 1434 ; N uni27FE ; G 3938
U 10239 ; WX 1434 ; N uni27FF ; G 3939
U 10240 ; WX 732 ; N uni2800 ; G 3940
U 10241 ; WX 732 ; N uni2801 ; G 3941
U 10242 ; WX 732 ; N uni2802 ; G 3942
U 10243 ; WX 732 ; N uni2803 ; G 3943
U 10244 ; WX 732 ; N uni2804 ; G 3944
U 10245 ; WX 732 ; N uni2805 ; G 3945
U 10246 ; WX 732 ; N uni2806 ; G 3946
U 10247 ; WX 732 ; N uni2807 ; G 3947
U 10248 ; WX 732 ; N uni2808 ; G 3948
U 10249 ; WX 732 ; N uni2809 ; G 3949
U 10250 ; WX 732 ; N uni280A ; G 3950
U 10251 ; WX 732 ; N uni280B ; G 3951
U 10252 ; WX 732 ; N uni280C ; G 3952
U 10253 ; WX 732 ; N uni280D ; G 3953
U 10254 ; WX 732 ; N uni280E ; G 3954
U 10255 ; WX 732 ; N uni280F ; G 3955
U 10256 ; WX 732 ; N uni2810 ; G 3956
U 10257 ; WX 732 ; N uni2811 ; G 3957
U 10258 ; WX 732 ; N uni2812 ; G 3958
U 10259 ; WX 732 ; N uni2813 ; G 3959
U 10260 ; WX 732 ; N uni2814 ; G 3960
U 10261 ; WX 732 ; N uni2815 ; G 3961
U 10262 ; WX 732 ; N uni2816 ; G 3962
U 10263 ; WX 732 ; N uni2817 ; G 3963
U 10264 ; WX 732 ; N uni2818 ; G 3964
U 10265 ; WX 732 ; N uni2819 ; G 3965
U 10266 ; WX 732 ; N uni281A ; G 3966
U 10267 ; WX 732 ; N uni281B ; G 3967
U 10268 ; WX 732 ; N uni281C ; G 3968
U 10269 ; WX 732 ; N uni281D ; G 3969
U 10270 ; WX 732 ; N uni281E ; G 3970
U 10271 ; WX 732 ; N uni281F ; G 3971
U 10272 ; WX 732 ; N uni2820 ; G 3972
U 10273 ; WX 732 ; N uni2821 ; G 3973
U 10274 ; WX 732 ; N uni2822 ; G 3974
U 10275 ; WX 732 ; N uni2823 ; G 3975
U 10276 ; WX 732 ; N uni2824 ; G 3976
U 10277 ; WX 732 ; N uni2825 ; G 3977
U 10278 ; WX 732 ; N uni2826 ; G 3978
U 10279 ; WX 732 ; N uni2827 ; G 3979
U 10280 ; WX 732 ; N uni2828 ; G 3980
U 10281 ; WX 732 ; N uni2829 ; G 3981
U 10282 ; WX 732 ; N uni282A ; G 3982
U 10283 ; WX 732 ; N uni282B ; G 3983
U 10284 ; WX 732 ; N uni282C ; G 3984
U 10285 ; WX 732 ; N uni282D ; G 3985
U 10286 ; WX 732 ; N uni282E ; G 3986
U 10287 ; WX 732 ; N uni282F ; G 3987
U 10288 ; WX 732 ; N uni2830 ; G 3988
U 10289 ; WX 732 ; N uni2831 ; G 3989
U 10290 ; WX 732 ; N uni2832 ; G 3990
U 10291 ; WX 732 ; N uni2833 ; G 3991
U 10292 ; WX 732 ; N uni2834 ; G 3992
U 10293 ; WX 732 ; N uni2835 ; G 3993
U 10294 ; WX 732 ; N uni2836 ; G 3994
U 10295 ; WX 732 ; N uni2837 ; G 3995
U 10296 ; WX 732 ; N uni2838 ; G 3996
U 10297 ; WX 732 ; N uni2839 ; G 3997
U 10298 ; WX 732 ; N uni283A ; G 3998
U 10299 ; WX 732 ; N uni283B ; G 3999
U 10300 ; WX 732 ; N uni283C ; G 4000
U 10301 ; WX 732 ; N uni283D ; G 4001
U 10302 ; WX 732 ; N uni283E ; G 4002
U 10303 ; WX 732 ; N uni283F ; G 4003
U 10304 ; WX 732 ; N uni2840 ; G 4004
U 10305 ; WX 732 ; N uni2841 ; G 4005
U 10306 ; WX 732 ; N uni2842 ; G 4006
U 10307 ; WX 732 ; N uni2843 ; G 4007
U 10308 ; WX 732 ; N uni2844 ; G 4008
U 10309 ; WX 732 ; N uni2845 ; G 4009
U 10310 ; WX 732 ; N uni2846 ; G 4010
U 10311 ; WX 732 ; N uni2847 ; G 4011
U 10312 ; WX 732 ; N uni2848 ; G 4012
U 10313 ; WX 732 ; N uni2849 ; G 4013
U 10314 ; WX 732 ; N uni284A ; G 4014
U 10315 ; WX 732 ; N uni284B ; G 4015
U 10316 ; WX 732 ; N uni284C ; G 4016
U 10317 ; WX 732 ; N uni284D ; G 4017
U 10318 ; WX 732 ; N uni284E ; G 4018
U 10319 ; WX 732 ; N uni284F ; G 4019
U 10320 ; WX 732 ; N uni2850 ; G 4020
U 10321 ; WX 732 ; N uni2851 ; G 4021
U 10322 ; WX 732 ; N uni2852 ; G 4022
U 10323 ; WX 732 ; N uni2853 ; G 4023
U 10324 ; WX 732 ; N uni2854 ; G 4024
U 10325 ; WX 732 ; N uni2855 ; G 4025
U 10326 ; WX 732 ; N uni2856 ; G 4026
U 10327 ; WX 732 ; N uni2857 ; G 4027
U 10328 ; WX 732 ; N uni2858 ; G 4028
U 10329 ; WX 732 ; N uni2859 ; G 4029
U 10330 ; WX 732 ; N uni285A ; G 4030
U 10331 ; WX 732 ; N uni285B ; G 4031
U 10332 ; WX 732 ; N uni285C ; G 4032
U 10333 ; WX 732 ; N uni285D ; G 4033
U 10334 ; WX 732 ; N uni285E ; G 4034
U 10335 ; WX 732 ; N uni285F ; G 4035
U 10336 ; WX 732 ; N uni2860 ; G 4036
U 10337 ; WX 732 ; N uni2861 ; G 4037
U 10338 ; WX 732 ; N uni2862 ; G 4038
U 10339 ; WX 732 ; N uni2863 ; G 4039
U 10340 ; WX 732 ; N uni2864 ; G 4040
U 10341 ; WX 732 ; N uni2865 ; G 4041
U 10342 ; WX 732 ; N uni2866 ; G 4042
U 10343 ; WX 732 ; N uni2867 ; G 4043
U 10344 ; WX 732 ; N uni2868 ; G 4044
U 10345 ; WX 732 ; N uni2869 ; G 4045
U 10346 ; WX 732 ; N uni286A ; G 4046
U 10347 ; WX 732 ; N uni286B ; G 4047
U 10348 ; WX 732 ; N uni286C ; G 4048
U 10349 ; WX 732 ; N uni286D ; G 4049
U 10350 ; WX 732 ; N uni286E ; G 4050
U 10351 ; WX 732 ; N uni286F ; G 4051
U 10352 ; WX 732 ; N uni2870 ; G 4052
U 10353 ; WX 732 ; N uni2871 ; G 4053
U 10354 ; WX 732 ; N uni2872 ; G 4054
U 10355 ; WX 732 ; N uni2873 ; G 4055
U 10356 ; WX 732 ; N uni2874 ; G 4056
U 10357 ; WX 732 ; N uni2875 ; G 4057
U 10358 ; WX 732 ; N uni2876 ; G 4058
U 10359 ; WX 732 ; N uni2877 ; G 4059
U 10360 ; WX 732 ; N uni2878 ; G 4060
U 10361 ; WX 732 ; N uni2879 ; G 4061
U 10362 ; WX 732 ; N uni287A ; G 4062
U 10363 ; WX 732 ; N uni287B ; G 4063
U 10364 ; WX 732 ; N uni287C ; G 4064
U 10365 ; WX 732 ; N uni287D ; G 4065
U 10366 ; WX 732 ; N uni287E ; G 4066
U 10367 ; WX 732 ; N uni287F ; G 4067
U 10368 ; WX 732 ; N uni2880 ; G 4068
U 10369 ; WX 732 ; N uni2881 ; G 4069
U 10370 ; WX 732 ; N uni2882 ; G 4070
U 10371 ; WX 732 ; N uni2883 ; G 4071
U 10372 ; WX 732 ; N uni2884 ; G 4072
U 10373 ; WX 732 ; N uni2885 ; G 4073
U 10374 ; WX 732 ; N uni2886 ; G 4074
U 10375 ; WX 732 ; N uni2887 ; G 4075
U 10376 ; WX 732 ; N uni2888 ; G 4076
U 10377 ; WX 732 ; N uni2889 ; G 4077
U 10378 ; WX 732 ; N uni288A ; G 4078
U 10379 ; WX 732 ; N uni288B ; G 4079
U 10380 ; WX 732 ; N uni288C ; G 4080
U 10381 ; WX 732 ; N uni288D ; G 4081
U 10382 ; WX 732 ; N uni288E ; G 4082
U 10383 ; WX 732 ; N uni288F ; G 4083
U 10384 ; WX 732 ; N uni2890 ; G 4084
U 10385 ; WX 732 ; N uni2891 ; G 4085
U 10386 ; WX 732 ; N uni2892 ; G 4086
U 10387 ; WX 732 ; N uni2893 ; G 4087
U 10388 ; WX 732 ; N uni2894 ; G 4088
U 10389 ; WX 732 ; N uni2895 ; G 4089
U 10390 ; WX 732 ; N uni2896 ; G 4090
U 10391 ; WX 732 ; N uni2897 ; G 4091
U 10392 ; WX 732 ; N uni2898 ; G 4092
U 10393 ; WX 732 ; N uni2899 ; G 4093
U 10394 ; WX 732 ; N uni289A ; G 4094
U 10395 ; WX 732 ; N uni289B ; G 4095
U 10396 ; WX 732 ; N uni289C ; G 4096
U 10397 ; WX 732 ; N uni289D ; G 4097
U 10398 ; WX 732 ; N uni289E ; G 4098
U 10399 ; WX 732 ; N uni289F ; G 4099
U 10400 ; WX 732 ; N uni28A0 ; G 4100
U 10401 ; WX 732 ; N uni28A1 ; G 4101
U 10402 ; WX 732 ; N uni28A2 ; G 4102
U 10403 ; WX 732 ; N uni28A3 ; G 4103
U 10404 ; WX 732 ; N uni28A4 ; G 4104
U 10405 ; WX 732 ; N uni28A5 ; G 4105
U 10406 ; WX 732 ; N uni28A6 ; G 4106
U 10407 ; WX 732 ; N uni28A7 ; G 4107
U 10408 ; WX 732 ; N uni28A8 ; G 4108
U 10409 ; WX 732 ; N uni28A9 ; G 4109
U 10410 ; WX 732 ; N uni28AA ; G 4110
U 10411 ; WX 732 ; N uni28AB ; G 4111
U 10412 ; WX 732 ; N uni28AC ; G 4112
U 10413 ; WX 732 ; N uni28AD ; G 4113
U 10414 ; WX 732 ; N uni28AE ; G 4114
U 10415 ; WX 732 ; N uni28AF ; G 4115
U 10416 ; WX 732 ; N uni28B0 ; G 4116
U 10417 ; WX 732 ; N uni28B1 ; G 4117
U 10418 ; WX 732 ; N uni28B2 ; G 4118
U 10419 ; WX 732 ; N uni28B3 ; G 4119
U 10420 ; WX 732 ; N uni28B4 ; G 4120
U 10421 ; WX 732 ; N uni28B5 ; G 4121
U 10422 ; WX 732 ; N uni28B6 ; G 4122
U 10423 ; WX 732 ; N uni28B7 ; G 4123
U 10424 ; WX 732 ; N uni28B8 ; G 4124
U 10425 ; WX 732 ; N uni28B9 ; G 4125
U 10426 ; WX 732 ; N uni28BA ; G 4126
U 10427 ; WX 732 ; N uni28BB ; G 4127
U 10428 ; WX 732 ; N uni28BC ; G 4128
U 10429 ; WX 732 ; N uni28BD ; G 4129
U 10430 ; WX 732 ; N uni28BE ; G 4130
U 10431 ; WX 732 ; N uni28BF ; G 4131
U 10432 ; WX 732 ; N uni28C0 ; G 4132
U 10433 ; WX 732 ; N uni28C1 ; G 4133
U 10434 ; WX 732 ; N uni28C2 ; G 4134
U 10435 ; WX 732 ; N uni28C3 ; G 4135
U 10436 ; WX 732 ; N uni28C4 ; G 4136
U 10437 ; WX 732 ; N uni28C5 ; G 4137
U 10438 ; WX 732 ; N uni28C6 ; G 4138
U 10439 ; WX 732 ; N uni28C7 ; G 4139
U 10440 ; WX 732 ; N uni28C8 ; G 4140
U 10441 ; WX 732 ; N uni28C9 ; G 4141
U 10442 ; WX 732 ; N uni28CA ; G 4142
U 10443 ; WX 732 ; N uni28CB ; G 4143
U 10444 ; WX 732 ; N uni28CC ; G 4144
U 10445 ; WX 732 ; N uni28CD ; G 4145
U 10446 ; WX 732 ; N uni28CE ; G 4146
U 10447 ; WX 732 ; N uni28CF ; G 4147
U 10448 ; WX 732 ; N uni28D0 ; G 4148
U 10449 ; WX 732 ; N uni28D1 ; G 4149
U 10450 ; WX 732 ; N uni28D2 ; G 4150
U 10451 ; WX 732 ; N uni28D3 ; G 4151
U 10452 ; WX 732 ; N uni28D4 ; G 4152
U 10453 ; WX 732 ; N uni28D5 ; G 4153
U 10454 ; WX 732 ; N uni28D6 ; G 4154
U 10455 ; WX 732 ; N uni28D7 ; G 4155
U 10456 ; WX 732 ; N uni28D8 ; G 4156
U 10457 ; WX 732 ; N uni28D9 ; G 4157
U 10458 ; WX 732 ; N uni28DA ; G 4158
U 10459 ; WX 732 ; N uni28DB ; G 4159
U 10460 ; WX 732 ; N uni28DC ; G 4160
U 10461 ; WX 732 ; N uni28DD ; G 4161
U 10462 ; WX 732 ; N uni28DE ; G 4162
U 10463 ; WX 732 ; N uni28DF ; G 4163
U 10464 ; WX 732 ; N uni28E0 ; G 4164
U 10465 ; WX 732 ; N uni28E1 ; G 4165
U 10466 ; WX 732 ; N uni28E2 ; G 4166
U 10467 ; WX 732 ; N uni28E3 ; G 4167
U 10468 ; WX 732 ; N uni28E4 ; G 4168
U 10469 ; WX 732 ; N uni28E5 ; G 4169
U 10470 ; WX 732 ; N uni28E6 ; G 4170
U 10471 ; WX 732 ; N uni28E7 ; G 4171
U 10472 ; WX 732 ; N uni28E8 ; G 4172
U 10473 ; WX 732 ; N uni28E9 ; G 4173
U 10474 ; WX 732 ; N uni28EA ; G 4174
U 10475 ; WX 732 ; N uni28EB ; G 4175
U 10476 ; WX 732 ; N uni28EC ; G 4176
U 10477 ; WX 732 ; N uni28ED ; G 4177
U 10478 ; WX 732 ; N uni28EE ; G 4178
U 10479 ; WX 732 ; N uni28EF ; G 4179
U 10480 ; WX 732 ; N uni28F0 ; G 4180
U 10481 ; WX 732 ; N uni28F1 ; G 4181
U 10482 ; WX 732 ; N uni28F2 ; G 4182
U 10483 ; WX 732 ; N uni28F3 ; G 4183
U 10484 ; WX 732 ; N uni28F4 ; G 4184
U 10485 ; WX 732 ; N uni28F5 ; G 4185
U 10486 ; WX 732 ; N uni28F6 ; G 4186
U 10487 ; WX 732 ; N uni28F7 ; G 4187
U 10488 ; WX 732 ; N uni28F8 ; G 4188
U 10489 ; WX 732 ; N uni28F9 ; G 4189
U 10490 ; WX 732 ; N uni28FA ; G 4190
U 10491 ; WX 732 ; N uni28FB ; G 4191
U 10492 ; WX 732 ; N uni28FC ; G 4192
U 10493 ; WX 732 ; N uni28FD ; G 4193
U 10494 ; WX 732 ; N uni28FE ; G 4194
U 10495 ; WX 732 ; N uni28FF ; G 4195
U 10502 ; WX 838 ; N uni2906 ; G 4196
U 10503 ; WX 838 ; N uni2907 ; G 4197
U 10506 ; WX 838 ; N uni290A ; G 4198
U 10507 ; WX 838 ; N uni290B ; G 4199
U 10560 ; WX 683 ; N uni2940 ; G 4200
U 10561 ; WX 683 ; N uni2941 ; G 4201
U 10627 ; WX 734 ; N uni2983 ; G 4202
U 10628 ; WX 734 ; N uni2984 ; G 4203
U 10702 ; WX 838 ; N uni29CE ; G 4204
U 10703 ; WX 1000 ; N uni29CF ; G 4205
U 10704 ; WX 1000 ; N uni29D0 ; G 4206
U 10705 ; WX 1000 ; N uni29D1 ; G 4207
U 10706 ; WX 1000 ; N uni29D2 ; G 4208
U 10707 ; WX 1000 ; N uni29D3 ; G 4209
U 10708 ; WX 1000 ; N uni29D4 ; G 4210
U 10709 ; WX 1000 ; N uni29D5 ; G 4211
U 10731 ; WX 494 ; N uni29EB ; G 4212
U 10746 ; WX 838 ; N uni29FA ; G 4213
U 10747 ; WX 838 ; N uni29FB ; G 4214
U 10752 ; WX 1000 ; N uni2A00 ; G 4215
U 10753 ; WX 1000 ; N uni2A01 ; G 4216
U 10754 ; WX 1000 ; N uni2A02 ; G 4217
U 10764 ; WX 1325 ; N uni2A0C ; G 4218
U 10765 ; WX 521 ; N uni2A0D ; G 4219
U 10766 ; WX 521 ; N uni2A0E ; G 4220
U 10767 ; WX 521 ; N uni2A0F ; G 4221
U 10768 ; WX 521 ; N uni2A10 ; G 4222
U 10769 ; WX 521 ; N uni2A11 ; G 4223
U 10770 ; WX 521 ; N uni2A12 ; G 4224
U 10771 ; WX 521 ; N uni2A13 ; G 4225
U 10772 ; WX 521 ; N uni2A14 ; G 4226
U 10773 ; WX 521 ; N uni2A15 ; G 4227
U 10774 ; WX 521 ; N uni2A16 ; G 4228
U 10775 ; WX 521 ; N uni2A17 ; G 4229
U 10776 ; WX 521 ; N uni2A18 ; G 4230
U 10777 ; WX 521 ; N uni2A19 ; G 4231
U 10778 ; WX 521 ; N uni2A1A ; G 4232
U 10779 ; WX 521 ; N uni2A1B ; G 4233
U 10780 ; WX 521 ; N uni2A1C ; G 4234
U 10799 ; WX 838 ; N uni2A2F ; G 4235
U 10858 ; WX 838 ; N uni2A6A ; G 4236
U 10859 ; WX 838 ; N uni2A6B ; G 4237
U 10877 ; WX 838 ; N uni2A7D ; G 4238
U 10878 ; WX 838 ; N uni2A7E ; G 4239
U 10879 ; WX 838 ; N uni2A7F ; G 4240
U 10880 ; WX 838 ; N uni2A80 ; G 4241
U 10881 ; WX 838 ; N uni2A81 ; G 4242
U 10882 ; WX 838 ; N uni2A82 ; G 4243
U 10883 ; WX 838 ; N uni2A83 ; G 4244
U 10884 ; WX 838 ; N uni2A84 ; G 4245
U 10885 ; WX 838 ; N uni2A85 ; G 4246
U 10886 ; WX 838 ; N uni2A86 ; G 4247
U 10887 ; WX 838 ; N uni2A87 ; G 4248
U 10888 ; WX 838 ; N uni2A88 ; G 4249
U 10889 ; WX 838 ; N uni2A89 ; G 4250
U 10890 ; WX 838 ; N uni2A8A ; G 4251
U 10891 ; WX 838 ; N uni2A8B ; G 4252
U 10892 ; WX 838 ; N uni2A8C ; G 4253
U 10893 ; WX 838 ; N uni2A8D ; G 4254
U 10894 ; WX 838 ; N uni2A8E ; G 4255
U 10895 ; WX 838 ; N uni2A8F ; G 4256
U 10896 ; WX 838 ; N uni2A90 ; G 4257
U 10897 ; WX 838 ; N uni2A91 ; G 4258
U 10898 ; WX 838 ; N uni2A92 ; G 4259
U 10899 ; WX 838 ; N uni2A93 ; G 4260
U 10900 ; WX 838 ; N uni2A94 ; G 4261
U 10901 ; WX 838 ; N uni2A95 ; G 4262
U 10902 ; WX 838 ; N uni2A96 ; G 4263
U 10903 ; WX 838 ; N uni2A97 ; G 4264
U 10904 ; WX 838 ; N uni2A98 ; G 4265
U 10905 ; WX 838 ; N uni2A99 ; G 4266
U 10906 ; WX 838 ; N uni2A9A ; G 4267
U 10907 ; WX 838 ; N uni2A9B ; G 4268
U 10908 ; WX 838 ; N uni2A9C ; G 4269
U 10909 ; WX 838 ; N uni2A9D ; G 4270
U 10910 ; WX 838 ; N uni2A9E ; G 4271
U 10911 ; WX 838 ; N uni2A9F ; G 4272
U 10912 ; WX 838 ; N uni2AA0 ; G 4273
U 10926 ; WX 838 ; N uni2AAE ; G 4274
U 10927 ; WX 838 ; N uni2AAF ; G 4275
U 10928 ; WX 838 ; N uni2AB0 ; G 4276
U 10929 ; WX 838 ; N uni2AB1 ; G 4277
U 10930 ; WX 838 ; N uni2AB2 ; G 4278
U 10931 ; WX 838 ; N uni2AB3 ; G 4279
U 10932 ; WX 838 ; N uni2AB4 ; G 4280
U 10933 ; WX 838 ; N uni2AB5 ; G 4281
U 10934 ; WX 838 ; N uni2AB6 ; G 4282
U 10935 ; WX 838 ; N uni2AB7 ; G 4283
U 10936 ; WX 838 ; N uni2AB8 ; G 4284
U 10937 ; WX 838 ; N uni2AB9 ; G 4285
U 10938 ; WX 838 ; N uni2ABA ; G 4286
U 11001 ; WX 838 ; N uni2AF9 ; G 4287
U 11002 ; WX 838 ; N uni2AFA ; G 4288
U 11008 ; WX 838 ; N uni2B00 ; G 4289
U 11009 ; WX 838 ; N uni2B01 ; G 4290
U 11010 ; WX 838 ; N uni2B02 ; G 4291
U 11011 ; WX 838 ; N uni2B03 ; G 4292
U 11012 ; WX 838 ; N uni2B04 ; G 4293
U 11013 ; WX 838 ; N uni2B05 ; G 4294
U 11014 ; WX 838 ; N uni2B06 ; G 4295
U 11015 ; WX 838 ; N uni2B07 ; G 4296
U 11016 ; WX 838 ; N uni2B08 ; G 4297
U 11017 ; WX 838 ; N uni2B09 ; G 4298
U 11018 ; WX 838 ; N uni2B0A ; G 4299
U 11019 ; WX 838 ; N uni2B0B ; G 4300
U 11020 ; WX 838 ; N uni2B0C ; G 4301
U 11021 ; WX 838 ; N uni2B0D ; G 4302
U 11022 ; WX 836 ; N uni2B0E ; G 4303
U 11023 ; WX 836 ; N uni2B0F ; G 4304
U 11024 ; WX 836 ; N uni2B10 ; G 4305
U 11025 ; WX 836 ; N uni2B11 ; G 4306
U 11026 ; WX 945 ; N uni2B12 ; G 4307
U 11027 ; WX 945 ; N uni2B13 ; G 4308
U 11028 ; WX 945 ; N uni2B14 ; G 4309
U 11029 ; WX 945 ; N uni2B15 ; G 4310
U 11030 ; WX 769 ; N uni2B16 ; G 4311
U 11031 ; WX 769 ; N uni2B17 ; G 4312
U 11032 ; WX 769 ; N uni2B18 ; G 4313
U 11033 ; WX 769 ; N uni2B19 ; G 4314
U 11034 ; WX 945 ; N uni2B1A ; G 4315
U 11039 ; WX 869 ; N uni2B1F ; G 4316
U 11040 ; WX 869 ; N uni2B20 ; G 4317
U 11041 ; WX 873 ; N uni2B21 ; G 4318
U 11042 ; WX 873 ; N uni2B22 ; G 4319
U 11043 ; WX 873 ; N uni2B23 ; G 4320
U 11044 ; WX 1119 ; N uni2B24 ; G 4321
U 11091 ; WX 869 ; N uni2B53 ; G 4322
U 11092 ; WX 869 ; N uni2B54 ; G 4323
U 11360 ; WX 557 ; N uni2C60 ; G 4324
U 11361 ; WX 278 ; N uni2C61 ; G 4325
U 11362 ; WX 557 ; N uni2C62 ; G 4326
U 11363 ; WX 603 ; N uni2C63 ; G 4327
U 11364 ; WX 695 ; N uni2C64 ; G 4328
U 11365 ; WX 613 ; N uni2C65 ; G 4329
U 11366 ; WX 392 ; N uni2C66 ; G 4330
U 11367 ; WX 752 ; N uni2C67 ; G 4331
U 11368 ; WX 634 ; N uni2C68 ; G 4332
U 11369 ; WX 656 ; N uni2C69 ; G 4333
U 11370 ; WX 579 ; N uni2C6A ; G 4334
U 11371 ; WX 685 ; N uni2C6B ; G 4335
U 11372 ; WX 525 ; N uni2C6C ; G 4336
U 11373 ; WX 781 ; N uni2C6D ; G 4337
U 11374 ; WX 863 ; N uni2C6E ; G 4338
U 11375 ; WX 684 ; N uni2C6F ; G 4339
U 11376 ; WX 781 ; N uni2C70 ; G 4340
U 11377 ; WX 734 ; N uni2C71 ; G 4341
U 11378 ; WX 1128 ; N uni2C72 ; G 4342
U 11379 ; WX 961 ; N uni2C73 ; G 4343
U 11380 ; WX 592 ; N uni2C74 ; G 4344
U 11381 ; WX 654 ; N uni2C75 ; G 4345
U 11382 ; WX 568 ; N uni2C76 ; G 4346
U 11383 ; WX 660 ; N uni2C77 ; G 4347
U 11385 ; WX 414 ; N uni2C79 ; G 4348
U 11386 ; WX 612 ; N uni2C7A ; G 4349
U 11387 ; WX 491 ; N uni2C7B ; G 4350
U 11388 ; WX 175 ; N uni2C7C ; G 4351
U 11389 ; WX 431 ; N uni2C7D ; G 4352
U 11390 ; WX 635 ; N uni2C7E ; G 4353
U 11391 ; WX 685 ; N uni2C7F ; G 4354
U 11520 ; WX 591 ; N uni2D00 ; G 4355
U 11521 ; WX 595 ; N uni2D01 ; G 4356
U 11522 ; WX 564 ; N uni2D02 ; G 4357
U 11523 ; WX 602 ; N uni2D03 ; G 4358
U 11524 ; WX 587 ; N uni2D04 ; G 4359
U 11525 ; WX 911 ; N uni2D05 ; G 4360
U 11526 ; WX 626 ; N uni2D06 ; G 4361
U 11527 ; WX 952 ; N uni2D07 ; G 4362
U 11528 ; WX 595 ; N uni2D08 ; G 4363
U 11529 ; WX 607 ; N uni2D09 ; G 4364
U 11530 ; WX 954 ; N uni2D0A ; G 4365
U 11531 ; WX 620 ; N uni2D0B ; G 4366
U 11532 ; WX 595 ; N uni2D0C ; G 4367
U 11533 ; WX 926 ; N uni2D0D ; G 4368
U 11534 ; WX 595 ; N uni2D0E ; G 4369
U 11535 ; WX 806 ; N uni2D0F ; G 4370
U 11536 ; WX 931 ; N uni2D10 ; G 4371
U 11537 ; WX 584 ; N uni2D11 ; G 4372
U 11538 ; WX 592 ; N uni2D12 ; G 4373
U 11539 ; WX 923 ; N uni2D13 ; G 4374
U 11540 ; WX 953 ; N uni2D14 ; G 4375
U 11541 ; WX 828 ; N uni2D15 ; G 4376
U 11542 ; WX 596 ; N uni2D16 ; G 4377
U 11543 ; WX 595 ; N uni2D17 ; G 4378
U 11544 ; WX 590 ; N uni2D18 ; G 4379
U 11545 ; WX 592 ; N uni2D19 ; G 4380
U 11546 ; WX 592 ; N uni2D1A ; G 4381
U 11547 ; WX 621 ; N uni2D1B ; G 4382
U 11548 ; WX 920 ; N uni2D1C ; G 4383
U 11549 ; WX 589 ; N uni2D1D ; G 4384
U 11550 ; WX 586 ; N uni2D1E ; G 4385
U 11551 ; WX 581 ; N uni2D1F ; G 4386
U 11552 ; WX 914 ; N uni2D20 ; G 4387
U 11553 ; WX 596 ; N uni2D21 ; G 4388
U 11554 ; WX 595 ; N uni2D22 ; G 4389
U 11555 ; WX 592 ; N uni2D23 ; G 4390
U 11556 ; WX 642 ; N uni2D24 ; G 4391
U 11557 ; WX 901 ; N uni2D25 ; G 4392
U 11800 ; WX 531 ; N uni2E18 ; G 4393
U 11807 ; WX 838 ; N uni2E1F ; G 4394
U 11810 ; WX 390 ; N uni2E22 ; G 4395
U 11811 ; WX 390 ; N uni2E23 ; G 4396
U 11812 ; WX 390 ; N uni2E24 ; G 4397
U 11813 ; WX 390 ; N uni2E25 ; G 4398
U 11822 ; WX 531 ; N uni2E2E ; G 4399
U 19904 ; WX 896 ; N uni4DC0 ; G 4400
U 19905 ; WX 896 ; N uni4DC1 ; G 4401
U 19906 ; WX 896 ; N uni4DC2 ; G 4402
U 19907 ; WX 896 ; N uni4DC3 ; G 4403
U 19908 ; WX 896 ; N uni4DC4 ; G 4404
U 19909 ; WX 896 ; N uni4DC5 ; G 4405
U 19910 ; WX 896 ; N uni4DC6 ; G 4406
U 19911 ; WX 896 ; N uni4DC7 ; G 4407
U 19912 ; WX 896 ; N uni4DC8 ; G 4408
U 19913 ; WX 896 ; N uni4DC9 ; G 4409
U 19914 ; WX 896 ; N uni4DCA ; G 4410
U 19915 ; WX 896 ; N uni4DCB ; G 4411
U 19916 ; WX 896 ; N uni4DCC ; G 4412
U 19917 ; WX 896 ; N uni4DCD ; G 4413
U 19918 ; WX 896 ; N uni4DCE ; G 4414
U 19919 ; WX 896 ; N uni4DCF ; G 4415
U 19920 ; WX 896 ; N uni4DD0 ; G 4416
U 19921 ; WX 896 ; N uni4DD1 ; G 4417
U 19922 ; WX 896 ; N uni4DD2 ; G 4418
U 19923 ; WX 896 ; N uni4DD3 ; G 4419
U 19924 ; WX 896 ; N uni4DD4 ; G 4420
U 19925 ; WX 896 ; N uni4DD5 ; G 4421
U 19926 ; WX 896 ; N uni4DD6 ; G 4422
U 19927 ; WX 896 ; N uni4DD7 ; G 4423
U 19928 ; WX 896 ; N uni4DD8 ; G 4424
U 19929 ; WX 896 ; N uni4DD9 ; G 4425
U 19930 ; WX 896 ; N uni4DDA ; G 4426
U 19931 ; WX 896 ; N uni4DDB ; G 4427
U 19932 ; WX 896 ; N uni4DDC ; G 4428
U 19933 ; WX 896 ; N uni4DDD ; G 4429
U 19934 ; WX 896 ; N uni4DDE ; G 4430
U 19935 ; WX 896 ; N uni4DDF ; G 4431
U 19936 ; WX 896 ; N uni4DE0 ; G 4432
U 19937 ; WX 896 ; N uni4DE1 ; G 4433
U 19938 ; WX 896 ; N uni4DE2 ; G 4434
U 19939 ; WX 896 ; N uni4DE3 ; G 4435
U 19940 ; WX 896 ; N uni4DE4 ; G 4436
U 19941 ; WX 896 ; N uni4DE5 ; G 4437
U 19942 ; WX 896 ; N uni4DE6 ; G 4438
U 19943 ; WX 896 ; N uni4DE7 ; G 4439
U 19944 ; WX 896 ; N uni4DE8 ; G 4440
U 19945 ; WX 896 ; N uni4DE9 ; G 4441
U 19946 ; WX 896 ; N uni4DEA ; G 4442
U 19947 ; WX 896 ; N uni4DEB ; G 4443
U 19948 ; WX 896 ; N uni4DEC ; G 4444
U 19949 ; WX 896 ; N uni4DED ; G 4445
U 19950 ; WX 896 ; N uni4DEE ; G 4446
U 19951 ; WX 896 ; N uni4DEF ; G 4447
U 19952 ; WX 896 ; N uni4DF0 ; G 4448
U 19953 ; WX 896 ; N uni4DF1 ; G 4449
U 19954 ; WX 896 ; N uni4DF2 ; G 4450
U 19955 ; WX 896 ; N uni4DF3 ; G 4451
U 19956 ; WX 896 ; N uni4DF4 ; G 4452
U 19957 ; WX 896 ; N uni4DF5 ; G 4453
U 19958 ; WX 896 ; N uni4DF6 ; G 4454
U 19959 ; WX 896 ; N uni4DF7 ; G 4455
U 19960 ; WX 896 ; N uni4DF8 ; G 4456
U 19961 ; WX 896 ; N uni4DF9 ; G 4457
U 19962 ; WX 896 ; N uni4DFA ; G 4458
U 19963 ; WX 896 ; N uni4DFB ; G 4459
U 19964 ; WX 896 ; N uni4DFC ; G 4460
U 19965 ; WX 896 ; N uni4DFD ; G 4461
U 19966 ; WX 896 ; N uni4DFE ; G 4462
U 19967 ; WX 896 ; N uni4DFF ; G 4463
U 42192 ; WX 686 ; N uniA4D0 ; G 4464
U 42193 ; WX 603 ; N uniA4D1 ; G 4465
U 42194 ; WX 603 ; N uniA4D2 ; G 4466
U 42195 ; WX 770 ; N uniA4D3 ; G 4467
U 42196 ; WX 611 ; N uniA4D4 ; G 4468
U 42197 ; WX 611 ; N uniA4D5 ; G 4469
U 42198 ; WX 775 ; N uniA4D6 ; G 4470
U 42199 ; WX 656 ; N uniA4D7 ; G 4471
U 42200 ; WX 656 ; N uniA4D8 ; G 4472
U 42201 ; WX 512 ; N uniA4D9 ; G 4473
U 42202 ; WX 698 ; N uniA4DA ; G 4474
U 42203 ; WX 703 ; N uniA4DB ; G 4475
U 42204 ; WX 685 ; N uniA4DC ; G 4476
U 42205 ; WX 575 ; N uniA4DD ; G 4477
U 42206 ; WX 575 ; N uniA4DE ; G 4478
U 42207 ; WX 863 ; N uniA4DF ; G 4479
U 42208 ; WX 748 ; N uniA4E0 ; G 4480
U 42209 ; WX 557 ; N uniA4E1 ; G 4481
U 42210 ; WX 635 ; N uniA4E2 ; G 4482
U 42211 ; WX 695 ; N uniA4E3 ; G 4483
U 42212 ; WX 695 ; N uniA4E4 ; G 4484
U 42213 ; WX 684 ; N uniA4E5 ; G 4485
U 42214 ; WX 684 ; N uniA4E6 ; G 4486
U 42215 ; WX 752 ; N uniA4E7 ; G 4487
U 42216 ; WX 775 ; N uniA4E8 ; G 4488
U 42217 ; WX 512 ; N uniA4E9 ; G 4489
U 42218 ; WX 989 ; N uniA4EA ; G 4490
U 42219 ; WX 685 ; N uniA4EB ; G 4491
U 42220 ; WX 611 ; N uniA4EC ; G 4492
U 42221 ; WX 686 ; N uniA4ED ; G 4493
U 42222 ; WX 684 ; N uniA4EE ; G 4494
U 42223 ; WX 684 ; N uniA4EF ; G 4495
U 42224 ; WX 632 ; N uniA4F0 ; G 4496
U 42225 ; WX 632 ; N uniA4F1 ; G 4497
U 42226 ; WX 295 ; N uniA4F2 ; G 4498
U 42227 ; WX 787 ; N uniA4F3 ; G 4499
U 42228 ; WX 732 ; N uniA4F4 ; G 4500
U 42229 ; WX 732 ; N uniA4F5 ; G 4501
U 42230 ; WX 557 ; N uniA4F6 ; G 4502
U 42231 ; WX 767 ; N uniA4F7 ; G 4503
U 42232 ; WX 300 ; N uniA4F8 ; G 4504
U 42233 ; WX 300 ; N uniA4F9 ; G 4505
U 42234 ; WX 596 ; N uniA4FA ; G 4506
U 42235 ; WX 596 ; N uniA4FB ; G 4507
U 42236 ; WX 300 ; N uniA4FC ; G 4508
U 42237 ; WX 300 ; N uniA4FD ; G 4509
U 42238 ; WX 588 ; N uniA4FE ; G 4510
U 42239 ; WX 588 ; N uniA4FF ; G 4511
U 42564 ; WX 635 ; N uniA644 ; G 4512
U 42565 ; WX 521 ; N uniA645 ; G 4513
U 42566 ; WX 354 ; N uniA646 ; G 4514
U 42567 ; WX 338 ; N uniA647 ; G 4515
U 42572 ; WX 1180 ; N uniA64C ; G 4516
U 42573 ; WX 1028 ; N uniA64D ; G 4517
U 42576 ; WX 1029 ; N uniA650 ; G 4518
U 42577 ; WX 906 ; N uniA651 ; G 4519
U 42580 ; WX 1080 ; N uniA654 ; G 4520
U 42581 ; WX 842 ; N uniA655 ; G 4521
U 42582 ; WX 985 ; N uniA656 ; G 4522
U 42583 ; WX 847 ; N uniA657 ; G 4523
U 42594 ; WX 1024 ; N uniA662 ; G 4524
U 42595 ; WX 925 ; N uniA663 ; G 4525
U 42596 ; WX 1014 ; N uniA664 ; G 4526
U 42597 ; WX 900 ; N uniA665 ; G 4527
U 42598 ; WX 863 ; N uniA666 ; G 4528
U 42599 ; WX 1008 ; N uniA667 ; G 4529
U 42600 ; WX 787 ; N uniA668 ; G 4530
U 42601 ; WX 612 ; N uniA669 ; G 4531
U 42602 ; WX 855 ; N uniA66A ; G 4532
U 42603 ; WX 712 ; N uniA66B ; G 4533
U 42604 ; WX 1358 ; N uniA66C ; G 4534
U 42605 ; WX 1019 ; N uniA66D ; G 4535
U 42606 ; WX 879 ; N uniA66E ; G 4536
U 42634 ; WX 805 ; N uniA68A ; G 4537
U 42635 ; WX 722 ; N uniA68B ; G 4538
U 42636 ; WX 611 ; N uniA68C ; G 4539
U 42637 ; WX 583 ; N uniA68D ; G 4540
U 42644 ; WX 686 ; N uniA694 ; G 4541
U 42645 ; WX 634 ; N uniA695 ; G 4542
U 42648 ; WX 1358 ; N uniA698 ; G 4543
U 42649 ; WX 1019 ; N uniA699 ; G 4544
U 42760 ; WX 493 ; N uniA708 ; G 4545
U 42761 ; WX 493 ; N uniA709 ; G 4546
U 42762 ; WX 493 ; N uniA70A ; G 4547
U 42763 ; WX 493 ; N uniA70B ; G 4548
U 42764 ; WX 493 ; N uniA70C ; G 4549
U 42765 ; WX 493 ; N uniA70D ; G 4550
U 42766 ; WX 493 ; N uniA70E ; G 4551
U 42767 ; WX 493 ; N uniA70F ; G 4552
U 42768 ; WX 493 ; N uniA710 ; G 4553
U 42769 ; WX 493 ; N uniA711 ; G 4554
U 42770 ; WX 493 ; N uniA712 ; G 4555
U 42771 ; WX 493 ; N uniA713 ; G 4556
U 42772 ; WX 493 ; N uniA714 ; G 4557
U 42773 ; WX 493 ; N uniA715 ; G 4558
U 42774 ; WX 493 ; N uniA716 ; G 4559
U 42779 ; WX 369 ; N uniA71B ; G 4560
U 42780 ; WX 369 ; N uniA71C ; G 4561
U 42781 ; WX 252 ; N uniA71D ; G 4562
U 42782 ; WX 252 ; N uniA71E ; G 4563
U 42783 ; WX 252 ; N uniA71F ; G 4564
U 42786 ; WX 385 ; N uniA722 ; G 4565
U 42787 ; WX 356 ; N uniA723 ; G 4566
U 42788 ; WX 472 ; N uniA724 ; G 4567
U 42789 ; WX 472 ; N uniA725 ; G 4568
U 42790 ; WX 752 ; N uniA726 ; G 4569
U 42791 ; WX 634 ; N uniA727 ; G 4570
U 42792 ; WX 878 ; N uniA728 ; G 4571
U 42793 ; WX 709 ; N uniA729 ; G 4572
U 42794 ; WX 614 ; N uniA72A ; G 4573
U 42795 ; WX 541 ; N uniA72B ; G 4574
U 42800 ; WX 491 ; N uniA730 ; G 4575
U 42801 ; WX 521 ; N uniA731 ; G 4576
U 42802 ; WX 1250 ; N uniA732 ; G 4577
U 42803 ; WX 985 ; N uniA733 ; G 4578
U 42804 ; WX 1219 ; N uniA734 ; G 4579
U 42805 ; WX 1000 ; N uniA735 ; G 4580
U 42806 ; WX 1155 ; N uniA736 ; G 4581
U 42807 ; WX 996 ; N uniA737 ; G 4582
U 42808 ; WX 971 ; N uniA738 ; G 4583
U 42809 ; WX 818 ; N uniA739 ; G 4584
U 42810 ; WX 971 ; N uniA73A ; G 4585
U 42811 ; WX 818 ; N uniA73B ; G 4586
U 42812 ; WX 959 ; N uniA73C ; G 4587
U 42813 ; WX 818 ; N uniA73D ; G 4588
U 42814 ; WX 698 ; N uniA73E ; G 4589
U 42815 ; WX 549 ; N uniA73F ; G 4590
U 42816 ; WX 656 ; N uniA740 ; G 4591
U 42817 ; WX 579 ; N uniA741 ; G 4592
U 42822 ; WX 680 ; N uniA746 ; G 4593
U 42823 ; WX 392 ; N uniA747 ; G 4594
U 42824 ; WX 582 ; N uniA748 ; G 4595
U 42825 ; WX 427 ; N uniA749 ; G 4596
U 42826 ; WX 807 ; N uniA74A ; G 4597
U 42827 ; WX 704 ; N uniA74B ; G 4598
U 42830 ; WX 1358 ; N uniA74E ; G 4599
U 42831 ; WX 1019 ; N uniA74F ; G 4600
U 42832 ; WX 603 ; N uniA750 ; G 4601
U 42833 ; WX 635 ; N uniA751 ; G 4602
U 42834 ; WX 734 ; N uniA752 ; G 4603
U 42835 ; WX 774 ; N uniA753 ; G 4604
U 42838 ; WX 787 ; N uniA756 ; G 4605
U 42839 ; WX 635 ; N uniA757 ; G 4606
U 42852 ; WX 605 ; N uniA764 ; G 4607
U 42853 ; WX 635 ; N uniA765 ; G 4608
U 42854 ; WX 605 ; N uniA766 ; G 4609
U 42855 ; WX 635 ; N uniA767 ; G 4610
U 42880 ; WX 557 ; N uniA780 ; G 4611
U 42881 ; WX 278 ; N uniA781 ; G 4612
U 42882 ; WX 735 ; N uniA782 ; G 4613
U 42883 ; WX 634 ; N uniA783 ; G 4614
U 42889 ; WX 337 ; N uniA789 ; G 4615
U 42890 ; WX 376 ; N uniA78A ; G 4616
U 42891 ; WX 401 ; N uniA78B ; G 4617
U 42892 ; WX 275 ; N uniA78C ; G 4618
U 42893 ; WX 686 ; N uniA78D ; G 4619
U 42894 ; WX 487 ; N uniA78E ; G 4620
U 42896 ; WX 772 ; N uniA790 ; G 4621
U 42897 ; WX 667 ; N uniA791 ; G 4622
U 42912 ; WX 775 ; N uniA7A0 ; G 4623
U 42913 ; WX 635 ; N uniA7A1 ; G 4624
U 42914 ; WX 656 ; N uniA7A2 ; G 4625
U 42915 ; WX 579 ; N uniA7A3 ; G 4626
U 42916 ; WX 748 ; N uniA7A4 ; G 4627
U 42917 ; WX 634 ; N uniA7A5 ; G 4628
U 42918 ; WX 695 ; N uniA7A6 ; G 4629
U 42919 ; WX 411 ; N uniA7A7 ; G 4630
U 42920 ; WX 635 ; N uniA7A8 ; G 4631
U 42921 ; WX 521 ; N uniA7A9 ; G 4632
U 42922 ; WX 872 ; N uniA7AA ; G 4633
U 43000 ; WX 577 ; N uniA7F8 ; G 4634
U 43001 ; WX 644 ; N uniA7F9 ; G 4635
U 43002 ; WX 915 ; N uniA7FA ; G 4636
U 43003 ; WX 575 ; N uniA7FB ; G 4637
U 43004 ; WX 603 ; N uniA7FC ; G 4638
U 43005 ; WX 863 ; N uniA7FD ; G 4639
U 43006 ; WX 295 ; N uniA7FE ; G 4640
U 43007 ; WX 1199 ; N uniA7FF ; G 4641
U 61184 ; WX 213 ; N uni02E5.5 ; G 4642
U 61185 ; WX 238 ; N uni02E6.5 ; G 4643
U 61186 ; WX 257 ; N uni02E7.5 ; G 4644
U 61187 ; WX 264 ; N uni02E8.5 ; G 4645
U 61188 ; WX 267 ; N uni02E9.5 ; G 4646
U 61189 ; WX 238 ; N uni02E5.4 ; G 4647
U 61190 ; WX 213 ; N uni02E6.4 ; G 4648
U 61191 ; WX 238 ; N uni02E7.4 ; G 4649
U 61192 ; WX 257 ; N uni02E8.4 ; G 4650
U 61193 ; WX 264 ; N uni02E9.4 ; G 4651
U 61194 ; WX 257 ; N uni02E5.3 ; G 4652
U 61195 ; WX 238 ; N uni02E6.3 ; G 4653
U 61196 ; WX 213 ; N uni02E7.3 ; G 4654
U 61197 ; WX 238 ; N uni02E8.3 ; G 4655
U 61198 ; WX 257 ; N uni02E9.3 ; G 4656
U 61199 ; WX 264 ; N uni02E5.2 ; G 4657
U 61200 ; WX 257 ; N uni02E6.2 ; G 4658
U 61201 ; WX 238 ; N uni02E7.2 ; G 4659
U 61202 ; WX 213 ; N uni02E8.2 ; G 4660
U 61203 ; WX 238 ; N uni02E9.2 ; G 4661
U 61204 ; WX 267 ; N uni02E5.1 ; G 4662
U 61205 ; WX 264 ; N uni02E6.1 ; G 4663
U 61206 ; WX 257 ; N uni02E7.1 ; G 4664
U 61207 ; WX 238 ; N uni02E8.1 ; G 4665
U 61208 ; WX 213 ; N uni02E9.1 ; G 4666
U 61209 ; WX 275 ; N stem ; G 4667
U 62464 ; WX 580 ; N uniF400 ; G 4668
U 62465 ; WX 580 ; N uniF401 ; G 4669
U 62466 ; WX 624 ; N uniF402 ; G 4670
U 62467 ; WX 889 ; N uniF403 ; G 4671
U 62468 ; WX 585 ; N uniF404 ; G 4672
U 62469 ; WX 580 ; N uniF405 ; G 4673
U 62470 ; WX 653 ; N uniF406 ; G 4674
U 62471 ; WX 882 ; N uniF407 ; G 4675
U 62472 ; WX 555 ; N uniF408 ; G 4676
U 62473 ; WX 580 ; N uniF409 ; G 4677
U 62474 ; WX 1168 ; N uniF40A ; G 4678
U 62475 ; WX 589 ; N uniF40B ; G 4679
U 62476 ; WX 590 ; N uniF40C ; G 4680
U 62477 ; WX 869 ; N uniF40D ; G 4681
U 62478 ; WX 580 ; N uniF40E ; G 4682
U 62479 ; WX 589 ; N uniF40F ; G 4683
U 62480 ; WX 914 ; N uniF410 ; G 4684
U 62481 ; WX 590 ; N uniF411 ; G 4685
U 62482 ; WX 731 ; N uniF412 ; G 4686
U 62483 ; WX 583 ; N uniF413 ; G 4687
U 62484 ; WX 872 ; N uniF414 ; G 4688
U 62485 ; WX 589 ; N uniF415 ; G 4689
U 62486 ; WX 895 ; N uniF416 ; G 4690
U 62487 ; WX 589 ; N uniF417 ; G 4691
U 62488 ; WX 589 ; N uniF418 ; G 4692
U 62489 ; WX 590 ; N uniF419 ; G 4693
U 62490 ; WX 649 ; N uniF41A ; G 4694
U 62491 ; WX 589 ; N uniF41B ; G 4695
U 62492 ; WX 589 ; N uniF41C ; G 4696
U 62493 ; WX 599 ; N uniF41D ; G 4697
U 62494 ; WX 590 ; N uniF41E ; G 4698
U 62495 ; WX 516 ; N uniF41F ; G 4699
U 62496 ; WX 580 ; N uniF420 ; G 4700
U 62497 ; WX 584 ; N uniF421 ; G 4701
U 62498 ; WX 580 ; N uniF422 ; G 4702
U 62499 ; WX 580 ; N uniF423 ; G 4703
U 62500 ; WX 581 ; N uniF424 ; G 4704
U 62501 ; WX 638 ; N uniF425 ; G 4705
U 62502 ; WX 955 ; N uniF426 ; G 4706
U 62504 ; WX 931 ; N uniF428 ; G 4707
U 62505 ; WX 808 ; N uniF429 ; G 4708
U 62506 ; WX 508 ; N uniF42A ; G 4709
U 62507 ; WX 508 ; N uniF42B ; G 4710
U 62508 ; WX 508 ; N uniF42C ; G 4711
U 62509 ; WX 508 ; N uniF42D ; G 4712
U 62510 ; WX 508 ; N uniF42E ; G 4713
U 62511 ; WX 508 ; N uniF42F ; G 4714
U 62512 ; WX 508 ; N uniF430 ; G 4715
U 62513 ; WX 508 ; N uniF431 ; G 4716
U 62514 ; WX 508 ; N uniF432 ; G 4717
U 62515 ; WX 508 ; N uniF433 ; G 4718
U 62516 ; WX 518 ; N uniF434 ; G 4719
U 62517 ; WX 518 ; N uniF435 ; G 4720
U 62518 ; WX 518 ; N uniF436 ; G 4721
U 62519 ; WX 787 ; N uniF437 ; G 4722
U 62520 ; WX 787 ; N uniF438 ; G 4723
U 62521 ; WX 787 ; N uniF439 ; G 4724
U 62522 ; WX 787 ; N uniF43A ; G 4725
U 62523 ; WX 787 ; N uniF43B ; G 4726
U 62524 ; WX 546 ; N uniF43C ; G 4727
U 62525 ; WX 546 ; N uniF43D ; G 4728
U 62526 ; WX 546 ; N uniF43E ; G 4729
U 62527 ; WX 546 ; N uniF43F ; G 4730
U 62528 ; WX 546 ; N uniF440 ; G 4731
U 62529 ; WX 546 ; N uniF441 ; G 4732
U 63173 ; WX 612 ; N uniF6C5 ; G 4733
U 64256 ; WX 722 ; N uniFB00 ; G 4734
U 64257 ; WX 646 ; N fi ; G 4735
U 64258 ; WX 646 ; N fl ; G 4736
U 64259 ; WX 1000 ; N uniFB03 ; G 4737
U 64260 ; WX 1000 ; N uniFB04 ; G 4738
U 64261 ; WX 686 ; N uniFB05 ; G 4739
U 64262 ; WX 861 ; N uniFB06 ; G 4740
U 64275 ; WX 1202 ; N uniFB13 ; G 4741
U 64276 ; WX 1202 ; N uniFB14 ; G 4742
U 64277 ; WX 1196 ; N uniFB15 ; G 4743
U 64278 ; WX 1186 ; N uniFB16 ; G 4744
U 64279 ; WX 1529 ; N uniFB17 ; G 4745
U 64285 ; WX 224 ; N uniFB1D ; G 4746
U 64286 ; WX 0 ; N uniFB1E ; G 4747
U 64287 ; WX 471 ; N uniFB1F ; G 4748
U 64288 ; WX 636 ; N uniFB20 ; G 4749
U 64289 ; WX 856 ; N uniFB21 ; G 4750
U 64290 ; WX 774 ; N uniFB22 ; G 4751
U 64291 ; WX 906 ; N uniFB23 ; G 4752
U 64292 ; WX 771 ; N uniFB24 ; G 4753
U 64293 ; WX 843 ; N uniFB25 ; G 4754
U 64294 ; WX 855 ; N uniFB26 ; G 4755
U 64295 ; WX 807 ; N uniFB27 ; G 4756
U 64296 ; WX 875 ; N uniFB28 ; G 4757
U 64297 ; WX 838 ; N uniFB29 ; G 4758
U 64298 ; WX 708 ; N uniFB2A ; G 4759
U 64299 ; WX 708 ; N uniFB2B ; G 4760
U 64300 ; WX 708 ; N uniFB2C ; G 4761
U 64301 ; WX 708 ; N uniFB2D ; G 4762
U 64302 ; WX 668 ; N uniFB2E ; G 4763
U 64303 ; WX 668 ; N uniFB2F ; G 4764
U 64304 ; WX 668 ; N uniFB30 ; G 4765
U 64305 ; WX 578 ; N uniFB31 ; G 4766
U 64306 ; WX 412 ; N uniFB32 ; G 4767
U 64307 ; WX 546 ; N uniFB33 ; G 4768
U 64308 ; WX 653 ; N uniFB34 ; G 4769
U 64309 ; WX 272 ; N uniFB35 ; G 4770
U 64310 ; WX 346 ; N uniFB36 ; G 4771
U 64311 ; WX 1000 ; N uniFB37 ; G 4772
U 64312 ; WX 648 ; N uniFB38 ; G 4773
U 64313 ; WX 307 ; N uniFB39 ; G 4774
U 64314 ; WX 537 ; N uniFB3A ; G 4775
U 64315 ; WX 529 ; N uniFB3B ; G 4776
U 64316 ; WX 568 ; N uniFB3C ; G 4777
U 64317 ; WX 1000 ; N uniFB3D ; G 4778
U 64318 ; WX 679 ; N uniFB3E ; G 4779
U 64319 ; WX 1000 ; N uniFB3F ; G 4780
U 64320 ; WX 400 ; N uniFB40 ; G 4781
U 64321 ; WX 649 ; N uniFB41 ; G 4782
U 64322 ; WX 1000 ; N uniFB42 ; G 4783
U 64323 ; WX 640 ; N uniFB43 ; G 4784
U 64324 ; WX 625 ; N uniFB44 ; G 4785
U 64325 ; WX 1000 ; N uniFB45 ; G 4786
U 64326 ; WX 593 ; N uniFB46 ; G 4787
U 64327 ; WX 709 ; N uniFB47 ; G 4788
U 64328 ; WX 564 ; N uniFB48 ; G 4789
U 64329 ; WX 708 ; N uniFB49 ; G 4790
U 64330 ; WX 657 ; N uniFB4A ; G 4791
U 64331 ; WX 272 ; N uniFB4B ; G 4792
U 64332 ; WX 578 ; N uniFB4C ; G 4793
U 64333 ; WX 529 ; N uniFB4D ; G 4794
U 64334 ; WX 625 ; N uniFB4E ; G 4795
U 64335 ; WX 629 ; N uniFB4F ; G 4796
U 65024 ; WX 0 ; N uniFE00 ; G 4797
U 65025 ; WX 0 ; N uniFE01 ; G 4798
U 65026 ; WX 0 ; N uniFE02 ; G 4799
U 65027 ; WX 0 ; N uniFE03 ; G 4800
U 65028 ; WX 0 ; N uniFE04 ; G 4801
U 65029 ; WX 0 ; N uniFE05 ; G 4802
U 65030 ; WX 0 ; N uniFE06 ; G 4803
U 65031 ; WX 0 ; N uniFE07 ; G 4804
U 65032 ; WX 0 ; N uniFE08 ; G 4805
U 65033 ; WX 0 ; N uniFE09 ; G 4806
U 65034 ; WX 0 ; N uniFE0A ; G 4807
U 65035 ; WX 0 ; N uniFE0B ; G 4808
U 65036 ; WX 0 ; N uniFE0C ; G 4809
U 65037 ; WX 0 ; N uniFE0D ; G 4810
U 65038 ; WX 0 ; N uniFE0E ; G 4811
U 65039 ; WX 0 ; N uniFE0F ; G 4812
U 65056 ; WX 0 ; N uniFE20 ; G 4813
U 65057 ; WX 0 ; N uniFE21 ; G 4814
U 65058 ; WX 0 ; N uniFE22 ; G 4815
U 65059 ; WX 0 ; N uniFE23 ; G 4816
U 65529 ; WX 0 ; N uniFFF9 ; G 4817
U 65530 ; WX 0 ; N uniFFFA ; G 4818
U 65531 ; WX 0 ; N uniFFFB ; G 4819
U 65532 ; WX 0 ; N uniFFFC ; G 4820
U 65533 ; WX 1025 ; N uniFFFD ; G 4821
EndCharMetrics
StartKernData 
StartKernPairs 1029

KPX dollar seven -149
KPX dollar nine -102
KPX dollar colon -36
KPX dollar Hcircumflex -149
KPX dollar Hbar -149
KPX dollar Kcommaaccent -36
KPX dollar uni01DC -149

KPX percent less -36
KPX percent kgreenlandic -36
KPX percent lacute -36
KPX percent uni01F4 -36

KPX ampersand six 38
KPX ampersand Gcircumflex 38
KPX ampersand Gbreve 38
KPX ampersand Gdotaccent 38
KPX ampersand Gcommaaccent 38
KPX ampersand uni01DA 38

KPX parenright dollar -120
KPX parenright X -83
KPX parenright guillemotright -83
KPX parenright onequarter -83
KPX parenright onehalf -83
KPX parenright threequarters -83
KPX parenright Acircumflex -120
KPX parenright Adieresis -120
KPX parenright AE -120
KPX parenright imacron -83
KPX parenright ibreve -83
KPX parenright iogonek -83
KPX parenright dotlessi -83
KPX parenright ij -83
KPX parenright jcircumflex -83

KPX period ampersand -55
KPX period two -55
KPX period eight -36
KPX period D -73
KPX period H -73
KPX period R -73
KPX period X -55
KPX period backslash -55
KPX period cent -73
KPX period sterling -73
KPX period currency -73
KPX period yen -73
KPX period brokenbar -73
KPX period section -73
KPX period dieresis -36
KPX period ordfeminine -73
KPX period guillemotleft -73
KPX period logicalnot -73
KPX period sfthyphen -73
KPX period acute -73
KPX period mu -73
KPX period paragraph -73
KPX period periodcentered -73
KPX period cedilla -73
KPX period ordmasculine -92
KPX period guillemotright -55
KPX period onequarter -55
KPX period onehalf -55
KPX period threequarters -55
KPX period questiondown -55
KPX period Aacute -55
KPX period Egrave -55
KPX period Icircumflex -55
KPX period Yacute -73
KPX period Ebreve -55
KPX period ebreve -92
KPX period Idot -36
KPX period dotlessi -55

KPX slash two -63
KPX slash seven -139
KPX slash nine -149
KPX slash colon -83
KPX slash less -196
KPX slash backslash -73
KPX slash questiondown -73
KPX slash Aacute -73
KPX slash Ebreve -63
KPX slash Hbar -139
KPX slash lacute -196

KPX two semicolon -55

KPX three dollar -102


KPX six six -73
KPX six Gdotaccent -73
KPX six Gcommaaccent -73

KPX seven dollar -188
KPX seven D -215
KPX seven F -253
KPX seven H -253
KPX seven R -253
KPX seven U -159
KPX seven V -243
KPX seven X -206
KPX seven Z -167
KPX seven backslash -178
KPX seven cent -215
KPX seven sterling -215
KPX seven currency -215
KPX seven yen -215
KPX seven brokenbar -215
KPX seven section -215
KPX seven dieresis -253
KPX seven copyright -253
KPX seven ordfeminine -253
KPX seven guillemotleft -253
KPX seven logicalnot -253
KPX seven sfthyphen -253
KPX seven acute -253
KPX seven mu -253
KPX seven paragraph -253
KPX seven periodcentered -253
KPX seven cedilla -253
KPX seven ordmasculine -253
KPX seven guillemotright -206
KPX seven onequarter -206
KPX seven onehalf -206
KPX seven threequarters -206
KPX seven questiondown -178
KPX seven Aacute -178
KPX seven Eacute -253
KPX seven Idieresis -253
KPX seven Yacute -253
KPX seven ebreve -253
KPX seven edotaccent -159
KPX seven ecaron -159
KPX seven gdotaccent -243
KPX seven gcommaaccent -243
KPX seven dotlessi -206

KPX nine dollar -139
KPX nine D -131
KPX nine H -120
KPX nine R -120
KPX nine X -36
KPX nine cent -131
KPX nine sterling -131
KPX nine currency -131
KPX nine yen -131
KPX nine brokenbar -131
KPX nine section -131
KPX nine dieresis -149
KPX nine ordfeminine -120
KPX nine guillemotleft -120
KPX nine logicalnot -120
KPX nine sfthyphen -120
KPX nine acute -120
KPX nine mu -120
KPX nine paragraph -120
KPX nine periodcentered -120
KPX nine cedilla -120
KPX nine ordmasculine -120
KPX nine guillemotright -36
KPX nine onequarter -36
KPX nine onehalf -36
KPX nine threequarters -36
KPX nine Yacute -120
KPX nine ebreve -120
KPX nine dotlessi -36

KPX colon dollar -102
KPX colon D -112
KPX colon U -36
KPX colon cent -112
KPX colon sterling -112
KPX colon currency -112
KPX colon yen -112
KPX colon brokenbar -112
KPX colon section -112
KPX colon dieresis -112
KPX colon edotaccent -36
KPX colon ecaron -36

KPX semicolon ampersand -36
KPX semicolon two -73
KPX semicolon Egrave -36
KPX semicolon Icircumflex -36
KPX semicolon Ebreve -55

KPX less dollar -159
KPX less ampersand -36
KPX less two -36
KPX less D -188
KPX less H -225
KPX less L -36
KPX less R -225
KPX less X -188
KPX less cent -188
KPX less sterling -188
KPX less currency -188
KPX less yen -188
KPX less brokenbar -188
KPX less section -188
KPX less dieresis -188
KPX less ordfeminine -225
KPX less guillemotleft -225
KPX less logicalnot -225
KPX less sfthyphen -225
KPX less acute -225
KPX less mu -225
KPX less paragraph -225
KPX less periodcentered -225
KPX less cedilla -225
KPX less ordmasculine -225
KPX less guillemotright -188
KPX less onequarter -188
KPX less onehalf -188
KPX less threequarters -188
KPX less Egrave -36
KPX less Icircumflex -36
KPX less Yacute -225
KPX less Ebreve -36
KPX less ebreve -225
KPX less dotlessi -188










KPX Acircumflex seven -149
KPX Acircumflex nine -102
KPX Acircumflex colon -36
KPX Acircumflex Hcircumflex -149
KPX Acircumflex Hbar -149
KPX Acircumflex Kcommaaccent -36
KPX Acircumflex uni01DC -149

KPX Adieresis seven -149
KPX Adieresis nine -102
KPX Adieresis colon -36
KPX Adieresis Hcircumflex -149
KPX Adieresis Hbar -149
KPX Adieresis Kcommaaccent -36
KPX Adieresis uni01DC -149

KPX AE seven -149
KPX AE nine -102
KPX AE colon -36
KPX AE Hcircumflex -149
KPX AE Hbar -149
KPX AE Kcommaaccent -36
KPX AE uni01DC -149

KPX Egrave six 38
KPX Egrave Gcircumflex 38
KPX Egrave Gbreve 38
KPX Egrave Gdotaccent 38
KPX Egrave Gcommaaccent 38
KPX Egrave uni01DA 38

KPX Ecircumflex six 38
KPX Ecircumflex Gcircumflex 38
KPX Ecircumflex Gbreve 38
KPX Ecircumflex Gdotaccent 38
KPX Ecircumflex Gcommaaccent 38
KPX Ecircumflex uni01DA 38

KPX Igrave six 38
KPX Igrave Gcircumflex 38
KPX Igrave Gbreve 38
KPX Igrave Gdotaccent 38
KPX Igrave Gcommaaccent 38
KPX Igrave uni01DA 38

KPX Icircumflex six 38
KPX Icircumflex Gcircumflex 38
KPX Icircumflex Gbreve 38
KPX Icircumflex Gdotaccent 38
KPX Icircumflex Gcommaaccent 38
KPX Icircumflex uni01DA 38

KPX ucircumflex two -63
KPX ucircumflex seven -139
KPX ucircumflex nine -149
KPX ucircumflex colon -83
KPX ucircumflex less -196
KPX ucircumflex backslash -73
KPX ucircumflex questiondown -73
KPX ucircumflex Aacute -73
KPX ucircumflex Ebreve -63
KPX ucircumflex Hbar -139
KPX ucircumflex lacute -196

KPX ydieresis two -63
KPX ydieresis seven -139
KPX ydieresis nine -149
KPX ydieresis colon -83
KPX ydieresis less -196
KPX ydieresis backslash -73
KPX ydieresis questiondown -73
KPX ydieresis Aacute -73
KPX ydieresis Ebreve -63
KPX ydieresis Hbar -139
KPX ydieresis lacute -196

KPX abreve two -63
KPX abreve seven -139
KPX abreve nine -149
KPX abreve colon -83
KPX abreve less -196
KPX abreve backslash -73
KPX abreve questiondown -73
KPX abreve Aacute -73
KPX abreve Ebreve -63
KPX abreve Hbar -139
KPX abreve lacute -196



KPX Gdotaccent six -73
KPX Gdotaccent Gdotaccent -73
KPX Gdotaccent Gcommaaccent -73

KPX Gcommaaccent six -73
KPX Gcommaaccent Gdotaccent -73
KPX Gcommaaccent Gcommaaccent -73

KPX Hbar dollar -188
KPX Hbar D -215
KPX Hbar F -253
KPX Hbar H -253
KPX Hbar R -253
KPX Hbar U -159
KPX Hbar V -243
KPX Hbar X -206
KPX Hbar Z -167
KPX Hbar backslash -178
KPX Hbar cent -215
KPX Hbar sterling -215
KPX Hbar currency -215
KPX Hbar yen -215
KPX Hbar brokenbar -215
KPX Hbar section -215
KPX Hbar dieresis -253
KPX Hbar copyright -253
KPX Hbar ordfeminine -253
KPX Hbar guillemotleft -253
KPX Hbar logicalnot -253
KPX Hbar sfthyphen -253
KPX Hbar acute -253
KPX Hbar mu -253
KPX Hbar paragraph -253
KPX Hbar periodcentered -253
KPX Hbar cedilla -253
KPX Hbar ordmasculine -253
KPX Hbar guillemotright -206
KPX Hbar onequarter -206
KPX Hbar onehalf -206
KPX Hbar threequarters -206
KPX Hbar questiondown -178
KPX Hbar Aacute -178
KPX Hbar Eacute -253
KPX Hbar Idieresis -253
KPX Hbar Yacute -253
KPX Hbar ebreve -253
KPX Hbar edotaccent -159
KPX Hbar ecaron -159
KPX Hbar gdotaccent -243
KPX Hbar gcommaaccent -243
KPX Hbar dotlessi -206

KPX lacute dollar -159
KPX lacute ampersand -36
KPX lacute two -36
KPX lacute D -188
KPX lacute H -225
KPX lacute L -36
KPX lacute R -225
KPX lacute X -188
KPX lacute cent -188
KPX lacute sterling -188
KPX lacute currency -188
KPX lacute yen -188
KPX lacute brokenbar -188
KPX lacute section -188
KPX lacute dieresis -188
KPX lacute ordfeminine -225
KPX lacute guillemotleft -225
KPX lacute logicalnot -225
KPX lacute sfthyphen -225
KPX lacute acute -225
KPX lacute mu -225
KPX lacute paragraph -225
KPX lacute periodcentered -225
KPX lacute cedilla -225
KPX lacute ordmasculine -225
KPX lacute guillemotright -188
KPX lacute onequarter -188
KPX lacute onehalf -188
KPX lacute threequarters -188
KPX lacute Egrave -36
KPX lacute Icircumflex -36
KPX lacute Yacute -225
KPX lacute Ebreve -36
KPX lacute ebreve -225
KPX lacute dotlessi -188


KPX uni027D dollar -243
KPX uni027D nine 75
KPX uni027D less 47
KPX uni027D lacute 47
EndKernPairs
EndKernData
EndFontMetrics
       @FFTMs  L   GDEFώ  h  GPOSV5    GSUB@Y    MATH28}  h  >OS/2Y-v-     VcmapI&      cvt  i9    fpgmq4vj     gasp       glyfa   {head 	T   6hhea 	T   $hmtx%߭ 	U  akern; 	  ?loca`( 	  amaxpq 
X`    nameoM 
X  =postHȖT 
  dprep;    h       =    )    )      (0    Y                      	 

              !% && 'K LL MO PT Us t     ? @@ AB CJ KQ RW X     ) *, -                 g hh ii jj km nn oy z  ! ", -    l                             
\ DFLT zarab armn brai cans cher cyrl geor grek hanihebrkana*lao 6latnFmathnko ogamrunrtfngthai          KUR  SND  URD                                           MKD  SRB                                                               4 ISM  4KSM  4LSM  4MOL  4NSM  4ROM  4SKS  4SSM  4                                                         	kern 8kern >mark Fmark Tmark \mark dmkmk jmkmk rmkmk x                 	         
                      " * 2 : B L T \ d l t |                       fF   
   f   !<   ":   #    8    9    ;   =4CCG Xr     s^      0 &  :             vy~  vy~                             * 0 6 < B H N T Z ` f l r x ~       :    :    :    :      : r  :    	    4  	  4    	`  Ltuwxz{|}  Ltuwxz{|}    R   X   ^   d   j   p   v   |                                                                                 $    l  J  GH    
           N >  X        & ,  lw lw lw fn   @CDEFI  RW             &   ,   2   8 l` l~ l~ l` l~ l` Z&   # H N T Z ` f l r x ~                                                 t  t      ;      8  8  8                             	    ! "  	    	        !                                                                   
        "  (  .  4  :  @  F                                                                                                                                    B   : v |                      $*06<BHNTZ`flrx~  h  h  h  =      D          h  h      h  V  D      h  h  =    D  D             n   n   n   n          h  h                                             	  ! # )"" 0$$ 1&, 2 9             %", , 7 8                              $  *  0  6  <  B  H  N  T  Z  `  f  l  r  x  ~                                                         &  ,  {  {  {              {  {  {  {  {  {  {          {  {          {  {  {    {          {  {                {  {  {  {  {  {  {  {  {  {  {  {         $ 6 H Z l ~     c  j    c  j    c  j    c  j    c      c      c  j    c  j      &vy~    >   D   J   P   V   \   b   h   n   t   z                                                              < w &,28>DJPV\bhntz
"(.4:@FLRX^djpv| $*06<BHNTZ`flrx~ &,28>DJPV\bhntz		
				"	(	.	4	:	@	F	L	R	X	^	d	j	p	v	|																					
 





$
*
0
6
<
B
H
N
T
Z
`
f
l
r
x
~




















 &,28>DJPV\bhntz
"(.4:@FLRX^djpv| $*06<BHNTZ`flrx~ &,28>DJPV\bhntz
"(.4:@FLRX^djpv| $*06<BHNTZ`flrx~ &,28>DJPV\bhntz
"(.4:@FLRX^djpv| $*06<BHNTZ`flrx~    U               ,                !             8         |    Q       '            n                p  p j j j ,v , ,v j j   X X X XD [j [j   ,  8   8 >   > j  p  j  j j  ^ j  j  , , , , , , , j ^ p p j  j j j          X X X X X [j   8 p p  8 v  8    j  j  j  8  8  v  j  j  j  p  D  j > > >  D > >  >  j ,     p p  j    I      ^         `            k   /               #               e         Y            Y   Y     + +   + +   + + j j + + j j + + j j + +  8  8 j j  8  8 j j , , X X , , X X , , X X , , X X   j j j j j j      j  j ,j ,j  j  j ,j ,j  D  D v v  j  j ,j ,j >  >  + +  j R j   8  8 ,j ,j           + + + + p p + + , , ,   , , , , , , , , , , ,  2         p p + +   p p + + j j j j + + j j + + , , X X , , X X , , X X j j j j     X X j j X X j j X X &j &j X X &j &j [j [j Sj Sj [j [j Sj Sj   X    X   8  8 j j   j j  8  8 ,j ,j > > S S     &j &j >  + + j j j    p p   + + j + +  8 j j  j j + + ^ + + j + + , X X , X X , X X , X X   > S S p + +  j          I   I   I            ^   ^   ^                     `   `   `                              k   k   k   /   /   /                                       #   #   #                                       e   e   e                     Y   Y   Y                              Y   Y   Y   Y   Y   Y   ^ p p j j      X p p X   X   X  p  p X &j &j [j Sj Sj  X  p   p   v    j j  j j  j j j  j ,j ,j  8 ,j ,j  v    j ,j ,j  p    j ,j ,j > S S > S S  + I  + + c + +  + +  'D  Ps  B D V k3=?PltvvD"  &vy~    B   H   N   T   Z   `   f   l   r   x   ~                                                                         0 6 < B H N T Z ` f l r x ~          c  0  0 0 0  8  0 0   0 q= i0 0  0 0 1 0  f0 0 j= 0  P  '-  /3 55 78 :; =A         0         $ 6 H Z l ~     cr      cr      cr      cr      cr      cr      cr      cr         Ltuwxz{|}    Z   `   f   l   r   x   ~                                              `                         `                 L  \ &,28>DJPV\bhntz
"(.4:@FLRX^djpv| $*06<BHNTZ`flrx~ &,28>DJPV\bhntz		
				"	(	.	4	:	@	F	L	R	X	^	d	j	p	v	|																					
 





$
*
0
6
<
B
H
N
T
Z
`
f
l
r
x
~




















 &,28>DJPV\bhntz
"(.4:@FLRX^djpv| $*06<BHNTZ`flrx~ &,28>DJPV\bhntz
"(.4:@FLRX^djpv| $*06<BHNTZ`flrx~ &,28>DJPV\bhntz
"(.4:@FLRX^djpv| R` ` S`  4  r  r  L R L        X  X  X  X  [r [r ~ x , L L     R     L  L  R   L         @   @      x         X  X  X  X  X  [r r L L L L L L L L x x x 9 9  x x x x x x 4 4 f    _   RL   F      R  I  ^   `    n      #        Y    Y Y   + +   + +   + + L L + + L L + +   + + L L @  L L @    X X   X X   X X   X X       @ @   x x x x     x x     x x     x x l l   _ e + + RL R  L   9 9   F F        X + + + +  XV + + , , ,:   , , , ,: ,: , , , , ,: ,: L       r r  X +F +F r r   + + L &L R R + + L L + +   X X   X X   X~ X~         X  X    X  X  R R X  X  &  &  X  X  & & [r [r Sr Sr [r [r Sr Sr ~  ~  x ~ x ~ L L F  L R F          Sr Sr  R &R &R   + + R &R L      XV  X + +  + + L L  R L  + + R + +  + +  X X  Xx Xx  Xx Xx  X~ X~   4 S4 S4  + +  &R    I I I    ^ ^ ^       ` ` `          n n n                # # #                      Y Y Y          Y Y Y Y Y Y   @        X  R R X    X  R R X  &  &  X  X X [r Sr Sr x r x L L  L F  L L  R F  R @  x  xx  xx x     9        x     x     x f f 4 S4 S4 f Sf Sf  Sr Sr  + +  + +  + +  ((  22 ;; Ps  ' ) xV k3=?PltvvD   Ltuwxz{|}    z                                                                      
        "  ( `                          {  {  {  {  {  {  {  { `                      < B H N T Z ` f l r x ~                  ]   x          x@    [   "   )@ >   E              "   ~   ~         x   2               x   :   :    #=  bc   GHJ                          " >   @ F L R X ^ d j p v |                     ]k xy y y  xy z [f "w )h >y Ey  `  P [ " ~[ ~t ` z xy 2{ `   u x   J   J : :  #=  QQ `` bc   @CDEFIRSTUVW    2   8   >   D   J   P   V   \   b   h   n   t   t   b   b   b   b   t   `   ~   ~   `   ~   `      Z      R     	    	     ! " #                                                                        $  *  0  6  <  B  H  N  T  Z                                                                             28>DJPV\bhntz
"(.4:@FLRX^djpv| $*06<BHNTZ`flrx~ &,28>DJPV\bhntz                                                                                                                                                                                                                                                                                                                                                                                                                                                                          % $ =   D ]    4   5   6   8   :() ;AA =HH >QR ?YY Aaa By{ C F G H I** J77 KTT L M N		 O Y \ ^ _ a c g' r)- |25 <H LP SS   hj    
           b N  j      $ * 0 6 < J m   s } P       -			      
     {  {    Y              &,28>DJPV\bhntz
"(.4:@FLRX^djpv|    L   -      .   /   +   +   '                  f                  s   .   }      /   /   /   /   '               s           /      /      /      /      s   }   \   '      /   '         R /      /      /            R   J      s   R /      /      '   s   {   y   5   D   ;      +         .      /      }R  Y $ & ' ( + , 0 1 2 6 8 = D F G H K L P Q R V X ]                      -HQRYayz{*7T	,	-		$%BCFGHOS           L rx~ &,28>DJPV\bhntz
"(.4:@FLRX^djpv| $*06<BHNTZ`flrx~ &,28>DJPV\bhntz
"(.4:@FLRX^djpv|	 						$	*	0	6	<	B	H	N	T	Z	`	f	l	r	x	~																					





 
&
,
2
8
>
D
J
P
V
\
b
h
n
t
z






















"(.4:@FLRX^djpv| $*06<BHNTZ`flrx~ &,28>DJPV\bhntz                                     L            \      /   .R       s      '      '   }      s               r      J         f      ;   R       R             s   R R    %      }   ^   G   b   `R    /   /   /   /   '                  }   s   J        f            /      /      /      /         R s      s      }   ;      \   f   '      7R /   '   z `R       R /      /      /                              .R R '   }      r   `R    T               TR T   c   R   R   J   @   @      R jR jR    bR b   }R    R                R R    R R R R    s         R 5   5   5R R aR    t   ;   Q   'R R R R R R R }   }   ^   G   ^   d   R    R R    :      :R '   a   H       R R _   R    :      R    GR     R    .R ~R J   }   '   /         '   }            '   }   ^      T      T   T      @      X         }                        T   g   ^   G         X   ^   R    f    f  f t ft  f /      /            L   B   RR f            ,   4   $R    '         _      zR f   4            L             }      `R    e               T                        '   sR     ^      G   ^         5   s      R R /   n      R R wR R JV           1               v      v    vR                   ;      n         R    R '   R    R R R R       \   R             }         %   f   O     L   5   s   /            <         \      R          &         R      x   9         \         w                           R         }R  `     $ = 
 D ] $   >   B   C   D   I   J   K   M   O   P   X   Z [ \ ]() ^-- `AA aEE bHH cNN dQR eTT gYY haa ill jvv ky{ l o q u xJ Lg ik mm  GG JJ MM     ## 44 77 }~ hi kp s{  				,	-				!"()*,/059:;=OR@@TUW[]-i25y;P}wSTkkuu  	    	     ! " #                                                                        $  *  0  6  <  B  H  N  T  Z                                                                          l  l
"(.4:@FLRX^djpv|  &,2:@FLRX^djpx~ $*06<BHNTZ`flrx~ (.4:@FLTZ`flrx~		
				"	(	.	4	:	@	F	L	R	X	^	d	j	p	v	|																					
 





$
*
0
6
<
B
J
P
V
\
b
h
n
t
z






















"(.4:@FLRX^djpv| $*06<BHNTZ`flrx~ &,28>DJPV\bhntz
"(.4:@FLRX^djpv|  &,28>DJPV^djpv| $*06<BHNTZ`flrx~ &.4:@FLRX^djpv|
"(.4:@FLRX^djpv| $*06<BHNTZ`flrx~             L    \  / .  * s  '  ' }  s     r  J{ #  {   {   j{  / /   { { s{  { o{ { '{  }{  ^{ G{ b{ `{ { ' { { } s{    J{ #   Q {  { { { s  }{    \ L  X '   ; \  / /     '   '{   s  s  r `{  {   { '  {  {     { . / ' } { r `{ { T{ {  {  {   c{ R{ R{ J|  @{ @{ { { j j{ { b{ b{ }{   / { {     { { { { { { s{  { {  3{ 3 3{ ^{ a{ p{ { ;{ Q{ '{   {  {  }{ }{ ^{ G{ ^ d{ { { { {  :  : ' a{ H{  { / { { j  :    G {    . J{ ~ ^{ } J|  E { } { {  { { E }{ p{ { t{ }{ j{ { { b{ { ^{ ~ ~  { }{ t{ ^{ { { { / ' { {  { H  /  r      t  O s   } s  '   L s o q    G G Y   N s  T{  a{ E{ { { { @{ { t{ { { { }{ { { { T{ `{ k b{ { K{ { { { { { { { t{ { '{ / / / { { 4 {  ^{  c{ s {  "{ O { , s{ O {  % ' }{  {  { O {  t{  t{    e{  s K{ { { { ' }{ E{  b{ {  t{ { { ^{ { { T{ { T T{ { @{ { { { { }{ { { { { { { { { T{ g{ b{ ^{ G{ { { { ^{ { {           L  B R f    , 4 ${  '    _  z f 4 D   L     }1 { `{  e  *  *  } T{       { ' s   ^{  G{ ^{  { { 3 s{ {     /  { 0 {  {  {  { ' l { n { T{ T{ n {   w  J{  {   { 1 {  {  v{  vq  v{   *  \  ; {   n {  {  { ' o{    {    {    { \ j{    { } {  '{ f O  { L 5 s /    <   \      &   R  x 9  { \{   w         { {   { { {  }{    y     $ = 
 D ] $   >   ?   A   B   C   D   F   G   I   J K L() M55 OAB PEE RHI SNN UPV VXY ][] ___ baa cff dij elp gt{ l t u yJ Lg ik mm  F^ ef jj ll nn pp xx  6LT
c#$i+,k/7mAAvNNwYYx__yccz}~{}~hps|	
			&&::@@ 
-//&15':P,wCVWXRTbkkeuufyyg|}hjk           " # ( .", 5 @ A          $  *  0  6  >  F  L  R  X  `  f  l  r  x  ~                                                         &  ,  2  8  >  F  N  T  Z  `  f  l  r  x  ~          {   {   {   {  {  {  {  {   {   {  {  {  {   {  {  {  {  { o  r  r  { r  {  {  {  {  {  {  {  {  {  {  {  { { { A{ { {  {  {  {  {  {  {  {  {  {  {  {   {   {  {  {  {  {  {  {  {  {  {  {  {  { >  D   > D J P V \ b h n t z                          X   (             l   >   t       V    (   t   >   \   X   (         R       D   t   R <   D     $ ( , 2 8 < = D H L R X \ ]   HYayz{*7TS          &   !0#  5 P                                                                                                                                                                               K r 9 K  D                       &                           &                   K                                               9          a  }  a                    u           9      a    aua  au /                                                                                                                                                                                                                                                                         &                                                                                                                                            D    aD                            D        k    k          D        D  DD                k        D    D                                                                                                                                                                                                                                                                                                                                                                                                                                                                    )                  a                                k}                                                                         /                D                                D                                                                      a     9                        }                                                                                                                D    }                                                                                                                     & &   9                                                                                                                                                      }                  k    }                                                                                          k}         &                                                                                                                                                        Da                                            D                                                                                                                                                                                                                              Y}                              a    a        a      u      N    aa  au                                                                                                }                          }                                                                        k        }                                                      k                                                                  a  aa                                                      k                                                                                                                                                                                                                                                                                                                                                                                      k                                                                                                                                         A                                                                                                                                                                                                                                                                                                          k   &                                                                                                                                                  k}  }D                                                                             H                                               V  a                                                                                                                                                    D                                                                                                                                                  )                                                                                                                                                      k                                                                                                                                                                        k                                                                                                                             D  N                                                                                                                   9          a  }  a                    u           9          a    au               /   9          a  }  a                    u           9          a    au             /   9          a  }  a                    u           9          a    au               /                                                                                                                                                                                                                                                                                                                 &      k                                                                                                                                                    D   &                                                                                                                                                                                                                                                                                                                   9          a  }  a                    u             9            a    au             /   9          a  }  a                                   9              a    a               /                                                                                                                                                D                                                        ?                                                                                                        }D                                                                                                                           V  Da                                            D                                                                             K r 9 K  D                       &                           &                     K                                                                              k            }    k                                                                         & /                          <       &                                                                      R    $ $  % %  & &  ' '  ) )  * *  + +  - - 	 . . 
 / /  2 2  3 3  4 4  5 5  6 6  7 7  8 8  9 9  : :  ; ;  < <  = =  H H  I I  N N  Q Q  R R  U U  Y Y  Z Z  [ [   \ \ ! m m " } } #   $   %   &   %   '   (               )   *      +         !   !   ,   ,   -   (   (      .             /

     0   "" && 100 :: ?? 

 2

 3 4  
             $ $  % %  & &  ' '  ) )  * * 	 + +  - - 
 . /  2 2  3 3  4 4  5 5  6 6  7 7  8 8  9 9  : :  ; ;  < <  = =  D D  F F  G G  H H  I I  J K  L L  O O  P P  Q Q  R R  T T  U U  V V   W W ! X X " Y Y # Z Z $ [ [ % \ \ & m m ' } } (      )   *               +      +      ,      ,   -      .      .   /   "   /   &   &   0   1   0   1   0   1      2   3   4   3   5      2      6   7   8   8   8   8      3   9      3   :   ;   ;      

  3 < 3 < = <   ;       !!  "" ##  $$ >%% 5&& '' !(( ?++ @-- @// @00 11 "33 @55 @66 A77 B88 C99 D:: ??  4 E F E F  G 4 3 H 4 I J	~	~ A		 K		 L		 B		 A		 B		 C		 D

 M   N O   a  $ % & ' ) * + - . / 2 3 4 5 6 7 8 9 : ; < = H I N Q R U Y Z [ \ m }                                            
 "&0:?

  `    $ X               R                            j    RV  X\ ^b 
dh       
J DFLT zarab armn brai cans cher cyrl georgrek$hani4hebr@kanaRlao ^latnjmathnko ogamrunrtfng(thai4           	  KUR  SND  (URD  (                          
                       MKD  SRB                                                           F CAT  ZESP  ZGAL  ZISM  bKSM  bLSM  bMOL  vNSM  bROM  vSKS  bSSM  b                                                                                  RQD aalt aalt aalt case ccmp ccmp ccmp ccmp dlig dlig dlig fina finahlighliginitinitliga$liga,locl2locl8medi>mediDrligJrligTsalt\saltbsalth                                                         	                                             
                        ( R Z b j r               $,4<DLT\dlt|    R  	 `            
DLf             	   	   	 	  	 
>  	    	 d   F   z  	    	     \      H    X               P   T    X    v                       H    P    X    `    h    p   EFG   c X   , , ,    H    !! 

      !! 

      &         
                             B    9           && 99                    D      9 L M *_	+	  j $ =  E E  G G  I I  K K  L M  N O  W W                                                                                           		              "" $$ && (( ** ,, .. 00 22 44 66 88 :; == ?? AA HH RR TT VV yz            ** __                  	+	+ 		       &         !          !           !    &                                     $ $    4 F                         "           "    $ $    4 F                            #           #    $ $    4 F                            $           $    $ $    4 F                            %           %    $ $    4 F                         &           &     (    0       RU                  '     .    6       VV XZ                  '     .    6       [\ ^_                  '     .    6       `b dd                  '     (    0       eh                  '    
         0D      F    B        t|~39 ?BEHK" &tl$ 	6(!$B',*4-00n369<8:?B>NHFJLTqNv  Ph  js  # %  B        RR5;ADGJM8
* #&D).,6/22p58;>=<AD@PVsP  
TT  VV X\ ah jp rs    ) O  B        RQ4:@CFIL
7	)"%C(-+5.11o47:=<;@C?OUrO  
TT  VV X\ ah jp rs    ) O  2        z   z    y v  vyz  ~    & 8 J l   z   z    } z    } z  
    x w u t    x w  tuwxz}    
           >  
 $      ~ |      ~ |    6       " (  I O  I L  O  L  I   I     R l       $ * 0 6 <x {v zt yr xp wo vm uk t    S ~Q }P |       & ,y {w zu ys xq wl t  R }  T }   Uiqs       3  '  B    8   	  
                    W   V        W  A     ( : F P Z f r   ,  "     +  *  "    $ ;    V    0    ( /     F      X   R    " ) 5 6 7 D F             hgiefkj  $:@GMU[   hgiefkj  $:@GMU[   kuR   , - D O  *      " &  k  u  R   , - D O \    9   %#&$)*"+',(       y!ST |}z{   L M *_	+	                                 jjjjj          
   P <       `        `              `      h  `   U                                    v                                   Z     Z   Z               Z   Z     Z   Z   Z  r   Z   Z  8     <         (: 0                 &2>JVbfjnr~&2>JVbfjnr~P  p            N     KI
P   KJ
P   KK
P@ L
   M
   N
   O
   P
   Q
   R
   S
   T
   KKU
P   LKV
P   MKW
P   NKX
P      
     oY
   pZ
   q[
   r\
   s]
   t^
   u_
   v`
   wa
   xb
   yc
   zd
   {e
   |f
   }g
   ~h
   i
   j
   kD   lE0  F  \  r     Q
   R
   S
   /W
   1X
   [T
   ]U
   _V
        (	u   ( (	  (  	          (	u   ( (	  (  	          (	u   ( (	  (  	q          (	f   ( (	~  (  	q          (	r   ( (	  ( (	   ( (	  (  	        _   (    _ (            (	r   ( (	  ( (	   ( (	  (  	       
   (   
 (            (	o   ( (	   (  	l          (	  (  	q          (	~  (  	q          (	u   (  	         (	f   (  	~           (     (         B   ((   B (  (       q   (V   q (  V       q   (V   q (  V   
     > >  @ @  ^ ` 

   KN  o      B q!/1[]_      3  3   f   n 
$`)  PfEd @  m`              ,   
            ,  
           ~OSXZbw%V_
:UWZpt?5JR>PjGv#.[jx{}EMWY[]} d q         !	!I!K!N!!###!#(#,#u#z#}#######$#$i&&&&''	'''K'M'R'V'^''''''()))A))))***/*k***++$+T,w,-%-e-o...%..MGMQWn+AKSWg&A6<>ADO#t        QWZ\pz1Ya	!@WZ`ty?	7LT@RtFn &0]w{}   HPY[]_   j t        ! !!K!N!P!!###$#+#s#z#}#######$"$`% &&&'''')'M'O'V'X'a''''''))
)@))))* **/*j*}**+ ++S,`,y- -0-o..."..MЦDLPTb"0FNVd   ( 8>@CFR  pv  a_WRA@?72/.)(&!,)'`^hgedcWUTM84953*n~e`\VT sofT	|{@:80ğmlllllyl^lXlVkkkkkkkkkkkkkQ$Q#konnmiWWG                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            <             ~           b                       O    Q  S    W  X    Z  Z    \  b    p  w    z                #      $    %  8  1  V    Y  _    a                      %      '      B      G  	  
  I      K      L      M      N  !  :  O  @  U  i  W  W    Z  Z    `  p    t  t    y                                                            ?  ?  "      #      %      &      (      )      *      .      5      8      9      :      <      I      L      Q      R      X      b      d              	        5    7  J    L  R    T          o          >    @  P    R  j    t          !      .      >      ?  F  G  @  n  v  B      K       h    #  }  &  .    0  [    ]  j    w  x    {  {    }  }                                  	      
     E  
  H  M  
<  P  W  
B  Y  Y  
J  [  [  
K  ]  ]  
L  _  }  
M      
l      
      
      
      
      
      
       d  
   j   q  H   t     P        k        x                                                  !   !	    !  !I    !K  !K    !N  !N    !P  !    !  !    !  #    #  #    #  #!    #$  #(    #+  #,    #s  #u    #z  #z    #}  #}    #  #    #  #    #  #    #  #    #  #    #  #    #  #    $"  $#    $`  $i    %   &    &  &  u  &  &    &  &    '  '    '  '	    '  ''    ')  'K    'M  'M    'O  'R    'V  'V    'X  '^    'a  '    '  '    '  '  5  '  '  C  '  '  E  '  '  F  '  (  L  )  )  \  )
  )  ^  )@  )A  `  )  )  b  )  )  d  )  )  l  )  )  m  *   *  o  *  *  r  */  */    *j  *k    *}  *    *  *    *  *    +   +    +  +$    +S  +T    ,`  ,w    ,y  ,    -   -%    -0  -e  !  -o  -o  W  .  .  X  .  .  Y  ."  .%  Z  ..  ..  ^  M  M  _        D  G    L  M    P  Q    T  W    b  n                                  "  +    0  A    F  K     N  S  &  V  W  ,  d  g  .      2      6      <      >      I       Q       k     &  o  (  A                         6    8  <    >  >    @  A    C  D    F  O    R          =      A      K      M      S       W     #  g  p  t  k  v    p                    #     V    8 9  w ; >  y @ D  } F F   J P   R k   ՠ                 ! "   $ $   ' '   ) 2   4 7   9 9   ; ;   a b   d d  ! g j  " l r  & t w  - y |  1 ~ ~  5 0   6                     - .   1 1   5 5     #   % +   - @   C C    
                                                                       	 
                        ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a                                   r d e i x  p k v j   s g wU l |>    c nT m }	 b   


 

  :' y
                   q z  5        f   q    u  -        J 3     T  99 NR 7s`s3VV9    s 3D        {  o {R     o      H     T  3f       s 
 +      b    -  { T #     \q#H 99` #fy```{   w` `b {  {   R f  f w ;  {    J/    } o   o5 j o {   - {  T7  f  D ) f s       , %Id@QX Y!-,%Id@QX Y!-,   Py PXY%%#  Py PXY%-,KPX EDY!-,%E`D-,KSX%%EDY!!-,ED-,%%I%%I` ch #:e:-         ff   @  /1 0!%!!f sr) 5     	 5@   
KTX  8Y<2991 /0  P]%3#3#5qe        B@  KTKT[X 8Y1 <20@0	@	P	`	p			]#!#o$++         `@1 		 
 91 /<<<<<<<2220@]!!!3!!!!#!#!5!!5!T%Dh$ig8R>hggh`TifaabbN   m ! ( / @U"

'&(
/)/))/B"
)	*!# *-
) 	"	&0K	TX 8YKTKT[KT[X  @8Y<<<1 /299990KSX99Y"#.'5.546753.'>54&dijfod]SS\dtzq{---@A$*.U# jXV`OnZXh     q)   # ' 3 @6$%&%&'$'B .$&($4'!%		!+14K	TKT[KT[KT[KT[KT[X 18Y991 2<0KSXY""32654&'2#"&546"32654&%3#2#"&546WccWUccUVcbWWcd1Zܻۻaۻۼ      	 0@
	 	 	  !


	
 



B	 
(('+'$
.	 .'.'!!199999991 /9990KSX99999999Y"2]@"	) * *&: 4D^ YZ
UZZY0g{  "-		'(	2' ')	#**(/2;	49?2J	LKFO2VZ	YUY\_2ji`2uyz 	2229] ]3267	>73#'#" 5467.54632.#"[UԠ_I{;Bh]hΆ02޸SUWDi;#QX?@Yr~YW׀c?}<$$/1oX3g  o  7@
  KTKT[X 8Y1 0@@P`p]#o+    {  7@   
KTX 
8YKTX 
 @8Y2991 0#&547{>;  o  @   <991 03#654<:    =J  N@, 	

	 	<2<2991 <22990%#'-73%g:r:g:PrPbybcy        #@ 	 
<<1 /<<0!!#!5!-Ө-Ӫ--     @  1 073#ӤR@  d    1 0!!d          1 /073#   B  -@  B  /991 0KSXY"3#m        #@ 	1 0"32'2  #"  		P3343ssyz     Z 
 @@B 	 KTX  @8Y1 /20KSXY"]7!5%3!!JeJsHHժ      J  @' B  

KTKT[KT[X 8Y91 /20KSX9Y"@2UVVzzv t vust  ] ]%!!56 7>54&#"5>32 Ls3aM_xzXE[w:mIwBC12\p    s ( p@. 
	 	 #) & 	)KTKT[X 	8Y991 90@	daa d! ]!"&'532654&+532654&#"5>32?^jTmǹSrsY%Đ%%12wps{$&  Ѳ|   d     @ B 	
 KTKT[X 8Y<291 /<290KSXY"@* * H Y i w  + &+6NOOVfuz] ]	!33##!55^%3`    d  ^@# 
 
KTKT[X 8YKTX  @8Y1 90!!>32  !"&'532654&#",X,$^hZkʭQTժ  10$&      $ X@$  "%"	!%1 90@ ]]"32654&.#">32  #   !2	LL;kPL;y$&W]yb       h  c@B  991 /0KSXY"KTX  @   878Y@X9Hg ] ]!#!3V+       # / C@% '-'0$*$	!0991 990"32654&%.54$32#"$54632654&#" HŚV г "Əُattt      $ X@# 
 %! ""%1 90@]]7532#" 54 3   !"&2654&#"LK:lL>$&V\s[     #   @  <21 /073#3##    #  	 %@  
 
<21 03#3#ӤR#٬@   ^  M@*  B  $#291 90KSXY"	5Ѧ   `   @  #<21 0!!!!     ^  O@+  B $ #<91 90KSXY"55//m        $ e@+$	
  	
 &%KTX 8Y99991 /9990y	z
z ]%3##546?>54&#"5>32ſ8ZZ93lOa^gHZX/'eVY5^1YnFC98LVV/5<4    q  L @2	L4307$7CM34 ((+(I+*(I,=M<991 2990 K	TKT[KT[KT[KT[X M  M M @878Y@	NN/N?N]32654&#"#"&5463253>54&'&$#"3267#"$'&5476$32 |{zy!<gثg;?@hհ{`smihZ}٘~Rk{KOHMIKL ߱kPA@fjhmWQoag}}IJ}b{     h  
 @A  

  
	


B 		 	
91 /<90KSXY" ]@B X v p  		VXPghxv|rwx] ]	!3#!#%{9҈_+           C@# 
	
 .	 !29991 /90"]!2654&#!2654&#%!2#!D+|݇f>orqp ˘  s'  6@
  021 0].#   !267#   !2'f  fjzSb_^^_HHghG         .@ 	
 2 	99991 /0`]3   !%!   )5BhPa/w.,~        .@ 
	 21 /0]!!!!!!9>ժF      # 	 )@  
21 /0]!!!!#ZpPժH7   s  9@   431 990%!5!#   !2.#   !26uu^opkSUmnHF_`%      ;  ,@ 
8	 221 /<20P]3!3#!#"d+9       .  KTX   @8Y1 /0@0@P`]3#+  f  B@  9 KTX   @8Y991 990@0@P`]3+53265M?n      j 
 @(B 	 291 /<290KSXY"]@	((764GFCUgvw		

(+*66650A@E@@@b`hgwp,]q ]q3!	!#3wH1       j  %@ : 1 /0@	0P]3!!_ժ      @4	
	

	B
 	
>
 91 /<290KSXY"p]@V	

&& &
 
45
i|{y

#,'(	4<VY	ej	vy	] ]!	!###-}-+        3 	 y@B 6 
991 /<2990KSXY"]@068HGif	FIWXeiy] ]!3!#j+  s   #@ 	31 0"  32  '   !   ':xyLHH[[bb         :@ 	
 ? 	291 /0@?_]32654&#%!2+#8/ϒ  s   R@*B 	39991 990KSX9Y""  32  #'#   !  '?
!#y;:xLHHab[     T   @5	
B 		 
?
299991 /<9990KSX9Y"@]@Bz  % %%&'&&&	 66FFhuuw] ]#.+#! 32654&#A{>ٿJx ~hb؍O    ' ~@<	
B
  %(
 "-"(99991 90KSX99Y")])/)O)].#"!"&'532654&/.54$32Hs_wzj{r{i76vce+ٶ0/EF~n|-&      J@ @ @1 /20K
TX  @   878Y@ 	 	@	p			]!!#!ժ+   )  @@ 	 
8 AKTX  8Y1 299990]332653 !  ˮ®u\*$     h  @'   B  91 /290KSXY"P]@b *GGZ} 	* &&))% 8 33<<7H EEIIGY Vfiiz vvyyu )] ]!3	3J+  D   {@I	
	
	


   B
 
	 91 /<2290KSXY" ]@
 
 

($
 
>>4
0
LMB
@
Yjkg
`
{|
 	    	 	

  !   #	$
%  <:5306	9?0F FJ@E@BBB@@	D
M@@XVYPfgab```d	d
dw v{xwtyywpx	[] ]3	3	3#	#D:9:9+    =  ;  f@ 
1 
] @ 	/<20KBPX@	

  @
 	 	
Y3	3	#	#su  \Y+3{      @(   B @ @	91 /290KSXY" 
]@<5000F@@@QQQe
&)78@
ghxp

] ]3	3#f9     \   	 @B  B 
K	TK
T[X 8Y991 /0KSXY"@@
)&8HGH	 /59?GJOUYfiowx] ]!!!5!sP=g՚o    X  ;@ C KTX   @8YKTKT[X  8Y21 0!#3!X     B  -@  B  /991 0KSXY"#m   o  0@  CKTKT[X  @8Y<1 0!53#5oXޏ    @
 91 290	#	#HHu-      1 0!5     f  1@	 D1 0 K	TKT[X     @878Y	#ofv  {-{ 
 % @'	  # 	E&22991 /9990@n0000 0!0"?'@@@@ @!@"PPPP P!P"P'p' !"'''000 0!@@@ @!PPP P!``` `!ppp p! !]]"326=7#5#"&5463!54&#"5>32߬o?`TeZ3f{bsٴ)Lfa..''      8@	 GF221 /0`]4&#"326>32 #"&'#3姒:{ {:/Rdaad  q{  ?@ 
 HE21 0@].#"3267#"  !2NPƳPNM]-U5++++$$>:#    qZ   8@  GE221 /0`]3#5#" 3232654&#":| |ǧ^daDDa  q{   p@$ 	 KE91 90@)?p? ????,//	,
o oooo	]q]!3267#   32 .#"ͷjbck)^Z44*,8
Cė   /    Y@ 
 	LK
TX  @8YKTX 8Y<<991 /22990@P]#"!!##535463cM/ѹPhc/яN  qVZ{  ( J@#	&#'	& G E)221 /990`***]4&#"326!"&'5326=#"3253aQQR9||9=,*[cb::bc     d  4@	 
 N	F21 /<90`]#4&#"#3>32d||Bu\ed     y   +@  F<21 /0@	@	P	`	p	]3#3#`  Vy   D@  O F<2991 990@@P`p]3+532653#F1iL`a(       
 @)B 	 F291 /<90KSXY"]@_
')+Vfgsw		
('(++@h`]q ]33	##%kǹi#    y  "  F1 /0@@P`p]3#     { " Z@&	   PPF#291 /<<<290@0$P$p$$$$$$$	]>32#4&#"#4&#"#3>32)Erurw?yz|v\`gb|       d{  6@	 
 N	F21 /<90`]#4&#"#3>32d||Bu\`ed  qu{   J@ 	QE1 0@#?{ {	
{{]"32654&'2  #"  s98    V{   >@ G F221 0@	`]%#3>32 #"&4&#"326s:{ {8
daa     qVZ{   >@	G E221 0@	`]32654&#"#" 3253#/s:| |:/daDDad      J{  0@ 	
 F21 /90P].#"#3>32JI,:.˾`fc    o{ ' @<S	
SB
 %(
 R"E(99991 90KSX99Y" ']@m
.	,
,,;	;
;;   $(
(*//*(() )!$'
   
	'/)?)_))))))] ]q.#"#"&'532654&/.54632NZb?ĥZlfae@f?((TT@I!*##55YQKP%$     7    8@ 
	 F<<2991 /<2990]!!;#"&5#53w{KsբN`>     X{   ;@	 
	N F921 /290o]332653#5#"&||Cua{fc   =  `  @'   B  K
TX   @8YKTKT[X  8Y91 /290KSXY"@Hj{ 		 & &)) 5 5::0F FIIFH@V VYYPf fiigh`u t{{uz  >] ]3	3#=^^\`T    V  5` @IU	
	U
	U

U
   B
 
	 K
TKT[KT[KT[KT[X   @8YKTKT[KT[X  8Y91 /<2290KSXY"@"
5
IIF
@
[[U
P
nnf
yy
	
		% %#'!%""%'	$
!#96690FHF@B@@@D	D
D@@V VVPQRRPS	T
Uc dejejjjn	agou uy}x}zzxy		{
v} @/ 	y] ]333##V`jjj  ;  y` C@F  
	
 

	B
 
 K
TKT[KT[KT[X  @8YKTX 8Y91 /<290KSXY"@


&
=1
UWX
f
vzvt






	
	)&%	* :9746	90IFE	J@Y VYYWVYVV	YPox/] ]	#	#	3	dkr))`HJq   =V` @C	 

     


B	 
	 K
TKT[X  @8YKTX 8Y91 29990KSX2Y"@ 	
#5I
O
NZ	Z
j

 
	
' $$  )(	%
$$'** 7 55008
668990A @@@@@@@@B	E
GII@T QQUPPVUVW	W
UUYYPffh
ii`{xx 		e] ]+5326?3	3N|lLT3!;^^hzHTNl     X  ` 	 @B  
KTKT[X 8YKTX  @8Y2991 /0KSXY"@B&GI+ 690@@E@@CWY_``f``b] ]!!!5!qjL}e`ۓ%    $ w@4%	 ! 	 	%	
$ 
  C
%KTX  @8Y<<299999991 99999990 &]#"&=4&+5326=46;#"3>l==k>DV[noZVtsݓXX      1 0#        $ @6%   #% # C %K
TX 8YKTX  @8Y<2<99999991 99999990 &]326=467.=4&+532;#"+ FUZooZUF?l>>l?VWstݔ   1  #@  1 990#"'&'&'&#"5>32326ian^Xbian
^V1OD;>MSOE<>L  5 `  	 e@ 
  
<2991 0KTX 
 @  
 
878YKTKT[KT[X 
  
 
 @878Y  P]#53#3 b+e    #  ! Q@+ " 	"<<<221 <9990%.'>7#&  73JDFHAMf	fIX⸹)**'# 32!      b  `@! 
  	<<1 /2<2990KTX     @878Y66 ].#"!!!!53#535632NL=ty-=))׏/я     ^ R # / @I	- '!-
-'!0 *$0*	$
$(st*(s09999999991 9999999907'#"&''7.5467'7>324&#"326{r%$&(r;t=:x=q%%&&s7t@<u\rpqqs;w>?s9q(&%%s>v:@t8s'%$|ppr   R    @FB	 		 f ef
e<2299991 /2<2<290KSXY"KTX     @878Y@(''')((79] ]!#!5!5'!5!3	3!!!c`Tþ{yT9{3{JD{3       @  <21 0##
 
     \=  > @</0* 06'&*&#<#?/ 0-	6W9-W 	W"9&"W3?99991 99990K
TKT[KT[KT[X ? @  ? ?878Y>54&.#"#"&'532654/.5467.54632{?>?>S8alӃ\]>9̭IXW:fqր][;;ȦI.Z.L-[.K''PGZsweZ54m@''TLf{xf[1,pE   F)   @ d d1 <20 K
TKT[X  @   878YKTKT[KT[KT[X     @878YKTKT[X  @   878Y@````pppp]3#%3#^y      / I C@&=>:A$104G $7aD=0^*	D^	J21 /02#"$'&5476$"3267>54&'..#"3267#"&54632 mmllmmmmllmm^^``^^⃄^]]^\^BB@zBCFInmmmmnnmmmmng^^^傁^^__^]⃅]^^! "     s;   ) _@3(%  %

* "(kl"k*229991 99990!!#5#"&546;54&#"5>32"326=P,]uu>DIE~bRhP{@p?Dq[[""CO@Mr   %#   @I   
			
	B	 	 o
on<2991 <2990KSXY"	5	5%-+#-+#RR     ^  @
  1 0!#!^   d    1 0!!d      / 8 L `@6EBC?2H09JC9 $HE301B<?96I1`K6`C<^	K^	_*M299991 /29990"3267>54&'.'2#"$'&5476$#32654&'2#'.+# ^^``^^⃄^]]^\^ㄘmmllmmmmllmm}{{nWXfi`C.;I6Bf^^^傁^^__^]⃅]^^gnmmmmnnmmmmnb>KL?gwyVpMI`3D  b+  /  1 0 K	TKT[X     @878Y!!V     u=    @ 	Z[Z1 0"32654&'2#"&546 PnnPPnoO@v+..ooPOmmOOp1.-rB          .@ 	 
<2<21 /<<0!!#!5!!!-Ө-}}    ^  J@$ } }B   ~91 90KSX2Y"!!567 54&#"5>32"?XhU4zHM98rn81^BQ##{l0    b ( H@' 
	 	 #) ~&~	)9991 90#"&'532654&+532654&#"5>32\e9}F4wCmxolV^^ad_(fQI7Z`mR|yOFJLl?<:=svcE` sRf  1@	 D1 0 K	TKT[X     @878Y3#f     V`   M@%	
 !		N F!291 2<990"`""]3326533267#"&'#"&'#%	 )I#ER2bf*V
H<9NPOONN     ;9  %@  ]]91 290!###.54$yfNݸ   HF    1 03#F   #u    @	
  '	1 /90!#"&'532654&'T76xv.W+"J/;<+->i0Y[0.W=   
 ,@ 		|]|| 1 2035733!
c)t'+n   `d    .@ 
 klk991 0!!2#"&546"32654&PXγгi~hi}|P{ݿܾs   H#   @I	
	

	   B
  o
o p<<991 <2990KSXY"5	%5	+-+-#^R^^R^   & {  'Pd'5   ?& {  ' td'5   b& u  'Pd'5    n`   $ @/   !##%"	 "	 "!&	%99991 9990KTKT[KT[X %  % % @878Y@ttttv]33267#"&546?>7>5#537ZZ:3mN`^gIYX0&ϜeWX5^1YnFC98LVV/5<6   hk& $  %u   hk& $  #u   hm& $  &u 
+@ ]1     h^& $  $u 
#+@	@O# /#]1     hN& $  "u 
+@	0? ]1      hm   ! @T!!! !!!B			  ! VV!"2299999991 /<9990KSXY" #]@ sP#fiu{yyv v!#] ]4&#"326!.54632#!#TY?@WX??Y!X=>sr?<҈_Z?YWA?XXN)sIsrFv)     H   @9B 	
 
<291 /<0KSXY"]@gww	]!!!!!!#!59=qժF՞   su'& &   z-     k& (  %u   k& (  #u   m& (  &u @@]1      N& (  "u 	@@@]1  ;  k& ,  %/u   k& ,  #/u  `m& ,  &/u 
 +1     XN& ,  "/u  
+1    
     g@ 	 2
 y<291 /220@( 	
	
]]!   )#53!!3   !iP`P5~.,     3^& 1  $u  "+@	0?""]1   sk& 2  %'u sk& 2  #'u sm& 2  &'u +@]1   s^& 2  $'u !0	+@0!?0 !/0!0]1   sN& 2  "'u 	+@	@O]1    ?  @M

	  
	
 B
 	
	 <291 <290KSXY"		'	7	7w55v8vL57y5yy5  f 	  + @<+,
 )& *&&&,+,* #
 )#3,999999991 99999990@*W ZWU!je!{vu!	FY Vj ddj(| svz(]]	32 4&'.#" &5 !27 !"&''3>_'y=_''NOy;WfNPƀ[gX@CHp@CpDfbMKYg[KKX )k& 8  %u )k& 8  #u )m& 8  &u 
 +@	/ ]1   )N& 8  "u 	+@P_@O /]1    k& <  #su       =@	 	?
 2291 /0@	?_]332+#32654&#'ђ     / @0-'!  **.	 !'	$'$- F099991 /990@@'(





 
!"& : :!MM I!I"jj  ]]4632#"&'532654&/.5467.#"#:A9`@IPAtx;e\`Wqqs`/Q*%jd_[?T>7;[gp    {-f& D   CR  @?&/&&]1  {-f& D   vR  @?&/&&]1  {-f& D  R  (,+1 {-7& D  R  .<+@	 ./<.<]1 {-& D   jR   -(+@(o(P-_(@-O(0-?( -(
]1 {-& D  R  %@&,,&2882++1 @	?5?/5/]0     {o{  3 >@C'-%= 4% :.-*1
%?47& %7& =&-7"E?<999991 2<<29990@0+0,0-0.0/00@+@,@-@.@/@0P+P,P-P.P/P0+0@@@@@@@@@? ????0,0-0.0/@,@-@.@/P,P-P.P/o oooo`,`-`.`/p,p-p.p/,-./]q].#">32 !3267#"&'#"&5463!54&#"5>32"326=DJԄ̷hddjMI؏`TeZ߬o0Z^Z55*,ywxx..''`f{bsٴ)   qu{& F   z    qf& H   C    qf& H   v    qf& H      "+1   q& H   j    @@ ]1     f' C        of' v       \f&       +1    F&    j    +1    qu  ('@^%{&%#${##{#({'(#&'('%$%(('"#" !  B('&%"! ##	#)&'! (%#"QE)99999991 9990KSXY"?*]@v%+("/#/$)%-&-'*(6%F%X X!` `!f"u u!u"%#%$&&&''(6$6%F$E%Z Z!b b! z{	
{zzv v!x"**'] ].#"32654& #" 4 32''%'3%F2X)6	~r4*!M!ü޼z&7 7kc\̑oab   d7& Q      quf& R   Cs    quf& R   vs    quf& R  s  +1 qu7& R  s   .+@	  /. .]1 qu& R   js  	+@	@O0?]1   o    )@ 
	r <<1 03#3#!!oA  H 	  + @<+,&
 )& *&&&,+,* #
 #Q)E,229999991 99999990@p(?-YVUV jf! {	
{z{ {!"#$%{&%--&Y VUZ(i fej(z tvz($$]]	32654&'.#".5 327 #"&'')gA\*g>}66]C_56`?`!*(Ou))Hn.Mw834OMx43N Xf& X   C{    Xf& X   v{    Xf& X  {  +1 X& X   j{  
+@@O0? ]1 =Vf& \   v^     V   >@ G F221 0@	`]%#3>32 #"&4&#"326s:{ {8daa   =V& \   j^  +@0? /]1     h1' q ; $   	+@@O]1   {-& qJ  D   +@o]1   h' J $    +1 @o o]0 {-&O D   " +1 u& $     {u{& D     s'k& &  #-u qf& F   v    s'm'&Lu &   	<=/1  qf& F      s'P'*Lu &   q'   F   s'm& &  '-u @]1    qf& F        m''u '   q& G  !   @_?]1    
       q  $ J@$	"  
GE%<<1 /<20`&&&]!5!533##5#" 3232654&#"F:| |ǧN}}daDDa   3& (   q = q' q    H   @p ]1      m')u (   @@ ]1    qH'    H   @p ]1      P'*u (   q'   H   u& (     qu{& H  x     g& (  'o @@]1    qa& H     !+@! ]1   sm'&\u *   	<=/1  qVZf&h  J   	
<=/1    sm& *  )u qVZH& J      sP'*\u *    @? ]0   qVZ'j   J   s'^ *   qVZ4' J     ;m'&u +   +@	/ ]1    dm'&u K   *+1 KQX  88Y@@@]       :@	 
8 22221 /<2222203!533##!##53!5qʨ"ʨ9Q     x    >@!	 
 N	2221 /<2290#4&#"##5353!!>32||}}`Bu\zzed   x^'$.u ,   	+1    g7'      +1     Y1' q.; ,   +1    H' q    +1    gm').u ,    +1    VH'       +1   u%'d   ,   u'J   L     P& ,  */u  <<1 ??]0       y{   ,@  F91 /0@4D@P`p]3#\`{  f' -\   ,   @1   V' M8   L   @F1  f_m'&.u -   +1  V\f'     +1   j' 
 .   ' 
 N      ` 
 @(B 	 F291 /<290KSXY"]@_
')+Vfgsw		
('(++@h`]q ]33	##%kǹ`!    jl'#nv /     Jl'#Zv O   <1 KQX   @8Y@  O ]0 j' 
 /   ' 
 O   @@ ]1      j'! /      '!9  O   	@  ]1    j' y1 w /     ' y  s O   KQKSKQZ[X   @8Y1      u  ?@
   :	 y<<991 /900P]3%!!'79Pw^Mo;jn       H  ^@
	 	
 z
z <<991 /90KTX  @   878Y@@P`sz
p	]37#'7Ǹ}Lɸ{JZjXj    3l'#v 1   @O ]1      dm& vB Q   	@? O ]1    3'  
 1   d{' 
 Q     3_& 1  'g  +@	/ ]1     df& Q       +@ ]1     ' QU  ~   V  ;@
AKTX 8Y21 @/0!"#367632+53265PͳNijQRW1fOCCoa`Z     Vd{  ;@  NF 21 /90`!!]+5327654&#"#367632dRQi&&||BYZuccH``01`e22wx  s1' q'; 2   +@]1   qu& qs R   +1 sm')'u 2    +@ ]1   quH&s  R    #+1 sk'+'u 2   quf'    R    s     ;@ 	
 299991 /220!!!!!   !#   !39OAg@AժF|pm|    q{  ' 3 @1  .("%4 "1	 K1	Q+E49991 2<2290@%?5_5p55555? ????	o oooo	]q].#"!3267#"&'#"  32>32 %"32654&
H̷jbdjQGьBN5Z44*,nmnm98olkp݇    Tl'#v 5     m& vB U     T' 
 5   J{' 
 U     T_& 5  '}g  @_]0     Zf& U    	+@ ]1 l'#v 6   om& vB V     m'&u 6    ))Ic:1    of&%  V    ))Ic:1  u& 6   z    ou{& V   z    m& 6  'u + ""Ic:1    of& V  '   + ""Ic:1   u& zP  7     7u& z  W      _& 7  'sg 	 +1 @_]0   7  & W  !7 p @]1        F@	 	@ @
<<1 /2<20@  @p	]!!!!#!5!!		ժA@     7    C@  F<<2<<2991 /<<<20]!!!!;#"'&=#535#53w{{%&sQQ''PO>   )^'$u 8   	'+@	]1   X7'    X   &+1   )1' q ; 8   +@	/ ]1   X' q  X   +1   )m')u 8    +@ ]1   XH'    X    +1   )o& 8    i X& X  | 	@@@!]1    )k'+u 8   ^f'    X   u)& 8      u{& X  '   D  t'&| :   +1   V  5m'E  Z   +1    t'&r| <   +1   =Vm&^ \   +1  N& <  "su  +1   \  l'#v =   X  m& vB ]     \  P'*u =   X  '   ]   @	O
_


]1 \  m& =  'u X  f& ]     +@ ]1  /    #@

L<1 /0!##53546;#"c'&яN()g     , D@% ")%,$'".E G* ,(%#'F-<2221 /<204'&#"327667632#"'&'##5353!!STTSSTTS:YX{{XY:E/tssttsstRd0110d}}    P   ) C@# 
	
 .	 *29991 /90"]!2654&#!2654&#%!2#!"#546D+|v݇f>orqp ˘0_i1F            & 8@ #(EGF'221 /067632#"'&'#!%4'&#"3276s:YX{{XY:NkrSTTSSTTSd0110dtssttsst      
  3@ ./21@	 /9/04'&#!!276!2#!#ONDNO|N8DCDCD       >@ G/221@ 	 /ĳ9/0>32 #"&'##34&#"326s:{ {:"QrdaadD     s'  0@ 	0 <1 0>3   !"&'53   !"shSzjf  fbGGaaHH_^9'(9^_  sZd $ D@"! %
 %  0%21 0&&].#   !267#   !2676;#"'f  fjzS`SfM?nb_^^_HHgh$bz  q " N@$ 
## HE#21 0@$$$$$].#"3267#"  !2546;#"NPƳPNM]-GFE0iL~++++$$>:a    
           .@ 	
 2 	99991 /0`]3   !%!   )"#5465BhPav/w.,~0_i1F        .@
. 21@	

 /0)!"!!"$54$3!!@DNN|#+  qZ   ?@G E221 /0`   ]5!#5#" 3232654&#"M:| |:ndaDDad     qVtc  ' T@ )EQ E(]99 @		(99@ %S910%!"'53254%&'& 32 6&#">kGxfu'~@3cnBOFFu\0%p9*     E  +@		 21@
 /0!5!!5!!5E>9+  u   D@&   3 91 90! !"56$3   !  7 32 7upo^  2`_FHg[    { ( @@$
	) ) #)*	&)1 90.54$32.#";#"3267# $546؃YsrSǾmTj^У%!|  &${spw21%%ݐ  f#  A@   2991 990]!!!!+53265ZpPM?nժH   V  e@#
  	LK
TX  @8YKTX 8Y<<991 2299990@P]#"!!+53265#535463cM/ѮcMPhc뻫Ph*N    sd & I@ 43!F'1@' $$' 990%!5!#   !246;#".#   !26uu^[DM?npkSUmnꪖ_`%     Rv  % @'P$&]ĵ 91@
 %$& 222990@#%$$<<$#$%#@$"! #9927654'&'3#"'&5476736,3,,3,6hC.KddK.Ch B9Iy\\yI9B z^ȮwBAWWABw1     G * O@,*&NF+291 @	'& &  	#/<<9990%27654'&'5 +"&54&#"#3>323LTWJ>ymoF||BuLibep_!edg         .@   KTX   @8Y991 /9903;#"&n?M-    
  R  E@ 
 <KTX  @   @88Y21 /<20@0@P`]33###53ʿʿA      f@ 	29 1 @%	
		B	/<9990KSXY"#54&#"	!#3632I&F%3lUqUUHy6P#1CO\[n      @		 F291 @B
/<90KSX@
Y]@5
('(++@h`]		q @%


'
)+V
f
gs
w


]46;#"3	##iL%kǹ~a#     
  *  2@ F<21 @ /<20@@P`p]33###538D     =    @	 Ĳ]9	@	]1 @ 	 /<90@2
	   <<<3''%'3%#	=G!)K4:!~2eccŊhah<   ' ' J@  )PP
(<91 @
 !!$( /<<<2909%#"'&5332653327653#5#"'&E__'9u99w{SS?yzVU|v{z5NNM_`)gb>>  f3  @)B  69 99991 /299990KSXY"]@068HGif	FIWXeiy] ]!3!+53265jG?n+   Vd{L    s    1@3 221 @		0 !   !  " !&32sy:;x Vb[[z=   g& 2 4 v'X  R   s   3@   ! 
 <1 /0!4&#!   !2!2"  327&nzy;pa'Xܯbb-LgF    qVY{  ! :@ """#E"91 04'&##"  3232"327&&&idRصRQ@TVt1098``:6        :@ 	
 ? 	291 /0@?_]32654&#%!2+#"#5468ʄv/ϒ0_i1F     V  $ O@$# %	%G	  F%22991 990@	`&&&&]%#46;#">32 #"&4&#"326siL:{ {8(adaa  T   V@ 	
?
2299991 @ 	/9990@	 @u|]#.+#33 326&#A{>ٿJx ~hb؍Oђ   r ! d@
- "
"99991 @B!   "90KSX@
Y6 327# '&546?6764'& {璑z<;YZL-|숋_ppٶ+23@@m   d{ ' @
	!! RE(99991@
	 '$$( 90@S	
 !S

	BKSX99Y" ]@/)?)_))))))]@%   '$&((*//*(
(	))$ ]@.,,,;;;;q>323267#"&546?>54&#"Lf@eaflZ?bZN?$%PKQY55##*!I@TT((      8   V   6@

O 221 @   <20;#"&5# 54!23%&'&#"3wMc/R5!n|wj=hP`@o,0A3     7V  ?@	 F<<291 @ /<2990!!;+53276="&5#53w{KsF0j&&էN01`>       X@
  @991 /2990K
TX  @   878Y@  @p	]!!##"#546;^vժ+Zi1F   7    I@	 F<<2291 @ 

/<299990]!!;#"&5#53546;#"w{KsբcMcN`NQ   f  T@
 @ @1 20K
TX  @   878Y@  @p	]!!;#"&!n?Nժ= _& 84 i'  X   N  :@! 3

 1 @  <2220! !  47!5! 32 54'5!X	ƱXw>*a"La   v  -@/<91 @	 0%2 54'&'5!'&'&33cAnMagn"ʦmWDtz      d@ @	@99/1 @ 	/9990@
	
		BKSXY""#3	632#54&9%NZUUIG9\[ny6P    =V{ j@
	  K
TKT[X  @8YKTX 8Y9991 @:	 

     


B	    9990KSX2Y"@
 
	
' $$  )(	%
$$'7 55008
668A @@@@@@@@B	E
GT QQUPPVUVW	W
UUffh
{ 		F] @% 	
#5I
O
NZ	Z
j
]+5326?3	67632#54&#"N|lLT3!;^0XQ99)
hzHTN43`rr:T*  \    @5B 	  B 
K	TK
T[X 
8Y9991 /<20KSX<<<<Y"@@
)&8HGH	 /59?GJOUYfiowx] ]!!!!!5!5!!spsT=g՚"  X  `  @1B 		 
KTKT[X 
8YKTX 
 @8Y291 /<20KSX<<<<Y"@B&GI+ 690@@E@@	CWY_``f``	b] ]!3!!!5#5!!qj}+Pe`ܐ\9     " p@

#99?O]91 @
	# #990@


@	
7;] ]%27654'&+5!5!2!"'&'5cd\] ejbVQw}~j~kKKIJꪚ8*mhzy%1   \ " ^@#Ĵ0@]9991 @# 	#990@
%2767# '&54767635!!#"~j~}w蘘QVbje ]\dck1%yz܊hm*8ꚪJIKK     hL?`   @ !91 @ B !!9/990@ @  #% 7 4F C[ T~ ]@%$57EFT\ ]@	]	5!!#"3267# $547676[eje]\dcmTjdc^QVbܨJKKK21%݊hm*8    qV`    2767# 4%$54#0!!5! TMOQWPVa ejo0, 5%b|8d1a    J $  %!!57!5!67654'&#"5>323#L:s_%'ST_ijxzX"Jh0@umHLIwKK!!C12\RI`1    ]  5@
 F1 @ 	0 4&#!!!%$ $5&
)s Q;-%,%hV)$y    hL?`  3@
F1 @ 
203 4&#!!!32!"'hi;-ԧc%,&cV)$yJ   X $  !"'&'5327674'&+#5333!plnUQQLITNPc9:V>}ws}#(rAbLr     V{   @@ F221 @B	 0KSX   Y#367632 54'&#"s4QҸMNr98xܭz
BR1pqWBA   V  &@
  F1 0@@P`p]3#  V''      V  :@	
 
	 <<2<<21 9/<2<203!!!!#!5!5!5!s____,Ԫ          
m'?   '     	f'@   '   qf'@   G   f$' -   /   V' Me   /   V' Mv   O   f' -_   1   V' M>   1   V' Me   Q     hm& $  'u  <1 {-f& D  Z  +'+1  `m& ,  '/u    Ic:1     ^f&         Ic:1    sm& 2  ''u quf& R  v  <1   )m& 8  'u <1 Xf& X  v   Ic:1  )3&U0  8     X1' q {;    )Z& 8  X6    X"& X  X )Z& 8  ]0    X"& X  ] )`& 8  Y0   X"& X  Y q{     h3& $  U     {-1&    q R;   h3& $  W     {-& D  W   H4' q>    {o' q     s % T@!$"4 3&<1 @" #%&99ܰKTX"@8Y<203##   !2.#   !2675#535!5yyuu^opkCXSUmnHF_`%'X     qV{  4 X@"2% G,E5221 @ #%)	2/3	&)/99<20`666]4&#"3263#!"&'532767!5!6=#"3253:aQQRZ9||9=nXF]@,*_EG^[cb::bc  sm& *  'Ju !<@!T!$!]1   qVZc&J J       jm''u .    m& N  'u * +1 KQX   88Y@  @@ ] su'4   2   quu{'    R   su1' q';   quu& qs     m''uy   XL/f& T    Vdf'%      Ic:1      
' =   '     	' ]   '   q' ]   G   sl'#v *   qVZc& J   v    -  5@8 221 @ 
/203!327653! '&5!#>=B>d`gd"dPNOKZ߀xxv9     V   @@ 221 @B	 0KSX   Y%#367632 4'&#"8WST=<HW5xz7GF      3k'%u 1     dd& Q   C   hs&   #\} {s&   #}   Hl'#\v    {oc&    ve fl'#v    Hc&    v     hp& $  ,z {-d' D     h6& $  (> {-H'e   D     p& (  ,z qc' H     6& (  (> qH'   H    sp& ,  ,Yz  c'f      w6& ,  (>>  UH'$      sp& 2  ,Az qud' R   s6& 2  (> quH'   R     Tp& 5  ,yz   Jc'% U     T6& 5  (>   ^H'-   U   )p& 8  ,z Xd' X   )6& 8  (> XH'   X   'v   6   o{',   V  'S   7   7'    W    Rs .  56$>54&#"57>54.#"5632?4o 1\}p_s<fh=#7KH&΃|:nCpΠ`"7Oe3HjAcR7V3"V<fqt  GO{ 4  5>54&#"57>54.#"5$32Fp>!BlJc(v];?"AW?-1CA#E
ptgDZX%KlaF='.`[b[3XpVU <Ef9,F*
;ZGan      ;m''u +    dm''!u K   *+1 KQX  88Y@@@]  V  .@	AKTX 8Y21 /04&#"#3>2#PQ̝    qpD  ( 4  %3254'"632!"'#67&5#"'&76323  76'& %44nI5"C0:XY|ˀ|YX:ST$TTTTT- H:E<$d0110d^jtssttss  q%  ; W@$ 3=E
(B!8;7B/E<̲ ;]91 @$3 <;<,<990" 7654&327654'&'52 '&54767&'&5476!˸jkkjpkk_;̨_`Lm䖋_``aCUtMMMMMN'|OEH-AA+Mdha "ccttttُcc"FYXSJ   qq  4 C@6E
B42()+&BE5221 @4)" .559920" 7654'& '&5467&'&5473327654'qSRRS SSSR:4HRQ;4?+IHIJ,MMMMMNMMJ@b@Y "ccttttُ"#VKYIAAAAAtw>  \V  @BK	TK
T[X 8Y991 @B/0KSX@
Y@@
)&8HGH	 /59?GJOUYfiowx] ]+53276=!5!5!!Hri&&gPP%01o    XV`  @KTKT[X 8YKTX  @8YĴ@`]99Դ@`]1 @B/0KSX@
Y@2&GI+ 690EIWY_fh] ]+53276=!5!5!!۞Hri&&5ejLP%01%    hP'*u $   {-'J   D   u& (   z    qu{& H   z{    s3& 2  Ub    qu1&    q s; s3& 2  \i    qu& R  \ sP'*'u 2   qu's   R   s3& 2  Wj    qu1&   q s;  1' q r; <   =V& q^ \      p\    %3254'"632!"'#67&73%44nI5"C1- H:E<Z0  pN{  +  %3254'"632!"'#67&74&#"#367632%44nI5"C1||BYZucc- H:E<Z`e22wx     7pa  !  %3254'"632!"'#67&5#533!!%44nI6!C1{- H:E<Z>  Vy`  8@  O F991 990@@P`p]3+53265F1iL`a   q 	 # / A@1E%G+G!E0<<<<1 @(
.
/22220  6& 23632 #"'#5#"'&76 '&  7/ST$Trr rrˀ]STTSST$Tjtss^ŨŢtsstjtss  qV{  % / D@1E$G+G'E0<<<<1 @
*.!02<220 '&  7"'##"'&763253632   6& STTSST$Trrˀrr ST$TdtsstjtssRŢŪjtss  |     3	#!#'#7'7	3!Jafp|҈2F;R/o]jY'FF8O      " ,  '&76!27&'!2767# '#&# rfuSv=:efc.1	 tsfjwv9t FXh$xYv+!f//_H$$\/ح     	] " +  '7&576!27&'32767#"'&#"i`UUQ.-Y_vcPNONMRS]7GGcc^N
lOU^q+$Vqrg     
  j  ;@
 :
 <<1 /<20@0P]33#!!#53ʿ_w 1    ##'!5!7	!4"gZ8f,i>	XRBYb     o{ =  4'&/&'&54632.#"3#"'&/&'&'&'53276
23@LLfLNZDE11?PS{W*L'TrGY$alfccaFF'K((%$JK((**T@%$!,KL[@~$=&[#5-,   X3`   !;#"'&/&+=!qjN\1*LlTrGY=Z^e`1~$=&[?%    P    6@ 9991 @ /0##32654&+"56;2'񍚚EOZ *,F  P  {  7@
  991 @/032654'&#"5632##/dLUIVVN}AH+Fnt     
     ( \@# 	 . &%)<229991 @(%  #/99/<20*]!!!2654&#!2654&#%!2#!#53[D+|迿ɐʇf>orqp ˘p      _@	8 AKTX  8Y<2<21 @
 	  29/<<2299990]3!33# !  5#53!3265˥ߦ®j*$}   h1    B     33#!!!!#7#!#!AX
.AA<VF㪾F   qB  & - 1  &'&'!3267#"'#&'& 3273&#"#So+Jajbck{cPm!)81G\9/ZoZ6Z44*,!	
C	"2Jc    fR  Y@ 9KTX  @8Y<2991 <2990@0@P`]#+53265#5333RM?nʿwH    V   S@$ 	 	
O F<<22991 <2990@@P`p]33#+53265#533#F1iL`(aؤ   sf  $ C@$	%" %	 %22991 99053;#"&5#   !232#"nEMMT\\xEE   qV@{  $ H@" %"%GE%22991 0`&&&]#"&=#" 3253;32654&#"@F:| |:Li1戮VּdaDDada=    
  T    @	  
?
!<299991 @!	
B 	/<229990KSX9Y"@"]@Bz  % %%&'&&&	 "66FFhuuw] ]#.+##53! 32654&#A{>ٿJxʿ ~hbw؍O      J{  =@

F<<<1 @	/<20P]###533>32.#":.I,h<ĤfcΡ        3!733!#!53!ٗٗwјv9    V`    +5326?!533!33!+N|lLT3!øLùmhzHT33    `{ 
 % @ 
'
F&22991@ & #& 	 9990@1??? ?!OOO O!___ _!ooo o! ! !]@%???? ?!?"OOOO O!O"____ _!_"]2654&#"3>32#!3267#"&߬o?`TeZ+f{bsٴ)Lfa..''     qZ{   8@  GE221 /0`]53#5#" 3232654&#":| |ǧdaDDa   {   8@	 GF221 /0`]4&#"326>32 #"&'#3姒:| |:/Rdaad`    $ C@	! G!F%22991 /0`&&&]4&#"326>32 #"&'#46;#"姒:{ {:Z[/Rdaad~Ӝ}}     {  0@ 	EH <1 0>32  !"&'532654&#"M]*ULNPƳPN3$$##++++   qs{ ' / O@(,, H"E02991 @ .*%00@11111].#"67632#"'#47&'& !23254#"NPc'>IjJ?_SPI9/-U:Me5++rQ,3H=Y}/)9DhQ#3:#:9K  qV@  $ K@$ %"%OGE%221 990`]#"&=#" 323;32654&#"@F:| |:Li1戮VּdaDDad^ؙa=    q  $ =@" %% GE%221 0`]546;#"#5#" 3232654&#"iL:| |ǧadaDDa    q{  " r@KE#91@ # 90@)?$p$$$$? ????,//,o oooo	]q]47632!"&'532767!7&'&#"qkcbdcjfg]\RS^,*4cdWWZZ  q{   A@$ 	KE91 905!.#"5>3   #" 73267qNͷjbck9 Z44*,#ė   |{ 
 4 w@6.('4KE5<Ķ&91@/.'""5	5 @&"90@
4&'<<<<<%6'6'32#"'&'&'&5>3 73;#"'&5Nf
 R`\Lladbck$˸&&i+@WR֊>8E#Z`vg'#d4*,#)u10`Z    |J   |    *| > i@@60</.'?<1@&'"*??
? =. * 999760*0<=./<#"'&'5327654'&+5327654'&#"5>3273;#"'&5|PUTZGUU]UTNHtCDFEwGQPabLq_&&i+@WR@\l%88ZX83,-F@..NBj10`ZȦF    q|  / ;@1&,E01@ 00)0 #90"327654'&+5327654'&'2#  76`cchҗUTNHtCDFEhqr<<p|֗nrot88ZX83,-F@..NO]@Al> V`  K@ 	 	
O F<<22991 <2990@@P`p]33#+53265#53F1iL`(aؤ  qV  0 U@)	&#-*	*-+& G E122991 /990`222]4&#"326!"&'5326=#"32546;#"aQQR9||9iL=,*[cb::bca  qVZ` 
 # C@# GE$21 /990`%%%]!"326!"&'5326=#"43!aQQR9|=ͻ,*[cb:*     qO{  8@  4E1 990%#5!#"  !2.#"326Ae{-h]_cƳO|$$>:77>>     `Rd`  # y@
% $ĵ  91@

$ 222
990< <<  <  <	3#"&54767327654'&'bB_j&;;&j_BC(::(xܱSccS$-EIdccdIE-    `d`  # y@
% $ĵ  91@

$ 222
990< <<  <  <	3#"&54767327654'&'b)rG,EE,Gr)C'88'bLx>>xLb-!@2FF2@!-    VX`  9@	 
	N F21 290`]332653##"&||Cua{Vfc     d  C@!	 
 N	F2991 /<9990`]#4&#"#46;#">32d||iMBu\~aed   Vd ! J@%	 "
 NF"2991 /9990`#]+53265#"#46;#"632diLiMHa=~a        >@  F<<<2221 /<20@@P`p]33###533#¸`<Ĥ   n`N    t  `  '@
 	
221 @		/2205!#3!53t褤   K   # <@%V
 V$<<1@#!!  //2<903327673#"'#&'&#"#67632=&}33[&}33[	%$RIJ	%$RIJ  M  T   5@ <2<1@
  /9/<2033##4'# 7632&#"3=5*7M\TK9     V_  (@ F1 @
 990;#"&5y=x1F|t(     L6 $ @#&#" F%<̲ #91@B ""	"  /9/ 	990@ $#@
  ** 8 ;I LT [q ]@$$%$$5$7E$FT$\ ]@	]2!"'&'5327654'&+5!#3!CicUQ^cdjTmcd\[je8+lh%12KKKJ3L     b & ^@ PP
F'<91@
 #'' <<<290@0(P(p(((((((	]%#"&5332765332653#5#"'&Cb`ruSSrw=ZXyzVUy=<b`^zbze32>>  Vb & a@ PP
F'<91@
 #'' <<<290@0(P(p(((((((	]%#"&5332765332653##"'&Cb`ruSSrw=ZXyzVUy=<b`^zbzZe32>>  V{ 0 c@ PP)%'F1291 @% *!*-(&/<<290@02P2p2222222	]>32+5327654&#"#4'&#"#3>32)E__RQi&&ru99wSS?yzUV|v{zH``01NM_``gb>>  Vk{  Q@ NO
F2991 @	 /9@	
990`]#4&#"+532653>32k||F1iLBu\sated     VJ{  ;@N	F21@ /	
90&54&#"#3>32;#"R||Bu&&i1F``edH10    d` 	 y@B N F
991 /<2990KSXY"]@068HGif	FIWXeiy] ]!3!##`yl  qu{    ,@ 
QE221 0"!.265!2  #"  qt蔔98     q  $`   I@ 	E2ĳ
991@


 /<<@
9/0!!!!! '&76!#";:E*%xxxx%`ݛlklm  >|  $ 2@&E E%1 @ 
#%<202765 26=   "&'"&H`k&InI&k`B"F:.aעģ0[1[0T\l6puy  pVj     `  /@	
/2991 @
  /90%!"/32653#r%8<X
#˾N      
  /@	
/2991 @
  /90%!"/32653#r%8<X
#λ      Vv`  D@O
/2991 @ 
  9990%!"/32653;#"&5r%8<XLi1F
#˾Na  XJ{  3@ 	
 F21 90P].#"#3>32JI,:.˾
fc     VJ{  :@  F21 90P].#";#"&53>32JI,Li:.˾atfc      ~{  %@ 21 @
 /29903!5346;#" iLAa   t  ~{  %@ 1 @
 
/29903!534&+532ʴLiAa     `   @4	
B 		 

F299991 /<9990KSX9Y"@]@Bz  % %%&'&&&	 66FFhuuw] ]#.+#!232654&#0s2âJ{Qpwu
t]:'`iVNM`       `   E@	 F299991 @	 /29990332673#!32654&#Q{Jî2s0jp|Ɓuw`':]t
i`MNV  oV{ 0 @CS('	
S'('B1
'( !.1'
($ R$+E199991 90KSX99Y" 0].#"#"/;#"&=32654&/.54632NZb?ĥdXLie@f?((TT@I!*ajYQKP%$    V  4@O
 F<22991 @
99046;#"+5326cMF1iK»Ph)a    V   O@ !O
F!<<229921 @ !!
!99<20546;#"3#+53265#53#5cMF1iK`NPh(aؤi    7V5e  "O1 @
04&+532;#"&McKi1F(hPa V   2@	O 221 @  /<20!3## 54!346;#"#"3276w5RcMów|n!o@`Ph3A0     7^  3@		/<<2991 @ /<2990]!5!4&+5323#{Ksբ>`N  7V  =@ 	 F<<2991 <2990]!!;#"&5#53w{Liൣa>     `   C@ 
N F2221 /222220`  ]3!33##5#"&=#5!326:CuȮ||h<fc
     q`  S@! 
 1 @  <2220@@@OO]# #" 5467#5!32654&'7!aaffH$HB׋B     \b  ,@  	F91 @
/0+"'&53732654'&'5\FRQ&(g3JInhX3"``612Ğec0[s     =  `  h@'   B K
TX   @8YKTKT[X  8Y91 /290KSXY"33#	=`T  V  5` @	
 K
TKT[KT[KT[KT[X  @8YKTKT[KT[X 8Y91@

  /<<290@0U
U
U
	
U		
   BKSXY"@
-
:
FFI
O
TTZ
_
aai
vpvp
	
		%%#'!%"" %'$
!	#96690FHF@B@@ @DD
D	@@VVVPQRR PST
U	cdejejjj na	gouuy}x}zz  xy{
v	} @/ y] ]!###335%jj`j   =    F 1  /<0  <<<	
9@	3676;#"#	=PHJ|lL*./!>=$#^l   f  k`  8@

 	91  /20@  3	3#f%.]`8     XV`  @"B	
 
O KTKT[X 8YKTX  @8Y2991 /0KSXY"@B&GI+ 690@@E@@CWY_``f``b] ]!!;#"&=!5!qjLLi/F7e`ۧa%    X`  ! @ "KTKT[X 8YKTX  @8Y299<21 @  /<0@BKSXY"@:&GI#+ #690#@@ECWY_#``fb###] ]!367632+#47!5!3254qjL"TA`:&>R~ie8FX`ۢG7W9W`/=3<;4%6]   XL/`   @
"!̲ 91@B !	! 9/ 	990@  @
  ** 8 ;I LT [q ]@  %$ 5 7E FT \ ]@	]2!"'&'5327654'&+5!5!<jbVQ^cdjTmcd\]ej8*mh%12KKKJ     mLl` $ -   76654'&+5!5!2#4'07&#"327*\^ejeidTQ'd(	}ŃcL;*1JJ$8+lgqUeR8y*K/K     X    4@	 1@	  /KPXY032765&'&#"56763 #T?V:9cPONNLQQUmlprLbAr+#}swt     X    5@
 E1@  /KPXY0#&'&5476!2&'&#"3ʪplnUQQLNONPc9:Vws}#+rAbLr   X    7@	 1@  KPXY03!"'&'5327674'&#TʪplmUQQLNNOPc9:Vtws}#+rAbLr    XL # -% $21 @	$$0476!2&'&#"32767# '&5XnUQQLITNPf::fPNONLQQUn@}#(rAAr+#}  s   "  47632"'&         !   " 0." B^ "NH#:xy.""""./B!!H[[      >`    q|  / =@1	%,%E01@ 0
	0"0 (
	90";#"327654'&%  !"$5467&'&5476EwEFDCtHNTUhcc`a|p<<rq..@F-,38XZ88torn¶lA@]ON  q ' G@'( %%( 4"E(1 999990%#5!#"  !2546;#".#"326Ae{-7i1iM_cƳO|$$>:!a>>    `   V.    9@	 F<<991@ 	 /<203#33## 54!3#"32767Ku_+xG`͋BA0    L` 
  ##	33R9LT#       `  @  F1 /03!!`3    qV  $ C@	#%%"G E%221 0@	`&&&&]32654&#"#" 32546;#"#/s:| |:iM/daDDada     X   $ L@&  %<<ĳ# 1@$!	  /<2KPXY032765&'&#"56763 3###53T?V:9cPONNLQQUmlprLbAr+#}swԤ    X   $ M@&"#E%<<ĳ " #1@$!### /<2KPXY0535&'&5476!2&'&#";3##plnUQQLNONPc9:V>ws}#+rAbLr   q  & )    76'& %3!!!+5#"'&7632/ST$TTTTT iL:XY|ˀ|YXjtssttssH^Lۓd0110M     qL 4 @  #5#"'&76323!2!"'&'5327654'&+5 76'& Z:XY|ˀ|YX:jejbVQ^cdjTmcd\]:ST$TTTTT3d0110d^L$8*mh%12KKKJjtssttss   q   3 :    76'& %%!332!##47!#5#"'&763233254#/ST$TTTTTghL<):XY|ˀ|YX:FXjtssttss_ 3<;4d0110d^6[  7  @ 7  !!3!27654&/.54632.#")"'&5#53w{%&s@FF^@fLNZb?ƣ|LQQ''-,4IM*$((TT@I!,e>PO`>    7V & /  !05476;#"+53276=#"'&5#53!3wxWQîc&'QRF1i&&QQ3%&sN[V((h)``01PO`>''  7p - 9 D  !6!2&'&#"63 #"'47!"'&5#533276'&#"&57!3w{ UQQLNONPcccO+eKTIQQ;BS_r(ր%&sz#+qrfr	v)2LOAPO`>'KV
	''   /Vo 5  +5327654&#"#!##535476;#"!;67632oRQi&&||ӹWWc'&-BYZuccH``01/яNUV((hce22wx    A '  3!27654&/.54632.#")FF^@fLNZb?ƣ|LO-,4IM*$((TT@I!,e>     
  @	 F<2991 @
B /0KSX@
Y@B&GI+09@@@@@CEWY`````bf] ]3!!!+iLLۓ     6    333##333##6ttttU=  6    3@	 <2<21@  220!#!#!#!#6kkUXrX   J  3@ NF
21 @ 	0%#"&54&+53232653#׃Li1FęaBþy      Vv ! :@# NF
"21 @ "
""0%#"&54&+53232653;#"&'׃Li1FPh2FęaBþyf  u  0@ 
</KQX@8Y1] @<0#4&#"#3>32tNN^luu)qJy}wYYk\g88   u  :KSX@ 
</KQX@8Y1] @<0Y#4&#"#46;#">32tNN^lugrB0)qJy}wYYk\xkW6Vr88       #@ <<1 @  03+5327653#zt43r,Bttx66XVr   u  @ 1 @ 	/0.#"#3>32.biuu$uT
	qksa97     H  <1  	/032653#5#"&'H.bitt$uT
	qkJa97  Hu  '	 <1 @
 	/<032653;#"&=#"&'H.bit0B,rg$uT
	qkJV6Xlxa97        !  +33276?3327654'&+CFCDtk=%%(f{n!!"}K'))'K}N;[--s?5 /.  6   333##6tt  &   +53276?331/.N]D0 {{bp"#WK/i  tf   tf&  t   
   
      @
  1 0#5Rڬ@  u  1 ܴ?O]ܶ  ]<1  ܲ  ]9052654&#52u@XX@sPOOP{X@?X{POPP     u  1 @    ]<1  Բ  ]90"'&4763"3sPOOPs@XX@PPOP{X?@X    u  +@	  91 @	 	032765&'&#"567632#'y7$#?q22110335WDDFk[@*7K$@`	
XFh_@C   u  -@
   91 @	 0#&'&547632&'&#"3kGDEW53301212q>$%6y[AmC@_hFX
	`@$K7*@   2   %%g  2   5-5g'   |?f  =u91  2]90 K	TKT[X     @878Y3##fg    |?f  Lu91  <Բ ]90 K	TKT[X     @878Y@5 :5:3]]33|g   ?f  7@ u91 290 K	TKT[X     @878Y3#'#f    ?f  7@ u91 <90 K	TKT[X     @878Y373x  ^  @ 1 @/0#^+   b+ q   sRf   3#f  f   	#ofv   ^   @ 1 @/0%#^+    +T q  ^       #onv   sR   3#l   o  #   E@  <KPX@@88Y2991 /0@	  ` o]@P```dd ]!!!eJ'  o#  4  KPX@@88Y91 0@  ` ]@	P``d ]!!eJ   u#     u#        !533>j,    5!## ,  d U   533##5#5Du     d&u   !5!&>ߖ   )9H  W@ VV 1 <0 K	TX     @878Y KTKT[KT[X  @   878Y332673#"&vaWV`v
HKKJL   Df  N@	 d 1 0 K
TKT[X  @   878YKTKT[X  @   878Y3#       @	 VxV1 04&#"3267#"&54632X@AWWA@Xzssss?XW@AWX@sss Lu     @
  
'1 /90!33267#"&546w-+76 >&Dzs5=X..

W]0i  J7  c@$  VwVv99991 <<99990 K	TKT[X     @878Y'.#"#>3232673#"&9!&$}f[&@%9!&$}f[&@Z7IR!7IR     f   B@  991 <20 K	TKT[X     @878Y3#3#߉fx     %3;#"'&5&&i+@WRd10`ZȢ  f   '#7'373\\]]\aa``     u    # 5473733254/MM    z   /1  /03#ztt    u/ 2  &'&#"#"'&'532654'&/&'&547632j1549W++](}24NM9>=D@?>=RX o(l00GF@99a/$*+MW33

k2-*)*IX01	   u!   #'#37͉H+  u      X  @	  1 /0!!5!AGЈ    X  '@??//  21 /]0!!5!3A4     X  @  21 /0!!5!3Ahh       X  '@pp00  21 /]0!!5!3A4     X  @	  1 /0%3!5 ?  p   +v' q    q  m     9  3    vJ ! _@ 	Vw	V
v"99991 @ 			"<<99990 K	TX     @878Y'&'&#"#67632327673#"&9&}33[&@%9&}33[&@7
	%$RIJ!7
	%$RIJ  {f   6@ D91 0 K	TKT[X     @878Y	#	mXfv q{Pf   6@ D91 0 K	TKT[X     @878Y3#fs  {?f   <@ u991 290 K	TKT[X     @878Y3#'#?fs   H7    b/ q    | !     )1H     {Z   %@  91 0 @4D]3#^  {)    I@ 	d d	91 <20@#4D```` `````ppppp]3#%3#^y) 7{  "@	V@V/1 @@/0632#546?654&#"7pihX,#w3-.>GZdH3UC=A 	 (6%""($4    f     {Cf   <@ u991 <90 K	TKT[X     @878Y373Nxs   D   /1 /0#DD   '4        ]f   B@  991 <20 K	TKT[X     @878Y#!#͇ fxx  )1V'  B     )1H  VV /1 
 /<0#.#"#> vaWV`v
")KKJL   D(  
@ 0#3Ӥ?       #55#53pp{       53#7"op{ y    3#@u  U C  qPU v   $<   #5353#ĠxxxF      33##xx2x U ?p   !5!#I  k {  1@V /KTKT[KT[X   @8Y21 @
 /0532654&'3#"&=X..

W]0iw-+76 >&Dzs5  V  @
V21 @ /0"&5463"3VZ||Z(55(}ZY|x5'(5    M   3!5353D   M   #5!##걈ň   $   #53533##Ġxxxx       5!   zV    '+53276=0RQi&&``01  wV    %3;#"'&5w&&iQR10`` Zs   3#'S jC   (   @ VxV1 @	/04&#"3267#"&54632[6'(55('6y|ZZ||ZZ|&65'(56&Z}}ZY||   jT  
@  03#Ӥ#u   z     Lu        D   /1 /0#D`t P   #5!#fJ   c9X   #"4533273273"<tuhevifvtR  C& ' K	TKTKTKT[[[X  @   878Y =& ' K	TKTKTKT[[[X  @   878Y 91X   61U   #.#"#> vaWV`v
"6KKJL  9HS  /T      B      
         #"'&'.#"5>32326SKOZqMg3OINS5dJt]F;73
!;?<6
7=    xh   !5xh    h   5!Ĥ   h   '`_^NO       'ygfFXY      @
V21 @ /02#52654&#Z||Z(55(B}ZY|x5'(5 [   3!53[J !    !5#>J*> c9X   632#&#"#&'"#72;tvgfvifvtR    +   '7'77}`}}`}}`}}`p}`}}`}}`}}`     .54675>54'&'C!RI	7!RI	0PQn
+0PQn
: '!   !   f C    qPf v    H7      Fb    V     +I   #5!#!Ֆ֖V,  2    !5!5!5!>>2xx      3#3#@`tt     !#!*>, Jf '  73327673#"'&'#7&'&#"#67632Bmk&}33[& !Bnk&}33[& g	
$%RJIg
$%RJI J  ! %  '.#"#4632326=3#"&3#3#9$(}gV$=09" (}gT";薖Җh!2-ev3)dw.C  J"$ $    c(   7!#'73!'3p~(͛  3   #557'2d͛~~  x   &'&4767@*,,*@rNPPNr*,@A++{OPPN `1'    +  !   x   050567654'&xrNPPNr@*,,*{NPPO{++A@,*.D     o      2>&"762"'"&46264&"	5O57O5>||=>||66O5555M75m?|}A@}|6M65O5p"    pk"P   pk   !!p k  pT   !!p ଔ   *' #  '&'&#"#67632327673#"'&O,$e5Fqp[?9ZO,$a9Gqp[?9J7
$0GJI"7
$,KJI   pn#     w(   5!'3#7ws~~d͛   q     `         !#!#!#Sb+    e   !#####b+    tf  @  1 03Ant     V H  @ 1 0%#AnH      3     y`   V   #"'&=3;
#V!.    {   q{' yO F   {' y    #   f -   sRf  1@	 D1 0 K	TKT[X     @878Y3#f    FR& j    l  @_]@_q0     hf'  '   HF y    uf't  +       f'  -       }f'z  /     f'  5(   f'n  :      f'h  >6    '.  N    h $      %      j  @ 1 /03!!)ժ     h   =@B 1 /0KSX@  Y	!3f5:9+      (   \   =     ; +    s   ! 2@" ""#3 "1 0!!" 3276'&'  ! '&76>b܁܁:xżp[bb      ,     j .      h  <@B1 /<0KSX@ Y3#3#:9&+       0     3 1      b    *@ 	 <<1 /0!!!!!!29iggq s 2     ;      3        F@B
 <<1 /220KSX@
 Y%!!5	5!!>!8ߪp    7     <    s     ' <@)! %(<<<<1 @ '	%'/<<<<0367654'&'&'&76753#bbʖbbWssWWssW  =  ; ;    s    .@ <<1 /22<20!6'"'&336763#ּՂnʊnhg椌gH   N   & 3@&( "3'1 /<2220%!567654'&#" !5!&'&576! cccd?IH1/GGaʦa>      XN'"/u/   	+1    N'"qu:   +1   qf&F  n    f&P J     Vdf'   L     f&N  F   *&Z       qy  * @,%E+99@
?/]q @)!/99@  <<10@]@IIIJNL NIK	]@:9:88?< >]@++* ))]@ ] @++]'&#"3273;#"'&'#"'&763 N,-=MKLyHc(	#) Xn^T).^,ru7	nik%1)0T*XoW)&   V!   7@E F21 @	90%#! !"3 5 4# yYo 0kEdZ&J:@   V`  @@1 @/<20@ 993#&+532i^;,_1FLdVD~     qu  - T@(/E(
Q!E.
]99 @% %.99@S910&#"#"'&4767&5!232654'&'&fu5KxD7VUV[a~@Fu\0%p̥@$OF(Iqrs`g  | 2 =@"33'(#,34'0E31 0&'&547632&'&#";#"32767#"'&546p<<rqLbaPQGwEFDCtHNTU]UUGZTUP\A@]ON..@F-,38XZ88%[[l   kR  >@
KQX  @8Y1 @
 20%#457654'&# !5! ʄOTJPE*  :;f,KOxsPWKL,#%5,*3Y'i    Vd{  1@F N	F21 /0@]#4&#"#367632d||BYZuccH`e22wx     qu$   ! O@"""#E 	QE"2]21 @?]0@w##]!3276'&#"2#"'&76EVSI	6VQ@=񈉉d~uv    n`  @ F1 @/0;#"'&5c"$lYoRR`+.0`b     `  I@		F21 @ /<20@					<<33	##Gb`/ZFB?  =    F@1 @
/<0@     		#	#'&+5z~J/k`ue<2~  V` w    J  `  B@ 1@  /20@   	99!367676'&'31!xdLjE.*{`T|p5dwY|rNįt  kR & @@
(" %'1@
 '#"' <90%#457654'&# %$47#5! $ڄOTJPE*  :MKOxsPWKL,#%5,*,X$Rݿ	 qu{ R    J`  /@
 1@  /220!#3267#"&5!##J117,#J%x\c`PH?X   V{   1@
EQF]1 067632 #"&'#44&#"326=; {:+fZ#ad  qR{ $ 6@!&	HE%1@ %	
% 0   !2.#"32#457654'&-ULNPƯPTJPE*  >:##++LOxsPWKL,#%5,*     q`   1@ 
QE]1@  0"32654'&'!##"'&76sRVVOcm񈉉qnsȷzn휝  d  m`  #@
1 @/20%;#"'&5!5!!$lYoRR\	W0`b   *`  +@
E	 F@??	?]1 @/<0327676'&'31'"'&5R27ki;jF-*eb`+@EvfwZ{sxv     pVh 
 ) =@+E(#E*<<1 @ *'*<2<20"27654'&'2##"'&7673=A__UVF6˷ǆfB:VVMpˑRh]p[nmNssg.  ;Uda  @		<<91@	 <<90%KSX@    99
99Y#&+53;'$ܕ11FA3N11F~0)~   pV`  6@ <<1 @ <2<<0&'&53367653#EkUJ|CUvܷ%aw~LB,BTxnc#n     '`  8@EE1 @		 /<2<0 433233243! &aƏ˪ޏƛa!)R@O@+    }&N  j.   *& j Z     quf&} T     *f&" Z     'f&^  Y    Vj   3!	#	#wHV1    M$ 
  ' G@)E& F(2Բ?]1 @ ("((Զ?]990267656#" '&76#327>&iPDyz]6;~oxҤ]Y:PWp=l޺lǧ_ը,嶖ꀰ-ў    qu$ 
  7@ !EE <1 @   04'&#" '&4632    1BSxyJ̃Я#/p~ZZ7Ai6deB  W  Q   I@	" !9Ĵ? @]1 @ /<99@	o]0#4''&"562%62#"FR**RMw(oUCHk&_*SKHvH#	
0r{C	 @[)/B   f'n  gP     W  QN'"ug    pV   ' A@)	 $E(<<<<1@ (	( <<<<02##"'&76327676'&#"ǅǷǆǷqMTVMqqLWULc휙owgsugHgusg   Am`   E@ EE91 @<22205!#%$! 47)323764A,Ma")aM:GϤ*RѧO   p[g 9  &'&47#"54654'&#"563277632327"'532!
`7"7$>9[@[`7"7>9[&F]_I
 I5l|"O	z:6hl0'[Ml	|"Oz:6hlf$11  sX   D@!
  ܶ 0]9ܶ 0]1 @
   <0#&'&76!   76';:{HpҳI椤     qVu{   <@!E
 E ܲ0]9991 @   <0"32654'&#&'&7632 sVVUVVV9kjstntstu	n}{     R $ .@
&#%1 @% "%0 32#457654'&# '&76)F`{[mzYTJPE*  :xe+wTOxsPWKL,#%5,*eN    qRQ`   4@"E!Ĳ]1 @ !	!0"  )!"32#457654'&g-[oPTJPE*   >LOxsPWKL,#%5,*   # )   @VF ' 6	  (<1 @
	( $(0347632&'&#"!!#"'&'53276`1213$)),x:KAb933.1220W@Rd		>Qoɏ?s
K_        7"'&76'&526n'BQ_'BQ_[~,`*l#FR`*l#FR      B@
 91 B/0KSX@  Y	#!3&pM]    rV` !  #56! # '#64?!"QhRR_@0:IKiXL}/M4!     wx   #&'#&'&#5 #'nd2Fb.-t`4#M!P^     sK = W@< 9:?5 +,">99KSX	<Y]1 @	>+9>&1>29<90'6767&'&'#"'&46733276=332764''3=D۴vayͤgDd''dey{d;]TCHI}rHGFFtAGCT_8d榈d*0QA^^^Fkmihhimw'AF    U'` % S@!'E 	E&99KSX"<Y1 @"!&& &29<90!$! 4337643'676#aڏޏڇ9iŚkp[Q:@+h@ф{I%l+?    sVH  .@
 E<1 @ 032763## '&6%`nbbcDhh (J@?G6  qV{  .@
E<1 @ 0 7653##"'&54763Pr^SLTT:XYڅcнtst1Rd01Ȣ   K % 9@'E! &2KSX<Y1 @  /0 '676767654'&#"#3676L'<CIa}٘,6~ssqNii{̡E52Wzmh~'BC   -  M  &#"327676%!"'&#"'632327654''&'&'&'&547676763267,7%# G;I$locK5AQT_R?[OK1FufG)H2@0).>Pe^Ґ8*7D! ! 12԰.#AL.#^Yq4+&
"H4B;;=/?"+VhP  OV !  !  7654'&#"#676!  3 7 llc^#,V)ۄe]6?fض    dVj{    #  7654'&#"#67632327\B\\TP%I/yYk}oSKu,2R¤ຐ    s    5  %!	&'&#"567632	67632'&#"	;!53276n"?E! rK,/	4'Kr !D<&tEGGHh="
C(FK#C
"&E	!!     6  {  5  %!	&'&#"56763267632'&#";!53276[96:@%((%@:6-:IkI:8=3553g    s%  +  $67632  ! '&76!2767&#"327*W8QU{2Τ|sK^lȺhiieb-sJV"1Pһ

'$Astxss    q[  /  &67632#"'&76!27674'&#"3276I,)e[xtgO_\SG]EZSTVXXTRS7xJF61𢢜Pһ

''rsstxsst    ,V  4@ <<1 @	<220#5!#!#!3`d`du    7U  3@ <<1 @	<220#5####!3_ pzp p   pg 3  #"54654'&#"563277632327#"'$47(`7"7$>9[@[`7"7>9[@[|"O	z:6hl0%[Ml	|"Oz:6hl0%?[M  V{  $ :@&E
Q F%
]1 @%"%04767632#"'&')! $'&  7Z6;x[Y: +STTSST$T%Уb^#10dX4tsstjtss   q{ F  Vy M   sa    q{ !  &'&#"!!32?# '&76!2%%cjf_[_fMJOhken('
c\\c(    +{ !  56763 !"/532767!5!&'&#"'(nekhOJMf_[_fjc%؜c\\c
       V    s' &        @	
>
 91 @B
 /<290KSX@	
	

	Yp]@
6II
YY
@	&)5:EJ	
] ]!	!###-}-!+   V`  O@	F
 1 @B
	 	/290KSX@
		

	Y!!### `{`     UV{  '  4767632#"'&'!!#5#5 '&  7Z=;{XY:eSTTSST$TfZ#10dȪpptsstjtss  s'H   s'&   y3   s'' y        k&  %u   N&  "u BBB B| #I#IabhFa F`C`#BC`C UXC`C85Y B B #Ih;5  #I@PX@855Y  f  4@
<1 @/20%+532654&#!#!5!!!2L>o||Rh"9+F     jk&  #u  s'  N@	 2<1 @	 IIPX@8Y0!   ! &! !!! 'zO  FӐhgս  6      ,     XN   f -    T  /   3@ 
<1 @
/<20!565!32#!% 4&+pٕxL@+8/Xڦ        5@ 
2<21 @	 /<2<20!!#3!332#4&+326z6࡟9d݇     ,@

<1 @
/<202#4&#!#!5!!||Rqf9+F   k&  #u   3k&  %u #  m')ru    ;  )@	1 	/<20)3!3!#++   h $         .@	 .21 @/04&#!!26!!2)DlN݇@      %      j  @ 1 /03!!)ժ   e   4@<1 @ /2220%!!67!3#!#p&axުD+?x4&A    (    (  v  @	 <2991 @B	 
/<<2290KSX@					<<Y@ I:I:I:I:I:I: @	<<<<33	#	#	#	3DDxM     ( ?@*	%)21 @%&" )02#"$'532654&+532654&#"5>I8z,|йԳƆ\qѲ|!ĐBY+wps{M("     3 	 y@		B		 6
991 /<2990KSXY"]@068HGif			FI	WX	ei	y			] ]#!33j+      3m&  )u #
 +
KTKT[KT[X  @ 
88Y1         Y@	 2991 @B	 
/<290KSX@					<<Y3!	#	#_y   T  :  %@

1 @ 	/<035675!#!T>Wxfb/X++    0     ; +   s 2      ;  @	 1 /<0#!#;"++       3   s' &     7    #    >1 B/20KSX@  Y%+53276?3	3 OM?w.-!suٵ2&]*jkl    y  j    =@!
  <<<<1 @ /<2<203>54&'$  %53  #W==U+		- =  ; ;      )@	 <1 @/2<0)3!33#;ʪ+       $@
21  /20!!"&533!3_||xdv+      *@
1 @
 /2<<0%!3!3!3OOʪ+++    o  2@ 
<1 @

/22<<0)3!3!33#OOʪ++   <     *@  	21 /0!!5!!2#4'&#!!276GN6ONDPO+DCDC     F&   ,       
  $@ 21 /04'&#!!2763!2#!ONDNONDCDC  o#  N@	 <21 @ IIPX@8Y0! 7!5!&! 56!   ! 'o  OzFՎaa  0  & 8@ ''!&$#( !%$'2<1 /0"3276'&76! ! '&!#3~܂܀s;:ŴL椤kj         @@ 	21 @B		/<0KSX
	
	Y3!!"	&$54$)#!:ƒd v'V+w    {-{ D    p7  ) :@+E'Q!	E*21 @*$	 *9902  #" '&5476$%676"32654&}:[;z631-~LӔ{0w)v	,u8w     >`     /@" 	F!21 @ 
 	 /0!2654&#32654&#%!2#!r~~hhVlj9_ZZ^SJJOgyr      `  F1  /03!!`3   k`   4@<1 @ /2220%!!6765!3#!#}v[(bt:d6(U3R   q{ H    F  `  @	 <2991 @B	 
/<<2290KSX@					<<Y@ I:I:I:I:I:I: @	<<<<33	##'#	3?nn`QO6m    | ( N@&* 
)1 @ #))	
)KQXYKQXY0#"&'532654&+532654&#"5>32|PZG]twGabLx\l%%pZXkYF@\]     y` 	 ?@B	F	 F
991 /<2990KSX@
		Y##3y`}`     y&    #
+KTKT[KT[X  @ 
88Y1       `  Y@	 F2991 @B	 
/<290KSX@					<<Y33	##Tsŷ`OQ5  L  s`  $@
F
1  	/<0356765!#!L8D{X^~ŷoP       O`  M@B
 	F
 F1 /<290KSX@
		

	Y!	!###>?˸ʹ`'P    `  '@	 F	 F221 /<203!3#!#U`7   qu{ R      `  @	F F1 /<0#!#`3`    V{ S   q{ F    <  m`  	 1  /20!!#!<1BB`3    =V` \    pVg 
 ( 3 B@5E)!'. E4<<<<1 @,41$4<2<20327&#"#"323>32#"&'4&#"326/{brrb{9SS99SS9{brrb{/Ǩ<9^N5=L^^LN^Ǩ  ;  y` [    `  (@	 F<1 /2<0)3!33#9U`33R       `  ;@ F21 /2 #I#IRX8Y0!!"'&533!3Hf\45h)_Vu;;       `  )@F
F1 
 /2<<0%!3!3!3ڹ"ٹ`3     +`  2@
 F<1 @

/22<<0)3!3!33#"ٹڹ`333R   >  .`   ,@E
21 @/02#!!5!!!2654&q8$~͓7_ZZ^      {' "        >`   %@E 	F21 	/04&#!!263!2#!z~~@9LZ^_n7     q{  M@	H <21 @ IIPX@8Y073267!5!.#"563   !"'q2ǚ-VړiVFH    L{   :@ E	F2<1 @ /0"32654&632  #" '##3Jq	и¾.`A  t  "`   <@	 	21 @B		/<0KSX
	
	Y;#"	.5463!##zwwVtS^a\'  qk&   CZ   q&   j    BBB B|#I##Iabh#FaF`C`#BC`C UXC`C85Y B B##Ih;#5 ##I@PX#@8#55Y   /V  ?@N	 F <221 @
/<20#533!!>32 5654&#"#߰Bvz||яLmedY).ПĞ     m&   v    q{  N@

HE221 @	
 	I
IPX	
@8Y02&#"!!327#   ǟ2ғ-{FViګVH>= o{ V     y L    F   Vy M    L  `   6@!E <1 @	 /<0356765!32#!!%2654&+L8DثX^x~~~ŷ7oPv_ZZ^       `   8@E
 F2<21 @		/<2<2032#!!#3!2654&+N޹"\~~`7`73_ZZ^  /    :@N	 F<221 @
/<<20#533!!>32#4&#"#߰Buʸ||яLmed*    m&   vo     yk&   C]   =V&  ^    `  )@F	F1 	/<20)3!3!#TfUf`3  s 4 8@$%6 )	51 @	$- /<2<0"'&46733276=332764''3#"'&':y{d;]TCHI}rHGFFtAGCT_8d{{ђed''deFkmihhimw'AFf^^^^ '`^         :@ 	<<<1 @
		/<20!2#!!5!53!4'&#!!276XNpqONDNOQQfDCDC          :@E 		<<<1 @	/<20$4&#!!2!5!3!!!2##~~EW^͓Lʣ     +  #3376!2&'&# !!!2767# '&Svwhfst gF tsfjwvú	9$#G_//wƪ//_H$$O     { #  2&#"!!327# '&'##33676>\",Ux{
z{FVAW^3VH`3ʀ         !#!#!#3	7  3  `    !#####3Ñkk`_      	    !#!#!#!#3!3		o_<9d7    `    !#####!#3!3kÑkk`_    s     @  9ܴO]9ܶ @@]9991 @B /<<9<20KSX@Y@]##767!#'&'!ʓdսxQPtՀ`>YY~b҆12z(  k  {`   ~@ 	9ܲ]9ܲ0]9991 @B 	/<<9<20KSX@  Yp]!	#4'&'##767E]kKV:VS8VJl&VtO\KtU'4       !  	!#'&'##767!#3!PtՀ`ʓdսUn>qd2z Y~b_49n(      .`  !  	!#4'&'##767!#3!7kKV:VS8V]w&VtO\Kt`?  sVsz S  #"&#"3276&#"#"'&54763!27654'&#52327654!"567376767632'&#"ssD#`At bTDt;<}J5?u_hFAXVRuťޠsj#B#'"2ZbrRUgr%',azQ^XRj7&6J-@'
WoWdE\`   [t O  #"&#"32632&#"#"'&53!2654'&'"#5223 54'&#"5673767632&#"vmDPb!',-cX;b12i?,ZnN<r! 5^H\~fsj/+Q#2"2[0oGPR^Va	$'"%R`YL8+Q*!7c2
Wo/2@I        '&#"###333367632: %B<\^}}NhB388
6`TrP3   2V   '&#"###333367632: %B<\^}}NhB388
V`TjrP3  sa   qu{7      '   2'&#"#3	6??DI"GT8s
"C=2  2  {   2'&#"#367638:&%A=\^PfB{7
`TpO3      'p',z	   2  f'  
    sV   ,  	+5327673 &7 '&  76RFJ|lL*&7|?_~ `` ~_8:9h9`8:=$!7kvDrttr   qV{   %  	+5327673 #"'&7632#"3RFJ|lL*&7|u_st``tsd`8:=$!7kvHȦ`   s- ) R  %327654'&+"'&'&'#";676762# '&76!36767623 !#"'&'&]rr>
.rr.
>._->^
>tӪҫ    q{ & P  %327654'&+"&'&'#";67>2# '&5476!36767623 !#"'&'&r-HVV?-
,4,
-GVUH-
,4	.xt.	4	.wt.	4	`ta

_tp_


颈





袉




 vt&  '  0' &  ' s3' cS   '&        sV'  9@
 0Դ/?]1 @	 /0]!# '&76!2&'&# 3!#Svwhfst kSh$#G_//ӂ   qV{  9@
HE1 @ /0@]! '&576!2&'&#";#UQQLNONPccccɖ#+qr͹rq   ;   '''7'77'77did}}didii}}}d}}}}d Bz /  !"'&'&'&547676763!476767623
8


8


g





  ) 	M   #&#"56763 	v][Jw}$)/K'*C a   "53#7    a   #55#53g     	M   !2%$'$'&ʇrE2 _fݘL{t\q   F`   & 3 @ M Z g  #.#"#> #.#"#> #.#"#> #.#"#> #.#"#> #.#"#> #.#"#> #.#"#> vaWV`v
"8vaWV`v
"vaWV`v
"fvaWV`v
"vaWV`v
"vaWV`v
"vaWV`v
"vaWV`v
"AKKJLQKKJLKKJLKKJLKKJL)KKJLKKJLKKJL    X-      # ) /  '7'7'7%'%53-#%5#533#kyo\wyo\zV\Ly[`@¬@_ӤRӤRZy\yW\zn[wyo\ԤRԤR߬@¬@ Vm&  )u V8&     !     :@ 	<<<1 @
		/<20!2#!#535334'&#!!276N訨ʨONDNOQQfDCDC    &  E 
  9@ E <<<1 @/<204'&#!!276!2#!#5333>CB>ytts9L^*..+URRRя>         '+#!2'674&+327'7Uj~rGj#u~{Sqrے-,9/~    V{  )  %'7654'& 32'#"'&'#367632*nOSTTSSTFoWl{XY::YX{]ststsjts].01d
d01       j  @ 1 /03!3!)2$       	F1  /03!3!`:33     G    )@	 
	<<1 /<20!!5!!!!!N)#l    8  U`  +@

	<<1 @
	 /<20!!5!!!!!?`۪  f  3@ <1 @ /0#!!!2+5327654&#)qmL>87||9ժFwrKK"   V`  3@ F<1 @ /0#!!3 +5327654'&#rFRRQn!&&1`GQ``07 )  (   33	3##	#	#	3׈)D"AM  F`   33	3###'#	3?nfz!n`QL6m u& z9      u|& z          3!	3##	#E#A  `   33	3###Tw8sŷ`OL5          373!	###ʭd_dTy%u      `   37533	##5#`eBTse``avFOQ5a   !     33#!	#	##53ʨ_ʨye   =     3!!3	###53dTsŷ}}z}5OQ5}    2    _@	 2991 @B 	 
/<290KSX@					<<Y!!	#	#!2_=y+  *  `  _@	 2991 @B 	 
/<290KSX@					<<Y!3	##!*8Tsŷ`OQ5       6@ 	

8 22<1 /<20P]3!33##!#"dA9   @`  1@ 	F
 F2<21 /<203!33##!#W`39L        -@
 	8 221 /<203!!!#!#)"d9      `  +@ 	
 F221 /<203!!!#!#W`3ͪJ  ft  8@ <1 @
/<0#!#!!2+5327654&#;"rqmL>87||9+wrKK"    V!`  3@! F <1 @	/<0#!#!3 +5327654'&FRRQn!&&1:`GQ``07&.   s A Y  %.54>323267#".'#"$&54>73267>54.#"+9lR2*DaSN}aF-?jQ&h;>e3.x=&QUW+Byc[sp8<{R?S0$0>&1H3!(BT1kBtW22Tp{:SJ#&4t}f|}ާbm:E/fcYC(+G[`_&bn    qxz ? P  4>73267.54>3232>7#"&'#".>54.#"qKц][-2`X'V$?/(PtMBpP-\_#D-)*%-8%7CFIGԑLV"-!(,!(؜XFrXbr>%gx@]sA9hY^


,	Tָ&^dc+KiB&HiC   su'' z-     qu{' z        ,@
@@<1 @	
	/20%3##!5!!A+    <m`  (@
	<1 @	 /20%3##!5!!B1BL     <    =V`  o@	  	K
TKT[X  @8YKTX 8YI:91 20@   BKSXY"%#3	3;^^DNl      !#!5!53	3!ssf     =V`   	!!#5!5!53	F;^^`XXNl   =;   %3##	#	3	3p\Y/su A{+3   ;y`   %3##	#	3	3q!r))kLHJq  G  5@
@@
<1 @
 	/2<20%!33#!!5!!+A+   B`  3@

<1 @ 	/2<20%!33#!!5!!xZ9B1B9L     |  .@<221 @ /20%3##!"'&533!3_qm||x˪Awr7ٟd   `  F@F<221 @
 /2#I#IRX8Y0%3##!"'&=33!3 f\45h)L	_Vu;;       #"'&53;333###;qm||֐wr7ٟ9d+       `   5333###5#"'&=3f\4+	_Vu;0        $@
 21 /<0!2#4&#!#z||f9     d K     " * I@#$	$3	 +291 @ $(+<2076! ! !267# '&'&=3%!&'& ":Cppoż
vzKB@bHam
`_F$$UgkL>A9||    f{ % . i@.&&K  /2@ p000]91 @&&" *"/o]2</]90"'&=33676!2!32767# '&&'&#"XY`09Jt ⃄fgjdcbhcneNRS]\RZF1!&łZdc4,ZZWW      -  !&'& 76! ! !267#$'&'&=3bHa":Cppomw
vzKBm||
`_F$c TgkL>A9    f{  1  &'&#""'&=33676!2!32767#&'&RS]\ƐY`09Jt ⃄fgjdcbhcOJ{ZZWWRZF1!&łZdc4,3{    ,   (  vm')[u   F  H'      f5   32+5327654&#!#3!qmL>87||qwrKK"9w  V`   3 +5327654'&#!#33^HRRQn!&&,%wGQ``07$)`     6V   !#!567!3#:bCux+8.%5ժV  .V+`   %3##!56765!s{{v^̳;bVǆ  f;  1@ 
82<1 @	/20%!#3!3+53276q"L>87h_9dKK   V`  /@ F
F2<1 @
	/<0!#3!3+53276WRQn!&`3``07   V   !#!#3!33#;"9dժV  V@`   !#!#3!33#W{`39V    /@221 @ /20%!"'&533!3##_qm||xɪwr7ٟd+      `  G@F221 @
 /2#I#IRX8Y0%!"'&=33!3##Hf\45h)p_Vu;;    V   %3####!	!+-}-V     V `   %3####!	!H{˸ʲ>?V'P`     y O     h' J    +1 @o o]0 {-&O   " +1   hN&  "u 
+@	0? ]1   {-&   jR   -(+@(o(P-_(@-O(0-?( -(
]1   H    {o{      m')u   @@ ]1    qH'      @p ]1    uQ   q{   uN'" um   q& jT n     (  vN'"Qu   F  ' j     N'"u   & j:      y   XL/`T     31' q ;     y' q      3N'"u     y' j      sN&  "'u 	+@	@O]1   qu&   js  	+@	@O0?]1 sa   qu{7   sN&}  "'u qu&~   js    o#N'"gu   q& j      #  1' q r;   =V& q^     #  N'"ru   =V& j^      #  k'+ru   =Vf&^        N'"u      & j^       j 	 #@
	
<1  /03!!3#)ժA   ` 	 #@
	F
<1  /03!!3#`L    FN&  "u   &   j    GV  9@
	<<<1 @ 	 /<20!!5!!!!!!+53265N)#iGRiL`na    8VU`  ;@	
	<<1 @ 	 /<<0!!5!!!!!!+53265?`nFRjK۪`na  =f*   %+532767	#	3	3*SfL>7(^Y/su bzK5sx+3     ;Vd`   	+527>5	#	3	dkkCQO5r))`&9as
mHJq    =  ;   3	3!!#	#!5!suNt\Y+wD{     ;  y`   	3	3!!#	#!5))~q4H     
  &@
 21 @	/03!!"!"$54$3!fONDNONNCD#CD+f   q  ` 
  %@F E21 /03!!"!"'&763!5>BC>9sttyLZ+.i.*RRPRU     C  0 9@2&)1291 @"-(1220!"32765#"'&54$3!3327653#"'&NOO_KV!3j^nN?4pi;?nhf1CDP_m}`61f[JJOZxx9    qs`  0 8@2F&)E1291 @"	1-(1220!"32765#"'&54763!3327653#"'&=C>A@j\-1C]^fety><jh<>dhd.*^\:9m4l01a`RUaPOORAsxx%     7 @@9.,, #81 @'2-28904'&+5327654'&#"567632327653#"'&'&\]OOQRSrsdeY憆GGRQ?4pi;?nhf0!JK;<ps=>$& hi|UV!bb[JJOZxx8Pa  F| 5 G@7.,, #61 @66'2,6KQXY04'&+5327654'&#"5>32327653#"'&NHtCDFEwGQPabLqr<<p@E>=ih<>dhpb8f83,-F@..NO]@AHOHXDEORAsxue     V< ) :@'+%*1 @! '( /90!#4'&+5327654'&#"5676323#s\]OOQRSrsdeY憆GGRQJK;<ps=>$& hi|UV!ba   V| ) ?@!+)*1 @ /KQXY0%3##4'&+5327654'&#"5>32ȻNHtCDFEwGQPabLqr<<p~CEFX83,-F@..NO]@AIKj     6 ! 4@#
 !"1 @!"
"<0327653#"'&5!567:?4pi;?nhinbCu[JJOZxx}q8.%5    .`   4@"F
	  !1 @ !	!<0327653#"'&5!56765szgh<>dhpb{v^̳;b`WORAsxue{    -    `  6@F
	 F221 @	/20327653#"'&=!#3!zgh<>dhpbW`WORAsxue{`3     s  0@
1 @0# '&76! &! !2653d-|e'%{9!Ҏ׿    qF{  0@E E1 @	076!2&#"3253# '&qкĽbZZb/n||r|r|>禞 f  /@	@ @1 @ 
20327653#"'&5!5!?4oi;?nhin+[JJOZxx}q    `  2@

 1 @ 
2
]0327653#"'&5!5!x>=ih<>dhpbB1VFEORAsxue{~    {R   |J    Tf:  /@1 @ 20356765!+532765!T:WxM?77fb0dKLø   LVs`  /@F1 @ 20356765!+532765!L3DF1a.&{X^}з0)oP     T  	   35675!	3	#	#	!T>Wysu  \Yfb/X+3{     L  `   	#	#	!56765!	k0X^̶8D')`HJoP~ŷt          32654&#!##!23	#h  /ϒ0*3  V{     	##"&'#3>32 &  k\{::{T%+ܧ$`tad
dakj          3&$54$)!!!!!!3!!"d ;>v78ȒFw     tw{  & /  !3267# '&'##.5463!632 .#"%;#"wͷjbckVteVgKww^Z44*,'ėS^a\ s 4   qVZ{ T   D   :   V  5` Z         37!#'#	#3'jȎ_Ȁy    `   373#'##35Av擎LsŷK)@wLQ5`P  Tfs % 9@' !&<1 @! /<035675!!2+5327654&#!#!T>WxqmL>87||fb/XwrKK"9+  LV` ' 9@)"#(<1 @# !/<0356765!3 +5327654'&#!#!L8DFRRQn!&&,{X^~ŷGQa`07$)oP   ft ! ?@#8 "2<21 @  /<2<203!3!2+5327654&#!#!#qmL>87||"dwrKK"99    V` # @@% ! F$2<21 @! #/<203!33 +5327654'&#!#!#UFRRQn!&&,`7GQa`07$)     !!#!3#q"r+A   9`   3##!#`9L3`  p #  653&'#  33267.''U.,aOYFqlEk*Yb?f)6^&4Z)e\3'4H./)%uxm3-`4       3   3 !  #54.#"!!"$+Z`bZ*J%)9 ym22my=     ]    #  3##!".4>3  4.#"3ؔMM،"*Z`iV%,[_r=PŏQym2:d_5  Z     !4.#"#5 !  3#*Za`Z+$"ym22my 9''ί=  3   !!32>=3 !  }J*Zb`Z+ym22my 9)%     )  !!332>54."#54> 3Tmqn,dV=uG0fܜc.L2Rg|]=L+S{ugyC@pVGKyҚXZ       	  %!!3!!Zf      3   3 !  #54.#"!"$+Z`bZ*%)9 ym22my$    ) 8   "#4> 3##".4>;54. 2>5#"q6[6[Bt^_tADu[5o%AXhV>"9Z>N2myuݔJJݓ4kn9:sl3zmpBAkP#?     ]  #  #".4>3!33#!"3265IՋؔMM؋o_[,%ViWW]О\uBnsEA     3   3>32#54."#?vԒK+Z[+	MIHݖK2ym22ly    D   !!xگ        2>53".5!#36Tf`bQ3HҳK`1Kf>>fKIwo55owO     + >  33>32.#"#".5467#32>54.$+NBR<dXT-5je\'aOv'LojPLC*e}|j/BLW?eG%	#/94	YSuT/c퉀e4_PL\`Na       )   !##".532>=3)EvԒK+Z[+?CHݖ&ym22lz  F   %.>76$73>g?;w8q`g_8/@9L`uPhG/+Xam@E\>&   5 C  4>32>54."#54> .'#".%"3267.;eHxv(A//db,N,T"?W68m86o8n~Gf=l!?1XXVQ^	IrN(`P2s|Fg}F@pVGKyҚXXV?-_34e0Yd$Kq$3 AOH@BP  d     %3!4.#"#5 !  ;+ZabY) !ym24mw 9''  i    $  "!".>7>73>33!&-p|CtBnK#QMCYP8PDYMG)#@[9r El~mXBkJ(~`#J  #    !  332>5!)*YbaY*&''uxm33mx  Y 7   .5332>54&#!5!2>54& #4>2YML+`qp^*PQwM%ʠJL%@T.DuW2g~GJeArW22Vp>'C\5vqr{_g65f];hS<?[v    q   32>=3 !  #5)ZcbY)uxm33nx 9-!     y .  .+532%.#"32>=3#".54>7d8UjGk@*oKie2R䑒XNo ԔHy<m\GKӗSV~ץk      )   3 !  #4.#" !+Z`bZ*''\ym22myu  xP %  %532>54&#"#54> MJ*rIhf2R$WKUEgVq<m\GKӗSSt޶}   Z     ##54>32#4.gVb4f c8fGlIpX*9ٜWWق\OvO       } " ;  ".5&>32!!332676&%4.#"32>VxP.O哠MLldNQ_(0eoke.+K;ym'+H5#9GG@kX^yݼ1L?=d{E9dM&7%@r[-jx      #   !4.#"# !  3#^*Za`Z+$"ym22myu''ί=   ) 8    d     )#".=32>533;AvԒK+Z[+HJHݖym22lz      =  332>54.'.'&>2#.#" .5`RPd86aTCq_F(IÍN'NzVOxO$&KqPՔNRҕPDtT0 DiI:U=(
-?XsKZr@=lT,TB)'F_72I5%Binfs=K      )   3 !  #54.#""(,\`bX)%)9 ym22myu    g 1 @   .5332>54&#!53.54>22>54& gML+`qp^* 7(JL%@T.DuW2QwM%ʠD|g~GJeArW22Vp>2?J)_g65f];hS<?[vg'C\5vst{&UJ0       M   !!#:O    x     '  3>4.'.>753#]h88h]ˇXXˇZZv;kęl;T֘TT՘T     2  n  +  ".'!!#5#53 !2 2>4."*>n^Kh˾"ٔMM$VҎU%&WЌV%4毚e$ NMZ\22[a67a   s 2    n  ) 3    $.=3".546;2%" 4.#>db<kWws8.Of<<f8i\ZiɌKM|''V]4*PpGQK!3F2 `34_   u   "'&4763"3sPOOPs@XX@PPOP{X?@X        3#ӤR՘?      m   3#m  %   #4>7>53o:Z=z3^SB[9z.Z$9H(@{b?%9H(G{^;  f CU      5 )  #&>32#".'332>54.'&umG~f?z`< =[<'OC1&0B&Je;yD"FnL0R>#+G3	%'<*.c  Z   3!Z#z    ` *  %#".5332>5332>53#5#"&EW]1:V;GrQ+qxFrP+?y|~t?xqNQqH 1\Rzb2]Qziaz    Vd{   5#"!!#3>32Bv='V
fc     qV/{  (   2>54."##".>32533#/+QtuQ+,QttQ :}fyCCyf}:ʡp<<pedq<<p!RdaUٛUad@   V:{   !##"#3>323eBvVH=`fc   b   3!!3276=3#5#"'&>=}TVCvddZLPO_b0gbxw  qV/{  -  3!#".>325332>54.#"Zs:}fyCCyf}:!IxW<]F0!KwW<]E0RdaUٛUadN{M%AUaf0N|M&@V`f        	  )3!!!#z%L    Vd{   !#"!!3>32VBv=}
fc\  V{ , <  !4.#"#3>323##".4>!"32>f1HvORg;*cmv=D~mQ.`FH`87Zsf2(+@)QQD/dp=)Ze
<L,'HhWqi1$InoI%!3$1&=i   q/  &  !"32>5".54>3!33ItQ++QtIQvM&BB@{<5faep<<qe9rÐQV؃q˚[L  Vd   ##"#3>32dBv\=fc     Vl`   3!3rN
   V *  32>53#5#".5#"#3>32HqxFrP+?y=kDKnH$AWh;⣛2]Qzia)e=2\Q'I7"    qt  -  3!#".54>732>54.'#"ԤB7}C=DD>o[(QwPOxP(+G4NxQ)

ҠNׄzΗUUzxƔ^SoAAoSMwcV,Eu     VX   3327653##"&VWCvZ_^{Vgb    d K    j0 - B  #5#".7>7.54?37>32>=4.'<4H\pCbj7>m^D];"$*.GW(9
!CeDMxR+EpQ=lR0, d-J6Bxi`K
4GS)D59?;-?""EsS-7]{DV5wuh&2u    V9{   !#"#3>329sBvH=`fcR     Z$ ( >  53>32&#"32#5#".'&732>=4.+7k-42Grb*wќZF\tEff568V-Ia8FsS.*buG*
`zE*Kh=Lw,J6ArZXuF3[|Ih@mEA~    -   332>5!##5#"&KwS-ոCva2\Q/gb    Vr`   3+53265F1iL`a  X   !32>53#5#"&5#'KwS-Cv2\Q{gb      V{{ 1  3!!".54>54.#"5>32
Pt*D0<b}}b<-RsG[N&JOY5sE<b~~b<	/?$1jqv|CHiD!&*5lmK|o^J      d{ Q    
V` 1  !!".54>7.54>737>7$F7!#<S`j5/n_? ;0;M,&?R-B#fyB.F/:}3 DkL?FM,%HC>0D(YȸE     V` *  %#".5332>5332>53##"&EW]1:V;GrQ+qxFrP+?y|~t?xqNQqH 1\Rzb2]QzXiaz   nV| , D  3!!".5467>'.54>32%">54.<b~~b<Pt&C1RH#*6;1 IxPn{B%+VD*.7.2<lE(KjN}n]I+9 BIDLO$/RKHMT2O`6:n4M3!BDHLS,QO:~HEiH$      { $  "#3>32!!5>54.O|V-?yct?!=V5)?`B"#Gl4ZzFs`afF}gS{q94myPIa8 X{ X    V-   332>533!#"&KwS-sCva2\Q/Vgb    { '  3>32##"#5#"&5332>!OW[,ĸ<kP.CdƸ?oS0{3K2\=2\Qgba/[   Vd{   ##"#3>32dKwS,Bv\=2\Q
gb    oVX{ J     `   %!!3r&"`   V '  3>32##"##"&5332>!OW[,ĸ9jQ1CdƸ?oS0/3K2\=/ZUVgba/[     )V{  ,  %!!#5#533>32#"&4."2>s빑:|fzCCzf|8+QttQ++QtuP+__daV؛Vadp=<pʡp<<q  os{ R   FV! ' . 8   ##".=33".54>;2%" 4.#2>!gWxV0PZbo;;ob}t{
E}jj}֗RV'IgS]VWrB+OnCHpM'LF&OHBM_/9k     ~   %!!5#"&5332>73X&"CvƸIuT.gbZ/X}M      R    73#3#R    d   %$'dZZ-,   DC   	<21   I:03#3#D-d   C'      KRX     @8<1Y   C    % 	<<1 @	
<<I:05!73#3# }Öd   C    .@	 <<1 @ 
 <<<I:03#3#'#5#5!}-dȖ DQ    1 03#DWQ&}     ISX   @8Y1  CW    O@	
 
I:1 ISXA  
 	  @      88Y @	 <<I:03#3#73#D}ٖ  cQ    1 0!!cX   cu   	1  <0#5#5!ږX         1 03#       /' `&  = 
ISX 
8Y 
I:1  	ISX 	8Y 	ISX 8Y 	I:0  N{  1 03#N{    DC    1 03#D-p     dj   !!dj   c   1 0!!cX   8(   1 0@P]3#Ѻ(       1 03#      [  1 03#Ŗ    `   #	 221 /0@	P	]3#3#Ѻ`4    f  `  	1 
/06;#"!!f㒔n^  cC   	1  <0#5#5!ږX      ` ' o)F
F(ܷo_?]KSX 8YJ:)zD]K
QX )8Y1 
//ķ: :U[	ejy	]0	##54>73>53`#8!2-A,#8"2.@,eX5AnEQ`Q2,6AnERaQ1,   X  H`  6 ܴt
o]1K
QX 8Y 	/0%4.#!5!23!5&EyWJ{tEKcf:%.UrU   X`  ?!  ̴t\]KQKSZX}/Y1  //0#&'#"'532>54.+532EM:!FPP7.3"$,EV8(3e\Z`^pQg6
4[u;    X  `  (	 1K
QX 	8Y /0##!5!ƺ/я       `   <FFpj
]K
QX 8Y1  //0##4&#!5! .T`&`ؙ      t`  !FFK
QX 8Y1 /0#t``  X  m`  E1KSKQZX|/jZjZ]1YK
QX 8Y /0#"#467#5mPWAM8`y'     `  7F	Fp]K
QX 8Y1 
//t ] 0#4&#!#! ^yƒ/`     k  [!
F ܷtp
/

]1K
QX !8Y  /l
nn\
^^D
D4
4
]02>54.#"5632 r-YttY-0ZCB]rWfT%`t[(([tq}=Qҍ,D   B`  #1K
QX 8Y  /0B`L   XV`  8F 
a_	]K
QX 8Y1 
_O?]0#4.#!5!22X]ֆ5hruB=   X  `  5ܷOO??]1K
QX 8Y  /0!2#!5!2>4.#!XXuxP""PxuXdN""Nd`@kk@>uu>     X    6
 	Բ]1K
QX 
8Y  /0!!3CWn     `   4F 
F1K
QX 8Y 	
/o~]0)!2!4&#%w4g`:sƒ     X  p % d'F &Բp]J#:#*##h#Z#Jhs#]K
QX '8Y1 
 //Xl\v]03>3 !5!4&#"#>54XBMLbL3xzaV0*bP]`NFd6û[I3'@     Vt`  $FFK
QX 8Y1 0#t`
   X  x`  1F K
QX 8Y1 /
 
]0%4&+532!5dj~~ͻX{o.    ` 	  ]	Fܲ]ܶJ
<
`]1YTid]K
QX 8Y 
 /44&&BBRd]0!    ! 4.  -_`'0kIuX$   XBH`  KF>]1K
QX 8Y ]0gG]35%3>1X$FDvj/h29   Vd`  ^F F1K
QX 8Y ܷJ/]KPKSZX  @8Yj\J]0#4&+327#"&5! dGJ)CRC^
СIEd      `  j Fܴ_?]ܷ==
KK
]1K
QX 8Y  	/}ܲ_qpPJ]KPKSZX  @8Y0!   )5!2654&+327#"&5(V^HJ)CRC`܎ۺIE  XVc  G ܲ]ܷ6DT]1K
QX 8Y  Ĳ7]0>=3#4.'%f:uh=hH9=1c䒙.×o~S&PjI9     X  `  lFܰKQKSZX  @8 /Y<;? Hl Y _ Ji| = 	]1K
QX 8Y /ķT8Tt]0%367>53!5d,.&=$S47Z7J}XM./G  V_  
 R
FԷO_o]1K
QX 8Y  /Ĳ]@	P	q0#7	!5!WWV
LTюn  X  `  @F
1KTKT[X/1YK
QX 8Y 
/0KPX //0Y#4.#!5!2ʺ3P~RO~zM::IviF)5]     X  S` ( * )ܴ ]ܷH;+ P ` p ]KPX  881/}/Y  0 WW]1fgwv]K
QX *8Y  /ܷ/]CC"H%]0!#3>732>73I0K8()l_+bkcE8"
*=Ki`!#@5]Ey+gE=(Ci䣉W=  `  I F
1]K
QX  8Y 
/j[]0#4.+#"'53265#5!2
$@pP{5NA&G.]l,^`Jce:%r3C      
`',  ,     `',4  0   `'0=  0    `  @	 D1 03#`  n`   @DD1 <203#3#`|   " % 0  #4'&'37676537653#"'%	'##5
rb{.q	&	q-aT ! }Bs12j{@E#$]}q!<"ibP-F`   ) * 5  "2767#"'&54767&'&5&76	'##5M@V:118UF%/>7P6.N@?^G?D)7-#F }Bs)^
&# \*$@.")nF>]KH*!#TH#bP-F`       z      %3#%3#3#%3#ƴ>^    <       %3#%3#%3#3#%3#>>^        !#53ӤR@    
   327654'&+5336767N5G4pQf$h?FA@6b! eI(R[2*        	  #533#ӤR%@-         $  %#5754&'./.54632.#"'/XZH߸g^aOl39ZZ8{4<5/VVL89CFnY1^5YVe   U "  756767&'&54767632&767/SD435gcbnZdF31`9:H:ZU!LOTAKv?=0ps2#<PZ   '|U   l  '}U  @'}>q   l'~  U   '}>r      y   3#    &  -9 &p  .   &  . &  / (f&[  -   (f   $3  !27# '&5767"$JKԖ^`e~h'?6`vce4-    (&[  -?  }R   %67654'&'3#"'532#<BqBR P.-fgsT!1p*Nt[|icK)&* }&]  -E b&   %654'3!5 76
52.0ڞ:H~vR>  b&_  -q   	 ?  %#&'$473327676'&/3327653323#"'&'TPxmil_Qb_y^@@$;sR,%@n\Kf% I01_2F,k>GHܳ&%0l}=J<zg2&q\	F{  	&a  /   	 2 ?  #&'$47332767654'367676)"'&5"3276'&'&XPxmil_Qf[+!'
(s{~OQ}a&4-L~큻%MGHܳ&%Dl7(2ln6"%GmxQl?[F 	&c  -         %3276'&'&#")5!3%632A큻%0Pzuo\Dxfʸ?]DQx\?c!'Emx     &e  -R  u* *  !27# '&54767&'&54763"32767SwSԖ[bWqM3/X|t]0-.()ѱvcoɱe8MA4hKEu uF&g  -w   l    #5!  &  -~ kH&  .R~   ! =  #"'5327654'&'&767663'&'$54733276J&PDfXRNB8D-<9<NJ KUfLn݈veyYoR!
Xn*'X
&/.Q&+IO{XK5:,\.#/     %653#"'$&733276NbyU_I@A(IPmI~jÐB"\\ss>"5     ^  .  327654'&'&#"&#4763&547632#bzL,5;(.;Dn2KxAZM\MObxX'*9:XDD(NOf7*(?$S-8AP H&  -?       "327654'&'2#"'&5476B!799[]KB{ƶ`Q%T*WE{R,,9.UMAx|KU#JN  @  &  "34'&!5 767"'&'&547632?,3/V%._]g>v-(tYhYH9!$3/,;̠X*VL_
!"bWg3Zf    J 6  %#"'$47376767654'&'&'&'4762#&'&'&VfxH?Ba=~T;~BrC:@_`B(EN><}9MI&huqc-!P85J.39sJ%*==!'&"7*S@UYD  J&r  .  $    5%5%HHnnnn     $ & 5  67&'&54763233"/#"'&5332767654&#"%!lE?I(7/4KU^r8Z#08	"-d$*9^W4'6O'&n=NV)qaK"	%     $    5%%5%HHnnnnn  $   5%Hnn    $  -  &'&5476323"'&'#5276767654&#")	lE?I(7$# +EȓV	"-
8_W4'6O -n=*{nmp"	%    $   5%Hnn    8 (  #"'&54737676533254'3'&!9EO)"a2=`YGg-SGL(E?4mmb}8T"RY$6îs9It6Y
	!         4&#"32>"&462X@AWWA@Xz柟?XW@AWX栠   h   732767#"'&'gC*6:)kXZZC5"LMD6{S)L}@F  Ow   O     $/  -  #"'&547.#526763"327654'&	lE?I(7$# +EȓV	"-.
8_W4'6O -n=*{nmp"	%    4   373ËF       3#       	  !#'3%1yI !n    R     #'337673#" %1BR{6)coajr!nUPym  L   %  #'37676537653#"' %1/(/H/;'G 44.5WY9!nr|>@2%,*;l>3
     *  "2767#"'&54767&'&'&76#zf\MOYp0;JcX~VI|eepdkAXH,7p 4C@#90L@rR<J!+%}pL 0:??  $     "276'&' '&47iVNG))GNZUi>iUZhsBBsǮuu5a  U     #'#"'532N%bU`DK*22    <     !&'3673b~ĚZ00ZĥxU:Ũ;6I    <     3#&'#6̴UxĚZ00Z~bI6;:   d    #  "'&'&547632#54'&#"=:i_{\
%Z[,,G\O98<SGU37e{a}UwnWl<a76G96           %3#3#%3#^   f   6767654'3pk/LOiFqmPO``NoqH       3#ӤR՘?     W L 	  !!%WgppgooUU     #"'$47332%$7654'L㹿?Ah	 C7ZFe@:&a\^}C"96q]K;=   kH  8  654'&3227$#"'&54767632%&'&5473)B,4((7(*HJ?zKbNLc9g'!<\ӅMRU5+M;3*)3P&sHKCW4,E$2Zwf̌սnع<4 7   3nH   z2   7&'&547632&#"7zN,8:\>42@B^!x$%-`+-!d! M
fM    &  L &  19 &  19  &  '.> &  0  &  0 &  2 &  2 (&[  } 8 (&[  1? (f&[  .  (f&[  1  (&[  / (f&[  0  (f&[  2  }&]  L }R&]  > }R&]  - }'-&]  L }&]  .  }R&]  .+ }&]  /  }x&]  0  }&]  2 /'L >_  r' >_  &&_  >X&&_  -4H&'_  &'-4H&_  -  (&_  . &_  / &_  2 	&a  '-_ - 	&a  0x 	&a  '/ 0x 	&c  .x 	&c  /~    &e  /R u@&g  /,    :  654'&32! '$&73! 76767#"'&54767632)B,4((7(*Hnق@AZAd#?zKbNLZB`.+M;3*)3P&ڴF=)d	\^tL"9;l&NKCW4,E$2Hf6   &  -k &  '-~-k &  /x~ &  0 &  2xx kH&  -~ kH&  /R~  ) -  %2767654'&54767#"'$473$62
#dGf>5?AhXPA7.EB|=Q#!w*6( %{{qeVUI&b\^~B"      .  54767!#!"'$4733!2$6=4'%$`h_	>5?Ahm/yYk>ba7#
#5&qeV&b\^~B"jj7 )&  >F &l  -F &l  /qF &l  0X )+&  Q   )+&  >F ):&  . )+&  .X )+&  1 )4&  / &m   &m  -j x4&m  / &m  0& vH&  '-? -v  H   #"'$47332767654'3HdnaPm/1]]LGL"fh8D%jdQ45b`ޜ  H&  L % ]H&  '-? >&] H&  /    
 2 ?  4#">#"'&54733267&'&547632&'5 #"32764&__A-D$Iln9e|8-H,-C,QN(Jb41}>XA%v3hO =J6>(E&	!BQHJQS'Bg=q?%'i!.C]   ('0 &[  -?@r'>q  @'xq  @4'q  @'/, q   Jr   r&r  > J'1r   p         R     L      R  % '  &547632&767#"'#'3X\lTX\D8/0E= %1Bx:=$!"4'Qjr!n8    j$  (  327654'&#"327#"'&5732#"-2!WZWXZV%2-Z(.5__52ZJkV<JЕy&vы           3767"'&547632&#"327AoDdN.bpxXWs>0B7,g`p5 oU%mao3/AbM3))I <     <     d         (@	1 @
 0"32$     h	
P3343ssyz    Z 
 (@	 
1 @	 /20%!5!3%=Je+HH      = 	 
21 	/203!#3ulh      = 	 	
221 	/0)5!!5!3=lȪ    = 	  	
21  /0%!!!3!l     =   21  /0!#3!=l*       =  1  /0!#!3!=lcr8     A  ' 91  /0#3ASuN    A  	 ( 
< 	/ <10%!3!#N       {   2@ EEܲ@]91 @		/<0 2>4."#&'.4>329[ZZ_PGr䆇䄄rEMp`77`p_881ŧbbŧ1      y  @
  1 /03#+    q!   /@
E	EԶ0]1 @	0  6&       z>z     =  '  +@ 	2291 @	 /2903#36Q*  =  q   33#	=qC    q   @
	1 /<0)3!39Uq"    q   @		 <1  /0!5!!59qK    q  O  ! >@#EE"ܲ@]ܲ@]1 @  /2<0%!!5!&'.4>  2>4.":RJr惃sKRQ[ZZ{ 1ũbbŨ1 p`88`p`88        %@
 21 	/03"3#!5!p9
f     q     2@ E<21 @	/<20!#!##"&6 54'&"3qvCf^]8mr^:<UfɃ]8ƃ     D 	 '@
	 
<<1 @		/0#!!!y5!Փ/    =   	 '@
	
<<1 @	/0!5!!5!#55ߒѓ+       
  %@<1 /0!!27654'&'2#!3,R4,,=iXXXlι]Oz}I__ҭ     $  ;@
ܲ_]9 @	 /999@ 10#4'&'5!4B5McAq_9V    =    4 91 @ /̲]촍 ]0	53#T9+         ! -@#"1 @

! /203432>324&#"!4&#"!}x5%^ZHZl K--Xh&|ŕnc     =    &@
 <<1 	/<<0!5!3!!#KK?    =    9@
 <<<<1 @	/<<<<<<0!!5!3!3!!#!KøL=??      q   !@
	1  /0!!9UqqK   =     =1 B/0KSX@ Y!	#tFC00B~+      n 
   4@ <<1 @
/<20327654'&+!!2/!!m]%i;@ED\TqQE=<d^K|[|"q    }  (@ 
<<1 	/0!#!#3!3}K    p  
 
  .@<<1 @
 /<20!!"#!"'&54763!!0R4,,='k}XXXl2LK]Oz}I_d_ҭ"  =    @		 1 /20!#!5ՓB  =     =1 B/0KSX@ Y%	!3z~     q  O  &  5!5!#&'.476762>4."XErrJSRJrCEoJ[ZZO{2Ʀ1 {1SV/p_88_p`88     }   @
	1  /0#!#}+B      } 	 #@	
<1  /0#!#3}O      m   +@
<<1 @
 	/0!%!!5!!z;TKѓ+     q  O  $ =@&E"E%ܲ@]<<ܲ@]1 @
"#/<<0 2>4."%#&'.4767673[ZZTXErrJSRJrCEoJR"p_88_p`882Ʀ1 {1SV/   q  O  (  #&'.4767675!5!! 2>4."XErrJSRJrCEoJRNQ[ZZP2Ʀ1 {1SV/p_88_p`88     b/   1 /0!!V    Bf   #"&/#332?E=9Qct2%xf" %/x
$ Dp   /1 /03#  =f  7u91  290 K	TKT[X     @878Y3#'#f    [f  E91   90@	Ueu@)9IUe] ]!5'3{    Bf   3326?3#'#"&'Bx%2tcQ9=Ef$
/% "     [f  C91   90@Ueu&6FZj] ]5%3%[{   fS   /1 /03#̭   F'    /1 /<<03#%3#\y     u  
 	<1 /0#527#53g     u  
	<1 /03"3#	g  d     	 1 /03#!!Md  d      '@	
 <<1 @		/03#3#!!Mޒ          1 /0'!!   '    ' /  33!!3'#67654'&67654&nudruxtddx>DD>xIIv!RTx`aw,0dc1-!:;z{t   {   * L@$%
E+<<<<@!#91 @ $+<@	(+0%"3254"3254#"54!#"543263 #4#"h??AA??A'+,LW@@@@@@@@pطQQ9    / @@1(.
#E0<<1 @!0% *00"3254"54$3 !2632&#"# 54-654!"`@@@CvBըiUv˫:knL?o@@@@N;Ejfae:.88U      8  327&'"254"%47&5476! #4'&# 63 #"'632# i60IKhh*)7!o^RX;*:9u`/'"6OfqAtqLI$\9.ȶ   mQ  ! 6@   E"1 @"	"0463 #"&'7325#'&&7'6met"xCBCquЍ
h!	ACBB      ) 2@	#&E*<1 @* %/0"32654& 4''&5432#5476$  % U%|{e6Lj`  %"%:yx~)RhKK>      6 5@$-	3(E7<<<1 @5 /7&7"32654&4763 !27632! 54-654!"#"`$  % 琺By#xJi:OknLIo  %"%0yKpjNdfDQcwiC|85s  s  * ;@&%	 E+<1 @")+ &+02654&'&47&7'73%$$!% l݁6ZA|  $! $Vm-G4p?    {   1@	F1 @<@ 0%"32544!  #"54$32@@@)@@@@Pvv      . <@- 	" 'E/<1 @  $/-)/<20%"32654&672#4#"#"'&#" #"53232l$  % L 7*>(z*M#6&8"$  %"%3|0ۯqiPWu   {   + ?@-$'+
,<1 @)!, &,<0%"3254"3254 #"5#&767663 #4!"	@@@@@@!Ӣ7y-^@@@@@@@@edm%    W  , 9@. $	)E-<1 @'-+ "<0"32654&4323254#4#"%$7"@$  % 쐋'(uj  %"%@կ̰Xsgh\   _  " 9@$	E#1 @ #
#<0254#"53265$54767653!"'#W@@>z]U]iTrs@@@@pegu/ss     Is|   2@E<1 @
 0"325447&763 ! 3%$5@@@ԶMg@@@@R&Ѩ'LB     Is   2@E<1 @
 0"325447&76 ! 3%$5@@@ԶMg@@@@<%Ҩ'hB    Y   E  "32654&!"32654&&''"&5623253765$7465&'7$  % $  % Kfg饤Ĳ  %"%  %"%IKbv4ˋ42@7-]fn9  h  % A@' $ F&1 @&<<@"&0!"'# 432!32533253"3254hfg襤>@@@ JJ=|\@@@@@   h}  - ?@,	(,$ E.<1 @" &..<<0"32654&2533253!"'# 47&5432d$  % AfgB  %"%4˩/JJ=%܉M   h  - ?@,	(,$ E.<1 @" &..<<0"32654&2533253!"'# 47&5432d$  % AfgB  %"%4˩JJ=%܋L   @`  $@ 1 @
<<03!23! '#"543225O)3Ɯ)`,88{     s  * ;@&%	 E+<1 @")+ &+02654&'&47&7'73%$$!% l݁6ZA|  $! $Vm-G4p&      , 7@	'#E-<1 @+. %.0"32654&4! ! &# ! ! '&54323 c$  $ 6buUKX  $  $8${nE{N%   O  0 @@2,	%&E1<1 @% /1!*<0%"32654&&'&'&5! 765! '676%&4%  $ ,D)<W%Dv'G&!$  $TrJco<   sv{  ! :@!E"@#1 @	! "@
"0"3254! ! $54323 54! T@@@)" ET@@@@Y۝=I    Oo  5 =  %"32654&%!$76! 6=&'7%&'&'&'&7! 76 '4! 4%  $ Fr@
\t+,D(<W%Dvt!$  $=6TbZdTEmMd      9   "327$"327$7&76%$5+&7626#4A?A?u Ӣ5rRX6&$@@@@@@@$-
/ԋu	cdW7'  sv{    ( <@!%
E)<1 @)@
 '#)0"32547 ! !"$54323 54! ! T@@@=A@5SUHEG@@@@45G)#56     x  4 >@'	1#-E5<<1 @)6 /%!60"32654& 4%$54!232#"'&#"! '&5432h$  % ${ajjh@MqKy)Ǉm_  %"% 1EYl0xP^b8Rsu_|]F      '   "2' '&'$!32'&547"32?6AS2;9hhNU~ +;9jq!Ba  o'@u@   `   +@	 	/991 @/0! &7623$'4'74"Y#!A[VB8?<kP$U.FM?>=     {  {   +@	E1 @ 	 <0 ##"2#"53254#"n=;C>@{jVR777     r&W  A     @ji   	/1 /<20! ! !5 74! %&?%~?>~    @  i  $@	 	/1 /<220! ! 3!5 76! %&>%~?>wJ~~    @ji   *@
 	/1 @	/<20! ! !5 74! #5%&?%~?>~N @  i   .@ 	/1 @
/<220! ! 3!5 76! #5%&>%~?>wJ~~T  3    "36654'#"5432AA\(DeN[̼o[$N[u     %@
/1 @ /0"3254"547&54323253r>Juum@s>
[yu?{EBXF   `    '656%"'&76!  4"3YVA!.
{x9<?8
_F.UDWT_`~?=       #@/1 @
 <0254#""##"5!232700+ڬ\ĸL`]N0/.1i3 rCr    2  2654&#"! 5!2#"'! 4 543227#"$#" $  % mَ-QGXu	^|tITK?  $  $`@,skEr}3T     z{  ! *@	 F"1 @	""0%#"432&#">322674&#"CCjFPHOQ$!%!p'(FnJv-O!3]  $  $   z{&L  L0   0,  (  "32654&&3 #"4/&5432N$  % s $ˌeqɘzm  %"%82y,v    \#  " 6@E#@! 1 @##04$54%&&5! $#"57"3254ix@@@X4|`Pٳ
?@@@@       "  "32654&5&'7!$#"47#$  % dt.;  %"%Ȉ_p
8>u     %t / ;  4#"#"'&#"$#&532327632! '&57"32654&"3C2z7J,"/IN\=0BWTO3H$  % Xt\DD\t]
5<\UCfwpv
	gH  %"%   V  @  /1 /03#V     '@/1 @ /<0'6"%)56574 65+*+UGm++),}݅.p\(   > . 4  "!27676327673!#5654#"'&'&#";&543.%2~*&IHHܝBOg(LBC]i%>e>.`h>3A?~=h\$kb8:;-F_Zkf2)    N  !@ /<<1 @	/<<053533##5N؎؎؎   J  P   >r   @ /1 @
/0432#"73254#"ЄLTPPHHH   `    " 7654&' ! '&476^L:NbX1coqoh`WĒ  cg  &   24764'&#"676'&'&5476 
pHgc/5pIuupHECle\gUܚsuϨ   cy\  $   24"27#&5432# '&5?$5+r%3]f́|pHFPfouTapH    /  %24'$5432327#"'&#"%$'#"54322533]L/|tkZ1AQf(3Ɯ)DjR:jTh8KOpt$68{  cW  %   24"$'&5?$532&'&32!r|T9lc~x?LvTamY<K    cW  - 2   24"7&5&326532&'&32$'&324!B}b$|T9lc~xr=Ch(筭?fXmY<KLvtt     Y 4 @  '&''"&54323253765'$543227#"$#""32654&fg饤u	^|uISL\>$  % ,IKbv4ˋjEaTW8ҋ  %"%   {   &  %"324"324#"54!#"543263 #4#"h??AA??A'+,LWpطQQ%  Rpt   M U  "32654& 254"#&76767%4#"#"'&#"$#&3232763276'767$  % nnvp+-"2D2z7J,"0IN\=0J%.3?5xv'Q  %"%933hk//3wt\DD\t
5<\UCrTF-2bG;"b,     i     $5354#" #"524"m~ŶejsX\|9       I   "327$"3273653%"'%5254%$7&76%$5#0#&7626A?A?Tcb*@RX6&$Hu Ӣ5r@@@@@@@mo6J,/7'-
/ԋu	cd      L X   "327$"3273253!"''&76324%$7&76%$5#0#&76262654&'&A?A?fxԅ$8$+Rb,7Hu Ӣ5r$!% @@@@@@@mӔJce$3-
/ԋu	cd  $! $  x    !  !5!! %6 4'7;OtJu4SSv;X"]|K   n   #" 57!3273!q-JLX1   o2   !6&#"&5&632!~po~ds.xsgd{1  n?     #"  32 7 % %5!5!!I<P@=`II=?<     d  j   !&#"&4 32 ΂y YӅ4   P    !#4&#"&54632!_kX#giMk|謃l    < 
   !3>4& #" !5!!  >
F+W5  y    %#   !!!  )!YF^e.*zMjO  <    %!3!kѳ/C     x  }    4&#"36#& 3632 ʴtÑl}9^DoUD<N     <F    &#"> !#!63   䂍w8	=10<     x 
   "3265!%"  3!!5!!5LiA-*'=Xx        %4&#"#463!!&632 ʽtwaf	ɪXP  dr  !   #"  3  3!    !   36_J
?89biVGej4T     2    #" 5!5!3>53{9ˉ=Rծ  P    %#" 547#5!3273ԢV-ؠv湯V4b     n   %! #" 5732653!!Iݼsrǀiy8/quŚl         #  533>54'7п _*jiю       6&#!!>7 )!!!  ۜ ٽ 3+     dr  !   #"  32 !527&'!   !  aUm}EI=a]Mv8"`_؀    d    "  #327&%# ; !###  )  7bb6e eabe^tN4 LNhB   Z p   !#!3!3!ѽr4fQJA        #4&"#& 32 ˲(۬TA    n u   %#"533273ҐM=űU5a   x~   &$=3326=#"533273~ս˶θ$!S98ȗX2       %6&#"#3632χ/050  y   5#$  !&#   %73gu6wfranX     x{ 
   "3265! #   !33!Ǜ
G$P ;w      4&#!!>7#!!#5!#!2p]9P~ҹ9{m{(   d     #  5332654%$432#6&#" ѿͬ]`yDeȪƋv        #"'!!33263ϴ   <     !	##	#5!zk{TO_     <G    #  5!#!32653GóZ^ѫ       54&+#3!23X ׾7b   o !   #" &73265 54632#&#" }} 5:#ÃL}  < B   %#&=#5!;3ѾvZtmfa     n R   #&$3;>53RL[a^}#ǩ    P 
  3  #"32654&#"3267+!!.546;!5!5>32EHPw=xXcahxZ֔յ~9]~}_h`dYZydǲ¼    d   ! 7332& 53 []&"z~8<kԤ     d    ! %76'&53'!2YK/0>!<ACijAI{2HP    ZLi  $  % #" 5%674#"'! 4&'326LҫES}*6w1(W  d(a  '  ! 47&#"#&%'67$!26! # !2^NWue+htzkof P(BԞclq/쬱zb     d`   ! 7332#"#'! tX!71n?\o  d` "  ! 73!54'#53654#"#'! oI% ݪy=Z\ϿT҅h    )     ! 7&%&326#"6\Z[FxL*qaqEtD'\a   d`    !263 # #"! #"32dh~eos`U@J(6d  d  `   # # \D #m8    ZV   ! 73!54+53$54'3mF2(	g)y>[Fa[     d( j 0  #5#"#'#"#'#"#&%'67$!263263  

C1Cm\`X^+>fTo'     d    ! !4#"#5! &' !2oIeٷzD&?!1N//T-,
jNY         ! )!"67 #32RfN0v{t{\n@
;k   d`   # #"#5#"# !263 /8WaV@~Y$3
   d   ! 7332+53274$53[]Ǯ-mdȨH   di   ! 73325 '6%5%cWd9)*@]OruGv    d   #  # #"#5#"# %7263 OާPvĶ[`KBbw+ IH@Q)M      ! 3!26573fRT|u]     Zp    %3 !  32%#Zܸ:_\2)K[60~   
    ! 73!2&#"#4+'73263 nG{

RmWPOC0@]g[x(2  d!` 2 :  ! 63 ! $=46326=4+5326'#"! #"32d]xcd렷PSԟa

]YeRj\wCD4soX7<\"q  d   ! 7332&'"#'!3wU!#g2*>|?\K|
P    d)_ %  67 !263 #5#"#'#"#4'&PQ`[n³<5)5A)q+    dN   ! 7332 4733673gQ|zӑkB_v?
>   <  (  ! !4#"&=6#53263 .'"325zGN~ZXR86zH9!?
,V5''5X4ʸMk         74#"63 ##"#! ZtvNA%tG4SD9S`  Z8A    ! 53! +532'6&'3t{>@׭

`W(;Ƙnl=W     d 
   ! !63&#"32[]\x4+G.BaX     '  !26;'"&=4#"63 ! 3 #&9RXZ~NG}+y4X5'(4V`G$>    d %  3!! ! 73324 5#";#!3
^[  V//UQK_K+;   
   ! 363 #"32bV`(/?;L      #  %#5265&/%77654&+532Q	sQfV?LEDOR#\ՀxЖsp2E"%-4.-UA    d '  ! 73324'#53256+53274$53aW((qegZamV=EHq  x '  ! 3324+53256+53274&53[]woqdaHx{mQY>EHq    d`    27$! 3&'6#"FRᑞߋTs_0sIKSzyd     d_   ! 73325#53$=#%Y_'ݵo#B&=ZZyu?  d %  ! 733254+53$#$! 727_Z  CM\W A^!)vTw   d   '  ! %!! ! 3#3!"3253!54#"Y^
arrr6fwwi     d9`  $  !"'!525#"!$!263 #"729Y`^H]Y'zSe"8    Z`   ! %$54#"#'! ! 4'3676
bO4`V69</B޹L   dN   324'3!"'32'3! dlٹzz_YMl>"S+\    PBh  $  43 32/7! 47$3254&#"PH=Few1(W~d	    dca   54'&#"'67$% #7#";;_CCB|MKOm0T$,   n'     3#3#3#nʺ  d\(    2"4;!"4#"32JA{ntv2c`Lз   h   =@B 1 /0KSX@ Y	%##.d+    hK' E     h*     hO'*t         @ 1 B /990KSX@ Y	sN   O'*)t     N'")u     'e      w  ^   ?1 B /990KSX@ Y	5](&xy    w  ^O'*1t    '5      6'       &  5     6'       O'5       6O&       E'       E'       EO'       EO&       O'* 0     '     w  E&       O'     w  EO&     w  ^O'*? 0    	   3#      !38Ygg`nC  ^   ^n7]   ^   7nn7]]    0d   "&533265453zWA@XzCss!AWX@+   !U   #454&#"#462zX@AWzB+@XWA!s  0U   !5!2654&#!5!2@XX@s0{X@?X{   0U    4&#"32>"&4623X@AWWA@Xz柟C?XW@AWX栠   H>    	%'111      	] ]1 <203!3CC   ~K   3#K     !5!${   1V   #5#53533zz{{     1   ##5!z$%{{  :'U       '       "'=     w  q'       h 9     hK' E     h1     hO'*t    w  ^  : <1 B/0KSX@ Y7	5wM40  w  ^O'*)t   w  ^N'")u   w  ^'       w  ^  : 21 B/0KSX@ Y%5^xy    w  ^O'*1t     '5       6& 9       '5       6&       O'5       6O&       '     w  E&       O'     w  EO&       '     w  E&       O'     w  EO&     w  ^N'"1u      < 291 B0KSX@} }}}Y5`sbbs    ] 1 03C   ) 8     )K' E       )  *@	
8 AKTX  8Y1 	 /<03 !  #4&#"!!ˮî$*\u   )O'*t     w  ^  2 	<1 	/07!   )5!   )w5BhPa.,~  w  ^O'*t   w  ^N'"u   w  ^'       y  `   	2<1 /0%!   )!   !`aPhB5ji y  `O'*"t   &     '       '        &        O'       O&       '     w  '(       O'     w  O&  (     '     y  '(       O'     y  O&  (     '  ~      	 ~21 @	0# $54$!3#"3n n͙
nn{ '|       '|      w  }'d     y  '      F  >   %@		21 @	 /90"32654&"$54$32#Bz_̀#R3I    K' E         %@		21 @	 /90"32654&#4$32#&f̲_ȭT#R3{   O'*t    F>   (@		21 @ 90%2654&#"3#"$54$3Bf̲_ȭ벃   F>O'*t    FN'"u        (@		21 @ 90%2654&#"672#"$53z_̀ʃI    O'*5t#     '     F  '       ?'~       '|       ?O&  ~     O&  |   '      F&      O'!     FO&!     ?'#~     &#  |   ?O'$~     O&$  |   ?&~  #~    	   $~	]21 @
 02654&#"632#"&53XP^J\TaaQ_VFTHUGQK})~J    8    2654&#"03#"&54632xOaT\J^P_KQGUHTFV}i~ F  'x       '     F'x      '  #    F  >  
 1  /0#4$32#4&#"#f   K' E<         	1 /04&#"#4$32f#      O'*t<    F>  	 1  032653#"$5f  F>O'*t>   FN'"u>       
1  03#"$53326f餗 O'*5tA     ':     F  &:       ?'<~       &<  |     ?O'=~       O&=  |   '>     F&>     O'?     FO&?     ?'A~     &A  |   ?O'B~     O&B  |   ?&~  A~    	   ]
]1  03#"&53326yaO\T~JPML     	   32653#"&5T\OaQLMPJ~   w     :1 /0!#!5!)+      jK' EV      j  @ : 1 /03!!)ժ     jO'*tV    w    :1  /0!5!_++ w  O'*tX   w  N'"uX     j /     jO'*5t[     5&  T   w  '  T     &  V     '  V     O'W       O&W       5'X     w  &X       6O'Y     w  O&Y       '[       &[       O'\       O&\       &~  [       ]1  0!!3
nC       	 ~21 @	0! $54$)!"3 ͙
nn{      3!5
n  w}   (@		91 @
 20"32654&'2#"$547!5__ȘLӦnj FY
' iq    FY}   )@
	91 @
 20"32654&'!!#"$54$C`^ȋMӑnj   '*i<q   w     "@		91  /20%2654&#"!5!&54$32__ȋfLnj   w  '*<s   w  '"<s    F  Y   #@
	91  /20%2654&#""$54$32!C^`șMgnj   F  Y'*T<v   H}'o     w}';  o     3'v     F  Y'y  v     3'w     F  Y&w  y   F  Y'"T<v    \    2654&#""&546 !j>_IEcI_(0MJBSKFXCIn~|Q;n  .   "&5332653ܨabaaJPMMPJ     \    2654&#"0!5!&546 _IcEI_>jm0(MICXFKSBJnn;Q|~    w     1 	 /0%2654&#!5!2#bŘ쥒   F  Y
'     F  Y   1 
 /0%"$54$3!!"Cꏙƥ᪑  F  Y'*<    w     	1  
/052#!5!2654&᪑  w  '*<   w  '"<    F  Y   1  	/0"3!!"$54$3Cbƙ F  Y'*<     H'     w  &  ;     3'     F  &  1     3'     F  &  1     H'     w  &  ;     H'     w  &  ;     3'     F  &  1     3'     F  &  1    \   "3!!"&5463RiPYnvDZHCn~}   w  ^   %5-5^j22    F  
  ? 1 /0 !3#$ 53TCcXon   2K' E        @	?1 
/053 #3  cCT-ncC      O'* t    F  
  	? 1 
/0%#5 %3#  c--noX   F  
O'*t   F  N'"u        @	 
?1 /0% !#3 #c-gCcn      O'*3t     '     F  '       '       '       O'       O&       '     F  &       O'     F  O&       '       &       O'       O&       &~        ]]1 04&+3#XHǜV     +  .#"#"&'532654'&/&'&54632Cw7Bh#-8GC>=JGBAm'./G?;=~ÇH)@@<fy~''L8=#(	;6_o       0#546703#"Hϸ*VGJ    Fl   32653#"&4&#"#632>V\`RʺªV\`RʺªhZ·%XhZ·    Fl   632#4&#"#"&3326tҪºR`\VҪºR`\VX%Zh۷Zh  FlO'*t    F '  32654&#5 !"/.#"3"54!2!rz|K٬42 swUҤ'4X˧|`í~pX˧|`J3~ F'*<    F '  763 #52654&#"# '4!"326(24׬'Uvr!24֭٣K|zsp~ȕ`|Xp~8=`|    F'*<   &     F&     '     F&     O'     FO&     '     FU'     '     FU&     '     FU&     '     FU&       '  >72#52654&#"#"&'463"326[*'sobI=J<K2Asf~M8K:BEF=M]nw-lA#vTaky.1eM  w  ;  .	1 B /0KSXY!#!53!;=X-   K'E        / 	1 B /0KSXY3!3!=0      O'*t    w  ;  .	1 B /0KSXY!#5!;=-ЭX  w  @O'*t   w  N'"u        / 	1 B /0KSXY3!#!=0     O'*5t     '     w  '3       '       '       O'       O&       '     w  &  3     O'     w  O&  3     '       &       O'       O&       &~        4]	91 @	B 	0KSX}}Y3!#!m y~  1V    o   33	##Ƒ%/"yDR     }  '@		
 1 @
	 <033265!!#"$5e^}B    w}  % 
1 @

 <0#"$5!5!3265_e}BB    w    	 
1 
 /<0!#4&#"!5!4$32e_B      
'         !@		 1 
 /<034$32!!4&#"^eB    '*<        #@
?
 <1  /05!2+#!2654&#ȍ/      O'*t        #@
?
 	<1  	/07!2654&#!332#!ȍ88     F  
  "@	?<1  
/0!"3!##"$54$3!
8/X   F  
O'*t    F  
  "@		 ?<1 	 
/0%!"$54$;3!"3
88X   O'     F  O'        $] ~<1 @
 	0!"3!##"'&5463!VRXP[QqEPBJKHG?|{     w  ^   7-5-5wj     h   P	91 @	B /90KSX@99Y"32654&&5462	3#4<<2,B:)`j~"N/0@.B,"=jyisf+  hK' E    h   P		91 @	B /90KSX@99Y%2654&#"3#	#&542:B,2<<9&~j`=",B.@0/B+fsiy  hO'*t    M  XK   T@
	1 B /990KSX@99Y2654&#"%#"&546325]2:B,2<<D`mGAJM=",B.@0/;ac%64    M  XO'*t    w  K   R@		1 B /990KSX@99Y2654&#"'	5632#"&r4<<2,B:MJAGZn/0@.B,"=;̶x%m w  O'*1t     O'     w  EO&           2654&#"'5%632#"#"&!&&*%7.),'H20G@b$%#sb/O;,+I    ) 
 '  2654&"32653 !  4632#"(B:d:BB®߭jIJ~<B,">>",BR\*$jt_UV  ) 
 '  2654&"#"'&54632 !  33265,B:d:B0<~JIjˮîB,">>",BVU_tjN*$u  ) 
 '  "2654&'632#"&5 !  #4&#",B:d:B0<~JIj!!ˮîUB,">>",BVU_tj$*\  ) 
 '  "2654&74&#"# !  #"&547632(B:d:BB®!!jIJ~<UB,">>",Bu$*Njt_UV )O'*t   )O'*t    S  ^  $  264&"&546;   )5!  '&<h<;551smhPa5`//`/,1jpc~., S  ^O'*t    y    $   4&#&2% )!   !32'.54;55;<h념5aPhms`./`/	jicpj1   y  O'*"t
     AO'     y  O&  (      &  "32654&"&5473!! $$!32&&!&&FcIM rR_bq$$V<!FJ{nYR;W   F  .    "32654&"$54$32Bz_̀#VhRIf  w  _    "32654&!74$32#&'cf̲_ȭThV#벀RdfXI    w  _O'*^t    F.    %2654&#"!#"$54$3Bf̲_ȭ"벀RfI F.O'*t    w_    %2654&#"672#"$5'cz_̀R{IXfd  w_O'*t        '3632#"&2654&#"BQ_@XP^J\Ta=O)~VFTHUGQK     ; +   o     K'Y       &  Y     O&  Y   &   Y   O&  !Y   &  #Y   O&  $Y   b'4Y      F  .  :@	91 @	B /90KSX Y%!4&#"#4$32>Vhf#f   w  _  :@	 91 @	B /90KSX Y%4$32#4&#"!7g#ʲfhXdf     F.  =@	1 @B 90KSX Y#"$533265!>ʲf"f     w_  ?@	 91 @B 90KSX Y	'!32653#"$5g"ffd餗      	K';  ,     	'<  ,     	O'=  ,   ;'>  ,   ;O'?  ,   	'A  ,   	O'B  ,    ( 
 (  2654&""&546323326=3#"&=bFntnPX/Q,CEmaZT:KMMKFHn|ppX;oBGj9    $ 
 3 >  2654&"!&546323326=3#"&=!"&54632!2654&"bFntnP?+/Q,CEmaʔ/bFntnPZT:KMMKFH;XppX;oBGj9|ppX;T:KMMKFH    F  Y  <@
	91 B	/0KSX@
  Y!"3"$54$3!7YꏙbXhU F  Y'*<.    w  8	 91 B	/0KSX@
  Y!2654&#52#!wbgX   w'*\<0    FY  :@	
91 B
/0KSX@
  Y'!"$54$3"3!YhbƙXiU𥒥  FY'*i<2    \   '%!"&5463"3!\=.̞RiPYB~}nDZHC    w     %#535!53!3##q=ԭ-   !     %#5#53!3!3=~0Ԥ  !  O'*t6    w     533#!#5!5#5q=-ЭԤ w  O'*t8    !     3#!#!#5353=ԭ0~ !  O'*Vt:    
   33#!#!5#53m unfy~n       ,@
	221 @ /990%2654&#"672#"'"#3z_̀ٷ{O{ʃIH+    '    s  Z   @	 
21  	/0#   !3!   !5aPh//+ji    N 	  !!!5!;VnV    N     #5!5!5!53!!75$i2$i*mւVxnVnՆ     u  !s   #'#37͉sH+    'Y       	&,  :s     &-  <     O&-  =   
7&-  >   
7O&-  ?   &-  A   O&-  B      !!      !!#!YX
       !!###!YX

     !!#####!YX


    	H   !!#######!	\YX



  	   !!#########!YX




       !3!!       !333!!&     !33333!!e    	G   !3333333!!  	   !333333333!!       !3!!#!?r
    !333!!###!?r

    !33333!!#####!?r


 	Y #  !3333333!!#######!?r



  +  !333333333!!#########!?r




  SC   !3!!#!YX\\  SC   !333!!###!XX\\\\  SC   !33333!!#####!\X\\\\\\  S	FC #  !3333333!!#######!ZX\\\\\\\\  S	C +  !333333333!!#########!YX\\\\\\\\\\    !33!!##!՚rՙr
      %!3!!#!!2^DD^
    Wc   !!!5!5!!!wsX   	     #  5!!	!!'!%'!	!7%!77'7!	wwu||||||||||||u   
	G7 + / 3 7 ; ? C G K O  !5#535#535#53533533533533#3#3#!!#3%#3%#3#3%#3%#3#3%#3%#3??????𨨨      !!!!aO  q :#[   !'	7#}CrarCrrD    :[   !	!rarC}rbar    =  `  
  !#!#3!ff`G       [`    3!!!!!!!!j/t`Ӕ&    {o{ 4 = J  %#"'&=!.#"5>32>32#!3267#"'&32767%2654'&#"JԄ℄N̷hddddj||MI؏ii~ST`Te__ZjkSR\]i߬A@o\]Z^Z5*,=<wxx]^``FE..'00ZZWW`f{b:9ml)     >  >` 
  #  % 54)3#4+327#!5#53!2x9||ԙf_ڪrĐ q{ F      g`    32654&#%!   )s7F0Ǔ  $  g`    !   )#53!#32654&+7F0ɖzٍ`    `   !!!!!!/`Ӕ  | 1  #"&'5327654'&+5327654'&#"567632p<<rqLbaPQGwEFDCtHNTU]UUGZTUPA@]ON..@F-,38XZ88%l  Ly`    3#53`L   {`   =327653#"&DNg.+G=<=MFy,      `       {   37!!'7LnJ{dajkNj    O`     y`   qu{ R   {    q -	1 
   4& 3267 !  54 !  mn98/   q t	   %#>54& #.54 !  ì++f++$$>:#tNPƳPNM]*U     3 MY 	  +  	3267>54&#"'>3  '#  5467'7*(Ou))Hn.Mw834OMx43N)gA\*g>}66]C_56`?`  q{ & / =  5!&'&#"5>3267632#"'&'#"'&732767276'&#"qNffjbdjQGhi񈉉ijBN℄RR\]VVUVVV Zdc44*,nmn67윜78lkpĘZYWWsttstu  q/u{   4&#"# 32 /8   qu/   32653 #" 4/8     `    !264&#%!2#!#N[cc[H^^>   2  `  !  .54763!##"#676#";jpkla;;?î545w?@@?wiQP%$q2^66**TS++   2  `  !  &'&'3;3!"'&546#"37545â?;;a|lkpw?@@?wS66^2q$%PQicQ++ST** <  m`    `   $ 653 &53sXٹ};M      L+   %!5!2654&#!5!#TZ`fcL||Bt      N     5353!5!2654&#!5!#Z`fcxzʤ||Dv     /{ &  #!5!2654&#!5!27654'&#!5!#|vz{\MN`_`gb>>E__ru99wSS?yzVU  =  ` Y   V  5` Z   X  ` ]    x`   73264&+5%5!2 'Ӏ{n
 Fo}ɽBdd>Jm7    {   3!!I{/   =  `N      `   #!#`I`     `    Z  ^`   367653#5&'&3 U9VmmV9S`1Ms,}},uM L  s`    
h  
  !3#'!#ZgVXVq`      !!!!!5!#!.AeW"___DXI    
  &  327654'&#327654'&#%!2#!g1221g̼^-..-^EOO)(N^h+&&MO%%X@? ]65dL.-rUpz      
   327654'&#%! )[ZZ[vNONN]eefe        !!!!!!R-@___   S   !5!!5!5!5@-_/__  H~ $  5#5!#"'&547632&'&#"326 NJYXe|}}|\SRFFPOWWVVWCj]/rssr'y5UVVU   L   3!3#!#΀2Wr       3#        3+53265A@1(TFDE`Tl    i 
  33	##-<azBm     3!!_      33###|{9="     G 	  33##|_{EE     G 	  ##3G|_{EDE   H    "327654'&$  '&RQQRQQQQwvvwtww[\\[[\\[\vvvvuv    G>  @  "327654'&327654'&'52#"&54767&'&54763sCDDCstDCCBR65<%j<=0ER^X65`l<=ca==ll*6RI)++LK,++,KL++5##,&)$%LY+8:6iG2278PyAAyP87'21I.*   	   32764'&#%!2+#Y0110YQQQQ))))]?@@?   [     #'&'&+#!232654&#=)&''y.,,LPO)*s\^^\$)(GTD<<yO44KLIJJ     !!#!_     p@   3327653 '&5pnz{76[[[[v;;TSST   +   333##+ŏłɠ==*  M  +  "3276=7#5#"&546;54&#"56763267RF`:;ss(;<Umj_<:95@<;9LKE7@==d+_9l[il
GN`FG  M  -  27654&#"367632+32767#"'&567RF`:;tt(;<Um@?POj_<:95@<<8LLE7@=<e+f_966Zj66
GN`
FG    G    53#5#"'&76322764'&"Jtt%78NQPPQN874555555_^8Z[([ZA@@AA@@   M 3 < J  #"'&=!&'&#"56763267632+3267#"&%3276?27654'&#"/SST@AsA~??ABBjNN0.DD[wPO45_=r5?x9Y44V`;:	66)(Fa::34QR2k88a"!CC"!h^j66
G''`6T2311X6E7  =<e   u     4'&"27>32#"&'#3t4554455$pMPPPPMp$uuc@AA@@AA86Z[[Z68^g   G    3#5#"'&76322764'&"Jtt%78NPQQPN874555555S^8Z[([Z@AA@@AA  G  #  !32767#"'&547632&'&#"@AsC?>>>BADbc^]SSt44Va::	2j88aWW[ZQRmT3210X    G   MKSX@	 2KSKQZKT[X   888Y1 @		/0Y5!.#"5>32#"&73267GsC}>?CŻthVau2koamTebX    Tb 2  &'&547632.#";#"32767#"&5476G&%HG{065>=f,K,,+*Ib]W-155_;65-9553+,$$4O,,^$'U13 
`fa<))     R` 1  #"'&'532654'&+5327654'&#"5>32FLHG{065>=23-KX+*Ib]V.156_:65-9j2RQ,+H4O-+]4$'U 12 
`33a<))   G  1   4'&#"327#"'&'53276=#"'&763253J44^]4444]^4PP=7633223r99$88NOPPON88$tm=>>==>>FNO	e45k37XX"XX7_  z     3#53zttt   u 
  33	##uuZu2  u{ " 4@
$ 
#</9/1$] @
 ##<<<20#4&#"#3>32>32#4&#"tHKYhuu'oMLl+yRowtHJZiw[Wk\sa97EBEB~wZXk  u  4@ </KQX @8Y1 ] @0+532654&#"#36763243rB0NN^luu)89Jy?>zx66X6VYYk\sa8BD     G   6@	KSKQZKT[X  	88Y1 @ /0"32654&'2#"&546]ml^]ll]ǁqqpoW    Gu    67632#"'&'532764'&#"G0336^_]^:5311213p?>>?p3121
	XXYY

_?@@?    G   4'&"#46320T6667zWVoBAA@qWW     G   27653#"'&506667zVWoBAA@qWW  u    #3>32#"&$4'&"27uu$pMPPPPMpf4554455b_86Z[[Z6@AA@@AA     #   3#;#"'&5#5350Hww33UUPM,V-,vTP   n   3327653#5#"&nt''N^67tt+78Jy~{Y,-65\c`9    nA   !5!27654'&#!5!#Ue22<<gpl@>KLg#"FS10gg%dAl88   u{ (  #"&53327653327653#5#"&Q+<=Rnxu$$IZ54t$$KY45tt(78LMlE!"z[+,64\c[+,66Zcb;F     &   33#&{{     y    #! !&'3254554#"tnυ9F}攥^ ؙ83a_{      3#5&+532{t<,||GX   G  +  &#" '&54767&54!232654'&'&yAJZVWVWW!/bL+"766^]l9=P(r(B4?KWXXWr]$,O'(@?Ajp69  G	 
 )  "27654'&'2##5"'&5476734
)=;67-!XQVVQs~SVV@h)%661FQ:5}t?3XJOZUUXR=\,Ajq@:  %   '#&+53;'&^sa,(^ra,GX]:DFY z   gO  d   u  u  d   ns  d   &  s  d   yo  d   s  d    y    67632#"&'#44&#"326&_%sNo%ti\[jj[\i92ض78"{qqr G	x  d   %t  d    V{  (  !2.#">32#"&'#32654&#"aQQR9||9F,*[cbbc#    L    t  `   5!#3#3!53#53t𰰰त T    2V${  " +  %##533>323##"&!3276!&'&#"s:{ˀft{7JTTJf>TT>̪daÐꕢafttf>VttV    V/   %+53276'7#3/F0j&*06     G    #367632#"'&$4'&"27tt%87NPQQPN78f5455554_s^8Z[[ZA@@AA@@    Gu   &'&#"32767#"&54632u1122q>??>q22110h;533`@??@_	
     GKu  +  325&#"47&'&54632&'&#"632#"Z%0\R@5`$^4412/412q>??5{3 * &;/Z	
`?@@bi   G  .  &'&#"32654'&7#"&54632''7'37 i:;n\[nO$$ZYdrP
=<mj||jD54PQPaWWe<83rQ>67    Tb 1  #"'&'5327654'&+532654'&#"5>32N+,QR2658-56:_651.V]aIV-+K-32==l/|GHL))<a33`
 31U2'$^,,O4H      #"3###5354763o>unn77wU:8P#P,i/0  \   +53276=#533343r,Brrtnx66XUP#P    G  ,  5#"3276#"'&'53276=#"'&54763J]4444]^44tPP=7633223r99$88NOPPO>==>>=۠NO	e45k37XXXX   n   3327653##"&nt''N^67tt+87Jy~{Y,-65\cO9   I    5333##53#Irtggttt\\j     z~   ;#"&5C,rfpUWlw   I   5!#3!53IMjjo\\E\\  I   5!#3#3!535#535IMjjjjooo\\\\\\   V`     3#"54;33#'#"3276ztteztry"3rKNB,|ssW?#5$  z~   3;#"&5ztC,rfSVXlx   [`   +53276'7#3`34r,Bttax66XSg     q   3!!q_   u{ 4  67632+53265&7454&#"#4'&#"#367632+=<Ro;<frB0HJZ45t$$KY44uu'87ML66E!!ED~zxlX6V0=-ZX56\w[,+56\sa9"#     u{ (  #"&53327653327653##"&Q+<=Rnxu$$IZ54t$$KY45tt(78LMlE"!~{[+,55\c[+,65[cQ:F      +532653>32#4'&#"43r,B0t*pJz>?t'(N^66x66X6V~a88BDwY,-56\    uU    4'&#"#367632;#"'&5P''N^66uu)89Jy?>0B,r34Y,-56\sa8BDzV6X66x    q 	  33##q-{{~     G      2#"'&5476"!&'!3276WVVWUWWU6//1w&6^]6&WWWXXWWWW@9\[8E-AA.     G  & .  #5!#3!535&'&5476767654'&OpFVVFp^nCWWCnt6%66%4#76$\\FWWG\\FWWE[*,ApoA-9*A@+  Fa :  .#"#"/;#"'&=32654'&/.547632;1j8W*,]({44MN9>0Br34@?>=RX l)k`GF@rb/$+*MW33	V6X66x"j2-*TIX00       476;#"+5326z73zno>43r,B0]Me30U:Jx66X6     #   3#;+5326=#"'&5#5350Hw43r,B033UUPM,ax66X6V-,vTP  ^  !  533!33##5#"&=)3276^ntgtuut+87Jy~''N^61\\`9Y,-6/     G &  5!327654'&'5!# '&54767GE()78Z[78*,?G$"ZYYZ!"J\{':?KY7667YR8>#{\8?>LRRQRR<=:     u   2653#"'&53QHuDEEDuHPZs{>??>{}ZP   z   3+"&53?27654'&'&gH#"YZ,rftA Z87)2:08?>LRRlwpU67YQ8C     &   ##3{{	s    7n 	  !!!5!G'L\^=R^    7   !!#;#"&=!5!G'LC,rf>\^=RVXlx^   7^n    #47#5!5!3632#'3254#|`\'Ln&m,7!!^R^=jR3     7 !  2#"'&'5327654'&+5!5!hCQ>63``;??C5~Ex>?::hn\& =;M|CD
m**PJ*)]R^     G     !32767&'&"2#"&76So/6^]6/	+66,ǗWVVWVV*MWXMmGYXFovw^wwwv    [f   !5!73 [f   3!Px    [f   #'!5f    [f   !!#PU騋f Bf 	  3#'#35fx Bf 	  73#'#˴fx    h'  $   {-{'T  D     P'*u %   R'> E   & %     & E     & %      & E      su'l'#Lv    quf&    vC      P'*u '   qZ'u G   '  '   qZ'f  G   '  '   qZ'f  G   w& '   z[   quZ& G   z    '  '   qZ'f  G     Z& (  [    q^'[ H     Z& (  Z    q^& H  Z K& (   7 qK{& H   7 v& (      qv{& H      um')u& (   z    quH& H  '    zK      #O'*vt )   /  'u I   s& *  2" qVZ& J  I      ;N'*s +     dR'> K   ;'   +   d'   K     ;P& +   j@  dN'> K   t;& +   z td& K   z 9;& +  
   9d& K      v& ,  J  vg'   L     YZ& ,  Xt    F&   Xa   jl'#v .     l'#Zv N   j& .     & N     j& .     & N  v    j'   /   ''   O  jk'*u'  /  S1' q(;	5   j& /     J'   O   j' & /  \'& O     l'#sv 0     f& P   v     O'*wt 0     '   P   't   0   {'   P     3P'*u 1     d'   Q   3'   1   d{'   Q   3& 1      d{& Q      3' & 1   d{' & Q   sZ& 2  `f    qu& R  ` sV& 2  ^l    qu& R  ' j o $r  sZ& 2  [j    qu^& R  [ sZ& 2  Zh    qu^'Z R     l'#v 3   Vf& S   v2      O'*t 3   V'   S     TN'*s 5     J'   U   T'}   5   J{'    U   T1' q };	X   J& q	Y     T& 5      TJ{& U     O'*t 6   o''   V   '   6   o{'%  V   m'#v'* 6   of& V  &V v      W&_  6     o'-#   O'*t	`   o''	a    O'*rt 7   7  'u W  'q   7   7'   W  & 7  b    7&  W    ' r& 7   7''& W   )'   8   X{'{   X   v)& 8      vX{& X      K)& 8   7 KX{& X  u 7 )Z&`.  8     X&+   v  )4&V2  8     X'V X     h}& 9   F =  7& Y  m    h& 9     =`& Y  ^   D  r'%| :   V  5k' C	  Z   D  r'#| :   V  5m' v  Z   D  N' j> :   V  5' jE   Z   D  N'*s :   V  5'G   Z   D& :     V5`& Z  J   =  ;O'*s ;   ;  y'b   [   =  ;N& ;   j > ;  y& [   jf     P'*ru <   =V'`   \   \  m'&u =   X  f& ]      \& =     X`& ]  1   \& =      X`& ]      d& K  f      N& W   j-> V  5& Z  B   =V& \      {a& D     /  'uA         !#'7#53546;#"7Jݰd&&KhjN()gti    /     !##535#53676;#"3#GWd&EFV( D     7  &#"#4>32"#"'532654.546m@f_@&9dc07CjjCӴmob)F[dd[F)Z@hoϋ\(Ž}_-C-->T\_EFvX5P3) $2BgC quI   h'   $   {-{'!   D     h& $  u {-{& D  T     h:& $  a     {'a D     h:& $  b     {-& D  b   h[& $  h     {'h D     hu& $  c     {- 'c D   hm&      {-f&   "     hZ& $  e     {-'e D     hZ& $  f     {-'f D     h& $  g     {-5'g D     hY& $  d     {-& D  d h&      {-&   3   & (     q{& H       & (  u q{& H       ^'$u (   q7'    H     :& (  a     q'a H     :& (  b    q'b H     [& (  h    q& H  h   u& (  c    q 'c H   m&      qf'  &	      Z  & ,  #u D  |&     & ,  .   y& L     s& 2  '   qu{& R  s   s& 2  'u qu{& R  }   s:& 2  al    q'a R   s:& 2  bj    qu'b R   s[& 2  hj    q'h R   su& 2  ce    qu 'c R   sm&   '   quf's  &	  s    gk'#'ub   vf& vs c     gk'%'ub   vf& Cs c     g&b  'u v{&c  }   g^'$'ub   v7&s c     g&b  '   v&c  s   )& 8     X{& X  {   )& 8  u X{& X  }   _k'#uq   if& v{ r     _k'%uq   if& C{ r     _&q  u i{&r  }   _^'$uq   i7'   r   _&q     i&r  {    r& <  %r| =Vk& \   C!  'v   <   =V`'t   \    & <  r| =V& \  `   ^'$ru <   =V7&w  \         	  333!!+ժ           33533#####53มม}} qa&F  
p    qa&F  
H    qf&F  
    qf&F  
    qf&F  
    qf&F  
    qm&F  
v    qm&F  
D      ha&'  
#     ha&'  
     f''  
|       f''  
Ĉ    f''   
S       Xf''   
o       m&'1 
Q     m&'x 
N   a&J  
D    a&J  
9    f&J  
     f&J  
%    f&J  
O    f&J  
R      -a'+   
       -a'+   
       7f'+  
|       If'+  
Ĉ    f'+"  
S       f'+^  
o     Vda&L  
    Vda&L  
    Vdf&L  
    Vdf&L  
p    Vdf&L  
    Vdf&L  
    Vdm&L  
    Vdm&L  
      a'-   
       a'-   
       f'-  
|       f'-  
Ĉ    nf'-3  
S       f'-d  
o       m'-t  
Q       m'-  
N       na&N  
     na&N  
    f&N  
'    f&N  
<     f&N  
Q    f&N  
=    nm&N  
    nm&N  
     Aa'/   
       5a'/   
       Kf'/  
|       Kf'/  
Ĉ    f'/4  
S       f'/p  
o       "m'/  
Q       )m'/  
N     qua&T  
x    qua&T  
n    quf&T  
e    quf&T  
T    quf&T  
    quf&T  
    a&5# 
   Va&5} 
   Of'5v  
|     Yf'5  
Ĉ  f'56  
S     Pf'5w  
o     *a&Z  
=    *a&Z  
    *f&Z  
'    *f&Z  
!    *f&Z  
`    *f&Z  
W    *m&Z  
8    *m&Z  
      Ia':b  
       f':  
Ĉ    f':6  
o       3m':L  
N     'a&^  
^   'a&^  
T   'f&^  
Y   'f&^  
^   'f&^  
   'f&^  
   'm&^  
c   'm&^  
^     a&>N 
     qa'>   
       if'>  
|       uf'>  
Ĉ    Cf'>t  
S       yf'>  
o       m'>B  
Q       Pm'>  
N     qf&F  
t    qfA   f&J  
T    fB   Vdf&L  
    VdfC    nf&N  
     fD   quf&T  
{    qufa   *f&Z  
0    *fb   'f&^  
M   'fc   qVa&	  H    qVa&	  H    qVf&	  H    qVf&	  H    qVf&	  H    qVf&	  H    qVm&
   H    qVm&
  H    Vha&
  
    Vha&
  
    Vf&
  
F   Vf&
  
F   Vf&
  
h   VXf&
  
   Vm&
  
    Vm&
	  
2   Vda&
  8   Vda&
  8   Vdf&
  8   Vdf&
  8   Vdf&
  8   Vdf&
  8   Vdm&
  8   Vdm&
  8   Va&
  
   Va&
  
   Vf&
   
   Vf&
!  
   Vnf&
"  
#   Vf&
#  
T   Vm&
$  
d   Vm&
%  
   V'a&
N  Y   V'a&
O  Y   V'f&
P  Y   V'f&
Q  Y   V'f&
R  Y   V'f&
S  Y   V'm&
T  Y   V'm&
U  Y   Va&
V  
\   Vqa&
W  
   Vif&
X  
   Vuf&
Y  
   VCf&
Z  
   Vyf&
[  
   Vm&
\  
P   VPm&
]  
   qH&F  z    q&F   qy    qVf&
^  H    qVy&F  H    qVf&A  H    q7&F  
n    qV7&
  H      hm&'  )u   h1&'   q ;  f&'B 
R     hf   Vh&'  
   xa
  V   xa  H	<ܲ?]1 	 Դ?_]KPXY̲?]90IIPX@@88Y#55#53xg    J7   FJm'$  j   Vdf&
b  8   Vd{&L  8   Vdf&C  8   Vd7&L  
    Vd7&
  8    f'+b  
R      uf     f'-n  
R      f!   V;&-  
    f'
  
	     f'
.  
B  Jm'$ 
    nH&N  $    n&N   q    n&N  
.     &    x7&N  
.    zm&N  
0    gm&/  ).u   Y1&/   q.;  f'/q  
R      }f"   ~f'
  
     f'
  
_  Jm'$ 
   *H&Z  '    *&Z   q$    *&Z  
    *E   Va&V  
    Va&V  
    *7&Z  
'    *m&Z  
     m&:  )vu  1&:   q ;  f':  
R      f$     5a'7   
     F)& j  
  l FR   f C   V'f&
j  Y   V'`&^  Y   V'f&c  Y   '7&^  
O   V'7&
  Y  f'5;  
R    f#    f'>D  
R      f%   NV&>  
  sRf v   xa  H 	ܲ?]<1 	 Դ?_]KPXY̲?]90IIPX@@88Y53#7"͔g  d    1 0!!d  d
    dy    /1 0!!dOy    dy    /1 0!!d8y    dy    /1 0!!d8y       y    /1 0!!  y& _   _J  & B   B  B    @  1 0#53ӤR?       @  1 03#ӤR՘?        @  1 0%3# ӤR@     #5R՘?     m   '@ 		
 1 <20#53#53ӤRӤR??  m   '@	 	
 1 <203#%3# ӤRӤRլ@@  m    '@	  	
1 <20%3#%3#ӤRfӤR@@   m    #5!#5RmRխ??  9;  '@
 YW	Y <<1 <203!!#!5!oo\]   9;  >@  
 
 YW	Y<<2<<21 22220%!#!5!!5!3!!!oooo\\ 3!  	\ 1 04632#"&3~|}}||}  3q   3         1  /073#    k     1  /<20%3#%3#V           #@ 
 	1 /<<220%3#%3#%3#   ki   3#i  q
L   # ' 3 ? K @D$%&%&'$'B@ .(F4:&$L%IC'1+C=	1=I7+!L991 2<<2220KSXY"KTK	T[KT[KT[KT[KT[X L @  L L878Y"32654&'2#"&5462#"&546!3#"32654&2#"&546"32654&WddWUccUt%ZVcbWWcdWccWUccܻۻۻۼܻۻ    	 qr   " - 7 ; E P \  "32654&'2#"&546"32654&'2#"&546   &54%3#"26542#"&546"32654&WddWUccUyWddWUccU<¹ߠZucbcNWccWUccۻۻۻۼ5ۻ  (`   3(`u    (`&  ,   (`',  &  X    (`   #3W`u (`&  ,   (`&  'X  ,       #'#R     s#  G@%  B  on291 90KSXY"	5s-+#R    #  I@&   B o p<91 90KSXY"5	+-#^R^   &  K' N'  ' =N    O' ^   O           $  #5>323#7>54'&L Za^gHZX/'-93A%#C98LVV/5<4BR-5^1Y7   | B  _     %
ĳ 991@
  <202$7#"$'56:<hh~vvuw~ig   n  %
ĳ 991@
  <202&$#"56$6;>nvv~hhgi~wu   I   3	##bbc$$v  ='   {'  {       3_   !!V_     +@  B 1 0KSXY"3#-\   X   3!!#3hX^#"#J    X   53#5!!53X^Jݏޏ    J  & "  "g     J& "   J     J' ^   "      d]  7 91 @
B <20KSXY327# 'du](   ;   2###׎辸     (    3+"&5463yv}~}|   (    ';2+v~}O|}  =k   {   B#  	  #5#5R#۬@   n&"  #     =o'         BC'    '    H    d1   #"'&'&'&#"5>32326撔
錄ܔ撰錂1OD;>MSOE<>L~#     8 |   #'7!5!'737!!qaqqaq)`rrbqr  2     535353,    (`$',  &  '  X   f N      53!535353fXp     f N       5353535353,p           3#3#'   d      3#%3#3#3#di  p  D       %53535353#!5!3!,|f fe      P>     3#3#3#>     w      3#3#3#3#     W     "27654/2#"&5462332233VVVVVVV   z    @	 <<1 @  03#3#zttttg   ?   @ 	
 ]<291 <290KTKT[KT[KT[KT[K
T[X  @   878Y KTKT[X     @878Y@T/9IFYi  " 5 G KS [e    ]]	!33##5!55bf]my   f    !!67632#"&'53264&#"y^^a`<~B9>>Eoo4h6_	MLKJqff  \  /  "327654'&&'&#"67632#"&547632X3333XW33331221DD
&9:DTTXWll122m45[Z4554Z[54bg
KL1LMONuv	   l   !#!liH30    Y  * :   "32764'%&'&546 #"'&54767327654'&#" 55j]\655T./RQ./SZ85UVUV56-/.UQ100/SS0/*,+KLV,++]12Hdt::dJ01:7PyAAAAyN98?&%%$A?&%%$   S  .  532767#"&547632#"'&2654'&#"1220DC
#<9EWXWXkl122Xf33XU5443g
KK/MNoouv	rh\Z4554Z\44   k   !!#!5!Q_i_k_8_8     3   !!'3_    a    !!!!''^_    o   #&'&4767TRRTe^///._~  g   3#676'&ge_/../_eT)**)~~~  u  0@ 
</KQX@8Y1] @<0#4&#"#3>32tNN^luu)qJy}wYYk\sa88   WTN  d     C {  d   ^  T t  d   bT u  d   ?  CP  d   fCQ  d   \TR  d   l  CS  d   YTT  d   STU  d     V  d   8W  d    	X  d   oifY  d   gifZ  d   M  d   G  d   G  d   u  !s  d   G  d   u  gr  d   u  g  d   z   g  d   u  {  d   u  [  d   u  d   u    d   #  %  d    V   #  #"  32.#"3267!!!!!!Oc%eNLbbL:/667756GFDFG
k  s9 ' . 4  73&'3267#"'#7&'#7&'&76%73&'hA>/(%:@w]ayA9&AX}R4>C5Ai<)^_HH?WghйKp(   ` ,  %6767#   !2.#"3>32.#".aXj]aye6{_]w|^0n&<$'/_HGghGG_^ٜu]\Y         !!!!3###5qZpP~WHE9E      b #  !!53#535#535632.#"!!!5-쿿=OL=tyB_))H   B +  #&'&#"#3676323632#4&#"#̪m49wSS>YXyzU6%X\xruxGM_a`f21>&>E3\   "     " & )  ''#!333#3#!###535#53355P8ĢĢ8PP4&{{&&{{{  	  P  32654&#+#!233!!;532654&/.54632.#"#"&'5#"&5qzzWQeGl`[z_<`HJU];Ufɘ/ϒjqqR>N#55YQKP%$((TT@I!*##`    3  E  326&##.+#! 32654&/.54632.#"#"'&ٿJx }A{>[b`cae@fLNZb?ĥZa,/b؍$~3YQKP%$((TT@I!*     ;    " & ) - 1  '#53'3!73!733#3#####5!73'!!7]:1000019]zu }Luuguuguuuu    _    %  #4&#!#)" 33!3_ SV*$oN   q&          1@: "+	 /)	2+"!)#&
	, & &*!/<299999999991 22<20K	TKT[KT[KT[KT[KT[X 2  2 2 @878Y@z 1Tilnooooiko o!o"o#n$l%i'i-	
 !"#$%&'()*+,-2  		  	USjg
] ].#"!!!!3267#" #734&5465#73 32[f A78 ʝf[Y`(77(6bbiZȻ{.# .{ZiHH"{/ #/{"G  (     33!!###5uX_Tws1s         !5!!77#'%5'&PPM4Mo؈onوn    9	  - b w   '67>32#"'&'"326767654'&'&67'>7632#"'.'&/#"'&54632326767654'&'&&#"32">1aJ{%A01Q[W7>/W1
 >$<. #dCw-^URB$`>DL_K>.3b @N\uLMiI(S395l9,8G(/& -9)ЗiRm:3Xwdg7? 2j7#=5(6$ 629T/(2M
!:5S}$@{mbq~Es/4	
-&

"TAB`]|@8nRkcd]aC"   . ) 5  '632327&547632#527654'#"'&#"%654'&#"o|@X"07PYtaTk~j[IwmqJ2530D#24!`NkBX``S㫣qJ<Xr~hFlV1??0W     D    $ + 1  5#53!23#3#+##5!3276!&'&+!!64RRL\HGZMSMM##VtqDjt,tkDqxttzIYIV,   ][x $ -  #5&'&76753&'&'6767#5!'߉ߌi`p^_kbkN?H9x"cxhuOooOmnͦ$F_0,?'S*% lҙl          5!3!!3##!##5373!/3310GҪյICDiR{{{{{A    u 6  6767!5!67654&#"5>323!!!3267# $547#5\J5;_srigCS1r{jJ,{	+kv67&&UB{\*{;^~FE/0K?{  r  *  .#267#&'&576753r\ee\Z\X[dtye]X\[CvlCiZZiH$"v9Bt"$CuflC          !!!!#!ժx	     j   &  7!!!##&'&+532767!7!&'&#j77O57=A}A=;AٿKDFxJD7 -JZ{{N{~U]$HDh01C>r{C4X    
      !#'%5'%3772 hN4L4PP~n؉noوo.  C      !2+!!##535#5;2654&+*⦦       3!~ d    =   !5!'3
G~d  =z   !#'73!5~~͛ =z   5!'3#7=~~d͛ {      3#%3#%3#yf   P{        3#%3#%3#%3#ky)   =z   #'73!'3#7~~<~~͛͛    C 
 $ ( B  "326=7#5#"&54634&#"5>32%3#.#"3267#"&54632pSHfmƩogDc\GD^o8yy8o^IICBRCI
M>OW\ 7$44"  C   + E I  .46'&#"#&'53254&'"326=7#5#"&54634&#"5>32%3#VNz$p;i0ʪ%={pSHfmƩogDc\GD}|49d$,
!5Lf,1BRCI
M>OW\ 7$   s'  !  .#"3267#   !2'Y藣yyYjzS#bvAZ4-4ZBuHHghG[!!   m& r   &F       +  ,/ -/ ܸ  ܸ , (и (/ A   &  6  F  V  f  v              ]A     ]   	и  и  и   #  
/ ! " + !0153&'&'6767!!5&'&76wI3cc3I86QLNN7887NNMR48_ki:rq;zn#++$* rn     <   ( 2  .#"3267#"&54632%3#"326&$  &54^o8yy8o^IICDkavva`ww~44"K   <M  - 1  332653#5#"&.#"3267#"&54632%3#\QPcu`^o8yy8o^IICDLriuD	P44"K    {R   o#       && r   )    I o  !6767632#"'&#"32767#"'&'&547!#"'&54632327676"#"'&'&54767632l(9BKc{=&%%03!((!,739%7`lG;725]hB4,'5	'B[QF$%]c'G			%!	}Kr~,1ьIg)*!&!(D;w},75;!_']7:y}[Ϟ\@4>#,!,'QF j(JG4$$,*)/9yK#%     P  73276767654'&'&#"&'&"'632654'&'&54767767#"'&'672 #"*i(X%#1FSE/O.55FuPU[QF[00rl~"KI}!;IFs;n;_T^͌Q79}w^l.Gyr\[4O9%#i#^MX;yv@c}e.ID\7I;>2V秉uӰ           3!3%!!!!!!nnqdx+%   H     #>54&#"#3>32u	
j_ y/wFx	\/HT^Ȧ^m$R     Z     3%632##"#'7-P4-> {|a\=BcL   ;t 9  #"'&5476323276765"#"'&54767632thn<7#;KQ>!|Za,4(XM!},<7D9#7.M=.1?@	'(MXI('     jF ! 2  ?632327654'&54?#"'&#"632327#"&#"jou9!ydG>PPPP5ʺ68^nm{z}}ȋo֏zZ'PVaK~pmdykb^OP681/::b:    Dn J  327654'7#"'&'$#5"'47676766767632#"'&'&'&#"32nZS<gVB	,nyy4fXRD755I1%07#!@crGB),)39K.#$&7B>_n0VBRny#HB?X!$9BMw>7l.;7%,;(ӧuy,D0     &  3273#"'#67&5477632654#0)W:K<FLF?KlP
uhH{}H9masf59nNU;uQN]\&EW     '  3353!!>32 #"&'####53 &  O:{ {:ܧ$}daad}j        %#	!3!# dX0ddq+    6     + /BB  /,/< -ݰ.<-ް#?
<#9 FhH)##Ii;B B=#IbiF`FaC`#BC`C UXC`C8Y& < B B00< İ<6<<9 FhH
 #Ih;<ְ ݰ,9, FhH &ְ& #Ii;/,#Ih:1#IC`#BC`C PX& ,/C`C8K
RX#IC`#BC`C@PXC`C@aC`#BC`C8YYYB B=#IbiF`FaC`#BC`C UXC`C8Y#)< B B1#I RX
<
<
Y3525!463"!4632#"&732654&#"5!6jgggg92299229k̀k@4nNggNNggD{{       " -   !   ! !   !  '32654&#%!2+#JR12)uyӲckkc?L00ey	wXQPXd     n;C 0 <  67632#"'67327654'&#"#"'&57&547276545[ۄFIyeL	)qz]E& JEYq:?.蔁0.A ƂMkeLPק<+(h|H=y|n=B{u.F/4_N     T      33!27&#%!2+!67654'&,d.@nX<-]\,qjdZ)VV)  s   ! )  %#'#   !  % 7& 676'&B
3y;:x+lllli$  #ab[2222jT%%5$c$    B2  _  327654'&'&'#"'&5476323276765""'&5476!6?232767#"'&B=]iS\ZV30Fn7;#FfS9!!<	#5,h";<2XngZR{,##9>;K!QIag£S	D5@7*'S:y}*7H0	5#!,Il@3Xnh0{(2r:=O   Sl I X  &54'&#"#"'&527654'&#"3"'&547632763227767654'&#"R(O*\xggfg-.@@?@@?\QA@@@S6fggfeӻp/$~AB}:1$ -*MJJ@f[+8vuuvzVWWWXWWVVW\uvuuu# bW1W{|^1$h{vC[SK\GChfy 
/    2 	  & . 2  &'&+3!.+!! !27&#676'&%3LDEx-Me5q>HJxn u1EA+ZY*01/O~hbb)j)V>U)-          / !/   и / ܸ  и ! ܸ A     ]A   )  9  I  Y  i  y              ] 	и 	/   9  / / /    +    + 0132654&#+#!273	##s sNCI/ϒ_6۬kk    %T  $ + .  3&##&'&''7#!27%767654#?\A>:AٿKE6ToF^~_,8~|T3Jۏ/HDh0&	,ok؍]-Dbg   ( ' 4  .#"#"&'532654&/.54632733###UW'AG/E8pi4sG[d/EK7?8pc|3iиY"*/( 	VAO[`*,2,*
	M=H\T(l     0`     !!#!!!!!!!3!!rso+` `ffff    'F   >@!
	 	b	bcbc91 <<2<<903#######5Jq7rqr  /B^^     "h   	%73#'	3,o-MoF+,     \      %#!!!5!8kO8dqddd  XL/    654&#!5!5!5!!2!"'X	$''ߦԧc̆eeaԊfJ  N  >   Ns    D U  767654'&#"#"'&5733272632632!"'4'&'&#"'6763232767654'&'&#"_}yj#1Q\$####,TGG\<lG2e$sa#0EKXQ<M@uJ&'!gl]	yj.#.#!<#!;GBw,<$=,##wUtKyyV?@!j.   D  
`   !4'&+532N"$lXnPRՑ.0`b6      j .     hm     \  . 2 ? R  2)7276765"#"'&5476%7227654'&'&#2767654'&'&#"q__ys;9M!,&q	Ƒ0IgKqSF*el\lh0XV.TMvKI.XTa^}u;IM=,3!#Vt'I@3HlhJ3pRuF*(0XrV,n    7 =  6%7&''67654'&7"-$'&'&5476KG/(ih;u)FsZI#.!}Iike].0^5#lrw(!.D$"9BG32K%Fn#I#t3tR]&9K(V\ѽ    }Y-  )  % 7673 $54$32!"53!25&'&#"C]JjMo_zggJF__DM3TT<`xGZAEIpP3RQ4O    W`D  %  327673 '&5476 3 7654#" ,";t9f(hdoN1Rkpㆺ9A&"^>n#?QY>kDM4giMq     E  #"'&'&5476?&'&547632#"'&547654'&#"3"32767'_ilE_ml=Oc{T3-2")%+fa@aP/Z_|{w:maZu>IhA"%@_l$=PczS2VN-2!$+%$+@e}N069na[u>_   T M  #"'&'!#!"'&547632327676=!7!&#"#"'&5476!27327#X':'7?<=**M_4.B^l{>!'Ba>nG#&#w4$B00!K=DcK_4B(03B{>ceDInFT=I,Fw7K.	0     # 	  )5!!5!3#Pʪ     9B k  32767"'&'&47'&'&'#"'&547632326765&#"6767632377632#"'&'&'&#",5(.'*'E`97y{7a;f7;>F3.^PeMD*#7@,j!HhH<=.%_yipp3T}B',$*5܀/,,@!;Da97TVM;nwF^O?/,%!;>jytX<;}f?E'_nH''#	.   hJ)    4&#"322#"&54WOmVPmݢt}t{أأ     g 4  	4'+5654/&4?'&547	'&5474/c2>Bd=VE/b5c2ltc2c2uc1LS2?Bd,>8?]/c6c1LS2tc1LS2c1LS2 9 0  3#!".54?>3!4'.#!".54>323!2O,""$%@;5H*Y[#$"x21[G(  W   A ,  !2#"&/#!"54?>3!!"&5462TPl0%=
-d,mF"$mG-.7#*(/
$"Sae(!q~B;   V &  !"&54>323!2#"&'&5
 mG*
5G0%9
.q~( 0(/
&Js!S'DQI    F      4632#"&3!53#5!pQOooOQpoTQooQOonuyy5y  ZR; 	    !   !  !   ! HH#[[breH
!#y;:x     	L` 	      !!!!#!3#'!#33	#	#Dj wZDZ֏R``C5MR.}   $z`  - 1  %5"'&'&5#2327#"'&5#!#"#463!#3#,	9Yl(Ht*=Z2dr!Z4@'!8֦zEB
bLs{dY   sZ{    3#"#4763 3׮UEEl4FũdGQnCF\xB*WbOZ=      0  	  3%!!,:*nqdd          3!3!!!!
nn8qq  wS    	!	!	!!5	5Y*dccS     !!6$3   !"$'53   !"kJu^uopkoSUggHF_`2/.2%         :1 /0!#!5!)+         :1  /0!5!_++      !#	#3bef9  W  J    "    )327&#!3676654'&|tK"P"coAfյ|cv~dAAxPfUm  Z 
  # 2  !7#"5476 32!3	32767654'&#"* 6B8wx!Nbb|˞"#>|OO'vN	2wx87tKsO=  =d01PD10d^dTd6Jthi     [{ 
 ( 2  32767# '&5477632!7!654'&#"N&#G_yZ\klmk}Z5fF
9NJC0<7h:J(u*oDMcFPZd82vRs  O       3#3#!!ɸ.Ԇ$N9` V     3##676#732767!ɸ.fʆ#5H2K1i0/N)deеT0Hd01``     ; & 0  	#473>32 #"&'532654&7>54&#";Ht]h202޸SUWDi;2[UԠ_I@Yr~YW׀c?}<$$/1oX3gQX?@   Q  ` 	 $@		F 
21 @ /0!5!!5!`o `''5  & {  Sd t''5  & {  Ud 
''5  & {  ' {dNd X& {  ''5   ud ^X& t  ''5   ud ^& {  ''5  Qd ^^& t  ''5  Qd b^& u  ''5  Qd ?^&P  ''5  Qd ~& {  ''5  Rd f~&Q  ''5  Rd w& {  ''5  Td bw& u  ''5  Td fw&Q  ''5  Td lw&S  ''5  Td & {  '5      ,     '& ,   ,     & ,  ' ,   ,(     Q& ,   9     h 9     & 9   ,     ,& 9  ' ,   ,     	& 9  ' ,  ' ,   ,-     & ,   ;   =  ; ;   =  & ;   ,   =  B& ;  ' ,   ,     j /   s' &      '      0     y L     & L   Lp     Y& L  ' Lp   L     A& L   Y   =  ` Y   =  & Y   LD   =  -& Y  ' LD   L   =  & Y  ' LD  ' L   L$     J& L   [   ;  y` [   ;  & [   L[   ;  D& [  ' L[   L     y O   q{ F   qZ G     { P    y  	}        )   !3   !##   !5hPPh55~ji.,w       #  	  + 	   +    +  	  A     ]A   )  9  I  Y  i  y              ] 	 A     ]A   )  9  I  Y  i  y              ]  %   " +    +     +  
  + 
013   !#3 #32654&#!   )5H HNhPaY.,职~     y  	}   ( 1 C  3 +3   !32654&+!   )   #"35#   !35#"&546!`H H5NNPhthNN5H /ó.,	ji~   s'H   {    sV'   .#   !267##   !2'f  fvzSb_^^_$ghG    WX''5  ' udN    d ?8 	 	 
2@	@@	00	]1@
	 
 990@		  	 <<@<<KSX 	<<		 Y5!!dx=xUZxx      	 @
	 
991 	 
2@	OO	??	]0@		  	 <<@<<KSX	<<		 Y3'#'-Zxxvx<x   u P8 	 	 
2@	OO	__	]1@
	 
 990@		  	 <<@<<KSX 	<<		 Y'7!5!'7Pwx=xZwxx   	 @
	 
991 	 
2@	@@	PP	]0@		  	 <<@<<KSX	<<		 Y#737Zvxxx<x    d P8  ڶ
	 22@PP_
_O
O]1 @
 	9220@   <<@<<@

			
<<@<<KSX 
<<<< 

	Y5!'7'7!dxxwxDxUZxxwZwxx      @
 	9221 
	 22@__P
POO@
@]0@   <<@<<@

			
<<@<<KSX
<<<< 

	Y3'7#7'-ZxxxZvxxvxCxvxx     4 	  7!!# ?,^xt?x^   4 	  #'!5`?x^?Jx^   4 	  %!5!73?Jx^s?^xJ    4 	  %'3!_?^xJ4?,^x   d ?8   '!5!!BȔxwxdȔ-UxZx[U  u P8   !'7'7!'!5rȔxwxȔf[UxwZwxU  , P 4  327>76767632&'&'&#"#"'&/#7!#/)85,0F"<;NJX[GR7<"#!2)85,/$#?2WG[XJN;?,!F0O<:"  %7<OA0#!$#0IB5'  ":,?     P 4  7%5!##"'&'&'&'&'&#"'67676323276Ǡ,?;NJX[GW2?#$/,58)2!#"<7RG[XJN;<"F0,58)/?J:"  '5BI0#$!#0AO<7%  ":<O0F    d ?8   3!!#dxaxxxwxaxxax        	''#'5'xbxx`xvxxxbx   u P8   	'7#'7!5!'73'7PwxxxaxUwxxxxw     757377/vxxxxxxbxxxv    d ?8   5!	!dxax>xxUZxaxxax     u P8   	'7!'	7!'7Pwxx>xaxUwxx>>xxw     d ?8   !5!3#xwx-xZxY       %'3'!!5xZxZxvx檪    u P8  	
22@	O	O_	_]1@
	
 990@		

	
<<@  <<KSX 	<<		
Y!#3!'7'8窪xwx-\xwZwx       !5!!7#7\xxZxx+xvx       7!!5!7'3'xxxxxZxxvxxvx     d > %  52#!5! 767>54&'&'&>42/+-+-':1 Hxwxܪ-)o=<j.(xZx

1.

    v P )  "3!'7'7!"'&'&'&547676763


xwxiA1:'-+/24>



xwZwx(.46<=69)-     d >  >  3276767654'&'&'&"5476767632+#5!5



6
+/24>A1:'-+/24>xwx





=69)-(.46=<69)-xZx     v P  >  54'&'&'&"3)'7'7!#5#"'&'&'&5476767632#
6



+lxwx>42/+-':1A>42/+ׂ





xwZwx-)96<=64.(-)96=    d P8 X  #532267676767632267676;'7'7#""'&'&'&'&'&""'&'&'&
xwx
0$#$


 "%'-0$' !


' '-
xwx

('Z&("


	"(&Z'(
-xZx$

-#%"&*

'xwZwx
""&*

	*&""
   d PF   %'!5!!'7'7!pxwxpdxwx^:5xZxo:xwZwx *   	%'7	!^b9YXxb  Z  	   #!5	xwxoxZx     [   !'7'7!#xwxxwZwx   Z	   !5!3	ixwxDxZx   [   3!'7'7xwxDxwZwx      7#7!5xwZwx=xwx    d ?   !5!3?=xwx-xZx,    -eX &  7#754767676 #4&'&'&"9xxZvx.-\Znl lnZ\-.BB<VJNR@@#!xvx2pk_V1..1V_kp]B;'!!#?@SQ]     OX &  54'&'&'&"#4767676 7#7{!#@@RNJV<BB.-\Znl lnZ\-.xvZxx2]QS@?#!!';B]pk_V1..1V_kp2xvx   4M    5!7!!#o?,^xrcc?x^  pDc    5!'73#'7!#3!pxvxxvxxxNPxxXxx     p 6  2767>54'&/#7!!#"'&'&'&54767D !BB<VJNR@BB!"B#@,#Z/..0YTtglpXY0..-\+BQQ]ZB;'!!#?BZ]QQB#,@#Zpp|pqYS4..0WYqp|pk_   p 6  7#"'&'&'&5476?!5!#2767>54'&x\-..0YXplgtTY0../Z#,@#B"!BB@RNJV<BB! +x_kp|pqYW0..4SYqp|ppZ#@J#BQQ]ZB?#!!';BZ]QQ  d-?8  K ̴@P]1 90@<<KSX <Y5!dx-x   d ?  K ̴@P]1 90@<<KSX <Y!!d=xwתx      3'#xvx<         #'x$x    u-P8  K̴O_]1 90@<<KSX <Y!5!'7P%x-xw     u P  K ̴O_]1 90@<	<KSX <Y'7!5Pwx=ׂwx      !37xx<xv      !#73vxx  dPd'    ,   w;',       dPd'    ,    d?d   5!!!!5cx==xw ZxתxZ   x  <   3'#'#'3ZZxتxZ vx<<x   vQd   '7!5!'7!5!'7R wx==xZwxתxwZ   x<   %#73737#Z Zxx֪xvZ x<<xv  d P'L  BG      d P'H  BK       d ?8    !!%!!'7!5!7!ii&yuI]xwx]4uIUiixK]xZx]Kx     d PC   !  %'7#5!73'7'7!!7')!>]xwx]TQ>]xwx]xLii`iiT4]xZx]4]xwZwx]Jiiii    u P8    !7'!7!5!7!'7'7!'7!5giiyYuI0]xwx]uIiixK]xwZwx]Kx     d ?8   !!5!!]xwx]7Qix]xZx]xi        #'3'#'x\xZx^xhP8^xvx^h    u P8   7'!5!'7'7!5$iiQ7]xwx]iix]xwZwx]x      737#73jhx^xvZxx\x%hh^xvx^8    d P8    !7'!!5!'7'iili\]xwx]]xwxiii]xZx]]xwZwx      7''3'7#7iii]xZx]]xwZwxliii{]xwx]\]xwx      	#7!##PU?,UvU,?UP     5#'#5!#5'U,?UvU?ԄU      4   	753!5373U?ԃUPqPU?U   4   33!'3ɕPU?UqPU?,U     d ?8   !!!!5!!c$R&xwxxxxZxx  u P8   !5!'!5!7'!5!Q$܊xwx&RFxxxwZwxx  d ?8   #''''#53777?(FncxwxFn-FnxZxFn   u P8   577773'7'7#'''unFxwxcnF-nFxwZwxnF        3'!!!!#!5!5!5!'-Zx((ت&&xvxTrx    #7!5!5!5!3!!!!7Zxx((&&xxrTx   d ?8 	    5!!5!35!dxqx  UZxxa      	    3'#'3#3#-ZxxbvxrxV     u P8 	    	'7!5!'7%!#'#5Pwxqx Uwxxw(     	    737533-vxxvxrxv4      k ?9   !#3?xvxתx~\x   u I9   !'73#'7!uxvxxvvx   7 ?~    	5!!	!!
d}*  ^  V    	3!	!!d}*p
d   H P~    !!	!!

 ^V    #!#	!!!d
en ^  V      !!	!3	3!!!E*dr*r$|
\d    ^  V 
   )3!	!3#!5#3	3ȃ\Pdx
  @  t     %#!5#3'!3!3!	!33'ȡdxd:tZdd\nt ^  V     %#!3!3!	!3!5#3ĹtIt\Px   ^  V     %3	3!!!	!!3	37r*kd
d|
    ^  V 
    %#!5#3	3!3!!	!!33	37ȃ:͊`
\h
     u }~ 
   7!!	!5#35!	u\Pdx
f:bȃ

   z  M    !#7!!#Mc"?,^xc?x^  z  M    35!3!5!73zpc?Jx^cr+a?^xJ    ^V 	   3	3#	'!	!!	!

e

dC   u P8 ) 5 A  	'7!"'&'&'&'#5367676762!'7$"!&'&'!27676Pwx
21@=:C.2

21@=:C.2
_x_R#)l$h$#R#$Uwx@21.2@@21.2@xw#    w;',        utP   '7!5!'7!5!'7!5!'7P wx===x UZwxתתxwZ   d ?D   5!3!!#!dx3xUZxmmx   u PD   	'7!#!5!3!'7Pwxͪ3xUwxmmxw   d PD   3!'7'7!#!5xwxwwxwxmxwZwxmxZx  d ?D   5!333!!###!dx⪪YxUZxmmmmx   u PD   	'7!###!5!333!'7PwxYxUwxmmmmxw   d PD   333!'7'7!###!5d xwxdxwxmmxwZwxmmxZx  7 ?@  	  	!JBJA  u }@  	  7'!5!	PJBł}BB  7 }@     7'!	!	6BBA}BB     h  
  %!3!3۠ՈR+     n  m    + A   &  6  F  V  f  v              ]A     ]    +    + 01 32#&'&#"327673#" 	B!OO!BzcI7͙7Ic    _L   0  "'&547632654'&#"563 3276767&#"\m`cu\6% GGnthr5?,/H@3H5,Y:$UeI+HQ\N,tqzSd69->eSY׮l          !5!!5!!5>+     5     !#7#53!5!!5!733!Kcd04+^^``k    ]  ( 6  73#"'&'#7&'&$32	'&#"	32$767&'&YjiEd80~i?/c`RQQ$g'-"SRR:;nSz_'BTc_
N@DROg      `   8@  91 /90@cmpxyvn  ]]	!3!^DC?   `    %!	!3f<?    I   !!"$54$3!!!W?JGcGK@	sJxNL``ȟMOx]  I  & /  !!!!3!!"''&'&54$;7#"ؖI$$$GA?d`,,cFU;}YI7ʟ7c``JxHNGx]     g   % $54$)!!3!+*(FiNv%FrO:0Q     I   &'&'&'!5!2#!5!676767!5?JGcGK@	'JxNLȟMOx]  I  & /  '7!5!!5!&#!5!2+4'&'&'3276765 I^Q$$GA?d`,,#FT;}YI7ʟ7c;JxHHNGx]     g    )5%2767!5&'&!5(*FiNv%FtFgP:1R  ,      /  /01!!,     wq  @ gg 1 20!#!#
}   wq  @gg1 <03!3wJ}   w;  ]@
 
 91 990@0QVPZ
spvupz
Z	pp{	t]]!!	!!5	7AJI3!     -    1 0!!ת         !#!5!3!!5!--+}ת       W   +   и  
и  и    /   +    +   и  	01!!#!5!3#-Ө-5   B   <% ? P        %73%%#'TUUTUTTU DG r   XY%  =} 
 *@
	 
	 91 903##'%\sB} }`s-Pb;   =v&   u s =e&  P s     1  27#"#"'&'&'#"'&547632676;#"3cd3668+MI6641C;ItY^^SI6?+((C;ItK@tkHMfpEF?$Tx5@ejre!93Ex5@     # / ;  &'#"'&54763267632#"'&%27#""327654'&1C;JsY^^TI6?+((C;JsY^^TI666cd3778s~d3778]$Tx5@ejre!93Ex5@ejreMHMfpEFHMfpEF   I   %!3!~,    I   %!3If   I   A  / /   +   к   9   9  к   901%&'&'3!!#4'!&'7`'JAW`LqR]+X*Pʋs^(Rs57756u       5   +   	/ /   	9   	9   	901	7&'7%%'6	676r{EG%y44RW!L!$Ҿ	&!L {  JP+   3#+    fJ+  7    +  и     / /   9 	  90137#'PMVo)gn   J+    3#3#@+  fJ+  { / /   и  / ܸ и  
ܸ ܸ 
 и  и     / / / /   9   9   9   9013737##'[P]ME+qd@oxpAn       !3#	ih^T         3	3##"T^      32#4&#"#P(*7      332653#"RP7*  uM   >2&#""&'7327~9GA~9G⧅}}    uM&  %   uM &  '%  J    uM - 6 ?  67632&#"#"'&'7327&'&5476767654'&'SOJMG79GcBnnVsSOJMG79G]InoSu=,EG%,=,HK%DAF7K|oUDAF71IosV/HgjG$4.JhgH$    uM M Q Z c  67632&#"!67632&#"#"'&'7327!#"'&'7327&'&54767!!67654'&SOJMG79G~SOJMG79GcBnnVsSOJMG79GSOJMG79G]InoSu~=,HK%=,EG%DAF77DAF7K|oUDAF7$çDAF70IosV!.JhgH$+/HgjG$  uM  m q u ~   67632&#"!67632&#"!67632&#"#"'&'7327!#"'&'7327!#"'&'7327&'&54767!)!67654'&SOJMG79G~SOJMG79G~SOJMG79GcBnnVsSOJMG79GSOJMG79GSOJMG79G]InoSu,~=,HK%2=,EG%DAF77DAF77DAF7K|oUDAF7$çDAF7$çDAF70IosV!.JhgH$+/HgjG$     uL. 3  &#"7#'754'&'#"&'7327#4767>32";EY?w^H6H\O3,,HO;E+@/VfmVmHO?u]HH]sM3gz.VrmV_z  uM   <  %4'>7'7&#"7"&'7327&'&54767>2=,HK%=Q	Hl;EYLmHH<Vs;E]InoSuJ.JghH$;+eH]Mo|HHC?Zz1IosV<z   uM   ;  .'>7'&#"'"&'7327&'&54767>2=,HK%m#6,=iSH;EcHKs;E]InoSuJ.JghH$6B0+@TH?HK|z1IosV<z   y 'P'PPG   y 'PG'PP    t'PP   y 'P'P'PP   -j'P$     j     3#3#!!X   j&  'PW'P$'P-WP.$  j&  'PWP$  2   #"'&'&'&#"5>32326ian
^Xbian^V2NE;=LTNE;=K  2   3276767632.#"#"&'gV^naibX^
nai2UK=;ENTL=;EN  1 )  .#"3".54>323265.#72#"&:QHRdhNi\dnx>@HRdhNi\dnx.ttlH=YOHL\}X[lH=YOHL\}   W   #"'"#322{dfftX{dfftX#*$     0   !#.5476767654&'30ND:<LTND:<Jh`n
^Xbjbn^V     l   &#"5>323267#"''cDXbia]yeEVgia`yS LTNE+~F KUNE,F          #"/&'&#"5>32326!!ian^Xbian^VeoNE;=LTNE;=K  `    #"/&'&#"5>32326!!ian^Xbian^VeOE;=LSNE;	=Kk      b % &  32767#"'!!'7!5!7&#"5>32%H\iaBP﹉lZXbian3}o-X"OEd8LSNE;I       "  #"/&'&#"5>32326!!!!ian^Xbian^VeOE;=LSNE;?Kk˪        .  #"/&'&#"5>32326#5!7!5!7!!!!'ian^Xbian^VLoKɦoOE;=LSNE;?KL˪s˪s     B .  32767#"'!!!!'7#5!7!5!7'&#"5>327b
	K`Jqia'+\+zlh>Tm?u2^Xbianc"%]OE˪Nt˪=LSNE;%N      ; ?@.9* -"*19"< -<<21 9999990#"'&'&'&#"5>32326#"'&'&'&#"5>32326ian
^Xbian^Vgian
^Xbian
^VoNE;=LTNE;=KڲOE;=LSNE;=K      4  3267#"'3267#"/'&#"5>327&#"5>29+Vgia@LJZVgia}9+Xbia@MHZXbi aKUOE8KUNE;	@^LTNE8LSNE;f@      5 9  #"/&'&#"5>32326#"/&'&#"5>32326!!ian^Xbian^Vgiaq^Xbian3VeLOE;=LSNE;?KҲOE;=LSNE;?K     y  5 P  #"/&'&#"5>32326#"/&'&#"5>32326#"/&'&#"5>32326ian^Xbian^Vgian^Xbian^Vgiaq^Xbian3VײOE;=LSNE;?KҲOE;=LSNE;?KҲOE;=LSNE;?K      "  32?632.#"#"&'!5!5gV^naibX^naiUK?;ENSL=;EOȪ     + 	    %5 % $%5$[g&Y%ZhӦ     6  9  %676767!!"'&'&'!5!!5!676762!!&'&'&[C-87VYYW68.CC.8d
6WYYV7
e8-,CE[<0[2332[39\DD+N+DD\93[2332[0<[EC,    `     !5!676762!!&'&'&!![C.8d
6WYYV7
e8-;++DD\93[2332[0<[EC,  `'P      'P&    P  'P&    P0  'P&   P. 62'P'P   W     63&   'P P  ` 	   3654'!!5!&547!5!!4434w~0IG00GG2?8>;_8    `       !!!!"264&'2#"&546HdddeH;k'**z{DbFE``bq+((d:svv   `K     !!!! &!56 뗲    `     !!!!	3#$c'   `     !!!!33#$'c  `     !!!!!!'+]^*^]N䰰   `   
   !!!!!3!Np!NNf  `    0 7 G O  !!!!#"3###535463!3267#"&546324&#"'53#5#"&4632264&"?$mmC???DNB&H#$J'`qk[Q_C<17HBB@,I\\I,@<i==i7$$3`3D= DH>p`ctiG6B?9i=$#tu#gSSS  `   *  !!!!>32#4&#"#4&#"#3>32!]?U\Z79EPZ7:DPZZV:;S==:xoHOM]QHPL^P%U20=     `    ,  !!!!3#7#546?>54&#"5>324eeb_--B6'Z0/`4\o$-,N2A+,/-7#!^aO&E++
    '  >@"
 
	 <291 <2<<990!!!!!'7!5!7! }/H{};fըfӪ     L    !@ 

 <<<<1 0!!!!!!ת     4   !5!7!!!!!!'7!5!7!5!DQ"rn遙RoLT˪˪T˪      	     )@ 

 <<1 0!!!!!!!!K        
 T@.  B 	 $#<2291 /90KSXY"	5	!!@po         
 V@/  B $	 #<<291 /90KSXY"55	!5AǪ   V  
   3!!	5	!!@po     V  
   !!555	!5BkǪ      !5!7!5!7!!!!'	5'`ȉ)P"_=6@ss1stFpo         !5!7!5!7!!!!'55'`ȉ)P"_=6ss1stF    .    	5	5:6:6pr
pr
   .    55556:86:      '  !67&'&54767&'676'&'{)#Y4JJ4Y#))#Y4JJ4Y#)AAAAGF㞢GGGG➣FG2;;;<<;2;       5$?$%5%67$'W	e Ĕd?N Ĕ])]o&
bR)`q%R   d    %'%5%>zmzF<˶@6 o@hGp      %5'75%7-孈m%˶C@ʴ@hGp  /V    !5!%5%%%!!'/xvH-rf5LOlUrC@=Vlь=   /V    %'!5!75%7%5!!'	GWb[mm NL>ߪwe=ت=      $  %#"'&'&'&#"5>32326	5jbn
^Xbh`n
^Vg@ND:<LTND:<J^po       "  #"'.'&#"5>3232655jbn
^Xbh`n
^VfNF<>LTNF<>L>    )P 1 4  %&#"5>32%5%%%3267#"'&'&/'kXbh`'+kuE%sk
^Vhjbn
"Pv1-LTND9ATj͊<JVND:<nW     /V 1 4  3267#"'&'&'&''75676?5%7%5%'u^06
^Vhjbn
G;hV86VbhZMS<a^>LTNF<=	&TN#wf=J;    N}    55	58@'po  N}    	5	55@'po    m`   !  -%5%%%'5%%5MM`ZDOA@FZDt@m*_TW&o}䎲w&-r~bU    m`   !  7/%5%%'%5%75%Jvad",,V`bL"_D2,/*/&O{¸[&}    P 
    %5$r	osaa^~ ||    P 
  5 5 %$so	a || ^a   )W    ! %5  %5$gV$}]]x|     )W    3 %5 5 %$Vg}$BW|]]    RW  (  %#"'&'&'&#"5>32326  %5$ian
^Xbian^Vg$}NE;=LTNE;=K$]]x|     RW  (  %#"'&'&'&#"5>323265 5 %$ian
^Xbian^Ve}$NE;=LTNE;=K$|]]       &%5$%67%'Et֋$k}uU)?eKtuu"	K
9'         '567$'567&'%=⃹t֋~}uRU)?Kuu,ަK9'      _   %!" 54763!!"3!슊@^`@ƍ^`   _   75!27654&#!5!2 #@`^@Ȋʣ`^    ; 	   #";3!!!!#" 54763^`0rrndflppꊊ^`&pphƍ     3 	   32654'&+#!5!!5!32 #^`0rrpp9^`phƍ           7!!!"'&54763!!"3!Ɋ@_`@,ƍ^`         7!!5!27654&#!5!2#@`_@Ȋɖ,`^ȋ   	 '  !";!!!!'7!5!7&'&54763!7!!ʉ_`'}E=aLT>scL0R^`5ƍ7   	 '  327654'&/!5!7+!!'7!5!7!5!^`__BV	5cTpX?bLm>U`^`C	7 Xȋ5    j     )5!7!!'!"'&54763!!"3!.Bqx-qxDɊ@_`@Z<Ziƍ^`    j     )5!7!!'5!27654&#!5!2#.Bqx-qx'@`_@ȊɖZ<Zi`^ȋ          332653#"757!!<tct<RP7*-<uUt<    &  P3      332653#"3##5#535eWP7*dd         @<1 @0!!!!Xɪ      @<1 @0!5!!5Xu7     V    !!!!!!Xɪ     V    !5!!5!5Xu7    e   #!#eȪX      e   33!3٪8X   $  3 ?   "2767>54&'&'$  &'&'&547676!!#!5!]\LMLLML\]]\LMLLML\bc1111cbbc1111cbdd''LMmjML''''LMjmML'dbcwvwvcbddbcvwvwcbee     $   7  !! "2767>54&'&'$  &'&'&547676r$]\LMLLML\]]\LMLLML\bc1111cbbc1111cbתa''LMmjML''''LMjmML'dbcwvwvcbddbcvwvwcb  $  3 ?   "2767>54&'&'$  &'&'&547676''7'77]\LMLLML\]]\LMLLML\bc1111cbbc1111cbxyx''LMmjML''''LMjmML'dbcwvwvcbddbcvwvwcbxyx     $   7  	 "2767>54&'&'$  &'&'&547676pxg]\LMLLML\]]\LMLLML\bc1111cbbc1111cbpx''LMmjML''''LMjmML'dbcwvwvcbddbcvwvwcb     $   7  3#"2767>54&'&'$  &'&'&547676]\LMLLML\]]\LMLLML\bc1111cbbc1111cb''LMmjML''''LMjmML'dbcwvwvcbddbcvwvwcb     $ 	  2 L  "264&'2#"&54>"2767>54&'&'$  &'&'&547676ZPnnnoO@v+..]\LMLLML\]]\LMLLML\bc1111cbbc1111cbAoPOmmp1.-rB''LMmjML''''LMjmML'dbcwvwvcbddbcvwvwcb  $  + E  %#'-73%"2767>54&'&'$  &'&'&547676C4f4C4/f/]\LMLLML\]]\LMLLML\bc1111cbbc1111cb1XSXYS''LMmjML''''LMjmML'dbcwvwvcbddbcvwvwcb  $   ! ;  !!!! "2767>54&'&'$  &'&'&547676]\LMLLML\]]\LMLLML\bc1111cbbc1111cbj''LMmjML''''LMjmML'dbcwvwvcbddbcvwvwcb  $  3 7   "2767>54&'&'$  &'&'&547676!!]\LMLLML\]]\LMLLML\bc1111cbbc1111cb8''LMmjML''''LMjmML'dbcwvwvcbddbcvwvwcb   $     !%!!!!#!5!QX>ddYee  $     !!!%!!rPX>ת\     $     		'	7	%!%!!=kyykyjjX>xjyjjyk$     $     3#!%!!aX>    J  @
  <1 <033!!up    J   !#!5!3J     I   !#!5Iss       I   35!3!      |   33!!Nup     |   !#3!!!!.NN$       J   !#3!!!!.$       J    !3!!!#3Gup    J     !#33!!!#3.GVfup      J    !#3#3!!!!.cGGf$   J   33!!!'!'Ssj\s=u5Y6p   J    !!!!'!#3!7!sjshxj56$$    J    !!'!#3!#3s6s=5Y6pu     J     !#3!!!!!'!#37!s:jsjG$-56$     ] *  5$%67654&#"'632#"'732654'&'$@e=M>P7sZw㔰Zs7P>M=e.(Y7O0<0:>~jy[<<[yj~>:0<0O7Y  ] *  327#"&5476%$'&54632&#"ee=M>P7sZw㔰Zs7P>M=e@.(Y7O0<0:>~jy[<<[yj~>:0<0O7Y(        	51           	^ bb:  d   
  5!	5b   d   
  5!	^b bb:  yg    62"'&'!"&462!6"264S몧Q3Q3TW4drOOsOOSQ3CB3RU4CDPrOOq     yg    "&462!6762"'&'!$264&"aS몧Q33TW4QrOOsOSQ3CB3RU4CDPrOOq     bgR    7!6762"'&'$&"26b1[륢S4OsPOtO.D/YR3BPQqOO    y;d      3#!!#3%!5!(󀨨ds     <   !##5!#T~N         
  35!3	3#K#"T^       
  !!3#	K@ih^T      
  !!3	3#K@#"쪠T^   ~    )3!!&'.'&ZVF%,E=Ώ?~%FVZDA?=    ~    	!53*,Ԫ֪    w   	#	#}}wJ  w   	3	3!#wJw   w  @1 @ 0"#   #4$H̭9B(      w  @1 @ 02$53   3H4CC1 (B9       	r      HF    1 03#F    1	 	  !!'+]^*^]䰰           3#3#!5!7	!!	'RLxxLux66x<ux6xx6x     'B     	'	''ٛ>PNq^D^    'B    %		!'''tNP^D   'B    5		5!''6bNP   'B   5	5tN>]P   'B   	5	'Nt>P   `    32?632.#"#"&'!5gV^naibX^naiUK=	;ENSL=;EOȪ  c  y 
  3 3 #cu?Ik8ff%q#   c  y 
  3 3# cffI?#q%  
  )  !"3!!"'&5463!! '&76)!"3!k:((P:jZYk񼽽jȊ()9:PZXDȋ    
  )  5!2#!5!2654'&#5!27654'&#!5! !YZj:P((:kɊjXZP:9)(ƍ       N  $  !4&"#47632!  #4'& PtPZXD|p:PP::ȀZX8x8Ȋ:    1  $  2653#"&5!  '&3 765PtPZX1::PP:8ZX:8Ȋ |  8   4'&'##47673#Z:KK:ZllY:::ZaȌlala  4    ###!5!5!5!333!!!!'5#Y~~~~,,33ͨ     ^  
  3#	57 Ѧ    ^  
  3#55=d //m   .
     	5	5	5
:6 :6:6pr
pr
pr
     .
     5555556:86::6:     .  
   	5	!5!	5?@Npo    .  
   5	5!55?ްop9        
  %5	5!@op9         
  7	5	!5!?  )W     5$ %5$ Ti}$_|x]]     )W    5 $ %$5 iT$}B!]]|     ! &  ! %'&'57&%5$%67&%7* ?;i@]0qw^%KA6#(AF+<zKdה`gևf#     ! &  5$%'56?5$%7$67&X'}8uc̻B8#%MK.0Qt;LK1gעv}iwi   #    !!!!!!'7!5!7!!!MXF}`c.mX.P#::h   #    !!!!'7!5!7!5!!5!!MXFc.mX.P6x#:D:hh     ?   !!!!!!'7!5!7!XUMM#UZQmbm    ?   %!'7!5!7!5!!5!!M#UZQXUMbmhDm      "  %&#"5>3273267#"''	5cCXbh`^xnieEVhjb_zl]@LTND*F JVND+Fpo     "  %&#"5>3273267#"''55cCXbh`^xnieEVhjb_zl[LTND*F JVND+FͰ     W  &  &#"5>3273267#"''  %5$cDXbia]ymieEVgia`yl]$}. LTNE+F KUNE,F]]x|  W  &  &#"5>3273267#"''5 5 %$cDXbia]ymieEVgia`yl[}$3 LTNE+F KUNE,F|]]          7%'%5	'瞃۞LО
@Y8@\9@a       '	7%͞G۞О@?Y@<9@  }     5!%57%!!'71|Iv\':qߦ[@Z8@_    }     7!!'7#5!7%%%9Jpv\ ]FGjq8@ǹ@<p^Bi'P'PrP   &P'PPe B'P 'PerP   B'Pe'P rP    X !  !5!676$3!!!!!!"$'&DM^dGKA@JH^HsȟMOx]JxNLư    I   !!"$$3!!!3#WGcG	UsJ`t`ȟ]@     g   % $$)!"!53#5!3!+*(FkN莎%FrQ;0Q  IH&  P8  I     !!"$54$3!!!!5!W?JGcGK@	[sJxNL``ȟMOx]      }    % $54$)!!3!!5!+*(FiNv%FrO:0QV    I     !!"$54$3!!!!5!W?JGcGK@	[sJxNL``ȟMOx]g     I   !!!!"$54$3!!!!WCJGcGKs"NL``ȟMO  X !  !!#!5!676767!5!&'&'&'!5!2FM^HKA@JGd^H'ȟMOx]JxNLư    I   &$'!5!2#!5!6$7!#3GcG	'Jȟ]     g    )5!2767!#3!&'&#%5(*FkN%FrFg Q:欑0P     I     &'&'&'!5!2#!5!676767!5!5!?JGcGK@	[['JxNLȟMOx]    }     )5%2767!5&'&!5%!5!(*FiNv%FtFgP:1R          !!!!!!dFd(ª    J   #  27 #"''7&54 &#"32654'hucvnݸvcuo<dGcc~Eqvcvovcv<H饀cbG飀b    rLR   50zJ.       	  3	%!	$`y      	'3-xZxxvx       %3#7-ZxxZvxxvx   ?&    &  '   &   & ;N   '64'&4764'&4zLL||LL||zLL||LL|NvOpPPoPvOpPPpP    X   !##m    o   ##5o   X   33"m    o   !533oX  b    3#5!W   db    !53#      5!%#3WqX   d    !5%#3 8X   ^   !#^k?      $%%$~      	  1 ; F O Y  !! &546;#"&546 !54632+32#"&=54&#"3#"32653264&"2654&#l(ع(DbEDbbEEbbEDbPDbabbabDv(D(غPEaabbDEbbDbaaE	DbbEDb     ^   !3!Z?k     g:   !#!:     g   5!#S   p:   !!3:v    p   3!3!vS    l   4732#"'&'.#"0Pd@7+	h $TA6?&H    *u   
#"&546323250uPd@7+	h$DTA6?&Hk-k         	'3%!5)!o&xRZPx(FD(xRxH           !!!!%!!bFDD    O  	     3!	3	)	!	3	
vvvvv!tx           3!3	)	!	3 vvvv!  + x     # / ; G S _ k w           +7CO[gs  !2#!"543!254#!"+"=4;2+"=4;2%+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2%+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2'+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2'+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;22+"=4#"=43+"=4;2+"=4;2"=43!2#UݓJIIJ%J%%J%%K$$K%J%J%%J%F%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%%%%C%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%$%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%$%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%%%%%%%*$%%%J%%J%%K$$K%%%%%JJJI%%I&%J%%J%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%%% %I%HJ%%J%%J%%J%%J%%J%       
  	     )	!#	3		#	3
W
vЎvv

v  Ff       			7'3#vvr&999"9"rr5kk\SSAcc\cc    n`N   V{V   '`^   qyF    .    !!#!#5!        !'7'7!!5!5!xwxFbxwZwx   #      %!	!	!	l(+R[Srvv   P   #53 sàZ0  s   3#s     P   #5sˠАWeE&2   P   53Zyi P   #0Ps	  P   3#àР˓[   Pm   #!!s#	q  s   3#s     P   !!s`N	u     Pm   !5!#    Pz   3#z    Pz   3!5!`z Xm   #4763!!"]oyeD9uߑfW  ]   #'&%'53 763:*enK==Mne( =C_AEcH< X   3!!"'&5]9De{oVfd    ]   #3]	    ]m   4'&#!5!29Deyo}Wf    X   &'&3!3#76l<(enM==Kne*!<McEA_I=  ]   3#!5!2765o{eD9ᏞfV  u   3 	w   7 @    %	!!!5	5!!37d
hrv           !	!!$<   Ff    +  			 276764'&'&">  &vvrn66\]]\6666\]]\65kk\SS]\6666\]]\6666\   !    YZ       "27654/2#"&5465732332233VVVVVVVV)t'       >32 #"&'#'%53% &  s:{ {:!8#!rܧ$daad]chaam@j    .    !3!3:^       & ۺ   +  #  + #    +  A   &  6  F  V  f  v              ]A     ]A     ]A   )  9  I  Y  i  y              ]    +  
  + 
 $ % + $ 01 !  4$32 !  4$#"35%33!??qqW|A?rpG~+/        8?   +  3 & + 3    +  A   &  6  F  V  f  v              ]A     ]A     ]A   )  9  I  Y  i  y              ] 3 и /A  &  & ]A  & ) & 9 & I & Y & i & y &  &  &  &  &  &  & ] ,   9    +  
  + 
   +  0 ) + 001 !  4$32 !  4$#"!!56$7>54&#"5>32??qqWO\R!>/_N;sa=0>A?rpGM"?U(?N&:$}:iF        D   +  B 5 + B    +  A   &  6  F  V  f  v              ]A     ]A     ]A   )  9  I  Y  i  y              ]A  5  5 ]A  5 ) 5 9 5 I 5 Y 5 i 5 y 5  5  5  5  5  5  5 ]  5 B9 , 5 B9 ,/A  ,  , ]A  , ) , 9 , I , Y , i , y ,  ,  ,  ,  ,  ,  , ] ܺ &   9 ;   9    +  
  + 
 ) " + ) ? 8 + ? 2 / + 2  / 2901 !  4$32 !  4$#"#"&'532654&+532654&#"5>32??qqWv@X[}DuskcZX\[4yk_=hA?rpG]0OLGN<:<? sQr         )    +     +      +  A   &  6  F  V  f  v              ]A     ]A     ]A   )  9  I  Y  i  y              ]   $и  &    +  
  + 
 " # + " и # '01 !  4$32 !  4$#"%!33##5!5??qqW΍CA?rpGOHӎ       9K   +    +  & 3 + &    +  A   &  6  F  V  f  v              ]A     ]A     ]A   )  9  I  Y  i  y              ] -   9A  3  3 ]A  3 ) 3 9 3 I 3 Y 3 i 3 y 3  3  3  3  3  3  3 ]    +  
  + 
 0 ) + 0   +  # 6 + #01 !  4$32 !  4$#"!!632#"&'532654&#"??qqW=o?վ@X_wDhvvh2eYA?rpG
/aUVa%      ' @   +   ; +  5 % + 5    +  A   &  6  F  V  f  v              ]A     ]A     ]A   )  9  I  Y  i  y              ]A   &  6  F  V  f  v              ]A     ]A  %  % ]A  % ) % 9 % I % Y % i % y %  %  %  %  %  %  % ] ) % 59    +  
  + 
 " 8 + " > , + > 2  + 201 !  4$32 !  4$#""32654&.#"632#"&5432??qqWN\\NN\\Ta/w	N 5jA?rpGb[ZbbZ[b#P=     "  #/ $/  ܸ # и / A   &  6  F  V  f  v              ]A     ]   A     ]A   )  9  I  Y  i  y              ]     9 !   9    +  
  + 
  ! + 01 !  4$32 !  4$#"!#!??qqWkQ1A?rpGK      ' ? K   +   = +  1 F + 1    +  A   &  6  F  V  f  v              ]A     ]A     ]A   )  9  I  Y  i  y              ]A   &  6  F  V  f  v              ]A     ]A  F  F ]A  F ) F 9 F I F Y F i F y F  F  F  F  F  F  F ] % F 19 %/A  %  % ]A  % ) % 9 % I % Y % i % y %  %  %  %  %  %  % ] + = 9 +/ 4 F 19 % 7ܸ + @    +  
  + 
 " : + " . I + . C  + C 4  C901 !  4$32 !  4$#""32654&%.54632#"&546732654&#"??qqWT__TT__jivvWQMKRRKMQA?rpGPIIPQHIPIvSttSv\\=BB=>BB     4 @   +  > ) + >    +   / 8 + /A   &  6  F  V  f  v              ]A     ]A     ]A   )  9  I  Y  i  y              ]A  > & > 6 > F > V > f > v >  >  >  >  >  >  > ]A  >  > ]  ) >9A  8  8 ]A  8 ) 8 9 8 I 8 Y 8 i 8 y 8  8  8  8  8  8  8 ]    +  
  + 
   2 +   , ; + , 5 & + 501 !  4$32 !  4$#"532676#"&54632#"&2654&#"??qqWUa.w
O 5kN[[NN\\A?rpG$O<b[[bb[[b        & 2 >   +  #  + # * < + * 6 0 + 6    +  A   &  6  F  V  f  v              ]A     ]A     ]A   )  9  I  Y  i  y              ]A  0  0 ]A  0 ) 0 9 0 I 0 Y 0 i 0 y 0  0  0  0  0  0  0 ]A  <  < ]A  < ) < 9 < I < Y < i < y <  <  <  <  <  <  < ]    +  
  + 
 - 9 + - $ % + $ 3 ' + 3 $ 01 !  4$32 !  4$#"35733!"32654&'2#"&546??qqW͞u>@EE@?FF?A?rpG>>'*6ޗ{  j   5!j    l   !X      3 	      !@ 	  <j     5!!5!!5!r#B#B#j    <l     !!!!!r#B#B#XXX m     333mjjj  m     !!!@@@mjjj  <j      53353353353<xxxj    <l      3333333<xxxXXXX   n      3333p^^^^    n      !!!!@@@@p^^^^     !!      l   !! l       !!#      l   !!# l       !5! j     l   !! X       !5!$ j     l   !!$ X   j   3!-j    3!-m    j   !!@j       !!@m   j   5!3,jk     !3,X j   5!!@jk    !!@X        3!!- 	       3!!- 	    	  #!!!P@ j   	  33!!P-# k      !!!@# 	    	  #!!!P@ m      	  33!!P-# l     !!!@# 	     !5!3, jk       !!3, X    	  !5!!#@P jk   	  !5!33$,P jk      !5!!$@ jk    	  !!!#@P X      	  !!33$,P X     !!!$@ X     !5!! j    l 	  !!!!- XV  l 	  !5!5!!, jV  l   !!! X     !5!!$# j    l 	  !!!!$# XV  l 	  !5!5!!$# jV  l   !!!$# X j   5!3!,-jk  	  !3!!,-XV    	  5!3!!5,-3jkV      !3!,-X   j   5!!!@jk     	  !!!!@#XV   	  5!!!!5@jkV     !!!@X      #!5!3!,-jjk     !!3!!,- X       !5!3!!,- jk       !!3!!,- X      !5!!!!@ jk       !5!3!!$,-# jk        !5!!!!$@# jk       !!!!!#@#P XV      #5!5!!!!P$@ Vk      !!33!!$,P# XV       !5!533!!$P-# jV       !!!!!@ X     !!3!!$,-# X      !!!!!$@# X      !5!!!!$@# jk      !!!!!$@# X  <j    5!35!<yj  <l    !!!XX       33lUTT        !!@@lUTT     5!5!  x X    333x 		    	  !!!!- ¬B  x  	  !!##xms j  x     !!3!!xm3-s ¬jB    	  !5!5!5!, >   X 	  5!###ljjj     X    !5!!!5!4l t, >  	  3!!!--A   xj 	  333!xjk   x    3!3!kA  	  5!5!5!3,,=    jX 	  5!333jkk    X    5!35!3̠=      3!!!!-- 	AB x     333!!xs 		   x   	   3!33!!-skA	jB        !5!5!5!3,,   X    !5!333xt jk	    X     5!3!5!33t,	       !5!!5!4 B     5!!###sjjj      	   5!!5!3!!t,-sjB     5!5!3!,-XA   j   5!333!jkk     	   5!5!333!XkA       !5!5!5!3!!!!,,-- AB        5!333!!###sjkkjj         !!!!5!5!333!-s t, jBkA        43!!"yY[ p~|     4&#!5!2[Yx p~|  j   5!2653#xY[j~|q    j   !"&533![Yyjq|~  *m   3YѲ/	Y   *m   #3*/	Y *m   #	#	3	3*i    S   jh   5!|j       3?  hj   5!h}j       3 @  hl   |X    !@? hl   !h}X     !@ @ l   5!5!!5ijVV     333PP ?@    l   !!!iXVV     #!#P@P ?@  ;\      ;?   !O ?   ; j   !O j   ;   !O k   ;   !O @   ;   !O    ;   !O    ;B   !O B   ;   !O 	   q   ! 	      ! 	      ! 	      !' 	   I   !] 	      ! 	       3 	   :d'       bm         # ' + / 3 7 ; ?  53!5353!5353!5353!5353!5353!5353!5353!53('O'('('(67576    (  'l         # ' + / 3 7 ; ? C G K O S W [ _ c g k o s w {           #5353353353!3#%3#%3#%3#3#5#53#53#1#53#1#53#75353535313#3#3#3#75353535313#3#3#3#75353535313#3#3#3#bb~! 
  'm       5 9 = A  35#%35#35#%35#%35#35#35#35#35#35!35!#5#!5#35735#35#wNOŶZXYI6Z   B;Y  B  q :g         !( @  ;n'    n      ;   !!!;(' 	@   ;'n  n'      ;   !!;@@	    ;   !!!O   ;n'   ;&n  n'  ;   !!'(      $   !     $    !!!,7r<R     $    %3!254#!") ) ,orVoVZttV   $'  y    $        !%!5!5!5!5!5!5!5!5!5!W77777 rrrrr  $        !%3#3#3#3#3#ᰰܲްܲް t88888   $         # ' + / 3 7 ; ? C G K O S W [ _ c g  35#35#35#35#35#35#35#35#35#35#35#35#35#35#35#35#35#35#35#35#35#35#35#35#35#!L$" $"$ܮ.,,.ܮ.,,.,,.,,.,,.   $   
       !33775353535W!yBߢ| T}<B     $   
       !%353555#5#5#57#!yyB| r!C}     $  	       $ ( - 1 5 9 = A F K O S W \ a e j o s  7'#7'7'#7'7'7'#7'7'7'75#7'7'7'7'7'37'75'7'7'7'37'75'7'37'35'!,2|5y2~~2O~~5~|~2~~2~~5~}}}}~~~~}1y|~||~|}|||~|}}| z4|2~12~~~~|~~~~54~}22~}~45~4z231|42~~1O~~4~|~1~}1~~4}}~~}}~~~|1|~|}~|||||~||}}4|1~21~~~~|~~~~44~~11}|~44~~41       7!         %!!!,rv        %!!        !!!cr   "   !    "    !!!,r8V     !   %!!n      !    	!!!bSnr     !$   	    !$    !	       7	        7!	  !$         !$    	x;rRff          7          7	x^rSS      !   7      !    7	xtrSS     !$   !$    !$    	%!bc6r        !         	%!QQZr    !$       !$    	W                  	z      !        !    		#W    !$   	  !$    	uvxx    !$     	>+uv))xx  p)   )  $7632#"' 327$%&#" %632#"'~~~~eMM>yJJJJJ6````qq|qq   #u   "@  91 990	9%-  p)    327$%&#" %632#"'MM>y````qq|qq     r' 	   ' / 7 ? G  %&'&'6767&'&'7%'676727"'64'7&"'62&47\+;.81F9K58.42d;E9G,:.80G9J6&8.;+d1O9FLL&_`JnLL'`_n<1& j(0=Ju &,A=N:0('<1& j(0=Ju &1<>EB0(n_II'[[JnII'[[   p)    % / 3  6%632#"'327&#"6767&'&6pyAAAA,+-,,-+A@@Rqq|qq%%mܱ[0$
%@%|"    p)   ) 7   3276'&#"7632#"' 327$%&#" %632#"'r99:9rr9:99XWXXXXWXMM>yB!!BB!!oe33eje33````qq|qq     p   @ 1 04767632#"'&'&pihѵhiihҵhiѶiiiiѶiiii   p     $32#"$27$%&#pkk<MAk^a``   p     $32#"$"3pkk<MAk^``  p     $32#"$%&#"pkkAk^>``   p     $32#"$327$pkk\MMAk^>``    p     $  $"327$!pkk]<MMgAk^```     p     $  $"!pkk]<Ak^`  p})   6%63"'pRqq     )    #2y|q*q   ( 
   2654&#"!|~}}|v<    	(     $%632#"' 327$%&#"!IMM>y_O````|qqqqH(     	(    !#%&#")%632OyyMMqq>~``     	    3327$3!#"'$@1 >qq``   ) 	  %63"æqv`  ) 	  2#%&#u)q>`   	  527$3Muyv`>q   	  "'$33yuMq`     p)   %632#%&#"puqq>``  p   03327$3#"'$puMMuyy``>qq  !$         !$         !$   !    !$   !$ 3! 
   2654&#"4632"&nȊce;~|ddcc||}  $    !%!!d r<     $    !%!!We r<     $    !%!W7 r<    $    !%!W7 r<  $     !%!!!!+c,b r<<     !$  
    462"!	W|VV},|VV|V     !$    !	c      !$    !	b    p (     7 &  $   %;<*X֖   $  	   !!!!!!,7,rWb<)) Ie  $  	   !!!!%!!,crWbM)<R re  $  	   !!!!%!!,br+ceR re   $  	   !!!!!!,7+r+ceR Ie  p       $32#"$!327$%&'pkk]4MAk^Or``O+  p       $32#"$67$%&#"!pkkuM14Ak^^O``rOc   p       $32#"$!%&#"67$!pkk\M̦4Ak^OT``%OT   p       $32#"$327$!%&'pkk\M40̉Ak^``TOTO   !$    7!!xtr R      !$    	%!#Wnr   !$    !xtr    y    !!!,Lr0R<6    y   !06    "K    %!!!,|rhOn    "K   !h#n    !$    !	#W   	       " * 2 : A I  3#''%#&'52#"'&5476!!'5%!!'53'5%3'5%3#'sMM7:==-0YG.b#CKSuYGr=;>MM^??@7`d?\gOOOOy>*<?v^  h "  3263#!5276;'4?'4?26u'6"gP39.4!'*C0.xV#m14He	'1l1Z+d    d   ?  33 #&'&+"'&#"/573;2?"#'57#&'#"#5676!5:+#9,p!j[%+>
7VCCc":8}V.e3B=Se`e9*=93@=}     k    % C `   :d;emu}'S  3273&'3327&'67&'67&'67'32654'&'2327654&#"3672 $54767&'&47'&327632#"/#"57#"54?'&5432'&27632#"/#"57#"54?'&5432'&327632#"/#"57#"54?'&5432'&27632#"/#"57#"54?'&5432'&327632#"/#"57#"54?'&5432'&27632#"/"57#"54?'&5432'4327632#"/#"57#"54?'&5432'&27632#"/#"57#"54?'&5432'&27632#"/#"57#"54?'&5432'&27632#"/#"57#"4?'&54327'4327632#"/#"57#"54?'&54327'&27632#"/"57#"54?'&5432&'67&'67&'67'&327632#"/#"57#"54?'&5432'&27632#"/"57#"54?'&5432'&27632#"/"57#"54?'&5432'&27632#"/"57#"54?'&5432'&327632#"/#"57#"54?'&5432B~	%<z*+')+(@&'$||e<-A}]\B-71SLoWj\vLL)(0/	((	.1(%%,*#$)*f$%+)$#*+f%%,*$$)*		\o		[	%)#&'%&)#`#$*)$#+,U		Q		0	E%%+)$$*+&EC&V*,)-)-*,%&%&fБfU 3HhfeefhH2pu^QFs棥sKQGh!99!!77!44	22	K44	22	22		11				





		







7


		
%&%&%'%&%'%&22	
//
	g
		
	

					44
22
       - > O ` q        
  +&'&54?632332?654/&#"2#"/54762#"/54762#"/54762#"/54762#"/54762#"/54762#"/547672#"/54762#"/54762#"/5476%2#"/5476%2#"/5476%2#"/5476D.2`{4&/<)e>O	,4H3R  07K$$
#
#
#$
#$$U$
#"$
# 7Q=KG<s-8PZy9z_e""#/2dt0&2j,:.4.=,,  --- -	.. ,  -      	  !!	WV9`8    	   !!	7	!!WVDu9`8NI         	7%7&54769	}V&7A6$8'^4?
          !2	7%7&547!&'6I@Y%14HFS"="l-2DC[9         &   !  4$32   4$ #"&54>2JJhhq0^mNMn2Z^Z2K7iwBNmmN1Z00Z     }   
  C   "32654%"32654&%#"&54767654$ #"&767&54 !  ggJIhIhhIJgg[ZQoy y}WZ[zADgJIggIJggJIhhIJgU\\Q	srW\\^    }   
  A  4&#"26%4&#"326 !  547&'&632 $54'&'&632hIJgggMgJIhhIJg#@@z[ZW}yOOyoQZ[sIhhIJggJJggJIgg][[Xrq	Q\\   }    "32654&7 #"  32ɏǾ/`T_ȐɎ;P12Y   }    1  "264& "3264 #" 54 327&54 32  #"'&'3xyx&   کZTdIU       	k # 5 A M Y e r         3#"'%&547654'!#"'4%$53!76=332654&#"#"&54632'#"&54632#"&54632&'&67632#"&'&676'.547>'.76$6&'&54%6&'&6>#"'.54>32#"'.54	[$gi<D""D=if% LW쥨驧r^]]^ !!  !! ..*)X,),*))+.}+G  G+vKK9__9KKݧꧦ]]_""""s!!""W&.-
.
-a),"		"	))		!)/

    	p   % - 5 A M Y d p |       5#!4'&'5#2#"&546"264"264"2647>'.7>'.676&'&>&'&7>'.%7>'.676&'&676&'&53!76=3%#"'676%27+%&547654'7327&'$%'#327%654'&54718楣 .  .  .  . --Y--))G))))U*)>--~--VK;
yAC0BAx
;K'6FJ>
$06#
>JF6&@@1AeA1@@H磤椣筁 .  . .  .E---,1))),(9)())u-,-- G77W6W77G D&&ee˥&&D "(=pp=("    u    !!'!Pn8h       v   "  !!'! ##+572367676MoL)>ueI3?ba8hA:F;/Itx    v     !!'!		##'	Mo_h[ei[i8hi[ef[l[     @   36273	##' 5)U.WW1@USV   d  v    # , 5 > ~  3+&=43+&=4%3+&=43+&=43+&=43+&=43+&=4%33 #&'&+"'&#"/573;2?"#'57#&'#"#5676!5\:V\9\:\:]:&]9[\::+#9,p!j[%+>
7VCCc":8
#8d#7$6$8;$7i$7	#9pPL)Z.;6ZV
Z3%Y63.87p    	       3 D M y    !674#!!6?676545&#'323276767654#3#&'&'454632767!672!&=75$/563&43!32+'!67#>54&53#?	I	:W0 96;E,Q 2:&l6x0	bm!
o۸"\>%Ef~e2U6g!6V#p5C+
C?P9
@7H4XmM7RV /M(=H:,qLUD)8Wqke-PexNW


=$
U	/0c)H?2@[nDF8T$.J?          	!'	!T4XKGwL5_K        	  	!' 7W4Z~wD     S  &5476322632%632#"'&'#64'#"'&'&54654&'&54767632xJX%&XA,B:\8[EMH95##Fl%!9@!#jL	p_Mi#"?8"%lF##58HN4hok@RRr*%teBB9'7*$%)"fXS5EIf")%#,7'9CB      > E  3#"'4332327$'#"$4727%672567654&5&oJ 7.b9MD	,B3qY5**]d=HN9% sW$,J	]T-MMm@ed:	,'ZM'cM&T)$$<	I      2  %!"&54676737#&'&54>;7!"&546767!7!"&54>3!6763!26P+=6/2D>R+>2,+v*>>+2
,2
=,2
=,3>,       2  463!2!2#!!#!32#3#!>*v+,1>+R=D206=+P#,>3,=
2,=
2,
2+>      { " D  %4&#!"!0#"3!!"3!#";#"3&'6737#&'6737!"'67!7!&'63!67!2I0!6OSSS:	SS>SS]]J]]]]h\\, Bv*>K%39LKIOKHLKIhghghghgE?-     L ! D  72654'6#"'4#"'54#"'54#"'675674767#%$4:JILLHOKHLKIhghgighgD>-sJ1 b6'SScRR	SS?SS\\K\\;\\]]!A*>K     { ! C  %254+'3254+'!254#!'!24+!&#!"463!!2!!#!3#3SS?SS	<RRSO6 1J(K>*vA!,]]j\\\\K\\IKLHKOIKL93%N-?Eghghghgi    L ! C  32=732=7325732'654&#'%2&'&5&'5&'IKLHKOHLLIJ:4$N->DghgighghSS=SS	SSbSS'6a!0J)K>*B \\]]:]]J]]   }   O                 &*.26:>   3656;2#'7+"/#"'+"5&54775%"'5476;25'7&56%635&56;374765'75'76=4'&+ +"'4!#"'4543$365&5&#%#754'&5&&547'5367&547+&'&'735&2?"5%75537'7'3533553535'32767&5%2?&#%55'5757757751:e,$?F?Y>F_LA3ELH3,8LYLlEF'!0<k#gF EeY!!Gp&iq.8ZN$%`BCf F4"4._?ee3&{E(1-+$Kt8-	$Gs sM rEF"2>_plTErf^5.>=9|5"-l)d,&>vv]cccWpC-+d8Bpp>W]oaxvuPp82,D^8,^B$K+"1R[+e*;2W
QP
I&?	gpo%w^SA$29i-5n02
Ai&IY^P]D%\??\OWC,,1
/211/=;7777=321811{908hN%b\Dh,)h?17I21!122223
21       &  2%2#"'&=47 7654'#"'5473Bq4|lanN	ilmb9b؍MOb>YaYƮ58l7P P@         $ 0 < F X   + &=6&# 3 6=%&#"';27!5%67%!&'&'2+"'&=476r cR~UY082.ԍ_W_V"+}IR8D).P9H'S]ٱZYHYoX(I_ ;.2lOP%.G6R%&I8   d     ) N l   >54'67&54&#"&'632.547#"'&'#"'3267654'7327323.#'654'567654&&5476;'&'%&+"#"8DH$$yU
?L[>!WtJ([Fho*m.2\=w\`|UP7:/E" @7?EP]EixpF@T5ym,"&eB@q(A_%#+B7!N &".OS$XE/K(Aa]dLP*'FCaYr=C44mo
C

(FKWYFvbph'UD'R<	
$     d   # + ? V m               #  327&"#"'7'632&'$54#&73254'&#"'5&567#&''5$'67'654'6'5$'67'654$'67&'654'''5$56732#"'&#"&'$'63&47"7&'7&'7&'7&'54'6546767675477&545?&''5&#" '6%35&'.54>23#67!&#"W
OB7[l#>F_Vh
""@.,=6tJ4Vp1EQJqMi
vhpHI!:JJJ=4m\8B*?ov!"t,`s&*_~P1>5='g=>24<+-s[,*&sd1PT>3J@='h<42J-H#*YT_Y)*)X^TY*$D 	
?>}> 	*0t"<H#		-88)61)6f8Z\+HD 	'*>J.&b54CUE ''!`9!,(MTE*!}q~=/+)f[4f !B" <@0&9c?"V+GoMK~a?}b9e\P&0@k"?c*GEJX?e}9\4\6
''''
6\       N  (  &'65&'67327&+!65+"3yyys{wccޱqXeXc66	c       ,  35'533#3!'#'5!5!5#53!5!5#!!-ʷ}}	ckvGG@<<3ffX苜qXGccG      J     326&#!2+73	###	3(ttvgnؐB(       33#!!#'!'57!5#'5735׫$"q~q     +  !#!573#'5!3!'573!#'73!#'5;jjŠJss<wѡIjj8/w    {  ,  32#' 3%+ &5%6323'#57'53^VQ6>ѨABؒ6ʞG2k>Y3~||~        O b s  32732753"'#"'4323$4'5;+"'#"'53275'&'&5?5572%#&'&5%634%476=%@.!%,BE,#!-Q2"
$nL/PuHED8<yVX}$c!u&# _A]&y#{Y6\K00D(;,,e"@ p$B(!cc*@rJ&*EcJkgFp/ԶQRm       [ f n  2#27654'73&#"##"'&'#"56=+"'4654#"4735#5&547/63654'%654BR38xy}xO8x*	,;^PhoP9).Rt}?ywW·FY3(p"AK|.PQUbKxưrɮ-&*;"1Fq;<tM]#;@"+!My/xK\̾g|HJiS~J?scf=       2  2#'#"'#&'663327'#&'56=4'&+"6і}٪Yql	~Bw%bx׽ɊnX1UhstZ|$eE7          !   !   !   67	654 '67KJy_ͪq7IL6xbhp]B          ( 4  3265 !  >32#"&546324&"26% !   !  
Őb{=&*<<*(;E;R::R;KJ67Ϛ{ɬ)::)*<<**<<*):<'L67I    &b  'b  b     &b  'b c     &b  'c  b     &b  'c  c     &c  'b  b     &c  'b  c     &c  'c  b     &c  'c  c   
   @ F L R X ^ d j p   3264'&#"&47367'676756273#'#'5&'&'7&'677&'67'%%&'&'%6767%&'0/CB^0/AC/pkTcR|'N(OfUippqUfO''NQaQh!$b)dLQk
KRt!%c'd&//^000'N'|P_PfppoQ`Qy'N'P\QgppmQ\Py,
M
N>&`7"
bK*V&"g{M	M  jn 
  ! - =  4632#"&%462#"& !   !   !   !  676 &'& Q;:RR:;QBRtSS:;Qtu<=CA$32%s'l(;QQvRS:;QQ;:SSutC<=@%8338H,'(+    jn 
  ! - =  4632#"&%462#"& !   !   !   !  7 767 '&Q;:RR:;QBRtSS:;Qtu<=CAs('s%23;QQvRS:;QQ;:SSutC<=@G+'',H833    jn 
  ! 1  3264&#"32654&" !   !  % 767' '&'Q;:RR:;QBQ;:SStRtus$32%s'l(:SRvQQ;:SS:;QQu[8338H,''+ 
       " * 2 : A I X  3#''%#&'52#"'&5476!!'5%!!'53'5%3'5%3#'32765'&#"sNN99=>-1\H0e%FKSwZGr=;=NN$E| 1	?'_>?@7`d@\hPPPPy?+<>w_VG{?,rCA        +   +"'5$76%&'547327676=&#~jt1/Q}](+VRxbOP>nS]]	=f      P  +  ! &56;2'5$%75#"3ui1.P~N](7P,VSZycOpO
>S\^	f  0: 1 >  7#'#53'&'&54767&'&=33676=3#326'&i($lm$(($[Uu&tU[$&uU[[UV$|ddbe|$%
ZSSZ
%_TYYT  -  #  "32654&&54 32 !!#!5!&礡ɩPS'䤣أL"~||	    -  #  %2654&#" #" 767!5!3!!礡7䤣أLޜ~||      	   "326&#"  !7!礡YpipH=U	g\u    S     5264&#"#4 32 33#!5z{ym㗗y{(|    j   #53533#632#4654&#"#*jjoon}mZyH{zF      2 
 1   "32654'#"&4767!!53#5!!3!!#3!!pOO87O:=0LmkL/>Λ2  1O79NN970LؙL1KӘJJ-   ' <  %#5#535&'&'5'73'3#'73'676=35'73'33◰zhNgeMjzzTThOʍ7NjYYӖy     ?    ! #!!!'!27674'&#.d ;6zFH%QM_\ǃ$P<    ]   $  ! #"#&5463 67!2#654&#" V⩁"T]ts]U"X"1((1"     u  .  " 6&'67>3" #" 54767&'&#52&͕LVa{.+ؔ)0zHUM\&ϖ=Bll)'ҕ*l8lB=     j    &'5 %$ 56?63#'[Wtutu4ZZ//[[5   @Eo   & <   "3264,'532'&54632264&"&$#"#"&547>B_^^l;͓hI^9l:͓hI(+|TlgMLx)+{TlϔgMM     M  >54'.#"324632 27#"&54 54&#"#"&'&54767632254&K2q'$#K1o'#0ߴGdAoc.%	 3t88</3u77LJMq'##K2o'#$L1ݰ
|XHwyo<>bWDs-Kx68<<r.)     m : D  2>32>32#&'567'45'#&+"#4'3>$4&+"?w(K>R0D<d.J|	.:?#)v$-ƀwϧ}wh^)etWWaAjtAO]R     k9  #  !!!5!&54 32 !!5#67654&"*-bCDVUhhUyzzyU   E< 8  353'5#"'&'45'#&+"#4'3>32>32 gYYYD,.:?#)v$E?w(K>Ro}vvxJvaAjtAO]ƀwϧ     		/	?	!5!?=lXjj= ?l=Xj=j     j ) 1  27632#"'#576&#"4'5267>327&'"SkQmyz,~zi2@:$(.-)zW]	ݾgvx-aX[&ŝ  9{ ' Q   32263227632&#""'&#"#"'&#"#' 3232762327632&#"#"'&#"#"'&"#'Es-p86rV+)|m^?_3<Vp;7SW78675Dt,87VWn89V+)}m^?_3<W78;7TV87n5(GGGG$35LKNCGHFb'FFHHFF#26MLNDGHHa   A      !5! 37 !!'  3(ͦ '3_76`S@ʬAR       c    $ T d  67&'&"!3!67>54.#"!&'.54>325467675#53533#63232>54.#"P#3JTRJWVJQSOMJ4"?*&ElnhPL$ llill%LOhnlD')----+)QPQ((QPQ)+/6klj$?6FWWF6?$jlk6}++--     J H N R h |     &'4>32"'4>32&'4>32&54>32&54>32#!5!'!567>54.#"32767>4.#"327732>4.#"327>54.#"732>54.#"M_6694S55.+C55C&.66V\+55c$M##$	6$#$s`%#$d0"%)h#"#_33@]22-"40446/*33UJ"+33^1/K=0T*
#### 
#&$$&##&$$&#

B

####
*"$$"  U  ! ' - 2  !35!#3!53573#'5#5!35!75!!5'57!s\\ss]]s	JRRIJ~֛E77__vtt4!    v 7 C Q ^  &54767&'&'5676767&'&54>32!	535#5##3654."! 2>4.#" <$))+N-N*)N-M,**%: @v<-MTM-?K5:66459<5&?HPPIK*
')+K**K+)'	*KIPPH>&5<:6uN|l||l|-I+N))N+@6:55:5 Q   ) 5 > o  654&547 !&54 ='&'654'67.5476;+"'5#"=6&'76767 %25#654&'Fz-6Z8.	,N0H!h6%`+EH
)#M;,Jga#iRk'M+1^hgo8:(@s.Pmz nx?.#1p#41`&>%!ac,,LHJ
x}647|
+OJJ)!   0   P [   32>4.#"32>54.#"!5&54767&'&546767&'&4>32'&'.#":e79e89f76e`[S&(*UM,N)(N-KV)&&\@ECApd88dpg669:%N&KRS*
'TM**MT'	*SRK&N۠:9}qyyq}      c    $ T d h y   67&'&"!3!67>54.#"!&'.54>325467675#53533#63232>54.#"!57!&'.54>3234'67632!P#3JTRJWVJQSOMJ4"?*&ElnhPL$ llill%LOhnlD')----s=BDw@>=))==AwDB=+)QPQ((QPQ)+/6klj$?6FWWF6?$jlk6}++--!yCB{C!$$!C{BCy!    J H L P  &'4>32"'4>32&'4>32&54>32&54>32#!5!5!M_6694S55.+C55C&.66V\+55c$))_33@]22-"40446/*33UJ"+33^1/NNOO U   % )  5!5!!35!#3!53573#'5#5!35!s\\ss]]s	^^/oo#E77   v 4 @  4767&'&'5676767&'&54>32!&535#5##3 <$))+N-N*)N-M,**%: @%v<5&?HPPIK*
')+K**K+)'	*KIPPH>&5<:6n5|l||l|    L   3 ? H N  654&5473# !&54 54'+#"#7&'654'67654&547;2547#";65'" 3%:U"-6Bu
Zg0krX0c-h8E+`%s
H>4wM-'9.QY/o8:qhPSmh
	#%Bz1"0@)5"@YR 0 .  &54767&'&546767&'&4>32;&(*UM,N)(N-KV)&&9:%N&KRS*
'TM**MT'	*SRK&N۠:9   C   #  #"'##56'##"/547 ?^'5@_*SU&/UL	;Yԧ9UP(`XI.     s  2  22732 #&547636=4'&# #4'&#"*tpz&=<xQ>hG:V
Hek%PF5NPB|-&pA&NF    X      	 &&5	<F:^;"Vgd     G 7  236;2"##'65##"'&5476;235&'&=476ex<JT`(GeRUdfB3	VNT<G48u<B<h	mMD:SGEnQh  B  " < B  +"'##56#+"'&57547 7;2732;276=4'3&'"~V"0b*SV*8UiQ"_|Q
)w`SgA
?6N#euB?gIo5	F(pZR      w   2367632#&5476(t*#\l~ ΨT]1klSI|-  X     	&47EosU     H 2 ` g  26;2"##'65##"'&5476;2&'5476&+"326733276=4/#"567654'&#"35&5hr=)\"IfRUdgC3&=cGkv	==Nr%SZU6vk 6)S<F98:d	mOE:Rp&i	C]&'Ax.+0	nM,W`c     T  ! 1 M  3#&'&'0546%3#&'&'45463#&'&'546 $&54673 $64'&'v0A1Y1,KV.J/VL9?cyɦt3Zr`ŻN	[O}БBr1a`bb`a1)EMUUME)     3#"/4?23hH0#!cZ-@   o   3#'654'&'#"54732XWz=\9`Y'6?F` 1TFG*֙-@ x/   #"=4?2%#"=4?26ձ'VQܖCت+YP*~:ۉ8z"C     o    "'4723!# 5472!5kmOdXX[;Z$}@Ϝ   "    3363'$654'"-8w?WXc1      0    3%#'#3%#)N(4/c}    4 ( ,  377#'#'547#5773%%.wwzy.**  <<7CA<<{8AMt    P H  #0#"#"'5654'5673;54'56732733273+&+#&"#&'565P8cc 9S:--:S8!cc7P:--:Z#;17F-:S8!cc!8S:-F71;#ZRS9 cc 9S         ; G  7567&'&'3#6737'#&'7#&'6735'67#3335#5;0/_^//,/,-D--C-,.-
zz
~jihh~zz~hihj~ntt6tt-.,-C..C.,.-n//_R_//~ijhh~Nyy~hiii~zzs..         # . 6 C M h w      !2732!'5675'&=32#$'57637&/&+"+&532?4/%32#'#&&=4?#'57335'3!273+#='!"/547354;2?!&=!(:MbR.qp7,_q>MT,P$66$0_	u3dUdt_}s*$"Rt0XX__/ik=ZG8*F1
.ъf)MC=g9EkO9!(-);&
]t!y"&2|ba$
U+      
 # 8 M  35733!&54?'7'327!!"'&%#'7367654'77'7'&#"'676ի,&T>=c#]K9.U:1ʈ%`T?<c"4?5̈'8/a\MOHK$k$# ,!a
IF74H`O]BA6$k#(	kNA!       5 J _  !!5>7>54&#"5>32&54?'7'327!!"'&%#'7367654'77'7'&#"'676]T@1$J</gYLp0&0
,&T>=c#]K9.U:1ʈ%`T?<c"4?5̈'8/]U1)8(3&ncQ&D-mMOHK$k$# ,!a
IF74H`O]BA6$k#(	kNA!     ( A V k  #"&'532654&+532654&#"5>32&54?'7'327!!"'&%#'7367654'77'7'&#"'676Z_3lFHe5^\VOosHGJI)`VKm1Sj,&T>=c#]K9.U:1ʈ%`T?<c"4?5̈'8/S<\el23-2['&')bYK4JMOHK$k$# ,!a
IF74H`O]BA6$k#(	kNA!       & ; P  333##5!5&54?'7'327!!"'&%#'7367654'77'7'&#"'676yy,&T>=c#]K9.U:1ʈ%`T?<c"4?5̈'8/Rv_`MOHK$k$# ,!a
IF74H`O]BA6$k#(	kNA!         6 K `  !!632#"&'532654&#"&54?'7'327!!"'&%#'7367654'77'7'&#"'67612hFL]5R]]R'PF,&T>=c#]K9.U:1ʈ%`T?<c"4?5̈'8/_ptcdrr@89@SMOHK$k$# ,!a
IF74H`O]BA6$k#(	kNA!      	 " ; P e  "3264&.#"632#"&54632&54?'7'327!!"'&%#'7367654'77'7'&#"'6767DD7:BB=F"W\]8uu&M,&T>=c#]K9.U:1ʈ%`T?<c"4?5̈'8/Av@@vAf`5(sa_tMOHK$k$# ,!a
IF74H`O]BA6$k#(	kNA!         4 I  !#!&54?'7'327!!"'&%#'7367654'77'7'&#"'676&,&T>=c#]K9.U:1ʈ%`T?<c"4?5̈'8/2{MOHK$k$# ,!a
IF74H`O]BA6$k#(	kNA!        - B  7&54?'7'327!!"'&%#'7367654'77'7'&#"'676,&T>=c#]K9.U:1ʈ%`T?<c"4?5̈'8/MOHK$k$# ,!a
IF74H`O]BA6$k#(	kNA!         ' 9 H R  !273!567&#2$'76+&67'#'6765'533!273+#'!"/47*:!Jca#fi*11Za(}ypPd!^t/TT}75	b\V/V'f::p?)\ )9s	s%00       % 2 < J \ e  3 + &=%62!67#&'&#36&#&#"3274/"34?3'35732?5##!'53aoPS<&3y:
SO	B2_5Nvbe)PK	L$=j"AjOL5_k,ߋ~y}/M<4{1;C,[_ei'[)$           / : B R ` j   # &5%6; 65%&# !27!57&/#2#&'676+%!#'#&'47'3!27##'%!#"/6g^_b0h\{\[:5:QmMM[-w,ldNVNG+Q'XYtTpXYSmEb,#4'FV !	Y11_	Ug,1        A R  27&' # &5%6367&#+.54745467263#"'#%; 65%&# aWg^_Wa+vzzw<b0h\{\&XYtTͿPttPapXYS 1   .  2!2!!7&!"4#".547672670#Uq{|}@!/(S*E.َer(Y$h?}}|r<.<CSSSL2      `     4767632"'&'&!%!!+*T*+*B3      `  - 1 5  476762#"'&'&4767632"'&'&!%!!T+*l+*Tq*+**+*3       `  - D H L  476762#"'&'&4767632"'&'&4767632"'&'&!%!!T+*6+*T6+*Tq*+*f*+*a*+*3    `  - D [ _ c  476762#"'&'&4767632"'&'&%476762#"'&'&4767632"'&'&!%!!T+*l+*TT+*l+*Tq*+**+*+*+**+*3      `  - D [ r v z  476762#"'&'&4767632"'&'&%476762#"'&'&4767632"'&'&4767632"'&'&!%!!T+*l+*TT+*l+*T+*T*+**+*+*+**+**+*B3       `  / F ] t     4767632#"'&'&%4767632#"'&'&476762#"'&'&4767632"'&'&%476762#"'&'&4767632"'&'&!%!!$+*+*+*+*T+*l+*TT+*l+*Tq*+*+*+**+*V*+*+*+* *+*3         )  2 $$ $54$#"4>32#"&e|e(<X<ħñ"<! <"#<!;zchŮ;?B<!!<B=           ) 6  2 $$ $54$#"4>32#"&$2#".46e|e(<X<ħñ"<! <"#<!;>@<#"<! <"#zchŮ;?B<!!<B=   =B<!!<B=         2 $$2>4.#"e|e:<#"< !<"#;zch =B<!!<B=        '  2 $$2>4.#"$32>4."e|e:<#"< !<"#;"< !<"#<@;zch =B<!!<B= B<!!<B=          7!!(            7!!%!!`x`    M&b  b     M&b  c     N&c  b     N&c  c   X   *  632327#"'&#"/#'!#632327#"$#"#4<NFH4526cKL53«NKjfÀPF`b
_~	]55x\ X    #'!#632327#"$#"#KL53«NKjfÀPF`55x\   j    	'7'77	'77	''6ƺ.+ŸMMƸ,,E#?=~Qǻ,,ȺOȻ-,qt5@   e  R  32>54.#"##"'5##"$'&'0!5!5&'.4>32!!676767'%''H&(G()G'%H(%'VW3WImuw>DE}AB|GE=md^JW4WVs'H''H'(H''H`XAK|@X1(ԁ3"|}DD}|"	2/
"1X@|AX1#     /  	673&/'67&'"&'6?&'3	'	K[]><+Gg['fBBe&\h?(K?]\K !;<uI@*"O8B1"1B8H$LIu<;0:ƕ     }   . O `  3254'&#"'5&547#&$54%'654'''$'67232#"'&#"5$'654%'.54>32T$#AC,MMMvA5p_9D-M**	
B@0"@R//>wA&oc/D&3.YaQ/5"1'"uE62/u= =!m-....   y  	 7  %	 %	 32+#".=!"&'&'#&=4;7337_%	8)0/_^^M^1/ 9534<&&<&*(D>?GGzB6C{GG?>D9/C    }    &  632#"&'.#"'#!#!#Ҹ62K#+~KF0R!9'/Nx_TV_T	'NQ9;:#8HL"CD|))Z    )    5   32>4.#";267#&=&$32735&'.4>22[02[24Z1/[)'5*+XA<NWXZXN9dY22Yd[00-&皗1#+UU+    j ? G O   277''"/&'&'7&'&'7&47'6767'676?      "&462jX+C@~L@T/!%%!/T@L~@C+X+C@~L@T/!%%!/T@L~@Cl[[[-@2<T\E#D#F[T<3@..@2=T[F#D#E\T<3@-ku[[[    % 	     % , 1 6 ; @ H O [    3&47"7&'7&'7&'7&'54'654676767&77&547?&'"32654&'5&'.4>323#67#&"#"/&'&547&#""'6%676V n*[n%'ZxL0<{2;&b;</2:(s*nW)'$o`0LP;2F<;&c:2/7LL75MLZ'&4)PNPU(D4(43(4)"(UPNR	(" B"v>0&8a>!U*~EmLK}`?
{a7c[O&0>j!>a)E~CKW
={d{7[+M57LL75M-Z
'*''*'
Y	(5[J5(	\d	(5J[4
	'    '   / 7 O _           2#".54>&'32367&%2327654'&''67&'&'&'676765467654'&#"7>326323#"'##"'&'#"&'&54767&'&54767232&'&#"6&%6767&'&'&#"676&5467&'&6732767&$$$$OG3%V	cc	V%4GL944m/122102/.303112.OF}6&V	e"w?>v"pt #87!vn":;@A<:"nx!66# sp%./13/.UVT\<>"$!!	!"#">kc	V	&6|FO	93399	<>#"#><	 "$ZTU./43..V5$##$59gT;&'9Z^^Z9'':Tg9'(''&()I8:9889:Z_59eU;'(	:8.>euvc>-7:bccb;7-?cwud?/8KWZZW **D@@D+8(':Te95^&)(&''(DA:AD.*!Y[[Y!   &   ! - x    67&'67&'4&6%67.'%4'6&#"&'6767&54?67&'&#"#&'#&'5&'"'67&'&47632>4.#"%2#".4>'7,3	3%/0),7=*#0*+3.22'8 	 YfT,1'').UfY >98 "2B2;F_  XB?2C3" 894ihgikce"S[XVWXZ#ejpMcNTvJKrZ1VlLWMI	pjk%nAV{ww[11[ww{V@#fd-#JM7B/""0C7NK",df#νhhοggQUXXU     S     	!!Y,q@I@,qȤ7TU7      S     '!57|,q,Iw,q,ɤ窪8    d      %  3!'# !5 2#"62#".54>"	h9|M463%&$$5		O	Dn;$$$$       33'5 54#$/[QwGSGUWGJG   Z  * 1 = C  & 32632 !!#!#!5!&"327&7&!&7326&#"6'XP}}R?99XezfH9?A:uutLFF"~||	-
	
GP8lGrr     [0  $ , 8 >  & 6 7&  '&'&'& !7!!!  6'&265"ut.77!u$lYoip@qDi4tEu.$rl,36l%eUg\xuvSc?\7=1lHr-ؤ    - 9 E   6' #"'!!#!5!&'& 326!7!%"327&7&326&#"suuW~WdP|ojp?9:v8?A:llGrE,
||	~LDJg\uHO   U  (   &  6& 32!7!!!#!5!&yEߩPhpCLn[u~||	     + D  #"'&'&'&47>76327'7'%'27>764'&'."(F3"D"&%#}bV`ZZ^;D"&&$[X]:3G9:]:F=~=<Z/*~z?<Y.( !$HS\[V*%%'>HS]^X&%iiD^29i\=<<92-1X?:<91*      = X  62'%'!!#5!5!5&'&'.546767''7'''7"2767>54&'&'&4p69].(EGGE@Z-<81VDEGFF'19T]9T:G5>+.11./:95>+.11./:9\2:a(Eb_E@(
	%CE_bG(Hij:ο\ij+.wBAw./+.wABw./    4 + F  !!#"'&'.546767675!5!'	2767>54&'&'&"<-Z@EGGEDVRbfNZ@EGGEDV18kbbjC9:/.11.+>59:/.11.+>5疑
(@E_bEC%##(@Eb_EC%	kajP/.wBAw.+/.wABw.+  	 + F  ####"&'&'&54767>32333'7	'%32676764'&'.#"ܖU
(@E_bEC%##(@Eb_EC%	Uܭkaj/.wBAw.+/.wABw.+<-Z@EGGEDVRbfNZ@EGGEDV18kjC9:/.11.+>59:/.11.+>5   5   @	 1 04 32  #" 732654&#"陽  5  @	 1 04 32  #"  K   +@kk	kk KTX 8Y1 04632#"&732654&#"ϑϑϘuSSuuSSu͒ΐSuuSSvv  dPK  ! ) 7 eKRX@*.,&"($
k3,k($kk 8991 @&"6k0k8<2<299990Y4632632#"'#"&7323&547&#"%6547232654&#"dϑRDDRϑRDDRϘuS?>Su^222Z>?SuuS  ͒!!ΐSuXqpWv28ML88LM{WpqXuSSv  TZ`z   8 R m  3# "2767>54&'&/2"'&'.5467676"2767>54&'&/2"'&'.5467676R#)$#R#$ $LK:C.25521@=:C.25521@=R#)$#R#$ $LK:C.25521@=:C.25521@=zZF)(JG()K.2IF21.2FI21F)(JG()K.2IF21.2FI21   
J 7 Q k  >767632"'&'.'!"'&'.546767632$"2767>54&'&'$"2767>54&'&'#61@=HK:C.25521@=:C.5%'21@=:C.25521@=HK:C.6#R#$$#R#$$R#)$#R#$ $5[51.2IF21.4`]21.2FI21.5[F)(GG()FF)(JG()K  R    5%%%xr6׊eMM^xx   V  )  7654'&'575#!&54767'5!s_vR$N::N$Rv_{aT,X@X,Ta{4b\)1%==%1)\b4ߴ:`\KDDK\`     -     &  6&   #&yEߩPSCL"~{ Y,   !#!5!326& '6  !I(4~uP|Gjt ~|  ,    	23"#"#"#5237	>>![ZVL;||oJ   ,   737!!'!!#!5!'!5!{{~zz~zdz|{||R{|  xT% 	    !	!5!	#!7!#	#T??LLwJ|A|JZt|J    ,    $264&"&7673%%&uuu>hH]%VgVYFhݦuuv#gGέҔEg DX   !#!5!&'&5%676'!HfN)]H;btWUJn|3Lu.:;͢8%|    V ^m   3   76= '&   7654'7! '.54676! NΫ.8l?ΫNΫ,spppsppp>9`VhhV`"xx hVc`VhhV`cVY9QN9ss9N^Q9s     V ^   - E     7654' 76= '& 76= '&! '.54676! ΫNΫkNΫ.8l?*NΫ.8l?spppsppp>9ghVc`VhhV`cV|`VhhV`"xx `VhhV`"xx Z9QN9ss9N^^Q9s     V ^m  ! 1 ? U  ! '&'!    '&'&76767 76= '&   7654'7! '.54676! x8;41 ::; 9٫NΫ.8l?ΫNΫ,spppsppp>9d]]c]]]Փ`VhhV`"xx hVc`VhhV`cVY9QN9ss9N^Q9s    V ^  ! - ; K [ s     '&'&76767! '&'! ! '&'!   7654' 76= '& 76= '&! '.54676! K ::; 98;418;41
ΫNΫkNΫ.8l?*NΫ.8l?spppsppp>9]]]]]c]]cehVc`VhhV`cV|`VhhV`"xx `VhhV`"xx Z9QN9ss9N^^Q9s   -    ,  "&54632 #" 767'	2654&#"@a^CF[^ccZ礡}[D>XUAB]~Lޜ~g]䤣أ   l P j   '#"'&#"'&'&'&47>7632327>76&'&'&/&'&'&47>762!2!%327>764'&'.#"&#"327>764'&'&s*	0$+$$$1#*#	ZaZ%%NT124 #HH	")mROeb
,
0
+
) .$J .%'.D"&B 1
$CmR )Ky	 	! 	   V!E  d z  267>54&'."#"'%"'&'.5467676;27>4.'&+"'&'.54676762%632$"267>54&'&.&&.&m,mQjP(!N!"(!	aVf&&bZ55!("!N!(PjoQm,.&&.&ql?W,>&#<A#"<"	((	"<"#A<#&>,W?~   lO O j   3!#!"'.'&47676?6767>'.'&#"#"'.'&47>763276;%32676764'.'&#"676764'.'&#"32eOuRd2!	HH# 7
	ZTN+Za21#+$04$$$+$0	's	*
	*
OK) Rd#!>&
3"9*$"D.'-  D! 2. ,	T%#:	&( 	 I  Z x    -4H  67&'&'&+"'&'&'&476767632%632#"'%#"'&'&'&54767676;276 276767654'&'&'&"276767654'&'&'&""'&'&'&547676762"'&'&'&547676762'&'&'&547654'&'&'&";276-&#"+"276767654'&5476%327%&"'&'&476762I	Q\C--%("(/*0.,+"(/X]\9<\X/"$)0*3')"*%1*0CR[	

		

		

		

	22				2				2				2				%'&J &%C\d#_*]OhXC%& J&O]*								
 ")&`&"'$"/'	<%ZS%SZ%<	/'* "%5"-($# 	;8\=
! ! "
/VC
" ! !
[uV/+							   V^ a u    767>54&'&'&#"&54767632 '.5467&54732#"#"676767#"'&#"'67654ozwbda_f_zx|wbdaM,krnulspsnunǊ*D$ lQ$"	6*D?"5'K(2-
# >

:72331cd툍i`4331cd퍇>mwn<;;8ro졘wp:;;BV0/M8:D@*|sa 	-F(7"*=8&0!2 1-5$&
6:B4   V^   ( B \ w  .'%&'&"632%6767>54$2"'&'.546767" 767>54&'&'&'2 '&'&547676?'*&$ 1$-+h+-$F3782**?1 $&>>9|wbdabc`zwbda_f_zxspsnunˎspsnulwI_"2[$ 	""		gI $[2!v555531cd퍅caf31cd툍i`43d;8ro졘wp:;;8rown<;   x ,A -  57'36%33#3#!2#!3#3##$'#7$@d5{sVd]F0  0F]dVs{5⒒d@(
jPP,PP`    0   " ) -  	!676762!"'&'&'&54!X$#R#+/RFF$#R#$1Sh,		k-"s!    | P     476?6763&'&'&547632676767654'&547632!54'&'&54'&&#"'&/&'&'&#"#"'&'&/&'&#"&'&'&?6'&'#"'&'&#"!'476='654'&545454'327654'&'&327654'&/%4-)"$0JK&
)7
		%0'#
#6	+-L__^/s4*1(.266	|/(1	

\	#:7
lS&x71]/~[#<$ o_%@,:
$";vR	$X$+|!5DX&PY;9Do6b'n283eF]4T&
& /50$?- 1@&	3l
K
C"P1	:03<D:5XI.)D&[+-1:			q/A8	

g     + jl  9 L p {     7654'"'&#"+"'&54?67676763276323273#5%6767'&#"6"/67#"27632327654'73654'676547&p/l0&J!cS%YE]{@C"$4>-;%,(6Y>m!N$X6"/,(4sS?X$U>"sJ?K(`./4+2K2.0>SZp0+1^' ;cs /^"|Y/428ۇϕl%%ot5oA='Y$	aT*''G+-%_kj~r}jL`І|\gK@/.85c($         ( 2 L S  >54/##326?%%3254' 654'3>7632#"&547>32'%;66I
	}g?6qn
	->
9@
H67;zh|	8
>6!q
B  5>    % + ? F   4&'&/76765'7!	!'!654'! 4'!!$467>2"&'&!654'
33
^^^RXI#J2VlP#	~!88!~	Kppph,p<(##(#id        ( 2 L S  .#"227654&'''%'654+.#"65.'&54632#"'.6#"%	
I66;o|>?%6!q	
9
		;76H
	|h>
86qm
B  X{[ % G  '23 %%.'&"27>7%$!"#232%"'&'.4676762%#"#2%k
A>>dIID`nS
	 
SnGYn5>5n     ) (  %$#"#64'232%%&'&'&"27676&22k**!n``n!##   3 W
   2327 632 #"'&'&5476'(> !~GH".4F+@xH	)0$'*'       2327 7632 #"'&'&54763'(e`}{*279HF`0@xJL1 ,     A   		'	7	Ɏ877Ɏ77ɍ8ɍ     ?   	tt7tt7t7tt7u   B  2632#"'&'#"'&54767'&54763267632676
Q x L$3z(		 
6X36*=P*>
"#
        R  26#"'#"'&'+"'&'#"'&547&'&54767&&5476326763276T
 디% $$YyX$		zc0+j:(̢1#:_$#-Խ=1 '2ĺ     p  D   #  !!!!!%!!!!!!!!#!5!36HVBBXBBUHVPBXyB    p  D   !!!!!!""p"p"#  p  D    35#7!!#!5!3rrsrs   p  D    !!%!!!!!!r"p"#p"#  R  b   !!#!5!3ppEU   l    3!!'#'!!#!!3!5@,r,,_r,,_ >  v   #  !!!!!'!!!!!!!!#!5!3hm_|P_H_     p  D K  #";54&'&'&#'!326767657'&'&'.+3!76767>5{dIB,$2$*DEh{LGC_RQ|66R_CIJ{hED*$2$,BFd{LGC_RQ66R_CIJKIB`OT|87O\FGKzdGB+%2%+BIdzKGF\OT87O`BHL{dGB+%2%+BId              #  !!!!!373#'7#ZAA:Llحmllmzlmllm|}}|d d}c   T` C  54'&54762327632#"'&+"'&5476=#"#"'&476323(L,68x86,L zFvd0000dvFz L,68x86,L zFvd0000dvFz zFvd0000dvFz L,68x86,L yFvd0110dvFy L,68x86,L     V^   &'##"&'&'&4767>32367675&'&'.5467676236767>32#"&'&'&'#"'&'.546767675&

 R.-R  R-.R "	
*!""! ((\(( !""!#%
	" R.-R  R-.R 

%#!""! ((\(( !""!**!""! ((\(( !""!#%

 R.-R  R-.R "	
%#!""! ((\(( !""!*
	" R.-R  R-.R 

  Sa   4&'&'&'.546767622676767>32#"&'&'&'.#"'&'.54676767>5"#"&'&'&4767>32(,$
((*& :.r06$&**&
)'De!
'd8:b&$$&b:8d'
)a@/!
')*&$6/r/6$&*)'
')?c'
&d8:b&!$&b:=_&
(bCc"
&d8:b& $&b:=_&
(a?/!
')*&$6/r/6$&*)'
')De!
'd8:b&$$&b:8d'
)a@)'
((*& :.r06$&**&
((     T`0  267632#"'&'&'!&'&'&54676763267632#"'&'#"'&'&'&5476767!6767632#"'&'"'&'&'&54767#"'&'&'&5476767632!#"'&'&'&54767#"'&'&'&476767632&'&5476767632!#"'.'&5476767632&'&54767676Z



(
&	 

		

<

4		











%
(






(


2



	

6

	

	%		

	

<

%

(


    W_   2767653"4'&'&Wspsnullunsps;8rown<;;<nwor8;  W_  7  24676763"'&'.5!2767653"4'&'&ee\WJIKGMF[[ff[[FMGKIJW\spsnullunsps&%JHifMH'&&'HMfiHJ%&;8rown<;;<nwor8;  / 	   %	%!	!/%

%ѿ5alLl    V^ 	 $  !	!2 '&'&547676Z¬ìӬspsnunˎspsnulHH;8ro졘wp:;;8rown<;  0  '   "276767654'&'&'!	!990000999900009|kk-28;BA;82--28;AB;82-&kLl  / 	 ' 1  %	% 2"'&'&'&5476767!	!/%

%990000999900009|5a-28;BA;82--28;AB;82-&kLl     0 	    !''!!	!!	!Z`5__5`/xxxx/kkIٶڶ&GGlLl     0 	    3'7'3!	!7!%%!Z&|d&dd&d|&kks/u//u/IvIvIIvIlLlc   0        %5%7'%!!	!xxz`/kkKKGSlLl     2     	'%'!!!!>j>-'O^__^Oq44H4"hdd      0   !%%!-@jjjk **           37'73	#'xxxx.xx.x..x    p  D   	#'!5!73!GFdFGrEGdGErFGqFGdGFqGEd  @L   			-	FOFc,OO,cFd,PO,dGOP  	 T`         '  %%%%%%%-wD{wwe#w%f{wwy||y{xxe#w%f{wwxEy||y        %	%	Zp/AppA/}}E   T`   			-	ZqNqqNNrqNqr   T`   %%-Zyllylyy   T`   %%%%-ZtGcVGttGVcGGstGWcGtsGc   p  D /  3%!!%#'''%!5!%777xo:U.cF.d;UǩoxoU:e.Ec.U9oE.f:UūoxoU9g.Ff.U:oxo9U.      54'&5476276767632+"#"32;2#"'&'&/"'&5476=&'&'#"'&'&547676;232?&547'&#"+"'&'&54767632676'K,68x86,L
qA'C<4GW>L
df
L>WG4<C'CnL,68x86,M	nC'C<4GW>L
dd
L>WG4<C'ElwFNd0110dNFy~DzI'#4#,G2$:;$2G,#4#'I~?	yFNd0110dNFy?~I'#4#,G2$::$2G,#4#'I;         "2767>54&'&/54'&5476276767632+"#"32;2#"'&'&/"'&5476=&'&'#"'&'&547676;232?&547'&#"+"'&'&54767632676o**YK,68x86,L
qA'C<4GW>L
df
L>WG4<C'CnL,68x86,M	nC'C<4GW>L
dd
L>WG4<C'ElP####LwFNd0110dNFy~DzI'#4#,G2$:;$2G,#4#'I~?	yFNd0110dNFy?~I'#4#,G2$::$2G,#4#'I;   h  2?'&#"&'&47676254'&4762767>2#'"372"'&'&/"'&476="'&547>Q!//VZ*nN+G80j@6RR6@j0/P1NTP#00VZ,lO@W+G80j@6RN6@j03L/N
]H,`,H Yc!77\4OO4VA7gU3',H^
]H,`,L&3c!77\4OO7VA7fV4&,H^        67654'&"327632#"'&'&/#"'&5476=#"'&'&5476763232?'&#"#"'&'&5476763254'&5476276767632#"'&#"#"'&#"327676%32767654'&'&#"#"Z8%1T1%85e %ZF\+m8BS/?JV@6RTXN6@VGB1QB8n*\FZ% e53e!&ZFZ*n8BS/?JV@6RR6@VGB1QB8m+\FZ&!e3DA	
5<;>
+F$H$F+
>;<5
	AcJ2QD++DQ2J (5H,'9,J&0f)
T|\`j4OO7g`\|T
'g/& H,9',I4( (3J,&9-H &0f)
T|\`j4OO4j`\|T
'g/&J,9',H5(""'!$(:UJJU:($!'""   n  F  w   "2767>54&'&'767632"'"'&'.'"'&'.546767"'&'.546767632.546767632=>343343>==>343343>x>%85670-),(-%8/[0!-(,)-02y/8%0%)-02y/8%-(.'&$W/:#-(,)-02;>/;),)-02;>/8%-(06{IF{6006{FI{605+'g>:c.&".c;=g'+&1N%&W'+&.c:>k#"$.c:>g'+,B:>g'+&.c;=?    n  F \ v      %"'&'.546767"'&'.546767632.5467676267632"'"'&'.27654&'&'&"67&'&'&'276767&5467'&'&#"32767>54&/76767>54&'&'&#"Z0%8/y20-),(-!0[/8%-(,)0-<1:3%>(-%8/|/8%-(>%85670-),(-%8/[0!-(,)-02y/8%0M= H C# B/g H /*x#$  8## H g/B PP  $#x*/%N1&+'g=;c."&.c:>g'.5?=;c.&&.c;=?5+'g>:c.&".c;=g'+&1N8GG$>>$c.,bB$#>	Ir0C>'#>	LM>#$Bb,.$

	>#'>C0rI   
 T` ) T  :e  &'#"&'&'&4767>3267'&#"327%32676764'&'.#"7632#"#.4767676324676762>322##"&'"'&'.5#"'.'&467"&'&'&4767>&'&'.'&'>76?&'326767767>5&'&'.#"767>7.'&/32>7674&'&'67'&'.#"67'&'.'67676767"2767>54&'&'"'&'.54?&'2767>54'7654&'&'&"67'&54676762:	


	$4

4$ww4

4	xy
%" !()-+U$"! ((\(( !"&S+-)(! '7M"# V2% A()-.R$"! ((\(( !"(O-,*(A"#2P"# "M		!

*4 2
kk

4 2uKK

		i2 4*

!==2 4

	`_
		
wR#$$#R#$$
	

	
8
<
c !<>
	







8
<
d!!<>



"%UV*) !!$3R  R3&!-(-%Z& "#%(.2$( &&S+,))A!$3R  R3'A))XT$""#%(`$( " 
	
i3+!x==3	_`			
		
!+3kk3uKJ		
	F)(GG()F$
		
%33%ww33	xy
		  V^  3 N ^   "2767>54&'&/2"'&'.4676762 '&'&547676%%-z35++++++53z35++++++5pWDM69?=;9JHDM69?=;9JHSspsnunˎspsnul}}(.h<;h.((.h;<h.("68TN;9"68;9m;8ro졘wp:;;8rown<;}}            "327632#"'&'&/#"'&5476=#"'&'&5476763232?'&#"#"'&'&5476763254'&5476276767632#"'&#"27654'&%&'&#"327676%327632654'&'&#"#"Z*1%85e %ZF\+m8BS/?JV@6RTXN6@VGB1QB8n*\FZ% e53e!&ZFZ*n8BS/?JV@6RR6@VGB1QB8m+\FZ&!e3*1%8~>
+F$$>
+F$H;<5
	A~;<5
	A+DQ2J (5H,'9,J&0f)
T|\`j4OO7g`\|T
'g/& H,9',I4( (3J,&9-H &0f)
T|\`j4OO4j`\|T
'g/&J,9',H5(G+DQ2J$(:U$(:U3!'""!'""     A  ''7'753'75377537'7'#5''#5'7#5'7'7<<x<x<x<Ć<<<x<x<x<Ć<phMrhrohMMhorhrMhpphMrhrohMMhorhrMhp      ! % ) - 1 5  3%%%%#'-75%77%7?5x#	<$	<x<	$<	##x̩hh3QhhP'cccchcbbccbbgccc     0 A  37%37'7'#%'#5'7#5'7'7-'7'753'7xdX<[ddY<\dxd[<Xdd\<YdhQΛ4h5QQ4h5ЋQheQ55h3QQ5h36Q        #"'&'67632#"'&'&547'".46767#"'&'&54767627'#".4767632&'.4676327&54767632./56..65/.-/531/.66\l\66.//56.../j/136\6./531/.66./56\66.0.65/3m6.5/../54///.6\l\66\l\6.//.65/.6\l.//.6\l\6\l\6.-  	 aS      . E \ s   "&462	7	7	'	'&'&'&5476762"'&'&547676#"'&'&47676326767632#"'&'&X|XX|}UU}UU9r99r<%DREA 11 AERD%<%DREA 11 AERD%,|XX|X.U|JU~-|U~U.<%DREA 11 AERD%<%DREA 11 AERD%9r99r    	 aS      + ? S g   "&462				"'&'&476762"'&'&476762 2"'&'&4767$2"'&'&4767;i)U)U
)UK)U'.n.''.n.''.n.''.n.'p17#((#71p17#((#7Mp17#((#71p17#((#7K8)UL)U~U)^U)Ip17#((#71p17#((#7p17#((#71p17#((#7Y'.n.''.n.''.n.''.n.'   	 T`   % 2 ? K W _ k  +%5%3246;#"'&'7632&54?#"632'&54"/7 2#547"&462"'&=3`(
`
&8(
`
&*G)*IG)(*(GeRGIR2d2X|XX|R2d2*2d2((<2d2M*'FI*'FeF)*IF)*(
a
'U|XX|Xc(
a
'     T` l  267632%632#"'%#"'&'"'&547#"'&54767#"'&47632&'&54763&5476Z+/#N42B4
{L"..$J%(4B+;
N#/V/#N
42B4(%J$.."L{
4B$BN#./#J"5C7/	N".X.$M51C5	"J#//#J{	5CLM$.X."N	51C!wJ#/  f  #     +   + A    &   6   F   V   f   v                     ]A       ]A     ]A   )  9  I  Y  i  y              ] %    +   
 +   и /  и /  и  "01 !  4$#"#  4$32632 !"?qq?pGQ?rA   z   7   +  
   + 
     
 +     + 01%!#!3!dd,S.Sd,     z  8   7   +     +       +   
  + 
01%!%!35!,dS.dd,    z  	 7   +     +       +     + 01%!!!SdJS.SԂJ    z  8  	 7   +  	   + 	      +     + 01%!!7!,S.SdJ          	/ /01	SSTRSSSSSSRU"S       #       !      !X    (      +  /    + 01!33R(n?  x(  '    +   /   +   01!##xnR?  (&     x(&     >B- D H  2#"2767>5!"&54$3!57!#"'&'.5467676#_>I-743TP>CPNDG-2.1/&D988	'.*	!-8D_2{j@F'%.3r@Md7+4V   /  2&'&54676762"'&'.546767Zy*,&''&%1]~|45,-++-,54|45,-++-,5(+&a4|d΃fz4a&$(F*.j=<j.**.j<=j.* Nf ! ;  &%&5467676246767622"'&'.546767Z{'&%1-l./&%((%&/.l-1%&'|45,-++-,54|45,-++-,5ġS4a&$%%`66`%%$&a4R*.j=<j.**.j<=j.*   n F( !  %&%&546767624676762Z_775EAAD659956DAAE577_qK6454NN4546Ko  X #  #"&'&'&54767>3"&'&'&54767>32rJ6464NN4646Jp`684F@NLBD64:866D@NLBD668^  ~ *  i  654'&#"632327632!"'&5!267&'&#"#"'&54763247632327654'&547632#"
6+Jo.^V|;-˙it36?̺fQMeEJS?(*$ s]vh2K)*NL13<VL*-*8A*_xAg0,?)!:"9JOCQ>^v:Mc*ZeC03N35%&-Kt\K%9S >BWN=!$?$8(F!5{^?   Z 	 Q  67654 547&'&+327#"'#536767&'&'&5432&5476323254'&5432?-BO>=v06&%K`dC+(k$'eM?$#=HbB=)+8=.m9ebPB>$3g:84!EB7WPfG+1KHP<Ff#&T'0P+A'<<QbF /'    "'&'&'&547676763"3/FDD@mh`((((SNecrGCFG/C>}DC  /' "  05276767654'&'&#052rceNS((((`hm@DDF/CD}>C/GFCG       !&547>2;       0!!6P<:      !	!$        	!	"        #{   !	!{<l`    9   	!	9`l        U?   !	!?     w`   	!	w        H   Zjjjj  l   '7'7Zjjj3j f $  #"&=4&+5326=46;#"3l==kDV[noZVtsݓXX N $  326=467.=4&+532;#"+DVZon[VDk==lԾXXstݔ         +  
  + 
01 !  4$32!5##7#??qqiڡA?r\/+     *   %  + % 
  + 
01 !  4$32>54&#">32!5!>??qq>0ţ=as;N_/>!RL}A?rFi:}$:&N?(U?"Mt      6     +A     ]A   )  9  I  Y  i  y              ] 1  .  + . 
  + 
 ! ' + !   +    9 * ' !901 !  4$32%4&#">32+32#"&'32654&'26??qq|=_ky4[\XZcksuD}[X@vhA?rs ?<:<NGLO0]r           +  
  + 
01 !  4$32!	!3535##??qqCA?r~ӍH      +    ! +A  !  ! ]A  ! ) ! 9 ! I ! Y ! i ! y !  !  !  !  !  !  ! ]    +  
 + + 
   +  ( $ + (   901 !  4$32>32#"&'32654&#"75!5!??qqYe2hvvhDw_X@ϰ?A?r%aVUa/
     2  3/ 4/ 3 и / 4 ܸ A     ]A   )  9  I  Y  i  y              ]  A   &  6  F  V  f  v              ]A     ]     +   
  + 
   +  , & + , / & ,901 !  4$32#"&54632"32654&#"7>325.??qq\NN\\NN\qºN	w/aTJjA?rZbbZ[bb*=P#         +  
  + 
01 !  4$32%!35!??qqlUA?rv]K     1 =   +    +      +  A     ]A   )  9  I  Y  i  y              ]A   &  6  F  V  f  v              ]A     ]A       ]A    )   9   I   Y   i   y                     ] /   9 ;  9 ;/A  ;  ; ]A  ; ) ; 9 ; I ; Y ; i ; y ;  ;  ;  ;  ;  ;  ; ] 5    +  
 ) + 
   +  2 8 + 201 !  4$32#"&5463232654&'>54&#"2#"&546??qq_TT__TT_⾭vijvkKRRKMQQA?rlHQPIIPPI\vSttSvB>=BB=>B    & 2  3/ 4/  ܸ A     ]A   )  9  I  Y  i  y              ] 3 'и '/ -A  - & - 6 - F - V - f - v -  -  -  -  -  -  - ]A  -  - ]    +  
  + 
    +  * 0 + * #   901 !  4$32254&#"326#"&'4632#"&??qq鿹ºO
w.aUJk<\NN[[NN\A?rK
<O$[bb[[bb     $ 0 Ӻ %  + %   +    + +  A     ]A   )  9  I  Y  i  y              ]A  +  + ]A  + ) + 9 + I + Y + i + y +  +  +  +  +  +  + ]    +  
 . + 
  (01 !  4$32!5##7##"&5463232654&#"??qq$uF?@EE@?FpA?r*'$   	=  $ >     767654'&'!5%3!!  '&'&54767̆mommom4mommomP\|~{{~||~{{~|96oooo6996oo		oo6}9:݈@>}~Ա~}>@@>}~,,~}>   	=  6 P     767654'&'!!56 7>54&#"5>32  '&'&54767̆mommom4mommom)4
\=)N=kP`aF7I׺\|~{{~||~{{~|96oooo6996oo		oo6_A.Xx;_x55'(IZV@>}~Ա~}>@@>}~,,~}>     	=  B \     767654'&'#"&'532654&+532654&#"5>32   '&'&54767̆mommom4mommomttLUDWx~zB\RGr=\|~{{~||~{{~|96oooo6996oo		oo6yt'(xrjw_Z\bd	@>}~Ա~}>@@>}~,,~}>   	=   ' A     767654'&'!33##!5   '&'&54767̆mommom4mommomh*˪+\|~{{~||~{{~|96oooo6996oo		oo6@>}~Ա~}>@@>}~,,~}>   	=  7 Q     767654'&'!!>32#"&'532654&#"  '&'&54767̆mommom4mommomz#G#KSLVAC\|~{{~||~{{~|96oooo6996oo		oo6cۻ)%}|X@>}~Ա~}>@@>}~,,~}>    	=  % > X     767654'&'"32654&.#">32#" 32   '&'&54767̆mommom4mommomllm=|</Vڵ=|^\|~{{~||~{{~|96oooo6996oo		oo6EKۼ>-O @>}~Ա~}>@@>}~,,~}>   	=    :     767654'&'!#!  '&'&54767̆mommom4mommom\ N\|~{{~||~{{~|96oooo6996oo		oo6`E#@>}~Ա~}>@@>}~,,~}>     	=  # 9 E _     767654'&'"2654&%.546  &54632654&#"  '&'&54767̆mommom4mommoms慄htdthutԄ9tihvvhit0\|~{{~||~{{~|96oooo6996oo		oo6,{{|kl{Eggss\hh\]hh@>}~Ա~}>@@>}~,,~}>     	=  2 > X     767654'&'53267#"&54632 #"&2654&#"  '&'&54767̆mommom4mommom=|<.Vڴ=}mmlJ\|~{{~||~{{~|96oooo6996oo		oo6DJټ@>}~Ա~}>@@>}~,,~}>    	=  + 8 C a     76767654'&'&'"32654'.  735733!   '&'&'&5476767̆mo5885om4mo5885omT,+VUVV++2QPPQΠP3p\|~<??<~||~<??<~|96oooo6996oooo6{z~{ӟ>-,g%&݈@>}~~}>@@>}~~}>   	= 
 $  !5!#%  '&'&54767{\|~{{~||~{{~|#:9q @>}~Ա~}>@@>}~,,~}>  	=  6  >7>54&#">32 !5   '&'&54767I7ݺFa`Lk=N)\\|~{{~||~{{~| ZI('55x_;xX._@>}~Ա~}>@@>}~,,~}>  	= ( B  >54&#">32+32#"&'32654&   '&'&54767ir׸G\\Bz~xWDUL2\|~{{~||~{{~|db\Z_wjrx('°t=@>}~Ա~}>@@>}~,,~}>    	=   '  !	!335#$  '&'&54767hno\|~{{~||~{{~|@>}~Ա~}>@@>}~,,~}>  	=  7  >32#"&'32654&#"!5   '&'&54767CAVHSK#G#\|~{{~||~{{~|=|}''% @>}~Ա~}>@@>}~,,~}>    	=  $ >  2#"&546.#" 32654&#">32   '&'&54767PmmlC|=ϵѴV/<|=\|~{{~||~{{~|+޸KE@>}~Ա~}>@@>}~,,~}>   	=     !35$  '&'&54767>h\|~{{~||~{{~|@fE@>}~Ա~}>@@>}~,,~}>   	= 	  + E  2"&46' 654&'>54& 74632#"&  '&'&54767Yt愄/tԃuhtt-tihvvhit0\|~{{~||~{{~|{lk|{{Essgg]hh]\hh@>}~Ա~}>@@>}~,,~}>     	=  $ >  %32 #"3267#"&'"&54632   '&'&54767!C}=дѳV.<|=Allm\|~{{~||~{{~|Q/=޸JDg@>}~Ա~}>@@>}~,,~}>    	=     :  2#"&546$  !5##7  '&'&54767eddedddB¡\|~{{~||~{{~|>-/#&%q @>}~Ա~}>@@>}~,,~}>    u Pj   	!!5!!Pp#@pp   pt   	7%FN4NG  u P8   5	zD<22pJJ    t   	'-ZKFGN  uP   !!u\lE>~~>  u u +   "&'.546?!".4>3!'.5467>2p4,,$$,,42.p
,.".2.".,
p  u P8   !5!	%JZPJJ  u P8   !5!	%JHJJ  u P8      #3#3#3!!5	xx<<oJpppJJ     u P8      55!#3#3#3oPxx<<΄ΊXXXX   u }~   	!!~   PD    !	6>l>>    PD    	!	DR>l>>   P   	Blvv  u Pb   3!5	5! '&'.u$##+*ZJMM*+##$0U%!JJ!%U    u P8   4676763!5	5! u$##+*ZJMM*+##$0U%!JJ!%U0       !!	^r{VXeoo     u P8   55!Dq΄Ξ0     u j    %5!!53		!<9h9>     u j    %5!!53		!<9h9>     + Z    !73#57!!+ Id&+ъ2&     + Z    5!'53#'!!!+dI|&2     2 
   !'!'!53	!Odcndh    2 
   3#5!7!!!	ndnd;ch      dd    !53#'5!'!	!]n2n22r-hJdc;dJ      dd    7!573#5!!	!2+2n2nr-hLJd;cdJ    <   6767632"'&'&'!	<'CZmo~yti^Z\X^Vqoti^?)X6nGCZ.//+]Y݀z_X0//+]>Iʞ   	 BP      " & * .  37#37#37#37#5!!!!3'#3'#3'#3'#<<<<xíy_<<(<<(<<(<<ZPh      pt>     7&#"7'7	!%*BF8WU{FC*9oX:W  ubP     55!5!!'!XXddPR    t     '327''	!!iFB*8X:*CF9XU   pt> *  %&#">7'&'&">327&5467>7tBEH#&NKX$W/,0$" D5Hp*G6$"!0,0Y"W!F&'&#GGC   uaP '  467#"!4676?'&'.5!3!.5P5#$%"//"%X$#
5eeJ(0Y!	"X0(Je   t *  .'.54?'#"&'2767.'32t)H5X"$	#0,0X"KN&#EHEBCGG&'&KW"Y0,0$"E6G  s PX  ' <  6%"'&'.54676$4676762"'&'&&'.54676762$/+z>_ $#R#af#R#)>xbQu88RK68#88 vc     <  *  676767632#"'&'&'&%.5467.546A ''+/54<3o8n23'9%%%%bb%%%&:?$ fLLf#&#/:&'X23X'rr'X32X     V2 c   "'&'.54?654&'&'&#!"#!".4?64/&4676763!23!2767>54/&546767622	Z;:td	Z		c
uu
c	      2 c   "'&'.54?654&'&'&+"#!".4?64'&4676763!2;2767>54/&546767622pW\xjIJ	\W	
8
	     u P^   '  #76767&'&/3#>7!5!!5!.'PSJl..&GG&GlHSi7*nKKn**7OUnm'66'1U=Hd)dH=    n&   *'$& '&#"'676 67	h7Hm^:-3RESRQO1̡LH   O&   57$'& 54&#" "OER3-:^mH7hH܏1OQS    #u   	  	!	!j.u-1   0    3%!#3!Zddd    /    #3!53#5ddZd     {   3	#pp     h   	#	3hp   &H  HT   &I  IT    [  [   	'#'#'##'x\xxjjxx\x,x\ehhP8\x     YY   73373737+.x\xxjjxx\x.x\8Phhe\x,  O lD =  072767>54'&'&'&"7#7676767632#"'&ew@RNJV<BB!#@@RNJV<B!xxZvx$0YTtglqWZ/../ZSuglj!x?#!!';B]YQS@?#!!';BQ9?xvx`XqYS4..0WYqp{pqYS4..-     O |T <  #"'&'&'&54767676327#7&'&'&'&"2767n^jlgtTY0..0YXplgtTY0$xvZxx!B<VJNR@@#!BB<VJNR@1Z-..4SYqp{pqYW0..4SYqX`xvx?9QB;'!!#?@SQY]B;'!!#?  u$ % 9 M  '7! &'&'&'#536767> !'7$"!3!&'&'&'!#!2767676wx!1cbbc1!
"1cbbc1"
`x]\LM&		&ML\;RR
&ML\]]\LM&ZwxZQvcbddbcvQZ[RwcbddbcwR[xV''LM\7=e=7\ML'e;6\ML''''LM\6   d 8 	 	 
2@	@@	00	]1@
	 
 990@		  	 <<@<<KSX 	<<		 Y5!!dx	yxUZxx    u 8 	 	 
2@	OO	__	]1@
	 
 990@		  	 <<@<<KSX 	<<		 Y'7!5!'7wxy	xZwxx   d 8  ڶ
	 22@PP_
_O
O]1 @
 	9220@   <<@<<@

			
<<@<<KSX 
<<<< 

	Y5!'7'7!dxxwxxUZxxwZwxx     d 8   !!5!!	s]xwx]ix]xZx]xi    u 8   7'!5!'7'7!5	ii]xwx]iix]xwZwx]x    d 8    !7'!!5!'7'XiiiI]xwx]h]xwxiii]xZx]]xwZwx   d 8   !5!3#
Y#xwxݪ-xZxY   u 8   #3!'7'7xwx-\xwZwx   d 8    !5!53#5!
Y]xwx]Q7ii]xZx]Eii    u 8    !'7'7!#3!7'Q]xwx]iic]xwZwx]\ii    u 8 %  77777773'7'7#'''''''uFFxwxcnFFFxwZwxnF  ,X@j,  ,X	j,  ,X@'j,j,  , Xj,   , X@'j,j,   , X	'j,j,   , X@'j,'j,j,   @j  ,@'j,j  ,@'j,j  ,@'j,'j,j  , @'j, j  , @'j,'j, j  , @'j,'j, j  , @'j,'j,'j, j  	j  ,@'j,j  ,	'j,j  ,@'j,'j,j  , 	'j, j  , @'j,'j, j  , 	'j,'j, j  , @'j,'j,'j, j  @'jj  ,@'j,'jj  ,@'j,'jj  ,@'j,'j,'jj  , @'j, 'jj  , @'j,'j, 'jj  , @'j,'j, 'jj  , @'j,'j,'j, 'jj   j   , @'j,j   , 	'j,j   , @'j,'j,j   , 'j, j   , @'j,'j, j   , 	'j,'j, j   , @'j,'j,'j, j    @'jj   , @'j,'jj   , @'j,'jj   , @'j,'j,'jj   , @'j, 'jj   , @'j,'j, 'jj   , @'j,'j, 'jj   , @'j,'j,'j, 'jj    	'jj   , @'j,'jj   , 	'j,'jj   , @'j,'j,'jj   , 	'j, 'jj   , @'j,'j, 'jj   , 	'j,'j, 'jj   , @'j,'j,'j, 'jj    @'j'jj   , @'j,'j'jj   , @'j,'j'jj   , @'j,'j,'j'jj   , @'j, 'j'jj   , @'j,'j, 'j'jj   , @'j,'j, 'j'jj   , @'j,'j,'j, 'j'jj   ,pXj,p  ,pX@'j,j,p  ,pX	'j,j,p  ,pX@'j,'j,j,p  ,pX'j, j,p  ,pX@'j,'j, j,p  ,pX	'j,'j, j,p  ,pX@'j,'j,'j, j,p  ,p@'jj,p  ,p@'j,'jj,p  ,p@'j,'jj,p  ,p@'j,'j,'jj,p  ,p@'j, 'jj,p  ,p@'j,'j, 'jj,p  ,p@'j,'j, 'jj,p  ,p@'j,'j,'j, 'jj,p  ,p	'jj,p  ,p@'j,'jj,p  ,p	'j,'jj,p  ,p@'j,'j,'jj,p  ,p	'j, 'jj,p  ,p@'j,'j, 'jj,p  ,p	'j,'j, 'jj,p  ,p@'j,'j,'j, 'jj,p  ,p@'j'jj,p  ,p@'j,'j'jj,p  ,p@'j,'j'jj,p  ,p@'j,'j,'j'jj,p  ,p@'j, 'j'jj,p  ,p@'j,'j, 'j'jj,p  ,p@'j,'j, 'j'jj,p  ,p@'j,'j,'j, 'j'jj,p  ,p'j j,p  ,p@'j,'j j,p  ,p	'j,'j j,p  ,p@'j,'j,'j j,p  ,p'j, 'j j,p  ,p@'j,'j, 'j j,p  ,p	'j,'j, 'j j,p  ,p@'j,'j,'j, 'j j,p  ,p@'j'j j,p  ,p@'j,'j'j j,p  ,p@'j,'j'j j,p  ,p@'j,'j,'j'j j,p  ,p@'j, 'j'j j,p  ,p@'j,'j, 'j'j j,p  ,p@'j,'j, 'j'j j,p  ,p@'j,'j,'j, 'j'j j,p  ,p	'j'j j,p  ,p@'j,'j'j j,p  ,p	'j,'j'j j,p  ,p@'j,'j,'j'j j,p  ,p	'j, 'j'j j,p  ,p@'j,'j, 'j'j j,p  ,p	'j,'j, 'j'j j,p  ,p@'j,'j,'j, 'j'j j,p  ,p@'j'j'j j,p  ,p@'j,'j'j'j j,p  ,p@'j,'j'j'j j,p  ,p@'j,'j,'j'j'j j,p  ,p@'j, 'j'j'j j,p  ,p@'j,'j, 'j'j'j j,p  ,p@'j,'j, 'j'j'j j,p  ,p@'j,'j,'j, 'j'j'j j,p  pjp  ,p@'j,jp  ,p	'j,jp  ,p@'j,'j,jp  ,p'j, jp  ,p@'j,'j, jp  ,p	'j,'j, jp  ,p@'j,'j,'j, jp  p@'jjp  ,p@'j,'jjp  ,p@'j,'jjp  ,p@'j,'j,'jjp  ,p@'j, 'jjp  ,p@'j,'j, 'jjp  ,p@'j,'j, 'jjp  ,p@'j,'j,'j, 'jjp  p	'jjp  ,p@'j,'jjp  ,p	'j,'jjp  ,p@'j,'j,'jjp  ,p	'j, 'jjp  ,p@'j,'j, 'jjp  ,p	'j,'j, 'jjp  ,p@'j,'j,'j, 'jjp  p@'j'jjp  ,p@'j,'j'jjp  ,p@'j,'j'jjp  ,p@'j,'j,'j'jjp  ,p@'j, 'j'jjp  ,p@'j,'j, 'j'jjp  ,p@'j,'j, 'j'jjp  ,p@'j,'j,'j, 'j'jjp  p'j jp  ,p@'j,'j jp  ,p	'j,'j jp  ,p@'j,'j,'j jp  ,p'j, 'j jp  ,p@'j,'j, 'j jp  ,p	'j,'j, 'j jp  ,p@'j,'j,'j, 'j jp  p@'j'j jp  ,p@'j,'j'j jp  ,p@'j,'j'j jp  ,p@'j,'j,'j'j jp  ,p@'j, 'j'j jp  ,p@'j,'j, 'j'j jp  ,p@'j,'j, 'j'j jp  ,p@'j,'j,'j, 'j'j jp  p	'j'j jp  ,p@'j,'j'j jp  ,p	'j,'j'j jp  ,p@'j,'j,'j'j jp  ,p	'j, 'j'j jp  ,p@'j,'j, 'j'j jp  ,p	'j,'j, 'j'j jp  ,p@'j,'j,'j, 'j'j jp  p@'j'j'j jp  ,p@'j,'j'j'j jp  ,p@'j,'j'j'j jp  ,p@'j,'j,'j'j'j jp  ,p@'j, 'j'j'j jp  ,p@'j,'j, 'j'j'j jp  ,p@'j,'j, 'j'j'j jp  ,p@'j,'j,'j, 'j'j'j jp  ,p'j,pjp  ,p@'j,'j,pjp  ,p	'j,'j,pjp  ,p@'j,'j,'j,pjp  ,p'j, 'j,pjp  ,p@'j,'j, 'j,pjp  ,p	'j,'j, 'j,pjp  ,p@'j,'j,'j, 'j,pjp  ,p@'j'j,pjp  ,p@'j,'j'j,pjp  ,p@'j,'j'j,pjp  ,p@'j,'j,'j'j,pjp  ,p@'j, 'j'j,pjp  ,p@'j,'j, 'j'j,pjp  ,p@'j,'j, 'j'j,pjp  ,p@'j,'j,'j, 'j'j,pjp  ,p	'j'j,pjp  ,p@'j,'j'j,pjp  ,p	'j,'j'j,pjp  ,p@'j,'j,'j'j,pjp  ,p	'j, 'j'j,pjp  ,p@'j,'j, 'j'j,pjp  ,p	'j,'j, 'j'j,pjp  ,p@'j,'j,'j, 'j'j,pjp  ,p@'j'j'j,pjp  ,p@'j,'j'j'j,pjp  ,p@'j,'j'j'j,pjp  ,p@'j,'j,'j'j'j,pjp  ,p@'j, 'j'j'j,pjp  ,p@'j,'j, 'j'j'j,pjp  ,p@'j,'j, 'j'j'j,pjp  ,p@'j,'j,'j, 'j'j'j,pjp  ,p'j 'j,pjp  ,p@'j,'j 'j,pjp  ,p	'j,'j 'j,pjp  ,p@'j,'j,'j 'j,pjp  ,p'j, 'j 'j,pjp  ,p@'j,'j, 'j 'j,pjp  ,p	'j,'j, 'j 'j,pjp  ,p@'j,'j,'j, 'j 'j,pjp  ,p@'j'j 'j,pjp  ,p@'j,'j'j 'j,pjp  ,p@'j,'j'j 'j,pjp  ,p@'j,'j,'j'j 'j,pjp  ,p@'j, 'j'j 'j,pjp  ,p@'j,'j, 'j'j 'j,pjp  ,p@'j,'j, 'j'j 'j,pjp  ,p@'j,'j,'j, 'j'j 'j,pjp  ,p	'j'j 'j,pjp  ,p@'j,'j'j 'j,pjp  ,p	'j,'j'j 'j,pjp  ,p@'j,'j,'j'j 'j,pjp  ,p	'j, 'j'j 'j,pjp  ,p@'j,'j, 'j'j 'j,pjp  ,p	'j,'j, 'j'j 'j,pjp  ,p@'j,'j,'j, 'j'j 'j,pjp  ,p@'j'j'j 'j,pjp  ,p@'j,'j'j'j 'j,pjp  ,p@'j,'j'j'j 'j,pjp  ,p@'j,'j,'j'j'j 'j,pjp  ,p@'j, 'j'j'j 'j,pjp  ,p@'j,'j, 'j'j'j 'j,pjp  ,p@'j,'j, 'j'j'j 'j,pjp  ,p@'j,'j,'j, 'j'j'j 'j,pjp    d ?8    !5!53#5!s]xwx]ii]xZx]Eii    u P8    !'7'7!#3!7']xwx]siic]xwZwx]\ii         	3'#'## -Z-x\xxx\.x\n
#\       733737# x\xxx\xZ'x\#
n\x  O '  =  %"'&'&'&767670327676764'&'&'&pk_V1..1Vbrx`Xk_V1..1V_kpIxXE?#!!';B]YQS@?#!!';BQ9.-\Znl lnZ_.x$-\Znl lnZ\-.)xF!F@RNJV<BB!#@@RNJV<B!     O '  <  %"'&'&'&7676767'732676764'&'&''{pk_V1..1V_kX`xrbV1..1V_kp?9QB;'!!#?@SQY]B;'!!#?EXx.-\Znl lnZ\-$xw._Znl lnZ\-.)!B<VJNR@@#!BB<VJNR@F!x    . \@.  '$%+ /ܲ  ]KTX   @8Y<9992ܴ]299991 @'%%	/2290&547#";!"&=4&+5326=463K20IC5UU5l>>lmGСBk>DdW0Xdtsݓ      . W@#.  
-&.%)/K
TX )8Y299ܴ  ]<<999991 @&$-/22907&54&'>5!2;#"#!532654&+CI02Kl>>l5UU5D>kB0GmstݔdXЎW   2   	   	5	1 Vd22h   '   
  %#3	5'
:     '   
  73	٪L^8bb:     'B    	7''ٛ>PNq   'B    	'''ٛ>PNq^D   'B   	''>PN    'B   %		'''tNP    'B   5		5''bNP    #u   	u-       3!3!!#!#!5L3ͨ--Ӫ--         333333#######5Ϩ---Ӫ---     :k   7  !!   767654'&'$  $'&'&547676h08rtrrtr@rtrrtrVGFFGrGFFG;:rs죟sr:;;:rssr:Ŭɪ    :k  3 ?     767654'&'$  $'&'&547676!!#!5!rtrrtr@rtrrtrVGFFGrGFFGssB;:rs죟sr:;;:rssr:ŬɪKss    :k  3 ?     767654'&'$  $'&'&547676			'	rtrrtr@rtrrtrVGFFGrGFFG]x3w32x3B;:rs죟sr:;;:rssr:Ŭɪ3x23w3x uM
%'o  &  '%  J    uM   327!5!>2&#"!!"&'	;E <E!zMz     uM %  327!5!7!5!>2&#"!!!!"&'	;E$;EΪ@z٨z   uM   &#"%"&'73275%>2";EC;EJ綠mzz    uM * 3  &#"&'67"&'7327&'&54767>2";EIq(P >6D;E]InoSu=,HK%)AH!+p$	z1IosV<zE.JghH$  uM- 2  &#"676='73'"&'7327&'&53>2";E+@/V]H6H\nUm;D	[>wfP3,,I6x/Ur]HH]lVzM>wrN3F4   uM  !  3#!!>2&#"!!"&'732w~9F	9}9Gr0}}  uM  +  3#>2&#""&'73273264&c)~9GcBnnVs~9F	(6o~ç|K|oU}   uMp  .  3#327264&#">2&#"632#"'"&'z;E-8pƖqS;E;DܛWI3>6я]z!z  uM   1  3#64&"327&'&767>2&#""&'˔֐;E]InoSu;EcBnnVszяϐ-1Io7sV<zK|oUz   uM  ! %  7!>2&#"!!"&'73273!#3;~9G9GūI}ޭ{	t    Mm -  &#"!2#567&'!"&'7327!5!>2";Ed_``!;D	 ܻ`;`*I6ƌebIz`:H:`*F4   uM #  &#"7'"&'7327'7'7>2";Exx;EzxXyxzyxإz    uM *  327#467>2&#"#4'"&'	;E-A 4yy;EZ>Vy|-2PIϼ+zEa82Jz  uM '  &#"63"&'7327&'&53>2";E*y;E\?Vy~+&8'zLFaI1z   uM    >32&#"#"&'7327!5KL~9GALK~9G⧅}}g   kb    >32&#"#"&'73275!KL~9GALK~9G⧅}}Р  ?    j&  P$  j&  'P WP@$    
  5	5FѶeѦ       
  55FѶ///m  'P/   &P     ''P   ''P   'P/   'P    N  : A  %#"'&'&'&#"5>32326#"'&'&'&#"5>32326	5jbn
^Xbh`n
^Vhjbn
^Xbh`n
^Vg@PNE;=LTNE;=KPD:<LRND:<J^po     N  : A  %#"'&'&'&#"5>32326#"'&'&'&#"5>3232655jbn
^Xbh`n
^Vhjbn
^Xbh`n
^VePNE;=LTNE;=KPD:<LRND:<J^       !!'7!5!	5ZZN@PPNpo      !!'7!5!55ZZNPPN    _N 6 =  #"'3267#"/'7&#"5>327&#"56767326	5jbDS4WVhjbm\Y@/Xbh`ES3VXbhZmMp[Y@1Vg@PD4KUNE;@LTNE4LRN"*,@J^po     _N 5 <  #"'3267#"/'7&#"5>327&#"5>32732655jbDS4WVhjbm\Y@/Xbh`ES3VXbh`n[Y@1VePD4KUNE;@LTNE4LRND:@J^    T  
    5!5!-5	!5!uu/0\^ҲЪ~    T  
    -55!55!usҲЪ᪪/0   N   %  #"/&'&#"5>32326!!	5jan^Xbh`n^Vf@PD:<KSND:
<Jlpo   N   %  #"/&'&#"5>32326!!55jan^Xbh`n^VfPD:<KSND:
<Jl    ! (  #"/&'&#"5>323265-5ian^Xbian^VgsuOE;=LSNE;	=KJ/0:ҲЪ       ! (  #"/&'&#"5>32326-5	5ian^Xbian^VeuOE;=LSNE;	=KJҲЪ/0    ,  
    -55!55!us%ҲЪ᪪(/0٪   ,  
    5!5!-5	!5!uu%/0\~ҲЪ^    6  
    5	5	-55uu/0V/ҲЪа/     6  
    -555	5uuҲЪ۰/'/0K/    &  
  	55p/ѦѶ     &  
  5	5p/om//    &'P/   &'P    {  
   5!5	5!@Ѫop9     {  
   !5!	5	!5!@Ѫ       555@pNpop          	55	5@ppU      (  "  .#"#"&'5327>76325hV^
n`hbX^
nbj@TL><FNTL><FNEop     0(  "  .#"#"&'5327>7632	5hV^
n`hbX^
nbj?TL><FNTL><FNd        $ +  5!5!.#"#"&'532767676325hV^
n`hbX^
nbj@>֪VJ<:DNTL<:DNDop       $ +  5!5!.#"#"&'53276767632	5hV^
n`hbX^
nbj@>֪VJ<:DNTL<:DND      f    $  !!!5!676762!!&'&'&!!C.8d
6WYYV7
e8-;Z{+DD\93[2332[0<[EC,     W    7!!  %5$$}y]]x|  W    %!55 05 %$}$y|]]  W    !!'7!5!  %5$ZZN$}qPP]]x|     W    !!'7!5!5 5 %$ZZN}$qPP|]]    	K     75!5!  %5$!:[]3֪k-QtXVv    	K     75!5!5 5$%$][:!3֪kVXQ-     qK    !5!7!5!7!!!!'  %5$&`ȉ)P"_=6!:[]ss1st-QtXVv     qK    !5!7!5!7!!!!'5 5$%$&`ȉ)P"_=6][:!ss1stVXQ-    y  : E  #"'&'&'&#"5>76326#"'&'&'&#"5>32>  %5$ian
^Xbib`^Vgian
^Xbian
g!:[](NE;=LTN9A=KOE;=LSNE;CE-QtXVv  y  : E  #"'&'&'&#"5>76326#"'&'&'&#"5>32>5 5$%$ian
^Xbib`^Vgian
^Xbian
e][:!(NE;=LTN9A=KOE;=LSNE;CEVXQ-     6 A  #"'3267#"/'7&#"5>327&#"56767326  %5$jbDS4WVhjbm\Y@/Xbh`ES3VXbhZmMp[Y@1Vg!:[]$PD4KUNE;@LTNE4LRN"*,@J-QtXVv   6 A  #"'3267#"/'7&#"5>327&#"567673265 5$%$jbDS4WVhjbm\Y@/Xbh`ES3VXbhZmMp[Y@1Ve][:!$PD4KUNE;@LTNE4LRN"*,@JVXQ-         7	5@pppo        %5555òi         '	'!]#\e#N\#]x#L    
    !77	!	\ݿ##N]##    4    !7	7:\#]x#L]ݿ#\eL#1     4
    %'''	!]ݿ#\eL#1\ݿ#]j#     7 P~ 	   %	!	!!5	5!3!


     7 ?~   %	!!3* ^  V   	!!^* ^V   !!!^      '	'!##L    
   !	 ##     4   %7	7#L4L#1      4
   	! L#1#    7 P~ 	  %	!	!3!߆    ^V 	  !	!!	!EC    uR   #7!5!7Zxx/{xx:x   u-R   	'!5!'xxvx:x   H%   7!!7vx{/xxxƪxv    H-%   3'!!'Zxxvxx  $    !%!!W7 r     $    !!!W7     $    !!,7r<R      $    !!cr<R    !$    	vdxx    !$    	u    !$    	!	uv}x   !$    !	x     $  	      # ) - 1 7  #535#5#5#5##5#5#5##5##53#5#5#5##5qrrrrMrqrrrrrrrtr$ttttrtttttrttr     $#   	!$VVm   $#  	  !	!z0VVOm     Ff    			vvr5kk\SS  Ff   7	\SS    "   	!	R[RG     p (   $   %p@*X֖  MM   	:lLF    MM  	  		N lVF     
  j   3!!!!!!#535#53[[_~,     
  *   3###535#5333#y,8Ȑ      j #  3327673#"'!!&'&#"#>32&}f[_&}f[,	%$R/	%$R   
      !2+##5332654&+!ʿ[qrqqϐђА     fT  $ @	 $
!?
%29999991 @&	
B
 	$/999990KSX9Y"@&]@Bz  % %%&'&&&	 &66FFhuuw] ]#.+;#"&! 32654&#A{>ٿJxn?M ~hbm؍O  H # ( 0 7  #5#"''7&546;7&'&#"5>327354326=-?\g`n;)T`TeZx_958>cc3Vfa<}NV{E..''rOs+Ax.ٴ)3{     B   333#;#"'&'##53w1ѪKsQ
fև3͏oNPr> 7       !#4&#"#3676323#d||BYZucce22wxL  j   %3###3!E3A1wH        33	3###%̟8ǹiEL#    \   !!#!5!sP=g՚oA  X`   !!#!5!qjLl}e`R%  sw   -@  221 /053#5#   !232#"MT+焀\\xEE    f   !	!+53265##-}-MDn        h  
  %!#3!3҈R   sw    %#3>3   !"& #" 7MT!焀UHUk:E     =  {   0#3	632#54&"$\^TރQr)m`Tῆrr:T*   D  	   	#	#3	3	67632#54&#"f:9:<VUUQ.*(&G@\\[ny6P(     V  {   67632#54&"##33F9[Qr)۸V=`rr:T*j`j  h      %6323#56?65&#"T^\Ѩ1<-M21]@/2UPn44%    q   !#3!q"9      `   !#3!W`3    ph 
 '  "27654'&'2#"'&7673=A__UVF6˷ȅeB:VVMpˑRh]p[mNssg.        !5!"/32654&+532r%8<XMiOR
#˾la`b    qu{       &"26    & 6763265^]]][A٬7\Y3a_^\\h89`MG8]_2BI[   b  3`   !5!!5!!53/`x-    gt  d    
h   	3	3q*+D@    :  .#";#"./&'&'&'532654&/.54$32Hs_<6zglsɇ|F?"Ng{<12'w{r{i76vc3.#/ilpYwnI'O8-
!/EF~n|-&  \   3#".'%&+5!5!l'YvENq}gUru'O8?o_nI    {~[`   #76#"32632#76##"3$328jEsZ+4Y*tz₂1/  2r_    # $733>76&7#"733%3hkjwrq-xўD|Hv`Q~    PH_ #  #"$'5332654&76#"#3$32Ұ$Zh9dR˟YP[yfP     u 	 .  63 ?# 6%#"?3327632#5&7$'E ۬99 Z.


IBauyh$4Q (dcZe~PA45Gx=%'	   iK_   #6#"#3$324RhiFu~uf    P_   #6#"#3$32$32#6#"UlhQtxlokg_Q,X       $  6#"72767#"7#"'53;73$32iO_{k'jh	jWz{+Ά8B~BADk6Y    l  4_ 	 "  6#"3%$32#6#"#7#"73$32eRr;'ih삸{$,
}Q,ȯ      W_   !#6#"#3$32h5^ ,  hs 	   6#"32%##"73$32oNqm]I4,ǰ   P  9_ 	 "  6#"32%#7#"76##3$32$36eoNmIy[fy_,ο}_     m 	 )  32767$76%&#"#"=3326323EsyxcV&J]z7Sr#1X-;=m;@@]krw?|ӆ     P  [   !#6#"#'! #5&#"$36is" ~ ,8|{aAt     h  _   %#"7332%332%3#7#",r\iӮ-Ӯ-    h  r_   %#"7332%3#,rs¯Ӯ-    #   #7#"7#"73327332%3LB\Nt2־QBizhNs^y'     h     3$32#6#"#7#"73325mT@rhsÊr2 UyQ,ԯӮ     h  ]   332%3#7#"7M7ph^ʈa&Ԯ-     fJ_    6#"$7327! 3$36je!Duc2x-+9KFƺF4Ǳ  hJ   %#"7#"7332%332%'3#r\h$xmЯӮ-Ӯ,i     {"_ 	  -  6&32%6#2%#7#'#7!"3$32$32oGp
}YH֖t	U@,tSP-mnϯ-;,ů1.   dE   %##3%3%73#mgQ6Z{OBUE3{P\oR{oS{x~  P  \_   $32#6#"#3{ɇ^qQ,_   hr`   %#"733273#rɜگӮ.@~     hh_   %#"7332%3 !#532$rir;.UIYӮ-W׋  PT   #3$32#6#"|jcKJ={th,8Q,    VA`   27# 73$32#6#"[wX$(+~sez3殮   z    3 7# %33C8id,*>'jKp'2ֲ\-XC)     P`   !6#"#3$32$32#6#"s_`\Duiqt,`Q,    <\_    #6#"6 %'73 &!"#3$6")g]سŝ,*#s^Qzn(   `a_   3 73!8`!T^$97C%  F`   $# /33 73$'#%&'R$waְ;",dRmQr<z׿    P   _   !#7#"6#"#3$3232%3x,IkfÎ ZgiC^2^-  d[   6#"#!3#"$7#i|]1*p2x^,ofCx   z  N   ! 33 767537632,*#&8O|$222Ԥv;<    |m   %#7#"33%3nO,h*sN;%l1.ҭ!5   h_   %#7##"7332%3EmJ@roF_E3B     z  %  3 7#6! 6%!#5&"% BGsef)*IW^3*+0	J29RM?['  q   $@
E	E1 @ 0"32654&'2#"$54$,,g}ss}}ss}  s   + 2@-!
  ,221 @ &,046$32#"$&%!327676%!&'.#"s~&&~~ڢ~YNwwk]~Nwwk]zz❞zzIʑS`0aJɒR`0aI  s    " ' I@"$$#)
# (229/<21 @"#!%(22<2046$32#"$&7 )6 & ') s~&&~~ڢ~&\ڵzz❞zzI!!t!!    @  5 
  c@ 	 	1 /<990@  	
	BKSX@	
	  Y"5!	#	#7!v(vuyTW+F    C  8 
  c@  1 /2990@  	
	BKSX@	
	  Y"%!5	3	3!kxqF2    @      j@
	
<<1 /99990@ 
 
BKSX@
 
 Y"!	!7!5	5!WXwk/+W(L?          #@  	1 /<<203#3#3#zD  +    h1     h 9      (     EP       # / 3 H@5E1-0	!'E4<2<21 @300* 4*$49/02654&#""$54$322654&#""$54$32!!,,,,7`s9448844994488449\      }  :@	 22221 @  /<2220!!!!!!!!5!!AuAd9    \  R   T@ 
 291 /<0@ 	  
 BKSX<< Y"!#!	#!&,Ps՚vO      ~    -@  	<2̴??]1 /03#3#3#QI    \  R   T@ 
291 /<0@ 	 BKSX<< Y"3	!3%!cTsOv    s   + 7@ &-&
 ,9/1 @! ,22046$32#"$&767>54'&'&s~&&~~ڢ~.]=@N\N\.]=zz❞zz}qa!SM!R}|pa    s?  # - n@. 
'&$	/$ .9999991 @	.'&
)
)./9999999046$327#"''7&7&#"4'32>s~&Ġn~ڢĠnՑꏧw֜\w֜\zvijޝzwkj!^`|g^`          .@  	 <<<2221 /03#3#3#3#  )    :@		1 /<0@   22	#	#3.]F     ;  -@
1 @
 	/<<03!#!#!"9q    >  <  @ 	 9/1 ] @ 	/<220KBPX@
		  @	
  
@
   Y333	#	#  \Xds3{           1@  	<2<2??]1 /<2<20%3#3#3#3#  \    	 7@	 
91 /0@	 BKSXY"	!!!!&TdD՚o  hh    $@  	1 /<<2203#3#3#hhh          8    o    !@  	/221 /220!!!!5!!o&.-ժ     o1 / ,@!	',01*$0221 22<20!"'53   !"563 676!2&#   !27# '&%4rmy  ymrO4%%4Trmy  ymr4*B6!*:'(8) 6AB6 )*!6  o     P@	  <<222<<<<21 @	 
 /<2<<22<<2203!3!!!!#!#!5!!5!!n""xxyyrr     3        @  21 /03!!!ժ     ,    o    7@	 /<<2<<21 @ 	 /<2<203!!!!#!5!!5!CCPPxyr          7@  KTX   @8Y221 /0@0	@	P	`			]73#3#     >@ 1 0@	BKSXY"47!5!32654'3! $x˿ßwNetw   c   # / 9@1E-	!'E0<2<21 @ 0*$002654&#""$54$322654&#""$54$32,,,,PIIPPIIPPIIPPIIP  s  ' (@)
 (1 @
#(046$32#"$&732>54.#"s~&&~~ڢ~\ww֜\\ww֜\zz❞zz}``}|``   s  , P@
 !#.#
 -9991 @ !((-99046$32'#"$&73277654.#"s~&&~l~\wj\ww֜\zz➞ikwz|`^jI|``      ;  -@ 1 @


/2203!3!#,dq9d           (@ 	 <<<<1 /03#3#3#QI      h      ?@	<2<2???	]1 /<2<20#53#533#3#3#h+I  s  ' + >@-
)((
 ,9//)]1 @+(#,046$32#"$&732>54.#"3#s~&&~~ڢ~\ww֜\\ww֜\zz❞zz}``}|``     s>  , P@	%$#&
!.! -9991 @
#&$%((-99046$327#"$&732>54''&#"s~&Ġn~ڢ~\ww֜\pw֜\zvikzz|``|?l^`    sr % 1 = G@8&,20 ><2<21 @/;5)##>9//0 ! #"&547   !&54632!  32654&#"4&#"326sS_  _mz,,,,,,,,gs'O;H66H;O'sz<11<;22<11<;//  d    #@ 
<<1 /<203!!#!5!IIjk  =  ; ;    sr 3 ? K f@F4%+6:0 L2<2<29/<<1 @=(IC(7##11L9///<20 ! #"&547"333###3&54632!  32654&#"4&#"326sS_ ̻A;z,,,,,,,,gs'O;H6  ߊ6H;OO4z<11<;22<11<;//      ;@ 	 2<21 /220]!!!33##!!!>ժF        h*      ;  @ 	 1 /<0)3!3;+     y  =@B	<1 /20KSX@ Y!#	5!!!8k     s   # O@%$! 
/<<22<2<21 @ 
 /<<<2<<<2032653 #2 #4&##"# 3" 3ʊyʊy+VVF%F        .@  KTX   @8Y1 /0!##u-  s   + f@-,&' #+/<<<222<2<21 @+*
 #*'"/<<<2<<<29/<205!5" 3332653 #!!2 #4&##"# 35ʊAyʊy>FV>=VF=    6-  @	 1 /20!3!3M-     n^   $  36767#"&546?>7>5#53  Ya^gHZX/'-93B$S#C98LVV/5<4-5^1Y7     2&  PW  :X   !##    :o   #5!#&   X   3!3hX    o   !533oXK    N   '  6   '  6   '  6   '  6   '  6   &    6 '  6   &    6 '  6   &    6 &    6 '  6   &    6 '  6   &    6 &    6 '  6   '  6   '  6   &    6 '  6   &    6 &    6 '  6   '  6   &    6 &    6 &    6 &    6 &    6 &    6 &    6 '  6   &    6 '  6   &    6 &    6 &    6 &    6 '  6   &    6 &    6 &    6 &    6 &    6 &    6 '  6   &    6 &    6 &    6 &    6 &    6 &    6 &    6 &    6 &    6 &    6 &    6 &    6 &    6 &    6 &    6 &    6 '  6      %      3    F  
    %#"3!"$54$;3@8ʦ1X       '     7        )5!3!+ s *     j .     v 
  !#!	!3vb
w1     Ok   s' &   s'H   \   =     # )     #      0     3 1     j /    6     T 5    ;      .'3;3! &546#"3A{>ٿJx8 w~bw+؍      h     h 9     ; +            .#"#632[hq`QQ,    D   :   =  ; ;     <            !"3!"3!"&5467.54$3!DՔ|#orqp ˘      h $     h      (      E   )5!!5!!5!EP9ª     ,   s 2   ) 8      )  *@	
8 AKTX  8Y1 	 /<03 !  #4&#"!!ˮî$*\u       s  Z   @	 
21  	/0#   !3!   !5aPh//+ji      >   !!>   >   !##>@   >'_     >'_      #  
  !##!!>@#      #    !!!!>#           !!!!V>֨   `    !!!!VV   ri   d{j     X     n`+    v) 4 >@01, 
*$ 6E591 @$
*052220#"'&'&#"#"'&547673!27676323 4'&'3ft[na`zxz{n[tfCGo~[U ]LKfdKJ] U[~oFCD@@DDDk63366336Fk   ! <@! 	#E"91 @	!"2220!"$"# 33276762324rTRrƒ>IxddyI?ВP8[77[8G    <  r&   ,   >  {&       s 	         !3#! !   !  H0x:;hLH+fabg    p{ 
   "326&33## #"   rhո		98         3#!#!#3!	!9҈_:o%+kj   { " -  #5#"&547!#3!63!54&#"5>32"326=?/j`TeZ߬ofasP`A"..''f{bsٴ)   e    767!!3##!#!!&aO)p(?x4&AD+   k`    76765!!3##!#!![(bR-f}v(UԓR:d6     T     356765!!#!T:WO)fb0d+   L  `   356765!!+!L3DS{X^}з3oP       !	!!+##-})       `   !	!!###>?h˸ʹ`3'P s' y   2   qu{& R   y.  se      3#%3# '&76       1L  F<H  qC{      3#%3#"32654&'   !   hJ IHn98   s
j&&  ' yr   y   q{' yo' y.'    :W        ' / 7 ? G O    %3#%3#3#%3#3#%3# "264"264$"264"264$"264 "264$"2642+ '&' &547"#"&546;&546 676 3#J"{iihiihiihiihiihiihiihG4UU32UU4IF]97R̬\dfʬ\ʫZee̫ZҜ f   !!!2+5327654&#!#!qmL>87||ժFwrKK"9+     <VH`   !!3 +5327654'&#!#!<1BFRRQn!&&,B`GQa`07$)        !!;#"&!m?Mժ)  <  m`   !!;#"'&5!<1F##mXnPSE`.0`b7         *@ 21 @
/<0!2#4&#!#463!#"z||ˣ	iM?f9?a     d(   s
j&   q{'      X    3#3֪X0X     X    3#3֪$dX     X    3#3֪X     X    3#3֪X     X    73#3#֪X       X    3##3s눈X0X     X    3##3s눈$dX     X    3##3s눈X     X    3##3s눈X     X    %3#!#3s눈X    X   !#!!^GAX      X   !#3!!^AẌ     X   !#3!!^AX     X   !#3!!^AXd     X   %!!3^X   f 	  3'#'^9LkLCUC  f 	  #'7379LkLCUC  C  	  3#3#'Àf*D    C  	  #53#73CfRo    CD  d         35 !5 !5 JJ	
'ŢcmZ      `   35 !5 !5 ,,
|MY     sJ 	  5! -u.1      s VJ{ 	  5! -uX.1      f;   3!3+53265!#M?n"d_9    Vd   4&#"#3>32+532765||BuƣF1n!&edH08  L *  !!!2!"'&'5327654'&+5!#!^eicUQsj~cd\]ժ˚8+lhzy$1KKIJJ+  7L4 0  2!"'&'5327654'&+5!;#"&5#533!AicUQ^cdjTmcd\[jKsբe8+lh%12KKKJN`>¨   {R    g| 1  &'&547632&'&#";#"32767#"$546p<<rqLbaPQG;FDCtHNTUaQUGZTUP VU{hh&->HmmFEMUUU8%    ~` 	  !!!!#+`Ӕ   o{ V      	     3	3#!+!#	!	!J9҈_҈_%s%>+    {'{ 
 5 @ M  "326=%#5#"'#5#"&5463!54&#"5>3205>32"326=63!54&#"߬o?nQ?`TeZxeZ߬o5y`[A3f{bsٴ)Lfa'
fa..''~D''f{bsٴ)hn<    	-      3676!   ! '&'!#	!      J-p;:xżP.g%H}[[Xr%H   {{{ " - 8  2   '&'#"&5463!54&#"5>3 6"326="32654&y7!``TeZ*qO߬o{ǝ>REa..''f{bsٴ)n    q    	!3!2653 ! '!#%{J®sv%_r\4h  {{ ( 3  %#"&5463!54&#"5>3232653#5# "326=H`TeZ||Cu߬oߍo..'' {fcPf{bsٴ)         	!!#3	3%ǈ_:+    {N{ 
 (  "326=5#"&5463!54&#"5>323߬o?`TeZ^\3f{bsٴ)ͪfa..'' 5         	)!#!#333#%~gY_:gci5R   {N{ " - 0  !5#"&5463!54&#"5>32333#"326=!#u?`TeZxgƚÛ߬oGfa..''~mc3f{bsٴ)  V    	!+53276?!#3	3%lKMJ|ثL*+2_:q?=$%2@     {VN{ ' 2  !5#"&5463!54&#"5>323+5326?"326=u?`TeZ^N|lLT3߬ofa..'' wj8zHB3f{bsٴ)    s'   {    
  j   33#!	!##53ʿ3ʿչwH1r        3!!3	###53¹"%kǹ#Ĥ     f 	  37!!_(^M*     c   37#xI     S     33#!!#53ʨ_YQ  x     33###53YR  
j   %   3#! '&#5376 !&'! 76;:~ż~HjiF
wvҵCҤֆ    
{   '  23##"'&'#53676"!&'&!3276o
~~
oV?s?VLVVM{~͐~sUUu%gstg     s
j  $ .   676!   ! '&'!              ':/##.;:xŽ.$#.yHH5==5[[4=<4HHH  q{ 
  1  "32654&!"32654&'267632  #"'&'#"  ,nn霜ǝ98     
      32654&#%!2+3###538ʿ/ϒqrqqĐ  V{     &  533>32 #"&'3##5ܧ$:{ {:djgdaad̐     2    '  !2+##"&'&5476;2654&+-\0:<DOEFa!X=5' IK}L;    2V{  1  327654& &#"&'&5476323>32 #"'#
XSܧ3),4:<DOEFTg57:{ 2spA4( IK}Y;da  s 	 #        '7'#   !  7#'HHk3y;:xEHbLH}btab[XK|}lk   qV{    %#" 32533##5#5!  6& :| |: $ܨdaDDadj  
      326&#33#32+##538ʿ'ђ-KH    V     &  %##53533#>32 #"&ܧ$5:{ {dj+daa  
      326&#332+3##5#538ʿ'ђH^dd V     &  533>32 #"&'3##5ܧ$:{ {:djgdaad̐         !#!5!)+    Vy{     3#\{   V   3"&4&#"#367632o͚Qfe}}CB     V{   3"&'4&#"#3>32dJlʣ||Bua
ed      #     Ib    !5!5!5!b>>I  5   :@   KTX  8Y991 @	 _]0  P]3#5qe  o  7@
  KTKT[X 8Y1 0@@P`p]#o+         MVT    &#"3733#;#"&50# 76327M\P=x1F<5K9p|t      !33#!#ĪjA     {   3##4&#"#3>32d||BuR`ed  9 (  %!5!#$'&''7&5 !2.# !26uƍ(T+p^op+jkSU̒%nHF_`_w%     V{ & 0 :  %!"&'5326=#"'&''7&53253732654'&'&#"ZaQQR9|~Ch!t|9!.R2R,*[cbSp#c'8>:bc2c==W<n~bAn      j    3!%!#'7%'yR+7ʚ+8nwHzHQl3Ahn          33%##5'7%'%^!F!"ii[bXl?2c<ae          !%37!#'7%%^8Ě+Ě+kg.3Ai3A,&       {     ##'73>367'&'&#"dǹ!BucJ!	3>|\jTo2c=edxY1c90u@O_         $ +  #.+#'7! 7-&'&'#3767A{>ٿJxʚ+ ~I+,JJ=~hb3BFk>dNU?(B(D8c     J{   .#"%#'73>32JI,!-!:.˾4bTo2c<fc    /  .#"%!"&'532654&/'%&'&54$32Hs_wT"+W6lj{ra+eM0ei76vcew'8l0/EF~n|w".`&     '{ /  .#"%#"&'532654&/'%&'&54632NZb-!K,RZlfae$O!#>&Lf?((TT@I!
cc (L##55YQKP%ca&J       #546;!3#!#-v"0^i1Fd+9         3!533##!##53!5jj2ii}}}\rk\\~~    G  ' 1  .#"!3267#"&'#"&54632>32$"32654ogW`usC~>?Ce3-XX*1Zml^]lUdaY2jpa==><><<>L⁂po     `    w   	  #!5!!5Pp+ɪ   F  
    #";##"$54$3@/+X          3333!	  +       m   3#m     D  	U   %3	3#	#	#3>:9w+   X  1 0!5!-Ј  X   '3I(sI    nhX   #'3h'OW  `4X   #'3v5]dD  Z  X   #'3|;d07!  X   #(ẌI $Q     h$R     n4$S     `  $T      nhX   #7OhW h$V     hQ     4R     n  S      `4X   #7]vDd n4$[     4V     4Q  d     R  d    Z  X   %#7d|!70  `  $`     n  [       V  d      Q  0   <0     ^X   1 33ֈX      :         # ' + / 3 7ڷ/$0(7,48<<<<<#+ 3'<<<<<<<<<< <<<<<9̰XKRX8K
bf  TX30<<Y @TX@
30/,74+('$<<<<<<<<<<Y TX# /,<<<<Y TX74/,<<<<Y  TX+('$74<<<<<<Y @TX74<<<<Y TX<<Y TX+(3074/,<<<<<<<<Y bcK#a  TX<<Y TX@
<<<<<<<<<<Y TX<<<<Y TX<<<<Y TX<<<<<<Y TX <<<<Y TX <<Y TX<<<<<<<<Y	TX<<Y+('$8<<<<<< <<<<<<<<Y1  4)(/<<<<<<!05<<<<< 1,<<<<<	%$-<<<<<<0335!5!35!3335!5!35!3dddv&&vd&vdpdddv&&vd&vd%NDNdddd%NiddNNDNdddd%NiddN      :         # ' + / 3 7/$0(7,48<<<<<#+ 3'<<<<<<<<<< <<<<<9̰X KRX8 K
bf  TX30<<Y @TX@
30/,74+('$<<<<<<<<<<Y TX# /,<<<<Y TX74/,<<<<Y  TX+('$74<<<<<<Y @TX74<<<<Y TX<<Y TX+(3074/,<<<<<<<<Y bc K#a  TX<<Y TX@
<<<<<<<<<<Y TX<<<<Y TX<<<<Y TX<<<<<<Y TX <<<<Y TX <<Y TX<<<<<<<<Y	TX<<Y+('$8<<<<<< <<<<<<<<Y1  4)(/<<<<<<!05<<<<< 1,<<<<<	%$-<<<<<<0335!5!35!3335!5!35!3dddv&&vd&vdpdddv&&vd&vdXDXddddX_ddXXDXddddX_ddX    :         # ' + / 3 7ڷ/$0(7,48<<<<<#+ 3'<<<<<<<<<< <<<<<9̰XLRX8L
bf  TX30<<Y @TX@
30/,74+('$<<<<<<<<<<Y TX# /,<<<<Y TX74/,<<<<Y  TX+('$74<<<<<<Y @TX74<<<<Y TX<<Y TX+(3074/,<<<<<<<<Y bcL#a  TX<<Y TX@
<<<<<<<<<<Y TX<<<<Y TX<<<<Y TX<<<<<<Y TX <<<<Y TX <<Y TX<<<<<<<<Y	TX<<Y+('$8<<<<<< <<<<<<<<Y1  4)(/<<<<<<!05<<<<< 1,<<<<<	%$-<<<<<<0335!5!35!3335!5!35!3dddv&&vd&vdpdddv&&vd&vd%NDNdddd%NiddNNDNdddd%NiddN      :         # ' + / 3 7/$0(7,48<<<<<#+ 3'<<<<<<<<<< <<<<<9̰X LRX8 L
bf  TX30<<Y @TX@
30/,74+('$<<<<<<<<<<Y TX# /,<<<<Y TX74/,<<<<Y  TX+('$74<<<<<<Y @TX74<<<<Y TX<<Y TX+(3074/,<<<<<<<<Y bc L#a  TX<<Y TX@
<<<<<<<<<<Y TX<<<<Y TX<<<<Y TX<<<<<<Y TX <<<<Y TX <<Y TX<<<<<<<<Y	TX<<Y+('$8<<<<<< <<<<<<<<Y1  4)(/<<<<<<!05<<<<< 1,<<<<<	%$-<<<<<<0335!5!35!3335!5!35!3dddv&&vd&vdpdddv&&vd&vdXDXddddX_ddXXDXddddX_ddX  n6   ! 53! 54 3 6&;E0&%	s     n6 	   %! 7 5%36'&'33&084%`gUNK7a<=QRlE  n 	 !  ! ! 7! 5%36'6#"#! XN^MW\D&~b_]aW>xN\adUr   n   $ .  %67 5!26! $547&# !&'$! $ce'4'T8N!Vm0w_c-SR@@]wl     o6   ! 3!4!"#! 6"Zn':SE/Os     n6 !   3! 54'#5364##'! 85<'0[%|s}Ns(P
   n 	  &  "673! ! 7! 547&5! 3hf=G=eH6ߴ_c	vK]XKRF.%@    n 	 "  ! ! %!$#"! !663 IW
.<s~\Fy-Cm!   n     ## #! ƤۮȤ{C~fSy   n6   ! 3 5+53$54'!6+<'0ܯ d$Dx<mdc   n   5  %67$5!26 63 #=# ###&!"6!&%$]s=0pdm^ ۭ-z(ɦxC{벻gd?GZ ZyA#v\[   n4 	   &'  ! 5%254!"#! j:%2㞝{?bJql|c   J 	   !"! 7! )!"63 ɨ5+#QOK&DTU   n      # !"#!"# !263 ^>xfnU(}1(!  n6   ! 73! 54'#53$54$53605!s]{ %0߳?C-?rݲyn   n5   % 3! %5'6%5%5!!3`]JVO;2x}ΰ_  n   &  # 5% #! # 5%$!$7 63 }
u|bbIK^(w4    J   ! 3! 54'73 J#+5-J-RkmvIK&|   nj $  3254'##533 !  547
X֒./w@DD\u&IR   2'   ! 3! &#"#&'#53263 '48DB§Kiq.5ThM  n 	 7  ! !  !#"$53;265+5765!"%5!263 F2dڂJ|;o&I+mvyف;͉5pr)Z{    n5   ! 73! '#'235#7E!?дB<mݩN$^    n *  767 5!23 #=! # !&'$x`ىxvS8߱b" K a`TTr@mMpRcE  n4   ! 3! 54736734!"!?5	Dc(Ԕ(
t9   n4  #  &#  ! 5!4#"#54!5 63 s`1	㈲6UKIr]=`|::    J   74#"6#=&#! ĮځUuh=^ub|  p #     325&+53$54$73(r׆̫Z	${Hp,=ceT    n4 	   &# ! ! 5!63zD䦔PpYql>J=RI     I  $  !26! #54#"67 ! 3! 5!"[`%礧	0Iωy:DDUwqR`  n\  #  #3#! 73! # !3'33;#"[?~W#;H 5^g^%"Di5N-6ϥG    J 	   !! 7! 363ˢ9&&UXvn_%N    2 !  %!5 65&%'%7764&#532MPsyPjJ@JKp̊nz(ES8KJ7    n5 &  ! 3! 4+53254'#53254!#53 35!!-ӚmvvQIųyaNGn  x> &   3! 4'#5327&+53654!5 #\0'loM}ҥSg~\VN     n_6 	   $! 27# ! 3"%#',$*۾?.hxx`S^;^O     n4   ! 53! 5+53$#%4%%({[FLxq    nB    ! 53! !#53$#3!2735! -ng!!})掎F`ow     n   %  !$! 5)4! ! %#$! 3#3&29	#㌌bxl!j`?~ʸ   n6 
 ,  4&#  !"'!5 5!"! 5$7 6!| '/ڋ%v'Úk݇lx'Ŀ  z   #  32%$76#"##"6%3$32Bpr.HZd D]]ǩ*H$OH5*N,FhI(2:(jn     d( 0 <   $47'&'#&%'67$%&573265& 5#"6kVorb<FjUe+|tzk:$&ao6XC
ӤfE, f
	\7ިYlg/B8Mu8yzR4]

    d    !!! 7332&$53V[]'#z 8<ݭ~~   d8     3#%3#! 7332&$53Ly[]'#z8<8<ݭ~~    d       ! 7332&$53!!3#%3#[]'#zVy8<ݭ~~%     d    3#! 7332&$53'I[]'#z&8<ݭ~~     d     3#!!! 7332&$53'䙖V[]'#zy8<ݭ~~     dy     3327! 7332&$53(v[]'#zy18<ݭ~~    d    !!! 7332#"#'! VtX!71n7\o  dd    3#! 7332#"#'! mtX!71nde\o     d6     3#!!! 7332#"#'! Y䷖VtX!71n6y\o     dy      3327! 7332#"#'! PvtX!71nyH\o    d      ##"#! !!7VD!#m:     d  d    ##"#! 3#D #m:    d  y    ##"#!  3327pvD #m:   d     # #"#5#"# !263 !!/8WbVV@~Y$3
    d8    $  # #"#5#"# !263 3#%3#/8WbyV@~Y$3
  d(    $ (  # #"#5#"# !263 !!3#%3#/8WbVyV@~Y$3
7%   dd     # #"#5#"# !263 3#/8WbvV@~Y$3
   dy  %  # #"#5#"# !263  3327/8WbvV@~Y$3
     <  $  !!! 73!2&#"#4+'73263 VnG{

RmWPOC06]g[x(2   <8   (  3#%3#! 73!2&#"#4+'73263 tynG{

RmWPOC08R]g[x(2    <<    ,  !!3#%3#! 73!2&#"#4+'73263 VynG{

RmWPOC0%N]g[x(2  <d  $  3#! 73!2&#"#4+'73263 YSnG{

RmWPOC0dd]g[x(2  <y  )   3327! 73!2&#"#4+'73263 FvnG{

RmWPOC0yG]g[x(2   <  '  #'#! 73!2&#"#4+'73263 X$nG{

RmWPOC0x]g[x(2    qu 	    " 654&7.5463!!"32    r(kOA(u nPM/1|I49     /   $ H@& 	!!L%<2<<<1 @	 /<22<2220#"!!#!##53546;#"!5463cM/ѹc'&Phc//яN((hcN  /  J   R@F 
L<2<<1 @ 	 /<220@]#!##53546;#"3#JcM`/яNPhc   /  J  7@F
L<<1 @	 	/<220!#!"!!##53546J cM/ѹ{Phc/яN    /   ) - Z@/F+**	 $	"&L.<2<2<<1 @#$ -* $!/<<2222220#"!547676;#"!#!#!##5354633#c'&W'NcM((hcNU'Phc//яN     /   & N@(F	 !	#L'<2<<1 @ !&!/<<22<2220#"!5463!#!"!!#!##535463c'& cM/ѹ((hcN{Phc//яN    /  L -  54'&+"##535476;2!!;#"'&5#5$%e"c'&WWWU{%&sQQ`ch((((h=яNUVVSN''PO`   o Y  &'&#"#"'&'5327654'&/&'&547632&547672!!;#"'&5#5354'&"QVITFu?;11?æ{|`\alfccaFF2-@LLfpHM\[b^{%&sQQ06DE64?+*'W@%$!+[[#5-,QK(#*$JKNV_]`\L''PO`NA+210@=    K  #5#"&5332654'!"'&5476;#"3!'&5476;#"!32653#5#"&5O	Cuȸ||S[PZwrYYl6	7`;||Cu%!fcf$^SBW{8Kz+) a{fc    :  !&#5#"&5332654/&763!!!327653#5#"&59`M1Cuȸ||MM 7||SWCue,'"xMfca?'GzL_b;fc   V 5  !&#5#"&5332654/&763!>32#4&#"#9`M1Cuȸ||MM 7BuƸ||e,'"xMfca?'Gzed\    V 5 <  !"'&76763!!32653#5#"&5#3!#"&5332765!"3ە^SWsv||CusCuȸ||WVۃ^SBWLa{fcBVfcf__{{    V H  !&#5#"&5332654/&763!6763232653#5#"'&=4&#"#9`M1Cuȸ||MM 7c%Zk>8nClbd||xe,'"xMfca?'Gz2XO{fcx{䟞  [B`&0  N V    332673 &VvaWV`v
ޞKKJL  J [`&D    N  ~`   27676=3#!5!c\@&@exj`Qq<vtoE'    -`    	##4>73>53zK-b[;Iwz?-b\;2Nh`i8^X
dwNji8^XVnZ7   X  `   ##!5!ʺe/я       `    #4.#!5!2%#'>ni+ՅĔ^;kjt@,?]ET`   X  `   !2#!5!2>4.#!Xז\##\(qf==fq(`AiiA*HnuunH*  X     !!3!\\CL$     `    )!2!4.#5Ӄ5W!3WmO`<٧^h=)    X  `   #4.#!5!2Tt7ӂ5m)<     ``   #4.#!#"'53265#5!2
$@pP${5NA&G.Cl,^`Jce:%r3C     -   !5!3!----   X  S&" @     N  S&N @     X  S'X&" @     X  S'X'"L  @   `&  '     u`&  '     `&  '     X  H`'  (   X`'!  )   X  `'  *     `&  +     Y  `'  ,      Y  `'  -z  k&  /     Y`' 0      XV`'  1   X  `'  2   X  'Q  3   X  p&0 5     X  x`'!  7   `&  8     Vd`&q :       `&| ;     X  `'Q  =   V_& >     X  `'  ?   X  S`'9@   `&  A       t'"  ,   X  H' q  (   X  ' A  2     &   ;      X   ,  	##54>7#33>53r`#8!2-A,x#8"2.@,eX5AnEQ`Q2,BL6AnERaQ1, '19   '193  X&4  1 ~X'1 5   '0   '03  X&4  0 c~X&5  0 c '2   '23  X&4  2 c~X&5  2 c '19   '193    &4  1 L  ~&5  1 L '2   &3  2  &4  2 cL  ~&5  2 cL 'L   &3  L  0a&4  L+p  ~a&5  L+p '/x~   \F&6  /x  ?&7  /,~   x&8  /> '2xx   \F&6  2x  ?&7  2,x   x&8  2> (f'1 [   >f'1 }  >\/&  18>>/&  18 (f'. [   >f'.&  8\/&  .88>/&  .8 (f'0 [   >f'0 2  >\/&  08>>/&  08 (f'2 [   >f'2 2  >\/&  28>>/&  28 }R'.+]   }GR'.+   }'. ]   }G'.    }'/ ]   }G'/    }'L]   }G'L  '/ _  ~&  / /&_  L >~/&  L > )     7  %#"'$47332767654'&54767;#"'&/cͷ?Ah#62
#dGG&+@XA:g!axL<I&b\^~B"PA7.EB|=Q#!w*6( %?+)x@          )+'Q     +&(  Q    +&)  Qp     +&*  Qp    )+'1   +&,  1+&-  1E+&.  1E ):'.   :&,  .  :&-  . K  :&.  . K H    +E &  ;#"'#"'$47332767654',25<KG"Yxa\tq/1ZLXOK!eEa`P<@0mB%kc50ep  H'L %   +&8  L +  0a&4  L+p  ~a&5  L+p     " 	 + 6  %>54#"%473303576 !! &5"'&3254&'?TKJ&|tD.^(.E:q!&PET*4pHuJ6>(E&7	kcCryblBc5/iCp4       '/qFl   &  /qF  l&  / K  l&  / K@&q  x6&  x@r'>q  6r'>  @4&q  64&  @&q  /, 6&  /,  J&r  1 '1  X'1 4  ~X&5  1    X   %+53276=3+HZ#c,1VV,1jٻ    ~X   %+53276=3;#"+MZ#c,11,c7nVV,1jj1,  Jr     X&Q  . c~X&R  . c p  n   "56$3=gi~wu      n   52&$=Ԛuw~ig    *  '   /&'&#"#67632O,$e5Fqp[?8WH7
$0GJI       '   327673#"'&'O,$a9Gqp[?8W7
$,KJI     Pt,      l&i  t,   Pu,      i  ,k   ;#"'&=3!1,cK\WL71,\W+    Pv,     Pw,      l'w,  i   Px,      l'x,  i   Py,    l 'y,  i  dz,      l'z,  i   <{,      l&i  {,    UO    '|U    &  | l  9'}U   l  9&  }@'}>q  6&  }> l'~  U   l&  ~   '}>r   &  } XD  &Q  }+p  ~&R  }+p   yU         3;#"'&1,cKPWskj1,\e   '-9   &3  -9X&4  - ~X&5  -  '. p     ^&  .^  '.    &3  .  &4  . cR  ~&5  . cR '/   &3  /  &4  / cR  ~&5  / cR (f'- [   >f&  -\/&  ->/&  - (f[    >f 0  %3#"'&'&'!27# '&5767"#"5$3 "(1{R=IrbJIԖ^`__&m3HZdP^vce4)?6[_w     \/   &'&'&5672+5327676SSgURHKLXJKݣdht^#4b4bBPH:jV     >/ )  ;#"'&'+53276767&'&'&5672~AI2hrBV~(;E)Kݣdht^eSgURHK4b)N"w6a.%PH:jV#   ('-?[   >&  -?  \L&  -  >L&  - }R]    }GR    &'3;#"'#"'532767654"9aRQS,cKa].-fgsT!"#?zNuIS,!&*	1p*D }'-E]   }G&  -Eb&_   ~&   3;#"'!5 767654x
I*eK2D0#
&pgM,>ꅗ:H~b'-q _  ~&  -q  	a    
G F  %7653323;#"'#"'&''&'#&'$473327676'&/3N0%@nS,cKvDm% I01_@8'TPxmil_Qb_y^@@$:|_2&aS,`[	F{<k>GHܳ&%0l}=J<~    
 1  %+53276=3327653763#"'&'#"'&+8LcKc,P,+hm,%@n\Kf%#?70`DAbH<;!.,Pd@dczg2&q\	=!1( 7 8  #"'&'#"'&'+53276=3327653763;#"'%#?70`DAbH<)+8LcKc,P,+hm,%@nS,cKvD	=!1(I;!.,Pd@dczg2&aS,`Z 	'/ a   
G&  / 
&  / 7&  /  	c    	 < I  )"'&5#&'$47332767654'367676;#"/"3276'&'&u&4-JXPxmil_Qf[+!'
(s{lHX}a*=RKgL~큻%MGHܳ&%Dl7(2l^F"%GMF,\v7Ql?[F    2  .  327654'&#"!"'&'+53276=36767632Ш큺%0LJNA'fKc,P-e_KUskl?[F*#=,PdrNP2T?!'Dmx     + 8  )"'&'+53276=36767632;#"/327654'&#"JNA'fKc,P-e_KUqm*=RKg਑큺%0L*#=,PdrNP2T?!'DKH,\vl?[F   	'- c   	&  -   2&  -   &  -    e        )  )5!3%632;#"/%3276'&'&#"@o\Dui*=RKg큻%0Pz\?c!'EMF,\v?]DQx          %3276'&'&#")5!3%6329큻%0Pzu\Duiʸ?]DQx\?c!'Emx       )  )5!3%632;#"/%3276'&'&#"8\Dui*=RKg큻%0Pz\?c!'EMF,\v?]DQx      '-Re     &  -R  &  -R  &  -R u*g    u % +  ! '&7.54762;# '!2764"[b=D}a_[9^DU)k_1ocz2t*n@00@p[C+ @Mkl=v8`3$   *   727&'&5763"327%+5<K4X}ں>SF7J \X];d}M4F!Ť      $ /  %+532767&'&5476762;#""654'v`kB;(aDhYYhMXD=p`vʨ4/gg/($'UZ'-)74--47)-'bM,(U __    uF'-wg   uL&  -  F&  -w  L&  - '-~   \L&6  -  ?&7  -~   ~&8  - kH'.R~   k&9  .k  ?&:  .,~   ~&;  .8 l     ! D  #"'5327654'&'&7676'&'$54733276763;#"'J&PDfXRNB8D-<9<NJ KUmeyYbL1,cKqoR!
Xn*'X
&/.Q&+pXK5:,\.#/^Ikj1,{~        )5!27654'&5476766-62
hGf>_h$$EB|=Q#!v+6( %{{qe      )  )5!27654'&54767;#"'&/66-62
hGG&+@XA:g!a_h$$EB|=Q#!v+6( %?+)x.    m    # $  %653;#"'#"'$&733276N1,cKpNyUcE@A(IPmI~jkj1,3.(B"[\ss~B"5        +5327653WPKc,1se\,1j        %+5327653;#"SMKc,11,cKVV,1jkj1,    ^n    gt  5  %327654'&'&#"#"'&#4763&547632;#"bzL,5;(.;DK2KxAZM\HT((&iK*9:XDD(PNNOmf7*(?$GC,,    m  $  %#"'+5326767632%327654'&#"dan@ht4W^Q[a>/4(*X.[4fb0G1P8TYNE5EK&)<a% m  /  %#"'+53276767632;#"%327654'&'&#"dan@ht4,+^]HB3$kK>/4:''5)24fb0$#1P8S1>,E5EX!a%   H'-?    +&8  -?&  '- R4    ~'- R5   p      ^ 
 $  &'&'&'3;#"'&'#"'&5476xRot$8pKZI-&8:m*12eCY>)2'+eO,3;I0D   - =  67654'&#"27&'&5476&'5#"'+5327654'&$"':A4N--0M,Q @(Jxb41}!@H=.%4-+#%viEN@TSZ	'D49g=ql)D%'i.C!<NE    
 $ /  %327654#"7632!!#"'&#53254'&#S*`rTKJ&	lE.X.El	g&JKTr`*LZ4pHu
~kcCrollorCckuHp4ZL @q   6  ,  %4'&'&3#'!5 767&'&'&'&7676.<<C@/sFSii>v-3j

;AWEL9P)8K6(S/VL_+Y9K1\S Jr     7  65&'&'&54767632;#"'&#"#"'$4733276L[/,4PT*uW ##rpl$-AIqYhu?AB[M!3!+(;=A<^ĸ#0{bV`)gZZrN   J'.r   '.  X&Q  . c~X&R  . c.&  |,.&  |,&  },&  }, &  ~   &  ~    T   #"'53273676537M͞jK`Uq%BUG  FA+7     T   #"'5327367653;#"'&4;IʡjK`Uq%"@Pif<[A  FA+7DT)    TL   *  	35'5467676?67654&#">32,X\"$߸g^aOl39ZZ8L{4<+VZ@EL89CFnY1^5YVe    d  
  73!!d00#N@
|      	  $  327654&#632!"'327654&#|4w=Ưވdudo^,~#r;BYWa{zzp4=8h     d   		kxww           33 !7>'.'Z
'8ZA
xzebcz\
       #%%|  6uSXSX       	  #%| *uSX       !#3!53#Xմm    8     !!!!!p+E$#         #    $&6$ 6 7!! ! !& zzz : zSN{{ : {{0     |   3#ȴ+      
  !#3	|x.xq={C          	#3|M3 M     
   3		#t8/.R9/S.L    w   3		#t8R9SL           !!!!!!!|p,Dܴ$E+!$$o$        '   64."26  $&6$ "&462^^ޟ^^zzz : zRtRRtRߞ__ߞ__X{{ : {{RRtRR          $54$!"#63  (57~bYfԶ      *   33	3#	ȴ^+_C           4."2>#&'.4>2fH}}HH}}zf@HGAhxyy|HH|}HHL;%w%<yy       D    ##63 7654'&#"lv~l	r+.N$\osrlX      	  		^c^L^^  d     %#%782"8          #34ȴ\     	7			'QEEmnb_b]Xbdb         $  !#5&'&76753676'&`KmmK`KmmKǢ90Ll2lKHLnnL  d     !#73~       %   4&"2$ &767&'&6 4&"2{{{/r/77/rBr/77/r{{{ {{{1Bs/.rCs/.rî{{{     
   3632!2654&#"Ȅ 洢*0gNvc   
   3 #"'032654&ȴW󁄴0*gнcv  d     5!3#d+  d      	#7	 "&462ШRtRRtRN@&RRtRR      |    d   73	d00#N@&       d  '   	#dz۴,;X          !5!5!)5!S2SR    ='b  C   ]   7'   Xc  F   :
'   bb  :   ;
'c  <   b   =
'   ]   b     H'b  &b  'b  b      H'b  'b  'b   c     H'    'b  'b  b        H'b  &b  'b   c     H'c  'b  'b   c     H'c  'b   'b           H&b  &  'b  b        H&c  &  'b  b        H'    'b   'b       H'c   'b  &b  b     H'c   'b  'b  c     H'    'b  'b  c        H&b  'c  'c   b     H&c  'b  'c   c     H'    'c  'c   b       H&  'b  'c   b       H&  &c  'b  c        H&  'b  'c          H'    'b  &b  b     H&c  'b  'b         H'    '    'b  b       H'c  'b  &b         H'    &c  'b  c     H'    '    'b  c       H'    'b  &  b       H'    'b  &  c       H'    &  'b         H'c  'b   'b  b     H'c  &c  'b   b     H'c  'b   'b           H'c  'c  'b   b     H'c  &c  'b   c     H'c  '    'b   c       H'c  'b   &  b       H'c  'b   &  c       H'c  &  'b          H'c  &b  'b  c      H'c  &c  'b  c      H'c  'c   'b           H'c  'c   'c  b     H'c  'c  'c   c     H'c  'c   'c           H'c  &b  'c          H'c  'c   &c         H'c  '    'c        H'c  &b  'b         H'c  '    'b  c     H'c  'b  '             H'c  '    &b  c     H'c  'c  &c         H'c  'c  '             H'c  &b  &           H'c  &c  &           H'c  '    &         H'   &b  'b  b      H'   'b  'b   c     H'   '    'b  b        H'   &b  'b   c     H'   'c  'b   c     H'   'c  'b            H'   &b  &  b        H'   &c  &  b        H'   '    'b        H'   'c   'b  b     H'   'c   'b  c     H'   '    'b  c        H'   &b  'c  c      H'   &c  'c   c     H'   '    'c  c        H'   &  'c   b       H'   &  &c  c        H'   &  'c          H'   '    'b  b     H'   &c  'b         H'   '    '    b       H'   'c  &b         H'   '    &c  c     H'   '    '    c       H'   '    &  b       H'   '    &  c       H'   '    &               #3	!!#!]W:\w98qq+_      N      % *  !2#!327&#363&#!3654/654'f;33;$  $#>]a{wDD66    3      !   )327&#!36'hPcp~qAAk{q       S    3%!!!!!!-x9vqdddsd      	   !!!!!#3#oQn.ddq     s  &  &$#"32767!5!#   !2deVRuu^oRaG@;@&5dSUmnHFcI     f      3%!#3!53#.nXddddqdddd  fY    6765%!#!53265-V?O?nqd
J^	dd     0 
   !3	#!3pdw@1q    2  	  !!!3ddo      o     !#!!	!3!3_Gbn}qR+q     r    ' (   ! '&76 7& 676'&&:żGlllli$  #ab2222jT%%5$c$       -  6&/.4%&  %5 64&/.$ Pdo&nŢmngzoʷ-[ʚ)'NXd''pui$2Xf| /        3%!!!!rpqddq          $!&%! 65!   X!!Y fqba@`|gd5\*$      
  3%!	3!dqd+   D       	3!3%!	!	3!	!D5D:9:9d|qd+   l      	3%!	3	!	#(\~vbL:H|dqd22{         	3!!	#3ndp29V  {{  " , 3  4&'3!5#"&546;54&#"5>3 5#">76/=Kd?Vu`Tw86/^b;:gCzӆ]YfaH..t''UNHGgwt        -  !>32 #"&'!4'&'676763&#"327N:| |:^,<<,9RKM_]daadt= z =OsKTdihtJ   q{  #  %#"  !2&'&#"3276%M]-ULEmGJXHCQRHV,${z$d$$>:##dWS%&       -  !!5#" 323327654'&'&#"N:| |v9,<<,^(]_MK^daDDaZKsO=  =Td6Jthi  o}{     !327#   32 !.#"}K_mk)#i̩J@b]u-)8
CqzӾ    /   
    3476%#"!!!#5354763g.9:9|WX
-8J_D8d97ddddTV   qV{  # . =  65326=#" 325! !"&32767654'&#"jlQR:| |:Nry^,<<,9/KM_]=ʌo,*qdaDDad-w=  =OsKihtJ     H 
  "  34'&3'!>32!4&#"! 	GS5OIƁkkh@[:Lded\ПU    5     33#!!JKOh    V     #676#532765!3#%G(=1l$%OQRaеT0Hd01``      2 
   !3	#!3OHіmdi#L        &5#"'&5!3J=(G%RQOLiH0T0Z``~J^d      { " & 1 <  !>32>32!4&#"!4&#"!3%34'&%34'&OIƁԝTށkkkkd[	GS5	GS5`edJv\П\ПUhh@[:h@[:      H{ 
  "  34'&%3'!>32!4&#"! 	GS5OIƁkkh@[:hded\ПU    qu{    #  2  #"  27&"676'&s3x33x3d4'pp'3(pp({98kp-$-R-ۀ-     qV{    -  %!!>32 #"&4'&'&'676#&#"32N:| |9,<<,^؆]_MKdaaKsO= z =oHJthi   qV{    -  %#" 325!!3#32767654'&#":| |:N<^,<<,9(KM_]daDDad=  =OsK2HHihtJ      {    3'!>32.#"!N:4I,hdfc˾z  o{  E  67654'&/&'&5432654&/.54632.#"#"&'i'K&'q4=B%%U+.39GSOjqL4vfLJ\_opPx3Zl=vf03"3;@{R?Bsl37'*7CoT78^UNO,, z1$YXDL#/%%  7      %&7#!!;!"&5#53*\{KsբjU|7N(dUNdudT   D` 
  "  %&'&5##!5#"&5!3265!	GS5CIƁTkkTShl[:hded0     =  `  
  3%!	3!YT^^d\hdT   V  `     3!3%!!3!!bTNdhhdjjj     L  `    	3%!	3	!	#U|p|[hd-s    =V`    7%!	3+53267>^]_lP|XQ+ۙdi8{dCY   X  b`    	3%!!!5!\vwhddhdd      h $      %   s' &      '      (     # )   s *     ; +       f -     j .     j /      0     3 1   s 2      3   s 4     T 5    6     7   ) 8     h 9   D   :   =  ; ;     <   \   =   {-{ D    E   q{ F   qZ G   q{ H   /   I   qVZ{ J     d K     y L  Vy M      N     9u     { P     d{ Q   qu{ R   V{ S   qVZ{ T     J{ U   o{ V   7   W   X{ X   =  ` Y   V  5` Z   ;  y` [   =V` \   X  ` ]                6/&"27

d3{44{3ss#Տ0,-  k      37!!5!5%6bJJgqdddHdH         (  7!676'&'$32!!76 76&#" )`"LlDbZE0Q](=ymd͕@9\9pd9hbiddAb     s $ * 0  "'5327&+5327&#"56325654&'>54+!ĪeO6?;2:LuWEdJjD
d 
<h@Ѳ|!ŐUl$yX     Z       #3	!!3#!!5Qpq3d\         #66'&#"!!!"'532gd1jKEн܁\`I
Kd#	F<d   q  	  %  %6'27&"2'& 632  #   |&d:-(?"^BhPpc\ʳ#2"<j6-f/   A    
  	3%!!!Sqddq       $ ) 1 9 A  %6'&' 5.54$  $54627&"27&"676'&X_!,, L 51p11p10r00r, `_!dJN'M г #ŏُlfNa0!MM  j  	  %  6/&"27"'5 7#"  3   d:-(?"*^Bh!cc\6oݕ2t<j6-s%[       Z      J    s    d      d          h              yU   V   (fZ   }R]  @q  b`   (f[     e   Js   l   m   ^n   Ho   	a   u*g   j   	c   kHk  b&_   	b    X   Y   (\   }^   	d     f   uFh      H      kH  X&H  -/&  -q S  - =  67654'&#"27&'&5476&'5#"'#!5327654'&*$"':A4N--0M,Q;(JxAb41~!@H=.%4-+#%viEN@TSZ	'C49g=ql)D%'r.C!<NE    /   &'&'&5672+5327676SgURHKLXJKݣht^#4b4bBPH:jV  X'.]H        )5!27654'&5476700.62
hGf>_h$$EB|=Q&v+6( %z|qe        #!5!27653WPEc,1se\,1j <m  %  %#"'#!5!26767632%327654'&#"an@h
4W^Q[a>/4(*X-.*4fb0G1P8TYNE5EK&)d%     &H  -R n 1  %+53276=3327653763#"'&'#"'&+8Lcc,P,+hm,%@n\Kf%#?70`DAbH<;!.,Pd@dczg2&q\	=!1(  *    ?'-~7       .  327654'&#"!"'&'+53276=367676324큺%0LJNA'fc,P-e_KUskl?[F*#=,PdrNP2T?!'Dmx   ?  n&  /   &H  .]R  '/]RH    L&  -q  '-?     F   '-4   '-}"    - ' 7 G  3;27&'&5476&'5#"'+"'&327654'&67654'&#"1,c4N--0M,Q @(JxPWFb41}!$"':Askj1,iEN@TSZ	'D49g=ql)\e;%'i.C!<NE@H=.%4-+#%v     (  3;276767&'&'&5672+"'&1,cht^eSgURHKLXJKݣښPWskj1,H:jV##4b4bBP\e    D  (  %3276'&'&#"%33!3%632)"'&큻%0Sw1,c.\Dui\PW?]DQxkj1,\?c!'Emx\e   '.i4      ? )  33!27654'&54767#!"'&1,cY.62
hGf>_\PWskj1,h$$EB|=Q&v+6( %z|qe\e       /  %327654'&#"#"'+"'&53;26767632>/4(*X-.*an@hPW1,c4W^Q[aE5EK&)d%fb0\ekj1,G1P8TY      '-R4    z ;  3;276=3327653763#"'&'#"'&'+"'&1,cnc,P,+hm,%@n\Kf%#?70`DAbH<)+8LcܚPWskj1,,Pd@dczg2&q\	=!1(I;!.\e     h $  3;27&'&5763"327%+"'&1,csK4X}ں>SF7J \PWskj1,];d}M4F!Ť\e      '-~5       + 8  3;276=36767632)"'&'+"'&327654'&#"1,cnc,P-e_KUskJNA'fܚPW큺%0Lskj1,,PdrNP2T?!'Dmx*#=\e%l?[F     '.~5   z'/ (     '.iR4     '/iR4     '-}"     '-K +     D'-7R#     h'-)         %#!"'&53;276=31HPW1,cc,1VV\ekj1,,1jٻ       * :  33!276767'&54767632#!"'&654'&321,cTO<?aNbNLZB`.NJ|mePW)B,4((7(*Hskj1,]027EW-3E$2Hf3Џ,'\eX+M;3*)3P&    F
!;    3#!.	Y_$     F
!;     7!'!%3	YٍF%=     F
!;    "  4767632"'&'&!'!%30&$I	Yٍ$$%%=    F
!;  , 0 4 8  "'&'&4767632"'&'&4767632!'!%3$$%$%$	Yٍ?H%$HG%=   F
!;  + A E I M  "'&'&4767632"'&'&476762"'&'&4767632!'!%3$$%$H$%$	Yٍ?H%$	JHHG%=    F
!;  + A W [ _ c  476762#"'&'& 4767632"'&'$476762#"'&'4767632"'&'&!'!%3'H$%$%HH$%$%H	Yٍ$JJ%$J%$S$J%=      F
!;  + A W n r v z  476762#"'&'& 4767632"'&'$476762#"'&'4767632"'&'&4767632"'&'&!'!%3'H$%$%HH$%$%H&$I	Yٍ$JJ%$J%$S$J$$%%=  	  F
!;  * @ U i      "'&'&476762"'&'&5476762 "'&'&4767632 "'&'&'476762"'&'.76762 "'&'&54767632!'!%3$H%$HJ&$UJHJH~J&$	YٍRHJ%$HG$$%$HGH%$H%=     F
!;    !  476762"'&'&!'!%3JH	Yٍ$$%%=      F
!;  , 0 4 8  476762"'&'&%4767632"'&'&!'!%3JHd&$I	Yٍ$$%%$$%%=    F
!;  , B F J N  476762"'&'&"'&'&4767632"'&'&4767632!'!%3JH$$%$%$	Yٍ$$%H%$HG%=      F
!;  , A W [ _ c  476762"'&'&"'&'&4767632"'&'&476762"'&'&4767632!'!%3JH$$%$H$%$	Yٍ$$%H%$	JHHG%=   F
!;  + A W m q u y  476762"'&'&476762#"'&'& 4767632"'&'$476762#"'&'4767632"'&'&!'!%3JH]H$%$%HH$%$%H	Yٍ$$%.$JJ%$J%$S$J%=   	  F
!;  + A W m      476762"'&'&476762#"'&'& 4767632"'&'$476762#"'&'4767632"'&'&4767632"'&'&!'!%3JH]H$%$%HH$%$%H&$I	Yٍ$$%.$JJ%$J%$S$J$$%%= 
  F
!;  * @ V k       476762"'&'&%"'&'&476762"'&'&5476762 "'&'&4767632 "'&'&'476762"'&'.76762 "'&'&54767632!'!%3JH$H%$HJ&$UJHJH~J&$	Yٍ$$%HJ%$HG$$%$HGH%$H%=     F
!;  + / 3 7   "'&'&4767632"'&'&5476762!'!%3rJ%$$Jm	Yٍ@H$%$%H%=      F
!;    " 8 N  4767632"'&'&!'!%3"'&'&4767632"'&'&54767620&$I	YٍJ%$$J$$%%=H$%$%H    F
!;  , 0 4 8 N d  "'&'&4767632"'&'&4767632!'!%3"'&'&4767632"'&'&5476762$$%$%$	YٍJ%$$J?H%$HG%=H$%$%H   F
!;  + A E I M c y  "'&'&4767632"'&'&476762"'&'&4767632!'!%3"'&'&4767632"'&'&5476762$$%$H$%$	YٍJ%$$J?H%$	JHHG%=H$%$%H  	  F
!;  ) > S W [ _ t   476762"'&'& 476762"'&'$476762"'&'476762"'&'&!'!%3"'&'&4767632"'&'&476762'HIIHHIIH	YٍI%$$I$II%$I%$S$I%=HIIH    
  F
!;  + A W n r v z    476762#"'&'& 4767632"'&'$476762#"'&'4767632"'&'&4767632"'&'&!'!%3"'&'&4767632"'&'&5476762'H$%$%HH$%$%H&$I	YٍJ%$$J$JJ%$J%$S$J$$%%=H$%$%H    F
!;  * @ U i        "'&'&476762"'&'&5476762 "'&'&4767632 "'&'&'476762"'&'.76762 "'&'&54767632!'!%3"'&'&4767632"'&'&5476762$H%$HJ&$UJHJH~J&$	YٍJ%$$JRHJ%$HG$$%$HGH%$H%=H$%$%H     F
!;  + A E I M   "'&'&4767632%"'&'&4767632"'&'&5476762!'!%3rJ%$$$%$Jm	Yٍ@H$%JI	$%H%=      F
!;  + A X \ ` d   "'&'&4767632%"'&'&4767632"'&'&54767624767632"'&'&!'!%3rJ%$$$%$J&$I	Yٍ@H$%JI	$%H$$%%=    F
!;  + A X n r v z   "'&'&4767632%"'&'&4767632"'&'&5476762"'&'&4767632"'&'&4767632!'!%3rJ%$$$%$JV$$%$%$	Yٍ@H$%JI	$%HH%$HG%=    	  F
!;  + A X m       "'&'&4767632%"'&'&4767632"'&'&5476762"'&'&4767632"'&'&476762"'&'&4767632!'!%3rJ%$$$%$JV$$%$H$%$	Yٍ@H$%JI	$%HH%$	JHHG%= 
  F
!;  + A W m        "'&'&4767632%"'&'&4767632"'&'&5476762%476762#"'&'& 4767632"'&'$476762#"'&'4767632"'&'&!'!%3rJ%$$$%$JH$%$%HH$%$%H	Yٍ@H$%JI	$%Hz$JJ%$J%$S$J%=      F
!;  + A W m         "'&'&4767632%"'&'&4767632"'&'&5476762%476762#"'&'& 4767632"'&'$476762#"'&'4767632"'&'&4767632"'&'&!'!%3rJ%$$$%$JH$%$%HH$%$%H&$I	Yٍ@H$%JI	$%Hz$JJ%$J%$S$J$$%%=    F
!;  + A V l          "'&'&4767632%"'&'&4767632"'&'&5476762!"'&'&476762"'&'&5476762 "'&'&4767632 "'&'&'476762"'&'.76762 "'&'&54767632!'!%3rJ%$$$%$JI$H%$HJ&$UJHJH~J&$	Yٍ@H$%JI	$%HHJ%$HG$$%$HGH%$H%=      F
!;  ) > S W [ _  476762"'&'& 476762"'&'$476762"'&'476762"'&'&!'!%3HIIHHIIH	Yٍ$II%$I%$S$I%=      F
!;    ! 6 K ` u  4767632"'&'&!'!%3476762"'&'& 476762"'&'$476762"'&'476762"'&'&0&$I	YٍHIIHHIIH$I%=m$II%$I%$S$I   	  F
!;  , 0 4 8 N d z   "'&'&4767632"'&'&4767632!'!%3476762#"'&'& 4767632"'&'$476762#"'&'4767632"'&'&$$%$%$	YٍH$%$%HH$%$%H?H%$HG%=m$JJ%$J%$S$J    
  F
!;  + A E I M c y    "'&'&4767632"'&'&476762"'&'&4767632!'!%3476762#"'&'& 4767632"'&'$476762#"'&'4767632"'&'&$$%$H$%$	YٍH$%$%HH$%$%H?H%$	JHHG%=m$JJ%$J%$S$J   F
!;  + A W [ _ c y     476762#"'&'& 4767632"'&'$476762#"'&'4767632"'&'&!'!%3476762#"'&'& 4767632"'&'$476762#"'&'4767632"'&'&'H$%$%HH$%$%H	YٍH$%$%HH$%$%H$JJ%$J%$S$J%=m$JJ%$J%$S$J     F
!;  + A W n r v z      476762#"'&'& 4767632"'&'$476762#"'&'4767632"'&'&4767632"'&'&!'!%3476762#"'&'& 4767632"'&'$476762#"'&'4767632"'&'&'H$%$%HH$%$%H&$I	YٍH$%$%HH$%$%H$JJ%$J%$S$J$$%%=m$JJ%$J%$S$J   F
!;  * @ U i          "'&'&476762"'&'&5476762 "'&'&4767632 "'&'&'476762"'&'.76762 "'&'&54767632!'!%3476762#"'&'& 4767632"'&'$476762#"'&'4767632"'&'&$H%$HJ&$UJHJH~J&$	YٍH$%$%HH$%$%HRHJ%$HG$$%$HGH%$H%=m$JJ%$J%$S$J    F
!;    ! 7 M c y  7!'!%3476762#"'&'& 4767632"'&'$476762#"'&'4767632"'&'&476762"'&'&	YٍH$%$%HH$%$%HJHF%=m$JJ%$J%$S$J$$%  	  F
!;    " 8 N d z   4767632"'&'&!'!%3476762#"'&'& 4767632"'&'$476762#"'&'4767632"'&'&476762"'&'&0&$I	YٍH$%$%HH$%$%HJH$$%%=m$JJ%$J%$S$J$$% 
  F
!;  , 0 4 8 N d z    "'&'&4767632"'&'&4767632!'!%3476762#"'&'& 4767632"'&'$476762#"'&'4767632"'&'&476762"'&'&$$%$%$	YٍH$%$%HH$%$%HJH?H%$HG%=m$JJ%$J%$S$J$$%      F
!;  + A E I M c y     "'&'&4767632"'&'&476762"'&'&4767632!'!%3476762#"'&'& 4767632"'&'$476762#"'&'4767632"'&'&476762"'&'&$$%$H$%$	YٍH$%$%HH$%$%HJH?H%$	JHHG%=m$JJ%$J%$S$J$$%   F
!;  + A W [ _ c y      476762#"'&'& 4767632"'&'$476762#"'&'4767632"'&'&!'!%3476762#"'&'& 4767632"'&'$476762#"'&'4767632"'&'&476762"'&'&'H$%$%HH$%$%H	YٍH$%$%HH$%$%HJH$JJ%$J%$S$J%=m$JJ%$J%$S$J$$%     F
!;  + A W n r v z       476762#"'&'& 4767632"'&'$476762#"'&'4767632"'&'&4767632"'&'&!'!%3476762#"'&'& 4767632"'&'$476762#"'&'4767632"'&'&476762"'&'&'H$%$%HH$%$%H&$I	YٍH$%$%HH$%$%HJH$JJ%$J%$S$J$$%%=m$JJ%$J%$S$J$$%   F
!;  * @ U i           "'&'&476762"'&'&5476762 "'&'&4767632 "'&'&'476762"'&'.76762 "'&'&54767632!'!%3476762#"'&'& 4767632"'&'$476762#"'&'4767632"'&'&476762"'&'&$H%$HJ&$UJHJH~J&$	YٍH$%$%HH$%$%HJHRHJ%$HG$$%$HGH%$H%=m$JJ%$J%$S$J$$%  	  F
!;    " : P f |   7!'!%3"'&'&54767632"'&'&54767632 "'&'&4767632"'&'&'476762"'&'.76762 "'&'&54767632	Yٍ$$%%$$%J%$0$H%$HJ%$F%=%$J&$$%H$%$%HH$%$%H 
  F
!;    " 9 Q g }    4767632"'&'&!'!%3"'&'&54767632"'&'&54767632 "'&'&4767632"'&'&'476762"'&'.76762 "'&'&547676320&$I	Yٍ$$%%$$%J%$0$H%$HJ%$$$%%=%$J&$$%H$%$%HH$%$%H      F
!;  , 0 4 8 O g }     "'&'&4767632"'&'&4767632!'!%3"'&'&54767632"'&'&54767632 "'&'&4767632"'&'&'476762"'&'.76762 "'&'&54767632$$%$%$	Yٍ$$%%$$%J%$0$H%$HJ%$?H%$HG%=%$J&$$%H$%$%HH$%$%H     F
!;  + A E I M d |      "'&'&4767632"'&'&476762"'&'&4767632!'!%3"'&'&54767632"'&'&54767632 "'&'&4767632"'&'&'476762"'&'.76762 "'&'&54767632$$%$H$%$	Yٍ$$%%$$%J%$0$H%$HJ%$?H%$	JHHG%=%$J&$$%H$%$%HH$%$%H      F
!;  + A W [ _ c z       476762#"'&'& 4767632"'&'$476762#"'&'4767632"'&'&!'!%3"'&'&54767632"'&'&54767632 "'&'&4767632"'&'&'476762"'&'.76762 "'&'&54767632'H$%$%HH$%$%H	Yٍ$$%%$$%J%$0$H%$HJ%$$JJ%$J%$S$J%=%$J&$$%H$%$%HH$%$%H    F
!;  + A W n r v z       476762#"'&'& 4767632"'&'$476762#"'&'4767632"'&'&4767632"'&'&!'!%3"'&'&54767632"'&'&54767632 "'&'&4767632"'&'&'476762"'&'.76762 "'&'&54767632'H$%$%HH$%$%H&$I	Yٍ$$%%$$%J%$0$H%$HJ%$$JJ%$J%$S$J$$%%=%$J&$$%H$%$%HH$%$%H      F
!;  * @ U i           "'&'&476762"'&'&5476762 "'&'&4767632 "'&'&'476762"'&'.76762 "'&'&54767632!'!%3"'&'&5476762"'&'&5476762 "'&'&4767632"'&'.76762"'&'.76762 "'&'&4767632$H%$HI&$UIHIH}I&$	Yٍ$I%$II%$0$H%$HI%$RHI%$HG$$%$HGH%$H%=%$I&$IHIIHHIIH    m    !5!!$f    m     !!7!!!!%=m?'   m    "  2#"'&'&47676!!7!!!!E$$%%=&$Ih?'   m  + / 3 7  476762#"'&'&476762"'&'&!!7!!!!H%$HG%=|$I;$%$?'     m  + A E I M  476762#"'&'&476762"'&'&476762"'&'&!!7!!!!H%$	JHHG%=|$$%2$H.$%$?'    m  + A W [ _ c  2"'&'&547676 2#"'&'&47672#"'&'&547672"'&'&47676!!7!!!!N$JJ%$J%$S$J%=H$%$%H"H$%$%Hq?'     m  + A W n r v z  2"'&'&547676 2#"'&'&47672#"'&'&547672"'&'&476762#"'&'&47676!!7!!!!N$JJ%$J%$S$J$$%%=H$%$%H"H$%$%H	&$Ih?'  	 m  * @ U i      %476762"'&'&%4767632"'&'&476762"'&' 4767672"'&'$4767>"'&' 4767632'&'!!7!!!!HJ%$HG$$%$HGH%$H%=$H%$H3J&$JHJHJ&$?'     m    !  2#"'&'&47676!!7!!!!E$$%%=kJH?'     m  , 0 4 8  2#"'&'&476762#"'&'&47676!!7!!!!E$$%%$$%%=iJH&$Ih?'   m  , B F J N  2#"'&'&47676476762#"'&'&476762"'&'&!!7!!!!E$$%H%$HG%=kJH$$%;$%$?'     m  , A W [ _ c  2#"'&'&47676476762#"'&'&476762"'&'&476762"'&'&!!7!!!!E$$%H%$	JHHG%=kJH$$%2$H.$%$?'  m  + A W m q u y  2#"'&'&476762"'&'&547676 2#"'&'&47672#"'&'&547672"'&'&47676!!7!!!!E$$%.$JJ%$J%$S$J%=kJHH$%$%H"H$%$%Hq?'   	 m  + A W m      2#"'&'&476762"'&'&547676 2#"'&'&47672#"'&'&547672"'&'&476762#"'&'&47676!!7!!!!E$$%.$JJ%$J%$S$J$$%%=kJHH$%$%H"H$%$%H	&$Ih?' 
 m  * @ V k       2#"'&'&47676476762"'&'&%4767632"'&'&476762"'&' 4767672"'&'$4767>"'&' 4767632'&'!!7!!!!E$$%HJ%$HG$$%$HGH%$H%=kJH&$H%$H3J&$JHJHJ&$?'    m  + / 3 7   476762#"'&'4767632"'&'&!!7!!!!H$%$%H%=J%$S$J?'     m    " 8 N  2#"'&'&47676!!7!!!!476762#"'&'4767632"'&'&E$$%%=H$%$%H&$Ih?'IJ%$S$J   m  , 0 4 8 N d  476762#"'&'&476762"'&'&!!7!!!!476762#"'&'4767632"'&'&H%$HG%=H$%$%H|$$%;$%$?'IJ%$S$J   m  + A E I M c y  476762#"'&'&476762"'&'&476762"'&'&!!7!!!!476762#"'&'4767632"'&'&H%$	JHHG%=H$%$%H|$$%2$H.$%$?'IJ%$S$J   	 m  + A W [ _ c y   2"'&'&547676 2#"'&'&47672#"'&'&547672"'&'&47676!!7!!!!476762#"'&'4767632"'&'&N$JJ%$J%$S$J%=H$%$%HH$%$%H"H$%$%Hq?'IJ%$S$J    
 m  + A W n r v z    2"'&'&547676 2#"'&'&47672#"'&'&547672"'&'&476762#"'&'&47676!!7!!!!476762#"'&'4767632"'&'&N$JJ%$J%$S$J$$%%=H$%$%HH$%$%H"H$%$%H	&$Ih?'IJ%$S$J   m  * @ U i        %476762"'&'&%4767632"'&'&476762"'&' 4767672"'&'$4767>"'&' 4767632'&'!!7!!!!476762#"'&'4767632"'&'&HJ%$HG$$%$HGH%$H%=H$%$%H$H%$H3J&$JHJHJ&$?'IJ%$S$J     m  + A E I M   476762#"'&'476762"'&'&4767632"'&'&!!7!!!!H$%JI	$%H%=J%$J$$%.$J?'     m  + A X \ ` d   476762#"'&'476762"'&'&4767632"'&'&2#"'&'&47676!!7!!!!H$%JI	$%H$$%%=J%$J$$%.$J+&$Ih?'   m  + A X n r v z   476762#"'&'476762"'&'&4767632"'&'&476762#"'&'&476762"'&'&!!7!!!!H$%JI	$%HH%$HG%=J%$J$$%.$J$$%;$%$?'    	 m  + A X m       476762#"'&'476762"'&'&4767632"'&'&476762#"'&'&476762"'&'&476762"'&'&!!7!!!!H$%JI	$%HH%$	JHHG%=J%$J$$%.$J$$%2$H.$%$?' 
 m  + A W m        476762#"'&'476762"'&'&4767632"'&'&2"'&'&547676 2#"'&'&47672#"'&'&547672"'&'&47676!!7!!!!H$%JI	$%Hz$JJ%$J%$S$J%=J%$J$$%.$J4H$%$%H"H$%$%Hq?'     m  + A W m         476762#"'&'476762"'&'&4767632"'&'&2"'&'&547676 2#"'&'&47672#"'&'&547672"'&'&476762#"'&'&47676!!7!!!!H$%JI	$%Hz$JJ%$J%$S$J$$%%=J%$J$$%.$J4H$%$%H"H$%$%H	&$Ih?'   m  + A V l          476762#"'&'476762"'&'&4767632"'&'&476762"'&'&%4767632"'&'&476762"'&' 4767672"'&'$4767>"'&' 4767632'&'!!7!!!!H$%JI	$%HHJ%$HG$$%$HGH%$H%=J%$J$$%.$J$H%$H3J&$JHJHJ&$?'     m  ) > S W [ _  2"'&'&47676 2#"'&'&47672#"'&'&47672"'&'&47676!!7!!!!N$II%$I%$S$I%=tHIIH"HIIH?'     m    ! 6 K ` u  2"'&'&47676!!7!!!!2"'&'&47676 2#"'&'&47672#"'&'&47672"'&'&47676E$I%=m$II%$I%$S$I&$Ih?'HIIH"HIIH   	 m  , 0 4 8 N d z   476762#"'&'&476762"'&'&!!7!!!!2"'&'&547676 2#"'&'&47672#"'&'&547672"'&'&47676H%$HG%=m$JJ%$J%$S$J|$$%;$%$?'H$%$%H"H$%$%H 
 m  + A E I M c y    476762#"'&'&476762"'&'&476762"'&'&!!7!!!!2"'&'&547676 2#"'&'&47672#"'&'&547672"'&'&47676H%$	JHHG%=m$JJ%$J%$S$J|$$%2$H.$%$?'H$%$%H"H$%$%H   m  + A W [ _ c y     2"'&'&547676 2#"'&'&47672#"'&'&547672"'&'&47676!!7!!!!2"'&'&547676 2#"'&'&47672#"'&'&547672"'&'&47676N$JJ%$J%$S$J%=m$JJ%$J%$S$JH$%$%H"H$%$%Hq?'H$%$%H"H$%$%H    m  ) > S i m q u      2"'&'&47676 2#"'&'&47672#"'&'&47672"'&'&476762"'&'&47676!!7!!!!2"'&'&47676 2#"'&'&47672#"'&'&47672"'&'&47676N$II%$I%$S$I$I%=m$II%$I%$S$IHIIH"HIIH	&$Ih?'HIIH"HIIH    m  * @ U i          %476762"'&'&%4767632"'&'&476762"'&' 4767672"'&'$4767>"'&' 4767632'&'!!7!!!!2"'&'&547676 2#"'&'&47672#"'&'&547672"'&'&47676HJ%$HG$$%$HGH%$H%=m$JJ%$J%$S$J$H%$H3J&$JHJHJ&$?'H$%$%H"H$%$%H    m    ! 7 M c y  !!7!!!!2"'&'&547676 2#"'&'&47672#"'&'&547672"'&'&476762#"'&'&47676%=m$JJ%$J%$S$J$$%m?'H$%$%H"H$%$%H	JH 	 m    " 8 N d z   2#"'&'&47676!!7!!!!2"'&'&547676 2#"'&'&47672#"'&'&547672"'&'&476762#"'&'&47676E$$%%=m$JJ%$J%$S$J$$%&$Ih?'H$%$%H"H$%$%H	JH 
 m  + / 3 7 L a v    476762#"'&'&476762"'&'&!!7!!!!2"'&'&47676 2#"'&'&47672#"'&'&47672"'&'&476762"'&'&47676H%$HG%=m$II%$I%$S$I$I|$I;$%$?'HIIH"HIIH	JH  m  + A E I M c y     476762#"'&'&476762"'&'&476762"'&'&!!7!!!!2"'&'&547676 2#"'&'&47672#"'&'&547672"'&'&476762#"'&'&47676H%$	JHHG%=m$JJ%$J%$S$J$$%|$$%2$H.$%$?'H$%$%H"H$%$%H	JH   m  + A W [ _ c y      2"'&'&547676 2#"'&'&47672#"'&'&547672"'&'&47676!!7!!!!2"'&'&547676 2#"'&'&47672#"'&'&547672"'&'&476762#"'&'&47676N$JJ%$J%$S$J%=m$JJ%$J%$S$J$$%H$%$%H"H$%$%Hq?'H$%$%H"H$%$%H	JH    m  + A W n r v z       2"'&'&547676 2#"'&'&47672#"'&'&547672"'&'&476762#"'&'&47676!!7!!!!2"'&'&547676 2#"'&'&47672#"'&'&547672"'&'&476762#"'&'&47676N$JJ%$J%$S$J$$%%=m$JJ%$J%$S$J$$%H$%$%H"H$%$%H	&$Ih?'H$%$%H"H$%$%H	JH  m  * @ U i           %476762"'&'&%4767632"'&'&476762"'&' 4767672"'&'$4767>"'&' 4767632'&'!!7!!!!2"'&'&547676 2#"'&'&47672#"'&'&547672"'&'&476762#"'&'&47676HJ%$HG$$%$HGH%$H%=m$JJ%$J%$S$J$$%$H%$H3J&$JHJHJ&$?'H$%$%H"H$%$%H	JH   	 m    " : P f |   !!7!!!!4767632"'&'&%4767632#"'&'&476762"'&'4767672"'&'&%4767>#"'&'& 4767632'&'%=%$J&$$%H$%$%HH$%$%Hm?'|$$%%$$%3J%$$H%$HkJ%$    
 m    " 9 Q g }    2#"'&'&47676!!7!!!!4767632"'&'&%4767632#"'&'&476762"'&'4767672"'&'&%4767>#"'&'& 4767632'&'E$$%%=%$J&$$%H$%$%HH$%$%H&$Ih?'|$$%%$$%3J%$$H%$HkJ%$     m  , 0 4 8 O g }     476762#"'&'&476762"'&'&!!7!!!!4767632"'&'&%4767632#"'&'&476762"'&'4767672"'&'&%4767>#"'&'& 4767632'&'H%$HG%=%$J&$$%H$%$%HH$%$%H|$$%;$%$?'|$$%%$$%3J%$$H%$HkJ%$     m  + A E I M d |      476762#"'&'&476762"'&'&476762"'&'&!!7!!!!4767632"'&'&%4767632#"'&'&476762"'&'4767672"'&'&%4767>#"'&'& 4767632'&'H%$	JHHG%=%$J&$$%H$%$%HH$%$%H|$$%2$H.$%$?'|$$%%$$%3J%$$H%$HkJ%$  m  + A W [ _ c z       2"'&'&547676 2#"'&'&47672#"'&'&547672"'&'&47676!!7!!!!4767632"'&'&%4767632#"'&'&476762"'&'4767672"'&'&%4767>#"'&'& 4767632'&'N$JJ%$J%$S$J%=%$J&$$%H$%$%HH$%$%HH$%$%H"H$%$%Hq?'|$$%%$$%3J%$$H%$HkJ%$   m  ) > S i m q u        2"'&'&47676 2#"'&'&47672#"'&'&47672"'&'&476762"'&'&47676!!7!!!!4767632"'&'&%4767632"'&'&476762'&'4767>"'&'&%4767>"'&'& 476762'&'N$II%$I%$S$I$I%=%$I&$IHIIHHIIHHIIH"HIIH	&$Ih?'|$I%$I4I%$$H%$HlI%$     m  * @ U i           %476762"'&'&%4767632"'&'&476762"'&' 4767672"'&'$4767>"'&' 4767632'&'!!7!!!!4767632"'&'&%4767632"'&'&476762'&'4767>"'&'&%4767>"'&'& 476762'&'HI%$HG$$%$HGH%$H%=%$I&$IHIIHHIIH$H%$H4I&$IHIHI&$?'|$I%$I4I%$$H%$HlI%$     gm     "3!254#%!2#!"54!xxxxAA,Gxxxyxxy  gm  $ 0 3 ;   #"'##65##"5476 "3!254#%!2#!"54!3#'!#A;	lB;;Bl	;"xxxxAAKҚ DDy~&%Nkk̛N%&VxxxyxxyU    gm  $ 0 I   #"'##65##"5476 "3!254#%!2#!"54!!567 54&#"5>32A;	lB;;Bl	;"xxxxAA"?XhU4zHM98y~&%Nkk̛N%&Vxxxyxxy?rn81^BQ##{l0    gm  $ 0 Y   #"'##65##"5476 "3!254#%!2#!"54#"&'532654&+532654&#"5>32A;	lB;;Bl	;"xxxxAA\e9}F4wCmxolV^^ad_(fQI7Zy~&%Nkk̛N%&VxxxyxxymR|yOFJLl?<:=svcE`    gm  $ 0 3 >   #"'##65##"5476 "3!254#%!2#!"54	!33##5!5A;	lB;;Bl	;"xxxxAA5by~&%Nkk̛N%&Vxxxyxxy]my     gm  $ 0 Q   #"'##65##"5476 "3!254#%!2#!"54!!67632#"&'53264&#"A;	lB;;Bl	;"xxxxAAy^^a`<~B9>>Eoo4h6y~&%Nkk̛N%&Vxxxyxxy_	MLKJqff    gm  $ 0 @ `   #"'##65##"5476 "3!254#%!2#!"54"327654'&&'&#"67632#"&547632A;	lB;;Bl	;"xxxxAAGX3333XW33331221DD
&9:DTTXWll122y~&%Nkk̛N%&Vxxxyxxy45[Z4554Z[54bg
KL1LMONuv	     gm  $ 0 7   #"'##65##"5476 "3!254#%!2#!"54!#!A;	lB;;Bl	;"xxxxAAiH3y~&%Nkk̛N%&Vxxxyxxy0   gm  $ 0 = [ j   #"'##65##"5476 "3!254#%!2#!"54 "32764'%&'&546 #"'&54767327654'&"A;	lB;;Bl	;"xxxxAA55j]\655T./RQ./SZ85UVUV56-/.UQ100/0/y~&%Nkk̛N%&Vxxxyxxy[,+KLV,++]12Hdt::dJ01:7PyAAAAyN98?&%%$A?&%%$   gm  $ 0 P _   #"'##65##"5476 "3!254#%!2#!"54532767#"&547632#"'&2654'&#"A;	lB;;Bl	;"xxxxAA.1220DC
#<9EWXWXkl122Xf33XU5443y~&%Nkk̛N%&Vxxxyxxyg
KK/MNoouv	rh\Z4554Z\44    gm  $ 0 > J Q   #"'##65##"5476 "3!254#%!2#!"54 "27654/2#"&546573A;	lB;;Bl	;"xxxxAA2332233yty~&%Nkk̛N%&VxxxyxxyVVVVVVV)t'  gm  $ 0 =   #"'##65##"5476 "3!254#%!2#!"543+53265A;	lB;;Bl	;"xxxxAAA@1(TFy~&%Nkk̛N%&VxxxyxxyܕFE`Tl  gm  $ 0 J   #"'##65##"5476 "3!254#%!2#!"54#"&54632.#"3267A;	lB;;Bl	;"xxxxAA<1e9ɴ9f0/j6||{}7j.y~&%Nkk̛N%&Vxxxyxxyt"$$"   gm   4 @ L  "#"&54632&#"32 #"'##65##"5476 "3!254#%!2#!"54VX~_
Ua`UU`aA;	lB;;Bl	;"xxxxAA,ۥ(j8pny~&%Nkk̛N%&Vxxxyxxy   gm  $ 0 ;   #"'##65##"5476 "3!254#%!2#!"5433	##A;	lB;;Bl	;"xxxxAAjixy~&%Nkk̛N%&VxxxyxxyazBm     gm  ! - 0 8  67632	&547632"3!254#%!2#!"54!3#'!#7>T>}}?V<7xxxxAAKҚ DDv>G-;n;-GAxxxyxxyU    gm  ! - F  67632	&547632"3!254#%!2#!"54!!567 54&#"5>327>T>}}?V<7xxxxAA"?XhU4zHM98v>G-;n;-GAxxxyxxy?rn81^BQ##{l0    gm  ! - V  67632	&547632"3!254#%!2#!"54#"&'532654&+532654&#"5>327>T>}}?V<7xxxxAA\e9}F4wCmxolV^^ad_(fQI7Zv>G-;n;-GAxxxyxxymR|yOFJLl?<:=svcE`    gm  ! - 0 ;  67632	&547632"3!254#%!2#!"54	!33##5!57>T>}}?V<7xxxxAA5bv>G-;n;-GAxxxyxxy]my     gm  ! - N  67632	&547632"3!254#%!2#!"54!!67632#"&'53264&#"7>T>}}?V<7xxxxAAy^^a`<~B9>>Eoo4h6v>G-;n;-GAxxxyxxy_	MLKJqff    gm  ! - = ]  67632	&547632"3!254#%!2#!"54"327654'&&'&#"67632#"&5476327>T>}}?V<7xxxxAAGX3333XW33331221DD
&9:DTTXWll122v>G-;n;-GAxxxyxxy45[Z4554Z[54bg
KL1LMONuv	     gm  ! - 4  67632	&547632"3!254#%!2#!"54!#!7>T>}}?V<7xxxxAAiH3v>G-;n;-GAxxxyxxy0   gm  ! - : X g  67632	&547632"3!254#%!2#!"54 "32764'%&'&546 #"'&54767327654'&"7>T>}}?V<7xxxxAA55j]\655T./RQ./SZ85UVUV56-/.UQ100/0/v>G-;n;-GAxxxyxxy[,+KLV,++]12Hdt::dJ01:7PyAAAAyN98?&%%$A?&%%$   gm  ! - M \  67632	&547632"3!254#%!2#!"54532767#"&547632#"'&2654'&#"7>T>}}?V<7xxxxAA.1220DC
#<9EWXWXkl122Xf33XU5443v>G-;n;-GAxxxyxxyg
KK/MNoouv	rh\Z4554Z\44    gm  ! - ; G N  67632	&547632"3!254#%!2#!"54 "27654/2#"&5465737>T>}}?V<7xxxxAA2332233ytv>G-;n;-GAxxxyxxyVVVVVVV)t'  gm  ! - :  67632	&547632"3!254#%!2#!"543+532657>T>}}?V<7xxxxAAA@1(TFv>G-;n;-GAxxxyxxyܕFE`Tl  gm  ! - G  67632	&547632"3!254#%!2#!"54#"&54632.#"32677>T>}}?V<7xxxxAA<1e9ɴ9f0/j6||{}7j.v>G-;n;-GAxxxyxxyt"$$"   xm   1 = I  "#"&54632&#"3267632	&547632"3!254#%!2#!"54VX~_
Ua`UU`a7>T>}}?V<7xxxxAA,ۥ(j8p0v>G-;n;-GAxxxyxxy  gm  ! - 8  67632	&547632"3!254#%!2#!"5433	##7>T>}}?V<7xxxxAAjixv>G-;n;-GAxxxyxxyazBm     gm    ! )  0	00"3!254#%!2#!"54!3#'!#hfxxxxAAKҚ DD
xxxyxxyU     gm    7  0	00"3!254#%!2#!"54!!567 54&#"5>32hfxxxxAA"?XhU4zHM98
xxxyxxy?rn81^BQ##{l0     gm    G  0	00"3!254#%!2#!"54#"&'532654&+532654&#"5>32hfxxxxAA\e9}F4wCmxolV^^ad_(fQI7Z
xxxyxxymR|yOFJLl?<:=svcE`     gm    ! ,  0	00"3!254#%!2#!"54	!33##5!5hfxxxxAA5b
xxxyxxy]my  gm    ?  0	00"3!254#%!2#!"54!!67632#"&'53264&#"hfxxxxAAy^^a`<~B9>>Eoo4h6
xxxyxxy_	MLKJqff     gm    . N  0	00"3!254#%!2#!"54"327654'&&'&#"67632#"&547632hfxxxxAAGX3333XW33331221DD
&9:DTTXWll122
xxxyxxy45[Z4554Z[54bg
KL1LMONuv	  gm    %  0	00"3!254#%!2#!"54!#!hfxxxxAAiH3
xxxyxxy0    gm    + I X  0	00"3!254#%!2#!"54 "32764'%&'&546 #"'&54767327654'&"hfxxxxAA55j]\655T./RQ./SZ85UVUV56-/.UQ100/0/
xxxyxxy[,+KLV,++]12Hdt::dJ01:7PyAAAAyN98?&%%$A?&%%$    gm    > M  0	00"3!254#%!2#!"54532767#"&547632#"'&2654'&#"hfxxxxAA.1220DC
#<9EWXWXkl122Xf33XU5443
xxxyxxyg
KK/MNoouv	rh\Z4554Z\44     gm    , 8 ?  0	00"3!254#%!2#!"54 "27654/2#"&546573hfxxxxAA2332233yt
xxxyxxyVVVVVVV)t'   gm    +  0	00"3!254#%!2#!"543+53265hfxxxxAAA@1(TF
xxxyxxyܕFE`Tl   gm    8  0	00"3!254#%!2#!"54#"&54632.#"3267hfxxxxAA<1e9ɴ9f0/j6||{}7j.
xxxyxxyt"$$"    gm   " . :  0	00"#"&54632&#"32"3!254#%!2#!"54hf5VX~_
Ua`UU`auxxxxAAAۥ(j8poxxxyxxy    gm    )  0	00"3!254#%!2#!"5433	##hfxxxxAAjix
xxxyxxyazBm  gm 	  !  !	!"3!254#%!2#!"540xxxxAA1GG}xxxyxxy     gm # / ; > F  65'&'&547632&54 632'"3!254#%!2#!"54!3#'!#U9H5?K1||1K?5I9xxxxAAKҚ DDLC4$jj$4FLxxxyxxyU     gm # / ; T  65'&'&547632&54 632'"3!254#%!2#!"54!!567 54&#"5>32U9H5?K1||1K?5I9xxxxAA"?XhU4zHM98LC4$jj$4FLxxxyxxy?rn81^BQ##{l0     gm # / ; d  65'&'&547632&54 632'"3!254#%!2#!"54#"&'532654&+532654&#"5>32U9H5?K1||1K?5I9xxxxAA\e9}F4wCmxolV^^ad_(fQI7ZLC4$jj$4FLxxxyxxymR|yOFJLl?<:=svcE`     gm # / ; > I  65'&'&547632&54 632'"3!254#%!2#!"54	!33##5!5U9H5?K1||1K?5I9xxxxAA5bLC4$jj$4FLxxxyxxy]my  gm # / ; \  65'&'&547632&54 632'"3!254#%!2#!"54!!67632#"&'53264&#"U9H5?K1||1K?5I9xxxxAAy^^a`<~B9>>Eoo4h6LC4$jj$4FLxxxyxxy_	MLKJqff     gm # / ; K k  65'&'&547632&54 632'"3!254#%!2#!"54"327654'&&'&#"67632#"&547632U9H5?K1||1K?5I9xxxxAAGX3333XW33331221DD
&9:DTTXWll122LC4$jj$4FLxxxyxxy45[Z4554Z[54bg
KL1LMONuv	  gm # / ; B  65'&'&547632&54 632'"3!254#%!2#!"54!#!U9H5?K1||1K?5I9xxxxAAiH3LC4$jj$4FLxxxyxxy0    gm # / ; H f u  65'&'&547632&54 632'"3!254#%!2#!"54 "32764'%&'&546 #"'&54767327654'&"U9H5?K1||1K?5I9xxxxAA55j]\655T./RQ./SZ85UVUV56-/.UQ100/0/LC4$jj$4FLxxxyxxy[,+KLV,++]12Hdt::dJ01:7PyAAAAyN98?&%%$A?&%%$    gm # / ; [ j  65'&'&547632&54 632'"3!254#%!2#!"54532767#"&547632#"'&2654'&#"U9H5?K1||1K?5I9xxxxAA.1220DC
#<9EWXWXkl122Xf33XU5443LC4$jj$4FLxxxyxxyg
KK/MNoouv	rh\Z4554Z\44     gm # / ; I U \  65'&'&547632&54 632'"3!254#%!2#!"54 "27654/2#"&546573U9H5?K1||1K?5I9xxxxAA2332233ytLC4$jj$4FLxxxyxxyVVVVVVV)t'   gm # / ; H  65'&'&547632&54 632'"3!254#%!2#!"543+53265U9H5?K1||1K?5I9xxxxAAA@1(TFLC4$jj$4FLxxxyxxyܕFE`Tl   gm # / ; U  65'&'&547632&54 632'"3!254#%!2#!"54#"&54632.#"3267U9H5?K1||1K?5I9xxxxAA<1e9ɴ9f0/j6||{}7j.LC4$jj$4FLxxxyxxyt"$$"    gm # / ; M W  65'&'&547632&54 632'"3!254#%!2#!"54"#"&54632&#"32U9H5?K1||1K?5I9xxxxAA3VX~_
Ua`UU`aLC4$jj$4FLxxxyxxyۥ(j8p   gm # / ; F  65'&'&547632&54 632'"3!254#%!2#!"5433	##U9H5?K1||1K?5I9xxxxAAjixLC4$jj$4FLxxxyxxyazBm  gm 	   +  !%%!%%"3!254#%!2#!"54decb`bMxxxxAAnξ;3o(T"(Uxxxyxxy     jn    !   !  tuu   jn 	      ! !   !  ,=C`tu<=u    jn     !   !     !ut~<Atu<=     jn     !   !     !ut~<Atu<=   jn     !   !   !   !  tu<=CAutC<=@    jn     !   !   %   tu`Au{@C  jn     !   !  0   tuAu{@C     jn 	    %    !   !  +aCut@Ctu  jV    # + 3     462"7"32654$"&462"32654 462"6"&4622>7>54&'&'>54&#"&547&"'654.#"'72>32%%"&''%&/'%.547&54632B\BB\t-.B\BB\,-o    lN.	;qsV6C70AIbbOSC**CSObbIA07C6Vsq;	.8L+ʏ]KY  YK]+8ggg=>uggg=>"6''6']6''6'$9]W>:LktLJ73(#XQik\B?&STTS&?B\kiQX#(37JLtkL>W]9rlȡ~3D#@mm@#D3~lȬr    Kj	- 	   " ( ,      "&4632'2654#"3#"&46327'7#5%32767654'&'7>732>7>54'.#"&$ &/.#"3276%2654#"'747'&'#".'.54>7>32676 767>32+"&'&'&'&'& '326y2>=32>=-5nnI3=>23=>S39?*nB?94iEB9?B
R' 8%/61.4&++ #?Y==Y?# ++&4.16/%8 'R
-*?99
!;+57?
B:),#3A32%A(77(A%23A3#,):B
?75+;!
9"`	 B6Ĉ6B 	_#4aa7k~nnnnAnnnn-ںMғv$DK;7"D;KD$vh5WM' 1
*L7.4(#"NemmeN"#(4.7L*
1 'MW5hNA*,PI	,9	:kR4_5"2S''RNNR''S2"5_4Rk:	9,	IP,*0(sBD0H.&&.H0DBs($'&    =j   ( 2 A N    7327327#"'#""'72#"'&547632">7&>32#"'&327654'&#"654.'&'&#"&'%% 767%767%7&54>76?62>?''! '&'7&''\E[:TT:[E\lJDEI>zz>Z+Q (F65/AFeN$0+EdFB/56F( Qy0(,@

*tt*
B
g굤g
&<]ii];&l
m nmuvmmm
b@,,@bdx==x.L#$-G0,a&0$4%Ca,0G-$#;t.f>v::rAe.t+B,E@y>zwwz>y9L,B=|9jwAu:	aa	:uAwj9|BQW.>..>.QWB   j    % 1 ; G h      462"7"32654"547632 "&462432#"'&"3265473267!"& 7654'>54'&#".#" 632+ '.'&'#"&'&'&54632676&#";67&%32767654&'&#"RtRRt78,%,%RtRRt%,%,78j`;j|TVZGqpGZVT|j7aij"Y:8mm8:Y"jia (+G&<5t5<&G+( tRRtRh11R $ $tRRtR$ $k11TXLTr˚,0^1ioE55Eoi1^0, |,6[?Ki{pn7LL7np{iK?[6,|R:3/{W``W{/3:R    	 jn   " . 4 9 > B F  4632#"&%462#"& !   !   !   !  !   67##%67#5#Q;:RR:;QBRtSS:;Qm<=CAtuXLLHd e;QQ;:SS:;QQ;:SSC<=@ujj*%Z*Rdf 	 jn   # / 5 : ? C G   !   !   !   !  462#4&"!462#4&"!   67##%67#5#1<=CAtuČ=T=)Č=T=XLLHd eC<=@uŋSwwSŋSwwSj*%Z*Rdf 	 _jn      # / Y ~  5#67##67#%!   462#4&"!462#4&" !  "'&/ ! &"&5476?&7 !  4'#"'&/&'&! 6?"'<e)HdLLXLNXČ=T=ɌČ=T=tu];6L*+
L6<\<=%&-)//)-LfPRdZ**%jŋSwwSŋSwwSu%&69 96&%C<9-ǚ-9   jn   " . 4 <  4632#"&%462#"& !   !   !   !  !   %!$76Q;:RR:;QBRtSS:;Qtu<=CABW!\\;QQ;:SS:;QQ;:SSutC<=@j{u\\    jn   # / 5 >  462#4&"!462#4&" !   !   !   !  !   %!7276Č=T=ɌČ=T=tu<=CABW!\ʎ\ŋSwwSŋSwwSutC<=@j{u\\  jn   # / ; A J  "&547462#4&"!462#4&" !   !   !   !  !   %!7276AL6Č=T=ɌČ=T=tu<=CABW!\ʎ\,8"+6,#5 ŋSwwSŋSwwSutC<=@j{u\\  jn    % + 3  %%''7'7 !   !   !   !  !   %!$76|'MM٠MMtu<=CABW!\\'nnUUnnutC<=@j{u\\    jc   * 5 I W _  7767 '& !  /! '462#"&%4632#"&4$!  !  7&%654$! 6! &#"32s('s%22<=RtSS:;QQ;:RR:;QۼCAJKCݰG,&',H923QC<=99*;QQ;:SS:;QQvRS\\t[\6JQrrQJ6nn     j0     - 9 J  %462#"&%4632#"&'7 767 '& !   !  6 % !  7/M?RtSS:;QQ;:RR:;QMMs('s%22<=CA*go;QQ;:SS:;QQvRSno>G,&',H923QC<=@**t/0  jn   ' 2 9  7 767 '& !   !   !   !  4632#"&-%s('s%22<=CAtuQ;:RR:;Q'MMG,&',H923QC<=@u;QQvRSdnn  jn   ' 3 ?  7 767 '&462#4&"!462#4&" !   !   !   !  s('s%22,Č=T=ɌČ=T=tu<=CAG,&',H923ŋSwwSŋSwwSutC<=@     jn   7 C Q  462#4&"!462#4&" !27&'#  3   536 !   !   !  327674'&fČ=T=)Č=T=<veA+-{7CAtuO\&$!ŋSwwSŋSwwSC)0ljՠdc3=@u6C$(9.   jn   ' 3 ?  7 767 '&"&53265!"&53265 !   !   !   !  s('s%22 Č=T=7Č=T=?tu<=CAG,&',H923ŋSwwSŋSwwSbutC<=@   jn  / ; G W  2#'&5&7633476!2367672#'&'476 !   !   !   !  7 767 '&<2>
&?) 
#I=#
 )?&
>2<tu<=CAs('s%22%?A>ϾDLD  1GG1  DLD>A?%*utC<=@G,&',H923    jn  # 3 <   !  4'#"&5"&=# !   !  %7767 '&!&'&! 1<=Tn즦nUtuss('s%22`C<àOddddOu[G,&',H923;     jn     )  5!!5!2767! !   !   !   !  lʎ's%2~tu<=CA',H929utC<=@     jn    % 1  5!4632#"&%462#"& !   !   !   !  LvQ;:RR:;QBRtSS:;Qtu<=CAq;QQvRS:;QQ;:SSutC<=@     jn     #  5!!5!5! !   !   !   !  tu<=CA凇yutC<=@   jn    ) 7   !   !   !   !  5!5!2#"&545!5!2#"&5451<=CAtux:RR:;QVx:SS:;QC<=@u-Q;:SS:Q;:SS:  jn      * 6 B  "&475!%7'%4632#"&%462#"& !   !   !   !  PA6L6=MXMXMQ;:RR:;QBRtSS:;Qtu<=CA5O66O5Eonno;QQvRS:;QQ;:SSutC<=@    jn    ' 3  5!"&53265!"&53265 !   !   !   !  L6Č=T=7Č=T=?tu<=CAqŋSwwSŋSwwSbutC<=@  jn    % 1  %'4632#"&%462#"& !   !   !   !  9g9Q;:RR:;QBRtSS:;Qtu<=CA{{;QQvRS:;QQ;:SSutC<=@  jn     B  ' !   !   !   !  	7"'&'&#"'67623276762&__Z<=CAtu_4)FF"58 yFF"54(FFy\__C<=@u_Wi"bc(!__9("bb("_i"bb"(9_    jn   # / ;  4632#"&%462#"&7'7'7' !   !   !   !  Q;:RR:;QBRtSS:;QPA<<APtu<=CA;QQ;:SS:;QQ;:SS$>NvX..XvN>#utC<=@  jn  " ) 6 B N  2#'&5&76334764632#"&-%7'7'7' !   !   !   !  j<2>
&@( 
"VQ;:RR:;Q'MMنPA<<APtu<=CA%?A>ϾDLD  1GN;QQvRSdnn>NvX..XvN>#utC<=@   jn   $ 0 <  462#4&"!462#4&"7'7'7' !   !   !   !  Č=T=ɌČ=T=PA<<APtu<=CAŋSwwSŋSwwS]>NvX..XvN>#utC<=@     jn   $ 0 <  7'7'7'"&53265!"&53265 !   !   !   !  PA<<APLČ=T=7Č=T=?tu<=CA>NvX..XvN>ŋSwwSŋSwwSbutC<=@    jn   " . 8 >  4632#"&%462#"& !   !   !   !  %5!#"&5!#26Q;:RR:;QBRtSS:;Qm<=CAtuČU=T=;QQ;:SS:;QQ;:SSC<=@ucŋSww     jn 
   ) 3 9  4632#"&-% !   !   !   !  %5!#"&5!#26Q;:RR:;Q'MM<=CAtuČU=T=;QQvRSdnnC<=@ucŋSww   jn    % / 5   !   !   !   !  '7'7%%5!#"&5!#261<=CAtu2MM'MMČU=T=C<=@uUnnnnŋSww   jn     ) 5 F  %7'%4632#"&%462#"& !   !   !   !  676 &'&#&MXMXMQ;:RR:;QBRtSS:;Qtu<=CA%23$s(ʎ'onno;QQvRS:;QQ;:SSutC<=@%8338H,'',    jn    " - 9 E V  %'6762&'&"%7'%4632#"&%462#"& !   !   !   !  676 &'&#&yFFyT;MXMXMQ;:RR:;QBRtSS:;Qtu<=CA%23$s(ʎ'9("bb"(9<<donno;QQvRS:;QQ;:SSutC<=@%8338H,'',   jn     ) 5 F  '4632#"&%462#"&% !   !   !   !  676 &'&#&MM+Q;:RR:;QBRtSS:;Q/M%tu<=CA%23$s(ʎ'gno;QQvRS:;QQ;:SSoutC<=@%8338H,'',   jn   ( , 7 B F V  676 &'&#& !   !   !   !  %462#"&%4632#"&''6762&'&"%23$s(ʎ'<=CAtu(/M?RtSS:;QQ;:RR:;QMMyFFyTL8338H,'',C<=@uo;QQ;:SS:;QQvRSno9("bb"(9<<    jn   # 4 O   !   !   !   !  "&53265676 &'&#&"&54?&'&532651<=CAtuHČ=T=%23$s(ʎ'F:M L6 M:F=T=C<=@uŋSwwS8338H,'',bQ?7#+6,#5?RbSwwS    jn    * 6  676 &'&#&%%''7'7 !   !   !   !  %23$s(ʎ''MM٠MMtu<=CAL8338H,'',"nnUUnnutC<=@   jn    ! - 9  '	7	676 &'&#&"&47 !   !   !   !  ___/%23$s(ʎ'B6L6<=CAtu\___8338H,'',#5O66O5C<=@u   jn   " . 4 <  4632#"&%462#"& !   !   !   !  !4   !&'& Q;:RR:;QBRtSS:;Qtu<=CA''EkjE;QQ;:SS:;QQ;:SSutC<=@Fa`LtuL     jn     ) 5 ; C  %7'%4632#"&%462#"& !   !   !   !  !4   !&'& MXMXMQ;:RR:;QBRtSS:;Qtu<=CA''EkjEonno;QQvRS:;QQ;:SSutC<=@Fa`LtuL     jn    N Z f l x        32654&#"!&'& !4    !  4'#&'#5"'#5&47&'##"&'##5 !   !  4632#"&%6754&#"326'#"&546325&'&'67%&'%67%tJUioOLr7EkjE?''<=5D%Dm8D++!"D"!++D8nD%D6tuq"!# ## 	rLOoiUJt#!"$ g!"$!"+O# *"!$RluIOoo`LtuLF7C<;.)nY6G$@<<=j<<@$F7Y*.żu!!# 
OooOIulR #!!y
(
	&!--!	  jn      ' - 5  '	7	'	7 !   !   !   !  !4   !&'& ______tu<=CA''EkjE___X___?utC<=@Fa`LtuL    jn   ) 5 A G O  767632#"&53265!"&53265 !   !   !   !  !4   !&'& U%$
';Č=T=7Č=T=?tu<=CA''EkjEt2"$ŋSwwSŋSwwSbutC<=@Fa`LtuL   jn    % + 3  %%''7'7 !   !   !   !  !4   !&'& |'MM٠MMtu<=CA''EkjE'nnUUnnutC<=@Fa`LtuL     _jn    = b  %!4   '7'7%% !  "'&/ ! &"&5476?&7 !  4'#"'&/&'&! 6?"'''MM'MM.tu];6L*+
L6<\<=%&-)//)-LFtUnnnnu%&69 96&%C<9-ǚ-9  jn    * 6   462"4632#"&%462#"& !   !   !   !  ,ԖQ;:RR:;QBRtSS:;Qtu<=CAZԖԖ;;QQ;:SS:;QQ;:SSutC<=@     jn     % 1 =  %7'%4632#"&%462#"& 462" !   !   !   !  MXMXMQ;:RR:;QBRtSS:;QKjKKjtu<=CAonno;QQvRS:;QQ;:SSjKKjKutC<=@    jn     # . : F  "&47 462"%7'%4632#"&%462#"& !   !   !   !  PA6L6ԖUMXMXMQ;:RR:;QBRtSS:;Qtu<=CA5O66O5.ԖԖRonno;QQvRS:;QQ;:SSutC<=@     #<5n      k    &462 &462%'%%7 462"5.'46767  #5476764&"#5 '#54&/&'&'."% 7547676767>76767&'& QRtSSIQQuRRMXM~MXȖԖHVh=;;=hVH&z':%i)8^'ny'^8)i%:'z&Lw	l08<3233<80(SuQQuSSuQQvRnooԖԖx>[1'Sk
߰
kS1[>$n9(#mq,%@<?L N?<@%,qm#(9n$&%!Y;eV"Dx860
0nxD"Ve;Y   	 jn   # / ; G O [ g  #"&546324632#"&732654&#"4632#"&%4&#"326'#"&54632462" !   !   !   !  \jc_t_cj\0tJUioOLr"!#rLOoiUJt#!"Ԗtu<=CAf[cccc[fRluIOooO!!# OooOIulR #!!(ԖԖ&utC<=@  
 jn J V ^ b f k p t y ~   !  4'#&'#5##5##5##33'75& 733#5##5##5##'75# !   !  $462"335'35'5&575'1<=@D&D4DDDDDDD[MbM[DDDDDDD4D%DAtuKjKKjDDD414DD41C<,(g	-8?oi{``{io?)Ȉ	h(,}ujKKjKd8/c"#$zo/y$ہ"c     jql 	   % 1 = I U  !3!5#%!3!5#%!3!5# 462""&53265!"&53265 !   !   !   !  
{{{{{{KjKKjKČ=T=7Č=T=?tu<=CAlh\h\h\h\h\hjKKjKDŋSwwSŋSwwSbutC<=@    jn   # + 7  '7'77' !   !   !   !  462"'7'77'_qq_qr_qq_r+<=CAtuԖ_qq_qr_qq_r(_qr_qq_rq_qC<=@uԖԖd_qr_qq_rq_q     jn 
  ! -  4632#"&%462#"& !   !   !   !  Q;:RR:;QBRtSS:;Qtu<=CA;QQvRS:;QQ;:SSutC<=@  
 jn       $ ( , 7   !   !  5!35!%'%%7!!!! %6''&! !tulMXM~MX9Tv,unooa< 	 :j&   R         27#"'7327 $'&54732%% 76767%767%7654.'&'&#"&'&54>76?62>?''! '&&''7&''%4."#462!4."#462&'32?67#5#"'\>xcev>rt6;#y]M4f굡g.G

*tt*
&<]ii];&ikhdtt^b	e11B1Č1B1Č:$(2+$) `3H:G??4.x==x%B DG}KSB$bCJAi?l:1wv85j?g>LCR4.f>v::rAeME9jwAu:	aa	:uAwj9DMDVW$@"<<@6 @"O`DQ+ZEEY,Č+ZEEY,Č
c'F
aa	C    	 `j ? H ]        654.'&'& &'6?#"'% 76767%767#"&/27#"'7327 $'&54732"&546?4''7&54>76?62>?'#"&/ '&&'4."#462!4."#462&'32?67#5#"'

*tt*

P,3,04f鶢f.0,4.RȂ\>xbfv>rt6<"x|%7>4Zfd &<^ij]<&hjZ4<6$,4,tt*$0B2Č0B2Č:$(2,$( `4H:F>@4|(,.f>v::rAe.*',,3<%WLi?l:1wv85j?gD`(<3,.x==x%B DG}KSBA6%,4JDME9jwAu:	aa	:uAwj9DMD44,%6<3*hb]p-o+ZEEY,Č+ZEEY,Č
c'F
aa	C   	 :j&   * _        27#"'7327 $'&54732#"'267#"%% 76767%767%7654.'&'&#"&'&54>76?62>?''! '&&''7&''%4632#"'&7">7&#"'&'67632327654'&#"\>xcev>rt6;#yprw??52H:u}M4f굡g.G

*tt*
&<]ii];&ikhdtt^b	ecC>]0L!(C8$0+E8C%$M/2-;Cc.*,@.x==x%B DG}KSBh	ELME
N$bCJAi?l:1wv85j?g>LCR4.f>v::rAeME9jwAu:	aa	:uAwj9DMDVW$@"<<@6 @"O`DF_W;E!I+ /!-!CB*&_z5    =j   J     7327327#"'#""'72%654.'&'&#"&'%% 767%767%7&54>76?62>?''! '&'7&''>32#'&'4632%2347632#'&546\E[:TT:[E\lJDEI>zz>Z

*tt*
B
g굤g
&<]ii];&l
m nmuvmmm

:-.>>1@/=#-:
#=/@1>>b@,,@bdx==x.8t.f>v::rAe.t+B,E@y>zwwz>y9L,B=|9jwAu:	aa	:uAwj9|BQW.>..>.QWB0B=1JJ=B*HGrB0GH*B=ϾJJ1=    
 =j     ( 7 D u    -'"'72#"'&547632">7&>32#"'&327654'&#"654.'&'&#"&'%% 767%767%7&54>76?62>?''! '&'7&''2767!/MMMs>zz>Z+Q (F65/AFeN$0+EdFB/56F( Qy0(,@

*tt*
B
g굤g
&<]ii];&l
m nmuvmmm
ʎ(s"5gonno=x==x.L#$-G0,a&0$4%Ca,0G-$#;t.f>v::rAe.t+B,E@y>zwwz>y9L,B=|9jwAu:	aa	:uAwj9|BQW.>..>.QWB(+H65   =j   ' 4 i     #"'&547632">7&>32#"'&327654'&#"654.'&'&#"&'%% 76?%767%7 2>?''! '&''7&''7&'54>76?7'7'7'27#"'7l+Q (F65/AFeN$0+EdFB/56F( Qy0(,@

*tt*
	B
f굡g
i];&l
m nmttmmm
l&<]PA<<AP[>wdev>L#$-G0,a&0$4%Ca,0G-$#;s.f>v::rAe.$A+B,E@y>zwvz>y9L,Ba	:uAwj9WBQW.>..>.QWB`*9jwAu:	a:=NwY.-YwN=.x==x    =j   ' 4 e        #"'&547632">7&>32#"'&327654'&#"654.'&'&#"&'%% 767%767%7&54>76?62>?''! '&'7&''62&"%6 &#" 27#"'7'%%l+Q (F65/AFeN$0+EdFB/56F( Qy0(,@

*tt*
B
g굤g
&<]ii];&l
m nmuvmmm
GFF`T`Ȑ[>wdev>MM{/ML#$-G0,a&0$4%Ca,0G-$#;t.f>v::rAe.t+B,E@y>zwwz>y9L,B=|9jwAu:	aa	:uAwj9|BQW.>..>.QWBcc_<<`.x==x=noo   =j   , 4 d   "&545"'7276?.53265!"&532656 & &6?6?62>?''   '7&''!2$7%767%7654/&'& &'%%BM 6L6nv>[[3 M=T=7Č=T=`n &<]ii];&+l
m nmudfvmmm
;Yg
A+tt* B
?5O66,5=x..c?SwwSŋSwwSڵ`|jau:	aa	:ua̠|BQW.>.*.>.QWBz>y9L,B+Qb::Tnk+B,E@y>     =j 4 s {     654.'&'&#"&'%% 76?%767%7 2>?''! '&''7&''7&'54>76?!&'& !47632 7'*

*tt*
	B
f굡g
i];&l
m nmttmmm
l&<]EkjE?(___ڃs.f>v::rAe.$A+B,E@y>zwvz>y9L,Ba	:uAwj9WBQW.>..>.QWB`*9jwAu:	aGaKtuK礣~____    jn   ' 2 9  676 &'&  !   !   !   !  %4632#"&%5%%22%s'l(<=CAtuQ;:RR:;Q'MM8329H,'&,@=<Ctb:SRvQQUnn    
@  03#u  )   @ d d1 <20 KTKT[X  @   878YKTKT[KT[X     @878YKTKT[X  @   878Y KTX     @878Y@````pppp]3#%3#^y   s  @   B 1 0KSXY" KTX     @878Y KTX  @   878Y@ %%6FVjg	  / /]]3#7   J  u@!  VV	99991 <2990 KTX     @878Y KTX  @   878Y]'.#"#4632326=3#"&9$(}gV$=09" (}gT";9!2-ev3)dw   @ B 1 0KSXY" KTX     @878Y KTX  @   878Y@*  $ $5CU U    / /]]#ę   1  w@
 91 <90 KTX     @878Y KTX  @   878YKTX     @878Y@  / /-	 ]3#'#Ӌ   1  @
 91 290 KTK	T[K
T[KT[X     @878Y KTX  @   878YKTX     @878Y@      " 	 ]373Ӌ
  9   #.#"#>32vcSRav
6978w{z  9  j@ VV 1 20 KTX     @878Y KTX  @   878YKTKT[X     @878Y332673#"&vcSRav
6978w{z   f  G d 1 0 KTKT[X  @   878Y KTX     @878Y3#    @  1 <203#3#䙋 N    #!#ęę          53#            73#'3#            3#3#'3#}}d           3#3#'3#}}d           3#3#d             3#3#3#3#dd   &  ;#"'&'#"'$&733$767654'3F??<ftGP|@Ah{;;5ISB5:&e\^}C"7:m4w>7K    XQ    ~XR    \ , >  %!$'$&73!2%7&'&547676323!!"'654'&'&#"xhn}@AQ+"R:4RQP	ioh4"(=)1$+<'g\^sM6,|y$K2S%jAzG'
<8BN   ?  0  654'&323276767'&54767632#!V)B,4((7(*HTO<?aNbNLZB`.NJ|m+M;3*)3P&]027EW4,E$2Hf3Џ,'        ! 5  ;#"'+5327&'&54767632"67654'&'&f$'و'$A??8
D?$9P2*I1C299(M.L,0W
 5+5DE2.4!
   k . @  %&'&'&547676323!!#'$'&5473!2766'&'&#"B.y9()Wp8c20-=^E>><l/"'"3
9Ld/
#+m=E2X:zFNV}`kL:DbZzWK#
:<,;	     ?7     8    X4    ~X5           %4'&"2>"'&4762<R8R8z?@?@@?@(8)*8@@@@@??  '.'>3  &4  '. cR> P~&5  '. cR> P '0 3    &4  0 cL  ~&5  0 cL >&  } 8  \K&  } X  >K&  } X >&  1?  \F&  1  >F&  1 >&  /  \F&  /  >F&  / >&  '-?0 >\L&  '08->>L&  '08-   3_+   	5__b   V'  J@!B
 6 991 /<2990KSXY"]33+532765#ոRQi&&}``01}     `  2@  F<<221 /<20@@P`p]33###53ø`<Ĥ    V.`     54!333##"3276!5R w{i&V`p?`3A0 c3' q ="U  a4' q  "[  ^3'*P q =  cZ'#d"U  cZ'%d"U  aZ'#d q    aZ'%d q    vj
3'$\ q =  cZ''b"U  vj
V'"}$\  cW''u*|  vj0Z'#@d$\  c:'&u#(D  cm:'%D&u  vc
u'&u$  vV
Y')P$p  VZ')P#d  VZ')P%d  V')P  c['&u  {Pn&   Z     ,,   !!,,     O   =32653#"&[hq`=QQ,  &&m   &   3;#"'!5 767654x
I*e2D0#
&pgM,>ꅗ:H~ #'    `'S    'S   F'   8@'+'. cQ  ~@'+'. cR  ~r' >      9  9 FKSKQZX 8Y1  /0@@P`p]3;#"&5Li a   ^   q%   qq   u{&   J    O  w`    73#!!ǆ$Nd`    Vw`    #676#732767!5ʆ#5H2K1i0/N)deеT0Hd01`` vg{'      y{&            3#3##       +@
	
	
22221 /220!#3!53#^ժ  	?   !5	?   8't  Xz   8	U'u  Xz   8'z  t   8'w  Xz   8	U'x  Xz   8 'z  ,w   $'w  }   $'x  }      N  @T 1 /0333     N  @T	 1 /20%3!533yոB   y  @T  1 /0)533ysոB   q   8@EEԶ0]991 @
/0  6& #"    3*NYh>	é      A@EEԶ0]91 @
/<20  6& "'!53&54   3*NNJhh>	é   !   8@E
EԶ0]991 @/0  6& &54    #"'!5hYNJ>z    =  x 
 4@
2291 @
/290)33!x³j*]Qi    x  6@ 
	2291 @	/2290%!5!33xtj³瓓]Qi     ' 
 4@		2291 @	

/290#5!33j³]Q     =  q   )	#33mCq"     q 
  )5333! mm"   q   )533# m     Oq 	 $@	
1 /2<0)3!33OkUq""      Oq  (@
1 
/22<0)533!33OιUΓ""      q 	 $@ 
1  /2<0)533!3kιU"    Oq 	 $@

<1  /2035!!5!3ΓK"    Oq 	 $@

1  /20#5!!5!3ΓK"    q   @		 1  /0!5!!5kqK    q     :@!EE ܲ@]ܲ@]1 @	 /<0!&'.4> ! 2>4."RJr惃sKR9[ZZ 1ũbbŨ1 p`88`p`88        ! >@#EE"ܲ@]ܲ@]1 @  /2<0%!!5!&'.4>  2>4."RJr惃sKRQ[ZZ{ 1ũbbŨ1 p`88`p`88    O   :@!EE ܲ@]ܲ@]1 @/<0#5!&'.4>  2>4."RJr惃sKRQ[ZZ{ 1ũbbŨ1 p`88`p`88    O   &@
 21 	/03"3#!5!>k
f     O   " 21 	/03"3#!5!>c
f        $@	 21 	/03"3#!5!pk
f  q     7@	E<21 @
 /<20!!##"&6 !354'&"3.Cf^v ]8mr^<Uf"qɃ]8ƃ       ;@!	E <21 @
 /2<20%!##"&6 !3!554'&"3.Cf^v7]8mr^K<Uf"Ƀ]8ƃ         7@	E<21 @
 /<20%!##"&6 !!554'&"3.Cf^v]8mr^K<UfɃ]8ƃ         ,@
	<<1 @ 
 /03!!!!!55Փ/       0@	<<1 @	  /20#53!!!!!55B/     D  ,@	<<1 @
  /0)53!!!!ys55B/    =    ,@
 <<1 @ 
 /0!!5!!5!355ߒѓ       0@
<<1 @ 
 /20#5!!5!!5!355ՓLѓ       ,@	<<1 @ 
 /0)5!!5!!5!,55Lѓ      
  *@<1 @	20!!27654'&3!23,R4,,=ٹUiXO]Oz}I_"_Ҥ         .@
<1 @
 /220#533!23!!27654'&ιUiXO,R4,,=B_Ҥ]Oz}I_      
  *@<1 @	/20!!27654'&533!2#,R4,,=ιUiXXXl]Oz}I_"B_ҭ        @@	 ܲ_ ]9 @ 
 /999@
10!4'&'5!!5Mc4B_9V@9       D@	ܲ_]9 @ 	
 /2999@	10#5!&'&'&'5!!5Mc4BX]9V@9      $  @@	ܲ_]9 @ 	
 /999@	10#5!&'&'&'5!5Mc4BX]9Vq    =    :@	
	91 @/̲]촍]0!533T9     
 >@
	91 @
/2̲]촍]0#5!533hՓL9      :@	
	91 @/̲]촍]0#5!53hL9+        # 1@%!$1 @
# /2203432>3234&#"!4&#"!}x5%^qZHZl K--Xh|ŕnc        % 5@'#&1 @ $/2220#53432>3234&#"!4&#"!}x5%^qZHZl[ K--Xh|ŕnc        # 1@%!$1 @"/220#53432>324&#"!4&#"!}x5%^ZHZl[ K--Xh&|ŕnc     =    -@	<<1 @
	 /<<0!!5!3!!!KK?        1@	<<1 @	 /2<<0#5!!5!3!!!KK?        -@ 
<<1 @

 /<<0)5!!5!3!!@KK?     =  X   >@ 
<<<<1 @	/2<<<220%!!5!3!3!!!=KøL??   X   B@
 <<<<1 @	/22<<<220#5!!5!3!3!!!%!KøL=??      >@	<<<<1 @
 /2<<<<<0)5!!5!3!3!!!0KøL=??    Oq  	 %@
1  /203!3!$Uq"K     Oq   *@
	1 @		 /220#53!3!$U"K    q  	 %@
1 	 /20)53!!kUޓK    =     C
	1 @
B/0KSX@ Y!!!tFs0hB~        
 F	1 @B	/20KSX@ Y!5!!!tFlhhB~B        C
	1 @
B/0KSX@ Y!5!!tFlh0B~B+       
   8@!  <<1 @
/2<20327654'&+!!!2/!m]%i;@ED\qQE=<d^K"qd|[|     
  ! <@ # "<<1 @
 /22<20327654'&+!53!!2/!m]%i;7@ED\qQE=<d^K"d|[|    n 
   8@!  <<1 @
/2<20327654'&+!!53!!2/m]%i;@ED\qQE=<d^K"d|[|       Q  .@	<<1 @

 /0!!#3!33K      Q  2@	<<1 @
 /20#5!!#3!33Kԓ      }  .@	<<1 @

 /0#5!!#3!3K+     p   
  3@<<1 @ /<20!!"!"'&54763!!!!0R4,,=nk}XXXl2L!K]Oz}I_	d_ҭ"/    
  7@! <<1 @ /2<20!!"5!!"'&54763!!!!0R4,,=Uk}XXXl2L!K]Oz}I_	ч_ҭ"/      
 
  3@<<1 @ /<20!!"5!!"'&54763!!!0R4,,=Uk}XXXl2LK]Oz}I_	ч_ҭ"  =   	 $@
 
1 	/20!!5!!!NBQ        )@
1 @		 /220#5!!5!!!NQ      	 $@
	
1 	 /20)5!!5!!@N     =     @
	1 @	B/20KSX@ Y%	33~        
 B	1 @
B/220KSX@ Y%	5333~B      @
	1 @	B/20KSX@ Y%	533Г~B+    q    (  !&'.4767675!5!! 2>4."RJrCEoJRXErrJS9[ZZ1SV/{2Ʀ1 "p_88_p`88      *  #5!5&'.4767675!5!! 2>4."RJrCEoJRXErrJS9[ZZ1SV/{2Ʀ1 "p_88_p`88     O  (  #5!5&'.4767675!5! 2>4."RJrCEoJRXErrJSQ[ZZ1SV/{2Ʀ1 {"p_88_p`88      Q 	 %@
1  /0!!#!3B     Q  *@
1 @		 /20#5!!#!3ԓ    } 	 %@	
1  /0#5!!#!+      Q  (@	<1 
 /0!!#3!3O     Q  -@	<1 @	
 /20#5!!#3!3ԓ    }  (@	<1 
 /0#5!!#3!      B   /@	<<1 @ 
/20!!!5!3z;K"qѓ     B   3@	<<1 @ 
/220!53!!5!3z;7K"ѓ     m   /@	<<1 @ 
/20!53!!5!z;7K"ѓ+    q    & B@%(E#E'ܲ@]<<ܲ@]1 @#
$/<<0 2>4."&'.4767673![ZZRJrCEoJRXErrJS"p_88_p`88~1SV/{2Ʀ1         ( F@*E#'E)ܲ@]<<ܲ@#]1 @'
(/2<<0 2>4."!5!5&'.4767673[ZZlRJrCEoJRXErrJS"p_88_p`881SV/{2Ʀ1      O  & B@(E#E&'ܲ@]<<ܲ@]1 @#
%/<<0 2>4."5&'.4767673!5[ZZRJrCEoJRXErrJS0"p_88_p`881SV/{2Ʀ1 {     q    *  !&'.4767675!5!!! 2>4."RJrCEoJRNXErrJS9[ZZ1SV/2Ʀ1 "p_88_p`88       ,  %!5!5&'.4767675!5!! 2>4."RJrCEoJRNXErrJSQ[ZZ1SV/2Ʀ1 p_88_p`88   O  *  )5!5&'.4767675!5!! 2>4."0RJrCEoJRNXErrJSQ[ZZ1SV/2Ʀ1 p_88_p`88     'b  'b  b     'b  'b c     'b  'c  b     'b  'c  c     'c  'b  b     'c  'b  c     'c  'c  b     'c  'c  c       :@ 
	@	?o]9999991 
2<0#'##'##'d2222222ddddd     V   !#!3!3#3jժV  V8`   !##333#{}`9V    VX{     %5#"&5332653!"&'5326Cuȸ||aQQRjBfca{+,*    }GR'>   }GR'-   }G'L'-   }Gx'0    }G'2   ~&'>X  ~&'-4H  ~&'-  ('-4H  ~'.   ~'2   
G&  '-_ -
&  '-R-7&  '-R- 
G&  0x
&  0 7&  0  
G&  '/ 0x
&  '/ 0 7&  '/ 0  	&  .x2&  .X&  .X 	&  /~   2&  /   &  /    &  /R  &  /|R  &  /|R uF&  /,  @&  /,  F&  /, \&6  -k?&7  - &8  - \L&6  '--k?&7  '-~- ~&8  '-- \&6  0?&7  0, &8  0, k&9  -k  ?&:  -~   ~&;  - k&9  /k  ?&:  /,~   x&;  />   7  %2$6=4'%$=4767!;#"&'#!"'$4733k1yY`h_	/.Z\9Sl?AhXl	k7>c`7#
#5&E^209&b\^~B"        #5!276'&'%$=4767!#.cY`h_	>_߸h,n7>ba7#
#5&qe     )  #5!27654'%$=4767!;#"&'#9pY`h_	/.ZZ8`h7?ba7#
#5&E_/(W   &(  >F  &  >  &  > &  -F  r&  -   r&  -  &  0X&  0 &  0  +&,  >F  +&-  >  +&.  > +&,  .X+&-  . +&.  .  4&,  /  4&-  / K  4&.  / K #&  -j  &  -  &  - #4&  /  4&  /   4&  /  #&  0&&  0 c&  0  +&8  '-?&-'- R&4  - ~'- R&5  -  +&8  '-?&>&'- R&4  > P~'- R&5  > P +&8  /&X&4  0 c~X&5  0 c 5     	 b@   
<2991 /0KTX 
 @  
 
878YKTKT[KT[X 
  
 
 @878Y  P]#53#3 +e      $ @/   !##%"	 "	 "!&	%99991 9990KTKT[KT[X %  % % @878Y@ttttv]33267#"&546?>7>5#537ZZ:3mN`^gIYX0&DeWX5^1YnFC98LVV/5<6 X  u     X   %#!5!276=3%Hc,1VV,1jٻ     #   !!!!#	-   #   !!!R0S
O	-   #f#   !!	!!5	N+)#
m    @   >2&#"#"&'7327ֳPd\jkPd켰}켰  H&L  L   Q'L  'L  L    @ - 6 ?  67632&#"#"'&'7327&'&54767676'4'&'uphmdNPd]zvphmdNPdfuV?bd4?V?fj4`\cM["jݜx9`\cM"gݢzBfd3vAif3     H M Q Z c  67632&#"!67632&#"#"'&'7327!#"'&'7327&'&54767!!676'4'&uphmdNPdupimdNQd^zupimdNQdvphmdNPdfu"V?fj4Q V?bd4`\cMl`\cM["jݜx9`\cM@`\cM#hݢz[Aif3qiBfd3  P m q u ~   67632&#"!67632&#"!67632&#"#"'&'7327!#"'&'7327!#"'&'7327&'&54767!)!67654'&uphmdNPdupimdNQduphmdNQd]zvphmeNPdupimdNQdvphmdNPdfu"""V?fj4YV>be4`\cMl`\cMl`\cM["jݜx9`\cM@`\cM@`\cM#hݢzA[Aif3qiBfd3    3  &#"7#754'&'#"&'7327#4767>32nSb~YfMfpH>>fpSb=[Bzzfp)"X*ee*mH鿬Bxۛz鿭     >  4'>7'7&#"7#"&'7327&'&54767>32mV?fj4VseSb~kef%UzlkSbfulkAif3ETieX[mee_X9鿬"gݢz       =  .'>7'&#"' #"&'7327&'&54767>32mV?fj41M>V
vfSbfjlkSbfulkAif3]Di[wf&["Yfj9鿬"gݢz    	P#   	!	!Ass#	%
O    	P#   	!	!
O	$     #     #   # KuuO;>^8bC     #     3   3 5.Ae8^?     R
u   7  !!   767654'&'   $'&'&7676R<¡¡?3dccddccdYTRzzSSSRRY   R
u  3 ?     767654'&'   $'&'&7676!!#!5!<¡¡?3dccddccdɵeepTRzzSSSRRYɵjee   R
u  3 ?     767654'&'   $'&'&7676			'	<¡¡?3dccddccdɵsssspTRzzSSSRRYɵssss   Y&L  'L  'L	  L    @   327!5!>32&#"!!#"&'wSb-}#lkTb"r/lk۸鿭?/鿬     @ '  327!5!!5!>32&#"!!!!#"&'wSbnlkSbuc lk۸T鿭_O鿬     @   &#"#"&'73275>32nSb%,,lkSb%9,lk	\鿬鿭    @ , 5  &#"&'67#"&'7327&'&54767>32nSbh9q-XLalkSbfulk-V?fj4[:\f.i39鿬"gݢzAif3      4  &#"676='3'#"&'7327&'&53>32nSb=[BzfL
fxjkS`XqH?>jkgLBx+ff+ݘz鿬#XڡnHcJ   @  !  !!!!>2&#"!!"&'732f*ֲPcΰPe`켱b   @  ,  !!>2&#"#"&'7327326&f*֌:,ֲPd]zjkPc9L~켯["jUx9켱l2     G  1  !!327326&# >32&#"632  #"'#"&'+Sb&@Oàv"jkSbS`${gjk¸X(L(XKT/鿬   @   4  !!6& 327&'&767>32&#"#"&'_*SbfulkSb]zlk(͓l"gz["jTx9鿬   @  " &  7!>2&#"!!#"&'73273!#3ֲPdAfePd"C;켱RfwxKK B /  &#"!2#567&'!#"&'7327!5!>32nSb$~ˇy/lkS`-c	C&lkgL)鿬fcJ  @ %  &#"7	'#"&'7327'	7>32nSbީd#lkSb!g lkޫ鿬de鿭    @ ,  327#7>32&#"#'#"&'wSb@\-J۫lkSbXz@lk۸)FqG%
鿭r"b/XG鿬  @ )  &#"63#"&'7327&'&3>32nSb<~lkSbYz=lk 6s.7鿬!b/FE鿭    N	    >2&#"#"&'7327!5ֲPd\kjPd켱}켱
x     L@    >2&#"#"&'73275!ֲPd\kjPdHV켱}켱       ^_<      +    +LY	             m  QY               ^ f        55    q= 3     =   d        d          ?   y }  s)   3 s \ \? u   L s L s   y  D{ ={ \         { f q q q / q 9 9 9    q  qJ + o# 7  = V ; =3 X     55   ^ R  \    s   d      5 ^5 b s    #5  `    b? y y y y y y   s    \ ;\ \\ 3 
 L sL sL sL sL sL f     
  { { { { { { {f q q q q q99 99 q  q q q q q  H     =  =y  {y  {y  { sf q sf q sf q sf q)  q3 
 q  q  q  q  q  q3 s q3 s q3 s q3 s q T  x\9\ 9\9\ 9 \ 9  r \9?   u 9 u 9 u   u  F          L s qL s qL s q s/ q J  J  J  + o + o + o + o# 7# 7# 7             D V ={ \3 X{ \3 X{ \3 X /  }  }     s sf q3 
}  q q L u 3 s~   \ 
  9 
 =  L sN g v s q7   r+ d # 7 # 7   N  ={ \3 XT T \ h3 q T ] h X \   ] ` 
d 	< q K  s d a y  {\9L s q           qy  {y  {  {3 s q3 s q? L s qL s qT  X9` 
d 	< q3 s q u   y  {  {L f Hy  {y  {  q  q\9\ 9L s qL s q J  J      + o# 7 , G   q q q{ \3 Xy  {  qL s qL s qL s qL s q =   79 q qy f 	u 
+ o3 X P P} 
 y   q\9@ s q 
J    q  e f q q q q q |S A 4 P q9 q q	 q ` `   9   t* K M:     +#   q q G pP  P  O  J I > > t  + o 7# 7# 7   q  = V = f3 X3 X X m X X X XL s P q q; VV   q X X qv q q 7 7: 7 / <  6 6J  O  < u1 uf u] H^ H   6 &:     u uu u u u          3    s  3      s o ou uu u   d d      L      h uT z u u u         %         q                7            ]            y    q  $    U          $    z  w      (  j  #  L      c                    x    h        !  c  +        q                        c  3      x    +  x  .    p  p  p  p  *  p  w<   . : :  3  e f qe  \ s    D y } u y  { \ L s\ ? y    L s   L s{ =L s N\ F qS    F q    qS Z k  q   = x Jv k q J  q q d G p ;G p    q  ?   q W WG p AO pL s q0  q @G G  r wx s  sF qU  -~ O d$ s  6 s q ,J 7O p f q9L s q    s 5  U s s s  J  s \ \ \ T\ J   # y } }  @ e  (!     T  L s   s # y{ =6 |    < }  o   { p 4  k q5 FA 3 3   L	 ;  q;  f q < = p ;r  R   >Q  d q  t q q  /4 d q+ o9 998 L0 7 / 3  =; x s * `   	 D 3	G  L s k7   sS [  2L s q@ R 2@ R 2 s< q s q	p v9 x s  sf q ;          XXX. j } ! &   4 f G 8 =  (5 F! A      ! = 2 * I    S  s q sf q < = ={ = ;yt |  |  |      \  (5 F?  5 6] . I 6 r |   2 9 y  {y  {  {  qL u qL u q (5 F! A T  X 3  3 L s qL s qL s q od q # = # = # =|   4  Q f G 8{ = ;{ = ;}  q - q  n   6 .  3 sG q/  S  T L	Z T L'  A  tL s q D V   T> L L X v !   ] Z -     ] D `   F   d# iU       xg Z% U   d   M | x 2L sR nu u    >   Z  C qN   q   C q ,   q   j   ,   < 
 { n0      oz   ) oq F~   d  D           D      c  c          /  N  D d  c\      \  f  cY  XL X^ X: .  X: 0  L X; X XO o X. 4 X1  X  Q X X  X XB  b  S (            ?  99 l9 lC 9  1   * * *  } }	 	 	 	 f f  u uXK 5 k    1 C C                              O  O     LLL RL LL L L UL <L <L dL    \ W 5 k  V z        * * * * * * *  } } } } } } } } }==	 	 	 	 	 f  uK K K K K K 5 k5 k) n )    ) ) ) ) ) )           * C C C 1 LLL RL LL RL jL L <L <L d          9  qd = =; ;  q;  q  =x   =  =D =;   = =  p =  = q= = .  q q      B        [   B   [       { d{ d ] x   m x  s[ " )  > WE _  I  I Y" ~ h~ h @ sx 2 O s O  sx M  o  `P {P  @  @  @  @      `  N   zB za \ d       >  N       c  c]   c  c Y] d j i: :  x nn o n d$ P <P y < x < x  d@ 2	 PK n   d d Z
  n  x  y x  d   < <  o < n P d$ d Z d d d )h d$ d Z d. d. J d d$ d^ d. < Z. 
 d dJ d$ d$ <.  Z. d$ ) d.   d$ x d d$ do d dj Z d P d n dy y y y ' ' ' ' ' w' w          '   w  w' w X c ^c ^  %   H      E   wy y y y  w w w w w w y       w  w  w  w w       w w w w y y^  ^  ^  l 4 wl 4 w 4 y 4 y y    w y F    F F F   * F     * F * F     A A 8 F3  F3  F    F F F   * F     * F * F     z z  wu u u  w w wu u  & w     & w & w         w F F  w w w F F G wy  Fy  F F    w F F F w w w F F G wy = Fy = F G w G w = F = F  w F    F F F    FV + V +   F  FV + V + V Y ] Y  F F F" F" F" F" FG  FG  FG  F	  F	  F	  F	  F   w    w w w   ? w     ? w ? w     Y   S S wS wS S S     F F F  FY  wy y y y  M M w wd  w        S S y y 4 y  F w w F F w w   ` ` ` ` ` ` `   F w F w
 
 
   
 
    F F w w F F % w% !% !% w% w% !% !Y 
 ) # s   u` 
z         s	4
s	3
	Ep	2
O		3w q =  { >f q  $ S 9 (    	 3  qf y qy qy 3/ q q q2  2 2 <    / = V3 X5 x  = 2  Z Lr 
 u  / / S H | |N  Y    H G
   p +" M" M> G/ Mm u> GV GV G T R> Gn zh u uE uO G GO GO Gm u\ #= n n uV &7 y  GS G %n z u= nV &7 y K yS G %   tV 29 > G G GO G T_ > G= n I z I IV z [ q u uI uE qO GO G FK\ # ^Y G u@ zV & 7~ 7 7# 7O G  [  [  [  [  B  By  {}  }  }   sf q)  q)  q)  q)  q)  q  q  q  q  q  q  /3 s q         \  9\ 9?  ?  ?  u M u Mu 9u 9              L s qL s qL s qL s q     J  J  J  J T + o + o + o + o + o# 7# 7# 7# 7          y  =y  = D V D V D V D V D V{ = ;{ = ; ={ \3 X{ \3 X{ \3 X #  V = { /  /&  qy  {y  {y  {y  {y  {y  {y  {y  {y  {y  {y  {y  {  q  q  q  q  q  q  q  q\ Z9 D\ 9 L s qL s qL s qL s qL s qL s qL s qN g vN g vN g vN g vN g v               = = = ='   F qF qF qF qF qF qF qF qy y   ' i   S S S S S S     0 l             7 h x     
         q q q q q qo              E   .         k      _  F qF qS c  <   q q    F qF qF qF qF qF qF qF qy y   ' i               7 h x          k      _  F qF qF qF qF qF qF qy y  y          <   pr        \\ D  ~            {            a N s                  V                                d d d  d  d         % % % %   9  933 W                                  
 q q ( () ( ( () ( 3 3   ?  nn   =  V  ` J   d       =n  =   dn8 N (ff a d p                                                5 Wn z5 ?5 f5 \5 l5 Y5 S9 9 9  o g0 u5 W5 5 ^5 b5 ?5 f5 \5 l5 Y5 S9 9 9  o g" MV GO G uV G< uh uT z u0 um u u\ # V s `    "
.   ;F _ q   ( 
.  . D ] 1 u   j 
 C    =  =  =    P  =& C& C s #& < <  o  I	   H Z ; j DN  h R 6  n L sb B SV , y ( 'y  \ X N N  D? y J \  } W J T  9 h gd ( V
 Fh Z	  $  <  | 3 u u  W Z [ O= ;6 Q  
   ^  ^ b ?  f  b f l \   b y a  
 W { =w =	 =u  s)  9   ~  =} = =	] =  ; ; ;9 f q q 	 y) 	 y se  s W d u d     d u ,  d u d u d u d v d v d d*ZZ d - O  p   d d u u d w d d x v x d d d d u d u d     d u d u d u k u 7^ H^^^@^^^ u z z^ u w u d u d d u d 7 u 7y  # _   ZZ      ,  d      DX = = =  , ,     f   f+ uP uu u+ uP uu u+ u+ u+ u y y  y                                                     ` `                                     > >                  * *                 y  y b y*                      c c    |   a a                              X         X      J r ;    xx dxx d         ++ *	8 	8 P 	8  xP     F q 	8  #                                + 7  '  Y , , , , , , , , , ,  < < < < < <xxxxxxxhh''''''''''''''''''  '  '  ''q''''''''''          l l   g g ' ' ' '   ' '   ' ' ' '   ' '   ' ' ' ' '  p  p r p p p p p p p p p7 p7 T         p p' ' ' ' 3     ' ' '  p     p p p p' ' '     ' ,   h, d, , , ,  + ,  } }_ } }	 
 , , , B , d, , , , , , , ,  ,  , }, , , dZ d 2 E \ , , ,  , , , , , , , , , , , , W W W , ,,    , ,S,, ,,, ], , , ,, m, , E, , , ,A, , ,U,,Q,0, , ,U,,L,0,C, ,X, ,B, ,X, ,   ,x,       , , , , , , , , , , , , , ,1      , , , , , , , , , , ,X,X, j, ,T }, y, },), ,,,, , , d 	  	f 9   	d T 
  Y   xD V V V V   V  I V V x  +  5  X 3     p p p pR> p  T V S T W W / V 0 / 0 0 0 2   p @ T  T T T p     n n T V      a a T T, f, z, z, z, z,   xN N x>N nX ~ #9Uwlf, , , , , , , , , ,  	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 u  u  u u u u u u u    u u u u u + +  <   u   u  s    u n O     s s  [ Y O O	B ux dx ux dx dx ux dx dx ux dx ux u  ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, d u  w Ow O                      :  :  :
 u+ u+ u+ u+ u+ u+ u+ u+ u+ u+ u++ u+ u+ u+ u+ k                                                          7 7^^     7^ u u H H    ' ' ' '   $ $   " p M Mu 
9 
u 
  H#  ?  { \3 X@ s y @ s =	 D V h<  G pP   q bfr 
 { \ { 2 P  iI P   l  h P m Pi h hs s h h fc h { d P h h P V z] P < ` FP P d z |" h5 z, q s su @x C @~ y y   v  { \ { \ s sg  ) ? >8 { \(   o o: o  \ : o\   c s s    s s s$ d{ = s y   N s N s 6?      ? , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , }   F) 3 s? ?   s s{ \    u    ;y y  3   D{ =} y y   \ L s  u # sf f   f f    r+ d  	p v9 ; <@ > s p   eK k T5 L	m  L s q s q
 s& q :Bz < <|  
 s& q                f f      s s   7 S  + o	  {	  {	#  {  {  {  { se ? 
 q #  Sj xt 
 

 s& q 
 22 2L s q 
 
u 9     553 |  M. U 3  ?     J  + h ' GR  w F \ 	 D   n `# Z    n ` n    n ` n   # Z ` n  3      n n n n o n9 n nq n n	Y n n  n n nO n  n 2 n n) n n n 1 p n  n ! 2 n x n n n n ns zw d d d d d d d d d d d$ d$ d$ dK dK dK dK dK d_ <_ <_ <_ <_ <_ < q /
 /
 / / /} / o	 	 	 	} <    V J N 1 X? , X X u X `  X N X XY Y Y  XL X^ X:  Y? Y0  YL X; X Xo X2 X1    X  X XB .  X; X  X  :j  :j  :j  :j  :j  :jK H K H * * ** * ** * ** * * }3 } }3 } }3 } }3 }jj) ) k) ) k) ) k) ) k    :j  8  k""""C  :j:jC  :j                                                                  p      *    X XX  iX X XX XX XXXX X 9p9 lp l"9 lp lC  :j9 p   :j1 J   :j  :j* * ** * ** * * }3 } }3 }jj	 
3 #	 
3 #	 	 	 	 f  ^f  ^ uB u uB u/K H 5 k k  k  p S I  :j1 J 8"C  C  :j..   T T                    4  d  d d d    : D  _ j  d : }      d } x z d8 v v  d dD  d}  d, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,     c 3 s$ f" = 3 L r    Dr lK { f q  o / q  5  	"   q q q + o 7  =H Vh L = Xy }  s)   3 s  \? u   L s L s   y  D{ ={ \ { f q q q / q 9 9 9    q  qJ + o# 7  = V ; =3 X  k   Z  q A  j     d     9  *  }* f C     	  uK 	 5 k	   *  }	 f  u  K 5 k4VV4j4/44V//@ b  b  @ ?  @ 	$ 6 C 	; C 	$ @ @ b 	;  6 @ C 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
                                                   / / / / / / / / / / / / / / / / / / / / / / / / / / / @ / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / W W W W W W W W X 	x KW =	@ W W 	Y _W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W W 	Y _W W W W #W W  W W W W :	Y `W :W =W =W =W =W =W =W       s                  N               :jH  k:j   :j :j* ** ** ** *_   9 xxxxxxxxvxxvxxvxxxvxvxxxx  ,     p :jj9 J  q q9  O99                           : :: qd =dd =; ;;; ;; q; ;; q  =x xx  =  =D =DD; ;;  =   = == p =  =   q= === ==. .. q q  , , , , , , , , . j  3 }3 }3 }3 }3 }jjjjj
3 #
3 #
3 #	 	  ^B uH H H  k kn ) k k k) k) k) k p p p :j :j :j55? ? 4   #         	G	G	G 	G P RP RP R                       ? 
0    $  %  * K  - r  2 9  4 K  7D  9  :  ;  <  R &  Y  \             9   9   9   9   9     &   &   &   &   &             K &D : $  $  $  $ $ 9 $ & $ * $ 2 $ 4 $ 7a $ 9} $ : $ <a $ F $ G $ H $ I $ R $ T $ W $ Y $ Z $ \u $ m $  9 $  9 $  9 $  9 $  9 $  $  $  $  $  $  $ a $  $  $  $  $  $  $  $  $  $  $ u $ u $  9 $  9 $  9 $  $  $  $  $  $  $  $  $  $  $  $  $  $  $  $  $  $  $ $ $ $ $ $ $$a $% $&a $' $6 $7 $8a $9u $:a $ $ $ $ $ $a $ $ $ $a $u $	~ $	 $	 $	 $	 $	 $	a $	u $
 $  $ / % & % * % 2 % 6 % 9 % : % < % m % } %  %  %  %  %  %  %  %  %  %  %  %  %  %  %  % % % % % %  %" %6 %8 %: % % % % %	~ %	 %	 %	 %
 %  % & < & m & } &  &8 &: & &	 &  & ' $ ' 9 ' < ' m ' } '  '  '  '  '  '  '  '  '  '8 ': ' '	 '
 '  'D )  ) a ) $D ) 6 ) 7 ) DD ) H ) Lk ) R ) Uk ) X ) \D ) D ) D ) D ) D ) D ) D ) D ) D ) D ) D ) D )  )  )  )  )  )  )  )  )  )  )  )  )  ) D ) D ) D ) D ) D ) D ) D ) D )  )  )  )  )  ) k ) k ) ) ) )k )k )k ) ) )  )" )$ )& )( )+ )- )/ )1 )3 )5 )9D ) ) ) ) ) )D )	D )
 ) * 7 * < * m * } *  *& *: *
 *  * +  +
 +  + -  - $ - m - } -  -  -  -  -  -
 -  - . ) . $ . & . 2 . 7a . 8 . : . < . D . H . R . X . \k . m} .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  . k . k .  .  .  .&a .0 .1 .: .
 .  /  / $ / / 2 / 7 / 8 / 9 / :D / < / H / R / X / \D /  / /  / /  / /  / /  / /  /  /  /  /  /  /  /  /  /  /  /  /  /  /  /  /  /  /  /  /  /  /  / D / D /  /& /0 /1 /: /
a /  2  9 2  2  2 $ 2 9 2 ;} 2 < 2 m 2  2  2  2  2  2  2: 2
 2  2D 3  3  3 $} 3 < 3 D 3 H 3 L 3 Q 3 R 3 U 3 V 3 X 3 m 3 } 3 } 3 } 3 } 3 } 3  3  3  3  3  3  3  3  3  3  3  3  3  3  3  3  3  3  3  3  3  3  3
 3 3 3! 3# 31 3: 3
 & 3  & 3 4  9 4
 4  4} 5  5  5  5 $ 5 & 5 7k 5 9 5 : 5 <} 5 D 5 H 5 R 5 X 5 \ 5 m 5 } 5  5  5  5  5  5  5 } 5  5  5  5  5  5  5  5  5  5  5  5  5  5  5  5  5  5  5  5  5  5  5  5  5&k 51 5:} 5
k 5 } 5 6 $ & 6  & 6  & 6  & 6  & 6  & 7 D 7  7  7 $a 7 & 7 7 7 D 7 F 7 H 7 L 7 R 7 U 7 V 7 X 7 Z 7 \ 7 mD 7 } 7 a 7 a 7 a 7 a 7 a 7  7  7  7  7  7  7  7  7  7  7  7  7  7  7  7  7  7  7  7  7  7  7  7  7  7  7  7  7 7 7! 7# 7& 71 7  7 8 = 8? 9  9  9 Y 9 $} 9 2 9 Da 9 Ha 9 L 9 Ra 9 Xu 9 \ 9 mN 9 } 9 } 9 } 9 } 9 } 9 } 9  9  9  9  9  9 a 9 a 9 a 9 a 9 a 9 a 9 a 9 a 9 a 9 a 9 a 9 a 9 a 9 a 9 a 9 u 9 u 9 u 9 u 9  9  9 a 91u 9 :  :  :  : $ : D} : H : L : R : U : X : \ : m : } :  :  :  :  :  : } : } : } : } : } : } :  :  :  :  :  :  :  :  :  :  :  :  :  :  :  :  : : :1 :
 : ;  ; &k ; 2} ; 7 ; H ; m ; k ; } ; } ; } ; } ; } ;  ;  ;  ;  ; k ; k ;  ;& ;
a ;  ; <  < a <  < $a < & < 2 < D < H < L < R < X < m < }k < a < a < a < a < a <  <  <  <  <  <  <  <  <  <  <  <  <  <  <  <  <  <  <  <  <  <  <  <  <  <  <  <  <1 <
 <  < =  =
 =  = H [ I  I k I  I W I Z I \ I m I } I  I  I' I
 A I N D N H N R N X N \ N  N  N  N  N  N  N  N  N  N  N  N  N  N  N  N  N  N  N  N  N  N  N1 Q
k Q  Q R  & R  R [ R
k R  R} U } U D U  U F U G U H U J U K U P U Q U R U T U U U [ U m U  U  U  U  U  U  U  U  U  U  U  U  U  U  H U  U  U
 U U U  V U Y  Y a Y  Y m Y } Y  Y Z D Z  Z m Z } Z) [ F [ H [ R [  [  [  [  [  [  [  [  [  [  [  [  [  \  \  \ k \ m \ } \ m % m & m ' m * m - m 7 m 9 m : m <k m Y m Z m \ m   m  m k m  m  m  m  m  m  m& m:k } $ } % } & } ' } - } 2 } 7D } 9N } : } ; } < } Y } Z } \ }  }  }  }  }  }  }  }  }  }  }  }  }  }  }  }  }  }&D }:        $ 9  &  *  2  4  7a  9}  :  <a  F  G  H  I  R  T  W  Y  Z  \u  m   9   9   9   9   9              a                      u  u   9   9   9                                       $a % &a ' 6 7 8a 9u :a   	~ 	 	 	 	a 	u 
    /        $ 9  &  *  2  4  7a  9}  :  <a  F  G  H  I  R  T  W  Y  Z  \u  m   9   9   9   9   9              a                      u  u   9   9   9                                       $a % &a ' 6 7 8a 9u :a   	~ 	 	 	 	 	a 	u 
    /        $ 9  &  *  2  4  7a  9}  :  <a  F  G  H  I  R  T  W  Y  Z  \u  m   9   9   9   9   9              a                      u  u   9   9   9                                       $a % &a ' 6 7 8a 9u :a   	~ 	 	 	 	 	a 	u 
    /        $ 9  &  *  2  4  7a  9}  :  <a  F  G  H  I  R  T  W  Y  Z  \u  m   9   9   9   9   9              a                      u  u   9   9   9                                       $a % &a ' 6 7 8a 9u :a  	~ 	 	 	 	 	a 	u 
    /        $ 9  &  *  2  4  7a  9}  :  <a  F  G  H  I  R  T  W  Y  Z  \u  m   9   9   9   9   9              a                      u  u   9   9   9                                       $a % &a ' 6 7 8a 9u :a   	~ 	 	 	 	 	a 	u 
    / 
     <  m  }   :   &  $  9  <  m  }                   8 :  	 
   D   9      $  9  ;}  <  m             : 
   D   9      $  9  ;}  <  m             : 
   D   9      $  9  ;}  <  m             : 
   D   9      $  9  ;}  <  m             : 
   D   9      $  9  ;}  <  m             : 
   D  = ?  = ?  = ?  = ?    a    $a  &  2  D  H  L  R  X  m  }k  a  a  a  a  a                                                         1 
     k   
 D   & 
     [  [  [  [ 
    
k      &    [ 
k   }   &    [ 
k   }   &    [ 
k   }   &    [ 
k   }   &    [ 
k   }      k  m  }       k  m  }         $ 9  &  *  2  4  7a  9}  :  <a  F  G  H  I  R  T  W  Y  Z  \u  m   9   9   9   9   9            a                      u  u   9   9   9                                   $a % &a ' 6 7 8a 9u :a   	~ 	 	 	 	 	a 	u 
    /        $ 9  &  *  2  4  7a  9}  :  <a  F  G  H  I  R  T  W  Y  Z  \u  m   9   9   9   9   9            a                      u  u   9   9   9                                   $a % &a ' 6 7 8a 9u :a   	~ 	 	 	 	 	a 	u 
    /        $ 9  &  *  2  4  7a  9}  :  <a  F  G  H  I  R  T  W  Y  Z  m   9   9   9   9   9            a                       9   9   9                                  $a % &a ' 6 7 8a :a   	~ 	 	 	 	 	a 
    /  <  m  }   :   &  <  m  }   :   &  $  9  <  m  }                   8 :  	 
   D  $  9  <  m  }             : 
   D  [  7  <  m  }   & : 
       $ /  2  7  8  9  :D  <  H  R  X  \D   /   /   /   /   /                                                D  D   & 0 1 : 
a      $ /  2  7  8  9  :D  <  H  R  X  \D   /   /   /   /   /                                                D  D   & 0 1 : 
a   O?

k
 
    $ & 7k 9 : <} D H R X \ m }       }                        &k1:}
k } } D  F G H J K P Q R T U [ m               H  
  V    $ & 7k 9 : <} D H R X \ m }       }                        &k1:}
k } } D  F G H J K P Q R T U [ m                
  V  $ &   &   &   &   &   &" $ &"  &"  &"  &"  &"  && D& & & $a& && 7& D& F& H& L& R& U& V& X& Z& \& mD& }& a& a& a& a& a& & & & & & & & & & & & & & & & & & & & & & & & & & & & &&&!&#&&&1& &0 =0?: : a: : $a: &: 2: D: H: L: R: X: m: }k: a: a: a: a: a: : : : : : : : : : : : : : : : : : : : : : : : : : : : :1:
: :? ?
? ?
 $
 %
 * K
 - r
 2 9
 4 K
 7D
 9
 :
 ;
 <
 R &
 Y
 \
 
 
 
 
 
  9
  9
  9
  9
  9
 
  &
  &
  &
  &
  &
 
 
  K
&D
:
 $
 %
 &
 '
 )
 *
 +
 -
 .
 /
 2
 3
 4
 5
 ;
 =
 I
 Q
 Rk
 U
 Y
 Z
 \
 
 
 
 
 
 }
 
 
 
 
 
 
 
 
 
 
 k
 k
 k
 k
 k
 
 
 
 
 
 
 
 






?
 $ & % & ' ) * + - / . / 2 3 4 5 7 9 : ; < I Q R U Y Z< \  &  &  &  &  &  &                        
&: D   $a & 7 D F H L R U V X Z \ mD } a a a a a                            !#&1  ) $ & 2 7a 8 : < D H R X \k m}                                    k k   &a01:
  D H R X \                      1RjSjTjUjVjXjYjZj[j\j^j_j`jajbjdjejfjgjhj       D   D   D   D         D  l    (          	  	D  	l  	  
<  
      P      t  H    \    $  h      8  4    |    \    X      l        |      T   h  !`  !  "T  #4  $  %  &X  '  'x  '  (  (\  (  (  *  *  +4  +  ,  -8  .   .x  .  /D  04  0p  14  1  2P  2  3  4   5`  5  6`  7  9  ;,  <  =  >  >  ?  @@  @@  @  A  BX  Cp  D  D  F$  F  H   H  I  I  J  KX  K  L  L  M,  M  N8  N  OH  Ot  O  P,  P  Q  Q  Q  Q  R  R  S  S8  Sh  S  T  U  U  U  U  V  V@  VX  Vp  V  V  W  W  W  W  X  XD  Xt  Y<  Zt  Z  Z  Z  [  [$  [  \  \  ]  ]<  ]h  ]  ]  _  _  _  _  `  `,  `D  `\  `  `  bT  bl  b  b  b  b  c  cp  d  d  e  e4  ed  e|  f  fL  fx  f  f  f  g  g  g4  gL  gp  g  g  g  g  g  h  h4  hD  i   i  i<  i`  i  i  i  i  i  j  j4  jX  j|  j  j  j  j  k   k  kH  k  l  l  l  l  m  m8  m\  m  m  m  m  n,  nP  nt  n  n  n  n  o  o  p,  pD  ph  p  p  p  p  ql  q  r   rD  r\  rt  r  r  r  s  t  tH  th  t  t  t  t  u  v  v  v  v  w  w0  wX  wp  w  w  w  w  x  x,  xT  xl  x  x  x  yX  y  z   zD  zt  z  z  z  {   {$  {<  {T  {l  {  {  {  {  |  |4  |L  |d  ||  |  |  |  }<  ~  ~  ~         X        x      t      8    p  <  P     |                  H  `  x       d  $            @    l      (    `                 ,    4    4                     (  @  X  p            0  P  p              $  <  T  d  |                       \  t              ,  D  \  t    $            4  L  d  |              $  <  T  l                ,  D  \  t                  <  T                            ,  D  \  t          (      x  X  <    D    @    L    (      L  \    p    Ũ  h  $  L    (  Ɉ  ʬ  D    ̔      μ  l  P      $  4  P    Ԥ  Ո  @        @    ڄ      \    ܐ        ߴ    L          x      X    X    @      T  `        t    h      T               $    H    t        |  <  L      P             8   (  l  @  `  d  $ |  	d 	 	 	 
 
 
( 
` 
 0  D l   l  $ T d            ( L x      T     8 `  0 @ t    L        P      L  4 H \    |    4 X t       t    8 T     L p      ,  h       !  ! !( !< ! ! ! ! " "\ " " " #$ # # # # # # $  $ $8 $` $ $ %$ % % % & & &P &h &| & & '4 'H '\ 'x ' ( ( (D (T (d ( ( ( )$ )4 )D )x ) ) ) ) ) *( *X *p * * * * * + +  +8 +H +X + + , , ,, , , , -` -p - - - .  . . . . /l /| 0 0 0 1 1  18 1P 1h 1 2 3l 3 4 5 6D 6 7 7 8X 8 8 9| :8 :H : ;X < < < = >D ?P ? @x @ @ @ @ @ A0 B  B C` C| C D\ E E Fp G G H\ Hl I Ix I J` J K L M@ M N Oh O PP Q Q RH R SP S TX U U  U0 U@ U V V, V< VL W W X( X8 XP Xh X Y  Y Y Zp Z Z Z Z [H [ \H \` \x \ \ \ ]x ] ] ^L ^\ _P ` ` ` a a a b b b` bp b b c c c d0 d d eT e e f` g g hh hx i@ i j j j k l` l m m n  n n n o8 oH oX o o p p p qx q r@ r r sD s t u u4 u vx v w4 wD wT wd wt x x y4 yL yd y| y z z {\ { | | }4 }t } ~(   p     x    4 L d    p     |  `  , T |        (   P   T  p  4 L d   8     X  4    (    (       \           l h      8   4  $ `     < L x        D h x         ( 8 P h       , D \ t        4       t  $ t  h 8    | 8  |     8  D T d  d  0   t   , < L    H     t  <   `   À  8 \ ļ p ż   ( Ǩ  Ș  t  0 ʌ 8 ː ˠ  ̠  ͤ  L   τ ϼ   D X   l Ѹ 4 |  X ӄ  p  ( H  P ֔ ֤ h װ ` ج  $ ٬ ټ L  ۄ    L    8 ݰ 4 D  8 \ ߄   H    |     |     T    @ | d    L    p 0 p  l  D   `  t      d        d    @ `   \     , D ` x     @ X          @ X      8  T   `        p   @ \   d x   @ \   `  L   4     D x  	 	 	 
 
, 
D 
d 
| 
 
 
 
 
  $ < T l        4 L d |       , L d             8 P  |       $ < T l      L d   \ |        , < L \ l  l        ( p    @     4    @  L  0   |  t   L   ! ! ! " " #4 # # $L $ %h % & &d & & 'T ' ( (, (l ( ( )4 ) ) *\ +  + , -@ - . / 0( 0 1 2p 3 3 4P 5  5 6 7X 7 8 9X :8 : ; <d =  >  > > ?4 ? ? @, @ A A A B\ B C8 C Dh D E E F F F G H Hh H| H I, I J$ J K4 K L M N Nx O` Pp P Q$ Qt Q R0 R R SL St S TH T U U U V0 V V W0 W X8 Xx X X Y` Y Z Zt Z [< [ [ \ \X \ ] ]X ] ^< ^ _ _ _ `d ` aH a a b b cP c d dp d e< e f f g g g hl h i8 i j  jx j k< k l$ l l m` m nX n o  o o p, px p p q q$ q q q q rH r` rx r r r r r s s  s8 sP sh s s s s s s t$ tD td t t u u\ u u u v v8 v\ vt v v v v v v w wp w w w x x4 xL xd x| x x x x x y y$ y< yT yl y y z  z0 z@ zX z z {D {\ {t { { | |$ |< |T |l | | | | | | } }, }D }\ }t } } ~  ~ ~0 ~ ~ @ X            0 H ` x            4     h       8 P h        ( @ X p    8 P       0 H ` x         8 P h    4 T   h    (        0 H `   D     p     $ < T l        , D \   $ <      0         0 H ` x       X   h   T l    4 L d |       $ < T    8      8       $ < T l        t   ,    x    x   \ t   4        P h      x   $   8 P h   \   @ X   4 D T l             8 P h     <  h       , h     ( d   h   0 H ` x       4 d   4 \    \   @  P      P   x P x    h D    `    D À Ð      ` ĸ H  < t Ƹ ( ǘ Ǩ  ( Ȅ    ( x ɘ ɨ   < L ʀ  H ˘   h ̘ ̴   8 p ͠  0  8 Ϥ   H  P Ѹ Ґ  \  x  ՜ 0 T ֈ $ ׸ < ؤ   | ټ  T   X ې  ܔ     ( < P d    h x ޸ D ߀  H  \  0 t  H     p      x   |    \  <    <   P     $ D p        0 H ` x         8 P h        ( @ `        ( @ X p         0 H ` x       ( @ X p         0 H ` x         @ X p         0 H ` x         @ ` x         8 P h        ( @ X p         0 H ` x         8 P h        ( @ X p         ( @ X p         0 H ` x            8  P  h              ( @ X x         8 P h        0 H ` x         8 P h        ( @ X p         0 \       ( @ X p       $ < T l      	 	  	< 	X 	p 	 	 	 	 	 
  
 
4 
P 
l 
 
 
 
 
  $ < T l         < X t         8 P l        4 L d |        0 H ` x       , H d           8 H ` p        ( @ X p         0 H ` x         8 P h        ( @ X p         0 H ` x        0 @ P       0 H ` |        4 L d t         4 L d |        4 P ` |        , H X t                     D T       0 l    `     L   !( !h ! ! ! "@ "X "X "X "X "X "X "X "X "X # $ % %, %L %h % % % &4 & & & 'p ' ' (D (p ( ( ( )( )X )p ) ) * *H *x * * * + +  +D + + , ,@ ,h , , - -T - - .$ .$ .$ .$ .$ .$ .$ .$ .$ .$ .$ .$ .$ .x . / 0, 0 0 1 2  2T 2p 2 2 3 3 3 3 3 3 3 3 4 4  44 4H 4\ 4p 4 4 4 4 4 4 4 5 5$ 58 5L 5` 5t 5 5 5 6$ 6 7d 7 8 8 9 9 : ;t ; ; = = >D ? @l A A B B C4 Ch C DL D D D E E@ Ex E E F G H H ID I Jx J J J K L M4 M M N O0 P P Q QP S T UT U Vd W| Xx Y( Z@ Z [ [ \t \ ] ]t ] ] ^ ^ ^ ^ _ ` a  a bd cD cp d e e f< f g@ g g h i i i i jP j j k0 k\ k l m0 mh m nh n n n o  o@ o` o o o o p  p  p@ p` p p p p p q  q q( q@ q` q q q q q q r r r( r8 rP rp r r r r r s s  s8 sX sh sx s s t u vx v v w w$ w x y4 y { |( |X | | | }4 } ~( ~  h    H      `  l 0   h     X       @  T  l   ,   4 X t    <     l  T    T   L    L   D   <    X    \    T      T   8  0    x  ,    T  d  0  X   P  H  P    T   T    X l |     \ |  L     l     @      t       4 L    0   T     h  p     D ,    ( @ `     @   8 x    l  ń  < ƨ 8   L ȴ  ` ɤ , ʘ  @ ˬ  ̘   x μ  ϐ  T Ќ  0  L Ҽ , p Ӵ   Ԍ  0 լ , ֘  d |   ` ؔ     ڔ d    ݼ ޠ `  d   < x     < l    \   x      P  ( x    L    0 \    T     d    @        h   8    X    p  X  T   T  D  T   x   , P t  P   4   t  P      0 \       (           ( P x     4 X x    h   X  
p 
 P ` p     P     0 h      ( \    @    < h       (   ,   ,  " % 't ' ' ' ' ( (P ( ( ( )< ) ) ) * *< *` * * * * + +4 +X +| + + + ,  ,( ,P ,| , , -  -, -T -| - - - .$ .T . . . . /( /P /x / / / 0 0H 0t 0 0 0 1 1D 1t 1 1 2 2D 2x 2 2 3 3T 3 3 3 4( 4\ 4 4 4 5 58 5` 5 5 5 6 6@ 6l 6 6 6 7, 7X 7 7 7 8 8` 8 8 9 98 9h 9 9 : :L : : ;4 ;d ; ; ; < <0 <p < < < < < = =4 =P =t = = = = > >4 >P >l > > > > > ? ?0 ?L ?h ? ? ? @ B< C  C C( CD CX Cl C C C C D D  DD D` D D D EP E F Gt G I I J J  JL Jh J J J K K, KH Kp K K K L  L LH Ld L L L L M  M< Mh M M M N NH N O, O P Q@ Q R` R S Sl S T0 T T T U U U V, VX V V V W$ Wh W W W W X XD Xp X X X Y@ Yl Y Z  Z@ Z Z [  [ \  \ ]  ]( ]P ]x ] ] ] ^ ^0 _  _ `D i( l lD l l m\ m n o o p s u v, v w wp x z| z z { | }X } ~ | @    ,  4  <    ( p  <       $ D d     \ x   T  D   l         D $  h  h   p   ` |   l d    (  @  (  D t        8            D x h < H Ȁ   x  ̜ ͐  D  Ҡ `  T p Ԙ ԰    x  L D    X     p   x    t      $ l   4 x  8   D      t         \  `   h 	 
l  h  T    @      8 h  H ,       D  \  x 8  D   0     !P ! "l " # #X # $ &0 ($ )P + , /X 4 5 84 8 9 : < = > @X A C C| C DP D E E8 ET Ep E E F F, G G H\ H I@ J` KH K L$ L` L L L M MD Ml M M M NT N O4 O Q  Q R TT T W X Z Z [ ] ] ^ _ ` a c d8 d eh f0 f gl h4 h i jL k k@ kl k k k l l l m$ mx m m n  n  np n n o od o p  pP p p qD q r r s sL s t0 t u< v v w x y| y z< zx z z { {0 {H {` { | | } ~ <   L   $ `   | |       0 D ` |     0 D ` |     0 L p     < p        D p      $ P |     @ d     @ l     4 p        D p      $ P |     @ d     @ l     4 p      $ P |     , `    0 T     @ t    D    , p        D p      $ P |     @ d     @ l     4 p      $ P |     , `    0 T     @ t    D    , p      $ P |     , `    0 T     @ t    D    , p      L     P    0 l    D    , p    `   $ p   P  ` (   8 t    @ t    h (    p  X     <  d  x     D T l      0 H ` x  ` , |  Ő L ư  ǐ  Ƞ 0 Ɍ  X ʼ  4 L d ˨  8 ̈   |  Ψ , t ϸ  |  $ ќ    Ԡ p ռ  L ֔  $ ׀ ר   $ P | ب   L ل ټ   H t ڜ   , \  , h ܬ    < ` ݜ  $ ޔ  ,  8 H    L   h    L   |   L   H \  4   h  x  (    \  <  (   8   X  h   L   P     D    \       L     $ 4 D 0  D  4    p  8   l  4 D  `  , l |  X   	l 
P 
   \ @ D    d t  $  < ( h    < \ |        4 L d |       $ < T l        , D \ t        4 L d |       $ < T l        , D \ t       8 H X             0 @        0 @ P       0 @ P   < X |       8  `  p       !| ", "D "\ " #< # $ $t $ % %P % % % & &x & ' ', ( ) )x ) ) *h *x * * * * + +8 +` + + + ,  ,$ ,D ,h , , , , -( -T - - - . .L .| . / / 0, 0< 0 0 1 1l 2H 2 3 3 4p 4 54 5 6  6 7 7, 7< 7 7 7 8  8P 8| 9 9 :@ : ;@ ; <$ < =H = > >t > ?8 ?X ?x ? @$ @4 @\ @ A A A| A B B CH C D Dp D Et E Fd F G@ G H$ H4 H` H H I  IL Ix I I I J J$ J8 JL J` Jt J J J J J K K  K4 KH K\ K K K K K L  N Q\ T V W Wt W X X Y\ Y Z` Z [ [ \4 \ ] ]l ] ^P ^ _  _ `8 ` a, a b bp b cD c d0 d d el e f\ f g0 g hH h i i jX j k  k k lH l m m m n< n o o p( p q( q r$ r s, s t8 t u\ v  v w` x  x y zd { { |X }  }8 }l } } ~< ~d ~  4 |   @ X p       ( @ X t         8 P h        ( @ X    $ < T l        , D \ t        4 L d |       $ < T l        , D \ t        4 L d |  8 H X p         0 H ` x     0 H ` p  $ 4 L d |       $ < T l     $ 4 D \ t t t t t t t t t t t t t t t t t    T h        4 H ` t        ( @ X p       , D \ t        4 L d |        l      @ X p       x  0 H ` x  d          x      p  X p         0 H ` x  T  H X    D T  d   $ < T d   ( 8          ( @ X p  , , , , , ,   l   ( X   \ x    H  4 |   t     D   x   ( p     ( D ` |     0 X     $ L t     D l     8 `     , T     $ L t     @ l     4 `     , T |      L t     @ h     4 \      , T | ¤  À  , h  0 |   L  Ǆ Ǽ 0 l  ( p  ʰ (  < ̤ l   t θ   4  \  D  l   |    d t Մ Ք դ մ       $ 4 D T d t ք ֔ ֤ ִ       $ 4 D T d t ׄ ה פ ״       $ 4 D T d t ؄ ؔ ؤ  P  t  0 ۼ   ` p ݀ ݐ ݠ ݰ          0 @ P ` p ހ ސ ޠ ް          0 @ P ` p ߀ ߐ ߠ ߰         D \   t   , D     ( @ X h   l  p     d         ( @ X  X   8   ,  \     L      l   L H  	 
   l       <   "p $p & )( + . 0 2 4 7p :4 =< @l @ @ AL B C D@ E Gp G H I J L` N P P Q S T V< X8 Zl [h \ ^$ _ a d f g i4 j l o( q tH u w| yl { ~$      l 0   P  h D @          t T     T < P  ( 8 $    <  | L        @   ,   x  h p  h     ĸ Ŵ ƈ , h  ( Ȍ  \ ɸ  $  4 T T T   ج ٰ ڄ   ݤ ބ ߐ p  l   `      | P d <               |  d  t X  X $ d     ` 
 ,     l ,     L    ` ! !@ ! "@ "| " " " # #D #h # $ $, $< $ % &8 '  ' '  '0 '@ ' ' ' ' ( (  (8 (P (h ( ( ( ( ( ( ) )0 )P )p ) *  * * * + +$ +@ +\ +x + + + + , ,  ,< ,X ,t , , , , -  - -4 -l - - - . .  .8 .X .x . . / / /$ /< /h / / / 0 0l 0 0 0 0 0 1  1 10 1H 1 1 1 2 3( 3 4  4 4 5( 5X 5 5 6, 6x 6 7 7X 8  8 9T 9 : :` : ; <8 < < =T = > >p > ?t ? @ A A B Bx B C D, D E4 E F F G$ G H H` H I, I J$ J K| L$ L L MX M N O, O| O P$ P Q Q R R S Sd S T Td T U U U Vh W, W X YD Y ZX Zl Z Z Z Z [  [D [h [ [ \4 \p \ \ ] ], ]D ]\ ]t ] ] ] ] ] ^ ^< ^T ^l ^ ^ ^ ^ ^ _ _, _D _\ _t _ _ _ _ _ ` ` `4 `L `l ` ` ` ` ` a a$ a< aT al a b0 b c$ c< cT cl c c c c c c d d, dD d\ dt d d d d d e e e4 eL ed e| e e e e f f, fL fl f f f gD h< hP h h h i i` ix i jh k mL m n o o o p< p qL r$ s s8 s t( t uP u vp w w x\ x y z z {$ { {   mT + h            >        2                            :       `       
                     (Z       4;b       ;       ;  	  0    	    	    	    	  "  	  F  	  m  	  "  	  :  	 %:  	  h:  	  ;  	  ; C o p y r i g h t   ( c )   2 0 0 3   b y   B i t s t r e a m ,   I n c .   A l l   R i g h t s   R e s e r v e d . 
 C o p y r i g h t   ( c )   2 0 0 6   b y   T a v m j o n g   B a h .   A l l   R i g h t s   R e s e r v e d . 
 D e j a V u   c h a n g e s   a r e   i n   p u b l i c   d o m a i n 
  Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved.
Copyright (c) 2006 by Tavmjong Bah. All Rights Reserved.
DejaVu changes are in public domain
  D e j a V u   S a n s  DejaVu Sans  B o o k  Book  D e j a V u   S a n s  DejaVu Sans  D e j a V u   S a n s  DejaVu Sans  V e r s i o n   2 . 3 7  Version 2.37  D e j a V u S a n s  DejaVuSans  D e j a V u   f o n t s   t e a m  DejaVu fonts team  h t t p : / / d e j a v u . s o u r c e f o r g e . n e t  http://dejavu.sourceforge.net  F o n t s   a r e   ( c )   B i t s t r e a m   ( s e e   b e l o w ) .   D e j a V u   c h a n g e s   a r e   i n   p u b l i c   d o m a i n .   G l y p h s   i m p o r t e d   f r o m   A r e v   f o n t s   a r e   ( c )   T a v m j u n g   B a h   ( s e e   b e l o w ) 
 
 B i t s t r e a m   V e r a   F o n t s   C o p y r i g h t 
 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
 
 C o p y r i g h t   ( c )   2 0 0 3   b y   B i t s t r e a m ,   I n c .   A l l   R i g h t s   R e s e r v e d .   B i t s t r e a m   V e r a   i s 
 a   t r a d e m a r k   o f   B i t s t r e a m ,   I n c . 
 
 P e r m i s s i o n   i s   h e r e b y   g r a n t e d ,   f r e e   o f   c h a r g e ,   t o   a n y   p e r s o n   o b t a i n i n g   a   c o p y 
 o f   t h e   f o n t s   a c c o m p a n y i n g   t h i s   l i c e n s e   ( " F o n t s " )   a n d   a s s o c i a t e d 
 d o c u m e n t a t i o n   f i l e s   ( t h e   " F o n t   S o f t w a r e " ) ,   t o   r e p r o d u c e   a n d   d i s t r i b u t e   t h e 
 F o n t   S o f t w a r e ,   i n c l u d i n g   w i t h o u t   l i m i t a t i o n   t h e   r i g h t s   t o   u s e ,   c o p y ,   m e r g e , 
 p u b l i s h ,   d i s t r i b u t e ,   a n d / o r   s e l l   c o p i e s   o f   t h e   F o n t   S o f t w a r e ,   a n d   t o   p e r m i t 
 p e r s o n s   t o   w h o m   t h e   F o n t   S o f t w a r e   i s   f u r n i s h e d   t o   d o   s o ,   s u b j e c t   t o   t h e 
 f o l l o w i n g   c o n d i t i o n s : 
 
 T h e   a b o v e   c o p y r i g h t   a n d   t r a d e m a r k   n o t i c e s   a n d   t h i s   p e r m i s s i o n   n o t i c e   s h a l l 
 b e   i n c l u d e d   i n   a l l   c o p i e s   o f   o n e   o r   m o r e   o f   t h e   F o n t   S o f t w a r e   t y p e f a c e s . 
 
 T h e   F o n t   S o f t w a r e   m a y   b e   m o d i f i e d ,   a l t e r e d ,   o r   a d d e d   t o ,   a n d   i n   p a r t i c u l a r 
 t h e   d e s i g n s   o f   g l y p h s   o r   c h a r a c t e r s   i n   t h e   F o n t s   m a y   b e   m o d i f i e d   a n d 
 a d d i t i o n a l   g l y p h s   o r   c h a r a c t e r s   m a y   b e   a d d e d   t o   t h e   F o n t s ,   o n l y   i f   t h e   f o n t s 
 a r e   r e n a m e d   t o   n a m e s   n o t   c o n t a i n i n g   e i t h e r   t h e   w o r d s   " B i t s t r e a m "   o r   t h e   w o r d 
 " V e r a " . 
 
 T h i s   L i c e n s e   b e c o m e s   n u l l   a n d   v o i d   t o   t h e   e x t e n t   a p p l i c a b l e   t o   F o n t s   o r   F o n t 
 S o f t w a r e   t h a t   h a s   b e e n   m o d i f i e d   a n d   i s   d i s t r i b u t e d   u n d e r   t h e   " B i t s t r e a m 
 V e r a "   n a m e s . 
 
 T h e   F o n t   S o f t w a r e   m a y   b e   s o l d   a s   p a r t   o f   a   l a r g e r   s o f t w a r e   p a c k a g e   b u t   n o 
 c o p y   o f   o n e   o r   m o r e   o f   t h e   F o n t   S o f t w a r e   t y p e f a c e s   m a y   b e   s o l d   b y   i t s e l f . 
 
 T H E   F O N T   S O F T W A R E   I S   P R O V I D E D   " A S   I S " ,   W I T H O U T   W A R R A N T Y   O F   A N Y   K I N D ,   E X P R E S S 
 O R   I M P L I E D ,   I N C L U D I N G   B U T   N O T   L I M I T E D   T O   A N Y   W A R R A N T I E S   O F   M E R C H A N T A B I L I T Y , 
 F I T N E S S   F O R   A   P A R T I C U L A R   P U R P O S E   A N D   N O N I N F R I N G E M E N T   O F   C O P Y R I G H T ,   P A T E N T , 
 T R A D E M A R K ,   O R   O T H E R   R I G H T .   I N   N O   E V E N T   S H A L L   B I T S T R E A M   O R   T H E   G N O M E 
 F O U N D A T I O N   B E   L I A B L E   F O R   A N Y   C L A I M ,   D A M A G E S   O R   O T H E R   L I A B I L I T Y ,   I N C L U D I N G 
 A N Y   G E N E R A L ,   S P E C I A L ,   I N D I R E C T ,   I N C I D E N T A L ,   O R   C O N S E Q U E N T I A L   D A M A G E S , 
 W H E T H E R   I N   A N   A C T I O N   O F   C O N T R A C T ,   T O R T   O R   O T H E R W I S E ,   A R I S I N G   F R O M ,   O U T   O F 
 T H E   U S E   O R   I N A B I L I T Y   T O   U S E   T H E   F O N T   S O F T W A R E   O R   F R O M   O T H E R   D E A L I N G S   I N   T H E 
 F O N T   S O F T W A R E . 
 
 E x c e p t   a s   c o n t a i n e d   i n   t h i s   n o t i c e ,   t h e   n a m e s   o f   G n o m e ,   t h e   G n o m e 
 F o u n d a t i o n ,   a n d   B i t s t r e a m   I n c . ,   s h a l l   n o t   b e   u s e d   i n   a d v e r t i s i n g   o r 
 o t h e r w i s e   t o   p r o m o t e   t h e   s a l e ,   u s e   o r   o t h e r   d e a l i n g s   i n   t h i s   F o n t   S o f t w a r e 
 w i t h o u t   p r i o r   w r i t t e n   a u t h o r i z a t i o n   f r o m   t h e   G n o m e   F o u n d a t i o n   o r   B i t s t r e a m 
 I n c . ,   r e s p e c t i v e l y .   F o r   f u r t h e r   i n f o r m a t i o n ,   c o n t a c t :   f o n t s   a t   g n o m e   d o t 
 o r g .   
 
 A r e v   F o n t s   C o p y r i g h t 
 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
 
 C o p y r i g h t   ( c )   2 0 0 6   b y   T a v m j o n g   B a h .   A l l   R i g h t s   R e s e r v e d . 
 
 P e r m i s s i o n   i s   h e r e b y   g r a n t e d ,   f r e e   o f   c h a r g e ,   t o   a n y   p e r s o n   o b t a i n i n g 
 a   c o p y   o f   t h e   f o n t s   a c c o m p a n y i n g   t h i s   l i c e n s e   ( " F o n t s " )   a n d 
 a s s o c i a t e d   d o c u m e n t a t i o n   f i l e s   ( t h e   " F o n t   S o f t w a r e " ) ,   t o   r e p r o d u c e 
 a n d   d i s t r i b u t e   t h e   m o d i f i c a t i o n s   t o   t h e   B i t s t r e a m   V e r a   F o n t   S o f t w a r e , 
 i n c l u d i n g   w i t h o u t   l i m i t a t i o n   t h e   r i g h t s   t o   u s e ,   c o p y ,   m e r g e ,   p u b l i s h , 
 d i s t r i b u t e ,   a n d / o r   s e l l   c o p i e s   o f   t h e   F o n t   S o f t w a r e ,   a n d   t o   p e r m i t 
 p e r s o n s   t o   w h o m   t h e   F o n t   S o f t w a r e   i s   f u r n i s h e d   t o   d o   s o ,   s u b j e c t   t o 
 t h e   f o l l o w i n g   c o n d i t i o n s : 
 
 T h e   a b o v e   c o p y r i g h t   a n d   t r a d e m a r k   n o t i c e s   a n d   t h i s   p e r m i s s i o n   n o t i c e 
 s h a l l   b e   i n c l u d e d   i n   a l l   c o p i e s   o f   o n e   o r   m o r e   o f   t h e   F o n t   S o f t w a r e 
 t y p e f a c e s . 
 
 T h e   F o n t   S o f t w a r e   m a y   b e   m o d i f i e d ,   a l t e r e d ,   o r   a d d e d   t o ,   a n d   i n 
 p a r t i c u l a r   t h e   d e s i g n s   o f   g l y p h s   o r   c h a r a c t e r s   i n   t h e   F o n t s   m a y   b e 
 m o d i f i e d   a n d   a d d i t i o n a l   g l y p h s   o r   c h a r a c t e r s   m a y   b e   a d d e d   t o   t h e 
 F o n t s ,   o n l y   i f   t h e   f o n t s   a r e   r e n a m e d   t o   n a m e s   n o t   c o n t a i n i n g   e i t h e r 
 t h e   w o r d s   " T a v m j o n g   B a h "   o r   t h e   w o r d   " A r e v " . 
 
 T h i s   L i c e n s e   b e c o m e s   n u l l   a n d   v o i d   t o   t h e   e x t e n t   a p p l i c a b l e   t o   F o n t s 
 o r   F o n t   S o f t w a r e   t h a t   h a s   b e e n   m o d i f i e d   a n d   i s   d i s t r i b u t e d   u n d e r   t h e   
 " T a v m j o n g   B a h   A r e v "   n a m e s . 
 
 T h e   F o n t   S o f t w a r e   m a y   b e   s o l d   a s   p a r t   o f   a   l a r g e r   s o f t w a r e   p a c k a g e   b u t 
 n o   c o p y   o f   o n e   o r   m o r e   o f   t h e   F o n t   S o f t w a r e   t y p e f a c e s   m a y   b e   s o l d   b y 
 i t s e l f . 
 
 T H E   F O N T   S O F T W A R E   I S   P R O V I D E D   " A S   I S " ,   W I T H O U T   W A R R A N T Y   O F   A N Y   K I N D , 
 E X P R E S S   O R   I M P L I E D ,   I N C L U D I N G   B U T   N O T   L I M I T E D   T O   A N Y   W A R R A N T I E S   O F 
 M E R C H A N T A B I L I T Y ,   F I T N E S S   F O R   A   P A R T I C U L A R   P U R P O S E   A N D   N O N I N F R I N G E M E N T 
 O F   C O P Y R I G H T ,   P A T E N T ,   T R A D E M A R K ,   O R   O T H E R   R I G H T .   I N   N O   E V E N T   S H A L L 
 T A V M J O N G   B A H   B E   L I A B L E   F O R   A N Y   C L A I M ,   D A M A G E S   O R   O T H E R   L I A B I L I T Y , 
 I N C L U D I N G   A N Y   G E N E R A L ,   S P E C I A L ,   I N D I R E C T ,   I N C I D E N T A L ,   O R   C O N S E Q U E N T I A L 
 D A M A G E S ,   W H E T H E R   I N   A N   A C T I O N   O F   C O N T R A C T ,   T O R T   O R   O T H E R W I S E ,   A R I S I N G 
 F R O M ,   O U T   O F   T H E   U S E   O R   I N A B I L I T Y   T O   U S E   T H E   F O N T   S O F T W A R E   O R   F R O M 
 O T H E R   D E A L I N G S   I N   T H E   F O N T   S O F T W A R E . 
 
 E x c e p t   a s   c o n t a i n e d   i n   t h i s   n o t i c e ,   t h e   n a m e   o f   T a v m j o n g   B a h   s h a l l   n o t 
 b e   u s e d   i n   a d v e r t i s i n g   o r   o t h e r w i s e   t o   p r o m o t e   t h e   s a l e ,   u s e   o r   o t h e r 
 d e a l i n g s   i n   t h i s   F o n t   S o f t w a r e   w i t h o u t   p r i o r   w r i t t e n   a u t h o r i z a t i o n 
 f r o m   T a v m j o n g   B a h .   F o r   f u r t h e r   i n f o r m a t i o n ,   c o n t a c t :   t a v m j o n g   @   f r e e 
 .   f r .  Fonts are (c) Bitstream (see below). DejaVu changes are in public domain. Glyphs imported from Arev fonts are (c) Tavmjung Bah (see below)

Bitstream Vera Fonts Copyright
------------------------------

Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. Bitstream Vera is
a trademark of Bitstream, Inc.

Permission is hereby granted, free of charge, to any person obtaining a copy
of the fonts accompanying this license ("Fonts") and associated
documentation files (the "Font Software"), to reproduce and distribute the
Font Software, including without limitation the rights to use, copy, merge,
publish, distribute, and/or sell copies of the Font Software, and to permit
persons to whom the Font Software is furnished to do so, subject to the
following conditions:

The above copyright and trademark notices and this permission notice shall
be included in all copies of one or more of the Font Software typefaces.

The Font Software may be modified, altered, or added to, and in particular
the designs of glyphs or characters in the Fonts may be modified and
additional glyphs or characters may be added to the Fonts, only if the fonts
are renamed to names not containing either the words "Bitstream" or the word
"Vera".

This License becomes null and void to the extent applicable to Fonts or Font
Software that has been modified and is distributed under the "Bitstream
Vera" names.

The Font Software may be sold as part of a larger software package but no
copy of one or more of the Font Software typefaces may be sold by itself.

THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT,
TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL BITSTREAM OR THE GNOME
FOUNDATION BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING
ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES,
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE
FONT SOFTWARE.

Except as contained in this notice, the names of Gnome, the Gnome
Foundation, and Bitstream Inc., shall not be used in advertising or
otherwise to promote the sale, use or other dealings in this Font Software
without prior written authorization from the Gnome Foundation or Bitstream
Inc., respectively. For further information, contact: fonts at gnome dot
org. 

Arev Fonts Copyright
------------------------------

Copyright (c) 2006 by Tavmjong Bah. All Rights Reserved.

Permission is hereby granted, free of charge, to any person obtaining
a copy of the fonts accompanying this license ("Fonts") and
associated documentation files (the "Font Software"), to reproduce
and distribute the modifications to the Bitstream Vera Font Software,
including without limitation the rights to use, copy, merge, publish,
distribute, and/or sell copies of the Font Software, and to permit
persons to whom the Font Software is furnished to do so, subject to
the following conditions:

The above copyright and trademark notices and this permission notice
shall be included in all copies of one or more of the Font Software
typefaces.

The Font Software may be modified, altered, or added to, and in
particular the designs of glyphs or characters in the Fonts may be
modified and additional glyphs or characters may be added to the
Fonts, only if the fonts are renamed to names not containing either
the words "Tavmjong Bah" or the word "Arev".

This License becomes null and void to the extent applicable to Fonts
or Font Software that has been modified and is distributed under the 
"Tavmjong Bah Arev" names.

The Font Software may be sold as part of a larger software package but
no copy of one or more of the Font Software typefaces may be sold by
itself.

THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL
TAVMJONG BAH BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
OTHER DEALINGS IN THE FONT SOFTWARE.

Except as contained in this notice, the name of Tavmjong Bah shall not
be used in advertising or otherwise to promote the sale, use or other
dealings in this Font Software without prior written authorization
from Tavmjong Bah. For further information, contact: tavmjong @ free
. fr.  h t t p : / / d e j a v u . s o u r c e f o r g e . n e t / w i k i / i n d e x . p h p / L i c e n s e  http://dejavu.sourceforge.net/wiki/index.php/License  D e j a V u   S a n s  DejaVu Sans  B o o k  Book        ~ Z                    m           	 
                        ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a                                    b c  d  e        f     g      h    j i k m l n  o q p r s u t v w  x z y { } |    ~       	
     !"#$%&'()*+  ,-./0123456789:  ;<=>?@ABCDEFGHI  JKLMNOPQRS    TUVWXYZ[\]^_`abcdefghi jklm  nopqrstuvwxyz{|}~  	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~         	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`a bcdefghijklmnopqrstuvw xyz{|}~ 	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ 	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ 	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ 	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ 	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~	 											
																						 	!	"	#	$	%	&	'	(	)	*	+	,	-	.	/	0	1	2	3	4	5	6	7	8	9	:	;	<	=	>	?	@	A	B	C	D	E	F	G	H	I	J	K	L	M	N	O	P	Q	R	S	T	U	V	W	X	Y	Z	[	\	]	^	_	`	a	b	c	d	e	f	g	h	i	j	k	l	m	n	o	p	q	r	s	t	u	v	w	x	y	z	{	|	}	~																																																																																																																																	
 








	























 
!
"
#
$
%
&
'
(
)
*
+
,
-
.
/
0
1
2
3
4
5
6
7
8
9
:
;
<
=
>
?
@
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
[
\
]
^
_
`
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
{
|
}
~
































































































































 	
             !"#$%&'( )*+,-./0  123456789 :;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~   	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~             	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ 	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~  	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ 	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ 	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ 	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ 	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~   	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ 	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ 	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ 	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ 	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklm	sfthyphenAmacronamacronAbreveabreveAogonekaogonekCcircumflexccircumflex
Cdotaccent
cdotaccentDcarondcaronDcroatEmacronemacronEbreveebreve
Edotaccent
edotaccentEogonekeogonekEcaronecaronGcircumflexgcircumflex
Gdotaccent
gdotaccentGcommaaccentgcommaaccentHcircumflexhcircumflexHbarhbarItildeitildeImacronimacronIbreveibreveIogonekiogonekIJijJcircumflexjcircumflexKcommaaccentkcommaaccentkgreenlandicLacutelacuteLcommaaccentlcommaaccentLcaronlcaronLdotldotNacutenacuteNcommaaccentncommaaccentNcaronncaronnapostropheEngengOmacronomacronObreveobreveOhungarumlautohungarumlautRacuteracuteRcommaaccentrcommaaccentRcaronrcaronSacutesacuteScircumflexscircumflexTcommaaccenttcommaaccentTcarontcaronTbartbarUtildeutildeUmacronumacronUbreveubreveUringuringUhungarumlautuhungarumlautUogonekuogonekWcircumflexwcircumflexYcircumflexycircumflexZacutezacute
Zdotaccent
zdotaccentlongsuni0180uni0181uni0182uni0183uni0184uni0185uni0186uni0187uni0188uni0189uni018Auni018Buni018Cuni018Duni018Euni018Funi0190uni0191uni0193uni0194uni0195uni0196uni0197uni0198uni0199uni019Auni019Buni019Cuni019Duni019Euni019FOhornohornuni01A2uni01A3uni01A4uni01A5uni01A6uni01A7uni01A8uni01A9uni01AAuni01ABuni01ACuni01ADuni01AEUhornuhornuni01B1uni01B2uni01B3uni01B4uni01B5uni01B6uni01B7uni01B8uni01B9uni01BAuni01BBuni01BCuni01BDuni01BEuni01BFuni01C0uni01C1uni01C2uni01C3uni01C4uni01C5uni01C6uni01C7uni01C8uni01C9uni01CAuni01CBuni01CCuni01CDuni01CEuni01CFuni01D0uni01D1uni01D2uni01D3uni01D4uni01D5uni01D6uni01D7uni01D8uni01D9uni01DAuni01DBuni01DCuni01DDuni01DEuni01DFuni01E0uni01E1uni01E2uni01E3uni01E4uni01E5Gcarongcaronuni01E8uni01E9uni01EAuni01EBuni01ECuni01EDuni01EEuni01EFuni01F0uni01F1uni01F2uni01F3uni01F4uni01F5uni01F6uni01F7uni01F8uni01F9
Aringacute
aringacuteAEacuteaeacuteOslashacuteoslashacuteuni0200uni0201uni0202uni0203uni0204uni0205uni0206uni0207uni0208uni0209uni020Auni020Buni020Cuni020Duni020Euni020Funi0210uni0211uni0212uni0213uni0214uni0215uni0216uni0217Scommaaccentscommaaccentuni021Auni021Buni021Cuni021Duni021Euni021Funi0220uni0221uni0222uni0223uni0224uni0225uni0226uni0227uni0228uni0229uni022Auni022Buni022Cuni022Duni022Euni022Funi0230uni0231uni0232uni0233uni0234uni0235uni0236dotlessjuni0238uni0239uni023Auni023Buni023Cuni023Duni023Euni023Funi0240uni0241uni0242uni0243uni0244uni0245uni0246uni0247uni0248uni0249uni024Auni024Buni024Cuni024Duni024Euni024Funi0250uni0251uni0252uni0253uni0254uni0255uni0256uni0257uni0258uni0259uni025Auni025Buni025Cuni025Duni025Euni025Funi0260uni0261uni0262uni0263uni0264uni0265uni0266uni0267uni0268uni0269uni026Auni026Buni026Cuni026Duni026Euni026Funi0270uni0271uni0272uni0273uni0274uni0275uni0276uni0277uni0278uni0279uni027Auni027Buni027Cuni027Duni027Euni027Funi0280uni0281uni0282uni0283uni0284uni0285uni0286uni0287uni0288uni0289uni028Auni028Buni028Cuni028Duni028Euni028Funi0290uni0291uni0292uni0293uni0294uni0295uni0296uni0297uni0298uni0299uni029Auni029Buni029Cuni029Duni029Euni029Funi02A0uni02A1uni02A2uni02A3uni02A4uni02A5uni02A6uni02A7uni02A8uni02A9uni02AAuni02ABuni02ACuni02ADuni02AEuni02AFuni02B0uni02B1uni02B2uni02B3uni02B4uni02B5uni02B6uni02B7uni02B8uni02B9uni02BAuni02BBuni02BCuni02BDuni02BEuni02BFuni02C0uni02C1uni02C2uni02C3uni02C4uni02C5uni02C8uni02C9uni02CAuni02CBuni02CCuni02CDuni02CEuni02CFuni02D0uni02D1uni02D2uni02D3uni02D4uni02D5uni02D6uni02D7uni02DEuni02DFuni02E0uni02E1uni02E2uni02E3uni02E4uni02E5uni02E6uni02E7uni02E8uni02E9uni02ECuni02EDuni02EEuni02F3uni02F7	gravecomb	acutecombuni0302	tildecombuni0304uni0305uni0306uni0307uni0308hookabovecombuni030Auni030Buni030Cuni030Duni030Euni030Funi0310uni0311uni0312uni0313uni0314uni0315uni0316uni0317uni0318uni0319uni031Auni031Buni031Cuni031Duni031Euni031Funi0320uni0321uni0322dotbelowcombuni0324uni0325uni0326uni0327uni0328uni0329uni032Auni032Buni032Cuni032Duni032Euni032Funi0330uni0331uni0332uni0333uni0334uni0335uni0336uni0337uni0338uni0339uni033Auni033Buni033Cuni033Duni033Euni033Funi0340uni0341uni0342uni0343uni0344uni0345uni0346uni0347uni0348uni0349uni034Auni034Buni034Cuni034Duni034Euni034Funi0351uni0352uni0353uni0357uni0358uni035Auni035Cuni035Duni035Euni035Funi0360uni0361uni0362uni0370uni0371uni0372uni0373uni0374uni0375uni0376uni0377uni037Auni037Buni037Cuni037Duni037Euni037Ftonosdieresistonos
Alphatonos	anoteleiaEpsilontonosEtatonos	IotatonosOmicrontonosUpsilontonos
OmegatonosiotadieresistonosAlphaBetaGammauni0394EpsilonZetaEtaThetaIotaKappaLambdaMuNuXiOmicronPiRhoSigmaTauUpsilonPhiChiPsiIotadieresisUpsilondieresis
alphatonosepsilontonosetatonos	iotatonosupsilondieresistonosalphabetagammadeltaepsilonzetaetathetaiotakappalambdauni03BCnuxiomicronrhosigma1sigmatauupsilonphichipsiomegaiotadieresisupsilondieresisomicrontonosupsilontonos
omegatonosuni03CFuni03D0theta1Upsilon1uni03D3uni03D4phi1omega1uni03D7uni03D8uni03D9uni03DAuni03DBuni03DCuni03DDuni03DEuni03DFuni03E0uni03E1uni03E2uni03E3uni03E4uni03E5uni03E6uni03E7uni03E8uni03E9uni03EAuni03EBuni03ECuni03EDuni03EEuni03EFuni03F0uni03F1uni03F2uni03F3uni03F4uni03F5uni03F6uni03F7uni03F8uni03F9uni03FAuni03FBuni03FCuni03FDuni03FEuni03FFuni0400uni0401uni0402uni0403uni0404uni0405uni0406uni0407uni0408uni0409uni040Auni040Buni040Cuni040Duni040Euni040Funi0410uni0411uni0412uni0413uni0414uni0415uni0416uni0417uni0418uni0419uni041Auni041Buni041Cuni041Duni041Euni041Funi0420uni0421uni0422uni0423uni0424uni0425uni0426uni0427uni0428uni0429uni042Auni042Buni042Cuni042Duni042Euni042Funi0430uni0431uni0432uni0433uni0434uni0435uni0436uni0437uni0438uni0439uni043Auni043Buni043Cuni043Duni043Euni043Funi0440uni0441uni0442uni0443uni0444uni0445uni0446uni0447uni0448uni0449uni044Auni044Buni044Cuni044Duni044Euni044Funi0450uni0451uni0452uni0453uni0454uni0455uni0456uni0457uni0458uni0459uni045Auni045Buni045Cuni045Duni045Euni045Funi0460uni0461uni0462uni0463uni0464uni0465uni0466uni0467uni0468uni0469uni046Auni046Buni046Cuni046Duni046Euni046Funi0470uni0471uni0472uni0473uni0474uni0475uni0476uni0477uni0478uni0479uni047Auni047Buni047Cuni047Duni047Euni047Funi0480uni0481uni0482uni0483uni0484uni0485uni0486uni0487uni0488uni0489uni048Auni048Buni048Cuni048Duni048Euni048Funi0490uni0491uni0492uni0493uni0494uni0495uni0496uni0497uni0498uni0499uni049Auni049Buni049Cuni049Duni049Euni049Funi04A0uni04A1uni04A2uni04A3uni04A4uni04A5uni04A6uni04A7uni04A8uni04A9uni04AAuni04ABuni04ACuni04ADuni04AEuni04AFuni04B0uni04B1uni04B2uni04B3uni04B4uni04B5uni04B6uni04B7uni04B8uni04B9uni04BAuni04BBuni04BCuni04BDuni04BEuni04BFuni04C0uni04C1uni04C2uni04C3uni04C4uni04C5uni04C6uni04C7uni04C8uni04C9uni04CAuni04CBuni04CCuni04CDuni04CEuni04CFuni04D0uni04D1uni04D2uni04D3uni04D4uni04D5uni04D6uni04D7uni04D8uni04D9uni04DAuni04DBuni04DCuni04DDuni04DEuni04DFuni04E0uni04E1uni04E2uni04E3uni04E4uni04E5uni04E6uni04E7uni04E8uni04E9uni04EAuni04EBuni04ECuni04EDuni04EEuni04EFuni04F0uni04F1uni04F2uni04F3uni04F4uni04F5uni04F6uni04F7uni04F8uni04F9uni04FAuni04FBuni04FCuni04FDuni04FEuni04FFuni0500uni0501uni0502uni0503uni0504uni0505uni0506uni0507uni0508uni0509uni050Auni050Buni050Cuni050Duni050Euni050Funi0510uni0511uni0512uni0513uni0514uni0515uni0516uni0517uni0518uni0519uni051Auni051Buni051Cuni051Duni051Euni051Funi0520uni0521uni0522uni0523uni0524uni0525uni0531uni0532uni0533uni0534uni0535uni0536uni0537uni0538uni0539uni053Auni053Buni053Cuni053Duni053Euni053Funi0540uni0541uni0542uni0543uni0544uni0545uni0546uni0547uni0548uni0549uni054Auni054Buni054Cuni054Duni054Euni054Funi0550uni0551uni0552uni0553uni0554uni0555uni0556uni0559uni055Auni055Buni055Cuni055Duni055Euni055Funi0561uni0562uni0563uni0564uni0565uni0566uni0567uni0568uni0569uni056Auni056Buni056Cuni056Duni056Euni056Funi0570uni0571uni0572uni0573uni0574uni0575uni0576uni0577uni0578uni0579uni057Auni057Buni057Cuni057Duni057Euni057Funi0580uni0581uni0582uni0583uni0584uni0585uni0586uni0587uni0589uni058Auni05B0uni05B1uni05B2uni05B3uni05B4uni05B5uni05B6uni05B7uni05B8uni05B9uni05BAuni05BBuni05BCuni05BDuni05BEuni05BFuni05C0uni05C1uni05C2uni05C3uni05C6uni05C7uni05D0uni05D1uni05D2uni05D3uni05D4uni05D5uni05D6uni05D7uni05D8uni05D9uni05DAuni05DBuni05DCuni05DDuni05DEuni05DFuni05E0uni05E1uni05E2uni05E3uni05E4uni05E5uni05E6uni05E7uni05E8uni05E9uni05EAuni05F0uni05F1uni05F2uni05F3uni05F4uni0606uni0607uni0609uni060Auni060Cuni0615uni061Buni061Funi0621uni0622uni0623uni0624uni0625uni0626uni0627uni0628uni0629uni062Auni062Buni062Cuni062Duni062Euni062Funi0630uni0631uni0632uni0633uni0634uni0635uni0636uni0637uni0638uni0639uni063Auni0640uni0641uni0642uni0643uni0644uni0645uni0646uni0647uni0648uni0649uni064Auni064Buni064Cuni064Duni064Euni064Funi0650uni0651uni0652uni0653uni0654uni0655uni0657uni065Auni0660uni0661uni0662uni0663uni0664uni0665uni0666uni0667uni0668uni0669uni066Auni066Buni066Cuni066Duni066Euni066Funi0670uni0674uni0679uni067Auni067Buni067Cuni067Duni067Euni067Funi0680uni0681uni0682uni0683uni0684uni0685uni0686uni0687uni0688uni0689uni068Auni068Buni068Cuni068Duni068Euni068Funi0690uni0691uni0692uni0693uni0694uni0695uni0696uni0697uni0698uni0699uni069Auni069Buni069Cuni069Duni069Euni069Funi06A0uni06A1uni06A2uni06A3uni06A4uni06A5uni06A6uni06A7uni06A8uni06A9uni06AAuni06ABuni06ACuni06ADuni06AEuni06AFuni06B0uni06B1uni06B2uni06B3uni06B4uni06B5uni06B6uni06B7uni06B8uni06B9uni06BAuni06BBuni06BCuni06BDuni06BEuni06BFuni06C6uni06C7uni06C8uni06CBuni06CCuni06CEuni06D0uni06D5uni06F0uni06F1uni06F2uni06F3uni06F4uni06F5uni06F6uni06F7uni06F8uni06F9uni07C0uni07C1uni07C2uni07C3uni07C4uni07C5uni07C6uni07C7uni07C8uni07C9uni07CAuni07CBuni07CCuni07CDuni07CEuni07CFuni07D0uni07D1uni07D2uni07D3uni07D4uni07D5uni07D6uni07D7uni07D8uni07D9uni07DAuni07DBuni07DCuni07DDuni07DEuni07DFuni07E0uni07E1uni07E2uni07E3uni07E4uni07E5uni07E6uni07E7uni07EBuni07ECuni07EDuni07EEuni07EFuni07F0uni07F1uni07F2uni07F3uni07F4uni07F5uni07F8uni07F9uni07FAuni0E3Funi0E81uni0E82uni0E84uni0E87uni0E88uni0E8Auni0E8Duni0E94uni0E95uni0E96uni0E97uni0E99uni0E9Auni0E9Buni0E9Cuni0E9Duni0E9Euni0E9Funi0EA1uni0EA2uni0EA3uni0EA5uni0EA7uni0EAAuni0EABuni0EADuni0EAEuni0EAFuni0EB0uni0EB1uni0EB2uni0EB3uni0EB4uni0EB5uni0EB6uni0EB7uni0EB8uni0EB9uni0EBBuni0EBCuni0EBDuni0EC0uni0EC1uni0EC2uni0EC3uni0EC4uni0EC6uni0EC8uni0EC9uni0ECAuni0ECBuni0ECCuni0ECDuni0ED0uni0ED1uni0ED2uni0ED3uni0ED4uni0ED5uni0ED6uni0ED7uni0ED8uni0ED9uni0EDCuni0EDDuni10A0uni10A1uni10A2uni10A3uni10A4uni10A5uni10A6uni10A7uni10A8uni10A9uni10AAuni10ABuni10ACuni10ADuni10AEuni10AFuni10B0uni10B1uni10B2uni10B3uni10B4uni10B5uni10B6uni10B7uni10B8uni10B9uni10BAuni10BBuni10BCuni10BDuni10BEuni10BFuni10C0uni10C1uni10C2uni10C3uni10C4uni10C5uni10D0uni10D1uni10D2uni10D3uni10D4uni10D5uni10D6uni10D7uni10D8uni10D9uni10DAuni10DBuni10DCuni10DDuni10DEuni10DFuni10E0uni10E1uni10E2uni10E3uni10E4uni10E5uni10E6uni10E7uni10E8uni10E9uni10EAuni10EBuni10ECuni10EDuni10EEuni10EFuni10F0uni10F1uni10F2uni10F3uni10F4uni10F5uni10F6uni10F7uni10F8uni10F9uni10FAuni10FBuni10FCuni1401uni1402uni1403uni1404uni1405uni1406uni1407uni1409uni140Auni140Buni140Cuni140Duni140Euni140Funi1410uni1411uni1412uni1413uni1414uni1415uni1416uni1417uni1418uni1419uni141Auni141Buni141Duni141Euni141Funi1420uni1421uni1422uni1423uni1424uni1425uni1426uni1427uni1428uni1429uni142Auni142Buni142Cuni142Duni142Euni142Funi1430uni1431uni1432uni1433uni1434uni1435uni1437uni1438uni1439uni143Auni143Buni143Cuni143Duni143Euni143Funi1440uni1441uni1442uni1443uni1444uni1445uni1446uni1447uni1448uni1449uni144Auni144Cuni144Duni144Euni144Funi1450uni1451uni1452uni1454uni1455uni1456uni1457uni1458uni1459uni145Auni145Buni145Cuni145Duni145Euni145Funi1460uni1461uni1462uni1463uni1464uni1465uni1466uni1467uni1468uni1469uni146Auni146Buni146Cuni146Duni146Euni146Funi1470uni1471uni1472uni1473uni1474uni1475uni1476uni1477uni1478uni1479uni147Auni147Buni147Cuni147Duni147Euni147Funi1480uni1481uni1482uni1483uni1484uni1485uni1486uni1487uni1488uni1489uni148Auni148Buni148Cuni148Duni148Euni148Funi1490uni1491uni1492uni1493uni1494uni1495uni1496uni1497uni1498uni1499uni149Auni149Buni149Cuni149Duni149Euni149Funi14A0uni14A1uni14A2uni14A3uni14A4uni14A5uni14A6uni14A7uni14A8uni14A9uni14AAuni14ABuni14ACuni14ADuni14AEuni14AFuni14B0uni14B1uni14B2uni14B3uni14B4uni14B5uni14B6uni14B7uni14B8uni14B9uni14BAuni14BBuni14BCuni14BDuni14C0uni14C1uni14C2uni14C3uni14C4uni14C5uni14C6uni14C7uni14C8uni14C9uni14CAuni14CBuni14CCuni14CDuni14CEuni14CFuni14D0uni14D1uni14D2uni14D3uni14D4uni14D5uni14D6uni14D7uni14D8uni14D9uni14DAuni14DBuni14DCuni14DDuni14DEuni14DFuni14E0uni14E1uni14E2uni14E3uni14E4uni14E5uni14E6uni14E7uni14E8uni14E9uni14EAuni14ECuni14EDuni14EEuni14EFuni14F0uni14F1uni14F2uni14F3uni14F4uni14F5uni14F6uni14F7uni14F8uni14F9uni14FAuni14FBuni14FCuni14FDuni14FEuni14FFuni1500uni1501uni1502uni1503uni1504uni1505uni1506uni1507uni1510uni1511uni1512uni1513uni1514uni1515uni1516uni1517uni1518uni1519uni151Auni151Buni151Cuni151Duni151Euni151Funi1520uni1521uni1522uni1523uni1524uni1525uni1526uni1527uni1528uni1529uni152Auni152Buni152Cuni152Duni152Euni152Funi1530uni1531uni1532uni1533uni1534uni1535uni1536uni1537uni1538uni1539uni153Auni153Buni153Cuni153Duni153Euni1540uni1541uni1542uni1543uni1544uni1545uni1546uni1547uni1548uni1549uni154Auni154Buni154Cuni154Duni154Euni154Funi1550uni1552uni1553uni1554uni1555uni1556uni1557uni1558uni1559uni155Auni155Buni155Cuni155Duni155Euni155Funi1560uni1561uni1562uni1563uni1564uni1565uni1566uni1567uni1568uni1569uni156Auni1574uni1575uni1576uni1577uni1578uni1579uni157Auni157Buni157Cuni157Duni157Euni157Funi1580uni1581uni1582uni1583uni1584uni1585uni158Auni158Buni158Cuni158Duni158Euni158Funi1590uni1591uni1592uni1593uni1594uni1595uni1596uni15A0uni15A1uni15A2uni15A3uni15A4uni15A5uni15A6uni15A7uni15A8uni15A9uni15AAuni15ABuni15ACuni15ADuni15AEuni15AFuni15DEuni15E1uni1646uni1647uni166Euni166Funi1670uni1671uni1672uni1673uni1674uni1675uni1676uni1680uni1681uni1682uni1683uni1684uni1685uni1686uni1687uni1688uni1689uni168Auni168Buni168Cuni168Duni168Euni168Funi1690uni1691uni1692uni1693uni1694uni1695uni1696uni1697uni1698uni1699uni169Auni169Buni169Cuni1D00uni1D01uni1D02uni1D03uni1D04uni1D05uni1D06uni1D07uni1D08uni1D09uni1D0Auni1D0Buni1D0Cuni1D0Duni1D0Euni1D0Funi1D10uni1D11uni1D12uni1D13uni1D14uni1D16uni1D17uni1D18uni1D19uni1D1Auni1D1Buni1D1Cuni1D1Duni1D1Euni1D1Funi1D20uni1D21uni1D22uni1D23uni1D26uni1D27uni1D28uni1D29uni1D2Auni1D2Buni1D2Cuni1D2Duni1D2Euni1D30uni1D31uni1D32uni1D33uni1D34uni1D35uni1D36uni1D37uni1D38uni1D39uni1D3Auni1D3Buni1D3Cuni1D3Duni1D3Euni1D3Funi1D40uni1D41uni1D42uni1D43uni1D44uni1D45uni1D46uni1D47uni1D48uni1D49uni1D4Auni1D4Buni1D4Cuni1D4Duni1D4Euni1D4Funi1D50uni1D51uni1D52uni1D53uni1D54uni1D55uni1D56uni1D57uni1D58uni1D59uni1D5Auni1D5Buni1D5Duni1D5Euni1D5Funi1D60uni1D61uni1D62uni1D63uni1D64uni1D65uni1D66uni1D67uni1D68uni1D69uni1D6Auni1D77uni1D78uni1D7Buni1D7Duni1D85uni1D9Buni1D9Cuni1D9Duni1D9Euni1D9Funi1DA0uni1DA1uni1DA2uni1DA3uni1DA4uni1DA5uni1DA6uni1DA7uni1DA8uni1DA9uni1DAAuni1DABuni1DACuni1DADuni1DAEuni1DAFuni1DB0uni1DB1uni1DB2uni1DB3uni1DB4uni1DB5uni1DB6uni1DB7uni1DB8uni1DB9uni1DBAuni1DBBuni1DBCuni1DBDuni1DBEuni1DBFuni1DC4uni1DC5uni1DC6uni1DC7uni1DC8uni1DC9uni1E00uni1E01uni1E02uni1E03uni1E04uni1E05uni1E06uni1E07uni1E08uni1E09uni1E0Auni1E0Buni1E0Cuni1E0Duni1E0Euni1E0Funi1E10uni1E11uni1E12uni1E13uni1E14uni1E15uni1E16uni1E17uni1E18uni1E19uni1E1Auni1E1Buni1E1Cuni1E1Duni1E1Euni1E1Funi1E20uni1E21uni1E22uni1E23uni1E24uni1E25uni1E26uni1E27uni1E28uni1E29uni1E2Auni1E2Buni1E2Cuni1E2Duni1E2Euni1E2Funi1E30uni1E31uni1E32uni1E33uni1E34uni1E35uni1E36uni1E37uni1E38uni1E39uni1E3Auni1E3Buni1E3Cuni1E3Duni1E3Euni1E3Funi1E40uni1E41uni1E42uni1E43uni1E44uni1E45uni1E46uni1E47uni1E48uni1E49uni1E4Auni1E4Buni1E4Cuni1E4Duni1E4Euni1E4Funi1E50uni1E51uni1E52uni1E53uni1E54uni1E55uni1E56uni1E57uni1E58uni1E59uni1E5Auni1E5Buni1E5Cuni1E5Duni1E5Euni1E5Funi1E60uni1E61uni1E62uni1E63uni1E64uni1E65uni1E66uni1E67uni1E68uni1E69uni1E6Auni1E6Buni1E6Cuni1E6Duni1E6Euni1E6Funi1E70uni1E71uni1E72uni1E73uni1E74uni1E75uni1E76uni1E77uni1E78uni1E79uni1E7Auni1E7Buni1E7Cuni1E7Duni1E7Euni1E7FWgravewgraveWacutewacute	Wdieresis	wdieresisuni1E86uni1E87uni1E88uni1E89uni1E8Auni1E8Buni1E8Cuni1E8Duni1E8Euni1E8Funi1E90uni1E91uni1E92uni1E93uni1E94uni1E95uni1E96uni1E97uni1E98uni1E99uni1E9Auni1E9Buni1E9Cuni1E9Duni1E9Euni1E9Funi1EA0uni1EA1uni1EA2uni1EA3uni1EA4uni1EA5uni1EA6uni1EA7uni1EA8uni1EA9uni1EAAuni1EABuni1EACuni1EADuni1EAEuni1EAFuni1EB0uni1EB1uni1EB2uni1EB3uni1EB4uni1EB5uni1EB6uni1EB7uni1EB8uni1EB9uni1EBAuni1EBBuni1EBCuni1EBDuni1EBEuni1EBFuni1EC0uni1EC1uni1EC2uni1EC3uni1EC4uni1EC5uni1EC6uni1EC7uni1EC8uni1EC9uni1ECAuni1ECBuni1ECCuni1ECDuni1ECEuni1ECFuni1ED0uni1ED1uni1ED2uni1ED3uni1ED4uni1ED5uni1ED6uni1ED7uni1ED8uni1ED9uni1EDAuni1EDBuni1EDCuni1EDDuni1EDEuni1EDFuni1EE0uni1EE1uni1EE2uni1EE3uni1EE4uni1EE5uni1EE6uni1EE7uni1EE8uni1EE9uni1EEAuni1EEBuni1EECuni1EEDuni1EEEuni1EEFuni1EF0uni1EF1Ygraveygraveuni1EF4uni1EF5uni1EF6uni1EF7uni1EF8uni1EF9uni1EFAuni1EFBuni1F00uni1F01uni1F02uni1F03uni1F04uni1F05uni1F06uni1F07uni1F08uni1F09uni1F0Auni1F0Buni1F0Cuni1F0Duni1F0Euni1F0Funi1F10uni1F11uni1F12uni1F13uni1F14uni1F15uni1F18uni1F19uni1F1Auni1F1Buni1F1Cuni1F1Duni1F20uni1F21uni1F22uni1F23uni1F24uni1F25uni1F26uni1F27uni1F28uni1F29uni1F2Auni1F2Buni1F2Cuni1F2Duni1F2Euni1F2Funi1F30uni1F31uni1F32uni1F33uni1F34uni1F35uni1F36uni1F37uni1F38uni1F39uni1F3Auni1F3Buni1F3Cuni1F3Duni1F3Euni1F3Funi1F40uni1F41uni1F42uni1F43uni1F44uni1F45uni1F48uni1F49uni1F4Auni1F4Buni1F4Cuni1F4Duni1F50uni1F51uni1F52uni1F53uni1F54uni1F55uni1F56uni1F57uni1F59uni1F5Buni1F5Duni1F5Funi1F60uni1F61uni1F62uni1F63uni1F64uni1F65uni1F66uni1F67uni1F68uni1F69uni1F6Auni1F6Buni1F6Cuni1F6Duni1F6Euni1F6Funi1F70uni1F71uni1F72uni1F73uni1F74uni1F75uni1F76uni1F77uni1F78uni1F79uni1F7Auni1F7Buni1F7Cuni1F7Duni1F80uni1F81uni1F82uni1F83uni1F84uni1F85uni1F86uni1F87uni1F88uni1F89uni1F8Auni1F8Buni1F8Cuni1F8Duni1F8Euni1F8Funi1F90uni1F91uni1F92uni1F93uni1F94uni1F95uni1F96uni1F97uni1F98uni1F99uni1F9Auni1F9Buni1F9Cuni1F9Duni1F9Euni1F9Funi1FA0uni1FA1uni1FA2uni1FA3uni1FA4uni1FA5uni1FA6uni1FA7uni1FA8uni1FA9uni1FAAuni1FABuni1FACuni1FADuni1FAEuni1FAFuni1FB0uni1FB1uni1FB2uni1FB3uni1FB4uni1FB6uni1FB7uni1FB8uni1FB9uni1FBAuni1FBBuni1FBCuni1FBDuni1FBEuni1FBFuni1FC0uni1FC1uni1FC2uni1FC3uni1FC4uni1FC6uni1FC7uni1FC8uni1FC9uni1FCAuni1FCBuni1FCCuni1FCDuni1FCEuni1FCFuni1FD0uni1FD1uni1FD2uni1FD3uni1FD6uni1FD7uni1FD8uni1FD9uni1FDAuni1FDBuni1FDDuni1FDEuni1FDFuni1FE0uni1FE1uni1FE2uni1FE3uni1FE4uni1FE5uni1FE6uni1FE7uni1FE8uni1FE9uni1FEAuni1FEBuni1FECuni1FEDuni1FEEuni1FEFuni1FF2uni1FF3uni1FF4uni1FF6uni1FF7uni1FF8uni1FF9uni1FFAuni1FFBuni1FFCuni1FFDuni1FFEuni2000uni2001uni2002uni2003uni2004uni2005uni2006uni2007uni2008uni2009uni200Auni200Buni200Cuni200Duni200Euni200Funi2010uni2011
figuredashuni2015uni2016underscoredblquotereverseduni201Funi2023onedotenleadertwodotenleaderuni2027uni2028uni2029uni202Auni202Buni202Cuni202Duni202Euni202Funi2031minuteseconduni2034uni2035uni2036uni2037uni2038uni203B	exclamdbluni203Duni203Euni203Funi2040uni2041uni2042uni2043uni2045uni2046uni2047uni2048uni2049uni204Auni204Buni204Cuni204Duni204Euni204Funi2050uni2051uni2052uni2053uni2054uni2055uni2056uni2057uni2058uni2059uni205Auni205Buni205Cuni205Duni205Euni205Funi2060uni2061uni2062uni2063uni2064uni206Auni206Buni206Cuni206Duni206Euni206Funi2070uni2071uni2074uni2075uni2076uni2077uni2078uni2079uni207Auni207Buni207Cuni207Duni207Euni207Funi2080uni2081uni2082uni2083uni2084uni2085uni2086uni2087uni2088uni2089uni208Auni208Buni208Cuni208Duni208Euni2090uni2091uni2092uni2093uni2094uni2095uni2096uni2097uni2098uni2099uni209Auni209Buni209Cuni20A0colonmonetaryuni20A2lirauni20A5uni20A6pesetauni20A8uni20A9uni20AAdongEurouni20ADuni20AEuni20AFuni20B0uni20B1uni20B2uni20B3uni20B4uni20B5uni20B8uni20B9uni20BAuni20BDuni20D0uni20D1uni20D6uni20D7uni20DBuni20DCuni20E1uni2100uni2101uni2102uni2103uni2104uni2105uni2106uni2107uni2108uni2109uni210Buni210Cuni210Duni210Euni210Funi2110Ifrakturuni2112uni2113uni2114uni2115uni2116uni2117weierstrassuni2119uni211Auni211BRfrakturuni211Dprescriptionuni211Funi2120uni2121uni2123uni2124uni2125uni2126uni2127uni2128uni2129uni212Auni212Buni212Cuni212D	estimateduni212Funi2130uni2131uni2132uni2133uni2134alephuni2136uni2137uni2138uni2139uni213Auni213Buni213Cuni213Duni213Euni213Funi2140uni2141uni2142uni2143uni2144uni2145uni2146uni2147uni2148uni2149uni214Buni214Euni2150uni2151uni2152onethird	twothirdsuni2155uni2156uni2157uni2158uni2159uni215A	oneeighththreeeighthsfiveeighthsseveneighthsuni215Funi2160uni2161uni2162uni2163uni2164uni2165uni2166uni2167uni2168uni2169uni216Auni216Buni216Cuni216Duni216Euni216Funi2170uni2171uni2172uni2173uni2174uni2175uni2176uni2177uni2178uni2179uni217Auni217Buni217Cuni217Duni217Euni217Funi2180uni2181uni2182uni2183uni2184uni2185uni2189	arrowleftarrowup
arrowright	arrowdown	arrowboth	arrowupdnuni2196uni2197uni2198uni2199uni219Auni219Buni219Cuni219Duni219Euni219Funi21A0uni21A1uni21A2uni21A3uni21A4uni21A5uni21A6uni21A7arrowupdnbseuni21A9uni21AAuni21ABuni21ACuni21ADuni21AEuni21AFuni21B0uni21B1uni21B2uni21B3uni21B4carriagereturnuni21B6uni21B7uni21B8uni21B9uni21BAuni21BBuni21BCuni21BDuni21BEuni21BFuni21C0uni21C1uni21C2uni21C3uni21C4uni21C5uni21C6uni21C7uni21C8uni21C9uni21CAuni21CBuni21CCuni21CDuni21CEuni21CFarrowdblleft
arrowdbluparrowdblrightarrowdbldownarrowdblbothuni21D5uni21D6uni21D7uni21D8uni21D9uni21DAuni21DBuni21DCuni21DDuni21DEuni21DFuni21E0uni21E1uni21E2uni21E3uni21E4uni21E5uni21E6uni21E7uni21E8uni21E9uni21EAuni21EBuni21ECuni21EDuni21EEuni21EFuni21F0uni21F1uni21F2uni21F3uni21F4uni21F5uni21F6uni21F7uni21F8uni21F9uni21FAuni21FBuni21FCuni21FDuni21FEuni21FF	universaluni2201existentialuni2204emptysetgradientelement
notelementuni220Asuchthatuni220Cuni220Duni220Euni2210uni2213uni2214uni2215uni2216asteriskmathuni2218uni2219uni221Buni221Cproportional
orthogonalangleuni2221uni2222uni2223uni2224uni2225uni2226
logicaland	logicalorintersectionunionuni222Cuni222Duni222Euni222Funi2230uni2231uni2232uni2233	thereforeuni2235uni2236uni2237uni2238uni2239uni223Auni223Bsimilaruni223Duni223Euni223Funi2240uni2241uni2242uni2243uni2244	congruentuni2246uni2247uni2249uni224Auni224Buni224Cuni224Duni224Euni224Funi2250uni2251uni2252uni2253uni2254uni2255uni2256uni2257uni2258uni2259uni225Auni225Buni225Cuni225Duni225Euni225Fequivalenceuni2262uni2263uni2266uni2267uni2268uni2269uni226Auni226Buni226Cuni226Duni226Euni226Funi2270uni2271uni2272uni2273uni2274uni2275uni2276uni2277uni2278uni2279uni227Auni227Buni227Cuni227Duni227Euni227Funi2280uni2281propersubsetpropersuperset	notsubsetuni2285reflexsubsetreflexsupersetuni2288uni2289uni228Auni228Buni228Cuni228Duni228Euni228Funi2290uni2291uni2292uni2293uni2294
circleplusuni2296circlemultiplyuni2298uni2299uni229Auni229Buni229Cuni229Duni229Euni229Funi22A0uni22A1uni22A2uni22A3uni22A4perpendicularuni22A6uni22A7uni22A8uni22A9uni22AAuni22ABuni22ACuni22ADuni22AEuni22AFuni22B0uni22B1uni22B2uni22B3uni22B4uni22B5uni22B6uni22B7uni22B8uni22B9uni22BAuni22BBuni22BCuni22BDuni22BEuni22BFuni22C0uni22C1uni22C2uni22C3uni22C4dotmathuni22C6uni22C7uni22C8uni22C9uni22CAuni22CBuni22CCuni22CDuni22CEuni22CFuni22D0uni22D1uni22D2uni22D3uni22D4uni22D5uni22D6uni22D7uni22D8uni22D9uni22DAuni22DBuni22DCuni22DDuni22DEuni22DFuni22E0uni22E1uni22E2uni22E3uni22E4uni22E5uni22E6uni22E7uni22E8uni22E9uni22EAuni22EBuni22ECuni22EDuni22EEuni22EFuni22F0uni22F1uni22F2uni22F3uni22F4uni22F5uni22F6uni22F7uni22F8uni22F9uni22FAuni22FBuni22FCuni22FDuni22FEuni22FFuni2300uni2301houseuni2303uni2304uni2305uni2306uni2307uni2308uni2309uni230Auni230Buni230Cuni230Duni230Euni230Frevlogicalnotuni2311uni2318uni2319uni231Cuni231Duni231Euni231F
integraltp
integralbtuni2324uni2325uni2326uni2327uni2328uni232Buni232Cuni2373uni2374uni2375uni237Auni237Duni2387uni2394uni239Buni239Cuni239Duni239Euni239Funi23A0uni23A1uni23A2uni23A3uni23A4uni23A5uni23A6uni23A7uni23A8uni23A9uni23AAuni23ABuni23ACuni23ADuni23AEuni23CEuni23CFuni23E3uni23E5uni23E8uni2422uni2423uni2460uni2461uni2462uni2463uni2464uni2465uni2466uni2467uni2468uni2469SF100000uni2501SF110000uni2503uni2504uni2505uni2506uni2507uni2508uni2509uni250Auni250BSF010000uni250Duni250Euni250FSF030000uni2511uni2512uni2513SF020000uni2515uni2516uni2517SF040000uni2519uni251Auni251BSF080000uni251Duni251Euni251Funi2520uni2521uni2522uni2523SF090000uni2525uni2526uni2527uni2528uni2529uni252Auni252BSF060000uni252Duni252Euni252Funi2530uni2531uni2532uni2533SF070000uni2535uni2536uni2537uni2538uni2539uni253Auni253BSF050000uni253Duni253Euni253Funi2540uni2541uni2542uni2543uni2544uni2545uni2546uni2547uni2548uni2549uni254Auni254Buni254Cuni254Duni254Euni254FSF430000SF240000SF510000SF520000SF390000SF220000SF210000SF250000SF500000SF490000SF380000SF280000SF270000SF260000SF360000SF370000SF420000SF190000SF200000SF230000SF470000SF480000SF410000SF450000SF460000SF400000SF540000SF530000SF440000uni256Duni256Euni256Funi2570uni2571uni2572uni2573uni2574uni2575uni2576uni2577uni2578uni2579uni257Auni257Buni257Cuni257Duni257Euni257Fupblockuni2581uni2582uni2583dnblockuni2585uni2586uni2587blockuni2589uni258Auni258Blfblockuni258Duni258Euni258Frtblockltshadeshadedkshadeuni2594uni2595uni2596uni2597uni2598uni2599uni259Auni259Buni259Cuni259Duni259Euni259F	filledboxH22073uni25A2uni25A3uni25A4uni25A5uni25A6uni25A7uni25A8uni25A9H18543H18551
filledrectuni25ADuni25AEuni25AFuni25B0uni25B1triagupuni25B3uni25B4uni25B5uni25B6uni25B7uni25B8uni25B9triagrtuni25BBtriagdnuni25BDuni25BEuni25BFuni25C0uni25C1uni25C2uni25C3triaglfuni25C5uni25C6uni25C7uni25C8uni25C9circleuni25CCuni25CDuni25CEH18533uni25D0uni25D1uni25D2uni25D3uni25D4uni25D5uni25D6uni25D7	invbullet	invcircleuni25DAuni25DBuni25DCuni25DDuni25DEuni25DFuni25E0uni25E1uni25E2uni25E3uni25E4uni25E5
openbulletuni25E7uni25E8uni25E9uni25EAuni25EBuni25ECuni25EDuni25EEuni25EFuni25F0uni25F1uni25F2uni25F3uni25F4uni25F5uni25F6uni25F7uni25F8uni25F9uni25FAuni25FBuni25FCuni25FDuni25FEuni25FFuni2600uni2601uni2602uni2603uni2604uni2605uni2606uni2607uni2608uni2609uni260Auni260Buni260Cuni260Duni260Euni260Funi2610uni2611uni2612uni2613uni2614uni2615uni2616uni2617uni2618uni2619uni261Auni261Buni261Cuni261Duni261Euni261Funi2620uni2621uni2622uni2623uni2624uni2625uni2626uni2627uni2628uni2629uni262Auni262Buni262Cuni262Duni262Euni262Funi2630uni2631uni2632uni2633uni2634uni2635uni2636uni2637uni2638uni2639	smilefaceinvsmilefacesununi263Duni263Euni263Ffemaleuni2641maleuni2643uni2644uni2645uni2646uni2647uni2648uni2649uni264Auni264Buni264Cuni264Duni264Euni264Funi2650uni2651uni2652uni2653uni2654uni2655uni2656uni2657uni2658uni2659uni265Auni265Buni265Cuni265Duni265Euni265Fspadeuni2661uni2662clubuni2664heartdiamonduni2667uni2668uni2669musicalnotemusicalnotedbluni266Cuni266Duni266Euni266Funi2670uni2671uni2672uni2673uni2674uni2675uni2676uni2677uni2678uni2679uni267Auni267Buni267Cuni267Duni267Euni267Funi2680uni2681uni2682uni2683uni2684uni2685uni2686uni2687uni2688uni2689uni268Auni268Buni268Cuni268Duni268Euni268Funi2690uni2691uni2692uni2693uni2694uni2695uni2696uni2697uni2698uni2699uni269Auni269Buni269Cuni269Euni269Funi26A0uni26A1uni26A2uni26A3uni26A4uni26A5uni26A6uni26A7uni26A8uni26A9uni26AAuni26ABuni26ACuni26ADuni26AEuni26AFuni26B0uni26B1uni26B2uni26B3uni26B4uni26B5uni26B6uni26B7uni26B8uni26C0uni26C1uni26C2uni26C3uni26E2uni2701uni2702uni2703uni2704uni2706uni2707uni2708uni2709uni270Cuni270Duni270Euni270Funi2710uni2711uni2712uni2713uni2714uni2715uni2716uni2717uni2718uni2719uni271Auni271Buni271Cuni271Duni271Euni271Funi2720uni2721uni2722uni2723uni2724uni2725uni2726uni2727uni2729uni272Auni272Buni272Cuni272Duni272Euni272Funi2730uni2731uni2732uni2733uni2734uni2735uni2736uni2737uni2738uni2739uni273Auni273Buni273Cuni273Duni273Euni273Funi2740uni2741uni2742uni2743uni2744uni2745uni2746uni2747uni2748uni2749uni274Auni274Buni274Duni274Funi2750uni2751uni2752uni2756uni2758uni2759uni275Auni275Buni275Cuni275Duni275Euni2761uni2762uni2763uni2764uni2765uni2766uni2767uni2768uni2769uni276Auni276Buni276Cuni276Duni276Euni276Funi2770uni2771uni2772uni2773uni2774uni2775uni2776uni2777uni2778uni2779uni277Auni277Buni277Cuni277Duni277Euni277Funi2780uni2781uni2782uni2783uni2784uni2785uni2786uni2787uni2788uni2789uni278Auni278Buni278Cuni278Duni278Euni278Funi2790uni2791uni2792uni2793uni2794uni2798uni2799uni279Auni279Buni279Cuni279Duni279Euni279Funi27A0uni27A1uni27A2uni27A3uni27A4uni27A5uni27A6uni27A7uni27A8uni27A9uni27AAuni27ABuni27ACuni27ADuni27AEuni27AFuni27B1uni27B2uni27B3uni27B4uni27B5uni27B6uni27B7uni27B8uni27B9uni27BAuni27BBuni27BCuni27BDuni27BEuni27C5uni27C6uni27E0uni27E6uni27E7uni27E8uni27E9uni27EAuni27EBuni27F0uni27F1uni27F2uni27F3uni27F4uni27F5uni27F6uni27F7uni27F8uni27F9uni27FAuni27FBuni27FCuni27FDuni27FEuni27FFuni2800uni2801uni2802uni2803uni2804uni2805uni2806uni2807uni2808uni2809uni280Auni280Buni280Cuni280Duni280Euni280Funi2810uni2811uni2812uni2813uni2814uni2815uni2816uni2817uni2818uni2819uni281Auni281Buni281Cuni281Duni281Euni281Funi2820uni2821uni2822uni2823uni2824uni2825uni2826uni2827uni2828uni2829uni282Auni282Buni282Cuni282Duni282Euni282Funi2830uni2831uni2832uni2833uni2834uni2835uni2836uni2837uni2838uni2839uni283Auni283Buni283Cuni283Duni283Euni283Funi2840uni2841uni2842uni2843uni2844uni2845uni2846uni2847uni2848uni2849uni284Auni284Buni284Cuni284Duni284Euni284Funi2850uni2851uni2852uni2853uni2854uni2855uni2856uni2857uni2858uni2859uni285Auni285Buni285Cuni285Duni285Euni285Funi2860uni2861uni2862uni2863uni2864uni2865uni2866uni2867uni2868uni2869uni286Auni286Buni286Cuni286Duni286Euni286Funi2870uni2871uni2872uni2873uni2874uni2875uni2876uni2877uni2878uni2879uni287Auni287Buni287Cuni287Duni287Euni287Funi2880uni2881uni2882uni2883uni2884uni2885uni2886uni2887uni2888uni2889uni288Auni288Buni288Cuni288Duni288Euni288Funi2890uni2891uni2892uni2893uni2894uni2895uni2896uni2897uni2898uni2899uni289Auni289Buni289Cuni289Duni289Euni289Funi28A0uni28A1uni28A2uni28A3uni28A4uni28A5uni28A6uni28A7uni28A8uni28A9uni28AAuni28ABuni28ACuni28ADuni28AEuni28AFuni28B0uni28B1uni28B2uni28B3uni28B4uni28B5uni28B6uni28B7uni28B8uni28B9uni28BAuni28BBuni28BCuni28BDuni28BEuni28BFuni28C0uni28C1uni28C2uni28C3uni28C4uni28C5uni28C6uni28C7uni28C8uni28C9uni28CAuni28CBuni28CCuni28CDuni28CEuni28CFuni28D0uni28D1uni28D2uni28D3uni28D4uni28D5uni28D6uni28D7uni28D8uni28D9uni28DAuni28DBuni28DCuni28DDuni28DEuni28DFuni28E0uni28E1uni28E2uni28E3uni28E4uni28E5uni28E6uni28E7uni28E8uni28E9uni28EAuni28EBuni28ECuni28EDuni28EEuni28EFuni28F0uni28F1uni28F2uni28F3uni28F4uni28F5uni28F6uni28F7uni28F8uni28F9uni28FAuni28FBuni28FCuni28FDuni28FEuni28FFuni2906uni2907uni290Auni290Buni2940uni2941uni2983uni2984uni29CEuni29CFuni29D0uni29D1uni29D2uni29D3uni29D4uni29D5uni29EBuni29FAuni29FBuni2A00uni2A01uni2A02uni2A0Cuni2A0Duni2A0Euni2A0Funi2A10uni2A11uni2A12uni2A13uni2A14uni2A15uni2A16uni2A17uni2A18uni2A19uni2A1Auni2A1Buni2A1Cuni2A2Funi2A6Auni2A6Buni2A7Duni2A7Euni2A7Funi2A80uni2A81uni2A82uni2A83uni2A84uni2A85uni2A86uni2A87uni2A88uni2A89uni2A8Auni2A8Buni2A8Cuni2A8Duni2A8Euni2A8Funi2A90uni2A91uni2A92uni2A93uni2A94uni2A95uni2A96uni2A97uni2A98uni2A99uni2A9Auni2A9Buni2A9Cuni2A9Duni2A9Euni2A9Funi2AA0uni2AAEuni2AAFuni2AB0uni2AB1uni2AB2uni2AB3uni2AB4uni2AB5uni2AB6uni2AB7uni2AB8uni2AB9uni2ABAuni2AF9uni2AFAuni2B00uni2B01uni2B02uni2B03uni2B04uni2B05uni2B06uni2B07uni2B08uni2B09uni2B0Auni2B0Buni2B0Cuni2B0Duni2B0Euni2B0Funi2B10uni2B11uni2B12uni2B13uni2B14uni2B15uni2B16uni2B17uni2B18uni2B19uni2B1Auni2B1Funi2B20uni2B21uni2B22uni2B23uni2B24uni2B53uni2B54uni2C60uni2C61uni2C62uni2C63uni2C64uni2C65uni2C66uni2C67uni2C68uni2C69uni2C6Auni2C6Buni2C6Cuni2C6Duni2C6Euni2C6Funi2C70uni2C71uni2C72uni2C73uni2C74uni2C75uni2C76uni2C77uni2C79uni2C7Auni2C7Buni2C7Cuni2C7Duni2C7Euni2C7Funi2D00uni2D01uni2D02uni2D03uni2D04uni2D05uni2D06uni2D07uni2D08uni2D09uni2D0Auni2D0Buni2D0Cuni2D0Duni2D0Euni2D0Funi2D10uni2D11uni2D12uni2D13uni2D14uni2D15uni2D16uni2D17uni2D18uni2D19uni2D1Auni2D1Buni2D1Cuni2D1Duni2D1Euni2D1Funi2D20uni2D21uni2D22uni2D23uni2D24uni2D25uni2D30uni2D31uni2D32uni2D33uni2D34uni2D35uni2D36uni2D37uni2D38uni2D39uni2D3Auni2D3Buni2D3Cuni2D3Duni2D3Euni2D3Funi2D40uni2D41uni2D42uni2D43uni2D44uni2D45uni2D46uni2D47uni2D48uni2D49uni2D4Auni2D4Buni2D4Cuni2D4Duni2D4Euni2D4Funi2D50uni2D51uni2D52uni2D53uni2D54uni2D55uni2D56uni2D57uni2D58uni2D59uni2D5Auni2D5Buni2D5Cuni2D5Duni2D5Euni2D5Funi2D60uni2D61uni2D62uni2D63uni2D64uni2D65uni2D6Funi2E18uni2E1Funi2E22uni2E23uni2E24uni2E25uni2E2Euni4DC0uni4DC1uni4DC2uni4DC3uni4DC4uni4DC5uni4DC6uni4DC7uni4DC8uni4DC9uni4DCAuni4DCBuni4DCCuni4DCDuni4DCEuni4DCFuni4DD0uni4DD1uni4DD2uni4DD3uni4DD4uni4DD5uni4DD6uni4DD7uni4DD8uni4DD9uni4DDAuni4DDBuni4DDCuni4DDDuni4DDEuni4DDFuni4DE0uni4DE1uni4DE2uni4DE3uni4DE4uni4DE5uni4DE6uni4DE7uni4DE8uni4DE9uni4DEAuni4DEBuni4DECuni4DEDuni4DEEuni4DEFuni4DF0uni4DF1uni4DF2uni4DF3uni4DF4uni4DF5uni4DF6uni4DF7uni4DF8uni4DF9uni4DFAuni4DFBuni4DFCuni4DFDuni4DFEuni4DFFuniA4D0uniA4D1uniA4D2uniA4D3uniA4D4uniA4D5uniA4D6uniA4D7uniA4D8uniA4D9uniA4DAuniA4DBuniA4DCuniA4DDuniA4DEuniA4DFuniA4E0uniA4E1uniA4E2uniA4E3uniA4E4uniA4E5uniA4E6uniA4E7uniA4E8uniA4E9uniA4EAuniA4EBuniA4ECuniA4EDuniA4EEuniA4EFuniA4F0uniA4F1uniA4F2uniA4F3uniA4F4uniA4F5uniA4F6uniA4F7uniA4F8uniA4F9uniA4FAuniA4FBuniA4FCuniA4FDuniA4FEuniA4FFuniA644uniA645uniA646uniA647uniA64CuniA64DuniA650uniA651uniA654uniA655uniA656uniA657uniA662uniA663uniA664uniA665uniA666uniA667uniA668uniA669uniA66AuniA66BuniA66CuniA66DuniA66EuniA68AuniA68BuniA68CuniA68DuniA694uniA695uniA698uniA699uniA708uniA709uniA70AuniA70BuniA70CuniA70DuniA70EuniA70FuniA710uniA711uniA712uniA713uniA714uniA715uniA716uniA71BuniA71CuniA71DuniA71EuniA71FuniA722uniA723uniA724uniA725uniA726uniA727uniA728uniA729uniA72AuniA72BuniA730uniA731uniA732uniA733uniA734uniA735uniA736uniA737uniA738uniA739uniA73AuniA73BuniA73CuniA73DuniA73EuniA73FuniA740uniA741uniA746uniA747uniA748uniA749uniA74AuniA74BuniA74EuniA74FuniA750uniA751uniA752uniA753uniA756uniA757uniA764uniA765uniA766uniA767uniA780uniA781uniA782uniA783uniA789uniA78AuniA78BuniA78CuniA78DuniA78EuniA790uniA791uniA7A0uniA7A1uniA7A2uniA7A3uniA7A4uniA7A5uniA7A6uniA7A7uniA7A8uniA7A9uniA7AAuniA7F8uniA7F9uniA7FAuniA7FBuniA7FCuniA7FDuniA7FEuniA7FF	uni02E5.5	uni02E6.5	uni02E7.5	uni02E8.5	uni02E9.5	uni02E5.4	uni02E6.4	uni02E7.4	uni02E8.4	uni02E9.4	uni02E5.3	uni02E6.3	uni02E7.3	uni02E8.3	uni02E9.3	uni02E5.2	uni02E6.2	uni02E7.2	uni02E8.2	uni02E9.2	uni02E5.1	uni02E6.1	uni02E7.1	uni02E8.1	uni02E9.1stemuniF000uniF001uniF002uniF003uniF400uniF401uniF402uniF403uniF404uniF405uniF406uniF407uniF408uniF409uniF40AuniF40BuniF40CuniF40DuniF40EuniF40FuniF410uniF411uniF412uniF413uniF414uniF415uniF416uniF417uniF418uniF419uniF41AuniF41BuniF41CuniF41DuniF41EuniF41FuniF420uniF421uniF422uniF423uniF424uniF425uniF426uniF428uniF429uniF42AuniF42BuniF42CuniF42DuniF42EuniF42FuniF430uniF431uniF432uniF433uniF434uniF435uniF436uniF437uniF438uniF439uniF43AuniF43BuniF43CuniF43DuniF43EuniF43FuniF440uniF441uniF6C5uniFB00uniFB03uniFB04uniFB05uniFB06uniFB13uniFB14uniFB15uniFB16uniFB17uniFB1DuniFB1EuniFB1FuniFB20uniFB21uniFB22uniFB23uniFB24uniFB25uniFB26uniFB27uniFB28uniFB29uniFB2AuniFB2BuniFB2CuniFB2DuniFB2EuniFB2FuniFB30uniFB31uniFB32uniFB33uniFB34uniFB35uniFB36uniFB38uniFB39uniFB3AuniFB3BuniFB3CuniFB3EuniFB40uniFB41uniFB43uniFB44uniFB46uniFB47uniFB48uniFB49uniFB4AuniFB4BuniFB4CuniFB4DuniFB4EuniFB4FuniFB52uniFB53uniFB54uniFB55uniFB56uniFB57uniFB58uniFB59uniFB5AuniFB5BuniFB5CuniFB5DuniFB5EuniFB5FuniFB60uniFB61uniFB62uniFB63uniFB64uniFB65uniFB66uniFB67uniFB68uniFB69uniFB6AuniFB6BuniFB6CuniFB6DuniFB6EuniFB6FuniFB70uniFB71uniFB72uniFB73uniFB74uniFB75uniFB76uniFB77uniFB78uniFB79uniFB7AuniFB7BuniFB7CuniFB7DuniFB7EuniFB7FuniFB80uniFB81uniFB82uniFB83uniFB84uniFB85uniFB86uniFB87uniFB88uniFB89uniFB8AuniFB8BuniFB8CuniFB8DuniFB8EuniFB8FuniFB90uniFB91uniFB92uniFB93uniFB94uniFB95uniFB96uniFB97uniFB98uniFB99uniFB9AuniFB9BuniFB9CuniFB9DuniFB9EuniFB9FuniFBA0uniFBA1uniFBA2uniFBA3uniFBAAuniFBABuniFBACuniFBADuniFBD3uniFBD4uniFBD5uniFBD6uniFBD7uniFBD8uniFBD9uniFBDAuniFBDBuniFBDCuniFBDEuniFBDFuniFBE4uniFBE5uniFBE6uniFBE7uniFBE8uniFBE9uniFBFCuniFBFDuniFBFEuniFBFFuniFE00uniFE01uniFE02uniFE03uniFE04uniFE05uniFE06uniFE07uniFE08uniFE09uniFE0AuniFE0BuniFE0CuniFE0DuniFE0EuniFE0FuniFE20uniFE21uniFE22uniFE23uniFE70uniFE71uniFE72uniFE73uniFE74uniFE76uniFE77uniFE78uniFE79uniFE7AuniFE7BuniFE7CuniFE7DuniFE7EuniFE7FuniFE80uniFE81uniFE82uniFE83uniFE84uniFE85uniFE86uniFE87uniFE88uniFE89uniFE8AuniFE8BuniFE8CuniFE8DuniFE8EuniFE8FuniFE90uniFE91uniFE92uniFE93uniFE94uniFE95uniFE96uniFE97uniFE98uniFE99uniFE9AuniFE9BuniFE9CuniFE9DuniFE9EuniFE9FuniFEA0uniFEA1uniFEA2uniFEA3uniFEA4uniFEA5uniFEA6uniFEA7uniFEA8uniFEA9uniFEAAuniFEABuniFEACuniFEADuniFEAEuniFEAFuniFEB0uniFEB1uniFEB2uniFEB3uniFEB4uniFEB5uniFEB6uniFEB7uniFEB8uniFEB9uniFEBAuniFEBBuniFEBCuniFEBDuniFEBEuniFEBFuniFEC0uniFEC1uniFEC2uniFEC3uniFEC4uniFEC5uniFEC6uniFEC7uniFEC8uniFEC9uniFECAuniFECBuniFECCuniFECDuniFECEuniFECFuniFED0uniFED1uniFED2uniFED3uniFED4uniFED5uniFED6uniFED7uniFED8uniFED9uniFEDAuniFEDBuniFEDCuniFEDDuniFEDEuniFEDFuniFEE0uniFEE1uniFEE2uniFEE3uniFEE4uniFEE5uniFEE6uniFEE7uniFEE8uniFEE9uniFEEAuniFEEBuniFEECuniFEEDuniFEEEuniFEEFuniFEF0uniFEF1uniFEF2uniFEF3uniFEF4uniFEF5uniFEF6uniFEF7uniFEF8uniFEF9uniFEFAuniFEFBuniFEFCuniFEFFuniFFF9uniFFFAuniFFFBuniFFFCuniFFFDu10300u10301u10302u10303u10304u10305u10306u10307u10308u10309u1030Au1030Bu1030Cu1030Du1030Eu1030Fu10310u10311u10312u10313u10314u10315u10316u10317u10318u10319u1031Au1031Bu1031Cu1031Du1031Eu10320u10321u10322u10323u1D300u1D301u1D302u1D303u1D304u1D305u1D306u1D307u1D308u1D309u1D30Au1D30Bu1D30Cu1D30Du1D30Eu1D30Fu1D310u1D311u1D312u1D313u1D314u1D315u1D316u1D317u1D318u1D319u1D31Au1D31Bu1D31Cu1D31Du1D31Eu1D31Fu1D320u1D321u1D322u1D323u1D324u1D325u1D326u1D327u1D328u1D329u1D32Au1D32Bu1D32Cu1D32Du1D32Eu1D32Fu1D330u1D331u1D332u1D333u1D334u1D335u1D336u1D337u1D338u1D339u1D33Au1D33Bu1D33Cu1D33Du1D33Eu1D33Fu1D340u1D341u1D342u1D343u1D344u1D345u1D346u1D347u1D348u1D349u1D34Au1D34Bu1D34Cu1D34Du1D34Eu1D34Fu1D350u1D351u1D352u1D353u1D354u1D355u1D356u1D538u1D539u1D53Bu1D53Cu1D53Du1D53Eu1D540u1D541u1D542u1D543u1D544u1D546u1D54Au1D54Bu1D54Cu1D54Du1D54Eu1D54Fu1D550u1D552u1D553u1D554u1D555u1D556u1D557u1D558u1D559u1D55Au1D55Bu1D55Cu1D55Du1D55Eu1D55Fu1D560u1D561u1D562u1D563u1D564u1D565u1D566u1D567u1D568u1D569u1D56Au1D56Bu1D5A0u1D5A1u1D5A2u1D5A3u1D5A4u1D5A5u1D5A6u1D5A7u1D5A8u1D5A9u1D5AAu1D5ABu1D5ACu1D5ADu1D5AEu1D5AFu1D5B0u1D5B1u1D5B2u1D5B3u1D5B4u1D5B5u1D5B6u1D5B7u1D5B8u1D5B9u1D5BAu1D5BBu1D5BCu1D5BDu1D5BEu1D5BFu1D5C0u1D5C1u1D5C2u1D5C3u1D5C4u1D5C5u1D5C6u1D5C7u1D5C8u1D5C9u1D5CAu1D5CBu1D5CCu1D5CDu1D5CEu1D5CFu1D5D0u1D5D1u1D5D2u1D5D3u1D7D8u1D7D9u1D7DAu1D7DBu1D7DCu1D7DDu1D7DEu1D7DFu1D7E0u1D7E1u1D7E2u1D7E3u1D7E4u1D7E5u1D7E6u1D7E7u1D7E8u1D7E9u1D7EAu1D7EBu1EE00u1EE01u1EE02u1EE03u1EE05u1EE06u1EE07u1EE08u1EE09u1EE0Au1EE0Bu1EE0Cu1EE0Du1EE0Eu1EE0Fu1EE10u1EE11u1EE12u1EE13u1EE14u1EE15u1EE16u1EE17u1EE18u1EE19u1EE1Au1EE1Bu1EE1Cu1EE1Du1EE1Eu1EE1Fu1EE21u1EE22u1EE24u1EE27u1EE29u1EE2Au1EE2Bu1EE2Cu1EE2Du1EE2Eu1EE2Fu1EE30u1EE31u1EE32u1EE34u1EE35u1EE36u1EE37u1EE39u1EE3Bu1EE61u1EE62u1EE64u1EE67u1EE68u1EE69u1EE6Au1EE6Cu1EE6Du1EE6Eu1EE6Fu1EE70u1EE71u1EE72u1EE74u1EE75u1EE76u1EE77u1EE79u1EE7Au1EE7Bu1EE7Cu1EE7Eu1F030u1F031u1F032u1F033u1F034u1F035u1F036u1F037u1F038u1F039u1F03Au1F03Bu1F03Cu1F03Du1F03Eu1F03Fu1F040u1F041u1F042u1F043u1F044u1F045u1F046u1F047u1F048u1F049u1F04Au1F04Bu1F04Cu1F04Du1F04Eu1F04Fu1F050u1F051u1F052u1F053u1F054u1F055u1F056u1F057u1F058u1F059u1F05Au1F05Bu1F05Cu1F05Du1F05Eu1F05Fu1F060u1F061u1F062u1F063u1F064u1F065u1F066u1F067u1F068u1F069u1F06Au1F06Bu1F06Cu1F06Du1F06Eu1F06Fu1F070u1F071u1F072u1F073u1F074u1F075u1F076u1F077u1F078u1F079u1F07Au1F07Bu1F07Cu1F07Du1F07Eu1F07Fu1F080u1F081u1F082u1F083u1F084u1F085u1F086u1F087u1F088u1F089u1F08Au1F08Bu1F08Cu1F08Du1F08Eu1F08Fu1F090u1F091u1F092u1F093u1F0A0u1F0A1u1F0A2u1F0A3u1F0A4u1F0A5u1F0A6u1F0A7u1F0A8u1F0A9u1F0AAu1F0ABu1F0ACu1F0ADu1F0AEu1F0B1u1F0B2u1F0B3u1F0B4u1F0B5u1F0B6u1F0B7u1F0B8u1F0B9u1F0BAu1F0BBu1F0BCu1F0BDu1F0BEu1F0C1u1F0C2u1F0C3u1F0C4u1F0C5u1F0C6u1F0C7u1F0C8u1F0C9u1F0CAu1F0CBu1F0CCu1F0CDu1F0CEu1F0CFu1F0D1u1F0D2u1F0D3u1F0D4u1F0D5u1F0D6u1F0D7u1F0D8u1F0D9u1F0DAu1F0DBu1F0DCu1F0DDu1F0DEu1F0DFu1F311u1F312u1F313u1F314u1F315u1F316u1F317u1F318u1F42Du1F42Eu1F431u1F435u1F600u1F601u1F602u1F603u1F604u1F605u1F606u1F607u1F608u1F609u1F60Au1F60Bu1F60Cu1F60Du1F60Eu1F60Fu1F610u1F611u1F612u1F613u1F614u1F615u1F616u1F617u1F618u1F619u1F61Au1F61Bu1F61Cu1F61Du1F61Eu1F61Fu1F620u1F621u1F622u1F623u1F625u1F626u1F627u1F628u1F629u1F62Au1F62Bu1F62Du1F62Eu1F62Fu1F630u1F631u1F632u1F633u1F634u1F635u1F636u1F637u1F638u1F639u1F63Au1F63Bu1F63Cu1F63Du1F63Eu1F63Fu1F640u1F643	dlLtcaronDieresisAcuteTildeGrave
CircumflexCaronuni0311.caseBreve	DotaccentHungarumlautDoublegrave
arabic_dotarabic_2dotsarabic_3dotsarabic_3dots_aarabic_2dots_aarabic_4dotsuni066E.finauni066E.inituni066E.mediuni06A1.finauni06A1.inituni06A1.mediuni066F.finauni066F.inituni066F.mediuni06BA.inituni06BA.mediarabic_ringuni067C.finauni067C.inituni067C.mediuni067D.finauni067D.inituni067D.mediuni0681.finauni0681.inituni0681.mediuni0682.finauni0682.inituni0682.mediuni0685.finauni0685.inituni0685.mediuni06BF.finauni06BF.inituni06BF.mediarabic_gaf_barEng.altuni0268.dotlessuni029D.dotlessuni03080304uni03040308uni03070304uni03080301uni03080300uni03040301uni03040300uni03030304uni0308030Cuni03030308uni030C0307uni03030301uni03020301uni03020300uni03020303uni03060303uni03060301uni03060300uni03060309uni03020309uni03010307
brailledotJ.altuni0695.finauniFEAE.fina.longstartuni06B5.finauni06B5.inituni06B5.mediuni06CE.finauni06CE.inituni06CE.mediuni0692.final.altuni06D5.finauni0478.monographuni0479.monographiogonek.dotlessuni2148.dotlessuni2149.dotlessuni1E2D.dotlessuni1ECB.dotlessdcoI.alt
arrow.baseuni0651064Buni0651064Cuni064B0651uni0651064Euni0651064Funi064E0651uni0654064Euni0654064Funi07CA.finauni07CA.mediuni07CA.inituni07CB.finauni07CB.mediuni07CB.inituni07CC.finauni07CC.mediuni07CC.inituni07CD.finauni07CD.mediuni07CD.inituni07CE.finauni07CE.mediuni07CE.inituni07CF.finauni07CF.mediuni07CF.inituni07D0.finauni07D0.mediuni07D0.inituni07D1.finauni07D1.mediuni07D1.inituni07D2.finauni07D2.mediuni07D2.inituni07D3.finauni07D3.mediuni07D3.inituni07D4.finauni07D4.mediuni07D4.inituni07D5.finauni07D5.mediuni07D5.inituni07D6.finauni07D6.mediuni07D6.inituni07D7.finauni07D7.mediuni07D7.inituni07D8.finauni07D8.mediuni07D8.inituni07D9.finauni07D9.mediuni07D9.inituni07DA.finauni07DA.mediuni07DA.inituni07DB.finauni07DB.mediuni07DB.inituni07DC.finauni07DC.mediuni07DC.inituni07DD.finauni07DD.mediuni07DD.inituni07DE.finauni07DE.mediuni07DE.inituni07DF.finauni07DF.mediuni07DF.inituni07E0.finauni07E0.mediuni07E0.inituni07E1.finauni07E1.mediuni07E1.inituni07E2.finauni07E2.mediuni07E2.inituni07E3.finauni07E3.mediuni07E3.inituni07E4.finauni07E4.mediuni07E4.inituni07E5.finauni07E5.mediuni07E5.inituni07E6.finauni07E6.mediuni07E6.inituni07E7.finauni07E7.mediuni07E7.init	Ringaboveuni2630.altuni2631.altuni2632.altuni2633.altuni2634.altuni2635.altuni2636.altuni2637.altuni047E.diacuni048A.brevelessuni048B.brevelessy.altuni0689.finauni068A.finauni068B.finauni068F.finauni0690.finauni0693.finauni0694.finauni0696.finauni0697.finauni0699.finauni069A.finauni069A.inituni069A.mediuni069B.finauni069B.inituni069B.mediuni069C.finauni069C.inituni069C.mediuni069D.finauni069D.inituni069D.mediuni069E.finauni069E.inituni069E.mediuni069F.finauni069F.inituni069F.mediuni06A0.finauni06A0.inituni06A0.mediuni06A2.finauni06A2.inituni06A2.mediuni06A3.finauni06A3.inituni06A3.mediuni06A5.finauni06A5.inituni06A5.mediuni06A7.finauni06A7.inituni06A7.mediuni06A8.finauni06A8.inituni06A8.mediuni06AA.finauni06AA.inituni06AA.mediuni06AB.finauni06AB.inituni06AB.mediuni06AC.finauni06AC.inituni06AC.mediuni06AE.finauni06AE.inituni06AE.mediuni06B0.finauni06B0.inituni06B0.mediuni06B2.finauni06B2.inituni06B2.mediuni06B4.finauni06B4.inituni06B4.mediuni06B6.finauni06B6.inituni06B6.mediuni06B7.finauni06B7.inituni06B7.mediuni06B8.finauni06B8.inituni06B8.mediuni06B9.finauni06B9.inituni06B9.mediuni06BC.finauni06BC.inituni06BC.mediuni06BD.finauni06BD.inituni06BD.mediexclamdown.casequestiondown.caseuni2E18.caseuni066E.init.mathproduct.displayuni2210.displaysummation.displayintegral.displayuni222C.displayuni222D.displayuni222E.displayuni222F.displayuni2230.displayuni2231.displayuni2232.displayuni2233.displayuni22C0.displayuni22C1.displayuni22C2.displayuni22C3.displayuni2A00.displayuni2A01.displayuni2A02.displayuni2A0C.displayuni2A0D.displayuni2A0E.displayuni2A0F.displayuni2A10.displayuni2A11.displayuni2A12.displayuni2A13.displayuni2A14.displayuni2A15.displayuni2A16.displayuni2A17.displayuni2A18.displayuni2A19.displayuni2A1A.displayuni2A1B.displayuni2A1C.display@%2%%A:B2SAS//2ݖ}ٻ֊A}G}G͖2ƅ%]%]@@%d%d%A2dAd
A(]%]@%..%A%d%@~}}~}}|d{T{%zyxwv
utsrqponl!kjBjSih}gBfedcba:`^][ZYX
YX
WW2VUTUBTSSRQJQPONMNMLKJKJIJIIHGFEDC-CBAK@?>=>=<=<;<@;:987876765654321210/0/.-	.-	,2+*%+d*)*%)('%(A'%&%&%$#"!! ddBBBdB-B}d
	-d@-- d+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++StartFontMetrics 4.1
Notice Converted by PHP-font-lib
Comment https://github.com/PhenX/php-font-lib
EncodingScheme FontSpecific
FontName DejaVu Sans
FontSubfamily Book
UniqueID DejaVu Sans
FullName DejaVu Sans
Version Version 2.37
PostScriptName DejaVuSans
Manufacturer DejaVu fonts team
FontVendorURL http://dejavu.sourceforge.net
LicenseURL http://dejavu.sourceforge.net/wiki/index.php/License
PreferredFamily DejaVu Sans
PreferredSubfamily Book
Weight Medium
ItalicAngle 0
IsFixedPitch false
UnderlineThickness 44
UnderlinePosition -63
FontHeightOffset 0
Ascender 928
Descender -236
FontBBox -1021 -463 1793 1232
StartCharMetrics 6253
U 32 ; WX 318 ; N space ; G 3
U 33 ; WX 401 ; N exclam ; G 4
U 34 ; WX 460 ; N quotedbl ; G 5
U 35 ; WX 838 ; N numbersign ; G 6
U 36 ; WX 636 ; N dollar ; G 7
U 37 ; WX 950 ; N percent ; G 8
U 38 ; WX 780 ; N ampersand ; G 9
U 39 ; WX 275 ; N quotesingle ; G 10
U 40 ; WX 390 ; N parenleft ; G 11
U 41 ; WX 390 ; N parenright ; G 12
U 42 ; WX 500 ; N asterisk ; G 13
U 43 ; WX 838 ; N plus ; G 14
U 44 ; WX 318 ; N comma ; G 15
U 45 ; WX 361 ; N hyphen ; G 16
U 46 ; WX 318 ; N period ; G 17
U 47 ; WX 337 ; N slash ; G 18
U 48 ; WX 636 ; N zero ; G 19
U 49 ; WX 636 ; N one ; G 20
U 50 ; WX 636 ; N two ; G 21
U 51 ; WX 636 ; N three ; G 22
U 52 ; WX 636 ; N four ; G 23
U 53 ; WX 636 ; N five ; G 24
U 54 ; WX 636 ; N six ; G 25
U 55 ; WX 636 ; N seven ; G 26
U 56 ; WX 636 ; N eight ; G 27
U 57 ; WX 636 ; N nine ; G 28
U 58 ; WX 337 ; N colon ; G 29
U 59 ; WX 337 ; N semicolon ; G 30
U 60 ; WX 838 ; N less ; G 31
U 61 ; WX 838 ; N equal ; G 32
U 62 ; WX 838 ; N greater ; G 33
U 63 ; WX 531 ; N question ; G 34
U 64 ; WX 1000 ; N at ; G 35
U 65 ; WX 684 ; N A ; G 36
U 66 ; WX 686 ; N B ; G 37
U 67 ; WX 698 ; N C ; G 38
U 68 ; WX 770 ; N D ; G 39
U 69 ; WX 632 ; N E ; G 40
U 70 ; WX 575 ; N F ; G 41
U 71 ; WX 775 ; N G ; G 42
U 72 ; WX 752 ; N H ; G 43
U 73 ; WX 295 ; N I ; G 44
U 74 ; WX 295 ; N J ; G 45
U 75 ; WX 656 ; N K ; G 46
U 76 ; WX 557 ; N L ; G 47
U 77 ; WX 863 ; N M ; G 48
U 78 ; WX 748 ; N N ; G 49
U 79 ; WX 787 ; N O ; G 50
U 80 ; WX 603 ; N P ; G 51
U 81 ; WX 787 ; N Q ; G 52
U 82 ; WX 695 ; N R ; G 53
U 83 ; WX 635 ; N S ; G 54
U 84 ; WX 611 ; N T ; G 55
U 85 ; WX 732 ; N U ; G 56
U 86 ; WX 684 ; N V ; G 57
U 87 ; WX 989 ; N W ; G 58
U 88 ; WX 685 ; N X ; G 59
U 89 ; WX 611 ; N Y ; G 60
U 90 ; WX 685 ; N Z ; G 61
U 91 ; WX 390 ; N bracketleft ; G 62
U 92 ; WX 337 ; N backslash ; G 63
U 93 ; WX 390 ; N bracketright ; G 64
U 94 ; WX 838 ; N asciicircum ; G 65
U 95 ; WX 500 ; N underscore ; G 66
U 96 ; WX 500 ; N grave ; G 67
U 97 ; WX 613 ; N a ; G 68
U 98 ; WX 635 ; N b ; G 69
U 99 ; WX 550 ; N c ; G 70
U 100 ; WX 635 ; N d ; G 71
U 101 ; WX 615 ; N e ; G 72
U 102 ; WX 352 ; N f ; G 73
U 103 ; WX 635 ; N g ; G 74
U 104 ; WX 634 ; N h ; G 75
U 105 ; WX 278 ; N i ; G 76
U 106 ; WX 278 ; N j ; G 77
U 107 ; WX 579 ; N k ; G 78
U 108 ; WX 278 ; N l ; G 79
U 109 ; WX 974 ; N m ; G 80
U 110 ; WX 634 ; N n ; G 81
U 111 ; WX 612 ; N o ; G 82
U 112 ; WX 635 ; N p ; G 83
U 113 ; WX 635 ; N q ; G 84
U 114 ; WX 411 ; N r ; G 85
U 115 ; WX 521 ; N s ; G 86
U 116 ; WX 392 ; N t ; G 87
U 117 ; WX 634 ; N u ; G 88
U 118 ; WX 592 ; N v ; G 89
U 119 ; WX 818 ; N w ; G 90
U 120 ; WX 592 ; N x ; G 91
U 121 ; WX 592 ; N y ; G 92
U 122 ; WX 525 ; N z ; G 93
U 123 ; WX 636 ; N braceleft ; G 94
U 124 ; WX 337 ; N bar ; G 95
U 125 ; WX 636 ; N braceright ; G 96
U 126 ; WX 838 ; N asciitilde ; G 97
U 160 ; WX 318 ; N nbspace ; G 98
U 161 ; WX 401 ; N exclamdown ; G 99
U 162 ; WX 636 ; N cent ; G 100
U 163 ; WX 636 ; N sterling ; G 101
U 164 ; WX 636 ; N currency ; G 102
U 165 ; WX 636 ; N yen ; G 103
U 166 ; WX 337 ; N brokenbar ; G 104
U 167 ; WX 500 ; N section ; G 105
U 168 ; WX 500 ; N dieresis ; G 106
U 169 ; WX 1000 ; N copyright ; G 107
U 170 ; WX 471 ; N ordfeminine ; G 108
U 171 ; WX 612 ; N guillemotleft ; G 109
U 172 ; WX 838 ; N logicalnot ; G 110
U 173 ; WX 361 ; N sfthyphen ; G 111
U 174 ; WX 1000 ; N registered ; G 112
U 175 ; WX 500 ; N macron ; G 113
U 176 ; WX 500 ; N degree ; G 114
U 177 ; WX 838 ; N plusminus ; G 115
U 178 ; WX 401 ; N twosuperior ; G 116
U 179 ; WX 401 ; N threesuperior ; G 117
U 180 ; WX 500 ; N acute ; G 118
U 181 ; WX 636 ; N mu ; G 119
U 182 ; WX 636 ; N paragraph ; G 120
U 183 ; WX 318 ; N periodcentered ; G 121
U 184 ; WX 500 ; N cedilla ; G 122
U 185 ; WX 401 ; N onesuperior ; G 123
U 186 ; WX 471 ; N ordmasculine ; G 124
U 187 ; WX 612 ; N guillemotright ; G 125
U 188 ; WX 969 ; N onequarter ; G 126
U 189 ; WX 969 ; N onehalf ; G 127
U 190 ; WX 969 ; N threequarters ; G 128
U 191 ; WX 531 ; N questiondown ; G 129
U 192 ; WX 684 ; N Agrave ; G 130
U 193 ; WX 684 ; N Aacute ; G 131
U 194 ; WX 684 ; N Acircumflex ; G 132
U 195 ; WX 684 ; N Atilde ; G 133
U 196 ; WX 684 ; N Adieresis ; G 134
U 197 ; WX 684 ; N Aring ; G 135
U 198 ; WX 974 ; N AE ; G 136
U 199 ; WX 698 ; N Ccedilla ; G 137
U 200 ; WX 632 ; N Egrave ; G 138
U 201 ; WX 632 ; N Eacute ; G 139
U 202 ; WX 632 ; N Ecircumflex ; G 140
U 203 ; WX 632 ; N Edieresis ; G 141
U 204 ; WX 295 ; N Igrave ; G 142
U 205 ; WX 295 ; N Iacute ; G 143
U 206 ; WX 295 ; N Icircumflex ; G 144
U 207 ; WX 295 ; N Idieresis ; G 145
U 208 ; WX 775 ; N Eth ; G 146
U 209 ; WX 748 ; N Ntilde ; G 147
U 210 ; WX 787 ; N Ograve ; G 148
U 211 ; WX 787 ; N Oacute ; G 149
U 212 ; WX 787 ; N Ocircumflex ; G 150
U 213 ; WX 787 ; N Otilde ; G 151
U 214 ; WX 787 ; N Odieresis ; G 152
U 215 ; WX 838 ; N multiply ; G 153
U 216 ; WX 787 ; N Oslash ; G 154
U 217 ; WX 732 ; N Ugrave ; G 155
U 218 ; WX 732 ; N Uacute ; G 156
U 219 ; WX 732 ; N Ucircumflex ; G 157
U 220 ; WX 732 ; N Udieresis ; G 158
U 221 ; WX 611 ; N Yacute ; G 159
U 222 ; WX 605 ; N Thorn ; G 160
U 223 ; WX 630 ; N germandbls ; G 161
U 224 ; WX 613 ; N agrave ; G 162
U 225 ; WX 613 ; N aacute ; G 163
U 226 ; WX 613 ; N acircumflex ; G 164
U 227 ; WX 613 ; N atilde ; G 165
U 228 ; WX 613 ; N adieresis ; G 166
U 229 ; WX 613 ; N aring ; G 167
U 230 ; WX 982 ; N ae ; G 168
U 231 ; WX 550 ; N ccedilla ; G 169
U 232 ; WX 615 ; N egrave ; G 170
U 233 ; WX 615 ; N eacute ; G 171
U 234 ; WX 615 ; N ecircumflex ; G 172
U 235 ; WX 615 ; N edieresis ; G 173
U 236 ; WX 278 ; N igrave ; G 174
U 237 ; WX 278 ; N iacute ; G 175
U 238 ; WX 278 ; N icircumflex ; G 176
U 239 ; WX 278 ; N idieresis ; G 177
U 240 ; WX 612 ; N eth ; G 178
U 241 ; WX 634 ; N ntilde ; G 179
U 242 ; WX 612 ; N ograve ; G 180
U 243 ; WX 612 ; N oacute ; G 181
U 244 ; WX 612 ; N ocircumflex ; G 182
U 245 ; WX 612 ; N otilde ; G 183
U 246 ; WX 612 ; N odieresis ; G 184
U 247 ; WX 838 ; N divide ; G 185
U 248 ; WX 612 ; N oslash ; G 186
U 249 ; WX 634 ; N ugrave ; G 187
U 250 ; WX 634 ; N uacute ; G 188
U 251 ; WX 634 ; N ucircumflex ; G 189
U 252 ; WX 634 ; N udieresis ; G 190
U 253 ; WX 592 ; N yacute ; G 191
U 254 ; WX 635 ; N thorn ; G 192
U 255 ; WX 592 ; N ydieresis ; G 193
U 256 ; WX 684 ; N Amacron ; G 194
U 257 ; WX 613 ; N amacron ; G 195
U 258 ; WX 684 ; N Abreve ; G 196
U 259 ; WX 613 ; N abreve ; G 197
U 260 ; WX 684 ; N Aogonek ; G 198
U 261 ; WX 613 ; N aogonek ; G 199
U 262 ; WX 698 ; N Cacute ; G 200
U 263 ; WX 550 ; N cacute ; G 201
U 264 ; WX 698 ; N Ccircumflex ; G 202
U 265 ; WX 550 ; N ccircumflex ; G 203
U 266 ; WX 698 ; N Cdotaccent ; G 204
U 267 ; WX 550 ; N cdotaccent ; G 205
U 268 ; WX 698 ; N Ccaron ; G 206
U 269 ; WX 550 ; N ccaron ; G 207
U 270 ; WX 770 ; N Dcaron ; G 208
U 271 ; WX 635 ; N dcaron ; G 209
U 272 ; WX 775 ; N Dcroat ; G 210
U 273 ; WX 635 ; N dmacron ; G 211
U 274 ; WX 632 ; N Emacron ; G 212
U 275 ; WX 615 ; N emacron ; G 213
U 276 ; WX 632 ; N Ebreve ; G 214
U 277 ; WX 615 ; N ebreve ; G 215
U 278 ; WX 632 ; N Edotaccent ; G 216
U 279 ; WX 615 ; N edotaccent ; G 217
U 280 ; WX 632 ; N Eogonek ; G 218
U 281 ; WX 615 ; N eogonek ; G 219
U 282 ; WX 632 ; N Ecaron ; G 220
U 283 ; WX 615 ; N ecaron ; G 221
U 284 ; WX 775 ; N Gcircumflex ; G 222
U 285 ; WX 635 ; N gcircumflex ; G 223
U 286 ; WX 775 ; N Gbreve ; G 224
U 287 ; WX 635 ; N gbreve ; G 225
U 288 ; WX 775 ; N Gdotaccent ; G 226
U 289 ; WX 635 ; N gdotaccent ; G 227
U 290 ; WX 775 ; N Gcommaaccent ; G 228
U 291 ; WX 635 ; N gcommaaccent ; G 229
U 292 ; WX 752 ; N Hcircumflex ; G 230
U 293 ; WX 634 ; N hcircumflex ; G 231
U 294 ; WX 916 ; N Hbar ; G 232
U 295 ; WX 695 ; N hbar ; G 233
U 296 ; WX 295 ; N Itilde ; G 234
U 297 ; WX 278 ; N itilde ; G 235
U 298 ; WX 295 ; N Imacron ; G 236
U 299 ; WX 278 ; N imacron ; G 237
U 300 ; WX 295 ; N Ibreve ; G 238
U 301 ; WX 278 ; N ibreve ; G 239
U 302 ; WX 295 ; N Iogonek ; G 240
U 303 ; WX 278 ; N iogonek ; G 241
U 304 ; WX 295 ; N Idot ; G 242
U 305 ; WX 278 ; N dotlessi ; G 243
U 306 ; WX 590 ; N IJ ; G 244
U 307 ; WX 556 ; N ij ; G 245
U 308 ; WX 295 ; N Jcircumflex ; G 246
U 309 ; WX 278 ; N jcircumflex ; G 247
U 310 ; WX 656 ; N Kcommaaccent ; G 248
U 311 ; WX 579 ; N kcommaaccent ; G 249
U 312 ; WX 579 ; N kgreenlandic ; G 250
U 313 ; WX 557 ; N Lacute ; G 251
U 314 ; WX 278 ; N lacute ; G 252
U 315 ; WX 557 ; N Lcommaaccent ; G 253
U 316 ; WX 278 ; N lcommaaccent ; G 254
U 317 ; WX 557 ; N Lcaron ; G 255
U 318 ; WX 375 ; N lcaron ; G 256
U 319 ; WX 557 ; N Ldot ; G 257
U 320 ; WX 342 ; N ldot ; G 258
U 321 ; WX 562 ; N Lslash ; G 259
U 322 ; WX 284 ; N lslash ; G 260
U 323 ; WX 748 ; N Nacute ; G 261
U 324 ; WX 634 ; N nacute ; G 262
U 325 ; WX 748 ; N Ncommaaccent ; G 263
U 326 ; WX 634 ; N ncommaaccent ; G 264
U 327 ; WX 748 ; N Ncaron ; G 265
U 328 ; WX 634 ; N ncaron ; G 266
U 329 ; WX 813 ; N napostrophe ; G 267
U 330 ; WX 748 ; N Eng ; G 268
U 331 ; WX 634 ; N eng ; G 269
U 332 ; WX 787 ; N Omacron ; G 270
U 333 ; WX 612 ; N omacron ; G 271
U 334 ; WX 787 ; N Obreve ; G 272
U 335 ; WX 612 ; N obreve ; G 273
U 336 ; WX 787 ; N Ohungarumlaut ; G 274
U 337 ; WX 612 ; N ohungarumlaut ; G 275
U 338 ; WX 1070 ; N OE ; G 276
U 339 ; WX 1023 ; N oe ; G 277
U 340 ; WX 695 ; N Racute ; G 278
U 341 ; WX 411 ; N racute ; G 279
U 342 ; WX 695 ; N Rcommaaccent ; G 280
U 343 ; WX 411 ; N rcommaaccent ; G 281
U 344 ; WX 695 ; N Rcaron ; G 282
U 345 ; WX 411 ; N rcaron ; G 283
U 346 ; WX 635 ; N Sacute ; G 284
U 347 ; WX 521 ; N sacute ; G 285
U 348 ; WX 635 ; N Scircumflex ; G 286
U 349 ; WX 521 ; N scircumflex ; G 287
U 350 ; WX 635 ; N Scedilla ; G 288
U 351 ; WX 521 ; N scedilla ; G 289
U 352 ; WX 635 ; N Scaron ; G 290
U 353 ; WX 521 ; N scaron ; G 291
U 354 ; WX 611 ; N Tcommaaccent ; G 292
U 355 ; WX 392 ; N tcommaaccent ; G 293
U 356 ; WX 611 ; N Tcaron ; G 294
U 357 ; WX 392 ; N tcaron ; G 295
U 358 ; WX 611 ; N Tbar ; G 296
U 359 ; WX 392 ; N tbar ; G 297
U 360 ; WX 732 ; N Utilde ; G 298
U 361 ; WX 634 ; N utilde ; G 299
U 362 ; WX 732 ; N Umacron ; G 300
U 363 ; WX 634 ; N umacron ; G 301
U 364 ; WX 732 ; N Ubreve ; G 302
U 365 ; WX 634 ; N ubreve ; G 303
U 366 ; WX 732 ; N Uring ; G 304
U 367 ; WX 634 ; N uring ; G 305
U 368 ; WX 732 ; N Uhungarumlaut ; G 306
U 369 ; WX 634 ; N uhungarumlaut ; G 307
U 370 ; WX 732 ; N Uogonek ; G 308
U 371 ; WX 634 ; N uogonek ; G 309
U 372 ; WX 989 ; N Wcircumflex ; G 310
U 373 ; WX 818 ; N wcircumflex ; G 311
U 374 ; WX 611 ; N Ycircumflex ; G 312
U 375 ; WX 592 ; N ycircumflex ; G 313
U 376 ; WX 611 ; N Ydieresis ; G 314
U 377 ; WX 685 ; N Zacute ; G 315
U 378 ; WX 525 ; N zacute ; G 316
U 379 ; WX 685 ; N Zdotaccent ; G 317
U 380 ; WX 525 ; N zdotaccent ; G 318
U 381 ; WX 685 ; N Zcaron ; G 319
U 382 ; WX 525 ; N zcaron ; G 320
U 383 ; WX 352 ; N longs ; G 321
U 384 ; WX 635 ; N uni0180 ; G 322
U 385 ; WX 735 ; N uni0181 ; G 323
U 386 ; WX 686 ; N uni0182 ; G 324
U 387 ; WX 635 ; N uni0183 ; G 325
U 388 ; WX 686 ; N uni0184 ; G 326
U 389 ; WX 635 ; N uni0185 ; G 327
U 390 ; WX 703 ; N uni0186 ; G 328
U 391 ; WX 698 ; N uni0187 ; G 329
U 392 ; WX 550 ; N uni0188 ; G 330
U 393 ; WX 775 ; N uni0189 ; G 331
U 394 ; WX 819 ; N uni018A ; G 332
U 395 ; WX 686 ; N uni018B ; G 333
U 396 ; WX 635 ; N uni018C ; G 334
U 397 ; WX 612 ; N uni018D ; G 335
U 398 ; WX 632 ; N uni018E ; G 336
U 399 ; WX 787 ; N uni018F ; G 337
U 400 ; WX 614 ; N uni0190 ; G 338
U 401 ; WX 575 ; N uni0191 ; G 339
U 402 ; WX 352 ; N florin ; G 340
U 403 ; WX 775 ; N uni0193 ; G 341
U 404 ; WX 687 ; N uni0194 ; G 342
U 405 ; WX 984 ; N uni0195 ; G 343
U 406 ; WX 354 ; N uni0196 ; G 344
U 407 ; WX 295 ; N uni0197 ; G 345
U 408 ; WX 746 ; N uni0198 ; G 346
U 409 ; WX 579 ; N uni0199 ; G 347
U 410 ; WX 278 ; N uni019A ; G 348
U 411 ; WX 592 ; N uni019B ; G 349
U 412 ; WX 974 ; N uni019C ; G 350
U 413 ; WX 748 ; N uni019D ; G 351
U 414 ; WX 634 ; N uni019E ; G 352
U 415 ; WX 787 ; N uni019F ; G 353
U 416 ; WX 913 ; N Ohorn ; G 354
U 417 ; WX 612 ; N ohorn ; G 355
U 418 ; WX 949 ; N uni01A2 ; G 356
U 419 ; WX 759 ; N uni01A3 ; G 357
U 420 ; WX 652 ; N uni01A4 ; G 358
U 421 ; WX 635 ; N uni01A5 ; G 359
U 422 ; WX 695 ; N uni01A6 ; G 360
U 423 ; WX 635 ; N uni01A7 ; G 361
U 424 ; WX 521 ; N uni01A8 ; G 362
U 425 ; WX 632 ; N uni01A9 ; G 363
U 426 ; WX 336 ; N uni01AA ; G 364
U 427 ; WX 392 ; N uni01AB ; G 365
U 428 ; WX 611 ; N uni01AC ; G 366
U 429 ; WX 392 ; N uni01AD ; G 367
U 430 ; WX 611 ; N uni01AE ; G 368
U 431 ; WX 858 ; N Uhorn ; G 369
U 432 ; WX 634 ; N uhorn ; G 370
U 433 ; WX 764 ; N uni01B1 ; G 371
U 434 ; WX 721 ; N uni01B2 ; G 372
U 435 ; WX 744 ; N uni01B3 ; G 373
U 436 ; WX 730 ; N uni01B4 ; G 374
U 437 ; WX 685 ; N uni01B5 ; G 375
U 438 ; WX 525 ; N uni01B6 ; G 376
U 439 ; WX 666 ; N uni01B7 ; G 377
U 440 ; WX 666 ; N uni01B8 ; G 378
U 441 ; WX 578 ; N uni01B9 ; G 379
U 442 ; WX 525 ; N uni01BA ; G 380
U 443 ; WX 636 ; N uni01BB ; G 381
U 444 ; WX 666 ; N uni01BC ; G 382
U 445 ; WX 578 ; N uni01BD ; G 383
U 446 ; WX 510 ; N uni01BE ; G 384
U 447 ; WX 635 ; N uni01BF ; G 385
U 448 ; WX 295 ; N uni01C0 ; G 386
U 449 ; WX 492 ; N uni01C1 ; G 387
U 450 ; WX 459 ; N uni01C2 ; G 388
U 451 ; WX 295 ; N uni01C3 ; G 389
U 452 ; WX 1422 ; N uni01C4 ; G 390
U 453 ; WX 1299 ; N uni01C5 ; G 391
U 454 ; WX 1154 ; N uni01C6 ; G 392
U 455 ; WX 835 ; N uni01C7 ; G 393
U 456 ; WX 787 ; N uni01C8 ; G 394
U 457 ; WX 457 ; N uni01C9 ; G 395
U 458 ; WX 931 ; N uni01CA ; G 396
U 459 ; WX 924 ; N uni01CB ; G 397
U 460 ; WX 797 ; N uni01CC ; G 398
U 461 ; WX 684 ; N uni01CD ; G 399
U 462 ; WX 613 ; N uni01CE ; G 400
U 463 ; WX 295 ; N uni01CF ; G 401
U 464 ; WX 278 ; N uni01D0 ; G 402
U 465 ; WX 787 ; N uni01D1 ; G 403
U 466 ; WX 612 ; N uni01D2 ; G 404
U 467 ; WX 732 ; N uni01D3 ; G 405
U 468 ; WX 634 ; N uni01D4 ; G 406
U 469 ; WX 732 ; N uni01D5 ; G 407
U 470 ; WX 634 ; N uni01D6 ; G 408
U 471 ; WX 732 ; N uni01D7 ; G 409
U 472 ; WX 634 ; N uni01D8 ; G 410
U 473 ; WX 732 ; N uni01D9 ; G 411
U 474 ; WX 634 ; N uni01DA ; G 412
U 475 ; WX 732 ; N uni01DB ; G 413
U 476 ; WX 634 ; N uni01DC ; G 414
U 477 ; WX 615 ; N uni01DD ; G 415
U 478 ; WX 684 ; N uni01DE ; G 416
U 479 ; WX 613 ; N uni01DF ; G 417
U 480 ; WX 684 ; N uni01E0 ; G 418
U 481 ; WX 613 ; N uni01E1 ; G 419
U 482 ; WX 974 ; N uni01E2 ; G 420
U 483 ; WX 982 ; N uni01E3 ; G 421
U 484 ; WX 775 ; N uni01E4 ; G 422
U 485 ; WX 635 ; N uni01E5 ; G 423
U 486 ; WX 775 ; N Gcaron ; G 424
U 487 ; WX 635 ; N gcaron ; G 425
U 488 ; WX 656 ; N uni01E8 ; G 426
U 489 ; WX 579 ; N uni01E9 ; G 427
U 490 ; WX 787 ; N uni01EA ; G 428
U 491 ; WX 612 ; N uni01EB ; G 429
U 492 ; WX 787 ; N uni01EC ; G 430
U 493 ; WX 612 ; N uni01ED ; G 431
U 494 ; WX 666 ; N uni01EE ; G 432
U 495 ; WX 578 ; N uni01EF ; G 433
U 496 ; WX 278 ; N uni01F0 ; G 434
U 497 ; WX 1422 ; N uni01F1 ; G 435
U 498 ; WX 1299 ; N uni01F2 ; G 436
U 499 ; WX 1154 ; N uni01F3 ; G 437
U 500 ; WX 775 ; N uni01F4 ; G 438
U 501 ; WX 635 ; N uni01F5 ; G 439
U 502 ; WX 1113 ; N uni01F6 ; G 440
U 503 ; WX 682 ; N uni01F7 ; G 441
U 504 ; WX 748 ; N uni01F8 ; G 442
U 505 ; WX 634 ; N uni01F9 ; G 443
U 506 ; WX 684 ; N Aringacute ; G 444
U 507 ; WX 613 ; N aringacute ; G 445
U 508 ; WX 974 ; N AEacute ; G 446
U 509 ; WX 982 ; N aeacute ; G 447
U 510 ; WX 787 ; N Oslashacute ; G 448
U 511 ; WX 612 ; N oslashacute ; G 449
U 512 ; WX 684 ; N uni0200 ; G 450
U 513 ; WX 613 ; N uni0201 ; G 451
U 514 ; WX 684 ; N uni0202 ; G 452
U 515 ; WX 613 ; N uni0203 ; G 453
U 516 ; WX 632 ; N uni0204 ; G 454
U 517 ; WX 615 ; N uni0205 ; G 455
U 518 ; WX 632 ; N uni0206 ; G 456
U 519 ; WX 615 ; N uni0207 ; G 457
U 520 ; WX 295 ; N uni0208 ; G 458
U 521 ; WX 278 ; N uni0209 ; G 459
U 522 ; WX 295 ; N uni020A ; G 460
U 523 ; WX 278 ; N uni020B ; G 461
U 524 ; WX 787 ; N uni020C ; G 462
U 525 ; WX 612 ; N uni020D ; G 463
U 526 ; WX 787 ; N uni020E ; G 464
U 527 ; WX 612 ; N uni020F ; G 465
U 528 ; WX 695 ; N uni0210 ; G 466
U 529 ; WX 411 ; N uni0211 ; G 467
U 530 ; WX 695 ; N uni0212 ; G 468
U 531 ; WX 411 ; N uni0213 ; G 469
U 532 ; WX 732 ; N uni0214 ; G 470
U 533 ; WX 634 ; N uni0215 ; G 471
U 534 ; WX 732 ; N uni0216 ; G 472
U 535 ; WX 634 ; N uni0217 ; G 473
U 536 ; WX 635 ; N Scommaaccent ; G 474
U 537 ; WX 521 ; N scommaaccent ; G 475
U 538 ; WX 611 ; N uni021A ; G 476
U 539 ; WX 392 ; N uni021B ; G 477
U 540 ; WX 627 ; N uni021C ; G 478
U 541 ; WX 521 ; N uni021D ; G 479
U 542 ; WX 752 ; N uni021E ; G 480
U 543 ; WX 634 ; N uni021F ; G 481
U 544 ; WX 735 ; N uni0220 ; G 482
U 545 ; WX 838 ; N uni0221 ; G 483
U 546 ; WX 698 ; N uni0222 ; G 484
U 547 ; WX 610 ; N uni0223 ; G 485
U 548 ; WX 685 ; N uni0224 ; G 486
U 549 ; WX 525 ; N uni0225 ; G 487
U 550 ; WX 684 ; N uni0226 ; G 488
U 551 ; WX 613 ; N uni0227 ; G 489
U 552 ; WX 632 ; N uni0228 ; G 490
U 553 ; WX 615 ; N uni0229 ; G 491
U 554 ; WX 787 ; N uni022A ; G 492
U 555 ; WX 612 ; N uni022B ; G 493
U 556 ; WX 787 ; N uni022C ; G 494
U 557 ; WX 612 ; N uni022D ; G 495
U 558 ; WX 787 ; N uni022E ; G 496
U 559 ; WX 612 ; N uni022F ; G 497
U 560 ; WX 787 ; N uni0230 ; G 498
U 561 ; WX 612 ; N uni0231 ; G 499
U 562 ; WX 611 ; N uni0232 ; G 500
U 563 ; WX 592 ; N uni0233 ; G 501
U 564 ; WX 475 ; N uni0234 ; G 502
U 565 ; WX 843 ; N uni0235 ; G 503
U 566 ; WX 477 ; N uni0236 ; G 504
U 567 ; WX 278 ; N dotlessj ; G 505
U 568 ; WX 998 ; N uni0238 ; G 506
U 569 ; WX 998 ; N uni0239 ; G 507
U 570 ; WX 684 ; N uni023A ; G 508
U 571 ; WX 698 ; N uni023B ; G 509
U 572 ; WX 550 ; N uni023C ; G 510
U 573 ; WX 557 ; N uni023D ; G 511
U 574 ; WX 611 ; N uni023E ; G 512
U 575 ; WX 521 ; N uni023F ; G 513
U 576 ; WX 525 ; N uni0240 ; G 514
U 577 ; WX 603 ; N uni0241 ; G 515
U 578 ; WX 479 ; N uni0242 ; G 516
U 579 ; WX 686 ; N uni0243 ; G 517
U 580 ; WX 732 ; N uni0244 ; G 518
U 581 ; WX 684 ; N uni0245 ; G 519
U 582 ; WX 632 ; N uni0246 ; G 520
U 583 ; WX 615 ; N uni0247 ; G 521
U 584 ; WX 295 ; N uni0248 ; G 522
U 585 ; WX 278 ; N uni0249 ; G 523
U 586 ; WX 781 ; N uni024A ; G 524
U 587 ; WX 635 ; N uni024B ; G 525
U 588 ; WX 695 ; N uni024C ; G 526
U 589 ; WX 411 ; N uni024D ; G 527
U 590 ; WX 611 ; N uni024E ; G 528
U 591 ; WX 592 ; N uni024F ; G 529
U 592 ; WX 600 ; N uni0250 ; G 530
U 593 ; WX 635 ; N uni0251 ; G 531
U 594 ; WX 635 ; N uni0252 ; G 532
U 595 ; WX 635 ; N uni0253 ; G 533
U 596 ; WX 549 ; N uni0254 ; G 534
U 597 ; WX 550 ; N uni0255 ; G 535
U 598 ; WX 635 ; N uni0256 ; G 536
U 599 ; WX 696 ; N uni0257 ; G 537
U 600 ; WX 615 ; N uni0258 ; G 538
U 601 ; WX 615 ; N uni0259 ; G 539
U 602 ; WX 819 ; N uni025A ; G 540
U 603 ; WX 541 ; N uni025B ; G 541
U 604 ; WX 532 ; N uni025C ; G 542
U 605 ; WX 775 ; N uni025D ; G 543
U 606 ; WX 664 ; N uni025E ; G 544
U 607 ; WX 278 ; N uni025F ; G 545
U 608 ; WX 696 ; N uni0260 ; G 546
U 609 ; WX 635 ; N uni0261 ; G 547
U 610 ; WX 629 ; N uni0262 ; G 548
U 611 ; WX 596 ; N uni0263 ; G 549
U 612 ; WX 596 ; N uni0264 ; G 550
U 613 ; WX 634 ; N uni0265 ; G 551
U 614 ; WX 634 ; N uni0266 ; G 552
U 615 ; WX 634 ; N uni0267 ; G 553
U 616 ; WX 278 ; N uni0268 ; G 554
U 617 ; WX 338 ; N uni0269 ; G 555
U 618 ; WX 372 ; N uni026A ; G 556
U 619 ; WX 396 ; N uni026B ; G 557
U 620 ; WX 487 ; N uni026C ; G 558
U 621 ; WX 278 ; N uni026D ; G 559
U 622 ; WX 706 ; N uni026E ; G 560
U 623 ; WX 974 ; N uni026F ; G 561
U 624 ; WX 974 ; N uni0270 ; G 562
U 625 ; WX 974 ; N uni0271 ; G 563
U 626 ; WX 646 ; N uni0272 ; G 564
U 627 ; WX 642 ; N uni0273 ; G 565
U 628 ; WX 634 ; N uni0274 ; G 566
U 629 ; WX 612 ; N uni0275 ; G 567
U 630 ; WX 858 ; N uni0276 ; G 568
U 631 ; WX 728 ; N uni0277 ; G 569
U 632 ; WX 660 ; N uni0278 ; G 570
U 633 ; WX 414 ; N uni0279 ; G 571
U 634 ; WX 414 ; N uni027A ; G 572
U 635 ; WX 414 ; N uni027B ; G 573
U 636 ; WX 411 ; N uni027C ; G 574
U 637 ; WX 411 ; N uni027D ; G 575
U 638 ; WX 530 ; N uni027E ; G 576
U 639 ; WX 530 ; N uni027F ; G 577
U 640 ; WX 604 ; N uni0280 ; G 578
U 641 ; WX 604 ; N uni0281 ; G 579
U 642 ; WX 521 ; N uni0282 ; G 580
U 643 ; WX 336 ; N uni0283 ; G 581
U 644 ; WX 336 ; N uni0284 ; G 582
U 645 ; WX 461 ; N uni0285 ; G 583
U 646 ; WX 336 ; N uni0286 ; G 584
U 647 ; WX 392 ; N uni0287 ; G 585
U 648 ; WX 392 ; N uni0288 ; G 586
U 649 ; WX 634 ; N uni0289 ; G 587
U 650 ; WX 618 ; N uni028A ; G 588
U 651 ; WX 598 ; N uni028B ; G 589
U 652 ; WX 592 ; N uni028C ; G 590
U 653 ; WX 818 ; N uni028D ; G 591
U 654 ; WX 592 ; N uni028E ; G 592
U 655 ; WX 611 ; N uni028F ; G 593
U 656 ; WX 525 ; N uni0290 ; G 594
U 657 ; WX 525 ; N uni0291 ; G 595
U 658 ; WX 578 ; N uni0292 ; G 596
U 659 ; WX 578 ; N uni0293 ; G 597
U 660 ; WX 510 ; N uni0294 ; G 598
U 661 ; WX 510 ; N uni0295 ; G 599
U 662 ; WX 510 ; N uni0296 ; G 600
U 663 ; WX 510 ; N uni0297 ; G 601
U 664 ; WX 787 ; N uni0298 ; G 602
U 665 ; WX 580 ; N uni0299 ; G 603
U 666 ; WX 664 ; N uni029A ; G 604
U 667 ; WX 708 ; N uni029B ; G 605
U 668 ; WX 654 ; N uni029C ; G 606
U 669 ; WX 292 ; N uni029D ; G 607
U 670 ; WX 667 ; N uni029E ; G 608
U 671 ; WX 507 ; N uni029F ; G 609
U 672 ; WX 727 ; N uni02A0 ; G 610
U 673 ; WX 510 ; N uni02A1 ; G 611
U 674 ; WX 510 ; N uni02A2 ; G 612
U 675 ; WX 1014 ; N uni02A3 ; G 613
U 676 ; WX 1058 ; N uni02A4 ; G 614
U 677 ; WX 1013 ; N uni02A5 ; G 615
U 678 ; WX 830 ; N uni02A6 ; G 616
U 679 ; WX 610 ; N uni02A7 ; G 617
U 680 ; WX 778 ; N uni02A8 ; G 618
U 681 ; WX 848 ; N uni02A9 ; G 619
U 682 ; WX 706 ; N uni02AA ; G 620
U 683 ; WX 654 ; N uni02AB ; G 621
U 684 ; WX 515 ; N uni02AC ; G 622
U 685 ; WX 515 ; N uni02AD ; G 623
U 686 ; WX 661 ; N uni02AE ; G 624
U 687 ; WX 664 ; N uni02AF ; G 625
U 688 ; WX 404 ; N uni02B0 ; G 626
U 689 ; WX 399 ; N uni02B1 ; G 627
U 690 ; WX 175 ; N uni02B2 ; G 628
U 691 ; WX 259 ; N uni02B3 ; G 629
U 692 ; WX 295 ; N uni02B4 ; G 630
U 693 ; WX 296 ; N uni02B5 ; G 631
U 694 ; WX 379 ; N uni02B6 ; G 632
U 695 ; WX 515 ; N uni02B7 ; G 633
U 696 ; WX 373 ; N uni02B8 ; G 634
U 697 ; WX 278 ; N uni02B9 ; G 635
U 698 ; WX 460 ; N uni02BA ; G 636
U 699 ; WX 318 ; N uni02BB ; G 637
U 700 ; WX 318 ; N uni02BC ; G 638
U 701 ; WX 318 ; N uni02BD ; G 639
U 702 ; WX 307 ; N uni02BE ; G 640
U 703 ; WX 307 ; N uni02BF ; G 641
U 704 ; WX 370 ; N uni02C0 ; G 642
U 705 ; WX 370 ; N uni02C1 ; G 643
U 706 ; WX 500 ; N uni02C2 ; G 644
U 707 ; WX 500 ; N uni02C3 ; G 645
U 708 ; WX 500 ; N uni02C4 ; G 646
U 709 ; WX 500 ; N uni02C5 ; G 647
U 710 ; WX 500 ; N circumflex ; G 648
U 711 ; WX 500 ; N caron ; G 649
U 712 ; WX 275 ; N uni02C8 ; G 650
U 713 ; WX 500 ; N uni02C9 ; G 651
U 714 ; WX 500 ; N uni02CA ; G 652
U 715 ; WX 500 ; N uni02CB ; G 653
U 716 ; WX 275 ; N uni02CC ; G 654
U 717 ; WX 500 ; N uni02CD ; G 655
U 718 ; WX 500 ; N uni02CE ; G 656
U 719 ; WX 500 ; N uni02CF ; G 657
U 720 ; WX 337 ; N uni02D0 ; G 658
U 721 ; WX 337 ; N uni02D1 ; G 659
U 722 ; WX 307 ; N uni02D2 ; G 660
U 723 ; WX 307 ; N uni02D3 ; G 661
U 724 ; WX 500 ; N uni02D4 ; G 662
U 725 ; WX 500 ; N uni02D5 ; G 663
U 726 ; WX 390 ; N uni02D6 ; G 664
U 727 ; WX 317 ; N uni02D7 ; G 665
U 728 ; WX 500 ; N breve ; G 666
U 729 ; WX 500 ; N dotaccent ; G 667
U 730 ; WX 500 ; N ring ; G 668
U 731 ; WX 500 ; N ogonek ; G 669
U 732 ; WX 500 ; N tilde ; G 670
U 733 ; WX 500 ; N hungarumlaut ; G 671
U 734 ; WX 315 ; N uni02DE ; G 672
U 735 ; WX 500 ; N uni02DF ; G 673
U 736 ; WX 426 ; N uni02E0 ; G 674
U 737 ; WX 166 ; N uni02E1 ; G 675
U 738 ; WX 373 ; N uni02E2 ; G 676
U 739 ; WX 444 ; N uni02E3 ; G 677
U 740 ; WX 370 ; N uni02E4 ; G 678
U 741 ; WX 493 ; N uni02E5 ; G 679
U 742 ; WX 493 ; N uni02E6 ; G 680
U 743 ; WX 493 ; N uni02E7 ; G 681
U 744 ; WX 493 ; N uni02E8 ; G 682
U 745 ; WX 493 ; N uni02E9 ; G 683
U 748 ; WX 500 ; N uni02EC ; G 684
U 749 ; WX 500 ; N uni02ED ; G 685
U 750 ; WX 518 ; N uni02EE ; G 686
U 755 ; WX 500 ; N uni02F3 ; G 687
U 759 ; WX 500 ; N uni02F7 ; G 688
U 768 ; WX 0 ; N gravecomb ; G 689
U 769 ; WX 0 ; N acutecomb ; G 690
U 770 ; WX 0 ; N uni0302 ; G 691
U 771 ; WX 0 ; N tildecomb ; G 692
U 772 ; WX 0 ; N uni0304 ; G 693
U 773 ; WX 0 ; N uni0305 ; G 694
U 774 ; WX 0 ; N uni0306 ; G 695
U 775 ; WX 0 ; N uni0307 ; G 696
U 776 ; WX 0 ; N uni0308 ; G 697
U 777 ; WX 0 ; N hookabovecomb ; G 698
U 778 ; WX 0 ; N uni030A ; G 699
U 779 ; WX 0 ; N uni030B ; G 700
U 780 ; WX 0 ; N uni030C ; G 701
U 781 ; WX 0 ; N uni030D ; G 702
U 782 ; WX 0 ; N uni030E ; G 703
U 783 ; WX 0 ; N uni030F ; G 704
U 784 ; WX 0 ; N uni0310 ; G 705
U 785 ; WX 0 ; N uni0311 ; G 706
U 786 ; WX 0 ; N uni0312 ; G 707
U 787 ; WX 0 ; N uni0313 ; G 708
U 788 ; WX 0 ; N uni0314 ; G 709
U 789 ; WX 0 ; N uni0315 ; G 710
U 790 ; WX 0 ; N uni0316 ; G 711
U 791 ; WX 0 ; N uni0317 ; G 712
U 792 ; WX 0 ; N uni0318 ; G 713
U 793 ; WX 0 ; N uni0319 ; G 714
U 794 ; WX 0 ; N uni031A ; G 715
U 795 ; WX 0 ; N uni031B ; G 716
U 796 ; WX 0 ; N uni031C ; G 717
U 797 ; WX 0 ; N uni031D ; G 718
U 798 ; WX 0 ; N uni031E ; G 719
U 799 ; WX 0 ; N uni031F ; G 720
U 800 ; WX 0 ; N uni0320 ; G 721
U 801 ; WX 0 ; N uni0321 ; G 722
U 802 ; WX 0 ; N uni0322 ; G 723
U 803 ; WX 0 ; N dotbelowcomb ; G 724
U 804 ; WX 0 ; N uni0324 ; G 725
U 805 ; WX 0 ; N uni0325 ; G 726
U 806 ; WX 0 ; N uni0326 ; G 727
U 807 ; WX 0 ; N uni0327 ; G 728
U 808 ; WX 0 ; N uni0328 ; G 729
U 809 ; WX 0 ; N uni0329 ; G 730
U 810 ; WX 0 ; N uni032A ; G 731
U 811 ; WX 0 ; N uni032B ; G 732
U 812 ; WX 0 ; N uni032C ; G 733
U 813 ; WX 0 ; N uni032D ; G 734
U 814 ; WX 0 ; N uni032E ; G 735
U 815 ; WX 0 ; N uni032F ; G 736
U 816 ; WX 0 ; N uni0330 ; G 737
U 817 ; WX 0 ; N uni0331 ; G 738
U 818 ; WX 0 ; N uni0332 ; G 739
U 819 ; WX 0 ; N uni0333 ; G 740
U 820 ; WX 0 ; N uni0334 ; G 741
U 821 ; WX 0 ; N uni0335 ; G 742
U 822 ; WX 0 ; N uni0336 ; G 743
U 823 ; WX 0 ; N uni0337 ; G 744
U 824 ; WX 0 ; N uni0338 ; G 745
U 825 ; WX 0 ; N uni0339 ; G 746
U 826 ; WX 0 ; N uni033A ; G 747
U 827 ; WX 0 ; N uni033B ; G 748
U 828 ; WX 0 ; N uni033C ; G 749
U 829 ; WX 0 ; N uni033D ; G 750
U 830 ; WX 0 ; N uni033E ; G 751
U 831 ; WX 0 ; N uni033F ; G 752
U 832 ; WX 0 ; N uni0340 ; G 753
U 833 ; WX 0 ; N uni0341 ; G 754
U 834 ; WX 0 ; N uni0342 ; G 755
U 835 ; WX 0 ; N uni0343 ; G 756
U 836 ; WX 0 ; N uni0344 ; G 757
U 837 ; WX 0 ; N uni0345 ; G 758
U 838 ; WX 0 ; N uni0346 ; G 759
U 839 ; WX 0 ; N uni0347 ; G 760
U 840 ; WX 0 ; N uni0348 ; G 761
U 841 ; WX 0 ; N uni0349 ; G 762
U 842 ; WX 0 ; N uni034A ; G 763
U 843 ; WX 0 ; N uni034B ; G 764
U 844 ; WX 0 ; N uni034C ; G 765
U 845 ; WX 0 ; N uni034D ; G 766
U 846 ; WX 0 ; N uni034E ; G 767
U 847 ; WX 0 ; N uni034F ; G 768
U 849 ; WX 0 ; N uni0351 ; G 769
U 850 ; WX 0 ; N uni0352 ; G 770
U 851 ; WX 0 ; N uni0353 ; G 771
U 855 ; WX 0 ; N uni0357 ; G 772
U 856 ; WX 0 ; N uni0358 ; G 773
U 858 ; WX 0 ; N uni035A ; G 774
U 860 ; WX 0 ; N uni035C ; G 775
U 861 ; WX 0 ; N uni035D ; G 776
U 862 ; WX 0 ; N uni035E ; G 777
U 863 ; WX 0 ; N uni035F ; G 778
U 864 ; WX 0 ; N uni0360 ; G 779
U 865 ; WX 0 ; N uni0361 ; G 780
U 866 ; WX 0 ; N uni0362 ; G 781
U 880 ; WX 654 ; N uni0370 ; G 782
U 881 ; WX 568 ; N uni0371 ; G 783
U 882 ; WX 862 ; N uni0372 ; G 784
U 883 ; WX 647 ; N uni0373 ; G 785
U 884 ; WX 278 ; N uni0374 ; G 786
U 885 ; WX 278 ; N uni0375 ; G 787
U 886 ; WX 748 ; N uni0376 ; G 788
U 887 ; WX 650 ; N uni0377 ; G 789
U 890 ; WX 500 ; N uni037A ; G 790
U 891 ; WX 549 ; N uni037B ; G 791
U 892 ; WX 550 ; N uni037C ; G 792
U 893 ; WX 549 ; N uni037D ; G 793
U 894 ; WX 337 ; N uni037E ; G 794
U 895 ; WX 295 ; N uni037F ; G 795
U 900 ; WX 500 ; N tonos ; G 796
U 901 ; WX 500 ; N dieresistonos ; G 797
U 902 ; WX 692 ; N Alphatonos ; G 798
U 903 ; WX 318 ; N anoteleia ; G 799
U 904 ; WX 746 ; N Epsilontonos ; G 800
U 905 ; WX 871 ; N Etatonos ; G 801
U 906 ; WX 408 ; N Iotatonos ; G 802
U 908 ; WX 813 ; N Omicrontonos ; G 803
U 910 ; WX 825 ; N Upsilontonos ; G 804
U 911 ; WX 826 ; N Omegatonos ; G 805
U 912 ; WX 338 ; N iotadieresistonos ; G 806
U 913 ; WX 684 ; N Alpha ; G 807
U 914 ; WX 686 ; N Beta ; G 808
U 915 ; WX 557 ; N Gamma ; G 809
U 916 ; WX 684 ; N uni0394 ; G 810
U 917 ; WX 632 ; N Epsilon ; G 811
U 918 ; WX 685 ; N Zeta ; G 812
U 919 ; WX 752 ; N Eta ; G 813
U 920 ; WX 787 ; N Theta ; G 814
U 921 ; WX 295 ; N Iota ; G 815
U 922 ; WX 656 ; N Kappa ; G 816
U 923 ; WX 684 ; N Lambda ; G 817
U 924 ; WX 863 ; N Mu ; G 818
U 925 ; WX 748 ; N Nu ; G 819
U 926 ; WX 632 ; N Xi ; G 820
U 927 ; WX 787 ; N Omicron ; G 821
U 928 ; WX 752 ; N Pi ; G 822
U 929 ; WX 603 ; N Rho ; G 823
U 931 ; WX 632 ; N Sigma ; G 824
U 932 ; WX 611 ; N Tau ; G 825
U 933 ; WX 611 ; N Upsilon ; G 826
U 934 ; WX 787 ; N Phi ; G 827
U 935 ; WX 685 ; N Chi ; G 828
U 936 ; WX 787 ; N Psi ; G 829
U 937 ; WX 764 ; N Omega ; G 830
U 938 ; WX 295 ; N Iotadieresis ; G 831
U 939 ; WX 611 ; N Upsilondieresis ; G 832
U 940 ; WX 659 ; N alphatonos ; G 833
U 941 ; WX 541 ; N epsilontonos ; G 834
U 942 ; WX 634 ; N etatonos ; G 835
U 943 ; WX 338 ; N iotatonos ; G 836
U 944 ; WX 579 ; N upsilondieresistonos ; G 837
U 945 ; WX 659 ; N alpha ; G 838
U 946 ; WX 638 ; N beta ; G 839
U 947 ; WX 592 ; N gamma ; G 840
U 948 ; WX 612 ; N delta ; G 841
U 949 ; WX 541 ; N epsilon ; G 842
U 950 ; WX 544 ; N zeta ; G 843
U 951 ; WX 634 ; N eta ; G 844
U 952 ; WX 612 ; N theta ; G 845
U 953 ; WX 338 ; N iota ; G 846
U 954 ; WX 589 ; N kappa ; G 847
U 955 ; WX 592 ; N lambda ; G 848
U 956 ; WX 636 ; N uni03BC ; G 849
U 957 ; WX 559 ; N nu ; G 850
U 958 ; WX 558 ; N xi ; G 851
U 959 ; WX 612 ; N omicron ; G 852
U 960 ; WX 602 ; N pi ; G 853
U 961 ; WX 635 ; N rho ; G 854
U 962 ; WX 587 ; N sigma1 ; G 855
U 963 ; WX 634 ; N sigma ; G 856
U 964 ; WX 602 ; N tau ; G 857
U 965 ; WX 579 ; N upsilon ; G 858
U 966 ; WX 660 ; N phi ; G 859
U 967 ; WX 578 ; N chi ; G 860
U 968 ; WX 660 ; N psi ; G 861
U 969 ; WX 837 ; N omega ; G 862
U 970 ; WX 338 ; N iotadieresis ; G 863
U 971 ; WX 579 ; N upsilondieresis ; G 864
U 972 ; WX 612 ; N omicrontonos ; G 865
U 973 ; WX 579 ; N upsilontonos ; G 866
U 974 ; WX 837 ; N omegatonos ; G 867
U 975 ; WX 656 ; N uni03CF ; G 868
U 976 ; WX 614 ; N uni03D0 ; G 869
U 977 ; WX 619 ; N theta1 ; G 870
U 978 ; WX 699 ; N Upsilon1 ; G 871
U 979 ; WX 842 ; N uni03D3 ; G 872
U 980 ; WX 699 ; N uni03D4 ; G 873
U 981 ; WX 660 ; N phi1 ; G 874
U 982 ; WX 837 ; N omega1 ; G 875
U 983 ; WX 664 ; N uni03D7 ; G 876
U 984 ; WX 787 ; N uni03D8 ; G 877
U 985 ; WX 612 ; N uni03D9 ; G 878
U 986 ; WX 648 ; N uni03DA ; G 879
U 987 ; WX 587 ; N uni03DB ; G 880
U 988 ; WX 575 ; N uni03DC ; G 881
U 989 ; WX 458 ; N uni03DD ; G 882
U 990 ; WX 660 ; N uni03DE ; G 883
U 991 ; WX 660 ; N uni03DF ; G 884
U 992 ; WX 865 ; N uni03E0 ; G 885
U 993 ; WX 627 ; N uni03E1 ; G 886
U 994 ; WX 934 ; N uni03E2 ; G 887
U 995 ; WX 837 ; N uni03E3 ; G 888
U 996 ; WX 758 ; N uni03E4 ; G 889
U 997 ; WX 659 ; N uni03E5 ; G 890
U 998 ; WX 792 ; N uni03E6 ; G 891
U 999 ; WX 615 ; N uni03E7 ; G 892
U 1000 ; WX 687 ; N uni03E8 ; G 893
U 1001 ; WX 607 ; N uni03E9 ; G 894
U 1002 ; WX 768 ; N uni03EA ; G 895
U 1003 ; WX 625 ; N uni03EB ; G 896
U 1004 ; WX 699 ; N uni03EC ; G 897
U 1005 ; WX 612 ; N uni03ED ; G 898
U 1006 ; WX 611 ; N uni03EE ; G 899
U 1007 ; WX 536 ; N uni03EF ; G 900
U 1008 ; WX 664 ; N uni03F0 ; G 901
U 1009 ; WX 635 ; N uni03F1 ; G 902
U 1010 ; WX 550 ; N uni03F2 ; G 903
U 1011 ; WX 278 ; N uni03F3 ; G 904
U 1012 ; WX 787 ; N uni03F4 ; G 905
U 1013 ; WX 615 ; N uni03F5 ; G 906
U 1014 ; WX 615 ; N uni03F6 ; G 907
U 1015 ; WX 605 ; N uni03F7 ; G 908
U 1016 ; WX 635 ; N uni03F8 ; G 909
U 1017 ; WX 698 ; N uni03F9 ; G 910
U 1018 ; WX 863 ; N uni03FA ; G 911
U 1019 ; WX 651 ; N uni03FB ; G 912
U 1020 ; WX 635 ; N uni03FC ; G 913
U 1021 ; WX 703 ; N uni03FD ; G 914
U 1022 ; WX 698 ; N uni03FE ; G 915
U 1023 ; WX 703 ; N uni03FF ; G 916
U 1024 ; WX 632 ; N uni0400 ; G 917
U 1025 ; WX 632 ; N uni0401 ; G 918
U 1026 ; WX 786 ; N uni0402 ; G 919
U 1027 ; WX 610 ; N uni0403 ; G 920
U 1028 ; WX 698 ; N uni0404 ; G 921
U 1029 ; WX 635 ; N uni0405 ; G 922
U 1030 ; WX 295 ; N uni0406 ; G 923
U 1031 ; WX 295 ; N uni0407 ; G 924
U 1032 ; WX 295 ; N uni0408 ; G 925
U 1033 ; WX 1094 ; N uni0409 ; G 926
U 1034 ; WX 1045 ; N uni040A ; G 927
U 1035 ; WX 786 ; N uni040B ; G 928
U 1036 ; WX 710 ; N uni040C ; G 929
U 1037 ; WX 748 ; N uni040D ; G 930
U 1038 ; WX 609 ; N uni040E ; G 931
U 1039 ; WX 752 ; N uni040F ; G 932
U 1040 ; WX 684 ; N uni0410 ; G 933
U 1041 ; WX 686 ; N uni0411 ; G 934
U 1042 ; WX 686 ; N uni0412 ; G 935
U 1043 ; WX 610 ; N uni0413 ; G 936
U 1044 ; WX 781 ; N uni0414 ; G 937
U 1045 ; WX 632 ; N uni0415 ; G 938
U 1046 ; WX 1077 ; N uni0416 ; G 939
U 1047 ; WX 641 ; N uni0417 ; G 940
U 1048 ; WX 748 ; N uni0418 ; G 941
U 1049 ; WX 748 ; N uni0419 ; G 942
U 1050 ; WX 710 ; N uni041A ; G 943
U 1051 ; WX 752 ; N uni041B ; G 944
U 1052 ; WX 863 ; N uni041C ; G 945
U 1053 ; WX 752 ; N uni041D ; G 946
U 1054 ; WX 787 ; N uni041E ; G 947
U 1055 ; WX 752 ; N uni041F ; G 948
U 1056 ; WX 603 ; N uni0420 ; G 949
U 1057 ; WX 698 ; N uni0421 ; G 950
U 1058 ; WX 611 ; N uni0422 ; G 951
U 1059 ; WX 609 ; N uni0423 ; G 952
U 1060 ; WX 861 ; N uni0424 ; G 953
U 1061 ; WX 685 ; N uni0425 ; G 954
U 1062 ; WX 776 ; N uni0426 ; G 955
U 1063 ; WX 686 ; N uni0427 ; G 956
U 1064 ; WX 1069 ; N uni0428 ; G 957
U 1065 ; WX 1094 ; N uni0429 ; G 958
U 1066 ; WX 833 ; N uni042A ; G 959
U 1067 ; WX 882 ; N uni042B ; G 960
U 1068 ; WX 686 ; N uni042C ; G 961
U 1069 ; WX 698 ; N uni042D ; G 962
U 1070 ; WX 1080 ; N uni042E ; G 963
U 1071 ; WX 695 ; N uni042F ; G 964
U 1072 ; WX 613 ; N uni0430 ; G 965
U 1073 ; WX 617 ; N uni0431 ; G 966
U 1074 ; WX 589 ; N uni0432 ; G 967
U 1075 ; WX 525 ; N uni0433 ; G 968
U 1076 ; WX 691 ; N uni0434 ; G 969
U 1077 ; WX 615 ; N uni0435 ; G 970
U 1078 ; WX 901 ; N uni0436 ; G 971
U 1079 ; WX 532 ; N uni0437 ; G 972
U 1080 ; WX 650 ; N uni0438 ; G 973
U 1081 ; WX 650 ; N uni0439 ; G 974
U 1082 ; WX 604 ; N uni043A ; G 975
U 1083 ; WX 639 ; N uni043B ; G 976
U 1084 ; WX 754 ; N uni043C ; G 977
U 1085 ; WX 654 ; N uni043D ; G 978
U 1086 ; WX 612 ; N uni043E ; G 979
U 1087 ; WX 654 ; N uni043F ; G 980
U 1088 ; WX 635 ; N uni0440 ; G 981
U 1089 ; WX 550 ; N uni0441 ; G 982
U 1090 ; WX 583 ; N uni0442 ; G 983
U 1091 ; WX 592 ; N uni0443 ; G 984
U 1092 ; WX 855 ; N uni0444 ; G 985
U 1093 ; WX 592 ; N uni0445 ; G 986
U 1094 ; WX 681 ; N uni0446 ; G 987
U 1095 ; WX 591 ; N uni0447 ; G 988
U 1096 ; WX 915 ; N uni0448 ; G 989
U 1097 ; WX 942 ; N uni0449 ; G 990
U 1098 ; WX 707 ; N uni044A ; G 991
U 1099 ; WX 790 ; N uni044B ; G 992
U 1100 ; WX 589 ; N uni044C ; G 993
U 1101 ; WX 549 ; N uni044D ; G 994
U 1102 ; WX 842 ; N uni044E ; G 995
U 1103 ; WX 602 ; N uni044F ; G 996
U 1104 ; WX 615 ; N uni0450 ; G 997
U 1105 ; WX 615 ; N uni0451 ; G 998
U 1106 ; WX 625 ; N uni0452 ; G 999
U 1107 ; WX 525 ; N uni0453 ; G 1000
U 1108 ; WX 549 ; N uni0454 ; G 1001
U 1109 ; WX 521 ; N uni0455 ; G 1002
U 1110 ; WX 278 ; N uni0456 ; G 1003
U 1111 ; WX 278 ; N uni0457 ; G 1004
U 1112 ; WX 278 ; N uni0458 ; G 1005
U 1113 ; WX 902 ; N uni0459 ; G 1006
U 1114 ; WX 898 ; N uni045A ; G 1007
U 1115 ; WX 652 ; N uni045B ; G 1008
U 1116 ; WX 604 ; N uni045C ; G 1009
U 1117 ; WX 650 ; N uni045D ; G 1010
U 1118 ; WX 592 ; N uni045E ; G 1011
U 1119 ; WX 654 ; N uni045F ; G 1012
U 1120 ; WX 934 ; N uni0460 ; G 1013
U 1121 ; WX 837 ; N uni0461 ; G 1014
U 1122 ; WX 771 ; N uni0462 ; G 1015
U 1123 ; WX 672 ; N uni0463 ; G 1016
U 1124 ; WX 942 ; N uni0464 ; G 1017
U 1125 ; WX 749 ; N uni0465 ; G 1018
U 1126 ; WX 879 ; N uni0466 ; G 1019
U 1127 ; WX 783 ; N uni0467 ; G 1020
U 1128 ; WX 1160 ; N uni0468 ; G 1021
U 1129 ; WX 1001 ; N uni0469 ; G 1022
U 1130 ; WX 787 ; N uni046A ; G 1023
U 1131 ; WX 612 ; N uni046B ; G 1024
U 1132 ; WX 1027 ; N uni046C ; G 1025
U 1133 ; WX 824 ; N uni046D ; G 1026
U 1134 ; WX 636 ; N uni046E ; G 1027
U 1135 ; WX 541 ; N uni046F ; G 1028
U 1136 ; WX 856 ; N uni0470 ; G 1029
U 1137 ; WX 876 ; N uni0471 ; G 1030
U 1138 ; WX 787 ; N uni0472 ; G 1031
U 1139 ; WX 612 ; N uni0473 ; G 1032
U 1140 ; WX 781 ; N uni0474 ; G 1033
U 1141 ; WX 665 ; N uni0475 ; G 1034
U 1142 ; WX 781 ; N uni0476 ; G 1035
U 1143 ; WX 665 ; N uni0477 ; G 1036
U 1144 ; WX 992 ; N uni0478 ; G 1037
U 1145 ; WX 904 ; N uni0479 ; G 1038
U 1146 ; WX 953 ; N uni047A ; G 1039
U 1147 ; WX 758 ; N uni047B ; G 1040
U 1148 ; WX 1180 ; N uni047C ; G 1041
U 1149 ; WX 1028 ; N uni047D ; G 1042
U 1150 ; WX 934 ; N uni047E ; G 1043
U 1151 ; WX 837 ; N uni047F ; G 1044
U 1152 ; WX 698 ; N uni0480 ; G 1045
U 1153 ; WX 550 ; N uni0481 ; G 1046
U 1154 ; WX 502 ; N uni0482 ; G 1047
U 1155 ; WX 0 ; N uni0483 ; G 1048
U 1156 ; WX 0 ; N uni0484 ; G 1049
U 1157 ; WX 0 ; N uni0485 ; G 1050
U 1158 ; WX 0 ; N uni0486 ; G 1051
U 1159 ; WX 0 ; N uni0487 ; G 1052
U 1160 ; WX 418 ; N uni0488 ; G 1053
U 1161 ; WX 418 ; N uni0489 ; G 1054
U 1162 ; WX 772 ; N uni048A ; G 1055
U 1163 ; WX 677 ; N uni048B ; G 1056
U 1164 ; WX 686 ; N uni048C ; G 1057
U 1165 ; WX 589 ; N uni048D ; G 1058
U 1166 ; WX 603 ; N uni048E ; G 1059
U 1167 ; WX 635 ; N uni048F ; G 1060
U 1168 ; WX 610 ; N uni0490 ; G 1061
U 1169 ; WX 525 ; N uni0491 ; G 1062
U 1170 ; WX 675 ; N uni0492 ; G 1063
U 1171 ; WX 590 ; N uni0493 ; G 1064
U 1172 ; WX 624 ; N uni0494 ; G 1065
U 1173 ; WX 530 ; N uni0495 ; G 1066
U 1174 ; WX 1077 ; N uni0496 ; G 1067
U 1175 ; WX 901 ; N uni0497 ; G 1068
U 1176 ; WX 641 ; N uni0498 ; G 1069
U 1177 ; WX 532 ; N uni0499 ; G 1070
U 1178 ; WX 710 ; N uni049A ; G 1071
U 1179 ; WX 604 ; N uni049B ; G 1072
U 1180 ; WX 710 ; N uni049C ; G 1073
U 1181 ; WX 604 ; N uni049D ; G 1074
U 1182 ; WX 710 ; N uni049E ; G 1075
U 1183 ; WX 604 ; N uni049F ; G 1076
U 1184 ; WX 856 ; N uni04A0 ; G 1077
U 1185 ; WX 832 ; N uni04A1 ; G 1078
U 1186 ; WX 752 ; N uni04A2 ; G 1079
U 1187 ; WX 661 ; N uni04A3 ; G 1080
U 1188 ; WX 1014 ; N uni04A4 ; G 1081
U 1189 ; WX 877 ; N uni04A5 ; G 1082
U 1190 ; WX 1081 ; N uni04A6 ; G 1083
U 1191 ; WX 916 ; N uni04A7 ; G 1084
U 1192 ; WX 878 ; N uni04A8 ; G 1085
U 1193 ; WX 693 ; N uni04A9 ; G 1086
U 1194 ; WX 698 ; N uni04AA ; G 1087
U 1195 ; WX 550 ; N uni04AB ; G 1088
U 1196 ; WX 611 ; N uni04AC ; G 1089
U 1197 ; WX 583 ; N uni04AD ; G 1090
U 1198 ; WX 611 ; N uni04AE ; G 1091
U 1199 ; WX 592 ; N uni04AF ; G 1092
U 1200 ; WX 611 ; N uni04B0 ; G 1093
U 1201 ; WX 592 ; N uni04B1 ; G 1094
U 1202 ; WX 685 ; N uni04B2 ; G 1095
U 1203 ; WX 592 ; N uni04B3 ; G 1096
U 1204 ; WX 934 ; N uni04B4 ; G 1097
U 1205 ; WX 807 ; N uni04B5 ; G 1098
U 1206 ; WX 686 ; N uni04B6 ; G 1099
U 1207 ; WX 591 ; N uni04B7 ; G 1100
U 1208 ; WX 686 ; N uni04B8 ; G 1101
U 1209 ; WX 591 ; N uni04B9 ; G 1102
U 1210 ; WX 686 ; N uni04BA ; G 1103
U 1211 ; WX 634 ; N uni04BB ; G 1104
U 1212 ; WX 941 ; N uni04BC ; G 1105
U 1213 ; WX 728 ; N uni04BD ; G 1106
U 1214 ; WX 941 ; N uni04BE ; G 1107
U 1215 ; WX 728 ; N uni04BF ; G 1108
U 1216 ; WX 295 ; N uni04C0 ; G 1109
U 1217 ; WX 1077 ; N uni04C1 ; G 1110
U 1218 ; WX 901 ; N uni04C2 ; G 1111
U 1219 ; WX 656 ; N uni04C3 ; G 1112
U 1220 ; WX 604 ; N uni04C4 ; G 1113
U 1221 ; WX 776 ; N uni04C5 ; G 1114
U 1222 ; WX 670 ; N uni04C6 ; G 1115
U 1223 ; WX 752 ; N uni04C7 ; G 1116
U 1224 ; WX 661 ; N uni04C8 ; G 1117
U 1225 ; WX 776 ; N uni04C9 ; G 1118
U 1226 ; WX 681 ; N uni04CA ; G 1119
U 1227 ; WX 686 ; N uni04CB ; G 1120
U 1228 ; WX 591 ; N uni04CC ; G 1121
U 1229 ; WX 888 ; N uni04CD ; G 1122
U 1230 ; WX 774 ; N uni04CE ; G 1123
U 1231 ; WX 278 ; N uni04CF ; G 1124
U 1232 ; WX 684 ; N uni04D0 ; G 1125
U 1233 ; WX 613 ; N uni04D1 ; G 1126
U 1234 ; WX 684 ; N uni04D2 ; G 1127
U 1235 ; WX 613 ; N uni04D3 ; G 1128
U 1236 ; WX 974 ; N uni04D4 ; G 1129
U 1237 ; WX 982 ; N uni04D5 ; G 1130
U 1238 ; WX 632 ; N uni04D6 ; G 1131
U 1239 ; WX 615 ; N uni04D7 ; G 1132
U 1240 ; WX 787 ; N uni04D8 ; G 1133
U 1241 ; WX 615 ; N uni04D9 ; G 1134
U 1242 ; WX 787 ; N uni04DA ; G 1135
U 1243 ; WX 615 ; N uni04DB ; G 1136
U 1244 ; WX 1077 ; N uni04DC ; G 1137
U 1245 ; WX 901 ; N uni04DD ; G 1138
U 1246 ; WX 641 ; N uni04DE ; G 1139
U 1247 ; WX 532 ; N uni04DF ; G 1140
U 1248 ; WX 666 ; N uni04E0 ; G 1141
U 1249 ; WX 578 ; N uni04E1 ; G 1142
U 1250 ; WX 748 ; N uni04E2 ; G 1143
U 1251 ; WX 650 ; N uni04E3 ; G 1144
U 1252 ; WX 748 ; N uni04E4 ; G 1145
U 1253 ; WX 650 ; N uni04E5 ; G 1146
U 1254 ; WX 787 ; N uni04E6 ; G 1147
U 1255 ; WX 612 ; N uni04E7 ; G 1148
U 1256 ; WX 787 ; N uni04E8 ; G 1149
U 1257 ; WX 612 ; N uni04E9 ; G 1150
U 1258 ; WX 787 ; N uni04EA ; G 1151
U 1259 ; WX 612 ; N uni04EB ; G 1152
U 1260 ; WX 698 ; N uni04EC ; G 1153
U 1261 ; WX 549 ; N uni04ED ; G 1154
U 1262 ; WX 609 ; N uni04EE ; G 1155
U 1263 ; WX 592 ; N uni04EF ; G 1156
U 1264 ; WX 609 ; N uni04F0 ; G 1157
U 1265 ; WX 592 ; N uni04F1 ; G 1158
U 1266 ; WX 609 ; N uni04F2 ; G 1159
U 1267 ; WX 592 ; N uni04F3 ; G 1160
U 1268 ; WX 686 ; N uni04F4 ; G 1161
U 1269 ; WX 591 ; N uni04F5 ; G 1162
U 1270 ; WX 610 ; N uni04F6 ; G 1163
U 1271 ; WX 525 ; N uni04F7 ; G 1164
U 1272 ; WX 882 ; N uni04F8 ; G 1165
U 1273 ; WX 790 ; N uni04F9 ; G 1166
U 1274 ; WX 675 ; N uni04FA ; G 1167
U 1275 ; WX 590 ; N uni04FB ; G 1168
U 1276 ; WX 685 ; N uni04FC ; G 1169
U 1277 ; WX 592 ; N uni04FD ; G 1170
U 1278 ; WX 685 ; N uni04FE ; G 1171
U 1279 ; WX 592 ; N uni04FF ; G 1172
U 1280 ; WX 686 ; N uni0500 ; G 1173
U 1281 ; WX 589 ; N uni0501 ; G 1174
U 1282 ; WX 1006 ; N uni0502 ; G 1175
U 1283 ; WX 897 ; N uni0503 ; G 1176
U 1284 ; WX 975 ; N uni0504 ; G 1177
U 1285 ; WX 869 ; N uni0505 ; G 1178
U 1286 ; WX 679 ; N uni0506 ; G 1179
U 1287 ; WX 588 ; N uni0507 ; G 1180
U 1288 ; WX 1072 ; N uni0508 ; G 1181
U 1289 ; WX 957 ; N uni0509 ; G 1182
U 1290 ; WX 1113 ; N uni050A ; G 1183
U 1291 ; WX 967 ; N uni050B ; G 1184
U 1292 ; WX 775 ; N uni050C ; G 1185
U 1293 ; WX 660 ; N uni050D ; G 1186
U 1294 ; WX 773 ; N uni050E ; G 1187
U 1295 ; WX 711 ; N uni050F ; G 1188
U 1296 ; WX 614 ; N uni0510 ; G 1189
U 1297 ; WX 541 ; N uni0511 ; G 1190
U 1298 ; WX 752 ; N uni0512 ; G 1191
U 1299 ; WX 639 ; N uni0513 ; G 1192
U 1300 ; WX 1169 ; N uni0514 ; G 1193
U 1301 ; WX 994 ; N uni0515 ; G 1194
U 1302 ; WX 894 ; N uni0516 ; G 1195
U 1303 ; WX 864 ; N uni0517 ; G 1196
U 1304 ; WX 1032 ; N uni0518 ; G 1197
U 1305 ; WX 986 ; N uni0519 ; G 1198
U 1306 ; WX 787 ; N uni051A ; G 1199
U 1307 ; WX 635 ; N uni051B ; G 1200
U 1308 ; WX 989 ; N uni051C ; G 1201
U 1309 ; WX 818 ; N uni051D ; G 1202
U 1310 ; WX 710 ; N uni051E ; G 1203
U 1311 ; WX 604 ; N uni051F ; G 1204
U 1312 ; WX 1081 ; N uni0520 ; G 1205
U 1313 ; WX 905 ; N uni0521 ; G 1206
U 1314 ; WX 1081 ; N uni0522 ; G 1207
U 1315 ; WX 912 ; N uni0523 ; G 1208
U 1316 ; WX 793 ; N uni0524 ; G 1209
U 1317 ; WX 683 ; N uni0525 ; G 1210
U 1329 ; WX 766 ; N uni0531 ; G 1211
U 1330 ; WX 732 ; N uni0532 ; G 1212
U 1331 ; WX 753 ; N uni0533 ; G 1213
U 1332 ; WX 753 ; N uni0534 ; G 1214
U 1333 ; WX 732 ; N uni0535 ; G 1215
U 1334 ; WX 772 ; N uni0536 ; G 1216
U 1335 ; WX 640 ; N uni0537 ; G 1217
U 1336 ; WX 732 ; N uni0538 ; G 1218
U 1337 ; WX 859 ; N uni0539 ; G 1219
U 1338 ; WX 753 ; N uni053A ; G 1220
U 1339 ; WX 691 ; N uni053B ; G 1221
U 1340 ; WX 533 ; N uni053C ; G 1222
U 1341 ; WX 922 ; N uni053D ; G 1223
U 1342 ; WX 863 ; N uni053E ; G 1224
U 1343 ; WX 732 ; N uni053F ; G 1225
U 1344 ; WX 716 ; N uni0540 ; G 1226
U 1345 ; WX 766 ; N uni0541 ; G 1227
U 1346 ; WX 753 ; N uni0542 ; G 1228
U 1347 ; WX 767 ; N uni0543 ; G 1229
U 1348 ; WX 792 ; N uni0544 ; G 1230
U 1349 ; WX 728 ; N uni0545 ; G 1231
U 1350 ; WX 729 ; N uni0546 ; G 1232
U 1351 ; WX 757 ; N uni0547 ; G 1233
U 1352 ; WX 732 ; N uni0548 ; G 1234
U 1353 ; WX 713 ; N uni0549 ; G 1235
U 1354 ; WX 800 ; N uni054A ; G 1236
U 1355 ; WX 768 ; N uni054B ; G 1237
U 1356 ; WX 792 ; N uni054C ; G 1238
U 1357 ; WX 732 ; N uni054D ; G 1239
U 1358 ; WX 753 ; N uni054E ; G 1240
U 1359 ; WX 705 ; N uni054F ; G 1241
U 1360 ; WX 694 ; N uni0550 ; G 1242
U 1361 ; WX 744 ; N uni0551 ; G 1243
U 1362 ; WX 538 ; N uni0552 ; G 1244
U 1363 ; WX 811 ; N uni0553 ; G 1245
U 1364 ; WX 757 ; N uni0554 ; G 1246
U 1365 ; WX 787 ; N uni0555 ; G 1247
U 1366 ; WX 790 ; N uni0556 ; G 1248
U 1369 ; WX 307 ; N uni0559 ; G 1249
U 1370 ; WX 318 ; N uni055A ; G 1250
U 1371 ; WX 234 ; N uni055B ; G 1251
U 1372 ; WX 361 ; N uni055C ; G 1252
U 1373 ; WX 238 ; N uni055D ; G 1253
U 1374 ; WX 405 ; N uni055E ; G 1254
U 1375 ; WX 500 ; N uni055F ; G 1255
U 1377 ; WX 974 ; N uni0561 ; G 1256
U 1378 ; WX 634 ; N uni0562 ; G 1257
U 1379 ; WX 658 ; N uni0563 ; G 1258
U 1380 ; WX 663 ; N uni0564 ; G 1259
U 1381 ; WX 634 ; N uni0565 ; G 1260
U 1382 ; WX 635 ; N uni0566 ; G 1261
U 1383 ; WX 515 ; N uni0567 ; G 1262
U 1384 ; WX 634 ; N uni0568 ; G 1263
U 1385 ; WX 738 ; N uni0569 ; G 1264
U 1386 ; WX 658 ; N uni056A ; G 1265
U 1387 ; WX 634 ; N uni056B ; G 1266
U 1388 ; WX 271 ; N uni056C ; G 1267
U 1389 ; WX 980 ; N uni056D ; G 1268
U 1390 ; WX 623 ; N uni056E ; G 1269
U 1391 ; WX 634 ; N uni056F ; G 1270
U 1392 ; WX 634 ; N uni0570 ; G 1271
U 1393 ; WX 608 ; N uni0571 ; G 1272
U 1394 ; WX 634 ; N uni0572 ; G 1273
U 1395 ; WX 629 ; N uni0573 ; G 1274
U 1396 ; WX 634 ; N uni0574 ; G 1275
U 1397 ; WX 271 ; N uni0575 ; G 1276
U 1398 ; WX 634 ; N uni0576 ; G 1277
U 1399 ; WX 499 ; N uni0577 ; G 1278
U 1400 ; WX 634 ; N uni0578 ; G 1279
U 1401 ; WX 404 ; N uni0579 ; G 1280
U 1402 ; WX 974 ; N uni057A ; G 1281
U 1403 ; WX 560 ; N uni057B ; G 1282
U 1404 ; WX 648 ; N uni057C ; G 1283
U 1405 ; WX 634 ; N uni057D ; G 1284
U 1406 ; WX 634 ; N uni057E ; G 1285
U 1407 ; WX 974 ; N uni057F ; G 1286
U 1408 ; WX 634 ; N uni0580 ; G 1287
U 1409 ; WX 633 ; N uni0581 ; G 1288
U 1410 ; WX 435 ; N uni0582 ; G 1289
U 1411 ; WX 974 ; N uni0583 ; G 1290
U 1412 ; WX 636 ; N uni0584 ; G 1291
U 1413 ; WX 609 ; N uni0585 ; G 1292
U 1414 ; WX 805 ; N uni0586 ; G 1293
U 1415 ; WX 812 ; N uni0587 ; G 1294
U 1417 ; WX 337 ; N uni0589 ; G 1295
U 1418 ; WX 361 ; N uni058A ; G 1296
U 1456 ; WX 0 ; N uni05B0 ; G 1297
U 1457 ; WX 0 ; N uni05B1 ; G 1298
U 1458 ; WX 0 ; N uni05B2 ; G 1299
U 1459 ; WX 0 ; N uni05B3 ; G 1300
U 1460 ; WX 0 ; N uni05B4 ; G 1301
U 1461 ; WX 0 ; N uni05B5 ; G 1302
U 1462 ; WX 0 ; N uni05B6 ; G 1303
U 1463 ; WX 0 ; N uni05B7 ; G 1304
U 1464 ; WX 0 ; N uni05B8 ; G 1305
U 1465 ; WX 0 ; N uni05B9 ; G 1306
U 1466 ; WX 0 ; N uni05BA ; G 1307
U 1467 ; WX 0 ; N uni05BB ; G 1308
U 1468 ; WX 0 ; N uni05BC ; G 1309
U 1469 ; WX 0 ; N uni05BD ; G 1310
U 1470 ; WX 361 ; N uni05BE ; G 1311
U 1471 ; WX 0 ; N uni05BF ; G 1312
U 1472 ; WX 295 ; N uni05C0 ; G 1313
U 1473 ; WX 0 ; N uni05C1 ; G 1314
U 1474 ; WX 0 ; N uni05C2 ; G 1315
U 1475 ; WX 295 ; N uni05C3 ; G 1316
U 1478 ; WX 441 ; N uni05C6 ; G 1317
U 1479 ; WX 0 ; N uni05C7 ; G 1318
U 1488 ; WX 668 ; N uni05D0 ; G 1319
U 1489 ; WX 578 ; N uni05D1 ; G 1320
U 1490 ; WX 412 ; N uni05D2 ; G 1321
U 1491 ; WX 546 ; N uni05D3 ; G 1322
U 1492 ; WX 653 ; N uni05D4 ; G 1323
U 1493 ; WX 272 ; N uni05D5 ; G 1324
U 1494 ; WX 346 ; N uni05D6 ; G 1325
U 1495 ; WX 653 ; N uni05D7 ; G 1326
U 1496 ; WX 648 ; N uni05D8 ; G 1327
U 1497 ; WX 224 ; N uni05D9 ; G 1328
U 1498 ; WX 537 ; N uni05DA ; G 1329
U 1499 ; WX 529 ; N uni05DB ; G 1330
U 1500 ; WX 568 ; N uni05DC ; G 1331
U 1501 ; WX 664 ; N uni05DD ; G 1332
U 1502 ; WX 679 ; N uni05DE ; G 1333
U 1503 ; WX 272 ; N uni05DF ; G 1334
U 1504 ; WX 400 ; N uni05E0 ; G 1335
U 1505 ; WX 649 ; N uni05E1 ; G 1336
U 1506 ; WX 626 ; N uni05E2 ; G 1337
U 1507 ; WX 640 ; N uni05E3 ; G 1338
U 1508 ; WX 625 ; N uni05E4 ; G 1339
U 1509 ; WX 540 ; N uni05E5 ; G 1340
U 1510 ; WX 593 ; N uni05E6 ; G 1341
U 1511 ; WX 709 ; N uni05E7 ; G 1342
U 1512 ; WX 564 ; N uni05E8 ; G 1343
U 1513 ; WX 708 ; N uni05E9 ; G 1344
U 1514 ; WX 657 ; N uni05EA ; G 1345
U 1520 ; WX 471 ; N uni05F0 ; G 1346
U 1521 ; WX 423 ; N uni05F1 ; G 1347
U 1522 ; WX 331 ; N uni05F2 ; G 1348
U 1523 ; WX 416 ; N uni05F3 ; G 1349
U 1524 ; WX 645 ; N uni05F4 ; G 1350
U 1542 ; WX 637 ; N uni0606 ; G 1351
U 1543 ; WX 637 ; N uni0607 ; G 1352
U 1545 ; WX 757 ; N uni0609 ; G 1353
U 1546 ; WX 977 ; N uni060A ; G 1354
U 1548 ; WX 323 ; N uni060C ; G 1355
U 1557 ; WX 0 ; N uni0615 ; G 1356
U 1563 ; WX 318 ; N uni061B ; G 1357
U 1567 ; WX 531 ; N uni061F ; G 1358
U 1569 ; WX 470 ; N uni0621 ; G 1359
U 1570 ; WX 278 ; N uni0622 ; G 1360
U 1571 ; WX 278 ; N uni0623 ; G 1361
U 1572 ; WX 483 ; N uni0624 ; G 1362
U 1573 ; WX 278 ; N uni0625 ; G 1363
U 1574 ; WX 783 ; N uni0626 ; G 1364
U 1575 ; WX 278 ; N uni0627 ; G 1365
U 1576 ; WX 941 ; N uni0628 ; G 1366
U 1577 ; WX 524 ; N uni0629 ; G 1367
U 1578 ; WX 941 ; N uni062A ; G 1368
U 1579 ; WX 941 ; N uni062B ; G 1369
U 1580 ; WX 646 ; N uni062C ; G 1370
U 1581 ; WX 646 ; N uni062D ; G 1371
U 1582 ; WX 646 ; N uni062E ; G 1372
U 1583 ; WX 445 ; N uni062F ; G 1373
U 1584 ; WX 445 ; N uni0630 ; G 1374
U 1585 ; WX 483 ; N uni0631 ; G 1375
U 1586 ; WX 483 ; N uni0632 ; G 1376
U 1587 ; WX 1221 ; N uni0633 ; G 1377
U 1588 ; WX 1221 ; N uni0634 ; G 1378
U 1589 ; WX 1209 ; N uni0635 ; G 1379
U 1590 ; WX 1209 ; N uni0636 ; G 1380
U 1591 ; WX 925 ; N uni0637 ; G 1381
U 1592 ; WX 925 ; N uni0638 ; G 1382
U 1593 ; WX 597 ; N uni0639 ; G 1383
U 1594 ; WX 597 ; N uni063A ; G 1384
U 1600 ; WX 293 ; N uni0640 ; G 1385
U 1601 ; WX 1037 ; N uni0641 ; G 1386
U 1602 ; WX 776 ; N uni0642 ; G 1387
U 1603 ; WX 824 ; N uni0643 ; G 1388
U 1604 ; WX 727 ; N uni0644 ; G 1389
U 1605 ; WX 619 ; N uni0645 ; G 1390
U 1606 ; WX 734 ; N uni0646 ; G 1391
U 1607 ; WX 524 ; N uni0647 ; G 1392
U 1608 ; WX 483 ; N uni0648 ; G 1393
U 1609 ; WX 783 ; N uni0649 ; G 1394
U 1610 ; WX 783 ; N uni064A ; G 1395
U 1611 ; WX 0 ; N uni064B ; G 1396
U 1612 ; WX 0 ; N uni064C ; G 1397
U 1613 ; WX 0 ; N uni064D ; G 1398
U 1614 ; WX 0 ; N uni064E ; G 1399
U 1615 ; WX 0 ; N uni064F ; G 1400
U 1616 ; WX 0 ; N uni0650 ; G 1401
U 1617 ; WX 0 ; N uni0651 ; G 1402
U 1618 ; WX 0 ; N uni0652 ; G 1403
U 1619 ; WX 0 ; N uni0653 ; G 1404
U 1620 ; WX 0 ; N uni0654 ; G 1405
U 1621 ; WX 0 ; N uni0655 ; G 1406
U 1623 ; WX 0 ; N uni0657 ; G 1407
U 1626 ; WX 500 ; N uni065A ; G 1408
U 1632 ; WX 537 ; N uni0660 ; G 1409
U 1633 ; WX 537 ; N uni0661 ; G 1410
U 1634 ; WX 537 ; N uni0662 ; G 1411
U 1635 ; WX 537 ; N uni0663 ; G 1412
U 1636 ; WX 537 ; N uni0664 ; G 1413
U 1637 ; WX 537 ; N uni0665 ; G 1414
U 1638 ; WX 537 ; N uni0666 ; G 1415
U 1639 ; WX 537 ; N uni0667 ; G 1416
U 1640 ; WX 537 ; N uni0668 ; G 1417
U 1641 ; WX 537 ; N uni0669 ; G 1418
U 1642 ; WX 537 ; N uni066A ; G 1419
U 1643 ; WX 325 ; N uni066B ; G 1420
U 1644 ; WX 318 ; N uni066C ; G 1421
U 1645 ; WX 545 ; N uni066D ; G 1422
U 1646 ; WX 941 ; N uni066E ; G 1423
U 1647 ; WX 776 ; N uni066F ; G 1424
U 1648 ; WX 0 ; N uni0670 ; G 1425
U 1652 ; WX 292 ; N uni0674 ; G 1426
U 1657 ; WX 941 ; N uni0679 ; G 1427
U 1658 ; WX 941 ; N uni067A ; G 1428
U 1659 ; WX 941 ; N uni067B ; G 1429
U 1660 ; WX 941 ; N uni067C ; G 1430
U 1661 ; WX 941 ; N uni067D ; G 1431
U 1662 ; WX 941 ; N uni067E ; G 1432
U 1663 ; WX 941 ; N uni067F ; G 1433
U 1664 ; WX 941 ; N uni0680 ; G 1434
U 1665 ; WX 646 ; N uni0681 ; G 1435
U 1666 ; WX 646 ; N uni0682 ; G 1436
U 1667 ; WX 646 ; N uni0683 ; G 1437
U 1668 ; WX 646 ; N uni0684 ; G 1438
U 1669 ; WX 646 ; N uni0685 ; G 1439
U 1670 ; WX 646 ; N uni0686 ; G 1440
U 1671 ; WX 646 ; N uni0687 ; G 1441
U 1672 ; WX 445 ; N uni0688 ; G 1442
U 1673 ; WX 445 ; N uni0689 ; G 1443
U 1674 ; WX 445 ; N uni068A ; G 1444
U 1675 ; WX 445 ; N uni068B ; G 1445
U 1676 ; WX 445 ; N uni068C ; G 1446
U 1677 ; WX 445 ; N uni068D ; G 1447
U 1678 ; WX 445 ; N uni068E ; G 1448
U 1679 ; WX 445 ; N uni068F ; G 1449
U 1680 ; WX 445 ; N uni0690 ; G 1450
U 1681 ; WX 483 ; N uni0691 ; G 1451
U 1682 ; WX 483 ; N uni0692 ; G 1452
U 1683 ; WX 498 ; N uni0693 ; G 1453
U 1684 ; WX 530 ; N uni0694 ; G 1454
U 1685 ; WX 610 ; N uni0695 ; G 1455
U 1686 ; WX 530 ; N uni0696 ; G 1456
U 1687 ; WX 483 ; N uni0697 ; G 1457
U 1688 ; WX 483 ; N uni0698 ; G 1458
U 1689 ; WX 483 ; N uni0699 ; G 1459
U 1690 ; WX 1221 ; N uni069A ; G 1460
U 1691 ; WX 1221 ; N uni069B ; G 1461
U 1692 ; WX 1221 ; N uni069C ; G 1462
U 1693 ; WX 1209 ; N uni069D ; G 1463
U 1694 ; WX 1209 ; N uni069E ; G 1464
U 1695 ; WX 925 ; N uni069F ; G 1465
U 1696 ; WX 597 ; N uni06A0 ; G 1466
U 1697 ; WX 1037 ; N uni06A1 ; G 1467
U 1698 ; WX 1037 ; N uni06A2 ; G 1468
U 1699 ; WX 1037 ; N uni06A3 ; G 1469
U 1700 ; WX 1037 ; N uni06A4 ; G 1470
U 1701 ; WX 1037 ; N uni06A5 ; G 1471
U 1702 ; WX 1037 ; N uni06A6 ; G 1472
U 1703 ; WX 776 ; N uni06A7 ; G 1473
U 1704 ; WX 776 ; N uni06A8 ; G 1474
U 1705 ; WX 895 ; N uni06A9 ; G 1475
U 1706 ; WX 1054 ; N uni06AA ; G 1476
U 1707 ; WX 895 ; N uni06AB ; G 1477
U 1708 ; WX 824 ; N uni06AC ; G 1478
U 1709 ; WX 824 ; N uni06AD ; G 1479
U 1710 ; WX 824 ; N uni06AE ; G 1480
U 1711 ; WX 895 ; N uni06AF ; G 1481
U 1712 ; WX 895 ; N uni06B0 ; G 1482
U 1713 ; WX 895 ; N uni06B1 ; G 1483
U 1714 ; WX 895 ; N uni06B2 ; G 1484
U 1715 ; WX 895 ; N uni06B3 ; G 1485
U 1716 ; WX 895 ; N uni06B4 ; G 1486
U 1717 ; WX 727 ; N uni06B5 ; G 1487
U 1718 ; WX 727 ; N uni06B6 ; G 1488
U 1719 ; WX 727 ; N uni06B7 ; G 1489
U 1720 ; WX 727 ; N uni06B8 ; G 1490
U 1721 ; WX 734 ; N uni06B9 ; G 1491
U 1722 ; WX 734 ; N uni06BA ; G 1492
U 1723 ; WX 734 ; N uni06BB ; G 1493
U 1724 ; WX 734 ; N uni06BC ; G 1494
U 1725 ; WX 734 ; N uni06BD ; G 1495
U 1726 ; WX 698 ; N uni06BE ; G 1496
U 1727 ; WX 646 ; N uni06BF ; G 1497
U 1734 ; WX 483 ; N uni06C6 ; G 1498
U 1735 ; WX 483 ; N uni06C7 ; G 1499
U 1736 ; WX 483 ; N uni06C8 ; G 1500
U 1739 ; WX 483 ; N uni06CB ; G 1501
U 1740 ; WX 783 ; N uni06CC ; G 1502
U 1742 ; WX 783 ; N uni06CE ; G 1503
U 1744 ; WX 783 ; N uni06D0 ; G 1504
U 1749 ; WX 524 ; N uni06D5 ; G 1505
U 1776 ; WX 537 ; N uni06F0 ; G 1506
U 1777 ; WX 537 ; N uni06F1 ; G 1507
U 1778 ; WX 537 ; N uni06F2 ; G 1508
U 1779 ; WX 537 ; N uni06F3 ; G 1509
U 1780 ; WX 537 ; N uni06F4 ; G 1510
U 1781 ; WX 537 ; N uni06F5 ; G 1511
U 1782 ; WX 537 ; N uni06F6 ; G 1512
U 1783 ; WX 537 ; N uni06F7 ; G 1513
U 1784 ; WX 537 ; N uni06F8 ; G 1514
U 1785 ; WX 537 ; N uni06F9 ; G 1515
U 1984 ; WX 636 ; N uni07C0 ; G 1516
U 1985 ; WX 636 ; N uni07C1 ; G 1517
U 1986 ; WX 636 ; N uni07C2 ; G 1518
U 1987 ; WX 636 ; N uni07C3 ; G 1519
U 1988 ; WX 636 ; N uni07C4 ; G 1520
U 1989 ; WX 636 ; N uni07C5 ; G 1521
U 1990 ; WX 636 ; N uni07C6 ; G 1522
U 1991 ; WX 636 ; N uni07C7 ; G 1523
U 1992 ; WX 636 ; N uni07C8 ; G 1524
U 1993 ; WX 636 ; N uni07C9 ; G 1525
U 1994 ; WX 278 ; N uni07CA ; G 1526
U 1995 ; WX 571 ; N uni07CB ; G 1527
U 1996 ; WX 424 ; N uni07CC ; G 1528
U 1997 ; WX 592 ; N uni07CD ; G 1529
U 1998 ; WX 654 ; N uni07CE ; G 1530
U 1999 ; WX 654 ; N uni07CF ; G 1531
U 2000 ; WX 594 ; N uni07D0 ; G 1532
U 2001 ; WX 654 ; N uni07D1 ; G 1533
U 2002 ; WX 829 ; N uni07D2 ; G 1534
U 2003 ; WX 438 ; N uni07D3 ; G 1535
U 2004 ; WX 438 ; N uni07D4 ; G 1536
U 2005 ; WX 559 ; N uni07D5 ; G 1537
U 2006 ; WX 612 ; N uni07D6 ; G 1538
U 2007 ; WX 350 ; N uni07D7 ; G 1539
U 2008 ; WX 959 ; N uni07D8 ; G 1540
U 2009 ; WX 473 ; N uni07D9 ; G 1541
U 2010 ; WX 783 ; N uni07DA ; G 1542
U 2011 ; WX 654 ; N uni07DB ; G 1543
U 2012 ; WX 625 ; N uni07DC ; G 1544
U 2013 ; WX 734 ; N uni07DD ; G 1545
U 2014 ; WX 530 ; N uni07DE ; G 1546
U 2015 ; WX 724 ; N uni07DF ; G 1547
U 2016 ; WX 473 ; N uni07E0 ; G 1548
U 2017 ; WX 625 ; N uni07E1 ; G 1549
U 2018 ; WX 594 ; N uni07E2 ; G 1550
U 2019 ; WX 530 ; N uni07E3 ; G 1551
U 2020 ; WX 530 ; N uni07E4 ; G 1552
U 2021 ; WX 522 ; N uni07E5 ; G 1553
U 2022 ; WX 594 ; N uni07E6 ; G 1554
U 2023 ; WX 594 ; N uni07E7 ; G 1555
U 2027 ; WX 0 ; N uni07EB ; G 1556
U 2028 ; WX 0 ; N uni07EC ; G 1557
U 2029 ; WX 0 ; N uni07ED ; G 1558
U 2030 ; WX 0 ; N uni07EE ; G 1559
U 2031 ; WX 0 ; N uni07EF ; G 1560
U 2032 ; WX 0 ; N uni07F0 ; G 1561
U 2033 ; WX 0 ; N uni07F1 ; G 1562
U 2034 ; WX 0 ; N uni07F2 ; G 1563
U 2035 ; WX 0 ; N uni07F3 ; G 1564
U 2036 ; WX 313 ; N uni07F4 ; G 1565
U 2037 ; WX 313 ; N uni07F5 ; G 1566
U 2040 ; WX 560 ; N uni07F8 ; G 1567
U 2041 ; WX 560 ; N uni07F9 ; G 1568
U 2042 ; WX 361 ; N uni07FA ; G 1569
U 3647 ; WX 636 ; N uni0E3F ; G 1570
U 3713 ; WX 670 ; N uni0E81 ; G 1571
U 3714 ; WX 684 ; N uni0E82 ; G 1572
U 3716 ; WX 688 ; N uni0E84 ; G 1573
U 3719 ; WX 482 ; N uni0E87 ; G 1574
U 3720 ; WX 628 ; N uni0E88 ; G 1575
U 3722 ; WX 684 ; N uni0E8A ; G 1576
U 3725 ; WX 688 ; N uni0E8D ; G 1577
U 3732 ; WX 669 ; N uni0E94 ; G 1578
U 3733 ; WX 642 ; N uni0E95 ; G 1579
U 3734 ; WX 645 ; N uni0E96 ; G 1580
U 3735 ; WX 655 ; N uni0E97 ; G 1581
U 3737 ; WX 659 ; N uni0E99 ; G 1582
U 3738 ; WX 625 ; N uni0E9A ; G 1583
U 3739 ; WX 625 ; N uni0E9B ; G 1584
U 3740 ; WX 745 ; N uni0E9C ; G 1585
U 3741 ; WX 767 ; N uni0E9D ; G 1586
U 3742 ; WX 687 ; N uni0E9E ; G 1587
U 3743 ; WX 687 ; N uni0E9F ; G 1588
U 3745 ; WX 702 ; N uni0EA1 ; G 1589
U 3746 ; WX 688 ; N uni0EA2 ; G 1590
U 3747 ; WX 684 ; N uni0EA3 ; G 1591
U 3749 ; WX 649 ; N uni0EA5 ; G 1592
U 3751 ; WX 632 ; N uni0EA7 ; G 1593
U 3754 ; WX 703 ; N uni0EAA ; G 1594
U 3755 ; WX 819 ; N uni0EAB ; G 1595
U 3757 ; WX 633 ; N uni0EAD ; G 1596
U 3758 ; WX 684 ; N uni0EAE ; G 1597
U 3759 ; WX 788 ; N uni0EAF ; G 1598
U 3760 ; WX 632 ; N uni0EB0 ; G 1599
U 3761 ; WX 0 ; N uni0EB1 ; G 1600
U 3762 ; WX 539 ; N uni0EB2 ; G 1601
U 3763 ; WX 539 ; N uni0EB3 ; G 1602
U 3764 ; WX 0 ; N uni0EB4 ; G 1603
U 3765 ; WX 0 ; N uni0EB5 ; G 1604
U 3766 ; WX 0 ; N uni0EB6 ; G 1605
U 3767 ; WX 0 ; N uni0EB7 ; G 1606
U 3768 ; WX 0 ; N uni0EB8 ; G 1607
U 3769 ; WX 0 ; N uni0EB9 ; G 1608
U 3771 ; WX 0 ; N uni0EBB ; G 1609
U 3772 ; WX 0 ; N uni0EBC ; G 1610
U 3773 ; WX 663 ; N uni0EBD ; G 1611
U 3776 ; WX 375 ; N uni0EC0 ; G 1612
U 3777 ; WX 657 ; N uni0EC1 ; G 1613
U 3778 ; WX 460 ; N uni0EC2 ; G 1614
U 3779 ; WX 547 ; N uni0EC3 ; G 1615
U 3780 ; WX 491 ; N uni0EC4 ; G 1616
U 3782 ; WX 674 ; N uni0EC6 ; G 1617
U 3784 ; WX 0 ; N uni0EC8 ; G 1618
U 3785 ; WX 0 ; N uni0EC9 ; G 1619
U 3786 ; WX 0 ; N uni0ECA ; G 1620
U 3787 ; WX 0 ; N uni0ECB ; G 1621
U 3788 ; WX 0 ; N uni0ECC ; G 1622
U 3789 ; WX 0 ; N uni0ECD ; G 1623
U 3792 ; WX 636 ; N uni0ED0 ; G 1624
U 3793 ; WX 641 ; N uni0ED1 ; G 1625
U 3794 ; WX 641 ; N uni0ED2 ; G 1626
U 3795 ; WX 670 ; N uni0ED3 ; G 1627
U 3796 ; WX 625 ; N uni0ED4 ; G 1628
U 3797 ; WX 625 ; N uni0ED5 ; G 1629
U 3798 ; WX 703 ; N uni0ED6 ; G 1630
U 3799 ; WX 670 ; N uni0ED7 ; G 1631
U 3800 ; WX 674 ; N uni0ED8 ; G 1632
U 3801 ; WX 677 ; N uni0ED9 ; G 1633
U 3804 ; WX 1028 ; N uni0EDC ; G 1634
U 3805 ; WX 1028 ; N uni0EDD ; G 1635
U 4256 ; WX 874 ; N uni10A0 ; G 1636
U 4257 ; WX 733 ; N uni10A1 ; G 1637
U 4258 ; WX 679 ; N uni10A2 ; G 1638
U 4259 ; WX 834 ; N uni10A3 ; G 1639
U 4260 ; WX 615 ; N uni10A4 ; G 1640
U 4261 ; WX 768 ; N uni10A5 ; G 1641
U 4262 ; WX 753 ; N uni10A6 ; G 1642
U 4263 ; WX 914 ; N uni10A7 ; G 1643
U 4264 ; WX 453 ; N uni10A8 ; G 1644
U 4265 ; WX 620 ; N uni10A9 ; G 1645
U 4266 ; WX 843 ; N uni10AA ; G 1646
U 4267 ; WX 882 ; N uni10AB ; G 1647
U 4268 ; WX 625 ; N uni10AC ; G 1648
U 4269 ; WX 854 ; N uni10AD ; G 1649
U 4270 ; WX 781 ; N uni10AE ; G 1650
U 4271 ; WX 629 ; N uni10AF ; G 1651
U 4272 ; WX 912 ; N uni10B0 ; G 1652
U 4273 ; WX 621 ; N uni10B1 ; G 1653
U 4274 ; WX 620 ; N uni10B2 ; G 1654
U 4275 ; WX 854 ; N uni10B3 ; G 1655
U 4276 ; WX 866 ; N uni10B4 ; G 1656
U 4277 ; WX 724 ; N uni10B5 ; G 1657
U 4278 ; WX 630 ; N uni10B6 ; G 1658
U 4279 ; WX 621 ; N uni10B7 ; G 1659
U 4280 ; WX 625 ; N uni10B8 ; G 1660
U 4281 ; WX 620 ; N uni10B9 ; G 1661
U 4282 ; WX 818 ; N uni10BA ; G 1662
U 4283 ; WX 874 ; N uni10BB ; G 1663
U 4284 ; WX 615 ; N uni10BC ; G 1664
U 4285 ; WX 623 ; N uni10BD ; G 1665
U 4286 ; WX 625 ; N uni10BE ; G 1666
U 4287 ; WX 725 ; N uni10BF ; G 1667
U 4288 ; WX 844 ; N uni10C0 ; G 1668
U 4289 ; WX 596 ; N uni10C1 ; G 1669
U 4290 ; WX 688 ; N uni10C2 ; G 1670
U 4291 ; WX 596 ; N uni10C3 ; G 1671
U 4292 ; WX 594 ; N uni10C4 ; G 1672
U 4293 ; WX 738 ; N uni10C5 ; G 1673
U 4304 ; WX 508 ; N uni10D0 ; G 1674
U 4305 ; WX 518 ; N uni10D1 ; G 1675
U 4306 ; WX 581 ; N uni10D2 ; G 1676
U 4307 ; WX 818 ; N uni10D3 ; G 1677
U 4308 ; WX 508 ; N uni10D4 ; G 1678
U 4309 ; WX 513 ; N uni10D5 ; G 1679
U 4310 ; WX 500 ; N uni10D6 ; G 1680
U 4311 ; WX 801 ; N uni10D7 ; G 1681
U 4312 ; WX 518 ; N uni10D8 ; G 1682
U 4313 ; WX 510 ; N uni10D9 ; G 1683
U 4314 ; WX 1064 ; N uni10DA ; G 1684
U 4315 ; WX 522 ; N uni10DB ; G 1685
U 4316 ; WX 522 ; N uni10DC ; G 1686
U 4317 ; WX 786 ; N uni10DD ; G 1687
U 4318 ; WX 508 ; N uni10DE ; G 1688
U 4319 ; WX 518 ; N uni10DF ; G 1689
U 4320 ; WX 796 ; N uni10E0 ; G 1690
U 4321 ; WX 522 ; N uni10E1 ; G 1691
U 4322 ; WX 654 ; N uni10E2 ; G 1692
U 4323 ; WX 522 ; N uni10E3 ; G 1693
U 4324 ; WX 825 ; N uni10E4 ; G 1694
U 4325 ; WX 513 ; N uni10E5 ; G 1695
U 4326 ; WX 786 ; N uni10E6 ; G 1696
U 4327 ; WX 518 ; N uni10E7 ; G 1697
U 4328 ; WX 518 ; N uni10E8 ; G 1698
U 4329 ; WX 522 ; N uni10E9 ; G 1699
U 4330 ; WX 571 ; N uni10EA ; G 1700
U 4331 ; WX 522 ; N uni10EB ; G 1701
U 4332 ; WX 518 ; N uni10EC ; G 1702
U 4333 ; WX 520 ; N uni10ED ; G 1703
U 4334 ; WX 522 ; N uni10EE ; G 1704
U 4335 ; WX 454 ; N uni10EF ; G 1705
U 4336 ; WX 508 ; N uni10F0 ; G 1706
U 4337 ; WX 518 ; N uni10F1 ; G 1707
U 4338 ; WX 508 ; N uni10F2 ; G 1708
U 4339 ; WX 508 ; N uni10F3 ; G 1709
U 4340 ; WX 518 ; N uni10F4 ; G 1710
U 4341 ; WX 554 ; N uni10F5 ; G 1711
U 4342 ; WX 828 ; N uni10F6 ; G 1712
U 4343 ; WX 552 ; N uni10F7 ; G 1713
U 4344 ; WX 508 ; N uni10F8 ; G 1714
U 4345 ; WX 571 ; N uni10F9 ; G 1715
U 4346 ; WX 508 ; N uni10FA ; G 1716
U 4347 ; WX 448 ; N uni10FB ; G 1717
U 4348 ; WX 324 ; N uni10FC ; G 1718
U 5121 ; WX 684 ; N uni1401 ; G 1719
U 5122 ; WX 684 ; N uni1402 ; G 1720
U 5123 ; WX 684 ; N uni1403 ; G 1721
U 5124 ; WX 684 ; N uni1404 ; G 1722
U 5125 ; WX 769 ; N uni1405 ; G 1723
U 5126 ; WX 769 ; N uni1406 ; G 1724
U 5127 ; WX 769 ; N uni1407 ; G 1725
U 5129 ; WX 769 ; N uni1409 ; G 1726
U 5130 ; WX 769 ; N uni140A ; G 1727
U 5131 ; WX 769 ; N uni140B ; G 1728
U 5132 ; WX 835 ; N uni140C ; G 1729
U 5133 ; WX 834 ; N uni140D ; G 1730
U 5134 ; WX 835 ; N uni140E ; G 1731
U 5135 ; WX 834 ; N uni140F ; G 1732
U 5136 ; WX 835 ; N uni1410 ; G 1733
U 5137 ; WX 834 ; N uni1411 ; G 1734
U 5138 ; WX 967 ; N uni1412 ; G 1735
U 5139 ; WX 1007 ; N uni1413 ; G 1736
U 5140 ; WX 967 ; N uni1414 ; G 1737
U 5141 ; WX 1007 ; N uni1415 ; G 1738
U 5142 ; WX 769 ; N uni1416 ; G 1739
U 5143 ; WX 967 ; N uni1417 ; G 1740
U 5144 ; WX 1007 ; N uni1418 ; G 1741
U 5145 ; WX 967 ; N uni1419 ; G 1742
U 5146 ; WX 1007 ; N uni141A ; G 1743
U 5147 ; WX 769 ; N uni141B ; G 1744
U 5149 ; WX 256 ; N uni141D ; G 1745
U 5150 ; WX 543 ; N uni141E ; G 1746
U 5151 ; WX 423 ; N uni141F ; G 1747
U 5152 ; WX 423 ; N uni1420 ; G 1748
U 5153 ; WX 389 ; N uni1421 ; G 1749
U 5154 ; WX 389 ; N uni1422 ; G 1750
U 5155 ; WX 393 ; N uni1423 ; G 1751
U 5156 ; WX 389 ; N uni1424 ; G 1752
U 5157 ; WX 466 ; N uni1425 ; G 1753
U 5158 ; WX 385 ; N uni1426 ; G 1754
U 5159 ; WX 256 ; N uni1427 ; G 1755
U 5160 ; WX 389 ; N uni1428 ; G 1756
U 5161 ; WX 389 ; N uni1429 ; G 1757
U 5162 ; WX 389 ; N uni142A ; G 1758
U 5163 ; WX 1090 ; N uni142B ; G 1759
U 5164 ; WX 909 ; N uni142C ; G 1760
U 5165 ; WX 953 ; N uni142D ; G 1761
U 5166 ; WX 1117 ; N uni142E ; G 1762
U 5167 ; WX 684 ; N uni142F ; G 1763
U 5168 ; WX 684 ; N uni1430 ; G 1764
U 5169 ; WX 684 ; N uni1431 ; G 1765
U 5170 ; WX 684 ; N uni1432 ; G 1766
U 5171 ; WX 729 ; N uni1433 ; G 1767
U 5172 ; WX 729 ; N uni1434 ; G 1768
U 5173 ; WX 729 ; N uni1435 ; G 1769
U 5175 ; WX 729 ; N uni1437 ; G 1770
U 5176 ; WX 729 ; N uni1438 ; G 1771
U 5177 ; WX 729 ; N uni1439 ; G 1772
U 5178 ; WX 835 ; N uni143A ; G 1773
U 5179 ; WX 684 ; N uni143B ; G 1774
U 5180 ; WX 835 ; N uni143C ; G 1775
U 5181 ; WX 834 ; N uni143D ; G 1776
U 5182 ; WX 835 ; N uni143E ; G 1777
U 5183 ; WX 834 ; N uni143F ; G 1778
U 5184 ; WX 967 ; N uni1440 ; G 1779
U 5185 ; WX 1007 ; N uni1441 ; G 1780
U 5186 ; WX 967 ; N uni1442 ; G 1781
U 5187 ; WX 1007 ; N uni1443 ; G 1782
U 5188 ; WX 967 ; N uni1444 ; G 1783
U 5189 ; WX 1007 ; N uni1445 ; G 1784
U 5190 ; WX 967 ; N uni1446 ; G 1785
U 5191 ; WX 1007 ; N uni1447 ; G 1786
U 5192 ; WX 729 ; N uni1448 ; G 1787
U 5193 ; WX 508 ; N uni1449 ; G 1788
U 5194 ; WX 192 ; N uni144A ; G 1789
U 5196 ; WX 732 ; N uni144C ; G 1790
U 5197 ; WX 732 ; N uni144D ; G 1791
U 5198 ; WX 732 ; N uni144E ; G 1792
U 5199 ; WX 732 ; N uni144F ; G 1793
U 5200 ; WX 730 ; N uni1450 ; G 1794
U 5201 ; WX 730 ; N uni1451 ; G 1795
U 5202 ; WX 730 ; N uni1452 ; G 1796
U 5204 ; WX 730 ; N uni1454 ; G 1797
U 5205 ; WX 730 ; N uni1455 ; G 1798
U 5206 ; WX 730 ; N uni1456 ; G 1799
U 5207 ; WX 921 ; N uni1457 ; G 1800
U 5208 ; WX 889 ; N uni1458 ; G 1801
U 5209 ; WX 921 ; N uni1459 ; G 1802
U 5210 ; WX 889 ; N uni145A ; G 1803
U 5211 ; WX 921 ; N uni145B ; G 1804
U 5212 ; WX 889 ; N uni145C ; G 1805
U 5213 ; WX 928 ; N uni145D ; G 1806
U 5214 ; WX 900 ; N uni145E ; G 1807
U 5215 ; WX 928 ; N uni145F ; G 1808
U 5216 ; WX 900 ; N uni1460 ; G 1809
U 5217 ; WX 947 ; N uni1461 ; G 1810
U 5218 ; WX 900 ; N uni1462 ; G 1811
U 5219 ; WX 947 ; N uni1463 ; G 1812
U 5220 ; WX 900 ; N uni1464 ; G 1813
U 5221 ; WX 947 ; N uni1465 ; G 1814
U 5222 ; WX 434 ; N uni1466 ; G 1815
U 5223 ; WX 877 ; N uni1467 ; G 1816
U 5224 ; WX 877 ; N uni1468 ; G 1817
U 5225 ; WX 866 ; N uni1469 ; G 1818
U 5226 ; WX 890 ; N uni146A ; G 1819
U 5227 ; WX 628 ; N uni146B ; G 1820
U 5228 ; WX 628 ; N uni146C ; G 1821
U 5229 ; WX 628 ; N uni146D ; G 1822
U 5230 ; WX 628 ; N uni146E ; G 1823
U 5231 ; WX 628 ; N uni146F ; G 1824
U 5232 ; WX 628 ; N uni1470 ; G 1825
U 5233 ; WX 628 ; N uni1471 ; G 1826
U 5234 ; WX 628 ; N uni1472 ; G 1827
U 5235 ; WX 628 ; N uni1473 ; G 1828
U 5236 ; WX 860 ; N uni1474 ; G 1829
U 5237 ; WX 771 ; N uni1475 ; G 1830
U 5238 ; WX 815 ; N uni1476 ; G 1831
U 5239 ; WX 816 ; N uni1477 ; G 1832
U 5240 ; WX 815 ; N uni1478 ; G 1833
U 5241 ; WX 816 ; N uni1479 ; G 1834
U 5242 ; WX 860 ; N uni147A ; G 1835
U 5243 ; WX 771 ; N uni147B ; G 1836
U 5244 ; WX 860 ; N uni147C ; G 1837
U 5245 ; WX 771 ; N uni147D ; G 1838
U 5246 ; WX 815 ; N uni147E ; G 1839
U 5247 ; WX 816 ; N uni147F ; G 1840
U 5248 ; WX 815 ; N uni1480 ; G 1841
U 5249 ; WX 816 ; N uni1481 ; G 1842
U 5250 ; WX 815 ; N uni1482 ; G 1843
U 5251 ; WX 407 ; N uni1483 ; G 1844
U 5252 ; WX 407 ; N uni1484 ; G 1845
U 5253 ; WX 750 ; N uni1485 ; G 1846
U 5254 ; WX 775 ; N uni1486 ; G 1847
U 5255 ; WX 750 ; N uni1487 ; G 1848
U 5256 ; WX 775 ; N uni1488 ; G 1849
U 5257 ; WX 628 ; N uni1489 ; G 1850
U 5258 ; WX 628 ; N uni148A ; G 1851
U 5259 ; WX 628 ; N uni148B ; G 1852
U 5260 ; WX 628 ; N uni148C ; G 1853
U 5261 ; WX 628 ; N uni148D ; G 1854
U 5262 ; WX 628 ; N uni148E ; G 1855
U 5263 ; WX 628 ; N uni148F ; G 1856
U 5264 ; WX 628 ; N uni1490 ; G 1857
U 5265 ; WX 628 ; N uni1491 ; G 1858
U 5266 ; WX 860 ; N uni1492 ; G 1859
U 5267 ; WX 771 ; N uni1493 ; G 1860
U 5268 ; WX 815 ; N uni1494 ; G 1861
U 5269 ; WX 816 ; N uni1495 ; G 1862
U 5270 ; WX 815 ; N uni1496 ; G 1863
U 5271 ; WX 816 ; N uni1497 ; G 1864
U 5272 ; WX 860 ; N uni1498 ; G 1865
U 5273 ; WX 771 ; N uni1499 ; G 1866
U 5274 ; WX 860 ; N uni149A ; G 1867
U 5275 ; WX 771 ; N uni149B ; G 1868
U 5276 ; WX 815 ; N uni149C ; G 1869
U 5277 ; WX 816 ; N uni149D ; G 1870
U 5278 ; WX 815 ; N uni149E ; G 1871
U 5279 ; WX 816 ; N uni149F ; G 1872
U 5280 ; WX 815 ; N uni14A0 ; G 1873
U 5281 ; WX 435 ; N uni14A1 ; G 1874
U 5282 ; WX 435 ; N uni14A2 ; G 1875
U 5283 ; WX 610 ; N uni14A3 ; G 1876
U 5284 ; WX 557 ; N uni14A4 ; G 1877
U 5285 ; WX 557 ; N uni14A5 ; G 1878
U 5286 ; WX 557 ; N uni14A6 ; G 1879
U 5287 ; WX 610 ; N uni14A7 ; G 1880
U 5288 ; WX 610 ; N uni14A8 ; G 1881
U 5289 ; WX 610 ; N uni14A9 ; G 1882
U 5290 ; WX 557 ; N uni14AA ; G 1883
U 5291 ; WX 557 ; N uni14AB ; G 1884
U 5292 ; WX 749 ; N uni14AC ; G 1885
U 5293 ; WX 769 ; N uni14AD ; G 1886
U 5294 ; WX 746 ; N uni14AE ; G 1887
U 5295 ; WX 764 ; N uni14AF ; G 1888
U 5296 ; WX 746 ; N uni14B0 ; G 1889
U 5297 ; WX 764 ; N uni14B1 ; G 1890
U 5298 ; WX 749 ; N uni14B2 ; G 1891
U 5299 ; WX 769 ; N uni14B3 ; G 1892
U 5300 ; WX 749 ; N uni14B4 ; G 1893
U 5301 ; WX 769 ; N uni14B5 ; G 1894
U 5302 ; WX 746 ; N uni14B6 ; G 1895
U 5303 ; WX 764 ; N uni14B7 ; G 1896
U 5304 ; WX 746 ; N uni14B8 ; G 1897
U 5305 ; WX 764 ; N uni14B9 ; G 1898
U 5306 ; WX 746 ; N uni14BA ; G 1899
U 5307 ; WX 386 ; N uni14BB ; G 1900
U 5308 ; WX 508 ; N uni14BC ; G 1901
U 5309 ; WX 386 ; N uni14BD ; G 1902
U 5312 ; WX 852 ; N uni14C0 ; G 1903
U 5313 ; WX 852 ; N uni14C1 ; G 1904
U 5314 ; WX 852 ; N uni14C2 ; G 1905
U 5315 ; WX 852 ; N uni14C3 ; G 1906
U 5316 ; WX 852 ; N uni14C4 ; G 1907
U 5317 ; WX 852 ; N uni14C5 ; G 1908
U 5318 ; WX 852 ; N uni14C6 ; G 1909
U 5319 ; WX 852 ; N uni14C7 ; G 1910
U 5320 ; WX 852 ; N uni14C8 ; G 1911
U 5321 ; WX 1069 ; N uni14C9 ; G 1912
U 5322 ; WX 1035 ; N uni14CA ; G 1913
U 5323 ; WX 1059 ; N uni14CB ; G 1914
U 5324 ; WX 852 ; N uni14CC ; G 1915
U 5325 ; WX 1059 ; N uni14CD ; G 1916
U 5326 ; WX 852 ; N uni14CE ; G 1917
U 5327 ; WX 852 ; N uni14CF ; G 1918
U 5328 ; WX 600 ; N uni14D0 ; G 1919
U 5329 ; WX 453 ; N uni14D1 ; G 1920
U 5330 ; WX 600 ; N uni14D2 ; G 1921
U 5331 ; WX 852 ; N uni14D3 ; G 1922
U 5332 ; WX 852 ; N uni14D4 ; G 1923
U 5333 ; WX 852 ; N uni14D5 ; G 1924
U 5334 ; WX 852 ; N uni14D6 ; G 1925
U 5335 ; WX 852 ; N uni14D7 ; G 1926
U 5336 ; WX 852 ; N uni14D8 ; G 1927
U 5337 ; WX 852 ; N uni14D9 ; G 1928
U 5338 ; WX 852 ; N uni14DA ; G 1929
U 5339 ; WX 852 ; N uni14DB ; G 1930
U 5340 ; WX 1069 ; N uni14DC ; G 1931
U 5341 ; WX 1035 ; N uni14DD ; G 1932
U 5342 ; WX 1059 ; N uni14DE ; G 1933
U 5343 ; WX 1030 ; N uni14DF ; G 1934
U 5344 ; WX 1059 ; N uni14E0 ; G 1935
U 5345 ; WX 1030 ; N uni14E1 ; G 1936
U 5346 ; WX 1069 ; N uni14E2 ; G 1937
U 5347 ; WX 1035 ; N uni14E3 ; G 1938
U 5348 ; WX 1069 ; N uni14E4 ; G 1939
U 5349 ; WX 1035 ; N uni14E5 ; G 1940
U 5350 ; WX 1083 ; N uni14E6 ; G 1941
U 5351 ; WX 1030 ; N uni14E7 ; G 1942
U 5352 ; WX 1083 ; N uni14E8 ; G 1943
U 5353 ; WX 1030 ; N uni14E9 ; G 1944
U 5354 ; WX 600 ; N uni14EA ; G 1945
U 5356 ; WX 729 ; N uni14EC ; G 1946
U 5357 ; WX 603 ; N uni14ED ; G 1947
U 5358 ; WX 603 ; N uni14EE ; G 1948
U 5359 ; WX 603 ; N uni14EF ; G 1949
U 5360 ; WX 603 ; N uni14F0 ; G 1950
U 5361 ; WX 603 ; N uni14F1 ; G 1951
U 5362 ; WX 603 ; N uni14F2 ; G 1952
U 5363 ; WX 603 ; N uni14F3 ; G 1953
U 5364 ; WX 603 ; N uni14F4 ; G 1954
U 5365 ; WX 603 ; N uni14F5 ; G 1955
U 5366 ; WX 834 ; N uni14F6 ; G 1956
U 5367 ; WX 754 ; N uni14F7 ; G 1957
U 5368 ; WX 792 ; N uni14F8 ; G 1958
U 5369 ; WX 771 ; N uni14F9 ; G 1959
U 5370 ; WX 792 ; N uni14FA ; G 1960
U 5371 ; WX 771 ; N uni14FB ; G 1961
U 5372 ; WX 834 ; N uni14FC ; G 1962
U 5373 ; WX 754 ; N uni14FD ; G 1963
U 5374 ; WX 834 ; N uni14FE ; G 1964
U 5375 ; WX 754 ; N uni14FF ; G 1965
U 5376 ; WX 792 ; N uni1500 ; G 1966
U 5377 ; WX 771 ; N uni1501 ; G 1967
U 5378 ; WX 792 ; N uni1502 ; G 1968
U 5379 ; WX 771 ; N uni1503 ; G 1969
U 5380 ; WX 792 ; N uni1504 ; G 1970
U 5381 ; WX 418 ; N uni1505 ; G 1971
U 5382 ; WX 420 ; N uni1506 ; G 1972
U 5383 ; WX 418 ; N uni1507 ; G 1973
U 5392 ; WX 712 ; N uni1510 ; G 1974
U 5393 ; WX 712 ; N uni1511 ; G 1975
U 5394 ; WX 712 ; N uni1512 ; G 1976
U 5395 ; WX 892 ; N uni1513 ; G 1977
U 5396 ; WX 892 ; N uni1514 ; G 1978
U 5397 ; WX 892 ; N uni1515 ; G 1979
U 5398 ; WX 892 ; N uni1516 ; G 1980
U 5399 ; WX 910 ; N uni1517 ; G 1981
U 5400 ; WX 872 ; N uni1518 ; G 1982
U 5401 ; WX 910 ; N uni1519 ; G 1983
U 5402 ; WX 872 ; N uni151A ; G 1984
U 5403 ; WX 910 ; N uni151B ; G 1985
U 5404 ; WX 872 ; N uni151C ; G 1986
U 5405 ; WX 1140 ; N uni151D ; G 1987
U 5406 ; WX 1100 ; N uni151E ; G 1988
U 5407 ; WX 1140 ; N uni151F ; G 1989
U 5408 ; WX 1100 ; N uni1520 ; G 1990
U 5409 ; WX 1140 ; N uni1521 ; G 1991
U 5410 ; WX 1100 ; N uni1522 ; G 1992
U 5411 ; WX 1140 ; N uni1523 ; G 1993
U 5412 ; WX 1100 ; N uni1524 ; G 1994
U 5413 ; WX 641 ; N uni1525 ; G 1995
U 5414 ; WX 627 ; N uni1526 ; G 1996
U 5415 ; WX 627 ; N uni1527 ; G 1997
U 5416 ; WX 627 ; N uni1528 ; G 1998
U 5417 ; WX 627 ; N uni1529 ; G 1999
U 5418 ; WX 627 ; N uni152A ; G 2000
U 5419 ; WX 627 ; N uni152B ; G 2001
U 5420 ; WX 627 ; N uni152C ; G 2002
U 5421 ; WX 627 ; N uni152D ; G 2003
U 5422 ; WX 627 ; N uni152E ; G 2004
U 5423 ; WX 844 ; N uni152F ; G 2005
U 5424 ; WX 781 ; N uni1530 ; G 2006
U 5425 ; WX 816 ; N uni1531 ; G 2007
U 5426 ; WX 818 ; N uni1532 ; G 2008
U 5427 ; WX 816 ; N uni1533 ; G 2009
U 5428 ; WX 818 ; N uni1534 ; G 2010
U 5429 ; WX 844 ; N uni1535 ; G 2011
U 5430 ; WX 781 ; N uni1536 ; G 2012
U 5431 ; WX 844 ; N uni1537 ; G 2013
U 5432 ; WX 781 ; N uni1538 ; G 2014
U 5433 ; WX 816 ; N uni1539 ; G 2015
U 5434 ; WX 818 ; N uni153A ; G 2016
U 5435 ; WX 816 ; N uni153B ; G 2017
U 5436 ; WX 818 ; N uni153C ; G 2018
U 5437 ; WX 816 ; N uni153D ; G 2019
U 5438 ; WX 418 ; N uni153E ; G 2020
U 5440 ; WX 389 ; N uni1540 ; G 2021
U 5441 ; WX 484 ; N uni1541 ; G 2022
U 5442 ; WX 916 ; N uni1542 ; G 2023
U 5443 ; WX 916 ; N uni1543 ; G 2024
U 5444 ; WX 916 ; N uni1544 ; G 2025
U 5445 ; WX 916 ; N uni1545 ; G 2026
U 5446 ; WX 916 ; N uni1546 ; G 2027
U 5447 ; WX 916 ; N uni1547 ; G 2028
U 5448 ; WX 603 ; N uni1548 ; G 2029
U 5449 ; WX 603 ; N uni1549 ; G 2030
U 5450 ; WX 603 ; N uni154A ; G 2031
U 5451 ; WX 603 ; N uni154B ; G 2032
U 5452 ; WX 603 ; N uni154C ; G 2033
U 5453 ; WX 603 ; N uni154D ; G 2034
U 5454 ; WX 834 ; N uni154E ; G 2035
U 5455 ; WX 754 ; N uni154F ; G 2036
U 5456 ; WX 418 ; N uni1550 ; G 2037
U 5458 ; WX 729 ; N uni1552 ; G 2038
U 5459 ; WX 684 ; N uni1553 ; G 2039
U 5460 ; WX 684 ; N uni1554 ; G 2040
U 5461 ; WX 684 ; N uni1555 ; G 2041
U 5462 ; WX 684 ; N uni1556 ; G 2042
U 5463 ; WX 726 ; N uni1557 ; G 2043
U 5464 ; WX 726 ; N uni1558 ; G 2044
U 5465 ; WX 726 ; N uni1559 ; G 2045
U 5466 ; WX 726 ; N uni155A ; G 2046
U 5467 ; WX 924 ; N uni155B ; G 2047
U 5468 ; WX 1007 ; N uni155C ; G 2048
U 5469 ; WX 508 ; N uni155D ; G 2049
U 5470 ; WX 732 ; N uni155E ; G 2050
U 5471 ; WX 732 ; N uni155F ; G 2051
U 5472 ; WX 732 ; N uni1560 ; G 2052
U 5473 ; WX 732 ; N uni1561 ; G 2053
U 5474 ; WX 732 ; N uni1562 ; G 2054
U 5475 ; WX 732 ; N uni1563 ; G 2055
U 5476 ; WX 730 ; N uni1564 ; G 2056
U 5477 ; WX 730 ; N uni1565 ; G 2057
U 5478 ; WX 730 ; N uni1566 ; G 2058
U 5479 ; WX 730 ; N uni1567 ; G 2059
U 5480 ; WX 947 ; N uni1568 ; G 2060
U 5481 ; WX 900 ; N uni1569 ; G 2061
U 5482 ; WX 508 ; N uni156A ; G 2062
U 5492 ; WX 831 ; N uni1574 ; G 2063
U 5493 ; WX 831 ; N uni1575 ; G 2064
U 5494 ; WX 831 ; N uni1576 ; G 2065
U 5495 ; WX 831 ; N uni1577 ; G 2066
U 5496 ; WX 831 ; N uni1578 ; G 2067
U 5497 ; WX 831 ; N uni1579 ; G 2068
U 5498 ; WX 831 ; N uni157A ; G 2069
U 5499 ; WX 563 ; N uni157B ; G 2070
U 5500 ; WX 752 ; N uni157C ; G 2071
U 5501 ; WX 484 ; N uni157D ; G 2072
U 5502 ; WX 1047 ; N uni157E ; G 2073
U 5503 ; WX 1047 ; N uni157F ; G 2074
U 5504 ; WX 1047 ; N uni1580 ; G 2075
U 5505 ; WX 1047 ; N uni1581 ; G 2076
U 5506 ; WX 1047 ; N uni1582 ; G 2077
U 5507 ; WX 1047 ; N uni1583 ; G 2078
U 5508 ; WX 1047 ; N uni1584 ; G 2079
U 5509 ; WX 825 ; N uni1585 ; G 2080
U 5514 ; WX 831 ; N uni158A ; G 2081
U 5515 ; WX 831 ; N uni158B ; G 2082
U 5516 ; WX 831 ; N uni158C ; G 2083
U 5517 ; WX 831 ; N uni158D ; G 2084
U 5518 ; WX 1259 ; N uni158E ; G 2085
U 5519 ; WX 1259 ; N uni158F ; G 2086
U 5520 ; WX 1259 ; N uni1590 ; G 2087
U 5521 ; WX 1002 ; N uni1591 ; G 2088
U 5522 ; WX 1002 ; N uni1592 ; G 2089
U 5523 ; WX 1259 ; N uni1593 ; G 2090
U 5524 ; WX 1259 ; N uni1594 ; G 2091
U 5525 ; WX 700 ; N uni1595 ; G 2092
U 5526 ; WX 1073 ; N uni1596 ; G 2093
U 5536 ; WX 852 ; N uni15A0 ; G 2094
U 5537 ; WX 852 ; N uni15A1 ; G 2095
U 5538 ; WX 852 ; N uni15A2 ; G 2096
U 5539 ; WX 852 ; N uni15A3 ; G 2097
U 5540 ; WX 852 ; N uni15A4 ; G 2098
U 5541 ; WX 852 ; N uni15A5 ; G 2099
U 5542 ; WX 600 ; N uni15A6 ; G 2100
U 5543 ; WX 643 ; N uni15A7 ; G 2101
U 5544 ; WX 643 ; N uni15A8 ; G 2102
U 5545 ; WX 643 ; N uni15A9 ; G 2103
U 5546 ; WX 643 ; N uni15AA ; G 2104
U 5547 ; WX 643 ; N uni15AB ; G 2105
U 5548 ; WX 643 ; N uni15AC ; G 2106
U 5549 ; WX 643 ; N uni15AD ; G 2107
U 5550 ; WX 418 ; N uni15AE ; G 2108
U 5551 ; WX 628 ; N uni15AF ; G 2109
U 5598 ; WX 770 ; N uni15DE ; G 2110
U 5601 ; WX 767 ; N uni15E1 ; G 2111
U 5702 ; WX 468 ; N uni1646 ; G 2112
U 5703 ; WX 468 ; N uni1647 ; G 2113
U 5742 ; WX 444 ; N uni166E ; G 2114
U 5743 ; WX 1047 ; N uni166F ; G 2115
U 5744 ; WX 1310 ; N uni1670 ; G 2116
U 5745 ; WX 1632 ; N uni1671 ; G 2117
U 5746 ; WX 1632 ; N uni1672 ; G 2118
U 5747 ; WX 1375 ; N uni1673 ; G 2119
U 5748 ; WX 1375 ; N uni1674 ; G 2120
U 5749 ; WX 1632 ; N uni1675 ; G 2121
U 5750 ; WX 1632 ; N uni1676 ; G 2122
U 5760 ; WX 477 ; N uni1680 ; G 2123
U 5761 ; WX 493 ; N uni1681 ; G 2124
U 5762 ; WX 712 ; N uni1682 ; G 2125
U 5763 ; WX 931 ; N uni1683 ; G 2126
U 5764 ; WX 1150 ; N uni1684 ; G 2127
U 5765 ; WX 1370 ; N uni1685 ; G 2128
U 5766 ; WX 493 ; N uni1686 ; G 2129
U 5767 ; WX 712 ; N uni1687 ; G 2130
U 5768 ; WX 931 ; N uni1688 ; G 2131
U 5769 ; WX 1150 ; N uni1689 ; G 2132
U 5770 ; WX 1370 ; N uni168A ; G 2133
U 5771 ; WX 498 ; N uni168B ; G 2134
U 5772 ; WX 718 ; N uni168C ; G 2135
U 5773 ; WX 938 ; N uni168D ; G 2136
U 5774 ; WX 1159 ; N uni168E ; G 2137
U 5775 ; WX 1379 ; N uni168F ; G 2138
U 5776 ; WX 493 ; N uni1690 ; G 2139
U 5777 ; WX 712 ; N uni1691 ; G 2140
U 5778 ; WX 930 ; N uni1692 ; G 2141
U 5779 ; WX 1149 ; N uni1693 ; G 2142
U 5780 ; WX 1370 ; N uni1694 ; G 2143
U 5781 ; WX 498 ; N uni1695 ; G 2144
U 5782 ; WX 752 ; N uni1696 ; G 2145
U 5783 ; WX 789 ; N uni1697 ; G 2146
U 5784 ; WX 1205 ; N uni1698 ; G 2147
U 5785 ; WX 1150 ; N uni1699 ; G 2148
U 5786 ; WX 683 ; N uni169A ; G 2149
U 5787 ; WX 507 ; N uni169B ; G 2150
U 5788 ; WX 507 ; N uni169C ; G 2151
U 7424 ; WX 592 ; N uni1D00 ; G 2152
U 7425 ; WX 717 ; N uni1D01 ; G 2153
U 7426 ; WX 982 ; N uni1D02 ; G 2154
U 7427 ; WX 586 ; N uni1D03 ; G 2155
U 7428 ; WX 550 ; N uni1D04 ; G 2156
U 7429 ; WX 605 ; N uni1D05 ; G 2157
U 7430 ; WX 605 ; N uni1D06 ; G 2158
U 7431 ; WX 491 ; N uni1D07 ; G 2159
U 7432 ; WX 541 ; N uni1D08 ; G 2160
U 7433 ; WX 278 ; N uni1D09 ; G 2161
U 7434 ; WX 395 ; N uni1D0A ; G 2162
U 7435 ; WX 579 ; N uni1D0B ; G 2163
U 7436 ; WX 583 ; N uni1D0C ; G 2164
U 7437 ; WX 754 ; N uni1D0D ; G 2165
U 7438 ; WX 650 ; N uni1D0E ; G 2166
U 7439 ; WX 612 ; N uni1D0F ; G 2167
U 7440 ; WX 550 ; N uni1D10 ; G 2168
U 7441 ; WX 684 ; N uni1D11 ; G 2169
U 7442 ; WX 684 ; N uni1D12 ; G 2170
U 7443 ; WX 684 ; N uni1D13 ; G 2171
U 7444 ; WX 1023 ; N uni1D14 ; G 2172
U 7446 ; WX 612 ; N uni1D16 ; G 2173
U 7447 ; WX 612 ; N uni1D17 ; G 2174
U 7448 ; WX 524 ; N uni1D18 ; G 2175
U 7449 ; WX 602 ; N uni1D19 ; G 2176
U 7450 ; WX 602 ; N uni1D1A ; G 2177
U 7451 ; WX 583 ; N uni1D1B ; G 2178
U 7452 ; WX 574 ; N uni1D1C ; G 2179
U 7453 ; WX 737 ; N uni1D1D ; G 2180
U 7454 ; WX 948 ; N uni1D1E ; G 2181
U 7455 ; WX 638 ; N uni1D1F ; G 2182
U 7456 ; WX 592 ; N uni1D20 ; G 2183
U 7457 ; WX 818 ; N uni1D21 ; G 2184
U 7458 ; WX 525 ; N uni1D22 ; G 2185
U 7459 ; WX 526 ; N uni1D23 ; G 2186
U 7462 ; WX 583 ; N uni1D26 ; G 2187
U 7463 ; WX 592 ; N uni1D27 ; G 2188
U 7464 ; WX 564 ; N uni1D28 ; G 2189
U 7465 ; WX 524 ; N uni1D29 ; G 2190
U 7466 ; WX 590 ; N uni1D2A ; G 2191
U 7467 ; WX 639 ; N uni1D2B ; G 2192
U 7468 ; WX 431 ; N uni1D2C ; G 2193
U 7469 ; WX 613 ; N uni1D2D ; G 2194
U 7470 ; WX 432 ; N uni1D2E ; G 2195
U 7472 ; WX 485 ; N uni1D30 ; G 2196
U 7473 ; WX 398 ; N uni1D31 ; G 2197
U 7474 ; WX 398 ; N uni1D32 ; G 2198
U 7475 ; WX 488 ; N uni1D33 ; G 2199
U 7476 ; WX 474 ; N uni1D34 ; G 2200
U 7477 ; WX 186 ; N uni1D35 ; G 2201
U 7478 ; WX 186 ; N uni1D36 ; G 2202
U 7479 ; WX 413 ; N uni1D37 ; G 2203
U 7480 ; WX 351 ; N uni1D38 ; G 2204
U 7481 ; WX 543 ; N uni1D39 ; G 2205
U 7482 ; WX 471 ; N uni1D3A ; G 2206
U 7483 ; WX 471 ; N uni1D3B ; G 2207
U 7484 ; WX 496 ; N uni1D3C ; G 2208
U 7485 ; WX 439 ; N uni1D3D ; G 2209
U 7486 ; WX 380 ; N uni1D3E ; G 2210
U 7487 ; WX 438 ; N uni1D3F ; G 2211
U 7488 ; WX 385 ; N uni1D40 ; G 2212
U 7489 ; WX 461 ; N uni1D41 ; G 2213
U 7490 ; WX 623 ; N uni1D42 ; G 2214
U 7491 ; WX 392 ; N uni1D43 ; G 2215
U 7492 ; WX 392 ; N uni1D44 ; G 2216
U 7493 ; WX 405 ; N uni1D45 ; G 2217
U 7494 ; WX 648 ; N uni1D46 ; G 2218
U 7495 ; WX 428 ; N uni1D47 ; G 2219
U 7496 ; WX 405 ; N uni1D48 ; G 2220
U 7497 ; WX 417 ; N uni1D49 ; G 2221
U 7498 ; WX 417 ; N uni1D4A ; G 2222
U 7499 ; WX 360 ; N uni1D4B ; G 2223
U 7500 ; WX 359 ; N uni1D4C ; G 2224
U 7501 ; WX 405 ; N uni1D4D ; G 2225
U 7502 ; WX 179 ; N uni1D4E ; G 2226
U 7503 ; WX 426 ; N uni1D4F ; G 2227
U 7504 ; WX 623 ; N uni1D50 ; G 2228
U 7505 ; WX 409 ; N uni1D51 ; G 2229
U 7506 ; WX 414 ; N uni1D52 ; G 2230
U 7507 ; WX 370 ; N uni1D53 ; G 2231
U 7508 ; WX 414 ; N uni1D54 ; G 2232
U 7509 ; WX 414 ; N uni1D55 ; G 2233
U 7510 ; WX 428 ; N uni1D56 ; G 2234
U 7511 ; WX 295 ; N uni1D57 ; G 2235
U 7512 ; WX 405 ; N uni1D58 ; G 2236
U 7513 ; WX 470 ; N uni1D59 ; G 2237
U 7514 ; WX 623 ; N uni1D5A ; G 2238
U 7515 ; WX 417 ; N uni1D5B ; G 2239
U 7517 ; WX 402 ; N uni1D5D ; G 2240
U 7518 ; WX 373 ; N uni1D5E ; G 2241
U 7519 ; WX 385 ; N uni1D5F ; G 2242
U 7520 ; WX 416 ; N uni1D60 ; G 2243
U 7521 ; WX 364 ; N uni1D61 ; G 2244
U 7522 ; WX 179 ; N uni1D62 ; G 2245
U 7523 ; WX 259 ; N uni1D63 ; G 2246
U 7524 ; WX 405 ; N uni1D64 ; G 2247
U 7525 ; WX 417 ; N uni1D65 ; G 2248
U 7526 ; WX 402 ; N uni1D66 ; G 2249
U 7527 ; WX 373 ; N uni1D67 ; G 2250
U 7528 ; WX 412 ; N uni1D68 ; G 2251
U 7529 ; WX 416 ; N uni1D69 ; G 2252
U 7530 ; WX 364 ; N uni1D6A ; G 2253
U 7543 ; WX 635 ; N uni1D77 ; G 2254
U 7544 ; WX 474 ; N uni1D78 ; G 2255
U 7547 ; WX 372 ; N uni1D7B ; G 2256
U 7549 ; WX 667 ; N uni1D7D ; G 2257
U 7557 ; WX 278 ; N uni1D85 ; G 2258
U 7579 ; WX 405 ; N uni1D9B ; G 2259
U 7580 ; WX 370 ; N uni1D9C ; G 2260
U 7581 ; WX 370 ; N uni1D9D ; G 2261
U 7582 ; WX 414 ; N uni1D9E ; G 2262
U 7583 ; WX 360 ; N uni1D9F ; G 2263
U 7584 ; WX 296 ; N uni1DA0 ; G 2264
U 7585 ; WX 233 ; N uni1DA1 ; G 2265
U 7586 ; WX 405 ; N uni1DA2 ; G 2266
U 7587 ; WX 405 ; N uni1DA3 ; G 2267
U 7588 ; WX 261 ; N uni1DA4 ; G 2268
U 7589 ; WX 250 ; N uni1DA5 ; G 2269
U 7590 ; WX 261 ; N uni1DA6 ; G 2270
U 7591 ; WX 261 ; N uni1DA7 ; G 2271
U 7592 ; WX 234 ; N uni1DA8 ; G 2272
U 7593 ; WX 250 ; N uni1DA9 ; G 2273
U 7594 ; WX 235 ; N uni1DAA ; G 2274
U 7595 ; WX 376 ; N uni1DAB ; G 2275
U 7596 ; WX 623 ; N uni1DAC ; G 2276
U 7597 ; WX 623 ; N uni1DAD ; G 2277
U 7598 ; WX 411 ; N uni1DAE ; G 2278
U 7599 ; WX 479 ; N uni1DAF ; G 2279
U 7600 ; WX 409 ; N uni1DB0 ; G 2280
U 7601 ; WX 414 ; N uni1DB1 ; G 2281
U 7602 ; WX 414 ; N uni1DB2 ; G 2282
U 7603 ; WX 360 ; N uni1DB3 ; G 2283
U 7604 ; WX 287 ; N uni1DB4 ; G 2284
U 7605 ; WX 295 ; N uni1DB5 ; G 2285
U 7606 ; WX 508 ; N uni1DB6 ; G 2286
U 7607 ; WX 418 ; N uni1DB7 ; G 2287
U 7608 ; WX 361 ; N uni1DB8 ; G 2288
U 7609 ; WX 406 ; N uni1DB9 ; G 2289
U 7610 ; WX 417 ; N uni1DBA ; G 2290
U 7611 ; WX 366 ; N uni1DBB ; G 2291
U 7612 ; WX 437 ; N uni1DBC ; G 2292
U 7613 ; WX 366 ; N uni1DBD ; G 2293
U 7614 ; WX 392 ; N uni1DBE ; G 2294
U 7615 ; WX 414 ; N uni1DBF ; G 2295
U 7620 ; WX 0 ; N uni1DC4 ; G 2296
U 7621 ; WX 0 ; N uni1DC5 ; G 2297
U 7622 ; WX 0 ; N uni1DC6 ; G 2298
U 7623 ; WX 0 ; N uni1DC7 ; G 2299
U 7624 ; WX 0 ; N uni1DC8 ; G 2300
U 7625 ; WX 0 ; N uni1DC9 ; G 2301
U 7680 ; WX 684 ; N uni1E00 ; G 2302
U 7681 ; WX 613 ; N uni1E01 ; G 2303
U 7682 ; WX 686 ; N uni1E02 ; G 2304
U 7683 ; WX 635 ; N uni1E03 ; G 2305
U 7684 ; WX 686 ; N uni1E04 ; G 2306
U 7685 ; WX 635 ; N uni1E05 ; G 2307
U 7686 ; WX 686 ; N uni1E06 ; G 2308
U 7687 ; WX 635 ; N uni1E07 ; G 2309
U 7688 ; WX 698 ; N uni1E08 ; G 2310
U 7689 ; WX 550 ; N uni1E09 ; G 2311
U 7690 ; WX 770 ; N uni1E0A ; G 2312
U 7691 ; WX 635 ; N uni1E0B ; G 2313
U 7692 ; WX 770 ; N uni1E0C ; G 2314
U 7693 ; WX 635 ; N uni1E0D ; G 2315
U 7694 ; WX 770 ; N uni1E0E ; G 2316
U 7695 ; WX 635 ; N uni1E0F ; G 2317
U 7696 ; WX 770 ; N uni1E10 ; G 2318
U 7697 ; WX 635 ; N uni1E11 ; G 2319
U 7698 ; WX 770 ; N uni1E12 ; G 2320
U 7699 ; WX 635 ; N uni1E13 ; G 2321
U 7700 ; WX 632 ; N uni1E14 ; G 2322
U 7701 ; WX 615 ; N uni1E15 ; G 2323
U 7702 ; WX 632 ; N uni1E16 ; G 2324
U 7703 ; WX 615 ; N uni1E17 ; G 2325
U 7704 ; WX 632 ; N uni1E18 ; G 2326
U 7705 ; WX 615 ; N uni1E19 ; G 2327
U 7706 ; WX 632 ; N uni1E1A ; G 2328
U 7707 ; WX 615 ; N uni1E1B ; G 2329
U 7708 ; WX 632 ; N uni1E1C ; G 2330
U 7709 ; WX 615 ; N uni1E1D ; G 2331
U 7710 ; WX 575 ; N uni1E1E ; G 2332
U 7711 ; WX 352 ; N uni1E1F ; G 2333
U 7712 ; WX 775 ; N uni1E20 ; G 2334
U 7713 ; WX 635 ; N uni1E21 ; G 2335
U 7714 ; WX 752 ; N uni1E22 ; G 2336
U 7715 ; WX 634 ; N uni1E23 ; G 2337
U 7716 ; WX 752 ; N uni1E24 ; G 2338
U 7717 ; WX 634 ; N uni1E25 ; G 2339
U 7718 ; WX 752 ; N uni1E26 ; G 2340
U 7719 ; WX 634 ; N uni1E27 ; G 2341
U 7720 ; WX 752 ; N uni1E28 ; G 2342
U 7721 ; WX 634 ; N uni1E29 ; G 2343
U 7722 ; WX 752 ; N uni1E2A ; G 2344
U 7723 ; WX 634 ; N uni1E2B ; G 2345
U 7724 ; WX 295 ; N uni1E2C ; G 2346
U 7725 ; WX 278 ; N uni1E2D ; G 2347
U 7726 ; WX 295 ; N uni1E2E ; G 2348
U 7727 ; WX 278 ; N uni1E2F ; G 2349
U 7728 ; WX 656 ; N uni1E30 ; G 2350
U 7729 ; WX 579 ; N uni1E31 ; G 2351
U 7730 ; WX 656 ; N uni1E32 ; G 2352
U 7731 ; WX 579 ; N uni1E33 ; G 2353
U 7732 ; WX 656 ; N uni1E34 ; G 2354
U 7733 ; WX 579 ; N uni1E35 ; G 2355
U 7734 ; WX 557 ; N uni1E36 ; G 2356
U 7735 ; WX 288 ; N uni1E37 ; G 2357
U 7736 ; WX 557 ; N uni1E38 ; G 2358
U 7737 ; WX 288 ; N uni1E39 ; G 2359
U 7738 ; WX 557 ; N uni1E3A ; G 2360
U 7739 ; WX 278 ; N uni1E3B ; G 2361
U 7740 ; WX 557 ; N uni1E3C ; G 2362
U 7741 ; WX 278 ; N uni1E3D ; G 2363
U 7742 ; WX 863 ; N uni1E3E ; G 2364
U 7743 ; WX 974 ; N uni1E3F ; G 2365
U 7744 ; WX 863 ; N uni1E40 ; G 2366
U 7745 ; WX 974 ; N uni1E41 ; G 2367
U 7746 ; WX 863 ; N uni1E42 ; G 2368
U 7747 ; WX 974 ; N uni1E43 ; G 2369
U 7748 ; WX 748 ; N uni1E44 ; G 2370
U 7749 ; WX 634 ; N uni1E45 ; G 2371
U 7750 ; WX 748 ; N uni1E46 ; G 2372
U 7751 ; WX 634 ; N uni1E47 ; G 2373
U 7752 ; WX 748 ; N uni1E48 ; G 2374
U 7753 ; WX 634 ; N uni1E49 ; G 2375
U 7754 ; WX 748 ; N uni1E4A ; G 2376
U 7755 ; WX 634 ; N uni1E4B ; G 2377
U 7756 ; WX 787 ; N uni1E4C ; G 2378
U 7757 ; WX 612 ; N uni1E4D ; G 2379
U 7758 ; WX 787 ; N uni1E4E ; G 2380
U 7759 ; WX 612 ; N uni1E4F ; G 2381
U 7760 ; WX 787 ; N uni1E50 ; G 2382
U 7761 ; WX 612 ; N uni1E51 ; G 2383
U 7762 ; WX 787 ; N uni1E52 ; G 2384
U 7763 ; WX 612 ; N uni1E53 ; G 2385
U 7764 ; WX 603 ; N uni1E54 ; G 2386
U 7765 ; WX 635 ; N uni1E55 ; G 2387
U 7766 ; WX 603 ; N uni1E56 ; G 2388
U 7767 ; WX 635 ; N uni1E57 ; G 2389
U 7768 ; WX 695 ; N uni1E58 ; G 2390
U 7769 ; WX 411 ; N uni1E59 ; G 2391
U 7770 ; WX 695 ; N uni1E5A ; G 2392
U 7771 ; WX 411 ; N uni1E5B ; G 2393
U 7772 ; WX 695 ; N uni1E5C ; G 2394
U 7773 ; WX 411 ; N uni1E5D ; G 2395
U 7774 ; WX 695 ; N uni1E5E ; G 2396
U 7775 ; WX 411 ; N uni1E5F ; G 2397
U 7776 ; WX 635 ; N uni1E60 ; G 2398
U 7777 ; WX 521 ; N uni1E61 ; G 2399
U 7778 ; WX 635 ; N uni1E62 ; G 2400
U 7779 ; WX 521 ; N uni1E63 ; G 2401
U 7780 ; WX 635 ; N uni1E64 ; G 2402
U 7781 ; WX 521 ; N uni1E65 ; G 2403
U 7782 ; WX 635 ; N uni1E66 ; G 2404
U 7783 ; WX 521 ; N uni1E67 ; G 2405
U 7784 ; WX 635 ; N uni1E68 ; G 2406
U 7785 ; WX 521 ; N uni1E69 ; G 2407
U 7786 ; WX 611 ; N uni1E6A ; G 2408
U 7787 ; WX 392 ; N uni1E6B ; G 2409
U 7788 ; WX 611 ; N uni1E6C ; G 2410
U 7789 ; WX 392 ; N uni1E6D ; G 2411
U 7790 ; WX 611 ; N uni1E6E ; G 2412
U 7791 ; WX 392 ; N uni1E6F ; G 2413
U 7792 ; WX 611 ; N uni1E70 ; G 2414
U 7793 ; WX 392 ; N uni1E71 ; G 2415
U 7794 ; WX 732 ; N uni1E72 ; G 2416
U 7795 ; WX 634 ; N uni1E73 ; G 2417
U 7796 ; WX 732 ; N uni1E74 ; G 2418
U 7797 ; WX 634 ; N uni1E75 ; G 2419
U 7798 ; WX 732 ; N uni1E76 ; G 2420
U 7799 ; WX 634 ; N uni1E77 ; G 2421
U 7800 ; WX 732 ; N uni1E78 ; G 2422
U 7801 ; WX 634 ; N uni1E79 ; G 2423
U 7802 ; WX 732 ; N uni1E7A ; G 2424
U 7803 ; WX 634 ; N uni1E7B ; G 2425
U 7804 ; WX 684 ; N uni1E7C ; G 2426
U 7805 ; WX 592 ; N uni1E7D ; G 2427
U 7806 ; WX 684 ; N uni1E7E ; G 2428
U 7807 ; WX 592 ; N uni1E7F ; G 2429
U 7808 ; WX 989 ; N Wgrave ; G 2430
U 7809 ; WX 818 ; N wgrave ; G 2431
U 7810 ; WX 989 ; N Wacute ; G 2432
U 7811 ; WX 818 ; N wacute ; G 2433
U 7812 ; WX 989 ; N Wdieresis ; G 2434
U 7813 ; WX 818 ; N wdieresis ; G 2435
U 7814 ; WX 989 ; N uni1E86 ; G 2436
U 7815 ; WX 818 ; N uni1E87 ; G 2437
U 7816 ; WX 989 ; N uni1E88 ; G 2438
U 7817 ; WX 818 ; N uni1E89 ; G 2439
U 7818 ; WX 685 ; N uni1E8A ; G 2440
U 7819 ; WX 592 ; N uni1E8B ; G 2441
U 7820 ; WX 685 ; N uni1E8C ; G 2442
U 7821 ; WX 592 ; N uni1E8D ; G 2443
U 7822 ; WX 611 ; N uni1E8E ; G 2444
U 7823 ; WX 592 ; N uni1E8F ; G 2445
U 7824 ; WX 685 ; N uni1E90 ; G 2446
U 7825 ; WX 525 ; N uni1E91 ; G 2447
U 7826 ; WX 685 ; N uni1E92 ; G 2448
U 7827 ; WX 525 ; N uni1E93 ; G 2449
U 7828 ; WX 685 ; N uni1E94 ; G 2450
U 7829 ; WX 525 ; N uni1E95 ; G 2451
U 7830 ; WX 634 ; N uni1E96 ; G 2452
U 7831 ; WX 392 ; N uni1E97 ; G 2453
U 7832 ; WX 818 ; N uni1E98 ; G 2454
U 7833 ; WX 592 ; N uni1E99 ; G 2455
U 7834 ; WX 613 ; N uni1E9A ; G 2456
U 7835 ; WX 352 ; N uni1E9B ; G 2457
U 7836 ; WX 352 ; N uni1E9C ; G 2458
U 7837 ; WX 352 ; N uni1E9D ; G 2459
U 7838 ; WX 769 ; N uni1E9E ; G 2460
U 7839 ; WX 612 ; N uni1E9F ; G 2461
U 7840 ; WX 684 ; N uni1EA0 ; G 2462
U 7841 ; WX 613 ; N uni1EA1 ; G 2463
U 7842 ; WX 684 ; N uni1EA2 ; G 2464
U 7843 ; WX 613 ; N uni1EA3 ; G 2465
U 7844 ; WX 684 ; N uni1EA4 ; G 2466
U 7845 ; WX 613 ; N uni1EA5 ; G 2467
U 7846 ; WX 684 ; N uni1EA6 ; G 2468
U 7847 ; WX 613 ; N uni1EA7 ; G 2469
U 7848 ; WX 684 ; N uni1EA8 ; G 2470
U 7849 ; WX 613 ; N uni1EA9 ; G 2471
U 7850 ; WX 684 ; N uni1EAA ; G 2472
U 7851 ; WX 613 ; N uni1EAB ; G 2473
U 7852 ; WX 684 ; N uni1EAC ; G 2474
U 7853 ; WX 613 ; N uni1EAD ; G 2475
U 7854 ; WX 684 ; N uni1EAE ; G 2476
U 7855 ; WX 613 ; N uni1EAF ; G 2477
U 7856 ; WX 684 ; N uni1EB0 ; G 2478
U 7857 ; WX 613 ; N uni1EB1 ; G 2479
U 7858 ; WX 684 ; N uni1EB2 ; G 2480
U 7859 ; WX 613 ; N uni1EB3 ; G 2481
U 7860 ; WX 684 ; N uni1EB4 ; G 2482
U 7861 ; WX 613 ; N uni1EB5 ; G 2483
U 7862 ; WX 684 ; N uni1EB6 ; G 2484
U 7863 ; WX 613 ; N uni1EB7 ; G 2485
U 7864 ; WX 632 ; N uni1EB8 ; G 2486
U 7865 ; WX 615 ; N uni1EB9 ; G 2487
U 7866 ; WX 632 ; N uni1EBA ; G 2488
U 7867 ; WX 615 ; N uni1EBB ; G 2489
U 7868 ; WX 632 ; N uni1EBC ; G 2490
U 7869 ; WX 615 ; N uni1EBD ; G 2491
U 7870 ; WX 632 ; N uni1EBE ; G 2492
U 7871 ; WX 615 ; N uni1EBF ; G 2493
U 7872 ; WX 632 ; N uni1EC0 ; G 2494
U 7873 ; WX 615 ; N uni1EC1 ; G 2495
U 7874 ; WX 632 ; N uni1EC2 ; G 2496
U 7875 ; WX 615 ; N uni1EC3 ; G 2497
U 7876 ; WX 632 ; N uni1EC4 ; G 2498
U 7877 ; WX 615 ; N uni1EC5 ; G 2499
U 7878 ; WX 632 ; N uni1EC6 ; G 2500
U 7879 ; WX 615 ; N uni1EC7 ; G 2501
U 7880 ; WX 295 ; N uni1EC8 ; G 2502
U 7881 ; WX 278 ; N uni1EC9 ; G 2503
U 7882 ; WX 295 ; N uni1ECA ; G 2504
U 7883 ; WX 278 ; N uni1ECB ; G 2505
U 7884 ; WX 787 ; N uni1ECC ; G 2506
U 7885 ; WX 612 ; N uni1ECD ; G 2507
U 7886 ; WX 787 ; N uni1ECE ; G 2508
U 7887 ; WX 612 ; N uni1ECF ; G 2509
U 7888 ; WX 787 ; N uni1ED0 ; G 2510
U 7889 ; WX 612 ; N uni1ED1 ; G 2511
U 7890 ; WX 787 ; N uni1ED2 ; G 2512
U 7891 ; WX 612 ; N uni1ED3 ; G 2513
U 7892 ; WX 787 ; N uni1ED4 ; G 2514
U 7893 ; WX 612 ; N uni1ED5 ; G 2515
U 7894 ; WX 787 ; N uni1ED6 ; G 2516
U 7895 ; WX 612 ; N uni1ED7 ; G 2517
U 7896 ; WX 787 ; N uni1ED8 ; G 2518
U 7897 ; WX 612 ; N uni1ED9 ; G 2519
U 7898 ; WX 913 ; N uni1EDA ; G 2520
U 7899 ; WX 612 ; N uni1EDB ; G 2521
U 7900 ; WX 913 ; N uni1EDC ; G 2522
U 7901 ; WX 612 ; N uni1EDD ; G 2523
U 7902 ; WX 913 ; N uni1EDE ; G 2524
U 7903 ; WX 612 ; N uni1EDF ; G 2525
U 7904 ; WX 913 ; N uni1EE0 ; G 2526
U 7905 ; WX 612 ; N uni1EE1 ; G 2527
U 7906 ; WX 913 ; N uni1EE2 ; G 2528
U 7907 ; WX 612 ; N uni1EE3 ; G 2529
U 7908 ; WX 732 ; N uni1EE4 ; G 2530
U 7909 ; WX 634 ; N uni1EE5 ; G 2531
U 7910 ; WX 732 ; N uni1EE6 ; G 2532
U 7911 ; WX 634 ; N uni1EE7 ; G 2533
U 7912 ; WX 858 ; N uni1EE8 ; G 2534
U 7913 ; WX 634 ; N uni1EE9 ; G 2535
U 7914 ; WX 858 ; N uni1EEA ; G 2536
U 7915 ; WX 634 ; N uni1EEB ; G 2537
U 7916 ; WX 858 ; N uni1EEC ; G 2538
U 7917 ; WX 634 ; N uni1EED ; G 2539
U 7918 ; WX 858 ; N uni1EEE ; G 2540
U 7919 ; WX 634 ; N uni1EEF ; G 2541
U 7920 ; WX 858 ; N uni1EF0 ; G 2542
U 7921 ; WX 634 ; N uni1EF1 ; G 2543
U 7922 ; WX 611 ; N Ygrave ; G 2544
U 7923 ; WX 592 ; N ygrave ; G 2545
U 7924 ; WX 611 ; N uni1EF4 ; G 2546
U 7925 ; WX 592 ; N uni1EF5 ; G 2547
U 7926 ; WX 611 ; N uni1EF6 ; G 2548
U 7927 ; WX 592 ; N uni1EF7 ; G 2549
U 7928 ; WX 611 ; N uni1EF8 ; G 2550
U 7929 ; WX 592 ; N uni1EF9 ; G 2551
U 7930 ; WX 769 ; N uni1EFA ; G 2552
U 7931 ; WX 477 ; N uni1EFB ; G 2553
U 7936 ; WX 659 ; N uni1F00 ; G 2554
U 7937 ; WX 659 ; N uni1F01 ; G 2555
U 7938 ; WX 659 ; N uni1F02 ; G 2556
U 7939 ; WX 659 ; N uni1F03 ; G 2557
U 7940 ; WX 659 ; N uni1F04 ; G 2558
U 7941 ; WX 659 ; N uni1F05 ; G 2559
U 7942 ; WX 659 ; N uni1F06 ; G 2560
U 7943 ; WX 659 ; N uni1F07 ; G 2561
U 7944 ; WX 684 ; N uni1F08 ; G 2562
U 7945 ; WX 684 ; N uni1F09 ; G 2563
U 7946 ; WX 877 ; N uni1F0A ; G 2564
U 7947 ; WX 877 ; N uni1F0B ; G 2565
U 7948 ; WX 769 ; N uni1F0C ; G 2566
U 7949 ; WX 801 ; N uni1F0D ; G 2567
U 7950 ; WX 708 ; N uni1F0E ; G 2568
U 7951 ; WX 743 ; N uni1F0F ; G 2569
U 7952 ; WX 541 ; N uni1F10 ; G 2570
U 7953 ; WX 541 ; N uni1F11 ; G 2571
U 7954 ; WX 541 ; N uni1F12 ; G 2572
U 7955 ; WX 541 ; N uni1F13 ; G 2573
U 7956 ; WX 541 ; N uni1F14 ; G 2574
U 7957 ; WX 541 ; N uni1F15 ; G 2575
U 7960 ; WX 711 ; N uni1F18 ; G 2576
U 7961 ; WX 711 ; N uni1F19 ; G 2577
U 7962 ; WX 966 ; N uni1F1A ; G 2578
U 7963 ; WX 975 ; N uni1F1B ; G 2579
U 7964 ; WX 898 ; N uni1F1C ; G 2580
U 7965 ; WX 928 ; N uni1F1D ; G 2581
U 7968 ; WX 634 ; N uni1F20 ; G 2582
U 7969 ; WX 634 ; N uni1F21 ; G 2583
U 7970 ; WX 634 ; N uni1F22 ; G 2584
U 7971 ; WX 634 ; N uni1F23 ; G 2585
U 7972 ; WX 634 ; N uni1F24 ; G 2586
U 7973 ; WX 634 ; N uni1F25 ; G 2587
U 7974 ; WX 634 ; N uni1F26 ; G 2588
U 7975 ; WX 634 ; N uni1F27 ; G 2589
U 7976 ; WX 837 ; N uni1F28 ; G 2590
U 7977 ; WX 835 ; N uni1F29 ; G 2591
U 7978 ; WX 1086 ; N uni1F2A ; G 2592
U 7979 ; WX 1089 ; N uni1F2B ; G 2593
U 7980 ; WX 1027 ; N uni1F2C ; G 2594
U 7981 ; WX 1051 ; N uni1F2D ; G 2595
U 7982 ; WX 934 ; N uni1F2E ; G 2596
U 7983 ; WX 947 ; N uni1F2F ; G 2597
U 7984 ; WX 338 ; N uni1F30 ; G 2598
U 7985 ; WX 338 ; N uni1F31 ; G 2599
U 7986 ; WX 338 ; N uni1F32 ; G 2600
U 7987 ; WX 338 ; N uni1F33 ; G 2601
U 7988 ; WX 338 ; N uni1F34 ; G 2602
U 7989 ; WX 338 ; N uni1F35 ; G 2603
U 7990 ; WX 338 ; N uni1F36 ; G 2604
U 7991 ; WX 338 ; N uni1F37 ; G 2605
U 7992 ; WX 380 ; N uni1F38 ; G 2606
U 7993 ; WX 374 ; N uni1F39 ; G 2607
U 7994 ; WX 635 ; N uni1F3A ; G 2608
U 7995 ; WX 635 ; N uni1F3B ; G 2609
U 7996 ; WX 570 ; N uni1F3C ; G 2610
U 7997 ; WX 600 ; N uni1F3D ; G 2611
U 7998 ; WX 489 ; N uni1F3E ; G 2612
U 7999 ; WX 493 ; N uni1F3F ; G 2613
U 8000 ; WX 612 ; N uni1F40 ; G 2614
U 8001 ; WX 612 ; N uni1F41 ; G 2615
U 8002 ; WX 612 ; N uni1F42 ; G 2616
U 8003 ; WX 612 ; N uni1F43 ; G 2617
U 8004 ; WX 612 ; N uni1F44 ; G 2618
U 8005 ; WX 612 ; N uni1F45 ; G 2619
U 8008 ; WX 804 ; N uni1F48 ; G 2620
U 8009 ; WX 848 ; N uni1F49 ; G 2621
U 8010 ; WX 1095 ; N uni1F4A ; G 2622
U 8011 ; WX 1100 ; N uni1F4B ; G 2623
U 8012 ; WX 938 ; N uni1F4C ; G 2624
U 8013 ; WX 970 ; N uni1F4D ; G 2625
U 8016 ; WX 579 ; N uni1F50 ; G 2626
U 8017 ; WX 579 ; N uni1F51 ; G 2627
U 8018 ; WX 579 ; N uni1F52 ; G 2628
U 8019 ; WX 579 ; N uni1F53 ; G 2629
U 8020 ; WX 579 ; N uni1F54 ; G 2630
U 8021 ; WX 579 ; N uni1F55 ; G 2631
U 8022 ; WX 579 ; N uni1F56 ; G 2632
U 8023 ; WX 579 ; N uni1F57 ; G 2633
U 8025 ; WX 784 ; N uni1F59 ; G 2634
U 8027 ; WX 998 ; N uni1F5B ; G 2635
U 8029 ; WX 1012 ; N uni1F5D ; G 2636
U 8031 ; WX 897 ; N uni1F5F ; G 2637
U 8032 ; WX 837 ; N uni1F60 ; G 2638
U 8033 ; WX 837 ; N uni1F61 ; G 2639
U 8034 ; WX 837 ; N uni1F62 ; G 2640
U 8035 ; WX 837 ; N uni1F63 ; G 2641
U 8036 ; WX 837 ; N uni1F64 ; G 2642
U 8037 ; WX 837 ; N uni1F65 ; G 2643
U 8038 ; WX 837 ; N uni1F66 ; G 2644
U 8039 ; WX 837 ; N uni1F67 ; G 2645
U 8040 ; WX 802 ; N uni1F68 ; G 2646
U 8041 ; WX 843 ; N uni1F69 ; G 2647
U 8042 ; WX 1089 ; N uni1F6A ; G 2648
U 8043 ; WX 1095 ; N uni1F6B ; G 2649
U 8044 ; WX 946 ; N uni1F6C ; G 2650
U 8045 ; WX 972 ; N uni1F6D ; G 2651
U 8046 ; WX 921 ; N uni1F6E ; G 2652
U 8047 ; WX 952 ; N uni1F6F ; G 2653
U 8048 ; WX 659 ; N uni1F70 ; G 2654
U 8049 ; WX 659 ; N uni1F71 ; G 2655
U 8050 ; WX 541 ; N uni1F72 ; G 2656
U 8051 ; WX 548 ; N uni1F73 ; G 2657
U 8052 ; WX 634 ; N uni1F74 ; G 2658
U 8053 ; WX 654 ; N uni1F75 ; G 2659
U 8054 ; WX 338 ; N uni1F76 ; G 2660
U 8055 ; WX 338 ; N uni1F77 ; G 2661
U 8056 ; WX 612 ; N uni1F78 ; G 2662
U 8057 ; WX 612 ; N uni1F79 ; G 2663
U 8058 ; WX 579 ; N uni1F7A ; G 2664
U 8059 ; WX 579 ; N uni1F7B ; G 2665
U 8060 ; WX 837 ; N uni1F7C ; G 2666
U 8061 ; WX 837 ; N uni1F7D ; G 2667
U 8064 ; WX 659 ; N uni1F80 ; G 2668
U 8065 ; WX 659 ; N uni1F81 ; G 2669
U 8066 ; WX 659 ; N uni1F82 ; G 2670
U 8067 ; WX 659 ; N uni1F83 ; G 2671
U 8068 ; WX 659 ; N uni1F84 ; G 2672
U 8069 ; WX 659 ; N uni1F85 ; G 2673
U 8070 ; WX 659 ; N uni1F86 ; G 2674
U 8071 ; WX 659 ; N uni1F87 ; G 2675
U 8072 ; WX 684 ; N uni1F88 ; G 2676
U 8073 ; WX 684 ; N uni1F89 ; G 2677
U 8074 ; WX 877 ; N uni1F8A ; G 2678
U 8075 ; WX 877 ; N uni1F8B ; G 2679
U 8076 ; WX 769 ; N uni1F8C ; G 2680
U 8077 ; WX 801 ; N uni1F8D ; G 2681
U 8078 ; WX 708 ; N uni1F8E ; G 2682
U 8079 ; WX 743 ; N uni1F8F ; G 2683
U 8080 ; WX 634 ; N uni1F90 ; G 2684
U 8081 ; WX 634 ; N uni1F91 ; G 2685
U 8082 ; WX 634 ; N uni1F92 ; G 2686
U 8083 ; WX 634 ; N uni1F93 ; G 2687
U 8084 ; WX 634 ; N uni1F94 ; G 2688
U 8085 ; WX 634 ; N uni1F95 ; G 2689
U 8086 ; WX 634 ; N uni1F96 ; G 2690
U 8087 ; WX 634 ; N uni1F97 ; G 2691
U 8088 ; WX 837 ; N uni1F98 ; G 2692
U 8089 ; WX 835 ; N uni1F99 ; G 2693
U 8090 ; WX 1086 ; N uni1F9A ; G 2694
U 8091 ; WX 1089 ; N uni1F9B ; G 2695
U 8092 ; WX 1027 ; N uni1F9C ; G 2696
U 8093 ; WX 1051 ; N uni1F9D ; G 2697
U 8094 ; WX 934 ; N uni1F9E ; G 2698
U 8095 ; WX 947 ; N uni1F9F ; G 2699
U 8096 ; WX 837 ; N uni1FA0 ; G 2700
U 8097 ; WX 837 ; N uni1FA1 ; G 2701
U 8098 ; WX 837 ; N uni1FA2 ; G 2702
U 8099 ; WX 837 ; N uni1FA3 ; G 2703
U 8100 ; WX 837 ; N uni1FA4 ; G 2704
U 8101 ; WX 837 ; N uni1FA5 ; G 2705
U 8102 ; WX 837 ; N uni1FA6 ; G 2706
U 8103 ; WX 837 ; N uni1FA7 ; G 2707
U 8104 ; WX 802 ; N uni1FA8 ; G 2708
U 8105 ; WX 843 ; N uni1FA9 ; G 2709
U 8106 ; WX 1089 ; N uni1FAA ; G 2710
U 8107 ; WX 1095 ; N uni1FAB ; G 2711
U 8108 ; WX 946 ; N uni1FAC ; G 2712
U 8109 ; WX 972 ; N uni1FAD ; G 2713
U 8110 ; WX 921 ; N uni1FAE ; G 2714
U 8111 ; WX 952 ; N uni1FAF ; G 2715
U 8112 ; WX 659 ; N uni1FB0 ; G 2716
U 8113 ; WX 659 ; N uni1FB1 ; G 2717
U 8114 ; WX 659 ; N uni1FB2 ; G 2718
U 8115 ; WX 659 ; N uni1FB3 ; G 2719
U 8116 ; WX 659 ; N uni1FB4 ; G 2720
U 8118 ; WX 659 ; N uni1FB6 ; G 2721
U 8119 ; WX 659 ; N uni1FB7 ; G 2722
U 8120 ; WX 684 ; N uni1FB8 ; G 2723
U 8121 ; WX 684 ; N uni1FB9 ; G 2724
U 8122 ; WX 716 ; N uni1FBA ; G 2725
U 8123 ; WX 692 ; N uni1FBB ; G 2726
U 8124 ; WX 684 ; N uni1FBC ; G 2727
U 8125 ; WX 500 ; N uni1FBD ; G 2728
U 8126 ; WX 500 ; N uni1FBE ; G 2729
U 8127 ; WX 500 ; N uni1FBF ; G 2730
U 8128 ; WX 500 ; N uni1FC0 ; G 2731
U 8129 ; WX 500 ; N uni1FC1 ; G 2732
U 8130 ; WX 634 ; N uni1FC2 ; G 2733
U 8131 ; WX 634 ; N uni1FC3 ; G 2734
U 8132 ; WX 654 ; N uni1FC4 ; G 2735
U 8134 ; WX 634 ; N uni1FC6 ; G 2736
U 8135 ; WX 634 ; N uni1FC7 ; G 2737
U 8136 ; WX 805 ; N uni1FC8 ; G 2738
U 8137 ; WX 746 ; N uni1FC9 ; G 2739
U 8138 ; WX 931 ; N uni1FCA ; G 2740
U 8139 ; WX 871 ; N uni1FCB ; G 2741
U 8140 ; WX 752 ; N uni1FCC ; G 2742
U 8141 ; WX 500 ; N uni1FCD ; G 2743
U 8142 ; WX 500 ; N uni1FCE ; G 2744
U 8143 ; WX 500 ; N uni1FCF ; G 2745
U 8144 ; WX 338 ; N uni1FD0 ; G 2746
U 8145 ; WX 338 ; N uni1FD1 ; G 2747
U 8146 ; WX 338 ; N uni1FD2 ; G 2748
U 8147 ; WX 338 ; N uni1FD3 ; G 2749
U 8150 ; WX 338 ; N uni1FD6 ; G 2750
U 8151 ; WX 338 ; N uni1FD7 ; G 2751
U 8152 ; WX 295 ; N uni1FD8 ; G 2752
U 8153 ; WX 295 ; N uni1FD9 ; G 2753
U 8154 ; WX 475 ; N uni1FDA ; G 2754
U 8155 ; WX 408 ; N uni1FDB ; G 2755
U 8157 ; WX 500 ; N uni1FDD ; G 2756
U 8158 ; WX 500 ; N uni1FDE ; G 2757
U 8159 ; WX 500 ; N uni1FDF ; G 2758
U 8160 ; WX 579 ; N uni1FE0 ; G 2759
U 8161 ; WX 579 ; N uni1FE1 ; G 2760
U 8162 ; WX 579 ; N uni1FE2 ; G 2761
U 8163 ; WX 579 ; N uni1FE3 ; G 2762
U 8164 ; WX 635 ; N uni1FE4 ; G 2763
U 8165 ; WX 635 ; N uni1FE5 ; G 2764
U 8166 ; WX 579 ; N uni1FE6 ; G 2765
U 8167 ; WX 579 ; N uni1FE7 ; G 2766
U 8168 ; WX 611 ; N uni1FE8 ; G 2767
U 8169 ; WX 611 ; N uni1FE9 ; G 2768
U 8170 ; WX 845 ; N uni1FEA ; G 2769
U 8171 ; WX 825 ; N uni1FEB ; G 2770
U 8172 ; WX 685 ; N uni1FEC ; G 2771
U 8173 ; WX 500 ; N uni1FED ; G 2772
U 8174 ; WX 500 ; N uni1FEE ; G 2773
U 8175 ; WX 500 ; N uni1FEF ; G 2774
U 8178 ; WX 837 ; N uni1FF2 ; G 2775
U 8179 ; WX 837 ; N uni1FF3 ; G 2776
U 8180 ; WX 837 ; N uni1FF4 ; G 2777
U 8182 ; WX 837 ; N uni1FF6 ; G 2778
U 8183 ; WX 837 ; N uni1FF7 ; G 2779
U 8184 ; WX 941 ; N uni1FF8 ; G 2780
U 8185 ; WX 813 ; N uni1FF9 ; G 2781
U 8186 ; WX 922 ; N uni1FFA ; G 2782
U 8187 ; WX 826 ; N uni1FFB ; G 2783
U 8188 ; WX 764 ; N uni1FFC ; G 2784
U 8189 ; WX 500 ; N uni1FFD ; G 2785
U 8190 ; WX 500 ; N uni1FFE ; G 2786
U 8192 ; WX 500 ; N uni2000 ; G 2787
U 8193 ; WX 1000 ; N uni2001 ; G 2788
U 8194 ; WX 500 ; N uni2002 ; G 2789
U 8195 ; WX 1000 ; N uni2003 ; G 2790
U 8196 ; WX 330 ; N uni2004 ; G 2791
U 8197 ; WX 250 ; N uni2005 ; G 2792
U 8198 ; WX 167 ; N uni2006 ; G 2793
U 8199 ; WX 636 ; N uni2007 ; G 2794
U 8200 ; WX 318 ; N uni2008 ; G 2795
U 8201 ; WX 200 ; N uni2009 ; G 2796
U 8202 ; WX 100 ; N uni200A ; G 2797
U 8203 ; WX 0 ; N uni200B ; G 2798
U 8204 ; WX 0 ; N uni200C ; G 2799
U 8205 ; WX 0 ; N uni200D ; G 2800
U 8206 ; WX 0 ; N uni200E ; G 2801
U 8207 ; WX 0 ; N uni200F ; G 2802
U 8208 ; WX 361 ; N uni2010 ; G 2803
U 8209 ; WX 361 ; N uni2011 ; G 2804
U 8210 ; WX 636 ; N figuredash ; G 2805
U 8211 ; WX 500 ; N endash ; G 2806
U 8212 ; WX 1000 ; N emdash ; G 2807
U 8213 ; WX 1000 ; N uni2015 ; G 2808
U 8214 ; WX 500 ; N uni2016 ; G 2809
U 8215 ; WX 500 ; N underscoredbl ; G 2810
U 8216 ; WX 318 ; N quoteleft ; G 2811
U 8217 ; WX 318 ; N quoteright ; G 2812
U 8218 ; WX 318 ; N quotesinglbase ; G 2813
U 8219 ; WX 318 ; N quotereversed ; G 2814
U 8220 ; WX 518 ; N quotedblleft ; G 2815
U 8221 ; WX 518 ; N quotedblright ; G 2816
U 8222 ; WX 518 ; N quotedblbase ; G 2817
U 8223 ; WX 518 ; N uni201F ; G 2818
U 8224 ; WX 500 ; N dagger ; G 2819
U 8225 ; WX 500 ; N daggerdbl ; G 2820
U 8226 ; WX 590 ; N bullet ; G 2821
U 8227 ; WX 590 ; N uni2023 ; G 2822
U 8228 ; WX 334 ; N onedotenleader ; G 2823
U 8229 ; WX 667 ; N twodotenleader ; G 2824
U 8230 ; WX 1000 ; N ellipsis ; G 2825
U 8231 ; WX 318 ; N uni2027 ; G 2826
U 8232 ; WX 0 ; N uni2028 ; G 2827
U 8233 ; WX 0 ; N uni2029 ; G 2828
U 8234 ; WX 0 ; N uni202A ; G 2829
U 8235 ; WX 0 ; N uni202B ; G 2830
U 8236 ; WX 0 ; N uni202C ; G 2831
U 8237 ; WX 0 ; N uni202D ; G 2832
U 8238 ; WX 0 ; N uni202E ; G 2833
U 8239 ; WX 200 ; N uni202F ; G 2834
U 8240 ; WX 1342 ; N perthousand ; G 2835
U 8241 ; WX 1735 ; N uni2031 ; G 2836
U 8242 ; WX 227 ; N minute ; G 2837
U 8243 ; WX 374 ; N second ; G 2838
U 8244 ; WX 520 ; N uni2034 ; G 2839
U 8245 ; WX 227 ; N uni2035 ; G 2840
U 8246 ; WX 374 ; N uni2036 ; G 2841
U 8247 ; WX 520 ; N uni2037 ; G 2842
U 8248 ; WX 339 ; N uni2038 ; G 2843
U 8249 ; WX 400 ; N guilsinglleft ; G 2844
U 8250 ; WX 400 ; N guilsinglright ; G 2845
U 8251 ; WX 838 ; N uni203B ; G 2846
U 8252 ; WX 485 ; N exclamdbl ; G 2847
U 8253 ; WX 531 ; N uni203D ; G 2848
U 8254 ; WX 500 ; N uni203E ; G 2849
U 8255 ; WX 804 ; N uni203F ; G 2850
U 8256 ; WX 804 ; N uni2040 ; G 2851
U 8257 ; WX 250 ; N uni2041 ; G 2852
U 8258 ; WX 1000 ; N uni2042 ; G 2853
U 8259 ; WX 500 ; N uni2043 ; G 2854
U 8260 ; WX 167 ; N fraction ; G 2855
U 8261 ; WX 390 ; N uni2045 ; G 2856
U 8262 ; WX 390 ; N uni2046 ; G 2857
U 8263 ; WX 922 ; N uni2047 ; G 2858
U 8264 ; WX 733 ; N uni2048 ; G 2859
U 8265 ; WX 733 ; N uni2049 ; G 2860
U 8266 ; WX 497 ; N uni204A ; G 2861
U 8267 ; WX 636 ; N uni204B ; G 2862
U 8268 ; WX 500 ; N uni204C ; G 2863
U 8269 ; WX 500 ; N uni204D ; G 2864
U 8270 ; WX 500 ; N uni204E ; G 2865
U 8271 ; WX 337 ; N uni204F ; G 2866
U 8272 ; WX 804 ; N uni2050 ; G 2867
U 8273 ; WX 500 ; N uni2051 ; G 2868
U 8274 ; WX 450 ; N uni2052 ; G 2869
U 8275 ; WX 1000 ; N uni2053 ; G 2870
U 8276 ; WX 804 ; N uni2054 ; G 2871
U 8277 ; WX 838 ; N uni2055 ; G 2872
U 8278 ; WX 586 ; N uni2056 ; G 2873
U 8279 ; WX 663 ; N uni2057 ; G 2874
U 8280 ; WX 838 ; N uni2058 ; G 2875
U 8281 ; WX 838 ; N uni2059 ; G 2876
U 8282 ; WX 318 ; N uni205A ; G 2877
U 8283 ; WX 797 ; N uni205B ; G 2878
U 8284 ; WX 838 ; N uni205C ; G 2879
U 8285 ; WX 318 ; N uni205D ; G 2880
U 8286 ; WX 318 ; N uni205E ; G 2881
U 8287 ; WX 222 ; N uni205F ; G 2882
U 8288 ; WX 0 ; N uni2060 ; G 2883
U 8289 ; WX 0 ; N uni2061 ; G 2884
U 8290 ; WX 0 ; N uni2062 ; G 2885
U 8291 ; WX 0 ; N uni2063 ; G 2886
U 8292 ; WX 0 ; N uni2064 ; G 2887
U 8298 ; WX 0 ; N uni206A ; G 2888
U 8299 ; WX 0 ; N uni206B ; G 2889
U 8300 ; WX 0 ; N uni206C ; G 2890
U 8301 ; WX 0 ; N uni206D ; G 2891
U 8302 ; WX 0 ; N uni206E ; G 2892
U 8303 ; WX 0 ; N uni206F ; G 2893
U 8304 ; WX 401 ; N uni2070 ; G 2894
U 8305 ; WX 179 ; N uni2071 ; G 2895
U 8308 ; WX 401 ; N uni2074 ; G 2896
U 8309 ; WX 401 ; N uni2075 ; G 2897
U 8310 ; WX 401 ; N uni2076 ; G 2898
U 8311 ; WX 401 ; N uni2077 ; G 2899
U 8312 ; WX 401 ; N uni2078 ; G 2900
U 8313 ; WX 401 ; N uni2079 ; G 2901
U 8314 ; WX 528 ; N uni207A ; G 2902
U 8315 ; WX 528 ; N uni207B ; G 2903
U 8316 ; WX 528 ; N uni207C ; G 2904
U 8317 ; WX 246 ; N uni207D ; G 2905
U 8318 ; WX 246 ; N uni207E ; G 2906
U 8319 ; WX 398 ; N uni207F ; G 2907
U 8320 ; WX 401 ; N uni2080 ; G 2908
U 8321 ; WX 401 ; N uni2081 ; G 2909
U 8322 ; WX 401 ; N uni2082 ; G 2910
U 8323 ; WX 401 ; N uni2083 ; G 2911
U 8324 ; WX 401 ; N uni2084 ; G 2912
U 8325 ; WX 401 ; N uni2085 ; G 2913
U 8326 ; WX 401 ; N uni2086 ; G 2914
U 8327 ; WX 401 ; N uni2087 ; G 2915
U 8328 ; WX 401 ; N uni2088 ; G 2916
U 8329 ; WX 401 ; N uni2089 ; G 2917
U 8330 ; WX 528 ; N uni208A ; G 2918
U 8331 ; WX 528 ; N uni208B ; G 2919
U 8332 ; WX 528 ; N uni208C ; G 2920
U 8333 ; WX 246 ; N uni208D ; G 2921
U 8334 ; WX 246 ; N uni208E ; G 2922
U 8336 ; WX 392 ; N uni2090 ; G 2923
U 8337 ; WX 417 ; N uni2091 ; G 2924
U 8338 ; WX 414 ; N uni2092 ; G 2925
U 8339 ; WX 444 ; N uni2093 ; G 2926
U 8340 ; WX 417 ; N uni2094 ; G 2927
U 8341 ; WX 404 ; N uni2095 ; G 2928
U 8342 ; WX 426 ; N uni2096 ; G 2929
U 8343 ; WX 166 ; N uni2097 ; G 2930
U 8344 ; WX 623 ; N uni2098 ; G 2931
U 8345 ; WX 398 ; N uni2099 ; G 2932
U 8346 ; WX 428 ; N uni209A ; G 2933
U 8347 ; WX 373 ; N uni209B ; G 2934
U 8348 ; WX 295 ; N uni209C ; G 2935
U 8352 ; WX 877 ; N uni20A0 ; G 2936
U 8353 ; WX 636 ; N colonmonetary ; G 2937
U 8354 ; WX 636 ; N uni20A2 ; G 2938
U 8355 ; WX 636 ; N franc ; G 2939
U 8356 ; WX 636 ; N lira ; G 2940
U 8357 ; WX 974 ; N uni20A5 ; G 2941
U 8358 ; WX 636 ; N uni20A6 ; G 2942
U 8359 ; WX 1272 ; N peseta ; G 2943
U 8360 ; WX 1074 ; N uni20A8 ; G 2944
U 8361 ; WX 989 ; N uni20A9 ; G 2945
U 8362 ; WX 784 ; N uni20AA ; G 2946
U 8363 ; WX 636 ; N dong ; G 2947
U 8364 ; WX 636 ; N Euro ; G 2948
U 8365 ; WX 636 ; N uni20AD ; G 2949
U 8366 ; WX 636 ; N uni20AE ; G 2950
U 8367 ; WX 1272 ; N uni20AF ; G 2951
U 8368 ; WX 636 ; N uni20B0 ; G 2952
U 8369 ; WX 636 ; N uni20B1 ; G 2953
U 8370 ; WX 636 ; N uni20B2 ; G 2954
U 8371 ; WX 636 ; N uni20B3 ; G 2955
U 8372 ; WX 774 ; N uni20B4 ; G 2956
U 8373 ; WX 636 ; N uni20B5 ; G 2957
U 8376 ; WX 636 ; N uni20B8 ; G 2958
U 8377 ; WX 636 ; N uni20B9 ; G 2959
U 8378 ; WX 636 ; N uni20BA ; G 2960
U 8381 ; WX 636 ; N uni20BD ; G 2961
U 8400 ; WX 0 ; N uni20D0 ; G 2962
U 8401 ; WX 0 ; N uni20D1 ; G 2963
U 8406 ; WX 0 ; N uni20D6 ; G 2964
U 8407 ; WX 0 ; N uni20D7 ; G 2965
U 8411 ; WX 0 ; N uni20DB ; G 2966
U 8412 ; WX 0 ; N uni20DC ; G 2967
U 8417 ; WX 0 ; N uni20E1 ; G 2968
U 8448 ; WX 1019 ; N uni2100 ; G 2969
U 8449 ; WX 1019 ; N uni2101 ; G 2970
U 8450 ; WX 698 ; N uni2102 ; G 2971
U 8451 ; WX 1123 ; N uni2103 ; G 2972
U 8452 ; WX 642 ; N uni2104 ; G 2973
U 8453 ; WX 1019 ; N uni2105 ; G 2974
U 8454 ; WX 1067 ; N uni2106 ; G 2975
U 8455 ; WX 614 ; N uni2107 ; G 2976
U 8456 ; WX 698 ; N uni2108 ; G 2977
U 8457 ; WX 952 ; N uni2109 ; G 2978
U 8459 ; WX 988 ; N uni210B ; G 2979
U 8460 ; WX 754 ; N uni210C ; G 2980
U 8461 ; WX 850 ; N uni210D ; G 2981
U 8462 ; WX 634 ; N uni210E ; G 2982
U 8463 ; WX 634 ; N uni210F ; G 2983
U 8464 ; WX 470 ; N uni2110 ; G 2984
U 8465 ; WX 697 ; N Ifraktur ; G 2985
U 8466 ; WX 720 ; N uni2112 ; G 2986
U 8467 ; WX 413 ; N uni2113 ; G 2987
U 8468 ; WX 818 ; N uni2114 ; G 2988
U 8469 ; WX 801 ; N uni2115 ; G 2989
U 8470 ; WX 1040 ; N uni2116 ; G 2990
U 8471 ; WX 1000 ; N uni2117 ; G 2991
U 8472 ; WX 697 ; N weierstrass ; G 2992
U 8473 ; WX 701 ; N uni2119 ; G 2993
U 8474 ; WX 787 ; N uni211A ; G 2994
U 8475 ; WX 798 ; N uni211B ; G 2995
U 8476 ; WX 814 ; N Rfraktur ; G 2996
U 8477 ; WX 792 ; N uni211D ; G 2997
U 8478 ; WX 896 ; N prescription ; G 2998
U 8479 ; WX 684 ; N uni211F ; G 2999
U 8480 ; WX 1020 ; N uni2120 ; G 3000
U 8481 ; WX 1074 ; N uni2121 ; G 3001
U 8482 ; WX 1000 ; N trademark ; G 3002
U 8483 ; WX 684 ; N uni2123 ; G 3003
U 8484 ; WX 745 ; N uni2124 ; G 3004
U 8485 ; WX 578 ; N uni2125 ; G 3005
U 8486 ; WX 764 ; N uni2126 ; G 3006
U 8487 ; WX 764 ; N uni2127 ; G 3007
U 8488 ; WX 616 ; N uni2128 ; G 3008
U 8489 ; WX 338 ; N uni2129 ; G 3009
U 8490 ; WX 656 ; N uni212A ; G 3010
U 8491 ; WX 684 ; N uni212B ; G 3011
U 8492 ; WX 786 ; N uni212C ; G 3012
U 8493 ; WX 703 ; N uni212D ; G 3013
U 8494 ; WX 854 ; N estimated ; G 3014
U 8495 ; WX 592 ; N uni212F ; G 3015
U 8496 ; WX 605 ; N uni2130 ; G 3016
U 8497 ; WX 786 ; N uni2131 ; G 3017
U 8498 ; WX 575 ; N uni2132 ; G 3018
U 8499 ; WX 1069 ; N uni2133 ; G 3019
U 8500 ; WX 462 ; N uni2134 ; G 3020
U 8501 ; WX 745 ; N aleph ; G 3021
U 8502 ; WX 674 ; N uni2136 ; G 3022
U 8503 ; WX 466 ; N uni2137 ; G 3023
U 8504 ; WX 645 ; N uni2138 ; G 3024
U 8505 ; WX 380 ; N uni2139 ; G 3025
U 8506 ; WX 926 ; N uni213A ; G 3026
U 8507 ; WX 1194 ; N uni213B ; G 3027
U 8508 ; WX 702 ; N uni213C ; G 3028
U 8509 ; WX 728 ; N uni213D ; G 3029
U 8510 ; WX 654 ; N uni213E ; G 3030
U 8511 ; WX 849 ; N uni213F ; G 3031
U 8512 ; WX 811 ; N uni2140 ; G 3032
U 8513 ; WX 775 ; N uni2141 ; G 3033
U 8514 ; WX 557 ; N uni2142 ; G 3034
U 8515 ; WX 557 ; N uni2143 ; G 3035
U 8516 ; WX 611 ; N uni2144 ; G 3036
U 8517 ; WX 819 ; N uni2145 ; G 3037
U 8518 ; WX 708 ; N uni2146 ; G 3038
U 8519 ; WX 615 ; N uni2147 ; G 3039
U 8520 ; WX 351 ; N uni2148 ; G 3040
U 8521 ; WX 351 ; N uni2149 ; G 3041
U 8523 ; WX 780 ; N uni214B ; G 3042
U 8526 ; WX 526 ; N uni214E ; G 3043
U 8528 ; WX 969 ; N uni2150 ; G 3044
U 8529 ; WX 969 ; N uni2151 ; G 3045
U 8530 ; WX 1370 ; N uni2152 ; G 3046
U 8531 ; WX 969 ; N onethird ; G 3047
U 8532 ; WX 969 ; N twothirds ; G 3048
U 8533 ; WX 969 ; N uni2155 ; G 3049
U 8534 ; WX 969 ; N uni2156 ; G 3050
U 8535 ; WX 969 ; N uni2157 ; G 3051
U 8536 ; WX 969 ; N uni2158 ; G 3052
U 8537 ; WX 969 ; N uni2159 ; G 3053
U 8538 ; WX 969 ; N uni215A ; G 3054
U 8539 ; WX 969 ; N oneeighth ; G 3055
U 8540 ; WX 969 ; N threeeighths ; G 3056
U 8541 ; WX 969 ; N fiveeighths ; G 3057
U 8542 ; WX 969 ; N seveneighths ; G 3058
U 8543 ; WX 568 ; N uni215F ; G 3059
U 8544 ; WX 295 ; N uni2160 ; G 3060
U 8545 ; WX 492 ; N uni2161 ; G 3061
U 8546 ; WX 689 ; N uni2162 ; G 3062
U 8547 ; WX 923 ; N uni2163 ; G 3063
U 8548 ; WX 684 ; N uni2164 ; G 3064
U 8549 ; WX 922 ; N uni2165 ; G 3065
U 8550 ; WX 1120 ; N uni2166 ; G 3066
U 8551 ; WX 1317 ; N uni2167 ; G 3067
U 8552 ; WX 917 ; N uni2168 ; G 3068
U 8553 ; WX 685 ; N uni2169 ; G 3069
U 8554 ; WX 933 ; N uni216A ; G 3070
U 8555 ; WX 1131 ; N uni216B ; G 3071
U 8556 ; WX 557 ; N uni216C ; G 3072
U 8557 ; WX 698 ; N uni216D ; G 3073
U 8558 ; WX 770 ; N uni216E ; G 3074
U 8559 ; WX 863 ; N uni216F ; G 3075
U 8560 ; WX 278 ; N uni2170 ; G 3076
U 8561 ; WX 458 ; N uni2171 ; G 3077
U 8562 ; WX 637 ; N uni2172 ; G 3078
U 8563 ; WX 812 ; N uni2173 ; G 3079
U 8564 ; WX 592 ; N uni2174 ; G 3080
U 8565 ; WX 811 ; N uni2175 ; G 3081
U 8566 ; WX 991 ; N uni2176 ; G 3082
U 8567 ; WX 1170 ; N uni2177 ; G 3083
U 8568 ; WX 819 ; N uni2178 ; G 3084
U 8569 ; WX 592 ; N uni2179 ; G 3085
U 8570 ; WX 822 ; N uni217A ; G 3086
U 8571 ; WX 1002 ; N uni217B ; G 3087
U 8572 ; WX 278 ; N uni217C ; G 3088
U 8573 ; WX 550 ; N uni217D ; G 3089
U 8574 ; WX 635 ; N uni217E ; G 3090
U 8575 ; WX 974 ; N uni217F ; G 3091
U 8576 ; WX 1245 ; N uni2180 ; G 3092
U 8577 ; WX 770 ; N uni2181 ; G 3093
U 8578 ; WX 1245 ; N uni2182 ; G 3094
U 8579 ; WX 703 ; N uni2183 ; G 3095
U 8580 ; WX 549 ; N uni2184 ; G 3096
U 8581 ; WX 698 ; N uni2185 ; G 3097
U 8585 ; WX 969 ; N uni2189 ; G 3098
U 8592 ; WX 838 ; N arrowleft ; G 3099
U 8593 ; WX 838 ; N arrowup ; G 3100
U 8594 ; WX 838 ; N arrowright ; G 3101
U 8595 ; WX 838 ; N arrowdown ; G 3102
U 8596 ; WX 838 ; N arrowboth ; G 3103
U 8597 ; WX 838 ; N arrowupdn ; G 3104
U 8598 ; WX 838 ; N uni2196 ; G 3105
U 8599 ; WX 838 ; N uni2197 ; G 3106
U 8600 ; WX 838 ; N uni2198 ; G 3107
U 8601 ; WX 838 ; N uni2199 ; G 3108
U 8602 ; WX 838 ; N uni219A ; G 3109
U 8603 ; WX 838 ; N uni219B ; G 3110
U 8604 ; WX 838 ; N uni219C ; G 3111
U 8605 ; WX 838 ; N uni219D ; G 3112
U 8606 ; WX 838 ; N uni219E ; G 3113
U 8607 ; WX 838 ; N uni219F ; G 3114
U 8608 ; WX 838 ; N uni21A0 ; G 3115
U 8609 ; WX 838 ; N uni21A1 ; G 3116
U 8610 ; WX 838 ; N uni21A2 ; G 3117
U 8611 ; WX 838 ; N uni21A3 ; G 3118
U 8612 ; WX 838 ; N uni21A4 ; G 3119
U 8613 ; WX 838 ; N uni21A5 ; G 3120
U 8614 ; WX 838 ; N uni21A6 ; G 3121
U 8615 ; WX 838 ; N uni21A7 ; G 3122
U 8616 ; WX 838 ; N arrowupdnbse ; G 3123
U 8617 ; WX 838 ; N uni21A9 ; G 3124
U 8618 ; WX 838 ; N uni21AA ; G 3125
U 8619 ; WX 838 ; N uni21AB ; G 3126
U 8620 ; WX 838 ; N uni21AC ; G 3127
U 8621 ; WX 838 ; N uni21AD ; G 3128
U 8622 ; WX 838 ; N uni21AE ; G 3129
U 8623 ; WX 838 ; N uni21AF ; G 3130
U 8624 ; WX 838 ; N uni21B0 ; G 3131
U 8625 ; WX 838 ; N uni21B1 ; G 3132
U 8626 ; WX 838 ; N uni21B2 ; G 3133
U 8627 ; WX 838 ; N uni21B3 ; G 3134
U 8628 ; WX 838 ; N uni21B4 ; G 3135
U 8629 ; WX 838 ; N carriagereturn ; G 3136
U 8630 ; WX 838 ; N uni21B6 ; G 3137
U 8631 ; WX 838 ; N uni21B7 ; G 3138
U 8632 ; WX 838 ; N uni21B8 ; G 3139
U 8633 ; WX 838 ; N uni21B9 ; G 3140
U 8634 ; WX 838 ; N uni21BA ; G 3141
U 8635 ; WX 838 ; N uni21BB ; G 3142
U 8636 ; WX 838 ; N uni21BC ; G 3143
U 8637 ; WX 838 ; N uni21BD ; G 3144
U 8638 ; WX 838 ; N uni21BE ; G 3145
U 8639 ; WX 838 ; N uni21BF ; G 3146
U 8640 ; WX 838 ; N uni21C0 ; G 3147
U 8641 ; WX 838 ; N uni21C1 ; G 3148
U 8642 ; WX 838 ; N uni21C2 ; G 3149
U 8643 ; WX 838 ; N uni21C3 ; G 3150
U 8644 ; WX 838 ; N uni21C4 ; G 3151
U 8645 ; WX 838 ; N uni21C5 ; G 3152
U 8646 ; WX 838 ; N uni21C6 ; G 3153
U 8647 ; WX 838 ; N uni21C7 ; G 3154
U 8648 ; WX 838 ; N uni21C8 ; G 3155
U 8649 ; WX 838 ; N uni21C9 ; G 3156
U 8650 ; WX 838 ; N uni21CA ; G 3157
U 8651 ; WX 838 ; N uni21CB ; G 3158
U 8652 ; WX 838 ; N uni21CC ; G 3159
U 8653 ; WX 838 ; N uni21CD ; G 3160
U 8654 ; WX 838 ; N uni21CE ; G 3161
U 8655 ; WX 838 ; N uni21CF ; G 3162
U 8656 ; WX 838 ; N arrowdblleft ; G 3163
U 8657 ; WX 838 ; N arrowdblup ; G 3164
U 8658 ; WX 838 ; N arrowdblright ; G 3165
U 8659 ; WX 838 ; N arrowdbldown ; G 3166
U 8660 ; WX 838 ; N arrowdblboth ; G 3167
U 8661 ; WX 838 ; N uni21D5 ; G 3168
U 8662 ; WX 838 ; N uni21D6 ; G 3169
U 8663 ; WX 838 ; N uni21D7 ; G 3170
U 8664 ; WX 838 ; N uni21D8 ; G 3171
U 8665 ; WX 838 ; N uni21D9 ; G 3172
U 8666 ; WX 838 ; N uni21DA ; G 3173
U 8667 ; WX 838 ; N uni21DB ; G 3174
U 8668 ; WX 838 ; N uni21DC ; G 3175
U 8669 ; WX 838 ; N uni21DD ; G 3176
U 8670 ; WX 838 ; N uni21DE ; G 3177
U 8671 ; WX 838 ; N uni21DF ; G 3178
U 8672 ; WX 838 ; N uni21E0 ; G 3179
U 8673 ; WX 838 ; N uni21E1 ; G 3180
U 8674 ; WX 838 ; N uni21E2 ; G 3181
U 8675 ; WX 838 ; N uni21E3 ; G 3182
U 8676 ; WX 838 ; N uni21E4 ; G 3183
U 8677 ; WX 838 ; N uni21E5 ; G 3184
U 8678 ; WX 838 ; N uni21E6 ; G 3185
U 8679 ; WX 838 ; N uni21E7 ; G 3186
U 8680 ; WX 838 ; N uni21E8 ; G 3187
U 8681 ; WX 838 ; N uni21E9 ; G 3188
U 8682 ; WX 838 ; N uni21EA ; G 3189
U 8683 ; WX 838 ; N uni21EB ; G 3190
U 8684 ; WX 838 ; N uni21EC ; G 3191
U 8685 ; WX 838 ; N uni21ED ; G 3192
U 8686 ; WX 838 ; N uni21EE ; G 3193
U 8687 ; WX 838 ; N uni21EF ; G 3194
U 8688 ; WX 838 ; N uni21F0 ; G 3195
U 8689 ; WX 838 ; N uni21F1 ; G 3196
U 8690 ; WX 838 ; N uni21F2 ; G 3197
U 8691 ; WX 838 ; N uni21F3 ; G 3198
U 8692 ; WX 838 ; N uni21F4 ; G 3199
U 8693 ; WX 838 ; N uni21F5 ; G 3200
U 8694 ; WX 838 ; N uni21F6 ; G 3201
U 8695 ; WX 838 ; N uni21F7 ; G 3202
U 8696 ; WX 838 ; N uni21F8 ; G 3203
U 8697 ; WX 838 ; N uni21F9 ; G 3204
U 8698 ; WX 838 ; N uni21FA ; G 3205
U 8699 ; WX 838 ; N uni21FB ; G 3206
U 8700 ; WX 838 ; N uni21FC ; G 3207
U 8701 ; WX 838 ; N uni21FD ; G 3208
U 8702 ; WX 838 ; N uni21FE ; G 3209
U 8703 ; WX 838 ; N uni21FF ; G 3210
U 8704 ; WX 684 ; N universal ; G 3211
U 8705 ; WX 636 ; N uni2201 ; G 3212
U 8706 ; WX 517 ; N partialdiff ; G 3213
U 8707 ; WX 632 ; N existential ; G 3214
U 8708 ; WX 632 ; N uni2204 ; G 3215
U 8709 ; WX 871 ; N emptyset ; G 3216
U 8710 ; WX 669 ; N increment ; G 3217
U 8711 ; WX 669 ; N gradient ; G 3218
U 8712 ; WX 871 ; N element ; G 3219
U 8713 ; WX 871 ; N notelement ; G 3220
U 8714 ; WX 718 ; N uni220A ; G 3221
U 8715 ; WX 871 ; N suchthat ; G 3222
U 8716 ; WX 871 ; N uni220C ; G 3223
U 8717 ; WX 718 ; N uni220D ; G 3224
U 8718 ; WX 636 ; N uni220E ; G 3225
U 8719 ; WX 757 ; N product ; G 3226
U 8720 ; WX 757 ; N uni2210 ; G 3227
U 8721 ; WX 674 ; N summation ; G 3228
U 8722 ; WX 838 ; N minus ; G 3229
U 8723 ; WX 838 ; N uni2213 ; G 3230
U 8724 ; WX 838 ; N uni2214 ; G 3231
U 8725 ; WX 337 ; N uni2215 ; G 3232
U 8726 ; WX 637 ; N uni2216 ; G 3233
U 8727 ; WX 838 ; N asteriskmath ; G 3234
U 8728 ; WX 626 ; N uni2218 ; G 3235
U 8729 ; WX 626 ; N uni2219 ; G 3236
U 8730 ; WX 637 ; N radical ; G 3237
U 8731 ; WX 637 ; N uni221B ; G 3238
U 8732 ; WX 637 ; N uni221C ; G 3239
U 8733 ; WX 714 ; N proportional ; G 3240
U 8734 ; WX 833 ; N infinity ; G 3241
U 8735 ; WX 838 ; N orthogonal ; G 3242
U 8736 ; WX 896 ; N angle ; G 3243
U 8737 ; WX 896 ; N uni2221 ; G 3244
U 8738 ; WX 838 ; N uni2222 ; G 3245
U 8739 ; WX 500 ; N uni2223 ; G 3246
U 8740 ; WX 500 ; N uni2224 ; G 3247
U 8741 ; WX 500 ; N uni2225 ; G 3248
U 8742 ; WX 500 ; N uni2226 ; G 3249
U 8743 ; WX 732 ; N logicaland ; G 3250
U 8744 ; WX 732 ; N logicalor ; G 3251
U 8745 ; WX 732 ; N intersection ; G 3252
U 8746 ; WX 732 ; N union ; G 3253
U 8747 ; WX 521 ; N integral ; G 3254
U 8748 ; WX 789 ; N uni222C ; G 3255
U 8749 ; WX 1057 ; N uni222D ; G 3256
U 8750 ; WX 521 ; N uni222E ; G 3257
U 8751 ; WX 789 ; N uni222F ; G 3258
U 8752 ; WX 1057 ; N uni2230 ; G 3259
U 8753 ; WX 521 ; N uni2231 ; G 3260
U 8754 ; WX 521 ; N uni2232 ; G 3261
U 8755 ; WX 521 ; N uni2233 ; G 3262
U 8756 ; WX 636 ; N therefore ; G 3263
U 8757 ; WX 636 ; N uni2235 ; G 3264
U 8758 ; WX 260 ; N uni2236 ; G 3265
U 8759 ; WX 636 ; N uni2237 ; G 3266
U 8760 ; WX 838 ; N uni2238 ; G 3267
U 8761 ; WX 838 ; N uni2239 ; G 3268
U 8762 ; WX 838 ; N uni223A ; G 3269
U 8763 ; WX 838 ; N uni223B ; G 3270
U 8764 ; WX 838 ; N similar ; G 3271
U 8765 ; WX 838 ; N uni223D ; G 3272
U 8766 ; WX 838 ; N uni223E ; G 3273
U 8767 ; WX 838 ; N uni223F ; G 3274
U 8768 ; WX 375 ; N uni2240 ; G 3275
U 8769 ; WX 838 ; N uni2241 ; G 3276
U 8770 ; WX 838 ; N uni2242 ; G 3277
U 8771 ; WX 838 ; N uni2243 ; G 3278
U 8772 ; WX 838 ; N uni2244 ; G 3279
U 8773 ; WX 838 ; N congruent ; G 3280
U 8774 ; WX 838 ; N uni2246 ; G 3281
U 8775 ; WX 838 ; N uni2247 ; G 3282
U 8776 ; WX 838 ; N approxequal ; G 3283
U 8777 ; WX 838 ; N uni2249 ; G 3284
U 8778 ; WX 838 ; N uni224A ; G 3285
U 8779 ; WX 838 ; N uni224B ; G 3286
U 8780 ; WX 838 ; N uni224C ; G 3287
U 8781 ; WX 838 ; N uni224D ; G 3288
U 8782 ; WX 838 ; N uni224E ; G 3289
U 8783 ; WX 838 ; N uni224F ; G 3290
U 8784 ; WX 838 ; N uni2250 ; G 3291
U 8785 ; WX 838 ; N uni2251 ; G 3292
U 8786 ; WX 839 ; N uni2252 ; G 3293
U 8787 ; WX 839 ; N uni2253 ; G 3294
U 8788 ; WX 1000 ; N uni2254 ; G 3295
U 8789 ; WX 1000 ; N uni2255 ; G 3296
U 8790 ; WX 838 ; N uni2256 ; G 3297
U 8791 ; WX 838 ; N uni2257 ; G 3298
U 8792 ; WX 838 ; N uni2258 ; G 3299
U 8793 ; WX 838 ; N uni2259 ; G 3300
U 8794 ; WX 838 ; N uni225A ; G 3301
U 8795 ; WX 838 ; N uni225B ; G 3302
U 8796 ; WX 838 ; N uni225C ; G 3303
U 8797 ; WX 838 ; N uni225D ; G 3304
U 8798 ; WX 838 ; N uni225E ; G 3305
U 8799 ; WX 838 ; N uni225F ; G 3306
U 8800 ; WX 838 ; N notequal ; G 3307
U 8801 ; WX 838 ; N equivalence ; G 3308
U 8802 ; WX 838 ; N uni2262 ; G 3309
U 8803 ; WX 838 ; N uni2263 ; G 3310
U 8804 ; WX 838 ; N lessequal ; G 3311
U 8805 ; WX 838 ; N greaterequal ; G 3312
U 8806 ; WX 838 ; N uni2266 ; G 3313
U 8807 ; WX 838 ; N uni2267 ; G 3314
U 8808 ; WX 838 ; N uni2268 ; G 3315
U 8809 ; WX 838 ; N uni2269 ; G 3316
U 8810 ; WX 1047 ; N uni226A ; G 3317
U 8811 ; WX 1047 ; N uni226B ; G 3318
U 8812 ; WX 464 ; N uni226C ; G 3319
U 8813 ; WX 838 ; N uni226D ; G 3320
U 8814 ; WX 838 ; N uni226E ; G 3321
U 8815 ; WX 838 ; N uni226F ; G 3322
U 8816 ; WX 838 ; N uni2270 ; G 3323
U 8817 ; WX 838 ; N uni2271 ; G 3324
U 8818 ; WX 838 ; N uni2272 ; G 3325
U 8819 ; WX 838 ; N uni2273 ; G 3326
U 8820 ; WX 838 ; N uni2274 ; G 3327
U 8821 ; WX 838 ; N uni2275 ; G 3328
U 8822 ; WX 838 ; N uni2276 ; G 3329
U 8823 ; WX 838 ; N uni2277 ; G 3330
U 8824 ; WX 838 ; N uni2278 ; G 3331
U 8825 ; WX 838 ; N uni2279 ; G 3332
U 8826 ; WX 838 ; N uni227A ; G 3333
U 8827 ; WX 838 ; N uni227B ; G 3334
U 8828 ; WX 838 ; N uni227C ; G 3335
U 8829 ; WX 838 ; N uni227D ; G 3336
U 8830 ; WX 838 ; N uni227E ; G 3337
U 8831 ; WX 838 ; N uni227F ; G 3338
U 8832 ; WX 838 ; N uni2280 ; G 3339
U 8833 ; WX 838 ; N uni2281 ; G 3340
U 8834 ; WX 838 ; N propersubset ; G 3341
U 8835 ; WX 838 ; N propersuperset ; G 3342
U 8836 ; WX 838 ; N notsubset ; G 3343
U 8837 ; WX 838 ; N uni2285 ; G 3344
U 8838 ; WX 838 ; N reflexsubset ; G 3345
U 8839 ; WX 838 ; N reflexsuperset ; G 3346
U 8840 ; WX 838 ; N uni2288 ; G 3347
U 8841 ; WX 838 ; N uni2289 ; G 3348
U 8842 ; WX 838 ; N uni228A ; G 3349
U 8843 ; WX 838 ; N uni228B ; G 3350
U 8844 ; WX 732 ; N uni228C ; G 3351
U 8845 ; WX 732 ; N uni228D ; G 3352
U 8846 ; WX 732 ; N uni228E ; G 3353
U 8847 ; WX 838 ; N uni228F ; G 3354
U 8848 ; WX 838 ; N uni2290 ; G 3355
U 8849 ; WX 838 ; N uni2291 ; G 3356
U 8850 ; WX 838 ; N uni2292 ; G 3357
U 8851 ; WX 780 ; N uni2293 ; G 3358
U 8852 ; WX 780 ; N uni2294 ; G 3359
U 8853 ; WX 838 ; N circleplus ; G 3360
U 8854 ; WX 838 ; N uni2296 ; G 3361
U 8855 ; WX 838 ; N circlemultiply ; G 3362
U 8856 ; WX 838 ; N uni2298 ; G 3363
U 8857 ; WX 838 ; N uni2299 ; G 3364
U 8858 ; WX 838 ; N uni229A ; G 3365
U 8859 ; WX 838 ; N uni229B ; G 3366
U 8860 ; WX 838 ; N uni229C ; G 3367
U 8861 ; WX 838 ; N uni229D ; G 3368
U 8862 ; WX 838 ; N uni229E ; G 3369
U 8863 ; WX 838 ; N uni229F ; G 3370
U 8864 ; WX 838 ; N uni22A0 ; G 3371
U 8865 ; WX 838 ; N uni22A1 ; G 3372
U 8866 ; WX 871 ; N uni22A2 ; G 3373
U 8867 ; WX 871 ; N uni22A3 ; G 3374
U 8868 ; WX 871 ; N uni22A4 ; G 3375
U 8869 ; WX 871 ; N perpendicular ; G 3376
U 8870 ; WX 521 ; N uni22A6 ; G 3377
U 8871 ; WX 521 ; N uni22A7 ; G 3378
U 8872 ; WX 871 ; N uni22A8 ; G 3379
U 8873 ; WX 871 ; N uni22A9 ; G 3380
U 8874 ; WX 871 ; N uni22AA ; G 3381
U 8875 ; WX 871 ; N uni22AB ; G 3382
U 8876 ; WX 871 ; N uni22AC ; G 3383
U 8877 ; WX 871 ; N uni22AD ; G 3384
U 8878 ; WX 871 ; N uni22AE ; G 3385
U 8879 ; WX 871 ; N uni22AF ; G 3386
U 8880 ; WX 838 ; N uni22B0 ; G 3387
U 8881 ; WX 838 ; N uni22B1 ; G 3388
U 8882 ; WX 838 ; N uni22B2 ; G 3389
U 8883 ; WX 838 ; N uni22B3 ; G 3390
U 8884 ; WX 838 ; N uni22B4 ; G 3391
U 8885 ; WX 838 ; N uni22B5 ; G 3392
U 8886 ; WX 1000 ; N uni22B6 ; G 3393
U 8887 ; WX 1000 ; N uni22B7 ; G 3394
U 8888 ; WX 838 ; N uni22B8 ; G 3395
U 8889 ; WX 838 ; N uni22B9 ; G 3396
U 8890 ; WX 521 ; N uni22BA ; G 3397
U 8891 ; WX 732 ; N uni22BB ; G 3398
U 8892 ; WX 732 ; N uni22BC ; G 3399
U 8893 ; WX 732 ; N uni22BD ; G 3400
U 8894 ; WX 838 ; N uni22BE ; G 3401
U 8895 ; WX 838 ; N uni22BF ; G 3402
U 8896 ; WX 820 ; N uni22C0 ; G 3403
U 8897 ; WX 820 ; N uni22C1 ; G 3404
U 8898 ; WX 820 ; N uni22C2 ; G 3405
U 8899 ; WX 820 ; N uni22C3 ; G 3406
U 8900 ; WX 626 ; N uni22C4 ; G 3407
U 8901 ; WX 318 ; N dotmath ; G 3408
U 8902 ; WX 626 ; N uni22C6 ; G 3409
U 8903 ; WX 838 ; N uni22C7 ; G 3410
U 8904 ; WX 1000 ; N uni22C8 ; G 3411
U 8905 ; WX 1000 ; N uni22C9 ; G 3412
U 8906 ; WX 1000 ; N uni22CA ; G 3413
U 8907 ; WX 1000 ; N uni22CB ; G 3414
U 8908 ; WX 1000 ; N uni22CC ; G 3415
U 8909 ; WX 838 ; N uni22CD ; G 3416
U 8910 ; WX 732 ; N uni22CE ; G 3417
U 8911 ; WX 732 ; N uni22CF ; G 3418
U 8912 ; WX 838 ; N uni22D0 ; G 3419
U 8913 ; WX 838 ; N uni22D1 ; G 3420
U 8914 ; WX 838 ; N uni22D2 ; G 3421
U 8915 ; WX 838 ; N uni22D3 ; G 3422
U 8916 ; WX 838 ; N uni22D4 ; G 3423
U 8917 ; WX 838 ; N uni22D5 ; G 3424
U 8918 ; WX 838 ; N uni22D6 ; G 3425
U 8919 ; WX 838 ; N uni22D7 ; G 3426
U 8920 ; WX 1422 ; N uni22D8 ; G 3427
U 8921 ; WX 1422 ; N uni22D9 ; G 3428
U 8922 ; WX 838 ; N uni22DA ; G 3429
U 8923 ; WX 838 ; N uni22DB ; G 3430
U 8924 ; WX 838 ; N uni22DC ; G 3431
U 8925 ; WX 838 ; N uni22DD ; G 3432
U 8926 ; WX 838 ; N uni22DE ; G 3433
U 8927 ; WX 838 ; N uni22DF ; G 3434
U 8928 ; WX 838 ; N uni22E0 ; G 3435
U 8929 ; WX 838 ; N uni22E1 ; G 3436
U 8930 ; WX 838 ; N uni22E2 ; G 3437
U 8931 ; WX 838 ; N uni22E3 ; G 3438
U 8932 ; WX 838 ; N uni22E4 ; G 3439
U 8933 ; WX 838 ; N uni22E5 ; G 3440
U 8934 ; WX 838 ; N uni22E6 ; G 3441
U 8935 ; WX 838 ; N uni22E7 ; G 3442
U 8936 ; WX 838 ; N uni22E8 ; G 3443
U 8937 ; WX 838 ; N uni22E9 ; G 3444
U 8938 ; WX 838 ; N uni22EA ; G 3445
U 8939 ; WX 838 ; N uni22EB ; G 3446
U 8940 ; WX 838 ; N uni22EC ; G 3447
U 8941 ; WX 838 ; N uni22ED ; G 3448
U 8942 ; WX 1000 ; N uni22EE ; G 3449
U 8943 ; WX 1000 ; N uni22EF ; G 3450
U 8944 ; WX 1000 ; N uni22F0 ; G 3451
U 8945 ; WX 1000 ; N uni22F1 ; G 3452
U 8946 ; WX 1000 ; N uni22F2 ; G 3453
U 8947 ; WX 871 ; N uni22F3 ; G 3454
U 8948 ; WX 718 ; N uni22F4 ; G 3455
U 8949 ; WX 871 ; N uni22F5 ; G 3456
U 8950 ; WX 871 ; N uni22F6 ; G 3457
U 8951 ; WX 718 ; N uni22F7 ; G 3458
U 8952 ; WX 871 ; N uni22F8 ; G 3459
U 8953 ; WX 871 ; N uni22F9 ; G 3460
U 8954 ; WX 1000 ; N uni22FA ; G 3461
U 8955 ; WX 871 ; N uni22FB ; G 3462
U 8956 ; WX 718 ; N uni22FC ; G 3463
U 8957 ; WX 871 ; N uni22FD ; G 3464
U 8958 ; WX 718 ; N uni22FE ; G 3465
U 8959 ; WX 871 ; N uni22FF ; G 3466
U 8960 ; WX 602 ; N uni2300 ; G 3467
U 8961 ; WX 602 ; N uni2301 ; G 3468
U 8962 ; WX 635 ; N house ; G 3469
U 8963 ; WX 838 ; N uni2303 ; G 3470
U 8964 ; WX 838 ; N uni2304 ; G 3471
U 8965 ; WX 838 ; N uni2305 ; G 3472
U 8966 ; WX 838 ; N uni2306 ; G 3473
U 8967 ; WX 488 ; N uni2307 ; G 3474
U 8968 ; WX 390 ; N uni2308 ; G 3475
U 8969 ; WX 390 ; N uni2309 ; G 3476
U 8970 ; WX 390 ; N uni230A ; G 3477
U 8971 ; WX 390 ; N uni230B ; G 3478
U 8972 ; WX 809 ; N uni230C ; G 3479
U 8973 ; WX 809 ; N uni230D ; G 3480
U 8974 ; WX 809 ; N uni230E ; G 3481
U 8975 ; WX 809 ; N uni230F ; G 3482
U 8976 ; WX 838 ; N revlogicalnot ; G 3483
U 8977 ; WX 513 ; N uni2311 ; G 3484
U 8984 ; WX 1000 ; N uni2318 ; G 3485
U 8985 ; WX 838 ; N uni2319 ; G 3486
U 8988 ; WX 469 ; N uni231C ; G 3487
U 8989 ; WX 469 ; N uni231D ; G 3488
U 8990 ; WX 469 ; N uni231E ; G 3489
U 8991 ; WX 469 ; N uni231F ; G 3490
U 8992 ; WX 521 ; N integraltp ; G 3491
U 8993 ; WX 521 ; N integralbt ; G 3492
U 8996 ; WX 1152 ; N uni2324 ; G 3493
U 8997 ; WX 1152 ; N uni2325 ; G 3494
U 8998 ; WX 1414 ; N uni2326 ; G 3495
U 8999 ; WX 1152 ; N uni2327 ; G 3496
U 9000 ; WX 1443 ; N uni2328 ; G 3497
U 9003 ; WX 1414 ; N uni232B ; G 3498
U 9004 ; WX 873 ; N uni232C ; G 3499
U 9075 ; WX 338 ; N uni2373 ; G 3500
U 9076 ; WX 635 ; N uni2374 ; G 3501
U 9077 ; WX 837 ; N uni2375 ; G 3502
U 9082 ; WX 659 ; N uni237A ; G 3503
U 9085 ; WX 757 ; N uni237D ; G 3504
U 9095 ; WX 1152 ; N uni2387 ; G 3505
U 9108 ; WX 873 ; N uni2394 ; G 3506
U 9115 ; WX 500 ; N uni239B ; G 3507
U 9116 ; WX 500 ; N uni239C ; G 3508
U 9117 ; WX 500 ; N uni239D ; G 3509
U 9118 ; WX 500 ; N uni239E ; G 3510
U 9119 ; WX 500 ; N uni239F ; G 3511
U 9120 ; WX 500 ; N uni23A0 ; G 3512
U 9121 ; WX 500 ; N uni23A1 ; G 3513
U 9122 ; WX 500 ; N uni23A2 ; G 3514
U 9123 ; WX 500 ; N uni23A3 ; G 3515
U 9124 ; WX 500 ; N uni23A4 ; G 3516
U 9125 ; WX 500 ; N uni23A5 ; G 3517
U 9126 ; WX 500 ; N uni23A6 ; G 3518
U 9127 ; WX 750 ; N uni23A7 ; G 3519
U 9128 ; WX 750 ; N uni23A8 ; G 3520
U 9129 ; WX 750 ; N uni23A9 ; G 3521
U 9130 ; WX 750 ; N uni23AA ; G 3522
U 9131 ; WX 750 ; N uni23AB ; G 3523
U 9132 ; WX 750 ; N uni23AC ; G 3524
U 9133 ; WX 750 ; N uni23AD ; G 3525
U 9134 ; WX 521 ; N uni23AE ; G 3526
U 9166 ; WX 838 ; N uni23CE ; G 3527
U 9167 ; WX 945 ; N uni23CF ; G 3528
U 9187 ; WX 873 ; N uni23E3 ; G 3529
U 9189 ; WX 769 ; N uni23E5 ; G 3530
U 9192 ; WX 636 ; N uni23E8 ; G 3531
U 9250 ; WX 635 ; N uni2422 ; G 3532
U 9251 ; WX 635 ; N uni2423 ; G 3533
U 9312 ; WX 896 ; N uni2460 ; G 3534
U 9313 ; WX 896 ; N uni2461 ; G 3535
U 9314 ; WX 896 ; N uni2462 ; G 3536
U 9315 ; WX 896 ; N uni2463 ; G 3537
U 9316 ; WX 896 ; N uni2464 ; G 3538
U 9317 ; WX 896 ; N uni2465 ; G 3539
U 9318 ; WX 896 ; N uni2466 ; G 3540
U 9319 ; WX 896 ; N uni2467 ; G 3541
U 9320 ; WX 896 ; N uni2468 ; G 3542
U 9321 ; WX 896 ; N uni2469 ; G 3543
U 9472 ; WX 602 ; N SF100000 ; G 3544
U 9473 ; WX 602 ; N uni2501 ; G 3545
U 9474 ; WX 602 ; N SF110000 ; G 3546
U 9475 ; WX 602 ; N uni2503 ; G 3547
U 9476 ; WX 602 ; N uni2504 ; G 3548
U 9477 ; WX 602 ; N uni2505 ; G 3549
U 9478 ; WX 602 ; N uni2506 ; G 3550
U 9479 ; WX 602 ; N uni2507 ; G 3551
U 9480 ; WX 602 ; N uni2508 ; G 3552
U 9481 ; WX 602 ; N uni2509 ; G 3553
U 9482 ; WX 602 ; N uni250A ; G 3554
U 9483 ; WX 602 ; N uni250B ; G 3555
U 9484 ; WX 602 ; N SF010000 ; G 3556
U 9485 ; WX 602 ; N uni250D ; G 3557
U 9486 ; WX 602 ; N uni250E ; G 3558
U 9487 ; WX 602 ; N uni250F ; G 3559
U 9488 ; WX 602 ; N SF030000 ; G 3560
U 9489 ; WX 602 ; N uni2511 ; G 3561
U 9490 ; WX 602 ; N uni2512 ; G 3562
U 9491 ; WX 602 ; N uni2513 ; G 3563
U 9492 ; WX 602 ; N SF020000 ; G 3564
U 9493 ; WX 602 ; N uni2515 ; G 3565
U 9494 ; WX 602 ; N uni2516 ; G 3566
U 9495 ; WX 602 ; N uni2517 ; G 3567
U 9496 ; WX 602 ; N SF040000 ; G 3568
U 9497 ; WX 602 ; N uni2519 ; G 3569
U 9498 ; WX 602 ; N uni251A ; G 3570
U 9499 ; WX 602 ; N uni251B ; G 3571
U 9500 ; WX 602 ; N SF080000 ; G 3572
U 9501 ; WX 602 ; N uni251D ; G 3573
U 9502 ; WX 602 ; N uni251E ; G 3574
U 9503 ; WX 602 ; N uni251F ; G 3575
U 9504 ; WX 602 ; N uni2520 ; G 3576
U 9505 ; WX 602 ; N uni2521 ; G 3577
U 9506 ; WX 602 ; N uni2522 ; G 3578
U 9507 ; WX 602 ; N uni2523 ; G 3579
U 9508 ; WX 602 ; N SF090000 ; G 3580
U 9509 ; WX 602 ; N uni2525 ; G 3581
U 9510 ; WX 602 ; N uni2526 ; G 3582
U 9511 ; WX 602 ; N uni2527 ; G 3583
U 9512 ; WX 602 ; N uni2528 ; G 3584
U 9513 ; WX 602 ; N uni2529 ; G 3585
U 9514 ; WX 602 ; N uni252A ; G 3586
U 9515 ; WX 602 ; N uni252B ; G 3587
U 9516 ; WX 602 ; N SF060000 ; G 3588
U 9517 ; WX 602 ; N uni252D ; G 3589
U 9518 ; WX 602 ; N uni252E ; G 3590
U 9519 ; WX 602 ; N uni252F ; G 3591
U 9520 ; WX 602 ; N uni2530 ; G 3592
U 9521 ; WX 602 ; N uni2531 ; G 3593
U 9522 ; WX 602 ; N uni2532 ; G 3594
U 9523 ; WX 602 ; N uni2533 ; G 3595
U 9524 ; WX 602 ; N SF070000 ; G 3596
U 9525 ; WX 602 ; N uni2535 ; G 3597
U 9526 ; WX 602 ; N uni2536 ; G 3598
U 9527 ; WX 602 ; N uni2537 ; G 3599
U 9528 ; WX 602 ; N uni2538 ; G 3600
U 9529 ; WX 602 ; N uni2539 ; G 3601
U 9530 ; WX 602 ; N uni253A ; G 3602
U 9531 ; WX 602 ; N uni253B ; G 3603
U 9532 ; WX 602 ; N SF050000 ; G 3604
U 9533 ; WX 602 ; N uni253D ; G 3605
U 9534 ; WX 602 ; N uni253E ; G 3606
U 9535 ; WX 602 ; N uni253F ; G 3607
U 9536 ; WX 602 ; N uni2540 ; G 3608
U 9537 ; WX 602 ; N uni2541 ; G 3609
U 9538 ; WX 602 ; N uni2542 ; G 3610
U 9539 ; WX 602 ; N uni2543 ; G 3611
U 9540 ; WX 602 ; N uni2544 ; G 3612
U 9541 ; WX 602 ; N uni2545 ; G 3613
U 9542 ; WX 602 ; N uni2546 ; G 3614
U 9543 ; WX 602 ; N uni2547 ; G 3615
U 9544 ; WX 602 ; N uni2548 ; G 3616
U 9545 ; WX 602 ; N uni2549 ; G 3617
U 9546 ; WX 602 ; N uni254A ; G 3618
U 9547 ; WX 602 ; N uni254B ; G 3619
U 9548 ; WX 602 ; N uni254C ; G 3620
U 9549 ; WX 602 ; N uni254D ; G 3621
U 9550 ; WX 602 ; N uni254E ; G 3622
U 9551 ; WX 602 ; N uni254F ; G 3623
U 9552 ; WX 602 ; N SF430000 ; G 3624
U 9553 ; WX 602 ; N SF240000 ; G 3625
U 9554 ; WX 602 ; N SF510000 ; G 3626
U 9555 ; WX 602 ; N SF520000 ; G 3627
U 9556 ; WX 602 ; N SF390000 ; G 3628
U 9557 ; WX 602 ; N SF220000 ; G 3629
U 9558 ; WX 602 ; N SF210000 ; G 3630
U 9559 ; WX 602 ; N SF250000 ; G 3631
U 9560 ; WX 602 ; N SF500000 ; G 3632
U 9561 ; WX 602 ; N SF490000 ; G 3633
U 9562 ; WX 602 ; N SF380000 ; G 3634
U 9563 ; WX 602 ; N SF280000 ; G 3635
U 9564 ; WX 602 ; N SF270000 ; G 3636
U 9565 ; WX 602 ; N SF260000 ; G 3637
U 9566 ; WX 602 ; N SF360000 ; G 3638
U 9567 ; WX 602 ; N SF370000 ; G 3639
U 9568 ; WX 602 ; N SF420000 ; G 3640
U 9569 ; WX 602 ; N SF190000 ; G 3641
U 9570 ; WX 602 ; N SF200000 ; G 3642
U 9571 ; WX 602 ; N SF230000 ; G 3643
U 9572 ; WX 602 ; N SF470000 ; G 3644
U 9573 ; WX 602 ; N SF480000 ; G 3645
U 9574 ; WX 602 ; N SF410000 ; G 3646
U 9575 ; WX 602 ; N SF450000 ; G 3647
U 9576 ; WX 602 ; N SF460000 ; G 3648
U 9577 ; WX 602 ; N SF400000 ; G 3649
U 9578 ; WX 602 ; N SF540000 ; G 3650
U 9579 ; WX 602 ; N SF530000 ; G 3651
U 9580 ; WX 602 ; N SF440000 ; G 3652
U 9581 ; WX 602 ; N uni256D ; G 3653
U 9582 ; WX 602 ; N uni256E ; G 3654
U 9583 ; WX 602 ; N uni256F ; G 3655
U 9584 ; WX 602 ; N uni2570 ; G 3656
U 9585 ; WX 602 ; N uni2571 ; G 3657
U 9586 ; WX 602 ; N uni2572 ; G 3658
U 9587 ; WX 602 ; N uni2573 ; G 3659
U 9588 ; WX 602 ; N uni2574 ; G 3660
U 9589 ; WX 602 ; N uni2575 ; G 3661
U 9590 ; WX 602 ; N uni2576 ; G 3662
U 9591 ; WX 602 ; N uni2577 ; G 3663
U 9592 ; WX 602 ; N uni2578 ; G 3664
U 9593 ; WX 602 ; N uni2579 ; G 3665
U 9594 ; WX 602 ; N uni257A ; G 3666
U 9595 ; WX 602 ; N uni257B ; G 3667
U 9596 ; WX 602 ; N uni257C ; G 3668
U 9597 ; WX 602 ; N uni257D ; G 3669
U 9598 ; WX 602 ; N uni257E ; G 3670
U 9599 ; WX 602 ; N uni257F ; G 3671
U 9600 ; WX 769 ; N upblock ; G 3672
U 9601 ; WX 769 ; N uni2581 ; G 3673
U 9602 ; WX 769 ; N uni2582 ; G 3674
U 9603 ; WX 769 ; N uni2583 ; G 3675
U 9604 ; WX 769 ; N dnblock ; G 3676
U 9605 ; WX 769 ; N uni2585 ; G 3677
U 9606 ; WX 769 ; N uni2586 ; G 3678
U 9607 ; WX 769 ; N uni2587 ; G 3679
U 9608 ; WX 769 ; N block ; G 3680
U 9609 ; WX 769 ; N uni2589 ; G 3681
U 9610 ; WX 769 ; N uni258A ; G 3682
U 9611 ; WX 769 ; N uni258B ; G 3683
U 9612 ; WX 769 ; N lfblock ; G 3684
U 9613 ; WX 769 ; N uni258D ; G 3685
U 9614 ; WX 769 ; N uni258E ; G 3686
U 9615 ; WX 769 ; N uni258F ; G 3687
U 9616 ; WX 769 ; N rtblock ; G 3688
U 9617 ; WX 769 ; N ltshade ; G 3689
U 9618 ; WX 769 ; N shade ; G 3690
U 9619 ; WX 769 ; N dkshade ; G 3691
U 9620 ; WX 769 ; N uni2594 ; G 3692
U 9621 ; WX 769 ; N uni2595 ; G 3693
U 9622 ; WX 769 ; N uni2596 ; G 3694
U 9623 ; WX 769 ; N uni2597 ; G 3695
U 9624 ; WX 769 ; N uni2598 ; G 3696
U 9625 ; WX 769 ; N uni2599 ; G 3697
U 9626 ; WX 769 ; N uni259A ; G 3698
U 9627 ; WX 769 ; N uni259B ; G 3699
U 9628 ; WX 769 ; N uni259C ; G 3700
U 9629 ; WX 769 ; N uni259D ; G 3701
U 9630 ; WX 769 ; N uni259E ; G 3702
U 9631 ; WX 769 ; N uni259F ; G 3703
U 9632 ; WX 945 ; N filledbox ; G 3704
U 9633 ; WX 945 ; N H22073 ; G 3705
U 9634 ; WX 945 ; N uni25A2 ; G 3706
U 9635 ; WX 945 ; N uni25A3 ; G 3707
U 9636 ; WX 945 ; N uni25A4 ; G 3708
U 9637 ; WX 945 ; N uni25A5 ; G 3709
U 9638 ; WX 945 ; N uni25A6 ; G 3710
U 9639 ; WX 945 ; N uni25A7 ; G 3711
U 9640 ; WX 945 ; N uni25A8 ; G 3712
U 9641 ; WX 945 ; N uni25A9 ; G 3713
U 9642 ; WX 678 ; N H18543 ; G 3714
U 9643 ; WX 678 ; N H18551 ; G 3715
U 9644 ; WX 945 ; N filledrect ; G 3716
U 9645 ; WX 945 ; N uni25AD ; G 3717
U 9646 ; WX 550 ; N uni25AE ; G 3718
U 9647 ; WX 550 ; N uni25AF ; G 3719
U 9648 ; WX 769 ; N uni25B0 ; G 3720
U 9649 ; WX 769 ; N uni25B1 ; G 3721
U 9650 ; WX 769 ; N triagup ; G 3722
U 9651 ; WX 769 ; N uni25B3 ; G 3723
U 9652 ; WX 502 ; N uni25B4 ; G 3724
U 9653 ; WX 502 ; N uni25B5 ; G 3725
U 9654 ; WX 769 ; N uni25B6 ; G 3726
U 9655 ; WX 769 ; N uni25B7 ; G 3727
U 9656 ; WX 502 ; N uni25B8 ; G 3728
U 9657 ; WX 502 ; N uni25B9 ; G 3729
U 9658 ; WX 769 ; N triagrt ; G 3730
U 9659 ; WX 769 ; N uni25BB ; G 3731
U 9660 ; WX 769 ; N triagdn ; G 3732
U 9661 ; WX 769 ; N uni25BD ; G 3733
U 9662 ; WX 502 ; N uni25BE ; G 3734
U 9663 ; WX 502 ; N uni25BF ; G 3735
U 9664 ; WX 769 ; N uni25C0 ; G 3736
U 9665 ; WX 769 ; N uni25C1 ; G 3737
U 9666 ; WX 502 ; N uni25C2 ; G 3738
U 9667 ; WX 502 ; N uni25C3 ; G 3739
U 9668 ; WX 769 ; N triaglf ; G 3740
U 9669 ; WX 769 ; N uni25C5 ; G 3741
U 9670 ; WX 769 ; N uni25C6 ; G 3742
U 9671 ; WX 769 ; N uni25C7 ; G 3743
U 9672 ; WX 769 ; N uni25C8 ; G 3744
U 9673 ; WX 873 ; N uni25C9 ; G 3745
U 9674 ; WX 494 ; N lozenge ; G 3746
U 9675 ; WX 873 ; N circle ; G 3747
U 9676 ; WX 873 ; N uni25CC ; G 3748
U 9677 ; WX 873 ; N uni25CD ; G 3749
U 9678 ; WX 873 ; N uni25CE ; G 3750
U 9679 ; WX 873 ; N H18533 ; G 3751
U 9680 ; WX 873 ; N uni25D0 ; G 3752
U 9681 ; WX 873 ; N uni25D1 ; G 3753
U 9682 ; WX 873 ; N uni25D2 ; G 3754
U 9683 ; WX 873 ; N uni25D3 ; G 3755
U 9684 ; WX 873 ; N uni25D4 ; G 3756
U 9685 ; WX 873 ; N uni25D5 ; G 3757
U 9686 ; WX 527 ; N uni25D6 ; G 3758
U 9687 ; WX 527 ; N uni25D7 ; G 3759
U 9688 ; WX 791 ; N invbullet ; G 3760
U 9689 ; WX 970 ; N invcircle ; G 3761
U 9690 ; WX 970 ; N uni25DA ; G 3762
U 9691 ; WX 970 ; N uni25DB ; G 3763
U 9692 ; WX 387 ; N uni25DC ; G 3764
U 9693 ; WX 387 ; N uni25DD ; G 3765
U 9694 ; WX 387 ; N uni25DE ; G 3766
U 9695 ; WX 387 ; N uni25DF ; G 3767
U 9696 ; WX 873 ; N uni25E0 ; G 3768
U 9697 ; WX 873 ; N uni25E1 ; G 3769
U 9698 ; WX 769 ; N uni25E2 ; G 3770
U 9699 ; WX 769 ; N uni25E3 ; G 3771
U 9700 ; WX 769 ; N uni25E4 ; G 3772
U 9701 ; WX 769 ; N uni25E5 ; G 3773
U 9702 ; WX 590 ; N openbullet ; G 3774
U 9703 ; WX 945 ; N uni25E7 ; G 3775
U 9704 ; WX 945 ; N uni25E8 ; G 3776
U 9705 ; WX 945 ; N uni25E9 ; G 3777
U 9706 ; WX 945 ; N uni25EA ; G 3778
U 9707 ; WX 945 ; N uni25EB ; G 3779
U 9708 ; WX 769 ; N uni25EC ; G 3780
U 9709 ; WX 769 ; N uni25ED ; G 3781
U 9710 ; WX 769 ; N uni25EE ; G 3782
U 9711 ; WX 1119 ; N uni25EF ; G 3783
U 9712 ; WX 945 ; N uni25F0 ; G 3784
U 9713 ; WX 945 ; N uni25F1 ; G 3785
U 9714 ; WX 945 ; N uni25F2 ; G 3786
U 9715 ; WX 945 ; N uni25F3 ; G 3787
U 9716 ; WX 873 ; N uni25F4 ; G 3788
U 9717 ; WX 873 ; N uni25F5 ; G 3789
U 9718 ; WX 873 ; N uni25F6 ; G 3790
U 9719 ; WX 873 ; N uni25F7 ; G 3791
U 9720 ; WX 769 ; N uni25F8 ; G 3792
U 9721 ; WX 769 ; N uni25F9 ; G 3793
U 9722 ; WX 769 ; N uni25FA ; G 3794
U 9723 ; WX 830 ; N uni25FB ; G 3795
U 9724 ; WX 830 ; N uni25FC ; G 3796
U 9725 ; WX 732 ; N uni25FD ; G 3797
U 9726 ; WX 732 ; N uni25FE ; G 3798
U 9727 ; WX 769 ; N uni25FF ; G 3799
U 9728 ; WX 896 ; N uni2600 ; G 3800
U 9729 ; WX 1000 ; N uni2601 ; G 3801
U 9730 ; WX 896 ; N uni2602 ; G 3802
U 9731 ; WX 896 ; N uni2603 ; G 3803
U 9732 ; WX 896 ; N uni2604 ; G 3804
U 9733 ; WX 896 ; N uni2605 ; G 3805
U 9734 ; WX 896 ; N uni2606 ; G 3806
U 9735 ; WX 573 ; N uni2607 ; G 3807
U 9736 ; WX 896 ; N uni2608 ; G 3808
U 9737 ; WX 896 ; N uni2609 ; G 3809
U 9738 ; WX 888 ; N uni260A ; G 3810
U 9739 ; WX 888 ; N uni260B ; G 3811
U 9740 ; WX 671 ; N uni260C ; G 3812
U 9741 ; WX 1013 ; N uni260D ; G 3813
U 9742 ; WX 1246 ; N uni260E ; G 3814
U 9743 ; WX 1250 ; N uni260F ; G 3815
U 9744 ; WX 896 ; N uni2610 ; G 3816
U 9745 ; WX 896 ; N uni2611 ; G 3817
U 9746 ; WX 896 ; N uni2612 ; G 3818
U 9747 ; WX 532 ; N uni2613 ; G 3819
U 9748 ; WX 896 ; N uni2614 ; G 3820
U 9749 ; WX 896 ; N uni2615 ; G 3821
U 9750 ; WX 896 ; N uni2616 ; G 3822
U 9751 ; WX 896 ; N uni2617 ; G 3823
U 9752 ; WX 896 ; N uni2618 ; G 3824
U 9753 ; WX 896 ; N uni2619 ; G 3825
U 9754 ; WX 896 ; N uni261A ; G 3826
U 9755 ; WX 896 ; N uni261B ; G 3827
U 9756 ; WX 896 ; N uni261C ; G 3828
U 9757 ; WX 609 ; N uni261D ; G 3829
U 9758 ; WX 896 ; N uni261E ; G 3830
U 9759 ; WX 609 ; N uni261F ; G 3831
U 9760 ; WX 896 ; N uni2620 ; G 3832
U 9761 ; WX 896 ; N uni2621 ; G 3833
U 9762 ; WX 896 ; N uni2622 ; G 3834
U 9763 ; WX 896 ; N uni2623 ; G 3835
U 9764 ; WX 669 ; N uni2624 ; G 3836
U 9765 ; WX 746 ; N uni2625 ; G 3837
U 9766 ; WX 649 ; N uni2626 ; G 3838
U 9767 ; WX 784 ; N uni2627 ; G 3839
U 9768 ; WX 545 ; N uni2628 ; G 3840
U 9769 ; WX 896 ; N uni2629 ; G 3841
U 9770 ; WX 896 ; N uni262A ; G 3842
U 9771 ; WX 896 ; N uni262B ; G 3843
U 9772 ; WX 710 ; N uni262C ; G 3844
U 9773 ; WX 896 ; N uni262D ; G 3845
U 9774 ; WX 896 ; N uni262E ; G 3846
U 9775 ; WX 896 ; N uni262F ; G 3847
U 9776 ; WX 896 ; N uni2630 ; G 3848
U 9777 ; WX 896 ; N uni2631 ; G 3849
U 9778 ; WX 896 ; N uni2632 ; G 3850
U 9779 ; WX 896 ; N uni2633 ; G 3851
U 9780 ; WX 896 ; N uni2634 ; G 3852
U 9781 ; WX 896 ; N uni2635 ; G 3853
U 9782 ; WX 896 ; N uni2636 ; G 3854
U 9783 ; WX 896 ; N uni2637 ; G 3855
U 9784 ; WX 896 ; N uni2638 ; G 3856
U 9785 ; WX 1042 ; N uni2639 ; G 3857
U 9786 ; WX 1042 ; N smileface ; G 3858
U 9787 ; WX 1042 ; N invsmileface ; G 3859
U 9788 ; WX 896 ; N sun ; G 3860
U 9789 ; WX 896 ; N uni263D ; G 3861
U 9790 ; WX 896 ; N uni263E ; G 3862
U 9791 ; WX 614 ; N uni263F ; G 3863
U 9792 ; WX 732 ; N female ; G 3864
U 9793 ; WX 732 ; N uni2641 ; G 3865
U 9794 ; WX 896 ; N male ; G 3866
U 9795 ; WX 896 ; N uni2643 ; G 3867
U 9796 ; WX 896 ; N uni2644 ; G 3868
U 9797 ; WX 896 ; N uni2645 ; G 3869
U 9798 ; WX 896 ; N uni2646 ; G 3870
U 9799 ; WX 896 ; N uni2647 ; G 3871
U 9800 ; WX 896 ; N uni2648 ; G 3872
U 9801 ; WX 896 ; N uni2649 ; G 3873
U 9802 ; WX 896 ; N uni264A ; G 3874
U 9803 ; WX 896 ; N uni264B ; G 3875
U 9804 ; WX 896 ; N uni264C ; G 3876
U 9805 ; WX 896 ; N uni264D ; G 3877
U 9806 ; WX 896 ; N uni264E ; G 3878
U 9807 ; WX 896 ; N uni264F ; G 3879
U 9808 ; WX 896 ; N uni2650 ; G 3880
U 9809 ; WX 896 ; N uni2651 ; G 3881
U 9810 ; WX 896 ; N uni2652 ; G 3882
U 9811 ; WX 896 ; N uni2653 ; G 3883
U 9812 ; WX 896 ; N uni2654 ; G 3884
U 9813 ; WX 896 ; N uni2655 ; G 3885
U 9814 ; WX 896 ; N uni2656 ; G 3886
U 9815 ; WX 896 ; N uni2657 ; G 3887
U 9816 ; WX 896 ; N uni2658 ; G 3888
U 9817 ; WX 896 ; N uni2659 ; G 3889
U 9818 ; WX 896 ; N uni265A ; G 3890
U 9819 ; WX 896 ; N uni265B ; G 3891
U 9820 ; WX 896 ; N uni265C ; G 3892
U 9821 ; WX 896 ; N uni265D ; G 3893
U 9822 ; WX 896 ; N uni265E ; G 3894
U 9823 ; WX 896 ; N uni265F ; G 3895
U 9824 ; WX 896 ; N spade ; G 3896
U 9825 ; WX 896 ; N uni2661 ; G 3897
U 9826 ; WX 896 ; N uni2662 ; G 3898
U 9827 ; WX 896 ; N club ; G 3899
U 9828 ; WX 896 ; N uni2664 ; G 3900
U 9829 ; WX 896 ; N heart ; G 3901
U 9830 ; WX 896 ; N diamond ; G 3902
U 9831 ; WX 896 ; N uni2667 ; G 3903
U 9832 ; WX 896 ; N uni2668 ; G 3904
U 9833 ; WX 472 ; N uni2669 ; G 3905
U 9834 ; WX 638 ; N musicalnote ; G 3906
U 9835 ; WX 896 ; N musicalnotedbl ; G 3907
U 9836 ; WX 896 ; N uni266C ; G 3908
U 9837 ; WX 472 ; N uni266D ; G 3909
U 9838 ; WX 357 ; N uni266E ; G 3910
U 9839 ; WX 484 ; N uni266F ; G 3911
U 9840 ; WX 748 ; N uni2670 ; G 3912
U 9841 ; WX 766 ; N uni2671 ; G 3913
U 9842 ; WX 896 ; N uni2672 ; G 3914
U 9843 ; WX 896 ; N uni2673 ; G 3915
U 9844 ; WX 896 ; N uni2674 ; G 3916
U 9845 ; WX 896 ; N uni2675 ; G 3917
U 9846 ; WX 896 ; N uni2676 ; G 3918
U 9847 ; WX 896 ; N uni2677 ; G 3919
U 9848 ; WX 896 ; N uni2678 ; G 3920
U 9849 ; WX 896 ; N uni2679 ; G 3921
U 9850 ; WX 896 ; N uni267A ; G 3922
U 9851 ; WX 896 ; N uni267B ; G 3923
U 9852 ; WX 896 ; N uni267C ; G 3924
U 9853 ; WX 896 ; N uni267D ; G 3925
U 9854 ; WX 896 ; N uni267E ; G 3926
U 9855 ; WX 896 ; N uni267F ; G 3927
U 9856 ; WX 869 ; N uni2680 ; G 3928
U 9857 ; WX 869 ; N uni2681 ; G 3929
U 9858 ; WX 869 ; N uni2682 ; G 3930
U 9859 ; WX 869 ; N uni2683 ; G 3931
U 9860 ; WX 869 ; N uni2684 ; G 3932
U 9861 ; WX 869 ; N uni2685 ; G 3933
U 9862 ; WX 896 ; N uni2686 ; G 3934
U 9863 ; WX 896 ; N uni2687 ; G 3935
U 9864 ; WX 896 ; N uni2688 ; G 3936
U 9865 ; WX 896 ; N uni2689 ; G 3937
U 9866 ; WX 896 ; N uni268A ; G 3938
U 9867 ; WX 896 ; N uni268B ; G 3939
U 9868 ; WX 896 ; N uni268C ; G 3940
U 9869 ; WX 896 ; N uni268D ; G 3941
U 9870 ; WX 896 ; N uni268E ; G 3942
U 9871 ; WX 896 ; N uni268F ; G 3943
U 9872 ; WX 896 ; N uni2690 ; G 3944
U 9873 ; WX 896 ; N uni2691 ; G 3945
U 9874 ; WX 896 ; N uni2692 ; G 3946
U 9875 ; WX 896 ; N uni2693 ; G 3947
U 9876 ; WX 896 ; N uni2694 ; G 3948
U 9877 ; WX 541 ; N uni2695 ; G 3949
U 9878 ; WX 896 ; N uni2696 ; G 3950
U 9879 ; WX 896 ; N uni2697 ; G 3951
U 9880 ; WX 896 ; N uni2698 ; G 3952
U 9881 ; WX 896 ; N uni2699 ; G 3953
U 9882 ; WX 896 ; N uni269A ; G 3954
U 9883 ; WX 896 ; N uni269B ; G 3955
U 9884 ; WX 896 ; N uni269C ; G 3956
U 9886 ; WX 896 ; N uni269E ; G 3957
U 9887 ; WX 896 ; N uni269F ; G 3958
U 9888 ; WX 896 ; N uni26A0 ; G 3959
U 9889 ; WX 702 ; N uni26A1 ; G 3960
U 9890 ; WX 1004 ; N uni26A2 ; G 3961
U 9891 ; WX 1089 ; N uni26A3 ; G 3962
U 9892 ; WX 1175 ; N uni26A4 ; G 3963
U 9893 ; WX 903 ; N uni26A5 ; G 3964
U 9894 ; WX 838 ; N uni26A6 ; G 3965
U 9895 ; WX 838 ; N uni26A7 ; G 3966
U 9896 ; WX 838 ; N uni26A8 ; G 3967
U 9897 ; WX 838 ; N uni26A9 ; G 3968
U 9898 ; WX 838 ; N uni26AA ; G 3969
U 9899 ; WX 838 ; N uni26AB ; G 3970
U 9900 ; WX 838 ; N uni26AC ; G 3971
U 9901 ; WX 838 ; N uni26AD ; G 3972
U 9902 ; WX 838 ; N uni26AE ; G 3973
U 9903 ; WX 838 ; N uni26AF ; G 3974
U 9904 ; WX 844 ; N uni26B0 ; G 3975
U 9905 ; WX 838 ; N uni26B1 ; G 3976
U 9906 ; WX 732 ; N uni26B2 ; G 3977
U 9907 ; WX 732 ; N uni26B3 ; G 3978
U 9908 ; WX 732 ; N uni26B4 ; G 3979
U 9909 ; WX 732 ; N uni26B5 ; G 3980
U 9910 ; WX 850 ; N uni26B6 ; G 3981
U 9911 ; WX 732 ; N uni26B7 ; G 3982
U 9912 ; WX 732 ; N uni26B8 ; G 3983
U 9920 ; WX 838 ; N uni26C0 ; G 3984
U 9921 ; WX 838 ; N uni26C1 ; G 3985
U 9922 ; WX 838 ; N uni26C2 ; G 3986
U 9923 ; WX 838 ; N uni26C3 ; G 3987
U 9954 ; WX 732 ; N uni26E2 ; G 3988
U 9985 ; WX 838 ; N uni2701 ; G 3989
U 9986 ; WX 838 ; N uni2702 ; G 3990
U 9987 ; WX 838 ; N uni2703 ; G 3991
U 9988 ; WX 838 ; N uni2704 ; G 3992
U 9990 ; WX 838 ; N uni2706 ; G 3993
U 9991 ; WX 838 ; N uni2707 ; G 3994
U 9992 ; WX 838 ; N uni2708 ; G 3995
U 9993 ; WX 838 ; N uni2709 ; G 3996
U 9996 ; WX 838 ; N uni270C ; G 3997
U 9997 ; WX 838 ; N uni270D ; G 3998
U 9998 ; WX 838 ; N uni270E ; G 3999
U 9999 ; WX 838 ; N uni270F ; G 4000
U 10000 ; WX 838 ; N uni2710 ; G 4001
U 10001 ; WX 838 ; N uni2711 ; G 4002
U 10002 ; WX 838 ; N uni2712 ; G 4003
U 10003 ; WX 838 ; N uni2713 ; G 4004
U 10004 ; WX 838 ; N uni2714 ; G 4005
U 10005 ; WX 838 ; N uni2715 ; G 4006
U 10006 ; WX 838 ; N uni2716 ; G 4007
U 10007 ; WX 838 ; N uni2717 ; G 4008
U 10008 ; WX 838 ; N uni2718 ; G 4009
U 10009 ; WX 838 ; N uni2719 ; G 4010
U 10010 ; WX 838 ; N uni271A ; G 4011
U 10011 ; WX 838 ; N uni271B ; G 4012
U 10012 ; WX 838 ; N uni271C ; G 4013
U 10013 ; WX 838 ; N uni271D ; G 4014
U 10014 ; WX 838 ; N uni271E ; G 4015
U 10015 ; WX 838 ; N uni271F ; G 4016
U 10016 ; WX 838 ; N uni2720 ; G 4017
U 10017 ; WX 838 ; N uni2721 ; G 4018
U 10018 ; WX 838 ; N uni2722 ; G 4019
U 10019 ; WX 838 ; N uni2723 ; G 4020
U 10020 ; WX 838 ; N uni2724 ; G 4021
U 10021 ; WX 838 ; N uni2725 ; G 4022
U 10022 ; WX 838 ; N uni2726 ; G 4023
U 10023 ; WX 838 ; N uni2727 ; G 4024
U 10025 ; WX 838 ; N uni2729 ; G 4025
U 10026 ; WX 838 ; N uni272A ; G 4026
U 10027 ; WX 838 ; N uni272B ; G 4027
U 10028 ; WX 838 ; N uni272C ; G 4028
U 10029 ; WX 838 ; N uni272D ; G 4029
U 10030 ; WX 838 ; N uni272E ; G 4030
U 10031 ; WX 838 ; N uni272F ; G 4031
U 10032 ; WX 838 ; N uni2730 ; G 4032
U 10033 ; WX 838 ; N uni2731 ; G 4033
U 10034 ; WX 838 ; N uni2732 ; G 4034
U 10035 ; WX 838 ; N uni2733 ; G 4035
U 10036 ; WX 838 ; N uni2734 ; G 4036
U 10037 ; WX 838 ; N uni2735 ; G 4037
U 10038 ; WX 838 ; N uni2736 ; G 4038
U 10039 ; WX 838 ; N uni2737 ; G 4039
U 10040 ; WX 838 ; N uni2738 ; G 4040
U 10041 ; WX 838 ; N uni2739 ; G 4041
U 10042 ; WX 838 ; N uni273A ; G 4042
U 10043 ; WX 838 ; N uni273B ; G 4043
U 10044 ; WX 838 ; N uni273C ; G 4044
U 10045 ; WX 838 ; N uni273D ; G 4045
U 10046 ; WX 838 ; N uni273E ; G 4046
U 10047 ; WX 838 ; N uni273F ; G 4047
U 10048 ; WX 838 ; N uni2740 ; G 4048
U 10049 ; WX 838 ; N uni2741 ; G 4049
U 10050 ; WX 838 ; N uni2742 ; G 4050
U 10051 ; WX 838 ; N uni2743 ; G 4051
U 10052 ; WX 838 ; N uni2744 ; G 4052
U 10053 ; WX 838 ; N uni2745 ; G 4053
U 10054 ; WX 838 ; N uni2746 ; G 4054
U 10055 ; WX 838 ; N uni2747 ; G 4055
U 10056 ; WX 838 ; N uni2748 ; G 4056
U 10057 ; WX 838 ; N uni2749 ; G 4057
U 10058 ; WX 838 ; N uni274A ; G 4058
U 10059 ; WX 838 ; N uni274B ; G 4059
U 10061 ; WX 896 ; N uni274D ; G 4060
U 10063 ; WX 896 ; N uni274F ; G 4061
U 10064 ; WX 896 ; N uni2750 ; G 4062
U 10065 ; WX 896 ; N uni2751 ; G 4063
U 10066 ; WX 896 ; N uni2752 ; G 4064
U 10070 ; WX 896 ; N uni2756 ; G 4065
U 10072 ; WX 838 ; N uni2758 ; G 4066
U 10073 ; WX 838 ; N uni2759 ; G 4067
U 10074 ; WX 838 ; N uni275A ; G 4068
U 10075 ; WX 322 ; N uni275B ; G 4069
U 10076 ; WX 322 ; N uni275C ; G 4070
U 10077 ; WX 538 ; N uni275D ; G 4071
U 10078 ; WX 538 ; N uni275E ; G 4072
U 10081 ; WX 838 ; N uni2761 ; G 4073
U 10082 ; WX 838 ; N uni2762 ; G 4074
U 10083 ; WX 838 ; N uni2763 ; G 4075
U 10084 ; WX 838 ; N uni2764 ; G 4076
U 10085 ; WX 838 ; N uni2765 ; G 4077
U 10086 ; WX 838 ; N uni2766 ; G 4078
U 10087 ; WX 838 ; N uni2767 ; G 4079
U 10088 ; WX 838 ; N uni2768 ; G 4080
U 10089 ; WX 838 ; N uni2769 ; G 4081
U 10090 ; WX 838 ; N uni276A ; G 4082
U 10091 ; WX 838 ; N uni276B ; G 4083
U 10092 ; WX 838 ; N uni276C ; G 4084
U 10093 ; WX 838 ; N uni276D ; G 4085
U 10094 ; WX 838 ; N uni276E ; G 4086
U 10095 ; WX 838 ; N uni276F ; G 4087
U 10096 ; WX 838 ; N uni2770 ; G 4088
U 10097 ; WX 838 ; N uni2771 ; G 4089
U 10098 ; WX 838 ; N uni2772 ; G 4090
U 10099 ; WX 838 ; N uni2773 ; G 4091
U 10100 ; WX 838 ; N uni2774 ; G 4092
U 10101 ; WX 838 ; N uni2775 ; G 4093
U 10102 ; WX 896 ; N uni2776 ; G 4094
U 10103 ; WX 896 ; N uni2777 ; G 4095
U 10104 ; WX 896 ; N uni2778 ; G 4096
U 10105 ; WX 896 ; N uni2779 ; G 4097
U 10106 ; WX 896 ; N uni277A ; G 4098
U 10107 ; WX 896 ; N uni277B ; G 4099
U 10108 ; WX 896 ; N uni277C ; G 4100
U 10109 ; WX 896 ; N uni277D ; G 4101
U 10110 ; WX 896 ; N uni277E ; G 4102
U 10111 ; WX 896 ; N uni277F ; G 4103
U 10112 ; WX 838 ; N uni2780 ; G 4104
U 10113 ; WX 838 ; N uni2781 ; G 4105
U 10114 ; WX 838 ; N uni2782 ; G 4106
U 10115 ; WX 838 ; N uni2783 ; G 4107
U 10116 ; WX 838 ; N uni2784 ; G 4108
U 10117 ; WX 838 ; N uni2785 ; G 4109
U 10118 ; WX 838 ; N uni2786 ; G 4110
U 10119 ; WX 838 ; N uni2787 ; G 4111
U 10120 ; WX 838 ; N uni2788 ; G 4112
U 10121 ; WX 838 ; N uni2789 ; G 4113
U 10122 ; WX 838 ; N uni278A ; G 4114
U 10123 ; WX 838 ; N uni278B ; G 4115
U 10124 ; WX 838 ; N uni278C ; G 4116
U 10125 ; WX 838 ; N uni278D ; G 4117
U 10126 ; WX 838 ; N uni278E ; G 4118
U 10127 ; WX 838 ; N uni278F ; G 4119
U 10128 ; WX 838 ; N uni2790 ; G 4120
U 10129 ; WX 838 ; N uni2791 ; G 4121
U 10130 ; WX 838 ; N uni2792 ; G 4122
U 10131 ; WX 838 ; N uni2793 ; G 4123
U 10132 ; WX 838 ; N uni2794 ; G 4124
U 10136 ; WX 838 ; N uni2798 ; G 4125
U 10137 ; WX 838 ; N uni2799 ; G 4126
U 10138 ; WX 838 ; N uni279A ; G 4127
U 10139 ; WX 838 ; N uni279B ; G 4128
U 10140 ; WX 838 ; N uni279C ; G 4129
U 10141 ; WX 838 ; N uni279D ; G 4130
U 10142 ; WX 838 ; N uni279E ; G 4131
U 10143 ; WX 838 ; N uni279F ; G 4132
U 10144 ; WX 838 ; N uni27A0 ; G 4133
U 10145 ; WX 838 ; N uni27A1 ; G 4134
U 10146 ; WX 838 ; N uni27A2 ; G 4135
U 10147 ; WX 838 ; N uni27A3 ; G 4136
U 10148 ; WX 838 ; N uni27A4 ; G 4137
U 10149 ; WX 838 ; N uni27A5 ; G 4138
U 10150 ; WX 838 ; N uni27A6 ; G 4139
U 10151 ; WX 838 ; N uni27A7 ; G 4140
U 10152 ; WX 838 ; N uni27A8 ; G 4141
U 10153 ; WX 838 ; N uni27A9 ; G 4142
U 10154 ; WX 838 ; N uni27AA ; G 4143
U 10155 ; WX 838 ; N uni27AB ; G 4144
U 10156 ; WX 838 ; N uni27AC ; G 4145
U 10157 ; WX 838 ; N uni27AD ; G 4146
U 10158 ; WX 838 ; N uni27AE ; G 4147
U 10159 ; WX 838 ; N uni27AF ; G 4148
U 10161 ; WX 838 ; N uni27B1 ; G 4149
U 10162 ; WX 838 ; N uni27B2 ; G 4150
U 10163 ; WX 838 ; N uni27B3 ; G 4151
U 10164 ; WX 838 ; N uni27B4 ; G 4152
U 10165 ; WX 838 ; N uni27B5 ; G 4153
U 10166 ; WX 838 ; N uni27B6 ; G 4154
U 10167 ; WX 838 ; N uni27B7 ; G 4155
U 10168 ; WX 838 ; N uni27B8 ; G 4156
U 10169 ; WX 838 ; N uni27B9 ; G 4157
U 10170 ; WX 838 ; N uni27BA ; G 4158
U 10171 ; WX 838 ; N uni27BB ; G 4159
U 10172 ; WX 838 ; N uni27BC ; G 4160
U 10173 ; WX 838 ; N uni27BD ; G 4161
U 10174 ; WX 838 ; N uni27BE ; G 4162
U 10181 ; WX 390 ; N uni27C5 ; G 4163
U 10182 ; WX 390 ; N uni27C6 ; G 4164
U 10208 ; WX 494 ; N uni27E0 ; G 4165
U 10214 ; WX 495 ; N uni27E6 ; G 4166
U 10215 ; WX 495 ; N uni27E7 ; G 4167
U 10216 ; WX 390 ; N uni27E8 ; G 4168
U 10217 ; WX 390 ; N uni27E9 ; G 4169
U 10218 ; WX 556 ; N uni27EA ; G 4170
U 10219 ; WX 556 ; N uni27EB ; G 4171
U 10224 ; WX 838 ; N uni27F0 ; G 4172
U 10225 ; WX 838 ; N uni27F1 ; G 4173
U 10226 ; WX 838 ; N uni27F2 ; G 4174
U 10227 ; WX 838 ; N uni27F3 ; G 4175
U 10228 ; WX 1157 ; N uni27F4 ; G 4176
U 10229 ; WX 1434 ; N uni27F5 ; G 4177
U 10230 ; WX 1434 ; N uni27F6 ; G 4178
U 10231 ; WX 1434 ; N uni27F7 ; G 4179
U 10232 ; WX 1434 ; N uni27F8 ; G 4180
U 10233 ; WX 1434 ; N uni27F9 ; G 4181
U 10234 ; WX 1434 ; N uni27FA ; G 4182
U 10235 ; WX 1434 ; N uni27FB ; G 4183
U 10236 ; WX 1434 ; N uni27FC ; G 4184
U 10237 ; WX 1434 ; N uni27FD ; G 4185
U 10238 ; WX 1434 ; N uni27FE ; G 4186
U 10239 ; WX 1434 ; N uni27FF ; G 4187
U 10240 ; WX 732 ; N uni2800 ; G 4188
U 10241 ; WX 732 ; N uni2801 ; G 4189
U 10242 ; WX 732 ; N uni2802 ; G 4190
U 10243 ; WX 732 ; N uni2803 ; G 4191
U 10244 ; WX 732 ; N uni2804 ; G 4192
U 10245 ; WX 732 ; N uni2805 ; G 4193
U 10246 ; WX 732 ; N uni2806 ; G 4194
U 10247 ; WX 732 ; N uni2807 ; G 4195
U 10248 ; WX 732 ; N uni2808 ; G 4196
U 10249 ; WX 732 ; N uni2809 ; G 4197
U 10250 ; WX 732 ; N uni280A ; G 4198
U 10251 ; WX 732 ; N uni280B ; G 4199
U 10252 ; WX 732 ; N uni280C ; G 4200
U 10253 ; WX 732 ; N uni280D ; G 4201
U 10254 ; WX 732 ; N uni280E ; G 4202
U 10255 ; WX 732 ; N uni280F ; G 4203
U 10256 ; WX 732 ; N uni2810 ; G 4204
U 10257 ; WX 732 ; N uni2811 ; G 4205
U 10258 ; WX 732 ; N uni2812 ; G 4206
U 10259 ; WX 732 ; N uni2813 ; G 4207
U 10260 ; WX 732 ; N uni2814 ; G 4208
U 10261 ; WX 732 ; N uni2815 ; G 4209
U 10262 ; WX 732 ; N uni2816 ; G 4210
U 10263 ; WX 732 ; N uni2817 ; G 4211
U 10264 ; WX 732 ; N uni2818 ; G 4212
U 10265 ; WX 732 ; N uni2819 ; G 4213
U 10266 ; WX 732 ; N uni281A ; G 4214
U 10267 ; WX 732 ; N uni281B ; G 4215
U 10268 ; WX 732 ; N uni281C ; G 4216
U 10269 ; WX 732 ; N uni281D ; G 4217
U 10270 ; WX 732 ; N uni281E ; G 4218
U 10271 ; WX 732 ; N uni281F ; G 4219
U 10272 ; WX 732 ; N uni2820 ; G 4220
U 10273 ; WX 732 ; N uni2821 ; G 4221
U 10274 ; WX 732 ; N uni2822 ; G 4222
U 10275 ; WX 732 ; N uni2823 ; G 4223
U 10276 ; WX 732 ; N uni2824 ; G 4224
U 10277 ; WX 732 ; N uni2825 ; G 4225
U 10278 ; WX 732 ; N uni2826 ; G 4226
U 10279 ; WX 732 ; N uni2827 ; G 4227
U 10280 ; WX 732 ; N uni2828 ; G 4228
U 10281 ; WX 732 ; N uni2829 ; G 4229
U 10282 ; WX 732 ; N uni282A ; G 4230
U 10283 ; WX 732 ; N uni282B ; G 4231
U 10284 ; WX 732 ; N uni282C ; G 4232
U 10285 ; WX 732 ; N uni282D ; G 4233
U 10286 ; WX 732 ; N uni282E ; G 4234
U 10287 ; WX 732 ; N uni282F ; G 4235
U 10288 ; WX 732 ; N uni2830 ; G 4236
U 10289 ; WX 732 ; N uni2831 ; G 4237
U 10290 ; WX 732 ; N uni2832 ; G 4238
U 10291 ; WX 732 ; N uni2833 ; G 4239
U 10292 ; WX 732 ; N uni2834 ; G 4240
U 10293 ; WX 732 ; N uni2835 ; G 4241
U 10294 ; WX 732 ; N uni2836 ; G 4242
U 10295 ; WX 732 ; N uni2837 ; G 4243
U 10296 ; WX 732 ; N uni2838 ; G 4244
U 10297 ; WX 732 ; N uni2839 ; G 4245
U 10298 ; WX 732 ; N uni283A ; G 4246
U 10299 ; WX 732 ; N uni283B ; G 4247
U 10300 ; WX 732 ; N uni283C ; G 4248
U 10301 ; WX 732 ; N uni283D ; G 4249
U 10302 ; WX 732 ; N uni283E ; G 4250
U 10303 ; WX 732 ; N uni283F ; G 4251
U 10304 ; WX 732 ; N uni2840 ; G 4252
U 10305 ; WX 732 ; N uni2841 ; G 4253
U 10306 ; WX 732 ; N uni2842 ; G 4254
U 10307 ; WX 732 ; N uni2843 ; G 4255
U 10308 ; WX 732 ; N uni2844 ; G 4256
U 10309 ; WX 732 ; N uni2845 ; G 4257
U 10310 ; WX 732 ; N uni2846 ; G 4258
U 10311 ; WX 732 ; N uni2847 ; G 4259
U 10312 ; WX 732 ; N uni2848 ; G 4260
U 10313 ; WX 732 ; N uni2849 ; G 4261
U 10314 ; WX 732 ; N uni284A ; G 4262
U 10315 ; WX 732 ; N uni284B ; G 4263
U 10316 ; WX 732 ; N uni284C ; G 4264
U 10317 ; WX 732 ; N uni284D ; G 4265
U 10318 ; WX 732 ; N uni284E ; G 4266
U 10319 ; WX 732 ; N uni284F ; G 4267
U 10320 ; WX 732 ; N uni2850 ; G 4268
U 10321 ; WX 732 ; N uni2851 ; G 4269
U 10322 ; WX 732 ; N uni2852 ; G 4270
U 10323 ; WX 732 ; N uni2853 ; G 4271
U 10324 ; WX 732 ; N uni2854 ; G 4272
U 10325 ; WX 732 ; N uni2855 ; G 4273
U 10326 ; WX 732 ; N uni2856 ; G 4274
U 10327 ; WX 732 ; N uni2857 ; G 4275
U 10328 ; WX 732 ; N uni2858 ; G 4276
U 10329 ; WX 732 ; N uni2859 ; G 4277
U 10330 ; WX 732 ; N uni285A ; G 4278
U 10331 ; WX 732 ; N uni285B ; G 4279
U 10332 ; WX 732 ; N uni285C ; G 4280
U 10333 ; WX 732 ; N uni285D ; G 4281
U 10334 ; WX 732 ; N uni285E ; G 4282
U 10335 ; WX 732 ; N uni285F ; G 4283
U 10336 ; WX 732 ; N uni2860 ; G 4284
U 10337 ; WX 732 ; N uni2861 ; G 4285
U 10338 ; WX 732 ; N uni2862 ; G 4286
U 10339 ; WX 732 ; N uni2863 ; G 4287
U 10340 ; WX 732 ; N uni2864 ; G 4288
U 10341 ; WX 732 ; N uni2865 ; G 4289
U 10342 ; WX 732 ; N uni2866 ; G 4290
U 10343 ; WX 732 ; N uni2867 ; G 4291
U 10344 ; WX 732 ; N uni2868 ; G 4292
U 10345 ; WX 732 ; N uni2869 ; G 4293
U 10346 ; WX 732 ; N uni286A ; G 4294
U 10347 ; WX 732 ; N uni286B ; G 4295
U 10348 ; WX 732 ; N uni286C ; G 4296
U 10349 ; WX 732 ; N uni286D ; G 4297
U 10350 ; WX 732 ; N uni286E ; G 4298
U 10351 ; WX 732 ; N uni286F ; G 4299
U 10352 ; WX 732 ; N uni2870 ; G 4300
U 10353 ; WX 732 ; N uni2871 ; G 4301
U 10354 ; WX 732 ; N uni2872 ; G 4302
U 10355 ; WX 732 ; N uni2873 ; G 4303
U 10356 ; WX 732 ; N uni2874 ; G 4304
U 10357 ; WX 732 ; N uni2875 ; G 4305
U 10358 ; WX 732 ; N uni2876 ; G 4306
U 10359 ; WX 732 ; N uni2877 ; G 4307
U 10360 ; WX 732 ; N uni2878 ; G 4308
U 10361 ; WX 732 ; N uni2879 ; G 4309
U 10362 ; WX 732 ; N uni287A ; G 4310
U 10363 ; WX 732 ; N uni287B ; G 4311
U 10364 ; WX 732 ; N uni287C ; G 4312
U 10365 ; WX 732 ; N uni287D ; G 4313
U 10366 ; WX 732 ; N uni287E ; G 4314
U 10367 ; WX 732 ; N uni287F ; G 4315
U 10368 ; WX 732 ; N uni2880 ; G 4316
U 10369 ; WX 732 ; N uni2881 ; G 4317
U 10370 ; WX 732 ; N uni2882 ; G 4318
U 10371 ; WX 732 ; N uni2883 ; G 4319
U 10372 ; WX 732 ; N uni2884 ; G 4320
U 10373 ; WX 732 ; N uni2885 ; G 4321
U 10374 ; WX 732 ; N uni2886 ; G 4322
U 10375 ; WX 732 ; N uni2887 ; G 4323
U 10376 ; WX 732 ; N uni2888 ; G 4324
U 10377 ; WX 732 ; N uni2889 ; G 4325
U 10378 ; WX 732 ; N uni288A ; G 4326
U 10379 ; WX 732 ; N uni288B ; G 4327
U 10380 ; WX 732 ; N uni288C ; G 4328
U 10381 ; WX 732 ; N uni288D ; G 4329
U 10382 ; WX 732 ; N uni288E ; G 4330
U 10383 ; WX 732 ; N uni288F ; G 4331
U 10384 ; WX 732 ; N uni2890 ; G 4332
U 10385 ; WX 732 ; N uni2891 ; G 4333
U 10386 ; WX 732 ; N uni2892 ; G 4334
U 10387 ; WX 732 ; N uni2893 ; G 4335
U 10388 ; WX 732 ; N uni2894 ; G 4336
U 10389 ; WX 732 ; N uni2895 ; G 4337
U 10390 ; WX 732 ; N uni2896 ; G 4338
U 10391 ; WX 732 ; N uni2897 ; G 4339
U 10392 ; WX 732 ; N uni2898 ; G 4340
U 10393 ; WX 732 ; N uni2899 ; G 4341
U 10394 ; WX 732 ; N uni289A ; G 4342
U 10395 ; WX 732 ; N uni289B ; G 4343
U 10396 ; WX 732 ; N uni289C ; G 4344
U 10397 ; WX 732 ; N uni289D ; G 4345
U 10398 ; WX 732 ; N uni289E ; G 4346
U 10399 ; WX 732 ; N uni289F ; G 4347
U 10400 ; WX 732 ; N uni28A0 ; G 4348
U 10401 ; WX 732 ; N uni28A1 ; G 4349
U 10402 ; WX 732 ; N uni28A2 ; G 4350
U 10403 ; WX 732 ; N uni28A3 ; G 4351
U 10404 ; WX 732 ; N uni28A4 ; G 4352
U 10405 ; WX 732 ; N uni28A5 ; G 4353
U 10406 ; WX 732 ; N uni28A6 ; G 4354
U 10407 ; WX 732 ; N uni28A7 ; G 4355
U 10408 ; WX 732 ; N uni28A8 ; G 4356
U 10409 ; WX 732 ; N uni28A9 ; G 4357
U 10410 ; WX 732 ; N uni28AA ; G 4358
U 10411 ; WX 732 ; N uni28AB ; G 4359
U 10412 ; WX 732 ; N uni28AC ; G 4360
U 10413 ; WX 732 ; N uni28AD ; G 4361
U 10414 ; WX 732 ; N uni28AE ; G 4362
U 10415 ; WX 732 ; N uni28AF ; G 4363
U 10416 ; WX 732 ; N uni28B0 ; G 4364
U 10417 ; WX 732 ; N uni28B1 ; G 4365
U 10418 ; WX 732 ; N uni28B2 ; G 4366
U 10419 ; WX 732 ; N uni28B3 ; G 4367
U 10420 ; WX 732 ; N uni28B4 ; G 4368
U 10421 ; WX 732 ; N uni28B5 ; G 4369
U 10422 ; WX 732 ; N uni28B6 ; G 4370
U 10423 ; WX 732 ; N uni28B7 ; G 4371
U 10424 ; WX 732 ; N uni28B8 ; G 4372
U 10425 ; WX 732 ; N uni28B9 ; G 4373
U 10426 ; WX 732 ; N uni28BA ; G 4374
U 10427 ; WX 732 ; N uni28BB ; G 4375
U 10428 ; WX 732 ; N uni28BC ; G 4376
U 10429 ; WX 732 ; N uni28BD ; G 4377
U 10430 ; WX 732 ; N uni28BE ; G 4378
U 10431 ; WX 732 ; N uni28BF ; G 4379
U 10432 ; WX 732 ; N uni28C0 ; G 4380
U 10433 ; WX 732 ; N uni28C1 ; G 4381
U 10434 ; WX 732 ; N uni28C2 ; G 4382
U 10435 ; WX 732 ; N uni28C3 ; G 4383
U 10436 ; WX 732 ; N uni28C4 ; G 4384
U 10437 ; WX 732 ; N uni28C5 ; G 4385
U 10438 ; WX 732 ; N uni28C6 ; G 4386
U 10439 ; WX 732 ; N uni28C7 ; G 4387
U 10440 ; WX 732 ; N uni28C8 ; G 4388
U 10441 ; WX 732 ; N uni28C9 ; G 4389
U 10442 ; WX 732 ; N uni28CA ; G 4390
U 10443 ; WX 732 ; N uni28CB ; G 4391
U 10444 ; WX 732 ; N uni28CC ; G 4392
U 10445 ; WX 732 ; N uni28CD ; G 4393
U 10446 ; WX 732 ; N uni28CE ; G 4394
U 10447 ; WX 732 ; N uni28CF ; G 4395
U 10448 ; WX 732 ; N uni28D0 ; G 4396
U 10449 ; WX 732 ; N uni28D1 ; G 4397
U 10450 ; WX 732 ; N uni28D2 ; G 4398
U 10451 ; WX 732 ; N uni28D3 ; G 4399
U 10452 ; WX 732 ; N uni28D4 ; G 4400
U 10453 ; WX 732 ; N uni28D5 ; G 4401
U 10454 ; WX 732 ; N uni28D6 ; G 4402
U 10455 ; WX 732 ; N uni28D7 ; G 4403
U 10456 ; WX 732 ; N uni28D8 ; G 4404
U 10457 ; WX 732 ; N uni28D9 ; G 4405
U 10458 ; WX 732 ; N uni28DA ; G 4406
U 10459 ; WX 732 ; N uni28DB ; G 4407
U 10460 ; WX 732 ; N uni28DC ; G 4408
U 10461 ; WX 732 ; N uni28DD ; G 4409
U 10462 ; WX 732 ; N uni28DE ; G 4410
U 10463 ; WX 732 ; N uni28DF ; G 4411
U 10464 ; WX 732 ; N uni28E0 ; G 4412
U 10465 ; WX 732 ; N uni28E1 ; G 4413
U 10466 ; WX 732 ; N uni28E2 ; G 4414
U 10467 ; WX 732 ; N uni28E3 ; G 4415
U 10468 ; WX 732 ; N uni28E4 ; G 4416
U 10469 ; WX 732 ; N uni28E5 ; G 4417
U 10470 ; WX 732 ; N uni28E6 ; G 4418
U 10471 ; WX 732 ; N uni28E7 ; G 4419
U 10472 ; WX 732 ; N uni28E8 ; G 4420
U 10473 ; WX 732 ; N uni28E9 ; G 4421
U 10474 ; WX 732 ; N uni28EA ; G 4422
U 10475 ; WX 732 ; N uni28EB ; G 4423
U 10476 ; WX 732 ; N uni28EC ; G 4424
U 10477 ; WX 732 ; N uni28ED ; G 4425
U 10478 ; WX 732 ; N uni28EE ; G 4426
U 10479 ; WX 732 ; N uni28EF ; G 4427
U 10480 ; WX 732 ; N uni28F0 ; G 4428
U 10481 ; WX 732 ; N uni28F1 ; G 4429
U 10482 ; WX 732 ; N uni28F2 ; G 4430
U 10483 ; WX 732 ; N uni28F3 ; G 4431
U 10484 ; WX 732 ; N uni28F4 ; G 4432
U 10485 ; WX 732 ; N uni28F5 ; G 4433
U 10486 ; WX 732 ; N uni28F6 ; G 4434
U 10487 ; WX 732 ; N uni28F7 ; G 4435
U 10488 ; WX 732 ; N uni28F8 ; G 4436
U 10489 ; WX 732 ; N uni28F9 ; G 4437
U 10490 ; WX 732 ; N uni28FA ; G 4438
U 10491 ; WX 732 ; N uni28FB ; G 4439
U 10492 ; WX 732 ; N uni28FC ; G 4440
U 10493 ; WX 732 ; N uni28FD ; G 4441
U 10494 ; WX 732 ; N uni28FE ; G 4442
U 10495 ; WX 732 ; N uni28FF ; G 4443
U 10502 ; WX 838 ; N uni2906 ; G 4444
U 10503 ; WX 838 ; N uni2907 ; G 4445
U 10506 ; WX 838 ; N uni290A ; G 4446
U 10507 ; WX 838 ; N uni290B ; G 4447
U 10560 ; WX 683 ; N uni2940 ; G 4448
U 10561 ; WX 683 ; N uni2941 ; G 4449
U 10627 ; WX 734 ; N uni2983 ; G 4450
U 10628 ; WX 734 ; N uni2984 ; G 4451
U 10702 ; WX 838 ; N uni29CE ; G 4452
U 10703 ; WX 1000 ; N uni29CF ; G 4453
U 10704 ; WX 1000 ; N uni29D0 ; G 4454
U 10705 ; WX 1000 ; N uni29D1 ; G 4455
U 10706 ; WX 1000 ; N uni29D2 ; G 4456
U 10707 ; WX 1000 ; N uni29D3 ; G 4457
U 10708 ; WX 1000 ; N uni29D4 ; G 4458
U 10709 ; WX 1000 ; N uni29D5 ; G 4459
U 10731 ; WX 494 ; N uni29EB ; G 4460
U 10746 ; WX 838 ; N uni29FA ; G 4461
U 10747 ; WX 838 ; N uni29FB ; G 4462
U 10752 ; WX 1000 ; N uni2A00 ; G 4463
U 10753 ; WX 1000 ; N uni2A01 ; G 4464
U 10754 ; WX 1000 ; N uni2A02 ; G 4465
U 10764 ; WX 1325 ; N uni2A0C ; G 4466
U 10765 ; WX 521 ; N uni2A0D ; G 4467
U 10766 ; WX 521 ; N uni2A0E ; G 4468
U 10767 ; WX 521 ; N uni2A0F ; G 4469
U 10768 ; WX 521 ; N uni2A10 ; G 4470
U 10769 ; WX 521 ; N uni2A11 ; G 4471
U 10770 ; WX 521 ; N uni2A12 ; G 4472
U 10771 ; WX 521 ; N uni2A13 ; G 4473
U 10772 ; WX 521 ; N uni2A14 ; G 4474
U 10773 ; WX 521 ; N uni2A15 ; G 4475
U 10774 ; WX 521 ; N uni2A16 ; G 4476
U 10775 ; WX 521 ; N uni2A17 ; G 4477
U 10776 ; WX 521 ; N uni2A18 ; G 4478
U 10777 ; WX 521 ; N uni2A19 ; G 4479
U 10778 ; WX 521 ; N uni2A1A ; G 4480
U 10779 ; WX 521 ; N uni2A1B ; G 4481
U 10780 ; WX 521 ; N uni2A1C ; G 4482
U 10799 ; WX 838 ; N uni2A2F ; G 4483
U 10858 ; WX 838 ; N uni2A6A ; G 4484
U 10859 ; WX 838 ; N uni2A6B ; G 4485
U 10877 ; WX 838 ; N uni2A7D ; G 4486
U 10878 ; WX 838 ; N uni2A7E ; G 4487
U 10879 ; WX 838 ; N uni2A7F ; G 4488
U 10880 ; WX 838 ; N uni2A80 ; G 4489
U 10881 ; WX 838 ; N uni2A81 ; G 4490
U 10882 ; WX 838 ; N uni2A82 ; G 4491
U 10883 ; WX 838 ; N uni2A83 ; G 4492
U 10884 ; WX 838 ; N uni2A84 ; G 4493
U 10885 ; WX 838 ; N uni2A85 ; G 4494
U 10886 ; WX 838 ; N uni2A86 ; G 4495
U 10887 ; WX 838 ; N uni2A87 ; G 4496
U 10888 ; WX 838 ; N uni2A88 ; G 4497
U 10889 ; WX 838 ; N uni2A89 ; G 4498
U 10890 ; WX 838 ; N uni2A8A ; G 4499
U 10891 ; WX 838 ; N uni2A8B ; G 4500
U 10892 ; WX 838 ; N uni2A8C ; G 4501
U 10893 ; WX 838 ; N uni2A8D ; G 4502
U 10894 ; WX 838 ; N uni2A8E ; G 4503
U 10895 ; WX 838 ; N uni2A8F ; G 4504
U 10896 ; WX 838 ; N uni2A90 ; G 4505
U 10897 ; WX 838 ; N uni2A91 ; G 4506
U 10898 ; WX 838 ; N uni2A92 ; G 4507
U 10899 ; WX 838 ; N uni2A93 ; G 4508
U 10900 ; WX 838 ; N uni2A94 ; G 4509
U 10901 ; WX 838 ; N uni2A95 ; G 4510
U 10902 ; WX 838 ; N uni2A96 ; G 4511
U 10903 ; WX 838 ; N uni2A97 ; G 4512
U 10904 ; WX 838 ; N uni2A98 ; G 4513
U 10905 ; WX 838 ; N uni2A99 ; G 4514
U 10906 ; WX 838 ; N uni2A9A ; G 4515
U 10907 ; WX 838 ; N uni2A9B ; G 4516
U 10908 ; WX 838 ; N uni2A9C ; G 4517
U 10909 ; WX 838 ; N uni2A9D ; G 4518
U 10910 ; WX 838 ; N uni2A9E ; G 4519
U 10911 ; WX 838 ; N uni2A9F ; G 4520
U 10912 ; WX 838 ; N uni2AA0 ; G 4521
U 10926 ; WX 838 ; N uni2AAE ; G 4522
U 10927 ; WX 838 ; N uni2AAF ; G 4523
U 10928 ; WX 838 ; N uni2AB0 ; G 4524
U 10929 ; WX 838 ; N uni2AB1 ; G 4525
U 10930 ; WX 838 ; N uni2AB2 ; G 4526
U 10931 ; WX 838 ; N uni2AB3 ; G 4527
U 10932 ; WX 838 ; N uni2AB4 ; G 4528
U 10933 ; WX 838 ; N uni2AB5 ; G 4529
U 10934 ; WX 838 ; N uni2AB6 ; G 4530
U 10935 ; WX 838 ; N uni2AB7 ; G 4531
U 10936 ; WX 838 ; N uni2AB8 ; G 4532
U 10937 ; WX 838 ; N uni2AB9 ; G 4533
U 10938 ; WX 838 ; N uni2ABA ; G 4534
U 11001 ; WX 838 ; N uni2AF9 ; G 4535
U 11002 ; WX 838 ; N uni2AFA ; G 4536
U 11008 ; WX 838 ; N uni2B00 ; G 4537
U 11009 ; WX 838 ; N uni2B01 ; G 4538
U 11010 ; WX 838 ; N uni2B02 ; G 4539
U 11011 ; WX 838 ; N uni2B03 ; G 4540
U 11012 ; WX 838 ; N uni2B04 ; G 4541
U 11013 ; WX 838 ; N uni2B05 ; G 4542
U 11014 ; WX 838 ; N uni2B06 ; G 4543
U 11015 ; WX 838 ; N uni2B07 ; G 4544
U 11016 ; WX 838 ; N uni2B08 ; G 4545
U 11017 ; WX 838 ; N uni2B09 ; G 4546
U 11018 ; WX 838 ; N uni2B0A ; G 4547
U 11019 ; WX 838 ; N uni2B0B ; G 4548
U 11020 ; WX 838 ; N uni2B0C ; G 4549
U 11021 ; WX 838 ; N uni2B0D ; G 4550
U 11022 ; WX 836 ; N uni2B0E ; G 4551
U 11023 ; WX 836 ; N uni2B0F ; G 4552
U 11024 ; WX 836 ; N uni2B10 ; G 4553
U 11025 ; WX 836 ; N uni2B11 ; G 4554
U 11026 ; WX 945 ; N uni2B12 ; G 4555
U 11027 ; WX 945 ; N uni2B13 ; G 4556
U 11028 ; WX 945 ; N uni2B14 ; G 4557
U 11029 ; WX 945 ; N uni2B15 ; G 4558
U 11030 ; WX 769 ; N uni2B16 ; G 4559
U 11031 ; WX 769 ; N uni2B17 ; G 4560
U 11032 ; WX 769 ; N uni2B18 ; G 4561
U 11033 ; WX 769 ; N uni2B19 ; G 4562
U 11034 ; WX 945 ; N uni2B1A ; G 4563
U 11039 ; WX 869 ; N uni2B1F ; G 4564
U 11040 ; WX 869 ; N uni2B20 ; G 4565
U 11041 ; WX 873 ; N uni2B21 ; G 4566
U 11042 ; WX 873 ; N uni2B22 ; G 4567
U 11043 ; WX 873 ; N uni2B23 ; G 4568
U 11044 ; WX 1119 ; N uni2B24 ; G 4569
U 11091 ; WX 869 ; N uni2B53 ; G 4570
U 11092 ; WX 869 ; N uni2B54 ; G 4571
U 11360 ; WX 557 ; N uni2C60 ; G 4572
U 11361 ; WX 278 ; N uni2C61 ; G 4573
U 11362 ; WX 557 ; N uni2C62 ; G 4574
U 11363 ; WX 603 ; N uni2C63 ; G 4575
U 11364 ; WX 695 ; N uni2C64 ; G 4576
U 11365 ; WX 613 ; N uni2C65 ; G 4577
U 11366 ; WX 392 ; N uni2C66 ; G 4578
U 11367 ; WX 752 ; N uni2C67 ; G 4579
U 11368 ; WX 634 ; N uni2C68 ; G 4580
U 11369 ; WX 656 ; N uni2C69 ; G 4581
U 11370 ; WX 579 ; N uni2C6A ; G 4582
U 11371 ; WX 685 ; N uni2C6B ; G 4583
U 11372 ; WX 525 ; N uni2C6C ; G 4584
U 11373 ; WX 781 ; N uni2C6D ; G 4585
U 11374 ; WX 863 ; N uni2C6E ; G 4586
U 11375 ; WX 684 ; N uni2C6F ; G 4587
U 11376 ; WX 781 ; N uni2C70 ; G 4588
U 11377 ; WX 734 ; N uni2C71 ; G 4589
U 11378 ; WX 1128 ; N uni2C72 ; G 4590
U 11379 ; WX 961 ; N uni2C73 ; G 4591
U 11380 ; WX 592 ; N uni2C74 ; G 4592
U 11381 ; WX 654 ; N uni2C75 ; G 4593
U 11382 ; WX 568 ; N uni2C76 ; G 4594
U 11383 ; WX 660 ; N uni2C77 ; G 4595
U 11385 ; WX 414 ; N uni2C79 ; G 4596
U 11386 ; WX 612 ; N uni2C7A ; G 4597
U 11387 ; WX 491 ; N uni2C7B ; G 4598
U 11388 ; WX 175 ; N uni2C7C ; G 4599
U 11389 ; WX 431 ; N uni2C7D ; G 4600
U 11390 ; WX 635 ; N uni2C7E ; G 4601
U 11391 ; WX 685 ; N uni2C7F ; G 4602
U 11520 ; WX 591 ; N uni2D00 ; G 4603
U 11521 ; WX 595 ; N uni2D01 ; G 4604
U 11522 ; WX 564 ; N uni2D02 ; G 4605
U 11523 ; WX 602 ; N uni2D03 ; G 4606
U 11524 ; WX 587 ; N uni2D04 ; G 4607
U 11525 ; WX 911 ; N uni2D05 ; G 4608
U 11526 ; WX 626 ; N uni2D06 ; G 4609
U 11527 ; WX 952 ; N uni2D07 ; G 4610
U 11528 ; WX 595 ; N uni2D08 ; G 4611
U 11529 ; WX 607 ; N uni2D09 ; G 4612
U 11530 ; WX 954 ; N uni2D0A ; G 4613
U 11531 ; WX 620 ; N uni2D0B ; G 4614
U 11532 ; WX 595 ; N uni2D0C ; G 4615
U 11533 ; WX 926 ; N uni2D0D ; G 4616
U 11534 ; WX 595 ; N uni2D0E ; G 4617
U 11535 ; WX 806 ; N uni2D0F ; G 4618
U 11536 ; WX 931 ; N uni2D10 ; G 4619
U 11537 ; WX 584 ; N uni2D11 ; G 4620
U 11538 ; WX 592 ; N uni2D12 ; G 4621
U 11539 ; WX 923 ; N uni2D13 ; G 4622
U 11540 ; WX 953 ; N uni2D14 ; G 4623
U 11541 ; WX 828 ; N uni2D15 ; G 4624
U 11542 ; WX 596 ; N uni2D16 ; G 4625
U 11543 ; WX 595 ; N uni2D17 ; G 4626
U 11544 ; WX 590 ; N uni2D18 ; G 4627
U 11545 ; WX 592 ; N uni2D19 ; G 4628
U 11546 ; WX 592 ; N uni2D1A ; G 4629
U 11547 ; WX 621 ; N uni2D1B ; G 4630
U 11548 ; WX 920 ; N uni2D1C ; G 4631
U 11549 ; WX 589 ; N uni2D1D ; G 4632
U 11550 ; WX 586 ; N uni2D1E ; G 4633
U 11551 ; WX 581 ; N uni2D1F ; G 4634
U 11552 ; WX 914 ; N uni2D20 ; G 4635
U 11553 ; WX 596 ; N uni2D21 ; G 4636
U 11554 ; WX 595 ; N uni2D22 ; G 4637
U 11555 ; WX 592 ; N uni2D23 ; G 4638
U 11556 ; WX 642 ; N uni2D24 ; G 4639
U 11557 ; WX 901 ; N uni2D25 ; G 4640
U 11568 ; WX 646 ; N uni2D30 ; G 4641
U 11569 ; WX 888 ; N uni2D31 ; G 4642
U 11570 ; WX 888 ; N uni2D32 ; G 4643
U 11571 ; WX 682 ; N uni2D33 ; G 4644
U 11572 ; WX 684 ; N uni2D34 ; G 4645
U 11573 ; WX 635 ; N uni2D35 ; G 4646
U 11574 ; WX 562 ; N uni2D36 ; G 4647
U 11575 ; WX 684 ; N uni2D37 ; G 4648
U 11576 ; WX 684 ; N uni2D38 ; G 4649
U 11577 ; WX 632 ; N uni2D39 ; G 4650
U 11578 ; WX 632 ; N uni2D3A ; G 4651
U 11579 ; WX 683 ; N uni2D3B ; G 4652
U 11580 ; WX 875 ; N uni2D3C ; G 4653
U 11581 ; WX 685 ; N uni2D3D ; G 4654
U 11582 ; WX 491 ; N uni2D3E ; G 4655
U 11583 ; WX 685 ; N uni2D3F ; G 4656
U 11584 ; WX 888 ; N uni2D40 ; G 4657
U 11585 ; WX 888 ; N uni2D41 ; G 4658
U 11586 ; WX 300 ; N uni2D42 ; G 4659
U 11587 ; WX 627 ; N uni2D43 ; G 4660
U 11588 ; WX 752 ; N uni2D44 ; G 4661
U 11589 ; WX 656 ; N uni2D45 ; G 4662
U 11590 ; WX 527 ; N uni2D46 ; G 4663
U 11591 ; WX 685 ; N uni2D47 ; G 4664
U 11592 ; WX 645 ; N uni2D48 ; G 4665
U 11593 ; WX 632 ; N uni2D49 ; G 4666
U 11594 ; WX 502 ; N uni2D4A ; G 4667
U 11595 ; WX 953 ; N uni2D4B ; G 4668
U 11596 ; WX 778 ; N uni2D4C ; G 4669
U 11597 ; WX 748 ; N uni2D4D ; G 4670
U 11598 ; WX 621 ; N uni2D4E ; G 4671
U 11599 ; WX 295 ; N uni2D4F ; G 4672
U 11600 ; WX 778 ; N uni2D50 ; G 4673
U 11601 ; WX 295 ; N uni2D51 ; G 4674
U 11602 ; WX 752 ; N uni2D52 ; G 4675
U 11603 ; WX 633 ; N uni2D53 ; G 4676
U 11604 ; WX 888 ; N uni2D54 ; G 4677
U 11605 ; WX 888 ; N uni2D55 ; G 4678
U 11606 ; WX 752 ; N uni2D56 ; G 4679
U 11607 ; WX 320 ; N uni2D57 ; G 4680
U 11608 ; WX 749 ; N uni2D58 ; G 4681
U 11609 ; WX 888 ; N uni2D59 ; G 4682
U 11610 ; WX 888 ; N uni2D5A ; G 4683
U 11611 ; WX 698 ; N uni2D5B ; G 4684
U 11612 ; WX 768 ; N uni2D5C ; G 4685
U 11613 ; WX 685 ; N uni2D5D ; G 4686
U 11614 ; WX 698 ; N uni2D5E ; G 4687
U 11615 ; WX 622 ; N uni2D5F ; G 4688
U 11616 ; WX 684 ; N uni2D60 ; G 4689
U 11617 ; WX 752 ; N uni2D61 ; G 4690
U 11618 ; WX 632 ; N uni2D62 ; G 4691
U 11619 ; WX 788 ; N uni2D63 ; G 4692
U 11620 ; WX 567 ; N uni2D64 ; G 4693
U 11621 ; WX 788 ; N uni2D65 ; G 4694
U 11631 ; WX 515 ; N uni2D6F ; G 4695
U 11800 ; WX 531 ; N uni2E18 ; G 4696
U 11807 ; WX 838 ; N uni2E1F ; G 4697
U 11810 ; WX 390 ; N uni2E22 ; G 4698
U 11811 ; WX 390 ; N uni2E23 ; G 4699
U 11812 ; WX 390 ; N uni2E24 ; G 4700
U 11813 ; WX 390 ; N uni2E25 ; G 4701
U 11822 ; WX 531 ; N uni2E2E ; G 4702
U 19904 ; WX 896 ; N uni4DC0 ; G 4703
U 19905 ; WX 896 ; N uni4DC1 ; G 4704
U 19906 ; WX 896 ; N uni4DC2 ; G 4705
U 19907 ; WX 896 ; N uni4DC3 ; G 4706
U 19908 ; WX 896 ; N uni4DC4 ; G 4707
U 19909 ; WX 896 ; N uni4DC5 ; G 4708
U 19910 ; WX 896 ; N uni4DC6 ; G 4709
U 19911 ; WX 896 ; N uni4DC7 ; G 4710
U 19912 ; WX 896 ; N uni4DC8 ; G 4711
U 19913 ; WX 896 ; N uni4DC9 ; G 4712
U 19914 ; WX 896 ; N uni4DCA ; G 4713
U 19915 ; WX 896 ; N uni4DCB ; G 4714
U 19916 ; WX 896 ; N uni4DCC ; G 4715
U 19917 ; WX 896 ; N uni4DCD ; G 4716
U 19918 ; WX 896 ; N uni4DCE ; G 4717
U 19919 ; WX 896 ; N uni4DCF ; G 4718
U 19920 ; WX 896 ; N uni4DD0 ; G 4719
U 19921 ; WX 896 ; N uni4DD1 ; G 4720
U 19922 ; WX 896 ; N uni4DD2 ; G 4721
U 19923 ; WX 896 ; N uni4DD3 ; G 4722
U 19924 ; WX 896 ; N uni4DD4 ; G 4723
U 19925 ; WX 896 ; N uni4DD5 ; G 4724
U 19926 ; WX 896 ; N uni4DD6 ; G 4725
U 19927 ; WX 896 ; N uni4DD7 ; G 4726
U 19928 ; WX 896 ; N uni4DD8 ; G 4727
U 19929 ; WX 896 ; N uni4DD9 ; G 4728
U 19930 ; WX 896 ; N uni4DDA ; G 4729
U 19931 ; WX 896 ; N uni4DDB ; G 4730
U 19932 ; WX 896 ; N uni4DDC ; G 4731
U 19933 ; WX 896 ; N uni4DDD ; G 4732
U 19934 ; WX 896 ; N uni4DDE ; G 4733
U 19935 ; WX 896 ; N uni4DDF ; G 4734
U 19936 ; WX 896 ; N uni4DE0 ; G 4735
U 19937 ; WX 896 ; N uni4DE1 ; G 4736
U 19938 ; WX 896 ; N uni4DE2 ; G 4737
U 19939 ; WX 896 ; N uni4DE3 ; G 4738
U 19940 ; WX 896 ; N uni4DE4 ; G 4739
U 19941 ; WX 896 ; N uni4DE5 ; G 4740
U 19942 ; WX 896 ; N uni4DE6 ; G 4741
U 19943 ; WX 896 ; N uni4DE7 ; G 4742
U 19944 ; WX 896 ; N uni4DE8 ; G 4743
U 19945 ; WX 896 ; N uni4DE9 ; G 4744
U 19946 ; WX 896 ; N uni4DEA ; G 4745
U 19947 ; WX 896 ; N uni4DEB ; G 4746
U 19948 ; WX 896 ; N uni4DEC ; G 4747
U 19949 ; WX 896 ; N uni4DED ; G 4748
U 19950 ; WX 896 ; N uni4DEE ; G 4749
U 19951 ; WX 896 ; N uni4DEF ; G 4750
U 19952 ; WX 896 ; N uni4DF0 ; G 4751
U 19953 ; WX 896 ; N uni4DF1 ; G 4752
U 19954 ; WX 896 ; N uni4DF2 ; G 4753
U 19955 ; WX 896 ; N uni4DF3 ; G 4754
U 19956 ; WX 896 ; N uni4DF4 ; G 4755
U 19957 ; WX 896 ; N uni4DF5 ; G 4756
U 19958 ; WX 896 ; N uni4DF6 ; G 4757
U 19959 ; WX 896 ; N uni4DF7 ; G 4758
U 19960 ; WX 896 ; N uni4DF8 ; G 4759
U 19961 ; WX 896 ; N uni4DF9 ; G 4760
U 19962 ; WX 896 ; N uni4DFA ; G 4761
U 19963 ; WX 896 ; N uni4DFB ; G 4762
U 19964 ; WX 896 ; N uni4DFC ; G 4763
U 19965 ; WX 896 ; N uni4DFD ; G 4764
U 19966 ; WX 896 ; N uni4DFE ; G 4765
U 19967 ; WX 896 ; N uni4DFF ; G 4766
U 42192 ; WX 686 ; N uniA4D0 ; G 4767
U 42193 ; WX 603 ; N uniA4D1 ; G 4768
U 42194 ; WX 603 ; N uniA4D2 ; G 4769
U 42195 ; WX 770 ; N uniA4D3 ; G 4770
U 42196 ; WX 611 ; N uniA4D4 ; G 4771
U 42197 ; WX 611 ; N uniA4D5 ; G 4772
U 42198 ; WX 775 ; N uniA4D6 ; G 4773
U 42199 ; WX 656 ; N uniA4D7 ; G 4774
U 42200 ; WX 656 ; N uniA4D8 ; G 4775
U 42201 ; WX 512 ; N uniA4D9 ; G 4776
U 42202 ; WX 698 ; N uniA4DA ; G 4777
U 42203 ; WX 703 ; N uniA4DB ; G 4778
U 42204 ; WX 685 ; N uniA4DC ; G 4779
U 42205 ; WX 575 ; N uniA4DD ; G 4780
U 42206 ; WX 575 ; N uniA4DE ; G 4781
U 42207 ; WX 863 ; N uniA4DF ; G 4782
U 42208 ; WX 748 ; N uniA4E0 ; G 4783
U 42209 ; WX 557 ; N uniA4E1 ; G 4784
U 42210 ; WX 635 ; N uniA4E2 ; G 4785
U 42211 ; WX 695 ; N uniA4E3 ; G 4786
U 42212 ; WX 695 ; N uniA4E4 ; G 4787
U 42213 ; WX 684 ; N uniA4E5 ; G 4788
U 42214 ; WX 684 ; N uniA4E6 ; G 4789
U 42215 ; WX 752 ; N uniA4E7 ; G 4790
U 42216 ; WX 775 ; N uniA4E8 ; G 4791
U 42217 ; WX 512 ; N uniA4E9 ; G 4792
U 42218 ; WX 989 ; N uniA4EA ; G 4793
U 42219 ; WX 685 ; N uniA4EB ; G 4794
U 42220 ; WX 611 ; N uniA4EC ; G 4795
U 42221 ; WX 686 ; N uniA4ED ; G 4796
U 42222 ; WX 684 ; N uniA4EE ; G 4797
U 42223 ; WX 684 ; N uniA4EF ; G 4798
U 42224 ; WX 632 ; N uniA4F0 ; G 4799
U 42225 ; WX 632 ; N uniA4F1 ; G 4800
U 42226 ; WX 295 ; N uniA4F2 ; G 4801
U 42227 ; WX 787 ; N uniA4F3 ; G 4802
U 42228 ; WX 732 ; N uniA4F4 ; G 4803
U 42229 ; WX 732 ; N uniA4F5 ; G 4804
U 42230 ; WX 557 ; N uniA4F6 ; G 4805
U 42231 ; WX 767 ; N uniA4F7 ; G 4806
U 42232 ; WX 300 ; N uniA4F8 ; G 4807
U 42233 ; WX 300 ; N uniA4F9 ; G 4808
U 42234 ; WX 596 ; N uniA4FA ; G 4809
U 42235 ; WX 596 ; N uniA4FB ; G 4810
U 42236 ; WX 300 ; N uniA4FC ; G 4811
U 42237 ; WX 300 ; N uniA4FD ; G 4812
U 42238 ; WX 588 ; N uniA4FE ; G 4813
U 42239 ; WX 588 ; N uniA4FF ; G 4814
U 42564 ; WX 635 ; N uniA644 ; G 4815
U 42565 ; WX 521 ; N uniA645 ; G 4816
U 42566 ; WX 354 ; N uniA646 ; G 4817
U 42567 ; WX 338 ; N uniA647 ; G 4818
U 42572 ; WX 1180 ; N uniA64C ; G 4819
U 42573 ; WX 1028 ; N uniA64D ; G 4820
U 42576 ; WX 1029 ; N uniA650 ; G 4821
U 42577 ; WX 906 ; N uniA651 ; G 4822
U 42580 ; WX 1080 ; N uniA654 ; G 4823
U 42581 ; WX 842 ; N uniA655 ; G 4824
U 42582 ; WX 977 ; N uniA656 ; G 4825
U 42583 ; WX 843 ; N uniA657 ; G 4826
U 42594 ; WX 1062 ; N uniA662 ; G 4827
U 42595 ; WX 912 ; N uniA663 ; G 4828
U 42596 ; WX 1066 ; N uniA664 ; G 4829
U 42597 ; WX 901 ; N uniA665 ; G 4830
U 42598 ; WX 1178 ; N uniA666 ; G 4831
U 42599 ; WX 1008 ; N uniA667 ; G 4832
U 42600 ; WX 787 ; N uniA668 ; G 4833
U 42601 ; WX 612 ; N uniA669 ; G 4834
U 42602 ; WX 855 ; N uniA66A ; G 4835
U 42603 ; WX 712 ; N uniA66B ; G 4836
U 42604 ; WX 1358 ; N uniA66C ; G 4837
U 42605 ; WX 1019 ; N uniA66D ; G 4838
U 42606 ; WX 879 ; N uniA66E ; G 4839
U 42634 ; WX 782 ; N uniA68A ; G 4840
U 42635 ; WX 685 ; N uniA68B ; G 4841
U 42636 ; WX 611 ; N uniA68C ; G 4842
U 42637 ; WX 583 ; N uniA68D ; G 4843
U 42644 ; WX 686 ; N uniA694 ; G 4844
U 42645 ; WX 634 ; N uniA695 ; G 4845
U 42648 ; WX 1358 ; N uniA698 ; G 4846
U 42649 ; WX 1019 ; N uniA699 ; G 4847
U 42760 ; WX 493 ; N uniA708 ; G 4848
U 42761 ; WX 493 ; N uniA709 ; G 4849
U 42762 ; WX 493 ; N uniA70A ; G 4850
U 42763 ; WX 493 ; N uniA70B ; G 4851
U 42764 ; WX 493 ; N uniA70C ; G 4852
U 42765 ; WX 493 ; N uniA70D ; G 4853
U 42766 ; WX 493 ; N uniA70E ; G 4854
U 42767 ; WX 493 ; N uniA70F ; G 4855
U 42768 ; WX 493 ; N uniA710 ; G 4856
U 42769 ; WX 493 ; N uniA711 ; G 4857
U 42770 ; WX 493 ; N uniA712 ; G 4858
U 42771 ; WX 493 ; N uniA713 ; G 4859
U 42772 ; WX 493 ; N uniA714 ; G 4860
U 42773 ; WX 493 ; N uniA715 ; G 4861
U 42774 ; WX 493 ; N uniA716 ; G 4862
U 42779 ; WX 369 ; N uniA71B ; G 4863
U 42780 ; WX 369 ; N uniA71C ; G 4864
U 42781 ; WX 252 ; N uniA71D ; G 4865
U 42782 ; WX 252 ; N uniA71E ; G 4866
U 42783 ; WX 252 ; N uniA71F ; G 4867
U 42786 ; WX 385 ; N uniA722 ; G 4868
U 42787 ; WX 356 ; N uniA723 ; G 4869
U 42788 ; WX 472 ; N uniA724 ; G 4870
U 42789 ; WX 472 ; N uniA725 ; G 4871
U 42790 ; WX 752 ; N uniA726 ; G 4872
U 42791 ; WX 634 ; N uniA727 ; G 4873
U 42792 ; WX 878 ; N uniA728 ; G 4874
U 42793 ; WX 709 ; N uniA729 ; G 4875
U 42794 ; WX 614 ; N uniA72A ; G 4876
U 42795 ; WX 541 ; N uniA72B ; G 4877
U 42800 ; WX 491 ; N uniA730 ; G 4878
U 42801 ; WX 521 ; N uniA731 ; G 4879
U 42802 ; WX 1250 ; N uniA732 ; G 4880
U 42803 ; WX 985 ; N uniA733 ; G 4881
U 42804 ; WX 1203 ; N uniA734 ; G 4882
U 42805 ; WX 990 ; N uniA735 ; G 4883
U 42806 ; WX 1142 ; N uniA736 ; G 4884
U 42807 ; WX 981 ; N uniA737 ; G 4885
U 42808 ; WX 971 ; N uniA738 ; G 4886
U 42809 ; WX 818 ; N uniA739 ; G 4887
U 42810 ; WX 971 ; N uniA73A ; G 4888
U 42811 ; WX 818 ; N uniA73B ; G 4889
U 42812 ; WX 959 ; N uniA73C ; G 4890
U 42813 ; WX 818 ; N uniA73D ; G 4891
U 42814 ; WX 703 ; N uniA73E ; G 4892
U 42815 ; WX 549 ; N uniA73F ; G 4893
U 42816 ; WX 656 ; N uniA740 ; G 4894
U 42817 ; WX 583 ; N uniA741 ; G 4895
U 42822 ; WX 680 ; N uniA746 ; G 4896
U 42823 ; WX 392 ; N uniA747 ; G 4897
U 42824 ; WX 582 ; N uniA748 ; G 4898
U 42825 ; WX 427 ; N uniA749 ; G 4899
U 42826 ; WX 807 ; N uniA74A ; G 4900
U 42827 ; WX 704 ; N uniA74B ; G 4901
U 42830 ; WX 1358 ; N uniA74E ; G 4902
U 42831 ; WX 1019 ; N uniA74F ; G 4903
U 42832 ; WX 603 ; N uniA750 ; G 4904
U 42833 ; WX 635 ; N uniA751 ; G 4905
U 42834 ; WX 734 ; N uniA752 ; G 4906
U 42835 ; WX 774 ; N uniA753 ; G 4907
U 42838 ; WX 787 ; N uniA756 ; G 4908
U 42839 ; WX 635 ; N uniA757 ; G 4909
U 42852 ; WX 605 ; N uniA764 ; G 4910
U 42853 ; WX 635 ; N uniA765 ; G 4911
U 42854 ; WX 605 ; N uniA766 ; G 4912
U 42855 ; WX 635 ; N uniA767 ; G 4913
U 42880 ; WX 557 ; N uniA780 ; G 4914
U 42881 ; WX 278 ; N uniA781 ; G 4915
U 42882 ; WX 735 ; N uniA782 ; G 4916
U 42883 ; WX 634 ; N uniA783 ; G 4917
U 42889 ; WX 337 ; N uniA789 ; G 4918
U 42890 ; WX 376 ; N uniA78A ; G 4919
U 42891 ; WX 401 ; N uniA78B ; G 4920
U 42892 ; WX 275 ; N uniA78C ; G 4921
U 42893 ; WX 686 ; N uniA78D ; G 4922
U 42894 ; WX 487 ; N uniA78E ; G 4923
U 42896 ; WX 772 ; N uniA790 ; G 4924
U 42897 ; WX 667 ; N uniA791 ; G 4925
U 42912 ; WX 775 ; N uniA7A0 ; G 4926
U 42913 ; WX 635 ; N uniA7A1 ; G 4927
U 42914 ; WX 656 ; N uniA7A2 ; G 4928
U 42915 ; WX 579 ; N uniA7A3 ; G 4929
U 42916 ; WX 748 ; N uniA7A4 ; G 4930
U 42917 ; WX 634 ; N uniA7A5 ; G 4931
U 42918 ; WX 695 ; N uniA7A6 ; G 4932
U 42919 ; WX 411 ; N uniA7A7 ; G 4933
U 42920 ; WX 635 ; N uniA7A8 ; G 4934
U 42921 ; WX 521 ; N uniA7A9 ; G 4935
U 42922 ; WX 801 ; N uniA7AA ; G 4936
U 43000 ; WX 577 ; N uniA7F8 ; G 4937
U 43001 ; WX 644 ; N uniA7F9 ; G 4938
U 43002 ; WX 915 ; N uniA7FA ; G 4939
U 43003 ; WX 575 ; N uniA7FB ; G 4940
U 43004 ; WX 603 ; N uniA7FC ; G 4941
U 43005 ; WX 863 ; N uniA7FD ; G 4942
U 43006 ; WX 295 ; N uniA7FE ; G 4943
U 43007 ; WX 1199 ; N uniA7FF ; G 4944
U 61184 ; WX 213 ; N uni02E5.5 ; G 4945
U 61185 ; WX 238 ; N uni02E6.5 ; G 4946
U 61186 ; WX 257 ; N uni02E7.5 ; G 4947
U 61187 ; WX 264 ; N uni02E8.5 ; G 4948
U 61188 ; WX 267 ; N uni02E9.5 ; G 4949
U 61189 ; WX 238 ; N uni02E5.4 ; G 4950
U 61190 ; WX 213 ; N uni02E6.4 ; G 4951
U 61191 ; WX 238 ; N uni02E7.4 ; G 4952
U 61192 ; WX 257 ; N uni02E8.4 ; G 4953
U 61193 ; WX 264 ; N uni02E9.4 ; G 4954
U 61194 ; WX 257 ; N uni02E5.3 ; G 4955
U 61195 ; WX 238 ; N uni02E6.3 ; G 4956
U 61196 ; WX 213 ; N uni02E7.3 ; G 4957
U 61197 ; WX 238 ; N uni02E8.3 ; G 4958
U 61198 ; WX 257 ; N uni02E9.3 ; G 4959
U 61199 ; WX 264 ; N uni02E5.2 ; G 4960
U 61200 ; WX 257 ; N uni02E6.2 ; G 4961
U 61201 ; WX 238 ; N uni02E7.2 ; G 4962
U 61202 ; WX 213 ; N uni02E8.2 ; G 4963
U 61203 ; WX 238 ; N uni02E9.2 ; G 4964
U 61204 ; WX 267 ; N uni02E5.1 ; G 4965
U 61205 ; WX 264 ; N uni02E6.1 ; G 4966
U 61206 ; WX 257 ; N uni02E7.1 ; G 4967
U 61207 ; WX 238 ; N uni02E8.1 ; G 4968
U 61208 ; WX 213 ; N uni02E9.1 ; G 4969
U 61209 ; WX 275 ; N stem ; G 4970
U 61440 ; WX 977 ; N uniF000 ; G 4971
U 61441 ; WX 977 ; N uniF001 ; G 4972
U 61442 ; WX 977 ; N uniF002 ; G 4973
U 61443 ; WX 977 ; N uniF003 ; G 4974
U 62464 ; WX 580 ; N uniF400 ; G 4975
U 62465 ; WX 580 ; N uniF401 ; G 4976
U 62466 ; WX 624 ; N uniF402 ; G 4977
U 62467 ; WX 889 ; N uniF403 ; G 4978
U 62468 ; WX 585 ; N uniF404 ; G 4979
U 62469 ; WX 580 ; N uniF405 ; G 4980
U 62470 ; WX 653 ; N uniF406 ; G 4981
U 62471 ; WX 882 ; N uniF407 ; G 4982
U 62472 ; WX 555 ; N uniF408 ; G 4983
U 62473 ; WX 580 ; N uniF409 ; G 4984
U 62474 ; WX 1168 ; N uniF40A ; G 4985
U 62475 ; WX 589 ; N uniF40B ; G 4986
U 62476 ; WX 590 ; N uniF40C ; G 4987
U 62477 ; WX 869 ; N uniF40D ; G 4988
U 62478 ; WX 580 ; N uniF40E ; G 4989
U 62479 ; WX 589 ; N uniF40F ; G 4990
U 62480 ; WX 914 ; N uniF410 ; G 4991
U 62481 ; WX 590 ; N uniF411 ; G 4992
U 62482 ; WX 731 ; N uniF412 ; G 4993
U 62483 ; WX 583 ; N uniF413 ; G 4994
U 62484 ; WX 872 ; N uniF414 ; G 4995
U 62485 ; WX 589 ; N uniF415 ; G 4996
U 62486 ; WX 895 ; N uniF416 ; G 4997
U 62487 ; WX 589 ; N uniF417 ; G 4998
U 62488 ; WX 589 ; N uniF418 ; G 4999
U 62489 ; WX 590 ; N uniF419 ; G 5000
U 62490 ; WX 649 ; N uniF41A ; G 5001
U 62491 ; WX 589 ; N uniF41B ; G 5002
U 62492 ; WX 589 ; N uniF41C ; G 5003
U 62493 ; WX 599 ; N uniF41D ; G 5004
U 62494 ; WX 590 ; N uniF41E ; G 5005
U 62495 ; WX 516 ; N uniF41F ; G 5006
U 62496 ; WX 580 ; N uniF420 ; G 5007
U 62497 ; WX 584 ; N uniF421 ; G 5008
U 62498 ; WX 580 ; N uniF422 ; G 5009
U 62499 ; WX 580 ; N uniF423 ; G 5010
U 62500 ; WX 581 ; N uniF424 ; G 5011
U 62501 ; WX 638 ; N uniF425 ; G 5012
U 62502 ; WX 955 ; N uniF426 ; G 5013
U 62504 ; WX 931 ; N uniF428 ; G 5014
U 62505 ; WX 808 ; N uniF429 ; G 5015
U 62506 ; WX 508 ; N uniF42A ; G 5016
U 62507 ; WX 508 ; N uniF42B ; G 5017
U 62508 ; WX 508 ; N uniF42C ; G 5018
U 62509 ; WX 508 ; N uniF42D ; G 5019
U 62510 ; WX 508 ; N uniF42E ; G 5020
U 62511 ; WX 508 ; N uniF42F ; G 5021
U 62512 ; WX 508 ; N uniF430 ; G 5022
U 62513 ; WX 508 ; N uniF431 ; G 5023
U 62514 ; WX 508 ; N uniF432 ; G 5024
U 62515 ; WX 508 ; N uniF433 ; G 5025
U 62516 ; WX 518 ; N uniF434 ; G 5026
U 62517 ; WX 518 ; N uniF435 ; G 5027
U 62518 ; WX 518 ; N uniF436 ; G 5028
U 62519 ; WX 787 ; N uniF437 ; G 5029
U 62520 ; WX 787 ; N uniF438 ; G 5030
U 62521 ; WX 787 ; N uniF439 ; G 5031
U 62522 ; WX 787 ; N uniF43A ; G 5032
U 62523 ; WX 787 ; N uniF43B ; G 5033
U 62524 ; WX 546 ; N uniF43C ; G 5034
U 62525 ; WX 546 ; N uniF43D ; G 5035
U 62526 ; WX 546 ; N uniF43E ; G 5036
U 62527 ; WX 546 ; N uniF43F ; G 5037
U 62528 ; WX 546 ; N uniF440 ; G 5038
U 62529 ; WX 546 ; N uniF441 ; G 5039
U 63173 ; WX 612 ; N uniF6C5 ; G 5040
U 64256 ; WX 689 ; N uniFB00 ; G 5041
U 64257 ; WX 630 ; N fi ; G 5042
U 64258 ; WX 630 ; N fl ; G 5043
U 64259 ; WX 967 ; N uniFB03 ; G 5044
U 64260 ; WX 967 ; N uniFB04 ; G 5045
U 64261 ; WX 686 ; N uniFB05 ; G 5046
U 64262 ; WX 861 ; N uniFB06 ; G 5047
U 64275 ; WX 1202 ; N uniFB13 ; G 5048
U 64276 ; WX 1202 ; N uniFB14 ; G 5049
U 64277 ; WX 1196 ; N uniFB15 ; G 5050
U 64278 ; WX 1186 ; N uniFB16 ; G 5051
U 64279 ; WX 1529 ; N uniFB17 ; G 5052
U 64285 ; WX 224 ; N uniFB1D ; G 5053
U 64286 ; WX 0 ; N uniFB1E ; G 5054
U 64287 ; WX 331 ; N uniFB1F ; G 5055
U 64288 ; WX 636 ; N uniFB20 ; G 5056
U 64289 ; WX 856 ; N uniFB21 ; G 5057
U 64290 ; WX 774 ; N uniFB22 ; G 5058
U 64291 ; WX 906 ; N uniFB23 ; G 5059
U 64292 ; WX 771 ; N uniFB24 ; G 5060
U 64293 ; WX 843 ; N uniFB25 ; G 5061
U 64294 ; WX 855 ; N uniFB26 ; G 5062
U 64295 ; WX 807 ; N uniFB27 ; G 5063
U 64296 ; WX 875 ; N uniFB28 ; G 5064
U 64297 ; WX 838 ; N uniFB29 ; G 5065
U 64298 ; WX 708 ; N uniFB2A ; G 5066
U 64299 ; WX 708 ; N uniFB2B ; G 5067
U 64300 ; WX 708 ; N uniFB2C ; G 5068
U 64301 ; WX 708 ; N uniFB2D ; G 5069
U 64302 ; WX 668 ; N uniFB2E ; G 5070
U 64303 ; WX 668 ; N uniFB2F ; G 5071
U 64304 ; WX 668 ; N uniFB30 ; G 5072
U 64305 ; WX 578 ; N uniFB31 ; G 5073
U 64306 ; WX 412 ; N uniFB32 ; G 5074
U 64307 ; WX 546 ; N uniFB33 ; G 5075
U 64308 ; WX 653 ; N uniFB34 ; G 5076
U 64309 ; WX 355 ; N uniFB35 ; G 5077
U 64310 ; WX 406 ; N uniFB36 ; G 5078
U 64312 ; WX 648 ; N uniFB38 ; G 5079
U 64313 ; WX 330 ; N uniFB39 ; G 5080
U 64314 ; WX 537 ; N uniFB3A ; G 5081
U 64315 ; WX 529 ; N uniFB3B ; G 5082
U 64316 ; WX 568 ; N uniFB3C ; G 5083
U 64318 ; WX 679 ; N uniFB3E ; G 5084
U 64320 ; WX 399 ; N uniFB40 ; G 5085
U 64321 ; WX 649 ; N uniFB41 ; G 5086
U 64323 ; WX 640 ; N uniFB43 ; G 5087
U 64324 ; WX 625 ; N uniFB44 ; G 5088
U 64326 ; WX 593 ; N uniFB46 ; G 5089
U 64327 ; WX 709 ; N uniFB47 ; G 5090
U 64328 ; WX 564 ; N uniFB48 ; G 5091
U 64329 ; WX 708 ; N uniFB49 ; G 5092
U 64330 ; WX 657 ; N uniFB4A ; G 5093
U 64331 ; WX 272 ; N uniFB4B ; G 5094
U 64332 ; WX 578 ; N uniFB4C ; G 5095
U 64333 ; WX 529 ; N uniFB4D ; G 5096
U 64334 ; WX 625 ; N uniFB4E ; G 5097
U 64335 ; WX 629 ; N uniFB4F ; G 5098
U 64338 ; WX 941 ; N uniFB52 ; G 5099
U 64339 ; WX 982 ; N uniFB53 ; G 5100
U 64340 ; WX 278 ; N uniFB54 ; G 5101
U 64341 ; WX 302 ; N uniFB55 ; G 5102
U 64342 ; WX 941 ; N uniFB56 ; G 5103
U 64343 ; WX 982 ; N uniFB57 ; G 5104
U 64344 ; WX 278 ; N uniFB58 ; G 5105
U 64345 ; WX 302 ; N uniFB59 ; G 5106
U 64346 ; WX 941 ; N uniFB5A ; G 5107
U 64347 ; WX 982 ; N uniFB5B ; G 5108
U 64348 ; WX 278 ; N uniFB5C ; G 5109
U 64349 ; WX 302 ; N uniFB5D ; G 5110
U 64350 ; WX 941 ; N uniFB5E ; G 5111
U 64351 ; WX 982 ; N uniFB5F ; G 5112
U 64352 ; WX 278 ; N uniFB60 ; G 5113
U 64353 ; WX 302 ; N uniFB61 ; G 5114
U 64354 ; WX 941 ; N uniFB62 ; G 5115
U 64355 ; WX 982 ; N uniFB63 ; G 5116
U 64356 ; WX 278 ; N uniFB64 ; G 5117
U 64357 ; WX 302 ; N uniFB65 ; G 5118
U 64358 ; WX 941 ; N uniFB66 ; G 5119
U 64359 ; WX 982 ; N uniFB67 ; G 5120
U 64360 ; WX 278 ; N uniFB68 ; G 5121
U 64361 ; WX 302 ; N uniFB69 ; G 5122
U 64362 ; WX 1037 ; N uniFB6A ; G 5123
U 64363 ; WX 1035 ; N uniFB6B ; G 5124
U 64364 ; WX 478 ; N uniFB6C ; G 5125
U 64365 ; WX 506 ; N uniFB6D ; G 5126
U 64366 ; WX 1037 ; N uniFB6E ; G 5127
U 64367 ; WX 1035 ; N uniFB6F ; G 5128
U 64368 ; WX 478 ; N uniFB70 ; G 5129
U 64369 ; WX 506 ; N uniFB71 ; G 5130
U 64370 ; WX 646 ; N uniFB72 ; G 5131
U 64371 ; WX 646 ; N uniFB73 ; G 5132
U 64372 ; WX 618 ; N uniFB74 ; G 5133
U 64373 ; WX 646 ; N uniFB75 ; G 5134
U 64374 ; WX 646 ; N uniFB76 ; G 5135
U 64375 ; WX 646 ; N uniFB77 ; G 5136
U 64376 ; WX 618 ; N uniFB78 ; G 5137
U 64377 ; WX 646 ; N uniFB79 ; G 5138
U 64378 ; WX 646 ; N uniFB7A ; G 5139
U 64379 ; WX 646 ; N uniFB7B ; G 5140
U 64380 ; WX 618 ; N uniFB7C ; G 5141
U 64381 ; WX 646 ; N uniFB7D ; G 5142
U 64382 ; WX 646 ; N uniFB7E ; G 5143
U 64383 ; WX 646 ; N uniFB7F ; G 5144
U 64384 ; WX 618 ; N uniFB80 ; G 5145
U 64385 ; WX 646 ; N uniFB81 ; G 5146
U 64386 ; WX 445 ; N uniFB82 ; G 5147
U 64387 ; WX 525 ; N uniFB83 ; G 5148
U 64388 ; WX 445 ; N uniFB84 ; G 5149
U 64389 ; WX 525 ; N uniFB85 ; G 5150
U 64390 ; WX 445 ; N uniFB86 ; G 5151
U 64391 ; WX 525 ; N uniFB87 ; G 5152
U 64392 ; WX 445 ; N uniFB88 ; G 5153
U 64393 ; WX 525 ; N uniFB89 ; G 5154
U 64394 ; WX 483 ; N uniFB8A ; G 5155
U 64395 ; WX 552 ; N uniFB8B ; G 5156
U 64396 ; WX 483 ; N uniFB8C ; G 5157
U 64397 ; WX 552 ; N uniFB8D ; G 5158
U 64398 ; WX 895 ; N uniFB8E ; G 5159
U 64399 ; WX 895 ; N uniFB8F ; G 5160
U 64400 ; WX 476 ; N uniFB90 ; G 5161
U 64401 ; WX 552 ; N uniFB91 ; G 5162
U 64402 ; WX 895 ; N uniFB92 ; G 5163
U 64403 ; WX 895 ; N uniFB93 ; G 5164
U 64404 ; WX 476 ; N uniFB94 ; G 5165
U 64405 ; WX 552 ; N uniFB95 ; G 5166
U 64406 ; WX 895 ; N uniFB96 ; G 5167
U 64407 ; WX 895 ; N uniFB97 ; G 5168
U 64408 ; WX 476 ; N uniFB98 ; G 5169
U 64409 ; WX 552 ; N uniFB99 ; G 5170
U 64410 ; WX 895 ; N uniFB9A ; G 5171
U 64411 ; WX 895 ; N uniFB9B ; G 5172
U 64412 ; WX 476 ; N uniFB9C ; G 5173
U 64413 ; WX 552 ; N uniFB9D ; G 5174
U 64414 ; WX 734 ; N uniFB9E ; G 5175
U 64415 ; WX 761 ; N uniFB9F ; G 5176
U 64416 ; WX 734 ; N uniFBA0 ; G 5177
U 64417 ; WX 761 ; N uniFBA1 ; G 5178
U 64418 ; WX 278 ; N uniFBA2 ; G 5179
U 64419 ; WX 302 ; N uniFBA3 ; G 5180
U 64426 ; WX 698 ; N uniFBAA ; G 5181
U 64427 ; WX 632 ; N uniFBAB ; G 5182
U 64428 ; WX 527 ; N uniFBAC ; G 5183
U 64429 ; WX 461 ; N uniFBAD ; G 5184
U 64467 ; WX 824 ; N uniFBD3 ; G 5185
U 64468 ; WX 843 ; N uniFBD4 ; G 5186
U 64469 ; WX 476 ; N uniFBD5 ; G 5187
U 64470 ; WX 552 ; N uniFBD6 ; G 5188
U 64471 ; WX 483 ; N uniFBD7 ; G 5189
U 64472 ; WX 517 ; N uniFBD8 ; G 5190
U 64473 ; WX 483 ; N uniFBD9 ; G 5191
U 64474 ; WX 517 ; N uniFBDA ; G 5192
U 64475 ; WX 483 ; N uniFBDB ; G 5193
U 64476 ; WX 517 ; N uniFBDC ; G 5194
U 64478 ; WX 483 ; N uniFBDE ; G 5195
U 64479 ; WX 517 ; N uniFBDF ; G 5196
U 64484 ; WX 783 ; N uniFBE4 ; G 5197
U 64485 ; WX 833 ; N uniFBE5 ; G 5198
U 64486 ; WX 278 ; N uniFBE6 ; G 5199
U 64487 ; WX 302 ; N uniFBE7 ; G 5200
U 64488 ; WX 278 ; N uniFBE8 ; G 5201
U 64489 ; WX 302 ; N uniFBE9 ; G 5202
U 64508 ; WX 783 ; N uniFBFC ; G 5203
U 64509 ; WX 833 ; N uniFBFD ; G 5204
U 64510 ; WX 278 ; N uniFBFE ; G 5205
U 64511 ; WX 302 ; N uniFBFF ; G 5206
U 65024 ; WX 0 ; N uniFE00 ; G 5207
U 65025 ; WX 0 ; N uniFE01 ; G 5208
U 65026 ; WX 0 ; N uniFE02 ; G 5209
U 65027 ; WX 0 ; N uniFE03 ; G 5210
U 65028 ; WX 0 ; N uniFE04 ; G 5211
U 65029 ; WX 0 ; N uniFE05 ; G 5212
U 65030 ; WX 0 ; N uniFE06 ; G 5213
U 65031 ; WX 0 ; N uniFE07 ; G 5214
U 65032 ; WX 0 ; N uniFE08 ; G 5215
U 65033 ; WX 0 ; N uniFE09 ; G 5216
U 65034 ; WX 0 ; N uniFE0A ; G 5217
U 65035 ; WX 0 ; N uniFE0B ; G 5218
U 65036 ; WX 0 ; N uniFE0C ; G 5219
U 65037 ; WX 0 ; N uniFE0D ; G 5220
U 65038 ; WX 0 ; N uniFE0E ; G 5221
U 65039 ; WX 0 ; N uniFE0F ; G 5222
U 65056 ; WX 0 ; N uniFE20 ; G 5223
U 65057 ; WX 0 ; N uniFE21 ; G 5224
U 65058 ; WX 0 ; N uniFE22 ; G 5225
U 65059 ; WX 0 ; N uniFE23 ; G 5226
U 65136 ; WX 293 ; N uniFE70 ; G 5227
U 65137 ; WX 293 ; N uniFE71 ; G 5228
U 65138 ; WX 293 ; N uniFE72 ; G 5229
U 65139 ; WX 262 ; N uniFE73 ; G 5230
U 65140 ; WX 293 ; N uniFE74 ; G 5231
U 65142 ; WX 293 ; N uniFE76 ; G 5232
U 65143 ; WX 293 ; N uniFE77 ; G 5233
U 65144 ; WX 293 ; N uniFE78 ; G 5234
U 65145 ; WX 293 ; N uniFE79 ; G 5235
U 65146 ; WX 293 ; N uniFE7A ; G 5236
U 65147 ; WX 293 ; N uniFE7B ; G 5237
U 65148 ; WX 293 ; N uniFE7C ; G 5238
U 65149 ; WX 293 ; N uniFE7D ; G 5239
U 65150 ; WX 293 ; N uniFE7E ; G 5240
U 65151 ; WX 293 ; N uniFE7F ; G 5241
U 65152 ; WX 470 ; N uniFE80 ; G 5242
U 65153 ; WX 278 ; N uniFE81 ; G 5243
U 65154 ; WX 305 ; N uniFE82 ; G 5244
U 65155 ; WX 278 ; N uniFE83 ; G 5245
U 65156 ; WX 305 ; N uniFE84 ; G 5246
U 65157 ; WX 483 ; N uniFE85 ; G 5247
U 65158 ; WX 517 ; N uniFE86 ; G 5248
U 65159 ; WX 278 ; N uniFE87 ; G 5249
U 65160 ; WX 305 ; N uniFE88 ; G 5250
U 65161 ; WX 783 ; N uniFE89 ; G 5251
U 65162 ; WX 833 ; N uniFE8A ; G 5252
U 65163 ; WX 278 ; N uniFE8B ; G 5253
U 65164 ; WX 302 ; N uniFE8C ; G 5254
U 65165 ; WX 278 ; N uniFE8D ; G 5255
U 65166 ; WX 305 ; N uniFE8E ; G 5256
U 65167 ; WX 941 ; N uniFE8F ; G 5257
U 65168 ; WX 982 ; N uniFE90 ; G 5258
U 65169 ; WX 278 ; N uniFE91 ; G 5259
U 65170 ; WX 302 ; N uniFE92 ; G 5260
U 65171 ; WX 524 ; N uniFE93 ; G 5261
U 65172 ; WX 536 ; N uniFE94 ; G 5262
U 65173 ; WX 941 ; N uniFE95 ; G 5263
U 65174 ; WX 982 ; N uniFE96 ; G 5264
U 65175 ; WX 278 ; N uniFE97 ; G 5265
U 65176 ; WX 302 ; N uniFE98 ; G 5266
U 65177 ; WX 941 ; N uniFE99 ; G 5267
U 65178 ; WX 982 ; N uniFE9A ; G 5268
U 65179 ; WX 278 ; N uniFE9B ; G 5269
U 65180 ; WX 302 ; N uniFE9C ; G 5270
U 65181 ; WX 646 ; N uniFE9D ; G 5271
U 65182 ; WX 646 ; N uniFE9E ; G 5272
U 65183 ; WX 618 ; N uniFE9F ; G 5273
U 65184 ; WX 646 ; N uniFEA0 ; G 5274
U 65185 ; WX 646 ; N uniFEA1 ; G 5275
U 65186 ; WX 646 ; N uniFEA2 ; G 5276
U 65187 ; WX 618 ; N uniFEA3 ; G 5277
U 65188 ; WX 646 ; N uniFEA4 ; G 5278
U 65189 ; WX 646 ; N uniFEA5 ; G 5279
U 65190 ; WX 646 ; N uniFEA6 ; G 5280
U 65191 ; WX 618 ; N uniFEA7 ; G 5281
U 65192 ; WX 646 ; N uniFEA8 ; G 5282
U 65193 ; WX 445 ; N uniFEA9 ; G 5283
U 65194 ; WX 525 ; N uniFEAA ; G 5284
U 65195 ; WX 445 ; N uniFEAB ; G 5285
U 65196 ; WX 525 ; N uniFEAC ; G 5286
U 65197 ; WX 483 ; N uniFEAD ; G 5287
U 65198 ; WX 552 ; N uniFEAE ; G 5288
U 65199 ; WX 483 ; N uniFEAF ; G 5289
U 65200 ; WX 552 ; N uniFEB0 ; G 5290
U 65201 ; WX 1221 ; N uniFEB1 ; G 5291
U 65202 ; WX 1275 ; N uniFEB2 ; G 5292
U 65203 ; WX 838 ; N uniFEB3 ; G 5293
U 65204 ; WX 892 ; N uniFEB4 ; G 5294
U 65205 ; WX 1221 ; N uniFEB5 ; G 5295
U 65206 ; WX 1275 ; N uniFEB6 ; G 5296
U 65207 ; WX 838 ; N uniFEB7 ; G 5297
U 65208 ; WX 892 ; N uniFEB8 ; G 5298
U 65209 ; WX 1209 ; N uniFEB9 ; G 5299
U 65210 ; WX 1225 ; N uniFEBA ; G 5300
U 65211 ; WX 849 ; N uniFEBB ; G 5301
U 65212 ; WX 867 ; N uniFEBC ; G 5302
U 65213 ; WX 1209 ; N uniFEBD ; G 5303
U 65214 ; WX 1225 ; N uniFEBE ; G 5304
U 65215 ; WX 849 ; N uniFEBF ; G 5305
U 65216 ; WX 867 ; N uniFEC0 ; G 5306
U 65217 ; WX 925 ; N uniFEC1 ; G 5307
U 65218 ; WX 949 ; N uniFEC2 ; G 5308
U 65219 ; WX 796 ; N uniFEC3 ; G 5309
U 65220 ; WX 820 ; N uniFEC4 ; G 5310
U 65221 ; WX 925 ; N uniFEC5 ; G 5311
U 65222 ; WX 949 ; N uniFEC6 ; G 5312
U 65223 ; WX 796 ; N uniFEC7 ; G 5313
U 65224 ; WX 820 ; N uniFEC8 ; G 5314
U 65225 ; WX 597 ; N uniFEC9 ; G 5315
U 65226 ; WX 532 ; N uniFECA ; G 5316
U 65227 ; WX 597 ; N uniFECB ; G 5317
U 65228 ; WX 482 ; N uniFECC ; G 5318
U 65229 ; WX 597 ; N uniFECD ; G 5319
U 65230 ; WX 532 ; N uniFECE ; G 5320
U 65231 ; WX 523 ; N uniFECF ; G 5321
U 65232 ; WX 482 ; N uniFED0 ; G 5322
U 65233 ; WX 1037 ; N uniFED1 ; G 5323
U 65234 ; WX 1035 ; N uniFED2 ; G 5324
U 65235 ; WX 478 ; N uniFED3 ; G 5325
U 65236 ; WX 506 ; N uniFED4 ; G 5326
U 65237 ; WX 776 ; N uniFED5 ; G 5327
U 65238 ; WX 834 ; N uniFED6 ; G 5328
U 65239 ; WX 478 ; N uniFED7 ; G 5329
U 65240 ; WX 506 ; N uniFED8 ; G 5330
U 65241 ; WX 824 ; N uniFED9 ; G 5331
U 65242 ; WX 843 ; N uniFEDA ; G 5332
U 65243 ; WX 476 ; N uniFEDB ; G 5333
U 65244 ; WX 552 ; N uniFEDC ; G 5334
U 65245 ; WX 727 ; N uniFEDD ; G 5335
U 65246 ; WX 757 ; N uniFEDE ; G 5336
U 65247 ; WX 305 ; N uniFEDF ; G 5337
U 65248 ; WX 331 ; N uniFEE0 ; G 5338
U 65249 ; WX 619 ; N uniFEE1 ; G 5339
U 65250 ; WX 666 ; N uniFEE2 ; G 5340
U 65251 ; WX 536 ; N uniFEE3 ; G 5341
U 65252 ; WX 578 ; N uniFEE4 ; G 5342
U 65253 ; WX 734 ; N uniFEE5 ; G 5343
U 65254 ; WX 761 ; N uniFEE6 ; G 5344
U 65255 ; WX 278 ; N uniFEE7 ; G 5345
U 65256 ; WX 302 ; N uniFEE8 ; G 5346
U 65257 ; WX 524 ; N uniFEE9 ; G 5347
U 65258 ; WX 536 ; N uniFEEA ; G 5348
U 65259 ; WX 527 ; N uniFEEB ; G 5349
U 65260 ; WX 461 ; N uniFEEC ; G 5350
U 65261 ; WX 483 ; N uniFEED ; G 5351
U 65262 ; WX 517 ; N uniFEEE ; G 5352
U 65263 ; WX 783 ; N uniFEEF ; G 5353
U 65264 ; WX 833 ; N uniFEF0 ; G 5354
U 65265 ; WX 783 ; N uniFEF1 ; G 5355
U 65266 ; WX 833 ; N uniFEF2 ; G 5356
U 65267 ; WX 278 ; N uniFEF3 ; G 5357
U 65268 ; WX 302 ; N uniFEF4 ; G 5358
U 65269 ; WX 570 ; N uniFEF5 ; G 5359
U 65270 ; WX 597 ; N uniFEF6 ; G 5360
U 65271 ; WX 570 ; N uniFEF7 ; G 5361
U 65272 ; WX 597 ; N uniFEF8 ; G 5362
U 65273 ; WX 570 ; N uniFEF9 ; G 5363
U 65274 ; WX 597 ; N uniFEFA ; G 5364
U 65275 ; WX 570 ; N uniFEFB ; G 5365
U 65276 ; WX 597 ; N uniFEFC ; G 5366
U 65279 ; WX 0 ; N uniFEFF ; G 5367
U 65529 ; WX 0 ; N uniFFF9 ; G 5368
U 65530 ; WX 0 ; N uniFFFA ; G 5369
U 65531 ; WX 0 ; N uniFFFB ; G 5370
U 65532 ; WX 0 ; N uniFFFC ; G 5371
U 65533 ; WX 1025 ; N uniFFFD ; G 5372
EndCharMetrics
StartKernData 
StartKernPairs 2727

KPX dollar dollar 57
KPX dollar ampersand -36
KPX dollar asterisk -36
KPX dollar two -36
KPX dollar four -36
KPX dollar seven -159
KPX dollar nine -131
KPX dollar colon -112
KPX dollar less -159
KPX dollar F -36
KPX dollar G -36
KPX dollar H -36
KPX dollar I -73
KPX dollar R -36
KPX dollar T -36
KPX dollar W -36
KPX dollar Y -120
KPX dollar Z -83
KPX dollar backslash -139
KPX dollar m -73
KPX dollar copyright -36
KPX dollar ordfeminine -36
KPX dollar guillemotleft -36
KPX dollar logicalnot -36
KPX dollar sfthyphen -36
KPX dollar acute -36
KPX dollar mu -36
KPX dollar paragraph -36
KPX dollar periodcentered -36
KPX dollar cedilla -36
KPX dollar questiondown -139
KPX dollar Aacute -139
KPX dollar Acircumflex 57
KPX dollar Adieresis 57
KPX dollar AE 57
KPX dollar Egrave -36
KPX dollar Eacute -36
KPX dollar Ecircumflex -36
KPX dollar Edieresis -36
KPX dollar Igrave -36
KPX dollar Iacute -36
KPX dollar Icircumflex -36
KPX dollar Idieresis -36
KPX dollar Ntilde -36
KPX dollar Oacute -36
KPX dollar Otilde -36
KPX dollar multiply -36
KPX dollar Ugrave -36
KPX dollar Ucircumflex -36
KPX dollar Yacute -36
KPX dollar Thorn -36
KPX dollar agrave -36
KPX dollar acircumflex -36
KPX dollar Dcaron -36
KPX dollar dcaron -36
KPX dollar Dcroat -36
KPX dollar dmacron -36
KPX dollar Emacron -36
KPX dollar emacron -36
KPX dollar Hcircumflex -159
KPX dollar hcircumflex -36
KPX dollar Hbar -159
KPX dollar hbar -36
KPX dollar Kcommaaccent -112
KPX dollar kcommaaccent -83
KPX dollar kgreenlandic -159
KPX dollar Lacute -139
KPX dollar lacute -159
KPX dollar uni0188 -36
KPX dollar uni01AC -36
KPX dollar uni01AD -36
KPX dollar uni01AE -36
KPX dollar Uhorn -36
KPX dollar uni01DC -159
KPX dollar uni01DD -36
KPX dollar uni01F0 -36
KPX dollar uni01F3 -36
KPX dollar uni01F4 -159
KPX dollar uni01F5 -139

KPX percent ampersand -36
KPX percent asterisk -36
KPX percent two -36
KPX percent six -36
KPX percent nine -63
KPX percent colon -73
KPX percent less -112
KPX percent m -63
KPX percent braceright -36
KPX percent Egrave -36
KPX percent Ecircumflex -36
KPX percent Igrave -36
KPX percent Icircumflex -36
KPX percent Thorn -36
KPX percent agrave -36
KPX percent acircumflex -36
KPX percent adieresis -36
KPX percent Dcaron -36
KPX percent Dcroat -36
KPX percent Emacron -36
KPX percent Gcircumflex -36
KPX percent Gbreve -36
KPX percent Gdotaccent -36
KPX percent Gcommaaccent -36
KPX percent Kcommaaccent -73
KPX percent kgreenlandic -112
KPX percent lacute -112
KPX percent uni01AC -36
KPX percent uni01AE -36
KPX percent uni01DA -36
KPX percent uni01F0 -36

KPX ampersand less -36
KPX ampersand m -36
KPX ampersand braceright -36
KPX ampersand kgreenlandic -36
KPX ampersand lacute -36
KPX ampersand uni01F4 -36

KPX quotesingle dollar -36
KPX quotesingle nine -36
KPX quotesingle less -112
KPX quotesingle m -36
KPX quotesingle braceright -36
KPX quotesingle Acircumflex -36
KPX quotesingle Adieresis -36
KPX quotesingle AE -36
KPX quotesingle kgreenlandic -112
KPX quotesingle lacute -112
KPX quotesingle uni01F4 -112

KPX parenright dollar -188
KPX parenright six -36
KPX parenright seven -36
KPX parenright D -188
KPX parenright H -112
KPX parenright L -149
KPX parenright R -73
KPX parenright U -149
KPX parenright X -112
KPX parenright backslash -188
KPX parenright cent -188
KPX parenright sterling -188
KPX parenright currency -188
KPX parenright yen -188
KPX parenright brokenbar -188
KPX parenright section -188
KPX parenright ordfeminine -112
KPX parenright guillemotleft -112
KPX parenright logicalnot -112
KPX parenright sfthyphen -112
KPX parenright acute -73
KPX parenright mu -73
KPX parenright paragraph -73
KPX parenright periodcentered -73
KPX parenright cedilla -73
KPX parenright guillemotright -112
KPX parenright onequarter -112
KPX parenright onehalf -112
KPX parenright threequarters -112
KPX parenright questiondown -188
KPX parenright Aacute -188
KPX parenright Acircumflex -188
KPX parenright Atilde -188
KPX parenright Adieresis -188
KPX parenright Aring -188
KPX parenright AE -188
KPX parenright Ccedilla -188
KPX parenright Otilde -112
KPX parenright multiply -112
KPX parenright Ugrave -112
KPX parenright Ucircumflex -112
KPX parenright Yacute -112
KPX parenright ntilde -149
KPX parenright otilde -149
KPX parenright dcaron -73
KPX parenright dmacron -73
KPX parenright emacron -73
KPX parenright edotaccent -149
KPX parenright eogonek -149
KPX parenright ecaron -149
KPX parenright Gcircumflex -36
KPX parenright Gbreve -36
KPX parenright Gdotaccent -36
KPX parenright Gcommaaccent -36
KPX parenright Hcircumflex -36
KPX parenright Hbar -36
KPX parenright Itilde -36
KPX parenright imacron -112
KPX parenright ibreve -112
KPX parenright iogonek -112
KPX parenright dotlessi -112
KPX parenright ij -112
KPX parenright jcircumflex -112
KPX parenright Lacute -188
KPX parenright uni01AD -73
KPX parenright Uhorn -73
KPX parenright uni01DA -36
KPX parenright uni01DC -36
KPX parenright uni01F1 -73
KPX parenright uni01F5 -188

KPX asterisk seven -73
KPX asterisk less -102
KPX asterisk m -36
KPX asterisk braceright -36
KPX asterisk Hbar -73
KPX asterisk lacute -102


KPX hyphen dollar -36
KPX hyphen m -36
KPX hyphen braceright -36

KPX period dollar -36
KPX period ampersand -112
KPX period two -112
KPX period seven -159
KPX period eight -55
KPX period colon -73
KPX period less -73
KPX period D -36
KPX period H -102
KPX period R -102
KPX period X -102
KPX period backslash -149
KPX period m -131
KPX period cent -36
KPX period sterling -36
KPX period currency -36
KPX period yen -36
KPX period brokenbar -36
KPX period section -36
KPX period ordfeminine -102
KPX period guillemotleft -102
KPX period logicalnot -102
KPX period sfthyphen -102
KPX period acute -102
KPX period mu -102
KPX period paragraph -102
KPX period periodcentered -102
KPX period cedilla -102
KPX period guillemotright -102
KPX period onequarter -102
KPX period onehalf -102
KPX period threequarters -102
KPX period questiondown -149
KPX period Aacute -149
KPX period Egrave -112
KPX period Icircumflex -112
KPX period Yacute -102
KPX period Hbar -159
KPX period Idot -55
KPX period dotlessi -102
KPX period lacute -73

KPX slash dollar 47
KPX slash two -73
KPX slash seven -282
KPX slash eight -102
KPX slash nine -225
KPX slash colon -188
KPX slash less -272
KPX slash H -36
KPX slash R -36
KPX slash X -36
KPX slash backslash -188
KPX slash ordfeminine -36
KPX slash guillemotleft -36
KPX slash logicalnot -36
KPX slash sfthyphen -36
KPX slash acute -36
KPX slash mu -36
KPX slash paragraph -36
KPX slash periodcentered -36
KPX slash cedilla -36
KPX slash guillemotright -36
KPX slash onequarter -36
KPX slash onehalf -36
KPX slash threequarters -36
KPX slash questiondown -188
KPX slash Aacute -188
KPX slash Yacute -36
KPX slash Hbar -282
KPX slash Idot -102
KPX slash dotlessi -36
KPX slash lacute -272

KPX two dollar -36
KPX two nine -36
KPX two semicolon -131
KPX two less -112
KPX two m -36
KPX two lacute -112

KPX three dollar -131
KPX three less -45
KPX three D -92
KPX three H -73
KPX three L -45
KPX three Q -36
KPX three R -73
KPX three U -36
KPX three V -36
KPX three X -36
KPX three m -36
KPX three cent -92
KPX three sterling -92
KPX three currency -92
KPX three yen -92
KPX three brokenbar -92
KPX three section -92
KPX three ordfeminine -73
KPX three guillemotleft -73
KPX three logicalnot -73
KPX three sfthyphen -73
KPX three threesuperior -36
KPX three acute -73
KPX three mu -73
KPX three paragraph -73
KPX three periodcentered -73
KPX three cedilla -73
KPX three guillemotright -36
KPX three onequarter -36
KPX three onehalf -36
KPX three threequarters -36
KPX three Yacute -73
KPX three Cdotaccent -36
KPX three edotaccent -36
KPX three ecaron -36
KPX three gdotaccent -36
KPX three gcommaaccent -36
KPX three dotlessi -36
KPX three lacute -45


KPX five dollar -83
KPX five ampersand -102
KPX five seven -149
KPX five nine -112
KPX five colon -83
KPX five less -131
KPX five D -45
KPX five H -92
KPX five R -92
KPX five X -92
KPX five backslash -112
KPX five m -112
KPX five braceright -36
KPX five cent -45
KPX five sterling -45
KPX five currency -45
KPX five yen -45
KPX five brokenbar -45
KPX five section -45
KPX five ordfeminine -92
KPX five guillemotleft -92
KPX five logicalnot -92
KPX five sfthyphen -92
KPX five acute -92
KPX five mu -92
KPX five paragraph -92
KPX five periodcentered -92
KPX five cedilla -92
KPX five guillemotright -92
KPX five onequarter -92
KPX five onehalf -92
KPX five threequarters -92
KPX five questiondown -112
KPX five Aacute -112
KPX five Egrave -102
KPX five Icircumflex -102
KPX five Yacute -92
KPX five Hbar -149
KPX five dotlessi -92
KPX five lacute -131

KPX six dollar 38

KPX seven dollar -159
KPX seven ampersand -120
KPX seven seven -36
KPX seven D -339
KPX seven F -348
KPX seven H -348
KPX seven L -63
KPX seven R -348
KPX seven U -301
KPX seven V -339
KPX seven X -311
KPX seven Z -339
KPX seven backslash -319
KPX seven m -188
KPX seven braceright -112
KPX seven cent -239
KPX seven sterling -339
KPX seven currency -239
KPX seven yen -239
KPX seven brokenbar -239
KPX seven section -239
KPX seven copyright -348
KPX seven ordfeminine -288
KPX seven guillemotleft -348
KPX seven logicalnot -288
KPX seven sfthyphen -288
KPX seven acute -268
KPX seven mu -348
KPX seven paragraph -268
KPX seven periodcentered -268
KPX seven cedilla -268
KPX seven guillemotright -281
KPX seven onequarter -311
KPX seven onehalf -281
KPX seven threequarters -281
KPX seven questiondown -319
KPX seven Aacute -319
KPX seven Egrave -120
KPX seven Eacute -348
KPX seven Icircumflex -120
KPX seven Idieresis -348
KPX seven Yacute -348
KPX seven edotaccent -301
KPX seven ecaron -301
KPX seven gdotaccent -339
KPX seven gcommaaccent -339
KPX seven Hbar -36
KPX seven dotlessi -311

KPX eight equal -36
KPX eight Ldot -36

KPX nine dollar -131
KPX nine two -36
KPX nine D -159
KPX nine H -159
KPX nine L -45
KPX nine R -159
KPX nine X -139
KPX nine backslash -55
KPX nine m -178
KPX nine braceright -112
KPX nine cent -159
KPX nine sterling -159
KPX nine currency -159
KPX nine yen -159
KPX nine brokenbar -159
KPX nine section -159
KPX nine ordfeminine -159
KPX nine guillemotleft -159
KPX nine logicalnot -159
KPX nine sfthyphen -159
KPX nine acute -159
KPX nine mu -159
KPX nine paragraph -159
KPX nine periodcentered -159
KPX nine cedilla -159
KPX nine guillemotright -139
KPX nine onequarter -139
KPX nine onehalf -139
KPX nine threequarters -139
KPX nine questiondown -55
KPX nine Aacute -55
KPX nine Yacute -159
KPX nine dotlessi -139

KPX colon dollar -112
KPX colon D -131
KPX colon H -120
KPX colon L -45
KPX colon R -120
KPX colon U -92
KPX colon X -73
KPX colon backslash -36
KPX colon m -112
KPX colon braceright -36
KPX colon cent -131
KPX colon sterling -131
KPX colon currency -131
KPX colon yen -131
KPX colon brokenbar -131
KPX colon section -131
KPX colon ordfeminine -120
KPX colon guillemotleft -120
KPX colon logicalnot -120
KPX colon sfthyphen -120
KPX colon acute -120
KPX colon mu -120
KPX colon paragraph -120
KPX colon periodcentered -120
KPX colon cedilla -120
KPX colon guillemotright -73
KPX colon onequarter -73
KPX colon onehalf -73
KPX colon threequarters -73
KPX colon questiondown -36
KPX colon Aacute -36
KPX colon Yacute -120
KPX colon edotaccent -92
KPX colon ecaron -92
KPX colon dotlessi -73

KPX semicolon ampersand -149
KPX semicolon two -131
KPX semicolon seven -36
KPX semicolon H -92
KPX semicolon m -112
KPX semicolon ordfeminine -92
KPX semicolon guillemotleft -92
KPX semicolon logicalnot -92
KPX semicolon sfthyphen -92
KPX semicolon Egrave -149
KPX semicolon Icircumflex -149
KPX semicolon Yacute -92
KPX semicolon Hbar -36

KPX less dollar -159
KPX less ampersand -112
KPX less two -112
KPX less D -282
KPX less H -272
KPX less L -73
KPX less R -272
KPX less X -235
KPX less m -225
KPX less braceright -149
KPX less cent -282
KPX less sterling -282
KPX less currency -282
KPX less yen -282
KPX less brokenbar -282
KPX less section -282
KPX less ordfeminine -272
KPX less guillemotleft -272
KPX less logicalnot -272
KPX less sfthyphen -272
KPX less acute -272
KPX less mu -272
KPX less paragraph -272
KPX less periodcentered -272
KPX less cedilla -272
KPX less guillemotright -235
KPX less onequarter -235
KPX less onehalf -235
KPX less threequarters -235
KPX less Egrave -112
KPX less Icircumflex -112
KPX less Yacute -272
KPX less dotlessi -235


KPX H bracketleft -36

KPX I W -36
KPX I Z -36
KPX I backslash -36
KPX I m -73
KPX I braceright -36
KPX I questiondown -36
KPX I Aacute -36
KPX I hbar -36

KPX N D -36
KPX N H -73
KPX N R -73
KPX N X -63
KPX N backslash -73
KPX N cent -36
KPX N sterling -36
KPX N currency -36
KPX N yen -36
KPX N brokenbar -36
KPX N section -36
KPX N ordfeminine -73
KPX N guillemotleft -73
KPX N logicalnot -73
KPX N sfthyphen -73
KPX N acute -73
KPX N mu -73
KPX N paragraph -73
KPX N periodcentered -73
KPX N cedilla -73
KPX N guillemotright -63
KPX N onequarter -63
KPX N onehalf -63
KPX N threequarters -63
KPX N questiondown -73
KPX N Aacute -73
KPX N Yacute -73
KPX N dotlessi -63


KPX R bracketleft -63

KPX U F -45
KPX U G -36
KPX U H -45
KPX U J -36
KPX U K -36
KPX U P -36
KPX U Q -36
KPX U R -45
KPX U T -36
KPX U U -36
KPX U bracketleft -55
KPX U m -73
KPX U copyright -45
KPX U ordfeminine -45
KPX U guillemotleft -45
KPX U logicalnot -45
KPX U sfthyphen -45
KPX U threesuperior -36
KPX U acute -45
KPX U mu -45
KPX U paragraph -45
KPX U periodcentered -45
KPX U cedilla -45
KPX U Eacute -45
KPX U Idieresis -45
KPX U Ntilde 72
KPX U Yacute -45
KPX U aacute -36
KPX U Cdotaccent -36
KPX U edotaccent -36
KPX U ecaron -36

KPX Y m -36
KPX Y braceright -36

KPX Z m -36
KPX Z braceright -36

KPX bracketleft F -36
KPX bracketleft H -63
KPX bracketleft R -63
KPX bracketleft copyright -36
KPX bracketleft ordfeminine -63
KPX bracketleft guillemotleft -63
KPX bracketleft logicalnot -63
KPX bracketleft sfthyphen -63
KPX bracketleft acute -63
KPX bracketleft mu -63
KPX bracketleft paragraph -63
KPX bracketleft periodcentered -63
KPX bracketleft cedilla -63
KPX bracketleft Eacute -36
KPX bracketleft Idieresis -36
KPX bracketleft Yacute -63

KPX backslash m -36
KPX backslash braceright -36

KPX m percent -36
KPX m ampersand -36
KPX m quotesingle -36
KPX m asterisk -36
KPX m hyphen -36
KPX m seven -112
KPX m nine -112
KPX m colon -36
KPX m less -149
KPX m Y -36
KPX m Z -36
KPX m backslash -36
KPX m questiondown -36
KPX m Aacute -36
KPX m Egrave -36
KPX m Icircumflex -36
KPX m Eth -36
KPX m agrave -36
KPX m Hbar -112
KPX m lacute -149

KPX braceright dollar -73
KPX braceright percent -73
KPX braceright ampersand -36
KPX braceright quotesingle -36
KPX braceright hyphen -36
KPX braceright two -36
KPX braceright seven -188
KPX braceright nine -178
KPX braceright colon -112
KPX braceright semicolon -112
KPX braceright less -225
KPX braceright Y -36
KPX braceright Z -36
KPX braceright backslash -36
KPX braceright questiondown -36
KPX braceright Aacute -36
KPX braceright Egrave -36
KPX braceright Icircumflex -36
KPX braceright Eth -36
KPX braceright Hbar -188
KPX braceright lacute -225



KPX ordfeminine bracketleft -36

KPX guillemotleft bracketleft -36

KPX logicalnot bracketleft -36

KPX sfthyphen bracketleft -36



KPX acute bracketleft -63

KPX mu bracketleft -63

KPX paragraph bracketleft -63

KPX periodcentered bracketleft -63

KPX cedilla bracketleft -63

KPX questiondown m -36
KPX questiondown braceright -36

KPX Aacute m -36
KPX Aacute braceright -36

KPX Acircumflex dollar 57
KPX Acircumflex ampersand -36
KPX Acircumflex asterisk -36
KPX Acircumflex two -36
KPX Acircumflex four -36
KPX Acircumflex seven -159
KPX Acircumflex nine -131
KPX Acircumflex colon -112
KPX Acircumflex less -159
KPX Acircumflex F -36
KPX Acircumflex G -36
KPX Acircumflex H -36
KPX Acircumflex I -73
KPX Acircumflex R -36
KPX Acircumflex T -36
KPX Acircumflex W -36
KPX Acircumflex Y -120
KPX Acircumflex Z -83
KPX Acircumflex backslash -139
KPX Acircumflex m -73
KPX Acircumflex copyright -36
KPX Acircumflex ordfeminine -36
KPX Acircumflex guillemotleft -36
KPX Acircumflex logicalnot -36
KPX Acircumflex sfthyphen -36
KPX Acircumflex acute -36
KPX Acircumflex mu -36
KPX Acircumflex paragraph -36
KPX Acircumflex periodcentered -36
KPX Acircumflex cedilla -36
KPX Acircumflex questiondown -139
KPX Acircumflex Aacute -139
KPX Acircumflex Acircumflex 57
KPX Acircumflex Adieresis 57
KPX Acircumflex AE 57
KPX Acircumflex Egrave -36
KPX Acircumflex Ecircumflex -36
KPX Acircumflex Igrave -36
KPX Acircumflex Iacute -36
KPX Acircumflex Icircumflex -36
KPX Acircumflex Ntilde -36
KPX Acircumflex Oacute -36
KPX Acircumflex Otilde -36
KPX Acircumflex multiply -36
KPX Acircumflex Ugrave -36
KPX Acircumflex Ucircumflex -36
KPX Acircumflex Yacute -36
KPX Acircumflex Thorn -36
KPX Acircumflex acircumflex -36
KPX Acircumflex Dcaron -36
KPX Acircumflex dcaron -36
KPX Acircumflex Dcroat -36
KPX Acircumflex dmacron -36
KPX Acircumflex Emacron -36
KPX Acircumflex emacron -36
KPX Acircumflex Hcircumflex -159
KPX Acircumflex hcircumflex -36
KPX Acircumflex Hbar -159
KPX Acircumflex hbar -36
KPX Acircumflex Kcommaaccent -112
KPX Acircumflex kcommaaccent -83
KPX Acircumflex kgreenlandic -159
KPX Acircumflex Lacute -139
KPX Acircumflex lacute -159
KPX Acircumflex uni01F0 -36
KPX Acircumflex uni01F1 -36

KPX Adieresis dollar 57
KPX Adieresis ampersand -36
KPX Adieresis asterisk -36
KPX Adieresis two -36
KPX Adieresis four -36
KPX Adieresis seven -159
KPX Adieresis nine -131
KPX Adieresis colon -112
KPX Adieresis less -159
KPX Adieresis F -36
KPX Adieresis G -36
KPX Adieresis H -36
KPX Adieresis I -73
KPX Adieresis R -36
KPX Adieresis T -36
KPX Adieresis W -36
KPX Adieresis Y -120
KPX Adieresis Z -83
KPX Adieresis backslash -139
KPX Adieresis m -73
KPX Adieresis copyright -36
KPX Adieresis ordfeminine -36
KPX Adieresis guillemotleft -36
KPX Adieresis logicalnot -36
KPX Adieresis sfthyphen -36
KPX Adieresis acute -36
KPX Adieresis mu -36
KPX Adieresis paragraph -36
KPX Adieresis periodcentered -36
KPX Adieresis cedilla -36
KPX Adieresis questiondown -139
KPX Adieresis Aacute -139
KPX Adieresis Acircumflex 57
KPX Adieresis Adieresis 57
KPX Adieresis AE 57
KPX Adieresis Egrave -36
KPX Adieresis Ecircumflex -36
KPX Adieresis Igrave -36
KPX Adieresis Iacute -36
KPX Adieresis Icircumflex -36
KPX Adieresis Ntilde -36
KPX Adieresis Oacute -36
KPX Adieresis Otilde -36
KPX Adieresis multiply -36
KPX Adieresis Ugrave -36
KPX Adieresis Ucircumflex -36
KPX Adieresis Yacute -36
KPX Adieresis Thorn -36
KPX Adieresis acircumflex -36
KPX Adieresis Dcaron -36
KPX Adieresis dcaron -36
KPX Adieresis Dcroat -36
KPX Adieresis dmacron -36
KPX Adieresis Emacron -36
KPX Adieresis emacron -36
KPX Adieresis Hcircumflex -159
KPX Adieresis hcircumflex -36
KPX Adieresis Hbar -159
KPX Adieresis hbar -36
KPX Adieresis Kcommaaccent -112
KPX Adieresis kcommaaccent -83
KPX Adieresis kgreenlandic -159
KPX Adieresis Lacute -139
KPX Adieresis lacute -159
KPX Adieresis uni01F0 -36
KPX Adieresis uni01F1 -36

KPX AE dollar 57
KPX AE ampersand -36
KPX AE asterisk -36
KPX AE two -36
KPX AE four -36
KPX AE seven -159
KPX AE nine -131
KPX AE colon -112
KPX AE less -159
KPX AE F -36
KPX AE G -36
KPX AE H -36
KPX AE I -73
KPX AE R -36
KPX AE T -36
KPX AE W -36
KPX AE Y -120
KPX AE Z -83
KPX AE m -73
KPX AE copyright -36
KPX AE ordfeminine -36
KPX AE guillemotleft -36
KPX AE logicalnot -36
KPX AE sfthyphen -36
KPX AE acute -36
KPX AE mu -36
KPX AE paragraph -36
KPX AE periodcentered -36
KPX AE cedilla -36
KPX AE Acircumflex 57
KPX AE Adieresis 57
KPX AE AE 57
KPX AE Egrave -36
KPX AE Ecircumflex -36
KPX AE Igrave -36
KPX AE Iacute -36
KPX AE Icircumflex -36
KPX AE Ntilde -36
KPX AE Oacute -36
KPX AE Otilde -36
KPX AE multiply -36
KPX AE Ugrave -36
KPX AE Ucircumflex -36
KPX AE Yacute -36
KPX AE Thorn -36
KPX AE acircumflex -36
KPX AE Dcaron -36
KPX AE dcaron -36
KPX AE Dcroat -36
KPX AE dmacron -36
KPX AE emacron -36
KPX AE Hcircumflex -159
KPX AE hcircumflex -36
KPX AE Hbar -159
KPX AE hbar -36
KPX AE Kcommaaccent -112
KPX AE kcommaaccent -83
KPX AE kgreenlandic -159
KPX AE lacute -159
KPX AE uni01F0 -36
KPX AE uni01F1 -36

KPX Egrave less -36
KPX Egrave m -36
KPX Egrave braceright -36
KPX Egrave lacute -36

KPX Icircumflex less -36
KPX Icircumflex m -36
KPX Icircumflex braceright -36
KPX Icircumflex lacute -36

KPX Eth dollar -36
KPX Eth nine -36
KPX Eth less -112
KPX Eth m -36
KPX Eth braceright -36
KPX Eth Acircumflex -36
KPX Eth Adieresis -36
KPX Eth AE -36
KPX Eth kgreenlandic -112
KPX Eth lacute -112
KPX Eth uni01F4 -112

KPX Ograve dollar -36
KPX Ograve nine -36
KPX Ograve less -112
KPX Ograve m -36
KPX Ograve braceright -36
KPX Ograve lacute -112

KPX Yacute bracketleft -36

KPX agrave seven -73
KPX agrave less -102
KPX agrave m -36
KPX agrave braceright -36
KPX agrave Hbar -73
KPX agrave lacute -102

KPX ucircumflex dollar 47
KPX ucircumflex two -73
KPX ucircumflex seven -282
KPX ucircumflex eight -102
KPX ucircumflex nine -225
KPX ucircumflex colon -188
KPX ucircumflex less -272
KPX ucircumflex H -36
KPX ucircumflex R -36
KPX ucircumflex X -36
KPX ucircumflex backslash -188
KPX ucircumflex ordfeminine -36
KPX ucircumflex guillemotleft -36
KPX ucircumflex logicalnot -36
KPX ucircumflex sfthyphen -36
KPX ucircumflex acute -36
KPX ucircumflex mu -36
KPX ucircumflex paragraph -36
KPX ucircumflex periodcentered -36
KPX ucircumflex cedilla -36
KPX ucircumflex guillemotright -36
KPX ucircumflex onequarter -36
KPX ucircumflex onehalf -36
KPX ucircumflex threequarters -36
KPX ucircumflex questiondown -188
KPX ucircumflex Aacute -188
KPX ucircumflex Yacute -36
KPX ucircumflex Hbar -282
KPX ucircumflex Idot -102
KPX ucircumflex dotlessi -36
KPX ucircumflex lacute -272

KPX ydieresis dollar 47
KPX ydieresis two -73
KPX ydieresis seven -282
KPX ydieresis eight -102
KPX ydieresis nine -225
KPX ydieresis colon -188
KPX ydieresis less -272
KPX ydieresis H -36
KPX ydieresis R -36
KPX ydieresis X -36
KPX ydieresis backslash -188
KPX ydieresis ordfeminine -36
KPX ydieresis guillemotleft -36
KPX ydieresis logicalnot -36
KPX ydieresis sfthyphen -36
KPX ydieresis acute -36
KPX ydieresis mu -36
KPX ydieresis paragraph -36
KPX ydieresis periodcentered -36
KPX ydieresis cedilla -36
KPX ydieresis guillemotright -36
KPX ydieresis onequarter -36
KPX ydieresis onehalf -36
KPX ydieresis threequarters -36
KPX ydieresis questiondown -188
KPX ydieresis Aacute -188
KPX ydieresis Yacute -36
KPX ydieresis Hbar -282
KPX ydieresis Idot -102
KPX ydieresis dotlessi -36
KPX ydieresis lacute -272

KPX Abreve O -193


KPX Edotaccent dollar -83
KPX Edotaccent ampersand -102
KPX Edotaccent seven -149
KPX Edotaccent nine -112
KPX Edotaccent colon -83
KPX Edotaccent less -131
KPX Edotaccent D -45
KPX Edotaccent H -92
KPX Edotaccent R -92
KPX Edotaccent X -92
KPX Edotaccent backslash -112
KPX Edotaccent m -112
KPX Edotaccent braceright -36
KPX Edotaccent cent -45
KPX Edotaccent sterling -45
KPX Edotaccent currency -45
KPX Edotaccent yen -45
KPX Edotaccent brokenbar -45
KPX Edotaccent section -45
KPX Edotaccent ordfeminine -92
KPX Edotaccent guillemotleft -92
KPX Edotaccent logicalnot -92
KPX Edotaccent sfthyphen -92
KPX Edotaccent acute -92
KPX Edotaccent mu -92
KPX Edotaccent paragraph -92
KPX Edotaccent periodcentered -92
KPX Edotaccent cedilla -92
KPX Edotaccent guillemotright -92
KPX Edotaccent onequarter -92
KPX Edotaccent onehalf -92
KPX Edotaccent threequarters -92
KPX Edotaccent questiondown -112
KPX Edotaccent Aacute -112
KPX Edotaccent Egrave -102
KPX Edotaccent Icircumflex -102
KPX Edotaccent Yacute -92
KPX Edotaccent Hbar -149
KPX Edotaccent dotlessi -92
KPX Edotaccent lacute -131

KPX edotaccent F -45
KPX edotaccent G -36
KPX edotaccent H -45
KPX edotaccent J -36
KPX edotaccent K -36
KPX edotaccent P -36
KPX edotaccent Q -36
KPX edotaccent R -45
KPX edotaccent T -36
KPX edotaccent U -36
KPX edotaccent bracketleft -55
KPX edotaccent m -73
KPX edotaccent copyright -45
KPX edotaccent ordfeminine -45
KPX edotaccent guillemotleft -45
KPX edotaccent logicalnot -45
KPX edotaccent sfthyphen -45
KPX edotaccent threesuperior -36
KPX edotaccent acute -45
KPX edotaccent mu -45
KPX edotaccent paragraph -45
KPX edotaccent periodcentered -45
KPX edotaccent cedilla -45
KPX edotaccent Eacute -45
KPX edotaccent Idieresis -45
KPX edotaccent Ntilde 72
KPX edotaccent Yacute -45
KPX edotaccent aacute -36
KPX edotaccent Cdotaccent -36
KPX edotaccent edotaccent -36
KPX edotaccent ecaron -36

KPX Ecaron dollar -83
KPX Ecaron ampersand -102
KPX Ecaron seven -149
KPX Ecaron nine -112
KPX Ecaron colon -83
KPX Ecaron less -131
KPX Ecaron D -45
KPX Ecaron H -92
KPX Ecaron R -92
KPX Ecaron X -92
KPX Ecaron backslash -112
KPX Ecaron m -112
KPX Ecaron braceright -36
KPX Ecaron cent -45
KPX Ecaron sterling -45
KPX Ecaron currency -45
KPX Ecaron yen -45
KPX Ecaron brokenbar -45
KPX Ecaron section -45
KPX Ecaron ordfeminine -92
KPX Ecaron guillemotleft -92
KPX Ecaron logicalnot -92
KPX Ecaron sfthyphen -92
KPX Ecaron acute -92
KPX Ecaron mu -92
KPX Ecaron paragraph -92
KPX Ecaron periodcentered -92
KPX Ecaron cedilla -92
KPX Ecaron guillemotright -92
KPX Ecaron onequarter -92
KPX Ecaron onehalf -92
KPX Ecaron threequarters -92
KPX Ecaron questiondown -112
KPX Ecaron Aacute -112
KPX Ecaron Egrave -102
KPX Ecaron Icircumflex -102
KPX Ecaron Yacute -92
KPX Ecaron Hbar -149
KPX Ecaron dotlessi -92
KPX Ecaron lacute -131

KPX ecaron F -45
KPX ecaron G -36
KPX ecaron H -45
KPX ecaron J -36
KPX ecaron K -36
KPX ecaron P -36
KPX ecaron Q -36
KPX ecaron R -45
KPX ecaron T -36
KPX ecaron U -36
KPX ecaron bracketleft -55
KPX ecaron m -73
KPX ecaron copyright -45
KPX ecaron ordfeminine -45
KPX ecaron guillemotleft -45
KPX ecaron logicalnot -45
KPX ecaron sfthyphen -45
KPX ecaron threesuperior -36
KPX ecaron acute -45
KPX ecaron mu -45
KPX ecaron paragraph -45
KPX ecaron periodcentered -45
KPX ecaron cedilla -45
KPX ecaron Eacute -45
KPX ecaron Idieresis -45
KPX ecaron Ntilde -36
KPX ecaron Yacute -45
KPX ecaron aacute -36
KPX ecaron Cdotaccent -36
KPX ecaron edotaccent -36
KPX ecaron ecaron -36

KPX Gdotaccent dollar 38

KPX Gcommaaccent dollar 38

KPX Hbar dollar -159
KPX Hbar ampersand -120
KPX Hbar seven -36
KPX Hbar D -339
KPX Hbar F -348
KPX Hbar H -348
KPX Hbar L -63
KPX Hbar R -348
KPX Hbar U -301
KPX Hbar V -339
KPX Hbar X -311
KPX Hbar Z -339
KPX Hbar backslash -319
KPX Hbar m -188
KPX Hbar braceright -112
KPX Hbar cent -339
KPX Hbar sterling -339
KPX Hbar currency -339
KPX Hbar yen -339
KPX Hbar brokenbar -339
KPX Hbar section -339
KPX Hbar copyright -348
KPX Hbar ordfeminine -348
KPX Hbar guillemotleft -348
KPX Hbar logicalnot -348
KPX Hbar sfthyphen -348
KPX Hbar acute -348
KPX Hbar mu -348
KPX Hbar paragraph -348
KPX Hbar periodcentered -348
KPX Hbar cedilla -348
KPX Hbar guillemotright -311
KPX Hbar onequarter -311
KPX Hbar onehalf -311
KPX Hbar threequarters -311
KPX Hbar questiondown -319
KPX Hbar Aacute -319
KPX Hbar Egrave -120
KPX Hbar Eacute -348
KPX Hbar Icircumflex -120
KPX Hbar Idieresis -348
KPX Hbar Yacute -348
KPX Hbar edotaccent -301
KPX Hbar ecaron -301
KPX Hbar gdotaccent -339
KPX Hbar gcommaaccent -339
KPX Hbar Hbar -36
KPX Hbar dotlessi -311

KPX Idot equal -36
KPX Idot Ldot -36

KPX lacute dollar -159
KPX lacute ampersand -112
KPX lacute two -112
KPX lacute D -282
KPX lacute H -272
KPX lacute L -73
KPX lacute R -272
KPX lacute X -235
KPX lacute m -225
KPX lacute braceright -149
KPX lacute cent -282
KPX lacute sterling -282
KPX lacute currency -282
KPX lacute yen -282
KPX lacute brokenbar -282
KPX lacute section -282
KPX lacute ordfeminine -272
KPX lacute guillemotleft -272
KPX lacute logicalnot -272
KPX lacute sfthyphen -272
KPX lacute acute -272
KPX lacute mu -272
KPX lacute paragraph -272
KPX lacute periodcentered -272
KPX lacute cedilla -272
KPX lacute guillemotright -235
KPX lacute onequarter -235
KPX lacute onehalf -235
KPX lacute threequarters -235
KPX lacute Egrave -112
KPX lacute Icircumflex -112
KPX lacute Yacute -272
KPX lacute dotlessi -235

EndKernPairs
EndKernData
EndFontMetrics
        FFTMs  ,   GDEFe;X&  H   tGPOS    jGSUBF
  (  OS/2&  "0   Vcmap_*  "  6cvt I*  8  fpgmq49j  :D   gasp    :   glyf  : head      6hhea	 !   $hmtx !8  loca8 ;(  3maxp n    namet6l o  !Bpostm `  {prepLQ3          =    )    )       l           { |                    
   DFLT &arab 0cyrl >grek Plao  \latn h                 
 SRB  
                   4 ISM  4KSM  4LSM  4MOL  4NSM  4ROM  4SKS  4SSM  4     mark mark &mark .mkmk 4                       	   $ , 4 < D L T    H    n          	   
                  "    j         j  &   0     j: j               jQ ]j jh         $ 6 H Z l ~      P <    x      P <    <     | @     4X     P <    p       ~           j ~ j j       $*06<BHNTZ`flrx~ &,28>DJPV\bhntz
"(.4:@FLRX^djpv| $*06<BHNTZ`flrx~ &,28>DJPV\bhntz
"(.4:@FLRX^djpv|  l @L h \h <X Xx Xx < d l Xx Xx . , L P X @       X{  D ? W s \s X{ < ([  X{ X{ T   X{      .  ? 5J Tj s Np m 6 O ?6 u  \ P M. \ : . P Nj Lj [ Z [j Ij W T Lj 4j K ] L @ j Vj 8 8 j bj t  @ x   v X T  , d( h  H h4     L B ,j ,j 2 ) ,j ,j Td Td d Td Lp p O _   i  9; ]O  ] ] k eg 5g IK j k  !_ 9k !_ !_ !_ !_ !_ !_    s   Y =g   Uw %k [ [ [ [       yk ]k   yk Ak    a   a a a A a = a 1 a %   a a   a a / K  Y M 5  a K K eo } QG / { ]o  O G ? ek   ] k  is    \ T , i T Y< d X{     E / J> P p  
WW  [{  "  3#& o), s<< wC x    ~           j ~ j j           $ 6 H Z l ~     h  U    h  E    h  c    h  G    h      h      h      h        	|} 	   &   ,   2   8   >   D   J   P   V j  h jQ ]j j\ jh j  jJ h  
   &,28>DJPV\bhntz
"(.4:@FLRX^djpv| $*06<BHNTZ`flrx~ &,28>DJPV\bhntz
"(.4:@FLRX^djpv| $*06<BHNTZ`flrx~  b z b 2_ b VS  ; C k k  k    2   zo . 2  r b rw   > * {  v & # _  BC bO &c n k k k k } <  x x  % i F W W  @ T T [ : B ` ^ L ?c : E s [ T v  ; ] 4 8 x,     X & ( o   X  o  X l o P Xd T o  X O J B <E x  K     U       T T  T R lb O W  & Z Zs { ;  # 7f k f  *  * .  z "/ *3   [ c   k  : B o  :s 6   2 C   2 > ^    n     ~ * 6 . Zw .k ~ B VK O                    2 
 G h 8 p B h< U= 7 ~ e < P L #j _
  3 8   ~ ~    {    ) K  p r  f { +    > V ; '    o "? 4  W  WW  Y{  $  5#& q), u<< y?B zE ~    	|} 	   &   ,   2   8   >   D   J   P   V j  h jQ ]j j\ jh j  jJ h     ~ 
"(.4:@FLRX^djpv| $*06<BHNTZ`flrx~ &,28>DJPV\bhntz h h  6 z   h h  h  h h h h h 6 h h h h h h h  h` h ` h g` h h` h  2 h` h` h` h` h` h` h` h h` h` h` h` h` h` z h` h h` h h` h h` h  h h` h h 6 h` -` `  ` h` h h` h` h` g` h` h` h` h` h` h` h` h` h` h` ` h` h` h h` h` h` h` h` h` h` h` ` h` h` ` h` ' }{ g f i d 
 i d 6 h h h h h` h  h h A `  h k  " $ =   D K  N ] "   2   3   4   5 6 8BB :HH ; < = > @ B C D Eow Fy O e g i j k n o p r s u w y         V   \   b   h   n   t   z                                           h` h` h` h` h` h` h` h` h` h` h` h` h` h` h` h` h` h` h` h` h`   /          n t z                      
"(.4:@FLRX^djpv|                                                                                                                    >  D  J  P  V   \   b  h   n  t  z         `                          
 N DFLT &arab 2cyrl Fgrek Xlao  blatn l                      SRB  
                   F CAT  PESP  PGAL  PISM  XKSM  XLSM  XMOL  bNSM  XROM  bSKS  XSSM  X                     	case 8dlig >fina Dinit Jliga Plocl Vlocl \medi brlig h                                      	   $ , 4 < D L T     H     L  	  V  	    	 Z  	   	     6    N      
    Jp  p 5>@BDFJLPRVZ^bfhjlnrvz~
$*"  Xp  r{  # 4  T 'HNTX\`dptx|(  &,  \\  ^^ `d ip rx z{   "  T 'GMSW[_cosw{'%+  \\  ^^ `d ip rx z{   "    
    J   J    >  
 $     D @ >     D @ >           O  L   I      c       3  3   f  	 &   (    PfEd    m`              ,   
  4     ,     ,  
  4         ~!AEM?CXaw_csV_
:UZmt{?	.<[ex{-McyEMWY[]} 
 # & 7 : ? I K _ q     !!!!!!!"!$!&!+!.!H!Q!_!""" "#"-"="i""""""""####!#(#+#z#}#####$#&/&&&&''	'''K'M'R'V'^'u'''''''''))))* */*k++,d,p,w,z,...%..'t       $CLP CXatzbr1Ya	!@Z`ty~?,0>bw{ 0Th|  HPY[]_    & / 9 < E K _ p t    !!!!!!!"!$!&!*!.!H!P!S!!"""#"'"4"A"m"""""""# ####%#+#5#}#####$#% &8&&&'''')'M'O'V'X'a'''''''''))))* */*j++,d,m,u,y,|...".."Rpv  qiWUQPONM?=/	IHG?:761-("
s21/.,&%$#" qmkea_^[QOKIA?531/-'%#!	 zywsrqnlSLK"	3WOKH:d*D<876ݞݘݖݎddddNdMd5cy?-                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  ~           b                            !    $  A    C  E    L  M    P          `      g      k      s      |                 ?    C  C    X  X    a  a    t  w    z                                      _  /  b  c    r  s                                                                1  V    Y  _    a    &      M      O  	  
  Q      S      T      U      V  !  :  W  @  U  q  Z  Z    `  m    t  t    y  {    ~                                                                  ?  ?                                                                                                      	                      ,  .    0  <    >  [  '  b  e  E  w  x  I  {  {  K      L      M      j       q    -    0  M    T  c    h  y    |                                                    	                              %       '      =     E  C  H  M  i  P  W  o  Y  Y  w  [  [  x  ]  ]  y  _  }  z                                                 
        #     &   &  /   /   7  0   9   :  9   <   ?  ;   E   I  ?   K   K  D   _   _  E   p   q  F   t     H        c        p                  !  !    !  !    !  !    !  !    !  !    !  !    !"  !"    !$  !$    !&  !&    !*  !+    !.  !.    !H  !H    !P  !Q    !S  !_    !  !    !  "    "  "  0  "  "   1  "#  "#  ;  "'  "-  <  "4  "=  C  "A  "i  M  "m  "  v  "  "    "  "    "  "    "  "    "  "    "  "    "  "    #   #    #  #    #  #    #  #!    #%  #(    #+  #+    #5  #z    #}  #}  	6  #  #  	7  #  #  	;  #  #  	?  #  #  	@  #  #  	T  $#  $#  	V  %   &/  	W  &8  &  
  &  &  
  &  &  
  &  &  
  '  '  
  '  '	  
  '  ''  
  ')  'K    'M  'M  3  'O  'R  4  'V  'V  8  'X  '^  9  'a  'u  @  '  '  U  '  '  V  '  '  n  '  '  }  '  '  ~  '  '    '  '    '  '    '  '    )  )    )  )    )  )    )  )    *   *     */  */    *j  *k    +  +    +  +    ,d  ,d    ,m  ,p    ,u  ,w    ,y  ,z    ,|  ,    .  .    .  .    ."  .%    ..  ..                "  '                                        R                !      #      '      )  p  t  -  v    2             Z Z   
                                                                       	 
                        ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a                                  + r d e i- x  p k v jl  8 spq g w-+@ l |    c n4TT" m }/ b   '(#$ 
! :  |9:, y%)1                  gy quvw zzxh  3#      N \ {#'## \#  \    \ w#3  b# # \  b     b  b                 %  %1 /#  /
9 b R      s       q   # o  V   d\H f```{   \{ `     o  7L       '  5% = {   D =   ! /  s     , %Id@QX Y!-,%Id@QX Y!-,   Py PXY%%#  Py PXY%-,KPX EDY!-,%E`D-,KSX%%EDY!!-,ED-,%%I%%I` ch #:e:-         hh   @ b /1 0!%!!h sr)     	 @ d 
<2991 /0!!!#!#qe       @ d 1 <20!!!   ++       J@0g 	g
	  91 /<<<<<<<2220333#3!####5!#5!#3_^aJ^^^^J^Jvuu%v     D   / P@+ )%$(hh!/$, (  0<21 /<22290>54&#.'.546753.'?FE>??ˍWggU̹GP>[ٴ	O=>O-C:9L-.+=BI' (0Ϭ	  !      ' 3 V@-(	(kk	kj.k%1" +1"" 499991 /999904632#"&"32654&	4632#"&"32654&!?9PP9:OP)˹=8ON9:QRXO::OO:9PP`^P::OP99Q  % * 8 @Z )(*()(-,.+23456718%8+(%# 1)	#1p#popnr)($ +.# 	. 8 )$.9999999991 /99990KSX999Y"%#" 5467.54632.#">54&'3!32676767fKWꍋ20ID@APR=D9DI"BCr;H23ёXN< $%86$~f &b993V+wIz      d 1 0! +      @u t  
2991 0#&547䟚@=  5R  @u t 2991 03#6545䞛䄀=?    y9T  J@( 	
n
	 	<2<2991 <22990%#'-73%TJLLLLKLXX    B \  #@ 	v 	
<<1 <<0!!#!5!RPRP jo  @
 w
 1 0!#9co   -    1 0!!-w   o   w
 1 /0!!Mo  qB`  @	 d 1 03#m    {V   #$@	x!xn!r$ $1 0@/ /////////	/
/? ?????????	?
?O OKKKKK	K
OTTTPPPTT	T
ddd```dd	d
 	
 	
 	
T/ /////////	/
/ 	
 	
$]]4632#"&"326&32#"H45HH54H|f^^fg^^5HH54HGB~{|~       o 
 $@xxd x	 1 /20!%!!!J5JML
J/    s  '  [@/ % zyxn x 

991 /990KSX9Y"!!57 7>54&#">32uL=KByoOkk^;H5/FVAdm?<')ݿX^D   }L ( G@) p zy#pzy	pnr)	 &)91 90#32654&#">32!"&'32654&%nyynTgg\qd^xxWOS]*(!εǢ&$/1o^s}    f  u   B@ % xd	
 <291 /<290KSXY"	!!3#!!y5jB    F  <@!xzyxx dr 
 1 90!!>32  !"&'32654&#"+$R.`fSXOQ  
))u''    b  $ 5@ {{zy{"nr%	%1 90"32654&.#">32#  !2`ee``gg#OC/c..F싄--AAn       7  5@%x d 991 /0KSXY"!!!  P  # / D@% {'{-{nr'0	$*	!0991 990"32654&%.54632#"&54632654&#"hczzcc{zqvto|eWXeeXVf}gg~eg}}'yغx(&ĉ׊TXggXWef  oN  $ 7@{
z y{
{nr% "%1 9073267#"543  !"&2654&#"OC/dF7_ee_`gg.,AA i}}     '   @w w
 <21 /0!!!!MM' s'  	 "@w w

 
<21 0!#!!MNMo   X my  @  291 90	5y!     X'y   @vv  <21 0!!!!X!!  X my  @  <91 9055X!`a      )  $ q@8
	%$	
 fhn 	 !
  %<2999991 /9990KSX99Y"!!!546?>54&#">32>PZ?-\\T`beD^XD&cNY=P+CDGF89L\VBT=	  s  4 ]@1(+$	4|	|}'$|+}|+15'(  !.52991 9999904&#"326#5#"&5463254&#"  3267#   !2fYYeeYYf&gHȥGl"0PE\Qm`v4!qqrR511/)//77  !    
 @;  

  
	


% h~d		 	
KSK
QZX 
 @8Y91 /<90KSXY"@,   0000 
5::5s|] ]!!!!!hi\uZq+q   }       >@$ h
	hdh
 	 !2991 /9032654&#32654&#%!2)čqvp_anF`wyjFP\\S뽼İ     9  .@ opop	nr! 21 0%#   !2.#"32679FU>.UDLLLL+$$xy$$FAAF       u   (@ p	dp
 ! 	"99991 /0326&#!   )P<nB?
ts     J  *@ppd
p # 	2<1 /0)!!!!!J^?{y    X 	 %@p pd# 
21 /0!!!!!XBu   uj  S@! ppopnr %!1 990@]]#5!#   !2.#"326hUu?-ZL>`.DTIKsy30PQ       H  &@p d
	 "221 /<20!!!!!!'q'9+h       %  #@ pd	p 
221 /220!!!!!y))3    m  .@ opp
dr	 1 99073265!!!"&mVctl_JVX\t
4    u    a@3		% d
	 291 /<290KSXY"!!	!!u'N)Nw      @pd  1 /03!!'w/   V  {  @	
%
% 91 @
  d/<290@
	%KSXY"	]@R	)=??	

& )/708?					] ]K
TX 
   88Y!!###V`bq+sT   w  X 	 S@% d&& 
991 /<2990KSXY"]@	] ]!!!!w=^=+=  \u   #@p pnr	!!'1 0"326& !   !  hqhhqrhh		xx    {   ,@p p	d
 ! 	299991 /032654&#%! !#!yuu`5nJbyyb     \u   <@  pp	n !!'991 9990#   !  "326&			~xqhhqrhh~xL        f@6
	% p
pd 
!"29991 /<9990KSX9Y"!&'&+!! 32654&#',A/Ok^ yihz	A^y暶
i_mm^    V ' p@>' '  '%' 
o!p
	opnr(' $	($"(99991 90KSX99Y".54$32.#"!"&'32654&'ߞge_`krSohvlmxPLU/.CFVP>Q10Bڦ541TRcYCe   Z  w  @pd  1 /20)!!!  jf  *@	 pr
d	 1 299990!3265!! j'reer''ppR     9    m@%    % d KSK
QZX  @8Y91 /290KSXY"@    

] ]%!!!h)g)+        @@	
	
	


  %
 d
	 /91 /<<90KSXY"]@6fe

	)&ghj	fgwzsx] ]!3!!!kT;H+      @C   	


	%	d 	
 KSK
QZX  @8Y91 /<290KSXY"@ 
	
] ])	!	!	!V11X%!      S@(   % d  	9991 /290KSXY"!	!!>"#>3XwL   s   	 8@%p dp  
991 /0KSXY"!!!5!Lw#    $@u t 1 0!#3!Z  oB`  @	 d 991 0	#Nm    /+   @u t 991 0!53#5+޾  9  @
 d91 290	#	#--        /1 0!5/۾     f  " 1 K	TKT[X   @8Y0	#fx     ^T{ 
 % @/	  ggh g#r #	.)&22991 /99990@-400 4!urr 
 	
]"326=%!5#"&546!354&#"5>3 ZMt#5d
gdikapTfLZq}JPʵĻ1GI5:(&   w   6@	h	hrt 20221 /9904&#"326>32#"&'!!Rl__nn__lh6Ze.$-6]]ba   %}  .@ yhyh	r 7521 0%#   !2.#"3267%Jb&ZS@RUB9++89*,7;9:   Z;   6@ hhrt 2)221 /990!!5#"3232654&#"$/eZl__nn__lSab40]   \}{   L@# h yh	r .)1 90@]%#   32 !3267.#"Nfv	ekspex7**->w:?itw{q    ;  4@ t	 
<<2991 /22990!!!!5!546;#"XB/bNʜ0    bXH}  ( I@(	&'	hyhh#')& 2 ))221 999904&#"326!"&'326=#"325!#r]\qq\]r%\]S[|v+f`+%B.,u|yPN,
8ZR       /  .@	 ht
 7	521 /<99990!4&#"!!>32/ENPZ#j)yh}]f     	  *@
 
s 
<<1 /20!!!5!!!!Dlm%`     XR   7@	 

s 	<2991 990%#!53265!5!5!!RbRN%+nTV        @@!	% t
	. 5291 /<90KSXY"!!	!!%`cXd}^B`T   Z  F  %@ t
	 991 /990!5!;!"&NRbѶ`n     R  { " @'	 h  :=:=:#K
TKT[X  @8Y91 /<<<299990@7      	 
 /////////??	?
???????]>32#4&#"#4&#"#3>32!fJo&22((22&nDDpGD}TV{1{VT}1`tBMQ    /{  0@	 h
 7	521 /<99990!4&#"!!>32/ENO[#j)zi~`]f     bo{   #@h hr	.)1 0"32654& 32  #" hixxijxx==  Vw{   9@ hhr2 0221 990%!!>32#"&4&#"326$.eZbl__nn__l
ab]񢸸     ZV;{   5@	h	hr2 )221 99032654&#"#"325!!l__nn__l6Ze/$1^]04ba   #  {  )@	
 h
	 21 /990.#"!!>320M]&%+w<s4+,,A>&ln``i    +{ ' @=	
%	

yh yh%r(	 >7"5(99991 990KSX99Y"(! ]@+   $))	)
)))),//,))))) (!$'].#"#"&'32654&/.54632QXbdTema^gjKQ_= 4598P2&## 7:<98<"&  o  1  1@ 
	 <<2991 /<2990!!;#"&5!5!IUKA>  %`  0@	 hr
	7 521 /299990!3265!!5#"&%DOOY%iTyh~]f  P  `  i@%   %  1/91 /290KSXY"X]@U
 Z UUY] ]	!!)``j     `  @@	
	
	


  %
 
	 /91 /<<90KSXY"h	]@@
 	
)&')96k	cw xuy  ] ]333!!ywꈇ`5ZF  7  `  @B  
	
 

	%
 
	 1/91 /<290KSXY"	]@	
			96] ]	!!	!yV`yHN    ;X`  w@A

 	     


%	 
	 1/91 29990KSX9Y"+5326?!!;vwZT+V4 4y=o<A)      9` 	 8@%  6 /
2991 /0KSXY"!!!5!MiN``     $ ^@0%	 ! 	 	t%	
$  
%<<299999991 99999990#"&=4&+5326=46;#"3k>>k{hFb~~bFhחsrݓTѥ͐U      t 1 0#    ! $ `@1%   #t%#  %<2<99999991 99999990326=467.=4&+532;#"+yhHb}~aGiym>>mVͤэVחstݔ   Xy+  +@  1 9990#"'&'.#"5>32326yKOZqMg3NJNS5dJt]F+<73
":?=6
7=    `  	  @ d
 
<2991 0!!!3!#E+e       ! F@&	yh yhr" -/"<<<221 2<220.'>7#& 5 738x?@w84xC=ur{~5*1L0+" : 9!   w  b  >@ 
z yhnx	 <<1 /222990.#"!!!!3#535632N9EjcPS)+N      ^T  / c@8 	*(-'!	)-0)'!$* ( $0229991 2299904&#"3267'#"&''7.5467'7>32;dJIeeIJd$P0'T-)S.'QIccIJffq)S,/Q$*S)/Q&       u@<   %	 d	
 229991 /2<2<290KSXY"!	!3!!!!!5!'!53>"#>VddVX𻗽J       @
  <21 0##
 
    =%  > y@C/0*1 06'f&*f#ff<n#?130/-	  0-	6&-? 	??9?&3?9999991 9990>54%.#"#"&'532654/$5467.5463271a71|U6LU	v_fFAѺYUUIMRhaG@ЬJX$E(6X`$E+Ql:4Ki
neY/2{Q95Fs^!2xR    -;1   @
  1 <203#%3#u1      }N  1 I D@% 
>2>&JDB  C8B ,/21 0.#"3267#"&546322#"&'.5467>"3267>54&'.P4[0akjb5`*7j2ʩ7iZZ\[[[~}[[[\ZZ~cIGHHGGcdFHHHHHh__g$ZZ[~}[[[[[[}~[ZZGIGebHHIIHHbeGIG    
 % ) d@4 $#(&$& n*& (' #*229991 999905#"326#"&546;54&#"5>32#!!fmd=6Vn2yN[[R@ILP4818g96u11!"@w   w #   -@	 	 U
U<2991 <299055++#  Xjy  @v 	 1 0!#!X!,    -    1 0!!-w    }N    4 L \@3-*+'0!5 2+A M*',$0-!1E3+E$CGB3C;B/29991 <99902#"&'.5467>#32654&'2#'.'##%"3267>54&'.hZZ\[[[~}[[[\ZZb@@998(NG&7O?9) cIGHHGHccGHHHHHNZZ[~}[[[[[[}~[ZZb((+)oXZAU81:/qGIGebJGHHGJbeGIG -X    1 0!!-w  V   @ n@@1 02#"&546"32654&hCz//12.0zDHdbHHdc30/xDBz./3dHHbcGHd  X  y   *@v 	v 	
<2<21 /<<0!!#!5!!!fff!bb     2@  ^91 90!!567 54&#"5>32f3Z:WK8MKB6-+KO4<#"}o~*    ( D@&  #	) ^&^)91 90#532654&#"5>32#"&'532654&FooJUOFEDECibouKJCPU_b2,-3teI^p\y@8=D    
f  " 1 K	TKT[X   @8Y0!#f   T`   G@'	hr 
! 		7 5!2991 2<<990!3265!3267#"&'#"&'RRQP!+J#H[%nF;STXrsrsG>KSNP/0    F;)  "@ d 91 290!###.54$!fN۲   w 
 1 0!!M  oo3     9 
 )@ 		^ 1 2035733!9x-+)N        0@ n
 
991 0!!4632#"&"32654&%PŦçkIUUIIUUV޾~mm}}mm~   \#   -@
  U
U <<991 <29905-5-++#wvwv /w{'H V' {    /w{' { &   t V /w'H V' u     p`  % x@<
	%%	
f h&#	 !
  &<<9999991 9990KSX99Y"!!!3267#"&546?>54765>PZ=-\\SabeD^XB&EocMY;Q,CDGF89L\V@T?    !  k& $    u @]1    !  k& $    u @]1    !  k& $    u 
+@ ]1   !  m& $    u $
+@O$@]1   !  k& $    u  
+@p?0/  
]1    !  m   ! @M   !    !% h i ~!  

"999991 /<9990KSXY" ]@\   !000 0!o    !!' )!;44 ;!t |! ! !] ]	!!!.54632%32654&#"!/\uZ,*uv*N57MN65Nsq%a=uu>_6MM66MMA         c@3%php dp~	%
 /<291 /<20KSXY"!!!!!!#36Vfnj{ o9&u  &       Jk& (   u   Jk& (   u   Jk& (   u   Jk& (   u   %k& ,    u   %k& ,    u   %k& ,    u +1     %k& ,    u +K
SKQZX  @ 88Y1     u   9@h pdp 	! "/<29991 /2203#326&#!   )#53P<nBĉr
ts   w  Xm& 1    u # +@O#@]1   \uk& 2    u @]1    \uk& 2    u @]1    \uk& 2    u +@ ]1   \um& 2    u 1"+@O1@"]1   \uk& 2    u 	+1    w Xs  0@
 	
	 <291 <290		'	7	XJJGJHJHH   	  ) s@>)*
	 '$($p$pn$r*(!
	 '!)!!!'*.99999991 999999903264&'.#".5 !27 !"&''U8rh9N4pi##	g=q''j@xb9=>5	33X>=s^xCBr    jfk& 8    u @]1    jfk& 8    u @]1    jfk& 8    u +@ ]1   jfk& 8    u 
+1     k& <    u    {   0@h h	d !
 	2299991 /032654&#!3 !#!ytu`'n5nIbxyd     2 X@2)# ,2&h&h/tr*   # A ).+/399991 /990#"&'532654'&/.5467.#"!4632
}taRP=|C:s6IUsV;<	b\^`#[Q@Y
J>^ C:HXD0M~JIebf    ^Tf& D   C     ^Tf& D   v     ^Tf& D  g   	@?&/&]1    ^T9& D  y     ^T1& D   j     ^T& D  w      {   A @K.4,;5#Aggy 451g8g,>8& rB #;-, 4T)- RB<99991 2222999990@'33040536G3G4G5G6YYYYW3W6A]5#"326554&#"!3267#"&'#"&546;54&#"5>32>32IWY@=?=2??2=d_<x;2}Sg*)bLNL9JJ@b}#\RNKGKVXL}^^}Ӑ;:,*TPTP3]^76''>A=B  o%}&H  F     \}f& H   C'    \}f& H   v'    \}f& H  g'  	@?/]1    \}1& H   j'      f&    C       f&    v       f&   g       1&    j      bf  ( @N (((#$%$"!"%%$%('%"! #&#h	hr#t)'& !#(%".))99991 9990KSX9Y".#"32654& #" 4 32''%'!%+1b0izwhmsudV(?7%\)B}-b2wumt{u      /9& Q  y     boh& R     bog& R     bog&g  R   +@ ]1 bo&y  R   1
++1 bo& j  R   +1  B V    $@ v
	 <<1 0!!!!!!55uK      	  + s@>+,
  )*&h&h&r,+,* #
 )#.),999999991 99999990	32654&.#".5 327 #"&''?B&hxJZ>'jy--UC./SCc:"4Im=+-yLk--w  %f& X   C     %f& X   v     %f& X  g   +@ ]1 %1& X   j   
+1 ;Xf& \   v      Vw   9@ hhrt2 0221 990%!!>32#"&4&#"326$.eZbl__nn__lab]񢸸   ;X1& \   j   ,+@!p_PO@?0/  ]1 !  N&   $   	+@	O@/ ]1 @ ]0 ^T&   D     !  k& $       ^TF& D       !o'xc   $   ^ol{'x   D   Ak& &   u pf& F   vf    }k' u &   Jf&gi  F     9k& &  d    %1& F  K    jk& &   u Gf& F  hf      u}& '   ZgcAnA1 G      @8@/  ]1       u     Z  $ F@& "	"hhrt 
2)%<<1 /<2990!5!5!3#!5#"3232654&#"2$/eZl__nn__l"ttab40]      JN&  (    @ ]0 \}&'  H       Jk& (      \}F& H  '      Jk& (      \}1& H  '    oK'x    (   \o}{'x    H     Jk& (   5u \}k& H  h 	@?/]1    ujk' yu *   bXHf&g  J     ujk& *  2    bXHF& J       ujk& *  2    bXH1& J       uj'   *   bXH' d J    @? ]0     Hk'  u +   +1    /k'u K    +1 KQX   @8Y@  O ]0         >@ 	p d
	 "<22<221 /<2<<220!!5!3#!!!#53!5'q&ن'qhQ       /  B@"
 ht 7
5<<<1 /<<299990!4&#"!#535!23!>32/ENP--ݠ#jQQ)yhGF}zz]fij      %m'  u ,   $
#+1     9&y      @ ]1    %N&   ,   +@/ ]1 @ ]0   &          %k& ,         F&        o%& ,  xB    o& L  xg      %k& ,          ` 	 @  
1 /20!!!5!!Dlm`      D@# op
pdpr	! 221 /2<22990%32765!!#"&!#3!3>?HU'(STEl9ǾMVX\::
uv43   	N     G@$ s
! <<<21 /22<220%#!53265!5!5!!!!!5!#3#ѵbRN%o 6 !nTV   m!k' @u -   +1   Xf&g       u0&r( .     0'  ( N      `  ?@ 	% 
	. 5291 /<290KSXY"!!	!!%`cXd`}^B`T     l' v /   Z  Fl' v O    KQX   @8Y@  O ]0   0'  ( /   Z0F&( O       'Do /   Z  'k O     ' y  /   Z  ' y  O   	@/  ]1      7@	pd 	 
 <2.9991 /903'%!%!q'p}wo    %  \  D@%
	 t
  <<99991 /99905'!5!%;!"&duK'grSbѶӦâѠn    w  Xl' v 1     /m& v Q     w0X&:( 1     0/{&@( Q     w  Xk& 1   )u   /f& Q  h$     ' Q   a      jVe  2@ pndp 21 /90+532654&#"!!>32e\\y%dR^jm;>'%~nlnˁoKN4  X/{  5@ hh 75 21 /99990+532654'&#"!!>32/[Zy'dR"#NO.-#jQQTklnz45GG~`]fij  \uN&   2   +@	O@/ ]1 @ ]0 bo&   R   +@/ ]1 \uk& 2       boF& R       \uk& 2       bof& R        D     >@!p
pd p%	 <99991 /220! )!!!";C=.{\[|478nͲɮ   {   ) 5 o@1("!% !g y3g -%gr6*0T! *R(6<991 2<22999990@  !"()]!3267#"&'#"32>32'54&#"4&#"326>c_<x<1|Ub/+dc|)\3>>2:MN;;NM:ߐ;:,*JJMG8;;B<AT#t]_~     l' v 5  #  m' v   U   0&~( 5     0{&( U       k& 5  u#  f& U  hf    Vl' v 6   +m& v V     Vk'  u 6   +f&g   V     oV&   6     o+{&   V     Vk& 6    u +f& V  h     Zow&   7     oo1'    W   Z  ww& 7   	+1   o  & W  l 1 K
SKQZX  @8Y1 @?]0  Z  w  *@pd	<<1 /2<20)#53!!!3#    o  1  A@ 	 <<<<2991 /<2<2990!!3#;#"'&=#535!5!$%UYYK !PQڶ> jfm'  u 8   -
#+@O@
]1   %9&y   X   *
 +1 jfN&   8   +@	O@/ ]1 @ ]0 %&   X   +@/ ]1 jfk& 8       %F& X       jfm& 8  wR 
 @]0   %& X  w     jfk& 8       =f& X       j_f& 8  x   o`& X  xb      r'  | :   +1      m&g  Z   +1   r'  | <   +1   ;Xm&g \   +@ ]1   k& <    u ( +@po`_PO@?0/ ]1   s  l' v =     9m& v ]     s  k& =  2      91& ]       s  k& =    u   9f& ]  h        ;  *@	t	
<991 /90)!5!546;#"B/Nʜ0A  w     >32#"&'!#535!!! &"26Ze.܊$*lnn]]bazzD        ( ?@$ h
	hdh
 	 !$'+9291 /9032654&#3264&#%!2)"#546r-qv--p_anB1F`wyjFPS뽼İ/B;ʜ      {P    w    "'!!!632
&"2\llhQlnnæ~D    +      %3264&+'3 !yuuy٢n5bbR    -     &"2>32#"&'!'lnn6Ze.ܖD]]ba   9  /@! <1 @op	 opn	r0>3   !"&'3254#"DU.>UFLLLL$$rr$$HFAAF    k    %27#  %6326;#"&#"E0-Xa\1)!Hx#@7.8"      #  %27#   !2676;#"&#"&HZy'_.#K33sV89Vl7+rU?    u          "0#547676;   !#26&0KnB'&4MFmts?    }      #";! $545676?6%3!jĈvqeH+ejyw`+
	Q2[     w    "7632!5!!5 26&"*hlʳl\lnn4D   a=n{ % /  %#"'&'&'532?654#"  32 %26&#"~}cTy`&ZQh:#?ixxijxx5?NM",f==KJ    J  +@
 21 @p
p dp/0!!!!!J^{?+B   \u   =@!	! '991 @ 
p	pnppr9905!54&#">3   !  %3267\nxLLFU	9iad__AFH$$xxٯ  }L ( >@	!!&)1 @
	pn) p) p#r)90.54$32.#";#"3267# $546ō\ggTnyynxx^dq%!(*]SOW}s^o1/$&٢  lXe   !!!+5276=!eSZVh)%C}+dl72}-    [Xv   !!#!532765!5!546;#&XT\c()obcl78TNʜ     &k (  %27#5!#  %632676;#"'&# ]*̬@<<

Za\1)}."TsCl7.R:dO          '!	!%3254hrACr%v
]u~     *  '&'&'&#"#3>32?67653hbYDG?@$$xUAAX+19y}V*4GF}]fij
4T^x       h   0!!!#"'&y&&fln.-vx       %   !!3#!!!#53y))	          !!!676&|' @MD6$wGq3=          476;#"3!	!![Zy'b+)`cXdAml75}^B`T   Z  F   3+;!"&=#53!5!
RbѶN^n^B  P     !!''7! g kd)NUTEW   R   %#"&326532653#5"&#!fJo&d((d&nppGD<}TV{D{VT}D+tBMQ     V   !+532765!!!	T0<;+<^Z4K=+=  V/{   !4&#"!!>32/ENO[#jTzi~`]f     \u       &5%63  &'&#"!3276hn-]O`	I|:3U-
Q	)4qr4(txxpOD2P_xx] ' 2  	'   R        &5%6327!#327&#"d(ECOu]rxSU+Cg//g&q+pi5x
yh     V{     327!##""327&훀꓌ixxi,<< =|erП]]          3264&#"#5476763! !#!quu0K/5Jbb'&4MFm    Vw  $   &"2"'!#776;#"3632Rlnnk
QZy'_.#\QDal7+Wy*      !&5&+!!3 3264&#',!0Ok^' yihz	  _y+暶
i_^  V (  03267# $546?>54&#">32ّLPxmlvhoSrk`_eg7eCYcRT45B01Q>PVFC ./˞  +{ '  >323267#"&546?654&#"Y_ꚨQKjg^ame㕠TdbXQ=&"<89<:7 ##&2P8954   b  x    ;Xv  & (  ;#"&5# %53232#%&'&'32'3@䨇.2\Kt8G(`@iHs@
lY265L     oX1    !!;#+532767&'&5!5!IUUZy'b+"PYKA+fl7,eHQ>       w   "#5476762'!!,0!Z{i0!H"MAM-    o  1   47676;#"!!;#"&5!5[Ry'b+)IU`mb	75gKA    ZVw   !!!!;#"&Tb'~ҭVl ' 8  '   Xh      Z  w   # #" 47#5!32654&'!wxllxQNpgfqPRmn8mO֦M     u  R   '53!"'&5!276%xliB'&&f-H9mȷn.-X       !!776&S.a)=?51JL@\M  X`   	+5326?!76&kwZT+u%p[RS4;^0"=o<A)_;;&	#O9   s     !3!!!5#53!\Uw&    4`   !3!!!57#5!!Min`  
 "  # '&5!327654'&+5!!>aEb)"'toNkIQm?tk9)qo	dn    
    %2765!! &54767675!!# J1>6n GOoNot׊<N5J߀tPcfq!	ϋ.     nHc` !  #"32767# '&54767675!!KK]``afhhgڙGMqNy45fcj6%tsޏfq!	  VI` 2  327670#"'&5476%767654'&+!5!oNt\Y<j #32dnkkegqj~[N<e$/2"0HCA(0+KJC:$&-%     s  ' $  !!5?#5!7>54&#">323+uLmT;KByoOkk^;Hu5HtAVAdm?<')ݿX^H     
 "  #!!!2! '&5!32654'&+DtKQG>OJoKKfO@tfstt_95jcf54     nHc`    2!"'&'32654'&+!!lxiGGghhf_[KKY0,fgst%)58jcf54v5    ? %  #"'&'327654'&+#5;5!3[w٣IIDFFHHY43NTB61^ׅ#*+rB`GLr!¦   QVr{    !!67632 54'&#";LL\DP22nN
o%,p\NqBA      !!+   '         I     !!!!!!!5!5!5!ffff:        !  k& $    u ^Tf& D  h       %k& ,    u   f&   h     \uk& 2    u bof& R  h     jfk& 8    u %f& X  h     jf'   & 8  j   %O' q  ;    jf& 8  '      %'      jf& 8  '      %'      jf& 8  '      %'      \}{   !  '  'j   $   ^TO' q  ;    !  & & $  j     ^TO& D  &   q  ;      N'       &        ujk' yu *   bXHf&h  J     u  k'  u .     k'  u N   \_u&x 2     b_o{&x R     \_uN&       b_o&       
k'  uy   nHcf&h  8     Xk&h     ujk' yu *   bXHf& v  J         333327653#"5##8EΝ9RJ%2:8}0qh   w  Xk'  u 1     /h& Q        k' u    f& v       k&     u g&      !  k& $       ^Tf& D       !  k& $       ^TF& D       o  Jk& (       \}f& H  '      Jk& (       \}F& H  '    o  %k& ,         f&          %k& ,         F&        \uk& 2       bof& R       \uk& 2       boF& R       =  k& 5        f& U  d      k& 5     #  F& U  d    jfk& 8       %f& X       jfk& 8       %F& X       V&   6     +{&   V     Zw&   7     o1&g  W      6R 2  >54.#"57>54.#"632]XLqKF_38@Qv;!2QP(vzS"$yhv@.5NSk7@])U_!OBN-6O' 8Xqj1    nOc{ 0  5>54&#"57>54.#"5632EUx9E|fCxK48Kj5.IG$ghFIVK&h%+?DV-JVEMB5@!,@ ~υ*CZ\0q    Hk'  u +     /k'  u K    jVe   !4&#"!!>32e^jm;>'%~oKN4     t  % -  %724#"'632#"'#67&'#"32! 26&"-h*4X|u+D=$>L׵<0$DxEEx

yaGyl$>40/-D   sX   !!#+532767!5!LSZy'b+"w#dl7,d     X9`   !!#+532767!5!MSZy'b+"N``dl7,d !  k& $       ^T1& D       oJ& (  2    \o}{& H  2    \u'  'j   2   boO' q  ;    \u& 2  '  j   boO' q  ;    \uk& 2       bo1& R       \u& 'j   2     boO' q  ;     N&   <     ;X&   \      1t     %724#"7632#"'#67&'&5!5!-h*4BX|u*J[N)
y1BXl}7&     %t{  /  %724#"7632#"'#67&'&=4'&#"!!67632$R!)$Fd{]!u	~;I?##0T`j
y1BXl+5GQt`l3!3ߨ    ot1  $  %724#"'7632#"'#67&'&5!5!!!!V$S!*2%Fc{^"t	~;I%^j
y1BXl>     XR`  ,@	 

 	991 990%#!53265!5!RbRN+nT       -  26&" &"2>32#"&'#5#"323KMMKMM%e?Gi !hG?d&DD]]baab40]]S  J{   -   &"2 26&"#"3253>32#"&'#KMMDKMM&d?Gi !hG?e%DD]]04baab]]         !	!!#'#7'7'3'i<ʢ\BC-Z!,UK2bs{s[q^??y?R     (  	&#"# ''&5 !27&'3267}jFUן:>.UN$!7RLL_$$r1yMs~"&AF       '  '7&5 !27&'3267#"'&#"?&ZS j&*=MUBJbyBuw9~y!Z9:++~~       !3#!!#5(vb         !'!!7#7#٢/`4TTb_rBsI1\w  +{ 1  .#"#"';# /&'32654&/.54632QXbdT}<肰
a^gjKQ_= 4598P2&Pۭs 7:<98<"&     9`   !;# /&#5!j3-<肰AiN`);PۭV     $  "#"#5476767637$!!!264'&#N+0!K0DVpz==p$0"MB?~m66        '  !2)#533264&#32654&+3}}}p_ančqv׽İRPSff`wyjg         53!!!3#! '&)265U''VVvyzwRrrڇ&=pp     9     	!!!icc!+       !  ! !&5&+!#533264&#k ,!0Okٯ'Lyihz暶	  _y+Ni_^    {   .#"!!!#53!>320M]&	zcc%+w<s4+,,A>&6J`i    nd{  ,  27654'&#"!67632!#32767# &@B.,Nt@@"6RTdր~44dhccj`pP**fL--XWq}J((ʵ^]1G%$:(&   xY{    5!!5#"7632 26&"5$/JKelkZHGlnna114/.D     xY{    %!!67632#"'& &"2$/KJeklZGHblnn_a11䘘/.OD  w  $ 9@h	hr!t 2!0%22991 /04&#"326>32#"&'!463!#"Rl__nn__lh6Ze.ܵ<bS-6]]ba@n  )}  /@7 <1 @yh	 yh	r0>3   !"&'32654&#"Jb$ZS@RUB'++*,7;9:  s/}  -  %32'&#"763!"'"''47&'&76!2&'&#"96SgfQ=ZSTS@MLR9Kr]G&A,7   MM  $   26&"7!;#"'&=#"'&32nVXX"-5aHH%<;QdbɺG99D:Stnlka110/.  FO  #   26&"%!5#"32776;#"mVXX%xQ˽H99+EHa4Dab40/.] gl75    Xy{     703267!57632 !"&&'&#"ke	vԒ<<ep:97?:w喗*q=><;     \}{   ?@.	 )991 @ 	
yhhr9905!5.#">3   #" %3267\ekfv)'spexw
x:?**'twzq     { 	 3  32767#"'&'&'&#"67632?;#"'&5_-HN10w@A;hUYY^`___5!Hq;?;:n,Q`ƟVv)?!"D07o[   t ( <@!	h	)#"h&r)" 5)1 90467.54632.#";#"3267#"$jvyi;vvshydvn8yd"B6,@_B=T/$     fk{ ( \@! yh# )
	yhr)& 
)1 90	KTX ) @   ) )848Y %%]!"&'532654&+532654&#"5>32)boXrq2uhzy]=p"#(YO56E1>W   0{ A  #"&'5327654'&+5327654'&#"567632?;#"'&5'Cr?@wuJTCNOUH'NI/&XK1?@&[R>fZPOEi>	 !HZ<0=JJp\["TO E.)	O.N7o[$     ley  .   !27654'&+5327654'&%672'$*F(5:&J@*?;9Yon:8<:nmY%?H "J7#"-VWbLHIGgVV=L   X`   %#!53265!5!!5!3#RbRN+n    V  ;  "32765#"'&54763!3676;#"#!"'&'32765Y1200\Z12;HG]lkkl'RW|*TONOKHHIABwRROPRR:Gb..⡠rv..!6MM     |VU`  *  %#"'&54763)!"'&'3265"3265.=_mnnm.'VPQQMJJJ[f11_[fb\⡠!6OP:     7_ %  %#"'&7632&'&#"32767'#5!7]edk򍍐`YXOQPQPQPMN'"!e2(1YXYY  baoo    '	!!3254g>
CCN}V#L~||    bo`    %254'!!! 54f-,,CCW;HJ9SL   J*^   !32765!!#"'&#"#NP--#jQQVy44GF}\]fij      *   !4'&#"!476;#">32*#"NP--[Zy'dRjQQ)y44GF}@kln]fij    V* (  %4'&#"!476;#">32+5326#"NP--[Zy'dRjQQSZy'dR)y44GF}@kln]fij)bln   j  h    !!!3#!!5!5!5!!fDllܐ  @`   !5!#"'&5D&&fmnl.-vx    j  h`   !!5!!5!llb  Xz *  #"';!"'&=&#"567632!5!3276xJHHN6>(*bZ\NJNHJRNG=FDF+<77llu:?=
    l  e  "  &#";&;!"&=#&'&!5!!;2`3RbѶ{@'N028?pno)b̜     rD^   %!5!;!"'&N*(b\Z77ll     H .  	!;#"&5#5!!#"'&'32654'&+V$[=J휉l;S<5ssMNNMGEgm88n~Nn`L9	!qfst%)58jcf54     P` "  %#"'&326532653#5"'&!!fJ78&d((d&7788pGDdd<w1}TV{1{VT}tB&')(    PV` "  %#"'&326532653#"'&!!fJ78&d((d&7788pGDdd<w1}TV{1{VT}B&')(   PV{ 3  67632+5327654'&#"#4'&#"#367632!32K77GJc R""133267DDpF#"dddl77~)*+-y1y-+*)~1`tD$'R    @F{ '  !54'&'&'&#"+5326=!67632&\55ZYzRB'CKK[Vo77#WVyv\pb./    DF{ "  4&'&#"!!67632;#"'&5&'U<5'CKLZRSUuY_-HWK`b./wxj/.v    x  Y` 	  !!!!xI}`uu     bo{   !  7632#"'"!3&'&!#3276bzi<.%.<n|+$<ij<$ ➟]GqqG])Q7]]7   Ka 	 !  #";!!!!!!"#"322nKut::uK/;%UV$"   R    -  '"3276=3376#"'&'#"'&'&7! -
()NNYD@A@]MN,~nd6aN9[jl`-SPvogD@ED~w\  V  ' /  7675!5)!!)5!5&'%676'&s)%)׭ss))s #LLH#LL r  rr  rtr"\\"["\J\"  `   32767>5!!5#"'&'0L^EE&$,XZv<::45,,! >&ln`45        327676765!!5#"'&'0L^EE&
$,XZv<::45,,! >#9/u`45  MV` %  327676765!;#"'&'#=#"'&'M0A@M]FE&	
%()d'yZS+YYw<:945,! >&66n\67lb)`45  V{   .#"!!676320N\FF&&*ZXx<994+,,! >&lnR
`45    V{ !  .#";#"'&5!676320N\FF&(*f&xZ`&*ZXx<994+,,! >&ln%77lp7`45       J`   35!476;#"!XZT%%QP! K      J`   35!4'&+532!~$$VXZK !PQ    h  h`  +  !&'&'&+!! 32?674'&'&'&#*9
 4'$lwxHFX>W)1+B-mWF`MLtDC_(:%     A  ` 
 "  #327654'&'32767!#!!OO['(('%K-+%k322?s99nnf HI  Ga/0!GHoKJ`   V({ 8  &'&#"#"';#"'&532654'&/.54632QWXXb22TKJrq?A)d'yZ[ade^gj&%Q_^_= 48P2&TUVWS)7lk 7<98"&  [Xv   !#!53276546;#"T\c()Ccl78ʜ@  [Xv !  ##!53265!5!!5!546;#"3R[bR)B/JblnNʜ0A     [Xv   !&'&+532;!"'&B)(c[T@}87lc  ;Xv  & (  %;++5$!346;#""#"67638tK\24@5Hi@`(Yl
ʜ@L56T   J`   !5!4'&+532!!~$$VXZ>K !PQ     VJ   !!;#"'&5!5!%%TZXDK !PQ>     Xx`    !5#"&=#53!!!3)32760hRR&:&HDNP,%J]f/yhF;  U|` &  327654'&'!##" 54767#5!&@+99^_89+@LE86>OELQskXWWXksTH;l:pA   T}` $  #'&55#53!?27654'&/A;0}}o[Z%"%`D=/!D;lyx:yƩ4aXksTH   P  `   3!!Pdid`j     `   !###!!ӄ`     :     676;#"!!;RSvwZ**+ ٞIHo<)    D  `   !!!DOQf`Yx(    .V`   !!;#"'&'!5!FN(*d&xZTN``77lb     v[`    %3276'&!367632+'47!5!R'& /62]N N9G`v[0@78  nHc` !  	!5!!"'&'32654'&+7yNqMGghhfa``]KK9	!qfst%)6jcf54   eHl`  .  &'&23676	!5!5#7#$!2&'&++c4'xMqNFet;K}A	U4X9	!qfs.(#-[H*4      +   32765&'&#"67636!XTN33YHHFFDIIؽw[rLG`Br+*#Ӆ^     +   !&'&54762&'&#"3y[wأIIDFFHHY33N ^ׅ#+rB`GLr    +   !'"'&'327674'&#XB[wأIIDFFHHY33N3^ׅ#*+rB`GLr  V+ #  %32767#'&54762&'&#"3YHHFFDIIؽwwأIIDFFHHY4`Br+#Ӆaׅ#+rC_    7   *  32654&#"47632 '&47632"'&EWUyxvyUW䦥.#"1<"Db"#6^^aa5'''/-6L&&   w  Z`     ,@ 
 	hh  	!21 /9032654&#32654&#%!2#!^^^^HNLJSNdn33320203፛Rsj   ley  .  % !";#""'&54767&'&547676H	F(5:&J@*?;9?Yon:8<:nmY-kl%?H "J7#"-VWbLHIGgVV=t    =   +  %#"'&7632676;#".#"32767'#5!^ddk򍎐VZy'dRQPQQ'!"e2eln10YX     x  Y`   !!!!!!xFUF`k1   ^Wt   $  !!3+5$)3!5!&#"?676%8tFZҽ4Ni]kb)+VSk
]L@6   hVh`   !!	!7!h@D4d$V'`    `   !!!D`    FVM  '  %#"325#476;#"! 26&"*;9HɶR<;&IHa6,+XX+[1/0411aml76e}\\D\      ? &  327654'&#"67632;#!5+53lTN34YHHFFDIIټw[ rLG`Br+*#҅^p¾    ? &  5&'&547632&'&#";3+!5#53#[w٣IIDFFHHY43NTp^ׅ#+rB`GLr¾     3 	 % (  26&"73!!!+5#"'&7632 !rBBr!կa,-=s?@A@w6++R\\D\SL`ۦa11/.~    @ 4 >  !#5#"76323!#"'&'32654'&+ 26&"Z<sA@x6++ X.D.+\\>>?=;9:7SX--Xe! rBBr {ab4/.]SL9	!qfst%)6jcf54\\D\     9 <  %3276'& 26&"73!367632+'47!+5#"'&7632! rBBr ԯ8/yz-,=s@?@Aw6++R9Gi\\D\SL`v[0@78a11/.~  B / I  &'&#"#"'&'#"'&5#533367632532654'&/&'&547#3b1455;2`-,DD<@?@56(G998U:=<8>@R0e/.3= 48H:'SUVW"(PQ>½K3ZH7<98"%RQ0*K !   XH & .  35476;#"+532767#"'&5#53#323(17~;563NNN0Ab+bl7.bPQ>CK !  Qs 3 < G  367632&'&#"763#"'"''47&'&'#"'&5#5332'&#"#;&54Y6222'.-2U]>e=x1$65"!XN23-)#,7Gr]G&A#(PQ>J9K,K !    JX 3  ;>32+5327654'&"####535476;#"ϮZ?`0176~H<^ϰ32(b]fikTkl77z45GG~NNN0    4 ?  &'&#"#"'&'#"&5#5!;5327654'&/&'&54632o0545;2`--DD=?@A}nb;:x9> Q1d/.999= 48H:'SUVW#)`77H7:98"%RQ     .   #5!;!5!!!5#"&b:aaٯ~n`77`  9       333##333##9xyyy޼yxxyyy޼yxsPTQ PTQ       %#!#!#!#!>)>)     8J "  332765!!#"'&54'&+5328""NO/,$LJjPR**d&xZV^Vy44GG|\]33ij:7lc   QV )  3327653;#"'&=#"'&54'&+5328>@$$BPaJHxUA@#!PaHE^VyhGF}˄nlk}]fij:7le  I   #4&#"#367632,2300De443i~D:'(Fh5;< I   #4&#"#476;#"67632,23;9M@400Deh3i~D:'(Fa<=~>JL4v   jK    +532765#5!5#53Ktʖ?zox~J~r   U|   &'&#"#367632|)*1>*/99L, $"b!<>tb6	  U|   32767>53#5#"'&'U)*1>*/99L, $"J!<>!b6	   "  32767>53#;#"'&'=#"&'))2;-,@N:5rM&J!I#<>!8~=7{J6:   
 "  #327654'&'3276?3#!322:l0]j!  (I%$FG()|)7((?Y**t       333##ޜUNLWWV=F    +5326?33&45LL96ŤYY((}">!bitf  L#  L$        2764'&#52#7&&'&6vTSSTvt'&l&'STTS       0"'&4763"vTSSTv6&'&&tSTTS'&l&'   H   327654'&#"567632#6}1!!9g..--,/.iyLY;m8@+'6%@

vJyQ5  H   #&'&547632&'&#"3m;YLyi./,--..g9!!1}8d5QyJv

@%6'+@  f  5@
 91 290 K	TKT[X     @878Y3#'# Ʋf     f  5@
 91 <90 K	TKT[X     @878Y	373 ǲ x 	  @ 1 @0#ǽ+  -X   	[  @ 1 @0#ǽ+  -j&  )^0 C b  s0 v     6`    !!he|  6`   !h|  &`c  L  &`d  L   . j   533##5#5    J   !5!J>մ F  ;1   L   R@	]] 1 0 K	TKT[X     @878YKTX     @878Y4632#"&732654&#"LvwwvM67MN66Mvvvv7LM66MM   oj    @
  ]
1 /90!33267#"&546-5%=2&M(6_)r|7GF'1\V5m  9  @$ 
	 
99991 9999990 K	TKT[X     @878YK
TKT[X     @878Y@M
 


 &]'&'&#"#4632326=3#"&j7	+$%g^$H)>%$'g^$BT%>;+?:  )=f   2   %7;!"'&7r&&iNBs87o[     5&73733254؜}~ztoق2SFEE[   '   #5!;#"'&z4?ʆ:;~J>~=<    J .  .#"#"'&'532654'&/&'&547632V4p8?@6d20IHADDE><BDT4m01KKD5< "'1/Q`10
	 " 
-.LZ32	      #'#37ۍ	wxG-  H   #&'&547632&'&#"3m;YLyi./,--..g9!!1}8d5QyJv

@%6'+@      #!5tм      #!5!t4        #!5!thh        #!5!t4        )5!3S   9(  
D   f C  
f v   fg  9y   -X    1 0!!-w   M=   F  @ ]] 1 <0332673#"&dSScFEKJF ;1    1 0 00]!!1-;1 j   K   #567654'&"#"5632Jh>.8(.Fhb[sTr..>
Lw   )=f   4@  @o]991 <2055]3#3#Vfx   fh   
   #ȾD  '        f    ###£׮fxx	'v   u   F   >32#."cdFJKE  2  @1 0!32       !525#xxz     #3$5zyz  ;f   !#!fN' C   N' vy   o   #5353#&   M   33##ٽ SC~n   !5!#+ 1   532654&'3#"&CI'1\V5mR2&;1'M(7^)s{6   
   "&463"3\\%22%
2%&2  V   53533W    ;fN   #5!##+   `   #53533##    SG~   5!S+G   /X/    %+53276=!/[Zy'b+)#+ml75}     V    75!;#"'&#)+b'yZ[)}}57lm 2(    1 0 00]!!  -2(   @
  1 <203#%3#u    
D     1 		0#"&546324&#"326D]\\]3%%22%%3\\\\$32%&23    t:  @ 1 0!# oo3    !@	
 	 ]1 /90!#"&'532654&'97{0e5-T$:A*.>j/_[.(R<  o?  x  
j&   #ǽD   -&   #5##v    @   #"'#"'&'3276732767 y0@k>=k.MPMG@FF0:m    @	 91 <90	373 ǲ x      @	 91 2903#'# Ʋm   >  @ ]] 1 <0332673#"&dSScEKJF  @   #."#>32dcEKJF   7  @$ 
	 
99991 9999990@M
 


 &]'&'&#"#4632326=3#"&j7	+$%g^$H)>%$'g^$BR%>;+?:    -j&    1 0!!-wڼ     B    "   Xy+ a    x   5!      x   5!     'uwy    ')?rs 
   052654&#052%22%\
2&%2    -n   3353.v  J&    !5#=n  @   67632632#&'"#&'"y0@k=>k.NONF@FF0:m ap   '7'77h)  !  #532654'&/&'&5463#"$
9?,;? 'RRz.!RSz#    :&=  =    ;1v        $#&'& #&%6iyz3OG$%%$GN( tf   3Ant    V H   %#AnH w  XW     C`w   V 	  #"=3;X3Vh    )}   %}& F   y  )}&   yls'    m -  
f v  -;
& j      f'     y    Jf'    y  Hf'      %f'    Uuf'      f';      wf'      
&       !   $   }   %     XR    !      )!qi0/=     J (   s   =     H +    \u     3"326& !   !  qhhqrhh		\xx    % ,   u   .    !     )!!Hi+    V  { 0   w  X 1      H     )!!!!!HAA!  \u 2     H^     { 3    b  x   	!!	!!o>n   Z  w 7      <    \  u  & .  67654'&'3!35&'&547675#!QQ[\ww]\wb#QQUk?HJllKFFKllJH=?kU    ;    P     3!35&'&!!6765!wwb'@'@'a+~[##[ą+   Z  w  F@$  
  
OON
N 9991 /<299073&5 32 3!>54&#"!Zxllx)QNpgfqPR'm8nȿmO֦M      %k'  u     k'  u   6f&       f&       V/f&        
f&       L  &        6y  (  7!;#"'&''&'&7676'&'"7A$DRfQ1*5ʵjpq$A;::6GElT
=$,9xУ[[RMB   Vo!    %!! 5456'&E,rbbEI8		    8V`   !!&'&+532w)n*&*Pn]o(vVH JY     bo! % /  &547632&'&'&#"32  #" 76"326&G~}cTy`&ZQh:#?;ixxijxx)?NM",f=KJ    t    V#   #52764'&# !5! 3T][TF!;)lMX[TL&D    V/{   !4&#"!!>32/ENO[#jTzi~`]f     ao(     &'&"2767     G-<<--99-$wppvvRQ   `   ;#"'&5#5%%T:NZX`J!!PN    `y    P     	!!'&'&+532)''^p_o<q-wJJX  T` w    /  x`   67676'&'!!!@|8M6P3E.*{2'Z|u4@bY|rNįt`   V# $  ! %$47#5! #52764'&sl3S][TF!0A*R	LX[TL&  bo{ R    `   #3267#"&'.=!!#51F",c7Or`?"  VX#s  Vw{     #"&'! &"2Z6lnn{]^SD  V*} $  %#52764'&# '& !2.#"R^\SF";w&ZS@RM?LX[TL&9*,7;WG  b`     #" 476)327654'&z (C$<xik;<>=8\]^r'      J`   !!;#"'&5!%%T:NZX`K !PN     L  `   !"'&5#5!327676'&'!ZXJ9g> L#7&$PNJB7gLGة     AVj  !  2!$76676'&&`rkjs+*Z6j{4V@BsSV}dxaM>   HV`   '!&'&+532!;#"'&Cz#%&OudgRPC)#%&PvgdSr6LJ<mLJ>     EV`   %6!!$!!n$nn$n$d3V@O     @`   3676!#"'#"'&7!2HWlrU11UslWH86*CqSSq6     1&   j     L  1&   j     bof&       L  f&       @f&        p$ 	  #   76'& !"'&7607676"B
ws6Fqn	r96$(-k<`zt~x  im$ 	 $  6'&'&'&%6#"'&3676g2DTGjЈ		۞Q;^{/G/z
xGCcX}վUjNk    "     !4''&676'&\+**SJtxLGkeJZ vV"40z7/cT  $  f'O     "  k&    u  :V   '  67!!&'&4%67654'&W$dTܢe)FF6$&EEj#U mi$a mE+_q!v+\u!    `    #5!#'$'%!76''iKJ#

9$G@F=#-t  4` /  '5&'&7'&7676'&#"5677632y&͟2!/65F\8R~ 0=2C\gO\ 20R[Fk{ZsB="20BPZPa|bl   \Vu    "326&!&'& !  hqhhqrhh!ܛ\		Y`*~xƇ   bVo{ 	   "326&!&'& 32 hixxijxx)܋^[Jha#j=i  `9    $2'527654'&#" 76)!8b^\TF!;|DRfa\T&(%xyǬj  ZVt` "  "#52764'&# '&76)AMM=nR^\SF";wxM[\ILX[TL&     X )    V "  %&7632.#"!!#"&'53676y~f<p7)R%^4F!ʠ>s7+P'R4F7czc<;7<P     c   3 '&76'&# d`)& kZs "GkS<s}/'F;;&) F6    r  ]   	!!!]1dy     V !  !6%$!6'0#0?&'&P@+%ȃ60@FG6sA+J%5O7e5    -Kx   %!'!&'&'5#4'& ,, 0myDچ>WRS;
   4` +  6'&#"56776327'&'&7'&765F\8R~!0=2C\8R~!/6sB= 20BPZPa|blB= 20R[Fk{  Kw{    !3!! ! #"&'$&"2 "Z6lnn(S]^D %} F   XR M    \u     !3276!&'&#" !   !  @Q	)4qr4(_ 4rq4		_xx]ΔKyyHxx    } $  %# '&76!2&'&#"!!32767FYPgZTSS?MOPL.7LXGIC9*,6[5XfAZ;   %} %  7032767!5!&'&#"6763 !"'&CIGXM7.LPOM?SSTZgPY9;ZAfX5[6,흜    {    Vw    9 &    V  {   !!###V`b'+%T   VV{   !!!#!V{}'%     .Vw{    %!!!5#53! #"& &"2GhhZblnnppS]OD     9   703254#">3   !"&LLLLDU.>U+HFAAFH$$rr$  9' y   8   9&<   yE     Jk&T   u   Jk&T   u X ,  %+532654'&/"!#5!!6?67632ڈbR#`)GG"	-ݾ+/5^)Q+nz3%D1C0$5i     Xk&R   u  9  :@!p opop	nr! 221 0%#   !2.#"!!32679AZ>.]?6`<IJ+"&xy'!2UCD   V 6     % ,     %k&E    u +K
SKQZX  @ 88Y1 m -         %3264&+#+532>!32#6%tt%%
rFhnlaaZѰ+o'          %3264&+!#3!332#6%tt%BnlaaZh9    '  !!670767632!4'&'0'"0!#"+/5^)Q#`)GG"	-ݾ0$5iz3%D1C    u  k&Y   u w  Xk&W   u   k&b        H   3!!!!!'q'/+B    !   $      {   3@p pp	d ! 	2<99991 /0%32654&+!!3 )yuuyn5kbyyb'    }   %      X  @ pd 1 /0!!/    (   m@ pdp 1 /2<<0KTX       @8788Y@         ]!32645!3#!# 0d*P~ `3Uc5/B    J (        u@	 <<91 @B d
/<<2290KSX	Y@      I:I:I:I:I:I: 	<<<<3!	##'#	!MMdv_    }L     w  X 	 M@		% d	&&
991 /<2990@	]KSXY"!!!X^+==  w  Xk&W       u   .      H  1@1 @	p pd/<0@	]+3267!!	\
_cfѰ+	aoM+  V  { 0     H +   \u 2      H  @p d "1 /<0!!!!+/   { 3   9 &   Z  w 7         +326?!!>uP:a(71<1/jl     #      |@:
:: <<<<1 @p
d p /<2<20
KTKT[KT[KT[KT[X !         @878Y@000???]!5&5475!!>54&' sZUx sZVwssffpҏэ     ;    P  G@
pd  "1 /220KTKT[X   @    878Y3!!!3!P'q'//B   e  g  "@p
 d 
21 /290!#"&5!3265g%¯#|GbVI3V   N    @
dp:=
:=:1 /2<<0KTX  @    848
	 @ 8Y
KTKT[KT[KT[X      @848Y@    
 	////])33333..     N  w@
dp:= :
:=:1 /<<<<0KTX  @    848 
	 @ 8Y@        
 	////])333333#zB000          %32654&+#5!3 !5)tt)!5avaZ  (       %32654&+!3 )!'tt 
	y avaZ+     |  U   ,@p p
d	 ! 	299991 /0%32654&+!3 !ytty'n5avaZ  9   !"63   !"'3 !(횒.>Ҩ(k|HHrqHH{     & 9@ p"np r%pd:$:$%:'<91 /990"36766'&!367632#"'&#2:**),4"(,"'shdWgwoeloyxwxy"u     S     A@
  !	291 @B
ppd	/<90KSX
		
Y;#"	.54$)!#tnntFK٢m_^#˱+N  ^T{ D    AoK   , 5@ *.$)-21 @'h!h
r-0632  #" 4/&4767676%6"32654&n&0u6$ZyU3ixxijxxK
#of=4
JIX@R   w  Z`     ,@ 
 	hh  	!21 /9032654&#32654&#%!2#!}vv}NN@SNdn=FF;0119ۍSlj    `  @
  1 /0!!{`   ?`   l@ 
 	1 /2<<0@         ]KTX       @878Y!265!3#!#(5O{XF^VU{    \}{ H      `  u@	 <<91 @B 
/<<2290KSX	Y@      I:I:I:I:I:I: 	<<<<3!##'#!HH`WVJz1zU     7{ & >@
$
'1 @yh! '
	yhr'90#"&'532654&+532654!"5>32YOsuc{rFTUs=w,1(TT56E|4}q     C` 	 ]@	 74
221 @%	/<<990
KTXA
 	   @     88YKSX@		Y!!!C#e`5`5    CF&w         `     E  i`  /@ 1 @ h/<0@	]+532>5!!;
_
dPQPI  V  z`  @	
!
 91 @
  /<290@
	%KSXY" K
TX 
   88Y	KTX  @    848Y!!###V```q7s      /`  %@	  74221 /<20!!!!!/#=``}    bo{ R      /`  @741 /<0!!!/`{`    Vw{ S   %} F      /`  @1 /20!!!5/`{ ;X` \    OV    >@:
:: <<<<1 @t h
hr  <2<20&  73  3>54&'FjjFHjjHV..gs7    7  ` [    a`  %@	 	
71 /220%#!!!!#=#`{{     $a  !@		7421 /20;!!#"&5!\k"޾+[;3   N  `  @
:=
:=:1 /2<<0KTX  @    848
	 @ 8Y
KTKT[KT[KT[X      @848Y@    
 	////])33333`{{     :`  w@
:= :
:=:1 /<<<<0KTX  @    848 
	 @ 8Y@        
 	////])333333#QV`{{{    (  `    3264&#'32#!#5!FInjjnI^=;۬       `     3264&#32#!!B2jj2m%=;Z``      $`   $@ h
h7 
4291 /032654&#32#!{njjn{,=FF;Z`     %{   "'3 7!5!&#"63   ő.#5駄$VurT   8{    2@ hhr	:::!291 /0"32654&33676#"'&'#,^c+8T\k"BnmVf½t`Q[ڔu   `  T`   @@
  	291 @B
	/<90KSX
		
Y;#"	.546)!#nPPn)+yF=<S    \}f&t   C'    \}1&t   j'     Xw   53!!!>325654&#"!#K~R[i\L]fn2Ƭg    
f&r   v      %}  <@"	 yhyh	r  75221 0%#   !2.#"!!3267%Jb&ZS@R|_UB9++89*,7;Ug9:  +{ V      L     1&    j     XR M      `     3264&##+532>5!32+.2jj2v
,
dPV=;PIZ    #  `    3264&#!#3!332#.2jj2+=;!`}Z    B   53!!!>32!4&"!#KjE\L]fJyh    f&y   v       Cf&w   C'    ;XF&        /`   !!!!#!#>#`{          %32654&+535!!!3 )5)tt)'C5avaѠd    (      32#!#53!!!3264&#F^#nInjjn})=;    \ua   bo{      X  @ pd 1 /0!!!/2      @  1 /0!!3N{`:     /  X   !#53!!!هhM    \  `   !#53!!!݂h6  X   !2+532654'&+!!!5~d+QڈbR#X5inz31R    X/`   32+53276=4'&+!!!QQY[qb)("%LxihӶjl77|14k`       3	!3!3###'L
MMv_Bd   `   3!3!3###'S'HHWWV%z1zU }oL& V     o7{& v      u   3!#!!!=#'N)BN  `   %3!#!!!)#d%`cX`T`}^   %   !#!!!!!3!'q'h9/  `   )!!!!!!!#=#!`}q    N     33!!!#!N;DB"]  N  `   33!!!#!NC8`zr o9&u `     o%}&H       Zw   )!!!!!%1    /`   )!5!!!!!B    <    9V`   !!!944b`)7         !	!3#!#35>"#>3Xw@@    9V`   !!3#!5#535944b`)>۰>     !#	!	!	!	V11XB%!   7`   %3!#!	!!5VVyHN   e  g !  3!670767072!4'&'&#"e#*/79^)Q#`GG.-f2$5i1z3%C      / K     % ,     k&U         F&u        uX    !!!2+5327654'&#/'NOUW.QZ[ڈe&)#1FN5ool77~/1  X`   !!!32+53276=4'&#%`cQQY[qb)("%Lk`}%ihӶjl77|14   XH   %+53265!!!!!H\[ڈbR'q'+nlnmh9   X/`   %+53265!!!!!/Y[qbR#=#+jln`}   eg #  "'&'&5!3276765!!!D+/59^)Q##`GG.-#0$5i3z3%CF    $a   %5#"'&'&5!;!!!k+#7sk"e[3=!
'        ! !  k&O       ^TF&o       !  k&O    u  
+@p?0/  
]1   ^T1& j  o            {      Jk&T      \}F&t      \uQ   \}{   \uk'  u   \}& j        k'uU     & ju     }Lk'uV   7& jv     
y   nHc`8   w  XN&  W       C&  w     w  Xk'  uW     C&w   j    \uk&]    u 	+1   bo& j }   +1 \u3   bo{   \uk'  u   bo& j      9k'ul   %& j       N&  b     ;X&         k'  ub   ;X& j        k&b       ;Xf&       e  gk'  uf     $& j       X 	  )!!!!%3  ` 	  )!!!!!`B  (  k' (uj     & j      }LR   t   \u 4   ZV;{ T       :      ` Z    G %  !327.'7>5!.'#".G'qf 4.'7%F"k|;'p(L" 9RZ<+2C    b  o   !54&"!!!4> ^qq;||;CppbۍCC  !    !  #!#".> 4&";炻x9;||;qq8O3bGΉECۙVpp`8[@#   !     4> 3#!4&"!!;||;qqۍCCۙbpp     b|    .5!!!26=!^;||;'qq''ۍCCۙpp  M   "  3!>54&#"!5 !2!k'QPsy:[?!	ʇC$P^KG^苵%NyT<1@WE4  p  a 	  3!!!!p'6?   b  o   !54&"!!4> ^qq;||;CppۍCC    + ( 5  3#".4>;54."#4> 32>=#"OWW3^[01\QkBjiBAǄAA;(k?=Ckp:2ks8CiF%%FiCۍCCViZ/J5`  !  !  !3# .>;"265';||;9x3O8qqbۍCEЍG#@[8`ppV    j  f   !54&#"!!>32fqfdp'.j?|;1CpykzpC      7   3!!'w/   N   2>53#".5##3$0!
KjkO`58K..K8_|t77t|    # + <  33>32.#"#".5467#2>54.'#.6~Q*`XGKX^,0W(yD8X}gҀ8*(f1ac4W*,?eF&4&dֈWsS-]o^f_[,0^\Zg<T    j  f   !#".5!3267f.k>|;'qfcq`Cۙ1pxl   @   %.5467>7!#z5`I+qvaTaͻ-#F4@M/BdROD\/oqh( -  G 
 <  %267.#".'#".54>32>54."!54>21X0/\."('XH1V& ? ReO]33]OXO!)!>WlZA$UĒU /#()H)v8z@0Y)KB*RyPO}V-;5NckX% Qh?C    !     4> 3!4&"!!;||;GqqۍCCۙVpp  G    &  >3"!".5467>7	3!?T&Xi}KCqS.TQ'N);5B;,EpP+?s_AeHNB}<a(#2    !   !# .5!265;||;'qqVۍCCۙpp    2 8  #".=!32>54&#!!2>54&"!4>2>ǊŅE*:U8?X7wp[0C*[XD|Ү}FRH5O4bML\		)L:#$=S0_q1@#TOTUcm:;n_m&I^m     !    .5#!26=!;||;qq''ۍCCۙpp     K 3  2>=!".54>7.+32%.#" =Wl[@$'RƒSBfx6:90]BIJ!%&8\C%^gV%#ThBF|Η]	
~
J  j  f   !4&"!4> fqq;||;RppۍCC    M $  .#"!5 !232>Tot:[?!	ɈE<\o2%L&8]C%%NyT<1@S⏃қeBY6|Q    4     ##54>32#4&'bU@֖ك8X`AxhݞXX݄i    H    A  2>54."267>54&#".54>32!!!>nS04\c;.'3X(	
SL]S-4Uyh}4*TV%'Y%Ea<		'XWQ!Fg?7Sc,*!!)J!FS 7GNN#9~znT1eT2K  !     3#!4&"!4> qq;||;bppۍCC  jf   !265! .j'qq';||;'ppRۍCC     !     3!#".=!3267G.k>|;'qfcq/CۙCpxl    ig ?  32>54'.54>32!4.#"#".5&=O*&F6!?ax|v[8*FgZy:&9F >1;a||a;A~w{ĈHK\1*G8.?2,5Dc^+`]VA&@nQ3=!
$;-4H7.6Gge`yDE}k   j  f   !54&"!4> fqq;||;CppۍCC  2  G  "32>54.2#".=!32>54.#!3.54>3D''D40C)(C4pz@KO:P2>ǊŅE*:U8?X7:V8@y/="#>//>#">. =p_^(Sah.bML\		)L:#$=S0*K8!*Y)^o>  p  a   3!!!p'6        
  -  !>54.'.>75!#IR)	
)RH IS(		(SIg)*g i**iw+Zdeb23aedZ+]ܜVzzV]   3    .  4> #"&'!!!5# "32>54.9w z;;z+f1cْtK+.L98I,,d{EG|cd|FQ6L./M86N0.M7   \u 2     	 - 7  %>4.'#.54>;#".53"3IS(		(SI)\nꇱi*,PO,
)RH$.		.$,VzN%	NrK$M˂WiJ''JiWWV,
"	d   I6   !#9c  f   	!fx  H%   #>7>73)PvH1WxHSb9Bn#2(L`?"+9'A~lP  f   	!fx  C@ )  #>32#".'332>54.#"7\{Qgs=*SzP1bS:6&
":K)SsIYgH&7`K8hR19^F %"0 7`       3!#z    P` +  %#"'&32>532>53#5#".!!eK78	!2"

"2!	mE!@4%pHCde;w1@Q//Q>1>Q//Q@tBM%3   V<{   %!!!>32!54&#"<|#jENO[V
^ezi`     AV{  (  %#!#".54>325! 32>4.#"mldi76h`_$D4K0/L55L/0K4VHMێۗOèZ/0YY0/Z    gVj{   %#!4&#"!!>32jENO[#jVTzi`^e
     B   !26=!!5#"&5!BrDY%j%`5yh0^eL  AV{  &  !#".54>325! 32>4.#"oldi76h`_$D4K0/L55L/0K4HMێۗOèKZ/0YY0/Z        	  )!!!!%CLb   V<{   !!>32!4&#"<Y#jENO[
^e)zi  6V{ + <  4.#"!!>323##".54>332>=#"(1_Q'PA(#G^l5OvIEMQm>HsR,5Wq<"5&#(f2(/=}d@%Ec?
.I2:⨏f)'JiANsK%5)BkM)=   A  &  #"2>5#".4>;!39N00NrO0$3PnYw77x$m/W~[14\KRMmP,a̚ZL  V*   !4&#"!!>32*ENO[#j)zi^e   HV`   !!#
  OV 3  #3>322>53#5#".54."<&/6551&
"2!	mE451&
"2"
V'7_d>Q//Q@tBM7_d>>Q/.Q@    bo  ,  !##".54>72>54./#"aQ[-9D~}D"GnM7UtV7)<'*msXG^؛VV؃Ze P[16^I>`L<    V+   !265!!#"&%DY%jyhP^e    + K   7 . @  !5#".4>7.546?!3:7672>=4.'75I[5aR$.XQ<V63!95+BL"!b~I*B\@('J>LP,G4EvR&<M(&IOU1,80.5x,Q>%0K]-V3lcRd   gVj{   !4&#"!!>32j]ENO[#jTzi`^e`  F * =  !5#".5467#53>32.#"326=4.'Fj^T&'$i2}\"$!+%
)KD<fyC$&#OY#CdA##K^eL]umXi:
	0C(cE_>#%SI6h        !5#"&5!265!+j%DY3ͦ^eTyh7  X`   %#!532>5!,^i1E+%+~p39]B5   gj   #5!3265!!5#"&ENO[#jzi^e  V3y 3  23!!".54>7>54.#"'>Ul~D'AaV_Q|0P; 1Rm<SwL$2F+%F<-`uy<na2[]crRZn":L)6qsu9Ooj:*I4-<#9X>      +{ Q   V -  !".54>7.546?32673*J8!2EPY.1\G+39xB#/?9#T2cF~kW=!;U53yz2)E_:?:{@"G1?8xf$*#    PV` +  #".'#"'&32>532>53_6!@4%!eK78	!2"

"2!	V6:%3HCde;w1@Q//Q>1>Q//Q@    VGy , D  3!!".54>7>54.54>32%">54.G9ni)C/&|1P: -=$!)>H>)MahGF<(','O_2/H`c'G=1"9J'$RVT$!G&1J??OfGSl?7jX/>")@5/18#(1RsZM,%G7"  u  \{ &  "!!>32!!5>54.B-@)#4I^7\X*5F'+<&*F+H`5{`*G5FuRPl+0enzF8gN.   +` X   aVp   !#"&5!265!pQj%DY%P^eTyh7#   Q{ +  !#4.#"#5#"&5332>73>32
" 
mEo
"!
mEp>Q/)H8tBM1>Q/)G8tBM  V*{   !4&#"!!>32*ENO[#j)zi
^e    uX[} J     `   %!!%`  QV +  !#4.#"##"&5332>53>32
"a5o
"b6p>Q/.Q@D?1>Q/)G8AC  AV{  *  %!!!5#53!632#" 4."2>inn$\`h67id,4K`L55L`K4DDOۋۖNZ/0YY0/Z   bo{ R    *V # ) 4  #.'7".4>;"34.'>-hByh' @CH(]c34ii~i-QLGHK.N;9N/A|Θ[Y'?V45I/2Z~Z2FNr.x)?fI-	;[w     .   %!5#"&5!265!j%DY%^eyh     '    !!!!MM'   -   %'-/HŞߎ;<  ;m $ /  #4''3767653653#"''##53+#*L& 	%,s$ۻ44`OpR3&#]|0q<*S3E{     ;m * 5  32767#"'&54767&'&5476'##53B4V53Y31*"@GC1.N@?G?2,2&!e*ۻ44`m|&z-,#-/F?n=@;#<bC/43E{             3#3#3#!!R: ,,,            3#3#3#3#3#cN,,,,   2   )53VI Yf,    327654&#"+533632]8""E``8OS-&Q7`&.jdL.(4H0"       	  !53!!⨹CI19      $  !=.54&/.54632.#"&DX^Deb`T\\-?ZP>v{	=TBV\L98FGDC+P=YNc   -   %57&'&54767632&767h8@}SnZdFG+9:H:Z?LWaKaKQ6&Xs%#<PZ     '  ]    T'  ]   L' cy  _& ]      'Pz        !!$ &   %e&x    k&  @ &  @ X&c     X   $$327'&54767&X$|iɖ{1'O_O@5^OpbĘDh)    X&c    L   %67654'&'!#"'532T!<EGkHR`]:RgsR2o*]eslizw"&*    LC&e  b "   %654'!5 76c
52$~:H~vHHʏ&g  Q < ?  %#"'&547332767674/3327653323#"'&''&<Gec50$ ))
$# !/C 6G@J/B-%n3Y{K\daّ֔w<$6#^lWcX\ElHτM&j23H;/F9 <_&i  	    <  %327654'&#"'676+"'&5#"'&5473327676'&/3d]>4FD7CARXL%5,iGec50$ $*,$ QB]WEfnf`-Sm\daّ֔w<$6!`]]T'&k     
      %327654'&#"!#53!632YM,>5M<G#eX~,, Zj3جh[ymK   
  &m  L  He (  3 7! '&54?"&5476%3276%ԖnbWy$xJnF&2.#ؠnvcoeXfT61IEm9   H&o  7       #5!  |&    (&     ! =  #"'5327654'&'&54766!'&547!3276{P E*jXcB8D-E0 /Y#:^S4VA۰FDRPrx#q1)
""8Ef.&K OpY57LK5>(N365      %65!"'&'&7!3276M 20yl$.0`UZkFOIij﷯\HK\ssj1+-3     <  ,  276'&'&'&#"&!4763&547632p1& 04Y2xAw~M`b|_'7&':&4Of7*g?'H-8XD  &    %    "327654'&'2'"'&5476).N(@A5/VǎQ%T=1V9>( <6-T|PQ#JQ  L  &  "34'&!5 767"'&'&5476326L<d<%tOdo)3pZt9lH~#!$*)T.V<fa
6HZ3[f      u 5  !"'&47!32767674'&'&767632!4'&hhy?BYKSYV,4"lyhs46%"}R 1:\<c9uqc#"9B3/6 F<ciu<#K'7a~  ku&z  k 0    5%5%0pp~V    k  +  654#"&'&5476323'#"'&'&'33276&$X40?4M^0?"a)1Z]>G($L:0 ,*F94D\0('3g'm8h"(uA~b7S:( 0    5%5%0ppV   0   5%0p  *  %  654#"&'&547633"'&'5676	&$ 50?4M_/?%M(= tVF,*#$!4D\0(%3g1+k    0   5%0p    (  #'&54737676537654'3'&x=Es7",$4G
+@&#^2$NQ2omb}8>#&!RY$6,It5\    ;! 	   4&"2>"&462FhEEhF2GF34FG      732767#"'&'>|*631N:B6^f:lq=&)L0-Av        84   373^^F       !!J l  dx 	  )!d&..l> 1<>  }  x   !'!767!!"* %IiB=t/)ut_ptmTTPf    >  x %  !!7676537653#"'	D7Cx<,2/< F(9y-8
{)[D>2%,*1lL6    x *  32767#"'&54767&'&5476`iST0PQNB6fpkMH|eepdOFO=4x!6E'5
 PN>Q!S#!' %}pmrh/>5lwU   flx    "27654'&' '&47hP5<<6RNLZtrZQ[[Q꿻܆&z    B  x   !'# '53 JT[10xN|EeF22     Z  zx   !!6767!Ym,fJ Nc/n?5&<eNRa{o    Z  zx   !&'&'!6ZlfKMcЯo>4xhfNSa{  z  |x    &'&'&7676!&'&#"ЈZDgvi\6/1vIF1>3#""@:#GlocyGO%(H'%s'      J     3#3#!!@V ^,,      6767654'3is$Kpm\erPO``Nov_E9    !#VI     @L 	  !!%goqgpoUU 	   57&'&54767632&#"7T "$C5H@<FZ~	|$/3D$7y*</  &  T * e&   $&   (&  J &  P H&  J X&c  F 1 X&c    X&c  r  X&c  r 'Tbg  >&g  |H&  	  
]l -  %2767654/&'&54767#"'$47!&xH^'45!"1K79 ~xhWohpl,&y1l".BX6]E+//193J<01)|n]30 b,@^n@ 
_'      ) 7 G  %63&'&54767&'5#"'&'#"'&547!%27654'&'67654'&#"9"*%D(3?=bf^E=S<y
'w#@ 0m!"' 
CIQ=ERH';49rFq#+"D#!	>P8C!N'-_"<I/&+%5   uz    l  dx   }  x   >  x    >  fy (  &547632&'327#"'!!x\<id&ZLbzD7Cx%2D8O="%"Q]` 
{)D4    Lx  (  327654'&#"327#"'&54! #"."WT]^TV% -lPiAPc"$cPPitJk>$Jk
jܤ    x   3767&'&547676&'&327 04trzV`jXX>+a?,Vv)krm!RA@!JY    Z  zx   Z  zx   z  |x    t    ' /  333#!!67654'&'56764'&'xxxfy}lvQ&69(L5./4N0}FR~TI
-	*hj.!
#$     >s{   %#"547"54263 !4#"游ʑ,Lۖf7pQQuY     l  )   "2546632&# '%7654t$P{R~8:tqu;;=MkČG :.j)    y}   47&76$!4&$'632y*,N~j+8Hu]6OA$,Ll^Ȩ  H     463 &'%327'&32'4:NJ*!y@?Aquxs
 A@@?   K  &  "32654& 76'#5432!"!54n$  % *+C<sڸ6 xx`  %"%:~6Yh>{aKK     G  5  "32654&"76767$326765! 54%7654$  % #t}Q҆em0o  %"%Ƀ@<@BDkQcC;;eo">!   fkz    3265!$'&7&5!2#"'3jj~$,*Xf,_b2O6hKM     {V{    $"24#"54$76Ȭ)kyx  5  *  %"32654&"&#"2#"5!23263!4#" $  & *|H, <8@>"&Y  %"%ӎPW0     n{    $"272#"5"547663 !4#"ՀӨ9y6ܸu3I	jdmbJ  S~  +  "32654&4323254#4%$7" $  % fz3%:?(  %"%Hھ|XsEhf\[  K     24#"5765&5476325!!"'@>]J*uP]#8Zs@0[2JFfHMM    }T|     "247&76325!%$ԛ%&xLB    }T     "247&76325!%$ԛ%&xhB    T0   A  "32654&!"32654&"' &54323253325&74453$  % $  & TeTXXTМЀ  %"%  %"%JJbߩ44ˆ+,@     T}  +  "32654&#"' &5432325332536$  & 'BCTeTXXT  %"%3^^JJbߩ44ˆ   H}  ,  "32654&2?33253%&'# 47&76 D$  % LRZLĒ>%  %"%㩪,-=%ۂP     H  ,  "32654&2?33253%&'# 47&76 D$  % LRZLĒ>%  %"%㩪,-=%ۂP     `   !325!!"'#"543225""T)3Ƅu`,888   fk     32765!$'&7&5!2#"'3jj??$,*Xf,_bZYO6hKM  d  )  "32654&4%$5! &#%$&763232,$  $ /( 8.<h  $  $ ,^$RE?`{<    >  +  %"32654&! '&'&7 3654#"%6#%  $ 2,L/-(9X!$  $UzƜ1o5  Ox{    "326! %,'4323254#"0@@<)
=;TYr     >0 ! - 5  53! '&'&7 365# "32654& 54!"CЀ,L/-(')%  $ L@Uz!.!$  $6/'=        4   "327$"327$7&76365&5632676#4#"%A?A?pƾ6\w5@W?:@@@L@@@E>/>icb   X  # +  "32654&%$%&'&54327654=$  % 骅AcS  %"$36H9Gt6caf   5  1  "32654&$'&'$6!2327#"&#"%$&76$  %  	ph@\bjC  %"%ŇD0tHG_)Rq}]
          ' '&'$! #"'"32?6+(xsx8@7YCt	N*(mEsJ R'  ^      R,    '&76'&'07oV@P5)C21s  k  f   !4#"! fܺN=

Au  f&  /    
   %$ 5 '&	[_0~9e}     %$ 3!5 54	[`f	G~9fP3}    	    %$ 5 '&#'57	[_&&&&0~9e}####   	_    %$ 3!5 54#'57
\`f
&&&&G~9fP3}####  i    &7'6'&762'6C3217*9{[l僐,.--Tbڂf    	xm    &7'5667&763253% 2AKA|ۺf@TwdD:0;QF ,    &'676'&76Lk`W
r,sWf-2G)4G^     &/'&767%254<j#~m]! v*GW}v"  E   #|    X   !567&74$76737iz%.Z?^     3 4  76763676'3!#5676'&'&'&3&76'$CM=!JXY[x5?<Tn/,:@(TLB{H9;Ed>Gb*gW/A67	*ut7.,    U   3533##5#zۺ     P   hi    %&767'6&j =DAA566  b  q    ! $546732654&'3.'!'q-(xikvYK@,6\,"H%]x8ڡWe     d  n  '  6.#32! 6756&'&5!94P54S;9R35C8,Tf[SZ00ZSPyP(@3i*3
!_#bsB     Pn*  -  %' 7! %>54.#".5! d }~'3B$8,	/6O
		/D2#"/--/"Kt/~  m   V  4.+"32>5>7.54632632#".5.+"!4.%'a+%!4" 'AT3]KKcd30a`@eO8$C=cc="8HKI;&m8S89kS2"=U3_.,#CiEE3mxr4&@SZ[')giI;6BY@-'+#     anp* '  %! 46732654&#".5 pUQ
sghfdXf#fJG_*)*jd_`mjQW8F"Z"76;(S    bnp* :  ! $'4>7326=4&+532>54.#".5 p!xgmvcX??)E16K.`q'_^d`r=A?S&P#llUX\XU/H23M5KN'4b09@ m``4#m  b  p   3  4&'&>4.#"326% ! 467.7! |<BD5??9B:V63R:!=V5iq&Y[Qa%&QHURUR\NzU,-UzMKtN(
3*dd?n-*         8  4.+"3267%#>54&+"#"5!263 
D)E2432R<6:!_IwWPIpl0@$HHLBNy}IBfbmIS ~~?	EEL   b  p* '  #>54.#"#.5& !2p0UD;?7O18X= B<GX2	?!Tz9LBHtQ,+QuJAL8xTE    bnp 1  !# $54>732>=4&+532654.#5 o*/	~q1N7IXUL=ri_onq$RK<|'su/H3/nwDK-E/n_|#*     bnp* 6  "!.'.#"'>7&546! .5467>54.^֐KX;$Ji$Q5qj
,#	#?WUdUgn3>~*?l-!7*&=0H'Q>DdA    d  p  /  4.#"326%# 4>3254&#!5463 J:T45S;qaq&?~}AFn*yoU` WtFEnOkl{Bw6*6^]46bb  b  p 
   4&#"76%! $5&63!!">3Jtmiwsjmw&((0gF
4A37      6  !>=4&+"#4&/"!.=432>32(C36A$3-?7*2'G:3D(3a$#W2:uuu;:mhb/Y[lY[0ein:<wus9Q$##$     b  p	 -  ! 4>73326&+532674&'$5!#p&#	}rar}l{Nar%PUjk349 !524!vrML6B<L,])<     anqO )  %!"$'!32>55 54%5%q &rd<_C$?>7C%BhZkj5P6ICRc9Q{R*]F     A  !>54.+"#4.+"!.=4%2>32	"B9=G"	@E"HB9I*%^?m$(hL<vut99mie150!)p!058nop993W$ "p'#!  a  q %  ! !32654&'.5467q 'ypgrB6*8!|G,2.; [[ Mb247NR~)-0/  m?    ! 4&'#4>73 !  717dsreGuwDL12iDhq  mp@ D  %# 4>73254.#"#'4.#"#".'32>32>32o*8	p "'
$!#-#!$3+*<#'*"*5#5I#&rA/)WRGm3^5sp9T76T:$,%	)0( ' C77C   n*  S  4&/"32>5+".5;2>=#57##54632632o#/&A}v"jH"<S1.R=#YY!L{[hDn&T0=!$>.")8")7"'5AiZ(.dp(;B!(:&lm7,$!E6`RD:AD"  bno 7  %! 4>732>54.#".5!2<645!o3%~v1R:!:aICN	KF9f#@?A#A3c1sp"GkIwx=8;,(&W"<:@'H	 657!9     m* F  >7$5432>32>54.+"#4&+"%.'&#"5>d&'kF+C0%8%
WB%*+4)"^?&2L$##$B>me_13UKF%J(1^1(ߧGV؅%=/"
9<    dnp ,  ! !>=#".54>7!3265!p7dl"847!@8aJ7=T73L3qu%u]_'/k{Brjg6=_L?:9!GY3Z]       v  @  4.#"326%!  4>34&#"#54.#"!!2>3 P <U64Q9%Fd>V^'@Cl-17%*#%Z%#{RlSk?>iQPwN'yr430RQ	np	5Q6UOQS     b  p  /  4.#">3!654.#"!4632.B(BH18F-8Ĉ"A[9ch2)4]F*0;!US%	pOqJ#z5f?Zu  9oP 4  #  54>7!2>56+532'6&'&'!{PHY[;Ә2P:*8#Qh;sa97!+)]hFy1@X~?ca\NbyAC$O|X·+=8BR"v     b  p    4.#"32>%! !2J <V67V< &$GB9]R&!HpK$-!:  ^    L  32>54.#"4>32>3 !4.#"#54.#">72!".5 6I+>^>9Q46U< 2XzH)PG:&Z%#*%++xC@xy<NuO'!GqPQoF?kJqL')=)QSZ6Q5	pn	1)+8:zM{   bnn  G  32>54.#"! 472>'4&'.'" !!3#},69.,59/uh5V; `P4=
"1)UU&C11C&%@//@\l $$c]5O5Dn*0V*\bE# F4/T9    a  o    4&#"326% !".5!>3Jyhluxlgw%ÂA$0oGLц<5     anp (  %! 46772656&'.'7%!%p@Aqfm~`Nbcdxed`dQU2]3suioU'CH5e)OM>H    b  p A  ! 5!32654.#!5!2>54.#!5!2>54.'.53p%ofl

!<T31Pc3:;=C}pjJR+2	(=^!a<vFb    cnp Q  ! 47>.'!32'4'#53>54.+532654.+5325&'&'3p0%!F"$	"#	F$8F#<BB<H6}OF~UJGlr%5$.	/>#`/-$
>GbbEJp=@N    bp*  #  >'6&#"267.5 % 7$'okk}mft Hj }{ &mC[$#aXXQNv+   anp* "  % 7326=4&#5326'!%p+*/vgi|roz}|`{jdtjypû d=|    anp 8  %! %32>=4.+53>7#.54$"32$7p&wg4U< !>V6.S@(9=<A!!kZ}}3O55.G/0QsH
	4c]ʽdbkoB)s  m     '  #"325;54#"! !35#$! 3#3ʽy&kkk4c{L~fL  o*  3  4&+"265%!"'#52>'4&'#&3$5!2>3##P#3d!&<(+I4bz_[R(yQ\@<<5>:<<XZ-C,' DGҧX.*e  Mm* )  %! $'%$54#"'46323274.'7[W:0؉&vzU`*9!HޅB,($  cmqE #  !32654.'%%"'7265!! $5c&rudv?gLQj?Xdv&HEy~8mhe0b>~C%&z{7    Pn8    654#"!6=!! 47.x]~hq!":b}^ooNc5     =T+ (  4&'.#"'67.5%'>54'"3SNIm2R:͡86okC/XC.L|n#,m|I'bzDwwLu*.T*kP   1     3#3#3#<л ~R    4#"322"43!%"\PUX]'
*Cw;l   5{   @  32654&#"26=%!4&#"5>32>32+3267#"&'#"&IWY@=?=&2~2=d_<x;2}Sg*)bLNL9JJ@b}#\RNKGKVX}^^}Ӑ;:,*TPTP3]^76''>A=B/  fk{ 2  #"'&'5327654'&+5327654'&#"56763 )HI]hjyTlz2US>hu2@`g#qriiXohib'(@BW	&1E OY"[\p  igd 	   %!!5!!!!!%bV   {   ( 3  !4&#"5>32>32#"&'#"&26=7326&#"c_<x<1|Ub/+dc|)\3|2:MN;;NM:;:,*JJMG;B<A/T#t]_~䅆   b/o{    32 !4&#"bxjix/=񥹹   an/    #" !3265n%xjix/=  )     )!264&#!!#'yh~}`]f&DX&h     (     5353!!264&#!!#(UIbX>uAHv&DX&h    +0   )5!264&#!5!264&#!5!#GD}TV{1{VT}1`tBMQ!fJo&d((d&np      
  33#'##hX:8I         #3#3!5##3и6p\Dc  "     3264&#32654&#%!2#!|XHLT||F<>D0\\ln6<F-43/jiQZ	nbym    ,    32654&#'32+2n\\nK{zD D   !!!!!!JpjD D   5!5!5!5!5!DjpJۑ  *   5#5!#"&54632.#"326~"6JȾ8n0(d<jjf`,3)*,.
   :   333###:길?t   P   5!#3!53P0мN     N   53265#5!#"&N6z>JD<14AGș       33	##"4RJx]  D   3!DDN    33###ppޠddonb   0 	  33##0``   0 	  ##3Ƥ`D`   	    "265446  &BB@.H[   2    32654&#%32+#LZJJZĪDU7DC7{{       #'&'&+#!232654&#(r2D:`VLDBN'%4	^DrVf$5>=4      ##5!#ĺ  (   32653#"&(FH?GG?9񫚚      333##DP^4ljdsfI ) 
 %  "326=7#5#"&546;54&#"5>32gR81IQ"h?yA?B}C=~G/:*3bX?F)-qeni() |   )  ,  27654'&#"367632+32767#"&*g))1J(("35?xQO! ?B>?B<~G9*20X@fF*qen54( |  0    53#5#"&547632264&"鸸//@yDC~8.,DxEExY]6UUggg     @  32654&#"26=%!4&#"5>32>32+3267#"&'#"&5.78('(& O ?<&K& O4A^R>em010$U..Y(>NR:p\..+*(*01F55FvPU! /-0,g_hg45"%"%   0     4&"2>32#"&'#3DxEEx"Z8~y@^yggg4476]g    0    3#5#"&54632264&"鸸^@y~8ZDxEExM]674ggg     #"&54632!3267'.#"@J"a`@{DHG?LCJH #ABE?       >32#"'&=!.#"327679@J^]WVa`@{D$$G?&&TTRSCJH #@"!#"?   $ 2  &'&54632&'&#";#"32767#"'&546X-.:BCLV5DM64'BJt)<AGHBB8FBB>bek$%1aX&z,2
	33?HS   $ 2  #"'&'5327654'&+5327654'&#"567632X-.:BCLV5DM64'BJt)<AGHBB8FBB>bek$%1aX&z,2
	33?HS   . 	 &  4&"26#"&'5326=#"&5463253HtGGtH:r:4l:NJYAxw=^TeeTUeeAFC,,2.P   'm 	   !#5!#3#53y浵~~Q    &   373##&?7w%5     >32#4&"#4&"#3>2A.\E??FUG(&pF/0EmE0/FmsA%+-    M   +532654'&#"#3>32:8L?312_Be333<<~=JfD('Gs^49:< " 	   "3264& 632#"hBLLBCLLwhhhh0б  O   053264&#"567632#"'&O*./6ZaaZ41/)4558\]>65!efWXʮ    "   4632#4&#""LCBL՘\hh\    "   #"&533265LCBL՘\hh\    0    #3>32#"&64&"2踸^@y~8ZDxEExb^674ggg 9   3#;#"&5#535.6p~*$~Zz!~    M   32653#5#"&M+d8^BefwD:OFh]49v     !5!264&#!5!#5MAXOkh:@&Y2S;Y\  "  #"'&5326532653#5"'&;A.\"#??##U$#(&88anF/0EnE0/FA%      #3໖s &  G  d  U  |Y  d  MsA  d    sD  d    bXH}  (  %32654&#"6!2.#">32#"&'!r]\qq\]r\]S[|v+f`+ۓW.,u|yPNZR :    j  h`   53!5!!3#!!5!5ll  ZXF   !5!;#+532767#"&NRbSZy'b+"Ѷ`n9}+dl7,d 0    #367632#"&64&"2踸0.@yCD~8ZDxEExYs]6UU4ggg    O   #"&632.#"3267/k>8j4)`4ZaaZ6]*6!fe !   JM  ,  ;2'&#"763#*''47&'&7632&'&#"$"]R4AkA~3'\]]8554)004Z01 *
e@4'$W6XW33^V  %
  (  .#"32654&7#"&54632''7'37>BMKAEI	J?6(e#c:*FQFXdea7MUzBA=qAHEB $ (  #"&'532654&+532654&#"5>32`kǺ>F8HGWetJB[UMyVL:[SH?f2,z&"Xa1I J   3###53546;#"ٸi*F7~~,qW~    t]   33#+532767#53ppADp'@v?CB 2  (  #"'&5476;#"'&'53265"326='[<kDFFDk62330^.\Tz9@<:@64[Z~[Y̎		V\\TV-,[T M   332653##"&M+138_BefwD:OFgR49v  '    3#!3#3!535#535#m}寯Qmw~~wm  ?   #5!;#"&5n0@u~R2}    '   3!53#5!}~~w~~    '   535#5!#3#3!535u嗗}m~~mw~~w  @   #  #5330#5&76;#5!&#"?276Hjm
,9w¬tC;C>v\/<~g+#   ,   #5!;#"&t4=ǃs~J>~y   ,   #5!;+53267#"&t4=57L>0s~J>~x;:~78y  xY   3!!y0     3  >32+5327654'&#"#4'&#"#367632@/\#"-.n>3  "#+*$#(&87z8=~J|FDmDFmsA&     "  #"&533265332653##"&;A.\E  F+*G(&panF/0EnE0/F0%+-  (  #=4'&'.#"+53276=367632ż	
&:!"98kM4*0/9e45>R10U{rCCK{\7BC   "  4&'&#"#367632;#"'&56&!*/09e445Jj8<0(
1*[s\7BD~KCGn 0 	  33##0lm "   !   7632#"'"!3&'&+3276"XYXYYXYB& &E	&BC&=0XYYXXYY4(??(4-44      # +  7675#5!#3!535&'76764'&fHm/mHffHmѻmH////=0X@q~~q@XX@h~~h@A^44R44   O :  &'&#"#"';#"'&=327654&/&'&547632S3787> 5e/.GH()?L99=?@;A!"0Y3i10IJ;<;-/0Pa10.~=< "
-.L[22	    +532765476;#"5:Ȕ>55*y8<~ Iq,+~$ 9   3#;+532767&'&5#535.659L>28~*$~x9<~8)-z!~   "  #5#"'&=#533333+32760/Ae4344ƹ-12]4;;ummD'!   b $  327654'&'5!##"&54767#5!?)H;<#$) /,#"'1%q+-A<Ob11O<A/(n!K<Y[>G%n    $  #'&=#5;?27654'&/L)%OO|Fh99ee<+&+l!J=XYXDC~D~¯_71P<@/(f      3#໖s  G 	  !!!5!V4st{y     !!;#"'&'!5!4t?L95ttdJ~=7{y   .]    3276'&!367632+'47!5!?3;1t (B3_$y  )   7!5!#"&'532654&+4[1G^AA>x;W\_\jzyP|<79;   "     .#"3267"&54632BCBBADEAll~hh  !
& $       ^
T{& D       }  k& %       w1& E  d    }2& %       2w& E       }j& %       jw& E       oAk' u&u  &     opf& vf &H  F     uk& '      Z;1& G      2u& '      Z2;& G       ju& '      Zj;& G       ou'H   '   Zo;&  G     u& '      Z;& G       J& (      \}{& H  '    J& (      \}{& H  '    oJk&2 & (    \o}F&2 & H  '    Xk& )        ;k& I       ujN& *  2    bXH& J         Hk& +         /k& K       2H& +       2/& K         Hk'  u +     /y& K   j H  oH& +     Co/& K     H& +       /& K       %& ,       & L       u  k'  u .     k'u N   u2& .       2& N  2    uj& .       j& N  2    2& /  2    Z2F& O       2N&       Z2FN&       j& /  2    ZjF& O       & /  2    ZF& O       V  {k'  u 0   R  f& v   P     V  {k& 0       R  1& P       V2{& 0       R2{& P       w  Xk& 1         /1& Q       w2X& 1       2/{& Q       wjX& 1       j/{& Q       wX& 1       /{& Q       \u' 2'   2   bo&y  & R         {r& 3  w| Vwf& S         {k& 3       Vw1& S         k& 5     #  1& U       2& 5     #2{& U       2N&     #2&       j& 5      #j{& U       Vk& 6       +1& V       2V& 6       2+{& V       2Vk&  & 6     2+1&  & V     Z  wk& 7       o  1k& W       Z2w& 7       o21& W       Zjw& 7       oj1& W       Zw& 7       o1& W       j2f& 8       2%`& X       jf& 8       %`& X       jf& 8       %`& X       jf& 8  ' 2   %& X  &y       9  T& 9    \ P  & Y  y    92& 9       P2`& Y          r'  | :      m& C Z        r'  | :      m& v1 Z        `' j  / :      & j  Z        k& :          1& Z        2& :        2`& Z         k& ;       7  1& [         k'  u ;   7  & [   j      k& <       ;X1& \       s  r& =   .|   9m& ]  g   s2&  =     29`&  ]     sj& =       j9`& ]       j/& K       o  1& W   j     /& Z  w    ;X/& \  w     ;k&A       bo!   !2& $       ^2T{& D       !2r&    | ^2Tm&  g   !  '  & $      ^T&     < !2k&       ^2T&  u   2J& (      \2}{& H  '      Jm' 1u (   \}&y  H     2Jr&   | \2}m&  g"   2%&   ,     2& L       \2u& 2       b2o{& R       \2ur&    | b2om&  g    k&b  u 	f&c   v    k&b  u 	f&c   C    m&b  u 	9&c  y    2&b      	2&c      j2f& 8       2%`& X       k&q  vu f&r   vd   k&q  vu f&r   Cd   m&q  vu 9&r  yd   2&q  v   2&r  d     r'  | <   ;Xm& C \     2& <       ;2`& \  ,     m'  u <   ;X&y  \     6r&       6r&       6r&       6r&       6r&       6r&       6&       6&         r'H      r'      r'      r'    p  r'{    4  r'g    T  'H    "  '     r&       r&       2r&       <r&       xr&       r&        Jr'I      Jr'I      Jr';      Jr';    g  Jr'r    5  Jr'h     V/r&       V/r&       V2r&       V<r&       Vxr&       Vr&       V/&       V/&        Hr'      Hr'      Hr'      Hr'    +  Hr'6      Hr'6    (  H'    (  H'      r&        r&         2r&         <r&         xr&         r&        &        &        %r'I      %r'I      %r'T      %r'@    q  %r'|    ?  %r'r    U  %'I    U  %'I     bor&       bor&       bor&       bor&       bxr&       br&      [ur'    ur'I    ur'O    ur'O    %ur'0    ur'&     L  r&       L  r&       L  r&       L  r&       L  r&       L  r&       L  &       L  &      z  r'    m  r'      r'      '     @r&       @r&       @r&       @r&       @r&       @r&       @&       @&      o  wr'    )  wr'b      wr'O      wr'O    >  wr'I      wr'I      w'    }  w'q     6f& C       6f   f& C       f   V/f& C       V/f     f& C        
f   bof& C       bof   L  f& C       L  f   @f& C       @f   6Vr&Ϝ '     6Vr&Ϝ (     6Vr&Ϝ )     6Vr&Ϝ *     6Vr&+  Ϝ    6Vr&,  Ϝ    6V&Ϝ -     6V&Ϝ .     Vr&  /    Vr&  0    Vr&  1    Vr&  2    pVr&3      4Vr&4      TV&  5    "V&  6     V/r'  C   V/r'  D   V2r'  E   V<r'  F   Vxr&G     Vr&H     V/'  I   V/'  J  VHr&  K    VHr&  L    VHr&  M    VHr&  N    +VHr&O      VHr&P      (VH&  Q    (VH&  R     @Vr&  {     @Vr&  |     @Vr&  }     @Vr&  ~     @Vr&       @Vr&       @V&       @V&      oVwr&      )Vwr&      Vwr&      Vwr&      >Vwr&      Vwr&      Vw&      }Vw&       6F&       6&       6Vf&Ϝ      6Vy&Ϝ      6Vf&Ϝ      69&       6V9&Ϝ      !  k&       !  N&        f'*      f   !V&      	r  V   	r   !55#5!	Ax 9y  ;'  T j   V/f'     V/{'     V/f'     V/9&       V/9'      Jf'D      Jf    Hf'&    y  Hf   VH&       2r'6       xr&n .  '      F&        &         &        
    9&        &         %k&         %N&      )  %f'b      %f   <r'@       r'       '     L  F&       L  &       L  &       L     Vwr&       Vwr&       L  9&       L  &         k&         N&        f'      f    {r'5     ;'  r j  -;
   f C   @Vf&       @V`&       @Vf&       @9&       @V9&      8uf'q    Uuf  B  wf'{      wf   ZVw&      
f v   	r   5!#7 @ïx  -    1 0!!-w-         /1 0!!/        /1 0!!/        /1 0!!/        /1 0!!/ ' _    _      & B   B   L  @
 t W1 0!3c~   L  @
 tW 1 0!#:b   jo  @
 wW 1 0!#9co   L   #b   9   &@ 	t	
W W1 <20!3!3b`~~  9   &@	 t	
WW 1 <20!#!# 9b9b  9o   &@	 w	
WW 1 <20!#!# 9b9bo  9    #!#bAb  ;3  $@f
 d?	 <<1 <20!!!!!5! L K}8    ;3  9@ff 
 d	? <<2<<21 2<220!!!!!!!5!!5! LL KK}+}     `   1 0467>32#"&'. 736HI256743IH426I235624HI447743     ?!    !?qH   9  o    #@ w
V V	V1 /<<220!!!!!!q'd'd'ooo         $ 0 < H L p@?J%K+I"L71 =+"%j4C:	L(I1KJ\\ F\7@\1.\1(\/99991 /<2229999904632#"&5%"32654&4632#"&%"32654&4632#"&%"32654&%wwwu2IH33JJxvvw4GH33JKޥxwvw3HH33JK'!xwxwK24KK42IxwxG45LM41J+xwxH35LM41J^\        1 < H W g  "2654&46367636762#"/#"/#"&"2654&4632#"&"2765454'&!"2654&#'-@@ZBCגkjIIjiKIӕjhIKihJKhj4GHfJKxvvwh,A?[!  #?,  [AB^\H35LM41J}xTSTSwxSTSTNG45LM41J}xwxK24K&$13$&& )+ &K42I  `J   !`u  `'3   3D     `'3w  '3  3   `J   #!J`u    `'6   6B     `'6w  &6 6   Z /#  @
  U291 905/+#    y#  @
 U <91 90	5-+#wv      "'    4        )  # '  !6763267654'&![`bede""^XD#.S#F8LAB\VC)*=	%(+C"	     M B  0   _    $'5 $SLUSPPSEFE       !#3#3!    /+   !53#53#5+޾tt    &  '  4     &  3'   D       '   4      ;   2###ͼ農       '   47632"'"2764632#"&$"H !!   (TUUT <XFFHFFE4llll    &@ 	   !3!53#3#Xn|洴~~w        E@  % 	 ^
 <<91 <290KSXY"333##5!5mmw)     % #  !!>32#"&'5327654'&#"G+y8 `_gfAF3B;=j8777\6677ߑON}LL&%GA('     
 (   "264&'&#">32#"'&54632"##"F081.nr dDKLUTUT033?'&JI''Nݕxv%$GHMMff	    !#!MUu2    ) 7   "327654'%.5476  '&547672764'&#"**TDC**)NPRSRS('LT1/VWWW11k"#x"##"<;##"#tF$#9:#i^Cj;<<=hC/.86Mz@AABxK971b      .  532767#"'&547632#"'&27654'&#"J081.m99!22DKKTTUTgh033A"##"ABF##<;w$HGLMffkl	''JI''N'(    8   !!#5!5!58    G   !!LG  A    !!!!ffƅ    #.67SQQSdabc~|    3#>54&dbbdSPP|~  I   #4'&#"#3676322300Df433i~D('Gs^4;;  TF  d  9  C {  d    T t  d  T u  d     CH  d  %CI  d  TJ  d    CK  d  TL  d  TM  d   4N  d  %O  d   )P  d  ifQ  d  ifR  d  ),  d  2  d  ";  d    t  d  3  d  I  hV  d  &  g8  d  '  h}  d    9  d  I  S  d  0?  d  J~  d  9  %@  d        $  !!!!!!#"32.#"3267$Ii8w@@w88l<kzzk<l8`**99*)73Ʈ27    Yo9 ) 0 6  &'#7&'&76%7373&'6767#"'#&'G:50+'00
*43WOVWVfIH4`%b/98<
s$-efJPj
,e "I78>!Fi+  Eh ,  6767#   !2.#"3>32.#"!(%PQQ_M_QQXZ(30zW!@!_f	"I77ef87ID: ̦c[     [   !!!!3#!#5/Ѳz[X"X   n  S #  67632.#"!!!!!!35#535#56kpQN=Dh1.IIȫw|'&>:r
  'B 0  #4'&#"#3676323632#754'&#"#m4C#$+66CJ97wn8 |2@%
۾75UU``/085csVH)v75TR         #  5#535#53!3!3#3#!#!3'"aMBBBnAAAARlbMxJJJJ       P  3264&##532654&/.54%+#!2333632.#"#"'&'#"&5\1551:%S2-./hT,C{n{C2,-B+^71]*,+!*wSsr04}]M_ml%N9"/:90/# U~^> 0035+.	#    F  2654&+#.+#!232654&/.54632.#"#"'&9C;;CZf?5<HPP,E$ 8;?@;;)=#k7yH@x597*6#i>A?ZgfXspR֔-v/:90/ 0035+.	#         " & ) - 1  '#53'33733733#3#####5373'!37TE11DThprJrrh&;;x;;#vvVVBvvBvvvv         !2#4&+!%"3;!տQ~PտQ~Y*5=Y <n&  l    5 1 @9&(  ox#o
xn#r/21('/),& ,0',22299999999991 22<20@]]6 32.#"!!!#3267#" '#73.5467#7,$SDJMkT<TmNJBT,T`T$$NH$$ HN$$     2     !!!!!!#5A3?T]`u!8LȘ         !'75'7!!!77d,d,.9c,c,<^:MS:MS#9MR9M    	7  ( _ t   '6767632#"'&'327654'&#"67'6767632#"'&'&/#"'&5476323276767654&'&&#"32cnS('6& (!((7 :*#Xl =ghRN/,*"1 "'0' )OG(*&"B&[
)1#$=	7+Уc]97#9Xzav24?Le;&2ELyP)+'+>AHJB @@=kbq~Es/4	
%UAB`_KBjoD7=AiK}f^[@      ) 5  '32327&547632#527654'#"'&#"654'&#"ؿlCm(IQXMboB0?iqK:(/$3!%DlX``S㫣lm@.jVBthP#lH+990C   <    # ( /  ! 3#3#!#!#535#53!327676'!%&'&+5\cVVb\nffffy;*\
;ynKg((gKntgPgM1w((P1K   ,[x $ -  #5!#5&'&76753&'&'6767uOrz^b፭]Xl`bPgh"'N;]=mi@^TKF#eiϥ"7?&6#PU"            53!3#3#!!!#537!!/3':?+}EhgxhhF~+$++P(UÕeeÕÊ      6  3267# $545#536767!5!654&#">323#!xmlvho
O9+
rk`_eg|P=5YcRT45		2f@PVFC ./_T   .   )  %#&'$%6753&'&'6767_h8:Ьݢ:8g_Q\DGHB[T%;/+R7r~or7N'(OQ"z!  Z  w    !!!!!!Z-Y   g  z %  #!#!'&+532767!7!&'&+7zVV5K,!0Oky4/Xy4zX8J_@[	  _y,>**;  
     +'75'7!772$5fix^88'::Veta!YysYytX{rY{sy    f  {    ! !#!!!5#535#533264&#09'_uu_brvv  1     %3267#   !2."_|dT	ȄE}=[~oi
7@,L]r4*:0N̾        ' 1  .#"3267#"&632#3"32654&'2#"&65::@@:!;2.M''M#+//+)00)@!vv#B5qtsrrstqT          3!3'!!!!!!+aa#]x}+     ;  `   !>54&#"!!>32Nۅ:7Sty/#t0e	(5:=\gL  ;  `   4#"!'7!7>2!6+qStyқ7?#&B00ۅ
w6<u`Ed{\g;^(4    2      	3%!3!# 6dfUf]xK+C           !     "2!!!463"!#5265eb<<b)W ٔW   þ>;N>;    }N  , 7 ?  2#".5467>"3267>54&'.!2+#3264&#hZZ\[~}ڶ[\ZZ~cIGHHcdFHHHHHss|AGGANZZ[~}ڶ[[}~[ZZGIGebIIHHbeGIGwuu`7e5  J        3%!2+!327&+67654'&J	m5//5=*__*]x~#g)ZZ)        '  %!#   !  %27&"676'&|F"Cobbbbn%lkh4334a         % - 1  3&'&7!.+!!2!27&#676'&%3{THvu2M;o.a4w5}fcd)1ED)m=s@1F~h|hb)tL<M!0   f   A@$	
 d 	F	FFFF/91 <<2<<9073#######5dYЙkKuT  KBC          	3%!!!5!F=xC`W]x'x    Z  w   u   .   !  m      -  *  7327673 $54$32!"53!25&'&#"7L||zW@eoTڣ'(+:N}y}zN8M3TT<`3ZAE]\P3RQ4O      	    !!!7!#!!3--%C`xxpp /w{' { &  K V /z{' { &  M V /{' { &   u V ' t &   u V /y{' { &  I V y' t &  I V y' u &  I Vy{'H &  I V /{' { &  J V #{'I &  J V /~{' { &  L V ~' u &  L V #~{'I &  L V ~{'K &  L V /w{' {    &  ' u VF   B  	  5!!B#x4̂x#xx       M 	  	'#'"xx$Mx4x#     B  	  	'7!5!'7x4x#xx       M 	  !737"xx#x4̂x   B    5!'7'7[x#xx#xx##xxݎx      M   '3'7#7x$"xxގxx#xx#x    - 	  7!##v<Ļ	vĜ<     7 	  #5'#5!7Ĝ<	dĜ<    6t 	  %!537536vdĜ<Wv<Ļ     -u 	  '33v<Ļv<Ļ     B    3!'7!5!7Ox#xpx##xp   B    #5!7!'7'7!'ޜOx#xwpxݎxp    ;m 6  #7!#32767676767676&'&'&#"#"'&'v
"!0	#?"A=&.&>
#!$5>+;6-0$(v#*%;(#8MX!GL!!+    Im 6  #"'&'&'&'&'&#"'67676327676'#5!#O$0-6;+>4!#
>&.&=A"?,.!"
v([+!!O7!XM8#(H.%#vd  B    !!'#537xZx#xZxxx##xx      M   '75'3''#xx$"xxxZx#xZx    B    '73'7'7#'7!5,xZx#xZxxxݎxx      M   77#75'73؂xxގxxcxZx#xZx    B    '!5!7w>x#xx1xx##xx  B    '7!'7'7!'4xx#x>w1xxݎxx  B    53#5!5x#x,x##x       M   %'3'3!5x$"x,rx#x     B    !'7'7!#3rx#xxݎx      M   7#7#5!؂xގxx#xr      M   %7'3'7!!5"xx$"xx",#xYx#xx  B  (  276767654'&'&'&#52#!5g
	@16T)+51@x#x

	Q87;=49(*x##x     B  (  !'7'7!"'&'&'&547>763"jx#x@15+)T61@	
xݎx*(94=;78Q	

    B  $ =  +#5#53547>76"3276767654&'&'&g@16**)+50AGx#xT61@	G


))87;=49(*x##xH;78R	H

	     B  $ =  23'7'7##5#"'&'&'&54767676";54'&'&'&j@16Tx#xGA05+)**61@


G	R87;Hxݎx*(94=;78))	

H	  B  F  26767676763226767'7'7#"'&'&'&'&'&"#"'5[#$!x#x,"	
	
	"/x#x



%$

xݎx" !x##x    B    #'7#533'7'v81x#x81x#x'x##x'xݎx  9~   7'7ckn"[	kOcuP%     8   5!#Ђx"xhx##xw         !#!'7' zfx$xWxݎx    8e   !3!5x"xwx##x    e   '7'7!3 x$xxݎxW      5p   !5!7#7[_xݎxwx#x    ?^   !3!5Xxx"xx##x    2X '  5476767632#4'&'&'&7#7,#!A=PNZ]KS;>#"!*#13#'Dxݎxq!TPA>!  #<?ROZ/)(" C'%x#x   2X '  7#74'.'&'&#476767632xݎxD'#31#*!"#>;SK]ZNP=A!#qx#x%'C "()/ZOR?<#  !>APT  2V    5!7!##2lv<ĻʌvĜ<    B    	!!#33#'7!5!'7xpxxpxxx,xx  7 4  2#"'&'.5476732767>54/#7!&>((*MGgZsn_aMOP(%R.-'<0CA57---0v\bon_cMG.(()LNkoaZU-8:>=96/(-,r=ZHv   7 4  #5!#53276767654'&'7#"'&'&'&5476v0---75AC0<'-.R%(POMa_nsZgGM*((=\vdHZ=r,-(/69=>:8-UZaokNL)((.GMc_nmd    B   5!B#x4#x  B    !!BM̂xx#      M   3'#"xMx       M   #'x$M4x#    B   !5!'74x#x    B    '7!5xx      M   !37xM̂x    M   !#73ضx#x4   B 	   	'7!5!'7	5!!x4x##x4̂xxx#xx     M 	   	'#'	#737"xx$rxxMx4x##x4̂x   B 	   5!!'7!5!'7B#x4̂x*x4x##xxxx     B   '5!!!!5#x4̂4̂x>#xx#       M   73'#'#'3i"xx$x44x#    B   '7!5!'7!5!'7x44x#>xxݎ      M   %#73737#hxxގ#x4̂4̂x     B    '7!55!x#x4x#x  B    !!	!5!'7BM̂xM4x#x#x   B     !73!!!'7#5!!{Va6PEV`6Dx#x\HHVߞ;cff:bDx##xHH    B    !  7'#53533'7'7##5'35#HHDx#xDDx#xDHHHfDx##xDDxݎxDfH   B     !'7#5!7!5!73'7/!7'!8Va68PxV`6Dx#xHH;cff:bDxݎxHH    B    !!5!3HH\
Dx#xDyHHfDx##xDf      M   #'3'#' fDx$"xDfI\Dx#xD
\H   B    !5!'7'7!5!7Dx#xD
\HyfDxݎxDfH      M   %37#73fDxގxDfH\
Dx#xDH    B     5!'7'7%!7'!Dx#xDDx#xDkHHHDx##xDDxݎxDfHHH     M    '3'7#77'Dx$"xDDxގxHIIHWDx#xDaDx#xHHkHH    }6   ##7!#V`JvnJVJpvJ     T   	'#5!#5'5CJnvJ`JvdpJ^V  T   %753!5373JvdpJ^V^JndvJ   }6   %33!'38V^JpdvJV`JvnJ  B    !!!!5!!qYNx#xdfYfx##xf  B    '!5!7'!5!7!5Yx#xNYdYfxݎxfYf  B    3773#''#5[KLnDvvx#xPP~~x##x    B    '7'7#''#5377vx#xvvDnLKxݎx~~PP     M   %#5#535#535'3'3#3x$"xV¼x#xV      M   3#3#7#75#535#5353xގxV»x#xV   B  	    #553353!Ƃx#xC{x##x       M 	    5'3'#7#7x$"xnƂx#x}ʻ    B  	    3'7'7+53#53Ƃx#x}ʻxݎx    M 	    7#757'3'3؂xގxƂx#x}6  B    	!!#3xpxxx   B    3#'7!5!'7xpx,xx          5!5!	!!5  cm	깹]          333'#!#\^Z  	   A     !!75!!5  
]]YY         ###3!3"^\ZX0  	m       
    3'335%!!#	#^\znnZgm       
   %3'3#!5%#	#3!^\^dddZm!      
   #!5#7'#	#3!^^dd9cm!     
    #	#3!3#!!5#3f\F^m!וddkn            '33%#	##!#'37"\`\\\~$ym?TT     
    %3'3#!5'3!3#7#	##'37^\^p\\\@ddZm?TT  B  
   5#35!7'!!!5	5 ddm]]YY  'd    !#7!##gv<ĻdgdvĜ<     ,  x    !5!!53753dĜ<cg<Ļd       	   3'3#7##	#3	3^\\^XZZ֤mm  B    676323'7'7##"'&'#58X)O$A?x#x:[V6NJ9\63SxݎxH9ZY8J    M 	   3'#'737"xxxxMx4x#x4̂x    B   '7!5!'7!5!'7!5!'7x444x#?xxݎ  B    #5!5!53!<x#xSx##x    B    !5!53!'7'7!#R x#xxݎx   B    '7'7###5353vx#xͧx#xxݎxx##x   B    533##5##5#5353NXقx#xx##x   B    3533'7'7##5##5#5353Wڂx#xWxݎx   B    #5##5#533333'7'7j%jx#xj%jx#xx##xxݎx        	  	!!5cm	깹   B   	  7!5!	Y77Y     	    	!	7mmg7YY7)r  !    
  !!!!h)m'Z\'mcq+      76! !&'&"2767!! '&'&Q(
5jj5
w(Q٠sf)rr)fs  wZe   0  563 #"'&547632654'&#"3276767&#"lj/<Fh|olnh'8	 _S}()G:3?1&Q3!e$tqz[n̠ERAIo:I-.$,Q?IY       C   7!!5!!5!!pp`|+  C4     3!!#7#53#5!!5!3!	cDh>hZיrrh4_+__|z|  ? X ! 0 ?  "'&''7&'&54767>2"&'2767>54'&ww&'''OO_:3www('''OO_;4AA565
AAA565ww49_pm__ONP(&www4;_mp__OOP((D56MJ@
56JM@      K@&  % h 91 /90KSXY"%	!!{!5q       !!{q    d  m  C q?3	3 ް2ް22013!!"&63!!"!Q
)SS)
PH{__{HP  d;w   + m q?33%ް	222 ް2222*+/"/01#"!#73#!!3!!"'&'7&'&63 S)
W
J+!y53W	^c>H{HPPHC4|Pu_`P`_   c n  B 	/
33ް2  ް22fff01!!3!!".>3!!"U*^_*&,bމ`+   d  m  C q?33ް2  ް22	01&'.#!5!2#!5!26767!5
)SS)
mPH{b{HP  d;w   + k q?33*3+3  ް222	ް222%2/"/01%326767!73&'&''7#53!5!&#!5!2'#܃S)
V
SK,"xk
52X	^c>H{HPPHC4PuP`b  c n  B /33fff ް2ް22	
01!5!&'&#!5!2#!5!276|*]^+&,bމ`+        3!     L9  @ _ _1 20!!!9 _ ^-     L9   !!!  L-^   LP  *@ 	 
<91 990	5!!	!!5my=/9) Ӈ  B   v 1 0!!BK  X  y    !!5!3!!!5!ff!bb   qB`    y TU   e  t r     X)-   1 
 ,@
 
	 91 90'%3##q@`44{$  1v&4   u) 1e&4  H=      %  .#"326"&'#"&54632>3"36J0<KC78\K@7W\2-Z"b"0P&{|Su^_rhbkgf类hikfngt[         / 7@$	'!	-0 $GG*099991 <2<299032654&#".#"326>32#"&'#"&546320P2;JC88b6J0<KC78\-dW@7W\ut[u^_rna|Su^_rh1kf๲bkgf类h  X y   %!3!y3   X y   %!3!y  _         )!!ֈij         !!*^j          32#4&"#aaZ4tt\          32653#"aaHZ\tt     ^>#  @a /<<1 @h
h//047632&#"#"'732UpsXlNGUnsXlNGD"McoHޕMcoH     ^#  +  4632&#"#"'732%4632&#"#"'732ronQ.A&ronQ.A&ronQ.A&ronQ.A&D"K&ޑK&"K&ޑK& ^#  + A  4632&#"#"'732%4632&#"#"'732%4632&#"#"'732aroKnR&roKnR&rnLnR&rpKmR&roKnR&roKnR&D"KzޑKz"KzޑKz"KzޑKz    iB'4W'W$    i>'0$'$ W   i'$ W    iB'0$'4W'$W   B&.   t  J i     !!!!!!PMM:>    / 6'n$'oT'$'T.   X  y' ' ~K    Xy0   #"'&'.#"5>323326yKOZqMg3NJNS`u_G0;73
":?<776<    Xy0   32?3632.#"#"&'XJG_u`SNJN3gMqZOK0A<677<?:"
37;    X cy   &#"5>323267#"''43NJNSFXɉ;5GJKOK[C:?<7Dj<A;7#lD     X y    #"'&'.#"5>323326!!yKOZqMg3NJNS`t_F(!Z<73
":?=676=     X'y    #"'&'.#"5>323326!!yKOZqMg3NJNS`u_G)!;73
":?<776<Y     X  z '  767'"'!!'7#5!7&'&567676F^UE;eFT(O^jgR;uIF\<[ETFR&'"B6$P(9L5h  X <y   "  #"'&'.#"5>323326!!!!yKOZqMg3NJNS`u_G)!!;73
":?<776<P     Xy  .  #"'&'.#"5>3233263!!!'7#5!7!5!7yKOZqMg3NJNS`u_G`aG#z`;73
":?<776<Puu   Xqy /  7#5!7!5!7&'&#"5>3236767!!!!'\UQ:43NJNS`jNDJKHEL=a?]R<#:?<77
YA;X   X y  7 Z@110+5.*'   '.5 810 *8<291 99999990#"'&'.#"5>323326#"'&'.#"5>323326yKOZqMg3NJNS`t_FIKOZqMg3NJNS`u_GZ<73
":?=67	6=;73
":?<77	6<   X =y 4  &'&#"5>3223267#"'3267#"'&''75>3243NJNS`f]GJKO)-D\NFIKOZqgZpNS#(:?<76 Z<A;7%=@<73	Z
o=6    X <y  6 :  #"'&'.#"5>323326#"'&'.#"5>323326!!yKOZqMg3NJNS`u_GJKOZqMg3NJNS`u_G)!;73
":?<77	6<;73
":?<776<Y     X y  7 R  #"'&'.#"5>323326#"'&'.#"5>323326#"'&'.#"5>323326yKOZqMg3NJNS`t_FIKOZqMg3NJNS`u_GJKOZqMg3NJNS`u_Gu<73
":?=67	6=};73
":?<77	6<;73
":?<776<    X <y   "  32?3632.#"#"&'!5!5XJG_u`SNJN3gMqZOK!!A<677<?:"
37;1    W yY      %52%  $'"51pZV(I؜    X y  ;  76767!##"'&'&'#5!!5367676323!&'&'&i1*+V	/J]?3hG2"W,!::!,"2Gh3?]J/	+*%'H@450U(33!\?&5?H''H?5&?\!33(U054@H'%   X'y  !  !5367676323!&'&'&!!i:!,"2Gh3?]J/	+*!'H?5&?\!33(U054@H'%  X'y&     ) XZy&    ' H ) XZy')'kH     XZz&    'Hl)  Q       !!!!3#3#	     Q       !5!5##:/cAB     X'y 	   365&'!!5!&547!5!!%4344 ! 0?=00=G(?.4;U.    X'y       !!!!"264&'#"&5476X!!3FFfFG2TUZYX^D11CCaERR}wWT||U[   X'y     !!!!2&'56X!!ɗ	   X'y     !!!!3#X!!wtM[*     X'y     !!!!33#X!!tw*   X'y{     !!!!!!%X!!jCdfAfdY2ξ;3   X'y   
   !!!!33!X!!iӡoU3'  X'y     ! 6 = Q  !!!!53#5#"&4632264&#"%#3267#"&546324&#"#"3##5#535463X!!ii3#<NN<"4/"##"!##B.)!E$%J%YbaTM]l"&
:YYh44;?`:0``1]11]1a%%QZQP\]+$"  DKK53   V'xh   -  !!!!>32#6454&#"#4&#"#3>32V""V!Z6^b"%25'26 R28W35uo:5SN[5SM%Q//7    V'x:   % )  !!!!#546?>54&#"5>323#V""J 6 0*)^3<d/z'/ "N*?1.#'!!d_1N, %`   N  >@"
  v
v	 <291 <2<2.990!3!!!'7#5!7!NŮmA1}    X <y     !!!!!!X!!!   Xy{   !5!73#!!!!'7#537!5!~P$fZ=e(lN"ebSbK    Xy      !!!!!!!!X!!!!    X  y  
 &@ v 	<2291 /905!5y!PNF   X  y  
 &@ v	 <<291 /9055%!!X!!   Xy  
   3!!5!5X!!!
PNF     Xy  
   3!!55%!5X!!>
   X}y    #5!7!5!73!!!'5ZYM{~	X!ii행PN     X}y    #5!7!5!73!!!'55%ZYM{~	X!ii행    Wyq   &%5767$'567Rȳ}v֜Pĳ~wԞP(Fd%EP7(Ge#  Xy    %5%7%'bk8jyx!:_|:XC     Xy    '75%%57'xk8Zj<y:_|B:[XC     X<yD    7%!!'7!5!7%5%ykSnKAD*ZWOzd#@4=PhLx"L    X<y@    7'#5375%7%5!!' z0VFdjeG'C0'Pau6LvL     Xy  !  #"'&'.#"5>3233265yKOZqMg3NJNS`u_GJ!;73
":?<776<PN    Xy  !  #"'&'.#"5>32332655%yKOZqMg3NJNS`u_G)!;73
":?<776<     X<yD + .  7%3267#"'&'&''75>327%5%RmKKt`GJKOZqG:GAFJNSMOyel<Pg	6<A;73
	L?<7܊"L+@4  X8y@ - 0  %33267#"'&'&'&''75676?5%7%5?'7;t`GJKOZqM3T.=ASD"%VGckeW6<A;73
"L7@lPau1Ly/'     Xyy    55%5X!>!PN   Xyy    5	55%y!!PN  XTy1   !  7%'757%57%5%77'4PGx0e4P0GkB$$1F4F \}F5F \|t?t?     XTy1   5%%''5%75%7XZuu:&uvk;Z&vFIs}FyJs}    Vwa    %&'567$wSh"/_D$#Q_    Vwa    %$VhSbQ#$DbO/"   X[y    5   %$X{qQ_#pOKI4
&    X[y     %  %$ynq{_Q#yBpR&4	RIK   X2y  %  %#"'&'.#"5>323326  %$yKOZqMg3NJNS`u_GJQ_;73
":?<776<TKI4
&     X2y  %  %#"'&'.#"5>323326  %$yKOZqMg3NJNS`u_G)_Q;73
":?<776<TR&4	RIK  Vw    67&%'&'567677\RN@E߾\SiIRa_bIGE#"R!+  Vw    '76?&'67&qRN@E߾\SiIRab_bb*IE#"R!+D   X yx   !!"3!!"'&5476?:nLMm:׃x|~KM᎚ِ    X yx   2#!5!27654&#!5̍:mMLnxϚMK~|     Xyy     %&'&5476;3!!!"''#"T=1̆cHcw.nL!5ِEFǚ|~K     Xyy     +'7#5!!5!232654'&'}=1̆cH>9c.nLA!5ِE,F9|~K    Xy)    %!5!!"3!!"'&5476y:nLMm:׃c|~KM᎚ِ   Xy)    7!!2#!5!27654&#!5X!:̍:mMLnQϚMK~|    Xy  (  #"3!!!"#!!'7#537&'&5476;7OnL!-u/K.~=M=̦CH|~KuLx#BِE   Xy  (  !5!27+!!'7#537!5!327654/:*'EE/&`-u/K.~-/mMLL
,E(ϚuLxuMK~|M	   X y) !  %!'7!5!7#"'&54763!!"3!!y(6^N׃:nLNl:=6ؔDuِ|~KM1D  X y)    2!!'7!5!7!5!27654&#!5̍Kh]6(6^:lNLn)ϚR"KDؔDuMK~|  Zw    3#%3653! qwyRVB     Zw    3653! 3##5#535ZwyPFVBZ  X Vy   !!!!X!6     X Vy   !5!!5y6    Xy    5!!!!!X!!6*@    Xy    !5!!5!!5y!6?j    >     #!#    >     33!3>    3  3 ?   2"&'&'&547676"2767>54&'&'3!!#!5!WV,+++WWWW+++,VWGE:;99;:EGFF:;99;:FXVWih{xihWVXXVWhix{hiWVj9;SP;99;PS;9      3  3 7   2"&'&'&547676"2767>54&'&'!!WV,+++WWWW+++,VWGE:;99;:EGFF:;99;:FMXVWih{xihWVXXVWhix{hiWVj9;SP;99;PS;9     3  3 ?   2"&'&'&547676"2767>54&'&'77''7WV,+++WWWW+++,VWGE:;99;:EGFF:;99;:F8xxyxXVWih{xihWVXXVWhix{hiWVj9;SP;99;PS;9yxxx     3  3 7   2"&'&'&547676"2767>54&'&''WV,+++WWWW+++,VWGE:;99;:EGFF:;99;:FxxXVWih{xihWVXXVWhix{hiWVj9;SP;99;PS;9_xx      3   7  !!2"&'&'&547676"2767>54&'&'M.WV,+++WWWW+++,VWGE:;99;:EGFF:;99;:F/XVWih{xihWVXXVWhix{hiWVj9;SP;99;PS;9     3  3 B L   2"&'&'&547676"2767>54&'&'2#"&546"32654WV,+++WWWW+++,VWGE:;99;:EGFF:;99;:F7b%&'qqX>=,-?XVWih{xihWVXXVWhix{hiWVj9;SP;99;PS;9d)'%`8nqq>Z<=,,      3  ! ) / 7 ? E   2"&'&'&547676&'&'&'75676767'%654'WV,+++WWWW+++,VW:F!#!E:ֈ	:E!#!F:
	&XVWih{xihWVXXVWhix{hiWV9
9{18@9p99

w:A92t   3   ! ;  !!!!2"&'&'&547676"2767>54&'&'+{{WV,+++WWWW+++,VWGE:;99;:EGFF:;99;:F@XVWih{xihWVXXVWhix{hiWVj9;SP;99;PS;9     3  3 7   2"&'&'&547676"2767>54&'&'!!WV,+++WWWW+++,VWGE:;99;:EGFF:;99;:FMXVWih{xihWVXXVWhix{hiWVj9;SP;99;PS;9    2 K     3!!#!5!!!!o   2 K     !!!!!Moת    2 K     77''7!!!
yxxxoixxyxs   2 K     !!!!!M3o/    B     !!#/^    B     !!5!3^
  B     !#!5RP     B     35!3!B    X my    5y!.    X my    -'55E.!U`a  X  y  
   %!55y!!
$]PNC   X  y     7!!-55X!
!U]  g     &"26!5!6762"'&!OsPOtOrw#[륢S'PQqOO>-"YR%    ZLw   #4&'&#! wwy H\P  Z/w   73653! Zwy\H     x<    	|bc|zb     w 
 1 0!!M    v\ 	  !!'*]])]\@寯     X'y    32?3632.#"#"&'!5XJG_u`SNJN3gMqZOK!A<677<?:"
37;     
   !!%R |+       
  # !!$|+     Zw2    "&63!!"3!   )!"  3!
m)99)mmmmD9R9:|     Zw2    2#!5!264&#!5   )5!2  #!5Ǆm)99)mmm9R9rmm     Xy5     -5	5!5X!!!nPNF     Xy5     555%!!y!!!NP     X  y  
  %5!5!y!!NP     X  y  
  7-55!X!!   X[y    $  %$ XZ!ktO+yOpm&
4IK    X[y    $  %$ yZqOtk+pB	KIR	4&   Xym ! $  67&'%'&'57&'$77Iy'Ȭ)~ዜ˰(8m0p[^䈿D0A !FI
l     Xym !  67'6?6?$X,u|ռ0Jy7ٱR#0(
D](30ZBǋR\R\  Xy&    3#!!!!'7#537!!!>F=0|bF=&N@NU@    Xy&    3!!!'7#537!5!!5!3>F=0|bF=&NjN@     Xy   5!7!!!!!!!'7Xw!6_H4%H@Cff     Xy   !!!'7!5!7!5!!5y_H4%Hw6jCff   Xy "  %3267#"''&#"5>327%5yL;5GJKOK[_b43NJNSFXH!e<A;7$D :?<7իN     Xy #  53267#"''&#"5>3275%X!V_;5GJKOK[_b43NJNSFXJ,<A;7$D :?<7۫    X=y 
 &    %$	&#"5>323267#"''yQ_k43NJNSFX]_;5GJKOK[_KI4
&:?<7D<A;7#D    X=y 
 &    %$&#"5>323267#"''X_Q{43NJNSFX]_;5GJKOK[_R&4	RIK:?<7D<A;7#D   9;/     ? X!    r8R   5:zJB   n  c  	  3	%!	n}VN    ?>   	#	#hGf    >   	3	3h*f      >  	  	#	#!!h
gGf    >  	   	#	#!!!!h
ggGfj    !#! /+   !#5+d    !3
" /+   !53!+
d  R    !!3#CܐRL     R    !!3#C	RL   ~    3#!!C~ L   ~    !!3#C	R   Xjy   !#y  G ,    $%%$nn!"nn8ʸ    
7       !%6 !&'&";112Q2qp`XXV@@V  Y      	67"7,J5PP5JkX*77*I=   P     "2642#"''7&546xtyΞi56؝wYe:vuvo3N=eXt    # O ' + 6 @ K V  #"&46235462+32"&=#"&46;5#'54&#"3!3264&#"32654&#!#"3265k֘֗kk֗֗kL65LL56LM56LM56LM55LL56LJחkkחחkkט5LL56LLkLL55KK65LL65KK5   Xjy   !3!y3j       !#!       5!#5; p;   !!3X   p;   )3!X;5   f   477632#"&'&'&#"jkbwL=.>\ bP<I0-".#<    C   0#"&546323265jkbwL=.>\bP<I0-".z#   @     !!!#%!!@)NW?Q   (I  
     	!!#37!#3'Q((qdd&&ddo!p         _(rI       !!#73#'rwdd#vvdd(!o   + 2"   # / ; G S _ k w           +7CO[gs  !2#!"543!254#!"+"=4;2+"=4;27+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2%+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2'+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2'+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;22+"=4"=43+"=4;2+"=4;2"=43!2#\\K\=Kl]\\\\]ii\][]\\\\\\\\]\\]\\\\\\x::f>]Y"\I\\\\I`LLMK\y>>   (I  
     !!3#!#%33'((d&sd    4^   7	h\\D?cc   B     !!!5!!5RR(      !!!OZW          !!!!5!5!![[[ZWT            !!!!!!!!!55[[˰f
W5        !	7	!!-.O|c;5[Z.Ґ|_W= &  	?          #  276'&"! '&'676 !%!pqqpB`Ϙ_BB_1`B[5;@@@@EI7XX7H"H7XX7IÐW     3   #  3#&'$%67 %676'&ff2ffff1ff=>>=E>>>3;@;$;;#p#3##     tD&  
"     BB   3!!#!5!M%6    BB   	#!5!3!MU6%  4   	  !%!!,5m5A    4   	  !!!!;rԵ5mY5A          !!	![[#ZCoW^pK        !!!	;[5;Ő[#Z    B3   5!3!!#!B#x^x#x6x   B3   	'7!#!5!3!'7x]x#x6x     
   !%!!%!ex[xWx x      
   !!'7!!'7!;Őxex[xÂx       '  3273632#'#"'$%65'&#"pp./NRR2]PQ
pqp/@XX`H>@    B    !=!3!ZZ    !3     33!#!3!3POJ3+^/   4     	57!!#xr;rw/Krm-  4      %!%!5 !53!]UPmrZ[z     B     "  35!5&'&7673!654'BB4_`4AD1b`4CP5544}4_`4&1c`3)2HK33HK2     B     	'!!#!5!'"xKJx$xMTx#     
   !!	'!'!;xcx~Wxwzxw     B      !!!#!5BKKRPT    !3     3!###!##mPOmʀʀ3+^   4     !5	!!	3!xS;ZKmy  4   
   !!!!5!#];r~U[ZZ,     B     #  !#&'&547675!5654/RC0b`3BC5_`5BP3366:2e`2k5_`58'2GI23JM2     B     !7!5!3!!7"xJKx#x;4łx       
   !%!!7!!7x&xWxpwx    & 
       &       >'
      &       D'
"         D     &#"632&"26"'# #'(J^\NcdbdTN+ddbc724  &	?   
     Z^&  
F    &	?         B       3#%3#!#!5u`RP           
   3#%3#!!un2xq  v7&    -i&    8  t'
"          B3   653#&'&33zgJʾOhz)<Ґifj3Z\|Y
    Xy3    3!!!!#&'& TTʭpH6LL7uEy 7NL7    Xyi& a    8 X myi& !    8  B  	  !!!#BK9c  !     %  !567!6!&'&'&'yKHFJ97;6L2J!/,3
4(`<?-joo	
l   Xy  ( 8  #"'&56776326"&'&&'&'&'&'3276ym{{dm{{cf/
%#2J!UI*/YKX
M3  +/fg/Do}R(p}I	(
"q}}R     Xy3   #"'#&'&#"5>323326yKO<G43NJNS52	PCF<7N:?=6=  '    !!!#7#537!!M_;{&Mo55        !3#!!'7#5!7!!!!zwzwm[1}W    &	?   "      X  y    67!!67!%".'X[XU*>P!G*iceOu5c|oq/1$HpX?+.D`0   X  y    !.'!5>3!67'ydafN"<U|ko;=QijzxBQ%C^.C{j.	|  `   Vw{   @`   y&       N}&4       `&       `&       6y    $   !//1 
 /<205!!!#!	CC  4: 
 % +  "326=7#5#"&546;54&#"5>32	7	]J3,AI^9lys:9<o=7q@}\\/:*3bX?F)-qeni() |?cc     :      5  53353!535!"326=7#5#"&546;54&#"5>32M#%]J3,AI^9lys:9<o=7q@}#/:*3bX?F)-qeni() |      :    - 8 S  %5!!5!"326=7#5#"&546;54&#"5>32"326=7#5#"&546;54&#"5>320;0]J3,AI^9lys:9<o=7q@}]J3,AI^9lys:9<o=7q@}#/:*3bX?F)-qeni() |/:*3bX?F)-qeni() |  a       " =  %=!!%%%5!55%"326=7#5#"&546;54&#"5>32'''']J3,AI^9lys:9<o=7q@}X/:*3bX?F)-qeni() |     H 8 1 7 = C I O U  %#5&'&'&''7&547'7676767537'56767'7&'&'57654'(&D9
FF
9D&()%E9
FF
9E%)-&rr&--&qq&-rs88hyh=DF<hyh88hyg=FE=gyg8%BwB%&AA&;#"BC "# B   F ^   ' 0  4>2".33&'."#67>76#FVʓVVʓ= mm &#Km % mK$ʓVVʓVVj,(Km@@mK( mK,K/,Km    F ^    % .  !4>2".7!&'."67>54h<VʓVVʓ7@mK%(e`	77	(%Km@cʓVVʓVV9Sm %H	
6@@6
} mSP     F ^  	 %  7'32>4.#52".ut&F@mm@@mSoʓVVʓVnt]&sْFUSm@@mm@VʓVV       !!![ZW     m   !5!ݠ r0p        !!#v      !&5 ƠT_C   m   5! p g    !0v	        !!#ƚ ΐ,U  m   !!! #	q       !!#v      !! 	r    m   !!# N#      !0v	        !!!# #   m   !4763!!"{zf+!u0%    y   !4'&/32765!-9+en:==@ne( =F|AEuH<  y   3!!"'&5!+f}{y%0W   y   !!	  m   4'&#!!2!+fz{}%0   y   &'&!;!76<(en@==:ne+!<TuEA|R=   y   !#!!2765{}f+!y0%       !  	z       %	!!!#!55!mw	¤]]]           !	!!;bc;$<   n$c   	1  /<03!3n$CV    j   5!j    l   !X      3 	      !@ 	  <j     5!!5!!5!r#B#B#j    <l     !!!!!r#B#B#XXX m     333mjjj  m     !!!@@@mjjj  <j      53353353353<xxxj    <l      3333333<xxxXXXX   n      3333p^^^^    n      !!!!@@@@p^^^^     !!      l   !! l       !!#      l   !!# l       !5! j     l   !! X       !5!$ j     l   !!$ X   j   3!-j    3!-m    j   !!@j       !!@m   j   5!3,jk     !3,X j   5!!@jk    !!@X        3!!- 	       3!!- 	    	  #!!!P@ j   	  33!!P-# k      !!!@# 	    	  #!!!P@ m      	  33!!P-# l     !!!@# 	     !5!3, jk       !!3, X    	  !5!!#@P jk   	  !5!33$,P jk      !5!!$@ jk    	  !!!#@P X      	  !!33$,P X     !!!$@ X     !5!! j    l 	  !!!!- XV  l 	  !5!5!!, jV  l   !!! X     !5!!$# j    l 	  !!!!$# XV  l 	  !5!5!!$# jV  l   !!!$# X j   5!3!,-jk  	  !3!!,-XV    	  5!3!!5,-3jkV      !3!,-X   j   5!!!@jk     	  !!!!@#XV   	  5!!!!5@jkV     !!!@X      #!5!3!,-jjk     !!3!!,- X       !5!3!!,- jk       !!3!!,- X      !5!!!!@ jk       !5!3!!$,-# jk        !5!!!!$@# jk       !!!!!#@#P XV      #5!5!!!!P$@ Vk      !!33!!$,P# XV       !5!533!!$P-# jV       !!!!!@ X     !!3!!$,-# X      !!!!!$@# X      !5!!!!$@# jk      !!!!!$@# X  <j    5!35!<yj  <l    !!!XX       33lUTT        !!@@lUTT     5!5!  x X    333x 		    	  !!!!- ¬B  x  	  !!##xms j  x     !!3!!xm3-s ¬jB    	  !5!5!5!, >   X 	  5!###ljjj     X    !5!!!5!4l t, >  	  3!!!--A   xj 	  333!xjk   x    3!3!kA  	  5!5!5!3,,=    jX 	  5!333jkk    X    5!35!3̠=      3!!!!-- 	AB x     333!!xs 		   x   	   3!33!!-skA	jB        !5!5!5!3,,   X    !5!333xt jk	    X     5!3!5!33t,	       !5!!5!4 B     5!!###sjjj      	   5!!5!3!!t,-sjB     5!5!3!,-XA   j   5!333!jkk     	   5!5!333!XkA       !5!5!5!3!!!!,,-- AB        5!333!!###sjkkjj         !!!!5!5!333!-s t, jBkA        43!!"yY[ p~|     4&#!5!2[Yx p~|  j   5!2653#xY[j~|q    j   !"&533![Yyjq|~  *m   3YѲ/	Y   *m   #3*/	Y *m   #	#	3	3*i    S   jh   5!|j       3?  hj   5!h}j       3 @  hl   |X    !@? hl   !h}X     !@ @ l   5!5!!5ijVV     333PP ?@    l   !!!iXVV     #!#P@P ?@  	      ?   ! ?    j   ! j      ! k      ! @      !       !    B   ! B      ! 	   F   !Z 	      ! 	      ! 	   h   !| 	      ! 	   *   !> 	       3 	  i 	}       8m         # ' + / 3 7 ; ?  53!5353!5353!5353!5353!5353!5353!5353!53Z667576   l         # ' + / 3 7 ; ? C G K O S W [ _ c g k o s w  53%5353535353535353%5353535353535353%5353535353535353%5353%5353%53eeefffdddheefcd!!!z   
  m         # A  35#35#35#35#35#35#35#35#35#!#5#!5#!35#35#35#35!3h̚h̚̚h̚̚hϚ2̙Ϛ#366 B	  B  F 	Z      i   !} @ i 	}    i	         !!}} 	@@    &	  	         !!!@@        !!  i	}   &	  	         !!!}}     w   !N<    w    7!!!xr$<     w    3!254#!") ) xrVVV   w&
  	      w        !%!5!5!5!5!5!5!5!5!5!N<rnrjrkrkrj  w        !'3#3#3#3#3#nnjjjjlljjN<r        w         # ' + / 3 7 ; ? C G K O S W [ _ c g  35#35#35#35#35#35#35#35#35#35#35#35#35#35#35#35#35#35#35#35#35#35#35#35#35#!xjjjjjjjjjjlllllllllljjjjjjjjjjjjjjjjjjjjnnnnnnnnnnjkkjnjkkjnjkkjnjkkjnjkkjn<   w          !373535353534B`JlТN<0JjL[F/    w          !%35535#5#5#57#35Њ4`JMlЎON<r3B`Jlѡ      w  	     ! % ) - 2 7 ; ? C G K P T X \ a f j o s  %35'7'#7'7'#7'7'7'#7'7'7'37'75#7'7'7'7'7'75'7'7'7'37'%75'7'37'!$J#B"L!MLF"ELUELF#EKALE!UKLLKLLLKLJ$K#tK"MKEKLKKKLLKKLKEKJ"KLKKLLJLL$NK$E#EKEN$EH$L#'"L LE"ELELE"EKALE!KKLKKLLKL$K#tL"JLELKKLKKKLKKKEKLR"KLKKLJLLJ$KE"REKE$E<       7!         %!!!M6r6X     8   %!!;H    8    !!!YS;bdrH  Dw   !DHN<  Dw    %!!!drH$<     8   %!!o4H      8    !!!aSo4bdrH   w   	bcN<   w    7!	oHbc$n <      7	        %!	s     w   N     w    7	xor\         7s          -M<r2s         7Ňs          -x6r2s  w   !hN    w    %!	!hŖn         %!hs         !!h<skX  w   b<    w    	oHpHb<                  X               #6  w   	bcb  v    	|bc||b    v     	
nn65bcnn66b  |   )  7632#"' 3276'&#" %632#"'cccccccczzzzzzzz12Ι/r99r6r99q̌GG2GGXX@XX  u#\u   "@  91 990	h9%-  |    3276'&#" %632#"'pppqqppp~12Ι@@@@XX@XX    | 	   ' / 7 ? G  &'&'6767&'&'7%'676727"'64'7&"'62&47 *!)Q7-:*(!&$13-7C *!(P7-:*')!* *:-77n7(KKL7n7(KK,# %0:# /]A*% ,# %0:##,^:0% :4t4(GGL4t4(GG   |    % / 3  6%632#"'327&#"6767&'&612Ι&&&&bbP'''gXX@XX
		qzz.!h	*	|l    |   ) 7  3276'&#"32764'&#"7632#"'%632#"'pppqqpppZC"!"!DD!"!"z===={{====12Ι@@@@Ț'''F##FF##XX@XX     |   6%632#"'12ΙXX@XX   |    %276'&# %632#"'hzzzz12Ι'G2GXX@XX    |    "3$%632#"'hzzzz12ΙǦGXX@XX    |    '&#"%632#"'Qzzzzz12ΙGGXX@XX     |    3276 %632#"'zzzz12ΙGGXX@XX     |    "3276! %632#"'hzzzzzz12ΙǦGGXX@XX     |    "! %632#"'hzz12ΙGXX@XX   7|   "'$%630TXX  7|   2#82Κ|X@Z (    3267>54&'.#"! 624HI347652IH637J347744IH426532<     (     67672"' 327$%&#"!zzzzzzzz12Ι4FG΍FG@XXXX(  (    !#%&#")7632ΙK/zzzz`XXGG      3327$3!#"'&12zzzz XX`GG    7| 	  %63"71{y`X{G    7| 	  2#'&#82{{x|XG 7 	  527638x{{ΚT{GZ  7 	  "'$33{y{TX`G   |   0#'&"#%632ˡqppp12A@_XX        32763#"'$pppqΙ@@XX`    w   N<     w   N<     w   !N   w   !v<  `  /  3267>54&'.#"467>32#"&'.H+(*h9;i)*,++(i::f+),H736HI256743IH426<h)*,,*)i;9h*(+*)(i:I235624HI447743  w    %!!!h$<   w    7!!!xr$<     w    7!!x$<   w    7!!xr$<  w     %!!!!!IIr$ <    w     4632#"&!	N88NO88MoHbcj8MM87NMn <   w    %!	hHbc$n <     w    7!	bc$n <      327$'&#" %632#"'k ~ ~>?:IILII޸[["[[  w     !!!!!!IIN<     w     !%!!5!!!I) N<rr  w     !%!!!!!I) N<rJ(   w     !!!!!!IIN< *  |      6%632#"'!3276'&'12Ι^]Tzzzz^]XX@XX6~r~GG26  |      6%632#"'%676'&#"!12Ιj]^zzzz]^XX@XX'62GG~r~6  |      6%632#"'!&'&#"6767!12Ι]^zzzz-]^SXX@XX)΍6!~GGq6~     |      6%632#"'32767!&'&'12Ιzzzz^]^]XX@XX)΍GG~#6~6O     w    7!!x6r6     w    	%!#66r<   w    7!x6r$6X<   a o    7!!!*r*d     a o   7!a     [!    %!!!!rrr r     [!   7!r[r    w    %!	#6$6X<  	 " 1    " * 2 : A I  3#''%#&'52#"'&5476!!'5%!!'53'5%3'5%3#'N<<.0/#E
7$L4z8hY/6.0<<1y112+KO1HP====f^1 .1\    5  "  3263#!5276;'4?'4?26G!S?1#R a})J̎5B ,>jBZ7=    " - ?  33 #&'&+"'&#"/573;2?"#'57#&'#"#567635a)8)kOkaKA-'=
//G),Y=	!H$/+HDH)+)	$.,fY   Yx 	   ! = Z    Lx  73&'37&'67&'67&'67'32654'&'7654&#"3672 $54767&'&47'&27632#"/#"?#"54?'&5432'&327632#"/#"?#"54?'&5432'&327632#"/#"?#"54?'&5430'&327632#"/#"?#"54?'&5432&5432&56327&5432'&327632#"/#"?#"54?'&5432'&327632#"/#"?#"54?'&5432PO~	)*+')+(@&'$||e?/A}]\B-71SLoWj\vLLr%%,*#$)*n$%+)$#*+						?	'+&()&(+&p				%%+)$$*+*EC*Z*,)-)-*,%&%&fБfU 5HhfeefhH2pu^QFs棥sKQG44		22044	22	9





		L%('*%)(*%)(*t				144	22	      0r  ! 2 C T e v          +&'&54?6?6/&2#"/547672#"/547672#"'=47672#"/54762#"/54762#"'=4762#"/547672#"'=47672#"/54762#"/547672#"/547672#"/547672#"/5476l=.%G\&#-	Lj.N
0d&K4i
	
}
	
g

s


	


&





	

	

	



	H5-V"*<CZ+
]	__f8A%\m$=F	!
	"		"		!		!	"
	!		"		"
M	"		#		
!
	"
   : 3 	  !!%:kl  : 9 	   !!%7%%!!:0d	mhdll˿@8    	   	7%7&54769	}V&7A6$8'^4?
     ;     !2	7%7&547!#"54z<S#N1DCS"="l.3ED[:     +    &   #" 54$32   54. #"&54>2-.T<:U'EGE'DN-ֈ<SS<&E$$E     
  C   "32654%"32654&%#"&54767654$ #"&4767&54 32 qOO98O8PP88OO"FccD>U]  \`CDcbF]WWZA@ZZ@AZZA@[[@AZKPrqqrPGeޝdMP䠠P}2ٛ    k 
  A  4&#"26%4&#"326 #" 547&'&4632 $54'&'&4632XP79NNqO.N97OO79N']EacDC_\ n \U>DbcEXFDbbDEaaEEaaEDaa+G詄UUSj멏i	LVV     6     "32654&7 #"  32?ɏǾ/`TcȐɎ;P12Y   .    1  "264& "3264#"54327&5432#"'&'@KjjjiOiiLKirqrtPssrqQܩZTdIU     ) 5 A M Y d p {       3/&76'!'47653!476=332654&#"#"&54632'#"&54632#"&54632&'&676&'&676'.7>'.76$6&'&%6&'&6>'.>'.f<;.=+,>/;Kyz~LZ|WX{{XX{IE11EE11ETm







;
R






s@dd@s}>}=/NnN/=}>@MllMNkk&%I%
%
"!$#"!"!!
&
%%&        % - 5 A M Y d p |       5#!4'&'5#2#"&546"264&"264"2647>'.7>'.%676&'&>&'&7>'.%7>'.676&'&676&'&753!476=3''676%27/&76'77&'&/#?6'&7liilYz{XW|{bEEbEd






8
@





.HxttxH%?%5E$66$D5%?%-5!!1(~(1  5,4t4(4N4(4t4;hhh%%#%%$%_$$!"!$!/!!!"$$$%:-,GtG,-:XLRqqRLX![$n[ii[n$[!    o b    !!'!tKZGk     cn   "  !!'!##&+572367676hNn_5,S	Grj3#-EmDJ~o.(*!4\tR~U      L     !!'!		##'	CI3Z><<5DCX<<;     YD   36273	##' 5&<+Z@\\DC	ZY\  5    # , 5 > ~  3+&=4%3+&=4%3+&=43+&=4%3+&=43+&=43+&=4%33 #&'&+"'&#"/573;2?"#'57#&'#"#567635@)A({@(@){A)A(@A(^)4'iOj_J@,&<
//F(0'&&'ܐ'J&(lN5		>!	)&V?<?$&$ '&ZN 	 N  	   / > E q w   !674#!!6?676'4#'323276767654#3#&'&'&6%67!672!&=75$/563&43!32+'!67#>54&53*,
3)="(&)09$)L&TE`MPA[MHY$;&&e=O%/N,8(.7L1Rf~H8SQ,zH%9D6)jGP@4Rjd_*KfsDIR		
9!
O
-]&C+/<Ug@A5O!+G    8     	!'	!n?BZ96\wL5_K     /  	  	!' 7lBDwD  &  B  '&54763263276#"'&/#6#"'&'&6&'&547676R8CCBC,G*
Eh]6e;,0Q:nH;P0+	;e6\i~TZW4XX\"g^R) 
56.'_E!
SBS
!E_'.75
 )    /t 9 >  3#"'43727&'#"$472776725676&5&U8)$tJ.;	d3f,"3'
VD
( GL/7;;,gt^F$<
LD&?>X4R!/# I
? P?D!)Mv>     /z 2  !"&54676737#&'&54>;7#"&546767!7!"&54>3!6763!2h!.)g$'30!/&j! /:(/	)/
9)/	9)0:*     0z 2  463!2!2#!!+32#3#i9/ !j&/!03&$g).!);0)9	
/)9
/*	/(:     ! ! C  4&#!"!&3!!"3!#";#"3&'6737#&'6737!"'67!7!"'63!67!2e;'+pCCo
CC CC2CCKK<LL KK%JJ60"2=2).=<==<@=:>=;TTUSUTUT83$Q     E ! D  72654'6#"'4#"'54#"'54#"'675674767#%$4:JILLHOKHLKIhghgighgD>-sJ1 b6'SScRR	SS?SS\\K\\;\\]]!A*>K      ! C  !254+'3254+'!254#!'!254!&#!"0!463!!2!!#!3#3lCC2CC CC
oCCp+'q=2"06KJ%LK LL<L2;=>:=@<==<=.)g%27TTTUST   E ! C  32=732=7325732'654&#'%2&'&5&'5&'IKLHKOHLLIJ:4$N->DghgighghSS=SS	SSbSS'6a!0J)K>*B \\]]:]]J]]    O                   !%)-15  23656;2#'7+"/#"'+"5&54775'"'5476;25'7&567635&56;374765'75'76=4'&+ '"'4!#"'&36365&5&#%#754'&5&&547'5367&7+&'&'735&2?"5775537'7'3533553535'32767&5%2?&#%55'575775775uo,Mz"060D/5I:2'5:6&"*:D:S46$.e	QN5


u4MDa
6bUP+
,H;`I23N5(
(#I0M
'^5%#!:X+	"*
6W}W:uW4
5vT&	/H3VXD9\SL+&31.d+%X!Q
$2``KPPPG[6%#

Qy-6[[3GK[O`_A[-)$t7
L-$
L6="	(CJ#R"0:~GB{~Eoj<4S[ZaLC5)
.U%+Z&)͢7e<ILAaMoK33K@G6$$(&(''&1/----2)((-((d.'-T?OK8T$!T3(-<((')))())(   	 &  2%2#"'&=47 7654'#"'5473t\*e	O@UCXq	P	S.	PӍMOb>YaYƮ58l7P P@        $ 0 < F X   + &=%6&#"3 6=%&#"';27!54767%!&'&'2+"'&=476^7\Pg㑵Hr'.)%sMM#fC-7!%A.; ӎw:kKqz+H*G;M

tu/&((AA&:+C;.   " / 	   8 P i  >'67&&&'6.7#"'&'#"'676'773.#'6'5676&&5476'&'67&&07	^<1x,B5@2JVMv!#uA+UBDX[f*;-10)..C,sB#HKU	P]12<0VQ}%'H6-T}^$k7
R2'7f!A\;y?1!50BEt"!zkQ;0qu0\oi:5oPZjsXFaPJGl;4ej   N^     1 F [ q                 7&&'7'6&'$#&7'&#"'5&767#&''5$'67'6'6'5$'67'656&'67&'6'&'''5$7676'&&'6'63&7"7&'7&'7&'7&'6'6%676767&77&77&''5&"'6%35&'.54>23#67#&8	p
+WDTc'H@XO`= 
;*)8 kDv/Pk-JKDhGa	D`gBD6DDD=3dTDW,	:gj)Yi#'WtI-9w18$^8;./7-I)jS)'#i\-IM91D;8%a7/.D=uRNBR&'%QBNRq d2
Ds98C ["|44&3,'2^3RT(B?#'9C-!y~#Z10>N?$%Y4)%FN?
({usis< 
3(&^T05<>7;,#4[:O(vAfGEtYB
z^~4j
#,;b:['~Av@~EQ
Bak4~_H#T2
$$$$
2T"    `q  $  &'6&'67327&#!65#&3jjdnh
wWVݱqZre[c77	c    yX    ,  35'533#3!'#'5!5!5#53!5!5#!!ʶ~~
blvFFA<<3ffX苜qXGccG    a p     3264&#!2+73	#'#5#	3m`hh`2`Ĉѳh|;vvʷ}f       33#!!#'!'57!5#'573564pzp    7 d +  !#!573#'5!3!'573!#'73!#'5IxOOTxSVVdY\yvVPPvIyY   '  ,  32#' 37+ &5%6323'#57'53mJl{~m@+ݼh4144'0>,_
vNknmmn         O b s  32732753"'#"'432364'5;+"'#"'53275'&'&54?5572'#&'&547634%476='4&#68$$B)Z>&A_;i88u-o1bFGfQ_M5mwLbkjI,K=''8 0##Rm4	ڹ+ܴ5!PP"4\=ѻ"8Qý<WTڦ9[&BC(     gj[ T _ g  2#27654'73&#"#'&'#"56='"'46'4#"4735#5&547/63654'%654i=Ku/3no|s׉nI3n';6WN`fI:%+Kks:omP|@R/%S <[Er*JKNZEnvi)%*6&-Cl67jGV"6;%
2֙p+nEU_rB(EaLtD:j[~^9     " 2  2#'#"'#&'663327'#&'756=4'&+"6xdqs[yWe6o`Oa!ys`Mk{eK[ef
OmY<0}        !  4 32  #" 7 67	654 'YYx_P툋K\YQZW_bYX         ( 4  32654 #" >32#"&546324&"26% #" 54 32 itvxsq1"00" 0/B//B/#a`ir|H!//!"00""00"!/0 _b 
  #  > D J P V \ b h n  27654'&#"&7367'67675673#''5&'&'7&'%67'7&'67'%7&'&'%6767%&'&$h%$%%34$&1++XSAN@`==k>PCRX++XYCP>k==l?L?Q	oL+ Nn;P?;@
nMNn3%%%%34%&&%s==`?J>PW,,WW?K?_==f?H?PW,,WU?H?^<=Ke+cL mCP`k<<     ! 4   ( 0 8  47632#"'&7327654 #"&#%#&7&'67&'67!󫪪vӤ=65N'V[S.U[R󫬬񫪪񿉊
ʯX[V[X[V[   ! 4   ( 0 8  47632#"'&7327654 #"73$3&'67&'67!󫪪vѦ=63QNV[S.U[R󫬬񫪪񿉊w	
'X[V[X[V[     ! 4   ! )  47632#"'&%#$''&'6%&'6!󫪪4>;D@Kǲcngk?dnhk󫬬񫪪I
kpinipi  
 ! 4    " * 2 : A I X  3#''%#&'52#"'&5476!!'5%!!'53'5%3'5%3#'32765'&#"M==,/0#H
8&O6	|7iY06./==e6a&i1r4z012+KN2HQ>>>>f^2"/1]8`1"Y4f2y    5  +   +"'5$76%&'547327676=&#;hz0/O{[(*TQ~`NO
=tR[\	8d      <  +  % &56;2'5$%75#"3vh0.P~N^(8P,VRZycOpO
>S\^	f     ` 1 B  7#5#53'&'&54767&'&=33676=3#327654'&O&"}|fzg}}"&&"}UQn$mQU}"$nQUVV{xVVUQ<"{u^^\_u{"#|
zUOOUz
|#YOT{zQPPQz{TO    @>  )  4'&#"3276&5476327#'#53'&`____`oqk]^^]YYňÁhgf    @>  '  "3276'&'7#5373'#"'&5476j___``_ߓqŊqYX]]XYfhhĈÁj    0  '  &'&376&+"'&5'476%7!Z{z[ZZ[~\YWmpN#ZX[[YZ[PQmp#T     G *   52764'&#"#463233#!5sPQPPtrQPyzg֏LQQQPPQr{{t|g    *# "  #53533#632#47654&#"#ddiqqCBigIIugzyUr}ppDtPQs_    C S  7  "27654'&7#"&54767##53#533333#3##h.  @\ !  2(>>?ZW~>'3|}}! -/@  /- !^'?XY??~YX?(F}R}hh}}h     L S <  #5#535&'&'5'73'3#'73'676=35'73'13|e{vw}wwUATwx|xxS@Wwx}vv|d|re{Eus~~suE|VAKtrrt@X{Ius~~suI{dr|      *    ! #!!!'!27674'&#_82V)3{D#MHZW{s{?zK8   !    %#"#&5463 67!2#6#";z\)MaBuh__itBaM(]ytt[+##+tt\  5  .  "264&'67>3"#"&54767&'&#52hq៝rd:BJ|^d#!p⡠q $c]7A;{26X Y"zz"Y X62       &'5 %$ 56?6'.j拈|*xIIz'&|JJx,	F  4 2   $ 8   "3264,'5'&54632264&"&$#"&547>ȜmmNMm }	lyzU<Mnnnm+}7	lyzU<|||,&(uO#eaHG||||Q'(sO#e`IH   =! 
 <   >'.463227#"&5454&#"&'&5476766&D9BB8Ğv?W:pbW~tp) "-ff)-gtpQ@3AA:ACjGmN?ijbvr56WGe((Wi0154d)-?     / 6 ?  2>32>32#&'567'6'#4&&#4'3>64&"-S5,9"\0+Fgv!4u|W")^,kikdS!eb[_[H|NYC:RHB=G`Sn   U |  #  !!!53&54632!!5#67654&"U't00Z=yy=:]ZssZJjkkjJ    2f 4  %353'5#"'&''#&&#4'3>32>32YE;<<-!&Y*dxcf_Oz.*O2)7Ze``b<`WuALh`    8    !5!1##'!5!_drrPk^K{U_W{    ' /  27632#"'#576&#"4'5267>327&'"2XCZd}uud$gq~dV)40tlx!&%"dLk}:Uwma4sOHK{w  Y@x   A  63276327632&"'&#"'&#'6327627632&#"'&#"'&#'YR 	#{=('%{XNCEz>O&z>'(#&R
#{=O&{YNCEz>'(%{=('#&ee22ee$l66kd23dEPdd33dd$l76kd34eE   ^ s#    !5!37 !!'L34((     C     $ T d  67&'&"!3!67>54.#"!5&'.54>325467675#53533#63232>54.#"3'8xpA?9l9>@q<;9'D} 5RTP=:
SSPSS
;<PTR4 X#""#! >r>>pp>>r> !A%
)RSQ1)6BB6)1QSR)
p  ""     V  {z H N R h |     &'4>32"'4>32&'4>32&54>32&54>32#!5!'!567>54.#"32367>4.#"323732>4.#"327>54.#"732>54.#"I	)),(?)(#!3()3$))BG!((
K{mg,;hIXIL$P	H''1|G''#s%'')7$ ''A ''HTݬ9.%~~ rF)~ w  p  a  ! ' - 2  3353#3!53573#'5#5335!75!!5'57!ePPeeQQeDpH>H@A~ }}~00mrTTreppe-!   7 C Q ^  &54767&'&'5676767&'&54>32!535#5##3654."! 2>4.#"	1""#@%@#!@%?$##0	܍a1%?E?%4,/--+D,/1+4;AB<>"	 "#>"">#" "><BA;3 +10,KfYeeYf%<#@""@#4-/0++0+      A  * 3 V  6&7 !&54$''&'6'67.76;+"'5#"=6&'76767%25#6&'*I} %
GI.%#qJ';
T,N#8:!>#10$ITNnVB,	n ?%#Naji-/4^t&AYcgb3%'+((NV8OQĿ>:<uyg**5
k<X>    5h   P [   32>4.#"732>54.#"!5&546767&'&546767&'&4>32'&'.#"+L)+L*+M)(LH
>	|n @:!:;!8An}	E04`a30TL**LTM((++x:8>>q?9  9?q>>8:x++c^UZbbZU^   jg%    $ T d h y   47&'&";67>54.#"!5&'.54>325467675#53533#63232>54.#"!57#&'.54>3234'67632#7$5oh<:5d4:;i865%1MNJ96	MMJMM	68JNM0v    +0+/0U-,,+,.T1/,9j9:h

h:9j9a	&LMK-'2==2'-KML&	1  V//X//X//V  6  H L P  &'4>32"'4>32&'4>32&54>32&54>32#!5!5!M
,,.*C,+%#7+,7%,+	FK#++PDNAM**4d;K))$'**,dY&"**E#**L:ƥ??@@      =   % )  5!5!3353#3!53573#'5#5335!mD^JJ^W^KK^׋LLZZ,}}uz%yuu{{u}--       4 @  4767&'&'5676767&'&54>32!&7535#5##3	1!!#?%?#!?%>$""/	_1+4:AA<=" !#=""=#! "=<AA:3+1/+H+eXeeXe     g j  " . 7 =  6&73# !&54 '''7&'6'676&7;2547#";65'"36GJK&'n=lR]*^dW*W	>![1=%T e	>6.HC'L"'G12 h[FH`[$%ok+*8d.Nc   v [ .  7&546767&'&546767&'&4>32	w "E>#@!!?%=E!w
./@=CDz"E>"">E"zDC=@/.    QO #  #"'##565'##"/547 ?kM ,4N"DF &Fi?JO/FB!O
{|Im<&=     M  2  227632 #&547636=4'&#"#4'&#"=`
]d2cBU;/G;SXMB:@B
ս;7hf%#>|\@9      @O    	 &&5	iCn:^O	G
 %   2 O 7  236;2"'##'65##"'&5476;235&'&=476jS
c1=EO ;SCFRʝT6*F@E1;O+.`162V
Yi8/D
;8[BV      RP " < B  +"'##565#+"'&575477;2732;276=4'&3&'"ih;F(wQ"DG".FWCNfBy"bODUq5u4Pro@|S`64'<kn,:y!@JD     O   2367632#&5476;_#KYohM2EOL)XYD<κ6f%    @O   	&47i9)
2\OE[r   1 V 2 ` g  26;2"'##'65##"'&5476;2&'5476&+"3276733276=4/#"567654'&#"35&5mV^2"L<TCFR˝U7* 2Q;Ƌ
Xa2p2@^DJF
,aXj-!D2V9/m.0R
Zj9/C
\ V
7yM5bom&#'p[?$GOQ     .    , H  3#&'&'&6%3#&'&'&63#&'&'&6 $&54673 >4'&'~v'w(w
'$k=FF>jG3~Pjb^*IerN{̑?qJAe}Ωv6\~x(ONPPNO(!8?|EE|?8!  r !_   3#"/4?23D-!]UF+}{<    !/   3#'654'&'#"547326Rs9W5[S%3;B[/OBC'*|<  j_g   #"=4?2%#"=4?23ɧ%QM?ˠ)TK7(w7џ5s ?      |O    "'4723!#"5472!5YA>RHIOq1 ӫg4    D %    3363'$6'"I+4puoS^    *     3%#'#3%#';&2IʗHj    7 * ( ,  377#'#'547#5773%%,ppsr,'zzxz'984?/99e5>:_   `q E  #&#"'5654'5673;54'56732733273+&##&"#&'565*G1	VV2Is3'{'3sI1VV	0Gs3'{'3sP3+1='3sH1WW1Hs3'=1+3PH2WW2H    .     ; G  7567&'&'3#6737'#&'7#&'6735'67#3335#5*)SR))&*&';((:'&)'ȶkkn\\[[nȶ	kk	n[[\\n`ff/ee.((&(;((:(&((@))SS**n\][[o
jj
|o[\\\n
jj
e(P(  /N  # . 6 C M h w      !2732!'5675&'&=32#&'567637&/7&+"+&'532?4/%32#'#&'&=4?#'57335'3!273+#&='#"/547354;2?!&=35-,;K>#WU*y"њHVηz/;@"q=o	)we)$IY'LALaXwH >X%CII$PC/DN6g+ 
b%#	
jnN :3O+5{bQ<
,d-
	X]
f	'^	JJA!   < 
8 
  2 E  35733!&54?'7'7!!"'&%#'73676'77'7'&'676}]} =--HW(7*!>y*1c{F=.,H-.'d(#Y+GC8957jN})%%tGl5nm3(,H:0/(_kiN}!N 920     K 	  1 D W  3!5>7>54&#"5>32&54?'7'7!!"'&%#'73676/77'7'&'676@.#5*"I?6O"[m"
c<,+GU 5) <|w)/ayD<,+G,,&a(!>B<#q'%NG91 	M7835hL{'$$qEh3kj2'+G8/.&HghL{ L8*/    D 
* ( = P c  #"&'532654&+532654&#"5>32&54?'7'7!!"'&%#'73676/77'7'&'676D|q%N24H'CB=9PS3464E>6O#]o<k <-,GV$6)"=~x*0bzE<.+G--&b)"<+BI
N$% $B
G	@6%67946iM|($%sEi4mk3(,G90.'SiiM{!M8//  $ d   " 5 H  333##5!5&54?'7'7!!"'&%#'73676'77'7'&'676\\x"@/.K[59+#9A,3gJ@0.K00(h+$w,HmmI;<79oQ+&'yJp7sq5*/K<22)ooQ"R;@2    > 	3  2 E X  !#"632#"&'532654&#"&54?'7'7!!"'&%#'73676'77'7'&'676H$evyn$L27C'<CC<;2 =--HW'7)"	>y*1c{F=.,H-.&c)"ERUHHS
S/(*.	8956jN~(%%tGk5nm3(,H :00'\jiN}!N91/    K   	 " 7 J ]  "3264&7.#"632#"&54632&54?'7'7!!"'&%#'73676/77'7'&'676]'00'*//l+2>AB(S`dT^dyg7<,+GU 5) <|w)/ayD<,+G,,&a(!.T--T.H
D&RECSukf{7835hL{(#$qEi4lj2'+G8/.&HhgLz L8*.     - X   . A  !#!&54?'7'7!!"'&%#'73676'77'7'&'676n!?/.JY08+"(@},2fH?/-J.0'f*#&K:;68nP*%'wIn7rp5).J<21(vmmQ"P;:1   -  K  ' :  7&54?'7'7!!"'&%#'73676'77'7'&'676N!?/.JY08+"(@},2fH?/-J.0'f*#:<68mP*&&wHn7qp5	).J;11)wnlP!P;;1  99   ' 9 H R  !273!567&#2&'676+&'67'#'6765'533!273+#/#"/47$,7JvI
MO $p%|I^[T<K"(~GW$?8?])(	EAs#L,T
0`	+WVۄ`$$a     . |  % 2 < J \ e  3 + &=762367#&'&#367&#&#"3274/"34?3'35732?5#+'535^-J|@h'\-e@<r2&H);
uZJM=9jl:jgb.Qi2Q|酝:*}(dpR!h	j`]_i$x:-(^%,3"ؿEaHMP	E     7 g    / : B R ` j   # &5%6; 65%&# 327#57&/#2#&'676+'%3#'#&/47'3327##'%3#"/6j1M{ǮG&z
v$ExݨE(+=R:n:D!sY!gQKum;}	uA;>e=g¯Cy??ԢB|*>w4I '	5@`bC$	j$H?iM!%  . |    7 H  27&' # &5%6367&#'.7&67263'#%; 65%&# mJB|e6O}°I+o|BJn^jaygwaaygxaj^w$FyتFG퇢D{C?`B]ww]BJХC}.?y   P %  .  232#!7&!"4#".54767267p{u*_Jcllm8*#I%<($|ʀX#{Nwt7mnld4)5:IIIB,   < _     4767632#"'&'&!%!!   >W$`4  Z|b  < _  / 3 7  4767632#"'&'&4767632#"'&'&!%!!      UW$`H   	Z|b     < _  / G K O  4767632#"'&'&4767632#"'&'&4767632#"'&'&!%!!         UW$`H     	Z|b  < [  / G _ c g  4767632#"'&'&4767632#"'&'&%4767632#"'&'&4767632#"'&'&!%!!      /      UW$`  K       Z|b    < _  / G _ w {   4767632#"'&'&4767632#"'&'&%4767632#"'&'&4767632#"'&'&4767632#"'&'&!%!!      /         >W$`  L       Z|b     <V  / G _ w     4767632#"'&'&%4767632#"'&'&4767632#"'&'&4767632#"'&'&%4767632#"'&'&4767632#"'&'&!%!!   0          /      UW$`+       .         @   Z|b     .  t   )  2 $$ >54.#"4>32#"&h..--t*Ƅ2..2/     . y   ) 6  2 $$ >54.#"4>32#"&$2#".46h..--1.-.y*Ƅ2..2//2..2/    .  t    2 $$2>4.#"h-..-t*f/2..2/   .j   '  2 $$2>4.#"$32>4."h-..-q.-.1-j*f/2..2/y2..2/  R     7!!R-Ӗ     R      7!!%!!RMzM   ; 	   67'&/#'3#67$#%ׯP==Ͱ̼bN+#!f"K++!|o5<?1   s ^   #'3#67$#BBݽBT..#x:kAD     '(   ''7'777'77'/'7%턌!b탍a 2~~b bP         R  32>54.#"##"'5##"&'&'0!5!5&'.4>32!!676767'7' :!9!"9 :! FGF;kY_1278e56d:81)RLk<GG
E~^ :  :  ;  ;NG5e4G( Li)enf77fne)i	(G4e5G(   Pm  	 9 Y  %&'%67&673&/'67'&'"&'4?&'37'	'7	&/7&'#>7$%88EFu/- 6uNDL22LENu/80uFD8jU45B%y\A@Yy$F
0=/0
	,-X70 ;~*2%%2*~697X-,oo+F9d1)(1d9C1       * C T  '&#"'5&767#&$'&%'6'&'''$'676'&5$'6%'.54>32D$"@F,NNNvF8p^Lb2
N**+B@0"AR/0?wA%od/D&3.YaQ/5#3$"uI'@3/u= =#n-....   w   3  %%32+#".7!"&'&'#&=4;73737D*$#GFHH%#Ι+(&aa'm99m9 3.055_4i4_550.3k#ttt   k  "  632&'.'#####֊v)%8 _^>:k{ZG_?g@`H,>|:=+,j,,<6O/233<bb    J  1   32>4.#"367#&7&$735&'.4>2,P*+P,.N+)PƗd"/%(MM~95DLMNMD2)WN,,NWP**g!ʇw֜s~
&JJ&        ? G O   277''"/&'&'7&'&'7&47'6767'676?  6"&462EG#96\>42(p__p(24>\69#G#:5\>42(p__p(24>\5:'NmNNmU%4m+3EJ5:6JE3+m4%TT%4m+3EJ6:5JE3,l4%T '\nMMnM     * ?      ! & + 0 5 : ? D P    3&7"7&'7&'7&'7&'6'6%676767&77&77&'"32654&'5&'.4>323#67#&#"'5&'&547&"'6%6761a$O` "NiB*4l,4"U47),3($aM#"aT*BF4,=44#Y3,)0BB0/CBO"!-$F$FJF1.#-
-#-2MJF$G#	8<g7*!2U6J%n=_CBnT>	rYw0d	"*7]6U$u=n;wBLz	>\e0wZ3C.1BB1.C(N	"%""%"	M#p.PA.$;QW$.AP-{	"   R    & . F R           2#".54>&'767&%76'&''67&'&'&'67676547676'&7>3263'##"'&'&'&54767&'&547676&'&#"6&%6767&'&'&676&5467&'&6732767&h@9h),)RP||PR-*g:>/**Y&()((')&&)')(()%@9f+.TR"`33`\_	.np,	00441/	,pn,	]]&&()&&EEEJ032WyQT.,d9@.**..1230IDE%&**%&F+.SEFE.IMMI."#FES. !  ";-0.--.0IM+.REF$$1.%2S_`Q2%-1OQQO2-$3Q`_R3&.>GIIG""7447#.$$FER/+L"  !75/57%"IJJI   *    ) p ~   67&'67&'4&6%67.'4'6&&'6767&54?67&'&#&'#&'5&'"'67&'&47632>4.#"72#".4>"0'-, )* #'05%" *%%,),,"GNYI'+""$(JYNO21,9,4=SM:7,:-12-[[Z[]WXIOMKLMN2Y{\bCWDJgABcp7L^BML0b\u]!@R%KlhhO+ww+OhhlK$PZX'@D
0:)ww*;0
EA&XZw[[[[GJMMJ  " (    %  3!'# !5 2#"62#".54>o:5(67%'$(nH0L*    I"   33'5 54#$/*PR6h"&>I>>A>        !!ua          !&5476'#5!+{h_a66mHHm  .r Z y   '#"'&#"'&'&'&547676763232767676'&'&'&/&'&'&547676762!2!%3276767654'&'&'&#"&#"3276767654'&'&˗Pz			,D@		7;+
		23			M98G):		
					
	

r
	

	
	0	L:5U				


	



    .\  r   26767654'&'."#"'%"'&'&'&54767676;27>764'.'&+"'&'&'&547676762%632$"26767654'&'&##@!R<Oq<
;

3@M				JC3

;
<qO<R!-##

		
/An!/









.!mB0_	



	   :? Y x   3!#!"'&'&'&547676?6767676'&'&'&#"#"'&'&'&547>763276;%326767654'&'&'&#"6767654'&'&'&#"32ɓE79E"		21+96	>B+	#	zOo
		


		


		
49D
/

	"

	
:	

	
	
		
			    	 =J Z x    -4H  67&'&'&+"'&'&'&4767676327632#"/#"'&'&'&54767676;276276767654'&'&'&"276767654'&'&'&""'&'&'&547676762"'&'&'&547676762'&'&'&547654'&'&'&";276-&#"+"276767654'&5476%327%&"'&'&4767628?. ! 	!a=?^'_)\?=a!!#	"!.8?"""""f		2
			.?ES@6fG=.			
2			ŕ6@
	B )_>9	9>_) 	%I
		
	

	?
*


		 ;d.	
	?P<!  4 G n    3276767654'&'&'&#"&'&5476767632#"'.54767&54732#"#"676767'&#"'67654zQkdYWGJ###"KEYXea[WGJ### N*))'UOggqqhbTQ+))'UQegrse2
N{;(2.'7$!/-
*@%%$HIVWcgWSMF&%%$HIWWgbX1.oPbeqsg`WP,++)SQfdvog_WR*++0?#" $)*2/[TG!3(	-)#%	$!'(*0&    % ?   , J i   &'&'7&'&"632%676767654&2"'&'&'&5476767"3276767654'&'&'&'2#"'&'&'&54767676$0$" N!!5&)*&f0
$/		/*d]YJK$%%%JHff\YJK$$$#LG\ZhtjeVT,++(XRiiuskdVT,**(XQijn7<%"#;"<7b#"%X				&%JKYYjd[YJIM&%KJYYfjYUOH'&K,*VShgyrjbYT+--*UShguvjbYS-,    = <[ -  57'367&33#3#32+3#3##7&'#7R0Knm(\Vo@KsFr5$$5rFsK@oV\(mnK0=
q<a<!<a<q	     ? s   " ) -  %!676762!%"'&'&'%%&54!OuO?!$G?&FoSdQ`#  D  K     476?672;&'&'&547632676767654'&7632!54'&'&76'&&#"'&/&'&'&#"#"'&'&/&'&#"&'&'&?6'&'#"'&'&#"!'476/654'&76'327654'&'&327654'&/D+"(<>	
!-	@( ,#%>NpNM&_*#
(!
&),,f&!(K_
	Z0-	
YiD	
	cp-)L	&gK1
[N3$n/		"!0{I"H#fmt2>,7HBI.;/8[,	Q[z)
		.)S9L
*E	 	'+(4%(4 *X>		
7A)	0'-570+I;-%
*#%(0

]'5.		U   -   9 L p {     7654'"'&#"+"'7&54?67676763276323273#5%6767'&#"6%"/67#"27632327654'73654'676547&t!M#l5G;@\
2BX-0%-m *	 '?,N?'!&R;-><\-R5-6E!"$b$6$!q",;
t@P"#C
*FS"DX@!	%z$(`]jMP

&O/+@p_u<
3 		DMKZRdYL6D_YBI5.!!''kG     W z   " ) 3 S Z  67654/##3276?7%754' 654'36767632#"'&54767632'0,,;	(|w|ki5.U,\\
%g	.
;,-0j{w{w3V.
T,\[^	
	-5     &      ' - E L   4'&'&/767675'7!!'7!654'!4'!!$4767>2"&'&'!654'$$CCC||]V|V#u9Z(f(Y<PPP Pr+





VH     W z   " ) 3 S Z  &'&#"227654'&''/%'654.#"65&'&'&547632#"'&'&76#"	;,,0w|w5,\\.	.V0-,:
w{wh
.o,[\	
	6.     ;+] # C  4'%%.'&"27>7%$66%"'&'&'&47676762%'b&I



)^tN/		/dIW?

@ViDV				/		V   % &  %$64'%%&'&'&"27676@))<""]NO]   9|   23277632 #"'&'&5476"#6v>?(-=%P8j?
#j< y"$"     J rB   23277632 #"'&'&5476""YTo
k%,02?=V8jiA{C{u+'     qP?   		'	7	sssssstsXrsrtsssr    @ Q   		'	7	5    N B  2632#"'&'#"'&547677&'&54763267632676Bt
	ah>)	c!,Hs*ܡ	
},"2A"		{    3+ Q  26#"'#"'&'#'&'#"'&547&'&54767&'&54763267632676 	΂  NjM rkW*
&\
*3
#ﳎ*3	Tv!(5+",
     @ V   #  !!!!!%!!!!!!!!#!5!3;E; JEJJJ<;E;EJK!IK    V {   !!!!!!||uv  9 f    35#7!!#!5!3*+մܳ*ִ   0  r    !!%!!!!!!/0``1/`1    )   !!#!5!3^^^  ~ S    3!!'#'!!#!!3!5LDʃDM   A   #  5!#3!3'3#!#35!3###5353;9ǌ#5AI##    0 v Q  #"#3;54'&'&'&#5!"3276767653#4'&'&'&+3!52767>5/]LED73!&&54GBO]63H>SkS>H388]OBG45&&!35FEL]63H>SS>H38882I<UjT<F66]LEF62!&&!28L]66F<TU<I27^LEF62!&&!28L   G          #  !!!!!7/373#/7#hlk0WXXXXïWXXXX;;:QQƙQ陙;   C  54'&54762327632#"'&+"'&5476=#"#"'&476323C:!)*[*)!:\5YL$$$$LY5\:!)*[*)!:\5YL$$$$LY5\[\5YL$$$$LY5\:!)*[*)!:[5YL$%%$LY5[:!)*[*)!:        &'##"&'&'&4767>32367675&'&'.5467676236767>32#"&'&'&'#"'&'.546767675&%>#"??"#> G	>#"??"#>	G  F
>##>>##>
F ?#">>"#?     4'&'&'&'.54767676322767676767632#"'&'&'&'&'&#"'&'&'&5476767676765"#"'&'&'&5476767632B
,#,+%) 3!,
	&&*-#''#-*&&	
&$0	)$W$)	0$'
	L+,$&&$,/"&&$b3")	M*,%&&%,."'%%0
)$W#)
4!,
	&&+,$''$,+&&	
&$1,#,+$)   0  267632#"'&'&'3&'&'&54676763267632#"'&'#"'&'&'&5476767#6767632#"'&'"'&'&'&54767#"'&'&'&54767676325##"'&'&'&54767#"'&'&'&476767632&'&547676763235#"'.'&5476767632&'&54767676h											-			(
					
							
'				*
		

						

		.
		
				    +j   276767653"4'&'&'&+sidUS+*+'WPihtthiPW'+*+SUdi),)URhexuhbXR,,,,RYaitwfgSU),  %t  ?  247676763"'&'&'&5!276767653"4'&'&'&LEA86:4DDMMDD4:68AEtjdVT,*+(XQjhvvhjQX(+*,TVdj-76DCOME@:66:?FLOCC67-*UShgyvjbYS,-,-RZbjvyghTU*,   (8 	   %%!	!)ttJHcdecH]F]~]^   C5 	 )  !%%!2#"'&'&'&54767676hzt@z@Az@t{ne_RP)((&SNcdome_RP)((&SMdd0x}*(QObbrle]TP)**(QObbooe]TN+*     (.  '   "276767654'&'&'!	!_)(""""()_)(""""(Y$(*/.*(#  #(*./*($]^  #< 	 ' 1  %% 2"'&'&'&5476767!	!#xxa)(#""#()a)(#""#(YDgghgD^I^W $(*0.+($  $(+.0*($ YZ    (8 	    3'7'3!%%!!	!hE۱CCDeggf
ҁссi:]^  = 	    3'7'3!%%!7!7'7!hTDEDDTN PP IQ2P11P2#mm  (?        -5%7'%!!	!]Pgfeer­696ƌ]^^    .     /'%!!%!77!yrryyqm" _^^l%%tu%ߴ߳!     6   3%%#'-7:|:||9|kֵֵkֶ   Wz`    37'%7%%#'ZZZZZ]^Z^ZZ˛ʜm˜˜mʜ  0o   	#'!5!73!P6M6P$6PMP66R#6QLR6$Q6L  $z   			-	h<_K<;
L_zK<;J`;<_  	          '  !'/7'?!7%%-[9^[[ZG^ZZz'}*}zy}*}'q^\\ZG^ZZ:\O}zy}*}'yz(}     2    %	%	h_y(_^(zFG   s   %%-hVHzVUzHrVU{HUVH      %%-hhhႁhhhႂhhh   $h   7%%'7-'hX5
5XV6  6g5VW6
6WV5
   0 t /  37%!!%'#''7'%!5!%7'77;[TA:#T8#AT[TA#9T#8AT T8#AT[U@#7S#9@U[TA8#   1   54'&5476276767632#"#"#"327232#"'&'&/"'&5476=&'&'#"'&'&54767632332?&547'&#"#"#"'&'&54767632676?>$,.c.,$>]5 71+:H3>	kR

Sk	>3H:+17 7Z>$,.c.,$?Z7 71+:H3>	lR

Rk	>3H:+17 9X	
ib9@R'))'R@9dg
8d< +$;)01):$* <g4hc9@R((((R@9ch
4g< *$:)00);$+ <k0	  7     "276767654'&'&/54'&5476276767632+"#"32;2#"'&'&/"'&5476=&'&'#"'&'&547676;232?&547'&#"+"'&'&54767632676z##H=$,.a.,$>\570+9F3=
	kQ
	Sj	
=3F9+077Y>$,.a.,$?Y770+9G3=
	kR	
Qk	
=3G9+079W	>
h`9@Q'(('Q@9bf
7c<+$:)/0(:$+<f3gc8@Q'(('Q@8cg3f<+$:(//):$+<i0	  4 j  '&'&'&767654'&54762767676'&76'&'&/#"'&5476='&'&76767&(ZDL"#Z:LG#:.'W4,CC,4W''A(CK;Z""LGW/'''[CL"$X>HH#:.'W4,CEH@,4W'*>&DL:Z##KGW,f',;[;;+*Q--}KOW*AA*WSGu5-U&+;;[;,)
'+;[<>**Q--}KNW+@@-USFu5-S(+;>Y;+*
    !      67654'&"327632#"'&'&/#"'&5476=#"'&'&5476763232?'&#"#"'&'&5476763254'&5476276767632#"'&#"#"'&#"327676%32767654'&'&#"#"i/)F)/,UK:M
$\/8E(5>H6-EFJA-5H;8)D7.\#	L;KU,*UK;K
#\.7F'5>H5-DE-6H<7*C8/\$
M:K U+:6-214	
$:<;$
422-6O;(A7##7A(;	!*:#.#;&Rm!CcJMU)??,RMJcCoS%9#.#;)!	 );#-$:'Qn!DcIMU*??*UMIcD oS%;#.$:* f /D;;D/    $  i     "276767654'&'&'767632#"'#"'&'&'&'#"'&'&'&5476767#"'&'&'&5476767632&'&5476767632o00'))'00o00'))'0]0+)*+%# #+%0%##&&.0%+%
 #%'.0$,#0%-# #%'.0$.  #%'-1$,#$%*/0961/*%%*/1690/*%)"*&0-(%$$$)-0&*!&"*!$$)-0&-#%(-0&*""(-0&*"$$(./&    n       %#"'&'&'&5476767#"'&'&'&5476767632&'&54767676267632#"'#"'&'&'&27654'&'&'&"67&'&'&'276767&54767'&'&#"276767654'&/?676767654'&'&'&#"h&,&1/(&#!$&1%-$!&$/'.)2$-%c%-$2-*++&$!$-%1&$!#&(/1&,&=s0
	9	
55%R


9!_	,9


R%5s	_!#'"+'0/)&$%%).2'+$*
'1.*%%%%*.1'
*"+'2.)%%$&)/0'+"'#L%%L%#ML:2(&6

_M#%

6&(2:  
  - [ 3b  &'#"'&'&'&547676763267'&#"327%327676764'&'.#"7632#"'%&'&54767676324676762676322##"'&'"'&'.5#"'&'&'&54767"'&'&'&54767676&'&'&'&'&'67676?&'32767677676765&'&'.#"7676767&'&'&/326767674'&'&'67'&'&'&#"67'&'&'&'67676767"276767654'&'&'"'&'&'&54?&'276767654'7654'&'&'&"67'&547676762				(

b

(			#!"G"!#*" '## G!"" ' Ym
	
		
	(y
	(
Ok	
		w		
	mQ(	
O
(	
		

??

+	/	L*	/	*

				+.	M+	.*					 !!!!'??'"#&#'"!! '??' !"! $&	

		

	
mP	O
	
	
			

m
	

		
	y	
	
Ok		

		

								b					

	     %j  < \ l   "276767654'&'&/2#"'&'&'&47676762#"'&'&'&54767676%%-[''!  !''[&( !! (TB39)+,+76?A3:(+,+76>tjeVT,++(XRiiuskdVT,**(XQijtuz"z!uv!z"z#&(,-''""''-,(&#e)*:6?;97,+)*97z88,+,*UThgyricYT+,,*USigtvjbZR-,zvvz"z vv!z    29         "327632#"'&'&/#"'&5476=#"'&'&5476763232?'&#"#"'&'&5476763254'&5476276767632#"'&#"27654'&%&'&#"327676%327632654'&'&#"#"i"(-+SI9K	#Y.6C&4<F4,CDH?,4F96(B5-Y"	K8IS*)RI8J	"Y-5D&3<F4,CC,4F:6(A6.Y#	K9IR*"(-62
#9~3
#9;
01+5600,5`%;G,A
$.?'!3&@!*Yx$	ImPT]-EE0ZTPmI	"zZ)!?&3!'@-$
	#,A'!2'?!*Yx$ImQT\.EE.\TQmI#yZ)!A&2"'?.#~&<G,@ #3J #3J""    W A  ''7'7535'75377537'7'#5''#5'75#5'7'7Ϩ4t4hϨ4tgt4h4t4Ϩ4t4hϨ4tgt4h4t4~f_Fh`if_GG_f~͎i`hF_f~f_Fh_hf_GG_f͎h_hF_f  0  ! % ) - 1 5  377''#5'7'7'75777%7?58a11a11슊늊[LZa}T}{U}}U{}T} PPPPUPOOPPOOSPPP      A  377537'7'#5''#5'75#5'7'77''7'7535'79arQڢH1JqQQrI1KQrarQآJ1HrQRrK1IQrTBq~*T+Bp|~qA+T+|qBTRBq|+T*Aq}|qB+T)~pB     2   #"'&'67632#"'&'&547'".467675#"'&'&54767627'#".47676325&'.4676327&54767632%'+,%%,+'%$'+)(&%,,KWK,,%&&+,&%%'V&(),K,%'+)(&%,,%&+,K,,%'%,+'),%+'%	qq	&&+*&&&%,rKXK,,KXKr,%&&%,+&&	qq	,KX%&&%,r	KXK+KXK	r,%$  	 )j      . E \ s   "&462	7	7%'	'7&'&'&5476762"'&'&547676'#"'&'&47676326767632#"'&'&C]CC]@@$@#@$F@#+W,,Wx-3>41%%14>3t-3>41%%14>3f^CC^B%@#@@%@#-4>41%%14>4-3>41%%14>3+V++V  	 !r      + ? S g   "&46277''"'&'&476762"'&'&476762 2"'&'&4767$2"'&'&4767eeeBABA#U##U##U##U#V%**%V&**KV&**&V%**~ffeAA$AAV%**%V&**V&**&V%**#U##U##U##U#    	    & 3 @ M Y a m  +%5%32476;#"'&'?632&54?#"632/&54#"/7 2#547"&462"'&=3?_?6  6  6] 6'?&M&C_CC_?&M&< 'L&&L'!6 6^6!6 >_CC_D<>    " l  267632%632#"'%3#"'&'"'&547#"'&54727%#"'&47632%&'&54763&5476h!#;'&1'h	9##8)'1!,;#A#;'&1')8##9	h'12;# 4%.&!6 = 6%".%3  3	G%.56 = 6%".G	4     $8  !     54."#" 54$32632 #"_	ɀ~~a>     E	    %!#!3!pEE?p9E    =  V    %!%!35!cE:dFF   8  	  %!!![:F:\;[   0  q  	  %!!7!N]<N;)G  +t      	,o9;      #q  
   !r Qk   !k`    !733}b>v     !#7#)iC~  '<   <#     '=   =#      g]j O S  2#"327676765#"'&546;57!##"'&'&'&54767676%#

42;%-n`Ԯrr#26A@:V7:$)&7.Yq	

	%$.277g[(dVDQ49%*,04?()-#     5  2&'&547676762"'&'&'&5476767hc"$njln(Lfe*+$$$$+*e*+$%%$+!#'(*dRjjSc*('!"%*,20,+%""%+,02,*%"     % C  &'&547676762476767622"'&'&'&5476767hcn(%X%&&&W%(nؖe*+$$$$+*e*+$%%$+,Dj*('(&,,&('(*kC "&*,11,*%##%*,11,*&"     . i %  %&%&54767676247676762hhÔ*(42u24)(()42u24(*i\=97,*+*96@@69*+*,79=Z   r_ '  #"'&'&'&547676763"'&'&'&5476767632_dA=;0-/.=:DD:=./-0;=Abx1.=8DC9</./0;8EB:;/0  A   i  654'&#"632327632!"'&53267&'&#"#"'&54763247632327654'&547632#",#<Z%LFe0$|U^),3 SB?R8<D3!#^L_U(=!#?>()1F="%".4"tNa5&$4!/.r<@6B2L_0>Q#kI|"rz7&)?),%=^K=.C26F@13.!9+cM3     13  N  676 547&'&327#"'#536767&'&'&5432&5476323254'&543253%5@26`',  =NR6#!vWR>42:O	t51"".1&X.RO		A5ȏ)T/186,FAS:#(=:tA09SD 'A#5}11BO9       "'&'&'&547676763"3ᗊpm8884qlYTN!  !C@RP]e:6pltm9:'62~~jf77      "  05276767654'.'&#052]PR@C!  !NTYlq4888mpe'67fj~~27&:9mtlo7:   fkR   !&547jljjlyyxzQqp    nc$   0!!676n	wu;;vi43f$lc   C}U   #	3t    D}U   	3	Dut  V.   !	!J   V.   	!	J  A   !	!m^\GH   B   	!	^^HH v   !'7DWWWW   |   '7'7WWbW>W ^ $  #"&=4&+5326=46;#"3xMe,,fLx1d=AOOA=dƂ׈ihǄOߍO  i (  326=467&'&=4&+532;#"+5nCFVU$#Cn5BB*)p//oTBB¥P⎁AAPDBۇ45iDC   S/~   	#!5!3}    t ]}   	7%d^=]d>  S~   5	/%0~##   t ]   	'-f\=]d]>  -   !'7!.	(``    I)= 2   "&'&'&5476?!".'&47>3!'&'&54767>2	'!`!!!',&&	    S~&   !5!	F78  -x   !5!5	V(Mr   6u      #3#3#3!!5	鴴ZZ---I(,,,,  S~      55!#3#3#3F9UU**b]^bUUU  S~   !!5	F7.  `tq    !%	qR     {V$    %!	S%@     {V   	t%22     6=   3!5	5!"'&'&'&6  $hI$  h$       6<   47676763!5	5!"6  $hI$  $    $   O   !!	e     6n    55!lMlTwccw   ekl!    5!!53	'	!_[y"kd""  e/l    5!!53	'	!_["/d""  5     !73#57!%!6UcGjbzbdǩ""    a p    5!'53#'!!!7%acߎA[؁(ZqZ{{{ĒҒ   } TM 
   %'!'!53	!;qKRnKa26wwIw22w  T }> 
   3#5!7!!!	ZQtZQ0L>ssjLK  2Nu    '!53#'5!'7!	!pSn%R&%Ua2wKJ,Lw22w    ) 1    '7!573#5!7!	!r&j&St&SpWl6qM,LLyy77y     @ !  6767632#"'&'&'!	 6IYZgb^UMI%&&"LF\Zfc^UM3!t:6I&&&#LHZZhc\UMH'&&#L2<tt    	 XNy      " & * .  37#37#37#37#5'!!55!!3'#3'#3'#3'#r+qr*rr+rr+rV{{*q+*r*+r++r+9Ɔ\]   t ]     7&#"7'7	#%5#t69.wZY96t".*X/     S~k     55!5!!7'!nn UVGG8:ȏ     u \j     '327''	#395t".Y/Y"u69.xXX     N  2  %&#"6767&'&"67632&'&547676767}:<?M#!D" $(*&*&s	
 ?$>"	s %*&*(&"!#!"O>>;     *E /  4767!"!47676763"'&'&'&5!3!&'&5v5$ %% $HvgMME%!#"!%EM    u \ 2  &'&'&'&54767#"'&'276?&'&'32\":
#'$'$#Y@I:86s6::I  #&'#'"X:    5*  + B  67"'&'&'&547676$47676762"'&'&'%&'&'&547676762$[	/		H=a=		/ZI=X

q>d(*c
			XJ    n  .  676767632#"'&'&'&%&'&54767&'&54765  #&+*1)F-Y)) .EOO/3S>>S&/ #$))%#]]#%))$#     & e   "'&'.54?654'&'&'&+"#!".4?64/&4676763!2;276767654/&54676762I
]]I	Q		
		Q	     %e g   "'&'.54?654'&'&'&+"#!".4?64/&4676763!2;276767654/&54676762GKa
u~iKGE
	   2   +  #76767&'&/3#6767!5!!5!&'&'g?j7R=y66y=R6k?VO S+

+Sd _8=eyu'&utj<u,*44GeeeeG35*+    S/~   	#!5!3}   B     &   *'$& 76#"'676 7	7>{J<p1
GM+SR-PAdmR     &   567$'& 76&#" " +MG
1p<J{>7mdAP-KS     g    264&"%!!"&462OsPOtOw#[륢S'MPQqOO>-"YR%     u#\u   	  	!	!hi/u-1  )    3%!!!!U2xxx      #3!5!!50xUx2x  Q   	!	!Rpp Q   	!	!p Wz'        Wz'         5 	  !!d#xxx#xx#  5 	  	'7!5!'75xx#xx     5   !'7'7!d#xgx#xxx#xxݎxx#        $  %YzxˑP-,S'GF'          7654' mfxˑPS''   |H   	r
  UH   	'_
H38b  u#\u   	hu-  B \   33##!##533RPPR    B \   333333#######5ُُPPُُRRRRPPP  P/      ! !! ! hZ[MM-3z  w Xs    Xy' ~K   X  y'' ~K    T}   !!	7J77 1    !#	788 1    !3	8   5   	''!jxxG      F5   	!0wx      F5   	77!xGVxH      5   	!xGw     T} 	  !5	5!	7E7Jɩ77  1  	  #	#3	ک878F8   w    7!!!xr$<     w    !!!xr<    w    7!!xr$<  w    %!!Yr$<   w    %	h5bcJ6b    w    	bc66b    w    	!	bc6b   w    !	5bc6b     w  	      # ) - 1 7  %#535#5#5#5##5'3#5#5#5#5#5##5##5###5ZssssVrrrrsZVr~rZHNrrrrZZrHNbVrrrrrrV  V  %  %;#"'&5! !&'&+3264&#Tb'~V^ ,A/Ok^yihz)lhh暶	A^yi_^   `~  !  5!!5#"'&3227654'&"Z$3QRmtsaOOr<<>==><<6+b22rv/0Y  VV{   ##!!+53265}`byMdRsTqen   !    
  !!!!!i@m'\Z'cq    `~  !  %!!67632#"'&4'&"276$3QRmtsaOO<<>==><<թb22p/0     H   !!!!'hh     /`   !!!/#`   A  j    2!$76676'&&`rkjs+*Z6j{4@BsSV}dxaM>         !5#"'&'3276767654&+5!2,XZv<::40L^EE&

Sb<ҵ@`45,,! >&64pn  bo{      &"26$     6 54&"OsPOsPp%]`xxiPPsOO*=CWW	 K_X  d      3!3h&D     6  .54$32.#";#"'%&'&'&'32654&'ߞge_`kr*(SU@aS@G:dLohvlmxPLU/.CFVP>((20Ejmp6GxY41TRcYCe     s   %;#"/&'5!!FdSwkwF3Gx   p`  # '  !767#"&5476?67654747![`bede""^XD#.#F8LAB\VC)*=	%(+C"	    X  y0' K   :   !#! /:+   #5!!!V&    3!!
P  /+   !53!+
   V         #5331мtt       #5331t       #5331ht       #53314t       !#533#1t          53#3м0        53#3d        53#3h        53#34        !53#t        !!#0      3!!#̼d         3!!#         3!!#d         !3!0   E 	  3'#'<Y[}}[QovoQ E 	  #'737Y[}}[QovoQ   	  3#'3#"     	  7353 "A}     D  d        !5 !5 !5 G^^	
XcmZ  G  `   !5 &!5 &!5 y66N	
aY   	  5!$YcN1     V{ 	  5!$ac^N1   VH   %+53265!!!!!H\\y%dQ'q':nlnlh9  X/   4&#"!!>32+53265ENPZ#j[Zy'dRyh}]fTkln     '    !J=    !5!5!5!J>>!     !#!#qe     d 1 0! +    e  gf    lDe  "  &'&#"3;!"&5#"'&!5!!;2RbѶ{@'N?28Ԅn+)b̜   P   !!3!#!P=g}^=/B=   a{   3##4&#"!!>32ENO[#jzi~`]f          !!!!!"#5476+'B1TT9+h/B;NP      33533#####5335:UUTT}}}\tk\\ff  1  " +  .#"#"'#"&632632!3267"264&IF@L@J^XWZ"`a@{CBLKKKABE?UU0VVCJH #Hhhhh    bo  #  2  #" 67.5463%""326&rv.6	VHrPixxijxx|=k)m9%QJ       J   G@&	 tZ YX
X<2<<991 /<2<2990!!!!!!#53546;#"%%\۽PDB/-cNʜ0       J  ?@" t	 ZYX 
X<2991 /<229903#!#535463!!#"۽B/cNʜ30    L'   EL'  hX''  '(   L'a   EL'D  lX'@'  l'8(   0'S   E`'.  d]X''  `'D(   '   E'    '2'    4'S(   'G   E&  5  z<';['    _'@~(   'T $   E&  T    mD'T '    ?'T (  |!'0  N&  4  q&   j  &  V|1'8P  N	&  ,(  q&     &  B" X' c    4   7  5353;#"'&'&5327'&54767&5$02a@M(1l\>mF|iɖ{1'OZ$^>B/7*_lH>^OpbĘDh'@5 ~\c&_  c&`  8 X' c    4   7  3#%3#;#"'&'&5327'&54767&5$02a@M(1l\>mF|iɖ{1'OZ$>>B/7*_lH>^OpbĘDh'@5 \c&_   lc&`  @ X' c    4  8 <  5353&'&5327'&54767&5$';#"'&'!53JE>>mF|iɖ{1'OZ& 2a@M(1N.1]_lH>^OpbĘDh'@5>B/7	n\c&_   c&`  @ X'& c    4   9 =  5335353&'&5327'&54767&5$';'!53MZ >mF|iɖ{1'OZ& 2a@M(.#._lH>^OpbĘDh'@5>B/? \c&_   c&`  T'g  `'j  &g  TU`&j  T  
]l   nl 1  %!"'$47!32767654/&'&54767;#"'
`pl,&y1[xH](45[	"G(79 -RTHLF0 b,@^n@",DX6,vB"C@,\ 04G?!    +       
c'   n&  T   +&       &          &  %#"'$47!3276765'!;#"EE<fۤ1 &~LCi*r$".$
.04^>zjF/?I,6gb`-d t8@       < " 0 @  %3!"'&547!763&'&54767&'5%376'&'&'%67654'&#"k<y
'#%D8*%D(E +61" "D#!
/]Q=ERH'>B)!F'-p
77/&9A5   3     <  $ 4  #50!&'&54767&'53376'&'&'%67654'&#"&<*%D(E +k/61" 3]Q=ERH'>B*)!F'-p
77/&9A5    X   %!#53276=!Hw,1VV,1j         %#!53276=!3!!"^@,1"1,HH,1jj1,   uz  *  rX'3'  '?(  0|    &q  |     k}        ;#"'&=!1,cK\W#u71,\W+  0~  0    &  q    *    &  q    0   &  q         &  q    ;!    !&q       -W     '  ]     &J      Q']    Q&J   ' L' `fy    &  b& ]    &J  V     ';z  w&    &'  p  &(    p  ]        !;! '&1,PWxj0,\e   '   E&  X''  p'p(   %i' x   V  &   k'C   Ek&  L  s3&'  4R  3&(  >R '>   E&  0  q'2R'    k'7,(   X' c   X&^  (\c&_  c&`   Xc    X /  ;#"'&'&'327'&54767&5$&
na`(1l;)'I|iɖ{1'OZ$B(-s}n}c`D^OpbĘDh'@5    \c   &'&'&5672+5327676G+9RHK07hdw}[;#4f5uTD<O1?)      c )  +53276767&'&'&5676;#"'&CDŀdw}[;+9RHK&7 Q9<Py<1];<O1?)T%4f)#[R   X'c   X&^    \&_    &`   Le     "  ;#"'#"'532767654'&'!LFSK[]:RgsR""<EGkHM=+/-zw"&*	.s*]esl   L/',Ne   G&f  1f"g   `&   ;#"'5 767654'!	&I<spX
5v<-۟􀋓:H~2  'Mg  `&j  <i    F  ;#"'#"'&''&'#"'&547332767674/332765332+?4, 6G@J/B-%n3<Gec50$ *)
$# !/Ӥ+H23H;/F9+Y{K\daّ֔w<$6#^lWcX\ElHτM&     1  &'&'+53276=3327653323#"'&'({-MI;eF*@$FQ# !/C 6G@J/B-%'B+2.%#GMZKTlHτM&j23H;/F9  8  323;#"'#"'&''&'&'+53276=332765 !/+N4, 6G@J/B-%n{-M#,P6$&Q#XτM&Ӥ+H23H;/F9'B+L%#'mZKTlE  <_'6 i  _&n    _&o   _&p    k     H  %327654'&#"%3#"/+"'&5#"'&5473327676'&/3676.]>4FD7< 33M!
'_%5,iGec50$ $*CARX,$ QB8-Sm\daّ֔w<$6!`]]T'3WEfnf'         -  %&'+53276=3676+"7327654'&#"V<%&:WE*((0HNRXLگ]>4FD7$(/`rNN`Jfnf`-,$ QB       9  "327654'&#"'&'+53276=3676;#"/EC8\?hڢ8Q%VE*(FOQX$3H3&_QB*,$ b$/drNN`Jfnf'
5-   'Ok  &v    &w    &x    
  m         %  %327654'&#"%;#"/#!#53!632M,>5M<GR,.lICu䤤#hX,, Zjn<0Ob3جhX        %327654'&#")5!!632YM,>5M<G#eX~,, Zj3جh[ymK     %  %327654'&#"%;#"/#!#53!632M,>5M<GR,.lICu#_X,, ZjnD0Ob3جh`  
  'z,m      &~  C1  &  6  &  C, Heo    T,  ?  076'&'&#&!27'&74767&'&54767632;# 77-'"!p/UFԖ4zL'6:o^YeF2jQB;#2NlMCyvbǐ]n&ZEJ7*9;4,,39&@0F3B6   ]   727&'&576%32?!#5=AQn	qJX83N\YSJelLC-EKS5!Z{    , ! -  3!"'#!5367&'&54767632%654'&#"Whhڋ]VE$*Ujfiga $SQ$(/HᄄCVZ'-H.6%--+-2G3!^?N	    H'6o   T&    &  w  &  |'*  N&    qs&  w  &    ('  k&    q_' ~    'F   t    ! D  #"'5327654'&'&5476;#"''&547!327676P E*jXcB8D-E0 /Y#:^S1,;rWML^FDRP4rx#q1)
""8Ef.&kA0,TT(57LK5>(N365,K     +   )5!27654'&54767Z)6r
u^Jf>^\$$(B;G&m16%*%Xy}qe      $  %)5!27654'&54767;#"'0V>)6r
u^J',8.RP"\$$(B;G&m16%*$YY    u    #  ;#"''&'&7!3276765@390gL(5n$.0`UZkFOkK',7bCsL\ssj1+-3dij         )5!2765!VP,0e\,1jl        %#!532765!;!"^@,1"1,HH,2ilj1, <v      $ 5  ;#"''&!4763&547632276'&'&'&#"D5("V ntY2xAw~M`bp1& 04!+	3DP&4OKf7*g?'J
7&': '  *  %276'&'&'&#+53767632#"31?1& 04"J@ZZ-aA`b|a7&'9`@(H.8XD   /  %276'&'&'&##"'+532767632;#" 1?1& 04ui"IAkZZ+SA`b,Dd7&'9Pl}P@(JG7 '  &"  O-  3'R'    3'R(   %x    V  |  %  &'&'2&'!;#"'0'#"'$5476f<ky\# 8FVqn'LZmh*12e2\2R'+͠|Oc4fI2ћD   3  - =  27654'&'&'5#"'&'+5327&'&547667654'&#"#@ 0m!".(3>=ef^E=S*%"*%' 
P8C!N'-_;49rFq#+CIQ=ERHf<I/&+%5     
 ( 3  !3254'&#)#"'&'&'!5!6767632)327654#"&E8:EG>\DM`L(22(L`MD\Y>GE:8E&uHg>MOufU`p\`wxxw`\p`UfuOM>gH    Ly       )  "34'&!5 767"'&'&54763236L<d<%`'qOdo)3pZt9lH~#!$*)ZxT.V<fa
6FZ3YK>     uz   * 8  $4'&'&5476762;#"'&#"'&&7!2767#/1/N,`V@I#,+3*L>Koz$m<49f,;2$0bjCA2:Zᬪ*Ll<H3G$8\Ptn
%    ku'kz  d*' d  qX&'  2&(  ?vS&  ,l&  ,S&  >,&  #, lpS&   lU&    lS   #"'5327!65!S;QjK`UrH{/!B_M  PSg     l   %"'5327!65!;#"hjK`UrH{/!a=Mi  PSg.  .j  	 (  		!46?>54&#">32!5h:&DX^Deb`T\\-?ZP>j: =TBV\L98FGDC+P=YNc{     	    !!!5!#!!3--%8`xxpp ;f  @ 1 0!#!f    -    1@
  1 <20 KTX  @   878Y3#%3#u     8 1 0 KTX     @878Y@  / /]!#     ! @  		" 
"999991 <<99990 KTX "  " " @878YKTX "  " " @878Y@]
 



! !.]'&'&#"#5463232653#"&j6-(mX$K&<'$'kX%G"<2j'<9j      8 1 0 KTX     @878Y@  / /]#7      b@	 91 <90KTKT[X     @878Y KTX     @878Y@  / //	]!#'#5߲Ʋ      h@	 91 290KTKT[X     @878Y KTX     @878Y@////]373ݲǲ     /wq  B@
  991 0 KTKT[KT[X  @   878Y78]'T%#%vw  ck   3>323.#"bLM`c<=<= ck  @ ]] 1 20332673#"&bLM`k<=<=  uk    1 0!!k  cbk   /@
 @O?/]1 <KQX  @8Y20!#!#FŰk  ock    #!#k   Z  w  %  !!!5676767654'&67632?.
,A=J@AAB$GtP;*AE 1)Z58BKS;r`]
/   -N    1 0!!-wN   N   !5!N5       !5!;       !5!   P    2"&46"264hxO()nMKpNT'd;tLpKLn    -;1    3#%3#u1             53#       ?     %3#%3#^     ??     3#3#%3#?}   E %  "'&547!32767654'!;#"'&'[ug&d2MU%*
!KA#7$)FdVPV@-&*QVKZ;3(. 'V      q  0  654'&#"32327676'#"'&54767632#!0'!+6E&oTbN}N;51E1mG.%0(, #CQ-3E$2&UOq kJ'      E ! 5  ;!"'#!5327&'&54767632"67654'&'&$X*rňw#=)+?XTfnp+%"&04X=:@+H99^.LHh'#2."$
   . @  %&'&'&5476763237## '&547!32766'&'&"V>_j2^k$l"$:?02\[3#*2-~^xf$!$#1/GB

iuw^h68@6`azRK@mzdQLF<LxkI5
&%)'    NJ + =  %#"'&547!327&'&547676322;#"654'&'&#"trĄ
!tGU/CU+wevSm(Z	OQW""(71%>6f_fj.<UjVo+\7/2C!Fx)Ab"$
+*"N     ?      5353!532^          5353^    ?       5335353!53}^      	I-       	5dl          %4'&"27>"'&47623J22J?@?@@?@$2%&2@@@@@??  lXd  @@% dp
&& 91 /2990KSXY!!+53265!l\\y'dR;gnln       !"'&547!32764'pg3|nuZqX4;TfnLH0DI0      ("  6  654&#322765#"'&54767632!&'&47!i)@5,!,)'j$i+TcQ_V.Nݢ057D(K#N$.=*,̖"Fc8(R&HTsu~]zJ\ k''@   &  9 X&c  8 X1&c  P X&c  B'>g   |  :  654'&32#"'$&7!3276767#"'&54767632,,;!%&,?Mﲥ{# $xZ;re73C\|-wqb`YM]#&-#*B|^6()[:\^-"')Hac)s52(#4   &u       #"'$47!3276765'!T<fۤ1 &~LCi*r$".$( ֕jF/?
I,6gb`-d Lt&y   @  X&z  $ %x       	 @ d 
<2991 /0!!!3!#+e      % x@<
	%%	
f hrd&#	 !
  &<<9999991 9990KSX99Y"!!!3267#"&546?>54765>PZ=-\\SabeD^XB&ocMY;Q,CDGF89L\V@T?      u      ^_<      +    +mT            m  m                 h            ! %5 y Bj- q {  s } f     os X X X   ! }     u   m u  V w \  \   Z j 9     s o/ 9    ^   Z \  b     Z R  b  Z#  o  P   7 ;    X    w   -    w X-  - X  Fo9  / / /  ! ! ! ! ! !              w \ \ \ \ \ w j j j j    ^ ^ ^ ^ ^ ^   \ \ \ \     b  b b b b b B      ;  ; ! ^ ! ^ ! ^          Z   Z  \  \  \  \  \ u b u b u b u b              	 m  u    Z  Z  Z  Z % w  w  w  j  \ b \ b \ b D  #   #         Z o Z o Z o j  j  j  j  j  j       ;  s  s  s        + -      }  a  \ } l [ &        Z P R   \  	        b ; o  o Z   Z u   s  
 
 n  s 
 n  Q  I ! ^   \ b j  j  j  j  j  \ ! ^ ! ^    u b u  \ b \ b 
 n  u b  w      ! ^ ! ^ o \  \ o    \ b \ b =  # j  j    Z o 6 n   j  s  ! ^  \ \ b \ b \ b \ b  ; 1 % o             9   n x x    M F X \   f 0 l   |  b b    j  j X l r  P P P @ D x b K R    M     h A  [ [ [ ;   X U T P   : D . v n e     7 w l = x ^ h  F   3   B  Q J 4 . 9 8 QIIUU HH  	-	-)s.L)'JH   -  -L) 
  NNoSV;`S/ -to
-   -     X    -J a   w    s m-yU ! }  !  s  \  u ! V w  \   b Z  \  P Z   6   L 6  8 b    a  P  /  b    b  L A H E @ L b L @ p i "$ " :  4 \ b ` Z   c r   - 4    \      V V .           m  u w   !  }  (   } w w u  V  \    Z  #  P e N N  ( |    S ^ A w  ? \      E V  b     ; O 7 a  N : (    8 ` \ \         #    ;   ( \ b   / \     }  u  %  N N   Z   9  9  7 e     u    e  ! ^ ! ^     \ \ \ \ \   }  
 n w  w  \ b \ b \ b    ;  ;  ; e    (  }  \ Z     G b ! ! b M p b + ! j  N # j @ G ! G ! 2 ! K j M 4 H ! j ! i j 2 p  3 \   C  P  A g  A   6 A H O b    g   g    P  u  a Q  u  Q A b * .- ; ;    Y   L       X X X  << 
 
 H H      <   L    0 00*0 ; 8l } >  f B Z Z z         X X X X 
 
  l } > > L  Z Z z  > l y  K G f { 5  S K } } T T H H  f d > O >  X 5   R R k 
 	 	i	 3h b d P  a b b  b b b d b  b a  a    b  d  b 9 b ^ b a a b c b a a m  M c P ~ 5 f i  b a ) ( +  ",DD*:PND002( ))0 00$$.'&M"O""09M &UM b: j Z0OJ%$Jt2M'?'',,x0" O9G.)" ! ^ }  }  }     Z  Z  Z  Z  Z  \  \  \   u b         C     u  u  u   Z  Z  Z  Z V R V R V R w  w  w  w  \ b     # # # #       Z o Z o Z o Z o j  j  j  j  9 P 9 P                      7  7  ; s  s  s   o   ;  b ! ^ ! ^ ! ^ ! ^  \  \  \   \ b \ b  	  	  	  	 j           ;  ;  ; 6 6 6 6 6 6 6 6 q5T"      h6        ,((    r@UU b b b b b b\& L L L L L L L L{n @ @ @ @ @ @ @ @p*?} 6 6      b b L L @ @ 6 6 6 6 6 6 6 6 q5T"        ,(( @ @ @ @ @ @ @ @p*?} 6 6 6 6 6 6 6 ! ! !     y      )   L L L L   L L   -  @ @ @ @ @8UB Z                      --          j         9          Z    / & &    & %I9 %)"I&'I0J9   Y E   n '        <  2  	  < ,    . Z g 
 f    ; ; 2     J       Z u !   / / /  /   / # /  #  /  B  B  B      B B ; I B  B  B B B  B   B B B B B B 9      ? 2 2 2 B 7 7 B B  B B  B  B B  B  B B B B B B  B  B  }   } B B B B   B  B  B B   A        B ' ,  B  B B B B B B B  B  !  w   ? d d c d d c     B X q y  1 1 1   X X           B J / X X X X X X X X X X X X X X X W X X X X X X Q Q X X X X X X X X V V N X X X X X X X X X W X X X X X X X X X X X X V V X X X X V V X X X X X X X X X X Z Z X X X X > >          2 2 2 2 B B B B X X X X  Z Z   X Z Z X X X X X X X X X X X X X X X X 9 ? r n    //   X G     # X C @  _ 2  4 B         B B     B B    B !   B B  B !   B B          B   -   X X X B ! X X    X X  @     6  4    H F F F                 n < < < < < <xxxxxxxhhi      Fii              DD                           u           777777                           a a    " 5 " Y  : :  ; +   6 .   o c    N 8 / & / / 0      	  " N ` y a  7   g     ! ! ! !       G  C L   5  4 = / U 2 8  Y ^ C V p    j 6   g v    2    1 .r  j D7 ` . / < K D $ > K - - 9 . 7 . P < < < < < < . . . . R R  s '      J  * R * "    . . : = 4 % = ?D - W & W ; %  J  @  3 @ V 9 0  ~  0 G     + % ( C ( # ( = ( . 6 W 0 $  2   $ 0 1 7 4 ! $   % 2   0  2 ) !  " $ E = 8 0 +Q   g   . r A 1  fnCD      S t S t - I S - 6 S S ` { { 6 6O 6 e e 5 a } T 2 )  X t S u N * u 5  & % 2 S B   u) QQ W W  |  u B B P w X X T11     T1           ` V ! `   A  b  s  X// EEG     e l P a    1 b    E  E  E  E  E  EOO X  X  X  X `` 
n 
n   0 00*0 ;   L      E  V  E  E X X X X X X    ``<< 
   
   H T H TO      <     V L      vl l l l l           . -   / oZ-   P-       EO             l      X X X    L            D   D   D   D            x       X    H        0  d  	  	\  
  
  `               $  p            |    |    ,    D            d    `          x          h     !  !P  !  !  "  "H  #@  #  $`  $  %  &   &  '`  '  (@  (  )  *  *  +  +  ,<  ,  -  .@  .  /H  0@  1  1  28  2  3(  3  4t  4t  4  5  6   7  7  8(  9\  9  :  ;  <  <@  <l  =  =  >T  >  ?H  @  @D  @  AL  A|  A  A  Bp  B  C   C   C@  D4  DX  D|  D  D  E  F  G8  GP  Gh  G  G  G  G  G  H  H<  H  I   I$  IH  It  I  I  J8  K<  K`  K  K  K  K  Ll  M\  Mt  M  M  M  M  M  Oh  O  O  O  O  O  P  P  P4  PL  Qd  Q|  Q  Q  Q  Q  R  Rt  S|  S  S  S  S  T  T  T  U   U8  UP  Uh  U  U  U  U  U  U  V  V(  V@  VX  Vp  V  V  Wl  W  W  W  W  W  X  X  X4  XL  Xp  X  X  X  X  X  Y   Y  Y<  Y`  Y  Z,  Z  Z  [  [D  [\  [t  [  [  [  [  \   \  ]  ]  ]  ]  ]  ^l  ^  ^  ^  ^  _   _  _0  _T  _  ``  `x  `  `  `  `  `  a  a  b4  bh  b  b  b  b  b  c  d  d  d  d  e   e  e0  eH  e`  ex  e  e  e  e  e  f  f   fD  fx  f  gt  g  g  g  h  h4  hL  hp  h  h  h  h  h  i  i,  iP  ix  i  i  i  j  j  j4  jL  j  k  k  k  lD  l  l  m|  m  n\  nl  n  o8  o  p,  p  q0  q  r4  r  s  st  t   tH  t  t  u@  u  u  v4  v  v  w@  wX  wp  w  x<  x  y  y  z  z|  z  {  {x  {  |,  |d  ||  |  }  }`  }  ~  ~L  ~     p    x    \    4            0  H  `  x              0  H  h                  @  X  p                 0  H  `  x          4  L  d  |              $  <  T  l                ,  D  \  t                4    P  h      `        ,  D  \  |              4  L  d    `    8    d    \      d    @    0      0      |                  H           h        p      x    <  x    (      d    <    L      `    \    L      h      L    T    @      p      l    X        4      X    T            8      p      P    4    |  <      l        h          8  x       Ì    4  t  Ą  Ĕ  Ĥ  Ĵ    ,  ň    @  Ɯ          0  D  l  ǈ  ǜ  ǰ          ȸ    H  X  ʔ       ˬ    @  `  ̈  ̰          (  8  H  X  ̈́  ͔      (  t  ΄        ,  X  p  Ϥ      $  @  T  h  Ќ  Ь      @  d  ш  Ѵ      4  h  Ҩ    @  Ӥ  Ӵ      L  Ԍ      L  D  p  ր  ֐  ֠  ּ        @  d  ׌      ؀  ؘ  ب  ؼ        <  L  \  ل  ٔ  ٬            $  4  L  d  |  ڔ  ڬ            8  H  X  h        $  4  D  |  ܌  ܜ  ܬ        ݜ  ݬ            (  @  X  p    d    L  \      h          X      4      d      |    <            $    0        P    d    0                           x    h  x          t           0      p          @      ,  D  \      $  4  p  ,  <            8  H  X  h                       `      x     $ 4       `     8  P `        	8 	 
L 
 D   T     $ <     $   < T l    l |    L   <      d   $ X       0 `   0 x     4   L   d       $ < T d t        $ < T l         0 H ` x       4 ` x        l   (  x   !0 !\ ! "@ " " # #x $$ $p $ % % &T & '@ ' (  (h ( )0 ) *8 * * +x + , , -4 - - .l .| . . / /( / / 0@ 0 1 1\ 1 2  2L 2 3< 3 3 4 4 54 5x 5 6D 6 7< 7 7 8 8 8 9, 9 :l : : ;8 ; ; < <, < =( =8 = >$ >P >x ? ? @ @` @ @ A A A B  B B0 BH B` B| B B B B B C` Cx C C D, DD E  E E E FD F\ F F G G$ G< G HX H H I` I J J J KL Kx K L L( L L M4 MD MX M M M N, N O0 O O P0 P P Q4 Qt Q Q R  R8 RP Rh R R R R R R S S( S@ SX S T  T T T U U U( U V, V V V V Wd W X@ X Y Y Z@ Z [  [ [ \` \ ]$ ] ^< ^ _L _ `( ` a  a b b cp d  d e e8 e e e f, f| f gH g h h\ h h i( i j j j\ j kP k l mL m n oD o pL p q q r s s tT t u< u v w xP x y z$ z {( |  | }< } ~ p  d        8  @      `    T    < l   ( X    ( X    x      \  h   |    P   H   $ X   ( h    $ 8 L    p           D t    T   \  8   @  t     d    p  $ < T l         8 P h        ( @ X p         8 P h        ( @ X p         0 H ` x         8 P h         8 P h        ( @ X p         8 P h        0 P h        ( @ X p         0 H ` x         8 H ` x       ( @ X p         0 H ` x         8 P h        ( @ X p         0 H ` x         8 P h        ( @ X p         0 H ` x         8 P h        ( @ X p         0 H ` x         8 P h        ( @ X p          8 H ` p          0 H ` x         8 P h        ( @ X p    ¸      0 H ` x Ð è       8 P h Ā Ę İ     ( @ X h ŀ Ő Š       8 P h ƀ Ɛ ƨ Ƹ     4 L d t ǌ Ǥ Ǽ     4 L d | Ȕ Ȥ ȼ     4 L \ t Ɍ ɜ ɬ     $ < L d t ʌ ʜ                ( P x ˠ ˼   L ̈ ̬  l   \  D `    D d Ҁ Ҡ    < Ӏ Ӝ $ 8 p Ԡ    $ \ \   ֐   | פ P   , T و ټ    4 H \ p ڄ ژ ڬ      $ 8 L ` t ۈ ۜ ۰       ( < ܰ d  4 ޠ 0 ߤ  \  d |   <  X      T  8     T   x 4  <  t     p       @ `         @ `      P    @ p    `     H    X    H     h $  d    P     |   <  D   0 X      l   \   4 p     , l   	H 	 	 
$ 
d 
 
   l   X   0 x   0 l   <   @   X   0   D   $ t  0 d   $  ( X    ,   \       t      (     0   ! !8 !H !p ! ! " " # # # $ $$ $P $h $ $ $ %L % & &l & 'X ' (\ ( ) * +D ,4 , , - .$ .< .\ .| . . /( / / 0< 0 0 1 1T 2< 2 3L 3 4 4d 4 5  5\ 5 5 6D 6 7 7` 7 8 8 8 9l : : : ;4 ; <$ <l < = =` = >l > ?D ? ? @D @ A A\ A B\ B C, C C D D0 Dd D D D E F` G, G H I Jh K( K L, Lh L L M  MD Ml M M M N4 Nt N O OL O O O PH P P Q0 Q Q RL R R S Sh S Tp T U8 U U VH V WP W W X  X, Xd X X X Y( YH Yh Y Y Y Y Z  ZH Zh Z Z [ [P [ \ \ \ \ ] ]4 ] ] ^ ^ ^ c c d d@ dl d e ed e| f  f f f g gH g| g h hX h h i@ i i jH j j kT k k l$ lp l m m m n n0 nH n` nx n n o o( o@ o o o o p ph p p p q, q rx r s  s s t tx t t t t t t u u uh u v w| x@ yP y z { {D { { { | |, |d | | | | } }0 }h } } ~ ~L ~ ~ ~ D p     $ X    < |   4 X |     0 P t      @ h     @ l     < d     < h     8 \     0 \     P    $ \     4 h      L x      T     8 l    ( \    D x    L    t    4 T p       < X t      ( < X t        8 T p       $     0 D X |      , H t   8   P  x     $ P p      , H t       H d      4 \ |     8 0    $ x  (    ,   T    0 \      8 P   < d    @ h   H   <  (     D `     ,     <   t <  h  8   Ȍ   X ʰ H ̐  ͐ T  τ H   Ҕ  ր ט   ܐ  ݈  p   @ d   0  \    \   0  8    H      | @  P  0  p   T p       \  $   $    p     8   X    	L 
0 (   D 0 @ ` <    0 | p  x 0 ( h    H !  !h ! " "8 " " #L $@ %t & '0 ' (L )L + - /X / 0( 0P 0 2\ 3 5 9l ; < =@ = @ B( CX DT E F` F GH G G H4 H I Jp J J K$ KT K L$ M M NX O Q T U` V$ V W W Xh X Y\ Y Z< Z Z [L [ \T \ \ ]8 ] ^L `  b  c@ ep g i o q0 s t@ t u w< x z {\ | } }L } } } ~8 ~T ~p ~ ~ ~ ~           \     ( P x     |   H t   t    d     d    T   4     t    $ | $  ` <   8     t  ( d     8 T     D     L     < d     8 d    $ L t    4  P   H    |  H \  , t   4 T t      D l     4 T |     D p    8 h   < L t    H     h  p        ( @ X p         0 H ` x         8 P h    \ t   P h   P h   T l                  x  0 d         0 d t         $ < L d |       $ < T l |      , D \ t        4 L d t  p   $ < T d     l    |  ð        ŀ , D \ t ƌ Ɯ  p    , D T  t   4 L d | ʔ ʬ     $ 4   h   h ͠   Θ  Ϭ      И X   Ҍ Ҝ H ` x Ӑ Ө       8 Ԉ       l մ  < ֔  $ ج < ٜ    L ڨ  X ۄ ۠ ۼ    H ` ܄ ܴ (  d ,   4 l                H ` x        + e    @   $             _        B       ]                             5       m             	       4  	       	      	  S  	  *b  	  *  	    	  &  	  "I  	  :  	 &  	  h C o p y r i g h t   ( c )   2 0 0 3   b y   B i t s t r e a m ,   I n c .   A l l   R i g h t s   R e s e r v e d . 
 D e j a V u   c h a n g e s   a r e   i n   p u b l i c   d o m a i n 
  Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved.
DejaVu changes are in public domain
  D e j a V u   S a n s   M o n o  DejaVu Sans Mono  B o l d  Bold  D e j a V u   S a n s   M o n o   B o l d  DejaVu Sans Mono Bold  D e j a V u   S a n s   M o n o   B o l d  DejaVu Sans Mono Bold  V e r s i o n   2 . 3 7  Version 2.37  D e j a V u S a n s M o n o - B o l d  DejaVuSansMono-Bold  D e j a V u   f o n t s   t e a m  DejaVu fonts team  h t t p : / / d e j a v u . s o u r c e f o r g e . n e t  http://dejavu.sourceforge.net  F o n t s   a r e   ( c )   B i t s t r e a m   ( s e e   b e l o w ) .   D e j a V u   c h a n g e s   a r e   i n   p u b l i c   d o m a i n . 
 
 B i t s t r e a m   V e r a   F o n t s   C o p y r i g h t 
 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
 
 C o p y r i g h t   ( c )   2 0 0 3   b y   B i t s t r e a m ,   I n c .   A l l   R i g h t s   R e s e r v e d .   B i t s t r e a m   V e r a   i s   a   t r a d e m a r k   o f   B i t s t r e a m ,   I n c . 
 
 P e r m i s s i o n   i s   h e r e b y   g r a n t e d ,   f r e e   o f   c h a r g e ,   t o   a n y   p e r s o n   o b t a i n i n g   a   c o p y   o f   t h e   f o n t s   a c c o m p a n y i n g   t h i s   l i c e n s e   ( " F o n t s " )   a n d   a s s o c i a t e d   d o c u m e n t a t i o n   f i l e s   ( t h e   " F o n t   S o f t w a r e " ) ,   t o   r e p r o d u c e   a n d   d i s t r i b u t e   t h e   F o n t   S o f t w a r e ,   i n c l u d i n g   w i t h o u t   l i m i t a t i o n   t h e   r i g h t s   t o   u s e ,   c o p y ,   m e r g e ,   p u b l i s h ,   d i s t r i b u t e ,   a n d / o r   s e l l   c o p i e s   o f   t h e   F o n t   S o f t w a r e ,   a n d   t o   p e r m i t   p e r s o n s   t o   w h o m   t h e   F o n t   S o f t w a r e   i s   f u r n i s h e d   t o   d o   s o ,   s u b j e c t   t o   t h e   f o l l o w i n g   c o n d i t i o n s : 
 
 T h e   a b o v e   c o p y r i g h t   a n d   t r a d e m a r k   n o t i c e s   a n d   t h i s   p e r m i s s i o n   n o t i c e   s h a l l   b e   i n c l u d e d   i n   a l l   c o p i e s   o f   o n e   o r   m o r e   o f   t h e   F o n t   S o f t w a r e   t y p e f a c e s . 
 
 T h e   F o n t   S o f t w a r e   m a y   b e   m o d i f i e d ,   a l t e r e d ,   o r   a d d e d   t o ,   a n d   i n   p a r t i c u l a r   t h e   d e s i g n s   o f   g l y p h s   o r   c h a r a c t e r s   i n   t h e   F o n t s   m a y   b e   m o d i f i e d   a n d   a d d i t i o n a l   g l y p h s   o r     o r   c h a r a c t e r s   m a y   b e   a d d e d   t o   t h e   F o n t s ,   o n l y   i f   t h e   f o n t s   a r e   r e n a m e d   t o   n a m e s   n o t   c o n t a i n i n g   e i t h e r   t h e   w o r d s   " B i t s t r e a m "   o r   t h e   w o r d   " V e r a " . 
 
 T h i s   L i c e n s e   b e c o m e s   n u l l   a n d   v o i d   t o   t h e   e x t e n t   a p p l i c a b l e   t o   F o n t s   o r   F o n t   S o f t w a r e   t h a t   h a s   b e e n   m o d i f i e d   a n d   i s   d i s t r i b u t e d   u n d e r   t h e   " B i t s t r e a m   V e r a "   n a m e s . 
 
 T h e   F o n t   S o f t w a r e   m a y   b e   s o l d   a s   p a r t   o f   a   l a r g e r   s o f t w a r e   p a c k a g e   b u t   n o   c o p y   o f   o n e   o r   m o r e   o f   t h e   F o n t   S o f t w a r e   t y p e f a c e s   m a y   b e   s o l d   b y   i t s e l f . 
 
 T H E   F O N T   S O F T W A R E   I S   P R O V I D E D   " A S   I S " ,   W I T H O U T   W A R R A N T Y   O F   A N Y   K I N D ,   E X P R E S S   O R   I M P L I E D ,   I N C L U D I N G   B U T   N O T   L I M I T E D   T O   A N Y   W A R R A N T I E S   O F   M E R C H A N T A B I L I T Y ,   F I T N E S S   F O R   A   P A R T I C U L A R   P U R P O S E   A N D   N O N I N F R I N G E M E N T   O F   C O P Y R I G H T ,   P A T E N T ,   T R A D E M A R K ,   O R   O T H E R   R I G H T .   I N   N O   E V E N T   S H A L L   B I T S T R E A M   O R   T H E   G N O M E   F O U N D A T I O N   B E   L I A B L E   F O R   A N Y   C L A I M ,   D A M A G E S   O R   O T H E R   L I A B I L I T Y ,   I N C L U D I N G   A N Y   G E N E R A L ,   S P E C I A L ,   I N D I R E C T ,   I N C I D E N T A L ,   O R   C O N S E Q U E N T I A L   D A M A G E S ,   W H E T H E R   I N   A N   A C T I O N   O F   C O N T R A C T ,   T O R T   O R   O T H E R W I S E ,   A R I S I N G   F R O M ,   O U T   O F   T H E   U S E   O R   I N A B I L I T Y   T O   U S E   T H E   F O N T   S O F T W A R E   O R   F R O M   O T H E R   D E A L I N G S   I N   T H E   F O N T   S O F T W A R E . 
 
 E x c e p t   a s   c o n t a i n e d   i n   t h i s   n o t i c e ,   t h e   n a m e s   o f   G n o m e ,   t h e   G n o m e   F o u n d a t i o n ,   a n d   B i t s t r e a m   I n c . ,   s h a l l   n o t   b e   u s e d   i n   a d v e r t i s i n g   o r   o t h e r w i s e   t o   p r o m o t e   t h e   s a l e ,   u s e   o r   o t h e r   d e a l i n g s   i n   t h i s   F o n t   S o f t w a r e   w i t h o u t   p r i o r   w r i t t e n   a u t h o r i z a t i o n   f r o m   t h e   G n o m e   F o u n d a t i o n   o r   B i t s t r e a m   I n c . ,   r e s p e c t i v e l y .   F o r   f u r t h e r   i n f o r m a t i o n ,   c o n t a c t :   f o n t s   a t   g n o m e   d o t   o r g .   
  Fonts are (c) Bitstream (see below). DejaVu changes are in public domain.

Bitstream Vera Fonts Copyright
------------------------------

Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. Bitstream Vera is a trademark of Bitstream, Inc.

Permission is hereby granted, free of charge, to any person obtaining a copy of the fonts accompanying this license ("Fonts") and associated documentation files (the "Font Software"), to reproduce and distribute the Font Software, including without limitation the rights to use, copy, merge, publish, distribute, and/or sell copies of the Font Software, and to permit persons to whom the Font Software is furnished to do so, subject to the following conditions:

The above copyright and trademark notices and this permission notice shall be included in all copies of one or more of the Font Software typefaces.

The Font Software may be modified, altered, or added to, and in particular the designs of glyphs or characters in the Fonts may be modified and additional glyphs or  or characters may be added to the Fonts, only if the fonts are renamed to names not containing either the words "Bitstream" or the word "Vera".

This License becomes null and void to the extent applicable to Fonts or Font Software that has been modified and is distributed under the "Bitstream Vera" names.

The Font Software may be sold as part of a larger software package but no copy of one or more of the Font Software typefaces may be sold by itself.

THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL BITSTREAM OR THE GNOME FOUNDATION BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE.

Except as contained in this notice, the names of Gnome, the Gnome Foundation, and Bitstream Inc., shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Font Software without prior written authorization from the Gnome Foundation or Bitstream Inc., respectively. For further information, contact: fonts at gnome dot org. 
  h t t p : / / d e j a v u . s o u r c e f o r g e . n e t / w i k i / i n d e x . p h p / L i c e n s e  http://dejavu.sourceforge.net/wiki/index.php/License          ~ Z                              	 
                        ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a                                    b c  d  e        f     g      h    j i k m l n  o q p r s u t v w  x z y { } |    ~       	
     !"#$%&'()*+  ,-./0123456789:  ;<=>?@ABCDEFGHI  JKLMNOPQRS    TUVWXYZ[\]^_`abcdefghi jklm  nopqrstuvwxyz{|}~  	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~         	
  !"#$%&'()*+,-./0 123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ 	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ 	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ 	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ 	
 !"#$%&'()*+,-./0123456789:;<=>?  @AB   C   D   E F GHIJKLM  NOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~   	
 !"#$%&'()*+,-. /01 23456789 :  ;<=>? @AB CDEFGHI JKLMNOPQRSTUVWXYZ[\ ]^_`abcdefghijklmnopqrs tuv  wxyz{|}~	 											
																						 	!	"	#	$	%	&	'	(	)	*	+	,	-	.	/	0	1	2	3	4	5	6	7	8	9	:	;	<	=	>	?	@	A	B	C	D	E	F	G	H	I	J	K	L	M	N	O	P	Q	R	S	T	U	V	W	X	Y	Z	[	\	]	^	_	`	a	b	c	d	e	f	g	h	i	j	k	l	m	n	o	p	q	r	s	t	u	v	w	x	y	z	{	|	}	~																																																																																																																																	
 








	























 
!
"
#
$
% 
&
'
(
)
*
+
,
-
.
/
0
1
2
3
4
5
6
7
8
9
:
;
<
=
>
?
@
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
[
\
]
^
_
`
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
{
|
}
~
































































































































 	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~   	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~	sfthyphenAmacronamacronAbreveabreveAogonekaogonekCcircumflexccircumflex
Cdotaccent
cdotaccentDcarondcaronDcroatEmacronemacronEbreveebreve
Edotaccent
edotaccentEogonekeogonekEcaronecaronGcircumflexgcircumflex
Gdotaccent
gdotaccentGcommaaccentgcommaaccentHcircumflexhcircumflexHbarhbarItildeitildeImacronimacronIbreveibreveIogonekiogonekIJijJcircumflexjcircumflexKcommaaccentkcommaaccentkgreenlandicLacutelacuteLcommaaccentlcommaaccentLcaronlcaronLdotldotNacutenacuteNcommaaccentncommaaccentNcaronncaronnapostropheEngengOmacronomacronObreveobreveOhungarumlautohungarumlautRacuteracuteRcommaaccentrcommaaccentRcaronrcaronSacutesacuteScircumflexscircumflexTcommaaccenttcommaaccentTcarontcaronTbartbarUtildeutildeUmacronumacronUbreveubreveUringuringUhungarumlautuhungarumlautUogonekuogonekWcircumflexwcircumflexYcircumflexycircumflexZacutezacute
Zdotaccent
zdotaccentlongsuni0180uni0181uni0182uni0183uni0184uni0185uni0186uni0187uni0188uni0189uni018Auni018Buni018Cuni018Duni018Euni018Funi0190uni0191uni0193uni0194uni0195uni0196uni0197uni0198uni0199uni019Auni019Buni019Cuni019Duni019Euni019FOhornohornuni01A2uni01A3uni01A4uni01A5uni01A6uni01A7uni01A8uni01A9uni01AAuni01ABuni01ACuni01ADuni01AEUhornuhornuni01B1uni01B2uni01B3uni01B4uni01B5uni01B6uni01B7uni01B8uni01B9uni01BAuni01BBuni01BCuni01BDuni01BEuni01BFuni01C0uni01C1uni01C2uni01C3uni01CDuni01CEuni01CFuni01D0uni01D1uni01D2uni01D3uni01D4uni01D5uni01D6uni01D7uni01D8uni01D9uni01DAuni01DBuni01DCuni01DDuni01DEuni01DFuni01E0uni01E1uni01E2uni01E3Gcarongcaronuni01E8uni01E9uni01EAuni01EBuni01ECuni01EDuni01EEuni01EFuni01F0uni01F4uni01F5uni01F6uni01F8uni01F9AEacuteaeacuteOslashacuteoslashacuteuni0200uni0201uni0202uni0203uni0204uni0205uni0206uni0207uni0208uni0209uni020Auni020Buni020Cuni020Duni020Euni020Funi0210uni0211uni0212uni0213uni0214uni0215uni0216uni0217Scommaaccentscommaaccentuni021Auni021Buni021Cuni021Duni021Euni021Funi0220uni0221uni0224uni0225uni0226uni0227uni0228uni0229uni022Auni022Buni022Cuni022Duni022Euni022Funi0230uni0231uni0232uni0233uni0234uni0235uni0236dotlessjuni0238uni0239uni023Auni023Buni023Cuni023Duni023Euni023Funi0240uni0241uni0243uni0244uni0245uni024Cuni024Duni0250uni0251uni0252uni0253uni0254uni0255uni0256uni0257uni0258uni0259uni025Auni025Buni025Cuni025Duni025Euni025Funi0260uni0261uni0262uni0263uni0264uni0265uni0266uni0267uni0268uni0269uni026Auni026Buni026Cuni026Duni026Euni026Funi0270uni0271uni0272uni0273uni0274uni0275uni0276uni0277uni0278uni0279uni027Auni027Buni027Cuni027Duni027Euni027Funi0280uni0281uni0282uni0283uni0284uni0285uni0286uni0287uni0288uni0289uni028Auni028Buni028Cuni028Duni028Euni028Funi0290uni0291uni0292uni0293uni0294uni0295uni0296uni0297uni0298uni0299uni029Auni029Buni029Cuni029Duni029Euni029Funi02A0uni02A1uni02A2uni02A3uni02A4uni02A5uni02A6uni02A7uni02A8uni02A9uni02AAuni02ABuni02ACuni02ADuni02AEuni02AFuni02B0uni02B1uni02B2uni02B3uni02B4uni02B5uni02B6uni02B7uni02B8uni02B9uni02BBuni02BCuni02BDuni02BEuni02BFuni02C0uni02C1uni02C8uni02C9uni02CCuni02CDuni02CEuni02CFuni02D0uni02D1uni02D2uni02D3uni02D6uni02D7uni02DEuni02E0uni02E1uni02E2uni02E3uni02E4uni02E5uni02E6uni02E7uni02E8uni02E9uni02EEuni02F3	gravecomb	acutecombuni0302	tildecombuni0304uni0305uni0306uni0307uni0308hookabovecombuni030Auni030Buni030Cuni030Duni030Euni030Funi0310uni0311uni0312uni0313uni0314uni0315uni0316uni0317uni0318uni0319uni031Auni031Buni031Cuni031Duni031Euni031Funi0320uni0321uni0322dotbelowcombuni0324uni0325uni0326uni0327uni0328uni0329uni032Auni032Buni032Cuni032Duni032Euni032Funi0330uni0331uni0332uni0333uni0334uni0335uni0336uni0337uni0338uni0339uni033Auni033Buni033Cuni033Duni033Euni033Funi0343uni0358uni0361uni0374uni0375uni0376uni0377uni037Auni037Buni037Cuni037Duni037Euni037Ftonosdieresistonos
Alphatonos	anoteleiaEpsilontonosEtatonos	IotatonosOmicrontonosUpsilontonos
OmegatonosiotadieresistonosAlphaBetaGammauni0394EpsilonZetaEtaThetaIotaKappaLambdaMuNuXiOmicronPiRhoSigmaTauUpsilonPhiChiPsiIotadieresisUpsilondieresis
alphatonosepsilontonosetatonos	iotatonosupsilondieresistonosalphabetagammadeltaepsilonzetaetathetaiotakappalambdauni03BCnuxiomicronrhosigma1sigmatauupsilonphichipsiomegaiotadieresisupsilondieresisomicrontonosupsilontonos
omegatonosuni03D0theta1Upsilon1uni03D3uni03D4phi1omega1uni03D7uni03D8uni03D9uni03DAuni03DBuni03DCuni03DDuni03DEuni03DFuni03E0uni03E1uni03F0uni03F1uni03F2uni03F3uni03F4uni03F5uni03F6uni03F7uni03F8uni03F9uni03FAuni03FBuni03FCuni03FDuni03FEuni03FFuni0400uni0401uni0402uni0403uni0404uni0405uni0406uni0407uni0408uni0409uni040Auni040Buni040Cuni040Duni040Euni040Funi0410uni0411uni0412uni0413uni0414uni0415uni0416uni0417uni0418uni0419uni041Auni041Buni041Cuni041Duni041Euni041Funi0420uni0421uni0422uni0423uni0424uni0425uni0426uni0427uni0428uni0429uni042Auni042Buni042Cuni042Duni042Euni042Funi0430uni0431uni0432uni0433uni0434uni0435uni0436uni0437uni0438uni0439uni043Auni043Buni043Cuni043Duni043Euni043Funi0440uni0441uni0442uni0443uni0444uni0445uni0446uni0447uni0448uni0449uni044Auni044Buni044Cuni044Duni044Euni044Funi0450uni0451uni0452uni0453uni0454uni0455uni0456uni0457uni0458uni0459uni045Auni045Buni045Cuni045Duni045Euni045Funi0462uni0463uni0472uni0473uni0490uni0491uni0492uni0493uni0494uni0495uni0496uni0497uni0498uni0499uni049Auni049Buni04A2uni04A3uni04A4uni04A5uni04AAuni04ABuni04ACuni04ADuni04AEuni04AFuni04B0uni04B1uni04B2uni04B3uni04BAuni04BBuni04C0uni04C1uni04C2uni04C3uni04C4uni04C7uni04C8uni04CBuni04CCuni04CFuni04D0uni04D1uni04D2uni04D3uni04D4uni04D5uni04D6uni04D7uni04D8uni04D9uni04DAuni04DBuni04DCuni04DDuni04DEuni04DFuni04E0uni04E1uni04E2uni04E3uni04E4uni04E5uni04E6uni04E7uni04E8uni04E9uni04EAuni04EBuni04ECuni04EDuni04EEuni04EFuni04F0uni04F1uni04F2uni04F3uni04F4uni04F5uni04F6uni04F7uni04F8uni04F9uni0510uni0511uni051Auni051Buni051Cuni051Duni0531uni0532uni0533uni0534uni0535uni0536uni0537uni0538uni0539uni053Auni053Buni053Cuni053Duni053Euni053Funi0540uni0541uni0542uni0543uni0544uni0545uni0546uni0547uni0548uni0549uni054Auni054Buni054Cuni054Duni054Euni054Funi0550uni0551uni0552uni0553uni0554uni0555uni0556uni0559uni055Auni055Buni055Cuni055Duni055Euni055Funi0561uni0562uni0563uni0564uni0565uni0566uni0567uni0568uni0569uni056Auni056Buni056Cuni056Duni056Euni056Funi0570uni0571uni0572uni0573uni0574uni0575uni0576uni0577uni0578uni0579uni057Auni057Buni057Cuni057Duni057Euni057Funi0580uni0581uni0582uni0583uni0584uni0585uni0586uni0587uni0589uni058Auni0606uni0607uni0609uni060Auni060Cuni0615uni061Buni061Funi0621uni0622uni0623uni0624uni0625uni0626uni0627uni0628uni0629uni062Auni062Buni062Cuni062Duni062Euni062Funi0630uni0631uni0632uni0633uni0634uni0635uni0636uni0637uni0638uni0639uni063Auni0640uni0641uni0642uni0643uni0644uni0645uni0646uni0647uni0648uni0649uni064Auni064Buni064Cuni064Duni064Euni064Funi0650uni0651uni0652uni0653uni0654uni0655uni065Auni0660uni0661uni0662uni0663uni0664uni0665uni0666uni0667uni0668uni0669uni066Auni066Buni066Cuni066Duni0674uni0679uni067Auni067Buni067Euni067Funi0680uni0683uni0684uni0686uni0687uni0691uni0698uni06A4uni06A9uni06AFuni06BEuni06CCuni06F0uni06F1uni06F2uni06F3uni06F4uni06F5uni06F6uni06F7uni06F8uni06F9uni0E3Funi0E81uni0E82uni0E84uni0E87uni0E88uni0E8Auni0E8Duni0E94uni0E95uni0E96uni0E97uni0E99uni0E9Auni0E9Buni0E9Cuni0E9Duni0E9Euni0E9Funi0EA1uni0EA2uni0EA3uni0EA5uni0EA7uni0EAAuni0EABuni0EADuni0EAEuni0EAFuni0EB0uni0EB1uni0EB2uni0EB3uni0EB4uni0EB5uni0EB6uni0EB7uni0EB8uni0EB9uni0EBBuni0EBCuni0EC8uni0EC9uni0ECAuni0ECBuni0ECCuni0ECDuni10D0uni10D1uni10D2uni10D3uni10D4uni10D5uni10D6uni10D7uni10D8uni10D9uni10DAuni10DBuni10DCuni10DDuni10DEuni10DFuni10E0uni10E1uni10E2uni10E3uni10E4uni10E5uni10E6uni10E7uni10E8uni10E9uni10EAuni10EBuni10ECuni10EDuni10EEuni10EFuni10F0uni10F1uni10F2uni10F3uni10F4uni10F5uni10F6uni10F7uni10F8uni10F9uni10FAuni10FBuni10FCuni1D02uni1D08uni1D09uni1D14uni1D16uni1D17uni1D1Duni1D1Euni1D1Funi1D2Cuni1D2Duni1D2Euni1D30uni1D31uni1D32uni1D33uni1D34uni1D35uni1D36uni1D37uni1D38uni1D39uni1D3Auni1D3Buni1D3Cuni1D3Euni1D3Funi1D40uni1D41uni1D42uni1D43uni1D44uni1D45uni1D46uni1D47uni1D48uni1D49uni1D4Auni1D4Buni1D4Cuni1D4Duni1D4Euni1D4Funi1D50uni1D51uni1D52uni1D53uni1D54uni1D55uni1D56uni1D57uni1D58uni1D59uni1D5Auni1D5Buni1D62uni1D63uni1D64uni1D65uni1D77uni1D78uni1D7Buni1D85uni1D9Buni1D9Cuni1D9Duni1D9Euni1D9Funi1DA0uni1DA1uni1DA2uni1DA3uni1DA4uni1DA5uni1DA6uni1DA7uni1DA8uni1DA9uni1DAAuni1DABuni1DACuni1DADuni1DAEuni1DAFuni1DB0uni1DB1uni1DB2uni1DB3uni1DB4uni1DB5uni1DB6uni1DB7uni1DB9uni1DBAuni1DBBuni1DBCuni1DBDuni1DBEuni1DBFuni1E00uni1E01uni1E02uni1E03uni1E04uni1E05uni1E06uni1E07uni1E08uni1E09uni1E0Auni1E0Buni1E0Cuni1E0Duni1E0Euni1E0Funi1E10uni1E11uni1E12uni1E13uni1E18uni1E19uni1E1Auni1E1Buni1E1Cuni1E1Duni1E1Euni1E1Funi1E20uni1E21uni1E22uni1E23uni1E24uni1E25uni1E26uni1E27uni1E28uni1E29uni1E2Auni1E2Buni1E2Cuni1E2Duni1E30uni1E31uni1E32uni1E33uni1E34uni1E35uni1E36uni1E37uni1E38uni1E39uni1E3Auni1E3Buni1E3Cuni1E3Duni1E3Euni1E3Funi1E40uni1E41uni1E42uni1E43uni1E44uni1E45uni1E46uni1E47uni1E48uni1E49uni1E4Auni1E4Buni1E4Cuni1E4Duni1E54uni1E55uni1E56uni1E57uni1E58uni1E59uni1E5Auni1E5Buni1E5Cuni1E5Duni1E5Euni1E5Funi1E60uni1E61uni1E62uni1E63uni1E68uni1E69uni1E6Auni1E6Buni1E6Cuni1E6Duni1E6Euni1E6Funi1E70uni1E71uni1E72uni1E73uni1E74uni1E75uni1E76uni1E77uni1E78uni1E79uni1E7Cuni1E7Duni1E7Euni1E7FWgravewgraveWacutewacute	Wdieresis	wdieresisuni1E86uni1E87uni1E88uni1E89uni1E8Auni1E8Buni1E8Cuni1E8Duni1E8Euni1E8Funi1E90uni1E91uni1E92uni1E93uni1E94uni1E95uni1E96uni1E97uni1E98uni1E99uni1E9Buni1E9Funi1EA0uni1EA1uni1EACuni1EADuni1EB0uni1EB1uni1EB6uni1EB7uni1EB8uni1EB9uni1EBCuni1EBDuni1EC6uni1EC7uni1ECAuni1ECBuni1ECCuni1ECDuni1ED8uni1ED9uni1EDAuni1EDBuni1EDCuni1EDDuni1EE0uni1EE1uni1EE2uni1EE3uni1EE4uni1EE5uni1EE8uni1EE9uni1EEAuni1EEBuni1EEEuni1EEFuni1EF0uni1EF1Ygraveygraveuni1EF4uni1EF5uni1EF8uni1EF9uni1F00uni1F01uni1F02uni1F03uni1F04uni1F05uni1F06uni1F07uni1F08uni1F09uni1F0Auni1F0Buni1F0Cuni1F0Duni1F0Euni1F0Funi1F10uni1F11uni1F12uni1F13uni1F14uni1F15uni1F18uni1F19uni1F1Auni1F1Buni1F1Cuni1F1Duni1F20uni1F21uni1F22uni1F23uni1F24uni1F25uni1F26uni1F27uni1F28uni1F29uni1F2Auni1F2Buni1F2Cuni1F2Duni1F2Euni1F2Funi1F30uni1F31uni1F32uni1F33uni1F34uni1F35uni1F36uni1F37uni1F38uni1F39uni1F3Auni1F3Buni1F3Cuni1F3Duni1F3Euni1F3Funi1F40uni1F41uni1F42uni1F43uni1F44uni1F45uni1F48uni1F49uni1F4Auni1F4Buni1F4Cuni1F4Duni1F50uni1F51uni1F52uni1F53uni1F54uni1F55uni1F56uni1F57uni1F59uni1F5Buni1F5Duni1F5Funi1F60uni1F61uni1F62uni1F63uni1F64uni1F65uni1F66uni1F67uni1F68uni1F69uni1F6Auni1F6Buni1F6Cuni1F6Duni1F6Euni1F6Funi1F70uni1F71uni1F72uni1F73uni1F74uni1F75uni1F76uni1F77uni1F78uni1F79uni1F7Auni1F7Buni1F7Cuni1F7Duni1F80uni1F81uni1F82uni1F83uni1F84uni1F85uni1F86uni1F87uni1F88uni1F89uni1F8Auni1F8Buni1F8Cuni1F8Duni1F8Euni1F8Funi1F90uni1F91uni1F92uni1F93uni1F94uni1F95uni1F96uni1F97uni1F98uni1F99uni1F9Auni1F9Buni1F9Cuni1F9Duni1F9Euni1F9Funi1FA0uni1FA1uni1FA2uni1FA3uni1FA4uni1FA5uni1FA6uni1FA7uni1FA8uni1FA9uni1FAAuni1FABuni1FACuni1FADuni1FAEuni1FAFuni1FB0uni1FB1uni1FB2uni1FB3uni1FB4uni1FB6uni1FB7uni1FB8uni1FB9uni1FBAuni1FBBuni1FBCuni1FBDuni1FBEuni1FBFuni1FC0uni1FC1uni1FC2uni1FC3uni1FC4uni1FC6uni1FC7uni1FC8uni1FC9uni1FCAuni1FCBuni1FCCuni1FCDuni1FCEuni1FCFuni1FD0uni1FD1uni1FD2uni1FD3uni1FD6uni1FD7uni1FD8uni1FD9uni1FDAuni1FDBuni1FDDuni1FDEuni1FDFuni1FE0uni1FE1uni1FE2uni1FE3uni1FE4uni1FE5uni1FE6uni1FE7uni1FE8uni1FE9uni1FEAuni1FEBuni1FECuni1FEDuni1FEEuni1FEFuni1FF2uni1FF3uni1FF4uni1FF6uni1FF7uni1FF8uni1FF9uni1FFAuni1FFBuni1FFCuni1FFDuni1FFEuni2000uni2001uni2002uni2003uni2004uni2005uni2006uni2007uni2008uni2009uni200Auni2010uni2011
figuredashuni2015uni2016underscoredblquotereverseduni201Funi2023uni202Funi2031minuteseconduni2034uni2035uni2036uni2037	exclamdbluni203Duni203Euni203Funi2045uni2046uni2047uni2048uni2049uni204Buni205Funi2070uni2071uni2074uni2075uni2076uni2077uni2078uni2079uni207Auni207Buni207Cuni207Duni207Euni207Funi2080uni2081uni2082uni2083uni2084uni2085uni2086uni2087uni2088uni2089uni208Auni208Buni208Cuni208Duni208Euni2090uni2091uni2092uni2093uni2094uni2095uni2096uni2097uni2098uni2099uni209Auni209Buni209Cuni20A0colonmonetaryuni20A2lirauni20A5uni20A6pesetauni20A8uni20A9uni20AAdongEurouni20ADuni20AEuni20AFuni20B0uni20B1uni20B2uni20B3uni20B4uni20B5uni20B8uni20B9uni20BAuni20BDuni2102uni2105uni210Duni210Euni210Funi2115uni2116uni2117uni2119uni211Auni211Duni2124uni2126uni212Auni212B	estimateduni2148uni2150uni2151onethird	twothirdsuni2155uni2156uni2157uni2158uni2159uni215A	oneeighththreeeighthsfiveeighthsseveneighthsuni215Funi2189	arrowleftarrowup
arrowright	arrowdown	arrowboth	arrowupdnuni2196uni2197uni2198uni2199uni219Auni219Buni219Cuni219Duni219Euni219Funi21A0uni21A1uni21A2uni21A3uni21A4uni21A5uni21A6uni21A7arrowupdnbseuni21A9uni21AAuni21ABuni21ACuni21ADuni21AEuni21AFuni21B0uni21B1uni21B2uni21B3uni21B4carriagereturnuni21B6uni21B7uni21B8uni21B9uni21BAuni21BBuni21BCuni21BDuni21BEuni21BFuni21C0uni21C1uni21C2uni21C3uni21C4uni21C5uni21C6uni21C7uni21C8uni21C9uni21CAuni21CBuni21CCuni21CDuni21CEuni21CFarrowdblleft
arrowdbluparrowdblrightarrowdbldownarrowdblbothuni21D5uni21D6uni21D7uni21D8uni21D9uni21DAuni21DBuni21DCuni21DDuni21DEuni21DFuni21E0uni21E1uni21E2uni21E3uni21E4uni21E5uni21E6uni21E7uni21E8uni21E9uni21EAuni21EBuni21ECuni21EDuni21EEuni21EFuni21F0uni21F1uni21F2uni21F3uni21F4uni21F5uni21F6uni21F7uni21F8uni21F9uni21FAuni21FBuni21FCuni21FDuni21FEuni21FF	universaluni2201existentialuni2204emptysetgradientelement
notelementuni220Asuchthatuni220Cuni220Duni220Euni2210uni2213uni2215asteriskmathuni2218uni2219uni221Buni221Cproportional
orthogonalangleuni2223
logicaland	logicalorintersectionunionuni222Cuni222D	thereforeuni2235uni2236uni2237uni2238uni2239uni223Auni223Bsimilaruni223Duni2241uni2242uni2243uni2244	congruentuni2246uni2247uni2249uni224Auni224Buni224Cuni224Duni224Euni224Funi2250uni2251uni2252uni2253uni2254uni2255uni2256uni2257uni2258uni2259uni225Auni225Buni225Cuni225Duni225Euni225Fequivalenceuni2262uni2263uni2266uni2267uni2268uni2269uni226Duni226Euni226Funi2270uni2271uni2272uni2273uni2274uni2275uni2276uni2277uni2278uni2279uni227Auni227Buni227Cuni227Duni227Euni227Funi2280uni2281propersubsetpropersuperset	notsubsetuni2285reflexsubsetreflexsupersetuni2288uni2289uni228Auni228Buni228Duni228Euni228Funi2290uni2291uni2292uni2293uni2294
circleplusuni2296circlemultiplyuni2298uni2299uni229Auni229Buni229Cuni229Duni229Euni229Funi22A0uni22A1uni22A2uni22A3uni22A4perpendicularuni22B2uni22B3uni22B4uni22B5uni22B8uni22C2uni22C3uni22C4dotmathuni22C6uni22CDuni22CEuni22CFuni22D0uni22D1uni22DAuni22DBuni22DCuni22DDuni22DEuni22DFuni22E0uni22E1uni22E2uni22E3uni22E4uni22E5uni22E6uni22E7uni22E8uni22E9uni22EFuni2300uni2301houseuni2303uni2304uni2305uni2306uni2308uni2309uni230Auni230Buni230Cuni230Duni230Euni230Frevlogicalnotuni2311uni2312uni2313uni2314uni2315uni2318uni2319uni231Cuni231Duni231Euni231F
integraltp
integralbtuni2325uni2326uni2327uni2328uni232Buni2335uni2336uni2337uni2338uni2339uni233Auni233Buni233Cuni233Duni233Euni233Funi2340uni2341uni2342uni2343uni2344uni2345uni2346uni2347uni2348uni2349uni234Auni234Buni234Cuni234Duni234Euni234Funi2350uni2351uni2352uni2353uni2354uni2355uni2356uni2357uni2358uni2359uni235Auni235Buni235Cuni235Duni235Euni235Funi2360uni2361uni2362uni2363uni2364uni2365uni2366uni2367uni2368uni2369uni236Auni236Buni236Cuni236Duni236Euni236Funi2370uni2371uni2372uni2373uni2374uni2375uni2376uni2377uni2378uni2379uni237Auni237Duni2380uni2381uni2382uni2383uni2388uni2389uni238Auni238Buni2395uni239Buni239Cuni239Duni239Euni239Funi23A0uni23A1uni23A2uni23A3uni23A4uni23A5uni23A6uni23A7uni23A8uni23A9uni23AAuni23ABuni23ACuni23ADuni23AEuni23CEuni23CFuni2423SF100000uni2501SF110000uni2503uni2504uni2505uni2506uni2507uni2508uni2509uni250Auni250BSF010000uni250Duni250Euni250FSF030000uni2511uni2512uni2513SF020000uni2515uni2516uni2517SF040000uni2519uni251Auni251BSF080000uni251Duni251Euni251Funi2520uni2521uni2522uni2523SF090000uni2525uni2526uni2527uni2528uni2529uni252Auni252BSF060000uni252Duni252Euni252Funi2530uni2531uni2532uni2533SF070000uni2535uni2536uni2537uni2538uni2539uni253Auni253BSF050000uni253Duni253Euni253Funi2540uni2541uni2542uni2543uni2544uni2545uni2546uni2547uni2548uni2549uni254Auni254Buni254Cuni254Duni254Euni254FSF430000SF240000SF510000SF520000SF390000SF220000SF210000SF250000SF500000SF490000SF380000SF280000SF270000SF260000SF360000SF370000SF420000SF190000SF200000SF230000SF470000SF480000SF410000SF450000SF460000SF400000SF540000SF530000SF440000uni256Duni256Euni256Funi2570uni2571uni2572uni2573uni2574uni2575uni2576uni2577uni2578uni2579uni257Auni257Buni257Cuni257Duni257Euni257Fupblockuni2581uni2582uni2583dnblockuni2585uni2586uni2587blockuni2589uni258Auni258Blfblockuni258Duni258Euni258Frtblockltshadeshadedkshadeuni2594uni2595uni2596uni2597uni2598uni2599uni259Auni259Buni259Cuni259Duni259Euni259F	filledboxH22073uni25A2uni25A3uni25A4uni25A5uni25A6uni25A7uni25A8uni25A9H18543H18551
filledrectuni25ADuni25AEuni25AFuni25B0uni25B1triagupuni25B3uni25B4uni25B5uni25B6uni25B7uni25B8uni25B9triagrtuni25BBtriagdnuni25BDuni25BEuni25BFuni25C0uni25C1uni25C2uni25C3triaglfuni25C5uni25C6uni25C7uni25C8uni25C9circleuni25CCuni25CDuni25CEH18533uni25D0uni25D1uni25D2uni25D3uni25D4uni25D5uni25D6uni25D7	invbullet	invcircleuni25DAuni25DBuni25DCuni25DDuni25DEuni25DFuni25E0uni25E1uni25E2uni25E3uni25E4uni25E5
openbulletuni25E7uni25E8uni25E9uni25EAuni25EBuni25ECuni25EDuni25EEuni25EFuni25F0uni25F1uni25F2uni25F3uni25F4uni25F5uni25F6uni25F7uni25F8uni25F9uni25FAuni25FBuni25FCuni25FDuni25FEuni25FFuni2600uni2601uni2602uni2603uni2604uni2605uni2606uni2607uni2608uni2609uni260Auni260Buni260Cuni260Duni260Euni260Funi2610uni2611uni2612uni2613uni2614uni2615uni2616uni2617uni2618uni2619uni261Auni261Buni261Cuni261Duni261Euni261Funi2620uni2621uni2622uni2623uni2624uni2625uni2626uni2627uni2628uni2629uni262Auni262Buni262Cuni262Duni262Euni262Funi2638uni2639	smilefaceinvsmilefacesununi263Duni263Euni263Ffemaleuni2641maleuni2643uni2644uni2645uni2646uni2647uni2648uni2649uni264Auni264Buni264Cuni264Duni264Euni264Funi2650uni2651uni2652uni2653uni2654uni2655uni2656uni2657uni2658uni2659uni265Auni265Buni265Cuni265Duni265Euni265Fspadeuni2661uni2662clubuni2664heartdiamonduni2667uni2668uni2669musicalnotemusicalnotedbluni266Cuni266Duni266Euni266Funi2670uni2671uni2672uni2673uni2674uni2675uni2676uni2677uni2678uni2679uni267Auni267Buni267Cuni267Duni267Euni267Funi2680uni2681uni2682uni2683uni2684uni2685uni2686uni2687uni2688uni2689uni268Auni268Buni2690uni2691uni2692uni2693uni2694uni2695uni2696uni2697uni2698uni2699uni269Auni269Buni269Cuni26A0uni26A1uni26B0uni26B1uni2701uni2702uni2703uni2704uni2706uni2707uni2708uni2709uni270Cuni270Duni270Euni270Funi2710uni2711uni2712uni2713uni2714uni2715uni2716uni2717uni2718uni2719uni271Auni271Buni271Cuni271Duni271Euni271Funi2720uni2721uni2722uni2723uni2724uni2725uni2726uni2727uni2729uni272Auni272Buni272Cuni272Duni272Euni272Funi2730uni2731uni2732uni2733uni2734uni2735uni2736uni2737uni2738uni2739uni273Auni273Buni273Cuni273Duni273Euni273Funi2740uni2741uni2742uni2743uni2744uni2745uni2746uni2747uni2748uni2749uni274Auni274Buni274Duni274Funi2750uni2751uni2752uni2756uni2758uni2759uni275Auni275Buni275Cuni275Duni275Euni2761uni2762uni2763uni2764uni2765uni2766uni2767uni2768uni2769uni276Auni276Buni276Cuni276Duni276Euni276Funi2770uni2771uni2772uni2773uni2774uni2775uni2794uni2798uni2799uni279Auni279Buni279Cuni279Duni279Euni279Funi27A0uni27A1uni27A2uni27A3uni27A4uni27A5uni27A6uni27A7uni27A8uni27A9uni27AAuni27ABuni27ACuni27ADuni27AEuni27AFuni27B1uni27B2uni27B3uni27B4uni27B5uni27B6uni27B7uni27B8uni27B9uni27BAuni27BBuni27BCuni27BDuni27BEuni27BFuni27C2uni27C5uni27C6uni27DCuni27E0uni27E6uni27E7uni27E8uni27E9uni27EAuni27EBuni27F5uni27F6uni27F7uni2987uni2988uni2997uni2998uni29EBuni29FAuni29FBuni2A00uni2A2Funi2A6Auni2A6Buni2B05uni2B06uni2B07uni2B08uni2B09uni2B0Auni2B0Buni2B0Cuni2B0Duni2B12uni2B13uni2B14uni2B15uni2B16uni2B17uni2B18uni2B19uni2B1Auni2C64uni2C6Duni2C6Euni2C6Funi2C70uni2C75uni2C76uni2C77uni2C79uni2C7Auni2C7Cuni2C7Duni2C7Euni2C7Funi2E18uni2E1Funi2E22uni2E23uni2E24uni2E25uni2E2EuniA708uniA709uniA70AuniA70BuniA70CuniA70DuniA70EuniA70FuniA710uniA711uniA712uniA713uniA714uniA715uniA716uniA71BuniA71CuniA71DuniA71EuniA71FuniA722uniA723uniA724uniA725uniA726uniA727uniA789uniA78AuniA78BuniA78CuniA78DuniA78EuniA790uniA791uniA7AAuniA7F8uniA7F9uniF6C5uniFB52uniFB53uniFB54uniFB55uniFB56uniFB57uniFB58uniFB59uniFB5AuniFB5BuniFB5CuniFB5DuniFB5EuniFB5FuniFB60uniFB61uniFB62uniFB63uniFB64uniFB65uniFB66uniFB67uniFB68uniFB69uniFB6AuniFB6BuniFB6CuniFB6DuniFB6EuniFB6FuniFB70uniFB71uniFB72uniFB73uniFB74uniFB75uniFB76uniFB77uniFB78uniFB79uniFB7AuniFB7BuniFB7CuniFB7DuniFB7EuniFB7FuniFB80uniFB81uniFB8AuniFB8BuniFB8CuniFB8DuniFB8EuniFB8FuniFB90uniFB91uniFB92uniFB93uniFB94uniFB95uniFB9EuniFB9FuniFBAAuniFBABuniFBACuniFBADuniFBE8uniFBE9uniFBFCuniFBFDuniFBFEuniFBFFuniFE70uniFE71uniFE72uniFE73uniFE74uniFE76uniFE77uniFE78uniFE79uniFE7AuniFE7BuniFE7CuniFE7DuniFE7EuniFE7FuniFE80uniFE81uniFE82uniFE83uniFE84uniFE85uniFE86uniFE87uniFE88uniFE89uniFE8AuniFE8BuniFE8CuniFE8DuniFE8EuniFE8FuniFE90uniFE91uniFE92uniFE93uniFE94uniFE95uniFE96uniFE97uniFE98uniFE99uniFE9AuniFE9BuniFE9CuniFE9DuniFE9EuniFE9FuniFEA0uniFEA1uniFEA2uniFEA3uniFEA4uniFEA5uniFEA6uniFEA7uniFEA8uniFEA9uniFEAAuniFEABuniFEACuniFEADuniFEAEuniFEAFuniFEB0uniFEB1uniFEB2uniFEB3uniFEB4uniFEB5uniFEB6uniFEB7uniFEB8uniFEB9uniFEBAuniFEBBuniFEBCuniFEBDuniFEBEuniFEBFuniFEC0uniFEC1uniFEC2uniFEC3uniFEC4uniFEC5uniFEC6uniFEC7uniFEC8uniFEC9uniFECAuniFECBuniFECCuniFECDuniFECEuniFECFuniFED0uniFED1uniFED2uniFED3uniFED4uniFED5uniFED6uniFED7uniFED8uniFED9uniFEDAuniFEDBuniFEDCuniFEDDuniFEDEuniFEDFuniFEE0uniFEE1uniFEE2uniFEE3uniFEE4uniFEE5uniFEE6uniFEE7uniFEE8uniFEE9uniFEEAuniFEEBuniFEECuniFEEDuniFEEEuniFEEFuniFEF0uniFEF1uniFEF2uniFEF3uniFEF4uniFEF5uniFEF6uniFEF7uniFEF8uniFEF9uniFEFAuniFEFBuniFEFCuniFEFFuniFFF9uniFFFAuniFFFBuniFFFCuniFFFDu1D55A	dlLtcaronDieresisAcuteTildeGrave
CircumflexCaronfractionslashuni0311.caseuni0306.caseuni0307.caseuni030B.caseuni030F.casethinquestionuni0304.caseunderbarunderbar.wideunderbar.smalljotdiaeresis.symbols
arabic_dotarabic_2dotsarabic_3dotsuni066E.finauni06A1.inituni06A1.mediuni066F.finauni06A1.finaarabic_3dots_aarabic_2dots_aarabic_4dotsarabic_gaf_bararabic_gaf_bar_aarabic_ringEng.altuni066Euni066Funi067Cuni067Duni0681uni0682uni0685uni0692uni06A1uni06B5uni06BAuni06C6uni06CEuni06D5exclamdown.casequestiondown.caseuni2E18.case@tGG22dkY&Y@&2G@AGA2k2%e}f2]%]@%e2d~}d|S{f{2zez2yxfxdwvtssrq.rq.pfp}onmnml]mmli%l]l@kkji%ji@%hfhdgfgdfefedcba}`^d\[\[Z2Y-YXW WV2UTSTSRQRQPQPONMdNMdLKJIJIHGF}EDE}DCA?2>=<=<;<;:9:989988@76776-6545K4343212d1-10/@0D/.-.-,--@@	,+,, @	+*++@	*
**@W)K('K&$&$%$%K$ $#""2! 4!>   42@	@@	 @WK 7722 2X} X
 @	
@		
@	 @  d++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++StartFontMetrics 4.1
Notice Converted by PHP-font-lib
Comment https://github.com/PhenX/php-font-lib
EncodingScheme FontSpecific
FontName DejaVu Sans Mono
FontSubfamily Bold
UniqueID DejaVu Sans Mono Bold
FullName DejaVu Sans Mono Bold
Version Version 2.37
PostScriptName DejaVuSansMono-Bold
Manufacturer DejaVu fonts team
FontVendorURL http://dejavu.sourceforge.net
LicenseURL http://dejavu.sourceforge.net/wiki/index.php/License
Weight Bold
ItalicAngle 0
IsFixedPitch true
UnderlineThickness 44
UnderlinePosition -63
FontHeightOffset 0
Ascender 928
Descender -236
FontBBox -447 -394 731 1041
StartCharMetrics 3316
U 32 ; WX 602 ; N space ; G 3
U 33 ; WX 602 ; N exclam ; G 4
U 34 ; WX 602 ; N quotedbl ; G 5
U 35 ; WX 602 ; N numbersign ; G 6
U 36 ; WX 602 ; N dollar ; G 7
U 37 ; WX 602 ; N percent ; G 8
U 38 ; WX 602 ; N ampersand ; G 9
U 39 ; WX 602 ; N quotesingle ; G 10
U 40 ; WX 602 ; N parenleft ; G 11
U 41 ; WX 602 ; N parenright ; G 12
U 42 ; WX 602 ; N asterisk ; G 13
U 43 ; WX 602 ; N plus ; G 14
U 44 ; WX 602 ; N comma ; G 15
U 45 ; WX 602 ; N hyphen ; G 16
U 46 ; WX 602 ; N period ; G 17
U 47 ; WX 602 ; N slash ; G 18
U 48 ; WX 602 ; N zero ; G 19
U 49 ; WX 602 ; N one ; G 20
U 50 ; WX 602 ; N two ; G 21
U 51 ; WX 602 ; N three ; G 22
U 52 ; WX 602 ; N four ; G 23
U 53 ; WX 602 ; N five ; G 24
U 54 ; WX 602 ; N six ; G 25
U 55 ; WX 602 ; N seven ; G 26
U 56 ; WX 602 ; N eight ; G 27
U 57 ; WX 602 ; N nine ; G 28
U 58 ; WX 602 ; N colon ; G 29
U 59 ; WX 602 ; N semicolon ; G 30
U 60 ; WX 602 ; N less ; G 31
U 61 ; WX 602 ; N equal ; G 32
U 62 ; WX 602 ; N greater ; G 33
U 63 ; WX 602 ; N question ; G 34
U 64 ; WX 602 ; N at ; G 35
U 65 ; WX 602 ; N A ; G 36
U 66 ; WX 602 ; N B ; G 37
U 67 ; WX 602 ; N C ; G 38
U 68 ; WX 602 ; N D ; G 39
U 69 ; WX 602 ; N E ; G 40
U 70 ; WX 602 ; N F ; G 41
U 71 ; WX 602 ; N G ; G 42
U 72 ; WX 602 ; N H ; G 43
U 73 ; WX 602 ; N I ; G 44
U 74 ; WX 602 ; N J ; G 45
U 75 ; WX 602 ; N K ; G 46
U 76 ; WX 602 ; N L ; G 47
U 77 ; WX 602 ; N M ; G 48
U 78 ; WX 602 ; N N ; G 49
U 79 ; WX 602 ; N O ; G 50
U 80 ; WX 602 ; N P ; G 51
U 81 ; WX 602 ; N Q ; G 52
U 82 ; WX 602 ; N R ; G 53
U 83 ; WX 602 ; N S ; G 54
U 84 ; WX 602 ; N T ; G 55
U 85 ; WX 602 ; N U ; G 56
U 86 ; WX 602 ; N V ; G 57
U 87 ; WX 602 ; N W ; G 58
U 88 ; WX 602 ; N X ; G 59
U 89 ; WX 602 ; N Y ; G 60
U 90 ; WX 602 ; N Z ; G 61
U 91 ; WX 602 ; N bracketleft ; G 62
U 92 ; WX 602 ; N backslash ; G 63
U 93 ; WX 602 ; N bracketright ; G 64
U 94 ; WX 602 ; N asciicircum ; G 65
U 95 ; WX 602 ; N underscore ; G 66
U 96 ; WX 602 ; N grave ; G 67
U 97 ; WX 602 ; N a ; G 68
U 98 ; WX 602 ; N b ; G 69
U 99 ; WX 602 ; N c ; G 70
U 100 ; WX 602 ; N d ; G 71
U 101 ; WX 602 ; N e ; G 72
U 102 ; WX 602 ; N f ; G 73
U 103 ; WX 602 ; N g ; G 74
U 104 ; WX 602 ; N h ; G 75
U 105 ; WX 602 ; N i ; G 76
U 106 ; WX 602 ; N j ; G 77
U 107 ; WX 602 ; N k ; G 78
U 108 ; WX 602 ; N l ; G 79
U 109 ; WX 602 ; N m ; G 80
U 110 ; WX 602 ; N n ; G 81
U 111 ; WX 602 ; N o ; G 82
U 112 ; WX 602 ; N p ; G 83
U 113 ; WX 602 ; N q ; G 84
U 114 ; WX 602 ; N r ; G 85
U 115 ; WX 602 ; N s ; G 86
U 116 ; WX 602 ; N t ; G 87
U 117 ; WX 602 ; N u ; G 88
U 118 ; WX 602 ; N v ; G 89
U 119 ; WX 602 ; N w ; G 90
U 120 ; WX 602 ; N x ; G 91
U 121 ; WX 602 ; N y ; G 92
U 122 ; WX 602 ; N z ; G 93
U 123 ; WX 602 ; N braceleft ; G 94
U 124 ; WX 602 ; N bar ; G 95
U 125 ; WX 602 ; N braceright ; G 96
U 126 ; WX 602 ; N asciitilde ; G 97
U 160 ; WX 602 ; N nbspace ; G 98
U 161 ; WX 602 ; N exclamdown ; G 99
U 162 ; WX 602 ; N cent ; G 100
U 163 ; WX 602 ; N sterling ; G 101
U 164 ; WX 602 ; N currency ; G 102
U 165 ; WX 602 ; N yen ; G 103
U 166 ; WX 602 ; N brokenbar ; G 104
U 167 ; WX 602 ; N section ; G 105
U 168 ; WX 602 ; N dieresis ; G 106
U 169 ; WX 602 ; N copyright ; G 107
U 170 ; WX 602 ; N ordfeminine ; G 108
U 171 ; WX 602 ; N guillemotleft ; G 109
U 172 ; WX 602 ; N logicalnot ; G 110
U 173 ; WX 602 ; N sfthyphen ; G 111
U 174 ; WX 602 ; N registered ; G 112
U 175 ; WX 602 ; N macron ; G 113
U 176 ; WX 602 ; N degree ; G 114
U 177 ; WX 602 ; N plusminus ; G 115
U 178 ; WX 602 ; N twosuperior ; G 116
U 179 ; WX 602 ; N threesuperior ; G 117
U 180 ; WX 602 ; N acute ; G 118
U 181 ; WX 602 ; N mu ; G 119
U 182 ; WX 602 ; N paragraph ; G 120
U 183 ; WX 602 ; N periodcentered ; G 121
U 184 ; WX 602 ; N cedilla ; G 122
U 185 ; WX 602 ; N onesuperior ; G 123
U 186 ; WX 602 ; N ordmasculine ; G 124
U 187 ; WX 602 ; N guillemotright ; G 125
U 188 ; WX 602 ; N onequarter ; G 126
U 189 ; WX 602 ; N onehalf ; G 127
U 190 ; WX 602 ; N threequarters ; G 128
U 191 ; WX 602 ; N questiondown ; G 129
U 192 ; WX 602 ; N Agrave ; G 130
U 193 ; WX 602 ; N Aacute ; G 131
U 194 ; WX 602 ; N Acircumflex ; G 132
U 195 ; WX 602 ; N Atilde ; G 133
U 196 ; WX 602 ; N Adieresis ; G 134
U 197 ; WX 602 ; N Aring ; G 135
U 198 ; WX 602 ; N AE ; G 136
U 199 ; WX 602 ; N Ccedilla ; G 137
U 200 ; WX 602 ; N Egrave ; G 138
U 201 ; WX 602 ; N Eacute ; G 139
U 202 ; WX 602 ; N Ecircumflex ; G 140
U 203 ; WX 602 ; N Edieresis ; G 141
U 204 ; WX 602 ; N Igrave ; G 142
U 205 ; WX 602 ; N Iacute ; G 143
U 206 ; WX 602 ; N Icircumflex ; G 144
U 207 ; WX 602 ; N Idieresis ; G 145
U 208 ; WX 602 ; N Eth ; G 146
U 209 ; WX 602 ; N Ntilde ; G 147
U 210 ; WX 602 ; N Ograve ; G 148
U 211 ; WX 602 ; N Oacute ; G 149
U 212 ; WX 602 ; N Ocircumflex ; G 150
U 213 ; WX 602 ; N Otilde ; G 151
U 214 ; WX 602 ; N Odieresis ; G 152
U 215 ; WX 602 ; N multiply ; G 153
U 216 ; WX 602 ; N Oslash ; G 154
U 217 ; WX 602 ; N Ugrave ; G 155
U 218 ; WX 602 ; N Uacute ; G 156
U 219 ; WX 602 ; N Ucircumflex ; G 157
U 220 ; WX 602 ; N Udieresis ; G 158
U 221 ; WX 602 ; N Yacute ; G 159
U 222 ; WX 602 ; N Thorn ; G 160
U 223 ; WX 602 ; N germandbls ; G 161
U 224 ; WX 602 ; N agrave ; G 162
U 225 ; WX 602 ; N aacute ; G 163
U 226 ; WX 602 ; N acircumflex ; G 164
U 227 ; WX 602 ; N atilde ; G 165
U 228 ; WX 602 ; N adieresis ; G 166
U 229 ; WX 602 ; N aring ; G 167
U 230 ; WX 602 ; N ae ; G 168
U 231 ; WX 602 ; N ccedilla ; G 169
U 232 ; WX 602 ; N egrave ; G 170
U 233 ; WX 602 ; N eacute ; G 171
U 234 ; WX 602 ; N ecircumflex ; G 172
U 235 ; WX 602 ; N edieresis ; G 173
U 236 ; WX 602 ; N igrave ; G 174
U 237 ; WX 602 ; N iacute ; G 175
U 238 ; WX 602 ; N icircumflex ; G 176
U 239 ; WX 602 ; N idieresis ; G 177
U 240 ; WX 602 ; N eth ; G 178
U 241 ; WX 602 ; N ntilde ; G 179
U 242 ; WX 602 ; N ograve ; G 180
U 243 ; WX 602 ; N oacute ; G 181
U 244 ; WX 602 ; N ocircumflex ; G 182
U 245 ; WX 602 ; N otilde ; G 183
U 246 ; WX 602 ; N odieresis ; G 184
U 247 ; WX 602 ; N divide ; G 185
U 248 ; WX 602 ; N oslash ; G 186
U 249 ; WX 602 ; N ugrave ; G 187
U 250 ; WX 602 ; N uacute ; G 188
U 251 ; WX 602 ; N ucircumflex ; G 189
U 252 ; WX 602 ; N udieresis ; G 190
U 253 ; WX 602 ; N yacute ; G 191
U 254 ; WX 602 ; N thorn ; G 192
U 255 ; WX 602 ; N ydieresis ; G 193
U 256 ; WX 602 ; N Amacron ; G 194
U 257 ; WX 602 ; N amacron ; G 195
U 258 ; WX 602 ; N Abreve ; G 196
U 259 ; WX 602 ; N abreve ; G 197
U 260 ; WX 602 ; N Aogonek ; G 198
U 261 ; WX 602 ; N aogonek ; G 199
U 262 ; WX 602 ; N Cacute ; G 200
U 263 ; WX 602 ; N cacute ; G 201
U 264 ; WX 602 ; N Ccircumflex ; G 202
U 265 ; WX 602 ; N ccircumflex ; G 203
U 266 ; WX 602 ; N Cdotaccent ; G 204
U 267 ; WX 602 ; N cdotaccent ; G 205
U 268 ; WX 602 ; N Ccaron ; G 206
U 269 ; WX 602 ; N ccaron ; G 207
U 270 ; WX 602 ; N Dcaron ; G 208
U 271 ; WX 602 ; N dcaron ; G 209
U 272 ; WX 602 ; N Dcroat ; G 210
U 273 ; WX 602 ; N dmacron ; G 211
U 274 ; WX 602 ; N Emacron ; G 212
U 275 ; WX 602 ; N emacron ; G 213
U 276 ; WX 602 ; N Ebreve ; G 214
U 277 ; WX 602 ; N ebreve ; G 215
U 278 ; WX 602 ; N Edotaccent ; G 216
U 279 ; WX 602 ; N edotaccent ; G 217
U 280 ; WX 602 ; N Eogonek ; G 218
U 281 ; WX 602 ; N eogonek ; G 219
U 282 ; WX 602 ; N Ecaron ; G 220
U 283 ; WX 602 ; N ecaron ; G 221
U 284 ; WX 602 ; N Gcircumflex ; G 222
U 285 ; WX 602 ; N gcircumflex ; G 223
U 286 ; WX 602 ; N Gbreve ; G 224
U 287 ; WX 602 ; N gbreve ; G 225
U 288 ; WX 602 ; N Gdotaccent ; G 226
U 289 ; WX 602 ; N gdotaccent ; G 227
U 290 ; WX 602 ; N Gcommaaccent ; G 228
U 291 ; WX 602 ; N gcommaaccent ; G 229
U 292 ; WX 602 ; N Hcircumflex ; G 230
U 293 ; WX 602 ; N hcircumflex ; G 231
U 294 ; WX 602 ; N Hbar ; G 232
U 295 ; WX 602 ; N hbar ; G 233
U 296 ; WX 602 ; N Itilde ; G 234
U 297 ; WX 602 ; N itilde ; G 235
U 298 ; WX 602 ; N Imacron ; G 236
U 299 ; WX 602 ; N imacron ; G 237
U 300 ; WX 602 ; N Ibreve ; G 238
U 301 ; WX 602 ; N ibreve ; G 239
U 302 ; WX 602 ; N Iogonek ; G 240
U 303 ; WX 602 ; N iogonek ; G 241
U 304 ; WX 602 ; N Idot ; G 242
U 305 ; WX 602 ; N dotlessi ; G 243
U 306 ; WX 602 ; N IJ ; G 244
U 307 ; WX 602 ; N ij ; G 245
U 308 ; WX 602 ; N Jcircumflex ; G 246
U 309 ; WX 602 ; N jcircumflex ; G 247
U 310 ; WX 602 ; N Kcommaaccent ; G 248
U 311 ; WX 602 ; N kcommaaccent ; G 249
U 312 ; WX 602 ; N kgreenlandic ; G 250
U 313 ; WX 602 ; N Lacute ; G 251
U 314 ; WX 602 ; N lacute ; G 252
U 315 ; WX 602 ; N Lcommaaccent ; G 253
U 316 ; WX 602 ; N lcommaaccent ; G 254
U 317 ; WX 602 ; N Lcaron ; G 255
U 318 ; WX 602 ; N lcaron ; G 256
U 319 ; WX 602 ; N Ldot ; G 257
U 320 ; WX 602 ; N ldot ; G 258
U 321 ; WX 602 ; N Lslash ; G 259
U 322 ; WX 602 ; N lslash ; G 260
U 323 ; WX 602 ; N Nacute ; G 261
U 324 ; WX 602 ; N nacute ; G 262
U 325 ; WX 602 ; N Ncommaaccent ; G 263
U 326 ; WX 602 ; N ncommaaccent ; G 264
U 327 ; WX 602 ; N Ncaron ; G 265
U 328 ; WX 602 ; N ncaron ; G 266
U 329 ; WX 602 ; N napostrophe ; G 267
U 330 ; WX 602 ; N Eng ; G 268
U 331 ; WX 602 ; N eng ; G 269
U 332 ; WX 602 ; N Omacron ; G 270
U 333 ; WX 602 ; N omacron ; G 271
U 334 ; WX 602 ; N Obreve ; G 272
U 335 ; WX 602 ; N obreve ; G 273
U 336 ; WX 602 ; N Ohungarumlaut ; G 274
U 337 ; WX 602 ; N ohungarumlaut ; G 275
U 338 ; WX 602 ; N OE ; G 276
U 339 ; WX 602 ; N oe ; G 277
U 340 ; WX 602 ; N Racute ; G 278
U 341 ; WX 602 ; N racute ; G 279
U 342 ; WX 602 ; N Rcommaaccent ; G 280
U 343 ; WX 602 ; N rcommaaccent ; G 281
U 344 ; WX 602 ; N Rcaron ; G 282
U 345 ; WX 602 ; N rcaron ; G 283
U 346 ; WX 602 ; N Sacute ; G 284
U 347 ; WX 602 ; N sacute ; G 285
U 348 ; WX 602 ; N Scircumflex ; G 286
U 349 ; WX 602 ; N scircumflex ; G 287
U 350 ; WX 602 ; N Scedilla ; G 288
U 351 ; WX 602 ; N scedilla ; G 289
U 352 ; WX 602 ; N Scaron ; G 290
U 353 ; WX 602 ; N scaron ; G 291
U 354 ; WX 602 ; N Tcommaaccent ; G 292
U 355 ; WX 602 ; N tcommaaccent ; G 293
U 356 ; WX 602 ; N Tcaron ; G 294
U 357 ; WX 602 ; N tcaron ; G 295
U 358 ; WX 602 ; N Tbar ; G 296
U 359 ; WX 602 ; N tbar ; G 297
U 360 ; WX 602 ; N Utilde ; G 298
U 361 ; WX 602 ; N utilde ; G 299
U 362 ; WX 602 ; N Umacron ; G 300
U 363 ; WX 602 ; N umacron ; G 301
U 364 ; WX 602 ; N Ubreve ; G 302
U 365 ; WX 602 ; N ubreve ; G 303
U 366 ; WX 602 ; N Uring ; G 304
U 367 ; WX 602 ; N uring ; G 305
U 368 ; WX 602 ; N Uhungarumlaut ; G 306
U 369 ; WX 602 ; N uhungarumlaut ; G 307
U 370 ; WX 602 ; N Uogonek ; G 308
U 371 ; WX 602 ; N uogonek ; G 309
U 372 ; WX 602 ; N Wcircumflex ; G 310
U 373 ; WX 602 ; N wcircumflex ; G 311
U 374 ; WX 602 ; N Ycircumflex ; G 312
U 375 ; WX 602 ; N ycircumflex ; G 313
U 376 ; WX 602 ; N Ydieresis ; G 314
U 377 ; WX 602 ; N Zacute ; G 315
U 378 ; WX 602 ; N zacute ; G 316
U 379 ; WX 602 ; N Zdotaccent ; G 317
U 380 ; WX 602 ; N zdotaccent ; G 318
U 381 ; WX 602 ; N Zcaron ; G 319
U 382 ; WX 602 ; N zcaron ; G 320
U 383 ; WX 602 ; N longs ; G 321
U 384 ; WX 602 ; N uni0180 ; G 322
U 385 ; WX 602 ; N uni0181 ; G 323
U 386 ; WX 602 ; N uni0182 ; G 324
U 387 ; WX 602 ; N uni0183 ; G 325
U 388 ; WX 602 ; N uni0184 ; G 326
U 389 ; WX 602 ; N uni0185 ; G 327
U 390 ; WX 602 ; N uni0186 ; G 328
U 391 ; WX 602 ; N uni0187 ; G 329
U 392 ; WX 602 ; N uni0188 ; G 330
U 393 ; WX 602 ; N uni0189 ; G 331
U 394 ; WX 602 ; N uni018A ; G 332
U 395 ; WX 602 ; N uni018B ; G 333
U 396 ; WX 602 ; N uni018C ; G 334
U 397 ; WX 602 ; N uni018D ; G 335
U 398 ; WX 602 ; N uni018E ; G 336
U 399 ; WX 602 ; N uni018F ; G 337
U 400 ; WX 602 ; N uni0190 ; G 338
U 401 ; WX 602 ; N uni0191 ; G 339
U 402 ; WX 602 ; N florin ; G 340
U 403 ; WX 602 ; N uni0193 ; G 341
U 404 ; WX 602 ; N uni0194 ; G 342
U 405 ; WX 602 ; N uni0195 ; G 343
U 406 ; WX 602 ; N uni0196 ; G 344
U 407 ; WX 602 ; N uni0197 ; G 345
U 408 ; WX 602 ; N uni0198 ; G 346
U 409 ; WX 602 ; N uni0199 ; G 347
U 410 ; WX 602 ; N uni019A ; G 348
U 411 ; WX 602 ; N uni019B ; G 349
U 412 ; WX 602 ; N uni019C ; G 350
U 413 ; WX 602 ; N uni019D ; G 351
U 414 ; WX 602 ; N uni019E ; G 352
U 415 ; WX 602 ; N uni019F ; G 353
U 416 ; WX 602 ; N Ohorn ; G 354
U 417 ; WX 602 ; N ohorn ; G 355
U 418 ; WX 602 ; N uni01A2 ; G 356
U 419 ; WX 602 ; N uni01A3 ; G 357
U 420 ; WX 602 ; N uni01A4 ; G 358
U 421 ; WX 602 ; N uni01A5 ; G 359
U 422 ; WX 602 ; N uni01A6 ; G 360
U 423 ; WX 602 ; N uni01A7 ; G 361
U 424 ; WX 602 ; N uni01A8 ; G 362
U 425 ; WX 602 ; N uni01A9 ; G 363
U 426 ; WX 602 ; N uni01AA ; G 364
U 427 ; WX 602 ; N uni01AB ; G 365
U 428 ; WX 602 ; N uni01AC ; G 366
U 429 ; WX 602 ; N uni01AD ; G 367
U 430 ; WX 602 ; N uni01AE ; G 368
U 431 ; WX 602 ; N Uhorn ; G 369
U 432 ; WX 602 ; N uhorn ; G 370
U 433 ; WX 602 ; N uni01B1 ; G 371
U 434 ; WX 602 ; N uni01B2 ; G 372
U 435 ; WX 602 ; N uni01B3 ; G 373
U 436 ; WX 602 ; N uni01B4 ; G 374
U 437 ; WX 602 ; N uni01B5 ; G 375
U 438 ; WX 602 ; N uni01B6 ; G 376
U 439 ; WX 602 ; N uni01B7 ; G 377
U 440 ; WX 602 ; N uni01B8 ; G 378
U 441 ; WX 602 ; N uni01B9 ; G 379
U 442 ; WX 602 ; N uni01BA ; G 380
U 443 ; WX 602 ; N uni01BB ; G 381
U 444 ; WX 602 ; N uni01BC ; G 382
U 445 ; WX 602 ; N uni01BD ; G 383
U 446 ; WX 602 ; N uni01BE ; G 384
U 447 ; WX 602 ; N uni01BF ; G 385
U 448 ; WX 602 ; N uni01C0 ; G 386
U 449 ; WX 602 ; N uni01C1 ; G 387
U 450 ; WX 602 ; N uni01C2 ; G 388
U 451 ; WX 602 ; N uni01C3 ; G 389
U 461 ; WX 602 ; N uni01CD ; G 390
U 462 ; WX 602 ; N uni01CE ; G 391
U 463 ; WX 602 ; N uni01CF ; G 392
U 464 ; WX 602 ; N uni01D0 ; G 393
U 465 ; WX 602 ; N uni01D1 ; G 394
U 466 ; WX 602 ; N uni01D2 ; G 395
U 467 ; WX 602 ; N uni01D3 ; G 396
U 468 ; WX 602 ; N uni01D4 ; G 397
U 469 ; WX 602 ; N uni01D5 ; G 398
U 470 ; WX 602 ; N uni01D6 ; G 399
U 471 ; WX 602 ; N uni01D7 ; G 400
U 472 ; WX 602 ; N uni01D8 ; G 401
U 473 ; WX 602 ; N uni01D9 ; G 402
U 474 ; WX 602 ; N uni01DA ; G 403
U 475 ; WX 602 ; N uni01DB ; G 404
U 476 ; WX 602 ; N uni01DC ; G 405
U 477 ; WX 602 ; N uni01DD ; G 406
U 478 ; WX 602 ; N uni01DE ; G 407
U 479 ; WX 602 ; N uni01DF ; G 408
U 480 ; WX 602 ; N uni01E0 ; G 409
U 481 ; WX 602 ; N uni01E1 ; G 410
U 482 ; WX 602 ; N uni01E2 ; G 411
U 483 ; WX 602 ; N uni01E3 ; G 412
U 486 ; WX 602 ; N Gcaron ; G 413
U 487 ; WX 602 ; N gcaron ; G 414
U 488 ; WX 602 ; N uni01E8 ; G 415
U 489 ; WX 602 ; N uni01E9 ; G 416
U 490 ; WX 602 ; N uni01EA ; G 417
U 491 ; WX 602 ; N uni01EB ; G 418
U 492 ; WX 602 ; N uni01EC ; G 419
U 493 ; WX 602 ; N uni01ED ; G 420
U 494 ; WX 602 ; N uni01EE ; G 421
U 495 ; WX 602 ; N uni01EF ; G 422
U 496 ; WX 602 ; N uni01F0 ; G 423
U 500 ; WX 602 ; N uni01F4 ; G 424
U 501 ; WX 602 ; N uni01F5 ; G 425
U 502 ; WX 602 ; N uni01F6 ; G 426
U 504 ; WX 602 ; N uni01F8 ; G 427
U 505 ; WX 602 ; N uni01F9 ; G 428
U 508 ; WX 602 ; N AEacute ; G 429
U 509 ; WX 602 ; N aeacute ; G 430
U 510 ; WX 602 ; N Oslashacute ; G 431
U 511 ; WX 602 ; N oslashacute ; G 432
U 512 ; WX 602 ; N uni0200 ; G 433
U 513 ; WX 602 ; N uni0201 ; G 434
U 514 ; WX 602 ; N uni0202 ; G 435
U 515 ; WX 602 ; N uni0203 ; G 436
U 516 ; WX 602 ; N uni0204 ; G 437
U 517 ; WX 602 ; N uni0205 ; G 438
U 518 ; WX 602 ; N uni0206 ; G 439
U 519 ; WX 602 ; N uni0207 ; G 440
U 520 ; WX 602 ; N uni0208 ; G 441
U 521 ; WX 602 ; N uni0209 ; G 442
U 522 ; WX 602 ; N uni020A ; G 443
U 523 ; WX 602 ; N uni020B ; G 444
U 524 ; WX 602 ; N uni020C ; G 445
U 525 ; WX 602 ; N uni020D ; G 446
U 526 ; WX 602 ; N uni020E ; G 447
U 527 ; WX 602 ; N uni020F ; G 448
U 528 ; WX 602 ; N uni0210 ; G 449
U 529 ; WX 602 ; N uni0211 ; G 450
U 530 ; WX 602 ; N uni0212 ; G 451
U 531 ; WX 602 ; N uni0213 ; G 452
U 532 ; WX 602 ; N uni0214 ; G 453
U 533 ; WX 602 ; N uni0215 ; G 454
U 534 ; WX 602 ; N uni0216 ; G 455
U 535 ; WX 602 ; N uni0217 ; G 456
U 536 ; WX 602 ; N Scommaaccent ; G 457
U 537 ; WX 602 ; N scommaaccent ; G 458
U 538 ; WX 602 ; N uni021A ; G 459
U 539 ; WX 602 ; N uni021B ; G 460
U 540 ; WX 602 ; N uni021C ; G 461
U 541 ; WX 602 ; N uni021D ; G 462
U 542 ; WX 602 ; N uni021E ; G 463
U 543 ; WX 602 ; N uni021F ; G 464
U 544 ; WX 602 ; N uni0220 ; G 465
U 545 ; WX 602 ; N uni0221 ; G 466
U 548 ; WX 602 ; N uni0224 ; G 467
U 549 ; WX 602 ; N uni0225 ; G 468
U 550 ; WX 602 ; N uni0226 ; G 469
U 551 ; WX 602 ; N uni0227 ; G 470
U 552 ; WX 602 ; N uni0228 ; G 471
U 553 ; WX 602 ; N uni0229 ; G 472
U 554 ; WX 602 ; N uni022A ; G 473
U 555 ; WX 602 ; N uni022B ; G 474
U 556 ; WX 602 ; N uni022C ; G 475
U 557 ; WX 602 ; N uni022D ; G 476
U 558 ; WX 602 ; N uni022E ; G 477
U 559 ; WX 602 ; N uni022F ; G 478
U 560 ; WX 602 ; N uni0230 ; G 479
U 561 ; WX 602 ; N uni0231 ; G 480
U 562 ; WX 602 ; N uni0232 ; G 481
U 563 ; WX 602 ; N uni0233 ; G 482
U 564 ; WX 602 ; N uni0234 ; G 483
U 565 ; WX 602 ; N uni0235 ; G 484
U 566 ; WX 602 ; N uni0236 ; G 485
U 567 ; WX 602 ; N dotlessj ; G 486
U 568 ; WX 602 ; N uni0238 ; G 487
U 569 ; WX 602 ; N uni0239 ; G 488
U 570 ; WX 602 ; N uni023A ; G 489
U 571 ; WX 602 ; N uni023B ; G 490
U 572 ; WX 602 ; N uni023C ; G 491
U 573 ; WX 602 ; N uni023D ; G 492
U 574 ; WX 602 ; N uni023E ; G 493
U 575 ; WX 602 ; N uni023F ; G 494
U 576 ; WX 602 ; N uni0240 ; G 495
U 577 ; WX 602 ; N uni0241 ; G 496
U 579 ; WX 602 ; N uni0243 ; G 497
U 580 ; WX 602 ; N uni0244 ; G 498
U 581 ; WX 602 ; N uni0245 ; G 499
U 588 ; WX 602 ; N uni024C ; G 500
U 589 ; WX 602 ; N uni024D ; G 501
U 592 ; WX 602 ; N uni0250 ; G 502
U 593 ; WX 602 ; N uni0251 ; G 503
U 594 ; WX 602 ; N uni0252 ; G 504
U 595 ; WX 602 ; N uni0253 ; G 505
U 596 ; WX 602 ; N uni0254 ; G 506
U 597 ; WX 602 ; N uni0255 ; G 507
U 598 ; WX 602 ; N uni0256 ; G 508
U 599 ; WX 602 ; N uni0257 ; G 509
U 600 ; WX 602 ; N uni0258 ; G 510
U 601 ; WX 602 ; N uni0259 ; G 511
U 602 ; WX 602 ; N uni025A ; G 512
U 603 ; WX 602 ; N uni025B ; G 513
U 604 ; WX 602 ; N uni025C ; G 514
U 605 ; WX 602 ; N uni025D ; G 515
U 606 ; WX 602 ; N uni025E ; G 516
U 607 ; WX 602 ; N uni025F ; G 517
U 608 ; WX 602 ; N uni0260 ; G 518
U 609 ; WX 602 ; N uni0261 ; G 519
U 610 ; WX 602 ; N uni0262 ; G 520
U 611 ; WX 602 ; N uni0263 ; G 521
U 612 ; WX 602 ; N uni0264 ; G 522
U 613 ; WX 602 ; N uni0265 ; G 523
U 614 ; WX 602 ; N uni0266 ; G 524
U 615 ; WX 602 ; N uni0267 ; G 525
U 616 ; WX 602 ; N uni0268 ; G 526
U 617 ; WX 602 ; N uni0269 ; G 527
U 618 ; WX 602 ; N uni026A ; G 528
U 619 ; WX 602 ; N uni026B ; G 529
U 620 ; WX 602 ; N uni026C ; G 530
U 621 ; WX 602 ; N uni026D ; G 531
U 622 ; WX 602 ; N uni026E ; G 532
U 623 ; WX 602 ; N uni026F ; G 533
U 624 ; WX 602 ; N uni0270 ; G 534
U 625 ; WX 602 ; N uni0271 ; G 535
U 626 ; WX 602 ; N uni0272 ; G 536
U 627 ; WX 602 ; N uni0273 ; G 537
U 628 ; WX 602 ; N uni0274 ; G 538
U 629 ; WX 602 ; N uni0275 ; G 539
U 630 ; WX 602 ; N uni0276 ; G 540
U 631 ; WX 602 ; N uni0277 ; G 541
U 632 ; WX 602 ; N uni0278 ; G 542
U 633 ; WX 602 ; N uni0279 ; G 543
U 634 ; WX 602 ; N uni027A ; G 544
U 635 ; WX 602 ; N uni027B ; G 545
U 636 ; WX 602 ; N uni027C ; G 546
U 637 ; WX 602 ; N uni027D ; G 547
U 638 ; WX 602 ; N uni027E ; G 548
U 639 ; WX 602 ; N uni027F ; G 549
U 640 ; WX 602 ; N uni0280 ; G 550
U 641 ; WX 602 ; N uni0281 ; G 551
U 642 ; WX 602 ; N uni0282 ; G 552
U 643 ; WX 602 ; N uni0283 ; G 553
U 644 ; WX 602 ; N uni0284 ; G 554
U 645 ; WX 602 ; N uni0285 ; G 555
U 646 ; WX 602 ; N uni0286 ; G 556
U 647 ; WX 602 ; N uni0287 ; G 557
U 648 ; WX 602 ; N uni0288 ; G 558
U 649 ; WX 602 ; N uni0289 ; G 559
U 650 ; WX 602 ; N uni028A ; G 560
U 651 ; WX 602 ; N uni028B ; G 561
U 652 ; WX 602 ; N uni028C ; G 562
U 653 ; WX 602 ; N uni028D ; G 563
U 654 ; WX 602 ; N uni028E ; G 564
U 655 ; WX 602 ; N uni028F ; G 565
U 656 ; WX 602 ; N uni0290 ; G 566
U 657 ; WX 602 ; N uni0291 ; G 567
U 658 ; WX 602 ; N uni0292 ; G 568
U 659 ; WX 602 ; N uni0293 ; G 569
U 660 ; WX 602 ; N uni0294 ; G 570
U 661 ; WX 602 ; N uni0295 ; G 571
U 662 ; WX 602 ; N uni0296 ; G 572
U 663 ; WX 602 ; N uni0297 ; G 573
U 664 ; WX 602 ; N uni0298 ; G 574
U 665 ; WX 602 ; N uni0299 ; G 575
U 666 ; WX 602 ; N uni029A ; G 576
U 667 ; WX 602 ; N uni029B ; G 577
U 668 ; WX 602 ; N uni029C ; G 578
U 669 ; WX 602 ; N uni029D ; G 579
U 670 ; WX 602 ; N uni029E ; G 580
U 671 ; WX 602 ; N uni029F ; G 581
U 672 ; WX 602 ; N uni02A0 ; G 582
U 673 ; WX 602 ; N uni02A1 ; G 583
U 674 ; WX 602 ; N uni02A2 ; G 584
U 675 ; WX 602 ; N uni02A3 ; G 585
U 676 ; WX 602 ; N uni02A4 ; G 586
U 677 ; WX 602 ; N uni02A5 ; G 587
U 678 ; WX 602 ; N uni02A6 ; G 588
U 679 ; WX 602 ; N uni02A7 ; G 589
U 680 ; WX 602 ; N uni02A8 ; G 590
U 681 ; WX 602 ; N uni02A9 ; G 591
U 682 ; WX 602 ; N uni02AA ; G 592
U 683 ; WX 602 ; N uni02AB ; G 593
U 684 ; WX 602 ; N uni02AC ; G 594
U 685 ; WX 602 ; N uni02AD ; G 595
U 686 ; WX 602 ; N uni02AE ; G 596
U 687 ; WX 602 ; N uni02AF ; G 597
U 688 ; WX 602 ; N uni02B0 ; G 598
U 689 ; WX 602 ; N uni02B1 ; G 599
U 690 ; WX 602 ; N uni02B2 ; G 600
U 691 ; WX 602 ; N uni02B3 ; G 601
U 692 ; WX 602 ; N uni02B4 ; G 602
U 693 ; WX 602 ; N uni02B5 ; G 603
U 694 ; WX 602 ; N uni02B6 ; G 604
U 695 ; WX 602 ; N uni02B7 ; G 605
U 696 ; WX 602 ; N uni02B8 ; G 606
U 697 ; WX 602 ; N uni02B9 ; G 607
U 699 ; WX 602 ; N uni02BB ; G 608
U 700 ; WX 602 ; N uni02BC ; G 609
U 701 ; WX 602 ; N uni02BD ; G 610
U 702 ; WX 602 ; N uni02BE ; G 611
U 703 ; WX 602 ; N uni02BF ; G 612
U 704 ; WX 602 ; N uni02C0 ; G 613
U 705 ; WX 602 ; N uni02C1 ; G 614
U 710 ; WX 602 ; N circumflex ; G 615
U 711 ; WX 602 ; N caron ; G 616
U 712 ; WX 602 ; N uni02C8 ; G 617
U 713 ; WX 602 ; N uni02C9 ; G 618
U 716 ; WX 602 ; N uni02CC ; G 619
U 717 ; WX 602 ; N uni02CD ; G 620
U 718 ; WX 602 ; N uni02CE ; G 621
U 719 ; WX 602 ; N uni02CF ; G 622
U 720 ; WX 602 ; N uni02D0 ; G 623
U 721 ; WX 602 ; N uni02D1 ; G 624
U 722 ; WX 602 ; N uni02D2 ; G 625
U 723 ; WX 602 ; N uni02D3 ; G 626
U 726 ; WX 602 ; N uni02D6 ; G 627
U 727 ; WX 602 ; N uni02D7 ; G 628
U 728 ; WX 602 ; N breve ; G 629
U 729 ; WX 602 ; N dotaccent ; G 630
U 730 ; WX 602 ; N ring ; G 631
U 731 ; WX 602 ; N ogonek ; G 632
U 732 ; WX 602 ; N tilde ; G 633
U 733 ; WX 602 ; N hungarumlaut ; G 634
U 734 ; WX 602 ; N uni02DE ; G 635
U 736 ; WX 602 ; N uni02E0 ; G 636
U 737 ; WX 602 ; N uni02E1 ; G 637
U 738 ; WX 602 ; N uni02E2 ; G 638
U 739 ; WX 602 ; N uni02E3 ; G 639
U 740 ; WX 602 ; N uni02E4 ; G 640
U 741 ; WX 602 ; N uni02E5 ; G 641
U 742 ; WX 602 ; N uni02E6 ; G 642
U 743 ; WX 602 ; N uni02E7 ; G 643
U 744 ; WX 602 ; N uni02E8 ; G 644
U 745 ; WX 602 ; N uni02E9 ; G 645
U 750 ; WX 602 ; N uni02EE ; G 646
U 755 ; WX 602 ; N uni02F3 ; G 647
U 768 ; WX 602 ; N gravecomb ; G 648
U 769 ; WX 602 ; N acutecomb ; G 649
U 770 ; WX 602 ; N uni0302 ; G 650
U 771 ; WX 602 ; N tildecomb ; G 651
U 772 ; WX 602 ; N uni0304 ; G 652
U 773 ; WX 602 ; N uni0305 ; G 653
U 774 ; WX 602 ; N uni0306 ; G 654
U 775 ; WX 602 ; N uni0307 ; G 655
U 776 ; WX 602 ; N uni0308 ; G 656
U 777 ; WX 602 ; N hookabovecomb ; G 657
U 778 ; WX 602 ; N uni030A ; G 658
U 779 ; WX 602 ; N uni030B ; G 659
U 780 ; WX 602 ; N uni030C ; G 660
U 781 ; WX 602 ; N uni030D ; G 661
U 782 ; WX 602 ; N uni030E ; G 662
U 783 ; WX 602 ; N uni030F ; G 663
U 784 ; WX 602 ; N uni0310 ; G 664
U 785 ; WX 602 ; N uni0311 ; G 665
U 786 ; WX 602 ; N uni0312 ; G 666
U 787 ; WX 602 ; N uni0313 ; G 667
U 788 ; WX 602 ; N uni0314 ; G 668
U 789 ; WX 602 ; N uni0315 ; G 669
U 790 ; WX 602 ; N uni0316 ; G 670
U 791 ; WX 602 ; N uni0317 ; G 671
U 792 ; WX 602 ; N uni0318 ; G 672
U 793 ; WX 602 ; N uni0319 ; G 673
U 794 ; WX 602 ; N uni031A ; G 674
U 795 ; WX 602 ; N uni031B ; G 675
U 796 ; WX 602 ; N uni031C ; G 676
U 797 ; WX 602 ; N uni031D ; G 677
U 798 ; WX 602 ; N uni031E ; G 678
U 799 ; WX 602 ; N uni031F ; G 679
U 800 ; WX 602 ; N uni0320 ; G 680
U 801 ; WX 602 ; N uni0321 ; G 681
U 802 ; WX 602 ; N uni0322 ; G 682
U 803 ; WX 602 ; N dotbelowcomb ; G 683
U 804 ; WX 602 ; N uni0324 ; G 684
U 805 ; WX 602 ; N uni0325 ; G 685
U 806 ; WX 602 ; N uni0326 ; G 686
U 807 ; WX 602 ; N uni0327 ; G 687
U 808 ; WX 602 ; N uni0328 ; G 688
U 809 ; WX 602 ; N uni0329 ; G 689
U 810 ; WX 602 ; N uni032A ; G 690
U 811 ; WX 602 ; N uni032B ; G 691
U 812 ; WX 602 ; N uni032C ; G 692
U 813 ; WX 602 ; N uni032D ; G 693
U 814 ; WX 602 ; N uni032E ; G 694
U 815 ; WX 602 ; N uni032F ; G 695
U 816 ; WX 602 ; N uni0330 ; G 696
U 817 ; WX 602 ; N uni0331 ; G 697
U 818 ; WX 602 ; N uni0332 ; G 698
U 819 ; WX 602 ; N uni0333 ; G 699
U 820 ; WX 602 ; N uni0334 ; G 700
U 821 ; WX 602 ; N uni0335 ; G 701
U 822 ; WX 602 ; N uni0336 ; G 702
U 823 ; WX 602 ; N uni0337 ; G 703
U 824 ; WX 602 ; N uni0338 ; G 704
U 825 ; WX 602 ; N uni0339 ; G 705
U 826 ; WX 602 ; N uni033A ; G 706
U 827 ; WX 602 ; N uni033B ; G 707
U 828 ; WX 602 ; N uni033C ; G 708
U 829 ; WX 602 ; N uni033D ; G 709
U 830 ; WX 602 ; N uni033E ; G 710
U 831 ; WX 602 ; N uni033F ; G 711
U 835 ; WX 602 ; N uni0343 ; G 712
U 856 ; WX 602 ; N uni0358 ; G 713
U 865 ; WX 602 ; N uni0361 ; G 714
U 884 ; WX 602 ; N uni0374 ; G 715
U 885 ; WX 602 ; N uni0375 ; G 716
U 886 ; WX 602 ; N uni0376 ; G 717
U 887 ; WX 602 ; N uni0377 ; G 718
U 890 ; WX 602 ; N uni037A ; G 719
U 891 ; WX 602 ; N uni037B ; G 720
U 892 ; WX 602 ; N uni037C ; G 721
U 893 ; WX 602 ; N uni037D ; G 722
U 894 ; WX 602 ; N uni037E ; G 723
U 895 ; WX 602 ; N uni037F ; G 724
U 900 ; WX 602 ; N tonos ; G 725
U 901 ; WX 602 ; N dieresistonos ; G 726
U 902 ; WX 602 ; N Alphatonos ; G 727
U 903 ; WX 602 ; N anoteleia ; G 728
U 904 ; WX 602 ; N Epsilontonos ; G 729
U 905 ; WX 602 ; N Etatonos ; G 730
U 906 ; WX 602 ; N Iotatonos ; G 731
U 908 ; WX 602 ; N Omicrontonos ; G 732
U 910 ; WX 602 ; N Upsilontonos ; G 733
U 911 ; WX 602 ; N Omegatonos ; G 734
U 912 ; WX 602 ; N iotadieresistonos ; G 735
U 913 ; WX 602 ; N Alpha ; G 736
U 914 ; WX 602 ; N Beta ; G 737
U 915 ; WX 602 ; N Gamma ; G 738
U 916 ; WX 602 ; N uni0394 ; G 739
U 917 ; WX 602 ; N Epsilon ; G 740
U 918 ; WX 602 ; N Zeta ; G 741
U 919 ; WX 602 ; N Eta ; G 742
U 920 ; WX 602 ; N Theta ; G 743
U 921 ; WX 602 ; N Iota ; G 744
U 922 ; WX 602 ; N Kappa ; G 745
U 923 ; WX 602 ; N Lambda ; G 746
U 924 ; WX 602 ; N Mu ; G 747
U 925 ; WX 602 ; N Nu ; G 748
U 926 ; WX 602 ; N Xi ; G 749
U 927 ; WX 602 ; N Omicron ; G 750
U 928 ; WX 602 ; N Pi ; G 751
U 929 ; WX 602 ; N Rho ; G 752
U 931 ; WX 602 ; N Sigma ; G 753
U 932 ; WX 602 ; N Tau ; G 754
U 933 ; WX 602 ; N Upsilon ; G 755
U 934 ; WX 602 ; N Phi ; G 756
U 935 ; WX 602 ; N Chi ; G 757
U 936 ; WX 602 ; N Psi ; G 758
U 937 ; WX 602 ; N Omega ; G 759
U 938 ; WX 602 ; N Iotadieresis ; G 760
U 939 ; WX 602 ; N Upsilondieresis ; G 761
U 940 ; WX 602 ; N alphatonos ; G 762
U 941 ; WX 602 ; N epsilontonos ; G 763
U 942 ; WX 602 ; N etatonos ; G 764
U 943 ; WX 602 ; N iotatonos ; G 765
U 944 ; WX 602 ; N upsilondieresistonos ; G 766
U 945 ; WX 602 ; N alpha ; G 767
U 946 ; WX 602 ; N beta ; G 768
U 947 ; WX 602 ; N gamma ; G 769
U 948 ; WX 602 ; N delta ; G 770
U 949 ; WX 602 ; N epsilon ; G 771
U 950 ; WX 602 ; N zeta ; G 772
U 951 ; WX 602 ; N eta ; G 773
U 952 ; WX 602 ; N theta ; G 774
U 953 ; WX 602 ; N iota ; G 775
U 954 ; WX 602 ; N kappa ; G 776
U 955 ; WX 602 ; N lambda ; G 777
U 956 ; WX 602 ; N uni03BC ; G 778
U 957 ; WX 602 ; N nu ; G 779
U 958 ; WX 602 ; N xi ; G 780
U 959 ; WX 602 ; N omicron ; G 781
U 960 ; WX 602 ; N pi ; G 782
U 961 ; WX 602 ; N rho ; G 783
U 962 ; WX 602 ; N sigma1 ; G 784
U 963 ; WX 602 ; N sigma ; G 785
U 964 ; WX 602 ; N tau ; G 786
U 965 ; WX 602 ; N upsilon ; G 787
U 966 ; WX 602 ; N phi ; G 788
U 967 ; WX 602 ; N chi ; G 789
U 968 ; WX 602 ; N psi ; G 790
U 969 ; WX 602 ; N omega ; G 791
U 970 ; WX 602 ; N iotadieresis ; G 792
U 971 ; WX 602 ; N upsilondieresis ; G 793
U 972 ; WX 602 ; N omicrontonos ; G 794
U 973 ; WX 602 ; N upsilontonos ; G 795
U 974 ; WX 602 ; N omegatonos ; G 796
U 976 ; WX 602 ; N uni03D0 ; G 797
U 977 ; WX 602 ; N theta1 ; G 798
U 978 ; WX 602 ; N Upsilon1 ; G 799
U 979 ; WX 602 ; N uni03D3 ; G 800
U 980 ; WX 602 ; N uni03D4 ; G 801
U 981 ; WX 602 ; N phi1 ; G 802
U 982 ; WX 602 ; N omega1 ; G 803
U 983 ; WX 602 ; N uni03D7 ; G 804
U 984 ; WX 602 ; N uni03D8 ; G 805
U 985 ; WX 602 ; N uni03D9 ; G 806
U 986 ; WX 602 ; N uni03DA ; G 807
U 987 ; WX 602 ; N uni03DB ; G 808
U 988 ; WX 602 ; N uni03DC ; G 809
U 989 ; WX 602 ; N uni03DD ; G 810
U 990 ; WX 602 ; N uni03DE ; G 811
U 991 ; WX 602 ; N uni03DF ; G 812
U 992 ; WX 602 ; N uni03E0 ; G 813
U 993 ; WX 602 ; N uni03E1 ; G 814
U 1008 ; WX 602 ; N uni03F0 ; G 815
U 1009 ; WX 602 ; N uni03F1 ; G 816
U 1010 ; WX 602 ; N uni03F2 ; G 817
U 1011 ; WX 602 ; N uni03F3 ; G 818
U 1012 ; WX 602 ; N uni03F4 ; G 819
U 1013 ; WX 602 ; N uni03F5 ; G 820
U 1014 ; WX 602 ; N uni03F6 ; G 821
U 1015 ; WX 602 ; N uni03F7 ; G 822
U 1016 ; WX 602 ; N uni03F8 ; G 823
U 1017 ; WX 602 ; N uni03F9 ; G 824
U 1018 ; WX 602 ; N uni03FA ; G 825
U 1019 ; WX 602 ; N uni03FB ; G 826
U 1020 ; WX 602 ; N uni03FC ; G 827
U 1021 ; WX 602 ; N uni03FD ; G 828
U 1022 ; WX 602 ; N uni03FE ; G 829
U 1023 ; WX 602 ; N uni03FF ; G 830
U 1024 ; WX 602 ; N uni0400 ; G 831
U 1025 ; WX 602 ; N uni0401 ; G 832
U 1026 ; WX 602 ; N uni0402 ; G 833
U 1027 ; WX 602 ; N uni0403 ; G 834
U 1028 ; WX 602 ; N uni0404 ; G 835
U 1029 ; WX 602 ; N uni0405 ; G 836
U 1030 ; WX 602 ; N uni0406 ; G 837
U 1031 ; WX 602 ; N uni0407 ; G 838
U 1032 ; WX 602 ; N uni0408 ; G 839
U 1033 ; WX 602 ; N uni0409 ; G 840
U 1034 ; WX 602 ; N uni040A ; G 841
U 1035 ; WX 602 ; N uni040B ; G 842
U 1036 ; WX 602 ; N uni040C ; G 843
U 1037 ; WX 602 ; N uni040D ; G 844
U 1038 ; WX 602 ; N uni040E ; G 845
U 1039 ; WX 602 ; N uni040F ; G 846
U 1040 ; WX 602 ; N uni0410 ; G 847
U 1041 ; WX 602 ; N uni0411 ; G 848
U 1042 ; WX 602 ; N uni0412 ; G 849
U 1043 ; WX 602 ; N uni0413 ; G 850
U 1044 ; WX 602 ; N uni0414 ; G 851
U 1045 ; WX 602 ; N uni0415 ; G 852
U 1046 ; WX 602 ; N uni0416 ; G 853
U 1047 ; WX 602 ; N uni0417 ; G 854
U 1048 ; WX 602 ; N uni0418 ; G 855
U 1049 ; WX 602 ; N uni0419 ; G 856
U 1050 ; WX 602 ; N uni041A ; G 857
U 1051 ; WX 602 ; N uni041B ; G 858
U 1052 ; WX 602 ; N uni041C ; G 859
U 1053 ; WX 602 ; N uni041D ; G 860
U 1054 ; WX 602 ; N uni041E ; G 861
U 1055 ; WX 602 ; N uni041F ; G 862
U 1056 ; WX 602 ; N uni0420 ; G 863
U 1057 ; WX 602 ; N uni0421 ; G 864
U 1058 ; WX 602 ; N uni0422 ; G 865
U 1059 ; WX 602 ; N uni0423 ; G 866
U 1060 ; WX 602 ; N uni0424 ; G 867
U 1061 ; WX 602 ; N uni0425 ; G 868
U 1062 ; WX 602 ; N uni0426 ; G 869
U 1063 ; WX 602 ; N uni0427 ; G 870
U 1064 ; WX 602 ; N uni0428 ; G 871
U 1065 ; WX 602 ; N uni0429 ; G 872
U 1066 ; WX 602 ; N uni042A ; G 873
U 1067 ; WX 602 ; N uni042B ; G 874
U 1068 ; WX 602 ; N uni042C ; G 875
U 1069 ; WX 602 ; N uni042D ; G 876
U 1070 ; WX 602 ; N uni042E ; G 877
U 1071 ; WX 602 ; N uni042F ; G 878
U 1072 ; WX 602 ; N uni0430 ; G 879
U 1073 ; WX 602 ; N uni0431 ; G 880
U 1074 ; WX 602 ; N uni0432 ; G 881
U 1075 ; WX 602 ; N uni0433 ; G 882
U 1076 ; WX 602 ; N uni0434 ; G 883
U 1077 ; WX 602 ; N uni0435 ; G 884
U 1078 ; WX 602 ; N uni0436 ; G 885
U 1079 ; WX 602 ; N uni0437 ; G 886
U 1080 ; WX 602 ; N uni0438 ; G 887
U 1081 ; WX 602 ; N uni0439 ; G 888
U 1082 ; WX 602 ; N uni043A ; G 889
U 1083 ; WX 602 ; N uni043B ; G 890
U 1084 ; WX 602 ; N uni043C ; G 891
U 1085 ; WX 602 ; N uni043D ; G 892
U 1086 ; WX 602 ; N uni043E ; G 893
U 1087 ; WX 602 ; N uni043F ; G 894
U 1088 ; WX 602 ; N uni0440 ; G 895
U 1089 ; WX 602 ; N uni0441 ; G 896
U 1090 ; WX 602 ; N uni0442 ; G 897
U 1091 ; WX 602 ; N uni0443 ; G 898
U 1092 ; WX 602 ; N uni0444 ; G 899
U 1093 ; WX 602 ; N uni0445 ; G 900
U 1094 ; WX 602 ; N uni0446 ; G 901
U 1095 ; WX 602 ; N uni0447 ; G 902
U 1096 ; WX 602 ; N uni0448 ; G 903
U 1097 ; WX 602 ; N uni0449 ; G 904
U 1098 ; WX 602 ; N uni044A ; G 905
U 1099 ; WX 602 ; N uni044B ; G 906
U 1100 ; WX 602 ; N uni044C ; G 907
U 1101 ; WX 602 ; N uni044D ; G 908
U 1102 ; WX 602 ; N uni044E ; G 909
U 1103 ; WX 602 ; N uni044F ; G 910
U 1104 ; WX 602 ; N uni0450 ; G 911
U 1105 ; WX 602 ; N uni0451 ; G 912
U 1106 ; WX 602 ; N uni0452 ; G 913
U 1107 ; WX 602 ; N uni0453 ; G 914
U 1108 ; WX 602 ; N uni0454 ; G 915
U 1109 ; WX 602 ; N uni0455 ; G 916
U 1110 ; WX 602 ; N uni0456 ; G 917
U 1111 ; WX 602 ; N uni0457 ; G 918
U 1112 ; WX 602 ; N uni0458 ; G 919
U 1113 ; WX 602 ; N uni0459 ; G 920
U 1114 ; WX 602 ; N uni045A ; G 921
U 1115 ; WX 602 ; N uni045B ; G 922
U 1116 ; WX 602 ; N uni045C ; G 923
U 1117 ; WX 602 ; N uni045D ; G 924
U 1118 ; WX 602 ; N uni045E ; G 925
U 1119 ; WX 602 ; N uni045F ; G 926
U 1122 ; WX 602 ; N uni0462 ; G 927
U 1123 ; WX 602 ; N uni0463 ; G 928
U 1138 ; WX 602 ; N uni0472 ; G 929
U 1139 ; WX 602 ; N uni0473 ; G 930
U 1168 ; WX 602 ; N uni0490 ; G 931
U 1169 ; WX 602 ; N uni0491 ; G 932
U 1170 ; WX 602 ; N uni0492 ; G 933
U 1171 ; WX 602 ; N uni0493 ; G 934
U 1172 ; WX 602 ; N uni0494 ; G 935
U 1173 ; WX 602 ; N uni0495 ; G 936
U 1174 ; WX 602 ; N uni0496 ; G 937
U 1175 ; WX 602 ; N uni0497 ; G 938
U 1176 ; WX 602 ; N uni0498 ; G 939
U 1177 ; WX 602 ; N uni0499 ; G 940
U 1178 ; WX 602 ; N uni049A ; G 941
U 1179 ; WX 602 ; N uni049B ; G 942
U 1186 ; WX 602 ; N uni04A2 ; G 943
U 1187 ; WX 602 ; N uni04A3 ; G 944
U 1188 ; WX 602 ; N uni04A4 ; G 945
U 1189 ; WX 602 ; N uni04A5 ; G 946
U 1194 ; WX 602 ; N uni04AA ; G 947
U 1195 ; WX 602 ; N uni04AB ; G 948
U 1196 ; WX 602 ; N uni04AC ; G 949
U 1197 ; WX 602 ; N uni04AD ; G 950
U 1198 ; WX 602 ; N uni04AE ; G 951
U 1199 ; WX 602 ; N uni04AF ; G 952
U 1200 ; WX 602 ; N uni04B0 ; G 953
U 1201 ; WX 602 ; N uni04B1 ; G 954
U 1202 ; WX 602 ; N uni04B2 ; G 955
U 1203 ; WX 602 ; N uni04B3 ; G 956
U 1210 ; WX 602 ; N uni04BA ; G 957
U 1211 ; WX 602 ; N uni04BB ; G 958
U 1216 ; WX 602 ; N uni04C0 ; G 959
U 1217 ; WX 602 ; N uni04C1 ; G 960
U 1218 ; WX 602 ; N uni04C2 ; G 961
U 1219 ; WX 602 ; N uni04C3 ; G 962
U 1220 ; WX 602 ; N uni04C4 ; G 963
U 1223 ; WX 602 ; N uni04C7 ; G 964
U 1224 ; WX 602 ; N uni04C8 ; G 965
U 1227 ; WX 602 ; N uni04CB ; G 966
U 1228 ; WX 602 ; N uni04CC ; G 967
U 1231 ; WX 602 ; N uni04CF ; G 968
U 1232 ; WX 602 ; N uni04D0 ; G 969
U 1233 ; WX 602 ; N uni04D1 ; G 970
U 1234 ; WX 602 ; N uni04D2 ; G 971
U 1235 ; WX 602 ; N uni04D3 ; G 972
U 1236 ; WX 602 ; N uni04D4 ; G 973
U 1237 ; WX 602 ; N uni04D5 ; G 974
U 1238 ; WX 602 ; N uni04D6 ; G 975
U 1239 ; WX 602 ; N uni04D7 ; G 976
U 1240 ; WX 602 ; N uni04D8 ; G 977
U 1241 ; WX 602 ; N uni04D9 ; G 978
U 1242 ; WX 602 ; N uni04DA ; G 979
U 1243 ; WX 602 ; N uni04DB ; G 980
U 1244 ; WX 602 ; N uni04DC ; G 981
U 1245 ; WX 602 ; N uni04DD ; G 982
U 1246 ; WX 602 ; N uni04DE ; G 983
U 1247 ; WX 602 ; N uni04DF ; G 984
U 1248 ; WX 602 ; N uni04E0 ; G 985
U 1249 ; WX 602 ; N uni04E1 ; G 986
U 1250 ; WX 602 ; N uni04E2 ; G 987
U 1251 ; WX 602 ; N uni04E3 ; G 988
U 1252 ; WX 602 ; N uni04E4 ; G 989
U 1253 ; WX 602 ; N uni04E5 ; G 990
U 1254 ; WX 602 ; N uni04E6 ; G 991
U 1255 ; WX 602 ; N uni04E7 ; G 992
U 1256 ; WX 602 ; N uni04E8 ; G 993
U 1257 ; WX 602 ; N uni04E9 ; G 994
U 1258 ; WX 602 ; N uni04EA ; G 995
U 1259 ; WX 602 ; N uni04EB ; G 996
U 1260 ; WX 602 ; N uni04EC ; G 997
U 1261 ; WX 602 ; N uni04ED ; G 998
U 1262 ; WX 602 ; N uni04EE ; G 999
U 1263 ; WX 602 ; N uni04EF ; G 1000
U 1264 ; WX 602 ; N uni04F0 ; G 1001
U 1265 ; WX 602 ; N uni04F1 ; G 1002
U 1266 ; WX 602 ; N uni04F2 ; G 1003
U 1267 ; WX 602 ; N uni04F3 ; G 1004
U 1268 ; WX 602 ; N uni04F4 ; G 1005
U 1269 ; WX 602 ; N uni04F5 ; G 1006
U 1270 ; WX 602 ; N uni04F6 ; G 1007
U 1271 ; WX 602 ; N uni04F7 ; G 1008
U 1272 ; WX 602 ; N uni04F8 ; G 1009
U 1273 ; WX 602 ; N uni04F9 ; G 1010
U 1296 ; WX 602 ; N uni0510 ; G 1011
U 1297 ; WX 602 ; N uni0511 ; G 1012
U 1306 ; WX 602 ; N uni051A ; G 1013
U 1307 ; WX 602 ; N uni051B ; G 1014
U 1308 ; WX 602 ; N uni051C ; G 1015
U 1309 ; WX 602 ; N uni051D ; G 1016
U 1329 ; WX 602 ; N uni0531 ; G 1017
U 1330 ; WX 602 ; N uni0532 ; G 1018
U 1331 ; WX 602 ; N uni0533 ; G 1019
U 1332 ; WX 602 ; N uni0534 ; G 1020
U 1333 ; WX 602 ; N uni0535 ; G 1021
U 1334 ; WX 602 ; N uni0536 ; G 1022
U 1335 ; WX 602 ; N uni0537 ; G 1023
U 1336 ; WX 602 ; N uni0538 ; G 1024
U 1337 ; WX 602 ; N uni0539 ; G 1025
U 1338 ; WX 602 ; N uni053A ; G 1026
U 1339 ; WX 602 ; N uni053B ; G 1027
U 1340 ; WX 602 ; N uni053C ; G 1028
U 1341 ; WX 602 ; N uni053D ; G 1029
U 1342 ; WX 602 ; N uni053E ; G 1030
U 1343 ; WX 602 ; N uni053F ; G 1031
U 1344 ; WX 602 ; N uni0540 ; G 1032
U 1345 ; WX 602 ; N uni0541 ; G 1033
U 1346 ; WX 602 ; N uni0542 ; G 1034
U 1347 ; WX 602 ; N uni0543 ; G 1035
U 1348 ; WX 602 ; N uni0544 ; G 1036
U 1349 ; WX 602 ; N uni0545 ; G 1037
U 1350 ; WX 602 ; N uni0546 ; G 1038
U 1351 ; WX 602 ; N uni0547 ; G 1039
U 1352 ; WX 602 ; N uni0548 ; G 1040
U 1353 ; WX 602 ; N uni0549 ; G 1041
U 1354 ; WX 602 ; N uni054A ; G 1042
U 1355 ; WX 602 ; N uni054B ; G 1043
U 1356 ; WX 602 ; N uni054C ; G 1044
U 1357 ; WX 602 ; N uni054D ; G 1045
U 1358 ; WX 602 ; N uni054E ; G 1046
U 1359 ; WX 602 ; N uni054F ; G 1047
U 1360 ; WX 602 ; N uni0550 ; G 1048
U 1361 ; WX 602 ; N uni0551 ; G 1049
U 1362 ; WX 602 ; N uni0552 ; G 1050
U 1363 ; WX 602 ; N uni0553 ; G 1051
U 1364 ; WX 602 ; N uni0554 ; G 1052
U 1365 ; WX 602 ; N uni0555 ; G 1053
U 1366 ; WX 602 ; N uni0556 ; G 1054
U 1369 ; WX 602 ; N uni0559 ; G 1055
U 1370 ; WX 602 ; N uni055A ; G 1056
U 1371 ; WX 602 ; N uni055B ; G 1057
U 1372 ; WX 602 ; N uni055C ; G 1058
U 1373 ; WX 602 ; N uni055D ; G 1059
U 1374 ; WX 602 ; N uni055E ; G 1060
U 1375 ; WX 602 ; N uni055F ; G 1061
U 1377 ; WX 602 ; N uni0561 ; G 1062
U 1378 ; WX 602 ; N uni0562 ; G 1063
U 1379 ; WX 602 ; N uni0563 ; G 1064
U 1380 ; WX 602 ; N uni0564 ; G 1065
U 1381 ; WX 602 ; N uni0565 ; G 1066
U 1382 ; WX 602 ; N uni0566 ; G 1067
U 1383 ; WX 602 ; N uni0567 ; G 1068
U 1384 ; WX 602 ; N uni0568 ; G 1069
U 1385 ; WX 602 ; N uni0569 ; G 1070
U 1386 ; WX 602 ; N uni056A ; G 1071
U 1387 ; WX 602 ; N uni056B ; G 1072
U 1388 ; WX 602 ; N uni056C ; G 1073
U 1389 ; WX 602 ; N uni056D ; G 1074
U 1390 ; WX 602 ; N uni056E ; G 1075
U 1391 ; WX 602 ; N uni056F ; G 1076
U 1392 ; WX 602 ; N uni0570 ; G 1077
U 1393 ; WX 602 ; N uni0571 ; G 1078
U 1394 ; WX 602 ; N uni0572 ; G 1079
U 1395 ; WX 602 ; N uni0573 ; G 1080
U 1396 ; WX 602 ; N uni0574 ; G 1081
U 1397 ; WX 602 ; N uni0575 ; G 1082
U 1398 ; WX 602 ; N uni0576 ; G 1083
U 1399 ; WX 602 ; N uni0577 ; G 1084
U 1400 ; WX 602 ; N uni0578 ; G 1085
U 1401 ; WX 602 ; N uni0579 ; G 1086
U 1402 ; WX 602 ; N uni057A ; G 1087
U 1403 ; WX 602 ; N uni057B ; G 1088
U 1404 ; WX 602 ; N uni057C ; G 1089
U 1405 ; WX 602 ; N uni057D ; G 1090
U 1406 ; WX 602 ; N uni057E ; G 1091
U 1407 ; WX 602 ; N uni057F ; G 1092
U 1408 ; WX 602 ; N uni0580 ; G 1093
U 1409 ; WX 602 ; N uni0581 ; G 1094
U 1410 ; WX 602 ; N uni0582 ; G 1095
U 1411 ; WX 602 ; N uni0583 ; G 1096
U 1412 ; WX 602 ; N uni0584 ; G 1097
U 1413 ; WX 602 ; N uni0585 ; G 1098
U 1414 ; WX 602 ; N uni0586 ; G 1099
U 1415 ; WX 602 ; N uni0587 ; G 1100
U 1417 ; WX 602 ; N uni0589 ; G 1101
U 1418 ; WX 602 ; N uni058A ; G 1102
U 1542 ; WX 602 ; N uni0606 ; G 1103
U 1543 ; WX 602 ; N uni0607 ; G 1104
U 1545 ; WX 602 ; N uni0609 ; G 1105
U 1546 ; WX 602 ; N uni060A ; G 1106
U 1548 ; WX 602 ; N uni060C ; G 1107
U 1557 ; WX 602 ; N uni0615 ; G 1108
U 1563 ; WX 602 ; N uni061B ; G 1109
U 1567 ; WX 602 ; N uni061F ; G 1110
U 1569 ; WX 602 ; N uni0621 ; G 1111
U 1570 ; WX 602 ; N uni0622 ; G 1112
U 1571 ; WX 602 ; N uni0623 ; G 1113
U 1572 ; WX 602 ; N uni0624 ; G 1114
U 1573 ; WX 602 ; N uni0625 ; G 1115
U 1574 ; WX 602 ; N uni0626 ; G 1116
U 1575 ; WX 602 ; N uni0627 ; G 1117
U 1576 ; WX 602 ; N uni0628 ; G 1118
U 1577 ; WX 602 ; N uni0629 ; G 1119
U 1578 ; WX 602 ; N uni062A ; G 1120
U 1579 ; WX 602 ; N uni062B ; G 1121
U 1580 ; WX 602 ; N uni062C ; G 1122
U 1581 ; WX 602 ; N uni062D ; G 1123
U 1582 ; WX 602 ; N uni062E ; G 1124
U 1583 ; WX 602 ; N uni062F ; G 1125
U 1584 ; WX 602 ; N uni0630 ; G 1126
U 1585 ; WX 602 ; N uni0631 ; G 1127
U 1586 ; WX 602 ; N uni0632 ; G 1128
U 1587 ; WX 602 ; N uni0633 ; G 1129
U 1588 ; WX 602 ; N uni0634 ; G 1130
U 1589 ; WX 602 ; N uni0635 ; G 1131
U 1590 ; WX 602 ; N uni0636 ; G 1132
U 1591 ; WX 602 ; N uni0637 ; G 1133
U 1592 ; WX 602 ; N uni0638 ; G 1134
U 1593 ; WX 602 ; N uni0639 ; G 1135
U 1594 ; WX 602 ; N uni063A ; G 1136
U 1600 ; WX 602 ; N uni0640 ; G 1137
U 1601 ; WX 602 ; N uni0641 ; G 1138
U 1602 ; WX 602 ; N uni0642 ; G 1139
U 1603 ; WX 602 ; N uni0643 ; G 1140
U 1604 ; WX 602 ; N uni0644 ; G 1141
U 1605 ; WX 602 ; N uni0645 ; G 1142
U 1606 ; WX 602 ; N uni0646 ; G 1143
U 1607 ; WX 602 ; N uni0647 ; G 1144
U 1608 ; WX 602 ; N uni0648 ; G 1145
U 1609 ; WX 602 ; N uni0649 ; G 1146
U 1610 ; WX 602 ; N uni064A ; G 1147
U 1611 ; WX 602 ; N uni064B ; G 1148
U 1612 ; WX 602 ; N uni064C ; G 1149
U 1613 ; WX 602 ; N uni064D ; G 1150
U 1614 ; WX 602 ; N uni064E ; G 1151
U 1615 ; WX 602 ; N uni064F ; G 1152
U 1616 ; WX 602 ; N uni0650 ; G 1153
U 1617 ; WX 602 ; N uni0651 ; G 1154
U 1618 ; WX 602 ; N uni0652 ; G 1155
U 1619 ; WX 602 ; N uni0653 ; G 1156
U 1620 ; WX 602 ; N uni0654 ; G 1157
U 1621 ; WX 602 ; N uni0655 ; G 1158
U 1626 ; WX 602 ; N uni065A ; G 1159
U 1632 ; WX 602 ; N uni0660 ; G 1160
U 1633 ; WX 602 ; N uni0661 ; G 1161
U 1634 ; WX 602 ; N uni0662 ; G 1162
U 1635 ; WX 602 ; N uni0663 ; G 1163
U 1636 ; WX 602 ; N uni0664 ; G 1164
U 1637 ; WX 602 ; N uni0665 ; G 1165
U 1638 ; WX 602 ; N uni0666 ; G 1166
U 1639 ; WX 602 ; N uni0667 ; G 1167
U 1640 ; WX 602 ; N uni0668 ; G 1168
U 1641 ; WX 602 ; N uni0669 ; G 1169
U 1642 ; WX 602 ; N uni066A ; G 1170
U 1643 ; WX 602 ; N uni066B ; G 1171
U 1644 ; WX 602 ; N uni066C ; G 1172
U 1645 ; WX 602 ; N uni066D ; G 1173
U 1652 ; WX 602 ; N uni0674 ; G 1174
U 1657 ; WX 602 ; N uni0679 ; G 1175
U 1658 ; WX 602 ; N uni067A ; G 1176
U 1659 ; WX 602 ; N uni067B ; G 1177
U 1662 ; WX 602 ; N uni067E ; G 1178
U 1663 ; WX 602 ; N uni067F ; G 1179
U 1664 ; WX 602 ; N uni0680 ; G 1180
U 1667 ; WX 602 ; N uni0683 ; G 1181
U 1668 ; WX 602 ; N uni0684 ; G 1182
U 1670 ; WX 602 ; N uni0686 ; G 1183
U 1671 ; WX 602 ; N uni0687 ; G 1184
U 1681 ; WX 602 ; N uni0691 ; G 1185
U 1688 ; WX 602 ; N uni0698 ; G 1186
U 1700 ; WX 602 ; N uni06A4 ; G 1187
U 1705 ; WX 602 ; N uni06A9 ; G 1188
U 1711 ; WX 602 ; N uni06AF ; G 1189
U 1726 ; WX 602 ; N uni06BE ; G 1190
U 1740 ; WX 602 ; N uni06CC ; G 1191
U 1776 ; WX 602 ; N uni06F0 ; G 1192
U 1777 ; WX 602 ; N uni06F1 ; G 1193
U 1778 ; WX 602 ; N uni06F2 ; G 1194
U 1779 ; WX 602 ; N uni06F3 ; G 1195
U 1780 ; WX 602 ; N uni06F4 ; G 1196
U 1781 ; WX 602 ; N uni06F5 ; G 1197
U 1782 ; WX 602 ; N uni06F6 ; G 1198
U 1783 ; WX 602 ; N uni06F7 ; G 1199
U 1784 ; WX 602 ; N uni06F8 ; G 1200
U 1785 ; WX 602 ; N uni06F9 ; G 1201
U 3647 ; WX 602 ; N uni0E3F ; G 1202
U 3713 ; WX 602 ; N uni0E81 ; G 1203
U 3714 ; WX 602 ; N uni0E82 ; G 1204
U 3716 ; WX 602 ; N uni0E84 ; G 1205
U 3719 ; WX 602 ; N uni0E87 ; G 1206
U 3720 ; WX 602 ; N uni0E88 ; G 1207
U 3722 ; WX 602 ; N uni0E8A ; G 1208
U 3725 ; WX 602 ; N uni0E8D ; G 1209
U 3732 ; WX 602 ; N uni0E94 ; G 1210
U 3733 ; WX 602 ; N uni0E95 ; G 1211
U 3734 ; WX 602 ; N uni0E96 ; G 1212
U 3735 ; WX 602 ; N uni0E97 ; G 1213
U 3737 ; WX 602 ; N uni0E99 ; G 1214
U 3738 ; WX 602 ; N uni0E9A ; G 1215
U 3739 ; WX 602 ; N uni0E9B ; G 1216
U 3740 ; WX 602 ; N uni0E9C ; G 1217
U 3741 ; WX 602 ; N uni0E9D ; G 1218
U 3742 ; WX 602 ; N uni0E9E ; G 1219
U 3743 ; WX 602 ; N uni0E9F ; G 1220
U 3745 ; WX 602 ; N uni0EA1 ; G 1221
U 3746 ; WX 602 ; N uni0EA2 ; G 1222
U 3747 ; WX 602 ; N uni0EA3 ; G 1223
U 3749 ; WX 602 ; N uni0EA5 ; G 1224
U 3751 ; WX 602 ; N uni0EA7 ; G 1225
U 3754 ; WX 602 ; N uni0EAA ; G 1226
U 3755 ; WX 602 ; N uni0EAB ; G 1227
U 3757 ; WX 602 ; N uni0EAD ; G 1228
U 3758 ; WX 602 ; N uni0EAE ; G 1229
U 3759 ; WX 602 ; N uni0EAF ; G 1230
U 3760 ; WX 602 ; N uni0EB0 ; G 1231
U 3761 ; WX 602 ; N uni0EB1 ; G 1232
U 3762 ; WX 602 ; N uni0EB2 ; G 1233
U 3763 ; WX 602 ; N uni0EB3 ; G 1234
U 3764 ; WX 602 ; N uni0EB4 ; G 1235
U 3765 ; WX 602 ; N uni0EB5 ; G 1236
U 3766 ; WX 602 ; N uni0EB6 ; G 1237
U 3767 ; WX 602 ; N uni0EB7 ; G 1238
U 3768 ; WX 602 ; N uni0EB8 ; G 1239
U 3769 ; WX 602 ; N uni0EB9 ; G 1240
U 3771 ; WX 602 ; N uni0EBB ; G 1241
U 3772 ; WX 602 ; N uni0EBC ; G 1242
U 3784 ; WX 602 ; N uni0EC8 ; G 1243
U 3785 ; WX 602 ; N uni0EC9 ; G 1244
U 3786 ; WX 602 ; N uni0ECA ; G 1245
U 3787 ; WX 602 ; N uni0ECB ; G 1246
U 3788 ; WX 602 ; N uni0ECC ; G 1247
U 3789 ; WX 602 ; N uni0ECD ; G 1248
U 4304 ; WX 602 ; N uni10D0 ; G 1249
U 4305 ; WX 602 ; N uni10D1 ; G 1250
U 4306 ; WX 602 ; N uni10D2 ; G 1251
U 4307 ; WX 602 ; N uni10D3 ; G 1252
U 4308 ; WX 602 ; N uni10D4 ; G 1253
U 4309 ; WX 602 ; N uni10D5 ; G 1254
U 4310 ; WX 602 ; N uni10D6 ; G 1255
U 4311 ; WX 602 ; N uni10D7 ; G 1256
U 4312 ; WX 602 ; N uni10D8 ; G 1257
U 4313 ; WX 602 ; N uni10D9 ; G 1258
U 4314 ; WX 602 ; N uni10DA ; G 1259
U 4315 ; WX 602 ; N uni10DB ; G 1260
U 4316 ; WX 602 ; N uni10DC ; G 1261
U 4317 ; WX 602 ; N uni10DD ; G 1262
U 4318 ; WX 602 ; N uni10DE ; G 1263
U 4319 ; WX 602 ; N uni10DF ; G 1264
U 4320 ; WX 602 ; N uni10E0 ; G 1265
U 4321 ; WX 602 ; N uni10E1 ; G 1266
U 4322 ; WX 602 ; N uni10E2 ; G 1267
U 4323 ; WX 602 ; N uni10E3 ; G 1268
U 4324 ; WX 602 ; N uni10E4 ; G 1269
U 4325 ; WX 602 ; N uni10E5 ; G 1270
U 4326 ; WX 602 ; N uni10E6 ; G 1271
U 4327 ; WX 602 ; N uni10E7 ; G 1272
U 4328 ; WX 602 ; N uni10E8 ; G 1273
U 4329 ; WX 602 ; N uni10E9 ; G 1274
U 4330 ; WX 602 ; N uni10EA ; G 1275
U 4331 ; WX 602 ; N uni10EB ; G 1276
U 4332 ; WX 602 ; N uni10EC ; G 1277
U 4333 ; WX 602 ; N uni10ED ; G 1278
U 4334 ; WX 602 ; N uni10EE ; G 1279
U 4335 ; WX 602 ; N uni10EF ; G 1280
U 4336 ; WX 602 ; N uni10F0 ; G 1281
U 4337 ; WX 602 ; N uni10F1 ; G 1282
U 4338 ; WX 602 ; N uni10F2 ; G 1283
U 4339 ; WX 602 ; N uni10F3 ; G 1284
U 4340 ; WX 602 ; N uni10F4 ; G 1285
U 4341 ; WX 602 ; N uni10F5 ; G 1286
U 4342 ; WX 602 ; N uni10F6 ; G 1287
U 4343 ; WX 602 ; N uni10F7 ; G 1288
U 4344 ; WX 602 ; N uni10F8 ; G 1289
U 4345 ; WX 602 ; N uni10F9 ; G 1290
U 4346 ; WX 602 ; N uni10FA ; G 1291
U 4347 ; WX 602 ; N uni10FB ; G 1292
U 4348 ; WX 602 ; N uni10FC ; G 1293
U 7426 ; WX 602 ; N uni1D02 ; G 1294
U 7432 ; WX 602 ; N uni1D08 ; G 1295
U 7433 ; WX 602 ; N uni1D09 ; G 1296
U 7444 ; WX 602 ; N uni1D14 ; G 1297
U 7446 ; WX 602 ; N uni1D16 ; G 1298
U 7447 ; WX 602 ; N uni1D17 ; G 1299
U 7453 ; WX 602 ; N uni1D1D ; G 1300
U 7454 ; WX 602 ; N uni1D1E ; G 1301
U 7455 ; WX 602 ; N uni1D1F ; G 1302
U 7468 ; WX 602 ; N uni1D2C ; G 1303
U 7469 ; WX 602 ; N uni1D2D ; G 1304
U 7470 ; WX 602 ; N uni1D2E ; G 1305
U 7472 ; WX 602 ; N uni1D30 ; G 1306
U 7473 ; WX 602 ; N uni1D31 ; G 1307
U 7474 ; WX 602 ; N uni1D32 ; G 1308
U 7475 ; WX 602 ; N uni1D33 ; G 1309
U 7476 ; WX 602 ; N uni1D34 ; G 1310
U 7477 ; WX 602 ; N uni1D35 ; G 1311
U 7478 ; WX 602 ; N uni1D36 ; G 1312
U 7479 ; WX 602 ; N uni1D37 ; G 1313
U 7480 ; WX 602 ; N uni1D38 ; G 1314
U 7481 ; WX 602 ; N uni1D39 ; G 1315
U 7482 ; WX 602 ; N uni1D3A ; G 1316
U 7483 ; WX 602 ; N uni1D3B ; G 1317
U 7484 ; WX 602 ; N uni1D3C ; G 1318
U 7486 ; WX 602 ; N uni1D3E ; G 1319
U 7487 ; WX 602 ; N uni1D3F ; G 1320
U 7488 ; WX 602 ; N uni1D40 ; G 1321
U 7489 ; WX 602 ; N uni1D41 ; G 1322
U 7490 ; WX 602 ; N uni1D42 ; G 1323
U 7491 ; WX 602 ; N uni1D43 ; G 1324
U 7492 ; WX 602 ; N uni1D44 ; G 1325
U 7493 ; WX 602 ; N uni1D45 ; G 1326
U 7494 ; WX 602 ; N uni1D46 ; G 1327
U 7495 ; WX 602 ; N uni1D47 ; G 1328
U 7496 ; WX 602 ; N uni1D48 ; G 1329
U 7497 ; WX 602 ; N uni1D49 ; G 1330
U 7498 ; WX 602 ; N uni1D4A ; G 1331
U 7499 ; WX 602 ; N uni1D4B ; G 1332
U 7500 ; WX 602 ; N uni1D4C ; G 1333
U 7501 ; WX 602 ; N uni1D4D ; G 1334
U 7502 ; WX 602 ; N uni1D4E ; G 1335
U 7503 ; WX 602 ; N uni1D4F ; G 1336
U 7504 ; WX 602 ; N uni1D50 ; G 1337
U 7505 ; WX 602 ; N uni1D51 ; G 1338
U 7506 ; WX 602 ; N uni1D52 ; G 1339
U 7507 ; WX 602 ; N uni1D53 ; G 1340
U 7508 ; WX 602 ; N uni1D54 ; G 1341
U 7509 ; WX 602 ; N uni1D55 ; G 1342
U 7510 ; WX 602 ; N uni1D56 ; G 1343
U 7511 ; WX 602 ; N uni1D57 ; G 1344
U 7512 ; WX 602 ; N uni1D58 ; G 1345
U 7513 ; WX 602 ; N uni1D59 ; G 1346
U 7514 ; WX 602 ; N uni1D5A ; G 1347
U 7515 ; WX 602 ; N uni1D5B ; G 1348
U 7522 ; WX 602 ; N uni1D62 ; G 1349
U 7523 ; WX 602 ; N uni1D63 ; G 1350
U 7524 ; WX 602 ; N uni1D64 ; G 1351
U 7525 ; WX 602 ; N uni1D65 ; G 1352
U 7543 ; WX 602 ; N uni1D77 ; G 1353
U 7544 ; WX 602 ; N uni1D78 ; G 1354
U 7547 ; WX 602 ; N uni1D7B ; G 1355
U 7557 ; WX 602 ; N uni1D85 ; G 1356
U 7579 ; WX 602 ; N uni1D9B ; G 1357
U 7580 ; WX 602 ; N uni1D9C ; G 1358
U 7581 ; WX 602 ; N uni1D9D ; G 1359
U 7582 ; WX 602 ; N uni1D9E ; G 1360
U 7583 ; WX 602 ; N uni1D9F ; G 1361
U 7584 ; WX 602 ; N uni1DA0 ; G 1362
U 7585 ; WX 602 ; N uni1DA1 ; G 1363
U 7586 ; WX 602 ; N uni1DA2 ; G 1364
U 7587 ; WX 602 ; N uni1DA3 ; G 1365
U 7588 ; WX 602 ; N uni1DA4 ; G 1366
U 7589 ; WX 602 ; N uni1DA5 ; G 1367
U 7590 ; WX 602 ; N uni1DA6 ; G 1368
U 7591 ; WX 602 ; N uni1DA7 ; G 1369
U 7592 ; WX 602 ; N uni1DA8 ; G 1370
U 7593 ; WX 602 ; N uni1DA9 ; G 1371
U 7594 ; WX 602 ; N uni1DAA ; G 1372
U 7595 ; WX 602 ; N uni1DAB ; G 1373
U 7596 ; WX 602 ; N uni1DAC ; G 1374
U 7597 ; WX 602 ; N uni1DAD ; G 1375
U 7598 ; WX 602 ; N uni1DAE ; G 1376
U 7599 ; WX 602 ; N uni1DAF ; G 1377
U 7600 ; WX 602 ; N uni1DB0 ; G 1378
U 7601 ; WX 602 ; N uni1DB1 ; G 1379
U 7602 ; WX 602 ; N uni1DB2 ; G 1380
U 7603 ; WX 602 ; N uni1DB3 ; G 1381
U 7604 ; WX 602 ; N uni1DB4 ; G 1382
U 7605 ; WX 602 ; N uni1DB5 ; G 1383
U 7606 ; WX 602 ; N uni1DB6 ; G 1384
U 7607 ; WX 602 ; N uni1DB7 ; G 1385
U 7609 ; WX 602 ; N uni1DB9 ; G 1386
U 7610 ; WX 602 ; N uni1DBA ; G 1387
U 7611 ; WX 602 ; N uni1DBB ; G 1388
U 7612 ; WX 602 ; N uni1DBC ; G 1389
U 7613 ; WX 602 ; N uni1DBD ; G 1390
U 7614 ; WX 602 ; N uni1DBE ; G 1391
U 7615 ; WX 602 ; N uni1DBF ; G 1392
U 7680 ; WX 602 ; N uni1E00 ; G 1393
U 7681 ; WX 602 ; N uni1E01 ; G 1394
U 7682 ; WX 602 ; N uni1E02 ; G 1395
U 7683 ; WX 602 ; N uni1E03 ; G 1396
U 7684 ; WX 602 ; N uni1E04 ; G 1397
U 7685 ; WX 602 ; N uni1E05 ; G 1398
U 7686 ; WX 602 ; N uni1E06 ; G 1399
U 7687 ; WX 602 ; N uni1E07 ; G 1400
U 7688 ; WX 602 ; N uni1E08 ; G 1401
U 7689 ; WX 602 ; N uni1E09 ; G 1402
U 7690 ; WX 602 ; N uni1E0A ; G 1403
U 7691 ; WX 602 ; N uni1E0B ; G 1404
U 7692 ; WX 602 ; N uni1E0C ; G 1405
U 7693 ; WX 602 ; N uni1E0D ; G 1406
U 7694 ; WX 602 ; N uni1E0E ; G 1407
U 7695 ; WX 602 ; N uni1E0F ; G 1408
U 7696 ; WX 602 ; N uni1E10 ; G 1409
U 7697 ; WX 602 ; N uni1E11 ; G 1410
U 7698 ; WX 602 ; N uni1E12 ; G 1411
U 7699 ; WX 602 ; N uni1E13 ; G 1412
U 7704 ; WX 602 ; N uni1E18 ; G 1413
U 7705 ; WX 602 ; N uni1E19 ; G 1414
U 7706 ; WX 602 ; N uni1E1A ; G 1415
U 7707 ; WX 602 ; N uni1E1B ; G 1416
U 7708 ; WX 602 ; N uni1E1C ; G 1417
U 7709 ; WX 602 ; N uni1E1D ; G 1418
U 7710 ; WX 602 ; N uni1E1E ; G 1419
U 7711 ; WX 602 ; N uni1E1F ; G 1420
U 7712 ; WX 602 ; N uni1E20 ; G 1421
U 7713 ; WX 602 ; N uni1E21 ; G 1422
U 7714 ; WX 602 ; N uni1E22 ; G 1423
U 7715 ; WX 602 ; N uni1E23 ; G 1424
U 7716 ; WX 602 ; N uni1E24 ; G 1425
U 7717 ; WX 602 ; N uni1E25 ; G 1426
U 7718 ; WX 602 ; N uni1E26 ; G 1427
U 7719 ; WX 602 ; N uni1E27 ; G 1428
U 7720 ; WX 602 ; N uni1E28 ; G 1429
U 7721 ; WX 602 ; N uni1E29 ; G 1430
U 7722 ; WX 602 ; N uni1E2A ; G 1431
U 7723 ; WX 602 ; N uni1E2B ; G 1432
U 7724 ; WX 602 ; N uni1E2C ; G 1433
U 7725 ; WX 602 ; N uni1E2D ; G 1434
U 7728 ; WX 602 ; N uni1E30 ; G 1435
U 7729 ; WX 602 ; N uni1E31 ; G 1436
U 7730 ; WX 602 ; N uni1E32 ; G 1437
U 7731 ; WX 602 ; N uni1E33 ; G 1438
U 7732 ; WX 602 ; N uni1E34 ; G 1439
U 7733 ; WX 602 ; N uni1E35 ; G 1440
U 7734 ; WX 602 ; N uni1E36 ; G 1441
U 7735 ; WX 602 ; N uni1E37 ; G 1442
U 7736 ; WX 602 ; N uni1E38 ; G 1443
U 7737 ; WX 602 ; N uni1E39 ; G 1444
U 7738 ; WX 602 ; N uni1E3A ; G 1445
U 7739 ; WX 602 ; N uni1E3B ; G 1446
U 7740 ; WX 602 ; N uni1E3C ; G 1447
U 7741 ; WX 602 ; N uni1E3D ; G 1448
U 7742 ; WX 602 ; N uni1E3E ; G 1449
U 7743 ; WX 602 ; N uni1E3F ; G 1450
U 7744 ; WX 602 ; N uni1E40 ; G 1451
U 7745 ; WX 602 ; N uni1E41 ; G 1452
U 7746 ; WX 602 ; N uni1E42 ; G 1453
U 7747 ; WX 602 ; N uni1E43 ; G 1454
U 7748 ; WX 602 ; N uni1E44 ; G 1455
U 7749 ; WX 602 ; N uni1E45 ; G 1456
U 7750 ; WX 602 ; N uni1E46 ; G 1457
U 7751 ; WX 602 ; N uni1E47 ; G 1458
U 7752 ; WX 602 ; N uni1E48 ; G 1459
U 7753 ; WX 602 ; N uni1E49 ; G 1460
U 7754 ; WX 602 ; N uni1E4A ; G 1461
U 7755 ; WX 602 ; N uni1E4B ; G 1462
U 7756 ; WX 602 ; N uni1E4C ; G 1463
U 7757 ; WX 602 ; N uni1E4D ; G 1464
U 7764 ; WX 602 ; N uni1E54 ; G 1465
U 7765 ; WX 602 ; N uni1E55 ; G 1466
U 7766 ; WX 602 ; N uni1E56 ; G 1467
U 7767 ; WX 602 ; N uni1E57 ; G 1468
U 7768 ; WX 602 ; N uni1E58 ; G 1469
U 7769 ; WX 602 ; N uni1E59 ; G 1470
U 7770 ; WX 602 ; N uni1E5A ; G 1471
U 7771 ; WX 602 ; N uni1E5B ; G 1472
U 7772 ; WX 602 ; N uni1E5C ; G 1473
U 7773 ; WX 602 ; N uni1E5D ; G 1474
U 7774 ; WX 602 ; N uni1E5E ; G 1475
U 7775 ; WX 602 ; N uni1E5F ; G 1476
U 7776 ; WX 602 ; N uni1E60 ; G 1477
U 7777 ; WX 602 ; N uni1E61 ; G 1478
U 7778 ; WX 602 ; N uni1E62 ; G 1479
U 7779 ; WX 602 ; N uni1E63 ; G 1480
U 7784 ; WX 602 ; N uni1E68 ; G 1481
U 7785 ; WX 602 ; N uni1E69 ; G 1482
U 7786 ; WX 602 ; N uni1E6A ; G 1483
U 7787 ; WX 602 ; N uni1E6B ; G 1484
U 7788 ; WX 602 ; N uni1E6C ; G 1485
U 7789 ; WX 602 ; N uni1E6D ; G 1486
U 7790 ; WX 602 ; N uni1E6E ; G 1487
U 7791 ; WX 602 ; N uni1E6F ; G 1488
U 7792 ; WX 602 ; N uni1E70 ; G 1489
U 7793 ; WX 602 ; N uni1E71 ; G 1490
U 7794 ; WX 602 ; N uni1E72 ; G 1491
U 7795 ; WX 602 ; N uni1E73 ; G 1492
U 7796 ; WX 602 ; N uni1E74 ; G 1493
U 7797 ; WX 602 ; N uni1E75 ; G 1494
U 7798 ; WX 602 ; N uni1E76 ; G 1495
U 7799 ; WX 602 ; N uni1E77 ; G 1496
U 7800 ; WX 602 ; N uni1E78 ; G 1497
U 7801 ; WX 602 ; N uni1E79 ; G 1498
U 7804 ; WX 602 ; N uni1E7C ; G 1499
U 7805 ; WX 602 ; N uni1E7D ; G 1500
U 7806 ; WX 602 ; N uni1E7E ; G 1501
U 7807 ; WX 602 ; N uni1E7F ; G 1502
U 7808 ; WX 602 ; N Wgrave ; G 1503
U 7809 ; WX 602 ; N wgrave ; G 1504
U 7810 ; WX 602 ; N Wacute ; G 1505
U 7811 ; WX 602 ; N wacute ; G 1506
U 7812 ; WX 602 ; N Wdieresis ; G 1507
U 7813 ; WX 602 ; N wdieresis ; G 1508
U 7814 ; WX 602 ; N uni1E86 ; G 1509
U 7815 ; WX 602 ; N uni1E87 ; G 1510
U 7816 ; WX 602 ; N uni1E88 ; G 1511
U 7817 ; WX 602 ; N uni1E89 ; G 1512
U 7818 ; WX 602 ; N uni1E8A ; G 1513
U 7819 ; WX 602 ; N uni1E8B ; G 1514
U 7820 ; WX 602 ; N uni1E8C ; G 1515
U 7821 ; WX 602 ; N uni1E8D ; G 1516
U 7822 ; WX 602 ; N uni1E8E ; G 1517
U 7823 ; WX 602 ; N uni1E8F ; G 1518
U 7824 ; WX 602 ; N uni1E90 ; G 1519
U 7825 ; WX 602 ; N uni1E91 ; G 1520
U 7826 ; WX 602 ; N uni1E92 ; G 1521
U 7827 ; WX 602 ; N uni1E93 ; G 1522
U 7828 ; WX 602 ; N uni1E94 ; G 1523
U 7829 ; WX 602 ; N uni1E95 ; G 1524
U 7830 ; WX 602 ; N uni1E96 ; G 1525
U 7831 ; WX 602 ; N uni1E97 ; G 1526
U 7832 ; WX 602 ; N uni1E98 ; G 1527
U 7833 ; WX 602 ; N uni1E99 ; G 1528
U 7835 ; WX 602 ; N uni1E9B ; G 1529
U 7839 ; WX 602 ; N uni1E9F ; G 1530
U 7840 ; WX 602 ; N uni1EA0 ; G 1531
U 7841 ; WX 602 ; N uni1EA1 ; G 1532
U 7852 ; WX 602 ; N uni1EAC ; G 1533
U 7853 ; WX 602 ; N uni1EAD ; G 1534
U 7856 ; WX 602 ; N uni1EB0 ; G 1535
U 7857 ; WX 602 ; N uni1EB1 ; G 1536
U 7862 ; WX 602 ; N uni1EB6 ; G 1537
U 7863 ; WX 602 ; N uni1EB7 ; G 1538
U 7864 ; WX 602 ; N uni1EB8 ; G 1539
U 7865 ; WX 602 ; N uni1EB9 ; G 1540
U 7868 ; WX 602 ; N uni1EBC ; G 1541
U 7869 ; WX 602 ; N uni1EBD ; G 1542
U 7878 ; WX 602 ; N uni1EC6 ; G 1543
U 7879 ; WX 602 ; N uni1EC7 ; G 1544
U 7882 ; WX 602 ; N uni1ECA ; G 1545
U 7883 ; WX 602 ; N uni1ECB ; G 1546
U 7884 ; WX 602 ; N uni1ECC ; G 1547
U 7885 ; WX 602 ; N uni1ECD ; G 1548
U 7896 ; WX 602 ; N uni1ED8 ; G 1549
U 7897 ; WX 602 ; N uni1ED9 ; G 1550
U 7898 ; WX 602 ; N uni1EDA ; G 1551
U 7899 ; WX 602 ; N uni1EDB ; G 1552
U 7900 ; WX 602 ; N uni1EDC ; G 1553
U 7901 ; WX 602 ; N uni1EDD ; G 1554
U 7904 ; WX 602 ; N uni1EE0 ; G 1555
U 7905 ; WX 602 ; N uni1EE1 ; G 1556
U 7906 ; WX 602 ; N uni1EE2 ; G 1557
U 7907 ; WX 602 ; N uni1EE3 ; G 1558
U 7908 ; WX 602 ; N uni1EE4 ; G 1559
U 7909 ; WX 602 ; N uni1EE5 ; G 1560
U 7912 ; WX 602 ; N uni1EE8 ; G 1561
U 7913 ; WX 602 ; N uni1EE9 ; G 1562
U 7914 ; WX 602 ; N uni1EEA ; G 1563
U 7915 ; WX 602 ; N uni1EEB ; G 1564
U 7918 ; WX 602 ; N uni1EEE ; G 1565
U 7919 ; WX 602 ; N uni1EEF ; G 1566
U 7920 ; WX 602 ; N uni1EF0 ; G 1567
U 7921 ; WX 602 ; N uni1EF1 ; G 1568
U 7922 ; WX 602 ; N Ygrave ; G 1569
U 7923 ; WX 602 ; N ygrave ; G 1570
U 7924 ; WX 602 ; N uni1EF4 ; G 1571
U 7925 ; WX 602 ; N uni1EF5 ; G 1572
U 7928 ; WX 602 ; N uni1EF8 ; G 1573
U 7929 ; WX 602 ; N uni1EF9 ; G 1574
U 7936 ; WX 602 ; N uni1F00 ; G 1575
U 7937 ; WX 602 ; N uni1F01 ; G 1576
U 7938 ; WX 602 ; N uni1F02 ; G 1577
U 7939 ; WX 602 ; N uni1F03 ; G 1578
U 7940 ; WX 602 ; N uni1F04 ; G 1579
U 7941 ; WX 602 ; N uni1F05 ; G 1580
U 7942 ; WX 602 ; N uni1F06 ; G 1581
U 7943 ; WX 602 ; N uni1F07 ; G 1582
U 7944 ; WX 602 ; N uni1F08 ; G 1583
U 7945 ; WX 602 ; N uni1F09 ; G 1584
U 7946 ; WX 602 ; N uni1F0A ; G 1585
U 7947 ; WX 602 ; N uni1F0B ; G 1586
U 7948 ; WX 602 ; N uni1F0C ; G 1587
U 7949 ; WX 602 ; N uni1F0D ; G 1588
U 7950 ; WX 602 ; N uni1F0E ; G 1589
U 7951 ; WX 602 ; N uni1F0F ; G 1590
U 7952 ; WX 602 ; N uni1F10 ; G 1591
U 7953 ; WX 602 ; N uni1F11 ; G 1592
U 7954 ; WX 602 ; N uni1F12 ; G 1593
U 7955 ; WX 602 ; N uni1F13 ; G 1594
U 7956 ; WX 602 ; N uni1F14 ; G 1595
U 7957 ; WX 602 ; N uni1F15 ; G 1596
U 7960 ; WX 602 ; N uni1F18 ; G 1597
U 7961 ; WX 602 ; N uni1F19 ; G 1598
U 7962 ; WX 602 ; N uni1F1A ; G 1599
U 7963 ; WX 602 ; N uni1F1B ; G 1600
U 7964 ; WX 602 ; N uni1F1C ; G 1601
U 7965 ; WX 602 ; N uni1F1D ; G 1602
U 7968 ; WX 602 ; N uni1F20 ; G 1603
U 7969 ; WX 602 ; N uni1F21 ; G 1604
U 7970 ; WX 602 ; N uni1F22 ; G 1605
U 7971 ; WX 602 ; N uni1F23 ; G 1606
U 7972 ; WX 602 ; N uni1F24 ; G 1607
U 7973 ; WX 602 ; N uni1F25 ; G 1608
U 7974 ; WX 602 ; N uni1F26 ; G 1609
U 7975 ; WX 602 ; N uni1F27 ; G 1610
U 7976 ; WX 602 ; N uni1F28 ; G 1611
U 7977 ; WX 602 ; N uni1F29 ; G 1612
U 7978 ; WX 602 ; N uni1F2A ; G 1613
U 7979 ; WX 602 ; N uni1F2B ; G 1614
U 7980 ; WX 602 ; N uni1F2C ; G 1615
U 7981 ; WX 602 ; N uni1F2D ; G 1616
U 7982 ; WX 602 ; N uni1F2E ; G 1617
U 7983 ; WX 602 ; N uni1F2F ; G 1618
U 7984 ; WX 602 ; N uni1F30 ; G 1619
U 7985 ; WX 602 ; N uni1F31 ; G 1620
U 7986 ; WX 602 ; N uni1F32 ; G 1621
U 7987 ; WX 602 ; N uni1F33 ; G 1622
U 7988 ; WX 602 ; N uni1F34 ; G 1623
U 7989 ; WX 602 ; N uni1F35 ; G 1624
U 7990 ; WX 602 ; N uni1F36 ; G 1625
U 7991 ; WX 602 ; N uni1F37 ; G 1626
U 7992 ; WX 602 ; N uni1F38 ; G 1627
U 7993 ; WX 602 ; N uni1F39 ; G 1628
U 7994 ; WX 602 ; N uni1F3A ; G 1629
U 7995 ; WX 602 ; N uni1F3B ; G 1630
U 7996 ; WX 602 ; N uni1F3C ; G 1631
U 7997 ; WX 602 ; N uni1F3D ; G 1632
U 7998 ; WX 602 ; N uni1F3E ; G 1633
U 7999 ; WX 602 ; N uni1F3F ; G 1634
U 8000 ; WX 602 ; N uni1F40 ; G 1635
U 8001 ; WX 602 ; N uni1F41 ; G 1636
U 8002 ; WX 602 ; N uni1F42 ; G 1637
U 8003 ; WX 602 ; N uni1F43 ; G 1638
U 8004 ; WX 602 ; N uni1F44 ; G 1639
U 8005 ; WX 602 ; N uni1F45 ; G 1640
U 8008 ; WX 602 ; N uni1F48 ; G 1641
U 8009 ; WX 602 ; N uni1F49 ; G 1642
U 8010 ; WX 602 ; N uni1F4A ; G 1643
U 8011 ; WX 602 ; N uni1F4B ; G 1644
U 8012 ; WX 602 ; N uni1F4C ; G 1645
U 8013 ; WX 602 ; N uni1F4D ; G 1646
U 8016 ; WX 602 ; N uni1F50 ; G 1647
U 8017 ; WX 602 ; N uni1F51 ; G 1648
U 8018 ; WX 602 ; N uni1F52 ; G 1649
U 8019 ; WX 602 ; N uni1F53 ; G 1650
U 8020 ; WX 602 ; N uni1F54 ; G 1651
U 8021 ; WX 602 ; N uni1F55 ; G 1652
U 8022 ; WX 602 ; N uni1F56 ; G 1653
U 8023 ; WX 602 ; N uni1F57 ; G 1654
U 8025 ; WX 602 ; N uni1F59 ; G 1655
U 8027 ; WX 602 ; N uni1F5B ; G 1656
U 8029 ; WX 602 ; N uni1F5D ; G 1657
U 8031 ; WX 602 ; N uni1F5F ; G 1658
U 8032 ; WX 602 ; N uni1F60 ; G 1659
U 8033 ; WX 602 ; N uni1F61 ; G 1660
U 8034 ; WX 602 ; N uni1F62 ; G 1661
U 8035 ; WX 602 ; N uni1F63 ; G 1662
U 8036 ; WX 602 ; N uni1F64 ; G 1663
U 8037 ; WX 602 ; N uni1F65 ; G 1664
U 8038 ; WX 602 ; N uni1F66 ; G 1665
U 8039 ; WX 602 ; N uni1F67 ; G 1666
U 8040 ; WX 602 ; N uni1F68 ; G 1667
U 8041 ; WX 602 ; N uni1F69 ; G 1668
U 8042 ; WX 602 ; N uni1F6A ; G 1669
U 8043 ; WX 602 ; N uni1F6B ; G 1670
U 8044 ; WX 602 ; N uni1F6C ; G 1671
U 8045 ; WX 602 ; N uni1F6D ; G 1672
U 8046 ; WX 602 ; N uni1F6E ; G 1673
U 8047 ; WX 602 ; N uni1F6F ; G 1674
U 8048 ; WX 602 ; N uni1F70 ; G 1675
U 8049 ; WX 602 ; N uni1F71 ; G 1676
U 8050 ; WX 602 ; N uni1F72 ; G 1677
U 8051 ; WX 602 ; N uni1F73 ; G 1678
U 8052 ; WX 602 ; N uni1F74 ; G 1679
U 8053 ; WX 602 ; N uni1F75 ; G 1680
U 8054 ; WX 602 ; N uni1F76 ; G 1681
U 8055 ; WX 602 ; N uni1F77 ; G 1682
U 8056 ; WX 602 ; N uni1F78 ; G 1683
U 8057 ; WX 602 ; N uni1F79 ; G 1684
U 8058 ; WX 602 ; N uni1F7A ; G 1685
U 8059 ; WX 602 ; N uni1F7B ; G 1686
U 8060 ; WX 602 ; N uni1F7C ; G 1687
U 8061 ; WX 602 ; N uni1F7D ; G 1688
U 8064 ; WX 602 ; N uni1F80 ; G 1689
U 8065 ; WX 602 ; N uni1F81 ; G 1690
U 8066 ; WX 602 ; N uni1F82 ; G 1691
U 8067 ; WX 602 ; N uni1F83 ; G 1692
U 8068 ; WX 602 ; N uni1F84 ; G 1693
U 8069 ; WX 602 ; N uni1F85 ; G 1694
U 8070 ; WX 602 ; N uni1F86 ; G 1695
U 8071 ; WX 602 ; N uni1F87 ; G 1696
U 8072 ; WX 602 ; N uni1F88 ; G 1697
U 8073 ; WX 602 ; N uni1F89 ; G 1698
U 8074 ; WX 602 ; N uni1F8A ; G 1699
U 8075 ; WX 602 ; N uni1F8B ; G 1700
U 8076 ; WX 602 ; N uni1F8C ; G 1701
U 8077 ; WX 602 ; N uni1F8D ; G 1702
U 8078 ; WX 602 ; N uni1F8E ; G 1703
U 8079 ; WX 602 ; N uni1F8F ; G 1704
U 8080 ; WX 602 ; N uni1F90 ; G 1705
U 8081 ; WX 602 ; N uni1F91 ; G 1706
U 8082 ; WX 602 ; N uni1F92 ; G 1707
U 8083 ; WX 602 ; N uni1F93 ; G 1708
U 8084 ; WX 602 ; N uni1F94 ; G 1709
U 8085 ; WX 602 ; N uni1F95 ; G 1710
U 8086 ; WX 602 ; N uni1F96 ; G 1711
U 8087 ; WX 602 ; N uni1F97 ; G 1712
U 8088 ; WX 602 ; N uni1F98 ; G 1713
U 8089 ; WX 602 ; N uni1F99 ; G 1714
U 8090 ; WX 602 ; N uni1F9A ; G 1715
U 8091 ; WX 602 ; N uni1F9B ; G 1716
U 8092 ; WX 602 ; N uni1F9C ; G 1717
U 8093 ; WX 602 ; N uni1F9D ; G 1718
U 8094 ; WX 602 ; N uni1F9E ; G 1719
U 8095 ; WX 602 ; N uni1F9F ; G 1720
U 8096 ; WX 602 ; N uni1FA0 ; G 1721
U 8097 ; WX 602 ; N uni1FA1 ; G 1722
U 8098 ; WX 602 ; N uni1FA2 ; G 1723
U 8099 ; WX 602 ; N uni1FA3 ; G 1724
U 8100 ; WX 602 ; N uni1FA4 ; G 1725
U 8101 ; WX 602 ; N uni1FA5 ; G 1726
U 8102 ; WX 602 ; N uni1FA6 ; G 1727
U 8103 ; WX 602 ; N uni1FA7 ; G 1728
U 8104 ; WX 602 ; N uni1FA8 ; G 1729
U 8105 ; WX 602 ; N uni1FA9 ; G 1730
U 8106 ; WX 602 ; N uni1FAA ; G 1731
U 8107 ; WX 602 ; N uni1FAB ; G 1732
U 8108 ; WX 602 ; N uni1FAC ; G 1733
U 8109 ; WX 602 ; N uni1FAD ; G 1734
U 8110 ; WX 602 ; N uni1FAE ; G 1735
U 8111 ; WX 602 ; N uni1FAF ; G 1736
U 8112 ; WX 602 ; N uni1FB0 ; G 1737
U 8113 ; WX 602 ; N uni1FB1 ; G 1738
U 8114 ; WX 602 ; N uni1FB2 ; G 1739
U 8115 ; WX 602 ; N uni1FB3 ; G 1740
U 8116 ; WX 602 ; N uni1FB4 ; G 1741
U 8118 ; WX 602 ; N uni1FB6 ; G 1742
U 8119 ; WX 602 ; N uni1FB7 ; G 1743
U 8120 ; WX 602 ; N uni1FB8 ; G 1744
U 8121 ; WX 602 ; N uni1FB9 ; G 1745
U 8122 ; WX 602 ; N uni1FBA ; G 1746
U 8123 ; WX 602 ; N uni1FBB ; G 1747
U 8124 ; WX 602 ; N uni1FBC ; G 1748
U 8125 ; WX 602 ; N uni1FBD ; G 1749
U 8126 ; WX 602 ; N uni1FBE ; G 1750
U 8127 ; WX 602 ; N uni1FBF ; G 1751
U 8128 ; WX 602 ; N uni1FC0 ; G 1752
U 8129 ; WX 602 ; N uni1FC1 ; G 1753
U 8130 ; WX 602 ; N uni1FC2 ; G 1754
U 8131 ; WX 602 ; N uni1FC3 ; G 1755
U 8132 ; WX 602 ; N uni1FC4 ; G 1756
U 8134 ; WX 602 ; N uni1FC6 ; G 1757
U 8135 ; WX 602 ; N uni1FC7 ; G 1758
U 8136 ; WX 602 ; N uni1FC8 ; G 1759
U 8137 ; WX 602 ; N uni1FC9 ; G 1760
U 8138 ; WX 602 ; N uni1FCA ; G 1761
U 8139 ; WX 602 ; N uni1FCB ; G 1762
U 8140 ; WX 602 ; N uni1FCC ; G 1763
U 8141 ; WX 602 ; N uni1FCD ; G 1764
U 8142 ; WX 602 ; N uni1FCE ; G 1765
U 8143 ; WX 602 ; N uni1FCF ; G 1766
U 8144 ; WX 602 ; N uni1FD0 ; G 1767
U 8145 ; WX 602 ; N uni1FD1 ; G 1768
U 8146 ; WX 602 ; N uni1FD2 ; G 1769
U 8147 ; WX 602 ; N uni1FD3 ; G 1770
U 8150 ; WX 602 ; N uni1FD6 ; G 1771
U 8151 ; WX 602 ; N uni1FD7 ; G 1772
U 8152 ; WX 602 ; N uni1FD8 ; G 1773
U 8153 ; WX 602 ; N uni1FD9 ; G 1774
U 8154 ; WX 602 ; N uni1FDA ; G 1775
U 8155 ; WX 602 ; N uni1FDB ; G 1776
U 8157 ; WX 602 ; N uni1FDD ; G 1777
U 8158 ; WX 602 ; N uni1FDE ; G 1778
U 8159 ; WX 602 ; N uni1FDF ; G 1779
U 8160 ; WX 602 ; N uni1FE0 ; G 1780
U 8161 ; WX 602 ; N uni1FE1 ; G 1781
U 8162 ; WX 602 ; N uni1FE2 ; G 1782
U 8163 ; WX 602 ; N uni1FE3 ; G 1783
U 8164 ; WX 602 ; N uni1FE4 ; G 1784
U 8165 ; WX 602 ; N uni1FE5 ; G 1785
U 8166 ; WX 602 ; N uni1FE6 ; G 1786
U 8167 ; WX 602 ; N uni1FE7 ; G 1787
U 8168 ; WX 602 ; N uni1FE8 ; G 1788
U 8169 ; WX 602 ; N uni1FE9 ; G 1789
U 8170 ; WX 602 ; N uni1FEA ; G 1790
U 8171 ; WX 602 ; N uni1FEB ; G 1791
U 8172 ; WX 602 ; N uni1FEC ; G 1792
U 8173 ; WX 602 ; N uni1FED ; G 1793
U 8174 ; WX 602 ; N uni1FEE ; G 1794
U 8175 ; WX 602 ; N uni1FEF ; G 1795
U 8178 ; WX 602 ; N uni1FF2 ; G 1796
U 8179 ; WX 602 ; N uni1FF3 ; G 1797
U 8180 ; WX 602 ; N uni1FF4 ; G 1798
U 8182 ; WX 602 ; N uni1FF6 ; G 1799
U 8183 ; WX 602 ; N uni1FF7 ; G 1800
U 8184 ; WX 602 ; N uni1FF8 ; G 1801
U 8185 ; WX 602 ; N uni1FF9 ; G 1802
U 8186 ; WX 602 ; N uni1FFA ; G 1803
U 8187 ; WX 602 ; N uni1FFB ; G 1804
U 8188 ; WX 602 ; N uni1FFC ; G 1805
U 8189 ; WX 602 ; N uni1FFD ; G 1806
U 8190 ; WX 602 ; N uni1FFE ; G 1807
U 8192 ; WX 602 ; N uni2000 ; G 1808
U 8193 ; WX 602 ; N uni2001 ; G 1809
U 8194 ; WX 602 ; N uni2002 ; G 1810
U 8195 ; WX 602 ; N uni2003 ; G 1811
U 8196 ; WX 602 ; N uni2004 ; G 1812
U 8197 ; WX 602 ; N uni2005 ; G 1813
U 8198 ; WX 602 ; N uni2006 ; G 1814
U 8199 ; WX 602 ; N uni2007 ; G 1815
U 8200 ; WX 602 ; N uni2008 ; G 1816
U 8201 ; WX 602 ; N uni2009 ; G 1817
U 8202 ; WX 602 ; N uni200A ; G 1818
U 8208 ; WX 602 ; N uni2010 ; G 1819
U 8209 ; WX 602 ; N uni2011 ; G 1820
U 8210 ; WX 602 ; N figuredash ; G 1821
U 8211 ; WX 602 ; N endash ; G 1822
U 8212 ; WX 602 ; N emdash ; G 1823
U 8213 ; WX 602 ; N uni2015 ; G 1824
U 8214 ; WX 602 ; N uni2016 ; G 1825
U 8215 ; WX 602 ; N underscoredbl ; G 1826
U 8216 ; WX 602 ; N quoteleft ; G 1827
U 8217 ; WX 602 ; N quoteright ; G 1828
U 8218 ; WX 602 ; N quotesinglbase ; G 1829
U 8219 ; WX 602 ; N quotereversed ; G 1830
U 8220 ; WX 602 ; N quotedblleft ; G 1831
U 8221 ; WX 602 ; N quotedblright ; G 1832
U 8222 ; WX 602 ; N quotedblbase ; G 1833
U 8223 ; WX 602 ; N uni201F ; G 1834
U 8224 ; WX 602 ; N dagger ; G 1835
U 8225 ; WX 602 ; N daggerdbl ; G 1836
U 8226 ; WX 602 ; N bullet ; G 1837
U 8227 ; WX 602 ; N uni2023 ; G 1838
U 8230 ; WX 602 ; N ellipsis ; G 1839
U 8239 ; WX 602 ; N uni202F ; G 1840
U 8240 ; WX 602 ; N perthousand ; G 1841
U 8241 ; WX 602 ; N uni2031 ; G 1842
U 8242 ; WX 602 ; N minute ; G 1843
U 8243 ; WX 602 ; N second ; G 1844
U 8244 ; WX 602 ; N uni2034 ; G 1845
U 8245 ; WX 602 ; N uni2035 ; G 1846
U 8246 ; WX 602 ; N uni2036 ; G 1847
U 8247 ; WX 602 ; N uni2037 ; G 1848
U 8249 ; WX 602 ; N guilsinglleft ; G 1849
U 8250 ; WX 602 ; N guilsinglright ; G 1850
U 8252 ; WX 602 ; N exclamdbl ; G 1851
U 8253 ; WX 602 ; N uni203D ; G 1852
U 8254 ; WX 602 ; N uni203E ; G 1853
U 8255 ; WX 602 ; N uni203F ; G 1854
U 8261 ; WX 602 ; N uni2045 ; G 1855
U 8262 ; WX 602 ; N uni2046 ; G 1856
U 8263 ; WX 602 ; N uni2047 ; G 1857
U 8264 ; WX 602 ; N uni2048 ; G 1858
U 8265 ; WX 602 ; N uni2049 ; G 1859
U 8267 ; WX 602 ; N uni204B ; G 1860
U 8287 ; WX 602 ; N uni205F ; G 1861
U 8304 ; WX 602 ; N uni2070 ; G 1862
U 8305 ; WX 602 ; N uni2071 ; G 1863
U 8308 ; WX 602 ; N uni2074 ; G 1864
U 8309 ; WX 602 ; N uni2075 ; G 1865
U 8310 ; WX 602 ; N uni2076 ; G 1866
U 8311 ; WX 602 ; N uni2077 ; G 1867
U 8312 ; WX 602 ; N uni2078 ; G 1868
U 8313 ; WX 602 ; N uni2079 ; G 1869
U 8314 ; WX 602 ; N uni207A ; G 1870
U 8315 ; WX 602 ; N uni207B ; G 1871
U 8316 ; WX 602 ; N uni207C ; G 1872
U 8317 ; WX 602 ; N uni207D ; G 1873
U 8318 ; WX 602 ; N uni207E ; G 1874
U 8319 ; WX 602 ; N uni207F ; G 1875
U 8320 ; WX 602 ; N uni2080 ; G 1876
U 8321 ; WX 602 ; N uni2081 ; G 1877
U 8322 ; WX 602 ; N uni2082 ; G 1878
U 8323 ; WX 602 ; N uni2083 ; G 1879
U 8324 ; WX 602 ; N uni2084 ; G 1880
U 8325 ; WX 602 ; N uni2085 ; G 1881
U 8326 ; WX 602 ; N uni2086 ; G 1882
U 8327 ; WX 602 ; N uni2087 ; G 1883
U 8328 ; WX 602 ; N uni2088 ; G 1884
U 8329 ; WX 602 ; N uni2089 ; G 1885
U 8330 ; WX 602 ; N uni208A ; G 1886
U 8331 ; WX 602 ; N uni208B ; G 1887
U 8332 ; WX 602 ; N uni208C ; G 1888
U 8333 ; WX 602 ; N uni208D ; G 1889
U 8334 ; WX 602 ; N uni208E ; G 1890
U 8336 ; WX 602 ; N uni2090 ; G 1891
U 8337 ; WX 602 ; N uni2091 ; G 1892
U 8338 ; WX 602 ; N uni2092 ; G 1893
U 8339 ; WX 602 ; N uni2093 ; G 1894
U 8340 ; WX 602 ; N uni2094 ; G 1895
U 8341 ; WX 602 ; N uni2095 ; G 1896
U 8342 ; WX 602 ; N uni2096 ; G 1897
U 8343 ; WX 602 ; N uni2097 ; G 1898
U 8344 ; WX 602 ; N uni2098 ; G 1899
U 8345 ; WX 602 ; N uni2099 ; G 1900
U 8346 ; WX 602 ; N uni209A ; G 1901
U 8347 ; WX 602 ; N uni209B ; G 1902
U 8348 ; WX 602 ; N uni209C ; G 1903
U 8352 ; WX 602 ; N uni20A0 ; G 1904
U 8353 ; WX 602 ; N colonmonetary ; G 1905
U 8354 ; WX 602 ; N uni20A2 ; G 1906
U 8355 ; WX 602 ; N franc ; G 1907
U 8356 ; WX 602 ; N lira ; G 1908
U 8357 ; WX 602 ; N uni20A5 ; G 1909
U 8358 ; WX 602 ; N uni20A6 ; G 1910
U 8359 ; WX 602 ; N peseta ; G 1911
U 8360 ; WX 602 ; N uni20A8 ; G 1912
U 8361 ; WX 602 ; N uni20A9 ; G 1913
U 8362 ; WX 602 ; N uni20AA ; G 1914
U 8363 ; WX 602 ; N dong ; G 1915
U 8364 ; WX 602 ; N Euro ; G 1916
U 8365 ; WX 602 ; N uni20AD ; G 1917
U 8366 ; WX 602 ; N uni20AE ; G 1918
U 8367 ; WX 602 ; N uni20AF ; G 1919
U 8368 ; WX 602 ; N uni20B0 ; G 1920
U 8369 ; WX 602 ; N uni20B1 ; G 1921
U 8370 ; WX 602 ; N uni20B2 ; G 1922
U 8371 ; WX 602 ; N uni20B3 ; G 1923
U 8372 ; WX 602 ; N uni20B4 ; G 1924
U 8373 ; WX 602 ; N uni20B5 ; G 1925
U 8376 ; WX 602 ; N uni20B8 ; G 1926
U 8377 ; WX 602 ; N uni20B9 ; G 1927
U 8378 ; WX 602 ; N uni20BA ; G 1928
U 8381 ; WX 602 ; N uni20BD ; G 1929
U 8450 ; WX 602 ; N uni2102 ; G 1930
U 8453 ; WX 602 ; N uni2105 ; G 1931
U 8461 ; WX 602 ; N uni210D ; G 1932
U 8462 ; WX 602 ; N uni210E ; G 1933
U 8463 ; WX 602 ; N uni210F ; G 1934
U 8469 ; WX 602 ; N uni2115 ; G 1935
U 8470 ; WX 602 ; N uni2116 ; G 1936
U 8471 ; WX 602 ; N uni2117 ; G 1937
U 8473 ; WX 602 ; N uni2119 ; G 1938
U 8474 ; WX 602 ; N uni211A ; G 1939
U 8477 ; WX 602 ; N uni211D ; G 1940
U 8482 ; WX 602 ; N trademark ; G 1941
U 8484 ; WX 602 ; N uni2124 ; G 1942
U 8486 ; WX 602 ; N uni2126 ; G 1943
U 8490 ; WX 602 ; N uni212A ; G 1944
U 8491 ; WX 602 ; N uni212B ; G 1945
U 8494 ; WX 602 ; N estimated ; G 1946
U 8520 ; WX 602 ; N uni2148 ; G 1947
U 8528 ; WX 602 ; N uni2150 ; G 1948
U 8529 ; WX 602 ; N uni2151 ; G 1949
U 8531 ; WX 602 ; N onethird ; G 1950
U 8532 ; WX 602 ; N twothirds ; G 1951
U 8533 ; WX 602 ; N uni2155 ; G 1952
U 8534 ; WX 602 ; N uni2156 ; G 1953
U 8535 ; WX 602 ; N uni2157 ; G 1954
U 8536 ; WX 602 ; N uni2158 ; G 1955
U 8537 ; WX 602 ; N uni2159 ; G 1956
U 8538 ; WX 602 ; N uni215A ; G 1957
U 8539 ; WX 602 ; N oneeighth ; G 1958
U 8540 ; WX 602 ; N threeeighths ; G 1959
U 8541 ; WX 602 ; N fiveeighths ; G 1960
U 8542 ; WX 602 ; N seveneighths ; G 1961
U 8543 ; WX 602 ; N uni215F ; G 1962
U 8585 ; WX 602 ; N uni2189 ; G 1963
U 8592 ; WX 602 ; N arrowleft ; G 1964
U 8593 ; WX 602 ; N arrowup ; G 1965
U 8594 ; WX 602 ; N arrowright ; G 1966
U 8595 ; WX 602 ; N arrowdown ; G 1967
U 8596 ; WX 602 ; N arrowboth ; G 1968
U 8597 ; WX 602 ; N arrowupdn ; G 1969
U 8598 ; WX 602 ; N uni2196 ; G 1970
U 8599 ; WX 602 ; N uni2197 ; G 1971
U 8600 ; WX 602 ; N uni2198 ; G 1972
U 8601 ; WX 602 ; N uni2199 ; G 1973
U 8602 ; WX 602 ; N uni219A ; G 1974
U 8603 ; WX 602 ; N uni219B ; G 1975
U 8604 ; WX 602 ; N uni219C ; G 1976
U 8605 ; WX 602 ; N uni219D ; G 1977
U 8606 ; WX 602 ; N uni219E ; G 1978
U 8607 ; WX 602 ; N uni219F ; G 1979
U 8608 ; WX 602 ; N uni21A0 ; G 1980
U 8609 ; WX 602 ; N uni21A1 ; G 1981
U 8610 ; WX 602 ; N uni21A2 ; G 1982
U 8611 ; WX 602 ; N uni21A3 ; G 1983
U 8612 ; WX 602 ; N uni21A4 ; G 1984
U 8613 ; WX 602 ; N uni21A5 ; G 1985
U 8614 ; WX 602 ; N uni21A6 ; G 1986
U 8615 ; WX 602 ; N uni21A7 ; G 1987
U 8616 ; WX 602 ; N arrowupdnbse ; G 1988
U 8617 ; WX 602 ; N uni21A9 ; G 1989
U 8618 ; WX 602 ; N uni21AA ; G 1990
U 8619 ; WX 602 ; N uni21AB ; G 1991
U 8620 ; WX 602 ; N uni21AC ; G 1992
U 8621 ; WX 602 ; N uni21AD ; G 1993
U 8622 ; WX 602 ; N uni21AE ; G 1994
U 8623 ; WX 602 ; N uni21AF ; G 1995
U 8624 ; WX 602 ; N uni21B0 ; G 1996
U 8625 ; WX 602 ; N uni21B1 ; G 1997
U 8626 ; WX 602 ; N uni21B2 ; G 1998
U 8627 ; WX 602 ; N uni21B3 ; G 1999
U 8628 ; WX 602 ; N uni21B4 ; G 2000
U 8629 ; WX 602 ; N carriagereturn ; G 2001
U 8630 ; WX 602 ; N uni21B6 ; G 2002
U 8631 ; WX 602 ; N uni21B7 ; G 2003
U 8632 ; WX 602 ; N uni21B8 ; G 2004
U 8633 ; WX 602 ; N uni21B9 ; G 2005
U 8634 ; WX 602 ; N uni21BA ; G 2006
U 8635 ; WX 602 ; N uni21BB ; G 2007
U 8636 ; WX 602 ; N uni21BC ; G 2008
U 8637 ; WX 602 ; N uni21BD ; G 2009
U 8638 ; WX 602 ; N uni21BE ; G 2010
U 8639 ; WX 602 ; N uni21BF ; G 2011
U 8640 ; WX 602 ; N uni21C0 ; G 2012
U 8641 ; WX 602 ; N uni21C1 ; G 2013
U 8642 ; WX 602 ; N uni21C2 ; G 2014
U 8643 ; WX 602 ; N uni21C3 ; G 2015
U 8644 ; WX 602 ; N uni21C4 ; G 2016
U 8645 ; WX 602 ; N uni21C5 ; G 2017
U 8646 ; WX 602 ; N uni21C6 ; G 2018
U 8647 ; WX 602 ; N uni21C7 ; G 2019
U 8648 ; WX 602 ; N uni21C8 ; G 2020
U 8649 ; WX 602 ; N uni21C9 ; G 2021
U 8650 ; WX 602 ; N uni21CA ; G 2022
U 8651 ; WX 602 ; N uni21CB ; G 2023
U 8652 ; WX 602 ; N uni21CC ; G 2024
U 8653 ; WX 602 ; N uni21CD ; G 2025
U 8654 ; WX 602 ; N uni21CE ; G 2026
U 8655 ; WX 602 ; N uni21CF ; G 2027
U 8656 ; WX 602 ; N arrowdblleft ; G 2028
U 8657 ; WX 602 ; N arrowdblup ; G 2029
U 8658 ; WX 602 ; N arrowdblright ; G 2030
U 8659 ; WX 602 ; N arrowdbldown ; G 2031
U 8660 ; WX 602 ; N arrowdblboth ; G 2032
U 8661 ; WX 602 ; N uni21D5 ; G 2033
U 8662 ; WX 602 ; N uni21D6 ; G 2034
U 8663 ; WX 602 ; N uni21D7 ; G 2035
U 8664 ; WX 602 ; N uni21D8 ; G 2036
U 8665 ; WX 602 ; N uni21D9 ; G 2037
U 8666 ; WX 602 ; N uni21DA ; G 2038
U 8667 ; WX 602 ; N uni21DB ; G 2039
U 8668 ; WX 602 ; N uni21DC ; G 2040
U 8669 ; WX 602 ; N uni21DD ; G 2041
U 8670 ; WX 602 ; N uni21DE ; G 2042
U 8671 ; WX 602 ; N uni21DF ; G 2043
U 8672 ; WX 602 ; N uni21E0 ; G 2044
U 8673 ; WX 602 ; N uni21E1 ; G 2045
U 8674 ; WX 602 ; N uni21E2 ; G 2046
U 8675 ; WX 602 ; N uni21E3 ; G 2047
U 8676 ; WX 602 ; N uni21E4 ; G 2048
U 8677 ; WX 602 ; N uni21E5 ; G 2049
U 8678 ; WX 602 ; N uni21E6 ; G 2050
U 8679 ; WX 602 ; N uni21E7 ; G 2051
U 8680 ; WX 602 ; N uni21E8 ; G 2052
U 8681 ; WX 602 ; N uni21E9 ; G 2053
U 8682 ; WX 602 ; N uni21EA ; G 2054
U 8683 ; WX 602 ; N uni21EB ; G 2055
U 8684 ; WX 602 ; N uni21EC ; G 2056
U 8685 ; WX 602 ; N uni21ED ; G 2057
U 8686 ; WX 602 ; N uni21EE ; G 2058
U 8687 ; WX 602 ; N uni21EF ; G 2059
U 8688 ; WX 602 ; N uni21F0 ; G 2060
U 8689 ; WX 602 ; N uni21F1 ; G 2061
U 8690 ; WX 602 ; N uni21F2 ; G 2062
U 8691 ; WX 602 ; N uni21F3 ; G 2063
U 8692 ; WX 602 ; N uni21F4 ; G 2064
U 8693 ; WX 602 ; N uni21F5 ; G 2065
U 8694 ; WX 602 ; N uni21F6 ; G 2066
U 8695 ; WX 602 ; N uni21F7 ; G 2067
U 8696 ; WX 602 ; N uni21F8 ; G 2068
U 8697 ; WX 602 ; N uni21F9 ; G 2069
U 8698 ; WX 602 ; N uni21FA ; G 2070
U 8699 ; WX 602 ; N uni21FB ; G 2071
U 8700 ; WX 602 ; N uni21FC ; G 2072
U 8701 ; WX 602 ; N uni21FD ; G 2073
U 8702 ; WX 602 ; N uni21FE ; G 2074
U 8703 ; WX 602 ; N uni21FF ; G 2075
U 8704 ; WX 602 ; N universal ; G 2076
U 8705 ; WX 602 ; N uni2201 ; G 2077
U 8706 ; WX 602 ; N partialdiff ; G 2078
U 8707 ; WX 602 ; N existential ; G 2079
U 8708 ; WX 602 ; N uni2204 ; G 2080
U 8709 ; WX 602 ; N emptyset ; G 2081
U 8710 ; WX 602 ; N increment ; G 2082
U 8711 ; WX 602 ; N gradient ; G 2083
U 8712 ; WX 602 ; N element ; G 2084
U 8713 ; WX 602 ; N notelement ; G 2085
U 8714 ; WX 602 ; N uni220A ; G 2086
U 8715 ; WX 602 ; N suchthat ; G 2087
U 8716 ; WX 602 ; N uni220C ; G 2088
U 8717 ; WX 602 ; N uni220D ; G 2089
U 8718 ; WX 602 ; N uni220E ; G 2090
U 8719 ; WX 602 ; N product ; G 2091
U 8720 ; WX 602 ; N uni2210 ; G 2092
U 8721 ; WX 602 ; N summation ; G 2093
U 8722 ; WX 602 ; N minus ; G 2094
U 8723 ; WX 602 ; N uni2213 ; G 2095
U 8725 ; WX 602 ; N uni2215 ; G 2096
U 8727 ; WX 602 ; N asteriskmath ; G 2097
U 8728 ; WX 602 ; N uni2218 ; G 2098
U 8729 ; WX 602 ; N uni2219 ; G 2099
U 8730 ; WX 602 ; N radical ; G 2100
U 8731 ; WX 602 ; N uni221B ; G 2101
U 8732 ; WX 602 ; N uni221C ; G 2102
U 8733 ; WX 602 ; N proportional ; G 2103
U 8734 ; WX 602 ; N infinity ; G 2104
U 8735 ; WX 602 ; N orthogonal ; G 2105
U 8736 ; WX 602 ; N angle ; G 2106
U 8739 ; WX 602 ; N uni2223 ; G 2107
U 8743 ; WX 602 ; N logicaland ; G 2108
U 8744 ; WX 602 ; N logicalor ; G 2109
U 8745 ; WX 602 ; N intersection ; G 2110
U 8746 ; WX 602 ; N union ; G 2111
U 8747 ; WX 602 ; N integral ; G 2112
U 8748 ; WX 602 ; N uni222C ; G 2113
U 8749 ; WX 602 ; N uni222D ; G 2114
U 8756 ; WX 602 ; N therefore ; G 2115
U 8757 ; WX 602 ; N uni2235 ; G 2116
U 8758 ; WX 602 ; N uni2236 ; G 2117
U 8759 ; WX 602 ; N uni2237 ; G 2118
U 8760 ; WX 602 ; N uni2238 ; G 2119
U 8761 ; WX 602 ; N uni2239 ; G 2120
U 8762 ; WX 602 ; N uni223A ; G 2121
U 8763 ; WX 602 ; N uni223B ; G 2122
U 8764 ; WX 602 ; N similar ; G 2123
U 8765 ; WX 602 ; N uni223D ; G 2124
U 8769 ; WX 602 ; N uni2241 ; G 2125
U 8770 ; WX 602 ; N uni2242 ; G 2126
U 8771 ; WX 602 ; N uni2243 ; G 2127
U 8772 ; WX 602 ; N uni2244 ; G 2128
U 8773 ; WX 602 ; N congruent ; G 2129
U 8774 ; WX 602 ; N uni2246 ; G 2130
U 8775 ; WX 602 ; N uni2247 ; G 2131
U 8776 ; WX 602 ; N approxequal ; G 2132
U 8777 ; WX 602 ; N uni2249 ; G 2133
U 8778 ; WX 602 ; N uni224A ; G 2134
U 8779 ; WX 602 ; N uni224B ; G 2135
U 8780 ; WX 602 ; N uni224C ; G 2136
U 8781 ; WX 602 ; N uni224D ; G 2137
U 8782 ; WX 602 ; N uni224E ; G 2138
U 8783 ; WX 602 ; N uni224F ; G 2139
U 8784 ; WX 602 ; N uni2250 ; G 2140
U 8785 ; WX 602 ; N uni2251 ; G 2141
U 8786 ; WX 602 ; N uni2252 ; G 2142
U 8787 ; WX 602 ; N uni2253 ; G 2143
U 8788 ; WX 602 ; N uni2254 ; G 2144
U 8789 ; WX 602 ; N uni2255 ; G 2145
U 8790 ; WX 602 ; N uni2256 ; G 2146
U 8791 ; WX 602 ; N uni2257 ; G 2147
U 8792 ; WX 602 ; N uni2258 ; G 2148
U 8793 ; WX 602 ; N uni2259 ; G 2149
U 8794 ; WX 602 ; N uni225A ; G 2150
U 8795 ; WX 602 ; N uni225B ; G 2151
U 8796 ; WX 602 ; N uni225C ; G 2152
U 8797 ; WX 602 ; N uni225D ; G 2153
U 8798 ; WX 602 ; N uni225E ; G 2154
U 8799 ; WX 602 ; N uni225F ; G 2155
U 8800 ; WX 602 ; N notequal ; G 2156
U 8801 ; WX 602 ; N equivalence ; G 2157
U 8802 ; WX 602 ; N uni2262 ; G 2158
U 8803 ; WX 602 ; N uni2263 ; G 2159
U 8804 ; WX 602 ; N lessequal ; G 2160
U 8805 ; WX 602 ; N greaterequal ; G 2161
U 8806 ; WX 602 ; N uni2266 ; G 2162
U 8807 ; WX 602 ; N uni2267 ; G 2163
U 8808 ; WX 602 ; N uni2268 ; G 2164
U 8809 ; WX 602 ; N uni2269 ; G 2165
U 8813 ; WX 602 ; N uni226D ; G 2166
U 8814 ; WX 602 ; N uni226E ; G 2167
U 8815 ; WX 602 ; N uni226F ; G 2168
U 8816 ; WX 602 ; N uni2270 ; G 2169
U 8817 ; WX 602 ; N uni2271 ; G 2170
U 8818 ; WX 602 ; N uni2272 ; G 2171
U 8819 ; WX 602 ; N uni2273 ; G 2172
U 8820 ; WX 602 ; N uni2274 ; G 2173
U 8821 ; WX 602 ; N uni2275 ; G 2174
U 8822 ; WX 602 ; N uni2276 ; G 2175
U 8823 ; WX 602 ; N uni2277 ; G 2176
U 8824 ; WX 602 ; N uni2278 ; G 2177
U 8825 ; WX 602 ; N uni2279 ; G 2178
U 8826 ; WX 602 ; N uni227A ; G 2179
U 8827 ; WX 602 ; N uni227B ; G 2180
U 8828 ; WX 602 ; N uni227C ; G 2181
U 8829 ; WX 602 ; N uni227D ; G 2182
U 8830 ; WX 602 ; N uni227E ; G 2183
U 8831 ; WX 602 ; N uni227F ; G 2184
U 8832 ; WX 602 ; N uni2280 ; G 2185
U 8833 ; WX 602 ; N uni2281 ; G 2186
U 8834 ; WX 602 ; N propersubset ; G 2187
U 8835 ; WX 602 ; N propersuperset ; G 2188
U 8836 ; WX 602 ; N notsubset ; G 2189
U 8837 ; WX 602 ; N uni2285 ; G 2190
U 8838 ; WX 602 ; N reflexsubset ; G 2191
U 8839 ; WX 602 ; N reflexsuperset ; G 2192
U 8840 ; WX 602 ; N uni2288 ; G 2193
U 8841 ; WX 602 ; N uni2289 ; G 2194
U 8842 ; WX 602 ; N uni228A ; G 2195
U 8843 ; WX 602 ; N uni228B ; G 2196
U 8845 ; WX 602 ; N uni228D ; G 2197
U 8846 ; WX 602 ; N uni228E ; G 2198
U 8847 ; WX 602 ; N uni228F ; G 2199
U 8848 ; WX 602 ; N uni2290 ; G 2200
U 8849 ; WX 602 ; N uni2291 ; G 2201
U 8850 ; WX 602 ; N uni2292 ; G 2202
U 8851 ; WX 602 ; N uni2293 ; G 2203
U 8852 ; WX 602 ; N uni2294 ; G 2204
U 8853 ; WX 602 ; N circleplus ; G 2205
U 8854 ; WX 602 ; N uni2296 ; G 2206
U 8855 ; WX 602 ; N circlemultiply ; G 2207
U 8856 ; WX 602 ; N uni2298 ; G 2208
U 8857 ; WX 602 ; N uni2299 ; G 2209
U 8858 ; WX 602 ; N uni229A ; G 2210
U 8859 ; WX 602 ; N uni229B ; G 2211
U 8860 ; WX 602 ; N uni229C ; G 2212
U 8861 ; WX 602 ; N uni229D ; G 2213
U 8862 ; WX 602 ; N uni229E ; G 2214
U 8863 ; WX 602 ; N uni229F ; G 2215
U 8864 ; WX 602 ; N uni22A0 ; G 2216
U 8865 ; WX 602 ; N uni22A1 ; G 2217
U 8866 ; WX 602 ; N uni22A2 ; G 2218
U 8867 ; WX 602 ; N uni22A3 ; G 2219
U 8868 ; WX 602 ; N uni22A4 ; G 2220
U 8869 ; WX 602 ; N perpendicular ; G 2221
U 8882 ; WX 602 ; N uni22B2 ; G 2222
U 8883 ; WX 602 ; N uni22B3 ; G 2223
U 8884 ; WX 602 ; N uni22B4 ; G 2224
U 8885 ; WX 602 ; N uni22B5 ; G 2225
U 8888 ; WX 602 ; N uni22B8 ; G 2226
U 8898 ; WX 602 ; N uni22C2 ; G 2227
U 8899 ; WX 602 ; N uni22C3 ; G 2228
U 8900 ; WX 602 ; N uni22C4 ; G 2229
U 8901 ; WX 602 ; N dotmath ; G 2230
U 8902 ; WX 602 ; N uni22C6 ; G 2231
U 8909 ; WX 602 ; N uni22CD ; G 2232
U 8910 ; WX 602 ; N uni22CE ; G 2233
U 8911 ; WX 602 ; N uni22CF ; G 2234
U 8912 ; WX 602 ; N uni22D0 ; G 2235
U 8913 ; WX 602 ; N uni22D1 ; G 2236
U 8922 ; WX 602 ; N uni22DA ; G 2237
U 8923 ; WX 602 ; N uni22DB ; G 2238
U 8924 ; WX 602 ; N uni22DC ; G 2239
U 8925 ; WX 602 ; N uni22DD ; G 2240
U 8926 ; WX 602 ; N uni22DE ; G 2241
U 8927 ; WX 602 ; N uni22DF ; G 2242
U 8928 ; WX 602 ; N uni22E0 ; G 2243
U 8929 ; WX 602 ; N uni22E1 ; G 2244
U 8930 ; WX 602 ; N uni22E2 ; G 2245
U 8931 ; WX 602 ; N uni22E3 ; G 2246
U 8932 ; WX 602 ; N uni22E4 ; G 2247
U 8933 ; WX 602 ; N uni22E5 ; G 2248
U 8934 ; WX 602 ; N uni22E6 ; G 2249
U 8935 ; WX 602 ; N uni22E7 ; G 2250
U 8936 ; WX 602 ; N uni22E8 ; G 2251
U 8937 ; WX 602 ; N uni22E9 ; G 2252
U 8943 ; WX 602 ; N uni22EF ; G 2253
U 8960 ; WX 602 ; N uni2300 ; G 2254
U 8961 ; WX 602 ; N uni2301 ; G 2255
U 8962 ; WX 602 ; N house ; G 2256
U 8963 ; WX 602 ; N uni2303 ; G 2257
U 8964 ; WX 602 ; N uni2304 ; G 2258
U 8965 ; WX 602 ; N uni2305 ; G 2259
U 8966 ; WX 602 ; N uni2306 ; G 2260
U 8968 ; WX 602 ; N uni2308 ; G 2261
U 8969 ; WX 602 ; N uni2309 ; G 2262
U 8970 ; WX 602 ; N uni230A ; G 2263
U 8971 ; WX 602 ; N uni230B ; G 2264
U 8972 ; WX 602 ; N uni230C ; G 2265
U 8973 ; WX 602 ; N uni230D ; G 2266
U 8974 ; WX 602 ; N uni230E ; G 2267
U 8975 ; WX 602 ; N uni230F ; G 2268
U 8976 ; WX 602 ; N revlogicalnot ; G 2269
U 8977 ; WX 602 ; N uni2311 ; G 2270
U 8978 ; WX 602 ; N uni2312 ; G 2271
U 8979 ; WX 602 ; N uni2313 ; G 2272
U 8980 ; WX 602 ; N uni2314 ; G 2273
U 8981 ; WX 602 ; N uni2315 ; G 2274
U 8984 ; WX 602 ; N uni2318 ; G 2275
U 8985 ; WX 602 ; N uni2319 ; G 2276
U 8988 ; WX 602 ; N uni231C ; G 2277
U 8989 ; WX 602 ; N uni231D ; G 2278
U 8990 ; WX 602 ; N uni231E ; G 2279
U 8991 ; WX 602 ; N uni231F ; G 2280
U 8992 ; WX 602 ; N integraltp ; G 2281
U 8993 ; WX 602 ; N integralbt ; G 2282
U 8997 ; WX 602 ; N uni2325 ; G 2283
U 8998 ; WX 602 ; N uni2326 ; G 2284
U 8999 ; WX 602 ; N uni2327 ; G 2285
U 9000 ; WX 602 ; N uni2328 ; G 2286
U 9003 ; WX 602 ; N uni232B ; G 2287
U 9013 ; WX 602 ; N uni2335 ; G 2288
U 9014 ; WX 602 ; N uni2336 ; G 2289
U 9015 ; WX 602 ; N uni2337 ; G 2290
U 9016 ; WX 602 ; N uni2338 ; G 2291
U 9017 ; WX 602 ; N uni2339 ; G 2292
U 9018 ; WX 602 ; N uni233A ; G 2293
U 9019 ; WX 602 ; N uni233B ; G 2294
U 9020 ; WX 602 ; N uni233C ; G 2295
U 9021 ; WX 602 ; N uni233D ; G 2296
U 9022 ; WX 602 ; N uni233E ; G 2297
U 9023 ; WX 602 ; N uni233F ; G 2298
U 9024 ; WX 602 ; N uni2340 ; G 2299
U 9025 ; WX 602 ; N uni2341 ; G 2300
U 9026 ; WX 602 ; N uni2342 ; G 2301
U 9027 ; WX 602 ; N uni2343 ; G 2302
U 9028 ; WX 602 ; N uni2344 ; G 2303
U 9029 ; WX 602 ; N uni2345 ; G 2304
U 9030 ; WX 602 ; N uni2346 ; G 2305
U 9031 ; WX 602 ; N uni2347 ; G 2306
U 9032 ; WX 602 ; N uni2348 ; G 2307
U 9033 ; WX 602 ; N uni2349 ; G 2308
U 9034 ; WX 602 ; N uni234A ; G 2309
U 9035 ; WX 602 ; N uni234B ; G 2310
U 9036 ; WX 602 ; N uni234C ; G 2311
U 9037 ; WX 602 ; N uni234D ; G 2312
U 9038 ; WX 602 ; N uni234E ; G 2313
U 9039 ; WX 602 ; N uni234F ; G 2314
U 9040 ; WX 602 ; N uni2350 ; G 2315
U 9041 ; WX 602 ; N uni2351 ; G 2316
U 9042 ; WX 602 ; N uni2352 ; G 2317
U 9043 ; WX 602 ; N uni2353 ; G 2318
U 9044 ; WX 602 ; N uni2354 ; G 2319
U 9045 ; WX 602 ; N uni2355 ; G 2320
U 9046 ; WX 602 ; N uni2356 ; G 2321
U 9047 ; WX 602 ; N uni2357 ; G 2322
U 9048 ; WX 602 ; N uni2358 ; G 2323
U 9049 ; WX 602 ; N uni2359 ; G 2324
U 9050 ; WX 602 ; N uni235A ; G 2325
U 9051 ; WX 602 ; N uni235B ; G 2326
U 9052 ; WX 602 ; N uni235C ; G 2327
U 9053 ; WX 602 ; N uni235D ; G 2328
U 9054 ; WX 602 ; N uni235E ; G 2329
U 9055 ; WX 602 ; N uni235F ; G 2330
U 9056 ; WX 602 ; N uni2360 ; G 2331
U 9057 ; WX 602 ; N uni2361 ; G 2332
U 9058 ; WX 602 ; N uni2362 ; G 2333
U 9059 ; WX 602 ; N uni2363 ; G 2334
U 9060 ; WX 602 ; N uni2364 ; G 2335
U 9061 ; WX 602 ; N uni2365 ; G 2336
U 9062 ; WX 602 ; N uni2366 ; G 2337
U 9063 ; WX 602 ; N uni2367 ; G 2338
U 9064 ; WX 602 ; N uni2368 ; G 2339
U 9065 ; WX 602 ; N uni2369 ; G 2340
U 9066 ; WX 602 ; N uni236A ; G 2341
U 9067 ; WX 602 ; N uni236B ; G 2342
U 9068 ; WX 602 ; N uni236C ; G 2343
U 9069 ; WX 602 ; N uni236D ; G 2344
U 9070 ; WX 602 ; N uni236E ; G 2345
U 9071 ; WX 602 ; N uni236F ; G 2346
U 9072 ; WX 602 ; N uni2370 ; G 2347
U 9073 ; WX 602 ; N uni2371 ; G 2348
U 9074 ; WX 602 ; N uni2372 ; G 2349
U 9075 ; WX 602 ; N uni2373 ; G 2350
U 9076 ; WX 602 ; N uni2374 ; G 2351
U 9077 ; WX 602 ; N uni2375 ; G 2352
U 9078 ; WX 602 ; N uni2376 ; G 2353
U 9079 ; WX 602 ; N uni2377 ; G 2354
U 9080 ; WX 602 ; N uni2378 ; G 2355
U 9081 ; WX 602 ; N uni2379 ; G 2356
U 9082 ; WX 602 ; N uni237A ; G 2357
U 9085 ; WX 602 ; N uni237D ; G 2358
U 9088 ; WX 602 ; N uni2380 ; G 2359
U 9089 ; WX 602 ; N uni2381 ; G 2360
U 9090 ; WX 602 ; N uni2382 ; G 2361
U 9091 ; WX 602 ; N uni2383 ; G 2362
U 9096 ; WX 602 ; N uni2388 ; G 2363
U 9097 ; WX 602 ; N uni2389 ; G 2364
U 9098 ; WX 602 ; N uni238A ; G 2365
U 9099 ; WX 602 ; N uni238B ; G 2366
U 9109 ; WX 602 ; N uni2395 ; G 2367
U 9115 ; WX 602 ; N uni239B ; G 2368
U 9116 ; WX 602 ; N uni239C ; G 2369
U 9117 ; WX 602 ; N uni239D ; G 2370
U 9118 ; WX 602 ; N uni239E ; G 2371
U 9119 ; WX 602 ; N uni239F ; G 2372
U 9120 ; WX 602 ; N uni23A0 ; G 2373
U 9121 ; WX 602 ; N uni23A1 ; G 2374
U 9122 ; WX 602 ; N uni23A2 ; G 2375
U 9123 ; WX 602 ; N uni23A3 ; G 2376
U 9124 ; WX 602 ; N uni23A4 ; G 2377
U 9125 ; WX 602 ; N uni23A5 ; G 2378
U 9126 ; WX 602 ; N uni23A6 ; G 2379
U 9127 ; WX 602 ; N uni23A7 ; G 2380
U 9128 ; WX 602 ; N uni23A8 ; G 2381
U 9129 ; WX 602 ; N uni23A9 ; G 2382
U 9130 ; WX 602 ; N uni23AA ; G 2383
U 9131 ; WX 602 ; N uni23AB ; G 2384
U 9132 ; WX 602 ; N uni23AC ; G 2385
U 9133 ; WX 602 ; N uni23AD ; G 2386
U 9134 ; WX 602 ; N uni23AE ; G 2387
U 9166 ; WX 602 ; N uni23CE ; G 2388
U 9167 ; WX 602 ; N uni23CF ; G 2389
U 9251 ; WX 602 ; N uni2423 ; G 2390
U 9472 ; WX 602 ; N SF100000 ; G 2391
U 9473 ; WX 602 ; N uni2501 ; G 2392
U 9474 ; WX 602 ; N SF110000 ; G 2393
U 9475 ; WX 602 ; N uni2503 ; G 2394
U 9476 ; WX 602 ; N uni2504 ; G 2395
U 9477 ; WX 602 ; N uni2505 ; G 2396
U 9478 ; WX 602 ; N uni2506 ; G 2397
U 9479 ; WX 602 ; N uni2507 ; G 2398
U 9480 ; WX 602 ; N uni2508 ; G 2399
U 9481 ; WX 602 ; N uni2509 ; G 2400
U 9482 ; WX 602 ; N uni250A ; G 2401
U 9483 ; WX 602 ; N uni250B ; G 2402
U 9484 ; WX 602 ; N SF010000 ; G 2403
U 9485 ; WX 602 ; N uni250D ; G 2404
U 9486 ; WX 602 ; N uni250E ; G 2405
U 9487 ; WX 602 ; N uni250F ; G 2406
U 9488 ; WX 602 ; N SF030000 ; G 2407
U 9489 ; WX 602 ; N uni2511 ; G 2408
U 9490 ; WX 602 ; N uni2512 ; G 2409
U 9491 ; WX 602 ; N uni2513 ; G 2410
U 9492 ; WX 602 ; N SF020000 ; G 2411
U 9493 ; WX 602 ; N uni2515 ; G 2412
U 9494 ; WX 602 ; N uni2516 ; G 2413
U 9495 ; WX 602 ; N uni2517 ; G 2414
U 9496 ; WX 602 ; N SF040000 ; G 2415
U 9497 ; WX 602 ; N uni2519 ; G 2416
U 9498 ; WX 602 ; N uni251A ; G 2417
U 9499 ; WX 602 ; N uni251B ; G 2418
U 9500 ; WX 602 ; N SF080000 ; G 2419
U 9501 ; WX 602 ; N uni251D ; G 2420
U 9502 ; WX 602 ; N uni251E ; G 2421
U 9503 ; WX 602 ; N uni251F ; G 2422
U 9504 ; WX 602 ; N uni2520 ; G 2423
U 9505 ; WX 602 ; N uni2521 ; G 2424
U 9506 ; WX 602 ; N uni2522 ; G 2425
U 9507 ; WX 602 ; N uni2523 ; G 2426
U 9508 ; WX 602 ; N SF090000 ; G 2427
U 9509 ; WX 602 ; N uni2525 ; G 2428
U 9510 ; WX 602 ; N uni2526 ; G 2429
U 9511 ; WX 602 ; N uni2527 ; G 2430
U 9512 ; WX 602 ; N uni2528 ; G 2431
U 9513 ; WX 602 ; N uni2529 ; G 2432
U 9514 ; WX 602 ; N uni252A ; G 2433
U 9515 ; WX 602 ; N uni252B ; G 2434
U 9516 ; WX 602 ; N SF060000 ; G 2435
U 9517 ; WX 602 ; N uni252D ; G 2436
U 9518 ; WX 602 ; N uni252E ; G 2437
U 9519 ; WX 602 ; N uni252F ; G 2438
U 9520 ; WX 602 ; N uni2530 ; G 2439
U 9521 ; WX 602 ; N uni2531 ; G 2440
U 9522 ; WX 602 ; N uni2532 ; G 2441
U 9523 ; WX 602 ; N uni2533 ; G 2442
U 9524 ; WX 602 ; N SF070000 ; G 2443
U 9525 ; WX 602 ; N uni2535 ; G 2444
U 9526 ; WX 602 ; N uni2536 ; G 2445
U 9527 ; WX 602 ; N uni2537 ; G 2446
U 9528 ; WX 602 ; N uni2538 ; G 2447
U 9529 ; WX 602 ; N uni2539 ; G 2448
U 9530 ; WX 602 ; N uni253A ; G 2449
U 9531 ; WX 602 ; N uni253B ; G 2450
U 9532 ; WX 602 ; N SF050000 ; G 2451
U 9533 ; WX 602 ; N uni253D ; G 2452
U 9534 ; WX 602 ; N uni253E ; G 2453
U 9535 ; WX 602 ; N uni253F ; G 2454
U 9536 ; WX 602 ; N uni2540 ; G 2455
U 9537 ; WX 602 ; N uni2541 ; G 2456
U 9538 ; WX 602 ; N uni2542 ; G 2457
U 9539 ; WX 602 ; N uni2543 ; G 2458
U 9540 ; WX 602 ; N uni2544 ; G 2459
U 9541 ; WX 602 ; N uni2545 ; G 2460
U 9542 ; WX 602 ; N uni2546 ; G 2461
U 9543 ; WX 602 ; N uni2547 ; G 2462
U 9544 ; WX 602 ; N uni2548 ; G 2463
U 9545 ; WX 602 ; N uni2549 ; G 2464
U 9546 ; WX 602 ; N uni254A ; G 2465
U 9547 ; WX 602 ; N uni254B ; G 2466
U 9548 ; WX 602 ; N uni254C ; G 2467
U 9549 ; WX 602 ; N uni254D ; G 2468
U 9550 ; WX 602 ; N uni254E ; G 2469
U 9551 ; WX 602 ; N uni254F ; G 2470
U 9552 ; WX 602 ; N SF430000 ; G 2471
U 9553 ; WX 602 ; N SF240000 ; G 2472
U 9554 ; WX 602 ; N SF510000 ; G 2473
U 9555 ; WX 602 ; N SF520000 ; G 2474
U 9556 ; WX 602 ; N SF390000 ; G 2475
U 9557 ; WX 602 ; N SF220000 ; G 2476
U 9558 ; WX 602 ; N SF210000 ; G 2477
U 9559 ; WX 602 ; N SF250000 ; G 2478
U 9560 ; WX 602 ; N SF500000 ; G 2479
U 9561 ; WX 602 ; N SF490000 ; G 2480
U 9562 ; WX 602 ; N SF380000 ; G 2481
U 9563 ; WX 602 ; N SF280000 ; G 2482
U 9564 ; WX 602 ; N SF270000 ; G 2483
U 9565 ; WX 602 ; N SF260000 ; G 2484
U 9566 ; WX 602 ; N SF360000 ; G 2485
U 9567 ; WX 602 ; N SF370000 ; G 2486
U 9568 ; WX 602 ; N SF420000 ; G 2487
U 9569 ; WX 602 ; N SF190000 ; G 2488
U 9570 ; WX 602 ; N SF200000 ; G 2489
U 9571 ; WX 602 ; N SF230000 ; G 2490
U 9572 ; WX 602 ; N SF470000 ; G 2491
U 9573 ; WX 602 ; N SF480000 ; G 2492
U 9574 ; WX 602 ; N SF410000 ; G 2493
U 9575 ; WX 602 ; N SF450000 ; G 2494
U 9576 ; WX 602 ; N SF460000 ; G 2495
U 9577 ; WX 602 ; N SF400000 ; G 2496
U 9578 ; WX 602 ; N SF540000 ; G 2497
U 9579 ; WX 602 ; N SF530000 ; G 2498
U 9580 ; WX 602 ; N SF440000 ; G 2499
U 9581 ; WX 602 ; N uni256D ; G 2500
U 9582 ; WX 602 ; N uni256E ; G 2501
U 9583 ; WX 602 ; N uni256F ; G 2502
U 9584 ; WX 602 ; N uni2570 ; G 2503
U 9585 ; WX 602 ; N uni2571 ; G 2504
U 9586 ; WX 602 ; N uni2572 ; G 2505
U 9587 ; WX 602 ; N uni2573 ; G 2506
U 9588 ; WX 602 ; N uni2574 ; G 2507
U 9589 ; WX 602 ; N uni2575 ; G 2508
U 9590 ; WX 602 ; N uni2576 ; G 2509
U 9591 ; WX 602 ; N uni2577 ; G 2510
U 9592 ; WX 602 ; N uni2578 ; G 2511
U 9593 ; WX 602 ; N uni2579 ; G 2512
U 9594 ; WX 602 ; N uni257A ; G 2513
U 9595 ; WX 602 ; N uni257B ; G 2514
U 9596 ; WX 602 ; N uni257C ; G 2515
U 9597 ; WX 602 ; N uni257D ; G 2516
U 9598 ; WX 602 ; N uni257E ; G 2517
U 9599 ; WX 602 ; N uni257F ; G 2518
U 9600 ; WX 602 ; N upblock ; G 2519
U 9601 ; WX 602 ; N uni2581 ; G 2520
U 9602 ; WX 602 ; N uni2582 ; G 2521
U 9603 ; WX 602 ; N uni2583 ; G 2522
U 9604 ; WX 602 ; N dnblock ; G 2523
U 9605 ; WX 602 ; N uni2585 ; G 2524
U 9606 ; WX 602 ; N uni2586 ; G 2525
U 9607 ; WX 602 ; N uni2587 ; G 2526
U 9608 ; WX 602 ; N block ; G 2527
U 9609 ; WX 602 ; N uni2589 ; G 2528
U 9610 ; WX 602 ; N uni258A ; G 2529
U 9611 ; WX 602 ; N uni258B ; G 2530
U 9612 ; WX 602 ; N lfblock ; G 2531
U 9613 ; WX 602 ; N uni258D ; G 2532
U 9614 ; WX 602 ; N uni258E ; G 2533
U 9615 ; WX 602 ; N uni258F ; G 2534
U 9616 ; WX 602 ; N rtblock ; G 2535
U 9617 ; WX 602 ; N ltshade ; G 2536
U 9618 ; WX 602 ; N shade ; G 2537
U 9619 ; WX 602 ; N dkshade ; G 2538
U 9620 ; WX 602 ; N uni2594 ; G 2539
U 9621 ; WX 602 ; N uni2595 ; G 2540
U 9622 ; WX 602 ; N uni2596 ; G 2541
U 9623 ; WX 602 ; N uni2597 ; G 2542
U 9624 ; WX 602 ; N uni2598 ; G 2543
U 9625 ; WX 602 ; N uni2599 ; G 2544
U 9626 ; WX 602 ; N uni259A ; G 2545
U 9627 ; WX 602 ; N uni259B ; G 2546
U 9628 ; WX 602 ; N uni259C ; G 2547
U 9629 ; WX 602 ; N uni259D ; G 2548
U 9630 ; WX 602 ; N uni259E ; G 2549
U 9631 ; WX 602 ; N uni259F ; G 2550
U 9632 ; WX 602 ; N filledbox ; G 2551
U 9633 ; WX 602 ; N H22073 ; G 2552
U 9634 ; WX 602 ; N uni25A2 ; G 2553
U 9635 ; WX 602 ; N uni25A3 ; G 2554
U 9636 ; WX 602 ; N uni25A4 ; G 2555
U 9637 ; WX 602 ; N uni25A5 ; G 2556
U 9638 ; WX 602 ; N uni25A6 ; G 2557
U 9639 ; WX 602 ; N uni25A7 ; G 2558
U 9640 ; WX 602 ; N uni25A8 ; G 2559
U 9641 ; WX 602 ; N uni25A9 ; G 2560
U 9642 ; WX 602 ; N H18543 ; G 2561
U 9643 ; WX 602 ; N H18551 ; G 2562
U 9644 ; WX 602 ; N filledrect ; G 2563
U 9645 ; WX 602 ; N uni25AD ; G 2564
U 9646 ; WX 602 ; N uni25AE ; G 2565
U 9647 ; WX 602 ; N uni25AF ; G 2566
U 9648 ; WX 602 ; N uni25B0 ; G 2567
U 9649 ; WX 602 ; N uni25B1 ; G 2568
U 9650 ; WX 602 ; N triagup ; G 2569
U 9651 ; WX 602 ; N uni25B3 ; G 2570
U 9652 ; WX 602 ; N uni25B4 ; G 2571
U 9653 ; WX 602 ; N uni25B5 ; G 2572
U 9654 ; WX 602 ; N uni25B6 ; G 2573
U 9655 ; WX 602 ; N uni25B7 ; G 2574
U 9656 ; WX 602 ; N uni25B8 ; G 2575
U 9657 ; WX 602 ; N uni25B9 ; G 2576
U 9658 ; WX 602 ; N triagrt ; G 2577
U 9659 ; WX 602 ; N uni25BB ; G 2578
U 9660 ; WX 602 ; N triagdn ; G 2579
U 9661 ; WX 602 ; N uni25BD ; G 2580
U 9662 ; WX 602 ; N uni25BE ; G 2581
U 9663 ; WX 602 ; N uni25BF ; G 2582
U 9664 ; WX 602 ; N uni25C0 ; G 2583
U 9665 ; WX 602 ; N uni25C1 ; G 2584
U 9666 ; WX 602 ; N uni25C2 ; G 2585
U 9667 ; WX 602 ; N uni25C3 ; G 2586
U 9668 ; WX 602 ; N triaglf ; G 2587
U 9669 ; WX 602 ; N uni25C5 ; G 2588
U 9670 ; WX 602 ; N uni25C6 ; G 2589
U 9671 ; WX 602 ; N uni25C7 ; G 2590
U 9672 ; WX 602 ; N uni25C8 ; G 2591
U 9673 ; WX 602 ; N uni25C9 ; G 2592
U 9674 ; WX 602 ; N lozenge ; G 2593
U 9675 ; WX 602 ; N circle ; G 2594
U 9676 ; WX 602 ; N uni25CC ; G 2595
U 9677 ; WX 602 ; N uni25CD ; G 2596
U 9678 ; WX 602 ; N uni25CE ; G 2597
U 9679 ; WX 602 ; N H18533 ; G 2598
U 9680 ; WX 602 ; N uni25D0 ; G 2599
U 9681 ; WX 602 ; N uni25D1 ; G 2600
U 9682 ; WX 602 ; N uni25D2 ; G 2601
U 9683 ; WX 602 ; N uni25D3 ; G 2602
U 9684 ; WX 602 ; N uni25D4 ; G 2603
U 9685 ; WX 602 ; N uni25D5 ; G 2604
U 9686 ; WX 602 ; N uni25D6 ; G 2605
U 9687 ; WX 602 ; N uni25D7 ; G 2606
U 9688 ; WX 602 ; N invbullet ; G 2607
U 9689 ; WX 602 ; N invcircle ; G 2608
U 9690 ; WX 602 ; N uni25DA ; G 2609
U 9691 ; WX 602 ; N uni25DB ; G 2610
U 9692 ; WX 602 ; N uni25DC ; G 2611
U 9693 ; WX 602 ; N uni25DD ; G 2612
U 9694 ; WX 602 ; N uni25DE ; G 2613
U 9695 ; WX 602 ; N uni25DF ; G 2614
U 9696 ; WX 602 ; N uni25E0 ; G 2615
U 9697 ; WX 602 ; N uni25E1 ; G 2616
U 9698 ; WX 602 ; N uni25E2 ; G 2617
U 9699 ; WX 602 ; N uni25E3 ; G 2618
U 9700 ; WX 602 ; N uni25E4 ; G 2619
U 9701 ; WX 602 ; N uni25E5 ; G 2620
U 9702 ; WX 602 ; N openbullet ; G 2621
U 9703 ; WX 602 ; N uni25E7 ; G 2622
U 9704 ; WX 602 ; N uni25E8 ; G 2623
U 9705 ; WX 602 ; N uni25E9 ; G 2624
U 9706 ; WX 602 ; N uni25EA ; G 2625
U 9707 ; WX 602 ; N uni25EB ; G 2626
U 9708 ; WX 602 ; N uni25EC ; G 2627
U 9709 ; WX 602 ; N uni25ED ; G 2628
U 9710 ; WX 602 ; N uni25EE ; G 2629
U 9711 ; WX 602 ; N uni25EF ; G 2630
U 9712 ; WX 602 ; N uni25F0 ; G 2631
U 9713 ; WX 602 ; N uni25F1 ; G 2632
U 9714 ; WX 602 ; N uni25F2 ; G 2633
U 9715 ; WX 602 ; N uni25F3 ; G 2634
U 9716 ; WX 602 ; N uni25F4 ; G 2635
U 9717 ; WX 602 ; N uni25F5 ; G 2636
U 9718 ; WX 602 ; N uni25F6 ; G 2637
U 9719 ; WX 602 ; N uni25F7 ; G 2638
U 9720 ; WX 602 ; N uni25F8 ; G 2639
U 9721 ; WX 602 ; N uni25F9 ; G 2640
U 9722 ; WX 602 ; N uni25FA ; G 2641
U 9723 ; WX 602 ; N uni25FB ; G 2642
U 9724 ; WX 602 ; N uni25FC ; G 2643
U 9725 ; WX 602 ; N uni25FD ; G 2644
U 9726 ; WX 602 ; N uni25FE ; G 2645
U 9727 ; WX 602 ; N uni25FF ; G 2646
U 9728 ; WX 602 ; N uni2600 ; G 2647
U 9729 ; WX 602 ; N uni2601 ; G 2648
U 9730 ; WX 602 ; N uni2602 ; G 2649
U 9731 ; WX 602 ; N uni2603 ; G 2650
U 9732 ; WX 602 ; N uni2604 ; G 2651
U 9733 ; WX 602 ; N uni2605 ; G 2652
U 9734 ; WX 602 ; N uni2606 ; G 2653
U 9735 ; WX 602 ; N uni2607 ; G 2654
U 9736 ; WX 602 ; N uni2608 ; G 2655
U 9737 ; WX 602 ; N uni2609 ; G 2656
U 9738 ; WX 602 ; N uni260A ; G 2657
U 9739 ; WX 602 ; N uni260B ; G 2658
U 9740 ; WX 602 ; N uni260C ; G 2659
U 9741 ; WX 602 ; N uni260D ; G 2660
U 9742 ; WX 602 ; N uni260E ; G 2661
U 9743 ; WX 602 ; N uni260F ; G 2662
U 9744 ; WX 602 ; N uni2610 ; G 2663
U 9745 ; WX 602 ; N uni2611 ; G 2664
U 9746 ; WX 602 ; N uni2612 ; G 2665
U 9747 ; WX 602 ; N uni2613 ; G 2666
U 9748 ; WX 602 ; N uni2614 ; G 2667
U 9749 ; WX 602 ; N uni2615 ; G 2668
U 9750 ; WX 602 ; N uni2616 ; G 2669
U 9751 ; WX 602 ; N uni2617 ; G 2670
U 9752 ; WX 602 ; N uni2618 ; G 2671
U 9753 ; WX 602 ; N uni2619 ; G 2672
U 9754 ; WX 602 ; N uni261A ; G 2673
U 9755 ; WX 602 ; N uni261B ; G 2674
U 9756 ; WX 602 ; N uni261C ; G 2675
U 9757 ; WX 602 ; N uni261D ; G 2676
U 9758 ; WX 602 ; N uni261E ; G 2677
U 9759 ; WX 602 ; N uni261F ; G 2678
U 9760 ; WX 602 ; N uni2620 ; G 2679
U 9761 ; WX 602 ; N uni2621 ; G 2680
U 9762 ; WX 602 ; N uni2622 ; G 2681
U 9763 ; WX 602 ; N uni2623 ; G 2682
U 9764 ; WX 602 ; N uni2624 ; G 2683
U 9765 ; WX 602 ; N uni2625 ; G 2684
U 9766 ; WX 602 ; N uni2626 ; G 2685
U 9767 ; WX 602 ; N uni2627 ; G 2686
U 9768 ; WX 602 ; N uni2628 ; G 2687
U 9769 ; WX 602 ; N uni2629 ; G 2688
U 9770 ; WX 602 ; N uni262A ; G 2689
U 9771 ; WX 602 ; N uni262B ; G 2690
U 9772 ; WX 602 ; N uni262C ; G 2691
U 9773 ; WX 602 ; N uni262D ; G 2692
U 9774 ; WX 602 ; N uni262E ; G 2693
U 9775 ; WX 602 ; N uni262F ; G 2694
U 9784 ; WX 602 ; N uni2638 ; G 2695
U 9785 ; WX 602 ; N uni2639 ; G 2696
U 9786 ; WX 602 ; N smileface ; G 2697
U 9787 ; WX 602 ; N invsmileface ; G 2698
U 9788 ; WX 602 ; N sun ; G 2699
U 9789 ; WX 602 ; N uni263D ; G 2700
U 9790 ; WX 602 ; N uni263E ; G 2701
U 9791 ; WX 602 ; N uni263F ; G 2702
U 9792 ; WX 602 ; N female ; G 2703
U 9793 ; WX 602 ; N uni2641 ; G 2704
U 9794 ; WX 602 ; N male ; G 2705
U 9795 ; WX 602 ; N uni2643 ; G 2706
U 9796 ; WX 602 ; N uni2644 ; G 2707
U 9797 ; WX 602 ; N uni2645 ; G 2708
U 9798 ; WX 602 ; N uni2646 ; G 2709
U 9799 ; WX 602 ; N uni2647 ; G 2710
U 9800 ; WX 602 ; N uni2648 ; G 2711
U 9801 ; WX 602 ; N uni2649 ; G 2712
U 9802 ; WX 602 ; N uni264A ; G 2713
U 9803 ; WX 602 ; N uni264B ; G 2714
U 9804 ; WX 602 ; N uni264C ; G 2715
U 9805 ; WX 602 ; N uni264D ; G 2716
U 9806 ; WX 602 ; N uni264E ; G 2717
U 9807 ; WX 602 ; N uni264F ; G 2718
U 9808 ; WX 602 ; N uni2650 ; G 2719
U 9809 ; WX 602 ; N uni2651 ; G 2720
U 9810 ; WX 602 ; N uni2652 ; G 2721
U 9811 ; WX 602 ; N uni2653 ; G 2722
U 9812 ; WX 602 ; N uni2654 ; G 2723
U 9813 ; WX 602 ; N uni2655 ; G 2724
U 9814 ; WX 602 ; N uni2656 ; G 2725
U 9815 ; WX 602 ; N uni2657 ; G 2726
U 9816 ; WX 602 ; N uni2658 ; G 2727
U 9817 ; WX 602 ; N uni2659 ; G 2728
U 9818 ; WX 602 ; N uni265A ; G 2729
U 9819 ; WX 602 ; N uni265B ; G 2730
U 9820 ; WX 602 ; N uni265C ; G 2731
U 9821 ; WX 602 ; N uni265D ; G 2732
U 9822 ; WX 602 ; N uni265E ; G 2733
U 9823 ; WX 602 ; N uni265F ; G 2734
U 9824 ; WX 602 ; N spade ; G 2735
U 9825 ; WX 602 ; N uni2661 ; G 2736
U 9826 ; WX 602 ; N uni2662 ; G 2737
U 9827 ; WX 602 ; N club ; G 2738
U 9828 ; WX 602 ; N uni2664 ; G 2739
U 9829 ; WX 602 ; N heart ; G 2740
U 9830 ; WX 602 ; N diamond ; G 2741
U 9831 ; WX 602 ; N uni2667 ; G 2742
U 9832 ; WX 602 ; N uni2668 ; G 2743
U 9833 ; WX 602 ; N uni2669 ; G 2744
U 9834 ; WX 602 ; N musicalnote ; G 2745
U 9835 ; WX 602 ; N musicalnotedbl ; G 2746
U 9836 ; WX 602 ; N uni266C ; G 2747
U 9837 ; WX 602 ; N uni266D ; G 2748
U 9838 ; WX 602 ; N uni266E ; G 2749
U 9839 ; WX 602 ; N uni266F ; G 2750
U 9840 ; WX 602 ; N uni2670 ; G 2751
U 9841 ; WX 602 ; N uni2671 ; G 2752
U 9842 ; WX 602 ; N uni2672 ; G 2753
U 9843 ; WX 602 ; N uni2673 ; G 2754
U 9844 ; WX 602 ; N uni2674 ; G 2755
U 9845 ; WX 602 ; N uni2675 ; G 2756
U 9846 ; WX 602 ; N uni2676 ; G 2757
U 9847 ; WX 602 ; N uni2677 ; G 2758
U 9848 ; WX 602 ; N uni2678 ; G 2759
U 9849 ; WX 602 ; N uni2679 ; G 2760
U 9850 ; WX 602 ; N uni267A ; G 2761
U 9851 ; WX 602 ; N uni267B ; G 2762
U 9852 ; WX 602 ; N uni267C ; G 2763
U 9853 ; WX 602 ; N uni267D ; G 2764
U 9854 ; WX 602 ; N uni267E ; G 2765
U 9855 ; WX 602 ; N uni267F ; G 2766
U 9856 ; WX 602 ; N uni2680 ; G 2767
U 9857 ; WX 602 ; N uni2681 ; G 2768
U 9858 ; WX 602 ; N uni2682 ; G 2769
U 9859 ; WX 602 ; N uni2683 ; G 2770
U 9860 ; WX 602 ; N uni2684 ; G 2771
U 9861 ; WX 602 ; N uni2685 ; G 2772
U 9862 ; WX 602 ; N uni2686 ; G 2773
U 9863 ; WX 602 ; N uni2687 ; G 2774
U 9864 ; WX 602 ; N uni2688 ; G 2775
U 9865 ; WX 602 ; N uni2689 ; G 2776
U 9866 ; WX 602 ; N uni268A ; G 2777
U 9867 ; WX 602 ; N uni268B ; G 2778
U 9872 ; WX 602 ; N uni2690 ; G 2779
U 9873 ; WX 602 ; N uni2691 ; G 2780
U 9874 ; WX 602 ; N uni2692 ; G 2781
U 9875 ; WX 602 ; N uni2693 ; G 2782
U 9876 ; WX 602 ; N uni2694 ; G 2783
U 9877 ; WX 602 ; N uni2695 ; G 2784
U 9878 ; WX 602 ; N uni2696 ; G 2785
U 9879 ; WX 602 ; N uni2697 ; G 2786
U 9880 ; WX 602 ; N uni2698 ; G 2787
U 9881 ; WX 602 ; N uni2699 ; G 2788
U 9882 ; WX 602 ; N uni269A ; G 2789
U 9883 ; WX 602 ; N uni269B ; G 2790
U 9884 ; WX 602 ; N uni269C ; G 2791
U 9888 ; WX 602 ; N uni26A0 ; G 2792
U 9889 ; WX 602 ; N uni26A1 ; G 2793
U 9904 ; WX 602 ; N uni26B0 ; G 2794
U 9905 ; WX 602 ; N uni26B1 ; G 2795
U 9985 ; WX 602 ; N uni2701 ; G 2796
U 9986 ; WX 602 ; N uni2702 ; G 2797
U 9987 ; WX 602 ; N uni2703 ; G 2798
U 9988 ; WX 602 ; N uni2704 ; G 2799
U 9990 ; WX 602 ; N uni2706 ; G 2800
U 9991 ; WX 602 ; N uni2707 ; G 2801
U 9992 ; WX 602 ; N uni2708 ; G 2802
U 9993 ; WX 602 ; N uni2709 ; G 2803
U 9996 ; WX 602 ; N uni270C ; G 2804
U 9997 ; WX 602 ; N uni270D ; G 2805
U 9998 ; WX 602 ; N uni270E ; G 2806
U 9999 ; WX 602 ; N uni270F ; G 2807
U 10000 ; WX 602 ; N uni2710 ; G 2808
U 10001 ; WX 602 ; N uni2711 ; G 2809
U 10002 ; WX 602 ; N uni2712 ; G 2810
U 10003 ; WX 602 ; N uni2713 ; G 2811
U 10004 ; WX 602 ; N uni2714 ; G 2812
U 10005 ; WX 602 ; N uni2715 ; G 2813
U 10006 ; WX 602 ; N uni2716 ; G 2814
U 10007 ; WX 602 ; N uni2717 ; G 2815
U 10008 ; WX 602 ; N uni2718 ; G 2816
U 10009 ; WX 602 ; N uni2719 ; G 2817
U 10010 ; WX 602 ; N uni271A ; G 2818
U 10011 ; WX 602 ; N uni271B ; G 2819
U 10012 ; WX 602 ; N uni271C ; G 2820
U 10013 ; WX 602 ; N uni271D ; G 2821
U 10014 ; WX 602 ; N uni271E ; G 2822
U 10015 ; WX 602 ; N uni271F ; G 2823
U 10016 ; WX 602 ; N uni2720 ; G 2824
U 10017 ; WX 602 ; N uni2721 ; G 2825
U 10018 ; WX 602 ; N uni2722 ; G 2826
U 10019 ; WX 602 ; N uni2723 ; G 2827
U 10020 ; WX 602 ; N uni2724 ; G 2828
U 10021 ; WX 602 ; N uni2725 ; G 2829
U 10022 ; WX 602 ; N uni2726 ; G 2830
U 10023 ; WX 602 ; N uni2727 ; G 2831
U 10025 ; WX 602 ; N uni2729 ; G 2832
U 10026 ; WX 602 ; N uni272A ; G 2833
U 10027 ; WX 602 ; N uni272B ; G 2834
U 10028 ; WX 602 ; N uni272C ; G 2835
U 10029 ; WX 602 ; N uni272D ; G 2836
U 10030 ; WX 602 ; N uni272E ; G 2837
U 10031 ; WX 602 ; N uni272F ; G 2838
U 10032 ; WX 602 ; N uni2730 ; G 2839
U 10033 ; WX 602 ; N uni2731 ; G 2840
U 10034 ; WX 602 ; N uni2732 ; G 2841
U 10035 ; WX 602 ; N uni2733 ; G 2842
U 10036 ; WX 602 ; N uni2734 ; G 2843
U 10037 ; WX 602 ; N uni2735 ; G 2844
U 10038 ; WX 602 ; N uni2736 ; G 2845
U 10039 ; WX 602 ; N uni2737 ; G 2846
U 10040 ; WX 602 ; N uni2738 ; G 2847
U 10041 ; WX 602 ; N uni2739 ; G 2848
U 10042 ; WX 602 ; N uni273A ; G 2849
U 10043 ; WX 602 ; N uni273B ; G 2850
U 10044 ; WX 602 ; N uni273C ; G 2851
U 10045 ; WX 602 ; N uni273D ; G 2852
U 10046 ; WX 602 ; N uni273E ; G 2853
U 10047 ; WX 602 ; N uni273F ; G 2854
U 10048 ; WX 602 ; N uni2740 ; G 2855
U 10049 ; WX 602 ; N uni2741 ; G 2856
U 10050 ; WX 602 ; N uni2742 ; G 2857
U 10051 ; WX 602 ; N uni2743 ; G 2858
U 10052 ; WX 602 ; N uni2744 ; G 2859
U 10053 ; WX 602 ; N uni2745 ; G 2860
U 10054 ; WX 602 ; N uni2746 ; G 2861
U 10055 ; WX 602 ; N uni2747 ; G 2862
U 10056 ; WX 602 ; N uni2748 ; G 2863
U 10057 ; WX 602 ; N uni2749 ; G 2864
U 10058 ; WX 602 ; N uni274A ; G 2865
U 10059 ; WX 602 ; N uni274B ; G 2866
U 10061 ; WX 602 ; N uni274D ; G 2867
U 10063 ; WX 602 ; N uni274F ; G 2868
U 10064 ; WX 602 ; N uni2750 ; G 2869
U 10065 ; WX 602 ; N uni2751 ; G 2870
U 10066 ; WX 602 ; N uni2752 ; G 2871
U 10070 ; WX 602 ; N uni2756 ; G 2872
U 10072 ; WX 602 ; N uni2758 ; G 2873
U 10073 ; WX 602 ; N uni2759 ; G 2874
U 10074 ; WX 602 ; N uni275A ; G 2875
U 10075 ; WX 602 ; N uni275B ; G 2876
U 10076 ; WX 602 ; N uni275C ; G 2877
U 10077 ; WX 602 ; N uni275D ; G 2878
U 10078 ; WX 602 ; N uni275E ; G 2879
U 10081 ; WX 602 ; N uni2761 ; G 2880
U 10082 ; WX 602 ; N uni2762 ; G 2881
U 10083 ; WX 602 ; N uni2763 ; G 2882
U 10084 ; WX 602 ; N uni2764 ; G 2883
U 10085 ; WX 602 ; N uni2765 ; G 2884
U 10086 ; WX 602 ; N uni2766 ; G 2885
U 10087 ; WX 602 ; N uni2767 ; G 2886
U 10088 ; WX 602 ; N uni2768 ; G 2887
U 10089 ; WX 602 ; N uni2769 ; G 2888
U 10090 ; WX 602 ; N uni276A ; G 2889
U 10091 ; WX 602 ; N uni276B ; G 2890
U 10092 ; WX 602 ; N uni276C ; G 2891
U 10093 ; WX 602 ; N uni276D ; G 2892
U 10094 ; WX 602 ; N uni276E ; G 2893
U 10095 ; WX 602 ; N uni276F ; G 2894
U 10096 ; WX 602 ; N uni2770 ; G 2895
U 10097 ; WX 602 ; N uni2771 ; G 2896
U 10098 ; WX 602 ; N uni2772 ; G 2897
U 10099 ; WX 602 ; N uni2773 ; G 2898
U 10100 ; WX 602 ; N uni2774 ; G 2899
U 10101 ; WX 602 ; N uni2775 ; G 2900
U 10132 ; WX 602 ; N uni2794 ; G 2901
U 10136 ; WX 602 ; N uni2798 ; G 2902
U 10137 ; WX 602 ; N uni2799 ; G 2903
U 10138 ; WX 602 ; N uni279A ; G 2904
U 10139 ; WX 602 ; N uni279B ; G 2905
U 10140 ; WX 602 ; N uni279C ; G 2906
U 10141 ; WX 602 ; N uni279D ; G 2907
U 10142 ; WX 602 ; N uni279E ; G 2908
U 10143 ; WX 602 ; N uni279F ; G 2909
U 10144 ; WX 602 ; N uni27A0 ; G 2910
U 10145 ; WX 602 ; N uni27A1 ; G 2911
U 10146 ; WX 602 ; N uni27A2 ; G 2912
U 10147 ; WX 602 ; N uni27A3 ; G 2913
U 10148 ; WX 602 ; N uni27A4 ; G 2914
U 10149 ; WX 602 ; N uni27A5 ; G 2915
U 10150 ; WX 602 ; N uni27A6 ; G 2916
U 10151 ; WX 602 ; N uni27A7 ; G 2917
U 10152 ; WX 602 ; N uni27A8 ; G 2918
U 10153 ; WX 602 ; N uni27A9 ; G 2919
U 10154 ; WX 602 ; N uni27AA ; G 2920
U 10155 ; WX 602 ; N uni27AB ; G 2921
U 10156 ; WX 602 ; N uni27AC ; G 2922
U 10157 ; WX 602 ; N uni27AD ; G 2923
U 10158 ; WX 602 ; N uni27AE ; G 2924
U 10159 ; WX 602 ; N uni27AF ; G 2925
U 10161 ; WX 602 ; N uni27B1 ; G 2926
U 10162 ; WX 602 ; N uni27B2 ; G 2927
U 10163 ; WX 602 ; N uni27B3 ; G 2928
U 10164 ; WX 602 ; N uni27B4 ; G 2929
U 10165 ; WX 602 ; N uni27B5 ; G 2930
U 10166 ; WX 602 ; N uni27B6 ; G 2931
U 10167 ; WX 602 ; N uni27B7 ; G 2932
U 10168 ; WX 602 ; N uni27B8 ; G 2933
U 10169 ; WX 602 ; N uni27B9 ; G 2934
U 10170 ; WX 602 ; N uni27BA ; G 2935
U 10171 ; WX 602 ; N uni27BB ; G 2936
U 10172 ; WX 602 ; N uni27BC ; G 2937
U 10173 ; WX 602 ; N uni27BD ; G 2938
U 10174 ; WX 602 ; N uni27BE ; G 2939
U 10175 ; WX 602 ; N uni27BF ; G 2940
U 10178 ; WX 602 ; N uni27C2 ; G 2941
U 10181 ; WX 602 ; N uni27C5 ; G 2942
U 10182 ; WX 602 ; N uni27C6 ; G 2943
U 10204 ; WX 602 ; N uni27DC ; G 2944
U 10208 ; WX 602 ; N uni27E0 ; G 2945
U 10214 ; WX 602 ; N uni27E6 ; G 2946
U 10215 ; WX 602 ; N uni27E7 ; G 2947
U 10216 ; WX 602 ; N uni27E8 ; G 2948
U 10217 ; WX 602 ; N uni27E9 ; G 2949
U 10218 ; WX 602 ; N uni27EA ; G 2950
U 10219 ; WX 602 ; N uni27EB ; G 2951
U 10229 ; WX 602 ; N uni27F5 ; G 2952
U 10230 ; WX 602 ; N uni27F6 ; G 2953
U 10231 ; WX 602 ; N uni27F7 ; G 2954
U 10631 ; WX 602 ; N uni2987 ; G 2955
U 10632 ; WX 602 ; N uni2988 ; G 2956
U 10647 ; WX 602 ; N uni2997 ; G 2957
U 10648 ; WX 602 ; N uni2998 ; G 2958
U 10731 ; WX 602 ; N uni29EB ; G 2959
U 10746 ; WX 602 ; N uni29FA ; G 2960
U 10747 ; WX 602 ; N uni29FB ; G 2961
U 10752 ; WX 602 ; N uni2A00 ; G 2962
U 10799 ; WX 602 ; N uni2A2F ; G 2963
U 10858 ; WX 602 ; N uni2A6A ; G 2964
U 10859 ; WX 602 ; N uni2A6B ; G 2965
U 11013 ; WX 602 ; N uni2B05 ; G 2966
U 11014 ; WX 602 ; N uni2B06 ; G 2967
U 11015 ; WX 602 ; N uni2B07 ; G 2968
U 11016 ; WX 602 ; N uni2B08 ; G 2969
U 11017 ; WX 602 ; N uni2B09 ; G 2970
U 11018 ; WX 602 ; N uni2B0A ; G 2971
U 11019 ; WX 602 ; N uni2B0B ; G 2972
U 11020 ; WX 602 ; N uni2B0C ; G 2973
U 11021 ; WX 602 ; N uni2B0D ; G 2974
U 11026 ; WX 602 ; N uni2B12 ; G 2975
U 11027 ; WX 602 ; N uni2B13 ; G 2976
U 11028 ; WX 602 ; N uni2B14 ; G 2977
U 11029 ; WX 602 ; N uni2B15 ; G 2978
U 11030 ; WX 602 ; N uni2B16 ; G 2979
U 11031 ; WX 602 ; N uni2B17 ; G 2980
U 11032 ; WX 602 ; N uni2B18 ; G 2981
U 11033 ; WX 602 ; N uni2B19 ; G 2982
U 11034 ; WX 602 ; N uni2B1A ; G 2983
U 11364 ; WX 602 ; N uni2C64 ; G 2984
U 11373 ; WX 602 ; N uni2C6D ; G 2985
U 11374 ; WX 602 ; N uni2C6E ; G 2986
U 11375 ; WX 602 ; N uni2C6F ; G 2987
U 11376 ; WX 602 ; N uni2C70 ; G 2988
U 11381 ; WX 602 ; N uni2C75 ; G 2989
U 11382 ; WX 602 ; N uni2C76 ; G 2990
U 11383 ; WX 602 ; N uni2C77 ; G 2991
U 11385 ; WX 602 ; N uni2C79 ; G 2992
U 11386 ; WX 602 ; N uni2C7A ; G 2993
U 11388 ; WX 602 ; N uni2C7C ; G 2994
U 11389 ; WX 602 ; N uni2C7D ; G 2995
U 11390 ; WX 602 ; N uni2C7E ; G 2996
U 11391 ; WX 602 ; N uni2C7F ; G 2997
U 11800 ; WX 602 ; N uni2E18 ; G 2998
U 11807 ; WX 602 ; N uni2E1F ; G 2999
U 11810 ; WX 602 ; N uni2E22 ; G 3000
U 11811 ; WX 602 ; N uni2E23 ; G 3001
U 11812 ; WX 602 ; N uni2E24 ; G 3002
U 11813 ; WX 602 ; N uni2E25 ; G 3003
U 11822 ; WX 602 ; N uni2E2E ; G 3004
U 42760 ; WX 602 ; N uniA708 ; G 3005
U 42761 ; WX 602 ; N uniA709 ; G 3006
U 42762 ; WX 602 ; N uniA70A ; G 3007
U 42763 ; WX 602 ; N uniA70B ; G 3008
U 42764 ; WX 602 ; N uniA70C ; G 3009
U 42765 ; WX 602 ; N uniA70D ; G 3010
U 42766 ; WX 602 ; N uniA70E ; G 3011
U 42767 ; WX 602 ; N uniA70F ; G 3012
U 42768 ; WX 602 ; N uniA710 ; G 3013
U 42769 ; WX 602 ; N uniA711 ; G 3014
U 42770 ; WX 602 ; N uniA712 ; G 3015
U 42771 ; WX 602 ; N uniA713 ; G 3016
U 42772 ; WX 602 ; N uniA714 ; G 3017
U 42773 ; WX 602 ; N uniA715 ; G 3018
U 42774 ; WX 602 ; N uniA716 ; G 3019
U 42779 ; WX 602 ; N uniA71B ; G 3020
U 42780 ; WX 602 ; N uniA71C ; G 3021
U 42781 ; WX 602 ; N uniA71D ; G 3022
U 42782 ; WX 602 ; N uniA71E ; G 3023
U 42783 ; WX 602 ; N uniA71F ; G 3024
U 42786 ; WX 602 ; N uniA722 ; G 3025
U 42787 ; WX 602 ; N uniA723 ; G 3026
U 42788 ; WX 602 ; N uniA724 ; G 3027
U 42789 ; WX 602 ; N uniA725 ; G 3028
U 42790 ; WX 602 ; N uniA726 ; G 3029
U 42791 ; WX 602 ; N uniA727 ; G 3030
U 42889 ; WX 602 ; N uniA789 ; G 3031
U 42890 ; WX 602 ; N uniA78A ; G 3032
U 42891 ; WX 602 ; N uniA78B ; G 3033
U 42892 ; WX 602 ; N uniA78C ; G 3034
U 42893 ; WX 602 ; N uniA78D ; G 3035
U 42894 ; WX 602 ; N uniA78E ; G 3036
U 42896 ; WX 602 ; N uniA790 ; G 3037
U 42897 ; WX 602 ; N uniA791 ; G 3038
U 42922 ; WX 602 ; N uniA7AA ; G 3039
U 43000 ; WX 602 ; N uniA7F8 ; G 3040
U 43001 ; WX 602 ; N uniA7F9 ; G 3041
U 63173 ; WX 602 ; N uniF6C5 ; G 3042
U 64257 ; WX 602 ; N fi ; G 3043
U 64258 ; WX 602 ; N fl ; G 3044
U 64338 ; WX 602 ; N uniFB52 ; G 3045
U 64339 ; WX 602 ; N uniFB53 ; G 3046
U 64340 ; WX 602 ; N uniFB54 ; G 3047
U 64341 ; WX 602 ; N uniFB55 ; G 3048
U 64342 ; WX 602 ; N uniFB56 ; G 3049
U 64343 ; WX 602 ; N uniFB57 ; G 3050
U 64344 ; WX 602 ; N uniFB58 ; G 3051
U 64345 ; WX 602 ; N uniFB59 ; G 3052
U 64346 ; WX 602 ; N uniFB5A ; G 3053
U 64347 ; WX 602 ; N uniFB5B ; G 3054
U 64348 ; WX 602 ; N uniFB5C ; G 3055
U 64349 ; WX 602 ; N uniFB5D ; G 3056
U 64350 ; WX 602 ; N uniFB5E ; G 3057
U 64351 ; WX 602 ; N uniFB5F ; G 3058
U 64352 ; WX 602 ; N uniFB60 ; G 3059
U 64353 ; WX 602 ; N uniFB61 ; G 3060
U 64354 ; WX 602 ; N uniFB62 ; G 3061
U 64355 ; WX 602 ; N uniFB63 ; G 3062
U 64356 ; WX 602 ; N uniFB64 ; G 3063
U 64357 ; WX 602 ; N uniFB65 ; G 3064
U 64358 ; WX 602 ; N uniFB66 ; G 3065
U 64359 ; WX 602 ; N uniFB67 ; G 3066
U 64360 ; WX 602 ; N uniFB68 ; G 3067
U 64361 ; WX 602 ; N uniFB69 ; G 3068
U 64362 ; WX 602 ; N uniFB6A ; G 3069
U 64363 ; WX 602 ; N uniFB6B ; G 3070
U 64364 ; WX 602 ; N uniFB6C ; G 3071
U 64365 ; WX 602 ; N uniFB6D ; G 3072
U 64366 ; WX 602 ; N uniFB6E ; G 3073
U 64367 ; WX 602 ; N uniFB6F ; G 3074
U 64368 ; WX 602 ; N uniFB70 ; G 3075
U 64369 ; WX 602 ; N uniFB71 ; G 3076
U 64370 ; WX 602 ; N uniFB72 ; G 3077
U 64371 ; WX 602 ; N uniFB73 ; G 3078
U 64372 ; WX 602 ; N uniFB74 ; G 3079
U 64373 ; WX 602 ; N uniFB75 ; G 3080
U 64374 ; WX 602 ; N uniFB76 ; G 3081
U 64375 ; WX 602 ; N uniFB77 ; G 3082
U 64376 ; WX 602 ; N uniFB78 ; G 3083
U 64377 ; WX 602 ; N uniFB79 ; G 3084
U 64378 ; WX 602 ; N uniFB7A ; G 3085
U 64379 ; WX 602 ; N uniFB7B ; G 3086
U 64380 ; WX 602 ; N uniFB7C ; G 3087
U 64381 ; WX 602 ; N uniFB7D ; G 3088
U 64382 ; WX 602 ; N uniFB7E ; G 3089
U 64383 ; WX 602 ; N uniFB7F ; G 3090
U 64384 ; WX 602 ; N uniFB80 ; G 3091
U 64385 ; WX 602 ; N uniFB81 ; G 3092
U 64394 ; WX 602 ; N uniFB8A ; G 3093
U 64395 ; WX 602 ; N uniFB8B ; G 3094
U 64396 ; WX 602 ; N uniFB8C ; G 3095
U 64397 ; WX 602 ; N uniFB8D ; G 3096
U 64398 ; WX 602 ; N uniFB8E ; G 3097
U 64399 ; WX 602 ; N uniFB8F ; G 3098
U 64400 ; WX 602 ; N uniFB90 ; G 3099
U 64401 ; WX 602 ; N uniFB91 ; G 3100
U 64402 ; WX 602 ; N uniFB92 ; G 3101
U 64403 ; WX 602 ; N uniFB93 ; G 3102
U 64404 ; WX 602 ; N uniFB94 ; G 3103
U 64405 ; WX 602 ; N uniFB95 ; G 3104
U 64414 ; WX 602 ; N uniFB9E ; G 3105
U 64415 ; WX 602 ; N uniFB9F ; G 3106
U 64426 ; WX 602 ; N uniFBAA ; G 3107
U 64427 ; WX 602 ; N uniFBAB ; G 3108
U 64428 ; WX 602 ; N uniFBAC ; G 3109
U 64429 ; WX 602 ; N uniFBAD ; G 3110
U 64488 ; WX 602 ; N uniFBE8 ; G 3111
U 64489 ; WX 602 ; N uniFBE9 ; G 3112
U 64508 ; WX 602 ; N uniFBFC ; G 3113
U 64509 ; WX 602 ; N uniFBFD ; G 3114
U 64510 ; WX 602 ; N uniFBFE ; G 3115
U 64511 ; WX 602 ; N uniFBFF ; G 3116
U 65136 ; WX 602 ; N uniFE70 ; G 3117
U 65137 ; WX 602 ; N uniFE71 ; G 3118
U 65138 ; WX 602 ; N uniFE72 ; G 3119
U 65139 ; WX 602 ; N uniFE73 ; G 3120
U 65140 ; WX 602 ; N uniFE74 ; G 3121
U 65142 ; WX 602 ; N uniFE76 ; G 3122
U 65143 ; WX 602 ; N uniFE77 ; G 3123
U 65144 ; WX 602 ; N uniFE78 ; G 3124
U 65145 ; WX 602 ; N uniFE79 ; G 3125
U 65146 ; WX 602 ; N uniFE7A ; G 3126
U 65147 ; WX 602 ; N uniFE7B ; G 3127
U 65148 ; WX 602 ; N uniFE7C ; G 3128
U 65149 ; WX 602 ; N uniFE7D ; G 3129
U 65150 ; WX 602 ; N uniFE7E ; G 3130
U 65151 ; WX 602 ; N uniFE7F ; G 3131
U 65152 ; WX 602 ; N uniFE80 ; G 3132
U 65153 ; WX 602 ; N uniFE81 ; G 3133
U 65154 ; WX 602 ; N uniFE82 ; G 3134
U 65155 ; WX 602 ; N uniFE83 ; G 3135
U 65156 ; WX 602 ; N uniFE84 ; G 3136
U 65157 ; WX 602 ; N uniFE85 ; G 3137
U 65158 ; WX 602 ; N uniFE86 ; G 3138
U 65159 ; WX 602 ; N uniFE87 ; G 3139
U 65160 ; WX 602 ; N uniFE88 ; G 3140
U 65161 ; WX 602 ; N uniFE89 ; G 3141
U 65162 ; WX 602 ; N uniFE8A ; G 3142
U 65163 ; WX 602 ; N uniFE8B ; G 3143
U 65164 ; WX 602 ; N uniFE8C ; G 3144
U 65165 ; WX 602 ; N uniFE8D ; G 3145
U 65166 ; WX 602 ; N uniFE8E ; G 3146
U 65167 ; WX 602 ; N uniFE8F ; G 3147
U 65168 ; WX 602 ; N uniFE90 ; G 3148
U 65169 ; WX 602 ; N uniFE91 ; G 3149
U 65170 ; WX 602 ; N uniFE92 ; G 3150
U 65171 ; WX 602 ; N uniFE93 ; G 3151
U 65172 ; WX 602 ; N uniFE94 ; G 3152
U 65173 ; WX 602 ; N uniFE95 ; G 3153
U 65174 ; WX 602 ; N uniFE96 ; G 3154
U 65175 ; WX 602 ; N uniFE97 ; G 3155
U 65176 ; WX 602 ; N uniFE98 ; G 3156
U 65177 ; WX 602 ; N uniFE99 ; G 3157
U 65178 ; WX 602 ; N uniFE9A ; G 3158
U 65179 ; WX 602 ; N uniFE9B ; G 3159
U 65180 ; WX 602 ; N uniFE9C ; G 3160
U 65181 ; WX 602 ; N uniFE9D ; G 3161
U 65182 ; WX 602 ; N uniFE9E ; G 3162
U 65183 ; WX 602 ; N uniFE9F ; G 3163
U 65184 ; WX 602 ; N uniFEA0 ; G 3164
U 65185 ; WX 602 ; N uniFEA1 ; G 3165
U 65186 ; WX 602 ; N uniFEA2 ; G 3166
U 65187 ; WX 602 ; N uniFEA3 ; G 3167
U 65188 ; WX 602 ; N uniFEA4 ; G 3168
U 65189 ; WX 602 ; N uniFEA5 ; G 3169
U 65190 ; WX 602 ; N uniFEA6 ; G 3170
U 65191 ; WX 602 ; N uniFEA7 ; G 3171
U 65192 ; WX 602 ; N uniFEA8 ; G 3172
U 65193 ; WX 602 ; N uniFEA9 ; G 3173
U 65194 ; WX 602 ; N uniFEAA ; G 3174
U 65195 ; WX 602 ; N uniFEAB ; G 3175
U 65196 ; WX 602 ; N uniFEAC ; G 3176
U 65197 ; WX 602 ; N uniFEAD ; G 3177
U 65198 ; WX 602 ; N uniFEAE ; G 3178
U 65199 ; WX 602 ; N uniFEAF ; G 3179
U 65200 ; WX 602 ; N uniFEB0 ; G 3180
U 65201 ; WX 602 ; N uniFEB1 ; G 3181
U 65202 ; WX 602 ; N uniFEB2 ; G 3182
U 65203 ; WX 602 ; N uniFEB3 ; G 3183
U 65204 ; WX 602 ; N uniFEB4 ; G 3184
U 65205 ; WX 602 ; N uniFEB5 ; G 3185
U 65206 ; WX 602 ; N uniFEB6 ; G 3186
U 65207 ; WX 602 ; N uniFEB7 ; G 3187
U 65208 ; WX 602 ; N uniFEB8 ; G 3188
U 65209 ; WX 602 ; N uniFEB9 ; G 3189
U 65210 ; WX 602 ; N uniFEBA ; G 3190
U 65211 ; WX 602 ; N uniFEBB ; G 3191
U 65212 ; WX 602 ; N uniFEBC ; G 3192
U 65213 ; WX 602 ; N uniFEBD ; G 3193
U 65214 ; WX 602 ; N uniFEBE ; G 3194
U 65215 ; WX 602 ; N uniFEBF ; G 3195
U 65216 ; WX 602 ; N uniFEC0 ; G 3196
U 65217 ; WX 602 ; N uniFEC1 ; G 3197
U 65218 ; WX 602 ; N uniFEC2 ; G 3198
U 65219 ; WX 602 ; N uniFEC3 ; G 3199
U 65220 ; WX 602 ; N uniFEC4 ; G 3200
U 65221 ; WX 602 ; N uniFEC5 ; G 3201
U 65222 ; WX 602 ; N uniFEC6 ; G 3202
U 65223 ; WX 602 ; N uniFEC7 ; G 3203
U 65224 ; WX 602 ; N uniFEC8 ; G 3204
U 65225 ; WX 602 ; N uniFEC9 ; G 3205
U 65226 ; WX 602 ; N uniFECA ; G 3206
U 65227 ; WX 602 ; N uniFECB ; G 3207
U 65228 ; WX 602 ; N uniFECC ; G 3208
U 65229 ; WX 602 ; N uniFECD ; G 3209
U 65230 ; WX 602 ; N uniFECE ; G 3210
U 65231 ; WX 602 ; N uniFECF ; G 3211
U 65232 ; WX 602 ; N uniFED0 ; G 3212
U 65233 ; WX 602 ; N uniFED1 ; G 3213
U 65234 ; WX 602 ; N uniFED2 ; G 3214
U 65235 ; WX 602 ; N uniFED3 ; G 3215
U 65236 ; WX 602 ; N uniFED4 ; G 3216
U 65237 ; WX 602 ; N uniFED5 ; G 3217
U 65238 ; WX 602 ; N uniFED6 ; G 3218
U 65239 ; WX 602 ; N uniFED7 ; G 3219
U 65240 ; WX 602 ; N uniFED8 ; G 3220
U 65241 ; WX 602 ; N uniFED9 ; G 3221
U 65242 ; WX 602 ; N uniFEDA ; G 3222
U 65243 ; WX 602 ; N uniFEDB ; G 3223
U 65244 ; WX 602 ; N uniFEDC ; G 3224
U 65245 ; WX 602 ; N uniFEDD ; G 3225
U 65246 ; WX 602 ; N uniFEDE ; G 3226
U 65247 ; WX 602 ; N uniFEDF ; G 3227
U 65248 ; WX 602 ; N uniFEE0 ; G 3228
U 65249 ; WX 602 ; N uniFEE1 ; G 3229
U 65250 ; WX 602 ; N uniFEE2 ; G 3230
U 65251 ; WX 602 ; N uniFEE3 ; G 3231
U 65252 ; WX 602 ; N uniFEE4 ; G 3232
U 65253 ; WX 602 ; N uniFEE5 ; G 3233
U 65254 ; WX 602 ; N uniFEE6 ; G 3234
U 65255 ; WX 602 ; N uniFEE7 ; G 3235
U 65256 ; WX 602 ; N uniFEE8 ; G 3236
U 65257 ; WX 602 ; N uniFEE9 ; G 3237
U 65258 ; WX 602 ; N uniFEEA ; G 3238
U 65259 ; WX 602 ; N uniFEEB ; G 3239
U 65260 ; WX 602 ; N uniFEEC ; G 3240
U 65261 ; WX 602 ; N uniFEED ; G 3241
U 65262 ; WX 602 ; N uniFEEE ; G 3242
U 65263 ; WX 602 ; N uniFEEF ; G 3243
U 65264 ; WX 602 ; N uniFEF0 ; G 3244
U 65265 ; WX 602 ; N uniFEF1 ; G 3245
U 65266 ; WX 602 ; N uniFEF2 ; G 3246
U 65267 ; WX 602 ; N uniFEF3 ; G 3247
U 65268 ; WX 602 ; N uniFEF4 ; G 3248
U 65269 ; WX 602 ; N uniFEF5 ; G 3249
U 65270 ; WX 602 ; N uniFEF6 ; G 3250
U 65271 ; WX 602 ; N uniFEF7 ; G 3251
U 65272 ; WX 602 ; N uniFEF8 ; G 3252
U 65273 ; WX 602 ; N uniFEF9 ; G 3253
U 65274 ; WX 602 ; N uniFEFA ; G 3254
U 65275 ; WX 602 ; N uniFEFB ; G 3255
U 65276 ; WX 602 ; N uniFEFC ; G 3256
U 65279 ; WX 602 ; N uniFEFF ; G 3257
U 65529 ; WX 602 ; N uniFFF9 ; G 3258
U 65530 ; WX 602 ; N uniFFFA ; G 3259
U 65531 ; WX 602 ; N uniFFFB ; G 3260
U 65532 ; WX 602 ; N uniFFFC ; G 3261
U 65533 ; WX 602 ; N uniFFFD ; G 3262
EndCharMetrics
EndFontMetrics
        FFTMs  ,   GDEF1&  H   DGPOSt    GSUB>  d  `OS/2     Vcmape4U    cvt >    8fpgmQ  0   gasp       glyf`ٸ3   head	     6hhea
    $hmtxm   6loca  +L  *`maxpB U    name U  !postѥ( wl  cprepԱ          =    )    )       <       j kk lm n{ |
u 
v
w 
x
           
 N \ DFLT cyrl $lao  .latn :                              mark                  n t z                      
"(.4:@FLRX^djpv| c   I g   M a   H + u ^   D , v d   J d   J `   F - w a   G b   H c   I ;   o Q   Q  ;   o b   I ;   o f   M <   p a   G a   G d   J Q   Q  `   G a   G W   =  Nh    kk  n{    >  D  J  P  V   \   b  h   n  t  z         `  |  |                    
   DFLT cyrl &lao  8latn B           SRB  
            F CAT  PESP  PGAL  PISM  XKSM  XLSM  XMOL  bNSM  XROM  bSKS  XSSM  X                     case dlig  locl &locl ,                   
   "           $     (     @  	      n       
w  O
v  L   I   


   c 
I    3 63E f  	 R y       PfEd !  m`              ,   
            ,  
           ~!AEM?CXaw_csV_?	.<[ex{-McyEMWY[]} 
 # & 7 : ? I K _ q     !!!!!!!"!$!&!+!.!H!Q!_!""" "#"-"="i""""""""####!#(#+#z#}#####$#& &<&G&g&o''''''))))* */*k++,d,p,w,z,...%..'       !$CLP CXatzbr1Ya?,0>bw{ 0Th|  HPY[]_    & / 9 < E K _ p t    !!!!!!!"!$!&!*!.!H!P!S!!"""#"'"4"A"m"""""""# ####%#+#5#}#####$#% &8&?&`&i''''''))))* */*j++,d,m,u,y,|...".."  ogUSONMLK=;-~mkbML qonkig#!	~yihfda_VTRNE@!NL74/&7)%߽$ 1+)!cHcDcBbbbb{u
                                                                                                                                                                                                                                                                                                                                                                                                                                              	              ~           b                                !  !    $  A    C  E    L  M    P          ^      e      i      q      z                 ?    C  C    X  X    a  a    t  w    z                                      _  -  b  c    r  s                                                                1  V    Y  _    a    $      K  ?  ?  M      N      P      Q      S      T      U      Y      `      c      d      e      g      t      v      |          	                      ,  .    0  <    >  [    b  e    w  x    {  {                               -     0  M  6  T  c  T  h  y  d  |    v                                                                                                E    H  M    P  W  
  Y  Y    [  [    ]  ]    _  }        4      i      x                               
        #     &   &     /   7     9   :     <   ?     E   I     K   K     _   _     p   q     t                             !        $  !  !  %  !  !  &  !  !  '  !  !  *  !  !  -  !  !  /  !"  !"  0  !$  !$  1  !&  !&  2  !*  !+  3  !.  !.  5  !H  !H  6  !P  !Q  7  !S  !_  9  !  !  F  !  "  G  "  "    "  "     "#  "#    "'  "-    "4  "=    "A  "i    "m  "    "  "  0  "  "  I  "  "  M  "  "  N  "  "  S  "  "  X  "  "  h  #   #  i  #  #  p  #  #  ~  #  #!    #%  #(    #+  #+    #5  #z    #}  #}    #  #    #  #    #  #    #  #    #  #    $#  $#    %   &     &8  &<  	  &?  &G  	  &`  &g  
  &i  &o  
	  '  '  
  '  '  
  '  '  
  '  '  
  '  '  
  '  '  
  )  )  
  )  )  
   )  )  
"  )  )  
#  *   *   
%  */  */  
&  *j  *k  
'  +  +  
)  +  +  
2  ,d  ,d  
;  ,m  ,p  
<  ,u  ,w  
@  ,y  ,z  
C  ,|  ,  
E  .  .  
I  .  .  
J  ."  .%  
K  ..  ..  
O      
P      
_  "  '  
d      
j      
p      
r      
s      
u      
v      
x Z Z  
} 
                                                                       	 
                        ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a                                   r d e i x  p k0 v j   s g w l |    c nT m } b    	 :  
v
w y                  ew qstu zxvf  #  3#  N#'#  \# #3# #/                 %  %1  /;      s      q    o  V #  d\H ```{    \{ `        o  7 L       ' 5 % = {   D =   ! /  s     , %Id@QX Y!-,%Id@QX Y!-,   Py PXY%%#  Py PXY%-,KPX EDY!-,%E`D-,KSX%%EDY!!-,ED-         hh   @ 7 /1 0!%!!h sr) R    	 ]@.				  4 9		 	  
99991 /0KSX9Y"!!!#
7#
f!qe       @ 9 1 <20!!!   ++      N@3 		  
 91 /<2<<22<<220#3333#3#####73#73J^^^6H6^_^_5H5^qrvuu%v     'D   / m@; )%%$(<<!/ , !,/()%$,099999991 /<22990>54&#.'.54$?3.';Rb95HS49Ua3YWD 0/GL2<Q@_D4>2	ZD*9-.,=BZ(|',.     !      ' 3 V@-(	(??	?>.?%1" +1"" 499991 /999904632#"&"32654&	4632#"&"32654&!?9PP9:OP)˹=8ON9:QRXO::OO:9PP`^P::OP99Q  & 0 @O $%$&%%$()'/.040'$  %	-<;C<BE%%!&!0$  	' !*199999991 /99990KSX999Y"%#"&547.54$32.#">73!3267VWźFA16BX^&(*0xlsZ^^,Z.H23հi:d/ #&GB"tW :][4\c    9 1 0! +    R7  @ G
 
9991 0
#&5 789RPۏͦJ"F!  qV  @ G
 
 9991 04'3 q89QQ8[%3     y9T  J@( 	
B
	 	<2<2991 <22990%#'-73%TJLLLLKLXX    B \  #@ 	H 
<<1 <<0!!#!5!RPRP  o  4@  4 I 1 0KSX9Y"!#:6׬o         991 0!!+u8    \  o  /@   4 I  91 /0KSXY"!!NFo   B3  @	4 9 /991 0KSXY"3#Tm    Zw   / @	J$J-B$E0  '01 0@/ /////////	/
/? ?????????	?
?D@@@@@E	UPPPPPU	o okkkkk	k
o 	
	
C/ /////////	/
/ 	
]]4632#"&3267654&#"#"&547>32I45JJ54IjDG@k$6ABGCj$6AfUIeSJ5HI43IGqljc\rkheI   +   
 O@(4JJ9 J		 

991 /20KSXY"!%!!!^J3F53bL
J/      o  c@2 4 LKJB J 	9999991 /9990KSX9Y"!!7%67 54&#">32bi3K13^pcRv3me:(.RbHQ;:(*{" ` ( M@, M LK#MLK	MBE)  )&

)9991 90#32654&#">32 !"&'32654&4|sjSn6hXfz6`loUFL*(  $&$.0Rc     `   o@<  	
		  4 J9	
 	 991 /<290KSXY"	!!3#!!u51>?:jB    j@8   4JLKJJ 9E 


9991 90KSX9Y"!!>32 !"&'32654&#"T+35!H)__3F_ǎzNO  
(*hy(&   `  ' 8@M	MLKM%BE(  

(91 904&#"326.#">32 #"&5476$32#[Mi[Kln3<H/<YymbC-XgȓXj,.AB   m    3@4J 9 991 /0KSXY"!!!)  ?q  # / N@$M'	M-MBE'0$* $ *!0991 990)*+]4&#"326.54 32 #"&54632654&#"
k[po[mhk'յᲖmz[Ge\S\}XgvVhnƟ{Ǵ7I]x]OY|   7h  ' 4@M
L KM
%MBE("

(91 9073267#"&5 32#"&32654&#"73=H0=X2ylaC%YMh[Kl,.ABWcXeȒXk    1  L'   O@)   4I NI 91 /0KSXY"!!!!NH?NF'  L'  	 F@"   4I IN
	 
991 0KSX9Y"!#!!wN6טNHo   X my  @  291 90	5y!     X'y   @HH  <21 0!!!!X!!  X my  @  <91 9055X!`a   #  u  ! @K !   4
!	
; <B !		  "9991 /99990KSX9Y"!!!7>?654&#">32Z
7XX]kJEYt5fhbui~`N]~C9>IH7:_bVi    s  ? a@4-0)? O OP,)O0P O09@?<,-	<&<3@999991 999902654&#"#7#"&54 32>54&#"3267#  476$32hQGgP+r< Hh		|i|X[`OQ?k_XTtP-MXS]R1531/#B[kv{؛0095~D<ͨ@$     
 n@:  	



  
4 <Q9		 	
91 /<90KSXY"	!!!!!hqpq+q       # @I# ##
#	#4 T
	T9T
S"
	 " #$9991 /90KSX9999Y"]]32654&#32654&#%!2#!VŜjoTDy{VZK׾LEKFVRFmjD@릤l?C<    J@U CVUCVBE   9991 0K
TX   @     878Y%#"476$32.#"3267MUyaRM@2XP6EU~vQ^+$$nr$$DEaUkӇCI       ]@+
	 4 V9V  9991 /0KSX99Y"	]]3267654&#! #!`p+4A};%hH^?XXj%~
WqE\P        U@/
	4VV9
VS 
	 	 91 /0KSXY")!!!!!_ 3??1L{y     /   	 P@+4V V9S 	 	
91 /0KSXY"!!!!!>B3#u   f & x@3#& & !"  &4"# #V%VUCVBE'%$#" &'991 990KSX9Y"K
TX ' @  ' '878Y%#" 476$32.#"3267#7!FsxbQMB3QG4)E "t$?91^;@"os$$CF;9/~MbN#       @?
 	    4VS 9

	    91 /<20KSXY"P]@PPPPP]!!!!!!'oqn'ف9+h         J@&


4 V9	V	 

991 /220KSXY"!!!!!
3y3׼)43)3   R@+4U CVV
9E
	 991 990KSX9Y"'3267!!#"&ANgtq4!RCCqoNX`_l
7785    X  w@B	
 		    4 9

  91 /<290KSXY"!!	!!'l3\R_-  P  !  6@   4V9   91 /0KSXY"3!!P#'w3/      
  @I

	 
	
  4
 9
	    991 /<290KSXY"KTKT[X  @   878Y@>	
/////
	
'//)/;8] ]!!###a1)h/q+qR     	 @:	 	  	4 9
    	
9991 /<2990KSXY"(]@*5(*'%300005QWPPWPWPW] ]!!!!
/=+=  =  ) P@V'VB'E* !*1 0@+0 044553300000000 0!0"0#0$0%]4&#"3267>7>47>32#"&dPQ;d$+PQ;c%-dUMbTNxxGE'\sKxvGE,Ss c         k@;	 				4T T	9 
		 9991 /0KSX999Y"32654&#%!2+!)Th}I:N蹤mJ[MrB[Q   =  - |@%V V
B E.""".99991 990@A 0 000000000000005553$3%3&0'0(0)0*0+0,0- ]#"&547>324&#"3267>7>cTNaU#iIӛPQ;d$+PQ;c%-]Bn/xxGE'\sKxvGE,Ss        @Q
	4 T
T9
	  999991 /<9990KSX999Y"(](]!&'&+!!232654&#=Dj5ius#ZP{\\	HWx
կi|NM     ' @;' '  '4' 
UC!V
U	CVBE(' $
	$(99991 990KSX99Y"	
]@
	
(] ]@()	(
(9	9
9I	I
IY	Y
Yh	h
hy	y
y(
]].54 !2.#" !"&'32654&'|Cg[9Dovtn|;akFEP~))>?qXTS3A451QUud>[        }@ 4V9   991 /20KSXY"K
TKT[KT[KT[KT[KT[X  @   878Y@	])!!!j1#3    -  s@=	   4 
VE9 9991 299990KSX99Y"!3267!#"&546D'\Tl'#P?L}'/RZz|R?JNƷ*d       -  F@#    4 9 91 /290KSXY"%!!!-{dA#+   )  Z  @A



	

	   4
 9
	 91 /<290KSXY"]@**5 888]33!!!l)3;H+   q  ?  u@?   	


	4	9  
91 /<290KSXY")!	!!/pf#hA  1     N  `@1   4 9 	91 /290KSXY"!!!%BsswwL      
 	 7@4V 9V	 

91 /0KSXY"!!!7!13/Z}#    ?  F@!   4WW G   991 0KSXY"!#3!D&%Z   TB  .@ 4 9 91 0KSXY"#m   j  B@  4W WG  991 0KSXY"!73#7!d%%    9  @
 991 290	#	#--       W /1 0!5/۾    s`f  /  91 0 K	TKT[X     @878Y#fx     /u{ 	 * @O 	




4!
 ]]!<"\]%[E_
(	 !"(+99999991 /9990KSX999Y"KTKT[KT[KT[KT[KT[KT[X +  + + @878Y@23 0!0"3#vv 	x 	
] ]"3267%!7#"&54$!37>54&#"7>32Q?v7{Cn7%faRv/q[hm?Rm}MM19<98'''j  /   @J
 	4 < <E[G	 999991 /990KSX9999Y"KTKT[KT[KT[X        @878Y%254&#"!!>32#"&XoSJrZ)/%w?_=7Euoephw`c۽i}    {  W@ `< K<K	[E 9991 0KTKT[KT[X     @878Y%#"$5 !2.#"3267MSo(bL5=Nz|F[%!!=)+:8ƀ~44    B   @J
 	4  <<E[G	 999991 /990KSX9999Y"KTKT[KT[KT[X        @878Y"3254&7!!7#"&547>32yoSIrZ}%B_>8Eupephw`cܾk   L}  & w@#` d< Kc#<[E'&  '99991 0KTKT[X '  ' ' @878Y@ & ]%#"$547>32!3267>54&#"_nXPT	l]fYd(7**afm-vSce>;hUbvv         @=


 

4 ddG	e 

	
99991 /22990KSX9Y"K
TX  @   878YKTKT[KT[X     @878Y!!!!7!7>;#"XX+ۮ+*+A:LNӓ7   X  + @\++ +++*+'(&)++4 )* ` <<K<&[*ef,*)+	+ ,99991 99990KSX99999Y"KTKT[KT[X ,  , , @878Y]%254&#"!"&'326?#"&547>327!sRHrP5bW6KW}6`TIFjh#%	dofo	--u|SUѲlgtng    ;  `  @L   
	4 	<[G 99991 /<99990KSX999Y"KTKT[KT[KT[KT[KT[X     @878Y@	
7]!>54&#"!!>32Nۅ:7Sty/#t0e	(5:=\gL     7 	  @5
4
ihd ed
	 991 /20KSXY"KTKT[KT[KT[KT[KT[X     @878Y!!!7!!!!5Dl++m%C` X   @? 	
  4 iddhef	 	.991 990KSX9Y"K	TX  @   878YKTKT[KT[KT[X     @878Y]%#!73267!7!7!!!=/;-df+N)B%+.;4kTV   R    @D	
 		    4e G

 991 /<90KSXY"KTX     @878Y!!	!!%r9tRZ^B`T    
  @/ 	
  4 dGd 	999991 /990KSX9Y"KTKT[KT[KT[X     @878Y@	]3!!"&5467!7!q>N-ͪ
	+Vm!-%pF,    { +@k !	
	

	$!"!#""!4 &$!	
<)[$e"
$,"%	
 &!"%
 #
%" 
,.999999999991 /<<<29990KSX99Y"KTKT[KT[KT[KT[X ,  , , @878Y@????????7???????@@@@@@@	@
GOOOOOOOOOO O!O"O#O$O%O&O'O(PPPPPP	P
__________ _!_"_#_$_%_&_'_( !"$%&'L]>32#>54&#"#>54&#"#3>32 L\l
#"09	$"/7)yEEW@Kpa/aK13=(*Zw1*B(*Wz1`tDKK     ;  `{  @L   
	4 	<[e 9991 /<99990KSX999Y"KTKT[KT[KT[KT[KT[X     @878Y@	]!>54&#"!!>32Nۅ:7Ruy% 0e	(5:=`\gL  Xy}   !@	<<[E 1 04&#"32 !2 !"&R]U{aSyMmvjy6Bp V{   @M 4 <<[Efe    999991 990KSX9999Y"K
TX   @     878Y%!!>32#"&7254&#"{{-%!G]>8EupoSJrZ
ba۽j|rephw  DV}   @N 4 <<[Efe   999991 990KSX9999Y"KTKT[KT[X        @878Y7!!#"&547>32"3254&V'%s?_>8FtooTJrZP_dܾk}sdqhw       {  }@5			
		4 <[	e
 		91 /990KSX99Y"KTX     @878Y.#"!!>320vJ(d%#>w>o,/+)``i     ZF{ ' @<	
4
`` <K< K%[E("
 "(99991 90KSX99Y"KTKT[X (  ( ( @878Y@(-///	/	/	,/.	/	: ::J JJY YY] ].#"#"&'32654&/.54$32F2K]^nIJvhc3V]n{=Xzr]=56F;-7%%r## 8;KC.4'$p       @>
	 4d ed 9991 /<2990KSX9Y"K
TX  @   878YKTKT[KT[X     @878Y!!;#"&5467!7!P>+h<O+̫		e+=-%oD2>  j`  @O
	   4 	<Ee 9991 /299990KSX999Y"K
TKT[X  @   878YKTX     @878Y@	
]!3267!!7#"&546{#:6Sqz#!,eT4:?wZiH    `  @#   4 e 91 /290KSXY"K
TK	T[X  @   878YKTKT[KT[KT[KT[KT[X     @878Y@	
	]	!!P``n   Z  -`  @B


	
	

	   4
 e
	 91 /<290KSXY"]@.&))::KL**-<<<IM[\] ]333!!`!#^`5ZN   `  @@  
	
 

	4
 e
	 91 /<290KSXY"K
TX  @   878YKTKT[KT[KT[KT[KT[KT[KT[X     @878Y@)8HYY] ]	!!	!#ժ -`dR=  X`  @A

 	     


4	 dfe
	 	991 29990KSX9Y"K
TX  @   878YKTKT[KT[KT[X     @878Y+7326?!!'p~-uWd<')5yi<pJ3D    1  ` 	 ~@4d ed	 
91 /0KSXY"K
TX 
 @  
 
878YKTKT[KT[KT[KT[KT[X 
  
 
 @878Y!!!7!%-=@+h-``   0 @f"!# 0/.-,+ *	$%&'(#)		4	1 #)* W WWG110-*)&# 	 19991 99999990KSX9999Y"#"&546?>54&+7326?>!3#"3o%Ĩ+	`w>%=)+${hY& }_S)	DPm}880=L=nVѧWLE'.8;3     k 1 0#    0 @i+,+ ,,+	
4+1''%, %W' W/W'G1/, 1'&%(&01.991 999999990KSX9999Y"326?>7.546?>54&+732;#"+{gX' ~^T)	BQy%ͤ)_t>%>)+UͤTOG*06<1`r#m :UFtޓ     Xy+  +@ ll 1 9990#"'&'.#"5>32326yKOZqMg3NJNS5dJt]F+<73
":?=6
7=    R`  	 `@0 	4 9e
  
99991 0KSX9Y"!!!3H8
f#E+e     hN  $ R@1`	` J	KJ K[E%	  ""%91 2<220.'>7#.547>73N5-n@@@3>A77mfP{775rh5(/L.)" țjSY"j        @F4
dL K<BJ
	
 9991 /222990KSX9Y".#"!!!!3#737$325<v>i!P+?34@-%3 J))N       ^T  / c@8 	*(-'!	)-0)'!$* ( $0229991 2299904&#"3267'#"&''7.5467'7>32;dJIeeIJd$P0'T-)S.'QIccIJffq)S,/Q$*S)/Q&    ?  @K   4u	u 9 
	.9991 /2<2<290KSXY"!!3!!!!!7!'!73==%s$dVTd%:%X𻗽J       @
  <21 0##
 
    h=#  G @N7829
	 %8?/;.2;+;;EB+H785	(" 5%(9B
8?"B5("B<H9999999991 9990"&'>54&'.#"#"&'732654/.5467.54632P&:>#&N:)9>&"J-D?U^=micUor-+Rb.JKV^dmPzr30G7,X&':6&'X(#@"!D?)HECAzLTC+e?!"D?EeDHsK]2)b?  ;H1   a@  99991 <20 KTK
T[X  @   878Y@ / ///? ???]]3#%3#Z111    }N  1 I D@% q
po>qpo2n>n&JD   8 ,/21 0.#"3267#"&546322#"&'.5467>"3267>54&'.P4[0akjb5`*7j2ʩ7iZZ\[[[~}[[[\ZZ~cIGHHGGcdFHHHHHh__g$ZZ[~}[[[[[[}~[ZZGIGebHHIIHHbeGIG      * . t@A !'~!~-~++'~}~|B/!*$-, .+/	$	$	/99999991 9990#7#"&546;7>54&#"7>32"3267!!X.{OkЇIF9S!PAzu:,Up#P@X65zh#(*(&i^ EHK,:x     N N#   1@	 
	 //991 <299077N--v\/-w#  Xjy  @H  1 0!#!X!,         991 0!!+u8       }N    4 L \@3-*+'0!o5n 2+oAn M*',$0-!1"3+"$ G3 ;/29991 <99902#"&'.5467>#32654&'2#'.'##%"3267>54&'.hZZ\[[[~}[[[\ZZb@@998(NG&7O?9) cIGHHGHccGHHHHHNZZ[~}[[[[[[}~[ZZb((+)oXZAU81:/qGIGebJGHHGJbeGIG XB  1  991 0 KTK
T[X  @   878Y!!w%    V   @mm B1 02#"&546"32654&hCz//12.0zDHdbHHdc30/xDBz./3dHHbcGHd  X  y   *@H 	H 
<2<21 /<<0!!#!5!!!fff!bb     L@&4  39999991 90KSXY"!!767 54&#"7>32h3[HC?MLIfD-%A[-1$#lc/   ( K@+  #	)  &33)9991 90#732654&#"7>32#"&'732654&omX^PF0PIBypScKE>O`oW73(.fYZo	cJQF-5  9f  - 1 0 KTK	T[X     @878Y!#wAFf   T{` & @V
	& #$"%  	  4%	<"E fe'&'% '991 2<2990KSX999Y"!3267!3267#"&'#"&'7-!D=Rf!+.P$HL5{F:LaTX0?Fps#!KSOO0/   f;  `@-	
4 9 <9991 290KSX9Y"!###.54 -վEfN'   -  /@  4I   91 0KSXY"!!NH o|     ! 
 S@+334 			
 991 20KSXY"3?33!;jŇo-+)N   +    4@~~	}~B  99991 0432#"&4&#"326!!3%D=WxE<Wx!PJLTKU8  R T#   1@
  
/
/991 <2990	7%'%7%'-B-A#wvwv w{' V' { 
   {' { &
   t V /w' V' u 
    Zp`  ! @L  !!!4 <  <f e"  		!	"9991 99990KSX9Y"!3267#"&546?67%!!R
Y^iJEYt4ehbui~:6Ϛ_P]zA9>IH7:_bVi     k& $  
 3u  wk& $  
 3u  rk& $  
 3u  m& $  
 3u  nk& $  
 3u   m   ! @J ! !4< 	= Q "!  "99991 /<9990KSXY"32654&#"!!!.54632!oM66MN56MEku$*vt/P6MM66MMq$j5uu;l j     @L

4V<V 9VQS	
	 91 /<20KSXY"!!!!!!!33<3N64H}nj{  o& &  u      k& (  
 Xu   k& (  
 Xu   k& (  
 Xu   k& (  
 Xu   k& ,  
 /u   k& ,  
 /u   k& ,  
 /u   k& ,  
 /u     " }@F   !"   4<V 9V#"   #99991 /220KSX99Y"! #!#733#3267654&#;%hH^/f?-N`p+4A}WqE\PFrXXj%~  m& 1  
 3u =k& 2  
 3u =k& 2  
 3u =k& 2  
 3u =m& 2  
 3u =k& 2  
 3u  w Xs  0@
 	
	 <291 <290		'	7	XJJGJHJHH  sL  ' . l@8+'/.( +%&"V"+VB"E/
.( %
 '& 
&/99999991 9999999032.547>327#"&''.#"wM8}4	bUNi=

L5Nr9K4y6b<=2^"J'BAs8a,>ObJHrN47   -k& 8  
 9u -k& 8  
 9u -k& 8  
 9u -k& 8  
 9u   Nk& <  
 /u       @L
 4T T9 	 9991 /0KSX9999Y"!!32#32654&#w@#'/I:NVg|L㸯qB\RJ[M   3@e	)*+*&'%(++*4("!%3. + %`<%<.GE))*31!
(+* 1!

!
1*499999999991 /99990KSX999Y"KTKT[KT[KT[KT[X 4  4 4 @878Y@lllllllllll]#"&'732654/.546754&#"!6$32y`L;:B@1:k.ZhoE,*ZR]r)#dS9`L;}D ODBoG-g;%@Gfefݮ+d /uf& D   C    /f& D   v    /uf& D  e    /9& D  w    /u1& D   j    /u& D  u    { 
  L3@.	
 .8765493.01/2.43<1 !C=("L!`"<`=]]1]"K%c9]=\F@[+%E1_MLI32 !"<=.(16C.I..M999999991 2<22999990KSX9999Y"KTX M  M M @878Y@,3;3<3=/012L0000;0<0=] ]7#"3267>54&#"!3267#"&'#"&546;7>54&#"7>32>32Jbu:1CP%(,8G=UF8A/9Q^ =YlDA4V/OERt4T~NgU3<hC"3/TXH15P`94((UOSQ:=@32''F?AD1X    o{& F  H    Lf& H   C     Lf& H   v     Lf& H  e     L1& H   j       7f&    C      f&    v      7f&   e      71&    j     R  ) @G!"! %&'&$#$''&4)('$#"!%<	<E%G*()"#'%$!)*9999991 99990KSX9Y".#"32654& !"&5 32.''%'!%F&R,dT~<xv@*B7)3}JC)
ݪex!<Eh?k-{ssxvp   ;  h9& Q  w     Xyf&
   C     Xf&
   v     Xyf&
  e     Xy9&
  w     Xy1&
   j      B V    $@ H
	 <<1 0!!!!!!55uK       % t@<"&% "<"<[E&&
 %%
%
&.999999991 999999903267.5 !27 !"&''.#"?(y/K\Bub=us?'y
3.j=G22y1m;q23wV   jf& X   C     jf& X   v     jf& X  e     j1& X   j    Xf& \   v     V   @M
 	4 < <E[fG  	 999991 990KSX9999Y"%254&#"!!>32#"&ZoSJrZ{%uG]>8Eupephwba۽j|  X1& \   j      N& $  
     /u& D        k&
   $     /uF&   D    o'vc   $   /ou{'v    D   k& &  
 u f& F   vV     k'
 u &   f&eV  F     k&
d  &     1&K  F     4k& &  
 u f& F  fV     k& '  
 Iu Bv'
~w G         Bs  ' @h'&%

#"$

 



4 "	<"<E[G%
	 (999991 /<2990KSX9999Y"!7!7!3#!7#"&547>32"3254&VB%/%%B_>8EupoSIrZTtt`cܾkqephw   N& (  
    L& H  '      k&
  (     LF&'  H       k&
  (     L1&'  H     o'v   (   Lo}'v   H     k& (  
 mu Lf& H  fB    fk'
 u *   Xf&e   J     fk&
2  *     XF&   J     fk&
2  *     X1&   J     f'   *   X+' Zr J    k'
 Lu +   ;  `k'
-u K     4    !!7!3#!!!#73!7'+q+&+ ځ׆ #q#hQ     8 #  !67654&#"!#737!!!>32%݄	:7St| # >0e),:=zz\g&    m'
 /u ,     ;9&w         N& ,  
       B&          k&
   ,       `F&        Bo& ,( vi    o>& L v}      k&
   ,        7` 	 j@"4d ed	 

991 /20KSXY"KTKT[KT[KT[X 
  
 
 @878Y!!!7!!5Dl++m`        %3267#!#"&!#3!3{>,lBJO1>]wIG8/9/00JX`_l
n853   
u    "  %+73267#7!7#3!!!7!#3#_#6%/z]0IR.+G{	..qGH.;4kTV   k'
 u -  X f&e     0X'  ( .   R0'  ( N    A  `   !!	!!%Jc7wS`}^B`T    P  sl'
 /v /     rm'
 .w O   P0!'  ( /   5
&L- O     P  '
~ n /     !'
~" O   P  ' y  /     l' y?  O     !  d@8  
	
   4	V9 	   .9991 /90KSXY"3'%!7!P`s+'_s^\w3c#   %    @J   	
  4 dGd 	99991 /990KSX9Y"KTKT[KT[X     @878Y3!!"&5467'!7!%=N-Ω		5Zb+V^"gEl -%pF,Ò:ˊ     l'
 Bv 1   ;  o& v	 Q    0&C( 1     ;0`{&j( Q      k& 1  
 u ;  f& Q  f   S  '_   Q      V   6&#"!!>32+73267IjmIM#'/>~84qqy,%dgoKN4nln     fX{ #  +732767654'&#"!!>32v1poy,'d43|NOv|# 1j<$Tkl77=+,5~`]fi?eC =N& 2  
     Xy& R       =k&
   2     XyF&   R     =Ck&
   2     Xf&   R        H   c@84VV9 VS  91 /220KSXY"!"&547>3!!!!";b3C<G4<-3NtWq"4?MS3Җnn^eqZT    {  5 M @Z.<=	
.=<=.=<.<=<4,)
 5 ` ]6]KcB]/)[ EN? 
K52,K.2K.#N9999991 2<22999990KSX99Y"5 ]@ 4]7>54&#"!3267#"&'#"&547>32>32267>7>54&#"
(,7G>	VH9@/9R^2\@68ǄSx%0Rr4D	394D3B'40UYF54O]72((QEKK<=<;>1XZ@JvaZxHA@I*|HQz"IA    l'
 0v 5     ]o' v  	 U   0'  ( 5   !0{&( U       k& 5  
 7u   f& U  fV    l'
 Bv 6   Zo& v	 V     k'
 Nu 6   ZFf&e   V     o& 6       ZoF{& V       k& 6  
 /u Zf& V  f     o& 7       o& W        k& 7  
 Ou   r& W  
~s        )#73!!!3#kh&b22b&      !  !!3#;#"'&54?#737!7!>>,&&U,I/#&,>)!P3k=P> -m'
 9u 8   j9&w   X     -N& 8  
     j& X       -k&
   8     jF&   X     -m&uR 8     j & X  u   -Ck&
   8     jf&   X     -_& 8  v   jo`& X  v   )  Zr'
 G| :   Z  -o&e	 Z       Nr'
 :| <  Xo&e	 \       Nk& <  
 /u  
l'
 Bv =   1  o& v	 ]      
k&
2  =     1  1&   ]      
k& =  
 /u 1  f& ]  f           )!7!7>;#"oۮ+*+A:Nӓ7P   /  '  %!#737!3#>32#"&7254&#"}) % ??_=7EuooSJrZzz`c۽i}qephw     "     '  )"#76763!232>&#32>&#zSG*>&$tnJ%94D-po#PnU-/b"%<"MUQPSF`j   N    P    "'!!!632 &"2I6 .)KNK76?H?Kæ~D  ;  p    %32>&+'3 !y/byTmn5`bbR     .}     &"2>32 #"&'!'7?H?KHZǛ76e ܵ|D]]ba     9   703276#">3  !"&@?L11sLY@KU.IItU+HFAAFH$$rr$  k    %27# %6326;#"&#"@Ije/-p`+];2x1]Hx#@7.8"   #  %27#  !2676;#"&#"456c:Xoy,'_8,"4ndD4/sV89Vl7+rU?         !      "#767676;  !#26&s>_nMMz33j&4MFmts?     ;      #";! &767676?6%3!]Ĉ_Y)%W4Dejyw`+
	Q2[  n    "7632!7!!7
26&"67ʳGK) ?I?J4D   T={ % /  %#"'&'&'732?676#" 32%26&#"PcRs*Y%WQhA(	jV53Mi@Tij@T5?NM",f==KJ       3!!!!!2{L3??2B+  [u    6'&#">3  ! 732767SLY@MUJJJqrK2(HbyAFH$$xx~_PxxP  < '  "267# &7>7.76$32.#";vg5kq*Ϧx$0\a4_Tnhn2}s^o1/$&٢!(*]SOW  X    !!!+7276?!?3^	2foV,h3/B}+dl72}- X7   !!#!732767!7!7>;#&X,0gq+c34,'+obcl78TNʜ   Nk (  %27#7!# %632676;#"'&# #]170̅Hia<:nb,];2]jP+"TsCl7.R:dO  T^      '!!%3276VBbCK34B%v
]u~  t *  '&76'&#"#3>32?67673.Y,/)3?@21}.u+U-,)3[;CI9y}V*4GF}]fij
4T^x    
     !!!#"'&2y2אf2VW.-vx          !!3#!!!#732y2b&6)22)6&b	   1   !!!676&98ߣc#'s@؋x6@G:$wGq3=       676;#"3!	!!1poy,'b53Dc8wSۻAml75}^B`T       3+;!"&?#73!7!%
=b,ь1%p,N^n^B        !!''%!H׋&E
P)+UTEW    	   %#"&326732673#7"&/sJH>d9d6&}`pGD<}TV{D{VT}D+tBMQ   cVn   !+732767!!!m@_0,<::=Z4K=+=    eVw{   !6&#"!!>32v0NOw}#!1jyTzi~`]f  >u       &7%63 6'&#"!3276"+ztTaJ}N3*&UVyQqrK;txxpOD2P_xx]I& 2 & R    E     &7%6327!#327&#"_
,|[GPWvݒD@!CgFgU%q+pi5x
yh     8Vf{     327!##""327&iWgmi@Ti+Nd* =|erП]]    Q      32>&#"#7676763! !#!U/b>_/5`mJbb'&4MFm    Vv  $   &"2"'!#776;#"36322?I?J<Gr#=doy,'_9,!6SZDal7+Wy*   }  !  !&+!!3 3267654#*4w/k^D"'. jJ^Oy{	@_fH9D
i_m$,{    A (  03267# &7>?>76&#">32ǛRdeml;ro, cak`m8ng'7eCYcRT45B01Q>PVFC ./˞  |[{ '  >323267#"&7>?676&#"^__UV^g^l2se"XYbX\=&"<89<:7 ##&2P8954  	    X  & (  ;#"&7# %53232#%4'&'32'3p?+'͇24/2F:t8)oa@
iHY@
lY265L   X    !!;#+732767&'&7!7!>,g=U$1hoy+'b6+BJ+d,>KA+fl7,eHQ>  R     "#76767632'!!,!<&j{h/2!H!MAL-     t   67676;#"!!;#"&7!7+pey,'b53+g=U,*e+`mb	75gKA  V   !!!!;# 4?22',~V=, >  & 8 <' Xh        Y     # #"67#7!32676&'!c7%==%)4a{ *Cgf* "C4mn8mO֦M   >  N   '73!"'&7!276@c7%=G,"2'f^!H9mȷn.-X    T   	!!776&rr./8i52JL@\M    XF`   	+7326?!76&Q,wZ`@"%f^_1eW?-=o<A)_;;&	#O9       !3!!!7#73!/0&2/]&w&   0  `   !3!!!?#7!!"-&M+i-o% `  "  # '&7!327676'&+7!!6lw+>V=bF#!'+30!Je6;m?tk9)qo	dn      %2767!! &76767677!!#  X<>+69[euS03-+(8N5J߀tPcfq!	ϋ.    .H` !  #"32767# '&76767677!!+UU}]fel:mllgڂ+[cwS-+45fcj6%tsޏfq!	 V` 9  32767#"'&547676%76767654'&+!7!lEOie=m#*&.dnoom+itjqYhY>f*$.Y('"08g!CA&%+K;jC:$$"    i $  !!?#7!7>76&#">323+Qu3L1%UG\[coOv5s^%Y[u%6UtAVAdm?<')ݿX^H  "  #!!!2! '&7!32676'&+33DsF:3+lw+>D@oAAfO@tfstt_95jcf54   H`    2!"'&'32676'&+!!na33+gdd_9U[AAY)Y0,fgst%)58jcf54v5    8 %  #"'&'327676'&+#7;7!3
Ip-*٣EF=:=BDHoA%7T8%!B!%61^ׅ#*+rB`GLr!¦   V{    !!676;2 7676'&#"@<<)"^O_,%	c& !iI7
o%,p\])(UN& A,A   Q     !!t+   l  e'              !!!!!!!7!7!7!tC.f+.fXXf.+f.: R       k& $  
 /u /f& D  f       k& ,  
 /u   f&   f     =k& 2  
 /u Xf&
  f     -k& 8  
 Du jf& X  f    -'h ^'
 < 8   jO&    q #; -'
 N'
 6  8   j0&    x -'
 6 & 8  
 k j&    r -& 8  '
 6 
  j&    r Sz{    'h ^'
 < $   /uO&    q #;  'h ^& $  
    /uO' q #;&   D    j  N&   
   &        f,k'
 u *   Xf&f   J      Xk'
 Pu .   R  k'
 u N   =_& 2  v   X_y}& R  v   =_N&  
     X_y&      k'
 /uy  Hf&6  f     fk'
 u *   Xf& v   J        333327673 #"7##oo
8E! WH;;ށ9RJ%2:8}0qh   k& 1  
 [u ;  `h& Q    j  Hk'
u   f& v       sLk&   
 3uf&    v      vk&
   $     /uf&   D      fk&
   $     /uF&   D       k&
   (     Lf&'  H       k&
   (     LF&'  H       k&
   ,       7f&          k&
   ,       7F&        =k&
   2     Xyf&   R     =k&
   2     XyF&   R       k&
  5       f&d  U       k&
  5       F&d  U     -k&
   8     jf&   X     -k&
   8     jF&   X     &   6     ZF{&   V     &   7     '    W   Rj :  >54.#"7%>54.#"$32j4Q[y}<+poZ97O-9D6 ZO1)DF$6hhE"Sslr*g""hv@
"69LOa13I U_"SLT>*>  ,F^]   O{ 3  7>54&#"?>54.#"7632B^0V1@{usa6bB4<,R|D)'?? ,YZ<gyA8C@#h&2>DR*=EEME=C/#4~υ 4IL   k'
 Lu +   ;  sk'
  u K   t  % -  %726#"'632#"'#67&'#" 32! 26&"^-g*3}-HtC2%?%3+JL67='g$0?!wi?!x

yaGyl$>40/-D    X6   !!#+732767!7!C/31foy+'c5+0_w#dl7,d    ^X`   !!1+732767!7!P,0M+2foy,'b5+-``dl7,d  k&
   $     /u1&   D     o&2  (     Lo}&2  H     ='h ^'
 < 2   XyO&    q #; ='h ^'
 & 2   XyO&    q "; =k&
   2     Xy1&   R     ='h ^& 2  
    XyO&   q ";   NN& <  
    X& \        tZ     %726#"7632#"'#67&'&7!7!5-g*3`}.HtB%9F1,N
y1BXl}7&  t{  /  %726#"7632#"5#67&'&?6'&#"!!67632$S!)9tc{.H^9uz*41/?-2}#%9T(8!`j
y1BXl+5GQt`l3!3ߨ  t  $  %726#"'7632#"5#67&'&7!7!!!!$S")!-:sd{.H^9t {*41Y,=%=,^j
y1BXl>  X`   %#!73267!7!!=/;-df+N+.;4kT    -  26&" &"2>32
#"&'#7#"323?(q?*Z?(q?)@8v?\77ІGV! 4{GY77ҋ?RsDD]]baab40]]S   5J{   -   &"2 26&"#"3273>32
#"&'#?(q?*?(q?)@8v?\77ІGV! 4{GY77ҋ?RsDD]]04baab]] rM     !!!#'#7'7'3'EiNUx9M!	&lP{s[q^??y?R   rM  (  	&#"# ''&7 !27&'32672MUy͋,J.UK"Fj9LZ_$$r1yMs~"&AF     '  '7&7 !27&'3267#"'&#"!t&#6cZOt &;UN5Rbu!uw9~y!Z9:++~~     V   !3#!!#7'%6w3bi% _    !'!!7#7#DDFi2<z4_lTb_rBsI1\w    s{ 1  .#"#"';# /&'32676&/.76$32r2FXbo
Pt"]-*an2V^gv@M{_= 4598P2&Pۭs 7:<98<"&    d`   !;# /&#7!W-+"-+a0i,`);PۭV  [   $  "#"#7676767637$!!!2>'&#%N+&=&W1D-.eٛVp'32p$0"MB?~m66      +  32654&#%!2#!#7332654&+3Dy{VZK׾LEKB~.~Ŝjo.mjD@릤l?C<RfVRg      47#73!!!3# &%32?!-R&R''Z&Z"NF''\`2R`TfDRZ=@       	!!!A+       !  #!#73!2!&'&'32654&+Jss0pĵ=Dj7Q\\\NN	HWx
|NM       {   .#"!!!#73!>32(xM]2z&UUc&c_%">w<m/+,,A>&6J`i  ^{  ,  27676'&#"!67632!#32767# &IJ%#NtQQ}"EZ[d#&	--dhhhu0hpP**fL--XWq}J((ʵ^]1G%$:(&    x{    7!!7#"7632 26&"$!BTTe67Z?>]?H?Ja114/.D  Y{    %!!67632#"'& &"2N$!BUSe67Z>??H?J_a11䘘/.OD  2  $  67632 #"&'!676;#"3 &"2IQPZNN86e 1poy,'dg?H?K]./ba@klnKD   H'}   70326&#"6763  !"'&H56EDUAvRSRJ4[WXZuu66bQQ9:P7,    s}  -  %3276#"763!"'"''67&'&76!2&'&#"a46
S*:fJ0t65ZOQJ46GFR 9Kr]G&A,7    B  $   26&"7!;#"'&?#"'& 32?2|?5s#6+a3418EEQEE77G00D:Stnlka110/.    #   26&"%!7#" 32776;#"d?3{?4> 8Q77H006Y]a,4Dab40/.] gl75    %y{     703267!77632!"&6'&#"%4_e	457v00epEE7?:w喗*q=><;    Sz{    >3  #"'&7!6&#"32767nvwx75mm4ew-/peHH!'**w:?t;<>=q { 	 3  32767 #"'&'&'&#"67632?;#"'&7[!HN<<!@5X0/hU_`k5jcd_a
!,5!#Hq%!?;:n,Q`ƟVv)?!"D07o[    -{ 2  &'&76$32&'&#";#"32767# '&7>;="7]eht.Riz7]	M9hu+2Dfb qrlm^.tklbً=@BW	&1E OY"[\p  x{ 2  !"'&'7327676'&+7327676'&#"767632+bfej.Refrq&lZ<2+uhCY	M-zoV.~lk]"UU=p\["YO E1&	WB@   { A  #"&'7327676'&+7327676'&#"767632?;#"'&7'En02JO.=JLUH*SC+&+XK6E	8![U@l._RREY5
!) !#HZ& 7=JJp\["TO E.)	O.N7o[$   ly  .   !27676'&+7327676'&%672'$HG*F.<4!J*@/E
42b_]IF~.,~~M@M%?H "J7#"-VWbLHIGgVV=L  XT`   %#!73267!7!!7!3#1,bgL&3,N_&+n  V  ;  "32767#"'&76763!3676;#"#!"'&'327675YAB !\ZAB=NQP]LL1+'-hn|.*'(+1TLJI3ACBIPQ wRROPRR:Gb..⡠rv..!6MM   bV`  *  %#"'&76763)!"'&'3267"3267P_NO1,.'2VMNK4BEEJ +["!_[=b\⡠!6OP:       r_ %  %#"'&7632&'&#"3276?#7!gjikop23`UTG.GKMPba  <='#"+e2(1YXYY    Hao    7!!3276DI,f=.B\CCcN}V#L~||  `    %276'!!! 76-;/CC=h'.1*W;HJ9SL     J^   !32767!!#"'&#NP;:|#u1j<=Vy44GF}\]fij      !   !6'&#"!676;#">32 ݄NP;:|1poy,'dg1j<=)y44GF}@kln]fij  9VJ (  %6'&#"!676;#">32+7326}NP;;}1poy,'dh1j=<(2goy,'dh)y44GF}@kln]fij)bln         !!!3#!!7!7+7!!-f9D^&)l,,l)@&3ܐ     `   !7!#"'&7,De,VW,l.-vx    `   !!7!!7!=l,,l,,b     *  #"';!"'&?&#"767632!7!3276-VNMN6: b,EG1NV,ZMORe,NB>FIL+<77llu:?=
  m    "  &#";4;!"&?#&76!7!!;
2`=b,ь1{&+@D,N028?pno)b̜    	D   %!7!;!"'&4 +N b+GF77ll  H .  	!;#"&7#7!!#"'&'32676'&+A|ZT)I,^0+U,k6M%"+MKJF:=Dh..n~Nn`L9	!qfst%)58jcf54    ,` "  %#"'&326732673#7"'&/sJ$%>zd9d6&>?1/pGDdd<w1}TV{1{VT}tB&')(    ,V` "  %#"'&326732673#"'&/sJ#%>zd9d6i&>?00pGDdd<w1}TV{1{VT}B&')(  	V{ 3  67632+7327676'&#"#6'&#"#367632./99K#$={/Z^c, R-,2231'=?DD`F#"dddl77~)*+-y1y-+*)~1`tD$'R F{ '  !7676'&'&#"+7326?!67632хP&\FF=+'qpz-RT+' VTT[xVo77#WVyv\pb./ F&{ "  6&'&#"!!67632;#"'&7	'UMDl' VTUZ;<,U-uBG&-HWK`b./wxj/.v    ` 	  !!!!I}`uu    bo{   !  7632#"'"!36'&!#3276-jmojniN<!% *{+*ijN/ ➟]GqqG])Q7]]7     Ka 	 !  #";!!!!!!"#" 322Ku"!)*uK;*)*2%+45(UV$"     @    -  '"3276?3376#"'&7#"'&767! )DF)p,/fgY746NM]46.)Cnd6aN9[jl`-SPvogD@ED~w\ V  ' /  76?!7)!!)7!7&'%676'&"i',)%),']i$),,)$]7y'#]A:y'#]@: r  rr  rtr"\\"["\J\"    U`   32767>7!!7#"'&''zL^KK2 )d$"?bdv<87.5,,! >&ln`45     +   327676767!!7#"'&'b'zL^KK2$!>bev<77/5,,! >#9/u`45     V@` %  327676767!;#"'&71?#"'&'F'=<M]LK2 d%d'+yEA$=cdw<76/5,! >&66n\67lb)`45     !V{   .#"!!67632n(wN\ML2'-&"<ebx<66/+,,! >&lnR
`45   {V{ !  .#";#"'&7!67632n(wN\ML2'\g&,xEJ0&"<ebx<66/+,,! >&ln%77lp7`45    `   37!676;#"!,d+gj,T+,g,QP! K       	`   37!6'&+732!,~gV,HK+d,K !PQ      `  +  !&'&'&+!! 32?676'&'&'&#(0s$"$Vlhi"US0>W/9
%A-mWF`MLtDC_(:%     ` 
 "  #327676'&'32767!#!!O4O[-."!%K313kF;;Bm++|}f HI  Ga/0!GHoKJ`     |Vi{ 8  &'&#"#"';#"'&732676'&/.76$32i2GRSXb78
P;:"?@d',yEF12V^`^gu Nz _[\= 48P2&TUVWS)7lk 7<98"&    X7   !#!732767>;#"0gq+c34'+Ccl78ʜ@    X7 !  ##!73267!7!!7!7>;#"3U1fo+bhM&3,)'+B9r&JblnNʜ0A     X   !6'&+732;!"'&EB+'c+FA@}87lc   X7  & (  %;++5$!3>;#""#"6763̋)8t,\q2;93'+@5Hi>a2Yl
ʜ@L56T  :(`   !7!6'&+732!!z>,~gV,HJ*d,>>K !PQ    V   !!;#"'&7!7!>+T,KH++>DK !PQ>    C`    !7#"&?#73!!!3)3276U 0hz(	R&R_&_:_&_H&0NP:0J]f/yhF;   V` &  327676'&'!##"76767#7!fO.A((^_IJ27&@+#20 KW\&ELQskXWWXksTH;l:pA     ` $  #'&77#73!?27676'&'7,6!1oCC,=,%C=!&`VO6!;lyx:yƩ4aXksTH     `   #!!>iEf`j   n`   !###!!d`         676;#"!!fZ`av+wZ00A!s~ٞIHo<)      `   !!!OQ\\`Yx(    V]`   !!;#"'&7!7!,/N"d&+xEB$,``77lb    `    %3276'&!367632+'67!7!'& --1.CM1; 	
-9G`v[0@78 H` !  	!7!!"'&'32676'&+M+-!Ik73+gdd_9W[Z]AA9	!qfst%)6jcf54    H`  .  &'&23676!7!7#7#$!26'&+jc8*+- Hk82+	i=9tm3A}A	U4X9	!qfs.(#-[H*4     V   327676'&#"67636!PTdB&CHLJN:JMLؔ])-n`rLG`Br+*#Ӆ^       !&'&76762&'&#"3q`Hp-)أFE>:>BDHo@$8 ^ׅ#+rB`GLr         !'"'&'327676'&#`B`Hp-)أFE>:>BDHo@$83^ׅ#*+rB`GLr    QV #  %32767#'&76762&'&#"&CHMJN:KLMؔ]**أEF=:>BCHoA`Br+#Ӆaׅ#+rC_  6   *  32676&#"67632 '&67632"'&EDCyxvyhj1䂁13.
+)1<	Rb6^^aa5'''/-6L&&  
  ]` 
  &  27676'&+27>&+#!!2vH,+
	!!J&R^44T^(^)) cc4520Lf2QHIjOP`GFR:9     7ey  .  % !";#""'&76767&'&767676	HGF.<4!J*@/E
42b_]IF~.,~~M@Mkl%?H "J7#"-VWbLHIGgVV=t      , +  %#"'&7632676;#".#"3276?#7!Xhiikpq322ioy,'dg7HPbc y'##+e2eln10YX       `   !!!!!!FOUOFZZ`k1 W   $  !!3+5$)3!7!&#"?676UB%ب(9t0Voҽ;93,Ni^kb3+VSk
]L@6     <V`   !!	!7!ܝVDwS$V'`     ~  `   !!!YD9`  EV  '  %#" 327#676;#"!
26&"f;EBH86R310_]a,6!!g?|?4=[1/0411aml76e}\\D\    j &  327676'&#"67632;#!7+73dTdB'CHLJN:JMLٓ])-n &%%&rLG`Br+*#҅^p¾       &  7&'&767632&'&#";3+!7#73Hp-)٣FE>:>BDHpA$8TD&%%&p^ׅ#+rB`GLr¾  	 % (  26&"73!!!+7#"'&7632?re?r3tU,a* 066=s!"67_^w6!"}\\D\SL`ۦa11/.~  @ 4 >  	!#7#"76323!#"'&'32676'&+ 26&"B /m<sD67_]x6""tU,W)>+rs>:<6:1357Sm##XeR?re?r2{ab4/.]SL9	!qfst%)6jcf54\\D\    9 <  %3276'& 26&"73!367632+'67!+7#"'&7632?re?r2tU,$0Y/y4<

z /66=s"!68]_w6!#}9Gi\\D\SL`v[0@78a11/.~   g / I  &'&#"#"'&'#"'&7#733367632732676'&/&'&767#32'.05;$#u.Y"UU<<<9%'+d,>>% 2X965/778>K
L-^	g3= 48H:'SUVW"(PQ>½K3ZH7<98"%RQ0*K !    X	 & .  37676;#"+732767#"'&7#73#3>'AB+(&,/DL~+;#%'+d,>g3NNN0Ab+bl7.bPQ>CK !     s 3 < G  367632&'&#"763#"'"''67&'&'#"'&7#733276#"#;&76F=(w6..)4)(1V ae,<>x)''%+d,= X
N2g3'&)#,7Gr]G&A#(PQ>J9K,K !     ~X 3  ;>32+7327676'&"####737676;#"Ϯ!%n?`)1KK~H+<$#}

^*)}Ϯ,'BA+(&b]fikTkl77z45GG~NNN0   ?  &'&#"#"'&'#"&7#7!;7327676'&/&'&7>321&0/5;#$u.Y!UU=<<:}D0,b;0l9>%&K-] 966= 48H:'SUVW#)`77H7:98"%RQ        #7!;!7!!!7#"&,b;*,a*}D`77`  3       333##333##3$Ϳ&%C$Ϳ%&sPTQ PTQ     "     %#!#!#!#!?WW9LWW:>)>)  J "  332767!!#"'&76'&+732MP<:}$v1UTj;=(d&,xEB^Vy44GG|\]33ij:7lc    V; )  3327673;#"'&?#"'&76'&+732V#>@22},P,a531,U-+(P,a31^VyhGF}˄nlk}]fij:7le     #6&#"#367632OK!23%$FB65De)(3i~D:'(Fh5;<      #6&#"#676;#"67632OK!23$%FwGEM@@65DeQ3i~D:'(Fa<=~>JL4v  j    +732767#7!7#73?  ]z&ox~J~r       &'&#"#367632'(1>-38z%?>L,"b!<>tb6	     32767>73#7#"'&';'(1>-38z%?>L,"J!<>!b6	    "  32767>73#;#"'&?#"&''&2;1/ 8z@N.+%~M&GI#<>!8~=7{J6:   
 "  #327676'&'3276?3#!322:S0  {+%&)ENOz()|)7((?Y**t 1   333##=F     "   +7326?33q7<=LL9=(UYY((}">!bitCf     8@   4 G 91 0KSX9Y"!35׬~    q   !#R94׭~   $   Y   27>'&#72#x7-.6vDC.cdvt'&l&'STTS r   0"'&6763"!vDB.cdv6..tSTTS'&l&'   e   327676'&#"767632#6}>)
-g.001 010ib=iEq68@+'6%@

vJyQ5    _   #&'&767632&'&#"3P6i1I[i,-( )*,.gF(
$}8d5QyJv

@%6'+@  PFf  6@
 991 290 K	TKT[X     @878Y3#'#󷰘f    f  6@
 991 <90 K	TKT[X     @878Y#373F򶮙x      @ 1 @0#ll+XB   [  @ 1 @0#ll+ Mj&  0 C b  V0 v   .  `    !!e| [`   !C|  &Y`aL  &`bL    j   733##7#7,,",,"  w[   !7!9>"մ`F  R;1      :@	22 1 0 K	TKT[X     @878Y4632#"&732654&#"ϦwvvwM76MN57Mvvvv7LM66MM    o    #@
 
 2
91 /90!33267#"&546K04*%P-1\+ctNPJ!)MB< yh9  @  	 	99991 999999990 K	TKT[X     @878YK	TX  @   878Y@'
 



]'&'&#"#>3232673#"&1*"4
_"=.3$&4
}e#AT%!E<$'C> uf   2   %7;!"'&7""i#:/ ls87o[      7673733276r)$١Yatoق2SFEE[    cn   #7!;#"'&^zw(?ʆ./~J>~=<    '  .#"#"&'732676&/.7>32.j8?F4`OAA8z<BK/Q2iODn "'`Q`a " %
[LZe      	#'#37dISG-  `   #&'&767632&'&#"3P6i1I[i,-( )*,.gF(
$}8d5QyJv

@%6'+@  w  I   	#!7I%tм <  I   	#!7!I켴$<t4     I   	#!7!Ix$xthh     I   	#!7!I<$t4     I   )7!35S%＼    
  s`f C  9f v  PFfe  yh9w   XB    991 0!!w%  M   `F   @  	 1 <990332673#"&5XLQuƘF=HME  R;1  !  991 0 @	/ /? ?]!!/1   ;H1 j   Z   #767676'&"#"7632UB66&.Lmb[sTr..>
  u   uf   L@
 1 <20@/ , ,,,&8 7663146L LJJBB]!#3#fxff      #VVD    '       ;f    ###yfxx `	&s  t $  +F   >32#654'&""˜H7(+rL;b"@#%KE    a   !32 $   !727#03xyz  $   #3$7#0yy30z  9f   !#Af   ' C   1' vy   6   #7373#%#l    o-   33##۾$%$  dCn   !7!#%+l   E   7326764'3#"&:A'=	tV5bR2&;1'M(7^)s{6    -
9   "&54763"]XbL]%Fo?wS?:%P   K   73733%#$%  N   #7!##n%+%#     2   #73733##%#$%$   @G   7!A$+$G Xi    %+73276?!P0qoy,'b63#+ml75}     V    ?!;#"'&# b',yEE)}}57lm  28(  !  991 0 @	/ /? ?]!!$0  B2(   E@  99991 <20 @ / ///? ???]]3#%3#00   
     1 0#"&5476322654#"cL\]XbL\]Y%FI%EwS@o?wS?o;#Q:%P  6:   !#   o|    %@	
 
	 291 /90!#"&'732654&'4$$4f0+R#DI0\,cv62E7  o  v  j&   #VVD 	&   #7##I$$Iv    @   #"'#"'&73276732767/5@k0Kj	
LP(LG*@FF0:m  I;  @
 991 <90#373񷲚x     @
 991 2903#'#J񷲜m   b>   @  	 1 <990332673#"&5bXLQuƘ=HME     (@   #454'&"#>32ȍ(+q"˝G7@$%JFL;b   7  n@  	 	99991 999999990@'
 



]'&'&#"#>3232673#"&1*"4
_"=.3$&4
}e#AR%!E<$'C>   Mj&    991 0!!rw%ڼ     B        6+   #"'&'.#"7>32326-WOZg
Gb3NV,ZS5`D
j]F+<73
":?=6
7=  x   7!&&  x   7!&&     '!ttuwy rM   'N?rs 
   2654#72#!%FI]YcL];#Qo>wS@   	n   3373	I$$Iv  &    !7#ppD,,=n  @   67632632#6'"#6'"/5@k0Kj	
LP(LG*@FF0:m H   '7'77Nlhilh) , !  #732676'&/&'&7>3#"9F"	;D'RRz.!RSz#  :&    $  ;1tj        $#4'& #6%6k9	3OG$%%$GN(  tCf   3ġt    V H   %#H  U   +  `u   {Vs 	  #"?3;cX$3Vh    H'}   {' y  F   H'}' yl   L'    -  9f v  ;(' p j    f&    - y    f&      f&      f&    f&    t  Nf&  ;    xf&    O  (&         $     %     zP         )!qi)_/=     (    
 =     +    [u     3"326& !  ! 22
q449qr449JVJJ\xx      ,    X .        3!!!iq3+    
 0     1          )!!!!!A2A2o!2 = 2     j\      3     	   	!!	!!22>322      7     N <    [  u  % -  67676/3!37&'&7676?#!aE5Mp))jx32wNo))jx32U'^A
Uk?HJllKFFKllJH=?kU q  ? ;         3!37&'&!!6767!x32wHkKC'C1%	'[1C'CK|+~[##[ą+   x   '3&7 323!>76&#"!c7%=^=%))4a{ *Cgf* "C4'm8nȿmO֦M      k'
 /u     Nk'
 /u   5f&       df&       eVf&      O  f&         (&        5y  (  7!;#"'&''&'&767676'"79DR,fA<1=˴NR6=AMK!"*'GD#lT
=$+9xУ[[RMB    V!    %!! 7676'&Ea,Y7Yo-Da.++9(-EI8		   AV`   !!&'&+732)})SSW	$ *.PmO^(vVH JY     8|! % /  &767632&'&'&#"32 #"76"326&cRs*Y%WQhA(	j53Mi@Tij@T)?NM",f=KJ     dRt B  "3276767#"'&76767&'&767632&'&'&#";xM9-;rthf+		k4nhtt _^<<W^s*Z$WQi@((4g+/)A!!*%VVyKK@?dNM"*!    V   #727>'&# !7! :1DMmd,F;g[1),l,TMX[TL&D     eVw{   !6&#"!!>32v0NOw}#!1jyTzi~`]f  ao(     6'&"2767   ]YB2,VD0v$ƐlƐwppvvRQ    O  `   ;#"'&7#7hT:,NJI+d,`J!!PN    A  `w    I  z   !!'&'&+732Ȳ`k!!^p-P_<q-wJJXT{` w      `   67676'&'!!!Jf<34&ޑW2'Z|u4@bY|rNįt`  pV $  ! %$67#7! #727>'&xP;4,l,1%+.!0CMmd,F0A*R	LX[TL&   Xy} R    `   #3267#"&'.?!!#7,h%F"%.f7Ok
z㮢,`?"  VX#s   V{      #"&'! &"2"68Z}#rܾt*?H?K{]^SD  V} $  %#727>'&# '& !2.#"ҌDLmd,E;_s56cZJ45R! <1LX[TL&9*,7;WG     ,`     #"676)327676'&ș(551 (,G/N TikMN 6=8\]^r'      `   !!;#"'&7!,gT:,NJI+d`K !PN     `   !"'&7#7!32767654'!2JI+d,ɓ9gZ"7=#)

:PNJ!!7gLGة     HVj  !  2!$76676'&HU:caRRw`?,;;.wL^&7)L4
j{4V@BsSV}dxaM> V`   '!&'&+732!;#"'&L&i !O-ueXF.&:)h !P-vgVGr6LJ<mLJ>     sV$`   %6!!$!!4f$ghdSSzfg$f8^$d3V@O  @`   3676!#"'#"'&7!
2UH%g;eTE\gH[86*CqSSq6 O  H1& j         1& j       Xf&         f&       @f&        oV$ 	  #   7676 !"'&7607676"&WxsI]5cLC@n)l!?F-k<`zt~x     ^m$ 	 $  6'&'&'&%6#"'&3676
#T A@CN^XSTujH*<,_zEf/z
xGCcX}վUjNk          !6''&676'&wJK'hh-Cj}3Qk@1qS"40z7/cT .  f&       k'
u    8V   '  67!!&'&6%67676'&#jS$SPw5/iQQPx50,%Y*	2z)&W *
j#U mi$a mE+_q!v+\u!      `    #7!#'$7%!767'K,,J.Q7e9YD5%F?JMF=$3-t   ` /  '7&76776767676#"7677632gᯪ-iDNKF]D,]{	BUGC]gO\ 20R[Fk{ZsB="20BPZPa|bl  V    "326&!&'& ! q54:qr459QQA_JKUKIt`*~xƇ  V{ 	   "326&!&'& 32i@Tij@TQQHniW45pJha#j=i    Z9    %2#727>'&#"76)!"@oNK!md,F;IIƪ|3Yk11sfb\SL%xyǬk     IV` "  "#727>'&# '&76)ݛP^! ;/mCMnd,F<^t66,M[\ILX[TL&  /   )   UV "  %67632.#"!!#"&'73276y<k2-$M%^?Q%!*ߋ<>n2.&J'QAU7czc<;7=P       	3 '&7	6'&# A2^N5]/:1H]H<s}/'F;;&) F6    U  z   	!!!y*Edy  kV !  !6%$!6'0#0?&'&&eZTM6+&m|߭mS(5G,nmBP22iA+J%5O7e5  x   %!'!&'&'7#676 |5 d!bv0B˻HS
WRS;
    ` +  676#"76776327'&7677676LF\D+^{	CUGD\E,^z	DNsB= 20BPZPa|blB= 20R[Fk{    PK{    !3!! !  #"&'$&"2u), "Ukt68Z}#?I?J(S]^D   { F  X M    [u     !3276!6'&#" !  ! .QqrK;rqK.{JVJJ_xx]ΔKyyHxx   } $  %# '&76!2&'&#"!!32767N]Tgst66ZPOK45GJO^8%)*;XMNO9*,6[5XfAZ;   F%} %  7032767!7!&'&#"6763 !"'&F57DAX^C$)$:PUSI4\VXZtu66hKT9;ZAfX5[6,흜      V     &        !!###`ybg'+%T  V   !!!#!{]}獼L'% V{    %!!!7#73!  #"& &"27%Gh%ht68Z}?H?KppS]OD     9   703276#">3  !"&@?L11sLY@KU.IItU+HFAAFH$$rr$ &6   y    9' yE  :     k&R  
 Xu   k&R  
 Xu  X -  %+732676'&/"!#7!!6?676321oo+bhZ])GM%:Z((d15< T$=)+klnz3%D1C0$5i     zk'
 uP    |    7# 547 !2& !d)@I.z@y.<2gs͇HCuyH    6      ,     k&C  
 Xu -   a    "  %32>4&+#
+732>!32#% Q%#Fw%0
r\E^Shqn;lacQZѰ+o9       	   %326764&+!#3!332#%Q%"nBnqn.la|)cQZh9:D      $  !!6?67632!6'&/"!#(d15< T$=)ob])GM%:Z0$5iz3%D1C     Xk'
 uW    k&U  
 u (  Fk&
  `         3!!!!!"'q'>>/+B      $          %32>&+!!3 )gy/by2:n5`kbb'      %      z   !!"2/   x    !!3267!3#! qd;
Pq>~> ZFU1K/B     (   |  V   #!3!##'yffEV5pEE*v_d  `       	  	!!!"s+==  k&
  U      X .   u     
+3267!!h#Fw\3
_vN2SfѰ+	aoM+    
 0     +   = 2      j   !!!!+/    3    &      7    (  F   +3276?!!\u2P:K=S1s1/jl          #  476 ?! #7&$>4&'.C ̕/͔ tAw* r\KQsff͒LS4w(x q  ? ;      #!!!3!""'q'q>//B        	!#"&7!3267ݕ6)g#YkG{QVI3V        )33333"..  2   )333333#bz"Bq000   |  l 	   %326764&+#7!3 !)	Q)U)!q5-av,fQZ<F   : 	    7326764&+	!3 )!	Q}" q
	rRXy" av,fQZnN<F=+      * 	   %326764&+	!3 !@y	QyU"'qn5-av,fQZ<F  U   65#"63  !"'3 !@.xKItҨ@xr2k*%-HH|uqHH{      2"	336 32 #"#4$db!d"qv:iΰ'r9klu          #.5476$)!#;#">D~,0sbOn#i08+N֐^m!  /u{ D    $K ! ,  46?6767676%67632  $26764&"$12~X3&E)0w==5%(BӜ BӜL
,IX@
#ofLX	G   
  b`   !  3!2!'327654&+7327654&+
^E?"}AQ`}+,7<`|jGy_#&Y15>#3     q  j`   !!C+{` `    3267!3#!!!JcLEO{c8X8 (VU{F   L} H     -`   #!3!##'_CCwI`;;0WWVJz1zU     4M{ -  ?3267654&+7327654#"7>32#"&4.Z{rF+TN]랤+Z|eKKaѭs,1(T=0 Th4O@p}qL\L  +  ` 	  3!!!+##݋`55  +  F&  u     A  `      `   +732>7!!}&(>_/
d^FRQݯPI   `   !!###`31`/`q7s  ?  `   !!!!!ee#J=J``}   Xy} R    ?  `   !!!ݯï`{`V{ S   { F      `   !!!7+̯ݯ+`{  X` \    =V   %  .547 73 3>764&'0M5GOO4MJ!9CK!9DVMZ.gN[s7P}P}     ` [    m`   3!!!3##=#c8`{{    (  a   ;!!#"'&'&7!M0rk_"Qkv'<+=!
'e[3     `   )33333𯲯𯲯`{{   `   #333333#𯲯𯲯Vc8`{{{    i  k`    3#7!32#'327654&+,RԷ"TIn;KTnIZt&+&\/4      ` 	    327654&#32#!!222;KT2bRhO"%&\/4ZVAt&+``     ` 	   327654&#32#!2{n;KTnRԷ",&\/4Zt&+`    F6{   "'3 7!7!&#"63  Ł5n^#+駚4tO5VurTkKX    >{  :  "32767676765&'&'&!36767632#"'&'&7#)N-#*-"%Tj<y% mgn[]0#Wf]]5zE-%D,"5zE-*Js`Qpu!	ʒH%2      `    #.5476$)!#;#"'	TyWP3Pv^'/S06D  Lf& C' r     L1& j' r      QXY    3#73!!!632 76764&#"Q,T#T,K9g4+&.[iw8Lèvn2YnL   q  f& v  p     } $  %# '&76!2&'&#"!!327670RYZbst66ZPOK46GFR_:#)_+;UPOM9+,7[8Ug@Z:  ZF{ V     7 L     o1& j'      X M     ` 	 %  327654&##+732>7!32+22;KT2v&(>,/
d^FRVR"&\/4PIZt&+      ` 	   327654&#!#3!332#22;KT2eeJ+JR"&\/4!`}Zt&+  (     3#73!!!>3 !654#"(+U#U+K:1j I@rNw8L]fCTJ;,z   A  f& v  w     +  f& C< u    XF&        Z`   3!!!!#Z#>#88`{    ]  ^    %32676&+737!!!3 ))a)5)'C))5/-avaѠd   t  c    32#!#73!!!32>&#aD^+J#J+n\2Inu_n})=;  >ua   bo{         !!!"<n/2     S     !!3%N=g{`:     z   )#73!!!!ف.s2@/WM    H  j`   !#73!!!YY+V++h+6   X{   !2+732676'&+!!!5~Z&=)_1+bhRW"25inz31R     X`   32+73276?6'&+!!!~==)$1no+qb43KxO)ihӶjl77|14k` |V   #!3!3###'zeeD=Lq>
4qEE)v_Bd   -`   #!3!3###'_CCRSc8'I`;;0WWV%z1zU   o`&T      4oM{&t      tX   3!#!!!門M
_ 'l3\p-     p`   %3!#!!!Qh?#wS%JcD`T`}^   %t   !#!!!!!3!"'nqn'h9/p  `   )!!!!!!!gg#J=J#!h`}q      N   #3!!!#!C"p;pD0ŃB"]   &`   #3!!!#!LCL8)ee`zr  o&^  u    o{&~  H    Jt   )!!!!!22%1p  U	`   )!7!!!!ݱ))̈!hB      N <    V`   !!!4n4YY`)7       R   !!3#!#37>>3333Xw@@   ZV`   !!3#!7#7374n4+""+`)>۰>   t   3!#!	!!SMI1m1p%!  7S`   %3!#!	!!0h?5VyVDyHN    e   !  3!670767072!6'&'&#"e.#/5?:T$=)zm]GM2:ef2$5i1z3%C   ;  ` K      ,  |  Vk&
  S      -F&  s     XT    !!!2+7327676'&#-b"'r@NUM(<(_0po+e14R(EN5ool77~/1   Xp`   !!!32+73276?6'&#"O%Jc==)$1no+qb43Kk`}%ihӶjl77|14    X   %+73267!!!!!0ro+bhy"'nqn'+nlnmh9  X	`   %+73267!!!!!71no+qbh_g#J=J#+jln`}  ,t #  "'&'&7!3276767!!!wb15<:T$=)f#Y]GM2:Q#Mۀ0$5i3z3%Ct    (a   %7#"'&'&7!;!!!+(kv'<+B0rk_"?he[3=!
'    j   	!j.  k&
  M     /uF&  m      nk'
 3uM   /u1& j m    j     {      k&
 R     LF& r     [uQ   Sz{   [uk'
 3u   Sz1& j      |  Vk'
 uS    -1& jb s    `k'
 uT   41& j_ t    y  H`6    N&U  
     +  &u        k&U  
  u +  & j u     =k'
 3u[   Xy1& j  {     [u1   bo{   [uk'
 3u   bo1& j       k'
 uj   F1& j9      (  FN&`  
    X&       (  Fk'
 9u`  X1& j       (  Fk&
  `    Xf&         k'
 ud  (  1' j       t{ 	  )!!!!"2%3p     ` 	  )!!!!)!h`B   :k'
 Muh    1& j      <R   dRt   = 4   DV} T   )  Z :   Z  -` Z     #  !327.'7>7!&'#".''Yf%
$'#@2B:va'p(L" 9Rx"32C       !76&"!!!> X̊B3PڶeaCppbۍCC  7    !  #!#".> 6&";3PP炭]6ba4X̊+I3bGΉECۙVpp`8[@#  7     > 3#!6&"!Dea43PX̊ۍCCۙbpp     )    .7!!!26?!:ea'H"JX̊''ۍCCۙpp    "  #!>76&#"!7 !2!(?'R}#Oy:bN:;GgFrh2KG^苵%NyT<1@WE4      	  #!!!!!"'I26u?3         !76&"!!> X̊2eaCppۍCC     ( 5  3#".>;76."#> 32>?#"uW2W'StyF.SqQk	4cpP1ki0;,#'k?PCkp:2ks8CiF%%FiCۍCCViZ/J5`    !  !3# .>;"267'P34eb6aȂ3VD.X̊BbۍCEЍG#@[8`ppV   W   !76&#"!!>32AYfd~"'N3n?a1CpykzpC          3!!#'w3/     2>73#".67##3 0%>ajk}9T!H`58K..K8_|t77t|   $, ) :  33>32.#"#".7>7#2>76.'0.BQ*]TB>APZ,0[,udhꚛ`R: XmF)C:T?eF&4&dֈd]o^f_[,0^\Zg<T   x     !#".7!3267N3o>am'|Yfc5`Cۙ1pxl       %.7>76$7!#=1V<	q{TG{f#*%F4@M/BdROD\GJLHA -       ?  %267.#".'#".7>32>76."!7>2T1^9(T."0 j4EU/&>/aeOzLKnOXE0L,Pl`Q?"޷u% /#()$$)M:8z@0Y)KB*RyPO}V-;5NckX% Qh?C     7  V   > 3!6&"!Dea2GX̊ۍCCۙVpp      %  >3"!".7>7673!6jLT3&\u^*CkF)@W5eiNP=;,EpP+?s_AeH'ctDya(#    B   !# .7!2672e`'X̊VۍCCۙpp     ! 8  #".?!32>76&#!!2>76&"!>2e`׊l$*.O8?_B)	bp3[0H4 LhcҢi'mP1@"bML\		)L:#$=S0_q1@#TOTUcm:;n_m&I^m     y    .7#!26?!ea2X̊''ۍCCۙpp  # 3  2>?!".7>7.+32%.#"f,PlaQ?'"t$!j877/]3AFG<	$%8j\F^gV%#ThBF|Η]	
~
J       !6&"!> X̊ڶeaRppۍCC  M $  6&#"!7 !232>}Qt:bN9;Gid{7;<J&8l^I%NyT<1@S⏃қeBY6|Q     >     ##7>32#6&'evk疡d7]AxhݞXX݄i       @  2>7>."267676&#".67>2!!!>gE-#PnK+	*3^-"CL]zH 0KjИh<	Lu`3&?'Y%Ea<'XWQ!Fg?7Sc,*!!PDFS 7GNN#9~znT1.SsUT2K       3#!6&"!> @43PX̊ڶeabppۍCC  1   !267! .F'X̊'ea'ppRۍCC   /     3!#".?!32673GN3o>`'Yfc~/CۙCpxl    - =  32>76.7>32!6.#"#".7a4L*8V;!3WorhI%=Vs[c
3D A8*	
-WrwnMaw{p&K\1"=V3.?2,5Dc^+`]VA&@nQ3=!
$;-4H7.6Gge`yDE}k      !76&"!> X̊ڶeaCppۍCC    !  G  "32>76.2#".?!32>76.#!3.7>3I0>40H3>pd!gX6@	`׊l$*.O8?_C(	0O83_/="#>//>#">. =p_^(Sah.bML\		)L:#$=S0*K8!*Y)^o>       #!!!!"'I26       
  -  !>7>.'.6>?!#4J[:%HH J\;%II=H6U K6WÈw+Zdeb23aedZ+]ܜVzzV]        .  > #"&'!!!7# "32>76.}Z b\Ȁ+a-,2c2YtP6 		#F98O6!		"d{EG|cd|FQ6L./M86N0.M7    = 2    	 . 8  %>.'#.7>; .673"3J[8""KIYP?jnHN-Eet:IH$0,$,VzN%)JmHNrK$M˂WiJ''JiWWV,
"	 rb   ZIu   !#<95ح     f   	!Gdfx  Q~%   #>7>73S|RKiKVkC4W~#2(L`?"+9'A~lP 5f   !fx   @ )  #>32#".7332>76.#"UuQg`$>bP1^G(0*4H)ScYgH&7`K8hR19^F %"0 7`      3!9!#z     +` +  %#"'&32>732>73#7#"./rK$$={2&2%&|E!<-pHCde;w1@Q//Q>1>Q//Q@tBM%3    V_{   %!!!>32!76&#"!,|R+#!2jy)6-1NOvQV
^ezi`  QV{  *  %#!#".7>327!32>76.#"t,mRqdLa`9!$"B0/VF6$B/0TF5VHMێۗOèPQZ/0YQQY0/Z    VO{   %#!6&#"!!>32O,R1NOv}#!2jy)bVTzi`^e
   F   !26?!!7#"&7!,rY/t/% 1jy)%U`5yh0^eL    QV{  (  !#".7>327!	32>76.#"!+oqdLa`9!$"B0/VF6$B/0TF5HMێۗOèQZ/0YQQY0/Z      ^ 	  )!!!!//%UC,Lb V_{   !!>32!6&#"+Z+#!2jy)݅1NOv
^e)zi   V{ , =  >.#"!!>23##".7>332>?#"N
SQ'WN<+#!UgqjcS?!EM(r>HlCKfx<1&#."f60$/=}d@%Ec?
.I28Zpf)'JiANsK%5)BkM)=      (  #"2>7".67>;!39WA-DrYB-fB4Me}^:`΅U$Um,/W~[14\KRMmP,,PmLs̚ZL  VI   !6&#"!!>32I݄1NOv#u1jx)zi^e    V`   !!,-#
    V 1  #3>322>73#7#".67>."~b*f63/&<2%&|E3/&<2%V 9.7_d>Q//Q@tBM7_d>>Q/.Q@  .  ,  	!##".7>72>76./#":|Q,[n~}eAaSc&Kt`J40"*mXG^؛VV؃Ze P[16^I>`L<    V   !267!!#"&%0t}%s1jyyhP^e  7  \ K   D - ?  )7#".>7.7>?!326?2>?>.' CSa5ax:"R|b<N+
!C!J*+
,&&Wg/u	:\I7$	
	99`,G4EvR&<M(&IOU1,8
O5xZU,Q>%0K]-V3lcRd     V1{   !6&#"!!>32+]1NOv}#!2jy)Tzi`^e`     \ * =  !7#".7>7#73>32.#"326?6.''r 1j^u;T9i,C\!# 
1'$
)PMI"b_"e##Ot6Y@7LK^eL]umXi:
	0C(cE_>#%SI6h  j   	!7#"&7!267! 1jy)%/t,3ͦ^eTyh7     pX``   %#!732>7!Oti,1J6%%+~p39]B5       #7!3267!!7#"&+1NOv}#!2jyzi^e  6Vyy 5  23!!".7>7>76.#"'>lh&
":Twf8Q5,|0J/
GiGbb8)@+%KD9*qy<na2[]crR-H8*":L)6qsu9Ooj:*I4-<#9X>     7  \{ Q   oV -  !".7>7.7>?32673~,*D-

4L_kq71T:LDO)=
39#Z7AQpT5;U53yz2)E_:?:{@"G1?8xf$*#    RV` +  #".5#"'&32>732>73d&j6!<-0qK$$={2&2%V6:%3HCde;w1@Q//Q>1>Q//Q@  IVy . H  3!!".7>7>76.7>32%">76.X|1Q:#',|1J/*=M+(*
2;/7Qfu@hk),LE4#?^C,
%A`c'G=1"9J'$RVT$!G&1J??OfG7gYI47jX/>")@5/18#(17WG;64%G7"       B{ &  "!!>32!!7>7>.-H8'
}#!BTc7\y@<M[/,"4P<)=+H`5{`*G5FuRPl+0enzF8gN. p` X   ?V   !#"&7!267!,Qs1jy)%0t%P^eTyh7#     *{ +  !#>.#"#7#"&7332>73>32$&|EE*$&|EF+>Q/)H8tBM1>Q/)G8tBM     Vq{   !6&#"!!>32q݅1NOv,#!2jy)zi
^e    %X J   O  `   %!!+%`   )V +  !#>.#"##"&7332>73>32#"g(l6E*"# i%o6F+>Q/.Q@E>1>Q/)G8AC  V{  +  %!!!7#73!632#" 6."2>8,im,m$!`Jad "B`UG5$B`TFDDOۋۖNZ/0YQQY0/Z  Xy} R   V # * 5  #.'7".>;"3>.'>URRA{lX2:C'}]QMziV}NLP@KP E9|;YA+A|Θ[Y'?V45I/2Z~Z2FNr.<<)?fI-	;[w :   %!7#"&7!267!:, 1jx)%/t}%^eyh  Z  v'    !!!!)MG@MH'       %%Pc8ߎvv       ' /  333#!!67676'&'767>'&';x;KxK0Xi %z::vHS+>1"I)7!5(2N0}FR~TI
-	*hj.!
#$   {   %#"767"76263 !6#"(('H&&ʑ\?ۚfHpQQuY   6  )   "276$632&# 7%7676;  @2P{iS028A%tqu;;=MkČG :.j)   N~   67&76$!6&$'632NB!/6N:pp"Zk/&':KG' p]6OA$,Ll^Ȩ     c     >3 &7%327'&32769fy3e`,x12
@?Aquxs
 A@@?     W  &  "32676& 76'#7632#"!76 r$# %!E+:|08Mt$&ڸ"=y!$`  %"%:~6Yh>{aKK    O  5  "32676&"76767$326767! 76%7676$" %"S*=+e|Q/FK#e01m7$o  %"%Ƀ@<@BDkQcC;;eo">!     Hz    3267!
&767&7!2#"'3Qk"n%n9!6FW f9Ob2O6hKM  0{    $"26#"76$76gv! J!(''*(kyx    *  7"32676&"&#"2#"7!23263!6#"$" %"|-T&+)C=
o<B۟#%  %"%ӎPW0   {    $"272#"7"767663 !6#"ĀD',r$!%6u vAI	jdmbJ    $  +  "32676&6323276#6%$7"$" %"#"*1fzt/3%/:?h@DCе(  %"%Hھ|XsEhf\[      26#"7767&7676327!!"'@@>,[\4@(+*gP]##A)is@0[2JFfHMM   M|     "267&76327!%$g0%'%%!)%V&xLB  &     "267&76327!%$׀h0%'$% *%W&xhB  0   A  "32676&!"32676&"' &76323273327&76673$" %"$" %!HEtzv,"'YTX<<XTY!)М	$1(a  %"%  %"%JJbߩ44ˆ+,@    *  "32676&#"' &763232733273g$# %!Et{v,"'YTX<<XT  %"%3JJbߩ44ˆ     }  ,  "32676&2?33273%&'# 67&76 $" %"HR!--"ZL!>Œ6.=/ 3-   %"%㩪,-=%ۂP    !  ,  "32676&2?33273%&'# 67&76 m$# %!IS!-.!ZL!>Ē5.>. 2.!  %"%㩪,-=%ۂP    `   !327!!"'#"763227"%%"?T>u`,888        32767!
&767&7!2#"'3)jPP#%:!6FW f:ObZYO6hKM   -  )  "32676&6%$7! &#%$&763232$" $")19(ϱϼ,:C.)80h  $  $ ,^$RE?`{<     +  7"32676&! '&'&7 3676#"%6%" $"Il1'K%,/M$-)S&W!$  $UzƜ1o5     {    "326! %,76323276#"@@<!l
:q:)L7<!H .TYr 0   , 4  73! '&'&7 367# "32676& 76!"-2'o1'K%,.N%.(O-`k%" $"	L@Uz! .!$  $6/'=    2   "327$"32$7&76367&7632676#6#"A?A?Ip?>$ƾ$Cq7#e""w!TV@?:u@@@@LBE>/>icb    $  # +  "32676&%$%&'&76327676$" %!<<<;z1z"):3c4VS  %"$36H9Gt6caf   I  1  "32676&$76'$6!2327#"&#"%$&76$# %!	%?4ph@ͺbj;O,+=  %"%ŇD0tHG_)Rq}]
    ?    ' '&'$! #"'"32?6T ɍ@Ex"$837 YQs,%N*(mEsJ  ?'kk}^   ,    '&767&'07r$63l
Mӭ8@P5)C21s      !6#"! ܎/N?tF6T

Au   '{/  l       %$ 7 76	$?IZ_E:$ 0~9e}     %$ 3!7 76
%?I[`G%f%	#G~9fP3}         %$ 7 76#'?	$?IZ_E:$ $-$-0~9e}####     A    %$ 3!7 76#'?	$?H[`F$f$	#$-$-G~9fP3}####  -)    &776'&762'6230.9&){KYj,.--Tbڂf   xY    &775667&763273% ><XM|@@*ۺf@TwdD:0;QF ,    &'6767676;[L`n		,,,sWf-2G)4G^     &/'&7767%276Te/'E~QFGI! v*EW}u" E   #IK|    X   !767&76$7673( "Ij1k%.Z?^    ) 4  7676367673!#7676'&'&'&3&76'$B?2! UfYGgy% ="!BEam%!9>TT	WK{;PH9;Ed>Gb*gW/A67	*ut7.,  U   3733##7#$**%**zۺ  ULulP   jj    %&76776& )-,.>C	B@566  >  k ,  ! &547>73267654&'3.547!'b2?0"	Lik6FU#)Cō<G6\,"H%2*Gq!4c8Z4;$*Px)    $  M  6  654.#32! 476?654&'&547!
#F55\L8*J3shV,26
,B_5qR@C[00ZS@4HP(@uJX3i
	-
*4A#l7 $sBp>    nZ*  9  %654' ;2! 47%>76.#".67! 3	 5	R{N^6\-%
.@$:0!9xF?O.&-%Hn]=G	/D2#"/--/"$(Kt/e6  m   e  654.+"32>7>7.5467>32632#".5476&+"!6.#""a9!%!;-#
K
!)-47.]=YcOSx`@]C(QCHOqxuV$0BH&"=/
m$889\ 52"=U3_.,#C0'iEE3mnEWr4&@SX,/))9/'jiI;6BI$-'+#  n* 2  %! 47>73267654&#".67!3 1R-n_]sg{}DdXu	
Lf<07JG_*)*BV_`%;XQW8'Z"76;(4=   n* K  ! &547>7326?654&+732>7654.#".547! /N#-TgmGX?)?)I:*
,F.`
G{i^7r1:=A?S&P# @\UX\4I/H275KN b09+m2;`4#q;#*  !  N  & D  654&'#">654.#"326% ! &547>7.547! %B?D%?9T\*M63[J7.N5iC3~eI8DX	;/Z!&9SR$%A\?4IU,-UzM7.IN(ޑGU3*t8!%d*1?n-*bA       >  6.+"3267%#>76&+"#"&54?!263 HD.$<.24B/IjKCN.B_:DaWzaBWp'0@$(<LBNy}IBfbmIS ~~?TjEECR    K  * /  #>7654.#"#.54676 !2r/JmOJZ6'G18`M6'-<@0<	f!Tz9LB90FQ,+QuJAq3QL8xo0bTE%F     n =  !# &547>732>?654&+73267654.#7 0),8;Xq1R@+
	
&X+UY)ii,wvfB	Ź4=$RK<|'#Ec/H3/3(.\DK</$'_|#*E*/  9n* B  "!.'.#"'>7.5476$! .7>7>7654.4CxD8#J~m.]7X"-,A,

	+2QUZP\d֚Ugn3>~B]f͏>H?l-!#	&=0H'Q>+#EA     $    9  654.#"326%# 47>327654&#!76$3 ,O45XI4Pqa;a}AéFf,YoUj
 F3FFEnO@2Nxkl{BwIWw6*6<Q46bb,1         +  654&#";2326%! &547>3!!">3Bmi @ikFf#+(2+9rFE6IE7HґBP4A37H          >  !>?654&+"#6&/"!.546?632>32'>Z?BV8	0	-?LM7*C/	2.'-03Z*^2}:uuu;:mhb/-"!DlY[0A$Zn:<we*I9Q$##${L\      	 >  ! 47>733267654&+73267654&'$547!#8^61)Wra
Ql{'Npro%Si]_9L6?349 !524!$E`0(IrML,=5C'"])<B-     nO 1  %!"&547!32>77 7654%7%1T&Od<dM4
A?26Z-h#+Z2;"=Y5P6ICI$=9Q{R*]>    G  !>76.+"#6.+"!.546?6%2>32y 9XDH\6
8@NP
E$2

27./
0t?e.oLp<vut99mie150!)p!058UQp99p)Z3W$ "p'#!qIY   #  M -  ! 47!3267654&'.7>7Df E'Ipg%1%/./:")5Q.qGU ?2K{(O247NR~)-0/9+  m?  '  3 654&'#>73 ! 547e$iQl|uy0Ot_HӺLbr[>12iDh"`r+q    Hm@ L  %# 47>73276.#"#7>54.#"#".'32>32>326-H*:F$#\p."-,
!#4+($2&"n %(1<#5<1Am/C5?)WRGm3^5"E`9T76G&$,%	)0( ' C77ClAO     9n*  a  6&/"32>7+".547;2>?#?##"# 4?>32632zo!6,*#@]v"jl6Q1.VE.-Y$ZY6Aa[	)Dgbc
/@J&3!	")8"&"'5AiZ(.du/19(1!(:&lm7ENa,$!EgDS6`RD:A3   n* =  %! 47>732>7>54.#".67!2>7!b(,?,"%	Yv1XH66UICY		@G@3

=fI3<#@?A#A3c1#D_"GkIwn@k=8;,(&W"<:@'H	 657!9     -m* O  >7&54?632>32>7654.+"#6&+"%654.'&#"d!? 
1>].rFl)?U9/I3 @WQQB& +Y!.&"iK&235L$##$tRfB>me_13UKF%J'^1(>8]GV؅ :/"
9<    $n 4  ! 47!>?#".547>7!3267!1M57	d~1(?99!k,LuU7IfF+)H3q]%uP7A+#]_'/kw'=KBrjg6=_L?:9!8'63Z]   +    J  654.#"326%! &547>3654&#"#764.#"!!2>3  0Q64UE2
	7\>V|?`dˁCb$37%,"*
RZq3R2>-C?>iQ7.NN'yGSr430( =	np	5Q6UOQS.6      N  7  654.#">3!67654.#"!>32(@(BX+8<G-8Z ġ3T9ct$ݥ
F5.L/
)!US%	p9-HJ#zm%+5f?Zu]2   oP D  # 54?>732>7654+7327654&'&547!gRM2`ߘ8TtM7Q=*QoJ.Y(a'3!&VEFy1@}6~?p\NbyAC`$O|X&e·4-'. >"e7   #    "  654.#"32>%! 47!2,N6A7]J552Sk$D=0nO;
LR&F5!HpKjHU$-!:        (  X  32>7654.#">32>32!>54.#"#76.#">72!".547T&B+>dL4,K46YH5HgH)L?.6Z
 $
(%,":3Ch4x]<0HO'!GqPB0BF?kJqL')=)QSJ`6=(	pn	1)+8:z%GVM!JU   n  V  32>7654.#"! 47672>7654&'.'" 547!!3#"1>8*#0>8)YRDUh5[E0	AH+,
E
Oc#-7"xJ+$211C&0//@\83;l $$=P5O5/`*0V*-4bE# F4.P9}6'    *  U  #  654&#"326% !".547!>3HhlGlgF5f$m<yGC5KB3K|L$N[<5I   
n 3  %! 47>7;267654&'.54?%!%!(K`R$#
Kcm;FU?92Q%Wi2VXR3B6?QU2]3& @aio5l'Cv45e)OM>H@.     N  ! 4?!3267654.#!7!2>76.#!7!2>76.'.5473#%?%Lfl+

+8Q2`	)J_2MA7(h}A3<#@YJR(	P$*( =^!Q&vFRe    n f  ! 4767>54&'!327654'#73>764.+732676.+732754'&5473A0R4

	&L d1)",
)",)Fw	2A!OH<"^<[cOd<FF~Y'pUJ],oGl+$Oor+K%5$.	/>#`*$(/$
5GbP&Jp1m@>|      *  -  >7654&#"267.547 % 323$'
?drJmf}Hn$k>73!a7
9zj5-D$#C5LaXM8=JYXQNv+  n* +  % 4?326?654&+73267!%3RHG$GTgil~&r &N,qH`:2;{@Vtj!K`û d=I(,  n G  %! 47%32>?654.+73>7#"#".5476$!3"32$7RH'	Og4ZF/
4R6,/\P>;>>{m	'D*kD!~XZN9D*$Dh3O556/0QsH
	3cn*).ʼdb~koB)H#        	  3  #"327;7654#"! 47!37#$47! 3#3ʽ E&UJ\
F	 k*kk0s4xp',{L,3f(.L     !o*  =  654&+"267%!"'#72>76&'#&3$4?!2>3#P#Y d-7R<$-)+N<*b,:`*,Q[@1Q!-<5/<<XZ-C,' DG#h3=X.*>M     	mR* 3  %! &547%$7654#"'>32327>.'7K,IrB=5&!}--0R&ݿ4<vzU`!Q*9!Hh1;ޅB(!,($u'   mE 0  !3267654.'%!#"'323267!! &547&pZud	+SC0ER&\Qd&Z
3>y~,+Bhe0b>~E=?'& z{706     ~n8  +  67654#"!6?!! 54767.54(V7eI~=h
%aq"(!7Ab}Q^oo)1c5Z-  N=+ 2  654&'.#"'67.547%'>7654'"3/Sh^t*<"W	#O[o
3'S3'!,|n#,m|N	<?"%*bzD|wwL?5'.T*kP     1     3#3#3#(()л ]    654#"322"54763!%"EP!	<X
:>&'
'X3$Yӻ,6/<Cw;l    
{ 
  L  32654&#"326?%!>54&#"7>32>32+3267#"&'#"&5467
Jbu:1CP(,8GfUF8A/9Q^ =YlDA4V/OERt4T~NgU3<hlC"3/TXH15P`94((UOSQ:=@32''F?AD1X    ,{ 2  #"'&'7327676'&+7327676'&#"76763 ';="]eht.Riz7]	M9hu+2Dfb qrlm^.tklb'(@BW	&1E OY"[\p   d 	   %!!7!!!!!++LC%bV {  5 M  326?%!>54&#"7>32>32#"&'#"&5467"3267>7>54&
(,7Gg	VH9@/9R^2\@68ǄSx%0R4D	394D3B'40UYF54O]72((QEKKĀ=<;>1X@JvaZxHA@I*|HQz"IA    /{    32!6&#"4W4 Tji /=񥹹    /    #"!326755% Tji /=   )  9   )!2>&#!!#'9yu{~}9`9WI&DX&h   B-     7373!!2>&#!!#-...|9TVQX>99t;*v&DX&h  *\0   )7!2>&#!7!2>&#!7!#uA0.}\N{1.{^L}1.`)t=8f!fJo&d((d&np     
  33#'##j\`I     !    #3#3!7##3!",']TEDc    
  (  3267654&#3267654&#%!2#!1|XS7T=&|FE
.D0zn]jK6C(3F-4)^GQZ	]<ym      
   3267654&#'32+h2nt5n+K{C1:^v>L       !!!!!!=Jp#j+D        7!7!7!7!7!+j#pJۑ  !  7#7!#"&547>32.#"326~"J>J)8i+$\<j:`-3)*r=H,.;/@s
       333###>>HH?t      7!#3!730jjN      73267#7!#"&&,p>JQRo<|14AGș      33##]@bЕd7Jx]  W   3!󢺆DN       33###k)ޢonb      	  33##ȐvȐv``    	  ##3vƢv|`D`       "267654>  &54\Z*Hc*c[Y<)_[=(ۯgEWۯfF      
   3267654&#'32+#"/LZT7ZD=U7D(/kW${     !  #'&'&+#!23267654&# pI D:@vt,VLN0N'%4	^DcP#Vf$5>$,    Q   ##7!#s      32673#"&54go0Vog!e'<G?9Z0   =   333##53sfI     1  "326?#7#"'&547>;7654'&#"7>32g\1IdF*q?y8)?BJAG9&/:
bX?F)-8*Bni >(R,   4  2767654'&#"367632+32767#"&54.g-.1J21F*89?xb[Y?B@BI@G_9

20X@fF*bBn54 fR,    $     73#7#"&547>322>54&"z'54@yQ~8)'&xY&xY]6P2< +Qg +Q        I  32676&#"26?%!654&#"7>32>32+3267#"&'#"&47	.7A '(0	O+%<&R,$T4AU#[>eL00$[42](>GY:p1..+*(*01'&5Fv (D! /-0,X9hg,"%"%dvU       654&"2>32#"&'#3&xY'xl-d8~Sy@Ty +Qg+R44Q2<76]g      3#7#"&547>322>54&"A(h@yQ~8P&xY'xM]67P2<4 +Qg+R   '  #"'&547>32!3267'654'&#"aDJM7	כF2"*`@JtG?YT<b'.R;\&,C0$ #*!E?     (  >32#"'&54?!654'&#"32767pDJN6	כG1 )`@JtG?-,T<a(.R;\&,C0$ #*!#"?     :  &'&547>32&'&#";#"32767#"'&547>U&:@BIS4CM!:+$BJt+@5GHDC<ICD>XP{$%

aXz,'
	3-5HS     :  #"'&'732767654'&+732767654'&#"767632U&:@BIS4CM!:+$BJt+@5GHDC<ICD>XP{$%

aXz,'
	3-5HS    (  ,  654&"26#"&'7326?#"&547>3273+tZ)t\:o7/g:NW#bAx[	w=T -ReT"+QeAFC,,R)12.P im 	   !#7!#3#73ZaI&~~Q      3%3##{Y̈I/7w%5      %  >32#654&"#654&"#3>2H.\"DN	
?#NN
?!NyNU?(&O+>i. 0Em,!/FmsA%+-    & #  +73267654'&#"#3>32KFCL??F12%$EzjBe(3<<~=Jf ('Gs^49:&>#     #  "3267654'&>32#"'&54B`BC`QӕH2	ӖG3h\$. 4h\$. 4ĘX?^'-X?^'  "  0732>54&#"767632#"'&#+,6ZuAZ442/9778K6ڣ>42!e|6VW?b&,     >32#654&#"ӕz	-CB`՘^'-$.Th\    9   #"&54733267ӕz	-CB`՘^'-$.Th\         #3>32#"&$654&"2@(i@yP~8P&xY'xb^67Q1;4 *Qg+Q L   3#;#"&547#737":'6O8"~*$~K@ )!~   4   32673#7#"'&54<OJ	dGEyiBe(wOFh]49;%=#        !7!2>54&#!7!#5 MH
GOk  h7(&4!.E$Y\     (  #"'&547326732673#7"'&H.\
DN
?"NN?!Ny''U (&8+>ian, 0En+!/FA%   T   	#3f7s    d    W  d  4s  d  T  s  d    V}  +  "3254&%$!2.#">32#"&'!rRHrP4bV6JV~6`THFjh"do	fo--u|SUѲlgtng        j  A`   73!7!!3#!!7!7;%3,,3%*l++l*  \Xr   !7!;#+732767#"&ި+N=b1foy+'b6+ь`n9}+dl7,d       #367632#"&$654&"2z'63@yQSU~8P&xY&xYs]6P2<UU4 +Qg +Q    F   #"&547>32.#"3267K3p>	ۤ8f/#Z4ZuAZ6c1a',!f^7U !   GM 
 4  ;27654#"763#*''67&'&5467632&'&#"g""]L4Uk A~
	/ 6'nn833/#--4Z:; $
ee@4'$>a'XW33^%& 
  .  .#"3267>7#"&547>32''7'37;B]-AE]u0	͙y'MM-FQF"-Pea7Mf"+/[&*zBA=qAHEB   .  #"&'73267654&+732676&#"7>32^Pۺ>C4HG[
XtJBaOM{YO:
iI2?f2"z&"PG1I  W   3###737>;#"bb	z*#F7~~,qW~    T   33#+732767#73`^ppMQp'@v?CB ,  -  #"'&547676;#"'&'73267"326?2e<k2#
XUkmhg602/*X.\e&9R<:Q"64[;P+0~[Y̎PP		V\\T%',[T    K   332673##"&54SOK13GFBjBe@w-OFgR49`=#    n    3#!3#3!737#737#9 m5}Qmw~~wm dn   #7!;#"&547nH@u_~%'rK!%       3!73#7!H}H~~w~~      737#7!#3#3!737h}m~~mw~~w     @   )  #7330#5&5476;#7!&#"3237276%jm5Ew ¬RtC,C> v\/<s~g+ Q   #7!;#"&54t =ǃJ~!1~bF)     #7!;+73267#"&54^tw =ABL>:J~!1~x;:~78bF)    ;<   3!![ 0     8  >32+732767654'&#"#654'&#"#367632H/\	D8:n>3J	 NN Nz&(+*>(&8)?kz8=~J|-Dm*
FmsA&.  (  #"&54733267332673##"&"I.\!DN	
 #NN
 !N;O+*>(&N+>jan. 0En,!/F0%+-   *  #?676'.#"+73276?367632J,":*,"FEkM4`4549e(>R10U{rCCK{\7B)@(      (  6&'&#"#367632;#"'&5476/*<z4459e(	H5Jj+ 0(
1*[s\7B*?(1%C0C#     	  33##mgGzgGlm     )  67632#"'&54%"!3654'&+3276"ijG3	jiH2uB0% BC0՘XYY>^'-XYY>](4(?-4-44     ) 3  676?#7!#3!737&'&567>54'&%wTq/i<?%xTpj<> D9D9X@q~~q@Ae#X@h~~h@Add^4z5#R4z5#    - D  &'&#"#"';#"'&54?327676&/&'&54767632-467>"#z3`&QQ()?L-
7<=;A$%*U1e(ST;:9)/"1a10
!~=&E)5 "
-"2[22	      +732767676;#"@F> ~=>*y8<~ Iq,+~$    c    3#;+732767&'&547#737":'6@DL>!* 8"~*$~x9<~8)@ )!~      &  #7#"'&54?#733333+3276|/64Ae)445555-12#]4;%=#+mm '!    b -  3267654'&'7!##"&5476767#7!c1(;<Z
! )mn.58%q+-A<+ 1bO"#/(n!K",!&XX] $[>G%n > +  ##"'&54?#7;?2767654'&'7#	a`|Fc+"ee&"(<60
#k!J'$+YXB+D&,D~¯Q#71P$&/(f  }   3#Zf7s  
 	  !!!7!4Ds{y       !!;#"'&547!7!e4Ct?L-td!~=&G&y   ]  !  3276'0#"!367632+'67!7!3D)M1i! (B3_i$y         %!7!#"&'73267654&+'4Z/C<ڹA= 9r;WgK\jzf3|<7
)5     !  654&#"3267"&547>32CB_DE_ؕi(i(-&7ul~,'5vhkCNlBO
&   $     /
u{&   D      k&
   %     /1&d  E    2& %       /2& E      j&   %     /j&   E     ok& &  &u 
 u   of& vV & F  H   k&
  '     B1&  G    2&  '     B2&   G    j&  '     Bj&   G    o& '  H   o& G     &  '      &   G     &  (     '}&'  H     &  (     C}&'  H     ok&
 & (  2  LoF&' & H  2  /  k&
  )       k&
   I     fN& *  
2    X& J        k&
   +     ;  `k&
   K    2&   +     ;2`&   K      R& +  
  \ ;  `y& K   j HHo'   +  ko`'   K  &   +     ;`&   K     &   ,     7&   L      Xk& .  
  u R  k& N  
u2X&   .     R2&2  N    jX&   .     Rj&2  N     P2!&2  /     2
&   O     P2N&
  <     2N&
  =     Pj!&2  /     Mj
&   O     2!&2  /      
&   O      
k& 0  
 ?u  f& P   v      
k&
   0      1&   P    2
&   0    2{&   P      k&
   1     ;  `1&   Q    2&   1     ;2`{&   Q    j&   1     ;j`{&   Q    &   1      `{&   Q     =& 2  '
  
 2 X ' H&w   R       r& 3  
w|Vf& S         k&
   3    V1&   S       k&
  5       1&   U     2&  5     2{&   U     2N&
 Z     2&  [     j&   5     Mj{&   U     k&
   6     ZF1&   V     2&   6     Z2F{&   V     2k&
  & 6     Z2F1&  & V       k&
   7       k&
   W     2&   7     2&   W     Mj&   7     Mj&   W      &   7      &   W     -2&   8     B2`&   X     &   8     `&   X      &   8      `&   X     -& 8  '
  
 2 j ' H& X  w       -T& 9  
  \   & Y  w    2-&   9     2`&   Y     )  Zr& :  
  | Z  -o& C	 Z     )  Zr& :  
  | Z  -o& vH	 Z     )  Z`' j 5/ :   Z  -& j Z     )  Zk&
   :     Z  -1&   Z     )2Z&   :     Z2-`&   Z    q  ?k&
   ;      1&   [    q  ?k& ;  
  u  & j  [       Nk&
   <    X1&   \      
r& =  
 .| 1  m& ]  e  2
&  =     12`&'  ]    j
&   =     1j`&   ]     ;j`&   K       & W   j  Z  -/& Z  u   X/& \  u     k&
  A     8|!   2&   $     /2u{&   D    2?r&  
  | /2um&  e    &
 '
 l $     /u' B<   2k&  
     /2u&  s   2&  (     L2}&'  H       m& (  
 pu L& H  w    2r&  
 | L2m&  e"   2& ,       27&   L     =2&   2     X2y}&   R     =2r&  
  | X2ym&  e   Ik&b  
uf&c   v   Ik&b  
uf&c   C   Im&b  
u9&c  w   2I&b     2&c      -2&   8     j2`&   X    k&q  
vuf&r   vd  k&q  
vuf&r   Cd  m&q  
vu9&r  wd  2&q  v  2&r  d     Nr& <  
  |Xo& C	 \     2N&   <    2`',   \     Nm& <  
 1uX& \  w    5r&  r     5r&       5r&       5r&       5&r&       5:r&       5&       5&        r&  rH    r&      r&      r&      r&  {    r&  g    &  H    &     dRr&  r     dRr&       dr&       dr&       d&r&       d:r&      c  r&  rI    r&  I    r&  ;  G  r&  ;    r&  r    r&  h   eVwr&  r     eVwr&       eVr&       eVr&       eV&r&       eV:r&       eV&       eV&      1  r&  r  c  r&      r&      r&    ~  r&  6    r&  6    &      &    O  r&  r    O  r&         r&        r&      H  &r&      O  :r&      O  &      O  &      c  r&  rI    r&  I  8  r&  T  L  r&  @    r&  |    r&  r    &  I    &  I   Xyr&  r     Xyr&       Xr&       Xr&       X&r&       X:r&      r&  r  r&  I  3r&  O  [r&  O  xr&  0  xr&  &     r&  r       r&         r&         r&         &r&         :r&         &         &        Nr&      Nr&      Nr&    o  N&     @r&  r     @r&       @r&       @r&       @&r&       @:r&       @&       @&        xr&  r    xr&  b  3  xr&  O  [  xr&  O    xr&  I    xr&  I    x&    7  x&  q   5f&   C     5f   dRf&   C     df   eVwf&   C     eVf  O  f&   C    O  f   Xyf&   C     Xf     f&   C       f   @f&   C     @f   5Vr&  ͜    5Vr&  ͜    5Vr&  ͜    5Vr&  ͜    5V&r&͜      5V:r&͜      5V&  ͜    5V&  ͜   Vr&  q    Vr&  q    Vr&  q    Vr&  q    Vr&q      Vr&q      V&  q    V&  q     CVwr&     CVwr&     CVr&     CVr&     CV&r'     CV:r'     CV&     CV&    1Vr&  q    cVr&  q    Vr&  q    Vr&  q    ~Vr&q      Vr&q      V&  q    V&  q     @Vr&       @Vr&       @Vr&       @Vr&       @V&r&       @V:r&       @V&       @V&      Vxr&  q    Vxr&  q    3Vxr&   q    [Vxr&!  q    Vxr&q  "    Vxr&q  #    Vx&$  q    7Vx&%  q     5F&       5&       5Vf&&  ͜    5Vy&  ͜    5Vf&  ͜    59&  s     5V9&i  ͜     k&
        N&  
      f&  *    f  V&  q    rr  {Vs   r   !77#7!2"Ax yh9w  ;& j  s TT CVwf&*     CVw{&     CVf&     eVw9&  s     CVw9&x      f&  D    f    f&  &    f  V&  q     r'r  6    H&r'r.  n &r  s MO  `F&      O  B&      O  H&      O  (  O  h9&  s    O  &  t       k&
         N&  
      f&  b    f  r'  @    R:r'       &  s M   F&         &         &         (  Vr&  r    Vr&         9&  s       &  t       Nk&
         NN&  
      Nf&    t  Nf    r&  5  s;H& j    r;(  s`f C   @Vf&2       @V`&       @Vf&       @9&  s     @V9&      f&  q  f    xf&  {    xf  Vx&  q    9f v   Lr   7!#7 M"A"ïx        991 0!!+u8         @
  991 0!!
1/   @
  991 0!!
1/   @
  991 0!!
1/   @
  991 0!!
1/' _    _      & B   B     8@   4 G 91 0KSX9Y"!35׬~      4@  4 G 1 0KSX9Y"!#95׬     o  4@  4 I 1 0KSX9Y"!#:6׬o    a   #a8s8        d@2
	   4 	G 
 991 <20KSX99Y"!3!35׬5׬~~       `@0   
	4	 G 
91 <20KSX99Y"!#!#}95׬-95׬   o   `@0   
	4	 I 
91 <20KSX99Y"!#!#93լ+:3լo    X    #!#P8s8A7t8  ;y  Z@/      4;
 9	
 9991 <20KSXY"!!!!!7!y LL+ +L}8     1;{  @J
	   4;; 
 9
	 99991 2<220KSXY"!!!!!!!7!!7!y LN-ZL+J J+LZ-J}+}   `   1 0467>32#"&'. 736HI256743IH426I235624HI447743     ?!    !?qH    Lo    u@;   
	4 I

	  999991 /<<220KSXY"!!!!!!:F'E;Hooo        $ 0 < H L p@?J%K+I"L71 =+"%>4C:	L(I1KJ11 F17@11.11(1/99991 /<2229999904632#"&5%"32654&4632#"&%"32654&4632#"&%"32654&%wwwu2IH33JJxvvw4GH33JKޥxwvw3HH33JK'!xwxwK24KK42IxwxG45LM41J+xwxH35LM41J^\        1 < H W g  "2654&46367636762#"/#"/#"&"2654&4632#"&"2765454'&!"2654&#'-@@ZBCגkjIIjiKIӕjhIKihJKhj4GHfJKxvvwh,A?[!  #?,  [AB^\H35LM41J}xTSTSwxSTSTNG45LM41J}xwxK24K&$13$&& )+ &K42I  a`l   !a`u `('D        `&  '  w   `$   #!$`u`'B       1`'  & w   1 m#  @  /91 907m2)w#   = w#  @  /91 90	7%'-B#wv   '    4     $  x  $ (  !6763267676'&!}bm4mjje`a ./piQ3*	(
77S#F8^^LAB\VC)*=	%(+C"	     M B  0   _    $'5 $SLUSPPSEFE     ?   !#3#3!D&z%z%    j   	!73#73#7%z%z%޾tt  '
  
4       '
   4       '   
       ;   2###T%#Ҥ,ԿH農   /  # 6   47632"326767654'&#"#"&4767>32J%#J2.L'3/&%&H=4UUg$%95e <e?<7UabH>8TbaxYL+*|RMV @ 	   !3!73#3#mn|R*~~w     _@33	
3		 3 34 	
 	991 <290KSXY"	333##7!7Reml#${)       %  !!67632#"'&'7327654'&#"@%k&SS~DDK<$2=<DwIG23V8:;8ߑBAnXW		-,K;!"   !  0  4'&#"326.#"67632#"&5476767632! 6Kh  6Lh$*d3mML!)86?vEEmn++MFbc0111pR1pK=<u">?o^_yvtSL&&	    !#!o
?u2    - =  4&#"326'&'&547632#"'&54767327654'&#"L@P23('AMdJ&&iiPP?@jN++ijRRFG !2F/. !;A-,1:+*B0T'(=gHI78YR99./G}KL78d_CC)"!4,#" ! $ 3  732767#"'&547632#"'&327654&#"!$+223oKK"+66?uEDlmOP++LEcb012 7I54@5M33<=u$>>l``FGytsTL%%188R1<98 8   !!#5!5!58    G   !!LG  A    !!!!ffƅ R   #.547R#$42P]`ZF  R   654&'3#$33QP]`[  
   #6'&#"#367632OJ23%%Ey65Df)'3i~D('Gs^4;;   /T  d  !  C {  d    T t  d  T u  d    C  d   C  d  !T  d    C  d   T  d  !T  d   4  d  %  d   )  d  iRf  d  iRf  d    d    d    d     t}  d    d     hT  d     g  d  c  nh{  d       d  
    d     d  |  d  L  %  d    L    %  !!!!!!#" 32.#"3267B#b9=Aú$%As2 1e<l`k<u?`**99*)73Ʈ36     C9 * 0 9  &'#7&47676?373&'2767#"'#&+6/9ea^o!#.-
-F500uT`_w7ua<3D	(02=SELQj

+f%$N12>*E
		&
    B /  6767#" 476$32.#" !>32.#"'*]u7r^^\l1ad3O[Ps4a#.C&g	$N12J=78IDbǭ`e         !!!!3#!#741/5!l!l./u"ݹ    #  !!37#737#737632.#"!!!H!./ )(0SL25~@q?<>(A)¸
Wz|%(=;zW  B /  #6'&#"#3676323632#?6'&#"#fk"4AZC6;:AI00lL yaTH1?."C־75``/085csVH)v75TR      !   #  7#737#73!3!3#3#!#!3'-a&A-B&AV<VmVB&A-B&AVR<VV-axJJJJ   D  & ^  32654&##;7332654&/.54'+#!2333632.#"#"'&'#"&5467%b>B/-H*!	 $2644.YK&)qUu.&l=75I5g30`+05+dP~57KN*_zQV&
.(D)
64$((91iOUMkc>
%2473$.	@!     F  2676&+#.+#!232676&/.7>32.#"#"'&v@@
.@U(:31::˙6}_Q(5059=7>"8 {U5p@8l269#2 S;<?ZgfXspR֔-v/:90/ 0035+.	#        T  " & ) - 1  '#73'33733733#3#!#!#7373'!37kI4;;:4HZnOoHr1r'vvVVBvvBvvvv  =    !2#6&+#%"3;3ɐ6:: 1tksʐ7:: /uY*5=Y  Bjs&   j/    , v@@#$u& uUCJ UC
JB E*-,&+*'# #%+#-9999999991 22<2906 32.#"!!!!3267#"=#73>7#7]VPI@8Oi9RZRhMs?LUTT$$KMg|>Z$$+K!            !!!!!!#7j[KHcw_`u!8LȘ       !'?'7!!!77oDo o^~8*83n!n<^:MS:MS9MR9M     7  . i    '6767632#"'&'32767654'&#"67'6767632#"'&'&/#"'&54767632327676767654&'&&#"032Ho$*(0.;' '#-/29"f,#'!%		
	l*%$GmoOL'$0@&++6)!		5SK#
0*G(o&4+-'	1	7+Уc]97#96O3<zav24?Le2ELy%!+'+>AHJB @@=kb3JMq~Es/4	
%UA4G_KBjoD7=AiK}f^<={@
   1 @  '32327&54767632#72767654'#"'&#"6764'&#"Ϝq:])|
 \fK**m**tQ;)v;.*/qI"'"Dl26X``7a0<㫂&'lm@.j?3thP#l$:990C#i        " ' ,  !23#3#+!#737#73!!6'&+!323~|TG
HL%:N蹤mٱVUYY
yG[ZH--HpB[QHZHHZ(zfff     E[x & 1  #7!#7&'&54776?3&'&'6767o#@xy{]^jW>ˢXPaS+RG]b!&LA^I-//STKF#dtiϥ"7?&6#PaQYU"          73!3#3#!!!#737!!/3'# CL!E--tؤF!~D(DjQUÕeeÕÊ   6  3267# &767#736767!7!676&#">323#!seml;ro,&'c8&+ak`m8ng'|&bA5&YcRT45		2f@PVFC ./_T  6   )  %#&'&%6?3&'&'67679jm;;65͗KGE$%95bT<BT>FIHcc	>610%R7r~or7N'(OQ"z!    o      !!!!!!2٦33-Y   r   &  #!#!'&+732767!7!&'&+7||"A]*4k.k0y@ /~y)z~2@_@[	@_y,>**;      +'%7'%!772$7!}^j! a'F""LV1+eta!YysYytX{rY{sy         ! !#!!!7#737#7332>&#9P!,((,!0tM_ ^_brvv     t  %  %3267# '&547 !2."U|d]
ք{OH}8Sryx	A<	7@,Lԉk|r4*:0Nuev    t    , >  .#"3267#"&5467>32#3"32654&'2#"&5467>8+1=N.*:4*G$jt)',qI!Cj<-@.?du$")oDdt$"(o9"QT#EiPYV5IFID˫cL]]ɬaM\^            3!3'!!!!!!+aa#]x}+    ;  ` K    ;  `   4#"!'7!7>2!6+qStyқ7?#&B00ۅ
w6<u`Ed{\g;^(4    2      	3%!3!# 6dfUf]xK+C   o      /  2#"547"32764!!!>3"!#7267 87b%4)/*W--*W- 4D4E:F9G=>;N>;       }N  , 6 >  2#".5467>"3267>54&'.33264&#32+hZZ\[~}ڶ[\ZZ~cIGHHcdFHHHHHsߔ|AGGA|NZZ[~}ڶ[[}~[ZZGIGebIIHHbeGIGw5e7     J        3%!2+!327&+67654'&J	m5//5=*__*]x~#g)ZZ)        '  %!#   !  %27&"676'&|F"Cobbbbn%lkh4334a         % - 1  3&'&7!.+!!2!27&#676'&%3{THvu2M;o.a4w5}fcd)1ED)m=s@1F~h|hb)tL<M!0   f   A@$	
 9 	#	####/91 <<2<<9073#######5dYЙkKuT  KBC          	3%!!!5!F=xC`W]x'x     x    X .    m      -  *  7327673 $54$32!"53!25&'&#"7L||zW@eoTڣ'(+:N}y}zN8M3TT<`3ZAE]\P3RQ4O      	    !!!7!#!!3--%C`xxpp {&
  ' V {  {&
  ' V {  {' u V' { 
   ' u V' t 
   {' V' { 
   ' V' t 
   /' V' u 
   *{' V' 
   {' V' { 
   	{' V' 
   {' V' { 
   /' V' u 
   	{' V' 
    {' V' 
   w{' { 
   -&
  '  u V  B  	  5!!B#x4̂x#xx       M 	  	'#'"xx$Mx4x#     B  	  	'7!5!'7x4x#xx       M 	  !737"xx#x4̂x   B    5!'7'7[x#xx#xx##xxݎx      M   '3'7#7x$"xxގxx#xx#x    - 	  7!##v<Ļ	vĜ<     7 	  #5'#5!7Ĝ<	dĜ<    6t 	  %!537536vdĜ<Wv<Ļ     -u 	  '33v<Ļv<Ļ     B    3!'7!5!7Ox#xpx##xp   B    #5!7!'7'7!'ޜOx#xwpxݎxp    ;m 6  #7!#32767676767676&'&'&#"#"'&'v
"!0	#?"A=&.&>
#!$5>+;6-0$(v#*%;(#8MX!GL!!+    Im 6  #"'&'&'&'&'&#"'67676327676'#5!#O$0-6;+>4!#
>&.&=A"?,.!"
v([+!!O7!XM8#(H.%#vd  B    !!'#537xZx#xZxxx##xx      M   '75'3''#xx$"xxxZx#xZx    B    '73'7'7#'7!5,xZx#xZxxxݎxx      M   77#75'73؂xxގxxcxZx#xZx    B    '!5!7w>x#xx1xx##xx  B    '7!'7'7!'4xx#x>w1xxݎxx  B    53#5!5x#x,x##x       M   %'3'3!5x$"x,rx#x     B    !'7'7!#3rx#xxݎx      M   7#7#5!؂xގxx#xr      M   %7'3'7!!5"xx$"xx",#xYx#xx  B  (  276767654'&'&'&#52#!5g
	@16T)+51@x#x

	Q87;=49(*x##x     B  (  !'7'7!"'&'&'&547>763"jx#x@15+)T61@	
xݎx*(94=;78Q	

    B  $ =  +#5#53547>76"3276767654&'&'&g@16**)+50AGx#xT61@	G


))87;=49(*x##xH;78R	H

	     B  $ =  23'7'7##5#"'&'&'&54767676";54'&'&'&j@16Tx#xGA05+)**61@


G	R87;Hxݎx*(94=;78))	

H	  B  F  26767676763226767'7'7#"'&'&'&'&'&"#"'5[#$!x#x,"	
	
	"/x#x



%$

xݎx" !x##x    B    #'7#533'7'v81x#x81x#x'x##x'xݎx  9~   7'7ckn"[	kOcuP%     8   5!#Ђx"xhx##xw         !#!'7' zfx$xWxݎx    8e   !3!5x"xwx##x    e   '7'7!3 x$xxݎxW      5p   !5!7#7[_xݎxwx#x    ?^   !3!5Xxx"xx##x    2X '  5476767632#4'&'&'&7#7,#!A=PNZ]KS;>#"!*#13#'Dxݎxq!TPA>!  #<?ROZ/)(" C'%x#x   2X '  7#74'.'&'&#476767632xݎxD'#31#*!"#>;SK]ZNP=A!#qx#x%'C "()/ZOR?<#  !>APT  2V    5!7!##2lv<ĻʌvĜ<    B    	!!#33#'7!5!'7xpxxpxxx,xx  7 4  2#"'&'.5476732767>54/#7!%?((*MGgZsn_aMOP(%R.-'<0CA57---0v\apn_cMG.(()LNkoaZU-8:>=96/(-,r=ZHv   7 4  #5!#53276767654'&'7#"'&'&'&5476v0---75AC0<'-.R%(POMa_nsZgGM*((=\vdHZ=r,-(/69=>:8-UZaokNL)((.GMc_nmd    B   5!B#x4#x  B    !!BM̂xx#      M   3'#"xMx       M   #'x$M4x#    B   !5!'74x#x    B    '7!5xx      M   !37xM̂x    M   !#73ضx#x4   B 	   	'7!5!'7	5!!x4x##x4̂xxx#xx     M 	   	'#'	#737"xx$rxxMx4x##x4̂x   B 	   5!!'7!5!'7B#x4̂x*x4x##xxxx     B   '5!!!!5#x4̂4̂x>#xx#       M   73'#'#'3i"xx$x44x#    B   '7!5!'7!5!'7x44x#>xxݎ      M   %#73737#hxxގ#x4̂4̂x     B    '7!55!x#x4x#x  B    !!	!5!'7BM̂xM4x#x#x   B     !73!!!'7#5!!{Va6PEV`6Dx#x\HHVߞ;cff:bDx##xHH    B    !  7'#53533'7'7##5'35#HHDx#xDDx#xDHHHfDx##xDDxݎxDfH   B     !'7#5!7!5!73'7/!7'!8Va68PxV`6Dx#xHH;cff:bDxݎxHH    B    !!5!3HH\
Dx#xDyHHfDx##xDf      M   #'3'#' fDx$"xDfI\Dx#xD
\H   B    !5!'7'7!5!7Dx#xD
\HyfDxݎxDfH      M   %37#73fDxގxDfH\
Dx#xDH    B     5!'7'7%!7'!Dx#xDDx#xDkHHHDx##xDDxݎxDfHHH     M    '3'7#77'Dx$"xDDxގxHIIHWDx#xDaDx#xHHkHH    }6   ##7!#V`JvnJVJpvJ     T   	'#5!#5'5CJnvJ`JvdpJ^V  T   %753!5373JvdpJ^V^JndvJ   }6   %33!'38V^JpdvJV`JvnJ  B    !!!!5!!qYNx#xdfYfx##xf  B    '!5!7'!5!7!5Yx#xNYdYfxݎxfYf  B    3773#''#5[KLnDvvx#xPP~~x##x    B    '7'7#''#5377vx#xvvDnLKxݎx~~PP     M   %#5#535#535'3'3#3x$"xV¼x#xV      M   3#3#7#75#535#5353xގxV»x#xV   B  	    #553353!Ƃx#xC{x##x       M 	    5'3'#7#7x$"xnƂx#x}ʻ    B  	    3'7'7+53#53Ƃx#x}ʻxݎx    M 	    7#757'3'3؂xގxƂx#x}6  B    	!!#3xpxxx   B    3#'7!5!'7xpx,xx          5!5!	!!5  cm	깹]          333'#!#\^Z  	   A     !!75!!5  
]]YY         ###3!3"^\ZX0  	m       
    3'335%!!#	#^\znnZgm       
   %3'3#!5%#	#3!^\^dddZm!      
   #!5#7'#	#3!^^dd9cm!     
    #	#3!3#!!5#3f\F^m!וddkn            '33%#	##!#'37"\`\\\~$ym?TT     
    %3'3#!5'3!3#7#	##'37^\^p\\\@ddZm?TT  B  
   5#35!7'!!!5	5 ddm]]YY  'd    !#7!##gv<ĻdgdvĜ<     ,  x    !5!!53753dĜ<cg<Ļd       	   3'3#7##	#3	3^\\^XZZ֤mm  B    676323'7'7##"'&'#58X)O$A?x#x:[V6NJ9\63SxݎxH9ZY8J    M 	   3'#'737"xxxxMx4x#x4̂x    B   '7!5!'7!5!'7!5!'7x444x#?xxݎ  B    #5!5!53!<x#xSx##x    B    !5!53!'7'7!#R x#xxݎx   B    '7'7###5353vx#xͧx#xxݎxx##x   B    533##5##5#5353NXقx#xx##x   B    3533'7'7##5##5#5353Wڂx#xWxݎx   B    #5##5#533333'7'7j%jx#xj%jx#xx##xxݎx        	  	!!5cm	깹   B   	  7!5!	Y77Y     	    	!	7mmg7YY7)r  !    
  !!!!h)m'Z\'mcq+      76! !&'&"2767!! '&'&Q(
5jj5
w(Q٠sf)rr)fs  wZe   0  563 #"'&547632654'&#"3276767&#"lj/<Fh|olnh'8	 _S}()G:3?1&Q3!e$tqz[n̠ERAIo:I-.$,Q?IY       C   7!!5!!5!!pp`|+  C4     3!!#7#53#5!!5!3!	cDh>hZיrrh4_+__|z|  ? X ! 0 ?  "'&''7&'&54767>2"&'2767>54'&ww&'''OO_:3www('''OO_;4AA565
AAA565ww49_pm__ONP(&www4;_mp__OOP((D56MJ@
56JM@      K@&  4 < 91 /90KSXY"%	!!{!5q       !!{q    d  m   3!!"&63!!"!Q
)SS)
PH{__{HP     d;w   +  #"!#73#!!3!!"'&'7&'&63 S)
W
J+!y53W	^c>H{HPPHC4|Pu_`P`_    c n   !!3!!".>3!!"U*^_*&,bމ`+     d  m   &'.#!5!2#!5!26767!5
)SS)
mPH{b{HP     d;w   +  %326767!73&'&''7#53!5!&#!5!2'#܃S)
V
SK,"xk
52X	^c>H{HPPHC4PuP`b     c n   !5!&'&#!5!2#!5!276|*]^+&,bމ`+          3!     L9  @ 4 41 20!!!9 _ ^-     L9   !!!  L-^   LP  *@ 	 
<91 990	5!!	!!5my=/9) Ӈ  B   H 1 0!!BK  X  y    !!5!3!!!5!ff!bb    B3    y TU   e  t r     X)   1 
 ,@
 
	 91 90'%3##q@`44{$   1v ( 3  #532654&#"5>32#"&'532654&'%3##oooJUOFEDECibouKJCPU_b@`442,-3teI^p\y@8=D{$     1e     333##5!5'%3##mmw>@`44  &{$      %  .#"326"&'#"&54632>3"36J0<KC78\K@7W\2-Z"b"0P&{|Su^_rhbkgf类hikfngt[         / 7@$	s'!t	s-r0 $$$*099991 <2<299032654&#".#"326>32#"&'#"&546320P2;JC88b6J0<KC78\-dW@7W\ut[u^_rna|Su^_rh1kf๲bkgf类h  X y   %!3!y3   X y   %!3!y  _         )!!ֈij         !!*^j          32#4&"#aaZ4tt\          32653#"aaHZ\tt     ^>#   47632&#"#"'732UpsXlNGUnsXlNGD"McoHޕMcoH   ^#  +  4632&#"#"'732%4632&#"#"'732ronQ.A&ronQ.A&ronQ.A&ronQ.A&D"K&ޑK&"K&ޑK& ^#  + A  4632&#"#"'732%4632&#"#"'732%4632&#"#"'732aroKnR&roKnR&rnLnR&rpKmR&roKnR&roKnR&D"KzޑKz"KzޑKz"KzޑKz    iB'Q$'QWQ4W    i>'Q W'Q$Q0$   i'Q WQ$    iB'QW'Q$'Q4WQ0$   B'Q t    J i     !!!!!!RMM   / 6&  'QT'Q$'QoTQn$ X  y&  'Q ~Q   Xy0   #"'&'.#"5>323326yKOZqMg3NJNS`u_G0;73
":?<776<    Xy0   32?3632.#"#"&'XJG_u`SNJN3gMqZOK0A<677<?:"
37;    X cy   &#"5>323267#"''43NJNSFXɉ;5GJKOK[C:?<7Dj<A;7#lD     X y    #"'&'.#"5>323326!!yKOZqMg3NJNS`t_F(!Z<73
":?=676=     X'y    #"'&'.#"5>323326!!yKOZqMg3NJNS`u_G)!;73
":?<776<Y     X  z '  767'"'!!'7#5!7&'&567676F^UE;eFT(O^jgR;uIF\<[ETFR&'"B6$P(9L5h  X <y   "  #"'&'.#"5>323326!!!!yKOZqMg3NJNS`u_G)!!;73
":?<776<P     Xy  .  #"'&'.#"5>3233263!!!'7#5!7!5!7yKOZqMg3NJNS`u_G`aG#z`;73
":?<776<Puu   Xqy /  7#5!7!5!7&'&#"5>3236767!!!!'\UQ:43NJNS`jNDJKHEL=a?]R<#:?<77
YA;X   X y  7 Z@110+5.*'   'l.5l ll810 *8<291 99999990#"'&'.#"5>323326#"'&'.#"5>323326yKOZqMg3NJNS`t_FIKOZqMg3NJNS`u_GZ<73
":?=67	6=;73
":?<77	6<   X =y 4  &'&#"5>3223267#"'3267#"'&''75>3243NJNS`f]GJKO)-D\NFIKOZqgZpNS#(:?<76 Z<A;7%=@<73	Z
o=6    X <y  6 :  #"'&'.#"5>323326#"'&'.#"5>323326!!yKOZqMg3NJNS`u_GJKOZqMg3NJNS`u_G)!;73
":?<77	6<;73
":?<776<Y     X y  7 R  #"'&'.#"5>323326#"'&'.#"5>323326#"'&'.#"5>323326yKOZqMg3NJNS`t_FIKOZqMg3NJNS`u_GJKOZqMg3NJNS`u_Gu<73
":?=67	6=};73
":?<77	6<;73
":?<776<    X <y   "  32?3632.#"#"&'!5!5XJG_u`SNJN3gMqZOK!!A<677<?:"
37;1    W yY      %52%  $'"51pZV(I؜    X y  ;  76767!##"'&'&'#5!!5367676323!&'&'&i1*+V	/J]?3hG2"W,!::!,"2Gh3?]J/	+*%'H@450U(33!\?&5?H''H?5&?\!33(U054@H'%   X'y  !  !5367676323!&'&'&!!i:!,"2Gh3?]J/	+*!'H?5&?\!33(U054@H'%  X'y'Q )     XZy'Q )'Q H     XZy&    'QkHQ) XZz'Ql)'QH      Q       !!!!3#3#	     Q       !5!5##:/cAB     X'y 	   365&'!!5!&547!5!!%4344 ! 0?=00=G(?.4;U.    X'y       !!!!"264&'#"&5476X!!3FFfFG2TUZYX^D11CCaERR}wWT||U[   X'y     !!!!2&'56X!!ɗ	   X'y     !!!!3#X!!wtM[*     X'y     !!!!33#X!!tw*   X'y{     !!!!!!%X!!jCdfAfdY2ξ;3   X'y   
   !!!!33!X!!iӡoU3'  X'y     ! 6 = Q  !!!!53#5#"&4632264&#"%#3267#"&546324&#"#"3##5#535463X!!ii3#<NN<"4/"##"!##B.)!E$%J%YbaTM]l"&
:YYh44;?`:0``1]11]1a%%QZQP\]+$"  DKK53   V'xh   -  !!!!>32#6454&#"#4&#"#3>32V""V!Z6^b"%25'26 R28W35uo:5SN[5SM%Q//7    V'x:   % )  !!!!#546?>54&#"5>323#V""J 6 0*)^3<d/z'/ "N*?1.#'!!d_1N, %`   N  >@"
  H
H	 <291 <2<2.990!3!!!'7#5!7!NŮmA1}    X <y     !!!!!!X!!!   Xy{   !5!73#!!!!'7#537!5!~P$fZ=e(lN"ebSbK    Xy      !!!!!!!!X!!!!    X  y  
 &@ H 	<2291 /905!5y!PNF   X  y  
 &@ H	 <<291 /9055%!!X!!   Xy  
   3!!5!5X!!!
PNF     Xy  
   3!!55%!5X!!>
   X}y    #5!7!5!73!!!'5ZYM{~	X!ii행PN     X}y    #5!7!5!73!!!'55%ZYM{~	X!ii행    Wyq   &%5767$'567Rȳ}v֜Pĳ~wԞP(Fd%EP7(Ge#  Xy    %5%7%'bk8jyx!:_|:XC     X my   55X!`a   X<yD    7%!!'7!5!7%5%ykSnKAD*ZWOzd#@4=PhLx"L    X<y@    7'#5375%7%5!!' z0VFdjeG'C0'Pau6LvL     Xy  !  #"'&'.#"5>3233265yKOZqMg3NJNS`u_GJ!;73
":?<776<PN    Xy  !  #"'&'.#"5>32332655%yKOZqMg3NJNS`u_G)!;73
":?<776<     X<yD + .  7%3267#"'&'&''75>327%5%RmKKt`GJKOZqG:GAFJNSMOyel<Pg	6<A;73
	L?<7܊"L+@4  X8y@ - 0  %33267#"'&'&'&''75676?5%7%5?'7;t`GJKOZqM3T.=ASD"%VGckeW6<A;73
"L7@lPau1Ly/'     Xyy    55%5X!>!PN   Xyy    5	55%y!!PN  XTy1   !  7%'757%57%5%77'4PGx0e4P0GkB$$1F4F \}F5F \|t?t?     XTy1   5%%''5%75%7XZuu:&uvk;Z&vFIs}FyJs}    Vwa    %&'567$wSh"/_D$#Q_    Vwa    %$VhSbQ#$DbO/"   X[y    5   %$X{qQ_#pOKI4
&    X[y     %  %$ynq{_Q#yBpR&4	RIK   X2y  %  %#"'&'.#"5>323326  %$yKOZqMg3NJNS`u_GJQ_;73
":?<776<TKI4
&     X2y  %  %#"'&'.#"5>323326  %$yKOZqMg3NJNS`u_G)_Q;73
":?<776<TR&4	RIK  Vw    67&%'&'567677\RN@E߾\SiIRa_bIGE#"R!+  Vw    '76?&'67&qRN@E߾\SiIRab_bb*IE#"R!+D   X yx   !!"3!!"'&5476?:nLMm:׃x|~KM᎚ِ    X yx   2#!5!27654&#!5̍:mMLnxϚMK~|     Xyy     %&'&5476;3!!!"''#"T=1̆cHcw.nL!5ِEFǚ|~K     Xyy     +'7#5!!5!232654'&'}=1̆cH>9c.nLA!5ِE,F9|~K    Xy)    %!5!!"3!!"'&5476y:nLMm:׃c|~KM᎚ِ   Xy)    7!!2#!5!27654&#!5X!:̍:mMLnQϚMK~|    Xy  (  #"3!!!"#!!'7#537&'&5476;7OnL!-u/K.~=M=̦CH|~KuLx#BِE   Xy  (  !5!27+!!'7#537!5!327654/:*'EE/&`-u/K.~-/mMLL
,E(ϚuLxuMK~|M	   X y) !  %!'7!5!7#"'&54763!!"3!!y(6^N׃:nLNl:=6ؔDuِ|~KM1D  X y)    2!!'7!5!7!5!27654&#!5̍Kh]6(6^:lNLn)ϚR"KDؔDuMK~|  Zw    3#%3653! qwyRVB     Zw    3653! 3##5#535ZwyPFVBZ  X Vy  1 /3ް2  /301!!!!X!6    X Vy  1 /3ް2 /3 01!5!!5y6   Xy   I  ?3
ް2	ް2 /333015!!!!!X!!6*@   Xy   K  ?3ް2	ް
2/	3 01!5!!5!!5y!6?j     >     #!#    >     33!3>    3  3 ?   2"&'&'&547676"2767>54&'&'3!!#!5!WV,+++WWWW+++,VWGE:;99;:EGFF:;99;:FXVWih{xihWVXXVWhix{hiWVj9;SP;99;PS;9      3  3 7   2"&'&'&547676"2767>54&'&'!!WV,+++WWWW+++,VWGE:;99;:EGFF:;99;:FMXVWih{xihWVXXVWhix{hiWVj9;SP;99;PS;9     3  3 ?   2"&'&'&547676"2767>54&'&'77''7WV,+++WWWW+++,VWGE:;99;:EGFF:;99;:F8xxyxXVWih{xihWVXXVWhix{hiWVj9;SP;99;PS;9yxxx     3  3 7   2"&'&'&547676"2767>54&'&''WV,+++WWWW+++,VWGE:;99;:EGFF:;99;:FxxXVWih{xihWVXXVWhix{hiWVj9;SP;99;PS;9_xx      3   7  !!2"&'&'&547676"2767>54&'&'M.WV,+++WWWW+++,VWGE:;99;:EGFF:;99;:F/XVWih{xihWVXXVWhix{hiWVj9;SP;99;PS;9     3  3 B L   2"&'&'&547676"2767>54&'&'2#"&546"32654WV,+++WWWW+++,VWGE:;99;:EGFF:;99;:F7b%&'qqX>=,-?XVWih{xihWVXXVWhix{hiWVj9;SP;99;PS;9d)'%`8nqq>Z<=,,      3  ! ) / 7 ? E   2"&'&'&547676&'&'&'75676767'%654'WV,+++WWWW+++,VW:F!#!E:ֈ	:E!#!F:
	&XVWih{xihWVXXVWhix{hiWV9
9{18@9p99

w:A92t   3   ! ;  !!!!2"&'&'&547676"2767>54&'&'+{{WV,+++WWWW+++,VWGE:;99;:EGFF:;99;:F@XVWih{xihWVXXVWhix{hiWVj9;SP;99;PS;9     3  3 7   2"&'&'&547676"2767>54&'&'!!WV,+++WWWW+++,VWGE:;99;:EGFF:;99;:FMXVWih{xihWVXXVWhix{hiWVj9;SP;99;PS;9    2 K     3!!#!5!!!!o   2 K     !!!!!Moת    2 K     77''7!!!
yxxxoixxyxs   2 K     !!!!!M3o/    B     !!#/^    B     !!5!3^
  B     !#!5RP     B     35!3!B    X my    5y!.    X my    -'55E.!U`a  X  y  
   %!55y!!
$]PNC   X  y     7!!-55X!
!U]  g     &"26!5!6762"'&!OsPOtOrw#[륢S'PQqOO>-"YR%    ZLw   #4&'&#! wwy H\P  Z/w   73653! Zwy\H     z>    	|bc||b     I  1 0!!M    v\ 	  !!'*]])]\@寯     X'y    32?3632.#"#"&'!5XJG_u`SNJN3gMqZOK!A<677<?:"
37;     
   !!%R |+       
  # !!$|+     Zw2    "&63!!"3!   )!"  3!
m)99)mmmmD9R9:|     Zw2    2#!5!264&#!5   )5!2  #!5Ǆm)99)mmm9R9rmm     Xy5     -5	5!5X!!!nPNF     Xy5     555%!!y!!!NP     X  y  
  %5!5!y!!NP     X  y  
  7-55!X!!   X[y    $  %$ XZ!ktO+yOpm&
4IK    X[y    $  %$ yZqOtk+pB	KIR	4&   Xym ! $  67&'%'&'57&'$77Iy'Ȭ)~ዜ˰(8m0p[^䈿D0A !FI
l     Xym !  67'6?6?$X,u|ռ0Jy7ٱR#0(
D](30ZBǋR\R\  Xy&    3#!!!!'7#537!!!>F=0|bF=&N@NU@    Xy&    3!!!'7#537!5!!5!3>F=0|bF=&NjN@     Xy   5!7!!!!!!!'7Xw!6_H4%H@Cff     Xy   !!!'7!5!7!5!!5y_H4%Hw6jCff   Xy "  %3267#"''&#"5>327%5yL;5GJKOK[_b43NJNSFXH!e<A;7$D :?<7իN     Xy #  53267#"''&#"5>3275%X!V_;5GJKOK[_b43NJNSFXJ,<A;7$D :?<7۫    X=y 
 &    %$	&#"5>323267#"''yQ_k43NJNSFX]_;5GJKOK[_KI4
&:?<7D<A;7#D    X=y 
 &    %$&#"5>323267#"''X_Q{43NJNSFX]_;5GJKOK[_R&4	RIK:?<7D<A;7#D    9;     !!!!!!q'd'd';oo ? X    r8R   5:zJB   n  c  	  3	%!	n}VN    ?>   	#	#hGf    >   	3	3h*f      >  	  	#	#!!h
gGf    >  	   	#	#!!!!h
ggGfj  T   !#!W$  o   	!#7>$d     b   !3b
$"  }   !73!z$>
d   R    !!3#CܐRL     R    !!3#C	RL   ~    3#!!C~ L   ~    !!3#C	R   Xjy   !#y  G ,    $%%$nn!"nn8ʸ    	       !%6 !&'&";112Q2qp`XXV@@V  Y      	67"7,J5PP5JkX*77*I=   P     "2642#"''7&546xtyΞi56؝wYe:vuvo3N=eXt    # O ' + 6 @ K V  #"&46235462+32"&=#"&46;5#'54&#"3!3264&#"32654&#!#"3265k֘֗kk֗֗kL65LL56LM56LM56LM55LL56LJחkkחחkkט5LL56LLkLL55KK65LL65KK5   Xjy   !3!y3j       !#!       5!#5; p;   !!3X   p;   )3!X;5   f   477632#"&'&'&#"jkbwL=.>\ bP<I0-".#<    C   0#"&546323265jkbwL=.>\bP<I0-".z#   @     !!!#%!!@)NW?Q   (I  
     	!!#37!#3'Q((qdd&&ddo!p         _(rI       !!#73#'rwdd#vvdd(!o   + 2"   # / ; G S _ k w           +7CO[gs  !2#!"543!254#!"+"=4;2+"=4;27+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2%+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2'+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2'+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;22+"=4"=43+"=4;2+"=4;2"=43!2#\\K\=Kl]\\\\]ii\][]\\\\\\\\]\\]\\\\\\x::f>]Y"\I\\\\I`LLMK\y>>   (I  
     !!3#!#%33'((d&sd    4^   7	h\\D?cc   B     !!!5!!5RR(      !!!OZW          !!!!5!5!![[[ZWT            !!!!!!!!!55[[˰f
W5        !	7	!!-.O|c;5[Z.Ґ|_W= &  
          #  276'&"! '&'676 !%!pqqpB`Ϙ_BB_1`B[5;@@@@EI7XX7H"H7XX7IÐW     3   #  3#&'$%67 %676'&ff2ffff1ff=>>=E>>>3;@;$;;#p#3##     tD'	   
    BB   3!!#!5!M%6    BB   	#!5!3!MU6%  4   	  !%!!,5m5A    4   	  !!!!;rԵ5mY5A          !!	![[#ZCoW^pK        !!!	;[5;Ő[#Z    B3   5!3!!#!B#x^x#x6x   B3   	'7!#!5!3!'7x]x#x6x     
   !%!!%!ex[xWx x      
   !!'7!!'7!;Őxex[xÂx       '  3273632#'#"'$%65'&#"pp./NRR2]PQ
pqp/@XX`H>@    B    !=!3!ZZ    !3     33!#!3!3POJ3+^/   4     	57!!#xr;rw/Krm-  4      %!%!5 !53!]UPmrZ[z     B     "  35!5&'&7673!654'BB4_`4AD1b`4CP5544}4_`4&1c`3)2HK33HK2     B     	'!!#!5!'"xKJx$xMTx#     
   !!	'!'!;xcx~Wxwzxw     B      !!!#!5BKKRPT    !3     3!###!##mPOmʀʀ3+^   4     !5	!!	3!xS;ZKmy  4   
   !!!!5!#];r~U[ZZ,     B     #  !#&'&547675!5654/RC0b`3BC5_`5BP3366:2e`2k5_`58'2GI23JM2     B     !7!5!3!!7"xJKx#x;4łx       
   !%!!7!!7x&xWxpwx    & 
  
         
  !5!'!!;qi0Z/= >&
  	    &
  
     D&
  	       D     &#"632&"26"'# #'(J^\NcdbdTN+ddbc724  & 
       Z^'	   R          !!!!!!!MM['ZW  B       3#%3#!#!5u`RP           
   3#%3#!!un2xq  v7'
  R  -i'
  8
    t'
   	       B3   653#&'&33zgJʾOhz)<Ґifj3Z\|Y
    Xy3    3!!!!#&'& TTʭpH6LL7uEy 7NL7    Xyi'
  8 a   X myi'
  8 !    B  	  !!!#BK9c  !     %  !567!6!&'&'&'yKHFJ97;6L2J!/,3
4(`<?-joo	
l   Xy  ( 8  #"'&56776326"&'&&'&'&'&'3276ym{{dm{{cf/
%#2J!UI*/YKX
M3  +/fg/Do}R(p}I	(
"q}}R     Xy3   #"'#&'&#"5>323326yKO<G43NJNS52	PCF<7N:?=6=  '    !!!#7#537!!M_;{&Mo55        !3#!!'7#5!7!!!!zwzwm[1}W       $ ( ,  !!!546?>54&#">32!!!>PZ?-\\T`beD^XD&[cNY=P+CDGF89L\VBT=	W    X  y    67!!67!%".'X[XU*>P!G*iceOu5c|oq/1$HpX?+.D`0   X  y    !.'!5>3!67'ydafN"<U|ko;=QijzxBQ%C^.C{j.	|   `   ;#"'&5#5%%T:NZX`J!!PN   Vw{     #"&'! &"2Z6lnn{]^SD  @`   3676!#"'#"'&7!2HWlrU11UslWH86*CqSSq6    y&
        N}  (  !5!'# '&76!2&'&#"!!32767N51FYPgZTSS?MOPL.7LXGICꐓ*,6[5XfAZ; `&
       `&
        6y  (  7!;#"'&''&'&7676'&'"7A$DRfQ1*5ʵjpq$A;::6GElT
=$,9xУ[[RMB   $    !!#!#5!	C   4: 
 % +  "326=7#5#"&546;54&#"5>32	7	]J3,AI^9lys:9<o=7q@}\\/:*3bX?F)-qeni() |?cc     :      5  53353!535!"326=7#5#"&546;54&#"5>32M#%]J3,AI^9lys:9<o=7q@}#/:*3bX?F)-qeni() |      :    - 8 S  %5!!5!"326=7#5#"&546;54&#"5>32"326=7#5#"&546;54&#"5>320;0]J3,AI^9lys:9<o=7q@}]J3,AI^9lys:9<o=7q@}#/:*3bX?F)-qeni() |/:*3bX?F)-qeni() |  a       " =  %=!!%%%5!55%"326=7#5#"&546;54&#"5>32'''']J3,AI^9lys:9<o=7q@}X/:*3bX?F)-qeni() |     H 8 1 7 = C I O U  %#5&'&'&''7&547'7676767537'56767'7&'&'57654'(&D9
FF
9D&()%E9
FF
9E%)-&rr&--&qq&-rs88hyh=DF<hyh88hyg=FE=gyg8%BwB%&AA&;#"BC "# B   F ^   ' 0  4>2".33&'."#67>76#FVʓVVʓ= mm &#Km % mK$ʓVVʓVVj,(Km@@mK( mK,K/,Km    F ^    % .  !4>2".7!&'."67>54h<VʓVVʓ7@mK%(e`	77	(%Km@cʓVVʓVV9Sm %H	
6@@6
} mSP     F ^  	 %  7'32>4.#52".ut&F@mm@@mSoʓVVʓVnt]&sْFUSm@@mm@VʓVV       !!![ZW     m   !5!ݠ r0p        !!#v      !&5 ƠT_C   m   5! p g    !0v	        !!#ƚ ΐ,U  m   !!! #	q       !!#v      !! 	r    m   !!# N#      !0v	        !!!# #   m   !4763!!"{zf+!u0%    y   !4'&/32765!-9+en:==@ne( =F|AEuH<  y   3!!"'&5!+f}{y%0W   y   !!	  m   4'&#!!2!+fz{}%0   y   &'&!;!76<(en@==:ne+!<TuEA|R=   y   !#!!2765{}f+!y0%       !  	z       %	!!!#!55!mw	¤]]]           !	!!;bc;$<   $    !3!39WV j   5!j    l   !X      3 	      !@ 	  <j     5!!5!!5!r#B#B#j    <l     !!!!!r#B#B#XXX m     333mjjj  m     !!!@@@mjjj  <j      53353353353<xxxj    <l      3333333<xxxXXXX   n      3333p^^^^    n      !!!!@@@@p^^^^     !!      l   !! l       !!#      l   !!# l       !5! j     l   !! X       !5!$ j     l   !!$ X   j   3!-j    3!-m    j   !!@j       !!@m   j   5!3,jk     !3,X j   5!!@jk    !!@X        3!!- 	       3!!- 	    	  #!!!P@ j   	  33!!P-# k      !!!@# 	    	  #!!!P@ m      	  33!!P-# l     !!!@# 	     !5!3, jk       !!3, X    	  !5!!#@P jk   	  !5!33$,P jk      !5!!$@ jk    	  !!!#@P X      	  !!33$,P X     !!!$@ X     !5!! j    l 	  !!!!- XV  l 	  !5!5!!, jV  l   !!! X     !5!!$# j    l 	  !!!!$# XV  l 	  !5!5!!$# jV  l   !!!$# X j   5!3!,-jk  	  !3!!,-XV    	  5!3!!5,-3jkV      !3!,-X   j   5!!!@jk     	  !!!!@#XV   	  5!!!!5@jkV     !!!@X      #!5!3!,-jjk     !!3!!,- X       !5!3!!,- jk       !!3!!,- X      !5!!!!@ jk       !5!3!!$,-# jk        !5!!!!$@# jk       !!!!!#@#P XV      #5!5!!!!P$@ Vk      !!33!!$,P# XV       !5!533!!$P-# jV       !!!!!@ X     !!3!!$,-# X      !!!!!$@# X      !5!!!!$@# jk      !!!!!$@# X  <j    5!35!<yj  <l    !!!XX       33lUTT        !!@@lUTT     5!5!  x X    333x 		    	  !!!!- ¬B  x  	  !!##xms j  x     !!3!!xm3-s ¬jB    	  !5!5!5!, >   X 	  5!###ljjj     X    !5!!!5!4l t, >  	  3!!!--A   xj 	  333!xjk   x    3!3!kA  	  5!5!5!3,,=    jX 	  5!333jkk    X    5!35!3̠=      3!!!!-- 	AB x     333!!xs 		   x   	   3!33!!-skA	jB        !5!5!5!3,,   X    !5!333xt jk	    X     5!3!5!33t,	       !5!!5!4 B     5!!###sjjj      	   5!!5!3!!t,-sjB     5!5!3!,-XA   j   5!333!jkk     	   5!5!333!XkA       !5!5!5!3!!!!,,-- AB        5!333!!###sjkkjj         !!!!5!5!333!-s t, jBkA        43!!"yY[ p~|     4&#!5!2[Yx p~|  j   5!2653#xY[j~|q    j   !"&533![Yyjq|~  *m   3YѲ/	Y   *m   #3*/	Y *m   #	#	3	3*i    S   jh   5!|j       3?  hj   5!h}j       3 @  hl   |X    !@? hl   !h}X     !@ @ l   5!5!!5ijVV     333PP ?@    l   !!!iXVV     #!#P@P ?@  	v      ?   ! ?    j   ! j      ! k      ! @      !       !    B   ! B      ! 	   F   !Z 	      ! 	      ! 	   h   !| 	      ! 	   *   !> 	       3 	  i 	~}       8m         # ' + / 3 7 ; ?  53!5353!5353!5353!5353!5353!5353!5353!53Z667576   l         # ' + / 3 7 ; ? C G K O S W [ _ c g k o s w  53%5353535353535353%5353535353535353%5353535353535353%5353%5353%53eeefffdddheefcd!!!z   
  m         # A  35#35#35#35#35#35#35#35#35#!#5#!5#!35#35#35#35!3h̚h̚̚h̚̚hϚ2̙Ϛ#366 B	s  B  F 	Z      i   !} @ i 	}    i	         !!}} 	@@    &	  	         !!!@@        !!  i	}   &	  	         !!!}}     w   !N<    w    7!!!xr$<     w    3!254#!") ) xrVVV   w&	  	      w        !%!5!5!5!5!5!5!5!5!5!N<rnrjrkrkrj  w        !'3#3#3#3#3#nnjjjjlljjN<r        w         # ' + / 3 7 ; ? C G K O S W [ _ c g  35#35#35#35#35#35#35#35#35#35#35#35#35#35#35#35#35#35#35#35#35#35#35#35#35#!xjjjjjjjjjjlllllllllljjjjjjjjjjjjjjjjjjjjnnnnnnnnnnjkkjnjkkjnjkkjnjkkjnjkkjn<   w          !373535353534B`JlТN<0JjL[F/    w          !%35535#5#5#57#35Њ4`JMlЎON<r3B`Jlѡ      w  	     ! % ) - 2 7 ; ? C G K P T X \ a f j o s  %35'7'#7'7'#7'7'7'#7'7'7'37'75#7'7'7'7'7'75'7'7'7'37'%75'7'37'!$J#B"L!MLF"ELUELF#EKALE!UKLLKLLLKLJ$K#tK"MKEKLKKKLLKKLKEKJ"KLKKLLJLL$NK$E#EKEN$EH$L#'"L LE"ELELE"EKALE!KKLKKLLKL$K#tL"JLELKKLKKKLKKKEKLR"KLKKLJLLJ$KE"REKE$E<       7!         %!!!M6r6X     8   %!!;H    8    !!!YS;bdrH  Dw   !DHN<  Dw    %!!!drH$<     8   %!!o4H      8    !!!aSo4bdrH   w   	bcN<   w    7!	oHbc$n <      7	        %!	s     w   N     w    7	xor\         7s          -M<r2s         7Ňs          -x6r2s  w   !hN    w    %!	!hŖn         %!hs         !!h<skX  w   b<    w    	oHpHb<                  X               #6  w   	bcb  v    	|bc||b    w     	
nn65bcnn66b  |   )  7632#"' 3276'&#" %632#"'cccccccczzzzzzzz12Ι/r99r6r99q̌GG2GGXX@XX  u#\u   "@  91 990	h9%-  |    3276'&#" %632#"'pppqqppp~12Ι@@@@XX@XX    | 	   ' / 7 ? G  &'&'6767&'&'7%'676727"'64'7&"'62&47 *!)Q7-:*(!&$13-7C *!(P7-:*')!* *:-77n7(KKL7n7(KK,# %0:# /]A*% ,# %0:##,^:0% :4t4(GGL4t4(GG   |    % / 3  6%632#"'327&#"6767&'&612Ι&&&&bbP'''gXX@XX
		qzz.!h	*	|l    |   ) 7  3276'&#"32764'&#"7632#"'%632#"'pppqqpppZC"!"!DD!"!"z===={{====12Ι@@@@Ț'''F##FF##XX@XX     |   6%632#"'12ΙXX@XX   |    %276'&# %632#"'hzzzz12Ι'G2GXX@XX    |    "3$%632#"'hzzzz12ΙǦGXX@XX    |    '&#"%632#"'Qzzzzz12ΙGGXX@XX     |    3276 %632#"'zzzz12ΙGGXX@XX     |    "3276! %632#"'hzzzzzz12ΙǦGGXX@XX     |    "! %632#"'hzz12ΙGXX@XX   7|   "'$%630TXX  7|   2#82Κ|X@Z (    3267>54&'.#"! 624HI347652IH637J347744IH426532<     (     67632#"' 327$%&#"!zzzzzzzz12Ι4GG΍GG@XXXX(    (    !#%&#")7632ΙK/zzzz`XXGG      3327$3!#"'&12zzzz XX`GG    7| 	  %63"71{y`X{G    7| 	  2#'&#82{{x|XG 7 	  527638x{{ΚT{GZ  7 	  "'$33{y{TX`G   |   0#'&"#%632ˡqppp12A@_XX        32763#"'$pppqΙ@@XX`    w   N<     w   N<     w   !N   w   !v<  `  /  3267>54&'.#"467>32#"&'.H+(*h9;i)*,++(i::f+),H736HI256743IH426<h)*,,*)i;9h*(+*)(i:I235624HI447743  w    %!!!h$<   w    7!!!xr$<     w    7!!x$<   w    7!!xr$<  w     %!!!!!IIr$ <    w     4632#"&!	N88NO88MoHbcj8MM87NMn <   w    %!	hHbc$n <     w    7!	bc$n <      327$'&#" %632#"'k ~ ~>?:IILII޸[["[[  w     !!!!!!IIN<     w     !%!!5!!!I) N<rr  w     !%!!!!!I) N<rJ(   w     !!!!!!IIN< *  |      6%632#"'!3276'&'12Ι^]Tzzzz^]XX@XX6~r~GG26  |      6%632#"'%676'&#"!12Ιj]^zzzz]^XX@XX'62GG~r~6  |      6%632#"'!&'&#"6767!12Ι]^zzzz-]^SXX@XX)΍6!~GGq6~     |      6%632#"'32767!&'&'12Ιzzzz^]^]XX@XX)΍GG~#6~6O     w    7!!x6r6     w    	%!#66r<   w    7!x6r$6X<   a o    7!!!*r*d     a o   7!a     [!    %!!!!rrr r     [!   7!r[r    w    %!	#6$6X<  	 " 1    " * 2 : A I  3#''%#&'52#"'&5476!!'5%!!'53'5%3'5%3#'N<<.0/#E
7$L4z8hY/6.0<<1y112+KO1HP====f^1 .1\   
  #  > D J P V \ b h n  27654'&#"&7367'67675673#''5&'&'7&'%67'7&'67'%7&'&'%6767%&'&$h%$%%34$&1++XSAN@`==k>PCRX++XYCP>k==l?L?Q	oL+ Nn;P?;@
nMNn3%%%%34%&&%s==`?J>PW,,WW?K?_==f?H?PW,,WU?H?^<=Ke+cL mCP`k<<     ! 4   ( 0 8  47632#"'&7327654 #"&#%#&7&'67&'67!󫪪vӤ=65N'V[S.U[R󫬬񫪪񿉊
ʯX[V[X[V[   ! 4   ( 0 8  47632#"'&7327654 #"73$3&'67&'67!󫪪vѦ=63QNV[S.U[R󫬬񫪪񿉊w	
'X[V[X[V[     ! 4   ! )  47632#"'&%#$''&'6%&'6!󫪪4>;D@Kǲcngk?dnhk󫬬񫪪I
kpinipi  
 ! 4    " * 2 : A I X  3#''%#&'52#"'&5476!!'5%!!'53'5%3'5%3#'32765'&#"M==,/0#H
8&O6	|7iY06./==e6a&i1r4z012+KN2HQ>>>>f^2"/1]8`1"Y4f2y   ` 1 B  7#5#53'&'&54767&'&=33676=3#327654'&O&"}|fzg}}"&&"}UQn$mQU}"$nQUVV{xVVUQ<"{u^^\_u{"#|
zUOOUz
|#YOT{zQPPQz{TO    @>  )  4'&#"3276&5476327#'#53'&`____`oqk]^^]YYňÁhgf    @>  '  "3276'&'7#5373'#"'&5476j___``_ߓqŊqYX]]XYfhhĈÁj    0  '  &'&376&+"'&5'476%7!Z{z[ZZ[~\YWmpN#ZX[[YZ[PQmp#T     G *   52764'&#"#463233#!5sPQPPtrQPyzg֏LQQQPPQr{{t|g    *# "  #53533#632#47654&#"#ddiqqCBigIIugzyUr}ppDtPQs_    C S  7  "27654'&7#"&54767##53#533333#3##h.  @\ !  2(>>?ZW~>'3|}}! -/@  /- !^'?XY??~YX?(F}R}hh}}h     L S <  #5#535&'&'5'73'3#'73'676=35'73'13|e{vw}wwUATwx|xxS@Wwx}vv|d|re{Eus~~suE|VAKtrrt@X{Ius~~suI{dr|      *    ! #!!!'!27674'&#_82V)3{D#MHZW{s{?zK8   QO #  #"'##565'##"/547 ?kM ,4N"DF &Fi?JO/FB!O
{|Im<&=     M  2  227632 #&547636=4'&#"#4'&#"=`
]d2cBU;/G;SXMB:@B
ս;7hf%#>|\@9      @O    	 &&5	iCn:^O	G
 %   2 O 7  236;2"'##'65##"'&5476;235&'&=476jS
c1=EO ;SCFRʝT6*F@E1;O+.`162V
Yi8/D
;8[BV      RP " < B  +"'##565#+"'&575477;2732;276=4'&3&'"ih;F(wQ"DG".FWCNfBy"bODUq5u4Pro@|S`64'<kn,:y!@JD     O   2367632#&5476;_#KYohM2EOL)XYD<κ6f%    @O   	&47i9)
2\OE[r   1 V 2 ` g  26;2"'##'65##"'&5476;2&'5476&+"3276733276=4/#"567654'&#"35&5mV^2"L<TCFR˝U7* 2Q;Ƌ
Xa2p2@^DJF
,aXj-!D2V9/m.0R
Zj9/C
\ V
7yM5bom&#'p[?$GOQ    r !_   3#"/4?23D-!]UF+}{<    !/   3#'654'&'#"547326Rs9W5[S%3;B[/OBC'*|<  j_g   #"=4?2%#"=4?23ɧ%QM?ˠ)TK7(w7џ5s ?      |O    "'4723!#"5472!5YA>RHIOq1 ӫg4    D %    3363'$6'"I+4puoS^    *     3%#'#3%#';&2IʗHj    7 * ( ,  377#'#'547#5773%%,ppsr,'zzxz'984?/99e5>:_  B  H    &   *'$6 76#"'676 7	5N@#3J<*Ĕ	$8 FJ,SR-PAdmR     Ga&   767$7676&#""G,*PH$/YL<J%D.9mdAP-KS   g    264&"%!!"&462OsPOtOw#[륢S'MPQqOO>-"YR%     u#\u   	  	!	!hi/u-1   x    	3%!!!!;̢4U2xxx  LY    #3	!7!!7ʢ̢U4x2x Q1   	!!R1mpp      	!!2mp  W+'
  
     z'
  
       5 	  !!d#xxx#xx#  5 	  	'7!5!'75xx#xx     5   !'7'7!d#xgx#xxx#xxݎxx#        $ % !::11uP-,S'GF'    N      76 76'] ::@v 11uPS''  H   	dXi     :H   	'iMH38b     u#\u   	hu-  B \   33##!##533RPPR    B \   333333#######5ُُPPُُRRRRPPP  P/      ! !! ! hZ[MM-3z  w Xs    Xy&  Q ~ X  y&  'Q ~Q  T}   !!	7J77 1    !#	788 1    !3	8   5   	''!jxxG      F5   	!0wx      F5   	77!xGVxH      5   	!xGw     T} 	  !5	5!	7E7Jɩ77  1  	  #	#3	ک878F8   w    7!!!xr$<     w    !!!xr<    w    7!!xr$<  w    %!!Yr$<   w    %	h5bcJ6b    w    	bc66b    w    	!	bc6b   w    !	5bc6b     w  	      # ) - 1 7  %#535#5#5#5##5'3#5#5#5#5#5##5##5###5ZssssVrrrrsZVr~rZHNrrrrZZrHNbVrrrrrrV V  +  %;# 47! !&+3267654'&#8',~" iK*4k;k^Oy{+z)=,AOfH8D	@_yi_m%:/  =      7!!7 '&7!32765#"8P$!TL'#3j/j`+h ZZ V   	##!!+73267""`30b4y,MdhsTqen    C    
  	!!!!!q''cq         '!!6 !65'"325eP"$!L'#j/jspթhᵉZZ     k   !!!!'n3hh   ?  R`   !!!R+e#J`   @  j    2!$76676'&GV:caw`>-;;/xL^&7)L5
j{4@BsSV}dxaM>      !7#"'&'3276767676&+7!2"?bdv<78.6(yL^KL2^=b+<ҋ@`45,,! >&64pn   bo{      &"26$    6 76&"@s_@s_xjVj%|nO TӜ iPPsOO*=CWW	_V  d   ,   	3!3-~>&D   4  &'&54 !2.#";#"/&'&'&'32654&'=>Cg[9Dov{^rE@G9:p.#$"r|;akFEQJK~))>?qXTS6AP!zGx251QUud>[   <   %;#"/&'7!!H<VTw9kÏ/_w30F3Gx   Wp`  $ (  !767#"'&7676?67676767!Rbm4mjje`a ./piQ3*	(
77#F8^^LAB\VC)*=	%(+C"	    X  y0&  Q  ?   !#!D&-      #7!!%Vo        3!!%	P     j   !73!d%	      f  $  !?>76&/.76$32.#"777GL+ eW4RT\i3IA"v{	=TBV\L98FGDC+P=YNc    w  I    #7337%мtt <  I    #733$Yt    I    #733$ht    I    #733$4t    I    !#733#H% 켼t    I    73#3d%% м0         73#3)$$[d         73#3$$h         73#3$$Ӽ4     Z    !73#u%%t     I   !!#%0         3!!#<$̼d       3!!#x$x       3!!#$<d    Z   33!%0    l 	  3'#'YkgKQovoQ   e 	  #'737CYkgKQovoQ   +  	  3#73#G>P>&   +  	  7373>N>h&&A}   #  D
b~d         37 !7 !7 1^81^%1:$-HXcmZ      `   !7 6!7 6!7 *6*6*N(6aY    	  7!$*.P)jc@N1     V{ 	  7!$3>P)jc8^N1  V   %+73267!!!!!3rqy,%dgx"'nqn':nlnlh9     ;X` !  >54&#"!!>32+73267!:7Sty/#t0e		1y+'dh5:=\gL/Sn 1  L'    U!}=    !7!7!7!>"">"!      !#u
f!qe    9 1 0!l l+    d    nD  "  ;!"&7#"76!7!!%&#";4l=b,ь1l{',@D,N;
2`CԄn+)b̜28?      !!3!#!/iq>h=/B=   Z{    3##67654&#"!!>32#cc8:7R;:y% 0e:=HH`\g&'    "    !!!!!!"#7676'oqn'ف>&$tn9+h%<"MUQ    $    33733#####7337UUxHHxTT}}}\tk\\ff   1  " +  6&#"#"'#"&632632!3267"2>&=F@YyEJMi<ӖFk"Qa@I6B`$7_$7ABE?UU0VVCJH #Hhhhh   )  *  2  54767.54763%"&"26765%5"b6(V)/\BӜ BӜ |LX	LXkbMB@KGG   B      @] 	
4	dd Ge
	 999991 /<2<2990KSX9Y"!!!!!!#737>;#"%9Zۮɮۮ-'P+CB:-cNɝ1  B     @M


 

4 ddG	e 
	

99991 /<22990KSX9Y"3#!#737>3!!#"d+ۮ-'B:cNɝ31 j   %  !?6?>54&#">32		@7
7 iubƥhf5tYEJs]XW5v{iVb_:7HI>9C~dN`:      	    !!!5!#!!3--%8`xxpp 9f   !#Af     ;   \@  99991 <20 KTX  @   878Y@ / ///? ???]]3#%3#P/1  5D  s 1 0 KTX     @878YKTX     @878Y KTX  @   878Y@ + +  / /]]!#+ s`  @  99991 <<99990K	TX  @   878Y KTX     @878Y KTX  @   878Y@%
 



]'.#"#>3232673#"&1!#5
`%A#5%'4^%@!%@8)=:    Xy}   !@	<<[E 1 04&#"32 !2 !"&R]U{aSyMmvjy6Bp X    91 0#ɏ  X?  @
 991 <90!#'#L\    s  @
 991 290!373     /wo  @
  991 0'T%#%vu   cfk   >32#."(ǓJ@V76 cC:m=<=    ck  @  1 290332673#"&5
ROGj(Ɠk<7=6}    uk    991 0!!0k cCk    !#!#&}k    Ocvk    #!#kk     ,  !!!767676767654'&#"67632I7Y01O9!B\<KGFB9$%)/^
tP;*A$Z58^<Y2<BKS;r`]
/    N    991 0!!w$N  N   !5!N5       !5!;       !5!   P    2"&46"264hxO()nMKpNT'd;tLpKLn    -;1    3#%3#u1     X   !!+73267!&4qqy+'dhgnln   R    	 ]@. 	4 9  
99991 /0KSX9Y"!!!3H8
f#+e    Z  ! @L  !!!4 <  <E 9"  		!	"9991 99990KSX9Y"!3267#"&546?67%!!R
Y^iJEYt4ehbui~:6D_P]zA9>IH7:_bVi    W
I  u      ^_<      +    +v           m  [v d               h        R  ' !R q y B  \   Z +   ` m ? 71  X X X#   / f  P =  =    -  )q  T j 9  s / /  B L   ;  R  ; X D  Z  j  Z 1  X  R h  h    N X    X9 f !  R   / Zj          = = = = = ws - - - -    / / / / / /  L L L L     R ; X X X X X B j j j j / / /         B B  L  L  L  L  L f  f  f  f  ;        B     
 R A P  P  P  P  % ; ; ;S f = X = X = X     !    Z  Z  Z  Z       - j - j - j - j - j - j ) Z   1 1 1  / "   ; .    ! ; n T  [ <  Tu
    	d e > 8 Q  A |  R   Y >  0 . 8Q l R /   = X - j - j - j - j - j S / /j f  R = X = X f  ;js / /  L  L     = X = X     - j - j  Z    ;  ^ /  L = X = X = X = X    5ss  d [  ^ x  H  B  % S -   l b  H    9   m	  , , 	    b K @ U +  ! {   |  :  C V        Q 6 
 7   < ~ E    g   ~   3        qYe_P M.wR yuc `w<     s9Py  Ru ;96od-   @   B    	  I   b (  M     6 s	 H   +{ H  H 9tO   [  =     [q    5 d eO  5 A 8 d  e aO A I  p X   ,   H s @O  X  @ o ^ .  8     Z I /V  U k P  [  F          |   a  (   x |u =     ( q  |  / $ 
 q L 4 + + A ? X ?   = ( i  F   L L Q q Z   ( A + Z ] t > b  S  H  | 4  %   JU    Z  7 e ; |  ,( / /j  L [ S [ S| 4 + + = X [ b [ b  F ( ( ( (   < d = D ) Z  7 7 )  $ x    7 ! y # M > 1 / - !  =Z  Q5   + Q   F Q    .  7 D   \  p  6 7 o R I  p ? *  % O ) XZ  6 N c W O H 0  $ M &     -  $ ?    -  ) Uj > $     !  K  9 $       # H 9 - $ +  #   * 
     ! 	  ~ N ] 
 ,    ) B *               Q$  (i  &9 L4  T4T   j\ FG W,K d   ;     - c> 
    / / / /   B B B     '  C  L /  f  ; ; ;Hk ;   R R R P  P  P M 2   ; ; ;   = X          M  Z  Z  Z     M M     - B       - j     ) Z ) Z ) Z ) Z ) Zqq  1 1 1 ;  Z  8 / / / /  L  L  L   = X = X - j    5 5 5 5 5 5 5 5 d d d d d dd H e e e e e e e e2dOO HOOOd9M X X X X X X4\yy          o @ @ @ @ @ @ @ @4\7 5 5 d d e eOO X X   @ @ 5 5 5 5 5 5 5 5 C C C C C C C C2d @ @ @ @ @ @ @ @4\7 5 5 5 5 5 5 5{y C C C e C HOOOOOO  R        tss @ @ @ @ @9L                                1        a 11= $    j     / ! !
/! ! !   c 
 L L C B        B        E 6 o r t t  ; ; 2o   J               / *  	  / 	    - B  B  B      B B ; I B  B  B B B  B   B B B B B B 9      ? 2 2 2 B 7 7 B B  B B  B  B B  B  B B B B B B  B  B  }   } B B B B   B  B  B B   A        B ' ,  B  B B B B B B B  B  !  w   ? d d c d d c     B X   y  1 1 1   X X           B J / X X X X X X X X X X X X X X X W X X X X X X Q Q X X X X X X X X V V N X X X X X X X X X W X X X X X X X X X X X X V V X X X X V V X X X X X X X X X X Z Z X X X X > >          2 2 2 2 B B B B X X X X  Z Z   X Z Z X X X X X X X X X X X X X X X X 9 ? r n     o  }   X G     # X C @  _ 2  4 B         B B     B B    B !   B B  B !   B B          B   -   X X X B ! X X    X X  @     6  4    H F F F                  < < < < < <xxxxxxxhhi      Fii              DD                           u           777777                           a a    "  ! ! ! !     G  C L     2    1r  j D7 B  G  u x LQ  W  N : u B B P w X X T11     T1          =C ? @  b,   W X  j w<             l#    ;1U  n  "  1 ) B B         95s XX /O   P- R Z W         D   D   D   D               H          L        	  
  
    P       4      D      P        \  `      d        (    |          d   p  !|  "  #\  $0  $  %p  &$  &  '$  '  '  (L  (  (  )  *  +  ,`  -  .t  /h  0  2   2  3  4  5  7  8  94  :H  ;l  <0  =h  >h  ?  @l  AX  Bt  Cl  D  E\  E  F  GT  GT  G  H  I  J  K  K  M,  M  N  O  PL  P  P  Q  RL  R  S4  S  T  T  U  V  V  V  W|  X  X  X  X  X  Y  Y  Z  Z,  ZD  Z\  [d  \D  \\  \t  \  \  \  \  \  ]  ]  ^  ^(  ^@  ^X  ^p  ^  ^  _  `   `8  `P  `h  `  `  ax  c  c0  cH  c`  cx  c  c  e  e  e  f  f  f4  fL  fd  f|  f  g  g  g  g  h  h  h4  h  i  i  i  i  i  j  k  k   k8  kP  kh  k  k  k  k  k  k  l  l(  l@  lX  lp  l  l  l  m  n  n   n8  nP  nh  n  n  n  n  n  n  o  o(  o@  oX  op  o  o  o  o  p,  p  p  p  p  q  q  q4  qL  qd  q|  r  r  s  s$  s<  sT  sl  s  s  s  s  t  t$  t<  tT  tl  u  v  v0  vH  v`  vx  v  v  v  w0  w  w  w  w  x  x  x4  y  z  z  z  z  {  {$  {<  {T  {l  {  {  {  {  {  {  |  |,  |D  |\  |  }  }   }8  }P  }h  }  }  }  }  }  }  ~  ~(  ~@  ~X  ~p  ~  ~  ~  ~  ~       0  l    x      <      t       p    <          `    L    D      8      4      D        h    <    4    8  H    @       D  \  x    P      H            $            4                $  <  T  t              4  D  d  |              4  L  d  |              t                4  L  d  |              $  <  T  l                ,  D  \  t      P            T  l              $  <  T  t        ,    @         (    H      x    @    4  `    8    4                      P      X    d    p    ,      t      D    D             8      X    h    l    D      P    ,  è  \  Ĭ     p    H  Ɯ    ǐ    8  x      D  ɰ  (    ,  ˔    t    ͌  ,  θ    x  ϸ    d    \    Ҽ  ӈ  p      ֌  T  ׬    X    T  ٨    X  ڰ    x    (  h  x         L  ݌    T  ް    <  L  |  ߌ  ߠ  ߴ           P  l  |      x  x         \      x           @  P  `  p            8  x        d  t          8  T              @  d        ,  \  x               x        $  `      4     0  @  P             P  x      0             @  \  l  |                0  H  X  p                    0  \  l  |        $  L  \  l            (  8      d           8  P  h          x  H       d          \      T    0      L   D   $ < T l      4  D  X  4   0   	D 	 
8 
 
 
 <  4 D T d   P        $ 4 D \ l  P     X h    H X       p        D    `   ,   L   ,  0 T        < x       < L     t   <   T    p     ! !, ! ! ! ! ! "l " #@ #X #p # # $$ $ $ $ $ %  %< %x % &H & ' '( '@ ' ' ( (` ( ( ( ) )@ )x ) ) * *H * * +T +d +t + + , , , -, - . .0 .H .` .x . . . . . . /  / /0 /H /` /x / / / / / / 0 0( 0@ 0P 0` 0x 0 0 0 0 0 1 1  18 1P 1h 1 1 1 1 2 2$ 24 2D 2T 2d 2t 2 3H 3 4 4l 4 5 5h 6 6 6 6 7d 8 8h 8 9 9 :p : ;p ; <\ < =( = >D > > ?@ ? @8 A A8 A Bl B| C$ C4 C\ C| C C D\ D E Eh E FH F G$ GT G H` H I0 IX I J J J K K L M M@ M N0 N@ N O\ P0 P P Q Q Q Q R  R S8 SH S TD Tt T UL U V8 V W, W Xl X Y< Y Z0 Z [< [ \ \ ]h ^ ^ ^ _h _ ` a a bl c c d, dH d d d eD e f fx f g@ g g h hd i iD iX i j( j k l m4 n n o p( p q rP r s tP t u vP v w x y zp { { | }X } ~  D        T      T 4    8 t          H    `    ( \      0  d    p  l   T   D  (    x   l   , @ T h   T   |   4 |  P   0 d  , l        P   H        H  (       $ < T t         8 P h        0 H ` x         8 P h        ( @ X p         0 H ` x         8 X x         8 P h        0 H ` x         8 P h         8 P h        ( @ X p         0 H ` x         8 P h        ( @ X p         0 H ` x         8 P h        ( @ X p         0 H ` x         8 P h   °     ( @ X p È à ø      0 H ` x Đ Ĩ       8 P h ŀ Ř Ű     ( @ X p ƈ Ơ Ƹ      0 H ` x ǐ Ǩ       8 P h Ȁ Ș Ȱ     ( @ X h ɀ ɐ ɨ ɸ       0 H X p ʈ ʠ ʸ      0 H ` x ː ˨       8 P h ̀ ̘ ̰     ( @ X p ͈ ͠ ͸      0 H ` x ΐ Ψ       8 P h π Ϙ ϰ       < L d | Д Ь      , D ` x ѐ Ѩ       0 H ` p Ҍ Ҩ      0 H ` x Ӑ Ө         8 P h Ԁ Ԙ ԰       < < < < < < < < < < < < p Հ մ   P l ք  @ ל  h  ٨  x P ۴  ܄ ܄   ( D d ߀ ߜ ߼   D `   D x      @ @  $  8    D t    (           4 H \ p         $ 8 L ` t    4    T  p  d  x    H   D  \    X  8  x   D  ,  X   ( l |    $  t          4 T t      4 L l    4 |   $ T     l   D    H    	L 	 
\     \    < t  0   X      4 \      t   X   $ d  <     `   X    T     l   T   , h     \   @   P     P     !H ! ! "< " " #( #x # $ $L $ $ %D % & &l '8 ' ' (< ( )$ ) * *h * * * +T + + + + + , ,h - -d - . . . . / /H / / 0 0 1P 1t 1 1 1 1 24 2d 2 2 34 3 3 4d 4 5\ 5 6 7 8  8 9 :8 : ;@ ; ; ; < <, <p < = = = > >P > > ? @X @ Ad A A B4 B B C0 Cp C D4 D D E E E F\ F Gl H HT H I I I J Jl J KL K L< L L M8 M N Nl N O@ O P( P P QD Q Q Rp R S S< T T U V< V W X Y Z4 Z Z [ [P [x [ [ [ \ \L \ \ ] ]` ] ] ^ ^< ^ ^ _ _ _ `P ` ` a ah a bL b c, c c d( d e e f4 fp f f f g g4 gh g g g h h< hd h h h h iP i` i i j< k  kD kh k k k l  lx l m mp r r| r r s  sH s s t t u u4 ul u u v v\ v v w4 w w x` x x y  yt y z0 z z { {L { | |\ | | | } }, }D } } } ~$ ~d ~ ~ ~ ~ L      \   l  t   h   t   , \   p 4 D    8 t       X |      $ \    @    8 d      0 h    T    0 T x     ( L p      @ h     D l     < l     @ h     4 `     4 \    ( \    4 l    @ t    $ P x    , X     D p     4 x    P    $ d   L |    , H       0 L h       0 L h       , H d            0 T l        L    l  (  P l     ( H x       L h       < d      4 T   X     p   P    d    h  ,     4 |     (    < d    @ ¤    ` à  Ĉ   x Š    8 d ƀ ƨ ǘ   ʄ  0  p  x  <  Ј  \  D  Ө  , L Ռ  L ֬  L   T ش  @ | ٸ   $ @ p ڤ  4 | ۰   H ܜ     8 ` ݈ ݰ   4 ` ޔ     H p ߠ    0  `    \       t   T  8 P t    d     < h     < d     8 h    < p   h x       0   p         p   \   h    P    D p  8 T p    L      
 + k    @                _        B       m                     H                           	^       4 \  	       	      	  S  	  :z  	  :  	  .  	  4U  	  "  	  :  	 &6  	  h C o p y r i g h t   ( c )   2 0 0 3   b y   B i t s t r e a m ,   I n c .   A l l   R i g h t s   R e s e r v e d . 
 D e j a V u   c h a n g e s   a r e   i n   p u b l i c   d o m a i n 
  Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved.
DejaVu changes are in public domain
  D e j a V u   S a n s   M o n o  DejaVu Sans Mono  B o l d   O b l i q u e  Bold Oblique  D e j a V u   S a n s   M o n o   B o l d   O b l i q u e  DejaVu Sans Mono Bold Oblique  D e j a V u   S a n s   M o n o   B o l d   O b l i q u e  DejaVu Sans Mono Bold Oblique  V e r s i o n   2 . 3 7  Version 2.37  D e j a V u S a n s M o n o - B o l d O b l i q u e  DejaVuSansMono-BoldOblique  D e j a V u   f o n t s   t e a m  DejaVu fonts team  h t t p : / / d e j a v u . s o u r c e f o r g e . n e t  http://dejavu.sourceforge.net  F o n t s   a r e   ( c )   B i t s t r e a m   ( s e e   b e l o w ) .   D e j a V u   c h a n g e s   a r e   i n   p u b l i c   d o m a i n . 
 
 B i t s t r e a m   V e r a   F o n t s   C o p y r i g h t 
 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
 
 C o p y r i g h t   ( c )   2 0 0 3   b y   B i t s t r e a m ,   I n c .   A l l   R i g h t s   R e s e r v e d .   B i t s t r e a m   V e r a   i s   a   t r a d e m a r k   o f   B i t s t r e a m ,   I n c . 
 
 P e r m i s s i o n   i s   h e r e b y   g r a n t e d ,   f r e e   o f   c h a r g e ,   t o   a n y   p e r s o n   o b t a i n i n g   a   c o p y   o f   t h e   f o n t s   a c c o m p a n y i n g   t h i s   l i c e n s e   ( " F o n t s " )   a n d   a s s o c i a t e d   d o c u m e n t a t i o n   f i l e s   ( t h e   " F o n t   S o f t w a r e " ) ,   t o   r e p r o d u c e   a n d   d i s t r i b u t e   t h e   F o n t   S o f t w a r e ,   i n c l u d i n g   w i t h o u t   l i m i t a t i o n   t h e   r i g h t s   t o   u s e ,   c o p y ,   m e r g e ,   p u b l i s h ,   d i s t r i b u t e ,   a n d / o r   s e l l   c o p i e s   o f   t h e   F o n t   S o f t w a r e ,   a n d   t o   p e r m i t   p e r s o n s   t o   w h o m   t h e   F o n t   S o f t w a r e   i s   f u r n i s h e d   t o   d o   s o ,   s u b j e c t   t o   t h e   f o l l o w i n g   c o n d i t i o n s : 
 
 T h e   a b o v e   c o p y r i g h t   a n d   t r a d e m a r k   n o t i c e s   a n d   t h i s   p e r m i s s i o n   n o t i c e   s h a l l   b e   i n c l u d e d   i n   a l l   c o p i e s   o f   o n e   o r   m o r e   o f   t h e   F o n t   S o f t w a r e   t y p e f a c e s . 
 
 T h e   F o n t   S o f t w a r e   m a y   b e   m o d i f i e d ,   a l t e r e d ,   o r   a d d e d   t o ,   a n d   i n   p a r t i c u l a r   t h e   d e s i g n s   o f   g l y p h s   o r   c h a r a c t e r s   i n   t h e   F o n t s   m a y   b e   m o d i f i e d   a n d   a d d i t i o n a l   g l y p h s   o r     o r   c h a r a c t e r s   m a y   b e   a d d e d   t o   t h e   F o n t s ,   o n l y   i f   t h e   f o n t s   a r e   r e n a m e d   t o   n a m e s   n o t   c o n t a i n i n g   e i t h e r   t h e   w o r d s   " B i t s t r e a m "   o r   t h e   w o r d   " V e r a " . 
 
 T h i s   L i c e n s e   b e c o m e s   n u l l   a n d   v o i d   t o   t h e   e x t e n t   a p p l i c a b l e   t o   F o n t s   o r   F o n t   S o f t w a r e   t h a t   h a s   b e e n   m o d i f i e d   a n d   i s   d i s t r i b u t e d   u n d e r   t h e   " B i t s t r e a m   V e r a "   n a m e s . 
 
 T h e   F o n t   S o f t w a r e   m a y   b e   s o l d   a s   p a r t   o f   a   l a r g e r   s o f t w a r e   p a c k a g e   b u t   n o   c o p y   o f   o n e   o r   m o r e   o f   t h e   F o n t   S o f t w a r e   t y p e f a c e s   m a y   b e   s o l d   b y   i t s e l f . 
 
 T H E   F O N T   S O F T W A R E   I S   P R O V I D E D   " A S   I S " ,   W I T H O U T   W A R R A N T Y   O F   A N Y   K I N D ,   E X P R E S S   O R   I M P L I E D ,   I N C L U D I N G   B U T   N O T   L I M I T E D   T O   A N Y   W A R R A N T I E S   O F   M E R C H A N T A B I L I T Y ,   F I T N E S S   F O R   A   P A R T I C U L A R   P U R P O S E   A N D   N O N I N F R I N G E M E N T   O F   C O P Y R I G H T ,   P A T E N T ,   T R A D E M A R K ,   O R   O T H E R   R I G H T .   I N   N O   E V E N T   S H A L L   B I T S T R E A M   O R   T H E   G N O M E   F O U N D A T I O N   B E   L I A B L E   F O R   A N Y   C L A I M ,   D A M A G E S   O R   O T H E R   L I A B I L I T Y ,   I N C L U D I N G   A N Y   G E N E R A L ,   S P E C I A L ,   I N D I R E C T ,   I N C I D E N T A L ,   O R   C O N S E Q U E N T I A L   D A M A G E S ,   W H E T H E R   I N   A N   A C T I O N   O F   C O N T R A C T ,   T O R T   O R   O T H E R W I S E ,   A R I S I N G   F R O M ,   O U T   O F   T H E   U S E   O R   I N A B I L I T Y   T O   U S E   T H E   F O N T   S O F T W A R E   O R   F R O M   O T H E R   D E A L I N G S   I N   T H E   F O N T   S O F T W A R E . 
 
 E x c e p t   a s   c o n t a i n e d   i n   t h i s   n o t i c e ,   t h e   n a m e s   o f   G n o m e ,   t h e   G n o m e   F o u n d a t i o n ,   a n d   B i t s t r e a m   I n c . ,   s h a l l   n o t   b e   u s e d   i n   a d v e r t i s i n g   o r   o t h e r w i s e   t o   p r o m o t e   t h e   s a l e ,   u s e   o r   o t h e r   d e a l i n g s   i n   t h i s   F o n t   S o f t w a r e   w i t h o u t   p r i o r   w r i t t e n   a u t h o r i z a t i o n   f r o m   t h e   G n o m e   F o u n d a t i o n   o r   B i t s t r e a m   I n c . ,   r e s p e c t i v e l y .   F o r   f u r t h e r   i n f o r m a t i o n ,   c o n t a c t :   f o n t s   a t   g n o m e   d o t   o r g .   
  Fonts are (c) Bitstream (see below). DejaVu changes are in public domain.

Bitstream Vera Fonts Copyright
------------------------------

Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. Bitstream Vera is a trademark of Bitstream, Inc.

Permission is hereby granted, free of charge, to any person obtaining a copy of the fonts accompanying this license ("Fonts") and associated documentation files (the "Font Software"), to reproduce and distribute the Font Software, including without limitation the rights to use, copy, merge, publish, distribute, and/or sell copies of the Font Software, and to permit persons to whom the Font Software is furnished to do so, subject to the following conditions:

The above copyright and trademark notices and this permission notice shall be included in all copies of one or more of the Font Software typefaces.

The Font Software may be modified, altered, or added to, and in particular the designs of glyphs or characters in the Fonts may be modified and additional glyphs or  or characters may be added to the Fonts, only if the fonts are renamed to names not containing either the words "Bitstream" or the word "Vera".

This License becomes null and void to the extent applicable to Fonts or Font Software that has been modified and is distributed under the "Bitstream Vera" names.

The Font Software may be sold as part of a larger software package but no copy of one or more of the Font Software typefaces may be sold by itself.

THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL BITSTREAM OR THE GNOME FOUNDATION BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE.

Except as contained in this notice, the names of Gnome, the Gnome Foundation, and Bitstream Inc., shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Font Software without prior written authorization from the Gnome Foundation or Bitstream Inc., respectively. For further information, contact: fonts at gnome dot org. 
  h t t p : / / d e j a v u . s o u r c e f o r g e . n e t / w i k i / i n d e x . p h p / L i c e n s e  http://dejavu.sourceforge.net/wiki/index.php/License       ~ Z                   
           	 
                        ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a                                    b c  d  e        f     g      h    j i k m l n  o q p r s u t v w  x z y { } |    ~       	
     !"#$%&'()*+  ,-./0123456789:  ;<=>?@ABCDEFGHI  JKLMNOPQRS    TUVWXYZ[\]^_`abcdefghi jklm  nopqrstuvwxyz{|}~  	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~         	
  !"#$%&'()*+,-. /0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ 	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ 	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ 	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~                	
  !"#$%&'()*+,-./0123456789:;<=>?@A BCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~          	
    !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~	 											
																						 	!	"	#	$	%	&	'	(	)	*	+	,	-	.	/	0	1	2	3	4	5	6	7	8	9	:	;	<	=	>	?	@	A	B	C	D	E	F	G	H	I	J	K	L	M	N	O	P	Q	R	S	T	U	V	W	X	Y	Z	[	\	]	^	_	`	a	b	c	d	e	f	g	h	i	j	k	l	m	n	o	p	q	r	s	t	u	v	w	x	y	z	{	|	}	~																																																																		 																																																															
 








	























 
!
"
#
$
%
&
'
(
)
*
+
,
-
.
/
0
1
2
3
4
5
6
7
8
9
:
;
<
=
>
?
@
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
[
\
]
^
_
`
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y  
z
{
|
}
~

























	sfthyphenAmacronamacronAbreveabreveAogonekaogonekCcircumflexccircumflex
Cdotaccent
cdotaccentDcarondcaronDcroatEmacronemacronEbreveebreve
Edotaccent
edotaccentEogonekeogonekEcaronecaronGcircumflexgcircumflex
Gdotaccent
gdotaccentGcommaaccentgcommaaccentHcircumflexhcircumflexHbarhbarItildeitildeImacronimacronIbreveibreveIogonekiogonekIJijJcircumflexjcircumflexKcommaaccentkcommaaccentkgreenlandicLacutelacuteLcommaaccentlcommaaccentLcaronlcaronLdotldotNacutenacuteNcommaaccentncommaaccentNcaronncaronnapostropheEngengOmacronomacronObreveobreveOhungarumlautohungarumlautRacuteracuteRcommaaccentrcommaaccentRcaronrcaronSacutesacuteScircumflexscircumflexTcommaaccenttcommaaccentTcarontcaronTbartbarUtildeutildeUmacronumacronUbreveubreveUringuringUhungarumlautuhungarumlautUogonekuogonekWcircumflexwcircumflexYcircumflexycircumflexZacutezacute
Zdotaccent
zdotaccentlongsuni0180uni0181uni0182uni0183uni0184uni0185uni0186uni0187uni0188uni0189uni018Auni018Buni018Cuni018Duni018Euni018Funi0190uni0191uni0193uni0194uni0195uni0196uni0197uni0198uni0199uni019Auni019Buni019Cuni019Duni019Euni019FOhornohornuni01A2uni01A3uni01A4uni01A5uni01A6uni01A7uni01A8uni01A9uni01AAuni01ABuni01ACuni01ADuni01AEUhornuhornuni01B1uni01B2uni01B3uni01B4uni01B5uni01B6uni01B7uni01B8uni01B9uni01BAuni01BBuni01BCuni01BDuni01BEuni01BFuni01C0uni01C1uni01C2uni01C3uni01CDuni01CEuni01CFuni01D0uni01D1uni01D2uni01D3uni01D4uni01D5uni01D6uni01D7uni01D8uni01D9uni01DAuni01DBuni01DCuni01DDuni01DEuni01DFuni01E0uni01E1uni01E2uni01E3Gcarongcaronuni01E8uni01E9uni01EAuni01EBuni01ECuni01EDuni01EEuni01EFuni01F4uni01F5uni01F6uni01F8uni01F9AEacuteaeacuteOslashacuteoslashacuteuni0200uni0201uni0202uni0203uni0204uni0205uni0206uni0207uni0208uni0209uni020Auni020Buni020Cuni020Duni020Euni020Funi0210uni0211uni0212uni0213uni0214uni0215uni0216uni0217Scommaaccentscommaaccentuni021Auni021Buni021Cuni021Duni021Euni021Funi0221uni0224uni0225uni0226uni0227uni0228uni0229uni022Auni022Buni022Cuni022Duni022Euni022Funi0230uni0231uni0232uni0233uni0234uni0235uni0236dotlessjuni0238uni0239uni023Auni023Buni023Cuni023Duni023Euni023Funi0240uni0241uni0243uni0244uni0245uni024Cuni024Duni0250uni0251uni0252uni0253uni0254uni0255uni0256uni0257uni0258uni0259uni025Auni025Buni025Cuni025Duni025Euni025Funi0260uni0261uni0262uni0263uni0264uni0265uni0266uni0267uni0268uni0269uni026Auni026Buni026Cuni026Duni026Euni026Funi0270uni0271uni0272uni0273uni0274uni0275uni0276uni0277uni0278uni0279uni027Auni027Buni027Cuni027Duni027Euni027Funi0280uni0281uni0282uni0283uni0284uni0285uni0286uni0287uni0288uni0289uni028Auni028Buni028Cuni028Duni028Euni028Funi0290uni0291uni0292uni0293uni0294uni0295uni0296uni0297uni0298uni0299uni029Auni029Buni029Cuni029Duni029Euni029Funi02A0uni02A1uni02A2uni02A3uni02A4uni02A5uni02A6uni02A7uni02A8uni02A9uni02AAuni02ABuni02ACuni02ADuni02AEuni02AFuni02B0uni02B1uni02B2uni02B3uni02B4uni02B5uni02B6uni02B7uni02B8uni02B9uni02BBuni02BCuni02BDuni02BEuni02BFuni02C0uni02C1uni02C8uni02C9uni02CCuni02CDuni02CEuni02CFuni02D0uni02D1uni02D2uni02D3uni02D6uni02D7uni02DEuni02E0uni02E1uni02E2uni02E3uni02E4uni02E5uni02E6uni02E7uni02E8uni02E9uni02EEuni02F3	gravecomb	acutecombuni0302	tildecombuni0304uni0305uni0306uni0307uni0308hookabovecombuni030Auni030Buni030Cuni030Duni030Euni030Funi0310uni0311uni0312uni0313uni0314uni0315uni0316uni0317uni0318uni0319uni031Auni031Buni031Cuni031Duni031Euni031Funi0320uni0321uni0322dotbelowcombuni0324uni0325uni0326uni0327uni0328uni0329uni032Auni032Buni032Cuni032Duni032Euni032Funi0330uni0331uni0332uni0333uni0334uni0335uni0336uni0337uni0338uni0339uni033Auni033Buni033Cuni033Duni033Euni033Funi0343uni0358uni0361uni0374uni0375uni0376uni0377uni037Auni037Buni037Cuni037Duni037Euni037Ftonosdieresistonos
Alphatonos	anoteleiaEpsilontonosEtatonos	IotatonosOmicrontonosUpsilontonos
OmegatonosiotadieresistonosAlphaBetaGammauni0394EpsilonZetaEtaThetaIotaKappaLambdaMuNuXiOmicronPiRhoSigmaTauUpsilonPhiChiPsiIotadieresisUpsilondieresis
alphatonosepsilontonosetatonos	iotatonosupsilondieresistonosalphabetagammadeltaepsilonzetaetathetaiotakappalambdauni03BCnuxiomicronrhosigma1sigmatauupsilonphichipsiomegaiotadieresisupsilondieresisomicrontonosupsilontonos
omegatonosuni03D0theta1Upsilon1uni03D3uni03D4phi1omega1uni03D7uni03D8uni03D9uni03DAuni03DBuni03DCuni03DDuni03DEuni03DFuni03E0uni03E1uni03F0uni03F1uni03F2uni03F3uni03F4uni03F5uni03F6uni03F7uni03F8uni03F9uni03FAuni03FBuni03FCuni03FDuni03FEuni03FFuni0400uni0401uni0402uni0403uni0404uni0405uni0406uni0407uni0408uni0409uni040Auni040Buni040Cuni040Duni040Euni040Funi0410uni0411uni0412uni0413uni0414uni0415uni0416uni0417uni0418uni0419uni041Auni041Buni041Cuni041Duni041Euni041Funi0420uni0421uni0422uni0423uni0424uni0425uni0426uni0427uni0428uni0429uni042Auni042Buni042Cuni042Duni042Euni042Funi0430uni0431uni0432uni0433uni0434uni0435uni0436uni0437uni0438uni0439uni043Auni043Buni043Cuni043Duni043Euni043Funi0440uni0441uni0442uni0443uni0444uni0445uni0446uni0447uni0448uni0449uni044Auni044Buni044Cuni044Duni044Euni044Funi0450uni0451uni0452uni0453uni0454uni0455uni0456uni0457uni0458uni0459uni045Auni045Buni045Cuni045Duni045Euni045Funi0462uni0463uni0472uni0473uni0490uni0491uni0492uni0493uni0494uni0495uni0496uni0497uni0498uni0499uni049Auni049Buni04A2uni04A3uni04A4uni04A5uni04AAuni04ABuni04ACuni04ADuni04AEuni04AFuni04B0uni04B1uni04B2uni04B3uni04BAuni04BBuni04C0uni04C1uni04C2uni04C3uni04C4uni04C7uni04C8uni04CBuni04CCuni04CFuni04D0uni04D1uni04D2uni04D3uni04D4uni04D5uni04D6uni04D7uni04D8uni04D9uni04DAuni04DBuni04DCuni04DDuni04DEuni04DFuni04E0uni04E1uni04E2uni04E3uni04E4uni04E5uni04E6uni04E7uni04E8uni04E9uni04EAuni04EBuni04ECuni04EDuni04EEuni04EFuni04F0uni04F1uni04F2uni04F3uni04F4uni04F5uni04F6uni04F7uni04F8uni04F9uni0510uni0511uni051Auni051Buni051Cuni051Duni0531uni0532uni0533uni0534uni0535uni0536uni0537uni0538uni0539uni053Auni053Buni053Cuni053Duni053Euni053Funi0540uni0541uni0542uni0543uni0544uni0545uni0546uni0547uni0548uni0549uni054Auni054Buni054Cuni054Duni054Euni054Funi0550uni0551uni0552uni0553uni0554uni0555uni0556uni0559uni055Auni055Buni055Cuni055Duni055Euni055Funi0561uni0562uni0563uni0564uni0565uni0566uni0567uni0568uni0569uni056Auni056Buni056Cuni056Duni056Euni056Funi0570uni0571uni0572uni0573uni0574uni0575uni0576uni0577uni0578uni0579uni057Auni057Buni057Cuni057Duni057Euni057Funi0580uni0581uni0582uni0583uni0584uni0585uni0586uni0587uni0589uni058Auni0E3Funi0E81uni0E82uni0E84uni0E87uni0E88uni0E8Auni0E8Duni0E94uni0E95uni0E96uni0E97uni0E99uni0E9Auni0E9Buni0E9Cuni0E9Duni0E9Euni0E9Funi0EA1uni0EA2uni0EA3uni0EA5uni0EA7uni0EAAuni0EABuni0EADuni0EAEuni0EAFuni0EB0uni0EB1uni0EB2uni0EB3uni0EB4uni0EB5uni0EB6uni0EB7uni0EB8uni0EB9uni0EBBuni0EBCuni0EC8uni0EC9uni0ECAuni0ECBuni0ECCuni0ECDuni10D0uni10D1uni10D2uni10D3uni10D4uni10D5uni10D6uni10D7uni10D8uni10D9uni10DAuni10DBuni10DCuni10DDuni10DEuni10DFuni10E0uni10E1uni10E2uni10E3uni10E4uni10E5uni10E6uni10E7uni10E8uni10E9uni10EAuni10EBuni10ECuni10EDuni10EEuni10EFuni10F0uni10F1uni10F2uni10F3uni10F4uni10F5uni10F6uni10F7uni10F8uni10F9uni10FAuni10FBuni10FCuni1D02uni1D08uni1D09uni1D14uni1D16uni1D17uni1D1Duni1D1Euni1D1Funi1D2Cuni1D2Duni1D2Euni1D30uni1D31uni1D32uni1D33uni1D34uni1D35uni1D36uni1D37uni1D38uni1D39uni1D3Auni1D3Buni1D3Cuni1D3Euni1D3Funi1D40uni1D41uni1D42uni1D43uni1D44uni1D45uni1D46uni1D47uni1D48uni1D49uni1D4Auni1D4Buni1D4Cuni1D4Duni1D4Euni1D4Funi1D50uni1D51uni1D52uni1D53uni1D54uni1D55uni1D56uni1D57uni1D58uni1D59uni1D5Auni1D5Buni1D62uni1D63uni1D64uni1D65uni1D77uni1D78uni1D7Buni1D85uni1D9Buni1D9Cuni1D9Duni1D9Euni1D9Funi1DA0uni1DA1uni1DA2uni1DA3uni1DA4uni1DA5uni1DA6uni1DA7uni1DA8uni1DA9uni1DAAuni1DABuni1DACuni1DADuni1DAEuni1DAFuni1DB0uni1DB1uni1DB2uni1DB3uni1DB4uni1DB5uni1DB6uni1DB7uni1DB9uni1DBAuni1DBBuni1DBCuni1DBDuni1DBEuni1DBFuni1E00uni1E01uni1E02uni1E03uni1E04uni1E05uni1E06uni1E07uni1E08uni1E09uni1E0Auni1E0Buni1E0Cuni1E0Duni1E0Euni1E0Funi1E10uni1E11uni1E12uni1E13uni1E18uni1E19uni1E1Auni1E1Buni1E1Cuni1E1Duni1E1Euni1E1Funi1E20uni1E21uni1E22uni1E23uni1E24uni1E25uni1E26uni1E27uni1E28uni1E29uni1E2Auni1E2Buni1E2Cuni1E2Duni1E30uni1E31uni1E32uni1E33uni1E34uni1E35uni1E36uni1E37uni1E38uni1E39uni1E3Auni1E3Buni1E3Cuni1E3Duni1E3Euni1E3Funi1E40uni1E41uni1E42uni1E43uni1E44uni1E45uni1E46uni1E47uni1E48uni1E49uni1E4Auni1E4Buni1E4Cuni1E4Duni1E54uni1E55uni1E56uni1E57uni1E58uni1E59uni1E5Auni1E5Buni1E5Cuni1E5Duni1E5Euni1E5Funi1E60uni1E61uni1E62uni1E63uni1E68uni1E69uni1E6Auni1E6Buni1E6Cuni1E6Duni1E6Euni1E6Funi1E70uni1E71uni1E72uni1E73uni1E74uni1E75uni1E76uni1E77uni1E78uni1E79uni1E7Cuni1E7Duni1E7Euni1E7FWgravewgraveWacutewacute	Wdieresis	wdieresisuni1E86uni1E87uni1E88uni1E89uni1E8Auni1E8Buni1E8Cuni1E8Duni1E8Euni1E8Funi1E90uni1E91uni1E92uni1E93uni1E94uni1E95uni1E96uni1E97uni1E98uni1E99uni1E9Buni1E9Funi1EA0uni1EA1uni1EACuni1EADuni1EB0uni1EB1uni1EB6uni1EB7uni1EB8uni1EB9uni1EBCuni1EBDuni1EC6uni1EC7uni1ECAuni1ECBuni1ECCuni1ECDuni1ED8uni1ED9uni1EDAuni1EDBuni1EDCuni1EDDuni1EE0uni1EE1uni1EE2uni1EE3uni1EE4uni1EE5uni1EE8uni1EE9uni1EEAuni1EEBuni1EEEuni1EEFuni1EF0uni1EF1Ygraveygraveuni1EF4uni1EF5uni1EF8uni1EF9uni1F00uni1F01uni1F02uni1F03uni1F04uni1F05uni1F06uni1F07uni1F08uni1F09uni1F0Auni1F0Buni1F0Cuni1F0Duni1F0Euni1F0Funi1F10uni1F11uni1F12uni1F13uni1F14uni1F15uni1F18uni1F19uni1F1Auni1F1Buni1F1Cuni1F1Duni1F20uni1F21uni1F22uni1F23uni1F24uni1F25uni1F26uni1F27uni1F28uni1F29uni1F2Auni1F2Buni1F2Cuni1F2Duni1F2Euni1F2Funi1F30uni1F31uni1F32uni1F33uni1F34uni1F35uni1F36uni1F37uni1F38uni1F39uni1F3Auni1F3Buni1F3Cuni1F3Duni1F3Euni1F3Funi1F40uni1F41uni1F42uni1F43uni1F44uni1F45uni1F48uni1F49uni1F4Auni1F4Buni1F4Cuni1F4Duni1F50uni1F51uni1F52uni1F53uni1F54uni1F55uni1F56uni1F57uni1F59uni1F5Buni1F5Duni1F5Funi1F60uni1F61uni1F62uni1F63uni1F64uni1F65uni1F66uni1F67uni1F68uni1F69uni1F6Auni1F6Buni1F6Cuni1F6Duni1F6Euni1F6Funi1F70uni1F71uni1F72uni1F73uni1F74uni1F75uni1F76uni1F77uni1F78uni1F79uni1F7Auni1F7Buni1F7Cuni1F7Duni1F80uni1F81uni1F82uni1F83uni1F84uni1F85uni1F86uni1F87uni1F88uni1F89uni1F8Auni1F8Buni1F8Cuni1F8Duni1F8Euni1F8Funi1F90uni1F91uni1F92uni1F93uni1F94uni1F95uni1F96uni1F97uni1F98uni1F99uni1F9Auni1F9Buni1F9Cuni1F9Duni1F9Euni1F9Funi1FA0uni1FA1uni1FA2uni1FA3uni1FA4uni1FA5uni1FA6uni1FA7uni1FA8uni1FA9uni1FAAuni1FABuni1FACuni1FADuni1FAEuni1FAFuni1FB0uni1FB1uni1FB2uni1FB3uni1FB4uni1FB6uni1FB7uni1FB8uni1FB9uni1FBAuni1FBBuni1FBCuni1FBDuni1FBEuni1FBFuni1FC0uni1FC1uni1FC2uni1FC3uni1FC4uni1FC6uni1FC7uni1FC8uni1FC9uni1FCAuni1FCBuni1FCCuni1FCDuni1FCEuni1FCFuni1FD0uni1FD1uni1FD2uni1FD3uni1FD6uni1FD7uni1FD8uni1FD9uni1FDAuni1FDBuni1FDDuni1FDEuni1FDFuni1FE0uni1FE1uni1FE2uni1FE3uni1FE4uni1FE5uni1FE6uni1FE7uni1FE8uni1FE9uni1FEAuni1FEBuni1FECuni1FEDuni1FEEuni1FEFuni1FF2uni1FF3uni1FF4uni1FF6uni1FF7uni1FF8uni1FF9uni1FFAuni1FFBuni1FFCuni1FFDuni1FFEuni2000uni2001uni2002uni2003uni2004uni2005uni2006uni2007uni2008uni2009uni200Auni2010uni2011
figuredashuni2015uni2016underscoredblquotereverseduni201Funi2023uni202Funi2031minuteseconduni2034uni2035uni2036uni2037	exclamdbluni203Duni203Euni203Funi2045uni2046uni2047uni2048uni2049uni204Buni205Funi2070uni2071uni2074uni2075uni2076uni2077uni2078uni2079uni207Auni207Buni207Cuni207Duni207Euni207Funi2080uni2081uni2082uni2083uni2084uni2085uni2086uni2087uni2088uni2089uni208Auni208Buni208Cuni208Duni208Euni2090uni2091uni2092uni2093uni2094uni2095uni2096uni2097uni2098uni2099uni209Auni209Buni209Cuni20A0colonmonetaryuni20A2lirauni20A5uni20A6pesetauni20A8uni20A9uni20AAdongEurouni20ADuni20AEuni20AFuni20B0uni20B1uni20B2uni20B3uni20B4uni20B5uni20B8uni20B9uni20BAuni20BDuni2102uni2105uni210Duni210Euni210Funi2115uni2116uni2117uni2119uni211Auni211Duni2124uni2126uni212Auni212B	estimateduni2148uni2150uni2151onethird	twothirdsuni2155uni2156uni2157uni2158uni2159uni215A	oneeighththreeeighthsfiveeighthsseveneighthsuni215Funi2189	arrowleftarrowup
arrowright	arrowdown	arrowboth	arrowupdnuni2196uni2197uni2198uni2199uni219Auni219Buni219Cuni219Duni219Euni219Funi21A0uni21A1uni21A2uni21A3uni21A4uni21A5uni21A6uni21A7arrowupdnbseuni21A9uni21AAuni21ABuni21ACuni21ADuni21AEuni21AFuni21B0uni21B1uni21B2uni21B3uni21B4carriagereturnuni21B6uni21B7uni21B8uni21B9uni21BAuni21BBuni21BCuni21BDuni21BEuni21BFuni21C0uni21C1uni21C2uni21C3uni21C4uni21C5uni21C6uni21C7uni21C8uni21C9uni21CAuni21CBuni21CCuni21CDuni21CEuni21CFarrowdblleft
arrowdbluparrowdblrightarrowdbldownarrowdblbothuni21D5uni21D6uni21D7uni21D8uni21D9uni21DAuni21DBuni21DCuni21DDuni21DEuni21DFuni21E0uni21E1uni21E2uni21E3uni21E4uni21E5uni21E6uni21E7uni21E8uni21E9uni21EAuni21EBuni21ECuni21EDuni21EEuni21EFuni21F0uni21F1uni21F2uni21F3uni21F4uni21F5uni21F6uni21F7uni21F8uni21F9uni21FAuni21FBuni21FCuni21FDuni21FEuni21FF	universaluni2201existentialuni2204emptysetgradientelement
notelementuni220Asuchthatuni220Cuni220Duni220Euni2210uni2213uni2215asteriskmathuni2218uni2219uni221Buni221Cproportional
orthogonalangleuni2223
logicaland	logicalorintersectionunionuni222Cuni222D	thereforeuni2235uni2236uni2237uni2238uni2239uni223Auni223Bsimilaruni223Duni2241uni2242uni2243uni2244	congruentuni2246uni2247uni2249uni224Auni224Buni224Cuni224Duni224Euni224Funi2250uni2251uni2252uni2253uni2254uni2255uni2256uni2257uni2258uni2259uni225Auni225Buni225Cuni225Duni225Euni225Fequivalenceuni2262uni2263uni2266uni2267uni2268uni2269uni226Duni226Euni226Funi2270uni2271uni2272uni2273uni2274uni2275uni2276uni2277uni2278uni2279uni227Auni227Buni227Cuni227Duni227Euni227Funi2280uni2281propersubsetpropersuperset	notsubsetuni2285reflexsubsetreflexsupersetuni2288uni2289uni228Auni228Buni228Duni228Euni228Funi2290uni2291uni2292uni2293uni2294
circleplusuni2296circlemultiplyuni2298uni2299uni229Auni229Buni229Cuni229Duni229Euni229Funi22A0uni22A1uni22A2uni22A3uni22A4perpendicularuni22B2uni22B3uni22B4uni22B5uni22B8uni22C2uni22C3uni22C4dotmathuni22C6uni22CDuni22CEuni22CFuni22D0uni22D1uni22DAuni22DBuni22DCuni22DDuni22DEuni22DFuni22E0uni22E1uni22E2uni22E3uni22E4uni22E5uni22E6uni22E7uni22E8uni22E9uni22EFuni2300uni2301houseuni2303uni2304uni2305uni2306uni2308uni2309uni230Auni230Buni230Cuni230Duni230Euni230Frevlogicalnotuni2311uni2312uni2313uni2314uni2315uni2318uni2319uni231Cuni231Duni231Euni231F
integraltp
integralbtuni2325uni2326uni2327uni2328uni232Buni2335uni2336uni2337uni2338uni2339uni233Auni233Buni233Cuni233Duni233Euni233Funi2340uni2341uni2342uni2343uni2344uni2345uni2346uni2347uni2348uni2349uni234Auni234Buni234Cuni234Duni234Euni234Funi2350uni2351uni2352uni2353uni2354uni2355uni2356uni2357uni2358uni2359uni235Auni235Buni235Cuni235Duni235Euni235Funi2360uni2361uni2362uni2363uni2364uni2365uni2366uni2367uni2368uni2369uni236Auni236Buni236Cuni236Duni236Euni236Funi2370uni2371uni2372uni2373uni2374uni2375uni2376uni2377uni2378uni2379uni237Auni237Duni2380uni2381uni2382uni2383uni2388uni2389uni238Auni238Buni2395uni239Buni239Cuni239Duni239Euni239Funi23A0uni23A1uni23A2uni23A3uni23A4uni23A5uni23A6uni23A7uni23A8uni23A9uni23AAuni23ABuni23ACuni23ADuni23AEuni23CEuni23CFuni2423SF100000uni2501SF110000uni2503uni2504uni2505uni2506uni2507uni2508uni2509uni250Auni250BSF010000uni250Duni250Euni250FSF030000uni2511uni2512uni2513SF020000uni2515uni2516uni2517SF040000uni2519uni251Auni251BSF080000uni251Duni251Euni251Funi2520uni2521uni2522uni2523SF090000uni2525uni2526uni2527uni2528uni2529uni252Auni252BSF060000uni252Duni252Euni252Funi2530uni2531uni2532uni2533SF070000uni2535uni2536uni2537uni2538uni2539uni253Auni253BSF050000uni253Duni253Euni253Funi2540uni2541uni2542uni2543uni2544uni2545uni2546uni2547uni2548uni2549uni254Auni254Buni254Cuni254Duni254Euni254FSF430000SF240000SF510000SF520000SF390000SF220000SF210000SF250000SF500000SF490000SF380000SF280000SF270000SF260000SF360000SF370000SF420000SF190000SF200000SF230000SF470000SF480000SF410000SF450000SF460000SF400000SF540000SF530000SF440000uni256Duni256Euni256Funi2570uni2571uni2572uni2573uni2574uni2575uni2576uni2577uni2578uni2579uni257Auni257Buni257Cuni257Duni257Euni257Fupblockuni2581uni2582uni2583dnblockuni2585uni2586uni2587blockuni2589uni258Auni258Blfblockuni258Duni258Euni258Frtblockltshadeshadedkshadeuni2594uni2595uni2596uni2597uni2598uni2599uni259Auni259Buni259Cuni259Duni259Euni259F	filledboxH22073uni25A2uni25A3uni25A4uni25A5uni25A6uni25A7uni25A8uni25A9H18543H18551
filledrectuni25ADuni25AEuni25AFuni25B0uni25B1triagupuni25B3uni25B4uni25B5uni25B6uni25B7uni25B8uni25B9triagrtuni25BBtriagdnuni25BDuni25BEuni25BFuni25C0uni25C1uni25C2uni25C3triaglfuni25C5uni25C6uni25C7uni25C8uni25C9circleuni25CCuni25CDuni25CEH18533uni25D0uni25D1uni25D2uni25D3uni25D4uni25D5uni25D6uni25D7	invbullet	invcircleuni25DAuni25DBuni25DCuni25DDuni25DEuni25DFuni25E0uni25E1uni25E2uni25E3uni25E4uni25E5
openbulletuni25E7uni25E8uni25E9uni25EAuni25EBuni25ECuni25EDuni25EEuni25EFuni25F0uni25F1uni25F2uni25F3uni25F4uni25F5uni25F6uni25F7uni25F8uni25F9uni25FAuni25FBuni25FCuni25FDuni25FEuni25FFuni2600uni2638uni2639	smilefaceinvsmilefacesununi263Ffemaleuni2641maleuni2643uni2644uni2645uni2646uni2647spadeuni2661uni2662clubuni2664heartdiamonduni2667uni2669musicalnotemusicalnotedbluni266Cuni266Duni266Euni266Funi27C2uni27C5uni27C6uni27DCuni27E0uni27E6uni27E7uni27E8uni27E9uni27EAuni27EBuni27F5uni27F6uni27F7uni2987uni2988uni2997uni2998uni29EBuni29FAuni29FBuni2A00uni2A2Funi2A6Auni2A6Buni2B05uni2B06uni2B07uni2B08uni2B09uni2B0Auni2B0Buni2B0Cuni2B0Duni2B12uni2B13uni2B14uni2B15uni2B16uni2B17uni2B18uni2B19uni2B1Auni2C64uni2C6Duni2C6Euni2C6Funi2C70uni2C75uni2C76uni2C77uni2C79uni2C7Auni2C7Cuni2C7Duni2C7Euni2C7Funi2E18uni2E1Funi2E22uni2E23uni2E24uni2E25uni2E2EuniA708uniA709uniA70AuniA70BuniA70CuniA70DuniA70EuniA70FuniA710uniA711uniA712uniA713uniA714uniA715uniA716uniA71BuniA71CuniA71DuniA71EuniA71FuniA722uniA723uniA724uniA725uniA726uniA727uniA789uniA78AuniA78BuniA78CuniA78DuniA78EuniA790uniA791uniA7AAuniA7F8uniA7F9uniF6C5uniFFF9uniFFFAuniFFFBuniFFFCuniFFFDu1D55A	dlLtcaronDieresisAcuteTildec6462Grave
CircumflexCaronfractionslashuni0311.caseuni0306.caseuni0307.caseuni030B.caseuni030F.casethinquestionuni0304.caseunderbarunderbar.wideunderbar.smalljotdiaeresis.symbolsEng.altexclamdown.casequestiondown.caseuni2E18.case @tGG22dkY&Y@&~2}|{zG{{@zyAzGyAxw2xkw2vutsrqp%olkjjiihghhgg@fed:d}cbcbaba`;`2_^_^];]d\[Z[ZY]ZZYX%Y]Y@X%WV;V}U:U2T;T'SRSdRQPdOSM;M2L:L2KJ;JdIHGFFF@ED.ED@.CBABA@]AA@=%@]@@?k>=%>=%<;<d;:;:9876}53d1010/.-.-,+*d+*d)('&'&%$#}"!"}! 2@d
2
K4>4K77@6
	2
		2X}X d++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++  StartFontMetrics 4.1
Notice Converted by PHP-font-lib
Comment https://github.com/PhenX/php-font-lib
EncodingScheme FontSpecific
FontName DejaVu Sans Mono
FontSubfamily Bold Oblique
UniqueID DejaVu Sans Mono Bold Oblique
FullName DejaVu Sans Mono Bold Oblique
Version Version 2.37
PostScriptName DejaVuSansMono-BoldOblique
Manufacturer DejaVu fonts team
FontVendorURL http://dejavu.sourceforge.net
LicenseURL http://dejavu.sourceforge.net/wiki/index.php/License
Weight Bold
ItalicAngle -11
IsFixedPitch true
UnderlineThickness 44
UnderlinePosition -63
FontHeightOffset 0
Ascender 928
Descender -236
FontBBox -425 -394 808 1008
StartCharMetrics 2711
U 32 ; WX 602 ; N space ; G 3
U 33 ; WX 602 ; N exclam ; G 4
U 34 ; WX 602 ; N quotedbl ; G 5
U 35 ; WX 602 ; N numbersign ; G 6
U 36 ; WX 602 ; N dollar ; G 7
U 37 ; WX 602 ; N percent ; G 8
U 38 ; WX 602 ; N ampersand ; G 9
U 39 ; WX 602 ; N quotesingle ; G 10
U 40 ; WX 602 ; N parenleft ; G 11
U 41 ; WX 602 ; N parenright ; G 12
U 42 ; WX 602 ; N asterisk ; G 13
U 43 ; WX 602 ; N plus ; G 14
U 44 ; WX 602 ; N comma ; G 15
U 45 ; WX 602 ; N hyphen ; G 16
U 46 ; WX 602 ; N period ; G 17
U 47 ; WX 602 ; N slash ; G 18
U 48 ; WX 602 ; N zero ; G 19
U 49 ; WX 602 ; N one ; G 20
U 50 ; WX 602 ; N two ; G 21
U 51 ; WX 602 ; N three ; G 22
U 52 ; WX 602 ; N four ; G 23
U 53 ; WX 602 ; N five ; G 24
U 54 ; WX 602 ; N six ; G 25
U 55 ; WX 602 ; N seven ; G 26
U 56 ; WX 602 ; N eight ; G 27
U 57 ; WX 602 ; N nine ; G 28
U 58 ; WX 602 ; N colon ; G 29
U 59 ; WX 602 ; N semicolon ; G 30
U 60 ; WX 602 ; N less ; G 31
U 61 ; WX 602 ; N equal ; G 32
U 62 ; WX 602 ; N greater ; G 33
U 63 ; WX 602 ; N question ; G 34
U 64 ; WX 602 ; N at ; G 35
U 65 ; WX 602 ; N A ; G 36
U 66 ; WX 602 ; N B ; G 37
U 67 ; WX 602 ; N C ; G 38
U 68 ; WX 602 ; N D ; G 39
U 69 ; WX 602 ; N E ; G 40
U 70 ; WX 602 ; N F ; G 41
U 71 ; WX 602 ; N G ; G 42
U 72 ; WX 602 ; N H ; G 43
U 73 ; WX 602 ; N I ; G 44
U 74 ; WX 602 ; N J ; G 45
U 75 ; WX 602 ; N K ; G 46
U 76 ; WX 602 ; N L ; G 47
U 77 ; WX 602 ; N M ; G 48
U 78 ; WX 602 ; N N ; G 49
U 79 ; WX 602 ; N O ; G 50
U 80 ; WX 602 ; N P ; G 51
U 81 ; WX 602 ; N Q ; G 52
U 82 ; WX 602 ; N R ; G 53
U 83 ; WX 602 ; N S ; G 54
U 84 ; WX 602 ; N T ; G 55
U 85 ; WX 602 ; N U ; G 56
U 86 ; WX 602 ; N V ; G 57
U 87 ; WX 602 ; N W ; G 58
U 88 ; WX 602 ; N X ; G 59
U 89 ; WX 602 ; N Y ; G 60
U 90 ; WX 602 ; N Z ; G 61
U 91 ; WX 602 ; N bracketleft ; G 62
U 92 ; WX 602 ; N backslash ; G 63
U 93 ; WX 602 ; N bracketright ; G 64
U 94 ; WX 602 ; N asciicircum ; G 65
U 95 ; WX 602 ; N underscore ; G 66
U 96 ; WX 602 ; N grave ; G 67
U 97 ; WX 602 ; N a ; G 68
U 98 ; WX 602 ; N b ; G 69
U 99 ; WX 602 ; N c ; G 70
U 100 ; WX 602 ; N d ; G 71
U 101 ; WX 602 ; N e ; G 72
U 102 ; WX 602 ; N f ; G 73
U 103 ; WX 602 ; N g ; G 74
U 104 ; WX 602 ; N h ; G 75
U 105 ; WX 602 ; N i ; G 76
U 106 ; WX 602 ; N j ; G 77
U 107 ; WX 602 ; N k ; G 78
U 108 ; WX 602 ; N l ; G 79
U 109 ; WX 602 ; N m ; G 80
U 110 ; WX 602 ; N n ; G 81
U 111 ; WX 602 ; N o ; G 82
U 112 ; WX 602 ; N p ; G 83
U 113 ; WX 602 ; N q ; G 84
U 114 ; WX 602 ; N r ; G 85
U 115 ; WX 602 ; N s ; G 86
U 116 ; WX 602 ; N t ; G 87
U 117 ; WX 602 ; N u ; G 88
U 118 ; WX 602 ; N v ; G 89
U 119 ; WX 602 ; N w ; G 90
U 120 ; WX 602 ; N x ; G 91
U 121 ; WX 602 ; N y ; G 92
U 122 ; WX 602 ; N z ; G 93
U 123 ; WX 602 ; N braceleft ; G 94
U 124 ; WX 602 ; N bar ; G 95
U 125 ; WX 602 ; N braceright ; G 96
U 126 ; WX 602 ; N asciitilde ; G 97
U 160 ; WX 602 ; N nbspace ; G 98
U 161 ; WX 602 ; N exclamdown ; G 99
U 162 ; WX 602 ; N cent ; G 100
U 163 ; WX 602 ; N sterling ; G 101
U 164 ; WX 602 ; N currency ; G 102
U 165 ; WX 602 ; N yen ; G 103
U 166 ; WX 602 ; N brokenbar ; G 104
U 167 ; WX 602 ; N section ; G 105
U 168 ; WX 602 ; N dieresis ; G 106
U 169 ; WX 602 ; N copyright ; G 107
U 170 ; WX 602 ; N ordfeminine ; G 108
U 171 ; WX 602 ; N guillemotleft ; G 109
U 172 ; WX 602 ; N logicalnot ; G 110
U 173 ; WX 602 ; N sfthyphen ; G 111
U 174 ; WX 602 ; N registered ; G 112
U 175 ; WX 602 ; N macron ; G 113
U 176 ; WX 602 ; N degree ; G 114
U 177 ; WX 602 ; N plusminus ; G 115
U 178 ; WX 602 ; N twosuperior ; G 116
U 179 ; WX 602 ; N threesuperior ; G 117
U 180 ; WX 602 ; N acute ; G 118
U 181 ; WX 602 ; N mu ; G 119
U 182 ; WX 602 ; N paragraph ; G 120
U 183 ; WX 602 ; N periodcentered ; G 121
U 184 ; WX 602 ; N cedilla ; G 122
U 185 ; WX 602 ; N onesuperior ; G 123
U 186 ; WX 602 ; N ordmasculine ; G 124
U 187 ; WX 602 ; N guillemotright ; G 125
U 188 ; WX 602 ; N onequarter ; G 126
U 189 ; WX 602 ; N onehalf ; G 127
U 190 ; WX 602 ; N threequarters ; G 128
U 191 ; WX 602 ; N questiondown ; G 129
U 192 ; WX 602 ; N Agrave ; G 130
U 193 ; WX 602 ; N Aacute ; G 131
U 194 ; WX 602 ; N Acircumflex ; G 132
U 195 ; WX 602 ; N Atilde ; G 133
U 196 ; WX 602 ; N Adieresis ; G 134
U 197 ; WX 602 ; N Aring ; G 135
U 198 ; WX 602 ; N AE ; G 136
U 199 ; WX 602 ; N Ccedilla ; G 137
U 200 ; WX 602 ; N Egrave ; G 138
U 201 ; WX 602 ; N Eacute ; G 139
U 202 ; WX 602 ; N Ecircumflex ; G 140
U 203 ; WX 602 ; N Edieresis ; G 141
U 204 ; WX 602 ; N Igrave ; G 142
U 205 ; WX 602 ; N Iacute ; G 143
U 206 ; WX 602 ; N Icircumflex ; G 144
U 207 ; WX 602 ; N Idieresis ; G 145
U 208 ; WX 602 ; N Eth ; G 146
U 209 ; WX 602 ; N Ntilde ; G 147
U 210 ; WX 602 ; N Ograve ; G 148
U 211 ; WX 602 ; N Oacute ; G 149
U 212 ; WX 602 ; N Ocircumflex ; G 150
U 213 ; WX 602 ; N Otilde ; G 151
U 214 ; WX 602 ; N Odieresis ; G 152
U 215 ; WX 602 ; N multiply ; G 153
U 216 ; WX 602 ; N Oslash ; G 154
U 217 ; WX 602 ; N Ugrave ; G 155
U 218 ; WX 602 ; N Uacute ; G 156
U 219 ; WX 602 ; N Ucircumflex ; G 157
U 220 ; WX 602 ; N Udieresis ; G 158
U 221 ; WX 602 ; N Yacute ; G 159
U 222 ; WX 602 ; N Thorn ; G 160
U 223 ; WX 602 ; N germandbls ; G 161
U 224 ; WX 602 ; N agrave ; G 162
U 225 ; WX 602 ; N aacute ; G 163
U 226 ; WX 602 ; N acircumflex ; G 164
U 227 ; WX 602 ; N atilde ; G 165
U 228 ; WX 602 ; N adieresis ; G 166
U 229 ; WX 602 ; N aring ; G 167
U 230 ; WX 602 ; N ae ; G 168
U 231 ; WX 602 ; N ccedilla ; G 169
U 232 ; WX 602 ; N egrave ; G 170
U 233 ; WX 602 ; N eacute ; G 171
U 234 ; WX 602 ; N ecircumflex ; G 172
U 235 ; WX 602 ; N edieresis ; G 173
U 236 ; WX 602 ; N igrave ; G 174
U 237 ; WX 602 ; N iacute ; G 175
U 238 ; WX 602 ; N icircumflex ; G 176
U 239 ; WX 602 ; N idieresis ; G 177
U 240 ; WX 602 ; N eth ; G 178
U 241 ; WX 602 ; N ntilde ; G 179
U 242 ; WX 602 ; N ograve ; G 180
U 243 ; WX 602 ; N oacute ; G 181
U 244 ; WX 602 ; N ocircumflex ; G 182
U 245 ; WX 602 ; N otilde ; G 183
U 246 ; WX 602 ; N odieresis ; G 184
U 247 ; WX 602 ; N divide ; G 185
U 248 ; WX 602 ; N oslash ; G 186
U 249 ; WX 602 ; N ugrave ; G 187
U 250 ; WX 602 ; N uacute ; G 188
U 251 ; WX 602 ; N ucircumflex ; G 189
U 252 ; WX 602 ; N udieresis ; G 190
U 253 ; WX 602 ; N yacute ; G 191
U 254 ; WX 602 ; N thorn ; G 192
U 255 ; WX 602 ; N ydieresis ; G 193
U 256 ; WX 602 ; N Amacron ; G 194
U 257 ; WX 602 ; N amacron ; G 195
U 258 ; WX 602 ; N Abreve ; G 196
U 259 ; WX 602 ; N abreve ; G 197
U 260 ; WX 602 ; N Aogonek ; G 198
U 261 ; WX 602 ; N aogonek ; G 199
U 262 ; WX 602 ; N Cacute ; G 200
U 263 ; WX 602 ; N cacute ; G 201
U 264 ; WX 602 ; N Ccircumflex ; G 202
U 265 ; WX 602 ; N ccircumflex ; G 203
U 266 ; WX 602 ; N Cdotaccent ; G 204
U 267 ; WX 602 ; N cdotaccent ; G 205
U 268 ; WX 602 ; N Ccaron ; G 206
U 269 ; WX 602 ; N ccaron ; G 207
U 270 ; WX 602 ; N Dcaron ; G 208
U 271 ; WX 602 ; N dcaron ; G 209
U 272 ; WX 602 ; N Dcroat ; G 210
U 273 ; WX 602 ; N dmacron ; G 211
U 274 ; WX 602 ; N Emacron ; G 212
U 275 ; WX 602 ; N emacron ; G 213
U 276 ; WX 602 ; N Ebreve ; G 214
U 277 ; WX 602 ; N ebreve ; G 215
U 278 ; WX 602 ; N Edotaccent ; G 216
U 279 ; WX 602 ; N edotaccent ; G 217
U 280 ; WX 602 ; N Eogonek ; G 218
U 281 ; WX 602 ; N eogonek ; G 219
U 282 ; WX 602 ; N Ecaron ; G 220
U 283 ; WX 602 ; N ecaron ; G 221
U 284 ; WX 602 ; N Gcircumflex ; G 222
U 285 ; WX 602 ; N gcircumflex ; G 223
U 286 ; WX 602 ; N Gbreve ; G 224
U 287 ; WX 602 ; N gbreve ; G 225
U 288 ; WX 602 ; N Gdotaccent ; G 226
U 289 ; WX 602 ; N gdotaccent ; G 227
U 290 ; WX 602 ; N Gcommaaccent ; G 228
U 291 ; WX 602 ; N gcommaaccent ; G 229
U 292 ; WX 602 ; N Hcircumflex ; G 230
U 293 ; WX 602 ; N hcircumflex ; G 231
U 294 ; WX 602 ; N Hbar ; G 232
U 295 ; WX 602 ; N hbar ; G 233
U 296 ; WX 602 ; N Itilde ; G 234
U 297 ; WX 602 ; N itilde ; G 235
U 298 ; WX 602 ; N Imacron ; G 236
U 299 ; WX 602 ; N imacron ; G 237
U 300 ; WX 602 ; N Ibreve ; G 238
U 301 ; WX 602 ; N ibreve ; G 239
U 302 ; WX 602 ; N Iogonek ; G 240
U 303 ; WX 602 ; N iogonek ; G 241
U 304 ; WX 602 ; N Idot ; G 242
U 305 ; WX 602 ; N dotlessi ; G 243
U 306 ; WX 602 ; N IJ ; G 244
U 307 ; WX 602 ; N ij ; G 245
U 308 ; WX 602 ; N Jcircumflex ; G 246
U 309 ; WX 602 ; N jcircumflex ; G 247
U 310 ; WX 602 ; N Kcommaaccent ; G 248
U 311 ; WX 602 ; N kcommaaccent ; G 249
U 312 ; WX 602 ; N kgreenlandic ; G 250
U 313 ; WX 602 ; N Lacute ; G 251
U 314 ; WX 602 ; N lacute ; G 252
U 315 ; WX 602 ; N Lcommaaccent ; G 253
U 316 ; WX 602 ; N lcommaaccent ; G 254
U 317 ; WX 602 ; N Lcaron ; G 255
U 318 ; WX 602 ; N lcaron ; G 256
U 319 ; WX 602 ; N Ldot ; G 257
U 320 ; WX 602 ; N ldot ; G 258
U 321 ; WX 602 ; N Lslash ; G 259
U 322 ; WX 602 ; N lslash ; G 260
U 323 ; WX 602 ; N Nacute ; G 261
U 324 ; WX 602 ; N nacute ; G 262
U 325 ; WX 602 ; N Ncommaaccent ; G 263
U 326 ; WX 602 ; N ncommaaccent ; G 264
U 327 ; WX 602 ; N Ncaron ; G 265
U 328 ; WX 602 ; N ncaron ; G 266
U 329 ; WX 602 ; N napostrophe ; G 267
U 330 ; WX 602 ; N Eng ; G 268
U 331 ; WX 602 ; N eng ; G 269
U 332 ; WX 602 ; N Omacron ; G 270
U 333 ; WX 602 ; N omacron ; G 271
U 334 ; WX 602 ; N Obreve ; G 272
U 335 ; WX 602 ; N obreve ; G 273
U 336 ; WX 602 ; N Ohungarumlaut ; G 274
U 337 ; WX 602 ; N ohungarumlaut ; G 275
U 338 ; WX 602 ; N OE ; G 276
U 339 ; WX 602 ; N oe ; G 277
U 340 ; WX 602 ; N Racute ; G 278
U 341 ; WX 602 ; N racute ; G 279
U 342 ; WX 602 ; N Rcommaaccent ; G 280
U 343 ; WX 602 ; N rcommaaccent ; G 281
U 344 ; WX 602 ; N Rcaron ; G 282
U 345 ; WX 602 ; N rcaron ; G 283
U 346 ; WX 602 ; N Sacute ; G 284
U 347 ; WX 602 ; N sacute ; G 285
U 348 ; WX 602 ; N Scircumflex ; G 286
U 349 ; WX 602 ; N scircumflex ; G 287
U 350 ; WX 602 ; N Scedilla ; G 288
U 351 ; WX 602 ; N scedilla ; G 289
U 352 ; WX 602 ; N Scaron ; G 290
U 353 ; WX 602 ; N scaron ; G 291
U 354 ; WX 602 ; N Tcommaaccent ; G 292
U 355 ; WX 602 ; N tcommaaccent ; G 293
U 356 ; WX 602 ; N Tcaron ; G 294
U 357 ; WX 602 ; N tcaron ; G 295
U 358 ; WX 602 ; N Tbar ; G 296
U 359 ; WX 602 ; N tbar ; G 297
U 360 ; WX 602 ; N Utilde ; G 298
U 361 ; WX 602 ; N utilde ; G 299
U 362 ; WX 602 ; N Umacron ; G 300
U 363 ; WX 602 ; N umacron ; G 301
U 364 ; WX 602 ; N Ubreve ; G 302
U 365 ; WX 602 ; N ubreve ; G 303
U 366 ; WX 602 ; N Uring ; G 304
U 367 ; WX 602 ; N uring ; G 305
U 368 ; WX 602 ; N Uhungarumlaut ; G 306
U 369 ; WX 602 ; N uhungarumlaut ; G 307
U 370 ; WX 602 ; N Uogonek ; G 308
U 371 ; WX 602 ; N uogonek ; G 309
U 372 ; WX 602 ; N Wcircumflex ; G 310
U 373 ; WX 602 ; N wcircumflex ; G 311
U 374 ; WX 602 ; N Ycircumflex ; G 312
U 375 ; WX 602 ; N ycircumflex ; G 313
U 376 ; WX 602 ; N Ydieresis ; G 314
U 377 ; WX 602 ; N Zacute ; G 315
U 378 ; WX 602 ; N zacute ; G 316
U 379 ; WX 602 ; N Zdotaccent ; G 317
U 380 ; WX 602 ; N zdotaccent ; G 318
U 381 ; WX 602 ; N Zcaron ; G 319
U 382 ; WX 602 ; N zcaron ; G 320
U 383 ; WX 602 ; N longs ; G 321
U 384 ; WX 602 ; N uni0180 ; G 322
U 385 ; WX 602 ; N uni0181 ; G 323
U 386 ; WX 602 ; N uni0182 ; G 324
U 387 ; WX 602 ; N uni0183 ; G 325
U 388 ; WX 602 ; N uni0184 ; G 326
U 389 ; WX 602 ; N uni0185 ; G 327
U 390 ; WX 602 ; N uni0186 ; G 328
U 391 ; WX 602 ; N uni0187 ; G 329
U 392 ; WX 602 ; N uni0188 ; G 330
U 393 ; WX 602 ; N uni0189 ; G 331
U 394 ; WX 602 ; N uni018A ; G 332
U 395 ; WX 602 ; N uni018B ; G 333
U 396 ; WX 602 ; N uni018C ; G 334
U 397 ; WX 602 ; N uni018D ; G 335
U 398 ; WX 602 ; N uni018E ; G 336
U 399 ; WX 602 ; N uni018F ; G 337
U 400 ; WX 602 ; N uni0190 ; G 338
U 401 ; WX 602 ; N uni0191 ; G 339
U 402 ; WX 602 ; N florin ; G 340
U 403 ; WX 602 ; N uni0193 ; G 341
U 404 ; WX 602 ; N uni0194 ; G 342
U 405 ; WX 602 ; N uni0195 ; G 343
U 406 ; WX 602 ; N uni0196 ; G 344
U 407 ; WX 602 ; N uni0197 ; G 345
U 408 ; WX 602 ; N uni0198 ; G 346
U 409 ; WX 602 ; N uni0199 ; G 347
U 410 ; WX 602 ; N uni019A ; G 348
U 411 ; WX 602 ; N uni019B ; G 349
U 412 ; WX 602 ; N uni019C ; G 350
U 413 ; WX 602 ; N uni019D ; G 351
U 414 ; WX 602 ; N uni019E ; G 352
U 415 ; WX 602 ; N uni019F ; G 353
U 416 ; WX 602 ; N Ohorn ; G 354
U 417 ; WX 602 ; N ohorn ; G 355
U 418 ; WX 602 ; N uni01A2 ; G 356
U 419 ; WX 602 ; N uni01A3 ; G 357
U 420 ; WX 602 ; N uni01A4 ; G 358
U 421 ; WX 602 ; N uni01A5 ; G 359
U 422 ; WX 602 ; N uni01A6 ; G 360
U 423 ; WX 602 ; N uni01A7 ; G 361
U 424 ; WX 602 ; N uni01A8 ; G 362
U 425 ; WX 602 ; N uni01A9 ; G 363
U 426 ; WX 602 ; N uni01AA ; G 364
U 427 ; WX 602 ; N uni01AB ; G 365
U 428 ; WX 602 ; N uni01AC ; G 366
U 429 ; WX 602 ; N uni01AD ; G 367
U 430 ; WX 602 ; N uni01AE ; G 368
U 431 ; WX 602 ; N Uhorn ; G 369
U 432 ; WX 602 ; N uhorn ; G 370
U 433 ; WX 602 ; N uni01B1 ; G 371
U 434 ; WX 602 ; N uni01B2 ; G 372
U 435 ; WX 602 ; N uni01B3 ; G 373
U 436 ; WX 602 ; N uni01B4 ; G 374
U 437 ; WX 602 ; N uni01B5 ; G 375
U 438 ; WX 602 ; N uni01B6 ; G 376
U 439 ; WX 602 ; N uni01B7 ; G 377
U 440 ; WX 602 ; N uni01B8 ; G 378
U 441 ; WX 602 ; N uni01B9 ; G 379
U 442 ; WX 602 ; N uni01BA ; G 380
U 443 ; WX 602 ; N uni01BB ; G 381
U 444 ; WX 602 ; N uni01BC ; G 382
U 445 ; WX 602 ; N uni01BD ; G 383
U 446 ; WX 602 ; N uni01BE ; G 384
U 447 ; WX 602 ; N uni01BF ; G 385
U 448 ; WX 602 ; N uni01C0 ; G 386
U 449 ; WX 602 ; N uni01C1 ; G 387
U 450 ; WX 602 ; N uni01C2 ; G 388
U 451 ; WX 602 ; N uni01C3 ; G 389
U 461 ; WX 602 ; N uni01CD ; G 390
U 462 ; WX 602 ; N uni01CE ; G 391
U 463 ; WX 602 ; N uni01CF ; G 392
U 464 ; WX 602 ; N uni01D0 ; G 393
U 465 ; WX 602 ; N uni01D1 ; G 394
U 466 ; WX 602 ; N uni01D2 ; G 395
U 467 ; WX 602 ; N uni01D3 ; G 396
U 468 ; WX 602 ; N uni01D4 ; G 397
U 469 ; WX 602 ; N uni01D5 ; G 398
U 470 ; WX 602 ; N uni01D6 ; G 399
U 471 ; WX 602 ; N uni01D7 ; G 400
U 472 ; WX 602 ; N uni01D8 ; G 401
U 473 ; WX 602 ; N uni01D9 ; G 402
U 474 ; WX 602 ; N uni01DA ; G 403
U 475 ; WX 602 ; N uni01DB ; G 404
U 476 ; WX 602 ; N uni01DC ; G 405
U 477 ; WX 602 ; N uni01DD ; G 406
U 478 ; WX 602 ; N uni01DE ; G 407
U 479 ; WX 602 ; N uni01DF ; G 408
U 480 ; WX 602 ; N uni01E0 ; G 409
U 481 ; WX 602 ; N uni01E1 ; G 410
U 482 ; WX 602 ; N uni01E2 ; G 411
U 483 ; WX 602 ; N uni01E3 ; G 412
U 486 ; WX 602 ; N Gcaron ; G 413
U 487 ; WX 602 ; N gcaron ; G 414
U 488 ; WX 602 ; N uni01E8 ; G 415
U 489 ; WX 602 ; N uni01E9 ; G 416
U 490 ; WX 602 ; N uni01EA ; G 417
U 491 ; WX 602 ; N uni01EB ; G 418
U 492 ; WX 602 ; N uni01EC ; G 419
U 493 ; WX 602 ; N uni01ED ; G 420
U 494 ; WX 602 ; N uni01EE ; G 421
U 495 ; WX 602 ; N uni01EF ; G 422
U 500 ; WX 602 ; N uni01F4 ; G 423
U 501 ; WX 602 ; N uni01F5 ; G 424
U 502 ; WX 602 ; N uni01F6 ; G 425
U 504 ; WX 602 ; N uni01F8 ; G 426
U 505 ; WX 602 ; N uni01F9 ; G 427
U 508 ; WX 602 ; N AEacute ; G 428
U 509 ; WX 602 ; N aeacute ; G 429
U 510 ; WX 602 ; N Oslashacute ; G 430
U 511 ; WX 602 ; N oslashacute ; G 431
U 512 ; WX 602 ; N uni0200 ; G 432
U 513 ; WX 602 ; N uni0201 ; G 433
U 514 ; WX 602 ; N uni0202 ; G 434
U 515 ; WX 602 ; N uni0203 ; G 435
U 516 ; WX 602 ; N uni0204 ; G 436
U 517 ; WX 602 ; N uni0205 ; G 437
U 518 ; WX 602 ; N uni0206 ; G 438
U 519 ; WX 602 ; N uni0207 ; G 439
U 520 ; WX 602 ; N uni0208 ; G 440
U 521 ; WX 602 ; N uni0209 ; G 441
U 522 ; WX 602 ; N uni020A ; G 442
U 523 ; WX 602 ; N uni020B ; G 443
U 524 ; WX 602 ; N uni020C ; G 444
U 525 ; WX 602 ; N uni020D ; G 445
U 526 ; WX 602 ; N uni020E ; G 446
U 527 ; WX 602 ; N uni020F ; G 447
U 528 ; WX 602 ; N uni0210 ; G 448
U 529 ; WX 602 ; N uni0211 ; G 449
U 530 ; WX 602 ; N uni0212 ; G 450
U 531 ; WX 602 ; N uni0213 ; G 451
U 532 ; WX 602 ; N uni0214 ; G 452
U 533 ; WX 602 ; N uni0215 ; G 453
U 534 ; WX 602 ; N uni0216 ; G 454
U 535 ; WX 602 ; N uni0217 ; G 455
U 536 ; WX 602 ; N Scommaaccent ; G 456
U 537 ; WX 602 ; N scommaaccent ; G 457
U 538 ; WX 602 ; N uni021A ; G 458
U 539 ; WX 602 ; N uni021B ; G 459
U 540 ; WX 602 ; N uni021C ; G 460
U 541 ; WX 602 ; N uni021D ; G 461
U 542 ; WX 602 ; N uni021E ; G 462
U 543 ; WX 602 ; N uni021F ; G 463
U 545 ; WX 602 ; N uni0221 ; G 464
U 548 ; WX 602 ; N uni0224 ; G 465
U 549 ; WX 602 ; N uni0225 ; G 466
U 550 ; WX 602 ; N uni0226 ; G 467
U 551 ; WX 602 ; N uni0227 ; G 468
U 552 ; WX 602 ; N uni0228 ; G 469
U 553 ; WX 602 ; N uni0229 ; G 470
U 554 ; WX 602 ; N uni022A ; G 471
U 555 ; WX 602 ; N uni022B ; G 472
U 556 ; WX 602 ; N uni022C ; G 473
U 557 ; WX 602 ; N uni022D ; G 474
U 558 ; WX 602 ; N uni022E ; G 475
U 559 ; WX 602 ; N uni022F ; G 476
U 560 ; WX 602 ; N uni0230 ; G 477
U 561 ; WX 602 ; N uni0231 ; G 478
U 562 ; WX 602 ; N uni0232 ; G 479
U 563 ; WX 602 ; N uni0233 ; G 480
U 564 ; WX 602 ; N uni0234 ; G 481
U 565 ; WX 602 ; N uni0235 ; G 482
U 566 ; WX 602 ; N uni0236 ; G 483
U 567 ; WX 602 ; N dotlessj ; G 484
U 568 ; WX 602 ; N uni0238 ; G 485
U 569 ; WX 602 ; N uni0239 ; G 486
U 570 ; WX 602 ; N uni023A ; G 487
U 571 ; WX 602 ; N uni023B ; G 488
U 572 ; WX 602 ; N uni023C ; G 489
U 573 ; WX 602 ; N uni023D ; G 490
U 574 ; WX 602 ; N uni023E ; G 491
U 575 ; WX 602 ; N uni023F ; G 492
U 576 ; WX 602 ; N uni0240 ; G 493
U 577 ; WX 602 ; N uni0241 ; G 494
U 579 ; WX 602 ; N uni0243 ; G 495
U 580 ; WX 602 ; N uni0244 ; G 496
U 581 ; WX 602 ; N uni0245 ; G 497
U 588 ; WX 602 ; N uni024C ; G 498
U 589 ; WX 602 ; N uni024D ; G 499
U 592 ; WX 602 ; N uni0250 ; G 500
U 593 ; WX 602 ; N uni0251 ; G 501
U 594 ; WX 602 ; N uni0252 ; G 502
U 595 ; WX 602 ; N uni0253 ; G 503
U 596 ; WX 602 ; N uni0254 ; G 504
U 597 ; WX 602 ; N uni0255 ; G 505
U 598 ; WX 602 ; N uni0256 ; G 506
U 599 ; WX 602 ; N uni0257 ; G 507
U 600 ; WX 602 ; N uni0258 ; G 508
U 601 ; WX 602 ; N uni0259 ; G 509
U 602 ; WX 602 ; N uni025A ; G 510
U 603 ; WX 602 ; N uni025B ; G 511
U 604 ; WX 602 ; N uni025C ; G 512
U 605 ; WX 602 ; N uni025D ; G 513
U 606 ; WX 602 ; N uni025E ; G 514
U 607 ; WX 602 ; N uni025F ; G 515
U 608 ; WX 602 ; N uni0260 ; G 516
U 609 ; WX 602 ; N uni0261 ; G 517
U 610 ; WX 602 ; N uni0262 ; G 518
U 611 ; WX 602 ; N uni0263 ; G 519
U 612 ; WX 602 ; N uni0264 ; G 520
U 613 ; WX 602 ; N uni0265 ; G 521
U 614 ; WX 602 ; N uni0266 ; G 522
U 615 ; WX 602 ; N uni0267 ; G 523
U 616 ; WX 602 ; N uni0268 ; G 524
U 617 ; WX 602 ; N uni0269 ; G 525
U 618 ; WX 602 ; N uni026A ; G 526
U 619 ; WX 602 ; N uni026B ; G 527
U 620 ; WX 602 ; N uni026C ; G 528
U 621 ; WX 602 ; N uni026D ; G 529
U 622 ; WX 602 ; N uni026E ; G 530
U 623 ; WX 602 ; N uni026F ; G 531
U 624 ; WX 602 ; N uni0270 ; G 532
U 625 ; WX 602 ; N uni0271 ; G 533
U 626 ; WX 602 ; N uni0272 ; G 534
U 627 ; WX 602 ; N uni0273 ; G 535
U 628 ; WX 602 ; N uni0274 ; G 536
U 629 ; WX 602 ; N uni0275 ; G 537
U 630 ; WX 602 ; N uni0276 ; G 538
U 631 ; WX 602 ; N uni0277 ; G 539
U 632 ; WX 602 ; N uni0278 ; G 540
U 633 ; WX 602 ; N uni0279 ; G 541
U 634 ; WX 602 ; N uni027A ; G 542
U 635 ; WX 602 ; N uni027B ; G 543
U 636 ; WX 602 ; N uni027C ; G 544
U 637 ; WX 602 ; N uni027D ; G 545
U 638 ; WX 602 ; N uni027E ; G 546
U 639 ; WX 602 ; N uni027F ; G 547
U 640 ; WX 602 ; N uni0280 ; G 548
U 641 ; WX 602 ; N uni0281 ; G 549
U 642 ; WX 602 ; N uni0282 ; G 550
U 643 ; WX 602 ; N uni0283 ; G 551
U 644 ; WX 602 ; N uni0284 ; G 552
U 645 ; WX 602 ; N uni0285 ; G 553
U 646 ; WX 602 ; N uni0286 ; G 554
U 647 ; WX 602 ; N uni0287 ; G 555
U 648 ; WX 602 ; N uni0288 ; G 556
U 649 ; WX 602 ; N uni0289 ; G 557
U 650 ; WX 602 ; N uni028A ; G 558
U 651 ; WX 602 ; N uni028B ; G 559
U 652 ; WX 602 ; N uni028C ; G 560
U 653 ; WX 602 ; N uni028D ; G 561
U 654 ; WX 602 ; N uni028E ; G 562
U 655 ; WX 602 ; N uni028F ; G 563
U 656 ; WX 602 ; N uni0290 ; G 564
U 657 ; WX 602 ; N uni0291 ; G 565
U 658 ; WX 602 ; N uni0292 ; G 566
U 659 ; WX 602 ; N uni0293 ; G 567
U 660 ; WX 602 ; N uni0294 ; G 568
U 661 ; WX 602 ; N uni0295 ; G 569
U 662 ; WX 602 ; N uni0296 ; G 570
U 663 ; WX 602 ; N uni0297 ; G 571
U 664 ; WX 602 ; N uni0298 ; G 572
U 665 ; WX 602 ; N uni0299 ; G 573
U 666 ; WX 602 ; N uni029A ; G 574
U 667 ; WX 602 ; N uni029B ; G 575
U 668 ; WX 602 ; N uni029C ; G 576
U 669 ; WX 602 ; N uni029D ; G 577
U 670 ; WX 602 ; N uni029E ; G 578
U 671 ; WX 602 ; N uni029F ; G 579
U 672 ; WX 602 ; N uni02A0 ; G 580
U 673 ; WX 602 ; N uni02A1 ; G 581
U 674 ; WX 602 ; N uni02A2 ; G 582
U 675 ; WX 602 ; N uni02A3 ; G 583
U 676 ; WX 602 ; N uni02A4 ; G 584
U 677 ; WX 602 ; N uni02A5 ; G 585
U 678 ; WX 602 ; N uni02A6 ; G 586
U 679 ; WX 602 ; N uni02A7 ; G 587
U 680 ; WX 602 ; N uni02A8 ; G 588
U 681 ; WX 602 ; N uni02A9 ; G 589
U 682 ; WX 602 ; N uni02AA ; G 590
U 683 ; WX 602 ; N uni02AB ; G 591
U 684 ; WX 602 ; N uni02AC ; G 592
U 685 ; WX 602 ; N uni02AD ; G 593
U 686 ; WX 602 ; N uni02AE ; G 594
U 687 ; WX 602 ; N uni02AF ; G 595
U 688 ; WX 602 ; N uni02B0 ; G 596
U 689 ; WX 602 ; N uni02B1 ; G 597
U 690 ; WX 602 ; N uni02B2 ; G 598
U 691 ; WX 602 ; N uni02B3 ; G 599
U 692 ; WX 602 ; N uni02B4 ; G 600
U 693 ; WX 602 ; N uni02B5 ; G 601
U 694 ; WX 602 ; N uni02B6 ; G 602
U 695 ; WX 602 ; N uni02B7 ; G 603
U 696 ; WX 602 ; N uni02B8 ; G 604
U 697 ; WX 602 ; N uni02B9 ; G 605
U 699 ; WX 602 ; N uni02BB ; G 606
U 700 ; WX 602 ; N uni02BC ; G 607
U 701 ; WX 602 ; N uni02BD ; G 608
U 702 ; WX 602 ; N uni02BE ; G 609
U 703 ; WX 602 ; N uni02BF ; G 610
U 704 ; WX 602 ; N uni02C0 ; G 611
U 705 ; WX 602 ; N uni02C1 ; G 612
U 710 ; WX 602 ; N circumflex ; G 613
U 711 ; WX 602 ; N caron ; G 614
U 712 ; WX 602 ; N uni02C8 ; G 615
U 713 ; WX 602 ; N uni02C9 ; G 616
U 716 ; WX 602 ; N uni02CC ; G 617
U 717 ; WX 602 ; N uni02CD ; G 618
U 718 ; WX 602 ; N uni02CE ; G 619
U 719 ; WX 602 ; N uni02CF ; G 620
U 720 ; WX 602 ; N uni02D0 ; G 621
U 721 ; WX 602 ; N uni02D1 ; G 622
U 722 ; WX 602 ; N uni02D2 ; G 623
U 723 ; WX 602 ; N uni02D3 ; G 624
U 726 ; WX 602 ; N uni02D6 ; G 625
U 727 ; WX 602 ; N uni02D7 ; G 626
U 728 ; WX 602 ; N breve ; G 627
U 729 ; WX 602 ; N dotaccent ; G 628
U 730 ; WX 602 ; N ring ; G 629
U 731 ; WX 602 ; N ogonek ; G 630
U 732 ; WX 602 ; N tilde ; G 631
U 733 ; WX 602 ; N hungarumlaut ; G 632
U 734 ; WX 602 ; N uni02DE ; G 633
U 736 ; WX 602 ; N uni02E0 ; G 634
U 737 ; WX 602 ; N uni02E1 ; G 635
U 738 ; WX 602 ; N uni02E2 ; G 636
U 739 ; WX 602 ; N uni02E3 ; G 637
U 740 ; WX 602 ; N uni02E4 ; G 638
U 741 ; WX 602 ; N uni02E5 ; G 639
U 742 ; WX 602 ; N uni02E6 ; G 640
U 743 ; WX 602 ; N uni02E7 ; G 641
U 744 ; WX 602 ; N uni02E8 ; G 642
U 745 ; WX 602 ; N uni02E9 ; G 643
U 750 ; WX 602 ; N uni02EE ; G 644
U 755 ; WX 602 ; N uni02F3 ; G 645
U 768 ; WX 602 ; N gravecomb ; G 646
U 769 ; WX 602 ; N acutecomb ; G 647
U 770 ; WX 602 ; N uni0302 ; G 648
U 771 ; WX 602 ; N tildecomb ; G 649
U 772 ; WX 602 ; N uni0304 ; G 650
U 773 ; WX 602 ; N uni0305 ; G 651
U 774 ; WX 602 ; N uni0306 ; G 652
U 775 ; WX 602 ; N uni0307 ; G 653
U 776 ; WX 602 ; N uni0308 ; G 654
U 777 ; WX 602 ; N hookabovecomb ; G 655
U 778 ; WX 602 ; N uni030A ; G 656
U 779 ; WX 602 ; N uni030B ; G 657
U 780 ; WX 602 ; N uni030C ; G 658
U 781 ; WX 602 ; N uni030D ; G 659
U 782 ; WX 602 ; N uni030E ; G 660
U 783 ; WX 602 ; N uni030F ; G 661
U 784 ; WX 602 ; N uni0310 ; G 662
U 785 ; WX 602 ; N uni0311 ; G 663
U 786 ; WX 602 ; N uni0312 ; G 664
U 787 ; WX 602 ; N uni0313 ; G 665
U 788 ; WX 602 ; N uni0314 ; G 666
U 789 ; WX 602 ; N uni0315 ; G 667
U 790 ; WX 602 ; N uni0316 ; G 668
U 791 ; WX 602 ; N uni0317 ; G 669
U 792 ; WX 602 ; N uni0318 ; G 670
U 793 ; WX 602 ; N uni0319 ; G 671
U 794 ; WX 602 ; N uni031A ; G 672
U 795 ; WX 602 ; N uni031B ; G 673
U 796 ; WX 602 ; N uni031C ; G 674
U 797 ; WX 602 ; N uni031D ; G 675
U 798 ; WX 602 ; N uni031E ; G 676
U 799 ; WX 602 ; N uni031F ; G 677
U 800 ; WX 602 ; N uni0320 ; G 678
U 801 ; WX 602 ; N uni0321 ; G 679
U 802 ; WX 602 ; N uni0322 ; G 680
U 803 ; WX 602 ; N dotbelowcomb ; G 681
U 804 ; WX 602 ; N uni0324 ; G 682
U 805 ; WX 602 ; N uni0325 ; G 683
U 806 ; WX 602 ; N uni0326 ; G 684
U 807 ; WX 602 ; N uni0327 ; G 685
U 808 ; WX 602 ; N uni0328 ; G 686
U 809 ; WX 602 ; N uni0329 ; G 687
U 810 ; WX 602 ; N uni032A ; G 688
U 811 ; WX 602 ; N uni032B ; G 689
U 812 ; WX 602 ; N uni032C ; G 690
U 813 ; WX 602 ; N uni032D ; G 691
U 814 ; WX 602 ; N uni032E ; G 692
U 815 ; WX 602 ; N uni032F ; G 693
U 816 ; WX 602 ; N uni0330 ; G 694
U 817 ; WX 602 ; N uni0331 ; G 695
U 818 ; WX 602 ; N uni0332 ; G 696
U 819 ; WX 602 ; N uni0333 ; G 697
U 820 ; WX 602 ; N uni0334 ; G 698
U 821 ; WX 602 ; N uni0335 ; G 699
U 822 ; WX 602 ; N uni0336 ; G 700
U 823 ; WX 602 ; N uni0337 ; G 701
U 824 ; WX 602 ; N uni0338 ; G 702
U 825 ; WX 602 ; N uni0339 ; G 703
U 826 ; WX 602 ; N uni033A ; G 704
U 827 ; WX 602 ; N uni033B ; G 705
U 828 ; WX 602 ; N uni033C ; G 706
U 829 ; WX 602 ; N uni033D ; G 707
U 830 ; WX 602 ; N uni033E ; G 708
U 831 ; WX 602 ; N uni033F ; G 709
U 835 ; WX 602 ; N uni0343 ; G 710
U 856 ; WX 602 ; N uni0358 ; G 711
U 865 ; WX 602 ; N uni0361 ; G 712
U 884 ; WX 602 ; N uni0374 ; G 713
U 885 ; WX 602 ; N uni0375 ; G 714
U 886 ; WX 602 ; N uni0376 ; G 715
U 887 ; WX 602 ; N uni0377 ; G 716
U 890 ; WX 602 ; N uni037A ; G 717
U 891 ; WX 602 ; N uni037B ; G 718
U 892 ; WX 602 ; N uni037C ; G 719
U 893 ; WX 602 ; N uni037D ; G 720
U 894 ; WX 602 ; N uni037E ; G 721
U 895 ; WX 602 ; N uni037F ; G 722
U 900 ; WX 602 ; N tonos ; G 723
U 901 ; WX 602 ; N dieresistonos ; G 724
U 902 ; WX 602 ; N Alphatonos ; G 725
U 903 ; WX 602 ; N anoteleia ; G 726
U 904 ; WX 602 ; N Epsilontonos ; G 727
U 905 ; WX 602 ; N Etatonos ; G 728
U 906 ; WX 602 ; N Iotatonos ; G 729
U 908 ; WX 602 ; N Omicrontonos ; G 730
U 910 ; WX 602 ; N Upsilontonos ; G 731
U 911 ; WX 602 ; N Omegatonos ; G 732
U 912 ; WX 602 ; N iotadieresistonos ; G 733
U 913 ; WX 602 ; N Alpha ; G 734
U 914 ; WX 602 ; N Beta ; G 735
U 915 ; WX 602 ; N Gamma ; G 736
U 916 ; WX 602 ; N uni0394 ; G 737
U 917 ; WX 602 ; N Epsilon ; G 738
U 918 ; WX 602 ; N Zeta ; G 739
U 919 ; WX 602 ; N Eta ; G 740
U 920 ; WX 602 ; N Theta ; G 741
U 921 ; WX 602 ; N Iota ; G 742
U 922 ; WX 602 ; N Kappa ; G 743
U 923 ; WX 602 ; N Lambda ; G 744
U 924 ; WX 602 ; N Mu ; G 745
U 925 ; WX 602 ; N Nu ; G 746
U 926 ; WX 602 ; N Xi ; G 747
U 927 ; WX 602 ; N Omicron ; G 748
U 928 ; WX 602 ; N Pi ; G 749
U 929 ; WX 602 ; N Rho ; G 750
U 931 ; WX 602 ; N Sigma ; G 751
U 932 ; WX 602 ; N Tau ; G 752
U 933 ; WX 602 ; N Upsilon ; G 753
U 934 ; WX 602 ; N Phi ; G 754
U 935 ; WX 602 ; N Chi ; G 755
U 936 ; WX 602 ; N Psi ; G 756
U 937 ; WX 602 ; N Omega ; G 757
U 938 ; WX 602 ; N Iotadieresis ; G 758
U 939 ; WX 602 ; N Upsilondieresis ; G 759
U 940 ; WX 602 ; N alphatonos ; G 760
U 941 ; WX 602 ; N epsilontonos ; G 761
U 942 ; WX 602 ; N etatonos ; G 762
U 943 ; WX 602 ; N iotatonos ; G 763
U 944 ; WX 602 ; N upsilondieresistonos ; G 764
U 945 ; WX 602 ; N alpha ; G 765
U 946 ; WX 602 ; N beta ; G 766
U 947 ; WX 602 ; N gamma ; G 767
U 948 ; WX 602 ; N delta ; G 768
U 949 ; WX 602 ; N epsilon ; G 769
U 950 ; WX 602 ; N zeta ; G 770
U 951 ; WX 602 ; N eta ; G 771
U 952 ; WX 602 ; N theta ; G 772
U 953 ; WX 602 ; N iota ; G 773
U 954 ; WX 602 ; N kappa ; G 774
U 955 ; WX 602 ; N lambda ; G 775
U 956 ; WX 602 ; N uni03BC ; G 776
U 957 ; WX 602 ; N nu ; G 777
U 958 ; WX 602 ; N xi ; G 778
U 959 ; WX 602 ; N omicron ; G 779
U 960 ; WX 602 ; N pi ; G 780
U 961 ; WX 602 ; N rho ; G 781
U 962 ; WX 602 ; N sigma1 ; G 782
U 963 ; WX 602 ; N sigma ; G 783
U 964 ; WX 602 ; N tau ; G 784
U 965 ; WX 602 ; N upsilon ; G 785
U 966 ; WX 602 ; N phi ; G 786
U 967 ; WX 602 ; N chi ; G 787
U 968 ; WX 602 ; N psi ; G 788
U 969 ; WX 602 ; N omega ; G 789
U 970 ; WX 602 ; N iotadieresis ; G 790
U 971 ; WX 602 ; N upsilondieresis ; G 791
U 972 ; WX 602 ; N omicrontonos ; G 792
U 973 ; WX 602 ; N upsilontonos ; G 793
U 974 ; WX 602 ; N omegatonos ; G 794
U 976 ; WX 602 ; N uni03D0 ; G 795
U 977 ; WX 602 ; N theta1 ; G 796
U 978 ; WX 602 ; N Upsilon1 ; G 797
U 979 ; WX 602 ; N uni03D3 ; G 798
U 980 ; WX 602 ; N uni03D4 ; G 799
U 981 ; WX 602 ; N phi1 ; G 800
U 982 ; WX 602 ; N omega1 ; G 801
U 983 ; WX 602 ; N uni03D7 ; G 802
U 984 ; WX 602 ; N uni03D8 ; G 803
U 985 ; WX 602 ; N uni03D9 ; G 804
U 986 ; WX 602 ; N uni03DA ; G 805
U 987 ; WX 602 ; N uni03DB ; G 806
U 988 ; WX 602 ; N uni03DC ; G 807
U 989 ; WX 602 ; N uni03DD ; G 808
U 990 ; WX 602 ; N uni03DE ; G 809
U 991 ; WX 602 ; N uni03DF ; G 810
U 992 ; WX 602 ; N uni03E0 ; G 811
U 993 ; WX 602 ; N uni03E1 ; G 812
U 1008 ; WX 602 ; N uni03F0 ; G 813
U 1009 ; WX 602 ; N uni03F1 ; G 814
U 1010 ; WX 602 ; N uni03F2 ; G 815
U 1011 ; WX 602 ; N uni03F3 ; G 816
U 1012 ; WX 602 ; N uni03F4 ; G 817
U 1013 ; WX 602 ; N uni03F5 ; G 818
U 1014 ; WX 602 ; N uni03F6 ; G 819
U 1015 ; WX 602 ; N uni03F7 ; G 820
U 1016 ; WX 602 ; N uni03F8 ; G 821
U 1017 ; WX 602 ; N uni03F9 ; G 822
U 1018 ; WX 602 ; N uni03FA ; G 823
U 1019 ; WX 602 ; N uni03FB ; G 824
U 1020 ; WX 602 ; N uni03FC ; G 825
U 1021 ; WX 602 ; N uni03FD ; G 826
U 1022 ; WX 602 ; N uni03FE ; G 827
U 1023 ; WX 602 ; N uni03FF ; G 828
U 1024 ; WX 602 ; N uni0400 ; G 829
U 1025 ; WX 602 ; N uni0401 ; G 830
U 1026 ; WX 602 ; N uni0402 ; G 831
U 1027 ; WX 602 ; N uni0403 ; G 832
U 1028 ; WX 602 ; N uni0404 ; G 833
U 1029 ; WX 602 ; N uni0405 ; G 834
U 1030 ; WX 602 ; N uni0406 ; G 835
U 1031 ; WX 602 ; N uni0407 ; G 836
U 1032 ; WX 602 ; N uni0408 ; G 837
U 1033 ; WX 602 ; N uni0409 ; G 838
U 1034 ; WX 602 ; N uni040A ; G 839
U 1035 ; WX 602 ; N uni040B ; G 840
U 1036 ; WX 602 ; N uni040C ; G 841
U 1037 ; WX 602 ; N uni040D ; G 842
U 1038 ; WX 602 ; N uni040E ; G 843
U 1039 ; WX 602 ; N uni040F ; G 844
U 1040 ; WX 602 ; N uni0410 ; G 845
U 1041 ; WX 602 ; N uni0411 ; G 846
U 1042 ; WX 602 ; N uni0412 ; G 847
U 1043 ; WX 602 ; N uni0413 ; G 848
U 1044 ; WX 602 ; N uni0414 ; G 849
U 1045 ; WX 602 ; N uni0415 ; G 850
U 1046 ; WX 602 ; N uni0416 ; G 851
U 1047 ; WX 602 ; N uni0417 ; G 852
U 1048 ; WX 602 ; N uni0418 ; G 853
U 1049 ; WX 602 ; N uni0419 ; G 854
U 1050 ; WX 602 ; N uni041A ; G 855
U 1051 ; WX 602 ; N uni041B ; G 856
U 1052 ; WX 602 ; N uni041C ; G 857
U 1053 ; WX 602 ; N uni041D ; G 858
U 1054 ; WX 602 ; N uni041E ; G 859
U 1055 ; WX 602 ; N uni041F ; G 860
U 1056 ; WX 602 ; N uni0420 ; G 861
U 1057 ; WX 602 ; N uni0421 ; G 862
U 1058 ; WX 602 ; N uni0422 ; G 863
U 1059 ; WX 602 ; N uni0423 ; G 864
U 1060 ; WX 602 ; N uni0424 ; G 865
U 1061 ; WX 602 ; N uni0425 ; G 866
U 1062 ; WX 602 ; N uni0426 ; G 867
U 1063 ; WX 602 ; N uni0427 ; G 868
U 1064 ; WX 602 ; N uni0428 ; G 869
U 1065 ; WX 602 ; N uni0429 ; G 870
U 1066 ; WX 602 ; N uni042A ; G 871
U 1067 ; WX 602 ; N uni042B ; G 872
U 1068 ; WX 602 ; N uni042C ; G 873
U 1069 ; WX 602 ; N uni042D ; G 874
U 1070 ; WX 602 ; N uni042E ; G 875
U 1071 ; WX 602 ; N uni042F ; G 876
U 1072 ; WX 602 ; N uni0430 ; G 877
U 1073 ; WX 602 ; N uni0431 ; G 878
U 1074 ; WX 602 ; N uni0432 ; G 879
U 1075 ; WX 602 ; N uni0433 ; G 880
U 1076 ; WX 602 ; N uni0434 ; G 881
U 1077 ; WX 602 ; N uni0435 ; G 882
U 1078 ; WX 602 ; N uni0436 ; G 883
U 1079 ; WX 602 ; N uni0437 ; G 884
U 1080 ; WX 602 ; N uni0438 ; G 885
U 1081 ; WX 602 ; N uni0439 ; G 886
U 1082 ; WX 602 ; N uni043A ; G 887
U 1083 ; WX 602 ; N uni043B ; G 888
U 1084 ; WX 602 ; N uni043C ; G 889
U 1085 ; WX 602 ; N uni043D ; G 890
U 1086 ; WX 602 ; N uni043E ; G 891
U 1087 ; WX 602 ; N uni043F ; G 892
U 1088 ; WX 602 ; N uni0440 ; G 893
U 1089 ; WX 602 ; N uni0441 ; G 894
U 1090 ; WX 602 ; N uni0442 ; G 895
U 1091 ; WX 602 ; N uni0443 ; G 896
U 1092 ; WX 602 ; N uni0444 ; G 897
U 1093 ; WX 602 ; N uni0445 ; G 898
U 1094 ; WX 602 ; N uni0446 ; G 899
U 1095 ; WX 602 ; N uni0447 ; G 900
U 1096 ; WX 602 ; N uni0448 ; G 901
U 1097 ; WX 602 ; N uni0449 ; G 902
U 1098 ; WX 602 ; N uni044A ; G 903
U 1099 ; WX 602 ; N uni044B ; G 904
U 1100 ; WX 602 ; N uni044C ; G 905
U 1101 ; WX 602 ; N uni044D ; G 906
U 1102 ; WX 602 ; N uni044E ; G 907
U 1103 ; WX 602 ; N uni044F ; G 908
U 1104 ; WX 602 ; N uni0450 ; G 909
U 1105 ; WX 602 ; N uni0451 ; G 910
U 1106 ; WX 602 ; N uni0452 ; G 911
U 1107 ; WX 602 ; N uni0453 ; G 912
U 1108 ; WX 602 ; N uni0454 ; G 913
U 1109 ; WX 602 ; N uni0455 ; G 914
U 1110 ; WX 602 ; N uni0456 ; G 915
U 1111 ; WX 602 ; N uni0457 ; G 916
U 1112 ; WX 602 ; N uni0458 ; G 917
U 1113 ; WX 602 ; N uni0459 ; G 918
U 1114 ; WX 602 ; N uni045A ; G 919
U 1115 ; WX 602 ; N uni045B ; G 920
U 1116 ; WX 602 ; N uni045C ; G 921
U 1117 ; WX 602 ; N uni045D ; G 922
U 1118 ; WX 602 ; N uni045E ; G 923
U 1119 ; WX 602 ; N uni045F ; G 924
U 1122 ; WX 602 ; N uni0462 ; G 925
U 1123 ; WX 602 ; N uni0463 ; G 926
U 1138 ; WX 602 ; N uni0472 ; G 927
U 1139 ; WX 602 ; N uni0473 ; G 928
U 1168 ; WX 602 ; N uni0490 ; G 929
U 1169 ; WX 602 ; N uni0491 ; G 930
U 1170 ; WX 602 ; N uni0492 ; G 931
U 1171 ; WX 602 ; N uni0493 ; G 932
U 1172 ; WX 602 ; N uni0494 ; G 933
U 1173 ; WX 602 ; N uni0495 ; G 934
U 1174 ; WX 602 ; N uni0496 ; G 935
U 1175 ; WX 602 ; N uni0497 ; G 936
U 1176 ; WX 602 ; N uni0498 ; G 937
U 1177 ; WX 602 ; N uni0499 ; G 938
U 1178 ; WX 602 ; N uni049A ; G 939
U 1179 ; WX 602 ; N uni049B ; G 940
U 1186 ; WX 602 ; N uni04A2 ; G 941
U 1187 ; WX 602 ; N uni04A3 ; G 942
U 1188 ; WX 602 ; N uni04A4 ; G 943
U 1189 ; WX 602 ; N uni04A5 ; G 944
U 1194 ; WX 602 ; N uni04AA ; G 945
U 1195 ; WX 602 ; N uni04AB ; G 946
U 1196 ; WX 602 ; N uni04AC ; G 947
U 1197 ; WX 602 ; N uni04AD ; G 948
U 1198 ; WX 602 ; N uni04AE ; G 949
U 1199 ; WX 602 ; N uni04AF ; G 950
U 1200 ; WX 602 ; N uni04B0 ; G 951
U 1201 ; WX 602 ; N uni04B1 ; G 952
U 1202 ; WX 602 ; N uni04B2 ; G 953
U 1203 ; WX 602 ; N uni04B3 ; G 954
U 1210 ; WX 602 ; N uni04BA ; G 955
U 1211 ; WX 602 ; N uni04BB ; G 956
U 1216 ; WX 602 ; N uni04C0 ; G 957
U 1217 ; WX 602 ; N uni04C1 ; G 958
U 1218 ; WX 602 ; N uni04C2 ; G 959
U 1219 ; WX 602 ; N uni04C3 ; G 960
U 1220 ; WX 602 ; N uni04C4 ; G 961
U 1223 ; WX 602 ; N uni04C7 ; G 962
U 1224 ; WX 602 ; N uni04C8 ; G 963
U 1227 ; WX 602 ; N uni04CB ; G 964
U 1228 ; WX 602 ; N uni04CC ; G 965
U 1231 ; WX 602 ; N uni04CF ; G 966
U 1232 ; WX 602 ; N uni04D0 ; G 967
U 1233 ; WX 602 ; N uni04D1 ; G 968
U 1234 ; WX 602 ; N uni04D2 ; G 969
U 1235 ; WX 602 ; N uni04D3 ; G 970
U 1236 ; WX 602 ; N uni04D4 ; G 971
U 1237 ; WX 602 ; N uni04D5 ; G 972
U 1238 ; WX 602 ; N uni04D6 ; G 973
U 1239 ; WX 602 ; N uni04D7 ; G 974
U 1240 ; WX 602 ; N uni04D8 ; G 975
U 1241 ; WX 602 ; N uni04D9 ; G 976
U 1242 ; WX 602 ; N uni04DA ; G 977
U 1243 ; WX 602 ; N uni04DB ; G 978
U 1244 ; WX 602 ; N uni04DC ; G 979
U 1245 ; WX 602 ; N uni04DD ; G 980
U 1246 ; WX 602 ; N uni04DE ; G 981
U 1247 ; WX 602 ; N uni04DF ; G 982
U 1248 ; WX 602 ; N uni04E0 ; G 983
U 1249 ; WX 602 ; N uni04E1 ; G 984
U 1250 ; WX 602 ; N uni04E2 ; G 985
U 1251 ; WX 602 ; N uni04E3 ; G 986
U 1252 ; WX 602 ; N uni04E4 ; G 987
U 1253 ; WX 602 ; N uni04E5 ; G 988
U 1254 ; WX 602 ; N uni04E6 ; G 989
U 1255 ; WX 602 ; N uni04E7 ; G 990
U 1256 ; WX 602 ; N uni04E8 ; G 991
U 1257 ; WX 602 ; N uni04E9 ; G 992
U 1258 ; WX 602 ; N uni04EA ; G 993
U 1259 ; WX 602 ; N uni04EB ; G 994
U 1260 ; WX 602 ; N uni04EC ; G 995
U 1261 ; WX 602 ; N uni04ED ; G 996
U 1262 ; WX 602 ; N uni04EE ; G 997
U 1263 ; WX 602 ; N uni04EF ; G 998
U 1264 ; WX 602 ; N uni04F0 ; G 999
U 1265 ; WX 602 ; N uni04F1 ; G 1000
U 1266 ; WX 602 ; N uni04F2 ; G 1001
U 1267 ; WX 602 ; N uni04F3 ; G 1002
U 1268 ; WX 602 ; N uni04F4 ; G 1003
U 1269 ; WX 602 ; N uni04F5 ; G 1004
U 1270 ; WX 602 ; N uni04F6 ; G 1005
U 1271 ; WX 602 ; N uni04F7 ; G 1006
U 1272 ; WX 602 ; N uni04F8 ; G 1007
U 1273 ; WX 602 ; N uni04F9 ; G 1008
U 1296 ; WX 602 ; N uni0510 ; G 1009
U 1297 ; WX 602 ; N uni0511 ; G 1010
U 1306 ; WX 602 ; N uni051A ; G 1011
U 1307 ; WX 602 ; N uni051B ; G 1012
U 1308 ; WX 602 ; N uni051C ; G 1013
U 1309 ; WX 602 ; N uni051D ; G 1014
U 1329 ; WX 602 ; N uni0531 ; G 1015
U 1330 ; WX 602 ; N uni0532 ; G 1016
U 1331 ; WX 602 ; N uni0533 ; G 1017
U 1332 ; WX 602 ; N uni0534 ; G 1018
U 1333 ; WX 602 ; N uni0535 ; G 1019
U 1334 ; WX 602 ; N uni0536 ; G 1020
U 1335 ; WX 602 ; N uni0537 ; G 1021
U 1336 ; WX 602 ; N uni0538 ; G 1022
U 1337 ; WX 602 ; N uni0539 ; G 1023
U 1338 ; WX 602 ; N uni053A ; G 1024
U 1339 ; WX 602 ; N uni053B ; G 1025
U 1340 ; WX 602 ; N uni053C ; G 1026
U 1341 ; WX 602 ; N uni053D ; G 1027
U 1342 ; WX 602 ; N uni053E ; G 1028
U 1343 ; WX 602 ; N uni053F ; G 1029
U 1344 ; WX 602 ; N uni0540 ; G 1030
U 1345 ; WX 602 ; N uni0541 ; G 1031
U 1346 ; WX 602 ; N uni0542 ; G 1032
U 1347 ; WX 602 ; N uni0543 ; G 1033
U 1348 ; WX 602 ; N uni0544 ; G 1034
U 1349 ; WX 602 ; N uni0545 ; G 1035
U 1350 ; WX 602 ; N uni0546 ; G 1036
U 1351 ; WX 602 ; N uni0547 ; G 1037
U 1352 ; WX 602 ; N uni0548 ; G 1038
U 1353 ; WX 602 ; N uni0549 ; G 1039
U 1354 ; WX 602 ; N uni054A ; G 1040
U 1355 ; WX 602 ; N uni054B ; G 1041
U 1356 ; WX 602 ; N uni054C ; G 1042
U 1357 ; WX 602 ; N uni054D ; G 1043
U 1358 ; WX 602 ; N uni054E ; G 1044
U 1359 ; WX 602 ; N uni054F ; G 1045
U 1360 ; WX 602 ; N uni0550 ; G 1046
U 1361 ; WX 602 ; N uni0551 ; G 1047
U 1362 ; WX 602 ; N uni0552 ; G 1048
U 1363 ; WX 602 ; N uni0553 ; G 1049
U 1364 ; WX 602 ; N uni0554 ; G 1050
U 1365 ; WX 602 ; N uni0555 ; G 1051
U 1366 ; WX 602 ; N uni0556 ; G 1052
U 1369 ; WX 602 ; N uni0559 ; G 1053
U 1370 ; WX 602 ; N uni055A ; G 1054
U 1371 ; WX 602 ; N uni055B ; G 1055
U 1372 ; WX 602 ; N uni055C ; G 1056
U 1373 ; WX 602 ; N uni055D ; G 1057
U 1374 ; WX 602 ; N uni055E ; G 1058
U 1375 ; WX 602 ; N uni055F ; G 1059
U 1377 ; WX 602 ; N uni0561 ; G 1060
U 1378 ; WX 602 ; N uni0562 ; G 1061
U 1379 ; WX 602 ; N uni0563 ; G 1062
U 1380 ; WX 602 ; N uni0564 ; G 1063
U 1381 ; WX 602 ; N uni0565 ; G 1064
U 1382 ; WX 602 ; N uni0566 ; G 1065
U 1383 ; WX 602 ; N uni0567 ; G 1066
U 1384 ; WX 602 ; N uni0568 ; G 1067
U 1385 ; WX 602 ; N uni0569 ; G 1068
U 1386 ; WX 602 ; N uni056A ; G 1069
U 1387 ; WX 602 ; N uni056B ; G 1070
U 1388 ; WX 602 ; N uni056C ; G 1071
U 1389 ; WX 602 ; N uni056D ; G 1072
U 1390 ; WX 602 ; N uni056E ; G 1073
U 1391 ; WX 602 ; N uni056F ; G 1074
U 1392 ; WX 602 ; N uni0570 ; G 1075
U 1393 ; WX 602 ; N uni0571 ; G 1076
U 1394 ; WX 602 ; N uni0572 ; G 1077
U 1395 ; WX 602 ; N uni0573 ; G 1078
U 1396 ; WX 602 ; N uni0574 ; G 1079
U 1397 ; WX 602 ; N uni0575 ; G 1080
U 1398 ; WX 602 ; N uni0576 ; G 1081
U 1399 ; WX 602 ; N uni0577 ; G 1082
U 1400 ; WX 602 ; N uni0578 ; G 1083
U 1401 ; WX 602 ; N uni0579 ; G 1084
U 1402 ; WX 602 ; N uni057A ; G 1085
U 1403 ; WX 602 ; N uni057B ; G 1086
U 1404 ; WX 602 ; N uni057C ; G 1087
U 1405 ; WX 602 ; N uni057D ; G 1088
U 1406 ; WX 602 ; N uni057E ; G 1089
U 1407 ; WX 602 ; N uni057F ; G 1090
U 1408 ; WX 602 ; N uni0580 ; G 1091
U 1409 ; WX 602 ; N uni0581 ; G 1092
U 1410 ; WX 602 ; N uni0582 ; G 1093
U 1411 ; WX 602 ; N uni0583 ; G 1094
U 1412 ; WX 602 ; N uni0584 ; G 1095
U 1413 ; WX 602 ; N uni0585 ; G 1096
U 1414 ; WX 602 ; N uni0586 ; G 1097
U 1415 ; WX 602 ; N uni0587 ; G 1098
U 1417 ; WX 602 ; N uni0589 ; G 1099
U 1418 ; WX 602 ; N uni058A ; G 1100
U 3647 ; WX 602 ; N uni0E3F ; G 1101
U 3713 ; WX 602 ; N uni0E81 ; G 1102
U 3714 ; WX 602 ; N uni0E82 ; G 1103
U 3716 ; WX 602 ; N uni0E84 ; G 1104
U 3719 ; WX 602 ; N uni0E87 ; G 1105
U 3720 ; WX 602 ; N uni0E88 ; G 1106
U 3722 ; WX 602 ; N uni0E8A ; G 1107
U 3725 ; WX 602 ; N uni0E8D ; G 1108
U 3732 ; WX 602 ; N uni0E94 ; G 1109
U 3733 ; WX 602 ; N uni0E95 ; G 1110
U 3734 ; WX 602 ; N uni0E96 ; G 1111
U 3735 ; WX 602 ; N uni0E97 ; G 1112
U 3737 ; WX 602 ; N uni0E99 ; G 1113
U 3738 ; WX 602 ; N uni0E9A ; G 1114
U 3739 ; WX 602 ; N uni0E9B ; G 1115
U 3740 ; WX 602 ; N uni0E9C ; G 1116
U 3741 ; WX 602 ; N uni0E9D ; G 1117
U 3742 ; WX 602 ; N uni0E9E ; G 1118
U 3743 ; WX 602 ; N uni0E9F ; G 1119
U 3745 ; WX 602 ; N uni0EA1 ; G 1120
U 3746 ; WX 602 ; N uni0EA2 ; G 1121
U 3747 ; WX 602 ; N uni0EA3 ; G 1122
U 3749 ; WX 602 ; N uni0EA5 ; G 1123
U 3751 ; WX 602 ; N uni0EA7 ; G 1124
U 3754 ; WX 602 ; N uni0EAA ; G 1125
U 3755 ; WX 602 ; N uni0EAB ; G 1126
U 3757 ; WX 602 ; N uni0EAD ; G 1127
U 3758 ; WX 602 ; N uni0EAE ; G 1128
U 3759 ; WX 602 ; N uni0EAF ; G 1129
U 3760 ; WX 602 ; N uni0EB0 ; G 1130
U 3761 ; WX 602 ; N uni0EB1 ; G 1131
U 3762 ; WX 602 ; N uni0EB2 ; G 1132
U 3763 ; WX 602 ; N uni0EB3 ; G 1133
U 3764 ; WX 602 ; N uni0EB4 ; G 1134
U 3765 ; WX 602 ; N uni0EB5 ; G 1135
U 3766 ; WX 602 ; N uni0EB6 ; G 1136
U 3767 ; WX 602 ; N uni0EB7 ; G 1137
U 3768 ; WX 602 ; N uni0EB8 ; G 1138
U 3769 ; WX 602 ; N uni0EB9 ; G 1139
U 3771 ; WX 602 ; N uni0EBB ; G 1140
U 3772 ; WX 602 ; N uni0EBC ; G 1141
U 3784 ; WX 602 ; N uni0EC8 ; G 1142
U 3785 ; WX 602 ; N uni0EC9 ; G 1143
U 3786 ; WX 602 ; N uni0ECA ; G 1144
U 3787 ; WX 602 ; N uni0ECB ; G 1145
U 3788 ; WX 602 ; N uni0ECC ; G 1146
U 3789 ; WX 602 ; N uni0ECD ; G 1147
U 4304 ; WX 602 ; N uni10D0 ; G 1148
U 4305 ; WX 602 ; N uni10D1 ; G 1149
U 4306 ; WX 602 ; N uni10D2 ; G 1150
U 4307 ; WX 602 ; N uni10D3 ; G 1151
U 4308 ; WX 602 ; N uni10D4 ; G 1152
U 4309 ; WX 602 ; N uni10D5 ; G 1153
U 4310 ; WX 602 ; N uni10D6 ; G 1154
U 4311 ; WX 602 ; N uni10D7 ; G 1155
U 4312 ; WX 602 ; N uni10D8 ; G 1156
U 4313 ; WX 602 ; N uni10D9 ; G 1157
U 4314 ; WX 602 ; N uni10DA ; G 1158
U 4315 ; WX 602 ; N uni10DB ; G 1159
U 4316 ; WX 602 ; N uni10DC ; G 1160
U 4317 ; WX 602 ; N uni10DD ; G 1161
U 4318 ; WX 602 ; N uni10DE ; G 1162
U 4319 ; WX 602 ; N uni10DF ; G 1163
U 4320 ; WX 602 ; N uni10E0 ; G 1164
U 4321 ; WX 602 ; N uni10E1 ; G 1165
U 4322 ; WX 602 ; N uni10E2 ; G 1166
U 4323 ; WX 602 ; N uni10E3 ; G 1167
U 4324 ; WX 602 ; N uni10E4 ; G 1168
U 4325 ; WX 602 ; N uni10E5 ; G 1169
U 4326 ; WX 602 ; N uni10E6 ; G 1170
U 4327 ; WX 602 ; N uni10E7 ; G 1171
U 4328 ; WX 602 ; N uni10E8 ; G 1172
U 4329 ; WX 602 ; N uni10E9 ; G 1173
U 4330 ; WX 602 ; N uni10EA ; G 1174
U 4331 ; WX 602 ; N uni10EB ; G 1175
U 4332 ; WX 602 ; N uni10EC ; G 1176
U 4333 ; WX 602 ; N uni10ED ; G 1177
U 4334 ; WX 602 ; N uni10EE ; G 1178
U 4335 ; WX 602 ; N uni10EF ; G 1179
U 4336 ; WX 602 ; N uni10F0 ; G 1180
U 4337 ; WX 602 ; N uni10F1 ; G 1181
U 4338 ; WX 602 ; N uni10F2 ; G 1182
U 4339 ; WX 602 ; N uni10F3 ; G 1183
U 4340 ; WX 602 ; N uni10F4 ; G 1184
U 4341 ; WX 602 ; N uni10F5 ; G 1185
U 4342 ; WX 602 ; N uni10F6 ; G 1186
U 4343 ; WX 602 ; N uni10F7 ; G 1187
U 4344 ; WX 602 ; N uni10F8 ; G 1188
U 4345 ; WX 602 ; N uni10F9 ; G 1189
U 4346 ; WX 602 ; N uni10FA ; G 1190
U 4347 ; WX 602 ; N uni10FB ; G 1191
U 4348 ; WX 602 ; N uni10FC ; G 1192
U 7426 ; WX 602 ; N uni1D02 ; G 1193
U 7432 ; WX 602 ; N uni1D08 ; G 1194
U 7433 ; WX 602 ; N uni1D09 ; G 1195
U 7444 ; WX 602 ; N uni1D14 ; G 1196
U 7446 ; WX 602 ; N uni1D16 ; G 1197
U 7447 ; WX 602 ; N uni1D17 ; G 1198
U 7453 ; WX 602 ; N uni1D1D ; G 1199
U 7454 ; WX 602 ; N uni1D1E ; G 1200
U 7455 ; WX 602 ; N uni1D1F ; G 1201
U 7468 ; WX 602 ; N uni1D2C ; G 1202
U 7469 ; WX 602 ; N uni1D2D ; G 1203
U 7470 ; WX 602 ; N uni1D2E ; G 1204
U 7472 ; WX 602 ; N uni1D30 ; G 1205
U 7473 ; WX 602 ; N uni1D31 ; G 1206
U 7474 ; WX 602 ; N uni1D32 ; G 1207
U 7475 ; WX 602 ; N uni1D33 ; G 1208
U 7476 ; WX 602 ; N uni1D34 ; G 1209
U 7477 ; WX 602 ; N uni1D35 ; G 1210
U 7478 ; WX 602 ; N uni1D36 ; G 1211
U 7479 ; WX 602 ; N uni1D37 ; G 1212
U 7480 ; WX 602 ; N uni1D38 ; G 1213
U 7481 ; WX 602 ; N uni1D39 ; G 1214
U 7482 ; WX 602 ; N uni1D3A ; G 1215
U 7483 ; WX 602 ; N uni1D3B ; G 1216
U 7484 ; WX 602 ; N uni1D3C ; G 1217
U 7486 ; WX 602 ; N uni1D3E ; G 1218
U 7487 ; WX 602 ; N uni1D3F ; G 1219
U 7488 ; WX 602 ; N uni1D40 ; G 1220
U 7489 ; WX 602 ; N uni1D41 ; G 1221
U 7490 ; WX 602 ; N uni1D42 ; G 1222
U 7491 ; WX 602 ; N uni1D43 ; G 1223
U 7492 ; WX 602 ; N uni1D44 ; G 1224
U 7493 ; WX 602 ; N uni1D45 ; G 1225
U 7494 ; WX 602 ; N uni1D46 ; G 1226
U 7495 ; WX 602 ; N uni1D47 ; G 1227
U 7496 ; WX 602 ; N uni1D48 ; G 1228
U 7497 ; WX 602 ; N uni1D49 ; G 1229
U 7498 ; WX 602 ; N uni1D4A ; G 1230
U 7499 ; WX 602 ; N uni1D4B ; G 1231
U 7500 ; WX 602 ; N uni1D4C ; G 1232
U 7501 ; WX 602 ; N uni1D4D ; G 1233
U 7502 ; WX 602 ; N uni1D4E ; G 1234
U 7503 ; WX 602 ; N uni1D4F ; G 1235
U 7504 ; WX 602 ; N uni1D50 ; G 1236
U 7505 ; WX 602 ; N uni1D51 ; G 1237
U 7506 ; WX 602 ; N uni1D52 ; G 1238
U 7507 ; WX 602 ; N uni1D53 ; G 1239
U 7508 ; WX 602 ; N uni1D54 ; G 1240
U 7509 ; WX 602 ; N uni1D55 ; G 1241
U 7510 ; WX 602 ; N uni1D56 ; G 1242
U 7511 ; WX 602 ; N uni1D57 ; G 1243
U 7512 ; WX 602 ; N uni1D58 ; G 1244
U 7513 ; WX 602 ; N uni1D59 ; G 1245
U 7514 ; WX 602 ; N uni1D5A ; G 1246
U 7515 ; WX 602 ; N uni1D5B ; G 1247
U 7522 ; WX 602 ; N uni1D62 ; G 1248
U 7523 ; WX 602 ; N uni1D63 ; G 1249
U 7524 ; WX 602 ; N uni1D64 ; G 1250
U 7525 ; WX 602 ; N uni1D65 ; G 1251
U 7543 ; WX 602 ; N uni1D77 ; G 1252
U 7544 ; WX 602 ; N uni1D78 ; G 1253
U 7547 ; WX 602 ; N uni1D7B ; G 1254
U 7557 ; WX 602 ; N uni1D85 ; G 1255
U 7579 ; WX 602 ; N uni1D9B ; G 1256
U 7580 ; WX 602 ; N uni1D9C ; G 1257
U 7581 ; WX 602 ; N uni1D9D ; G 1258
U 7582 ; WX 602 ; N uni1D9E ; G 1259
U 7583 ; WX 602 ; N uni1D9F ; G 1260
U 7584 ; WX 602 ; N uni1DA0 ; G 1261
U 7585 ; WX 602 ; N uni1DA1 ; G 1262
U 7586 ; WX 602 ; N uni1DA2 ; G 1263
U 7587 ; WX 602 ; N uni1DA3 ; G 1264
U 7588 ; WX 602 ; N uni1DA4 ; G 1265
U 7589 ; WX 602 ; N uni1DA5 ; G 1266
U 7590 ; WX 602 ; N uni1DA6 ; G 1267
U 7591 ; WX 602 ; N uni1DA7 ; G 1268
U 7592 ; WX 602 ; N uni1DA8 ; G 1269
U 7593 ; WX 602 ; N uni1DA9 ; G 1270
U 7594 ; WX 602 ; N uni1DAA ; G 1271
U 7595 ; WX 602 ; N uni1DAB ; G 1272
U 7596 ; WX 602 ; N uni1DAC ; G 1273
U 7597 ; WX 602 ; N uni1DAD ; G 1274
U 7598 ; WX 602 ; N uni1DAE ; G 1275
U 7599 ; WX 602 ; N uni1DAF ; G 1276
U 7600 ; WX 602 ; N uni1DB0 ; G 1277
U 7601 ; WX 602 ; N uni1DB1 ; G 1278
U 7602 ; WX 602 ; N uni1DB2 ; G 1279
U 7603 ; WX 602 ; N uni1DB3 ; G 1280
U 7604 ; WX 602 ; N uni1DB4 ; G 1281
U 7605 ; WX 602 ; N uni1DB5 ; G 1282
U 7606 ; WX 602 ; N uni1DB6 ; G 1283
U 7607 ; WX 602 ; N uni1DB7 ; G 1284
U 7609 ; WX 602 ; N uni1DB9 ; G 1285
U 7610 ; WX 602 ; N uni1DBA ; G 1286
U 7611 ; WX 602 ; N uni1DBB ; G 1287
U 7612 ; WX 602 ; N uni1DBC ; G 1288
U 7613 ; WX 602 ; N uni1DBD ; G 1289
U 7614 ; WX 602 ; N uni1DBE ; G 1290
U 7615 ; WX 602 ; N uni1DBF ; G 1291
U 7680 ; WX 602 ; N uni1E00 ; G 1292
U 7681 ; WX 602 ; N uni1E01 ; G 1293
U 7682 ; WX 602 ; N uni1E02 ; G 1294
U 7683 ; WX 602 ; N uni1E03 ; G 1295
U 7684 ; WX 602 ; N uni1E04 ; G 1296
U 7685 ; WX 602 ; N uni1E05 ; G 1297
U 7686 ; WX 602 ; N uni1E06 ; G 1298
U 7687 ; WX 602 ; N uni1E07 ; G 1299
U 7688 ; WX 602 ; N uni1E08 ; G 1300
U 7689 ; WX 602 ; N uni1E09 ; G 1301
U 7690 ; WX 602 ; N uni1E0A ; G 1302
U 7691 ; WX 602 ; N uni1E0B ; G 1303
U 7692 ; WX 602 ; N uni1E0C ; G 1304
U 7693 ; WX 602 ; N uni1E0D ; G 1305
U 7694 ; WX 602 ; N uni1E0E ; G 1306
U 7695 ; WX 602 ; N uni1E0F ; G 1307
U 7696 ; WX 602 ; N uni1E10 ; G 1308
U 7697 ; WX 602 ; N uni1E11 ; G 1309
U 7698 ; WX 602 ; N uni1E12 ; G 1310
U 7699 ; WX 602 ; N uni1E13 ; G 1311
U 7704 ; WX 602 ; N uni1E18 ; G 1312
U 7705 ; WX 602 ; N uni1E19 ; G 1313
U 7706 ; WX 602 ; N uni1E1A ; G 1314
U 7707 ; WX 602 ; N uni1E1B ; G 1315
U 7708 ; WX 602 ; N uni1E1C ; G 1316
U 7709 ; WX 602 ; N uni1E1D ; G 1317
U 7710 ; WX 602 ; N uni1E1E ; G 1318
U 7711 ; WX 602 ; N uni1E1F ; G 1319
U 7712 ; WX 602 ; N uni1E20 ; G 1320
U 7713 ; WX 602 ; N uni1E21 ; G 1321
U 7714 ; WX 602 ; N uni1E22 ; G 1322
U 7715 ; WX 602 ; N uni1E23 ; G 1323
U 7716 ; WX 602 ; N uni1E24 ; G 1324
U 7717 ; WX 602 ; N uni1E25 ; G 1325
U 7718 ; WX 602 ; N uni1E26 ; G 1326
U 7719 ; WX 602 ; N uni1E27 ; G 1327
U 7720 ; WX 602 ; N uni1E28 ; G 1328
U 7721 ; WX 602 ; N uni1E29 ; G 1329
U 7722 ; WX 602 ; N uni1E2A ; G 1330
U 7723 ; WX 602 ; N uni1E2B ; G 1331
U 7724 ; WX 602 ; N uni1E2C ; G 1332
U 7725 ; WX 602 ; N uni1E2D ; G 1333
U 7728 ; WX 602 ; N uni1E30 ; G 1334
U 7729 ; WX 602 ; N uni1E31 ; G 1335
U 7730 ; WX 602 ; N uni1E32 ; G 1336
U 7731 ; WX 602 ; N uni1E33 ; G 1337
U 7732 ; WX 602 ; N uni1E34 ; G 1338
U 7733 ; WX 602 ; N uni1E35 ; G 1339
U 7734 ; WX 602 ; N uni1E36 ; G 1340
U 7735 ; WX 602 ; N uni1E37 ; G 1341
U 7736 ; WX 602 ; N uni1E38 ; G 1342
U 7737 ; WX 602 ; N uni1E39 ; G 1343
U 7738 ; WX 602 ; N uni1E3A ; G 1344
U 7739 ; WX 602 ; N uni1E3B ; G 1345
U 7740 ; WX 602 ; N uni1E3C ; G 1346
U 7741 ; WX 602 ; N uni1E3D ; G 1347
U 7742 ; WX 602 ; N uni1E3E ; G 1348
U 7743 ; WX 602 ; N uni1E3F ; G 1349
U 7744 ; WX 602 ; N uni1E40 ; G 1350
U 7745 ; WX 602 ; N uni1E41 ; G 1351
U 7746 ; WX 602 ; N uni1E42 ; G 1352
U 7747 ; WX 602 ; N uni1E43 ; G 1353
U 7748 ; WX 602 ; N uni1E44 ; G 1354
U 7749 ; WX 602 ; N uni1E45 ; G 1355
U 7750 ; WX 602 ; N uni1E46 ; G 1356
U 7751 ; WX 602 ; N uni1E47 ; G 1357
U 7752 ; WX 602 ; N uni1E48 ; G 1358
U 7753 ; WX 602 ; N uni1E49 ; G 1359
U 7754 ; WX 602 ; N uni1E4A ; G 1360
U 7755 ; WX 602 ; N uni1E4B ; G 1361
U 7756 ; WX 602 ; N uni1E4C ; G 1362
U 7757 ; WX 602 ; N uni1E4D ; G 1363
U 7764 ; WX 602 ; N uni1E54 ; G 1364
U 7765 ; WX 602 ; N uni1E55 ; G 1365
U 7766 ; WX 602 ; N uni1E56 ; G 1366
U 7767 ; WX 602 ; N uni1E57 ; G 1367
U 7768 ; WX 602 ; N uni1E58 ; G 1368
U 7769 ; WX 602 ; N uni1E59 ; G 1369
U 7770 ; WX 602 ; N uni1E5A ; G 1370
U 7771 ; WX 602 ; N uni1E5B ; G 1371
U 7772 ; WX 602 ; N uni1E5C ; G 1372
U 7773 ; WX 602 ; N uni1E5D ; G 1373
U 7774 ; WX 602 ; N uni1E5E ; G 1374
U 7775 ; WX 602 ; N uni1E5F ; G 1375
U 7776 ; WX 602 ; N uni1E60 ; G 1376
U 7777 ; WX 602 ; N uni1E61 ; G 1377
U 7778 ; WX 602 ; N uni1E62 ; G 1378
U 7779 ; WX 602 ; N uni1E63 ; G 1379
U 7784 ; WX 602 ; N uni1E68 ; G 1380
U 7785 ; WX 602 ; N uni1E69 ; G 1381
U 7786 ; WX 602 ; N uni1E6A ; G 1382
U 7787 ; WX 602 ; N uni1E6B ; G 1383
U 7788 ; WX 602 ; N uni1E6C ; G 1384
U 7789 ; WX 602 ; N uni1E6D ; G 1385
U 7790 ; WX 602 ; N uni1E6E ; G 1386
U 7791 ; WX 602 ; N uni1E6F ; G 1387
U 7792 ; WX 602 ; N uni1E70 ; G 1388
U 7793 ; WX 602 ; N uni1E71 ; G 1389
U 7794 ; WX 602 ; N uni1E72 ; G 1390
U 7795 ; WX 602 ; N uni1E73 ; G 1391
U 7796 ; WX 602 ; N uni1E74 ; G 1392
U 7797 ; WX 602 ; N uni1E75 ; G 1393
U 7798 ; WX 602 ; N uni1E76 ; G 1394
U 7799 ; WX 602 ; N uni1E77 ; G 1395
U 7800 ; WX 602 ; N uni1E78 ; G 1396
U 7801 ; WX 602 ; N uni1E79 ; G 1397
U 7804 ; WX 602 ; N uni1E7C ; G 1398
U 7805 ; WX 602 ; N uni1E7D ; G 1399
U 7806 ; WX 602 ; N uni1E7E ; G 1400
U 7807 ; WX 602 ; N uni1E7F ; G 1401
U 7808 ; WX 602 ; N Wgrave ; G 1402
U 7809 ; WX 602 ; N wgrave ; G 1403
U 7810 ; WX 602 ; N Wacute ; G 1404
U 7811 ; WX 602 ; N wacute ; G 1405
U 7812 ; WX 602 ; N Wdieresis ; G 1406
U 7813 ; WX 602 ; N wdieresis ; G 1407
U 7814 ; WX 602 ; N uni1E86 ; G 1408
U 7815 ; WX 602 ; N uni1E87 ; G 1409
U 7816 ; WX 602 ; N uni1E88 ; G 1410
U 7817 ; WX 602 ; N uni1E89 ; G 1411
U 7818 ; WX 602 ; N uni1E8A ; G 1412
U 7819 ; WX 602 ; N uni1E8B ; G 1413
U 7820 ; WX 602 ; N uni1E8C ; G 1414
U 7821 ; WX 602 ; N uni1E8D ; G 1415
U 7822 ; WX 602 ; N uni1E8E ; G 1416
U 7823 ; WX 602 ; N uni1E8F ; G 1417
U 7824 ; WX 602 ; N uni1E90 ; G 1418
U 7825 ; WX 602 ; N uni1E91 ; G 1419
U 7826 ; WX 602 ; N uni1E92 ; G 1420
U 7827 ; WX 602 ; N uni1E93 ; G 1421
U 7828 ; WX 602 ; N uni1E94 ; G 1422
U 7829 ; WX 602 ; N uni1E95 ; G 1423
U 7830 ; WX 602 ; N uni1E96 ; G 1424
U 7831 ; WX 602 ; N uni1E97 ; G 1425
U 7832 ; WX 602 ; N uni1E98 ; G 1426
U 7833 ; WX 602 ; N uni1E99 ; G 1427
U 7835 ; WX 602 ; N uni1E9B ; G 1428
U 7839 ; WX 602 ; N uni1E9F ; G 1429
U 7840 ; WX 602 ; N uni1EA0 ; G 1430
U 7841 ; WX 602 ; N uni1EA1 ; G 1431
U 7852 ; WX 602 ; N uni1EAC ; G 1432
U 7853 ; WX 602 ; N uni1EAD ; G 1433
U 7856 ; WX 602 ; N uni1EB0 ; G 1434
U 7857 ; WX 602 ; N uni1EB1 ; G 1435
U 7862 ; WX 602 ; N uni1EB6 ; G 1436
U 7863 ; WX 602 ; N uni1EB7 ; G 1437
U 7864 ; WX 602 ; N uni1EB8 ; G 1438
U 7865 ; WX 602 ; N uni1EB9 ; G 1439
U 7868 ; WX 602 ; N uni1EBC ; G 1440
U 7869 ; WX 602 ; N uni1EBD ; G 1441
U 7878 ; WX 602 ; N uni1EC6 ; G 1442
U 7879 ; WX 602 ; N uni1EC7 ; G 1443
U 7882 ; WX 602 ; N uni1ECA ; G 1444
U 7883 ; WX 602 ; N uni1ECB ; G 1445
U 7884 ; WX 602 ; N uni1ECC ; G 1446
U 7885 ; WX 602 ; N uni1ECD ; G 1447
U 7896 ; WX 602 ; N uni1ED8 ; G 1448
U 7897 ; WX 602 ; N uni1ED9 ; G 1449
U 7898 ; WX 602 ; N uni1EDA ; G 1450
U 7899 ; WX 602 ; N uni1EDB ; G 1451
U 7900 ; WX 602 ; N uni1EDC ; G 1452
U 7901 ; WX 602 ; N uni1EDD ; G 1453
U 7904 ; WX 602 ; N uni1EE0 ; G 1454
U 7905 ; WX 602 ; N uni1EE1 ; G 1455
U 7906 ; WX 602 ; N uni1EE2 ; G 1456
U 7907 ; WX 602 ; N uni1EE3 ; G 1457
U 7908 ; WX 602 ; N uni1EE4 ; G 1458
U 7909 ; WX 602 ; N uni1EE5 ; G 1459
U 7912 ; WX 602 ; N uni1EE8 ; G 1460
U 7913 ; WX 602 ; N uni1EE9 ; G 1461
U 7914 ; WX 602 ; N uni1EEA ; G 1462
U 7915 ; WX 602 ; N uni1EEB ; G 1463
U 7918 ; WX 602 ; N uni1EEE ; G 1464
U 7919 ; WX 602 ; N uni1EEF ; G 1465
U 7920 ; WX 602 ; N uni1EF0 ; G 1466
U 7921 ; WX 602 ; N uni1EF1 ; G 1467
U 7922 ; WX 602 ; N Ygrave ; G 1468
U 7923 ; WX 602 ; N ygrave ; G 1469
U 7924 ; WX 602 ; N uni1EF4 ; G 1470
U 7925 ; WX 602 ; N uni1EF5 ; G 1471
U 7928 ; WX 602 ; N uni1EF8 ; G 1472
U 7929 ; WX 602 ; N uni1EF9 ; G 1473
U 7936 ; WX 602 ; N uni1F00 ; G 1474
U 7937 ; WX 602 ; N uni1F01 ; G 1475
U 7938 ; WX 602 ; N uni1F02 ; G 1476
U 7939 ; WX 602 ; N uni1F03 ; G 1477
U 7940 ; WX 602 ; N uni1F04 ; G 1478
U 7941 ; WX 602 ; N uni1F05 ; G 1479
U 7942 ; WX 602 ; N uni1F06 ; G 1480
U 7943 ; WX 602 ; N uni1F07 ; G 1481
U 7944 ; WX 602 ; N uni1F08 ; G 1482
U 7945 ; WX 602 ; N uni1F09 ; G 1483
U 7946 ; WX 602 ; N uni1F0A ; G 1484
U 7947 ; WX 602 ; N uni1F0B ; G 1485
U 7948 ; WX 602 ; N uni1F0C ; G 1486
U 7949 ; WX 602 ; N uni1F0D ; G 1487
U 7950 ; WX 602 ; N uni1F0E ; G 1488
U 7951 ; WX 602 ; N uni1F0F ; G 1489
U 7952 ; WX 602 ; N uni1F10 ; G 1490
U 7953 ; WX 602 ; N uni1F11 ; G 1491
U 7954 ; WX 602 ; N uni1F12 ; G 1492
U 7955 ; WX 602 ; N uni1F13 ; G 1493
U 7956 ; WX 602 ; N uni1F14 ; G 1494
U 7957 ; WX 602 ; N uni1F15 ; G 1495
U 7960 ; WX 602 ; N uni1F18 ; G 1496
U 7961 ; WX 602 ; N uni1F19 ; G 1497
U 7962 ; WX 602 ; N uni1F1A ; G 1498
U 7963 ; WX 602 ; N uni1F1B ; G 1499
U 7964 ; WX 602 ; N uni1F1C ; G 1500
U 7965 ; WX 602 ; N uni1F1D ; G 1501
U 7968 ; WX 602 ; N uni1F20 ; G 1502
U 7969 ; WX 602 ; N uni1F21 ; G 1503
U 7970 ; WX 602 ; N uni1F22 ; G 1504
U 7971 ; WX 602 ; N uni1F23 ; G 1505
U 7972 ; WX 602 ; N uni1F24 ; G 1506
U 7973 ; WX 602 ; N uni1F25 ; G 1507
U 7974 ; WX 602 ; N uni1F26 ; G 1508
U 7975 ; WX 602 ; N uni1F27 ; G 1509
U 7976 ; WX 602 ; N uni1F28 ; G 1510
U 7977 ; WX 602 ; N uni1F29 ; G 1511
U 7978 ; WX 602 ; N uni1F2A ; G 1512
U 7979 ; WX 602 ; N uni1F2B ; G 1513
U 7980 ; WX 602 ; N uni1F2C ; G 1514
U 7981 ; WX 602 ; N uni1F2D ; G 1515
U 7982 ; WX 602 ; N uni1F2E ; G 1516
U 7983 ; WX 602 ; N uni1F2F ; G 1517
U 7984 ; WX 602 ; N uni1F30 ; G 1518
U 7985 ; WX 602 ; N uni1F31 ; G 1519
U 7986 ; WX 602 ; N uni1F32 ; G 1520
U 7987 ; WX 602 ; N uni1F33 ; G 1521
U 7988 ; WX 602 ; N uni1F34 ; G 1522
U 7989 ; WX 602 ; N uni1F35 ; G 1523
U 7990 ; WX 602 ; N uni1F36 ; G 1524
U 7991 ; WX 602 ; N uni1F37 ; G 1525
U 7992 ; WX 602 ; N uni1F38 ; G 1526
U 7993 ; WX 602 ; N uni1F39 ; G 1527
U 7994 ; WX 602 ; N uni1F3A ; G 1528
U 7995 ; WX 602 ; N uni1F3B ; G 1529
U 7996 ; WX 602 ; N uni1F3C ; G 1530
U 7997 ; WX 602 ; N uni1F3D ; G 1531
U 7998 ; WX 602 ; N uni1F3E ; G 1532
U 7999 ; WX 602 ; N uni1F3F ; G 1533
U 8000 ; WX 602 ; N uni1F40 ; G 1534
U 8001 ; WX 602 ; N uni1F41 ; G 1535
U 8002 ; WX 602 ; N uni1F42 ; G 1536
U 8003 ; WX 602 ; N uni1F43 ; G 1537
U 8004 ; WX 602 ; N uni1F44 ; G 1538
U 8005 ; WX 602 ; N uni1F45 ; G 1539
U 8008 ; WX 602 ; N uni1F48 ; G 1540
U 8009 ; WX 602 ; N uni1F49 ; G 1541
U 8010 ; WX 602 ; N uni1F4A ; G 1542
U 8011 ; WX 602 ; N uni1F4B ; G 1543
U 8012 ; WX 602 ; N uni1F4C ; G 1544
U 8013 ; WX 602 ; N uni1F4D ; G 1545
U 8016 ; WX 602 ; N uni1F50 ; G 1546
U 8017 ; WX 602 ; N uni1F51 ; G 1547
U 8018 ; WX 602 ; N uni1F52 ; G 1548
U 8019 ; WX 602 ; N uni1F53 ; G 1549
U 8020 ; WX 602 ; N uni1F54 ; G 1550
U 8021 ; WX 602 ; N uni1F55 ; G 1551
U 8022 ; WX 602 ; N uni1F56 ; G 1552
U 8023 ; WX 602 ; N uni1F57 ; G 1553
U 8025 ; WX 602 ; N uni1F59 ; G 1554
U 8027 ; WX 602 ; N uni1F5B ; G 1555
U 8029 ; WX 602 ; N uni1F5D ; G 1556
U 8031 ; WX 602 ; N uni1F5F ; G 1557
U 8032 ; WX 602 ; N uni1F60 ; G 1558
U 8033 ; WX 602 ; N uni1F61 ; G 1559
U 8034 ; WX 602 ; N uni1F62 ; G 1560
U 8035 ; WX 602 ; N uni1F63 ; G 1561
U 8036 ; WX 602 ; N uni1F64 ; G 1562
U 8037 ; WX 602 ; N uni1F65 ; G 1563
U 8038 ; WX 602 ; N uni1F66 ; G 1564
U 8039 ; WX 602 ; N uni1F67 ; G 1565
U 8040 ; WX 602 ; N uni1F68 ; G 1566
U 8041 ; WX 602 ; N uni1F69 ; G 1567
U 8042 ; WX 602 ; N uni1F6A ; G 1568
U 8043 ; WX 602 ; N uni1F6B ; G 1569
U 8044 ; WX 602 ; N uni1F6C ; G 1570
U 8045 ; WX 602 ; N uni1F6D ; G 1571
U 8046 ; WX 602 ; N uni1F6E ; G 1572
U 8047 ; WX 602 ; N uni1F6F ; G 1573
U 8048 ; WX 602 ; N uni1F70 ; G 1574
U 8049 ; WX 602 ; N uni1F71 ; G 1575
U 8050 ; WX 602 ; N uni1F72 ; G 1576
U 8051 ; WX 602 ; N uni1F73 ; G 1577
U 8052 ; WX 602 ; N uni1F74 ; G 1578
U 8053 ; WX 602 ; N uni1F75 ; G 1579
U 8054 ; WX 602 ; N uni1F76 ; G 1580
U 8055 ; WX 602 ; N uni1F77 ; G 1581
U 8056 ; WX 602 ; N uni1F78 ; G 1582
U 8057 ; WX 602 ; N uni1F79 ; G 1583
U 8058 ; WX 602 ; N uni1F7A ; G 1584
U 8059 ; WX 602 ; N uni1F7B ; G 1585
U 8060 ; WX 602 ; N uni1F7C ; G 1586
U 8061 ; WX 602 ; N uni1F7D ; G 1587
U 8064 ; WX 602 ; N uni1F80 ; G 1588
U 8065 ; WX 602 ; N uni1F81 ; G 1589
U 8066 ; WX 602 ; N uni1F82 ; G 1590
U 8067 ; WX 602 ; N uni1F83 ; G 1591
U 8068 ; WX 602 ; N uni1F84 ; G 1592
U 8069 ; WX 602 ; N uni1F85 ; G 1593
U 8070 ; WX 602 ; N uni1F86 ; G 1594
U 8071 ; WX 602 ; N uni1F87 ; G 1595
U 8072 ; WX 602 ; N uni1F88 ; G 1596
U 8073 ; WX 602 ; N uni1F89 ; G 1597
U 8074 ; WX 602 ; N uni1F8A ; G 1598
U 8075 ; WX 602 ; N uni1F8B ; G 1599
U 8076 ; WX 602 ; N uni1F8C ; G 1600
U 8077 ; WX 602 ; N uni1F8D ; G 1601
U 8078 ; WX 602 ; N uni1F8E ; G 1602
U 8079 ; WX 602 ; N uni1F8F ; G 1603
U 8080 ; WX 602 ; N uni1F90 ; G 1604
U 8081 ; WX 602 ; N uni1F91 ; G 1605
U 8082 ; WX 602 ; N uni1F92 ; G 1606
U 8083 ; WX 602 ; N uni1F93 ; G 1607
U 8084 ; WX 602 ; N uni1F94 ; G 1608
U 8085 ; WX 602 ; N uni1F95 ; G 1609
U 8086 ; WX 602 ; N uni1F96 ; G 1610
U 8087 ; WX 602 ; N uni1F97 ; G 1611
U 8088 ; WX 602 ; N uni1F98 ; G 1612
U 8089 ; WX 602 ; N uni1F99 ; G 1613
U 8090 ; WX 602 ; N uni1F9A ; G 1614
U 8091 ; WX 602 ; N uni1F9B ; G 1615
U 8092 ; WX 602 ; N uni1F9C ; G 1616
U 8093 ; WX 602 ; N uni1F9D ; G 1617
U 8094 ; WX 602 ; N uni1F9E ; G 1618
U 8095 ; WX 602 ; N uni1F9F ; G 1619
U 8096 ; WX 602 ; N uni1FA0 ; G 1620
U 8097 ; WX 602 ; N uni1FA1 ; G 1621
U 8098 ; WX 602 ; N uni1FA2 ; G 1622
U 8099 ; WX 602 ; N uni1FA3 ; G 1623
U 8100 ; WX 602 ; N uni1FA4 ; G 1624
U 8101 ; WX 602 ; N uni1FA5 ; G 1625
U 8102 ; WX 602 ; N uni1FA6 ; G 1626
U 8103 ; WX 602 ; N uni1FA7 ; G 1627
U 8104 ; WX 602 ; N uni1FA8 ; G 1628
U 8105 ; WX 602 ; N uni1FA9 ; G 1629
U 8106 ; WX 602 ; N uni1FAA ; G 1630
U 8107 ; WX 602 ; N uni1FAB ; G 1631
U 8108 ; WX 602 ; N uni1FAC ; G 1632
U 8109 ; WX 602 ; N uni1FAD ; G 1633
U 8110 ; WX 602 ; N uni1FAE ; G 1634
U 8111 ; WX 602 ; N uni1FAF ; G 1635
U 8112 ; WX 602 ; N uni1FB0 ; G 1636
U 8113 ; WX 602 ; N uni1FB1 ; G 1637
U 8114 ; WX 602 ; N uni1FB2 ; G 1638
U 8115 ; WX 602 ; N uni1FB3 ; G 1639
U 8116 ; WX 602 ; N uni1FB4 ; G 1640
U 8118 ; WX 602 ; N uni1FB6 ; G 1641
U 8119 ; WX 602 ; N uni1FB7 ; G 1642
U 8120 ; WX 602 ; N uni1FB8 ; G 1643
U 8121 ; WX 602 ; N uni1FB9 ; G 1644
U 8122 ; WX 602 ; N uni1FBA ; G 1645
U 8123 ; WX 602 ; N uni1FBB ; G 1646
U 8124 ; WX 602 ; N uni1FBC ; G 1647
U 8125 ; WX 602 ; N uni1FBD ; G 1648
U 8126 ; WX 602 ; N uni1FBE ; G 1649
U 8127 ; WX 602 ; N uni1FBF ; G 1650
U 8128 ; WX 602 ; N uni1FC0 ; G 1651
U 8129 ; WX 602 ; N uni1FC1 ; G 1652
U 8130 ; WX 602 ; N uni1FC2 ; G 1653
U 8131 ; WX 602 ; N uni1FC3 ; G 1654
U 8132 ; WX 602 ; N uni1FC4 ; G 1655
U 8134 ; WX 602 ; N uni1FC6 ; G 1656
U 8135 ; WX 602 ; N uni1FC7 ; G 1657
U 8136 ; WX 602 ; N uni1FC8 ; G 1658
U 8137 ; WX 602 ; N uni1FC9 ; G 1659
U 8138 ; WX 602 ; N uni1FCA ; G 1660
U 8139 ; WX 602 ; N uni1FCB ; G 1661
U 8140 ; WX 602 ; N uni1FCC ; G 1662
U 8141 ; WX 602 ; N uni1FCD ; G 1663
U 8142 ; WX 602 ; N uni1FCE ; G 1664
U 8143 ; WX 602 ; N uni1FCF ; G 1665
U 8144 ; WX 602 ; N uni1FD0 ; G 1666
U 8145 ; WX 602 ; N uni1FD1 ; G 1667
U 8146 ; WX 602 ; N uni1FD2 ; G 1668
U 8147 ; WX 602 ; N uni1FD3 ; G 1669
U 8150 ; WX 602 ; N uni1FD6 ; G 1670
U 8151 ; WX 602 ; N uni1FD7 ; G 1671
U 8152 ; WX 602 ; N uni1FD8 ; G 1672
U 8153 ; WX 602 ; N uni1FD9 ; G 1673
U 8154 ; WX 602 ; N uni1FDA ; G 1674
U 8155 ; WX 602 ; N uni1FDB ; G 1675
U 8157 ; WX 602 ; N uni1FDD ; G 1676
U 8158 ; WX 602 ; N uni1FDE ; G 1677
U 8159 ; WX 602 ; N uni1FDF ; G 1678
U 8160 ; WX 602 ; N uni1FE0 ; G 1679
U 8161 ; WX 602 ; N uni1FE1 ; G 1680
U 8162 ; WX 602 ; N uni1FE2 ; G 1681
U 8163 ; WX 602 ; N uni1FE3 ; G 1682
U 8164 ; WX 602 ; N uni1FE4 ; G 1683
U 8165 ; WX 602 ; N uni1FE5 ; G 1684
U 8166 ; WX 602 ; N uni1FE6 ; G 1685
U 8167 ; WX 602 ; N uni1FE7 ; G 1686
U 8168 ; WX 602 ; N uni1FE8 ; G 1687
U 8169 ; WX 602 ; N uni1FE9 ; G 1688
U 8170 ; WX 602 ; N uni1FEA ; G 1689
U 8171 ; WX 602 ; N uni1FEB ; G 1690
U 8172 ; WX 602 ; N uni1FEC ; G 1691
U 8173 ; WX 602 ; N uni1FED ; G 1692
U 8174 ; WX 602 ; N uni1FEE ; G 1693
U 8175 ; WX 602 ; N uni1FEF ; G 1694
U 8178 ; WX 602 ; N uni1FF2 ; G 1695
U 8179 ; WX 602 ; N uni1FF3 ; G 1696
U 8180 ; WX 602 ; N uni1FF4 ; G 1697
U 8182 ; WX 602 ; N uni1FF6 ; G 1698
U 8183 ; WX 602 ; N uni1FF7 ; G 1699
U 8184 ; WX 602 ; N uni1FF8 ; G 1700
U 8185 ; WX 602 ; N uni1FF9 ; G 1701
U 8186 ; WX 602 ; N uni1FFA ; G 1702
U 8187 ; WX 602 ; N uni1FFB ; G 1703
U 8188 ; WX 602 ; N uni1FFC ; G 1704
U 8189 ; WX 602 ; N uni1FFD ; G 1705
U 8190 ; WX 602 ; N uni1FFE ; G 1706
U 8192 ; WX 602 ; N uni2000 ; G 1707
U 8193 ; WX 602 ; N uni2001 ; G 1708
U 8194 ; WX 602 ; N uni2002 ; G 1709
U 8195 ; WX 602 ; N uni2003 ; G 1710
U 8196 ; WX 602 ; N uni2004 ; G 1711
U 8197 ; WX 602 ; N uni2005 ; G 1712
U 8198 ; WX 602 ; N uni2006 ; G 1713
U 8199 ; WX 602 ; N uni2007 ; G 1714
U 8200 ; WX 602 ; N uni2008 ; G 1715
U 8201 ; WX 602 ; N uni2009 ; G 1716
U 8202 ; WX 602 ; N uni200A ; G 1717
U 8208 ; WX 602 ; N uni2010 ; G 1718
U 8209 ; WX 602 ; N uni2011 ; G 1719
U 8210 ; WX 602 ; N figuredash ; G 1720
U 8211 ; WX 602 ; N endash ; G 1721
U 8212 ; WX 602 ; N emdash ; G 1722
U 8213 ; WX 602 ; N uni2015 ; G 1723
U 8214 ; WX 602 ; N uni2016 ; G 1724
U 8215 ; WX 602 ; N underscoredbl ; G 1725
U 8216 ; WX 602 ; N quoteleft ; G 1726
U 8217 ; WX 602 ; N quoteright ; G 1727
U 8218 ; WX 602 ; N quotesinglbase ; G 1728
U 8219 ; WX 602 ; N quotereversed ; G 1729
U 8220 ; WX 602 ; N quotedblleft ; G 1730
U 8221 ; WX 602 ; N quotedblright ; G 1731
U 8222 ; WX 602 ; N quotedblbase ; G 1732
U 8223 ; WX 602 ; N uni201F ; G 1733
U 8224 ; WX 602 ; N dagger ; G 1734
U 8225 ; WX 602 ; N daggerdbl ; G 1735
U 8226 ; WX 602 ; N bullet ; G 1736
U 8227 ; WX 602 ; N uni2023 ; G 1737
U 8230 ; WX 602 ; N ellipsis ; G 1738
U 8239 ; WX 602 ; N uni202F ; G 1739
U 8240 ; WX 602 ; N perthousand ; G 1740
U 8241 ; WX 602 ; N uni2031 ; G 1741
U 8242 ; WX 602 ; N minute ; G 1742
U 8243 ; WX 602 ; N second ; G 1743
U 8244 ; WX 602 ; N uni2034 ; G 1744
U 8245 ; WX 602 ; N uni2035 ; G 1745
U 8246 ; WX 602 ; N uni2036 ; G 1746
U 8247 ; WX 602 ; N uni2037 ; G 1747
U 8249 ; WX 602 ; N guilsinglleft ; G 1748
U 8250 ; WX 602 ; N guilsinglright ; G 1749
U 8252 ; WX 602 ; N exclamdbl ; G 1750
U 8253 ; WX 602 ; N uni203D ; G 1751
U 8254 ; WX 602 ; N uni203E ; G 1752
U 8255 ; WX 602 ; N uni203F ; G 1753
U 8261 ; WX 602 ; N uni2045 ; G 1754
U 8262 ; WX 602 ; N uni2046 ; G 1755
U 8263 ; WX 602 ; N uni2047 ; G 1756
U 8264 ; WX 602 ; N uni2048 ; G 1757
U 8265 ; WX 602 ; N uni2049 ; G 1758
U 8267 ; WX 602 ; N uni204B ; G 1759
U 8287 ; WX 602 ; N uni205F ; G 1760
U 8304 ; WX 602 ; N uni2070 ; G 1761
U 8305 ; WX 602 ; N uni2071 ; G 1762
U 8308 ; WX 602 ; N uni2074 ; G 1763
U 8309 ; WX 602 ; N uni2075 ; G 1764
U 8310 ; WX 602 ; N uni2076 ; G 1765
U 8311 ; WX 602 ; N uni2077 ; G 1766
U 8312 ; WX 602 ; N uni2078 ; G 1767
U 8313 ; WX 602 ; N uni2079 ; G 1768
U 8314 ; WX 602 ; N uni207A ; G 1769
U 8315 ; WX 602 ; N uni207B ; G 1770
U 8316 ; WX 602 ; N uni207C ; G 1771
U 8317 ; WX 602 ; N uni207D ; G 1772
U 8318 ; WX 602 ; N uni207E ; G 1773
U 8319 ; WX 602 ; N uni207F ; G 1774
U 8320 ; WX 602 ; N uni2080 ; G 1775
U 8321 ; WX 602 ; N uni2081 ; G 1776
U 8322 ; WX 602 ; N uni2082 ; G 1777
U 8323 ; WX 602 ; N uni2083 ; G 1778
U 8324 ; WX 602 ; N uni2084 ; G 1779
U 8325 ; WX 602 ; N uni2085 ; G 1780
U 8326 ; WX 602 ; N uni2086 ; G 1781
U 8327 ; WX 602 ; N uni2087 ; G 1782
U 8328 ; WX 602 ; N uni2088 ; G 1783
U 8329 ; WX 602 ; N uni2089 ; G 1784
U 8330 ; WX 602 ; N uni208A ; G 1785
U 8331 ; WX 602 ; N uni208B ; G 1786
U 8332 ; WX 602 ; N uni208C ; G 1787
U 8333 ; WX 602 ; N uni208D ; G 1788
U 8334 ; WX 602 ; N uni208E ; G 1789
U 8336 ; WX 602 ; N uni2090 ; G 1790
U 8337 ; WX 602 ; N uni2091 ; G 1791
U 8338 ; WX 602 ; N uni2092 ; G 1792
U 8339 ; WX 602 ; N uni2093 ; G 1793
U 8340 ; WX 602 ; N uni2094 ; G 1794
U 8341 ; WX 602 ; N uni2095 ; G 1795
U 8342 ; WX 602 ; N uni2096 ; G 1796
U 8343 ; WX 602 ; N uni2097 ; G 1797
U 8344 ; WX 602 ; N uni2098 ; G 1798
U 8345 ; WX 602 ; N uni2099 ; G 1799
U 8346 ; WX 602 ; N uni209A ; G 1800
U 8347 ; WX 602 ; N uni209B ; G 1801
U 8348 ; WX 602 ; N uni209C ; G 1802
U 8352 ; WX 602 ; N uni20A0 ; G 1803
U 8353 ; WX 602 ; N colonmonetary ; G 1804
U 8354 ; WX 602 ; N uni20A2 ; G 1805
U 8355 ; WX 602 ; N franc ; G 1806
U 8356 ; WX 602 ; N lira ; G 1807
U 8357 ; WX 602 ; N uni20A5 ; G 1808
U 8358 ; WX 602 ; N uni20A6 ; G 1809
U 8359 ; WX 602 ; N peseta ; G 1810
U 8360 ; WX 602 ; N uni20A8 ; G 1811
U 8361 ; WX 602 ; N uni20A9 ; G 1812
U 8362 ; WX 602 ; N uni20AA ; G 1813
U 8363 ; WX 602 ; N dong ; G 1814
U 8364 ; WX 602 ; N Euro ; G 1815
U 8365 ; WX 602 ; N uni20AD ; G 1816
U 8366 ; WX 602 ; N uni20AE ; G 1817
U 8367 ; WX 602 ; N uni20AF ; G 1818
U 8368 ; WX 602 ; N uni20B0 ; G 1819
U 8369 ; WX 602 ; N uni20B1 ; G 1820
U 8370 ; WX 602 ; N uni20B2 ; G 1821
U 8371 ; WX 602 ; N uni20B3 ; G 1822
U 8372 ; WX 602 ; N uni20B4 ; G 1823
U 8373 ; WX 602 ; N uni20B5 ; G 1824
U 8376 ; WX 602 ; N uni20B8 ; G 1825
U 8377 ; WX 602 ; N uni20B9 ; G 1826
U 8378 ; WX 602 ; N uni20BA ; G 1827
U 8381 ; WX 602 ; N uni20BD ; G 1828
U 8450 ; WX 602 ; N uni2102 ; G 1829
U 8453 ; WX 602 ; N uni2105 ; G 1830
U 8461 ; WX 602 ; N uni210D ; G 1831
U 8462 ; WX 602 ; N uni210E ; G 1832
U 8463 ; WX 602 ; N uni210F ; G 1833
U 8469 ; WX 602 ; N uni2115 ; G 1834
U 8470 ; WX 602 ; N uni2116 ; G 1835
U 8471 ; WX 602 ; N uni2117 ; G 1836
U 8473 ; WX 602 ; N uni2119 ; G 1837
U 8474 ; WX 602 ; N uni211A ; G 1838
U 8477 ; WX 602 ; N uni211D ; G 1839
U 8482 ; WX 602 ; N trademark ; G 1840
U 8484 ; WX 602 ; N uni2124 ; G 1841
U 8486 ; WX 602 ; N uni2126 ; G 1842
U 8490 ; WX 602 ; N uni212A ; G 1843
U 8491 ; WX 602 ; N uni212B ; G 1844
U 8494 ; WX 602 ; N estimated ; G 1845
U 8520 ; WX 602 ; N uni2148 ; G 1846
U 8528 ; WX 602 ; N uni2150 ; G 1847
U 8529 ; WX 602 ; N uni2151 ; G 1848
U 8531 ; WX 602 ; N onethird ; G 1849
U 8532 ; WX 602 ; N twothirds ; G 1850
U 8533 ; WX 602 ; N uni2155 ; G 1851
U 8534 ; WX 602 ; N uni2156 ; G 1852
U 8535 ; WX 602 ; N uni2157 ; G 1853
U 8536 ; WX 602 ; N uni2158 ; G 1854
U 8537 ; WX 602 ; N uni2159 ; G 1855
U 8538 ; WX 602 ; N uni215A ; G 1856
U 8539 ; WX 602 ; N oneeighth ; G 1857
U 8540 ; WX 602 ; N threeeighths ; G 1858
U 8541 ; WX 602 ; N fiveeighths ; G 1859
U 8542 ; WX 602 ; N seveneighths ; G 1860
U 8543 ; WX 602 ; N uni215F ; G 1861
U 8585 ; WX 602 ; N uni2189 ; G 1862
U 8592 ; WX 602 ; N arrowleft ; G 1863
U 8593 ; WX 602 ; N arrowup ; G 1864
U 8594 ; WX 602 ; N arrowright ; G 1865
U 8595 ; WX 602 ; N arrowdown ; G 1866
U 8596 ; WX 602 ; N arrowboth ; G 1867
U 8597 ; WX 602 ; N arrowupdn ; G 1868
U 8598 ; WX 602 ; N uni2196 ; G 1869
U 8599 ; WX 602 ; N uni2197 ; G 1870
U 8600 ; WX 602 ; N uni2198 ; G 1871
U 8601 ; WX 602 ; N uni2199 ; G 1872
U 8602 ; WX 602 ; N uni219A ; G 1873
U 8603 ; WX 602 ; N uni219B ; G 1874
U 8604 ; WX 602 ; N uni219C ; G 1875
U 8605 ; WX 602 ; N uni219D ; G 1876
U 8606 ; WX 602 ; N uni219E ; G 1877
U 8607 ; WX 602 ; N uni219F ; G 1878
U 8608 ; WX 602 ; N uni21A0 ; G 1879
U 8609 ; WX 602 ; N uni21A1 ; G 1880
U 8610 ; WX 602 ; N uni21A2 ; G 1881
U 8611 ; WX 602 ; N uni21A3 ; G 1882
U 8612 ; WX 602 ; N uni21A4 ; G 1883
U 8613 ; WX 602 ; N uni21A5 ; G 1884
U 8614 ; WX 602 ; N uni21A6 ; G 1885
U 8615 ; WX 602 ; N uni21A7 ; G 1886
U 8616 ; WX 602 ; N arrowupdnbse ; G 1887
U 8617 ; WX 602 ; N uni21A9 ; G 1888
U 8618 ; WX 602 ; N uni21AA ; G 1889
U 8619 ; WX 602 ; N uni21AB ; G 1890
U 8620 ; WX 602 ; N uni21AC ; G 1891
U 8621 ; WX 602 ; N uni21AD ; G 1892
U 8622 ; WX 602 ; N uni21AE ; G 1893
U 8623 ; WX 602 ; N uni21AF ; G 1894
U 8624 ; WX 602 ; N uni21B0 ; G 1895
U 8625 ; WX 602 ; N uni21B1 ; G 1896
U 8626 ; WX 602 ; N uni21B2 ; G 1897
U 8627 ; WX 602 ; N uni21B3 ; G 1898
U 8628 ; WX 602 ; N uni21B4 ; G 1899
U 8629 ; WX 602 ; N carriagereturn ; G 1900
U 8630 ; WX 602 ; N uni21B6 ; G 1901
U 8631 ; WX 602 ; N uni21B7 ; G 1902
U 8632 ; WX 602 ; N uni21B8 ; G 1903
U 8633 ; WX 602 ; N uni21B9 ; G 1904
U 8634 ; WX 602 ; N uni21BA ; G 1905
U 8635 ; WX 602 ; N uni21BB ; G 1906
U 8636 ; WX 602 ; N uni21BC ; G 1907
U 8637 ; WX 602 ; N uni21BD ; G 1908
U 8638 ; WX 602 ; N uni21BE ; G 1909
U 8639 ; WX 602 ; N uni21BF ; G 1910
U 8640 ; WX 602 ; N uni21C0 ; G 1911
U 8641 ; WX 602 ; N uni21C1 ; G 1912
U 8642 ; WX 602 ; N uni21C2 ; G 1913
U 8643 ; WX 602 ; N uni21C3 ; G 1914
U 8644 ; WX 602 ; N uni21C4 ; G 1915
U 8645 ; WX 602 ; N uni21C5 ; G 1916
U 8646 ; WX 602 ; N uni21C6 ; G 1917
U 8647 ; WX 602 ; N uni21C7 ; G 1918
U 8648 ; WX 602 ; N uni21C8 ; G 1919
U 8649 ; WX 602 ; N uni21C9 ; G 1920
U 8650 ; WX 602 ; N uni21CA ; G 1921
U 8651 ; WX 602 ; N uni21CB ; G 1922
U 8652 ; WX 602 ; N uni21CC ; G 1923
U 8653 ; WX 602 ; N uni21CD ; G 1924
U 8654 ; WX 602 ; N uni21CE ; G 1925
U 8655 ; WX 602 ; N uni21CF ; G 1926
U 8656 ; WX 602 ; N arrowdblleft ; G 1927
U 8657 ; WX 602 ; N arrowdblup ; G 1928
U 8658 ; WX 602 ; N arrowdblright ; G 1929
U 8659 ; WX 602 ; N arrowdbldown ; G 1930
U 8660 ; WX 602 ; N arrowdblboth ; G 1931
U 8661 ; WX 602 ; N uni21D5 ; G 1932
U 8662 ; WX 602 ; N uni21D6 ; G 1933
U 8663 ; WX 602 ; N uni21D7 ; G 1934
U 8664 ; WX 602 ; N uni21D8 ; G 1935
U 8665 ; WX 602 ; N uni21D9 ; G 1936
U 8666 ; WX 602 ; N uni21DA ; G 1937
U 8667 ; WX 602 ; N uni21DB ; G 1938
U 8668 ; WX 602 ; N uni21DC ; G 1939
U 8669 ; WX 602 ; N uni21DD ; G 1940
U 8670 ; WX 602 ; N uni21DE ; G 1941
U 8671 ; WX 602 ; N uni21DF ; G 1942
U 8672 ; WX 602 ; N uni21E0 ; G 1943
U 8673 ; WX 602 ; N uni21E1 ; G 1944
U 8674 ; WX 602 ; N uni21E2 ; G 1945
U 8675 ; WX 602 ; N uni21E3 ; G 1946
U 8676 ; WX 602 ; N uni21E4 ; G 1947
U 8677 ; WX 602 ; N uni21E5 ; G 1948
U 8678 ; WX 602 ; N uni21E6 ; G 1949
U 8679 ; WX 602 ; N uni21E7 ; G 1950
U 8680 ; WX 602 ; N uni21E8 ; G 1951
U 8681 ; WX 602 ; N uni21E9 ; G 1952
U 8682 ; WX 602 ; N uni21EA ; G 1953
U 8683 ; WX 602 ; N uni21EB ; G 1954
U 8684 ; WX 602 ; N uni21EC ; G 1955
U 8685 ; WX 602 ; N uni21ED ; G 1956
U 8686 ; WX 602 ; N uni21EE ; G 1957
U 8687 ; WX 602 ; N uni21EF ; G 1958
U 8688 ; WX 602 ; N uni21F0 ; G 1959
U 8689 ; WX 602 ; N uni21F1 ; G 1960
U 8690 ; WX 602 ; N uni21F2 ; G 1961
U 8691 ; WX 602 ; N uni21F3 ; G 1962
U 8692 ; WX 602 ; N uni21F4 ; G 1963
U 8693 ; WX 602 ; N uni21F5 ; G 1964
U 8694 ; WX 602 ; N uni21F6 ; G 1965
U 8695 ; WX 602 ; N uni21F7 ; G 1966
U 8696 ; WX 602 ; N uni21F8 ; G 1967
U 8697 ; WX 602 ; N uni21F9 ; G 1968
U 8698 ; WX 602 ; N uni21FA ; G 1969
U 8699 ; WX 602 ; N uni21FB ; G 1970
U 8700 ; WX 602 ; N uni21FC ; G 1971
U 8701 ; WX 602 ; N uni21FD ; G 1972
U 8702 ; WX 602 ; N uni21FE ; G 1973
U 8703 ; WX 602 ; N uni21FF ; G 1974
U 8704 ; WX 602 ; N universal ; G 1975
U 8705 ; WX 602 ; N uni2201 ; G 1976
U 8706 ; WX 602 ; N partialdiff ; G 1977
U 8707 ; WX 602 ; N existential ; G 1978
U 8708 ; WX 602 ; N uni2204 ; G 1979
U 8709 ; WX 602 ; N emptyset ; G 1980
U 8710 ; WX 602 ; N increment ; G 1981
U 8711 ; WX 602 ; N gradient ; G 1982
U 8712 ; WX 602 ; N element ; G 1983
U 8713 ; WX 602 ; N notelement ; G 1984
U 8714 ; WX 602 ; N uni220A ; G 1985
U 8715 ; WX 602 ; N suchthat ; G 1986
U 8716 ; WX 602 ; N uni220C ; G 1987
U 8717 ; WX 602 ; N uni220D ; G 1988
U 8718 ; WX 602 ; N uni220E ; G 1989
U 8719 ; WX 602 ; N product ; G 1990
U 8720 ; WX 602 ; N uni2210 ; G 1991
U 8721 ; WX 602 ; N summation ; G 1992
U 8722 ; WX 602 ; N minus ; G 1993
U 8723 ; WX 602 ; N uni2213 ; G 1994
U 8725 ; WX 602 ; N uni2215 ; G 1995
U 8727 ; WX 602 ; N asteriskmath ; G 1996
U 8728 ; WX 602 ; N uni2218 ; G 1997
U 8729 ; WX 602 ; N uni2219 ; G 1998
U 8730 ; WX 602 ; N radical ; G 1999
U 8731 ; WX 602 ; N uni221B ; G 2000
U 8732 ; WX 602 ; N uni221C ; G 2001
U 8733 ; WX 602 ; N proportional ; G 2002
U 8734 ; WX 602 ; N infinity ; G 2003
U 8735 ; WX 602 ; N orthogonal ; G 2004
U 8736 ; WX 602 ; N angle ; G 2005
U 8739 ; WX 602 ; N uni2223 ; G 2006
U 8743 ; WX 602 ; N logicaland ; G 2007
U 8744 ; WX 602 ; N logicalor ; G 2008
U 8745 ; WX 602 ; N intersection ; G 2009
U 8746 ; WX 602 ; N union ; G 2010
U 8747 ; WX 602 ; N integral ; G 2011
U 8748 ; WX 602 ; N uni222C ; G 2012
U 8749 ; WX 602 ; N uni222D ; G 2013
U 8756 ; WX 602 ; N therefore ; G 2014
U 8757 ; WX 602 ; N uni2235 ; G 2015
U 8758 ; WX 602 ; N uni2236 ; G 2016
U 8759 ; WX 602 ; N uni2237 ; G 2017
U 8760 ; WX 602 ; N uni2238 ; G 2018
U 8761 ; WX 602 ; N uni2239 ; G 2019
U 8762 ; WX 602 ; N uni223A ; G 2020
U 8763 ; WX 602 ; N uni223B ; G 2021
U 8764 ; WX 602 ; N similar ; G 2022
U 8765 ; WX 602 ; N uni223D ; G 2023
U 8769 ; WX 602 ; N uni2241 ; G 2024
U 8770 ; WX 602 ; N uni2242 ; G 2025
U 8771 ; WX 602 ; N uni2243 ; G 2026
U 8772 ; WX 602 ; N uni2244 ; G 2027
U 8773 ; WX 602 ; N congruent ; G 2028
U 8774 ; WX 602 ; N uni2246 ; G 2029
U 8775 ; WX 602 ; N uni2247 ; G 2030
U 8776 ; WX 602 ; N approxequal ; G 2031
U 8777 ; WX 602 ; N uni2249 ; G 2032
U 8778 ; WX 602 ; N uni224A ; G 2033
U 8779 ; WX 602 ; N uni224B ; G 2034
U 8780 ; WX 602 ; N uni224C ; G 2035
U 8781 ; WX 602 ; N uni224D ; G 2036
U 8782 ; WX 602 ; N uni224E ; G 2037
U 8783 ; WX 602 ; N uni224F ; G 2038
U 8784 ; WX 602 ; N uni2250 ; G 2039
U 8785 ; WX 602 ; N uni2251 ; G 2040
U 8786 ; WX 602 ; N uni2252 ; G 2041
U 8787 ; WX 602 ; N uni2253 ; G 2042
U 8788 ; WX 602 ; N uni2254 ; G 2043
U 8789 ; WX 602 ; N uni2255 ; G 2044
U 8790 ; WX 602 ; N uni2256 ; G 2045
U 8791 ; WX 602 ; N uni2257 ; G 2046
U 8792 ; WX 602 ; N uni2258 ; G 2047
U 8793 ; WX 602 ; N uni2259 ; G 2048
U 8794 ; WX 602 ; N uni225A ; G 2049
U 8795 ; WX 602 ; N uni225B ; G 2050
U 8796 ; WX 602 ; N uni225C ; G 2051
U 8797 ; WX 602 ; N uni225D ; G 2052
U 8798 ; WX 602 ; N uni225E ; G 2053
U 8799 ; WX 602 ; N uni225F ; G 2054
U 8800 ; WX 602 ; N notequal ; G 2055
U 8801 ; WX 602 ; N equivalence ; G 2056
U 8802 ; WX 602 ; N uni2262 ; G 2057
U 8803 ; WX 602 ; N uni2263 ; G 2058
U 8804 ; WX 602 ; N lessequal ; G 2059
U 8805 ; WX 602 ; N greaterequal ; G 2060
U 8806 ; WX 602 ; N uni2266 ; G 2061
U 8807 ; WX 602 ; N uni2267 ; G 2062
U 8808 ; WX 602 ; N uni2268 ; G 2063
U 8809 ; WX 602 ; N uni2269 ; G 2064
U 8813 ; WX 602 ; N uni226D ; G 2065
U 8814 ; WX 602 ; N uni226E ; G 2066
U 8815 ; WX 602 ; N uni226F ; G 2067
U 8816 ; WX 602 ; N uni2270 ; G 2068
U 8817 ; WX 602 ; N uni2271 ; G 2069
U 8818 ; WX 602 ; N uni2272 ; G 2070
U 8819 ; WX 602 ; N uni2273 ; G 2071
U 8820 ; WX 602 ; N uni2274 ; G 2072
U 8821 ; WX 602 ; N uni2275 ; G 2073
U 8822 ; WX 602 ; N uni2276 ; G 2074
U 8823 ; WX 602 ; N uni2277 ; G 2075
U 8824 ; WX 602 ; N uni2278 ; G 2076
U 8825 ; WX 602 ; N uni2279 ; G 2077
U 8826 ; WX 602 ; N uni227A ; G 2078
U 8827 ; WX 602 ; N uni227B ; G 2079
U 8828 ; WX 602 ; N uni227C ; G 2080
U 8829 ; WX 602 ; N uni227D ; G 2081
U 8830 ; WX 602 ; N uni227E ; G 2082
U 8831 ; WX 602 ; N uni227F ; G 2083
U 8832 ; WX 602 ; N uni2280 ; G 2084
U 8833 ; WX 602 ; N uni2281 ; G 2085
U 8834 ; WX 602 ; N propersubset ; G 2086
U 8835 ; WX 602 ; N propersuperset ; G 2087
U 8836 ; WX 602 ; N notsubset ; G 2088
U 8837 ; WX 602 ; N uni2285 ; G 2089
U 8838 ; WX 602 ; N reflexsubset ; G 2090
U 8839 ; WX 602 ; N reflexsuperset ; G 2091
U 8840 ; WX 602 ; N uni2288 ; G 2092
U 8841 ; WX 602 ; N uni2289 ; G 2093
U 8842 ; WX 602 ; N uni228A ; G 2094
U 8843 ; WX 602 ; N uni228B ; G 2095
U 8845 ; WX 602 ; N uni228D ; G 2096
U 8846 ; WX 602 ; N uni228E ; G 2097
U 8847 ; WX 602 ; N uni228F ; G 2098
U 8848 ; WX 602 ; N uni2290 ; G 2099
U 8849 ; WX 602 ; N uni2291 ; G 2100
U 8850 ; WX 602 ; N uni2292 ; G 2101
U 8851 ; WX 602 ; N uni2293 ; G 2102
U 8852 ; WX 602 ; N uni2294 ; G 2103
U 8853 ; WX 602 ; N circleplus ; G 2104
U 8854 ; WX 602 ; N uni2296 ; G 2105
U 8855 ; WX 602 ; N circlemultiply ; G 2106
U 8856 ; WX 602 ; N uni2298 ; G 2107
U 8857 ; WX 602 ; N uni2299 ; G 2108
U 8858 ; WX 602 ; N uni229A ; G 2109
U 8859 ; WX 602 ; N uni229B ; G 2110
U 8860 ; WX 602 ; N uni229C ; G 2111
U 8861 ; WX 602 ; N uni229D ; G 2112
U 8862 ; WX 602 ; N uni229E ; G 2113
U 8863 ; WX 602 ; N uni229F ; G 2114
U 8864 ; WX 602 ; N uni22A0 ; G 2115
U 8865 ; WX 602 ; N uni22A1 ; G 2116
U 8866 ; WX 602 ; N uni22A2 ; G 2117
U 8867 ; WX 602 ; N uni22A3 ; G 2118
U 8868 ; WX 602 ; N uni22A4 ; G 2119
U 8869 ; WX 602 ; N perpendicular ; G 2120
U 8882 ; WX 602 ; N uni22B2 ; G 2121
U 8883 ; WX 602 ; N uni22B3 ; G 2122
U 8884 ; WX 602 ; N uni22B4 ; G 2123
U 8885 ; WX 602 ; N uni22B5 ; G 2124
U 8888 ; WX 602 ; N uni22B8 ; G 2125
U 8898 ; WX 602 ; N uni22C2 ; G 2126
U 8899 ; WX 602 ; N uni22C3 ; G 2127
U 8900 ; WX 602 ; N uni22C4 ; G 2128
U 8901 ; WX 602 ; N dotmath ; G 2129
U 8902 ; WX 602 ; N uni22C6 ; G 2130
U 8909 ; WX 602 ; N uni22CD ; G 2131
U 8910 ; WX 602 ; N uni22CE ; G 2132
U 8911 ; WX 602 ; N uni22CF ; G 2133
U 8912 ; WX 602 ; N uni22D0 ; G 2134
U 8913 ; WX 602 ; N uni22D1 ; G 2135
U 8922 ; WX 602 ; N uni22DA ; G 2136
U 8923 ; WX 602 ; N uni22DB ; G 2137
U 8924 ; WX 602 ; N uni22DC ; G 2138
U 8925 ; WX 602 ; N uni22DD ; G 2139
U 8926 ; WX 602 ; N uni22DE ; G 2140
U 8927 ; WX 602 ; N uni22DF ; G 2141
U 8928 ; WX 602 ; N uni22E0 ; G 2142
U 8929 ; WX 602 ; N uni22E1 ; G 2143
U 8930 ; WX 602 ; N uni22E2 ; G 2144
U 8931 ; WX 602 ; N uni22E3 ; G 2145
U 8932 ; WX 602 ; N uni22E4 ; G 2146
U 8933 ; WX 602 ; N uni22E5 ; G 2147
U 8934 ; WX 602 ; N uni22E6 ; G 2148
U 8935 ; WX 602 ; N uni22E7 ; G 2149
U 8936 ; WX 602 ; N uni22E8 ; G 2150
U 8937 ; WX 602 ; N uni22E9 ; G 2151
U 8943 ; WX 602 ; N uni22EF ; G 2152
U 8960 ; WX 602 ; N uni2300 ; G 2153
U 8961 ; WX 602 ; N uni2301 ; G 2154
U 8962 ; WX 602 ; N house ; G 2155
U 8963 ; WX 602 ; N uni2303 ; G 2156
U 8964 ; WX 602 ; N uni2304 ; G 2157
U 8965 ; WX 602 ; N uni2305 ; G 2158
U 8966 ; WX 602 ; N uni2306 ; G 2159
U 8968 ; WX 602 ; N uni2308 ; G 2160
U 8969 ; WX 602 ; N uni2309 ; G 2161
U 8970 ; WX 602 ; N uni230A ; G 2162
U 8971 ; WX 602 ; N uni230B ; G 2163
U 8972 ; WX 602 ; N uni230C ; G 2164
U 8973 ; WX 602 ; N uni230D ; G 2165
U 8974 ; WX 602 ; N uni230E ; G 2166
U 8975 ; WX 602 ; N uni230F ; G 2167
U 8976 ; WX 602 ; N revlogicalnot ; G 2168
U 8977 ; WX 602 ; N uni2311 ; G 2169
U 8978 ; WX 602 ; N uni2312 ; G 2170
U 8979 ; WX 602 ; N uni2313 ; G 2171
U 8980 ; WX 602 ; N uni2314 ; G 2172
U 8981 ; WX 602 ; N uni2315 ; G 2173
U 8984 ; WX 602 ; N uni2318 ; G 2174
U 8985 ; WX 602 ; N uni2319 ; G 2175
U 8988 ; WX 602 ; N uni231C ; G 2176
U 8989 ; WX 602 ; N uni231D ; G 2177
U 8990 ; WX 602 ; N uni231E ; G 2178
U 8991 ; WX 602 ; N uni231F ; G 2179
U 8992 ; WX 602 ; N integraltp ; G 2180
U 8993 ; WX 602 ; N integralbt ; G 2181
U 8997 ; WX 602 ; N uni2325 ; G 2182
U 8998 ; WX 602 ; N uni2326 ; G 2183
U 8999 ; WX 602 ; N uni2327 ; G 2184
U 9000 ; WX 602 ; N uni2328 ; G 2185
U 9003 ; WX 602 ; N uni232B ; G 2186
U 9013 ; WX 602 ; N uni2335 ; G 2187
U 9014 ; WX 602 ; N uni2336 ; G 2188
U 9015 ; WX 602 ; N uni2337 ; G 2189
U 9016 ; WX 602 ; N uni2338 ; G 2190
U 9017 ; WX 602 ; N uni2339 ; G 2191
U 9018 ; WX 602 ; N uni233A ; G 2192
U 9019 ; WX 602 ; N uni233B ; G 2193
U 9020 ; WX 602 ; N uni233C ; G 2194
U 9021 ; WX 602 ; N uni233D ; G 2195
U 9022 ; WX 602 ; N uni233E ; G 2196
U 9023 ; WX 602 ; N uni233F ; G 2197
U 9024 ; WX 602 ; N uni2340 ; G 2198
U 9025 ; WX 602 ; N uni2341 ; G 2199
U 9026 ; WX 602 ; N uni2342 ; G 2200
U 9027 ; WX 602 ; N uni2343 ; G 2201
U 9028 ; WX 602 ; N uni2344 ; G 2202
U 9029 ; WX 602 ; N uni2345 ; G 2203
U 9030 ; WX 602 ; N uni2346 ; G 2204
U 9031 ; WX 602 ; N uni2347 ; G 2205
U 9032 ; WX 602 ; N uni2348 ; G 2206
U 9033 ; WX 602 ; N uni2349 ; G 2207
U 9034 ; WX 602 ; N uni234A ; G 2208
U 9035 ; WX 602 ; N uni234B ; G 2209
U 9036 ; WX 602 ; N uni234C ; G 2210
U 9037 ; WX 602 ; N uni234D ; G 2211
U 9038 ; WX 602 ; N uni234E ; G 2212
U 9039 ; WX 602 ; N uni234F ; G 2213
U 9040 ; WX 602 ; N uni2350 ; G 2214
U 9041 ; WX 602 ; N uni2351 ; G 2215
U 9042 ; WX 602 ; N uni2352 ; G 2216
U 9043 ; WX 602 ; N uni2353 ; G 2217
U 9044 ; WX 602 ; N uni2354 ; G 2218
U 9045 ; WX 602 ; N uni2355 ; G 2219
U 9046 ; WX 602 ; N uni2356 ; G 2220
U 9047 ; WX 602 ; N uni2357 ; G 2221
U 9048 ; WX 602 ; N uni2358 ; G 2222
U 9049 ; WX 602 ; N uni2359 ; G 2223
U 9050 ; WX 602 ; N uni235A ; G 2224
U 9051 ; WX 602 ; N uni235B ; G 2225
U 9052 ; WX 602 ; N uni235C ; G 2226
U 9053 ; WX 602 ; N uni235D ; G 2227
U 9054 ; WX 602 ; N uni235E ; G 2228
U 9055 ; WX 602 ; N uni235F ; G 2229
U 9056 ; WX 602 ; N uni2360 ; G 2230
U 9057 ; WX 602 ; N uni2361 ; G 2231
U 9058 ; WX 602 ; N uni2362 ; G 2232
U 9059 ; WX 602 ; N uni2363 ; G 2233
U 9060 ; WX 602 ; N uni2364 ; G 2234
U 9061 ; WX 602 ; N uni2365 ; G 2235
U 9062 ; WX 602 ; N uni2366 ; G 2236
U 9063 ; WX 602 ; N uni2367 ; G 2237
U 9064 ; WX 602 ; N uni2368 ; G 2238
U 9065 ; WX 602 ; N uni2369 ; G 2239
U 9066 ; WX 602 ; N uni236A ; G 2240
U 9067 ; WX 602 ; N uni236B ; G 2241
U 9068 ; WX 602 ; N uni236C ; G 2242
U 9069 ; WX 602 ; N uni236D ; G 2243
U 9070 ; WX 602 ; N uni236E ; G 2244
U 9071 ; WX 602 ; N uni236F ; G 2245
U 9072 ; WX 602 ; N uni2370 ; G 2246
U 9073 ; WX 602 ; N uni2371 ; G 2247
U 9074 ; WX 602 ; N uni2372 ; G 2248
U 9075 ; WX 602 ; N uni2373 ; G 2249
U 9076 ; WX 602 ; N uni2374 ; G 2250
U 9077 ; WX 602 ; N uni2375 ; G 2251
U 9078 ; WX 602 ; N uni2376 ; G 2252
U 9079 ; WX 602 ; N uni2377 ; G 2253
U 9080 ; WX 602 ; N uni2378 ; G 2254
U 9081 ; WX 602 ; N uni2379 ; G 2255
U 9082 ; WX 602 ; N uni237A ; G 2256
U 9085 ; WX 602 ; N uni237D ; G 2257
U 9088 ; WX 602 ; N uni2380 ; G 2258
U 9089 ; WX 602 ; N uni2381 ; G 2259
U 9090 ; WX 602 ; N uni2382 ; G 2260
U 9091 ; WX 602 ; N uni2383 ; G 2261
U 9096 ; WX 602 ; N uni2388 ; G 2262
U 9097 ; WX 602 ; N uni2389 ; G 2263
U 9098 ; WX 602 ; N uni238A ; G 2264
U 9099 ; WX 602 ; N uni238B ; G 2265
U 9109 ; WX 602 ; N uni2395 ; G 2266
U 9115 ; WX 602 ; N uni239B ; G 2267
U 9116 ; WX 602 ; N uni239C ; G 2268
U 9117 ; WX 602 ; N uni239D ; G 2269
U 9118 ; WX 602 ; N uni239E ; G 2270
U 9119 ; WX 602 ; N uni239F ; G 2271
U 9120 ; WX 602 ; N uni23A0 ; G 2272
U 9121 ; WX 602 ; N uni23A1 ; G 2273
U 9122 ; WX 602 ; N uni23A2 ; G 2274
U 9123 ; WX 602 ; N uni23A3 ; G 2275
U 9124 ; WX 602 ; N uni23A4 ; G 2276
U 9125 ; WX 602 ; N uni23A5 ; G 2277
U 9126 ; WX 602 ; N uni23A6 ; G 2278
U 9127 ; WX 602 ; N uni23A7 ; G 2279
U 9128 ; WX 602 ; N uni23A8 ; G 2280
U 9129 ; WX 602 ; N uni23A9 ; G 2281
U 9130 ; WX 602 ; N uni23AA ; G 2282
U 9131 ; WX 602 ; N uni23AB ; G 2283
U 9132 ; WX 602 ; N uni23AC ; G 2284
U 9133 ; WX 602 ; N uni23AD ; G 2285
U 9134 ; WX 602 ; N uni23AE ; G 2286
U 9166 ; WX 602 ; N uni23CE ; G 2287
U 9167 ; WX 602 ; N uni23CF ; G 2288
U 9251 ; WX 602 ; N uni2423 ; G 2289
U 9472 ; WX 602 ; N SF100000 ; G 2290
U 9473 ; WX 602 ; N uni2501 ; G 2291
U 9474 ; WX 602 ; N SF110000 ; G 2292
U 9475 ; WX 602 ; N uni2503 ; G 2293
U 9476 ; WX 602 ; N uni2504 ; G 2294
U 9477 ; WX 602 ; N uni2505 ; G 2295
U 9478 ; WX 602 ; N uni2506 ; G 2296
U 9479 ; WX 602 ; N uni2507 ; G 2297
U 9480 ; WX 602 ; N uni2508 ; G 2298
U 9481 ; WX 602 ; N uni2509 ; G 2299
U 9482 ; WX 602 ; N uni250A ; G 2300
U 9483 ; WX 602 ; N uni250B ; G 2301
U 9484 ; WX 602 ; N SF010000 ; G 2302
U 9485 ; WX 602 ; N uni250D ; G 2303
U 9486 ; WX 602 ; N uni250E ; G 2304
U 9487 ; WX 602 ; N uni250F ; G 2305
U 9488 ; WX 602 ; N SF030000 ; G 2306
U 9489 ; WX 602 ; N uni2511 ; G 2307
U 9490 ; WX 602 ; N uni2512 ; G 2308
U 9491 ; WX 602 ; N uni2513 ; G 2309
U 9492 ; WX 602 ; N SF020000 ; G 2310
U 9493 ; WX 602 ; N uni2515 ; G 2311
U 9494 ; WX 602 ; N uni2516 ; G 2312
U 9495 ; WX 602 ; N uni2517 ; G 2313
U 9496 ; WX 602 ; N SF040000 ; G 2314
U 9497 ; WX 602 ; N uni2519 ; G 2315
U 9498 ; WX 602 ; N uni251A ; G 2316
U 9499 ; WX 602 ; N uni251B ; G 2317
U 9500 ; WX 602 ; N SF080000 ; G 2318
U 9501 ; WX 602 ; N uni251D ; G 2319
U 9502 ; WX 602 ; N uni251E ; G 2320
U 9503 ; WX 602 ; N uni251F ; G 2321
U 9504 ; WX 602 ; N uni2520 ; G 2322
U 9505 ; WX 602 ; N uni2521 ; G 2323
U 9506 ; WX 602 ; N uni2522 ; G 2324
U 9507 ; WX 602 ; N uni2523 ; G 2325
U 9508 ; WX 602 ; N SF090000 ; G 2326
U 9509 ; WX 602 ; N uni2525 ; G 2327
U 9510 ; WX 602 ; N uni2526 ; G 2328
U 9511 ; WX 602 ; N uni2527 ; G 2329
U 9512 ; WX 602 ; N uni2528 ; G 2330
U 9513 ; WX 602 ; N uni2529 ; G 2331
U 9514 ; WX 602 ; N uni252A ; G 2332
U 9515 ; WX 602 ; N uni252B ; G 2333
U 9516 ; WX 602 ; N SF060000 ; G 2334
U 9517 ; WX 602 ; N uni252D ; G 2335
U 9518 ; WX 602 ; N uni252E ; G 2336
U 9519 ; WX 602 ; N uni252F ; G 2337
U 9520 ; WX 602 ; N uni2530 ; G 2338
U 9521 ; WX 602 ; N uni2531 ; G 2339
U 9522 ; WX 602 ; N uni2532 ; G 2340
U 9523 ; WX 602 ; N uni2533 ; G 2341
U 9524 ; WX 602 ; N SF070000 ; G 2342
U 9525 ; WX 602 ; N uni2535 ; G 2343
U 9526 ; WX 602 ; N uni2536 ; G 2344
U 9527 ; WX 602 ; N uni2537 ; G 2345
U 9528 ; WX 602 ; N uni2538 ; G 2346
U 9529 ; WX 602 ; N uni2539 ; G 2347
U 9530 ; WX 602 ; N uni253A ; G 2348
U 9531 ; WX 602 ; N uni253B ; G 2349
U 9532 ; WX 602 ; N SF050000 ; G 2350
U 9533 ; WX 602 ; N uni253D ; G 2351
U 9534 ; WX 602 ; N uni253E ; G 2352
U 9535 ; WX 602 ; N uni253F ; G 2353
U 9536 ; WX 602 ; N uni2540 ; G 2354
U 9537 ; WX 602 ; N uni2541 ; G 2355
U 9538 ; WX 602 ; N uni2542 ; G 2356
U 9539 ; WX 602 ; N uni2543 ; G 2357
U 9540 ; WX 602 ; N uni2544 ; G 2358
U 9541 ; WX 602 ; N uni2545 ; G 2359
U 9542 ; WX 602 ; N uni2546 ; G 2360
U 9543 ; WX 602 ; N uni2547 ; G 2361
U 9544 ; WX 602 ; N uni2548 ; G 2362
U 9545 ; WX 602 ; N uni2549 ; G 2363
U 9546 ; WX 602 ; N uni254A ; G 2364
U 9547 ; WX 602 ; N uni254B ; G 2365
U 9548 ; WX 602 ; N uni254C ; G 2366
U 9549 ; WX 602 ; N uni254D ; G 2367
U 9550 ; WX 602 ; N uni254E ; G 2368
U 9551 ; WX 602 ; N uni254F ; G 2369
U 9552 ; WX 602 ; N SF430000 ; G 2370
U 9553 ; WX 602 ; N SF240000 ; G 2371
U 9554 ; WX 602 ; N SF510000 ; G 2372
U 9555 ; WX 602 ; N SF520000 ; G 2373
U 9556 ; WX 602 ; N SF390000 ; G 2374
U 9557 ; WX 602 ; N SF220000 ; G 2375
U 9558 ; WX 602 ; N SF210000 ; G 2376
U 9559 ; WX 602 ; N SF250000 ; G 2377
U 9560 ; WX 602 ; N SF500000 ; G 2378
U 9561 ; WX 602 ; N SF490000 ; G 2379
U 9562 ; WX 602 ; N SF380000 ; G 2380
U 9563 ; WX 602 ; N SF280000 ; G 2381
U 9564 ; WX 602 ; N SF270000 ; G 2382
U 9565 ; WX 602 ; N SF260000 ; G 2383
U 9566 ; WX 602 ; N SF360000 ; G 2384
U 9567 ; WX 602 ; N SF370000 ; G 2385
U 9568 ; WX 602 ; N SF420000 ; G 2386
U 9569 ; WX 602 ; N SF190000 ; G 2387
U 9570 ; WX 602 ; N SF200000 ; G 2388
U 9571 ; WX 602 ; N SF230000 ; G 2389
U 9572 ; WX 602 ; N SF470000 ; G 2390
U 9573 ; WX 602 ; N SF480000 ; G 2391
U 9574 ; WX 602 ; N SF410000 ; G 2392
U 9575 ; WX 602 ; N SF450000 ; G 2393
U 9576 ; WX 602 ; N SF460000 ; G 2394
U 9577 ; WX 602 ; N SF400000 ; G 2395
U 9578 ; WX 602 ; N SF540000 ; G 2396
U 9579 ; WX 602 ; N SF530000 ; G 2397
U 9580 ; WX 602 ; N SF440000 ; G 2398
U 9581 ; WX 602 ; N uni256D ; G 2399
U 9582 ; WX 602 ; N uni256E ; G 2400
U 9583 ; WX 602 ; N uni256F ; G 2401
U 9584 ; WX 602 ; N uni2570 ; G 2402
U 9585 ; WX 602 ; N uni2571 ; G 2403
U 9586 ; WX 602 ; N uni2572 ; G 2404
U 9587 ; WX 602 ; N uni2573 ; G 2405
U 9588 ; WX 602 ; N uni2574 ; G 2406
U 9589 ; WX 602 ; N uni2575 ; G 2407
U 9590 ; WX 602 ; N uni2576 ; G 2408
U 9591 ; WX 602 ; N uni2577 ; G 2409
U 9592 ; WX 602 ; N uni2578 ; G 2410
U 9593 ; WX 602 ; N uni2579 ; G 2411
U 9594 ; WX 602 ; N uni257A ; G 2412
U 9595 ; WX 602 ; N uni257B ; G 2413
U 9596 ; WX 602 ; N uni257C ; G 2414
U 9597 ; WX 602 ; N uni257D ; G 2415
U 9598 ; WX 602 ; N uni257E ; G 2416
U 9599 ; WX 602 ; N uni257F ; G 2417
U 9600 ; WX 602 ; N upblock ; G 2418
U 9601 ; WX 602 ; N uni2581 ; G 2419
U 9602 ; WX 602 ; N uni2582 ; G 2420
U 9603 ; WX 602 ; N uni2583 ; G 2421
U 9604 ; WX 602 ; N dnblock ; G 2422
U 9605 ; WX 602 ; N uni2585 ; G 2423
U 9606 ; WX 602 ; N uni2586 ; G 2424
U 9607 ; WX 602 ; N uni2587 ; G 2425
U 9608 ; WX 602 ; N block ; G 2426
U 9609 ; WX 602 ; N uni2589 ; G 2427
U 9610 ; WX 602 ; N uni258A ; G 2428
U 9611 ; WX 602 ; N uni258B ; G 2429
U 9612 ; WX 602 ; N lfblock ; G 2430
U 9613 ; WX 602 ; N uni258D ; G 2431
U 9614 ; WX 602 ; N uni258E ; G 2432
U 9615 ; WX 602 ; N uni258F ; G 2433
U 9616 ; WX 602 ; N rtblock ; G 2434
U 9617 ; WX 602 ; N ltshade ; G 2435
U 9618 ; WX 602 ; N shade ; G 2436
U 9619 ; WX 602 ; N dkshade ; G 2437
U 9620 ; WX 602 ; N uni2594 ; G 2438
U 9621 ; WX 602 ; N uni2595 ; G 2439
U 9622 ; WX 602 ; N uni2596 ; G 2440
U 9623 ; WX 602 ; N uni2597 ; G 2441
U 9624 ; WX 602 ; N uni2598 ; G 2442
U 9625 ; WX 602 ; N uni2599 ; G 2443
U 9626 ; WX 602 ; N uni259A ; G 2444
U 9627 ; WX 602 ; N uni259B ; G 2445
U 9628 ; WX 602 ; N uni259C ; G 2446
U 9629 ; WX 602 ; N uni259D ; G 2447
U 9630 ; WX 602 ; N uni259E ; G 2448
U 9631 ; WX 602 ; N uni259F ; G 2449
U 9632 ; WX 602 ; N filledbox ; G 2450
U 9633 ; WX 602 ; N H22073 ; G 2451
U 9634 ; WX 602 ; N uni25A2 ; G 2452
U 9635 ; WX 602 ; N uni25A3 ; G 2453
U 9636 ; WX 602 ; N uni25A4 ; G 2454
U 9637 ; WX 602 ; N uni25A5 ; G 2455
U 9638 ; WX 602 ; N uni25A6 ; G 2456
U 9639 ; WX 602 ; N uni25A7 ; G 2457
U 9640 ; WX 602 ; N uni25A8 ; G 2458
U 9641 ; WX 602 ; N uni25A9 ; G 2459
U 9642 ; WX 602 ; N H18543 ; G 2460
U 9643 ; WX 602 ; N H18551 ; G 2461
U 9644 ; WX 602 ; N filledrect ; G 2462
U 9645 ; WX 602 ; N uni25AD ; G 2463
U 9646 ; WX 602 ; N uni25AE ; G 2464
U 9647 ; WX 602 ; N uni25AF ; G 2465
U 9648 ; WX 602 ; N uni25B0 ; G 2466
U 9649 ; WX 602 ; N uni25B1 ; G 2467
U 9650 ; WX 602 ; N triagup ; G 2468
U 9651 ; WX 602 ; N uni25B3 ; G 2469
U 9652 ; WX 602 ; N uni25B4 ; G 2470
U 9653 ; WX 602 ; N uni25B5 ; G 2471
U 9654 ; WX 602 ; N uni25B6 ; G 2472
U 9655 ; WX 602 ; N uni25B7 ; G 2473
U 9656 ; WX 602 ; N uni25B8 ; G 2474
U 9657 ; WX 602 ; N uni25B9 ; G 2475
U 9658 ; WX 602 ; N triagrt ; G 2476
U 9659 ; WX 602 ; N uni25BB ; G 2477
U 9660 ; WX 602 ; N triagdn ; G 2478
U 9661 ; WX 602 ; N uni25BD ; G 2479
U 9662 ; WX 602 ; N uni25BE ; G 2480
U 9663 ; WX 602 ; N uni25BF ; G 2481
U 9664 ; WX 602 ; N uni25C0 ; G 2482
U 9665 ; WX 602 ; N uni25C1 ; G 2483
U 9666 ; WX 602 ; N uni25C2 ; G 2484
U 9667 ; WX 602 ; N uni25C3 ; G 2485
U 9668 ; WX 602 ; N triaglf ; G 2486
U 9669 ; WX 602 ; N uni25C5 ; G 2487
U 9670 ; WX 602 ; N uni25C6 ; G 2488
U 9671 ; WX 602 ; N uni25C7 ; G 2489
U 9672 ; WX 602 ; N uni25C8 ; G 2490
U 9673 ; WX 602 ; N uni25C9 ; G 2491
U 9674 ; WX 602 ; N lozenge ; G 2492
U 9675 ; WX 602 ; N circle ; G 2493
U 9676 ; WX 602 ; N uni25CC ; G 2494
U 9677 ; WX 602 ; N uni25CD ; G 2495
U 9678 ; WX 602 ; N uni25CE ; G 2496
U 9679 ; WX 602 ; N H18533 ; G 2497
U 9680 ; WX 602 ; N uni25D0 ; G 2498
U 9681 ; WX 602 ; N uni25D1 ; G 2499
U 9682 ; WX 602 ; N uni25D2 ; G 2500
U 9683 ; WX 602 ; N uni25D3 ; G 2501
U 9684 ; WX 602 ; N uni25D4 ; G 2502
U 9685 ; WX 602 ; N uni25D5 ; G 2503
U 9686 ; WX 602 ; N uni25D6 ; G 2504
U 9687 ; WX 602 ; N uni25D7 ; G 2505
U 9688 ; WX 602 ; N invbullet ; G 2506
U 9689 ; WX 602 ; N invcircle ; G 2507
U 9690 ; WX 602 ; N uni25DA ; G 2508
U 9691 ; WX 602 ; N uni25DB ; G 2509
U 9692 ; WX 602 ; N uni25DC ; G 2510
U 9693 ; WX 602 ; N uni25DD ; G 2511
U 9694 ; WX 602 ; N uni25DE ; G 2512
U 9695 ; WX 602 ; N uni25DF ; G 2513
U 9696 ; WX 602 ; N uni25E0 ; G 2514
U 9697 ; WX 602 ; N uni25E1 ; G 2515
U 9698 ; WX 602 ; N uni25E2 ; G 2516
U 9699 ; WX 602 ; N uni25E3 ; G 2517
U 9700 ; WX 602 ; N uni25E4 ; G 2518
U 9701 ; WX 602 ; N uni25E5 ; G 2519
U 9702 ; WX 602 ; N openbullet ; G 2520
U 9703 ; WX 602 ; N uni25E7 ; G 2521
U 9704 ; WX 602 ; N uni25E8 ; G 2522
U 9705 ; WX 602 ; N uni25E9 ; G 2523
U 9706 ; WX 602 ; N uni25EA ; G 2524
U 9707 ; WX 602 ; N uni25EB ; G 2525
U 9708 ; WX 602 ; N uni25EC ; G 2526
U 9709 ; WX 602 ; N uni25ED ; G 2527
U 9710 ; WX 602 ; N uni25EE ; G 2528
U 9711 ; WX 602 ; N uni25EF ; G 2529
U 9712 ; WX 602 ; N uni25F0 ; G 2530
U 9713 ; WX 602 ; N uni25F1 ; G 2531
U 9714 ; WX 602 ; N uni25F2 ; G 2532
U 9715 ; WX 602 ; N uni25F3 ; G 2533
U 9716 ; WX 602 ; N uni25F4 ; G 2534
U 9717 ; WX 602 ; N uni25F5 ; G 2535
U 9718 ; WX 602 ; N uni25F6 ; G 2536
U 9719 ; WX 602 ; N uni25F7 ; G 2537
U 9720 ; WX 602 ; N uni25F8 ; G 2538
U 9721 ; WX 602 ; N uni25F9 ; G 2539
U 9722 ; WX 602 ; N uni25FA ; G 2540
U 9723 ; WX 602 ; N uni25FB ; G 2541
U 9724 ; WX 602 ; N uni25FC ; G 2542
U 9725 ; WX 602 ; N uni25FD ; G 2543
U 9726 ; WX 602 ; N uni25FE ; G 2544
U 9727 ; WX 602 ; N uni25FF ; G 2545
U 9728 ; WX 602 ; N uni2600 ; G 2546
U 9784 ; WX 602 ; N uni2638 ; G 2547
U 9785 ; WX 602 ; N uni2639 ; G 2548
U 9786 ; WX 602 ; N smileface ; G 2549
U 9787 ; WX 602 ; N invsmileface ; G 2550
U 9788 ; WX 602 ; N sun ; G 2551
U 9791 ; WX 602 ; N uni263F ; G 2552
U 9792 ; WX 602 ; N female ; G 2553
U 9793 ; WX 602 ; N uni2641 ; G 2554
U 9794 ; WX 602 ; N male ; G 2555
U 9795 ; WX 602 ; N uni2643 ; G 2556
U 9796 ; WX 602 ; N uni2644 ; G 2557
U 9797 ; WX 602 ; N uni2645 ; G 2558
U 9798 ; WX 602 ; N uni2646 ; G 2559
U 9799 ; WX 602 ; N uni2647 ; G 2560
U 9824 ; WX 602 ; N spade ; G 2561
U 9825 ; WX 602 ; N uni2661 ; G 2562
U 9826 ; WX 602 ; N uni2662 ; G 2563
U 9827 ; WX 602 ; N club ; G 2564
U 9828 ; WX 602 ; N uni2664 ; G 2565
U 9829 ; WX 602 ; N heart ; G 2566
U 9830 ; WX 602 ; N diamond ; G 2567
U 9831 ; WX 602 ; N uni2667 ; G 2568
U 9833 ; WX 602 ; N uni2669 ; G 2569
U 9834 ; WX 602 ; N musicalnote ; G 2570
U 9835 ; WX 602 ; N musicalnotedbl ; G 2571
U 9836 ; WX 602 ; N uni266C ; G 2572
U 9837 ; WX 602 ; N uni266D ; G 2573
U 9838 ; WX 602 ; N uni266E ; G 2574
U 9839 ; WX 602 ; N uni266F ; G 2575
U 10178 ; WX 602 ; N uni27C2 ; G 2576
U 10181 ; WX 602 ; N uni27C5 ; G 2577
U 10182 ; WX 602 ; N uni27C6 ; G 2578
U 10204 ; WX 602 ; N uni27DC ; G 2579
U 10208 ; WX 602 ; N uni27E0 ; G 2580
U 10214 ; WX 602 ; N uni27E6 ; G 2581
U 10215 ; WX 602 ; N uni27E7 ; G 2582
U 10216 ; WX 602 ; N uni27E8 ; G 2583
U 10217 ; WX 602 ; N uni27E9 ; G 2584
U 10218 ; WX 602 ; N uni27EA ; G 2585
U 10219 ; WX 602 ; N uni27EB ; G 2586
U 10229 ; WX 602 ; N uni27F5 ; G 2587
U 10230 ; WX 602 ; N uni27F6 ; G 2588
U 10231 ; WX 602 ; N uni27F7 ; G 2589
U 10631 ; WX 602 ; N uni2987 ; G 2590
U 10632 ; WX 602 ; N uni2988 ; G 2591
U 10647 ; WX 602 ; N uni2997 ; G 2592
U 10648 ; WX 602 ; N uni2998 ; G 2593
U 10731 ; WX 602 ; N uni29EB ; G 2594
U 10746 ; WX 602 ; N uni29FA ; G 2595
U 10747 ; WX 602 ; N uni29FB ; G 2596
U 10752 ; WX 602 ; N uni2A00 ; G 2597
U 10799 ; WX 602 ; N uni2A2F ; G 2598
U 10858 ; WX 602 ; N uni2A6A ; G 2599
U 10859 ; WX 602 ; N uni2A6B ; G 2600
U 11013 ; WX 602 ; N uni2B05 ; G 2601
U 11014 ; WX 602 ; N uni2B06 ; G 2602
U 11015 ; WX 602 ; N uni2B07 ; G 2603
U 11016 ; WX 602 ; N uni2B08 ; G 2604
U 11017 ; WX 602 ; N uni2B09 ; G 2605
U 11018 ; WX 602 ; N uni2B0A ; G 2606
U 11019 ; WX 602 ; N uni2B0B ; G 2607
U 11020 ; WX 602 ; N uni2B0C ; G 2608
U 11021 ; WX 602 ; N uni2B0D ; G 2609
U 11026 ; WX 602 ; N uni2B12 ; G 2610
U 11027 ; WX 602 ; N uni2B13 ; G 2611
U 11028 ; WX 602 ; N uni2B14 ; G 2612
U 11029 ; WX 602 ; N uni2B15 ; G 2613
U 11030 ; WX 602 ; N uni2B16 ; G 2614
U 11031 ; WX 602 ; N uni2B17 ; G 2615
U 11032 ; WX 602 ; N uni2B18 ; G 2616
U 11033 ; WX 602 ; N uni2B19 ; G 2617
U 11034 ; WX 602 ; N uni2B1A ; G 2618
U 11364 ; WX 602 ; N uni2C64 ; G 2619
U 11373 ; WX 602 ; N uni2C6D ; G 2620
U 11374 ; WX 602 ; N uni2C6E ; G 2621
U 11375 ; WX 602 ; N uni2C6F ; G 2622
U 11376 ; WX 602 ; N uni2C70 ; G 2623
U 11381 ; WX 602 ; N uni2C75 ; G 2624
U 11382 ; WX 602 ; N uni2C76 ; G 2625
U 11383 ; WX 602 ; N uni2C77 ; G 2626
U 11385 ; WX 602 ; N uni2C79 ; G 2627
U 11386 ; WX 602 ; N uni2C7A ; G 2628
U 11388 ; WX 602 ; N uni2C7C ; G 2629
U 11389 ; WX 602 ; N uni2C7D ; G 2630
U 11390 ; WX 602 ; N uni2C7E ; G 2631
U 11391 ; WX 602 ; N uni2C7F ; G 2632
U 11800 ; WX 602 ; N uni2E18 ; G 2633
U 11807 ; WX 602 ; N uni2E1F ; G 2634
U 11810 ; WX 602 ; N uni2E22 ; G 2635
U 11811 ; WX 602 ; N uni2E23 ; G 2636
U 11812 ; WX 602 ; N uni2E24 ; G 2637
U 11813 ; WX 602 ; N uni2E25 ; G 2638
U 11822 ; WX 602 ; N uni2E2E ; G 2639
U 42760 ; WX 602 ; N uniA708 ; G 2640
U 42761 ; WX 602 ; N uniA709 ; G 2641
U 42762 ; WX 602 ; N uniA70A ; G 2642
U 42763 ; WX 602 ; N uniA70B ; G 2643
U 42764 ; WX 602 ; N uniA70C ; G 2644
U 42765 ; WX 602 ; N uniA70D ; G 2645
U 42766 ; WX 602 ; N uniA70E ; G 2646
U 42767 ; WX 602 ; N uniA70F ; G 2647
U 42768 ; WX 602 ; N uniA710 ; G 2648
U 42769 ; WX 602 ; N uniA711 ; G 2649
U 42770 ; WX 602 ; N uniA712 ; G 2650
U 42771 ; WX 602 ; N uniA713 ; G 2651
U 42772 ; WX 602 ; N uniA714 ; G 2652
U 42773 ; WX 602 ; N uniA715 ; G 2653
U 42774 ; WX 602 ; N uniA716 ; G 2654
U 42779 ; WX 602 ; N uniA71B ; G 2655
U 42780 ; WX 602 ; N uniA71C ; G 2656
U 42781 ; WX 602 ; N uniA71D ; G 2657
U 42782 ; WX 602 ; N uniA71E ; G 2658
U 42783 ; WX 602 ; N uniA71F ; G 2659
U 42786 ; WX 602 ; N uniA722 ; G 2660
U 42787 ; WX 602 ; N uniA723 ; G 2661
U 42788 ; WX 602 ; N uniA724 ; G 2662
U 42789 ; WX 602 ; N uniA725 ; G 2663
U 42790 ; WX 602 ; N uniA726 ; G 2664
U 42791 ; WX 602 ; N uniA727 ; G 2665
U 42889 ; WX 602 ; N uniA789 ; G 2666
U 42890 ; WX 602 ; N uniA78A ; G 2667
U 42891 ; WX 602 ; N uniA78B ; G 2668
U 42892 ; WX 602 ; N uniA78C ; G 2669
U 42893 ; WX 602 ; N uniA78D ; G 2670
U 42894 ; WX 602 ; N uniA78E ; G 2671
U 42896 ; WX 602 ; N uniA790 ; G 2672
U 42897 ; WX 602 ; N uniA791 ; G 2673
U 42922 ; WX 602 ; N uniA7AA ; G 2674
U 43000 ; WX 602 ; N uniA7F8 ; G 2675
U 43001 ; WX 602 ; N uniA7F9 ; G 2676
U 63173 ; WX 602 ; N uniF6C5 ; G 2677
U 64257 ; WX 602 ; N fi ; G 2678
U 64258 ; WX 602 ; N fl ; G 2679
U 65529 ; WX 602 ; N uniFFF9 ; G 2680
U 65530 ; WX 602 ; N uniFFFA ; G 2681
U 65531 ; WX 602 ; N uniFFFB ; G 2682
U 65532 ; WX 602 ; N uniFFFC ; G 2683
U 65533 ; WX 602 ; N uniFFFD ; G 2684
EndCharMetrics
EndFontMetrics
        FFTMs  ,   GDEF1&  H   DGPOSr@    GSUB:  d  `OS/2     Vcmap\Z    cvt &    fpgm     gasp    @   glyfź  L head	z  0   6hhea
B/ h   $hmtxG?   4locaV #  *\maxp N    namen2: N<  !fpost1* o  cprep8 ,         =    )    )       <       i jj kl mz {
u 
v
w 
x
           
 N \ DFLT cyrl $lao  .latn :                              mark                  n t z                      
"(.4:@FLRX^djpv| c   I c   I a   G / u ^   D 0 v `   F d   J `   F 1 w d   J b   H c   I ;   j S   9 ;   j b   I ;   j f   M ;   i a   G a   G d   J G   - `   G a   G Z   @  Mg    jj  mz    >  D  J  P  V   \   b  h   n  t  z         t |w |w |w |w       t    ` ~ ~ ` ~ `    
   DFLT cyrl &lao  8latn B           SRB  
            F CAT  PESP  PGAL  PISM  XKSM  XLSM  XMOL  bNSM  XROM  bSKS  XSSM  X                     case dlig  locl &locl ,                   
   "           $     (     @    m  	         
w  O
v  L   I   


   c 
I    3 63E f  	 R y       PfEd   m`              ,   
            ,  
           ~!AEM?CXaw_csV_?	.[ex{-McyEMWY[]} 
 # & 7 : ? I K _ q     !!!!!!!"!$!&!+!.!H!Q!_!""" "#"-"="i""""""""####!#(#+#z#}#####$#& &<&G&g&o''''''))))* */*k++,d,p,w,z,...%..'       !$CLP CXatzbr1Ya?,0bw{ 0Th|  HPY[]_    & / 9 < E K _ p t    !!!!!!!"!$!&!*!.!H!P!S!!"""#"'"4"A"m"""""""# ####%#+#5#}#####$#% &8&?&`&i''''''))))* */*j++,d,m,u,y,|...".."  nfTRNMLKJ<:,
 ~mkbML qonkig#!	~yihfda_VTRNE@!NL74/&7)%߽$ 1+)!cHcDcBbbbb{u
                                                                                                                                                                                                                                                                                                                                                                                                                                              	              ~           b                                      !  !    $  A    C  E    L  M    P          ]      d      h      p      y                 ?    C  C    X  X    a  a    t  w    z                                      _  ,  b  c    r  s                                                                1  V    Y  _    a    #      J  ?  ?  L      M      O      P      R      S      T      X      _      b      c      d      f      s      u      {          	                      ,  .    0  [    b  e    w  x    {  {                               -     0  M  6  T  c  T  h  y  d  |    v                                                                                                E    H  M    P  W  
  Y  Y    [  [    ]  ]    _  }        4      i      x                               
        #     &   &     /   7     9   :     <   ?     E   I     K   K     _   _     p   q     t                             !        $  !  !  %  !  !  &  !  !  '  !  !  *  !  !  -  !  !  /  !"  !"  0  !$  !$  1  !&  !&  2  !*  !+  3  !.  !.  5  !H  !H  6  !P  !Q  7  !S  !_  9  !  !  F  !  "  G  "  "    "  "     "#  "#    "'  "-    "4  "=    "A  "i    "m  "    "  "  0  "  "  I  "  "  M  "  "  N  "  "  S  "  "  X  "  "  h  #   #  i  #  #  p  #  #  ~  #  #!    #%  #(    #+  #+    #5  #z    #}  #}    #  #    #  #    #  #    #  #    #  #    $#  $#    %   &     &8  &<  	  &?  &G  	  &`  &g  
  &i  &o  
	  '  '  
  '  '  
  '  '  
  '  '  
  '  '  
  '  '  
  )  )  
  )  )  
   )  )  
"  )  )  
#  *   *   
%  */  */  
&  *j  *k  
'  +  +  
)  +  +  
2  ,d  ,d  
;  ,m  ,p  
<  ,u  ,w  
@  ,y  ,z  
C  ,|  ,  
E  .  .  
I  .  .  
J  ."  .%  
K  ..  ..  
O      
P      
_  "  '  
d      
j      
p      
r      
s      
u      
v      
x Z Z  
} 
                                                                       	 
                        ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a                                   r d e i x  p k0 v j   s g w l |    c nT m } b    	 :  
v
w y                  dv qrst zwue  ##                  X!     #/      { { R  f         o      Z   !       7  = {f     s 
  +      b  b    #   3N { T\q#w !` j  # fy```{    w`  {  {   RNN f   f   f      HF?  {L     '5 o   o j o {   -{   {= f oD 7 f    } s    , %Id@QX Y!-,%Id@QX Y!-,   Py PXY%%#  Py PXY%-,KPX EDY!-,%E`D-,KSX%%EDY!!-,ED-         hh   @ O /1 0!%!!h sr) s  `  	 Y@.   			:TS Q 	
991 /0KSX9Y"3#3#ʁX2s2qe    R   @U Q 1 <20###Ѯ++      P@5 X	X	  
 91 /<2<<22<<220#333!!!!###!7!!7!
Siih ' T'hhii ' T'haabbN   ;   0 l@@( )%/0%W$ZXWZX!0  !()/%$,19991 /29999902654&'#.'7.54$?3.'+uV^PwTe;__#QhZ	0d/UH AYQ
LEtNUcEJ-.+<B#}(/V"    !      * 9 V@/7("	]"]7^(].\^]+	
 	%	4
	+:99991 /9999032654&#"4632#"&'%32654&#"4632#"&iNMklLNi@s..2H#)iOMllMMk@u--1?NjkMMljO0./t?``OikMMkjN0--uA     & 0 @a)*('0'	
		/.0 ()'  :0' 	-cWb!cae	
 $	0'$*1999991 /99990KSX9999Y"	>73#'#"&547.54632.#"326773>Jzk{;_hǼA|9#*zLq,_AGB͋fqGG֯!g4l7&&s^/Iuw96      Q 1 0#+    u  @h g
 
9991 0
#&5 ;<OJҒҢ:/W  3   @ hg
 
 9991 04'3 ;<NK,c/.Ŏ     J+  N@, 	ii
a
	 	<2<2991 <22990%#'-73%+f9s9f9PsPbybcy    X qy  '@ m	lm 
<<1 <<0!!#!5!CDDD  /  5@  :o n 1 0KSX9Y"3#)/ /Z    991 0!!P
! b  /  /@   : n  91 /0KSXY"3#</    B#  @: Q 1 0KSXY"3Tm  bo   / @	c'cae0 $ -01 0@/ /////////	/
/O OOOOOOOOO	O
O 	
 	
0/ /////////	/
/ 	
]]4632#"&#"&47>32267654&#"P77ON87PsTTߔürUUݓþP/E]bkP0F\g7PP78NOEE g`f__    {   
 T@*	:ccQ c		 

99991 /20KSX2Y"7!7%3!!9#`5!ɪuLJժ     f  \@ 99991 @ qca c/29990@ 9%!!77 54&#"7>32 n!7'r\~)paGR!#]jCD12`g*  N ( J@+ c
W	qcW qc#ae)
)  	&	)991 90 !"&'732654&+732654&#"7>32rl^&[b {Rq%{Tس~%%45uy|d_((!    ?   s@>  	
		  : cQ	
 		991 /<290KSXY"	!33##!7JٜFE$3d     T   j@8      : cWbcc Qe!  

!9991 90KSX9Y"!!>32#"&'732654&#"`!H/Y,i`XlH)T^OKժ|VPP!32ꮀ(&    \h  * ;@ 	ccrWbc(ae+  "+91 04&#"32.#">32#"&5476$32\tkzk$:K7DqPDNzNDb1KRqzy'%'fiǸwSa`צf        5@:c Q 91 /0KSXY"!#!
<^+     )f  # / ?@"c*	c$cae*t0 ' -!0991 9904&#"326.54 32 #"&546"32654&5vpykl(ֲ ~uf{xtŚi~&i)̳`|cr}[l     ?L  * 3@crc(	ca(e+ " +91 032654&#"732#"&5467>32#"&Jtkxk#:K7DqPCNzNDbKqzzٺ%'fiȹvS`a֦   X  #%   O@)   :n un 91 /0KSXY"3#3#'<Y;%9  #'  	 Z@.			   :no nu
	 
991 0KSX9Y"3#3#)</   X yw  !@ wv 291 90	5yR!÷   X`y   @ll  <21 0!!!!X!!B    X yw  !@ wv <91 9055X!R^^= F  `  ! @H  !!!: ccaS   		!	!"9991 /9990KSX9Y"#7>?>54&#"7>323#`MqkUGpcOi$meaiT<1[^[Ho8JRGB98~^lVFfV    u  @ o@5.1*@ x x-*x1!x1:A@=-.	='=4A9991 999990@	]2654&#"#7#"&54 327>54&#" 3267#  476$32}eX{c3QT_TX9xC-BS|n&		Ә`nїap}o?D9H=+#4~}՝{=ѰM/     
 v@B  	



  
: cyQ		 	
91 /<90KSXY"	!3#!##-+{         u@@    
 	 : c
	cQc
z 
	  !9991 /90KSX99Y"32654&#32654&#%!2 )mkÈ{Xo}bи}<ݮkff>^T|   s  2@| {c|{cae   9991 0%#"5476$32.#"3267T[rkPK)@P_GhUX5))
|*(?>QS{@=      j   P@( 	
:	cQ c
	 99991 /0KSX99Y"%267654&+ )DD6ErgTGh#}s?w/   5    X@0     :cc Qcz

	  991 /0KSXY"!!!!!!Xu!TV rh!wժF    \   	 S@,	 	 	 	  	:cc Qz	  	
991 /0KSXY"!!!!#o!\Vd ժH7    N ) a@3&) )#$"%  ):%& "&c("c|{cae*('&% )*9991 990KSX9Y"%#"5467>76$32.#"3267#7!Wu! #^8kPM)AQbD,N"#Dl%L`>?ZouC|*(?>SQ4arQ%#     {@B
 	    :cz Q

	  9991 /<20KSXY"3!3#!#v)vʋՉd+9     9    ?@"	
	

	:
c Qc
	 
91 /220KSXY"!!!!7!!Z>!:!!9ժ    N  U@. : {cc
Qe
	 991 990KSX9Y"'73267!7!#"&-Hg(!H8a=OSD.   J  j@;	
 		    : }

  991 /<290KSXY"33	##Apy  N  
  8@   :c Q  9991 /0KSXY"3!!q!eժ      @D
	 
  :
  }
	  99991 /<290KSXY" ]@&     
	] ]!!#	##nݺNs +/     	 @<	 	  	: }
  	
9991 /<2990KSXY"]@)]!3!#  3+3     R  ) !@ c	c'ae**1 0%267654&#"#"&47>7>32U/J\inU/L\i-+C'Xڑ++C'XڑÇf_f_hun\;y o \;y     3     h@6			 		:c c	Q 
		99991 /0KSX999Y"32654&#%!2 !## m|mu/Ͽlg     R  - 3@c %ca e.+"+.991 990#"&47>7>32267654&#"
++C'Xڑ@%6OU/J\inU/L\io \;ySotC_!\f_f_h       @R	

: c	cQ
	 9999991 /<9990KSX999Y"#.+#!232654&#HW6yj,mn{!)fۣ~jhybճWpi    { ' @:	
:
|qc| qc%ae(
 "(99991 90KSX99Y"8]@<' ''))))7 77

 

 ( ((%%%%8 8VVVV] ].#" !"&'732654&/.54 !2{'Q]byhd)bpXeJ
P;<GX('2--EBRZ)!:y(       5  @@:c Q 99991 /20KSXY"!!#!t!+ +ժ+    P  ~@K	

	   : 
ceQ 991 290KSX99Y"33267>73#"&546s˳mnY|--˲*_NGj=h;\\9>h?8;%~    +  J@'    : } 91 /290KSXY"%3!3V1ƾ+     R  `  @J
	


	  :
 }
	 91 /<<90KSXY"]@\

;u




		
)%&86736FFCEZVTUkfch
ezvvy	u

%] ]333##ZIyF +f    9  ~@H	


	   : }	 
91 /<290KSXY"33	##D1d       D  f@5   : } 	9991 /290KSXY"33#σub    	 9@:c Qc	 

91 /0KSXY"!!!7!1-")՚o    G@"   :~~ g  991 0KSXY"!#3!mV  dB  0@ : Q 91 0KSXY"#3ժǪ      C@    :~~ g  991 0KSXY"	!73#7X+ޏ     H  @
 Q91 290	#	#Ȳu-    m    /1 0!5/mPP    Pf  2@	  91 0 K	TKT[X     @878Y#ŏfx   H?{  . @a! "  
	:	 %	 	&W%")e,% &,/99991 /99990KSX99999Y"']@65$0%0&5'  '] ]"326?#7#"&54$!37>54&#"7>32wt+DRgX&} Hn5~uVo#lY3{IScԹ)L^e=	U[33'' h     ;T  % @L $#
	$#"$# !#$#$#%$$#:! 	 e$""#%!#$$#&999991 /990KSX9999Y"%267>54&#">32#"&'#3T.19eeS30:k>fRHL|b"/ZV^l\XVo{RTVϺlsVT    q{  4@WZ WZe   9991 0%#"&547>32.#"3267IZk[]߅YO%BUn<8?`S3')ܕbcb++:6YYRh>?  w  % @L 
	$%#:	 #	e#&999991 /990KSX9999Y""3267>54&3#7#"&547>32X.16feU018msѸAdPEK|aWWZsZXWrxCTVҼ!lvxW   bf} 	 & \@" 
W&Y#e' 	 &
 '99991 0@h	ho oooo	ooooo
]]>54&#"#"&547>32!3267t{,uigxjSm
Xr#x++֜,mVZ"eN 498       j@9
	: 

		  999991 /22990KSXY"#"!!#!7!7>3_`)&Sec/яN  ;Hy{  . @[	.. . ..-.)*+(,..: ,	 W  	) -/-,..#/9991 99990KSX99999Y"%267>54&#"#"&'7326?#"&547>3273 O.17pdr5RK%IP%:nPHJoe"ZTZjwwI,.uW[׸jp|aU   T  H  @R
	   
	: 
 99991 /<990KSX999Y"#67654&#"#3>323]W!{/tKbJ
G'QWab ^    =   	  h@7
:
 
 	
 99991 /20KSXY"!!!7!!3#f׾mnm-`/BC    V   r@@
 : 


	  91 990KSX9Y"!7!+73263#)ʵ_nJ-w   Z    {@:!!
 		    : 

  991 /<90KSXY"w ]v}p]]33	##%uͨXZFF?    7    ]@/ :  	99999991 /990KSX9Y";#"&5467!7!XY[ϭ
	#6IHP.     { + @e	
	

	$%"%#""%:!
 &$	
)$"
$"%	
 &!"%
 #
%" 
,.999999999991 /<<<299990KSX99Y"KTX ,  , , @878Y>32#>54&#"#>54&#"#3>32'}MVg}.3KT+}}/1JQ-}٨,o@K\DIm\6kw\u?8aq=:w``<?K  T  H{  @R
	   
	: 
 99991 /<990KSX999Y"#67654&#"#3>323]W!{۸ KbJ
G'QW`ab ^  uZ{   !@ e	1 0"324&'2#"&547>ppp_RJO⓻RKOVΊmvvˇqtx    Vh{  % @N%$#" ! 	: e&&#&.99991 990KSX9999Y"%#3>32#"&7267>54&#"%o-=dOFKzdQ-18gfU018p
RXлnvzTHYU\qZXXr{   bV{{  % s@= : e& #&999991 990KSX99Y"%#"&547>3273#"3267>54&=fRHKтd#ոU.19efR20:kTVϻ"pvxUUXV^l[WUp{     {  h@7			
		: c	
 		991 /990KSX99Y".#"#3>32-wL&kٸ(CՇGs(y,,`x~%#    s5{ ) @;! 	
 ! : ! WZWZ'e* ! $*99991 90KSX99Y" ]@`+ +''9 9I IDDY YYY)i iii)y yytty) ) '   ' //5 5G Gv]].#"#"&'732654'&/.54$325#GMHutQc%^S
CyX9-/f\b8{\##55w\c4!g!    d  p@@ 
	:  9991 /<2990KSX9Y"!!;#"&5467!7! =^wNfߧ	w+>3B5ovD/`>    }m`  @Q	
	
   : 	e 99991 /2990KSX999Y"332673#7#"&546]U!{ڸ!Ii	J%DOUyba~']     `  J@'!!! !  :  91 /290KSXY"33#`D  \  #`  @J
	


	!!! ! :
 
	 91 /<<90KSXY"]@f


*
J








*$:4GCDZZ	Tkfh
cyxy	u

!] ]333##\1j<צ`wBo      `  ~@H!!!  
!	
 
!
	!!!:
 
	 91 /<290KSXY"	##	3 >_4q`DTu V`  ~@F!
	!! !  !!: 	
 		991 29990KSX9Y"+7326?33>g6:`lQu<+ٷhkILJ]qTN^     N  m` 	 7@!!: 	 
91 /0KSXY"!!!7!?.!u!`ۓ%      4 @)(54. 	 $- 59991 @: 5'-	)'.)~)~'~ g599999990KSX@*	-.-..- 
	  9999Y#";#"&546?67654&+7326?>7>3N^3!xoIP/VaNH-
bq>=~2H6/OgK@&!3?9m{D%	2-UKn{'"       1 0#       4 @e	-.-..- 
	  :-5) 	)'.)~ '~)~g54. 	5)('*( 5.991 99999990KSX9999Y"7326?>7.546?>54&+732;#"#N^3!xpJP/UbMJ-
bp>= /H6/OfLA&"3@9l{ D%	1-VJn|'"  Xy  &@ l l 1 <2990#"'&'.#"5>32326yKOZqMg3OINS5dJt]F;73
!;?<6
7= s`  	 a@1 	: SQ
 
99991 0KSX9Y"#73#3B1ˁX1b+e    {?  $ V@3 WY	WYe%	  ""%91 2<990.'>7#.547>73? 1{HAK!K?7f7̢FV8f7<}u5&,-(!úD`16"+`႙      @F:
W qac
	
 9991 /2<2990KSX9Y".#"!!!!73#737$32%6y?&+rZ 3!Z/3<+-ُ/я     LB  / }@B (-	*-'!	)-0)$ !'$* EFE( $0229999999991 2299999999904&#"3267'#"&''7.5467'7>32d|[Z}}Z[|Z^.[20`0\^.[3.^Z{{Z\}~t]1]02[-^Z3].2]-_     /    @]:	 	Q 	
	9991 /2<2<290KSXY"!#!7!7'!73333!!wbbs7ln
o#o1ho#    @  <21 0##
 
     d7- 4 B v@E$%B<;5&%,XX 2aC$%5"<%&,/B;" %/"%8%/?%)C999991 9990.#"#"&'732654/.5467.54632>54&/-!G:gV|Ur))FS!J=pJ}Pv)%GTXkPRVU~&(bHOZ;VuEe5#Z7$'^Nb|	3UoI`?%P53o75p^34p73`S   F-   n@  99991 <20@@@@@PPPP]KTX  @   878Y K
TX  @   878Y3#%3#''       }N  1 I D@'
&> >2J- /,(8 (8*D/21 0.#"3267#"&54632'"3267>54&'.'2#"&'.5467>`:o:u8g24r=г=rjKKMMKLijLLKLKKkZZ\[[[~}[[[\ZZ/lhȬJKKjhKLLLLLijKKJgZZ[~}[[[[[[}~[ZZ     
 + / o@?	 ., #",&a0.-)/,0
	 #"6)609999991 9990"326?#7#"&546;47654&#"7>32!!ٔI<oV5VmǮX`EHKA\PPV7B|=@p?DxfGB!#}3{  J R#   3@	 u
	 CC991 <299077R+#}R+#}#RR    Xsy^  @l  1 0!#!X!^? /Z    991 0!!P
!    }N   4 L @I.	
	.

	:
	
 
A) 5)M 	--
,G(#);(#*//299991 29990KSX9Y"2#'.+##32654&2#"&'.5467>"3267>54&'.XXP:&rk1=-7ffZJJDZZ\[[[~}[[[\ZZ~jKKMMKLijLLKLKKLbeG]C;P*T6?>5VZZ[~}[[[[[[}~[ZZgJKKjhKLLLLLijKKJ b+  @	  991 0!!V   +u    @	 a#$#1 02#"&546"32654&hAu,-/OomOPqp1.-rBoPPlnNOp     X  y   .@	l l 
<2<21 /<<07!!!!#!5!X!dCDLI 3  j@5  : a K9999991 99990KSX99Y"!!?$54&#"7>32!9J?3zST}5vrni3=%)o^    ( H@* 
	 #a)
  	KK&	)991 90#"&'732654&+732654&#"7>32HNЯB;Ch2pUYHHavVV*e<Gz7yr\[Gy\NC@jP@33sd[Ot  ?ff  / 1 0 K	TKT[X     @878Y3#uf  V` & @\
	& #$"%  	  :%		c"e '&'	%  '9991 2<99999990KSX999Y"3326733267#"&5#"&''-mf!	 (J!CO5b\| mV
H6[a 
UIRLSS    };u  g@0
	: Q 99991 290KSX9Y"!###.54 /эZfN    /`  /@  :n   91 0KSXY"3# ;`   us     \ 
 X@.	JJ: 		`	
 991 20KSX2Y"3?33!qu
c)t'+n  )   ! 7@  	a" !"66"99991 0"&5467>3232654&#"!!yA8=Z@7=cWjcWk\WCJNXBJNTixؗix{    R Z#   3@	 u
	 CC 991 <2990?777R+^#T+^#^R^^R /m{' V' { 
   /y{' { &
   t V /m' V' u 
    p`  ! @J  !!!: S WYc "  		!	!	"9991 9990KSX9Y"33267#"&546?>7#73PojUGodOj%lebhT=1Ϛ]]YHo8JRGB98~^lVFfV   k& $  
 3u  Ek& $  
 3u  3m& $  
 3u  ^& $  
 3u  LN& $  
 3u   m   ! @Q !!!!!:	c	[y  " ""!"99991 /<9990KSXY"4&#"326!.54632#!#Y?@WW@?Y33srPF#Z?YWA?XX`#kErrQ {    o     @P

:ccc Qcz	
	 91 /<20KSXY"!!!!!!#!!V3!jd!K\5ժFժ  su& &  d    5  k& (  
 `u 5  k& (  
 `u 5  m& (  
 `u 5  N& (  
 `u 9  k& ,  
 9u 9  k& ,  
 9u 9  m& ,  
 9u 9  N& ,  
 9u   j   k@;
:	cQ c 
	  99991 /220KSXY"%267654&+!! )#73DD6Er[kgTGhщ{}s?+/ŕ{     ^& 1  
 /u Rk& 2  
 +u Rk& 2  
 +u Rm& 2  
 +u R^& 2  
 +u RN& 2  
 +u   ;T  .@
 	
		 <91 <290	7			^t^_t\t%\^u^uw^        8 o@;)9$863 '$*73(c$c3a$e9)9(*-7 	'-6	8	-9999999991 99999990%3267654&'	.#"#"&''7.547>327B^Bp=26yf[8q<2:$iSXQ6^cwhTXM6Td,2'{#)u'+l
<[Z..@:V++}@  Pk& 8  
 7u Pk& 8  
 7u Pm& 8  
 7u PN& 8  
 7u   Dk& <  
 9u  3     @I :c cQ 	999991 /0KSX9999Y"#32 !32654&#FH#3`i|m縘gb     7f 5 @[#$#$$#45 51203  5:3*$	# 0W0e445$'#  35'*- 	'' '-56999999991 /990KSX999Y">32#"&'732654&/.5467>54&#"#*˰		)<3sQGA;G6U=Z8˲h\yۻqϠ!F$`&=,'UW !}l4R?/D\?$OY H?f& D   C    Hjf& D   v    H?f& D  d    HZ7& D  v    H?& D   j    H?N& D  t    {   OP@'O'OO' ';:987<6'5':+$!F@6? $O4%W$!(@W?<IC.(ePOL?965 F$%+4@L'1P99999991 2<2<29999990KSX9999Y"@`>#>$>%0?0@Z#Z$Z%Z&ooollloooooj#j$j%j2o3o4o5oNoO{#{${%{&#$%&%9#9$9%2?2@I#I$I%I&j3
] ]7#"3267>54&#"!3267#"&'#"&546;7>54&#"7>32>321}i##N;Ze=D;SjaUF5";Hj/]uUM1L#O8Rv2PyH'!b3<OJ8 FOR[nNX:2)+SMPP{X+LU+)""B?>C'\  uq{& F  h    bff& H   C     bff& H   v     bff& H  d     bf& H   j     =  f&    C    =  If&    v    =  f&   d    =  &    j     wj ! 0 @L   :! % %+	e1(  .(!.(199991 99990KSX9Y"#"&5467>32.''%'3%.#"324&f{qKFMLGL05)h %P,sh/֗htx~io{&V:^\VȑX\xA@e  T  V7& Q  v     uZf& R   C     uff& R   v     uZf& R  d     uZ7& R  v     uZ& R   j      X yo    '@ l 
	D <<1 03#3#!!j!     / 	 ' 1 m@:'2"1( 
+%&""+"e2'2&
1( .%..2999999991 99999990	324&.547>327#"&''.#"N4PKQߓNx.p]{ RJOJ{3w\%I49W.`0Pnwu$$M2Tmvv%%L'  }mf& X   C    }mf& X   v    }mf& X  d    }m& X   j   Vf& \   v     Vh  % @M%$#" ! 	: e&&&.9991 990KSX9999Y"%#3>32#"&7267>54&#"%or=dOFKzdQ-18gfU018pRXлnvzTHYU\qZXXr{ V& \   j      i0& $  
     H?& D        m& $  
     HJH& D      u.'u   $   Hu?{'un   D   sk& &  
 u f& F   vZ    sm'
 u &   qf&dZ  F     sP& &  
K    q& F  K    sm& &  
 u f& F  eZ     jm& '  
 *u wg
~9Q?} G    j     w  - @|
	 "! #+,-+,-*:	  +	"e+%.999991 /<2990KSX99999Y""3267>54&!7!733##7#"&547>32X.16feU018m>IAdPEK|aWWZsZXWrx5yyTVҼ!lvxW    5  0& (  
    bf& H  #    5  m& (  
    bfH& H      5  P& (  
    bf& H      5u'uh   (   buf}'u   H   5  m& (  
 u bf& H  e7    Nm'
 9u *   ;Hyf&d   J     Nm& *  
2    ;HyH& J       NP& *  
2    ;Hy& J       N'  *   ;HyN' Q. J    m'
 Ku +   T  Hm'
,u K     4    3!733##!##73!7+*++ ʊ֊׆ ,*,9Q    ,   #  #654'&#"##7373!!67632
(p~ZX!{} }a >C^^r>%JA1B)G[Xzz`21qBiK 9  ^'
 9u ,   =  97&v       9  0& ,  
     =  +&        9  m& ,  
     =  JH&        ]u& ,$ ul    Au& L up    9  P& ,  
      =  ` 	 C@": 	 

991 /20KSXY"!!!7!!f׾mnm`/B       %73267#7!#"&!#3!73#w)+tD]d%}4@fC   >OSD.ê     S 	     !!!7!!3#!7!+73263#-׾mnm-)ʵ_nJ-a/BCwm'
 u -   Vf&d     J&h .     Z'  N      `   33	##Y[>vҢW`/ZFB?   N  Il'
 7v /  7  Im'
 7w O   N
&l /    7'  O   N  R'
~ n /  7   '
~) O   N  b' yc  /  7  9' y;  O       e@8   	
	

	:
 Qc
	  	.99991 /90KSXY"3%!!'%sr)Iqq dqJdϨ3hd     X  Z  @K :  	99991 /990KSX9Y";#"&5467'!7!%XY[ϭ
	;Jss;JX%6IH#O(c$)b     r'
 I| 1   T  _m& v Q    &( 1     TH{&Q Q      m& 1  
 u T  ~f& Q  e0     '^I   Q{   (V   +7327676&#"#3>32&nnZ98#T|'#'L~3ij>>Wot     }Vn{ $  +73267654'&#"#367632\&moZr'qXW!{ڸ!D]^s>%6ij|~A2B)G[\``21qBjJ    R0& 2  
     uZ& R       Rm& 2  
     uZH& R       Rk& 2  
     uf& R        #  H  " b@7!"!"!"!""!:ccQ  c"!  #91 /220KSXY"%!"&5476$3!!!!";P!B5VR!WH!k!v/1}{>᪪ђlêFlm7~j=xz    { , 8 P @\-'@?6758'@@?'@?'?@?:8/- 59	-
E5-
W
5*eQB8/.-N
	 N2'N'!Q999991 2<99999990KSX99Y"o. ]@oo	o
ojjo-i/o8	]>32!3267#"&'#"&5467>7>32!7>54&#"267>7>54&#":Pz
aUF6#;G_":Q;'8uP|4IB=Sk7<`(HCA_(J?@+TZ[nNX:2)+E@AD6NyGfkDVL8GNGB,jl MTEF5`V$QW     l'
 7v 5     6m' v   U   &} 5     3{& U       m& 5  
 Bu   f& U  eZ    {r'
 I| 6   s_m& v V     {m'
 ou 6   sJ&dE V     u{& 6       su5{& V       {m& 6  
 9u sNf& V  e     u5& 7       ud& W  y      5m& 7  
 `u   & W  
~W *    3   !!!!#!7!!s!-p	!pp!	p+ժA@      V !  !!3#;#"'&54?#737!7!>^--	&uE+--+>1%91S5e:J> P^'
 7u 8   }m7&v  X     P0& 8  
     }m& X       Pm& 8  
     }mH& X       Pm& 8  t   }m& X  ty Pk& 8  
     }f& X       Pe& 8  u   }sm`& X  u R  `t& :  
 J| \  #m&d Z       Dt& <  
 R|Vm&d \       DN& <  
 9u  r'
 I| =   N  mm& v ]      P& =  
2    N  m& ]        m& =  
 9u N  mf& ]  e          !#!7!7>;#"-)&_`яNSe    ;T  /  >32#"&'##7373!!267>54&#">f))HMmm|b" Q 0T.19eeS30:kTVϺms@?VTzzZV^l\XVo{   T    ! *  32676&#72#!"#7>332676&#Wt|0"}'5E8
#~2j/>orqp ˘//&r1F݇   M    ,L    >32 #"&'#!! &#"32<fʫ56d.$VS^*)_RXWS     D  ` 
   327676'&#'3)'jWWBBx@"(Fz>=DEdgh=    in  !   &#"32>32#"'&'#'S^[Y*)/0;fUV56dDCYmnnnRRX랝+,S|    1   70732 #"7>3  !"&)=X <<VV)U[GHt[5=@0230@=))gj)     08g "  %#  !2676;".#"3267PU[G:YL 5nT?7?V/;XU5))p*32j>5F=@@=   C !  %#  !2676;".#"3267DSRkbF@)JoZ98<])(`M9++8(8rGj>>~A:;>  j     H      3  !#"#7> 6&!#VJKv6E8	#a @@ //&r1FHKw  d      #";7!! &7676%3器~' F(H}Xɉ{+ˡd  v 
    32676&#"7!#7#" 32aS]))_Y$Ҹ>dˬ65%fDFLT}SW;7,,R  =p{  6  %2676&#"#"/732376?676'&'&'&'& 32=*)e)*f!2f0"=DHH
	 JD,
	%i\^78088'L	(=\$+/!-&     3     	!7!!7!!7w!ir!VT!+  t\    7!'&#"7>32  !3276u,#(VV)U[LLK'!(_PS{@=))yz~#vu    H (  .76$32.#";#"3267#"&7>|i#0Is$`Y bp'ng("{  (({smz45$&Ε VM   !!!!+7327677"U!%noZ98ժH#ij>>~    GV $  +"!!+732767!7!767676;b..)deF1i/0(#i,AJb)(gc``01N\'    '@g (  %#  !2676;".#" 3267#7!`vHG^QoT?6B_;=Ck0N {KMonj>5MI!   GRcI    ! 7	3	3 327P1ch8=?un+J       &  #767673#"'&76&#"#36763288C=PP-Ú77*8CBH"{.vhUUum14IBe`` 1  9     !7!!;#"'&7r!=!ǯ !Z ٪HE'+z=>jf   7     !!3!!#!!7!!7!!Z=!p	!O9!!9O!pժi@      676'&0##3lT%-WEq"ˁr3r%Bsh  T     7676;#"33	##&nnZ98`=wҢWij>>~ZFB?         ;#"&?#73!7!;+6BY饌&&ߠ		|~ĎɎ   d   %	##''3:\.Ze:dn@Jo
|   % "  %#"&33267332673#7#"&0wJF8Ǩ.FPS-Ũ/#JIQ-ŧާ,p?LWrHE!
s{
p{+`<?F bV   33#+72767y&eeQ443+ij>>~     }R]{   #6&#"#3>32\ڹOq"{ڸ!Ds~d``c     t\ 
       32'&#"32767\LLLB,#(_S;#'!(_P:z~{{vu  & 2  {& R     *6    %63273# &#"327-_8>Pݯӱ90!@@CXY+͠v~^    }R4{     %63273##"'&7327&#"}UWeRްeI:MV~,`/s%+n+͝u"mmB   x       +#"#7>3! 27676&+D[m^t6E8
#~'^!]mM//&r1FE8D     	V_  *  3267'"#"67232 #"&'#76;#"I"*Q	b@{˪65fo:DN5/2FIWS.O     Z  "  #.+#3323 654'&#JX3{h.icG"4nPcEg3->nhy]oQك^Y% P0E  I '  >323267#"&7>?>76&#"hqV'qhہ*ti)$o^g''Ƞ/ vp{DI--յ1#hcq<;  3{ '  >323267#"&7>?>76&#"sWZʸHszTq%pS Mjl}SX9!!1Yc55##}#JKSQ..      V>  !  6'&#"3;#"'&7# 76!23n|wZdAE#)*/@)-0A3=g)(V\`@o     V    !!;+73276?#"&7!7!>^wKu&nnZ98(ϊ'w+>|bij>>~`>   o  4   &#7>3!!#6R8	#!-/7&r1F+    j   !!;#"&7!7!7676;#"^wKuϊ'w*&nnZ98`|b`ij>>~  V5   ;#"'&47!7!!0ߥE-+!s!-ujDE?7  8' 8v    q' Xd  |      M     # #"67#7! 76'7"a6$==$""+-4-+Fj"n8!L	IL  X  (   !"'&733276'3hHE& !Z-+Fia6%<jf?~>>	ILɸ      C   	#367632'&#"u2-P?b("8t*b7m*9	 VZ`   +7326?3676'&xSU|lLbN1ôJY]j,QN$h:=HTN~)+)
=     
     !3!#!!7#7!!C!P"!e!"՚i@    X  yb   !!!#!!7!7!!K-!8Z! dbҖg     7676'&+7!7!2! $7UU{rsNO!! 2ivZA=++KKKKIJG8+lh      3! $76767637!!#" 76++fjki !!kjUU{rs݊hl+8GJIKKKK    Ln`    7!!#"3267# &767676Aj9e@zy38GFmgLxkj^V5zrܨJKKK21%݊hm*8 VC` '  2767# 5476%$7654#!!7! TQSZ#^RYaQ.$Sej!NG6&, 5%b
f8d1a	w       [    6323#!!7!7!67676'&#"$$?1SP!Ex!u!!/"$4Dc``JU?T<><        % 7676'&#!!!!2! &73<d
NOG!/V"iwZ@=+RI#S+3IJ	I8+le [tG)  L`    7676'&#!!!76!"'77eNOԞ$YgxZA=+&-5IJ,39+lhJc  A    6'&+#7333#!"'73276;F>5 66 W^#$!zFrO_}nw~FVrA V{    #367632 7654'&+";-!DZҸ7%
S0
*vBz
FN1pJ[05W2(E(A r  _   3#+   )'   6      v  p   3!!!!#!7!7!7!O_!._!dd!_.!_l   s  `     nm& $  
 9u Hlf& D  e    9  m& ,  
 \u =  Nf&   e     Rm& 2  
 \u uf& R  e2    Pm& 8  
 Nu }mf& X  e    P'
 2 'g H 8   }m2&    q %< P'
 `'
 2  8   }&    H< P& 8  '
 2 
 h }&    T< P'
 2 '
 n 8   }m&    B< pW{   Hx2&    q M<  s'g H& $  
   Hx2' q M<  o  0&   
   &        Nm'
 9u *   ;Hyf&e   J      Jm'
 9u .   Z  m'
 9u N   Re& 2  u   ueZ{& R  u   Re0&  
     ueZ&      m'
 9uy  Lf&e  5     Nk'
 9u *   ;Hyf& v   J        %2763#"'&7!#3!36)44:>HH8hEՊ#w+w57Of'MSb9du'    k& 1  
 Fu T  Hf& Q   C    o  <k'
*u   f& v        k'
 +u    /f&    v      'k& $  
     H?f& D        Wm& $  
     H?H& D       5  k& (  
     bff& H      5  m& (  
     bfH& H      9  k& ,  
     =  f&        9  m& ,  
     =  H&        Rk& 2  
     uZf& R       Rm& 2  
     uZH& R         k& 5  
      f& U        m& 5  
      H& U      Pk& 8  
     }mf& X       Pm& 8  
     }mH& X       {&   6     s5{&6  V     5&   7     d'    W    "R+ 2   76$>54.7%>54.#"7$32+..;.9!)Fd2";͈:_$m`0*GL*(Ϋ/\KJ99&(?SP,Fu3~}=Uc
6Hj+v~}<2I%     RO{ 3  7,54&#"?>54.#"7$32p/M1!]P;E%AE(D!&c_'!5!:3%3?=a.pFTVU@l)=;Z:tO#C8;+2)!  m'
 Ku +   T  Hm'
  u K   lN  ( 1  %7276"'676#"'#7&/'&'&323 2676&" C{!h+<G.-wi	-C[d>>65Pjq SBԚ))DԐ>>t#O9Y%Z5H7WSCT   4V6   !!3+73276?!7!m"%noZ98՚o*ij>>~   Vb   !!#+73276?!7!y- %nnZ98|! bܖij>>~%   P& $  
     H?& D       5u& (  2    buf}& H  2    R'g H'
 2  2   uZ2&    q %< R'g H'
   2   uZ2&    q (< RP& 2  
     uZ& R       R'g H& 2  
    uZ2&   q %<   D0& <  
    V& \       *l    %7276"#7&'&7!7!676#"jC{!-wi $h+=F>O9aJwt#    	l?{  .  %7276"'676"'#7&'&?6&#"#3>32Cz"g$<F.-wj $..ZIQ,}ڧ-o?%$9>>r.O9aJs{``<?ie  le  #  %7276"'676#"'#7&'&7!7!3!!^B{!i*=G--wj!$o+>>^>>t#O9aJ;>   V`   !7!+7326)ʵ_nw   B@   1  2676&" &#"32>32
#"&'#7#"323T(~*))(S'PP~))(PPN+n=yO56z<Kn+m<zO65y=L
poTzRRXWSSW;7WSC   J{   1   &"2 32676&#"#"3273>32
#"&'#T(~*))S'PP~))(PPN+n=yO56z<Kn+m<zO65y=L
poYTRX7;WSSWWS w@     3#!#'7!'#SVhs"C`V>ZBC{J8FFJ!@ w@  )  	'&#"# /'& !27&'3267COV<eU[wZ.3G[M74YV	EXU$ ~))F/ndJI~' @=   (  	&#"# /'&7 !27&'3267wJ9H)OSRtM
*$6aQI&%uNh	G`M7S]++	L8rMq;>     L   3!!!!!7!ˑ!O!dp!iA Y    	#!7!7##'6{-!;V2J\Z[|BJ8jF   `{ 5  .#"3#"'&/&/7632676/&'&7>32`#FS}NGo!x{z#L'Tf@G)^.%{hA>zB:: Z9..QSKJ#}^R
~$=&[5#`cY1!GJ!  b   !;#"'&/&#?!- .{#L4[Tf@G1Z b ~$=&[?%  x     "#7>3!2##326&#6E8
#~'*+uʕʌ4//&r1F
      '  32654&#%!2 )#7332654&+3Xo}bи}<G'È'/>^T|nȮkfƕ     67#733!33# &73276!P}!}ˑː!+_Jj۬V,3"={;ww@     
   	#!#+        32654&##.+##73!2#f~PHW6yj,mnv{z чV/pijhybw    v  {   & !!##733>32Z+" XX b(CՋRyXЙ<Ĥx~H   oe{  )  32676&#"3>32+3267#"&'.=dl%| Nƀ%o^e$mX-+qpepӺ)Ld_y64''RR2  {    73#7#" 32  676& ٸ>dˬ65&eT^
))`ыSW;7WT   04{    %#3>32 #"& &  ٸ>dˬ65e(T^))`
\SWW     
 '   &#"3267632 #"&'#7676;#"!S^*)_<TWfʫ56d&mpZ98YRR,,WSij><     U{   >3  !"&'732676&#"RRkQE%=])(`M%++*,A:;>     lw  ,  %3276#"67&'&76!2&'&#"63 !"8Ke2&u45UNME!FJJPyyPMv+/#R9K9DhT#3#+qrfr   Vs  $   2676&"3;#"'&?#" 32tSB՚)*EBpH833&5EEP56QkTC~>>jiáS,+;7W  Q  $   2676&"%7676;#"#7#" 32:SB՚*)EF&[]8H0/߷5P55PkTij>>~SW;7WS    CW{    6 32 !"&'7326?!706&#"1/45[a$bX#]^"++98ȷ    pW{    7!76&#"7>3  #"73267q#Xx$q[54ֿp/ Z89++"Ţ  { 
 4  %676732#"'&7&'&7>3273;#"'&7i&	,g6G3
'ROQT"SQYP!10-'֊>8E#Z`vg'#d4*,#)u10`Z  {h{ 0  &'&76$32&'&#";#"32767#"'&7>r53QXZd cTTL@?PPc_^T"f]^Vyx _A@^VJ=+,nQb54"[\m  BA{ 2  #"&'7327676'&+7327676'&#"767632<< U["EXWdeeKIQPACKYYm n]_PNM_JJm\["45bQ77,+=J++^@A    { B  #"&'7327676'&+7327676'&#"76763273;#"'&7'^)* zy?B"2AAKNO54qv|f>?/0h8DCS!SGG<M>ÊO 0/,'=_JJm\["45bQ77,+=J++OAf10`ZȢA  Wy  +   27676'&+7327>'&%672#'&RWSvAM1&F3/]TSg]OuvJBN^B6@JN67=6s-VWggVW>X    Vy`   !+73267!7!!7!y \%ݥZr\ Fbh(Ӝ}}ؤi    JH & 0  7676;#"#"&'7326?#"6 3"326Y&\]19)(1>>#Fy6y"6X3.SmPIng\"ij>>~.,}^\::b    H\ 
 &  0"326 #"&'7326?#"67630!RPd1LN$YC">mĭ3,9b.,}^\:㣝  y   !  %#7!#"76!2&'&#"32b7AgN[R55>dep!ijSGyyOMM">KMrqfqr   kR`    7	33 3276>-X.@uq|22<BVpd       `    	33! 76%3276v! #6{qJq񧧧`;hh?  R^   332673##"&̇Op!{ӹtDq|JyVad    %     >32#6&#"#7676;#"Ds},Oq"{&moZ98
`cJij>>~    NV. -  >32+73276?6&#"#7676;#"Cs},n&nnZ98nNq!{&nnZ98
`cʀij>>~6ij>>~        3#!!!!!7!!7!!.bb <mnm< Fˏ5i    `   !#"'&70!7!;ͥFE'o׊BZjf;6~|    2  `   !!!!7!!mnm`B      y &  ;#"&?&#"7>32!7!3267#"'I%<?饌&'-/OV"ZS)&~ߧh[FV"VOT`(?
;?<65=>;7-       "  ;#"&?67# 7632!7!3#'6#"3`CY饌&%=&06%Kߘ6M\|~¾󠠄K9    YVz   ;#"'&7!7! BYLG'|~jd    L .  ;#"&7#7!!2#"'&'7327676'&+7!0Gg%W![T\G/-+LKMM&9W_^;<!|~A$8+lh%12KKKJ  D^ "  %#"&33267332673#7#"&0vJF8~}.FPS,}}/$JIQ,}ڧ-o?LXpHE!s{p{`<?F   C5^ "  %#"&33267332673##"&0vJG9~}.FPS,}}/$JIQ,}ͧl-o?LXpHE!s{p{)<?F     !V{ /  >32+73276?#6&#"#6&#"#3>320vJF8e%ffR54}.FPS,}}.#JIQ,}ڧ-o?LWHEjj>>~s{p{``<?F   V{    +732767367632#6&#"*OP4C%&޹!EMLX??-?]oSS ``01te22wx\__   AV{    6'&#"#3>32;#"'&]pSS {ٵ!EX?>-?4),OO__^edwxH10``     { 	  !3!# .ү{yy   H{ 
       #"%"!6'&!3276ҽ8888]R*7,3 $3]C{-m__mOmmO  E  `    !!!!!"'&763#";_9pFbb65oo**EE`ݛlklm    0{  7  3276?332767676'&#"#"&7#"'&76769%2"9$#u#$ 09*&%P;	-nMO/Mo',2)`pB?UO++OU=]pxeY􎃃B     cW} ! * 3  #7;#3+737&'&76767676'&1I^78v//L^87{J9]*)2eU>^)*3"ouu{{BnmBHImnI   `   7327673#7#"'&'##,gg%sڹ"Nfg	efNf21  J
   7327673#7#"'&'"#,di$ŹԹ"Ngf	eif21     gV` #  7327673;#"'&?#7#"'&'"$,fh%si1F>?)"Ngf	efN 10``f21    VG{   &'&#"#367632#"#,gh%Ź,"Ngf	ef
f21   VG{ #  &'&#"#;#"'&?3367632###,gg%si>@*"Nfg	ee10``֔f21   0  {   676;#"!!7!))eej0-rmnib`02   0  {   !!7!6'&+732tinotkѴ??V00`b    `  !  #&'&+#!2327676'&#4**#rj)44a\\\ FBwHH77w66^q$%'`PQi++ST**     `  !  #!3327673327676'&+eT z||ڹ\aBBUG>@wGI86wSiQP`'%$q^667**TS++     rVf{ =  .#"#"/;#"'&?327676'&/&'&76$32f"FZLM**<CDZ_i??*\^^aNO*+=>=f?((**T@%$!*ML[[10``=Wg5-,QK((%$JK     )V   676;#"+73276_xr#hbîc-/*ceF1i0/pR[V((h)``01    V   !+73267!7!!7!7>;#">\&ܥZr\ F=$˳c]uh(Ӝ}}ؤiNQg cVoe   ;#"'&76'&+732i1F@?+cAJ(10`a(h((VaY  V  !  #"327673## 76!3676;#"w	|n*'Be*)#ibîd-/3A0Ǜo@`\V()g  G`   !7!6&+732!!
>^vKuω'v+>>`|b @W   !!;#"&7!7!~>^Kuω'+>|b	>  `  !  733!33##7#"&?)32763 bb:bb X"Wcau-./|i^Ĥ<f21
PO_U     a` #  7! 7676'&'7!#  '&76767 +zTW kk/1X+ ^"!.>rq,HKEioabdo?ܤdqnܑkmh    q`    ! +"'&7#7!?27676'&'&B^"!.F??*oSg4kk/8QDdqn``;612abdw7,     `   !##3è}T`      U`   !###33Uŭtjj`j    
   >;#"##u|lLbM2ózHTl      }   33#ff}8    ~V`   !!;#"'&?!7!k \ ;5*+)!`ۧ10``%    D`    !#67!7!7!332!703276#H!Pej!t.$	
FY3<;4% 6[  L`    2!"'&'7327676'&+7!7!{juZA=+^``c&KmqsMO!ej 8*mh%12KKKJ  #Lk` $ -   76676'&+7!7!2#6'07&#"327L'2)
NO!ej iv[@=8Q 9tŃ	qL;*1JJ$8+lgqUeR8y*K/K  '  L   327676'&#"76763 #?lI,MPTRV!SUTUlT$!rLbAr+#}swt         #&'&7676!2&'&#"3YV!$UNME!FKIPyF+@ws}#+rAbLr  8     3!"'&'7327676'&#YV!$UNME!FJJPyF+@tws}#+rAbLr  [J #  676!2&'&#"32767# '&7)$UMNE!FKJPyF,MPRSV!STUUjV$>}#+rAAr+#}   ^ -sB   )  67632  '&7 676'&#"67632"'&^*}{)*P}}RQQQxx	((/.		O^5ԜИٍccƍffff.""""./B!!  a  	} 
  &  327676'&#327676&#%!2#!F]8<#$^6U32	CV==cn10yyc36?\13+*?.Vi?>NNuTT     z#y  +  ";#"3$''"'&7>7.767632tCL1&E3-uTWQaMBcSTg]Ovu6=76NJ@6sx>WVggWV      0  %#7!#"'&76325676;#"#&'&#"32Z6tg>\]443D*PON(&;7a`P452^`03j&Brqfqr     {   3!3#!# VVgg{A     4V     3#3## 76!3!7#"3276Z-ٵ)Ad+(;w	{i0p?`я3A0   NL` 
  ##	33¹}	kLT#     {   3!!dʽ!{/    "V<  )  %#"'&76327676;#"#
276'&"n?LL]ONg]99&*POO&&κO((VUO()Ud0110d``01jtssttss    x  L $  327676'&#"76763 3###73?lI,MPTRV!SUTUlT$!*65rLbAr+#}swԤ      $  7&'&7676!2&'&#";3###7*YV!$UNME!FKIPyF+@>F66ws}#+rAbLr        #  26&"3!!!+7#"32O8O8vnT!^!4EANbg߀N/1%j+^Lۓa31DD10M   L  C  3276'&#"%#7#"'&76323!2#"'&'7327676'&+7!OXWJHOWXHƼo!7>>Jz-.gmkzJ,+voV!?B3+9789&)nArJK(*ch cqjtssttss_3d0110d^L$8*mh%12KKKJ      , 3  26&"!7!332+#67'#7#"3233276#O8N7|#s
!i\/$\]!6}KyZfzJXvnh*5j 3<SdaDDad^6[    _ >  .#"#"'&'#"&7#7333#;732676'&/.7>32^!'^6Rb-R#n"#6757qB)vQQ>o>vEk3m:Neb#`>{=g?((TT@I!,KL!&`>NM55YQK($)$  V % .  !7676;#"+73276?#"'&7#73!33>#SMJ$&)PP5%N&'+.)vee>5jvUNZV()g)_`02PM`> &'    pf . 6 @  3632&'&#"632#"'67&'#"&7#733276#"&77#3>y3-.&!&,*0lQRO%Uu0$1(\rC)vQQ> -WN=.03rvE#+qrfr9DhT"2`>9KiN  Vf 3  +7327676&#"####737>;#";67632])DCm?  ,JY|ooji$qhj;>m"<??Gs%$H``01/яNPhce22wx     Q % 7  &'&#"#"'&'#367632327676'&/&'&"3:=Bgwh,./nmAIJ?."[eLA?mA@DJa><~-x+&?)TT?&$!,KL\[&:MV3-+RK(#*$JA    D  7 
   3!!!+sU!]rvGLۓ          333##333##t12t͉4Lt22tΉ4U=          !#!#!#!#sS3k3S3k3UXrX HJ #  32673##"'&7?6'&+732?l>]p {ҋwFLMX33-mN%5**)֟ybe22wx0t 10``  .V /  !7#"'&7?6'&+73232673;#"'&7"<?@Ft$$-m?*l*k,JY {o?*m(e22wx0t 10`` t֟y60`Y     #6&#"#3>32JtI=N^EutB4|JycwYYk\g88       3>32#6&#"#7676;#"4|JycJtI=N^Eum>=rB98wYXj\1Sw66WU    zW    3+732673#t||r,B;tsxlX6Vr    [t   .#"#3>32`,b@uzu0S
	qksa97   ]|v    32673#7#"&'q,b@uzu0S
	qkJa97   *C    32673;#"'&?#7#"&'>,b@ulC,r()/T
	qkJHVX66xa97     !  +33276?3327676'&+@7LMzt3j>))4{,&'}K,-		##K}N;[--s?5 /.        333##t22t͈4         +7326?33YGkN\D0=/{}<{RpEW(K/i  tf     9@   : og 91 0KSX9Y"#73)~ g   3#j(~    f   672676&#672g@jG@sA?,__=>X@?X=>POPP V   "'&6763"33sA?,__s@iF@PPOP>=X?@X>  ~   327676'&#"767632#(yC,2q24454555E8QSoG=@*7K$@`	
XFh_@C    ~   #&'&767632&'&#"3WGg:8Sh512,-//2qK+
*y=AmC@_hFX
	`@$K7*@  f  R@ 91 290 K	TKT[X     @878YKTX  @   878Y3#'#͓uf    Nf  :@ 91 <90 K	TKT[X     @878Y#373wx      @ 1 @0#kk+b+      @ 1 @0%#kk+  h/  '0 C b  0 v   O  #    !!rerJ' ;#   !HreJ  N#`  =#a   / U   733##7#7-++++u  yYu   !7!;>ߖ)JH  wDm   )N   h@	 "I"1 0KTKT[KT[X  @   878Y KTKT[KT[KT[X  @   878Y4&#"3267#"&54632X@@WW@@X{ssss;@XWA@WX?sst  uX    "@
  

9991 /90!33267#"&546w=@/-!B "G"alK:e&%&

PG7x  V7  @!  91 <99990 KTK	T[X     @878Y@=	 




 
]K	TKT[X  @   878Y@





]'.#"#>3232673#"&/#*/}rY+D&/ )1}qY,B`1KN&/NM f   \   %3;!"'&7iDA'wd10`ZȢ   /    7673733276͂#$忉s/MM 8
   ;#"'&547#7![8h- o."#W<(@":Q "/ 2  &'&#"#"'&'732676'&/&'&767632-329V00	Y'x*,XW8<;A;;<=Rbk'h'(PP@77a/$*+MW33

k2-*)*IX01	        	#'#37ΉRH+     #&'&767632.#"3WGg:8Sh512,-^2qK+
*y[AmC@_hFX
	`@$K7*@   *X   !!7!yЈ  [  *X   !!7!3<4      *X   3#!7*xxhh      *X   3#!7<4      *X   %3!7  y   
  Pf C  ?ff v  fd  V7v   b+  @	  991 0!!V       )JH  &@   H	H91 <90332673#"&546xWUPjw HADJLv   wDm  $@
  991 0 @	@@PP]3#)  F- j   D   2#767676#"76w#?:G:
w[F[ƪ@$C!Xl05^   )Nt   f   H@ 1 <20@)////2 222B BBBV SUU]3#3#҇LfxNfe      #VVD   *'4        f    #!#2 ufxx)J&r  s 0  )H   >32#6&#"'A3wRUWn)H9fLJJL e    #3Y     #77#732oo1{       73#3"11op{  ?f   3#Мf '0 C b  0 v      73#7#7K"_#:   L   #33"_"걈   p   !7!#_   @q   732676&'3#"&4P.8	m]0_hw-+76 >&Dzs5  .
:   "&54763"]XbL]3+61lbo?wS?b#.A#>    lq   3!7373":       #7!##S#c    v{   #73733##'"""   fck   7!fc 5V    %+73276?&moZ98ij>>~     PVE    73;#"'&7m !ZͥEE&~>>ji   c/  "@	  991 0@	@@PP]3#H'   _d.   >@  99991 <20@@@@@PPPP]3#%3#((   
     1 0#"&5476322654&#"cL\]XbL\]Y3b233`0wS@o?wS?oQA#>QB#=    >;   3#O    us    &@	
  
		991 /90!#"&'732654&'+%#w,^/(I CK@]$]m<6N6 ub  u
  s/   #WWD 4/   #7!#@&&@J   9X   #"6533273273"]Lt&uhf,vie-vGtR     @ 91 <90#373ēx   :  @ 91 2903#'#zm    u8  &@   H	H91 <90332673#"&546xxWUPjw ADJLv  @:   #454'&#"#>32w%)WUow'A3B"%JLH9f     05  @!  91 <99990@=	 




 
]@





]'.#"#>3232673#"&/#*/}rY+D&/ )1}qY,B^1KN&/NM     h/  @	  991 0!!Vє  m B    ]    <   #"'&'.#"7>32326"VOZg
Gb3OU"YS5`Di]F;73
!;?<6
7=  &h   !5&hh     h   5!Ĥ    'MN`LM w@   '/ZsVFFJ 
   27654&#72#3+723]YcL]l$-A#>bo>wS@ 4   3!735@&&@J 	/    !!jjN66&b   9X   632#6#"#6'"#72tLt&uhf,vie-vGtR   r_   '7'77VMdreMdrI}`}}a~~a}}` )   .7>77>76'&'RN/RN0PQn
+0PQn
    &      Ds     7    "#6%62#&%nv..vd<<    tf   3t    V H   %#H  T   V  `t   VY 	  #"?3;LX$ 3Vh    U{   q{' y  F   U{& y     #'   N -  ?ff v  F' ir j    f'>    /` y    f'D    Q  f'      f'D     f'      Df'      f'      &         $      %   E  O         %!3:ceyy  5   (     =     +    t\     !7!#"32   32)r!P@@PLLLBǪ/bz~   9   ,    J .        3#3#es+#    0     1          !7!7!!7!A!\!)A!A!ժ9  R 2    [   3   3        	!!7	7!!"!!6!!A@     5 7     D <    t  Z  & /  3!737&'&7676?#7!67676'&'=Oe-.s!!Oe.-s!!O3P6"InO3Q7"+v[ssZttZss[v*DD*7*DD*    9 ;         67633!737&'&3^O?g?CCL*!!*DVLCC?0B["WDWx ֪ WW"        #73&7 323!7676 D"a6$=g=$"1"+--+Fj" 7oȼ߅LI	L    9  N'
 9u     DN'
 9u   Ef&       ff&        |Vff&        ff&         &        Ey  +  76'&327 03;#"'&''&'&767aSh#+68Uq Yo^D Cm5UW6:	oik*%1)0T*XmY*) Vl!    7#76'$`+^F69Td697+!k;%8Eb6=q'0   AV`   &+7323#^1FzSSD~S]V     _H"  4  "32676&%&'&76$32&'& #"76*)e)*fh!2f0"=DQR JD, 		%i\_8888&L	(=\$+.!-&   Jm @  0326?#"'&'&'&767676;7#"'&'&76?6?27.#"YE$U^b$6{ x@4
'*hv~ hI)
	,BMQX#iB2("P7Kp-*/6
B6 .(\=2   R   %#677676'&# !7! @EYaD3'
9YM$f$%#KOxsPWKL,#%5,*3eaZi   |V\{   #6&#"#3>32\ڹNq!{ڸ!Ds}```c     H     6'&#"!3276   #"%%*fZ2%%*f[ҪHIIH<⇙8wyvs   `   ;#"'&7#71lXn@?*n`+.0`b;      `v    8  {   ##'&#7Ù#1Ee<2  V` w      a`   !367676'&'31]|jeP4&ޑ`T|p5dwY|rNįt    R &  %#677676'&# 6%$67#7! @EYaD3'
9\-c3&$$9%!*<KOxsPWKL,#%5,*p$Rݿ	&    uZ{ R    H`   !#3267#"&7!##1$%7-%M%qB"T`PH?X  %Vz{    6 #"&'#76 &#"32VU65fn=HS\)*`{WS<     R{ $  %#677676'&#  !2.#"@EYbD3&
9laQF&<]()HIKOxsPWKL,#%5,*8(8*,A:no     {`    32676'&%#"763!;^$)e)&@,884$	Gos*◗-	    `   %;#"'&7!7!!lXn@?*g##j0`b     `   %"'&7!337676'&'1#%lrn*?@,4P4R}0.Տb`s{Zwfv     tVh 
 )  "27676'&'2##"'&7673~A^i`*)84Y`53NN^_4: G>d$(69g;ˑRh]c[斘n,mJseg.    V`   #&+73 3;# zE
X1F EvX1Fz	~,~   V`   %67673#&'&733CJe!|~*NN_f*~|!C2;@WxؑoW@    2` &  #"&'#"'&376763767OpJoUn"Y&p8,@V8)II	V?E+8H`{gLHk{A>oRyRo>     -& j         & j       uff&  
       f&       2f&        5$ 	  #   7654'$'&763 '7676qZiMKNCEBM\I,!2TpA{zƲ
i   R$ 	 $  6'&'&'&7!2#"'&3276(*f>5{B_NwR^YTTuomM9T^yhpw{A
K~}Sj~    9     #6''&7676'&F ~~#*Tj}!Qu6hU0rROv~*+40r51_T    f'E     9  N'
u    qVi   '  #&'&7673767676'&'	OPg85tEERh85v [Bh)$7][Bf*$6VyvaxxGnռFCImֹD    `    !3237667%&# 67#7!C4FTW_QA1*\ct3NB$_$+T3   ` /  %76#"'&767676676'&632767vp9	yN@{],p9
yN,	
ZMf lh|TDY|lp"=lh|TDY|	lc  V 
    #"32&'& 32pP@?POCVLLBLK|O"y|"j     Vo{    "32676&#&'&  ㌻)*f*)eNNI^871Ҽ78w
mw.v  R #  "32#677676'&#"'&76)Nd<;tzIEYbD3&
9w]PGǭ2e!+wTOxsPWKL,#%5,*˞nͱ   R` #  7! 32'27676'&'&'&7676396:'2DaZD@bIH))rYĜ*,5%#,LKWPsxOJonlU  \   )   GV #  !#"&'32767!7!676327.#"@dOW0]+ )b9xA<[Fx,L 0_1s q_K!s7oQ>d  1   	7"'&7	6'&724V9-$DO6,9-$DO[~,`*l#FR`*l#FR  v  a   	#!3a<l&pM]    Vw !  #76# '0#0?&'&zrdc&AqX.Ya*uh.nm3iFKI
Mf7L[OF5`4  x   	#&'#&'&#7 #'@ֹ#ڹI( -ȹX<ID04#M!P^    ` +  767676'&#"76776327'&767ϓMz
9p,^{	?ғMz
9p,^{	?|YDT|˩hl= pl	|YDT|˩hl= p    Vz{     7636 #"&')! $&#"32=VU65fH!hS\)*`<WSs)   q{ F   V M    t\     6'&#"!3276   32! (_L67&(_[LLLBqopުՈOz~    t{ !  &'&#"!!32?# '&76!2S"#^jyq3[MSRO!Rlk~lej&%
c\\c(     7	{ "  076763 !"/732767!7!6'&#" *)re~lkdL!EHyq3[MSjh'؜c\\c
    3     Vh    s &        !!#	##P޻  {+'`  V`   !!###ٹΙ`{`   Vz{  #  #7#737636 #"&'!&#"32i!i>VU65f7!S\)*`pp>WS  1   70732 #"7>3  !"&)=X <<VV)U[GHt[5=@0230@=))gj)    s&5   y    1' yc  9   5  ' C |Q   5  4' j W$Q    P*k /  32676&#"##7!!676767632#"'6K'QOqj_2W"N!~!Cf-5%GH?-V6S*\o-*	%
TpFwu    E  ' v }|O    p    7# 547 !2& !Nmz)G){\Is!W}RIsoR}t    { 6   9   ,   9  4' j 6$B  N -   \   	 !  %326764&+32+#
#726Z
K^u7ҏ1=} eBS4ty6+W    	   %326764&+!#3!332#Z
J_u"wwub6+ҏ4ty)9dq@yBR    "  = "  676767632#6&#"##7!f.5$GH?,_ZOqi`2W!N!~!-*	%
TpΗ*\o- K  ' v P|VS   ' C $|T   &  m&_  
         33!3!#")v>>++B   $          32676&#!3)!jjﰮDEXx@"(F"{f>d     %    E     3!!F"!/ժ  q    32!3#!3!!_M04ZTy_>>+B9,LB    5   (   ~  B   #333##'ݪϨttl`}ZZ5{ZSS0кvN       	  #3!#" 3+3   m&T  
      J .   s     
#726!#S1?z eBS.+W++     0     +   R 2        !#!#++ 3   3   s &     5 7    &     +7327676733Z[:UL\!mQ770ٖoJ+'/.M *5>     0     !  47%73
#7&>4&'03	Y3es;tCoS
zz
w

ȇ{{W  9 ;      #3!33#"")_>+B        47332673##"'d_/muh{ˀ~DMAr(Ex+:b      )33333"++     #333333#6"_>++B    ;    %326&+	!7!32#~3!u++
)+         !3%327676&+	332#"[f\G\w["u[+++J8)   3  ;    %326&+	332#ꍹ3"u++
)     L   "'7 767!7!64'& 763  >)}y}|2!sD)xKHtR}_@}R̀sj  
    #"323 32  ##3(lk@@(kloJ {LKlu8o#CiyzjMf       #.5476$3!#!	3!!"Edx)1{'g'e0:+wټ)    H?{ D    Gs7  -  65# 3 6   &546?6767676%67ZTOF8- 	123&+%5dS2/bLP`{WjYIUA
+t   d  `   #  !2#!327654&#32>4&#>,ǀCycu<U2D:VG_{8k`So4nT+8Y+J9piEO     ^`   #!	6`  x`    327!3#!3!! UC7xQyU8-8 4D$d6L4d bf} H     `   #333##'2ǫTTSxXDDEPPl4_ BA{    V  ` 	  	#33#|ڸڸ)`)    V  H&t         `      `   !#!+73267vڸ_0%VjZ7#UuL!`jv   `   	3###3Sڸڸ`   V  `   !#3!3#YdڸYYڸ`9    uZ{ R    V  `   !#!#Wڸ6`   Vh{ S   q{ F   1  t`   #!7! &6ʖ   V` \    IV~     .473
#>4&Y}J6stSPPsTNʦ}J7ugQs}o    ` [    +[`   33!33#+ڸ潸U8`66L     b   47332673##"'&GGXvMaڸ[:T;0:o'+R8      `   )33333(ڨ𽨽`66   `   #333333#ڨ𽨽𽨽U8`666L    n  g`    !!2#!# 7654+X ѳ(H	#F`;p#Ѥϵ    `     )332' 7654+#ڶX[fM #SFڸ`;S@p#)`     X  `    %32676&+3!2#.pٸX A֙YZ^X`;     a6{   ? 67!7!654'& 763  !"a&gf,.H&tP69yհoGp{VkKW   {     $6764'&"3    '&547##3&#%,B:SO9^ڸh4lk Vd:A`  ;  E`    3.547>3!##;#";m0{
!ڸYT7G8n]*49;ImVa   bfm& Cq     bf& j#q      sV6   3#733!!63 76654#"sUU@M ~6!3яLsFVs_A;      m& vQo      {   %# '& !2.#"%!3267RRtt56aQF&<]sU,@H`M9++8*,A:pSdq;>   s5{ V   =   L   =  &    jԯ   V M     `  "  %2654+##+73267!32(F	0%VjX'#UuL!N5X)рiv;p#Ѥ     y`    %27654+32+!#3!3#Fd(ddڨYlYp#Ѥ`9    J     3#733!!63 #654#"JUU@M>>!3яLsK^BA2      m& v0v     V  m& C@t    VH&        r`   33!3!#rڸ罸88`6  f  ;    %32676&+32#!!7!73!~J*++ ++q zQ  n  `    733!!!2#!32676&+nTTW;  !H|wy͓LΧXZZZ  t\a   H{    E  @   3!3!F"?]/2$         #!38=bX`:    E     !!##73!!#!ݡˡ!`!/>    s  ^`   !!##73!!!`aa!X$¸    Ef   #!!!2+7327676&#"!/V7ZY.<4~L!>GE&8]|9ժFwr|zKK"   V^`   #!!3 +7327676'&#_$;:B,5)edn*14! )`GQ``07 ) ~B   #3333###'ݪϩsslj:`?`}ZZ5{ZSS/B0кv `   #3333###'2ǫTTS_MU84XDDEPPlL_uN&S      BuA{&s      J   %3###33t]<)q"ˁE8h     `   %3###33Z6*ҢWھ[>4B?`/Z    !#!#3!33#ʋՉ#v)v^9d     V`   !#!#3!33#bbڸWWZ`CX4    K   #3!!!#!"wlw"!d9       `   33!!!#!ڨYYdfd`9ǖ6  su&]  d    uq{&}  h     5   !#!7!!3#?+!t!+^+  +t`   !#!7!!3#c#&#ɓZ
4     D <    V`   33#ß~VV`lD      J   33!!#!7!7
!RR!mP\P    V`   333##7#737Þ}
//
`l55 0   %3###	33g]<8}3B  `   %3###	33Z6b*v4?Hk       #6&#"#36?6?2a\Nqj`2X!P"˄+74H0I	>ڗ*\cU'%
Tp  T  H K   9   ,  ~  Bm&R  
      H&r       fJ   32+7327676&+#33]Y.<4~L!>GF%9]|r"ˁqwr|zKK"h   V`   3 +7327676'&+#33x::B,5)edn*14! )/Wھ[>wGQ``07 )&?`/    f   %+732767!#3!34L!>GF%v׊"w)whzzKK_9d     VV`   +732767!#3!3)edn*1fbڸWW``07`C   E 	  !#!!3#"!/^ժ     ^` 	  !#!!3#L$ȒZ`4 _  H   	#Hϸ1   m&L  
     HJH&l        LN'
 3uL   H?& j l    o     {    5  m&Q  
    bfH&q      t\Q   pW{   t\N'
 +u   pW& j      ~  BN'
 WuR    & j r    NN'
 $uS   BA& j s    y  L`5    0&T  
     V  &t        N'
 +uT   V  & j  t     RN'
 +uZ   uZ& j  z     t\0   H{   t\N'
 +u   H& j       LN'
ui   a6& j      &  0&_  
    V&       &  N'
 5u_  V& j       &  k&_  
    Vf&         N'
 +uc     & j            !#3"'&'&7332767673=^j+75G0H	>,ZUNqj_2X!I$'%
TpI*\z)    b   !#3#"&73326?36ZJ'A^s},44Nq!(~5"2      N'
 +ug    & j       HR   Jm    R 4   bV{{ T   R  ` :   \  #` Z    : &  >73&'#".73327.'jA,?-9dQL}nb	*_VM73I3_,@ J\9 ):D;x|,\L06k2      i   #76.#"!!#>2@+	+`UVqH%	]!Wcܣak,[K00K[,#=|x::x|  s  `  &  ##!".7>32>.#"3!`!}WWjafon`Hu*`UVrK- &]Vm=>ˍʀ;;ʏ7kT46ba6  L     >23##6.#"#kcܣaQ!W	+`UVqH%	+|x::x|a=J,[K00K[,     @   ".73!!32>?3cܣbH!l	*_VUsH%	+|x;;x|,\L00L\,    )  !!332>76."#7>2I^lld'g!D?32tW8mbG!~سs%^cAK1\in00nBB       	  7!!3!!!"I!ꪪ     i   #76.#"!!>2@+	*`UVrH%	!1cܣak,\L00L\,`|x;;x|    * :   "#>323##".>;7>& 32>7#"\>ôqxwf
"8RoIHpD.ToH0 .#":/&8$8-L1jysܒIKޓ4kq;3lr8{nڨm?AkP@       &  33##".7>3!"32>7H}!}Wgno\mjVuN/ 
"[VUtK(eBʁ;H֏ؑKBqpC4Tk7       5   #76.#"#3>32,	+`UVqH%	#T=Ona,\L00L\,3P&*;x|       3!!+!dժ     2>73".67##3ӌ8`?,;_{8e!H`1Kf>>fKIwo55owO     2 * B  33>32.#"".67>7#2>7>.+Ƿ04<R<[NH**\OaB,5NkԘe8]@<izW;(8s>S?eG%	F6:4TSvT0-Tv[e4?yl[B%#?Wgu=@ykX@$a         !##".7332>73T=Onbʌ	+_VUrH%	C%*;x|3,\L00L\,X    /   %.7>76$73(0R8&FhG0wuˮM-8@/7B(FO[3bV;3qqm`M-     1 <  .'#".>32>76."#7>2"3267.8K\4P24gpHpGEdHgKEg8lcG"~سs%=W9?LK9}T=nf6a-S^&JnqO)MBa邂n10nBAkIHME<E   L  (   >23!6.#"#kcܣa!{	+`UVqH%	+|x::x|J,[K00K[,     $  "!".7>7>736$33!m9 <`?{w?{;䀯=Y[
,D,&KAȤ8Y>PQCzs3".y-^  .   !#".7332>7!cܣa	*_VUsH%	ժ|x;;x|,\L00L\,    8 9   .732>76.#!7!2>76&"#>32V^c8h|Y8?iI!PBeH,	h^edd&1EW1@V-	_MM`AqU1.Ql>?fF&*GZ0vpq{[i88gZ;hS<G`s     ".7#7!32>?3ecܣb!	*_VUsH%	+|x;;x|b,\L00L\,     8h /   2>?3".7>7'.+732'.#"009maG!~زr&  zAR3k%-!{3zB)%,.Hon20nBEN(g	N      |   !#6.#"#>2	*`UVrH%	cܣaJ,\L00L\,|x;;x|    m '   6."#7>2#732>09mbF"~زs%!HYee`():*Z.Hon20nBEqhD!cEeN   W     ##7>32#>.9YvN0hᓝb"ZGlIpX*9؜VV؂\OvO       ) E  6.#".67>32!!33267>>.#"32>I
&H7VpC
-Gcc[	pSg!D?(<B v-m`]Z3D>Lf9+L>/2R91AGH 8{vlQ0e~y%L.+4^dzEEh|7)=(4[{G)0nw        >23##6.#"#kcܣaQ!W	+`UVqH%	|x::x|a=J,[K00K[,    S   332>73".7&	*_VUsH%	cܣb,\L00L\,J|x;;x|  (  \   332>733!#".7iC	+_VUrH%	!RT=Ona`,\L00L\,ժ%*;x|    -v =  332>76.7>32#6.#"#"..EmDAt]@>YfmeW9Qts\
/WA@dH.
1`}X&aw{p&KuO)&IjE:S>-&$.;SqLQn@@nQ4W>"!;S2BV<-1?af`yDE}        |   #76.#"#>2S+	*`UVrH%	cܣak,\L00L\,|x;;x|   8  D   "32>.'2 .732>76.#!7!.7>PeC')VIBdG+*~j`!0EW1@U-	]c
7i|X6?hI!&ZL&AU`YC))CY`V@:iY;fQ:Ibq9_NM`AqU13Vq>:_D%9DHYj:        !!#I""O   ,   	  +  3>.'.6>?3#^JjN9.&WHJlN9.&XItF6RG6S/gk23kg/WܜVzzVݜW        .  >2#".'!!#7#7 "2>76.V[V{ HD:@",//"oK-2alI,._vBDv^`wC*(Hf|gK*'HhA>fJ    R 2    	 ) 3 >  #"&'.6?33"&7>;7">.#2>d0HeE"IUc;l6==!YUŚ@kgH|P)/D/'A|#ZRRnI/Ti! iT_g83EfC B*F)md/5f   Va   (   3#U⁐՘?  m v  %%   #>7>73B>Zs@5~sX<Vk:GrQ<lW>1O@;jV>,M'f Cb   } *  #>7632#".'332>76.#"Z~Z@BC}Y)
4Oj@*M=&1*,C)13sV$MvR3YB&0K6 %*?*       3!9!#z     5` )  %#".673327673327>73#7#"0uKDT%~}GO*++}}/JI(+}ڧ-o?rHE.qw9=?78=s`<?   VO{   #76&#"!!#3>32O//Nq"_VR,!Ds}V
ab     ]Vsw     %#".7>32733##  6& >feRfedST\T^TXQ؈ۙRVT/VR   +V3{   3##6&#"#3>32
kRNq"{ڸ!Ds}ُV``ab  br   3!!326?3#7#"&bܸU/kPp!.!Dr{lLח0ad  ]Vsw    %#".7>32733!  6& >feRfedT\T^TXQ؈ۙRVTR   7  C 	  )3!!!#/Uz%L   VO{   #6&#"!!3>32ONq",!Ds}Jl
ab    V{ + ;  6.#"#3>323##".7>32>7#"?qRM{^C˷+!-X^g=fZeh$hz>HlCKfx<X%GB:60$1/fq<*Ze
:L-Sچf)'JiANsK%< IvV)=(5)     %  !"2>7".7>3!33O;lZD,ZrX?
\\P
Y{UU:laep;<oe(sÏQX׀q˚[L  V-   !#6&#"#3>32Nq!ηuDs}-ab  V`   !!3-
  V -  327673#7#".6?>'&#"#3>32	JI()-|٧-o?HQ1	JI()-Ϧg-o?HQy8=?`<?8jcy8=?<?8jc  J+  /  #".7>7'32>7>.'#"!ZaYeS.`POzY:
!&NzZ=`2onf*zΗUUzˍR!bSoAAoS3omf*Bq     V   332673##"&7|Op!{ԹsDr|-{Rad   N  B K   ] 0 E  #7#".7>7.7>?3326732>?>.'#;Pb.d"O_n;Y~IWi8K+CJ*	
.'(N=MvV6
KCDzdG, /{[,J6Bve`D-?N( ?OU100$	EvV17]{DV3ywl'5{     +V
{   3!6&#"#3>32
Nq"{ڸ!Ds}/``ab   o ( ;  2.#"#7#".767#73>32>?6.'_2
56rtr5vm%t!!M\k>\{ErQD>5S0KsR2OkHm	
*MnD
Or,H4@qZ+^uAXuF<ay=L`:v    &   33267!##7#"&7Pp!a!Dr{-`H/{ad    V)` 
  3+7327q&ۦ0`Ҝ        #7!32673#7#"&7`Pp!|ڹ!Dr{-{ad    5Vl| 3  3!!".7>76.#"'>32t*?'
Qy|W>fG#MMGu+dqz@jg%W{rI/?$2msz~D;`C$%6"e-H47icK~q`L   N  B{ Q   vV 1  !!".7>7".7>?3267#9&	=Xn|@-gR,IBre%5P
;N'#?)Vx[:+A,:4 ElL<{7`q,`/'8%	q<s+'    \V` (  %#".673327673327673##"0uKDT%~}IO*)-}}/KI((-}ӧf-o?rHE.qw9=;78=<
<?    9Vt| 0 H  3!!".7>7>76.7>32%">76.tX{qIt&>)mW",
'1'

4K]hm6fi)H+[N:
 (	AK_>cO}p_N+9 BI;=@#5ZRLQY45_Q@.5g4N3!ADFLR,RN=K?`B!    !{ $  "#3>32!!7>76.>jR9ڸ"EycB	8Qh@)IqS8*X4ZzFs`dcF}gSv94myPIa8    wg` X   JV~   3326733!#"&JOp!йsDr|H/ӑRad  -{ .  !#>'&#"#7#".673327673>32|	JI((-o?GP |	JI()-|-o?GP
y8=e^`<?6jgy8=?`<?6jg  #VT{   #6&#"#3>32TNq"͸,!Ds}J
ab   ]H{ J"     `   %!!3_&"ٸ`     ,V .  !#>'&#"##".673327673>32|	JI((֧e-o?GP |	JI()-ѧg-o?GP
y8=e
<?6jgy8=?5<?6jg   V{  &  %!!#7#733>32#"& &#"32]?ww?deSffg'T\T_ccTVRۊٗQVT    uZ{ R   V $ + 6  ##".'73".7>;2"6.#2>aӋRRKzdQ$8FW8b]%P}fV`;}k8vc^dACךU[7P2,J5.-PpCHpM'GH+OHBRZ`2Bu        3326733!7#"&ܸPp!|_!Dr{l{/ad     $R    %3#3#1ӥ1R   \   $7'{vv?99>    >p    ' 0  333#!!67676'&'767676'&'MM]]d0[f~#:d:x~GR@6{e:I5*ev!	LVxZQ-x.6{<2'1mc,#   {   )  7&7676&767#"767#"763263 #6#"??B~?B(('H(&ʑ\?!sBA?>BA?pпQQ9  2  ,   "2"76767$32632&#"# 76%7676`,ΘA-IOaL@3l^0&Ͻ%JX4*oabu;\SfaƎ:F78U     NQ   8  327&'"76#"%67&76$#&67 #"'632`24F616C!/6!:pp2\-;! 9'	2'#u`0'"/6OAK%[9.ȵ      !  >3 #"&?327#'&&776jefy3Lx/F.	B
BC
quЍ
h!	ACBB     _  )  "32676&26''&7632#7676r$# %!Eec9};V #&!Of!*`  %"%:yx~)RhKK>   i  9  "32676&&7656767$3276320! 76-676$" %"Y)=(qǳ0y*/Fk?W0,S!sF3Ho  %"%}@~Y9peDQcFlWNn-7V     =  ,  2676&'&! 3%$6567&7'7$"%""/@Uppr=.<l"$~"L7  $! $?=Qm.uG4  0{    $"276$#"76$76g֛'&T*&''*(@@@Pyx  H  *  %"32676&"#" #"7323272#6#"?$# %!Fz>6-U&*)C&"$C+7  %"%&PW0    {   #  $"2"22#"7#&767663 #6#"]<"$,r#&##u  |y܀ݹIedm%    >{  '  &7766323276#6%$7"BCC	"!()*$r1 1cRsBF;BCACKؼJjeh0       26#"73267$76767673!"'#@@>z]iF(+*<x"A>s@0egu/ss     M|     "267&76 % 3%$g+ܰ%'&!&%<9V&Ѩ'LB  &     "267&76 ! 3%$׀h*ܰ%'% '%<:۸W&Ѩ'hB    P   J  "32676&"32676&+&'#"'&7632'3273767&76676'7$" %!$" %"cYt~@<w+''Nf<<stZ!)Ѳ!
>@#blb  &"$  %"%IJTObo;4ˋP6A^g[oPI    $ 0  +&'#"'&7632'32737673"32676& kb{dXt~@=w+'(Nf<<stm$# %!,PIIJTObo;4ˋ  %"%     2}  ,  "32676&2737673%&'# 67&76 $# %!tn!<=#vi >hXt>. 2,!  %"%4ˮ/IJ=%ۏ  
  ,  "32676&2737673%&'# 67&76 $" %"sn <=#vi >iXt=/ 2,   %"%4˯IJ=%ۏ `   3323!"'#"763227Ӹ66?x>)`,88{    ,  2676&'&! 3%$4767&7'7$"$""/@Ur>.<k"$}#L7   $! $&=Qm.uG4  -  +  "32676&6! ! &%$&7676$" $"T,>96mJG2))BX  $  $8${{N&       .  %"32676&%&'&'&7!2767!"'676%" $"Il1D%,/MNfQ!S6=(w!$  $TrJco<  7{    "326! %&$7623 76! %@@<!l:q9")'T*W(ATY=I     n  2 :  7"32676&%!$76! 676'7%&'&'&7!276 76! &  $#VPI
3/T&J^p0D&+/NNgPt!$  $=1TvTEmMd    4   "327$"32$7&76367+&7632676#6#"uA?A?Y`?>$ƾ$E##e$!"SW@D?@w@@@@LBE>/}	cbWZ    C  % -  "32676&%$%&'&763 76.$" %!<<;z1
ɝ{#**E:8)"9] B<S  %"$36H9G)#$67     K  6  "32676&$76%$76!232'&#"%$'&76$" %"T1$04KZEhrZ;UE?Oq\,)l  %"%+DYl0yP^d6Qqt^}]F    k&  $   "2' '&'$! '&7"32?6\gR1ʞ?F)+(#(&etmh%N)=md  'juj       ! &7623$76'76"4+-* A	HB8?;kP$U.FM?>=   (  {     ##"2#"73276#"IO7N&&&TR
;C
>@{jVR777     r'z/  k    T~i   ! ! !7 76! $%>=&=>?&'%~?>~    Ti   ! ! 3!? 76! %%>=&=M'&%~?>wJ~  T~i    ! ! !7 76! #7$%>=&=>?&'++%~?>~N  Ti    ! ! 3!? 76! #7%%>=&=M'&**%~?>wJ~T   3<    "36676'#"7632AB/D$e?Io[$N[u   '    "327"767&7623273,JH@@&,Ws>
[yu?{EBXF     @    '676%"7676!  6"3oc	A"!7*9<?8
_F.UDWT_`~?=       276#""##"7!23270		0+		qV&ĸ!?Lݣa]pN0/.1i3 rCr V   3#1EV   E     76"% )76776 $7*	*+
-U$N1m++),}݅.p\(     _P 4  "!27676327673!#7676#"'&'&#";&76356%2e*'UTH)DRy/LMO]i0e>.`hH;A?~=h\$kb8:;-F_Zkf2) <   73733##7<****؎ t  P   <r    632#"326##&иLT  {  -z !  ! 476733 654'&5473$a1chA\??KibcW?3O)$<V(,!n(n+   ^    *  ! 47%7654'&5473654#3 i<VjjyG	 mQcT^z!(
G.$`@GN>YF  ,W9 % 3  %! 47%67654#"&547! 654% !; -[	Q[|#4_X 
A
F+,Q<GSoR-9(-	!%TY6?4,3+  UW . =  6?&47!32363 ! 4?654+".#"7654+"32v1WXV[=Oc-;+=A9zi*rGw#0,(o}bbL_8^y<mbSP:,?1  TW~ (  ! 476733 7654#"&547!3 NIh/	+
HZ w(19js'!1'%%GC.D+3q8B    SWy 8  ! 476733 ?654+7;27654# #&547! J4|~+II/(	C^(	-*3;]mxR+$b("*#&+:E5G'-X3<\#(.     X    & 2  ! 47?&547! 654+3 654'"6c5@	@T"
lF*VJYIJ/'.Q*2U$HSK<K;!&)"  "     0  #67654+"! 4?!23632654##"32D?^!S#+`_}3^tqF	1W5%|HCBuR:CVnccLi,GI6       H   #654# #&547! 7D7Ej^r#J;MLÙPZI    WYl +  ! 476733 ?654+7327654!7 NCnx1	
AA&'
w35?fq-'21)&*1)+2     Wu '    #.#"'6?&47! >7654>)jS:PrYz|f[|v
2K_[ ajBOeu>3    [    '  ! 47!23654##7! 654# 3 `Eye,29
IdL]	}!>>&-4T\GP?   Y  N  #  ! 47)!"363654# ; j2CM"9#Y|J$OFU[ڀGYH:Q?    "   .  #67654+"#654+"#&54?!2363 .(7	wK@(66)M,3	w
\{h4[`5.$N1P-+56fhhJ\   Q  S 1  ! 476733 654+7327654'&5473\Dp#wt
 @?R(#'&79BZ~/(I>3ه|0A'$"=T0   KY2   ! 4733 7 7654%7%O0z
'4B	; hk+2"4<I',"A      3  #6?654+"#654+"#&54?6 %3723632w/+&\XA >?
3|g9 	Ҁ1b5\TҸ[?=4$Oۥ30@DgN{R=bbJ    ^   !  ! 4733 654&54767d=Ķ	H?]K[K<r'"xV}|8;?-    Y    %3! 47! 65'#z
#A0)oYv"uR>_i=pd=v_-Tn   lY 5  ! 476733 7654##7654'#"'73263236;2LMe	/e40J>X>HAV++3OLg!k+34=Z{~,$*!tW;|_bc1:   NW < K  !# 473; ?654'#736?654+"!# 4?!23632654+"32VG48/+$PP7$HS;(]Pw0s1x*FM22=2:(!e<'D:)i{ <HccDUTLp+ \xI8     )W ,  %! 47673 65#"#"#"#&547!33`Ta	D;*;qWC65>dyq+%^(i!@5`:DU7?1     KV 7  6?&54?!3676?654+"#654+" '6&#"IA`_6Z/̌"+dd:"<<+L2/fiS66PggJ^F>.5<(KHAJT   UY "  ! 473$?## 47%33 73IFi/0l28+.e/'18'!bMESB6	    \   ' 3  ! 47%3654#"#7654#"#323632654# 32\Yfe-8	n(U,Gܺ_H#jJY!0%!#*!l.8/RAJ;      (  #$654'&# #! '54#"36326uAŲ4@:rBpc*7G06RNK\AM<V`Mh   3Y% 3  ! 4?! 654+7327654'&5473bT?:	XJ#leXf!saDdL۞h*"^)%w"]&/t   [      ! 47!233654# 3 c/hsMWK[sNQ@vM<  ]   ) 6  !23632#654#"#7654#"367  4?3$654+ <0d8(	n)8_me+"G@DYM3b#!/%~߁Pc\Pc&fMrXD    &YB 5 C  ! 4767 654'&547 547!33#;27654+"N4{c{-2M] AAKUcB ]]&m%3=i^i$I&!}S^W/8M	0Ni7H?bJ+'%~  _      ! 473363654# 3 g9«v)cvJ`N_N^Q@O?  HYC +  %! 4767 654'&54?%773%[.U>s#..58#})0B@M}YiG>2Bwx}J$    L  v ?  ! 4?33 7654'#7327654+7327654'&5473F7x
'RdR[yuh-5>ee/'*ezLM
h/.h~:Pm  Y Z  ! 47654'3!27654'#7367654+7327654+7327654'&5473;T>;kE	D]D
gkooz!&|W;F+W`EG5,,#w j\Iy#B2)q""x 0/!    I`  #  27&547% 323&'$654# rajx>F)q)#<<Y<CN`YEF=5DU<R@  SW &   4?3 7654!+73 7#%O/4'3	rrF(DrZ	m&3<o[*# .'ՠeJ]0^)/     "W 2  ! 4733 7654+73$+ 47!3 !27O4{3Qx	L03L k'2<+#7"%
(/ui5"    -    ' 3  ! 47%!7!$47! 3#3%! 3 73!7654# #AIqEy
Az*rrr#(	)*$*f*1Q&,ؔc  =X * 9  !"'#!727654##"3$54?!2363654+"32N~W$
5ar$>`/M1(ZQmLI Jvjt|	7&U6({:F?O#p*!    #Y3 +  !! 47%$7654#"7! ! 654'7)SXI]X{ =`*5	I;%7Y83<srg$z8A:08ԃM.')&G%\Ln-     RYn( '  3! 654'7!+"'#; 3! 47)m;	Y@D,2O;u0-*Œ?.08Y(!p#09  W$  *  !6?3! 5476%$47$7654! T 6u7	- C1	k7@u!yLL(/TK )."!).'     syh "  56&#"'6?&547%'54' |\_ZsWxUq:)^_ytJfFO=%SD@b*    2     3#3#3#"""㰽 s    2"5476;%"654#"327֥@$Fap%
Xx$-80<LRQ(m2&q  {   O  3267>54&#"326?%!>54&#"7>32>32+3267#"&'#"&54671}i##N;ZeD;Sj+aUF5";Hj/]uUM1L#O8Rv2PyH'!b3<OpJ8 FOR[nNX:2)+SMPP{X+LU+)""B?>C'\   iV{ 0  #"'&'732676'&+732676'&#"767632r53QXZd cTTL@?PPc_^T"f]^Vyx A@^VJ=+,nQb54"[\m 
Pd 	   %!!7!!!#73)q-я    { , 8 P  %#"&546?!>54&#"7>32>32#"&!3267"3267>7>54&:PzaUF6#;G_":Q;'8uP|4B=Sk<`(HCA_(Jb?@+TZ[nNX:2)+E@AD6NyGfkDL8GNdGB,jl MTEF5`V$QW    /{     #6&#"71Ҽ7)e)/.  /     332678.8*f*/.     + 0[   %!7!2676&#!7!#J$$^$WD"lp2r     V$W     ?373!7!2676&#!7!#W'(A''##jxexE$$v:&"zlp2r  + S "  )7!2676&#!7!2676&#!7!#rB0w!}o |p!`!`6,Y"iJo5FP;9JI9!c?Le    
  !3#'!#l~n|U   !    #3#3!7##3!0;)it:T___D_P   
  (  3267654&#3267654&#%!2#!;okIjT1[_=]ydUZF+EO2BX?F(1]bFMXb8rt     
   267654&+2+$O=~؉*ؿN9Povu;ID        !!!!!!.P0d;___        !7!!7!7!7ע;d0R_/__    !  #"&547>32.#"326?#7!`<L(<g,,b<|!E|*C,*+s<Et+)L:L]        3!3#!#B^B~~MMWr       !#3!73#
~~_z__      73267#7!#"&0qBZW[on=r--Sr_͞      33	##cH֔Pr?t\     M   3!!_       33###lPu`TuVG      	  33##{zPP    	  ##3{>zPDP      654&#"3267 &547> 'a`s$'`as*Y*>Z=hG6qhF6qרaJ^שcI   
   3267654&#%!2+#=XsHYyASJ1H]oP {         #'.+#!23267654&#.9"TG C>zD|y:\hF['?]Z4DmNShPIK/C   A    !!#!Sڐ_       33267>73#"&'.540dnF67Qod931qCBe#%	=4!!!!4<8l$!  !#D7 >   333##5|*Å|x yY>   )  .  "326?#7#"&546;7>54&#"7>32KI+3A7]}Ot.{F`s§PI6~FD{8u
E)/7wg+]58]Nm"
03e\Q:  &  0  3267654&#"3>32+3267#"&'&54"&eu6D`~Ot1}Pl[;];@Ez8Wr??#6vh+f]85]:im+9g..-)      73#7#"&547>32267654&"-tt'k?W!@V-r.pNO/0P2;08,1]{w7+2^z       O  3267>54&#"326?%!>54&#"7>32>32+3267#"&'#"&5467	NC2%8@
+%4C8
=5,[!&S-CXY:Q`J51S02V$3K X2MZ)7",K) ',GH.P3>,1 `.+-,QEpz1+/^%##%VIG4     %  267>54&#">32#"&'#3L5V$@?5V %C'h@gs4-0N>Tuu304=GH320?DK/0thQ=@G0/Og    %  "3267>54&3#7#"&5467>32h7T"@@5W#EkItt)h?gr3+/N>\103AGH311@CKDO/0ujP<BC0  % 	 &  >54&#"#"&5467>32!32676RIMB~AKC4Eub\8H	CKeU}wX=02k8,NR     $  (  7!7654'&#"7>32#"'&5473267.!0m8LH9I2
!ݗ<'w$UT2!<&8 fW<\*0Q6O)3 /bW    * 0  .547>32.#";#"3267#"&547>H93q?>j0Vh	IUid^x
\m>w5@v6o?#KX]0*,Q>-	)5a[C=S  * 0  #"&'73267654&+73267654&#"7>32H93q?>j0Vh	IUid^x
\m>w5@v6o?#KX]0*,Q>-	)5a[C=S    .  267>54&#"#"&'7326?#"&5467>327302S#G?aHO"3d0.c2^g%nEar2-/F?`t3/2}<BKBL)fZhA12xgN;?E60U   ? 	   !#7!#3#73w@ett#PP-   
   3%3##ykZj7xyFK      +  >32#>54&#"#>54&#"#3>32N16APiN 05OiN/3OjjF)/:&)=3M<g3B$H}g6@# Cs6"#* +   +73267654&#"#3>32Xht9HW&HQnMtt+vHl>!pmwXEG$%?g`s^67d;*   .    "32654&'2#"&5467>gFGgF<{4/1\v4/2IHIHWxsM=BBzrL?AC   4   >32#"&'73267654&#"3i3{
"ߤ3\+&V:m
Jm<g1[*1l$!~t*#>g!#   4   >32#654&#"4#a{2XYuՠS2;6*3_zx    4   #"&54733267#a{2XYuՠT1;6*3_zx      %  #3>32#"&7267>54&#"Fst'l?fp1,0M?Y3U#A@5W#FbP.1tiP>BD/(203@GG221@DK  D   !!;#"&5467#737'K1@jbK'P%R>B&TP   +   332673#7#"&5466TuU;5PoMut.qBR`|&,0h_b^76RG4   }   !7!267654&#!7!#K_fVlqi7"g<?0DhhL#a^      (  #"&54733267332673#7#"&K/UPjO,24OjO/.3NiiG'07('Q&<dkc+(Ega+(Eg6"#'  #   33##qa<}} ?  g  d  [tsV  d  +s  d  #  s  d    IH{  .  "324&%$32.#">32#"&'#N.08pdr6
RL&HP&:nPHJnf"2ZTZjwQ wI,.uW[׸jp|aU        `   !!!7!!7!!7!!<mnm< pFFhˏ5i V)   ;+73276?#"&7!7!BY&moZ980&|~ij>>~      #3>32#"&654&"26tt'k?W!@Vw-r.pNqO/0O2<08+2]{w7+2^z   3   #"&5467>32.#"3267!.i8D9;T8i2)Y5El%$'VV<p4~{S777f!22.v:QQ## -I 	 5  327654#"67&'&54767632&'&#"632#"$/\K@W
	a3
!sq611+,/.3pML	 J|4 # &:/>[).XX	`@?s'"@*bhj * ! 0  #"&5467>32.''7'37.#"32654&NG/-0Yy0-0T!YB2qIAi`TN:ACxrF;>E0 430pQ13
CJ$8    % 0  #"&'73267654&+73267654&#"7>32PBŠ6o9,n?mU_chVeLW0pDEv3yaH*]fa;7#9Q0" ,]P75H  3   #"3###737>3<<xtx
yvU/88P#P,l\   >   73#7!3#+7326?c<uEEh9H\P\m;<XFF    )  07'"326#"&'7326?#"&547>3!Ut2VPoQ/f18_*^j(kD|X~5;xt4)2_zf[bF53N/8  *   332673##"&546UtU(FRmNtuJ+wGl?{#&?g`bO68d;)   &    3#!3#3!737#737#tt)>&&,r\PP\ =   #"&547#7!;+hH	F)W 9t`:!(@Pp7     !#3!73#@ggP-PP      #3!737#737#7!#&&-@-\PP\PP    /     3#"5476;33#7#"3276.ttŧytrx)?rPHB,^ssW?#5"   
   ;#"&547#7!:!8dM	.!7X`<!'(Q   9
   ;+73276?#"&547#7!_!8EFhu8$$hH|. 8bm;<X#"Gb; &:Q   t]   3!!xU,_     =  67632+73276?#654'&#"#654'&#"#367632&%/U@@A^uj3!!O
,2OjO/.Nii#$'0):&=cSm;<X#"Ggc+ "#ga,	"#s6"     (  #"&54733267332673##"&K/UPjO,24OjO/.3NiiDG'07('Q&=ckb+)Ega+(Eg6"#' 
   +732673>32#654&#" eV!10X+a7[2SVR	;FixlX6V~a88f5/=w,!"Ck\    [v +  764'&#"#3>32;#"'&547B

:G44NWW,`8[ C1"UH/-B-56\sa88B$6/<H5
X6,+<    	  33##o{o{~  -   (    #"'&54767"!654'&!3276&;&$_`;%#`X;3e  XY;*T6S1;TTT5S1<U=5c%3!=3"==,   ! , 7  #7!#3!737&'&54767676767654'&b.%#`Ji^i0%#`No`f/#;g5';\\A5S1<TA\\D5S1<UD]/%>w6*3"%;)=x5*4") % F  &'&#"#"/;#"'&54?32767654'&/&'&547>32,329V01
Y&v+9<
	Cr'

:v=R21
g&h'@nb/$+0Wf	,X6!9%/"19-	*,X`        >;#"+7326LG{no>;~r-C;]MecU-:JxlX6    %  !!;+73276?#"'&547#737"BJDChu9"#,B"P#]m;<X#"G. =%TP      &  733!33##7#"'&54?)3276m>t>g>t>uu7t7>=Jz0
N^B;\\`9C*D'0$+-6/    &  7!267654&'7!##"&547>72MlI27;!׎|]X\{'yK5\mY.`#{\8b(!S $Ry:    6 "  3+"&5473;7267654&'&t<!֎,r?
WtW
> [44*8a'"W8%/p+)mY/e     ##3{i{s   	  !!!7!^=R^   P   !!#;#"'&54?!7!VG2!V^=R5
X6,+;^  	^    #67#7!7!3632#7327654#Ma	\&nIwn#8!!^R^=_jR
!         2#"&'73267654&+7!7!CJ9Cݱ;y>/xDxVhnL\& f2|mTP2I]R^   % 
  "  654'&#"!3276  &5476&XY@8 MXY@9&S.S.l?32&VVL~g?f&VVM]XK_۩YK_
& $       H
?{& D         P& %  
     ;T& E  2    c& %       ;cT& E       & %       ;T& E       suk'
 u& &  d    uf& vZ & F  h   jP& '  
    w& G     cj& '      wc& G      j& '      h& G      uj& '     wu& G     j& '      :& G       5& (      Hf}& H      5& (      >f}& H      5um&2 & (  
  bufH&2 & H    \  P& )  
     P& I  
     N0& *  
2    ;Hy& J        P& +  
     T  HP& K  
    c& +       TcH& K        N'
 `u +   T  HX& K   j H?u& +    buH& K    & +       TH& K       0& ,       0& L        Jk& .  
  u Z  k& N  
rucJ& .       Zc& N  2   J& .       Z& N  2    Nc
& /  2    c& O       Nci0&<  
     ci0&=  
     N
& /  2    h& O       N
& /  2    :& O        k& 0  
 8u  f& P   v      P& 0  
      & P      c& 0      c{& P        P& 1  
     T  H& Q      c& 1       TcH{& Q      & 1       TH{& Q      & 1       :H{& Q       R'
 2'
   2   u& R  &v   H   3  r& 3  
w|Vhf& S       3  P& 3  
    Vh& S         P& 5  
      & U       c& 5      c{& U       c0&Z  
    c&[       & 5       h{& U       {P& 6  
     s5& V       c{& 6       sc5{& V       c{P&  & 6  
   sc5&  & V       5P& 7  
       dP& W  
     c5& 7       cd& W       h5& 7       hd& W       :5& 7       :d& W       Pd& 8       _dm`& X       0& 8       0m`& X       :& 8       :m`& X       P'
 2'
   8   }&v  & X   H     +E& 9  
  \   & Y  v    c+& 9       c`& Y       R  `r& :  
  | \  #m& C Z     R  `r& :  
  | \  #m& vO Z     R  `4' j 8$ :   \  #& j  Z     R  `P& :  
     \  #& Z       Rc`& :       \c#`& Z        9P& ;  
      & [        9N'
 `u ;    & [   j      DP& <  
    V& \        t& =  
 .| N  mm& ]  d  c&  =     Ncm`&  ]    & =       Nm`& ]       TH& K         d& W   j  \  #b& Z  t   Vb& \  t    P&A  
     _H"  c& $       Hc?{& D      ct&  
  | Hc?m&  d    '
 T& $  
    HJ&     <cm&  
     Hc?&  r   5c& (      bcf}& H      5  ^& (  
 Tu bf7& H  v     5ct&  
 | bcfm&  d"   9c& ,       =c& L       Rc& 2       ucZ{& R       Rct&  
  | ucZm&  d   k&b  
u f&c   v   k&b  
u f&c   C   ^&b  
u 7&c  v   c&b      c{&c      Pc& 8       }cm`& X      8k&q  
vuf&r   vd  8k&q  
vuf&r   Cd  8^&q  
vu7&r  vd  c8&q  v  cq&r  d     Dr& <  
  |Vm& C \     cD& <      V`& \        D^& <  
 TuV7& \  v     Er&r       Er&       Er&       Er&       Er&       Er&       E&       E&        r'r      r'p      r'v      r'v    ]  r'    {  r'      '      'p     Jr&r        Jr&        Jr&        Jr&        r&        r&         r'r      r'      r'      r'    J  r'    h  r'     |V\r&r       |V\r&       |V\r&       |V\r&       |Vr&       |Vr&       |V&       |V&        r'r]      r']      r'J      r'J      r'|      r'|      'D      'D      r&r        r&      8  Jr&      j  Jr&      j  r&        r&        &        &        r'r      r'      r'      r'    J  r'    h  r'    f  '    ^  '     uZr&r  
     uZr&  
     uZr&  
     uZr&  
     ur&  
     ur&  
     r'r    r'    r'    r'    r'v    r'v       r&r         r&         r&         r&         r&         r&         &         &      ]  Dr'      Dr'J      Dr'1      D'     2r&r       2r&       2r&       2r&       2r&       2r&       2&       2&        r'r      r'v      r'      r'      r'      r'      '    ^  '     Ef& C       Ef   Jf& C        ff   |V\f& C       |Vff    f& C        ff   uZf& C  
     uff     f& C         f   2f& C       2f   EVr&̜      EVr&̜      EVr&̜      EVr&̜      EVr&  ̜    EVr&  ̜    EV&̜      EV&̜     Vr&q      Vr&q      Vr&q      Vr&q      ]Vr&  q    {Vr&  q    V&q      V&q       [V\r'     [V\r'     [V\r'     [V\r'     [Vr&     [Vr&     [V'     [V'    Vr&q      Vr&q      Vr&q      Vr&q      Vr&  q    Vr&  q    V&q      V&q       2Vr&       2Vr&       2Vr&       2Vr&       2Vr&       2Vr&       2V&       2V&      Vr&q      Vr&q      Vr&q       Vr&q  !    Vr&"  q    Vr&#  q    V&q  $    ^V&q  %     EH&       E&       EVf&̜ &     EVy&̜      EVf&̜      E7&s       EV7&̜ i      m&  
      i0&  
      f'p      f  V&q      2xrr  VY   2xr   #727#73V2"dV7v  F's MT j   [V\f'  *   [V\{'     [Vff'     |V\7&s       [V\7'  x  ;  f'v      f  	  f'D    Q  f  V&q      8Jr'   r    jr&d r8  's Fr    JH&        +&        -&            V7&s        &t       9  m&  
     9  0&  
    m  f'      f  jJr'       r&d $  's >     H&         &         &            %Vzr&r       %Vzr&         7&s         &t         Dm&  
       D0&  
    	  Df'D      Df    r'    F-'  r j  F  Pf C   2Vf&  2     2V`&       2Vf&       27&s       2V7&      Tf'     f  T  f'      f  V&q      ?ff v   dxr   73#3"e""ïd  /Z    991 0!!P
!/Z   y  @  991 0!!/y   y  @  991 0!!/y   y  @  991 0!!/y    y  @  991 0!!/y   ' _    _      ]& B   B      9@   : og 91 0KSX9Y"#73)~   5@  :o g 1 0KSX9Y"3#)  /  5@  :o n 1 0KSX9Y"3#)/ B   #7B*t*      e@3   
	: o	g
 
991 <20KSX99Y"#73#73&'~~    y   _@0
	  :	o g

 91 <20KSX99Y"3#%3#)) /   _@0
	  :	o n

 91 <20KSX99Y"3#%3#''/  )    #7##7*s**s*   ;o  \@0      :
 Q	
 99991 <20KSXY"3!!#!7!Roٮo\]     ;;o  @L:
 
 Q 

	9991 22220KSXY"%!#!7!!7!3!!!RPojoRRohn\\ ?!  	& 1 04632#"&?}|}||{|  ?q   ?    )/    w@<
	   : n

	 999991 /<<220KSXY"3#3#3#<o;;///          ' 3 ? K m@<%1 =1%+\C7IF:4( :"FG4"@
"G""".G"@(/99991 /<22299990'32654&#"4632#"&32654&#"4632#"&32654&#"4632#"&H%'H_EDbcCE_yxxwyLaEEacCEayyxxyaEF`bDEayyxxy7a`JGacECcaEyxyEaaECcaExxy"GaaGCcaExxy           @ L P [ f  4632#"&62654&#"4626763267632#"'&'#"'&'#"&732654&#"/2654&#"2654&#"yxxyyaacCEڊE
		
EfdE
		
EfddeF
		
FceF	
FceeO:9QR8:O%'QtPR8:QzQtPR8:QyxxyaaECcySSSSxyTTTT{GacECcaa`JGaaGCcaEGaaGCca  `F   3`u  `'j       Z`r&  '  ,   `   #3W`u 8`'j       `*'  ',     5 m#  @ u C91 907m+!{#R   = s#  @ uC 91 90%77=+_#^R    ?  '    4     M  _   $  #7>3273767676'&f #`o%ih\[..piR622 T6J!	7#D98``LAB\VBT=BR-;,,1Y7      B          $7#"$'5ZThh~vvuw~i      !#3#3!mVEF       #73#7!!73'X;ޏ   '
  
4     x  '
^   S     ?  '   
      ';   2###/%$ڤ0ЍH辸   a  $ <  4762#"&%#"'&5476767632276767654'&#"bJ&%6N89JKd??&&:9JJc@@Y6.,!/!!H8,. /#"@  ,kMO&&EDl{zOO&%ED8NtsdV'&5NtujO'&   ? 	   !3!73#3#(wettPPD    
  t@>
 
  
JJJJ:  `		991 <290KSXY"33##7!7	!iuw!#~
oy}y    4 &  !!>32#"&'7327654'&#"1 <MM##A>IM`H~09v?}RR66`5782_	?@gFAB0.rABaH()    b  6  4'&#"326.#"67632#"'&5476767632f''HbCB))Ha'\2TT%1;?LvBA.5BCRJJ-Bfg200?#"GFkC'&ThPP=87h?FC.7ABx]deRx<<	    a   !#!u
$5 A  , :  4'&#"3276&'&547632#"'&5476"327654'&M-,O`=>ZLc==H$%dcxBAkS,+̟POFG2UnNER98((A%%87V;F34();eHHfPOA@0.Ku99d]BBUZF7@11F2  a  4  327654'&#"732767#"&54767>32#"'&NH`DC)(HaAB'.-3UT%.?>Lx-5RKK4.Bgf3//@DGFkE&&KKhPP9pgCBC.66BAx^Rw=<	  ,   !!#5!5!5j,__    3   !!f3_  a    !!!!ff`D_ ;   #.547;%&e1/Q[jPO  <   654&'3&&f00VQZiP     #6&#"#367632KK;PZ;:Dy-@@Px^!{TP43`s^6~ aT  d  \  C {  d  3  T t  d  T u  d    C  d  4C  d  bT  d  a  C  d  AT  d  aT  d   ?  d  8  d   	  d  i;f  d  i<f  d  )  d  %  d  .  d     s|  d  $  d   XS  d  
  g  d    8nz  d       d      d    d  "  {  d  D  %  d    Q   #  #"32.#"3267!!!!!!>DHEs.+mD;mC>F,o6667756GFDFG
k   N9 , 6 <  073&'3267#"'#7&'#7&'&476$;73&'&$/zE"/2.rd'ad"y#,'4yQ	e_d
zsZlL245+,#$-r9(YY34@W}

XI
FRlzd	  N 2  %6767#" 476$32.#"3>32.#"JGkd'cef_ekR"PhM24WFy7W,6m
,Y348XGGa^lzkVeX]ɨ   9     !!!!3###7K4,-=Hϔ    -   #  !!73#737#737632.#"!!!BB0@@!8y:&ecm.(*    .BI +  #6'&#"#367623632#6&#"#Se@GT<=Inn1;:,teM=GhUNnM2FU<=In"xGM_a`f21>&>E3\__       " & )  ''#!333#3#!###737#73377'(%hkkkhkk'(4&{{&&{{{     ? X  32654&#+#32333632.#"#"'&'#"&54673#;732654/.545{TY=65M{9bcg9Y>^,T(#O)GQ_Y<o+/UOO:߆9%)1_,BRl	D?/ϰit^վ>/J((cUc53pa
7!`".@:M46tY`;%y^     	  E  326&##.+#!232676&/.7>32.#"#"'&;TdGT}CEEFty`L#6 3468J[	1^#^Gv;d((]3OX	1Q#kN|45/b؍$~3YQKP%$((TT@I!*     *  " & ) - 1  '#73'3!73!733#3#####7!73'!!7g=&[8\89%=!Og!h	"!Q;!uuguuguuuu  E    %2#6&#!#)"33!3Ɠ5E@+SMrƔ6D?,SV*$oN w&   ik    - |@C$%|{c!|{
c '+a!e.'.-,+($ $&,$.9999999991 <222990 32.#"!!!!3267#"5#73>7#7]LJH'FGG28/LU'PV1
1!*(A<l+\4n6@=*(-n;Y'l   !  3   33!!###5qp04ၹhZ{ur)r      /   !7!!77#'?'d,!o /Ky_%~aMnjMw]MkfM   
'  3 l    '67>32#"'&'"32676767654'&'&67'>7632#"'.'&/#"'&547>3232676767654'&'&&#"32\!+"X3&;#$06--$		 #	
U@'D[i&#/>$*)5' /2/=!	S6&X&8^)
5$	'*ޛkSo;48O07zfi8@ 3l8#?7%!73:'&)3^
";6T$B~od4LNtFu05	
.'
#UB4F_A9pTne?<&#cE#   5 1 A  '632327&54767632#72767654'#"'&#"%67654'&#"~mfp,=,>	Xa|jG)
)l#tz`MJcg1 1.$Q./*`NkB04X``7a0<㫃%&qJ<Na~hFl*!#??0W!}    3  !  ! & +  !23#3#!###737#73!32767!%&+Vl[p[	`f(Su˳dcnmև%\MZ.+ZfJZYZ*/Y  <[x & 1  #7&'&54776?3&'&'6767#7!'_L@_R_J&FYQaG=D;Gnpiuel_[6*5nnͦ$F_0,?'S*% ldYl          7!3!#3##!##7373!/3|IH>2 gbϿ'R{{{{{A   6  67676&#"7>323#!!3267#"&767#736767!7eA^g'qV' o):7hہ*ti)WD	4cq<;''K={[/	{9b{DI--N@{
O/{      ! ,  &'&#2767#&'&776?)GLKff]]o)gc_\4d5]=?,e+\RV_P0-
W6i----iH$"u9Bt"#BuflC     g  3    !!!!#!s!s!-+ժx	    p   %  !!##.+732767!7!&'&+7OF#O\cJ,+3|i.hc ݑVGO(<O{P{V^86hy]M@f{L5N{       !#'%7'%3%%2 Khi9^6^^B;:e.:~n؉noوo.  	      !2+!!##737#73326&#I++!t 44 ! 7m3⦦1ϔ
   t  %  %3267# '&547 !2."U|d]
ք{OH}8Sryx	A<	7@,Lԉk|r4*:0Nuev      # 5 D  .#"3267#"&5467>32%3#%"&5467>3232654&#"5E$(H)-CD$PK1X.v@@+xF)Pڞjz'!4Rf}'!277Sq95/I:!*'?[jb!8Z@AKä^ChffDielmcfaBF5    :       3!3%!!!!!!Dfegqdx+%  T  H K    T  H   632#64&#"#'?3%Ǘŋ]W!{1$ÑEmJHWEbOYbc    J      %#	!3!# GHMZMdq+   y      0  2#"547"327654!!3>3"##726442	 3	b[y$U2y$U2.=.=0Z/=	1Q~>;\>      }N  * 3 >  "32>54.'2#".5467>32654&#%!2+#hjMMKLijKLkZZ\[~}ڶ[\ZZ&RXXRuJjhKLLLijJgZZ[~}ڶ[[}~[ZZICBISqmop   B        33!27&#%!2+!67654'&` `s1:+YX*qjdZ)VV)          (  %#'#     %27&"676'&\ӿ,F E]]]][{ab[2222jT%%5$c$  %   	  & . 2  &'&+3!.+!!2!27&#676'&%3A::f&AVy-`5?vfAd)7%LK$201/O~hbb)j)V>U)-      f   h@6	
	

				:	
 Q
	11 010/91 <<2<<90KSXY"###5!3###r}r7q^^  -B  0      %#!!!5!bJZCJ]dqddd      J .    m     -  )  7 7673 $54$32!"53!25&'&#"6Ky{U>ZLtࠢ""38M{{M7M3TT<`xGZAEIpP3RQ4O        	    !!!7!#3#3#B!#n!ӄO-`ddh   /{&
  ' V {  /{&
  ' ` {  /m{&
  ' {  u V /m&
  ' t  u V /{&
  ' {  V /&
  ' t  V /&
  ' u  V /{&
  '  V /{&
  ' {  V /{&
  '  V /{&
  ' {  V /&
  ' u  V /{&
  '  V /{&
  '  V /m{&
   {  /m' u V&
     B } 	  5!!B#ZpZR#ZZ      M 	  	'#'"ZZ$MZpZ#     B } 	  	'7!5!'7ZpZ#ZZ      M 	  !737@ZZ#ZpZ   B }   !5!'7'mZ#ZZ#ZߠZ#R#ZZRZ     M   %7#7'3'ZRZZ$R"ZݠZ#ZZ#Z       a 	  7!##:nt':tn       a 	  #5'#5!tn'dtn      a 	  )53753dtnntd    a 	  733!ntd:nt  B }   3!'7!5!7ѓc}Z#Z㔎RZ#R#ZR   B }   #5!7!'7'7!'/cZ#ZߤRZRZR   Yxa 5  32767676767632&'&'&#"#"'&/#7!$f !+!3-68+2",j!!!3
.6+85.0$m:w'07)(6;C+: ,:'+:   Yxa 5  !5!#5#"'&'&'.'&#"'6767632327676:m$0.58+6.
3!!!j,"2+86-3!+! f:d+':, :+C;6()70'w   B }   !!'#537i&ڠZZ#ZZZZ#R#ZZ     M   '75'3''#ZZ$R"ZZ&ZZ#ZZ    B }   '73'7'7#'7!5hZZ#ZZZZRZZ     M   77#75'73ZZRZZ'ZZ#ZZ&    B }   '!5!7ZZ#ZZ1ZZ#R#ZZ  B }   '7!'7'7!'4ZZ#ZZ1ZZRZZ  B }   53#5!5뤤4Z#ZhZ#R#Z      M   %'3'3!5Z$R"Zh̠Z#Z4     B }   !'7'7!#3̠Z#Z4ZRZ      M   7#7#5!ZRZ4Z#Z̤     M   %'7'3'73!5ZZ$R"ZZhZZ#ZZ   B # (  276767654'&'&'&#52#!5d

	
>b-*,%:0Z#Z
	
*+(54<852.&Z#R#Z     B # )  !'7'7!"'&'&'&547676763"mEZ#Z0:%,*-11>
	

ZRZ&.258<45(+
	
     B # $ >  2+#5!5!54767676"3276767654'&'&'&l>b-*,%:0ΠZ#Z2)-019	o

	
#*+(54<852.&ՠZ#R#Z};47(+

}
	
     B # $ >  !'7'7!#5#"'&'&'&54767>";54'&'&'&e910-)2Z#ZΤ0:%,*-b>
	

o	#+(74;}ZRZ&.258<45(+*
	
}

    B } X  3267676767632267676?'7'7#&"'&'&'&'&'&""'&'&'&#5!!Z#Z	>	>	Z#Z"		*!#$'		*	ZRZ
% '%

%' "
Z#R#Z   B    !'7#5!3'7'<2Z#Z<2Z#Z Z#R#Z ZRZ    q  `   %7'7]JQgz=ZӄhPJV}      e   5!#Z"ZǠZ#R#Z      e   !#!'7'< Z$Z9kZRZ      e   !3!5zZ"ZZ#R#Z      e   '7'7!3<Z$Z|ZRZk9      R   %!5!7#7yAcZRZѤZ#Z     ?  ]   !3!5ҤZ"ZZ#R#Z    QX )  7676767632#4'&'&'&7#7K$<9JGTWDL7: %#0(79).%$ZRZ5NSH;9!6:IFT7/0'$&$2(GZ#Z  QX *  7#756'&'&'&'&0#676767632ZRZ$%.)97(0#% :7LDWTGJ9<$5Z#ZG(2$&$'0/7TFI:6!9;HSN     2   	   7!##5!:ntl':tn?PP    B      !!#33#'7!5!'7#Z4ZݤZ4̠Z#ZZ##h#ZZ   X  y 6  #"'&'&'&547672767>54'&/#7!J%%%'HD_SlhX[HJ%%%%Jw422-A8;>112-!:zJZ[ghX\HC+%%'GKY[eg[WMs2=>FD{2,/2{DF>H':   X  y 6  #5!#52767>54'&'7#"'&'&'&54767<:!-211>;8A-224wJ%%%%JH[XhlS_DH'&&&Iz:d'H>FD{2/,2{DF>=2sMW[ge[YKG'%%+CH\Xhg[[I    B}   5!B#Zp{#Z  B    !!BMZZ#      M   3'#|"ZMZ      M   #'Z$MpZ#    B}   !5!'7pZ#ߤZ    B    '7!5Z{Z      M   !37ZMZ G  M   !#73{Z#Zp   B  | 	   	'7!5!'7	5!!ZpZ##ZpZZZR#ZZ   *  M 	   !737	3'#'2ZZR"ZZ#ZpZMZpZ     B  | 	   '7!5!'7%!!ZpZ#ZpZuRZZ#ZZ#    B  |   '5!!!!5#ZppZ>R#ZZ#R    *  M   73'#'#'3hR"ZZ$RZppZ#    B  |   '7!5!'7!5!'7ZppZ#>RZZR    *  M   %#73737#hRZZR#ZppZ     B A!    '7!=!Z#Zp{Z{#Z    B A!    !!	!5!'7BMZMpZ#ߤZ#Z   B }    !73!!!'7#5!!qVa6ZEV`6NZ#Z">RRjը;mRR:lNZ#R#ZRR   B    !  !373'7'7#'7#537!7'!RRȚNZ#ZN|NZ#ZN.9#!RRRRNZRZN ~NZ#R#ZN RR  B }    !'7#5!7!5!73'7'%!7'!`]Va6.ZxV`6NZ#ZRR;mRR:lNZRZRR   B }   !!5!RRpNZ#ZNRRRNZ#R#ZNR     M   #'3'#'RNZ$R"ZNRSpNZ#ZNpR   B }   !5!'7'7!5!7NZ#ZNpRRNZRZNRR     M   %37#73RNZRZNRRpNZ#ZNR    B }    !!7/7'7!5mRRRNZ#ZNNZ#ZNRRRNZRZNNZ#R#ZN     M    '77#7'3SRRSQNZRZNNZ$R"ZpRRmRRANZ#ZNNZ#Z   6a   ##7!#tn::n3:t:5p::     6a   	'#5!#5'5C:3n::n:4:dp:nt    6   %753!5373:4:dp:ntn:nd:4:     6   %3!'3n:nd:4:n::p5:t   B }   5!!!!!Z#Zwgw"?Z#R#ZRwRwR  B }   !5!7!5!'!5!70"wgwZ#?RwRwRZR  B }   37773'''#5:;!\[`Z#ZCCjjZ#R#Z  B }   '7'7#'''53777Z#Z`[\!;:ZRZjjCC      M   %#5#535#535'3'3#3Z$R"ZtZ#Zt     M   533#3#7#75#535#5ZRZtZ#Zt   B } 	    !553353!Z#Z{Z#R#Z     M 	    '3'#7#7Z$R"ZnZ#Z}ʻ  B } 	    !'7'7!+53#53Z#Z}ʻZRZ    M 	    7#77'3'3ZRZZ#Z}6    B }   !!#3#Z4ZݤZ#ZZ#    B }   3#'7!5!'7뤤Z4̠ZZ#h#ZZ          5!5!	!!?
Ou]%uu      v    333'#!#\^vtP
u   B     !!75!!5
t]]X     v    ###3!3,^\X&
     v  
    3'335%!!#	#^\XtvpFgu      v 
   %3'3#!5%#	#3!^\^$tv~Fu    v     #3#!5#3/#	#3!J\^^|HGetvJ~{GGMu       v     3#!!5#3#	#3!F\F^tvW~u       v     3'333'37#	##!#^\fd^tv
^u9    v 
    #!5#3'%3'37#7#	##3!3^^ fd^tvJ^u     B  
   '#35!7'!!!5	5~t]]     E  F 	   7!##!#*:ntaI':tnIF    E  F 	   %!53753!5!ldtn~ntd&I       v 	   #7#3'#	#3	3\^^tvP*Outu   B }  ' 0  #"'&'#53676323'7'7%&'&#"!32764RvxN1kk2Ow9g' Z#Z0GD2&+JD5@3PO2BB4R,( :ZRZ11/0  *  M 	   !#737'#'RZZ"ZZ$#ZpZ*ZpZ#  Ba   7!5!'7!5!'7'7!5!ppZ#Zp?ZRRRZ  B }   #5!5!53!Z#Z[qZ#R#Z    B }   !5!53!'7'7!#p\Z#ZߤZRZ   B }   #53533'7'7##Z#ZZ#ZߠZ#R#ZZRZ     B }   #5##5#53533533ҤtZ#ZtZ#R#Z   B }   #53533533'7'7##5##tZ#ZtߤZRZ    B }   53533533'7'7##5##5Z#Z8Z#Z8ߠZ#R#ZZRZ        	  !!	?Ouuu  B   	  7%	!5uzR##        7	!	?S:uuzRuu##   %    
  %!3!3hV[7ln7R{+  u\     #&'&#"327673 u	B!OO!B
ocI7͙7Ic   L   0  "'&547632654'&#"563 3276767&#"\m`cu\6% GGnthr5?,/H@3H5,Y:$UeI+HQ\N,tqzSd69->eSY׮l          7!!5!!5!!LLk+  5     !#7#53!5!!5!733!ZD2/+^^``k    I b ! 0 ?  "'&''7&'&54767>2"&'2767>54'&&cv-'''OO_@8vcu-'''OO_A:GE:;9($(#&GFF:;9cv8@_pm__ONP(-vcu:A_mp__OOP(-9;SPF($(9;PSF'      O@*BBB  B :  91 /90KSXY"#3	!q          !#7!hqq       P  C ?3	3 ް2ް22013!!"&63!!"!0",Z(膆(\JN*"f_QQĪKM_f   OPi  % + i ?33 ް2&2'2$%ް2222//01%3!!"''7&'&6;73#!!#"!#L(0,:CyEB航6'|>v\JK-".4"$:1cQı2#KK_ff_lF    O]  B /	3
3ް2  ް2201!3!!".>3!!"N=c(憆(c=֪I9[[9I     P  C ?33ް2  ް22	01&'.#!5!2#!5!276767!5 ,Z(؈膆(\JL, 1f_rĪKM_f   OPi  % + h ?3333ް2$2%2&' ް222//01&#!5!27+'7#53!5!3276767!73&'&'(/-9CyDD舫6'{rx\JJ. 4 %:
1crı2ݪyKK_ff_lF    O]  B /33 ް2ް22	
015!&'&#!5!2#!5!2767>b(؈憆(؆b>,I9[[9I         3!     L9  @ LL 1 20!#!L^    L9   !3!9_k^   L=  -@	 	
 <91 990!!5	5!!LR%#
Չ\P_   X-y   l 1 0!!X!ת   X  y    !5!!5!3!!y!DCmIL B#     +U   e  +G r    ?   ; 
 /@
 
	 991 90'%3##d)#Ӕ/}b%9    ;v 
 3  '%3###"&'532654&+532654&#"5>32d)#Ӕ/>^c:r;Eq-evnmBJ]b`W,p;Eu2X}b%9lP|yQDJLl?<8?yvcG]   ;e 
    '%3##33##5!5	!d)#Ӕ/ڢtt}}b%9Soyc       %  .#"326"&'#"&54632>3"38\<HZRDDjPNBT~^8.Z8h.8\:{cjmvd|k֥suu|d     )    / 7@$	'!	-0 $22*099991 <2<299032654&#".#"326>32#"&'#"&546329[=G[TFBi8\=G[SDCj~/[w~SNAU}^sdlkutcjmv u۠d|k֥s  }T   !3!T*,     }T   !3!T*p    _      ,   33#	NM^T    ,   3	3#T^     , $  476767632#4'&'&'&#"#;9_UijB9
KGLV<SDbg:8 :;3l\]A99 )0!&p0`    , $  33276767653#"'&'&'&S<VLGK
9BjiU_9;^D`0p&!0) 99A]\l3;: 8:gb     P   47676&'776^Aj\Nx]Aj\NwD"jdEqqCjdEqqC  ?|  /  47632&#"'776%47632&#"'7769CmjZCC:59CmjZCM06P9CmjZCC:69CmjZCM05D"b\i9&
	b\i9+"b\i9&
	b\i9+    5  / G  #"'767654327&#"'767654327&#"'767654327&R2"$J2q-22"$J2q-12"$J2q-22"$J2q-12"$J2q-12"$J2q-2NJQo]NJSmNJQo]NJSmNJQo]NJSm   'Q4W'QWQ$    'Q0$'Q$Q W   'Q$Q W    'Q0$'Q4W'Q$QW   X-y'Q $    J      3#3#!!|    W }'QnW'Qo$'QW'Q$   X y'Q W'Q $    Xy   #"'&'.#"5>32326yKOZqMg3OINS5dK
t]F;73
";@<7 6<    Xy   32767>32.#"#"&'XJF]t
Kd5SNIO3gMqZOK?<6 7<@;"
37;    X yG   &'&#"5>323267#"''43OINS61-NSXIFJKOQdSP;@<7W"<?;7)     X1y    !!#"/.#"5>323326X!!KOZq!Sc1NJOR`!t]D;83$<A>777=  X`y    !!#"'&'.#"5>32326X!!KOZqMg3OINS5dK
t]Fc;73
";@<7 6<  X bz '  767#"'!!'7#5!7&'&567676ǧfYUE5kIQ%\n*xrYQMoIF\<[ETFRq$"B2(d%(9L5X    X y   $  !!!!#"'&'.#"5>32326X!!!KOZqMg3OINS52'V
t]Fجϯ;73
";@<7	"6<   X 1y  0  %#5!7!5!73!!!'#"'&'.#"5>32326Qu {hq, gqTKOZqMg3OINS52'V
t]FR=R;73
";@<7	"6<    X  y. 1  %!5!7!5!7&'.#"5>3273267#"'!!!!'hMEnK	Mg3OINS523J:VQFJKO!8!E$F";@<7 8<?;77   X1y  7 K@&' 10+5l l* l5'l.810 *8<2991 <2<<99990#"'&'.#"5>32326#"'&'.#"5>323326yKOZqMg3OINS5dK
t]FJKOZqSc1NJOR`t]Dï;73
";@<7 6<а;83
$<A>77
7=     X 0y 8  &#"5>327&'&#"5>323267#"'3267#"/'00NJOR:G67'43OINS520N]a91FJKO?J4r[DKKOdgb<A>7	;@<7!7)<?;75=@;83)    X y  7 ;  #"'&'.#"5>32326#"'&'.#"5>323326!!yKOZqMg3OINS5dK
t]FJKOZqSc1NJOR`t]D*!;73
";@<7 6<а;83
$<A>77
7=     X y  7 S  #"'&'.#"5>323326#"'&'.#"5>32326#"'&'.#"5>323326yKOZqSc1NJOR`t]DKKOZqMg3OINS5dK
t]FJKOZqSc1NJOR`t]D;83
$<A>77
7=;73
";@<7 6<а;83
$<A>77
7=    X y   $  !5!53276767632.#"#"&'y!JF]t
V'25SNIO3gMqZOKج#?<6"	7<@;"
37;  W y'      %52%  $'"51pZV(Iٜ    X Dz  ;  %76767!##"'&'&'#5!!5367676323!&'&'&i1*+V	WJRNMR 	W,!::!,\HSLPM%+*%'H:^2:A<336G84^:H'@'H?Y L=@33/N0<^:H'%    X`z  !  !5367676323!&'&'&!!i:!,\HSLPM%+*!#'H?Y L=@33/N0<^:H'%  X`y'Q      Xy&    'Q Q  Xy'Qo&    Q Wz'Qn&    Q  J.      3#3#!5!5J=>𹬬  J.      ##!!!!>7B     X`y 	   365&'!!5!&547!5!!%43448>!0IG00GG2?8>;_8    X`y       !!!!"264&'2#"&546X!!IdddeH:l'**z{BbFE``bq+((d:svv  X`yK     !!!!2&'56X!!BS	    X`yD     !!!!73#X!!鏫BZV  X`yD     !!!!33#X!!֕BLV   X`y     !!!!!!'X!!߰TUUTB      X`y   
   !!!!!3!X!!-eBz(i     E`    0 7 G O  !!!!#"3###535463!3267#"&54632.#"'53#5#"&4632264&"X!!4@#mmC???DJB&G$$K&aqk[Q_B;18BCC?-I\\I-?<i<<iB$7%$3`3D= DH>p`ctiF6A?9i=$#tu#gSSS  X`y   *  !!!!>32#4&#"#4&#"#3>32X!!."]?T\Y88EQY7:DQYYU;;RB=:xoHOM]QHPL^P%U20=    X`y    ,  !!!!3#7#546?>54&#"5>32X!!ffc`--A6(Y1/a3\p$-,BiN2A+,/-7#!^aO&E++
  X %y  <@ 
 l
l	 <291 <2<<990!3!!!'7#5!7!X}y}J;fժhӬ  X yB     !!!!!!X!!!ج   X 
y   %#5!7!5!7!5!73!!!!!'G=XkXU7Y Z:wSAw@   X  y      7!!!!!!!!X!!!!߬   V  w?  
 (@ l 	<2291 /905!5w!!LK
     X  y?  
 (@ l	 <<291 /90-5!!X#!!V  VTw  
   3!!5!5V!!!!߬¶LK
     VTw  
   3!!-5!5V!!!!߬V  Vw    #5!7!5!73!!!'5 p[5m{*[y~!߬`u,`vLK  Vw    #5!7!5!73!!!'-5 p[5m{*[y!!߬`u,`v     W  y   &%5767$'5674[zآb|۠M)Ig#M(Jh#  Xy     %5%%%'w2rK/dtm0x0oV   Xy     '75%%5%'rKnd.t'o0xEu0#oV   Xy    !5!%5%%%!!'X C_^?sMN#N+PJ>`5Yd|5  Xy    !!'7#5375%7%57'NEO>:fLNtt5\h}a5H<  Vw?  #  %#"'&'.#"5>323265wKOZqMg3OINS52'V
t]FJ!;73
";@<7	"6< LK    Vw? ! (  %#"'&'&'&#"5676323276-5wKHGOZqM343OFGINIIS52'V
t]FDE)!!;3
"@<	"6   Vw + .  %"5>327%5%%%3267#"'&'&''}QINSE^AsMP#Bt]FJKOZq _4O;@<7փ_5Xc|6<?;73
5K>     Vw  2  7'732767#"'&'&''5676?5%7%53;L
t]FDEJGLGOZqP<gUGINI5:"gNKtYG;6?83
$5@<j]i~b5   VJw    3-5	5V!!!! LK     VJw    !5-5w! !!߶LK`    Vpw   !  %'75%%57%5%7%'NmL4P|3hnL,WJ/qN0NZpOh2MXXH  Vpw   !  %%'%5%75%7%577,~'b
0&|}A0Yif2e\`j0^_8c7   Vw/ 
    %5$w\?&C@WaŖ   Xy/ 
  5 5 %$XC&?\@9;^aW   Vw 	   %&%5& &%&%5$7$7p˱l#a68O]ɗ9=}    Vw 	   %56%6%55 %$)ޱpMa#lܜ86˖}=9"]O     Vw  *  %#"'&'.#"5>32326 &%&%5$7$7wKOZqMg3OINS5dK
t]FJl#a;73
";@<7 6<RO]ɗ9=}     Vw  *  %#"'&'.#"5>3232655 %$wKOZqMg3OINS5dK
t]F)a#l;73
";@<7 6<R˖}=9"]O   V[w    67&%'&'5$774hmU֠Gc _eT2wnw2"O0Bj%   V[w    '567&'567&hmU*c _eT2Vwnw2O0BDj%    X y_   %!"'&54763!!"3!yɊD_`Dƍ^`     X y_   75!27654&#!5!2#XD`_DȊɣ`^ȋ   Xy>     #"&'&5476;7!!!!"#'J_+30TD~K9#

K^+#Eƍ5p5    Xy>     32654'&'7+'7!5!!5!237RJ_+30TD~K9FC

K9^+#Eƍ55    X  y     %!5%!"'&54763!!"3!y!ɊD_`Dƍ^`    X  y     %!=!27654&#!5!2#yD`_DȊɪ`^ȋ    X,y  &  %!!'7#5!7&'&5476;73!!!#"$UrG6:qYȲG5^_=R5 Yƍ5p&`=    X,y ! +  +!!'7#5!7!5!&#!5!27327654'&'92D4VqF53D&#I`__ 2ȋ559`^`    X0y  !  %!'7!5!7#"'&54763!!"3!!yR|ɊD_aDAQjfƍ^`5e  X0y  "  %!'7!5!7#!5!27654&#!5!2yR|Da_DȊ]zTQjf`^ǌ^De  N    3#%332653! &1  N    332653! &3##5#535eDdd  X wy  1 /3ް2  /301!!!!X!w@    X wy  1 /3ް2 /3 01!5!!5yw   X y   H /3 
 ް2	ް2 /333017!!!!!!X!!w߸     X y   J /3  ް2	ް
2/	3 01%!5!5!!5y!w<Dh     ^  r   #!#r@Z    ^  r   33!3^Z   O i  3 ?   2"&'&'&547676"2767>54&'&'3!!#!5!ݾOO''''OOݾOO''''OO~GE:;99;:EGFF:;99;:FތPOO__pm__ONPPNO__mp__OO=9;SP;99;PS;9     O i  3 7   2"&'&'&547676"2767>54&'&'!5ݾOO''''OOݾOO''''OO~GE:;99;:EGFF:;99;:FMPOO__pm__ONPPNO__mp__OO=9;SP;99;PS;9Ռ  O i  3 ?   2"&'&'&547676"2767>54&'&'77''7ݾOO''''OOݾOO''''OO~GE:;99;:EGFF:;99;:FBccccPOO__pm__ONPPNO__mp__OO=9;SP;99;PS;9cccc    O i  3 7   2"&'&'&547676"2767>54&'&''ݾOO''''OOݾOO''''OO~GE:;99;:EGFF:;99;:F,ccPOO__pm__ONPPNO__mp__OO=9;SP;99;PS;9Kcc   O i   7  3#2"&'&'&547676"2767>54&'&'ݾOO''''OOݾOO''''OO~GE:;99;:EGFF:;99;:FPOO__pm__ONPPNO__mp__OO=9;SP;99;PS;9  O i   2 L  2#"&546"326542"&'&'&547676"2767>54&'&'h7b%&'qqnNL88OݾOO''''OOݾOO''''OO~GE:;99;:EGFF:;99;:F)'%`8nqqMpLM77POO__pm__ONPPNO__mp__OO=9;SP;99;PS;9    O i  ! ' / 7 = E   2"&'&'&547676%&'&'&654'67676-ݾOO''''OOݾOO''''OOf :F-T1-F::E.S 1.E:POO__pm__ONPPNO__mp__OOAϚ9FPQ9.9떖EQPD19    O i   ! ;  !!!!2"&'&'&547676"2767>54&'&'+{{ݾOO''''OOݾOO''''OO~GE:;99;:EGFF:;99;:F;gZfPOO__pm__ONPPNO__mp__OO=9;SP;99;PS;9    P j  . 2   2"&'&'&54676"267>54&'&'&!5!ݾNNONݾOO''NON-R9;99;9FG:;99;:FFxmPpnPNPPNP^_mpON<<9;SQ;:<9;PS;:+     P i     %!!!3!!#!5!3Ҍ8Ȍ7ǌ6    P i     %!!!!53rM_  P i     %!!!7			'3ͬcccc
#cccc	   P i     3#!!!3  X  y   !!# yӪ    X  y   !!5!3y--  X  y   !!5!!C!DZ  X  y   !!5!Z  X yw    	5V!     X yw    7%X!ߨVw^^  X  y?   
  %!55yyy!LK     X  y?   
  7!!7-X!!ߨ{?繷   g    7!6762"'&'$&"26i1[륢S4OsPOtO.D/YR3BPQqOO    LN   #4&#"#6! NMz(  /N   7332653! &;zM    i g    	Y     /`  n  1 03#` 7 	  !!'	TSTS8    X`y    !532767>32.#"#"&'yJF]t
Kd5SNIO3gMqZOK?<6 7<@;"
37;     
  !3 3 qj}+)y     
  # # y(,}     Zw
  #  !"3!!"&5463!!   )!"  3!wk:PP:jkwjQ9:PD{|  Zw
  #  !2654&#!5!2#!!   )5!2 54 #!Z:PP:kjyikQ9:P   XAy     755%5!5X!#!!ʶLK
     XAy     %5	-5!!y#!!!!KLV     V  w?  
  55!5!w!!!KLV     X  y?  
  55%5!X!#!  Vw 	   $75$&%&%5$7$7 "nWlܜ86s˖}=9]O    Vw 	   $'$'5 %$5)n˱#lݷW680O]"ɗ9=}   Vw) % *  67&'&%&''&'57&%5$?7dMjTVʥ3˱!3a4m"cjX)3S][e﹏3N@%HZ-=}k$    Vw) $ (  6%'56?56%7$'57&% D>WwZN(۷+/m")33 +Si06 3hiyje˖     X[y    3!!!'7#!	!PYBzrYh?ݪ@?@     X[y    3!'7#5!!5!!PYzrY(s??ݪ@   X>y   !!!!!!'7!5!7!X!w R`Rgfjf    X>y   %!'7!5!7!5!!5!!yRgw! RjfhDf    Vw? %  %&'&#"5>327%5%3267#"''43OINS:Z0!!x2XIFJKOQd>3;@<7ҧK{"<?;7)   Vw? &  -53267#"''&'&#"5>327V!!?E>XIFJKOQd>C43OINS:Z0"<?;7)';@<7ԧ     VKw  .  &'&#"5>323267#"'' &%&%5$7$743OINS61-NSXIFJKOQdSl#a;@<7W"<?;7)XO]ɗ9=}     VKw  .  &'&#"5>323267#"''55 %$43OINS61-NSXIFJKOQdSa#l;@<7W"<?;7)X˖}=9"]O    P     3#3#3#P3f11    I b    rLR   50zJ.     ?  	  3	%!	=yzU    ?>   	#	#h֣ͣG9    >   	3	3h*338      >  	  !!#	#g֣ͣrcG9     >     !!!!#	#gg֣ͣrrcG9  )   !##m      	##7G 9   	33b"m     !733QXG   % C    !!3#CrrCr[     C    !!3#CrrCr[   %~    !!3#CrrCr   ~    !!3#CrrCr   Xsy^   !#y^  ap    $%%$~    	       %6 %!&'&"112*zz`XXroGGn   Y      	67"	,J5PP5J X*77*#L8   P     "2642#"''7&546Ċǌi56؝]QBɉǇo3NEQ\|    G +  - 7 A J T  35#"&546;5#"&46235462+32"&=54&#"3#"2653264&"2654&#ςYxxYςZxxZE1/EE0uu0EE`Ev/EDaEEaDE/wZ\ZЂZwwZЂZ\Zwu0EE`E`E/1EE0E`EE0u0EE1/E   Xsy^   !3!yߨys    +~   !#!r    ~   5!#rrS; +;   !!3vrr   ;   )3!rv;S   Ll   4732#"'&'.#"0Pd@7+	h $TA6?&H    |   
#"&546323250Pd@7+	h$DTA6?&Hk-k    h i    !!!#%!!h\roa`޾"   (I  
     	!!	#37!#3'Q''Ho99Ƀo!p=⻻    }(TI       #!!7!#3'l)okkɃ=r!r⻻   + 2"   # / ; G S _ k w           +7CO[gs  !2#!"543!254#!"+"=4;2+"=4;27+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2%+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2'+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2'+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;22+"=4"=43+"=4;2+"=4;2"=43!2#\\K\=Kl]\\\\]ii\][]\\\\\\\\]\\]\\\\\\x::f>]Y"\I\\\\I`LLMK\y>>   (I  
     !!	3#)%3!'-''96=û   HJ   7	hHH--JJ   X  y   !5!!!!5!D!DZP  4    !!!rrZm    4      !%!!5!5!5!!mr    4       3#3#!%!!5!!omrX  4      	!	!!	!ZS;Z$m  4&  
      4    '  3276'&#"!#"'&'!!67632!zzzzzzzzIwwHS;HwwI΍GG2GG$_EXXE^m_DXXE_    3   #  %673#&'%676'&1rsrs2srsrTTTT@TTT|BB@B)B)΍11@4121    tD'	   
    XBy   3!!#!5!y	]    XBy   	3!!#!5fa]<  4   	  !%!!Ybm5A    4   	  !!!!;rbmY5A    4      !%!5!mrXae     4   
   !%!	!2mrx1x     B3   5!3!!#!B#ZCkZF#Z-ӠZ   B3   	'7!#!5!3!'7ZlDZ#Z-ӤZ   4  
   !%!!5!!ZZmrϠZnZ  4  
   !!'7!!!'7;rZZmZ1X1Z       '  327#"'$%'3632#	6'&#"zz=>lWWsPYX2灾vzz>GjX`OXG    X4y    !5!!5!yeZrr^Z   %3     33!#!!3/	.^+^kk     4     	7!!#xr;rc/Krmu    4      %	!%!50!53!ymrZ[z  X  y     &'&47673!!5!64'<<<.LM.;<+PN.;==R-*/KO/'-TQ0˪1.     X  y   	'!!#!5!'"ZABZ$ZuZ#   4  
   !!%!!''!;GZZHrZEZw   X  y    !!!5!!X!D!CZ  %3     !#!3!###.77/^+kk    4     !	!!	3!xS;ZK{mu     4      !	!%!#5!5!"~~+mrz[Z   X  y   !  5!5!!#&'&476654'#D!C<+PN.;<.LM.==<<}}-TP/ .LO//AJ/,EN*   X  y   !7!5!3!!7@ZBAZ#ZhZ     4  
   !7!)!7ZbZmEZwZ   4& 
  
      4   
  %	!3!5!y;Ūy_r  4?'	   
   4&
  
     4D'	   
      ,D   $  467632#4& #62"&$&"264:zӃ:4ር♜VuVRyV8vu4DֆMUTyRT   4&   
     Z^'	   R    4      !!!3#3#xrZm9   X  y     3#%3#!5!!?ʲC!D$Z             3#%3#!#7!?9hwMq  &R  
  ?H&
  
  8  t'	   
       ,3 +  33676767653#&'&'&'&V &#$K
9BU5>=5^:;^D`1o%".+y 9:C[\l3;b 89hb  Xy3    !!#"'&7633!!";;yV__W9|+q_ih_    XyH& a  
  8 X yH& !  
  8  Xy  	  !!3#X!Ścת    %   
   *  !%#567!676&'&'&'&|z*(2JE<iKH#&GIJEE|-2
M3
+O	
!r;
?9y?p
!   Xy  * =    67 '&5677%"632327'&32767#"'&'.#"y{h	p{"zi	piE55dJt]BFZCEF4Zq
Mg3ħĨ1P$s
7%ےs3
!    Xy3   #"'#&'&#"5>323326yKOGU43OINS52^NFz;7 (;?<6'=  '    3#3!!#7#537`?+0'7ϺrSSr  4     !!!!3!!!'7#5!7!xrddeZmn;fժhӬ    4   & *  !!!#546?>54&#"5>323#xr=TZ>/mNb^hC^XE&Zm]bRY;X1YnED98L\VBT=/  X  y    673367##%.XhZvrM'hx:Bxv`M]Pd
Hd-Dbgd
*     X  y    633267#.'#%'Xr<;oj/eE}{SC5E%rI1V/dj   6  `   ;#"'&'#5"$lYoRQ`+.0`b;  VT{    6#"&'#76 &#"32ttf,n䇅{WS<  F` &  #"&'#"'&37676376'	2KUXK2~)@V""V@)~`{gLHk{A>oRyRo>  4y&  
      45{ ! %  &'&#"!!32?# '&76!2!5!	%%cjf_[_fMJOhken(',g
c\\c(r 4`&  
     4`&
        Fy  *  '&'&3273;#"'&''&'&767,-b=MJMUHi;c(	#) Xn^T).\-rv~	oik*%1)0T*XmY*)     .    #5!!!#oo.ڭ%ۭ&   H:   0  7	%#"326=7#5#"&546;54&#"5>32hHH#[]E>Vcii!fHatLT5m4:j2O85%--JJ??8?vh+]85l[hmKDg/R     :      9  53353!53!5!#"326=7#5#"&546;54&#"5>32as7s9s;#[]E>Vcii!fHatLT5m4:j2Op"r??8?vh+]85l[hmKDg..R      :    1 = [  %5!!5!#"326=7#5#"&546;54&#"5>32#"326757#5#"&546;5.#"5>320;0#[]E>Vcii!fHatLT5m4:j2Op""[]E>Vbii"eIasLS5m4:j2Op"rrrr??8?vh+]85l[hmKDg..R}??8?vh+]85l[hmKDg..R   k  * . 2 6 : > B  #5#"&546;54&#"5>32#"326=%=!!%%%5!55qi!fHatLT5m4:j2O85%#[]E>Vc,,,,]85l[hmKDg/R}??8?vhyyrDyyyyrryy  R 8~ 4 < D L T Z `  %#5&'&'&''7&5475'7676767537'5676767'7&'&'&'5'7'%654d3/D9229D/3d4.E9229E.42*		*22*		*2*88fWfEOPDfWg88fWeDPOEeWf8g*		apa		**		aa		*ba.43ab-45     F ^   ' 0  4>2".33&'."#67>76#FVʓVVʓ"vv"Z83Pv"Υ"vP3ʓVVʓVVnh<8PvDDvP8"vP9~?9Pv"   F ^    & 0  ! 4>2".7!&'."67>4'&hVʓVVʓDvP479;;74PvD"MʓVVʓVVv"i	c;DD;g"vP	     F ^  	 %  7'32>4.#52".VFoDvvDDvYoʓVVʓVSwVF_YvDDvvDoVʓVV   4    !!!xrZm       #53 àZ0    3#s      #5ˠАWeE%3     53Zzi    #0s	    3#àР˓[  m   #!!#	q    3#s      !!`N	u    m   !5!#    z   3#z   z   3!5!`z m   #4763!!"ƺoyeD9uߑfW     #'&%'53 763:*enK==Mne( =C_AEcH<    3!!"'&59De{oVfd       #3ƺ	    m   4'&#!5!29Deyo}Wf       &'&3!3#76<(enM==Kne*!<McEA_I=     3#!5!2765o{eD9ᏞfV     3 	w    v    %	!!!!55!#uX
̼uu]]e           !	!!;bc;$<   :.]    3!3:~\T\~.%y    j   5!j    l   !X      3 	      !@ 	  <j     5!!5!!5!r#B#B#j    <l     !!!!!r#B#B#XXX m     333mjjj  m     !!!@@@mjjj  <j      53353353353<xxxj    <l      3333333<xxxXXXX   n      3333p^^^^    n      !!!!@@@@p^^^^     !!      l   !! l       !!#      l   !!# l       !5! j     l   !! X       !5!$ j     l   !!$ X   j   3!-j    3!-m    j   !!@j       !!@m   j   5!3,jk     !3,X j   5!!@jk    !!@X        3!!- 	       3!!- 	    	  #!!!P@ j   	  33!!P-# k      !!!@# 	    	  #!!!P@ m      	  33!!P-# l     !!!@# 	     !5!3, jk       !!3, X    	  !5!!#@P jk   	  !5!33$,P jk      !5!!$@ jk    	  !!!#@P X      	  !!33$,P X     !!!$@ X     !5!! j    l 	  !!!!- XV  l 	  !5!5!!, jV  l   !!! X     !5!!$# j    l 	  !!!!$# XV  l 	  !5!5!!$# jV  l   !!!$# X j   5!3!,-jk  	  !3!!,-XV    	  5!3!!5,-3jkV      !3!,-X   j   5!!!@jk     	  !!!!@#XV   	  5!!!!5@jkV     !!!@X      #!5!3!,-jjk     !!3!!,- X       !5!3!!,- jk       !!3!!,- X      !5!!!!@ jk       !5!3!!$,-# jk        !5!!!!$@# jk       !!!!!#@#P XV      #5!5!!!!P$@ Vk      !!33!!$,P# XV       !5!533!!$P-# jV       !!!!!@ X     !!3!!$,-# X      !!!!!$@# X      !5!!!!$@# jk      !!!!!$@# X  <j    5!35!<yj  <l    !!!XX       33lUTT        !!@@lUTT     5!5!  x X    333x 		    	  !!!!- ¬B  x  	  !!##xms j  x     !!3!!xm3-s ¬jB    	  !5!5!5!, >   X 	  5!###ljjj     X    !5!!!5!4l t, >  	  3!!!--A   xj 	  333!xjk   x    3!3!kA  	  5!5!5!3,,=    jX 	  5!333jkk    X    5!35!3̠=      3!!!!-- 	AB x     333!!xs 		   x   	   3!33!!-skA	jB        !5!5!5!3,,   X    !5!333xt jk	    X     5!3!5!33t,	       !5!!5!4 B     5!!###sjjj      	   5!!5!3!!t,-sjB     5!5!3!,-XA   j   5!333!jkk     	   5!5!333!XkA       !5!5!5!3!!!!,,-- AB        5!333!!###sjkkjj         !!!!5!5!333!-s t, jBkA        43!!"yY[ p~|     4&#!5!2[Yx p~|  j   5!2653#xY[j~|q    j   !"&533![Yyjq|~  *m   3YѲ/	Y   *m   #3*/	Y *m   #	#	3	3*i    S   jh   5!|j       3?  hj   5!h}j       3 @  hl   |X    !@? hl   !h}X     !@ @ l   5!5!!5ijVV     333PP ?@    l   !!!iXVV     #!#P@P ?@  	v      ?   ! ?    j   ! j      ! k      ! @      !       !    B   ! B      ! 	   F   !Z 	      ! 	      ! 	   h   !| 	      ! 	   *   !> 	       3 	  i 	~}       8m         # ' + / 3 7 ; ?  53!5353!5353!5353!5353!5353!5353!5353!53Z667576   l         # ' + / 3 7 ; ? C G K O S W [ _ c g k o s w  53%5353535353535353%5353535353535353%5353535353535353%5353%5353%53eeefffdddheefcd!!!z   
  m         # A  35#35#35#35#35#35#35#35#35#!#5#!5#!35#35#35#35!3h̚h̚̚h̚̚hϚ2̙Ϛ#366 B	s  B  F 	Z      i   !} @ i 	}    i	         !!}} 	@@    &	  	         !!!@@        !!  i	}   &	  	         !!!}}     w   !N<    w    7!!!xr$<     w    3!254#!") ) xrVVV   w&	  	      w        !%!5!5!5!5!5!5!5!5!5!N<rnrjrkrkrj  w        !'3#3#3#3#3#nnjjjjlljjN<r        w         # ' + / 3 7 ; ? C G K O S W [ _ c g  35#35#35#35#35#35#35#35#35#35#35#35#35#35#35#35#35#35#35#35#35#35#35#35#35#!xjjjjjjjjjjlllllllllljjjjjjjjjjjjjjjjjjjjnnnnnnnnnnjkkjnjkkjnjkkjnjkkjnjkkjn<   w          !373535353534B`JlТN<0JjL[F/    w          !%35535#5#5#57#35Њ4`JMlЎON<r3B`Jlѡ      w  	     ! % ) - 2 7 ; ? C G K P T X \ a f j o s  %35'7'#7'7'#7'7'7'#7'7'7'37'75#7'7'7'7'7'75'7'7'7'37'%75'7'37'!$J#B"L!MLF"ELUELF#EKALE!UKLLKLLLKLJ$K#tK"MKEKLKKKLLKKLKEKJ"KLKKLLJLL$NK$E#EKEN$EH$L#'"L LE"ELELE"EKALE!KKLKKLLKL$K#tL"JLELKKLKKKLKKKEKLR"KLKKLJLLJ$KE"REKE$E<       7!         %!!!M6r6X     8   %!!;H    8    !!!YS;bdrH  Dw   !DHN<  Dw    %!!!drH$<     8   %!!o4H      8    !!!aSo4bdrH   w   	bcN<   w    7!	oHbc$n <      7	        %!	s     w   N     w    7	xor\         7s          -M<r2s         7Ňs          -x6r2s  w   !hN    w    %!	!hŖn         %!hs         !!h<skX  w   b<    w    	oHpHb<                  X               #6  w   	bcb  w    	ZbcZZb    v     	
nn65bcnn66b  |   )  7632#"' 3276'&#" %632#"'cccccccczzzzzzzz12Ι/r99r6r99q̌GG2GGXX@XX  u#\u   "@  91 990	h9%-  |    3276'&#" %632#"'zzzzzzzz12Ι.̌GG2GGXX@XX    | 	   ' / 7 ? G  7&'&'6767&'&'7%'676727"'64'7&"'62&47".$,=7-:*,$)'e13-7c".$,=7-:*,$."e*:-7<x<KKrw%<x<KKw/&j %0:E"3FA*% */&j %0:E&/G:0% w9~9GGrw%9~9GG    |    % / 3  6%632#"'327&#"6767&'&612Ι&&&&bbP'''gXX@XX
		qzz.!h	*	|l    |   ) 7   32764'&#"7632#"' 3276'&#" %632#"'C"!"!DD!"!"z===={{====zzzzzzzz12Ιa'''F##FF##̌GG2GGXX@XX  |   6%632#"'12ΙXX@XX   |    %276'&# %632#"'hzzzz12Ι'G2GXX@XX    |    "3$%632#"'hzzzz12ΙǦGXX@XX    |    '&#"%632#"'Qzzzzz12ΙGGXX@XX     |    3276 %632#"'zzzz12ΙGGXX@XX     |    "3276! %632#"'hzzzzzz12ΙǦGGXX@XX     |    "! %632#"'hzz12ΙGXX@XX   7|   "'$%630TXX  7|   2#82Κ|X@Z (    32654&#"!?|}|}~|{v<     (     67672"' 327$%&#"!zzzzzzzz12Ι4FG΍FG@XXXX(  (    !#%&#")7632ΙK/zzzz`XXGG      3327$3!#"'&12zzzz XX`GG    7| 	  %63"71{y`X{G    7| 	  2#'&#82{{x|XG 7 	  527638x{{ΚT{GZ  7 	  "'$33{y{TX`G   |   %632#'&#"12zzzzz`XXGG       0332763#"'$zzzzzzΙGGXX    w   N<     w   N<     w   !N   w   !v< ?!    32654&#"4632#"&zcdcd;}|}|ecbc|{|  w    %!!!h$<   w    7!!!xr$<     w    7!!x$<   w    7!!xr$<  w     %!!!!!IIr$ <    w     4632#"&!	N88NO88MoHbcj8MM87NMn <   w    %!	hHbc$n <     w    7!	bc$n <      327$'&#" %632#"'k ~ ~>?:IILII޸[["[[  w     !!!!!!IIN<     w     !%!!5!!!I) N<rr  w     !%!!!!!I) N<rJ(   w     !!!!!!IIN< *  |      6%632#"'!3276'&'12Ι^]Tzzzz^]XX@XX6~r~GG26  |      6%632#"'%676'&#"!12Ιj]^zzzz]^XX@XX'62GG~r~6  |      6%632#"'!&'&#"6767!12Ι]^zzzz-]^SXX@XX)΍6!~GGq6~     |      6%632#"'32767!&'&'12Ιzzzz^]^]XX@XX)΍GG~#6~6O     w    7!!x6r6     w    	%!#66r<   w    7!x6r$6X<   a o    7!!!*r*d     a o   7!a     [!    %!!!!rrr r     [!   7!r[r    w    %!	#6$6X<  	 " 1    " * 2 : A I  3#''%#&'52#"'&5476!!'5%!!'53'5%3'5%3#'N<<.0/#E
7$L4z8hY/6.0<<1y112+KO1HP====f^1 .1\   
  #  > D J P V \ b h n  27654'&#"&7367'67675673#''5&'&'7&'%67'7&'67'%7&'&'%6767%&'&$h%$%%34$&1++XSAN@`==k>PCRX++XYCP>k==l?L?Q	oL+ Nn;P?;@
nMNn3%%%%34%&&%s==`?J>PW,,WW?K?_==f?H?PW,,WU?H?^<=Ke+cL mCP`k<<     ! 4   ( 0 8  47632#"'&7327654 #"&#%#&7&'67&'67!󫪪vӤ=65N'V[S.U[R󫬬񫪪񿉊
ʯX[V[X[V[   ! 4   ( 0 8  47632#"'&7327654 #"73$3&'67&'67!󫪪vѦ=63QNV[S.U[R󫬬񫪪񿉊w	
'X[V[X[V[     ! 4   ! )  47632#"'&%#$''&'6%&'6!󫪪4>;D@Kǲcngk?dnhk󫬬񫪪I
kpinipi  
 ! 4    " * 2 : A I X  3#''%#&'52#"'&5476!!'5%!!'53'5%3'5%3#'32765'&#"M==,/0#H
8&O6	|7iY06./==e6a&i1r4z012+KN2HQ>>>>f^2"/1]8`1"Y4f2y   ` 1 B  7#5#53'&'&54767&'&=33676=3#327654'&O&"}|fzg}}"&&"}UQn$mQU}"$nQUVV{xVVUQ<"{u^^\_u{"#|
zUOOUz
|#YOT{zQPPQz{TO    @>  )  4'&#"3276&5476327#'#53'&`____`oqk]^^]YYňÁhgf    @>  '  "3276'&'7#5373'#"'&5476j___``_ߓqŊqYX]]XYfhhĈÁj    0  '  &'&376&+"'&5'476%7!Z{z[ZZ[~\YWmpN#ZX[[YZ[PQmp#T     G *   52764'&#"#463233#!5sPQPPtrQPyzg֏LQQQPPQr{{t|g    *# "  #53533#632#47654&#"#ddiqqCBigIIugzyUr}ppDtPQs_    C S  7  "27654'&7#"&54767##53#533333#3##h.  @\ !  2(>>?ZW~>'3|}}! -/@  /- !^'?XY??~YX?(F}R}hh}}h     L S <  #5#535&'&'5'73'3#'73'676=35'73'13|e{vw}wwUATwx|xxS@Wwx}vv|d|re{Eus~~suE|VAKtrrt@X{Ius~~suI{dr|      *    ! #!!!'!27674'&#_82V)3{D#MHZW{s{?zK8   QO #  #"'##565'##"/547 ?kM ,4N"DF &Fi?JO/FB!O
{|Im<&=     M  2  227632 #&547636=4'&#"#4'&#"=`
]d2cBU;/G;SXMB:@B
ս;7hf%#>|\@9      @O    	 &&5	iCn:^O	G
 %   2 O 7  236;2"'##'65##"'&5476;235&'&=476jS
c1=EO ;SCFRʝT6*F@E1;O+.`162V
Yi8/D
;8[BV      RP " < B  +"'##565#+"'&575477;2732;276=4'&3&'"ih;F(wQ"DG".FWCNfBy"bODUq5u4Pro@|S`64'<kn,:y!@JD     O   2367632#&5476;_#KYohM2EOL)XYD<κ6f%    @O   	&47i9)
2\OE[r   1 V 2 ` g  26;2"'##'65##"'&5476;2&'5476&+"3276733276=4/#"567654'&#"35&5mV^2"L<TCFR˝U7* 2Q;Ƌ
Xa2p2@^DJF
,aXj-!D2V9/m.0R
Zj9/C
\ V
7yM5bom&#'p[?$GOQ    r !_   3#"/4?23D-!]UF+}{<    !/   3#'654'&'#"547326Rs9W5[S%3;B[/OBC'*|<  j_g   #"=4?2%#"=4?23ɧ%QM?ˠ)TK7(w7џ5s ?      |O    "'4723!#"5472!5YA>RHIOq1 ӫg4    D %    3363'$6'"I+4puoS^    *     3%#'#3%#';&2IʗHj    7 * ( ,  377#'#'547#5773%%,ppsr,'zzxz'984?/99e5>:_  X  yH    &   *'$6 76#"'676 67	h5X@!2^:H~](#7NESRQO1̡LH     ~&   77$7676&#""~EV*(	:^#D89hH܏1OQS   g    !"&462264&"1[륢S4fOsPOtOۨD/YR3BPQqOO   u#\u   	  	!	!hi/u-1   xZ    	3%!#3!+<Zddd    wY    #3	!73#7<dZd      	3#˪5hpp     K   	#3J5hp    '
8  
      '
8  
       5} 	  !!d#ZDZZ#ZZ#  5} 	  	'7!5!'75ZDZ#ZZ     5}   	'7!5!'75Z!Z#ZߠZ#ZZ#R#ZZ  ,V    $ % ::h11Q-,S'HH(    {     76 76'@::x*11QS'(    4H   	k|@Qel     H   	'fQMH8e     u#\u   	hu-  X qy   33#####533ܨDDDD     X qy   333333#######5ʨssrDDDDDD  P/     3# ! % ! ts_e  ;T    Xy'Q $   X y'QW'Q $    T}   !!	7J77 1    !#	788 1    !3	8   5   	''!jxxG      F5   	!0wx      F5   	77!xGVxH      5   	!xGw     T} 	  !5	5!	7E7Jɩ77  1  	  #	#3	ک878F8   w    7!!!xr$<     w    !!!xr<    w    7!!xr$<  w    %!!Yr$<   w    %	h5bcJ6b    w    	bc66b    w    	!	bc6b   w    !	5bc6b     w  	      # ) - 1 7  %#535#5#5#5##5'3#5#5#5#5#5##5##5###5ZssssVrrrrsZVr~rZHNrrrrZZrHNbVrrrrrrV L   +  ;#"'&47!2#.+3 654'&#ōߥE-(mPcJW3|i.icg3,>jDEoQك^nhy]k7% P0E     L      73#7 '&7#"326TD޸&;X2Pٔkk;!ؔ;!V+u'AҨz5.    V   	##!!+732767-]r "n&moZ98'ij>>     =  
  %!#3!3jV"ѲR{    p     '#36 3265#":D"&X2ٔ;!ؔlk;!}fu١5.yAҨ     b   3!!#w!9  V  .`   #3!rdڸY`9     Mh 
 '  "27676'&'2#"'&7673WA\j_,+:5]d97^`5;~ F?c%*9:e;ˑRh]c[斘,mKseg.      !#7#"&'732676&+732+E؃Do/$2rI(=cݳ$w"$.*gQ  H{      "2>    676326pJrҽp-pTT(nI^[]-=P@7'"]_$5zWXU  d   Y   	3#3)mKqD   { 9  ;#"./&'&'732654&/.54 !2.#"y@Q!3?.E7@52ed)bpXeJ
P_'Q]by٢UO#8$H-EBRZ)!:y(&;<GX('2p      #7!7!;#".'&/&#!cO$FJ(Q!r I[35-5`o^+7&()6?    p`   $  36767#"'&7676?>7#7 #`o%ih\[..piR6422 T6J!	7S#D98``LAB\VBT=;-;,,1Y7    X y'Q W      !##m       #7!#o       3!3V     !733;X    )  u  $  %#?>'./.76$32.#"22"
&GI.gS%TOl	 /II{4<5/VVL89CFnY1^5YVe    *X    3#	3
X0X    [  *X    3#	3u=
$dX      *X    3#	39y
X       *X    3#	3
X    *X    73#3#X    *X    3##3Ɉ
X0X      X    3##3D
$dX      X    3##3A
X      vX    3##3̪}
X      :X    %3#!#3
X     *X   !#!!/
yX       X   !#3!!/
<Ẍ     X   !#3!!/
xX     vX   !#3!!/
Xd     :X   %!!3I
X   { 	  3'#':Yyj?CUC   -U 	  #'7374:Y{j?CUC     	  3#3#7G3f*D     	  #73#73ހG3fRo  U  wD
b~d         37 !7 !7  |W|;pO:$-H'ŢcmZ    3  `   !7 !7 !7 3T6T	)~6|MY     [ 	  7! 2LP)j	*.1       V[{ 	  7! 2LP)j	%X.1     V   	+732767!#3!&moZ98׊"w)wij>>9d  TVH !  +732767654&#"#3>32&ܥ0]W!{/tKb
Ӝ
G'QWab ^4X  #%    [Iw    !7!7!7!>>I   `   3#ʁX2qe     Q 1 0#ll+    c    V  !  6#"3;#"'&7# 7632!7!3#6M\kCYKG&}=&15&KߘK9|~jd    !33### _>3B3   )*{   3>323##67654&#"# Kb
jU8]W!{`ab /03L
G'QW  T     "#7>;!3#!#06D8
#~v)vʋՉ//&r1Fd+9    $    3!733##!##73!7]UUxMMxTTn]}}}\rk\\~~    ? $ 0 7    6762!3267#&'&'#"&76%"32676&6&#"&>
l|

bm7KG:L	]z>XsCXYsC4IVTTZ2fq fWTRzxw{{wxz[^cW    a  %  "32676&'6 #">7.7>3%"*)e)*fo888-:G%	ߞ"(gڜ-*/1|kI5    b     @`   
	:	
 

	 2999991 /<2<2990KSX9Y"3#'#"!#!##737>3/-J__۸%&Sec/яN  b    @K	:	 	
	 	99991 /<22990KSX9Y"!#!"!!##737>Ѹ__)پ&{Sec/яN T # ' -  7>?67654'&#"06763237	e<Ti10`aem$icbOcp#$Ukq&'#31I{VfFVlPQ^~QR89B#$RJ887H[^AA[      D 	    !!!5!#3#3# !#n!7`ddh    ?f   3#Мf     @  99991 <20@O OOO_ ___] KTKT[X  @   878YKTX  @   878YKTKT[X     @878Y3#%3#N')  ?  [ 1 0@) )**  / /]] KTX     @878Y KTX  @   878Y3#B͠  R  @  91 <<9990@z 







 

 
]] KTKT[X  @   878Y/&#"#>3232673#"&"*&"6}#|U">##$(8} ~\79 32mn6.mn   =  Y  91 0@     / /]] KTX  @   878Y KTX     @878Y#      ]@	 91 <90@  / //	] KTX     @878Y KTX  @   878Y3#'#՞ј 5  c@	 91 290@////] KTX     @878Y KTX  @   878Y#373-՞ї
    /mf  @
  991 0'F#ll   {Wm   > #.#"# C9wVSRo{xz=5]8796  {m  @ HH 1 20332673#"&wYRSlw#m6978w{z  P  "@	  991 0@	O O_ _]3#(P ck    3#3#=Gk  c'k    #!#Vk    , 0  #7676?>7654'&'"#"7676323#/! HK40	>2'@M*N=KL|2!!#OJ;2bEBTY;X1-%#D>Y<V3<LAB\VE'*=  i0  @	  991 0!!V0    45   !5!5gr    4   !5!;r    4   !5!/r   ^s    2"&46"264hrL&'◚vURyVP%`8n|TyRTv    ?F    3#%3#?     V   33+732767#'Yܹ%nnZ:=ܹiij>Hi      s  	 ^@/ 	: SQ 
99991 /0KSX9Y"#73#3B1ˁX1+e     ! @J  !!!: S WYce Q"  		!	!	"9991 9990KSX9Y"33267#"&546?>7#73PojUGodOj%lebhT=1D]]YHo8JRGB98~^lVFfV  
I  u      ^kO_<      +    +           m   d               h        sR  !u   X /b  b {    \  ) ?X  X X XF  s 5 \ N 9 N R 3 R    P  R d  H   H ;  w b ; T =  Z7 T u b  s  }  \ N  X   {  / d    J X/  + X3? } \  R / / / o s 5 5 5 5 9 9 9 9 R R R R R   P P P P  3 7 H H H H H H  b b b b = = = = w T u u u u u X / } } } } H H H s  s  s  s  w w 5 b 5 b 5 b 5 b 5 b N ; N ; N ; N ; T , 9 = 9 = 9 = ] A 9 =    Z  N7 N7 N7 N7 X T T T ( } R u R u R u #    3    s  s  s  s       P } P } P } P } P } P } R \   N N N ; T  , D i  0 C H d v  3 t H G ' G9 7 T  %c } t  * } x 	  I   o   M X  
 X   Ar  vs H 9 = R u P } P } P } P } P } p H Ho N ; Z R u R u N ; To  / H H 5 b 5 b 9 = 9 = R u R u     P } P }  s   " R T 4  H 5 b R u R u R u R u * 	   B xx   x v o  0  U   Q C p { B  J  y k   % N  2  Y  D C !  A    E  c   g   0 0   r )c @ a   ~ D #'  8 [ ^ a z    4 N  " x        Q D   H.  z[]*   fV h'O/yw /" [    ?  w*?'.lvf5 P  _    4   : u @ 0 h     <   x4 r   V U  U ?Q   E 5 t 9 R 3   t  9  E  |  E A _   |   8   u H %  {   t   2  u  2   9 9 q      \H 1 v      t  7 3 s  s  5 5 P E p  9 9\ " K &    Eq 5~s R 3 s  & 0   3    H G d  b B V V  V u V 1 I +   n X a ; b b s   s = =  J  V r f n t  E  E s E ~ B  V  s  +     T 9~  V E _ H Ho 5 b t p t p~ B V V R u t  t   a & & &     H  R b R \ : s L @    2  /  L 8  8   m W S ( -   8 , R 	V ' }  5  ] + b ] 7    J  N ] + o &   5 N v \ 9  w J - # ]  , u \ > 2 N   i = 0 H  > M &    2 
  -  7  C  k ( T T T T' @ E _< { ^ , U T S X "  W  [ Y " Q K ^ l N ) K U \  3 [ ] & _ H L  I S " - = # R  s s  i
   + V +                A)& %$**?
 +.444D+  #?[+# I  3-*%3>*&/t  
[ -%   6P	 % H  ;  ;  ; s  w w h w : 5 H 5 > 5 b \ N ; T T T?b T 0 0 Z Z Z N  N  N h N : T T T : R u 3 3        h  s  s  s     h h : : P _ 0 0 : : P }     R \ R \ R \ R \ R \  N N N T  \ _ H H H H 5 b 5 b 5 b 9 = R u R u     P }    E E E E E E E E^|       Ki | | | | | | | |8jjKif^ u u u u u u          ^ 2 2 2 2 2 2 2 2 ^ E E   | | u u   2 2 E E E E E E E E^| [ [ [ [ [ [ [ [ 2 2 2 2 2 2 2 2 ^ E E E E E E E22 [ [ [ | [;	Q8j 9 9mj     % %    	 2 2 2 2 2T T?d                      //     )  ;??      Z85= ?M    x ? '  a?4baAaa\34baAa)%. $ 
 "D Q N N 9 - .  	  w !  
  3 <  g p 	 t  : T T Jy   B  %   0   / / / / / / / / / / / / / / / / B B B     B B Y Y B B B B B B B B B B B B q      ? Q Q 2 B X X B B B BG B * B B * B * B B B B B B B B     B B B B B B B B   B        B E E  B * B B B B B B B  B  % u    I           X X  +? ; ; ;  ) } }      ? 5    X J W X X X X X X X X X X X X X X X W X X X X X W J J X X X X X X X E X X X X X X V X V V V V W X X X X V V V V V V V V V X V V V V V V X X X X X X X X X X   X X X X ^ ^ O O O O O O O O P P P P P X X X X X X X X    i X Z Z X X V X V V V V X X X X V V V V P I r      % %  X a     G X++ | h  } 2  H X         X X     B B    X %   X X  X %   X X          X  ?   X X X X % X X    X X6  F     F  H    R F F F       : < < < < < <xxxxxxxhhi      Fii              DD                           u           777777      ?                    a a    "  ! ! ! !     G  C L     2    1r  j D7 X  ~  u x w   , {   u X X P  X X T11     T1          L  V M  zY   X )[            {-U 3   TX[   ) T  ? a b b         ?? /   ^?          D   D   D   D             @  p    ,       x      0  	  
  
    H      @      H       d        |  `      8      T    d    d  X      t  8   8  !l  !  "  #0  $T  %  %  &  &  &  '<  '  '  '  )|  *  +  ,$  ,  -  .  /  0  18  1  2  3  4  5d  6l  7X  8  9\  :(  ;  ;  <  =l  >8  >  ?  @   Ah  A  A  B|  CX  D<  EP  FP  F  G  Hl  I  J  K  K<  Kl  L  M  M  M  N  Ol  O  P  Q  Q  Q  Rh  S  S  S  S  S  T  T  U  U   U8  UP  VX  W8  WP  Wh  W  W  W  W  W  W  X  X  Y  Y   Y8  YP  Yh  Y  Y  [  [4  [L  [d  [|  [  \t  ]  ]  ]  ^  ^  ^4  ^L  `  `  `  `  `  `  a  a,  aD  a\  b  b  b  b  b  b  c  cl  d  d  d  d  d  d  f   f  f0  fH  f`  fx  f  f  f  f  f  g  g   g8  gP  gh  g  g  g  i  i(  i@  iX  ip  i  i  i  i  i  j   j  j0  jH  j`  jx  j  j  j  j  j  kH  k  k  k  l  l  l4  lL  ld  l|  l  m  mt  m  n  n  n4  nL  n  n  n  n  n  o   o  o0  oH  o  p  p  q  q   q8  qP  qh  q  q  r`  rx  r  r  r  r  r  s  u  u  u  u  u  u  v  v(  v@  vX  vp  v  v  v  v  v  w   w  w0  wt  w  w  x  x(  x@  xX  xp  x  x  x  x  x  y   y  y0  yH  y`  yx  y  y  y  y  y  z  zD  z  {h  {x  {  |H  |  }$  }  ~  ~  ~  ~  P    @    0  |        h       X      P      \         l    X    d    d  t    X       H  d      P      T              l    @        0  @  X  p                  8  X  p              (  @  X  p                 0  H  `  x         0  H  `  x                 8  P  h                (  @  X  p                 0    d  |    <          4  L  l              $  <  T    X        \    T    $  x     x    T      X    ,      |    l    l    @      $        x    l    (  t    p      <    ,  h     t        \       l  $      l    0      ,        4      `      l    \         0      X    T  ĸ    Ŕ     ƨ  <      t  Ȭ    \    P    ˬ  \    ͸  ΄  $       Ј    D    $  Ґ      X    4  p  ԰      @  P  Ր    4  ֘    p  נ  װ          @  \  p  ؄  ش        ٤    4  D  ۄ          X  |  ݨ       $  4  D  T  d  t  ބ  ޸    ,  l  |      P  `            8  d               D          H  d        p      d  t         @      $    H  X  h          0  h        <          (  H  d  t                    8  P  `  x                (  8  d  t          $  H  X  h               0      `          4  L  d  |          H      t          d       T    @      \    L    @  X  p        @    0  H  `    h    |    d     d   t  h     t  \ l |        4 L   h x    	$ 	 
 
$ 
< 
T 
 
 
  ,     8 P `       $ 4    L    l   |  T d   x    ` p     P            4 h   `           , D T  ,      l     H   (   P h      P     ! !$ !< !p ! ! ! ", "l " " #d #t # # # $  $ $ %4 %d % % % % % & &  &0 &H &` &p & & & & & & ' '  '0 'H '` 'x ' ' ' ' ' ' ( (( (@ (X (p ( ( ( ( ( )  )t ) ) * * *$ *4 *D *T *d * +H + ,$ , - -4 - .D . / /< / 0h 0 1$ 1 24 2 3 3 4 4 4 5x 5 6 7 7` 7 8l 8 9 9 :D : : ; ; ; ; <8 <H < < =t = >< > > ?P ? ? @ A  AH Al B  B B B C D D E$ ET E F8 FH F Gh H8 H H I I I J  J$ J K< KL K LL Lt L MT M Nx O8 O PD Q Q R R S S T$ T T U V W  W X X YP Y Zl [4 [ \ ]P ] ] ^\ ^ ^ _ _p _ `, `| ` aD a a b( b b c cD c d8 d e f f gX g hP h i\ i jX j kx k l l mh n n ol p p q( q rP r sP t tx u u v w0 w xT x y z< z {L { { |X }@ } ~  @ |  ,       , d   <     L    4   < x      `  T  d       H   (   P  $ L ` t   0 @   X  \       < |   \      \  L |      H  @    h  @      , D \ t       ( @ X p         8 P h        ( @ X p         0 H ` x         8 P h        ( @ X x       ( @ X p         4 P h        ( @ X p       ( @ X p         0 H ` x         8 P h          8 X p         0 H ` x         8 P h        ( @ X p         0 H ` x         8 P h        ( @ X p         0 H ` x         8 P h        ( @ X p         0 H ` x         8 P h        ( @ X p         0 H ` x          ( @ P h x         8 P h        ( @ X p         0 H ` x         8 P h        ( @ X p    ¸       0 X h À Ø ð       8 H ` | Ĕ Ĭ      4 L d | Ō Ũ       0 H ` x Ɛ ƨ       ( 8 P h ǀ ǘ ǰ       ( P P P P P P P P P P P P Ȁ Ȑ    8 p Ɍ ɤ   X ʰ  t  ̤  p H Έ Τ T T Р    $ @ \ |   ( Ӱ   0 d Ԁ Ԝ Ը   մ  ֤     ؠ @ p ٌ ٴ  $ t ڈ ڜ ڰ       ( < P d x ی ۠ ۴      , @ T h | ܐ ܤ    ބ  D  h h D  \ t   (   ,  D    D     p   8 |    H   D     <      ( H h      ( H `     H    8 d      p    H    L     L  ` $      `      L      L  \  ( P x     8   4 |   T   	4 	 
 
T 
 
  p   L    L   H   , t   8 x   ,   4   \   8  ( x   \   T   $ t     8    L D  x p       d     ! !\ !l ! ! ! " " # #| $@ $d $ $ $ $ %` % &, & ' ' ' (  (, (D (| ( ( )( ) ) *P * +< + ,L , - . /< 00 0 0 1 2$ 2< 2\ 2| 2 2 3$ 3 3 44 4t 4 5  5H 6, 6 7< 7 7 8P 8 8 9L 9 9 :0 : : ;P ; < <p < =p > > ?  ?D ? @P @ @ A, A B( B C  C C D D D E@ E F F G  Gl G H Hl H I@ I I J J K LP M M N O PL P Q@ Qx Q R R8 R\ R R R S S@ Sx S T TH T| T T U@ Ux U V, V V WH W W X X Y Y Z ZT Z Z [h [ \ ]0 ]h ]x ] ] ^ ^, ^` ^ ^ ^ _ _0 _X _ _ _ _ `D `T ` ` a4 b b@ bd b b b c ct c d dh i ix i i i j@ j j k k l l, ld l l m mT m m n, nx n oX o o p$ pt p q, q| q q rH r s sP s s s t t$ t< t t t u( uh u u u u v v w  w wH w x y yT y zD z { {P { |4 |L | | | } } ~P ~     L   0 L     0 L p     \    @ t    4 P l     H    D       D h      < \ |     < h     < d     @ h     8 d     4 \     4 h    8 l    L     P t      H t     , `     D x     P    ( h    T   $ T     0 L h       4 \       , H d       ( D ` t <  l        8 \ p     H `   H  X   @ \       < d      < X      ( T p     0 t   T   d  P   P   \    `   4 `    @ \ x      L t   $ P x   X   L  8     ( T p     @   P h ( Ĩ $ Ű  t   $ Ȕ 4 |   4 d ̄    ̈́  4 ΄  ( ό  < x д   @ \ x Ѩ  $ l Ҵ   < Ӏ  $ 4 L l Ԕ Լ   < h Ք   ( T | ֤   4 d  ؘ  d ٜ  4 `  @ ۸   ܠ  ݌ ݤ    0 ެ   < h ߐ ߼   @ h     ( X     D    H     D T   l    T ` < < < < <    <  h     L    @ l  < X t     P      
 + j    @   P             _        B       c                            V                    	%       4 #  	       	      	  S  	  0k  	  0  	    	  ,(  	  "m  	  :  	 &  	  h C o p y r i g h t   ( c )   2 0 0 3   b y   B i t s t r e a m ,   I n c .   A l l   R i g h t s   R e s e r v e d . 
 D e j a V u   c h a n g e s   a r e   i n   p u b l i c   d o m a i n 
  Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved.
DejaVu changes are in public domain
  D e j a V u   S a n s   M o n o  DejaVu Sans Mono  O b l i q u e  Oblique  D e j a V u   S a n s   M o n o   O b l i q u e  DejaVu Sans Mono Oblique  D e j a V u   S a n s   M o n o   O b l i q u e  DejaVu Sans Mono Oblique  V e r s i o n   2 . 3 7  Version 2.37  D e j a V u S a n s M o n o - O b l i q u e  DejaVuSansMono-Oblique  D e j a V u   f o n t s   t e a m  DejaVu fonts team  h t t p : / / d e j a v u . s o u r c e f o r g e . n e t  http://dejavu.sourceforge.net  F o n t s   a r e   ( c )   B i t s t r e a m   ( s e e   b e l o w ) .   D e j a V u   c h a n g e s   a r e   i n   p u b l i c   d o m a i n . 
 
 B i t s t r e a m   V e r a   F o n t s   C o p y r i g h t 
 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
 
 C o p y r i g h t   ( c )   2 0 0 3   b y   B i t s t r e a m ,   I n c .   A l l   R i g h t s   R e s e r v e d .   B i t s t r e a m   V e r a   i s   a   t r a d e m a r k   o f   B i t s t r e a m ,   I n c . 
 
 P e r m i s s i o n   i s   h e r e b y   g r a n t e d ,   f r e e   o f   c h a r g e ,   t o   a n y   p e r s o n   o b t a i n i n g   a   c o p y   o f   t h e   f o n t s   a c c o m p a n y i n g   t h i s   l i c e n s e   ( " F o n t s " )   a n d   a s s o c i a t e d   d o c u m e n t a t i o n   f i l e s   ( t h e   " F o n t   S o f t w a r e " ) ,   t o   r e p r o d u c e   a n d   d i s t r i b u t e   t h e   F o n t   S o f t w a r e ,   i n c l u d i n g   w i t h o u t   l i m i t a t i o n   t h e   r i g h t s   t o   u s e ,   c o p y ,   m e r g e ,   p u b l i s h ,   d i s t r i b u t e ,   a n d / o r   s e l l   c o p i e s   o f   t h e   F o n t   S o f t w a r e ,   a n d   t o   p e r m i t   p e r s o n s   t o   w h o m   t h e   F o n t   S o f t w a r e   i s   f u r n i s h e d   t o   d o   s o ,   s u b j e c t   t o   t h e   f o l l o w i n g   c o n d i t i o n s : 
 
 T h e   a b o v e   c o p y r i g h t   a n d   t r a d e m a r k   n o t i c e s   a n d   t h i s   p e r m i s s i o n   n o t i c e   s h a l l   b e   i n c l u d e d   i n   a l l   c o p i e s   o f   o n e   o r   m o r e   o f   t h e   F o n t   S o f t w a r e   t y p e f a c e s . 
 
 T h e   F o n t   S o f t w a r e   m a y   b e   m o d i f i e d ,   a l t e r e d ,   o r   a d d e d   t o ,   a n d   i n   p a r t i c u l a r   t h e   d e s i g n s   o f   g l y p h s   o r   c h a r a c t e r s   i n   t h e   F o n t s   m a y   b e   m o d i f i e d   a n d   a d d i t i o n a l   g l y p h s   o r     o r   c h a r a c t e r s   m a y   b e   a d d e d   t o   t h e   F o n t s ,   o n l y   i f   t h e   f o n t s   a r e   r e n a m e d   t o   n a m e s   n o t   c o n t a i n i n g   e i t h e r   t h e   w o r d s   " B i t s t r e a m "   o r   t h e   w o r d   " V e r a " . 
 
 T h i s   L i c e n s e   b e c o m e s   n u l l   a n d   v o i d   t o   t h e   e x t e n t   a p p l i c a b l e   t o   F o n t s   o r   F o n t   S o f t w a r e   t h a t   h a s   b e e n   m o d i f i e d   a n d   i s   d i s t r i b u t e d   u n d e r   t h e   " B i t s t r e a m   V e r a "   n a m e s . 
 
 T h e   F o n t   S o f t w a r e   m a y   b e   s o l d   a s   p a r t   o f   a   l a r g e r   s o f t w a r e   p a c k a g e   b u t   n o   c o p y   o f   o n e   o r   m o r e   o f   t h e   F o n t   S o f t w a r e   t y p e f a c e s   m a y   b e   s o l d   b y   i t s e l f . 
 
 T H E   F O N T   S O F T W A R E   I S   P R O V I D E D   " A S   I S " ,   W I T H O U T   W A R R A N T Y   O F   A N Y   K I N D ,   E X P R E S S   O R   I M P L I E D ,   I N C L U D I N G   B U T   N O T   L I M I T E D   T O   A N Y   W A R R A N T I E S   O F   M E R C H A N T A B I L I T Y ,   F I T N E S S   F O R   A   P A R T I C U L A R   P U R P O S E   A N D   N O N I N F R I N G E M E N T   O F   C O P Y R I G H T ,   P A T E N T ,   T R A D E M A R K ,   O R   O T H E R   R I G H T .   I N   N O   E V E N T   S H A L L   B I T S T R E A M   O R   T H E   G N O M E   F O U N D A T I O N   B E   L I A B L E   F O R   A N Y   C L A I M ,   D A M A G E S   O R   O T H E R   L I A B I L I T Y ,   I N C L U D I N G   A N Y   G E N E R A L ,   S P E C I A L ,   I N D I R E C T ,   I N C I D E N T A L ,   O R   C O N S E Q U E N T I A L   D A M A G E S ,   W H E T H E R   I N   A N   A C T I O N   O F   C O N T R A C T ,   T O R T   O R   O T H E R W I S E ,   A R I S I N G   F R O M ,   O U T   O F   T H E   U S E   O R   I N A B I L I T Y   T O   U S E   T H E   F O N T   S O F T W A R E   O R   F R O M   O T H E R   D E A L I N G S   I N   T H E   F O N T   S O F T W A R E . 
 
 E x c e p t   a s   c o n t a i n e d   i n   t h i s   n o t i c e ,   t h e   n a m e s   o f   G n o m e ,   t h e   G n o m e   F o u n d a t i o n ,   a n d   B i t s t r e a m   I n c . ,   s h a l l   n o t   b e   u s e d   i n   a d v e r t i s i n g   o r   o t h e r w i s e   t o   p r o m o t e   t h e   s a l e ,   u s e   o r   o t h e r   d e a l i n g s   i n   t h i s   F o n t   S o f t w a r e   w i t h o u t   p r i o r   w r i t t e n   a u t h o r i z a t i o n   f r o m   t h e   G n o m e   F o u n d a t i o n   o r   B i t s t r e a m   I n c . ,   r e s p e c t i v e l y .   F o r   f u r t h e r   i n f o r m a t i o n ,   c o n t a c t :   f o n t s   a t   g n o m e   d o t   o r g .   
  Fonts are (c) Bitstream (see below). DejaVu changes are in public domain.

Bitstream Vera Fonts Copyright
------------------------------

Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. Bitstream Vera is a trademark of Bitstream, Inc.

Permission is hereby granted, free of charge, to any person obtaining a copy of the fonts accompanying this license ("Fonts") and associated documentation files (the "Font Software"), to reproduce and distribute the Font Software, including without limitation the rights to use, copy, merge, publish, distribute, and/or sell copies of the Font Software, and to permit persons to whom the Font Software is furnished to do so, subject to the following conditions:

The above copyright and trademark notices and this permission notice shall be included in all copies of one or more of the Font Software typefaces.

The Font Software may be modified, altered, or added to, and in particular the designs of glyphs or characters in the Fonts may be modified and additional glyphs or  or characters may be added to the Fonts, only if the fonts are renamed to names not containing either the words "Bitstream" or the word "Vera".

This License becomes null and void to the extent applicable to Fonts or Font Software that has been modified and is distributed under the "Bitstream Vera" names.

The Font Software may be sold as part of a larger software package but no copy of one or more of the Font Software typefaces may be sold by itself.

THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL BITSTREAM OR THE GNOME FOUNDATION BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE.

Except as contained in this notice, the names of Gnome, the Gnome Foundation, and Bitstream Inc., shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Font Software without prior written authorization from the Gnome Foundation or Bitstream Inc., respectively. For further information, contact: fonts at gnome dot org. 
  h t t p : / / d e j a v u . s o u r c e f o r g e . n e t / w i k i / i n d e x . p h p / L i c e n s e  http://dejavu.sourceforge.net/wiki/index.php/License        ~ Z                   
           	 
                        ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a                                    b c  d  e        f     g      h    j i k m l n  o q p r s u t v w  x z y { } |    ~       	
     !"#$%&'()*+  ,-./0123456789:  ;<=>?@ABCDEFGHI  JKLMNOPQRS    TUVWXYZ[\]^_`abcdefghi jklm  nopqrstuvwxyz{|}~  	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~         	
  !"#$%&'()*+,- ./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ 	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ 	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ 	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~                	
  !"#$%&'()*+,-./0123456789:;<=>?@A BCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~          	
    !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~	 											
																						 	!	"	#	$	%	&	'	(	)	*	+	,	-	.	/	0	1	2	3	4	5	6	7	8	9	:	;	<	=	>	?	@	A	B	C	D	E	F	G	H	I	J	K	L	M	N	O	P	Q	R	S	T	U	V	W	X	Y	Z	[	\	]	^	_	`	a	b	c	d	e	f	g	h	i	j	k	l	m	n	o	p	q	r	s	t	u	v	w	x	y	z	{	|	}	~																																																																		 																																																															
 








	























 
!
"
#
$
%
&
'
(
)
*
+
,
-
.
/
0
1
2
3
4
5
6
7
8
9
:
;
<
=
>
?
@
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
[
\
]
^
_
`
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y  
z
{
|
}
~
























	sfthyphenAmacronamacronAbreveabreveAogonekaogonekCcircumflexccircumflex
Cdotaccent
cdotaccentDcarondcaronDcroatEmacronemacronEbreveebreve
Edotaccent
edotaccentEogonekeogonekEcaronecaronGcircumflexgcircumflex
Gdotaccent
gdotaccentGcommaaccentgcommaaccentHcircumflexhcircumflexHbarhbarItildeitildeImacronimacronIbreveibreveIogonekiogonekIJijJcircumflexjcircumflexKcommaaccentkcommaaccentkgreenlandicLacutelacuteLcommaaccentlcommaaccentLcaronlcaronLdotldotNacutenacuteNcommaaccentncommaaccentNcaronncaronnapostropheEngengOmacronomacronObreveobreveOhungarumlautohungarumlautRacuteracuteRcommaaccentrcommaaccentRcaronrcaronSacutesacuteScircumflexscircumflexTcommaaccenttcommaaccentTcarontcaronTbartbarUtildeutildeUmacronumacronUbreveubreveUringuringUhungarumlautuhungarumlautUogonekuogonekWcircumflexwcircumflexYcircumflexycircumflexZacutezacute
Zdotaccent
zdotaccentlongsuni0180uni0181uni0182uni0183uni0184uni0185uni0186uni0187uni0188uni0189uni018Auni018Buni018Cuni018Duni018Euni018Funi0190uni0191uni0193uni0194uni0195uni0196uni0197uni0198uni0199uni019Auni019Buni019Cuni019Duni019Euni019FOhornohornuni01A2uni01A3uni01A4uni01A5uni01A6uni01A7uni01A8uni01A9uni01AAuni01ABuni01ACuni01ADuni01AEUhornuhornuni01B1uni01B2uni01B3uni01B4uni01B5uni01B6uni01B7uni01B8uni01B9uni01BAuni01BBuni01BCuni01BDuni01BEuni01BFuni01C0uni01C1uni01C2uni01C3uni01CDuni01CEuni01CFuni01D0uni01D1uni01D2uni01D3uni01D4uni01D5uni01D6uni01D7uni01D8uni01D9uni01DAuni01DBuni01DCuni01DDuni01DFuni01E0uni01E1uni01E2uni01E3Gcarongcaronuni01E8uni01E9uni01EAuni01EBuni01ECuni01EDuni01EEuni01EFuni01F4uni01F5uni01F6uni01F8uni01F9AEacuteaeacuteOslashacuteoslashacuteuni0200uni0201uni0202uni0203uni0204uni0205uni0206uni0207uni0208uni0209uni020Auni020Buni020Cuni020Duni020Euni020Funi0210uni0211uni0212uni0213uni0214uni0215uni0216uni0217Scommaaccentscommaaccentuni021Auni021Buni021Cuni021Duni021Euni021Funi0221uni0224uni0225uni0226uni0227uni0228uni0229uni022Auni022Buni022Cuni022Duni022Euni022Funi0230uni0231uni0232uni0233uni0234uni0235uni0236dotlessjuni0238uni0239uni023Auni023Buni023Cuni023Duni023Euni023Funi0240uni0241uni0243uni0244uni0245uni024Cuni024Duni0250uni0251uni0252uni0253uni0254uni0255uni0256uni0257uni0258uni0259uni025Auni025Buni025Cuni025Duni025Euni025Funi0260uni0261uni0262uni0263uni0264uni0265uni0266uni0267uni0268uni0269uni026Auni026Buni026Cuni026Duni026Euni026Funi0270uni0271uni0272uni0273uni0274uni0275uni0276uni0277uni0278uni0279uni027Auni027Buni027Cuni027Duni027Euni027Funi0280uni0281uni0282uni0283uni0284uni0285uni0286uni0287uni0288uni0289uni028Auni028Buni028Cuni028Duni028Euni028Funi0290uni0291uni0292uni0293uni0294uni0295uni0296uni0297uni0298uni0299uni029Auni029Buni029Cuni029Duni029Euni029Funi02A0uni02A1uni02A2uni02A3uni02A4uni02A5uni02A6uni02A7uni02A8uni02A9uni02AAuni02ABuni02ACuni02ADuni02AEuni02AFuni02B0uni02B1uni02B2uni02B3uni02B4uni02B5uni02B6uni02B7uni02B8uni02B9uni02BBuni02BCuni02BDuni02BEuni02BFuni02C0uni02C1uni02C8uni02C9uni02CCuni02CDuni02CEuni02CFuni02D0uni02D1uni02D2uni02D3uni02D6uni02D7uni02DEuni02E0uni02E1uni02E2uni02E3uni02E4uni02E5uni02E6uni02E7uni02E8uni02E9uni02EEuni02F3	gravecomb	acutecombuni0302	tildecombuni0304uni0305uni0306uni0307uni0308hookabovecombuni030Auni030Buni030Cuni030Duni030Euni030Funi0310uni0311uni0312uni0313uni0314uni0315uni0316uni0317uni0318uni0319uni031Auni031Buni031Cuni031Duni031Euni031Funi0320uni0321uni0322dotbelowcombuni0324uni0325uni0326uni0327uni0328uni0329uni032Auni032Buni032Cuni032Duni032Euni032Funi0330uni0331uni0332uni0333uni0334uni0335uni0336uni0337uni0338uni0339uni033Auni033Buni033Cuni033Duni033Euni033Funi0343uni0358uni0361uni0374uni0375uni0376uni0377uni037Auni037Buni037Cuni037Duni037Euni037Ftonosdieresistonos
Alphatonos	anoteleiaEpsilontonosEtatonos	IotatonosOmicrontonosUpsilontonos
OmegatonosiotadieresistonosAlphaBetaGammauni0394EpsilonZetaEtaThetaIotaKappaLambdaMuNuXiOmicronPiRhoSigmaTauUpsilonPhiChiPsiIotadieresisUpsilondieresis
alphatonosepsilontonosetatonos	iotatonosupsilondieresistonosalphabetagammadeltaepsilonzetaetathetaiotakappalambdauni03BCnuxiomicronrhosigma1sigmatauupsilonphichipsiomegaiotadieresisupsilondieresisomicrontonosupsilontonos
omegatonosuni03D0theta1Upsilon1uni03D3uni03D4phi1omega1uni03D7uni03D8uni03D9uni03DAuni03DBuni03DCuni03DDuni03DEuni03DFuni03E0uni03E1uni03F0uni03F1uni03F2uni03F3uni03F4uni03F5uni03F6uni03F7uni03F8uni03F9uni03FAuni03FBuni03FCuni03FDuni03FEuni03FFuni0400uni0401uni0402uni0403uni0404uni0405uni0406uni0407uni0408uni0409uni040Auni040Buni040Cuni040Duni040Euni040Funi0410uni0411uni0412uni0413uni0414uni0415uni0416uni0417uni0418uni0419uni041Auni041Buni041Cuni041Duni041Euni041Funi0420uni0421uni0422uni0423uni0424uni0425uni0426uni0427uni0428uni0429uni042Auni042Buni042Cuni042Duni042Euni042Funi0430uni0431uni0432uni0433uni0434uni0435uni0436uni0437uni0438uni0439uni043Auni043Buni043Cuni043Duni043Euni043Funi0440uni0441uni0442uni0443uni0444uni0445uni0446uni0447uni0448uni0449uni044Auni044Buni044Cuni044Duni044Euni044Funi0450uni0451uni0452uni0453uni0454uni0455uni0456uni0457uni0458uni0459uni045Auni045Buni045Cuni045Duni045Euni045Funi0462uni0463uni0472uni0473uni0490uni0491uni0492uni0493uni0494uni0495uni0496uni0497uni0498uni0499uni049Auni049Buni04A2uni04A3uni04A4uni04A5uni04AAuni04ABuni04ACuni04ADuni04AEuni04AFuni04B0uni04B1uni04B2uni04B3uni04BAuni04BBuni04C0uni04C1uni04C2uni04C3uni04C4uni04C7uni04C8uni04CBuni04CCuni04CFuni04D0uni04D1uni04D2uni04D3uni04D4uni04D5uni04D6uni04D7uni04D8uni04D9uni04DAuni04DBuni04DCuni04DDuni04DEuni04DFuni04E0uni04E1uni04E2uni04E3uni04E4uni04E5uni04E6uni04E7uni04E8uni04E9uni04EAuni04EBuni04ECuni04EDuni04EEuni04EFuni04F0uni04F1uni04F2uni04F3uni04F4uni04F5uni04F6uni04F7uni04F8uni04F9uni0510uni0511uni051Auni051Buni051Cuni051Duni0531uni0532uni0533uni0534uni0535uni0536uni0537uni0538uni0539uni053Auni053Buni053Cuni053Duni053Euni053Funi0540uni0541uni0542uni0543uni0544uni0545uni0546uni0547uni0548uni0549uni054Auni054Buni054Cuni054Duni054Euni054Funi0550uni0551uni0552uni0553uni0554uni0555uni0556uni0559uni055Auni055Buni055Cuni055Duni055Euni055Funi0561uni0562uni0563uni0564uni0565uni0566uni0567uni0568uni0569uni056Auni056Buni056Cuni056Duni056Euni056Funi0570uni0571uni0572uni0573uni0574uni0575uni0576uni0577uni0578uni0579uni057Auni057Buni057Cuni057Duni057Euni057Funi0580uni0581uni0582uni0583uni0584uni0585uni0586uni0587uni0589uni058Auni0E3Funi0E81uni0E82uni0E84uni0E87uni0E88uni0E8Auni0E8Duni0E94uni0E95uni0E96uni0E97uni0E99uni0E9Auni0E9Buni0E9Cuni0E9Duni0E9Euni0E9Funi0EA1uni0EA2uni0EA3uni0EA5uni0EA7uni0EAAuni0EABuni0EADuni0EAEuni0EAFuni0EB0uni0EB1uni0EB2uni0EB3uni0EB4uni0EB5uni0EB6uni0EB7uni0EB8uni0EB9uni0EBBuni0EBCuni0EC8uni0EC9uni0ECAuni0ECBuni0ECCuni0ECDuni10D0uni10D1uni10D2uni10D3uni10D4uni10D5uni10D6uni10D7uni10D8uni10D9uni10DAuni10DBuni10DCuni10DDuni10DEuni10DFuni10E0uni10E1uni10E2uni10E3uni10E4uni10E5uni10E6uni10E7uni10E8uni10E9uni10EAuni10EBuni10ECuni10EDuni10EEuni10EFuni10F0uni10F1uni10F2uni10F3uni10F4uni10F5uni10F6uni10F7uni10F8uni10F9uni10FAuni10FBuni10FCuni1D02uni1D08uni1D09uni1D14uni1D16uni1D17uni1D1Duni1D1Euni1D1Funi1D2Cuni1D2Duni1D2Euni1D30uni1D31uni1D32uni1D33uni1D34uni1D35uni1D36uni1D37uni1D38uni1D39uni1D3Auni1D3Buni1D3Cuni1D3Duni1D3Euni1D3Funi1D40uni1D41uni1D42uni1D43uni1D44uni1D45uni1D46uni1D47uni1D48uni1D49uni1D4Auni1D4Buni1D4Cuni1D4Duni1D4Euni1D4Funi1D50uni1D51uni1D52uni1D53uni1D54uni1D55uni1D56uni1D57uni1D58uni1D59uni1D5Auni1D5Buni1D62uni1D63uni1D64uni1D65uni1D77uni1D78uni1D7Buni1D85uni1D9Buni1D9Cuni1D9Duni1D9Euni1D9Funi1DA0uni1DA1uni1DA2uni1DA3uni1DA4uni1DA5uni1DA6uni1DA7uni1DA8uni1DA9uni1DAAuni1DABuni1DACuni1DADuni1DAEuni1DAFuni1DB0uni1DB1uni1DB2uni1DB3uni1DB4uni1DB5uni1DB6uni1DB7uni1DB9uni1DBAuni1DBBuni1DBCuni1DBDuni1DBEuni1DBFuni1E00uni1E01uni1E02uni1E03uni1E04uni1E05uni1E06uni1E07uni1E08uni1E09uni1E0Auni1E0Buni1E0Cuni1E0Duni1E0Euni1E0Funi1E10uni1E11uni1E12uni1E13uni1E18uni1E19uni1E1Auni1E1Buni1E1Cuni1E1Duni1E1Euni1E1Funi1E20uni1E21uni1E22uni1E23uni1E24uni1E25uni1E26uni1E27uni1E28uni1E29uni1E2Auni1E2Buni1E2Cuni1E2Duni1E30uni1E31uni1E32uni1E33uni1E34uni1E35uni1E36uni1E37uni1E38uni1E39uni1E3Auni1E3Buni1E3Cuni1E3Duni1E3Euni1E3Funi1E40uni1E41uni1E42uni1E43uni1E44uni1E45uni1E46uni1E47uni1E48uni1E49uni1E4Auni1E4Buni1E4Cuni1E4Duni1E54uni1E55uni1E56uni1E57uni1E58uni1E59uni1E5Auni1E5Buni1E5Cuni1E5Duni1E5Euni1E5Funi1E60uni1E61uni1E62uni1E63uni1E68uni1E69uni1E6Auni1E6Buni1E6Cuni1E6Duni1E6Euni1E6Funi1E70uni1E71uni1E72uni1E73uni1E74uni1E75uni1E76uni1E77uni1E78uni1E79uni1E7Cuni1E7Duni1E7Euni1E7FWgravewgraveWacutewacute	Wdieresis	wdieresisuni1E86uni1E87uni1E88uni1E89uni1E8Auni1E8Buni1E8Cuni1E8Duni1E8Euni1E8Funi1E90uni1E91uni1E92uni1E93uni1E94uni1E95uni1E96uni1E97uni1E98uni1E99uni1E9Buni1E9Funi1EA0uni1EA1uni1EACuni1EADuni1EB0uni1EB1uni1EB6uni1EB7uni1EB8uni1EB9uni1EBCuni1EBDuni1EC6uni1EC7uni1ECAuni1ECBuni1ECCuni1ECDuni1ED8uni1ED9uni1EDAuni1EDBuni1EDCuni1EDDuni1EE0uni1EE1uni1EE2uni1EE3uni1EE4uni1EE5uni1EE8uni1EE9uni1EEAuni1EEBuni1EEEuni1EEFuni1EF0uni1EF1Ygraveygraveuni1EF4uni1EF5uni1EF8uni1EF9uni1F00uni1F01uni1F02uni1F03uni1F04uni1F05uni1F06uni1F07uni1F08uni1F09uni1F0Auni1F0Buni1F0Cuni1F0Duni1F0Euni1F0Funi1F10uni1F11uni1F12uni1F13uni1F14uni1F15uni1F18uni1F19uni1F1Auni1F1Buni1F1Cuni1F1Duni1F20uni1F21uni1F22uni1F23uni1F24uni1F25uni1F26uni1F27uni1F28uni1F29uni1F2Auni1F2Buni1F2Cuni1F2Duni1F2Euni1F2Funi1F30uni1F31uni1F32uni1F33uni1F34uni1F35uni1F36uni1F37uni1F38uni1F39uni1F3Auni1F3Buni1F3Cuni1F3Duni1F3Euni1F3Funi1F40uni1F41uni1F42uni1F43uni1F44uni1F45uni1F48uni1F49uni1F4Auni1F4Buni1F4Cuni1F4Duni1F50uni1F51uni1F52uni1F53uni1F54uni1F55uni1F56uni1F57uni1F59uni1F5Buni1F5Duni1F5Funi1F60uni1F61uni1F62uni1F63uni1F64uni1F65uni1F66uni1F67uni1F68uni1F69uni1F6Auni1F6Buni1F6Cuni1F6Duni1F6Euni1F6Funi1F70uni1F71uni1F72uni1F73uni1F74uni1F75uni1F76uni1F77uni1F78uni1F79uni1F7Auni1F7Buni1F7Cuni1F7Duni1F80uni1F81uni1F82uni1F83uni1F84uni1F85uni1F86uni1F87uni1F88uni1F89uni1F8Auni1F8Buni1F8Cuni1F8Duni1F8Euni1F8Funi1F90uni1F91uni1F92uni1F93uni1F94uni1F95uni1F96uni1F97uni1F98uni1F99uni1F9Auni1F9Buni1F9Cuni1F9Duni1F9Euni1F9Funi1FA0uni1FA1uni1FA2uni1FA3uni1FA4uni1FA5uni1FA6uni1FA7uni1FA8uni1FA9uni1FAAuni1FABuni1FACuni1FADuni1FAEuni1FAFuni1FB0uni1FB1uni1FB2uni1FB3uni1FB4uni1FB6uni1FB7uni1FB8uni1FB9uni1FBAuni1FBBuni1FBCuni1FBDuni1FBEuni1FBFuni1FC0uni1FC1uni1FC2uni1FC3uni1FC4uni1FC6uni1FC7uni1FC8uni1FC9uni1FCAuni1FCBuni1FCCuni1FCDuni1FCEuni1FCFuni1FD0uni1FD1uni1FD2uni1FD3uni1FD6uni1FD7uni1FD8uni1FD9uni1FDAuni1FDBuni1FDDuni1FDEuni1FDFuni1FE0uni1FE1uni1FE2uni1FE3uni1FE4uni1FE5uni1FE6uni1FE7uni1FE8uni1FE9uni1FEAuni1FEBuni1FECuni1FEDuni1FEEuni1FEFuni1FF2uni1FF3uni1FF4uni1FF6uni1FF7uni1FF8uni1FF9uni1FFAuni1FFBuni1FFCuni1FFDuni1FFEuni2000uni2001uni2002uni2003uni2004uni2005uni2006uni2007uni2008uni2009uni200Auni2010uni2011
figuredashuni2015uni2016underscoredblquotereverseduni201Funi2023uni202Funi2031minuteseconduni2034uni2035uni2036uni2037	exclamdbluni203Duni203Euni203Funi2045uni2046uni2047uni2048uni2049uni204Buni205Funi2070uni2071uni2074uni2075uni2076uni2077uni2078uni2079uni207Auni207Buni207Cuni207Duni207Euni207Funi2080uni2081uni2082uni2083uni2084uni2085uni2086uni2087uni2088uni2089uni208Auni208Buni208Cuni208Duni208Euni2090uni2091uni2092uni2093uni2094uni2095uni2096uni2097uni2098uni2099uni209Auni209Buni209Cuni20A0colonmonetaryuni20A2lirauni20A5uni20A6pesetauni20A8uni20A9uni20AAdongEurouni20ADuni20AEuni20AFuni20B0uni20B1uni20B2uni20B3uni20B4uni20B5uni20B8uni20B9uni20BAuni20BDuni2102uni2105uni210Duni210Euni210Funi2115uni2116uni2117uni2119uni211Auni211Duni2124uni2126uni212Auni212B	estimateduni2148uni2150uni2151onethird	twothirdsuni2155uni2156uni2157uni2158uni2159uni215A	oneeighththreeeighthsfiveeighthsseveneighthsuni215Funi2189	arrowleftarrowup
arrowright	arrowdown	arrowboth	arrowupdnuni2196uni2197uni2198uni2199uni219Auni219Buni219Cuni219Duni219Euni219Funi21A0uni21A1uni21A2uni21A3uni21A4uni21A5uni21A6uni21A7arrowupdnbseuni21A9uni21AAuni21ABuni21ACuni21ADuni21AEuni21AFuni21B0uni21B1uni21B2uni21B3uni21B4carriagereturnuni21B6uni21B7uni21B8uni21B9uni21BAuni21BBuni21BCuni21BDuni21BEuni21BFuni21C0uni21C1uni21C2uni21C3uni21C4uni21C5uni21C6uni21C7uni21C8uni21C9uni21CAuni21CBuni21CCuni21CDuni21CEuni21CFarrowdblleft
arrowdbluparrowdblrightarrowdbldownarrowdblbothuni21D5uni21D6uni21D7uni21D8uni21D9uni21DAuni21DBuni21DCuni21DDuni21DEuni21DFuni21E0uni21E1uni21E2uni21E3uni21E4uni21E5uni21E6uni21E7uni21E8uni21E9uni21EAuni21EBuni21ECuni21EDuni21EEuni21EFuni21F0uni21F1uni21F2uni21F3uni21F4uni21F5uni21F6uni21F7uni21F8uni21F9uni21FAuni21FBuni21FCuni21FDuni21FEuni21FF	universaluni2201existentialuni2204emptysetgradientelement
notelementuni220Asuchthatuni220Cuni220Duni220Euni2210uni2213uni2215asteriskmathuni2218uni2219uni221Buni221Cproportional
orthogonalangleuni2223
logicaland	logicalorintersectionunionuni222Cuni222D	thereforeuni2235uni2236uni2237uni2238uni2239uni223Auni223Bsimilaruni223Duni2241uni2242uni2243uni2244	congruentuni2246uni2247uni2249uni224Auni224Buni224Cuni224Duni224Euni224Funi2250uni2251uni2252uni2253uni2254uni2255uni2256uni2257uni2258uni2259uni225Auni225Buni225Cuni225Duni225Euni225Fequivalenceuni2262uni2263uni2266uni2267uni2268uni2269uni226Duni226Euni226Funi2270uni2271uni2272uni2273uni2274uni2275uni2276uni2277uni2278uni2279uni227Auni227Buni227Cuni227Duni227Euni227Funi2280uni2281propersubsetpropersuperset	notsubsetuni2285reflexsubsetreflexsupersetuni2288uni2289uni228Auni228Buni228Duni228Euni228Funi2290uni2291uni2292uni2293uni2294
circleplusuni2296circlemultiplyuni2298uni2299uni229Auni229Buni229Cuni229Duni229Euni229Funi22A0uni22A1uni22A2uni22A3uni22A4perpendicularuni22B2uni22B3uni22B4uni22B5uni22B8uni22C2uni22C3uni22C4dotmathuni22C6uni22CDuni22CEuni22CFuni22D0uni22D1uni22DAuni22DBuni22DCuni22DDuni22DEuni22DFuni22E0uni22E1uni22E2uni22E3uni22E4uni22E5uni22E6uni22E7uni22E8uni22E9uni22EFuni2300uni2301houseuni2303uni2304uni2305uni2306uni2308uni2309uni230Auni230Buni230Cuni230Duni230Euni230Frevlogicalnotuni2311uni2312uni2313uni2314uni2315uni2318uni2319uni231Cuni231Duni231Euni231F
integraltp
integralbtuni2325uni2326uni2327uni2328uni232Buni2335uni2336uni2337uni2338uni2339uni233Auni233Buni233Cuni233Duni233Euni233Funi2340uni2341uni2342uni2343uni2344uni2345uni2346uni2347uni2348uni2349uni234Auni234Buni234Cuni234Duni234Euni234Funi2350uni2351uni2352uni2353uni2354uni2355uni2356uni2357uni2358uni2359uni235Auni235Buni235Cuni235Duni235Euni235Funi2360uni2361uni2362uni2363uni2364uni2365uni2366uni2367uni2368uni2369uni236Auni236Buni236Cuni236Duni236Euni236Funi2370uni2371uni2372uni2373uni2374uni2375uni2376uni2377uni2378uni2379uni237Auni237Duni2380uni2381uni2382uni2383uni2388uni2389uni238Auni238Buni2395uni239Buni239Cuni239Duni239Euni239Funi23A0uni23A1uni23A2uni23A3uni23A4uni23A5uni23A6uni23A7uni23A8uni23A9uni23AAuni23ABuni23ACuni23ADuni23AEuni23CEuni23CFuni2423SF100000uni2501SF110000uni2503uni2504uni2505uni2506uni2507uni2508uni2509uni250Auni250BSF010000uni250Duni250Euni250FSF030000uni2511uni2512uni2513SF020000uni2515uni2516uni2517SF040000uni2519uni251Auni251BSF080000uni251Duni251Euni251Funi2520uni2521uni2522uni2523SF090000uni2525uni2526uni2527uni2528uni2529uni252Auni252BSF060000uni252Duni252Euni252Funi2530uni2531uni2532uni2533SF070000uni2535uni2536uni2537uni2538uni2539uni253Auni253BSF050000uni253Duni253Euni253Funi2540uni2541uni2542uni2543uni2544uni2545uni2546uni2547uni2548uni2549uni254Auni254Buni254Cuni254Duni254Euni254FSF430000SF240000SF510000SF520000SF390000SF220000SF210000SF250000SF500000SF490000SF380000SF280000SF270000SF260000SF360000SF370000SF420000SF190000SF200000SF230000SF470000SF480000SF410000SF450000SF460000SF400000SF540000SF530000SF440000uni256Duni256Euni256Funi2570uni2571uni2572uni2573uni2574uni2575uni2576uni2577uni2578uni2579uni257Auni257Buni257Cuni257Duni257Euni257Fupblockuni2581uni2582uni2583dnblockuni2585uni2586uni2587blockuni2589uni258Auni258Blfblockuni258Duni258Euni258Frtblockltshadeshadedkshadeuni2594uni2595uni2596uni2597uni2598uni2599uni259Auni259Buni259Cuni259Duni259Euni259F	filledboxH22073uni25A2uni25A3uni25A4uni25A5uni25A6uni25A7uni25A8uni25A9H18543H18551
filledrectuni25ADuni25AEuni25AFuni25B0uni25B1triagupuni25B3uni25B4uni25B5uni25B6uni25B7uni25B8uni25B9triagrtuni25BBtriagdnuni25BDuni25BEuni25BFuni25C0uni25C1uni25C2uni25C3triaglfuni25C5uni25C6uni25C7uni25C8uni25C9circleuni25CCuni25CDuni25CEH18533uni25D0uni25D1uni25D2uni25D3uni25D4uni25D5uni25D6uni25D7	invbullet	invcircleuni25DAuni25DBuni25DCuni25DDuni25DEuni25DFuni25E0uni25E1uni25E2uni25E3uni25E4uni25E5
openbulletuni25E7uni25E8uni25E9uni25EAuni25EBuni25ECuni25EDuni25EEuni25EFuni25F0uni25F1uni25F2uni25F3uni25F4uni25F5uni25F6uni25F7uni25F8uni25F9uni25FAuni25FBuni25FCuni25FDuni25FEuni25FFuni2600uni2638uni2639	smilefaceinvsmilefacesununi263Ffemaleuni2641maleuni2643uni2644uni2645uni2646uni2647spadeuni2661uni2662clubuni2664heartdiamonduni2667uni2669musicalnotemusicalnotedbluni266Cuni266Duni266Euni266Funi27C2uni27C5uni27C6uni27DCuni27E0uni27E6uni27E7uni27E8uni27E9uni27EAuni27EBuni27F5uni27F6uni27F7uni2987uni2988uni2997uni2998uni29EBuni29FAuni29FBuni2A00uni2A2Funi2A6Auni2A6Buni2B05uni2B06uni2B07uni2B08uni2B09uni2B0Auni2B0Buni2B0Cuni2B0Duni2B12uni2B13uni2B14uni2B15uni2B16uni2B17uni2B18uni2B19uni2B1Auni2C64uni2C6Duni2C6Euni2C6Funi2C70uni2C75uni2C76uni2C77uni2C79uni2C7Auni2C7Cuni2C7Duni2C7Euni2C7Funi2E18uni2E1Funi2E22uni2E23uni2E24uni2E25uni2E2EuniA708uniA709uniA70AuniA70BuniA70CuniA70DuniA70EuniA70FuniA710uniA711uniA712uniA713uniA714uniA715uniA716uniA71BuniA71CuniA71DuniA71EuniA71FuniA722uniA723uniA724uniA725uniA726uniA727uniA789uniA78AuniA78BuniA78CuniA78DuniA78EuniA790uniA791uniA7AAuniA7F8uniA7F9uniF6C5uniFFF9uniFFFAuniFFFBuniFFFCuniFFFDu1D55A	dlLtcaronDieresisAcuteTildeGrave
CircumflexCaronfractionslashuni0311.caseuni0306.caseuni0307.caseuni030B.caseuni030F.casethinquestionuni0304.caseunderbarunderbar.wideunderbar.smalljotdiaeresis.symbolsEng.altexclamdown.casequestiondown.caseuni2E18.case @֚ԴG}%2і}2»}Y&Y@&//2G@GddkY}:Y:

VfXAW%d]%]@%XA~XA~}|d{dzy@}xwvutst2srqpq(ponmlkldkjkji
hgfff@ed.ed.cXAcbYba`a`_]``_[%_]_@^]\[%\[%ZYZYXW%XAWVW%VUTSRSRQPONBNSMLxKJ}KJ}IHGDCB2A@BAF@?-@B?>@?->=<;:9S:98(9S8(76543210/+/.d-,+,+*)('-'&%%2$#"!-!1 d
2
@:%%:B-B:
		@$--:- 
 
d++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++  StartFontMetrics 4.1
Notice Converted by PHP-font-lib
Comment https://github.com/PhenX/php-font-lib
EncodingScheme FontSpecific
FontName DejaVu Sans Mono
FontSubfamily Oblique
UniqueID DejaVu Sans Mono Oblique
FullName DejaVu Sans Mono Oblique
Version Version 2.37
PostScriptName DejaVuSansMono-Oblique
Manufacturer DejaVu fonts team
FontVendorURL http://dejavu.sourceforge.net
LicenseURL http://dejavu.sourceforge.net/wiki/index.php/License
Weight Medium
ItalicAngle -11
IsFixedPitch true
UnderlineThickness 44
UnderlinePosition -63
FontHeightOffset 0
Ascender 928
Descender -236
FontBBox -403 -375 746 998
StartCharMetrics 2710
U 32 ; WX 602 ; N space ; G 3
U 33 ; WX 602 ; N exclam ; G 4
U 34 ; WX 602 ; N quotedbl ; G 5
U 35 ; WX 602 ; N numbersign ; G 6
U 36 ; WX 602 ; N dollar ; G 7
U 37 ; WX 602 ; N percent ; G 8
U 38 ; WX 602 ; N ampersand ; G 9
U 39 ; WX 602 ; N quotesingle ; G 10
U 40 ; WX 602 ; N parenleft ; G 11
U 41 ; WX 602 ; N parenright ; G 12
U 42 ; WX 602 ; N asterisk ; G 13
U 43 ; WX 602 ; N plus ; G 14
U 44 ; WX 602 ; N comma ; G 15
U 45 ; WX 602 ; N hyphen ; G 16
U 46 ; WX 602 ; N period ; G 17
U 47 ; WX 602 ; N slash ; G 18
U 48 ; WX 602 ; N zero ; G 19
U 49 ; WX 602 ; N one ; G 20
U 50 ; WX 602 ; N two ; G 21
U 51 ; WX 602 ; N three ; G 22
U 52 ; WX 602 ; N four ; G 23
U 53 ; WX 602 ; N five ; G 24
U 54 ; WX 602 ; N six ; G 25
U 55 ; WX 602 ; N seven ; G 26
U 56 ; WX 602 ; N eight ; G 27
U 57 ; WX 602 ; N nine ; G 28
U 58 ; WX 602 ; N colon ; G 29
U 59 ; WX 602 ; N semicolon ; G 30
U 60 ; WX 602 ; N less ; G 31
U 61 ; WX 602 ; N equal ; G 32
U 62 ; WX 602 ; N greater ; G 33
U 63 ; WX 602 ; N question ; G 34
U 64 ; WX 602 ; N at ; G 35
U 65 ; WX 602 ; N A ; G 36
U 66 ; WX 602 ; N B ; G 37
U 67 ; WX 602 ; N C ; G 38
U 68 ; WX 602 ; N D ; G 39
U 69 ; WX 602 ; N E ; G 40
U 70 ; WX 602 ; N F ; G 41
U 71 ; WX 602 ; N G ; G 42
U 72 ; WX 602 ; N H ; G 43
U 73 ; WX 602 ; N I ; G 44
U 74 ; WX 602 ; N J ; G 45
U 75 ; WX 602 ; N K ; G 46
U 76 ; WX 602 ; N L ; G 47
U 77 ; WX 602 ; N M ; G 48
U 78 ; WX 602 ; N N ; G 49
U 79 ; WX 602 ; N O ; G 50
U 80 ; WX 602 ; N P ; G 51
U 81 ; WX 602 ; N Q ; G 52
U 82 ; WX 602 ; N R ; G 53
U 83 ; WX 602 ; N S ; G 54
U 84 ; WX 602 ; N T ; G 55
U 85 ; WX 602 ; N U ; G 56
U 86 ; WX 602 ; N V ; G 57
U 87 ; WX 602 ; N W ; G 58
U 88 ; WX 602 ; N X ; G 59
U 89 ; WX 602 ; N Y ; G 60
U 90 ; WX 602 ; N Z ; G 61
U 91 ; WX 602 ; N bracketleft ; G 62
U 92 ; WX 602 ; N backslash ; G 63
U 93 ; WX 602 ; N bracketright ; G 64
U 94 ; WX 602 ; N asciicircum ; G 65
U 95 ; WX 602 ; N underscore ; G 66
U 96 ; WX 602 ; N grave ; G 67
U 97 ; WX 602 ; N a ; G 68
U 98 ; WX 602 ; N b ; G 69
U 99 ; WX 602 ; N c ; G 70
U 100 ; WX 602 ; N d ; G 71
U 101 ; WX 602 ; N e ; G 72
U 102 ; WX 602 ; N f ; G 73
U 103 ; WX 602 ; N g ; G 74
U 104 ; WX 602 ; N h ; G 75
U 105 ; WX 602 ; N i ; G 76
U 106 ; WX 602 ; N j ; G 77
U 107 ; WX 602 ; N k ; G 78
U 108 ; WX 602 ; N l ; G 79
U 109 ; WX 602 ; N m ; G 80
U 110 ; WX 602 ; N n ; G 81
U 111 ; WX 602 ; N o ; G 82
U 112 ; WX 602 ; N p ; G 83
U 113 ; WX 602 ; N q ; G 84
U 114 ; WX 602 ; N r ; G 85
U 115 ; WX 602 ; N s ; G 86
U 116 ; WX 602 ; N t ; G 87
U 117 ; WX 602 ; N u ; G 88
U 118 ; WX 602 ; N v ; G 89
U 119 ; WX 602 ; N w ; G 90
U 120 ; WX 602 ; N x ; G 91
U 121 ; WX 602 ; N y ; G 92
U 122 ; WX 602 ; N z ; G 93
U 123 ; WX 602 ; N braceleft ; G 94
U 124 ; WX 602 ; N bar ; G 95
U 125 ; WX 602 ; N braceright ; G 96
U 126 ; WX 602 ; N asciitilde ; G 97
U 160 ; WX 602 ; N nbspace ; G 98
U 161 ; WX 602 ; N exclamdown ; G 99
U 162 ; WX 602 ; N cent ; G 100
U 163 ; WX 602 ; N sterling ; G 101
U 164 ; WX 602 ; N currency ; G 102
U 165 ; WX 602 ; N yen ; G 103
U 166 ; WX 602 ; N brokenbar ; G 104
U 167 ; WX 602 ; N section ; G 105
U 168 ; WX 602 ; N dieresis ; G 106
U 169 ; WX 602 ; N copyright ; G 107
U 170 ; WX 602 ; N ordfeminine ; G 108
U 171 ; WX 602 ; N guillemotleft ; G 109
U 172 ; WX 602 ; N logicalnot ; G 110
U 173 ; WX 602 ; N sfthyphen ; G 111
U 174 ; WX 602 ; N registered ; G 112
U 175 ; WX 602 ; N macron ; G 113
U 176 ; WX 602 ; N degree ; G 114
U 177 ; WX 602 ; N plusminus ; G 115
U 178 ; WX 602 ; N twosuperior ; G 116
U 179 ; WX 602 ; N threesuperior ; G 117
U 180 ; WX 602 ; N acute ; G 118
U 181 ; WX 602 ; N mu ; G 119
U 182 ; WX 602 ; N paragraph ; G 120
U 183 ; WX 602 ; N periodcentered ; G 121
U 184 ; WX 602 ; N cedilla ; G 122
U 185 ; WX 602 ; N onesuperior ; G 123
U 186 ; WX 602 ; N ordmasculine ; G 124
U 187 ; WX 602 ; N guillemotright ; G 125
U 188 ; WX 602 ; N onequarter ; G 126
U 189 ; WX 602 ; N onehalf ; G 127
U 190 ; WX 602 ; N threequarters ; G 128
U 191 ; WX 602 ; N questiondown ; G 129
U 192 ; WX 602 ; N Agrave ; G 130
U 193 ; WX 602 ; N Aacute ; G 131
U 194 ; WX 602 ; N Acircumflex ; G 132
U 195 ; WX 602 ; N Atilde ; G 133
U 196 ; WX 602 ; N Adieresis ; G 134
U 197 ; WX 602 ; N Aring ; G 135
U 198 ; WX 602 ; N AE ; G 136
U 199 ; WX 602 ; N Ccedilla ; G 137
U 200 ; WX 602 ; N Egrave ; G 138
U 201 ; WX 602 ; N Eacute ; G 139
U 202 ; WX 602 ; N Ecircumflex ; G 140
U 203 ; WX 602 ; N Edieresis ; G 141
U 204 ; WX 602 ; N Igrave ; G 142
U 205 ; WX 602 ; N Iacute ; G 143
U 206 ; WX 602 ; N Icircumflex ; G 144
U 207 ; WX 602 ; N Idieresis ; G 145
U 208 ; WX 602 ; N Eth ; G 146
U 209 ; WX 602 ; N Ntilde ; G 147
U 210 ; WX 602 ; N Ograve ; G 148
U 211 ; WX 602 ; N Oacute ; G 149
U 212 ; WX 602 ; N Ocircumflex ; G 150
U 213 ; WX 602 ; N Otilde ; G 151
U 214 ; WX 602 ; N Odieresis ; G 152
U 215 ; WX 602 ; N multiply ; G 153
U 216 ; WX 602 ; N Oslash ; G 154
U 217 ; WX 602 ; N Ugrave ; G 155
U 218 ; WX 602 ; N Uacute ; G 156
U 219 ; WX 602 ; N Ucircumflex ; G 157
U 220 ; WX 602 ; N Udieresis ; G 158
U 221 ; WX 602 ; N Yacute ; G 159
U 222 ; WX 602 ; N Thorn ; G 160
U 223 ; WX 602 ; N germandbls ; G 161
U 224 ; WX 602 ; N agrave ; G 162
U 225 ; WX 602 ; N aacute ; G 163
U 226 ; WX 602 ; N acircumflex ; G 164
U 227 ; WX 602 ; N atilde ; G 165
U 228 ; WX 602 ; N adieresis ; G 166
U 229 ; WX 602 ; N aring ; G 167
U 230 ; WX 602 ; N ae ; G 168
U 231 ; WX 602 ; N ccedilla ; G 169
U 232 ; WX 602 ; N egrave ; G 170
U 233 ; WX 602 ; N eacute ; G 171
U 234 ; WX 602 ; N ecircumflex ; G 172
U 235 ; WX 602 ; N edieresis ; G 173
U 236 ; WX 602 ; N igrave ; G 174
U 237 ; WX 602 ; N iacute ; G 175
U 238 ; WX 602 ; N icircumflex ; G 176
U 239 ; WX 602 ; N idieresis ; G 177
U 240 ; WX 602 ; N eth ; G 178
U 241 ; WX 602 ; N ntilde ; G 179
U 242 ; WX 602 ; N ograve ; G 180
U 243 ; WX 602 ; N oacute ; G 181
U 244 ; WX 602 ; N ocircumflex ; G 182
U 245 ; WX 602 ; N otilde ; G 183
U 246 ; WX 602 ; N odieresis ; G 184
U 247 ; WX 602 ; N divide ; G 185
U 248 ; WX 602 ; N oslash ; G 186
U 249 ; WX 602 ; N ugrave ; G 187
U 250 ; WX 602 ; N uacute ; G 188
U 251 ; WX 602 ; N ucircumflex ; G 189
U 252 ; WX 602 ; N udieresis ; G 190
U 253 ; WX 602 ; N yacute ; G 191
U 254 ; WX 602 ; N thorn ; G 192
U 255 ; WX 602 ; N ydieresis ; G 193
U 256 ; WX 602 ; N Amacron ; G 194
U 257 ; WX 602 ; N amacron ; G 195
U 258 ; WX 602 ; N Abreve ; G 196
U 259 ; WX 602 ; N abreve ; G 197
U 260 ; WX 602 ; N Aogonek ; G 198
U 261 ; WX 602 ; N aogonek ; G 199
U 262 ; WX 602 ; N Cacute ; G 200
U 263 ; WX 602 ; N cacute ; G 201
U 264 ; WX 602 ; N Ccircumflex ; G 202
U 265 ; WX 602 ; N ccircumflex ; G 203
U 266 ; WX 602 ; N Cdotaccent ; G 204
U 267 ; WX 602 ; N cdotaccent ; G 205
U 268 ; WX 602 ; N Ccaron ; G 206
U 269 ; WX 602 ; N ccaron ; G 207
U 270 ; WX 602 ; N Dcaron ; G 208
U 271 ; WX 602 ; N dcaron ; G 209
U 272 ; WX 602 ; N Dcroat ; G 210
U 273 ; WX 602 ; N dmacron ; G 211
U 274 ; WX 602 ; N Emacron ; G 212
U 275 ; WX 602 ; N emacron ; G 213
U 276 ; WX 602 ; N Ebreve ; G 214
U 277 ; WX 602 ; N ebreve ; G 215
U 278 ; WX 602 ; N Edotaccent ; G 216
U 279 ; WX 602 ; N edotaccent ; G 217
U 280 ; WX 602 ; N Eogonek ; G 218
U 281 ; WX 602 ; N eogonek ; G 219
U 282 ; WX 602 ; N Ecaron ; G 220
U 283 ; WX 602 ; N ecaron ; G 221
U 284 ; WX 602 ; N Gcircumflex ; G 222
U 285 ; WX 602 ; N gcircumflex ; G 223
U 286 ; WX 602 ; N Gbreve ; G 224
U 287 ; WX 602 ; N gbreve ; G 225
U 288 ; WX 602 ; N Gdotaccent ; G 226
U 289 ; WX 602 ; N gdotaccent ; G 227
U 290 ; WX 602 ; N Gcommaaccent ; G 228
U 291 ; WX 602 ; N gcommaaccent ; G 229
U 292 ; WX 602 ; N Hcircumflex ; G 230
U 293 ; WX 602 ; N hcircumflex ; G 231
U 294 ; WX 602 ; N Hbar ; G 232
U 295 ; WX 602 ; N hbar ; G 233
U 296 ; WX 602 ; N Itilde ; G 234
U 297 ; WX 602 ; N itilde ; G 235
U 298 ; WX 602 ; N Imacron ; G 236
U 299 ; WX 602 ; N imacron ; G 237
U 300 ; WX 602 ; N Ibreve ; G 238
U 301 ; WX 602 ; N ibreve ; G 239
U 302 ; WX 602 ; N Iogonek ; G 240
U 303 ; WX 602 ; N iogonek ; G 241
U 304 ; WX 602 ; N Idot ; G 242
U 305 ; WX 602 ; N dotlessi ; G 243
U 306 ; WX 602 ; N IJ ; G 244
U 307 ; WX 602 ; N ij ; G 245
U 308 ; WX 602 ; N Jcircumflex ; G 246
U 309 ; WX 602 ; N jcircumflex ; G 247
U 310 ; WX 602 ; N Kcommaaccent ; G 248
U 311 ; WX 602 ; N kcommaaccent ; G 249
U 312 ; WX 602 ; N kgreenlandic ; G 250
U 313 ; WX 602 ; N Lacute ; G 251
U 314 ; WX 602 ; N lacute ; G 252
U 315 ; WX 602 ; N Lcommaaccent ; G 253
U 316 ; WX 602 ; N lcommaaccent ; G 254
U 317 ; WX 602 ; N Lcaron ; G 255
U 318 ; WX 602 ; N lcaron ; G 256
U 319 ; WX 602 ; N Ldot ; G 257
U 320 ; WX 602 ; N ldot ; G 258
U 321 ; WX 602 ; N Lslash ; G 259
U 322 ; WX 602 ; N lslash ; G 260
U 323 ; WX 602 ; N Nacute ; G 261
U 324 ; WX 602 ; N nacute ; G 262
U 325 ; WX 602 ; N Ncommaaccent ; G 263
U 326 ; WX 602 ; N ncommaaccent ; G 264
U 327 ; WX 602 ; N Ncaron ; G 265
U 328 ; WX 602 ; N ncaron ; G 266
U 329 ; WX 602 ; N napostrophe ; G 267
U 330 ; WX 602 ; N Eng ; G 268
U 331 ; WX 602 ; N eng ; G 269
U 332 ; WX 602 ; N Omacron ; G 270
U 333 ; WX 602 ; N omacron ; G 271
U 334 ; WX 602 ; N Obreve ; G 272
U 335 ; WX 602 ; N obreve ; G 273
U 336 ; WX 602 ; N Ohungarumlaut ; G 274
U 337 ; WX 602 ; N ohungarumlaut ; G 275
U 338 ; WX 602 ; N OE ; G 276
U 339 ; WX 602 ; N oe ; G 277
U 340 ; WX 602 ; N Racute ; G 278
U 341 ; WX 602 ; N racute ; G 279
U 342 ; WX 602 ; N Rcommaaccent ; G 280
U 343 ; WX 602 ; N rcommaaccent ; G 281
U 344 ; WX 602 ; N Rcaron ; G 282
U 345 ; WX 602 ; N rcaron ; G 283
U 346 ; WX 602 ; N Sacute ; G 284
U 347 ; WX 602 ; N sacute ; G 285
U 348 ; WX 602 ; N Scircumflex ; G 286
U 349 ; WX 602 ; N scircumflex ; G 287
U 350 ; WX 602 ; N Scedilla ; G 288
U 351 ; WX 602 ; N scedilla ; G 289
U 352 ; WX 602 ; N Scaron ; G 290
U 353 ; WX 602 ; N scaron ; G 291
U 354 ; WX 602 ; N Tcommaaccent ; G 292
U 355 ; WX 602 ; N tcommaaccent ; G 293
U 356 ; WX 602 ; N Tcaron ; G 294
U 357 ; WX 602 ; N tcaron ; G 295
U 358 ; WX 602 ; N Tbar ; G 296
U 359 ; WX 602 ; N tbar ; G 297
U 360 ; WX 602 ; N Utilde ; G 298
U 361 ; WX 602 ; N utilde ; G 299
U 362 ; WX 602 ; N Umacron ; G 300
U 363 ; WX 602 ; N umacron ; G 301
U 364 ; WX 602 ; N Ubreve ; G 302
U 365 ; WX 602 ; N ubreve ; G 303
U 366 ; WX 602 ; N Uring ; G 304
U 367 ; WX 602 ; N uring ; G 305
U 368 ; WX 602 ; N Uhungarumlaut ; G 306
U 369 ; WX 602 ; N uhungarumlaut ; G 307
U 370 ; WX 602 ; N Uogonek ; G 308
U 371 ; WX 602 ; N uogonek ; G 309
U 372 ; WX 602 ; N Wcircumflex ; G 310
U 373 ; WX 602 ; N wcircumflex ; G 311
U 374 ; WX 602 ; N Ycircumflex ; G 312
U 375 ; WX 602 ; N ycircumflex ; G 313
U 376 ; WX 602 ; N Ydieresis ; G 314
U 377 ; WX 602 ; N Zacute ; G 315
U 378 ; WX 602 ; N zacute ; G 316
U 379 ; WX 602 ; N Zdotaccent ; G 317
U 380 ; WX 602 ; N zdotaccent ; G 318
U 381 ; WX 602 ; N Zcaron ; G 319
U 382 ; WX 602 ; N zcaron ; G 320
U 383 ; WX 602 ; N longs ; G 321
U 384 ; WX 602 ; N uni0180 ; G 322
U 385 ; WX 602 ; N uni0181 ; G 323
U 386 ; WX 602 ; N uni0182 ; G 324
U 387 ; WX 602 ; N uni0183 ; G 325
U 388 ; WX 602 ; N uni0184 ; G 326
U 389 ; WX 602 ; N uni0185 ; G 327
U 390 ; WX 602 ; N uni0186 ; G 328
U 391 ; WX 602 ; N uni0187 ; G 329
U 392 ; WX 602 ; N uni0188 ; G 330
U 393 ; WX 602 ; N uni0189 ; G 331
U 394 ; WX 602 ; N uni018A ; G 332
U 395 ; WX 602 ; N uni018B ; G 333
U 396 ; WX 602 ; N uni018C ; G 334
U 397 ; WX 602 ; N uni018D ; G 335
U 398 ; WX 602 ; N uni018E ; G 336
U 399 ; WX 602 ; N uni018F ; G 337
U 400 ; WX 602 ; N uni0190 ; G 338
U 401 ; WX 602 ; N uni0191 ; G 339
U 402 ; WX 602 ; N florin ; G 340
U 403 ; WX 602 ; N uni0193 ; G 341
U 404 ; WX 602 ; N uni0194 ; G 342
U 405 ; WX 602 ; N uni0195 ; G 343
U 406 ; WX 602 ; N uni0196 ; G 344
U 407 ; WX 602 ; N uni0197 ; G 345
U 408 ; WX 602 ; N uni0198 ; G 346
U 409 ; WX 602 ; N uni0199 ; G 347
U 410 ; WX 602 ; N uni019A ; G 348
U 411 ; WX 602 ; N uni019B ; G 349
U 412 ; WX 602 ; N uni019C ; G 350
U 413 ; WX 602 ; N uni019D ; G 351
U 414 ; WX 602 ; N uni019E ; G 352
U 415 ; WX 602 ; N uni019F ; G 353
U 416 ; WX 602 ; N Ohorn ; G 354
U 417 ; WX 602 ; N ohorn ; G 355
U 418 ; WX 602 ; N uni01A2 ; G 356
U 419 ; WX 602 ; N uni01A3 ; G 357
U 420 ; WX 602 ; N uni01A4 ; G 358
U 421 ; WX 602 ; N uni01A5 ; G 359
U 422 ; WX 602 ; N uni01A6 ; G 360
U 423 ; WX 602 ; N uni01A7 ; G 361
U 424 ; WX 602 ; N uni01A8 ; G 362
U 425 ; WX 602 ; N uni01A9 ; G 363
U 426 ; WX 602 ; N uni01AA ; G 364
U 427 ; WX 602 ; N uni01AB ; G 365
U 428 ; WX 602 ; N uni01AC ; G 366
U 429 ; WX 602 ; N uni01AD ; G 367
U 430 ; WX 602 ; N uni01AE ; G 368
U 431 ; WX 602 ; N Uhorn ; G 369
U 432 ; WX 602 ; N uhorn ; G 370
U 433 ; WX 602 ; N uni01B1 ; G 371
U 434 ; WX 602 ; N uni01B2 ; G 372
U 435 ; WX 602 ; N uni01B3 ; G 373
U 436 ; WX 602 ; N uni01B4 ; G 374
U 437 ; WX 602 ; N uni01B5 ; G 375
U 438 ; WX 602 ; N uni01B6 ; G 376
U 439 ; WX 602 ; N uni01B7 ; G 377
U 440 ; WX 602 ; N uni01B8 ; G 378
U 441 ; WX 602 ; N uni01B9 ; G 379
U 442 ; WX 602 ; N uni01BA ; G 380
U 443 ; WX 602 ; N uni01BB ; G 381
U 444 ; WX 602 ; N uni01BC ; G 382
U 445 ; WX 602 ; N uni01BD ; G 383
U 446 ; WX 602 ; N uni01BE ; G 384
U 447 ; WX 602 ; N uni01BF ; G 385
U 448 ; WX 602 ; N uni01C0 ; G 386
U 449 ; WX 602 ; N uni01C1 ; G 387
U 450 ; WX 602 ; N uni01C2 ; G 388
U 451 ; WX 602 ; N uni01C3 ; G 389
U 461 ; WX 602 ; N uni01CD ; G 390
U 462 ; WX 602 ; N uni01CE ; G 391
U 463 ; WX 602 ; N uni01CF ; G 392
U 464 ; WX 602 ; N uni01D0 ; G 393
U 465 ; WX 602 ; N uni01D1 ; G 394
U 466 ; WX 602 ; N uni01D2 ; G 395
U 467 ; WX 602 ; N uni01D3 ; G 396
U 468 ; WX 602 ; N uni01D4 ; G 397
U 469 ; WX 602 ; N uni01D5 ; G 398
U 470 ; WX 602 ; N uni01D6 ; G 399
U 471 ; WX 602 ; N uni01D7 ; G 400
U 472 ; WX 602 ; N uni01D8 ; G 401
U 473 ; WX 602 ; N uni01D9 ; G 402
U 474 ; WX 602 ; N uni01DA ; G 403
U 475 ; WX 602 ; N uni01DB ; G 404
U 476 ; WX 602 ; N uni01DC ; G 405
U 477 ; WX 602 ; N uni01DD ; G 406
U 479 ; WX 602 ; N uni01DF ; G 407
U 480 ; WX 602 ; N uni01E0 ; G 408
U 481 ; WX 602 ; N uni01E1 ; G 409
U 482 ; WX 602 ; N uni01E2 ; G 410
U 483 ; WX 602 ; N uni01E3 ; G 411
U 486 ; WX 602 ; N Gcaron ; G 412
U 487 ; WX 602 ; N gcaron ; G 413
U 488 ; WX 602 ; N uni01E8 ; G 414
U 489 ; WX 602 ; N uni01E9 ; G 415
U 490 ; WX 602 ; N uni01EA ; G 416
U 491 ; WX 602 ; N uni01EB ; G 417
U 492 ; WX 602 ; N uni01EC ; G 418
U 493 ; WX 602 ; N uni01ED ; G 419
U 494 ; WX 602 ; N uni01EE ; G 420
U 495 ; WX 602 ; N uni01EF ; G 421
U 500 ; WX 602 ; N uni01F4 ; G 422
U 501 ; WX 602 ; N uni01F5 ; G 423
U 502 ; WX 602 ; N uni01F6 ; G 424
U 504 ; WX 602 ; N uni01F8 ; G 425
U 505 ; WX 602 ; N uni01F9 ; G 426
U 508 ; WX 602 ; N AEacute ; G 427
U 509 ; WX 602 ; N aeacute ; G 428
U 510 ; WX 602 ; N Oslashacute ; G 429
U 511 ; WX 602 ; N oslashacute ; G 430
U 512 ; WX 602 ; N uni0200 ; G 431
U 513 ; WX 602 ; N uni0201 ; G 432
U 514 ; WX 602 ; N uni0202 ; G 433
U 515 ; WX 602 ; N uni0203 ; G 434
U 516 ; WX 602 ; N uni0204 ; G 435
U 517 ; WX 602 ; N uni0205 ; G 436
U 518 ; WX 602 ; N uni0206 ; G 437
U 519 ; WX 602 ; N uni0207 ; G 438
U 520 ; WX 602 ; N uni0208 ; G 439
U 521 ; WX 602 ; N uni0209 ; G 440
U 522 ; WX 602 ; N uni020A ; G 441
U 523 ; WX 602 ; N uni020B ; G 442
U 524 ; WX 602 ; N uni020C ; G 443
U 525 ; WX 602 ; N uni020D ; G 444
U 526 ; WX 602 ; N uni020E ; G 445
U 527 ; WX 602 ; N uni020F ; G 446
U 528 ; WX 602 ; N uni0210 ; G 447
U 529 ; WX 602 ; N uni0211 ; G 448
U 530 ; WX 602 ; N uni0212 ; G 449
U 531 ; WX 602 ; N uni0213 ; G 450
U 532 ; WX 602 ; N uni0214 ; G 451
U 533 ; WX 602 ; N uni0215 ; G 452
U 534 ; WX 602 ; N uni0216 ; G 453
U 535 ; WX 602 ; N uni0217 ; G 454
U 536 ; WX 602 ; N Scommaaccent ; G 455
U 537 ; WX 602 ; N scommaaccent ; G 456
U 538 ; WX 602 ; N uni021A ; G 457
U 539 ; WX 602 ; N uni021B ; G 458
U 540 ; WX 602 ; N uni021C ; G 459
U 541 ; WX 602 ; N uni021D ; G 460
U 542 ; WX 602 ; N uni021E ; G 461
U 543 ; WX 602 ; N uni021F ; G 462
U 545 ; WX 602 ; N uni0221 ; G 463
U 548 ; WX 602 ; N uni0224 ; G 464
U 549 ; WX 602 ; N uni0225 ; G 465
U 550 ; WX 602 ; N uni0226 ; G 466
U 551 ; WX 602 ; N uni0227 ; G 467
U 552 ; WX 602 ; N uni0228 ; G 468
U 553 ; WX 602 ; N uni0229 ; G 469
U 554 ; WX 602 ; N uni022A ; G 470
U 555 ; WX 602 ; N uni022B ; G 471
U 556 ; WX 602 ; N uni022C ; G 472
U 557 ; WX 602 ; N uni022D ; G 473
U 558 ; WX 602 ; N uni022E ; G 474
U 559 ; WX 602 ; N uni022F ; G 475
U 560 ; WX 602 ; N uni0230 ; G 476
U 561 ; WX 602 ; N uni0231 ; G 477
U 562 ; WX 602 ; N uni0232 ; G 478
U 563 ; WX 602 ; N uni0233 ; G 479
U 564 ; WX 602 ; N uni0234 ; G 480
U 565 ; WX 602 ; N uni0235 ; G 481
U 566 ; WX 602 ; N uni0236 ; G 482
U 567 ; WX 602 ; N dotlessj ; G 483
U 568 ; WX 602 ; N uni0238 ; G 484
U 569 ; WX 602 ; N uni0239 ; G 485
U 570 ; WX 602 ; N uni023A ; G 486
U 571 ; WX 602 ; N uni023B ; G 487
U 572 ; WX 602 ; N uni023C ; G 488
U 573 ; WX 602 ; N uni023D ; G 489
U 574 ; WX 602 ; N uni023E ; G 490
U 575 ; WX 602 ; N uni023F ; G 491
U 576 ; WX 602 ; N uni0240 ; G 492
U 577 ; WX 602 ; N uni0241 ; G 493
U 579 ; WX 602 ; N uni0243 ; G 494
U 580 ; WX 602 ; N uni0244 ; G 495
U 581 ; WX 602 ; N uni0245 ; G 496
U 588 ; WX 602 ; N uni024C ; G 497
U 589 ; WX 602 ; N uni024D ; G 498
U 592 ; WX 602 ; N uni0250 ; G 499
U 593 ; WX 602 ; N uni0251 ; G 500
U 594 ; WX 602 ; N uni0252 ; G 501
U 595 ; WX 602 ; N uni0253 ; G 502
U 596 ; WX 602 ; N uni0254 ; G 503
U 597 ; WX 602 ; N uni0255 ; G 504
U 598 ; WX 602 ; N uni0256 ; G 505
U 599 ; WX 602 ; N uni0257 ; G 506
U 600 ; WX 602 ; N uni0258 ; G 507
U 601 ; WX 602 ; N uni0259 ; G 508
U 602 ; WX 602 ; N uni025A ; G 509
U 603 ; WX 602 ; N uni025B ; G 510
U 604 ; WX 602 ; N uni025C ; G 511
U 605 ; WX 602 ; N uni025D ; G 512
U 606 ; WX 602 ; N uni025E ; G 513
U 607 ; WX 602 ; N uni025F ; G 514
U 608 ; WX 602 ; N uni0260 ; G 515
U 609 ; WX 602 ; N uni0261 ; G 516
U 610 ; WX 602 ; N uni0262 ; G 517
U 611 ; WX 602 ; N uni0263 ; G 518
U 612 ; WX 602 ; N uni0264 ; G 519
U 613 ; WX 602 ; N uni0265 ; G 520
U 614 ; WX 602 ; N uni0266 ; G 521
U 615 ; WX 602 ; N uni0267 ; G 522
U 616 ; WX 602 ; N uni0268 ; G 523
U 617 ; WX 602 ; N uni0269 ; G 524
U 618 ; WX 602 ; N uni026A ; G 525
U 619 ; WX 602 ; N uni026B ; G 526
U 620 ; WX 602 ; N uni026C ; G 527
U 621 ; WX 602 ; N uni026D ; G 528
U 622 ; WX 602 ; N uni026E ; G 529
U 623 ; WX 602 ; N uni026F ; G 530
U 624 ; WX 602 ; N uni0270 ; G 531
U 625 ; WX 602 ; N uni0271 ; G 532
U 626 ; WX 602 ; N uni0272 ; G 533
U 627 ; WX 602 ; N uni0273 ; G 534
U 628 ; WX 602 ; N uni0274 ; G 535
U 629 ; WX 602 ; N uni0275 ; G 536
U 630 ; WX 602 ; N uni0276 ; G 537
U 631 ; WX 602 ; N uni0277 ; G 538
U 632 ; WX 602 ; N uni0278 ; G 539
U 633 ; WX 602 ; N uni0279 ; G 540
U 634 ; WX 602 ; N uni027A ; G 541
U 635 ; WX 602 ; N uni027B ; G 542
U 636 ; WX 602 ; N uni027C ; G 543
U 637 ; WX 602 ; N uni027D ; G 544
U 638 ; WX 602 ; N uni027E ; G 545
U 639 ; WX 602 ; N uni027F ; G 546
U 640 ; WX 602 ; N uni0280 ; G 547
U 641 ; WX 602 ; N uni0281 ; G 548
U 642 ; WX 602 ; N uni0282 ; G 549
U 643 ; WX 602 ; N uni0283 ; G 550
U 644 ; WX 602 ; N uni0284 ; G 551
U 645 ; WX 602 ; N uni0285 ; G 552
U 646 ; WX 602 ; N uni0286 ; G 553
U 647 ; WX 602 ; N uni0287 ; G 554
U 648 ; WX 602 ; N uni0288 ; G 555
U 649 ; WX 602 ; N uni0289 ; G 556
U 650 ; WX 602 ; N uni028A ; G 557
U 651 ; WX 602 ; N uni028B ; G 558
U 652 ; WX 602 ; N uni028C ; G 559
U 653 ; WX 602 ; N uni028D ; G 560
U 654 ; WX 602 ; N uni028E ; G 561
U 655 ; WX 602 ; N uni028F ; G 562
U 656 ; WX 602 ; N uni0290 ; G 563
U 657 ; WX 602 ; N uni0291 ; G 564
U 658 ; WX 602 ; N uni0292 ; G 565
U 659 ; WX 602 ; N uni0293 ; G 566
U 660 ; WX 602 ; N uni0294 ; G 567
U 661 ; WX 602 ; N uni0295 ; G 568
U 662 ; WX 602 ; N uni0296 ; G 569
U 663 ; WX 602 ; N uni0297 ; G 570
U 664 ; WX 602 ; N uni0298 ; G 571
U 665 ; WX 602 ; N uni0299 ; G 572
U 666 ; WX 602 ; N uni029A ; G 573
U 667 ; WX 602 ; N uni029B ; G 574
U 668 ; WX 602 ; N uni029C ; G 575
U 669 ; WX 602 ; N uni029D ; G 576
U 670 ; WX 602 ; N uni029E ; G 577
U 671 ; WX 602 ; N uni029F ; G 578
U 672 ; WX 602 ; N uni02A0 ; G 579
U 673 ; WX 602 ; N uni02A1 ; G 580
U 674 ; WX 602 ; N uni02A2 ; G 581
U 675 ; WX 602 ; N uni02A3 ; G 582
U 676 ; WX 602 ; N uni02A4 ; G 583
U 677 ; WX 602 ; N uni02A5 ; G 584
U 678 ; WX 602 ; N uni02A6 ; G 585
U 679 ; WX 602 ; N uni02A7 ; G 586
U 680 ; WX 602 ; N uni02A8 ; G 587
U 681 ; WX 602 ; N uni02A9 ; G 588
U 682 ; WX 602 ; N uni02AA ; G 589
U 683 ; WX 602 ; N uni02AB ; G 590
U 684 ; WX 602 ; N uni02AC ; G 591
U 685 ; WX 602 ; N uni02AD ; G 592
U 686 ; WX 602 ; N uni02AE ; G 593
U 687 ; WX 602 ; N uni02AF ; G 594
U 688 ; WX 602 ; N uni02B0 ; G 595
U 689 ; WX 602 ; N uni02B1 ; G 596
U 690 ; WX 602 ; N uni02B2 ; G 597
U 691 ; WX 602 ; N uni02B3 ; G 598
U 692 ; WX 602 ; N uni02B4 ; G 599
U 693 ; WX 602 ; N uni02B5 ; G 600
U 694 ; WX 602 ; N uni02B6 ; G 601
U 695 ; WX 602 ; N uni02B7 ; G 602
U 696 ; WX 602 ; N uni02B8 ; G 603
U 697 ; WX 602 ; N uni02B9 ; G 604
U 699 ; WX 602 ; N uni02BB ; G 605
U 700 ; WX 602 ; N uni02BC ; G 606
U 701 ; WX 602 ; N uni02BD ; G 607
U 702 ; WX 602 ; N uni02BE ; G 608
U 703 ; WX 602 ; N uni02BF ; G 609
U 704 ; WX 602 ; N uni02C0 ; G 610
U 705 ; WX 602 ; N uni02C1 ; G 611
U 710 ; WX 602 ; N circumflex ; G 612
U 711 ; WX 602 ; N caron ; G 613
U 712 ; WX 602 ; N uni02C8 ; G 614
U 713 ; WX 602 ; N uni02C9 ; G 615
U 716 ; WX 602 ; N uni02CC ; G 616
U 717 ; WX 602 ; N uni02CD ; G 617
U 718 ; WX 602 ; N uni02CE ; G 618
U 719 ; WX 602 ; N uni02CF ; G 619
U 720 ; WX 602 ; N uni02D0 ; G 620
U 721 ; WX 602 ; N uni02D1 ; G 621
U 722 ; WX 602 ; N uni02D2 ; G 622
U 723 ; WX 602 ; N uni02D3 ; G 623
U 726 ; WX 602 ; N uni02D6 ; G 624
U 727 ; WX 602 ; N uni02D7 ; G 625
U 728 ; WX 602 ; N breve ; G 626
U 729 ; WX 602 ; N dotaccent ; G 627
U 730 ; WX 602 ; N ring ; G 628
U 731 ; WX 602 ; N ogonek ; G 629
U 732 ; WX 602 ; N tilde ; G 630
U 733 ; WX 602 ; N hungarumlaut ; G 631
U 734 ; WX 602 ; N uni02DE ; G 632
U 736 ; WX 602 ; N uni02E0 ; G 633
U 737 ; WX 602 ; N uni02E1 ; G 634
U 738 ; WX 602 ; N uni02E2 ; G 635
U 739 ; WX 602 ; N uni02E3 ; G 636
U 740 ; WX 602 ; N uni02E4 ; G 637
U 741 ; WX 602 ; N uni02E5 ; G 638
U 742 ; WX 602 ; N uni02E6 ; G 639
U 743 ; WX 602 ; N uni02E7 ; G 640
U 744 ; WX 602 ; N uni02E8 ; G 641
U 745 ; WX 602 ; N uni02E9 ; G 642
U 750 ; WX 602 ; N uni02EE ; G 643
U 755 ; WX 602 ; N uni02F3 ; G 644
U 768 ; WX 602 ; N gravecomb ; G 645
U 769 ; WX 602 ; N acutecomb ; G 646
U 770 ; WX 602 ; N uni0302 ; G 647
U 771 ; WX 602 ; N tildecomb ; G 648
U 772 ; WX 602 ; N uni0304 ; G 649
U 773 ; WX 602 ; N uni0305 ; G 650
U 774 ; WX 602 ; N uni0306 ; G 651
U 775 ; WX 602 ; N uni0307 ; G 652
U 776 ; WX 602 ; N uni0308 ; G 653
U 777 ; WX 602 ; N hookabovecomb ; G 654
U 778 ; WX 602 ; N uni030A ; G 655
U 779 ; WX 602 ; N uni030B ; G 656
U 780 ; WX 602 ; N uni030C ; G 657
U 781 ; WX 602 ; N uni030D ; G 658
U 782 ; WX 602 ; N uni030E ; G 659
U 783 ; WX 602 ; N uni030F ; G 660
U 784 ; WX 602 ; N uni0310 ; G 661
U 785 ; WX 602 ; N uni0311 ; G 662
U 786 ; WX 602 ; N uni0312 ; G 663
U 787 ; WX 602 ; N uni0313 ; G 664
U 788 ; WX 602 ; N uni0314 ; G 665
U 789 ; WX 602 ; N uni0315 ; G 666
U 790 ; WX 602 ; N uni0316 ; G 667
U 791 ; WX 602 ; N uni0317 ; G 668
U 792 ; WX 602 ; N uni0318 ; G 669
U 793 ; WX 602 ; N uni0319 ; G 670
U 794 ; WX 602 ; N uni031A ; G 671
U 795 ; WX 602 ; N uni031B ; G 672
U 796 ; WX 602 ; N uni031C ; G 673
U 797 ; WX 602 ; N uni031D ; G 674
U 798 ; WX 602 ; N uni031E ; G 675
U 799 ; WX 602 ; N uni031F ; G 676
U 800 ; WX 602 ; N uni0320 ; G 677
U 801 ; WX 602 ; N uni0321 ; G 678
U 802 ; WX 602 ; N uni0322 ; G 679
U 803 ; WX 602 ; N dotbelowcomb ; G 680
U 804 ; WX 602 ; N uni0324 ; G 681
U 805 ; WX 602 ; N uni0325 ; G 682
U 806 ; WX 602 ; N uni0326 ; G 683
U 807 ; WX 602 ; N uni0327 ; G 684
U 808 ; WX 602 ; N uni0328 ; G 685
U 809 ; WX 602 ; N uni0329 ; G 686
U 810 ; WX 602 ; N uni032A ; G 687
U 811 ; WX 602 ; N uni032B ; G 688
U 812 ; WX 602 ; N uni032C ; G 689
U 813 ; WX 602 ; N uni032D ; G 690
U 814 ; WX 602 ; N uni032E ; G 691
U 815 ; WX 602 ; N uni032F ; G 692
U 816 ; WX 602 ; N uni0330 ; G 693
U 817 ; WX 602 ; N uni0331 ; G 694
U 818 ; WX 602 ; N uni0332 ; G 695
U 819 ; WX 602 ; N uni0333 ; G 696
U 820 ; WX 602 ; N uni0334 ; G 697
U 821 ; WX 602 ; N uni0335 ; G 698
U 822 ; WX 602 ; N uni0336 ; G 699
U 823 ; WX 602 ; N uni0337 ; G 700
U 824 ; WX 602 ; N uni0338 ; G 701
U 825 ; WX 602 ; N uni0339 ; G 702
U 826 ; WX 602 ; N uni033A ; G 703
U 827 ; WX 602 ; N uni033B ; G 704
U 828 ; WX 602 ; N uni033C ; G 705
U 829 ; WX 602 ; N uni033D ; G 706
U 830 ; WX 602 ; N uni033E ; G 707
U 831 ; WX 602 ; N uni033F ; G 708
U 835 ; WX 602 ; N uni0343 ; G 709
U 856 ; WX 602 ; N uni0358 ; G 710
U 865 ; WX 602 ; N uni0361 ; G 711
U 884 ; WX 602 ; N uni0374 ; G 712
U 885 ; WX 602 ; N uni0375 ; G 713
U 886 ; WX 602 ; N uni0376 ; G 714
U 887 ; WX 602 ; N uni0377 ; G 715
U 890 ; WX 602 ; N uni037A ; G 716
U 891 ; WX 602 ; N uni037B ; G 717
U 892 ; WX 602 ; N uni037C ; G 718
U 893 ; WX 602 ; N uni037D ; G 719
U 894 ; WX 602 ; N uni037E ; G 720
U 895 ; WX 602 ; N uni037F ; G 721
U 900 ; WX 602 ; N tonos ; G 722
U 901 ; WX 602 ; N dieresistonos ; G 723
U 902 ; WX 602 ; N Alphatonos ; G 724
U 903 ; WX 602 ; N anoteleia ; G 725
U 904 ; WX 602 ; N Epsilontonos ; G 726
U 905 ; WX 602 ; N Etatonos ; G 727
U 906 ; WX 602 ; N Iotatonos ; G 728
U 908 ; WX 602 ; N Omicrontonos ; G 729
U 910 ; WX 602 ; N Upsilontonos ; G 730
U 911 ; WX 602 ; N Omegatonos ; G 731
U 912 ; WX 602 ; N iotadieresistonos ; G 732
U 913 ; WX 602 ; N Alpha ; G 733
U 914 ; WX 602 ; N Beta ; G 734
U 915 ; WX 602 ; N Gamma ; G 735
U 916 ; WX 602 ; N uni0394 ; G 736
U 917 ; WX 602 ; N Epsilon ; G 737
U 918 ; WX 602 ; N Zeta ; G 738
U 919 ; WX 602 ; N Eta ; G 739
U 920 ; WX 602 ; N Theta ; G 740
U 921 ; WX 602 ; N Iota ; G 741
U 922 ; WX 602 ; N Kappa ; G 742
U 923 ; WX 602 ; N Lambda ; G 743
U 924 ; WX 602 ; N Mu ; G 744
U 925 ; WX 602 ; N Nu ; G 745
U 926 ; WX 602 ; N Xi ; G 746
U 927 ; WX 602 ; N Omicron ; G 747
U 928 ; WX 602 ; N Pi ; G 748
U 929 ; WX 602 ; N Rho ; G 749
U 931 ; WX 602 ; N Sigma ; G 750
U 932 ; WX 602 ; N Tau ; G 751
U 933 ; WX 602 ; N Upsilon ; G 752
U 934 ; WX 602 ; N Phi ; G 753
U 935 ; WX 602 ; N Chi ; G 754
U 936 ; WX 602 ; N Psi ; G 755
U 937 ; WX 602 ; N Omega ; G 756
U 938 ; WX 602 ; N Iotadieresis ; G 757
U 939 ; WX 602 ; N Upsilondieresis ; G 758
U 940 ; WX 602 ; N alphatonos ; G 759
U 941 ; WX 602 ; N epsilontonos ; G 760
U 942 ; WX 602 ; N etatonos ; G 761
U 943 ; WX 602 ; N iotatonos ; G 762
U 944 ; WX 602 ; N upsilondieresistonos ; G 763
U 945 ; WX 602 ; N alpha ; G 764
U 946 ; WX 602 ; N beta ; G 765
U 947 ; WX 602 ; N gamma ; G 766
U 948 ; WX 602 ; N delta ; G 767
U 949 ; WX 602 ; N epsilon ; G 768
U 950 ; WX 602 ; N zeta ; G 769
U 951 ; WX 602 ; N eta ; G 770
U 952 ; WX 602 ; N theta ; G 771
U 953 ; WX 602 ; N iota ; G 772
U 954 ; WX 602 ; N kappa ; G 773
U 955 ; WX 602 ; N lambda ; G 774
U 956 ; WX 602 ; N uni03BC ; G 775
U 957 ; WX 602 ; N nu ; G 776
U 958 ; WX 602 ; N xi ; G 777
U 959 ; WX 602 ; N omicron ; G 778
U 960 ; WX 602 ; N pi ; G 779
U 961 ; WX 602 ; N rho ; G 780
U 962 ; WX 602 ; N sigma1 ; G 781
U 963 ; WX 602 ; N sigma ; G 782
U 964 ; WX 602 ; N tau ; G 783
U 965 ; WX 602 ; N upsilon ; G 784
U 966 ; WX 602 ; N phi ; G 785
U 967 ; WX 602 ; N chi ; G 786
U 968 ; WX 602 ; N psi ; G 787
U 969 ; WX 602 ; N omega ; G 788
U 970 ; WX 602 ; N iotadieresis ; G 789
U 971 ; WX 602 ; N upsilondieresis ; G 790
U 972 ; WX 602 ; N omicrontonos ; G 791
U 973 ; WX 602 ; N upsilontonos ; G 792
U 974 ; WX 602 ; N omegatonos ; G 793
U 976 ; WX 602 ; N uni03D0 ; G 794
U 977 ; WX 602 ; N theta1 ; G 795
U 978 ; WX 602 ; N Upsilon1 ; G 796
U 979 ; WX 602 ; N uni03D3 ; G 797
U 980 ; WX 602 ; N uni03D4 ; G 798
U 981 ; WX 602 ; N phi1 ; G 799
U 982 ; WX 602 ; N omega1 ; G 800
U 983 ; WX 602 ; N uni03D7 ; G 801
U 984 ; WX 602 ; N uni03D8 ; G 802
U 985 ; WX 602 ; N uni03D9 ; G 803
U 986 ; WX 602 ; N uni03DA ; G 804
U 987 ; WX 602 ; N uni03DB ; G 805
U 988 ; WX 602 ; N uni03DC ; G 806
U 989 ; WX 602 ; N uni03DD ; G 807
U 990 ; WX 602 ; N uni03DE ; G 808
U 991 ; WX 602 ; N uni03DF ; G 809
U 992 ; WX 602 ; N uni03E0 ; G 810
U 993 ; WX 602 ; N uni03E1 ; G 811
U 1008 ; WX 602 ; N uni03F0 ; G 812
U 1009 ; WX 602 ; N uni03F1 ; G 813
U 1010 ; WX 602 ; N uni03F2 ; G 814
U 1011 ; WX 602 ; N uni03F3 ; G 815
U 1012 ; WX 602 ; N uni03F4 ; G 816
U 1013 ; WX 602 ; N uni03F5 ; G 817
U 1014 ; WX 602 ; N uni03F6 ; G 818
U 1015 ; WX 602 ; N uni03F7 ; G 819
U 1016 ; WX 602 ; N uni03F8 ; G 820
U 1017 ; WX 602 ; N uni03F9 ; G 821
U 1018 ; WX 602 ; N uni03FA ; G 822
U 1019 ; WX 602 ; N uni03FB ; G 823
U 1020 ; WX 602 ; N uni03FC ; G 824
U 1021 ; WX 602 ; N uni03FD ; G 825
U 1022 ; WX 602 ; N uni03FE ; G 826
U 1023 ; WX 602 ; N uni03FF ; G 827
U 1024 ; WX 602 ; N uni0400 ; G 828
U 1025 ; WX 602 ; N uni0401 ; G 829
U 1026 ; WX 602 ; N uni0402 ; G 830
U 1027 ; WX 602 ; N uni0403 ; G 831
U 1028 ; WX 602 ; N uni0404 ; G 832
U 1029 ; WX 602 ; N uni0405 ; G 833
U 1030 ; WX 602 ; N uni0406 ; G 834
U 1031 ; WX 602 ; N uni0407 ; G 835
U 1032 ; WX 602 ; N uni0408 ; G 836
U 1033 ; WX 602 ; N uni0409 ; G 837
U 1034 ; WX 602 ; N uni040A ; G 838
U 1035 ; WX 602 ; N uni040B ; G 839
U 1036 ; WX 602 ; N uni040C ; G 840
U 1037 ; WX 602 ; N uni040D ; G 841
U 1038 ; WX 602 ; N uni040E ; G 842
U 1039 ; WX 602 ; N uni040F ; G 843
U 1040 ; WX 602 ; N uni0410 ; G 844
U 1041 ; WX 602 ; N uni0411 ; G 845
U 1042 ; WX 602 ; N uni0412 ; G 846
U 1043 ; WX 602 ; N uni0413 ; G 847
U 1044 ; WX 602 ; N uni0414 ; G 848
U 1045 ; WX 602 ; N uni0415 ; G 849
U 1046 ; WX 602 ; N uni0416 ; G 850
U 1047 ; WX 602 ; N uni0417 ; G 851
U 1048 ; WX 602 ; N uni0418 ; G 852
U 1049 ; WX 602 ; N uni0419 ; G 853
U 1050 ; WX 602 ; N uni041A ; G 854
U 1051 ; WX 602 ; N uni041B ; G 855
U 1052 ; WX 602 ; N uni041C ; G 856
U 1053 ; WX 602 ; N uni041D ; G 857
U 1054 ; WX 602 ; N uni041E ; G 858
U 1055 ; WX 602 ; N uni041F ; G 859
U 1056 ; WX 602 ; N uni0420 ; G 860
U 1057 ; WX 602 ; N uni0421 ; G 861
U 1058 ; WX 602 ; N uni0422 ; G 862
U 1059 ; WX 602 ; N uni0423 ; G 863
U 1060 ; WX 602 ; N uni0424 ; G 864
U 1061 ; WX 602 ; N uni0425 ; G 865
U 1062 ; WX 602 ; N uni0426 ; G 866
U 1063 ; WX 602 ; N uni0427 ; G 867
U 1064 ; WX 602 ; N uni0428 ; G 868
U 1065 ; WX 602 ; N uni0429 ; G 869
U 1066 ; WX 602 ; N uni042A ; G 870
U 1067 ; WX 602 ; N uni042B ; G 871
U 1068 ; WX 602 ; N uni042C ; G 872
U 1069 ; WX 602 ; N uni042D ; G 873
U 1070 ; WX 602 ; N uni042E ; G 874
U 1071 ; WX 602 ; N uni042F ; G 875
U 1072 ; WX 602 ; N uni0430 ; G 876
U 1073 ; WX 602 ; N uni0431 ; G 877
U 1074 ; WX 602 ; N uni0432 ; G 878
U 1075 ; WX 602 ; N uni0433 ; G 879
U 1076 ; WX 602 ; N uni0434 ; G 880
U 1077 ; WX 602 ; N uni0435 ; G 881
U 1078 ; WX 602 ; N uni0436 ; G 882
U 1079 ; WX 602 ; N uni0437 ; G 883
U 1080 ; WX 602 ; N uni0438 ; G 884
U 1081 ; WX 602 ; N uni0439 ; G 885
U 1082 ; WX 602 ; N uni043A ; G 886
U 1083 ; WX 602 ; N uni043B ; G 887
U 1084 ; WX 602 ; N uni043C ; G 888
U 1085 ; WX 602 ; N uni043D ; G 889
U 1086 ; WX 602 ; N uni043E ; G 890
U 1087 ; WX 602 ; N uni043F ; G 891
U 1088 ; WX 602 ; N uni0440 ; G 892
U 1089 ; WX 602 ; N uni0441 ; G 893
U 1090 ; WX 602 ; N uni0442 ; G 894
U 1091 ; WX 602 ; N uni0443 ; G 895
U 1092 ; WX 602 ; N uni0444 ; G 896
U 1093 ; WX 602 ; N uni0445 ; G 897
U 1094 ; WX 602 ; N uni0446 ; G 898
U 1095 ; WX 602 ; N uni0447 ; G 899
U 1096 ; WX 602 ; N uni0448 ; G 900
U 1097 ; WX 602 ; N uni0449 ; G 901
U 1098 ; WX 602 ; N uni044A ; G 902
U 1099 ; WX 602 ; N uni044B ; G 903
U 1100 ; WX 602 ; N uni044C ; G 904
U 1101 ; WX 602 ; N uni044D ; G 905
U 1102 ; WX 602 ; N uni044E ; G 906
U 1103 ; WX 602 ; N uni044F ; G 907
U 1104 ; WX 602 ; N uni0450 ; G 908
U 1105 ; WX 602 ; N uni0451 ; G 909
U 1106 ; WX 602 ; N uni0452 ; G 910
U 1107 ; WX 602 ; N uni0453 ; G 911
U 1108 ; WX 602 ; N uni0454 ; G 912
U 1109 ; WX 602 ; N uni0455 ; G 913
U 1110 ; WX 602 ; N uni0456 ; G 914
U 1111 ; WX 602 ; N uni0457 ; G 915
U 1112 ; WX 602 ; N uni0458 ; G 916
U 1113 ; WX 602 ; N uni0459 ; G 917
U 1114 ; WX 602 ; N uni045A ; G 918
U 1115 ; WX 602 ; N uni045B ; G 919
U 1116 ; WX 602 ; N uni045C ; G 920
U 1117 ; WX 602 ; N uni045D ; G 921
U 1118 ; WX 602 ; N uni045E ; G 922
U 1119 ; WX 602 ; N uni045F ; G 923
U 1122 ; WX 602 ; N uni0462 ; G 924
U 1123 ; WX 602 ; N uni0463 ; G 925
U 1138 ; WX 602 ; N uni0472 ; G 926
U 1139 ; WX 602 ; N uni0473 ; G 927
U 1168 ; WX 602 ; N uni0490 ; G 928
U 1169 ; WX 602 ; N uni0491 ; G 929
U 1170 ; WX 602 ; N uni0492 ; G 930
U 1171 ; WX 602 ; N uni0493 ; G 931
U 1172 ; WX 602 ; N uni0494 ; G 932
U 1173 ; WX 602 ; N uni0495 ; G 933
U 1174 ; WX 602 ; N uni0496 ; G 934
U 1175 ; WX 602 ; N uni0497 ; G 935
U 1176 ; WX 602 ; N uni0498 ; G 936
U 1177 ; WX 602 ; N uni0499 ; G 937
U 1178 ; WX 602 ; N uni049A ; G 938
U 1179 ; WX 602 ; N uni049B ; G 939
U 1186 ; WX 602 ; N uni04A2 ; G 940
U 1187 ; WX 602 ; N uni04A3 ; G 941
U 1188 ; WX 602 ; N uni04A4 ; G 942
U 1189 ; WX 602 ; N uni04A5 ; G 943
U 1194 ; WX 602 ; N uni04AA ; G 944
U 1195 ; WX 602 ; N uni04AB ; G 945
U 1196 ; WX 602 ; N uni04AC ; G 946
U 1197 ; WX 602 ; N uni04AD ; G 947
U 1198 ; WX 602 ; N uni04AE ; G 948
U 1199 ; WX 602 ; N uni04AF ; G 949
U 1200 ; WX 602 ; N uni04B0 ; G 950
U 1201 ; WX 602 ; N uni04B1 ; G 951
U 1202 ; WX 602 ; N uni04B2 ; G 952
U 1203 ; WX 602 ; N uni04B3 ; G 953
U 1210 ; WX 602 ; N uni04BA ; G 954
U 1211 ; WX 602 ; N uni04BB ; G 955
U 1216 ; WX 602 ; N uni04C0 ; G 956
U 1217 ; WX 602 ; N uni04C1 ; G 957
U 1218 ; WX 602 ; N uni04C2 ; G 958
U 1219 ; WX 602 ; N uni04C3 ; G 959
U 1220 ; WX 602 ; N uni04C4 ; G 960
U 1223 ; WX 602 ; N uni04C7 ; G 961
U 1224 ; WX 602 ; N uni04C8 ; G 962
U 1227 ; WX 602 ; N uni04CB ; G 963
U 1228 ; WX 602 ; N uni04CC ; G 964
U 1231 ; WX 602 ; N uni04CF ; G 965
U 1232 ; WX 602 ; N uni04D0 ; G 966
U 1233 ; WX 602 ; N uni04D1 ; G 967
U 1234 ; WX 602 ; N uni04D2 ; G 968
U 1235 ; WX 602 ; N uni04D3 ; G 969
U 1236 ; WX 602 ; N uni04D4 ; G 970
U 1237 ; WX 602 ; N uni04D5 ; G 971
U 1238 ; WX 602 ; N uni04D6 ; G 972
U 1239 ; WX 602 ; N uni04D7 ; G 973
U 1240 ; WX 602 ; N uni04D8 ; G 974
U 1241 ; WX 602 ; N uni04D9 ; G 975
U 1242 ; WX 602 ; N uni04DA ; G 976
U 1243 ; WX 602 ; N uni04DB ; G 977
U 1244 ; WX 602 ; N uni04DC ; G 978
U 1245 ; WX 602 ; N uni04DD ; G 979
U 1246 ; WX 602 ; N uni04DE ; G 980
U 1247 ; WX 602 ; N uni04DF ; G 981
U 1248 ; WX 602 ; N uni04E0 ; G 982
U 1249 ; WX 602 ; N uni04E1 ; G 983
U 1250 ; WX 602 ; N uni04E2 ; G 984
U 1251 ; WX 602 ; N uni04E3 ; G 985
U 1252 ; WX 602 ; N uni04E4 ; G 986
U 1253 ; WX 602 ; N uni04E5 ; G 987
U 1254 ; WX 602 ; N uni04E6 ; G 988
U 1255 ; WX 602 ; N uni04E7 ; G 989
U 1256 ; WX 602 ; N uni04E8 ; G 990
U 1257 ; WX 602 ; N uni04E9 ; G 991
U 1258 ; WX 602 ; N uni04EA ; G 992
U 1259 ; WX 602 ; N uni04EB ; G 993
U 1260 ; WX 602 ; N uni04EC ; G 994
U 1261 ; WX 602 ; N uni04ED ; G 995
U 1262 ; WX 602 ; N uni04EE ; G 996
U 1263 ; WX 602 ; N uni04EF ; G 997
U 1264 ; WX 602 ; N uni04F0 ; G 998
U 1265 ; WX 602 ; N uni04F1 ; G 999
U 1266 ; WX 602 ; N uni04F2 ; G 1000
U 1267 ; WX 602 ; N uni04F3 ; G 1001
U 1268 ; WX 602 ; N uni04F4 ; G 1002
U 1269 ; WX 602 ; N uni04F5 ; G 1003
U 1270 ; WX 602 ; N uni04F6 ; G 1004
U 1271 ; WX 602 ; N uni04F7 ; G 1005
U 1272 ; WX 602 ; N uni04F8 ; G 1006
U 1273 ; WX 602 ; N uni04F9 ; G 1007
U 1296 ; WX 602 ; N uni0510 ; G 1008
U 1297 ; WX 602 ; N uni0511 ; G 1009
U 1306 ; WX 602 ; N uni051A ; G 1010
U 1307 ; WX 602 ; N uni051B ; G 1011
U 1308 ; WX 602 ; N uni051C ; G 1012
U 1309 ; WX 602 ; N uni051D ; G 1013
U 1329 ; WX 602 ; N uni0531 ; G 1014
U 1330 ; WX 602 ; N uni0532 ; G 1015
U 1331 ; WX 602 ; N uni0533 ; G 1016
U 1332 ; WX 602 ; N uni0534 ; G 1017
U 1333 ; WX 602 ; N uni0535 ; G 1018
U 1334 ; WX 602 ; N uni0536 ; G 1019
U 1335 ; WX 602 ; N uni0537 ; G 1020
U 1336 ; WX 602 ; N uni0538 ; G 1021
U 1337 ; WX 602 ; N uni0539 ; G 1022
U 1338 ; WX 602 ; N uni053A ; G 1023
U 1339 ; WX 602 ; N uni053B ; G 1024
U 1340 ; WX 602 ; N uni053C ; G 1025
U 1341 ; WX 602 ; N uni053D ; G 1026
U 1342 ; WX 602 ; N uni053E ; G 1027
U 1343 ; WX 602 ; N uni053F ; G 1028
U 1344 ; WX 602 ; N uni0540 ; G 1029
U 1345 ; WX 602 ; N uni0541 ; G 1030
U 1346 ; WX 602 ; N uni0542 ; G 1031
U 1347 ; WX 602 ; N uni0543 ; G 1032
U 1348 ; WX 602 ; N uni0544 ; G 1033
U 1349 ; WX 602 ; N uni0545 ; G 1034
U 1350 ; WX 602 ; N uni0546 ; G 1035
U 1351 ; WX 602 ; N uni0547 ; G 1036
U 1352 ; WX 602 ; N uni0548 ; G 1037
U 1353 ; WX 602 ; N uni0549 ; G 1038
U 1354 ; WX 602 ; N uni054A ; G 1039
U 1355 ; WX 602 ; N uni054B ; G 1040
U 1356 ; WX 602 ; N uni054C ; G 1041
U 1357 ; WX 602 ; N uni054D ; G 1042
U 1358 ; WX 602 ; N uni054E ; G 1043
U 1359 ; WX 602 ; N uni054F ; G 1044
U 1360 ; WX 602 ; N uni0550 ; G 1045
U 1361 ; WX 602 ; N uni0551 ; G 1046
U 1362 ; WX 602 ; N uni0552 ; G 1047
U 1363 ; WX 602 ; N uni0553 ; G 1048
U 1364 ; WX 602 ; N uni0554 ; G 1049
U 1365 ; WX 602 ; N uni0555 ; G 1050
U 1366 ; WX 602 ; N uni0556 ; G 1051
U 1369 ; WX 602 ; N uni0559 ; G 1052
U 1370 ; WX 602 ; N uni055A ; G 1053
U 1371 ; WX 602 ; N uni055B ; G 1054
U 1372 ; WX 602 ; N uni055C ; G 1055
U 1373 ; WX 602 ; N uni055D ; G 1056
U 1374 ; WX 602 ; N uni055E ; G 1057
U 1375 ; WX 602 ; N uni055F ; G 1058
U 1377 ; WX 602 ; N uni0561 ; G 1059
U 1378 ; WX 602 ; N uni0562 ; G 1060
U 1379 ; WX 602 ; N uni0563 ; G 1061
U 1380 ; WX 602 ; N uni0564 ; G 1062
U 1381 ; WX 602 ; N uni0565 ; G 1063
U 1382 ; WX 602 ; N uni0566 ; G 1064
U 1383 ; WX 602 ; N uni0567 ; G 1065
U 1384 ; WX 602 ; N uni0568 ; G 1066
U 1385 ; WX 602 ; N uni0569 ; G 1067
U 1386 ; WX 602 ; N uni056A ; G 1068
U 1387 ; WX 602 ; N uni056B ; G 1069
U 1388 ; WX 602 ; N uni056C ; G 1070
U 1389 ; WX 602 ; N uni056D ; G 1071
U 1390 ; WX 602 ; N uni056E ; G 1072
U 1391 ; WX 602 ; N uni056F ; G 1073
U 1392 ; WX 602 ; N uni0570 ; G 1074
U 1393 ; WX 602 ; N uni0571 ; G 1075
U 1394 ; WX 602 ; N uni0572 ; G 1076
U 1395 ; WX 602 ; N uni0573 ; G 1077
U 1396 ; WX 602 ; N uni0574 ; G 1078
U 1397 ; WX 602 ; N uni0575 ; G 1079
U 1398 ; WX 602 ; N uni0576 ; G 1080
U 1399 ; WX 602 ; N uni0577 ; G 1081
U 1400 ; WX 602 ; N uni0578 ; G 1082
U 1401 ; WX 602 ; N uni0579 ; G 1083
U 1402 ; WX 602 ; N uni057A ; G 1084
U 1403 ; WX 602 ; N uni057B ; G 1085
U 1404 ; WX 602 ; N uni057C ; G 1086
U 1405 ; WX 602 ; N uni057D ; G 1087
U 1406 ; WX 602 ; N uni057E ; G 1088
U 1407 ; WX 602 ; N uni057F ; G 1089
U 1408 ; WX 602 ; N uni0580 ; G 1090
U 1409 ; WX 602 ; N uni0581 ; G 1091
U 1410 ; WX 602 ; N uni0582 ; G 1092
U 1411 ; WX 602 ; N uni0583 ; G 1093
U 1412 ; WX 602 ; N uni0584 ; G 1094
U 1413 ; WX 602 ; N uni0585 ; G 1095
U 1414 ; WX 602 ; N uni0586 ; G 1096
U 1415 ; WX 602 ; N uni0587 ; G 1097
U 1417 ; WX 602 ; N uni0589 ; G 1098
U 1418 ; WX 602 ; N uni058A ; G 1099
U 3647 ; WX 602 ; N uni0E3F ; G 1100
U 3713 ; WX 602 ; N uni0E81 ; G 1101
U 3714 ; WX 602 ; N uni0E82 ; G 1102
U 3716 ; WX 602 ; N uni0E84 ; G 1103
U 3719 ; WX 602 ; N uni0E87 ; G 1104
U 3720 ; WX 602 ; N uni0E88 ; G 1105
U 3722 ; WX 602 ; N uni0E8A ; G 1106
U 3725 ; WX 602 ; N uni0E8D ; G 1107
U 3732 ; WX 602 ; N uni0E94 ; G 1108
U 3733 ; WX 602 ; N uni0E95 ; G 1109
U 3734 ; WX 602 ; N uni0E96 ; G 1110
U 3735 ; WX 602 ; N uni0E97 ; G 1111
U 3737 ; WX 602 ; N uni0E99 ; G 1112
U 3738 ; WX 602 ; N uni0E9A ; G 1113
U 3739 ; WX 602 ; N uni0E9B ; G 1114
U 3740 ; WX 602 ; N uni0E9C ; G 1115
U 3741 ; WX 602 ; N uni0E9D ; G 1116
U 3742 ; WX 602 ; N uni0E9E ; G 1117
U 3743 ; WX 602 ; N uni0E9F ; G 1118
U 3745 ; WX 602 ; N uni0EA1 ; G 1119
U 3746 ; WX 602 ; N uni0EA2 ; G 1120
U 3747 ; WX 602 ; N uni0EA3 ; G 1121
U 3749 ; WX 602 ; N uni0EA5 ; G 1122
U 3751 ; WX 602 ; N uni0EA7 ; G 1123
U 3754 ; WX 602 ; N uni0EAA ; G 1124
U 3755 ; WX 602 ; N uni0EAB ; G 1125
U 3757 ; WX 602 ; N uni0EAD ; G 1126
U 3758 ; WX 602 ; N uni0EAE ; G 1127
U 3759 ; WX 602 ; N uni0EAF ; G 1128
U 3760 ; WX 602 ; N uni0EB0 ; G 1129
U 3761 ; WX 602 ; N uni0EB1 ; G 1130
U 3762 ; WX 602 ; N uni0EB2 ; G 1131
U 3763 ; WX 602 ; N uni0EB3 ; G 1132
U 3764 ; WX 602 ; N uni0EB4 ; G 1133
U 3765 ; WX 602 ; N uni0EB5 ; G 1134
U 3766 ; WX 602 ; N uni0EB6 ; G 1135
U 3767 ; WX 602 ; N uni0EB7 ; G 1136
U 3768 ; WX 602 ; N uni0EB8 ; G 1137
U 3769 ; WX 602 ; N uni0EB9 ; G 1138
U 3771 ; WX 602 ; N uni0EBB ; G 1139
U 3772 ; WX 602 ; N uni0EBC ; G 1140
U 3784 ; WX 602 ; N uni0EC8 ; G 1141
U 3785 ; WX 602 ; N uni0EC9 ; G 1142
U 3786 ; WX 602 ; N uni0ECA ; G 1143
U 3787 ; WX 602 ; N uni0ECB ; G 1144
U 3788 ; WX 602 ; N uni0ECC ; G 1145
U 3789 ; WX 602 ; N uni0ECD ; G 1146
U 4304 ; WX 602 ; N uni10D0 ; G 1147
U 4305 ; WX 602 ; N uni10D1 ; G 1148
U 4306 ; WX 602 ; N uni10D2 ; G 1149
U 4307 ; WX 602 ; N uni10D3 ; G 1150
U 4308 ; WX 602 ; N uni10D4 ; G 1151
U 4309 ; WX 602 ; N uni10D5 ; G 1152
U 4310 ; WX 602 ; N uni10D6 ; G 1153
U 4311 ; WX 602 ; N uni10D7 ; G 1154
U 4312 ; WX 602 ; N uni10D8 ; G 1155
U 4313 ; WX 602 ; N uni10D9 ; G 1156
U 4314 ; WX 602 ; N uni10DA ; G 1157
U 4315 ; WX 602 ; N uni10DB ; G 1158
U 4316 ; WX 602 ; N uni10DC ; G 1159
U 4317 ; WX 602 ; N uni10DD ; G 1160
U 4318 ; WX 602 ; N uni10DE ; G 1161
U 4319 ; WX 602 ; N uni10DF ; G 1162
U 4320 ; WX 602 ; N uni10E0 ; G 1163
U 4321 ; WX 602 ; N uni10E1 ; G 1164
U 4322 ; WX 602 ; N uni10E2 ; G 1165
U 4323 ; WX 602 ; N uni10E3 ; G 1166
U 4324 ; WX 602 ; N uni10E4 ; G 1167
U 4325 ; WX 602 ; N uni10E5 ; G 1168
U 4326 ; WX 602 ; N uni10E6 ; G 1169
U 4327 ; WX 602 ; N uni10E7 ; G 1170
U 4328 ; WX 602 ; N uni10E8 ; G 1171
U 4329 ; WX 602 ; N uni10E9 ; G 1172
U 4330 ; WX 602 ; N uni10EA ; G 1173
U 4331 ; WX 602 ; N uni10EB ; G 1174
U 4332 ; WX 602 ; N uni10EC ; G 1175
U 4333 ; WX 602 ; N uni10ED ; G 1176
U 4334 ; WX 602 ; N uni10EE ; G 1177
U 4335 ; WX 602 ; N uni10EF ; G 1178
U 4336 ; WX 602 ; N uni10F0 ; G 1179
U 4337 ; WX 602 ; N uni10F1 ; G 1180
U 4338 ; WX 602 ; N uni10F2 ; G 1181
U 4339 ; WX 602 ; N uni10F3 ; G 1182
U 4340 ; WX 602 ; N uni10F4 ; G 1183
U 4341 ; WX 602 ; N uni10F5 ; G 1184
U 4342 ; WX 602 ; N uni10F6 ; G 1185
U 4343 ; WX 602 ; N uni10F7 ; G 1186
U 4344 ; WX 602 ; N uni10F8 ; G 1187
U 4345 ; WX 602 ; N uni10F9 ; G 1188
U 4346 ; WX 602 ; N uni10FA ; G 1189
U 4347 ; WX 602 ; N uni10FB ; G 1190
U 4348 ; WX 602 ; N uni10FC ; G 1191
U 7426 ; WX 602 ; N uni1D02 ; G 1192
U 7432 ; WX 602 ; N uni1D08 ; G 1193
U 7433 ; WX 602 ; N uni1D09 ; G 1194
U 7444 ; WX 602 ; N uni1D14 ; G 1195
U 7446 ; WX 602 ; N uni1D16 ; G 1196
U 7447 ; WX 602 ; N uni1D17 ; G 1197
U 7453 ; WX 602 ; N uni1D1D ; G 1198
U 7454 ; WX 602 ; N uni1D1E ; G 1199
U 7455 ; WX 602 ; N uni1D1F ; G 1200
U 7468 ; WX 602 ; N uni1D2C ; G 1201
U 7469 ; WX 602 ; N uni1D2D ; G 1202
U 7470 ; WX 602 ; N uni1D2E ; G 1203
U 7472 ; WX 602 ; N uni1D30 ; G 1204
U 7473 ; WX 602 ; N uni1D31 ; G 1205
U 7474 ; WX 602 ; N uni1D32 ; G 1206
U 7475 ; WX 602 ; N uni1D33 ; G 1207
U 7476 ; WX 602 ; N uni1D34 ; G 1208
U 7477 ; WX 602 ; N uni1D35 ; G 1209
U 7478 ; WX 602 ; N uni1D36 ; G 1210
U 7479 ; WX 602 ; N uni1D37 ; G 1211
U 7480 ; WX 602 ; N uni1D38 ; G 1212
U 7481 ; WX 602 ; N uni1D39 ; G 1213
U 7482 ; WX 602 ; N uni1D3A ; G 1214
U 7483 ; WX 602 ; N uni1D3B ; G 1215
U 7484 ; WX 602 ; N uni1D3C ; G 1216
U 7485 ; WX 602 ; N uni1D3D ; G 1217
U 7486 ; WX 602 ; N uni1D3E ; G 1218
U 7487 ; WX 602 ; N uni1D3F ; G 1219
U 7488 ; WX 602 ; N uni1D40 ; G 1220
U 7489 ; WX 602 ; N uni1D41 ; G 1221
U 7490 ; WX 602 ; N uni1D42 ; G 1222
U 7491 ; WX 602 ; N uni1D43 ; G 1223
U 7492 ; WX 602 ; N uni1D44 ; G 1224
U 7493 ; WX 602 ; N uni1D45 ; G 1225
U 7494 ; WX 602 ; N uni1D46 ; G 1226
U 7495 ; WX 602 ; N uni1D47 ; G 1227
U 7496 ; WX 602 ; N uni1D48 ; G 1228
U 7497 ; WX 602 ; N uni1D49 ; G 1229
U 7498 ; WX 602 ; N uni1D4A ; G 1230
U 7499 ; WX 602 ; N uni1D4B ; G 1231
U 7500 ; WX 602 ; N uni1D4C ; G 1232
U 7501 ; WX 602 ; N uni1D4D ; G 1233
U 7502 ; WX 602 ; N uni1D4E ; G 1234
U 7503 ; WX 602 ; N uni1D4F ; G 1235
U 7504 ; WX 602 ; N uni1D50 ; G 1236
U 7505 ; WX 602 ; N uni1D51 ; G 1237
U 7506 ; WX 602 ; N uni1D52 ; G 1238
U 7507 ; WX 602 ; N uni1D53 ; G 1239
U 7508 ; WX 602 ; N uni1D54 ; G 1240
U 7509 ; WX 602 ; N uni1D55 ; G 1241
U 7510 ; WX 602 ; N uni1D56 ; G 1242
U 7511 ; WX 602 ; N uni1D57 ; G 1243
U 7512 ; WX 602 ; N uni1D58 ; G 1244
U 7513 ; WX 602 ; N uni1D59 ; G 1245
U 7514 ; WX 602 ; N uni1D5A ; G 1246
U 7515 ; WX 602 ; N uni1D5B ; G 1247
U 7522 ; WX 602 ; N uni1D62 ; G 1248
U 7523 ; WX 602 ; N uni1D63 ; G 1249
U 7524 ; WX 602 ; N uni1D64 ; G 1250
U 7525 ; WX 602 ; N uni1D65 ; G 1251
U 7543 ; WX 602 ; N uni1D77 ; G 1252
U 7544 ; WX 602 ; N uni1D78 ; G 1253
U 7547 ; WX 602 ; N uni1D7B ; G 1254
U 7557 ; WX 602 ; N uni1D85 ; G 1255
U 7579 ; WX 602 ; N uni1D9B ; G 1256
U 7580 ; WX 602 ; N uni1D9C ; G 1257
U 7581 ; WX 602 ; N uni1D9D ; G 1258
U 7582 ; WX 602 ; N uni1D9E ; G 1259
U 7583 ; WX 602 ; N uni1D9F ; G 1260
U 7584 ; WX 602 ; N uni1DA0 ; G 1261
U 7585 ; WX 602 ; N uni1DA1 ; G 1262
U 7586 ; WX 602 ; N uni1DA2 ; G 1263
U 7587 ; WX 602 ; N uni1DA3 ; G 1264
U 7588 ; WX 602 ; N uni1DA4 ; G 1265
U 7589 ; WX 602 ; N uni1DA5 ; G 1266
U 7590 ; WX 602 ; N uni1DA6 ; G 1267
U 7591 ; WX 602 ; N uni1DA7 ; G 1268
U 7592 ; WX 602 ; N uni1DA8 ; G 1269
U 7593 ; WX 602 ; N uni1DA9 ; G 1270
U 7594 ; WX 602 ; N uni1DAA ; G 1271
U 7595 ; WX 602 ; N uni1DAB ; G 1272
U 7596 ; WX 602 ; N uni1DAC ; G 1273
U 7597 ; WX 602 ; N uni1DAD ; G 1274
U 7598 ; WX 602 ; N uni1DAE ; G 1275
U 7599 ; WX 602 ; N uni1DAF ; G 1276
U 7600 ; WX 602 ; N uni1DB0 ; G 1277
U 7601 ; WX 602 ; N uni1DB1 ; G 1278
U 7602 ; WX 602 ; N uni1DB2 ; G 1279
U 7603 ; WX 602 ; N uni1DB3 ; G 1280
U 7604 ; WX 602 ; N uni1DB4 ; G 1281
U 7605 ; WX 602 ; N uni1DB5 ; G 1282
U 7606 ; WX 602 ; N uni1DB6 ; G 1283
U 7607 ; WX 602 ; N uni1DB7 ; G 1284
U 7609 ; WX 602 ; N uni1DB9 ; G 1285
U 7610 ; WX 602 ; N uni1DBA ; G 1286
U 7611 ; WX 602 ; N uni1DBB ; G 1287
U 7612 ; WX 602 ; N uni1DBC ; G 1288
U 7613 ; WX 602 ; N uni1DBD ; G 1289
U 7614 ; WX 602 ; N uni1DBE ; G 1290
U 7615 ; WX 602 ; N uni1DBF ; G 1291
U 7680 ; WX 602 ; N uni1E00 ; G 1292
U 7681 ; WX 602 ; N uni1E01 ; G 1293
U 7682 ; WX 602 ; N uni1E02 ; G 1294
U 7683 ; WX 602 ; N uni1E03 ; G 1295
U 7684 ; WX 602 ; N uni1E04 ; G 1296
U 7685 ; WX 602 ; N uni1E05 ; G 1297
U 7686 ; WX 602 ; N uni1E06 ; G 1298
U 7687 ; WX 602 ; N uni1E07 ; G 1299
U 7688 ; WX 602 ; N uni1E08 ; G 1300
U 7689 ; WX 602 ; N uni1E09 ; G 1301
U 7690 ; WX 602 ; N uni1E0A ; G 1302
U 7691 ; WX 602 ; N uni1E0B ; G 1303
U 7692 ; WX 602 ; N uni1E0C ; G 1304
U 7693 ; WX 602 ; N uni1E0D ; G 1305
U 7694 ; WX 602 ; N uni1E0E ; G 1306
U 7695 ; WX 602 ; N uni1E0F ; G 1307
U 7696 ; WX 602 ; N uni1E10 ; G 1308
U 7697 ; WX 602 ; N uni1E11 ; G 1309
U 7698 ; WX 602 ; N uni1E12 ; G 1310
U 7699 ; WX 602 ; N uni1E13 ; G 1311
U 7704 ; WX 602 ; N uni1E18 ; G 1312
U 7705 ; WX 602 ; N uni1E19 ; G 1313
U 7706 ; WX 602 ; N uni1E1A ; G 1314
U 7707 ; WX 602 ; N uni1E1B ; G 1315
U 7708 ; WX 602 ; N uni1E1C ; G 1316
U 7709 ; WX 602 ; N uni1E1D ; G 1317
U 7710 ; WX 602 ; N uni1E1E ; G 1318
U 7711 ; WX 602 ; N uni1E1F ; G 1319
U 7712 ; WX 602 ; N uni1E20 ; G 1320
U 7713 ; WX 602 ; N uni1E21 ; G 1321
U 7714 ; WX 602 ; N uni1E22 ; G 1322
U 7715 ; WX 602 ; N uni1E23 ; G 1323
U 7716 ; WX 602 ; N uni1E24 ; G 1324
U 7717 ; WX 602 ; N uni1E25 ; G 1325
U 7718 ; WX 602 ; N uni1E26 ; G 1326
U 7719 ; WX 602 ; N uni1E27 ; G 1327
U 7720 ; WX 602 ; N uni1E28 ; G 1328
U 7721 ; WX 602 ; N uni1E29 ; G 1329
U 7722 ; WX 602 ; N uni1E2A ; G 1330
U 7723 ; WX 602 ; N uni1E2B ; G 1331
U 7724 ; WX 602 ; N uni1E2C ; G 1332
U 7725 ; WX 602 ; N uni1E2D ; G 1333
U 7728 ; WX 602 ; N uni1E30 ; G 1334
U 7729 ; WX 602 ; N uni1E31 ; G 1335
U 7730 ; WX 602 ; N uni1E32 ; G 1336
U 7731 ; WX 602 ; N uni1E33 ; G 1337
U 7732 ; WX 602 ; N uni1E34 ; G 1338
U 7733 ; WX 602 ; N uni1E35 ; G 1339
U 7734 ; WX 602 ; N uni1E36 ; G 1340
U 7735 ; WX 602 ; N uni1E37 ; G 1341
U 7736 ; WX 602 ; N uni1E38 ; G 1342
U 7737 ; WX 602 ; N uni1E39 ; G 1343
U 7738 ; WX 602 ; N uni1E3A ; G 1344
U 7739 ; WX 602 ; N uni1E3B ; G 1345
U 7740 ; WX 602 ; N uni1E3C ; G 1346
U 7741 ; WX 602 ; N uni1E3D ; G 1347
U 7742 ; WX 602 ; N uni1E3E ; G 1348
U 7743 ; WX 602 ; N uni1E3F ; G 1349
U 7744 ; WX 602 ; N uni1E40 ; G 1350
U 7745 ; WX 602 ; N uni1E41 ; G 1351
U 7746 ; WX 602 ; N uni1E42 ; G 1352
U 7747 ; WX 602 ; N uni1E43 ; G 1353
U 7748 ; WX 602 ; N uni1E44 ; G 1354
U 7749 ; WX 602 ; N uni1E45 ; G 1355
U 7750 ; WX 602 ; N uni1E46 ; G 1356
U 7751 ; WX 602 ; N uni1E47 ; G 1357
U 7752 ; WX 602 ; N uni1E48 ; G 1358
U 7753 ; WX 602 ; N uni1E49 ; G 1359
U 7754 ; WX 602 ; N uni1E4A ; G 1360
U 7755 ; WX 602 ; N uni1E4B ; G 1361
U 7756 ; WX 602 ; N uni1E4C ; G 1362
U 7757 ; WX 602 ; N uni1E4D ; G 1363
U 7764 ; WX 602 ; N uni1E54 ; G 1364
U 7765 ; WX 602 ; N uni1E55 ; G 1365
U 7766 ; WX 602 ; N uni1E56 ; G 1366
U 7767 ; WX 602 ; N uni1E57 ; G 1367
U 7768 ; WX 602 ; N uni1E58 ; G 1368
U 7769 ; WX 602 ; N uni1E59 ; G 1369
U 7770 ; WX 602 ; N uni1E5A ; G 1370
U 7771 ; WX 602 ; N uni1E5B ; G 1371
U 7772 ; WX 602 ; N uni1E5C ; G 1372
U 7773 ; WX 602 ; N uni1E5D ; G 1373
U 7774 ; WX 602 ; N uni1E5E ; G 1374
U 7775 ; WX 602 ; N uni1E5F ; G 1375
U 7776 ; WX 602 ; N uni1E60 ; G 1376
U 7777 ; WX 602 ; N uni1E61 ; G 1377
U 7778 ; WX 602 ; N uni1E62 ; G 1378
U 7779 ; WX 602 ; N uni1E63 ; G 1379
U 7784 ; WX 602 ; N uni1E68 ; G 1380
U 7785 ; WX 602 ; N uni1E69 ; G 1381
U 7786 ; WX 602 ; N uni1E6A ; G 1382
U 7787 ; WX 602 ; N uni1E6B ; G 1383
U 7788 ; WX 602 ; N uni1E6C ; G 1384
U 7789 ; WX 602 ; N uni1E6D ; G 1385
U 7790 ; WX 602 ; N uni1E6E ; G 1386
U 7791 ; WX 602 ; N uni1E6F ; G 1387
U 7792 ; WX 602 ; N uni1E70 ; G 1388
U 7793 ; WX 602 ; N uni1E71 ; G 1389
U 7794 ; WX 602 ; N uni1E72 ; G 1390
U 7795 ; WX 602 ; N uni1E73 ; G 1391
U 7796 ; WX 602 ; N uni1E74 ; G 1392
U 7797 ; WX 602 ; N uni1E75 ; G 1393
U 7798 ; WX 602 ; N uni1E76 ; G 1394
U 7799 ; WX 602 ; N uni1E77 ; G 1395
U 7800 ; WX 602 ; N uni1E78 ; G 1396
U 7801 ; WX 602 ; N uni1E79 ; G 1397
U 7804 ; WX 602 ; N uni1E7C ; G 1398
U 7805 ; WX 602 ; N uni1E7D ; G 1399
U 7806 ; WX 602 ; N uni1E7E ; G 1400
U 7807 ; WX 602 ; N uni1E7F ; G 1401
U 7808 ; WX 602 ; N Wgrave ; G 1402
U 7809 ; WX 602 ; N wgrave ; G 1403
U 7810 ; WX 602 ; N Wacute ; G 1404
U 7811 ; WX 602 ; N wacute ; G 1405
U 7812 ; WX 602 ; N Wdieresis ; G 1406
U 7813 ; WX 602 ; N wdieresis ; G 1407
U 7814 ; WX 602 ; N uni1E86 ; G 1408
U 7815 ; WX 602 ; N uni1E87 ; G 1409
U 7816 ; WX 602 ; N uni1E88 ; G 1410
U 7817 ; WX 602 ; N uni1E89 ; G 1411
U 7818 ; WX 602 ; N uni1E8A ; G 1412
U 7819 ; WX 602 ; N uni1E8B ; G 1413
U 7820 ; WX 602 ; N uni1E8C ; G 1414
U 7821 ; WX 602 ; N uni1E8D ; G 1415
U 7822 ; WX 602 ; N uni1E8E ; G 1416
U 7823 ; WX 602 ; N uni1E8F ; G 1417
U 7824 ; WX 602 ; N uni1E90 ; G 1418
U 7825 ; WX 602 ; N uni1E91 ; G 1419
U 7826 ; WX 602 ; N uni1E92 ; G 1420
U 7827 ; WX 602 ; N uni1E93 ; G 1421
U 7828 ; WX 602 ; N uni1E94 ; G 1422
U 7829 ; WX 602 ; N uni1E95 ; G 1423
U 7830 ; WX 602 ; N uni1E96 ; G 1424
U 7831 ; WX 602 ; N uni1E97 ; G 1425
U 7832 ; WX 602 ; N uni1E98 ; G 1426
U 7833 ; WX 602 ; N uni1E99 ; G 1427
U 7835 ; WX 602 ; N uni1E9B ; G 1428
U 7839 ; WX 602 ; N uni1E9F ; G 1429
U 7840 ; WX 602 ; N uni1EA0 ; G 1430
U 7841 ; WX 602 ; N uni1EA1 ; G 1431
U 7852 ; WX 602 ; N uni1EAC ; G 1432
U 7853 ; WX 602 ; N uni1EAD ; G 1433
U 7856 ; WX 602 ; N uni1EB0 ; G 1434
U 7857 ; WX 602 ; N uni1EB1 ; G 1435
U 7862 ; WX 602 ; N uni1EB6 ; G 1436
U 7863 ; WX 602 ; N uni1EB7 ; G 1437
U 7864 ; WX 602 ; N uni1EB8 ; G 1438
U 7865 ; WX 602 ; N uni1EB9 ; G 1439
U 7868 ; WX 602 ; N uni1EBC ; G 1440
U 7869 ; WX 602 ; N uni1EBD ; G 1441
U 7878 ; WX 602 ; N uni1EC6 ; G 1442
U 7879 ; WX 602 ; N uni1EC7 ; G 1443
U 7882 ; WX 602 ; N uni1ECA ; G 1444
U 7883 ; WX 602 ; N uni1ECB ; G 1445
U 7884 ; WX 602 ; N uni1ECC ; G 1446
U 7885 ; WX 602 ; N uni1ECD ; G 1447
U 7896 ; WX 602 ; N uni1ED8 ; G 1448
U 7897 ; WX 602 ; N uni1ED9 ; G 1449
U 7898 ; WX 602 ; N uni1EDA ; G 1450
U 7899 ; WX 602 ; N uni1EDB ; G 1451
U 7900 ; WX 602 ; N uni1EDC ; G 1452
U 7901 ; WX 602 ; N uni1EDD ; G 1453
U 7904 ; WX 602 ; N uni1EE0 ; G 1454
U 7905 ; WX 602 ; N uni1EE1 ; G 1455
U 7906 ; WX 602 ; N uni1EE2 ; G 1456
U 7907 ; WX 602 ; N uni1EE3 ; G 1457
U 7908 ; WX 602 ; N uni1EE4 ; G 1458
U 7909 ; WX 602 ; N uni1EE5 ; G 1459
U 7912 ; WX 602 ; N uni1EE8 ; G 1460
U 7913 ; WX 602 ; N uni1EE9 ; G 1461
U 7914 ; WX 602 ; N uni1EEA ; G 1462
U 7915 ; WX 602 ; N uni1EEB ; G 1463
U 7918 ; WX 602 ; N uni1EEE ; G 1464
U 7919 ; WX 602 ; N uni1EEF ; G 1465
U 7920 ; WX 602 ; N uni1EF0 ; G 1466
U 7921 ; WX 602 ; N uni1EF1 ; G 1467
U 7922 ; WX 602 ; N Ygrave ; G 1468
U 7923 ; WX 602 ; N ygrave ; G 1469
U 7924 ; WX 602 ; N uni1EF4 ; G 1470
U 7925 ; WX 602 ; N uni1EF5 ; G 1471
U 7928 ; WX 602 ; N uni1EF8 ; G 1472
U 7929 ; WX 602 ; N uni1EF9 ; G 1473
U 7936 ; WX 602 ; N uni1F00 ; G 1474
U 7937 ; WX 602 ; N uni1F01 ; G 1475
U 7938 ; WX 602 ; N uni1F02 ; G 1476
U 7939 ; WX 602 ; N uni1F03 ; G 1477
U 7940 ; WX 602 ; N uni1F04 ; G 1478
U 7941 ; WX 602 ; N uni1F05 ; G 1479
U 7942 ; WX 602 ; N uni1F06 ; G 1480
U 7943 ; WX 602 ; N uni1F07 ; G 1481
U 7944 ; WX 602 ; N uni1F08 ; G 1482
U 7945 ; WX 602 ; N uni1F09 ; G 1483
U 7946 ; WX 602 ; N uni1F0A ; G 1484
U 7947 ; WX 602 ; N uni1F0B ; G 1485
U 7948 ; WX 602 ; N uni1F0C ; G 1486
U 7949 ; WX 602 ; N uni1F0D ; G 1487
U 7950 ; WX 602 ; N uni1F0E ; G 1488
U 7951 ; WX 602 ; N uni1F0F ; G 1489
U 7952 ; WX 602 ; N uni1F10 ; G 1490
U 7953 ; WX 602 ; N uni1F11 ; G 1491
U 7954 ; WX 602 ; N uni1F12 ; G 1492
U 7955 ; WX 602 ; N uni1F13 ; G 1493
U 7956 ; WX 602 ; N uni1F14 ; G 1494
U 7957 ; WX 602 ; N uni1F15 ; G 1495
U 7960 ; WX 602 ; N uni1F18 ; G 1496
U 7961 ; WX 602 ; N uni1F19 ; G 1497
U 7962 ; WX 602 ; N uni1F1A ; G 1498
U 7963 ; WX 602 ; N uni1F1B ; G 1499
U 7964 ; WX 602 ; N uni1F1C ; G 1500
U 7965 ; WX 602 ; N uni1F1D ; G 1501
U 7968 ; WX 602 ; N uni1F20 ; G 1502
U 7969 ; WX 602 ; N uni1F21 ; G 1503
U 7970 ; WX 602 ; N uni1F22 ; G 1504
U 7971 ; WX 602 ; N uni1F23 ; G 1505
U 7972 ; WX 602 ; N uni1F24 ; G 1506
U 7973 ; WX 602 ; N uni1F25 ; G 1507
U 7974 ; WX 602 ; N uni1F26 ; G 1508
U 7975 ; WX 602 ; N uni1F27 ; G 1509
U 7976 ; WX 602 ; N uni1F28 ; G 1510
U 7977 ; WX 602 ; N uni1F29 ; G 1511
U 7978 ; WX 602 ; N uni1F2A ; G 1512
U 7979 ; WX 602 ; N uni1F2B ; G 1513
U 7980 ; WX 602 ; N uni1F2C ; G 1514
U 7981 ; WX 602 ; N uni1F2D ; G 1515
U 7982 ; WX 602 ; N uni1F2E ; G 1516
U 7983 ; WX 602 ; N uni1F2F ; G 1517
U 7984 ; WX 602 ; N uni1F30 ; G 1518
U 7985 ; WX 602 ; N uni1F31 ; G 1519
U 7986 ; WX 602 ; N uni1F32 ; G 1520
U 7987 ; WX 602 ; N uni1F33 ; G 1521
U 7988 ; WX 602 ; N uni1F34 ; G 1522
U 7989 ; WX 602 ; N uni1F35 ; G 1523
U 7990 ; WX 602 ; N uni1F36 ; G 1524
U 7991 ; WX 602 ; N uni1F37 ; G 1525
U 7992 ; WX 602 ; N uni1F38 ; G 1526
U 7993 ; WX 602 ; N uni1F39 ; G 1527
U 7994 ; WX 602 ; N uni1F3A ; G 1528
U 7995 ; WX 602 ; N uni1F3B ; G 1529
U 7996 ; WX 602 ; N uni1F3C ; G 1530
U 7997 ; WX 602 ; N uni1F3D ; G 1531
U 7998 ; WX 602 ; N uni1F3E ; G 1532
U 7999 ; WX 602 ; N uni1F3F ; G 1533
U 8000 ; WX 602 ; N uni1F40 ; G 1534
U 8001 ; WX 602 ; N uni1F41 ; G 1535
U 8002 ; WX 602 ; N uni1F42 ; G 1536
U 8003 ; WX 602 ; N uni1F43 ; G 1537
U 8004 ; WX 602 ; N uni1F44 ; G 1538
U 8005 ; WX 602 ; N uni1F45 ; G 1539
U 8008 ; WX 602 ; N uni1F48 ; G 1540
U 8009 ; WX 602 ; N uni1F49 ; G 1541
U 8010 ; WX 602 ; N uni1F4A ; G 1542
U 8011 ; WX 602 ; N uni1F4B ; G 1543
U 8012 ; WX 602 ; N uni1F4C ; G 1544
U 8013 ; WX 602 ; N uni1F4D ; G 1545
U 8016 ; WX 602 ; N uni1F50 ; G 1546
U 8017 ; WX 602 ; N uni1F51 ; G 1547
U 8018 ; WX 602 ; N uni1F52 ; G 1548
U 8019 ; WX 602 ; N uni1F53 ; G 1549
U 8020 ; WX 602 ; N uni1F54 ; G 1550
U 8021 ; WX 602 ; N uni1F55 ; G 1551
U 8022 ; WX 602 ; N uni1F56 ; G 1552
U 8023 ; WX 602 ; N uni1F57 ; G 1553
U 8025 ; WX 602 ; N uni1F59 ; G 1554
U 8027 ; WX 602 ; N uni1F5B ; G 1555
U 8029 ; WX 602 ; N uni1F5D ; G 1556
U 8031 ; WX 602 ; N uni1F5F ; G 1557
U 8032 ; WX 602 ; N uni1F60 ; G 1558
U 8033 ; WX 602 ; N uni1F61 ; G 1559
U 8034 ; WX 602 ; N uni1F62 ; G 1560
U 8035 ; WX 602 ; N uni1F63 ; G 1561
U 8036 ; WX 602 ; N uni1F64 ; G 1562
U 8037 ; WX 602 ; N uni1F65 ; G 1563
U 8038 ; WX 602 ; N uni1F66 ; G 1564
U 8039 ; WX 602 ; N uni1F67 ; G 1565
U 8040 ; WX 602 ; N uni1F68 ; G 1566
U 8041 ; WX 602 ; N uni1F69 ; G 1567
U 8042 ; WX 602 ; N uni1F6A ; G 1568
U 8043 ; WX 602 ; N uni1F6B ; G 1569
U 8044 ; WX 602 ; N uni1F6C ; G 1570
U 8045 ; WX 602 ; N uni1F6D ; G 1571
U 8046 ; WX 602 ; N uni1F6E ; G 1572
U 8047 ; WX 602 ; N uni1F6F ; G 1573
U 8048 ; WX 602 ; N uni1F70 ; G 1574
U 8049 ; WX 602 ; N uni1F71 ; G 1575
U 8050 ; WX 602 ; N uni1F72 ; G 1576
U 8051 ; WX 602 ; N uni1F73 ; G 1577
U 8052 ; WX 602 ; N uni1F74 ; G 1578
U 8053 ; WX 602 ; N uni1F75 ; G 1579
U 8054 ; WX 602 ; N uni1F76 ; G 1580
U 8055 ; WX 602 ; N uni1F77 ; G 1581
U 8056 ; WX 602 ; N uni1F78 ; G 1582
U 8057 ; WX 602 ; N uni1F79 ; G 1583
U 8058 ; WX 602 ; N uni1F7A ; G 1584
U 8059 ; WX 602 ; N uni1F7B ; G 1585
U 8060 ; WX 602 ; N uni1F7C ; G 1586
U 8061 ; WX 602 ; N uni1F7D ; G 1587
U 8064 ; WX 602 ; N uni1F80 ; G 1588
U 8065 ; WX 602 ; N uni1F81 ; G 1589
U 8066 ; WX 602 ; N uni1F82 ; G 1590
U 8067 ; WX 602 ; N uni1F83 ; G 1591
U 8068 ; WX 602 ; N uni1F84 ; G 1592
U 8069 ; WX 602 ; N uni1F85 ; G 1593
U 8070 ; WX 602 ; N uni1F86 ; G 1594
U 8071 ; WX 602 ; N uni1F87 ; G 1595
U 8072 ; WX 602 ; N uni1F88 ; G 1596
U 8073 ; WX 602 ; N uni1F89 ; G 1597
U 8074 ; WX 602 ; N uni1F8A ; G 1598
U 8075 ; WX 602 ; N uni1F8B ; G 1599
U 8076 ; WX 602 ; N uni1F8C ; G 1600
U 8077 ; WX 602 ; N uni1F8D ; G 1601
U 8078 ; WX 602 ; N uni1F8E ; G 1602
U 8079 ; WX 602 ; N uni1F8F ; G 1603
U 8080 ; WX 602 ; N uni1F90 ; G 1604
U 8081 ; WX 602 ; N uni1F91 ; G 1605
U 8082 ; WX 602 ; N uni1F92 ; G 1606
U 8083 ; WX 602 ; N uni1F93 ; G 1607
U 8084 ; WX 602 ; N uni1F94 ; G 1608
U 8085 ; WX 602 ; N uni1F95 ; G 1609
U 8086 ; WX 602 ; N uni1F96 ; G 1610
U 8087 ; WX 602 ; N uni1F97 ; G 1611
U 8088 ; WX 602 ; N uni1F98 ; G 1612
U 8089 ; WX 602 ; N uni1F99 ; G 1613
U 8090 ; WX 602 ; N uni1F9A ; G 1614
U 8091 ; WX 602 ; N uni1F9B ; G 1615
U 8092 ; WX 602 ; N uni1F9C ; G 1616
U 8093 ; WX 602 ; N uni1F9D ; G 1617
U 8094 ; WX 602 ; N uni1F9E ; G 1618
U 8095 ; WX 602 ; N uni1F9F ; G 1619
U 8096 ; WX 602 ; N uni1FA0 ; G 1620
U 8097 ; WX 602 ; N uni1FA1 ; G 1621
U 8098 ; WX 602 ; N uni1FA2 ; G 1622
U 8099 ; WX 602 ; N uni1FA3 ; G 1623
U 8100 ; WX 602 ; N uni1FA4 ; G 1624
U 8101 ; WX 602 ; N uni1FA5 ; G 1625
U 8102 ; WX 602 ; N uni1FA6 ; G 1626
U 8103 ; WX 602 ; N uni1FA7 ; G 1627
U 8104 ; WX 602 ; N uni1FA8 ; G 1628
U 8105 ; WX 602 ; N uni1FA9 ; G 1629
U 8106 ; WX 602 ; N uni1FAA ; G 1630
U 8107 ; WX 602 ; N uni1FAB ; G 1631
U 8108 ; WX 602 ; N uni1FAC ; G 1632
U 8109 ; WX 602 ; N uni1FAD ; G 1633
U 8110 ; WX 602 ; N uni1FAE ; G 1634
U 8111 ; WX 602 ; N uni1FAF ; G 1635
U 8112 ; WX 602 ; N uni1FB0 ; G 1636
U 8113 ; WX 602 ; N uni1FB1 ; G 1637
U 8114 ; WX 602 ; N uni1FB2 ; G 1638
U 8115 ; WX 602 ; N uni1FB3 ; G 1639
U 8116 ; WX 602 ; N uni1FB4 ; G 1640
U 8118 ; WX 602 ; N uni1FB6 ; G 1641
U 8119 ; WX 602 ; N uni1FB7 ; G 1642
U 8120 ; WX 602 ; N uni1FB8 ; G 1643
U 8121 ; WX 602 ; N uni1FB9 ; G 1644
U 8122 ; WX 602 ; N uni1FBA ; G 1645
U 8123 ; WX 602 ; N uni1FBB ; G 1646
U 8124 ; WX 602 ; N uni1FBC ; G 1647
U 8125 ; WX 602 ; N uni1FBD ; G 1648
U 8126 ; WX 602 ; N uni1FBE ; G 1649
U 8127 ; WX 602 ; N uni1FBF ; G 1650
U 8128 ; WX 602 ; N uni1FC0 ; G 1651
U 8129 ; WX 602 ; N uni1FC1 ; G 1652
U 8130 ; WX 602 ; N uni1FC2 ; G 1653
U 8131 ; WX 602 ; N uni1FC3 ; G 1654
U 8132 ; WX 602 ; N uni1FC4 ; G 1655
U 8134 ; WX 602 ; N uni1FC6 ; G 1656
U 8135 ; WX 602 ; N uni1FC7 ; G 1657
U 8136 ; WX 602 ; N uni1FC8 ; G 1658
U 8137 ; WX 602 ; N uni1FC9 ; G 1659
U 8138 ; WX 602 ; N uni1FCA ; G 1660
U 8139 ; WX 602 ; N uni1FCB ; G 1661
U 8140 ; WX 602 ; N uni1FCC ; G 1662
U 8141 ; WX 602 ; N uni1FCD ; G 1663
U 8142 ; WX 602 ; N uni1FCE ; G 1664
U 8143 ; WX 602 ; N uni1FCF ; G 1665
U 8144 ; WX 602 ; N uni1FD0 ; G 1666
U 8145 ; WX 602 ; N uni1FD1 ; G 1667
U 8146 ; WX 602 ; N uni1FD2 ; G 1668
U 8147 ; WX 602 ; N uni1FD3 ; G 1669
U 8150 ; WX 602 ; N uni1FD6 ; G 1670
U 8151 ; WX 602 ; N uni1FD7 ; G 1671
U 8152 ; WX 602 ; N uni1FD8 ; G 1672
U 8153 ; WX 602 ; N uni1FD9 ; G 1673
U 8154 ; WX 602 ; N uni1FDA ; G 1674
U 8155 ; WX 602 ; N uni1FDB ; G 1675
U 8157 ; WX 602 ; N uni1FDD ; G 1676
U 8158 ; WX 602 ; N uni1FDE ; G 1677
U 8159 ; WX 602 ; N uni1FDF ; G 1678
U 8160 ; WX 602 ; N uni1FE0 ; G 1679
U 8161 ; WX 602 ; N uni1FE1 ; G 1680
U 8162 ; WX 602 ; N uni1FE2 ; G 1681
U 8163 ; WX 602 ; N uni1FE3 ; G 1682
U 8164 ; WX 602 ; N uni1FE4 ; G 1683
U 8165 ; WX 602 ; N uni1FE5 ; G 1684
U 8166 ; WX 602 ; N uni1FE6 ; G 1685
U 8167 ; WX 602 ; N uni1FE7 ; G 1686
U 8168 ; WX 602 ; N uni1FE8 ; G 1687
U 8169 ; WX 602 ; N uni1FE9 ; G 1688
U 8170 ; WX 602 ; N uni1FEA ; G 1689
U 8171 ; WX 602 ; N uni1FEB ; G 1690
U 8172 ; WX 602 ; N uni1FEC ; G 1691
U 8173 ; WX 602 ; N uni1FED ; G 1692
U 8174 ; WX 602 ; N uni1FEE ; G 1693
U 8175 ; WX 602 ; N uni1FEF ; G 1694
U 8178 ; WX 602 ; N uni1FF2 ; G 1695
U 8179 ; WX 602 ; N uni1FF3 ; G 1696
U 8180 ; WX 602 ; N uni1FF4 ; G 1697
U 8182 ; WX 602 ; N uni1FF6 ; G 1698
U 8183 ; WX 602 ; N uni1FF7 ; G 1699
U 8184 ; WX 602 ; N uni1FF8 ; G 1700
U 8185 ; WX 602 ; N uni1FF9 ; G 1701
U 8186 ; WX 602 ; N uni1FFA ; G 1702
U 8187 ; WX 602 ; N uni1FFB ; G 1703
U 8188 ; WX 602 ; N uni1FFC ; G 1704
U 8189 ; WX 602 ; N uni1FFD ; G 1705
U 8190 ; WX 602 ; N uni1FFE ; G 1706
U 8192 ; WX 602 ; N uni2000 ; G 1707
U 8193 ; WX 602 ; N uni2001 ; G 1708
U 8194 ; WX 602 ; N uni2002 ; G 1709
U 8195 ; WX 602 ; N uni2003 ; G 1710
U 8196 ; WX 602 ; N uni2004 ; G 1711
U 8197 ; WX 602 ; N uni2005 ; G 1712
U 8198 ; WX 602 ; N uni2006 ; G 1713
U 8199 ; WX 602 ; N uni2007 ; G 1714
U 8200 ; WX 602 ; N uni2008 ; G 1715
U 8201 ; WX 602 ; N uni2009 ; G 1716
U 8202 ; WX 602 ; N uni200A ; G 1717
U 8208 ; WX 602 ; N uni2010 ; G 1718
U 8209 ; WX 602 ; N uni2011 ; G 1719
U 8210 ; WX 602 ; N figuredash ; G 1720
U 8211 ; WX 602 ; N endash ; G 1721
U 8212 ; WX 602 ; N emdash ; G 1722
U 8213 ; WX 602 ; N uni2015 ; G 1723
U 8214 ; WX 602 ; N uni2016 ; G 1724
U 8215 ; WX 602 ; N underscoredbl ; G 1725
U 8216 ; WX 602 ; N quoteleft ; G 1726
U 8217 ; WX 602 ; N quoteright ; G 1727
U 8218 ; WX 602 ; N quotesinglbase ; G 1728
U 8219 ; WX 602 ; N quotereversed ; G 1729
U 8220 ; WX 602 ; N quotedblleft ; G 1730
U 8221 ; WX 602 ; N quotedblright ; G 1731
U 8222 ; WX 602 ; N quotedblbase ; G 1732
U 8223 ; WX 602 ; N uni201F ; G 1733
U 8224 ; WX 602 ; N dagger ; G 1734
U 8225 ; WX 602 ; N daggerdbl ; G 1735
U 8226 ; WX 602 ; N bullet ; G 1736
U 8227 ; WX 602 ; N uni2023 ; G 1737
U 8230 ; WX 602 ; N ellipsis ; G 1738
U 8239 ; WX 602 ; N uni202F ; G 1739
U 8240 ; WX 602 ; N perthousand ; G 1740
U 8241 ; WX 602 ; N uni2031 ; G 1741
U 8242 ; WX 602 ; N minute ; G 1742
U 8243 ; WX 602 ; N second ; G 1743
U 8244 ; WX 602 ; N uni2034 ; G 1744
U 8245 ; WX 602 ; N uni2035 ; G 1745
U 8246 ; WX 602 ; N uni2036 ; G 1746
U 8247 ; WX 602 ; N uni2037 ; G 1747
U 8249 ; WX 602 ; N guilsinglleft ; G 1748
U 8250 ; WX 602 ; N guilsinglright ; G 1749
U 8252 ; WX 602 ; N exclamdbl ; G 1750
U 8253 ; WX 602 ; N uni203D ; G 1751
U 8254 ; WX 602 ; N uni203E ; G 1752
U 8255 ; WX 602 ; N uni203F ; G 1753
U 8261 ; WX 602 ; N uni2045 ; G 1754
U 8262 ; WX 602 ; N uni2046 ; G 1755
U 8263 ; WX 602 ; N uni2047 ; G 1756
U 8264 ; WX 602 ; N uni2048 ; G 1757
U 8265 ; WX 602 ; N uni2049 ; G 1758
U 8267 ; WX 602 ; N uni204B ; G 1759
U 8287 ; WX 602 ; N uni205F ; G 1760
U 8304 ; WX 602 ; N uni2070 ; G 1761
U 8305 ; WX 602 ; N uni2071 ; G 1762
U 8308 ; WX 602 ; N uni2074 ; G 1763
U 8309 ; WX 602 ; N uni2075 ; G 1764
U 8310 ; WX 602 ; N uni2076 ; G 1765
U 8311 ; WX 602 ; N uni2077 ; G 1766
U 8312 ; WX 602 ; N uni2078 ; G 1767
U 8313 ; WX 602 ; N uni2079 ; G 1768
U 8314 ; WX 602 ; N uni207A ; G 1769
U 8315 ; WX 602 ; N uni207B ; G 1770
U 8316 ; WX 602 ; N uni207C ; G 1771
U 8317 ; WX 602 ; N uni207D ; G 1772
U 8318 ; WX 602 ; N uni207E ; G 1773
U 8319 ; WX 602 ; N uni207F ; G 1774
U 8320 ; WX 602 ; N uni2080 ; G 1775
U 8321 ; WX 602 ; N uni2081 ; G 1776
U 8322 ; WX 602 ; N uni2082 ; G 1777
U 8323 ; WX 602 ; N uni2083 ; G 1778
U 8324 ; WX 602 ; N uni2084 ; G 1779
U 8325 ; WX 602 ; N uni2085 ; G 1780
U 8326 ; WX 602 ; N uni2086 ; G 1781
U 8327 ; WX 602 ; N uni2087 ; G 1782
U 8328 ; WX 602 ; N uni2088 ; G 1783
U 8329 ; WX 602 ; N uni2089 ; G 1784
U 8330 ; WX 602 ; N uni208A ; G 1785
U 8331 ; WX 602 ; N uni208B ; G 1786
U 8332 ; WX 602 ; N uni208C ; G 1787
U 8333 ; WX 602 ; N uni208D ; G 1788
U 8334 ; WX 602 ; N uni208E ; G 1789
U 8336 ; WX 602 ; N uni2090 ; G 1790
U 8337 ; WX 602 ; N uni2091 ; G 1791
U 8338 ; WX 602 ; N uni2092 ; G 1792
U 8339 ; WX 602 ; N uni2093 ; G 1793
U 8340 ; WX 602 ; N uni2094 ; G 1794
U 8341 ; WX 602 ; N uni2095 ; G 1795
U 8342 ; WX 602 ; N uni2096 ; G 1796
U 8343 ; WX 602 ; N uni2097 ; G 1797
U 8344 ; WX 602 ; N uni2098 ; G 1798
U 8345 ; WX 602 ; N uni2099 ; G 1799
U 8346 ; WX 602 ; N uni209A ; G 1800
U 8347 ; WX 602 ; N uni209B ; G 1801
U 8348 ; WX 602 ; N uni209C ; G 1802
U 8352 ; WX 602 ; N uni20A0 ; G 1803
U 8353 ; WX 602 ; N colonmonetary ; G 1804
U 8354 ; WX 602 ; N uni20A2 ; G 1805
U 8355 ; WX 602 ; N franc ; G 1806
U 8356 ; WX 602 ; N lira ; G 1807
U 8357 ; WX 602 ; N uni20A5 ; G 1808
U 8358 ; WX 602 ; N uni20A6 ; G 1809
U 8359 ; WX 602 ; N peseta ; G 1810
U 8360 ; WX 602 ; N uni20A8 ; G 1811
U 8361 ; WX 602 ; N uni20A9 ; G 1812
U 8362 ; WX 602 ; N uni20AA ; G 1813
U 8363 ; WX 602 ; N dong ; G 1814
U 8364 ; WX 602 ; N Euro ; G 1815
U 8365 ; WX 602 ; N uni20AD ; G 1816
U 8366 ; WX 602 ; N uni20AE ; G 1817
U 8367 ; WX 602 ; N uni20AF ; G 1818
U 8368 ; WX 602 ; N uni20B0 ; G 1819
U 8369 ; WX 602 ; N uni20B1 ; G 1820
U 8370 ; WX 602 ; N uni20B2 ; G 1821
U 8371 ; WX 602 ; N uni20B3 ; G 1822
U 8372 ; WX 602 ; N uni20B4 ; G 1823
U 8373 ; WX 602 ; N uni20B5 ; G 1824
U 8376 ; WX 602 ; N uni20B8 ; G 1825
U 8377 ; WX 602 ; N uni20B9 ; G 1826
U 8378 ; WX 602 ; N uni20BA ; G 1827
U 8381 ; WX 602 ; N uni20BD ; G 1828
U 8450 ; WX 602 ; N uni2102 ; G 1829
U 8453 ; WX 602 ; N uni2105 ; G 1830
U 8461 ; WX 602 ; N uni210D ; G 1831
U 8462 ; WX 602 ; N uni210E ; G 1832
U 8463 ; WX 602 ; N uni210F ; G 1833
U 8469 ; WX 602 ; N uni2115 ; G 1834
U 8470 ; WX 602 ; N uni2116 ; G 1835
U 8471 ; WX 602 ; N uni2117 ; G 1836
U 8473 ; WX 602 ; N uni2119 ; G 1837
U 8474 ; WX 602 ; N uni211A ; G 1838
U 8477 ; WX 602 ; N uni211D ; G 1839
U 8482 ; WX 602 ; N trademark ; G 1840
U 8484 ; WX 602 ; N uni2124 ; G 1841
U 8486 ; WX 602 ; N uni2126 ; G 1842
U 8490 ; WX 602 ; N uni212A ; G 1843
U 8491 ; WX 602 ; N uni212B ; G 1844
U 8494 ; WX 602 ; N estimated ; G 1845
U 8520 ; WX 602 ; N uni2148 ; G 1846
U 8528 ; WX 602 ; N uni2150 ; G 1847
U 8529 ; WX 602 ; N uni2151 ; G 1848
U 8531 ; WX 602 ; N onethird ; G 1849
U 8532 ; WX 602 ; N twothirds ; G 1850
U 8533 ; WX 602 ; N uni2155 ; G 1851
U 8534 ; WX 602 ; N uni2156 ; G 1852
U 8535 ; WX 602 ; N uni2157 ; G 1853
U 8536 ; WX 602 ; N uni2158 ; G 1854
U 8537 ; WX 602 ; N uni2159 ; G 1855
U 8538 ; WX 602 ; N uni215A ; G 1856
U 8539 ; WX 602 ; N oneeighth ; G 1857
U 8540 ; WX 602 ; N threeeighths ; G 1858
U 8541 ; WX 602 ; N fiveeighths ; G 1859
U 8542 ; WX 602 ; N seveneighths ; G 1860
U 8543 ; WX 602 ; N uni215F ; G 1861
U 8585 ; WX 602 ; N uni2189 ; G 1862
U 8592 ; WX 602 ; N arrowleft ; G 1863
U 8593 ; WX 602 ; N arrowup ; G 1864
U 8594 ; WX 602 ; N arrowright ; G 1865
U 8595 ; WX 602 ; N arrowdown ; G 1866
U 8596 ; WX 602 ; N arrowboth ; G 1867
U 8597 ; WX 602 ; N arrowupdn ; G 1868
U 8598 ; WX 602 ; N uni2196 ; G 1869
U 8599 ; WX 602 ; N uni2197 ; G 1870
U 8600 ; WX 602 ; N uni2198 ; G 1871
U 8601 ; WX 602 ; N uni2199 ; G 1872
U 8602 ; WX 602 ; N uni219A ; G 1873
U 8603 ; WX 602 ; N uni219B ; G 1874
U 8604 ; WX 602 ; N uni219C ; G 1875
U 8605 ; WX 602 ; N uni219D ; G 1876
U 8606 ; WX 602 ; N uni219E ; G 1877
U 8607 ; WX 602 ; N uni219F ; G 1878
U 8608 ; WX 602 ; N uni21A0 ; G 1879
U 8609 ; WX 602 ; N uni21A1 ; G 1880
U 8610 ; WX 602 ; N uni21A2 ; G 1881
U 8611 ; WX 602 ; N uni21A3 ; G 1882
U 8612 ; WX 602 ; N uni21A4 ; G 1883
U 8613 ; WX 602 ; N uni21A5 ; G 1884
U 8614 ; WX 602 ; N uni21A6 ; G 1885
U 8615 ; WX 602 ; N uni21A7 ; G 1886
U 8616 ; WX 602 ; N arrowupdnbse ; G 1887
U 8617 ; WX 602 ; N uni21A9 ; G 1888
U 8618 ; WX 602 ; N uni21AA ; G 1889
U 8619 ; WX 602 ; N uni21AB ; G 1890
U 8620 ; WX 602 ; N uni21AC ; G 1891
U 8621 ; WX 602 ; N uni21AD ; G 1892
U 8622 ; WX 602 ; N uni21AE ; G 1893
U 8623 ; WX 602 ; N uni21AF ; G 1894
U 8624 ; WX 602 ; N uni21B0 ; G 1895
U 8625 ; WX 602 ; N uni21B1 ; G 1896
U 8626 ; WX 602 ; N uni21B2 ; G 1897
U 8627 ; WX 602 ; N uni21B3 ; G 1898
U 8628 ; WX 602 ; N uni21B4 ; G 1899
U 8629 ; WX 602 ; N carriagereturn ; G 1900
U 8630 ; WX 602 ; N uni21B6 ; G 1901
U 8631 ; WX 602 ; N uni21B7 ; G 1902
U 8632 ; WX 602 ; N uni21B8 ; G 1903
U 8633 ; WX 602 ; N uni21B9 ; G 1904
U 8634 ; WX 602 ; N uni21BA ; G 1905
U 8635 ; WX 602 ; N uni21BB ; G 1906
U 8636 ; WX 602 ; N uni21BC ; G 1907
U 8637 ; WX 602 ; N uni21BD ; G 1908
U 8638 ; WX 602 ; N uni21BE ; G 1909
U 8639 ; WX 602 ; N uni21BF ; G 1910
U 8640 ; WX 602 ; N uni21C0 ; G 1911
U 8641 ; WX 602 ; N uni21C1 ; G 1912
U 8642 ; WX 602 ; N uni21C2 ; G 1913
U 8643 ; WX 602 ; N uni21C3 ; G 1914
U 8644 ; WX 602 ; N uni21C4 ; G 1915
U 8645 ; WX 602 ; N uni21C5 ; G 1916
U 8646 ; WX 602 ; N uni21C6 ; G 1917
U 8647 ; WX 602 ; N uni21C7 ; G 1918
U 8648 ; WX 602 ; N uni21C8 ; G 1919
U 8649 ; WX 602 ; N uni21C9 ; G 1920
U 8650 ; WX 602 ; N uni21CA ; G 1921
U 8651 ; WX 602 ; N uni21CB ; G 1922
U 8652 ; WX 602 ; N uni21CC ; G 1923
U 8653 ; WX 602 ; N uni21CD ; G 1924
U 8654 ; WX 602 ; N uni21CE ; G 1925
U 8655 ; WX 602 ; N uni21CF ; G 1926
U 8656 ; WX 602 ; N arrowdblleft ; G 1927
U 8657 ; WX 602 ; N arrowdblup ; G 1928
U 8658 ; WX 602 ; N arrowdblright ; G 1929
U 8659 ; WX 602 ; N arrowdbldown ; G 1930
U 8660 ; WX 602 ; N arrowdblboth ; G 1931
U 8661 ; WX 602 ; N uni21D5 ; G 1932
U 8662 ; WX 602 ; N uni21D6 ; G 1933
U 8663 ; WX 602 ; N uni21D7 ; G 1934
U 8664 ; WX 602 ; N uni21D8 ; G 1935
U 8665 ; WX 602 ; N uni21D9 ; G 1936
U 8666 ; WX 602 ; N uni21DA ; G 1937
U 8667 ; WX 602 ; N uni21DB ; G 1938
U 8668 ; WX 602 ; N uni21DC ; G 1939
U 8669 ; WX 602 ; N uni21DD ; G 1940
U 8670 ; WX 602 ; N uni21DE ; G 1941
U 8671 ; WX 602 ; N uni21DF ; G 1942
U 8672 ; WX 602 ; N uni21E0 ; G 1943
U 8673 ; WX 602 ; N uni21E1 ; G 1944
U 8674 ; WX 602 ; N uni21E2 ; G 1945
U 8675 ; WX 602 ; N uni21E3 ; G 1946
U 8676 ; WX 602 ; N uni21E4 ; G 1947
U 8677 ; WX 602 ; N uni21E5 ; G 1948
U 8678 ; WX 602 ; N uni21E6 ; G 1949
U 8679 ; WX 602 ; N uni21E7 ; G 1950
U 8680 ; WX 602 ; N uni21E8 ; G 1951
U 8681 ; WX 602 ; N uni21E9 ; G 1952
U 8682 ; WX 602 ; N uni21EA ; G 1953
U 8683 ; WX 602 ; N uni21EB ; G 1954
U 8684 ; WX 602 ; N uni21EC ; G 1955
U 8685 ; WX 602 ; N uni21ED ; G 1956
U 8686 ; WX 602 ; N uni21EE ; G 1957
U 8687 ; WX 602 ; N uni21EF ; G 1958
U 8688 ; WX 602 ; N uni21F0 ; G 1959
U 8689 ; WX 602 ; N uni21F1 ; G 1960
U 8690 ; WX 602 ; N uni21F2 ; G 1961
U 8691 ; WX 602 ; N uni21F3 ; G 1962
U 8692 ; WX 602 ; N uni21F4 ; G 1963
U 8693 ; WX 602 ; N uni21F5 ; G 1964
U 8694 ; WX 602 ; N uni21F6 ; G 1965
U 8695 ; WX 602 ; N uni21F7 ; G 1966
U 8696 ; WX 602 ; N uni21F8 ; G 1967
U 8697 ; WX 602 ; N uni21F9 ; G 1968
U 8698 ; WX 602 ; N uni21FA ; G 1969
U 8699 ; WX 602 ; N uni21FB ; G 1970
U 8700 ; WX 602 ; N uni21FC ; G 1971
U 8701 ; WX 602 ; N uni21FD ; G 1972
U 8702 ; WX 602 ; N uni21FE ; G 1973
U 8703 ; WX 602 ; N uni21FF ; G 1974
U 8704 ; WX 602 ; N universal ; G 1975
U 8705 ; WX 602 ; N uni2201 ; G 1976
U 8706 ; WX 602 ; N partialdiff ; G 1977
U 8707 ; WX 602 ; N existential ; G 1978
U 8708 ; WX 602 ; N uni2204 ; G 1979
U 8709 ; WX 602 ; N emptyset ; G 1980
U 8710 ; WX 602 ; N increment ; G 1981
U 8711 ; WX 602 ; N gradient ; G 1982
U 8712 ; WX 602 ; N element ; G 1983
U 8713 ; WX 602 ; N notelement ; G 1984
U 8714 ; WX 602 ; N uni220A ; G 1985
U 8715 ; WX 602 ; N suchthat ; G 1986
U 8716 ; WX 602 ; N uni220C ; G 1987
U 8717 ; WX 602 ; N uni220D ; G 1988
U 8718 ; WX 602 ; N uni220E ; G 1989
U 8719 ; WX 602 ; N product ; G 1990
U 8720 ; WX 602 ; N uni2210 ; G 1991
U 8721 ; WX 602 ; N summation ; G 1992
U 8722 ; WX 602 ; N minus ; G 1993
U 8723 ; WX 602 ; N uni2213 ; G 1994
U 8725 ; WX 602 ; N uni2215 ; G 1995
U 8727 ; WX 602 ; N asteriskmath ; G 1996
U 8728 ; WX 602 ; N uni2218 ; G 1997
U 8729 ; WX 602 ; N uni2219 ; G 1998
U 8730 ; WX 602 ; N radical ; G 1999
U 8731 ; WX 602 ; N uni221B ; G 2000
U 8732 ; WX 602 ; N uni221C ; G 2001
U 8733 ; WX 602 ; N proportional ; G 2002
U 8734 ; WX 602 ; N infinity ; G 2003
U 8735 ; WX 602 ; N orthogonal ; G 2004
U 8736 ; WX 602 ; N angle ; G 2005
U 8739 ; WX 602 ; N uni2223 ; G 2006
U 8743 ; WX 602 ; N logicaland ; G 2007
U 8744 ; WX 602 ; N logicalor ; G 2008
U 8745 ; WX 602 ; N intersection ; G 2009
U 8746 ; WX 602 ; N union ; G 2010
U 8747 ; WX 602 ; N integral ; G 2011
U 8748 ; WX 602 ; N uni222C ; G 2012
U 8749 ; WX 602 ; N uni222D ; G 2013
U 8756 ; WX 602 ; N therefore ; G 2014
U 8757 ; WX 602 ; N uni2235 ; G 2015
U 8758 ; WX 602 ; N uni2236 ; G 2016
U 8759 ; WX 602 ; N uni2237 ; G 2017
U 8760 ; WX 602 ; N uni2238 ; G 2018
U 8761 ; WX 602 ; N uni2239 ; G 2019
U 8762 ; WX 602 ; N uni223A ; G 2020
U 8763 ; WX 602 ; N uni223B ; G 2021
U 8764 ; WX 602 ; N similar ; G 2022
U 8765 ; WX 602 ; N uni223D ; G 2023
U 8769 ; WX 602 ; N uni2241 ; G 2024
U 8770 ; WX 602 ; N uni2242 ; G 2025
U 8771 ; WX 602 ; N uni2243 ; G 2026
U 8772 ; WX 602 ; N uni2244 ; G 2027
U 8773 ; WX 602 ; N congruent ; G 2028
U 8774 ; WX 602 ; N uni2246 ; G 2029
U 8775 ; WX 602 ; N uni2247 ; G 2030
U 8776 ; WX 602 ; N approxequal ; G 2031
U 8777 ; WX 602 ; N uni2249 ; G 2032
U 8778 ; WX 602 ; N uni224A ; G 2033
U 8779 ; WX 602 ; N uni224B ; G 2034
U 8780 ; WX 602 ; N uni224C ; G 2035
U 8781 ; WX 602 ; N uni224D ; G 2036
U 8782 ; WX 602 ; N uni224E ; G 2037
U 8783 ; WX 602 ; N uni224F ; G 2038
U 8784 ; WX 602 ; N uni2250 ; G 2039
U 8785 ; WX 602 ; N uni2251 ; G 2040
U 8786 ; WX 602 ; N uni2252 ; G 2041
U 8787 ; WX 602 ; N uni2253 ; G 2042
U 8788 ; WX 602 ; N uni2254 ; G 2043
U 8789 ; WX 602 ; N uni2255 ; G 2044
U 8790 ; WX 602 ; N uni2256 ; G 2045
U 8791 ; WX 602 ; N uni2257 ; G 2046
U 8792 ; WX 602 ; N uni2258 ; G 2047
U 8793 ; WX 602 ; N uni2259 ; G 2048
U 8794 ; WX 602 ; N uni225A ; G 2049
U 8795 ; WX 602 ; N uni225B ; G 2050
U 8796 ; WX 602 ; N uni225C ; G 2051
U 8797 ; WX 602 ; N uni225D ; G 2052
U 8798 ; WX 602 ; N uni225E ; G 2053
U 8799 ; WX 602 ; N uni225F ; G 2054
U 8800 ; WX 602 ; N notequal ; G 2055
U 8801 ; WX 602 ; N equivalence ; G 2056
U 8802 ; WX 602 ; N uni2262 ; G 2057
U 8803 ; WX 602 ; N uni2263 ; G 2058
U 8804 ; WX 602 ; N lessequal ; G 2059
U 8805 ; WX 602 ; N greaterequal ; G 2060
U 8806 ; WX 602 ; N uni2266 ; G 2061
U 8807 ; WX 602 ; N uni2267 ; G 2062
U 8808 ; WX 602 ; N uni2268 ; G 2063
U 8809 ; WX 602 ; N uni2269 ; G 2064
U 8813 ; WX 602 ; N uni226D ; G 2065
U 8814 ; WX 602 ; N uni226E ; G 2066
U 8815 ; WX 602 ; N uni226F ; G 2067
U 8816 ; WX 602 ; N uni2270 ; G 2068
U 8817 ; WX 602 ; N uni2271 ; G 2069
U 8818 ; WX 602 ; N uni2272 ; G 2070
U 8819 ; WX 602 ; N uni2273 ; G 2071
U 8820 ; WX 602 ; N uni2274 ; G 2072
U 8821 ; WX 602 ; N uni2275 ; G 2073
U 8822 ; WX 602 ; N uni2276 ; G 2074
U 8823 ; WX 602 ; N uni2277 ; G 2075
U 8824 ; WX 602 ; N uni2278 ; G 2076
U 8825 ; WX 602 ; N uni2279 ; G 2077
U 8826 ; WX 602 ; N uni227A ; G 2078
U 8827 ; WX 602 ; N uni227B ; G 2079
U 8828 ; WX 602 ; N uni227C ; G 2080
U 8829 ; WX 602 ; N uni227D ; G 2081
U 8830 ; WX 602 ; N uni227E ; G 2082
U 8831 ; WX 602 ; N uni227F ; G 2083
U 8832 ; WX 602 ; N uni2280 ; G 2084
U 8833 ; WX 602 ; N uni2281 ; G 2085
U 8834 ; WX 602 ; N propersubset ; G 2086
U 8835 ; WX 602 ; N propersuperset ; G 2087
U 8836 ; WX 602 ; N notsubset ; G 2088
U 8837 ; WX 602 ; N uni2285 ; G 2089
U 8838 ; WX 602 ; N reflexsubset ; G 2090
U 8839 ; WX 602 ; N reflexsuperset ; G 2091
U 8840 ; WX 602 ; N uni2288 ; G 2092
U 8841 ; WX 602 ; N uni2289 ; G 2093
U 8842 ; WX 602 ; N uni228A ; G 2094
U 8843 ; WX 602 ; N uni228B ; G 2095
U 8845 ; WX 602 ; N uni228D ; G 2096
U 8846 ; WX 602 ; N uni228E ; G 2097
U 8847 ; WX 602 ; N uni228F ; G 2098
U 8848 ; WX 602 ; N uni2290 ; G 2099
U 8849 ; WX 602 ; N uni2291 ; G 2100
U 8850 ; WX 602 ; N uni2292 ; G 2101
U 8851 ; WX 602 ; N uni2293 ; G 2102
U 8852 ; WX 602 ; N uni2294 ; G 2103
U 8853 ; WX 602 ; N circleplus ; G 2104
U 8854 ; WX 602 ; N uni2296 ; G 2105
U 8855 ; WX 602 ; N circlemultiply ; G 2106
U 8856 ; WX 602 ; N uni2298 ; G 2107
U 8857 ; WX 602 ; N uni2299 ; G 2108
U 8858 ; WX 602 ; N uni229A ; G 2109
U 8859 ; WX 602 ; N uni229B ; G 2110
U 8860 ; WX 602 ; N uni229C ; G 2111
U 8861 ; WX 602 ; N uni229D ; G 2112
U 8862 ; WX 602 ; N uni229E ; G 2113
U 8863 ; WX 602 ; N uni229F ; G 2114
U 8864 ; WX 602 ; N uni22A0 ; G 2115
U 8865 ; WX 602 ; N uni22A1 ; G 2116
U 8866 ; WX 602 ; N uni22A2 ; G 2117
U 8867 ; WX 602 ; N uni22A3 ; G 2118
U 8868 ; WX 602 ; N uni22A4 ; G 2119
U 8869 ; WX 602 ; N perpendicular ; G 2120
U 8882 ; WX 602 ; N uni22B2 ; G 2121
U 8883 ; WX 602 ; N uni22B3 ; G 2122
U 8884 ; WX 602 ; N uni22B4 ; G 2123
U 8885 ; WX 602 ; N uni22B5 ; G 2124
U 8888 ; WX 602 ; N uni22B8 ; G 2125
U 8898 ; WX 602 ; N uni22C2 ; G 2126
U 8899 ; WX 602 ; N uni22C3 ; G 2127
U 8900 ; WX 602 ; N uni22C4 ; G 2128
U 8901 ; WX 602 ; N dotmath ; G 2129
U 8902 ; WX 602 ; N uni22C6 ; G 2130
U 8909 ; WX 602 ; N uni22CD ; G 2131
U 8910 ; WX 602 ; N uni22CE ; G 2132
U 8911 ; WX 602 ; N uni22CF ; G 2133
U 8912 ; WX 602 ; N uni22D0 ; G 2134
U 8913 ; WX 602 ; N uni22D1 ; G 2135
U 8922 ; WX 602 ; N uni22DA ; G 2136
U 8923 ; WX 602 ; N uni22DB ; G 2137
U 8924 ; WX 602 ; N uni22DC ; G 2138
U 8925 ; WX 602 ; N uni22DD ; G 2139
U 8926 ; WX 602 ; N uni22DE ; G 2140
U 8927 ; WX 602 ; N uni22DF ; G 2141
U 8928 ; WX 602 ; N uni22E0 ; G 2142
U 8929 ; WX 602 ; N uni22E1 ; G 2143
U 8930 ; WX 602 ; N uni22E2 ; G 2144
U 8931 ; WX 602 ; N uni22E3 ; G 2145
U 8932 ; WX 602 ; N uni22E4 ; G 2146
U 8933 ; WX 602 ; N uni22E5 ; G 2147
U 8934 ; WX 602 ; N uni22E6 ; G 2148
U 8935 ; WX 602 ; N uni22E7 ; G 2149
U 8936 ; WX 602 ; N uni22E8 ; G 2150
U 8937 ; WX 602 ; N uni22E9 ; G 2151
U 8943 ; WX 602 ; N uni22EF ; G 2152
U 8960 ; WX 602 ; N uni2300 ; G 2153
U 8961 ; WX 602 ; N uni2301 ; G 2154
U 8962 ; WX 602 ; N house ; G 2155
U 8963 ; WX 602 ; N uni2303 ; G 2156
U 8964 ; WX 602 ; N uni2304 ; G 2157
U 8965 ; WX 602 ; N uni2305 ; G 2158
U 8966 ; WX 602 ; N uni2306 ; G 2159
U 8968 ; WX 602 ; N uni2308 ; G 2160
U 8969 ; WX 602 ; N uni2309 ; G 2161
U 8970 ; WX 602 ; N uni230A ; G 2162
U 8971 ; WX 602 ; N uni230B ; G 2163
U 8972 ; WX 602 ; N uni230C ; G 2164
U 8973 ; WX 602 ; N uni230D ; G 2165
U 8974 ; WX 602 ; N uni230E ; G 2166
U 8975 ; WX 602 ; N uni230F ; G 2167
U 8976 ; WX 602 ; N revlogicalnot ; G 2168
U 8977 ; WX 602 ; N uni2311 ; G 2169
U 8978 ; WX 602 ; N uni2312 ; G 2170
U 8979 ; WX 602 ; N uni2313 ; G 2171
U 8980 ; WX 602 ; N uni2314 ; G 2172
U 8981 ; WX 602 ; N uni2315 ; G 2173
U 8984 ; WX 602 ; N uni2318 ; G 2174
U 8985 ; WX 602 ; N uni2319 ; G 2175
U 8988 ; WX 602 ; N uni231C ; G 2176
U 8989 ; WX 602 ; N uni231D ; G 2177
U 8990 ; WX 602 ; N uni231E ; G 2178
U 8991 ; WX 602 ; N uni231F ; G 2179
U 8992 ; WX 602 ; N integraltp ; G 2180
U 8993 ; WX 602 ; N integralbt ; G 2181
U 8997 ; WX 602 ; N uni2325 ; G 2182
U 8998 ; WX 602 ; N uni2326 ; G 2183
U 8999 ; WX 602 ; N uni2327 ; G 2184
U 9000 ; WX 602 ; N uni2328 ; G 2185
U 9003 ; WX 602 ; N uni232B ; G 2186
U 9013 ; WX 602 ; N uni2335 ; G 2187
U 9014 ; WX 602 ; N uni2336 ; G 2188
U 9015 ; WX 602 ; N uni2337 ; G 2189
U 9016 ; WX 602 ; N uni2338 ; G 2190
U 9017 ; WX 602 ; N uni2339 ; G 2191
U 9018 ; WX 602 ; N uni233A ; G 2192
U 9019 ; WX 602 ; N uni233B ; G 2193
U 9020 ; WX 602 ; N uni233C ; G 2194
U 9021 ; WX 602 ; N uni233D ; G 2195
U 9022 ; WX 602 ; N uni233E ; G 2196
U 9023 ; WX 602 ; N uni233F ; G 2197
U 9024 ; WX 602 ; N uni2340 ; G 2198
U 9025 ; WX 602 ; N uni2341 ; G 2199
U 9026 ; WX 602 ; N uni2342 ; G 2200
U 9027 ; WX 602 ; N uni2343 ; G 2201
U 9028 ; WX 602 ; N uni2344 ; G 2202
U 9029 ; WX 602 ; N uni2345 ; G 2203
U 9030 ; WX 602 ; N uni2346 ; G 2204
U 9031 ; WX 602 ; N uni2347 ; G 2205
U 9032 ; WX 602 ; N uni2348 ; G 2206
U 9033 ; WX 602 ; N uni2349 ; G 2207
U 9034 ; WX 602 ; N uni234A ; G 2208
U 9035 ; WX 602 ; N uni234B ; G 2209
U 9036 ; WX 602 ; N uni234C ; G 2210
U 9037 ; WX 602 ; N uni234D ; G 2211
U 9038 ; WX 602 ; N uni234E ; G 2212
U 9039 ; WX 602 ; N uni234F ; G 2213
U 9040 ; WX 602 ; N uni2350 ; G 2214
U 9041 ; WX 602 ; N uni2351 ; G 2215
U 9042 ; WX 602 ; N uni2352 ; G 2216
U 9043 ; WX 602 ; N uni2353 ; G 2217
U 9044 ; WX 602 ; N uni2354 ; G 2218
U 9045 ; WX 602 ; N uni2355 ; G 2219
U 9046 ; WX 602 ; N uni2356 ; G 2220
U 9047 ; WX 602 ; N uni2357 ; G 2221
U 9048 ; WX 602 ; N uni2358 ; G 2222
U 9049 ; WX 602 ; N uni2359 ; G 2223
U 9050 ; WX 602 ; N uni235A ; G 2224
U 9051 ; WX 602 ; N uni235B ; G 2225
U 9052 ; WX 602 ; N uni235C ; G 2226
U 9053 ; WX 602 ; N uni235D ; G 2227
U 9054 ; WX 602 ; N uni235E ; G 2228
U 9055 ; WX 602 ; N uni235F ; G 2229
U 9056 ; WX 602 ; N uni2360 ; G 2230
U 9057 ; WX 602 ; N uni2361 ; G 2231
U 9058 ; WX 602 ; N uni2362 ; G 2232
U 9059 ; WX 602 ; N uni2363 ; G 2233
U 9060 ; WX 602 ; N uni2364 ; G 2234
U 9061 ; WX 602 ; N uni2365 ; G 2235
U 9062 ; WX 602 ; N uni2366 ; G 2236
U 9063 ; WX 602 ; N uni2367 ; G 2237
U 9064 ; WX 602 ; N uni2368 ; G 2238
U 9065 ; WX 602 ; N uni2369 ; G 2239
U 9066 ; WX 602 ; N uni236A ; G 2240
U 9067 ; WX 602 ; N uni236B ; G 2241
U 9068 ; WX 602 ; N uni236C ; G 2242
U 9069 ; WX 602 ; N uni236D ; G 2243
U 9070 ; WX 602 ; N uni236E ; G 2244
U 9071 ; WX 602 ; N uni236F ; G 2245
U 9072 ; WX 602 ; N uni2370 ; G 2246
U 9073 ; WX 602 ; N uni2371 ; G 2247
U 9074 ; WX 602 ; N uni2372 ; G 2248
U 9075 ; WX 602 ; N uni2373 ; G 2249
U 9076 ; WX 602 ; N uni2374 ; G 2250
U 9077 ; WX 602 ; N uni2375 ; G 2251
U 9078 ; WX 602 ; N uni2376 ; G 2252
U 9079 ; WX 602 ; N uni2377 ; G 2253
U 9080 ; WX 602 ; N uni2378 ; G 2254
U 9081 ; WX 602 ; N uni2379 ; G 2255
U 9082 ; WX 602 ; N uni237A ; G 2256
U 9085 ; WX 602 ; N uni237D ; G 2257
U 9088 ; WX 602 ; N uni2380 ; G 2258
U 9089 ; WX 602 ; N uni2381 ; G 2259
U 9090 ; WX 602 ; N uni2382 ; G 2260
U 9091 ; WX 602 ; N uni2383 ; G 2261
U 9096 ; WX 602 ; N uni2388 ; G 2262
U 9097 ; WX 602 ; N uni2389 ; G 2263
U 9098 ; WX 602 ; N uni238A ; G 2264
U 9099 ; WX 602 ; N uni238B ; G 2265
U 9109 ; WX 602 ; N uni2395 ; G 2266
U 9115 ; WX 602 ; N uni239B ; G 2267
U 9116 ; WX 602 ; N uni239C ; G 2268
U 9117 ; WX 602 ; N uni239D ; G 2269
U 9118 ; WX 602 ; N uni239E ; G 2270
U 9119 ; WX 602 ; N uni239F ; G 2271
U 9120 ; WX 602 ; N uni23A0 ; G 2272
U 9121 ; WX 602 ; N uni23A1 ; G 2273
U 9122 ; WX 602 ; N uni23A2 ; G 2274
U 9123 ; WX 602 ; N uni23A3 ; G 2275
U 9124 ; WX 602 ; N uni23A4 ; G 2276
U 9125 ; WX 602 ; N uni23A5 ; G 2277
U 9126 ; WX 602 ; N uni23A6 ; G 2278
U 9127 ; WX 602 ; N uni23A7 ; G 2279
U 9128 ; WX 602 ; N uni23A8 ; G 2280
U 9129 ; WX 602 ; N uni23A9 ; G 2281
U 9130 ; WX 602 ; N uni23AA ; G 2282
U 9131 ; WX 602 ; N uni23AB ; G 2283
U 9132 ; WX 602 ; N uni23AC ; G 2284
U 9133 ; WX 602 ; N uni23AD ; G 2285
U 9134 ; WX 602 ; N uni23AE ; G 2286
U 9166 ; WX 602 ; N uni23CE ; G 2287
U 9167 ; WX 602 ; N uni23CF ; G 2288
U 9251 ; WX 602 ; N uni2423 ; G 2289
U 9472 ; WX 602 ; N SF100000 ; G 2290
U 9473 ; WX 602 ; N uni2501 ; G 2291
U 9474 ; WX 602 ; N SF110000 ; G 2292
U 9475 ; WX 602 ; N uni2503 ; G 2293
U 9476 ; WX 602 ; N uni2504 ; G 2294
U 9477 ; WX 602 ; N uni2505 ; G 2295
U 9478 ; WX 602 ; N uni2506 ; G 2296
U 9479 ; WX 602 ; N uni2507 ; G 2297
U 9480 ; WX 602 ; N uni2508 ; G 2298
U 9481 ; WX 602 ; N uni2509 ; G 2299
U 9482 ; WX 602 ; N uni250A ; G 2300
U 9483 ; WX 602 ; N uni250B ; G 2301
U 9484 ; WX 602 ; N SF010000 ; G 2302
U 9485 ; WX 602 ; N uni250D ; G 2303
U 9486 ; WX 602 ; N uni250E ; G 2304
U 9487 ; WX 602 ; N uni250F ; G 2305
U 9488 ; WX 602 ; N SF030000 ; G 2306
U 9489 ; WX 602 ; N uni2511 ; G 2307
U 9490 ; WX 602 ; N uni2512 ; G 2308
U 9491 ; WX 602 ; N uni2513 ; G 2309
U 9492 ; WX 602 ; N SF020000 ; G 2310
U 9493 ; WX 602 ; N uni2515 ; G 2311
U 9494 ; WX 602 ; N uni2516 ; G 2312
U 9495 ; WX 602 ; N uni2517 ; G 2313
U 9496 ; WX 602 ; N SF040000 ; G 2314
U 9497 ; WX 602 ; N uni2519 ; G 2315
U 9498 ; WX 602 ; N uni251A ; G 2316
U 9499 ; WX 602 ; N uni251B ; G 2317
U 9500 ; WX 602 ; N SF080000 ; G 2318
U 9501 ; WX 602 ; N uni251D ; G 2319
U 9502 ; WX 602 ; N uni251E ; G 2320
U 9503 ; WX 602 ; N uni251F ; G 2321
U 9504 ; WX 602 ; N uni2520 ; G 2322
U 9505 ; WX 602 ; N uni2521 ; G 2323
U 9506 ; WX 602 ; N uni2522 ; G 2324
U 9507 ; WX 602 ; N uni2523 ; G 2325
U 9508 ; WX 602 ; N SF090000 ; G 2326
U 9509 ; WX 602 ; N uni2525 ; G 2327
U 9510 ; WX 602 ; N uni2526 ; G 2328
U 9511 ; WX 602 ; N uni2527 ; G 2329
U 9512 ; WX 602 ; N uni2528 ; G 2330
U 9513 ; WX 602 ; N uni2529 ; G 2331
U 9514 ; WX 602 ; N uni252A ; G 2332
U 9515 ; WX 602 ; N uni252B ; G 2333
U 9516 ; WX 602 ; N SF060000 ; G 2334
U 9517 ; WX 602 ; N uni252D ; G 2335
U 9518 ; WX 602 ; N uni252E ; G 2336
U 9519 ; WX 602 ; N uni252F ; G 2337
U 9520 ; WX 602 ; N uni2530 ; G 2338
U 9521 ; WX 602 ; N uni2531 ; G 2339
U 9522 ; WX 602 ; N uni2532 ; G 2340
U 9523 ; WX 602 ; N uni2533 ; G 2341
U 9524 ; WX 602 ; N SF070000 ; G 2342
U 9525 ; WX 602 ; N uni2535 ; G 2343
U 9526 ; WX 602 ; N uni2536 ; G 2344
U 9527 ; WX 602 ; N uni2537 ; G 2345
U 9528 ; WX 602 ; N uni2538 ; G 2346
U 9529 ; WX 602 ; N uni2539 ; G 2347
U 9530 ; WX 602 ; N uni253A ; G 2348
U 9531 ; WX 602 ; N uni253B ; G 2349
U 9532 ; WX 602 ; N SF050000 ; G 2350
U 9533 ; WX 602 ; N uni253D ; G 2351
U 9534 ; WX 602 ; N uni253E ; G 2352
U 9535 ; WX 602 ; N uni253F ; G 2353
U 9536 ; WX 602 ; N uni2540 ; G 2354
U 9537 ; WX 602 ; N uni2541 ; G 2355
U 9538 ; WX 602 ; N uni2542 ; G 2356
U 9539 ; WX 602 ; N uni2543 ; G 2357
U 9540 ; WX 602 ; N uni2544 ; G 2358
U 9541 ; WX 602 ; N uni2545 ; G 2359
U 9542 ; WX 602 ; N uni2546 ; G 2360
U 9543 ; WX 602 ; N uni2547 ; G 2361
U 9544 ; WX 602 ; N uni2548 ; G 2362
U 9545 ; WX 602 ; N uni2549 ; G 2363
U 9546 ; WX 602 ; N uni254A ; G 2364
U 9547 ; WX 602 ; N uni254B ; G 2365
U 9548 ; WX 602 ; N uni254C ; G 2366
U 9549 ; WX 602 ; N uni254D ; G 2367
U 9550 ; WX 602 ; N uni254E ; G 2368
U 9551 ; WX 602 ; N uni254F ; G 2369
U 9552 ; WX 602 ; N SF430000 ; G 2370
U 9553 ; WX 602 ; N SF240000 ; G 2371
U 9554 ; WX 602 ; N SF510000 ; G 2372
U 9555 ; WX 602 ; N SF520000 ; G 2373
U 9556 ; WX 602 ; N SF390000 ; G 2374
U 9557 ; WX 602 ; N SF220000 ; G 2375
U 9558 ; WX 602 ; N SF210000 ; G 2376
U 9559 ; WX 602 ; N SF250000 ; G 2377
U 9560 ; WX 602 ; N SF500000 ; G 2378
U 9561 ; WX 602 ; N SF490000 ; G 2379
U 9562 ; WX 602 ; N SF380000 ; G 2380
U 9563 ; WX 602 ; N SF280000 ; G 2381
U 9564 ; WX 602 ; N SF270000 ; G 2382
U 9565 ; WX 602 ; N SF260000 ; G 2383
U 9566 ; WX 602 ; N SF360000 ; G 2384
U 9567 ; WX 602 ; N SF370000 ; G 2385
U 9568 ; WX 602 ; N SF420000 ; G 2386
U 9569 ; WX 602 ; N SF190000 ; G 2387
U 9570 ; WX 602 ; N SF200000 ; G 2388
U 9571 ; WX 602 ; N SF230000 ; G 2389
U 9572 ; WX 602 ; N SF470000 ; G 2390
U 9573 ; WX 602 ; N SF480000 ; G 2391
U 9574 ; WX 602 ; N SF410000 ; G 2392
U 9575 ; WX 602 ; N SF450000 ; G 2393
U 9576 ; WX 602 ; N SF460000 ; G 2394
U 9577 ; WX 602 ; N SF400000 ; G 2395
U 9578 ; WX 602 ; N SF540000 ; G 2396
U 9579 ; WX 602 ; N SF530000 ; G 2397
U 9580 ; WX 602 ; N SF440000 ; G 2398
U 9581 ; WX 602 ; N uni256D ; G 2399
U 9582 ; WX 602 ; N uni256E ; G 2400
U 9583 ; WX 602 ; N uni256F ; G 2401
U 9584 ; WX 602 ; N uni2570 ; G 2402
U 9585 ; WX 602 ; N uni2571 ; G 2403
U 9586 ; WX 602 ; N uni2572 ; G 2404
U 9587 ; WX 602 ; N uni2573 ; G 2405
U 9588 ; WX 602 ; N uni2574 ; G 2406
U 9589 ; WX 602 ; N uni2575 ; G 2407
U 9590 ; WX 602 ; N uni2576 ; G 2408
U 9591 ; WX 602 ; N uni2577 ; G 2409
U 9592 ; WX 602 ; N uni2578 ; G 2410
U 9593 ; WX 602 ; N uni2579 ; G 2411
U 9594 ; WX 602 ; N uni257A ; G 2412
U 9595 ; WX 602 ; N uni257B ; G 2413
U 9596 ; WX 602 ; N uni257C ; G 2414
U 9597 ; WX 602 ; N uni257D ; G 2415
U 9598 ; WX 602 ; N uni257E ; G 2416
U 9599 ; WX 602 ; N uni257F ; G 2417
U 9600 ; WX 602 ; N upblock ; G 2418
U 9601 ; WX 602 ; N uni2581 ; G 2419
U 9602 ; WX 602 ; N uni2582 ; G 2420
U 9603 ; WX 602 ; N uni2583 ; G 2421
U 9604 ; WX 602 ; N dnblock ; G 2422
U 9605 ; WX 602 ; N uni2585 ; G 2423
U 9606 ; WX 602 ; N uni2586 ; G 2424
U 9607 ; WX 602 ; N uni2587 ; G 2425
U 9608 ; WX 602 ; N block ; G 2426
U 9609 ; WX 602 ; N uni2589 ; G 2427
U 9610 ; WX 602 ; N uni258A ; G 2428
U 9611 ; WX 602 ; N uni258B ; G 2429
U 9612 ; WX 602 ; N lfblock ; G 2430
U 9613 ; WX 602 ; N uni258D ; G 2431
U 9614 ; WX 602 ; N uni258E ; G 2432
U 9615 ; WX 602 ; N uni258F ; G 2433
U 9616 ; WX 602 ; N rtblock ; G 2434
U 9617 ; WX 602 ; N ltshade ; G 2435
U 9618 ; WX 602 ; N shade ; G 2436
U 9619 ; WX 602 ; N dkshade ; G 2437
U 9620 ; WX 602 ; N uni2594 ; G 2438
U 9621 ; WX 602 ; N uni2595 ; G 2439
U 9622 ; WX 602 ; N uni2596 ; G 2440
U 9623 ; WX 602 ; N uni2597 ; G 2441
U 9624 ; WX 602 ; N uni2598 ; G 2442
U 9625 ; WX 602 ; N uni2599 ; G 2443
U 9626 ; WX 602 ; N uni259A ; G 2444
U 9627 ; WX 602 ; N uni259B ; G 2445
U 9628 ; WX 602 ; N uni259C ; G 2446
U 9629 ; WX 602 ; N uni259D ; G 2447
U 9630 ; WX 602 ; N uni259E ; G 2448
U 9631 ; WX 602 ; N uni259F ; G 2449
U 9632 ; WX 602 ; N filledbox ; G 2450
U 9633 ; WX 602 ; N H22073 ; G 2451
U 9634 ; WX 602 ; N uni25A2 ; G 2452
U 9635 ; WX 602 ; N uni25A3 ; G 2453
U 9636 ; WX 602 ; N uni25A4 ; G 2454
U 9637 ; WX 602 ; N uni25A5 ; G 2455
U 9638 ; WX 602 ; N uni25A6 ; G 2456
U 9639 ; WX 602 ; N uni25A7 ; G 2457
U 9640 ; WX 602 ; N uni25A8 ; G 2458
U 9641 ; WX 602 ; N uni25A9 ; G 2459
U 9642 ; WX 602 ; N H18543 ; G 2460
U 9643 ; WX 602 ; N H18551 ; G 2461
U 9644 ; WX 602 ; N filledrect ; G 2462
U 9645 ; WX 602 ; N uni25AD ; G 2463
U 9646 ; WX 602 ; N uni25AE ; G 2464
U 9647 ; WX 602 ; N uni25AF ; G 2465
U 9648 ; WX 602 ; N uni25B0 ; G 2466
U 9649 ; WX 602 ; N uni25B1 ; G 2467
U 9650 ; WX 602 ; N triagup ; G 2468
U 9651 ; WX 602 ; N uni25B3 ; G 2469
U 9652 ; WX 602 ; N uni25B4 ; G 2470
U 9653 ; WX 602 ; N uni25B5 ; G 2471
U 9654 ; WX 602 ; N uni25B6 ; G 2472
U 9655 ; WX 602 ; N uni25B7 ; G 2473
U 9656 ; WX 602 ; N uni25B8 ; G 2474
U 9657 ; WX 602 ; N uni25B9 ; G 2475
U 9658 ; WX 602 ; N triagrt ; G 2476
U 9659 ; WX 602 ; N uni25BB ; G 2477
U 9660 ; WX 602 ; N triagdn ; G 2478
U 9661 ; WX 602 ; N uni25BD ; G 2479
U 9662 ; WX 602 ; N uni25BE ; G 2480
U 9663 ; WX 602 ; N uni25BF ; G 2481
U 9664 ; WX 602 ; N uni25C0 ; G 2482
U 9665 ; WX 602 ; N uni25C1 ; G 2483
U 9666 ; WX 602 ; N uni25C2 ; G 2484
U 9667 ; WX 602 ; N uni25C3 ; G 2485
U 9668 ; WX 602 ; N triaglf ; G 2486
U 9669 ; WX 602 ; N uni25C5 ; G 2487
U 9670 ; WX 602 ; N uni25C6 ; G 2488
U 9671 ; WX 602 ; N uni25C7 ; G 2489
U 9672 ; WX 602 ; N uni25C8 ; G 2490
U 9673 ; WX 602 ; N uni25C9 ; G 2491
U 9674 ; WX 602 ; N lozenge ; G 2492
U 9675 ; WX 602 ; N circle ; G 2493
U 9676 ; WX 602 ; N uni25CC ; G 2494
U 9677 ; WX 602 ; N uni25CD ; G 2495
U 9678 ; WX 602 ; N uni25CE ; G 2496
U 9679 ; WX 602 ; N H18533 ; G 2497
U 9680 ; WX 602 ; N uni25D0 ; G 2498
U 9681 ; WX 602 ; N uni25D1 ; G 2499
U 9682 ; WX 602 ; N uni25D2 ; G 2500
U 9683 ; WX 602 ; N uni25D3 ; G 2501
U 9684 ; WX 602 ; N uni25D4 ; G 2502
U 9685 ; WX 602 ; N uni25D5 ; G 2503
U 9686 ; WX 602 ; N uni25D6 ; G 2504
U 9687 ; WX 602 ; N uni25D7 ; G 2505
U 9688 ; WX 602 ; N invbullet ; G 2506
U 9689 ; WX 602 ; N invcircle ; G 2507
U 9690 ; WX 602 ; N uni25DA ; G 2508
U 9691 ; WX 602 ; N uni25DB ; G 2509
U 9692 ; WX 602 ; N uni25DC ; G 2510
U 9693 ; WX 602 ; N uni25DD ; G 2511
U 9694 ; WX 602 ; N uni25DE ; G 2512
U 9695 ; WX 602 ; N uni25DF ; G 2513
U 9696 ; WX 602 ; N uni25E0 ; G 2514
U 9697 ; WX 602 ; N uni25E1 ; G 2515
U 9698 ; WX 602 ; N uni25E2 ; G 2516
U 9699 ; WX 602 ; N uni25E3 ; G 2517
U 9700 ; WX 602 ; N uni25E4 ; G 2518
U 9701 ; WX 602 ; N uni25E5 ; G 2519
U 9702 ; WX 602 ; N openbullet ; G 2520
U 9703 ; WX 602 ; N uni25E7 ; G 2521
U 9704 ; WX 602 ; N uni25E8 ; G 2522
U 9705 ; WX 602 ; N uni25E9 ; G 2523
U 9706 ; WX 602 ; N uni25EA ; G 2524
U 9707 ; WX 602 ; N uni25EB ; G 2525
U 9708 ; WX 602 ; N uni25EC ; G 2526
U 9709 ; WX 602 ; N uni25ED ; G 2527
U 9710 ; WX 602 ; N uni25EE ; G 2528
U 9711 ; WX 602 ; N uni25EF ; G 2529
U 9712 ; WX 602 ; N uni25F0 ; G 2530
U 9713 ; WX 602 ; N uni25F1 ; G 2531
U 9714 ; WX 602 ; N uni25F2 ; G 2532
U 9715 ; WX 602 ; N uni25F3 ; G 2533
U 9716 ; WX 602 ; N uni25F4 ; G 2534
U 9717 ; WX 602 ; N uni25F5 ; G 2535
U 9718 ; WX 602 ; N uni25F6 ; G 2536
U 9719 ; WX 602 ; N uni25F7 ; G 2537
U 9720 ; WX 602 ; N uni25F8 ; G 2538
U 9721 ; WX 602 ; N uni25F9 ; G 2539
U 9722 ; WX 602 ; N uni25FA ; G 2540
U 9723 ; WX 602 ; N uni25FB ; G 2541
U 9724 ; WX 602 ; N uni25FC ; G 2542
U 9725 ; WX 602 ; N uni25FD ; G 2543
U 9726 ; WX 602 ; N uni25FE ; G 2544
U 9727 ; WX 602 ; N uni25FF ; G 2545
U 9728 ; WX 602 ; N uni2600 ; G 2546
U 9784 ; WX 602 ; N uni2638 ; G 2547
U 9785 ; WX 602 ; N uni2639 ; G 2548
U 9786 ; WX 602 ; N smileface ; G 2549
U 9787 ; WX 602 ; N invsmileface ; G 2550
U 9788 ; WX 602 ; N sun ; G 2551
U 9791 ; WX 602 ; N uni263F ; G 2552
U 9792 ; WX 602 ; N female ; G 2553
U 9793 ; WX 602 ; N uni2641 ; G 2554
U 9794 ; WX 602 ; N male ; G 2555
U 9795 ; WX 602 ; N uni2643 ; G 2556
U 9796 ; WX 602 ; N uni2644 ; G 2557
U 9797 ; WX 602 ; N uni2645 ; G 2558
U 9798 ; WX 602 ; N uni2646 ; G 2559
U 9799 ; WX 602 ; N uni2647 ; G 2560
U 9824 ; WX 602 ; N spade ; G 2561
U 9825 ; WX 602 ; N uni2661 ; G 2562
U 9826 ; WX 602 ; N uni2662 ; G 2563
U 9827 ; WX 602 ; N club ; G 2564
U 9828 ; WX 602 ; N uni2664 ; G 2565
U 9829 ; WX 602 ; N heart ; G 2566
U 9830 ; WX 602 ; N diamond ; G 2567
U 9831 ; WX 602 ; N uni2667 ; G 2568
U 9833 ; WX 602 ; N uni2669 ; G 2569
U 9834 ; WX 602 ; N musicalnote ; G 2570
U 9835 ; WX 602 ; N musicalnotedbl ; G 2571
U 9836 ; WX 602 ; N uni266C ; G 2572
U 9837 ; WX 602 ; N uni266D ; G 2573
U 9838 ; WX 602 ; N uni266E ; G 2574
U 9839 ; WX 602 ; N uni266F ; G 2575
U 10178 ; WX 602 ; N uni27C2 ; G 2576
U 10181 ; WX 602 ; N uni27C5 ; G 2577
U 10182 ; WX 602 ; N uni27C6 ; G 2578
U 10204 ; WX 602 ; N uni27DC ; G 2579
U 10208 ; WX 602 ; N uni27E0 ; G 2580
U 10214 ; WX 602 ; N uni27E6 ; G 2581
U 10215 ; WX 602 ; N uni27E7 ; G 2582
U 10216 ; WX 602 ; N uni27E8 ; G 2583
U 10217 ; WX 602 ; N uni27E9 ; G 2584
U 10218 ; WX 602 ; N uni27EA ; G 2585
U 10219 ; WX 602 ; N uni27EB ; G 2586
U 10229 ; WX 602 ; N uni27F5 ; G 2587
U 10230 ; WX 602 ; N uni27F6 ; G 2588
U 10231 ; WX 602 ; N uni27F7 ; G 2589
U 10631 ; WX 602 ; N uni2987 ; G 2590
U 10632 ; WX 602 ; N uni2988 ; G 2591
U 10647 ; WX 602 ; N uni2997 ; G 2592
U 10648 ; WX 602 ; N uni2998 ; G 2593
U 10731 ; WX 602 ; N uni29EB ; G 2594
U 10746 ; WX 602 ; N uni29FA ; G 2595
U 10747 ; WX 602 ; N uni29FB ; G 2596
U 10752 ; WX 602 ; N uni2A00 ; G 2597
U 10799 ; WX 602 ; N uni2A2F ; G 2598
U 10858 ; WX 602 ; N uni2A6A ; G 2599
U 10859 ; WX 602 ; N uni2A6B ; G 2600
U 11013 ; WX 602 ; N uni2B05 ; G 2601
U 11014 ; WX 602 ; N uni2B06 ; G 2602
U 11015 ; WX 602 ; N uni2B07 ; G 2603
U 11016 ; WX 602 ; N uni2B08 ; G 2604
U 11017 ; WX 602 ; N uni2B09 ; G 2605
U 11018 ; WX 602 ; N uni2B0A ; G 2606
U 11019 ; WX 602 ; N uni2B0B ; G 2607
U 11020 ; WX 602 ; N uni2B0C ; G 2608
U 11021 ; WX 602 ; N uni2B0D ; G 2609
U 11026 ; WX 602 ; N uni2B12 ; G 2610
U 11027 ; WX 602 ; N uni2B13 ; G 2611
U 11028 ; WX 602 ; N uni2B14 ; G 2612
U 11029 ; WX 602 ; N uni2B15 ; G 2613
U 11030 ; WX 602 ; N uni2B16 ; G 2614
U 11031 ; WX 602 ; N uni2B17 ; G 2615
U 11032 ; WX 602 ; N uni2B18 ; G 2616
U 11033 ; WX 602 ; N uni2B19 ; G 2617
U 11034 ; WX 602 ; N uni2B1A ; G 2618
U 11364 ; WX 602 ; N uni2C64 ; G 2619
U 11373 ; WX 602 ; N uni2C6D ; G 2620
U 11374 ; WX 602 ; N uni2C6E ; G 2621
U 11375 ; WX 602 ; N uni2C6F ; G 2622
U 11376 ; WX 602 ; N uni2C70 ; G 2623
U 11381 ; WX 602 ; N uni2C75 ; G 2624
U 11382 ; WX 602 ; N uni2C76 ; G 2625
U 11383 ; WX 602 ; N uni2C77 ; G 2626
U 11385 ; WX 602 ; N uni2C79 ; G 2627
U 11386 ; WX 602 ; N uni2C7A ; G 2628
U 11388 ; WX 602 ; N uni2C7C ; G 2629
U 11389 ; WX 602 ; N uni2C7D ; G 2630
U 11390 ; WX 602 ; N uni2C7E ; G 2631
U 11391 ; WX 602 ; N uni2C7F ; G 2632
U 11800 ; WX 602 ; N uni2E18 ; G 2633
U 11807 ; WX 602 ; N uni2E1F ; G 2634
U 11810 ; WX 602 ; N uni2E22 ; G 2635
U 11811 ; WX 602 ; N uni2E23 ; G 2636
U 11812 ; WX 602 ; N uni2E24 ; G 2637
U 11813 ; WX 602 ; N uni2E25 ; G 2638
U 11822 ; WX 602 ; N uni2E2E ; G 2639
U 42760 ; WX 602 ; N uniA708 ; G 2640
U 42761 ; WX 602 ; N uniA709 ; G 2641
U 42762 ; WX 602 ; N uniA70A ; G 2642
U 42763 ; WX 602 ; N uniA70B ; G 2643
U 42764 ; WX 602 ; N uniA70C ; G 2644
U 42765 ; WX 602 ; N uniA70D ; G 2645
U 42766 ; WX 602 ; N uniA70E ; G 2646
U 42767 ; WX 602 ; N uniA70F ; G 2647
U 42768 ; WX 602 ; N uniA710 ; G 2648
U 42769 ; WX 602 ; N uniA711 ; G 2649
U 42770 ; WX 602 ; N uniA712 ; G 2650
U 42771 ; WX 602 ; N uniA713 ; G 2651
U 42772 ; WX 602 ; N uniA714 ; G 2652
U 42773 ; WX 602 ; N uniA715 ; G 2653
U 42774 ; WX 602 ; N uniA716 ; G 2654
U 42779 ; WX 602 ; N uniA71B ; G 2655
U 42780 ; WX 602 ; N uniA71C ; G 2656
U 42781 ; WX 602 ; N uniA71D ; G 2657
U 42782 ; WX 602 ; N uniA71E ; G 2658
U 42783 ; WX 602 ; N uniA71F ; G 2659
U 42786 ; WX 602 ; N uniA722 ; G 2660
U 42787 ; WX 602 ; N uniA723 ; G 2661
U 42788 ; WX 602 ; N uniA724 ; G 2662
U 42789 ; WX 602 ; N uniA725 ; G 2663
U 42790 ; WX 602 ; N uniA726 ; G 2664
U 42791 ; WX 602 ; N uniA727 ; G 2665
U 42889 ; WX 602 ; N uniA789 ; G 2666
U 42890 ; WX 602 ; N uniA78A ; G 2667
U 42891 ; WX 602 ; N uniA78B ; G 2668
U 42892 ; WX 602 ; N uniA78C ; G 2669
U 42893 ; WX 602 ; N uniA78D ; G 2670
U 42894 ; WX 602 ; N uniA78E ; G 2671
U 42896 ; WX 602 ; N uniA790 ; G 2672
U 42897 ; WX 602 ; N uniA791 ; G 2673
U 42922 ; WX 602 ; N uniA7AA ; G 2674
U 43000 ; WX 602 ; N uniA7F8 ; G 2675
U 43001 ; WX 602 ; N uniA7F9 ; G 2676
U 63173 ; WX 602 ; N uniF6C5 ; G 2677
U 64257 ; WX 602 ; N fi ; G 2678
U 64258 ; WX 602 ; N fl ; G 2679
U 65529 ; WX 602 ; N uniFFF9 ; G 2680
U 65530 ; WX 602 ; N uniFFFA ; G 2681
U 65531 ; WX 602 ; N uniFFFB ; G 2682
U 65532 ; WX 602 ; N uniFFFC ; G 2683
U 65533 ; WX 602 ; N uniFFFD ; G 2684
EndCharMetrics
EndFontMetrics
        FFTMs  ,   GDEFsp  H   GPOS/     9GSUB\  ;  OS/2  @   Vcmap_ҕ  A  Ncvt   Wl  0fpgm[k  Y   gasp    ZH   glyf  ZT head  =\   6hhea =   $hmtxIL =  jlocaP X$  4maxp'     name`   !postd $  }prep: +         =    )    )                            { |         0           
   DFLT &arab 0cyrl >grek Plao  \latn j                 
 SRB  
                    4 ISM  4KSM  4LSM  4MOL  4NSM  4ROM  4SKS  4SSM  4     mark  mark ,mark 4mkmk :rtbd B                          	 
   & . 6 > F P X `    R    x          	|   
        5    6   8     "    p         h    &   0     c" c               ]j ]j bj         $ 6 H Z l ~      P | H    0      P | H    < P     ,      T`      P | H             ~           h   h   h   n   
"(.4:@FLRX^djpv| $*06<BHNTZ`flrx~ &,28>DJPV\bhntz
"(.4:@FLRX^djpv| $*06<BHNTZ`flrx~ &,28>DJPV\ X   d | d h 0` tX tX   < |  0 0 hL  (   Tp lx   `x <D (D d | tX L\ 8( P @ @ tX tX 4 ` tX d  4 X H .  D 5j Tj `_ p i F W W  @ T Q X : B ` j Lj [ Z [j Ij W T Lj 4j K ] L @ j Vj 8 8 j bj t \  X T H  X T 8  X h d  X     ?j j ,j ,j T_ j ,j ,j Td Td d d Lp p O [   d   dX dx X dh h D X ,L l l Tp < X| l H H| Tt      l     < Tp     | D\ 8\ 8\ 8\ 8\      X ,l d \ 	 ,l ,l x D ,l ,l L   ,l l  l  l  l  p  l  h  l  l z z  ^ z z  ^ ^- d u j   8 j :K Q    ] Xm a d ju u  F X' U  @ L{ RK Ro '  L  .   : R x tX D  4 E n P p  WW  [{  " 3"% o(+ s;; wBC xF z "' )) +,   ~           h   h   h           $ 6 H Z l ~     h  5    h  [    h      Tl  +    h      h      h      \h        	|} 	   &   ,   2   8   >   D   J   P   V ]j ]j ]j ]j ]j bj ]j ]j h |    &,28>DJPV\bhntz
"(.4:@FLRX^djpv| $*06<BHNTZ`flrx~ &,28>DJPV\bhntz
"(.4:@FLRX^djpv|   dt    h d 8 | $ | ` H L D    \ t @ 4H     ( | XT     ( l  t < 0  x x _`  i F W W  @ T T [ : B ` L LL [ Z [ I W T L 4 K ] l 8 @ ^     @ b    X    X    X    X oM    !T    x  x     T T   & ~ O [   X P XD   ,a Df \ P h<   \  \ \ 0 , 0 @ ,   d  `  | tL `0   0  @ \      T ` @  L 8 4  5  D  8 0H < D  <  x (L  X $T  t                 0 T L h 0 p L h< p   l$ d ` 0 h8 <    
 P  Ld h  x 8 T  R  m $v  2z `  M ;) R D h p_ )I  R | o~ 4    WW  YZ \{  # $ ("% d(+ h;; l>A mD q"" '' )) +,   	|} 	   &   ,   2   8   >   D   J   P   V ]j ]j ]j ]j ]j bj ]j ]j h 	$f 	* $*06<BHNTZ`flrx~ &,28>DJPV\bhntz
"(.4:@FLRX^djpv| $*06<BHNTZ`flrx~ &,28>DJPV\bhntz
"(.4:@FLRX^djpv| $*06<BHNT D   h      x   z   O         h      D            h   *   h   D   h   h   h   h      D   h         h      h   v   h   hV    h   Y D   x         h   V V    h   x   h   h   s   D   V h   D   D   D   D   D   D   z   z   z   z   h   h   h   h   6      h   h   h   h   h   h   h   h   h   h   h   4   6                     v   v   v   v   h   h   h   h   h      h   h   h   h   h   h   h   h   h   h   V V V D   D                           6   h   6   h   z   v   z   v   z   v   z   v      hV    hV    hV hV             h   h   h   h   h   h   h   h      Y D      x      x      x      x               9   hV hV h   h   h   h   h   h   D      D      h   h   h   h   h   h   h   x   h   x   h   h   h   h   h   h   h   h   h   h      s   h   V h      h      h      h   h   h   h   h   h   h   h   
         6   6   h   h   hV V   h      "V hV    hV h   h   h   D   D   x            V h         h   XV    V j h   h   h   h   h   D         D   V h   hV V hV hV I   V   $ =   D ]    4   :   I   W   f   o   q   r                 	   "# &3 6k   	       |   ": P  &,28>DJPV\bhntz
"(.4:@FLRX^djpv|    	 						$	*	0	6	<	B	H	N	T  	Z  	`  	f  	l  	r  	x	~		    	  	  	  	  	  	  	  			  	  	  	  	  	  			  	  
  
  
  


 
&
,  
2  
8  
>  
D  
J  
P
V
\
b    
h  
n  
t  
z  
  
  
  
  
  
  
  
  
  
  


  
  
  
  
  


  
  
    
        "  (  .  4  :  @  F  LRX^d  j  p  v  |                                                 $*0  6  <B  H  NT  Z  `f  l    r  x~                           &  ,  28  >    DJP  V  \  b  hn  t    z                                        
        "  (  .  4  :@FLRX^djpv| $*06<BHNTZ`flrx~ &,28>DJPV\bhntz
"(.4:@FLRX^djpv| $*06<BHNTZ`flrx~ &,28>DJPV\bhntz
"(.4:@FL  R  X  ^  d  j  p  v  |                                                   $*06<BHNTZ`flrx~       &,28>DJPV\bhntz
"(   h h   h h       6 6   z z           h h   h h       h h       h h   h h   h h   h h   h h   6 6   h h   h h   h h   h h   h h   h h   h h       h` h   h h   `    h h   v` v   h h   h` hV h h   h   hV     2 2   h` h   h` h   h` h   h` hV h` hV h` h   h` h   h h   h` h   h` h   h` h   h` h   h` hV h` h   h   h   h   h   h   h   z z    z   z   z   z   h   h   h   h   6 6   h   h   h   h   h   h   h h   h   h   h   h   h   6 6   6 6   h   h   h   h   h   h   h` h   ` v   v   v   v   h   h   h   h   h   h   h   h   h   h   h   h` h   h   h   h   h   hV h hV hV h   h   h   h h`                      6   h   6 6   h h   z   v   z   v   z   v   z v` z   v      hV    hV    hV  hV h   h   h h   h h   h   h   h   h   h   h   h h   h` h      hV h  `       2    2    2       2 2       2 2   h   h   h h` h   h      h hV h` hV h   h   h   h   h   h   h h   h` h   6   h   6 h` 6   h` h   h   h   h   h   h h` h   h   h h h   h   h h   h h   h   h   h   h   h   h   h   h   h   h   h h` h   h   h   hV h      h      h      h   h h   h h   h h   h h   h h   h h   h h   
 
       `    6 6   6 6   h h   h h   h` hV V V   h h        V h hV     h hV h h   h h   h h   h h       2 2   h h   h h   h hV h` hV h h       `    h h   h` hV     h` hV 6 6V h h   h` h   h h   h h   h` hV h h   h h   6 6   h` h   h` h   h` h   h` h       )` )   `    Y Y   h h   v` v   v` v   `    v` v   Z` Z   r` r   v` v   ` V > >V h` hV `    n` nV h` h   h` hV o o   o oV D` D   h` h   8 8   P P   > >V h` h   h` hV h` hV ` V f &V h` h   h` h   h` h   h` h   h hV h` h   h h   6` 6V h` hV h` hV c` c   h` h    `      `     h` hV s sV s sV x` xV s sV ` V h hV h` h   h` h   h` h   h` h   h` h   h h   h` h   ` V h` h h` hV h` hV $ $       $ $   h` h    `     >` >       h` h   h` hV h` h   h hV $ $           h` h h` h` h` v` h` h` h` h` h` h` h` h` h` h` ` h` h` h h` h` h` h` h` h` h` h` 5` h` h` ` h` ' '   }{ }   h h R R E E ^ ^ r r   h h h h   ? ? a a i i h h h h h h G G   h h h h h h 6 h   \ a a   d d   5 5   g '   e e   ` `   6 6L h V i i   h h   h` h   h hV  V h hV h hV i iV 1 1   `          h h k k h  & $ =   D ]    4   K   j   s   x    k 5<:>BbDHglowmyv+GG        " + 1 2                                          $  *  0  6  <  B H N T Z ` f l r x ~                       h` h` h` h` h` h` h` h` h` h` h` h` h` h` h` h` h` h` h` h` h` h   h   h   h   h   h   h   h   h   h   h   h   h   h   h   h   h   h   h   h   h   h   h   h   h   h   h` h` h`   /        - 3     n t z                      
"(.4:@FLRX^djpv|                                                                                                                  >  D  J  P  V   \   b  h   n  t  z         t w w w w       t    ` ~ ~ ` ~ `   /           
 l DFLT &arab 2cyrl Fgrek blao  nlatn x                   	 
 SRB                          F CAT  RESP  RGAL  RISM  ZKSM  ZLSM  ZMOL  fNSM  ZROM  fSKS  ZSSM  Z                        
case >ccmp Ddlig Jfina Pinit Vliga \locl blocl hmedi nrlig t    
                                          ( 0 8 @ H P X ` h     X     \       	    	 l  	   	 l  	                     $ $    X       L M         L M            &         	          	           	  q  p  p 5=?ACEIKOQUY]aegikmquy}	#)!  Xp  r{  #** 4  T 'GMSW[_cosw{'%+  \\  ^^ `d ip rx z{   "  T 'FLRVZ^bnrvz~&
$*  \\  ^^ `d ip rx z{   "    
    I   I    >  
 $     C ? =     C ? =           O  L   I  
     L M   ./0   c     3  3   f  	 &   (    PfEd @  m`              ,   
  4     D     ,  
  4         ~!AEM?CXaw_csV_
:UZmt{?	.<[ex{-McyEMWY[]} 
 # & 7 : ? I K _ q     !!!!!!!"!$!&!+!.!H!Q!_!""" "#"-"="i""""""""####!#(#+#z#}#####$#&/&&&&''	'''K'M'R'V'^'u'''''''''))))* */*k++,d,p,w,z,...%..'t       $CLP CXatzbr1Ya	!@Z`ty~?,0>bw{ 0Th|  HPY[]_    & / 9 < E K _ p t    !!!!!!!"!$!&!*!.!H!P!S!!"""#"'"4"A"m"""""""# ####%#+#5#}#####$#% &8&&&'''')'M'O'V'X'a'''''''''))))* */*j++,d,m,u,y,|...".."Rpv  qiWUQPONM?=/	IHG?:761-("
s21/.,&%$#" qmkea_^[QOKIA?531/-'%#!	 zywsrqnlSLK"	3WOKH:c)C;765ݝݗݕݍddddMdLd4cx>,                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  ~           b                            !    $  A    C  E    L  M    P          `      g      k      s      |                 ?    C  C    X  X    a  a    t  w    z                                      _  /  b  c    r  s                                                                1  V    Y  _    a    &      M      O  	  
  Q      S      T      U      V  !  :  W  @  U  q  Z  Z    `  m    t  t    y  {    ~                                                                  ?  ?                                                                                                      	                      ,  .    0  <    >  [  '  b  e  E  w  x  I  {  {  K      L      M      j       q    -    0  M    T  c    h  y    |                                                    	                              %       '      =     E  C  H  M  i  P  W  o  Y  Y  w  [  [  x  ]  ]  y  _  }  z                                                 
        #     &   &  /   /   7  0   9   :  9   <   ?  ;   E   I  ?   K   K  D   _   _  E   p   q  F   t     H        c        p                  !  !    !  !    !  !    !  !    !  !    !  !    !"  !"    !$  !$    !&  !&    !*  !+    !.  !.    !H  !H    !P  !Q    !S  !_    !  !    !  "    "  "  0  "  "   1  "#  "#  ;  "'  "-  <  "4  "=  C  "A  "i  M  "m  "  v  "  "    "  "    "  "    "  "    "  "    "  "    "  "    #   #    #  #    #  #    #  #!    #%  #(    #+  #+    #5  #z    #}  #}  	6  #  #  	7  #  #  	;  #  #  	?  #  #  	@  #  #  	T  $#  $#  	V  %   &/  	W  &8  &  
  &  &  
  &  &  
  &  &  
  '  '  
  '  '	  
  '  ''  
  ')  'K    'M  'M  3  'O  'R  4  'V  'V  8  'X  '^  9  'a  'u  @  '  '  U  '  '  V  '  '  n  '  '  |  '  '  }  '  '    '  '    '  '    '  '    )  )    )  )    )  )    )  )    *   *     */  */    *j  *k    +  +    +  +    ,d  ,d    ,m  ,p    ,u  ,w    ,y  ,z    ,|  ,    .  .    .  .    ."  .%    ..  ..                "  '                                        R                       "      &      (  p  t  ,  v    1             Z Z   p ֣       
                                                                       	 
                        ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a                                  + r d e i- x  p k v jl  8 spq g w-+@ l |    c n4TT" m }/ b   '(#$ 
! :  |9:, y%)1                  gy quvw zzxh         f                      
7     X!       u    u9  !          {Xm    { o { R          o          Z   !       =f       s 
  +      b      #   1N 
 { T\q#w  ` j  # fy```{   {w` b {!   {   RNN f   f   f     HF?  {L     ' o   o5 j o {   -{  3= f   oD 7 f    } s    , %Id@QX Y!-,%Id@QX Y!-,   Py PXY%%#  Py PXY%-,KPX EDY!-,%E`D-,KSX%%EDY!!-,ED-,%%I%%I` ch #:e:-        hh        /1 0!%!!h sr)        	 @  
<2991 /03#3#qe R   @  1 <20###Ѯ++       J@0 	
	  91 /<<<<<<<2220333!3!###!5!!5!#3hiiThiih)T/hTaabbN  Z   / d@9($ )%/%$(!$, (  0<2<1 /299990>54&'#.'5.546753.'n|phumdfbdcӿdOTUPDNtd]gp^Vd-.)>B+/Q	     !      * 9 V@/7("	"7(.+
 
%
4
+:99991 /9999032654&#"4632#"&'%32654&#"4632#"&iNMklLNi@s..2H#)iOMllMMk@u--1?NjkMMljO0./t?``OikMMkjN0--uA     9 * 7 @b-,.+  2345617 B7	1 +"1"!% (!7+!(!(!.899999991 /9990KSX999Y"	>54/3#'#" 5467.54632.#"3267>7#'&JKNSj抋20ǭAF;}Eap:6\[ț*\,#1h F'XmFD̉dHG'%[M;I\       1 0#+    u  @   
2991 0#&547u;: \'  @  2991 03#654\<<   J+  N@, 	

	 	<2<2991 <22990%#'-73%+f9s9f9PsPbybcy    X qy  '@ 	 
<<1 <<0!!#!5!CDDD /  @  1 03#Śc/    dm    1 0!!d	   1    1 /03#1    fB7  @  1 03#ym  L   #
@	$! "!$1 0@/ /////////	/
/? ?????????	?
?O OOO
O_ ___
_ 	
 	
 	
F/ /////////	/
/_ _________	_
_ 	
$]]4632#"&"32'2#"M68PO98K7PP78NL0670xx~      F 
 &@ 	# #1 /20%!5%3!!:P6ȪuLJժ       #  Q@) %%B  

"$91 /20KSX92Y"%!!56 7>54&#"5>32uu5dF[pgaYd8ժ.>zO}BC12`tA   7 ( G@) 
	 #) &"	)91 90#"&'532654&+532654&#"5>32ggfbYhyI'Ǖ&$54zms{((  ۵{     f  o   B@ B 	
 $<291 /<290KSXY"	!33##!5)!3d   -  =@"  
" 1 90!!>32  #"&'532654&#"+W,wN\aQFժ  21%%  L  $ =@#

 %" &"%1 90.#">32#  !2"32654&?M0n#J݁%'dkuzl      7  5@%%B " 991 /0KSXY"!#!5V+   N  # / C@% '-'0$*$	"!0991 990"32654&%.54632#"$54632654&#"hʁ򑁖Myz{yŗT!Ѳ!!ȟɠbx~~xz     F  $ ;@" ""%"	&%1 902654&#"532#"543  !"&T?M/nI%'!dk
	os    '   @  <21 /03#3#'9    '  	 %@ 
 
1 03#3#Śc/   X yw  !@  ('291 90	5yR!÷   X`y   @  <21 0!!!!X!!B    X yw  !@ ( '<91 9055X!R^^=      " {@B
	%%B ! 	  	 	) #99991 /9990KSX99Y"#546?>54&#"5>323#=TZ>/mNb^hC^XE&bRY;X1YnED98L\VBT=/    s  4 p@1(+$	4	'$+1+5'( + .!+-.5<991 999990@]4&#"326#5#"&5463254&#"  !267#   !2kkkk%RӡP$J6l90?{:]x<!o?DF=?z  %    
 @A % %%%	%
%
%

 % 
B 		 	/
91 /<90KSXY"]@
    	] ]!3#!#hnl#+{     q     =@# 
	
 21	 0!29991 /9032654&#32654&#%!2)qﰖ뒃JF{f>p}qdƵϠ  1  .@ 	2 1021 0%#   !2.#"32671M[?[MJVXI5))pn))=@@=      R   (@	  	21099991 /0% 6&!#   )  `dVDѦHKw/     N  )@ 
	1 321 /0!!!!!!vTrwժF       X 	 $@ 1 4
21 /0!!!!#o\eժH7    fP  <@! 	 6251 990%#   !2.#"3267#5!PQv@^PQ_ſCe){KMon56MI!      H  &@ 
1	 0221 /<203!3#!#)d+9         %@
 7 7	221 /220!!!!5!!=99ժ     m  ,@ 
	 51 990753265!5!#"&m[hqG`=QQD,         @!%	%B 
	 0291 /<290KSXY"]@L&&6FUWX	dzy{	 ',+&:IGG[WXXWkzx] ]33	##wVh      s  @ 1 41 /03!!dժ   V  y  @,
	B
  	
/
 091 /<290KSXY"
 ]@$
		&)&)	6968	
]]!	!###V+'    F 	 m@B 1 0
991 /<2990KSXY"]@&)&8Wdjuz
&)FIWgh] ]!3!#  3+3  u\   #@	 26251 0#"32#"32IIz~      u   +@ 	
 28 	3291 /032654&#%!2+#ꌝL/ϔ     u\   =@  	 262599991 9990"#"32#"32ȗyHdI       j@8	
%%B 		
 
21
0299991 /<9990KSX9Y"#.+#!232654&#NnRٲM{cݑohy]ҔY  J ' @=%	
%B
 %(
 &919"0(99991 90KSX99Y"]@
 ] ].#"#"&'532654&/.54$32\^mjikshulмV;<qch#1ҵ--ID{pv /'  /    @ : :1 /20!!#!/s-+ժ+     =  )@ 	1 01 29033267>53#"&'. yVWx!9FBjiCE:=m];<<;\lh?;::;>     9    L@)% %  % %B  /091 /290KSXY"%3#3h_KKѪ++        @D	
	
	


%%% % B
 
	 /91 /<<90KSXY"	]@^
//+
??8
ZZ&*%*(+	%&5:5:;:	46T TZXWV[[RW	X]ghyvy	v#] ]333##ŏӬ߿ʿD"+w      @K	%

%
%	%%%% %  B 	 ;/ ;
091 /<290KSXY"7 ]@8'()&Xxyw  !%+%5UYXes]]3	3	#	#VHNAu3B}   %    Y@.%%% %  B  < <	9991 /290KSXY"3	3#%lk!mb       	 E@%%B  / 0
991 /0KSXY"]]!!!5!"՚o  w  @ = 21 0!#3!X    fB7  @  1 0	#%m  Z  @  =21 0!53#5Xޏ    H  @
 91 290	#	#Ȳu-    m    /1 0!5/mPP    f  %@	 <1 K	TKT[X   @8Y0	#fx  #{  ) n@*
   ! $
D >*22991 /99990@00 0!0" 
]#"326757#5#"&546;5.#"5>32=zl;^[fX=& 3qpepӺ)Ld_y64''RR2     X   0@		 GF221 /9904&#"326>32#"&'#3,fd./xRXWS   %{  /@ 	 F21 0%#   !2.#"3267%JR%QNI]`A9++88*,A:;>   {   0@  GH221 /9903#5#"3232654&#"Z.deCSW;7W   {X{   E@& 
		 IH991 990!3267#   32.#"X㿮Xmi[ ^Z89++9@Ţ    '  4@ 
 	<<2991 /22990#"!!#!5!5463'cM+Qgc/яN     {H{  ) H@''		$(*' G!H*221 999904&#"326#"&'5326=#"3253ZLSbC,ml/9.,}^\::VZ         ,@	 
 J	F21 /<990#4&#"#3>32jq1sJ`c     D 	  .@ 
 LL K
<<1 /20!!!5!!3# mnm`/BC   V   8@ 
	 <2991 990!5!+53263#XZZӜ}         @:		B 
	D E291 /<90KSXY"]@R546Ffuv	('(;;797JIYYkiiiyxyy] ]33	##Gb{ZFB?    
  &@	 
 L	991 /990;#"&5!5![Y饵|~  m  o{ " @'	   MNMNME#KTKT[X 8Y<91 /<<<299990@G000000	0
0?????????	
#]>32#4&#"#4&#"#3>32"iJo5FP;9JI9!c?LeHEws{p{``<?F     {  ,@	 
 J	F21 /<990#4&#"#3>32jq1sJ``c    H{   #@ 	D>1 0"32654&'2#"hڜ-.   VT{   3@ G F221 990%#3>32#"&4&#"326w.df
SWW     Rw   3@		G >221 99032654&#"#"3253#L-ed.+SY7:WS   j  {  O@ 	
 21 /990@%     0 030@ @C@P PPP].#"#3>32;zI.Dv6y.*`w"$     { ' u@@	
B
 %(
 OI"E(99991 990KSX99Y".#"#"&'532654/.54632OS}{\JSjgTzEZ9..QSKJ#}##55cY1!        1@ 
	 <<2991 /<2990!!;#"&5!5!f^^uϪ+|b`>  ^  ,@	 
	J F21 /2990332653#5#"&økp1qJyad     d  m`  e@)   B I E91 /290KSXY"' ]@ %]]3	3#dEFr`T     ` @E
	


	  B
 
	 /91 /<<90KSXY"
 ]@	 	
& &)&))#,96993<EI	FJVX	WYfifij	evzx|	r-


++>><
H
Y
jih
{yz|

]]333##àö`wBf     L  `  @H  
	
 

	B
 
 IE91 /<290KSXY"
 ]@	fivy

:4
ZV
]]	#	#	3	^oo)'`?Hk     hV`  @E
	   B 	
 IE91 29990KSX9Y"8]@v&&8IIY
] ]+532673	3Z.Gc".\mQ\GOLGhu:NN^Nl       b 	 X@B  I E
2991 /0KSXY"8]@68EJWXejuz
]!!!5!-}bܖ%     $ f@5%	 ! 	 	%	
$ 
  =
%<<299999991 99999990#"&=4&+5326=46;#"3@k>>j@FU[noZUtrݓWV       1 0#        $ j@7%   #% # = %<2<99999991 99999990326=467.=4&+532;#"+DVZon[VD>k@@k>XXrtݔ     Xy  &@   '1 <2990#"'&'.#"5>32326yKOZqMg3OINS5dJt]F;73
!;?<6
7= `  	 !@ 
 
<2991 0533b)eq  %  ! N@* 	" E"<<<221 2<990.'>7#& 54 73%C??BI9gg9ބ5(,-("9="+`츸    X  >@ 
  	<<1 /2<2990.#"!!!!53#5354632D>Cs3A,,ُ/я     LB  / @ (-	*-'!	 @')-0)$ !'$* xyx( $0229999999991 2299999999904&#"3267'#"&''7.5467'7>32d|[Z}}Z[|Z^.[20`0\^.[3.^Z{{Z\}~t]1]02[-^Z3].2]-_     %    @D%	%		% %  B
 <e	e <<2<299991 /2<2<290KSXY"3	33!!!#!5!5'!53%lkVoqZmo#oo#o    !     <21 0##
 
    = 2 > j@<#$93$* 0?#<!*6$93!UU-<U &-&6U'?99991 99990.#"#"&'532654/.5467.54632>54&S9akԂ[]=:̭IWW9fqր][<;ȧH>=><''PGZsweZ54m@''TLf{xf[1,pE-Z/L-Z/L    ?F   @ aa 1 <203#%3#?      }N  1 I D@'
&> >2J\ ^,8 8YD/21 0.#"3267#"&54632'"3267>54&'.'2#"&'.5467>`:o:u8g24r=г=rjKKMMKLijLLKLKKkZZ\[[[~}[[[\ZZ/lhȬJKKjhKLLLLLijKKJgZZ[~}[[[[[[}~[ZZ    
 % ) d@6	  (& & #*& 	('	jkji*229991 99990"326=7#5#"&546;54&#"5>32!!|WHi1Rwu3}CD?kdPDN@Ms=@pABtZ\#!{     w #   /@	 	 
v v<2991 <2990	5	5L-+-+#RR   Xsy^  @  '1 0!#!X!^? dm    1 0!!d	    }N   4 L @I]	
	]

	B
	
 
A) 5)M 	\\
[G#X;#Y//299991 29990KSX9Y"2#'.+##32654&2#"&'.5467>"3267>54&'.XXP:&rk1=-7ffZJJDZZ\[[[~}[[[\ZZ~jKKMMKLijLLKLKKLbeG]C;P*T6?>5VZZ[~}[[[[[[}~[ZZgJKKjhKLLLLLijKKJ =b    1 0!!=V +u    @	 STS1 02#"&546"32654&hAu,-/OomOPqp1.-rBoPPlnNOp     X  y   .@	  
<2<21 /<<07!!!!#!5!X!dCDLI B}  a@ WWB A		  	  
 	@ 9991 990KSX9Y"!!57>54&#"5>32eQdR1q?Ay;Jwrnaz3=L$$}k9wu    F ( \A   	  
	 	  	  	   
 	@#) &	)991 90#"&'532654&+532654&#"5>32^c:r;Eq-evnmBJ]b`W,p;Eu2X`lP|yQDJLl?<8?yvcG] f  %@	 <1 K	TKT[X   @8Y03#f     T`   L@*	 
!	  	J F!9991 2<9903326533267#"&'#"&'øxo !	&D">K.Y\,TH;8
OOPNLP  j;  #@  WW191 20!###.54$FfNݸ    /`     1 03#` u)     X 
 9A   	 	 	  	
 	@aW} a1 2035733!j
c)t'+n         3@ 		jkji991 0"32654&'2#"&546!!hfssfeusgʫ˫\{u༻߻`{      \#   /@
 v v
<<991 <2990	5	%5	+-:+-#^R^^R^ Z{'H V' {    Z{' { &   t V Z'H V' u     p` ! % @G
	%%B!  "$$&#	 #	)"#&99991 9990KSX99Y"33267#"&546?>54565#53%=TZ>/mNb^hC^XC&ϚbRY;X1YnED98L\V@T? %  k& $    u @O]1    %  k& $    u @O]1    %  m& $    u 
+@	 / ]1   %  ^& $     u #
+@O#@]1   %  N& $    u 
+@p0? / ]1    %  m   ! @W%%%% %!%!%!!%!B		  ! PPK/K!"2299999991 /<9990KSXY" ]@]]4&#"326!.54632#!# Y?@WX??Y:Arr@;nlZ?YWA?XXP!yIrrIv${         g@7%%%%B 	
 c
/<291 /<20KSXY"!!!!!!#!3eex5ժFժ    u1&d  &       Nk& (   u   Nk& (   u   Nm& (   u   NN& (   u   k& ,    u   k& ,    u   m& ,    u    Ic:1      N& ,    u  +1      N   ;@!
 
 21	00<291 /220   )#53 6&!#!!VD}}/  `ŕ{HK+   Fb& 1     y " +@O"@]1   u\k& 2    u @O]1    u\k& 2    u @O]1    u\m& 2    u +@	 / ]1   u\^& 2     u 0!+@O0@!]1   u\N& 2    u +@p0? / ]1     ;T  .@
 	
		 <91 <290	7			^t^_t\t%\^u^uw^      	  + k@:+)&
	  *&&, #*
	 #)+262#5,999999991 /9999990324&'	.#"#"&''7&5327sT

sV)+y=g %s9d/NZIn-QUPeQzQQFIRPJ  =k& 8    u @O]1    =k& 8    u @O]1    =m& 8    u  $+@	 $/  $ ]1   =N& 8    u $!+@p!$0!?$ !/$ !$]1   %  k& <    u @ 	]1          4 @	 28
 	32299991 /032654&#33 !##ꞝL!󄃃   } / V@1-'!  **.	 !'	$'$-D F099991 /9904632#"&'532654&/.5467.#"#7C:oEBL;lAxC\[yqyrq|d1M*%]taQG_J'8O#kr    #f& D   C     #f& D   v     #f& D  g     #7& D  y     #& D   j     #& D  w      ){ 
  C @I=706% C"76.3@:("D %=/.M/ uMCM6+sD29991 2<2<2<999990@	05060708]5#"32654&#"!3267#"&'#"&546;54&#"5>32>321xYS\JMWWLepO27Gn 'aȿuc^8>M<[|%!YHZqYa4+#"33)+RNPPXx+'#!?@=B  u%{&h  F     {Xf& H   C    {Xf& H   v    {Xf& H  g    {X& H   j  @@]1    Df&    C       Df&    v       Df&   g   	@@
0
]1      D&    j  +1  H  ) @O   B $*'!	 !'D!	>*9999991 99990KSX9Y"#"32.''7'3%.#"32654&Ŷ"#!H&!!#R-:/(	(-Y,\bPȑ^bn   7& Q  y     Hf& R   C     Hf& R   v     Hf& R  g   +@ ]1 H7& R  y   . +@0 ?.  /. .]1 H& R   j   	+@p_PO@]1  X yo    '@  
	w <<1 03#3#!!j!     / 	  + s@>+,&
 )& *&&&,+,* #
 )#D>,999999991 99999990	32654&'.#".5327#"&''m1$eAH#cC')d<]*,g9\//4o0.0tGGq.78MBz;<L    f& X   C     f& X   v     f& X  g   +@ ]1 & X   j   
+@p_PO@]1 hVf& \   v      VT   3@ G F221 990%#3>32#"&4&#"326w.dfSWW   hV& \   j     %  0&   $   	+@	@O /]1 #&   D     %  m&   $    +@_P O@ /  ]1 #H&   D     %u'x   $   ur{'xY   D   1k& &   Zu %f& F   vZ    1t' ~| &   %f&gZ  F     1P&K  &     %&K  F     1m& &   Zu %f& F  hZ      Rg& '  o { ': G      @8@ ]1    N     {  $ H@	 "	@" 
GH%<<1 /<2990!5!533##5#"3232654&#"Z1.de5yySW;7W      N0&  (     {X&#  H       Nm&  (     {XH&  H       NP&  (     {X&  H     uN'x1   (   {uX{'x    H     Ng& (   $o {Xa& H  h#   fPm'  u *   {Hf&g   J     fPm&2  *     {HH&   J     fPP&2  *     {H&   J     fP'  *   {HN' . J     Hm'  u +   +@	 / ]1     m'  u K    KQX   @8Y@p ` O ]0         ?@!	 
	1 0<22<221 /<2<<2203!533##!##53!5*ʇʆ*9Q     F    ?@"	 
 J	F<221 /<<2990#4&#"##5353!!>32jq}}a1sJzz`c   ^'   u ,   	+@O@	?0	/ 	]1     D7&y          0&   ,   +@O@]1   D&          m&   ,    +@O@ ]1   DH&        u& ,  xF    uD& L  xP      P&   ,        D` 	 "@ LL K
1 /20!!!5!! mnm`/B       =@ !
 	"!221 /2<220%532765!5!#"'&!#3!53#=Ga'&HHAA@-]@QQJKDuuê    K     I@&
	 
! <<<<1 /22<220!5!+53263#!!!5!#3#ZZi,+뗗Ӝ}/BC mm' 0u -   Vf&g       &j .     '  N      `  @9		B 
	D E291 /<290KSXY"]@R546Ffuv	('(;;797JIYYkiiiyxyy] ]33	##Gb`/ZFB?    sl'v /   @  ]1      
l'v O    KQX   @8Y@  O ]0   s&f /     
& O       s' m /     ' O     s' y`  /     ' y  O     s  7@
   1	 4<2.9991 /903%!!'7;NwdPo;jn     L  
  >@!
	  	<<2999991 /9990;#"&5'!5!%[Y饵P{;Pu|~$o/n     Fk' !u 1     m& v Q     F&* 1     {&0 Q       Fm& 1   *u   f& Q  h      & Q{ aI    V=  2@  1021 /90+5327654&#"#3>32=YZͧZ-,t|6~ij>>Wot     V{   2@  JF!21 /90+5327654&#"#367632YZ͹Z-,jqFE1TTsTU6ij>>~ʗ[\``21qp    u\0&   2   +@	O@/ ]1 H&   R   +1 u\m&   2     +@/  ]1 HH&   R    #+@  ]1 u\k&   2     Hf&   R      H     ;@
 	 -299991 /220%! )!!!";(RH=MKF  { 
  8 i@92/	 & 8   #5/)#9 2&	MuMCM,s929991 2<229999904654&#"265&#"!3267#"&'#"32>32PVWMfRPhgPPcpP/;}Jb04TY/%W&	+#T53+)CBDA88>A>A     k'u 5  j  m' v   U   &r 5     {& U       g& 5  oj  f& U  hZ    Jk' u 6   m& v V     Jm'  u 6   f&g   V     uJ&   6     u{&   V     Jm& 6    u f& V  h     /u&   7     u&y  W     /  m& 7   u 	 +1     ~& W     /    -@ : :
<<1 /2<20!!!!#!5!!/s-		+ժA@      B@!	 <<<<2991 /<2<2990!!3#;#"&=#535!5!f^^uϪ+|b>  =^'   u 8   /	+@O@	]1   7&y   X   '+@/ ]1 =0&   8   +@	O@/ ]1 &   X    +1 =m&   8    +@/  ]1 H&   X    +@  ]1 =m& 8  w
g   & X  w   =k&   8     f&   X     e=& 8  x   u^& X  x      t'  | :   +1      m&g  Z   +1 %  t'  | <   +1   hVm&g \     %  N& <    u  +1     k' u =     m& vV ]       P&2  =       &   ]       m& =    u   f& ]  h        '  ,@ 
 <991 /990#!5!546;#"+cM=яNQ   FX  %  >32#"&'##53533!!# &#"32y,fd.{{aRXWSzzc        ) ?@$ 
	
 2	 !$'+9291 /9032654&#32654&#%!2)"#546xxtB>d{f>p}qdƵϠ/Wp1F    qP    X    >32#"&'#!! &#"32y,fd.RXWS   0   
   327654'&#'3)'KKOO{e5Fq>=DEdgh=  <  !   &#"32>32#"'&'#'҈FDDFl,fttttdLL.zYmnnnRRX랝+,S|  1  /@21 <1 @	 	0>3   !"&'532#"M[?[MIXVJ))gj))=@0230@=   <g "  %#   !2676;".#"3267M[?ZO*ZT3,JVXI5))p*32j>5F=@@=     ^s !  %#   !2676;".#"3267JR%FC=ZZ-,I]`A9++8(8rGj>>~A:;>    N           3   !#"#546 6&!#FVD6<0c  //&r1FHKw     N    #";5!! $5476%3羽EF5e{ɉ{+ˡd     4 
    32654&#"5!#5#"32_.df,T}SW;7XR    =G{  7  %2654&#"#"/532376?654'&'&'&'&32h(>vwf2BFKI	
 I<')iy|{L	(=\RR$+.!-&       N  +@
 1321 @
 /0!5!!5!!5NwrT+  u\   =@26	2 5991 @ 
	9905!54#"5>32#"327uVJM[׌~	S@=))yz~#    7 ( >@	22&0)1 @
	) ) #)90.54$32.#";#"3267#"$546IyhYbfgg"{  (({smz45$&Ε  ?V   !!!!+532765|YZZ-,ժH#ij>>~   V' $  +"!!+532765!5!547676;'a'&QRF1i&&(W%<Fa	)(gc``01N\'   4g (  %#   !2676;".#"3267#5!Rv@^VZT3+P`Bf({KMonj>6MI!   RI     ! 5	3	3325D`H&0tt?uo+E     A   &  #767653#"'&54&#"#367632"&76/JI_BG}MKUv14IBe`` 1       :   !5!!;#"'&5=,-Z٪\Y+z=>jf         !!3!!#!!5!!5!!=	99ժi@    n     67632'&#"##3i~\/j!-<BmVc3r%3sh        5476;#"33	##YZ͹Z-,Gbij>>~ZFB?     
   ;#"&=#53!5!;+[Y饵		|~ĎɎ   1  m   %	#	#''3C\P"Pn@Jo
|  mo "  %#"&33265332653#5#"&8"iJo5FP;9JI9!c?LerHE!
s{
p{+`<?F   V   33#+52765Ư;QQQ((3+ij>=   R{   #4&#"#3>32jq1sd``c    u\ 
     32'&#"32767\:DC;	9CD8	z~{{vu 'y 2   {'   R   -    %63273# &#"327-N5>o毴o8=yy=Y+͠v~^   VR{     763273##"'&7327&#"VPeo~簵noVAA(	/s%+n+͝u"mmB    8    !  +#"#54763! 27654&+Vn]6<0``~'R@]M//&r1FRQE8D     VT  *  3265'"#"67232#"&'#76;#"w"	.[f,?N͹	/2FIWS.O      #.+#33232654&#N76SٲM{cݑ77hy]ҔY     J '  >323267#"$546?>54&#"iVluhskijm^\''Ƞ/ vp{DI--յ1#hcq<;  { '  >323267#"&546?>54&#"PZڒEzTgjS썉J\{}SO9!!1Yc55##}#JKSQ..   x  m    vV[  !  &'&#"3;#"'&5# 54!238!n|wx'%dQW/R5-0A3=g)(V\`@o    V    !!;+53276=#"&5!5!f^^uYZ͹Z-,(Ϫ+|bij>>~`>     /     &#5463!!#ŃF1-/7&r1F+        !!;#"&5!5!5476;#"f^^uϪ*YZ͹Z-,`|b`ij>>~     /V   !!;#"'&5!/s-,-ZߥZY+ժ~>>ji?    	' 8v     'q'|   Xd      J     # #" 47#5! 54'5{no{x4xn8!L	IL       *   !"'&533254'3\Z,,Zxznjf?~>>	ILɸ         #367632'&#"kSHcm.-PKG
"(3t*b7m*9	     Vm   +5326?3	67632'&#"nQGJ|lLT3!;^2Q+31705+h:=HTN~)
)         !3!#!!5#5!!uP""v՚i@    5b   !!!#!!5!5!!-8YbҖg      7654'&+5!5!2! $5dc{dd\^rhbVPKKKKIJG8+lh        3! $54767635!!#" 76RUci r\\dc{dd݊hl+8GJIKKKK    }LT`    	5!!#"3267# $547676peje]\dcmTjdc^QVbܨJKKK21%݊hm*8   V$`    2767# 4%$54#0!!5! TMOQWPVa ejo0, 5%b|8d1a    #    6323#!!5!5!67654'&#"п-"BP8u~i9Dc``JU?T<><         % 7654'&#!!!!2! &53h<=\^G/"icUPRz,ʞ[+3IJ	I8+le [tG)    }LT`    7654'&#!!!76!"'57?\]ȨgcUQԪ-5IJ,39+lhJc      4'&+#5333#!"'53276MJY>lunc9rO_}nw~FVrA    }Vg{    #367632 54'&#"64QҸMNr98xܭz
BR1pqWBA       3#+  9  '6           -   3!!!!#!5!5!5!^^``l     %  m& $    u #f& D  h       m& ,    u   Df&   h     u\m& 2    u Hf& R  h     =m& 8    u #+@	 /# #]1   f& X  h     ='   & 8  j   2&  & X   q  <   ='   & 8     &  & X    <   ='   & 8     &  & X    <   ='   & 8     '  <    zW{   %  '   'j   $   #2' q  <    %  'j  &  $     #2' q  <      0'       )&        fPm'  u *   {Hf&h   J       m'  u .     m'  u N   ue\&x 2     eH{&x R     ue\0&       eH&       m'  uy   }LTf&h  8     Va&h#     fPk' Zu *   {Hf& v   J      =   %2763#"'&5!#3!3m6!h9Hն+ROf'MSb9du'      Fk'  u 1     f& C   Q        k' u    )f& v        k'  u    /f& v        %  k&	   $     #f&   D     %  m&   $     #H&   D       Nk&	   (     {Xf&  H       Nm&   (     {XH&  H       k&	   ,       Df&          m&   ,       DH&        u\k&	   2     Hf&   R     u\m&   2     HH&   R       k&	  5    h  f'    U     m&  5    j  H'    U   =k&	   8     f&   X     =m&   8     H&   X     J&   6     {&   V     /&   7     &Y  W      }RT .  56$>54&#"57>54.#"5632 4o 1\}p_s<fh=#7KH&΃|:nCpΠ`"7Oe3HjAcR7V3"V<fqt  O#{ 4  5>54&#"57>54.#"5$32Fp>!BlJc(v];?"AW?-1CA#E
ptgDZX%KlaF='.`[b[3XpVU <Ef9,F*
;ZGan      Hm'  u +     m'  u K    R=   #4&#"#3>32=t|6~kWot   l  ( 1  %7276"'676#"'#7&/'&'&323 2654&"mB{rhG0wD &8Md\]P{#looԐ>>t#O9Y%Z5H7WSCT    V   !!3+53276=!5!"YZ͹Z-,՚o*ij>>~    Vb   !!#+53276=!5!-}YZ͹Z-,|bܖij>>~%   %  P&   $     #&   D     uN&2  (     {uX{&2  H     u\'   'j   2   H2' q  <    u\& 2  '    j   H2' q <    u\P&   2     H&   R     u\'j  &  2     H2' q  <   %  0&   <     hV&   \      l
    %7276"#7&'&5!5!676#"B{wD3'rhF>O9aJwt#   jlf{  .  %7276"'676"'#7&'&=4&#"#3>324B{zgG1wD3'5ZI9!c?98>>r.O9aJs{``<?ie  l  #  %7276"'676#"'#7&'&5!5!3!!B{rhG0wD3'+^>>t#O9aJ;>    V`  ,@ 
	 991 990!5!+5326XZZӜ}    xY   1  2654&" &#"32>32#"&'#5#"323QSSQPQRRQP]=zz<\o\<zy<]oTzRRXWSSW;7WSC    xJY{   1   &"2 32654&#"#"3253>32#"&'#QSSZQPPSSPP]=yz<\o\<zy=\oYTRX7;WSSWWS        3	#!#'7!'`	d;nC8V1g4Q+Y{J8FFJ!@    )  	'&#"# /'& !27&'3267p4UVM[	gQ?[Q;8FdbXI$ ~))F/ndJI~' @=    /  (  	&#"# /'&5 !27&'3267>GJR\D%QM((_]q"!^`A7S]++	L8rMq;>       3!!!!!5! diA    !    #!5!7##'-.d'Jug[|BJ8jF  { 5  .#"3#"'&/&/5632654/&'&54632OS}{\Jvh*L'TrGY3e2{zD>zEGIZ9..QSKJ#}^R
~$=&[5#`cY1!GJ!     b   !;#"'&/&#=!-j1 *L4[TrGY=Zb ~$=&[?%  7     "#5463!2##326&#v6<0~'ʌ//&r1F
    q   (  !2)#5332654&#32654&+3F뒃ﰖƵϠn,>p}qd?{ƕ      )  533!33##"&'.=)3267>5~9FBjiCE: yVWx!A?;::;>`m];<<;\l     9     	#3#i++      !  !2#.+##5332654&#LN76SٲM{cmˉҔ77hy]w    {   .#"!!##533>32;zI[Mܹ.Dv6y.*l\<Ĥw"$   8{  )  32654&#"3>32+3267#"&'.>zl<^\fX<& +qpepӺ)Ld_y64''RR2     {{   0@  GH221 /99053#5#"3232654&#"Z.deэSW;7W    Wy   0@		 GF221 /9904&#"326>32#"&'#3.de,-xSWWS^   X  $ 9@	! G!F%22991 /04&#"326>32#"&'#46;#",fd.̸ZZ/xRXWS~Ӝ}}    {  0@ <1 @ 		0>3   !"&'532654&#"JR&PNH\`@%++*,A:;>  s:{ ! )  47&'& !2.#"63 !"'3254#"90%QNI]cU-RG+<JehQ#38*,A:c9D9K  {V8  $   2654&"3;#"'&=#"32<mppE#$H8HG%==PгQ{TC~>>jiáS,+;7W   {7 
 &   32654&#"%5476;#"#5#"32;mjkookjDGH8H$#${PϳQ{#Tij>>~SW;7WS    zW{    432  !"&'5326=!7!.#"z [imX^^"++98ȷ    zW{   ?@I	 H991 @ 
	9905!54&#"5>3   #"73267zXmi[& Z89++"Ƣ  { 	 )  %654'2273;#"&5 '&'&'& 56BL+>w9P!1jcGF:֊>8E#ZuaQ`vg("chV    ({ 0 9@22&%!*2&.F11 0&'&54632&'&#";#"32767#"'&546wA@Q[\ihWVLHHZ[c[[MaZ[V_A@^VJ=+,nQb54"[\m     ({ ( <@! #) )	
)& 
)1 90#"&'532654&+532654&#"5>32U`LdKhiP_m"#ibQnW=JV^     8{ B  #"&'5327654'&+5327654'&#"56763273;#"'&55c88hh@H9DDKCE@?qv|f6688h8AANODE<[KO 0A=1_JJm\["45bQ77,+=J++OAf10`ZȢA    "y  (   !27654'&+532764&%632#"'$Sv<;;!!;yUkbbkˠU^A;;LL67ss.gg=X    Vq^   !+53265!5!!5!qZZh(Ӝ}}ؤg
  {H4 & 0  5476;#"#"&'5326=#"43#"326HH1:hh>CO6xn#{XЮmssngn^ ij>>~.,}^\:<b    H4^ 	 $  !"326#"&'5326=#"4763!|LSbC,muq9b.,}^\:ᥟ   z  X    %#5!#"  !2&'&#"32BHXN,>hhxpVHdbbd">:KMrqfqr  fQk^     ".5	3	3 265+]ܞ^+ r.$a<T8VA""AV8TrLE"E    f  j^    ! 5473	33254ֲѸr(*u{q?sZ;hh?   R^   332653##"&lp2rJyVad         >32#4&#"#5476;#"}2rjrZZκZX
`cJij|~  V (  >32+5327654&#"#5476;#"}1rX[̸[-,jrZZκZX
`c6ij>>~ʗij|~    2    3#!!!!!5!!5!!bnnl~
ˏ5i      
^   !#"'&5!5!;
̦ZXXZjf;8~|    2^   !!!!5!!nnl^B  X  y &  ;#"&=&#"5>32!5!3267#"'.H>ꤶ./OINS)&r\FJKOUi(?
;?<65=>;7-      4     ;#"&=# 5432!5!3#'&#"3[Y襵>5*GN\|~ܽ󠠄K9   V
   ;#"&5!5![Y饵|~     (L -  ;#"&5#5!!2#"'&'532654'&+5!HHTgOE@KOPUCWJJX|~A$8+lh%12KJ   hj^ !  %#"&3326532653#5#"&2"hJn4FP<88 d>LfpHE!s{p{`<?F     h5j^ !  %#"&3326532653##"&2"hJn4FP<88 d>LfpHE!s{p{)<?F    gVi{ +  >32+532654&#"#4&#"#3>32"iJoSN5FP;9JI9!c?S,5HEcԜ|~s{p{^^@;#+     VM{   +532765367632#4&#"{5D1DCWVV\^oA@01re22wx\__    V{    4'&#"#3>32;#"'&./]p@A2XVV?4<>OO__^edwxH10``      A{ 	  !3!##{yy   H{ 
      #"%"!&'&!3276ߌH?7?H4HH4{-m__mOmmO   E  `    !!!!!"'&763#";d~~~~ KKKK`hghi     &{  .  4'&#"3276=332#"'&'#"'&57!29PHJ|")u) }07_CC_vD8@jxZqosO++Oz2ee2z|       VH  & /  #5!#3!535&'&76767654'&_|{_hd{{dE,HH,O1HH1ouu{{BnmBHImnI    ^   732653#5#"&';zI.Dv6.*+w"$     732653#5#"&';zI.Dv6.*w"$  fV^   ;#"&=#"&'532653YZNb.Dv6;zI}}w"$.*+   jV{   .#"#3>32;zI.Dv6y.*)w"$   jV{   ;#"&53>32.#"#,,[.Dv6;zI[[}?>rw"$.*ll    2{   476;#"!!5!RRҼj&$pnhb`02       2{   !!5!4&+532jnnHlдRRV``b   z  W^  !  #&'&+#!2327654'&#7545â?;;alkpw?@@?w66^q$%'^NMi++ST**  z  W^  !  #!3327673327654'&+jpkl|a;;?î545(w?@@?wSiQP^)%$q^667**TS++   V{ 8  .#"#"';#"&=327654'&/&'&54632N[DF20@RRz|hj&"nfdbbFF24@LLf?((**T@%$!*MLZ[705-,QK((%$JK    }VT   +5326546;#"ӳZZcMӜ}}¸Qg     }VT   !+53265!5!!5!546;#"4ZZ=cMh(Ӝ}}ؤiPQg    }VT^   ;#"&54'&+532'&cݳ--Zg()|@>     vV[  !  #"327673## 54!3476;#"8tn!ʷ5RWQîd%'3A0Ǜo@`\V()g   +`   !5!4&+532!!H^^uϪ+>`|b   W   !!;#"&5!5!f^^uϪ+|b	>    `  !  533!33##5#"&=)3276:CYYu>>|WMĤ<f21
PO_U     _r` #  5! 7654'&'5!#  '&54767_m?B XXBGdr86>45wEioabdo?ܤdqnܑkmh  A  w`    ! +"'&5#5!?27654'&'&UBr86FRQS&(g3XXBO\Ldqn``;612abdw7,     H  `   !#	#3T`      `   !###33­jj`j   H  
   >;#"#	#4N|lLT2"zHTl   f  k}   3	3#f%.]}8     V`   !!;#"&=!5!;4z`ۧ10%  *`    !#47!5!5!332!'3254#ejL<FX3<;4% 6[   }LT`    2!"'&'5327654'&+5!5!ajbVQ^cdjTmcd\]ej8*mh%12KKKJ  iLh` $ -   76654'&+5!5!2#4'07&#"327*\^ejeidTQ'd(	}ŃcL;*1JJ$8+lgqUeR8y*K/K          327654'&#"56763 #?W::fPONNLQQUmlprLbAr+#}swt       #&'&5476!2&'&#"3ʪplnUQQLNONPc9:Vws}#+rAbLr         3!"'&'5327674'&#˪plmUQQLNNOPc9:Vtws}#+rAbLr    J #  476!2&'&#"32767# '&5nUQQLNONPc99cPNONLQQUn>}#+rAAr+#}     _ -sB   (  47632   7 654'&#"47632"'&_ԚO̵eddede"!/."!B^!"5Ԝ0ٍccƍffff.""""./B!!       }     -@ 
 	  	F!21 /9032654&#32654&#%!2#!]_Z^UTTVeb`sci?\dU?.Vi}u    "y  +  ";#"3$''"'&5467.5476322s9@<  <@7uTxVddjbbjdd6=76NJ@6sx>WVggWV  6  l 0  %#5!#"'&76325476;#"#&'&#"32t:{}|3H><N?7KJJK2^`03j&Brqfqr       A{   3!3#!#{A   V     3#3## 54!3!5#"32765Q3w{j&p?`я3A0     wLZ` 
  ##	33ZR8LT#       {   3!!{/   #V|  )  %#"'&76325476;#"# 276'&",BC]nmmn]CB,==O)???????d0110d``01jtssttss       $  327654'&#"56763 3###53?W::fPONNLQQUmlprLbAr+#}swԤ        $  5&'&5476!2&'&#";3###5HplnUQQLNONPf::W>ws}#+rAbLr        #  26&"3!!!+5#"32deena^!;8NN8:j+^Lۓa31DD10M    L  C  3276'&#"%#5#"'&76323!2#"'&'5327654'&+5!22XW3223WX2o#55JzLMMLzJ55#o?M;319;<@3xAr;<78chqjtssttss_3d0110d^L$8*mh%12KKKJ    6   , 3  26&"!5!332+#47'#5#"3233254#dees	ai$\\#jKyyKj#n0h*5j 3<SdaDDad^6[   8 >  .#"#"'&'#"&5#5333#;532654'&/.54632/e6RR;Y%w026:8>qaQQo-Ek>v;NTj&g[{=l?((TT@I!,KL!&`>NM55YQK($)$     V4 % .  !5476;#"+53276=#"'&5#53!3A<J==5%N;=eeUNZV()g)_`02PM`> &'   p . 6 @  3632&'&#"632#"'47&'#"&5#533254#"&57#3uZ310.///0l;;;2v1+\!raQQ$-WO=MT-E#+qrfr9DhT"2`>9KiN    VH 3  +5327654&#"####53546;#";67632G11l?KJYhonjjhqij;/m(56Ft<;H``01/яNPhce22wx    % 7  &'&#"#"'&'#367632327654'&/&'&;>ABgf$&n/<>][ALODKTLDCKEJIa54%"092?)TT?&$!,KL\[&:MV3-+RK(#*$JA       
   3!!!+ۊqvLۓ   B     333##333##ttttU=   B    !#!#!#!#kkUXrX     J    4&+53232653#9O%5zpcęaBþyb    V "  32653;#"'&'5#"4'&+532Zgo0>*m/2O?*mbþyf\gę10   A   @ 
</K1 @<0#4&#"#3>32tNN^luu)qJy}wYYk\g88  A   3>32#4&#"#5476;#")qJy}tNN^lu43rB98wYXj\1Sw66WU       3+532653#wtgr,B0ttxlX6Vr  8   .#"#3>327.bjtt%uT
	qksa97   8   32653#5#"&'.bjtt%uT
	qkJa97   Q   32653;#"'&=#5#"&'Q.biuB-r33$vS
	qkJHVX66xa97   0  !  +33276?3327654'&+CGDDuj=%%(f{n!!!|K((((K|N;[--s?5 /.  B   333##tt    +5326?331]O\D05 {{bpEW(K/i   tf  -#  -$        452654&#452@XX@rPPPP=>X@?X=>POPP       "'&4763"3tPNNPt@XX@PPOP>=X?@X>    ^s   327654'&#"567632#(y6$$>q31210336WEDGkM@*7K$@`	
XFh_@C  ^s   #&'&547632&'&#"3kGDFV63301213q>$$6yMAmC@_hFX
	`@$K7*@ )f  7@ 91 290 K	TKT[X     @878Y3#'#f   )f  7@ 91 <90 K	TKT[X     @878Y373x $  @ 1 @0#+  =b   $   @ 1 @0%#+   =/  yX0 C b  yX0 v     #    !!heJ'  #   !heJ  #c    #d     > U   533##5#5u    Ju   !5!J>ߖ /)H  D   V{   W	@P {P1 0 K	TKT[X     @878YK	TX  @   878Y#"&546324&#"326{tsst{X@@WW@@Xssss?XW@AWX  u    "
@	  
|1 /90!33267#"&546w-+76 >&Dzs5=X..

W]0i   7  @!  PP99991 <<99990 K	TKT[X     @878Y KTX  @   878Y@?	 
	 
]'.#"#>3232673#"&d9!&$|f['@%9!'$}f['@Z7JQ!7JQ   Xf   s   %3;!"'&5k&&iWRd10`ZȢ   %    '&73733256/MM    V|
   ;#"&5#5!88hr.EGWwl:Q    [v/ )  .#"#"&'532654'&/.54632P1j8WV>](}248{D@}=RX o)k`@qa//$)*+MWfk2-*SIXa    #'#37͉H+  ^s   #&'&547632&'&#"3kGDFV63301213q>$$6y[AmC@_hFX
	`@$K7*@ ,  X   !!5!yЈ  ,  X   !!5!34 ,  X   3#!5hh    ,  X   3#!54    ,  X   %3!5  (  
D  f C  f v  )fg  7y   =b    1 0!!=V  =   /)H    @ PP 1 <0332673#"&/w`WU`wHLJJL D  @	 a 1 03#   ?F j   8   2#567654#"56J24C1xZ@Vƪ@$C!Xl05^  V{w   Xf   %@  991 <203#3#fx )fh   "   #D Vv'   4      f    #!#͇ fxx/)'v   u   /)H   >32#.#"/w`UW`)LJJL    "    #3ﻒY     #55#53pp{       53#3"pp{  f   3# qf yX0 C b  yX0 v      53#5#5L:      #33T걈   s^p   !5!# .q   532654&'3#"&=X..

W]0ihw-+76 >&Dzs5   
   "&463"]]3GGlbbG23G  bL   3!5353:   ^H   #5!##걈c   _I   #53533##    sc^   5!tc   V    %+53276=YZ͹Z-,ij>>~  V    73;#"'&5,-ZͥZY~>>ji  c/  @ a 1 03#  ?d.   @ aa 1 <203#%3#@ 
D     1 		0#"&546324&#"326D]\\]bG33FF33G\\\\2GF34FG    ;  @ 1 03#ﻒ  u)    8	
 @	 	 |1 /90@IYiy]!#"&'532654&'85xv-W,"K/:=,,>i0Y[0.W=   u#  x
  $s/   #D   U|/   #5!#|J   9X   #"4533273273"h;tvgfvifvtR   )  @ 91 <90373x   )  @ 91 2903#'#m  /8    @ PP 1 <0332673#"&/w`WU`wLJJL  /:   #.#"#>32w`WU`wLJJL 5  @!  PP99991 <<99990@?	 
	 
]'.#"#>3232673#"&d9!&$|f['@%9!'$}f['@X7JQ!7JQ =/    1 0!!>Vє   m B    ]"   Xy a    &h   !5&hh     h   5!Ĥ  /   '\
]`LM     'ogDdFFJ 
   2654&#52#3GG3]]lG32Gb  U|   3!53UJ U	|/    !!|&b   9X   632#&#"#&'"#72h<tuhevifvtR    F   '7'77h}`}}`}~`}}`I}`}}a~~a}}`    .54675>54'&' RJ
6"RH	0PQn
+0PQn
  &=  =    Dv     7    "#4%62#&%n~vv<<  tf   3Ant    V H   %#AnH   FW     `w   V 	  #"=3;X3Vh    {   %{& F   y  {&   y  '    m -  f v  ?F& j    r   f&  >  /` y    Nf&  D    Hf&      f&  D  \f&    p  f&      f&    6  &       %   $     q %     sR    %     1/01 /0@% %%%%	!3yy      N (      =     H +    u\    6@26
25Ĳ]1 @0!5!#"32#"320qYǪIIz~      ,      .    %    0/01 /<0@%%% %3#3#+#    V  y 0     F 1      H    ( 1<<1 @

/0!5!5!!5HA)Aժ9   u\ 2     H^     u 3    x  m  <	1<21 @	/220@ %% %%	!!5	5!!9":A@   /   7   %   <    u  Z  & / M@"2	& ,2(0<<2<<21 @&( '	
/<<2<<203!535&'&547675#5!67654'&'Ͱa|{aa{{bL+CC+LL*DD*+v[ssZttZss[v*DD*7*DD*    ;    u  Z  9@  <<1 @/22<<2067633!535&'&3I.K{bb{L-I["WDWx ֪ WW"     J    @@qqrop rol 991 @ /<20353&5 32 3!5654#"J{n !o{1xx 7oȼ߅LI	L    N'  u   %  N'  u   Ff&       (f&       Vf&      6  f&       3  i&        Fy  *  '&'&3273;#"'&''&'&767,-b=MJMUHi;c(	#) Xn^T).\-rv~	oik*%1)0T*XmY*)     Va!    %#54'$QQ 0kEb6=q'0      Vm`   &+532	3#-^1FA F[D~S]V   H"  4  "32654&%&'&54632&'&#"76hY(>f2BFUR I<')iy|{L	(=\$+.!-& ({    R&   %#457654'&# !5! OTJPE*  :Lf.,KOxsPWKL,#%5,*3eaZi   V{  .@
 J	F21@	 

 /90#4&#"#3>32jq1s```c  H    9@	 D
>221@	     @ ]0&'&#"!32762#"?HH?5@HH@<⇙8wyvs  6  `  @ 1@  /0;#"'&'#5"$lYoRQ`+.0`b;      `     D     	#	#'&#5~J/1Fe<2  T` w    t  B`   !367676'&'3!xdLjE.*{`T|p5dwY|rNįt     R8 &  %#457654'&# 4%$47#5! OTJPE*   9MKOxsPWKL,#%5,*p$Rݿ	&  H{ R    P`   !#3267#"&5!##P117,#J%q\T`PH?X  VT{   .@
G
F21@
  906#"&'#764&#"326ttf,n䇅{WS<  R%{ $  %#457654'&#   !2.#"OTJPE*  :%QNI]]^KOxsPWKL,#%5,*8(8*,A:no  k`   2@

D>ĳ991@  20"32654'&7'"763!aFH<Ηr{sPSے--	    2^  !@
1 @/20%;#"'&5!5!!$lYoRR0`b     3  i`   %27676'&'3%"'&5#5!tZ;jF-*RR"$vfwZ{s`b;+.0    LVh 
 ) O@'#*
KQXYԴ0'']<<Դ0]1@' * 2<220"27654'&'2##"'&7673A\VMMG*w|~~hA1LLNeˑRh]c[斘n,mKseg.    YVx`   #&+53 3;# t/1F C
/1Fz	~,~     VN`   %67653#&'&533?>TyyT>?@WxؑoW@   F` &  #"&'#"'&37676376'	2KUXK2~)@V""V@)~`{gLHk{A>oRyRo> 6  &   j     3  i&   j     Hf&       3  if&       Ff&        $ 	  #   76'&%$'&763 '7676]NI5|u tf
	M2C6R6WpA{zƲ
i     tR$ 	 $  6'&'&'&7!2#"'&32765JgNn-R		Nr^ydPpw{A
K~}Sj~    "     #4''&5676'&qO**d\txLJso@z8 vVOv~*+40r51_T   p  f&     "  N&    u  mVd   '  #&'&7673567654'&'ĸh]i^V5RR*aW4QQ(VyvaxxGnռFCImֹD    9  `    !32376&7%&# 67#5!'TQ0'(0A_+T3      4` /  &'&7'&7676'&#"56776327'5!`ȍ=`[+9[R~!*`ȍ=`[+9[&͘7
 cl|YDT|˩hl="pl	|YDT|˩hlfMZ     uV\ 
    #"32&'&32 _{|^"y|"j   VH{    "32654&#&'& h1`{{_
mw.v     RL #  "32#457654'&#"'&76)MbzYTJPE*   9{2e+wTOxsPWKL,#%5,*˞nͱ  R)` #  !"#457654'&#" 76))I]]_bNTJPE*   9ۓeUlnoJOxsPWKL,#%5,*8(     X )     V #  !47632.#"!!#"&'53276`1c3$R,x:KAb9f.1d0W@Rd>Qoɏ?s!K_  `   7"'&76'&52n'BQ_'BQ_[~,`*l#FR`*l#FR    M   	#!3M&pM]  !V !  #56#'0#0?&'&bTB<fZpKKI
Mf7L[OF5`4   Yxx   #&'#&'&#5 #'Pd2Fb.-t`4#M!P^     4g 3  #"54654'&#"563277632327#"'$47`7"7$>9[@[`7"7>9[@[|"O	z:6hl0%[Ml	|"Oz:6hl0%?[M  VT{     7636#"&')! $&#"32nttf,hՇ<WSs)    %{ F   V M    u\     &'&#"!3276 325DC6>BCD@qopުՈOz~  	{ !  &'&#"!!32?# '&76!2	%%cjf_[_fMJOhken('
c\\c(    	{ "  056763 !"/532767!5!&'&#"'(nekhOJMf_[_fjc%؜c\\c
          VT    1 &    V  y   !	!###V{+'`   VO`   !!###`{`   UVT{  #  #5#537636#"&'!&#"32wiinttf,;pp>WS  1   7532#"5>3   !"&IXVJM[?[5=@0230@=))gj)   1&8   y    1' yc  <     Nk'  uT     NN' 8uT   *o /  32654&#"##5!!676767632#"'4=NqjqjW.E~C%0"@XUkiS*\o-*	%
TpFwu    sk' HuR    1  L@!  210221 I IPX @8Y0327#   !2&#"!^?s}RooR}    J 6      ,     N&E    u  +1   m -         %326&+32+##526!Z}y^ϬvH+W    "      %32654&+!#3!332#!Z}x_uwg)9dqc   o "  676767632#4&#"##5!%0"@XUjqjW.E~-*	%
TpΗ*\o-      k' uY     Fk'  uW   h  m&  b      H   33!3!#)v++B   %   $      q   2@ 	 21
 0291 /032654&#!3)!qﰖE{e5F{f>dgh    q %      s  141 /03!!/ժ    !   0@1 @/2220%3#!#32!!3!7yŪM0'TB/ѪBL Ҫ      N (        x@	 <<91 @B 
/<<2290KSX@	%	%Y@      I:I:I:I:I:I: 	<<<<33	##'#	30YY0S0кv{Z 7       F 	 <@		B 	10
991 /<2990KSXY"33!# 3+3      Fm&  W        .      F  $@
1 @	 /<0#526!#v.+W++    V  y 0     H +   u\ 2      H  @	1 01  /<0!#!#++    u 3   1 &   /   7    h    ?@B1 20KSX@% % %%Y+532767673	3;E,LE\mQ.-"X74oJ+'/.M *5>     B      g@2	2 <<<<1 @	 /<2<20KTKT[KT[KT[X !          @868Y3#5&%>54&'IIǸ	˥II<{z


WS
     ;    P  $@
 1 /22033!33#P)ˆ+B       D   @
	 021 /20332673##"&nmuz[v~PEx+:   r  `  &@

1 @/2<<0)33333`++   <  /@	1 @
	 /22<<03333333#<ຆ++B        u   *@	2 	2/1 @
 	/0%32654&+!5!32#ϊ)+  A  n    ,@ 	22/1 @ /<20!3%327654&+332#[fN<yw[[+J8)    u   +@ 
	 28 
3291 /0%32654&+332#ꍜ)qqqr   1  M@		21<21 @	  I	IPX	@8Y0"'532767!5!'&#"563 հ`_s?bR}a}R"  <   H@$	  22KQXY1 /90#"32332#"##3_kk__kk_8o
˺
oICiyzjMf   L  m   C@
 1 2	291 @B
	/<90KSX%
%		
Y3!!"	.54$3!#!tql%Z'+w   #{ D    }H7  * 6@"# D	>+1 @"#(+0! 3 632#"6/&4767676%67䐌x$[3#F#3bJ/P{3-wRIUA
+t        `     -@ 
 	  	F!21 /9032654&#32654&#%!2#!_eUkUTTVe_cmcpPO^UCCVpou     `  @
  1 /0#!6`    ih`   0@1 @/2220%3#!#325!!3y-C7 "Ld64d!    {X{ H    ;  `  x@	 <<91 @B 
/<<2290KSX@		Y@      I:I:I:I:I:I: 	<<<<33##'#3 hh `Pl4_P   ({      ` 	 =@
 F
221 @B 	/<2990KSX@
   Y	#33#b縸)`)    H&  w       `       `  "@1 @ /<0!#!+53265	_7#U^`v     =  `  N@B
 	
 221 /<290KSX@	
Y3	3###=ww`M     `  $@	
 	F221 /<20!#3!3#b縸`9 H{ R      `  @ F1 /<0!#!#bW6`   VT{ S   %{ F      `  @ 1 /<0#!5!и&6ʖ    hV` \    cVe    c@

  <<<<I;1 @  <2<20KTKT[X !          @868Y&73#>54&xjjx޸ܸxjj++gs    L  ` [    |^`  $@	  
1 /220%#!3!3^渖L`66    b  !@		 F21 
/20332673##"&øknXrE5od]'+  }  U`  $@
1 /2<0)33333U(`66     P`  -@ 
1 @	/2<0)333333#".𨐖`666L    `   )@	 	2/1 @
 	/0%32654&+#5!!2#|y ֜XZZZʖ;     h  i`    +@ 	2/1 @
 /<20!3%32654&+332#S|yS[`Y[[[`;      8`   *@ 
	  
F291 /0%32654&+3!2#{ ֙YZ^X`;     %{  K@
  <21 @ 
 
IIPX
@8Y07532767!5!&'&#"5>3  !"&A`^S	E^]INQ%R9>;qdRp:A,*윜+    N{   ?@#	 221 /904&#"726332#"'##3pLLqjUUe9ҝ暙? `     `   B@
  	291 @B
	/<90KSX
		
Y;#".5463!##r78r5ܖaUmV9 {Xm&t   C   {X&t   j#    #VT   533!!>32564&#"##@1|yj{яLs`c.  m&r   vQ    %{  L@  
   F 221 IIPX@8Y0%# '& !2.#"%!3267%JR%QNI]]E	S^`A9++8*,A:pSdq;>   { V     D L     D&    j  +1 V M    
  `    %2+##+53265!327RC'#U^5iрiv;     A  `    %254+32+!#3!3
褽l`9  #  9   533!!>32#4&#"##@1sjqяLs`cB     m&y   v0     m&w   C@   hVH&        `   33!3!#ø`6       u    %326&+32#!!5!53!q
zQ           533!!!2#!3264&+W H|y͓LΧXZ    u\a   H{      s  @141 /03!3!/2$        @  1 /0#!38X`:     U  s   3!!!!##U/#˂>    `   !#53!!!!`¸   fs   #!!!2+5327654&#/7qohfL>87||9ժFwr|zKK"  VR`   #!!3 +5327654'&#HRRQn!&&1`GQ``07 )        3	3333###'0:YY{ZSS/B0кv   ;`   33333###';  M4hhPPlL_    u7& V     u({& v         %3###33VrwBh   `   %3###33,bG*B?`/Z      %3##!#3!3)˪B9d     b|`   %3##!#3!3ø縸*`C     q     33!!!#!ql"d9  }  `   33!!!#!}f`9ǖ6 u1&d `     u%{&h       /   %3##!5!!+s-B+    `   %3##!5!!ø&ɸ*   %   <    \Vt`   3	3#\IIT`lD     %     3	3!!#!5!5%lk!
mP\P     \Vt`   3	33##5#535\IIT`l55      %3##	#	3	3XfuPHNAB}3B   L`   %3##	#	3	3o)'o*?Hk     G   #4&#"#36?6?2GjqjW.E#20@0XUڗ*\cU'%
Tp     K      ,     m&  U     ;  H&  u      f   32+5327654&+#33stohfL>87||wwqwr|zKK"h  Vm`   3 +5327654'&+#33j:HRRQn!&&1'wGQ``07 )&?`/   fH   %+532765!#3!3HhgL>87)hzzKK_9d  V`   +532765!#3!3RQn!&``07`C   G    %"'&'&5332767653##|#3/@0XTjqjW.Fժ$'%
TpI*\z)  b   %6#"&53326=3##c<1Tsjqø~3$2      #  %  m&  O    +@_P O@ /  ]1 #H&  o     %  N&O    u 
+@p0? / ]1   #& j  o            ){      Nm& T     {XH& t     u\Q   zW{   u\N'  u   zW& j         N'  uU   ;  & j  u     7N'uV   (& j v     y   }LT`8     F0&  W       &  w       FN'  uW     & j  w     u\N&]    u +@p0? / ]1   H&}   j   +@	pO@]1 u\3   H{   u\N'  u   H& j       1N'ul   %& j      h  0&  b     hV&       h  N'  ub   hV& j       h  k&  b     hVf&         DN'  uf     & j        s 	  %3##!!/Bժ    ` 	  %3##!!øȸ*`    A  nN'  uj   h  i& j       7R   ({   u\ 4   Rw T       :      ` Z    wZ '  >53.'#".53327.'S5	#"? F,X,pny@:hVL4=_3_,@ J\9 2D;x|,\L06k2    P   #54.#"!!#4>2*:iUVh:@yܮy@k,[K00K[,#=|x::x|  U  |  &  ##!".54>324.#"3!|}jzB?xonyA:jUVh88hVm=>ˍʀ;;ʏ7kT46ba6  6     4>23##4.#"#6@yܮy@:iUVh:|x::x|a=J,[K00K[,     P   ".53!!32>=3*@yܮy@:hVUi:|x;;x|,\L00L\,  `  q )  !!332>54."#54>2q'@TXX$gC32vvnU3%MvvN%PT^cAK1\in00nBB     x  Y 	  %!!3!!Cꪪ      P   #54.#"!!4>2*:iUVh:0@yܮy@k,\L00L\,`|x;;x|   + * :   "#4>323##".4>;54.32>5#"yHExwE2Y{IHzY22YzHF"2#"4#$3!L1jysܒIKޓ4kq;3lr8{nڨm?AkP@   U|  &  33##".54>3!"32>55}}Aynox?BzjVh88hVUj:Bʁ;H֏ؑKBqpC4Tk7     =   #54.#"#3>32=:iUVh:6Ony@,\L00L\,3P&*;x|    6   3!!dժ   ]t   2>53".5##3$=`:I҅M`1Kf>>fKIwo55owO  6 ) A  33>32.#"#".5467#2>54.+64/sR<]QN-kOa8[4Szjw./-%HqsK*&J+%?eG%	F6:4TSvT0de4?yl[B%#?Wgu=@ykX@$a       =   !##".5332>53=6Ony@:hVUi:%*;x|3,\L00L\,X   [v   %.54676$73v4[C'h{uk˵n>7<@/7B(=gbV;3qqm`M-     _r . 9  .'#".4>32>."#54>2"3267.p^QeL#H$XpHxU//UxHgX2:%MvvN%PTB=IG?L>D|nf6a-S^&JnqO)MBan10nBAkIHME<E  6     4>23!4.#"#6@yܮy@{:iUVh:|x::x|J,[K00K[,     V  z  !  "!".54676736$33!zm<fI*OZa[3B=dY9AȤ8Y>P╣zs3D3y-^   6   !#".5332>5@yܮy@:hVUi:ժ|x;;x|,\L00L\,   @ 9   .532>54.#!5!2>54&"#4>32<}|;!HrsI#(MqIPB];~yAvedxC4L.Dc@_MM`AqU1.Ql>?fF&*GZ0vpq{[i88gZ;hS<G`s   6   ".5#5!32>=3@yܮy@:hVUi:|x;;x|b,\L00L\,    `q /   2>=3".54>7'.+532'.#"3&NwuM$PTKuAZ8n%-{3~H(-/HuSn20nBEN(g	N    =   !#4.#"#4>2=:iUVh:@yܮy@J,\L00L\,|x;;x|  `q '   4."#54>2#532>&NwuM$PT$>PXZ( ^.HuSn20nBEqhD!cEeN  A     ##54>32#4.ǾVi9>ГӁ79iGlIpX*9؜VV؂\OvO   `  p ) D  4.#".54>32!!33267>4.#"32>1N7VvM*0Nrc{6DoLgC(<y9Ez`>^E/%H>LpJ%CR2R91AGH 8{vlQ0e~y%L.+4^dzE 5GOP%)=(4[{G(*a     6     4>23##4.#"#6@yܮy@:iUVh:|x::x|a=J,[K00K[,    =   332>53".5:hVUi:@yܮy@,\L00L\,J|x;;x|     !     332>533!#".5!:hVUi:R6Ony@`,\L00L\,ժ%*;x|     ig =  332>54.54>32#4.#"#".i0UtDAmN,BkkB5otsq8<]A@]=+IbnsnbI+A~w{ĈHKuO)&IjEH`B.0:Y_Qn@@nQ4W>"!;S25K8)%&1A[zR`yDE}    =   #54.#"#4>2=:iUVh:@yܮy@k,\L00L\,|x;;x|     @  D   "32>4.'2 .532>54.#!5!.54>ڐ^66^IB]96ju=4L.Dc@;}}; GssG (LpI 1!=uL&AU`YC))CY`V@:iY;fQ:Ibq9_NM`AqU13Vq>:_D%9DHYj:      J   !!#RO    F   	  +  3>4.'.>753#Ia;;aHIb::bIe&'ef((f/gk23kg/WܜVzzVݜW     3    .  4>2#".'!!#5#5 "2>54.7sr66r{ JJB,ʿg>@id;<_vBDv^`wC*(Hf|gK*'HhA>fJ u\ 2    G ) 3 >  #"&'.=33"&54>;5"4.#2>/P?ESb;l<CR,5dUŴ,^g}k/|/C**C6dRRd6Ti! iT_g83EfC B*F)md/5fd      3#(ӤR՘?   zYm v  %   #4>7>73y)Jg=2yjH'F_7DjA<lW>1O@;jV>,MyXf Cb    *  #4>7632#".'332>54.#"P7dV=BCh@"Cb@*QG56&
4G)20}sV$MvR3YB&0K6 %*?*      3!#z    gi` '  %#".5332653327653#5#"2"hKD];HO<JI!c?rHE.qw9z78=?`<?  V{   #54&#"!!#3>32jqV1sV
ab   IVw     %#".54>32533##  6& &-fep<<ped.TXQ؈ۙRVT/VR  rV^{   3##4&#"#3>32ʔjq1sُV``ab   -   3!!326=3#5#"&/kp1rlLח0ad   IVw    %#".54>32533!  6& &-fep<<ped.TXQ؈ۙRVTR     	  )3!!!#z%L    V{   #4&#"!!3>32jq1sJl
ab  BV{ + ;  .#"#3>323##".54>32>7#",U}RMsL'"IUd=fwEehGfz>HsR,5Wq<%A3$2("5/fq<*Ze
:L-Sچf)'JiANsK%< IvV)=(5)  I  %  !"2>5".54>3!33&;`F& BefC 6qo42n{:laep;<oe(sÏQX׀q˚[L    V   !#4&#"#3>32jq1sab GV`   !!3
  hVh +  327653#5#".=4'&#"#3>32JI!c?H\3JI!c?H\378=?`<?8jc78=?<?8jc    H+  /  #".54>7%32>54.'#"EZ!%9wv9=iPϔjACmPOmD5.NmD`2onf*zΗUUzˍR!bSoAAoS3omf*Bq  V   332653##"&5kp1r{Rad       K   % / D  #5#".547.546?3327>32>=4.'D)ZwG?Uh;Y`3Ķ9T839 $2" 8C9W=MlC6_K9cI*,5~[,J6Bve`-?N( ?OU010$$EvV17]{DV3ywl'5{    rV_{   3!4&#"#3>32ʕjq1s/``ab   2 * =  2.#"#5#".547#53>32>=4.'
86jd](xI?Qf>\[-862}'CX0Kg?-bm18	
*MnD
Or,H4@qZ+^uAXuF<ay=L`:v  hh   33265!##5#"&hkpa1rH/{ad   =V` 
  3+5325۸`Ҝ     hh   #5!32653#5#"&`kp1rݏ{ad   V#| 1  3!!".54>54.#"'>32 t*D0<c~~c<'KmG#IE=E΁j{C:_y~y_:/?$2msz~D;`C$%6"eZk7icK~q`L   { Q   V /  !!".54>7".546?3267#=/"<R`k6-m`A17_{-=)BQ'#>?pM +A,:4 ElL<{7`q,`/'8%	qZվA'    gVi` '  %#".5332653327653##"2"hKD];HO<JI!c?rHE.qw9z78=?
<?     V)| . F  3!!".5467>54.54>32%">54.):_y~y_:t&C1RH $7@7$IxPf}F*+VD*-6-2?kD)KiO}p_N+9 BI;=@#5ZRLQY4O`65g4N3!ADFLR,QO=K?`B!      M{ $  "#3>32!!5>54.;>`@!1ycZ+7R5)?\<=c4ZzFs`dcF}gSv94myPIa8 ^ X   fVj   3326533!#"&fkp1rH/ӑRad   hi{ ,  !#4'&#"#5#".53327653>32iJI!c?G[4JI!c?G[478=e^`<?6jg78=?`<?6jg   V{   #4&#"#3>32jq1sJ
ab   H4{ J"     `   %!!3&"`   hVi ,  !#4'&#"##".53327653>32iJI!c?G[4JI!c?G[478=e
<?6jg78=?5<?6jg     WVz{  &  %!!#5#533>32#"& &#"32xx.dep<;pfgccTVRۊٗQVT  H{ R    (V $ + 6  ##".'73".54>;2"4.#2>8zËKnb-{!GP]8bn::of{9H}t{yKc^M!CךU[7P2,J5.-PpCHpM'GH+OHBRZ`2Bu   H   3326533!5#"&Hkp_1rl{/ad     R    %3#3#R  dm   $7'd?98>     1" $ /  #4'&'3767653653#"''##53
ra{.r	&q,bS !/#12j{@E#$]|0q!<"5DAb   1) * 5  "32767#"'&54767&'&'&76'##53|LAV:218UG&/=8O6-N@?_F?D(7-"Gq/#)^
%$ \*$@.!*nF?\KH* #TH#5DAb   Z  w      %3#%3#3#%3#ô^            %3#%3#%3#3#%3#̠&      !#53ӤR@  dm 
   327654'+53367657M593pQf$h?FA@6b!eI(R[2*      	  #533#ӤR%@-         $  %#5754&'./.54632.#"'/XZH߸g^aOl39ZZ8{4<5/VVL89CFnY1^5YVe  U- "  %56767&'&54767632&767/SD435gcbnZdF31`9:H:ZU!LOTAKv?=0ps2#<PZ   &]      &]     L3&y   c>&]       [&z  r      3#   E',    'qx   E '    E'    Xf' c    Xf   $$27'&5767&X$JԖ`e_'@5^vbĘe4)  X'c    j   %67654'&'3#"'532T!<IkHR P.^gsR2o*[gxlicK(&* '2e   D"   %654'35 7$
52) :H~vR>	D'U g   $ ?  %#"'&7673327676'4/37653323#"'&'	&<Gr_eu=X!//62"*0(..$&+h>!UNBAE3I0<^yM\dsቬ+;H2zm^\꜑#P}g£x&R"	C~m8($'c i     =  %327654'&#"67632+"'&5#"'&5473767654'&'3HIj($@GgLK1ZX%5,0.3cM[|dh<2=B%A	!
.DF-%!mN<RNymK+VZ˼̜2);jh>H7(   M'Ok    
      %327654'&#"!#53367632,Ij($?GhKL1[W~.DF-%!mNظ\<RNymK 
  'Ym    z* *  !27# '&54767&'&54763"32767XwSԖ[bWqM3/X|t]0-.()ѱvcoɱe8MA4hKEu zF'}o         #5! '6(   }t'S~!     ! =  #"'5327654'&'&767663#'&54733276{J&PDfXRNB8D-<9<NJ KU4VCyW>wLR!
Xn*'X
&/.Q&+8O\79LK5:,]-#4    CK   %63#"'&&733276u2lecw@A(IiTcI9(jzG1H*V\ss~B")  T  .  327654'&'&#"&#4763&547632#XzL,5;(.;Dn2KxAZM\MObxX'*9:XDD(NOf7*(?$S-8AP 6`'*        "327654'&'2#"'&5476B!799[]KB{ƶ`Q%T*WE{R,,9.UMAx|KU#JN   L3  &  "4'&!5 767&'&'&547632?,3/V%.-js1v-3t9>YH9!$7+(;ڮ.TVLh+bZ3[f   5  %#"'$47332767654'&'&767632#4'&y]H?BKSxlkA;"b^M`72'#}[70&huqc-##NG".*3:,=2IB="9), g:^M 'rz   D    5%5%DHHnnnn   D & 5  67&'&54763233"/#"'&5332767654&#"t$!lD?I'8.4LT^s7Z$08
"
,d$*9^W4'6O'&n=NV)qaK"	%    D    5%%5%DHHnnnnn    D   5%DHnn  D  /  &'&54763233"'&'#5276767654'&#"	lD?I'8" +EɓV

,
8_W4'6O -n=*{nmp"	%  D   5%DHnn  0 (  '&54737676537654'3'&x!9EO)"a2=`KGg&ZGM'DA2omb}8T"RY$6s9It6X	!   Vz 	   4&"2>#"&4632 XXXXztrrt?XW@AWX栠      732767#"&' gC*6:*kWZZB6"D6{S)L}@"Fw      \v4   373F       3#      < 	  !#'3<&1yI !n      8   #'337673#" &1CRz6 *boajr!nUPym    L %  #'37676537653#"' &1/(0H/<(F!34.5WY9!nr|>@2%,*;l>3
     *  "2767#"'&54767&'&'&76`yg\NNYp0<JbX~VH|eepdl@XH,7q 4C@#90L@rR<J!+%}pL 0:??  $     " 76'&' '&47VOG) (HNZVh=iTZhsBBsǮuu5a       7   #'#"'532%bU`DK*22    ~  R   !&'3673b~ĚZ00ZĤxV:Ũ;6I    ~  R   3#&'#6VxĚZ00Z~bI6;:     0  #  &'&'&'&76#'&'&#"=Bgc~\
$[\$
"8kN::;!MOU)Ae{b~TvnWl<a76G96     
     %3#3#%3#F^ 6   6767654'36qk/KOjFqmPO``NoqH    3#(ӤR՘?      @L 	  !!%goqgpoUU 2   7&'&7676&#"7N,68^=53?B^!x$%-_,. d! M
fM   E'T *    E'    E'    E'    E'    E'    Xf'* Qc   Xf' c   Xf'j c   Xf'b c  &g  Tbeq'g  'p	(    
] *  %267654/&54767#"'$473&64_>.VhG hRcpl?AOXj<9U9iDGTOA7.?#ou\N/ b\^xH    
a8'        & 6 F  ('&5473327&'&5476&'5#"'767654'&#"%327654'&Cv-(;G--0M,Q;(J$"':AGb41~!$@K5:,+iEN@TSZ	'C49g=ql@H=.%4-+#%v%'r.C!<NE  z      <     8     L      "% '  &547632&767#"'#'3%X\lTX\D8/0E= %1Bx:=$!"4'Qjr!n8    $$  '  327654'&"327'&'&5732-2"WZ[V%3,Z(.5_^53ZJkV<JЗ|&vэ          !767"'&547676&#"327BnDdN.bpyWVt>0B7,g`o6 oU%m`m!3/AbM3))I  ~  R   ~  R     0    `    ' 0  333#!!67654'&'567654'&'|djw~~tdxd=HL@|c3?>1fv!	LVxZQ-x.6{<2'1mc,#   >d{   * >@#%
+</1 @ %+<@	(!,<0%&76'&&76'&#"547#"543263 #4#"??BL??Bʑ,LWBA?>BA?>pпQQ9  l  ,   "2"54767$32632&#"# '4%7654DҼJPi?3k]KM?oabu;\SfaƎ:F78U    yP   8  327&'"'&#"%47&76$#&67 #"'632Y60I616*,!*:9u`0'"/6OAK%[9.ȵ       !  463 #"&'7325#'&&7'6et!yCBBquЍ
h!	ACBB   |U  )  "32654&24''&5432#5476n$  % *|{e6Lj`  %"%:yx~)RhKK>  a  9  "32654&&5456767$3276320! 54-6546$  % #vǳ]#x.>r>>$o  %"%}@~Y9peDQcFlWNn-7V  s\  ,  2654&'&! 3%$4567&7'7$!% /@l~.ZA  $! $?=Qm.uG4    {V{   ,@	//1 @ <0%"32544$#"54$76f@@@)@@@@Pyx  o  *  %"32654&"#" #"5323272#4#"$  % zw6^"$J7f  %"%&PW0  >{   #  $"2 "22#"5#&567663 #4#"&퀀!7y{^܀ݹIedm%  jh{  ' >@$/<@ )1 @")<@	& 
)<0&7'64323254#4%$7"6CBC bRBCACKؼJjeh0    KT      24#"53265$54767653!"'#@>z]U]xTrs@0egu/ss  }T|     "247&76 % 3%$Զ%<&Ѩ'LB     }T     "247&76 ! 3%$Զ%<&Ѩ'hB  c   J  "32654&"32654&+&'#"'&5432'3253765&7465&'7$  % $  & cge~PLfrtгJwT\U  &"$  %"%IJTObo;4ˋP6A^g[oPI   cb $ 0  +&'#"'&5432'32537653"32654&b\U{cge~PLfrt$  & ,PIIJTObo;4ˋ  %"%   el}  ,  "32654&2537653%&'# 47&76 b$  $ 0nuhigeޘ  %"%4ˮ/IJ=%ۏ    el  ,  "32654&2537653%&'# 47&76 b$  $ 0nuhigeޘ  %"%4˯IJ=%ۏ    ``   3323!"'#"543225cиx)3Ɯ)`,88{   s\  ,  2654&'&! 3%$4567&7'7$!% /@l~.ZA  $! $&=Qm.uG4    dm  +  "32654&&! ! &%$&7676=$  $ W6tm2JX  $  $8${{N&   ap  .  %"32654&%&'&'&7!2765!"'676F%  $ WDNbfP'G!$  $TrJco<    ob{    "326! %&$'423 54! P@@<)"FTY=I    b"  2 :  %"32654&%!$76! 6'&'7%&'&'&7!276 54! H&  $ JF
rcXDNbfPt!$  $=1TvTEmMd      6   "327$"327$7&76365+&7632676#4#"A?A?`ƾ5@VC?/@@@L@@@E>/}	cbWZ    wj  % -  "32654&7$%&'&763 54\$  % 
ʪ=A8)SUB<S  %"$36H9G)#$67    U  6  "32654&$'&%$76!232'&#"%$'&762$  %  T\oEh@MqKUPn^  %"%+DYl0yP^d6Qqt^}]F     0&  $   "2' '&'$! '&5"32?6*ʁ+=x	#esZhN)=md [d'u       ! &7623$54'74"m#!AVB8?kP$U.F~>=      !{     ##"2#"5324#j=;C>{jVnn    !r&  /    S~i   ! ! !5 74! $&>%~?>~    Si   ! ! 3!= 74! %&>%~?>wJ~    S~i    ! ! !5 74! #5$&>%~?>~N    Si    ! ! 3!= 74! #5%&>%~?>wJ~T   3    "36654'#"5432AA\(DeN[̼o[$N[u  x    "325"547&5423253,r>Jm,Ws>
[yu?{EBXF   E    '656%"'&76!  4"3VA!.
{x9<?8
_F.UDWT_`~?=      254#""##"5!232700+ڬ\ĸL`]N0/.1i3 rCr V   3#V    V{     '6"%)56574 65**,UGm++),}݅.p\(    _P 4  "!27676327673!#5654#"'&'&#";&543P$2~*&JHHܞBPh(LBD\j$>f>.`h>4A?~=h\$kb8:;-F_Zkf2)    I   53533##5J؎؎؎     P   ;r    432#"324ЄLT     3z   ! 473! 4'$331=PU~iibcWOJf3       4    ! %56'&53!! 4<1~k	 !TxY9vwsk  nWa  !  %! %674#"&5! % %a	lշ._z-FH+,S.+RLo	ۤTnB     7W ! ,  675 2363 ! 54+" &$54+"32(TX[P<fI+yhZtԕGw,bb+]mLV   W3   ! 473! 5 &5 3I%$&>8 wjsoeKrd  W2 '  ! 673! =4+5374# #&5! 24:ipII-<-]mxRbXxR~X{\+       2      ! 75&7!  4'"6258TW\F ;IJ:QU-\p!   7    %  #65+"! 5!2363 6#&32Ԅ!S}GJtAFWHCBuccyi      2   #! #&! 2Ɣ#cZ     Y4   ! 473! =+53254!5 4C(pbAAZZwfq211     W2     #&$'6?! &65l_$^M>pv\Y1xOh_[)euG    4    ! !234!#5!  ! 4E%D˼	}>>&T    2    ! )!"363! %22:M#@͹$[ڀg     7   #  #654#"#4+"#&=!2363 K@BM{hIF`fhh&       4 !  ! 473! !#53274%$534D'e[ ?RܬW&Z~IJȕ!6G))=i     Y32   ! 3! 5 '%5%30>'Mhko4<YK     7   )  #6=+"#6+"#&54 %372363 ؄XAJ|gZVHI:TҸ*=ۥgN{R=bb      3   ! 3! 4$5473=/	W2rg}|8;C    -Y 
   %3! ! %#-"uRN==on   7YJ )  ! 473! 54##''#"'73263236$JM'
	n>>>HS2>+3<LgEH++Z{~_bc    7W - 8  !# 3; =4'#536=4+"!5!2363 4+"3248R/9PP6dS;wC`#^M=e{ ccmT[x    W1   %! 47! &#&5!331T})RFq|Cdyq^(Yo1  7V +  675 5!3676=4+"#4+" '&$9A_JFLxd:ALEĂS'Pgg?F5pz    Y2   ! 3$=## %3! 532F&X:/b	   7  4  '  ! %34#"#54#"#32363 ! !24YFUܺ?:.8#!!#l/     4    #$%$#! '&#"366Mݲp?%8hAjV`M  VYz% #  ! 5! 6+532'6'&'3\ё\XX{aDdL۞ڈw/.}.8       3    ! !233! ! 3/:2	sNv         '  !23632#4#"#54#"367  73$ 0:?ڙUF+E"@#!߁&\r   Y4 % -  ! 47 4'&' !33#3'6#&446Q&qYAM^RBmi^i$IcofHM	;ii7HAiaB    4    ! 3363! ! 493)JȻ{    Y4   %! 47 6'&'5%553%4.=k@ªGP׾)0}YiGBx}H     4 +  ! 53! '4'#53256+53274%&53473lde[ 鐚heeԮzsU !x/6~:_   vY3 =  ! 63!2'4'#53654+53254#5325&'&'33T76hT%1T|+?R!"H61"(&0:   4    27$% 7$'$! ɕP\ސ<Y@^EFUU<    W4    7! 5#53 '#%40<
rr lmo[ +eJ]0q  W4 $  ! 3! 54!#53$# !27447휜}565k7%dҨui>     |   '  ! %!5!$! 3#3%! ! 5)54! 
I8<rrr	OfkQؔc    7X ! ,  !"'#!52'4#&3$5!23634+"32~	Mas1D>3LIvjt|	ٔxu    kYf   !! %$54#"'! ! 4'7fGD
`U6I@bYsrg8A:ԃM){6\l     Y4(   3! 4%7%#"'#% 3! #>U&;3̿0?7Yp   nWc$    !6=3! 47$$5! n ڞòd?;kHuLL8TWJ&)*   y   54&#"'675&%' % t_CCty`^q|ytJfI8=\ۣb*  # 2     3#3#3##Ѻ/㰽    ;    2"4;%"4#"32lѹF|pux$LRQ´     ){ 
  B  32654&#"26=%!>54&#"5>32>32+3267#"&'#"&1xYS\JMLepO27Gn 'aȿuc^8>M<[|%!YHZqYaq4+#"33)+RNPPXx+'#!?@=B2    ({ 0  #"'&'532654'&+532654'&#"567632wA@Q[\ihWVLHHZ[c[[MaZ[VA@^VJ=+,nQb54"[\m  PDd 	   %!!5!!!#53)Ḹя  { 
  6  326="326&!54&#"5>32>32#"&'#"&PVWMZfRPhgPPTcpP/;}Jb04TY/%W&	+ݮyT53+)CBDA>A>A2    /H{    #4&#"Ð/.   G/    33265G.Ð/.  + [   %!5!2654&#!5!#J^adlp2r     ?W     75353!5!2654&#!5!#?idxEvDFzlp2r     +  "  )5!2654&#!5!2654&#!5!#HEws{p{``<?F"iJo5FP;9JI9!c?Le    
  !3#'!#hҚ DD|U      #3#3!5##3@tL___D_P    7      32654&#32654&#%!2#!o^cj[SQ]SS]i+EORLX?F?8]oeMXtYrt 7    2654&+2+=?ؿvD  L   !!!!!!L.Pd___ L   !5!!5!5!5dR_/__ ,   #"&632.#"32675#5!4~Lʴ<l24j<||x|*@*+t+)]    :   3!3#!#:^~~Wr dn   !#3!53#d
_z__    ^s   53265#5!#"&^9zBZGo=w--Sr_͞       33	##z`t\ E   3!!E_    33###u`uVG   < 	  33##<={zPP   < 	  ##3{áz>PDP  . 
    &#"32 &6 Ua`UU`aڜ>pU ?    32654&#%!2+#XcbYSJKR]       #'.+#!232654&#1E4p1M>ze\Y_['?]Z4D|vShPIKHM     !!#!ڀ_   A   33267>53#"&'.A
L67K
$,*kCBk*,$=4!!!!4<8l$!  !#n        333##|ZkmZ|xyY> E  )  #"326757#5#"&546;5.#"5>32&ffMD_ntt&pQlT];y:Av7X|&??8?vh+]85l[hmKDg..R  E  )  32654&#"3>32+3267#"&'.&&ffMD_ntt&pQlT];y:Av7X|&??8?vh+f]85lZimKDg..R  G    53#5#"&546323264&#"tt`??aVTSXXSTNO/00z{{   
  B  32654&#"26=%!4654&#"5>32>32+3267#"&'#"&5kK84:/0n06@F2Q #S-E^T=bg~yI>;#T'1S&9NT8m\)3?26JUJLXP	ZQ`.+-,`\`d1CH^#$"%  G     4&"2>32#"&'#3VWWaA?`tt]z{{.10/Og    G    3#5#"&546323264&#"tt`??aVTSXXSTDO/00z{{    1    !3267#"&54632.#"
xn7yEB{9t\UTm
2gp fnZ_bW  1    5!54&#"5>32#"&732671xn7yEB{9t\UTm
2gp fnZ_bW  O (  .54632.#";#"3267#"&546KQ3sCBm0W][Uhd^jrm>s0=r6]H5KX]0*"0Q>-7;af]=S O (  #"&'532654&+532654&#"5>32KQ3sCBm0W][Uhd^jrm>s0=r6]H5KX]0*"0Q>-7;af]=S G 	 '   4&#"32#"&'5326=#"&5463253UQUZZVPɖ0i4>d+]V_E||D^tgxxz)f[bF5302Q   I 	   !#5!#3#53W?浵ss#PP-    8   33##8x0BVxyDI   % "  >32#4&#"#4&#"#3>32B/UFj",2%j$/.#jj?'0@)&ug@Eg?Es6"#'  [v   +5327654&#"#367632v89hu9CGR,+tt54Ilj!pm;<X#"GTP34`s^6~ :    "32654. #"&54hX[[XY[[&zxw{{wxzW   Xy   >32#"&'53264&#"X.c43a1.\;muvl=_)ʮl$!~~!#   :   46 #4&#":&{[YX[ՠxzzx :    &533265ڜ{[YX[ՠxzzx G    #3>32#"&$4&"2uu`?@`8UWWbP/00z{{    M   !!;#"&5#535};JkPF7R]rTP  [v   332653#5#"&[tCGRWttkGlj{TPg`b^68~    }   !5!2654&#!5!#K`Yslqj=?g<?IMhh_?a^   % "  #"&533265332653#5#"&FB/UFj",2%j$/.#jj?'0@('ukAEg?Eg6"#'  #   33##xx   H  gG  d    8Y  d  [vrA  d  #  sD  d    {H{ 
 (  %326&#"432.#">32#"&'#3LSbC,ml/#.,}^\VZ :      5`   !!!5!!5!!5!!5nnlphˏ5i    V
   ;+53276=#"&5!5![YYZ͹Z-,0|~ij>>~    G    #3>32#"&$4&#"32tt`??a9VTSXXSTNqO/00z{{ Xy   #"&632.#"3267y.c43a1.\;muvl=_)6l$!}ut~!# QI  +  325&#"47&'&547632.#"632#"d&/\R@5a$^`^63302b3q>>>5|4 * &:/ZXX	`@?@bj   :  )  #"&54632.''7'37.#"32654&|s
.sPm4\a^UV^%wp237,pQ57vonwwn=r O (  #"&'532654&+532654&#"5>32T]5s</s?mrj_chU[^W/mBCs2RS=]fa;7->Q0"*0]XK5H Wz   #"3###535463z>1tkqU.98P#P,ga    bo   53#5!3#+53276=Ι<98h9\P\m;<X##F G 
 $  05'"326#"&'5326=#"&5463!UZZVPUt0i4>d+]V_E|~4wuxzzf[bF53  [v   332653##"&[tCGRWttkGlj{TPg`bO68~  C    3#!3#3!535#535#4tt)r\PP\  ap   #"&5#5!;phq)99uun@PpFF  I   !#3!53#I?P-PP    G   #3!535#535#5!#?\PP\PP  dm     3#"54;33#'0#"3276ttdytrx!3rJMB,|ssW?#5$   U|
   ;#"&5#5!98dv.FFXtp(Q    U|
   ;+53276=#"&5#5!9889ht9hr.EGbm;<X#"Gwl:Q    ~S   3!!~U+_ % 0  >32+53276=14&#"#4&#"#3>32B.V"#23_uj3",2%j$/.$ii>(0@)&:;Sm;<X#"Gg@Eg?Es6"#'  % "  #"&533265332653##"&FB/UFj",2%j$/.#jj?'0@('ukAEg?Eg6"#' U|   +532653>32#4&#"MU!1$XT8[]V;;FQxlX6V~a88wYYk\  U| $  54'&#"#367632;#"'&5:G()WW*+7[//$1!U&'H/Y,-56\sa8BDHV6X66x  ? 	  33##?-{{~   :        #"'&547"!&'&!3276&NNNMMNNX-(e(-W	!-XY-!TUTTTTU=5cc5=J,==,  :  & /  #5!#3!535&'&5476767654'&3f<NN<f^l?NN?lt,..2..\\AUTA\\DTUD]/%>wx=%;)=xw>)   [v <  .#"#"/;#"'&=32654'&/.547632P1j8W*,]({44MN8>0Br34@>?=RX!k)k`FG@98b/$+*MW33	V6X66x"192-*TIX00    xY   46;#"+5326	j{mo>1gr,B0]MecU-:JxlX6    M !  !!;+53276=#"'&5#535}J88hu956PF]m;<X#"G./rTP       !  533!33##5#"&=)3276mtgtuut*87Jz~''N^71\\`9Y,-6/        5!2654&'5!# &5467 DRooW?HEBK\{'yKYmmYRv#{\8}LRy: F   31+"&53?2654&'&3HE-rft1A [n[:08}LlwpU8mYQ{     ##3{{	s   ap 	  !!!5!p kz^>T_  ^s   !!#;#"'&=!5!jG$2!V&'G^=RV6X66x^ M^    #47#5!5!3632#'03254#a\'Ln&m,8!!^R^=jR3   3   2#"&'532654&+5!5!dCP>i;}C5~Dx~uhn\' xM|mTPJS]R^   :     .#"!326  #"&54UYXUcVXYV&l~~g~] %
&   $     
#{&   D       qP&   %     X&2  E     cq&   %     cX&   E     q&   %     X&   E     u1k' Zu&d  &     u%f& vZ &h  F     RP&  '     {&  G     cR&  '     {c&   G     R&  '     {&   G     }uR'   '   {u&  G     R&  '     {&   G     N&  (     {X{&  H     N&  (     {X{&  H     uNm& & (  2  {uXH& & H  2    XP&6  )       'P&   I     fP0&2  *     {H&   J       HP&   +       P&   K     cH&   +     c&   K       H5'  \ +     X' j H K   uH'   +   7u'   K   H&   +     &   K     &   ,     D&   L       k'  u .     k'%u N   c&   .     c&2  N     &   .     &2  N     cs&2  /     c
&   O     cs0&       c
0&       s&2  /     
&   O     s&2  /     
&   O     V  yk'  u 0   m  of& v   P     V  yP&   0     m  o&   P     Vcy&   0     mco{&   P       FP&   1       &   Q     cF&   1     c{&   Q     F&   1     {&   Q     F&   1     {&   Q     u\& 2  '    2 H'  & R  y       ur'w| 3   VTf&   S       uP&   3     VT&   S       P&  5    j  &   U     c&  5    jc{&   U     c0&     =c&       &   5    ={&   U     JP&   6     &   V     cJ&   6     c{&   V     cJP&  & 6     c&  & V     /  P&   7       P&   W     /c&   7     c&   W     /&   7     &   W     /&   7     &   W     d=&   8     d^&   X     =&   8     ^&   X     =&   8     ^&   X     ='   ' 2 8   '  &y   X     9  E'   \ 9   d  m&y  Y     9c&   9     dcm`&   Y        r'  | :      m& C Z        r'  | :      m& v@ Z        4' j  $ :      & j  Z        P&   :        &   Z      c&   :      c`&   Z       P&   ;     L  &   [       5' \ ;   L  & j  [     %  P&   <     hV&   \       t' .| =     m&g ]     c&2  =     cb&   ]     &2  =     b&   ]     &   K       ' j  W      &w  Z     hV&w \       'P&  A     H"   %c&   $     c#{&   D     %ct'  |   c#m&g     %  & & $       #'  <    %cm&       c#&u     cN&  (     {cX{&  H       N^'  *u (   {X7&y   H     cNt' |   {cXm&g"     c&   ,     cD&   L     uc\&   2     cH{&   R     uc\t'  |   cHm&g      k'ub    f& v c     k'ub    f& C c     ^' ub    7&y c     c& b      c{& c     c=&   8     c^&   X     	k'vuq   'f' vd  r   	k'vuq   'f' Cd  r   	^' vuq   '7'yd  r   	c'v  q   'cq'd  r   %  r'  | <   hVm& C \     %c&   <     hV`'    \   %  ^'   u <   hV7&y   \     Fr&       Fr&       Fr&       Fr&       Fr&       Fr&       F&       F&       %  r&     %  r&  p  k  r&  v  k  r&  v    r&      r&      &      &  p   (r&       (r&       (r&       (r&       (r&       (r&      ~  Nr&    ~  Nr&      Nr&      Nr&      Nr&      Nr&     Vr&       Vr&       Vr&       Vr&       Vr&       Vr&       V&       V&      L  Hr&  ]  L  Hr&  ]  ?  Hr&  J  ?  Hr&  J    Hr&  |    Hr&  |  c  H&  D  c  H&  D  6  r&      6  r&         r&         r&      '  r&        r&        &        &      ~  r&    ~  r&      r&      r&      r&      r&      &      &     Hr&       Hr&       Hr&       Hr&       Hr&       Hr&      \r&    ~\r&    \r&    \r&    \r&  v  \r&  v   3  ir&       3  ir&       3  ir&       3  ir&       3  ir&       3  ir&       3  i&       3  i&        r&    ?  r&  J  D  r&  1    &     Fr&       Fr&       Fr&       Fr&       Fr&       Fr&       F&       F&        r&    e  r&  v    r&      r&      r&      r&      &      &     Ff&   C     Ff   (f&   C     (f   Vf&   C     Vf    f&   C    6  f   Hf&   C     Hf   3  if&   C     3  if   Ff&   C     Ff   FVr&'  Ϝ    FVr&(  Ϝ    FVr&)  Ϝ    FVr&*  Ϝ    FVr&Ϝ +     FVr&Ϝ ,     FV&-  Ϝ    FV&.  Ϝ    %Vr&/       %Vr&0      kVr&1      kVr&2      Vr&  3    Vr&  4    V&5      V&6       Vr&C     Vr&D     Vr&E     Vr&F     Vr'  G   Vr'  H   V&I     V&J    LVHr&K      LVHr&L      ?VHr&M      ?VHr&N      VHr&  O    VHr&  P    cVH&Q      cVH&R       FVr&{       FVr&|       FVr&}       FVr&~       FVr&       FVr&       FV&       FV&      Vr&      eVr&      Vr&      Vr&      Vr&      Vr&      V&      V&       FH&       F&       FVf&  Ϝ    FVy&  Ϝ    FVf&  Ϝ    F7&       FV7&  Ϝ    %  m&       %  0&        f&  p     f   %V&      r  V   r   #525#53d7y  F& j    T Vf&     V{&     Vf&     V7&       V7&      Nf&  v    Nf  [  Hf&  D    Hf   VH&       r'       'r'8  d &    /  H&      6  &        &      6      7&        &         m&         0&        f&      f   r'       r'$  d &     3  iH&       3  i&       3  i&       3  i   VTr&       VTr&       3  i7&       3  i&       %  m&       %  0&      [  f&  D  p  f  ~  ur&    F& j    r?F  f C   FVf&       FV`&       FVf&       F7&       FV7&      \f&    \f    f&      f   JV&      f v   r   53#3"ïd dm    1 0!!d	dm     y    /1 0!!/y      y    /1 0!!/y      y    /1 0!!/y   y    /1 0!!/y' _    _      ]& B   B    -  @  1 0#53Ěb~    -  @  1 03#1řb    /    1 03#Śc/  -   #5b        %@ 	 	
1 <20#53#53Ěb5Ǚb~~       '@	 	
 1 <203#%3# řb5Ěb  /   *	 @	
 1 <203#%3# řb5Ěb/       #5!#5bb  ;/  '@
 RQ	R <<1 <203!!#!5!nn\]   ;/  <@ 
  RQ	R<<2<<21 2<220%!#!5!!5!3!!!/nnnn\\   ?!  	V 1 04632#"&?}|}||{|  ?q   ?   P  1    #@ 
	 1 /<<2203#3#3#P3f111         ' 3 ? K t@%1 =1%+C@&7IF:4( :PFz4P@
PzP"P.zP@(/99991 /<22299990'32654&#"4632#"&32654&#"4632#"&32654&#"4632#"&H%'H_EDbcCE_yxxwyLaEEacCEayyxxyaEF`bDEayyxxy7a`JGacECcaEyxyEaaECcaExxy"GaaGCcaExxy         D P \ h  4632#"&62654&#"'4626763267632#"'&'#"'&'#"&732654&#"32654&#"32654&#"yxxyyaacCE%'E
		
FedE	
FeddeF
	EdeF
		
FceeO:8RR8:OxQ::PR8:QzQ::PR8:QyxxyaaECca`JySSSSxyTTTT{GacECcaEGaaGCcaEGaaGCca `$   3`u  `'3   3j     `P'3,  '3  3   `$   #3$V`u`'6   6j     `P&6  '6,  6   Z /#  @  v291 90	5/-+#R    y#  @ v <91 90	5	+-#^R^      '    4           %  #56763253767654'& Yb^`_hon"!^XE&->B%#D9``LAB\VBT=BR-;,,1Y7   B          $7#"$'5ZThh~vvuw~i   w   !#3#3!XEF    Z   !53#53#5Xޏ    !  '
  
     !  '
   4       '   
      ;g   2###׍辸    =   ,   47632""327654'&'2#"'&5476"%F$W+,,+WX+,,+XLLLLJKKL @ !UUUUUUUUYnmnmmnmn H 	   !3!53#3#z(洴ttPPD     
  5 	
  @	W	<291 <29033##5!5	!wtt}oyc    ?} !  !!>32#"&'532654&#"f6TTXYJz04?9<hptg3/0,_	MLLLrb[Yd
  I  )  .#"67632#"&54632"32764'&]'X0w>= 25DIJLL...P\\PS****hQQ;JJKJ	hh2112   =   !#!=HCD0  ;  . =  "327654'&'&'&547632#"'&54767327654&#"hT-../RU-../P--KKKK--P]12PPPP210'(KL('NMK(')+*++*+NM*+/23Gc;::;cG3288Yq?@?@pZ88C#$$#CDH$$    0  .  27654'&#"532765#"'&547632#"'&SP-..-PS+***(X/x==jDHIKLKKZ[-..44]\4421ab21hQP8<JKJJhioo	  ,   !!#5!5!5j,__    3   !!f3_  a    !!!!ff`D_    #.467TTTTf^^^^     3#>54&e_]]_eTSS}~ A   @ 
</K1 @<0#4&#"#3>32tNN^luu)qJy}wYYk\sa88  =TF  d  X  C {  d  B  }T t  d  FT u  d    CH  d  ?}CI  d  ITJ  d  =  CK  d  ;RL  d  0TM  d   ?N  d  8O  d   	P  d  ifQ  d  ifR  d  E,  d  12  d  :;  d    s  d  13  d  A  hV  d  8  g8  d  V  |n}  d  %  9  d  A  S  d  G?  d  [  v~  d  M  %@  d    
 #  #"32.#"3267!!!!!!;JܾL:9II9^o78?*?77IG8GI`    {c9 ' . 4  73&'3267#"'#7&'#7&'&76?3&',;8+$"5:lUXn;4";τPqJ8=0;i<)^_HH?WgjιKp(    _Y ,  %6767#   !2.#"3>32.#"YQbUYoHqWUnrV,e#7!v'/_HGghGG_^ٜu]\Y       C   !!!!3###5ZpP~WHE9E       l #  !!53#535#535632.#"!!!?-쿿=OL=tyB_))H   mBo )  632#4&#"#5#&'&#"#3>323
0?o5FP;]iJI9!c?L3!Bjbws{E78{``<?#'          " & )  ''#!333#3#!###535#53355O9~ĢĢ9~OO4&{{&&{{{  
  P  32654&#+#32333#;532654&/.54632.#"#"&'5#"&5n~FMMF<@}~d}@.*\&9Z2c0@F2U UKog2Y&'S-DD1JaR{k-`6ZjQ/ϒjqqR>N#55YQKP%$((TT@I!*##`     
  E  326&##.+#!232654&/.54632.#"#"'&]``]z/YM$TP*N(:?>?>SZAm)naAt02k:WX?^)}j9>/b؍$~3YQKP%$((TT@I!*         
 * - 0  37#!3!73!733#3#####53'#53'33ٹpg1 2CYȿYD2FIn$uumuuwugu    *    %2#4&#!#)"33!3*ԕ|aԕ~V*$oN   {&   lz     %% 3 p@< 1& (#
#43('1)-& -2'-42299999999991 22<20 32.#"!!!!3267#" #73&'&54767#70TJBN1Fi1OCHU,1u1!(*=Dl-.&nC>*( n-/l  *     33!!###5<~rTws1s    /     !5!!77#'%5'+s-PPMMo؈onوn    9  - b w   '67>32#"'&'"326767654'&'&67'>7632#"'.'&/#"'&54632326767654'&'&&#"32fbU!O3'A"+0.!.! 
	_	\5#?\k2,,#2!$(2( 4"	)1>((E8& ^,9QF9)ЗiRm:3Xwdg7? 2j7#=5(6$ 629T/(2M
!:5S}$@{mbq~Es/4	
-&

"TAB`]|@8nRkcd]aC"    . ) 5  '632327&547632#527654'#"'&#"%654'&#"o|@X"07PYtaTk~j[IwmqJ2530D#24!`NkBX``S㫣qJ<Xr~hFlV1??0W     j     $ )  ! 3#3#+##535#537!&#!3276'!^x_	^r&a~[[[[Mu	t:9s{FYrsstcccCt;8s   5[x $ -  #5&'&76753&'&'6767#5!'ь߉ߌi`p^_kbkN?H9x"cxhuOooOmnͦ$F_0,?'S*% lҙl   '       5!3!#3##!##5373!/3FХA3C=>`R{{{{{A       6  67654&#"5>323#!!3267#"$547#536767!5?
	7^\iV^':,hski		HE	4cq<;''K={[/	{9b{DI--N@{
O/{     O ! ,  &'&#2767#&'&576757O[TUeeUT[Y\Y[dsye]Y\[CvlCi----iH$"u9Bt"#BuflC  /      !!!!#!/ss-+ժx	     h  q %  !!##.+532767!7!&'&+7q7V#7KPN76SٲM{cݑG;
74K7{P{V^77hy]M@f{L5N{   
      !#'%5'%3772N4L4PP~n؉noوo.   f  u    !2+!!##535#53326&#0It⦦1ϔ
  1     %3267#   !2."_|dT	ȄE}=[~oi
7@,L]r4*:0N̾        ( 2  .#"3267#"&54632%3#"326.2"&54:F#KVVK#F:-Q.~*Pʇ=II=<JJ44"K      :       3!3%!!!!!!Dfegqdx+%   T  H   #67654&#"#3>323]W!{/tKbJ
G'QWab ^  T  H   632#64&#"#'?3%Ǘŋ]W!{1$ÑEmJHWEbOYbc    J      %#	!3!# GHMZMdq+    
    	  #     "32!!3463"##526eb223b WU&WU&	1Q~>;\>       }N  * 3 >  "32>54.'2#".5467>32654&#%!2+#hjMMKLijKLkZZ\[~}ڶ[\ZZ&RXXRuJjhKLLLijJgZZ[~}ڶ[[}~[ZZICBISqmop   B        33!27&#%!2+!67654'&` `s1:+YX*qjdZ)VV)          (  %#'#     %27&"676'&\ӿ,F E]]]][{ab[2222jT%%5$c$  %   	  & . 2  &'&+3!.+!!2!27&#676'&%3A::f&AVy-`5?vfAd)7%LK$201/O~hbb)j)V>U)-      f   h@6	
	

				B	
 
	`` _`_/91 <<2<<90KSXY"###5!3###r}r7q^^  -B  0      %#!!!5!bJZCJ]dqddd J        .   %  m     -  )  7 7673 $54$32!"53!25&'&#"6Ky{U>ZLtࠢ""38M{{M7M3TT<`xGZAEIpP3RQ4O        	    !!!7!#3#3#B!#n!ӄO-`ddh   Z{&  ' { K V Z{&  ' { M ` e{' u V&   {  e' u V&   t  Z{'I V&   {  Z'I V&   t  Z'I V&   u  
Z{'I V&  H  j{'J V&   {  j{'J V&  I  _{'L V&   {  _'L V&   u  _{'L V&  I  _{'L V&  K  Z{&   {  e'F &   u V  B } 	  5!!B#ZpZR#ZZ      M 	  	'#'"ZZ$MZpZ#     B } 	  	'7!5!'7ZpZ#ZZ      M 	  !737@ZZ#ZpZ   B }   !5!'7'mZ#ZZ#ZߠZ#R#ZZRZ     M   %7#7'3'ZRZZ$R"ZݠZ#ZZ#Z       a 	  7!##:nt':tn       a 	  #5'#5!tn'dtn      a 	  )53753dtnntd    a 	  733!ntd:nt  B }   3!'7!5!7ѓc}Z#Z㔎RZ#R#ZR   B }   #5!7!'7'7!'/cZ#ZߤRZRZR   Yxa 5  32767676767632&'&'&#"#"'&/#7!$f !+!3-68+2",j!!!3
.6+85.0$m:w'07)(6;C+: ,:'+:   Yxa 5  !5!#5#"'&'&'.'&#"'6767632327676:m$0.58+6.
3!!!j,"2+86-3!+! f:d+':, :+C;6()70'w   B }   !!'#537i&ڠZZ#ZZZZ#R#ZZ     M   '75'3''#ZZ$R"ZZ&ZZ#ZZ    B }   '73'7'7#'7!5hZZ#ZZZZRZZ     M   77#75'73ZZRZZ'ZZ#ZZ&    B }   '!5!7ZZ#ZZ1ZZ#R#ZZ  B }   '7!'7'7!'4ZZ#ZZ1ZZRZZ  B }   53#5!5뤤4Z#ZhZ#R#Z      M   %'3'3!5Z$R"Zh̠Z#Z4     B }   !'7'7!#3̠Z#Z4ZRZ      M   7#7#5!ZRZ4Z#Z̤     M   %'7'3'73!5ZZ$R"ZZhZZ#ZZ   B # (  276767654'&'&'&#52#!5d

	
>b-*,%:0Z#Z
	
*+(54<852.&Z#R#Z     B # )  !'7'7!"'&'&'&547676763"mEZ#Z0:%,*-11>
	

ZRZ&.258<45(+
	
     B # $ >  2+#5!5!54767676"3276767654'&'&'&l>b-*,%:0ΠZ#Z2)-019	o

	
#*+(54<852.&ՠZ#R#Z};47(+

}
	
     B # $ >  !'7'7!#5#"'&'&'&54767>";54'&'&'&e910-)2Z#ZΤ0:%,*-b>
	

o	#+(74;}ZRZ&.258<45(+*
	
}

    B } X  3267676767632267676?'7'7#&"'&'&'&'&'&""'&'&'&#5!!Z#Z	>	>	Z#Z"		*!#$'		*	ZRZ
% '%

%' "
Z#R#Z   B    !'7#5!3'7'<2Z#Z<2Z#Z Z#R#Z ZRZ    q  `   %7'7]JQgz=ZӄhPJV}      e   5!#Z"ZǠZ#R#Z      e   !#!'7'< Z$Z9kZRZ      e   !3!5zZ"ZZ#R#Z      e   '7'7!3<Z$Z|ZRZk9      R   %!5!7#7yAcZRZѤZ#Z     ?  ]   !3!5ҤZ"ZZ#R#Z    QX )  7676767632#4'&'&'&7#7K$<9JGTWDL7: %#0(79).%$ZRZ5NSH;9!6:IFT7/0'$&$2(GZ#Z  QX *  7#756'&'&'&'&0#676767632ZRZ$%.)97(0#% :7LDWTGJ9<$5Z#ZG(2$&$'0/7TFI:6!9;HSN     2   	   7!##5!:ntl':tn?PP    B      !!#33#'7!5!'7#Z4ZݤZ4̠Z#ZZ##h#ZZ   X  y 6  #"'&'&'&547672767>54'&/#7!J%%%'HD_SlhX[HJ%%%%Jw422-A8;>112-!:zJZ[ghX\HC+%%'GKY[eg[WMs2=>FD{2,/2{DF>H':   X  y 6  #5!#52767>54'&'7#"'&'&'&54767<:!-211>;8A-224wJ%%%%JH[XhlS_DH'&&&Iz:d'H>FD{2/,2{DF>=2sMW[ge[YKG'%%+CH\Xhg[[I    B}   5!B#Zp{#Z  B    !!BMZZ#      M   3'#|"ZMZ      M   #'Z$MpZ#    B}   !5!'7pZ#ߤZ    B    '7!5Z{Z      M   !37ZMZ G  M   !#73{Z#Zp   B  | 	   	'7!5!'7	5!!ZpZ##ZpZZZR#ZZ   *  M 	   !737	3'#'2ZZR"ZZ#ZpZMZpZ     B  | 	   '7!5!'7%!!ZpZ#ZpZuRZZ#ZZ#    B  |   '5!!!!5#ZppZ>R#ZZ#R    *  M   73'#'#'3hR"ZZ$RZppZ#    B  |   '7!5!'7!5!'7ZppZ#>RZZR    *  M   %#73737#hRZZR#ZppZ     B A!    '7!=!Z#Zp{Z{#Z    B A!    !!	!5!'7BMZMpZ#ߤZ#Z   B }    !73!!!'7#5!!qVa6ZEV`6NZ#Z">RRjը;mRR:lNZ#R#ZRR   B    !  !373'7'7#'7#537!7'!RRȚNZ#ZN|NZ#ZN.9#!RRRRNZRZN ~NZ#R#ZN RR  B }    !'7#5!7!5!73'7'%!7'!`]Va6.ZxV`6NZ#ZRR;mRR:lNZRZRR   B }   !!5!RRpNZ#ZNRRRNZ#R#ZNR     M   #'3'#'RNZ$R"ZNRSpNZ#ZNpR   B }   !5!'7'7!5!7NZ#ZNpRRNZRZNRR     M   %37#73RNZRZNRRpNZ#ZNR    B }    !!7/7'7!5mRRRNZ#ZNNZ#ZNRRRNZRZNNZ#R#ZN     M    '77#7'3SRRSQNZRZNNZ$R"ZpRRmRRANZ#ZNNZ#Z   6a   ##7!#tn::n3:t:5p::     6a   	'#5!#5'5C:3n::n:4:dp:nt    6   %753!5373:4:dp:ntn:nd:4:     6   %3!'3n:nd:4:n::p5:t   B }   5!!!!!Z#Zwgw"?Z#R#ZRwRwR  B }   !5!7!5!'!5!70"wgwZ#?RwRwRZR  B }   37773'''#5:;!\[`Z#ZCCjjZ#R#Z  B }   '7'7#'''53777Z#Z`[\!;:ZRZjjCC      M   %#5#535#535'3'3#3Z$R"ZtZ#Zt     M   533#3#7#75#535#5ZRZtZ#Zt   B } 	    !553353!Z#Z{Z#R#Z     M 	    '3'#7#7Z$R"ZnZ#Z}ʻ  B } 	    !'7'7!+53#53Z#Z}ʻZRZ    M 	    7#77'3'3ZRZZ#Z}6    B }   !!#3#Z4ZݤZ#ZZ#    B }   3#'7!5!'7뤤Z4̠ZZ#h#ZZ          5!5!	!!?
Ou]%uu      v    333'#!#\^vtP
u   B     !!75!!5
t]]X     v    ###3!3,^\X&
     v  
    3'335%!!#	#^\XtvpFgu      v 
   %3'3#!5%#	#3!^\^$tv~Fu    v     #3#!5#3/#	#3!J\^^|HGetvJ~{GGMu       v     3#!!5#3#	#3!F\F^tvW~u       v     3'333'37#	##!#^\fd^tv
^u9    v 
    #!5#3'%3'37#7#	##3!3^^ fd^tvJ^u     B  
   '#35!7'!!!5	5~t]]     E  F 	   7!##!#*:ntaI':tnIF    E  F 	   %!53753!5!ldtn~ntd&I       v 	   #7#3'#	#3	3\^^tvP*Outu   B }  ' 0  #"'&'#53676323'7'7%&'&#"!32764RvxN1kk2Ow9g' Z#Z0GD2&+JD5@3PO2BB4R,( :ZRZ11/0  *  M 	   !#737'#'RZZ"ZZ$#ZpZ*ZpZ#  Ba   7!5!'7!5!'7'7!5!ppZ#Zp?ZRRRZ  B }   #5!5!53!Z#Z[qZ#R#Z    B }   !5!53!'7'7!#p\Z#ZߤZRZ   B }   #53533'7'7##Z#ZZ#ZߠZ#R#ZZRZ     B }   #5##5#53533533ҤtZ#ZtZ#R#Z   B }   #53533533'7'7##5##tZ#ZtߤZRZ    B }   53533533'7'7##5##5Z#Z8Z#Z8ߠZ#R#ZZRZ        	  !!	?Ouuu  B   	  7%	!5uzR##        7	!	?S:uuzRuu##   %    
  %!3!3hV[7ln7R{+  u\     #&'&#"327673 u	B!OO!B
ocI7͙7Ic   L   0  "'&547632654'&#"563 3276767&#"\m`cu\6% GGnthr5?,/H@3H5,Y:$UeI+HQ\N,tqzSd69->eSY׮l          7!!5!!5!!LLk+  5     !#7#53!5!!5!733!ZD2/+^^``k    I b ! 0 ?  "'&''7&'&54767>2"&'2767>54'&&cv-'''OO_@8vcu-'''OO_A:GE:;9($(#&GFF:;9cv8@_pm__ONP(-vcu:A_mp__OOP(-9;SPF($(9;PSF'      O@*iii  i B  91 /90KSXY"#3	!q          !#7!hqq       P   3!!"&63!!"!0",Z(膆(\JN*"f_QQĪKM_f  OPi  % +  %3!!"''7&'&6;73#!!#"!#L(0,:CyEB航6'|>v\JK-".4"$:1cQı2#KK_ff_lF     O]  B /	3
3ް2  ް2201!3!!".>3!!"N=c(憆(c=֪I9[[9I     P   &'.#!5!2#!5!276767!5 ,Z(؈膆(\JL, 1f_rĪKM_f  OPi  % +  &#!5!27+'7#53!5!3276767!73&'&'(/-9CyDD舫6'{rx\JJ. 4 %:
1crı2ݪyKK_ff_lF    O]   5!&'&#!5!2#!5!2767>b(؈憆(؆b>,I9[[9I       3!     L9   @  1 20!#!L^     L9   !3!9_k^   L=  7	   	  @
 <91 990!!5	5!!LR%#
Չ\P_     X-y    1 0!!X!ת   X  y    !5!!5!3!!y!DCmIL fB7     +U   e  +G r    ?-   ; 
 /@
 
	 991 90'%3##d)#Ӕ/}b%9   ;v' ue4   ;e'He4       %  .#"326"&'#"&54632>3"38\<HZRDDjPNBT~^8.Z8h.8\:{cjmvd|k֥suu|d     )    / 7@$	'!	-0 $dd*099991 <2<299032654&#".#"326>32#"&'#"&546329[=G[TFBi8\=G[SDCj~/[w~SNAU}^sdlkutcjmv u۠d|k֥s  }T   !3!T*,     }T   !3!T*p    _      ,   33#	NM^T    ,   3	3#T^     , $  476767632#4'&'&'&#"#;9_UijB9
KGLV<SDbg:8 :;3l\]A99 )0!&p0`    , $  33276767653#"'&'&'&S<VLGK
9BjiU_9;^D`0p&!0) 99A]\l3;: 8:gb     P  @ /<<1 @
//047676&'776^Aj\Nx]Aj\NwD"jdEqqCjdEqqC    ?|  /  47632&#"'776%47632&#"'7769CmjZCC:59CmjZCM06P9CmjZCC:69CmjZCM05D"b\i9&
	b\i9+"b\i9&
	b\i9+    5  / G  47676&#"'732%47676&#"'732%47676&#"'732R1-q2J$"22-q2J$"21-q2J$"22-q2J$"22-q2J$"21-q2J$"2]mSJNoQJN]mSJNoQJN]mSJNoQJ  '$'W4W    ' W'$0$   ' W$    'W'$'4W0$   X-y&.   $  J      3#3#!!dQ   W }&.  '$'W'o$nW X y&K  ' $ W  Xy   #"'&'.#"5>32326yKOZqMg3OINS5dK
t]F;73
";@<7 6<    Xy   32767>32.#"#"&'XJF]t
Kd5SNIO3gMqZOK?<6 7<@;"
37;    X yG   &'&#"5>323267#"''43OINS61-NSXIFJKOQdSP;@<7W"<?;7)     X1y    !!#"/.#"5>323326X!!KOZq!Sc1NJOR`!t]D;83$<A>777=  X`y    !!#"'&'.#"5>32326X!!KOZqMg3OINS5dK
t]Fc;73
";@<7 6<  X bz '  767#"'!!'7#5!7&'&567676ǧfYUE5kIQ%\n*xrYQMoIF\<[ETFRq$"B2(d%(9L5X    X y   $  !!!!#"'&'.#"5>32326X!!!KOZqMg3OINS52'V
t]Fجϯ;73
";@<7	"6<   X 1y  0  %#5!7!5!73!!!'#"'&'.#"5>32326Qu {hq, gqTKOZqMg3OINS52'V
t]FR=R;73
";@<7	"6<    X  y. 1  %!5!7!5!7&'.#"5>3273267#"'!!!!'hMEnK	Mg3OINS523J:VQFJKO!8!E$F";@<7 8<?;77   X1y  7 K@&' 10+5 * 5'.810 *8<2991 <2<<99990#"'&'.#"5>32326#"'&'.#"5>323326yKOZqMg3OINS5dK
t]FJKOZqSc1NJOR`t]Dï;73
";@<7 6<а;83
$<A>77
7=     X 0y 8  &#"5>327&'&#"5>323267#"'3267#"/'00NJOR:G67'43OINS520N]a91FJKO?J4r[DKKOdgb<A>7	;@<7!7)<?;75=@;83)    X y  7 ;  #"'&'.#"5>32326#"'&'.#"5>323326!!yKOZqMg3OINS5dK
t]FJKOZqSc1NJOR`t]D*!;73
";@<7 6<а;83
$<A>77
7=     X y  7 S  #"'&'.#"5>323326#"'&'.#"5>32326#"'&'.#"5>323326yKOZqSc1NJOR`t]DKKOZqMg3OINS5dK
t]FJKOZqSc1NJOR`t]D;83
$<A>77
7=;73
";@<7 6<а;83
$<A>77
7=    X y   $  !5!53276767632.#"#"&'y!JF]t
V'25SNIO3gMqZOKج#?<6"	7<@;"
37;  W y'      %52%  $'"51pZV(Iٜ    X Dz  ;  %76767!##"'&'&'#5!!5367676323!&'&'&i1*+V	WJRNMR 	W,!::!,\HSLPM%+*%'H:^2:A<336G84^:H'@'H?Y L=@33/N0<^:H'%    X`z  !  !5367676323!&'&'&!!i:!,\HSLPM%+*!#'H?Y L=@33/N0<^:H'%  X`y&      Xy&    ' '   Xy'&    o Wz'&    n  J.      3#3#!5!5J=>𹬬  J.      ##!!!!>7B     X`y 	   365&'!!5!&547!5!!%43448>!0IG00GG2?8>;_8    X`y       !!!!"264&'2#"&546X!!IdddeH:l'**z{BbFE``bq+((d:svv  X`yK     !!!!2&'56X!!BS	    X`yD     !!!!73#X!!鏫BZV  X`yD     !!!!33#X!!֕BLV   X`y     !!!!!!'X!!߰TUUTB      X`y   
   !!!!!3!X!!-eBz(i     E`    0 7 G O  !!!!#"3###535463!3267#"&54632.#"'53#5#"&4632264&"X!!4@#mmC???DJB&G$$K&aqk[Q_B;18BCC?-I\\I-?<i<<iB$7%$3`3D= DH>p`ctiF6A?9i=$#tu#gSSS  X`y   *  !!!!>32#4&#"#4&#"#3>32X!!."]?T\Y88EQY7:DQYYU;;RB=:xoHOM]QHPL^P%U20=    X`y    ,  !!!!3#7#546?>54&#"5>32X!!ffc`--A6(Y1/a3\p$-,BiN2A+,/-7#!^aO&E++
  X %y  <@ 
 
	 <291 <2<<990!3!!!'7#5!7!X}y}J;fժhӬ  X yB     !!!!!!X!!!ج   X 
y   %#5!7!5!7!5!73!!!!!'G=XkXU7Y Z:wSAw@   X  y      7!!!!!!!!X!!!!߬   X  y?  
 (@  (	'<2291 /905!5y!!LK
     X  y?  
 (@ 	( '<<291 /90-5!!X#!!V  VTw  
   3!!5!5V!!!!߬¶LK
     VTw  
   3!!-5!5V!!!!߬V  Vw    #5!7!5!73!!!'5 p[5m{*[y~!߬`u,`vLK  Vw    #5!7!5!73!!!'-5 p[5m{*[y!!߬`u,`v     W  y   &%5767$'5674[zآb|۠M)Ig#M(Jh#  Xy     %5%%%'w2rK/dtm0x0oV   Xy     '75%%5%'rKnd.t'o0xEu0#oV   Xy    !5!%5%%%!!'X C_^?sMN#N+PJ>`5Yd|5  Xy    !!'7#5375%7%57'NEO>:fLNtt5\h}a5H<  Vw?  #  %#"'&'.#"5>323265wKOZqMg3OINS52'V
t]FJ!;73
";@<7	"6< LK    Vw? ! (  %#"'&'&'&#"5676323276-5wKHGOZqM343OFGINIIS52'V
t]FDE)!!;3
"@<	"6   Vw + .  %"5>327%5%%%3267#"'&'&''}QINSE^AsMP#Bt]FJKOZq _4O;@<7փ_5Xc|6<?;73
5K>     Vw  2  7'732767#"'&'&''5676?5%7%53;L
t]FDEJGLGOZqP<gUGINI5:"gNKtYG;6?83
$5@<j]i~b5   VJw    3-5	5V!!!! LK     VJw    !5-5w! !!߶LK`    Vpw   !  %'75%%57%5%7%'NmL4P|3hnL,WJ/qN0NZpOh2MXXH  Vpw   !  %%'%5%75%7%577,~'b
0&|}A0Yif2e\`j0^_8c7   Vw/ 
    %5$w\?&C@WaŖ   Xy/ 
  5 5 %$XC&?\@9;^aW   Vw 	   %&%5& &%&%5$7$7p˱l#a68O]ɗ9=}    Vw 	   %56%6%55 %$)ޱpMa#lܜ86˖}=9"]O     Vw  *  %#"'&'.#"5>32326 &%&%5$7$7wKOZqMg3OINS5dK
t]FJl#a;73
";@<7 6<RO]ɗ9=}     Vw  *  %#"'&'.#"5>3232655 %$wKOZqMg3OINS5dK
t]F)a#l;73
";@<7 6<R˖}=9"]O   V[w    67&%'&'5$774hmU֠Gc _eT2wnw2"O0Bj%   V[w    '567&'567&hmU*c _eT2Vwnw2O0BDj%    X y_   %!"'&54763!!"3!yɊD_`Dƍ^`     X y_   75!27654&#!5!2#XD`_DȊɣ`^ȋ   Xy>     #"&'&5476;7!!!!"#'J_+30TD~K9#

K^+#Eƍ5p5    Xy>     32654'&'7+'7!5!!5!237RJ_+30TD~K9FC

K9^+#Eƍ55    X  y     %!5%!"'&54763!!"3!y!ɊD_`Dƍ^`    X  y     %!=!27654&#!5!2#yD`_DȊɪ`^ȋ    X,y  &  %!!'7#5!7&'&5476;73!!!#"$UrG6:qYȲG5^_=R5 Yƍ5p&`=    X,y ! +  +!!'7#5!7!5!&#!5!27327654'&'92D4VqF53D&#I`__ 2ȋ559`^`    X0y  !  %!'7!5!7#"'&54763!!"3!!yR|ɊD_aDAQjfƍ^`5e  X0y  "  %!'7!5!7#!5!27654&#!5!2yR|Da_DȊ]zTQjf`^ǌ^De  N    3#%332653! &1  N    332653! &3##5#535eDdd  X wy  1 /3ް2  /301!!!!X!w@    X wy  1 /3ް2 /3 01!5!!5yw   X y   H /3 
 ް2	ް2 /333017!!!!!!X!!w߸     X y   J /3  ް2	ް
2/	3 01%!5!5!!5y!w<Dh     ^  r   #!#r@Z    ^  r   33!3^Z   O i  3 ?   2"&'&'&547676"2767>54&'&'3!!#!5!ݾOO''''OOݾOO''''OO~GE:;99;:EGFF:;99;:FތPOO__pm__ONPPNO__mp__OO=9;SP;99;PS;9     O i  3 7   2"&'&'&547676"2767>54&'&'!5ݾOO''''OOݾOO''''OO~GE:;99;:EGFF:;99;:FMPOO__pm__ONPPNO__mp__OO=9;SP;99;PS;9Ռ  O i  3 ?   2"&'&'&547676"2767>54&'&'77''7ݾOO''''OOݾOO''''OO~GE:;99;:EGFF:;99;:FBccccPOO__pm__ONPPNO__mp__OO=9;SP;99;PS;9cccc    O i  3 7   2"&'&'&547676"2767>54&'&''ݾOO''''OOݾOO''''OO~GE:;99;:EGFF:;99;:F,ccPOO__pm__ONPPNO__mp__OO=9;SP;99;PS;9Kcc   O i   7  3#2"&'&'&547676"2767>54&'&'ݾOO''''OOݾOO''''OO~GE:;99;:EGFF:;99;:FPOO__pm__ONPPNO__mp__OO=9;SP;99;PS;9  O i   2 L  2#"&546"326542"&'&'&547676"2767>54&'&'h7b%&'qqnNL88OݾOO''''OOݾOO''''OO~GE:;99;:EGFF:;99;:F)'%`8nqqMpLM77POO__pm__ONPPNO__mp__OO=9;SP;99;PS;9    O i  ! ' / 7 = E   2"&'&'&547676%&'&'&654'67676-ݾOO''''OOݾOO''''OOf :F-T1-F::E.S 1.E:POO__pm__ONPPNO__mp__OOAϚ9FPQ9.9떖EQPD19    O i   ! ;  !!!!2"&'&'&547676"2767>54&'&'+{{ݾOO''''OOݾOO''''OO~GE:;99;:EGFF:;99;:F;gZfPOO__pm__ONPPNO__mp__OO=9;SP;99;PS;9    O i  3 7   2"&'&'&547676"2767>54&'&'!5!ݾOO''''OOݾOO''''OO~GE:;99;:EGFF:;99;:F2mPOO__pm__ONPPNO__mp__OO=9;SP;99;PS;9I     P i     %!!!3!!#!5!3Ҍ8Ȍ7ǌ6    P i     %!!!!53rM_  P i     %!!!7			'3ͬcccc
#cccc	   P i     3#!!!3  X  y   !!# yӪ    X  y   !!5!3y--  X  y   !!5!!C!DZ  X  y   !!5!Z  X yw    	5V!     X yw    7%X!ߨVw^^  X  y?   
  %!55yyy!LK     X  y?   
  7!!7-X!!ߨ{?繷   g    7!6762"'&'$&"26i1[륢S4OsPOtO.D/YR3BPQqOO    LN   #4&#"#6! NMz(  /N   7332653! &;zM    i g    	Y     /`     1 03#`  7 	  !!'	TSTS8    X`y    !532767>32.#"#"&'yJF]t
Kd5SNIO3gMqZOK?<6 7<@;"
37;     
  !3 3 qj}+)y     
  # # y(,}     Zw
  #  !"3!!"&5463!!   )!"  3!wk:PP:jkwjQ9:PD{|  Zw
  #  !2654&#!5!2#!!   )5!2 54 #!Z:PP:kjyikQ9:P   XAy     755%5!5X!#!!ʶLK
     XAy     %5	-5!!y#!!!!KLV     V  w?  
  55!5!w!!!KLV     X  y?  
  55%5!X!#!  Vw 	   $75$&%&%5$7$7 "nWlܜ86s˖}=9]O    Vw 	   $'$'5 %$5)n˱#lݷW680O]"ɗ9=}   Vw) % *  67&'&%&''&'57&%5$?7dMjTVʥ3˱!3a4m"cjX)3S][e﹏3N@%HZ-=}k$    Vw) $ (  6%'56?56%7$'57&% D>WwZN(۷+/m")33 +Si06 3hiyje˖     X[y    3!!!'7#!	!PYBzrYh?ݪ@?@     X[y    3!'7#5!!5!!PYzrY(s??ݪ@   X>y   !!!!!!'7!5!7!X!w R`Rgfjf    X>y   %!'7!5!7!5!!5!!yRgw! RjfhDf    Vw? %  %&'&#"5>327%5%3267#"''43OINS:Z0!!x2XIFJKOQd>3;@<7ҧK{"<?;7)   Vw? &  -53267#"''&'&#"5>327V!!?E>XIFJKOQd>C43OINS:Z0"<?;7)';@<7ԧ     VKw  .  &'&#"5>323267#"'' &%&%5$7$743OINS61-NSXIFJKOQdSl#a;@<7W"<?;7)XO]ɗ9=}     VKw  .  &'&#"5>323267#"''55 %$43OINS61-NSXIFJKOQdSa#l;@<7W"<?;7)X˖}=9"]O   P/     I b!    rLR   50zJ.     ?  	  3	%!	=yzU    ?>   	#	#h֣ͣG9    >   	3	3h*338      >  	  !!#	#g֣ͣrcG9     >     !!!!#	#gg֣ͣrrcG9  w   !##m  Z   ##5  w   33ϸ"m  Z   !533X  % C    !!3#CrrCr[     C    !!3#CrrCr[   %~    !!3#CrrCr   ~    !!3#CrrCr   Xsy^   !#y^  ap    $%%$~    
7       %6 %!&'&"112*zz`XXroGGn   Y      	67"	,J5PP5J X*77*#L8   P     "2642#"''7&546Ċǌi56؝]QBɉǇo3NEQ\|    G +  - 7 A J T  35#"&546;5#"&46235462+32"&=54&#"3#"2653264&"2654&#ςYxxYςZxxZE1/EE0uu0EE`Ev/EDaEEaDE/wZ\ZЂZwwZЂZ\Zwu0EE`E`E/1EE0E`EE0u0EE1/E   Xsy^   !3!yߨys    +~   !#!r    ~   5!#rrS; +;   !!3vrr   ;   )3!rv;S   Ll   4732#"'&'.#"0Pd@7+	h $TA6?&H    |   
#"&546323250Pd@7+	h$DTA6?&Hk-k    h i    !!!#%!!h\roa`޾"   (I  
     	!!	#37!#3'Q''Ho99Ƀo!p=⻻    }(TI       #!!7!#3'l)okkɃ=r!r⻻   + 2"   # / ; G S _ k w           +7CO[gs  !2#!"543!254#!"+"=4;2+"=4;27+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2%+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2'+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2'+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;22+"=4"=43+"=4;2+"=4;2"=43!2#\\K\=Kl]\\\\]ii\][]\\\\\\\\]\\]\\\\\\x::f>]Y"\I\\\\I`LLMK\y>>   (I  
     !!	3#)%3!'-''96=û   HJ   7	hHH--JJ   X  y   !5!!!!5!D!DZP  4    !!!rrZm    4      !%!!5!5!5!!mr    4       3#3#!%!!5!!omrX  4      	!	!!	!ZS;Z$m  4&  	?      4    '  3276'&#"!#"'&'!!67632!zzzzzzzzIwwHS;HwwI΍GG2GG$_EXXE^m_DXXE_    3   #  %673#&'%676'&1rsrs2srsrTTTT@TTT|BB@B)B)΍11@4121    tD&  
"     XBy   3!!#!5!y	]    XBy   	3!!#!5fa]<  4   	  !%!!Ybm5A    4   	  !!!!;rbmY5A    4      !%!5!mrXae     4   
   !%!	!2mrx1x     B3   5!3!!#!B#ZCkZF#Z-ӠZ   B3   	'7!#!5!3!'7ZlDZ#Z-ӤZ   4  
   !%!!5!!ZZmrϠZnZ  4  
   !!'7!!!'7;rZZmZ1X1Z       '  327#"'$%'3632#	6'&#"zz=>lWWsPYX2灾vzz>GjX`OXG    X4y    !5!!5!yeZrr^Z   %3     33!#!!3/	.^+^kk     4     	7!!#xr;rc/Krmu    4      %	!%!50!53!ymrZ[z  X  y     &'&47673!!5!64'<<<.LM.;<+PN.;==R-*/KO/'-TQ0˪1.     X  y   	'!!#!5!'"ZABZ$ZuZ#   4  
   !!%!!''!;GZZHrZEZw   X  y    !!!5!!X!D!CZ  %3     !#!3!###.77/^+kk    4     !	!!	3!xS;ZK{mu     4      !	!%!#5!5!"~~+mrz[Z   X  y   !  5!5!!#&'&476654'#D!C<+PN.;<.LM.==<<}}-TP/ .LO//AJ/,EN*   X  y   !7!5!3!!7@ZBAZ#ZhZ     4  
   !7!)!7ZbZmEZwZ   4&   
     4&       4?&  
    4&       4D&  
"       ,D   $  467632#4& #62"&$&"264:zӃ:4ር♜VuVRyV8vu4DֆMUTyRT   4& 
  	?     Z^'
F      4&   	?      X  y     3#%3#!5!!?ʲC!D$Z             3#%3#!#7!?9hwMq  '    ?H'  8    t'   
"       ,3 +  33676767653#&'&'&'&V &#$K
9BU5>=5^:;^D`1o%".+y 9:C[\l3;b 89hb  Xy3    !!#"'&7633!!";;yV__W9|+q_ih_    XyH'  8 a   X yH'  8 !    Xy  	  !!3#X!Ścת    %   
   *  !%#567!676&'&'&'&|z*(2JE<iKH#&GIJEE|-2
M3
+O	
!r;
?9y?p
!   Xy  * =    67 '&5677%"632327'&32767#"'&'.#"y{h	p{"zi	piE55dJt]BFZCEF4Zq
Mg3ħĨ1P$s
7%ےs3
!    Xy3   #"'#&'&#"5>323326yKOGU43OINS52^NFz;7 (;?<6'=  '    3#3!!#7#537`?+0'7ϺrSSr  4     !!!!3!!!'7#5!7!xrddeZmn;fժhӬ   4& "  	?      X  y    673367##%.XhZvrM'hx:Bxv`M]Pd
Hd-Dbgd
*     X  y    633267#.'#%'Xr<;oj/eE}{SC5E%rI1V/dj  6  `   VT{   F`   4y&       45{&  4     4`&       4`&       Fy    .   !
//1  	/<20#5!!!#oo.ڭ%ۭ&  H:   0  7	%#"326=7#5#"&546;54&#"5>32hHH#[]E>Vcii!fHatLT5m4:j2O85%--JJ??8?vh+]85l[hmKDg/R     :      9  53353!53!5!#"326=7#5#"&546;54&#"5>32as7s9s;#[]E>Vcii!fHatLT5m4:j2Op"r??8?vh+]85l[hmKDg..R      :    1 = [  %5!!5!#"326=7#5#"&546;54&#"5>32#"326757#5#"&546;5.#"5>320;0#[]E>Vcii!fHatLT5m4:j2Op""[]E>Vbii"eIasLS5m4:j2Op"rrrr??8?vh+]85l[hmKDg..R}??8?vh+]85l[hmKDg..R   k  * . 2 6 : > B  #5#"&546;54&#"5>32#"326=%=!!%%%5!55qi!fHatLT5m4:j2O85%#[]E>Vc,,,,]85l[hmKDg/R}??8?vhyyrDyyyyrryy  R 8~ 4 < D L T Z `  %#5&'&'&''7&5475'7676767537'5676767'7&'&'&'5'7'%654d3/D9229D/3d4.E9229E.42*		*22*		*2*88fWfEOPDfWg88fWeDPOEeWf8g*		apa		**		aa		*ba.43ab-45     F ^   ' 0  4>2".33&'."#67>76#FVʓVVʓ"vv"Z83Pv"Υ"vP3ʓVVʓVVnh<8PvDDvP8"vP9~?9Pv"   F ^    & 0  ! 4>2".7!&'."67>4'&hVʓVVʓDvP479;;74PvD"MʓVVʓVVv"i	c;DD;g"vP	     F ^  	 %  7'32>4.#52".VFoDvvDDvYoʓVVʓVSwVF_YvDDvvDoVʓVV   4    !!!xrZm       #53 àZ0    3#s      #5ˠАWeE%3     53Zzi    #0s	    3#àР˓[  m   #!!#	q    3#s      !!`N	u    m   !5!#    z   3#z   z   3!5!`z m   #4763!!"ƺoyeD9uߑfW     #'&%'53 763:*enK==Mne( =C_AEcH<    3!!"'&59De{oVfd       #3ƺ	    m   4'&#!5!29Deyo}Wf       &'&3!3#76<(enM==Kne*!<McEA_I=     3#!5!2765o{eD9ᏞfV     3 	w    v    %	!!!!55!#uX
̼uu]]e           !	!!;bc;$<   .:   	1  /<03!3T.%y    j   5!j    l   !X      3 	      !@ 	  <j     5!!5!!5!r#B#B#j    <l     !!!!!r#B#B#XXX m     333mjjj  m     !!!@@@mjjj  <j      53353353353<xxxj    <l      3333333<xxxXXXX   n      3333p^^^^    n      !!!!@@@@p^^^^     !!      l   !! l       !!#      l   !!# l       !5! j     l   !! X       !5!$ j     l   !!$ X   j   3!-j    3!-m    j   !!@j       !!@m   j   5!3,jk     !3,X j   5!!@jk    !!@X        3!!- 	       3!!- 	    	  #!!!P@ j   	  33!!P-# k      !!!@# 	    	  #!!!P@ m      	  33!!P-# l     !!!@# 	     !5!3, jk       !!3, X    	  !5!!#@P jk   	  !5!33$,P jk      !5!!$@ jk    	  !!!#@P X      	  !!33$,P X     !!!$@ X     !5!! j    l 	  !!!!- XV  l 	  !5!5!!, jV  l   !!! X     !5!!$# j    l 	  !!!!$# XV  l 	  !5!5!!$# jV  l   !!!$# X j   5!3!,-jk  	  !3!!,-XV    	  5!3!!5,-3jkV      !3!,-X   j   5!!!@jk     	  !!!!@#XV   	  5!!!!5@jkV     !!!@X      #!5!3!,-jjk     !!3!!,- X       !5!3!!,- jk       !!3!!,- X      !5!!!!@ jk       !5!3!!$,-# jk        !5!!!!$@# jk       !!!!!#@#P XV      #5!5!!!!P$@ Vk      !!33!!$,P# XV       !5!533!!$P-# jV       !!!!!@ X     !!3!!$,-# X      !!!!!$@# X      !5!!!!$@# jk      !!!!!$@# X  <j    5!35!<yj  <l    !!!XX       33lUTT        !!@@lUTT     5!5!  x X    333x 		    	  !!!!- ¬B  x  	  !!##xms j  x     !!3!!xm3-s ¬jB    	  !5!5!5!, >   X 	  5!###ljjj     X    !5!!!5!4l t, >  	  3!!!--A   xj 	  333!xjk   x    3!3!kA  	  5!5!5!3,,=    jX 	  5!333jkk    X    5!35!3̠=      3!!!!-- 	AB x     333!!xs 		   x   	   3!33!!-skA	jB        !5!5!5!3,,   X    !5!333xt jk	    X     5!3!5!33t,	       !5!!5!4 B     5!!###sjjj      	   5!!5!3!!t,-sjB     5!5!3!,-XA   j   5!333!jkk     	   5!5!333!XkA       !5!5!5!3!!!!,,-- AB        5!333!!###sjkkjj         !!!!5!5!333!-s t, jBkA        43!!"yY[ p~|     4&#!5!2[Yx p~|  j   5!2653#xY[j~|q    j   !"&533![Yyjq|~  *m   3YѲ/	Y   *m   #3*/	Y *m   #	#	3	3*i    S   jh   5!|j       3?  hj   5!h}j       3 @  hl   |X    !@? hl   !h}X     !@ @ l   5!5!!5ijVV     333PP ?@    l   !!!iXVV     #!#P@P ?@  	      ?   ! ?    j   ! j      ! k      ! @      !       !    B   ! B      ! 	   F   !Z 	      ! 	      ! 	   h   !| 	      ! 	   *   !> 	       3 	  i 	}       8m         # ' + / 3 7 ; ?  53!5353!5353!5353!5353!5353!5353!5353!53Z667576   l         # ' + / 3 7 ; ? C G K O S W [ _ c g k o s w  53%5353535353535353%5353535353535353%5353535353535353%5353%5353%53eeefffdddheefcd!!!z   
  m         # A  35#35#35#35#35#35#35#35#35#!#5#!5#!35#35#35#35!3h̚h̚̚h̚̚hϚ2̙Ϛ#366 B	  B  F 	Z      i   !} @ i 	}    i	         !!}} 	@@    &	  	         !!!@@        !!  i	}   &	  	         !!!}}     w   !N<    w    7!!!xr$<     w    3!254#!") ) xrVVV   w&
  	      w        !%!5!5!5!5!5!5!5!5!5!N<rnrjrkrkrj  w        !'3#3#3#3#3#nnjjjjlljjN<r        w         # ' + / 3 7 ; ? C G K O S W [ _ c g  35#35#35#35#35#35#35#35#35#35#35#35#35#35#35#35#35#35#35#35#35#35#35#35#35#!xjjjjjjjjjjlllllllllljjjjjjjjjjjjjjjjjjjjnnnnnnnnnnjkkjnjkkjnjkkjnjkkjnjkkjn<   w          !373535353534B`JlТN<0JjL[F/    w          !%35535#5#5#57#35Њ4`JMlЎON<r3B`Jlѡ      w  	     ! % ) - 2 7 ; ? C G K P T X \ a f j o s  %35'7'#7'7'#7'7'7'#7'7'7'37'75#7'7'7'7'7'75'7'7'7'37'%75'7'37'!$J#B"L!MLF"ELUELF#EKALE!UKLLKLLLKLJ$K#tK"MKEKLKKKLLKKLKEKJ"KLKKLLJLL$NK$E#EKEN$EH$L#'"L LE"ELELE"EKALE!KKLKKLLKL$K#tL"JLELKKLKKKLKKKEKLR"KLKKLJLLJ$KE"REKE$E<       7!         %!!!M6r6X     8   %!!;H    8    !!!YS;bdrH  Dw   !DHN<  Dw    %!!!drH$<     8   %!!o4H      8    !!!aSo4bdrH   w   	bcN<   w    7!	oHbc$n <      7	        %!	s     w   N     w    7	xor\         7s          -M<r2s         7Ňs          -x6r2s  w   !hN    w    %!	!h(         %!hs         !!h<skX  w   b<    w    	oHpHb<                  X               #6  w   	bcb  w    	ZbcZZb    w     	
nn65bcnn66b  |   )  7632#"' 3276'&#" %632#"'cccccccczzzzzzzz12Ι/r99r6r99q̌GG2GGXX@XX  u#\u   "@  91 990	h9%-  |    3276'&#" %632#"'zzzzzzzz12Ι.̌GG2GGXX@XX    | 	   ' / 7 ? G  7&'&'6767&'&'7%'676727"'64'7&"'62&47".$,=7-:*,$)'e13-7c".$,=7-:*,$."e*:-7<x<KKrw%<x<KKw/&j %0:E"3FA*% */&j %0:E&/G:0% w9~9GGrw%9~9GG    |    % / 3  6%632#"'327&#"6767&'&612Ι&&&&bbP'''gXX@XX
		qzz.!h	*	|l    |   ) 7   32764'&#"7632#"' 3276'&#" %632#"'C"!"!DD!"!"z===={{====zzzzzzzz12Ιa'''F##FF##̌GG2GGXX@XX  |   6%632#"'12ΙXX@XX   |    %276'&# %632#"'hzzzz12Ι'G2GXX@XX    |    "3$%632#"'hzzzz12ΙǦGXX@XX    |    '&#"%632#"'Qzzzzz12ΙGGXX@XX     |    3276 %632#"'zzzz12ΙGGXX@XX     |    "3276! %632#"'hzzzzzz12ΙǦGGXX@XX     |    "! %632#"'hzz12ΙGXX@XX   7|   "'$%630TXX  7|   2#82Κ|X@Z (    32654&#"!?|}|}~|{v<     (     67632#"' 327$%&#"!zzzzzzzz12Ι4GG΍GG@XXXX(    (    !#%&#")7632ΙK/zzzz`XXGG      3327$3!#"'&12zzzz XX`GG    7| 	  %63"71{y`X{G    7| 	  2#'&#82{{x|XG 7 	  527638x{{ΚT{GZ  7 	  "'$33{y{TX`G   |   %632#'&#"12zzzzz`XXGG       0332763#"'$zzzzzzΙGGXX    w   N<     w   N<     w   !N   w   !v< ?!    32654&#"4632#"&zcdcd;}|}|ecbc|{|  w    %!!!h$<   w    7!!!xr$<     w    7!!x$<   w    7!!xr$<  w     %!!!!!IIr$ <    w     4632#"&!	N88NO88MoHbcj8MM87NMn <   w    %!	hHbc$n <     w    7!	bc$n <      327$'&#" %632#"'k ~ ~>?:IILII޸[["[[  w     !!!!!!IIN<     w     !%!!5!!!I) N<rr  w     !%!!!!!I) N<rJ(   w     !!!!!!IIN< *  |      6%632#"'!3276'&'12Ι^]Tzzzz^]XX@XX6~r~GG26  |      6%632#"'%676'&#"!12Ιj]^zzzz]^XX@XX'62GG~r~6  |      6%632#"'!&'&#"6767!12Ι]^zzzz-]^SXX@XX)΍6!~GGq6~     |      6%632#"'32767!&'&'12Ιzzzz^]^]XX@XX)΍GG~#6~6O     w    7!!x6r6     w    	%!#66r<   w    7!x6r$6X<   a o    7!!!*r*d     a o   7!a     [!    %!!!!rrr r     [!   7!r[r    w    %!	#6$6X<  	 " 1    " * 2 : A I  3#''%#&'52#"'&5476!!'5%!!'53'5%3'5%3#'N<<.0/#E
7$L4z8hY/6.0<<1y112+KO1HP====f^1 .1\    2  "  3263#!5276;'4?'4?26 H"S?1#R b})Jя5C ,?kC[7>    " - ?  33 #&'&+"'&#"/573;2?"#'57#&'#"#567635a)8)kOkaKA-'=
//G),Y=	!H$/+HDH)+)	$.,fY   Yx 	   ! = Z    Lx  73&'37&'67&'67&'67'32654'&'7654&#"3672 $54767&'&47'&27632#"/#"?#"54?'&5432'&327632#"/#"?#"54?'&5432'&327632#"/#"?#"54?'&5430'&327632#"/#"?#"54?'&5432&5432&56327&5432'&327632#"/#"?#"54?'&5432'&327632#"/#"?#"54?'&5432PO~	)*+')+(@&'$||e?/A}]\B-71SLoWj\vLLr%%,*#$)*n$%+)$#*+						?	'+&()&(+&p				%%+)$$*+*EC*Z*,)-)-*,%&%&fБfU 5HhfeefhH2pu^QFs棥sKQG44		22044	22	9





		L%('*%)(*%)(*t				144	22	      0r  ! 2 C T e v          +&'&54?6?6/&2#"/547672#"/547672#"'=47672#"/54762#"/54762#"'=4762#"/547672#"'=47672#"/54762#"/547672#"/547672#"/547672#"/5476l=.%G\&#-	Lj.N
0d&K4i
	
}
	
g

s


	


&





	

	

	



	H5-V"*<CZ+
]	__f8A%\m$=F	!
	"		"		!		!	"
	!		"		"
M	"		#		
!
	"
   : 3 	  !!%:kl  : 9 	   !!%7%%!!:0d	mhdll˿@8    	   	7%7&54769	}V&7A6$8'^4?
     ;     !2	7%7&547!#"54z<S#N1DCS"="l.3ED[:     +    &   #" 54$32   54. #"&54>2-.T<:U'EGE'DN-ֈ<SS<&E$$E     
  C   "32654%"32654&%#"&54767654$ #"&4767&54 32 qOO98O8PP88OO"FccD>U]  \`CDcbF]WWZA@ZZ@AZZA@[[@AZKPrqqrPGeޝdMP䠠P}2ٛ    k 
  A  4&#"26%4&#"326 #" 547&'&4632 $54'&'&4632XP79NNqO.N97OO79N']EacDC_\ n \U>DbcEXFDbbDEaaEEaaEDaa+G詄UUSj멏i	LVV     6     "32654&7 #"  32?ɏǾ/`TcȐɎ;P12Y   .    1  "264& "3264#"54327&5432#"'&'@KjjjiOiiLKirqrtPssrqQܩZTdIU     ) 5 A M Y d p {       3/&76'!'47653!476=332654&#"#"&54632'#"&54632#"&54632&'&676&'&676'.7>'.76$6&'&%6&'&6>'.>'.f<;.=+,>/;Kyz~LZ|WX{{XX{IE11EE11ETm







;
R






s@dd@s}>}=/NnN/=}>@MllMNkk&%I%
%
"!$#"!"!!
&
%%&        % - 5 A M Y d p |       5#!4'&'5#2#"&546"264&"264"2647>'.7>'.%676&'&>&'&7>'.%7>'.676&'&676&'&753!476=3''676%27/&76'77&'&/#?6'&7liilYz{XW|{bEEbEd






8
@





.HxttxH%?%5E$66$D5%?%-5!!1(~(1  5,4t4(4N4(4t4;hhh%%#%%$%_$$!"!$!/!!!"$$$%:-,GtG,-:XLRqqRLX![$n[ii[n$[!    o b    !!'!tKZGk     cn   "  !!'!##&+572367676hNn_5,S	Grj3#-EmDJ~o.(*!4\tR~U      L     !!'!		##'	CI3Z><<5DCX<<;     YD   36273	##' 5&<+Z@\\DC	ZY\  5    # , 5 > ~  3+&=4%3+&=4%3+&=43+&=4%3+&=43+&=43+&=4%33 #&'&+"'&#"/573;2?"#'57#&'#"#567635@)A({@(@){A)A(@A(^)4'iOj_J@,&<
//F(0'&&'ܐ'J&(lN5		>!	)&V?<?$&$ '&ZN 	 N  	   / > E q w   !674#!!6?676'4#'323276767654#3#&'&'&6%67!672!&=75$/563&43!32+'!67#>54&53*,
3)="(&)09$)L&TE`MPA[MHY$;&&e=O%/N,8(.7L1Rf~H8SQ,zH%9D6)jGP@4Rjd_*KfsDIR		
9!
O
-]&C+/<Ug@A5O!+G    8     	!'	!n?BZ96\wL5_K     /  	  	!' 7lBDwD  &  B  '&54763263276#"'&/#6#"'&'&6&'&547676R8CCBC,G*
Eh]6e;,0Q:nH;P0+	;e6\i~TZW4XX\"g^R) 
56.'_E!
SBS
!E_'.75
 )    /t 9 >  3#"'43727&'#"$472776725676&5&U8)$tJ.;	d3f,"3'
VD
( GL/7;;,gt^F$<
LD&?>X4R!/# I
? P?D!)Mv>     /z 2  !"&54676737#&'&54>;7#"&546767!7!"&54>3!6763!2h!.)g$'30!/&j! /:(/	)/
9)/	9)0:*     /z 2  463!2!2#!!+32#3#i9/ !j&/!03'$g).!*:0)9	/)9
/)	/(:     ! ! C  4&#!"!&3!!"3!#";#"3&'6737#&'6737!"'67!7!"'63!67!2e;'+pCCo
CC CC2CCKK<LL KK%JJ60"2=2).=<==<@=:>=;TTUSUTUT83$Q     E ! D  72654'6#"'4#"'54#"'54#"'675674767#%$4:JILLHOKHLKIhghgighgD>-sJ1 b6'SScRR	SS?SS\\K\\;\\]]!A*>K    ! ! D  !254+'3254+'!254#!'!254!&#!"0!463!!2#!!#!3#3lCC2CC CC
oCCp+'q=2"06JJ%KK LL<K2;=>:=@<==<=.)g$38TUTUSUTT  E ! C  32=732=7325732'654&#'%2&'&5&'5&'IKLHKOHLLIJ:4$N->DghgighghSS=SS	SSbSS'6a!0J)K>*B \\]]:]]J]]    O                   !%)-15  23656;2#'7+"/#"'+"5&54775'"'5476;25'7&567635&56;374765'75'76=4'&+ '"'4!#"'&36365&5&#%#754'&5&&547'5367&7+&'&'735&2?"5775537'7'3533553535'32767&5%2?&#%55'575775775uo,Mz"060D/5I:2'5:6&"*:D:S46$.e	QN5


u4MDa
6bUP+
,H;`I23N5(
(#I0M
'^5%#!:X+	"*
6W}W:uW4
5vT&	/H3VXD9\SL+&31.d+%X!Q
$2``KPPPG[6%#

Qy-6[[3GK[O`_A[-)$t7
L-$
L6="	(CJ#R"0:~GB{~Eoj<4S[ZaLC5)
.U%+Z&)͢7e<ILAaMoK33K@G6$$(&(''&1/----2)((-((d.'-T?OK8T$!T3(-<((')))())(   	 &  2%2#"'&=47 7654'#"'5473t\*e	O@UCXq	P	S.	PӍMOb>YaYƮ58l7P P@        $ 0 < F X   + &=%6&#"3 6=%&#"';27!54767%!&'&'2+"'&=476^7\Pg㑵Hr'.)%sMM#fC-7!%A.; ӎw:kKqz+H*G;M

tu/&((AA&:+C;.   " / 	   8 P i  >'67&&&'6.7#"'&'#"'676'773.#'6'5676&&5476'&'67&&07	^<1x,B5@2JVMv!#uA+UBDX[f*;-10)..C,sB#HKU	P]12<0VQ}%'H6-T}^$k7
R2'7f!A\;y?1!50BEt"!zkQ;0qu0\oi:5oPZjsXFaPJGl;4ej   N^     1 F [ q                 7&&'7'6&'$#&7'&#"'5&767#&''5$'67'6'6'5$'67'656&'67&'6'&'''5$7676'&&'6'63&7"7&'7&'7&'7&'6'6%676767&77&77&''5&"'6%35&'.54>23#67#&8	p
+WDTc'H@XO`= 
;*)8 kDv/Pk-JKDhGa	D`gBD6DDD=3dTDW,	:gj)Yi#'WtI-9w18$^8;./7-I)jS)'#i\-IM91D;8%a7/.D=uRNBR&'%QBNRq d2
Ds98C ["|44&3,'2^3RT(B?#'9C-!y~#Z10>N?$%Y4)%FN?
({usis< 
3(&^T05<>7;,#4[:O(vAfGEtYB
z^~4j
#,;b:['~Av@~EQ
Bak4~_H#T2
$$$$
2T"    `q  $  &'6&'67327&#!65#&3jjdnh
wWVݱqZre[c77	c    yX    ,  35'533#3!'#'5!5!5#53!5!5#!!ʶ~~
blvFFA<<3ffX苜qXGccG    a p     3264&#!2+73	#'#5#	3m`hh`2`Ĉѳh|;vvʷ}f       33#!!#'!'57!5#'573564pzp    7 d +  !#!573#'5!3!'573!#'73!#'5IxOOTxSVVdY\yvVPPvIyY   '  ,  32#' 37+ &5%6323'#57'53mJl{~m@+ݼh4144'0>,_
vNknmmn         O b s  32732753"'#"'432364'5;+"'#"'53275'&'&54?5572'#&'&547634%476='4&#68$$B)Z>&A_;i88u-o1bFGfQ_M5mwLbkjI,K=''8 0##Rm4	ڹ+ܴ5!PP"4\=ѻ"8Qý<WTڦ9[&BC(     gj[ T _ g  2#27654'73&#"#'&'#"56='"'46'4#"4735#5&547/63654'%654i=Ku/3no|s׉nI3n';6WN`fI:%+Kks:omP|@R/%S <[Er*JKNZEnvi)%*6&-Cl67jGV"6;%
2֙p+nEU_rB(EaLtD:j[~^9     " 2  2#'#"'#&'663327'#&'756=4'&+"6xdqs[yWe6o`Oa!ys`Mk{eK[ef
OmY<0}        !  4 32  #" 7 67	654 'YYx_P툋K\YQZW_bYX         ( 4  32654 #" >32#"&546324&"26% #" 54 32 itvxsq1"00" 0/B//B/#a`ir|H!//!"00""00"!/0 _b 
  #  > D J P V \ b h n  27654'&#"&7367'67675673#''5&'&'7&'%67'7&'67'%7&'&'%6767%&'&$h%$%%34$&1++XSAN@`==k>PCRX++XYCP>k==l?L?Q	oL+ Nn;P?;@
nMNn3%%%%34%&&%s==`?J>PW,,WW?K?_==f?H?PW,,WU?H?^<=Ke+cL mCP`k<<     ! 4   ( 0 8  47632#"'&7327654 #"&#%#&7&'67&'67!󫪪vӤ=65N'V[S.U[R󫬬񫪪񿉊
ʯX[V[X[V[   ! 4   ( 0 8  47632#"'&7327654 #"73$3&'67&'67!󫪪vѦ=63QNV[S.U[R󫬬񫪪񿉊w	
'X[V[X[V[     ! 4   ! )  47632#"'&%#$''&'6%&'6!󫪪4>;D@Kǲcngk?dnhk󫬬񫪪I
kpinipi  
 ! 4    " * 2 : A I X  3#''%#&'52#"'&5476!!'5%!!'53'5%3'5%3#'32765'&#"M==,/0#H
8&O6	|7iY06./==e6a&i1r4z012+KN2HQ>>>>f^2"/1]8`1"Y4f2y    5  +   +"'5$76%&'547327676=&#;hz0/O{[(*TQ~`NO
=tR[\	8d      <  +  % &56;2'5$%75#"3vh0.P~N^(8P,VRZycOpO
>S\^	f     ` 1 B  7#5#53'&'&54767&'&=33676=3#327654'&O&"}|fzg}}"&&"}UQn$mQU}"$nQUVV{xVVUQ<"{u^^\_u{"#|
zUOOUz
|#YOT{zQPPQz{TO    @>  )  4'&#"3276&5476327#'#53'&`____`oqk]^^]YYňÁhgf    @>  '  "3276'&'7#5373'#"'&5476j___``_ߓqŊqYX]]XYfhhĈÁj    0  '  &'&376&+"'&5'476%7!Z{z[ZZ[~\YWmpN#ZX[[YZ[PQmp#T     G *   52764'&#"#463233#!5sPQPPtrQPyzg֏LQQQPPQr{{t|g    *# "  #53533#632#47654&#"#ddiqqCBigIIugzyUr}ppDtPQs_    C S  7  "27654'&7#"&54767##53#533333#3##h.  @\ !  2(>>?ZW~>'3|}}! -/@  /- !^'?XY??~YX?(F}R}hh}}h     L S <  #5#535&'&'5'73'3#'73'676=35'73'13|e{vw}wwUATwx|xxS@Wwx}vv|d|re{Eus~~suE|VAKtrrt@X{Ius~~suI{dr|      *    ! #!!!'!27674'&#_82V)3{D#MHZW{s{?zK8   !    %#"#&5463 67!2#6#";z\)MaBuh__itBaM(]ytt[+##+tt\  5  .  "264&'67>3"#"&54767&'&#52hq៝rd:BJ|^d#!p⡠q $c]7A;{26X Y"zz"Y X62       &'5 %$ 56?6'.j拈|*xIIz'&|JJx,	F  4 2   $ 8   "3264,'5'&54632264&"&$#"&547>ȜmmNMm }	lyzU<Mnnnm+}7	lyzU<|||,&(uO#eaHG||||Q'(sO#e`IH   =! 
 <   >'.463227#"&5454&#"&'&5476766&D9BB8Ğv?W:pbW~tp) "-ff)-gtpQ@3AA:ACjGmN?ijbvr56WGe((Wi0154d)-?     / 6 ?  2>32>32#&'567'6'#4&&#4'3>64&"-S5,9"\0+Fgv!4u|W")^,kikdS!eb[_[H|NYC:RHB=G`Sn   U |  #  !!!53&54632!!5#67654&"U't00Z=yy=:]ZssZJjkkjJ    2f 4  %353'5#"'&''#&&#4'3>32>32YE;<<-!&Y*dxcf_Oz.*O2)7Ze``b<`WuALh`    8    !5!1##'!5!_drrPk^K{U_W{    ' /  27632#"'#576&#"4'5267>327&'"2XCZd}uud$gq~dV)40tlx!&%"dLk}:Uwma4sOHK{w  Y@x   A  63276327632&"'&#"'&#'6327627632&#"'&#"'&#'YR 	#{=('%{XNCEz>O&z>'(#&R
#{=O&{YNCEz>'(%{=('#&ee22ee$l66kd23dEPdd33dd$l76kd34eE   ^ s#    !5!37 !!'L34((     C     $ T d  67&'&"!3!67>54.#"!5&'.54>325467675#53533#63232>54.#"3'8xpA?9l9>@q<;9'D} 5RTP=:
SSPSS
;<PTR4 X#""#! >r>>pp>>r> !A%
)RSQ1)6BB6)1QSR)
p  ""     V  {z H N R h |     &'4>32"'4>32&'4>32&54>32&54>32#!5!'!567>54.#"32367>4.#"323732>4.#"327>54.#"732>54.#"I	)),(?)(#!3()3$))BG!((
K{mg,;hIXIL$P	H''1|G''#s%'')7$ ''A ''HTݬ9.%~~ rF)~ w  p  a  ! ' - 2  3353#3!53573#'5#5335!75!!5'57!ePPeeQQeDpH>H@A~ }}~00mrTTreppe-!   7 C Q ^  &54767&'&'5676767&'&54>32!535#5##3654."! 2>4.#"	1""#@%@#!@%?$##0	܍a1%?E?%4,/--+D,/1+4;AB<>"	 "#>"">#" "><BA;3 +10,KfYeeYf%<#@""@#4-/0++0+      A  * 3 V  6&7 !&54$''&'6'67.76;+"'5#"=6&'76767%25#6&'*I} %
GI.%#qJ';
T,N#8:!>#10$ITNnVB,	n ?%#Naji-/4^t&AYcgb3%'+((NV8OQĿ>:<uyg**5
k<X>    5h   P [   32>4.#"732>54.#"!5&546767&'&546767&'&4>32'&'.#"+L)+L*+M)(LH
>	|n @:!:;!8An}	E04`a30TL**LTM((++x:8>>q?9  9?q>>8:x++c^UZbbZU^   jg%    $ T d h y   47&'&";67>54.#"!5&'.54>325467675#53533#63232>54.#"!57#&'.54>3234'67632#7$5oh<:5d4:;i865%1MNJ96	MMJMM	68JNM0v    +0+/0U-,,+,.T1/,9j9:h

h:9j9a	&LMK-'2==2'-KML&	1  V//X//X//V  6  H L P  &'4>32"'4>32&'4>32&54>32&54>32#!5!5!M
,,.*C,+%#7+,7%,+	FK#++PDNAM**4d;K))$'**,dY&"**E#**L:ƥ??@@      =   % )  5!5!3353#3!53573#'5#5335!mD^JJ^W^KK^׋LLZZ,}}uz%yuu{{u}--       4 @  4767&'&'5676767&'&54>32!&7535#5##3	1!!#?%?#!?%>$""/	_1+4:AA<=" !#=""=#! "=<AA:3+1/+H+eXeeXe     g j  " . 7 =  6&73# !&54 '''7&'6'676&7;2547#";65'"36GJK&'n=lR]*^dW*W	>![1=%T e	>6.HC'L"'G12 h[FH`[$%ok+*8d.Nc   v [ .  7&546767&'&546767&'&4>32	w "E>#@!!?%=E!w
./@=CDz"E>"">E"zDC=@/.    QO #  #"'##565'##"/547 ?kM ,4N"DF &Fi?JO/FB!O
{|Im<&=     M  2  227632 #&547636=4'&#"#4'&#"=`
]d2cBU;/G;SXMB:@B
ս;7hf%#>|\@9      @O    	 &&5	iCn:^O	G
 %   2 O 7  236;2"'##'65##"'&5476;235&'&=476jS
c1=EO ;SCFRʝT6*F@E1;O+.`162V
Yi8/D
;8[BV      RP " < B  +"'##565#+"'&575477;2732;276=4'&3&'"ih;F(wQ"DG".FWCNfBy"bODUq5u4Pro@|S`64'<kn,:y!@JD     O   2367632#&5476;_#KYohM2EOL)XYD<κ6f%    @O   	&47i9)
2\OE[r   1 V 2 ` g  26;2"'##'65##"'&5476;2&'5476&+"3276733276=4/#"567654'&#"35&5mV^2"L<TCFR˝U7* 2Q;Ƌ
Xa2p2@^DJF
,aXj-!D2V9/m.0R
Zj9/C
\ V
7yM5bom&#'p[?$GOQ     .    , H  3#&'&'&6%3#&'&'&63#&'&'&6 $&54673 >4'&'~v'w(w
'$k=FF>jG3~Pjb^*IerN{̑?qJAe}Ωv6\~x(ONPPNO(!8?|EE|?8!  r !_   3#"/4?23D-!]UF+}{<    !/   3#'654'&'#"547326Rs9W5[S%3;B[/OBC'*|<  j_g   #"=4?2%#"=4?23ɧ%QM?ˠ)TK7(w7џ5s ?      |O    "'4723!#"5472!5YA>RHIOq1 ӫg4    D %    3363'$6'"I+4puoS^    *     3%#'#3%#';&2IʗHj    7 * ( ,  377#'#'547#5773%%,ppsr,'zzxz'984?/99e5>:_   `q E  #&#"'5654'5673;54'56732733273+&##&"#&'565*G1	VV2Is3'{'3sI1VV	0Gs3'{'3sP3+1='3sH1WW1Hs3'=1+3PH2WW2H    .     ; G  7567&'&'3#6737'#&'7#&'6735'67#3335#5*)SR))&*&';((:'&)'ȶkkn\\[[nȶ	kk	n[[\\n`ff/ee.((&(;((:(&((@))SS**n\][[o
jj
|o[\\\n
jj
e(P(  /N  # . 6 C M h w      !2732!'5675&'&=32#&'567637&/7&+"+&'532?4/%32#'#&'&=4?#'57335'3!273+#&='#"/547354;2?!&=35-,;K>#WU*y"њHVηz/;@"q=o	)we)$IY'LALaXwH >X%CII$PC/DN6g+ 
b%#	
jnN :3O+5{bQ<
,d-
	X]
f	'^	JJA!   < 
8 
  2 E  35733!&54?'7'7!!"'&%#'73676'77'7'&'676}]} =--HW(7*!>y*1c{F=.,H-.'d(#Y+GC8957jN})%%tGl5nm3(,H:0/(_kiN}!N 920     K 	  1 D W  3!5>7>54&#"5>32&54?'7'7!!"'&%#'73676/77'7'&'676@.#5*"I?6O"[m"
c<,+GU 5) <|w)/ayD<,+G,,&a(!>B<#q'%NG91 	M7835hL{'$$qEh3kj2'+G8/.&HghL{ L8*/    D 
* ( = P c  #"&'532654&+532654&#"5>32&54?'7'7!!"'&%#'73676/77'7'&'676D|q%N24H'CB=9PS3464E>6O#]o<k <-,GV$6)"=~x*0bzE<.+G--&b)"<+BI
N$% $B
G	@6%67946iM|($%sEi4mk3(,G90.'SiiM{!M8//  $ d   " 5 H  333##5!5&54?'7'7!!"'&%#'73676'77'7'&'676\\x"@/.K[59+#9A,3gJ@0.K00(h+$w,HmmI;<79oQ+&'yJp7sq5*/K<22)ooQ"R;@2    > 	3  2 E X  !#2632#"&'532654&#"&54?'7'7!!"'&%#'73676'77'7'&'676Hevyn$L27C'<CC<;2 =--HW'7)"	>y*1c{F=.,H-.&c)"ERUHHS
S/(*.	8956jN~(%%tGk5nm3(,H :00'\jiN}!N91/    K   	 " 7 J ]  "3264&7.#"632#"&54632&54?'7'7!!"'&%#'73676/77'7'&'676]'00'*//l+2>AB(S`dT^dyg7<,+GU 5) <|w)/ayD<,+G,,&a(!.T--T.H
D&RECSukf{7835hL{(#$qEi4lj2'+G8/.&HhgLz L8*.     - X   . A  !#!&54?'7'7!!"'&%#'73676'77'7'&'676n!?/.JY08+"(@},2fH?/-J.0'f*#&K:;68nP*%'wIn7rp5).J<21(vmmQ"P;:1   -  K  ' :  7&54?'7'7!!"'&%#'73676'77'7'&'676N!?/.JY08+"(@},2fH?/-J.0'f*#:<68mP*&&wHn7qp5	).J;11)wnlP!P;;1  99   ' 9 H R  !273!567&#2&'676+&'67'#'6765'533!273+#/#"/47$,7JvI
MO $p%|I^[T<K"(~GW$?8?])(	EAs#L,T
0`	+WVۄ`$$a     . |  % 2 < J \ e  3 + &=762367#&'&#367&#&#"3274/"34?3'35732?5#+'535^-J|@h'\-e@<r2&H);
uZJM=9jl:jgb.Qi2Q|酝:*}(dpR!h	j`]_i$x:-(^%,3"ؿEaHMP	E     7 g    / : B R ` j   # &5%6; 65%&# 327#57&/#2#&'676+'%3#'#&/47'3327##'%3#"/6j1M{ǮG&z
v$ExݨE(+=R:n:D!sY!gQKum;}	uA;>e=g¯Cy??ԢB|*>w4I '	5@`bC$	j$H?iM!%  . |    7 H  27&' # &5%6367&#'.7&67263'#%; 65%&# mJB|e6O}°I+o|BJn^jaygwaaygxaj^w$FyتFG퇢D{C?`B]ww]BJХC}.?y   P %  .  232#!7&!"4#".54767267p{u*_Jcllm8*#I%<($|ʀX#{Nwt7mnld4)5:IIIB,   < _     4767632#"'&'&!%!!   >W$`4  Z|b  < _  / 3 7  4767632#"'&'&4767632#"'&'&!%!!      UW$`H   	Z|b     < _  / G K O  4767632#"'&'&4767632#"'&'&4767632#"'&'&!%!!         UW$`H     	Z|b  < [  / G _ c g  4767632#"'&'&4767632#"'&'&%4767632#"'&'&4767632#"'&'&!%!!      /      UW$`  K       Z|b    < _  / G _ w {   4767632#"'&'&4767632#"'&'&%4767632#"'&'&4767632#"'&'&4767632#"'&'&!%!!      /         >W$`  L       Z|b     <V  / G _ w     4767632#"'&'&%4767632#"'&'&4767632#"'&'&4767632#"'&'&%4767632#"'&'&4767632#"'&'&!%!!   0          /      UW$`+       .         @   Z|b     .  t   )  2 $$ >54.#"4>32#"&h..--t*Ƅ2..2/     . y   ) 6  2 $$ >54.#"4>32#"&$2#".46h..--1.-.y*Ƅ2..2//2..2/    .  t    2 $$2>4.#"h-..-t*f/2..2/   .j   '  2 $$2>4.#"$32>4."h-..-q.-.1-j*f/2..2/y2..2/  R     7!!R-Ӗ     R      7!!%!!RMzM   ; 	   67'&/#'3#67$#%ׯP==Ͱ̼bN+#!f"K++!|o5<?1   s ^   #'3#67$#BBݽBT..#x:kAD     '(   ''7'777'77'/'7%턌!b탍a 2~~b bP         R  32>54.#"##"'5##"&'&'0!5!5&'.4>32!!676767'7' :!9!"9 :! FGF;kY_1278e56d:81)RLk<GG
E~^ :  :  ;  ;NG5e4G( Li)enf77fne)i	(G4e5G(   Pm  	 9 Y  %&'%67&673&/'67'&'"&'4?&'37'	'7	&/7&'#>7$%88EFu/- 6uNDL22LENu/80uFD8jU45B%y\A@Yy$F
0=/0
	,-X70 ;~*2%%2*~697X-,oo+F9d1)(1d9C1       * C T  '&#"'5&767#&$'&%'6'&'''$'676'&5$'6%'.54>32D$"@F,NNNvF8p^Lb2
N**+B@0"AR/0?wA%od/D&3.YaQ/5#3$"uI'@3/u= =#n-....   w   3  %%32+#".7!"&'&'#&=4;73737D*$#GFHH%#Ι+(&aa'm99m9 3.055_4i4_550.3k#ttt   k  "  632&'.'#####֊v)%8 _^>:k{ZG_?g@`H,>|:=+,j,,<6O/233<bb    J  1   32>4.#"367#&7&$735&'.4>2,P*+P,.N+)PƗd"/%(MM~95DLMNMD2)WN,,NWP**g!ʇw֜s~
&JJ&        ? G O   277''"/&'&'7&'&'7&47'6767'676?  6"&462EG#96\>42(p__p(24>\69#G#:5\>42(p__p(24>\5:'NmNNmU%4m+3EJ5:6JE3+m4%TT%4m+3EJ6:5JE3,l4%T '\nMMnM     * ?      ! & + 0 5 : ? D P    3&7"7&'7&'7&'7&'6'6%676767&77&77&'"32654&'5&'.4>323#67#&#"'5&'&547&"'6%6761a$O` "NiB*4l,4"U47),3($aM#"aT*BF4,=44#Y3,)0BB0/CBO"!-$F$FJF1.#-
-#-2MJF$G#	8<g7*!2U6J%n=_CBnT>	rYw0d	"*7]6U$u=n;wBLz	>\e0wZ3C.1BB1.C(N	"%""%"	M#p.PA.$;QW$.AP-{	"   R    & . F R           2#".54>&'767&%76'&''67&'&'&'67676547676'&7>3263'##"'&'&'&54767&'&547676&'&#"6&%6767&'&'&676&5467&'&6732767&h@9h),)RP||PR-*g:>/**Y&()((')&&)')(()%@9f+.TR"`33`\_	.np,	00441/	,pn,	]]&&()&&EEEJ032WyQT.,d9@.**..1230IDE%&**%&F+.SEFE.IMMI."#FES. !  ";-0.--.0IM+.REF$$1.%2S_`Q2%-1OQQO2-$3Q`_R3&.>GIIG""7447#.$$FER/+L"  !75/57%"IJJI   *    ) p ~   67&'67&'4&6%67.'4'6&&'6767&54?67&'&#&'#&'5&'"'67&'&47632>4.#"72#".4>"0'-, )* #'05%" *%%,),,"GNYI'+""$(JYNO21,9,4=SM:7,:-12-[[Z[]WXIOMKLMN2Y{\bCWDJgABcp7L^BML0b\u]!@R%KlhhO+ww+OhhlK$PZX'@D
0:)ww*;0
EA&XZw[[[[GJMMJ  " (    %  3!'# !5 2#"62#".54>o:5(67%'$(nH0L*    I"   33'5 54#$/*PR6h"&>I>>A>        !!ua          !&5476'#5!+{h_a66mHHm  .r Z y   '#"'&#"'&'&'&547676763232767676'&'&'&/&'&'&547676762!2!%3276767654'&'&'&#"&#"3276767654'&'&˗Pz			,D@		7;+
		23			M98G):		
					
	

r
	

	
	0	L:5U				


	



    .\  r   26767654'&'."#"'%"'&'&'&54767676;27>764'.'&+"'&'&'&547676762%632$"26767654'&'&##@!R<Oq<
;

3@M				JC3

;
<qO<R!-##

		
/An!/









.!mB0_	



	   :? Y x   3!#!"'&'&'&547676?6767676'&'&'&#"#"'&'&'&547>763276;%326767654'&'&'&#"6767654'&'&'&#"32ɓE79E"		21+96	>B+	#	zOo
		


		


		
49D
/

	"

	
:	

	
	
		
			    	 =J Z x    -4H  67&'&'&+"'&'&'&4767676327632#"/#"'&'&'&54767676;276276767654'&'&'&"276767654'&'&'&""'&'&'&547676762"'&'&'&547676762'&'&'&547654'&'&'&";276-&#"+"276767654'&5476%327%&"'&'&4767628?. ! 	!a=?^'_)\?=a!!#	"!.8?"""""f		2
			.?ES@6fG=.			
2			ŕ6@
	B )_>9	9>_) 	%I
		
	

	?
*


		 ;d.	
	?P<!  4 G n    3276767654'&'&'&#"&'&5476767632#"'.54767&54732#"#"676767'&#"'67654zQkdYWGJ###"KEYXea[WGJ### N*))'UOggqqhbTQ+))'UQegrse2
N{;(2.'7$!/-
*@%%$HIVWcgWSMF&%%$HIWWgbX1.oPbeqsg`WP,++)SQfdvog_WR*++0?#" $)*2/[TG!3(	-)#%	$!'(*0&    % ?   , J i   &'&'7&'&"632%676767654&2"'&'&'&5476767"3276767654'&'&'&'2#"'&'&'&54767676$0$" N!!5&)*&f0
$/		/*d]YJK$%%%JHff\YJK$$$#LG\ZhtjeVT,++(XRiiuskdVT,**(XQijn7<%"#;"<7b#"%X				&%JKYYjd[YJIM&%KJYYfjYUOH'&K,*VShgyrjbYT+--*UShguvjbYS-,    = <[ -  57'367&33#3#32+3#3##7&'#7R0Knm(\Vo@KsFr5$$5rFsK@oV\(mnK0=
q<a<!<a<q	     ? s   " ) -  %!676762!%"'&'&'%%&54!OuO?!$G?&FoSdQ`#  D  K     476?672;&'&'&547632676767654'&7632!54'&'&76'&&#"'&/&'&'&#"#"'&'&/&'&#"&'&'&?6'&'#"'&'&#"!'476/654'&76'327654'&'&327654'&/D+"(<>	
!-	@( ,#%>NpNM&_*#
(!
&),,f&!(K_
	Z0-	
YiD	
	cp-)L	&gK1
[N3$n/		"!0{I"H#fmt2>,7HBI.;/8[,	Q[z)
		.)S9L
*E	 	'+(4%(4 *X>		
7A)	0'-570+I;-%
*#%(0

]'5.		U   -   9 L p {     7654'"'&#"+"'7&54?67676763276323273#5%6767'&#"6%"/67#"27632327654'73654'676547&t!M#l5G;@\
2BX-0%-m *	 '?,N?'!&R;-><\-R5-6E!"$b$6$!q",;
t@P"#C
*FS"DX@!	%z$(`]jMP

&O/+@p_u<
3 		DMKZRdYL6D_YBI5.!!''kG     W z   " ) 3 S Z  67654/##3276?7%754' 654'36767632#"'&54767632'0,,;	(|w|ki5.U,\\
%g	.
;,-0j{w{w3V.
T,\[^	
	-5     &      ' - E L   4'&'&/767675'7!!'7!654'!4'!!$4767>2"&'&'!654'$$CCC||]V|V#u9Z(f(Y<PPP Pr+





VH     W z   " ) 3 S Z  &'&#"227654'&''/%'654.#"65&'&'&547632#"'&'&76#"	;,,0w|w5,\\.	.V0-,:
w{wh
.o,[\	
	6.     ;+] # C  4'%%.'&"27>7%$66%"'&'&'&47676762%'b&I



)^tN/		/dIW?

@ViDV				/		V   % &  %$64'%%&'&'&"27676@))<""]NO]   9|   23277632 #"'&'&5476"#6v>?(-=%P8j?
#j< y"$"     J rB   23277632 #"'&'&5476""YTo
k%,02?=V8jiA{C{u+'     qP?   		'	7	sssssstsXrsrtsssr    @ Q   		'	7	5    N B  2632#"'&'#"'&547677&'&54763267632676Bt
	ah>)	c!,Hs*ܡ	
},"2A"		{    3+ Q  26#"'#"'&'#'&'#"'&547&'&54767&'&54763267632676 	΂  NjM rkW*
&\
*3
#ﳎ*3	Tv!(5+",
     @ V   #  !!!!!%!!!!!!!!#!5!3;E; JEJJJ<;E;EJK!IK    V {   !!!!!!||uv  9 f    !!#!5!335#*+մ*ִw  0  r    !!%!!!!!!/0``1/`1    )   !!#!5!3^^^  ~ S    3!!'#'!!#!!3!5LDʃDM   A   #  5!#3!3'3#!#35!3###5353;9ǌ#5AI##    0 v Q  #"#3;54'&'&'&#5!"3276767653#4'&'&'&+3!52767>5/]LED73!&&54GBO]63H>SkS>H388]OBG45&&!35FEL]63H>SS>H38882I<UjT<F66]LEF62!&&!28L]66F<TU<I27^LEF62!&&!28L   G          #  !!!!!7/373#/7#hlk0WXXXXïWXXXX;;:QQƙQ陙;   C  54'&54762327632#"'&+"'&5476=#"#"'&476323C:!)*[*)!:\5YL$$$$LY5\:!)*[*)!:\5YL$$$$LY5\[\5YL$$$$LY5\:!)*[*)!:[5YL$%%$LY5[:!)*[*)!:        &'##"&'&'&4767>32367675&'&'.5467676236767>32#"&'&'&'#"'&'.546767675&%>#"??"#> G	>#"??"#>	G  F
>##>>##>
F ?#">>"#?     4'&'&'&'.54767676322767676767632#"'&'&'&'&'&#"'&'&'&5476767676765"#"'&'&'&5476767632B
,#,+%) 3!,
	&&*-#''#-*&&	
&$0	)$W$)	0$'
	L+,$&&$,/"&&$b3")	M*,%&&%,."'%%0
)$W#)
4!,
	&&+,$''$,+&&	
&$1,#,+$)   0  267632#"'&'&'3&'&'&54676763267632#"'&'#"'&'&'&5476767#6767632#"'&'"'&'&'&54767#"'&'&'&54767676325##"'&'&'&54767#"'&'&'&476767632&'&547676763235#"'.'&5476767632&'&54767676h											-			(
					
							
'				*
		

						

		.
		
				    +j   276767653"4'&'&'&+sidUS+*+'WPihtthiPW'+*+SUdi),)URhexuhbXR,,,,RYaitwfgSU),  %t  ?  247676763"'&'&'&5!276767653"4'&'&'&LEA86:4DDMMDD4:68AEtjdVT,*+(XQjhvvhjQX(+*,TVdj-76DCOME@:66:?FLOCC67-*UShgyvjbYS,-,-RZbjvyghTU*,   (8 	   %%!	!)ttJHcdecH]F]~]^   C5 	 )  !%%!2#"'&'&'&54767676hzt@z@Az@t{ne_RP)((&SNcdome_RP)((&SMdd0x}*(QObbrle]TP)**(QObbooe]TN+*     (.  '   "276767654'&'&'!	!_)(""""()_)(""""(Y$(*/.*(#  #(*./*($]^  #< 	 ' 1  %% 2"'&'&'&5476767!	!#xxa)(#""#()a)(#""#(YDgghgD^I^W $(*0.+($  $(+.0*($ YZ    (8 	    3'7'3!%%!!	!hE۱CCDeggf
ҁссi:]^  = 	    3'7'3!%%!7!7'7!hTDEDDTN PP IQ2P11P2#mm  (?        -5%7'%!!	!]Pgfeer­696ƌ]^^    .     /'%!!%!77!yrryyqm" _^^l%%tu%ߴ߳!     6   3%%#'-7:|:||9|kֵֵkֶ   Wz`    37'%7%%#'ZZZZZ]^Z^ZZ˛ʜm˜˜mʜ  0o   	#'!5!73!P6M6P$6PMP66R#6QLR6$Q6L  $z   			-	h<_K<;
L_zK<;J`;<_  	          '  !'/7'?!7%%-[9^[[ZG^ZZz'}*}zy}*}'q^\\ZG^ZZ:\O}zy}*}'yz(}     2    %	%	h_y(_^(zFG   s   %%-hVHzVUzHrVU{HUVH      %%-hhhႁhhhႂhhh   $h   7%%'7-'hX5
5XV6  6g5VW6
6WV5
   0 t /  37%!!%'#''7'%!5!%7'77;[TA:#T8#AT[TA#9T#8AT T8#AT[U@#7S#9@U[TA8#   1   54'&5476276767632#"#"#"327232#"'&'&/"'&5476=&'&'#"'&'&54767632332?&547'&#"#"#"'&'&54767632676?>$,.c.,$>]5 71+:H3>	kR

Sk	>3H:+17 7Z>$,.c.,$?Z7 71+:H3>	lR

Rk	>3H:+17 9X	
ib9@R'))'R@9dg
8d< +$;)01):$* <g4hc9@R((((R@9ch
4g< *$:)00);$+ <k0	  7     "276767654'&'&/54'&5476276767632+"#"32;2#"'&'&/"'&5476=&'&'#"'&'&547676;232?&547'&#"+"'&'&54767632676z##H=$,.a.,$>\570+9F3=
	kQ
	Sj	
=3F9+077Y>$,.a.,$?Y770+9G3=
	kR	
Qk	
=3G9+079W	>
h`9@Q'(('Q@9bf
7c<+$:)/0(:$+<f3gc8@Q'(('Q@8cg3f<+$:(//):$+<i0	  4 j  '&'&'&767654'&54762767676'&76'&'&/#"'&5476='&'&76767&(ZDL"#Z:LG#:.'W4,CC,4W''A(CK;Z""LGW/'''[CL"$X>HH#:.'W4,CEH@,4W'*>&DL:Z##KGW,f',;[;;+*Q--}KOW*AA*WSGu5-U&+;;[;,)
'+;[<>**Q--}KNW+@@-USFu5-S(+;>Y;+*
    !      67654'&"327632#"'&'&/#"'&5476=#"'&'&5476763232?'&#"#"'&'&5476763254'&5476276767632#"'&#"#"'&#"327676%32767654'&'&#"#"i/)F)/,UK:M
$\/8E(5>H6-EFJA-5H;8)D7.\#	L;KU,*UK;K
#\.7F'5>H5-DE-6H<7*C8/\$
M:K U+:6-214	
$:<;$
422-6O;(A7##7A(;	!*:#.#;&Rm!CcJMU)??,RMJcCoS%9#.#;)!	 );#-$:'Qn!DcIMU*??*UMIcD oS%;#.$:* f /D;;D/    $  i     "276767654'&'&'767632#"'#"'&'&'&'#"'&'&'&5476767#"'&'&'&5476767632&'&5476767632o00'))'00o00'))'0]0+)*+%# #+%0%##&&.0%+%
 #%'.0$,#0%-# #%'.0$.  #%'-1$,#$%*/0961/*%%*/1690/*%)"*&0-(%$$$)-0&*!&"*!$$)-0&-#%(-0&*""(-0&*"$$(./&    n       %#"'&'&'&5476767#"'&'&'&5476767632&'&54767676267632#"'#"'&'&'&27654'&'&'&"67&'&'&'276767&54767'&'&#"276767654'&/?676767654'&'&'&#"h&,&1/(&#!$&1%-$!&$/'.)2$-%c%-$2-*++&$!$-%1&$!#&(/1&,&=s0
	9	
55%R


9!_	,9


R%5s	_!#'"+'0/)&$%%).2'+$*
'1.*%%%%*.1'
*"+'2.)%%$&)/0'+"'#L%%L%#ML:2(&6

_M#%

6&(2:  
  - [ 3b  &'#"'&'&'&547676763267'&#"327%327676764'&'.#"7632#"'%&'&54767676324676762676322##"'&'"'&'.5#"'&'&'&54767"'&'&'&54767676&'&'&'&'&'67676?&'32767677676765&'&'.#"7676767&'&'&/326767674'&'&'67'&'&'&#"67'&'&'&'67676767"276767654'&'&'"'&'&'&54?&'276767654'7654'&'&'&"67'&547676762				(

b

(			#!"G"!#*" '## G!"" ' Ym
	
		
	(y
	(
Ok	
		w		
	mQ(	
O
(	
		

??

+	/	L*	/	*

				+.	M+	.*					 !!!!'??'"#&#'"!! '??' !"! $&	

		

	
mP	O
	
	
			

m
	

		
	y	
	
Ok		

		

								b					

	     %j  < \ l   "276767654'&'&/2#"'&'&'&47676762#"'&'&'&54767676%%-[''!  !''[&( !! (TB39)+,+76?A3:(+,+76>tjeVT,++(XRiiuskdVT,**(XQijtuz"z!uv!z"z#&(,-''""''-,(&#e)*:6?;97,+)*97z88,+,*UThgyricYT+,,*USigtvjbZR-,zvvz"z vv!z    29         "327632#"'&'&/#"'&5476=#"'&'&5476763232?'&#"#"'&'&5476763254'&5476276767632#"'&#"27654'&%&'&#"327676%327632654'&'&#"#"i"(-+SI9K	#Y.6C&4<F4,CDH?,4F96(B5-Y"	K8IS*)RI8J	"Y-5D&3<F4,CC,4F:6(A6.Y#	K9IR*"(-62
#9~3
#9;
01+5600,5`%;G,A
$.?'!3&@!*Yx$	ImPT]-EE0ZTPmI	"zZ)!?&3!'@-$
	#,A'!2'?!*Yx$ImQT\.EE.\TQmI#yZ)!A&2"'?.#~&<G,@ #3J #3J""    W A  ''7'7535'75377537'7'#5''#5'75#5'7'7Ϩ4t4hϨ4tgt4h4t4Ϩ4t4hϨ4tgt4h4t4~f_Fh`if_GG_f~͎i`hF_f~f_Fh_hf_GG_f͎h_hF_f  0  ! % ) - 1 5  377''#5'7'7'75777%7?58a11a11슊늊[LZa}T}{U}}U{}T} PPPPUPOOPPOOSPPP      A  377537'7'#5''#5'75#5'7'77''7'7535'79arQڢH1JqQQrI1KQrarQآJ1HrQRrK1IQrTBq~*T+Bp|~qA+T+|qBTRBq|+T*Aq}|qB+T)~pB     2   #"'&'67632#"'&'&547'".467675#"'&'&54767627'#".47676325&'.4676327&54767632%'+,%%,+'%$'+)(&%,,KWK,,%&&+,&%%'V&(),K,%'+)(&%,,%&+,K,,%'%,+'),%+'%	qq	&&+*&&&%,rKXK,,KXKr,%&&%,+&&	qq	,KX%&&%,r	KXK+KXK	r,%$  	 )j      . E \ s   "&462	7	7%'	'7&'&'&5476762"'&'&547676'#"'&'&47676326767632#"'&'&C]CC]@@$@#@$F@#+W,,Wx-3>41%%14>3t-3>41%%14>3f^CC^B%@#@@%@#-4>41%%14>4-3>41%%14>3+V++V  	 !r      + ? S g   "&46277''"'&'&476762"'&'&476762 2"'&'&4767$2"'&'&4767eeeBABA#U##U##U##U#V%**%V&**KV&**&V%**~ffeAA$AAV%**%V&**V&**&V%**#U##U##U##U#    	    & 3 @ M Y a m  +%5%32476;#"'&'?632&54?#"632/&54#"/7 2#547"&462"'&=3?_?6  6  6] 6'?&M&C_CC_?&M&< 'L&&L'!6 6^6!6 >_CC_D<>    " l  267632%632#"'%3#"'&'"'&547#"'&54727%#"'&47632%&'&54763&5476h!#;'&1'h	9##8)'1!,;#A#;'&1')8##9	h'12;# 4%.&!6 = 6%".%3  3	G%.56 = 6%".G	4     $8  !     54."#" 54$32632 #"_	ɀ~~a>     E	    %!#!3!pEE?p9E    =  V    %!%!35!cE:dFF   8  	  %!!![:F:\;[   0  q  	  %!!7!N]<N;)G  +t      	,o9;      #q  
   !r Qk   !k`    !733}b>v     !#7#)iC~  '<   <#     '=   =#      g]j O S  2#"327676765#"'&546;57!##"'&'&'&54767676%#

42;%-n`Ԯrr#26A@:V7:$)&7.Yq	

	%$.277g[(dVDQ49%*,04?()-#     5  2&'&547676762"'&'&'&5476767hc"$njln(Lfe*+$$$$+*e*+$%%$+!#'(*dRjjSc*('!"%*,20,+%""%+,02,*%"     % C  &'&547676762476767622"'&'&'&5476767hcn(%X%&&&W%(nؖe*+$$$$+*e*+$%%$+,Dj*('(&,,&('(*kC "&*,11,*%##%*,11,*&"     . i %  %&%&54767676247676762hhÔ*(42u24)(()42u24(*i\=97,*+*96@@69*+*,79=Z   r_ '  #"'&'&'&547676763"'&'&'&5476767632_dA=;0-/.=:DD:=./-0;=Abx1.=8DC9</./0;8EB:;/0  A   i  654'&#"632327632!"'&53267&'&#"#"'&54763247632327654'&547632#",#<Z%LFe0$|U^),3 SB?R8<D3!#^L_U(=!#?>()1F="%".4"tNa5&$4!/.r<@6B2L_0>Q#kI|"rz7&)?),%=^K=.C26F@13.!9+cM3     13  N  676 547&'&327#"'#536767&'&'&5432&5476323254'&543253%5@26`',  =NR6#!vWR>42:O	t51"".1&X.RO		A5ȏ)T/186,FAS:#(=:tA09SD 'A#5}11BO9       "'&'&'&547676763"3ᗊpm8884qlYTN!  !C@RP]e:6pltm9:'62~~jf77      "  05276767654'.'&#052]PR@C!  !NTYlq4888mpe'67fj~~27&:9mtlo7:   fkR   !&547jljjlyyxzQqp    nc$   0!!676n	wu;;vi43f$lc   C}U   #	3t    D}U   	3	Dut  V.   !	!J   V.   	!	J  A   !	!m^\GH   B   	!	^^HH v   !'7DWWWW   |   '7'7WWbW>W ^ $  #"&=4&+5326=46;#"3xMe,,fLx1d=AOOA=dƂ׈ihǄOߍO  i (  326=467&'&=4&+532;#"+5nCFVU$#Cn5BB*)p//oTBB¥P⎁AAPDBۇ45iDC   S/~   	#!5!3}    t ]}   	7%d^=]d>  S~   5	/%0~##   t ]   	'-f\=]d]>  -   !'7!.	(``    I)= 2   "&'&'&5476?!".'&47>3!'&'&54767>2	'!`!!!',&&	    S~&   !5!	F78  -x   !5!5	V(Mr   6u      #3#3#3!!5	鴴ZZ---I(,,,,  S~      55!#3#3#3F9UU**b]^bUUU  S~   !!5	F7.  `tq    !%	qR     {V$    %!	S%@     {V   	t%22     6=   3!5	5!"'&'&'&6  $hI$  h$       6<   47676763!5	5!"6  $hI$  $    $   O   !!	e     6n    55!lMlTwccw   ekl!    5!!53	'	!_[y"kd""  e/l    5!!53	'	!_["/d""  5     !73#57!%!6UcGjbzbdǩ""    a p    5!'53#'!!!7%acߎA[؁(ZqZ{{{ĒҒ   } TM 
   %'!'!53	!;qKRnKa26wwIw22w  T }> 
   3#5!7!!!	ZQtZQ0L>ssjLK  2Nu    '!53#'5!'7!	!pSn%R&%Ua2wKJ,Lw22w    ) 1    '7!573#5!7!	!r&j&St&SpWl6qM,LLyy77y     @ !  6767632#"'&'&'!	 6IYZgb^UMI%&&"LF\Zfc^UM3!t:6I&&&#LHZZhc\UMH'&&#L2<tt    	 XNy      " & * .  37#37#37#37#5'!!55!!3'#3'#3'#3'#r+qr*rr+rr+rV{{*q+*r*+r++r+9Ɔ\]   t ]     7&#"7'7	#%5#t69.wZY96t".*X/     S~k     55!5!!7'!nn UVGG8:ȏ     u \j     '327''	#395t".Y/Y"u69.xXX     N  2  %&#"6767&'&"67632&'&547676767}:<?M#!D" $(*&*&s	
 ?$>"	s %*&*(&"!#!"O>>;     *E /  4767!"!47676763"'&'&'&5!3!&'&5v5$ %% $HvgMME%!#"!%EM    u \ 2  &'&'&'&54767#"'&'276?&'&'32\":
#'$'$#Y@I:86s6::I  #&'#'"X:    5*  + B  67"'&'&'&547676$47676762"'&'&'%&'&'&547676762$[	/		H=a=		/ZI=X

q>d(*c
			XJ    n  .  676767632#"'&'&'&%&'&54767&'&54765  #&+*1)F-Y)) .EOO/3S>>S&/ #$))%#]]#%))$#     & e   "'&'.54?654'&'&'&+"#!".4?64/&4676763!2;276767654/&54676762I
]]I	Q		
		Q	     %e g   "'&'.54?654'&'&'&+"#!".4?64/&4676763!2;276767654/&54676762GKa
u~iKGE
	   2   +  #76767&'&/3#6767!5!!5!&'&'g?j7R=y66y=R6k?VO S+

+Sd _8=eyu'&utj<u,*44GeeeeG35*+   X  y   8&   *'$& '&#"'676 67	h7Hm^:-3RESRQO1̡LH  7&   57$'& 54&#" "7ER3-:^mH7hH܏1OQS   g    !"&462264&"1[륢S4fOsPOtOۨD/YR3BPQqOO   u#\u   	  	!	!hi/u-1  )    3%!#3!Zddd   (    #3!53#5DddZd    K   	3	#pp   K   	#	3Jp   	'   8     '   8      5} 	  !!d#ZDZZ#ZZ#  5} 	  	'7!5!'75ZDZ#ZZ     5}   	'7!5!'75Z!Z#ZߠZ#ZZ#R#ZZ  ,    $  %!XdՑQ-,S'HH(   ,      7654',P)dՑQS'(   H   	reel  AH   	'_eH8e  u#\u   	hu-  X qy   33#####533ܨDDDD     X qy   333333#######5ʨssrDDDDDD  P/     3# ! % ! ts_e  ;T    Xy&K   $ X y&K  ' $W  T}   !!	7J77 1    !#	788 1    !3	8   5   	''!jxxG      F5   	!0wx      F5   	77!xGVxH      5   	!xGw     T} 	  !5	5!	7E7Jɩ77  1  	  #	#3	ک878F8   w    7!!!xr$<     w    !!!xr<    w    7!!xr$<  w    %!!Yr$<   w    %	h5bcJ6b    w    	bc66b    w    	!	bc6b   w    !	5bc6b     w  	      # ) - 1 7  %#535#5#5#5##5'3#5#5#5#5#5##5##5###5ZssssVrrrrsZVr~rZHNrrrrZZrHNbVrrrrrrV  L  '  !2#.+;#"'&32654&#N76SٲM{c,-ZߥZYݑҔ77hy]k~>>ji   jR  "  53#5#"'& 32 3276'&#"3UVn၂pVTMLNMMNLA+l99lg-,..   VVy   	##!	!+532765YZͷZ-,'ij>>  %    
  %!#3!3iVO7nlѲR{    jR  "  %#367632 #"'& '&#"327"3UVn၂pVT+MLNMMNLl99f-,[љ      H   3!!#9    `   #3!{`9     Lh 
 '  "27654'&'2#"'&7673A\VMMG*w|~~hA1LLNeˑRh]c[斘,mKseg.       !#5#"&'532654&+532.Dv6;zIMcݳw"$.*gQ     H{      "264    676326^\`s-!\[^[]-=P@7'"]_$5   hX  d      3#3h݄D    8  .#";#"./.'&'532654&/&'&54$32\^mjj3!2_Pf-Efoshul]^V;<qch#1ҵpZ"D07/ID{pv 0^_'        35!5!;#"./&#fa-BQO(Qr Lcu9B_o^,97&P7?    p`   %  36767#"'&5476?>5#5% Yb^`_hon"!^XE&->B%S#D9``LAB\VBT=;-;,,1Y7 X y&K   W :w   !##  Z:   #5!#J&  w   3!3X   Z   !533XK    V   ,  X    3#3,X0X ,  X    3#3,$dX ,  X    3#3,X ,  X    3#3,X ,  X    %3#3#,񈈈X   ,  X    3##3X0X  ,  X    3##3$dX  ,  X    3##3X  ,  X    3##3X  ,  X    %3#!#3X ,  X   !#!!yX   ,  X   !#3!!Ẍ  ,  X   !#3!!X  ,  X   !#3!!Xd  ,  X   %!!3X  T| 	  3'#'L:LjLCUC T| 	  #'737:LjLCUC (  	  3#3#'(f*D  (  	  #53#73fRo (  D  d   A     !5 !5 !5 ||pO	
'ŢcmZ  n  `   !5 !5 !5 TT	
|MY     	  5! u	.1       V{ 	  5! u	X.1      VH   +532765!#3!HYZͧZ-,)ij>>9d     V   4&#"#3>32+532765bjq1sYZ͹Z-,`c6ij>>~    '    IJ    !5!5!5!J>>I     3#qe       1 0#+      Df    V4     ;#"&5# 5432!5!3#'&#"3[Y襵>5*GN\|~󠠄K9   T   !33###T Æ3B3  z^{   3##4&#"#3>32Ҍjq1sL``c       "#546;!3#!#R>d9/Wp1Fd+9      3!533##!##53!5:]UUTT]}}}\rk\\~~   ? $ 0 7   6762!3267#&'&'#"&54%"32654&.#"&N[
xm7zEB{:]M.X[[XY[[X[VTl
TZ2fq fWTRzxw{{wxz[^cW   H  %  "32654&'6#"467.5463%!"h{1PA(rڜ-*/1|I5   #  7   N@*	
 
	 	JEE<2<2991 /<299903#'#"!#!##535463wcM%ɩQge/яN    #  7  B@#
 	 	 JEE<<991 /<29990#!"!!##5354637cM%۸ɩ{Qge/яN E&    E&  X&&  X&'   E&    E&  xX&&  X&'   E&    E&  r
X&&  zX&'   E&   7' E&  -  x&&    m&'   E&    E'    y&&    |&'   EW&   T Lf EH'T 4W    &&  T K  &'  T ]r&(  tj'v    ?',~    '  ~&(  j
't    ?',x     '   Xf&c  {  Xf&]  / }>\/'a8^  >/'8_   Xf&c    Xf&]  &8\/' 8^  8/'8_   Xf&c  *  Xf&]   B\/' ^  >/'8_   Xf&c  2  Xf&]   ^\/' ^  >/'8_  a7&g  `D'\i  'TUg  `'T i   
]    2  %#"'$4733267654'&54767;#"'&'0Qcpl?AOL64)>.VhFd((&*=#>2(I=/ b\^xHj<9"1B,f%TOA7.N?  +       
cG&   J'T     +9'       9'      6*    &  #"'&47332767654'3;#"'G{579T?:!e#"#V4^Wt<;?xC3^w3UT8@0             & 6 D  %3!"''&5473327&'&5476&'5%67654'&#"%3276'&'&bJDv-(0g:-0M,QG$"':AG5'343%@K5:,+CfN@TSZ	'AO@H=.%4-+#%v_U[1C "&_        , :  %&'&5476&'53!"'+532767654'&#"%3276'&'&\:-0M,QG JF$"':AG5'3CfN@TSZ	'AO844U@H=.%4-+#%v_U[1C "&_     X   %!#53 76=3`H՞,1VV,1jٻ      X   %#!5!276=33!!"^L,02,*VV,1jj1,  z  |  X'&  X''  D|    &|  q    D}   "  k   ;#"'&=31,cK\WL71,\W+   D~  D    &q      D    &q      D   &q      0    &q      Vz    &  q     U-W     &]       '  I    
9&]    9' 'I   L3&y   `> Z' 2>  &]     &V I     V&z  Y|_'    'p&    '  p'    ]   L     3;!"'&L2,PXskj1,\e E&    E'  X&&  X&'   &x  j   '   E &    E '    #'R&    'R'   E&    E'    ,&&  R  &'  , Xf&c    Xf'p]  \/'^  /'_   Xfc    Xf .  %3#"'&'&'27'&5767&5$(1{R=IrbJԖ`e_$m3HZdP]vbĘe4)@5
[_w      \/   &'&'&5672+5327676SSgURHKLXJKݣdht^#4b4bBPH:jV     / )  ;#"'&'+53276767&'&'&5672~AI2h6<P|(;E)Kݣdht^eSgURHK4b)N"w6a.%PH:jV#   X&c   X']    \L'^    L'_   je    j    ;#"'#"'532767654'&'3R,cSa^.^gsR""<EkHRzDR,&*	.s*]esl    &e   'e  D"g   `&   3;#"'!5 7$7654
I*e<s29  "
&pgM,>:H~   D&g  ] `' i  $i    F  "'&''#"'&7673327676'&/37653323;#"'4A@E2J/1%=Gq_ev<W!.052#)1'/-%% *i),;?d<G!C~m8(P^yM\dsቬ+;H2zm^\꜑#P}g£x&),`a	    1  %27653323#"'&'#"'&'+53276=3C*%&+h>!UNBAF3I2Q,E;eF*L$Ftg£x&R"	C~m8*@#?9,%#GvOdT  7  323;#"'#"'&'#"'&'+53276=32765!5d*,""@e;6:HO7*F35C%&F:DF*7@`*%Rx&),`X
I6[m8*6759,%#GvOdTtg  $&i  6 '  m  ' n  'R o  k     G  %327654'&#"%;#"/+"'&5#"'&5473767654'&'367632Ij($?GhK=.';4f&4-//3fJZ}eh<2<C%@	!
(L1[W.DF-%!mNN4G
,^x+VZ}ͼ̜2);gh>H7(2<RN        ,  %327654'&#""'&'+53276=367632#IIj($?GhKRJNA'f^K+%A-L1[W~.DF-%!mN*#=,PdrNP2<RNymK      6  %327654'&#""'&'+53276=367632;#"/#Ij($?GhKRJNA'fDP*--L1[W.';4f.DF-%!mN*#=.2rNP2<RNy4G
,^x4&k  O4'u    v'Wv    h'4w   
  m        '  %327654'&#"%;#"/#!#53367632Ij($?GhK=*=%-:]U}L1[W.DF-%!mNN5FCOi\<RN        %327654'&#"!#53367632,Ij($?GhKL1[W~.DF-%!mNظ\<RNymK     '  %327654'&#"%;#"/#!#53367632Ij($?GhK=*=%-:]U}ڸL1[W.DF-%!mNN5FCOi\<RN  
  &m  C    'C }    'C ~    'C    z*o     , 7  347&'&5476762;# '!27'& "676'=&hYYeEv7DW_)k_ԖRb4/F0Ԍ2H9)74--38&">8`@%(jm=vbw $A7.       *   727&'&5763"327%+5=K4X}ں>SF8I \Y];d}M4F!Ť      $ /  %+532767&'&5476762;#""654'hkB;(aDhYYfMXD=pʨ4/gg/($'UZ'-)74--38)-'bM,(U __    zF&o  w L'    F'w    L'  &(  *jL'    ?'~    ~'"   }t&!  ]~'Nk    ?&  ,~  ~&   t    ! D  #"'5327654'&'&7676;#"''&5473327676J&PDfXRNB8D-<9<NJ KU1,KPq[OgǭyWubQJ4LR!
Xn*'X
&/.Q&+kj1,{N-59LK5:,]-#&#_C     +   )5!27654'&54767Z.62
hGf>_h$$EB|=Q&v+6( %z|qe      )  )5!27654'&54767;#"'&/P/62
hF F&,@XB:f"``h$$EB|=Q&v+6( %?+)x.    CKu    
 $  ;#"'#"'&&733276761,+K8N3h^}cw@A(IiTcEkj1,3]?~/"*V\ss~B")9(j       )5!27653WP,1se\,1j         %)5327653;! hL,02,VV,1jkj1,    Tv    Gt  4  %327654'&'&#"#"'&#4763&547632;#"zL,5;(.;DKp#IxAIM\HT(RfV*9:XDD(PNKOmf7*(?$G@^   m  *  %'+53276767632%327654'&'&#"d`p@ht4,+^]EE>/4:''5)24ed0$#1P8O$*ME5EX!a% m  /  %#"'+53276767632;#"%327654'&'&#"|an@h4,+^]HB3&id>/4:''5).4fb0$#1P8S1>/E5EXd%   6&*  'w!    &&  R  &'  R x       
 $  &'&'&'3;#"'&'#"'&5476xRot$8pqZI-&8:m*12eCY>)2'+eO,3;I0D   - =  67654'&#"27&'&5476&'5#"'+5327654'&$"':A4N--0M,Q;(Jxb41~!@H=.%4-+#%viEN@TSZ	'C49g=ql)D%'r.C!<NE    
 $ /  %327654#"7632!!#"'&!53254'&#*`rTKJ&	lE..El	&JKTr`*LZ4pHu
~kcCrollorCckuHp4ZL L3y    Z  ,  %4'&'&3#'!5 767&'&'&'&7676<.<<C@/sFSii>v-3j

;AWEL9P)8K6(S/VL_+Y9K1\S z   | 7  %&'&'&54767632;#"'&##"'&'&73327676	,)MW,.@"##C@"*5NhLy$Eq:<3,$.=N/[ EW<SSo$8\Ptj%.  &z  Y|&   X'&  X''  ',  @'@,   S',  '#,   '     _'         #"'53273676537M͞jK`Uq%BUG  FA+7     _   #"'5327367653;#"'&?;IʡjK`Uq%"@Pif<[A  FA+7DT)    RT~  & *  		5476?67654&#">3235huFX^"!ݺh^bNm/>ZUb=*(DV\BAL89DEnY1X;YTBEb       D 	    !!!5!#3#3# !#n!7`ddh    %   $     q %   1 &     R '     N (     X )   fP *     H +      ,   m -      .     s /   V  y 0     F 1   u\ 2     u 3   u\ 4      5   J 6   /   7   = 8   9   9       :      ;   %   <      =   #{ D   X E   %{ F   { G   {X{ H     ' I   {H{ J      K     D L   V M      N     
 O   m  o{ P     { Q   H{ R   VT{ S   Rw T  j  { U   { V      W   ^ X   d  m` Y      ` Z   L  ` [   hV` \     b ]   L      F      #    7    f  o    -    L      7    N    F    f  @ 1 03# qf ?   Q@ aa 1 <20 KTX  @   878YKTKT[X     @878Y3#%3#?   Z  k 1 0 KTX     @878Y KTX  @   878Y@& 

 / ///  / /]]3#     @  	99991 <<990 KTKT[X  @   878Y@t	 	 !]]'.#"#4632326=3#"&d9#(}gU$=19#(}fT"<9!2-ev3)dw y  i 1 0 KTX     @878Y KTX  @   878YKTX  @   878Y@  / / ]#1Ś   7  ]@	 91 <90 KTX     @878Y KTX  @   878Y@  / /,	]3#'#
ӌ 7  i@	 91 290 KTX  @   878Y KTX     @878Y@
//*//]373
ӌ
    Zj  @
  991 0'3$ll   /{m   > #.#"/ waSRd{xz{w8796 /{m   @	PP 1 20332673#"&/wdRSawm6978w{z  P   a 1 03#P  Xck   @
 1 <203#3#\zk    cyk    #!#uŚŚk f   $ (  #5476?>54'&'&56763#7:)*%>8'9@B9Q[~CG=9.bEBTY;X1I*%#D>"Y`LAB\VE'*=   =0    1 0!!=V0  45   !5!5gr    4   !5!;r    4   !5!/r   ^s    2"&46"264hrL&'◚vURyVP%`8n|TyRTv    ?F    3#%3#?             53#            73#'3#            3#3#'3#}}d    E &  "'&547332767654'3;#"'&')+ubEW-7!K4/+X`t8A>|0l7%5A8>7KZd3(,*OQ/9     ?  0  654'&323276767'&54767632#!V)B,4((7(*HTO<?aNbNLZB`.NJ|m+M;3*)3P&]027EW4,E$2Hf3Џ,'         3  ;!"'#!5327&'&5476762"67654'&'ȷ$&ň($28
D@$
8P2*I1C299(M.L,0W
 5+5DE2.4!  . @  %&'&'&54767632;+'$'&547332766'&'&#"B.y9()Wp8c2X]0Lh^E>>:lu{/"'"5
9Ld/
#+m=E2X:SmJN}`kI=<QkzWK#
9<,;	   j + =  %'$473327&'&54767632;#"'654'&'&#"s=v|q@BGp"R:4RQP	ioh4"(=)1$!$8(g\^}E:,|l'K2T%jAmG'
<+BN           53'53!53}p            3#3#d             3#3#3#3#dd   t8   	5I    9   	5dm          %4'&"2>"'&4762<R8R8z?@?@@?@(8)*8@@@@@??  V<  D@!B 
1 0291 /<2990KSXY33+532765#5YZ͹Z-,˹iij>>i     E   '&5473327654'ߚ)+ubj{G{yo9;>|0lALj@G  }t  8  654'&32676#"'&54767632'&'&5473)B,4((7(*H[b?zKbNLc9g'!.9ΊMRVV+M;3*)3P&;f4KCW-3E$2Zwfj}ػH(   E '&    E'     X'8c   X'c   X'Tc  &g  > x  9  654'&"32#"'&&733276767#"'&54767632)B,4P7&,Hir$$xZT0A&?zKbNLZB`.,L95T2R$T&()X\^-"2(hLDV,4D$2Hf3   C'u    6   #"'&47332767654'3dG{579T?:"FH t<;?xC3b`   L3H' py   '(z   x       	 @  
<2991 /0533)eq      ! % @G
	%%B!  "$$&#	 #	)"#&99991 9990KSX99Y"33267#"&546?>54565#53%=TZ>/mNb^hC^XC&DbRY;X1YnED98L\V@T?   u      ^Tq_<      +    +9             m                   h        R   ! 9\  Xd f     f      X X X   %      f   m   V  u  u   /  9    %  fZ H      { {  {      m    j    d   L h    X      % ?   w Xd  =+ XBF  jX       % % % % % %              u u u u u       %         )  { { { {            X /     h  h %  %  %           {  {  {  {  {  {  { f { f { f { f {    F           m             L          u  u  u  H  j   j         /  /  /                  % h %        F    0 <  < ^       u  ?  4  A   n   1 m   u    - V 8     x v  /  / 	 ' J        }    }  }9  %    u            z %  %    ) f {   u  u   }  f { =     )  / %  %   {  {     u  u  h j       /  }        %   { u  u  u  u  % h  j   x x   /  !   7   9    {     { { z z    8   {  z f f       X   ( h h g     E     fjj   z z  } } } v     _ A H  H f   } i     _   6   w  #     6          AAQ0 ^^))$=$=yy>/VX%V[^,,,,, )=  /?VX)"V //yysb^_s ?$U ))//=     X    / UU         m? p6 %   %    u   % V   u   x / % u  u J  % F  6 3 F        6  D  t   P     3 L Y  F6 3  3 F  t "p " m 9 4 u       `  ! Y 4    u      V  U           m "   h  %    !        V  u    / h B  P  r <   A   < L  }  i { ;      =       h c L |  } P  h   N  { { #      
 A #   h     u   U    ;      b q }   /  % \ % \  L     ;       %  %    )  { u z u z  ;    }     u  u  u    h h h h h h    A h   u      w  U 6  ` x  + U   ] 6  [ _ 6 V 6 @ 6 `  ` A ` 6  ! i  @  F 3 u Gz y   g  I r  I   B I G h     r  h= h    g    f h    h W  ( Hd 1 1 Z  d   L  E  E E X X X  $$ 
 
 z z   C  6  L  DDDDDD0V \      ~ ~  6  E E E E E E X X X X 
 
        ~ ~   > l y  | a s {   j K } } c c e e  s d a o b  w U 0 [  S S S Sx E V _I   n 7    7      7   7  - 7 7  7  7  V       v     7 k  n # )      + ? +  77LL,:d^E<<.?A EEG GG11OOGI8%[:X::GM[ %#H[# {:  GXQ:OWbG[CaIGdUU~%%UU?::[xM  Fa^M3: %           {  {  { } {  {  {  {  {   f {        7                   V m V m V m         u      j j = =       /  /  /  /          9 d 9 d                      L  L % h           h   %  %  %  %   {  {  {   u  u                	 ' 	 ' 	 ' 	 ' % h % h % h F F F F F F F F % %ll              MM@@cc66  '       3 3 3 3 3 3 3 3@E F F F F F F F Ff F F    6   3 3 F F F F F F F F F F % %ll        MM@@cc F F F F F F F Ff F F F F F F F % %  %     [  '/66    3 3 3 3   3 3 % %[p? F F F F F J                      dd                ?? P        Z    Z ! !    =H?I=;0A=XBF?I=;0E1:1A8V%AG[M 
 { _    m   
 
   * { % * /  . j 5 '    / h 
 f   : T T J 
   B  %   0 J  %          
         B B B     B B Y Y B B B B B B B B B B B B q      ? Q Q 2 B X X B B B BG B * B B * B * B B B B B B B B     B B B B B B B B   B        B E E  B * B B B B B B B  B  % u    I           X X f +? ; ; ;  ) } }      ? 5    X J W X X X X X X X X X X X X X X X W X X X X X W J J X X X X X X X E X X X X X X X X V V V V W X X X X V V V V V V V V V X V V V V V V X X X X X X X X X X   X X X X ^ ^ O O O O O O O O O P P P P X X X X X X X X    i X Z Z X X V X V V V V X X X X V V V V P I r     ZZ% %  X a     G X++ | h  } 2  H X         X X     B B    X %   X X  X %   X X          X  ?   X X X X % X X    X X6  F     F  H    R F F F        < < < < < <xxxxxxxhhi      Fii              DD                           u           777777      ?                    a a    " 2 " Y  : :  ; +   6 .   o c    N 8 / & / / /      	  " N ` y a  7   g     ! ! ! !       G  C L   5  4 = / U 2 8  Y ^ C V p    j 6   g v    2    1 .r  j D7 ` . / < K D $ > K - - 9 . 7 . P < < < < < < . . . . R R  s '      J  * R * "    . . : = 4 % = ?D - W & W ; %  J  @  3 @ V 9 0  ~  0 G     + % ( C ( # ( = ( . 6 W 0 $  2   $ 0 1 7 4 ! $   % 2   0  2 ) !  " $ E = 8 0 +Q   g   . r A 1  fnCD      S t S t - I S - 6 S S ` { { 6 6O 6 e e 5 a } T 2 )  X t S u N * u 5  & % 2 X87  u)(  ,,  u X X P  X X T11     T1           j V % j   L      XZZ ,,,,,,,,,,,,,,,TT(((An       T z   ?  # # E E E E E E E E E E E Ejj X X X X X X X X`` 
 
 6     |DD"DDDD0V   L Z |L E E   E E E E X X X X X X    ``$$ 
  
  z  z j   C 
  G 6   L Z | |@ S  _  _           R  %      f   m   V  u  u   /  9    %     { {  {      m    j    d   L h      f     ?y77 //X f=   ^?       Ej              E  E E X X X C 6 L             L   L   L   L                ,      x      8  d    	   	x  
(  
  d               4                      ,    (            P    D                      !  !T  !  !  "  "@  "  #p  $   $  %  %  &8  '   'p  '  (P  )L  )  *  +   +  ,,  ,  -P  .<  .  /   /  0  1  2  3X  4$  4T  5$  5  5  5  6  7L  8d  98  9  :  :  <  <  =`  =  =  ?,  ?X  ?  @<  @  A  B  B  C  C@  CP  C  DH  D  D  E   E   F  F8  F\  F  F  F  H$  H  H  I  I$  I<  IT  Il  I  I  I  Jl  J  J  J  K  K<  Kt  K  L  M  M4  Md  M  M  N@  O$  O<  OT  Ol  O  O  O  Q  Q  Q4  QL  Qd  Q  Q  Q  Q  Q  S  S$  S<  ST  S|  S  S  T8  U<  UT  Ul  U  U  U  Vp  V  V  V  V  W  W,  WD  W\  Wt  W  W  W  W  W  X  X  XD  XT  Y  Y(  Y@  YX  Yp  Y  Y  Y  Y  Y  Z   Z  Z0  ZH  Z`  Zx  Z  Z  Z  Z  [$  [  \D  \x  \  \  \  \  ]  ](  ]@  ]X  ]  ^P  _   _  _0  _H  _`  `\  `  `  `  `  `  a  a,  aD  a  bH  b`  bx  b  b  b  b  b  c  d  dD  dd  d  d  d  d  e|  f  f  f  f  f  g  g$  g<  gT  gl  g  g  g  g  g  g  h  h8  hP  h  iL  ix  i  i  i  j  j<  jT  jl  j  j  j  j  j  k  k4  kL  kp  k  k  k  k  k  l   ld  l  m  m  n  nd  n  o`  o  p@  pP  p  q  ql  r  rt  s  s  t  tx  t  uX  u  v  v\  v  w  wT  w  x  xL  x  x  y  y,  y  y  zl  z  {\  {  |L  |\  |  },  }h  }  ~  ~   ~<  ~  ~  T       H           d    0           d  t              4  L  l            ,  D  T  t              $  <  T  l                ,                 8  P  h                (  @  X  p                 0  H  `  x        L        T    D              ,  L  d  |            `    `    \    X    x          D    @  h    (    4    p    x    d    h      l  (          `      `    0        X      t    D    $      $          (  x      L      h    L      X      H    $  L        <           L         <    T         @    4           @            `      X      T      4         (  8  H  X  Ô    ,  Ĉ    @  p  ŀ  Ű          ,  @  T  ƀ  Ɯ  Ƭ  Ƽ  `        (  |  ɰ  ,  d        ,  T  t  ˄  ˔  ˤ  ˴           d  ̔  ̤      L  \  x  ͔        ,  T  x  Δ  Ψ  μ      $  h  Ϙ  ϼ      (  X  Ј  д    `  ь      4  X  Ҡ      p  Ӥ  Ԅ  ԰            0  L  |  ՠ      H  ֨        $  D  `  p  ׀  ר  ׸            0  H  X  p  ؈  ؠ  ظ              0  ِ  ٠  ٰ    `  p  ڀ        X  h  x  ۈ            ݰ  X  p  ވ  ޠ  ޸         ߐ    @      \    t        ,  |      T    X    L        <             8    H        h    |    H    ,  <      0             ,      x                     0  H                P      4  L  d      ,  <  t          \  t            \  l  |          \      |    p     D    T   $    l       ( 8 H   t   	< 	 	 
h 
 T   D \ t        \    4 L |  , < L    <   T      `    @ X p     T          0   $    , D |         4 L d |        L x        ( @ X p      ( @ P ` p     t   @   ! !< ! "4 " " # #t $( $x $ % % &L & '@ ' ( (h ( )4 ) *L * * + + , , -T - - . . . . /, /< / / 0L 0 1  1L 1 1 2( 2p 3 3 3 3 4h 4 5< 5L 6 6X 7 7P 7| 7 8L 8\ 8 9` :  : : : ;d ; ; ; <\ < < = = = > > ?d ? ? @ @l @ A A| A A A A A B B( B@ BX Bp B B C C` Cx C C D D E` Ex E E Ft F F F F G G Hx H H Ix J J4 J` K  K, KH K K Lx L M  M M$ ML Mh M M Nl N O\ O O PD P P Q8 Q\ Q Q R  R R0 RH R` Rx R R R R R S S  S S T T T T T T U` U VL V\ Vl V| W W Xl Y$ Y Z Z [\ [ \h \ ] ^  ^d ^ _ `( ` aH a b( b c\ c d e8 e f g g( g g g h0 h| h i$ il i j  jt j j k k k k lP l m0 m n n o o o p< p q qh q rD r s  sp s tP t uX u v< v w, w w xt y yX y zD z {d { |H | }T } ~, ~   4  D      \    T   D t    0 `    0 `    |   @  8  H   P      @ x  @    <    X     $ 8    `     |   p   , \   ( x      H x  | ( p  <    D   H        0 H `        , D \ t       $ < T l        , D \ t        4 L d |       $ < T l        , D d        , D \ t         < T l        , D \ t       , D \ t        4 L d |       $ < T l        $ D \ t        4 L d |       $ < T l        , D \ t        4 L d |       $ < T l        , D \ t        4 L d |       $ < T l        , D \ t        4 L d |       $ < T l        , D \ t        4 L d t         , < T d |       $ < T l        , D \ t        4 L d |       $ < T l        , D \ t         @ P h          0 H d |        4 L d t  ¨      0 H ` x Ð è         8 P h Ā Ę İ       4 4 4 4 4 4 4 4 4 4 4 4 ` p Ŝ    4 L ƈ    $ ǀ  < p  L Ɍ ɨ     P | ̜ ̸    0 t ͼ  T h Π     8 T ό ό  L м $ Ѥ  ҄  @ \ ӄ Ӹ  P d x Ԍ Ԡ Դ      , @ T h | Ր դ ո      0 D X l ր  פ 4 t  \   ی 0 ܐ ܨ ݸ   X         4 h  H     d    D  L            4 T t      4 T t      P    D t    D  4  $ l   < |   0 l  @   T l   H    ( `  |     p     4 \    L    0  x     <       @   8 x   8 x   d   L   , h   	  	\ 	 	 
@ 
   X   `     @     p  ( \    t  <  p   t       8 `   < L ` t       T x      t  \     0 \ t    X         !l ! "| # $ $ %l &` & '$ ' (T (l ( ( ( ) )\ ) *$ *l * * +8 + ,d , -t - ., . . /( / / 0 0h 0 14 1 1 2D 2 3  3 4H 4 58 5| 6  6 6 6 7d 7 8` 8 9X 9 : :L : ;$ ;x ; <D < =8 = = >L > > ?x ? @  @D A A B C< C D E F G8 G G H  HX H H H H I  IL I I J JP J J J K$ K K L  Lx L M@ M M N  Nh N Oh O PP P P Q8 Q R8 R S| S S S T T, TT T T T U U( UH Up U U U V V\ Vl V V WL X4 XX X| X X X Y4 Y Y Z( Z _, _ _ _ ` `X ` a a a b, bD b| b b c  cl c c dD d d ep e e f< f f gD g g h h` h i  ih i i i j  j j0 j j j j k0 kt k k k lL l l l m m nx n o o o p pp p p p p p p q  q q` q r s tt u vH v wt w w w x, xd x x x x y y< yX yx y z z< zX z z { {8 { { { | |, |H |d | | } }D }| } ~ ~P ~t ~ ~ ~  ( L p      < \     ( P     $ P |     ( P |    $ P x     D p    ( \    , d    @ t    4 `     4 `      L x    8 h    D    ( \    X    D t     ( D ` |      @ h |      $ @ \ x        4  d , @ T p       0 H l      x          H d     $ @ l      @ \      0 X t    4   x p $   d   h   D l    p     L x     8 P h    4 \    8    X     p     0 \ x      |   \  D   8   ì  \  ( ƀ  ` Ȕ ` $ ʼ T   ͤ h  T l   d  \  D   8  \  t 0    0      l  p    |   P   $ l   D l  ( D X h   l 0       D       h  , |  `      	    4     P D  L   <     <    l      !H "\ # # $  %  & ) +, + + ,$ ,l .0 / 1 5@ 6 8 9 9 <` = ?, @( AT B4 B C C C D D E FD Fx F F G( G G H Ip J, K Mt P Q4 Q R\ R S T< T U0 U V V\ V W  Wx X( Xl X Y Yt Z  [ ] _ aD b e k m oT p p q s t u w0 xt x y  yT y y z z( zD z` z z z z { | }X } ~T t X  0 l    $ L t    P    H t  H p   8 `    8    ( l   T   H  X   P   4        t    4 h       T   $ T    <      $ L x    0 d     < l   p  `   `   , |   ,  ,        @ P x     @ h       D h     8 L    4     8 h x   \      4 L d |       $ < T l        , D \ t        4 L d |       $ < T l        $      ( @ P     l      4 D \ l         ( 8 P ` x         0 H ` x       4 L d |       $ < T l    D  0 H ` x      8 H      D    , D T $  D \ t    ,     8 P h x $ |  $ < T l Ä Ü ô     , <  t   ƀ Ƹ    Ǭ 0       0 ɨ d   ˘ ˨ L d | ̔ ̬     $ < ͐       Έ         0 @ P ` p π ϐ Ϡ ϰ          0 @ P ` p Ѐ А Р а          0 @ P ` p р ѐ Ѡ Ѱ          0 @ P ` p Ҁ Ґ Ҡ Ұ  T   Ր  ֠   ` ׌   ؀ ج     H p و ٬  P  ۈ L  4 X ݐ ݰ    ެ   ߰      0 H   p          1 + k       W             _        B       ]                                   @             	       4  	       	      	  S  	   b  	     	    	    	  "  	  :R  	 &  	  hh C o p y r i g h t   ( c )   2 0 0 3   b y   B i t s t r e a m ,   I n c .   A l l   R i g h t s   R e s e r v e d . 
 D e j a V u   c h a n g e s   a r e   i n   p u b l i c   d o m a i n 
  Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved.
DejaVu changes are in public domain
  D e j a V u   S a n s   M o n o  DejaVu Sans Mono  B o o k  Book  D e j a V u   S a n s   M o n o  DejaVu Sans Mono  D e j a V u   S a n s   M o n o  DejaVu Sans Mono  V e r s i o n   2 . 3 7  Version 2.37  D e j a V u S a n s M o n o  DejaVuSansMono  D e j a V u   f o n t s   t e a m  DejaVu fonts team  h t t p : / / d e j a v u . s o u r c e f o r g e . n e t  http://dejavu.sourceforge.net  F o n t s   a r e   ( c )   B i t s t r e a m   ( s e e   b e l o w ) .   D e j a V u   c h a n g e s   a r e   i n   p u b l i c   d o m a i n . 
 
 B i t s t r e a m   V e r a   F o n t s   C o p y r i g h t 
 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
 
 C o p y r i g h t   ( c )   2 0 0 3   b y   B i t s t r e a m ,   I n c .   A l l   R i g h t s   R e s e r v e d .   B i t s t r e a m   V e r a   i s   a   t r a d e m a r k   o f   B i t s t r e a m ,   I n c . 
 
 P e r m i s s i o n   i s   h e r e b y   g r a n t e d ,   f r e e   o f   c h a r g e ,   t o   a n y   p e r s o n   o b t a i n i n g   a   c o p y   o f   t h e   f o n t s   a c c o m p a n y i n g   t h i s   l i c e n s e   ( " F o n t s " )   a n d   a s s o c i a t e d   d o c u m e n t a t i o n   f i l e s   ( t h e   " F o n t   S o f t w a r e " ) ,   t o   r e p r o d u c e   a n d   d i s t r i b u t e   t h e   F o n t   S o f t w a r e ,   i n c l u d i n g   w i t h o u t   l i m i t a t i o n   t h e   r i g h t s   t o   u s e ,   c o p y ,   m e r g e ,   p u b l i s h ,   d i s t r i b u t e ,   a n d / o r   s e l l   c o p i e s   o f   t h e   F o n t   S o f t w a r e ,   a n d   t o   p e r m i t   p e r s o n s   t o   w h o m   t h e   F o n t   S o f t w a r e   i s   f u r n i s h e d   t o   d o   s o ,   s u b j e c t   t o   t h e   f o l l o w i n g   c o n d i t i o n s : 
 
 T h e   a b o v e   c o p y r i g h t   a n d   t r a d e m a r k   n o t i c e s   a n d   t h i s   p e r m i s s i o n   n o t i c e   s h a l l   b e   i n c l u d e d   i n   a l l   c o p i e s   o f   o n e   o r   m o r e   o f   t h e   F o n t   S o f t w a r e   t y p e f a c e s . 
 
 T h e   F o n t   S o f t w a r e   m a y   b e   m o d i f i e d ,   a l t e r e d ,   o r   a d d e d   t o ,   a n d   i n   p a r t i c u l a r   t h e   d e s i g n s   o f   g l y p h s   o r   c h a r a c t e r s   i n   t h e   F o n t s   m a y   b e   m o d i f i e d   a n d   a d d i t i o n a l   g l y p h s   o r     o r   c h a r a c t e r s   m a y   b e   a d d e d   t o   t h e   F o n t s ,   o n l y   i f   t h e   f o n t s   a r e   r e n a m e d   t o   n a m e s   n o t   c o n t a i n i n g   e i t h e r   t h e   w o r d s   " B i t s t r e a m "   o r   t h e   w o r d   " V e r a " . 
 
 T h i s   L i c e n s e   b e c o m e s   n u l l   a n d   v o i d   t o   t h e   e x t e n t   a p p l i c a b l e   t o   F o n t s   o r   F o n t   S o f t w a r e   t h a t   h a s   b e e n   m o d i f i e d   a n d   i s   d i s t r i b u t e d   u n d e r   t h e   " B i t s t r e a m   V e r a "   n a m e s . 
 
 T h e   F o n t   S o f t w a r e   m a y   b e   s o l d   a s   p a r t   o f   a   l a r g e r   s o f t w a r e   p a c k a g e   b u t   n o   c o p y   o f   o n e   o r   m o r e   o f   t h e   F o n t   S o f t w a r e   t y p e f a c e s   m a y   b e   s o l d   b y   i t s e l f . 
 
 T H E   F O N T   S O F T W A R E   I S   P R O V I D E D   " A S   I S " ,   W I T H O U T   W A R R A N T Y   O F   A N Y   K I N D ,   E X P R E S S   O R   I M P L I E D ,   I N C L U D I N G   B U T   N O T   L I M I T E D   T O   A N Y   W A R R A N T I E S   O F   M E R C H A N T A B I L I T Y ,   F I T N E S S   F O R   A   P A R T I C U L A R   P U R P O S E   A N D   N O N I N F R I N G E M E N T   O F   C O P Y R I G H T ,   P A T E N T ,   T R A D E M A R K ,   O R   O T H E R   R I G H T .   I N   N O   E V E N T   S H A L L   B I T S T R E A M   O R   T H E   G N O M E   F O U N D A T I O N   B E   L I A B L E   F O R   A N Y   C L A I M ,   D A M A G E S   O R   O T H E R   L I A B I L I T Y ,   I N C L U D I N G   A N Y   G E N E R A L ,   S P E C I A L ,   I N D I R E C T ,   I N C I D E N T A L ,   O R   C O N S E Q U E N T I A L   D A M A G E S ,   W H E T H E R   I N   A N   A C T I O N   O F   C O N T R A C T ,   T O R T   O R   O T H E R W I S E ,   A R I S I N G   F R O M ,   O U T   O F   T H E   U S E   O R   I N A B I L I T Y   T O   U S E   T H E   F O N T   S O F T W A R E   O R   F R O M   O T H E R   D E A L I N G S   I N   T H E   F O N T   S O F T W A R E . 
 
 E x c e p t   a s   c o n t a i n e d   i n   t h i s   n o t i c e ,   t h e   n a m e s   o f   G n o m e ,   t h e   G n o m e   F o u n d a t i o n ,   a n d   B i t s t r e a m   I n c . ,   s h a l l   n o t   b e   u s e d   i n   a d v e r t i s i n g   o r   o t h e r w i s e   t o   p r o m o t e   t h e   s a l e ,   u s e   o r   o t h e r   d e a l i n g s   i n   t h i s   F o n t   S o f t w a r e   w i t h o u t   p r i o r   w r i t t e n   a u t h o r i z a t i o n   f r o m   t h e   G n o m e   F o u n d a t i o n   o r   B i t s t r e a m   I n c . ,   r e s p e c t i v e l y .   F o r   f u r t h e r   i n f o r m a t i o n ,   c o n t a c t :   f o n t s   a t   g n o m e   d o t   o r g .   
  Fonts are (c) Bitstream (see below). DejaVu changes are in public domain.

Bitstream Vera Fonts Copyright
------------------------------

Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. Bitstream Vera is a trademark of Bitstream, Inc.

Permission is hereby granted, free of charge, to any person obtaining a copy of the fonts accompanying this license ("Fonts") and associated documentation files (the "Font Software"), to reproduce and distribute the Font Software, including without limitation the rights to use, copy, merge, publish, distribute, and/or sell copies of the Font Software, and to permit persons to whom the Font Software is furnished to do so, subject to the following conditions:

The above copyright and trademark notices and this permission notice shall be included in all copies of one or more of the Font Software typefaces.

The Font Software may be modified, altered, or added to, and in particular the designs of glyphs or characters in the Fonts may be modified and additional glyphs or  or characters may be added to the Fonts, only if the fonts are renamed to names not containing either the words "Bitstream" or the word "Vera".

This License becomes null and void to the extent applicable to Fonts or Font Software that has been modified and is distributed under the "Bitstream Vera" names.

The Font Software may be sold as part of a larger software package but no copy of one or more of the Font Software typefaces may be sold by itself.

THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL BITSTREAM OR THE GNOME FOUNDATION BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE.

Except as contained in this notice, the names of Gnome, the Gnome Foundation, and Bitstream Inc., shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Font Software without prior written authorization from the Gnome Foundation or Bitstream Inc., respectively. For further information, contact: fonts at gnome dot org. 
  h t t p : / / d e j a v u . s o u r c e f o r g e . n e t / w i k i / i n d e x . p h p / L i c e n s e  http://dejavu.sourceforge.net/wiki/index.php/License           ~ Z                   1           	 
                        ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a                                    b c  d  e        f     g      h    j i k m l n  o q p r s u t v w  x z y { } |    ~       	
     !"#$%&'()*+  ,-./0123456789:  ;<=>?@ABCDEFGHI  JKLMNOPQRS    TUVWXYZ[\]^_`abcdefghi jklm  nopqrstuvwxyz{|}~  	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~         	
  !"#$%&'()*+,-./0 123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ 	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ 	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ 	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ 	
 !"#$%&'()*+,-./0123456789:;<=>?  @AB   C   D   E F GHIJKLM  NOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~   	
 !"#$%&'()*+,-. /01 23456789 :  ;<=>? @AB CDEFGHI JKLMNOPQRSTUVWXYZ[\ ]^_`abcdefghijklmnopqrs tuv  wxyz{|}~	 											
																						 	!	"	#	$	%	&	'	(	)	*	+	,	-	.	/	0	1	2	3	4	5	6	7	8	9	:	;	<	=	>	?	@	A	B	C	D	E	F	G	H	I	J	K	L	M	N	O	P	Q	R	S	T	U	V	W	X	Y	Z	[	\	]	^	_	`	a	b	c	d	e	f	g	h	i	j	k	l	m	n	o	p	q	r	s	t	u	v	w	x	y	z	{	|	}	~																																																																																																																																	
 








	























 
!
"
#
$
% 
&
'
(
)
*
+
,
-
.
/
0
1
2
3
4
5
6
7
8
9
:
;
<
=
>
?
@
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
[
\
]
^
_
`
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
{
|
}
~
































































































































 	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~   	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ 	
 !"#$%&'()*+,-./012	sfthyphenAmacronamacronAbreveabreveAogonekaogonekCcircumflexccircumflex
Cdotaccent
cdotaccentDcarondcaronDcroatEmacronemacronEbreveebreve
Edotaccent
edotaccentEogonekeogonekEcaronecaronGcircumflexgcircumflex
Gdotaccent
gdotaccentGcommaaccentgcommaaccentHcircumflexhcircumflexHbarhbarItildeitildeImacronimacronIbreveibreveIogonekiogonekIJijJcircumflexjcircumflexKcommaaccentkcommaaccentkgreenlandicLacutelacuteLcommaaccentlcommaaccentLcaronlcaronLdotldotNacutenacuteNcommaaccentncommaaccentNcaronncaronnapostropheEngengOmacronomacronObreveobreveOhungarumlautohungarumlautRacuteracuteRcommaaccentrcommaaccentRcaronrcaronSacutesacuteScircumflexscircumflexTcommaaccenttcommaaccentTcarontcaronTbartbarUtildeutildeUmacronumacronUbreveubreveUringuringUhungarumlautuhungarumlautUogonekuogonekWcircumflexwcircumflexYcircumflexycircumflexZacutezacute
Zdotaccent
zdotaccentlongsuni0180uni0181uni0182uni0183uni0184uni0185uni0186uni0187uni0188uni0189uni018Auni018Buni018Cuni018Duni018Euni018Funi0190uni0191uni0193uni0194uni0195uni0196uni0197uni0198uni0199uni019Auni019Buni019Cuni019Duni019Euni019FOhornohornuni01A2uni01A3uni01A4uni01A5uni01A6uni01A7uni01A8uni01A9uni01AAuni01ABuni01ACuni01ADuni01AEUhornuhornuni01B1uni01B2uni01B3uni01B4uni01B5uni01B6uni01B7uni01B8uni01B9uni01BAuni01BBuni01BCuni01BDuni01BEuni01BFuni01C0uni01C1uni01C2uni01C3uni01CDuni01CEuni01CFuni01D0uni01D1uni01D2uni01D3uni01D4uni01D5uni01D6uni01D7uni01D8uni01D9uni01DAuni01DBuni01DCuni01DDuni01DEuni01DFuni01E0uni01E1uni01E2uni01E3Gcarongcaronuni01E8uni01E9uni01EAuni01EBuni01ECuni01EDuni01EEuni01EFuni01F0uni01F4uni01F5uni01F6uni01F8uni01F9AEacuteaeacuteOslashacuteoslashacuteuni0200uni0201uni0202uni0203uni0204uni0205uni0206uni0207uni0208uni0209uni020Auni020Buni020Cuni020Duni020Euni020Funi0210uni0211uni0212uni0213uni0214uni0215uni0216uni0217Scommaaccentscommaaccentuni021Auni021Buni021Cuni021Duni021Euni021Funi0220uni0221uni0224uni0225uni0226uni0227uni0228uni0229uni022Auni022Buni022Cuni022Duni022Euni022Funi0230uni0231uni0232uni0233uni0234uni0235uni0236dotlessjuni0238uni0239uni023Auni023Buni023Cuni023Duni023Euni023Funi0240uni0241uni0243uni0244uni0245uni024Cuni024Duni0250uni0251uni0252uni0253uni0254uni0255uni0256uni0257uni0258uni0259uni025Auni025Buni025Cuni025Duni025Euni025Funi0260uni0261uni0262uni0263uni0264uni0265uni0266uni0267uni0268uni0269uni026Auni026Buni026Cuni026Duni026Euni026Funi0270uni0271uni0272uni0273uni0274uni0275uni0276uni0277uni0278uni0279uni027Auni027Buni027Cuni027Duni027Euni027Funi0280uni0281uni0282uni0283uni0284uni0285uni0286uni0287uni0288uni0289uni028Auni028Buni028Cuni028Duni028Euni028Funi0290uni0291uni0292uni0293uni0294uni0295uni0296uni0297uni0298uni0299uni029Auni029Buni029Cuni029Duni029Euni029Funi02A0uni02A1uni02A2uni02A3uni02A4uni02A5uni02A6uni02A7uni02A8uni02A9uni02AAuni02ABuni02ACuni02ADuni02AEuni02AFuni02B0uni02B1uni02B2uni02B3uni02B4uni02B5uni02B6uni02B7uni02B8uni02B9uni02BBuni02BCuni02BDuni02BEuni02BFuni02C0uni02C1uni02C8uni02C9uni02CCuni02CDuni02CEuni02CFuni02D0uni02D1uni02D2uni02D3uni02D6uni02D7uni02DEuni02E0uni02E1uni02E2uni02E3uni02E4uni02E5uni02E6uni02E7uni02E8uni02E9uni02EEuni02F3	gravecomb	acutecombuni0302	tildecombuni0304uni0305uni0306uni0307uni0308hookabovecombuni030Auni030Buni030Cuni030Duni030Euni030Funi0310uni0311uni0312uni0313uni0314uni0315uni0316uni0317uni0318uni0319uni031Auni031Buni031Cuni031Duni031Euni031Funi0320uni0321uni0322dotbelowcombuni0324uni0325uni0326uni0327uni0328uni0329uni032Auni032Buni032Cuni032Duni032Euni032Funi0330uni0331uni0332uni0333uni0334uni0335uni0336uni0337uni0338uni0339uni033Auni033Buni033Cuni033Duni033Euni033Funi0343uni0358uni0361uni0374uni0375uni0376uni0377uni037Auni037Buni037Cuni037Duni037Euni037Ftonosdieresistonos
Alphatonos	anoteleiaEpsilontonosEtatonos	IotatonosOmicrontonosUpsilontonos
OmegatonosiotadieresistonosAlphaBetaGammauni0394EpsilonZetaEtaThetaIotaKappaLambdaMuNuXiOmicronPiRhoSigmaTauUpsilonPhiChiPsiIotadieresisUpsilondieresis
alphatonosepsilontonosetatonos	iotatonosupsilondieresistonosalphabetagammadeltaepsilonzetaetathetaiotakappalambdauni03BCnuxiomicronrhosigma1sigmatauupsilonphichipsiomegaiotadieresisupsilondieresisomicrontonosupsilontonos
omegatonosuni03D0theta1Upsilon1uni03D3uni03D4phi1omega1uni03D7uni03D8uni03D9uni03DAuni03DBuni03DCuni03DDuni03DEuni03DFuni03E0uni03E1uni03F0uni03F1uni03F2uni03F3uni03F4uni03F5uni03F6uni03F7uni03F8uni03F9uni03FAuni03FBuni03FCuni03FDuni03FEuni03FFuni0400uni0401uni0402uni0403uni0404uni0405uni0406uni0407uni0408uni0409uni040Auni040Buni040Cuni040Duni040Euni040Funi0410uni0411uni0412uni0413uni0414uni0415uni0416uni0417uni0418uni0419uni041Auni041Buni041Cuni041Duni041Euni041Funi0420uni0421uni0422uni0423uni0424uni0425uni0426uni0427uni0428uni0429uni042Auni042Buni042Cuni042Duni042Euni042Funi0430uni0431uni0432uni0433uni0434uni0435uni0436uni0437uni0438uni0439uni043Auni043Buni043Cuni043Duni043Euni043Funi0440uni0441uni0442uni0443uni0444uni0445uni0446uni0447uni0448uni0449uni044Auni044Buni044Cuni044Duni044Euni044Funi0450uni0451uni0452uni0453uni0454uni0455uni0456uni0457uni0458uni0459uni045Auni045Buni045Cuni045Duni045Euni045Funi0462uni0463uni0472uni0473uni0490uni0491uni0492uni0493uni0494uni0495uni0496uni0497uni0498uni0499uni049Auni049Buni04A2uni04A3uni04A4uni04A5uni04AAuni04ABuni04ACuni04ADuni04AEuni04AFuni04B0uni04B1uni04B2uni04B3uni04BAuni04BBuni04C0uni04C1uni04C2uni04C3uni04C4uni04C7uni04C8uni04CBuni04CCuni04CFuni04D0uni04D1uni04D2uni04D3uni04D4uni04D5uni04D6uni04D7uni04D8uni04D9uni04DAuni04DBuni04DCuni04DDuni04DEuni04DFuni04E0uni04E1uni04E2uni04E3uni04E4uni04E5uni04E6uni04E7uni04E8uni04E9uni04EAuni04EBuni04ECuni04EDuni04EEuni04EFuni04F0uni04F1uni04F2uni04F3uni04F4uni04F5uni04F6uni04F7uni04F8uni04F9uni0510uni0511uni051Auni051Buni051Cuni051Duni0531uni0532uni0533uni0534uni0535uni0536uni0537uni0538uni0539uni053Auni053Buni053Cuni053Duni053Euni053Funi0540uni0541uni0542uni0543uni0544uni0545uni0546uni0547uni0548uni0549uni054Auni054Buni054Cuni054Duni054Euni054Funi0550uni0551uni0552uni0553uni0554uni0555uni0556uni0559uni055Auni055Buni055Cuni055Duni055Euni055Funi0561uni0562uni0563uni0564uni0565uni0566uni0567uni0568uni0569uni056Auni056Buni056Cuni056Duni056Euni056Funi0570uni0571uni0572uni0573uni0574uni0575uni0576uni0577uni0578uni0579uni057Auni057Buni057Cuni057Duni057Euni057Funi0580uni0581uni0582uni0583uni0584uni0585uni0586uni0587uni0589uni058Auni0606uni0607uni0609uni060Auni060Cuni0615uni061Buni061Funi0621uni0622uni0623uni0624uni0625uni0626uni0627uni0628uni0629uni062Auni062Buni062Cuni062Duni062Euni062Funi0630uni0631uni0632uni0633uni0634uni0635uni0636uni0637uni0638uni0639uni063Auni0640uni0641uni0642uni0643uni0644uni0645uni0646uni0647uni0648uni0649uni064Auni064Buni064Cuni064Duni064Euni064Funi0650uni0651uni0652uni0653uni0654uni0655uni065Auni0660uni0661uni0662uni0663uni0664uni0665uni0666uni0667uni0668uni0669uni066Auni066Buni066Cuni066Duni0674uni0679uni067Auni067Buni067Euni067Funi0680uni0683uni0684uni0686uni0687uni0691uni0698uni06A4uni06A9uni06AFuni06BEuni06CCuni06F0uni06F1uni06F2uni06F3uni06F4uni06F5uni06F6uni06F7uni06F8uni06F9uni0E3Funi0E81uni0E82uni0E84uni0E87uni0E88uni0E8Auni0E8Duni0E94uni0E95uni0E96uni0E97uni0E99uni0E9Auni0E9Buni0E9Cuni0E9Duni0E9Euni0E9Funi0EA1uni0EA2uni0EA3uni0EA5uni0EA7uni0EAAuni0EABuni0EADuni0EAEuni0EAFuni0EB0uni0EB1uni0EB2uni0EB3uni0EB4uni0EB5uni0EB6uni0EB7uni0EB8uni0EB9uni0EBBuni0EBCuni0EC8uni0EC9uni0ECAuni0ECBuni0ECCuni0ECDuni10D0uni10D1uni10D2uni10D3uni10D4uni10D5uni10D6uni10D7uni10D8uni10D9uni10DAuni10DBuni10DCuni10DDuni10DEuni10DFuni10E0uni10E1uni10E2uni10E3uni10E4uni10E5uni10E6uni10E7uni10E8uni10E9uni10EAuni10EBuni10ECuni10EDuni10EEuni10EFuni10F0uni10F1uni10F2uni10F3uni10F4uni10F5uni10F6uni10F7uni10F8uni10F9uni10FAuni10FBuni10FCuni1D02uni1D08uni1D09uni1D14uni1D16uni1D17uni1D1Duni1D1Euni1D1Funi1D2Cuni1D2Duni1D2Euni1D30uni1D31uni1D32uni1D33uni1D34uni1D35uni1D36uni1D37uni1D38uni1D39uni1D3Auni1D3Buni1D3Cuni1D3Euni1D3Funi1D40uni1D41uni1D42uni1D43uni1D44uni1D45uni1D46uni1D47uni1D48uni1D49uni1D4Auni1D4Buni1D4Cuni1D4Duni1D4Euni1D4Funi1D50uni1D51uni1D52uni1D53uni1D54uni1D55uni1D56uni1D57uni1D58uni1D59uni1D5Auni1D5Buni1D62uni1D63uni1D64uni1D65uni1D77uni1D78uni1D7Buni1D85uni1D9Buni1D9Cuni1D9Duni1D9Euni1D9Funi1DA0uni1DA1uni1DA2uni1DA3uni1DA4uni1DA5uni1DA6uni1DA7uni1DA8uni1DA9uni1DAAuni1DABuni1DACuni1DADuni1DAEuni1DAFuni1DB0uni1DB1uni1DB2uni1DB3uni1DB4uni1DB5uni1DB6uni1DB7uni1DB9uni1DBAuni1DBBuni1DBCuni1DBDuni1DBEuni1DBFuni1E00uni1E01uni1E02uni1E03uni1E04uni1E05uni1E06uni1E07uni1E08uni1E09uni1E0Auni1E0Buni1E0Cuni1E0Duni1E0Euni1E0Funi1E10uni1E11uni1E12uni1E13uni1E18uni1E19uni1E1Auni1E1Buni1E1Cuni1E1Duni1E1Euni1E1Funi1E20uni1E21uni1E22uni1E23uni1E24uni1E25uni1E26uni1E27uni1E28uni1E29uni1E2Auni1E2Buni1E2Cuni1E2Duni1E30uni1E31uni1E32uni1E33uni1E34uni1E35uni1E36uni1E37uni1E38uni1E39uni1E3Auni1E3Buni1E3Cuni1E3Duni1E3Euni1E3Funi1E40uni1E41uni1E42uni1E43uni1E44uni1E45uni1E46uni1E47uni1E48uni1E49uni1E4Auni1E4Buni1E4Cuni1E4Duni1E54uni1E55uni1E56uni1E57uni1E58uni1E59uni1E5Auni1E5Buni1E5Cuni1E5Duni1E5Euni1E5Funi1E60uni1E61uni1E62uni1E63uni1E68uni1E69uni1E6Auni1E6Buni1E6Cuni1E6Duni1E6Euni1E6Funi1E70uni1E71uni1E72uni1E73uni1E74uni1E75uni1E76uni1E77uni1E78uni1E79uni1E7Cuni1E7Duni1E7Euni1E7FWgravewgraveWacutewacute	Wdieresis	wdieresisuni1E86uni1E87uni1E88uni1E89uni1E8Auni1E8Buni1E8Cuni1E8Duni1E8Euni1E8Funi1E90uni1E91uni1E92uni1E93uni1E94uni1E95uni1E96uni1E97uni1E98uni1E99uni1E9Buni1E9Funi1EA0uni1EA1uni1EACuni1EADuni1EB0uni1EB1uni1EB6uni1EB7uni1EB8uni1EB9uni1EBCuni1EBDuni1EC6uni1EC7uni1ECAuni1ECBuni1ECCuni1ECDuni1ED8uni1ED9uni1EDAuni1EDBuni1EDCuni1EDDuni1EE0uni1EE1uni1EE2uni1EE3uni1EE4uni1EE5uni1EE8uni1EE9uni1EEAuni1EEBuni1EEEuni1EEFuni1EF0uni1EF1Ygraveygraveuni1EF4uni1EF5uni1EF8uni1EF9uni1F00uni1F01uni1F02uni1F03uni1F04uni1F05uni1F06uni1F07uni1F08uni1F09uni1F0Auni1F0Buni1F0Cuni1F0Duni1F0Euni1F0Funi1F10uni1F11uni1F12uni1F13uni1F14uni1F15uni1F18uni1F19uni1F1Auni1F1Buni1F1Cuni1F1Duni1F20uni1F21uni1F22uni1F23uni1F24uni1F25uni1F26uni1F27uni1F28uni1F29uni1F2Auni1F2Buni1F2Cuni1F2Duni1F2Euni1F2Funi1F30uni1F31uni1F32uni1F33uni1F34uni1F35uni1F36uni1F37uni1F38uni1F39uni1F3Auni1F3Buni1F3Cuni1F3Duni1F3Euni1F3Funi1F40uni1F41uni1F42uni1F43uni1F44uni1F45uni1F48uni1F49uni1F4Auni1F4Buni1F4Cuni1F4Duni1F50uni1F51uni1F52uni1F53uni1F54uni1F55uni1F56uni1F57uni1F59uni1F5Buni1F5Duni1F5Funi1F60uni1F61uni1F62uni1F63uni1F64uni1F65uni1F66uni1F67uni1F68uni1F69uni1F6Auni1F6Buni1F6Cuni1F6Duni1F6Euni1F6Funi1F70uni1F71uni1F72uni1F73uni1F74uni1F75uni1F76uni1F77uni1F78uni1F79uni1F7Auni1F7Buni1F7Cuni1F7Duni1F80uni1F81uni1F82uni1F83uni1F84uni1F85uni1F86uni1F87uni1F88uni1F89uni1F8Auni1F8Buni1F8Cuni1F8Duni1F8Euni1F8Funi1F90uni1F91uni1F92uni1F93uni1F94uni1F95uni1F96uni1F97uni1F98uni1F99uni1F9Auni1F9Buni1F9Cuni1F9Duni1F9Euni1F9Funi1FA0uni1FA1uni1FA2uni1FA3uni1FA4uni1FA5uni1FA6uni1FA7uni1FA8uni1FA9uni1FAAuni1FABuni1FACuni1FADuni1FAEuni1FAFuni1FB0uni1FB1uni1FB2uni1FB3uni1FB4uni1FB6uni1FB7uni1FB8uni1FB9uni1FBAuni1FBBuni1FBCuni1FBDuni1FBEuni1FBFuni1FC0uni1FC1uni1FC2uni1FC3uni1FC4uni1FC6uni1FC7uni1FC8uni1FC9uni1FCAuni1FCBuni1FCCuni1FCDuni1FCEuni1FCFuni1FD0uni1FD1uni1FD2uni1FD3uni1FD6uni1FD7uni1FD8uni1FD9uni1FDAuni1FDBuni1FDDuni1FDEuni1FDFuni1FE0uni1FE1uni1FE2uni1FE3uni1FE4uni1FE5uni1FE6uni1FE7uni1FE8uni1FE9uni1FEAuni1FEBuni1FECuni1FEDuni1FEEuni1FEFuni1FF2uni1FF3uni1FF4uni1FF6uni1FF7uni1FF8uni1FF9uni1FFAuni1FFBuni1FFCuni1FFDuni1FFEuni2000uni2001uni2002uni2003uni2004uni2005uni2006uni2007uni2008uni2009uni200Auni2010uni2011
figuredashuni2015uni2016underscoredblquotereverseduni201Funi2023uni202Funi2031minuteseconduni2034uni2035uni2036uni2037	exclamdbluni203Duni203Euni203Funi2045uni2046uni2047uni2048uni2049uni204Buni205Funi2070uni2071uni2074uni2075uni2076uni2077uni2078uni2079uni207Auni207Buni207Cuni207Duni207Euni207Funi2080uni2081uni2082uni2083uni2084uni2085uni2086uni2087uni2088uni2089uni208Auni208Buni208Cuni208Duni208Euni2090uni2091uni2092uni2093uni2094uni2095uni2096uni2097uni2098uni2099uni209Auni209Buni209Cuni20A0colonmonetaryuni20A2lirauni20A5uni20A6pesetauni20A8uni20A9uni20AAdongEurouni20ADuni20AEuni20AFuni20B0uni20B1uni20B2uni20B3uni20B4uni20B5uni20B8uni20B9uni20BAuni20BDuni2102uni2105uni210Duni210Euni210Funi2115uni2116uni2117uni2119uni211Auni211Duni2124uni2126uni212Auni212B	estimateduni2148uni2150uni2151onethird	twothirdsuni2155uni2156uni2157uni2158uni2159uni215A	oneeighththreeeighthsfiveeighthsseveneighthsuni215Funi2189	arrowleftarrowup
arrowright	arrowdown	arrowboth	arrowupdnuni2196uni2197uni2198uni2199uni219Auni219Buni219Cuni219Duni219Euni219Funi21A0uni21A1uni21A2uni21A3uni21A4uni21A5uni21A6uni21A7arrowupdnbseuni21A9uni21AAuni21ABuni21ACuni21ADuni21AEuni21AFuni21B0uni21B1uni21B2uni21B3uni21B4carriagereturnuni21B6uni21B7uni21B8uni21B9uni21BAuni21BBuni21BCuni21BDuni21BEuni21BFuni21C0uni21C1uni21C2uni21C3uni21C4uni21C5uni21C6uni21C7uni21C8uni21C9uni21CAuni21CBuni21CCuni21CDuni21CEuni21CFarrowdblleft
arrowdbluparrowdblrightarrowdbldownarrowdblbothuni21D5uni21D6uni21D7uni21D8uni21D9uni21DAuni21DBuni21DCuni21DDuni21DEuni21DFuni21E0uni21E1uni21E2uni21E3uni21E4uni21E5uni21E6uni21E7uni21E8uni21E9uni21EAuni21EBuni21ECuni21EDuni21EEuni21EFuni21F0uni21F1uni21F2uni21F3uni21F4uni21F5uni21F6uni21F7uni21F8uni21F9uni21FAuni21FBuni21FCuni21FDuni21FEuni21FF	universaluni2201existentialuni2204emptysetgradientelement
notelementuni220Asuchthatuni220Cuni220Duni220Euni2210uni2213uni2215asteriskmathuni2218uni2219uni221Buni221Cproportional
orthogonalangleuni2223
logicaland	logicalorintersectionunionuni222Cuni222D	thereforeuni2235uni2236uni2237uni2238uni2239uni223Auni223Bsimilaruni223Duni2241uni2242uni2243uni2244	congruentuni2246uni2247uni2249uni224Auni224Buni224Cuni224Duni224Euni224Funi2250uni2251uni2252uni2253uni2254uni2255uni2256uni2257uni2258uni2259uni225Auni225Buni225Cuni225Duni225Euni225Fequivalenceuni2262uni2263uni2266uni2267uni2268uni2269uni226Duni226Euni226Funi2270uni2271uni2272uni2273uni2274uni2275uni2276uni2277uni2278uni2279uni227Auni227Buni227Cuni227Duni227Euni227Funi2280uni2281propersubsetpropersuperset	notsubsetuni2285reflexsubsetreflexsupersetuni2288uni2289uni228Auni228Buni228Duni228Euni228Funi2290uni2291uni2292uni2293uni2294
circleplusuni2296circlemultiplyuni2298uni2299uni229Auni229Buni229Cuni229Duni229Euni229Funi22A0uni22A1uni22A2uni22A3uni22A4perpendicularuni22B2uni22B3uni22B4uni22B5uni22B8uni22C2uni22C3uni22C4dotmathuni22C6uni22CDuni22CEuni22CFuni22D0uni22D1uni22DAuni22DBuni22DCuni22DDuni22DEuni22DFuni22E0uni22E1uni22E2uni22E3uni22E4uni22E5uni22E6uni22E7uni22E8uni22E9uni22EFuni2300uni2301houseuni2303uni2304uni2305uni2306uni2308uni2309uni230Auni230Buni230Cuni230Duni230Euni230Frevlogicalnotuni2311uni2312uni2313uni2314uni2315uni2318uni2319uni231Cuni231Duni231Euni231F
integraltp
integralbtuni2325uni2326uni2327uni2328uni232Buni2335uni2336uni2337uni2338uni2339uni233Auni233Buni233Cuni233Duni233Euni233Funi2340uni2341uni2342uni2343uni2344uni2345uni2346uni2347uni2348uni2349uni234Auni234Buni234Cuni234Duni234Euni234Funi2350uni2351uni2352uni2353uni2354uni2355uni2356uni2357uni2358uni2359uni235Auni235Buni235Cuni235Duni235Euni235Funi2360uni2361uni2362uni2363uni2364uni2365uni2366uni2367uni2368uni2369uni236Auni236Buni236Cuni236Duni236Euni236Funi2370uni2371uni2372uni2373uni2374uni2375uni2376uni2377uni2378uni2379uni237Auni237Duni2380uni2381uni2382uni2383uni2388uni2389uni238Auni238Buni2395uni239Buni239Cuni239Duni239Euni239Funi23A0uni23A1uni23A2uni23A3uni23A4uni23A5uni23A6uni23A7uni23A8uni23A9uni23AAuni23ABuni23ACuni23ADuni23AEuni23CEuni23CFuni2423SF100000uni2501SF110000uni2503uni2504uni2505uni2506uni2507uni2508uni2509uni250Auni250BSF010000uni250Duni250Euni250FSF030000uni2511uni2512uni2513SF020000uni2515uni2516uni2517SF040000uni2519uni251Auni251BSF080000uni251Duni251Euni251Funi2520uni2521uni2522uni2523SF090000uni2525uni2526uni2527uni2528uni2529uni252Auni252BSF060000uni252Duni252Euni252Funi2530uni2531uni2532uni2533SF070000uni2535uni2536uni2537uni2538uni2539uni253Auni253BSF050000uni253Duni253Euni253Funi2540uni2541uni2542uni2543uni2544uni2545uni2546uni2547uni2548uni2549uni254Auni254Buni254Cuni254Duni254Euni254FSF430000SF240000SF510000SF520000SF390000SF220000SF210000SF250000SF500000SF490000SF380000SF280000SF270000SF260000SF360000SF370000SF420000SF190000SF200000SF230000SF470000SF480000SF410000SF450000SF460000SF400000SF540000SF530000SF440000uni256Duni256Euni256Funi2570uni2571uni2572uni2573uni2574uni2575uni2576uni2577uni2578uni2579uni257Auni257Buni257Cuni257Duni257Euni257Fupblockuni2581uni2582uni2583dnblockuni2585uni2586uni2587blockuni2589uni258Auni258Blfblockuni258Duni258Euni258Frtblockltshadeshadedkshadeuni2594uni2595uni2596uni2597uni2598uni2599uni259Auni259Buni259Cuni259Duni259Euni259F	filledboxH22073uni25A2uni25A3uni25A4uni25A5uni25A6uni25A7uni25A8uni25A9H18543H18551
filledrectuni25ADuni25AEuni25AFuni25B0uni25B1triagupuni25B3uni25B4uni25B5uni25B6uni25B7uni25B8uni25B9triagrtuni25BBtriagdnuni25BDuni25BEuni25BFuni25C0uni25C1uni25C2uni25C3triaglfuni25C5uni25C6uni25C7uni25C8uni25C9circleuni25CCuni25CDuni25CEH18533uni25D0uni25D1uni25D2uni25D3uni25D4uni25D5uni25D6uni25D7	invbullet	invcircleuni25DAuni25DBuni25DCuni25DDuni25DEuni25DFuni25E0uni25E1uni25E2uni25E3uni25E4uni25E5
openbulletuni25E7uni25E8uni25E9uni25EAuni25EBuni25ECuni25EDuni25EEuni25EFuni25F0uni25F1uni25F2uni25F3uni25F4uni25F5uni25F6uni25F7uni25F8uni25F9uni25FAuni25FBuni25FCuni25FDuni25FEuni25FFuni2600uni2601uni2602uni2603uni2604uni2605uni2606uni2607uni2608uni2609uni260Auni260Buni260Cuni260Duni260Euni260Funi2610uni2611uni2612uni2613uni2614uni2615uni2616uni2617uni2618uni2619uni261Auni261Buni261Cuni261Duni261Euni261Funi2620uni2621uni2622uni2623uni2624uni2625uni2626uni2627uni2628uni2629uni262Auni262Buni262Cuni262Duni262Euni262Funi2638uni2639	smilefaceinvsmilefacesununi263Duni263Euni263Ffemaleuni2641maleuni2643uni2644uni2645uni2646uni2647uni2648uni2649uni264Auni264Buni264Cuni264Duni264Euni264Funi2650uni2651uni2652uni2653uni2654uni2655uni2656uni2657uni2658uni2659uni265Auni265Buni265Cuni265Duni265Euni265Fspadeuni2661uni2662clubuni2664heartdiamonduni2667uni2668uni2669musicalnotemusicalnotedbluni266Cuni266Duni266Euni266Funi2670uni2671uni2672uni2673uni2674uni2675uni2676uni2677uni2678uni2679uni267Auni267Buni267Cuni267Duni267Euni267Funi2680uni2681uni2682uni2683uni2684uni2685uni2686uni2687uni2688uni2689uni268Auni268Buni2690uni2691uni2692uni2693uni2694uni2695uni2696uni2697uni2698uni2699uni269Auni269Buni269Cuni26A0uni26A1uni26B0uni26B1uni2701uni2702uni2703uni2704uni2706uni2707uni2708uni2709uni270Cuni270Duni270Euni270Funi2710uni2711uni2712uni2713uni2714uni2715uni2716uni2717uni2718uni2719uni271Auni271Buni271Cuni271Duni271Euni271Funi2720uni2721uni2722uni2723uni2724uni2725uni2726uni2727uni2729uni272Auni272Buni272Cuni272Duni272Euni272Funi2730uni2731uni2732uni2733uni2734uni2735uni2736uni2737uni2738uni2739uni273Auni273Buni273Cuni273Duni273Euni273Funi2740uni2741uni2742uni2743uni2744uni2745uni2746uni2747uni2748uni2749uni274Auni274Buni274Duni274Funi2750uni2751uni2752uni2756uni2758uni2759uni275Auni275Buni275Cuni275Duni275Euni2761uni2762uni2763uni2764uni2765uni2766uni2767uni2768uni2769uni276Auni276Buni276Cuni276Duni276Euni276Funi2770uni2771uni2772uni2773uni2774uni2775uni2794uni2798uni2799uni279Auni279Buni279Cuni279Duni279Euni279Funi27A0uni27A1uni27A2uni27A3uni27A4uni27A5uni27A6uni27A7uni27A8uni27A9uni27AAuni27ABuni27ACuni27ADuni27AEuni27AFuni27B1uni27B2uni27B3uni27B4uni27B5uni27B6uni27B7uni27B8uni27B9uni27BAuni27BBuni27BCuni27BDuni27BEuni27C2uni27C5uni27C6uni27DCuni27E0uni27E6uni27E7uni27E8uni27E9uni27EAuni27EBuni27F5uni27F6uni27F7uni2987uni2988uni2997uni2998uni29EBuni29FAuni29FBuni2A00uni2A2Funi2A6Auni2A6Buni2B05uni2B06uni2B07uni2B08uni2B09uni2B0Auni2B0Buni2B0Cuni2B0Duni2B12uni2B13uni2B14uni2B15uni2B16uni2B17uni2B18uni2B19uni2B1Auni2C64uni2C6Duni2C6Euni2C6Funi2C70uni2C75uni2C76uni2C77uni2C79uni2C7Auni2C7Cuni2C7Duni2C7Euni2C7Funi2E18uni2E1Funi2E22uni2E23uni2E24uni2E25uni2E2EuniA708uniA709uniA70AuniA70BuniA70CuniA70DuniA70EuniA70FuniA710uniA711uniA712uniA713uniA714uniA715uniA716uniA71BuniA71CuniA71DuniA71EuniA71FuniA722uniA723uniA724uniA725uniA726uniA727uniA789uniA78AuniA78BuniA78CuniA78DuniA78EuniA790uniA791uniA7AAuniA7F8uniA7F9uniF6C5uniFB52uniFB53uniFB54uniFB55uniFB56uniFB57uniFB58uniFB59uniFB5AuniFB5BuniFB5CuniFB5DuniFB5EuniFB5FuniFB60uniFB61uniFB62uniFB63uniFB64uniFB65uniFB66uniFB67uniFB68uniFB69uniFB6AuniFB6BuniFB6CuniFB6DuniFB6EuniFB6FuniFB70uniFB71uniFB72uniFB73uniFB74uniFB75uniFB76uniFB77uniFB78uniFB79uniFB7AuniFB7BuniFB7CuniFB7DuniFB7EuniFB7FuniFB80uniFB81uniFB8AuniFB8BuniFB8CuniFB8DuniFB8EuniFB8FuniFB90uniFB91uniFB92uniFB93uniFB94uniFB95uniFB9EuniFB9FuniFBAAuniFBABuniFBACuniFBADuniFBE8uniFBE9uniFBFCuniFBFDuniFBFEuniFBFFuniFE70uniFE71uniFE72uniFE73uniFE74uniFE76uniFE77uniFE78uniFE79uniFE7AuniFE7BuniFE7CuniFE7DuniFE7EuniFE7FuniFE80uniFE81uniFE82uniFE83uniFE84uniFE85uniFE86uniFE87uniFE88uniFE89uniFE8AuniFE8BuniFE8CuniFE8DuniFE8EuniFE8FuniFE90uniFE91uniFE92uniFE93uniFE94uniFE95uniFE96uniFE97uniFE98uniFE99uniFE9AuniFE9BuniFE9CuniFE9DuniFE9EuniFE9FuniFEA0uniFEA1uniFEA2uniFEA3uniFEA4uniFEA5uniFEA6uniFEA7uniFEA8uniFEA9uniFEAAuniFEABuniFEACuniFEADuniFEAEuniFEAFuniFEB0uniFEB1uniFEB2uniFEB3uniFEB4uniFEB5uniFEB6uniFEB7uniFEB8uniFEB9uniFEBAuniFEBBuniFEBCuniFEBDuniFEBEuniFEBFuniFEC0uniFEC1uniFEC2uniFEC3uniFEC4uniFEC5uniFEC6uniFEC7uniFEC8uniFEC9uniFECAuniFECBuniFECCuniFECDuniFECEuniFECFuniFED0uniFED1uniFED2uniFED3uniFED4uniFED5uniFED6uniFED7uniFED8uniFED9uniFEDAuniFEDBuniFEDCuniFEDDuniFEDEuniFEDFuniFEE0uniFEE1uniFEE2uniFEE3uniFEE4uniFEE5uniFEE6uniFEE7uniFEE8uniFEE9uniFEEAuniFEEBuniFEECuniFEEDuniFEEEuniFEEFuniFEF0uniFEF1uniFEF2uniFEF3uniFEF4uniFEF5uniFEF6uniFEF7uniFEF8uniFEF9uniFEFAuniFEFBuniFEFCuniFEFFuniFFF9uniFFFAuniFFFBuniFFFCuniFFFDu1D55Au1D670u1D671u1D672u1D673u1D674u1D675u1D676u1D677u1D678u1D679u1D67Au1D67Bu1D67Cu1D67Du1D67Eu1D67Fu1D680u1D681u1D682u1D683u1D684u1D685u1D686u1D687u1D688u1D689u1D68Au1D68Bu1D68Cu1D68Du1D68Eu1D68Fu1D690u1D691u1D692u1D693u1D694u1D695u1D696u1D697u1D698u1D699u1D69Au1D69Bu1D69Cu1D69Du1D69Eu1D69Fu1D6A0u1D6A1u1D6A2u1D6A3u1D7F6u1D7F7u1D7F8u1D7F9u1D7FAu1D7FBu1D7FCu1D7FDu1D7FEu1D7FF	dlLtcaron	DiaeresisAcuteTildeGrave
CircumflexCaronfractionslashuni0311.caseuni0306.caseuni0307.caseuni030B.caseuni030F.casethinquestionuni0304.caseunderbarunderbar.wideunderbar.smalljotdiaeresis.symbols
arabic_dotarabic_2dotsarabic_3dotsuni066E.finauni06A1.inituni06A1.mediuni066F.finauni06A1.finaarabic_3dots_aarabic_2dots_aarabic_4dotsarabic_gaf_bararabic_gaf_bar_aarabic_ringEng.altuni066Euni066Funi067Cuni067Duni0681uni0682uni0685uni0692uni06A1uni06B5uni06BAuni06C6uni06CEuni06D5exclamdown.casequestiondown.caseuni2E18.case   ]A                  GA% }  %  2 
  	       %      %   @Y}2}Y&Y@&//2G@Gddkߖږ؍}:Ս:

ϊ̖ˋ%}Ś]%]@%AAdd@2(-}-d
..A]%]@%%%A%d%BSx~}~}}|{zwvutuu @ttss@rqponSonm(nSm(lk2ji2hgfedcbcb ba`_^Z^]d\[Z[ZYXWVUU2TSRQ}PONM-MLK(JIJ7ICIHEHGCGdFEFEDCD7CBCC@@	BABB @	A@AA@	@?@@@	?	??@@d>=-=<;(:9B9d818K76-65K404K3032B21-10/-/.	.-,--@	,,,@@+*%+*	*%):)('&%B%E$#""! -!} -KB BF-B- B-B @	@	
@		
@	 @7
	
	-:-: - d+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ StartFontMetrics 4.1
Notice Converted by PHP-font-lib
Comment https://github.com/PhenX/php-font-lib
EncodingScheme FontSpecific
FontName DejaVu Sans Mono
FontSubfamily Book
UniqueID DejaVu Sans Mono
FullName DejaVu Sans Mono
Version Version 2.37
PostScriptName DejaVuSansMono
Manufacturer DejaVu fonts team
FontVendorURL http://dejavu.sourceforge.net
LicenseURL http://dejavu.sourceforge.net/wiki/index.php/License
Weight Medium
ItalicAngle 0
IsFixedPitch true
UnderlineThickness 44
UnderlinePosition -63
FontHeightOffset 0
Ascender 928
Descender -236
FontBBox -558 -375 718 1028
StartCharMetrics 3377
U 32 ; WX 602 ; N space ; G 3
U 33 ; WX 602 ; N exclam ; G 4
U 34 ; WX 602 ; N quotedbl ; G 5
U 35 ; WX 602 ; N numbersign ; G 6
U 36 ; WX 602 ; N dollar ; G 7
U 37 ; WX 602 ; N percent ; G 8
U 38 ; WX 602 ; N ampersand ; G 9
U 39 ; WX 602 ; N quotesingle ; G 10
U 40 ; WX 602 ; N parenleft ; G 11
U 41 ; WX 602 ; N parenright ; G 12
U 42 ; WX 602 ; N asterisk ; G 13
U 43 ; WX 602 ; N plus ; G 14
U 44 ; WX 602 ; N comma ; G 15
U 45 ; WX 602 ; N hyphen ; G 16
U 46 ; WX 602 ; N period ; G 17
U 47 ; WX 602 ; N slash ; G 18
U 48 ; WX 602 ; N zero ; G 19
U 49 ; WX 602 ; N one ; G 20
U 50 ; WX 602 ; N two ; G 21
U 51 ; WX 602 ; N three ; G 22
U 52 ; WX 602 ; N four ; G 23
U 53 ; WX 602 ; N five ; G 24
U 54 ; WX 602 ; N six ; G 25
U 55 ; WX 602 ; N seven ; G 26
U 56 ; WX 602 ; N eight ; G 27
U 57 ; WX 602 ; N nine ; G 28
U 58 ; WX 602 ; N colon ; G 29
U 59 ; WX 602 ; N semicolon ; G 30
U 60 ; WX 602 ; N less ; G 31
U 61 ; WX 602 ; N equal ; G 32
U 62 ; WX 602 ; N greater ; G 33
U 63 ; WX 602 ; N question ; G 34
U 64 ; WX 602 ; N at ; G 35
U 65 ; WX 602 ; N A ; G 36
U 66 ; WX 602 ; N B ; G 37
U 67 ; WX 602 ; N C ; G 38
U 68 ; WX 602 ; N D ; G 39
U 69 ; WX 602 ; N E ; G 40
U 70 ; WX 602 ; N F ; G 41
U 71 ; WX 602 ; N G ; G 42
U 72 ; WX 602 ; N H ; G 43
U 73 ; WX 602 ; N I ; G 44
U 74 ; WX 602 ; N J ; G 45
U 75 ; WX 602 ; N K ; G 46
U 76 ; WX 602 ; N L ; G 47
U 77 ; WX 602 ; N M ; G 48
U 78 ; WX 602 ; N N ; G 49
U 79 ; WX 602 ; N O ; G 50
U 80 ; WX 602 ; N P ; G 51
U 81 ; WX 602 ; N Q ; G 52
U 82 ; WX 602 ; N R ; G 53
U 83 ; WX 602 ; N S ; G 54
U 84 ; WX 602 ; N T ; G 55
U 85 ; WX 602 ; N U ; G 56
U 86 ; WX 602 ; N V ; G 57
U 87 ; WX 602 ; N W ; G 58
U 88 ; WX 602 ; N X ; G 59
U 89 ; WX 602 ; N Y ; G 60
U 90 ; WX 602 ; N Z ; G 61
U 91 ; WX 602 ; N bracketleft ; G 62
U 92 ; WX 602 ; N backslash ; G 63
U 93 ; WX 602 ; N bracketright ; G 64
U 94 ; WX 602 ; N asciicircum ; G 65
U 95 ; WX 602 ; N underscore ; G 66
U 96 ; WX 602 ; N grave ; G 67
U 97 ; WX 602 ; N a ; G 68
U 98 ; WX 602 ; N b ; G 69
U 99 ; WX 602 ; N c ; G 70
U 100 ; WX 602 ; N d ; G 71
U 101 ; WX 602 ; N e ; G 72
U 102 ; WX 602 ; N f ; G 73
U 103 ; WX 602 ; N g ; G 74
U 104 ; WX 602 ; N h ; G 75
U 105 ; WX 602 ; N i ; G 76
U 106 ; WX 602 ; N j ; G 77
U 107 ; WX 602 ; N k ; G 78
U 108 ; WX 602 ; N l ; G 79
U 109 ; WX 602 ; N m ; G 80
U 110 ; WX 602 ; N n ; G 81
U 111 ; WX 602 ; N o ; G 82
U 112 ; WX 602 ; N p ; G 83
U 113 ; WX 602 ; N q ; G 84
U 114 ; WX 602 ; N r ; G 85
U 115 ; WX 602 ; N s ; G 86
U 116 ; WX 602 ; N t ; G 87
U 117 ; WX 602 ; N u ; G 88
U 118 ; WX 602 ; N v ; G 89
U 119 ; WX 602 ; N w ; G 90
U 120 ; WX 602 ; N x ; G 91
U 121 ; WX 602 ; N y ; G 92
U 122 ; WX 602 ; N z ; G 93
U 123 ; WX 602 ; N braceleft ; G 94
U 124 ; WX 602 ; N bar ; G 95
U 125 ; WX 602 ; N braceright ; G 96
U 126 ; WX 602 ; N asciitilde ; G 97
U 160 ; WX 602 ; N nbspace ; G 98
U 161 ; WX 602 ; N exclamdown ; G 99
U 162 ; WX 602 ; N cent ; G 100
U 163 ; WX 602 ; N sterling ; G 101
U 164 ; WX 602 ; N currency ; G 102
U 165 ; WX 602 ; N yen ; G 103
U 166 ; WX 602 ; N brokenbar ; G 104
U 167 ; WX 602 ; N section ; G 105
U 168 ; WX 602 ; N dieresis ; G 106
U 169 ; WX 602 ; N copyright ; G 107
U 170 ; WX 602 ; N ordfeminine ; G 108
U 171 ; WX 602 ; N guillemotleft ; G 109
U 172 ; WX 602 ; N logicalnot ; G 110
U 173 ; WX 602 ; N sfthyphen ; G 111
U 174 ; WX 602 ; N registered ; G 112
U 175 ; WX 602 ; N macron ; G 113
U 176 ; WX 602 ; N degree ; G 114
U 177 ; WX 602 ; N plusminus ; G 115
U 178 ; WX 602 ; N twosuperior ; G 116
U 179 ; WX 602 ; N threesuperior ; G 117
U 180 ; WX 602 ; N acute ; G 118
U 181 ; WX 602 ; N mu ; G 119
U 182 ; WX 602 ; N paragraph ; G 120
U 183 ; WX 602 ; N periodcentered ; G 121
U 184 ; WX 602 ; N cedilla ; G 122
U 185 ; WX 602 ; N onesuperior ; G 123
U 186 ; WX 602 ; N ordmasculine ; G 124
U 187 ; WX 602 ; N guillemotright ; G 125
U 188 ; WX 602 ; N onequarter ; G 126
U 189 ; WX 602 ; N onehalf ; G 127
U 190 ; WX 602 ; N threequarters ; G 128
U 191 ; WX 602 ; N questiondown ; G 129
U 192 ; WX 602 ; N Agrave ; G 130
U 193 ; WX 602 ; N Aacute ; G 131
U 194 ; WX 602 ; N Acircumflex ; G 132
U 195 ; WX 602 ; N Atilde ; G 133
U 196 ; WX 602 ; N Adieresis ; G 134
U 197 ; WX 602 ; N Aring ; G 135
U 198 ; WX 602 ; N AE ; G 136
U 199 ; WX 602 ; N Ccedilla ; G 137
U 200 ; WX 602 ; N Egrave ; G 138
U 201 ; WX 602 ; N Eacute ; G 139
U 202 ; WX 602 ; N Ecircumflex ; G 140
U 203 ; WX 602 ; N Edieresis ; G 141
U 204 ; WX 602 ; N Igrave ; G 142
U 205 ; WX 602 ; N Iacute ; G 143
U 206 ; WX 602 ; N Icircumflex ; G 144
U 207 ; WX 602 ; N Idieresis ; G 145
U 208 ; WX 602 ; N Eth ; G 146
U 209 ; WX 602 ; N Ntilde ; G 147
U 210 ; WX 602 ; N Ograve ; G 148
U 211 ; WX 602 ; N Oacute ; G 149
U 212 ; WX 602 ; N Ocircumflex ; G 150
U 213 ; WX 602 ; N Otilde ; G 151
U 214 ; WX 602 ; N Odieresis ; G 152
U 215 ; WX 602 ; N multiply ; G 153
U 216 ; WX 602 ; N Oslash ; G 154
U 217 ; WX 602 ; N Ugrave ; G 155
U 218 ; WX 602 ; N Uacute ; G 156
U 219 ; WX 602 ; N Ucircumflex ; G 157
U 220 ; WX 602 ; N Udieresis ; G 158
U 221 ; WX 602 ; N Yacute ; G 159
U 222 ; WX 602 ; N Thorn ; G 160
U 223 ; WX 602 ; N germandbls ; G 161
U 224 ; WX 602 ; N agrave ; G 162
U 225 ; WX 602 ; N aacute ; G 163
U 226 ; WX 602 ; N acircumflex ; G 164
U 227 ; WX 602 ; N atilde ; G 165
U 228 ; WX 602 ; N adieresis ; G 166
U 229 ; WX 602 ; N aring ; G 167
U 230 ; WX 602 ; N ae ; G 168
U 231 ; WX 602 ; N ccedilla ; G 169
U 232 ; WX 602 ; N egrave ; G 170
U 233 ; WX 602 ; N eacute ; G 171
U 234 ; WX 602 ; N ecircumflex ; G 172
U 235 ; WX 602 ; N edieresis ; G 173
U 236 ; WX 602 ; N igrave ; G 174
U 237 ; WX 602 ; N iacute ; G 175
U 238 ; WX 602 ; N icircumflex ; G 176
U 239 ; WX 602 ; N idieresis ; G 177
U 240 ; WX 602 ; N eth ; G 178
U 241 ; WX 602 ; N ntilde ; G 179
U 242 ; WX 602 ; N ograve ; G 180
U 243 ; WX 602 ; N oacute ; G 181
U 244 ; WX 602 ; N ocircumflex ; G 182
U 245 ; WX 602 ; N otilde ; G 183
U 246 ; WX 602 ; N odieresis ; G 184
U 247 ; WX 602 ; N divide ; G 185
U 248 ; WX 602 ; N oslash ; G 186
U 249 ; WX 602 ; N ugrave ; G 187
U 250 ; WX 602 ; N uacute ; G 188
U 251 ; WX 602 ; N ucircumflex ; G 189
U 252 ; WX 602 ; N udieresis ; G 190
U 253 ; WX 602 ; N yacute ; G 191
U 254 ; WX 602 ; N thorn ; G 192
U 255 ; WX 602 ; N ydieresis ; G 193
U 256 ; WX 602 ; N Amacron ; G 194
U 257 ; WX 602 ; N amacron ; G 195
U 258 ; WX 602 ; N Abreve ; G 196
U 259 ; WX 602 ; N abreve ; G 197
U 260 ; WX 602 ; N Aogonek ; G 198
U 261 ; WX 602 ; N aogonek ; G 199
U 262 ; WX 602 ; N Cacute ; G 200
U 263 ; WX 602 ; N cacute ; G 201
U 264 ; WX 602 ; N Ccircumflex ; G 202
U 265 ; WX 602 ; N ccircumflex ; G 203
U 266 ; WX 602 ; N Cdotaccent ; G 204
U 267 ; WX 602 ; N cdotaccent ; G 205
U 268 ; WX 602 ; N Ccaron ; G 206
U 269 ; WX 602 ; N ccaron ; G 207
U 270 ; WX 602 ; N Dcaron ; G 208
U 271 ; WX 602 ; N dcaron ; G 209
U 272 ; WX 602 ; N Dcroat ; G 210
U 273 ; WX 602 ; N dmacron ; G 211
U 274 ; WX 602 ; N Emacron ; G 212
U 275 ; WX 602 ; N emacron ; G 213
U 276 ; WX 602 ; N Ebreve ; G 214
U 277 ; WX 602 ; N ebreve ; G 215
U 278 ; WX 602 ; N Edotaccent ; G 216
U 279 ; WX 602 ; N edotaccent ; G 217
U 280 ; WX 602 ; N Eogonek ; G 218
U 281 ; WX 602 ; N eogonek ; G 219
U 282 ; WX 602 ; N Ecaron ; G 220
U 283 ; WX 602 ; N ecaron ; G 221
U 284 ; WX 602 ; N Gcircumflex ; G 222
U 285 ; WX 602 ; N gcircumflex ; G 223
U 286 ; WX 602 ; N Gbreve ; G 224
U 287 ; WX 602 ; N gbreve ; G 225
U 288 ; WX 602 ; N Gdotaccent ; G 226
U 289 ; WX 602 ; N gdotaccent ; G 227
U 290 ; WX 602 ; N Gcommaaccent ; G 228
U 291 ; WX 602 ; N gcommaaccent ; G 229
U 292 ; WX 602 ; N Hcircumflex ; G 230
U 293 ; WX 602 ; N hcircumflex ; G 231
U 294 ; WX 602 ; N Hbar ; G 232
U 295 ; WX 602 ; N hbar ; G 233
U 296 ; WX 602 ; N Itilde ; G 234
U 297 ; WX 602 ; N itilde ; G 235
U 298 ; WX 602 ; N Imacron ; G 236
U 299 ; WX 602 ; N imacron ; G 237
U 300 ; WX 602 ; N Ibreve ; G 238
U 301 ; WX 602 ; N ibreve ; G 239
U 302 ; WX 602 ; N Iogonek ; G 240
U 303 ; WX 602 ; N iogonek ; G 241
U 304 ; WX 602 ; N Idot ; G 242
U 305 ; WX 602 ; N dotlessi ; G 243
U 306 ; WX 602 ; N IJ ; G 244
U 307 ; WX 602 ; N ij ; G 245
U 308 ; WX 602 ; N Jcircumflex ; G 246
U 309 ; WX 602 ; N jcircumflex ; G 247
U 310 ; WX 602 ; N Kcommaaccent ; G 248
U 311 ; WX 602 ; N kcommaaccent ; G 249
U 312 ; WX 602 ; N kgreenlandic ; G 250
U 313 ; WX 602 ; N Lacute ; G 251
U 314 ; WX 602 ; N lacute ; G 252
U 315 ; WX 602 ; N Lcommaaccent ; G 253
U 316 ; WX 602 ; N lcommaaccent ; G 254
U 317 ; WX 602 ; N Lcaron ; G 255
U 318 ; WX 602 ; N lcaron ; G 256
U 319 ; WX 602 ; N Ldot ; G 257
U 320 ; WX 602 ; N ldot ; G 258
U 321 ; WX 602 ; N Lslash ; G 259
U 322 ; WX 602 ; N lslash ; G 260
U 323 ; WX 602 ; N Nacute ; G 261
U 324 ; WX 602 ; N nacute ; G 262
U 325 ; WX 602 ; N Ncommaaccent ; G 263
U 326 ; WX 602 ; N ncommaaccent ; G 264
U 327 ; WX 602 ; N Ncaron ; G 265
U 328 ; WX 602 ; N ncaron ; G 266
U 329 ; WX 602 ; N napostrophe ; G 267
U 330 ; WX 602 ; N Eng ; G 268
U 331 ; WX 602 ; N eng ; G 269
U 332 ; WX 602 ; N Omacron ; G 270
U 333 ; WX 602 ; N omacron ; G 271
U 334 ; WX 602 ; N Obreve ; G 272
U 335 ; WX 602 ; N obreve ; G 273
U 336 ; WX 602 ; N Ohungarumlaut ; G 274
U 337 ; WX 602 ; N ohungarumlaut ; G 275
U 338 ; WX 602 ; N OE ; G 276
U 339 ; WX 602 ; N oe ; G 277
U 340 ; WX 602 ; N Racute ; G 278
U 341 ; WX 602 ; N racute ; G 279
U 342 ; WX 602 ; N Rcommaaccent ; G 280
U 343 ; WX 602 ; N rcommaaccent ; G 281
U 344 ; WX 602 ; N Rcaron ; G 282
U 345 ; WX 602 ; N rcaron ; G 283
U 346 ; WX 602 ; N Sacute ; G 284
U 347 ; WX 602 ; N sacute ; G 285
U 348 ; WX 602 ; N Scircumflex ; G 286
U 349 ; WX 602 ; N scircumflex ; G 287
U 350 ; WX 602 ; N Scedilla ; G 288
U 351 ; WX 602 ; N scedilla ; G 289
U 352 ; WX 602 ; N Scaron ; G 290
U 353 ; WX 602 ; N scaron ; G 291
U 354 ; WX 602 ; N Tcommaaccent ; G 292
U 355 ; WX 602 ; N tcommaaccent ; G 293
U 356 ; WX 602 ; N Tcaron ; G 294
U 357 ; WX 602 ; N tcaron ; G 295
U 358 ; WX 602 ; N Tbar ; G 296
U 359 ; WX 602 ; N tbar ; G 297
U 360 ; WX 602 ; N Utilde ; G 298
U 361 ; WX 602 ; N utilde ; G 299
U 362 ; WX 602 ; N Umacron ; G 300
U 363 ; WX 602 ; N umacron ; G 301
U 364 ; WX 602 ; N Ubreve ; G 302
U 365 ; WX 602 ; N ubreve ; G 303
U 366 ; WX 602 ; N Uring ; G 304
U 367 ; WX 602 ; N uring ; G 305
U 368 ; WX 602 ; N Uhungarumlaut ; G 306
U 369 ; WX 602 ; N uhungarumlaut ; G 307
U 370 ; WX 602 ; N Uogonek ; G 308
U 371 ; WX 602 ; N uogonek ; G 309
U 372 ; WX 602 ; N Wcircumflex ; G 310
U 373 ; WX 602 ; N wcircumflex ; G 311
U 374 ; WX 602 ; N Ycircumflex ; G 312
U 375 ; WX 602 ; N ycircumflex ; G 313
U 376 ; WX 602 ; N Ydieresis ; G 314
U 377 ; WX 602 ; N Zacute ; G 315
U 378 ; WX 602 ; N zacute ; G 316
U 379 ; WX 602 ; N Zdotaccent ; G 317
U 380 ; WX 602 ; N zdotaccent ; G 318
U 381 ; WX 602 ; N Zcaron ; G 319
U 382 ; WX 602 ; N zcaron ; G 320
U 383 ; WX 602 ; N longs ; G 321
U 384 ; WX 602 ; N uni0180 ; G 322
U 385 ; WX 602 ; N uni0181 ; G 323
U 386 ; WX 602 ; N uni0182 ; G 324
U 387 ; WX 602 ; N uni0183 ; G 325
U 388 ; WX 602 ; N uni0184 ; G 326
U 389 ; WX 602 ; N uni0185 ; G 327
U 390 ; WX 602 ; N uni0186 ; G 328
U 391 ; WX 602 ; N uni0187 ; G 329
U 392 ; WX 602 ; N uni0188 ; G 330
U 393 ; WX 602 ; N uni0189 ; G 331
U 394 ; WX 602 ; N uni018A ; G 332
U 395 ; WX 602 ; N uni018B ; G 333
U 396 ; WX 602 ; N uni018C ; G 334
U 397 ; WX 602 ; N uni018D ; G 335
U 398 ; WX 602 ; N uni018E ; G 336
U 399 ; WX 602 ; N uni018F ; G 337
U 400 ; WX 602 ; N uni0190 ; G 338
U 401 ; WX 602 ; N uni0191 ; G 339
U 402 ; WX 602 ; N florin ; G 340
U 403 ; WX 602 ; N uni0193 ; G 341
U 404 ; WX 602 ; N uni0194 ; G 342
U 405 ; WX 602 ; N uni0195 ; G 343
U 406 ; WX 602 ; N uni0196 ; G 344
U 407 ; WX 602 ; N uni0197 ; G 345
U 408 ; WX 602 ; N uni0198 ; G 346
U 409 ; WX 602 ; N uni0199 ; G 347
U 410 ; WX 602 ; N uni019A ; G 348
U 411 ; WX 602 ; N uni019B ; G 349
U 412 ; WX 602 ; N uni019C ; G 350
U 413 ; WX 602 ; N uni019D ; G 351
U 414 ; WX 602 ; N uni019E ; G 352
U 415 ; WX 602 ; N uni019F ; G 353
U 416 ; WX 602 ; N Ohorn ; G 354
U 417 ; WX 602 ; N ohorn ; G 355
U 418 ; WX 602 ; N uni01A2 ; G 356
U 419 ; WX 602 ; N uni01A3 ; G 357
U 420 ; WX 602 ; N uni01A4 ; G 358
U 421 ; WX 602 ; N uni01A5 ; G 359
U 422 ; WX 602 ; N uni01A6 ; G 360
U 423 ; WX 602 ; N uni01A7 ; G 361
U 424 ; WX 602 ; N uni01A8 ; G 362
U 425 ; WX 602 ; N uni01A9 ; G 363
U 426 ; WX 602 ; N uni01AA ; G 364
U 427 ; WX 602 ; N uni01AB ; G 365
U 428 ; WX 602 ; N uni01AC ; G 366
U 429 ; WX 602 ; N uni01AD ; G 367
U 430 ; WX 602 ; N uni01AE ; G 368
U 431 ; WX 602 ; N Uhorn ; G 369
U 432 ; WX 602 ; N uhorn ; G 370
U 433 ; WX 602 ; N uni01B1 ; G 371
U 434 ; WX 602 ; N uni01B2 ; G 372
U 435 ; WX 602 ; N uni01B3 ; G 373
U 436 ; WX 602 ; N uni01B4 ; G 374
U 437 ; WX 602 ; N uni01B5 ; G 375
U 438 ; WX 602 ; N uni01B6 ; G 376
U 439 ; WX 602 ; N uni01B7 ; G 377
U 440 ; WX 602 ; N uni01B8 ; G 378
U 441 ; WX 602 ; N uni01B9 ; G 379
U 442 ; WX 602 ; N uni01BA ; G 380
U 443 ; WX 602 ; N uni01BB ; G 381
U 444 ; WX 602 ; N uni01BC ; G 382
U 445 ; WX 602 ; N uni01BD ; G 383
U 446 ; WX 602 ; N uni01BE ; G 384
U 447 ; WX 602 ; N uni01BF ; G 385
U 448 ; WX 602 ; N uni01C0 ; G 386
U 449 ; WX 602 ; N uni01C1 ; G 387
U 450 ; WX 602 ; N uni01C2 ; G 388
U 451 ; WX 602 ; N uni01C3 ; G 389
U 461 ; WX 602 ; N uni01CD ; G 390
U 462 ; WX 602 ; N uni01CE ; G 391
U 463 ; WX 602 ; N uni01CF ; G 392
U 464 ; WX 602 ; N uni01D0 ; G 393
U 465 ; WX 602 ; N uni01D1 ; G 394
U 466 ; WX 602 ; N uni01D2 ; G 395
U 467 ; WX 602 ; N uni01D3 ; G 396
U 468 ; WX 602 ; N uni01D4 ; G 397
U 469 ; WX 602 ; N uni01D5 ; G 398
U 470 ; WX 602 ; N uni01D6 ; G 399
U 471 ; WX 602 ; N uni01D7 ; G 400
U 472 ; WX 602 ; N uni01D8 ; G 401
U 473 ; WX 602 ; N uni01D9 ; G 402
U 474 ; WX 602 ; N uni01DA ; G 403
U 475 ; WX 602 ; N uni01DB ; G 404
U 476 ; WX 602 ; N uni01DC ; G 405
U 477 ; WX 602 ; N uni01DD ; G 406
U 478 ; WX 602 ; N uni01DE ; G 407
U 479 ; WX 602 ; N uni01DF ; G 408
U 480 ; WX 602 ; N uni01E0 ; G 409
U 481 ; WX 602 ; N uni01E1 ; G 410
U 482 ; WX 602 ; N uni01E2 ; G 411
U 483 ; WX 602 ; N uni01E3 ; G 412
U 486 ; WX 602 ; N Gcaron ; G 413
U 487 ; WX 602 ; N gcaron ; G 414
U 488 ; WX 602 ; N uni01E8 ; G 415
U 489 ; WX 602 ; N uni01E9 ; G 416
U 490 ; WX 602 ; N uni01EA ; G 417
U 491 ; WX 602 ; N uni01EB ; G 418
U 492 ; WX 602 ; N uni01EC ; G 419
U 493 ; WX 602 ; N uni01ED ; G 420
U 494 ; WX 602 ; N uni01EE ; G 421
U 495 ; WX 602 ; N uni01EF ; G 422
U 496 ; WX 602 ; N uni01F0 ; G 423
U 500 ; WX 602 ; N uni01F4 ; G 424
U 501 ; WX 602 ; N uni01F5 ; G 425
U 502 ; WX 602 ; N uni01F6 ; G 426
U 504 ; WX 602 ; N uni01F8 ; G 427
U 505 ; WX 602 ; N uni01F9 ; G 428
U 508 ; WX 602 ; N AEacute ; G 429
U 509 ; WX 602 ; N aeacute ; G 430
U 510 ; WX 602 ; N Oslashacute ; G 431
U 511 ; WX 602 ; N oslashacute ; G 432
U 512 ; WX 602 ; N uni0200 ; G 433
U 513 ; WX 602 ; N uni0201 ; G 434
U 514 ; WX 602 ; N uni0202 ; G 435
U 515 ; WX 602 ; N uni0203 ; G 436
U 516 ; WX 602 ; N uni0204 ; G 437
U 517 ; WX 602 ; N uni0205 ; G 438
U 518 ; WX 602 ; N uni0206 ; G 439
U 519 ; WX 602 ; N uni0207 ; G 440
U 520 ; WX 602 ; N uni0208 ; G 441
U 521 ; WX 602 ; N uni0209 ; G 442
U 522 ; WX 602 ; N uni020A ; G 443
U 523 ; WX 602 ; N uni020B ; G 444
U 524 ; WX 602 ; N uni020C ; G 445
U 525 ; WX 602 ; N uni020D ; G 446
U 526 ; WX 602 ; N uni020E ; G 447
U 527 ; WX 602 ; N uni020F ; G 448
U 528 ; WX 602 ; N uni0210 ; G 449
U 529 ; WX 602 ; N uni0211 ; G 450
U 530 ; WX 602 ; N uni0212 ; G 451
U 531 ; WX 602 ; N uni0213 ; G 452
U 532 ; WX 602 ; N uni0214 ; G 453
U 533 ; WX 602 ; N uni0215 ; G 454
U 534 ; WX 602 ; N uni0216 ; G 455
U 535 ; WX 602 ; N uni0217 ; G 456
U 536 ; WX 602 ; N Scommaaccent ; G 457
U 537 ; WX 602 ; N scommaaccent ; G 458
U 538 ; WX 602 ; N uni021A ; G 459
U 539 ; WX 602 ; N uni021B ; G 460
U 540 ; WX 602 ; N uni021C ; G 461
U 541 ; WX 602 ; N uni021D ; G 462
U 542 ; WX 602 ; N uni021E ; G 463
U 543 ; WX 602 ; N uni021F ; G 464
U 544 ; WX 602 ; N uni0220 ; G 465
U 545 ; WX 602 ; N uni0221 ; G 466
U 548 ; WX 602 ; N uni0224 ; G 467
U 549 ; WX 602 ; N uni0225 ; G 468
U 550 ; WX 602 ; N uni0226 ; G 469
U 551 ; WX 602 ; N uni0227 ; G 470
U 552 ; WX 602 ; N uni0228 ; G 471
U 553 ; WX 602 ; N uni0229 ; G 472
U 554 ; WX 602 ; N uni022A ; G 473
U 555 ; WX 602 ; N uni022B ; G 474
U 556 ; WX 602 ; N uni022C ; G 475
U 557 ; WX 602 ; N uni022D ; G 476
U 558 ; WX 602 ; N uni022E ; G 477
U 559 ; WX 602 ; N uni022F ; G 478
U 560 ; WX 602 ; N uni0230 ; G 479
U 561 ; WX 602 ; N uni0231 ; G 480
U 562 ; WX 602 ; N uni0232 ; G 481
U 563 ; WX 602 ; N uni0233 ; G 482
U 564 ; WX 602 ; N uni0234 ; G 483
U 565 ; WX 602 ; N uni0235 ; G 484
U 566 ; WX 602 ; N uni0236 ; G 485
U 567 ; WX 602 ; N dotlessj ; G 486
U 568 ; WX 602 ; N uni0238 ; G 487
U 569 ; WX 602 ; N uni0239 ; G 488
U 570 ; WX 602 ; N uni023A ; G 489
U 571 ; WX 602 ; N uni023B ; G 490
U 572 ; WX 602 ; N uni023C ; G 491
U 573 ; WX 602 ; N uni023D ; G 492
U 574 ; WX 602 ; N uni023E ; G 493
U 575 ; WX 602 ; N uni023F ; G 494
U 576 ; WX 602 ; N uni0240 ; G 495
U 577 ; WX 602 ; N uni0241 ; G 496
U 579 ; WX 602 ; N uni0243 ; G 497
U 580 ; WX 602 ; N uni0244 ; G 498
U 581 ; WX 602 ; N uni0245 ; G 499
U 588 ; WX 602 ; N uni024C ; G 500
U 589 ; WX 602 ; N uni024D ; G 501
U 592 ; WX 602 ; N uni0250 ; G 502
U 593 ; WX 602 ; N uni0251 ; G 503
U 594 ; WX 602 ; N uni0252 ; G 504
U 595 ; WX 602 ; N uni0253 ; G 505
U 596 ; WX 602 ; N uni0254 ; G 506
U 597 ; WX 602 ; N uni0255 ; G 507
U 598 ; WX 602 ; N uni0256 ; G 508
U 599 ; WX 602 ; N uni0257 ; G 509
U 600 ; WX 602 ; N uni0258 ; G 510
U 601 ; WX 602 ; N uni0259 ; G 511
U 602 ; WX 602 ; N uni025A ; G 512
U 603 ; WX 602 ; N uni025B ; G 513
U 604 ; WX 602 ; N uni025C ; G 514
U 605 ; WX 602 ; N uni025D ; G 515
U 606 ; WX 602 ; N uni025E ; G 516
U 607 ; WX 602 ; N uni025F ; G 517
U 608 ; WX 602 ; N uni0260 ; G 518
U 609 ; WX 602 ; N uni0261 ; G 519
U 610 ; WX 602 ; N uni0262 ; G 520
U 611 ; WX 602 ; N uni0263 ; G 521
U 612 ; WX 602 ; N uni0264 ; G 522
U 613 ; WX 602 ; N uni0265 ; G 523
U 614 ; WX 602 ; N uni0266 ; G 524
U 615 ; WX 602 ; N uni0267 ; G 525
U 616 ; WX 602 ; N uni0268 ; G 526
U 617 ; WX 602 ; N uni0269 ; G 527
U 618 ; WX 602 ; N uni026A ; G 528
U 619 ; WX 602 ; N uni026B ; G 529
U 620 ; WX 602 ; N uni026C ; G 530
U 621 ; WX 602 ; N uni026D ; G 531
U 622 ; WX 602 ; N uni026E ; G 532
U 623 ; WX 602 ; N uni026F ; G 533
U 624 ; WX 602 ; N uni0270 ; G 534
U 625 ; WX 602 ; N uni0271 ; G 535
U 626 ; WX 602 ; N uni0272 ; G 536
U 627 ; WX 602 ; N uni0273 ; G 537
U 628 ; WX 602 ; N uni0274 ; G 538
U 629 ; WX 602 ; N uni0275 ; G 539
U 630 ; WX 602 ; N uni0276 ; G 540
U 631 ; WX 602 ; N uni0277 ; G 541
U 632 ; WX 602 ; N uni0278 ; G 542
U 633 ; WX 602 ; N uni0279 ; G 543
U 634 ; WX 602 ; N uni027A ; G 544
U 635 ; WX 602 ; N uni027B ; G 545
U 636 ; WX 602 ; N uni027C ; G 546
U 637 ; WX 602 ; N uni027D ; G 547
U 638 ; WX 602 ; N uni027E ; G 548
U 639 ; WX 602 ; N uni027F ; G 549
U 640 ; WX 602 ; N uni0280 ; G 550
U 641 ; WX 602 ; N uni0281 ; G 551
U 642 ; WX 602 ; N uni0282 ; G 552
U 643 ; WX 602 ; N uni0283 ; G 553
U 644 ; WX 602 ; N uni0284 ; G 554
U 645 ; WX 602 ; N uni0285 ; G 555
U 646 ; WX 602 ; N uni0286 ; G 556
U 647 ; WX 602 ; N uni0287 ; G 557
U 648 ; WX 602 ; N uni0288 ; G 558
U 649 ; WX 602 ; N uni0289 ; G 559
U 650 ; WX 602 ; N uni028A ; G 560
U 651 ; WX 602 ; N uni028B ; G 561
U 652 ; WX 602 ; N uni028C ; G 562
U 653 ; WX 602 ; N uni028D ; G 563
U 654 ; WX 602 ; N uni028E ; G 564
U 655 ; WX 602 ; N uni028F ; G 565
U 656 ; WX 602 ; N uni0290 ; G 566
U 657 ; WX 602 ; N uni0291 ; G 567
U 658 ; WX 602 ; N uni0292 ; G 568
U 659 ; WX 602 ; N uni0293 ; G 569
U 660 ; WX 602 ; N uni0294 ; G 570
U 661 ; WX 602 ; N uni0295 ; G 571
U 662 ; WX 602 ; N uni0296 ; G 572
U 663 ; WX 602 ; N uni0297 ; G 573
U 664 ; WX 602 ; N uni0298 ; G 574
U 665 ; WX 602 ; N uni0299 ; G 575
U 666 ; WX 602 ; N uni029A ; G 576
U 667 ; WX 602 ; N uni029B ; G 577
U 668 ; WX 602 ; N uni029C ; G 578
U 669 ; WX 602 ; N uni029D ; G 579
U 670 ; WX 602 ; N uni029E ; G 580
U 671 ; WX 602 ; N uni029F ; G 581
U 672 ; WX 602 ; N uni02A0 ; G 582
U 673 ; WX 602 ; N uni02A1 ; G 583
U 674 ; WX 602 ; N uni02A2 ; G 584
U 675 ; WX 602 ; N uni02A3 ; G 585
U 676 ; WX 602 ; N uni02A4 ; G 586
U 677 ; WX 602 ; N uni02A5 ; G 587
U 678 ; WX 602 ; N uni02A6 ; G 588
U 679 ; WX 602 ; N uni02A7 ; G 589
U 680 ; WX 602 ; N uni02A8 ; G 590
U 681 ; WX 602 ; N uni02A9 ; G 591
U 682 ; WX 602 ; N uni02AA ; G 592
U 683 ; WX 602 ; N uni02AB ; G 593
U 684 ; WX 602 ; N uni02AC ; G 594
U 685 ; WX 602 ; N uni02AD ; G 595
U 686 ; WX 602 ; N uni02AE ; G 596
U 687 ; WX 602 ; N uni02AF ; G 597
U 688 ; WX 602 ; N uni02B0 ; G 598
U 689 ; WX 602 ; N uni02B1 ; G 599
U 690 ; WX 602 ; N uni02B2 ; G 600
U 691 ; WX 602 ; N uni02B3 ; G 601
U 692 ; WX 602 ; N uni02B4 ; G 602
U 693 ; WX 602 ; N uni02B5 ; G 603
U 694 ; WX 602 ; N uni02B6 ; G 604
U 695 ; WX 602 ; N uni02B7 ; G 605
U 696 ; WX 602 ; N uni02B8 ; G 606
U 697 ; WX 602 ; N uni02B9 ; G 607
U 699 ; WX 602 ; N uni02BB ; G 608
U 700 ; WX 602 ; N uni02BC ; G 609
U 701 ; WX 602 ; N uni02BD ; G 610
U 702 ; WX 602 ; N uni02BE ; G 611
U 703 ; WX 602 ; N uni02BF ; G 612
U 704 ; WX 602 ; N uni02C0 ; G 613
U 705 ; WX 602 ; N uni02C1 ; G 614
U 710 ; WX 602 ; N circumflex ; G 615
U 711 ; WX 602 ; N caron ; G 616
U 712 ; WX 602 ; N uni02C8 ; G 617
U 713 ; WX 602 ; N uni02C9 ; G 618
U 716 ; WX 602 ; N uni02CC ; G 619
U 717 ; WX 602 ; N uni02CD ; G 620
U 718 ; WX 602 ; N uni02CE ; G 621
U 719 ; WX 602 ; N uni02CF ; G 622
U 720 ; WX 602 ; N uni02D0 ; G 623
U 721 ; WX 602 ; N uni02D1 ; G 624
U 722 ; WX 602 ; N uni02D2 ; G 625
U 723 ; WX 602 ; N uni02D3 ; G 626
U 726 ; WX 602 ; N uni02D6 ; G 627
U 727 ; WX 602 ; N uni02D7 ; G 628
U 728 ; WX 602 ; N breve ; G 629
U 729 ; WX 602 ; N dotaccent ; G 630
U 730 ; WX 602 ; N ring ; G 631
U 731 ; WX 602 ; N ogonek ; G 632
U 732 ; WX 602 ; N tilde ; G 633
U 733 ; WX 602 ; N hungarumlaut ; G 634
U 734 ; WX 602 ; N uni02DE ; G 635
U 736 ; WX 602 ; N uni02E0 ; G 636
U 737 ; WX 602 ; N uni02E1 ; G 637
U 738 ; WX 602 ; N uni02E2 ; G 638
U 739 ; WX 602 ; N uni02E3 ; G 639
U 740 ; WX 602 ; N uni02E4 ; G 640
U 741 ; WX 602 ; N uni02E5 ; G 641
U 742 ; WX 602 ; N uni02E6 ; G 642
U 743 ; WX 602 ; N uni02E7 ; G 643
U 744 ; WX 602 ; N uni02E8 ; G 644
U 745 ; WX 602 ; N uni02E9 ; G 645
U 750 ; WX 602 ; N uni02EE ; G 646
U 755 ; WX 602 ; N uni02F3 ; G 647
U 768 ; WX 602 ; N gravecomb ; G 648
U 769 ; WX 602 ; N acutecomb ; G 649
U 770 ; WX 602 ; N uni0302 ; G 650
U 771 ; WX 602 ; N tildecomb ; G 651
U 772 ; WX 602 ; N uni0304 ; G 652
U 773 ; WX 602 ; N uni0305 ; G 653
U 774 ; WX 602 ; N uni0306 ; G 654
U 775 ; WX 602 ; N uni0307 ; G 655
U 776 ; WX 602 ; N uni0308 ; G 656
U 777 ; WX 602 ; N hookabovecomb ; G 657
U 778 ; WX 602 ; N uni030A ; G 658
U 779 ; WX 602 ; N uni030B ; G 659
U 780 ; WX 602 ; N uni030C ; G 660
U 781 ; WX 602 ; N uni030D ; G 661
U 782 ; WX 602 ; N uni030E ; G 662
U 783 ; WX 602 ; N uni030F ; G 663
U 784 ; WX 602 ; N uni0310 ; G 664
U 785 ; WX 602 ; N uni0311 ; G 665
U 786 ; WX 602 ; N uni0312 ; G 666
U 787 ; WX 602 ; N uni0313 ; G 667
U 788 ; WX 602 ; N uni0314 ; G 668
U 789 ; WX 602 ; N uni0315 ; G 669
U 790 ; WX 602 ; N uni0316 ; G 670
U 791 ; WX 602 ; N uni0317 ; G 671
U 792 ; WX 602 ; N uni0318 ; G 672
U 793 ; WX 602 ; N uni0319 ; G 673
U 794 ; WX 602 ; N uni031A ; G 674
U 795 ; WX 602 ; N uni031B ; G 675
U 796 ; WX 602 ; N uni031C ; G 676
U 797 ; WX 602 ; N uni031D ; G 677
U 798 ; WX 602 ; N uni031E ; G 678
U 799 ; WX 602 ; N uni031F ; G 679
U 800 ; WX 602 ; N uni0320 ; G 680
U 801 ; WX 602 ; N uni0321 ; G 681
U 802 ; WX 602 ; N uni0322 ; G 682
U 803 ; WX 602 ; N dotbelowcomb ; G 683
U 804 ; WX 602 ; N uni0324 ; G 684
U 805 ; WX 602 ; N uni0325 ; G 685
U 806 ; WX 602 ; N uni0326 ; G 686
U 807 ; WX 602 ; N uni0327 ; G 687
U 808 ; WX 602 ; N uni0328 ; G 688
U 809 ; WX 602 ; N uni0329 ; G 689
U 810 ; WX 602 ; N uni032A ; G 690
U 811 ; WX 602 ; N uni032B ; G 691
U 812 ; WX 602 ; N uni032C ; G 692
U 813 ; WX 602 ; N uni032D ; G 693
U 814 ; WX 602 ; N uni032E ; G 694
U 815 ; WX 602 ; N uni032F ; G 695
U 816 ; WX 602 ; N uni0330 ; G 696
U 817 ; WX 602 ; N uni0331 ; G 697
U 818 ; WX 602 ; N uni0332 ; G 698
U 819 ; WX 602 ; N uni0333 ; G 699
U 820 ; WX 602 ; N uni0334 ; G 700
U 821 ; WX 602 ; N uni0335 ; G 701
U 822 ; WX 602 ; N uni0336 ; G 702
U 823 ; WX 602 ; N uni0337 ; G 703
U 824 ; WX 602 ; N uni0338 ; G 704
U 825 ; WX 602 ; N uni0339 ; G 705
U 826 ; WX 602 ; N uni033A ; G 706
U 827 ; WX 602 ; N uni033B ; G 707
U 828 ; WX 602 ; N uni033C ; G 708
U 829 ; WX 602 ; N uni033D ; G 709
U 830 ; WX 602 ; N uni033E ; G 710
U 831 ; WX 602 ; N uni033F ; G 711
U 835 ; WX 602 ; N uni0343 ; G 712
U 856 ; WX 602 ; N uni0358 ; G 713
U 865 ; WX 602 ; N uni0361 ; G 714
U 884 ; WX 602 ; N uni0374 ; G 715
U 885 ; WX 602 ; N uni0375 ; G 716
U 886 ; WX 602 ; N uni0376 ; G 717
U 887 ; WX 602 ; N uni0377 ; G 718
U 890 ; WX 602 ; N uni037A ; G 719
U 891 ; WX 602 ; N uni037B ; G 720
U 892 ; WX 602 ; N uni037C ; G 721
U 893 ; WX 602 ; N uni037D ; G 722
U 894 ; WX 602 ; N uni037E ; G 723
U 895 ; WX 602 ; N uni037F ; G 724
U 900 ; WX 602 ; N tonos ; G 725
U 901 ; WX 602 ; N dieresistonos ; G 726
U 902 ; WX 602 ; N Alphatonos ; G 727
U 903 ; WX 602 ; N anoteleia ; G 728
U 904 ; WX 602 ; N Epsilontonos ; G 729
U 905 ; WX 602 ; N Etatonos ; G 730
U 906 ; WX 602 ; N Iotatonos ; G 731
U 908 ; WX 602 ; N Omicrontonos ; G 732
U 910 ; WX 602 ; N Upsilontonos ; G 733
U 911 ; WX 602 ; N Omegatonos ; G 734
U 912 ; WX 602 ; N iotadieresistonos ; G 735
U 913 ; WX 602 ; N Alpha ; G 736
U 914 ; WX 602 ; N Beta ; G 737
U 915 ; WX 602 ; N Gamma ; G 738
U 916 ; WX 602 ; N uni0394 ; G 739
U 917 ; WX 602 ; N Epsilon ; G 740
U 918 ; WX 602 ; N Zeta ; G 741
U 919 ; WX 602 ; N Eta ; G 742
U 920 ; WX 602 ; N Theta ; G 743
U 921 ; WX 602 ; N Iota ; G 744
U 922 ; WX 602 ; N Kappa ; G 745
U 923 ; WX 602 ; N Lambda ; G 746
U 924 ; WX 602 ; N Mu ; G 747
U 925 ; WX 602 ; N Nu ; G 748
U 926 ; WX 602 ; N Xi ; G 749
U 927 ; WX 602 ; N Omicron ; G 750
U 928 ; WX 602 ; N Pi ; G 751
U 929 ; WX 602 ; N Rho ; G 752
U 931 ; WX 602 ; N Sigma ; G 753
U 932 ; WX 602 ; N Tau ; G 754
U 933 ; WX 602 ; N Upsilon ; G 755
U 934 ; WX 602 ; N Phi ; G 756
U 935 ; WX 602 ; N Chi ; G 757
U 936 ; WX 602 ; N Psi ; G 758
U 937 ; WX 602 ; N Omega ; G 759
U 938 ; WX 602 ; N Iotadieresis ; G 760
U 939 ; WX 602 ; N Upsilondieresis ; G 761
U 940 ; WX 602 ; N alphatonos ; G 762
U 941 ; WX 602 ; N epsilontonos ; G 763
U 942 ; WX 602 ; N etatonos ; G 764
U 943 ; WX 602 ; N iotatonos ; G 765
U 944 ; WX 602 ; N upsilondieresistonos ; G 766
U 945 ; WX 602 ; N alpha ; G 767
U 946 ; WX 602 ; N beta ; G 768
U 947 ; WX 602 ; N gamma ; G 769
U 948 ; WX 602 ; N delta ; G 770
U 949 ; WX 602 ; N epsilon ; G 771
U 950 ; WX 602 ; N zeta ; G 772
U 951 ; WX 602 ; N eta ; G 773
U 952 ; WX 602 ; N theta ; G 774
U 953 ; WX 602 ; N iota ; G 775
U 954 ; WX 602 ; N kappa ; G 776
U 955 ; WX 602 ; N lambda ; G 777
U 956 ; WX 602 ; N uni03BC ; G 778
U 957 ; WX 602 ; N nu ; G 779
U 958 ; WX 602 ; N xi ; G 780
U 959 ; WX 602 ; N omicron ; G 781
U 960 ; WX 602 ; N pi ; G 782
U 961 ; WX 602 ; N rho ; G 783
U 962 ; WX 602 ; N sigma1 ; G 784
U 963 ; WX 602 ; N sigma ; G 785
U 964 ; WX 602 ; N tau ; G 786
U 965 ; WX 602 ; N upsilon ; G 787
U 966 ; WX 602 ; N phi ; G 788
U 967 ; WX 602 ; N chi ; G 789
U 968 ; WX 602 ; N psi ; G 790
U 969 ; WX 602 ; N omega ; G 791
U 970 ; WX 602 ; N iotadieresis ; G 792
U 971 ; WX 602 ; N upsilondieresis ; G 793
U 972 ; WX 602 ; N omicrontonos ; G 794
U 973 ; WX 602 ; N upsilontonos ; G 795
U 974 ; WX 602 ; N omegatonos ; G 796
U 976 ; WX 602 ; N uni03D0 ; G 797
U 977 ; WX 602 ; N theta1 ; G 798
U 978 ; WX 602 ; N Upsilon1 ; G 799
U 979 ; WX 602 ; N uni03D3 ; G 800
U 980 ; WX 602 ; N uni03D4 ; G 801
U 981 ; WX 602 ; N phi1 ; G 802
U 982 ; WX 602 ; N omega1 ; G 803
U 983 ; WX 602 ; N uni03D7 ; G 804
U 984 ; WX 602 ; N uni03D8 ; G 805
U 985 ; WX 602 ; N uni03D9 ; G 806
U 986 ; WX 602 ; N uni03DA ; G 807
U 987 ; WX 602 ; N uni03DB ; G 808
U 988 ; WX 602 ; N uni03DC ; G 809
U 989 ; WX 602 ; N uni03DD ; G 810
U 990 ; WX 602 ; N uni03DE ; G 811
U 991 ; WX 602 ; N uni03DF ; G 812
U 992 ; WX 602 ; N uni03E0 ; G 813
U 993 ; WX 602 ; N uni03E1 ; G 814
U 1008 ; WX 602 ; N uni03F0 ; G 815
U 1009 ; WX 602 ; N uni03F1 ; G 816
U 1010 ; WX 602 ; N uni03F2 ; G 817
U 1011 ; WX 602 ; N uni03F3 ; G 818
U 1012 ; WX 602 ; N uni03F4 ; G 819
U 1013 ; WX 602 ; N uni03F5 ; G 820
U 1014 ; WX 602 ; N uni03F6 ; G 821
U 1015 ; WX 602 ; N uni03F7 ; G 822
U 1016 ; WX 602 ; N uni03F8 ; G 823
U 1017 ; WX 602 ; N uni03F9 ; G 824
U 1018 ; WX 602 ; N uni03FA ; G 825
U 1019 ; WX 602 ; N uni03FB ; G 826
U 1020 ; WX 602 ; N uni03FC ; G 827
U 1021 ; WX 602 ; N uni03FD ; G 828
U 1022 ; WX 602 ; N uni03FE ; G 829
U 1023 ; WX 602 ; N uni03FF ; G 830
U 1024 ; WX 602 ; N uni0400 ; G 831
U 1025 ; WX 602 ; N uni0401 ; G 832
U 1026 ; WX 602 ; N uni0402 ; G 833
U 1027 ; WX 602 ; N uni0403 ; G 834
U 1028 ; WX 602 ; N uni0404 ; G 835
U 1029 ; WX 602 ; N uni0405 ; G 836
U 1030 ; WX 602 ; N uni0406 ; G 837
U 1031 ; WX 602 ; N uni0407 ; G 838
U 1032 ; WX 602 ; N uni0408 ; G 839
U 1033 ; WX 602 ; N uni0409 ; G 840
U 1034 ; WX 602 ; N uni040A ; G 841
U 1035 ; WX 602 ; N uni040B ; G 842
U 1036 ; WX 602 ; N uni040C ; G 843
U 1037 ; WX 602 ; N uni040D ; G 844
U 1038 ; WX 602 ; N uni040E ; G 845
U 1039 ; WX 602 ; N uni040F ; G 846
U 1040 ; WX 602 ; N uni0410 ; G 847
U 1041 ; WX 602 ; N uni0411 ; G 848
U 1042 ; WX 602 ; N uni0412 ; G 849
U 1043 ; WX 602 ; N uni0413 ; G 850
U 1044 ; WX 602 ; N uni0414 ; G 851
U 1045 ; WX 602 ; N uni0415 ; G 852
U 1046 ; WX 602 ; N uni0416 ; G 853
U 1047 ; WX 602 ; N uni0417 ; G 854
U 1048 ; WX 602 ; N uni0418 ; G 855
U 1049 ; WX 602 ; N uni0419 ; G 856
U 1050 ; WX 602 ; N uni041A ; G 857
U 1051 ; WX 602 ; N uni041B ; G 858
U 1052 ; WX 602 ; N uni041C ; G 859
U 1053 ; WX 602 ; N uni041D ; G 860
U 1054 ; WX 602 ; N uni041E ; G 861
U 1055 ; WX 602 ; N uni041F ; G 862
U 1056 ; WX 602 ; N uni0420 ; G 863
U 1057 ; WX 602 ; N uni0421 ; G 864
U 1058 ; WX 602 ; N uni0422 ; G 865
U 1059 ; WX 602 ; N uni0423 ; G 866
U 1060 ; WX 602 ; N uni0424 ; G 867
U 1061 ; WX 602 ; N uni0425 ; G 868
U 1062 ; WX 602 ; N uni0426 ; G 869
U 1063 ; WX 602 ; N uni0427 ; G 870
U 1064 ; WX 602 ; N uni0428 ; G 871
U 1065 ; WX 602 ; N uni0429 ; G 872
U 1066 ; WX 602 ; N uni042A ; G 873
U 1067 ; WX 602 ; N uni042B ; G 874
U 1068 ; WX 602 ; N uni042C ; G 875
U 1069 ; WX 602 ; N uni042D ; G 876
U 1070 ; WX 602 ; N uni042E ; G 877
U 1071 ; WX 602 ; N uni042F ; G 878
U 1072 ; WX 602 ; N uni0430 ; G 879
U 1073 ; WX 602 ; N uni0431 ; G 880
U 1074 ; WX 602 ; N uni0432 ; G 881
U 1075 ; WX 602 ; N uni0433 ; G 882
U 1076 ; WX 602 ; N uni0434 ; G 883
U 1077 ; WX 602 ; N uni0435 ; G 884
U 1078 ; WX 602 ; N uni0436 ; G 885
U 1079 ; WX 602 ; N uni0437 ; G 886
U 1080 ; WX 602 ; N uni0438 ; G 887
U 1081 ; WX 602 ; N uni0439 ; G 888
U 1082 ; WX 602 ; N uni043A ; G 889
U 1083 ; WX 602 ; N uni043B ; G 890
U 1084 ; WX 602 ; N uni043C ; G 891
U 1085 ; WX 602 ; N uni043D ; G 892
U 1086 ; WX 602 ; N uni043E ; G 893
U 1087 ; WX 602 ; N uni043F ; G 894
U 1088 ; WX 602 ; N uni0440 ; G 895
U 1089 ; WX 602 ; N uni0441 ; G 896
U 1090 ; WX 602 ; N uni0442 ; G 897
U 1091 ; WX 602 ; N uni0443 ; G 898
U 1092 ; WX 602 ; N uni0444 ; G 899
U 1093 ; WX 602 ; N uni0445 ; G 900
U 1094 ; WX 602 ; N uni0446 ; G 901
U 1095 ; WX 602 ; N uni0447 ; G 902
U 1096 ; WX 602 ; N uni0448 ; G 903
U 1097 ; WX 602 ; N uni0449 ; G 904
U 1098 ; WX 602 ; N uni044A ; G 905
U 1099 ; WX 602 ; N uni044B ; G 906
U 1100 ; WX 602 ; N uni044C ; G 907
U 1101 ; WX 602 ; N uni044D ; G 908
U 1102 ; WX 602 ; N uni044E ; G 909
U 1103 ; WX 602 ; N uni044F ; G 910
U 1104 ; WX 602 ; N uni0450 ; G 911
U 1105 ; WX 602 ; N uni0451 ; G 912
U 1106 ; WX 602 ; N uni0452 ; G 913
U 1107 ; WX 602 ; N uni0453 ; G 914
U 1108 ; WX 602 ; N uni0454 ; G 915
U 1109 ; WX 602 ; N uni0455 ; G 916
U 1110 ; WX 602 ; N uni0456 ; G 917
U 1111 ; WX 602 ; N uni0457 ; G 918
U 1112 ; WX 602 ; N uni0458 ; G 919
U 1113 ; WX 602 ; N uni0459 ; G 920
U 1114 ; WX 602 ; N uni045A ; G 921
U 1115 ; WX 602 ; N uni045B ; G 922
U 1116 ; WX 602 ; N uni045C ; G 923
U 1117 ; WX 602 ; N uni045D ; G 924
U 1118 ; WX 602 ; N uni045E ; G 925
U 1119 ; WX 602 ; N uni045F ; G 926
U 1122 ; WX 602 ; N uni0462 ; G 927
U 1123 ; WX 602 ; N uni0463 ; G 928
U 1138 ; WX 602 ; N uni0472 ; G 929
U 1139 ; WX 602 ; N uni0473 ; G 930
U 1168 ; WX 602 ; N uni0490 ; G 931
U 1169 ; WX 602 ; N uni0491 ; G 932
U 1170 ; WX 602 ; N uni0492 ; G 933
U 1171 ; WX 602 ; N uni0493 ; G 934
U 1172 ; WX 602 ; N uni0494 ; G 935
U 1173 ; WX 602 ; N uni0495 ; G 936
U 1174 ; WX 602 ; N uni0496 ; G 937
U 1175 ; WX 602 ; N uni0497 ; G 938
U 1176 ; WX 602 ; N uni0498 ; G 939
U 1177 ; WX 602 ; N uni0499 ; G 940
U 1178 ; WX 602 ; N uni049A ; G 941
U 1179 ; WX 602 ; N uni049B ; G 942
U 1186 ; WX 602 ; N uni04A2 ; G 943
U 1187 ; WX 602 ; N uni04A3 ; G 944
U 1188 ; WX 602 ; N uni04A4 ; G 945
U 1189 ; WX 602 ; N uni04A5 ; G 946
U 1194 ; WX 602 ; N uni04AA ; G 947
U 1195 ; WX 602 ; N uni04AB ; G 948
U 1196 ; WX 602 ; N uni04AC ; G 949
U 1197 ; WX 602 ; N uni04AD ; G 950
U 1198 ; WX 602 ; N uni04AE ; G 951
U 1199 ; WX 602 ; N uni04AF ; G 952
U 1200 ; WX 602 ; N uni04B0 ; G 953
U 1201 ; WX 602 ; N uni04B1 ; G 954
U 1202 ; WX 602 ; N uni04B2 ; G 955
U 1203 ; WX 602 ; N uni04B3 ; G 956
U 1210 ; WX 602 ; N uni04BA ; G 957
U 1211 ; WX 602 ; N uni04BB ; G 958
U 1216 ; WX 602 ; N uni04C0 ; G 959
U 1217 ; WX 602 ; N uni04C1 ; G 960
U 1218 ; WX 602 ; N uni04C2 ; G 961
U 1219 ; WX 602 ; N uni04C3 ; G 962
U 1220 ; WX 602 ; N uni04C4 ; G 963
U 1223 ; WX 602 ; N uni04C7 ; G 964
U 1224 ; WX 602 ; N uni04C8 ; G 965
U 1227 ; WX 602 ; N uni04CB ; G 966
U 1228 ; WX 602 ; N uni04CC ; G 967
U 1231 ; WX 602 ; N uni04CF ; G 968
U 1232 ; WX 602 ; N uni04D0 ; G 969
U 1233 ; WX 602 ; N uni04D1 ; G 970
U 1234 ; WX 602 ; N uni04D2 ; G 971
U 1235 ; WX 602 ; N uni04D3 ; G 972
U 1236 ; WX 602 ; N uni04D4 ; G 973
U 1237 ; WX 602 ; N uni04D5 ; G 974
U 1238 ; WX 602 ; N uni04D6 ; G 975
U 1239 ; WX 602 ; N uni04D7 ; G 976
U 1240 ; WX 602 ; N uni04D8 ; G 977
U 1241 ; WX 602 ; N uni04D9 ; G 978
U 1242 ; WX 602 ; N uni04DA ; G 979
U 1243 ; WX 602 ; N uni04DB ; G 980
U 1244 ; WX 602 ; N uni04DC ; G 981
U 1245 ; WX 602 ; N uni04DD ; G 982
U 1246 ; WX 602 ; N uni04DE ; G 983
U 1247 ; WX 602 ; N uni04DF ; G 984
U 1248 ; WX 602 ; N uni04E0 ; G 985
U 1249 ; WX 602 ; N uni04E1 ; G 986
U 1250 ; WX 602 ; N uni04E2 ; G 987
U 1251 ; WX 602 ; N uni04E3 ; G 988
U 1252 ; WX 602 ; N uni04E4 ; G 989
U 1253 ; WX 602 ; N uni04E5 ; G 990
U 1254 ; WX 602 ; N uni04E6 ; G 991
U 1255 ; WX 602 ; N uni04E7 ; G 992
U 1256 ; WX 602 ; N uni04E8 ; G 993
U 1257 ; WX 602 ; N uni04E9 ; G 994
U 1258 ; WX 602 ; N uni04EA ; G 995
U 1259 ; WX 602 ; N uni04EB ; G 996
U 1260 ; WX 602 ; N uni04EC ; G 997
U 1261 ; WX 602 ; N uni04ED ; G 998
U 1262 ; WX 602 ; N uni04EE ; G 999
U 1263 ; WX 602 ; N uni04EF ; G 1000
U 1264 ; WX 602 ; N uni04F0 ; G 1001
U 1265 ; WX 602 ; N uni04F1 ; G 1002
U 1266 ; WX 602 ; N uni04F2 ; G 1003
U 1267 ; WX 602 ; N uni04F3 ; G 1004
U 1268 ; WX 602 ; N uni04F4 ; G 1005
U 1269 ; WX 602 ; N uni04F5 ; G 1006
U 1270 ; WX 602 ; N uni04F6 ; G 1007
U 1271 ; WX 602 ; N uni04F7 ; G 1008
U 1272 ; WX 602 ; N uni04F8 ; G 1009
U 1273 ; WX 602 ; N uni04F9 ; G 1010
U 1296 ; WX 602 ; N uni0510 ; G 1011
U 1297 ; WX 602 ; N uni0511 ; G 1012
U 1306 ; WX 602 ; N uni051A ; G 1013
U 1307 ; WX 602 ; N uni051B ; G 1014
U 1308 ; WX 602 ; N uni051C ; G 1015
U 1309 ; WX 602 ; N uni051D ; G 1016
U 1329 ; WX 602 ; N uni0531 ; G 1017
U 1330 ; WX 602 ; N uni0532 ; G 1018
U 1331 ; WX 602 ; N uni0533 ; G 1019
U 1332 ; WX 602 ; N uni0534 ; G 1020
U 1333 ; WX 602 ; N uni0535 ; G 1021
U 1334 ; WX 602 ; N uni0536 ; G 1022
U 1335 ; WX 602 ; N uni0537 ; G 1023
U 1336 ; WX 602 ; N uni0538 ; G 1024
U 1337 ; WX 602 ; N uni0539 ; G 1025
U 1338 ; WX 602 ; N uni053A ; G 1026
U 1339 ; WX 602 ; N uni053B ; G 1027
U 1340 ; WX 602 ; N uni053C ; G 1028
U 1341 ; WX 602 ; N uni053D ; G 1029
U 1342 ; WX 602 ; N uni053E ; G 1030
U 1343 ; WX 602 ; N uni053F ; G 1031
U 1344 ; WX 602 ; N uni0540 ; G 1032
U 1345 ; WX 602 ; N uni0541 ; G 1033
U 1346 ; WX 602 ; N uni0542 ; G 1034
U 1347 ; WX 602 ; N uni0543 ; G 1035
U 1348 ; WX 602 ; N uni0544 ; G 1036
U 1349 ; WX 602 ; N uni0545 ; G 1037
U 1350 ; WX 602 ; N uni0546 ; G 1038
U 1351 ; WX 602 ; N uni0547 ; G 1039
U 1352 ; WX 602 ; N uni0548 ; G 1040
U 1353 ; WX 602 ; N uni0549 ; G 1041
U 1354 ; WX 602 ; N uni054A ; G 1042
U 1355 ; WX 602 ; N uni054B ; G 1043
U 1356 ; WX 602 ; N uni054C ; G 1044
U 1357 ; WX 602 ; N uni054D ; G 1045
U 1358 ; WX 602 ; N uni054E ; G 1046
U 1359 ; WX 602 ; N uni054F ; G 1047
U 1360 ; WX 602 ; N uni0550 ; G 1048
U 1361 ; WX 602 ; N uni0551 ; G 1049
U 1362 ; WX 602 ; N uni0552 ; G 1050
U 1363 ; WX 602 ; N uni0553 ; G 1051
U 1364 ; WX 602 ; N uni0554 ; G 1052
U 1365 ; WX 602 ; N uni0555 ; G 1053
U 1366 ; WX 602 ; N uni0556 ; G 1054
U 1369 ; WX 602 ; N uni0559 ; G 1055
U 1370 ; WX 602 ; N uni055A ; G 1056
U 1371 ; WX 602 ; N uni055B ; G 1057
U 1372 ; WX 602 ; N uni055C ; G 1058
U 1373 ; WX 602 ; N uni055D ; G 1059
U 1374 ; WX 602 ; N uni055E ; G 1060
U 1375 ; WX 602 ; N uni055F ; G 1061
U 1377 ; WX 602 ; N uni0561 ; G 1062
U 1378 ; WX 602 ; N uni0562 ; G 1063
U 1379 ; WX 602 ; N uni0563 ; G 1064
U 1380 ; WX 602 ; N uni0564 ; G 1065
U 1381 ; WX 602 ; N uni0565 ; G 1066
U 1382 ; WX 602 ; N uni0566 ; G 1067
U 1383 ; WX 602 ; N uni0567 ; G 1068
U 1384 ; WX 602 ; N uni0568 ; G 1069
U 1385 ; WX 602 ; N uni0569 ; G 1070
U 1386 ; WX 602 ; N uni056A ; G 1071
U 1387 ; WX 602 ; N uni056B ; G 1072
U 1388 ; WX 602 ; N uni056C ; G 1073
U 1389 ; WX 602 ; N uni056D ; G 1074
U 1390 ; WX 602 ; N uni056E ; G 1075
U 1391 ; WX 602 ; N uni056F ; G 1076
U 1392 ; WX 602 ; N uni0570 ; G 1077
U 1393 ; WX 602 ; N uni0571 ; G 1078
U 1394 ; WX 602 ; N uni0572 ; G 1079
U 1395 ; WX 602 ; N uni0573 ; G 1080
U 1396 ; WX 602 ; N uni0574 ; G 1081
U 1397 ; WX 602 ; N uni0575 ; G 1082
U 1398 ; WX 602 ; N uni0576 ; G 1083
U 1399 ; WX 602 ; N uni0577 ; G 1084
U 1400 ; WX 602 ; N uni0578 ; G 1085
U 1401 ; WX 602 ; N uni0579 ; G 1086
U 1402 ; WX 602 ; N uni057A ; G 1087
U 1403 ; WX 602 ; N uni057B ; G 1088
U 1404 ; WX 602 ; N uni057C ; G 1089
U 1405 ; WX 602 ; N uni057D ; G 1090
U 1406 ; WX 602 ; N uni057E ; G 1091
U 1407 ; WX 602 ; N uni057F ; G 1092
U 1408 ; WX 602 ; N uni0580 ; G 1093
U 1409 ; WX 602 ; N uni0581 ; G 1094
U 1410 ; WX 602 ; N uni0582 ; G 1095
U 1411 ; WX 602 ; N uni0583 ; G 1096
U 1412 ; WX 602 ; N uni0584 ; G 1097
U 1413 ; WX 602 ; N uni0585 ; G 1098
U 1414 ; WX 602 ; N uni0586 ; G 1099
U 1415 ; WX 602 ; N uni0587 ; G 1100
U 1417 ; WX 602 ; N uni0589 ; G 1101
U 1418 ; WX 602 ; N uni058A ; G 1102
U 1542 ; WX 602 ; N uni0606 ; G 1103
U 1543 ; WX 602 ; N uni0607 ; G 1104
U 1545 ; WX 602 ; N uni0609 ; G 1105
U 1546 ; WX 602 ; N uni060A ; G 1106
U 1548 ; WX 602 ; N uni060C ; G 1107
U 1557 ; WX 602 ; N uni0615 ; G 1108
U 1563 ; WX 602 ; N uni061B ; G 1109
U 1567 ; WX 602 ; N uni061F ; G 1110
U 1569 ; WX 602 ; N uni0621 ; G 1111
U 1570 ; WX 602 ; N uni0622 ; G 1112
U 1571 ; WX 602 ; N uni0623 ; G 1113
U 1572 ; WX 602 ; N uni0624 ; G 1114
U 1573 ; WX 602 ; N uni0625 ; G 1115
U 1574 ; WX 602 ; N uni0626 ; G 1116
U 1575 ; WX 602 ; N uni0627 ; G 1117
U 1576 ; WX 602 ; N uni0628 ; G 1118
U 1577 ; WX 602 ; N uni0629 ; G 1119
U 1578 ; WX 602 ; N uni062A ; G 1120
U 1579 ; WX 602 ; N uni062B ; G 1121
U 1580 ; WX 602 ; N uni062C ; G 1122
U 1581 ; WX 602 ; N uni062D ; G 1123
U 1582 ; WX 602 ; N uni062E ; G 1124
U 1583 ; WX 602 ; N uni062F ; G 1125
U 1584 ; WX 602 ; N uni0630 ; G 1126
U 1585 ; WX 602 ; N uni0631 ; G 1127
U 1586 ; WX 602 ; N uni0632 ; G 1128
U 1587 ; WX 602 ; N uni0633 ; G 1129
U 1588 ; WX 602 ; N uni0634 ; G 1130
U 1589 ; WX 602 ; N uni0635 ; G 1131
U 1590 ; WX 602 ; N uni0636 ; G 1132
U 1591 ; WX 602 ; N uni0637 ; G 1133
U 1592 ; WX 602 ; N uni0638 ; G 1134
U 1593 ; WX 602 ; N uni0639 ; G 1135
U 1594 ; WX 602 ; N uni063A ; G 1136
U 1600 ; WX 602 ; N uni0640 ; G 1137
U 1601 ; WX 602 ; N uni0641 ; G 1138
U 1602 ; WX 602 ; N uni0642 ; G 1139
U 1603 ; WX 602 ; N uni0643 ; G 1140
U 1604 ; WX 602 ; N uni0644 ; G 1141
U 1605 ; WX 602 ; N uni0645 ; G 1142
U 1606 ; WX 602 ; N uni0646 ; G 1143
U 1607 ; WX 602 ; N uni0647 ; G 1144
U 1608 ; WX 602 ; N uni0648 ; G 1145
U 1609 ; WX 602 ; N uni0649 ; G 1146
U 1610 ; WX 602 ; N uni064A ; G 1147
U 1611 ; WX 602 ; N uni064B ; G 1148
U 1612 ; WX 602 ; N uni064C ; G 1149
U 1613 ; WX 602 ; N uni064D ; G 1150
U 1614 ; WX 602 ; N uni064E ; G 1151
U 1615 ; WX 602 ; N uni064F ; G 1152
U 1616 ; WX 602 ; N uni0650 ; G 1153
U 1617 ; WX 602 ; N uni0651 ; G 1154
U 1618 ; WX 602 ; N uni0652 ; G 1155
U 1619 ; WX 602 ; N uni0653 ; G 1156
U 1620 ; WX 602 ; N uni0654 ; G 1157
U 1621 ; WX 602 ; N uni0655 ; G 1158
U 1626 ; WX 602 ; N uni065A ; G 1159
U 1632 ; WX 602 ; N uni0660 ; G 1160
U 1633 ; WX 602 ; N uni0661 ; G 1161
U 1634 ; WX 602 ; N uni0662 ; G 1162
U 1635 ; WX 602 ; N uni0663 ; G 1163
U 1636 ; WX 602 ; N uni0664 ; G 1164
U 1637 ; WX 602 ; N uni0665 ; G 1165
U 1638 ; WX 602 ; N uni0666 ; G 1166
U 1639 ; WX 602 ; N uni0667 ; G 1167
U 1640 ; WX 602 ; N uni0668 ; G 1168
U 1641 ; WX 602 ; N uni0669 ; G 1169
U 1642 ; WX 602 ; N uni066A ; G 1170
U 1643 ; WX 602 ; N uni066B ; G 1171
U 1644 ; WX 602 ; N uni066C ; G 1172
U 1645 ; WX 602 ; N uni066D ; G 1173
U 1652 ; WX 602 ; N uni0674 ; G 1174
U 1657 ; WX 602 ; N uni0679 ; G 1175
U 1658 ; WX 602 ; N uni067A ; G 1176
U 1659 ; WX 602 ; N uni067B ; G 1177
U 1662 ; WX 602 ; N uni067E ; G 1178
U 1663 ; WX 602 ; N uni067F ; G 1179
U 1664 ; WX 602 ; N uni0680 ; G 1180
U 1667 ; WX 602 ; N uni0683 ; G 1181
U 1668 ; WX 602 ; N uni0684 ; G 1182
U 1670 ; WX 602 ; N uni0686 ; G 1183
U 1671 ; WX 602 ; N uni0687 ; G 1184
U 1681 ; WX 602 ; N uni0691 ; G 1185
U 1688 ; WX 602 ; N uni0698 ; G 1186
U 1700 ; WX 602 ; N uni06A4 ; G 1187
U 1705 ; WX 602 ; N uni06A9 ; G 1188
U 1711 ; WX 602 ; N uni06AF ; G 1189
U 1726 ; WX 602 ; N uni06BE ; G 1190
U 1740 ; WX 602 ; N uni06CC ; G 1191
U 1776 ; WX 602 ; N uni06F0 ; G 1192
U 1777 ; WX 602 ; N uni06F1 ; G 1193
U 1778 ; WX 602 ; N uni06F2 ; G 1194
U 1779 ; WX 602 ; N uni06F3 ; G 1195
U 1780 ; WX 602 ; N uni06F4 ; G 1196
U 1781 ; WX 602 ; N uni06F5 ; G 1197
U 1782 ; WX 602 ; N uni06F6 ; G 1198
U 1783 ; WX 602 ; N uni06F7 ; G 1199
U 1784 ; WX 602 ; N uni06F8 ; G 1200
U 1785 ; WX 602 ; N uni06F9 ; G 1201
U 3647 ; WX 602 ; N uni0E3F ; G 1202
U 3713 ; WX 602 ; N uni0E81 ; G 1203
U 3714 ; WX 602 ; N uni0E82 ; G 1204
U 3716 ; WX 602 ; N uni0E84 ; G 1205
U 3719 ; WX 602 ; N uni0E87 ; G 1206
U 3720 ; WX 602 ; N uni0E88 ; G 1207
U 3722 ; WX 602 ; N uni0E8A ; G 1208
U 3725 ; WX 602 ; N uni0E8D ; G 1209
U 3732 ; WX 602 ; N uni0E94 ; G 1210
U 3733 ; WX 602 ; N uni0E95 ; G 1211
U 3734 ; WX 602 ; N uni0E96 ; G 1212
U 3735 ; WX 602 ; N uni0E97 ; G 1213
U 3737 ; WX 602 ; N uni0E99 ; G 1214
U 3738 ; WX 602 ; N uni0E9A ; G 1215
U 3739 ; WX 602 ; N uni0E9B ; G 1216
U 3740 ; WX 602 ; N uni0E9C ; G 1217
U 3741 ; WX 602 ; N uni0E9D ; G 1218
U 3742 ; WX 602 ; N uni0E9E ; G 1219
U 3743 ; WX 602 ; N uni0E9F ; G 1220
U 3745 ; WX 602 ; N uni0EA1 ; G 1221
U 3746 ; WX 602 ; N uni0EA2 ; G 1222
U 3747 ; WX 602 ; N uni0EA3 ; G 1223
U 3749 ; WX 602 ; N uni0EA5 ; G 1224
U 3751 ; WX 602 ; N uni0EA7 ; G 1225
U 3754 ; WX 602 ; N uni0EAA ; G 1226
U 3755 ; WX 602 ; N uni0EAB ; G 1227
U 3757 ; WX 602 ; N uni0EAD ; G 1228
U 3758 ; WX 602 ; N uni0EAE ; G 1229
U 3759 ; WX 602 ; N uni0EAF ; G 1230
U 3760 ; WX 602 ; N uni0EB0 ; G 1231
U 3761 ; WX 602 ; N uni0EB1 ; G 1232
U 3762 ; WX 602 ; N uni0EB2 ; G 1233
U 3763 ; WX 602 ; N uni0EB3 ; G 1234
U 3764 ; WX 602 ; N uni0EB4 ; G 1235
U 3765 ; WX 602 ; N uni0EB5 ; G 1236
U 3766 ; WX 602 ; N uni0EB6 ; G 1237
U 3767 ; WX 602 ; N uni0EB7 ; G 1238
U 3768 ; WX 602 ; N uni0EB8 ; G 1239
U 3769 ; WX 602 ; N uni0EB9 ; G 1240
U 3771 ; WX 602 ; N uni0EBB ; G 1241
U 3772 ; WX 602 ; N uni0EBC ; G 1242
U 3784 ; WX 602 ; N uni0EC8 ; G 1243
U 3785 ; WX 602 ; N uni0EC9 ; G 1244
U 3786 ; WX 602 ; N uni0ECA ; G 1245
U 3787 ; WX 602 ; N uni0ECB ; G 1246
U 3788 ; WX 602 ; N uni0ECC ; G 1247
U 3789 ; WX 602 ; N uni0ECD ; G 1248
U 4304 ; WX 602 ; N uni10D0 ; G 1249
U 4305 ; WX 602 ; N uni10D1 ; G 1250
U 4306 ; WX 602 ; N uni10D2 ; G 1251
U 4307 ; WX 602 ; N uni10D3 ; G 1252
U 4308 ; WX 602 ; N uni10D4 ; G 1253
U 4309 ; WX 602 ; N uni10D5 ; G 1254
U 4310 ; WX 602 ; N uni10D6 ; G 1255
U 4311 ; WX 602 ; N uni10D7 ; G 1256
U 4312 ; WX 602 ; N uni10D8 ; G 1257
U 4313 ; WX 602 ; N uni10D9 ; G 1258
U 4314 ; WX 602 ; N uni10DA ; G 1259
U 4315 ; WX 602 ; N uni10DB ; G 1260
U 4316 ; WX 602 ; N uni10DC ; G 1261
U 4317 ; WX 602 ; N uni10DD ; G 1262
U 4318 ; WX 602 ; N uni10DE ; G 1263
U 4319 ; WX 602 ; N uni10DF ; G 1264
U 4320 ; WX 602 ; N uni10E0 ; G 1265
U 4321 ; WX 602 ; N uni10E1 ; G 1266
U 4322 ; WX 602 ; N uni10E2 ; G 1267
U 4323 ; WX 602 ; N uni10E3 ; G 1268
U 4324 ; WX 602 ; N uni10E4 ; G 1269
U 4325 ; WX 602 ; N uni10E5 ; G 1270
U 4326 ; WX 602 ; N uni10E6 ; G 1271
U 4327 ; WX 602 ; N uni10E7 ; G 1272
U 4328 ; WX 602 ; N uni10E8 ; G 1273
U 4329 ; WX 602 ; N uni10E9 ; G 1274
U 4330 ; WX 602 ; N uni10EA ; G 1275
U 4331 ; WX 602 ; N uni10EB ; G 1276
U 4332 ; WX 602 ; N uni10EC ; G 1277
U 4333 ; WX 602 ; N uni10ED ; G 1278
U 4334 ; WX 602 ; N uni10EE ; G 1279
U 4335 ; WX 602 ; N uni10EF ; G 1280
U 4336 ; WX 602 ; N uni10F0 ; G 1281
U 4337 ; WX 602 ; N uni10F1 ; G 1282
U 4338 ; WX 602 ; N uni10F2 ; G 1283
U 4339 ; WX 602 ; N uni10F3 ; G 1284
U 4340 ; WX 602 ; N uni10F4 ; G 1285
U 4341 ; WX 602 ; N uni10F5 ; G 1286
U 4342 ; WX 602 ; N uni10F6 ; G 1287
U 4343 ; WX 602 ; N uni10F7 ; G 1288
U 4344 ; WX 602 ; N uni10F8 ; G 1289
U 4345 ; WX 602 ; N uni10F9 ; G 1290
U 4346 ; WX 602 ; N uni10FA ; G 1291
U 4347 ; WX 602 ; N uni10FB ; G 1292
U 4348 ; WX 602 ; N uni10FC ; G 1293
U 7426 ; WX 602 ; N uni1D02 ; G 1294
U 7432 ; WX 602 ; N uni1D08 ; G 1295
U 7433 ; WX 602 ; N uni1D09 ; G 1296
U 7444 ; WX 602 ; N uni1D14 ; G 1297
U 7446 ; WX 602 ; N uni1D16 ; G 1298
U 7447 ; WX 602 ; N uni1D17 ; G 1299
U 7453 ; WX 602 ; N uni1D1D ; G 1300
U 7454 ; WX 602 ; N uni1D1E ; G 1301
U 7455 ; WX 602 ; N uni1D1F ; G 1302
U 7468 ; WX 602 ; N uni1D2C ; G 1303
U 7469 ; WX 602 ; N uni1D2D ; G 1304
U 7470 ; WX 602 ; N uni1D2E ; G 1305
U 7472 ; WX 602 ; N uni1D30 ; G 1306
U 7473 ; WX 602 ; N uni1D31 ; G 1307
U 7474 ; WX 602 ; N uni1D32 ; G 1308
U 7475 ; WX 602 ; N uni1D33 ; G 1309
U 7476 ; WX 602 ; N uni1D34 ; G 1310
U 7477 ; WX 602 ; N uni1D35 ; G 1311
U 7478 ; WX 602 ; N uni1D36 ; G 1312
U 7479 ; WX 602 ; N uni1D37 ; G 1313
U 7480 ; WX 602 ; N uni1D38 ; G 1314
U 7481 ; WX 602 ; N uni1D39 ; G 1315
U 7482 ; WX 602 ; N uni1D3A ; G 1316
U 7483 ; WX 602 ; N uni1D3B ; G 1317
U 7484 ; WX 602 ; N uni1D3C ; G 1318
U 7486 ; WX 602 ; N uni1D3E ; G 1319
U 7487 ; WX 602 ; N uni1D3F ; G 1320
U 7488 ; WX 602 ; N uni1D40 ; G 1321
U 7489 ; WX 602 ; N uni1D41 ; G 1322
U 7490 ; WX 602 ; N uni1D42 ; G 1323
U 7491 ; WX 602 ; N uni1D43 ; G 1324
U 7492 ; WX 602 ; N uni1D44 ; G 1325
U 7493 ; WX 602 ; N uni1D45 ; G 1326
U 7494 ; WX 602 ; N uni1D46 ; G 1327
U 7495 ; WX 602 ; N uni1D47 ; G 1328
U 7496 ; WX 602 ; N uni1D48 ; G 1329
U 7497 ; WX 602 ; N uni1D49 ; G 1330
U 7498 ; WX 602 ; N uni1D4A ; G 1331
U 7499 ; WX 602 ; N uni1D4B ; G 1332
U 7500 ; WX 602 ; N uni1D4C ; G 1333
U 7501 ; WX 602 ; N uni1D4D ; G 1334
U 7502 ; WX 602 ; N uni1D4E ; G 1335
U 7503 ; WX 602 ; N uni1D4F ; G 1336
U 7504 ; WX 602 ; N uni1D50 ; G 1337
U 7505 ; WX 602 ; N uni1D51 ; G 1338
U 7506 ; WX 602 ; N uni1D52 ; G 1339
U 7507 ; WX 602 ; N uni1D53 ; G 1340
U 7508 ; WX 602 ; N uni1D54 ; G 1341
U 7509 ; WX 602 ; N uni1D55 ; G 1342
U 7510 ; WX 602 ; N uni1D56 ; G 1343
U 7511 ; WX 602 ; N uni1D57 ; G 1344
U 7512 ; WX 602 ; N uni1D58 ; G 1345
U 7513 ; WX 602 ; N uni1D59 ; G 1346
U 7514 ; WX 602 ; N uni1D5A ; G 1347
U 7515 ; WX 602 ; N uni1D5B ; G 1348
U 7522 ; WX 602 ; N uni1D62 ; G 1349
U 7523 ; WX 602 ; N uni1D63 ; G 1350
U 7524 ; WX 602 ; N uni1D64 ; G 1351
U 7525 ; WX 602 ; N uni1D65 ; G 1352
U 7543 ; WX 602 ; N uni1D77 ; G 1353
U 7544 ; WX 602 ; N uni1D78 ; G 1354
U 7547 ; WX 602 ; N uni1D7B ; G 1355
U 7557 ; WX 602 ; N uni1D85 ; G 1356
U 7579 ; WX 602 ; N uni1D9B ; G 1357
U 7580 ; WX 602 ; N uni1D9C ; G 1358
U 7581 ; WX 602 ; N uni1D9D ; G 1359
U 7582 ; WX 602 ; N uni1D9E ; G 1360
U 7583 ; WX 602 ; N uni1D9F ; G 1361
U 7584 ; WX 602 ; N uni1DA0 ; G 1362
U 7585 ; WX 602 ; N uni1DA1 ; G 1363
U 7586 ; WX 602 ; N uni1DA2 ; G 1364
U 7587 ; WX 602 ; N uni1DA3 ; G 1365
U 7588 ; WX 602 ; N uni1DA4 ; G 1366
U 7589 ; WX 602 ; N uni1DA5 ; G 1367
U 7590 ; WX 602 ; N uni1DA6 ; G 1368
U 7591 ; WX 602 ; N uni1DA7 ; G 1369
U 7592 ; WX 602 ; N uni1DA8 ; G 1370
U 7593 ; WX 602 ; N uni1DA9 ; G 1371
U 7594 ; WX 602 ; N uni1DAA ; G 1372
U 7595 ; WX 602 ; N uni1DAB ; G 1373
U 7596 ; WX 602 ; N uni1DAC ; G 1374
U 7597 ; WX 602 ; N uni1DAD ; G 1375
U 7598 ; WX 602 ; N uni1DAE ; G 1376
U 7599 ; WX 602 ; N uni1DAF ; G 1377
U 7600 ; WX 602 ; N uni1DB0 ; G 1378
U 7601 ; WX 602 ; N uni1DB1 ; G 1379
U 7602 ; WX 602 ; N uni1DB2 ; G 1380
U 7603 ; WX 602 ; N uni1DB3 ; G 1381
U 7604 ; WX 602 ; N uni1DB4 ; G 1382
U 7605 ; WX 602 ; N uni1DB5 ; G 1383
U 7606 ; WX 602 ; N uni1DB6 ; G 1384
U 7607 ; WX 602 ; N uni1DB7 ; G 1385
U 7609 ; WX 602 ; N uni1DB9 ; G 1386
U 7610 ; WX 602 ; N uni1DBA ; G 1387
U 7611 ; WX 602 ; N uni1DBB ; G 1388
U 7612 ; WX 602 ; N uni1DBC ; G 1389
U 7613 ; WX 602 ; N uni1DBD ; G 1390
U 7614 ; WX 602 ; N uni1DBE ; G 1391
U 7615 ; WX 602 ; N uni1DBF ; G 1392
U 7680 ; WX 602 ; N uni1E00 ; G 1393
U 7681 ; WX 602 ; N uni1E01 ; G 1394
U 7682 ; WX 602 ; N uni1E02 ; G 1395
U 7683 ; WX 602 ; N uni1E03 ; G 1396
U 7684 ; WX 602 ; N uni1E04 ; G 1397
U 7685 ; WX 602 ; N uni1E05 ; G 1398
U 7686 ; WX 602 ; N uni1E06 ; G 1399
U 7687 ; WX 602 ; N uni1E07 ; G 1400
U 7688 ; WX 602 ; N uni1E08 ; G 1401
U 7689 ; WX 602 ; N uni1E09 ; G 1402
U 7690 ; WX 602 ; N uni1E0A ; G 1403
U 7691 ; WX 602 ; N uni1E0B ; G 1404
U 7692 ; WX 602 ; N uni1E0C ; G 1405
U 7693 ; WX 602 ; N uni1E0D ; G 1406
U 7694 ; WX 602 ; N uni1E0E ; G 1407
U 7695 ; WX 602 ; N uni1E0F ; G 1408
U 7696 ; WX 602 ; N uni1E10 ; G 1409
U 7697 ; WX 602 ; N uni1E11 ; G 1410
U 7698 ; WX 602 ; N uni1E12 ; G 1411
U 7699 ; WX 602 ; N uni1E13 ; G 1412
U 7704 ; WX 602 ; N uni1E18 ; G 1413
U 7705 ; WX 602 ; N uni1E19 ; G 1414
U 7706 ; WX 602 ; N uni1E1A ; G 1415
U 7707 ; WX 602 ; N uni1E1B ; G 1416
U 7708 ; WX 602 ; N uni1E1C ; G 1417
U 7709 ; WX 602 ; N uni1E1D ; G 1418
U 7710 ; WX 602 ; N uni1E1E ; G 1419
U 7711 ; WX 602 ; N uni1E1F ; G 1420
U 7712 ; WX 602 ; N uni1E20 ; G 1421
U 7713 ; WX 602 ; N uni1E21 ; G 1422
U 7714 ; WX 602 ; N uni1E22 ; G 1423
U 7715 ; WX 602 ; N uni1E23 ; G 1424
U 7716 ; WX 602 ; N uni1E24 ; G 1425
U 7717 ; WX 602 ; N uni1E25 ; G 1426
U 7718 ; WX 602 ; N uni1E26 ; G 1427
U 7719 ; WX 602 ; N uni1E27 ; G 1428
U 7720 ; WX 602 ; N uni1E28 ; G 1429
U 7721 ; WX 602 ; N uni1E29 ; G 1430
U 7722 ; WX 602 ; N uni1E2A ; G 1431
U 7723 ; WX 602 ; N uni1E2B ; G 1432
U 7724 ; WX 602 ; N uni1E2C ; G 1433
U 7725 ; WX 602 ; N uni1E2D ; G 1434
U 7728 ; WX 602 ; N uni1E30 ; G 1435
U 7729 ; WX 602 ; N uni1E31 ; G 1436
U 7730 ; WX 602 ; N uni1E32 ; G 1437
U 7731 ; WX 602 ; N uni1E33 ; G 1438
U 7732 ; WX 602 ; N uni1E34 ; G 1439
U 7733 ; WX 602 ; N uni1E35 ; G 1440
U 7734 ; WX 602 ; N uni1E36 ; G 1441
U 7735 ; WX 602 ; N uni1E37 ; G 1442
U 7736 ; WX 602 ; N uni1E38 ; G 1443
U 7737 ; WX 602 ; N uni1E39 ; G 1444
U 7738 ; WX 602 ; N uni1E3A ; G 1445
U 7739 ; WX 602 ; N uni1E3B ; G 1446
U 7740 ; WX 602 ; N uni1E3C ; G 1447
U 7741 ; WX 602 ; N uni1E3D ; G 1448
U 7742 ; WX 602 ; N uni1E3E ; G 1449
U 7743 ; WX 602 ; N uni1E3F ; G 1450
U 7744 ; WX 602 ; N uni1E40 ; G 1451
U 7745 ; WX 602 ; N uni1E41 ; G 1452
U 7746 ; WX 602 ; N uni1E42 ; G 1453
U 7747 ; WX 602 ; N uni1E43 ; G 1454
U 7748 ; WX 602 ; N uni1E44 ; G 1455
U 7749 ; WX 602 ; N uni1E45 ; G 1456
U 7750 ; WX 602 ; N uni1E46 ; G 1457
U 7751 ; WX 602 ; N uni1E47 ; G 1458
U 7752 ; WX 602 ; N uni1E48 ; G 1459
U 7753 ; WX 602 ; N uni1E49 ; G 1460
U 7754 ; WX 602 ; N uni1E4A ; G 1461
U 7755 ; WX 602 ; N uni1E4B ; G 1462
U 7756 ; WX 602 ; N uni1E4C ; G 1463
U 7757 ; WX 602 ; N uni1E4D ; G 1464
U 7764 ; WX 602 ; N uni1E54 ; G 1465
U 7765 ; WX 602 ; N uni1E55 ; G 1466
U 7766 ; WX 602 ; N uni1E56 ; G 1467
U 7767 ; WX 602 ; N uni1E57 ; G 1468
U 7768 ; WX 602 ; N uni1E58 ; G 1469
U 7769 ; WX 602 ; N uni1E59 ; G 1470
U 7770 ; WX 602 ; N uni1E5A ; G 1471
U 7771 ; WX 602 ; N uni1E5B ; G 1472
U 7772 ; WX 602 ; N uni1E5C ; G 1473
U 7773 ; WX 602 ; N uni1E5D ; G 1474
U 7774 ; WX 602 ; N uni1E5E ; G 1475
U 7775 ; WX 602 ; N uni1E5F ; G 1476
U 7776 ; WX 602 ; N uni1E60 ; G 1477
U 7777 ; WX 602 ; N uni1E61 ; G 1478
U 7778 ; WX 602 ; N uni1E62 ; G 1479
U 7779 ; WX 602 ; N uni1E63 ; G 1480
U 7784 ; WX 602 ; N uni1E68 ; G 1481
U 7785 ; WX 602 ; N uni1E69 ; G 1482
U 7786 ; WX 602 ; N uni1E6A ; G 1483
U 7787 ; WX 602 ; N uni1E6B ; G 1484
U 7788 ; WX 602 ; N uni1E6C ; G 1485
U 7789 ; WX 602 ; N uni1E6D ; G 1486
U 7790 ; WX 602 ; N uni1E6E ; G 1487
U 7791 ; WX 602 ; N uni1E6F ; G 1488
U 7792 ; WX 602 ; N uni1E70 ; G 1489
U 7793 ; WX 602 ; N uni1E71 ; G 1490
U 7794 ; WX 602 ; N uni1E72 ; G 1491
U 7795 ; WX 602 ; N uni1E73 ; G 1492
U 7796 ; WX 602 ; N uni1E74 ; G 1493
U 7797 ; WX 602 ; N uni1E75 ; G 1494
U 7798 ; WX 602 ; N uni1E76 ; G 1495
U 7799 ; WX 602 ; N uni1E77 ; G 1496
U 7800 ; WX 602 ; N uni1E78 ; G 1497
U 7801 ; WX 602 ; N uni1E79 ; G 1498
U 7804 ; WX 602 ; N uni1E7C ; G 1499
U 7805 ; WX 602 ; N uni1E7D ; G 1500
U 7806 ; WX 602 ; N uni1E7E ; G 1501
U 7807 ; WX 602 ; N uni1E7F ; G 1502
U 7808 ; WX 602 ; N Wgrave ; G 1503
U 7809 ; WX 602 ; N wgrave ; G 1504
U 7810 ; WX 602 ; N Wacute ; G 1505
U 7811 ; WX 602 ; N wacute ; G 1506
U 7812 ; WX 602 ; N Wdieresis ; G 1507
U 7813 ; WX 602 ; N wdieresis ; G 1508
U 7814 ; WX 602 ; N uni1E86 ; G 1509
U 7815 ; WX 602 ; N uni1E87 ; G 1510
U 7816 ; WX 602 ; N uni1E88 ; G 1511
U 7817 ; WX 602 ; N uni1E89 ; G 1512
U 7818 ; WX 602 ; N uni1E8A ; G 1513
U 7819 ; WX 602 ; N uni1E8B ; G 1514
U 7820 ; WX 602 ; N uni1E8C ; G 1515
U 7821 ; WX 602 ; N uni1E8D ; G 1516
U 7822 ; WX 602 ; N uni1E8E ; G 1517
U 7823 ; WX 602 ; N uni1E8F ; G 1518
U 7824 ; WX 602 ; N uni1E90 ; G 1519
U 7825 ; WX 602 ; N uni1E91 ; G 1520
U 7826 ; WX 602 ; N uni1E92 ; G 1521
U 7827 ; WX 602 ; N uni1E93 ; G 1522
U 7828 ; WX 602 ; N uni1E94 ; G 1523
U 7829 ; WX 602 ; N uni1E95 ; G 1524
U 7830 ; WX 602 ; N uni1E96 ; G 1525
U 7831 ; WX 602 ; N uni1E97 ; G 1526
U 7832 ; WX 602 ; N uni1E98 ; G 1527
U 7833 ; WX 602 ; N uni1E99 ; G 1528
U 7835 ; WX 602 ; N uni1E9B ; G 1529
U 7839 ; WX 602 ; N uni1E9F ; G 1530
U 7840 ; WX 602 ; N uni1EA0 ; G 1531
U 7841 ; WX 602 ; N uni1EA1 ; G 1532
U 7852 ; WX 602 ; N uni1EAC ; G 1533
U 7853 ; WX 602 ; N uni1EAD ; G 1534
U 7856 ; WX 602 ; N uni1EB0 ; G 1535
U 7857 ; WX 602 ; N uni1EB1 ; G 1536
U 7862 ; WX 602 ; N uni1EB6 ; G 1537
U 7863 ; WX 602 ; N uni1EB7 ; G 1538
U 7864 ; WX 602 ; N uni1EB8 ; G 1539
U 7865 ; WX 602 ; N uni1EB9 ; G 1540
U 7868 ; WX 602 ; N uni1EBC ; G 1541
U 7869 ; WX 602 ; N uni1EBD ; G 1542
U 7878 ; WX 602 ; N uni1EC6 ; G 1543
U 7879 ; WX 602 ; N uni1EC7 ; G 1544
U 7882 ; WX 602 ; N uni1ECA ; G 1545
U 7883 ; WX 602 ; N uni1ECB ; G 1546
U 7884 ; WX 602 ; N uni1ECC ; G 1547
U 7885 ; WX 602 ; N uni1ECD ; G 1548
U 7896 ; WX 602 ; N uni1ED8 ; G 1549
U 7897 ; WX 602 ; N uni1ED9 ; G 1550
U 7898 ; WX 602 ; N uni1EDA ; G 1551
U 7899 ; WX 602 ; N uni1EDB ; G 1552
U 7900 ; WX 602 ; N uni1EDC ; G 1553
U 7901 ; WX 602 ; N uni1EDD ; G 1554
U 7904 ; WX 602 ; N uni1EE0 ; G 1555
U 7905 ; WX 602 ; N uni1EE1 ; G 1556
U 7906 ; WX 602 ; N uni1EE2 ; G 1557
U 7907 ; WX 602 ; N uni1EE3 ; G 1558
U 7908 ; WX 602 ; N uni1EE4 ; G 1559
U 7909 ; WX 602 ; N uni1EE5 ; G 1560
U 7912 ; WX 602 ; N uni1EE8 ; G 1561
U 7913 ; WX 602 ; N uni1EE9 ; G 1562
U 7914 ; WX 602 ; N uni1EEA ; G 1563
U 7915 ; WX 602 ; N uni1EEB ; G 1564
U 7918 ; WX 602 ; N uni1EEE ; G 1565
U 7919 ; WX 602 ; N uni1EEF ; G 1566
U 7920 ; WX 602 ; N uni1EF0 ; G 1567
U 7921 ; WX 602 ; N uni1EF1 ; G 1568
U 7922 ; WX 602 ; N Ygrave ; G 1569
U 7923 ; WX 602 ; N ygrave ; G 1570
U 7924 ; WX 602 ; N uni1EF4 ; G 1571
U 7925 ; WX 602 ; N uni1EF5 ; G 1572
U 7928 ; WX 602 ; N uni1EF8 ; G 1573
U 7929 ; WX 602 ; N uni1EF9 ; G 1574
U 7936 ; WX 602 ; N uni1F00 ; G 1575
U 7937 ; WX 602 ; N uni1F01 ; G 1576
U 7938 ; WX 602 ; N uni1F02 ; G 1577
U 7939 ; WX 602 ; N uni1F03 ; G 1578
U 7940 ; WX 602 ; N uni1F04 ; G 1579
U 7941 ; WX 602 ; N uni1F05 ; G 1580
U 7942 ; WX 602 ; N uni1F06 ; G 1581
U 7943 ; WX 602 ; N uni1F07 ; G 1582
U 7944 ; WX 602 ; N uni1F08 ; G 1583
U 7945 ; WX 602 ; N uni1F09 ; G 1584
U 7946 ; WX 602 ; N uni1F0A ; G 1585
U 7947 ; WX 602 ; N uni1F0B ; G 1586
U 7948 ; WX 602 ; N uni1F0C ; G 1587
U 7949 ; WX 602 ; N uni1F0D ; G 1588
U 7950 ; WX 602 ; N uni1F0E ; G 1589
U 7951 ; WX 602 ; N uni1F0F ; G 1590
U 7952 ; WX 602 ; N uni1F10 ; G 1591
U 7953 ; WX 602 ; N uni1F11 ; G 1592
U 7954 ; WX 602 ; N uni1F12 ; G 1593
U 7955 ; WX 602 ; N uni1F13 ; G 1594
U 7956 ; WX 602 ; N uni1F14 ; G 1595
U 7957 ; WX 602 ; N uni1F15 ; G 1596
U 7960 ; WX 602 ; N uni1F18 ; G 1597
U 7961 ; WX 602 ; N uni1F19 ; G 1598
U 7962 ; WX 602 ; N uni1F1A ; G 1599
U 7963 ; WX 602 ; N uni1F1B ; G 1600
U 7964 ; WX 602 ; N uni1F1C ; G 1601
U 7965 ; WX 602 ; N uni1F1D ; G 1602
U 7968 ; WX 602 ; N uni1F20 ; G 1603
U 7969 ; WX 602 ; N uni1F21 ; G 1604
U 7970 ; WX 602 ; N uni1F22 ; G 1605
U 7971 ; WX 602 ; N uni1F23 ; G 1606
U 7972 ; WX 602 ; N uni1F24 ; G 1607
U 7973 ; WX 602 ; N uni1F25 ; G 1608
U 7974 ; WX 602 ; N uni1F26 ; G 1609
U 7975 ; WX 602 ; N uni1F27 ; G 1610
U 7976 ; WX 602 ; N uni1F28 ; G 1611
U 7977 ; WX 602 ; N uni1F29 ; G 1612
U 7978 ; WX 602 ; N uni1F2A ; G 1613
U 7979 ; WX 602 ; N uni1F2B ; G 1614
U 7980 ; WX 602 ; N uni1F2C ; G 1615
U 7981 ; WX 602 ; N uni1F2D ; G 1616
U 7982 ; WX 602 ; N uni1F2E ; G 1617
U 7983 ; WX 602 ; N uni1F2F ; G 1618
U 7984 ; WX 602 ; N uni1F30 ; G 1619
U 7985 ; WX 602 ; N uni1F31 ; G 1620
U 7986 ; WX 602 ; N uni1F32 ; G 1621
U 7987 ; WX 602 ; N uni1F33 ; G 1622
U 7988 ; WX 602 ; N uni1F34 ; G 1623
U 7989 ; WX 602 ; N uni1F35 ; G 1624
U 7990 ; WX 602 ; N uni1F36 ; G 1625
U 7991 ; WX 602 ; N uni1F37 ; G 1626
U 7992 ; WX 602 ; N uni1F38 ; G 1627
U 7993 ; WX 602 ; N uni1F39 ; G 1628
U 7994 ; WX 602 ; N uni1F3A ; G 1629
U 7995 ; WX 602 ; N uni1F3B ; G 1630
U 7996 ; WX 602 ; N uni1F3C ; G 1631
U 7997 ; WX 602 ; N uni1F3D ; G 1632
U 7998 ; WX 602 ; N uni1F3E ; G 1633
U 7999 ; WX 602 ; N uni1F3F ; G 1634
U 8000 ; WX 602 ; N uni1F40 ; G 1635
U 8001 ; WX 602 ; N uni1F41 ; G 1636
U 8002 ; WX 602 ; N uni1F42 ; G 1637
U 8003 ; WX 602 ; N uni1F43 ; G 1638
U 8004 ; WX 602 ; N uni1F44 ; G 1639
U 8005 ; WX 602 ; N uni1F45 ; G 1640
U 8008 ; WX 602 ; N uni1F48 ; G 1641
U 8009 ; WX 602 ; N uni1F49 ; G 1642
U 8010 ; WX 602 ; N uni1F4A ; G 1643
U 8011 ; WX 602 ; N uni1F4B ; G 1644
U 8012 ; WX 602 ; N uni1F4C ; G 1645
U 8013 ; WX 602 ; N uni1F4D ; G 1646
U 8016 ; WX 602 ; N uni1F50 ; G 1647
U 8017 ; WX 602 ; N uni1F51 ; G 1648
U 8018 ; WX 602 ; N uni1F52 ; G 1649
U 8019 ; WX 602 ; N uni1F53 ; G 1650
U 8020 ; WX 602 ; N uni1F54 ; G 1651
U 8021 ; WX 602 ; N uni1F55 ; G 1652
U 8022 ; WX 602 ; N uni1F56 ; G 1653
U 8023 ; WX 602 ; N uni1F57 ; G 1654
U 8025 ; WX 602 ; N uni1F59 ; G 1655
U 8027 ; WX 602 ; N uni1F5B ; G 1656
U 8029 ; WX 602 ; N uni1F5D ; G 1657
U 8031 ; WX 602 ; N uni1F5F ; G 1658
U 8032 ; WX 602 ; N uni1F60 ; G 1659
U 8033 ; WX 602 ; N uni1F61 ; G 1660
U 8034 ; WX 602 ; N uni1F62 ; G 1661
U 8035 ; WX 602 ; N uni1F63 ; G 1662
U 8036 ; WX 602 ; N uni1F64 ; G 1663
U 8037 ; WX 602 ; N uni1F65 ; G 1664
U 8038 ; WX 602 ; N uni1F66 ; G 1665
U 8039 ; WX 602 ; N uni1F67 ; G 1666
U 8040 ; WX 602 ; N uni1F68 ; G 1667
U 8041 ; WX 602 ; N uni1F69 ; G 1668
U 8042 ; WX 602 ; N uni1F6A ; G 1669
U 8043 ; WX 602 ; N uni1F6B ; G 1670
U 8044 ; WX 602 ; N uni1F6C ; G 1671
U 8045 ; WX 602 ; N uni1F6D ; G 1672
U 8046 ; WX 602 ; N uni1F6E ; G 1673
U 8047 ; WX 602 ; N uni1F6F ; G 1674
U 8048 ; WX 602 ; N uni1F70 ; G 1675
U 8049 ; WX 602 ; N uni1F71 ; G 1676
U 8050 ; WX 602 ; N uni1F72 ; G 1677
U 8051 ; WX 602 ; N uni1F73 ; G 1678
U 8052 ; WX 602 ; N uni1F74 ; G 1679
U 8053 ; WX 602 ; N uni1F75 ; G 1680
U 8054 ; WX 602 ; N uni1F76 ; G 1681
U 8055 ; WX 602 ; N uni1F77 ; G 1682
U 8056 ; WX 602 ; N uni1F78 ; G 1683
U 8057 ; WX 602 ; N uni1F79 ; G 1684
U 8058 ; WX 602 ; N uni1F7A ; G 1685
U 8059 ; WX 602 ; N uni1F7B ; G 1686
U 8060 ; WX 602 ; N uni1F7C ; G 1687
U 8061 ; WX 602 ; N uni1F7D ; G 1688
U 8064 ; WX 602 ; N uni1F80 ; G 1689
U 8065 ; WX 602 ; N uni1F81 ; G 1690
U 8066 ; WX 602 ; N uni1F82 ; G 1691
U 8067 ; WX 602 ; N uni1F83 ; G 1692
U 8068 ; WX 602 ; N uni1F84 ; G 1693
U 8069 ; WX 602 ; N uni1F85 ; G 1694
U 8070 ; WX 602 ; N uni1F86 ; G 1695
U 8071 ; WX 602 ; N uni1F87 ; G 1696
U 8072 ; WX 602 ; N uni1F88 ; G 1697
U 8073 ; WX 602 ; N uni1F89 ; G 1698
U 8074 ; WX 602 ; N uni1F8A ; G 1699
U 8075 ; WX 602 ; N uni1F8B ; G 1700
U 8076 ; WX 602 ; N uni1F8C ; G 1701
U 8077 ; WX 602 ; N uni1F8D ; G 1702
U 8078 ; WX 602 ; N uni1F8E ; G 1703
U 8079 ; WX 602 ; N uni1F8F ; G 1704
U 8080 ; WX 602 ; N uni1F90 ; G 1705
U 8081 ; WX 602 ; N uni1F91 ; G 1706
U 8082 ; WX 602 ; N uni1F92 ; G 1707
U 8083 ; WX 602 ; N uni1F93 ; G 1708
U 8084 ; WX 602 ; N uni1F94 ; G 1709
U 8085 ; WX 602 ; N uni1F95 ; G 1710
U 8086 ; WX 602 ; N uni1F96 ; G 1711
U 8087 ; WX 602 ; N uni1F97 ; G 1712
U 8088 ; WX 602 ; N uni1F98 ; G 1713
U 8089 ; WX 602 ; N uni1F99 ; G 1714
U 8090 ; WX 602 ; N uni1F9A ; G 1715
U 8091 ; WX 602 ; N uni1F9B ; G 1716
U 8092 ; WX 602 ; N uni1F9C ; G 1717
U 8093 ; WX 602 ; N uni1F9D ; G 1718
U 8094 ; WX 602 ; N uni1F9E ; G 1719
U 8095 ; WX 602 ; N uni1F9F ; G 1720
U 8096 ; WX 602 ; N uni1FA0 ; G 1721
U 8097 ; WX 602 ; N uni1FA1 ; G 1722
U 8098 ; WX 602 ; N uni1FA2 ; G 1723
U 8099 ; WX 602 ; N uni1FA3 ; G 1724
U 8100 ; WX 602 ; N uni1FA4 ; G 1725
U 8101 ; WX 602 ; N uni1FA5 ; G 1726
U 8102 ; WX 602 ; N uni1FA6 ; G 1727
U 8103 ; WX 602 ; N uni1FA7 ; G 1728
U 8104 ; WX 602 ; N uni1FA8 ; G 1729
U 8105 ; WX 602 ; N uni1FA9 ; G 1730
U 8106 ; WX 602 ; N uni1FAA ; G 1731
U 8107 ; WX 602 ; N uni1FAB ; G 1732
U 8108 ; WX 602 ; N uni1FAC ; G 1733
U 8109 ; WX 602 ; N uni1FAD ; G 1734
U 8110 ; WX 602 ; N uni1FAE ; G 1735
U 8111 ; WX 602 ; N uni1FAF ; G 1736
U 8112 ; WX 602 ; N uni1FB0 ; G 1737
U 8113 ; WX 602 ; N uni1FB1 ; G 1738
U 8114 ; WX 602 ; N uni1FB2 ; G 1739
U 8115 ; WX 602 ; N uni1FB3 ; G 1740
U 8116 ; WX 602 ; N uni1FB4 ; G 1741
U 8118 ; WX 602 ; N uni1FB6 ; G 1742
U 8119 ; WX 602 ; N uni1FB7 ; G 1743
U 8120 ; WX 602 ; N uni1FB8 ; G 1744
U 8121 ; WX 602 ; N uni1FB9 ; G 1745
U 8122 ; WX 602 ; N uni1FBA ; G 1746
U 8123 ; WX 602 ; N uni1FBB ; G 1747
U 8124 ; WX 602 ; N uni1FBC ; G 1748
U 8125 ; WX 602 ; N uni1FBD ; G 1749
U 8126 ; WX 602 ; N uni1FBE ; G 1750
U 8127 ; WX 602 ; N uni1FBF ; G 1751
U 8128 ; WX 602 ; N uni1FC0 ; G 1752
U 8129 ; WX 602 ; N uni1FC1 ; G 1753
U 8130 ; WX 602 ; N uni1FC2 ; G 1754
U 8131 ; WX 602 ; N uni1FC3 ; G 1755
U 8132 ; WX 602 ; N uni1FC4 ; G 1756
U 8134 ; WX 602 ; N uni1FC6 ; G 1757
U 8135 ; WX 602 ; N uni1FC7 ; G 1758
U 8136 ; WX 602 ; N uni1FC8 ; G 1759
U 8137 ; WX 602 ; N uni1FC9 ; G 1760
U 8138 ; WX 602 ; N uni1FCA ; G 1761
U 8139 ; WX 602 ; N uni1FCB ; G 1762
U 8140 ; WX 602 ; N uni1FCC ; G 1763
U 8141 ; WX 602 ; N uni1FCD ; G 1764
U 8142 ; WX 602 ; N uni1FCE ; G 1765
U 8143 ; WX 602 ; N uni1FCF ; G 1766
U 8144 ; WX 602 ; N uni1FD0 ; G 1767
U 8145 ; WX 602 ; N uni1FD1 ; G 1768
U 8146 ; WX 602 ; N uni1FD2 ; G 1769
U 8147 ; WX 602 ; N uni1FD3 ; G 1770
U 8150 ; WX 602 ; N uni1FD6 ; G 1771
U 8151 ; WX 602 ; N uni1FD7 ; G 1772
U 8152 ; WX 602 ; N uni1FD8 ; G 1773
U 8153 ; WX 602 ; N uni1FD9 ; G 1774
U 8154 ; WX 602 ; N uni1FDA ; G 1775
U 8155 ; WX 602 ; N uni1FDB ; G 1776
U 8157 ; WX 602 ; N uni1FDD ; G 1777
U 8158 ; WX 602 ; N uni1FDE ; G 1778
U 8159 ; WX 602 ; N uni1FDF ; G 1779
U 8160 ; WX 602 ; N uni1FE0 ; G 1780
U 8161 ; WX 602 ; N uni1FE1 ; G 1781
U 8162 ; WX 602 ; N uni1FE2 ; G 1782
U 8163 ; WX 602 ; N uni1FE3 ; G 1783
U 8164 ; WX 602 ; N uni1FE4 ; G 1784
U 8165 ; WX 602 ; N uni1FE5 ; G 1785
U 8166 ; WX 602 ; N uni1FE6 ; G 1786
U 8167 ; WX 602 ; N uni1FE7 ; G 1787
U 8168 ; WX 602 ; N uni1FE8 ; G 1788
U 8169 ; WX 602 ; N uni1FE9 ; G 1789
U 8170 ; WX 602 ; N uni1FEA ; G 1790
U 8171 ; WX 602 ; N uni1FEB ; G 1791
U 8172 ; WX 602 ; N uni1FEC ; G 1792
U 8173 ; WX 602 ; N uni1FED ; G 1793
U 8174 ; WX 602 ; N uni1FEE ; G 1794
U 8175 ; WX 602 ; N uni1FEF ; G 1795
U 8178 ; WX 602 ; N uni1FF2 ; G 1796
U 8179 ; WX 602 ; N uni1FF3 ; G 1797
U 8180 ; WX 602 ; N uni1FF4 ; G 1798
U 8182 ; WX 602 ; N uni1FF6 ; G 1799
U 8183 ; WX 602 ; N uni1FF7 ; G 1800
U 8184 ; WX 602 ; N uni1FF8 ; G 1801
U 8185 ; WX 602 ; N uni1FF9 ; G 1802
U 8186 ; WX 602 ; N uni1FFA ; G 1803
U 8187 ; WX 602 ; N uni1FFB ; G 1804
U 8188 ; WX 602 ; N uni1FFC ; G 1805
U 8189 ; WX 602 ; N uni1FFD ; G 1806
U 8190 ; WX 602 ; N uni1FFE ; G 1807
U 8192 ; WX 602 ; N uni2000 ; G 1808
U 8193 ; WX 602 ; N uni2001 ; G 1809
U 8194 ; WX 602 ; N uni2002 ; G 1810
U 8195 ; WX 602 ; N uni2003 ; G 1811
U 8196 ; WX 602 ; N uni2004 ; G 1812
U 8197 ; WX 602 ; N uni2005 ; G 1813
U 8198 ; WX 602 ; N uni2006 ; G 1814
U 8199 ; WX 602 ; N uni2007 ; G 1815
U 8200 ; WX 602 ; N uni2008 ; G 1816
U 8201 ; WX 602 ; N uni2009 ; G 1817
U 8202 ; WX 602 ; N uni200A ; G 1818
U 8208 ; WX 602 ; N uni2010 ; G 1819
U 8209 ; WX 602 ; N uni2011 ; G 1820
U 8210 ; WX 602 ; N figuredash ; G 1821
U 8211 ; WX 602 ; N endash ; G 1822
U 8212 ; WX 602 ; N emdash ; G 1823
U 8213 ; WX 602 ; N uni2015 ; G 1824
U 8214 ; WX 602 ; N uni2016 ; G 1825
U 8215 ; WX 602 ; N underscoredbl ; G 1826
U 8216 ; WX 602 ; N quoteleft ; G 1827
U 8217 ; WX 602 ; N quoteright ; G 1828
U 8218 ; WX 602 ; N quotesinglbase ; G 1829
U 8219 ; WX 602 ; N quotereversed ; G 1830
U 8220 ; WX 602 ; N quotedblleft ; G 1831
U 8221 ; WX 602 ; N quotedblright ; G 1832
U 8222 ; WX 602 ; N quotedblbase ; G 1833
U 8223 ; WX 602 ; N uni201F ; G 1834
U 8224 ; WX 602 ; N dagger ; G 1835
U 8225 ; WX 602 ; N daggerdbl ; G 1836
U 8226 ; WX 602 ; N bullet ; G 1837
U 8227 ; WX 602 ; N uni2023 ; G 1838
U 8230 ; WX 602 ; N ellipsis ; G 1839
U 8239 ; WX 602 ; N uni202F ; G 1840
U 8240 ; WX 602 ; N perthousand ; G 1841
U 8241 ; WX 602 ; N uni2031 ; G 1842
U 8242 ; WX 602 ; N minute ; G 1843
U 8243 ; WX 602 ; N second ; G 1844
U 8244 ; WX 602 ; N uni2034 ; G 1845
U 8245 ; WX 602 ; N uni2035 ; G 1846
U 8246 ; WX 602 ; N uni2036 ; G 1847
U 8247 ; WX 602 ; N uni2037 ; G 1848
U 8249 ; WX 602 ; N guilsinglleft ; G 1849
U 8250 ; WX 602 ; N guilsinglright ; G 1850
U 8252 ; WX 602 ; N exclamdbl ; G 1851
U 8253 ; WX 602 ; N uni203D ; G 1852
U 8254 ; WX 602 ; N uni203E ; G 1853
U 8255 ; WX 602 ; N uni203F ; G 1854
U 8261 ; WX 602 ; N uni2045 ; G 1855
U 8262 ; WX 602 ; N uni2046 ; G 1856
U 8263 ; WX 602 ; N uni2047 ; G 1857
U 8264 ; WX 602 ; N uni2048 ; G 1858
U 8265 ; WX 602 ; N uni2049 ; G 1859
U 8267 ; WX 602 ; N uni204B ; G 1860
U 8287 ; WX 602 ; N uni205F ; G 1861
U 8304 ; WX 602 ; N uni2070 ; G 1862
U 8305 ; WX 602 ; N uni2071 ; G 1863
U 8308 ; WX 602 ; N uni2074 ; G 1864
U 8309 ; WX 602 ; N uni2075 ; G 1865
U 8310 ; WX 602 ; N uni2076 ; G 1866
U 8311 ; WX 602 ; N uni2077 ; G 1867
U 8312 ; WX 602 ; N uni2078 ; G 1868
U 8313 ; WX 602 ; N uni2079 ; G 1869
U 8314 ; WX 602 ; N uni207A ; G 1870
U 8315 ; WX 602 ; N uni207B ; G 1871
U 8316 ; WX 602 ; N uni207C ; G 1872
U 8317 ; WX 602 ; N uni207D ; G 1873
U 8318 ; WX 602 ; N uni207E ; G 1874
U 8319 ; WX 602 ; N uni207F ; G 1875
U 8320 ; WX 602 ; N uni2080 ; G 1876
U 8321 ; WX 602 ; N uni2081 ; G 1877
U 8322 ; WX 602 ; N uni2082 ; G 1878
U 8323 ; WX 602 ; N uni2083 ; G 1879
U 8324 ; WX 602 ; N uni2084 ; G 1880
U 8325 ; WX 602 ; N uni2085 ; G 1881
U 8326 ; WX 602 ; N uni2086 ; G 1882
U 8327 ; WX 602 ; N uni2087 ; G 1883
U 8328 ; WX 602 ; N uni2088 ; G 1884
U 8329 ; WX 602 ; N uni2089 ; G 1885
U 8330 ; WX 602 ; N uni208A ; G 1886
U 8331 ; WX 602 ; N uni208B ; G 1887
U 8332 ; WX 602 ; N uni208C ; G 1888
U 8333 ; WX 602 ; N uni208D ; G 1889
U 8334 ; WX 602 ; N uni208E ; G 1890
U 8336 ; WX 602 ; N uni2090 ; G 1891
U 8337 ; WX 602 ; N uni2091 ; G 1892
U 8338 ; WX 602 ; N uni2092 ; G 1893
U 8339 ; WX 602 ; N uni2093 ; G 1894
U 8340 ; WX 602 ; N uni2094 ; G 1895
U 8341 ; WX 602 ; N uni2095 ; G 1896
U 8342 ; WX 602 ; N uni2096 ; G 1897
U 8343 ; WX 602 ; N uni2097 ; G 1898
U 8344 ; WX 602 ; N uni2098 ; G 1899
U 8345 ; WX 602 ; N uni2099 ; G 1900
U 8346 ; WX 602 ; N uni209A ; G 1901
U 8347 ; WX 602 ; N uni209B ; G 1902
U 8348 ; WX 602 ; N uni209C ; G 1903
U 8352 ; WX 602 ; N uni20A0 ; G 1904
U 8353 ; WX 602 ; N colonmonetary ; G 1905
U 8354 ; WX 602 ; N uni20A2 ; G 1906
U 8355 ; WX 602 ; N franc ; G 1907
U 8356 ; WX 602 ; N lira ; G 1908
U 8357 ; WX 602 ; N uni20A5 ; G 1909
U 8358 ; WX 602 ; N uni20A6 ; G 1910
U 8359 ; WX 602 ; N peseta ; G 1911
U 8360 ; WX 602 ; N uni20A8 ; G 1912
U 8361 ; WX 602 ; N uni20A9 ; G 1913
U 8362 ; WX 602 ; N uni20AA ; G 1914
U 8363 ; WX 602 ; N dong ; G 1915
U 8364 ; WX 602 ; N Euro ; G 1916
U 8365 ; WX 602 ; N uni20AD ; G 1917
U 8366 ; WX 602 ; N uni20AE ; G 1918
U 8367 ; WX 602 ; N uni20AF ; G 1919
U 8368 ; WX 602 ; N uni20B0 ; G 1920
U 8369 ; WX 602 ; N uni20B1 ; G 1921
U 8370 ; WX 602 ; N uni20B2 ; G 1922
U 8371 ; WX 602 ; N uni20B3 ; G 1923
U 8372 ; WX 602 ; N uni20B4 ; G 1924
U 8373 ; WX 602 ; N uni20B5 ; G 1925
U 8376 ; WX 602 ; N uni20B8 ; G 1926
U 8377 ; WX 602 ; N uni20B9 ; G 1927
U 8378 ; WX 602 ; N uni20BA ; G 1928
U 8381 ; WX 602 ; N uni20BD ; G 1929
U 8450 ; WX 602 ; N uni2102 ; G 1930
U 8453 ; WX 602 ; N uni2105 ; G 1931
U 8461 ; WX 602 ; N uni210D ; G 1932
U 8462 ; WX 602 ; N uni210E ; G 1933
U 8463 ; WX 602 ; N uni210F ; G 1934
U 8469 ; WX 602 ; N uni2115 ; G 1935
U 8470 ; WX 602 ; N uni2116 ; G 1936
U 8471 ; WX 602 ; N uni2117 ; G 1937
U 8473 ; WX 602 ; N uni2119 ; G 1938
U 8474 ; WX 602 ; N uni211A ; G 1939
U 8477 ; WX 602 ; N uni211D ; G 1940
U 8482 ; WX 602 ; N trademark ; G 1941
U 8484 ; WX 602 ; N uni2124 ; G 1942
U 8486 ; WX 602 ; N uni2126 ; G 1943
U 8490 ; WX 602 ; N uni212A ; G 1944
U 8491 ; WX 602 ; N uni212B ; G 1945
U 8494 ; WX 602 ; N estimated ; G 1946
U 8520 ; WX 602 ; N uni2148 ; G 1947
U 8528 ; WX 602 ; N uni2150 ; G 1948
U 8529 ; WX 602 ; N uni2151 ; G 1949
U 8531 ; WX 602 ; N onethird ; G 1950
U 8532 ; WX 602 ; N twothirds ; G 1951
U 8533 ; WX 602 ; N uni2155 ; G 1952
U 8534 ; WX 602 ; N uni2156 ; G 1953
U 8535 ; WX 602 ; N uni2157 ; G 1954
U 8536 ; WX 602 ; N uni2158 ; G 1955
U 8537 ; WX 602 ; N uni2159 ; G 1956
U 8538 ; WX 602 ; N uni215A ; G 1957
U 8539 ; WX 602 ; N oneeighth ; G 1958
U 8540 ; WX 602 ; N threeeighths ; G 1959
U 8541 ; WX 602 ; N fiveeighths ; G 1960
U 8542 ; WX 602 ; N seveneighths ; G 1961
U 8543 ; WX 602 ; N uni215F ; G 1962
U 8585 ; WX 602 ; N uni2189 ; G 1963
U 8592 ; WX 602 ; N arrowleft ; G 1964
U 8593 ; WX 602 ; N arrowup ; G 1965
U 8594 ; WX 602 ; N arrowright ; G 1966
U 8595 ; WX 602 ; N arrowdown ; G 1967
U 8596 ; WX 602 ; N arrowboth ; G 1968
U 8597 ; WX 602 ; N arrowupdn ; G 1969
U 8598 ; WX 602 ; N uni2196 ; G 1970
U 8599 ; WX 602 ; N uni2197 ; G 1971
U 8600 ; WX 602 ; N uni2198 ; G 1972
U 8601 ; WX 602 ; N uni2199 ; G 1973
U 8602 ; WX 602 ; N uni219A ; G 1974
U 8603 ; WX 602 ; N uni219B ; G 1975
U 8604 ; WX 602 ; N uni219C ; G 1976
U 8605 ; WX 602 ; N uni219D ; G 1977
U 8606 ; WX 602 ; N uni219E ; G 1978
U 8607 ; WX 602 ; N uni219F ; G 1979
U 8608 ; WX 602 ; N uni21A0 ; G 1980
U 8609 ; WX 602 ; N uni21A1 ; G 1981
U 8610 ; WX 602 ; N uni21A2 ; G 1982
U 8611 ; WX 602 ; N uni21A3 ; G 1983
U 8612 ; WX 602 ; N uni21A4 ; G 1984
U 8613 ; WX 602 ; N uni21A5 ; G 1985
U 8614 ; WX 602 ; N uni21A6 ; G 1986
U 8615 ; WX 602 ; N uni21A7 ; G 1987
U 8616 ; WX 602 ; N arrowupdnbse ; G 1988
U 8617 ; WX 602 ; N uni21A9 ; G 1989
U 8618 ; WX 602 ; N uni21AA ; G 1990
U 8619 ; WX 602 ; N uni21AB ; G 1991
U 8620 ; WX 602 ; N uni21AC ; G 1992
U 8621 ; WX 602 ; N uni21AD ; G 1993
U 8622 ; WX 602 ; N uni21AE ; G 1994
U 8623 ; WX 602 ; N uni21AF ; G 1995
U 8624 ; WX 602 ; N uni21B0 ; G 1996
U 8625 ; WX 602 ; N uni21B1 ; G 1997
U 8626 ; WX 602 ; N uni21B2 ; G 1998
U 8627 ; WX 602 ; N uni21B3 ; G 1999
U 8628 ; WX 602 ; N uni21B4 ; G 2000
U 8629 ; WX 602 ; N carriagereturn ; G 2001
U 8630 ; WX 602 ; N uni21B6 ; G 2002
U 8631 ; WX 602 ; N uni21B7 ; G 2003
U 8632 ; WX 602 ; N uni21B8 ; G 2004
U 8633 ; WX 602 ; N uni21B9 ; G 2005
U 8634 ; WX 602 ; N uni21BA ; G 2006
U 8635 ; WX 602 ; N uni21BB ; G 2007
U 8636 ; WX 602 ; N uni21BC ; G 2008
U 8637 ; WX 602 ; N uni21BD ; G 2009
U 8638 ; WX 602 ; N uni21BE ; G 2010
U 8639 ; WX 602 ; N uni21BF ; G 2011
U 8640 ; WX 602 ; N uni21C0 ; G 2012
U 8641 ; WX 602 ; N uni21C1 ; G 2013
U 8642 ; WX 602 ; N uni21C2 ; G 2014
U 8643 ; WX 602 ; N uni21C3 ; G 2015
U 8644 ; WX 602 ; N uni21C4 ; G 2016
U 8645 ; WX 602 ; N uni21C5 ; G 2017
U 8646 ; WX 602 ; N uni21C6 ; G 2018
U 8647 ; WX 602 ; N uni21C7 ; G 2019
U 8648 ; WX 602 ; N uni21C8 ; G 2020
U 8649 ; WX 602 ; N uni21C9 ; G 2021
U 8650 ; WX 602 ; N uni21CA ; G 2022
U 8651 ; WX 602 ; N uni21CB ; G 2023
U 8652 ; WX 602 ; N uni21CC ; G 2024
U 8653 ; WX 602 ; N uni21CD ; G 2025
U 8654 ; WX 602 ; N uni21CE ; G 2026
U 8655 ; WX 602 ; N uni21CF ; G 2027
U 8656 ; WX 602 ; N arrowdblleft ; G 2028
U 8657 ; WX 602 ; N arrowdblup ; G 2029
U 8658 ; WX 602 ; N arrowdblright ; G 2030
U 8659 ; WX 602 ; N arrowdbldown ; G 2031
U 8660 ; WX 602 ; N arrowdblboth ; G 2032
U 8661 ; WX 602 ; N uni21D5 ; G 2033
U 8662 ; WX 602 ; N uni21D6 ; G 2034
U 8663 ; WX 602 ; N uni21D7 ; G 2035
U 8664 ; WX 602 ; N uni21D8 ; G 2036
U 8665 ; WX 602 ; N uni21D9 ; G 2037
U 8666 ; WX 602 ; N uni21DA ; G 2038
U 8667 ; WX 602 ; N uni21DB ; G 2039
U 8668 ; WX 602 ; N uni21DC ; G 2040
U 8669 ; WX 602 ; N uni21DD ; G 2041
U 8670 ; WX 602 ; N uni21DE ; G 2042
U 8671 ; WX 602 ; N uni21DF ; G 2043
U 8672 ; WX 602 ; N uni21E0 ; G 2044
U 8673 ; WX 602 ; N uni21E1 ; G 2045
U 8674 ; WX 602 ; N uni21E2 ; G 2046
U 8675 ; WX 602 ; N uni21E3 ; G 2047
U 8676 ; WX 602 ; N uni21E4 ; G 2048
U 8677 ; WX 602 ; N uni21E5 ; G 2049
U 8678 ; WX 602 ; N uni21E6 ; G 2050
U 8679 ; WX 602 ; N uni21E7 ; G 2051
U 8680 ; WX 602 ; N uni21E8 ; G 2052
U 8681 ; WX 602 ; N uni21E9 ; G 2053
U 8682 ; WX 602 ; N uni21EA ; G 2054
U 8683 ; WX 602 ; N uni21EB ; G 2055
U 8684 ; WX 602 ; N uni21EC ; G 2056
U 8685 ; WX 602 ; N uni21ED ; G 2057
U 8686 ; WX 602 ; N uni21EE ; G 2058
U 8687 ; WX 602 ; N uni21EF ; G 2059
U 8688 ; WX 602 ; N uni21F0 ; G 2060
U 8689 ; WX 602 ; N uni21F1 ; G 2061
U 8690 ; WX 602 ; N uni21F2 ; G 2062
U 8691 ; WX 602 ; N uni21F3 ; G 2063
U 8692 ; WX 602 ; N uni21F4 ; G 2064
U 8693 ; WX 602 ; N uni21F5 ; G 2065
U 8694 ; WX 602 ; N uni21F6 ; G 2066
U 8695 ; WX 602 ; N uni21F7 ; G 2067
U 8696 ; WX 602 ; N uni21F8 ; G 2068
U 8697 ; WX 602 ; N uni21F9 ; G 2069
U 8698 ; WX 602 ; N uni21FA ; G 2070
U 8699 ; WX 602 ; N uni21FB ; G 2071
U 8700 ; WX 602 ; N uni21FC ; G 2072
U 8701 ; WX 602 ; N uni21FD ; G 2073
U 8702 ; WX 602 ; N uni21FE ; G 2074
U 8703 ; WX 602 ; N uni21FF ; G 2075
U 8704 ; WX 602 ; N universal ; G 2076
U 8705 ; WX 602 ; N uni2201 ; G 2077
U 8706 ; WX 602 ; N partialdiff ; G 2078
U 8707 ; WX 602 ; N existential ; G 2079
U 8708 ; WX 602 ; N uni2204 ; G 2080
U 8709 ; WX 602 ; N emptyset ; G 2081
U 8710 ; WX 602 ; N increment ; G 2082
U 8711 ; WX 602 ; N gradient ; G 2083
U 8712 ; WX 602 ; N element ; G 2084
U 8713 ; WX 602 ; N notelement ; G 2085
U 8714 ; WX 602 ; N uni220A ; G 2086
U 8715 ; WX 602 ; N suchthat ; G 2087
U 8716 ; WX 602 ; N uni220C ; G 2088
U 8717 ; WX 602 ; N uni220D ; G 2089
U 8718 ; WX 602 ; N uni220E ; G 2090
U 8719 ; WX 602 ; N product ; G 2091
U 8720 ; WX 602 ; N uni2210 ; G 2092
U 8721 ; WX 602 ; N summation ; G 2093
U 8722 ; WX 602 ; N minus ; G 2094
U 8723 ; WX 602 ; N uni2213 ; G 2095
U 8725 ; WX 602 ; N uni2215 ; G 2096
U 8727 ; WX 602 ; N asteriskmath ; G 2097
U 8728 ; WX 602 ; N uni2218 ; G 2098
U 8729 ; WX 602 ; N uni2219 ; G 2099
U 8730 ; WX 602 ; N radical ; G 2100
U 8731 ; WX 602 ; N uni221B ; G 2101
U 8732 ; WX 602 ; N uni221C ; G 2102
U 8733 ; WX 602 ; N proportional ; G 2103
U 8734 ; WX 602 ; N infinity ; G 2104
U 8735 ; WX 602 ; N orthogonal ; G 2105
U 8736 ; WX 602 ; N angle ; G 2106
U 8739 ; WX 602 ; N uni2223 ; G 2107
U 8743 ; WX 602 ; N logicaland ; G 2108
U 8744 ; WX 602 ; N logicalor ; G 2109
U 8745 ; WX 602 ; N intersection ; G 2110
U 8746 ; WX 602 ; N union ; G 2111
U 8747 ; WX 602 ; N integral ; G 2112
U 8748 ; WX 602 ; N uni222C ; G 2113
U 8749 ; WX 602 ; N uni222D ; G 2114
U 8756 ; WX 602 ; N therefore ; G 2115
U 8757 ; WX 602 ; N uni2235 ; G 2116
U 8758 ; WX 602 ; N uni2236 ; G 2117
U 8759 ; WX 602 ; N uni2237 ; G 2118
U 8760 ; WX 602 ; N uni2238 ; G 2119
U 8761 ; WX 602 ; N uni2239 ; G 2120
U 8762 ; WX 602 ; N uni223A ; G 2121
U 8763 ; WX 602 ; N uni223B ; G 2122
U 8764 ; WX 602 ; N similar ; G 2123
U 8765 ; WX 602 ; N uni223D ; G 2124
U 8769 ; WX 602 ; N uni2241 ; G 2125
U 8770 ; WX 602 ; N uni2242 ; G 2126
U 8771 ; WX 602 ; N uni2243 ; G 2127
U 8772 ; WX 602 ; N uni2244 ; G 2128
U 8773 ; WX 602 ; N congruent ; G 2129
U 8774 ; WX 602 ; N uni2246 ; G 2130
U 8775 ; WX 602 ; N uni2247 ; G 2131
U 8776 ; WX 602 ; N approxequal ; G 2132
U 8777 ; WX 602 ; N uni2249 ; G 2133
U 8778 ; WX 602 ; N uni224A ; G 2134
U 8779 ; WX 602 ; N uni224B ; G 2135
U 8780 ; WX 602 ; N uni224C ; G 2136
U 8781 ; WX 602 ; N uni224D ; G 2137
U 8782 ; WX 602 ; N uni224E ; G 2138
U 8783 ; WX 602 ; N uni224F ; G 2139
U 8784 ; WX 602 ; N uni2250 ; G 2140
U 8785 ; WX 602 ; N uni2251 ; G 2141
U 8786 ; WX 602 ; N uni2252 ; G 2142
U 8787 ; WX 602 ; N uni2253 ; G 2143
U 8788 ; WX 602 ; N uni2254 ; G 2144
U 8789 ; WX 602 ; N uni2255 ; G 2145
U 8790 ; WX 602 ; N uni2256 ; G 2146
U 8791 ; WX 602 ; N uni2257 ; G 2147
U 8792 ; WX 602 ; N uni2258 ; G 2148
U 8793 ; WX 602 ; N uni2259 ; G 2149
U 8794 ; WX 602 ; N uni225A ; G 2150
U 8795 ; WX 602 ; N uni225B ; G 2151
U 8796 ; WX 602 ; N uni225C ; G 2152
U 8797 ; WX 602 ; N uni225D ; G 2153
U 8798 ; WX 602 ; N uni225E ; G 2154
U 8799 ; WX 602 ; N uni225F ; G 2155
U 8800 ; WX 602 ; N notequal ; G 2156
U 8801 ; WX 602 ; N equivalence ; G 2157
U 8802 ; WX 602 ; N uni2262 ; G 2158
U 8803 ; WX 602 ; N uni2263 ; G 2159
U 8804 ; WX 602 ; N lessequal ; G 2160
U 8805 ; WX 602 ; N greaterequal ; G 2161
U 8806 ; WX 602 ; N uni2266 ; G 2162
U 8807 ; WX 602 ; N uni2267 ; G 2163
U 8808 ; WX 602 ; N uni2268 ; G 2164
U 8809 ; WX 602 ; N uni2269 ; G 2165
U 8813 ; WX 602 ; N uni226D ; G 2166
U 8814 ; WX 602 ; N uni226E ; G 2167
U 8815 ; WX 602 ; N uni226F ; G 2168
U 8816 ; WX 602 ; N uni2270 ; G 2169
U 8817 ; WX 602 ; N uni2271 ; G 2170
U 8818 ; WX 602 ; N uni2272 ; G 2171
U 8819 ; WX 602 ; N uni2273 ; G 2172
U 8820 ; WX 602 ; N uni2274 ; G 2173
U 8821 ; WX 602 ; N uni2275 ; G 2174
U 8822 ; WX 602 ; N uni2276 ; G 2175
U 8823 ; WX 602 ; N uni2277 ; G 2176
U 8824 ; WX 602 ; N uni2278 ; G 2177
U 8825 ; WX 602 ; N uni2279 ; G 2178
U 8826 ; WX 602 ; N uni227A ; G 2179
U 8827 ; WX 602 ; N uni227B ; G 2180
U 8828 ; WX 602 ; N uni227C ; G 2181
U 8829 ; WX 602 ; N uni227D ; G 2182
U 8830 ; WX 602 ; N uni227E ; G 2183
U 8831 ; WX 602 ; N uni227F ; G 2184
U 8832 ; WX 602 ; N uni2280 ; G 2185
U 8833 ; WX 602 ; N uni2281 ; G 2186
U 8834 ; WX 602 ; N propersubset ; G 2187
U 8835 ; WX 602 ; N propersuperset ; G 2188
U 8836 ; WX 602 ; N notsubset ; G 2189
U 8837 ; WX 602 ; N uni2285 ; G 2190
U 8838 ; WX 602 ; N reflexsubset ; G 2191
U 8839 ; WX 602 ; N reflexsuperset ; G 2192
U 8840 ; WX 602 ; N uni2288 ; G 2193
U 8841 ; WX 602 ; N uni2289 ; G 2194
U 8842 ; WX 602 ; N uni228A ; G 2195
U 8843 ; WX 602 ; N uni228B ; G 2196
U 8845 ; WX 602 ; N uni228D ; G 2197
U 8846 ; WX 602 ; N uni228E ; G 2198
U 8847 ; WX 602 ; N uni228F ; G 2199
U 8848 ; WX 602 ; N uni2290 ; G 2200
U 8849 ; WX 602 ; N uni2291 ; G 2201
U 8850 ; WX 602 ; N uni2292 ; G 2202
U 8851 ; WX 602 ; N uni2293 ; G 2203
U 8852 ; WX 602 ; N uni2294 ; G 2204
U 8853 ; WX 602 ; N circleplus ; G 2205
U 8854 ; WX 602 ; N uni2296 ; G 2206
U 8855 ; WX 602 ; N circlemultiply ; G 2207
U 8856 ; WX 602 ; N uni2298 ; G 2208
U 8857 ; WX 602 ; N uni2299 ; G 2209
U 8858 ; WX 602 ; N uni229A ; G 2210
U 8859 ; WX 602 ; N uni229B ; G 2211
U 8860 ; WX 602 ; N uni229C ; G 2212
U 8861 ; WX 602 ; N uni229D ; G 2213
U 8862 ; WX 602 ; N uni229E ; G 2214
U 8863 ; WX 602 ; N uni229F ; G 2215
U 8864 ; WX 602 ; N uni22A0 ; G 2216
U 8865 ; WX 602 ; N uni22A1 ; G 2217
U 8866 ; WX 602 ; N uni22A2 ; G 2218
U 8867 ; WX 602 ; N uni22A3 ; G 2219
U 8868 ; WX 602 ; N uni22A4 ; G 2220
U 8869 ; WX 602 ; N perpendicular ; G 2221
U 8882 ; WX 602 ; N uni22B2 ; G 2222
U 8883 ; WX 602 ; N uni22B3 ; G 2223
U 8884 ; WX 602 ; N uni22B4 ; G 2224
U 8885 ; WX 602 ; N uni22B5 ; G 2225
U 8888 ; WX 602 ; N uni22B8 ; G 2226
U 8898 ; WX 602 ; N uni22C2 ; G 2227
U 8899 ; WX 602 ; N uni22C3 ; G 2228
U 8900 ; WX 602 ; N uni22C4 ; G 2229
U 8901 ; WX 602 ; N dotmath ; G 2230
U 8902 ; WX 602 ; N uni22C6 ; G 2231
U 8909 ; WX 602 ; N uni22CD ; G 2232
U 8910 ; WX 602 ; N uni22CE ; G 2233
U 8911 ; WX 602 ; N uni22CF ; G 2234
U 8912 ; WX 602 ; N uni22D0 ; G 2235
U 8913 ; WX 602 ; N uni22D1 ; G 2236
U 8922 ; WX 602 ; N uni22DA ; G 2237
U 8923 ; WX 602 ; N uni22DB ; G 2238
U 8924 ; WX 602 ; N uni22DC ; G 2239
U 8925 ; WX 602 ; N uni22DD ; G 2240
U 8926 ; WX 602 ; N uni22DE ; G 2241
U 8927 ; WX 602 ; N uni22DF ; G 2242
U 8928 ; WX 602 ; N uni22E0 ; G 2243
U 8929 ; WX 602 ; N uni22E1 ; G 2244
U 8930 ; WX 602 ; N uni22E2 ; G 2245
U 8931 ; WX 602 ; N uni22E3 ; G 2246
U 8932 ; WX 602 ; N uni22E4 ; G 2247
U 8933 ; WX 602 ; N uni22E5 ; G 2248
U 8934 ; WX 602 ; N uni22E6 ; G 2249
U 8935 ; WX 602 ; N uni22E7 ; G 2250
U 8936 ; WX 602 ; N uni22E8 ; G 2251
U 8937 ; WX 602 ; N uni22E9 ; G 2252
U 8943 ; WX 602 ; N uni22EF ; G 2253
U 8960 ; WX 602 ; N uni2300 ; G 2254
U 8961 ; WX 602 ; N uni2301 ; G 2255
U 8962 ; WX 602 ; N house ; G 2256
U 8963 ; WX 602 ; N uni2303 ; G 2257
U 8964 ; WX 602 ; N uni2304 ; G 2258
U 8965 ; WX 602 ; N uni2305 ; G 2259
U 8966 ; WX 602 ; N uni2306 ; G 2260
U 8968 ; WX 602 ; N uni2308 ; G 2261
U 8969 ; WX 602 ; N uni2309 ; G 2262
U 8970 ; WX 602 ; N uni230A ; G 2263
U 8971 ; WX 602 ; N uni230B ; G 2264
U 8972 ; WX 602 ; N uni230C ; G 2265
U 8973 ; WX 602 ; N uni230D ; G 2266
U 8974 ; WX 602 ; N uni230E ; G 2267
U 8975 ; WX 602 ; N uni230F ; G 2268
U 8976 ; WX 602 ; N revlogicalnot ; G 2269
U 8977 ; WX 602 ; N uni2311 ; G 2270
U 8978 ; WX 602 ; N uni2312 ; G 2271
U 8979 ; WX 602 ; N uni2313 ; G 2272
U 8980 ; WX 602 ; N uni2314 ; G 2273
U 8981 ; WX 602 ; N uni2315 ; G 2274
U 8984 ; WX 602 ; N uni2318 ; G 2275
U 8985 ; WX 602 ; N uni2319 ; G 2276
U 8988 ; WX 602 ; N uni231C ; G 2277
U 8989 ; WX 602 ; N uni231D ; G 2278
U 8990 ; WX 602 ; N uni231E ; G 2279
U 8991 ; WX 602 ; N uni231F ; G 2280
U 8992 ; WX 602 ; N integraltp ; G 2281
U 8993 ; WX 602 ; N integralbt ; G 2282
U 8997 ; WX 602 ; N uni2325 ; G 2283
U 8998 ; WX 602 ; N uni2326 ; G 2284
U 8999 ; WX 602 ; N uni2327 ; G 2285
U 9000 ; WX 602 ; N uni2328 ; G 2286
U 9003 ; WX 602 ; N uni232B ; G 2287
U 9013 ; WX 602 ; N uni2335 ; G 2288
U 9014 ; WX 602 ; N uni2336 ; G 2289
U 9015 ; WX 602 ; N uni2337 ; G 2290
U 9016 ; WX 602 ; N uni2338 ; G 2291
U 9017 ; WX 602 ; N uni2339 ; G 2292
U 9018 ; WX 602 ; N uni233A ; G 2293
U 9019 ; WX 602 ; N uni233B ; G 2294
U 9020 ; WX 602 ; N uni233C ; G 2295
U 9021 ; WX 602 ; N uni233D ; G 2296
U 9022 ; WX 602 ; N uni233E ; G 2297
U 9023 ; WX 602 ; N uni233F ; G 2298
U 9024 ; WX 602 ; N uni2340 ; G 2299
U 9025 ; WX 602 ; N uni2341 ; G 2300
U 9026 ; WX 602 ; N uni2342 ; G 2301
U 9027 ; WX 602 ; N uni2343 ; G 2302
U 9028 ; WX 602 ; N uni2344 ; G 2303
U 9029 ; WX 602 ; N uni2345 ; G 2304
U 9030 ; WX 602 ; N uni2346 ; G 2305
U 9031 ; WX 602 ; N uni2347 ; G 2306
U 9032 ; WX 602 ; N uni2348 ; G 2307
U 9033 ; WX 602 ; N uni2349 ; G 2308
U 9034 ; WX 602 ; N uni234A ; G 2309
U 9035 ; WX 602 ; N uni234B ; G 2310
U 9036 ; WX 602 ; N uni234C ; G 2311
U 9037 ; WX 602 ; N uni234D ; G 2312
U 9038 ; WX 602 ; N uni234E ; G 2313
U 9039 ; WX 602 ; N uni234F ; G 2314
U 9040 ; WX 602 ; N uni2350 ; G 2315
U 9041 ; WX 602 ; N uni2351 ; G 2316
U 9042 ; WX 602 ; N uni2352 ; G 2317
U 9043 ; WX 602 ; N uni2353 ; G 2318
U 9044 ; WX 602 ; N uni2354 ; G 2319
U 9045 ; WX 602 ; N uni2355 ; G 2320
U 9046 ; WX 602 ; N uni2356 ; G 2321
U 9047 ; WX 602 ; N uni2357 ; G 2322
U 9048 ; WX 602 ; N uni2358 ; G 2323
U 9049 ; WX 602 ; N uni2359 ; G 2324
U 9050 ; WX 602 ; N uni235A ; G 2325
U 9051 ; WX 602 ; N uni235B ; G 2326
U 9052 ; WX 602 ; N uni235C ; G 2327
U 9053 ; WX 602 ; N uni235D ; G 2328
U 9054 ; WX 602 ; N uni235E ; G 2329
U 9055 ; WX 602 ; N uni235F ; G 2330
U 9056 ; WX 602 ; N uni2360 ; G 2331
U 9057 ; WX 602 ; N uni2361 ; G 2332
U 9058 ; WX 602 ; N uni2362 ; G 2333
U 9059 ; WX 602 ; N uni2363 ; G 2334
U 9060 ; WX 602 ; N uni2364 ; G 2335
U 9061 ; WX 602 ; N uni2365 ; G 2336
U 9062 ; WX 602 ; N uni2366 ; G 2337
U 9063 ; WX 602 ; N uni2367 ; G 2338
U 9064 ; WX 602 ; N uni2368 ; G 2339
U 9065 ; WX 602 ; N uni2369 ; G 2340
U 9066 ; WX 602 ; N uni236A ; G 2341
U 9067 ; WX 602 ; N uni236B ; G 2342
U 9068 ; WX 602 ; N uni236C ; G 2343
U 9069 ; WX 602 ; N uni236D ; G 2344
U 9070 ; WX 602 ; N uni236E ; G 2345
U 9071 ; WX 602 ; N uni236F ; G 2346
U 9072 ; WX 602 ; N uni2370 ; G 2347
U 9073 ; WX 602 ; N uni2371 ; G 2348
U 9074 ; WX 602 ; N uni2372 ; G 2349
U 9075 ; WX 602 ; N uni2373 ; G 2350
U 9076 ; WX 602 ; N uni2374 ; G 2351
U 9077 ; WX 602 ; N uni2375 ; G 2352
U 9078 ; WX 602 ; N uni2376 ; G 2353
U 9079 ; WX 602 ; N uni2377 ; G 2354
U 9080 ; WX 602 ; N uni2378 ; G 2355
U 9081 ; WX 602 ; N uni2379 ; G 2356
U 9082 ; WX 602 ; N uni237A ; G 2357
U 9085 ; WX 602 ; N uni237D ; G 2358
U 9088 ; WX 602 ; N uni2380 ; G 2359
U 9089 ; WX 602 ; N uni2381 ; G 2360
U 9090 ; WX 602 ; N uni2382 ; G 2361
U 9091 ; WX 602 ; N uni2383 ; G 2362
U 9096 ; WX 602 ; N uni2388 ; G 2363
U 9097 ; WX 602 ; N uni2389 ; G 2364
U 9098 ; WX 602 ; N uni238A ; G 2365
U 9099 ; WX 602 ; N uni238B ; G 2366
U 9109 ; WX 602 ; N uni2395 ; G 2367
U 9115 ; WX 602 ; N uni239B ; G 2368
U 9116 ; WX 602 ; N uni239C ; G 2369
U 9117 ; WX 602 ; N uni239D ; G 2370
U 9118 ; WX 602 ; N uni239E ; G 2371
U 9119 ; WX 602 ; N uni239F ; G 2372
U 9120 ; WX 602 ; N uni23A0 ; G 2373
U 9121 ; WX 602 ; N uni23A1 ; G 2374
U 9122 ; WX 602 ; N uni23A2 ; G 2375
U 9123 ; WX 602 ; N uni23A3 ; G 2376
U 9124 ; WX 602 ; N uni23A4 ; G 2377
U 9125 ; WX 602 ; N uni23A5 ; G 2378
U 9126 ; WX 602 ; N uni23A6 ; G 2379
U 9127 ; WX 602 ; N uni23A7 ; G 2380
U 9128 ; WX 602 ; N uni23A8 ; G 2381
U 9129 ; WX 602 ; N uni23A9 ; G 2382
U 9130 ; WX 602 ; N uni23AA ; G 2383
U 9131 ; WX 602 ; N uni23AB ; G 2384
U 9132 ; WX 602 ; N uni23AC ; G 2385
U 9133 ; WX 602 ; N uni23AD ; G 2386
U 9134 ; WX 602 ; N uni23AE ; G 2387
U 9166 ; WX 602 ; N uni23CE ; G 2388
U 9167 ; WX 602 ; N uni23CF ; G 2389
U 9251 ; WX 602 ; N uni2423 ; G 2390
U 9472 ; WX 602 ; N SF100000 ; G 2391
U 9473 ; WX 602 ; N uni2501 ; G 2392
U 9474 ; WX 602 ; N SF110000 ; G 2393
U 9475 ; WX 602 ; N uni2503 ; G 2394
U 9476 ; WX 602 ; N uni2504 ; G 2395
U 9477 ; WX 602 ; N uni2505 ; G 2396
U 9478 ; WX 602 ; N uni2506 ; G 2397
U 9479 ; WX 602 ; N uni2507 ; G 2398
U 9480 ; WX 602 ; N uni2508 ; G 2399
U 9481 ; WX 602 ; N uni2509 ; G 2400
U 9482 ; WX 602 ; N uni250A ; G 2401
U 9483 ; WX 602 ; N uni250B ; G 2402
U 9484 ; WX 602 ; N SF010000 ; G 2403
U 9485 ; WX 602 ; N uni250D ; G 2404
U 9486 ; WX 602 ; N uni250E ; G 2405
U 9487 ; WX 602 ; N uni250F ; G 2406
U 9488 ; WX 602 ; N SF030000 ; G 2407
U 9489 ; WX 602 ; N uni2511 ; G 2408
U 9490 ; WX 602 ; N uni2512 ; G 2409
U 9491 ; WX 602 ; N uni2513 ; G 2410
U 9492 ; WX 602 ; N SF020000 ; G 2411
U 9493 ; WX 602 ; N uni2515 ; G 2412
U 9494 ; WX 602 ; N uni2516 ; G 2413
U 9495 ; WX 602 ; N uni2517 ; G 2414
U 9496 ; WX 602 ; N SF040000 ; G 2415
U 9497 ; WX 602 ; N uni2519 ; G 2416
U 9498 ; WX 602 ; N uni251A ; G 2417
U 9499 ; WX 602 ; N uni251B ; G 2418
U 9500 ; WX 602 ; N SF080000 ; G 2419
U 9501 ; WX 602 ; N uni251D ; G 2420
U 9502 ; WX 602 ; N uni251E ; G 2421
U 9503 ; WX 602 ; N uni251F ; G 2422
U 9504 ; WX 602 ; N uni2520 ; G 2423
U 9505 ; WX 602 ; N uni2521 ; G 2424
U 9506 ; WX 602 ; N uni2522 ; G 2425
U 9507 ; WX 602 ; N uni2523 ; G 2426
U 9508 ; WX 602 ; N SF090000 ; G 2427
U 9509 ; WX 602 ; N uni2525 ; G 2428
U 9510 ; WX 602 ; N uni2526 ; G 2429
U 9511 ; WX 602 ; N uni2527 ; G 2430
U 9512 ; WX 602 ; N uni2528 ; G 2431
U 9513 ; WX 602 ; N uni2529 ; G 2432
U 9514 ; WX 602 ; N uni252A ; G 2433
U 9515 ; WX 602 ; N uni252B ; G 2434
U 9516 ; WX 602 ; N SF060000 ; G 2435
U 9517 ; WX 602 ; N uni252D ; G 2436
U 9518 ; WX 602 ; N uni252E ; G 2437
U 9519 ; WX 602 ; N uni252F ; G 2438
U 9520 ; WX 602 ; N uni2530 ; G 2439
U 9521 ; WX 602 ; N uni2531 ; G 2440
U 9522 ; WX 602 ; N uni2532 ; G 2441
U 9523 ; WX 602 ; N uni2533 ; G 2442
U 9524 ; WX 602 ; N SF070000 ; G 2443
U 9525 ; WX 602 ; N uni2535 ; G 2444
U 9526 ; WX 602 ; N uni2536 ; G 2445
U 9527 ; WX 602 ; N uni2537 ; G 2446
U 9528 ; WX 602 ; N uni2538 ; G 2447
U 9529 ; WX 602 ; N uni2539 ; G 2448
U 9530 ; WX 602 ; N uni253A ; G 2449
U 9531 ; WX 602 ; N uni253B ; G 2450
U 9532 ; WX 602 ; N SF050000 ; G 2451
U 9533 ; WX 602 ; N uni253D ; G 2452
U 9534 ; WX 602 ; N uni253E ; G 2453
U 9535 ; WX 602 ; N uni253F ; G 2454
U 9536 ; WX 602 ; N uni2540 ; G 2455
U 9537 ; WX 602 ; N uni2541 ; G 2456
U 9538 ; WX 602 ; N uni2542 ; G 2457
U 9539 ; WX 602 ; N uni2543 ; G 2458
U 9540 ; WX 602 ; N uni2544 ; G 2459
U 9541 ; WX 602 ; N uni2545 ; G 2460
U 9542 ; WX 602 ; N uni2546 ; G 2461
U 9543 ; WX 602 ; N uni2547 ; G 2462
U 9544 ; WX 602 ; N uni2548 ; G 2463
U 9545 ; WX 602 ; N uni2549 ; G 2464
U 9546 ; WX 602 ; N uni254A ; G 2465
U 9547 ; WX 602 ; N uni254B ; G 2466
U 9548 ; WX 602 ; N uni254C ; G 2467
U 9549 ; WX 602 ; N uni254D ; G 2468
U 9550 ; WX 602 ; N uni254E ; G 2469
U 9551 ; WX 602 ; N uni254F ; G 2470
U 9552 ; WX 602 ; N SF430000 ; G 2471
U 9553 ; WX 602 ; N SF240000 ; G 2472
U 9554 ; WX 602 ; N SF510000 ; G 2473
U 9555 ; WX 602 ; N SF520000 ; G 2474
U 9556 ; WX 602 ; N SF390000 ; G 2475
U 9557 ; WX 602 ; N SF220000 ; G 2476
U 9558 ; WX 602 ; N SF210000 ; G 2477
U 9559 ; WX 602 ; N SF250000 ; G 2478
U 9560 ; WX 602 ; N SF500000 ; G 2479
U 9561 ; WX 602 ; N SF490000 ; G 2480
U 9562 ; WX 602 ; N SF380000 ; G 2481
U 9563 ; WX 602 ; N SF280000 ; G 2482
U 9564 ; WX 602 ; N SF270000 ; G 2483
U 9565 ; WX 602 ; N SF260000 ; G 2484
U 9566 ; WX 602 ; N SF360000 ; G 2485
U 9567 ; WX 602 ; N SF370000 ; G 2486
U 9568 ; WX 602 ; N SF420000 ; G 2487
U 9569 ; WX 602 ; N SF190000 ; G 2488
U 9570 ; WX 602 ; N SF200000 ; G 2489
U 9571 ; WX 602 ; N SF230000 ; G 2490
U 9572 ; WX 602 ; N SF470000 ; G 2491
U 9573 ; WX 602 ; N SF480000 ; G 2492
U 9574 ; WX 602 ; N SF410000 ; G 2493
U 9575 ; WX 602 ; N SF450000 ; G 2494
U 9576 ; WX 602 ; N SF460000 ; G 2495
U 9577 ; WX 602 ; N SF400000 ; G 2496
U 9578 ; WX 602 ; N SF540000 ; G 2497
U 9579 ; WX 602 ; N SF530000 ; G 2498
U 9580 ; WX 602 ; N SF440000 ; G 2499
U 9581 ; WX 602 ; N uni256D ; G 2500
U 9582 ; WX 602 ; N uni256E ; G 2501
U 9583 ; WX 602 ; N uni256F ; G 2502
U 9584 ; WX 602 ; N uni2570 ; G 2503
U 9585 ; WX 602 ; N uni2571 ; G 2504
U 9586 ; WX 602 ; N uni2572 ; G 2505
U 9587 ; WX 602 ; N uni2573 ; G 2506
U 9588 ; WX 602 ; N uni2574 ; G 2507
U 9589 ; WX 602 ; N uni2575 ; G 2508
U 9590 ; WX 602 ; N uni2576 ; G 2509
U 9591 ; WX 602 ; N uni2577 ; G 2510
U 9592 ; WX 602 ; N uni2578 ; G 2511
U 9593 ; WX 602 ; N uni2579 ; G 2512
U 9594 ; WX 602 ; N uni257A ; G 2513
U 9595 ; WX 602 ; N uni257B ; G 2514
U 9596 ; WX 602 ; N uni257C ; G 2515
U 9597 ; WX 602 ; N uni257D ; G 2516
U 9598 ; WX 602 ; N uni257E ; G 2517
U 9599 ; WX 602 ; N uni257F ; G 2518
U 9600 ; WX 602 ; N upblock ; G 2519
U 9601 ; WX 602 ; N uni2581 ; G 2520
U 9602 ; WX 602 ; N uni2582 ; G 2521
U 9603 ; WX 602 ; N uni2583 ; G 2522
U 9604 ; WX 602 ; N dnblock ; G 2523
U 9605 ; WX 602 ; N uni2585 ; G 2524
U 9606 ; WX 602 ; N uni2586 ; G 2525
U 9607 ; WX 602 ; N uni2587 ; G 2526
U 9608 ; WX 602 ; N block ; G 2527
U 9609 ; WX 602 ; N uni2589 ; G 2528
U 9610 ; WX 602 ; N uni258A ; G 2529
U 9611 ; WX 602 ; N uni258B ; G 2530
U 9612 ; WX 602 ; N lfblock ; G 2531
U 9613 ; WX 602 ; N uni258D ; G 2532
U 9614 ; WX 602 ; N uni258E ; G 2533
U 9615 ; WX 602 ; N uni258F ; G 2534
U 9616 ; WX 602 ; N rtblock ; G 2535
U 9617 ; WX 602 ; N ltshade ; G 2536
U 9618 ; WX 602 ; N shade ; G 2537
U 9619 ; WX 602 ; N dkshade ; G 2538
U 9620 ; WX 602 ; N uni2594 ; G 2539
U 9621 ; WX 602 ; N uni2595 ; G 2540
U 9622 ; WX 602 ; N uni2596 ; G 2541
U 9623 ; WX 602 ; N uni2597 ; G 2542
U 9624 ; WX 602 ; N uni2598 ; G 2543
U 9625 ; WX 602 ; N uni2599 ; G 2544
U 9626 ; WX 602 ; N uni259A ; G 2545
U 9627 ; WX 602 ; N uni259B ; G 2546
U 9628 ; WX 602 ; N uni259C ; G 2547
U 9629 ; WX 602 ; N uni259D ; G 2548
U 9630 ; WX 602 ; N uni259E ; G 2549
U 9631 ; WX 602 ; N uni259F ; G 2550
U 9632 ; WX 602 ; N filledbox ; G 2551
U 9633 ; WX 602 ; N H22073 ; G 2552
U 9634 ; WX 602 ; N uni25A2 ; G 2553
U 9635 ; WX 602 ; N uni25A3 ; G 2554
U 9636 ; WX 602 ; N uni25A4 ; G 2555
U 9637 ; WX 602 ; N uni25A5 ; G 2556
U 9638 ; WX 602 ; N uni25A6 ; G 2557
U 9639 ; WX 602 ; N uni25A7 ; G 2558
U 9640 ; WX 602 ; N uni25A8 ; G 2559
U 9641 ; WX 602 ; N uni25A9 ; G 2560
U 9642 ; WX 602 ; N H18543 ; G 2561
U 9643 ; WX 602 ; N H18551 ; G 2562
U 9644 ; WX 602 ; N filledrect ; G 2563
U 9645 ; WX 602 ; N uni25AD ; G 2564
U 9646 ; WX 602 ; N uni25AE ; G 2565
U 9647 ; WX 602 ; N uni25AF ; G 2566
U 9648 ; WX 602 ; N uni25B0 ; G 2567
U 9649 ; WX 602 ; N uni25B1 ; G 2568
U 9650 ; WX 602 ; N triagup ; G 2569
U 9651 ; WX 602 ; N uni25B3 ; G 2570
U 9652 ; WX 602 ; N uni25B4 ; G 2571
U 9653 ; WX 602 ; N uni25B5 ; G 2572
U 9654 ; WX 602 ; N uni25B6 ; G 2573
U 9655 ; WX 602 ; N uni25B7 ; G 2574
U 9656 ; WX 602 ; N uni25B8 ; G 2575
U 9657 ; WX 602 ; N uni25B9 ; G 2576
U 9658 ; WX 602 ; N triagrt ; G 2577
U 9659 ; WX 602 ; N uni25BB ; G 2578
U 9660 ; WX 602 ; N triagdn ; G 2579
U 9661 ; WX 602 ; N uni25BD ; G 2580
U 9662 ; WX 602 ; N uni25BE ; G 2581
U 9663 ; WX 602 ; N uni25BF ; G 2582
U 9664 ; WX 602 ; N uni25C0 ; G 2583
U 9665 ; WX 602 ; N uni25C1 ; G 2584
U 9666 ; WX 602 ; N uni25C2 ; G 2585
U 9667 ; WX 602 ; N uni25C3 ; G 2586
U 9668 ; WX 602 ; N triaglf ; G 2587
U 9669 ; WX 602 ; N uni25C5 ; G 2588
U 9670 ; WX 602 ; N uni25C6 ; G 2589
U 9671 ; WX 602 ; N uni25C7 ; G 2590
U 9672 ; WX 602 ; N uni25C8 ; G 2591
U 9673 ; WX 602 ; N uni25C9 ; G 2592
U 9674 ; WX 602 ; N lozenge ; G 2593
U 9675 ; WX 602 ; N circle ; G 2594
U 9676 ; WX 602 ; N uni25CC ; G 2595
U 9677 ; WX 602 ; N uni25CD ; G 2596
U 9678 ; WX 602 ; N uni25CE ; G 2597
U 9679 ; WX 602 ; N H18533 ; G 2598
U 9680 ; WX 602 ; N uni25D0 ; G 2599
U 9681 ; WX 602 ; N uni25D1 ; G 2600
U 9682 ; WX 602 ; N uni25D2 ; G 2601
U 9683 ; WX 602 ; N uni25D3 ; G 2602
U 9684 ; WX 602 ; N uni25D4 ; G 2603
U 9685 ; WX 602 ; N uni25D5 ; G 2604
U 9686 ; WX 602 ; N uni25D6 ; G 2605
U 9687 ; WX 602 ; N uni25D7 ; G 2606
U 9688 ; WX 602 ; N invbullet ; G 2607
U 9689 ; WX 602 ; N invcircle ; G 2608
U 9690 ; WX 602 ; N uni25DA ; G 2609
U 9691 ; WX 602 ; N uni25DB ; G 2610
U 9692 ; WX 602 ; N uni25DC ; G 2611
U 9693 ; WX 602 ; N uni25DD ; G 2612
U 9694 ; WX 602 ; N uni25DE ; G 2613
U 9695 ; WX 602 ; N uni25DF ; G 2614
U 9696 ; WX 602 ; N uni25E0 ; G 2615
U 9697 ; WX 602 ; N uni25E1 ; G 2616
U 9698 ; WX 602 ; N uni25E2 ; G 2617
U 9699 ; WX 602 ; N uni25E3 ; G 2618
U 9700 ; WX 602 ; N uni25E4 ; G 2619
U 9701 ; WX 602 ; N uni25E5 ; G 2620
U 9702 ; WX 602 ; N openbullet ; G 2621
U 9703 ; WX 602 ; N uni25E7 ; G 2622
U 9704 ; WX 602 ; N uni25E8 ; G 2623
U 9705 ; WX 602 ; N uni25E9 ; G 2624
U 9706 ; WX 602 ; N uni25EA ; G 2625
U 9707 ; WX 602 ; N uni25EB ; G 2626
U 9708 ; WX 602 ; N uni25EC ; G 2627
U 9709 ; WX 602 ; N uni25ED ; G 2628
U 9710 ; WX 602 ; N uni25EE ; G 2629
U 9711 ; WX 602 ; N uni25EF ; G 2630
U 9712 ; WX 602 ; N uni25F0 ; G 2631
U 9713 ; WX 602 ; N uni25F1 ; G 2632
U 9714 ; WX 602 ; N uni25F2 ; G 2633
U 9715 ; WX 602 ; N uni25F3 ; G 2634
U 9716 ; WX 602 ; N uni25F4 ; G 2635
U 9717 ; WX 602 ; N uni25F5 ; G 2636
U 9718 ; WX 602 ; N uni25F6 ; G 2637
U 9719 ; WX 602 ; N uni25F7 ; G 2638
U 9720 ; WX 602 ; N uni25F8 ; G 2639
U 9721 ; WX 602 ; N uni25F9 ; G 2640
U 9722 ; WX 602 ; N uni25FA ; G 2641
U 9723 ; WX 602 ; N uni25FB ; G 2642
U 9724 ; WX 602 ; N uni25FC ; G 2643
U 9725 ; WX 602 ; N uni25FD ; G 2644
U 9726 ; WX 602 ; N uni25FE ; G 2645
U 9727 ; WX 602 ; N uni25FF ; G 2646
U 9728 ; WX 602 ; N uni2600 ; G 2647
U 9729 ; WX 602 ; N uni2601 ; G 2648
U 9730 ; WX 602 ; N uni2602 ; G 2649
U 9731 ; WX 602 ; N uni2603 ; G 2650
U 9732 ; WX 602 ; N uni2604 ; G 2651
U 9733 ; WX 602 ; N uni2605 ; G 2652
U 9734 ; WX 602 ; N uni2606 ; G 2653
U 9735 ; WX 602 ; N uni2607 ; G 2654
U 9736 ; WX 602 ; N uni2608 ; G 2655
U 9737 ; WX 602 ; N uni2609 ; G 2656
U 9738 ; WX 602 ; N uni260A ; G 2657
U 9739 ; WX 602 ; N uni260B ; G 2658
U 9740 ; WX 602 ; N uni260C ; G 2659
U 9741 ; WX 602 ; N uni260D ; G 2660
U 9742 ; WX 602 ; N uni260E ; G 2661
U 9743 ; WX 602 ; N uni260F ; G 2662
U 9744 ; WX 602 ; N uni2610 ; G 2663
U 9745 ; WX 602 ; N uni2611 ; G 2664
U 9746 ; WX 602 ; N uni2612 ; G 2665
U 9747 ; WX 602 ; N uni2613 ; G 2666
U 9748 ; WX 602 ; N uni2614 ; G 2667
U 9749 ; WX 602 ; N uni2615 ; G 2668
U 9750 ; WX 602 ; N uni2616 ; G 2669
U 9751 ; WX 602 ; N uni2617 ; G 2670
U 9752 ; WX 602 ; N uni2618 ; G 2671
U 9753 ; WX 602 ; N uni2619 ; G 2672
U 9754 ; WX 602 ; N uni261A ; G 2673
U 9755 ; WX 602 ; N uni261B ; G 2674
U 9756 ; WX 602 ; N uni261C ; G 2675
U 9757 ; WX 602 ; N uni261D ; G 2676
U 9758 ; WX 602 ; N uni261E ; G 2677
U 9759 ; WX 602 ; N uni261F ; G 2678
U 9760 ; WX 602 ; N uni2620 ; G 2679
U 9761 ; WX 602 ; N uni2621 ; G 2680
U 9762 ; WX 602 ; N uni2622 ; G 2681
U 9763 ; WX 602 ; N uni2623 ; G 2682
U 9764 ; WX 602 ; N uni2624 ; G 2683
U 9765 ; WX 602 ; N uni2625 ; G 2684
U 9766 ; WX 602 ; N uni2626 ; G 2685
U 9767 ; WX 602 ; N uni2627 ; G 2686
U 9768 ; WX 602 ; N uni2628 ; G 2687
U 9769 ; WX 602 ; N uni2629 ; G 2688
U 9770 ; WX 602 ; N uni262A ; G 2689
U 9771 ; WX 602 ; N uni262B ; G 2690
U 9772 ; WX 602 ; N uni262C ; G 2691
U 9773 ; WX 602 ; N uni262D ; G 2692
U 9774 ; WX 602 ; N uni262E ; G 2693
U 9775 ; WX 602 ; N uni262F ; G 2694
U 9784 ; WX 602 ; N uni2638 ; G 2695
U 9785 ; WX 602 ; N uni2639 ; G 2696
U 9786 ; WX 602 ; N smileface ; G 2697
U 9787 ; WX 602 ; N invsmileface ; G 2698
U 9788 ; WX 602 ; N sun ; G 2699
U 9789 ; WX 602 ; N uni263D ; G 2700
U 9790 ; WX 602 ; N uni263E ; G 2701
U 9791 ; WX 602 ; N uni263F ; G 2702
U 9792 ; WX 602 ; N female ; G 2703
U 9793 ; WX 602 ; N uni2641 ; G 2704
U 9794 ; WX 602 ; N male ; G 2705
U 9795 ; WX 602 ; N uni2643 ; G 2706
U 9796 ; WX 602 ; N uni2644 ; G 2707
U 9797 ; WX 602 ; N uni2645 ; G 2708
U 9798 ; WX 602 ; N uni2646 ; G 2709
U 9799 ; WX 602 ; N uni2647 ; G 2710
U 9800 ; WX 602 ; N uni2648 ; G 2711
U 9801 ; WX 602 ; N uni2649 ; G 2712
U 9802 ; WX 602 ; N uni264A ; G 2713
U 9803 ; WX 602 ; N uni264B ; G 2714
U 9804 ; WX 602 ; N uni264C ; G 2715
U 9805 ; WX 602 ; N uni264D ; G 2716
U 9806 ; WX 602 ; N uni264E ; G 2717
U 9807 ; WX 602 ; N uni264F ; G 2718
U 9808 ; WX 602 ; N uni2650 ; G 2719
U 9809 ; WX 602 ; N uni2651 ; G 2720
U 9810 ; WX 602 ; N uni2652 ; G 2721
U 9811 ; WX 602 ; N uni2653 ; G 2722
U 9812 ; WX 602 ; N uni2654 ; G 2723
U 9813 ; WX 602 ; N uni2655 ; G 2724
U 9814 ; WX 602 ; N uni2656 ; G 2725
U 9815 ; WX 602 ; N uni2657 ; G 2726
U 9816 ; WX 602 ; N uni2658 ; G 2727
U 9817 ; WX 602 ; N uni2659 ; G 2728
U 9818 ; WX 602 ; N uni265A ; G 2729
U 9819 ; WX 602 ; N uni265B ; G 2730
U 9820 ; WX 602 ; N uni265C ; G 2731
U 9821 ; WX 602 ; N uni265D ; G 2732
U 9822 ; WX 602 ; N uni265E ; G 2733
U 9823 ; WX 602 ; N uni265F ; G 2734
U 9824 ; WX 602 ; N spade ; G 2735
U 9825 ; WX 602 ; N uni2661 ; G 2736
U 9826 ; WX 602 ; N uni2662 ; G 2737
U 9827 ; WX 602 ; N club ; G 2738
U 9828 ; WX 602 ; N uni2664 ; G 2739
U 9829 ; WX 602 ; N heart ; G 2740
U 9830 ; WX 602 ; N diamond ; G 2741
U 9831 ; WX 602 ; N uni2667 ; G 2742
U 9832 ; WX 602 ; N uni2668 ; G 2743
U 9833 ; WX 602 ; N uni2669 ; G 2744
U 9834 ; WX 602 ; N musicalnote ; G 2745
U 9835 ; WX 602 ; N musicalnotedbl ; G 2746
U 9836 ; WX 602 ; N uni266C ; G 2747
U 9837 ; WX 602 ; N uni266D ; G 2748
U 9838 ; WX 602 ; N uni266E ; G 2749
U 9839 ; WX 602 ; N uni266F ; G 2750
U 9840 ; WX 602 ; N uni2670 ; G 2751
U 9841 ; WX 602 ; N uni2671 ; G 2752
U 9842 ; WX 602 ; N uni2672 ; G 2753
U 9843 ; WX 602 ; N uni2673 ; G 2754
U 9844 ; WX 602 ; N uni2674 ; G 2755
U 9845 ; WX 602 ; N uni2675 ; G 2756
U 9846 ; WX 602 ; N uni2676 ; G 2757
U 9847 ; WX 602 ; N uni2677 ; G 2758
U 9848 ; WX 602 ; N uni2678 ; G 2759
U 9849 ; WX 602 ; N uni2679 ; G 2760
U 9850 ; WX 602 ; N uni267A ; G 2761
U 9851 ; WX 602 ; N uni267B ; G 2762
U 9852 ; WX 602 ; N uni267C ; G 2763
U 9853 ; WX 602 ; N uni267D ; G 2764
U 9854 ; WX 602 ; N uni267E ; G 2765
U 9855 ; WX 602 ; N uni267F ; G 2766
U 9856 ; WX 602 ; N uni2680 ; G 2767
U 9857 ; WX 602 ; N uni2681 ; G 2768
U 9858 ; WX 602 ; N uni2682 ; G 2769
U 9859 ; WX 602 ; N uni2683 ; G 2770
U 9860 ; WX 602 ; N uni2684 ; G 2771
U 9861 ; WX 602 ; N uni2685 ; G 2772
U 9862 ; WX 602 ; N uni2686 ; G 2773
U 9863 ; WX 602 ; N uni2687 ; G 2774
U 9864 ; WX 602 ; N uni2688 ; G 2775
U 9865 ; WX 602 ; N uni2689 ; G 2776
U 9866 ; WX 602 ; N uni268A ; G 2777
U 9867 ; WX 602 ; N uni268B ; G 2778
U 9872 ; WX 602 ; N uni2690 ; G 2779
U 9873 ; WX 602 ; N uni2691 ; G 2780
U 9874 ; WX 602 ; N uni2692 ; G 2781
U 9875 ; WX 602 ; N uni2693 ; G 2782
U 9876 ; WX 602 ; N uni2694 ; G 2783
U 9877 ; WX 602 ; N uni2695 ; G 2784
U 9878 ; WX 602 ; N uni2696 ; G 2785
U 9879 ; WX 602 ; N uni2697 ; G 2786
U 9880 ; WX 602 ; N uni2698 ; G 2787
U 9881 ; WX 602 ; N uni2699 ; G 2788
U 9882 ; WX 602 ; N uni269A ; G 2789
U 9883 ; WX 602 ; N uni269B ; G 2790
U 9884 ; WX 602 ; N uni269C ; G 2791
U 9888 ; WX 602 ; N uni26A0 ; G 2792
U 9889 ; WX 602 ; N uni26A1 ; G 2793
U 9904 ; WX 602 ; N uni26B0 ; G 2794
U 9905 ; WX 602 ; N uni26B1 ; G 2795
U 9985 ; WX 602 ; N uni2701 ; G 2796
U 9986 ; WX 602 ; N uni2702 ; G 2797
U 9987 ; WX 602 ; N uni2703 ; G 2798
U 9988 ; WX 602 ; N uni2704 ; G 2799
U 9990 ; WX 602 ; N uni2706 ; G 2800
U 9991 ; WX 602 ; N uni2707 ; G 2801
U 9992 ; WX 602 ; N uni2708 ; G 2802
U 9993 ; WX 602 ; N uni2709 ; G 2803
U 9996 ; WX 602 ; N uni270C ; G 2804
U 9997 ; WX 602 ; N uni270D ; G 2805
U 9998 ; WX 602 ; N uni270E ; G 2806
U 9999 ; WX 602 ; N uni270F ; G 2807
U 10000 ; WX 602 ; N uni2710 ; G 2808
U 10001 ; WX 602 ; N uni2711 ; G 2809
U 10002 ; WX 602 ; N uni2712 ; G 2810
U 10003 ; WX 602 ; N uni2713 ; G 2811
U 10004 ; WX 602 ; N uni2714 ; G 2812
U 10005 ; WX 602 ; N uni2715 ; G 2813
U 10006 ; WX 602 ; N uni2716 ; G 2814
U 10007 ; WX 602 ; N uni2717 ; G 2815
U 10008 ; WX 602 ; N uni2718 ; G 2816
U 10009 ; WX 602 ; N uni2719 ; G 2817
U 10010 ; WX 602 ; N uni271A ; G 2818
U 10011 ; WX 602 ; N uni271B ; G 2819
U 10012 ; WX 602 ; N uni271C ; G 2820
U 10013 ; WX 602 ; N uni271D ; G 2821
U 10014 ; WX 602 ; N uni271E ; G 2822
U 10015 ; WX 602 ; N uni271F ; G 2823
U 10016 ; WX 602 ; N uni2720 ; G 2824
U 10017 ; WX 602 ; N uni2721 ; G 2825
U 10018 ; WX 602 ; N uni2722 ; G 2826
U 10019 ; WX 602 ; N uni2723 ; G 2827
U 10020 ; WX 602 ; N uni2724 ; G 2828
U 10021 ; WX 602 ; N uni2725 ; G 2829
U 10022 ; WX 602 ; N uni2726 ; G 2830
U 10023 ; WX 602 ; N uni2727 ; G 2831
U 10025 ; WX 602 ; N uni2729 ; G 2832
U 10026 ; WX 602 ; N uni272A ; G 2833
U 10027 ; WX 602 ; N uni272B ; G 2834
U 10028 ; WX 602 ; N uni272C ; G 2835
U 10029 ; WX 602 ; N uni272D ; G 2836
U 10030 ; WX 602 ; N uni272E ; G 2837
U 10031 ; WX 602 ; N uni272F ; G 2838
U 10032 ; WX 602 ; N uni2730 ; G 2839
U 10033 ; WX 602 ; N uni2731 ; G 2840
U 10034 ; WX 602 ; N uni2732 ; G 2841
U 10035 ; WX 602 ; N uni2733 ; G 2842
U 10036 ; WX 602 ; N uni2734 ; G 2843
U 10037 ; WX 602 ; N uni2735 ; G 2844
U 10038 ; WX 602 ; N uni2736 ; G 2845
U 10039 ; WX 602 ; N uni2737 ; G 2846
U 10040 ; WX 602 ; N uni2738 ; G 2847
U 10041 ; WX 602 ; N uni2739 ; G 2848
U 10042 ; WX 602 ; N uni273A ; G 2849
U 10043 ; WX 602 ; N uni273B ; G 2850
U 10044 ; WX 602 ; N uni273C ; G 2851
U 10045 ; WX 602 ; N uni273D ; G 2852
U 10046 ; WX 602 ; N uni273E ; G 2853
U 10047 ; WX 602 ; N uni273F ; G 2854
U 10048 ; WX 602 ; N uni2740 ; G 2855
U 10049 ; WX 602 ; N uni2741 ; G 2856
U 10050 ; WX 602 ; N uni2742 ; G 2857
U 10051 ; WX 602 ; N uni2743 ; G 2858
U 10052 ; WX 602 ; N uni2744 ; G 2859
U 10053 ; WX 602 ; N uni2745 ; G 2860
U 10054 ; WX 602 ; N uni2746 ; G 2861
U 10055 ; WX 602 ; N uni2747 ; G 2862
U 10056 ; WX 602 ; N uni2748 ; G 2863
U 10057 ; WX 602 ; N uni2749 ; G 2864
U 10058 ; WX 602 ; N uni274A ; G 2865
U 10059 ; WX 602 ; N uni274B ; G 2866
U 10061 ; WX 602 ; N uni274D ; G 2867
U 10063 ; WX 602 ; N uni274F ; G 2868
U 10064 ; WX 602 ; N uni2750 ; G 2869
U 10065 ; WX 602 ; N uni2751 ; G 2870
U 10066 ; WX 602 ; N uni2752 ; G 2871
U 10070 ; WX 602 ; N uni2756 ; G 2872
U 10072 ; WX 602 ; N uni2758 ; G 2873
U 10073 ; WX 602 ; N uni2759 ; G 2874
U 10074 ; WX 602 ; N uni275A ; G 2875
U 10075 ; WX 602 ; N uni275B ; G 2876
U 10076 ; WX 602 ; N uni275C ; G 2877
U 10077 ; WX 602 ; N uni275D ; G 2878
U 10078 ; WX 602 ; N uni275E ; G 2879
U 10081 ; WX 602 ; N uni2761 ; G 2880
U 10082 ; WX 602 ; N uni2762 ; G 2881
U 10083 ; WX 602 ; N uni2763 ; G 2882
U 10084 ; WX 602 ; N uni2764 ; G 2883
U 10085 ; WX 602 ; N uni2765 ; G 2884
U 10086 ; WX 602 ; N uni2766 ; G 2885
U 10087 ; WX 602 ; N uni2767 ; G 2886
U 10088 ; WX 602 ; N uni2768 ; G 2887
U 10089 ; WX 602 ; N uni2769 ; G 2888
U 10090 ; WX 602 ; N uni276A ; G 2889
U 10091 ; WX 602 ; N uni276B ; G 2890
U 10092 ; WX 602 ; N uni276C ; G 2891
U 10093 ; WX 602 ; N uni276D ; G 2892
U 10094 ; WX 602 ; N uni276E ; G 2893
U 10095 ; WX 602 ; N uni276F ; G 2894
U 10096 ; WX 602 ; N uni2770 ; G 2895
U 10097 ; WX 602 ; N uni2771 ; G 2896
U 10098 ; WX 602 ; N uni2772 ; G 2897
U 10099 ; WX 602 ; N uni2773 ; G 2898
U 10100 ; WX 602 ; N uni2774 ; G 2899
U 10101 ; WX 602 ; N uni2775 ; G 2900
U 10132 ; WX 602 ; N uni2794 ; G 2901
U 10136 ; WX 602 ; N uni2798 ; G 2902
U 10137 ; WX 602 ; N uni2799 ; G 2903
U 10138 ; WX 602 ; N uni279A ; G 2904
U 10139 ; WX 602 ; N uni279B ; G 2905
U 10140 ; WX 602 ; N uni279C ; G 2906
U 10141 ; WX 602 ; N uni279D ; G 2907
U 10142 ; WX 602 ; N uni279E ; G 2908
U 10143 ; WX 602 ; N uni279F ; G 2909
U 10144 ; WX 602 ; N uni27A0 ; G 2910
U 10145 ; WX 602 ; N uni27A1 ; G 2911
U 10146 ; WX 602 ; N uni27A2 ; G 2912
U 10147 ; WX 602 ; N uni27A3 ; G 2913
U 10148 ; WX 602 ; N uni27A4 ; G 2914
U 10149 ; WX 602 ; N uni27A5 ; G 2915
U 10150 ; WX 602 ; N uni27A6 ; G 2916
U 10151 ; WX 602 ; N uni27A7 ; G 2917
U 10152 ; WX 602 ; N uni27A8 ; G 2918
U 10153 ; WX 602 ; N uni27A9 ; G 2919
U 10154 ; WX 602 ; N uni27AA ; G 2920
U 10155 ; WX 602 ; N uni27AB ; G 2921
U 10156 ; WX 602 ; N uni27AC ; G 2922
U 10157 ; WX 602 ; N uni27AD ; G 2923
U 10158 ; WX 602 ; N uni27AE ; G 2924
U 10159 ; WX 602 ; N uni27AF ; G 2925
U 10161 ; WX 602 ; N uni27B1 ; G 2926
U 10162 ; WX 602 ; N uni27B2 ; G 2927
U 10163 ; WX 602 ; N uni27B3 ; G 2928
U 10164 ; WX 602 ; N uni27B4 ; G 2929
U 10165 ; WX 602 ; N uni27B5 ; G 2930
U 10166 ; WX 602 ; N uni27B6 ; G 2931
U 10167 ; WX 602 ; N uni27B7 ; G 2932
U 10168 ; WX 602 ; N uni27B8 ; G 2933
U 10169 ; WX 602 ; N uni27B9 ; G 2934
U 10170 ; WX 602 ; N uni27BA ; G 2935
U 10171 ; WX 602 ; N uni27BB ; G 2936
U 10172 ; WX 602 ; N uni27BC ; G 2937
U 10173 ; WX 602 ; N uni27BD ; G 2938
U 10174 ; WX 602 ; N uni27BE ; G 2939
U 10178 ; WX 602 ; N uni27C2 ; G 2940
U 10181 ; WX 602 ; N uni27C5 ; G 2941
U 10182 ; WX 602 ; N uni27C6 ; G 2942
U 10204 ; WX 602 ; N uni27DC ; G 2943
U 10208 ; WX 602 ; N uni27E0 ; G 2944
U 10214 ; WX 602 ; N uni27E6 ; G 2945
U 10215 ; WX 602 ; N uni27E7 ; G 2946
U 10216 ; WX 602 ; N uni27E8 ; G 2947
U 10217 ; WX 602 ; N uni27E9 ; G 2948
U 10218 ; WX 602 ; N uni27EA ; G 2949
U 10219 ; WX 602 ; N uni27EB ; G 2950
U 10229 ; WX 602 ; N uni27F5 ; G 2951
U 10230 ; WX 602 ; N uni27F6 ; G 2952
U 10231 ; WX 602 ; N uni27F7 ; G 2953
U 10631 ; WX 602 ; N uni2987 ; G 2954
U 10632 ; WX 602 ; N uni2988 ; G 2955
U 10647 ; WX 602 ; N uni2997 ; G 2956
U 10648 ; WX 602 ; N uni2998 ; G 2957
U 10731 ; WX 602 ; N uni29EB ; G 2958
U 10746 ; WX 602 ; N uni29FA ; G 2959
U 10747 ; WX 602 ; N uni29FB ; G 2960
U 10752 ; WX 602 ; N uni2A00 ; G 2961
U 10799 ; WX 602 ; N uni2A2F ; G 2962
U 10858 ; WX 602 ; N uni2A6A ; G 2963
U 10859 ; WX 602 ; N uni2A6B ; G 2964
U 11013 ; WX 602 ; N uni2B05 ; G 2965
U 11014 ; WX 602 ; N uni2B06 ; G 2966
U 11015 ; WX 602 ; N uni2B07 ; G 2967
U 11016 ; WX 602 ; N uni2B08 ; G 2968
U 11017 ; WX 602 ; N uni2B09 ; G 2969
U 11018 ; WX 602 ; N uni2B0A ; G 2970
U 11019 ; WX 602 ; N uni2B0B ; G 2971
U 11020 ; WX 602 ; N uni2B0C ; G 2972
U 11021 ; WX 602 ; N uni2B0D ; G 2973
U 11026 ; WX 602 ; N uni2B12 ; G 2974
U 11027 ; WX 602 ; N uni2B13 ; G 2975
U 11028 ; WX 602 ; N uni2B14 ; G 2976
U 11029 ; WX 602 ; N uni2B15 ; G 2977
U 11030 ; WX 602 ; N uni2B16 ; G 2978
U 11031 ; WX 602 ; N uni2B17 ; G 2979
U 11032 ; WX 602 ; N uni2B18 ; G 2980
U 11033 ; WX 602 ; N uni2B19 ; G 2981
U 11034 ; WX 602 ; N uni2B1A ; G 2982
U 11364 ; WX 602 ; N uni2C64 ; G 2983
U 11373 ; WX 602 ; N uni2C6D ; G 2984
U 11374 ; WX 602 ; N uni2C6E ; G 2985
U 11375 ; WX 602 ; N uni2C6F ; G 2986
U 11376 ; WX 602 ; N uni2C70 ; G 2987
U 11381 ; WX 602 ; N uni2C75 ; G 2988
U 11382 ; WX 602 ; N uni2C76 ; G 2989
U 11383 ; WX 602 ; N uni2C77 ; G 2990
U 11385 ; WX 602 ; N uni2C79 ; G 2991
U 11386 ; WX 602 ; N uni2C7A ; G 2992
U 11388 ; WX 602 ; N uni2C7C ; G 2993
U 11389 ; WX 602 ; N uni2C7D ; G 2994
U 11390 ; WX 602 ; N uni2C7E ; G 2995
U 11391 ; WX 602 ; N uni2C7F ; G 2996
U 11800 ; WX 602 ; N uni2E18 ; G 2997
U 11807 ; WX 602 ; N uni2E1F ; G 2998
U 11810 ; WX 602 ; N uni2E22 ; G 2999
U 11811 ; WX 602 ; N uni2E23 ; G 3000
U 11812 ; WX 602 ; N uni2E24 ; G 3001
U 11813 ; WX 602 ; N uni2E25 ; G 3002
U 11822 ; WX 602 ; N uni2E2E ; G 3003
U 42760 ; WX 602 ; N uniA708 ; G 3004
U 42761 ; WX 602 ; N uniA709 ; G 3005
U 42762 ; WX 602 ; N uniA70A ; G 3006
U 42763 ; WX 602 ; N uniA70B ; G 3007
U 42764 ; WX 602 ; N uniA70C ; G 3008
U 42765 ; WX 602 ; N uniA70D ; G 3009
U 42766 ; WX 602 ; N uniA70E ; G 3010
U 42767 ; WX 602 ; N uniA70F ; G 3011
U 42768 ; WX 602 ; N uniA710 ; G 3012
U 42769 ; WX 602 ; N uniA711 ; G 3013
U 42770 ; WX 602 ; N uniA712 ; G 3014
U 42771 ; WX 602 ; N uniA713 ; G 3015
U 42772 ; WX 602 ; N uniA714 ; G 3016
U 42773 ; WX 602 ; N uniA715 ; G 3017
U 42774 ; WX 602 ; N uniA716 ; G 3018
U 42779 ; WX 602 ; N uniA71B ; G 3019
U 42780 ; WX 602 ; N uniA71C ; G 3020
U 42781 ; WX 602 ; N uniA71D ; G 3021
U 42782 ; WX 602 ; N uniA71E ; G 3022
U 42783 ; WX 602 ; N uniA71F ; G 3023
U 42786 ; WX 602 ; N uniA722 ; G 3024
U 42787 ; WX 602 ; N uniA723 ; G 3025
U 42788 ; WX 602 ; N uniA724 ; G 3026
U 42789 ; WX 602 ; N uniA725 ; G 3027
U 42790 ; WX 602 ; N uniA726 ; G 3028
U 42791 ; WX 602 ; N uniA727 ; G 3029
U 42889 ; WX 602 ; N uniA789 ; G 3030
U 42890 ; WX 602 ; N uniA78A ; G 3031
U 42891 ; WX 602 ; N uniA78B ; G 3032
U 42892 ; WX 602 ; N uniA78C ; G 3033
U 42893 ; WX 602 ; N uniA78D ; G 3034
U 42894 ; WX 602 ; N uniA78E ; G 3035
U 42896 ; WX 602 ; N uniA790 ; G 3036
U 42897 ; WX 602 ; N uniA791 ; G 3037
U 42922 ; WX 602 ; N uniA7AA ; G 3038
U 43000 ; WX 602 ; N uniA7F8 ; G 3039
U 43001 ; WX 602 ; N uniA7F9 ; G 3040
U 63173 ; WX 602 ; N uniF6C5 ; G 3041
U 64257 ; WX 602 ; N fi ; G 3042
U 64258 ; WX 602 ; N fl ; G 3043
U 64338 ; WX 602 ; N uniFB52 ; G 3044
U 64339 ; WX 602 ; N uniFB53 ; G 3045
U 64340 ; WX 602 ; N uniFB54 ; G 3046
U 64341 ; WX 602 ; N uniFB55 ; G 3047
U 64342 ; WX 602 ; N uniFB56 ; G 3048
U 64343 ; WX 602 ; N uniFB57 ; G 3049
U 64344 ; WX 602 ; N uniFB58 ; G 3050
U 64345 ; WX 602 ; N uniFB59 ; G 3051
U 64346 ; WX 602 ; N uniFB5A ; G 3052
U 64347 ; WX 602 ; N uniFB5B ; G 3053
U 64348 ; WX 602 ; N uniFB5C ; G 3054
U 64349 ; WX 602 ; N uniFB5D ; G 3055
U 64350 ; WX 602 ; N uniFB5E ; G 3056
U 64351 ; WX 602 ; N uniFB5F ; G 3057
U 64352 ; WX 602 ; N uniFB60 ; G 3058
U 64353 ; WX 602 ; N uniFB61 ; G 3059
U 64354 ; WX 602 ; N uniFB62 ; G 3060
U 64355 ; WX 602 ; N uniFB63 ; G 3061
U 64356 ; WX 602 ; N uniFB64 ; G 3062
U 64357 ; WX 602 ; N uniFB65 ; G 3063
U 64358 ; WX 602 ; N uniFB66 ; G 3064
U 64359 ; WX 602 ; N uniFB67 ; G 3065
U 64360 ; WX 602 ; N uniFB68 ; G 3066
U 64361 ; WX 602 ; N uniFB69 ; G 3067
U 64362 ; WX 602 ; N uniFB6A ; G 3068
U 64363 ; WX 602 ; N uniFB6B ; G 3069
U 64364 ; WX 602 ; N uniFB6C ; G 3070
U 64365 ; WX 602 ; N uniFB6D ; G 3071
U 64366 ; WX 602 ; N uniFB6E ; G 3072
U 64367 ; WX 602 ; N uniFB6F ; G 3073
U 64368 ; WX 602 ; N uniFB70 ; G 3074
U 64369 ; WX 602 ; N uniFB71 ; G 3075
U 64370 ; WX 602 ; N uniFB72 ; G 3076
U 64371 ; WX 602 ; N uniFB73 ; G 3077
U 64372 ; WX 602 ; N uniFB74 ; G 3078
U 64373 ; WX 602 ; N uniFB75 ; G 3079
U 64374 ; WX 602 ; N uniFB76 ; G 3080
U 64375 ; WX 602 ; N uniFB77 ; G 3081
U 64376 ; WX 602 ; N uniFB78 ; G 3082
U 64377 ; WX 602 ; N uniFB79 ; G 3083
U 64378 ; WX 602 ; N uniFB7A ; G 3084
U 64379 ; WX 602 ; N uniFB7B ; G 3085
U 64380 ; WX 602 ; N uniFB7C ; G 3086
U 64381 ; WX 602 ; N uniFB7D ; G 3087
U 64382 ; WX 602 ; N uniFB7E ; G 3088
U 64383 ; WX 602 ; N uniFB7F ; G 3089
U 64384 ; WX 602 ; N uniFB80 ; G 3090
U 64385 ; WX 602 ; N uniFB81 ; G 3091
U 64394 ; WX 602 ; N uniFB8A ; G 3092
U 64395 ; WX 602 ; N uniFB8B ; G 3093
U 64396 ; WX 602 ; N uniFB8C ; G 3094
U 64397 ; WX 602 ; N uniFB8D ; G 3095
U 64398 ; WX 602 ; N uniFB8E ; G 3096
U 64399 ; WX 602 ; N uniFB8F ; G 3097
U 64400 ; WX 602 ; N uniFB90 ; G 3098
U 64401 ; WX 602 ; N uniFB91 ; G 3099
U 64402 ; WX 602 ; N uniFB92 ; G 3100
U 64403 ; WX 602 ; N uniFB93 ; G 3101
U 64404 ; WX 602 ; N uniFB94 ; G 3102
U 64405 ; WX 602 ; N uniFB95 ; G 3103
U 64414 ; WX 602 ; N uniFB9E ; G 3104
U 64415 ; WX 602 ; N uniFB9F ; G 3105
U 64426 ; WX 602 ; N uniFBAA ; G 3106
U 64427 ; WX 602 ; N uniFBAB ; G 3107
U 64428 ; WX 602 ; N uniFBAC ; G 3108
U 64429 ; WX 602 ; N uniFBAD ; G 3109
U 64488 ; WX 602 ; N uniFBE8 ; G 3110
U 64489 ; WX 602 ; N uniFBE9 ; G 3111
U 64508 ; WX 602 ; N uniFBFC ; G 3112
U 64509 ; WX 602 ; N uniFBFD ; G 3113
U 64510 ; WX 602 ; N uniFBFE ; G 3114
U 64511 ; WX 602 ; N uniFBFF ; G 3115
U 65136 ; WX 602 ; N uniFE70 ; G 3116
U 65137 ; WX 602 ; N uniFE71 ; G 3117
U 65138 ; WX 602 ; N uniFE72 ; G 3118
U 65139 ; WX 602 ; N uniFE73 ; G 3119
U 65140 ; WX 602 ; N uniFE74 ; G 3120
U 65142 ; WX 602 ; N uniFE76 ; G 3121
U 65143 ; WX 602 ; N uniFE77 ; G 3122
U 65144 ; WX 602 ; N uniFE78 ; G 3123
U 65145 ; WX 602 ; N uniFE79 ; G 3124
U 65146 ; WX 602 ; N uniFE7A ; G 3125
U 65147 ; WX 602 ; N uniFE7B ; G 3126
U 65148 ; WX 602 ; N uniFE7C ; G 3127
U 65149 ; WX 602 ; N uniFE7D ; G 3128
U 65150 ; WX 602 ; N uniFE7E ; G 3129
U 65151 ; WX 602 ; N uniFE7F ; G 3130
U 65152 ; WX 602 ; N uniFE80 ; G 3131
U 65153 ; WX 602 ; N uniFE81 ; G 3132
U 65154 ; WX 602 ; N uniFE82 ; G 3133
U 65155 ; WX 602 ; N uniFE83 ; G 3134
U 65156 ; WX 602 ; N uniFE84 ; G 3135
U 65157 ; WX 602 ; N uniFE85 ; G 3136
U 65158 ; WX 602 ; N uniFE86 ; G 3137
U 65159 ; WX 602 ; N uniFE87 ; G 3138
U 65160 ; WX 602 ; N uniFE88 ; G 3139
U 65161 ; WX 602 ; N uniFE89 ; G 3140
U 65162 ; WX 602 ; N uniFE8A ; G 3141
U 65163 ; WX 602 ; N uniFE8B ; G 3142
U 65164 ; WX 602 ; N uniFE8C ; G 3143
U 65165 ; WX 602 ; N uniFE8D ; G 3144
U 65166 ; WX 602 ; N uniFE8E ; G 3145
U 65167 ; WX 602 ; N uniFE8F ; G 3146
U 65168 ; WX 602 ; N uniFE90 ; G 3147
U 65169 ; WX 602 ; N uniFE91 ; G 3148
U 65170 ; WX 602 ; N uniFE92 ; G 3149
U 65171 ; WX 602 ; N uniFE93 ; G 3150
U 65172 ; WX 602 ; N uniFE94 ; G 3151
U 65173 ; WX 602 ; N uniFE95 ; G 3152
U 65174 ; WX 602 ; N uniFE96 ; G 3153
U 65175 ; WX 602 ; N uniFE97 ; G 3154
U 65176 ; WX 602 ; N uniFE98 ; G 3155
U 65177 ; WX 602 ; N uniFE99 ; G 3156
U 65178 ; WX 602 ; N uniFE9A ; G 3157
U 65179 ; WX 602 ; N uniFE9B ; G 3158
U 65180 ; WX 602 ; N uniFE9C ; G 3159
U 65181 ; WX 602 ; N uniFE9D ; G 3160
U 65182 ; WX 602 ; N uniFE9E ; G 3161
U 65183 ; WX 602 ; N uniFE9F ; G 3162
U 65184 ; WX 602 ; N uniFEA0 ; G 3163
U 65185 ; WX 602 ; N uniFEA1 ; G 3164
U 65186 ; WX 602 ; N uniFEA2 ; G 3165
U 65187 ; WX 602 ; N uniFEA3 ; G 3166
U 65188 ; WX 602 ; N uniFEA4 ; G 3167
U 65189 ; WX 602 ; N uniFEA5 ; G 3168
U 65190 ; WX 602 ; N uniFEA6 ; G 3169
U 65191 ; WX 602 ; N uniFEA7 ; G 3170
U 65192 ; WX 602 ; N uniFEA8 ; G 3171
U 65193 ; WX 602 ; N uniFEA9 ; G 3172
U 65194 ; WX 602 ; N uniFEAA ; G 3173
U 65195 ; WX 602 ; N uniFEAB ; G 3174
U 65196 ; WX 602 ; N uniFEAC ; G 3175
U 65197 ; WX 602 ; N uniFEAD ; G 3176
U 65198 ; WX 602 ; N uniFEAE ; G 3177
U 65199 ; WX 602 ; N uniFEAF ; G 3178
U 65200 ; WX 602 ; N uniFEB0 ; G 3179
U 65201 ; WX 602 ; N uniFEB1 ; G 3180
U 65202 ; WX 602 ; N uniFEB2 ; G 3181
U 65203 ; WX 602 ; N uniFEB3 ; G 3182
U 65204 ; WX 602 ; N uniFEB4 ; G 3183
U 65205 ; WX 602 ; N uniFEB5 ; G 3184
U 65206 ; WX 602 ; N uniFEB6 ; G 3185
U 65207 ; WX 602 ; N uniFEB7 ; G 3186
U 65208 ; WX 602 ; N uniFEB8 ; G 3187
U 65209 ; WX 602 ; N uniFEB9 ; G 3188
U 65210 ; WX 602 ; N uniFEBA ; G 3189
U 65211 ; WX 602 ; N uniFEBB ; G 3190
U 65212 ; WX 602 ; N uniFEBC ; G 3191
U 65213 ; WX 602 ; N uniFEBD ; G 3192
U 65214 ; WX 602 ; N uniFEBE ; G 3193
U 65215 ; WX 602 ; N uniFEBF ; G 3194
U 65216 ; WX 602 ; N uniFEC0 ; G 3195
U 65217 ; WX 602 ; N uniFEC1 ; G 3196
U 65218 ; WX 602 ; N uniFEC2 ; G 3197
U 65219 ; WX 602 ; N uniFEC3 ; G 3198
U 65220 ; WX 602 ; N uniFEC4 ; G 3199
U 65221 ; WX 602 ; N uniFEC5 ; G 3200
U 65222 ; WX 602 ; N uniFEC6 ; G 3201
U 65223 ; WX 602 ; N uniFEC7 ; G 3202
U 65224 ; WX 602 ; N uniFEC8 ; G 3203
U 65225 ; WX 602 ; N uniFEC9 ; G 3204
U 65226 ; WX 602 ; N uniFECA ; G 3205
U 65227 ; WX 602 ; N uniFECB ; G 3206
U 65228 ; WX 602 ; N uniFECC ; G 3207
U 65229 ; WX 602 ; N uniFECD ; G 3208
U 65230 ; WX 602 ; N uniFECE ; G 3209
U 65231 ; WX 602 ; N uniFECF ; G 3210
U 65232 ; WX 602 ; N uniFED0 ; G 3211
U 65233 ; WX 602 ; N uniFED1 ; G 3212
U 65234 ; WX 602 ; N uniFED2 ; G 3213
U 65235 ; WX 602 ; N uniFED3 ; G 3214
U 65236 ; WX 602 ; N uniFED4 ; G 3215
U 65237 ; WX 602 ; N uniFED5 ; G 3216
U 65238 ; WX 602 ; N uniFED6 ; G 3217
U 65239 ; WX 602 ; N uniFED7 ; G 3218
U 65240 ; WX 602 ; N uniFED8 ; G 3219
U 65241 ; WX 602 ; N uniFED9 ; G 3220
U 65242 ; WX 602 ; N uniFEDA ; G 3221
U 65243 ; WX 602 ; N uniFEDB ; G 3222
U 65244 ; WX 602 ; N uniFEDC ; G 3223
U 65245 ; WX 602 ; N uniFEDD ; G 3224
U 65246 ; WX 602 ; N uniFEDE ; G 3225
U 65247 ; WX 602 ; N uniFEDF ; G 3226
U 65248 ; WX 602 ; N uniFEE0 ; G 3227
U 65249 ; WX 602 ; N uniFEE1 ; G 3228
U 65250 ; WX 602 ; N uniFEE2 ; G 3229
U 65251 ; WX 602 ; N uniFEE3 ; G 3230
U 65252 ; WX 602 ; N uniFEE4 ; G 3231
U 65253 ; WX 602 ; N uniFEE5 ; G 3232
U 65254 ; WX 602 ; N uniFEE6 ; G 3233
U 65255 ; WX 602 ; N uniFEE7 ; G 3234
U 65256 ; WX 602 ; N uniFEE8 ; G 3235
U 65257 ; WX 602 ; N uniFEE9 ; G 3236
U 65258 ; WX 602 ; N uniFEEA ; G 3237
U 65259 ; WX 602 ; N uniFEEB ; G 3238
U 65260 ; WX 602 ; N uniFEEC ; G 3239
U 65261 ; WX 602 ; N uniFEED ; G 3240
U 65262 ; WX 602 ; N uniFEEE ; G 3241
U 65263 ; WX 602 ; N uniFEEF ; G 3242
U 65264 ; WX 602 ; N uniFEF0 ; G 3243
U 65265 ; WX 602 ; N uniFEF1 ; G 3244
U 65266 ; WX 602 ; N uniFEF2 ; G 3245
U 65267 ; WX 602 ; N uniFEF3 ; G 3246
U 65268 ; WX 602 ; N uniFEF4 ; G 3247
U 65269 ; WX 602 ; N uniFEF5 ; G 3248
U 65270 ; WX 602 ; N uniFEF6 ; G 3249
U 65271 ; WX 602 ; N uniFEF7 ; G 3250
U 65272 ; WX 602 ; N uniFEF8 ; G 3251
U 65273 ; WX 602 ; N uniFEF9 ; G 3252
U 65274 ; WX 602 ; N uniFEFA ; G 3253
U 65275 ; WX 602 ; N uniFEFB ; G 3254
U 65276 ; WX 602 ; N uniFEFC ; G 3255
U 65279 ; WX 602 ; N uniFEFF ; G 3256
U 65529 ; WX 602 ; N uniFFF9 ; G 3257
U 65530 ; WX 602 ; N uniFFFA ; G 3258
U 65531 ; WX 602 ; N uniFFFB ; G 3259
U 65532 ; WX 602 ; N uniFFFC ; G 3260
U 65533 ; WX 602 ; N uniFFFD ; G 3261
EndCharMetrics
EndFontMetrics
       0FFTMs  <   GDEF||6  X   GPOSxL    :GSUBz   <  2OS/2nT  BH   VcmapO  B  .cvt 먏  R  fpgm  Tt   gasp    U    glyfD  U head 6    6hheas 6X   $hmtxo 6|  6kern>l_ mD  !loca| X  6maxp0z $    name妗; D  !{postu   prepV: ix         =    )    )                               v w                  
   DFLT cyrl *grek Flatn V            MKD  SRB                    ^ AZE  ^CRT  ^GAG  ^ISM  ^KAZ  ^KRK  ^KSM  ^LSM  ^MOL  ^NSM  ^ROM  ^SKS  ^SSM  ^TAT  ^TRK  ^        kern mark mkmk                                " B j    B H N T Z ` f l r x ~                      f <   < < <   f f   f 8 <     f f f f f f                        ww yy {         w  &                                                                  $  *  0  6  <  B  H  N  T  Z  `  f  l  r  x                      D   D D                              F *06<BHNTZ`flrx~ &,28>DJPV\bhntz		
				"	(	.	4	:	@	F	L	R	X	^	d	j	p	v	|					  			  	  			  									  
 





$
*
0
6
<
B
H  
N  
T  
Z  
`  
f
l
r
x
~  


  


  
  
  
  
  
  


  
  


  


     &,28>DJPV\bhnt  z
"(.4:@FLR  X^djpv| $*06<BHNTZ`flrx~ &,28>DJPV\bhntz
"(.4:@FLRX^djpv| $*06<BHNTZ`flrx~                                                   &  ,  2  8  >  D  J  P  V  \  b  h  n  t  z                        
"(.4:@FLRX^djpv| $*06<BHNTZ`flrx~ &,28>DJPV\bhntz
"(.4:@FLRX^djpv| $*06<BHNTZ`flrx~                     &,28>DJPV\bhntz
"(.4:@FLRX^djpv| $*06<BHNTZ`flrx~             &,28>DJPV\bhnt     a a   y y   a a   / /   %                 9R        %   < <       } }   a    } } a a                                  XD X   D    D        D    C }   D R D    }1 }   s1  R D    D }   GD G   D    D    D }R D  R D }   BD B   | -   D    ^D ^ }D }   ^D ^   ^D ^R FD F   m     2m }m } }   m D    D        D    D D R J J   =D =   | -   C }   D     y D a  } }        3 3      D }  BD        ^D     FD D R     D R }      g g   / /R D R D    D    |    ?D  %   a a           / /   D     9R     XD X   a a   D }       ^D ^R D    XD X   pD p   C    HD H   D  R     D    D    D    D    <D <   <D <   D    ?D  R  R D R D    ~D ~R D    D R C    C R }1 }   }D }   D    j    ? x   D }R D    GD G   GD GR GD GR D R D R D    D    D    D    1 1R D        D R D }R D }R D }   `D {   D    D    BD BR x  R C  R BD BR x  R D rP | -R D    D    D    D    D        D  FD FR FD FR FD FR      x i       N NR } }   D    D        D    s1  R D tR D      R     x i   D    D R D R  R D R D      , ,   D        D     9R D    y  + (  / @  
     } a        XD bD D 
D D D D D D wD D aD D D D  a D  D @ 
D @ 
D r   
D  @ D 
 D        bD  D    D    D    D    D    x x   D    D    D    pD p   D    D    GD G   D    D    D    \D \   \D    D 8   8D    lD m   D    D    D     R ^D ^ }D }   FD F   FD F   a  a   5D 5   bD    D    D    \D    ~D ~   *D *           ! !         < < c c - - 6     -    B B p p 2 2   -         R R      WD W   D    }D    D }R D    D      C }   C }   `            a     [    \        k   * U    %   D }   a    a aR     D          D        FD F   < <R     ^D ^    }D }       D        D    w w      V  V  BD  }D  D . aD  D     >D >    R D     BR  ~R         ^ d ND R ^ d ND R x x   BD B   - -   D    - -   D        D    k s   D    k s   D    k R D R     ?D ?         D        X X       D        >D >   a R D }R 3 R D }R {    D }R o R D %R 3 R D }R y y   D        D        c c   GD G        %       Q     f  D D }   }1 lD D D  D R         D  D    D    TD T   D    D    9    k k           D R  k $ =   D ]    4   5   6   7   8   9   :   ;   <   > ? @)) BAB CHJ ELL HPR IUV LXY N`a Pij Rnn Tpp Uss Vux W|| [ \ ^ _ ` b d h
 iR oTg ii kk mm     .. oo qr {{ ~~                      4477	
  ')-@DDEGGFVVGY]H||M&'NPRSTVW

XYc#e%'j)+mYdpy|  	      " - 5 ;w < G    $  *  0  6  <  B  H  N  T  Z  `  f  l  r  x  ~                                 & , 2 8 >  D  J  P  V  \  b  h  n  t  z                         D D D D D D D D D D D D D D D D D D  ,  m  m                                                                                                                D  m  D  m D D D D D D  D  D  D  D  D  D  D  D  D  D  D  D >    ) 2                                                                                                                            kk                                                                                          k                                                     &       & &   &                                                                                                                                                                               &                                                                                               &                                                                                                22                                                               &                                                                                                a                                                                                              k                                                                                        Yu  }                                                          }  }                                                                                             K                                                                                          k                                                                         K                                                                                                                       /                         / /     &                           K                                                                                                                <      kDD  k  aQeab    a              k      DD                                                                                          k2a                    D  D        }        DDDDD}    D             &   &  u}                      N  Y              NuYYY    Y             &   &                                                                                              2}                    a  N        N          aaNNNN    N                                                                                                              A                                                                                                                                                                                                       k  D                                                                                   K K   K K  Y  2                                                                                   K K   K K                                                                                                    <                                                                                     K K   K K                    k                                                                               K                                                                                         &                                                                                                                                                                                                                                                                                                                    Yu  }                                                                                  <      kDD  k  <aaD    a              k                                                                                                                             9 9 9 9                                                                                         D                                                                U    $ $  % %  & &  ' '  ( (  ) )  * *  - - 	 . . 
 / /  1 1  2 2  3 3  4 4  5 5  6 6  7 7  8 8  9 9  : :  ; ;  < <  = =  I I  N N  R R  U U  Y Z  [ [  \ \  m m  } }                                   !               "                                           # $		         "" && %00 :: ?? }} &  & ' (  
                $ $  & &  * *  - -  2 2 	 6 6 
 7 7  8 8  9 9  : :  ; ;  < <  D D  F F  H H  I I  L L  O O  R R  U U  V V  W W  X X  Y Y  Z Z  \ \  m m  } }             	   	                         !      !   "      "   #   $      $         %   &   %   &   %   &                     &   &   &   &                 &  &  & 	 '  (    
!! "" 
## $$ )%% && '' ++ (-- (// (00 11 33 (55 (66 *77 +88 ,99 +::  &  &  & )   & , +

 * + * + * +|| , - . / 0 1 /    i  $ % & ' ( ) * - . / 1 2 3 4 5 6 7 8 9 : ; < = I N R U Y Z [ \ m }                                                	 "&0:?}      
< DFLT cyrl 0grek blatn v               MKD   SRB                                   p AZE  CAT  CRT  ESP  GAG  GAL  ISM  KAZ  KRK  KSM  LSM  MOL  NSM  ROM  SKS  SSM  TAT  TRK                                             	aalt 8case >ccmp Ddlig Jliga Pliga Xlocl ^locl dsalt j        
                                   ( 0 8 @ H P X ` h     X                    ,    J    t               ` ` `   t     L M     ** __   ^^     ! 'UU (  X $ =  I I  K K  L M  O O                                                                                           		              "" $$ && (( ** ,, .. 00 22 44 66 88 :; == ?? AA HH RR TT VV           ** __   ^^     UU            	             	A    |    $        I O  O  I   I         I L  L   I    
     W    W   VA  $               J    2       & * .          J  y   
zx{y~w|  
    !    L M *_^U      c R      3  3   f   R 
      PfEd    `               ,   
       $     ,  
     `   `   ~?COXaw_emwV_?kxEMWY[]} & : > B I O S W d q         !!	!!!"!'!+!2!D!K!N!!" ""	""" "-"="C"H"U"a"e"""#####!#%#(#}##$#& &<&G&g&o''''))**/*k+,a,d,s,w,-%...%..GQWAGKOi|&(        COX`pzbjp1Ya? w{   HPY[]_   * < B D K Q W _ j t        !!	!!!"!&!*!2!A!K!N!P!!""""""#"8"B"H"P"`"d"""##### #%#(#}##$#% &8&?&`&i''''')**/*j+ ,`,c,g,u,y- ..."..DPT&FJNh{ (    |{zykiecOMKIGCA?='#X~}|{zxwvtsqpolkhgfeb[VTSJECB@><ieQ j;|uo߱߰߮߭߬,:42*fffee]eYeSeOeMeKe3e"eeeed                                                                                                                                                                                                                                                                                                                                                                      h              ~           b                                               ?    C  C    O  O    X  X    `  a    p  w    z                                 _  [  b  e    j  m    p  w                                                  
            7      =  1  V  A  Y  _  g  a    n        ?  ?                   k    w  x  W  {    Y      ^      _                               E    H  M    P  W    Y  Y    [  [    ]  ]    _  }              -      <      J      P      c      f       &  o   *   :     <   >     B   B     D   I     K   O     Q   S     W   W     _   d     j   q     t                                                                       !  !    !	  !	    !  !    !  !    !"  !"    !&  !'     !*  !+    !2  !2    !A  !D    !K  !K  	  !N  !N  
  !P  !    !  !  A  !  "   B  "  "    "  "	    "  "    "  "    "  "     "#  "-    "8  "=    "B  "C    "H  "H    "P  "U    "`  "a    "d  "e    "  "    "  "    "  "  	  #  #  	  #  #  	  #  #  	  #  #  	  #   #!  	   #%  #%  	"  #(  #(  	#  #}  #}  	$  #  #  	%  #  #  	9  $#  $#  	:  %   &   	;  &8  &<  
<  &?  &G  
A  &`  &g  
J  &i  &o  
R  '  '  
Y  '  '  
Z  '  '  
\  '  '  
]  '  )  
_  )  )    *  *    */  */    *j  *k    +   +    ,`  ,a    ,c  ,d    ,g  ,s    ,u  ,w  "  ,y  ,  %  -   -%  ,  .  .  R  .  .  S  ."  .%  T  ..  ..  X  D  G  Y  P  Q  ]  T  W  _      c      e      t  &  A  y  F  G    J  K    N  O    h  i    {  |                                     &    (  (                                           3   ֨   0    j    l 
                                                                       	 
                        ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a                                   r d e i x  p k v j   s g w9 l |"    c nT m } b    
 : y                   q z    {    `  j y    V \b y b  `{{ N \ =                  V   T q     \f{fb    --)      {bb   ??) f D )      y 
 V % h N  f   s     { j u y
 j d y{H y`  y q q
33 N y    j  ``'''D b j  y y b3' b   =   D ) f    R    R   5f V V    VJ!/ T   f D s    , %Id@QX Y!-,%Id@QX Y!-,   Py PXY%%#  Py PXY%-,KPX EDY!-,%E`D-,KSX%%EDY!!-,ED-         ff   @ m /1 0!%!!f sr)    6@r	ps   991 0@	````]%4632#"&!#5oNNppNNowwNppNOpp     h   @ s 1 <20#!#++      )   T@3	  	 

 991 /<22<2222220!!!3!!!!#!#!5!!5! F+`aaE````HFR`hh    $ + 2 h@;+2ww ,v %u"p3(
/,

 (%!
32<91 2<229073;.54673#.'#.>54&'xypay|ynPUcUcyehal;#7+'t;Ǵ,T=FVWJJ`     1h    ' 3 W@,*(}} }.}"p{4+%1	41 2<0KSXY""32654&'2#"&546!3#2#"&546"32654&@88@A88A˿NZ;ʿ˾A89@A88e-d     R . 8 @e,-,--,2130 ! 78/!! */,!60$ ($v&6~{-vp& 03 !%$') 3/,$. )$)399999999991 /2999990KSX999Y"0 ]@0/	078/0178		/
078/0178OOf0v/u0]])'#  5467.54$32#.#">7#5!#3%326!d33J|tket
<D	[JΪD78դNPP SCz9|r`R\	DqxxWlLCS1        s 1 0#+  ^  @v v 
21 0$  %^HU}ZZ̄x``    h  @v v 21 056'5  hUIx`yXYy`x4.   -9  W@/ 	
{
	 	<22<22991 <22990%#'-73%hbbibHH{x      "@ 	 
<<1 <<0!!#!5!   ? 	 !@ 	
	  
91 990>=!hbTЊVm    o    1 0!!ot   #`  8 KQX
 <<<<Y1 r	pKQX<<<<Y074632#"&pNOppONpNppNOpp    B  @
 s  /91 03#m  `1   "@ uu{p	1 0%26&#"   !   xYYxxYYx>+*>XHIuwwpq     
 :@*v{ 	 1 /2990KSXY"!5!5%!!w;yy      X@+
	*  u{  
9991 /990KSX9Y"#>3 !53!57$54&#"xzz?`ÉvdB%%ДJ     * U@-	vu)&u {p+ #	)
 #
 +9991 90>3 !"&'332654&+532654&#"#v!vyB4vy##̱((Hx{    T  =   L@%*v	v{ 
 <<91 /<<290KSXY")53!5!!!3qx  Cys+     G@&uu sp 
 	
 91 990!>3   !"&'332654&#"#BZ@zxLw3d34(*F?B   #  % 6@  uu	u{	p&
 #&1 90>32  !   !2#.#"2654&#"A_^XZvyngXXggWWu44qffiѯدد      7@   *s  	91 /0KSXY"	#!#!XE)   j#  # / C@% 'u!-uu{p0 $*$*	0991 990! $5467.54$! 4&#"3264&#"326ȺL\]KK]]K']rs\]rq^̥Υ$Ⱦ'wwuuշ   o  % @@##u#u u{p& 
	&1 90"32654&#" 54 !   !"&'3326gWWggXXxB^$2<Zvyo{دد55iafi    7    @	rrp <21 04632#"&4632#"&oNNpoOOnoNNppNNo-OpqNNnnNppNOpp   57   .@	r 91 904632#"&>=!oNNpoOOnib-OpqNNnneSϊXm     B  @  291 90	5-   -   @  <21 0!!!!   B  @  <91 905510P  T  " 9@r	!{	p# !#1 0%4632#"&>32#>54&#"#VpNOppONp|izwnw	yNppNOppY""++  o  N j@84O151 t
tM18%8DO45M J+J>O229991 <9999054&#"326#"&5463253>54&'.#"3267#"$'&5476$32 !#|ecyyce|,ZڿZ,ۏnq\^aYkzg9~~GͲ$sLHLLG}'갏`NTFEjśewzDC^TT~~|KJ}~|abo   L   @Q	
*v	vs 
 91 /<290KSX22Y"#5333!53!3!z23E{}y\yy1y#;   `  R   $ R@(v#vsv  ##	 % (#"%2299991 /2290&P&p&]353#5! !32654&+32654&+`uyyƤf}v     V  ?@ ~~	{p %1 0@0ou{{]!   !2#.#"3267;Iz 'Ωܕ+ef@A    `     8@vs
 v	 %	( #"299991 /220]%32+53#5!   !Uoy,GE+yy   `    W@.v	vsv ) (
#"2221 /0Po]353#5!#5!!53#5!!53`>yyy!  `    O@)	vsv )*
# ("2<21 /20]353#5!#5!!53#5!3`3{yy!y    V3  D@!v	~ ~{p( %1 90 P ].#"3267#5!#   !2-ҿT;I6 Ʊ&&xNLhi@A     `  3  ^@-	vsv -
-(
# (#"2222221 /<2<20@P]353#5!#!#5!#3!53!3` R  yyy
yyyydy   `  `  9@vs	v 
(# ("221 /220@0@P`p]353#5!#3` yyyy   jV{  @	~ 	vs (#
*.1 2990@/ //0@P]KTKT[KT[KT[X     @878Y@_ ___Y_p]533265#5!#!"&MLaMS^X+yy"  `  3 @>
	*	
vsv 
(# ("2<291 /<22<290KSX2Y"	 ]@	

,
&&**))'9H
E@E@CCCHA@@@W
SSSSSZy

=	
	!	&5	6B	GQ	Vv		]]353#5!##5!#	3!3` y-ٓgyyy!yy3yy     `  s  =@	vs	v (
 (#"21 /20@	0
000]353#5!#!53` Lyyy-  V  {  @D*
vsv ((	(# ("22991 /<2<290KSXY"]@>(Sp
&&&:VPf`uwvvp] ]353#5!	!#3!53#3Vhg 13yyByyysy  Z    ~@-*v
sv 	((( ("21 /<2<22990KSXY" ]@@Php&77h]]353#5!#5!#!3Z
myyyy7By     V   /@ ~~{p%	%1 0@	o]%2#"   !   {TxyS\BKLByjjdd     `     J@"vvsv /	*#	 ("2<99991 /220Pp]353#5!2#!332654&+`R&ppyyy㭑    V    E@~ ~{ p!	 %	%!999991 90@	o""""]$  !   ;#"&2#"u[xy5y3Lhjdt/92)BKLB  `    $ @H
	* v#vsv   #( $(#"%22999991 /<2229990KSX9Y" ]]3!.+3!53#5! %32654&+?Yz-ڙEaV= T\W`yÌMyyy!   L )@?#"$! * !~ '~{'p* ! 1$ 0*99991 90KSX99Y" +]@"(
(((((( (!("(#:
:::::: :!:":#X
XXXXXX X!X"X#k
kkkkkk k!k"k#
 !"#
 !"#?0+P+++] ]7332654&/.54$!2#.#"!"$ؿn۲'
ĵhлђHbvrZd+78Ǹ,,gf]a4742       o@	sv 
(# (1 /22990KTKT[KT[X     @878Y@@_`	
]!53!#!#5!3sgȇdyu-y     F  N@$ 	 vsp((((# .1 <299990@	?]#5!#326#5!# !   έ\yyyy &U     R  @9
	
*	v s
	 91 /<290KSX22Y"	]@
	## @P] ]###5!#	#5R}͍y\yy#y     	  @\   	
* 	vs 
 91 /<<<290KSX22Y"]@D
"CFSV 	&&'##EFFGH@TXWP] ])	!#5!#	!	#5!#VĠBH#Ι?\yykyy     
  3 )@f    * v
sv 	91 /<2<290KSX2222Y"]@4 * %&+++))+] ]KTKT[KT[KT[X     @878Y@8 ==;;44?O] ]	3!53	#5!#	#5!#	3!53ɸ-!?:yy;yy\yy5yy      @A
	


	*
vsv 
	 # 999991 /2<290KSX22Y"K	TKT[KT[KT[KT[X     @878Y@P
		 JJ[[YY_nnh	oo xxx	zzppp&] ]!53#5!#	#5!#3`D̦PNbyyy9yyBy     L    y@"		*	s	 	
 991 /0KSXY"K	TK
T[KT[KT[KT[X     @878YO]35!#!!53L{5hA    7  @vv  21 0!#3! 7xx      B  @
 s /91 0#m      @vv  21 0!53#5x2x       @
 s91 290	#	#JJ;-         /1 0!5  ۾  f  - 1 0 K	TKT[X     @878Y	#fx  T D  ( @1& &&p #35 #2)22991 /99990@,*:?????9O**
+// !"]]3!5#"&546;54&#"#5>3 5#"326hFnzjsq_q	cjMORdyTP?{Wc""leedl     /F  ! G@$! p><5 8"2221 /99990?#]7#5!>32  #"&'!532654&#"ǘ-pp-_jmYYmj_y#xSQQSyf實   TD  2@ 	p3 >21 0]#   !2#.#"3267&4oup~r}zkL&(**هπx    Th  ! L@% 

 p5 5<>2"<<1 /99990?###]54&#"3263!5#"  32#5!o`inYZmi`b-pp-i尦ySQ,*QSx  TD   e@" 
 p >9	?221 990@"` 	
 	
]]4&#"!32673#   !  5N^[O%|s+ .Xҩwηzt#(   ?    e@& 
 3 +	5 A<<1 /222990K
TX  @   878Y0	0
]#.#"!!3!53#5354632pKEPH:UN
NLsyyy5y   T9hD  , t@., #) #p-	35  <&>2-221 9999990@

(
?.  	
	
  	$
	]]!"&'53326=#"  325!4&#"3265jsq-pp-`inYZmi``!!ifySQ,*QSy尦    ?    x@,

 JH5F 5CA21 /<299990  ]K
TX  @   878Y/]353#5!>323!534&#"3F @}EUkdy#x}_Tyy5i#y    F     ;@	 K55A21 /20@/`]4632#"&3!53#5!pQOooOQpoTQooQOonuyy5y  h9=   L@%		3 K5A1 9990 / ]4632#"&#5!#"&'53265oRNpoOQp)<Iq;BI:TQopPOony\PG^{   F    @H			LL*	 	
 H5A2<991 /<2290KSX9Y"]@0
		
/?] ])53#5!#5!#3!533s}cy#xyyyy{X   F   	 1@ 5 5A
21 /20@/`]%3!53#5!?oyyy#x  F  HD 0 |@? + ').%!)#	 
HN5N"H* ($5&A12<91 /<<2<2990@ 2/2@2`2p22]>323!534&#"3!534&#"3!53#5!>32Js=S^h>R_h>nyjayyhyyhyy5y]Vc   F  D  y@,
 JH5F 5A221 /<299990  ]K
TX  @   878Y/]353#5!>323!534&#"3F@}EUkdy5y_Tyy5i#y    TD   -@ p>;	>21 0@`]%26&#"   !   p[Zqq\\q?>T  q+)     /VFD  # q@+ 
" 
 p$4 ><!5 8$2221 299990K
TX $ @  $ $878Y@	%?%%%]32654&#"%#5!>32  #"&'3!53)_jmYYmj_-pp-bHi實ySQQSHyy     TVhD  # S@*# 
 
p$45 <>2$2<<1 299990o%%]3!53#"  325!4&#"3265їc-pp-`inYZmi`!yySQ,*QSy尦     ;  LD  U@% 		
43 C5A21 /29990@/?O_]#.#"3!53#5!>32LqPLtF4|Y3US̵\yy5yok	   X-D )@CQ! 	
Q ! * ! ''p* !33 O$O 2*99991 90KSX99Y"@	
 ]@+++)	)
),,)6#E#Y	Y
YYYYYY Y!Y"Y#j	j
jjjjjj j!j"j#	
 !"#	
 !"#	
 !"#<]]7332654&/.54632#.#"!"&`qlsIi^Ձq	lo@SѠc)w}KF@F%)!mnEB6>%5     1q  ^@
 p	 8<21 22990KTK
T[X  @   878YO_]#53!!!32673#"&5˚b',:@>	ۜyJyuDVZ    /'  i@# pH5 F58<1 /<299990 ]K
TKT[X  @   878Y]3!5#"&5#5!3265#5?}BXkc'Ry_T+yky      '  }@:
	L  L * 
 	 	91 /<290KSX92Y"(]@,+KK[[]!#5!#	#5!#ub{yy`yyR   '  @[
	

L
  	L  LL*
 
	 91 /<<<290KSX22Y"]@:
+
7	

& ##**(7669G GCCFJW W	Y] ]#5!####5!#Pȋ}tZ}';LyyRfyy        ' 3@eLL   L L* 
 	/91 /<2<290KSX2222Y"   ]@ 

    % +++)"""99?9?985566LIILDDZ^^ZXWxx8 $ *5 9]]#5!#	3!533!53	#5!#ϼ<\ɏJwyyFyyyyyy   9'  @\      LL*  39991 <299990KSX222Y"  ]@B  %%55<<<<<<FFSSVV]]#"&'5326?#5!##5!#0s1xGqCCAP(1seubMJGc%5yyuyy   H  F'  @$	LL	*		 	
33 2991 /0KSXY"K	TK
T[KT[KT[KT[X     @878Y@'`] ]35!#!!53Hb5wwy9+w    m * \@/	+ #&' +#* &+<<299999991 99999990#"&'.=4&+5326=467>;#"3m2k==k2gpRcaRpy1>$npsyspm%=1x^"^     1 0#     y * ^@0"+# )+) " +<2<99999991 999999903265467.54&+532;#"+eoSbdSoe2k>>k2^"^x1=%mpsyspn$>1     ?  -@  991 99990#"'&'&'&#"5>32326]e_aM``d_eM?VR:BHIWQ9DH   {   )@rs	   991 0#"&54632!53pNOnoNNpuNnnNOpqJ     L  " S@+
  uup#


 ">#<<221 99990%%#$  %3#.'>7cWVR y.y;vqnd[h^kӝ%#&%~zj       L@( 
vu{v	
 <2291 /22990#.#"!!!53!53#534$!2xcTuf`Axalyy=y  L =  / u@>)0- *(- !'  -0	)'!$*	$	( $	0229999991 9999999902654&#"'7.5467'7>327'#"&[\[~|їљ0l=7m9͘ќ.j?:l\\\]~Ϛ.k@?l.͞Ӛ8o6?i/Ӛ  '  R $ @\*v
 vvs"v # #!	 %<2<29999991 /2<2<2<290KSX22Y" ]@HD  ,,##3553;??<LLEGXoo ] ]!53!5!5'!5!#5!#	#5!#!!!!3Fm=߉ $5myZu;uyy'yy#utNuy       @   <21 0##
 
  ?= 5 C @l)(*'W<=<$%#&W==<WC6C	
W66C*C=<6'&-  3{D=@#69&@#-'9C<#Y #WYW0@W V09WV*D99999999991 990KSX9999Y"#.#"#"&'5332654&/.5467.54632>54&'whaQ[6ZrrSMSfvhjW]5[ssSOJr,.[n-/]pVVJC/B/Hbsh+/ZZRJE/B/Hcrg,.Y!N-=f:X#O*<f;    )sN   K@	__ 1 <20 KTX     @878Y K
TX  @   878Y4632#"&%4632#"&X<<UV;<XW<<XX<<W<VV<<WX;<VV<;XX      / J G@&0G3=A3$A<9 $><D^6J<0*Z6Z\K1 /02#"$'&5476$"3267>54&'.#"&54632#.#"3267 mmllmmmmllmmyWVVVVVy{WVVVVXOWiiQhwviIbnmmmmnnmmmmnWWV{zVVVUWVz{VXV%'^j\Y     =  ! , k@7"*#	 # *{- $''"f'f-2299991 99990!!3!5#"&546;54&#"#5>325#"326qs3U{^_LX
`ITeHS=9?K^\96zr~ZYA>KA>CJ   ?-   -@	 	 h
h<2991 <299055?+	+-    @
  1 90!#!  o    1 0!!ot      $ < T @S
	11* I#=%I1O  #] ^^][OZ+[CZ+\7U229999991 /2<229990KSX9Y"3#'.+3!53#5!2%32654&+2#"$'&5476$"3267>54&'.'<d<u ;7VVVxcCOUUOC\mmllmmmmllmmyWVVVVVy{WVVVVX5)RD+RRRn_Yf$HCCHnmmmmnnmmmmnWWV{zVVVUWVz{VXV   P;  (  1 0 K
TX  @   878Y!!v    dL   @ zUU1 02#"&546"32654& Bz0/11-0|DHdcIHde3/0xDCy-03dHHbcGHd         )@	  
<2<21 /<<07!!!!#!5!ff   V  @@   { k 9991 990#5>32!53!57>54&#"^HPmdHdSI?WrRZ`T{]T_S     Z/ * N@)	)& {+ #	) #kk +9991 90>32#"&'5332654&+532654&#"oX@ifx|PP`VOX]b[)QWNHBP`idH^o]z{POVRPWTD@?FI@  Zsf  - 1 0 K	TKT[X     @878Y!#\f    9V'  @1 p5H5 F5A 22<1 /<2299990 !]K
TKT[X   @     878Y@!]3!5#"&'3!53#5!3265#57mJ;!nDXjc'Ry}SGyyyny   ;  -@
 s 		91 2290!####.54$o+q}Nݸ   
#  	 1 04632#"&pNOppONpNppNNoo o    @
	  	91 /0!#"&/32654&'R>;y0f4-U$<?!3@m4VZ/-BD    
 ?@* {	k 1 290KSXY"535733^eei}^     =    *@ 
{ ff991 0!!2654&#""&54632qLCCLMBBM?Vзѷ   b-   -@
  h
h <<991 <29905%5++-ABAB    'd& {     & {  '   td Z'd& u      \n+{  " 7@!r		# !#1 0#"&54632#"$54$75332673ZpNOnoNNp|izxmw
xNnnNOpq""+   Lk& $  zu  Lk& $  xu  Lk& $  {u  Lo& $  yu  L& $  wu   Lm  & ) @d)')(" !')()&%$#*)"v'	'x$ v#'%$*!")(  *999991 /<29990KSX22Y"32654&#"53.546323!53!3!N57MN65N_z:?uv=<E{}P6MM66MMzy%yJuuJv(yy1y#;        # @Y 
	*v !vvs	v 
	 $) "(#$<22991 /<2220KSX2Y"KTKT[KT[X $  $ $ @878Y!#53!3!53#5!#5!!53#5!!53KsTrPoo!;y/yyy!    Vo& &   zo   `  k& (  z/u `  k& (  x/u `  k& (  {/u `  & (  w/u `  `k& ,  zu `  `k& ,  xu `  `k& ,  {u `  `& ,  wu  X     L@&	vs v
 %( #"<2299991 /22<20]%32+!!53#53#5!   !L Wpy+HF*7yP
y  Z  o& 1  yu Vk& 2  z}u Vk& 2  x}u Vk& 2  {}u Vo& 2  y}u V& 2  w}u  /  /@
 	
	 <291 <290		'	7	HHHG9HHHH    D! 	  + |@=,+&
  )*&~~&{p,,#* #
 )#+%%#,999999991 99990@	o----]	.#"324&' !"$''7&5 !27*t
/-tøZZSjZ[[x
hZw{LzxNfAe+hdNNZfjMMZ Fk& 8  zu Fk& 8  xu Fk& 8  {u F& 8  wu  k& <  xu  `     W@)v	vvsv 
/*# ("2<<999991 /220Pp]353#5!#!2#!332654&+`/&ppyyyy   F 4 s@:/ .#	'"p	/.$* $3"2 *25
A5999991 /990@	/6666].#"!534$! #"#"&'332654'&/.546`pmb.SXbPdyb^L^YfZ|cwZy[Y(C=?lkbXHiu@Ji  T f& D   CX    T f& D   vX    T f& D  X    T V& D  X    T N& D   jX    T & D  X     TnD  5 @ @E(.&>6.& 7&>.+03 p&A8&;?'.3/6' ?;/#2A2299991 2<<9999990@@:,?-?.?/?0?1PBB+-/.//$%&'789:  ]]4&#">3  !32673#"&'#"&54$!354&#"#5>325#"326N^[OMo	%|r+NY| {grq_qmjOYV^XҩPNNηyuMONN?tWa""MSnqq`p    ToD& F   z    Tf& H   C    Tf& H   v    Tf& H      TN& H   j      f&    C    F  f&    v      f&         N&    j     T  - j@7" "(p.+%	 +%	+>;%>	2.99999991 99990@/`/] !  54 32.''%.'7%.#"32654&?*V,A/24d[J//K o^^oo\9m%.?n4d&>nI7g꾼k    F  V& Q      Tf& R   C    Tf& R   v    Tf& R      TV& R      TN& R   j      {    '@		 <<1 04632#"&4632#"&!!X=>XX>=XX=>XX>=X=XX=>XXZ>XX>=XX!    3#   ' |@>('%" &""p((& % '?; ?2(9999999991 99999990@)`)]	.#"326= !"&''7.5 !27ZMn]\Mm\
BCoPTAB?tHVZXYYHv12VKu)21V   /f& X   C    /f& X   v    /f& X      /N& X   j   9f& \   vT     /VF  # q@+ 
" p $4 ><!5 8$2221 299990K
TX $ @  $ $878Y@	%?%%%]32654&#"#5!>32  #"&'3!53)_jmYYmj_-pp-bHi實xSQQSHyy 9N& \   jT     LP' qD $   T & qB D      L}'H $   T 5&w  D    oL'   $   To D'P   D   Vk& &  xyu Tf& F   v    Vk'{yu &   Tf'    F   V'yu &   TN'    F   Vk& &  |yu Tf& F      `  k& '  |au T& G  v X       T}  ) a@1 
& (
"$p#l! 5'%<>2*<<91 /<299990?+++]54&#"3263!5#"  32!5!5#5!3#o`inYZmi`b-pp-Di尦ySQ,*QS'x]xx  `  P' q D (   T' q   H   `  k'~/u (   T5'    H   `  '/u (   TN'    H   `o'   (   ToD'H   H   `  q& (  |+{ Tf& H      V3k'{u *   T9hf'    J   V3k& *  ~ju T9h5& J      V3'u *   T9hN'    J   V3' *   T9h' J   `  3k'{u +    k'{Du K    `  3 # '  353#535#5!#!5#5!#3#3!53!3!5!` R  Ryyyyy\yydyf     ?   %  353#535#5!!!>323!534&#"3F g@}EUkdy3gx߉_Tyy5i#y `  `o'yu ,     V&       `  `P' qD ,     ' qB     `  `k'~u ,   /  5&       `o`& ,  g    Fo& L      `  `& ,  u  F  ' 	 1@ 5 5A
21 /20@/`]%3!53#5!?oyyy5y `V;& ,   -   @""1   F9Y& L   M   @6%1   jV{k'{u -  h9f'?     `23' 	 .   F2'	 	 N    F  $   )53#5!#5!#3!533s}cy2yyyyyzX   `  sl'x6v /   F  l'xv O   `2s' 	 /   F2' 	 O   `  s'vo /   F  !'vk O   `  ' yi  /   F  ' y  O        O@,v	sv 
 
( (#"<2299991 /290353'%#5!#%!53mF TFfLyuyyNu         `@# 
 5 5	A<2<9991 /290@/Z`]]%3!53'7#5!7Do>ٗ@yyy`ixai  Z  l'xv 1   F  6' v  Q   Z2'\ 	 1   F2D' 	 Q   Z  k& 1  |u F  f& Q      ^  &~  Q    FV ( M@# (%#.)221 @%&!~ vs !~{&v /290353#5!67632!"&'5332654&#"3FPheSWSLaMczJHyya+*d""^Xnz0y    F9
D &  353#5!>32#"&'5332654&#"3F@}<Iq;BI:EUkdy5y_TߣPG^{+i#y VP' q{D 2   T' q   R   Vk'~}u 2   T5'    R   Vk'}u 2   Tf'    R    V  	  ' _@6&$v "v"s$ v	
 !## )% 	%(2299991 /0%#   !!"$'&5476$3!#5!!53#5!!53

edooyy49VLIW:3!  TD   4 @3")" " &2,&p5)?"#>9	?/252991 2<2<99990@6]]%26&#"4&#">3  32673#"&'#   !2p[Zqq\\O]ZNKv	%zs'фHFԇ?T  ҩPPL϶ztMOMO.)M    `  l'xvv 5   ;  L6' v  U   `2' 	 5   ;2LD' 	 U   `  k& 5  |au ;  Lf& U      Ll'xvv 6   X-6' v  V   Lk'{u 6   X-f&B  V     oL& 6   z    Xo-D& V   zB    Lk& 6  |u X-f& V  B    o' z    7   1oq& z   W       k& 7  |u 1>& W  vA       5!!#!#5!!!3!53LgȇdLɉuyyP     1q   #53!!!!!32673#"&=#53˚b'',:@>	ۜyJyyDVZy   Fo'yu 8   /V'    X   FP' qD 8   /' q   X   Fk'~u 8   /5'    X   Fl&   Q /& X    Fk'u 8   /f'    X   F_& 8   /o'& X      	r'{| :    f'}   Z    r'{| <  9f&^  \      & <  wu L  l'xvv =   H  F6' v  ]   L  'u =   H  F&L ]     L  k& =  |u H  Ff& ]  F     ?     %3!53#5354632#.#"?:UNpKEP$$yyy5yNL:>|     )F  '  7#535#5!!!>32  #"&'!5326&#"Ǟg-pp-_jmYYmj_y3gx߉SQQSyfʯ   
  R  ' 0  ! 2)53"#6327654'&+32654&+^_xx¿EFƛSSQP\_NNxciiyY[f>?;;  `  e|    /F  +  3276'&#"#5!67632#"'&'!53#5)/0jm-,,-mj0/Wy"-LLpヂpLL-ߺSSXXWXSSS)()(Sy#x      e  $  32)53!532767654'&'"+̍
őx]\]Yf"ucyyHLOK     F    326&#"5>32  #"&'!53)_jmYYmj_)-pp-ߺʯxSQQSyw     V  ;@~	 ~{	p% 1 0@{uu]6$!   !"$'332#"V;2zI'Ωܕ+)__@AoAMM@     V@ /  ! '&76!267632#4'&#"#&'&#"32767;z:=TUf<IqBI:'ggjjܕ_^+ef ~EEP#$^{^]fSS  T 0  #   !2547632#4'&#"#&'&#"32767&uv4nptsg<Iq BI:p??r>?==k@ALZY&(4TSP#$^{sهBAddgh@@x  X      
       !  )53"#6763276'&+?oEFS_mlllyY[fE+GE  `  e  '  !#!#3! '&5476767676;+"3%x
̄Y]\]Luyyiiޤcu"uOOLH    /F  +  54'&#"3276#3!5#"'&7632!#!L0/jm,--,mj/0-LLpゃpLL-"yPiSSXW6XXSSwyS()
()S   TD ' 3  %#"'&'5332?6'4# '&76 "276&d{xtp
-Bkx@!'垟2_p.---..\)^E?$!.0#XY`` _``a   `     )3!!#3!!#!#3y>`\`y   V  "  '&#"#676! !  5!3276hjܕ_^+;zT]d]\>SSqpjU熢  `V ) G@! %$%*91 @!~~ ~'{p*90#.#"!3# 32673# $5467.54$!2y4B魙.˸!Z{x9oѫ#    PV    "'533276'#5!#5!!53#5!d!a&(3{|VD	KK+y!Dn^ ={ 1  #&'&'&#"!!#"'&'5332765#53547632p&EP$$qqUQQNp&EP$$qqUQQN
9&:9y5\[	
9&9:y[\
	     Vs 4  67632#4'&#"#&'&#"3267#5!# '&76!2FMUf<Iq BI:-iimlhhT;O>EP#$^{XY&&xN&&hi     #D     !254	#5!#	#5!# ! 54w*-wSryyjyyý    ? 5  727654'&'53# 4'&#"3!53#5!>32
e?>*5gh21\Slmz"#Uk22 @}[\Zpp`y,@lccIC#$_R54NO#yy#x}_Tji  `  `   #5!#3#"'& '(_%yQyy<=cN    J  u   353#53#5!#3#3`տ yP
yyy   `  = !  	3!3!53#5!#672#4'&ٓg  y4LDIq @h4[yyyyy!w	
P$&   F   '  47632#4'&#"#5!#3!533!53st<IqBIs}cʣSTP$#/1ycyyyy{Xyy     F     %3!53#53#5!3#?oyyyfyDxDy     I  G %  %3!533!535'&'&'"#567627{q΁u[>FB,XA#"qJ9E(@yyyCyyi }%%M
~i  FH 0  %#"&5#5!#3265#5!#3265#5!#3!5#"&Jsy=S^h`>R_hx>njayy\hyy\hyyy]Vc   JV   5332765#5!#5!#!#"&d!a&'
mnQ	KJ+yyy7hN"     FVD    353#5!>323!534'&#"3F@}[\"#Uk22y5y_Tjj+yy߇54NO#y    V 
       !   %276!!'&#"{TxyS]R

S]
Q]]Qddy U& 2 X Ub& R V    U	:   ,     !26763 3!534&#" %2#"zTxVRTSMaL&S^!yy͕,	dyBKLB    UV\D  (  4'&#"    !2676323!526&"UI:?D?D<bp[Z\\{//+)A	
yy     
    %  !2#!3!53"#676327654'&+ϿEFS_pNMMMpwvwxyyY[fE+WVUV     /VF  6  3276'&#"47632#4'&#"67632#"'&'3!5)/0jm-,,-mj0/st<IqBI:-LLpヂpLL-bHiSSXXWXSSTSP#$^{S)()(SHyy    \ ! )  #5!#! 3!&'&+3!53326&+Y=<.ڙM(1V= \yy.-X`yÓ' yyx   L 1  %# '&5476?67654'&#"#6763 326735ќ]^44KLbb
YYnH32uvnn47401]f43GHJ,|{޸cd87+dZrv    X-D 2  %# '&546?>54'&#"#67632327673%|c񁀠ёS@78lDE	qjk^xxJJi%$:9lKKqUV5%>6B"#77m!TULM)%##@F%&>?w  S     |7 ( 3  32673#"'&7#"'&54%6676776'&'&72/$`6+IEKpNU}%&?0\qJW0YQ?7tG9LN[f%T7E,O|.X  19q $  #53!!!3!#"&'533276="#"&5˚b',:<Iq;BHۜyJyuDѣPG/-}`    $     "#6763!#5!3!5399FS_vdLI[fE+-yy  1 )  #53547632#&'&#"!!32673#"'&5˚st<IqBF ',:@>XNNNySTP$#/*yuDVZ@AED   V   %!#!#5!327673# '&9gȇd&'aL&'WSz{)#uJK,,^""pp    Ld& 8 % 3qb& X     \ "   764'5!! ! '&4 7!5JdddcJZ[yVٚ'`Vyyd<hdy        %2'&#53 !#"'&5#5!#QF<xz?%y '&y5)dZơ}Nyy>=         632#.#"3!53#5!#H1&DIq;BJxD̦P\{

PG/gyyyy  9D #  	#"&'5326?#5!#62#.#&V)0s1xGqCCAP(1se=Iq;BQlubMJGc%5yyuPG    L     35!5!!#!!!!53Lls5^<h
   H  F'   #!53!5#53!#!w	 5wXyyfyZ+w    G   !"&'332654&+5!#!ovyB	RGTy((H~h    {   	5!#5!#"32673# $5476gӉR	ByvoGఢ((yT  {`'   05!#5!#"32673# $5476gw5	Byvowնᰢ((yT     h>'   #5!#! 73 54$54B	5w<]qkf+w/b      #  #>3 3#!53!57$7!5!654&#"xzz??[`Éb5 vdB%%}hPbJ\k     `   !"&'332654&#!#5!#5!vy}3H((Hny  E`'    !"&'332654&#!#5!#5!EvyPy"q54y((HCyߨ5  .q #  !3#!"&/3327676'&+5#53bYbH>qZf.ItqyMU "R"#/0+y   /Vu{    % 4&#"56!23!53#5!)~fA̩bNqU\yyy         #+    .&           !5!3!!!!#!5!jXXXXS Ѣ            %#5#%   `  }k'?   '   `  6f'@   '   T	f'@   G   `V	' -   /   `9' M   /   F9G' M
   O   ZV
' -P   1   Z9	' MP   1   F9' M   Q    Lk& $  |u T f& D  Z    `  `k& ,  |u   f&       Vk& 2  |~u Tf& R      Fk& 8  |u /f& X      FJ'    8   /2'  X   Fu'    8   /]'  X   Fu'    8   /]'  X   Fu'    8   /]'  X   TD    LJ&H  $     T 2' D    LJ&H  $     T 2' D    P' qD    Tn' q      V &  .#"32675!5!5#5!3##   !2-ҿT;qǨI6 Ʊ&&xxxNLhi@A   9hD  / 7  4&#"32653#"&'5#5!4=#" 54 325!32767o`inYZmi`b$fjsz-pp-D&yv`ywNz!!yKIQSyifN-T   V3k'|u *   T9hf'   J   `  3k'|u .    k'|Hu N   V_' 2   T_D'  R   V_P' q{D   T_' q     Gk'|uy   G`f'G  T  h9f&      `  }' =   '   `  6' ]   '   T	' ]   G   V3l'xv *   T9hf'   J    `	 *  326#5!! '&5!3!53#5!#!#5!#s2ZI˃n  R q>o>x5{kyyyy
yy  `V@     4&#"56!23!53#5!	|vb`Ͽ@p|j¨2^yyy    Z  k'zu 1   F  f'   Q     Ll   .  !3264&#"!3!53!3!53&'&54767N57MN65)$SΎE{}Dz TCY#;nlMMlMS#TuJ;yy1yyf<JuTD  T l  ' 5 @  3!5#"&546;54&#"#5>3 5#"326!"&47673264&#"hFnzjsq_q	cjMORdX)$SSDZWM67LM67LyTP?{Wc""ldlw#T짧TC7LMlMM   l'xv    Tnf'      Dl'xvv    3#f'       Lp'@z $   T f'Y   D    Lm'}w $   T 5'Y   D   `  p'pz (   Tf'   H   `  m'}/w (   T5'   H     `p'$z ,    i&   ~  `  `m'}w ,   '  #&   ~ Vp'z 2   Tf'   R   Vm'}}w 2   T5'   R   `  p'z 5   ;  Lf'   U   `  m'}aw 5   ;  L5'   U   Fp'z 8   /f'   X   Fm'}w 8   /5'   X   )L& 6     X)-D& V      )'   7   1)q'    W    R &  #>76567$54'&57676'&2v^?mՖ;EEXN oA>Itw)oCuNka`o+FW7     eOZ? &  "#6 567$54&'"5767654'&rpApH=*kM?:>̓'Ur̀^I"q"N_nAqW2iVWj49  `  3k'|u +    k'|Ju K    FV   353#5!676323!534&#"3FQgfczJHyya+*
yyz0y    T0 # . :  %#"  32#5!72'&7#454"%54&#"326%)Mpp-Y.@fn(`inYZmi`*	),*QSxuS,OND|.Xi6    R4  !  65#5 ! 4%&5!" 4%3y[{?k\5zhcksޯ!l}    f  !  4'7! 4%&547624%pp:XtWr;ҋiݸѲ._|f*v   L   35!#!)'6767L{5^no*+hAmZbdm   HF'   35!#!)'6767Hb5wFnh1+y9+wmTh[v   L'u $   T N'Y   D   `o'$   (   ToD'   H   VJ'    2   T2' R   VJ'    2   T&' R   V'{u 2   TN'    R   VJ'    2   T2' R    P' q&D <  9& q^ \      Fr  !  %754'632'#767&1&#5!]Zjޙk}^rJI UeOx   F=D  5  %754'632'#767&1&54&#"3!53#5!>32J]ZjEUkd@}ޙk}^rJI UeOi#yy5y_T    1`q  '  %754%#53!!!632'#767&1&m]Z4b'ޙk}yJyZZrJI UeO h9='   #5!#"&'53265ۗ<Iq;BI:y\PG^{   T  , 8  326&#"5#"  32#5!>32  #"&'!54&#"326_jmYYmj_-pp--pp-`inYZmi`ߺʯ1SQ,*QSxSQQSyi6  RVD " . :  >32  #"&'353#"  32=!4&#"3265%326&#"-pp-n-pp-b`inYZmi`b_jmYYmj_SQQSHxySQ+
,QSy!6iiʯ   R!    !  '75373	3!53!3!;'7#>Z`, Z`E{ϨyR:3
NZ`+1~Zyy1y3+ŏ   f!   *  '7& !27#&'32673! '&'&#"RZzjtZ(jܕ+;gNZ'f )ZJ<T<]m      (  # ''7&5 !27#&'3267&#"&Tf4oqKMVp=k@>o}LyV(V5*P1hxI>   J  s   353#53#5!#!!!53`տ LLyP
yy  3!    )53'!#!7#53!ZudvLZTgƁyTZuuLZTg(    XC-D H  #"'&/&'&'&'327654'&/&'&547632#&!"326?n#F_e%R !q/8?%NIJeq 
?5QRt,')(B	Cqn&;>^),
qQ%%*LLD@{I"%5MOR6nb$$JM     H9'   !#5!#!6326?#"'&/&b5w<6&*(B	CqGx_d&Oy9+wa%$JM;>^,  `     "#5>3!2+3!53!2654&#mgq>E&'Ͽ\!R" ryyk     `  .D   2654&#"#5>;23!53mgq>E&UvS"R" rwEvyy     K  R   ,  53#5! )53532654&+32654&+!!KԿu¿MkhyƤy}v     ;  %  #5!#!#5!#3# !  5#53!326 έ\yy
yym&UkX    L    `H    # '  '7!53#5!73#5#3#5#!53!'#%3#!y꿿#yۊ{XoJJZ  t%Oyys%N\j!     T  % - 2  &'&''7&'& !27!32673#"'&#"7#HctjJ.-)txP	j=gs+ B;>q[O;MX^5#W#J(e#['X3ztmr	n jV   533265#53#5!#3#!"&MLaMS^X
yy`"   h9&  !      VV| # 0  !#32673# &=# '&76!2&#"326*MMaLMWS7_\韠\_7>>~҂͕X^""n[-,hi,-[R    T:DD  +  5!#326?#"&5#"  324&#"3265o:IB;qI<-pp-`inYZmi`y{^GPSQ,*QU6   J    (  326&+3!.+3!53#53#5! Y=<.ڙEaV= տT}.-X`yÌMyy#xHy   ;  LD    53#5!>32#.#"!!3!53;4|Y:qPLtC8	FyVyok	USfUyyyf         !53!53'#5!#!7#5!#3!3!` k̦kkk~ٔyyyyyy  9' % (  53'#5!#!7#5!#3##"&'5326?)SseRkMM0s1xGqCCAP(yuyyyyyyubMJGc%   T D  '  #5!>32+32673# $3264&#"Fnzjsq_qbcjMORdyTP?{Wc"""ldl    ThD  !  54&#"326!#3!5#"  325o`inYZmi`-pp-i6yySQ,*QS  ThD  !  326&#"!53#5!>32  #"&'M`inYZmi`-pp-Hiʰy6ySQQS  /F  -  326&#"354632#.#"67632  #"&'!5)_jmYYmj_<Iq;BI:-KLpp-ߺʯ1>PG^{Q)(QSy  TD  .@	> 31 @ 		p0>3   !"&'332654&#"T&8oup~r}zk۶**'πx     Ly8  .  %54'67 !"'#767&'&576!2#&'&#"\OAXXY_>>sLNޗutHG UeO
	 0@@sx^  T9C  .  54&#"326#"  32#5!#32673#"&5o`inYZmi`-KMpp-:IB;qI<i6Q(),*QSx}{^GP     TE # /  %3!5#"  325354632#.#"#54&#"326ї-pp-<Iq;BI:`inYZmi`yySQ,*QSnPG^{fi6    TD    !54&#" !   !"$'3326=VO[^N{	. +s|Xæ,7ݪtz     TD    326=%!54&#"#6$3   !  N^[O%|s+ 'ҩwηzt7    nBD 	 6  32765&'&#"#6$3 7327#"'&' ! '&'7/"'^[('
%>s+ ͯ/1;cvM/_t]Q3M&^ŧJTSR%_7[ztv+^*, 0]Qxft؛Vg    coD 1 L@+#3%> > +22<<91 @/'#%''p29/90476%6#&'&'";#"7673#"'&'4767.m}pJG]{A<9EB=ZD>MT(oXg:sEP3E)'1-?E.8F5XO6CQ&<9=KDQ   T`6 1  #"%53767676'&+5327654'&##56(gXo(TM>DZ=BE9<A{]GJp}m,[vQDK=9<&QC6OX5F8.E?-1')E3PE  TA6 C  #"%53767676'&+5327654'&##567327#"'&'EhXo(UM>DZ=BE9<A{]GJp}[/1:c	vM/_t]Q;QEK=9<&QC6OX5F8.E?-1')E3P:Y+^*, 0]Qx     TeD  "  %2654&+532654&#  ! mUn&&pVl7:̶=T_`I~xL_P:Gfg*7  h9'   #5!3##"&'53265#53ۗ<Iq;BI:y1yPG^{\y     T9E 
 6  #"326=%!"&'53326=#" 4763!54632#.#"pnYZmi`bjsq-p4<Iq;BI:6i!!ifySQ,昕PG^{f  T9h'  '  !#!"&'53326=#" 476#"3265<,jsq-pnYZmi`'y`!!ifySQ,昕!`6    TD   .#"327#5!#   !2~}z0/w4uɇ(x;74&(**  @'  %   !$'&54	#5!##5!# 327654TtrVJTuw0/0r3E39gMLK@tyyyy:(2  T+ & 6  432 32#54#"!"&54767&'&#"#327654'&'T&Z8it=Gj6~F2]r!e>"+BPZv`IrEe:PdnB'#Kk#)%6'0	;F  /V'   3!#"&5#5!3265#5 @}EUkd'x@_T+yRiy     F   +  353354632#.#"676323!534&#"3F<Iq;BI:@QR}EUkdyŌPG^{^**yy5i#y  F9
 :  353354632#.#"67632#"&'53326=4&#"3F<Iq;BI:@QR}<Iq;BI:EUkdyŌPG^{^**yy}PG^{}yi#y F  &        J  '   #5!3#"'&ݓ*,[KaQ]y8<=c0?     F  '     '!#3!53#ݗoyyyy5    B     %3!53#54767#5!67653eo$n51[n5*Jyyy #=KFxY#=L<     B      %3!53#&54!2#5!3#&73:o#B1
oryyynxxI_`     F9   #5!32673#"&5ݗ:IB;qI<x	f{^GP    F` '  !"&'332654&+5!3!53#5!!pvyB	5roTy((Hf}yy#xw     /1' *  %#"&5#5!3265#5!3265#5!3!5#"&Js=S^h>R_h>nja+yhyhyRy]Vc    /V1' *  %#"&5#5!3265#5!3265#5!3!#"&Js=S^h>R_h>nja+yhyhyy@]Vc   F9D =  >32#"&'53326=4&#"3!534&#"3!53#5!>32Js<Iq;BI:=S^h>R_h>nyjay}PG^{}Rhyyhyy5y]Vc i9D )  #5!>323!534&#"##"&'533265ݗ@}EUkd<Iq;BI:y_Tyy5i}PG^{     F9{D +  353#5!>32#32673#"&5674&#"3F@}:IB;qI<EUkdy5y_T\}{^GPhi#y       @'   353#5!#5!##3Ncgvgz0}}}V{z    TD 
       !  2767!!&'&"?>p.(j).['-.(+)`VWaS_aR       
, 
 )  %#"3!"$'.54676$3!#5!353#5#!53TSDoedW~99W%)=?)%P   S;D  &  32654 #" 326=   !"&'#  54 pVJ@``@JV܎@?t((3;rr;|  TL   %  3!53   !#5!#   %"!26&#o?>q\\{p[Zqyy+)Wyyq   ;L'   33265#5!#3!5#"&;qPLt4|Y=US̵yyyok	  ;L   332765#5!#3!5#"&;qPLtCC4|Y=USfhyyyok	   ;9' +  33265#5!#327673#"'&=#5#"'&;q.(LtIBqI<ts4VU|,-=U*)̵yy{//$#PST}o65  ;XLD   #.#"3!53#5!>32LqPLtCCF4|Y3USfhyyyok	     ;9LD #  #.#"32673#"&=#5!>32LqPLt:IB;qI<4|Y3US̵}{^GP}yok	     F  D   %3!534632#.#"?F<Iq;BIyyyPG/1y     F  D   %4'&#"#5>323!5IB;qI<Fyy1/GPyy    F  '  $  3!.+3!53#5!2%32654&+Rv$EBK-8{yfw|ay	?AyAt'yy5yo@o>Ff    F  '  $  #!53#5!#3267!#32654&#B8-KB$v^ya|wf oy5yy'tAyA?WfF>o   X9-D 8  332654&/&'&54632#.#"!"'32673#"&5`qlsIiIJ^Ձq	lo@SѠ,/:IB;qI<Hw}KF@F%*LL!mnEB6>%5c{^GP    h7 !  &7632#.#"#"&'53276'qUNpKER"7t<Iq;BI,]\NL:;ђeSPG/Ia  h9 .  54632#.#"#3##"&'53265#53+53UNpKEQ#$<Iq;BI:'NL:;yPG^{\yVy     T9 8 !  326?#"'&76'&#"#5>32V2IB;qI<t!=+IEKpNU}WS/GPSlQjP:LN\n    |8 ( 3  #&'&''$547632&7632#.#"%&#&7676'nJq0?&%}UNpKEI+6`$/0YO,E8Sޘ%ͧe\NL:Ft7?QX.|   FD   %3#!!5!4&#"#>32#',:@>	ۜyyJyDVZ  19q   #53!!!32673#"&5˚b':IB;qI<yJy{^GP    /'  %  #5!3#3!5#"&=#53#5!!3265䌌?}hBXkcXVy1yy_T\yVy1y%k   T' $  !#"&'.5467!5!2654&'5!c\Sz{T^b a}}_ @lICGFDKn@yy๡y    F<'   $#5!727654'&'53e?>*5gh21\Slm\Ry3pp`y,@lccIC#$   F  D'   	3!53	3!53Vyuq{y'Ryy`yy     F  d'   !3!53333!53ȋs}ABt}yyfRyy?H     F  8   >32'.#"3!533!530s1xGqCCAP(squbMJGc%yyuyy     ])   !53#5!##5!#3s̦ϕyyydyyy   H9'   35!#!!332673#"'&=Hb5wc:IB;qI<wty9+w{^GPSR}   HIF'  "  %#7675!#!367676%3276?b5w<9Xpa&Yy9+w
8\*"rUd"  G`'   !"&'332654&+5!#!ovyB	5wTy((Hf+w    h`' # -   547072654&+5!#!#&'&'&3276ABB	5wo~n4gS!`/!f+wTyҷl57M5]U!  T     353324&#"#5>3 #3thjsq_q1݇y0Wc""y   T     )53"&546!2#.#";3o1q_qsjhtyl""cW9     T     !#2!"&'533265+#q_qsjhty""cW0    8   3673# &546!2#."/]?[8q>H3H>q8[f6\DFR"  "RFg  V   $  47632"'&2#"   !   '&65'&Ll&'TxyS5''''56L&&BKLBydd  F  ='    TeD  "  % !";#" ! $5467.54$7lVp&&nUm=̶:TP_Lx~I`_֣gf   T +  .#"327#5!#   !254632#.#"~}z0/w4D><Iq;BI:ɇ(x;74&(PG^{    F  '  8&#       TV'   533!53%#5!#7!#3=S@sb}'cVy+yy?yyXy x     '   353#5!#!53xy5yy   TVC  .  4&#"32653!53#"  324632#.#"o`inYZmi`ac-ppMK-<Iq;BI:H6yySQ,*()Q(PG^{   T   "  353#53324&#"#5>3 #3#3thjsq_q1݇y4y0Wc""෿yy  T   "  )53#535"&546!2#.#";3#3o1q_qsjhty4y""cWy    T   )  !5#"  32#5!!!5354&#"326=5,-pp-w`inYZmi`NSQ,*QSxwi6    T`	* 2 >  3!5#"  32#5!!!"&'332654&+5!54&#"326ї-pp-pvyB	5,`inYZmi`}ySQ,*QSxwTy((Hf-i6   TI   : >  54&#"326 76!367676#7675#"  32#5!!o`inYZmi``)<9XpK-pp-=5i6UF%rw
8\*"SQ,*QSx    1  ,q 7  #53!!!30!2654'&/&'&54632#.#")"&5˚b',:bls$$jIJ^Ձq	lo@SѠ&ۜyJyu&F@#"%*LL!mnEB6>%5l  17& 9  #53!!'&7632#.#"#"&'53276'!32673#"&5˚bqUNpKER"7t<Iq;BI,,:@>	ۜyJ]\NL:;ђeSPG/Ia-uDVZ    12q . 8  #53!!!327&5 !2#.#"63 ! '#"&5354'&˚b',:Uc4oup~r},Ų
=-͍yJyuDW(**هpR@ǁuzAhiz   ?9 C  #.#"!3!>32#"&'5332654&#"3!53+!3!53#5354632pKEPH@}<Iq;BI:EUkd:UN
NLs_TߣPG^{+i#yy5yy5y     F   -  %!2654'&/.54632#.#")53#5!?*lt$$j^րp	lp !SXPy&F@#"%*!mnEB6 %.UNy#x     F      !53#5!!!53?=5wNy#xw    Z     )  #5!####5!##5!####5!#3[QўKQ[QўKQSsJCCuCCsJCCuCC    Z 6     #5!##5!#6zܫzS^^ SV 0  3!73#"'&5#4&#"#5>32332765#5]@}Z[:IBqI<st#"Uk22'xx_Tij{^$#PSTy˄75ONy  S9g =  %#"'&5#4&#"#5>32332765#5!32673#"&=#@}Z[:I@qI<st#"Uk22:IB;qI<_Tij{^$#PSTy˄75ONy}{^GP}     Z !  53#5!676323!534'&#"3_bgM)65Qu;<bdS8E! TCC5;;sCC=K,,_C  Z 0  53354632#.#"676323!534'&#"3Zb',-/I&+/)55Rt<;ccT7F !UCN[^~-(E4;;sCC=K,,_C  Z1  $  47632#"'&#5!#"'&'53327650%$53$$H35$%bHKK',-/I&+/. -,>Dg\./~-(E  Z   #.#"3!53#5!67632J41L+,~:biO"87Q0.99eCCDj>     Z   533276=#5!#3!5#"'&ZI42K,+}cj"78P0.99eCC4Dj>  Z *  533276=#5!#32673#"&=#5#"'&ZI42K,+}b/+&I/,-'"78P0.99eCCE(-~^[Fj>     Z ' 5  0#!53#5!#32767676?!#32767654/&#;4<UJu'rrs%
		&w&\k%$O!--0
$>M*00030#98   Zj   #5!####5!#3[QўKQsIDDuDD     Zk   #"&'5326?#5!##5!#,-J N.I,+*4KR[TB}+*(8[DD`DD    tf   tf'      R  @  {	 i	91 90!67R`XhC7`   R   >=!`X.C7`     R 
  0&'0!RiX.`7     2764'&#52#7&&'&6vTSSTvt'&l&'STTS     "'&4763"vTSSTv6&'&&tSTTS'&l&'     Z1 "  3276'&'&#"#7>323+5K0B;I(V/@??:ccbw.o44~/+CC  Z1 "  3+53&'&547632#&'&#";bbcc9@@?/V(I;B/KCC[+/~44o.w "   %%E  "   5-5Eʳ     |Nf   ##ZfD   |Nf   33|F   yf  <@	 91 290 K	TKT[X     @878YX W]3#'# դf  yf  4@	 91 <90 K	TKT[X     @878Y	373 դ x      3ü   P; q  Zsf v   f C    H@   3ü    ;; q  /      x    )3!#wI6wIl     lx   !#6wIx  &`  L   &`  L    oRgJ   533##5#5     og   !5g    V5  6@
  1 20 K	TKT[X     @878Y332673#"&}pccp}5INNI m)N 	 A	_ 1 0 K
TX  @   878Y KTX     @878Y462"&mWxWWxW<VV<;XX       U@	j 1 0 KTK	T[X     @878YKTKT[X     @878Y4632#"&732654&#"vvvvM67LM67Lvvvv7LM66MM =o    @
  
91 /0!33267#"&546}1'94'Q&6`*q}>AJ)-\T4m  fV  r@  		 99991 99990@,


	

	



]]5463232653#"&/&#"jf%G.G,$)1njf%G.H-$)1/F=/F=    f   :@ 91 <20 KTK	T[X     @878Y3#3#פfx   eX   327#"'&'-/1:c	vM/_t]Q+^*, 0]Qx    %  #&'&547#5!#7#5!#327674IH6/KRwwSYܤUH +:*+*$@m.CCCCJ k     Z 	  3!53#5!cUbbHCCC  Z! 2  53327654'&/&'&54632#&'&#"#"&_J	01TF&%E_k00>EETJ-,TFH7^44TS@ϧC##'$*+Ia^	=&%+,Ne/0  Z}   7#5!#3!53'3!537'#5!#-{V\\HY]cNT'DDCCCCDD  Z1 "  3+53&'&547632#&'&#";bbcc9@@?/V(I;B/KCC[+/~44o.w    ;   !!5!Fvмt     ;   !!5!3F4t    ;   !!5!3Fhht    ;   !!5!3F4t    ;   %3!5t  N  E        >=!%>=!1`X`X.C7`C7`  y  $   N  E    N  3   tf  Y  f C    Yrf v    xf    eV    P: q     M       U5    l)N    )rN j     ;    2#5676'&'&#"76,XPA1	$7I]h47Q%nn&1&8"#    f    xf     \   3m 'D        !8f    #!#Zfxx   U9'      U5   #."#4632}pp}INNI  
  #54767NJFE*hE+oOP7 m   '&547632'6 >*++'AD1-+db@	')>61+8B8Y(Bw/.  m   &'&547632(@bd+-1DA&,,)x./wB(Y8B8+16>)'  R f   !#if r C   Zsv v    b%   #5353# ü   D%   33##D㞼 gy _q   !5!#]   b   532654&'3#"&AJ)-\T4m2~1'84'Q&6`*q}=    r   "3"'&47637&&'&6vTSSTv&'l'&TSST        53533ü       #5!##a   %    #53533##ü    a   5!a   e9:   #"&'533265<Iq;BI:fPG^{   9\   !32673#"&5b:IB;qI<f{^GP lKp "  Kmp j"       4&#"3267"&5462V3%&22&%3ƈƈ$32%&23$ccb  >)r 
  >=3>NJFEp*hE+oOP7o   z     =o        fr   3m  ;r   #!#5vx ;jr   #"'#"&'327654532747$]87]en}KFJM	3HHsz  yv   yr   ;Vr =   <Vs   #."#4632}pp}<INNI9`t  ;r q f      B              8W )  &'&#"#5476763232767653#"'aXH7n43i]dcaXI6n62j\d`B$! &KH.)9B$! &KH.)9   @X   5!@yy   rX   5!r:yy      '=dT3gV  P!   'ZZNZZ    3   2764'&#52#7&&'&6vTSSTv&'l'&TSST    ;   53!3̼x 4s    35!n=n=    ;jr   67632632#&'"#45&'"$]78]en}KFJM	;3HHsz    '7'77pppppppppoppop j   "+52654/&'&5463=F/=F/e$&6"5YUd%!5"YU :  '      m  ) 'N     qm   #"%$#"5>323276q|Wcּ'-X8c
mgE@LebF@Lr   p	m    #&'& #67$2$ɟd$P8mlnww@l `  "    F  W' 	  !#5!!?
yHy     4   !53#!!!#3}}yV!-y  B  '   !!#3!53#B*yy5|     tf   3Ant  V H   %#AnH  Z  b   33!53##5!EĿ \zyy\yy     F  '   3#5!33!ω,zwSzw   W 	  =3?H33g2߂]    TD?   TD' yR F   TD' y zR?   57   jV{ -   Zsf  - 1 0 K	TKT[X     @878Y!#\f   )'   j    Lf&   
   
# y    $f't         f'z         f'z       f&       f'         f&"0      !& 2      L $   `  R %    `     %3!53#5!#5!ӿ3yyyy     <      )3!N`o)n   `   (   L   =   `  3 +    V   "  !#3!53#2#"   !    TxyS5BKLBydd `  ` ,   `  3 .     L   73!5333!53Dz23Enyyy\yy V  { 0   Z   1    q  #     53!3!#!##3!53#5{N{D{{7{{{{ZZ    V 2   `  2   `   3    S     3	!#5!	!53Sh{{*Z     7     <    V    & /  67654'&'3!535&'&57675#5!#%;2)]])2 ֜ ֝2(^^(N2rr1yyYne$\yy\$en|61rr2 
  3 ;      A /  3!#"3!535$'&6+5!2#5!#676]$f[v n[f$^-j r&^1ywiyyi~%y_-eyy7    \   # K@( ~{  g	g	%!%$991 /<22990%!53!56#"!3!&5 !  N#Ǣ"Orr} 0
'5 5}\A<}   `  `&  wu  &  wu Tf'    *   cof'    .   FV
f'    0   F !f&  2     F<'   >    TA  ,  6737'&'#  76&'&7676]T_w<,7$WVQ$$$P[>]2j0--.lj/Q3,_c"wBmy$:"),+
`W6XYR     V'  -  %3276'&'&+5327654'&!!"1>PS^/;IB4'+8:$5vSR`da	Ta^yxDYK0m)\oTS"f   2T'   '&7#5!76'&'53cĚA6\k36|u,>Kh̸Gwgnk!4fMJ,:    T ' 0  &54767632#&'&'&#"3    7626&"dd{xtp
-Bkx@!'_Yp[Z\\^E?$!.0#X+XL  coD    FUW   !#! 3 #5276#  47D{y?w?zG-jȚ!yo]Ll&  FV
D   3#5!>32!4&#"ݗ@}[\EUkdy_TjgXi  T,     !'&"!276   !  *11*h)..)Q?>AQ6sy{T    F !'   %'&5#5!7ų{zY!p|qRy3G    F  '   )53#5!##5!#3!533s}cy6xx~yyyy{X    I  G   %3!533!53&'&'&5676{q΁uc\-WA#"qJ9E(yyyCyy+'%M
	   9V'   !#5!3265#5!3!5#"&'3DXjc7mJ;!VXynyRy}SG   F  <'   )#5!6767654'&'53?IZp)>*<Ch2<QzEyQWmNy9L,;UQwapKq,`  FUW )  &'&54%!#!!3#3 #5276#&'&55UjWy0=f=PwF.jÜG=2V!yCxLbo]Lls8 TD R    F  '  K@#	 HH
5F 5A221 /<2220@	 /@]353#5!#3!53!3FPy5yyyy5y  V D    32654&#"%6 #"&'!_jmYYmj_V}p-HiHJQS  TU`D   % #5276#   !2#.#"G-l4oup~r}zTo]Ll&(**ه    T|' 
   %264&"   476)p[Z\\-T Z+Ꞌy  F !'   #!!327'&5yW{pcų!ybp|qR    F<'   $#5!727654'&'53bB>*4hh2JCSlm\Ry3upc~,AX6C#$   `V'  8  %676764'&#"!&'&'&'&547673%6O c7>*2Bl:|CCJ2hh4*>:Y+ϞOh2JC;>k-HQ]oY066XA,~fpgnG99NvX6/7    9D 5  %3!53&'&#"#567632#5!#327673#"'&'®ws(*<^212/<G?0jgbsd)*<^212/<G?0jjtkD.)hkklD.)    VV.' 5  67676547673!&'&'&'&5'&'53t
/*7>Jh42JCIv;7|CCJ24TJ>9('Jep]A,)n+X6;+Y066X~,H|mng	   QI' 6  %&'&54767332!327654'&'53''&CJ2hh4*>BQwbwQB>*4hh2JC;Pgd`6XA,~fpu
\upf~,AX6/7!'7  !N& j 2     F<N' j   >   Tf& o 8     F<f'    >   QIf'   B    `    353#5!##5!#	%37` y-xVI!yyy!yy3xU5  T, 	  (  676'&#"'& ! #327654'ix)4jm1*줠?4?f).qi6-+_Axy{^z~s=     Fx,  %  '&#"!3#! '&#5!3276 *[0柙Q6iq.)r?yA:ny(yݔ]dի    =     %6#6'&3!53&#5SyAH=N-.)hɷ|B|>, Wx`T/pyyF y     of'   K     =  'wuK    TV0   '   !! '&476!27654'&#"tdPY^]vv]^YP-qLq~a^f^a~q   Fb'  8  !32!327654'&%''&'&'&54767#5!{*>BQwbwQB>*,h2JC;Pgd`;CJ2h%"
@fpu
\upf=&%X6/7!'7/6X/yy   d9* B  !'&'&7'&76?6'&'&#676?7673#"&'5376*0w34%#[Y B/?p|j*R dQ4%#[S+6+?p n<IqA7rrj0>\(dTiO"0B'/0yuh1D(dTlG /C}KP#%  VY    %2#"!&'& !  {qxy֝\BKLBkh(dИ   TYD    %26&"!&'& !  p[Z\\$j?>kT _d!b)b    VU   % #5254# '& !2#.#"@T0lz 'Ω\q[Llkf@Af   TU` !  7653#"3 #5276#   'OptrDvc??zG-j4D3g<	edo]Ll&(    `     353#5!#5!!#5!3`3yy!y  BP %  47632#4&#"!!#"&'533276ԋtCYy4<K#9vEXy6;L#9vbZN9]ywcYN9[    k  :   )##5!33:vExyy?        	#!3犰*"|  {T   	#&'#&#"#6$3   !5276Jj)epԩ' zIjjhBݔ֡oA@__y  \VD   	#&'&'#&'&!5$#66ҁ +8UTa+cUwT2513,9'Gq h    d* 6  '&76?6'&'&#676?7673'&'&w34%#[Y B/?p|j(T dQ4%#[S+6+?pf.N0>\(dTiO"0B'//zuh1A(dTlG /C07rr     R D  0  32654&#"762#&'&#'&5%6 #"&'_jmYYmj_4<`2q2kTx^V}p-HiOJXO<,:)L-^JHJQS    TD F  h9= M    V     !32&'&#"   !   ]\I[\IsTxySB逡vdd TD   WD   `       /VF    326&#"!#5!>32  #"&')_jmYYmj_-pp-HiʯTFxSQQS V &    V  {   353#5!	!#3!53#3Vhg 13yy9yyysy   V'   	!3!#!C'Ry oV     UV8D  %  53%6 #"&'!!!532654&#"UdV}p-nb_jmYYmj_yeHJQSyppi   V>   V& &   yd " V' y ">   `  k&  z/u `  &  w/u J -  !"&'5332?654&#!3!53!#!#5!!2	WzSWMLa'!ǉ
'C@Op""^XKW_yyu   `  kk&~  xu  V  H@ %21 @ ~~	{p0@o0]!   ! #! !!! ;Iz@Njg'VfewǡN  L 6   `  ` ,   `  `&q  wujV{ -    -	< & /  75326#5!#32#!53!#"%32654&+-MR1ULxܡOi6R7nXX0^X>$yy
 xc޷	yƖ    `  	 & /  )53!3!53#5!#!#5!#3 %32654&+:RLЬx|OXXydyyyy
yy
ciN	y     F   !23!534&#!3!53!#!#5'ǉ
Lyy;yyu   `  3k&  xu `  3k&  zu 2g'r    `3   !"#4'&#!53#5!#!#5!#3ddg R yyy-yyy    p $$   `  e   F@
%	(#"2291 @vv	s v/20%32654&+!#5!3  )53#Ѹϐ`yy   `  R %    `  k  6@	(#"21 @
vs v/20]%3!53#5!#5!ӿyyyy   `   A@(#( 99991 @
v sv/222203!%#5!#3#4#!"#32GZJgy$dd$ylSMyyF? `   (      
k +  353	#5!##5!##5!#	3!533!53'3n+-yy-+n k~~ky#yyZyyZyy@yyAy8yyyy     `T ' l@	 &  %% (91 @	~~&#~ {p(90
KTX ) (   ( ( @878Y ]>3 ! $'332654&!#53 654&#"#:!.ǼB4y##>߽ix{    `  3  ~@-
-(
# (#"2222221 @*
	
vsv /<2<290KSX
	
	Y@P]353#5!#5#5!#3!533` R  yyykyyyyCDy    `  3'u   3KTKT[X 6 @   6 6848YKTX 6   6 6 @848Y     `  3  @(,"2<29991 @*	v sv/<2<290KSX@#	




	<<<<<<Y@	]!##5!#	3!533!53#` -"w E ydyyLyy=u8yy   -  E@	-#((	21 @
	~vspv/220%!#"'53326#5!#3!5w6R7]MNNR1UyM^X>$yyyy  V  { 0   `  3 +   V 2    `  2  M@-
-	# ((
#"221 @
vsv/<220@P]#3!53!3!53#52yyy-yyy    `   3   V &      7    2g  x@

91 @*
~ pvs<2990KSX@
	

9Y]"'5332?#5!#	#5!#
Mj3̨|D^Xb,ryy"yyb:   V  ?    ' `@%%(!#% ((<<2<<21 @
 s" 
v/<<2KSX!<<2!v<<2Y0!#   !3!535  54 !5#"32654&K a adddyPeyyePɤ<Ĥ 
  3 ;    `[  F@--
 (#(
"291 @	vsv
/2<20)53#5!#!#5!#3#4Z Ry$yyy0yyF?  ?    K@-(# ((#2<21 @	vsv/2<20]#3!53!"$5#5!#3!#5俿Q}dDyyyΣyyuwy  V  	  r@--#	(-#- (#"221 @vs 	v/22<<20@O	]@	  //q%!#5!#3!53#5!#!#5!#yyyyyy0yy     V	  z@
--#(-#-(#" 291 @v sv/22<<20@O! 	]@	  //q!#3#4#!53#5!#!#5!#!#y$d_yF?yyy0yy0      G    %32654&+!#3 )53!ww_`cQڿiyruy
@y   `  	?' ,      `  :   ;@(%(#"221 @	vvsv /220]353#5!#3 !'3265!#`wwyyy
My>   V   3! !5!! #$! ! $VV'glNAyA9o5  `	  ( Q@ %&%
-#(")2<2991 @#p{~pvsv/22990%3!53#5!#376!   ! '&#2#"xyS־yyyyy/ddη3BKLB  .      g@( #(/!2<1 @*	 vvsv/<222290KSX@-( 	  	<<Y]#"3.54$)#3!53#3!53r񌗗l¿(HE#yyy#yy   T D D    E6  (  47676%>736     '&326&"ELgAY	|CxD`1T>
\qp[ZTJ>:\zB%(n8tX
      F  ='   #  %32654&+532654&+53#5! !?ZvZOowOڭyYb]bJHDJRy5y_pt    F  d'   353#5!#5!3FyTy5yߨy   F'    325#5!#3#'&#!"3!!FBkUPwd-d!kNg!yyl5   TD H      ' +  353%#5!##5!##5!#3!533!53'3s`s}CB}y?yyxx~yyyyjGyy#Gy   FD (  3327654!#5327>54!"#5$3 ! FQM=0D1֓pora&A1Q݉1#9]#$@a~|    F  '   353#5!#5#5!#3!533F{q}y5yykwyyyyqy  F  '     F  '   353#5!##5!#3!533F{s}cy6xx~yyyy{Xy  $^'   "/327>=#5!#3!53!?ZK?> I-dp(F}%Vڤyyyy5    F  '   353#5!!#3!53!3F7 3py5y|yuu:y   F  '   353#5!#!#5!#3!53!3F{]}y5yy?yyyy}y    TD R    F  '   353#5!#3!53!3FPy5yyyy5y    /VFD S   TD F    B  '   !#5!3!53!BTy  !ߨyy5 9' \4   SV   =  32?'&#"326&#" 32#5!7632  #"/3!53#" U3R%%R3Uo%R3UU3R%:- -:Ɠ-n- 777  7*GxGGyyqG*    ' [    F'   353#5!#!#5!#3#'&#F{]|wdy5yy5yyl  F  '   5!#;#5!#3!53!"&5F{;Gۃ|zyyD2yyyyk   F  T'   353#5!#!#5!#!#5!#3F{]g]|y5yy5yy5yyy     Fb'   353#5!#!#5!#!#5!#3#'&#F{]g]|wey5yy5yy5yyl    '    !#3 )53!3264&+~jnNN+yĕy5}``  U  '   #  353#5!#3 !'3264&+53#5!#3U睄NNؗy5yyĕy``y5yyy     U  '    353#5!#3 !'3264&+U睄NNy5yyĕy``     WD   332767!5!.#"#6!   ! Wk?2
lv~qp4q?jhSw¾v'H   lD    353#5!#36      '#3 26&"l03>Ǘ\[Zy5yyy      2  '     ;#"53.4$3!#3!53#wfb_#JoYRyoyyyc$  Tf&   C    TN&   j     9n $  53#5!!!>32  '64&#"3!53 P@}Lw|`łyuxy_Tgy
yy5 F  df&   vY     TD    ! #.#"!!32673!  T4pq~vl
2?kIq
(HوvwShj& X-D V   F   L     N&    j   h9= M    $' # +  "/32767676=#5!#3 )53!%3264&+?ZK?> Idj(F"NN}%VmmRRyyĕy5``    F  '  '  %3264&+53#5!#!#5!#3 )53!3NNH{]|~y``y5yy?yyĕy}y     (   $  53#5!!!>323!534&#"3!53( P@}E`Ăyuxy_Tyy-iyy5   F  f&   v    F  f&   C    9'     F'   353#5!#!#5!#3!"#'&#F{]}drdy5yy'yyy        (  %32654&+%!5#5!#!#'&+3 )53#"wwrryZcQڿZy!YyyY@y     N  #  5!#5!!#&+3 )53#"3264&+
 
lb.j.b NN5uxzĕy6zD``  `	) )  ! '&#3!53#5!#376! #! !!! 	);z@Njg'Vѹ0yyyy+ЁwǡN    lVD -  676! #.#"!!32673! '&'#3!53#5!#,pq~vl
2?kIq䜌ƗoS܁HوvwShjyy5yy     
k  (  	53>35!23!53&+3!53#"3*_kck ~,B##B,~LRyf⍍fyy&>yyd>y       '  )  	0	53>35!23!53&+3!53#"3V--is7}}7s}##}RymFCAwwCFyyX%yy}%y  `    - 3  	5!23!53&+3!53#"3!53#5!#67!Vc^_k ~,B##B,~.,LR⍍33yy&>yyd>yyyy
<+     l  
H'  - 3  	5!63!53&+3!53#"3!53#5!#67!--O}QR6s}##}scAww""FyyX%yy}%yy5yy
m       #  	#5!3#5!#3632#4&#"#3!53d< -FwqECB! my^yyݪ&cJPyy  V !  3!53!#5!3#5!3632#4&#"#	o`uydD?]q8IGyy1yR#xe-'BA*W V%    TD          %267%!."?>WVxT.(+)ӸyɲaR    ?   5!#	632#4&#"#KwqECB!\yy#Ǫ&cJP\     D   5!#	632#4&#"!b	A]q8IHyy`'BA*W   ?k'u     f'        d     %32654&+5!5#5!#!!3 )53wwT,,cQڿyYyyY@y         53#5!3#3 )533264&+Ȟ ȝjbNNuxxĕy.``  `    5@	(#"21 @
vs v/20]%3!53#5!3!ӿ#yyyy%R   F  nX   353#5!3!3Fyтy5y1Vy  V  k   53#5!#5!!!3!53VɿWӿy'yyq    <  d'   353#53#5!#5!!!3FyT@ysyIyߨyy   `JB +  3!53#5!#5!!2!"&'5332?654&#ӿ3'	V{SWMLa&!yyyC@Op""^XKW_    F9' '  3!53#5!#5!!2#"&'532654&#APy"aY\<Iq;BI:EUyy5yߨjlPG^{ui   
k 0  353	#5!##5!##5!#	3#4'&#!533!53'3n+-yy-+nydk~~ky#yyZyyZyy@FyAy8yyyy    ' /  353%#5!##5!##5!#3#'&#!533!53'3s`swd}CB}y?yyxx~yylyjGyy#Gy   `oT' z      FoD& zb       `3    353#5!##5!#	3#4'&#!533` -"wydEyyydyyLFy=u8y    F'   353#5!##5!#3#'&#!533F{swd}cy6xx~yyly{Xy   J  3 #  !#3##5!#	3!533!53#535#` -"w E տypdyyLyy=u8yyp  ?   !  5#5!!!#5!#3!533!53#5ݗgs}c5gx߉yyyy{Xyy3       @   !##5!#	3!533!53!a-"w E i`uydyyLyy=u8yy      t(   ##5!#3!533!53!ms}c,x~yyyy{Xyy6    `[    353#5!#!#5!#3#4'&#!53!3` R ydٿyyy
yyFydy    F'   353#5!#!#5!#3#'&#!53!3F{]}wdqy5yy?yyly}y  `  	<   353#5!#!#5!#5!3!53!3` R	 yyy
y-yydy   F  #'   353#5!#!#5!#5!3!53!3F{]
yTy5yy?yߨyy}y   `J
 1  !2!"&'5332?654&#!3!53!3!53#5!#s'	WzSWMLa'!  kC@Op""^XKW_yy-yyyy  F9' -  !2#"&'532654&+3!53!3!53#5!#aZ[<Iq;BI:EUϘPjlPG^{uiyy5yy5yy   Vo' zo     ToD' z          !#5!3#4'&#!53!ȇdydg`u-Fy     B'   !#5!3#'&#!53!BTy wd] !ߨly5    <   V'   5!##5!#3!53eטnyynyyyy7        5!#	#5!#!!3!53!5!5̦PNb		D\yy9yyByyX  V'   5!##5!#3#3!535#535e͘nyynyyyyyy7  
    5!#	#5!#	3#4'&#!53	3!53	
!ydɸ-\yy\yy5Fy:yy;      '   153	#5!##5!#	3#'&#!533w<wd?ɏyyyyyFlyy      !#5#!#5!#3#4#!53#Sby$d`u@yyF?y     P/'   5!#5#!#5!#3#'&#!53#P.yme_wdkmBl5yyly5l   ?    5!#3!#5!#3#4'&#!53!"$5?}dDydٿQ\yyuwyyFyΣ    F'    5!#;#5!#03#'&#!53!"&5F{;Gۃ|wdgyyD2yylyk   ?     353#5!#!23!534&#!3?1'yyyyy;y  ?   K   `  ` ,     
kk'~Ju     5'
      `J 1  32!"&'5332?654&#!3!53#5!#3#5!#'	V{SWMLa&!  8A-kC@Op""^XKW_yyyyyy  F9R' -  #"&'532654&+3!53#5!##5!#LTW\<Iq;BI:EUzUhlPG^{uiLyy6xx~yy     `J3 )  %!3!53#5!#!#5!#!"&'5332?6  R 	WzSW|MLa'!Uyyyy
yyC@Op""^XKW   F9' $  #"&'53265!3!53#5!#!#5!#<Iq;BI:{]}}PG^{syy5yy?yy   ?    5!#3!#5!#3!"#3!"$5?}dDdyQ\yyuwyyyΣ    F'   5!#;#5!#3!"#3!"&5F{;Gۃ|]dwyyD2yyyk    F     !#3!53#Foxyy#   p}'4H{   T 5&w        p&{  w(u T N&   jX         TnD    `  k'~/u   T5'      VQ   TD   V'wu   TN' j        
k'w@u     N' j
     `T'wu   FN' j      Gy   G`'T   `  3P' qD   F  ' q     `  3'wu   F  N' j      V'w}u   TN' j      V_   TD7   V'w}u%   TN' j   &   V'wu   WN& jb      2gP' qD   9' q     2g'wu   9N' j      2gk'u   9f'      ?  'wu   F  N' j       `k   353#5!#5!3#4'&#`ydyy-F  Fd'   353#5!#5!3#'&#FyTwdy5yߨl   `  	?'wu   U  N' j     `VR    RD .  ! '&54767.5!2#&'&'&# ;# 32767ՖaZYropAB	
1D0=MQEDON|ML~a@$./#1Q1ADE&    -V $  533265! '5326#5!#!"&MLaM8R7f]MR1US^XM^X>$yy"   $9^' &  "/327>=#5!##"&'53265!?ZK?> I-d<Iq;BI:(F}%VڤyyգPG^{+    -	 +   '5326#5!#	#5!#	3!53	3!53	R7f]MR1U!ɸ8LM^X>$yy\yy5yy:yy;   $' -  "/327>=#5!##5!#	3!533!53	!?ZK?> I-d<\ɏJ(F}%VڤyyyyFyyyy   V 4   TVhD T    	 :    ' Z    F ?  %3!"'#".5#5!#327.547>4.'#5!#D%#1BSf EpSQD,Q>&Vh4Xr?*?) 40AsyyBʈ`yy1`L/JLL"b:Udk2#P\ZO@RyyU?)1   F   /  %3!534>323!5354.#"!2.#! .TtUe[[;]AsE(8HU/yyy`awU76~Η^yyGeA!"6'  Z   $ 4  2.+3!53#".54>324.";Ex("w^3 k1WyVc~8Z_??_A!DPyy7סk|V5:͒ASFeB$a_#   (   -  3!5354>3232.+3!534.#"[[.TtUe/Ex("w^3 ;]As{yy^awU76~ΗA!DPyyGeA  F /  32>=#5!##".5#5!#!2.#!sA];[8[eUtT. E(8HU/hAeGyy^~67Uwa`yy!"6'     lA 5  "3!.54>3232.#!!32>54.P	xnl2Tp~=WEx(!sZuSy}@FtyB&y3`,ӋDJgfI!BRFc6jo:  Fl! #  73#5!#!2.#!!2.#!F sE(8HU/ E(8HU/yyy!"6'!"6'     Fl +  %2.#!534>323!5354.#"E(8HU/¿.TtUe[[;]As!"6'y`awU76~Η^yyGeA    F	e 8 D  #".54>;54."3!534>$ 32.+!"32XlrȕUVr9qާq9 y3t3yEve((38";,TNxx<>xrup6G{\45\{FRyyPGߗ!$7%I{[IS  Z # 3  2.+#".4>;#5!2>5#"Ex("w^3cVyW11WyVA?_Z8A_?'!DP^̀:0Ow֦|T55yRӇXBeF6"]    d  l "  %3!53#5!#6323!5354.#"  re[[;]Asyyyyy6~Η^yyGeA     dl   73#5!#!2.#!d #E(8HU/yyy-!"6'   d	 +  #5!##".5!3!53#5!#!#3265A[8[feп  [;]AsyyǸ:6~͘yyyyyGeA    + ?  "#".54>7!!3>32.32>54.'fH"cr^e9">X6xAMY?wh)"6$Qa@aE-
0uēHMj<9p膠L"DhjK9b9\A" DSkG'D\lv;nWg    (   #  #5!#3!53#".5#5!#3267S[8[ 9{Ae ;]A~tyyyy66~͘yyGeAy xE   #5.54>$7!Ep"M@X6C|'MjU [iG-04(Y`dde0    p 9 K  "3!.54>327.'#".54>32>54&"3267.p	xnl&Da:'M'PV<[nnMzK6h_j/2&*=FUC:qgZyB&y3`,ӋDJH=-PV-\,>FGqS=tZ6DBe&.	--'  (l )  3!5354>3232.'!534.#"[[.TtUeEx(!sZ;]As{yy^awU76~Η!BPyGeA  3   ' 4  &#"3!"&54>7.+5!2>3!2654'?Kdfh*
0\RY{$-IIVH1mD"KxYZU.7	kB<A#%yVgFcp7 r`V]     F '  #5!2.+#".5#5!#3265q Ex("w^fe΍;]As\y!DP̀:6~͘`yyGeA  dZ G  #32>54.#!!!!2>54.#"!4> #".5\H,V~SRZ0>_s6a-
,R?&(E[45]E)dkh.TwIXqA}bj<l2fR44]OUzO%~YR;[><^@!"CfC`c21_Y;dO5
CgR{t76TrZ   'i '  #5!##".5#".'%!#3265J[8[feEx(!rZ`;]AsZyy^̀:6~͘P BPyGeA  ) 8  %2654&'#5!#"$.54>3'.+5!2%.#"o	xnl2VuE8:;vRHB6N[2#Js]B&y3`,ӋDL`nL([

y	Kv|D     F   !  %3!534>323!534.#"2.TtUe2;]Asyyy`awU76~ΗyyGeA  T 1  "3!.54>32##5332>54.P	xnp8`Hkfk79OmA%KryB&y3`,ӋDR^kI'e8m;@EǂjF   (    '  3!5354>$ 3!534.'3!53[[>|< (JiA[[AiJ({yy^̀:6~Ηyy:W='
yy
'>V9    lM 3 R  %2.#!!3267>54.'.54>32.#">54DEx(!sZuSH|6	<bpP!Gṕ]`6emA]vE>lP.@S_^WC(	
BD!BRF($)FMZ1"Fyb<|tgM,"Cec ʏ$Qod.(Hc:76(4$ *CbG366cG    F   -  %3!534>3232.+3!534.#" .TtUeEx("w^" ;]Asyyy`awU76~ΗA!DPyyGeA  F   #5!##".5#5!#3265qοfe΍;]As\yỳ:6~͘`yyGeA     (l +  #5!#32.#!535#".=#5!#3267 Ex("w^9{Ae[8[;]A~t\yy-!DPy6~͘^yyGeAy  d C  #3>54./.54>32!4.#"#"$.5\I8]zE?hI)4[~Ipg1UKxZ8b.FT'3V@$1ZN~o3jqlNmD3I/9Q=/:"\pH^|H+B[rGRmB4H,AT;+6&_rL_wDD|   F  N !  %3!534>323!5354.#" .TtUe[[;]Asyyy`awU76~Η^yyGeA    9 ; G  !"%>7.54>  $.5!#2>54.64&"32^w"!^pz=/N8b^,TwK`m;lqIIyzI1Ofuy!:R2vPD5;C$Z`20][;eN6IiDxy=Al/eT6=eGItQ+~}=Y9  F  D   %3!53#5!#!2.#!  E(8HU/fyyyyy!"6'     Z  J  ) 3  !#3!535&$.>$75# .'>Saaaah-Pk>>kP+NlAAlNyJ
B~āEdyydD|@K!`)_&]]]&*` j   2 E  #".'%;>32#"&'!2.#!3!5332>54.#"Ex("w^ci1VxSE{9Ex("w^ !@\<;]?!!?\<}| DPvyu:<x{RjO4!DPyy\P$$TdbX(   V 
   %2#""$&6$ {yoo*v+oo\BKLBsyjj jj൴k    Py ' 1 =  !##".54>3!# $.$4.'>#";P	K.LjBWO,J`gh,㾨^xV(LmEEnKg/((/gy?X:!TCnQ6R;&	yKσ=9wG^/	
2ac9f@%     D 	  >=!hbTЊVm    sd   	!sdx  #%   "#4>32>53NrJ$j:hVNpI#n9h!3?Th:0@#]c3     d   	!dx  
{ '  >32#".'332654.#"
bU>mF9[o6>dL0	%*=;/?#G~c?u{? BcCD^:9O0$@31!3Z|H     Z   3!Z#k    (*' *  %# #5!3265#5!3265#5!3!5#"&JsS^h>R`g>nja+y34yhyRy]Vc  ZV5D !  %!3!53#5!>32!4.#"5!GUe?$;*kdyyyyy0D+wD\8#   xVTD  -  !!3!53#".54>325!4&#"3265_cYq}CC}qY`i6L00L6i`yyyNЂАMy']ut^(     dVD %  %!3!534.#"3!53#5!>32$;*kd!GUe?yyyyD\8#yy5y0D+   2   3!5#"&5#5!!!3265 FUf?!!Xkcy0C,yy65    xVTD  )  !!53#".54>325!4&#"3265_Yq}CC}qY`i6L00L6i`!yyNЂАMy']ut^(   Z     !!!53#5!l"䘘'yyy"y  ZVD !  !53#5!>323!534.#"˗!GUe?$;*kdyyy0D+yy5D\8y    ZVFB  B  32>7#""3!53#5!>323##".54>;.6p#>.(!6yfD+m~IJvY7
Xhjv?-_e-@OW[+X_)Ed&O|Uyyyy1D*6Tv`yo2"GmK=lR0LrQ4   xB  &  !".>;#5!#"32>5BUќ[Zwˤ6L./K74M2'ylՌCC͇Ctyy*`m5Nl     <V !  53#5!>323!534.#"3<!GUe?$;*kdVyy}0D+yy5D\8yy     ZV' 	  !53#5!yyy     FVl 4  3!5#"&54.#"3!53#5!>323265#5՗ FUf?$;*kd!GUe?!!Xkc'Ry0C,+D\8yyyy}0D+65y  xXO  /  ".54>7%!#32>54.'#"\ؠ]Ex]_1F@n.67";Q/,K84U<#">/ъEH̃l[bCI-\0yVޣl4-XUWm24k   2Vf   3!53#".5#5!3265#5!>n+XQG4>R`fyy]V!=cbyhy    Z   !  353#5!>323!534.#"3a !GUe?$;*kdy#x}0D+yy5D\8#y   xPC 8 J  %3!5#".54>7".'.546?32>7!4.'3265 FUf?Zc4[N	)7@UK=6`^CoQ!EB==%fnh'Q]!;P/6:!!Xkcyy0C,5ifڶ7
	M0.h7lM	q5?E!	Nrgo=5sX65   dVD !  !534.#"3!53#5!>32$;*kd!GUe?yyD\8#yy5y0D++    x+ / A  47#53>32#.#"3!5#".%326=4.':6a5f2VME"~)3<iZKߡ[ FUf?Zc4v!!Xkc.Oj;	ylQ0@'?nUNrZy0C,5i65I^b8?y    (+ 8  "3!5#"&5#5!32654.54>32#&AK!292! FUf?!!Xkc 070 @wj)VSL~A@%?<@M^=y0C,+y65z6VJABH*?fG'   VV+'   #5!#!532>5ɗ$2yyy/Q>    x+ A  "3265#5!3!5#"&54>7.54>32#&T&7$@8!!Xkc FUf?2$$C3<qg)VSL~0=+O?*`
&0865yRy0C, C>3+>U9EsR.  VM 6  >323!!".54>76454.#"5wTYe74VnrnV4#3! 9,3Tmrp\=<[>,K@5N:_B$0ZOQtnlnt?"y#2!'LOUap]<hK+$1   d  D !  353#5!>323!534.#"3d!GUe?$;*kdy5y0D+yy5D\8#y    %VRR -  !".54>7#".54673273Iw/<"STJ{Z2)-WJ%!)Ib9=B"xi0>6y-<!TQ#>R0*Y-VH#> 4%Z]T?N   (V' ,  #"&'# #5!3265#5!3265#5!3!51>n,JsS^h>R`g]Vchja+y34yhyyy   yVL 0 N  .54>323!!".54>7654&.#">54&x5]E(hcZ@koI%2e:#:*5Zu@7+DZ51G/+5:,4\D'(,S]lEQpC/adPskgfi7y$1$GIM++03e9nV4 3@!"&/A9:'<E&O+,cq~G   d  D +  4.#"3!53#5!>32!!53>1L3kd$MT^5VuE(BS+Rz+%2lDpQ-#yy5y5E)7t{Mk%yyr   ('   3!5#"&5#5!3265#5 FUf?!!Xkc'Ry0C,+y65y   (VL   !53#"&5#5!3265#5!L FUf?!!Xkcyy0C,+y65y     (*D 3  >323!4&#"3!5#".5#5!3265#5!>n+XQG4>R`f>n+XQG4>R`f]V!=cbyohy]V!=cbyhy   FVD !  53#5!>323!534.#"3F!GUe?$;*kdVyy0D+yy5D\8yy  x9D $ 5  #"'5332>=#".54>325!4&#"3265RqQrG!Yq}CC}qY`i6L00L6i``px?Bje$SeyNЂАMy']ut^(   d  $' 	  %!53#5!$@yyy5yR  (V* 5  >323!4&#"3!53#".5#5!3265#5!>n+XQG4>R`f>n+XQG4>R`f]V!=cbyohHyy]V!=cbyhy  ZVqD  0  !!5#53#5!>2#"&'32>4.#"\-DD~qp-1L56L//K65L1yiiyvyTPMБNPTi]V((^]'(V   nD  "  %2>54.#" .> 7N00N78N11NޛSSߛRRT+gf*+gg,qMАLMϒ     =VU / : F  &$.5<7!##".4>3!#3!54.'>#";#u2Y}NWMVYrljX^,VT[R'H?#B33B#?1Rj
yCfI/2$KvtI"yQmhayyS_[4@h)GnI+     2   !!5#"&5#5!3265#5 FUf?!!Xkc'Ry0C,y65y  y  "  74>2".4>32".$080$#1:1#%01$$181$h1$%161$$181$$10$$  Z   3267#"&'Z?XRB?XSB     $u   * 2 :  %323"+5323"+53#5!5332#6764'&'676'&''uuyזyy8%JH$;P1RS1Oj&iPjFjt\X+64(BE)  u   ;  4.+"!5#5!>323!354.#!53#5!#!23!(9 ?3 |,169]wE}||*3||^{XqA}5&&BY2|{+%=c}Bv
z;ii!A_=v     u 2 /  %354.#!53!".5*&"#5!#3!#5!#323!n/7|kk6	/(^{9@A|^{e~Kx4*zIzZS{|XT||ᓖw   uZ &  32>54.#!53!3!53#5!#2! 7S8}p{yyU|>aJ4 :5bPRa2|ȁ9}},Ldqv8     u  C  4.+";2>5!#!".=4>7!#53!3#'5#.)YalXe7+^hj`Y*\bȂb3XvFMxPBxY5hMFnK{}?MiUWuJr^I2Gjv wj1Piw@    u   %3!3!53#5!#3!l|p{||V}}w遁~~-x  u* %  4.+3!53!3!53#5!#!23!~3.{zqo{yS{BAuY4VT"=-xyń8|},Ol?     U  7  4.#%;2>5%#!".5#".=#5!#3!#! /,=#:H0!d3e`z]p?@pT0z_}
@yH1,j_0O98Ue81\Tm$AY5||y&1~     	?  7  ;#"4.+3!".=4>3!#!23!$B]pGsIR
$D:zuĚk8?r}zUqBFe;l<cG(6z9geh©c7{s8gYz     U   %3!".='#5!#3!#3!`x?`A"u[{
#rrxZ(CV.||s2)yy     u  '  4.#!3%3!53!".5#5!#!2/(?+5N4h}XyL"{]zVU,8J,m;N/Jyz73Wr>`||&U`    u  -  4&#%;265%+".5!!53#5!#2o;6.6;eK|T]~J4xvkL?9Cf!=/YQC`V(3^Upz|"JxW     I  ";2654.#'#!".54$!35!".=#5!#3!#!23!=M+ 2#vIK 5'-_iixA5]E'w\}
1'	~BVzM#0-J6!!;-XK7Y?"aV'+Y\c.A)}||N# x)V[}    u *  23!54&#!!23!534.#!3!53#5NuP(}0%sqd.}|4+{||9hT|%);fKyyX.`N2yy{     U  4.+";2>5##".'+".=4>;232>5!3fg=l[I31G\o@n8l`P;!g/ci4YNG#,NOS1_f93]eԘm*Lk@'{O19hp:dUkAl@7`NQuK$)L? / 0[qjƮh9ڨZ7LP*?G8     UL 3  #+".5#".=#5!#3!#;2>5#5!L}1kz~q5C^<y[|*{	-#$|^xS|S)&PxS'E`8uzzp1(n-J57N/}  U +  %3%".=#".5'#5!#;;#5!#3!cz`Q$Aa@!z\|+/ $|^{{x7 JxY7_Jxx$u*7zx+y     uk 1  4.++".5#5!;265#5!#!23!	$+G`jp4_}I|@<9Ka~NN}W/~B.$BoYC-<kV3akakyy.^b  u #  #+".5#5!#;2>5#5!JaUQ|^{+*~bVa46cVyy5W>"0C'v     u 	 /  4&#!!265354.#!53#5!2#%!23!<F0EBz	*!3{{s32rVuMHP>K93#z z=]?E^9/Rn>y     F  R  4.+";2>52>54.'+".=46$;23!/EZm?Dr]G07Nbs@\@q_J3$J<%%2/giªd7l
n
LzV/?Rf::fSbSb85_X6K.(6%	^\.3`tpn⯲!UVP2CX9{  u[   2  +76"37+3!53#  4>3!2Zlm\5I--I5$Kυ}yEΊώI,Jʀ|C ЗQyy857]\    U3 3  354.#'3!53%".5'#5!#;#5!#!23!x+~|G|]6z\y 3%{_~tBy[6}.,Q>%yyp$ImIyx!LB+xx/Nh9~    u   %34.+"3!53;23!z
*'	{{}xaN! McyyG  y   u5   %3!".5#5!#3!#5!#3!~]op8|^{'7 f|_}}x7>ukxxBmN,%xx+y    7  ##!".=4>73!2>5!".5#5!#3!#5!}M|NLR?d|>!.&l}Dz\{/ Q{_L=t[72VuC(dcU'I8""9J)"TkzzH?*
z     u6   !23!534.#3!53#5!VTm@}3'{z{[MsGuQ]yy*XG-7yyxx       K  %#".=46$;3!52654.+"32>=#5!#3!:$]x\<hc6q%W:e>,:DI$WDvdN62I]p@[>q`N71||.L7 +U~zߺe<XsU||-EHF6!9cL?eA$9FE<Ãx    (  ;  ";2>54.#'+".54$)#5!#!23!:S5(=*0"#AwkiH|bC7r\:~05H*9bH*&Fc=G6+d`/8fXd
zz'Zk/~  u  7  4.#!!2>5354.#%3!53#5!2#!!23!7,7@!;,z|xxMrFAoTQ3`p>~%1!,*'xx{)BQ(/WC)!?]<}    	 E  +".=4>3;2>=4.#!#5!#3!!32	8_JxPxW2L{Q.,+OsHJ'NI?/+=HS,x!eb7I}fN6-ASb7^IgBQ"jO,=dG' 6GLN#L,]WM:!zzxZ =YrO  u #  %354&#!53#5!#!#5!#3!!23!|JH||`~z_L~wE[~xx6xx{y    un  G  4.+32>5!+3!53!"3!534>7!!".5'#5!#3!2-C,3D)fA~w}1>"z{;tucTh_-y_}%B5nH7.L7.D-QtI"xy6cPyy]XpA(G;xx!JxW  u '  #+".5!!53#5!#;2>5#5!Bt^oF}}|IN, }bTrG(R}Uk|yy#v#;P-Y|    u   354.#!3!53#5!#!23!})}||`},v5}V=L+rxyyy.`e|  u G  +".5#5!#;2>=4.'.=4>3!!5#2YzSQ}\4v;k1CLR)fU~S)6f[mh3DrT5I*I`7D|lX?"$@Xfr:{},a^U@&?ufAN~eO#?PmPV@Y8Ա:6/2ASmW   u   %3!".5#5!#3!#5!#3!{ǁv7|]x??:|`~~xMBw_!dsyy,z    u   %3!53!53#5!#!#5!#3!<yz{{]zY{`~}xyy8xxxx       K  4.#!!2>5";2>5!+".=4$!3#5!2#%!#3!'>,;2#7+	*! *
iFohLvړLB{C;.q,7~+>((F4!;R2|Qe9-\_tzBt\3TrE~ |\     n  S 5  #".54>732>54.'.=!SXd^N DlLX/'?Q*6G,/9#D6!
.< +ZK0sn66ki>qaR%3#<[<.SrD?cM9>M_=ZX>V=-Le    n    G  4.#"32>5%#".54>7>54.'.=!B
(NDGM$'SLBI$PF|ʆC+Fi]!)!C8#9	4+=mF?]h88g[Rn@:aH+՘T^t>|thS:')7$	%6K3 
3CY;K     P4  I  %4.#"32>%#".54>7>54&#".54>32:U8Hd?>bG>Y8H`l؟Y3edPmCB?*9#J?4lqZuDZQ,Ud7([jQzR) MuxJKlcwd4*OJG"=E*.(hP9gP/.Pm?W>Pz    n=r  d  4.#"32>54.#"'>7.54>32>32#".54>73.#"P:06G))F60:5ln06A+5;D)1aYM8 C|7TC3A[pGFmqN$$)1!4B&5aW<zlQ0BlM*"TlZ{L!FvZ3mZ9(F9*!CPb{^bO'1:HǀuEOa4YQL&	/]Xbi(4;H_{R   F3is ?  %#".54>732654.#".54>32iCQx_B#)CUZW" #]ihV0D($>.- v?dD$MZuDnz@&BXdj3@eL6$d-@T4|77E&)@,%" N\_&hZ)5e`   P4us R  %#".54>732>=4&+532>54.#".54>32uU`u˗W>lU#&8T;*=(PUZc7+*D0,K860QGjF"E|h[X,H\00aN1rt;ApWRrM.g0<J.DW2$C^:c0N9Oe8'E6(DVXS`4*X[JqT<EXmA         ' W  4.#"32>4.#"32>%#".5467.54>32>3"".#*)/~6P61E++E3CT/HMxwIHNDvW2CmJfc02(|<YzO5H4'AfF%19[?"9\BDV2.VAKpDCu[4veB3`lٍCF˄JIgDoa-BpR6|8K^6(B1"Qp  n  r  N  4.#"32>%4>32>32+532>54.#"3#".B4I,1I1.J7.I3,Vi_DLLGoJ)Hbq{=2+(B0-G1!).
LyvL;n[(([lm^**]oՊCC:.!Dԑ]`A!AmLn[($!"BHR0ՒKP    n  zs )  #5>=4.#"#&54>32z!.,N=4D(,'{IuvKRp|	 DoYuY#ToYvI'
|r*yˑQN  23^s O  %#".54>732>=4.#!52>54.#">32^Yi7yvkR0KtA'$1M5CN(
"'YXP=$*$%3"g!@7*fj7*Ib9EiAq1,D\tFWwN*
l.9F-HY1*W\10`L0#1;C$ -	(	,RvJ3SE;QzF   n=~   #'2>54.#"!5>=4.#"!5>=4.#" #4.'.#'>7.54>32>32>325Wows/(E2%5!#;,'<('=)/E.2:	h^@vgL+,EVUJYoI1+CCL3F~C\m<&C\mx=&OKBBJL"$LH?2[ZOY{]? 2ddXk9	"G=P-H+CD+H,S4G++G4U'%&BD'%(Q4C&:[p5c0=L[k?*G:-"+C.0<.DdpJ-)8! ;.,="EU+i  n    C  4.#"32>%#".54>324&#".54>32S'1: 2F,3O7<K,?SaяJWd8v0`u*F2O0!LzNӇ?][5-ZZq\'&T-o/RxȐP%yEL 5(%< ED>R{R*,Z]        G  4&#"3265%#".54>3232>7#".#">32][V/VA&5N4]oSWsqJ0_]B^D09>D&D>Oa9'B9/'!CB<hRF*_lvMlٕM=yxqg],".P*\M1$+H6
A  ns X  #.#5>54.#"!5>=4.#"#.54>32>32-QqC&722 .RPR-hm;5*E34G*0: 
#6AOf;C~p3ZM?ASc;gyBMAy%
%4$F_;CxX4 >[;D*I)BB)I*D;[> 0UuE
>nX;}'rptŐR3D'(E2T   n  J  #".54>732>54.+532>54.=3D{ˌJ7eT.N:>G$	7U:q!+'?PTQ?&.KadaK.3Pd0CvX4nIBnKCs`L{+25AlN+-RsFi_,6K,3D/!%7O;02#-!+@]BDgL3Im    n3q D  32>53#".4>732>5#'52>54.#[@3qmbK,OrkV1ei'	,L;8N1>J:>@va!-B+#"'Ѝ::eoL/b3:F-)B.'JjCt qY8_D&3'27)    n _  ">32>32#52>54.#"!5>=4.#"3#.54>7>73dM|e$,n93YL?=JV1jJ1cb>S2=6?5$"2:`W&D[6Yl<4]ΌYtR-IoT/Ql=)0B&&B0H~Y')ZhUl><dIH)M'BD'L(HKc<ed1#XG%#%,!GRTD+      A  #".54.#"#54>3232>54.54>7"UhlI
?cEJvR,Q[=N..7.9fQA69.FQF.n}DOh"+)"+M9!+U~SEkWlE,.=3!FFE1E;<Ok   #4   t  4&#">4&'32>#".547'>323267332>54&'#".54>73.54>32#73),,!2A
1081/&)#=[sš}U,'MF8R3d20"A; %	4W}WhQ "'5JY1AeF$@:YF$FeADkJ'BSQ{bE% (/%8&?N-_(%U0&8p8e_8,9?&	y-bhm9鳀Q&PlK 5'8N028C/.b72R:  :Rdg6aw    (3s o  %+".5467;2>54.#"!5>5'4.#"#".57!32>32>32>{xk2podM.((+=%`&6% &" 
&,=16eO0$% !/D360(/9D'Qc86kP8PdxC$a6H]<0VA& 5EGF,(4)(/1/DB/2/. "8W< HqQM}*!$2LXL2 ))'\p  n3s  s  4.#"32>#".54>732>=4&+532>54.#"3#".54>32>32$<.6C'%C53?#lS|7KfAdF/N9 3A$#(8" 8,*''&B[kw=pFFu"OOLHHClH/Qn?<fK+VtE&KqJNuN'%Lvar>=bz>863)C07P2vX[%Te@a@ 1;F(`fC'K^cK+*BwcYbC.Gg     n3 @  %#".54>732>54.#".54>32'%3@}wyИV=lV ;+:S4<J(*EV+.&,6@kL3PC:o`JE{bIvX9i)`Db?(Hf>- :,!9,9HHMKCxZ4
"̔  n>s a  '>54."!5>=4.#"!654.'&"#"'>7.54>32>322n|:<I'#=`Q: 2L30@&*Jb9?f>-aj	 H@3.bMrEJn4_SDN[d3j{DV}<)GSkMKnJ$.K7)L&BB&L)7K.'MrLDtc$(FKYwj1vlT7P2;D,vf|m12B%$A2;r     P3wr =  % !".54>732>5#".54>7332>5!wkW1ab)B08O3'g9eO$MyV<T5"6&*N:#D8/UuFNpM.n'3=":.#AZ8~DuZMq^V13_\]1?oQ/2G,      \  4.#"32>%#".54>324.#"#54.#".54>32>32c";P/7E(-M:3K2?L{TtY;Qn<v-"$	)-,1MjB5Um8,MB69AE"P]3EVY-2[MZl<S+bO/SpGoQ5%!7//7'X9#GKJ Lh>,89,"[{     C  >54.#">32+532>54.#"!4>32h*#0=L1cO.Nfpr2\`:5$(?./WC(<rhYZ-1Ri7^23'=bGGq[nN)4lpL_5!:O/2-lj5(Hb:4[M>    n3qr W  %#".=4>732>732>54.+532>54.53q1VtHU'>M&@NT'(1(SL?6=#DcbA!3E'W&'9D9'7R_R7Np$TTN<$MmU:hC8+6>!	( jBc}G*Lj@Lb7+G50LB;@J/4C5/@ZE)XL8
!.<Oe   n    0  4.#"32>%#  4>324.#52S$@Y5*;&.L9.J3BLvIiN3,3SPa#;gSfa/NdzG(gȝa8-vGQ(
6d[   Z*  z  4.#"7>'>54&#"#54.#">32#654&'.'.54>32>32; 0 1VA%=bE$3J/V	*%.%$%	6hZ{H-"TjteI
!%*
'Wd$@5+/<H+WxI 7[A$%?T0-ox{re%	R*HDC$L.,.- +M=:JTOC<G?q\J[nC$v/c[)gp i8us9"++!;Y    Z4  ~  .#"32>7%#".54>732>54.57#".54>32>54.'%>73%H+-*	..,/.FQF.\`lÒVEpM!%3F+<J(-6-/e<AjK*)NoF<::

.#!!	%JC;$UTN<$*1;-WB$'-1,+JGeQFPdEn1HkCnR4
_<Nb<5Q7*EV,@reYOGs/;9Tb)0gT6%0HcD-$GHK(GT]1@\~W-KFGTfAMRR!T(     C  32>54.#"#".54&#"#54632>74>7YUCW2,?*,Q@&[tq~D~@dE%8&6\|F;AT4	TS}4P8:nU4 :S4@VrÆ|oTx	PxY@*.4J  23s   %#".'#".5732>54.#"'>7.#".54>32>54&#".54>3232>54.'71Tn=+WXWVU)!6.)1p_?8lg<nV3"*&C1%,%PrN);31&^]9Zp6dv['!KJE42!~3N^*>lQ.Afz9&X,#*/.-*!(Q(N=%>dG'	9^a),2#GpOP}W.<Y;5 -!;.(E3#-D}sk2{[$	0+)KM9fL-<ri'3D,$)	
31G0F/AcD;\J:&MSQ@'	%	:GT     n   d  #".546732>54.#2>54.#2>54.'.53323Rd>|nS0>
$A[74D'!'*&!'($%KBc`0	%}~M+/JY+,\K0'F`82bN0qm5'?]~Ql9Y%5G1@^?>_AQg<[=)?,-A)XS
4*$1/ZN#-;I*5.&+7B&+H;/JRV     n    w  4&#">32>54.'73#!".54>3232>54.#"32>4.#"b)2&0F/0,%-?&SPTSB(.FR$F=))?I J?*z˓R-`j3W@$4YwC+6A&=V7
#%B<#HnLA#3J&!2:_bI"J2@P`o?&MF<18=<:65?J*,xըB(QxPUpM4^[5+6!D8#JI .5(71#9  n@s  >  4.#";2>%327".'#3267.54>32>+F41I1!3=!@1TCjL,EBeSw<P{v~R5T$%@ StJ!YidYshIMbi))iUt3GD/D,*G3  ! 7xSvGK     n3 T  2>7#".54>732>73##".54>732>574.+50_Q=(eg`"[}J%)*%	3*Am_Q&6Yq:PqoT5f^'#+H6%F6",D1P-9Zq9+=jS%=72Z+K(&!;X:ڐX@·chv@L}UJx[?f;KQ#;dH)1S>:`E&  n3 d  %#".54>732>54.#"32>54.54>32.#"Gx[yZ<3e`+$5O39C#,$3SkojS3HtKLsQ->+ B6">ff>AhK3kV77~C)FZac*R{Y:m&<XBFb>0Sp@1ZE*U$E0=K^=%!)EjSUxM# M`7>R0':%CR3"?cN4[J8:OhC   n  2 * : J  '#37'##".54$%5"# $54>3237"32>534.#"16p{ϓPbp!Lxx7kW&7Q5 :+'Zj3F*.F07Ui<8fW¿We83a\{:[=:O1	%=Q^1f"2P  n3  [  4.#"32>".54>32>7>32#"&'#732>54.#"36J-;2%;J%'>*|͔RMm/7<Et[00q9nLFv9f0:zY"-
(9@&>-:T5?M#F>O3C(U?:ڟو>\yL*OF/t>Ӗ߈:ZY-!?G$	U|~U     n4 S  #".54>7>54.#".54>3232>54.'71TqDCtV2)F^ks74_H+2B$QL		 6(<rhQxH?e~>3gT4u1XB'AR]2N}`E-;VoLIycRF<38C+>K)ER6;>"5q^<*W[FueW' JWh>#A];>TC=(s)ajt  3s ;  !32>54.'3#"&'32>54&'7#  5D#:N*+8:U6f_,Oe<c(ap0B)&'RKNK:$Wj^6-Q=$GrTQoWM.$YlN[l<uov'?.?m6	)6E+EvV1
    n3}  J  32>54&#"4>3232>54.'7#".5467.7S8Hg@|>V6,Mk}HٟYLqL&QB'C1	$6%E|h[m<XQtT^2-ak,ZXPrX=Fli&NMJ EE
(9'13;bG(.Nh;Y>T~  nrs >  '>54.#"%.#"'>7#.54>32$AY5w	
&LB-P;"!1@O\RD2	6.9:1
0{J?aC#NvjV'RND>!") 1cP2?fJEfN:1.4JdPZo>5H+qN^ -]l~Mfn97e        /  4>2".4>2". 4>2".5FPG44GPF55FPG44GPF5F5FPG44GPF5ND33DND33ND33DNE33ND33DND33     # + 6  ! 4>323267#".'3&"'"'6324#"32>0XO($	]M0W-#0"''QNN!4	7\B$

!x)-"2B   F  D'    	3!53'!3!53!VyuFrEq{yz-'Ryyyyyy     F  '  #  #5!!53#5!!53!535!3!53#5!yyyyRq{I>'ߦΆ{zyyy5yy     0D  5 ?  326=#  !54&#"#6$32>32!#32673#"&3264&#"N^[OMo	|r+ NY|{grq_qmjOYV^ҩNN6-ηyuMONN?tWa""Mn`p    F  m'   ,  %32654&+532654&+53#53#5! 3#!?PvPOowOV
lyPk]bJHDJRyy1y_8y
Gt  T`D    32673#   !2#.#"}r~puo4oup~rȃ**((**ه    F  ('    %32654&+53#5!   !?[[0yRy5y   F  ('    353#53#5!   !'32654&+3#F0[[y^y^yyy     ;  '   #5!!53#5!!53!53#5yyyy'ߦΆ{zy5y D 2   !"'&'53327654'&+5327654'&'&#676x0eggeWcdmt
>>ul:9FG&&EF99ms|_^DgGGHGf%]-.43_L>@x>@I`32\|a_ d-    #"&54632#5!#3!pQOooOQp}QooQOonyyy     /'   7533265#5!#!"&MLaMS'^Xyy"   F  '    "  '   3535'%#5!#%!53FsFGxyրuyyuh    F  '    F  '   #3!53##5!#Ԭ},'zzzwzz    TD R    D    &#"#>3   !"&'332 }r~puo4oup~rȃ'****'    Tl 	    654&  !   !  p*)p\Zrq[[v2?  T+   .5 !  !5>54&#"&(**هπx&8oup~r}zk   4"   '  	>54&#;#  467'7>3  :ZXYYHv22VKv)22V|[Ln^[Nm[BD@oPTAAtHV    
D   1  "26&326=#  %54&#"#>32>3   !"&=p[Z\\O]ZNKv	zs'фHFԇ: ҩPL:(϶ztMOMOM  <~E  !  654#5 ! 4%&5!"!254 x@ hDGCFCKRuyqnza
y bPE   TD    !  !&"T?>sZ\)   T    !  !265Z\)      F  '    3!53#5!2#64&+32?vІ{b&&fyy5yd   s  ' % 2  &'&'&5476763!#3!53#"!53>%#"3)!\O]rװH8":;*py30'5@7f7AnK	5yyyc[y>BWY
 *H><3  s  ' % 2  .'#5!;#5!#3!"'&'&547676#";Rp*ŷ:"8)r]O\!yyf7@5'03y 	B>y[cyyy5	KnA7J3<>H* 
  B  '    /'   #5!#3265#5!## &5ǘ{gVyykoyyշ    h   !53##!#!2654&#!#y_Tymk%y,?|BXkc   ph 	  -  %"&462"&4632!53##!#!2654&#!#<VVxWX;<VV<;XXZy_Tymk%yXxTV:<XXxXXxX?~BXkc   0  #!#3!2654&#!#3!2654&#!#3!53#jayyhyyhyy5y]VcJsy=S^h`>R_hx>n   ' Y    ' Z   H  F' ]    T`' !  !#!#"%53327654'&+5w{]Xo(UN?CYgK+wIEK=9<&PD7NX5F   Kj    3253# 4%5 54#"#563 qxq^qxHBxWBW    <.D #  2 32673#"'#"&'3327.54 5_pM`r~puoԓoup~r`Mp]DbR**ZZ**'Rbܰ"    F  d'   F  D'N   F  '9   F  '    K  ' /  543!#"3!535$'&=4+5!2#5!#676 H@_NoP_?IBzyCy`[KyyKZ`yŋH-yy(c   $^'       5333!53'!3!
MbcZG\MNp$CCCC-:    #  !#535!3!53#5!#5!353#5#!53%0HxZgHuWUUUCCCBviiw    <   #  53#5!2#32654&+3264&+<yy.wvSlifoSZytuxZCBefIVmZztEGHAPSV   /% 	 % /  32654'&'#53#53#5!23##367654&+;xt:'Byy.<Lၙ9"4foSUYZ,
aD[MDghJ,M7\|v#HIB     <)    326&+53#5!2#XXyyfCBr  <   53#5!#5!353#5#!53<yyNWtVVVCBviiw   <   !53!##33!#5!#3WVVuWMxxwMiivBP     6   .#"32675#5!#"$$32xx5[%qSjndcmaB+*#$    <   53#5!#!#5!#3!53!3<yyywyyyyyCBBBBPCCPC   <    53#5!#3<yyyyCBBPC  1   533265#5!##"&^Q10=0x4j31RqBB${    <   53#5!##5!#3!3<yyye_}]]yCBB,BBNCC   <o   53#5!#!53<yyysUCBBX  6X   53#5!	!#3!53#36xxyyxܟxCBBPCCr=C     9h   53#5!#5!##39xx&8xIyxCBBBQC  9   3#3!53##5!yyyfx=DDDD  DD     6, 	   26&#" $$321yuuywvvd&߱lCr    4G  !  6545 ! 547&543"254%VM D:8<XMs|bI^<{N\F`  <    53#5!2+332654&+<yyGRaaRGCB܃C`OP^     <8  $  3!'.+3!53#5!2%32654&+8Maʕ,=6'yyy~zSX__XS=30CM*CCBsiVdTNMS   UV )  5332654&/.54632#.#"#"&dPxbfEmpS`P|r]_AvĿ\\[A>27nezUN8836yj}        53!#5!#5!3|WU~C͂YC     ,I   #5!#3265#5!##"&5xxmmxHyڼBBez{BBY     VG  '  3!5#"&546;54&#"#5>325#"326_,mEgnuMQCHG<GT>C024?CJ.,`Zbb#GD07~uu<o7<  VG  (  #5!>32+32673#"&32654&#"`?,lFfnuMPCIG<GT>C123?$CK/,aYcb"GD06~u,u;877;     V     54&#"326!#3!5#"&6325K=BE89DB=>__`FF`:g[`a[B<CJ-- -.	  V  5 ?  326=#"&'!54&#"#>32>32+32673#"&3264&#"K1;:2{0uFOWHXjT28NvYNAGH<GV|PTEC286<t]\k
++rdB@c^++++`Zcb"@J05~*yw<}4=   V     #5!>32#"&'!5%3264&#"`?`FF`?<BE88EB<B.---JCf[a`[g  V    54&#"3263!5#"&632#5!K=BE89DB=_`FF``?:g[`a[^CJ-- -.B    V    4&#"!32673#"&54632&1;924NWHZit\[k
AqeC@c^    V    326=%!54&#"#>32#"&K1;:23OWHYit]\k
ArdC?c^    V .  "&5467.54632#.#";#"2673ss7?>EINJD%$,-WX,,HEHNk=:UM9NN8NU
v324*"#B"#)483DG64   V .  2#"'&'53327654'&+5327654&#&#676dss6??EINID%$,-WX,,HEHNk<;UN8NN9MU
v324)##B"#(583DG55   V  *  #"&'53326=#"&6325!4&#"3265*ɷCHG
WQhU`FF`>=BE89DB=|:8VnB-- -.KCg[`a[f    V    #"&54632#5!#3!G32FF23G`__
-==-+=<CC=C  V   !53#5!%#5!#3!53'3m__>P2|IN?UCBCCCC0   Vb 0  >323!534&#"3!534&#"3!53#5!>329/lHtr`qP'4;BPP'3<BPr__>'eERf:6rsCCm9OJCCm9OJCCCS307   VW &  53#5!>32#"&'5332654&#"3V__>(hOpt%V.G%*.%,5D?RCCS4/tqGY\
|,'4CK9V^C    VJ     26&" &5463299:2ɱjij驤  V   >32#"&'5332654&#"V­FJG
OH]OMWCR>dcJHnqFB    VJ   4632#4&"Vɱ9:ѐij    VJ   #"&53265Jɱ9:Бij   V  "  3264&#"'#5!>32#"&'3!53<BE88EB<`?`FF`gZ`:f[a`[^CK.---BB    V   #53533#32673#"&5aaߺ$)'^cybCCL&01XGKe   V   3!5#"&5#5!3265#5W_(gOqs`?)8C?RCR4.tq1Cm;W_C  SGG   !53##!#!2654&#!#SQL^<4L}CdlLU#]EdgU%1<8I   Vb 0  #"&5#5!#3265#5!#3265#5!#3!5#"&/lIsr`P&5;APP'4<AP``'eERf;5rs1CCm:PJ!CCm:PJ!CC=CR3/6   V{   #5!##53#JQWMCCrCC  & #  232673#"'#"&'53327.546[fG1<HO
GJnF]\FmJF
PH<1GgQc{7.IL22LI.7{cO   Q  -  3276'&'&+5327654'&#4#"0'25;&.) #$!Y:J[44ZZ]<Ш@06PU5DC&2VH*t3>Wa0.X9Sv|      '&7#5!676'&'53{a)":C] "NIu(Q0Brg(C9=r <(s9+* Mm   5) % -  &74767672#&'&'&#"72 &7626&"gSR?MKJF*CK)	Vddd<99:4R_&#x1\TSڧ&S2lkl   <R  8  6767654'&#"#'&'&'&'&547673476>#' )D%N**/ BAoQ '$9	d~2B/*%S'(-o4>bH1WcII$G9j?:]'  ,AWUX0H   4 5  3!53'&'&'"#5676727#5!#327673"'&'nKvHX&;  &-(BuAHR&;  &-(<<<&rH<<?<	&qH ,  X  T   Z  cu  T   VIC  T   V  {IF  T   QrH  T    SI  T    Q&d    32654&#"763#"&'#0<CE88EC<6^NRG_G;h]cb]G)	RV-/   <RSK  T   4dL  T    /D ( 0  "&'#"$5#5!3265#5!63  !326734&#"̆NY|BXkc`x	%|s+ @N^[OMONN+ykyηztuҩ  9D  +  4$!2#.#">32  #"&'!5326&#"x?#jsq-pp-`inYZmi`!!ifySQQSyfʰ <    F  '   !#3#3!53#53#Fo'yyyyfyV    J  '   53#5!3#3#"'&=J*,[KayVy1y<=c0?     /VD  ' 0  #5!>323##"&'3!53#53!3276!&'&#"ǘ-pq^]vp-br_jn,&w&,nj0.ySQyQSHyyyyXM4JXSO   /'  %  #5!#!#5!#3## &=#53!3265ǘ{㘘GgVyyVyyy\\yy%ko ' - 5  !3#"'&'&'&'#536767!5!!&'&'5!!276N/u01\SllkjU^1/x.O 0!
 0 }<:>>:@|JPyg_bJC$###DL`]iyPJ|@yyZfhV}yhpph   9   %3#"&'53326=!53#5!?<Iq;BI:їyy}PG^{}y#x     V     3264&#"!53#5!>32#"&'=BE89DB=__>aFFa:f[`a[WCCK.---	  V   #"&54632#.#"3267­FJG
OH]OMWCQ	cebJHnrGB   V-  -  3254#'676!"'#767&'&7632#&'&#"t;bW91[tQVkkje788;''I]02&T;D
'n'/OO8+TTTM#$@B|4     VJ	  ,  #"&54632.''7.'77.#"2654&UvȲɚ6)!a?X9/F;;:R~"=R7H"=
(U9

i~ih;i   V 0  "'&'33>54'&+5327654'&#"#567632d;<kNHEH,,XW-,$%DINIE??6ZZssZZ46GD384)#"B#"*423v
+*N8NN9M*+     V   #.#"3#3!53#5354632G/,2-@`dd5g1r**?GKC=CCCIae
  V   #5!3##"'&'53276=#53@_>jj%++.G).^^CCEY\
},CEC     V  '  !##"&'53326=#"&54765#"3265 _ɷCHG
WQhU`FSRPE89DB=C|:8VnB--~TR`a[f    V   3!#"&5#5!#3265#5Wd(gOqs`Q+6C?RB<4.tq1CCJ:W^C     V  !  3!535#535#5!3#47632#"'&`b____>``$#32####23#$CCCCC--+   V   #5!3#"'&]<9mu/=eMCxH!"6#     V     '!#3!53#__`b__CC=CC    V   !#3#3!535#535#V__``b____CCCCC    V  + 6  47632#"'&#&547232#5!#&'&'&#&76765##41#$##23#$+HP۠_>=FtS-,+*/zlCr#-1,PE1O   V   #5!327673#"'&5_?$.*H.++&HIBcC4,|
..Y   V   3#"'&'533276=#53#5!`%++.G).__>Y\
|,CECB  V   53#5!#353VxxyUCBBA   V B  >32#"'&'53327654'&#"3!534'&#"3!53#5!676329/lHtr%++.G).4;!!PP3<!!Pr__>'32ER33:6rsGY\
|,Cm('JCCm('JCCCS3     Vb 0  #"&5#5!#3265#5!#3265#5!#3!#"&/lIsr`P&5;APP'4<AP``'eERf;5rs1CCm:PJ!CCm:PJ!CCRB<3/6  VB -  #5!676323!534'&#"#"'&'5332765@_>)34Oq9:`pQ5D %++.G).CS4::qCC6K++^rY\
|,C  V? ,  53#5!67632327673#"&54'&#"3V__>(44Opt.)G.++%5D RCCS4tqGC,|
\YK++^C    VT   53#53#53##3VVVAVvxACEEE_C    VJ       '&5476322767!'!&'&"edded RRRRR5/ut/o-45-   V  & /  !#3!535&'&547675#67654'&7{[ss\|b{YttY{{&& &&CARRACC@RR?)55/55  V C  3327654'&/&'&547632#&'&#"#"'327673#"&5[G	/0QD$$B\h./LK;CCQG,+PDF4\22.)G.++&`A"#'#**G`./	<&$+*Mc^7C,|
\Y   V !  &7632#.#"#"&'533276'XG6f1F0+4#WI%V.G&).	>`33
}**!F&P7.
|,'(5    V "  #53533#;#"&'533276="&5aaߺ$&V.G%)-dCCL&sY\
|,'E5Ke  V  )  5#5!3#3!5#"'&=#535#5!#32765xR1XX_(43Oq:9RR`?8C CCCR4::q2CCCm,+_  VZ )  #"&'&'&5467#5!27654'&'5!o:4DE5;pB"N'(!#O;67(%'%)65<O#C[F6We|>>eY5B[   2   #5!#3265#53##"&5}_RZA7`XRzCCo<>}CCgvs  Vv   $5#5!727654'&'53_>`@''"Qo:5DDGCu|=>fX5B#N<67(%  V{   3!533#53DJQWMCCqCC  V   5!#5!!53VKp6KCdB:j     V    5!#5!!3327673#"'&=VKp.)G.++&KICdB:uC,|
.,[E     VG  "  #767!5!#5!367676%376WKp&$7ZYGa'=PP
CdB:K2Sk>;'    V+   #"&'5332654&+57!#5!FeKVLbW`imd*Ko.C{NR\VYa{dB    VJ     !&'&"!276 '&54632O 3edɱdvIVVIHRRHvww f   73!5   :f   !!3zx   f   !5!#@   :f   #!zx     f 	  3#'#3.  fx     f 	  73#'#դ դ fx L& $     T D& D  X   `  R'au %   /F& E  E5 `KR& %  a   /KF& E     `R& %  a   /F& E     Vok&   xyu Tof&    v    `  'au '   Th& G  5 `K'   '   TKh'   G   `& '  a   Th& G     `o& '  8   Toh& G     `& '   & Th& G   & `  u&s  (     Ti' H   `  u&s  (     Ti' H   `& (  /  TD& H    `9& (  /   T9D& H     `ok'~/u   To5'      `  '%u )   ?  & I  D5 V3& *  u T9h& J     `  3'u +   ?  & K  E5 `K3'   +   ?K'   K   `  3'wu +    & K  E5 `o3& +     ?o& K     `;3& +     ?;& K     `9`& ,     9& L  }   `  `u& ,  #     V&    `  3r& .  x
| F  r& N  xN| `K3& .      FK& N     `3& .      F& N     `Ks'   /   FK'   O   `KsP' qD   FKP' qD   `s& /  %   B& O  }   `s' & /   & O  & V  {r& 0  xI| F  Hf& P  H   V  {~'<p 0   F  HN& P  j   VK{'<   0   FKHD'G   P   Z  'u 1   F  N& Q      ZK'   1   FKD'   Q   Z& 1     FD& Q     Z& 1  U& FD& Q   & Vu'    2   TS' R   Vq'    2   TK' R   Vu'    2   Ti' R   Vu'    2   Ti' R   `  k'xau 3   /VFf& S     `  'au 3   /VFN& S      `  'au 5   ;  LN& U     `K'a   5   ;KLD'   U   `KP' qaD   ;KL' q      `& 5  a   ;LD& U  }   L'u 6   X-N& V  B    KL'   6   XK-D'B   V   L'B 6   X-8' V   L&' 6     X-' V   KL'u   XK-N& V  'B  C     'u 7   1& W  }5 K'   7   1Kq'5   W   & 7     1q& W  -   & 7   & 1q& W   5& FK& 8     /K'& X     F9& 8     /9'& X     F& 8    /'& X    Fu'    8   /Q'  X   Fq'    8   /q'   X    Ro& 9  yu  V& Y  _  KR''   9  K''T   Y    	k'zu :    f'~   Z    	k'xu :    f'~   Z    	'wu :    & Z   j}  	'u :    N& Z  ~  P	'  :  K'& Z  }   
  3'u ;      N& [  _   
  3'wu ;      N& [  _    'u <  9N& \  _   L  k& =  {u H  Ff& ]  G   LK& =     HKF'& ]  F   L& =     HF'& ]  F   ?& K     	& W  }5  & Z  ~  9& \  _   T:& D  /   ?  'D5A       !  '75#5354632#.#"73!53B>ٞUNpKEP$$@:-iyNL:>|]iyy   ?      %3!53#5355367632#.#"!%?:KqUNpKEP$	yyy5y{yc<\NL: 1y    F /  4&+5#"3!534>3!!"&'3326B	qU" JUcN.XWydUëCyyD(6EFL?%+Hݔ  T-  KL& $     TK D& D  X    Lb& $  u T & D  Y    Lo&H  $     T ' D    Lo&H  $     T ' D    L&H  $     T
x' D    L&H  $     T ' D  KLk& $  '  {u TK f& D  'X  Y    Lu&T  $     T 5' D    Lu&T  $     T 5' D    L	)&T  $     T ' D    L&T  $     T N' D  KL& $  '  u TK 5& D  'X  Y   `K& (  /   TKD& H     `  b& (  0u T& H     `  & (  y1 TV& H     `  o&s  (     T' H   `  o&s  (     T' H   `  &s  (     T=x' H   `  &s  (     T' H   `Kk& (  '/  {2u TKf& H  '     `  `b& ,  u F  '~    `K`& ,     FK& L     VK& 2  }   TKD& R     Vb& 2  ~u T& R     Vo'    2   T9' R   Vo'    2   T' R   V'    2   T^x' R   V'    2   T' R   VK& 2  '}  ~u TKf& R  '     Uk'x}ub   Uf' v   c   Uk'z}ub   Uf' C   c   Ub'~ub   U'  c   Uo'y}ub   UV'   c   UK'}  b   UKb'  c   FK& 8     /K''   X   Fb& 8  u /& X     Ldk'xuq   3qf' v   r   Ldk'zuq   3qf' C   r   Ldb'uq   3q'  r   Ldo'yuq   3qV'   r   LKd'  q   3Kqb'  r    r& <  z|96& \   C
  K& <    9'& \      i& <  |9& \  _    o& <  yu9V& \  _    `  s    353#5!#!53!!` Lyyy-\-   F  h    %3!53#535#5!!5#5!3#!Иޗ/yyy'yxxy'    T'6   *   T'n   *   T'C   *   T'P   *   T'D  *   T'Q$  *   T'E   *   T'R   *    L&6       L'np       &C      &P      &D r      &Q      L&E       L'Rv     co&6t .     co'n   .   co&Cg .     co&Pr .     co'D   .   co'Q   .     '6  >       'n  ,       &C B     &P B     V&D      &Q    FV
'6  0   FV
'n   0   FV
'C   0   FV
'P   0   FV
'D  0   FV
'Q  0   FV
'E   0   FV
'R   0     q'6  >       e'n  2       
&C N     
&P T     	&D      
&Q      	7'El         	1'Rm       F !&6 2     F !&n 2     !&C 2     !&P 2      !&D 2     !&Q 2     : !&E 2     1 !&R 2       '6  J       'n  2       &C H     &P N     &D      H&Q      j'El  
       X'Rm       T'6   8   T'n   8   T'C   8   T'P   8   T'D  8   T'Q   8   '6  <  "'n        	&C    	&P    &D O   0&Q    F<'6   >   F<'n   >   F<'C   >   F<'P   >   F<'D  >   F<'Q  >   F<'E   >   F<'R   >     s'n         	&P      	#&Q Z     9'Rm  p     QI'6  B   QI'n  B   QI'C  B   QI'P  B   QI'D  B   QI'Q  B   QI'E  B   QI'R  B     '6  "T    Y'n  "        	&C "     	&P "     &D "P     Y&Q "     'El  "       'Rm  "\     Tf'b   *   Tf%   cof'b   .   cof&   FV
f'b   0   FV
f'    !f&b 2     F !f(   Tf'b   8   TfE   F<f'b   >   F<fF   QIf'b  B   QIfG   TW'      TW'      TW'      TW'      TW'      TW'      TW'      TW'     WL'5     WL'5      W'5B     W'5B     W'5     W'5:    WL'5     WL'5      FV
&      FV
&      FV
&      FV
&      FV
&      FV
&      FV
&      FV
&      Wq'5     We'5     W
'5     W
'5     W	'5s     W
'5     W	7'5     W	1'5     QWI'     QWI'     QWI'     QWI'     QWI'     QWI'     QWI'     QWI'     W'5     WY'5$     W	'5     W	'5     W'5     WY'5$     W'5     W'5     T5'   *   T' q   *   TWf&      TWA&*      TWf&%      TV'7   *   TWV&-       L}'H    LP' qD     f'bv  H   Lf  WL'5     W6  W   W   '&547632'6>*++'AD1-+db@	')>61+8B8Y(Bw/.  fV   )s'7  V j   FV
f&      FV
D&0      FV
f&'      FV
V'7   0   FV
V&<        f'bv        $f     	+f'bv        f   `W3'5     Y'b   6     u&m 6   f&6  7   @ !5& 2     F !& q 2      !&` 2      !
   & !V&7 2      !&8 2     `  `k'~u   `  `P' qD     Xf'bv        f   W'n  b      T'n  m.  f&n  7   F<5'   >   F<' q   >   F<'`   >   F<)   V '6   :   V 'n   :   F<V'7   >   F<'8   >    k'~Du    P' q&D     9f'bv  p      f     'n  D     x)s& j  b )   f C   QWIf&     QWI'&B     QWIf&G     QI&B  7 QWI&f     5f'bv      f     sf'bv  "      f	   \W'5  "  Zsf v   Z   &'&547632(@cd*-0EA&,,)x./wB(Y8B8+16>)'   o    1 0!!ot  o    n#    /1 0!!nK  n    /1 0!!n$  n    /1 0!!n$        /1 0!!   )' _J   _     & B   B    R  @  {	 i	91 90!67R`XhC7`   b'  @ s	 i 	91 90>=!b`WC7a  =?  @ 	 i 	91 90>=!=`WC7`    b'   &'!'iWa7    #   2@ 	 {	 i	i991 <22990!67!67#`Y`XhC7aC7`     b   4@	 s	 i i	991 <<2990>=!%>=!3`V`WC7aC7a   =?   3@	 	 i i	991 <<2990>=!%>=!`Y`WC7`C7`     b    &'!&'!'iV1iWa7Ca7   9;  8@
	 sTR T	<2<21 <2<203%%#5)j))jJ##R##   9;  a@5	
  sT
R T<222<2221 222<22<203%%%%#55)j))j))j))jJ####I#### '`   1 0467>32#"&'.'535II245633JI326J235624IJ336633    'AF   'AoH   #`   74632#"&pNOppONpNppNOpp   ` 	   %462"&%4632#"&BppppdpNOppONpNppNOppONppNOpp  Z`   # &@r!	p$ $1 <<220%4632#"&%4632#"&%4632#"&pONppNOpepNNppNNpdpNOppONpNppNOppONppNOppONppNOpp    1
   # / 3 ? K k@723030121*@} }*}$F}4 :2p0${L	C=	I17!'73-L1 2<<2220KSXY"2#"&546"32654&"32654&'2#"&546!3#2#"&546"32654&	Z˾˾@77@A88@88@A88A˿NZ;ʿ˾A89@A88dߋe-d    	 1^ 
  ! - 9 C G S ^  2 &546"32654&%2 &546"32654&"32654&'2#"&6!3#2#"&546"32654տ˾@77@A88D˾@77@A88@88@A88A˿NZ;ʿ 89@A8dddߋev-d   (`   !(`u   (`b'w     (`'  &  w    (`   #!`u    (`g'|     (`'  '|       <   #%##   s-  @
  h291 905s+-     -  @
 h <91 905+-AB &        T   %  >32#'#4632#"&67654|id;	ypNOppONp_DA""B)NppNOpp\t  M  B  0   -'  '  {   {     )@  *p {1 0KSXY"3#)Z     7   3!!#3b7Tx"x^       !!53#53#8x^    Bf& "  "   T& "      T&   "     ;   2####5טq辸}     fS    3'#"&'.467>3،I326535IR2633235  fS    '372+r،I535623I532336 -         57    "&462&5!nopoob-NnnqpȎmDX   la  #  %#'-73%%#'-73%===
====
oqqpqqp  B&' l'         d?   #"'&'&'$#"5>32326w
sՐs?VR:BHIWQ9DH   (`P'  &  'w  e    =H    27654'&#""'&7632KKLLeddedeed<<==<<<<@nnnnnndnn     ,    4632#"&3!53#5!vG32FF23G`b__>-==-+=<CCC   1;   P@(*	 {1k
 1<<91 2<290KSXY"!535!533#3%%}{}w^yX^yN    j# %  !>32#"&'53327654'&#"#*f9yffeMSL,-W]--,,Y0&%!?[MKKP((76om67$     R?  ,  67632#"'&547632#&'&#"27654&">*23<SRdcno9KM+,Fp32K8JIferr8CD10vw`00wv0    f   	#!#!{{.WdHp  C?  ' 5   '&5467&'&5476 '4&"32764'&"276Zp;:bcbcvoc11YZV210t00:;a88[q<==<q[p/.Hh77nhH./WBBWV@  d&&&&df''''  F3  ,   "2654'#"'&547632#"'&'53327680*32<RS\]on8BAJLXFo3201vw00`wv1zJIIJrr	8:DC    n   !!#!5!eKKn!!     L   !!'L    R    !!!!''|w}   z   &67cXXcD|IB5Ͼ4     B   5>54&'5BcXXcB4н5BI   _ !  53#5!676323!534'&#"3_bbH)65Qu;<bdS8E! TCDT5;;sCC=K,,_C  =  HT  d    T {  d   V T t  d   Z  /T u  d   1 ;T  d   j  #T  d   R  ?T  d   f T  d   C  ?T  d   F  3T  d      d   1  d    -  d   zah  d   Bah  d   V  Gi.  d   V  i4  d   V  Ji=  d   Z }c  d   V  i5  d   Z wr  d   V h:  d   Z w  d   V bi;  d   _ s  d   V&iA  d   Z   d   V  B  d    +  f % ) -  5!5!5!#5!3#5!#!!!!!#3!5373'#35#,

鍾QPP-yyyyybyy-Lyyy  1 4 u@?-v 1uu"v+${p5-+%($,#5	".,#,(4 (529999999991 <2220#" #734'&54765#73 32#.#"!!!!32671&45y54Olv(t6YR5p$w58
w$>Cķw,16wܭ  (u	  " / ;  37367'"76!3 !73  4&+3  #"'3254#"(/k$@zciE"wv3KMiF<V$<dp<G&k^|yf,2F$RN7P    `    ) 0 5  327!53#535#535#5!23#3##!3!654'%!&+pDZZZZRV#^FF\#XuqEpsykVkywE`kkdGxyNVk     + @  !!32673# '&547#5!6767!5!67654'&#"#6763 ! -N88~М!	3S2l14JLbbE#"3'y*32Zrv32uvD9y/
;+y1-1]h23GHJ,|{2+y   1 ! *  #&'&76753#&'&'67671&\yy68sv(H7OM7HX2gf0tSLFΐC[EAWTQR    {    5!53!5!!3ddLyMy   ]  ? '  7!!!!3!.+532767!7!&'&#]56?[6	[dY=<.ڙEaVOKG'5/K^wwLuwQ[.-X`yÌMxLGwG.L     '  _ %  353'75'7#5!#772$7#5!#`88 ::IixyYysYytzyyX{rY{sxeta  `  ^  %  32654&+53#535#53#5!2+!!3}~&=㭑y yyyyyyyy    N	.& r  &8   N  & r  )8    E  #   3#7!>323!654'&#"F }S}G-lUk!tx}_TjCl=JyF0,4   F  " !   3!64'&#"!'7#7!%>'l`@tŦ: 13SD=JyHZ4Gd_+xqg_T     OR    0  2"&6 &"26!!463"!#7265#5!'y[WUZ[ZYZ8XCCjQvupwRxxVWuw 9PQ3ӊ9PSy    ( @G$ 
&" s)! ]!]]'#]% 	]])22991 <<22<229990!#5#3!53##%3#3!53#3!53#55LVVKVVVqV TTմb`PPb%R`PPgPPR \  "    \ (  !#! 76'&'5!#5! '&476>ݜdddcQQވzzzz}5 ٚ) }\<ܡ `  3 .    Lm       N   #3!3!!#3!#5N͉h{yy`߾ly    4   6$3   !"$'3254#"3!46uD~y}|<g)dFF_b875GF    7   )!!7\%#  X  }   !!}+#         )	!![Z9`u     . 8  !>3  #"&'332654'&'3!53>7'#>54&#" d,S33J|tket
4<D	[JΪ578դNӃPP SCz98|r`R\	DqxxWlCS1     '   33!!#3!#5!#3yyy!2yyy  x& { '  d x
& { '  d x'  & { 'Xd {d x' ud& {    V& t  '   ud x'd& {    V'd& t     Z& u  'd   1&  'd   x'd& {    j&  'd   x'd& {    Z'd& u     j'd&     f'd&     xi& {    `  ` ,    `  `    353#5!#3!` @yyyy\     `  	`     353#5!#3!!!`	 @yyyy\   `  	1   353#5!#	#5!###3`/}yyy#yy\y  R 9        !53###5!#	#5!#3տ͍?y\yy#yyy          !53###5!#	#5!#3%!տ͍?y\yy#yyyy        !53###5!#	#5!#3%!!!տ͍
?y\yy#yyyy    `  	     353#5!#	#5!#	3!53	3!	`]!ɸ
-yyy\yy5yy:y\;    
  3 ;    
      	3!53	#5!#	#5!#3!53!	3ɸ-!u?:yy;yy\yyyy5     
     #  	3!53	#5!#	#5!#3!53!!!	3ɸ-!u?:yy;yy\yyyy5  `  s /   V &   `   '   V  { 0   F   L   F  & L   L
   F  & L  ' L
   L   F  & L   Y
    ' Y    }& Y   L    
& Y  ' L   L    & Y  ' L
  ' L   L   F  & L   [
      ' [      & [   L      
& [  ' L   L   F   O   TD F   Th G   F  HD P    `  	     )   )   ";!32#pUU,\t,+    `     '  #5!   )53!32+67654'&Uo닪ml0=>\yy,GE+\if3gd.   `  	    / ;  676'&'32+%5#";5&'&76   )   !/=?/닪ml/>=0ꋩlmpUUp83gd.;@,+\if`F.dg3\t@fi,   V   332#"#6$3   ! $V+ک' zI@AoA@__    TD   332654&#"#>3   !"&Tkz}r~puo4Lxȃ'**ڳ    VV   !#   !2#.#"3267iIz 'Ωܕ+ef@Af =' ud'      L ?8 	  !#53?`4_4
    	  !#53%
4_4    u h8 	  5!3#u4_4(4c
c4   	  3%#54c
c4`4_4  L h8   3#!#534_44_44c
c4
      %#553%4c
c4
*4_4v4_4   . < 	  %'7~%J%؜E%J%~    < 	  %'%7%E%J%~<E~%%5    j 	  7%'% E~%%5T5%%~ . j 	  '75%%~~%J%  L ?w   !!'!#53!l̇l~4_4wKK(
   u hw   !3#!'!5!0l4_4.l4wK4c
c4K(   n] #  67>3'.'"'"&/'7"Y,-X"AWVBll"Y,-Y!BWVBl~%K%"$#"ACFBml"$#!BCGCl%K%~     WF #  7%7%#&'.#'7>727>l%K%~lBVWB!Y-,Y"llBVWA"X-,Yl~%%6lCGCB!#$"lmBFCA"#$     L ?8   !###5333?Z44_4744
4        !#5553%%4
4474_44  u h8   5!333###u474_44(44c
c44       3%%#55544c
c44Z44_474    L P;   !#53!4_4:(
7
  d h;   	'57!3#+ƍ:4_4(ɍ
4c
c4    L ?8   3#!#53c<4_4
       %!!5!53%
Ă4_4    u h8   #3!3#QĂ4_4(4c
c4     !5!!%#54c
c4<4_4       %!!5!5553%%4
474؂4_4(4     L ?   52#!#53!264&
4_4k%44ܵ 
4J4    u h   "3!3#!"&63%44%k4_44J44c
c4     L ?    !546 +#5!#5	3264&"!6 Yʂ4_Y%44J48Y 
4J44%    u h    3#!#5#"&6 )54&"34_4Y 64J44%8c
c4 YY%44J4    L h8 -  2327623276;3##"#"'&"#"&+#53'$'3;;3'$''4_4:=QFGZGFQ=:4_4&44&4c
c4ZZ
   L hw   3#!'!#53!4_4l4_4nl4c
c4K(
sK   _   %'7ԃF	!
	M^ K43dF'         !#!#534_4A
      
   3#!#4_44c
c4      #53!34_4
A   
   !3!3#4_44c
c        %#5!5!4c
c4I4_4   - m^4   #53!34_4
m    !   4."7#5676$ aĨ1 
?N<FbaaT8>p4_4u}l     !   #4$ 7#5&'."ܜ<N?
 1ĨaFl}u4_4p>8Taa     <    5!'7~%J%ќE%J%~    u?'  ^       c   #" 547327654''7kkkkkB?%J%Vijllkt[$J%      c   '7%'327654'7 #"'&54%J%?BkkkkkB%J$[tkllji     F(?8   53!F4<(
  F ?   !!#FĂ4         3%#
4         #5<4    u(n8   !5!3n<4(4    u n   #!5n4
4       3%4/Ă4       #53
4/4< Lh'D  ^B     ZZ'E^  C     Lh'B  ^D     L2?'B  B  >    'C  C>     u2h'D  >D    'E>  E     F ,n 'n   s  8   F ,n 'o  8r       L ?w    !!!!'7##53!7!,B-G,84_48ȉB-&&wKyôKy
ZZ    L hw   !  3'3#7!'7##53!!!%!7',84_48G,84_48dG&&-,Bo&&wKyc
cKy
ZZZZ   u hw    3'3#7!'7!5!7!5!!7'0,84_488G,\BtB&&wKyc
cKyôôZZ     L ?8   #53!!!84_48VX&&y
ZZ      53'#'#=
ZZV84_48&&X  u h8   '3#7!5!7'!584_48&&Xc
cZZ    7#5373wc
cZZt84_48VX&&  L h8    '3#7!#53!7'!84_4884_48R&&z&c
c
ZZZ      7#553'%7'wc
c
ZZZt84_4884_48Rz&&&  ./   '77%J%[%Kх%J%7K%[        '7%''/'%J%7K%[d7%%K[%      jk   7%'77?7(7%%K[%[%%7%[K    . j/k   %'7%%7%[K7%J%[%K  L ?   %#53!!!!!!!4_4)Gw$S$
yjj   u h   %7!5!7!5!'!5!'3)$S$wG)4_yjjy
  L ?8   3#'!#533JK4_4*Y+Y
   u h8   33#!'#5374_4KJ4c
c4Y+Y        !#!5!5!5!53%!!!!
P44_4P    3!!!!%#5!5!5!5!4c
c4jP̂4_44P    L ?8      #5!#5!##53!#5wt4_4<
         #53#53#553%#53
VJt4_4  u h8      53!53!533#!53=VJt4_4(4c
c4       3#3#3%#53#4c
c4t4_4<  u ?8   !###333!?474(44  u ?8   !333###!u47444   L ?8    !55!!#53d=_=;EE
        %3'3!#53#EE
dd=_=    u h8    !7'!!53#5d=_=EERc
c       #7#%!3#53EERc
cfd=_=          %5!!!'3'3!#53#dEE
dd^SdS=_=      +    %3!53#53#'3'3#!5#c^ș
dEE=_=d22      +     3'!3#!5#73!53#53#3'E77Ed^ș
Py7722d=_= Q      +     3'!5#73!53#53#3#E;d^ș
ŸEy12d=_=OϺ2         )#57#53##3'373!3'3c
cDD
JEE>==_==;H>   +   %  %3!53#57#53##3'3733'3#!5c^ș
cDD
EED==_==;z22    u hg    #3!53#577'!5#35o=_=d22șc
cdEE&      "    3!!%'7ٜ~%J%x؜E%J%~           !5!7%'%{'E~%%5sx؜5%%~     3#53#53#7#3'3cc
c
EEEE=_=`=_=<(     u h8  ! )  5!6762!3#!"'&')276%!&'&"ug/XX/4_4/XX/3333(9.XX.94c
c49.XX.93333 ZZ'E  C^      uhJ 	    5!'3#75!'3#75!'3#7u<4[4<`<4[4<`<4[4<ܼ
ۼܼ
ۼܼ
ۼ     L ?8   !#!#53!3?O4_4
    u h8   3!3#!#!5!4_4O4c
c4    L h8   3#!#!#53!34_44_4M4c
c4
  L ?8   !###!#53!333?jP̂4_44P
    u h8   3!3#!###!5!3344_4PjP4c
c4    L h8   3#######5333334_4PЂ4_4P4c
c4
     L ?8    %!#53<=_=Pn
    u h8    75!3#=_=>n4c
c4    L h8     7%!3#!#53'`=_==_=>Pn4c
c4
    	    
  3#3pT+  LF  ) =@ '!	'!*$ $*991 990>54&#"#"&54632 #"&54324&#"324,,:*:|fMHeMIecBds<+@lFWt|uy    A   !5!!5!!5AO55+     
A     !'7#53#5!!5!73!A|A2?}l&lnB2=ll`+<<on    )     L@(  * s 91 /90KSXY"%!	3 dd+  )      	%!# }{1b+       !"!!3!!"$$3Ho8D8oHج(o_,0/+_o(\(     " *  3#!!23!!"'''&$;7##";JJl
k	H20jh(yP/l%o8OOV(\(,/+P*o_,0        35!26767!5!&'.#!5!2#o8D8oH(خo_,0/+_oج    " *  '7#53!5!"#!5!2+3&'&326767JJl^k	H20jhخydP/l%o8O*("OVج/+Ppo_,0   /w  =@"
 a	bacb a221 22<20!#3!53!3!53#/XFFT^TT^TT     /w   !53#5!#!#5!#3FwTTT^TT^     w  9@$ 	 91 990!#'.#!!26?3!5	ӋX\S~!v0"
HX6S4+)X&G         1 0!!         !!!!#!5!qff      s 	    4632#"!!#!5!pNOppONgppoHff   B      ^   %#'-73%hbbibHH*{x  JM     &"265$632 &MnKKpKCNLpJK6  JM 	  632 &ٶ     HD 
 *@
	 
	 91 903##'%ugdɌKZ3qtk    HD' u D   BDl' |       %  .#"326"&'#"&54632>3"3.zN]vlQK~F\E`]XD_#|F-{=LJqXUqtq}밸urKL         / =@-$	'!	!0 $`*`099991 22999032654&#".#"326#"&54632>32#"&-{N^ulQJ|.zN]vlQK~E`]XD_]1KLoYVqr$LJqXUqtE}밸u찷q      r   %!3!0   r   %!3!04  8   #e   8+   '37#J樢֨Jc|    8c    ###cee   8   #'3737#w怢"怢O#T6 5  J   !!!5EGT    5  J   !!!5fgwT          !#4."#4$ o޾o(\(oooo~(خ      32>53 $5o޾oج~oooo~ج(  1q ) *@$ *'!
de!d*91 026732#"&'&'&'"
#"&54632VfbwL>.>
c('8z`yNB2FKbP<I0,".t>fbN>J?(:    1'      1
'@  '           4632#"&!!X=>XX>=X=XX=>XX    {     4632#"&4632#"&!!X=>XX>=XX=>XX>=X)r=XX=>XXZ>XX>=XX!    {   # / 3  4632#"&4632#"&4632#"&4632#"&!!X=>XX>=XX=>XX>=XX=>XX>=XX=>XX>=X)=XX=>XXZ>XX>=XX!=XX=>XXZ>XX>=XX!     {   +  #"/&#"5632327%4632#"&4632#"&ۿe)__)eX=>XX>=XX=>XX>=XrD9Ψ9D=XX=>XXZ>XX>=XX    @   #"/&#"5632327ۿe)__)erD9Ψ9D   @   532?632&#"#"ٿe)__)erΑD9Ψ9D          !!#"/&'&#"5>32326]e_aM``d_eMUS:
BGJVQ9
DH   -    !!#"'&'&'&#"5>32326]e_	aM``d_eMVR9BHIVR9
DH      9 \@/5470-7) ,!0)077!:54 ,:<291 99999999990#"'&'&'&#"5>32326#"'&'&'&#"5>32326]e_
aM``d_eM`]e_	aM``d_eMoUS:BGJVQ9DHVR9BHIVR9DH     - 	     4632#"!!!!pNOppONppo  H 	     4632#"4632#"!!!!pNOppONppNOppONIppohppo    H 	     4632#" 4632#"!!!!^pNOppONpNOppONpIppohppo    H 	     4632#" 4632#"!!!!pNOppONpNOppONIppohppo     $ 	     4632#"4632#"!!!!pNOppONppNOppONppoppo.     $ 	      4632#"4632#"!!!!RpNOppONppNOppONppoppo.     >@"
 
 	 <291 <2<2.990!3!!!'7#5!7!Vb5}     I     !!!!!!r       
 $@	
  <2291 /90%!55yPP        
 $@ 	 <<291 /9055%!!y           !"3!!"$$3ooooج(o޾o(\(          35!2>4.#!5!2#oooo(خo޾oج         !!!#'7&'&$;	#"-gY.-(gJ!ooo_OV(\(Oo޾7       35!!5!3+'7	32>4&'&+gY.-خgJj߉ooo_8OVجOo޾7     Q    7!!!"3!!"$$3ooooج(7bo޾o(\(    Q    7!!5!2>4.#!5!2#oooo(خ7^o޾oج   	   !#5332>53 $5b<4=4<o޾oج9
9~oooo~ج(       32>53 $54632#"o޾oجpNOppON~oooo~ج(5ppo       3##5#53532>53 $5o޾oج~oooo~ج(        %!!!!        !!5!!6    Q    7!!!!!!7`  Q    7!!!!5!!7b6         3!#!       !3!6         # +  $  $!676767!%&'&'&'ج(\(c/,_77_,//,_77_,/\(جb7_+/0,_77_,0/+_7          $  $!2676!&'."ج(\(b7޾77޾7\(جb/+_oo_+0,_oo_,         !  $  $7'2%654'7&"ج(\(m33i\ 33\\(ج\jk\3\kj\j3         $  $	32>54&#"ج(\(?\joo\koo3\(ج3ooj 3ook\        	  !   4632#" 2>4." $  $pNOppONo޾oo޾(\(4ppo,޾oo޾oo%\(ج         *   &"265$632".2>4." $  $7O66P6lgՏo޾oo޾(\(86Q56'jgi޾oo޾oo%\(ج       )  '#'7'7372>4." $  $bbbTo޾oo޾(\(XZZX梇޾oo޾oo%\(ج            !!!!&2>4." $  $Po޾oo޾(\(B/޾oo޾oo%\(ج            !!&2>4." $  $x`o޾oo޾(\(޾oo޾oo%\(ج          !)!!!!!!((((((           !!!!6((       	    %!!	!		!g~cg       	     4632#"!!!!pNOppON64ppo6     :   3!!#    :   #!5!:+{z         !!#!||^          35!3!^         3!!#[       3!!!!#[[NM      :   3!!!!#NM      :    !#;!!#       :     !#3#;!!#a+         3!!!!+3iNM     :   3!!!'!#coubb  :    3!!!!!'##7!?p(R*n9RUNbRbLM     :    !#;3!!#''˼luubmb           !#;!!!!!'7#7#?#L?8`RG>))RNbRb[Xర        7'	δ    
V  	 1 04632#"&pNOppONpNppNNoo      	  3	%!	\ !C|    7   !#! 7xV     !#5x  7   !3 b"Vx     !53!bx     !#{h   I,    $%%$nn!"nn8ʸ        ' + 6 @ K V  #"&6 3546 +32 &=# &6;5#'54&#"3!3264&#"32654&#!#"3265˭ʏʭʏeHGeeGHefGHefGHefGMGeeGHe`ʏʭʏ˭GffGHefffGMGeeHGeeHGeeG      !3!h{     qf   477632#"&'&'&#"jkbwL=.>\ bP<I0-".#<    -   0#"&546323265jkbwL=.>\bP<I0-".z#     T    !!!!%!!Pr6L + x     # / ; G S _ k w           +7CO[gs  !2#!"543!254#!"+"=4;2+"=4;2%+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2%+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2'+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2'+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;22+"=4#"=43+"=4;2+"=4;2"=43!2#UݓJIIJ%J%%J%%K$$K%J%J%%J%F%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%%%%C%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%$%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%$%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%%%%%%%*$%%%J%%J%%K$$K%%%%%JJJI%%I&%J%%J%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%%% %I%HJ%%J%%J%%J%%J%%J%     .    !5!!!!D.bb    m   !5!ݠ r0p        !!#v      !&5 ƠT_C   m   5!] p g ]   !0v	        !!]#ƚ ΐ,U  m   !!! #	q       !!#v      !! 	r    m   !!]# N#   ]   !0v	        !!!]# #   sXm   !4763!!"{zf+!u0%    y   !4'&/32765!9+en:==@ne( =F|AEuH<  sXy   3!!"'&5!+f}{y%0W   sy   !!	  m   4'&#!!2s!+fz{}%0   sXy   &'&!;!76<<(en@==:ne+!<TuEA|R=   y   !#!!2765s{}f+!y0%       !  	z        !	!!$<   .    3!3.b    j   5!j    l   !X      3 	      !@ 	  <j     5!!5!!5!r#B#B#j    <l     !!!!!r#B#B#XXX m     333mjjj  m     !!!@@@mjjj  <j      53353353353<xxxj    <l      3333333<xxxXXXX   n      3333p^^^^    n      !!!!@@@@p^^^^     !!      l   !! l       !!#      l   !!# l       !5! j     l   !! X       !5!$ j     l   !!$ X   j   3!-j    3!-m    j   !!@j       !!@m   j   5!3,jk     !3,X j   5!!@jk    !!@X        3!!- 	       3!!- 	    	  #!!!P@ j   	  33!!P-# k      !!!@# 	    	  #!!!P@ m      	  33!!P-# l     !!!@# 	     !5!3, jk       !!3, X    	  !5!!#@P jk   	  !5!33$,P jk      !5!!$@ jk    	  !!!#@P X      	  !!33$,P X     !!!$@ X     !5!! j    l 	  !!!!- XV  l 	  !5!5!!, jV  l   !!! X     !5!!$# j    l 	  !!!!$# XV  l 	  !5!5!!$# jV  l   !!!$# X j   5!3!,-jk  	  !3!!,-XV    	  5!3!!5,-3jkV      !3!,-X   j   5!!!@jk     	  !!!!@#XV   	  5!!!!5@jkV     !!!@X      #!5!3!,-jjk     !!3!!,- X       !5!3!!,- jk       !!3!!,- X      !5!!!!@ jk       !5!3!!$,-# jk        !5!!!!$@# jk       !!!!!#@#P XV      #5!5!!!!P$@ Vk      !!33!!$,P# XV       !5!533!!$P-# jV       !!!!!@ X     !!3!!$,-# X      !!!!!$@# X      !5!!!!$@# jk      !!!!!$@# X  <j    5!35!<yj  <l    !!!XX       33lUTT        !!@@lUTT     5!5!  x X    333x 		    	  !!!!- ¬B  x  	  !!##xms j  x     !!3!!xm3-s ¬jB    	  !5!5!5!, >   X 	  5!###ljjj     X    !5!!!5!4l t, >  	  3!!!--A   xj 	  333!xjk   x    3!3!kA  	  5!5!5!3,,=    jX 	  5!333jkk    X    5!35!3̠=      3!!!!-- 	AB x     333!!xs 		   x   	   3!33!!-skA	jB        !5!5!5!3,,   X    !5!333xt jk	    X     5!3!5!33t,	       !5!!5!4 B     5!!###sjjj      	   5!!5!3!!t,-sjB     5!5!3!,-XA   j   5!333!jkk     	   5!5!333!XkA       !5!5!5!3!!!!,,-- AB        5!333!!###sjkkjj         !!!!5!5!333!-s t, jBkA        43!!"yY[ p~|     4&#!5!2[Yx p~|  j   5!2653#xY[j~|q    j   !"&533![Yyjq|~  *m   3YѲ/	Y   *m   #3*/	Y *m   #	#	3	3*i    S   jh   5!|j       3?  hj   5!h}j       3 @  hl   |X    !@? hl   !h}X     !@ @ l   5!5!!5ijVV     333PP ?@    l   !!!iXVV     #!#P@P ?@  ;	      ;?   !O ?   ; j   !O j   ;   !O k   ;   !O @   ;   !O    ;   !O    ;B   !O B   ;   !O 	   q   ! 	      ! 	      ! 	      !' 	   I   !] 	      ! 	       3 	   :	'       bm         # ' + / 3 7 ; ?  53!5353!5353!5353!5353!5353!5353!5353!53('O'('('(67576    (  'l         # ' + / 3 7 ; ? C G K O S W [ _ c g k o s w {           #5353353353!3#%3#%3#%3#3#5#53#53#1#53#1#53#75353535313#3#3#3#75353535313#3#3#3#75353535313#3#3#3#bb~! 
  'm       5 9 = A  35#%35#35#%35#%35#35#35#35#35#35!35!#5#!5#35735#35#wNOŶZXYI6Z   B;	  B  q :	         !( @  ;	'    	      ;   !!!;(' 	@   ;'	  	'      ;   !!;@@	    ;   !!!O   ;	'   ;&	  	'  ;   !!'(      %   !     %    !!!,7r<R     %    %3!254#!") ) ,orVoVZttV   %&	  	    %        !%!5!5!5!5!5!5!5!5!5!W77777 rrrrr  %        !%3#3#3#3#3#ᰰܲްܲް t88888   %         # ' + / 3 7 ; ? C G K O S W [ _ c g  35#35#35#35#35#35#35#35#35#35#35#35#35#35#35#35#35#35#35#35#35#35#35#35#35#!L$" $"$ܮ.,,.ܮ.,,.,,.,,.,,.   %   
       !33775353535W!yBߢ| T}<B     %   
       !%353555#5#5#57#!yyB| r!C}     %  	       $ ( - 1 5 9 = A F K O S W \ a e j o s  7'#7'7'#7'7'7'#7'7'7'75#7'7'7'7'7'37'75'7'7'7'37'75'7'37'35'!,2|5y2~~2O~~5~|~2~~2~~5~}}}}~~~~}1y|~||~|}|||~|}}| z4|2~12~~~~|~~~~54~}22~}~45~4z231|42~~1O~~4~|~1~}1~~4}}~~}}~~~|1|~|}~|||||~||}}4|1~21~~~~|~~~~44~~11}|~44~~41       7!         %!!!,rv        %!!        !!!cr   "   !    "    !!!,r8V     !   %!!n      !    	!!!bSnr     !%   	    !%    !	       7	        7!	  !%         !%    	x;rRff          7          7	x^rSS      !   7      !    7	xtrSS     !%   !$    !%    	%!bc6r        !         	%!QQZr    !%       !%    	W                  	z      !        !    		#W    !%   	  !%    	uvxx    !%     	>+uv))xx  p)   )  $7632#"' 327$%&#" %632#"'~~~~eMM>yJJJJJ6````qq|qq   #u   "@  91 990	9%-  p)    327$%&#" %632#"'MM>y````qq|qq     r' 	   ' / 7 ? G  %&'&'6767&'&'7%'676727"'64'7&"'62&47\+;.81F9K58.42d;E9G,:.80G9J6&8.;+d1O9FLL&_`JnLL'`_n<1& j(0=Ju &,A=N:0('<1& j(0=Ju &1<>EB0(n_II'[[JnII'[[   p)    % / 3  6%632#"'327&#"6767&'&6pyAAAA,+-,,-+A@@Rqq|qq%%mܱ[0$
%@%|"    p)   ) 7   3276'&#"7632#"' 327$%&#" %632#"'r99:9rr9:99XWXXXXWXMM>yB!!BB!!oe33eje33````qq|qq     p    $  $pkk]Ak^    p     $  $27$%&#pkk]<MAk^a``     p     $  $"3pkk]<MAk^``    p     $  $%&#"pkk]Ak^>``    p     $  $327$pkk]\LLAk^>``    p     $  $"327$!pkk]<MMgAk^```     p     $  $"!pkk]<Ak^`  p})   6%63"'pRqq     )    #2y|q*q   ( 
   2654&#"!|~}}|v<    	(     $%632#"' 327$%&#"!IMM>y_O````|qqqqH(     	(    !#%&#")%632OyyMMqq>~``     	    3327$3!#"'$@1 >qq``   ) 	  %63"æqv`  ) 	  2#%&#u)q>`   	  527$3Muyv`>q   	  "'$33yuMq`     p)   %632#%&#"puqq>``  p   03327$3#"'$puMMuyy``>qq  !%         !%         !%   !    !%   !$ 3! 
   2654&#"4632"&nȊce;~|ddcc||}  %    !%!!d r<     %    !%!!We r<     %    !%!W7 r<    %    !%!W7 r<  %     !%!!!!+c,b r<<     !% 
    4632"&!	W>>VV}V2j>VV>>VVJ      !%    !	c      !%    !	b    p (     7 &  $   %;<*X֖   %  	   !!!!!!,7,rWb<)) Ie  %  	   !!!!%!!,crWbM)<R re  %  	   !!!!%!!,br+ceR re   %  	   !!!!!!,7+r+ceR Ie  p      $  $!327$%&'pkk]]4MAk^Or``O+    p      $  $67$%&#"!pkk]uM14Ak^^O``rOc     p      $  $!%&#"67$!pkk]\M̦4Ak^OT``%OT     p      $  $327$!%&'pkk]\M40̉Ak^``TOTO     !%    7!!xtr R      !%    	%!#Wnr   !%    !xtr    y    !!!,Lr0R<6    y   !06    "K    %!!!,|rhOn    "K   !h#n    !%    !	#W   	       " * 2 : A I C   +  Dи  H   / / F/ H/ $ ' + $ +и ' /013#''%#&'52#"'&5476!!'5%!!'53'5%3'5%3#'sMM7:==-0YG.b#CKSuYGr=;>MM^??@7`d?\gOOOOy>*<?v^  
    < B H N T Z ` f l   3264'&#"&7367'67675673#''5&'&'7&'677&'67'%%&'&'%6767%&'0/CB^0/AC/88pkTcR|NOOfUip88pqUfONNQaQh!$b)dLQk
KRt!%c'd&//^000NN|P_Pfp88poQ`QyNNP\Qgp88pmQ\Py,
M
N>&`7"
bK*V&"g{M	M       ! ) 1a    +  0 , + 0  $ +    + A   &  6  F  V  f  v              ]A     ]A     ]A   )  9  I  Y  i  y              ] , и  (и (/A  0 & 0 6 0 F 0 V 0 f 0 v 0  0  0  0  0  0  0 ]A  0  0 ]  3   	 +    +    +  & " + & " *и & .01 !   !   32 54 #" &#%#7&'67&'6767KJ]_VNEWMCe2ntjnti7IL6a]]pu	otpu	ot        ! ) 1a    +  0 , + 0  $ +    + A   &  6  F  V  f  v              ]A     ]A     ]A   )  9  I  Y  i  y              ] , и  (и (/A  0 & 0 6 0 F 0 V 0 f 0 v 0  0  0  0  0  0  0 ]A  0  0 ]  3   	 +    +    +  & " + & " *и & .01 !   !   32 54 #" 3$3&'67&'6767KJ]_TNEAgntjnti7IL6a]	Uypu	otpu	ot           % ͺ    +    +    +   и /A     ]A   )  9  I  Y  i  y              ]  "и "/  '   	 +     +    +   и /   и  $01 !   !  #$''&'6%&'667KJOR`7IL0cZ
		
		    
       " * 2 : A I X  Y/ Z/ ܸ ܸ  и  /  и / Y и / и /  Bи B/  Cи C/  Eи  Gи G/  LA  L & L 6 L F L V L f L v L  L  L  L  L  L  L ]A  L  L ]  F/ H/  / /  W +  $ ' + $ +и ' /013#''%#&'52#"'&5476!!'5%!!'53'5%3'5%3#'32765'&#"sNN99=>-1\H0e%FKSwZGr=;=NN$E| 1	?'_>?@7`d@\hPPPPy?+<>w_VG{?,rCA    0: 1 @! 7  + 7 	  + 	 . + + .    .9 и 	 и /  к   .9  A  7 & 7 6 7 F 7 V 7 f 7 v 7  7  7  7  7  7  7 ]A  7  7 ] 7 !и + =и . B   / "/ +/ -/ / 
  + 
 ' 2 + ' :  + :   2 '9  и  и 
 и /  2 '9017#'#53'&'&54767&'&=33676=3#32654'&i($lm$(($[Uu&tU[$&uU[[UV$|ddbe|$%
ZSSZ
%_TYYT   *  $   +    +     + A       ]A    )   9   I   Y   i   y                     ]A   &  6  F  V  f  v              ]A     ]  и /  "и  &  /   +    +  	 # + 	 # и  и  !и !/014&#"326&54 32 %##5!&w衤礡PP 䤣L~~ |	  *  $  ! +    +   	 + A   &  6  F  V  f  v              ]A     ]A  	  	 ]A  	 ) 	 9 	 I 	 Y 	 i 	 y 	  	  	  	  	  	  	 ]  и /  и /  &  /   +    +     +   и /  и /  01"32654&'#5!3% #" 5476礡 𳉧פ㤤ף	|~~L     #    +  %    + 01&$76+"'&5'476%7!ttsstEuspid5s
qttrtt<֤ꧦg\ul9  S     / /  и / A   &  6  F  V  f  v              ]A     ]   9  ܸ ܸ   / /   +    +   0152654&#"#4 32 33#!5z{ym㗗yyy{(|   j  Ǹ  / !/    и  / и   	ܸ и ! ܸ A     ]A   )  9  I  Y  i  y              ] и / 	   / / /    +    +   и   к 
  901#53533#632#4654&#"#*jjoon}mZyH{zF       2  4 ˺   +    +  . + + .   ܸ  "и  $и  &и  (и + -ܸ 0и + 2и . 6  / $ ! + $    +   &  + & $ 'и & )и $ +и ! -и   /и  1и  301"32654&7#"&54767!!53#5!!3!!#3!!8OO87ON=0LmkL/>Λ2  1O79NN97Os0LllllL1KӘJJ-     ' <   +    +  4 ) + 4  к   49  и  к   49   49 "  49  #A  )  ) ]A  ) ) ) 9 ) I ) Y ) i ) y )  )  )  )  )  )  ) ] ) +и +/ ,  49 4 2и 2/  9и 4 >  / / :   + :   и : к   9   9   9   9   9   9 "  9 #  9 +  9 ,  9 1  9 2  901%#5#535&'&'5'73'3#'73'676=35'73'33◰zhNgeMjzzTThOʍ7NjYYӖy      ?    / /  и /  и  /  ܸ  ܸ и  A     ]A   )  9  I  Y  i  y              ]    +     +    	 + 01! #!!!'!27674'&#.d ;6zFH%QM_\ǃ$P<  C   #    +   / /  / "/01#"'##56'##"/547 ?^'5@_*SU&/UL	;Yԧ9UP(`XI.      s  2 Q 3/ 4/ ܸ !ܸ 
и 
/ 3 и / ܺ +  9  /  & +   и & /0122732 #&547636=4'&# #4'&#"*tpz&=<xQ>hG:V
Hek%PF5NPB|-&pA&NF   X        / /    901	 &&5	<F:^;"Vgd    G 7 C   +   / /  /    9    9     9 /   901236;2"##'65##"'&5476;235&'&=476ex<JT`(GeRUdfB3	VNT<G48u<B<h	mMD:SGEnQh   B  " < B  '  + '   +   8 +     9   9   9 #  9 =  9 >  9 D   / / / 4 	 + 4 	 к #   9 4 +к =   9 >   901+"'##56#+"'&57547 7;2732;276=4'3&'"~V"0b*SV*8UiQ"_|Q
)w`SgA
?6N#euB?gIo5	F(pZR     w    /  / 	/    9012367632#&5476(t*#\l~ ΨT]1klSI|- X       / /01	&47EosU      H 2 ` g   +   Z +   N +    9   9 V  9A  Z  Z ]A  Z ) Z 9 Z I Z Y Z i Z y Z  Z  Z  Z  Z  Z  Z ] i  / /   ^ +   J  + J ) : + ) и / ) 	и  !и ) ,и ,/ : 7и 7/ J Aи : Qи Q/ : Sи : Uи U/ V : 790126;2"##'65##"'&5476;2&'5476&+"326733276=4/#"567654'&#"35&5hr=)\"IfRUdgC3&=cGkv	==Nr%SZU6vk 6)S<F98:d	mOE:Rp&i	C]&'Ax.+0	nM,W`c      %   +    / / /    9013#"/4?23hH0#!cZ-@  o  3   +     / / /    9    9013#'654'&'#"54732XWz=\9`Y'6?F` 1TFG*֙-@  x/  e /  /  и /  и  /   ܸ и /  ܸ     / /    9    9    901#"=4?2%#"=4?26ձ'VQܖCت+YP*~:ۉ8z"C    o    / / ܸ  и  /  ܸ  и / ܸ и      +    +    +   и /  и /   9   901"'4723!# 5472!5kmOdXX[;Z$}@Ϝ    "      +    +   к   9A     ]A   )  9  I  Y  i  y              ]     / / 
/   +   
  9013363'$6'"-8w?WXc1	     0    / /  и /  и  /  ܸ и /  и  ܸ и /  	ܸ и 	 и /   / / / 	/    9    9 
   9    9    9    9013%#'#3%#)N(4/c}     4 ( ,=   +    +  и  ܺ   9 и  к 	  9  ܺ   9 к   9  и  !и  %и  &и  'и  +и (и  )и  *к ,  9   / / / /    9    9 	   9 
   9    9    9    9    9    9 &   9 *   9 ,   901377#'#'547#5773%%.wwzy.**  <<7CA<<{8AMt     u h8 	  !53#5u=_=c
c  n>&   *'$&76#"'6767>	7>c7Ap1GM+SR+}Pm)6  n>&   567$&76&#""n+MG1pA7c>7cimP}+$%S   #u   	  	!	!j.u-1      !	!pp      	!	!p    (   53'#'#'##
ɩj55j4_4)wo?G     (   #5337373(7
7j55j4_4)G?ow     c #  5676$  '&'72>4."7#?N<ć-'TĨaaĨ1 
&4u}lN!1aĨaaT8>p4_   c #  	#5&'."2767 $$ 7
 1ĨaaT'-<N?&_4p>8TaaĨa1!N<l}u  u O  % - 5 =  53676$ 33## $'&'!#676765#35%3&'&'&u2N<N2܂4_42NN2%#T0C0T#%#T00T#(`VV`4c
c4`VV`0T#%#T00T#%#T0   L 8 	  !#534_4
  u ,8 	  5!3#u	d4_4(4c
c4   L ,8   3#!#53	ق4_4Ƃ4_44c
c4
    L 8   #53!!!84_48	&&	ly
ZZ  u ,8   '3#7!5!7'!5	84_48	l&&c
cZZ  L ,8    #53!'3#7!!784_4884_48R&&J&y
c
cwZZZ   L 8   3#!#53
'x4_4
   u ,8   #3!3#Q4_4(4c
c4   L 8    #53!53#=!84_48>p&&y
llôZZ     u ,8    '3#7!#3!7'	84_48&&c
cllôZZ     u ,8   !3#!'!5!794_4KJ{**4c
c4Y+++Y ,@,  ,+,  ,@',,  , ,   , @',,   , +',,   , @',',,   @  ,@',  ,@',  ,@',',  , @',   , @',',   , @',',   , @',',',   +  ,@',  ,+',  ,@',',  , +',   , @',',   , +',',   , @',',',   @'  ,@','  ,@','  ,@',','  , @', '  , @',', '  , @',', '  , @',',', '      , @',   , +',   , @',',   , ',    , @',',    , +',',    , @',',',     @'   , @','   , @','   , @',','   , @', '   , @',', '   , @',', '   , @',',', '    +'   , @','   , +','   , @',','   , +', '   , @',', '   , +',', '   , @',',', '    @''   , @',''   , @',''   , @',',''   , @', ''   , @',', ''   , @',', ''   , @',',', ''   ,p  ,p  ,p@',,p  ,p+',,p  ,p@',',,p  ,p', ,p  ,p@',', ,p  ,p+',', ,p  ,p@',',', ,p  ,p@',p  ,p@',',p  ,p@',',p  ,p@',',',p  ,p@', ',p  ,p@',', ',p  ,p@',', ',p  ,p@',',', ',p  ,p+',p  ,p@',',p  ,p+',',p  ,p@',',',p  ,p+', ',p  ,p@',', ',p  ,p+',', ',p  ,p@',',', ',p  ,p@'',p  ,p@','',p  ,p@','',p  ,p@',','',p  ,p@', '',p  ,p@',', '',p  ,p@',', '',p  ,p@',',', '',p  ,p' ,p  ,p@',' ,p  ,p+',' ,p  ,p@',',' ,p  ,p', ' ,p  ,p@',', ' ,p  ,p+',', ' ,p  ,p@',',', ' ,p  ,p@'' ,p  ,p@','' ,p  ,p@','' ,p  ,p@',','' ,p  ,p@', '' ,p  ,p@',', '' ,p  ,p@',', '' ,p  ,p@',',', '' ,p  ,p+'' ,p  ,p@','' ,p  ,p+','' ,p  ,p@',','' ,p  ,p+', '' ,p  ,p@',', '' ,p  ,p+',', '' ,p  ,p@',',', '' ,p  ,p@''' ,p  ,p@',''' ,p  ,p@',''' ,p  ,p@',',''' ,p  ,p@', ''' ,p  ,p@',', ''' ,p  ,p@',', ''' ,p  ,p@',',', ''' ,p  p  p  ,p@',p  ,p+',p  ,p@',',p  ,p', p  ,p@',', p  ,p+',', p  ,p@',',', p  p@'p  ,p@','p  ,p@','p  ,p@',','p  ,p@', 'p  ,p@',', 'p  ,p@',', 'p  ,p@',',', 'p  p+'p  ,p@','p  ,p+','p  ,p@',','p  ,p+', 'p  ,p@',', 'p  ,p+',', 'p  ,p@',',', 'p  p@''p  ,p@',''p  ,p@',''p  ,p@',',''p  ,p@', ''p  ,p@',', ''p  ,p@',', ''p  ,p@',',', ''p  p' p  ,p@',' p  ,p+',' p  ,p@',',' p  ,p', ' p  ,p@',', ' p  ,p+',', ' p  ,p@',',', ' p  p@'' p  ,p@','' p  ,p@','' p  ,p@',','' p  ,p@', '' p  ,p@',', '' p  ,p@',', '' p  ,p@',',', '' p  p+'' p  ,p@','' p  ,p+','' p  ,p@',','' p  ,p+', '' p  ,p@',', '' p  ,p+',', '' p  ,p@',',', '' p  p@''' p  ,p@',''' p  ,p@',''' p  ,p@',',''' p  ,p@', ''' p  ,p@',', ''' p  ,p@',', ''' p  ,p@',',', ''' p  ,p  ',pp  ,p@',',pp  ,p+',',pp  ,p@',',',pp  ,p', ',pp  ,p@',', ',pp  ,p+',', ',pp  ,p@',',', ',pp  ,p@'',pp  ,p@','',pp  ,p@','',pp  ,p@',','',pp  ,p@', '',pp  ,p@',', '',pp  ,p@',', '',pp  ,p@',',', '',pp  ,p+'',pp  ,p@','',pp  ,p+','',pp  ,p@',','',pp  ,p+', '',pp  ,p@',', '',pp  ,p+',', '',pp  ,p@',',', '',pp  ,p@''',pp  ,p@',''',pp  ,p@',''',pp  ,p@',',''',pp  ,p@', ''',pp  ,p@',', ''',pp  ,p@',', ''',pp  ,p@',',', ''',pp  ,p' ',pp  ,p@',' ',pp  ,p+',' ',pp  ,p@',',' ',pp  ,p', ' ',pp  ,p@',', ' ',pp  ,p+',', ' ',pp  ,p@',',', ' ',pp  ,p@'' ',pp  ,p@','' ',pp  ,p@','' ',pp  ,p@',','' ',pp  ,p@', '' ',pp  ,p@',', '' ',pp  ,p@',', '' ',pp  ,p@',',', '' ',pp  ,p+'' ',pp  ,p@','' ',pp  ,p+','' ',pp  ,p@',','' ',pp  ,p+', '' ',pp  ,p@',', '' ',pp  ,p+',', '' ',pp  ,p@',',', '' ',pp  ,p@''' ',pp  ,p@',''' ',pp  ,p@',''' ',pp  ,p@',',''' ',pp  ,p@', ''' ',pp  ,p@',', ''' ',pp  ,p@',', ''' ',pp  ,p@',',', ''' ',pp    u h8   3!333###!#!5!M474_44}44c
c44  u h8 !  33333#######!5!33Ђ474_44P  P44c
c44    L ?8    #53!53!!!!#=!84_48gG&&y
llôllôZZ  u h8    3!'3#7!#5!5!5!5!!7'g84_48&&lc
cllôôZZ   L h8   !  '3#7!#5!#53!53!!7!7'84_4884_48&&UU&&c
cll
llZZZZ     u h8   #3!333###Qʂ474_44(44c
c44     L ?8    #53!53#=!84_48z4&&y
llôZZ     u h8    '3#7!#3!7'84_48&&c
cllôZZ       3!!%#5!5!4c
c4O4_4        !#!5!53%!!
4_4O T  `   '#'##53`yjjy
)$S$wG)4_    T`   #53373`
yjj4_4)Gw$S$  L ?8    !5#!#53?ٴ;4_4
   u h8    5!35!3#u'ł4_4(4c
c4    L ?8 	    !#53!!5#!54_4
   u h8 	    5!3#!5!35!4_4`(4c
c4   d h;     53333###!53!'573>474_44ƍ:+(44c
c44ɍ
     n h8 
    + 2   4632#"$4632#"$4632#"$4632#"3#B2/EE/2B2/EE/2B2/EE/2B2/EE/24_4ebDD10DCbDD10DCbDD10DCbDD10Dc
c      !55!5!!%44474        %!!5!5544474  d h;   3!3#!##'573M4_4ƍ:4c
c4ɍ
    d h;   333######'57333Ђ4_4PDƍ:DP4c
c4ɍ
  d h;   	'57!333###+ƍ:474_44(ɍ
44c
c44  d h;   33333######'573V474_44+ƍ:+44c
c44ɍ
    d h; %  33333#######5'57533Þ474_44PöꍶP44c
c44嘴
  u P; 	  !!u:7
7  d ?; 	  !'57!?ƍ:(ɍ
     u P;   !5!3#|:u:u(77
7  d ?;   !!'7#'573'7|ƍuƍ:uɍɍ
ɪ  L ?8   !#53?T4k4  u h8   5!37'#u4k4(4nn4   L ?8   3#!#53!c04k4   u h8   #3!37'#!QЂ4k404nn4  . j   %'%'7~%%5~%J%5%%~r%J%~   . j   	%7%'7r%J%~5%%r~%%5~%J%  .4   %264''7 'J4~%J%j[ [4Jj%J%~Z Z       % &7%7%2[ [j%J%~4JZ Zk~%%5J4     j   &"%'%&6 J4k~%%5[ [4J5%%~kZ Z   . j4   '6 '764&"[ [5%%~k4JZ Z~%J%jJ4     <   %	'''77'7%'BB~%%%%~؜B%%~~%%      <   %'	77'7%'7%'7'B%%~~%%<B~%%%%~      j   7	7%'7''77 B~%%%%~TBB%%~~%%   . <   	'77''7BB%%~~%%BB~%%%%~     <     7'%7 QǜǜQT蜵      <     	'!	'QQTQ9Q      < 	    '7'7%'%77%'7'c~%%~E~%%WQ~~%%Ӝ%%~ӜQ     < 	    7%'7''7%'c~~%%~9E%%~Q)~%%~~E~%%Q      <     %7'7'7%''ǜ~%%~Q؜~~%%Q    <     	'7%'7'	~~%%~QT9~%%~~cQ    <     7!''7%'!'7ǜQE%%~~%%~E~%%%%~~   <     	'	'7'7'7%Q~%%E~~%%QE%%~~~~%%    W h8   !3#!&'&'&'767672%4_4WB!,/+,Y"llAXVVWA"V4c
c4CB!$"lmB##CA"%   +    53%#!5!26
<FdGa4_4d    +    4&#!5!2%#5dF<ġ4c
c4WFd4_4 - g   2653#!#53Fd4_4dF<
 M    !3#!"&53a4_4d4c
c4<Fd    E   %'7>4.'75%%~E`66`EY}EE}~%J%E£EY   o   %.>7%'.Y}EE}YE`66`E~%%YYE£E5%%     ie   > ."'7XZF¤D4$&X~DD~XD`66`D~&J$    O6K    .'72>7%7%XZF¤D$J&jX~DD~XD`66`D~&$    O K    %5!%'%."'> ~&$4D¢FZԟ#4$&~D`66`DX~DD~  i  e  !  533##5#5> ."'7eIXZF¤D4$&IyX~DD~XD`66`D~&J$   w     ''7327676'ܬ?C%I%]s*4[Hkk%I%@BHk,k , w   327'7%'  ؛kkH[4*s]%I%C?kkHB@%I%W  c  #   767%3 $2>4&'&'#'-1B4u}l@aĨaaT8>p4T<N?NĨaaĨ0!˺
0  c  #   767'3 $2>4&'&'#7l}u4B1-@aĨaaT4p>8T<N?NĨaaĨ0
!0  Lh 	   5!3#!#53u4_4EE4_44c
c4 
   Lh 	   !#535!3#?`4_44_4b
h4c
c4  Lh 	   !#535!3#?`4_44_4
4c
c4  u  h8    533##5#5'5!3#xd4_4I4c
c4   L  ?8    533##5#5!#53L`4_4I
     u h8   5!'77!3#!''7ulmyymh4_4myym(lyyl4c
c4lyyl     L h8  ' /  3##"'&'##5336762)&'&"!2764_4/XX/4_4/XX/_33334c
c49.XX.9
9.XX.93333   %  47675553%%"&6264&"-X.94
49.Xfff~X.x474_44.X~}Őfff     F n8 	  #!53n44
4
  F n8 	  #5!34k4(
4
  	  #53%
4
/4k4   	  53%#
4
<44  F(n8 	  53!3F44(
4
   	  3%%#
4
4R4  F n 	  #!#5n4R4
4
  	  #553
4
/44   u?8   #333!Q74(4    u?8   !5!333#c47(4        !5!!%#44        %3%!!544     u ?   !!###3Q44    u ?   3###!5c44        #55!5!447        %!!5!553474     F?8 
  3#!53!c4`
  un8 
  3!3!#u`44
     
  3%!!5!
4  
  5!!%#4
4  F ? 
  3#!#5!c4
  u n 
  3!#!#u4
4     
  !5!53!
`4    
  5!!#5
44` F ,? 'n   o  8     'p   q8     u ,n 'r   s  8   'u8  t       F`n     53!!5!'3F4</<7W
p܂  F ,n    #!5!!#n4/7<
4܂T     F`n     !5!3	53!n<4W7<4f
T    F ,n    !!#	#7!5FĂ4(7<
     Fy?  
  5!53!u4<y^
    F E?  
  !!!!#u6/Ă4܂    uyn  
  !5!3	5!n<44  u En  
  #!5!!n46U
4^   'q8  t      'p   u8      u(?   !264&#!5!2#!u%44%kk4J4ܵ      u h     !!!!5!3#44g4_4\4c
c4    u h    #"/&#"56323275!3#z`@oa={xx{=ao@`ze4_4D9Ψ9DF4c
c4   L J?8    %#"/&#"5632327!#53z`@oa={xx{=ao@`zg`4_4D9Ψ9D@
     u Jh8    %#"/&#"5632327%5!3#z`@oa={xx{=ao@`ze4_4D9Ψ9Dd4c
c4     uh8  ' 1  #"/&#"56323275#"/&#"5632327%5!3#z`@oa={xx{=ao@`zz`@oa={xx{=ao@`ze4_4nD9Ψ9DD9Ψ9Dd4c
c4     Ld?S    	5!#53-d`4_4c!
     L U   !!#53!?܂4_4$
q
  udhS    55	!3#!4_4`c10Pc4c
c4  udh     3!!"&63!!"!3#!U<ܛ<4_4`xU6_4c
c4    L 9 %  !3!!"$'&'##533676$3!!"?8oV:4_4:V(o81._o欔do
peo_/2    Ld?     4&#!5!2#!5!2!#53U<ܛ<`4_4HxU
    P ~   %"&7&63"3!!"3Ǜnnܛ@[[@I@[[@6nn6[[[[   6 d   2#5264&#!5!264&#nnܛ@[[@I@[[@nn[[[[       46 6 #4&"#4&"6nn6[[[[6nnܛ@[[@I@[[@     n    ' &532653265nn[[[[nnܛ@[[@I@[[@   #u   	u- 1'	`  '@  '       3 3  267!5!7632#"&54&#"!!#"&54632jc"]qiRA@Ae
&>bakTF<A=,{jT@OMJ&ekfSShWANHC    3 =  #"&5463232!5!6567!5!67632#"&54&#"!!!&>bakTF<AY;!?qiRA@AS''5&fSShWANHC^U~jT@OMJ&ALMC    /         #"/&#"5632327%4632#"&ۿe)__)eX=>XX>=XrD9Ψ9D=XX=>XX    {   +  #"/&#"5632327%4632#"&4632#"&ۿe)__)eX=>XX>=XX=>XX>=XrD9Ψ9D=XX=>XXZ>XX>=XX      %	'7%'11m,J+mU1L1wl++l    /"    %77%7	'711m+J,mU11l+K+l   j^    	7%'71M1m+,m1L1ql++l    / j"^    	'%'	'71M1vm,+m11wl+K+l    L h8    !53#5!#537'!55*`=_==_=c
c
EEEE     L ?8 	  !#53?=_=
       	  )#53#c
=_=   	  !3#53Qc
c=_=      	  	'7%'m,J+m9wl++l  /" 	  '7m+J,m9l+K+l    j^ 	  	7%'7m+,m^l++l / j"^ 	  	'7vm,+m^l+K+l   L h8   !53#5!#53*`=_==_=c
c
     3#53#53cc
c
=_=`=_=   u h   %#5!5!44c
c494_4    uhF   !5!534A
4_4     L ?   !!%#54c
c94_4     L?F   53%!!
A4_4    %    !%!!W7 r     %    !!!W7     %    !!,7r<R      %    !!cr<R    !%    	vdxx    !%    	u    !%    	!	uv}x   !%    !	x     %  	      # ) - 1 7  #535#5#5#5##5#5#5##5##53#5#5#5##5qrrrrMrqrrrrrrrtr$ttttrtttttrttr     J  s   353#535#53#5!#!!!!!53`տ LLLykyy_          %3!53#535#53#5!3#3#?o՗yyyxxxxx     J    !  32654&+!!53#53#5!2#!3ppLտR&㭑3yTyy  `V % -  3!.+32673# &5#5! %326&+?Y=<.ڙEaV;MaLMWST.-X`yÌM͕X^""3y!     `3    353#5!#!#5!#3#4'&#!53!3` R ydyyy
yyFydy    ? !  353#5!>323#'&#!534&#"3F @}wdEUkdy#x}_Tly5i#y     `3   353#5!##5!#	3#4'&+3` y-ٓydgyyy!yy3Fy    F   )53#5!#5!#3#'&#!533swd}cy#xyyly{X     L   35!#!!#4'&#!L{5{ydhA6  HF'   35!#!!#'&#Hb5wcwdy9+wn   Vw  %  5&#"326!#3!5# '&76!2*>>~M7_\韠\_7RO2[-,hi,-[     VV{ !  353#5!	!#!"&'533265#3VhgSWMLaM13yyBy""^Xy    L    ###5!#!#5!Lz͎{1}1y\yy1y    Vw  %  3276#"!53#5!6763 !"'&'>>~M7_\\_78΂[-,,-[      D   )#5!#	62#.#&ub=Iq;BQyy`PG3     	   &#"!	!#5!#	!	632	Sq(N}VĠBHGNϗGA"?\yyk>'   D   .#"###5!#362oB;44tZ}3Z<TC5Ffyy;L'   `     !3!53#5!#!53#VJ  yyyy
     F  '   !3!53#5!#!53# ?{yy5yy     `C  5  %676764'&#"&'&'&547673%62 O c7>*2BljUCJ2hh4*>:Y+gOOh2JCVik-HQ]oB!E6XA,~fpgnGNvX6E!>     ;L !  4&#"#5>323!5#"&'33265HHPEKpNU4|Y:qPLtsLNyok	=US̵     TD      &"2662."      ZedcdXZWY?3>~eED⸺+)     >  '   !#3!3!!#3!!#Jjyyyy'yy!2  Z1ht  T      ###5!##5NY[ pD  DD*D   VL C  7332654&/.54$!2#.#"!"'32673#".'&ؿn۲'
ĵhлba!"*,;"Gn{6ZG~^SF@F"%HbvrZd+78Ǹ,,gf]a474?(7#&mL1D.M]bTA     LV    2673#"&/&#!5!#!2~J{6[h>sf|{5`=d)7<pI1DTL}hAYN#--    Y 9  >7>7!!7!!!>7>7>7>7!!_b%D$/XWZ1N2/YX[1	(E-;(E-0XWZ2Z$|	3`	%l"^    VA =  ! 7!367.'.5<7!#53>7!>767#57>7!^0B/|_bs /XXZ1:r5y;;<ANn##@	8-] 
\!7Q     bB O  # '!'!7654'3&547>7#!!!>7>7!>7>72??/  0Of/,X,[2/3n-N3		V-N2.YX[1#&g@Nn?#C?u?b_opo	
-a-a
$y#     L  >54#"3>767>3 #"5467>7>7#3>753#U
f(%	
QQ>&A,0&=h
	̳'F-EG'uPQ)I-.+	.>QQ&> P.BB{#[
;B.     bD 4   53#!!!>7>7>7>7!77+/XYZ1%H$`s
+I1	<+I00ZX[2D7yg2' X#y""B!   ZCX I  !3$4673#!#53>7!>7>7!>7>7%23#[/ZY[1-W-0YY[2%F%ns/YX[2"0YY[2 Ae:CB&sg]z#y#}g     Z    <  %>7!7!465*"#!!2635!>7>7%3#$#$/YY[1%H%`0XY[1**-.Q50YY\2oXYkE5]zr"|g     Z  U  D  %67!7!.#5>7%6?>7>7!>7>7!3#%H&/YY\1%G%/YZ\1-X-/XXZ1C/,Z,[20YY[2r
аP\k]x$x#}g2   k   )  !3#!#53>7!>7>7!3#/YY\1nZt0XY[2s3X3g]y"|g    VC 	 2  %67&=7!>7#535!>7>7!7%G%]a&F%0,X,[10XXZ2 бNy.N>s?Z?@q"s   M  L  J  %67#!7!3#!#5>7!>7>7!>7>7%3z%I&/YZ\1%G%/,X,[2/YY\1%H%ns/YX[2"0YY[2pаPnkg] x%x"|     ;  >7>7673#"5467>7>7%!!>75!Y(117m72 A 0$*,SSV.-RSU/FAss$T

bU',5$a4_^Ll: 	
;`		A     V   0  >7>7%3#!3#!!>7>7!!688;!`c m
]a&H%m;jAt"|g2g Y	
   ZY C  )7!7.'57>7!>767#57>7!>767#53>7%3#y/YX[2/WWZ1F
/XWY1&L&v/YXZ1%H&rsjj\V]
V]|g     [  k 9  !7!%7#53>7!>7>7!>767#53>7%3#o/YX[16_;3s!3b9/YY[2%H&rqk;	 K]	EX]|g     [A @  &57!#53>7!>7>7!6?>767#535!7j0,Z,[2 ::="XrA?pD	0,X,Z20_0A		#L#	]	*Z*'ZFC7o7     Z  V D  !3#!7!#53>7!>767465#535!>7>7!3#Z]a%I%p/YXZ1	t/YXZ1-[-0ZY\2sgk][[[Fq"}g   V   -  !7!465#535!6?>767#53>7!3#/XWZ1	/,X,Z1&I&rqk:QQZFX\|g   XD  ;  654'>7#673!! 5.#53>7!>76327zNQ+R+KKK^;pop<H  	 ab!	#A~		
ft$I$%d\1d!     Z;Qg K  &=7!7!.'57>7!>767#53>7%>7674&5#535!70YX[2/YXZ1	C/YX[2%H%x$/YXZ2-V-;n_k[T]2Y1\<-Z-~  Dp  " Q  >54#"6?#>732?673!&/#"5476-.'!>7632Y$,T,<<x?R*ZB+U,|4^\^4riNN&(U,t@}@(*cu
	aTG
SHZ/tXTf{8N360

*/0    YB C  %7!&5!#53>7!>7>7465#535!>7>7!3#d+MLO-SK*LJN,shPU/Q*LJN,

|Rhek4m%Q$Y]ssXX[7*[*k    V   ,  !23#!#53>7!>7>7%3#/,X,[1&H%>s0YX[1!p~g]y!|g    VD .  &=7!#53>76?>767#53>7!7v/,X,[1q!/,X,Z1&G&pDd] U]*R*   VD 0  !"'77267>7!#53>7!6?>767#53>7!Sl$E`Hk"	/YXZ1r/,X,Z2&G&p7{J.-)]U\  wC .  !!&467#535!>7>7%3#ݾ/ZY[1#E#
0YXZ2"p%L%&P-Fi[?n#|g   D* *  )!47#53>7!>7>7%3#G/YY\1-W-q"0XYZ2	pdr#4~]x"|g       E  >7>767!>54#""547>767%#535!>7#>3 3#T"\8s83<_90g-+4i42		
_qd<9TD21/	slj0)A1D^^'<[? M-Rf    D E  !23#%!&47#53>7!>7>7!>7>7!3#]a%H%?/YZ[1"C"p0XYZ20XYZ2
pg{PMռ[e]y"y"|g    XC C  !"&'.'!3 7&! 546767"&#53>7!>7>7!23#!3 cg[/ @ A0XY[2	y>u]a5cs+7AÛ
4[x"f3}}
X    D 7  !77!3273#467#53>7!>767#53>7!3#/,Z,[1YAr	/YXZ2&G%oo
k ]U]|g2     [Bx$  >  >7%!5.'%7#53>7!6$7>7!
7hgi9"!""52 3]2--00s!+v0/0

*IFI+Mjj%mm-] #G#/7  ^   O  %#!7!3#!!!>7>7!6?>7>7!>767#53>7%3:0,Z,[2]a%I%o-,0	=-,./,X,[1#^b&I&ro2kf~

2&c			$v$V[|   YC +  %'!45!!>7>7!3#נ/XYZ1%J$mm]F0YWZ2	 qВO~jefq"g   t )  +"54?7>767676#"!!632*/
B?!?>=96BSAv17 	:	
4,b$}
     VD 4  .547>7!#53>7!6?>767465#535!^\
/+X+Y1q	/,X,Z2-W-D`Y).']]\\>$    WD 7  !7!&=!#53>7!>7>7!>767#53>7%3##@+{)I/s$'E-,'G-&L'wqSҦ	]	*\*	e]|g      _  >7>7>7#>3 3#!67654#"3#"547>767#>73>74&5!!wNc.1h0/7.X4,R&=X:Mv&#A#(#WU",7ece80T6Xj2,[D>{TUmf!1#C\jjX
   \n+{   %  #"$54$75367673#"&54632+|id;	ypNOppONpDA""-BNppNOpp<\t      {@    #"/&#"56323274632#"&ۿe)__)eX=>XX>=XrD9Ψ9D>XX>=XX  :7   !#! 7x  :   #5!!f8x&  7   3!!bbx      !53!cxb  T  $  %#"&546320#.#"0#5&$54$32pNOppONpy	wnwziOppONpp͂+"    Li   X-Dj   `  `X   J  '+     
L' ,        n'   %  !#3 )53!3264&+53#5!#3~jnNNؗ+yĕy5}``y5yyy  y	  (  %#!   ! 3#5!#3!52#"Syx׽y"ͷjkη yyyyEHIE   ZD  "  )53#    !  3#5!#3$&"32o>0Ɨ\Z[pqyV+)hyy˝     `  
c  "  !53!3!53#5!#!33!53!3_z?3E{}#;y"yyyyyy1y  l D 	 7  5#"3263!5#"&547!3!53#5!#!6;54&#"#5>3 &cjMORdbFnԗo}zjsq_q	NldlyTPXByy5yyT?{Wc""  V>   T)D      ;    #533мtt     ;    #533t     ;    #533ht     ;    #5334t     ;    !#533#t    ;    #53#3;Fмt     ;    #53#3;F     ;    #53#3;Fh     ;    #53#3;F4     ;    !#53#3;F    ;   !#!!vF      ;   !#3!!F̼     ;   !#3!!F     ;   !#3!!Fd     ;   %!!3    	  #5%3'ϋII   	  37#%5DiII   	   462"&3#5FbGGbFKW+??+->>)kk     
   #"&5462#53G12EFbGJW+>>+,??jj      Sw  d    `V3 $  353#5!#!#5!#!"&'533265!3` R SWMLaNyyy
yy""^Xy     ?9
 &  353#5!>32#"&'532654&#"3F @}<Iq;BI:EUkdy#x}_TߣPG^{+i#y    ` ,  !53!#!#5!!!"&'332654&+5!3sgȇdpvyB	yuwTy((Hfy    1`q  2  #53!!!"&'#"&5!3267332654&+5˚bQpv ۜN,:@>
N"6ByJwTy((5uDVZ@    H@ -  4$!2#.#"6533"'32673# $54%&K:vy?yt[|֡yv@((|Oiavxj((̍t  ] (   $5467.54$32#.#";#"32673٪vƄyXvmp{|4Bk&Ţ'u##{lvx캀x     T    7533267!5!3#!"&	!΂MLaKISxi'^XsZ"h  T9'    35!3##"&'53326=TIb<Iq;BI:isZ}PG^{}h  T*  ( +  !"'&547632'6%533267!5!!!!"&	!>),,&AD1-*dc@MLaKIdSxi G61+8B8Y(Bx0.^XsZ"h   Tt'  * -  "'&547632'65!!!#"&'5326=2 ##46($"PO3Ibu<Iq;BI:i8+("-5,G!5_&%sZ}PG^{}h  ;  '   #5!!53#5!3!53#5yyyP'ߦΆ{z{y5y    X-D -  332654&/.5463253#.#"!"&'#`qlsHjTAqq	lo@SѠc?qHw}KF@E%*&mnEB6>%5#      
   !  !533	33!53!3!53!3!_z23E{5IE{}/#;y\yy1yy1y#;     TD 	   H  5#"326%5#"3266;54&#"46;54&#"#5>326763 3!5#"&'#"&cjMORdcjMORd]PESzyzjsq_q}INfq	Fn5=9|NldlYldlf
?{`?{Wc""5yTPE%>    	   %  !533676   ! '&'!3%2#"_z2p#,Sm5}#;y\3*ddhy\BKLB    TD " + 5  46;54&#"#5>3 63   !"&'#"&26&"#"3265Tzjsq_q>NY|
p[Z\\cjMORd5?{Wc""ffMONN< ldlY   	+  %  !#!3!53#5!#326#5!# ! '&KX鏤TrP꿮έi!;Lyyyyyy ݓh   TD - 7  46;54&#"#5>3 3265#5!3!5#"'#"&#"3265Tzjsq_q	BXkc?}\>|cjMORd5?{Wc""kyRy_Tk*AldlY      =    !533	#5!#!!3_z2}ƫ}#;y\O8yyy  TD 	 ,  5#"326#5!#!5#"&546;54&#"#5>3 cjMORdbH{FFnzjsq_q	Nldl5yyRTP?{Wc""   =     !3!533!#5!#!!!#w1Dz2S4!}0iε#Vyy\yy@y#x>   TD 	 1 4  5#"326!5#"&546;54&#"#5>3 3#5!#3!#cjMORdFFnzjsq_qn{n^Nldl.݇TP?{Wc""jgyywV V  !  #533	#5!##"'5332?!3!z2sԆMj3 }y\yy<D^Xb>;y#;    T9D 	 ?  5#"326#5!##"&'5326?"'#&'&546;54&#"#5>3 cjMORdb2=)0s1xGqCCAP(9\>|ljzjsq_q	NldlQyybubMJGck*AVV?{Wc""  Vj   TD   J  3   ?      `  &   !53#5!#%!53M Lyyyׄ    F  s   %3!53#5!%ۘodyyym6x       &   '&#5376 3#%276!!'&#
ֿּ]R

R^P]^Pθ4.εѡ̸y    2D   '   '&'#53676! 3#%2767!!&'&#蠐p.)h*.['-qq.'w؀wሕq`VWaR``R     V>   &      6    '2#"!2#"TS\ddUBKLBBKLB   T)D   %     !263   !"''26&"!26&"?>p[Z\\p[Z\\+)ttuuq      `V@    3!53#5! #:`Ͽ@	{2^yyy6p     /Vu'    3!53#5! 4#xb'\yyyN   mVs   #&#"!!!#5!6$32s\}Q	x}yywp  ;VLD   #.#"!!!#5!>32LqPLt)4|Y3US̵\yVXyok	     -  @   #3!53!#@ yyyu    3' 
  3!#=!#,ywx    mV   #5!>323#"&'.#"P͡O_ɝbzVyaUycfN   FVD   #5!>323#"&54&#"ݗ@}V[EUkdVXy_Tyco]i     mVs   #&#"!#5!6$32s}Q	x}ywp     ;VLD   #.#"!#5!>32LqPLt4|Y3US̵9Xyok	    $
   5!!32673!  767$M3jܕ+;IL(Nfeg     "'   !!32673#  7#"u&>zk&Ș'y'dπx&   }   !#5ww     s 1 0#+ ?      Z'   353#5!#5!#3#4+3Z
y$dmyyyyF?7By     FD !  353#5!>323#'&#!534&#"3F@}wetEUkdy5y_Tly5i#y 
  3 !  "#6)#!#5!#3!53!3!53EFƛzAR   \Y[fy
yyyydyy     < # '  53#535#5!#!5#5!#3#3!53!3!5!<yyyyywyyyyyyyywC KeBBeeBBeK CCPCe   5   1   26&"%4&#"'>32!32673#"&'#"&54632h99:2:91}/uJ4MWHZiS}-,UɱP~jhjt\Zl
,*rdC@`a*,*,+   F  H'   353#5!!#5!#!!#3FV`Wy5ya&yyyy       N   )53!#3!!#!#3N{3yl`y     3      )53!"$54$3!#3#"3&Rpyyjy  `     #3!	!53#5!#3#5VT ;yyByyysy    `  `m   353#5!#3` y{yyy      
a   )	!	3!53!	!	#5!#ݲ2GBH#Ι?Zyy\yy  g= 5  #".54>732>54.'.=!=W葏T?iNym'S[Qk@1Pd43_J-NC%=O*IT5{ܦbGՏB{p/>KYi9QTWCAC[e'1&JJK%A  rH  D  4.#"32>%#".54>7>54.'.5!;eNSh98iWRe8ea₀a,Ksj'&L>'@9/aSEgLLe[OQJYY?{cE/G"-	)@`H&
/<L2(b@X   g  O  4.#"32>%#".54>7>54&#".54>32`1VrARZ04^QGqO*X5]~MZb7KpUvJ!TK*F3	4pzazDA|mQ.+ro65ovok4*eeiG$$Fg\e1'NNL$WT, 4?#A=pU21VtC]A0CYp    r  `  4.#"2>.#"'>7.54>32>32#".5467.#".0Q<AZ97WzS3UvI0dc_+9zlcA:[h@]I9Mdx͕TWuzԟ[>/-fG?R/-g|<j?Z~==ˍd'3q%E6 .I5:G&pLPa7.;@S[hxS)Fƀޱ&(7PpN   g& ?  #".54>732>54.#".54>32&Vވ^+GZ_[$!$z=^@",I\0+VE,/= n<qY5Qn}՛Xwr8Hi8]L:)f(<S8=aE>S14M3(:+=XuMn^*6kf     g= W  #".4>732>54.+532>54.#".54>32=^}G~]7AnN3#,Me9:[?!'DZ42;#E8"8S73fQ2!j7T9UnA}nR/@f}=OrDzI3Lbx}fId9HV3Sl@ WxeW'Kb<aE%,VI!##0BW;ee3+AZsGa`>Eo    .  ) b  4&#"32>4.#"32>%#".54>7#".54>323>7:.#"uME4(&4%8$#Ca>:aF'$9N59U=&e-QrUa#:M)Vd7IzVme/q.`	)O))Gf>dW(J<>M+,Mw89{ŋ=yo^F(*IctMkyS+bJ{j)6^JYQ&Cct0;S TP%k    r  M  4.#"32>%4>32>32+532>54.#"#".4eUPZ,/YJQd6?ࢅG$STN_fE$bxqi/`M0 /;E'&4>1,>穜ߎCrjjslNwIH%7$IhQ#Ҟi<
!=3oܹS     rH ;  #5>5<.#"#.54>32H(HpR9@&:P6<T9!&:)UuL)9\wx_;@a({%p}^7:hi@z_`ƹs]Ż}JJ   rH O  #".54>732>54.+52>54.#"32##32H/StRtݮj#;MTV&.	?fKOd9"7E#*`]UA&$UWQsc,CoK	mKm[8;|(J@6+	L/7F3R~U,0qpI,?MX0(9#->&Q"IsPOrWC R     r
   #'2>54.#"!5>=4&#"!5>=4&#"#.#"'>7.54>32>32>32
7^{><^@!!8H(*F4\a^i!~mi%;- 
Lk_i@&xO:$TZ]-^d8/Qm|A(]\SR[Z&%YZTN[b/`Ýcr`<D~odp=9_E2P/AA/P2vv2N/AA+),vz+Ibov8ڗ_:&;ZX,UB(;_D$[y\˖e=.>$'B10B%$>,Q    rI  H  4.#"326%#".54>324654&#".54>3 0Qh9;_E%*Lj@{L/RpEc4YxG KNK 5aK- &.Ohsx7>7m(8qp}r6ӝcuR3\aiH%STNU9-;!0++:aN<'     k  W  4.#"32>%#".54>3232>7#"&'.#">32.Ka35dM/*If<$C<2$f,PqYTpO,3fcEtX=CH'DCTf:@>4-&!
%QNFJ{\5mZ2lxi&(Gplȓd<:aǂnd/$$1N-T@&(		1Q<9G>F9, ?`   s \  .#5>54.#"!5>54.#"#.56>32>32#?Vgt=1IA@'2YUV0"NMG6 2Q;0L5"}&BX18E&!6DD?8ytiO.Bʊ8l`SOX^-ԗSޫfT(8,Kf?0W햔h*NmB0/O,AA,P.BmN*QwĜvS1Qq鍽F 9N.-N9!g    rH P  #".54>732>54.+532>54.'.=3Ha₀aBsX	'Ea;Hc>.J].+TB(2Pe3JuI*G]3?~pT1Bh<Wn>ՎGEHu^J"0960hT#,_jus81J20;#4YI.0	(@\ALkI,Py  rH S  #".54>732>5#".'#32>54.#32>53H[{g@kM-
?hL6bK,4>D"!B<3%J;%AjNE-YM9 )3J1:~;NZZCCu\SmF+I&/>+YxJBmQc;J\76dS;8U9!4>$RG.- ,     r l  #52>54.#"!5>=4.#"3#.54>3232>7#"&'.#">32>32<riCa>,P@!RJ2=U\:T72Rl;ry?#JtӄL9GmY!>wy|A<zB*I Iw^F<V8pgZ!!Xdl4rʙYpj̱)Kr^{H=iQzRXQBBQXRzRj<H~bs.%ryQ$-g>X81Sl<"5I--I5?     P  #".54.#"#54>3232>54.'3.54>3"2WvJLwY2	CiJO}W.%GjEFe?,86)+Y^8.%15q]<3o_= <XnK%)/
0%.Q=#.ZYyb*$fRoK2.5B,3gS5)%!"Nh  rY  q  4&#">%32>54.'.54>7.54>32#"$&54>7#"&'32679-""%6lmhU$*WZ>>QUda/4L2 @5!/TrCHzX2,F0؋A,V{o]=bE/U&X/$>4
-"!+	
 )~Wkyxo,NLFq!*s;:`
;Vj8,[VN'7E*F^99_H'8,%&y{^c8zrJ+jn	     : l  #".54>732>54&#"!5>5'.#"#".57!32>7>32>32JMsT/@xm),GY-A[=$#/=E 
8-)'3F49aG' 0	
5LY*91+/;I,Up@tҡ_ ?[tQRwPq=YrA_U'1AGH!ZIAI7GNF@@FNG2BL DW1!>X7OZ,
$-."+cx     r  n  4.#"32>32>54.#52>54.#"#".54>32>32#".56Q6>S32S><R3F~fxF
,YOQ]0/J40-0
-Miy@FnQ.R~*ije&"OPIАL8aJIb9o^wo54lsxv;9sWVe5DhJaK1m{\zH*"Qai/YmM)*NnYvݪg1#!1?|xczW<c]_tA3gi    rG G  #".54>732>5.#".54>325.#'!GPֆL`8&C[ju;4&6Ui3F_:3ZWT-;/$2B'GvRqP;23bЈC&=YxMImO5#m(>[?D\9@iFQ@U2' 0&LSW,IiD =H    rt a  '>54.#"!5>=4.#"#.#"'>7.54>32>32t-l/'9'3P86Q76U;7H+,Nj|E_sFy7O_3BV9UsQ-Vv7eXIVdn8rJ]O(B=?IX9lx?,Ok?-R*BA*S-?kO,/sr`I9%Poq;`C%{:3'	 _wQ@6I)(H7 >     rE =  #".54>?32>5#".54>7332>5!E`{ۥa(CZ2-'tBlL*?JlȚ\$Uh9Z>!,F3!HD>.SюH=p_*UL:<{K7V=4?6ibR|j/0YiX0jZ:-<DI"    .U  V  4.#"32>%#".54>324.#"#54.#"4>32>320Ne5AdD";^C<mR1Oa䄇Zeu$QRO"(30$.<!-&;_w<.UL@>HR+Uo@T`uB-gyt5&iCΏLUݙP#/"2,O@SSDO)3-I/`i8)56)9aF     k E  >54.#">32+532>54.#"!4>32B0IX(8+<\FuW26Zt{x2^bA?.'E^75gR2Io1nkbK,+?(a6' 1 9T6488ZlkpL&0xəxd+4Si5n+$4E,'=3+   s b  #"$.5<>454>72326732>54.'>54.'.537`Ni=[>4;E(8<%>&)6]~qN((AT--C+'0 =02>!1bL0I|^DpG>ob?c	,;@;,	WD%3#	, i˂vw82jtN_8TT/Ld;$:0)4<E*);,"3>N25_RFAc  rH  6  4.#"32>%#".54>324.#52$C_;3`J-#EeB>^@ e`~_nM(2XwJW:"GlJY	z4#emw?8i<qQ4YzJffD">3X<M,5ga   B V  4>32>32%>54&#"#54.#">32#".5%32>54.#"@oU+RH>@LU.<w_;&,!</$02("ORQ$uڨeZᇄaO1Rm<C^;#CdA5eN0Fa9(65)7g`/J-2)ODSSDP)2"U/#P݌UL΃Ri&5tyg-Bu   rI<    .#"32>7%#".54>732>54.'.'#".54>32>54&'#"&'532>73%@E>"CG@/
/?H!,XG,<d:>~_9O{I1"-(CY1:eL,2=6*=}?FjH$$IpL?K.h6U.N;5-#	+.%+1Q0U#$/M@4CP_9WjJ/,C^xJPhLl4E]AIe?>\?HnWF :>A&26*EW,4\D'C6=p31%%ZXCD(42>2!FA7ϾKVt      F  32>54.#"#".54&#"#54>32>7>7M@iMJf>=cG5dP0d}P ElLCoN+#U.D_C+=xjO.FtT/PYh)%Ca<LR{5#iTo@?p\*
"2:<[     i   #".'#".52>54.#"'>7.#".5>32>54.#".54>3232>54&';dLl{\'6nha([^/&BgcBrT1,5"/8-"}2o+7@FH#'[Y*L:"/WzMY'(]ZT@&"'!0=<>]i,CuW2Mޒ!"&.7"3$OU=VxL"h?iK*z0
!,4EpU&VTL:#1Tp?	3&-HY,5eN/+]Y>C~nQ/)>J'[^\(=iN-^$/?Q5?2 	>R>DW1'SXPsc->zJ 4%]S/Yf~     rG d  #".54>72>54.#232>54.+2>54.'.532G`}a8[w?F
)Jg|\<#,.+	;3#%7@{B<*)R{Qkg3QV F2Qd14iR4+Lg;;nT3Ňv5-m<`J3S*=._~L "KyWIhG*V=6-2:SQ!:/&);gQ-B9]D$;0'!/A-/A. D[s     )  w  4&#">#".54>3232>54.'>54.'>54.'7-9#+@R/]0A%&A01A%%B0kVk=<tq.j 8JTZ+I}[393/1+
5::3/1,
:;6XAHBr_E'KG0ZTP.@Z*K?4-6?%"7.&5FZ:WS)9]y$QQtZJ'JikC%%9D.K6 
#$!w{!-5+	!#Ud"6C!ghR,==Sens  rH  E  4.#"32>%3.'#52>7.54>32;gQ3M:'
8PX!,^N3d-ATe;+UQM$vg66czu#NTV,]c3,QqUWpP,@AkՊV\?~m(	1E--E/	@\O"#P    rH V  2>7#".54>?32>73#".546732>54.+5ah<
/y{o%cwB%81:4Ho`)5HU_0mY&g{OsS/µ0?`ADdB 0Qm<8SH;/:eM%4)!h3$%*Ki?աsP3(gzLڅ:1MkU2|CRX"CtV22`XUzI   rH i  #".54>732>54.'>54.#"#".54>3!!"32>7>72H_vb!Qf;.Pj;3U=#2ZF:;4?Y7#1/yAB@7\C&>lR\"9*& >GN)/__^-<dH)NnE no87kf8aWP&w%-2+Mc8"FiGlW(
.E%@Y50@&3XB[xE&=->/DqUx<Bd    r   M  32>54&#"'#!".54$%5&$.54>323>7'#3>7tg0!?\;$B2[]5ZB%0gt7=ޟV_]܀ˁ<8-0*37.0*
] <]@AY9"3#>@4XBJb<51a]3gm]`1(Xc=   r  V  4.#"32>".54>325!>32#"&'#732>54.#"3@(NC!OC-*BS*,F0gJ~7CI#===у<L:u:=ɋ#=Q-*C/-Mg9֔MDpR:S56xNZ'h_"kN|`N 0B'
QpG <ߢy6    D  $ W  654'>7#67776?67#535!>7#>323!+"5467>7>7%#?>@$+++?|?Cqd39<x*R*DE/}5`^`5XX
pY&,#Cee		N((#W	[?2Ô?'=<bw@   T " *  '"3     767&'&547632767 26&"=}%LY><N:bLC-K>\[Z\2>;+8#_+3G.      t  O 99KTX  @ 88Y1 
 <990 KT	KT[X     @878Y4632327&54632#"&tW<<W'3XW7&W<<W<VV::+*::VV<     f   &462 &54622>OlLj[OlL=8)|MM6bR6MM}((    ?   5 l@3+5
A6<<@%3$1+-,/45$ <<1 @/	$(# 04,
3/<222<2<2220!3!53#5354632#.#"!54632#.#"!!3!53B:TNpJFPHTNpJFPH:yy5yNLsNLsyyy    ?   " l@4" 
JH3 5	F5A#<21 /<2229990@ $$/$$$]#.#"!3!53!3!53#5354$!2pxi˘avVZVRyy5yy5yL   ?    a@/ 	J
H5
F5 A<29991 /<222990@	 /]4$)3!53#"3#3!53#53$2ӘXseyy+Vyyy5y  @   ; |@3+5
A<<<@%3$7+,5:5$ <<05-25351 @5	$(# 6:.2,
19/<<222<2<2220!3!53#5354632#.#"!54$!2#.#"!3!53!3!53C:UNpKEPHavpxi˘yy5yNLsLVZVRyy5yy   ?   6 u@/3.+6!5.%&"A7<<@
+5 <<Ķ5
51 @  #6.2+*
!%6	 /<<22222054$)3!53#"3#3!53!3!53#5354632#.#"$2ӘXD:UNpKEPH'Leyy+Vyyy5yy5yNLs     A 2  3!53#535476!!32673#"&5#535&'&#"B:p~Lp&,:@>ڜ	"%Xo1P'Ryy5y[g
3myuDVZyQ"&:\^    X V  7332654'&/&'&54632&74$32!!32673#"&5#5354&#"#.#"!"&`qls%#jIJ.1FGC(,:@>
ܜPQ:g.q	lo@SѠc)w}KF@#"%*LL`))+`pyuDVZy]ewX-mnEB6>%5    2"   &  	32654&#"3>32356$54$#"tBpNOppONpy	wnwziB>OppONpp͂+"   L $   `  R %   V &   `   '   `   (   `   )   V3 *   `  3 +   `  ` ,  jV{ -   `  3 .   `  s /   V  { 0   Z   1   V 2   `   3   V 4   `   5   L 6      7   F 8    R 9    	 :   
  3 ;     <   L   =   T D D   /F E   TD F   Th G   TD H   ?   I   T9hD J   ?   K   F   L  h9= M   F   N   F   O   F  HD P   F  D Q   TD R   /VFD S   TVhD T   ;  LD U   X-D V   1q W   /' X    ' Y    ' Z      ' [  9' \   H  F' ]    L   `  R   `     <     `     L     `  3   V   `  `   `  3    L   V  {   Z     q  #   V   `  2   `     V_   S              V     
  3      A!   \  "   )     TA*   V'+   2T',   T-   coD.   FUW/   FV
D0   T,1   F !'2   F  '3   I  G4   9V'5   F  <'6   FUW7   TD8   F  '9   V D:   TU`D;   T|'<   F !'=   F<'>   `V'?   9D@   VV.'A   QI'B   LF   TD`   Fx,J   d*[   TV0N   R D\   Fb'O   `  U  BPV   `1                    T  =        #          j#    o    Zf   !#f s   |@	__ 1 <20 K
TKT[X  @   878Y KTKT[KT[X     @878YKTKT[KT[X     @878Y4632#"&%4632#"&X<;VU<<XW<<XX<<W{<WW<<VV<<WW<<VV    Z'  8 1 0@  / /] KTX     @878Y!#פ    f   @" 	!	 !99991 99990@\		
			]] KTKT[KT[KT[X !  ! ! @878YKTKT[X !  ! ! @878Y54632326=3#"&/.#"ld=P	H$)1nke"C593)1{'!	2,z3+     8 1 0@  / /] KTX     @878Y#   y  J@	 91 290@  / //	] KTX     @878Y]!#'#f4ߤդ   y  P@	 91 <90@////] KTX     @878Y
]373fߤդ    T   #."#>32{oq{7:;6    T  @@
  1 <0 KTK
T[K	T[KT[X     @878Y332673#"&{oTTq{7:;6 m  w	_ 1 0 K
TKT[X  @   878Y KTKT[KT[X     @878YKTKT[KT[KT[X  @   878Y4632#"&mW<<WW<<W{<WW<<VV  !    !#!#פפ     #!#c   Fo'&        F  '   %3!53#53#5!3#?oyyyfyVy1y     ;   4632#"&pQOooOQpTQooQOon 8'  "  # 54732#5!#.%&+"326765WEs~.+n0
q	&N2TySiOK}R   9'&   }   FK'&       Z9 "  353#5!#5!##"&'533276'3Z
Ub<Iq;Bc& myyyyNWPG5.7By          <>"wwvuuvu  IA/J'wX q >  IP/q' q  wc  AJ' q >X  IA/u'wXx  IA/u'wXz  \u'x q   [\u'z q   X?$J' q >yS  CA5u'wX|  I?/q'wcyS  Cb5'|tw  X?u'ySxh  CcIo'x"y{u  Cco'zQy{u  Cc5'y{u  X>$'y~P  h>u'x~P  h>u'z~P  h>	)'~P<  Ccn'{un   d^q&xJp Z  a9hD # . :  $!2!#!"'3 # &547&547&'4&#"2632654!"{mUZK"6w[5)DL\]KKKFaơ |y])"H~[NnTNyfSwwuu"#7N;R   Z   %533265##5!#!7+!"&MLaN S'^X!!\yyyZ"        )3!	!#!{{/h`L    TD    %26&"   !  ;#"&p[Z\\q?>b%xy3T q+)\#'        '    )!	 'R`  TD     #3353#526&"   !  ukklkk5p[Z\\?>j>jjjp q+)     i  +'     53!3!#!##3353#5y>yDyyMkkkk0jfjjfj>jjj   S  C'   	!53!	!#5!Yj7jj4' j   i  '   #  !#2#3!535"$$35#"26&(Ǘo&ǗGDDGDD'yZիZyyZ+ZxXX%X+X    S  D "  %!53!5>54&"!53!.54 32 y a}}_ yjkѡQ̝ϻQ@
        &@r	{   991 /0#"&54632!53pNOnoNNpu1NnnNOpqJ    \+  " 7@!r	p	{# !#1 0#"&54632#"$54$75332673ZpNOnoNNp|izxmw
x1NnnNOpq""+  \+R  u    1$' '  4&+5!"3!53463!!"&'53326{.\o6==x7XDL\wGyyySDhh    F  N@$ 	 vsp((((# .1 <299990@	?]#5!#326#5!# !  {έ{ſ\yyyy &U    X  $   #  353#53#5!$3#!'376!%&'&+m Զ	olfIZlyP
yy.}    h  & /  %3!5#"'&'#5367632#5!3#!327675&'&#"ї-praarp-'-mi0//0in,&yySQy܃QSx<yLXSQyQSXL    *  .#"!!3267#5!# '&'#53&5 !2-ҿKhT;ܣ*6 Ʊr&&xNLϚi@A  9hD ( 1 :  53676325!#3#!"&'53326=#"'&'!327675&'&#"arp-jsq-pr'-mi0//0in,&y܃QSyy7!!ifySQڴLXSQyQSXL    ^5_<      +    +P	)              3Pp                f        +    19 Rs   h/ -  R o    `    T    j o  5      5 `^ V ` ` ` V ` `j ` ` VP Z V ` V `   F55 
 L          / T / T T Tq ? T ?
 Fh F
 Fw F FV T / T7 ; X 1 /   H% %       L '/ ?    =   R o       V Z Z 9      =  X X X Z \555555F^ V ` ` ` ` ` ` ` ` XP Z V V V V V D F F F F ` F/ T/ T/ T/ T/ T/ T T T T T T T
 
 F
 
 V T FV TV TV TV TV T V 3 / / / / /5/ T5/ T5/ T^ V T^ V T^ V T^ V T ` T X T ` T ` T ` T ` T ` T V T V T V T V T ` ` ? `
  `
  `
 / `
 F `
 F ` Fjh ` F F `
 F `
 F `
 F `
 F  P Z FP Z FP Z F ^ F F VV T VV T VV T	q V9 T `7 ; `7 ; `7 ;  X  X  X  X  1  1  1 F / F / F / F / F / F / L H L H L Hq ? )
 ` /    ^ V^ V T X
 ` /V T ` V `Pq= V* #X ? ` J ` F
 F Iw FPJ F V UV U	 U U
 / \  X S| 1 $ 1  L 3 \  L HA GA {A {A h  ` EJ . /\   \  `{ `
# T	i ` ` F Z
5 Z F5/ T `
  VV T F / F / F / F / F / T5/ T5/ TF T* V V T ` VV T VV TA G G
h `{ `
# T V T	 `L `P Z F5/ TF T DV 35/ T5/ T ` T ` T 
 `
 ' VV T VV T `7 ; `7 ; F / F /  X  1  e ` FS T R f L H5/ T ` T VV T VV T VV T VV T Fa F 1h@ T@ R5^ J X HH `a ` K ;5 ` Tjh V T J7 ;/ T T T / T L T T T TB n c~ TB T Th T T T  T / F F
 F
 J
 FE B B
 F] Fw /w /w Fi F V T}  S` T ; ; ;7 ;7 ; F F F F XhqhR T| F 1 /o T F! FA F F  H H G hh Th Th T\  V F T T F T  Th Th T T	o T T 1 1 1P ? F] FL Z ZSS, Z& Z ZO ZO Z Z7 ZK Z Zj +       Z Z          B    Z  B       # o# o   m   =    W   V Z( Z Z Z            m             Y             l    ;            !        m  m  R    Z  b  D  g    r          e    m      >    =                            @  r    P            j     m          p; ` Fl 7 Bj j  Z F  T T T 5j Z  5 KJ 5 ` `5 < ` L ` V ` `5 VP Z q V ` ` S  V5 
N  \ `( T c F F F( TP H 2V T c F FV T F F I 9 F FV T FR  T Tb F F= `C  V Q  FV T F Q `V T F = = T F= d VV T^ V T `8B kG ^ {V \= dR  Th V T W ` /^ V V  U^ V^ V^ V ` `6 `] V  ` `j	 -
 `G ` `~ 2 `  ` ` ` ` `
  ` ` `G ` - V ` V ` `^ V ~ 2 V5 
 `N ?
% V
X V 	 ` `] V
L ` ./ TV E F FU F T  F F F F $ F FV T F / T B 7 S   F F F F#  Un U W4 l 2 T T  F T X
 F
 h $ F ( F F  F  	 ` l
   `
a l   V8 TS  S   c  ` F V < ` F
   ` F ` FG J ?T   ` F	W ` F
 `x F^ V T  B 
1  - u Pm ? FH ? ? `
   ` F ` FN ? F
 F / T / TF T ` T V T V T
   ` FA G G ` F ` F VV T VV T VV T] V W~ 2 ~ 2 ~ 2 N ? F ` F	 ` U ` R - $	 - $ V T9 F F& ZE ( F  F F	 F& Zl d d	 d  ( Y ( 3 F dO  F F (  F FO (w dv F  F Z!j V Pu  X     
  Zp ( Z6 xi d 2 x Z ZF Z$ x <0 Z F x 2 Zx x d  (V  dl %y (Y y d ( (R ( F x dR ( Z n = 2  Z $ u| u u u@ u u U	 % U ui uh _ u	  U7 U uV u u  u U| u u  uD   ' u  u u uj u# uk u u  n  n% P n F PV Q n n 2 n n  n n n nS= # ( n nK n P.   n! n Z	 Z] 2 nA n  n n n] n nq n a n n  #! F" F  F Tf Ff F ;}  F " F FV T  T TV 4 
 <V TV T Fh sh s B. /O c p>  H T Kj < F! F F F K $6B <B /^ < < <M 6 <[ <ba < < 6 9 9c 6 4 <0 < U e , V V VB V V V V VK VK V Vf V0 V V V Vk V V V V V) VX S V V
 &X QS  \ 5 <P  ,O Z) V VX QS  Z Q <P T / <
 F
 J /. /o
  Vk Vj V VK V V V V- Vf Vt Vf Vf V V V Vp Vt V V V V V V. V3 V V V) V VC  V VL V7 VL V V V            5/ T ` / ` / ` /^ V T ` T ` T ` T ` T ` T ` T ` T ` T ` T ` T `q ? V T ` ? ` ? ` ` ? ` ? `
  `
  ` F ` F ` F `
 F `
 F `
 B `
  Vw F Vw F Vw FP Z FP Z FP Z FP Z F VV T VV T VV T VV T ` / ` / `7 ; `7 ; `7 ; `7 ;  X  X  X  X  X  1  1  1  1 F / F / F / F / F /555 
  5 
   L H L H L H ? 	 Tq ?q q ? FV T5/ T5/ T5/ T5/ T5/ T5/ T5/ T5/ T5/ T5/ T5/ T5/ T ` T ` T ` T ` T ` T ` T ` T ` T `
 F `
 F VV T VV T VV T VV T VV T VV T VV T UV U UV U UV U UV U UV U F / F / L 3 L 3 L 3 L 3 L 3 ` F( T( T( T( T( T( T( T( T55    55 c c c c c cW E 	[ 	[    F F F F F F F F  
 
 
; 
w 	 	  F F  : 1    d    V TV TV TV TV TV T4 z 	 	 G   F F F F F F F F` 	| 	 &  Q Q Q Q Q Q Q Qs  
% 
1 o  / { ( T( T c c F F  FV TV T F F Q Q( T( T( T( T( T( T( T( T55    55 F F F F F F F F  
 
 
; 
w 	 	  Q Q Q Q Q Q Q Qs  
% 
1 o  / { ( T( T( T( T( T( T( T55} 55 W  W     F F F F F 	  `  Y  u   @ F   &  ` ` K  W  T   F F F FR R  F F& H   x     Q Q Q Q Q  J \ Z Z                 V                               R oR o n  n  n         b = b  b = b/ 9/ 9'' d                          1 1 ( (
 ( ( (
 ( 3 3      / -V   B       / - 5/ ls   d (                                               = , 1 j R f C F9 9 9 b zb B' _ =  V Z 1 j R f C F9 9 9 b zb B V V V Z V, Z0 VV Z V' _ V( Z V +	= (Q ` +   ] ' `	 N N E F O   \ \ `5 3 4u  X 9   H xH x xH xH VH xH VH ZH 1H xH jH xH ZH jH f x ` `	 `	 `5	333	 `5 
	 
 
 `^ V ` V
 F F	 F F
 F    
  
 F T Tw F

 ` `
% `^ V T^ VH = L u L.  . L u n W L u L d L u L u L u L L_-   u   F F u u L Z L L u F F L L u L u L.  . L u L u L u u u L u u   u Z u L u L L u L L u L! 	F L   ) )     / /       & & B HB HB B`      < 0 55   1 1! 1                                                              /       O l   -   x          ]           ]   s   s s   s     < < < < < <xxxxxxxhh''''''''''''''''''  '  '  ''q''''''''''          l l   g g ' ' ' '   ' '   ' ' ' '   ' '   ' ' ' ' '  p  p r p p p p p p p p p7 p7 T         p p' ' ' ' 3     ' ' '  p     p p p p' ' '     ' , , , , , ,    , ,S,, ,,,C, ,X, ,B, ,X,   ,x,     u n n       D ux Lx ux Lx Lx ux Lx Lx ux Lx ux u@  @,@,@,@,@,@,@,@@,@,@,@,@,@,@,@@,@,@,@,@,@,@,@@,@,@,@,@,@,@,@@,@,@,@,@,@,@,@@,@,@,@,@,@,@,@@,@,@,@,@,@,@,@@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@@,@,@,@,@,@,@,@@,@,@,@,@,@,@,@@,@,@,@,@,@,@,@@,@,@,@,@,@,@,@@,@,@,@,@,@,@,@@,@,@,@,@,@,@,@@,@,@,@,@,@,@,@@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@, u u L u L u L uTT L u L u d n d d d d d u d u d L u L u....   .         W++-ME i O O i, L L L u L u L F F F F u u u u F u F u F  u  F F F F F F u u   u u u L u u LB L u u L LP6   A 1 3 3   / / L L / / L u u L L    ' ' ' '   J
  J ` ` ? ` F L H V V5 V	; ` F= ` ;V T > Z  L/ Y Vn bC M b Z Z Z k+ V M + V Z [ [ Z) V) X Z  Y' V+ V) V2 w |  s Xi  [ ^ Y( t, V WP  \        X `
 J
  
L y4 Z
L `O l V{ T                                6 6 6  ` ? E 1 H ] T T T T ; X
h T
 T	X T  T  T T^ V TG J ?S ` F( V{ TL ` / m7 ; -
 3 m F m7 ;^ $ "s N ?P Z F
 <. 5 F  3 ` `
I g r g r g g5 .M r r r
x r r  s r rf ra   rd : r r r r . = s r  r>  | i r  r r r/ r r; V T  t   ? ? ? @ ? A X                                                                                 25 `^ V ` ` ` V ` `j ` ` VP Z V ` V `   F55 
 L/ T / T T Tq ? T ?
 Fh F
 Fw F FV T / T7 ; X 1 /   H5 ` `5 < ` L ` V ` `5 VP Z q V ` ` V S  V5 
N  \ )( TP H 2V T c F FV T F F I 9 F FV T FR  T Tb F F= `C  V QF L T F= d TR  F `8B `    T    j o  Z    Z              m    
 F
 F
 
 
 FP Z  xIxIxxIxIxx[xXxCxIxCxXxCxCxCxXxhxhxhxC  d aP Z V T! V T i S io S \ \R 1 F0 Xa      !   
	   7  9k  :  ;k  <   & : $ 7 $ 9k $ : $ < $ I $ W $ Y $ Z $ \ $  $  $  $$ $% $& $' $6 $7 $8 $9 $: $ $ $ $ $
 $ $ $ $ $ $| $ $ $ $ %  & % & & % * & % 2 & % < %  & %  & %  & %  & %  & %  & %  & %  %  & %  & %  & %  & %  & %  & %  & %  & % & % & % & % & %8 %: % & % & % & % %| &  &  '  '  & '  ' 9 (  & ) 2 )  ) 2 )  )  ) $ ) D ) H ) R ) U ) X )  )  )  )  )  )  )  )  )  )  )  )  )  )  )  )  )  )  )  )  )  )  )  )  )  )  )  )  )  )  )  )  )  )  )  )  )  ) ) ) ) ) ) ) )+ )- )/ )1 )3 )5 ) ) ) ) *  *  & *  -  - a -  -  . k . $ . & . 2 . 8 . : . < . H . R . X . \ .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  . . .0 .1 .: / 7Y / 8 / 9 / :u / <} / \ /  /  /  /  / } /  /  /&Y /0 /:} / / / / 1 } 1 } 1  1  2  2  K 2  2 9 2 ; 3  3  3  3  3  3 $k 3 D 3 H 3 R 3 k 3 k 3 k 3 k 3 k 3  3  3  3  3  3  3  3  3  3  3  3  3  3  3  3  3  3  3 3 3 4  4  K 4  5 7 5 9 5 : 5 < 5 D / 5 \ 5  5  / 5  / 5  / 5  / 5  / 5  / 5  / 5  & 5  5  5& 5: 5 5 6  6  K 6  6 6 6  6" 7  7  7  7  7  7 $ 7 7 7 D< 7 F 7 H 7 R 7 Uk 7 VD 7 XD 7 Z 7 \ 7 mk 7 }k 7  7  7  7  7  7  7 < 7  7  7  7  7 a 7  7 Q 7  7 Q 7 Q 7 e 7  7 e 7 e 7 e 7 a 7 b 7 D 7 b 7 b 7  7  7  7  7  7a 7k 7k 7!D 7#D 7& 71D 7k 7k 7k 7k 8 D 8  8 D 8  8  8 $ 8  8  8  8  8  9  9 k 9  9 2 9 2 9 $a 9 2 9 DD 9 HD 9 L 9 RD 9 X} 9 \ 9 a 9 a 9 a 9 a 9 a 9  9  9  9  9  9  9 D 9 D 9 D 9 D 9 D 9 D 9 D 9 D 9 D 9 D 9 D 9 D 9 D 9 D 9 D 9 D 9 D 9 } 9 } 9 } 9 } 9  9  9 D 9 9D 91} 9 & 9 9 & 9 :  :  :  : u : u : $} : DN : HY : L : RY : U : X : \ : } : } : } : } : } : N : N : N : N : N : N : u : Y : Y : Y : Y : Y : Y : Y : Y : Y : Y :  :  :  :  :  :  : Y :Y : : :1 : & : : & : ;  ; $ ; & ; 2 ;  ;  ;  ;  ;  ;  ;  ;  ;  ;  ;  ;  ;  ;  ; <  < 2 <  <  <  < $} < & < Da < HN < L < RN < XN < } < } < } < } < } <  < a < a < a < a < a < a < a < N < N < N < N < N < N < N < N < N < N < N < N < N < N <  <  < N <N <1N =  =  I  I  I  I  I A I  N  R  U k U D U K U K U K U K Y Y Y 2 Y K Y K Y K Y K Z Y Z 2 Z K Z K Z K Z K [  \ < \  \ K \ K \ K \ K m - m 7k m&k } - } 7k }&k  7  9k  :  <  I  W  Y  Z  \       $ % & ' 6 7 8 9 :     
      |      7  9k  :  <  I  W  Y  Z  \       $ % & ' 6 7 8 9 :     
      |      7  9k  :  <  I  W  Y  Z  \       $ % & ' 6 7 8 9 :     
      |      7  9k  :  <  I  W  Y  Z  \       $ % & ' 6 7 8 9 :     
      |      7  9k  :  <  I  W  Y  Z  \       $ % & ' 6 7 8 9 :     
      |       &       &   &   &   &     K    $  9  <             :  }  }         K    9  ;     K    9  ;     K    9  ;     K    9  ;     K    9  ;     K    9  ;  D    D      $            D    D      $            D    D      $            D    D      $              2        $}  &  Da  HN  L  RN  XN  }  }  }  }  }    a  a  a  a  a  a  a  N  N  N  N  N  N  N  N  N  N  N  N  N  N      N N 1N     &                  <    K  K  K  K      <    K  K  K  K  7  9k  :  <  I  W  Y  Z  \       $ % & ' 6 7 8 9 :     
      |      7  9k  :  <  I  W  Y  Z  \       $ % & ' 6 7 8 9 :     
      |      7  9k  :  <  I  W  Y  Z  \       $ % & ' 6 7 8 9 :     
      |                         &    9     &    9   &     &    7Y  8  9  :u  <}  \          }     &Y 0 :}      7Y  8  9  :u  <}  \          }     &Y 0 :}     O 7Y 8 9 :u <} \     }  &Y0:}	 }	 }	 	   & 7 9 : < D / \   /  /  /  /  /  /  /  &  &: k D K K K K 7 9 : < D / \   /  /  /  /  /  /  /  &  &: k D K K K K     K    6   "" "  K" " 6" ""& & & & & & $& 7& D<& F& H& R& Uk& VD& XD& Z& \& mk& }k& & & & & & <& <& <& <& <& <& a& & & & & & & & & & & a& D& D& D& D& & & & & &a&k&k&!D&#D&&&1D&k&k&k&k0 D0 0 D0 0 0 $0 0 0 0 0 : : 2: : : : $}: &: Da: HN: L: RN: XN: }: }: }: }: }: : a: a: a: a: a: a: a: N: N: N: N: N: N: N: N: N: N: N: N: N: N: : : N:N:1N? ? } $} } } } } }  7 9k : ;k < &: $       $ 9 9 : 9 ; 9 < 9        9: 9 7 9 : ;  <D Y Z D&:D - 7k&k - 7k&k k $ & 2 8 : < H R X \                                    01:          D   D   D   D              x      `    \      8  l    	T  
  
  t  $    <      @       D    ,    T      H    |  0    D    t        P        !<  !  "  #T  $  &   'h  (  (\  (  (  )  )D  )  *  +L  +  ,  -`  .  /  /  0p  1  2,  2  3  4X  4  5  6  74  8  9p  :,  :  <  =  >  ?  @  @  A  B  B  B  CT  D   E  Fx  F  HH  H  J  J  Kh  K  K  Md  M  N$  N  O$  O  P8  Q  Q  Q  R  R  S  S  S  S  S  T  T  T  T  T  T  V<  Wp  W  W  W  W  W  X   X  X0  XH  X  Y  Y,  YD  Y\  Yt  Y  Z   [  [0  [H  [`  [x  [  \@  ]P  ]h  ]  ]  ]  ]  ]  _d  _|  _  _  _  _  _  `  `$  `<  aD  a\  at  a  a  a  a  bX  c`  cx  c  c  c  c  d  d  d  e  e  e4  eL  ed  e|  e  e  e  e  e  f  f$  f<  fT  fd  gD  g\  gt  g  g  g  g  g  h  h  h4  hL  hd  h|  h  h  h  h  h  i  i$  i  i  j  j,  jD  j\  jt  j  j  j  j  k,  kP  kt  k  k  k  k  l,  lD  l\  lt  l  l  l  l  l  m  n(  n@  nX  np  n  n  n  n  o  p   p  p0  pH  p`  px  p  qt  r  r  r  r  s   s  s0  sH  s`  sx  s  s  s  s  s  t  t   t8  tP  t  u   u  u0  uH  u`  ux  u  u  u  u  u  v  v   v8  vP  vh  v  v  v  v  v  v  w  w(  wx  w  x  x  y   y  z  z  {<  {  {  |P  |  }T  }  ~D  ~      |      $  `          @    0        4    X    t      (  8    H      d  |      t    L      P      x    P    $  |           8  P  h                (  @  X  p                 0  H  `  x                   D  \  t                4  L  d  |        D        h  (  @  X  p                 0  H  `  x                 8  P  h                (    (  @  X    p    X           8  P  h                (  @    H        l        L        T    8      D    H  `         d    L    0    (    H    h    <      h  4          |        l      T      L            $      T    T    $  t    D  Ű    @  ƴ  (    8  ȼ  ,      l    P  ˴    D  ̤    H  ͼ     ά    P  Ϥ    Ќ  М    є  Ѥ  Ѽ    D    4  Ә  (    ո  X    װ  h    @      ڔ  @  ۤ  ,  ܜ    H    d  ޴    (  @  ߈  ߴ      T    $  L  t      $                (  D  X  l          (    T       x    4        4  X  |             4  H  \  p                L  `  t            <  h           4  X  x        <  `           4  H             $                 (  <          4  p        P            @          0  L  h           8  P  `  p            4  P  h              4  D  T  d        <  L  \          (  8  H        H  `  x                   $  4      T     P         H    H        p 	 	 	 
 
$ 
 \ 0    h      \    , <     @ P   d t     ` x $ 4 D \ l      4   @ P  ` p          l |   p  P  `   ! "X #4 # # $0 $ %l &< &L & 'P ' ' ' ( ( )P )h ) * *p * * + +$ +4 +l +| ,@ ,P , , -@ - - .d . / / / 0  0 0 0 1 1 1( 1@ 1P 1 2T 2 2 2 3 3\ 3 4H 4 5` 5 6x 7$ 7 8@ 8 8 9 9` 9 9 9 :D : ; ;< ; ; <L < =\ = > >  > > ?X ? @( @ @ AH A A B C C$ C< C C C D$ D D EP E F Fd F G( G| G G G G H\ H I` I J0 J J J J K K K, K< KT Kl K| K K K K K L L L, L< LT Ll L L L L L L M M M4 ML Md M| M M M M M N NH N N N N OT O P< P Q` Qp Q Q Q RT R Sp S Tx U U V  V WX W X X Y< Y Z Z [` \ \x ]@ ] ^X ^ _H _ ` a$ a b  b c c d< d e f f f g g, gt g h h( h i i i j\ j k kp l$ l m  m, m nP n o o pD p q q r s sx t  t u\ u v0 v w  w x x@ x y` y z z {d { |L | }x } ~ ~ P    `   0         $   x  | @   @  l  <  T       d @ 0  | P  l 0     L      D <   h     < H  <   (    | H   ( t   (   4   d     \ l   x    L   t    p  H      l  < L \ l |   \  4   T ɠ   T ʀ   H ˠ  , x  0 ͠  T Τ  ϐ  Ш  p  ( Ұ 8 Ӹ   T  L Ր   D ֬  D ה  T  L ٬ @  ۔ ۨ ۼ     l ܀ ܔ ( ݰ    H  H  D       X  (    4    t  `  l  4  0  \  0   \   4   l     , \ t        4 L d |       $ < T l        , D \ t        4 L d |       $ < T l        , D \ t        4 L d |       $ < T l        , D \ t        4 T l        , D \ t        4 L d |       $ < T l        , D \ t       h   X  h              ( @ X p       ( @ X p       ( @ X p         8 X p         0 H ` x       0 H ` x         8 P h        ( @ X p      	  	 	X 	 	 	 	 
 
( 
@ 
X 
p 
 
 
 
 
    0 H ` x       ( @ X p         4 P h         0 H ` x       ( @ \ x         < T l        , D \ x       $ < T l         4 P h x         0 @ X h        ( @ X p         0 H ` x         8 P h        ( @ X p         0 H ` x           d t         0 L \ t        0 H ` x         8 H ` x         8 H X p        ( @ P                         H  p       !0 !x ! "  " # #` # $ $ % %8 % & & & & & & & '\ (p ( ( ( ( )  )  )D ) ) ) *X *l * * + +8 +P +h + + + ,< ,P , -  -D - - - - - - - - - - - - - - .0 .x / / 0 04 0 1` 1 1 1 2 2D 2 2 2 2 2 3 3  34 3H 3\ 3p 3 3 3 3 3 3 3 4 4$ 48 4L 4` 4t 4 4 4 4 4 5d 6| 7D 7 8 94 9p 9 :h : : ; ;l ; < = = > >$ >4 >| > ? ?( ?X @ @L @l @ @ @ @ A A4 AT At A A A A B B4 BL B\ B B C, C< C C DT D D EL E E E E F F F4 FT Fl F| F F F F G G G< GL G\ Gl G| G Ht ID I J  Jd J J J K KD K K L L< Lp L L M< M N< N N O Oh O O P8 Pt P P QD Q Q RD R S8 S S T TT T T T U4 U U V0 VL V W W@ Wh W W W X X0 XT Xp X X X X X Y Y4 YP Y Z0 Z Z [ [H [ [ \4 \| \ ] ]P ] ] ^( ^x ^ _, _| _ ` `l ` ` a0 at a a b\ b c ct c dP d d e4 e f$ f@ f f gD g g hX h i i@ i i j j k, k k l, l m m n, np o o0 op o o p p` p p q q q r` r r r r s  sl s s t tT u u u< ux u vp v w8 w| w xH yT y y zX z { {x |  |4 | | }8 } } ~p ~    T |    0 X   |   t       d   @ d     , \    H   \       @ `      \      0 h     8 \     T    8 p      4 P    0 h   < `      8 \ |     ( H l     < l     < h     < h     < d     0 \     H |    P    , `      L x      L     8 d    $ T    0 p    H x    D     0 `      0 L h      , T h       , H d           l        < ` t     L d   X  h ( D p        T p     $ @ l      D `      < p  D      h   T °  t    P   p Ŝ   $ h Ƭ     \ ǈ Ǵ   @ Ȍ ȸ  L Ɍ   L  L  L t ̜    8 T | ΰ  < `   ٨ 4  l d ߈    ,     h   P  D       D    8   \     T   $ `   ,        ( L ` |       L ` |       L h      , X       < `      @ l     0 \       0  \        P       < `      @ l     0 \     0 \     P      @ l     H |   	 	L 	p 	 	 	 
( 
\ 
 
 
 , `    H       < `      @ l     0 \     0 \     P      @ l     H |    L p    ( \    , `    H      @ l     H |    L p    ( \    , `    H     < h    8 l      L       !, !` ! ! " "H " " " #8 #| # # $@ $ $ %` % & & & ', 't ' (  (H ( ( ) )L ) * * * +, + + ,` , -X - - . .\ . . /( /t / 0 0` 0 1 1\ 1 2$ 2 2 30 3x 3 4L 4 4 5\ 5 6< 6 6 7 7T 7 7 8P 8 9 9t 9 : : ; ;p ; < <d < = = >8 >h > > > ?( ?X ? ? ? @  @T @ @ @ A$ AX A A A B BH Bx B B B C C, CH C C D DD Dx D D E E0 EL E E F< F G G G HD H H Ip I J Jh J K  K  KH K L L M M M N0 N N O8 Oh O O O P, P` P P Q QL Q Q Q R  RL Rx R R S  S0 S` T Td T U U V Vl V W0 Wp W X( X X Y\ Y Z Zx Z [  [ \ \x \ \ ] ] ^@ _  _ ` a bT c4 c d eP e f g hD i i j kp l  l m n ol o p q0 q rL s( t  t u| vH wD w x\ y y z {T { { { | |8 | | | | | }  }x ~ ~| ~       ( P t     8 X |     < x   8  0  T  ( |    l   P  t  l  h  x 4 D T d t   x     h   P    h   P      T      l   `    D        H  p 8          <      X `   D         t |      Ä Ĥ Ű D 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 Ǵ       $ 4 D T d t Ȅ Ȕ Ȥ ȴ       $ 4 D T d t Ʉ ɔ ɤ ɴ       $ 4 D T d t ʄ ʔ ʤ ʴ       $ 4 D T d t ˄ ˔ ˤ ˴       $ 4 D T d t ̄ ̔ ̤ ̴       $ 4 D T d t ̈́ ͔ ͤ ʹ       $ 4 D T d t ΄ Δ Τ δ       $ 4 D T p < Д  8 Ҩ   T  l Ԙ    H մ   P t ֐ ֬      8 T p ׌ ר     4 P l ؈ ؤ ؼ l   | ڨ  x ۴ , ܘ   ݤ ݸ 0  P  h    	 +     @   +     >        _        :       Q       z                            @             	       4        !        8  	       	     	  G  	  "V  	  "  	    	     	  "  	  :R  	 &  	  hh  	     	   . C o p y r i g h t   ( c )   2 0 0 3   b y   B i t s t r e a m ,   I n c .   A l l   R i g h t s   R e s e r v e d . 
 D e j a V u   c h a n g e s   a r e   i n   p u b l i c   d o m a i n 
  Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved.
DejaVu changes are in public domain
  D e j a V u   S e r i f  DejaVu Serif  B o l d  Bold  D e j a V u   S e r i f   B o l d  DejaVu Serif Bold  D e j a V u   S e r i f   B o l d  DejaVu Serif Bold  V e r s i o n   2 . 3 7  Version 2.37  D e j a V u S e r i f - B o l d  DejaVuSerif-Bold  D e j a V u   f o n t s   t e a m  DejaVu fonts team  h t t p : / / d e j a v u . s o u r c e f o r g e . n e t  http://dejavu.sourceforge.net  F o n t s   a r e   ( c )   B i t s t r e a m   ( s e e   b e l o w ) .   D e j a V u   c h a n g e s   a r e   i n   p u b l i c   d o m a i n . 
 
 B i t s t r e a m   V e r a   F o n t s   C o p y r i g h t 
 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
 
 C o p y r i g h t   ( c )   2 0 0 3   b y   B i t s t r e a m ,   I n c .   A l l   R i g h t s   R e s e r v e d .   B i t s t r e a m   V e r a   i s   a   t r a d e m a r k   o f   B i t s t r e a m ,   I n c . 
 
 P e r m i s s i o n   i s   h e r e b y   g r a n t e d ,   f r e e   o f   c h a r g e ,   t o   a n y   p e r s o n   o b t a i n i n g   a   c o p y   o f   t h e   f o n t s   a c c o m p a n y i n g   t h i s   l i c e n s e   ( " F o n t s " )   a n d   a s s o c i a t e d   d o c u m e n t a t i o n   f i l e s   ( t h e   " F o n t   S o f t w a r e " ) ,   t o   r e p r o d u c e   a n d   d i s t r i b u t e   t h e   F o n t   S o f t w a r e ,   i n c l u d i n g   w i t h o u t   l i m i t a t i o n   t h e   r i g h t s   t o   u s e ,   c o p y ,   m e r g e ,   p u b l i s h ,   d i s t r i b u t e ,   a n d / o r   s e l l   c o p i e s   o f   t h e   F o n t   S o f t w a r e ,   a n d   t o   p e r m i t   p e r s o n s   t o   w h o m   t h e   F o n t   S o f t w a r e   i s   f u r n i s h e d   t o   d o   s o ,   s u b j e c t   t o   t h e   f o l l o w i n g   c o n d i t i o n s : 
 
 T h e   a b o v e   c o p y r i g h t   a n d   t r a d e m a r k   n o t i c e s   a n d   t h i s   p e r m i s s i o n   n o t i c e   s h a l l   b e   i n c l u d e d   i n   a l l   c o p i e s   o f   o n e   o r   m o r e   o f   t h e   F o n t   S o f t w a r e   t y p e f a c e s . 
 
 T h e   F o n t   S o f t w a r e   m a y   b e   m o d i f i e d ,   a l t e r e d ,   o r   a d d e d   t o ,   a n d   i n   p a r t i c u l a r   t h e   d e s i g n s   o f   g l y p h s   o r   c h a r a c t e r s   i n   t h e   F o n t s   m a y   b e   m o d i f i e d   a n d   a d d i t i o n a l   g l y p h s   o r     o r   c h a r a c t e r s   m a y   b e   a d d e d   t o   t h e   F o n t s ,   o n l y   i f   t h e   f o n t s   a r e   r e n a m e d   t o   n a m e s   n o t   c o n t a i n i n g   e i t h e r   t h e   w o r d s   " B i t s t r e a m "   o r   t h e   w o r d   " V e r a " . 
 
 T h i s   L i c e n s e   b e c o m e s   n u l l   a n d   v o i d   t o   t h e   e x t e n t   a p p l i c a b l e   t o   F o n t s   o r   F o n t   S o f t w a r e   t h a t   h a s   b e e n   m o d i f i e d   a n d   i s   d i s t r i b u t e d   u n d e r   t h e   " B i t s t r e a m   V e r a "   n a m e s . 
 
 T h e   F o n t   S o f t w a r e   m a y   b e   s o l d   a s   p a r t   o f   a   l a r g e r   s o f t w a r e   p a c k a g e   b u t   n o   c o p y   o f   o n e   o r   m o r e   o f   t h e   F o n t   S o f t w a r e   t y p e f a c e s   m a y   b e   s o l d   b y   i t s e l f . 
 
 T H E   F O N T   S O F T W A R E   I S   P R O V I D E D   " A S   I S " ,   W I T H O U T   W A R R A N T Y   O F   A N Y   K I N D ,   E X P R E S S   O R   I M P L I E D ,   I N C L U D I N G   B U T   N O T   L I M I T E D   T O   A N Y   W A R R A N T I E S   O F   M E R C H A N T A B I L I T Y ,   F I T N E S S   F O R   A   P A R T I C U L A R   P U R P O S E   A N D   N O N I N F R I N G E M E N T   O F   C O P Y R I G H T ,   P A T E N T ,   T R A D E M A R K ,   O R   O T H E R   R I G H T .   I N   N O   E V E N T   S H A L L   B I T S T R E A M   O R   T H E   G N O M E   F O U N D A T I O N   B E   L I A B L E   F O R   A N Y   C L A I M ,   D A M A G E S   O R   O T H E R   L I A B I L I T Y ,   I N C L U D I N G   A N Y   G E N E R A L ,   S P E C I A L ,   I N D I R E C T ,   I N C I D E N T A L ,   O R   C O N S E Q U E N T I A L   D A M A G E S ,   W H E T H E R   I N   A N   A C T I O N   O F   C O N T R A C T ,   T O R T   O R   O T H E R W I S E ,   A R I S I N G   F R O M ,   O U T   O F   T H E   U S E   O R   I N A B I L I T Y   T O   U S E   T H E   F O N T   S O F T W A R E   O R   F R O M   O T H E R   D E A L I N G S   I N   T H E   F O N T   S O F T W A R E . 
 
 E x c e p t   a s   c o n t a i n e d   i n   t h i s   n o t i c e ,   t h e   n a m e s   o f   G n o m e ,   t h e   G n o m e   F o u n d a t i o n ,   a n d   B i t s t r e a m   I n c . ,   s h a l l   n o t   b e   u s e d   i n   a d v e r t i s i n g   o r   o t h e r w i s e   t o   p r o m o t e   t h e   s a l e ,   u s e   o r   o t h e r   d e a l i n g s   i n   t h i s   F o n t   S o f t w a r e   w i t h o u t   p r i o r   w r i t t e n   a u t h o r i z a t i o n   f r o m   t h e   G n o m e   F o u n d a t i o n   o r   B i t s t r e a m   I n c . ,   r e s p e c t i v e l y .   F o r   f u r t h e r   i n f o r m a t i o n ,   c o n t a c t :   f o n t s   a t   g n o m e   d o t   o r g .   
  Fonts are (c) Bitstream (see below). DejaVu changes are in public domain.

Bitstream Vera Fonts Copyright
------------------------------

Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. Bitstream Vera is a trademark of Bitstream, Inc.

Permission is hereby granted, free of charge, to any person obtaining a copy of the fonts accompanying this license ("Fonts") and associated documentation files (the "Font Software"), to reproduce and distribute the Font Software, including without limitation the rights to use, copy, merge, publish, distribute, and/or sell copies of the Font Software, and to permit persons to whom the Font Software is furnished to do so, subject to the following conditions:

The above copyright and trademark notices and this permission notice shall be included in all copies of one or more of the Font Software typefaces.

The Font Software may be modified, altered, or added to, and in particular the designs of glyphs or characters in the Fonts may be modified and additional glyphs or  or characters may be added to the Fonts, only if the fonts are renamed to names not containing either the words "Bitstream" or the word "Vera".

This License becomes null and void to the extent applicable to Fonts or Font Software that has been modified and is distributed under the "Bitstream Vera" names.

The Font Software may be sold as part of a larger software package but no copy of one or more of the Font Software typefaces may be sold by itself.

THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL BITSTREAM OR THE GNOME FOUNDATION BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE.

Except as contained in this notice, the names of Gnome, the Gnome Foundation, and Bitstream Inc., shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Font Software without prior written authorization from the Gnome Foundation or Bitstream Inc., respectively. For further information, contact: fonts at gnome dot org. 
  h t t p : / / d e j a v u . s o u r c e f o r g e . n e t / w i k i / i n d e x . p h p / L i c e n s e  http://dejavu.sourceforge.net/wiki/index.php/License  D e j a V u   S e r i f  DejaVu Serif  B o l d  Bold         ~ Z                               	 
                        ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a                                    b c  d  e        f     g      h    j i k m l n  o q p r s u t v w  x z y { } |    ~       	
     !"#$%&'()*+  ,-./0123456789:  ;<=>?@ABCDEFGHI  JKLMNOPQRS    TUVWXYZ[\]^_`abcdefghi jklm  nopqrstuvwxyz{|}~  	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~         	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDE FGHIJKLMNOPQRSTUVWXYZ[ \]^_`abcdefghijklmnopqrstuvwxyz{|}~ 	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ 	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ 	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ 	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~                 	
  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~            	 											
																						 	!	"	#	$	%	&	'	(	)	*	+	,	-	.	/	0	1	2	3	4	5	6	7	8	9	:	;	<	=	>	?	@	A	B	C	D	E	F	G	H	I	J	K	L	M	N	O	P	Q	R	S	T	U	V	W	X	Y	Z	[	\	]	^	_	`	a	b	c	d	e	f	g	h	i	j	k	l	m	n	o	p	q	r	s	t	u	v	w	x	y	z	{	|	}	~																																																																																																																																	
 








	 























 
!
"
#
$
%
&
'
(
)
*
+
,
-
.
/
0
1
2
3
4
5
6
7
8
9
:
;
<
=
>
?
@
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
[
\
]
^
_
`
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
{
|
}
~
































































































































 	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ 	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~   	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~	sfthyphenAmacronamacronAbreveabreveAogonekaogonekCcircumflexccircumflex
Cdotaccent
cdotaccentDcarondcaronDcroatEmacronemacronEbreveebreve
Edotaccent
edotaccentEogonekeogonekEcaronecaronGcircumflexgcircumflex
Gdotaccent
gdotaccentGcommaaccentgcommaaccentHcircumflexhcircumflexHbarhbarItildeitildeImacronimacronIbreveibreveIogonekiogonekIJijJcircumflexjcircumflexKcommaaccentkcommaaccentkgreenlandicLacutelacuteLcommaaccentlcommaaccentLcaronlcaronLdotldotNacutenacuteNcommaaccentncommaaccentNcaronncaronnapostropheEngengOmacronomacronObreveobreveOhungarumlautohungarumlautRacuteracuteRcommaaccentrcommaaccentRcaronrcaronSacutesacuteScircumflexscircumflexTcommaaccenttcommaaccentTcarontcaronTbartbarUtildeutildeUmacronumacronUbreveubreveUringuringUhungarumlautuhungarumlautUogonekuogonekWcircumflexwcircumflexYcircumflexycircumflexZacutezacute
Zdotaccent
zdotaccentlongsuni0180uni0181uni0182uni0183uni0184uni0185uni0186uni0187uni0188uni0189uni018Auni018Buni018Cuni018Duni018Euni018Funi0190uni0191uni0193uni0194uni0195uni0196uni0197uni0198uni0199uni019Auni019Buni019Cuni019Duni019Euni019FOhornohornuni01A2uni01A3uni01A4uni01A5uni01A6uni01A7uni01A8uni01A9uni01AAuni01ABuni01ACuni01ADuni01AEUhornuhornuni01B1uni01B2uni01B3uni01B4uni01B5uni01B6uni01B7uni01B8uni01B9uni01BAuni01BBuni01BCuni01BDuni01BEuni01BFuni01C0uni01C1uni01C2uni01C3uni01C4uni01C5uni01C6uni01C7uni01C8uni01C9uni01CAuni01CBuni01CCuni01CDuni01CEuni01CFuni01D0uni01D1uni01D2uni01D3uni01D4uni01D5uni01D6uni01D7uni01D8uni01D9uni01DAuni01DBuni01DCuni01DDuni01DEuni01DFuni01E0uni01E1uni01E2uni01E3uni01E4uni01E5Gcarongcaronuni01E8uni01E9uni01EAuni01EBuni01ECuni01EDuni01EEuni01EFuni01F0uni01F1uni01F2uni01F3uni01F4uni01F5uni01F6uni01F7uni01F8uni01F9
Aringacute
aringacuteAEacuteaeacuteOslashacuteoslashacuteuni0200uni0201uni0202uni0203uni0204uni0205uni0206uni0207uni0208uni0209uni020Auni020Buni020Cuni020Duni020Euni020Funi0210uni0211uni0212uni0213uni0214uni0215uni0216uni0217Scommaaccentscommaaccentuni021Auni021Buni021Cuni021Duni021Euni021Funi0220uni0221uni0222uni0223uni0224uni0225uni0226uni0227uni0228uni0229uni022Auni022Buni022Cuni022Duni022Euni022Funi0230uni0231uni0232uni0233uni0234uni0235uni0236dotlessjuni0238uni0239uni023Auni023Buni023Cuni023Duni023Euni023Funi0240uni0241uni0242uni0243uni0244uni0245uni0246uni0247uni0248uni0249uni024Auni024Buni024Cuni024Duni024Euni024Funi0250uni0251uni0252uni0253uni0254uni0255uni0256uni0257uni0258uni0259uni025Auni025Buni025Cuni025Duni025Euni025Funi0260uni0261uni0262uni0263uni0264uni0265uni0266uni0267uni0268uni0269uni026Auni026Buni026Cuni026Duni026Euni026Funi0270uni0271uni0272uni0273uni0274uni0275uni0276uni0277uni0278uni0279uni027Auni027Buni027Cuni027Duni027Euni027Funi0280uni0281uni0282uni0283uni0284uni0285uni0286uni0287uni0288uni0289uni028Auni028Buni028Cuni028Duni028Euni028Funi0290uni0291uni0292uni0293uni0294uni0295uni0296uni0297uni0298uni0299uni029Auni029Buni029Cuni029Duni029Euni029Funi02A0uni02A1uni02A2uni02A3uni02A4uni02A5uni02A6uni02A7uni02A8uni02A9uni02AAuni02ABuni02ACuni02ADuni02AEuni02AFuni02B0uni02B1uni02B2uni02B3uni02B4uni02B5uni02B6uni02B7uni02B8uni02B9uni02BAuni02BBuni02BCuni02BDuni02BEuni02BFuni02C0uni02C1uni02C2uni02C3uni02C4uni02C5uni02C8uni02C9uni02CAuni02CBuni02CCuni02CDuni02D0uni02D1uni02D2uni02D3uni02D6uni02D7uni02DEuni02E0uni02E1uni02E2uni02E3uni02E4uni02E5uni02E6uni02E7uni02E8uni02E9uni02ECuni02EEuni02EFuni02F0uni02F3uni02F7	gravecomb	acutecombuni0302	tildecombuni0304uni0305uni0306uni0307uni0308hookabovecombuni030Auni030Buni030Cuni030Duni030Euni030Funi0310uni0311uni0312uni0313uni0314uni0315uni0316uni0317uni0318uni0319uni031Auni031Buni031Cuni031Duni031Euni031Funi0320uni0321uni0322dotbelowcombuni0324uni0325uni0326uni0327uni0328uni0329uni032Auni032Buni032Cuni032Duni032Euni032Funi0330uni0331uni0332uni0333uni0334uni0335uni0336uni0337uni0338uni0339uni033Auni033Buni033Cuni033Duni033Euni033Funi0343uni034Funi0358uni0360uni0361uni0370uni0371uni0372uni0373uni0374uni0375uni0376uni0377uni037Auni037Buni037Cuni037Duni037Euni037Ftonosdieresistonos
Alphatonos	anoteleiaEpsilontonosEtatonos	IotatonosOmicrontonosUpsilontonos
OmegatonosiotadieresistonosAlphaBetaGammauni0394EpsilonZetaEtaThetaIotaKappaLambdaMuNuXiOmicronPiRhoSigmaTauUpsilonPhiChiPsiIotadieresisUpsilondieresis
alphatonosepsilontonosetatonos	iotatonosupsilondieresistonosalphabetagammadeltaepsilonzetaetathetaiotakappalambdauni03BCnuxiomicronrhosigma1sigmatauupsilonphichipsiomegaiotadieresisupsilondieresisomicrontonosupsilontonos
omegatonosuni03CFuni03D0theta1Upsilon1uni03D3uni03D4phi1omega1uni03D7uni03D8uni03D9uni03DAuni03DBuni03DCuni03DDuni03DEuni03DFuni03E0uni03E1uni03F0uni03F1uni03F2uni03F3uni03F4uni03F5uni03F6uni03F7uni03F8uni03F9uni03FAuni03FBuni03FCuni03FDuni03FEuni03FFuni0400uni0401uni0402uni0403uni0404uni0405uni0406uni0407uni0408uni0409uni040Auni040Buni040Cuni040Duni040Euni040Funi0410uni0411uni0412uni0413uni0414uni0415uni0416uni0417uni0418uni0419uni041Auni041Buni041Cuni041Duni041Euni041Funi0420uni0421uni0422uni0423uni0424uni0425uni0426uni0427uni0428uni0429uni042Auni042Buni042Cuni042Duni042Euni042Funi0430uni0431uni0432uni0433uni0434uni0435uni0436uni0437uni0438uni0439uni043Auni043Buni043Cuni043Duni043Euni043Funi0440uni0441uni0442uni0443uni0444uni0445uni0446uni0447uni0448uni0449uni044Auni044Buni044Cuni044Duni044Euni044Funi0450uni0451uni0452uni0453uni0454uni0455uni0456uni0457uni0458uni0459uni045Auni045Buni045Cuni045Duni045Euni045Funi0462uni0463uni0464uni0465uni046Auni046Buni046Cuni046Duni0470uni0471uni0472uni0473uni0474uni0475uni0476uni0477uni048Cuni048Duni0490uni0491uni0492uni0493uni0494uni0495uni0496uni0497uni0498uni0499uni049Auni049Buni049Euni049Funi04A0uni04A1uni04A2uni04A3uni04A4uni04A5uni04A6uni04A7uni04AAuni04ABuni04ACuni04ADuni04AEuni04AFuni04B0uni04B1uni04B2uni04B3uni04B4uni04B5uni04B6uni04B7uni04BAuni04BBuni04C0uni04C1uni04C2uni04C3uni04C4uni04C7uni04C8uni04CBuni04CCuni04CFuni04D0uni04D1uni04D2uni04D3uni04D4uni04D5uni04D6uni04D7uni04D8uni04D9uni04DAuni04DBuni04DCuni04DDuni04DEuni04DFuni04E0uni04E1uni04E2uni04E3uni04E4uni04E5uni04E6uni04E7uni04E8uni04E9uni04EAuni04EBuni04ECuni04EDuni04EEuni04EFuni04F0uni04F1uni04F2uni04F3uni04F4uni04F5uni04F6uni04F7uni04F8uni04F9uni0510uni0511uni0512uni0513uni0514uni0515uni051Auni051Buni051Cuni051Duni0531uni0532uni0533uni0534uni0535uni0536uni0537uni0538uni0539uni053Auni053Buni053Cuni053Duni053Euni053Funi0540uni0541uni0542uni0543uni0544uni0545uni0546uni0547uni0548uni0549uni054Auni054Buni054Cuni054Duni054Euni054Funi0550uni0551uni0552uni0553uni0554uni0555uni0556uni0559uni055Auni055Buni055Cuni055Duni055Euni055Funi0561uni0562uni0563uni0564uni0565uni0566uni0567uni0568uni0569uni056Auni056Buni056Cuni056Duni056Euni056Funi0570uni0571uni0572uni0573uni0574uni0575uni0576uni0577uni0578uni0579uni057Auni057Buni057Cuni057Duni057Euni057Funi0580uni0581uni0582uni0583uni0584uni0585uni0586uni0587uni0589uni058Auni0E3Funi10A0uni10A1uni10A2uni10A3uni10A4uni10A5uni10A6uni10A7uni10A8uni10A9uni10AAuni10ABuni10ACuni10ADuni10AEuni10AFuni10B0uni10B1uni10B2uni10B3uni10B4uni10B5uni10B6uni10B7uni10B8uni10B9uni10BAuni10BBuni10BCuni10BDuni10BEuni10BFuni10C0uni10C1uni10C2uni10C3uni10C4uni10C5uni10D0uni10D1uni10D2uni10D3uni10D4uni10D5uni10D6uni10D7uni10D8uni10D9uni10DAuni10DBuni10DCuni10DDuni10DEuni10DFuni10E0uni10E1uni10E2uni10E3uni10E4uni10E5uni10E6uni10E7uni10E8uni10E9uni10EAuni10EBuni10ECuni10EDuni10EEuni10EFuni10F0uni10F1uni10F2uni10F3uni10F4uni10F5uni10F6uni10F7uni10F8uni10F9uni10FAuni10FBuni10FCuni1D00uni1D01uni1D02uni1D03uni1D04uni1D05uni1D06uni1D07uni1D08uni1D09uni1D0Auni1D0Buni1D0Cuni1D0Duni1D0Euni1D0Funi1D10uni1D11uni1D12uni1D13uni1D14uni1D15uni1D16uni1D17uni1D18uni1D19uni1D1Auni1D1Buni1D1Cuni1D1Duni1D1Euni1D1Funi1D20uni1D21uni1D22uni1D23uni1D24uni1D25uni1D26uni1D27uni1D28uni1D29uni1D2Auni1D2Buni1D2Cuni1D2Duni1D2Euni1D2Funi1D30uni1D31uni1D32uni1D33uni1D34uni1D35uni1D36uni1D37uni1D38uni1D39uni1D3Auni1D3Buni1D3Cuni1D3Duni1D3Euni1D3Funi1D40uni1D41uni1D42uni1D43uni1D44uni1D45uni1D46uni1D47uni1D48uni1D49uni1D4Auni1D4Buni1D4Cuni1D4Duni1D4Euni1D4Funi1D50uni1D51uni1D52uni1D53uni1D54uni1D55uni1D56uni1D57uni1D58uni1D59uni1D5Auni1D5Buni1D5Cuni1D5Duni1D5Euni1D5Funi1D60uni1D61uni1D62uni1D63uni1D64uni1D65uni1D66uni1D67uni1D68uni1D69uni1D6Auni1D6Buni1D77uni1D78uni1D7Buni1D7Cuni1D7Duni1D7Euni1D7Funi1D85uni1D9Buni1D9Cuni1D9Duni1D9Euni1D9Funi1DA0uni1DA1uni1DA2uni1DA3uni1DA4uni1DA5uni1DA6uni1DA7uni1DA8uni1DA9uni1DAAuni1DABuni1DACuni1DADuni1DAEuni1DAFuni1DB0uni1DB1uni1DB2uni1DB3uni1DB4uni1DB5uni1DB6uni1DB7uni1DB8uni1DB9uni1DBAuni1DBBuni1DBCuni1DBDuni1DBEuni1DBFuni1DC4uni1DC5uni1DC6uni1DC7uni1DC8uni1DC9uni1E00uni1E01uni1E02uni1E03uni1E04uni1E05uni1E06uni1E07uni1E08uni1E09uni1E0Auni1E0Buni1E0Cuni1E0Duni1E0Euni1E0Funi1E10uni1E11uni1E12uni1E13uni1E14uni1E15uni1E16uni1E17uni1E18uni1E19uni1E1Auni1E1Buni1E1Cuni1E1Duni1E1Euni1E1Funi1E20uni1E21uni1E22uni1E23uni1E24uni1E25uni1E26uni1E27uni1E28uni1E29uni1E2Auni1E2Buni1E2Cuni1E2Duni1E2Euni1E2Funi1E30uni1E31uni1E32uni1E33uni1E34uni1E35uni1E36uni1E37uni1E38uni1E39uni1E3Auni1E3Buni1E3Cuni1E3Duni1E3Euni1E3Funi1E40uni1E41uni1E42uni1E43uni1E44uni1E45uni1E46uni1E47uni1E48uni1E49uni1E4Auni1E4Buni1E4Cuni1E4Duni1E4Euni1E4Funi1E50uni1E51uni1E52uni1E53uni1E54uni1E55uni1E56uni1E57uni1E58uni1E59uni1E5Auni1E5Buni1E5Cuni1E5Duni1E5Euni1E5Funi1E60uni1E61uni1E62uni1E63uni1E64uni1E65uni1E66uni1E67uni1E68uni1E69uni1E6Auni1E6Buni1E6Cuni1E6Duni1E6Euni1E6Funi1E70uni1E71uni1E72uni1E73uni1E74uni1E75uni1E76uni1E77uni1E78uni1E79uni1E7Auni1E7Buni1E7Cuni1E7Duni1E7Euni1E7FWgravewgraveWacutewacute	Wdieresis	wdieresisuni1E86uni1E87uni1E88uni1E89uni1E8Auni1E8Buni1E8Cuni1E8Duni1E8Euni1E8Funi1E90uni1E91uni1E92uni1E93uni1E94uni1E95uni1E96uni1E97uni1E98uni1E99uni1E9Auni1E9Buni1E9Cuni1E9Duni1E9Euni1E9Funi1EA0uni1EA1uni1EA2uni1EA3uni1EA4uni1EA5uni1EA6uni1EA7uni1EA8uni1EA9uni1EAAuni1EABuni1EACuni1EADuni1EAEuni1EAFuni1EB0uni1EB1uni1EB2uni1EB3uni1EB4uni1EB5uni1EB6uni1EB7uni1EB8uni1EB9uni1EBAuni1EBBuni1EBCuni1EBDuni1EBEuni1EBFuni1EC0uni1EC1uni1EC2uni1EC3uni1EC4uni1EC5uni1EC6uni1EC7uni1EC8uni1EC9uni1ECAuni1ECBuni1ECCuni1ECDuni1ECEuni1ECFuni1ED0uni1ED1uni1ED2uni1ED3uni1ED4uni1ED5uni1ED6uni1ED7uni1ED8uni1ED9uni1EDAuni1EDBuni1EDCuni1EDDuni1EDEuni1EDFuni1EE0uni1EE1uni1EE2uni1EE3uni1EE4uni1EE5uni1EE6uni1EE7uni1EE8uni1EE9uni1EEAuni1EEBuni1EECuni1EEDuni1EEEuni1EEFuni1EF0uni1EF1Ygraveygraveuni1EF4uni1EF5uni1EF6uni1EF7uni1EF8uni1EF9uni1EFAuni1EFBuni1F00uni1F01uni1F02uni1F03uni1F04uni1F05uni1F06uni1F07uni1F08uni1F09uni1F0Auni1F0Buni1F0Cuni1F0Duni1F0Euni1F0Funi1F10uni1F11uni1F12uni1F13uni1F14uni1F15uni1F18uni1F19uni1F1Auni1F1Buni1F1Cuni1F1Duni1F20uni1F21uni1F22uni1F23uni1F24uni1F25uni1F26uni1F27uni1F28uni1F29uni1F2Auni1F2Buni1F2Cuni1F2Duni1F2Euni1F2Funi1F30uni1F31uni1F32uni1F33uni1F34uni1F35uni1F36uni1F37uni1F38uni1F39uni1F3Auni1F3Buni1F3Cuni1F3Duni1F3Euni1F3Funi1F40uni1F41uni1F42uni1F43uni1F44uni1F45uni1F48uni1F49uni1F4Auni1F4Buni1F4Cuni1F4Duni1F50uni1F51uni1F52uni1F53uni1F54uni1F55uni1F56uni1F57uni1F59uni1F5Buni1F5Duni1F5Funi1F60uni1F61uni1F62uni1F63uni1F64uni1F65uni1F66uni1F67uni1F68uni1F69uni1F6Auni1F6Buni1F6Cuni1F6Duni1F6Euni1F6Funi1F70uni1F71uni1F72uni1F73uni1F74uni1F75uni1F76uni1F77uni1F78uni1F79uni1F7Auni1F7Buni1F7Cuni1F7Duni1F80uni1F81uni1F82uni1F83uni1F84uni1F85uni1F86uni1F87uni1F88uni1F89uni1F8Auni1F8Buni1F8Cuni1F8Duni1F8Euni1F8Funi1F90uni1F91uni1F92uni1F93uni1F94uni1F95uni1F96uni1F97uni1F98uni1F99uni1F9Auni1F9Buni1F9Cuni1F9Duni1F9Euni1F9Funi1FA0uni1FA1uni1FA2uni1FA3uni1FA4uni1FA5uni1FA6uni1FA7uni1FA8uni1FA9uni1FAAuni1FABuni1FACuni1FADuni1FAEuni1FAFuni1FB0uni1FB1uni1FB2uni1FB3uni1FB4uni1FB6uni1FB7uni1FB8uni1FB9uni1FBAuni1FBBuni1FBCuni1FBDuni1FBEuni1FBFuni1FC0uni1FC1uni1FC2uni1FC3uni1FC4uni1FC6uni1FC7uni1FC8uni1FC9uni1FCAuni1FCBuni1FCCuni1FCDuni1FCEuni1FCFuni1FD0uni1FD1uni1FD2uni1FD3uni1FD6uni1FD7uni1FD8uni1FD9uni1FDAuni1FDBuni1FDDuni1FDEuni1FDFuni1FE0uni1FE1uni1FE2uni1FE3uni1FE4uni1FE5uni1FE6uni1FE7uni1FE8uni1FE9uni1FEAuni1FEBuni1FECuni1FEDuni1FEEuni1FEFuni1FF2uni1FF3uni1FF4uni1FF6uni1FF7uni1FF8uni1FF9uni1FFAuni1FFBuni1FFCuni1FFDuni1FFEuni2000uni2001uni2002uni2003uni2004uni2005uni2006uni2007uni2008uni2009uni200Auni200Buni200Cuni200Duni200Euni200Funi2010uni2011
figuredashuni2015uni2016underscoredblquotereverseduni201Funi2023onedotenleadertwodotenleaderuni202Auni202Buni202Cuni202Duni202Euni202Funi2031minuteseconduni2034uni2035uni2036uni2037uni2038	exclamdbluni203Duni203Euni2042uni2045uni2046uni2047uni2048uni2049uni204Buni204Cuni204Duni204Euni204Funi2051uni2052uni2053uni2057uni205Funi2060uni2061uni2062uni2063uni2064uni206Auni206Buni206Cuni206Duni206Euni206Funi2070uni2071uni2074uni2075uni2076uni2077uni2078uni2079uni207Auni207Buni207Cuni207Duni207Euni207Funi2080uni2081uni2082uni2083uni2084uni2085uni2086uni2087uni2088uni2089uni208Auni208Buni208Cuni208Duni208Euni2090uni2091uni2092uni2093uni2094uni2095uni2096uni2097uni2098uni2099uni209Auni209Buni209Cuni20A6Eurouni20AFuni20B1uni20B4uni20B5uni20B8uni20B9uni20BAuni20BDuni2103uni2109uni210Euni210Funi2116uni2126uni2127uni212Auni212Buni2132uni2141uni2142uni2143uni2144uni214Buni214Euni2150uni2151uni2152onethird	twothirdsuni2155uni2156uni2157uni2158uni2159uni215A	oneeighththreeeighthsfiveeighthsseveneighthsuni215Funi2160uni2161uni2162uni2163uni2164uni2165uni2166uni2167uni2168uni2169uni216Auni216Buni216Cuni216Duni216Euni216Funi2170uni2171uni2172uni2173uni2174uni2175uni2176uni2177uni2178uni2179uni217Auni217Buni217Cuni217Duni217Euni217Funi2180uni2181uni2182uni2183uni2184uni2185uni2189	arrowleftarrowup
arrowright	arrowdown	arrowboth	arrowupdnuni2196uni2197uni2198uni2199uni219Auni219Buni219Cuni219Duni219Euni219Funi21A0uni21A1uni21A2uni21A3uni21A4uni21A5uni21A6uni21A7arrowupdnbseuni21A9uni21AAuni21ABuni21ACuni21ADuni21AEuni21AFuni21B0uni21B1uni21B2uni21B3uni21B4carriagereturnuni21B6uni21B7uni21B8uni21B9uni21BAuni21BBuni21BCuni21BDuni21BEuni21BFuni21C0uni21C1uni21C2uni21C3uni21C4uni21C5uni21C6uni21C7uni21C8uni21C9uni21CAuni21CBuni21CCuni21CDuni21CEuni21CFarrowdblleft
arrowdbluparrowdblrightarrowdbldownarrowdblbothuni21D5uni21D6uni21D7uni21D8uni21D9uni21DAuni21DBuni21DCuni21DDuni21DEuni21DFuni21E0uni21E1uni21E2uni21E3uni21E4uni21E5uni21E6uni21E7uni21E8uni21E9uni21EAuni21EBuni21ECuni21EDuni21EEuni21EFuni21F0uni21F1uni21F2uni21F3uni21F4uni21F5uni21F6uni21F7uni21F8uni21F9uni21FAuni21FBuni21FCuni21FDuni21FEuni21FF	universalexistentialuni2204gradientelement
notelementsuchthatuni220Cuni2210uni2213uni2214uni2215asteriskmathuni2218uni2219uni221Buni221Cproportional
orthogonalangleuni2223uni2224uni2225uni2226
logicaland	logicalorintersectionunionuni222Cuni222Duni2238uni2239uni223Auni223Bsimilaruni223Duni2242uni2243uni2250uni2251uni2252uni2253uni2254uni2255equivalencepropersubsetpropersuperset	notsubsetuni2285reflexsubsetreflexsupersetuni228Cuni228Duni228Euni228Funi2290uni2291uni2292uni2293uni2294
circleplusuni2296circlemultiplyuni2298uni2299uni229Auni229Buni229Cuni229Duni229Euni229Funi22A0uni22A1uni22A2uni22A3uni22A4perpendicularuni22A6uni22A7uni22A8uni22A9uni22AAuni22ABuni22ACuni22ADuni22AEuni22AFuni22C4dotmathhouseuni2308uni2309uni230Auni230Brevlogicalnotuni2311uni2318uni2319
integraltp
integralbtuni2325uni2328uni237Duni239Buni239Cuni239Duni239Euni239Funi23A0uni23A1uni23A2uni23A3uni23A4uni23A5uni23A6uni23A7uni23A8uni23A9uni23AAuni23ABuni23ACuni23ADuni23AEuni23CFuni2423SF100000uni2501SF110000uni2503uni2504uni2505uni2506uni2507uni2508uni2509uni250Auni250BSF010000uni250Duni250Euni250FSF030000uni2511uni2512uni2513SF020000uni2515uni2516uni2517SF040000uni2519uni251Auni251BSF080000uni251Duni251Euni251Funi2520uni2521uni2522uni2523SF090000uni2525uni2526uni2527uni2528uni2529uni252Auni252BSF060000uni252Duni252Euni252Funi2530uni2531uni2532uni2533SF070000uni2535uni2536uni2537uni2538uni2539uni253Auni253BSF050000uni253Duni253Euni253Funi2540uni2541uni2542uni2543uni2544uni2545uni2546uni2547uni2548uni2549uni254Auni254Buni254Cuni254Duni254Euni254FSF430000SF240000SF510000SF520000SF390000SF220000SF210000SF250000SF500000SF490000SF380000SF280000SF270000SF260000SF360000SF370000SF420000SF190000SF200000SF230000SF470000SF480000SF410000SF450000SF460000SF400000SF540000SF530000SF440000uni256Duni256Euni256Funi2570uni2571uni2572uni2573uni2574uni2575uni2576uni2577uni2578uni2579uni257Auni257Buni257Cuni257Duni257Euni257Fupblockuni2581uni2582uni2583dnblockuni2585uni2586uni2587blockuni2589uni258Auni258Blfblockuni258Duni258Euni258Frtblockltshadeshadedkshadeuni2594uni2595uni2596uni2597uni2598uni2599uni259Auni259Buni259Cuni259Duni259Euni259F	filledboxH22073uni25A2uni25A3uni25A4uni25A5uni25A6uni25A7uni25A8uni25A9H18543H18551
filledrectuni25ADuni25AEuni25AFuni25B0uni25B1triagupuni25B3uni25B4uni25B5uni25B6uni25B7uni25B8uni25B9triagrtuni25BBtriagdnuni25BDuni25BEuni25BFuni25C0uni25C1uni25C2uni25C3triaglfuni25C5uni25C6uni25C7uni25C8uni25C9circleuni25CCuni25CDuni25CEH18533uni25D0uni25D1uni25D2uni25D3uni25D4uni25D5uni25D6uni25D7	invbullet	invcircleuni25DAuni25DBuni25DCuni25DDuni25DEuni25DFuni25E0uni25E1uni25E2uni25E3uni25E4uni25E5
openbulletuni25E7uni25E8uni25E9uni25EAuni25EBuni25ECuni25EDuni25EEuni25EFuni25F0uni25F1uni25F2uni25F3uni25F4uni25F5uni25F6uni25F7uni25F8uni25F9uni25FAuni25FBuni25FCuni25FDuni25FEuni25FFuni2600uni2638uni2639	smilefaceinvsmilefacesununi263Ffemaleuni2641maleuni2643uni2644uni2645uni2646uni2647spadeuni2661uni2662clubuni2664heartdiamonduni2667uni2669musicalnotemusicalnotedbluni266Cuni266Duni266Euni266Funi27A1uni27C5uni27C6uni27E0uni27E8uni27E9uni27F0uni27F1uni27F2uni27F3uni27F4uni27F5uni27F6uni27F7uni27F8uni27F9uni27FAuni27FBuni27FCuni27FDuni27FEuni27FFuni2800uni2801uni2802uni2803uni2804uni2805uni2806uni2807uni2808uni2809uni280Auni280Buni280Cuni280Duni280Euni280Funi2810uni2811uni2812uni2813uni2814uni2815uni2816uni2817uni2818uni2819uni281Auni281Buni281Cuni281Duni281Euni281Funi2820uni2821uni2822uni2823uni2824uni2825uni2826uni2827uni2828uni2829uni282Auni282Buni282Cuni282Duni282Euni282Funi2830uni2831uni2832uni2833uni2834uni2835uni2836uni2837uni2838uni2839uni283Auni283Buni283Cuni283Duni283Euni283Funi2840uni2841uni2842uni2843uni2844uni2845uni2846uni2847uni2848uni2849uni284Auni284Buni284Cuni284Duni284Euni284Funi2850uni2851uni2852uni2853uni2854uni2855uni2856uni2857uni2858uni2859uni285Auni285Buni285Cuni285Duni285Euni285Funi2860uni2861uni2862uni2863uni2864uni2865uni2866uni2867uni2868uni2869uni286Auni286Buni286Cuni286Duni286Euni286Funi2870uni2871uni2872uni2873uni2874uni2875uni2876uni2877uni2878uni2879uni287Auni287Buni287Cuni287Duni287Euni287Funi2880uni2881uni2882uni2883uni2884uni2885uni2886uni2887uni2888uni2889uni288Auni288Buni288Cuni288Duni288Euni288Funi2890uni2891uni2892uni2893uni2894uni2895uni2896uni2897uni2898uni2899uni289Auni289Buni289Cuni289Duni289Euni289Funi28A0uni28A1uni28A2uni28A3uni28A4uni28A5uni28A6uni28A7uni28A8uni28A9uni28AAuni28ABuni28ACuni28ADuni28AEuni28AFuni28B0uni28B1uni28B2uni28B3uni28B4uni28B5uni28B6uni28B7uni28B8uni28B9uni28BAuni28BBuni28BCuni28BDuni28BEuni28BFuni28C0uni28C1uni28C2uni28C3uni28C4uni28C5uni28C6uni28C7uni28C8uni28C9uni28CAuni28CBuni28CCuni28CDuni28CEuni28CFuni28D0uni28D1uni28D2uni28D3uni28D4uni28D5uni28D6uni28D7uni28D8uni28D9uni28DAuni28DBuni28DCuni28DDuni28DEuni28DFuni28E0uni28E1uni28E2uni28E3uni28E4uni28E5uni28E6uni28E7uni28E8uni28E9uni28EAuni28EBuni28ECuni28EDuni28EEuni28EFuni28F0uni28F1uni28F2uni28F3uni28F4uni28F5uni28F6uni28F7uni28F8uni28F9uni28FAuni28FBuni28FCuni28FDuni28FEuni28FFuni2900uni2901uni2902uni2903uni2904uni2905uni2906uni2907uni2908uni2909uni290Auni290Buni290Cuni290Duni290Euni290Funi2910uni2911uni2912uni2913uni2914uni2915uni2916uni2917uni2918uni2919uni291Auni291Buni291Cuni291Duni291Euni291Funi2920uni2921uni2922uni2923uni2924uni2925uni2926uni2927uni2928uni2929uni292Auni292Buni292Cuni292Duni292Euni292Funi2930uni2931uni2932uni2933uni2934uni2935uni2936uni2937uni2938uni2939uni293Auni293Buni293Cuni293Duni293Euni293Funi2940uni2941uni2942uni2943uni2944uni2945uni2946uni2947uni2948uni2949uni294Auni294Buni294Cuni294Duni294Euni294Funi2950uni2951uni2952uni2953uni2954uni2955uni2956uni2957uni2958uni2959uni295Auni295Buni295Cuni295Duni295Euni295Funi2960uni2961uni2962uni2963uni2964uni2965uni2966uni2967uni2968uni2969uni296Auni296Buni296Cuni296Duni296Euni296Funi2970uni2971uni2972uni2973uni2974uni2975uni2976uni2977uni2978uni2979uni297Auni297Buni297Cuni297Duni297Euni297Funi29EBuni2A0Cuni2A0Duni2A0Euni2A2Funi2A6Auni2A6Buni2B00uni2B01uni2B02uni2B03uni2B04uni2B05uni2B06uni2B07uni2B08uni2B09uni2B0Auni2B0Buni2B0Cuni2B0Duni2B0Euni2B0Funi2B10uni2B11uni2B12uni2B13uni2B14uni2B15uni2B16uni2B17uni2B18uni2B19uni2B1Auni2C60uni2C61uni2C63uni2C64uni2C67uni2C68uni2C69uni2C6Auni2C6Buni2C6Cuni2C6Duni2C6Euni2C6Funi2C70uni2C71uni2C72uni2C73uni2C75uni2C76uni2C77uni2C79uni2C7Auni2C7Buni2C7Cuni2C7Duni2C7Euni2C7Funi2D00uni2D01uni2D02uni2D03uni2D04uni2D05uni2D06uni2D07uni2D08uni2D09uni2D0Auni2D0Buni2D0Cuni2D0Duni2D0Euni2D0Funi2D10uni2D11uni2D12uni2D13uni2D14uni2D15uni2D16uni2D17uni2D18uni2D19uni2D1Auni2D1Buni2D1Cuni2D1Duni2D1Euni2D1Funi2D20uni2D21uni2D22uni2D23uni2D24uni2D25uni2E18uni2E1Funi2E22uni2E23uni2E24uni2E25uni2E2EuniA644uniA645uniA646uniA647uniA650uniA651uniA654uniA655uniA656uniA657uniA698uniA699uniA708uniA709uniA70AuniA70BuniA70CuniA70DuniA70EuniA70FuniA710uniA711uniA712uniA713uniA714uniA715uniA716uniA71BuniA71CuniA71DuniA71EuniA71FuniA726uniA727uniA728uniA729uniA72AuniA72BuniA72CuniA72DuniA72EuniA72FuniA730uniA731uniA732uniA733uniA734uniA735uniA736uniA737uniA738uniA739uniA73AuniA73BuniA73CuniA73DuniA73EuniA73FuniA740uniA741uniA746uniA747uniA74AuniA74BuniA74EuniA74FuniA768uniA769uniA77BuniA77CuniA780uniA781uniA782uniA783uniA784uniA785uniA786uniA787uniA78BuniA78CuniA78DuniA790uniA791uniA7AAuniA7F8uniA7F9uniA7FAuniA7FBuniA7FCuniA7FDuniA7FEuniA7FFuniF400uniF401uniF402uniF403uniF404uniF405uniF406uniF407uniF408uniF409uniF40AuniF40BuniF40CuniF40DuniF40EuniF40FuniF410uniF411uniF412uniF413uniF414uniF415uniF416uniF417uniF418uniF419uniF41AuniF41BuniF41CuniF41DuniF41EuniF41FuniF420uniF421uniF422uniF423uniF424uniF425uniF426uniF428uniF6C5cyrBrevecyrbreveuniFB00uniFB03uniFB04uniFB05uniFB06uniFE00uniFE01uniFE02uniFE03uniFE04uniFE05uniFE06uniFE07uniFE08uniFE09uniFE0AuniFE0BuniFE0CuniFE0DuniFE0EuniFE0FuniFFF9uniFFFAuniFFFBuniFFFCuniFFFDu1D400u1D401u1D402u1D403u1D404u1D405u1D406u1D407u1D408u1D409u1D40Au1D40Bu1D40Cu1D40Du1D40Eu1D40Fu1D410u1D411u1D412u1D413u1D414u1D415u1D416u1D417u1D418u1D419u1D41Au1D41Bu1D41Cu1D41Du1D41Eu1D41Fu1D420u1D421u1D422u1D423u1D424u1D425u1D426u1D427u1D428u1D429u1D42Au1D42Bu1D42Cu1D42Du1D42Eu1D42Fu1D430u1D431u1D432u1D433u1D6A8u1D6A9u1D6AAu1D6ABu1D6ACu1D6ADu1D6AEu1D6AFu1D6B0u1D6B1u1D6B2u1D6B3u1D6B4u1D6B5u1D6B6u1D6B7u1D6B8u1D6B9u1D6BAu1D6BBu1D6BCu1D6BDu1D6BEu1D6BFu1D6C0u1D6C1u1D6C2u1D6C3u1D6C4u1D6C5u1D6C6u1D6C7u1D6C8u1D6C9u1D6CAu1D6CBu1D6CCu1D6CDu1D6CEu1D6CFu1D6D0u1D6D1u1D6D2u1D6D3u1D6D4u1D6D5u1D6D6u1D6D7u1D6D8u1D6D9u1D6DAu1D6DBu1D6DCu1D6DDu1D6DEu1D6DFu1D6E0u1D6E1u1D7CAu1D7CBu1D7CEu1D7CFu1D7D0u1D7D1u1D7D2u1D7D3u1D7D4u1D7D5u1D7D6u1D7D7	dlLtcaronDieresisAcuteTildeGrave
CircumflexCaronuni0311.caseBreve	DotaccentHungarumlautDoublegraveiogonek.dotlessuni0268.dotlessdotaccent.iuni029D.dotlessuni1E2D.dotlessuni1ECB.dotlessEng.alt
brailledotuni03080304uni03040308uni03070304uni03080301uni03080300uni03040301uni03040300uni03030304uni0308030Cuni03030308uni030C0307uni03030301uni03020301uni03020300uni03020303uni03060303uni03060301uni03060300uni03060309uni03020309uni03010307g.altEng.alt2uni01B7.altq.smcp
delta.smcp
theta.smcpxi.smcp
sigma.smcpphi.smcp
omega.smcpexclamdown.casequestiondown.caseuni2E18.casegermandbls.smcpUring.ringless
Dcroat.alt
dcroat.altuni01E4.altuni01E5.alt  @K
2ǻƻĖG}G0}
&
@7!72.+t+t]%]@%@@dtd@
2
}t}t2q@~t~}|}|{z{zy]zzyx%y]y@x%w7vtvkututsrqrqqpo.po.nmlkKj
hg
g@f!e}d@ckba}`^]][YXY-XW2VTSTSRQPQ%PPOONMN}MIMM@LL1KK2JIJ}IHG
H}G
FEF2EDEE@DCBCBA@A}@6	@@?=)?>=)>]==)<;<;:;:9
:9
878}76	776	6@5454+	43	32)2100/$)/7.!
.-,-,+	,,@+	*&*))@('('&''@&%$)%$!$)#!#"!
"! !
!  @!*@-:!}22!)k!)
!-}	-@
	
	

@@ d+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ StartFontMetrics 4.1
Notice Converted by PHP-font-lib
Comment https://github.com/PhenX/php-font-lib
EncodingScheme FontSpecific
FontName DejaVu Serif
FontSubfamily Bold
UniqueID DejaVu Serif Bold
FullName DejaVu Serif Bold
Version Version 2.37
PostScriptName DejaVuSerif-Bold
Manufacturer DejaVu fonts team
FontVendorURL http://dejavu.sourceforge.net
LicenseURL http://dejavu.sourceforge.net/wiki/index.php/License
PreferredFamily DejaVu Serif
PreferredSubfamily Bold
Weight Bold
ItalicAngle 0
IsFixedPitch false
UnderlineThickness 44
UnderlinePosition -63
FontHeightOffset 0
Ascender 939
Descender -236
FontBBox -836 -389 1854 1145
StartCharMetrics 3506
U 32 ; WX 348 ; N space ; G 3
U 33 ; WX 439 ; N exclam ; G 4
U 34 ; WX 521 ; N quotedbl ; G 5
U 35 ; WX 838 ; N numbersign ; G 6
U 36 ; WX 696 ; N dollar ; G 7
U 37 ; WX 950 ; N percent ; G 8
U 38 ; WX 903 ; N ampersand ; G 9
U 39 ; WX 306 ; N quotesingle ; G 10
U 40 ; WX 473 ; N parenleft ; G 11
U 41 ; WX 473 ; N parenright ; G 12
U 42 ; WX 523 ; N asterisk ; G 13
U 43 ; WX 838 ; N plus ; G 14
U 44 ; WX 348 ; N comma ; G 15
U 45 ; WX 415 ; N hyphen ; G 16
U 46 ; WX 348 ; N period ; G 17
U 47 ; WX 365 ; N slash ; G 18
U 48 ; WX 696 ; N zero ; G 19
U 49 ; WX 696 ; N one ; G 20
U 50 ; WX 696 ; N two ; G 21
U 51 ; WX 696 ; N three ; G 22
U 52 ; WX 696 ; N four ; G 23
U 53 ; WX 696 ; N five ; G 24
U 54 ; WX 696 ; N six ; G 25
U 55 ; WX 696 ; N seven ; G 26
U 56 ; WX 696 ; N eight ; G 27
U 57 ; WX 696 ; N nine ; G 28
U 58 ; WX 369 ; N colon ; G 29
U 59 ; WX 369 ; N semicolon ; G 30
U 60 ; WX 838 ; N less ; G 31
U 61 ; WX 838 ; N equal ; G 32
U 62 ; WX 838 ; N greater ; G 33
U 63 ; WX 586 ; N question ; G 34
U 64 ; WX 1000 ; N at ; G 35
U 65 ; WX 776 ; N A ; G 36
U 66 ; WX 845 ; N B ; G 37
U 67 ; WX 796 ; N C ; G 38
U 68 ; WX 867 ; N D ; G 39
U 69 ; WX 762 ; N E ; G 40
U 70 ; WX 710 ; N F ; G 41
U 71 ; WX 854 ; N G ; G 42
U 72 ; WX 945 ; N H ; G 43
U 73 ; WX 468 ; N I ; G 44
U 74 ; WX 473 ; N J ; G 45
U 75 ; WX 869 ; N K ; G 46
U 76 ; WX 703 ; N L ; G 47
U 77 ; WX 1107 ; N M ; G 48
U 78 ; WX 914 ; N N ; G 49
U 79 ; WX 871 ; N O ; G 50
U 80 ; WX 752 ; N P ; G 51
U 81 ; WX 871 ; N Q ; G 52
U 82 ; WX 831 ; N R ; G 53
U 83 ; WX 722 ; N S ; G 54
U 84 ; WX 744 ; N T ; G 55
U 85 ; WX 872 ; N U ; G 56
U 86 ; WX 776 ; N V ; G 57
U 87 ; WX 1123 ; N W ; G 58
U 88 ; WX 776 ; N X ; G 59
U 89 ; WX 714 ; N Y ; G 60
U 90 ; WX 730 ; N Z ; G 61
U 91 ; WX 473 ; N bracketleft ; G 62
U 92 ; WX 365 ; N backslash ; G 63
U 93 ; WX 473 ; N bracketright ; G 64
U 94 ; WX 838 ; N asciicircum ; G 65
U 95 ; WX 500 ; N underscore ; G 66
U 96 ; WX 500 ; N grave ; G 67
U 97 ; WX 648 ; N a ; G 68
U 98 ; WX 699 ; N b ; G 69
U 99 ; WX 609 ; N c ; G 70
U 100 ; WX 699 ; N d ; G 71
U 101 ; WX 636 ; N e ; G 72
U 102 ; WX 430 ; N f ; G 73
U 103 ; WX 699 ; N g ; G 74
U 104 ; WX 727 ; N h ; G 75
U 105 ; WX 380 ; N i ; G 76
U 106 ; WX 362 ; N j ; G 77
U 107 ; WX 693 ; N k ; G 78
U 108 ; WX 380 ; N l ; G 79
U 109 ; WX 1058 ; N m ; G 80
U 110 ; WX 727 ; N n ; G 81
U 111 ; WX 667 ; N o ; G 82
U 112 ; WX 699 ; N p ; G 83
U 113 ; WX 699 ; N q ; G 84
U 114 ; WX 527 ; N r ; G 85
U 115 ; WX 563 ; N s ; G 86
U 116 ; WX 462 ; N t ; G 87
U 117 ; WX 727 ; N u ; G 88
U 118 ; WX 581 ; N v ; G 89
U 119 ; WX 861 ; N w ; G 90
U 120 ; WX 596 ; N x ; G 91
U 121 ; WX 581 ; N y ; G 92
U 122 ; WX 568 ; N z ; G 93
U 123 ; WX 643 ; N braceleft ; G 94
U 124 ; WX 364 ; N bar ; G 95
U 125 ; WX 643 ; N braceright ; G 96
U 126 ; WX 838 ; N asciitilde ; G 97
U 160 ; WX 348 ; N nbspace ; G 98
U 161 ; WX 439 ; N exclamdown ; G 99
U 162 ; WX 696 ; N cent ; G 100
U 163 ; WX 696 ; N sterling ; G 101
U 164 ; WX 636 ; N currency ; G 102
U 165 ; WX 696 ; N yen ; G 103
U 166 ; WX 364 ; N brokenbar ; G 104
U 167 ; WX 523 ; N section ; G 105
U 168 ; WX 500 ; N dieresis ; G 106
U 169 ; WX 1000 ; N copyright ; G 107
U 170 ; WX 487 ; N ordfeminine ; G 108
U 171 ; WX 625 ; N guillemotleft ; G 109
U 172 ; WX 838 ; N logicalnot ; G 110
U 173 ; WX 415 ; N sfthyphen ; G 111
U 174 ; WX 1000 ; N registered ; G 112
U 175 ; WX 500 ; N macron ; G 113
U 176 ; WX 500 ; N degree ; G 114
U 177 ; WX 838 ; N plusminus ; G 115
U 178 ; WX 438 ; N twosuperior ; G 116
U 179 ; WX 438 ; N threesuperior ; G 117
U 180 ; WX 500 ; N acute ; G 118
U 181 ; WX 732 ; N mu ; G 119
U 182 ; WX 636 ; N paragraph ; G 120
U 183 ; WX 348 ; N periodcentered ; G 121
U 184 ; WX 500 ; N cedilla ; G 122
U 185 ; WX 438 ; N onesuperior ; G 123
U 186 ; WX 500 ; N ordmasculine ; G 124
U 187 ; WX 625 ; N guillemotright ; G 125
U 188 ; WX 1043 ; N onequarter ; G 126
U 189 ; WX 1043 ; N onehalf ; G 127
U 190 ; WX 1043 ; N threequarters ; G 128
U 191 ; WX 586 ; N questiondown ; G 129
U 192 ; WX 776 ; N Agrave ; G 130
U 193 ; WX 776 ; N Aacute ; G 131
U 194 ; WX 776 ; N Acircumflex ; G 132
U 195 ; WX 776 ; N Atilde ; G 133
U 196 ; WX 776 ; N Adieresis ; G 134
U 197 ; WX 776 ; N Aring ; G 135
U 198 ; WX 1034 ; N AE ; G 136
U 199 ; WX 796 ; N Ccedilla ; G 137
U 200 ; WX 762 ; N Egrave ; G 138
U 201 ; WX 762 ; N Eacute ; G 139
U 202 ; WX 762 ; N Ecircumflex ; G 140
U 203 ; WX 762 ; N Edieresis ; G 141
U 204 ; WX 468 ; N Igrave ; G 142
U 205 ; WX 468 ; N Iacute ; G 143
U 206 ; WX 468 ; N Icircumflex ; G 144
U 207 ; WX 468 ; N Idieresis ; G 145
U 208 ; WX 874 ; N Eth ; G 146
U 209 ; WX 914 ; N Ntilde ; G 147
U 210 ; WX 871 ; N Ograve ; G 148
U 211 ; WX 871 ; N Oacute ; G 149
U 212 ; WX 871 ; N Ocircumflex ; G 150
U 213 ; WX 871 ; N Otilde ; G 151
U 214 ; WX 871 ; N Odieresis ; G 152
U 215 ; WX 838 ; N multiply ; G 153
U 216 ; WX 871 ; N Oslash ; G 154
U 217 ; WX 872 ; N Ugrave ; G 155
U 218 ; WX 872 ; N Uacute ; G 156
U 219 ; WX 872 ; N Ucircumflex ; G 157
U 220 ; WX 872 ; N Udieresis ; G 158
U 221 ; WX 714 ; N Yacute ; G 159
U 222 ; WX 757 ; N Thorn ; G 160
U 223 ; WX 760 ; N germandbls ; G 161
U 224 ; WX 648 ; N agrave ; G 162
U 225 ; WX 648 ; N aacute ; G 163
U 226 ; WX 648 ; N acircumflex ; G 164
U 227 ; WX 648 ; N atilde ; G 165
U 228 ; WX 648 ; N adieresis ; G 166
U 229 ; WX 648 ; N aring ; G 167
U 230 ; WX 975 ; N ae ; G 168
U 231 ; WX 609 ; N ccedilla ; G 169
U 232 ; WX 636 ; N egrave ; G 170
U 233 ; WX 636 ; N eacute ; G 171
U 234 ; WX 636 ; N ecircumflex ; G 172
U 235 ; WX 636 ; N edieresis ; G 173
U 236 ; WX 380 ; N igrave ; G 174
U 237 ; WX 380 ; N iacute ; G 175
U 238 ; WX 380 ; N icircumflex ; G 176
U 239 ; WX 380 ; N idieresis ; G 177
U 240 ; WX 667 ; N eth ; G 178
U 241 ; WX 727 ; N ntilde ; G 179
U 242 ; WX 667 ; N ograve ; G 180
U 243 ; WX 667 ; N oacute ; G 181
U 244 ; WX 667 ; N ocircumflex ; G 182
U 245 ; WX 667 ; N otilde ; G 183
U 246 ; WX 667 ; N odieresis ; G 184
U 247 ; WX 838 ; N divide ; G 185
U 248 ; WX 667 ; N oslash ; G 186
U 249 ; WX 727 ; N ugrave ; G 187
U 250 ; WX 727 ; N uacute ; G 188
U 251 ; WX 727 ; N ucircumflex ; G 189
U 252 ; WX 727 ; N udieresis ; G 190
U 253 ; WX 581 ; N yacute ; G 191
U 254 ; WX 699 ; N thorn ; G 192
U 255 ; WX 581 ; N ydieresis ; G 193
U 256 ; WX 776 ; N Amacron ; G 194
U 257 ; WX 648 ; N amacron ; G 195
U 258 ; WX 776 ; N Abreve ; G 196
U 259 ; WX 648 ; N abreve ; G 197
U 260 ; WX 776 ; N Aogonek ; G 198
U 261 ; WX 648 ; N aogonek ; G 199
U 262 ; WX 796 ; N Cacute ; G 200
U 263 ; WX 609 ; N cacute ; G 201
U 264 ; WX 796 ; N Ccircumflex ; G 202
U 265 ; WX 609 ; N ccircumflex ; G 203
U 266 ; WX 796 ; N Cdotaccent ; G 204
U 267 ; WX 609 ; N cdotaccent ; G 205
U 268 ; WX 796 ; N Ccaron ; G 206
U 269 ; WX 609 ; N ccaron ; G 207
U 270 ; WX 867 ; N Dcaron ; G 208
U 271 ; WX 699 ; N dcaron ; G 209
U 272 ; WX 874 ; N Dcroat ; G 210
U 273 ; WX 699 ; N dmacron ; G 211
U 274 ; WX 762 ; N Emacron ; G 212
U 275 ; WX 636 ; N emacron ; G 213
U 276 ; WX 762 ; N Ebreve ; G 214
U 277 ; WX 636 ; N ebreve ; G 215
U 278 ; WX 762 ; N Edotaccent ; G 216
U 279 ; WX 636 ; N edotaccent ; G 217
U 280 ; WX 762 ; N Eogonek ; G 218
U 281 ; WX 636 ; N eogonek ; G 219
U 282 ; WX 762 ; N Ecaron ; G 220
U 283 ; WX 636 ; N ecaron ; G 221
U 284 ; WX 854 ; N Gcircumflex ; G 222
U 285 ; WX 699 ; N gcircumflex ; G 223
U 286 ; WX 854 ; N Gbreve ; G 224
U 287 ; WX 699 ; N gbreve ; G 225
U 288 ; WX 854 ; N Gdotaccent ; G 226
U 289 ; WX 699 ; N gdotaccent ; G 227
U 290 ; WX 854 ; N Gcommaaccent ; G 228
U 291 ; WX 699 ; N gcommaaccent ; G 229
U 292 ; WX 945 ; N Hcircumflex ; G 230
U 293 ; WX 727 ; N hcircumflex ; G 231
U 294 ; WX 945 ; N Hbar ; G 232
U 295 ; WX 727 ; N hbar ; G 233
U 296 ; WX 468 ; N Itilde ; G 234
U 297 ; WX 380 ; N itilde ; G 235
U 298 ; WX 468 ; N Imacron ; G 236
U 299 ; WX 380 ; N imacron ; G 237
U 300 ; WX 468 ; N Ibreve ; G 238
U 301 ; WX 380 ; N ibreve ; G 239
U 302 ; WX 468 ; N Iogonek ; G 240
U 303 ; WX 380 ; N iogonek ; G 241
U 304 ; WX 468 ; N Idot ; G 242
U 305 ; WX 380 ; N dotlessi ; G 243
U 306 ; WX 942 ; N IJ ; G 244
U 307 ; WX 751 ; N ij ; G 245
U 308 ; WX 473 ; N Jcircumflex ; G 246
U 309 ; WX 362 ; N jcircumflex ; G 247
U 310 ; WX 869 ; N Kcommaaccent ; G 248
U 311 ; WX 693 ; N kcommaaccent ; G 249
U 312 ; WX 693 ; N kgreenlandic ; G 250
U 313 ; WX 703 ; N Lacute ; G 251
U 314 ; WX 380 ; N lacute ; G 252
U 315 ; WX 703 ; N Lcommaaccent ; G 253
U 316 ; WX 380 ; N lcommaaccent ; G 254
U 317 ; WX 703 ; N Lcaron ; G 255
U 318 ; WX 380 ; N lcaron ; G 256
U 319 ; WX 703 ; N Ldot ; G 257
U 320 ; WX 380 ; N ldot ; G 258
U 321 ; WX 710 ; N Lslash ; G 259
U 322 ; WX 385 ; N lslash ; G 260
U 323 ; WX 914 ; N Nacute ; G 261
U 324 ; WX 727 ; N nacute ; G 262
U 325 ; WX 914 ; N Ncommaaccent ; G 263
U 326 ; WX 727 ; N ncommaaccent ; G 264
U 327 ; WX 914 ; N Ncaron ; G 265
U 328 ; WX 727 ; N ncaron ; G 266
U 329 ; WX 1008 ; N napostrophe ; G 267
U 330 ; WX 872 ; N Eng ; G 268
U 331 ; WX 727 ; N eng ; G 269
U 332 ; WX 871 ; N Omacron ; G 270
U 333 ; WX 667 ; N omacron ; G 271
U 334 ; WX 871 ; N Obreve ; G 272
U 335 ; WX 667 ; N obreve ; G 273
U 336 ; WX 871 ; N Ohungarumlaut ; G 274
U 337 ; WX 667 ; N ohungarumlaut ; G 275
U 338 ; WX 1180 ; N OE ; G 276
U 339 ; WX 1028 ; N oe ; G 277
U 340 ; WX 831 ; N Racute ; G 278
U 341 ; WX 527 ; N racute ; G 279
U 342 ; WX 831 ; N Rcommaaccent ; G 280
U 343 ; WX 527 ; N rcommaaccent ; G 281
U 344 ; WX 831 ; N Rcaron ; G 282
U 345 ; WX 527 ; N rcaron ; G 283
U 346 ; WX 722 ; N Sacute ; G 284
U 347 ; WX 563 ; N sacute ; G 285
U 348 ; WX 722 ; N Scircumflex ; G 286
U 349 ; WX 563 ; N scircumflex ; G 287
U 350 ; WX 722 ; N Scedilla ; G 288
U 351 ; WX 563 ; N scedilla ; G 289
U 352 ; WX 722 ; N Scaron ; G 290
U 353 ; WX 563 ; N scaron ; G 291
U 354 ; WX 744 ; N Tcommaaccent ; G 292
U 355 ; WX 462 ; N tcommaaccent ; G 293
U 356 ; WX 744 ; N Tcaron ; G 294
U 357 ; WX 462 ; N tcaron ; G 295
U 358 ; WX 744 ; N Tbar ; G 296
U 359 ; WX 462 ; N tbar ; G 297
U 360 ; WX 872 ; N Utilde ; G 298
U 361 ; WX 727 ; N utilde ; G 299
U 362 ; WX 872 ; N Umacron ; G 300
U 363 ; WX 727 ; N umacron ; G 301
U 364 ; WX 872 ; N Ubreve ; G 302
U 365 ; WX 727 ; N ubreve ; G 303
U 366 ; WX 872 ; N Uring ; G 304
U 367 ; WX 727 ; N uring ; G 305
U 368 ; WX 872 ; N Uhungarumlaut ; G 306
U 369 ; WX 727 ; N uhungarumlaut ; G 307
U 370 ; WX 872 ; N Uogonek ; G 308
U 371 ; WX 727 ; N uogonek ; G 309
U 372 ; WX 1123 ; N Wcircumflex ; G 310
U 373 ; WX 861 ; N wcircumflex ; G 311
U 374 ; WX 714 ; N Ycircumflex ; G 312
U 375 ; WX 581 ; N ycircumflex ; G 313
U 376 ; WX 714 ; N Ydieresis ; G 314
U 377 ; WX 730 ; N Zacute ; G 315
U 378 ; WX 568 ; N zacute ; G 316
U 379 ; WX 730 ; N Zdotaccent ; G 317
U 380 ; WX 568 ; N zdotaccent ; G 318
U 381 ; WX 730 ; N Zcaron ; G 319
U 382 ; WX 568 ; N zcaron ; G 320
U 383 ; WX 430 ; N longs ; G 321
U 384 ; WX 699 ; N uni0180 ; G 322
U 385 ; WX 845 ; N uni0181 ; G 323
U 386 ; WX 854 ; N uni0182 ; G 324
U 387 ; WX 699 ; N uni0183 ; G 325
U 388 ; WX 854 ; N uni0184 ; G 326
U 389 ; WX 699 ; N uni0185 ; G 327
U 390 ; WX 796 ; N uni0186 ; G 328
U 391 ; WX 796 ; N uni0187 ; G 329
U 392 ; WX 609 ; N uni0188 ; G 330
U 393 ; WX 874 ; N uni0189 ; G 331
U 394 ; WX 867 ; N uni018A ; G 332
U 395 ; WX 854 ; N uni018B ; G 333
U 396 ; WX 699 ; N uni018C ; G 334
U 397 ; WX 667 ; N uni018D ; G 335
U 398 ; WX 762 ; N uni018E ; G 336
U 399 ; WX 871 ; N uni018F ; G 337
U 400 ; WX 721 ; N uni0190 ; G 338
U 401 ; WX 710 ; N uni0191 ; G 339
U 402 ; WX 430 ; N florin ; G 340
U 403 ; WX 854 ; N uni0193 ; G 341
U 404 ; WX 771 ; N uni0194 ; G 342
U 405 ; WX 1043 ; N uni0195 ; G 343
U 406 ; WX 468 ; N uni0196 ; G 344
U 407 ; WX 468 ; N uni0197 ; G 345
U 408 ; WX 869 ; N uni0198 ; G 346
U 409 ; WX 693 ; N uni0199 ; G 347
U 410 ; WX 380 ; N uni019A ; G 348
U 411 ; WX 701 ; N uni019B ; G 349
U 412 ; WX 1058 ; N uni019C ; G 350
U 413 ; WX 914 ; N uni019D ; G 351
U 414 ; WX 727 ; N uni019E ; G 352
U 415 ; WX 871 ; N uni019F ; G 353
U 416 ; WX 871 ; N Ohorn ; G 354
U 417 ; WX 667 ; N ohorn ; G 355
U 418 ; WX 1200 ; N uni01A2 ; G 356
U 419 ; WX 943 ; N uni01A3 ; G 357
U 420 ; WX 752 ; N uni01A4 ; G 358
U 421 ; WX 699 ; N uni01A5 ; G 359
U 422 ; WX 831 ; N uni01A6 ; G 360
U 423 ; WX 722 ; N uni01A7 ; G 361
U 424 ; WX 563 ; N uni01A8 ; G 362
U 425 ; WX 707 ; N uni01A9 ; G 363
U 426 ; WX 331 ; N uni01AA ; G 364
U 427 ; WX 462 ; N uni01AB ; G 365
U 428 ; WX 744 ; N uni01AC ; G 366
U 429 ; WX 462 ; N uni01AD ; G 367
U 430 ; WX 744 ; N uni01AE ; G 368
U 431 ; WX 872 ; N Uhorn ; G 369
U 432 ; WX 727 ; N uhorn ; G 370
U 433 ; WX 890 ; N uni01B1 ; G 371
U 434 ; WX 890 ; N uni01B2 ; G 372
U 435 ; WX 714 ; N uni01B3 ; G 373
U 436 ; WX 708 ; N uni01B4 ; G 374
U 437 ; WX 730 ; N uni01B5 ; G 375
U 438 ; WX 568 ; N uni01B6 ; G 376
U 439 ; WX 657 ; N uni01B7 ; G 377
U 440 ; WX 657 ; N uni01B8 ; G 378
U 441 ; WX 657 ; N uni01B9 ; G 379
U 442 ; WX 657 ; N uni01BA ; G 380
U 443 ; WX 696 ; N uni01BB ; G 381
U 444 ; WX 754 ; N uni01BC ; G 382
U 445 ; WX 568 ; N uni01BD ; G 383
U 446 ; WX 536 ; N uni01BE ; G 384
U 447 ; WX 716 ; N uni01BF ; G 385
U 448 ; WX 295 ; N uni01C0 ; G 386
U 449 ; WX 492 ; N uni01C1 ; G 387
U 450 ; WX 459 ; N uni01C2 ; G 388
U 451 ; WX 295 ; N uni01C3 ; G 389
U 452 ; WX 1597 ; N uni01C4 ; G 390
U 453 ; WX 1435 ; N uni01C5 ; G 391
U 454 ; WX 1267 ; N uni01C6 ; G 392
U 455 ; WX 1176 ; N uni01C7 ; G 393
U 456 ; WX 1065 ; N uni01C8 ; G 394
U 457 ; WX 742 ; N uni01C9 ; G 395
U 458 ; WX 1387 ; N uni01CA ; G 396
U 459 ; WX 1276 ; N uni01CB ; G 397
U 460 ; WX 1089 ; N uni01CC ; G 398
U 461 ; WX 776 ; N uni01CD ; G 399
U 462 ; WX 648 ; N uni01CE ; G 400
U 463 ; WX 468 ; N uni01CF ; G 401
U 464 ; WX 380 ; N uni01D0 ; G 402
U 465 ; WX 871 ; N uni01D1 ; G 403
U 466 ; WX 667 ; N uni01D2 ; G 404
U 467 ; WX 872 ; N uni01D3 ; G 405
U 468 ; WX 727 ; N uni01D4 ; G 406
U 469 ; WX 872 ; N uni01D5 ; G 407
U 470 ; WX 727 ; N uni01D6 ; G 408
U 471 ; WX 872 ; N uni01D7 ; G 409
U 472 ; WX 727 ; N uni01D8 ; G 410
U 473 ; WX 872 ; N uni01D9 ; G 411
U 474 ; WX 727 ; N uni01DA ; G 412
U 475 ; WX 872 ; N uni01DB ; G 413
U 476 ; WX 727 ; N uni01DC ; G 414
U 477 ; WX 636 ; N uni01DD ; G 415
U 478 ; WX 776 ; N uni01DE ; G 416
U 479 ; WX 648 ; N uni01DF ; G 417
U 480 ; WX 776 ; N uni01E0 ; G 418
U 481 ; WX 648 ; N uni01E1 ; G 419
U 482 ; WX 1034 ; N uni01E2 ; G 420
U 483 ; WX 975 ; N uni01E3 ; G 421
U 484 ; WX 896 ; N uni01E4 ; G 422
U 485 ; WX 699 ; N uni01E5 ; G 423
U 486 ; WX 854 ; N Gcaron ; G 424
U 487 ; WX 699 ; N gcaron ; G 425
U 488 ; WX 869 ; N uni01E8 ; G 426
U 489 ; WX 693 ; N uni01E9 ; G 427
U 490 ; WX 871 ; N uni01EA ; G 428
U 491 ; WX 667 ; N uni01EB ; G 429
U 492 ; WX 871 ; N uni01EC ; G 430
U 493 ; WX 667 ; N uni01ED ; G 431
U 494 ; WX 657 ; N uni01EE ; G 432
U 495 ; WX 568 ; N uni01EF ; G 433
U 496 ; WX 380 ; N uni01F0 ; G 434
U 497 ; WX 1597 ; N uni01F1 ; G 435
U 498 ; WX 1435 ; N uni01F2 ; G 436
U 499 ; WX 1267 ; N uni01F3 ; G 437
U 500 ; WX 854 ; N uni01F4 ; G 438
U 501 ; WX 699 ; N uni01F5 ; G 439
U 502 ; WX 1221 ; N uni01F6 ; G 440
U 503 ; WX 787 ; N uni01F7 ; G 441
U 504 ; WX 914 ; N uni01F8 ; G 442
U 505 ; WX 727 ; N uni01F9 ; G 443
U 506 ; WX 776 ; N Aringacute ; G 444
U 507 ; WX 648 ; N aringacute ; G 445
U 508 ; WX 1034 ; N AEacute ; G 446
U 509 ; WX 975 ; N aeacute ; G 447
U 510 ; WX 871 ; N Oslashacute ; G 448
U 511 ; WX 667 ; N oslashacute ; G 449
U 512 ; WX 776 ; N uni0200 ; G 450
U 513 ; WX 648 ; N uni0201 ; G 451
U 514 ; WX 776 ; N uni0202 ; G 452
U 515 ; WX 648 ; N uni0203 ; G 453
U 516 ; WX 762 ; N uni0204 ; G 454
U 517 ; WX 636 ; N uni0205 ; G 455
U 518 ; WX 762 ; N uni0206 ; G 456
U 519 ; WX 636 ; N uni0207 ; G 457
U 520 ; WX 468 ; N uni0208 ; G 458
U 521 ; WX 380 ; N uni0209 ; G 459
U 522 ; WX 468 ; N uni020A ; G 460
U 523 ; WX 380 ; N uni020B ; G 461
U 524 ; WX 871 ; N uni020C ; G 462
U 525 ; WX 667 ; N uni020D ; G 463
U 526 ; WX 871 ; N uni020E ; G 464
U 527 ; WX 667 ; N uni020F ; G 465
U 528 ; WX 831 ; N uni0210 ; G 466
U 529 ; WX 527 ; N uni0211 ; G 467
U 530 ; WX 831 ; N uni0212 ; G 468
U 531 ; WX 527 ; N uni0213 ; G 469
U 532 ; WX 872 ; N uni0214 ; G 470
U 533 ; WX 727 ; N uni0215 ; G 471
U 534 ; WX 872 ; N uni0216 ; G 472
U 535 ; WX 727 ; N uni0217 ; G 473
U 536 ; WX 722 ; N Scommaaccent ; G 474
U 537 ; WX 563 ; N scommaaccent ; G 475
U 538 ; WX 744 ; N uni021A ; G 476
U 539 ; WX 462 ; N uni021B ; G 477
U 540 ; WX 690 ; N uni021C ; G 478
U 541 ; WX 607 ; N uni021D ; G 479
U 542 ; WX 945 ; N uni021E ; G 480
U 543 ; WX 727 ; N uni021F ; G 481
U 544 ; WX 872 ; N uni0220 ; G 482
U 545 ; WX 791 ; N uni0221 ; G 483
U 546 ; WX 703 ; N uni0222 ; G 484
U 547 ; WX 616 ; N uni0223 ; G 485
U 548 ; WX 730 ; N uni0224 ; G 486
U 549 ; WX 568 ; N uni0225 ; G 487
U 550 ; WX 776 ; N uni0226 ; G 488
U 551 ; WX 648 ; N uni0227 ; G 489
U 552 ; WX 762 ; N uni0228 ; G 490
U 553 ; WX 636 ; N uni0229 ; G 491
U 554 ; WX 871 ; N uni022A ; G 492
U 555 ; WX 667 ; N uni022B ; G 493
U 556 ; WX 871 ; N uni022C ; G 494
U 557 ; WX 667 ; N uni022D ; G 495
U 558 ; WX 871 ; N uni022E ; G 496
U 559 ; WX 667 ; N uni022F ; G 497
U 560 ; WX 871 ; N uni0230 ; G 498
U 561 ; WX 667 ; N uni0231 ; G 499
U 562 ; WX 714 ; N uni0232 ; G 500
U 563 ; WX 581 ; N uni0233 ; G 501
U 564 ; WX 573 ; N uni0234 ; G 502
U 565 ; WX 922 ; N uni0235 ; G 503
U 566 ; WX 564 ; N uni0236 ; G 504
U 567 ; WX 362 ; N dotlessj ; G 505
U 568 ; WX 1031 ; N uni0238 ; G 506
U 569 ; WX 1031 ; N uni0239 ; G 507
U 570 ; WX 776 ; N uni023A ; G 508
U 571 ; WX 796 ; N uni023B ; G 509
U 572 ; WX 609 ; N uni023C ; G 510
U 573 ; WX 703 ; N uni023D ; G 511
U 574 ; WX 744 ; N uni023E ; G 512
U 575 ; WX 563 ; N uni023F ; G 513
U 576 ; WX 568 ; N uni0240 ; G 514
U 577 ; WX 660 ; N uni0241 ; G 515
U 578 ; WX 547 ; N uni0242 ; G 516
U 579 ; WX 845 ; N uni0243 ; G 517
U 580 ; WX 872 ; N uni0244 ; G 518
U 581 ; WX 776 ; N uni0245 ; G 519
U 582 ; WX 762 ; N uni0246 ; G 520
U 583 ; WX 636 ; N uni0247 ; G 521
U 584 ; WX 473 ; N uni0248 ; G 522
U 585 ; WX 387 ; N uni0249 ; G 523
U 586 ; WX 848 ; N uni024A ; G 524
U 587 ; WX 699 ; N uni024B ; G 525
U 588 ; WX 831 ; N uni024C ; G 526
U 589 ; WX 527 ; N uni024D ; G 527
U 590 ; WX 714 ; N uni024E ; G 528
U 591 ; WX 581 ; N uni024F ; G 529
U 592 ; WX 648 ; N uni0250 ; G 530
U 593 ; WX 699 ; N uni0251 ; G 531
U 594 ; WX 699 ; N uni0252 ; G 532
U 595 ; WX 699 ; N uni0253 ; G 533
U 596 ; WX 609 ; N uni0254 ; G 534
U 597 ; WX 609 ; N uni0255 ; G 535
U 598 ; WX 699 ; N uni0256 ; G 536
U 599 ; WX 730 ; N uni0257 ; G 537
U 600 ; WX 636 ; N uni0258 ; G 538
U 601 ; WX 636 ; N uni0259 ; G 539
U 602 ; WX 907 ; N uni025A ; G 540
U 603 ; WX 608 ; N uni025B ; G 541
U 604 ; WX 562 ; N uni025C ; G 542
U 605 ; WX 907 ; N uni025D ; G 543
U 606 ; WX 714 ; N uni025E ; G 544
U 607 ; WX 387 ; N uni025F ; G 545
U 608 ; WX 699 ; N uni0260 ; G 546
U 609 ; WX 699 ; N uni0261 ; G 547
U 610 ; WX 638 ; N uni0262 ; G 548
U 611 ; WX 601 ; N uni0263 ; G 549
U 612 ; WX 627 ; N uni0264 ; G 550
U 613 ; WX 727 ; N uni0265 ; G 551
U 614 ; WX 727 ; N uni0266 ; G 552
U 615 ; WX 727 ; N uni0267 ; G 553
U 616 ; WX 380 ; N uni0268 ; G 554
U 617 ; WX 380 ; N uni0269 ; G 555
U 618 ; WX 380 ; N uni026A ; G 556
U 619 ; WX 409 ; N uni026B ; G 557
U 620 ; WX 514 ; N uni026C ; G 558
U 621 ; WX 380 ; N uni026D ; G 559
U 622 ; WX 795 ; N uni026E ; G 560
U 623 ; WX 1058 ; N uni026F ; G 561
U 624 ; WX 1058 ; N uni0270 ; G 562
U 625 ; WX 1058 ; N uni0271 ; G 563
U 626 ; WX 727 ; N uni0272 ; G 564
U 627 ; WX 727 ; N uni0273 ; G 565
U 628 ; WX 712 ; N uni0274 ; G 566
U 629 ; WX 667 ; N uni0275 ; G 567
U 630 ; WX 1061 ; N uni0276 ; G 568
U 631 ; WX 944 ; N uni0277 ; G 569
U 632 ; WX 797 ; N uni0278 ; G 570
U 633 ; WX 571 ; N uni0279 ; G 571
U 634 ; WX 571 ; N uni027A ; G 572
U 635 ; WX 571 ; N uni027B ; G 573
U 636 ; WX 527 ; N uni027C ; G 574
U 637 ; WX 527 ; N uni027D ; G 575
U 638 ; WX 452 ; N uni027E ; G 576
U 639 ; WX 487 ; N uni027F ; G 577
U 640 ; WX 694 ; N uni0280 ; G 578
U 641 ; WX 694 ; N uni0281 ; G 579
U 642 ; WX 563 ; N uni0282 ; G 580
U 643 ; WX 331 ; N uni0283 ; G 581
U 644 ; WX 430 ; N uni0284 ; G 582
U 645 ; WX 540 ; N uni0285 ; G 583
U 646 ; WX 331 ; N uni0286 ; G 584
U 647 ; WX 492 ; N uni0287 ; G 585
U 648 ; WX 462 ; N uni0288 ; G 586
U 649 ; WX 727 ; N uni0289 ; G 587
U 650 ; WX 679 ; N uni028A ; G 588
U 651 ; WX 694 ; N uni028B ; G 589
U 652 ; WX 641 ; N uni028C ; G 590
U 653 ; WX 907 ; N uni028D ; G 591
U 654 ; WX 635 ; N uni028E ; G 592
U 655 ; WX 727 ; N uni028F ; G 593
U 656 ; WX 568 ; N uni0290 ; G 594
U 657 ; WX 568 ; N uni0291 ; G 595
U 658 ; WX 568 ; N uni0292 ; G 596
U 659 ; WX 568 ; N uni0293 ; G 597
U 660 ; WX 551 ; N uni0294 ; G 598
U 661 ; WX 551 ; N uni0295 ; G 599
U 662 ; WX 551 ; N uni0296 ; G 600
U 663 ; WX 545 ; N uni0297 ; G 601
U 664 ; WX 871 ; N uni0298 ; G 602
U 665 ; WX 695 ; N uni0299 ; G 603
U 666 ; WX 714 ; N uni029A ; G 604
U 667 ; WX 689 ; N uni029B ; G 605
U 668 ; WX 732 ; N uni029C ; G 606
U 669 ; WX 384 ; N uni029D ; G 607
U 670 ; WX 740 ; N uni029E ; G 608
U 671 ; WX 617 ; N uni029F ; G 609
U 672 ; WX 699 ; N uni02A0 ; G 610
U 673 ; WX 551 ; N uni02A1 ; G 611
U 674 ; WX 551 ; N uni02A2 ; G 612
U 675 ; WX 1117 ; N uni02A3 ; G 613
U 676 ; WX 1179 ; N uni02A4 ; G 614
U 677 ; WX 1117 ; N uni02A5 ; G 615
U 678 ; WX 938 ; N uni02A6 ; G 616
U 679 ; WX 715 ; N uni02A7 ; G 617
U 680 ; WX 946 ; N uni02A8 ; G 618
U 681 ; WX 1039 ; N uni02A9 ; G 619
U 682 ; WX 870 ; N uni02AA ; G 620
U 683 ; WX 795 ; N uni02AB ; G 621
U 684 ; WX 662 ; N uni02AC ; G 622
U 685 ; WX 443 ; N uni02AD ; G 623
U 686 ; WX 613 ; N uni02AE ; G 624
U 687 ; WX 717 ; N uni02AF ; G 625
U 688 ; WX 521 ; N uni02B0 ; G 626
U 689 ; WX 519 ; N uni02B1 ; G 627
U 690 ; WX 313 ; N uni02B2 ; G 628
U 691 ; WX 414 ; N uni02B3 ; G 629
U 692 ; WX 414 ; N uni02B4 ; G 630
U 693 ; WX 480 ; N uni02B5 ; G 631
U 694 ; WX 527 ; N uni02B6 ; G 632
U 695 ; WX 662 ; N uni02B7 ; G 633
U 696 ; WX 485 ; N uni02B8 ; G 634
U 697 ; WX 302 ; N uni02B9 ; G 635
U 698 ; WX 521 ; N uni02BA ; G 636
U 699 ; WX 348 ; N uni02BB ; G 637
U 700 ; WX 348 ; N uni02BC ; G 638
U 701 ; WX 348 ; N uni02BD ; G 639
U 702 ; WX 366 ; N uni02BE ; G 640
U 703 ; WX 366 ; N uni02BF ; G 641
U 704 ; WX 313 ; N uni02C0 ; G 642
U 705 ; WX 313 ; N uni02C1 ; G 643
U 706 ; WX 500 ; N uni02C2 ; G 644
U 707 ; WX 500 ; N uni02C3 ; G 645
U 708 ; WX 500 ; N uni02C4 ; G 646
U 709 ; WX 500 ; N uni02C5 ; G 647
U 710 ; WX 500 ; N circumflex ; G 648
U 711 ; WX 500 ; N caron ; G 649
U 712 ; WX 282 ; N uni02C8 ; G 650
U 713 ; WX 500 ; N uni02C9 ; G 651
U 714 ; WX 500 ; N uni02CA ; G 652
U 715 ; WX 500 ; N uni02CB ; G 653
U 716 ; WX 282 ; N uni02CC ; G 654
U 717 ; WX 500 ; N uni02CD ; G 655
U 720 ; WX 369 ; N uni02D0 ; G 656
U 721 ; WX 369 ; N uni02D1 ; G 657
U 722 ; WX 366 ; N uni02D2 ; G 658
U 723 ; WX 366 ; N uni02D3 ; G 659
U 726 ; WX 392 ; N uni02D6 ; G 660
U 727 ; WX 392 ; N uni02D7 ; G 661
U 728 ; WX 500 ; N breve ; G 662
U 729 ; WX 500 ; N dotaccent ; G 663
U 730 ; WX 500 ; N ring ; G 664
U 731 ; WX 500 ; N ogonek ; G 665
U 732 ; WX 500 ; N tilde ; G 666
U 733 ; WX 500 ; N hungarumlaut ; G 667
U 734 ; WX 417 ; N uni02DE ; G 668
U 736 ; WX 378 ; N uni02E0 ; G 669
U 737 ; WX 292 ; N uni02E1 ; G 670
U 738 ; WX 395 ; N uni02E2 ; G 671
U 739 ; WX 475 ; N uni02E3 ; G 672
U 740 ; WX 313 ; N uni02E4 ; G 673
U 741 ; WX 500 ; N uni02E5 ; G 674
U 742 ; WX 500 ; N uni02E6 ; G 675
U 743 ; WX 500 ; N uni02E7 ; G 676
U 744 ; WX 500 ; N uni02E8 ; G 677
U 745 ; WX 500 ; N uni02E9 ; G 678
U 748 ; WX 500 ; N uni02EC ; G 679
U 750 ; WX 553 ; N uni02EE ; G 680
U 751 ; WX 500 ; N uni02EF ; G 681
U 752 ; WX 500 ; N uni02F0 ; G 682
U 755 ; WX 500 ; N uni02F3 ; G 683
U 759 ; WX 500 ; N uni02F7 ; G 684
U 768 ; WX 0 ; N gravecomb ; G 685
U 769 ; WX 0 ; N acutecomb ; G 686
U 770 ; WX 0 ; N uni0302 ; G 687
U 771 ; WX 0 ; N tildecomb ; G 688
U 772 ; WX 0 ; N uni0304 ; G 689
U 773 ; WX 0 ; N uni0305 ; G 690
U 774 ; WX 0 ; N uni0306 ; G 691
U 775 ; WX 0 ; N uni0307 ; G 692
U 776 ; WX 0 ; N uni0308 ; G 693
U 777 ; WX 0 ; N hookabovecomb ; G 694
U 778 ; WX 0 ; N uni030A ; G 695
U 779 ; WX 0 ; N uni030B ; G 696
U 780 ; WX 0 ; N uni030C ; G 697
U 781 ; WX 0 ; N uni030D ; G 698
U 782 ; WX 0 ; N uni030E ; G 699
U 783 ; WX 0 ; N uni030F ; G 700
U 784 ; WX 0 ; N uni0310 ; G 701
U 785 ; WX 0 ; N uni0311 ; G 702
U 786 ; WX 0 ; N uni0312 ; G 703
U 787 ; WX 0 ; N uni0313 ; G 704
U 788 ; WX 0 ; N uni0314 ; G 705
U 789 ; WX 0 ; N uni0315 ; G 706
U 790 ; WX 0 ; N uni0316 ; G 707
U 791 ; WX 0 ; N uni0317 ; G 708
U 792 ; WX 0 ; N uni0318 ; G 709
U 793 ; WX 0 ; N uni0319 ; G 710
U 794 ; WX 0 ; N uni031A ; G 711
U 795 ; WX 0 ; N uni031B ; G 712
U 796 ; WX 0 ; N uni031C ; G 713
U 797 ; WX 0 ; N uni031D ; G 714
U 798 ; WX 0 ; N uni031E ; G 715
U 799 ; WX 0 ; N uni031F ; G 716
U 800 ; WX 0 ; N uni0320 ; G 717
U 801 ; WX 0 ; N uni0321 ; G 718
U 802 ; WX 0 ; N uni0322 ; G 719
U 803 ; WX 0 ; N dotbelowcomb ; G 720
U 804 ; WX 0 ; N uni0324 ; G 721
U 805 ; WX 0 ; N uni0325 ; G 722
U 806 ; WX 0 ; N uni0326 ; G 723
U 807 ; WX 0 ; N uni0327 ; G 724
U 808 ; WX 0 ; N uni0328 ; G 725
U 809 ; WX 0 ; N uni0329 ; G 726
U 810 ; WX 0 ; N uni032A ; G 727
U 811 ; WX 0 ; N uni032B ; G 728
U 812 ; WX 0 ; N uni032C ; G 729
U 813 ; WX 0 ; N uni032D ; G 730
U 814 ; WX 0 ; N uni032E ; G 731
U 815 ; WX 0 ; N uni032F ; G 732
U 816 ; WX 0 ; N uni0330 ; G 733
U 817 ; WX 0 ; N uni0331 ; G 734
U 818 ; WX 0 ; N uni0332 ; G 735
U 819 ; WX 0 ; N uni0333 ; G 736
U 820 ; WX 0 ; N uni0334 ; G 737
U 821 ; WX 0 ; N uni0335 ; G 738
U 822 ; WX 0 ; N uni0336 ; G 739
U 823 ; WX 0 ; N uni0337 ; G 740
U 824 ; WX 0 ; N uni0338 ; G 741
U 825 ; WX 0 ; N uni0339 ; G 742
U 826 ; WX 0 ; N uni033A ; G 743
U 827 ; WX 0 ; N uni033B ; G 744
U 828 ; WX 0 ; N uni033C ; G 745
U 829 ; WX 0 ; N uni033D ; G 746
U 830 ; WX 0 ; N uni033E ; G 747
U 831 ; WX 0 ; N uni033F ; G 748
U 835 ; WX 0 ; N uni0343 ; G 749
U 847 ; WX 0 ; N uni034F ; G 750
U 856 ; WX 0 ; N uni0358 ; G 751
U 864 ; WX 0 ; N uni0360 ; G 752
U 865 ; WX 0 ; N uni0361 ; G 753
U 880 ; WX 779 ; N uni0370 ; G 754
U 881 ; WX 576 ; N uni0371 ; G 755
U 882 ; WX 803 ; N uni0372 ; G 756
U 883 ; WX 777 ; N uni0373 ; G 757
U 884 ; WX 302 ; N uni0374 ; G 758
U 885 ; WX 302 ; N uni0375 ; G 759
U 886 ; WX 963 ; N uni0376 ; G 760
U 887 ; WX 737 ; N uni0377 ; G 761
U 890 ; WX 500 ; N uni037A ; G 762
U 891 ; WX 609 ; N uni037B ; G 763
U 892 ; WX 609 ; N uni037C ; G 764
U 893 ; WX 609 ; N uni037D ; G 765
U 894 ; WX 369 ; N uni037E ; G 766
U 895 ; WX 473 ; N uni037F ; G 767
U 900 ; WX 500 ; N tonos ; G 768
U 901 ; WX 500 ; N dieresistonos ; G 769
U 902 ; WX 776 ; N Alphatonos ; G 770
U 903 ; WX 348 ; N anoteleia ; G 771
U 904 ; WX 947 ; N Epsilontonos ; G 772
U 905 ; WX 1118 ; N Etatonos ; G 773
U 906 ; WX 662 ; N Iotatonos ; G 774
U 908 ; WX 887 ; N Omicrontonos ; G 775
U 910 ; WX 953 ; N Upsilontonos ; G 776
U 911 ; WX 911 ; N Omegatonos ; G 777
U 912 ; WX 484 ; N iotadieresistonos ; G 778
U 913 ; WX 776 ; N Alpha ; G 779
U 914 ; WX 845 ; N Beta ; G 780
U 915 ; WX 710 ; N Gamma ; G 781
U 916 ; WX 776 ; N uni0394 ; G 782
U 917 ; WX 762 ; N Epsilon ; G 783
U 918 ; WX 730 ; N Zeta ; G 784
U 919 ; WX 945 ; N Eta ; G 785
U 920 ; WX 871 ; N Theta ; G 786
U 921 ; WX 468 ; N Iota ; G 787
U 922 ; WX 869 ; N Kappa ; G 788
U 923 ; WX 776 ; N Lambda ; G 789
U 924 ; WX 1107 ; N Mu ; G 790
U 925 ; WX 914 ; N Nu ; G 791
U 926 ; WX 704 ; N Xi ; G 792
U 927 ; WX 871 ; N Omicron ; G 793
U 928 ; WX 944 ; N Pi ; G 794
U 929 ; WX 752 ; N Rho ; G 795
U 931 ; WX 707 ; N Sigma ; G 796
U 932 ; WX 744 ; N Tau ; G 797
U 933 ; WX 714 ; N Upsilon ; G 798
U 934 ; WX 871 ; N Phi ; G 799
U 935 ; WX 776 ; N Chi ; G 800
U 936 ; WX 913 ; N Psi ; G 801
U 937 ; WX 890 ; N Omega ; G 802
U 938 ; WX 468 ; N Iotadieresis ; G 803
U 939 ; WX 714 ; N Upsilondieresis ; G 804
U 940 ; WX 770 ; N alphatonos ; G 805
U 941 ; WX 608 ; N epsilontonos ; G 806
U 942 ; WX 727 ; N etatonos ; G 807
U 943 ; WX 484 ; N iotatonos ; G 808
U 944 ; WX 694 ; N upsilondieresistonos ; G 809
U 945 ; WX 770 ; N alpha ; G 810
U 946 ; WX 664 ; N beta ; G 811
U 947 ; WX 660 ; N gamma ; G 812
U 948 ; WX 667 ; N delta ; G 813
U 949 ; WX 608 ; N epsilon ; G 814
U 950 ; WX 592 ; N zeta ; G 815
U 951 ; WX 727 ; N eta ; G 816
U 952 ; WX 667 ; N theta ; G 817
U 953 ; WX 484 ; N iota ; G 818
U 954 ; WX 750 ; N kappa ; G 819
U 955 ; WX 701 ; N lambda ; G 820
U 956 ; WX 732 ; N uni03BC ; G 821
U 957 ; WX 694 ; N nu ; G 822
U 958 ; WX 592 ; N xi ; G 823
U 959 ; WX 667 ; N omicron ; G 824
U 960 ; WX 732 ; N pi ; G 825
U 961 ; WX 665 ; N rho ; G 826
U 962 ; WX 609 ; N sigma1 ; G 827
U 963 ; WX 737 ; N sigma ; G 828
U 964 ; WX 673 ; N tau ; G 829
U 965 ; WX 694 ; N upsilon ; G 830
U 966 ; WX 905 ; N phi ; G 831
U 967 ; WX 658 ; N chi ; G 832
U 968 ; WX 941 ; N psi ; G 833
U 969 ; WX 952 ; N omega ; G 834
U 970 ; WX 484 ; N iotadieresis ; G 835
U 971 ; WX 694 ; N upsilondieresis ; G 836
U 972 ; WX 667 ; N omicrontonos ; G 837
U 973 ; WX 694 ; N upsilontonos ; G 838
U 974 ; WX 952 ; N omegatonos ; G 839
U 975 ; WX 869 ; N uni03CF ; G 840
U 976 ; WX 667 ; N uni03D0 ; G 841
U 977 ; WX 849 ; N theta1 ; G 842
U 978 ; WX 764 ; N Upsilon1 ; G 843
U 979 ; WX 969 ; N uni03D3 ; G 844
U 980 ; WX 764 ; N uni03D4 ; G 845
U 981 ; WX 941 ; N phi1 ; G 846
U 982 ; WX 952 ; N omega1 ; G 847
U 983 ; WX 655 ; N uni03D7 ; G 848
U 984 ; WX 871 ; N uni03D8 ; G 849
U 985 ; WX 667 ; N uni03D9 ; G 850
U 986 ; WX 796 ; N uni03DA ; G 851
U 987 ; WX 609 ; N uni03DB ; G 852
U 988 ; WX 710 ; N uni03DC ; G 853
U 989 ; WX 527 ; N uni03DD ; G 854
U 990 ; WX 590 ; N uni03DE ; G 855
U 991 ; WX 660 ; N uni03DF ; G 856
U 992 ; WX 796 ; N uni03E0 ; G 857
U 993 ; WX 667 ; N uni03E1 ; G 858
U 1008 ; WX 655 ; N uni03F0 ; G 859
U 1009 ; WX 665 ; N uni03F1 ; G 860
U 1010 ; WX 609 ; N uni03F2 ; G 861
U 1011 ; WX 362 ; N uni03F3 ; G 862
U 1012 ; WX 871 ; N uni03F4 ; G 863
U 1013 ; WX 609 ; N uni03F5 ; G 864
U 1014 ; WX 609 ; N uni03F6 ; G 865
U 1015 ; WX 757 ; N uni03F7 ; G 866
U 1016 ; WX 699 ; N uni03F8 ; G 867
U 1017 ; WX 796 ; N uni03F9 ; G 868
U 1018 ; WX 1107 ; N uni03FA ; G 869
U 1019 ; WX 860 ; N uni03FB ; G 870
U 1020 ; WX 692 ; N uni03FC ; G 871
U 1021 ; WX 796 ; N uni03FD ; G 872
U 1022 ; WX 796 ; N uni03FE ; G 873
U 1023 ; WX 796 ; N uni03FF ; G 874
U 1024 ; WX 762 ; N uni0400 ; G 875
U 1025 ; WX 762 ; N uni0401 ; G 876
U 1026 ; WX 901 ; N uni0402 ; G 877
U 1027 ; WX 690 ; N uni0403 ; G 878
U 1028 ; WX 795 ; N uni0404 ; G 879
U 1029 ; WX 722 ; N uni0405 ; G 880
U 1030 ; WX 468 ; N uni0406 ; G 881
U 1031 ; WX 468 ; N uni0407 ; G 882
U 1032 ; WX 473 ; N uni0408 ; G 883
U 1033 ; WX 1202 ; N uni0409 ; G 884
U 1034 ; WX 1262 ; N uni040A ; G 885
U 1035 ; WX 963 ; N uni040B ; G 886
U 1036 ; WX 910 ; N uni040C ; G 887
U 1037 ; WX 945 ; N uni040D ; G 888
U 1038 ; WX 812 ; N uni040E ; G 889
U 1039 ; WX 945 ; N uni040F ; G 890
U 1040 ; WX 814 ; N uni0410 ; G 891
U 1041 ; WX 854 ; N uni0411 ; G 892
U 1042 ; WX 845 ; N uni0412 ; G 893
U 1043 ; WX 690 ; N uni0413 ; G 894
U 1044 ; WX 889 ; N uni0414 ; G 895
U 1045 ; WX 762 ; N uni0415 ; G 896
U 1046 ; WX 1312 ; N uni0416 ; G 897
U 1047 ; WX 721 ; N uni0417 ; G 898
U 1048 ; WX 945 ; N uni0418 ; G 899
U 1049 ; WX 945 ; N uni0419 ; G 900
U 1050 ; WX 910 ; N uni041A ; G 901
U 1051 ; WX 884 ; N uni041B ; G 902
U 1052 ; WX 1107 ; N uni041C ; G 903
U 1053 ; WX 945 ; N uni041D ; G 904
U 1054 ; WX 871 ; N uni041E ; G 905
U 1055 ; WX 944 ; N uni041F ; G 906
U 1056 ; WX 752 ; N uni0420 ; G 907
U 1057 ; WX 796 ; N uni0421 ; G 908
U 1058 ; WX 744 ; N uni0422 ; G 909
U 1059 ; WX 812 ; N uni0423 ; G 910
U 1060 ; WX 949 ; N uni0424 ; G 911
U 1061 ; WX 776 ; N uni0425 ; G 912
U 1062 ; WX 966 ; N uni0426 ; G 913
U 1063 ; WX 913 ; N uni0427 ; G 914
U 1064 ; WX 1268 ; N uni0428 ; G 915
U 1065 ; WX 1293 ; N uni0429 ; G 916
U 1066 ; WX 957 ; N uni042A ; G 917
U 1067 ; WX 1202 ; N uni042B ; G 918
U 1068 ; WX 825 ; N uni042C ; G 919
U 1069 ; WX 795 ; N uni042D ; G 920
U 1070 ; WX 1287 ; N uni042E ; G 921
U 1071 ; WX 882 ; N uni042F ; G 922
U 1072 ; WX 648 ; N uni0430 ; G 923
U 1073 ; WX 667 ; N uni0431 ; G 924
U 1074 ; WX 695 ; N uni0432 ; G 925
U 1075 ; WX 613 ; N uni0433 ; G 926
U 1076 ; WX 667 ; N uni0434 ; G 927
U 1077 ; WX 636 ; N uni0435 ; G 928
U 1078 ; WX 1010 ; N uni0436 ; G 929
U 1079 ; WX 638 ; N uni0437 ; G 930
U 1080 ; WX 742 ; N uni0438 ; G 931
U 1081 ; WX 742 ; N uni0439 ; G 932
U 1082 ; WX 722 ; N uni043A ; G 933
U 1083 ; WX 705 ; N uni043B ; G 934
U 1084 ; WX 869 ; N uni043C ; G 935
U 1085 ; WX 732 ; N uni043D ; G 936
U 1086 ; WX 667 ; N uni043E ; G 937
U 1087 ; WX 732 ; N uni043F ; G 938
U 1088 ; WX 699 ; N uni0440 ; G 939
U 1089 ; WX 609 ; N uni0441 ; G 940
U 1090 ; WX 620 ; N uni0442 ; G 941
U 1091 ; WX 640 ; N uni0443 ; G 942
U 1092 ; WX 902 ; N uni0444 ; G 943
U 1093 ; WX 596 ; N uni0445 ; G 944
U 1094 ; WX 739 ; N uni0446 ; G 945
U 1095 ; WX 732 ; N uni0447 ; G 946
U 1096 ; WX 1075 ; N uni0448 ; G 947
U 1097 ; WX 1082 ; N uni0449 ; G 948
U 1098 ; WX 767 ; N uni044A ; G 949
U 1099 ; WX 1002 ; N uni044B ; G 950
U 1100 ; WX 679 ; N uni044C ; G 951
U 1101 ; WX 609 ; N uni044D ; G 952
U 1102 ; WX 1025 ; N uni044E ; G 953
U 1103 ; WX 739 ; N uni044F ; G 954
U 1104 ; WX 636 ; N uni0450 ; G 955
U 1105 ; WX 636 ; N uni0451 ; G 956
U 1106 ; WX 719 ; N uni0452 ; G 957
U 1107 ; WX 613 ; N uni0453 ; G 958
U 1108 ; WX 609 ; N uni0454 ; G 959
U 1109 ; WX 563 ; N uni0455 ; G 960
U 1110 ; WX 380 ; N uni0456 ; G 961
U 1111 ; WX 380 ; N uni0457 ; G 962
U 1112 ; WX 362 ; N uni0458 ; G 963
U 1113 ; WX 988 ; N uni0459 ; G 964
U 1114 ; WX 1015 ; N uni045A ; G 965
U 1115 ; WX 727 ; N uni045B ; G 966
U 1116 ; WX 722 ; N uni045C ; G 967
U 1117 ; WX 742 ; N uni045D ; G 968
U 1118 ; WX 640 ; N uni045E ; G 969
U 1119 ; WX 732 ; N uni045F ; G 970
U 1122 ; WX 880 ; N uni0462 ; G 971
U 1123 ; WX 703 ; N uni0463 ; G 972
U 1124 ; WX 1195 ; N uni0464 ; G 973
U 1125 ; WX 963 ; N uni0465 ; G 974
U 1130 ; WX 1312 ; N uni046A ; G 975
U 1131 ; WX 1010 ; N uni046B ; G 976
U 1132 ; WX 1630 ; N uni046C ; G 977
U 1133 ; WX 1297 ; N uni046D ; G 978
U 1136 ; WX 1096 ; N uni0470 ; G 979
U 1137 ; WX 1105 ; N uni0471 ; G 980
U 1138 ; WX 871 ; N uni0472 ; G 981
U 1139 ; WX 652 ; N uni0473 ; G 982
U 1140 ; WX 916 ; N uni0474 ; G 983
U 1141 ; WX 749 ; N uni0475 ; G 984
U 1142 ; WX 916 ; N uni0476 ; G 985
U 1143 ; WX 749 ; N uni0477 ; G 986
U 1164 ; WX 846 ; N uni048C ; G 987
U 1165 ; WX 673 ; N uni048D ; G 988
U 1168 ; WX 700 ; N uni0490 ; G 989
U 1169 ; WX 618 ; N uni0491 ; G 990
U 1170 ; WX 690 ; N uni0492 ; G 991
U 1171 ; WX 613 ; N uni0493 ; G 992
U 1172 ; WX 868 ; N uni0494 ; G 993
U 1173 ; WX 716 ; N uni0495 ; G 994
U 1174 ; WX 1312 ; N uni0496 ; G 995
U 1175 ; WX 1010 ; N uni0497 ; G 996
U 1176 ; WX 721 ; N uni0498 ; G 997
U 1177 ; WX 638 ; N uni0499 ; G 998
U 1178 ; WX 947 ; N uni049A ; G 999
U 1179 ; WX 744 ; N uni049B ; G 1000
U 1182 ; WX 910 ; N uni049E ; G 1001
U 1183 ; WX 722 ; N uni049F ; G 1002
U 1184 ; WX 1041 ; N uni04A0 ; G 1003
U 1185 ; WX 827 ; N uni04A1 ; G 1004
U 1186 ; WX 966 ; N uni04A2 ; G 1005
U 1187 ; WX 739 ; N uni04A3 ; G 1006
U 1188 ; WX 1167 ; N uni04A4 ; G 1007
U 1189 ; WX 956 ; N uni04A5 ; G 1008
U 1190 ; WX 1345 ; N uni04A6 ; G 1009
U 1191 ; WX 1059 ; N uni04A7 ; G 1010
U 1194 ; WX 796 ; N uni04AA ; G 1011
U 1195 ; WX 609 ; N uni04AB ; G 1012
U 1196 ; WX 744 ; N uni04AC ; G 1013
U 1197 ; WX 620 ; N uni04AD ; G 1014
U 1198 ; WX 714 ; N uni04AE ; G 1015
U 1199 ; WX 581 ; N uni04AF ; G 1016
U 1200 ; WX 714 ; N uni04B0 ; G 1017
U 1201 ; WX 581 ; N uni04B1 ; G 1018
U 1202 ; WX 866 ; N uni04B2 ; G 1019
U 1203 ; WX 649 ; N uni04B3 ; G 1020
U 1204 ; WX 1022 ; N uni04B4 ; G 1021
U 1205 ; WX 807 ; N uni04B5 ; G 1022
U 1206 ; WX 928 ; N uni04B6 ; G 1023
U 1207 ; WX 739 ; N uni04B7 ; G 1024
U 1210 ; WX 910 ; N uni04BA ; G 1025
U 1211 ; WX 727 ; N uni04BB ; G 1026
U 1216 ; WX 468 ; N uni04C0 ; G 1027
U 1217 ; WX 1312 ; N uni04C1 ; G 1028
U 1218 ; WX 1010 ; N uni04C2 ; G 1029
U 1219 ; WX 869 ; N uni04C3 ; G 1030
U 1220 ; WX 693 ; N uni04C4 ; G 1031
U 1223 ; WX 945 ; N uni04C7 ; G 1032
U 1224 ; WX 732 ; N uni04C8 ; G 1033
U 1227 ; WX 913 ; N uni04CB ; G 1034
U 1228 ; WX 732 ; N uni04CC ; G 1035
U 1231 ; WX 380 ; N uni04CF ; G 1036
U 1232 ; WX 814 ; N uni04D0 ; G 1037
U 1233 ; WX 648 ; N uni04D1 ; G 1038
U 1234 ; WX 814 ; N uni04D2 ; G 1039
U 1235 ; WX 648 ; N uni04D3 ; G 1040
U 1236 ; WX 1034 ; N uni04D4 ; G 1041
U 1237 ; WX 975 ; N uni04D5 ; G 1042
U 1238 ; WX 762 ; N uni04D6 ; G 1043
U 1239 ; WX 636 ; N uni04D7 ; G 1044
U 1240 ; WX 871 ; N uni04D8 ; G 1045
U 1241 ; WX 636 ; N uni04D9 ; G 1046
U 1242 ; WX 871 ; N uni04DA ; G 1047
U 1243 ; WX 636 ; N uni04DB ; G 1048
U 1244 ; WX 1312 ; N uni04DC ; G 1049
U 1245 ; WX 1010 ; N uni04DD ; G 1050
U 1246 ; WX 721 ; N uni04DE ; G 1051
U 1247 ; WX 638 ; N uni04DF ; G 1052
U 1248 ; WX 657 ; N uni04E0 ; G 1053
U 1249 ; WX 568 ; N uni04E1 ; G 1054
U 1250 ; WX 945 ; N uni04E2 ; G 1055
U 1251 ; WX 742 ; N uni04E3 ; G 1056
U 1252 ; WX 945 ; N uni04E4 ; G 1057
U 1253 ; WX 742 ; N uni04E5 ; G 1058
U 1254 ; WX 871 ; N uni04E6 ; G 1059
U 1255 ; WX 667 ; N uni04E7 ; G 1060
U 1256 ; WX 871 ; N uni04E8 ; G 1061
U 1257 ; WX 667 ; N uni04E9 ; G 1062
U 1258 ; WX 871 ; N uni04EA ; G 1063
U 1259 ; WX 667 ; N uni04EB ; G 1064
U 1260 ; WX 795 ; N uni04EC ; G 1065
U 1261 ; WX 609 ; N uni04ED ; G 1066
U 1262 ; WX 812 ; N uni04EE ; G 1067
U 1263 ; WX 640 ; N uni04EF ; G 1068
U 1264 ; WX 812 ; N uni04F0 ; G 1069
U 1265 ; WX 640 ; N uni04F1 ; G 1070
U 1266 ; WX 812 ; N uni04F2 ; G 1071
U 1267 ; WX 640 ; N uni04F3 ; G 1072
U 1268 ; WX 913 ; N uni04F4 ; G 1073
U 1269 ; WX 732 ; N uni04F5 ; G 1074
U 1270 ; WX 690 ; N uni04F6 ; G 1075
U 1271 ; WX 613 ; N uni04F7 ; G 1076
U 1272 ; WX 1202 ; N uni04F8 ; G 1077
U 1273 ; WX 1002 ; N uni04F9 ; G 1078
U 1296 ; WX 721 ; N uni0510 ; G 1079
U 1297 ; WX 638 ; N uni0511 ; G 1080
U 1298 ; WX 884 ; N uni0512 ; G 1081
U 1299 ; WX 705 ; N uni0513 ; G 1082
U 1300 ; WX 1248 ; N uni0514 ; G 1083
U 1301 ; WX 945 ; N uni0515 ; G 1084
U 1306 ; WX 820 ; N uni051A ; G 1085
U 1307 ; WX 640 ; N uni051B ; G 1086
U 1308 ; WX 1028 ; N uni051C ; G 1087
U 1309 ; WX 856 ; N uni051D ; G 1088
U 1329 ; WX 942 ; N uni0531 ; G 1089
U 1330 ; WX 832 ; N uni0532 ; G 1090
U 1331 ; WX 894 ; N uni0533 ; G 1091
U 1332 ; WX 909 ; N uni0534 ; G 1092
U 1333 ; WX 822 ; N uni0535 ; G 1093
U 1334 ; WX 821 ; N uni0536 ; G 1094
U 1335 ; WX 747 ; N uni0537 ; G 1095
U 1336 ; WX 832 ; N uni0538 ; G 1096
U 1337 ; WX 1125 ; N uni0539 ; G 1097
U 1338 ; WX 894 ; N uni053A ; G 1098
U 1339 ; WX 803 ; N uni053B ; G 1099
U 1340 ; WX 722 ; N uni053C ; G 1100
U 1341 ; WX 1188 ; N uni053D ; G 1101
U 1342 ; WX 887 ; N uni053E ; G 1102
U 1343 ; WX 842 ; N uni053F ; G 1103
U 1344 ; WX 737 ; N uni0540 ; G 1104
U 1345 ; WX 863 ; N uni0541 ; G 1105
U 1346 ; WX 918 ; N uni0542 ; G 1106
U 1347 ; WX 851 ; N uni0543 ; G 1107
U 1348 ; WX 977 ; N uni0544 ; G 1108
U 1349 ; WX 833 ; N uni0545 ; G 1109
U 1350 ; WX 914 ; N uni0546 ; G 1110
U 1351 ; WX 843 ; N uni0547 ; G 1111
U 1352 ; WX 871 ; N uni0548 ; G 1112
U 1353 ; WX 818 ; N uni0549 ; G 1113
U 1354 ; WX 1034 ; N uni054A ; G 1114
U 1355 ; WX 846 ; N uni054B ; G 1115
U 1356 ; WX 964 ; N uni054C ; G 1116
U 1357 ; WX 871 ; N uni054D ; G 1117
U 1358 ; WX 914 ; N uni054E ; G 1118
U 1359 ; WX 808 ; N uni054F ; G 1119
U 1360 ; WX 808 ; N uni0550 ; G 1120
U 1361 ; WX 836 ; N uni0551 ; G 1121
U 1362 ; WX 710 ; N uni0552 ; G 1122
U 1363 ; WX 955 ; N uni0553 ; G 1123
U 1364 ; WX 891 ; N uni0554 ; G 1124
U 1365 ; WX 871 ; N uni0555 ; G 1125
U 1366 ; WX 963 ; N uni0556 ; G 1126
U 1369 ; WX 307 ; N uni0559 ; G 1127
U 1370 ; WX 264 ; N uni055A ; G 1128
U 1371 ; WX 293 ; N uni055B ; G 1129
U 1372 ; WX 391 ; N uni055C ; G 1130
U 1373 ; WX 323 ; N uni055D ; G 1131
U 1374 ; WX 439 ; N uni055E ; G 1132
U 1375 ; WX 500 ; N uni055F ; G 1133
U 1377 ; WX 1055 ; N uni0561 ; G 1134
U 1378 ; WX 695 ; N uni0562 ; G 1135
U 1379 ; WX 776 ; N uni0563 ; G 1136
U 1380 ; WX 801 ; N uni0564 ; G 1137
U 1381 ; WX 729 ; N uni0565 ; G 1138
U 1382 ; WX 742 ; N uni0566 ; G 1139
U 1383 ; WX 599 ; N uni0567 ; G 1140
U 1384 ; WX 733 ; N uni0568 ; G 1141
U 1385 ; WX 909 ; N uni0569 ; G 1142
U 1386 ; WX 768 ; N uni056A ; G 1143
U 1387 ; WX 724 ; N uni056B ; G 1144
U 1388 ; WX 398 ; N uni056C ; G 1145
U 1389 ; WX 1087 ; N uni056D ; G 1146
U 1390 ; WX 695 ; N uni056E ; G 1147
U 1391 ; WX 719 ; N uni056F ; G 1148
U 1392 ; WX 737 ; N uni0570 ; G 1149
U 1393 ; WX 684 ; N uni0571 ; G 1150
U 1394 ; WX 738 ; N uni0572 ; G 1151
U 1395 ; WX 703 ; N uni0573 ; G 1152
U 1396 ; WX 724 ; N uni0574 ; G 1153
U 1397 ; WX 359 ; N uni0575 ; G 1154
U 1398 ; WX 719 ; N uni0576 ; G 1155
U 1399 ; WX 496 ; N uni0577 ; G 1156
U 1400 ; WX 738 ; N uni0578 ; G 1157
U 1401 ; WX 428 ; N uni0579 ; G 1158
U 1402 ; WX 1059 ; N uni057A ; G 1159
U 1403 ; WX 668 ; N uni057B ; G 1160
U 1404 ; WX 744 ; N uni057C ; G 1161
U 1405 ; WX 724 ; N uni057D ; G 1162
U 1406 ; WX 724 ; N uni057E ; G 1163
U 1407 ; WX 1040 ; N uni057F ; G 1164
U 1408 ; WX 724 ; N uni0580 ; G 1165
U 1409 ; WX 713 ; N uni0581 ; G 1166
U 1410 ; WX 493 ; N uni0582 ; G 1167
U 1411 ; WX 1040 ; N uni0583 ; G 1168
U 1412 ; WX 734 ; N uni0584 ; G 1169
U 1413 ; WX 693 ; N uni0585 ; G 1170
U 1414 ; WX 956 ; N uni0586 ; G 1171
U 1415 ; WX 833 ; N uni0587 ; G 1172
U 1417 ; WX 340 ; N uni0589 ; G 1173
U 1418 ; WX 388 ; N uni058A ; G 1174
U 3647 ; WX 696 ; N uni0E3F ; G 1175
U 4256 ; WX 755 ; N uni10A0 ; G 1176
U 4257 ; WX 936 ; N uni10A1 ; G 1177
U 4258 ; WX 866 ; N uni10A2 ; G 1178
U 4259 ; WX 874 ; N uni10A3 ; G 1179
U 4260 ; WX 781 ; N uni10A4 ; G 1180
U 4261 ; WX 1078 ; N uni10A5 ; G 1181
U 4262 ; WX 1014 ; N uni10A6 ; G 1182
U 4263 ; WX 1213 ; N uni10A7 ; G 1183
U 4264 ; WX 643 ; N uni10A8 ; G 1184
U 4265 ; WX 818 ; N uni10A9 ; G 1185
U 4266 ; WX 1051 ; N uni10AA ; G 1186
U 4267 ; WX 1051 ; N uni10AB ; G 1187
U 4268 ; WX 796 ; N uni10AC ; G 1188
U 4269 ; WX 1135 ; N uni10AD ; G 1189
U 4270 ; WX 969 ; N uni10AE ; G 1190
U 4271 ; WX 902 ; N uni10AF ; G 1191
U 4272 ; WX 1109 ; N uni10B0 ; G 1192
U 4273 ; WX 792 ; N uni10B1 ; G 1193
U 4274 ; WX 756 ; N uni10B2 ; G 1194
U 4275 ; WX 1076 ; N uni10B3 ; G 1195
U 4276 ; WX 976 ; N uni10B4 ; G 1196
U 4277 ; WX 1066 ; N uni10B5 ; G 1197
U 4278 ; WX 811 ; N uni10B6 ; G 1198
U 4279 ; WX 833 ; N uni10B7 ; G 1199
U 4280 ; WX 821 ; N uni10B8 ; G 1200
U 4281 ; WX 833 ; N uni10B9 ; G 1201
U 4282 ; WX 908 ; N uni10BA ; G 1202
U 4283 ; WX 1077 ; N uni10BB ; G 1203
U 4284 ; WX 769 ; N uni10BC ; G 1204
U 4285 ; WX 822 ; N uni10BD ; G 1205
U 4286 ; WX 813 ; N uni10BE ; G 1206
U 4287 ; WX 1111 ; N uni10BF ; G 1207
U 4288 ; WX 1123 ; N uni10C0 ; G 1208
U 4289 ; WX 802 ; N uni10C1 ; G 1209
U 4290 ; WX 892 ; N uni10C2 ; G 1210
U 4291 ; WX 802 ; N uni10C3 ; G 1211
U 4292 ; WX 880 ; N uni10C4 ; G 1212
U 4293 ; WX 1063 ; N uni10C5 ; G 1213
U 4304 ; WX 594 ; N uni10D0 ; G 1214
U 4305 ; WX 625 ; N uni10D1 ; G 1215
U 4306 ; WX 643 ; N uni10D2 ; G 1216
U 4307 ; WX 887 ; N uni10D3 ; G 1217
U 4308 ; WX 615 ; N uni10D4 ; G 1218
U 4309 ; WX 611 ; N uni10D5 ; G 1219
U 4310 ; WX 667 ; N uni10D6 ; G 1220
U 4311 ; WX 915 ; N uni10D7 ; G 1221
U 4312 ; WX 613 ; N uni10D8 ; G 1222
U 4313 ; WX 600 ; N uni10D9 ; G 1223
U 4314 ; WX 1120 ; N uni10DA ; G 1224
U 4315 ; WX 640 ; N uni10DB ; G 1225
U 4316 ; WX 640 ; N uni10DC ; G 1226
U 4317 ; WX 879 ; N uni10DD ; G 1227
U 4318 ; WX 624 ; N uni10DE ; G 1228
U 4319 ; WX 634 ; N uni10DF ; G 1229
U 4320 ; WX 877 ; N uni10E0 ; G 1230
U 4321 ; WX 666 ; N uni10E1 ; G 1231
U 4322 ; WX 780 ; N uni10E2 ; G 1232
U 4323 ; WX 751 ; N uni10E3 ; G 1233
U 4324 ; WX 869 ; N uni10E4 ; G 1234
U 4325 ; WX 639 ; N uni10E5 ; G 1235
U 4326 ; WX 912 ; N uni10E6 ; G 1236
U 4327 ; WX 622 ; N uni10E7 ; G 1237
U 4328 ; WX 647 ; N uni10E8 ; G 1238
U 4329 ; WX 640 ; N uni10E9 ; G 1239
U 4330 ; WX 729 ; N uni10EA ; G 1240
U 4331 ; WX 641 ; N uni10EB ; G 1241
U 4332 ; WX 630 ; N uni10EC ; G 1242
U 4333 ; WX 629 ; N uni10ED ; G 1243
U 4334 ; WX 670 ; N uni10EE ; G 1244
U 4335 ; WX 753 ; N uni10EF ; G 1245
U 4336 ; WX 625 ; N uni10F0 ; G 1246
U 4337 ; WX 657 ; N uni10F1 ; G 1247
U 4338 ; WX 625 ; N uni10F2 ; G 1248
U 4339 ; WX 625 ; N uni10F3 ; G 1249
U 4340 ; WX 624 ; N uni10F4 ; G 1250
U 4341 ; WX 670 ; N uni10F5 ; G 1251
U 4342 ; WX 940 ; N uni10F6 ; G 1252
U 4343 ; WX 680 ; N uni10F7 ; G 1253
U 4344 ; WX 636 ; N uni10F8 ; G 1254
U 4345 ; WX 672 ; N uni10F9 ; G 1255
U 4346 ; WX 625 ; N uni10FA ; G 1256
U 4347 ; WX 588 ; N uni10FB ; G 1257
U 4348 ; WX 354 ; N uni10FC ; G 1258
U 7424 ; WX 641 ; N uni1D00 ; G 1259
U 7425 ; WX 892 ; N uni1D01 ; G 1260
U 7426 ; WX 940 ; N uni1D02 ; G 1261
U 7427 ; WX 695 ; N uni1D03 ; G 1262
U 7428 ; WX 609 ; N uni1D04 ; G 1263
U 7429 ; WX 675 ; N uni1D05 ; G 1264
U 7430 ; WX 675 ; N uni1D06 ; G 1265
U 7431 ; WX 617 ; N uni1D07 ; G 1266
U 7432 ; WX 509 ; N uni1D08 ; G 1267
U 7433 ; WX 320 ; N uni1D09 ; G 1268
U 7434 ; WX 561 ; N uni1D0A ; G 1269
U 7435 ; WX 722 ; N uni1D0B ; G 1270
U 7436 ; WX 617 ; N uni1D0C ; G 1271
U 7437 ; WX 869 ; N uni1D0D ; G 1272
U 7438 ; WX 737 ; N uni1D0E ; G 1273
U 7439 ; WX 667 ; N uni1D0F ; G 1274
U 7440 ; WX 609 ; N uni1D10 ; G 1275
U 7441 ; WX 628 ; N uni1D11 ; G 1276
U 7442 ; WX 628 ; N uni1D12 ; G 1277
U 7443 ; WX 667 ; N uni1D13 ; G 1278
U 7444 ; WX 989 ; N uni1D14 ; G 1279
U 7445 ; WX 598 ; N uni1D15 ; G 1280
U 7446 ; WX 667 ; N uni1D16 ; G 1281
U 7447 ; WX 667 ; N uni1D17 ; G 1282
U 7448 ; WX 586 ; N uni1D18 ; G 1283
U 7449 ; WX 801 ; N uni1D19 ; G 1284
U 7450 ; WX 801 ; N uni1D1A ; G 1285
U 7451 ; WX 620 ; N uni1D1B ; G 1286
U 7452 ; WX 647 ; N uni1D1C ; G 1287
U 7453 ; WX 664 ; N uni1D1D ; G 1288
U 7454 ; WX 923 ; N uni1D1E ; G 1289
U 7455 ; WX 655 ; N uni1D1F ; G 1290
U 7456 ; WX 581 ; N uni1D20 ; G 1291
U 7457 ; WX 861 ; N uni1D21 ; G 1292
U 7458 ; WX 568 ; N uni1D22 ; G 1293
U 7459 ; WX 568 ; N uni1D23 ; G 1294
U 7460 ; WX 588 ; N uni1D24 ; G 1295
U 7461 ; WX 802 ; N uni1D25 ; G 1296
U 7462 ; WX 586 ; N uni1D26 ; G 1297
U 7463 ; WX 641 ; N uni1D27 ; G 1298
U 7464 ; WX 732 ; N uni1D28 ; G 1299
U 7465 ; WX 586 ; N uni1D29 ; G 1300
U 7466 ; WX 854 ; N uni1D2A ; G 1301
U 7467 ; WX 705 ; N uni1D2B ; G 1302
U 7468 ; WX 489 ; N uni1D2C ; G 1303
U 7469 ; WX 651 ; N uni1D2D ; G 1304
U 7470 ; WX 532 ; N uni1D2E ; G 1305
U 7471 ; WX 532 ; N uni1D2F ; G 1306
U 7472 ; WX 546 ; N uni1D30 ; G 1307
U 7473 ; WX 480 ; N uni1D31 ; G 1308
U 7474 ; WX 480 ; N uni1D32 ; G 1309
U 7475 ; WX 538 ; N uni1D33 ; G 1310
U 7476 ; WX 595 ; N uni1D34 ; G 1311
U 7477 ; WX 294 ; N uni1D35 ; G 1312
U 7478 ; WX 298 ; N uni1D36 ; G 1313
U 7479 ; WX 547 ; N uni1D37 ; G 1314
U 7480 ; WX 443 ; N uni1D38 ; G 1315
U 7481 ; WX 697 ; N uni1D39 ; G 1316
U 7482 ; WX 576 ; N uni1D3A ; G 1317
U 7483 ; WX 606 ; N uni1D3B ; G 1318
U 7484 ; WX 548 ; N uni1D3C ; G 1319
U 7485 ; WX 442 ; N uni1D3D ; G 1320
U 7486 ; WX 474 ; N uni1D3E ; G 1321
U 7487 ; WX 523 ; N uni1D3F ; G 1322
U 7488 ; WX 455 ; N uni1D40 ; G 1323
U 7489 ; WX 469 ; N uni1D41 ; G 1324
U 7490 ; WX 549 ; N uni1D42 ; G 1325
U 7491 ; WX 466 ; N uni1D43 ; G 1326
U 7492 ; WX 466 ; N uni1D44 ; G 1327
U 7493 ; WX 498 ; N uni1D45 ; G 1328
U 7494 ; WX 657 ; N uni1D46 ; G 1329
U 7495 ; WX 499 ; N uni1D47 ; G 1330
U 7496 ; WX 498 ; N uni1D48 ; G 1331
U 7497 ; WX 444 ; N uni1D49 ; G 1332
U 7498 ; WX 444 ; N uni1D4A ; G 1333
U 7499 ; WX 412 ; N uni1D4B ; G 1334
U 7500 ; WX 412 ; N uni1D4C ; G 1335
U 7501 ; WX 498 ; N uni1D4D ; G 1336
U 7502 ; WX 300 ; N uni1D4E ; G 1337
U 7503 ; WX 523 ; N uni1D4F ; G 1338
U 7504 ; WX 729 ; N uni1D50 ; G 1339
U 7505 ; WX 473 ; N uni1D51 ; G 1340
U 7506 ; WX 467 ; N uni1D52 ; G 1341
U 7507 ; WX 427 ; N uni1D53 ; G 1342
U 7508 ; WX 467 ; N uni1D54 ; G 1343
U 7509 ; WX 467 ; N uni1D55 ; G 1344
U 7510 ; WX 499 ; N uni1D56 ; G 1345
U 7511 ; WX 371 ; N uni1D57 ; G 1346
U 7512 ; WX 520 ; N uni1D58 ; G 1347
U 7513 ; WX 418 ; N uni1D59 ; G 1348
U 7514 ; WX 729 ; N uni1D5A ; G 1349
U 7515 ; WX 491 ; N uni1D5B ; G 1350
U 7516 ; WX 505 ; N uni1D5C ; G 1351
U 7517 ; WX 418 ; N uni1D5D ; G 1352
U 7518 ; WX 416 ; N uni1D5E ; G 1353
U 7519 ; WX 420 ; N uni1D5F ; G 1354
U 7520 ; WX 570 ; N uni1D60 ; G 1355
U 7521 ; WX 414 ; N uni1D61 ; G 1356
U 7522 ; WX 239 ; N uni1D62 ; G 1357
U 7523 ; WX 414 ; N uni1D63 ; G 1358
U 7524 ; WX 520 ; N uni1D64 ; G 1359
U 7525 ; WX 491 ; N uni1D65 ; G 1360
U 7526 ; WX 418 ; N uni1D66 ; G 1361
U 7527 ; WX 416 ; N uni1D67 ; G 1362
U 7528 ; WX 419 ; N uni1D68 ; G 1363
U 7529 ; WX 570 ; N uni1D69 ; G 1364
U 7530 ; WX 414 ; N uni1D6A ; G 1365
U 7531 ; WX 1041 ; N uni1D6B ; G 1366
U 7543 ; WX 640 ; N uni1D77 ; G 1367
U 7544 ; WX 595 ; N uni1D78 ; G 1368
U 7547 ; WX 380 ; N uni1D7B ; G 1369
U 7548 ; WX 380 ; N uni1D7C ; G 1370
U 7549 ; WX 699 ; N uni1D7D ; G 1371
U 7550 ; WX 647 ; N uni1D7E ; G 1372
U 7551 ; WX 679 ; N uni1D7F ; G 1373
U 7557 ; WX 380 ; N uni1D85 ; G 1374
U 7579 ; WX 498 ; N uni1D9B ; G 1375
U 7580 ; WX 427 ; N uni1D9C ; G 1376
U 7581 ; WX 427 ; N uni1D9D ; G 1377
U 7582 ; WX 467 ; N uni1D9E ; G 1378
U 7583 ; WX 412 ; N uni1D9F ; G 1379
U 7584 ; WX 383 ; N uni1DA0 ; G 1380
U 7585 ; WX 373 ; N uni1DA1 ; G 1381
U 7586 ; WX 498 ; N uni1DA2 ; G 1382
U 7587 ; WX 522 ; N uni1DA3 ; G 1383
U 7588 ; WX 300 ; N uni1DA4 ; G 1384
U 7589 ; WX 307 ; N uni1DA5 ; G 1385
U 7590 ; WX 300 ; N uni1DA6 ; G 1386
U 7591 ; WX 300 ; N uni1DA7 ; G 1387
U 7592 ; WX 370 ; N uni1DA8 ; G 1388
U 7593 ; WX 368 ; N uni1DA9 ; G 1389
U 7594 ; WX 321 ; N uni1DAA ; G 1390
U 7595 ; WX 430 ; N uni1DAB ; G 1391
U 7596 ; WX 682 ; N uni1DAC ; G 1392
U 7597 ; WX 729 ; N uni1DAD ; G 1393
U 7598 ; WX 588 ; N uni1DAE ; G 1394
U 7599 ; WX 587 ; N uni1DAF ; G 1395
U 7600 ; WX 472 ; N uni1DB0 ; G 1396
U 7601 ; WX 467 ; N uni1DB1 ; G 1397
U 7602 ; WX 522 ; N uni1DB2 ; G 1398
U 7603 ; WX 400 ; N uni1DB3 ; G 1399
U 7604 ; WX 387 ; N uni1DB4 ; G 1400
U 7605 ; WX 371 ; N uni1DB5 ; G 1401
U 7606 ; WX 520 ; N uni1DB6 ; G 1402
U 7607 ; WX 475 ; N uni1DB7 ; G 1403
U 7608 ; WX 408 ; N uni1DB8 ; G 1404
U 7609 ; WX 489 ; N uni1DB9 ; G 1405
U 7610 ; WX 491 ; N uni1DBA ; G 1406
U 7611 ; WX 412 ; N uni1DBB ; G 1407
U 7612 ; WX 527 ; N uni1DBC ; G 1408
U 7613 ; WX 412 ; N uni1DBD ; G 1409
U 7614 ; WX 452 ; N uni1DBE ; G 1410
U 7615 ; WX 467 ; N uni1DBF ; G 1411
U 7620 ; WX 0 ; N uni1DC4 ; G 1412
U 7621 ; WX 0 ; N uni1DC5 ; G 1413
U 7622 ; WX 0 ; N uni1DC6 ; G 1414
U 7623 ; WX 0 ; N uni1DC7 ; G 1415
U 7624 ; WX 0 ; N uni1DC8 ; G 1416
U 7625 ; WX 0 ; N uni1DC9 ; G 1417
U 7680 ; WX 776 ; N uni1E00 ; G 1418
U 7681 ; WX 648 ; N uni1E01 ; G 1419
U 7682 ; WX 845 ; N uni1E02 ; G 1420
U 7683 ; WX 699 ; N uni1E03 ; G 1421
U 7684 ; WX 845 ; N uni1E04 ; G 1422
U 7685 ; WX 699 ; N uni1E05 ; G 1423
U 7686 ; WX 845 ; N uni1E06 ; G 1424
U 7687 ; WX 699 ; N uni1E07 ; G 1425
U 7688 ; WX 796 ; N uni1E08 ; G 1426
U 7689 ; WX 609 ; N uni1E09 ; G 1427
U 7690 ; WX 867 ; N uni1E0A ; G 1428
U 7691 ; WX 699 ; N uni1E0B ; G 1429
U 7692 ; WX 867 ; N uni1E0C ; G 1430
U 7693 ; WX 699 ; N uni1E0D ; G 1431
U 7694 ; WX 867 ; N uni1E0E ; G 1432
U 7695 ; WX 699 ; N uni1E0F ; G 1433
U 7696 ; WX 867 ; N uni1E10 ; G 1434
U 7697 ; WX 699 ; N uni1E11 ; G 1435
U 7698 ; WX 867 ; N uni1E12 ; G 1436
U 7699 ; WX 699 ; N uni1E13 ; G 1437
U 7700 ; WX 762 ; N uni1E14 ; G 1438
U 7701 ; WX 636 ; N uni1E15 ; G 1439
U 7702 ; WX 762 ; N uni1E16 ; G 1440
U 7703 ; WX 636 ; N uni1E17 ; G 1441
U 7704 ; WX 762 ; N uni1E18 ; G 1442
U 7705 ; WX 636 ; N uni1E19 ; G 1443
U 7706 ; WX 762 ; N uni1E1A ; G 1444
U 7707 ; WX 636 ; N uni1E1B ; G 1445
U 7708 ; WX 762 ; N uni1E1C ; G 1446
U 7709 ; WX 636 ; N uni1E1D ; G 1447
U 7710 ; WX 710 ; N uni1E1E ; G 1448
U 7711 ; WX 430 ; N uni1E1F ; G 1449
U 7712 ; WX 854 ; N uni1E20 ; G 1450
U 7713 ; WX 699 ; N uni1E21 ; G 1451
U 7714 ; WX 945 ; N uni1E22 ; G 1452
U 7715 ; WX 727 ; N uni1E23 ; G 1453
U 7716 ; WX 945 ; N uni1E24 ; G 1454
U 7717 ; WX 727 ; N uni1E25 ; G 1455
U 7718 ; WX 945 ; N uni1E26 ; G 1456
U 7719 ; WX 727 ; N uni1E27 ; G 1457
U 7720 ; WX 945 ; N uni1E28 ; G 1458
U 7721 ; WX 727 ; N uni1E29 ; G 1459
U 7722 ; WX 945 ; N uni1E2A ; G 1460
U 7723 ; WX 727 ; N uni1E2B ; G 1461
U 7724 ; WX 468 ; N uni1E2C ; G 1462
U 7725 ; WX 380 ; N uni1E2D ; G 1463
U 7726 ; WX 468 ; N uni1E2E ; G 1464
U 7727 ; WX 380 ; N uni1E2F ; G 1465
U 7728 ; WX 869 ; N uni1E30 ; G 1466
U 7729 ; WX 693 ; N uni1E31 ; G 1467
U 7730 ; WX 869 ; N uni1E32 ; G 1468
U 7731 ; WX 693 ; N uni1E33 ; G 1469
U 7732 ; WX 869 ; N uni1E34 ; G 1470
U 7733 ; WX 693 ; N uni1E35 ; G 1471
U 7734 ; WX 703 ; N uni1E36 ; G 1472
U 7735 ; WX 380 ; N uni1E37 ; G 1473
U 7736 ; WX 703 ; N uni1E38 ; G 1474
U 7737 ; WX 380 ; N uni1E39 ; G 1475
U 7738 ; WX 703 ; N uni1E3A ; G 1476
U 7739 ; WX 380 ; N uni1E3B ; G 1477
U 7740 ; WX 703 ; N uni1E3C ; G 1478
U 7741 ; WX 380 ; N uni1E3D ; G 1479
U 7742 ; WX 1107 ; N uni1E3E ; G 1480
U 7743 ; WX 1058 ; N uni1E3F ; G 1481
U 7744 ; WX 1107 ; N uni1E40 ; G 1482
U 7745 ; WX 1058 ; N uni1E41 ; G 1483
U 7746 ; WX 1107 ; N uni1E42 ; G 1484
U 7747 ; WX 1058 ; N uni1E43 ; G 1485
U 7748 ; WX 914 ; N uni1E44 ; G 1486
U 7749 ; WX 727 ; N uni1E45 ; G 1487
U 7750 ; WX 914 ; N uni1E46 ; G 1488
U 7751 ; WX 727 ; N uni1E47 ; G 1489
U 7752 ; WX 914 ; N uni1E48 ; G 1490
U 7753 ; WX 727 ; N uni1E49 ; G 1491
U 7754 ; WX 914 ; N uni1E4A ; G 1492
U 7755 ; WX 727 ; N uni1E4B ; G 1493
U 7756 ; WX 871 ; N uni1E4C ; G 1494
U 7757 ; WX 667 ; N uni1E4D ; G 1495
U 7758 ; WX 871 ; N uni1E4E ; G 1496
U 7759 ; WX 667 ; N uni1E4F ; G 1497
U 7760 ; WX 871 ; N uni1E50 ; G 1498
U 7761 ; WX 667 ; N uni1E51 ; G 1499
U 7762 ; WX 871 ; N uni1E52 ; G 1500
U 7763 ; WX 667 ; N uni1E53 ; G 1501
U 7764 ; WX 752 ; N uni1E54 ; G 1502
U 7765 ; WX 699 ; N uni1E55 ; G 1503
U 7766 ; WX 752 ; N uni1E56 ; G 1504
U 7767 ; WX 699 ; N uni1E57 ; G 1505
U 7768 ; WX 831 ; N uni1E58 ; G 1506
U 7769 ; WX 527 ; N uni1E59 ; G 1507
U 7770 ; WX 831 ; N uni1E5A ; G 1508
U 7771 ; WX 527 ; N uni1E5B ; G 1509
U 7772 ; WX 831 ; N uni1E5C ; G 1510
U 7773 ; WX 527 ; N uni1E5D ; G 1511
U 7774 ; WX 831 ; N uni1E5E ; G 1512
U 7775 ; WX 527 ; N uni1E5F ; G 1513
U 7776 ; WX 722 ; N uni1E60 ; G 1514
U 7777 ; WX 563 ; N uni1E61 ; G 1515
U 7778 ; WX 722 ; N uni1E62 ; G 1516
U 7779 ; WX 563 ; N uni1E63 ; G 1517
U 7780 ; WX 722 ; N uni1E64 ; G 1518
U 7781 ; WX 563 ; N uni1E65 ; G 1519
U 7782 ; WX 722 ; N uni1E66 ; G 1520
U 7783 ; WX 563 ; N uni1E67 ; G 1521
U 7784 ; WX 722 ; N uni1E68 ; G 1522
U 7785 ; WX 563 ; N uni1E69 ; G 1523
U 7786 ; WX 744 ; N uni1E6A ; G 1524
U 7787 ; WX 462 ; N uni1E6B ; G 1525
U 7788 ; WX 744 ; N uni1E6C ; G 1526
U 7789 ; WX 462 ; N uni1E6D ; G 1527
U 7790 ; WX 744 ; N uni1E6E ; G 1528
U 7791 ; WX 462 ; N uni1E6F ; G 1529
U 7792 ; WX 744 ; N uni1E70 ; G 1530
U 7793 ; WX 462 ; N uni1E71 ; G 1531
U 7794 ; WX 872 ; N uni1E72 ; G 1532
U 7795 ; WX 727 ; N uni1E73 ; G 1533
U 7796 ; WX 872 ; N uni1E74 ; G 1534
U 7797 ; WX 727 ; N uni1E75 ; G 1535
U 7798 ; WX 872 ; N uni1E76 ; G 1536
U 7799 ; WX 727 ; N uni1E77 ; G 1537
U 7800 ; WX 872 ; N uni1E78 ; G 1538
U 7801 ; WX 727 ; N uni1E79 ; G 1539
U 7802 ; WX 872 ; N uni1E7A ; G 1540
U 7803 ; WX 727 ; N uni1E7B ; G 1541
U 7804 ; WX 776 ; N uni1E7C ; G 1542
U 7805 ; WX 581 ; N uni1E7D ; G 1543
U 7806 ; WX 776 ; N uni1E7E ; G 1544
U 7807 ; WX 581 ; N uni1E7F ; G 1545
U 7808 ; WX 1123 ; N Wgrave ; G 1546
U 7809 ; WX 861 ; N wgrave ; G 1547
U 7810 ; WX 1123 ; N Wacute ; G 1548
U 7811 ; WX 861 ; N wacute ; G 1549
U 7812 ; WX 1123 ; N Wdieresis ; G 1550
U 7813 ; WX 861 ; N wdieresis ; G 1551
U 7814 ; WX 1123 ; N uni1E86 ; G 1552
U 7815 ; WX 861 ; N uni1E87 ; G 1553
U 7816 ; WX 1123 ; N uni1E88 ; G 1554
U 7817 ; WX 861 ; N uni1E89 ; G 1555
U 7818 ; WX 776 ; N uni1E8A ; G 1556
U 7819 ; WX 596 ; N uni1E8B ; G 1557
U 7820 ; WX 776 ; N uni1E8C ; G 1558
U 7821 ; WX 596 ; N uni1E8D ; G 1559
U 7822 ; WX 714 ; N uni1E8E ; G 1560
U 7823 ; WX 581 ; N uni1E8F ; G 1561
U 7824 ; WX 730 ; N uni1E90 ; G 1562
U 7825 ; WX 568 ; N uni1E91 ; G 1563
U 7826 ; WX 730 ; N uni1E92 ; G 1564
U 7827 ; WX 568 ; N uni1E93 ; G 1565
U 7828 ; WX 730 ; N uni1E94 ; G 1566
U 7829 ; WX 568 ; N uni1E95 ; G 1567
U 7830 ; WX 727 ; N uni1E96 ; G 1568
U 7831 ; WX 462 ; N uni1E97 ; G 1569
U 7832 ; WX 861 ; N uni1E98 ; G 1570
U 7833 ; WX 581 ; N uni1E99 ; G 1571
U 7834 ; WX 1014 ; N uni1E9A ; G 1572
U 7835 ; WX 430 ; N uni1E9B ; G 1573
U 7836 ; WX 430 ; N uni1E9C ; G 1574
U 7837 ; WX 430 ; N uni1E9D ; G 1575
U 7838 ; WX 947 ; N uni1E9E ; G 1576
U 7839 ; WX 667 ; N uni1E9F ; G 1577
U 7840 ; WX 776 ; N uni1EA0 ; G 1578
U 7841 ; WX 648 ; N uni1EA1 ; G 1579
U 7842 ; WX 776 ; N uni1EA2 ; G 1580
U 7843 ; WX 648 ; N uni1EA3 ; G 1581
U 7844 ; WX 776 ; N uni1EA4 ; G 1582
U 7845 ; WX 648 ; N uni1EA5 ; G 1583
U 7846 ; WX 776 ; N uni1EA6 ; G 1584
U 7847 ; WX 648 ; N uni1EA7 ; G 1585
U 7848 ; WX 776 ; N uni1EA8 ; G 1586
U 7849 ; WX 648 ; N uni1EA9 ; G 1587
U 7850 ; WX 776 ; N uni1EAA ; G 1588
U 7851 ; WX 648 ; N uni1EAB ; G 1589
U 7852 ; WX 776 ; N uni1EAC ; G 1590
U 7853 ; WX 648 ; N uni1EAD ; G 1591
U 7854 ; WX 776 ; N uni1EAE ; G 1592
U 7855 ; WX 648 ; N uni1EAF ; G 1593
U 7856 ; WX 776 ; N uni1EB0 ; G 1594
U 7857 ; WX 648 ; N uni1EB1 ; G 1595
U 7858 ; WX 776 ; N uni1EB2 ; G 1596
U 7859 ; WX 648 ; N uni1EB3 ; G 1597
U 7860 ; WX 776 ; N uni1EB4 ; G 1598
U 7861 ; WX 648 ; N uni1EB5 ; G 1599
U 7862 ; WX 776 ; N uni1EB6 ; G 1600
U 7863 ; WX 648 ; N uni1EB7 ; G 1601
U 7864 ; WX 762 ; N uni1EB8 ; G 1602
U 7865 ; WX 636 ; N uni1EB9 ; G 1603
U 7866 ; WX 762 ; N uni1EBA ; G 1604
U 7867 ; WX 636 ; N uni1EBB ; G 1605
U 7868 ; WX 762 ; N uni1EBC ; G 1606
U 7869 ; WX 636 ; N uni1EBD ; G 1607
U 7870 ; WX 762 ; N uni1EBE ; G 1608
U 7871 ; WX 636 ; N uni1EBF ; G 1609
U 7872 ; WX 762 ; N uni1EC0 ; G 1610
U 7873 ; WX 636 ; N uni1EC1 ; G 1611
U 7874 ; WX 762 ; N uni1EC2 ; G 1612
U 7875 ; WX 636 ; N uni1EC3 ; G 1613
U 7876 ; WX 762 ; N uni1EC4 ; G 1614
U 7877 ; WX 636 ; N uni1EC5 ; G 1615
U 7878 ; WX 762 ; N uni1EC6 ; G 1616
U 7879 ; WX 636 ; N uni1EC7 ; G 1617
U 7880 ; WX 468 ; N uni1EC8 ; G 1618
U 7881 ; WX 380 ; N uni1EC9 ; G 1619
U 7882 ; WX 468 ; N uni1ECA ; G 1620
U 7883 ; WX 380 ; N uni1ECB ; G 1621
U 7884 ; WX 871 ; N uni1ECC ; G 1622
U 7885 ; WX 667 ; N uni1ECD ; G 1623
U 7886 ; WX 871 ; N uni1ECE ; G 1624
U 7887 ; WX 667 ; N uni1ECF ; G 1625
U 7888 ; WX 871 ; N uni1ED0 ; G 1626
U 7889 ; WX 667 ; N uni1ED1 ; G 1627
U 7890 ; WX 871 ; N uni1ED2 ; G 1628
U 7891 ; WX 667 ; N uni1ED3 ; G 1629
U 7892 ; WX 871 ; N uni1ED4 ; G 1630
U 7893 ; WX 667 ; N uni1ED5 ; G 1631
U 7894 ; WX 871 ; N uni1ED6 ; G 1632
U 7895 ; WX 667 ; N uni1ED7 ; G 1633
U 7896 ; WX 871 ; N uni1ED8 ; G 1634
U 7897 ; WX 667 ; N uni1ED9 ; G 1635
U 7898 ; WX 871 ; N uni1EDA ; G 1636
U 7899 ; WX 667 ; N uni1EDB ; G 1637
U 7900 ; WX 871 ; N uni1EDC ; G 1638
U 7901 ; WX 667 ; N uni1EDD ; G 1639
U 7902 ; WX 871 ; N uni1EDE ; G 1640
U 7903 ; WX 667 ; N uni1EDF ; G 1641
U 7904 ; WX 871 ; N uni1EE0 ; G 1642
U 7905 ; WX 667 ; N uni1EE1 ; G 1643
U 7906 ; WX 871 ; N uni1EE2 ; G 1644
U 7907 ; WX 667 ; N uni1EE3 ; G 1645
U 7908 ; WX 872 ; N uni1EE4 ; G 1646
U 7909 ; WX 727 ; N uni1EE5 ; G 1647
U 7910 ; WX 872 ; N uni1EE6 ; G 1648
U 7911 ; WX 727 ; N uni1EE7 ; G 1649
U 7912 ; WX 872 ; N uni1EE8 ; G 1650
U 7913 ; WX 727 ; N uni1EE9 ; G 1651
U 7914 ; WX 872 ; N uni1EEA ; G 1652
U 7915 ; WX 727 ; N uni1EEB ; G 1653
U 7916 ; WX 872 ; N uni1EEC ; G 1654
U 7917 ; WX 727 ; N uni1EED ; G 1655
U 7918 ; WX 872 ; N uni1EEE ; G 1656
U 7919 ; WX 727 ; N uni1EEF ; G 1657
U 7920 ; WX 872 ; N uni1EF0 ; G 1658
U 7921 ; WX 727 ; N uni1EF1 ; G 1659
U 7922 ; WX 714 ; N Ygrave ; G 1660
U 7923 ; WX 581 ; N ygrave ; G 1661
U 7924 ; WX 714 ; N uni1EF4 ; G 1662
U 7925 ; WX 581 ; N uni1EF5 ; G 1663
U 7926 ; WX 714 ; N uni1EF6 ; G 1664
U 7927 ; WX 581 ; N uni1EF7 ; G 1665
U 7928 ; WX 714 ; N uni1EF8 ; G 1666
U 7929 ; WX 581 ; N uni1EF9 ; G 1667
U 7930 ; WX 1078 ; N uni1EFA ; G 1668
U 7931 ; WX 701 ; N uni1EFB ; G 1669
U 7936 ; WX 770 ; N uni1F00 ; G 1670
U 7937 ; WX 770 ; N uni1F01 ; G 1671
U 7938 ; WX 770 ; N uni1F02 ; G 1672
U 7939 ; WX 770 ; N uni1F03 ; G 1673
U 7940 ; WX 770 ; N uni1F04 ; G 1674
U 7941 ; WX 770 ; N uni1F05 ; G 1675
U 7942 ; WX 770 ; N uni1F06 ; G 1676
U 7943 ; WX 770 ; N uni1F07 ; G 1677
U 7944 ; WX 776 ; N uni1F08 ; G 1678
U 7945 ; WX 776 ; N uni1F09 ; G 1679
U 7946 ; WX 978 ; N uni1F0A ; G 1680
U 7947 ; WX 978 ; N uni1F0B ; G 1681
U 7948 ; WX 832 ; N uni1F0C ; G 1682
U 7949 ; WX 849 ; N uni1F0D ; G 1683
U 7950 ; WX 776 ; N uni1F0E ; G 1684
U 7951 ; WX 776 ; N uni1F0F ; G 1685
U 7952 ; WX 608 ; N uni1F10 ; G 1686
U 7953 ; WX 608 ; N uni1F11 ; G 1687
U 7954 ; WX 608 ; N uni1F12 ; G 1688
U 7955 ; WX 608 ; N uni1F13 ; G 1689
U 7956 ; WX 608 ; N uni1F14 ; G 1690
U 7957 ; WX 608 ; N uni1F15 ; G 1691
U 7960 ; WX 917 ; N uni1F18 ; G 1692
U 7961 ; WX 909 ; N uni1F19 ; G 1693
U 7962 ; WX 1169 ; N uni1F1A ; G 1694
U 7963 ; WX 1169 ; N uni1F1B ; G 1695
U 7964 ; WX 1093 ; N uni1F1C ; G 1696
U 7965 ; WX 1120 ; N uni1F1D ; G 1697
U 7968 ; WX 727 ; N uni1F20 ; G 1698
U 7969 ; WX 727 ; N uni1F21 ; G 1699
U 7970 ; WX 727 ; N uni1F22 ; G 1700
U 7971 ; WX 727 ; N uni1F23 ; G 1701
U 7972 ; WX 727 ; N uni1F24 ; G 1702
U 7973 ; WX 727 ; N uni1F25 ; G 1703
U 7974 ; WX 727 ; N uni1F26 ; G 1704
U 7975 ; WX 727 ; N uni1F27 ; G 1705
U 7976 ; WX 1100 ; N uni1F28 ; G 1706
U 7977 ; WX 1094 ; N uni1F29 ; G 1707
U 7978 ; WX 1358 ; N uni1F2A ; G 1708
U 7979 ; WX 1361 ; N uni1F2B ; G 1709
U 7980 ; WX 1279 ; N uni1F2C ; G 1710
U 7981 ; WX 1308 ; N uni1F2D ; G 1711
U 7982 ; WX 1197 ; N uni1F2E ; G 1712
U 7983 ; WX 1194 ; N uni1F2F ; G 1713
U 7984 ; WX 484 ; N uni1F30 ; G 1714
U 7985 ; WX 484 ; N uni1F31 ; G 1715
U 7986 ; WX 484 ; N uni1F32 ; G 1716
U 7987 ; WX 484 ; N uni1F33 ; G 1717
U 7988 ; WX 484 ; N uni1F34 ; G 1718
U 7989 ; WX 484 ; N uni1F35 ; G 1719
U 7990 ; WX 484 ; N uni1F36 ; G 1720
U 7991 ; WX 484 ; N uni1F37 ; G 1721
U 7992 ; WX 629 ; N uni1F38 ; G 1722
U 7993 ; WX 617 ; N uni1F39 ; G 1723
U 7994 ; WX 878 ; N uni1F3A ; G 1724
U 7995 ; WX 881 ; N uni1F3B ; G 1725
U 7996 ; WX 799 ; N uni1F3C ; G 1726
U 7997 ; WX 831 ; N uni1F3D ; G 1727
U 7998 ; WX 723 ; N uni1F3E ; G 1728
U 7999 ; WX 714 ; N uni1F3F ; G 1729
U 8000 ; WX 667 ; N uni1F40 ; G 1730
U 8001 ; WX 667 ; N uni1F41 ; G 1731
U 8002 ; WX 667 ; N uni1F42 ; G 1732
U 8003 ; WX 667 ; N uni1F43 ; G 1733
U 8004 ; WX 667 ; N uni1F44 ; G 1734
U 8005 ; WX 667 ; N uni1F45 ; G 1735
U 8008 ; WX 900 ; N uni1F48 ; G 1736
U 8009 ; WX 935 ; N uni1F49 ; G 1737
U 8010 ; WX 1240 ; N uni1F4A ; G 1738
U 8011 ; WX 1237 ; N uni1F4B ; G 1739
U 8012 ; WX 1035 ; N uni1F4C ; G 1740
U 8013 ; WX 1066 ; N uni1F4D ; G 1741
U 8016 ; WX 694 ; N uni1F50 ; G 1742
U 8017 ; WX 694 ; N uni1F51 ; G 1743
U 8018 ; WX 694 ; N uni1F52 ; G 1744
U 8019 ; WX 694 ; N uni1F53 ; G 1745
U 8020 ; WX 694 ; N uni1F54 ; G 1746
U 8021 ; WX 694 ; N uni1F55 ; G 1747
U 8022 ; WX 694 ; N uni1F56 ; G 1748
U 8023 ; WX 694 ; N uni1F57 ; G 1749
U 8025 ; WX 922 ; N uni1F59 ; G 1750
U 8027 ; WX 1186 ; N uni1F5B ; G 1751
U 8029 ; WX 1133 ; N uni1F5D ; G 1752
U 8031 ; WX 1019 ; N uni1F5F ; G 1753
U 8032 ; WX 952 ; N uni1F60 ; G 1754
U 8033 ; WX 952 ; N uni1F61 ; G 1755
U 8034 ; WX 952 ; N uni1F62 ; G 1756
U 8035 ; WX 952 ; N uni1F63 ; G 1757
U 8036 ; WX 952 ; N uni1F64 ; G 1758
U 8037 ; WX 952 ; N uni1F65 ; G 1759
U 8038 ; WX 952 ; N uni1F66 ; G 1760
U 8039 ; WX 952 ; N uni1F67 ; G 1761
U 8040 ; WX 931 ; N uni1F68 ; G 1762
U 8041 ; WX 963 ; N uni1F69 ; G 1763
U 8042 ; WX 1268 ; N uni1F6A ; G 1764
U 8043 ; WX 1274 ; N uni1F6B ; G 1765
U 8044 ; WX 1054 ; N uni1F6C ; G 1766
U 8045 ; WX 1088 ; N uni1F6D ; G 1767
U 8046 ; WX 1023 ; N uni1F6E ; G 1768
U 8047 ; WX 1060 ; N uni1F6F ; G 1769
U 8048 ; WX 770 ; N uni1F70 ; G 1770
U 8049 ; WX 770 ; N uni1F71 ; G 1771
U 8050 ; WX 608 ; N uni1F72 ; G 1772
U 8051 ; WX 608 ; N uni1F73 ; G 1773
U 8052 ; WX 727 ; N uni1F74 ; G 1774
U 8053 ; WX 727 ; N uni1F75 ; G 1775
U 8054 ; WX 484 ; N uni1F76 ; G 1776
U 8055 ; WX 484 ; N uni1F77 ; G 1777
U 8056 ; WX 667 ; N uni1F78 ; G 1778
U 8057 ; WX 667 ; N uni1F79 ; G 1779
U 8058 ; WX 694 ; N uni1F7A ; G 1780
U 8059 ; WX 694 ; N uni1F7B ; G 1781
U 8060 ; WX 952 ; N uni1F7C ; G 1782
U 8061 ; WX 952 ; N uni1F7D ; G 1783
U 8064 ; WX 770 ; N uni1F80 ; G 1784
U 8065 ; WX 770 ; N uni1F81 ; G 1785
U 8066 ; WX 770 ; N uni1F82 ; G 1786
U 8067 ; WX 770 ; N uni1F83 ; G 1787
U 8068 ; WX 770 ; N uni1F84 ; G 1788
U 8069 ; WX 770 ; N uni1F85 ; G 1789
U 8070 ; WX 770 ; N uni1F86 ; G 1790
U 8071 ; WX 770 ; N uni1F87 ; G 1791
U 8072 ; WX 776 ; N uni1F88 ; G 1792
U 8073 ; WX 776 ; N uni1F89 ; G 1793
U 8074 ; WX 978 ; N uni1F8A ; G 1794
U 8075 ; WX 978 ; N uni1F8B ; G 1795
U 8076 ; WX 832 ; N uni1F8C ; G 1796
U 8077 ; WX 849 ; N uni1F8D ; G 1797
U 8078 ; WX 776 ; N uni1F8E ; G 1798
U 8079 ; WX 776 ; N uni1F8F ; G 1799
U 8080 ; WX 727 ; N uni1F90 ; G 1800
U 8081 ; WX 727 ; N uni1F91 ; G 1801
U 8082 ; WX 727 ; N uni1F92 ; G 1802
U 8083 ; WX 727 ; N uni1F93 ; G 1803
U 8084 ; WX 727 ; N uni1F94 ; G 1804
U 8085 ; WX 727 ; N uni1F95 ; G 1805
U 8086 ; WX 727 ; N uni1F96 ; G 1806
U 8087 ; WX 727 ; N uni1F97 ; G 1807
U 8088 ; WX 1100 ; N uni1F98 ; G 1808
U 8089 ; WX 1094 ; N uni1F99 ; G 1809
U 8090 ; WX 1358 ; N uni1F9A ; G 1810
U 8091 ; WX 1361 ; N uni1F9B ; G 1811
U 8092 ; WX 1279 ; N uni1F9C ; G 1812
U 8093 ; WX 1308 ; N uni1F9D ; G 1813
U 8094 ; WX 1197 ; N uni1F9E ; G 1814
U 8095 ; WX 1194 ; N uni1F9F ; G 1815
U 8096 ; WX 952 ; N uni1FA0 ; G 1816
U 8097 ; WX 952 ; N uni1FA1 ; G 1817
U 8098 ; WX 952 ; N uni1FA2 ; G 1818
U 8099 ; WX 952 ; N uni1FA3 ; G 1819
U 8100 ; WX 952 ; N uni1FA4 ; G 1820
U 8101 ; WX 952 ; N uni1FA5 ; G 1821
U 8102 ; WX 952 ; N uni1FA6 ; G 1822
U 8103 ; WX 952 ; N uni1FA7 ; G 1823
U 8104 ; WX 931 ; N uni1FA8 ; G 1824
U 8105 ; WX 963 ; N uni1FA9 ; G 1825
U 8106 ; WX 1268 ; N uni1FAA ; G 1826
U 8107 ; WX 1274 ; N uni1FAB ; G 1827
U 8108 ; WX 1054 ; N uni1FAC ; G 1828
U 8109 ; WX 1088 ; N uni1FAD ; G 1829
U 8110 ; WX 1023 ; N uni1FAE ; G 1830
U 8111 ; WX 1060 ; N uni1FAF ; G 1831
U 8112 ; WX 770 ; N uni1FB0 ; G 1832
U 8113 ; WX 770 ; N uni1FB1 ; G 1833
U 8114 ; WX 770 ; N uni1FB2 ; G 1834
U 8115 ; WX 770 ; N uni1FB3 ; G 1835
U 8116 ; WX 770 ; N uni1FB4 ; G 1836
U 8118 ; WX 770 ; N uni1FB6 ; G 1837
U 8119 ; WX 770 ; N uni1FB7 ; G 1838
U 8120 ; WX 776 ; N uni1FB8 ; G 1839
U 8121 ; WX 776 ; N uni1FB9 ; G 1840
U 8122 ; WX 811 ; N uni1FBA ; G 1841
U 8123 ; WX 776 ; N uni1FBB ; G 1842
U 8124 ; WX 776 ; N uni1FBC ; G 1843
U 8125 ; WX 500 ; N uni1FBD ; G 1844
U 8126 ; WX 500 ; N uni1FBE ; G 1845
U 8127 ; WX 500 ; N uni1FBF ; G 1846
U 8128 ; WX 500 ; N uni1FC0 ; G 1847
U 8129 ; WX 500 ; N uni1FC1 ; G 1848
U 8130 ; WX 727 ; N uni1FC2 ; G 1849
U 8131 ; WX 727 ; N uni1FC3 ; G 1850
U 8132 ; WX 727 ; N uni1FC4 ; G 1851
U 8134 ; WX 727 ; N uni1FC6 ; G 1852
U 8135 ; WX 727 ; N uni1FC7 ; G 1853
U 8136 ; WX 1000 ; N uni1FC8 ; G 1854
U 8137 ; WX 947 ; N uni1FC9 ; G 1855
U 8138 ; WX 1191 ; N uni1FCA ; G 1856
U 8139 ; WX 1118 ; N uni1FCB ; G 1857
U 8140 ; WX 945 ; N uni1FCC ; G 1858
U 8141 ; WX 500 ; N uni1FCD ; G 1859
U 8142 ; WX 500 ; N uni1FCE ; G 1860
U 8143 ; WX 500 ; N uni1FCF ; G 1861
U 8144 ; WX 484 ; N uni1FD0 ; G 1862
U 8145 ; WX 484 ; N uni1FD1 ; G 1863
U 8146 ; WX 484 ; N uni1FD2 ; G 1864
U 8147 ; WX 484 ; N uni1FD3 ; G 1865
U 8150 ; WX 484 ; N uni1FD6 ; G 1866
U 8151 ; WX 484 ; N uni1FD7 ; G 1867
U 8152 ; WX 468 ; N uni1FD8 ; G 1868
U 8153 ; WX 468 ; N uni1FD9 ; G 1869
U 8154 ; WX 714 ; N uni1FDA ; G 1870
U 8155 ; WX 662 ; N uni1FDB ; G 1871
U 8157 ; WX 500 ; N uni1FDD ; G 1872
U 8158 ; WX 500 ; N uni1FDE ; G 1873
U 8159 ; WX 500 ; N uni1FDF ; G 1874
U 8160 ; WX 694 ; N uni1FE0 ; G 1875
U 8161 ; WX 694 ; N uni1FE1 ; G 1876
U 8162 ; WX 694 ; N uni1FE2 ; G 1877
U 8163 ; WX 694 ; N uni1FE3 ; G 1878
U 8164 ; WX 665 ; N uni1FE4 ; G 1879
U 8165 ; WX 665 ; N uni1FE5 ; G 1880
U 8166 ; WX 694 ; N uni1FE6 ; G 1881
U 8167 ; WX 694 ; N uni1FE7 ; G 1882
U 8168 ; WX 714 ; N uni1FE8 ; G 1883
U 8169 ; WX 714 ; N uni1FE9 ; G 1884
U 8170 ; WX 1019 ; N uni1FEA ; G 1885
U 8171 ; WX 953 ; N uni1FEB ; G 1886
U 8172 ; WX 910 ; N uni1FEC ; G 1887
U 8173 ; WX 500 ; N uni1FED ; G 1888
U 8174 ; WX 500 ; N uni1FEE ; G 1889
U 8175 ; WX 500 ; N uni1FEF ; G 1890
U 8178 ; WX 952 ; N uni1FF2 ; G 1891
U 8179 ; WX 952 ; N uni1FF3 ; G 1892
U 8180 ; WX 952 ; N uni1FF4 ; G 1893
U 8182 ; WX 952 ; N uni1FF6 ; G 1894
U 8183 ; WX 952 ; N uni1FF7 ; G 1895
U 8184 ; WX 1069 ; N uni1FF8 ; G 1896
U 8185 ; WX 887 ; N uni1FF9 ; G 1897
U 8186 ; WX 1101 ; N uni1FFA ; G 1898
U 8187 ; WX 911 ; N uni1FFB ; G 1899
U 8188 ; WX 890 ; N uni1FFC ; G 1900
U 8189 ; WX 500 ; N uni1FFD ; G 1901
U 8190 ; WX 500 ; N uni1FFE ; G 1902
U 8192 ; WX 500 ; N uni2000 ; G 1903
U 8193 ; WX 1000 ; N uni2001 ; G 1904
U 8194 ; WX 500 ; N uni2002 ; G 1905
U 8195 ; WX 1000 ; N uni2003 ; G 1906
U 8196 ; WX 330 ; N uni2004 ; G 1907
U 8197 ; WX 250 ; N uni2005 ; G 1908
U 8198 ; WX 167 ; N uni2006 ; G 1909
U 8199 ; WX 696 ; N uni2007 ; G 1910
U 8200 ; WX 348 ; N uni2008 ; G 1911
U 8201 ; WX 200 ; N uni2009 ; G 1912
U 8202 ; WX 100 ; N uni200A ; G 1913
U 8203 ; WX 0 ; N uni200B ; G 1914
U 8204 ; WX 0 ; N uni200C ; G 1915
U 8205 ; WX 0 ; N uni200D ; G 1916
U 8206 ; WX 0 ; N uni200E ; G 1917
U 8207 ; WX 0 ; N uni200F ; G 1918
U 8208 ; WX 415 ; N uni2010 ; G 1919
U 8209 ; WX 415 ; N uni2011 ; G 1920
U 8210 ; WX 696 ; N figuredash ; G 1921
U 8211 ; WX 500 ; N endash ; G 1922
U 8212 ; WX 1000 ; N emdash ; G 1923
U 8213 ; WX 1000 ; N uni2015 ; G 1924
U 8214 ; WX 500 ; N uni2016 ; G 1925
U 8215 ; WX 500 ; N underscoredbl ; G 1926
U 8216 ; WX 348 ; N quoteleft ; G 1927
U 8217 ; WX 348 ; N quoteright ; G 1928
U 8218 ; WX 348 ; N quotesinglbase ; G 1929
U 8219 ; WX 348 ; N quotereversed ; G 1930
U 8220 ; WX 575 ; N quotedblleft ; G 1931
U 8221 ; WX 575 ; N quotedblright ; G 1932
U 8222 ; WX 575 ; N quotedblbase ; G 1933
U 8223 ; WX 575 ; N uni201F ; G 1934
U 8224 ; WX 523 ; N dagger ; G 1935
U 8225 ; WX 523 ; N daggerdbl ; G 1936
U 8226 ; WX 639 ; N bullet ; G 1937
U 8227 ; WX 639 ; N uni2023 ; G 1938
U 8228 ; WX 348 ; N onedotenleader ; G 1939
U 8229 ; WX 674 ; N twodotenleader ; G 1940
U 8230 ; WX 1000 ; N ellipsis ; G 1941
U 8234 ; WX 0 ; N uni202A ; G 1942
U 8235 ; WX 0 ; N uni202B ; G 1943
U 8236 ; WX 0 ; N uni202C ; G 1944
U 8237 ; WX 0 ; N uni202D ; G 1945
U 8238 ; WX 0 ; N uni202E ; G 1946
U 8239 ; WX 200 ; N uni202F ; G 1947
U 8240 ; WX 1385 ; N perthousand ; G 1948
U 8241 ; WX 1820 ; N uni2031 ; G 1949
U 8242 ; WX 264 ; N minute ; G 1950
U 8243 ; WX 447 ; N second ; G 1951
U 8244 ; WX 630 ; N uni2034 ; G 1952
U 8245 ; WX 264 ; N uni2035 ; G 1953
U 8246 ; WX 447 ; N uni2036 ; G 1954
U 8247 ; WX 630 ; N uni2037 ; G 1955
U 8248 ; WX 733 ; N uni2038 ; G 1956
U 8249 ; WX 400 ; N guilsinglleft ; G 1957
U 8250 ; WX 400 ; N guilsinglright ; G 1958
U 8252 ; WX 629 ; N exclamdbl ; G 1959
U 8253 ; WX 586 ; N uni203D ; G 1960
U 8254 ; WX 500 ; N uni203E ; G 1961
U 8258 ; WX 1023 ; N uni2042 ; G 1962
U 8260 ; WX 167 ; N fraction ; G 1963
U 8261 ; WX 473 ; N uni2045 ; G 1964
U 8262 ; WX 473 ; N uni2046 ; G 1965
U 8263 ; WX 1082 ; N uni2047 ; G 1966
U 8264 ; WX 856 ; N uni2048 ; G 1967
U 8265 ; WX 856 ; N uni2049 ; G 1968
U 8267 ; WX 636 ; N uni204B ; G 1969
U 8268 ; WX 500 ; N uni204C ; G 1970
U 8269 ; WX 500 ; N uni204D ; G 1971
U 8270 ; WX 523 ; N uni204E ; G 1972
U 8271 ; WX 369 ; N uni204F ; G 1973
U 8273 ; WX 523 ; N uni2051 ; G 1974
U 8274 ; WX 556 ; N uni2052 ; G 1975
U 8275 ; WX 1000 ; N uni2053 ; G 1976
U 8279 ; WX 813 ; N uni2057 ; G 1977
U 8287 ; WX 222 ; N uni205F ; G 1978
U 8288 ; WX 0 ; N uni2060 ; G 1979
U 8289 ; WX 0 ; N uni2061 ; G 1980
U 8290 ; WX 0 ; N uni2062 ; G 1981
U 8291 ; WX 0 ; N uni2063 ; G 1982
U 8292 ; WX 0 ; N uni2064 ; G 1983
U 8298 ; WX 0 ; N uni206A ; G 1984
U 8299 ; WX 0 ; N uni206B ; G 1985
U 8300 ; WX 0 ; N uni206C ; G 1986
U 8301 ; WX 0 ; N uni206D ; G 1987
U 8302 ; WX 0 ; N uni206E ; G 1988
U 8303 ; WX 0 ; N uni206F ; G 1989
U 8304 ; WX 438 ; N uni2070 ; G 1990
U 8305 ; WX 239 ; N uni2071 ; G 1991
U 8308 ; WX 438 ; N uni2074 ; G 1992
U 8309 ; WX 438 ; N uni2075 ; G 1993
U 8310 ; WX 438 ; N uni2076 ; G 1994
U 8311 ; WX 438 ; N uni2077 ; G 1995
U 8312 ; WX 438 ; N uni2078 ; G 1996
U 8313 ; WX 438 ; N uni2079 ; G 1997
U 8314 ; WX 528 ; N uni207A ; G 1998
U 8315 ; WX 528 ; N uni207B ; G 1999
U 8316 ; WX 528 ; N uni207C ; G 2000
U 8317 ; WX 298 ; N uni207D ; G 2001
U 8318 ; WX 298 ; N uni207E ; G 2002
U 8319 ; WX 519 ; N uni207F ; G 2003
U 8320 ; WX 438 ; N uni2080 ; G 2004
U 8321 ; WX 438 ; N uni2081 ; G 2005
U 8322 ; WX 438 ; N uni2082 ; G 2006
U 8323 ; WX 438 ; N uni2083 ; G 2007
U 8324 ; WX 438 ; N uni2084 ; G 2008
U 8325 ; WX 438 ; N uni2085 ; G 2009
U 8326 ; WX 438 ; N uni2086 ; G 2010
U 8327 ; WX 438 ; N uni2087 ; G 2011
U 8328 ; WX 438 ; N uni2088 ; G 2012
U 8329 ; WX 438 ; N uni2089 ; G 2013
U 8330 ; WX 528 ; N uni208A ; G 2014
U 8331 ; WX 528 ; N uni208B ; G 2015
U 8332 ; WX 528 ; N uni208C ; G 2016
U 8333 ; WX 298 ; N uni208D ; G 2017
U 8334 ; WX 298 ; N uni208E ; G 2018
U 8336 ; WX 466 ; N uni2090 ; G 2019
U 8337 ; WX 444 ; N uni2091 ; G 2020
U 8338 ; WX 467 ; N uni2092 ; G 2021
U 8339 ; WX 475 ; N uni2093 ; G 2022
U 8340 ; WX 444 ; N uni2094 ; G 2023
U 8341 ; WX 521 ; N uni2095 ; G 2024
U 8342 ; WX 523 ; N uni2096 ; G 2025
U 8343 ; WX 292 ; N uni2097 ; G 2026
U 8344 ; WX 729 ; N uni2098 ; G 2027
U 8345 ; WX 519 ; N uni2099 ; G 2028
U 8346 ; WX 499 ; N uni209A ; G 2029
U 8347 ; WX 395 ; N uni209B ; G 2030
U 8348 ; WX 371 ; N uni209C ; G 2031
U 8358 ; WX 696 ; N uni20A6 ; G 2032
U 8364 ; WX 696 ; N Euro ; G 2033
U 8367 ; WX 1155 ; N uni20AF ; G 2034
U 8369 ; WX 790 ; N uni20B1 ; G 2035
U 8372 ; WX 876 ; N uni20B4 ; G 2036
U 8373 ; WX 696 ; N uni20B5 ; G 2037
U 8376 ; WX 696 ; N uni20B8 ; G 2038
U 8377 ; WX 696 ; N uni20B9 ; G 2039
U 8378 ; WX 696 ; N uni20BA ; G 2040
U 8381 ; WX 696 ; N uni20BD ; G 2041
U 8451 ; WX 1198 ; N uni2103 ; G 2042
U 8457 ; WX 1112 ; N uni2109 ; G 2043
U 8462 ; WX 727 ; N uni210E ; G 2044
U 8463 ; WX 727 ; N uni210F ; G 2045
U 8470 ; WX 1087 ; N uni2116 ; G 2046
U 8482 ; WX 1000 ; N trademark ; G 2047
U 8486 ; WX 890 ; N uni2126 ; G 2048
U 8487 ; WX 890 ; N uni2127 ; G 2049
U 8490 ; WX 869 ; N uni212A ; G 2050
U 8491 ; WX 776 ; N uni212B ; G 2051
U 8498 ; WX 710 ; N uni2132 ; G 2052
U 8513 ; WX 775 ; N uni2141 ; G 2053
U 8514 ; WX 557 ; N uni2142 ; G 2054
U 8515 ; WX 637 ; N uni2143 ; G 2055
U 8516 ; WX 760 ; N uni2144 ; G 2056
U 8523 ; WX 903 ; N uni214B ; G 2057
U 8526 ; WX 592 ; N uni214E ; G 2058
U 8528 ; WX 1035 ; N uni2150 ; G 2059
U 8529 ; WX 1035 ; N uni2151 ; G 2060
U 8530 ; WX 1473 ; N uni2152 ; G 2061
U 8531 ; WX 1035 ; N onethird ; G 2062
U 8532 ; WX 1035 ; N twothirds ; G 2063
U 8533 ; WX 1035 ; N uni2155 ; G 2064
U 8534 ; WX 1035 ; N uni2156 ; G 2065
U 8535 ; WX 1035 ; N uni2157 ; G 2066
U 8536 ; WX 1035 ; N uni2158 ; G 2067
U 8537 ; WX 1035 ; N uni2159 ; G 2068
U 8538 ; WX 1035 ; N uni215A ; G 2069
U 8539 ; WX 1035 ; N oneeighth ; G 2070
U 8540 ; WX 1035 ; N threeeighths ; G 2071
U 8541 ; WX 1035 ; N fiveeighths ; G 2072
U 8542 ; WX 1035 ; N seveneighths ; G 2073
U 8543 ; WX 615 ; N uni215F ; G 2074
U 8544 ; WX 468 ; N uni2160 ; G 2075
U 8545 ; WX 843 ; N uni2161 ; G 2076
U 8546 ; WX 1218 ; N uni2162 ; G 2077
U 8547 ; WX 1135 ; N uni2163 ; G 2078
U 8548 ; WX 776 ; N uni2164 ; G 2079
U 8549 ; WX 1150 ; N uni2165 ; G 2080
U 8550 ; WX 1525 ; N uni2166 ; G 2081
U 8551 ; WX 1900 ; N uni2167 ; G 2082
U 8552 ; WX 1126 ; N uni2168 ; G 2083
U 8553 ; WX 776 ; N uni2169 ; G 2084
U 8554 ; WX 1127 ; N uni216A ; G 2085
U 8555 ; WX 1502 ; N uni216B ; G 2086
U 8556 ; WX 703 ; N uni216C ; G 2087
U 8557 ; WX 796 ; N uni216D ; G 2088
U 8558 ; WX 867 ; N uni216E ; G 2089
U 8559 ; WX 1107 ; N uni216F ; G 2090
U 8560 ; WX 380 ; N uni2170 ; G 2091
U 8561 ; WX 760 ; N uni2171 ; G 2092
U 8562 ; WX 1140 ; N uni2172 ; G 2093
U 8563 ; WX 961 ; N uni2173 ; G 2094
U 8564 ; WX 581 ; N uni2174 ; G 2095
U 8565 ; WX 961 ; N uni2175 ; G 2096
U 8566 ; WX 1341 ; N uni2176 ; G 2097
U 8567 ; WX 1721 ; N uni2177 ; G 2098
U 8568 ; WX 976 ; N uni2178 ; G 2099
U 8569 ; WX 596 ; N uni2179 ; G 2100
U 8570 ; WX 976 ; N uni217A ; G 2101
U 8571 ; WX 1356 ; N uni217B ; G 2102
U 8572 ; WX 380 ; N uni217C ; G 2103
U 8573 ; WX 609 ; N uni217D ; G 2104
U 8574 ; WX 699 ; N uni217E ; G 2105
U 8575 ; WX 1058 ; N uni217F ; G 2106
U 8576 ; WX 1255 ; N uni2180 ; G 2107
U 8577 ; WX 867 ; N uni2181 ; G 2108
U 8578 ; WX 1268 ; N uni2182 ; G 2109
U 8579 ; WX 796 ; N uni2183 ; G 2110
U 8580 ; WX 609 ; N uni2184 ; G 2111
U 8581 ; WX 796 ; N uni2185 ; G 2112
U 8585 ; WX 1035 ; N uni2189 ; G 2113
U 8592 ; WX 838 ; N arrowleft ; G 2114
U 8593 ; WX 838 ; N arrowup ; G 2115
U 8594 ; WX 838 ; N arrowright ; G 2116
U 8595 ; WX 838 ; N arrowdown ; G 2117
U 8596 ; WX 838 ; N arrowboth ; G 2118
U 8597 ; WX 838 ; N arrowupdn ; G 2119
U 8598 ; WX 838 ; N uni2196 ; G 2120
U 8599 ; WX 838 ; N uni2197 ; G 2121
U 8600 ; WX 838 ; N uni2198 ; G 2122
U 8601 ; WX 838 ; N uni2199 ; G 2123
U 8602 ; WX 838 ; N uni219A ; G 2124
U 8603 ; WX 838 ; N uni219B ; G 2125
U 8604 ; WX 838 ; N uni219C ; G 2126
U 8605 ; WX 838 ; N uni219D ; G 2127
U 8606 ; WX 838 ; N uni219E ; G 2128
U 8607 ; WX 838 ; N uni219F ; G 2129
U 8608 ; WX 838 ; N uni21A0 ; G 2130
U 8609 ; WX 838 ; N uni21A1 ; G 2131
U 8610 ; WX 838 ; N uni21A2 ; G 2132
U 8611 ; WX 838 ; N uni21A3 ; G 2133
U 8612 ; WX 838 ; N uni21A4 ; G 2134
U 8613 ; WX 838 ; N uni21A5 ; G 2135
U 8614 ; WX 838 ; N uni21A6 ; G 2136
U 8615 ; WX 838 ; N uni21A7 ; G 2137
U 8616 ; WX 838 ; N arrowupdnbse ; G 2138
U 8617 ; WX 838 ; N uni21A9 ; G 2139
U 8618 ; WX 838 ; N uni21AA ; G 2140
U 8619 ; WX 838 ; N uni21AB ; G 2141
U 8620 ; WX 838 ; N uni21AC ; G 2142
U 8621 ; WX 838 ; N uni21AD ; G 2143
U 8622 ; WX 838 ; N uni21AE ; G 2144
U 8623 ; WX 850 ; N uni21AF ; G 2145
U 8624 ; WX 838 ; N uni21B0 ; G 2146
U 8625 ; WX 838 ; N uni21B1 ; G 2147
U 8626 ; WX 838 ; N uni21B2 ; G 2148
U 8627 ; WX 838 ; N uni21B3 ; G 2149
U 8628 ; WX 838 ; N uni21B4 ; G 2150
U 8629 ; WX 838 ; N carriagereturn ; G 2151
U 8630 ; WX 838 ; N uni21B6 ; G 2152
U 8631 ; WX 838 ; N uni21B7 ; G 2153
U 8632 ; WX 838 ; N uni21B8 ; G 2154
U 8633 ; WX 838 ; N uni21B9 ; G 2155
U 8634 ; WX 838 ; N uni21BA ; G 2156
U 8635 ; WX 838 ; N uni21BB ; G 2157
U 8636 ; WX 838 ; N uni21BC ; G 2158
U 8637 ; WX 838 ; N uni21BD ; G 2159
U 8638 ; WX 838 ; N uni21BE ; G 2160
U 8639 ; WX 838 ; N uni21BF ; G 2161
U 8640 ; WX 838 ; N uni21C0 ; G 2162
U 8641 ; WX 838 ; N uni21C1 ; G 2163
U 8642 ; WX 838 ; N uni21C2 ; G 2164
U 8643 ; WX 838 ; N uni21C3 ; G 2165
U 8644 ; WX 838 ; N uni21C4 ; G 2166
U 8645 ; WX 838 ; N uni21C5 ; G 2167
U 8646 ; WX 838 ; N uni21C6 ; G 2168
U 8647 ; WX 838 ; N uni21C7 ; G 2169
U 8648 ; WX 838 ; N uni21C8 ; G 2170
U 8649 ; WX 838 ; N uni21C9 ; G 2171
U 8650 ; WX 838 ; N uni21CA ; G 2172
U 8651 ; WX 838 ; N uni21CB ; G 2173
U 8652 ; WX 838 ; N uni21CC ; G 2174
U 8653 ; WX 838 ; N uni21CD ; G 2175
U 8654 ; WX 838 ; N uni21CE ; G 2176
U 8655 ; WX 838 ; N uni21CF ; G 2177
U 8656 ; WX 838 ; N arrowdblleft ; G 2178
U 8657 ; WX 838 ; N arrowdblup ; G 2179
U 8658 ; WX 838 ; N arrowdblright ; G 2180
U 8659 ; WX 838 ; N arrowdbldown ; G 2181
U 8660 ; WX 838 ; N arrowdblboth ; G 2182
U 8661 ; WX 838 ; N uni21D5 ; G 2183
U 8662 ; WX 838 ; N uni21D6 ; G 2184
U 8663 ; WX 838 ; N uni21D7 ; G 2185
U 8664 ; WX 838 ; N uni21D8 ; G 2186
U 8665 ; WX 838 ; N uni21D9 ; G 2187
U 8666 ; WX 838 ; N uni21DA ; G 2188
U 8667 ; WX 838 ; N uni21DB ; G 2189
U 8668 ; WX 838 ; N uni21DC ; G 2190
U 8669 ; WX 838 ; N uni21DD ; G 2191
U 8670 ; WX 838 ; N uni21DE ; G 2192
U 8671 ; WX 838 ; N uni21DF ; G 2193
U 8672 ; WX 838 ; N uni21E0 ; G 2194
U 8673 ; WX 838 ; N uni21E1 ; G 2195
U 8674 ; WX 838 ; N uni21E2 ; G 2196
U 8675 ; WX 838 ; N uni21E3 ; G 2197
U 8676 ; WX 838 ; N uni21E4 ; G 2198
U 8677 ; WX 838 ; N uni21E5 ; G 2199
U 8678 ; WX 838 ; N uni21E6 ; G 2200
U 8679 ; WX 838 ; N uni21E7 ; G 2201
U 8680 ; WX 838 ; N uni21E8 ; G 2202
U 8681 ; WX 838 ; N uni21E9 ; G 2203
U 8682 ; WX 838 ; N uni21EA ; G 2204
U 8683 ; WX 838 ; N uni21EB ; G 2205
U 8684 ; WX 838 ; N uni21EC ; G 2206
U 8685 ; WX 838 ; N uni21ED ; G 2207
U 8686 ; WX 838 ; N uni21EE ; G 2208
U 8687 ; WX 838 ; N uni21EF ; G 2209
U 8688 ; WX 838 ; N uni21F0 ; G 2210
U 8689 ; WX 838 ; N uni21F1 ; G 2211
U 8690 ; WX 838 ; N uni21F2 ; G 2212
U 8691 ; WX 838 ; N uni21F3 ; G 2213
U 8692 ; WX 838 ; N uni21F4 ; G 2214
U 8693 ; WX 838 ; N uni21F5 ; G 2215
U 8694 ; WX 838 ; N uni21F6 ; G 2216
U 8695 ; WX 838 ; N uni21F7 ; G 2217
U 8696 ; WX 838 ; N uni21F8 ; G 2218
U 8697 ; WX 838 ; N uni21F9 ; G 2219
U 8698 ; WX 838 ; N uni21FA ; G 2220
U 8699 ; WX 838 ; N uni21FB ; G 2221
U 8700 ; WX 838 ; N uni21FC ; G 2222
U 8701 ; WX 838 ; N uni21FD ; G 2223
U 8702 ; WX 838 ; N uni21FE ; G 2224
U 8703 ; WX 838 ; N uni21FF ; G 2225
U 8704 ; WX 641 ; N universal ; G 2226
U 8706 ; WX 534 ; N partialdiff ; G 2227
U 8707 ; WX 620 ; N existential ; G 2228
U 8708 ; WX 620 ; N uni2204 ; G 2229
U 8710 ; WX 753 ; N increment ; G 2230
U 8711 ; WX 753 ; N gradient ; G 2231
U 8712 ; WX 740 ; N element ; G 2232
U 8713 ; WX 740 ; N notelement ; G 2233
U 8715 ; WX 740 ; N suchthat ; G 2234
U 8716 ; WX 740 ; N uni220C ; G 2235
U 8719 ; WX 842 ; N product ; G 2236
U 8720 ; WX 842 ; N uni2210 ; G 2237
U 8721 ; WX 753 ; N summation ; G 2238
U 8722 ; WX 838 ; N minus ; G 2239
U 8723 ; WX 838 ; N uni2213 ; G 2240
U 8724 ; WX 838 ; N uni2214 ; G 2241
U 8725 ; WX 365 ; N uni2215 ; G 2242
U 8727 ; WX 691 ; N asteriskmath ; G 2243
U 8728 ; WX 519 ; N uni2218 ; G 2244
U 8729 ; WX 519 ; N uni2219 ; G 2245
U 8730 ; WX 657 ; N radical ; G 2246
U 8731 ; WX 657 ; N uni221B ; G 2247
U 8732 ; WX 657 ; N uni221C ; G 2248
U 8733 ; WX 672 ; N proportional ; G 2249
U 8734 ; WX 833 ; N infinity ; G 2250
U 8735 ; WX 838 ; N orthogonal ; G 2251
U 8736 ; WX 838 ; N angle ; G 2252
U 8739 ; WX 324 ; N uni2223 ; G 2253
U 8740 ; WX 607 ; N uni2224 ; G 2254
U 8741 ; WX 529 ; N uni2225 ; G 2255
U 8742 ; WX 773 ; N uni2226 ; G 2256
U 8743 ; WX 812 ; N logicaland ; G 2257
U 8744 ; WX 812 ; N logicalor ; G 2258
U 8745 ; WX 838 ; N intersection ; G 2259
U 8746 ; WX 838 ; N union ; G 2260
U 8747 ; WX 579 ; N integral ; G 2261
U 8748 ; WX 1000 ; N uni222C ; G 2262
U 8749 ; WX 1391 ; N uni222D ; G 2263
U 8760 ; WX 838 ; N uni2238 ; G 2264
U 8761 ; WX 838 ; N uni2239 ; G 2265
U 8762 ; WX 838 ; N uni223A ; G 2266
U 8763 ; WX 838 ; N uni223B ; G 2267
U 8764 ; WX 838 ; N similar ; G 2268
U 8765 ; WX 838 ; N uni223D ; G 2269
U 8770 ; WX 838 ; N uni2242 ; G 2270
U 8771 ; WX 838 ; N uni2243 ; G 2271
U 8776 ; WX 838 ; N approxequal ; G 2272
U 8784 ; WX 838 ; N uni2250 ; G 2273
U 8785 ; WX 838 ; N uni2251 ; G 2274
U 8786 ; WX 838 ; N uni2252 ; G 2275
U 8787 ; WX 838 ; N uni2253 ; G 2276
U 8788 ; WX 1082 ; N uni2254 ; G 2277
U 8789 ; WX 1082 ; N uni2255 ; G 2278
U 8800 ; WX 838 ; N notequal ; G 2279
U 8801 ; WX 838 ; N equivalence ; G 2280
U 8804 ; WX 838 ; N lessequal ; G 2281
U 8805 ; WX 838 ; N greaterequal ; G 2282
U 8834 ; WX 838 ; N propersubset ; G 2283
U 8835 ; WX 838 ; N propersuperset ; G 2284
U 8836 ; WX 838 ; N notsubset ; G 2285
U 8837 ; WX 838 ; N uni2285 ; G 2286
U 8838 ; WX 838 ; N reflexsubset ; G 2287
U 8839 ; WX 838 ; N reflexsuperset ; G 2288
U 8844 ; WX 838 ; N uni228C ; G 2289
U 8845 ; WX 838 ; N uni228D ; G 2290
U 8846 ; WX 838 ; N uni228E ; G 2291
U 8847 ; WX 838 ; N uni228F ; G 2292
U 8848 ; WX 838 ; N uni2290 ; G 2293
U 8849 ; WX 838 ; N uni2291 ; G 2294
U 8850 ; WX 838 ; N uni2292 ; G 2295
U 8851 ; WX 838 ; N uni2293 ; G 2296
U 8852 ; WX 838 ; N uni2294 ; G 2297
U 8853 ; WX 838 ; N circleplus ; G 2298
U 8854 ; WX 838 ; N uni2296 ; G 2299
U 8855 ; WX 838 ; N circlemultiply ; G 2300
U 8856 ; WX 838 ; N uni2298 ; G 2301
U 8857 ; WX 838 ; N uni2299 ; G 2302
U 8858 ; WX 838 ; N uni229A ; G 2303
U 8859 ; WX 838 ; N uni229B ; G 2304
U 8860 ; WX 838 ; N uni229C ; G 2305
U 8861 ; WX 838 ; N uni229D ; G 2306
U 8862 ; WX 838 ; N uni229E ; G 2307
U 8863 ; WX 838 ; N uni229F ; G 2308
U 8864 ; WX 838 ; N uni22A0 ; G 2309
U 8865 ; WX 838 ; N uni22A1 ; G 2310
U 8866 ; WX 884 ; N uni22A2 ; G 2311
U 8867 ; WX 884 ; N uni22A3 ; G 2312
U 8868 ; WX 960 ; N uni22A4 ; G 2313
U 8869 ; WX 960 ; N perpendicular ; G 2314
U 8870 ; WX 616 ; N uni22A6 ; G 2315
U 8871 ; WX 616 ; N uni22A7 ; G 2316
U 8872 ; WX 884 ; N uni22A8 ; G 2317
U 8873 ; WX 884 ; N uni22A9 ; G 2318
U 8874 ; WX 884 ; N uni22AA ; G 2319
U 8875 ; WX 1080 ; N uni22AB ; G 2320
U 8876 ; WX 884 ; N uni22AC ; G 2321
U 8877 ; WX 884 ; N uni22AD ; G 2322
U 8878 ; WX 884 ; N uni22AE ; G 2323
U 8879 ; WX 1080 ; N uni22AF ; G 2324
U 8900 ; WX 626 ; N uni22C4 ; G 2325
U 8901 ; WX 398 ; N dotmath ; G 2326
U 8962 ; WX 834 ; N house ; G 2327
U 8968 ; WX 473 ; N uni2308 ; G 2328
U 8969 ; WX 473 ; N uni2309 ; G 2329
U 8970 ; WX 473 ; N uni230A ; G 2330
U 8971 ; WX 473 ; N uni230B ; G 2331
U 8976 ; WX 838 ; N revlogicalnot ; G 2332
U 8977 ; WX 539 ; N uni2311 ; G 2333
U 8984 ; WX 928 ; N uni2318 ; G 2334
U 8985 ; WX 838 ; N uni2319 ; G 2335
U 8992 ; WX 579 ; N integraltp ; G 2336
U 8993 ; WX 579 ; N integralbt ; G 2337
U 8997 ; WX 1000 ; N uni2325 ; G 2338
U 9000 ; WX 1443 ; N uni2328 ; G 2339
U 9085 ; WX 1008 ; N uni237D ; G 2340
U 9115 ; WX 500 ; N uni239B ; G 2341
U 9116 ; WX 500 ; N uni239C ; G 2342
U 9117 ; WX 500 ; N uni239D ; G 2343
U 9118 ; WX 500 ; N uni239E ; G 2344
U 9119 ; WX 500 ; N uni239F ; G 2345
U 9120 ; WX 500 ; N uni23A0 ; G 2346
U 9121 ; WX 500 ; N uni23A1 ; G 2347
U 9122 ; WX 500 ; N uni23A2 ; G 2348
U 9123 ; WX 500 ; N uni23A3 ; G 2349
U 9124 ; WX 500 ; N uni23A4 ; G 2350
U 9125 ; WX 500 ; N uni23A5 ; G 2351
U 9126 ; WX 500 ; N uni23A6 ; G 2352
U 9127 ; WX 750 ; N uni23A7 ; G 2353
U 9128 ; WX 750 ; N uni23A8 ; G 2354
U 9129 ; WX 750 ; N uni23A9 ; G 2355
U 9130 ; WX 750 ; N uni23AA ; G 2356
U 9131 ; WX 750 ; N uni23AB ; G 2357
U 9132 ; WX 750 ; N uni23AC ; G 2358
U 9133 ; WX 750 ; N uni23AD ; G 2359
U 9134 ; WX 579 ; N uni23AE ; G 2360
U 9167 ; WX 945 ; N uni23CF ; G 2361
U 9251 ; WX 834 ; N uni2423 ; G 2362
U 9472 ; WX 602 ; N SF100000 ; G 2363
U 9473 ; WX 602 ; N uni2501 ; G 2364
U 9474 ; WX 602 ; N SF110000 ; G 2365
U 9475 ; WX 602 ; N uni2503 ; G 2366
U 9476 ; WX 602 ; N uni2504 ; G 2367
U 9477 ; WX 602 ; N uni2505 ; G 2368
U 9478 ; WX 602 ; N uni2506 ; G 2369
U 9479 ; WX 602 ; N uni2507 ; G 2370
U 9480 ; WX 602 ; N uni2508 ; G 2371
U 9481 ; WX 602 ; N uni2509 ; G 2372
U 9482 ; WX 602 ; N uni250A ; G 2373
U 9483 ; WX 602 ; N uni250B ; G 2374
U 9484 ; WX 602 ; N SF010000 ; G 2375
U 9485 ; WX 602 ; N uni250D ; G 2376
U 9486 ; WX 602 ; N uni250E ; G 2377
U 9487 ; WX 602 ; N uni250F ; G 2378
U 9488 ; WX 602 ; N SF030000 ; G 2379
U 9489 ; WX 602 ; N uni2511 ; G 2380
U 9490 ; WX 602 ; N uni2512 ; G 2381
U 9491 ; WX 602 ; N uni2513 ; G 2382
U 9492 ; WX 602 ; N SF020000 ; G 2383
U 9493 ; WX 602 ; N uni2515 ; G 2384
U 9494 ; WX 602 ; N uni2516 ; G 2385
U 9495 ; WX 602 ; N uni2517 ; G 2386
U 9496 ; WX 602 ; N SF040000 ; G 2387
U 9497 ; WX 602 ; N uni2519 ; G 2388
U 9498 ; WX 602 ; N uni251A ; G 2389
U 9499 ; WX 602 ; N uni251B ; G 2390
U 9500 ; WX 602 ; N SF080000 ; G 2391
U 9501 ; WX 602 ; N uni251D ; G 2392
U 9502 ; WX 602 ; N uni251E ; G 2393
U 9503 ; WX 602 ; N uni251F ; G 2394
U 9504 ; WX 602 ; N uni2520 ; G 2395
U 9505 ; WX 602 ; N uni2521 ; G 2396
U 9506 ; WX 602 ; N uni2522 ; G 2397
U 9507 ; WX 602 ; N uni2523 ; G 2398
U 9508 ; WX 602 ; N SF090000 ; G 2399
U 9509 ; WX 602 ; N uni2525 ; G 2400
U 9510 ; WX 602 ; N uni2526 ; G 2401
U 9511 ; WX 602 ; N uni2527 ; G 2402
U 9512 ; WX 602 ; N uni2528 ; G 2403
U 9513 ; WX 602 ; N uni2529 ; G 2404
U 9514 ; WX 602 ; N uni252A ; G 2405
U 9515 ; WX 602 ; N uni252B ; G 2406
U 9516 ; WX 602 ; N SF060000 ; G 2407
U 9517 ; WX 602 ; N uni252D ; G 2408
U 9518 ; WX 602 ; N uni252E ; G 2409
U 9519 ; WX 602 ; N uni252F ; G 2410
U 9520 ; WX 602 ; N uni2530 ; G 2411
U 9521 ; WX 602 ; N uni2531 ; G 2412
U 9522 ; WX 602 ; N uni2532 ; G 2413
U 9523 ; WX 602 ; N uni2533 ; G 2414
U 9524 ; WX 602 ; N SF070000 ; G 2415
U 9525 ; WX 602 ; N uni2535 ; G 2416
U 9526 ; WX 602 ; N uni2536 ; G 2417
U 9527 ; WX 602 ; N uni2537 ; G 2418
U 9528 ; WX 602 ; N uni2538 ; G 2419
U 9529 ; WX 602 ; N uni2539 ; G 2420
U 9530 ; WX 602 ; N uni253A ; G 2421
U 9531 ; WX 602 ; N uni253B ; G 2422
U 9532 ; WX 602 ; N SF050000 ; G 2423
U 9533 ; WX 602 ; N uni253D ; G 2424
U 9534 ; WX 602 ; N uni253E ; G 2425
U 9535 ; WX 602 ; N uni253F ; G 2426
U 9536 ; WX 602 ; N uni2540 ; G 2427
U 9537 ; WX 602 ; N uni2541 ; G 2428
U 9538 ; WX 602 ; N uni2542 ; G 2429
U 9539 ; WX 602 ; N uni2543 ; G 2430
U 9540 ; WX 602 ; N uni2544 ; G 2431
U 9541 ; WX 602 ; N uni2545 ; G 2432
U 9542 ; WX 602 ; N uni2546 ; G 2433
U 9543 ; WX 602 ; N uni2547 ; G 2434
U 9544 ; WX 602 ; N uni2548 ; G 2435
U 9545 ; WX 602 ; N uni2549 ; G 2436
U 9546 ; WX 602 ; N uni254A ; G 2437
U 9547 ; WX 602 ; N uni254B ; G 2438
U 9548 ; WX 602 ; N uni254C ; G 2439
U 9549 ; WX 602 ; N uni254D ; G 2440
U 9550 ; WX 602 ; N uni254E ; G 2441
U 9551 ; WX 602 ; N uni254F ; G 2442
U 9552 ; WX 602 ; N SF430000 ; G 2443
U 9553 ; WX 602 ; N SF240000 ; G 2444
U 9554 ; WX 602 ; N SF510000 ; G 2445
U 9555 ; WX 602 ; N SF520000 ; G 2446
U 9556 ; WX 602 ; N SF390000 ; G 2447
U 9557 ; WX 602 ; N SF220000 ; G 2448
U 9558 ; WX 602 ; N SF210000 ; G 2449
U 9559 ; WX 602 ; N SF250000 ; G 2450
U 9560 ; WX 602 ; N SF500000 ; G 2451
U 9561 ; WX 602 ; N SF490000 ; G 2452
U 9562 ; WX 602 ; N SF380000 ; G 2453
U 9563 ; WX 602 ; N SF280000 ; G 2454
U 9564 ; WX 602 ; N SF270000 ; G 2455
U 9565 ; WX 602 ; N SF260000 ; G 2456
U 9566 ; WX 602 ; N SF360000 ; G 2457
U 9567 ; WX 602 ; N SF370000 ; G 2458
U 9568 ; WX 602 ; N SF420000 ; G 2459
U 9569 ; WX 602 ; N SF190000 ; G 2460
U 9570 ; WX 602 ; N SF200000 ; G 2461
U 9571 ; WX 602 ; N SF230000 ; G 2462
U 9572 ; WX 602 ; N SF470000 ; G 2463
U 9573 ; WX 602 ; N SF480000 ; G 2464
U 9574 ; WX 602 ; N SF410000 ; G 2465
U 9575 ; WX 602 ; N SF450000 ; G 2466
U 9576 ; WX 602 ; N SF460000 ; G 2467
U 9577 ; WX 602 ; N SF400000 ; G 2468
U 9578 ; WX 602 ; N SF540000 ; G 2469
U 9579 ; WX 602 ; N SF530000 ; G 2470
U 9580 ; WX 602 ; N SF440000 ; G 2471
U 9581 ; WX 602 ; N uni256D ; G 2472
U 9582 ; WX 602 ; N uni256E ; G 2473
U 9583 ; WX 602 ; N uni256F ; G 2474
U 9584 ; WX 602 ; N uni2570 ; G 2475
U 9585 ; WX 602 ; N uni2571 ; G 2476
U 9586 ; WX 602 ; N uni2572 ; G 2477
U 9587 ; WX 602 ; N uni2573 ; G 2478
U 9588 ; WX 602 ; N uni2574 ; G 2479
U 9589 ; WX 602 ; N uni2575 ; G 2480
U 9590 ; WX 602 ; N uni2576 ; G 2481
U 9591 ; WX 602 ; N uni2577 ; G 2482
U 9592 ; WX 602 ; N uni2578 ; G 2483
U 9593 ; WX 602 ; N uni2579 ; G 2484
U 9594 ; WX 602 ; N uni257A ; G 2485
U 9595 ; WX 602 ; N uni257B ; G 2486
U 9596 ; WX 602 ; N uni257C ; G 2487
U 9597 ; WX 602 ; N uni257D ; G 2488
U 9598 ; WX 602 ; N uni257E ; G 2489
U 9599 ; WX 602 ; N uni257F ; G 2490
U 9600 ; WX 769 ; N upblock ; G 2491
U 9601 ; WX 769 ; N uni2581 ; G 2492
U 9602 ; WX 769 ; N uni2582 ; G 2493
U 9603 ; WX 769 ; N uni2583 ; G 2494
U 9604 ; WX 769 ; N dnblock ; G 2495
U 9605 ; WX 769 ; N uni2585 ; G 2496
U 9606 ; WX 769 ; N uni2586 ; G 2497
U 9607 ; WX 769 ; N uni2587 ; G 2498
U 9608 ; WX 769 ; N block ; G 2499
U 9609 ; WX 769 ; N uni2589 ; G 2500
U 9610 ; WX 769 ; N uni258A ; G 2501
U 9611 ; WX 769 ; N uni258B ; G 2502
U 9612 ; WX 769 ; N lfblock ; G 2503
U 9613 ; WX 769 ; N uni258D ; G 2504
U 9614 ; WX 769 ; N uni258E ; G 2505
U 9615 ; WX 769 ; N uni258F ; G 2506
U 9616 ; WX 769 ; N rtblock ; G 2507
U 9617 ; WX 769 ; N ltshade ; G 2508
U 9618 ; WX 769 ; N shade ; G 2509
U 9619 ; WX 769 ; N dkshade ; G 2510
U 9620 ; WX 769 ; N uni2594 ; G 2511
U 9621 ; WX 769 ; N uni2595 ; G 2512
U 9622 ; WX 769 ; N uni2596 ; G 2513
U 9623 ; WX 769 ; N uni2597 ; G 2514
U 9624 ; WX 769 ; N uni2598 ; G 2515
U 9625 ; WX 769 ; N uni2599 ; G 2516
U 9626 ; WX 769 ; N uni259A ; G 2517
U 9627 ; WX 769 ; N uni259B ; G 2518
U 9628 ; WX 769 ; N uni259C ; G 2519
U 9629 ; WX 769 ; N uni259D ; G 2520
U 9630 ; WX 769 ; N uni259E ; G 2521
U 9631 ; WX 769 ; N uni259F ; G 2522
U 9632 ; WX 945 ; N filledbox ; G 2523
U 9633 ; WX 945 ; N H22073 ; G 2524
U 9634 ; WX 945 ; N uni25A2 ; G 2525
U 9635 ; WX 945 ; N uni25A3 ; G 2526
U 9636 ; WX 945 ; N uni25A4 ; G 2527
U 9637 ; WX 945 ; N uni25A5 ; G 2528
U 9638 ; WX 945 ; N uni25A6 ; G 2529
U 9639 ; WX 945 ; N uni25A7 ; G 2530
U 9640 ; WX 945 ; N uni25A8 ; G 2531
U 9641 ; WX 945 ; N uni25A9 ; G 2532
U 9642 ; WX 678 ; N H18543 ; G 2533
U 9643 ; WX 678 ; N H18551 ; G 2534
U 9644 ; WX 945 ; N filledrect ; G 2535
U 9645 ; WX 945 ; N uni25AD ; G 2536
U 9646 ; WX 550 ; N uni25AE ; G 2537
U 9647 ; WX 550 ; N uni25AF ; G 2538
U 9648 ; WX 769 ; N uni25B0 ; G 2539
U 9649 ; WX 769 ; N uni25B1 ; G 2540
U 9650 ; WX 769 ; N triagup ; G 2541
U 9651 ; WX 769 ; N uni25B3 ; G 2542
U 9652 ; WX 502 ; N uni25B4 ; G 2543
U 9653 ; WX 502 ; N uni25B5 ; G 2544
U 9654 ; WX 769 ; N uni25B6 ; G 2545
U 9655 ; WX 769 ; N uni25B7 ; G 2546
U 9656 ; WX 502 ; N uni25B8 ; G 2547
U 9657 ; WX 502 ; N uni25B9 ; G 2548
U 9658 ; WX 769 ; N triagrt ; G 2549
U 9659 ; WX 769 ; N uni25BB ; G 2550
U 9660 ; WX 769 ; N triagdn ; G 2551
U 9661 ; WX 769 ; N uni25BD ; G 2552
U 9662 ; WX 502 ; N uni25BE ; G 2553
U 9663 ; WX 502 ; N uni25BF ; G 2554
U 9664 ; WX 769 ; N uni25C0 ; G 2555
U 9665 ; WX 769 ; N uni25C1 ; G 2556
U 9666 ; WX 502 ; N uni25C2 ; G 2557
U 9667 ; WX 502 ; N uni25C3 ; G 2558
U 9668 ; WX 769 ; N triaglf ; G 2559
U 9669 ; WX 769 ; N uni25C5 ; G 2560
U 9670 ; WX 769 ; N uni25C6 ; G 2561
U 9671 ; WX 769 ; N uni25C7 ; G 2562
U 9672 ; WX 769 ; N uni25C8 ; G 2563
U 9673 ; WX 873 ; N uni25C9 ; G 2564
U 9674 ; WX 494 ; N lozenge ; G 2565
U 9675 ; WX 873 ; N circle ; G 2566
U 9676 ; WX 873 ; N uni25CC ; G 2567
U 9677 ; WX 873 ; N uni25CD ; G 2568
U 9678 ; WX 873 ; N uni25CE ; G 2569
U 9679 ; WX 873 ; N H18533 ; G 2570
U 9680 ; WX 873 ; N uni25D0 ; G 2571
U 9681 ; WX 873 ; N uni25D1 ; G 2572
U 9682 ; WX 873 ; N uni25D2 ; G 2573
U 9683 ; WX 873 ; N uni25D3 ; G 2574
U 9684 ; WX 873 ; N uni25D4 ; G 2575
U 9685 ; WX 873 ; N uni25D5 ; G 2576
U 9686 ; WX 527 ; N uni25D6 ; G 2577
U 9687 ; WX 527 ; N uni25D7 ; G 2578
U 9688 ; WX 791 ; N invbullet ; G 2579
U 9689 ; WX 970 ; N invcircle ; G 2580
U 9690 ; WX 970 ; N uni25DA ; G 2581
U 9691 ; WX 970 ; N uni25DB ; G 2582
U 9692 ; WX 387 ; N uni25DC ; G 2583
U 9693 ; WX 387 ; N uni25DD ; G 2584
U 9694 ; WX 387 ; N uni25DE ; G 2585
U 9695 ; WX 387 ; N uni25DF ; G 2586
U 9696 ; WX 873 ; N uni25E0 ; G 2587
U 9697 ; WX 873 ; N uni25E1 ; G 2588
U 9698 ; WX 769 ; N uni25E2 ; G 2589
U 9699 ; WX 769 ; N uni25E3 ; G 2590
U 9700 ; WX 769 ; N uni25E4 ; G 2591
U 9701 ; WX 769 ; N uni25E5 ; G 2592
U 9702 ; WX 590 ; N openbullet ; G 2593
U 9703 ; WX 945 ; N uni25E7 ; G 2594
U 9704 ; WX 945 ; N uni25E8 ; G 2595
U 9705 ; WX 945 ; N uni25E9 ; G 2596
U 9706 ; WX 945 ; N uni25EA ; G 2597
U 9707 ; WX 945 ; N uni25EB ; G 2598
U 9708 ; WX 769 ; N uni25EC ; G 2599
U 9709 ; WX 769 ; N uni25ED ; G 2600
U 9710 ; WX 769 ; N uni25EE ; G 2601
U 9711 ; WX 1119 ; N uni25EF ; G 2602
U 9712 ; WX 945 ; N uni25F0 ; G 2603
U 9713 ; WX 945 ; N uni25F1 ; G 2604
U 9714 ; WX 945 ; N uni25F2 ; G 2605
U 9715 ; WX 945 ; N uni25F3 ; G 2606
U 9716 ; WX 873 ; N uni25F4 ; G 2607
U 9717 ; WX 873 ; N uni25F5 ; G 2608
U 9718 ; WX 873 ; N uni25F6 ; G 2609
U 9719 ; WX 873 ; N uni25F7 ; G 2610
U 9720 ; WX 769 ; N uni25F8 ; G 2611
U 9721 ; WX 769 ; N uni25F9 ; G 2612
U 9722 ; WX 769 ; N uni25FA ; G 2613
U 9723 ; WX 830 ; N uni25FB ; G 2614
U 9724 ; WX 830 ; N uni25FC ; G 2615
U 9725 ; WX 732 ; N uni25FD ; G 2616
U 9726 ; WX 732 ; N uni25FE ; G 2617
U 9727 ; WX 769 ; N uni25FF ; G 2618
U 9728 ; WX 896 ; N uni2600 ; G 2619
U 9784 ; WX 896 ; N uni2638 ; G 2620
U 9785 ; WX 896 ; N uni2639 ; G 2621
U 9786 ; WX 896 ; N smileface ; G 2622
U 9787 ; WX 896 ; N invsmileface ; G 2623
U 9788 ; WX 896 ; N sun ; G 2624
U 9791 ; WX 614 ; N uni263F ; G 2625
U 9792 ; WX 731 ; N female ; G 2626
U 9793 ; WX 731 ; N uni2641 ; G 2627
U 9794 ; WX 896 ; N male ; G 2628
U 9795 ; WX 896 ; N uni2643 ; G 2629
U 9796 ; WX 896 ; N uni2644 ; G 2630
U 9797 ; WX 896 ; N uni2645 ; G 2631
U 9798 ; WX 896 ; N uni2646 ; G 2632
U 9799 ; WX 896 ; N uni2647 ; G 2633
U 9824 ; WX 896 ; N spade ; G 2634
U 9825 ; WX 896 ; N uni2661 ; G 2635
U 9826 ; WX 896 ; N uni2662 ; G 2636
U 9827 ; WX 896 ; N club ; G 2637
U 9828 ; WX 896 ; N uni2664 ; G 2638
U 9829 ; WX 896 ; N heart ; G 2639
U 9830 ; WX 896 ; N diamond ; G 2640
U 9831 ; WX 896 ; N uni2667 ; G 2641
U 9833 ; WX 472 ; N uni2669 ; G 2642
U 9834 ; WX 638 ; N musicalnote ; G 2643
U 9835 ; WX 896 ; N musicalnotedbl ; G 2644
U 9836 ; WX 896 ; N uni266C ; G 2645
U 9837 ; WX 472 ; N uni266D ; G 2646
U 9838 ; WX 357 ; N uni266E ; G 2647
U 9839 ; WX 484 ; N uni266F ; G 2648
U 10145 ; WX 838 ; N uni27A1 ; G 2649
U 10181 ; WX 457 ; N uni27C5 ; G 2650
U 10182 ; WX 457 ; N uni27C6 ; G 2651
U 10208 ; WX 494 ; N uni27E0 ; G 2652
U 10216 ; WX 457 ; N uni27E8 ; G 2653
U 10217 ; WX 457 ; N uni27E9 ; G 2654
U 10224 ; WX 838 ; N uni27F0 ; G 2655
U 10225 ; WX 838 ; N uni27F1 ; G 2656
U 10226 ; WX 838 ; N uni27F2 ; G 2657
U 10227 ; WX 838 ; N uni27F3 ; G 2658
U 10228 ; WX 1033 ; N uni27F4 ; G 2659
U 10229 ; WX 1434 ; N uni27F5 ; G 2660
U 10230 ; WX 1434 ; N uni27F6 ; G 2661
U 10231 ; WX 1434 ; N uni27F7 ; G 2662
U 10232 ; WX 1434 ; N uni27F8 ; G 2663
U 10233 ; WX 1434 ; N uni27F9 ; G 2664
U 10234 ; WX 1434 ; N uni27FA ; G 2665
U 10235 ; WX 1434 ; N uni27FB ; G 2666
U 10236 ; WX 1434 ; N uni27FC ; G 2667
U 10237 ; WX 1434 ; N uni27FD ; G 2668
U 10238 ; WX 1434 ; N uni27FE ; G 2669
U 10239 ; WX 1434 ; N uni27FF ; G 2670
U 10240 ; WX 781 ; N uni2800 ; G 2671
U 10241 ; WX 781 ; N uni2801 ; G 2672
U 10242 ; WX 781 ; N uni2802 ; G 2673
U 10243 ; WX 781 ; N uni2803 ; G 2674
U 10244 ; WX 781 ; N uni2804 ; G 2675
U 10245 ; WX 781 ; N uni2805 ; G 2676
U 10246 ; WX 781 ; N uni2806 ; G 2677
U 10247 ; WX 781 ; N uni2807 ; G 2678
U 10248 ; WX 781 ; N uni2808 ; G 2679
U 10249 ; WX 781 ; N uni2809 ; G 2680
U 10250 ; WX 781 ; N uni280A ; G 2681
U 10251 ; WX 781 ; N uni280B ; G 2682
U 10252 ; WX 781 ; N uni280C ; G 2683
U 10253 ; WX 781 ; N uni280D ; G 2684
U 10254 ; WX 781 ; N uni280E ; G 2685
U 10255 ; WX 781 ; N uni280F ; G 2686
U 10256 ; WX 781 ; N uni2810 ; G 2687
U 10257 ; WX 781 ; N uni2811 ; G 2688
U 10258 ; WX 781 ; N uni2812 ; G 2689
U 10259 ; WX 781 ; N uni2813 ; G 2690
U 10260 ; WX 781 ; N uni2814 ; G 2691
U 10261 ; WX 781 ; N uni2815 ; G 2692
U 10262 ; WX 781 ; N uni2816 ; G 2693
U 10263 ; WX 781 ; N uni2817 ; G 2694
U 10264 ; WX 781 ; N uni2818 ; G 2695
U 10265 ; WX 781 ; N uni2819 ; G 2696
U 10266 ; WX 781 ; N uni281A ; G 2697
U 10267 ; WX 781 ; N uni281B ; G 2698
U 10268 ; WX 781 ; N uni281C ; G 2699
U 10269 ; WX 781 ; N uni281D ; G 2700
U 10270 ; WX 781 ; N uni281E ; G 2701
U 10271 ; WX 781 ; N uni281F ; G 2702
U 10272 ; WX 781 ; N uni2820 ; G 2703
U 10273 ; WX 781 ; N uni2821 ; G 2704
U 10274 ; WX 781 ; N uni2822 ; G 2705
U 10275 ; WX 781 ; N uni2823 ; G 2706
U 10276 ; WX 781 ; N uni2824 ; G 2707
U 10277 ; WX 781 ; N uni2825 ; G 2708
U 10278 ; WX 781 ; N uni2826 ; G 2709
U 10279 ; WX 781 ; N uni2827 ; G 2710
U 10280 ; WX 781 ; N uni2828 ; G 2711
U 10281 ; WX 781 ; N uni2829 ; G 2712
U 10282 ; WX 781 ; N uni282A ; G 2713
U 10283 ; WX 781 ; N uni282B ; G 2714
U 10284 ; WX 781 ; N uni282C ; G 2715
U 10285 ; WX 781 ; N uni282D ; G 2716
U 10286 ; WX 781 ; N uni282E ; G 2717
U 10287 ; WX 781 ; N uni282F ; G 2718
U 10288 ; WX 781 ; N uni2830 ; G 2719
U 10289 ; WX 781 ; N uni2831 ; G 2720
U 10290 ; WX 781 ; N uni2832 ; G 2721
U 10291 ; WX 781 ; N uni2833 ; G 2722
U 10292 ; WX 781 ; N uni2834 ; G 2723
U 10293 ; WX 781 ; N uni2835 ; G 2724
U 10294 ; WX 781 ; N uni2836 ; G 2725
U 10295 ; WX 781 ; N uni2837 ; G 2726
U 10296 ; WX 781 ; N uni2838 ; G 2727
U 10297 ; WX 781 ; N uni2839 ; G 2728
U 10298 ; WX 781 ; N uni283A ; G 2729
U 10299 ; WX 781 ; N uni283B ; G 2730
U 10300 ; WX 781 ; N uni283C ; G 2731
U 10301 ; WX 781 ; N uni283D ; G 2732
U 10302 ; WX 781 ; N uni283E ; G 2733
U 10303 ; WX 781 ; N uni283F ; G 2734
U 10304 ; WX 781 ; N uni2840 ; G 2735
U 10305 ; WX 781 ; N uni2841 ; G 2736
U 10306 ; WX 781 ; N uni2842 ; G 2737
U 10307 ; WX 781 ; N uni2843 ; G 2738
U 10308 ; WX 781 ; N uni2844 ; G 2739
U 10309 ; WX 781 ; N uni2845 ; G 2740
U 10310 ; WX 781 ; N uni2846 ; G 2741
U 10311 ; WX 781 ; N uni2847 ; G 2742
U 10312 ; WX 781 ; N uni2848 ; G 2743
U 10313 ; WX 781 ; N uni2849 ; G 2744
U 10314 ; WX 781 ; N uni284A ; G 2745
U 10315 ; WX 781 ; N uni284B ; G 2746
U 10316 ; WX 781 ; N uni284C ; G 2747
U 10317 ; WX 781 ; N uni284D ; G 2748
U 10318 ; WX 781 ; N uni284E ; G 2749
U 10319 ; WX 781 ; N uni284F ; G 2750
U 10320 ; WX 781 ; N uni2850 ; G 2751
U 10321 ; WX 781 ; N uni2851 ; G 2752
U 10322 ; WX 781 ; N uni2852 ; G 2753
U 10323 ; WX 781 ; N uni2853 ; G 2754
U 10324 ; WX 781 ; N uni2854 ; G 2755
U 10325 ; WX 781 ; N uni2855 ; G 2756
U 10326 ; WX 781 ; N uni2856 ; G 2757
U 10327 ; WX 781 ; N uni2857 ; G 2758
U 10328 ; WX 781 ; N uni2858 ; G 2759
U 10329 ; WX 781 ; N uni2859 ; G 2760
U 10330 ; WX 781 ; N uni285A ; G 2761
U 10331 ; WX 781 ; N uni285B ; G 2762
U 10332 ; WX 781 ; N uni285C ; G 2763
U 10333 ; WX 781 ; N uni285D ; G 2764
U 10334 ; WX 781 ; N uni285E ; G 2765
U 10335 ; WX 781 ; N uni285F ; G 2766
U 10336 ; WX 781 ; N uni2860 ; G 2767
U 10337 ; WX 781 ; N uni2861 ; G 2768
U 10338 ; WX 781 ; N uni2862 ; G 2769
U 10339 ; WX 781 ; N uni2863 ; G 2770
U 10340 ; WX 781 ; N uni2864 ; G 2771
U 10341 ; WX 781 ; N uni2865 ; G 2772
U 10342 ; WX 781 ; N uni2866 ; G 2773
U 10343 ; WX 781 ; N uni2867 ; G 2774
U 10344 ; WX 781 ; N uni2868 ; G 2775
U 10345 ; WX 781 ; N uni2869 ; G 2776
U 10346 ; WX 781 ; N uni286A ; G 2777
U 10347 ; WX 781 ; N uni286B ; G 2778
U 10348 ; WX 781 ; N uni286C ; G 2779
U 10349 ; WX 781 ; N uni286D ; G 2780
U 10350 ; WX 781 ; N uni286E ; G 2781
U 10351 ; WX 781 ; N uni286F ; G 2782
U 10352 ; WX 781 ; N uni2870 ; G 2783
U 10353 ; WX 781 ; N uni2871 ; G 2784
U 10354 ; WX 781 ; N uni2872 ; G 2785
U 10355 ; WX 781 ; N uni2873 ; G 2786
U 10356 ; WX 781 ; N uni2874 ; G 2787
U 10357 ; WX 781 ; N uni2875 ; G 2788
U 10358 ; WX 781 ; N uni2876 ; G 2789
U 10359 ; WX 781 ; N uni2877 ; G 2790
U 10360 ; WX 781 ; N uni2878 ; G 2791
U 10361 ; WX 781 ; N uni2879 ; G 2792
U 10362 ; WX 781 ; N uni287A ; G 2793
U 10363 ; WX 781 ; N uni287B ; G 2794
U 10364 ; WX 781 ; N uni287C ; G 2795
U 10365 ; WX 781 ; N uni287D ; G 2796
U 10366 ; WX 781 ; N uni287E ; G 2797
U 10367 ; WX 781 ; N uni287F ; G 2798
U 10368 ; WX 781 ; N uni2880 ; G 2799
U 10369 ; WX 781 ; N uni2881 ; G 2800
U 10370 ; WX 781 ; N uni2882 ; G 2801
U 10371 ; WX 781 ; N uni2883 ; G 2802
U 10372 ; WX 781 ; N uni2884 ; G 2803
U 10373 ; WX 781 ; N uni2885 ; G 2804
U 10374 ; WX 781 ; N uni2886 ; G 2805
U 10375 ; WX 781 ; N uni2887 ; G 2806
U 10376 ; WX 781 ; N uni2888 ; G 2807
U 10377 ; WX 781 ; N uni2889 ; G 2808
U 10378 ; WX 781 ; N uni288A ; G 2809
U 10379 ; WX 781 ; N uni288B ; G 2810
U 10380 ; WX 781 ; N uni288C ; G 2811
U 10381 ; WX 781 ; N uni288D ; G 2812
U 10382 ; WX 781 ; N uni288E ; G 2813
U 10383 ; WX 781 ; N uni288F ; G 2814
U 10384 ; WX 781 ; N uni2890 ; G 2815
U 10385 ; WX 781 ; N uni2891 ; G 2816
U 10386 ; WX 781 ; N uni2892 ; G 2817
U 10387 ; WX 781 ; N uni2893 ; G 2818
U 10388 ; WX 781 ; N uni2894 ; G 2819
U 10389 ; WX 781 ; N uni2895 ; G 2820
U 10390 ; WX 781 ; N uni2896 ; G 2821
U 10391 ; WX 781 ; N uni2897 ; G 2822
U 10392 ; WX 781 ; N uni2898 ; G 2823
U 10393 ; WX 781 ; N uni2899 ; G 2824
U 10394 ; WX 781 ; N uni289A ; G 2825
U 10395 ; WX 781 ; N uni289B ; G 2826
U 10396 ; WX 781 ; N uni289C ; G 2827
U 10397 ; WX 781 ; N uni289D ; G 2828
U 10398 ; WX 781 ; N uni289E ; G 2829
U 10399 ; WX 781 ; N uni289F ; G 2830
U 10400 ; WX 781 ; N uni28A0 ; G 2831
U 10401 ; WX 781 ; N uni28A1 ; G 2832
U 10402 ; WX 781 ; N uni28A2 ; G 2833
U 10403 ; WX 781 ; N uni28A3 ; G 2834
U 10404 ; WX 781 ; N uni28A4 ; G 2835
U 10405 ; WX 781 ; N uni28A5 ; G 2836
U 10406 ; WX 781 ; N uni28A6 ; G 2837
U 10407 ; WX 781 ; N uni28A7 ; G 2838
U 10408 ; WX 781 ; N uni28A8 ; G 2839
U 10409 ; WX 781 ; N uni28A9 ; G 2840
U 10410 ; WX 781 ; N uni28AA ; G 2841
U 10411 ; WX 781 ; N uni28AB ; G 2842
U 10412 ; WX 781 ; N uni28AC ; G 2843
U 10413 ; WX 781 ; N uni28AD ; G 2844
U 10414 ; WX 781 ; N uni28AE ; G 2845
U 10415 ; WX 781 ; N uni28AF ; G 2846
U 10416 ; WX 781 ; N uni28B0 ; G 2847
U 10417 ; WX 781 ; N uni28B1 ; G 2848
U 10418 ; WX 781 ; N uni28B2 ; G 2849
U 10419 ; WX 781 ; N uni28B3 ; G 2850
U 10420 ; WX 781 ; N uni28B4 ; G 2851
U 10421 ; WX 781 ; N uni28B5 ; G 2852
U 10422 ; WX 781 ; N uni28B6 ; G 2853
U 10423 ; WX 781 ; N uni28B7 ; G 2854
U 10424 ; WX 781 ; N uni28B8 ; G 2855
U 10425 ; WX 781 ; N uni28B9 ; G 2856
U 10426 ; WX 781 ; N uni28BA ; G 2857
U 10427 ; WX 781 ; N uni28BB ; G 2858
U 10428 ; WX 781 ; N uni28BC ; G 2859
U 10429 ; WX 781 ; N uni28BD ; G 2860
U 10430 ; WX 781 ; N uni28BE ; G 2861
U 10431 ; WX 781 ; N uni28BF ; G 2862
U 10432 ; WX 781 ; N uni28C0 ; G 2863
U 10433 ; WX 781 ; N uni28C1 ; G 2864
U 10434 ; WX 781 ; N uni28C2 ; G 2865
U 10435 ; WX 781 ; N uni28C3 ; G 2866
U 10436 ; WX 781 ; N uni28C4 ; G 2867
U 10437 ; WX 781 ; N uni28C5 ; G 2868
U 10438 ; WX 781 ; N uni28C6 ; G 2869
U 10439 ; WX 781 ; N uni28C7 ; G 2870
U 10440 ; WX 781 ; N uni28C8 ; G 2871
U 10441 ; WX 781 ; N uni28C9 ; G 2872
U 10442 ; WX 781 ; N uni28CA ; G 2873
U 10443 ; WX 781 ; N uni28CB ; G 2874
U 10444 ; WX 781 ; N uni28CC ; G 2875
U 10445 ; WX 781 ; N uni28CD ; G 2876
U 10446 ; WX 781 ; N uni28CE ; G 2877
U 10447 ; WX 781 ; N uni28CF ; G 2878
U 10448 ; WX 781 ; N uni28D0 ; G 2879
U 10449 ; WX 781 ; N uni28D1 ; G 2880
U 10450 ; WX 781 ; N uni28D2 ; G 2881
U 10451 ; WX 781 ; N uni28D3 ; G 2882
U 10452 ; WX 781 ; N uni28D4 ; G 2883
U 10453 ; WX 781 ; N uni28D5 ; G 2884
U 10454 ; WX 781 ; N uni28D6 ; G 2885
U 10455 ; WX 781 ; N uni28D7 ; G 2886
U 10456 ; WX 781 ; N uni28D8 ; G 2887
U 10457 ; WX 781 ; N uni28D9 ; G 2888
U 10458 ; WX 781 ; N uni28DA ; G 2889
U 10459 ; WX 781 ; N uni28DB ; G 2890
U 10460 ; WX 781 ; N uni28DC ; G 2891
U 10461 ; WX 781 ; N uni28DD ; G 2892
U 10462 ; WX 781 ; N uni28DE ; G 2893
U 10463 ; WX 781 ; N uni28DF ; G 2894
U 10464 ; WX 781 ; N uni28E0 ; G 2895
U 10465 ; WX 781 ; N uni28E1 ; G 2896
U 10466 ; WX 781 ; N uni28E2 ; G 2897
U 10467 ; WX 781 ; N uni28E3 ; G 2898
U 10468 ; WX 781 ; N uni28E4 ; G 2899
U 10469 ; WX 781 ; N uni28E5 ; G 2900
U 10470 ; WX 781 ; N uni28E6 ; G 2901
U 10471 ; WX 781 ; N uni28E7 ; G 2902
U 10472 ; WX 781 ; N uni28E8 ; G 2903
U 10473 ; WX 781 ; N uni28E9 ; G 2904
U 10474 ; WX 781 ; N uni28EA ; G 2905
U 10475 ; WX 781 ; N uni28EB ; G 2906
U 10476 ; WX 781 ; N uni28EC ; G 2907
U 10477 ; WX 781 ; N uni28ED ; G 2908
U 10478 ; WX 781 ; N uni28EE ; G 2909
U 10479 ; WX 781 ; N uni28EF ; G 2910
U 10480 ; WX 781 ; N uni28F0 ; G 2911
U 10481 ; WX 781 ; N uni28F1 ; G 2912
U 10482 ; WX 781 ; N uni28F2 ; G 2913
U 10483 ; WX 781 ; N uni28F3 ; G 2914
U 10484 ; WX 781 ; N uni28F4 ; G 2915
U 10485 ; WX 781 ; N uni28F5 ; G 2916
U 10486 ; WX 781 ; N uni28F6 ; G 2917
U 10487 ; WX 781 ; N uni28F7 ; G 2918
U 10488 ; WX 781 ; N uni28F8 ; G 2919
U 10489 ; WX 781 ; N uni28F9 ; G 2920
U 10490 ; WX 781 ; N uni28FA ; G 2921
U 10491 ; WX 781 ; N uni28FB ; G 2922
U 10492 ; WX 781 ; N uni28FC ; G 2923
U 10493 ; WX 781 ; N uni28FD ; G 2924
U 10494 ; WX 781 ; N uni28FE ; G 2925
U 10495 ; WX 781 ; N uni28FF ; G 2926
U 10496 ; WX 838 ; N uni2900 ; G 2927
U 10497 ; WX 838 ; N uni2901 ; G 2928
U 10498 ; WX 838 ; N uni2902 ; G 2929
U 10499 ; WX 838 ; N uni2903 ; G 2930
U 10500 ; WX 838 ; N uni2904 ; G 2931
U 10501 ; WX 838 ; N uni2905 ; G 2932
U 10502 ; WX 838 ; N uni2906 ; G 2933
U 10503 ; WX 838 ; N uni2907 ; G 2934
U 10504 ; WX 838 ; N uni2908 ; G 2935
U 10505 ; WX 838 ; N uni2909 ; G 2936
U 10506 ; WX 838 ; N uni290A ; G 2937
U 10507 ; WX 838 ; N uni290B ; G 2938
U 10508 ; WX 838 ; N uni290C ; G 2939
U 10509 ; WX 838 ; N uni290D ; G 2940
U 10510 ; WX 838 ; N uni290E ; G 2941
U 10511 ; WX 838 ; N uni290F ; G 2942
U 10512 ; WX 838 ; N uni2910 ; G 2943
U 10513 ; WX 838 ; N uni2911 ; G 2944
U 10514 ; WX 838 ; N uni2912 ; G 2945
U 10515 ; WX 838 ; N uni2913 ; G 2946
U 10516 ; WX 838 ; N uni2914 ; G 2947
U 10517 ; WX 838 ; N uni2915 ; G 2948
U 10518 ; WX 838 ; N uni2916 ; G 2949
U 10519 ; WX 838 ; N uni2917 ; G 2950
U 10520 ; WX 838 ; N uni2918 ; G 2951
U 10521 ; WX 838 ; N uni2919 ; G 2952
U 10522 ; WX 838 ; N uni291A ; G 2953
U 10523 ; WX 838 ; N uni291B ; G 2954
U 10524 ; WX 838 ; N uni291C ; G 2955
U 10525 ; WX 838 ; N uni291D ; G 2956
U 10526 ; WX 838 ; N uni291E ; G 2957
U 10527 ; WX 838 ; N uni291F ; G 2958
U 10528 ; WX 838 ; N uni2920 ; G 2959
U 10529 ; WX 838 ; N uni2921 ; G 2960
U 10530 ; WX 838 ; N uni2922 ; G 2961
U 10531 ; WX 838 ; N uni2923 ; G 2962
U 10532 ; WX 838 ; N uni2924 ; G 2963
U 10533 ; WX 838 ; N uni2925 ; G 2964
U 10534 ; WX 838 ; N uni2926 ; G 2965
U 10535 ; WX 838 ; N uni2927 ; G 2966
U 10536 ; WX 838 ; N uni2928 ; G 2967
U 10537 ; WX 838 ; N uni2929 ; G 2968
U 10538 ; WX 838 ; N uni292A ; G 2969
U 10539 ; WX 838 ; N uni292B ; G 2970
U 10540 ; WX 838 ; N uni292C ; G 2971
U 10541 ; WX 838 ; N uni292D ; G 2972
U 10542 ; WX 838 ; N uni292E ; G 2973
U 10543 ; WX 838 ; N uni292F ; G 2974
U 10544 ; WX 838 ; N uni2930 ; G 2975
U 10545 ; WX 838 ; N uni2931 ; G 2976
U 10546 ; WX 838 ; N uni2932 ; G 2977
U 10547 ; WX 838 ; N uni2933 ; G 2978
U 10548 ; WX 838 ; N uni2934 ; G 2979
U 10549 ; WX 838 ; N uni2935 ; G 2980
U 10550 ; WX 838 ; N uni2936 ; G 2981
U 10551 ; WX 838 ; N uni2937 ; G 2982
U 10552 ; WX 838 ; N uni2938 ; G 2983
U 10553 ; WX 838 ; N uni2939 ; G 2984
U 10554 ; WX 838 ; N uni293A ; G 2985
U 10555 ; WX 838 ; N uni293B ; G 2986
U 10556 ; WX 838 ; N uni293C ; G 2987
U 10557 ; WX 838 ; N uni293D ; G 2988
U 10558 ; WX 838 ; N uni293E ; G 2989
U 10559 ; WX 838 ; N uni293F ; G 2990
U 10560 ; WX 838 ; N uni2940 ; G 2991
U 10561 ; WX 838 ; N uni2941 ; G 2992
U 10562 ; WX 838 ; N uni2942 ; G 2993
U 10563 ; WX 838 ; N uni2943 ; G 2994
U 10564 ; WX 838 ; N uni2944 ; G 2995
U 10565 ; WX 838 ; N uni2945 ; G 2996
U 10566 ; WX 838 ; N uni2946 ; G 2997
U 10567 ; WX 838 ; N uni2947 ; G 2998
U 10568 ; WX 838 ; N uni2948 ; G 2999
U 10569 ; WX 838 ; N uni2949 ; G 3000
U 10570 ; WX 838 ; N uni294A ; G 3001
U 10571 ; WX 838 ; N uni294B ; G 3002
U 10572 ; WX 838 ; N uni294C ; G 3003
U 10573 ; WX 838 ; N uni294D ; G 3004
U 10574 ; WX 838 ; N uni294E ; G 3005
U 10575 ; WX 838 ; N uni294F ; G 3006
U 10576 ; WX 838 ; N uni2950 ; G 3007
U 10577 ; WX 838 ; N uni2951 ; G 3008
U 10578 ; WX 838 ; N uni2952 ; G 3009
U 10579 ; WX 838 ; N uni2953 ; G 3010
U 10580 ; WX 838 ; N uni2954 ; G 3011
U 10581 ; WX 838 ; N uni2955 ; G 3012
U 10582 ; WX 838 ; N uni2956 ; G 3013
U 10583 ; WX 838 ; N uni2957 ; G 3014
U 10584 ; WX 838 ; N uni2958 ; G 3015
U 10585 ; WX 838 ; N uni2959 ; G 3016
U 10586 ; WX 838 ; N uni295A ; G 3017
U 10587 ; WX 838 ; N uni295B ; G 3018
U 10588 ; WX 838 ; N uni295C ; G 3019
U 10589 ; WX 838 ; N uni295D ; G 3020
U 10590 ; WX 838 ; N uni295E ; G 3021
U 10591 ; WX 838 ; N uni295F ; G 3022
U 10592 ; WX 838 ; N uni2960 ; G 3023
U 10593 ; WX 838 ; N uni2961 ; G 3024
U 10594 ; WX 838 ; N uni2962 ; G 3025
U 10595 ; WX 838 ; N uni2963 ; G 3026
U 10596 ; WX 838 ; N uni2964 ; G 3027
U 10597 ; WX 838 ; N uni2965 ; G 3028
U 10598 ; WX 838 ; N uni2966 ; G 3029
U 10599 ; WX 838 ; N uni2967 ; G 3030
U 10600 ; WX 838 ; N uni2968 ; G 3031
U 10601 ; WX 838 ; N uni2969 ; G 3032
U 10602 ; WX 838 ; N uni296A ; G 3033
U 10603 ; WX 838 ; N uni296B ; G 3034
U 10604 ; WX 838 ; N uni296C ; G 3035
U 10605 ; WX 838 ; N uni296D ; G 3036
U 10606 ; WX 838 ; N uni296E ; G 3037
U 10607 ; WX 838 ; N uni296F ; G 3038
U 10608 ; WX 838 ; N uni2970 ; G 3039
U 10609 ; WX 838 ; N uni2971 ; G 3040
U 10610 ; WX 838 ; N uni2972 ; G 3041
U 10611 ; WX 838 ; N uni2973 ; G 3042
U 10612 ; WX 838 ; N uni2974 ; G 3043
U 10613 ; WX 838 ; N uni2975 ; G 3044
U 10614 ; WX 838 ; N uni2976 ; G 3045
U 10615 ; WX 1032 ; N uni2977 ; G 3046
U 10616 ; WX 838 ; N uni2978 ; G 3047
U 10617 ; WX 838 ; N uni2979 ; G 3048
U 10618 ; WX 960 ; N uni297A ; G 3049
U 10619 ; WX 838 ; N uni297B ; G 3050
U 10620 ; WX 838 ; N uni297C ; G 3051
U 10621 ; WX 838 ; N uni297D ; G 3052
U 10622 ; WX 838 ; N uni297E ; G 3053
U 10623 ; WX 838 ; N uni297F ; G 3054
U 10731 ; WX 494 ; N uni29EB ; G 3055
U 10764 ; WX 1782 ; N uni2A0C ; G 3056
U 10765 ; WX 610 ; N uni2A0D ; G 3057
U 10766 ; WX 610 ; N uni2A0E ; G 3058
U 10799 ; WX 838 ; N uni2A2F ; G 3059
U 10858 ; WX 838 ; N uni2A6A ; G 3060
U 10859 ; WX 838 ; N uni2A6B ; G 3061
U 11008 ; WX 838 ; N uni2B00 ; G 3062
U 11009 ; WX 838 ; N uni2B01 ; G 3063
U 11010 ; WX 838 ; N uni2B02 ; G 3064
U 11011 ; WX 838 ; N uni2B03 ; G 3065
U 11012 ; WX 838 ; N uni2B04 ; G 3066
U 11013 ; WX 838 ; N uni2B05 ; G 3067
U 11014 ; WX 838 ; N uni2B06 ; G 3068
U 11015 ; WX 838 ; N uni2B07 ; G 3069
U 11016 ; WX 838 ; N uni2B08 ; G 3070
U 11017 ; WX 838 ; N uni2B09 ; G 3071
U 11018 ; WX 838 ; N uni2B0A ; G 3072
U 11019 ; WX 838 ; N uni2B0B ; G 3073
U 11020 ; WX 838 ; N uni2B0C ; G 3074
U 11021 ; WX 838 ; N uni2B0D ; G 3075
U 11022 ; WX 838 ; N uni2B0E ; G 3076
U 11023 ; WX 838 ; N uni2B0F ; G 3077
U 11024 ; WX 838 ; N uni2B10 ; G 3078
U 11025 ; WX 838 ; N uni2B11 ; G 3079
U 11026 ; WX 945 ; N uni2B12 ; G 3080
U 11027 ; WX 945 ; N uni2B13 ; G 3081
U 11028 ; WX 945 ; N uni2B14 ; G 3082
U 11029 ; WX 945 ; N uni2B15 ; G 3083
U 11030 ; WX 769 ; N uni2B16 ; G 3084
U 11031 ; WX 769 ; N uni2B17 ; G 3085
U 11032 ; WX 769 ; N uni2B18 ; G 3086
U 11033 ; WX 769 ; N uni2B19 ; G 3087
U 11034 ; WX 945 ; N uni2B1A ; G 3088
U 11360 ; WX 703 ; N uni2C60 ; G 3089
U 11361 ; WX 380 ; N uni2C61 ; G 3090
U 11363 ; WX 752 ; N uni2C63 ; G 3091
U 11364 ; WX 831 ; N uni2C64 ; G 3092
U 11367 ; WX 945 ; N uni2C67 ; G 3093
U 11368 ; WX 727 ; N uni2C68 ; G 3094
U 11369 ; WX 869 ; N uni2C69 ; G 3095
U 11370 ; WX 693 ; N uni2C6A ; G 3096
U 11371 ; WX 730 ; N uni2C6B ; G 3097
U 11372 ; WX 568 ; N uni2C6C ; G 3098
U 11373 ; WX 848 ; N uni2C6D ; G 3099
U 11374 ; WX 1107 ; N uni2C6E ; G 3100
U 11375 ; WX 776 ; N uni2C6F ; G 3101
U 11376 ; WX 848 ; N uni2C70 ; G 3102
U 11377 ; WX 709 ; N uni2C71 ; G 3103
U 11378 ; WX 1221 ; N uni2C72 ; G 3104
U 11379 ; WX 984 ; N uni2C73 ; G 3105
U 11381 ; WX 779 ; N uni2C75 ; G 3106
U 11382 ; WX 601 ; N uni2C76 ; G 3107
U 11383 ; WX 905 ; N uni2C77 ; G 3108
U 11385 ; WX 571 ; N uni2C79 ; G 3109
U 11386 ; WX 667 ; N uni2C7A ; G 3110
U 11387 ; WX 617 ; N uni2C7B ; G 3111
U 11388 ; WX 313 ; N uni2C7C ; G 3112
U 11389 ; WX 489 ; N uni2C7D ; G 3113
U 11390 ; WX 722 ; N uni2C7E ; G 3114
U 11391 ; WX 730 ; N uni2C7F ; G 3115
U 11520 ; WX 773 ; N uni2D00 ; G 3116
U 11521 ; WX 635 ; N uni2D01 ; G 3117
U 11522 ; WX 804 ; N uni2D02 ; G 3118
U 11523 ; WX 658 ; N uni2D03 ; G 3119
U 11524 ; WX 788 ; N uni2D04 ; G 3120
U 11525 ; WX 962 ; N uni2D05 ; G 3121
U 11526 ; WX 756 ; N uni2D06 ; G 3122
U 11527 ; WX 960 ; N uni2D07 ; G 3123
U 11528 ; WX 617 ; N uni2D08 ; G 3124
U 11529 ; WX 646 ; N uni2D09 ; G 3125
U 11530 ; WX 962 ; N uni2D0A ; G 3126
U 11531 ; WX 631 ; N uni2D0B ; G 3127
U 11532 ; WX 646 ; N uni2D0C ; G 3128
U 11533 ; WX 962 ; N uni2D0D ; G 3129
U 11534 ; WX 846 ; N uni2D0E ; G 3130
U 11535 ; WX 866 ; N uni2D0F ; G 3131
U 11536 ; WX 961 ; N uni2D10 ; G 3132
U 11537 ; WX 645 ; N uni2D11 ; G 3133
U 11538 ; WX 645 ; N uni2D12 ; G 3134
U 11539 ; WX 959 ; N uni2D13 ; G 3135
U 11540 ; WX 945 ; N uni2D14 ; G 3136
U 11541 ; WX 863 ; N uni2D15 ; G 3137
U 11542 ; WX 644 ; N uni2D16 ; G 3138
U 11543 ; WX 646 ; N uni2D17 ; G 3139
U 11544 ; WX 645 ; N uni2D18 ; G 3140
U 11545 ; WX 649 ; N uni2D19 ; G 3141
U 11546 ; WX 688 ; N uni2D1A ; G 3142
U 11547 ; WX 936 ; N uni2D1B ; G 3143
U 11548 ; WX 982 ; N uni2D1C ; G 3144
U 11549 ; WX 681 ; N uni2D1D ; G 3145
U 11550 ; WX 676 ; N uni2D1E ; G 3146
U 11551 ; WX 852 ; N uni2D1F ; G 3147
U 11552 ; WX 1113 ; N uni2D20 ; G 3148
U 11553 ; WX 632 ; N uni2D21 ; G 3149
U 11554 ; WX 645 ; N uni2D22 ; G 3150
U 11555 ; WX 646 ; N uni2D23 ; G 3151
U 11556 ; WX 749 ; N uni2D24 ; G 3152
U 11557 ; WX 914 ; N uni2D25 ; G 3153
U 11800 ; WX 586 ; N uni2E18 ; G 3154
U 11807 ; WX 838 ; N uni2E1F ; G 3155
U 11810 ; WX 473 ; N uni2E22 ; G 3156
U 11811 ; WX 473 ; N uni2E23 ; G 3157
U 11812 ; WX 473 ; N uni2E24 ; G 3158
U 11813 ; WX 473 ; N uni2E25 ; G 3159
U 11822 ; WX 586 ; N uni2E2E ; G 3160
U 42564 ; WX 722 ; N uniA644 ; G 3161
U 42565 ; WX 563 ; N uniA645 ; G 3162
U 42566 ; WX 468 ; N uniA646 ; G 3163
U 42567 ; WX 380 ; N uniA647 ; G 3164
U 42576 ; WX 1333 ; N uniA650 ; G 3165
U 42577 ; WX 1092 ; N uniA651 ; G 3166
U 42580 ; WX 1287 ; N uniA654 ; G 3167
U 42581 ; WX 1025 ; N uniA655 ; G 3168
U 42582 ; WX 1287 ; N uniA656 ; G 3169
U 42583 ; WX 1039 ; N uniA657 ; G 3170
U 42648 ; WX 1448 ; N uniA698 ; G 3171
U 42649 ; WX 1060 ; N uniA699 ; G 3172
U 42760 ; WX 500 ; N uniA708 ; G 3173
U 42761 ; WX 500 ; N uniA709 ; G 3174
U 42762 ; WX 500 ; N uniA70A ; G 3175
U 42763 ; WX 500 ; N uniA70B ; G 3176
U 42764 ; WX 500 ; N uniA70C ; G 3177
U 42765 ; WX 500 ; N uniA70D ; G 3178
U 42766 ; WX 500 ; N uniA70E ; G 3179
U 42767 ; WX 500 ; N uniA70F ; G 3180
U 42768 ; WX 500 ; N uniA710 ; G 3181
U 42769 ; WX 500 ; N uniA711 ; G 3182
U 42770 ; WX 500 ; N uniA712 ; G 3183
U 42771 ; WX 500 ; N uniA713 ; G 3184
U 42772 ; WX 500 ; N uniA714 ; G 3185
U 42773 ; WX 500 ; N uniA715 ; G 3186
U 42774 ; WX 500 ; N uniA716 ; G 3187
U 42779 ; WX 384 ; N uniA71B ; G 3188
U 42780 ; WX 384 ; N uniA71C ; G 3189
U 42781 ; WX 276 ; N uniA71D ; G 3190
U 42782 ; WX 276 ; N uniA71E ; G 3191
U 42783 ; WX 276 ; N uniA71F ; G 3192
U 42790 ; WX 945 ; N uniA726 ; G 3193
U 42791 ; WX 712 ; N uniA727 ; G 3194
U 42792 ; WX 1003 ; N uniA728 ; G 3195
U 42793 ; WX 909 ; N uniA729 ; G 3196
U 42794 ; WX 696 ; N uniA72A ; G 3197
U 42795 ; WX 609 ; N uniA72B ; G 3198
U 42796 ; WX 634 ; N uniA72C ; G 3199
U 42797 ; WX 598 ; N uniA72D ; G 3200
U 42798 ; WX 741 ; N uniA72E ; G 3201
U 42799 ; WX 706 ; N uniA72F ; G 3202
U 42800 ; WX 592 ; N uniA730 ; G 3203
U 42801 ; WX 563 ; N uniA731 ; G 3204
U 42802 ; WX 1301 ; N uniA732 ; G 3205
U 42803 ; WX 986 ; N uniA733 ; G 3206
U 42804 ; WX 1261 ; N uniA734 ; G 3207
U 42805 ; WX 1004 ; N uniA735 ; G 3208
U 42806 ; WX 1168 ; N uniA736 ; G 3209
U 42807 ; WX 1008 ; N uniA737 ; G 3210
U 42808 ; WX 1016 ; N uniA738 ; G 3211
U 42809 ; WX 813 ; N uniA739 ; G 3212
U 42810 ; WX 1016 ; N uniA73A ; G 3213
U 42811 ; WX 813 ; N uniA73B ; G 3214
U 42812 ; WX 994 ; N uniA73C ; G 3215
U 42813 ; WX 847 ; N uniA73D ; G 3216
U 42814 ; WX 796 ; N uniA73E ; G 3217
U 42815 ; WX 609 ; N uniA73F ; G 3218
U 42816 ; WX 910 ; N uniA740 ; G 3219
U 42817 ; WX 722 ; N uniA741 ; G 3220
U 42822 ; WX 916 ; N uniA746 ; G 3221
U 42823 ; WX 581 ; N uniA747 ; G 3222
U 42826 ; WX 1010 ; N uniA74A ; G 3223
U 42827 ; WX 770 ; N uniA74B ; G 3224
U 42830 ; WX 1448 ; N uniA74E ; G 3225
U 42831 ; WX 1060 ; N uniA74F ; G 3226
U 42856 ; WX 787 ; N uniA768 ; G 3227
U 42857 ; WX 716 ; N uniA769 ; G 3228
U 42875 ; WX 694 ; N uniA77B ; G 3229
U 42876 ; WX 527 ; N uniA77C ; G 3230
U 42880 ; WX 703 ; N uniA780 ; G 3231
U 42881 ; WX 380 ; N uniA781 ; G 3232
U 42882 ; WX 872 ; N uniA782 ; G 3233
U 42883 ; WX 727 ; N uniA783 ; G 3234
U 42884 ; WX 694 ; N uniA784 ; G 3235
U 42885 ; WX 527 ; N uniA785 ; G 3236
U 42886 ; WX 796 ; N uniA786 ; G 3237
U 42887 ; WX 609 ; N uniA787 ; G 3238
U 42891 ; WX 439 ; N uniA78B ; G 3239
U 42892 ; WX 306 ; N uniA78C ; G 3240
U 42893 ; WX 913 ; N uniA78D ; G 3241
U 42896 ; WX 914 ; N uniA790 ; G 3242
U 42897 ; WX 727 ; N uniA791 ; G 3243
U 42922 ; WX 945 ; N uniA7AA ; G 3244
U 43000 ; WX 595 ; N uniA7F8 ; G 3245
U 43001 ; WX 647 ; N uniA7F9 ; G 3246
U 43002 ; WX 1069 ; N uniA7FA ; G 3247
U 43003 ; WX 710 ; N uniA7FB ; G 3248
U 43004 ; WX 752 ; N uniA7FC ; G 3249
U 43005 ; WX 1107 ; N uniA7FD ; G 3250
U 43006 ; WX 468 ; N uniA7FE ; G 3251
U 43007 ; WX 1286 ; N uniA7FF ; G 3252
U 62464 ; WX 705 ; N uniF400 ; G 3253
U 62465 ; WX 716 ; N uniF401 ; G 3254
U 62466 ; WX 765 ; N uniF402 ; G 3255
U 62467 ; WX 999 ; N uniF403 ; G 3256
U 62468 ; WX 716 ; N uniF404 ; G 3257
U 62469 ; WX 710 ; N uniF405 ; G 3258
U 62470 ; WX 776 ; N uniF406 ; G 3259
U 62471 ; WX 1038 ; N uniF407 ; G 3260
U 62472 ; WX 716 ; N uniF408 ; G 3261
U 62473 ; WX 716 ; N uniF409 ; G 3262
U 62474 ; WX 1309 ; N uniF40A ; G 3263
U 62475 ; WX 734 ; N uniF40B ; G 3264
U 62476 ; WX 733 ; N uniF40C ; G 3265
U 62477 ; WX 1004 ; N uniF40D ; G 3266
U 62478 ; WX 716 ; N uniF40E ; G 3267
U 62479 ; WX 733 ; N uniF40F ; G 3268
U 62480 ; WX 1050 ; N uniF410 ; G 3269
U 62481 ; WX 797 ; N uniF411 ; G 3270
U 62482 ; WX 850 ; N uniF412 ; G 3271
U 62483 ; WX 799 ; N uniF413 ; G 3272
U 62484 ; WX 996 ; N uniF414 ; G 3273
U 62485 ; WX 732 ; N uniF415 ; G 3274
U 62486 ; WX 987 ; N uniF416 ; G 3275
U 62487 ; WX 731 ; N uniF417 ; G 3276
U 62488 ; WX 739 ; N uniF418 ; G 3277
U 62489 ; WX 733 ; N uniF419 ; G 3278
U 62490 ; WX 780 ; N uniF41A ; G 3279
U 62491 ; WX 733 ; N uniF41B ; G 3280
U 62492 ; WX 739 ; N uniF41C ; G 3281
U 62493 ; WX 717 ; N uniF41D ; G 3282
U 62494 ; WX 780 ; N uniF41E ; G 3283
U 62495 ; WX 936 ; N uniF41F ; G 3284
U 62496 ; WX 716 ; N uniF420 ; G 3285
U 62497 ; WX 826 ; N uniF421 ; G 3286
U 62498 ; WX 717 ; N uniF422 ; G 3287
U 62499 ; WX 716 ; N uniF423 ; G 3288
U 62500 ; WX 716 ; N uniF424 ; G 3289
U 62501 ; WX 773 ; N uniF425 ; G 3290
U 62502 ; WX 1013 ; N uniF426 ; G 3291
U 62504 ; WX 904 ; N uniF428 ; G 3292
U 63173 ; WX 667 ; N uniF6C5 ; G 3293
U 63185 ; WX 500 ; N cyrBreve ; G 3294
U 63188 ; WX 500 ; N cyrbreve ; G 3295
U 64256 ; WX 821 ; N uniFB00 ; G 3296
U 64257 ; WX 727 ; N fi ; G 3297
U 64258 ; WX 727 ; N fl ; G 3298
U 64259 ; WX 1120 ; N uniFB03 ; G 3299
U 64260 ; WX 1117 ; N uniFB04 ; G 3300
U 64261 ; WX 871 ; N uniFB05 ; G 3301
U 64262 ; WX 971 ; N uniFB06 ; G 3302
U 65024 ; WX 0 ; N uniFE00 ; G 3303
U 65025 ; WX 0 ; N uniFE01 ; G 3304
U 65026 ; WX 0 ; N uniFE02 ; G 3305
U 65027 ; WX 0 ; N uniFE03 ; G 3306
U 65028 ; WX 0 ; N uniFE04 ; G 3307
U 65029 ; WX 0 ; N uniFE05 ; G 3308
U 65030 ; WX 0 ; N uniFE06 ; G 3309
U 65031 ; WX 0 ; N uniFE07 ; G 3310
U 65032 ; WX 0 ; N uniFE08 ; G 3311
U 65033 ; WX 0 ; N uniFE09 ; G 3312
U 65034 ; WX 0 ; N uniFE0A ; G 3313
U 65035 ; WX 0 ; N uniFE0B ; G 3314
U 65036 ; WX 0 ; N uniFE0C ; G 3315
U 65037 ; WX 0 ; N uniFE0D ; G 3316
U 65038 ; WX 0 ; N uniFE0E ; G 3317
U 65039 ; WX 0 ; N uniFE0F ; G 3318
U 65529 ; WX 0 ; N uniFFF9 ; G 3319
U 65530 ; WX 0 ; N uniFFFA ; G 3320
U 65531 ; WX 0 ; N uniFFFB ; G 3321
U 65532 ; WX 0 ; N uniFFFC ; G 3322
U 65533 ; WX 1113 ; N uniFFFD ; G 3323
EndCharMetrics
StartKernData 
StartKernPairs 1408

KPX dollar seven -112
KPX dollar nine -149
KPX dollar colon -102
KPX dollar less -102
KPX dollar I -36
KPX dollar W -36
KPX dollar Y -83
KPX dollar Z -83
KPX dollar backslash -83
KPX dollar questiondown -83
KPX dollar Aacute -83
KPX dollar Hcircumflex -112
KPX dollar hcircumflex -36
KPX dollar Hbar -112
KPX dollar hbar -36
KPX dollar Kcommaaccent -102
KPX dollar kcommaaccent -83
KPX dollar kgreenlandic -102
KPX dollar Lacute -83
KPX dollar lacute -102
KPX dollar uni01DC -112
KPX dollar uni01DD -36
KPX dollar uni01F4 -102
KPX dollar uni01F5 -83

KPX percent ampersand 38
KPX percent asterisk 38
KPX percent two 38
KPX percent less -36
KPX percent Egrave 38
KPX percent Ecircumflex 38
KPX percent Igrave 38
KPX percent Icircumflex 38
KPX percent Thorn 38
KPX percent agrave 38
KPX percent acircumflex 38
KPX percent adieresis 38
KPX percent Dcaron 38
KPX percent Dcroat 38
KPX percent Emacron 38
KPX percent Ebreve 38
KPX percent kgreenlandic -36
KPX percent lacute -36
KPX percent uni01AC 38
KPX percent uni01AE 38
KPX percent uni01F0 38
KPX percent uni01F4 -36


KPX quotesingle nine -36


KPX parenright dollar -120
KPX parenright D -112
KPX parenright H -112
KPX parenright R -112
KPX parenright U -36
KPX parenright X -36
KPX parenright cent -112
KPX parenright sterling -112
KPX parenright currency -112
KPX parenright yen -112
KPX parenright brokenbar -112
KPX parenright section -112
KPX parenright dieresis -112
KPX parenright ordfeminine -112
KPX parenright guillemotleft -112
KPX parenright logicalnot -112
KPX parenright sfthyphen -112
KPX parenright acute -112
KPX parenright mu -112
KPX parenright paragraph -112
KPX parenright periodcentered -112
KPX parenright cedilla -112
KPX parenright ordmasculine -112
KPX parenright guillemotright -36
KPX parenright onequarter -36
KPX parenright onehalf -36
KPX parenright threequarters -36
KPX parenright Acircumflex -120
KPX parenright Atilde -112
KPX parenright Adieresis -120
KPX parenright Aring -112
KPX parenright AE -120
KPX parenright Ccedilla -112
KPX parenright Otilde -112
KPX parenright multiply -112
KPX parenright Ugrave -112
KPX parenright Ucircumflex -112
KPX parenright Yacute -112
KPX parenright dcaron -112
KPX parenright dmacron -112
KPX parenright emacron -112
KPX parenright ebreve -112
KPX parenright edotaccent -36
KPX parenright eogonek -36
KPX parenright ecaron -36
KPX parenright imacron -36
KPX parenright ibreve -36
KPX parenright iogonek -36
KPX parenright dotlessi -36
KPX parenright ij -36
KPX parenright jcircumflex -36
KPX parenright uni01A5 -112
KPX parenright uni01AD -112
KPX parenright Uhorn -112
KPX parenright uni01F1 -112



KPX period dollar -83
KPX period ampersand -55
KPX period two -55
KPX period eight -73
KPX period colon -73
KPX period less -55
KPX period H -45
KPX period R -45
KPX period X -45
KPX period backslash -92
KPX period ordfeminine -45
KPX period guillemotleft -45
KPX period logicalnot -45
KPX period sfthyphen -45
KPX period acute -45
KPX period mu -45
KPX period paragraph -45
KPX period periodcentered -45
KPX period cedilla -45
KPX period ordmasculine -36
KPX period guillemotright -45
KPX period onequarter -45
KPX period onehalf -45
KPX period threequarters -45
KPX period questiondown -92
KPX period Aacute -92
KPX period Egrave -55
KPX period Icircumflex -55
KPX period Yacute -45
KPX period Ebreve -55
KPX period ebreve -45
KPX period Idot -73
KPX period dotlessi -45
KPX period lacute -55

KPX slash seven -167
KPX slash eight -112
KPX slash nine -243
KPX slash colon -139
KPX slash less -131
KPX slash backslash -73
KPX slash questiondown -73
KPX slash Aacute -73
KPX slash Hbar -167
KPX slash Idot -112
KPX slash lacute -131


KPX two nine -36
KPX two semicolon -36

KPX three dollar -149
KPX three D -55
KPX three H -55
KPX three R -55
KPX three cent -55
KPX three sterling -55
KPX three currency -55
KPX three yen -55
KPX three brokenbar -55
KPX three section -55
KPX three dieresis -55
KPX three ordfeminine -55
KPX three guillemotleft -55
KPX three logicalnot -55
KPX three sfthyphen -55
KPX three acute -55
KPX three mu -55
KPX three paragraph -55
KPX three periodcentered -55
KPX three cedilla -55
KPX three ordmasculine -55
KPX three Yacute -55
KPX three ebreve -55


KPX five seven -36
KPX five nine -73
KPX five colon -45
KPX five less -63
KPX five D 47
KPX five backslash -36
KPX five cent 47
KPX five sterling 47
KPX five currency 47
KPX five yen 47
KPX five brokenbar 47
KPX five section 47
KPX five dieresis 47
KPX five ordmasculine 38
KPX five questiondown -36
KPX five Aacute -36
KPX five Hbar -36
KPX five lacute -63

KPX six six -45
KPX six Gdotaccent -45
KPX six Gcommaaccent -45

KPX seven dollar -112
KPX seven seven -73
KPX seven D -196
KPX seven F -235
KPX seven H -235
KPX seven R -235
KPX seven U -149
KPX seven V -188
KPX seven X -188
KPX seven Z -225
KPX seven backslash -225
KPX seven m -149
KPX seven braceright -149
KPX seven cent -96
KPX seven sterling -196
KPX seven currency -96
KPX seven yen -96
KPX seven brokenbar -96
KPX seven section -96
KPX seven dieresis -159
KPX seven copyright -235
KPX seven ordfeminine -175
KPX seven guillemotleft -235
KPX seven logicalnot -175
KPX seven sfthyphen -175
KPX seven acute -155
KPX seven mu -235
KPX seven paragraph -155
KPX seven periodcentered -155
KPX seven cedilla -155
KPX seven ordmasculine -159
KPX seven guillemotright -158
KPX seven onequarter -188
KPX seven onehalf -158
KPX seven threequarters -158
KPX seven questiondown -225
KPX seven Aacute -225
KPX seven Eacute -235
KPX seven Idieresis -235
KPX seven Yacute -235
KPX seven ebreve -159
KPX seven edotaccent -149
KPX seven ecaron -149
KPX seven gdotaccent -188
KPX seven gcommaaccent -188
KPX seven Hbar -73
KPX seven dotlessi -188

KPX eight dollar -63

KPX nine dollar -159
KPX nine two -36
KPX nine D -188
KPX nine H -188
KPX nine L -36
KPX nine R -188
KPX nine X -131
KPX nine backslash -83
KPX nine cent -188
KPX nine sterling -188
KPX nine currency -188
KPX nine yen -188
KPX nine brokenbar -188
KPX nine section -188
KPX nine dieresis -188
KPX nine ordfeminine -188
KPX nine guillemotleft -188
KPX nine logicalnot -188
KPX nine sfthyphen -188
KPX nine acute -188
KPX nine mu -188
KPX nine paragraph -188
KPX nine periodcentered -188
KPX nine cedilla -188
KPX nine ordmasculine -188
KPX nine guillemotright -131
KPX nine onequarter -131
KPX nine onehalf -131
KPX nine threequarters -131
KPX nine questiondown -83
KPX nine Aacute -83
KPX nine Yacute -188
KPX nine Ebreve -36
KPX nine ebreve -188
KPX nine dotlessi -131

KPX colon dollar -131
KPX colon D -178
KPX colon H -167
KPX colon L -36
KPX colon R -167
KPX colon U -92
KPX colon X -83
KPX colon backslash -45
KPX colon cent -178
KPX colon sterling -178
KPX colon currency -178
KPX colon yen -178
KPX colon brokenbar -178
KPX colon section -178
KPX colon dieresis -139
KPX colon ordfeminine -167
KPX colon guillemotleft -167
KPX colon logicalnot -167
KPX colon sfthyphen -167
KPX colon acute -167
KPX colon mu -167
KPX colon paragraph -167
KPX colon periodcentered -167
KPX colon cedilla -167
KPX colon ordmasculine -167
KPX colon guillemotright -83
KPX colon onequarter -83
KPX colon onehalf -83
KPX colon threequarters -83
KPX colon questiondown -45
KPX colon Aacute -45
KPX colon Yacute -167
KPX colon ebreve -167
KPX colon edotaccent -92
KPX colon ecaron -92
KPX colon dotlessi -83

KPX semicolon dollar -73
KPX semicolon ampersand -36
KPX semicolon two -36
KPX semicolon Egrave -36
KPX semicolon Icircumflex -36
KPX semicolon Ebreve -36

KPX less dollar -131
KPX less ampersand -36
KPX less D -159
KPX less H -178
KPX less L -36
KPX less R -178
KPX less X -178
KPX less cent -159
KPX less sterling -159
KPX less currency -159
KPX less yen -159
KPX less brokenbar -159
KPX less section -159
KPX less dieresis -159
KPX less ordfeminine -178
KPX less guillemotleft -178
KPX less logicalnot -178
KPX less sfthyphen -178
KPX less acute -178
KPX less mu -178
KPX less paragraph -178
KPX less periodcentered -178
KPX less cedilla -178
KPX less ordmasculine -178
KPX less guillemotright -178
KPX less onequarter -178
KPX less onehalf -178
KPX less threequarters -178
KPX less Egrave -36
KPX less Icircumflex -36
KPX less Yacute -178
KPX less ebreve -178
KPX less dotlessi -178










KPX m hyphen -73
KPX m seven -149
KPX m Hbar -149

KPX braceright hyphen -73
KPX braceright seven -149
KPX braceright Hbar -149












KPX Acircumflex seven -112
KPX Acircumflex nine -149
KPX Acircumflex colon -102
KPX Acircumflex less -102
KPX Acircumflex I -36
KPX Acircumflex W -36
KPX Acircumflex Y -83
KPX Acircumflex Z -83
KPX Acircumflex backslash -83
KPX Acircumflex questiondown -83
KPX Acircumflex Aacute -83
KPX Acircumflex Hcircumflex -112
KPX Acircumflex hcircumflex -36
KPX Acircumflex Hbar -112
KPX Acircumflex hbar -36
KPX Acircumflex Kcommaaccent -102
KPX Acircumflex kcommaaccent -83
KPX Acircumflex kgreenlandic -102
KPX Acircumflex Lacute -83
KPX Acircumflex lacute -102
KPX Acircumflex uni01DC -112
KPX Acircumflex uni01DD -36
KPX Acircumflex uni01F4 -102
KPX Acircumflex uni01F5 -83

KPX Adieresis seven -112
KPX Adieresis nine -149
KPX Adieresis colon -102
KPX Adieresis less -102
KPX Adieresis I -36
KPX Adieresis W -36
KPX Adieresis Y -83
KPX Adieresis Z -83
KPX Adieresis backslash -83
KPX Adieresis questiondown -83
KPX Adieresis Aacute -83
KPX Adieresis Hcircumflex -112
KPX Adieresis hcircumflex -36
KPX Adieresis Hbar -112
KPX Adieresis hbar -36
KPX Adieresis Kcommaaccent -102
KPX Adieresis kcommaaccent -83
KPX Adieresis kgreenlandic -102
KPX Adieresis Lacute -83
KPX Adieresis lacute -102
KPX Adieresis uni01DC -112
KPX Adieresis uni01DD -36
KPX Adieresis uni01F4 -102
KPX Adieresis uni01F5 -83

KPX AE seven -112
KPX AE nine -149
KPX AE colon -102
KPX AE less -102
KPX AE I -36
KPX AE W -36
KPX AE Y -83
KPX AE Z -83
KPX AE backslash -83
KPX AE questiondown -83
KPX AE Aacute -83
KPX AE Hcircumflex -112
KPX AE hcircumflex -36
KPX AE Hbar -112
KPX AE hbar -36
KPX AE Kcommaaccent -102
KPX AE kcommaaccent -83
KPX AE kgreenlandic -102
KPX AE Lacute -83
KPX AE lacute -102
KPX AE uni01DC -112
KPX AE uni01DD -36
KPX AE uni01F4 -102
KPX AE uni01F5 -83





KPX Eth nine -36

KPX Ograve nine -36



KPX ucircumflex seven -167
KPX ucircumflex eight -112
KPX ucircumflex nine -243
KPX ucircumflex colon -139
KPX ucircumflex less -131
KPX ucircumflex backslash -73
KPX ucircumflex questiondown -73
KPX ucircumflex Aacute -73
KPX ucircumflex Hbar -167
KPX ucircumflex Idot -112
KPX ucircumflex lacute -131

KPX ydieresis seven -167
KPX ydieresis eight -112
KPX ydieresis nine -243
KPX ydieresis colon -139
KPX ydieresis less -131
KPX ydieresis backslash -73
KPX ydieresis questiondown -73
KPX ydieresis Aacute -73
KPX ydieresis Hbar -167
KPX ydieresis Idot -112
KPX ydieresis lacute -131

KPX Abreve O -241

KPX abreve seven -167
KPX abreve eight -112
KPX abreve nine -243
KPX abreve colon -139
KPX abreve less -131
KPX abreve backslash -73
KPX abreve questiondown -73
KPX abreve Aacute -73
KPX abreve Hbar -167
KPX abreve Idot -112
KPX abreve lacute -131



KPX Edotaccent seven -36
KPX Edotaccent nine -73
KPX Edotaccent colon -45
KPX Edotaccent less -63
KPX Edotaccent D 47
KPX Edotaccent backslash -36
KPX Edotaccent cent 47
KPX Edotaccent sterling 47
KPX Edotaccent currency 47
KPX Edotaccent yen 47
KPX Edotaccent brokenbar 47
KPX Edotaccent section 47
KPX Edotaccent dieresis 47
KPX Edotaccent ordmasculine 38
KPX Edotaccent questiondown -36
KPX Edotaccent Aacute -36
KPX Edotaccent Hbar -36
KPX Edotaccent lacute -63


KPX Ecaron seven -36
KPX Ecaron nine -73
KPX Ecaron colon -45
KPX Ecaron less -63
KPX Ecaron D 47
KPX Ecaron backslash -36
KPX Ecaron cent 47
KPX Ecaron sterling 47
KPX Ecaron currency 47
KPX Ecaron yen 47
KPX Ecaron brokenbar 47
KPX Ecaron section 47
KPX Ecaron dieresis 47
KPX Ecaron ordmasculine 38
KPX Ecaron questiondown -36
KPX Ecaron Aacute -36
KPX Ecaron Hbar -36
KPX Ecaron lacute -63


KPX Gdotaccent six -45
KPX Gdotaccent Gdotaccent -45
KPX Gdotaccent Gcommaaccent -45

KPX Gcommaaccent six -45
KPX Gcommaaccent Gdotaccent -45
KPX Gcommaaccent Gcommaaccent -45

KPX Hbar dollar -112
KPX Hbar seven -73
KPX Hbar D -196
KPX Hbar F -235
KPX Hbar H -235
KPX Hbar R -235
KPX Hbar U -149
KPX Hbar V -188
KPX Hbar X -188
KPX Hbar Z -225
KPX Hbar backslash -225
KPX Hbar m -149
KPX Hbar braceright -149
KPX Hbar cent -196
KPX Hbar sterling -196
KPX Hbar currency -196
KPX Hbar yen -196
KPX Hbar brokenbar -196
KPX Hbar section -196
KPX Hbar dieresis -159
KPX Hbar copyright -235
KPX Hbar ordfeminine -235
KPX Hbar guillemotleft -235
KPX Hbar logicalnot -235
KPX Hbar sfthyphen -235
KPX Hbar acute -235
KPX Hbar mu -235
KPX Hbar paragraph -235
KPX Hbar periodcentered -235
KPX Hbar cedilla -235
KPX Hbar ordmasculine -159
KPX Hbar guillemotright -188
KPX Hbar onequarter -188
KPX Hbar onehalf -188
KPX Hbar threequarters -188
KPX Hbar questiondown -225
KPX Hbar Aacute -225
KPX Hbar Eacute -235
KPX Hbar Idieresis -235
KPX Hbar Yacute -235
KPX Hbar ebreve -159
KPX Hbar edotaccent -149
KPX Hbar ecaron -149
KPX Hbar gdotaccent -188
KPX Hbar gcommaaccent -188
KPX Hbar Hbar -73
KPX Hbar dotlessi -188

KPX Idot dollar -63

KPX lacute dollar -131
KPX lacute ampersand -36
KPX lacute D -159
KPX lacute H -178
KPX lacute L -36
KPX lacute R -178
KPX lacute X -178
KPX lacute cent -159
KPX lacute sterling -159
KPX lacute currency -159
KPX lacute yen -159
KPX lacute brokenbar -159
KPX lacute section -159
KPX lacute dieresis -159
KPX lacute ordfeminine -178
KPX lacute guillemotleft -178
KPX lacute logicalnot -178
KPX lacute sfthyphen -178
KPX lacute acute -178
KPX lacute mu -178
KPX lacute paragraph -178
KPX lacute periodcentered -178
KPX lacute cedilla -178
KPX lacute ordmasculine -178
KPX lacute guillemotright -178
KPX lacute onequarter -178
KPX lacute onehalf -178
KPX lacute threequarters -178
KPX lacute Egrave -36
KPX lacute Icircumflex -36
KPX lacute Yacute -178
KPX lacute ebreve -178
KPX lacute dotlessi -178


KPX uni027D dollar -282
EndKernPairs
EndKernData
EndFontMetrics
       0FFTMs  <   GDEFL  X   GPOS5kk    5.GSUB  74  OS/2n  =   VcmapO*  >(  cvt 먏  N@  fpgm  O   gasp    Pp   glyfu  P| dhead    6hhea    $hmtx#P <  6kernG Q  loca3}  l  6maxp0     nameE   !poste.   prepV: G         =    )    )                               n oy z                   
   DFLT cyrl *grek Flatn V            MKD  SRB                    ^ AZE  ^CRT  ^GAG  ^ISM  ^KAZ  ^KRK  ^KSM  ^LSM  ^MOL  ^NSM  ^ROM  ^SKS  ^SSM  ^TAT  ^TRK  ^        kern mark mkmk                                #x B j    B H N T Z ` f l r x ~                      Vf < <  < < < a  Vf Vf W W Vf 8 < ] / )f 'f )f 'f 'f 'f                oo qq sw         oy  &                                                                  $  *  0  6  <  B  H  N  T  Z  `  f  l  r  x ' ' ' J J  J J J  J 8 8   8 q c D  D D      o o o o W W W W o o o   JPV\bhntz
"(.4:@FLRX^djpv|	 						$	*	0	6	<	B	H	N	T	Z	`	f	l	r	x	~										  			  	  	  	  			  		
  




 
&
,  
2
8
>
D
J
P
V
\
b
h
n  
t  
z  
  
  




  


  


  
  
  
  
  
  


  
  
"(.4:@  F  LRX^djpv|   $*06<BHNTZ`f  lrx~     &,28>DJPV\bhntz
"(.4:@FLRX^djpv| $*06<BHNTZ`flrx~ &,28>DJPV\bhntz                                  
        "  (  .  4  :  @  F  L  R  X  ^  d  j  p  v  |                         $*06<BHNTZ`flrx~ &,28>DJPV\bhntz
"(.4:@FLRX^djpv| $*06<BHNTZ`flrx~ &,28>DJPV\bhntz
      "  (  .  4  :  @  F  LRX^djpv| $*06<BHNTZ`flrx~ &,28>DJPV\bhntz
  "(.  4  :  @FLRX^djpv|  r                     M   ,    j 9   ~ M     }R  n   j        6         M   -       x H    o   O !       ,        I    Z   D        D 0   [    D #     R D R  [   P0     b0  R  [        D    D    D D   D  R 4D R D    D        /D ^   D  D    D  D R D    m K .    Qm m m     m .H [  D D E   i 9    [   D     D          R     h  D  l     '       j k N   +D  d D       g D x [   D    D R ,    D R  X          (   D    ( &   D k        > "    r       D $     ~R     D        D    g J   D R DD q   D    [D        D    D  R [    D 0   D 0   D 0   D 1   D D dD    D  LR W R ?D R D 1   D R D E   YD 1R  [    4R 1     D    D ,             R }D    D    D R D R .D aR .D aR _D    D D   4D `   .D Z    qR hD y    I   D OR +D  R .D  R D    D    D    hD 8   D R )  R   R D R )  R VD P = ~R 2D ^   )D U   0D [   D  D    L /   `D  D R D R D R u h        Y     R     D &   /D [   W 1   YD    <1  R D R ]D    O ^R u h       D :   D ;   ; /R D 5R yD    p   #   8  ;     zD    j M   ZD      }R  ~ 5     Y  i 8     w    F D /D /D D D D -D D !D D  D D R  D  ?D \ D  wD    D  [     |   kD ( 0D \   D h   D E D 1   D E   D E       D    zD    ]D    D 	   ZD    D    D    D    D    D E   iD    D    D (   GD    D s   D    6D b   D /   D C   O R D  D    D    D         D    D (   0D \   [D    D (   D    D    J  V  x  o    e             O  )    O       x     H    B {   9      9      h B  H   D (   D H   D  R 6D b   )D U           U  -   R   R     $ @   u      M    \      [  *       k          N   ~ R t X    \        \    z   D    X R !    D     D    U 8   ZD    q J   D         v  V  1V e D k D r D  D  "D V 9   D     R      R ~ R  |   *      D R   D R     D        /H \      /H \  N 2   "D O       D A       D A     MR "D !R _ B   D     o    \   u S        {   D    V 9   D     $R tD  R  R ,D  R  0     R ! R ,D R  R ,D  R     D 4   6    D    j 9      j D     >   /    *    Q &   Z   D D     D  R D D 6 ;D g   <D R O 3   z ]   3D 2 D    0D \   D E   D    D    zD     9 N       [        D R  i $ =   D ]    4   5   7   8   :   ;   <   >   ?   A B)) DAB EHJ GLL JPR KUV NXY P`a Rij Tnn Vpp Wss Xux Y|| ] ^ ` a b d h
 iR oTf ii kk mm yz      oo qr {{ ~~                 77
 ')1?DDHGGIVVJY]K__PddQ||R~S&'UWYZ[\]^

_`j#l%'q)+tYdwyz{}  	      " - 5 ;oy < G    $  *  0  6  <  B  H  N  T  Z  `  f  l  r  x  ~                                 & , 2 8 >  D  J  P  V  \  b  h  n  t  z                         'D 'D 'D 'D 'D D 'D 'D 'D D 'D 'D 'D D D 'D /D ;D , 
m 
m A   @   ^   ^   d   N   N   ^   ?      9   2 <   C   A   :   @   A   :   :   :   .   L   1   `   <   T   :   D m D 
m D D D D D D D ]D ]D ]D ]D WD WD WD WD ]D ]D ]D    @ ( '                                                                                                      kk                                                                    k                                       &       & &   &                                                                                                                                     &                                                                         &                                                                          22                                                       &                                                                          a                                                                        k                                                                        Yu  }                                    }  }                                                                       K                                                                    k                                                         K                                                                                                 /                         / &           K                                                                                          <      kDD  k  aaa    k      DD                                                                    k2a                    D  D        }        DDD   &   &  u}                      N  Y              uYY   &   &                                                                        2}                    a  N        N          aNN                                                                              A                                                                                                                                                           k  D                                                             K K   K K  Y  2                                                             K K   K K                                                                              <                                                               K K   K K                    k                                                         K                                                                   &                                                                                                                                                                                                                                                  Yu  }                                                                                                                                         9 9 9 9                                                                   D                                          O    $ $  % %  & &  ' '  ( (  ) )  * *  - - 	 . . 
 / /  1 1  2 2  3 3  4 4  5 5  6 6  7 7  8 8  9 9  : :  ; ;  < <  = =  I I  N N  R R  U U  Y Z  [ [  \ \  m m  } }                                   !               "                         # $		         "" && 00 :: ?? }} %  % & '  
   K             $ $  & &  * *  - -  2 2 	 6 6 
 7 7  8 8  9 9  : :  ; ;  < <  D D  F F  H H  I I  L L  O O  R R  U U  V V  W W  X X  Y Y  Z Z  \ \  m m  } }             	   	                                                     	 !     
!! "" 
## && '' 00 11 ::  " # $ % & $    c  $ % & ' ( ) * - . / 1 2 3 4 5 6 7 8 9 : ; < = I N R U Y Z [ \ m }                                          	 "&0:?}      
< DFLT cyrl 0grek blatn v               MKD   SRB                                   p AZE  CAT  CRT  ESP  GAG  GAL  ISM  KAZ  KRK  KSM  LSM  MOL  NSM  ROM  SKS  SSM  TAT  TRK                                             	aalt 8case >ccmp Ddlig Jliga Pliga Xlocl ^locl dsalt j        
                                   ( 0 8 @ H P X ` h     X                \                    B    p   ` ` `   z     L M     ** __   ^^     ! 'UU (  Y $ =  I I  K K  L M  O O                                                                                           		              "" $$ && (( ** ,, .. 00 22 44 66 88 :; == ?? AA HH RR TT VV           ** __   ^^     UU             	                  y    N   ( D      I O  O  I     T O  O T    O   IT  >     4     I L  L    T L  L    L   IT    
     W    W   VA      J     8     " & , 0 4           J   y   
rpsqvwoxty  
    z!{} ~   L M *_^U      c R      3 63E f   R 
      PfEd !  `               ,   
            ,  
     `   `   ~?COXaw_emwV_?kxEMWY[]} & : > B I O S W d q         !!	!!!"!'!+!2!D!K!N!!" ""	""" "-"="C"H"U"a"e"""#####!#%#(#}##$#& &<&G&g&o''''))**/*k+,a,d,s,w,-%...%..GQWAGKOi|&(        COX`pzbjp1Ya? w{   HPY[]_   * < B D K Q W _ j t        !!	!!!"!&!*!2!A!K!N!P!!""""""#"8"B"H"P"`"d"""##### #%#(#}##$#% &8&?&`&i''''')**/*j+ ,`,c,g,u,y- ..."..DPT&FJNh{ (    |{zykiecOMKIGCA?='#X~}|{zxwvtsqpolkhgfeb[VTSJECB@><ieQ j;|uo߱߰߮߭߬,:42*fffee]eYeSeOeMeKe3e"eeeed                                                                                                                                                                                                                                                                                                                                                                      P              ~           b                                               ?    C  C    O  O    X  X    `  a    p  w    z                                 _  [  b  e    j  m    p  w                                                  
            7      =  1  V  A  Y  _  g  a    n        ?  ?                   k    w  x  W  {    Y      ^      _                               E    H  M    P  W    Y  Y    [  [    ]  ]    _  }              -      <      J      P      c      f       &  o   *   :     <   >     B   B     D   I     K   O     Q   S     W   W     _   d     j   q     t                                                                       !  !    !	  !	    !  !    !  !    !"  !"    !&  !'     !*  !+    !2  !2    !A  !D    !K  !K  	  !N  !N  
  !P  !    !  !  A  !  "   B  "  "    "  "	    "  "    "  "    "  "     "#  "-    "8  "=    "B  "C    "H  "H    "P  "U    "`  "a    "d  "e    "  "    "  "    "  "  	  #  #  	  #  #  	  #  #  	  #  #  	  #   #!  	   #%  #%  	"  #(  #(  	#  #}  #}  	$  #  #  	%  #  #  	9  $#  $#  	:  %   &   	;  &8  &<  
<  &?  &G  
A  &`  &g  
J  &i  &o  
R  '  '  
Y  '  '  
Z  '  '  
\  '  '  
]  '  )  
_  )  )    *  *    */  */    *j  *k    +   +    ,`  ,a    ,c  ,d    ,g  ,s    ,u  ,w  "  ,y  ,  %  -   -%  ,  .  .  R  .  .  S  ."  .%  T  ..  ..  X  D  G  Y  P  Q  ]  T  W  _      c      e      t  &  A  y  F  G    J  K    N  O    h  i    {  |                                     &    (  (                                         h ԛ     U  4 
                                                                       	 
                        ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a                                   r d e i x  p k v j   s g w9 l |"    c nT m } b    
 : y                   q z    {    `  j y    V \b y b  `{{ N \ =                  V   T q     \f{fb    --)      {bb   ??) f D )      y 
 V % h N  f   s     { j u y
 j d y{H y`  y q q
33 N y    j  ``'''D b j  y y b3' b   =   D ) f    R    R   5f V V    VJ!/ T   f D s    , %Id@QX Y!-,%Id@QX Y!-,   Py PXY%%#  Py PXY%-,KPX EDY!-,%E`D-,KSX%%EDY!!-,ED-         ff    !%!!f sr)     	   7>2"&!#7ZYw%%NppNOpp     h    #!#++    )    !!!3!!!!#!#!5!!5! F+`aaE````HFR`hh   T $ + 1  73;.76$73#6&'#.>&'T9x	O #5y5oY5y|H#$5y5n2XsD]gyOf;#7+'t;Ǵ,T=FVW`   x!    % 0  "32676&'2#"&6!3#2#"&7>"32676=@S !@AS! -M󿾣MN,ٿ&'󿾢'&S !@AS! ev-d   # 8 E  )'# '&547>7&'&5476$32#454'&#">?!#3%326!etԐo
% 7Jw<)/ke	nIg>.[Y=DU	>UNPPb/4SC=" g29`R\	DqxxWlLCS/*nOm1        #+      $ %nCCB}̄x``       76'7 NCCB<Xx`yXYy`x4L.   -9   %#'-73%hbbibHH{x      !!#!5!    B? 	  >?!	x+TЊVm     T   !!t4  $`   7>32#"&NOZONZNppNOpp   \B   3#m  _1 	   $26&"  !  UU.UU+*tXHIpq    I 
  37!7%!!;yy       #>3 !73!?$76&#"Ux>z(+"U0A#"lvdB%%ДJ     *  6$3 !"&'332676&+732676&#"#9 v#ǥ#(v@y B4qv&y##̱((Hx{        )73!7!!!356x  5ys+    $   !>3   !"&'332676&#"#3@LZ
//z{?xq''eL@d34(*F?B  w`  !  >32 !  !2#.#"26&"K_-0FOXZp3yvnYzT6yTu44qffiѯP    y   	#!#!GC'^E)    &=  ! -   $7>7.76$! 6&#"266&#"326¬ (( ⷖ|%C%5\]b5aD#Brsw#$Arqz̥Υ$Ⱦ'wwuuշ  1  !   "26#"76 !  !"&'3326yT5zTYL^-0Y2FOQZp3yvo{P55iafi  |w    >2"&>2"&ZYoZZ-OpqnnNppNOpp      >2"&>?!ZYy+-OpqnneSϊXm      B   	5-    -    !!!!    B   5510P     "  7>32#"&>32#>76&#"#NOZONZ9i(((:]wn"yNppNOppY""++      K  76&#"326#"&$3273>76&'.#"3267#"$'&76$32 !#]ec:Wce:ZR	Zې"@_L茂k&,ET zt'ڐgeDKĖ`Ͳ`oM"6LذHLLG}'갏`NTFEjśewzDC^TT~~|KJ}~|abo   ^      #7333!73!3!z=(E?Ϲfwy\yy1y#;    B   $  #73#7! !32676&+32676&+1u$ܾ +UyyƤf}v    UK   !   !2#.#" 3267hEE	zGܕLef@Af          %32 +73#7!   !&??_FF
oy,GE+yy    0   #73#7!#7!!73#7!!731>D)]%d%yu)Dyy!      %   #73#7!#7!!73#7!313D)]{%d%yyy!y    U~   .#" 3267#7!#   !2BATCOpFF)G Ʊ&&xNLhi@A        #73#7!#!#7!#3!73!31 bRb  wwyyy
yyyydy       #73#7!#31 yyyy  V6   733267#7!#!"&-<Laj(/S^X+yy"     8   #73#7!##7!#	3!31 j-?vyyy!yy3yy   +   #73#7!#!731 L-Hyyy-     	   #73#7!!#3!73#3;hfg f޾yyByyysy      #73#7!#7!#!37
?yyyy7By     U    %2#"   !   @@{@@|xy[FF\BKLBydd         #73#7!2#!332676&+1R''aapxpyyy㭑  en  .  $'&547 !  ;#"'&2654'&#"yGxy|>j*G0p@!>@ >̑[ijΓ[it/9:sR)BK}wO|xQ   9  #  3!.+3!73#7! %326&+<Vh*RV=k T%6y\W`yÌMyyy!    t )  7332676&/.76$!2#6&#"!"$E[Ћ#,W
@UƑ&,ђHbvrZd+78Ǹ,,gf]a4742    _  q   373!#!#7!3g-HH-dyu-y     a   #7!#326#7!# !  66BC\yyyy &U    m     ###7!##7}؍Wy\yy#y   g  	   )!#7!#!#7!#@j{ٲ?\yykyy    w   	3!73	#7!##7!#	3!73pp&_?:yy;yy\yy5yy     g  [   373#7!##7!#3akyyy9yyBy       #7!#!!73Eg5+F(ChA   N   !#3!7xx  BI   #m    {   	!73#7z4x2x       	#	#JJ;-        !5  ۾   f   #fx    FD    &#"32677!7#"7676! I9=0$4_]u$Dn,+0,l<J(r{    2*  (  #7!>32 #"&'!3267654'&#"Jz=peD3pjm{-mj$xSQcKWQSdF<'SW6!X  ED #  # '&547 !2#654'&#"3267\I[3nom:p*2r0)k%LhCM(**f7AYN0hx  l  (  7654'&#"326	!7#"'&547 32#78in{-
miW=pdC3=pcicF='SW7"XSQdKX*QSx    DD 
 %  4#"03 7632673# '&547 !2\|_p32/js*NwS3h	?@&p"GztfEQ(    { #  267#7376$32#654'&#"!!#6bP^"UK-pEP^)|sy9&sy5<[8   .9UD  +  &#"3267!"&'73326?#"776! @rG+$=mh$ǿ0 jm2q7<'z+5Ml<eܹ*d{!!	\/3y İ   E  #   3#7!>323!654'&#"F }S}G-lUk!tx}_TjCl=JyF0,4   E      >32#"'&543!#7!.QO-!OQ-"TQo8)7Oo7)79yy 9  '  >32#"'&54#7!#"&'73267PRN.!OQ-"% <E,qBILTQo8*7Oo7)7ny\'$^{    E  /   )#7!#7!3! PsytxyyyX    E     %3!#7!yyx   r  D /  >323!654'&#"!654'&#"!#7!>32^sG,lyS^~yR_~PnyjahAl?LyoD#4yoC%4yy]Vc    r  PD   3#7!>323!654'&#"sS}G.lUk!ty_TjCl=JyF0,4     ED  !  %26654'&" '&547 ! Up2!
1 
t΂^3y^3T c4"_b7"aql@J)kAJ   3V~D  (  3267654'&#"%#7!>32 #"&'!Zjm{-
mj=peD3pnHidF<'SW6!XySQcKWQS   kVRD    #"776! &#"3267Rn{+4M@rG+$>lh$z1 İ<eܹ     r  D   #654'&#"!#7!>32>q Lt#i$I|W38*̵yok	  WD .  3327654&/.5476$ #654#"!"'8qvw3dd"5q{n#Hbu<%)P"'@A!%5V#)<  cq   #73!!!32673#"'&547@b@':@N(A*yJyuY-"VZE,\2A     _'   3!7#"'&547#7!3267^R}G.ly	Xk!t'Ry_TiDl=J+y}C(5T  *  *   )#7!2767#7~uAuʾy{    =  '   6767!###7!3%	99}¿`tfu,{ϴfyH    '   	33!##7!]9;wFyoy  9'    	#7!6'7% #"'732ssL$Yo^+q/+oywlyjZ3+E
    z #  	327#&'&"'7&'&#"763267D!OxSptc OxSptcD@I.yD@I.  % *  #"&'.?6&+7326?>7>;#"3&1U==0.$>gpd5}}G5@py1>$npsyspm%=1x^"^     #      *  3267>7.76&+732;#"+eoe5||J5Aoe&0U>>1.$>^"^x1=%mpsyspn$>1     ?   #"'&'&'&#"5>32326]e_aM``d_eM?VR:BHIWQ9DH     r{ 	    #"&7>2!73NOY%%
nnNOpJ     L     %%#$ %3#6&'>7h~R/{?6y5ff3y4:o9q	Ua^!^kZӝ%#&%~zj   l   #6&#"!!!73!73#736$!25xNTu"4`l,Go6*4Aualyy=y   L = 
 .  264&#"'7.5467'7>327'#"&[\[~|їљ0l=7m9͘ќ.j?:l\]~Ϛ.k@?l.͞Ӛ8o6?i/Ӛ     :   $  373!7!7'!7!#7!##7!#!!!!3Dm#l$KmDyZu;uyy'yy#utNuy       ##
 
    = 5 C  #6&#"#"&'7332676&/.7>7.7>32>76&'/wWaQj	)QymzJ4Sb/v
XjWl	(Rym{J6J2=	Gc4>IeVVJC/B/Hbsh+/ZZRJE/B/Hcrg,.Y!N-=f:X#O*<f;   O)5N    >2#"'&%6762"&Ohx#"33;<$#43xH54xF<V++x,+,,;<++V<;,,X        ' A     $&546"3267>54&'&#"&54632#.#"3267h0llllWVVVy{WVVVVX'OWiiQhwviIbnnn,WWV{zϬVUWVz{VXg%'^j\Y     3 7  7654'&#"3276767#"'&547>7632733!!	8Lz8M<=0->=D#`0)$Β(1sspB,#8$/8-9%8LLE++D8_6B8Y     -    77ұv TѲv -      !#!  T   !!t4     # 5 K  3#'.+3!53#5!2%3264&+  $&546"3267>54&'&'<d<u ;7VVVxcCOUUOC<0llllWVVVy{WVVVVX5)RD+RRRn_Yf$HHnnn,WWV{zϬVUWVz{VX    ?P   !!cv$  dL    2#"&6"32654& Bz0/11-0|DHdcIHde3/0xDCy-03dbcGHd         7!!!!#!5!ff    -   #7>32!73!?>76&#"^&LPd0H@I?grRZ`T{]T_S    5 *  >32#"&'7332676&+732676&#"\@{itgPK&`GOXmQ[)QdAHB^`idH^o]z{POVRPWTD@?FI@  4f   !#Af     @V'   3!7#"&'!#7!3267G{J7U
tXj!t'Ry}SGJXyJ(7T     ;?   !####.76$+qИ0И$%1}Nݸ  
# 	  >32#"NOZONyppo     o     !#"&'732676&'y2%
y0c2*R$<H&@m4VZ/-BD    P 
  73?33Qw㐤^eei}^        !!2676&#" &$ (L_ 'LM] !'XGG?Vn    e s-    	7%7 - .-ABAB  P{'Ud& {     P& {  '   tUd {'Ud& u      n{ 	     #"&7>2#"&76$?332673NOY!i('3(:]xm#x
nnNOp7""+ ^  k& $  rLu^  k& $  pLu^  k& $  sLu^  o& $  qLu^  & $  o"u 7  m 	 $ '   32>&#"73.7>323!73!3!?57\?65z3'uvTDE@ϸgulMMlM-y%yJuuJv(yy1y#; /  [  #  !#73!3!73#7!#7!!73#7!!73jѡK;ʤTrDD)]o%d%uo)D!;y/yyy!    UoK& &   z     0k& (  rxu  0k& (  pxu  0k& (  sxu  0& (  oxu  k& ,  r(u  k& ,  p(u  k& ,  s(u  & ,  ou       %32 +!!73#73#7!   !4?@fL5sf _GFpy+HF*7yP
y   o& 1  qu Uk& 2  ru Uk& 2  pu Uk& 2  su Uo& 2  qu U& 2  ou  /   		'	7	HHHG9HHHH  A! 	  +  	.#"32>' !"&''7&7 !27)t@tEGF& F[IG' FxYIw{LzxNfAe+hdNNZfjMMZ   ak& 8  ru ak& 8  pu ak& 8  su a& 8  ou g  [k& <  p$u       #73#7!#!2#!332676&+1/!M)pypyyyry d{u 7  4&#"#672676$! #"&'332676&/.76$-WDmy)P^'@"FLDP^2yO^LoMW< Q(4Hw=Җ88sКUhY(F:?~lkbXHiw@Ii Ff& D   CX    Ff& D   vX    Ff& D  X    FV& D  X    FN& D   jX    F& D  X     8D 	  6  4#" 76%&#"26763232673 '#"'&5 !2|_i/M*9=D
u$uh{	?Ms*N)zV90?>%M<JGE " ztooU/  EoD& F   z#    Df& H   C    Df& H   v    Df& H      DN& H   j    u  f&    C    u  f&    v    ]  Of&       u  N&    j     !  ,   !  76 32.''%.'7%.#"267>z,5/-z*T)	+%1-_1PhN+H o--9ށ-9m%.?n4d&>nI7g꾼k    r  PV& Q      Ef& R   C    Ef& R   v    Ef& R      EV& R      EN& R   j      {     4632#"&4632#"&!!X=>XX>=XX=>XX>=X=XX=>XXZ>XX>=XX!     '  	4&#"326? !"&''7.7 !27IMn-&JMm.>42oFC34xt>EZXYYHv12VKu)21V _f& X   C    _f& X   v    _f& X      _N& X   j   9f& \   vT     VQ  (  3267654'&#"#7!>32 #"&'!- jm{-
mjz=pfC3pmHidF<'SW6!XxSQcKWQS9N& \   jT   ^  P' qRD $   F& qE D    ^  }'4H $   F5&w  D    ^o'"   $   FoD'    D   UKk& &  pu Ef& F   v    UKk'su &   Ef'    F   UK'wu &   EN'    F   UKk& &  tu Ef& F       k& '  tu l& G  n         0  7654'&#"326!7#"'&547 32!7!7#7!38in{-
mi=pdC3=p9D)icF='SW7"X9SQdKX*QS'x]xx  0P' q>D (   D' q   H    0k'vxu (   D5'    H    0'wxu (   DN'    H  o0'+   (   DoD&<  H      0q& (  tu{ Df& H      U~k'su *   .9Uf'    J   U~k& *  vu .9U5& J      U~'wu *   .9UN'
   J   U~'h *   .9U'4 J    k'su +   E  #k'su K      # '  #73#737#7!#!7#7!#3#3!73!3!7!1$ $R$ $ wwR$yyyyy\yydyf  E  # %  3#737#7!!!>323!654'&#"F +g7S}G-lUk!tgx߉_TjCl=JyF0,4  *o'q(u ,   u  V&        P' q D ,   u  ' qE       k'v(u ,   u  5&      o& ,'     lo& L' o    & ,  w(u  u  '   %3!#7!yyy  V' -   ,   E9' M   L  V6k's6u -  9	f'?    28' 	 .   E2/' 	 N    u  _$   )#7!#7!3!b QrytyyyyX     +l'pv /   E  l'pv O  2+' 	 /   E2'i 	 O    |'no /   E  'n O    ' y  /   E  A' y  O     9   #73'%#7!#%!73$T/= U{06|L-HyuyyNu    I   %3!'7#7!7ė*}l+yy`ixai  l'pv 1   r  P6' v  Q  2'- 	 1   r2PD' 	 Q    k& 1  tu r  Pf& Q        7' Q  ~F   FV *  326764'&#"3!73#7!>32!"'73%aj(z7 cޠX7/.n%a0yyyaUXgdD  9^D +  654'&#"!#7!>32#"&'7326RUk"tR}G. <F,qBIL}+F0,4y_TjCl=Jߣ'$^    UP' qD 2   E' q   R   Uk'vu 2   E5'    R   Uk'xu 2   E7f'    R    V  	  '  %#  !!"$'&7676$3!#7!!73#7!!73==
Zi++oD)]o%d%uo)yy49VLIW:3!     FD  ( 7  32673 ' '&547 ! 6 6'&#"326764'&"s*N*y^3yz"?_^686Gqp)*
()"Gztnnl@J)ppDaNK9UV^	aӗ"_љ    9l'pv 5   r  6' v  U  29'i 	 5   r2D' 	 U    9k& 5  tu r  f& U      l'pv 6  6' v  V   tk's"u 6  Wf&B  V     ot& 6   z   oWD& V   zf   tk& 6  t,ujf& V  B    _oq& z+  7     coq& z  W     _  qk& 7  tJu c>& W  n  `  p   7!!#!#7!!!3!73Lbg-HH-dbLssɉuyyP     q   #73!!!!!32673#"&?#73@b@'6'1:@N(ۂ$1yJyyDVZy    ao'qu 8   _V'    X   aP' qD 8   _' q   X   ak'vu 8   _5'    X   al&   Q _& X    ak'xu 8   _f'    X   _a'  8   o_''Z   X   g  	r& :  s| =  f't   Z   g  [r& <  s+|9f&U  \     g  [& <  o$u  l'pv =  6' v  ]    & =  w.u&@ ]      k& =  t4uf& ]  F    {   #654'&#"#67267#7376$32hpEP^)|P^"UK
9&s3<[88sy  2*  0  #7!!!>32 #"&'!#733267654'&#"J+g4=peD3pjm{-mj$x߉SQcKWQSdF<'SW6!X   <  B  ) 2  ! 2)73"#676327676'&+32676&+sw$nnae +WW%F`b~__FD\_NNxciiyY[fE+>?;;    |     +  3276'&#"#7!67632#"'&'!73#7$ jm>=ZmjA?$8y!"c=TTpfefpDD ߺSSXXWXSSS)()(Sy#x    (  $  32)73!7	32767676'&'"+̉
ye +lkNJf"ucyyHLOK      326&#"7>32 #"&'!73%?jm{Y7mj$)|z=pfpߺʯxSQQSyw     6$!   !"$'332 #"h^zeEEGܕL)__@AoA@  B /  ! '&%$!267632#6'&#"#&'&#"32767hEFz7:)bbf<E+qBILGUUډܕpnKef ~EEP#$^{^]fSS     1\ 0  #  !2767632#6'&#"#6'&#"327679I43nnl
 g<E+qBIL:p
22rRR0/))kLN%LZY&(4TSP#$^{sهBAddgh@@x         <       !  )73"#6763276'&+?_FFoWW%F`bꋉ??ONyY[fE+GE   "    (  !#!#3! '&7676767676;+"3-H+ 
̄{ilMOLuyyiiޤcu"uOOLH    +  76'&#"3276#3!7#"'&7632!#!$ jm>=Zmj?Aח =TTpeffpDDc"!y8PiSSXW6XXSSwyS()
()S    O3D ' 3  %#"'&'7332?676# '&76 "276&Ñ!dyuo)p'9kxI&.	 偂f233ppA?dAAb6)^E?$!.0#XY`` _``a    B   )3!!#3!!#!#3D)uy%d%])D>`\`y    V  "  '&#"#676! !  7!32764MKܕonLhzEFF}6CD|x>SSqpjU熢    2 0  476$!2#654& !3# 3273# '&547%$u#FZ:yh+=4Bh(<Cm	D3"&Fbw'!O0DxX{C8TioW*/^>3 VN    "'7332767#7!#7!!73#7!-^!a56'3E*]{%e%3VD	KK+y!Dn^    { 1  #674'&#"!!#"'&'7332767#73767632hpEP//"UOOK-pEP//"UOOK
9&:9y5\[	
9&9:y[\
	    B 4  67632#6'&#"#&'&#"3267#7!# '&%$!27Ybf<F,qBILGXX苋BAIITBPoFGI>EP#$^{XY&&xN&&hi    D     !276	#7!##7!# ! 76{w|9%70&Sryyjyyý     F 0  72676'&'73# 6'&#"!#7!>32,e$NOEDk`stzEAUkAA"t }R}IG(Z๡`y,@lccIC#$_R34NOx}_Tji          #7!#3#"'&ʿ _ jQyy<=cN       #73#73#7!#3#31sf fsyP
yyy       !  	3!3!73#7!#672#6'&$?v  j㡍4JBF,qAh4[yyyyy!w	
P$&     F  .    !67632#6'&#"#7!3!P <F,qBI&& PsydʣSTP$#/1ycyyy         %3!#73#7!3#]yyyDxDy    %  %3!733!735'&'&'"#767627P{qv]u**.<'XA*)q+N;G(\+yyyCyyi }%%M
~i   0  %#"&7#7!#3267#7!#3267#7!#3!7#"&G_s)y&(S^`&)R_xPnjayy\hyy\hyyy]Vc    V   7332767#7!#7!#!#"&-^!a55(
?7a	KJ+yyy7hN"   VMD   3#7!>323!6'&#"R}FG'UkAA!uy_Tjj+yX34NO  U 
       !   %276!!'&#"xy[FF|n?*6>*)5>}lddy  T' 2  F
b'V   R   t   ,     !26763 3!736&#" %2#"x\UXS/(0aL/FF@A|@@|^!yy͕,	dyBKLB   {VD    6323!6&"    !2 26&"tsʤ(#mbfy7c4$y{^+)  <    %  !2#!3!73"#676327676'&+||''aWW%F`bep^^<<pwvwxyyY[fE+WVUV   VJ  2  3276'&#"67632#6'&#"67632#"'&'!7$ jm>=Ymj@? <E,qBIM%=TSpfeepDEmHiSSXXWXSSaRSN%$^{S)()(S   ! -  #7!#! 3!.+3!733267654'&+!y]	=bWg1KV=5 ΃*=\yyhP)-4[X`yÓF yyx,%S4K  J 1  %# '&7676?67676'&#"#6763 32673֒х,&rs>=ABpp;@
z},#ml봁>H32uvnn47401]f43GHJ,|{޸cd87+dZrv   /XD 2  %# '&7>?>76'&#"#67632327673Ăcpp#ۘWL11lOOq5mn^hg"YYn,*22lWW%qUV5%>6B"#77m!TULM)%##@F%&>?w     7 ( 3  32673#"'&7#"'&76%6676776'&'&72?1j5('!HEZp,RUkv9%&?-+]`@%+'YQ?7tG9LN[f%T7E,O|.X     9#q $  #73!!!3!#"&'733276?"#"&7@b@'~:( <E,q.BG(%ہ$yJyuDѣPG/-}`  V  q   "#6763!#7!3!73GW%F`bvH-dLI[fE+-yy   S3 )  #73767632#6'&#"!!32673#"'&7  <E+qBF)% ':@Od[A@#ySTP$#/*yuDVZ@AED    V   %!#!#7!327673# '& g.II.d(aL//-^Sde)#uJK,,^""pp   	& 8 Q% b& X     QM "   766'7!!! '&6 7!7y[.9FF9.N:Z.==.G[yVٚ'`Vyyd<hdy      %2 '&#73 !#"'&7#7!#:33-<xpZ*> j-ʿ y5)dZơ}Nyy>=     g     632#6&#"3!73#7!#+a1$BF,q.BJ%ka\{

PG/gyyyy    9;D #  	#"&'7326?#7!#62#6&#&EFs1tC+q5CA]<sevZF,q.BPlubMJGc%5yyuPG         #7!7!!#!!!!73El5+F2(C<h
  z +  7!&'&#"762673!327'&'&"'7!#|RxNptc$|RxNptcNy	DCI.wy	DCI.yf     !"&'332676&+7!#!_))v?yB,SR+FGTy((H~h   .   	7!#7!#"32673# $7676HF+R,B&y?v))Gఢ((yT     `5'   07!#7!#"32673# $7676L:w#5+B'y@v()wնᰢ((yT   >' %  #7!#!3273! 5476$7654B,N5#w:4 q$Pskf+w,ib

v      ) #  #>3 3#!73!?$7!7!676&#"Ux>z(Tk+"U0/|52"lvdB%%}hPbJ\k   '   !"&'332676&#!#7!#7!')v?y}y3E)^H((Hny   `%'    !"&'332676&#!#7!#7!:-(v@ypP8y "Yp54y((HCyߨ5    	q #  !3#!"&'73327676'&+7#73UbCJR/+H~7#q[e#"2,%Ht-qyMU "R"#/0+y   .V{    % 6&#"76!2!#7!+Qp~g"AzQV9
NqU\Xy  1  +   	#+#+  1  '          !7!3!!!!#!7! X^^Y )Y ^^ XS Ѣ     1  +    %#7#2**%   k'?   '  f'@   '   
Ff'@   G V	' -   /  9u' M   /   D9' M   O V' -P   1  9
%' MQ   1   q9' M   Q ^  k& $  tu Ff& D  F     5k& ,  tu u  f&   t   Uk& 2  tu Ef& R      ak& 8  t u _f& X      aJ'   8   _2& X    au& 8     _]& X    av& 8     _^& X    au& 8     _]& X    ]D  ^  J& $      F2& D   h^  J& $     F2& D   a/  [P' q D    8' q      V  (  $.#" 326?!7!7#7!3##   !2
BATCq$;&FF)G Ʊ&&xxxNLhi@A    9UD  ) 4  &#"32673#"&'7#7!6?#"&6 ! 32767@*$=mh$ǿ=w jm2z(z.$M7<R/!t4}*yBz!!yϔ5	\/3N-T   *Sk'tu *9f'    J   k& . tu "  k& N tXu U_& 2    E_D& R  &   U_P&   q{D E_&   q  k't~uy  `f'  T  9f&       ' =   '  ' ]   '   
F' ]   G  /Xl'pv *96' v  J  	 *  326#7!! '&7!3!73#7!#!#7!#^@&E6>IYCfVFw  aRa q>o>x5{kyyyy
yy   V     6&#"76!23!73#7!jP[gv!bZRF@p|j¨2^yyy  mk& 1 ru   f  !  #73#7!>323!736&#"3#YS}(ln0Uk!]y5y_Tyy5i#yfx  7  l   .  !32>&#"!3!73!3!73&'&76767ZuE?57\?65&C*E@ϸDzdQ[#;nlMMlMS#TuJ;yy1yyf<JuTD    Fl   * 5  &#"32677!7#"7676! !"&676732>&#"I9=0$4_]u$Dn,+0,%C..dP]?67[>67[l<J(r{ (#T짧TC7LMlMM/  [l'pv    8f'     Bl'pv  f'     ^  l'yv $   Ef'   D ^  m'uYw $   E5'   D   0l'y<v (   Df'   H    0m'uw (   D5'   H    l'yv ,      i'~     m'u4w ,   D  "&  ^ Ul'yv 2   Df'   R  Um'uw 2   D5'   R   9l'ylv 5   q  f'   U   9m'uw 5   q  5'   U  al'yv 8   ^f'	   X  am'uw 8   ^5'   X  )t'   6  )WD'    V   _)q'   7   c)q'    W   R= &  #>7676%$76'&?676'&eG@Ñ#{-2WM[:7HQ oA>Itw)oCuNka`o+FW7 O? &  "#6 767$76&'"?67676'&qr*p9(u-T`ZH=-uaP02̓'Ur̀^I"q"N_nAqW2iVWj49    k'tu +   D  "k'tzu K   FV "  373#7!>323!7364'&#"3FdܜY7z7yyaUWqpg
yyЙ%a0y   - # . :  %#" 32#7!72'&7#676"%76&#"326.Tp33=pbY.>,V$n'$@in{Y8mi*	),*QSxuS,OND|.Xi6  	  !  67#7 ! 6%&7!" 6%
4KQ4MZN+@!8{?4!6\5zhcksޯ!l}       !  6'7! 6%&767626%n{( ?OO+;/)O74:! ':r;ҋiݸѲ._|f*v I   #7!#!)'6767g5,F^+S=>hAmZbdm     '   37!#!)'67675$w;F+RxE=y9+wmTh[v   ^  'wFu $   EN'   D o0'   (   DoD'   H   UJ& 2     E2& R    UJ& 2     E&& R    U& 2  w{u EN& R      UJ& 2     E2& R    g  [P' qeD <  9& qa \        !  %776'632'#767&1&#7!)@Z >*)u,g2ޙk}^rJI UeOx     D  1  %776'632'#7670'&76&#"!#7!>32!@Z >*)u,g2 1Uk!uR}(ޙk}^rJI UeOiy_T    wq  '  %776%#73!!!632'#767&1&'?[_R@b@'R+(v,gޙk}yJyZZrJI UeO 9'   #7!#"&'73267W <E,q-BIMy\PG^{    '  , 8  326&#"7#" 32#7!>32 #"&'!76&#"326$>jm{Z7mj$D=p33=pcz=pfp]$?in{Z8miߺʯ1SQ,*QSxSQQSyi6    xVD  * 6  >32 #"&'3#" 327!6&#"3267%326&#"E=p32pVn>pe@pbA$@in{Y8mi$w$?jm{Y7mjSQQSHx1SQ+
,QS!6iiʯ    T!    !  '?3733!73!3!;'7#cH`4"T(HE@?S
NZ`+1~Zyy1y3+ŏ   i!   *  '%& !27#&'32673! '	&'&#" NI$p9E	zflI;sKܕLhbUANZ'f )ZJ<T<]m   R   (  # ''7&7 !27#6'3267&#"]JDL*4momIHF,p(k&23o0LyV(V5*P1hxI>   *   #73#73#7!#!!!731sf fLoL-HyP
yy   6!    )73'!#!7#73!B|Id.Hv[Ie5q@yTZuuLZTg(  'CD H  #"'&/&'&'&'327676'&/&'&76%632#6!"326?in#FTY* :q-708 J:;0k4q "93BC)~!"B	Qqn&;>^),
qQ%%*LLD@{I"%5MOR6nb$$JM  9'   3#7!#!6326?#"'&/&5$w;"!B	Rq+K}TX)
y9+wa%$JM;>^,   R   "#7>3!2+3!73!2676&#g"q&EEM'azx\!R" ryyk     CD   2676'&#"#7>;2!E<<g"q&EE||'&b}.SVU"R" vwwE      A   ,  73#7! )73732676&+32676&+!!Ԫu$۾ +/䃬1MkhyƤy}v   7a  %  #7!#!#7!#3# ! 7#73!326 eeeBCd66\yy
yym&UkX   ^     /H    # '  '7!73#7!73#7#3#7#!73!'#%3#!/q':q'D*{od%J)DJ?.5 ^t%Oyys%N\j!     D  , 3 <  654'6'7&'&54776!2732673#"'77&#"32Pp@Rgm,b<S4.+3m,@664fs*NC:!:U_p3#UC{h(y_#W$IfDRe#XJ<5zt	"Gty	   V6   733267#73#7!#3#!"&-<Laj(eeԃ/S^X
yy`"  9&|R !      }V. # 0  !#32673# &?# '&76!2&#"326M(0aL^.^S0IgewxGFTV%d6VWXK6҂͕X^""n[-,hi,-[R    l:D  '  &#"3267#"776! 326?#"&7ArH*$>lh$Bz+5My(IBIq,M< l<eܹ İ`lZGP   8  (  326&+3!.+3!73#73#7! 6y"V43*RV=k krT%}.-X`yÌMyy#xHy     .  D   73#7!>32#6&#"!!!.C$J|W9>q@LtWI$]]yVyok	USfUy!   *  Z     373!73'#7!#!7#7!#3!3!aGGȏkOcyyyyyy 9D' ) /  73#7!!67'7%3# #"'7327)676MPsk))$:C_+q.+oqgsMyVy1yZPyqZ3+E
HD)   D    %327676&#"7!632! 9<1$3`\v$_n+,Ի<J{    TA*    /@  +  %#767676'&7$6763 %$76&#"}di	OB	VU^)0Vc#23 iC>X8mj?R2,^d"wGBlx%:#(^
_XɰR  3  )  326&#"6$32#6&#"67632 #"&'!$>jm{Z7mj$ <E+q-BIL:=STpfpߺʯPG^{Q)(QS   D   6$3   !"&'332676&#"{I 43om:per0/Rk%۶**'πx     _8  .  %76'67 !"'#767&'&776!2#6'&#"> K2*@s,
	12STO4_	12sbf)ޗutHG UeO
	 0@@sx^   P9  .  76&#"326#" 32#7!#32673#"&7a$@in{Y8mi =SUp23=pc(IBHq,M< i6Q(),*QSx}{^GP     '  )  )7#" 326$32#6&#"76&#"326==p33=p; <E+q-BIL$?in{Z8miSQ,*QS*PG^{i6   ED    !76&#" !  !"&'3326?V&/[^o;CW34vs(Xæ,7ݪtz     ]D    326?%!76&#"#6$3  ! )-^[o&<(Xs*N!43ҩwηzt7   R_D 	 6  327676'&#"#6$3 7327#"'&7 ! '&'7=^[87&/,s*N!w&);bYW2_tKB3o<^ŧJTSR%_7[ztv+^*, 0]Qxft؛Vg   36 1  676%$#6'&'";#"7673#"'&76767.z )pB?]{JE0:B=hN4@d0o-Ꮀ!ews,sEP3E)'1-?E.8F5XO6CQ&<9=KDQv  `6 1  #"%73767676'&+7327676'&##76_WK"ͧ -o EZI:L=BOB38{]ORp)m`,[vQDK=9<&QC6OX5F8.E?-1')E3PE  _6 C  #"%73767676'&+7327676'&##76%327#"'&7PXK"ͧ -o EZI:L=BOB38{]ORp)mP'(:cYW2_tKA;QEK=9<&QC6OX5F8.E?-1')E3P:Y+^*, 0]Qx    SD  "  %2676&+732676&#  ! mgU&&FlXV躱=lnT_`I~xL_P:Gfg*7 9'   #7!3##"&'73267#73WZu <E,q-BIMuy1yPG^{\y  9 
 6  #"326?%!"&'73326?#"6763!76$32#6&#"n{Y8mi$,jm2qx'=p2-4 <E,q.BILO6i!!ifySQ,昕PG^{f   19'  '  !#!"&'73326?#"676#"3267,,jm2qw'=p2-Fn{Y8mi$'y`!!ifySQ,昕!`6   TD   6&#"327#7!#  !21
d0/R05:X43nm:ɇ(x;74&(**   f@'  !  !$'&76	#7!63 327676p5G:w)*r9L
&ggMLK<x~8y8+l:'3  4)  %   76#76'$'&&'&#7676766_]Fi1lL[:9r#	`&fjUCWJWzV~X1*NN@   V'   	3!#"&7#7!3267#7 pR}(l1Uk!]'x@_T+yRiy     F  " "  36$32#6&#">323!6&#"F <F,q-BIL<Q}(l0Uk!tʣPG^{^Tyi    r9" .  36$32#6&#"67632#"&'7332676&#"r <E,q.BIL<RYZ}( <E,q.BIL1Uk!tʣPG^{^**ߣPG^{+i    &|  {        '   #7!3#"'&v [AUQ]y8<=c0?     ?'     '!#3!73#-oyyyy5   1  :   6733!#>7#7!x@n~Lo%<n\Tmdy6C=x  L      %3!#"76!2#7!3#673"1#B/Gq%syynxxI   Z9#   3##7!32673#"&7sO(IBHq,M< x	f{^GP  n`x %  !"&'332676&+7!3!#7!!_)(v@y B+O5}`Ty((Hf}yxw    ' *  %#"&7#7!3267#7!3267#7!3!7#"&Y^s)ly')S^gy'*R_gᷗPnja+yhyhyRy]Vc    V' *  %#"&7#7!3267#7!3267#7!3!#"&Z_s(ly')S^fy'*R_fpPnja+yhyhyy@]Vc  9D 1  >32#"&'7332676&#"!6&#"!#7!>32J^s) <F,q.BIL')S^~y'*R_~PnyjaߣPG^{hyohyy]Vc  9|D $  #7!>323!6&#"#"&'733267VR}(k1Uk" <F,q.BILy_Tyi-PG^{  9D "  3#7!>3232673#"&76&#"R}((IBHq,L< 1Uk"ty_T{^GP+i    '   373#7!#7!##3Nagvdgz0}}}V{z   TD 
       !  2767!!6'&"X33y33p@9.i$	"A7+)`VWaS_aR       `, 
 )  %#"3!"$'.7>76$3!#7!373#7#!73T^3/9ot]{שl1CHTW~99W%)=?)%P  E-D  &  32676#" 326?   !"&'# 76 p)0J@014@J|)L1(܎w*U(1((3;rr;|   OL	     !   !#7!   %"!26&#DPP33xC\33qb5{pd6qi+)Wy0q   '   33267#7!3!7#"&,>q@Lt#R#$I|W=US̵yRyok	  D   332767#7!3!7#"&\>q@LtWW##%I|W=USfhydyok	  9' #  33267#7!32673#"&?#7#"&=q
@Lt#R#'IBIq,M< %J|W=US̵y\{^GP}ok	     JXD   #6&#"!#7!>32>q@LtWW#	%J|X3USfh;Vyok	  9D !  #6&#"32673#"&7#7!>32>q@Lt#(IBHq,L< Ϣ%J|X3US̵f{^GP+yok	    r  D   )6$32#6&#" <F,q-BI&'PG/1y     |  ED   6&#"#7>32!(IBIq,L< {^GP    H'  $  3!.+3!73#7!2%32676&+Pj^Ey+D-8E{*yfhay	?AyAt'yy5yo@o>Ff    '  $  #!73#7!#3267!#32676&#BE8-RY1MCyabf oy5yy'tAyA?WfF>o    
9D 8  332676&/&'&76$32#6&#"!"'32673#"&7bq	}l;d:;"^{4qtl|
4Oǂ#,.(IBHq,M< Hw}KF@F%*LL!mnEB6>%5c{^GP  7 !  67632#6&#"#"&'732767UJ,p<ES,C8<E,q-BI&:]\NL:;ђeSPG/Ia    9 .  76$32#6&#"#3##"&'73267#73+73A#UJ,p<EQ.02Bu <E,q.BILuB'NL:;yPG^{\yVy   98 !  	326?#"'&76'&#"#7>32&"IBIq,L<c<n.. IEYp-QUkWS/GPSlQjP:LN\n    8 ( 3  #6'&''$76763267632#6&#"%&#&767674n)V+2?&$5UJ,p<EI6D9U"9YO,E8Sޘ%ͧe\NL:Ft7?QX.|   OD   %3#!!7!6&#"#>32@@':@N(ۂ$yyJyDVZ   W9q   #73!!!32673#"&7'AbA''IBIq,M< yJy{^GP   >'  %  #7!3#3!7#"&?#73#7!!3267CZFR}(CZQ&-Xk!XVy1yy_T\yVy1y%k   N' $  !#"&'.7>7!7!2676&'7!qlj`z{FO=; !$Rʩ#. @lICGFDKn@yy๡y     9'   $#7!727676'&'73oDs,eUT$NNEEj`st\Ry3pp`y,@lccIC#$     +  )   !3!"3'&buOAuʾ)Ry{N<  >  '   7!77333!#7	99}¿`dtLf{~1fRyH     D    	3!677 7632'654'&'&#",sNsL%Xo%_,p.+o8AyyZ3+E
       )   !73#7!##7!#37Ayyydyyy   9['   37!#!!332673#"'&?5$w;c)'IBIq,M<gd!y9+w{^GPSR}    I'  "  %#7677!#!367676%32769?5#w:;Tbj&v'%\y9+w
8\*"rUd" `'   !"&'332676&+7!#!_)(v@yB+O5#w:Ty((Hf+w   `' # -   767072676&+7!#!#6'&'&3276,"B
B+O5#w:4_)#
n~hc(`/!f+wTyҷl57M5]U!        \   373326&#"#7>3 #3 t;!rhj+q,fq1,, yy0Wc""y          )73"&76$!2#.#";3oy,-1qX,qbjh!;tyl""cW9        !#2!"&'733267+#Ny,-qX,qbjh!;ty""cW0  Z8   3673# &7>!2#6&"3P?[Fq'EH͠,,3H7'q*[fJ\DFR"  "RFg   V   $  67632"'&2#"   !   
/-65 
Zl @@{@@|xy[FF5''''56L&&BKLBydd      '' 
  +  %327654'&+7327654'&+7 )73#7Zvi;TZOo_p7XwOya_Ldy-6{C%4%+W4*yփE8G:Wy5y   "dD  "  % !";#" ! &7>7.76$K7VXlfV&&C1nl=滱WTP_Lx~I`_֣gf  ' +  6&#"327#7!#  !276$32#6&#"
d0/R059X43nD= <E+q.BILdɇ(x;74&(PG^{      '   3!73!3!73#7!#!#7!NJJ{>]>}yy}yy5yy?yy 8 &|O }      V'   !3!3!7%#7!7TbBs$t'xyy?yX    '   373#7!#!73.xHy5yy    MV  ,  6&#"32673!#" 326$32#6&#"s$@in{Y8mi$ɘm=p33<pED9 <E,q-BIMH6y1SQ,*()Q(PG^{        \ "  373#73326&#"#7>3 #3#3 <7t;!rhj+q,fq1,, &<y4y0Wc""෿yy       "  )73#737"&76$!2#.#";3#3o<&,-1qX,qbjh!;t7<y4y""cWy   '	
  8 @  76&#"3267#" 32#7!63267327#&'&"&'&#"8$?in{Z8mi9=p33=pcoSptcD!~PxRpt= Ovi6ۇSQ,*QSxã@I.wD@I.:AD     M`	
 2 >  3!7#" 32#7!!!"&'332676&+7!76&#"326}=p33<pb`4`))v@yB+O5$@in{Y8mi}ySQ,*QSxwTy((Hf-i6  6I   : >  76&#"326 76!367676#7677#" 32#7!!G$@in{Y8mi)h>;Tbj&J=p33=pcs5i6UF%rw
8\*"SQ,*QSx    a  5q 7  #73!!!30!2676'&/&'&76$32#6&#")"&7@b@'&:bl{e:;"^z4qsl}
3Oǁ#&ۇ#yJyu&F@#"%*LL!mnEB6>%5l     }7 9  #73!!767632#6&#"#"&'732767!32673#"&7@b@UJ,p<ES,C8<E,q-BI&:-~:@N(ۂ$yJ]\NL:;ђeSPG/Ia-uDVZ   ePq . 8  #73!!!327&7 !2#6&#"63 ! '#"&7376'& @b@':UI*3nom9p
dr02+-ѺŚ&)-͌yJyuDW(**هpR@ǁuzAhiz   9# ?  #7376$32#6&#"!>32#"&'7332676&#"!!#07267)#UJ,p<EP_S}( <E,q.BIL1Uk!ta(}P_yNLs_TߣPG^{+i5<[ps   F   +  %!2676'&/.76$32#6&#")#7!*l|ex"^z4ptl}
OGA#Ly&FC "%*!mnEB6 %.UNx     Ft ! )  3#7!633267327#&'&#"&'&#"FoR58tcD"OxS58t=!~Pvx¤@I.wD@I.:BD   D  w   )  #7!####7!##7!####7!#+P[RɟIܞjLRAP[QɟIܞjLQASsJCCuCCsJCCuCC       #7!##7!#D*z*D`C*z+DS^^ VU .  	3!#"'&7#6&#"#7>32332767#7UqR}FF'TO'IB$%q,M<bd nUkAA"\'x@_Tij{^$#PSTy˄75ONy  9 =  %#"'&7#6&#"#7>32332767#7!32673#"&?#DR}EG(TO(I@&$q,M<cd nUkAA!]7(IBHq,M< _Tij{^$#PSTy˄75ONy}{^GP}     l   #7!676323!6'&#"lgMF3;9Qu`=bK8E*(A$C5vsCK,,_   g	 '  >32#6&#"676323!6'&#"g4-,I+/"3:9Rt1/=cK7FRA[^~-(E4;;sCKX_      $  67632#"'&#7!#"'&'7332767	+*53	T35
bHTT'+,-I+/. -,>Dg\./~-(E  9   #6&#"##7!676329#J+1L67;fiO.><Q0.99eDj>       733276?#7!3!7#"'& #I+2K76.}cfj.zP0.99eCDj><  8Q (  733276?#7!32673#"&?#7#"'&8"I+2K76.}d/+-I1-/'.=>P0.99eCgE(-~^[Fj>      ' 5  #!73#7!#32767676?!#32767676/&#9.5]Pu'
r`r

s*%

	

0&
\"((-O!#3'0
$>M*00030#98  '|   676773###7!3>YZ#W$Ozy<XIAQ`eDkcnC    6    #7!>7'?#"'7329IHa0Z8FTy;WGFC\BG[g1{&  otf   otf'      Tq   !67qn|0߿hC7`  Tq   >?!Tm}1߾.C7`   4 
  0&70!3q 4.`7   9   27>'&#72#X7-.6vDC.cdvt'&l&'STTS F   "'&6763"JvDC.cdv6-/tSTTS'&l&'     	Y   327676&#"#7>323!7xNK0"B;I+Z/65HBDcUw6.o44~/+CC     -}   3!73&'&767632#6'&#";bUcD17JI/R%I;B,/KCC[+/~44o.6w  "6   %%!%!F     "   7-7"!e!ʳ  |f   ##eTfD  |~f   33vd|F  f   3#'#"򶤩f 6(f   3%3춤x      3bb?P q  4f v  f C    H@   3bb }9 q-      lx    )3!#˫IG5Il     l/x   !#6Ix  &9`L   &F`L    \RzJ   733##7#7$$   ]y   !7y$$ \5   327673#"&\}01?@}kj5I''''ISR  	)/N   6762"&	43x$#hxF<++++<;XX        6762"'7327>'&#"l.dcDC.dcDn 67-.67-.TSSTTSS7&&'&l&''&    8o     !33267#"&7>}>514'T) 8b*qk
TAJ)-\T4m    V !  76763232673#"'&/&#"DDf%!!(>'$)>nDDf%!!(?'$)>KL/F=LK/F=  *f    3#3#C¢fx  e=   327#"'&7`'(:cYW2_tKA|+^*, 0]Qx   @     #&'&76%#7!653327676*!RQ,%Kd4UH$0:*+*"Bg?Ci< "k    g   3!#7!ZcbHC$C   ( 2  73327676'&/&'&7>32#6'&#"#"&(!J)*TF*)B\f('>CDPJ'&TFP5Z,+^\@C##'$*+Ia^	=&%+,Ne/0      733!'#'#7!ZYZ(K!CC  -}   3!73&'&767632#6'&#";bUcD17JI/R%I;B,/KCC[+/~44o.6w *     !!7!F%vмt        !!7!3F$<4t          !!7!3xF$xhht     w     !!7!3<F$4t     ;     %3!7%t  >E    n/    >?!%>?!n|0߿n|0߿.C7`C7`  pc:$   BE    N`3   |tjY  f C    f v    f    V    P q     M       5    )N    
)N j     yD   2#767676'&#"76h
(<_WK8 7Id m47Q%nn&1&8"#>x     Ff    f        3NNm   p'   D     pf    #!#Ztfxx79'/  _    5   #6'&"#67632A}01?@}kjI''''ISR   @ 	  #6767V^WT*hE+rPP7    '&767632'6H@"$5/AD& !7{ZI	')>61+8B8Y(Bw/.     &'&767632W7kM:;EA"31x./wB(Y8B8+16>)'  - f   !#Dfr C  3v vb   O%   #7373#$bü    %   33##u$㞼  sy q   !7!#Q%b     b   7326764'3#"&7C)8
	tT4a2~1'84'Q&6`*q}=   r   "3"'&67637-.6vDC.cdv&'l'&TSST    73733%%ü        #7!##%%a    %   #73733##$$ü   a   7!$$a 9   #"&'733267P<E+q-BILPfPG^{    9   !32673#"&7bP(IBIq+M<f{^GP Kp"  Kmp j8"       6&#"3267"&7>2V)%&;(&%=mm$32%&23$ccb    +)r 
  >?3,V^VTp*hE+oOP7o   z     8o        r   3NNm    `r   #!#7%JvJ%x ;r   #"'#"&7327676732767y2!$^)E]eO~JF%JM#3HHszvv  bTr  ;trl=   <8s   #6'&"#67632}01?@}kj<I''''ISR  w9te  Mr qtf      B              aW )  &'&#"#7676763232767673#"'aXO<nCAredcaXO<nCAred`B$! &KH.)9B$! &KH.)9 4X   7!4yy fX   7!f:yy h .   '-C3gV   M!   '
ICINZZ    [3   27>'&#72#z7-.6vDC.cdv&'l'&TSST _   73!3~%JJ%̼x 4Vs    37!-- o>pn=    y;Kr   67632632#6'"#676'"z2!$^)E]eO~JF$JM#;3HHsz   &<   '7'77kZZkZppoppop )   "+72676/&'&7>3=M%=M%e$&6"5YUd%!5"YU    :  '         )AN     #Km   #"'$#"7>323276K#|Wc+3X)cmgE@LebF@Lr   	+m    #&'& #67$$d$tMmlnww@l     "   v  i'#    $     !73#!!!#3i}}iyV!-y  F  ?'   !!#3!73#FccLL*yy5|     otf   3pt  EV H   %#ĢH    4   33!73##7!Т \zyy\yy   h  p'   3#7!33!h~~VzwSzw W 	  ?3?K+56g2߂]    -D?   ED& F   yR -D&?   y zR   V6 -   4f   !#Af   O)& j    ^  f' 
     
# y   W  f'   t     W  	?f'   z     W  lf'   z     Wf'      W  Af'          f'   "0   !]&2     ^   $    B %     %   #73#7!#7!313D)yy-y     ]    )3!]Nd)     0 (     =     +    U   "  !#3!73#2#"   !   
%d$ $d@@{@@|xy[FF5BKLBydd   ,    8 .   ^     73!7333!73Dz=(Eyyy\yy   	 0     1          73!3!#!##3!73#7M{RNR{rD{RR{%{d{%%{d{%ZZ   U 2         3        #	!#7!	!73>)@{%3f{R*Z  _  q 7   g  [ <    U    & /  67676'&'3!737&'&776?#7!#%52t--H. 숸02 눻2062s--G N2rr1yyYne$\yy\$en|61rr2     w ;       /  3!#"3!737$'&6+7!2#7!#676}6:$f["971 1Ym69%Zf$<6/K$f v/x1ywiyyi~%y_-eyy7      !  %!73!76  !3!&7    qN<#&49:2f&"<O۶+>w>+θ} 0
'5 5}\A<}   'ou   g  ['ou   Tf&*       3f&.       VMf&0        !f&2       &>       TA  ,  6737'&'# 766'&7676di	OC	WU^ئ0Vc23=] iC=Ymj?Q3,_c"wBmy$:"),+
`W6XYR   V'  -  %327676'&+7327676'&!!"0=Pdq$IB4'8J+6CN2Se{"ccuM)da	Ta^yxDYK0m)\oTS"f  TV'   '&7#7!76'&'73xCtk"euVT
0	0C̸Gwgnk!4fMJ,:   %	 ' 0  &76767632#6'&'&#"3    7626&"!dyuo)p&9kwJ&.	3333qpd5b6^E?$!.0#X+XL   36 H  #6'&'&#";#"32767673#"#&'&7676767'&'&76767632)p&9kwJ&%
*;0=[0+@S.o-~|{h
f	a&U>@qlu$!.05$#1?*G*(=5
#<LO~H?7<`E?  MU   !#! 3 #7276# 67{ y8[)/RGy!4(!yo]Ll&     VMD   3#7!>32!6&#"R}GG(1Uk!uy_TjgXi     T,     !'&"!276  ! =PD;h@KBIJJIAQ6sy{T   !M'   %'&7#7!7.%t+zzf!p|qRy3G    '   )73#7!##7!#3!733^KPs}t9y6xx~yyyy{X       %3!733!73&'&'&7676P{qv]u8S)WA+(q+N;H'PyyyCyy+'%M
	  @V'   !#7!3267#7!3!7#"&'
t+/Xj!\巘G{J7VXynyRy}SG    u  _'   )#7!6767676'&'73Oj8V#	73OER_MyQWmNy9L,;UQwapKq,`  8U )  &'&76%!#!!3#3 #7276#&'&7jQ^M"' y8+00=cC /<xEy!%=G=2V!yCxLbo]Lls8 ED R     '   #73#7!#3!73!3!Py5yyyy5y  V'D    32676&#"%6 #"&'!$?jm{-17mjUqY`e23pnHiHJQS  zUD   % #7276#  !2#6&#"G{!43nom9p
dr0/RTo]Ll&(**ه     V' 
   %266&"   676)Xp2.5.16f3--T Z+Ꞌy  w !d'   #!!327'&7!y8Wt,{pv$%t!ybp|qR   C'   $#7!727676'&'73oDs,cXT,&	ON"CdM`st\Ry3upc~,AX6C#$     V	'  8  %676766'&#"!&'&'&'&767673%6#!kFM2'Al0RQ6s891!#	#M>%,)%W*y2ړ8JCcMDCk-HQ]oY066XA,~fpgnG99NvX6/7 9D 5  %3!73&'&#"#767632#7!#327673#"'&'ws(C$<"#^'533/<>82 gbs@$<"#^'533/<>7jjtkD.)hkklD.)     V' 5  67676767673!&'&'&'&7'&'73
2+KT,'\	<40!CcNT~@TR3s981!!3	O0,(%&'Jep]A,)n+X6;+Y066X~,Ang	     WP' 6  7&'&76767332!327676'&'73''&81!"	$L>%,(+Qx3DbD3wQXT,%	ON"CdMDVJXy6XA,~fpu
\upf~,AX6/7!'7     !N&2   j    CN&>   j    Ef&8   o    Cf&>       WPf&B      g    #73#7!##7!#	%37 j-?,ngthgv$myyy!yy3xU5  T, 	  (  676'&#"'& ! #327676'mimPDC*zuIJ4[[KDf@qiSE/kAxy{^z~s=     f,  %  76#"!3#! '&#7!3276 8*[(G0Uupkv&iqKBHraC?nYA:ny(yݔ]dի      1   %6#6'&3!73&#7aIEAqmka?ZA|>, Wx`T/pyyF y    W  f'K          1&K  ou  MV*   '   !! '&676!27676'&#"5[v13NN31[Hfq'/KKvvoq/'A:-qLq~a^f^a~q   W'  8  !32!327676'&%''&'&'&76767#7!	'>%,(+Qx3DbD3wQXT,%%L CdMDVJXy281!".'
@fpu
\upf=&%X6/7!'7/6X/yy     <9U* B  !'&'47'&76?676'&#676?7673#"&'7376+-'*E,@;k<8L*p9l+M	nn,?<l{
&/4M)p}<E+qB7rrj0>\(dTiO"0B'/0yuh1D(dTlG /C}KP#%     |Y    %2#"!&'& !  "@A|@@|\OOxy\GF\BKLBkh(dИ  zY+D    %26&"!&'& !  {pc5c6PPW34x43~T _d!b)b    |Ur   % #7276# '& !2#.#" T|GEzG큖\q[Llkf@Af   jU !  7673#"3 #7276#  1cp&uFvbTR0.QHy!44mD3g<	edo]Ll&(   $   #73#7!#7!!#7!313D)]?%yyy!y    P %  67632#6&#"!!#"&'733276e!CU.y%<K.K8 ET.y';L.KvbZN9]ywcYN9[     "     )	##7!	33poEy{y?       	#!3'+*̊"|    T    	#6'#&#"#6$3   !7276P VQԩKG,zfbvjBݔ֡oA@__y  3VD   	#&'&'#&'&!7$#66!eKL?=#T2513,9'Gq h   ** 6  '&76?676'&#676?7673'&'4*E,?<l<8L*p9k)Pmo,?<l{&04M)p9h.J0>\(dTiO"0B'//zuh1A(dTlG /C07rr    .R(D  0  32676&#"762#4'&#'&7%6 #"&'$>jm|,17mj&+ʚ_*$q/c]eP!drY`e23pHiOJXO<,:)L-^JHJQS ED F  9 M    U     !326'&#"   !   ?==V0<{b=xy[FFB逡vdd  ED    -D    332767!6!6'&#"#>3  !"&-	hkQD0l '+r+p:}o34LxhWyZd'**ڳ       VQ    UK &     	   #73#7!	!#3!73#3;hRg ޾yy9yyysy      V'   	!3!#!;AC"'Ry oV   V_D  %  73%6 #"&'!!!732676&#")dwqY`e23p@n$?jm{-17mjyeHJQSyppi  	>   UK' yd " &   	&>   y "  0k'rxu    0'oxu    Jv -  !"&'7332?676&#!3!73!#!#7!!2uFAeSP-<La52,Dyy.I
I.]C@Op""^XKW_yyu   k'pdu~    VJ   % 3!   ! #!" !!3'hEE	z&G>g+>K\Nefw    t 6     ,    ['o0uq  V6 -   		 ) 4  '7326#7!#32#!73!#"%3267654&+X,4q>8UaLL+Pi65x^XxX0PK>$yy
 xKq$'޷	yƖ.(]     	 ( 4  #73#7!#!#7!#3 #!73!3%3267654'&+1bRbbLЋM+Qiww+X	2FXyyy
yy
Kq$'iN	ydyy.'^<U      !#7!!23!736&#!3!73!H
H-]'>>zy-`uyy;yy   _k'p6u    k'r0u   O&  dr    #73#7!#!#7!#3!"#74# R fd,6Yyyy-yyyq      $$      #  #73#7!#7!32!'3267654'&+1H-^vzM+	6Oϐyy"xKq$'y/'`7Q    B %        #73#7!#7!31D)yy-y   D 	 "  %3!!326#7!#3#74#!"J6wVlqDX9VyZd,6*>$yyFr   0 (     
 +  #73	#7!##7!##7!#	3!733!73'3}-uu-ѓ ܖYYfy#yyZyyZyy@yyAy8yyyy     m -  3 67654'&!#73 7654'& #6$3  $Ǚ4	0EB4Xx'8&y: :}c5=(	0*_=XxD^8/C{+##`L#';4/6߽      #73#7!#7#7!#3!7331   &yyykyyyyCDy     &  u   _   #73#7!##7!#	3!7331 w-ؓ YyyydyyLyy=u8y K    '7326#7!#3!73!fN,4q>8U65xMPK>$yyyy   	 0     +   U 2        #73#7!#3!73!31 yyyyy-y    3   UK &   _  q 7    O   "'7332?#7!##7!#v.3jF
*"DPKb,ryy"yyb:!  N  K 
 ( 1  3"476 !7#7!#  !3!737  276764&#34ddTp1]
1 @
1* dTo1fd6^A@<F^a15PyyP15eyye G]c~   w ;      #73#7!#!#7!#3#74# RVyYyyy0yyFq       u    7!#3!#7!#3!73!"'&547M#2dD}_Qt\M\yyu&e,AyyyygQv #      
`   #73#7!#!#7!#!#7!#3;yyy0yy0yyy  
   #73#7!#!#7!#!#7!#3#74#VyYyyy0yy0yyFq     U   	   %3267654!#!#3 )73!3w	wH`bh	+i-y-'ruy
*0y  	&   ,         #73#7!#3 !'3267654!#1bh	+w	wyyy
*0y-'  	   3! !7!65 #$!  ! $'gcG[yFAdRoЗYd`   	   -  #73#7!#37$!   ! '&547#3 3264&# 1jQ yx)F|jF]@!\yyy/\hdΓ8=yBBKr      C  &  ;#"73&'&5476$)#3!73#3*=r	fhM
%DkPT4LH,yV#H6v)2yyy#y FD D    PJ # 2  4?67676$%>736   '&%32654'&"P	'hA&_Wh7/T]3|_t
pqS
Q:AX8ɏǈ-Lv@,<j8kAJՎmFM"aKL"_^     DD  " ,  3264&#"%47 !2! &2654&#"nyLge3hڀ:Rmo+'ӆVT!1Q(VoV_t(k    rlE   7476%654#"'6$ 32?!"&ro&qN[u2NwجgQF^bXme)Bf<V   FM  -  32654'&#"%47 326'&#"'63  '&
qpse.]qQ3yTv5@hgKju6dE΂^7"ac7_^@J)L)RTojrl    DD H    
D D  3326764'&"#6$323!367632#&#"2673#"'&547#!# #"'Gv	Z/&$;օ_UbU?֖2v	Z/&$;օ_
aa9֖8/gr[fHvT.hr[e7>
T   1D (  3!2654!#7327>54!"#6$ !"'jq =0M8'";t{Hׅh1#J.JhUŭ<  _' X   _&    stD )  7!767632#&#"327#"'&'&/!W~	bFs)~_%jp*:
H29byQ/P#Py>kXsk/pf[A,I "`  h'   "'732676)3!#"XTF>[abd7hT:{P%x$-IRyXqB[    ('   "'7326#7!!3!!FTFB@v7Q%zzZFI$y|Nuc:]B[   s  b'   7!!!3!!!U]UbaayHRy
 ED R   r  PD Q   3V~D S   ED F   r  D P  9' \    >V   ?  32?'&#"26654#"47 32#7!7632 #"/!#"UR/
R3w1!3w2 UR/	3s"
T l=4 	``;"77 H7:7#BK*GxG AKGG      ' [    D' 4  7!32!326735>54654' '#"&547y3M@tcO8.&t;xI|RR}uly{7H7JT
341p:1%$];vo	P`a/V'_TTRM+       F'   7!3267!3!#"&547?(Ql^BbYpӪ6yN(0OUTRyO_  ' *  %#"&'# 47#7!3267!3267!3!Ղ_slyYX}byXY}bchja?L+yg4h4Ry    D' E  7!3267!3267!326735>54654'#"'#"&'# 47y2BX}by2BY}bO8.&t;xI|MՂ_sly4H24H2
341p:1%$];vo	P`a/V'chja>M+   %E  4   2654&""'7>3232?36  &54?6?"&+ȢTs+PD	(IlEN@{lWa4U`TeUp2jV /_~=zq$x(ت)$&  '  " (  7!632! &54732654&#"!3Wp+bfTTNucy>mq #x >B,p2jZ 7'Ry  '  "  7!632! &54732654&#"Wp+bfTTNuy>mq #x >B,p2jZ 7     FD !  6$!  !"'3!2767!7!64'& ;}Y49q SB2l)"iCN<)hSwU5_J    sD  &  7!36 !   '&547#! 3264'&"]9g^3ygZB
qpS
ykAJՋv !1"a"_    '  '  "'7326?67.54$3!3!#";#"zTD<=Nc6>\VC|`. CXfCb@fsURym.WT3cYo    Df' C      DN' j       >9" #  3#73#7!!!>32 '664&#"FH _P9S}3e8֩4C`@Ayuxy_T48gy
K  rf& vm       ED    47 ! #654& !!32673! '&E3n9pR,lk q[CL
(Helw`Jށji  WD V   E   L   u  N& j      9 M    '  .   2654&" "'72676)6  '&547#"+ȢTu,TFa7hWvmlpT:}N%Yp2jZ xQI>mv kk|>XlB     s'  &   2654&"7!!!6  '&54?!!+ȢTuU]UbWvmlaYp2jZ ZyH>mq #klx
    F  "    3#73#7!!!>3 3!64&#"FI `P9R}'9R$`?Ayuxy_T=JyF\N  stf' v      _f' C     9&  Q =_'' ^    @  x 	 -  3267654!!#!#7654+3 )73#"#!7#{w	r8yR6i
+ȌZ)y8r-'yYj+/y!Y   sE # /  7!7! 6  &547654#" ! 2654&"66)v ZOUe+ȢTvy-!#mq #x[NkUp2j[  	} -  ! '&547#3!73#7!#37$! #! !!! hjjQz&GjgQ'ѕ6;yyyy+ЁwǡmYN   D (  6  #654& !!32673! '&547#!#7!9;W-9pS,lk q[\[SHglw`Jށji*/$y,      
  (  	73>37!23!73&+3!73#"32qWѲacP(  B#vv#B8LRyf⍍fyy&>yyd>y   :,' - 0  ##"&?327676%7!327#"'&&'#!%Up!l2N+U3KWkC!N29bjEwbd[*A[fJl3Aww3lJf[A*2[
   }  - 3  	7!23!73&+3!73#"3!73#7!#67!,racTUP'  B#ww#B8b:4wLR⍍33yy&>yyd>yyyy
<+  
'  - 6  	#7!#!7!327#"'&&'#!#!!327676dO>kC!N29bjC
wbb'f9oJsU3RyyAww3lJf[A)3[
%Qt<AJ     }  	Z #  #7!3#7!#3632#6&#"#3!73ǽ< fw0q6CB14 4my^yyݪ&cJPyy     bV	    !!#7!3#7!3632#6&#"#HS`ud ^](q,IGVyR#xe-'BA*W  U%    FD         547!26!64&" A3$yx#yDA@J}Nu~         7!#632#64'&#"#Ilw0qCB1\yy#Ǫ&)IP\   f  GD   7!#632#64'&#"!fb`](qIHyy`'5*W    k'yu   f  Gf'      <  t 	 %  4!#326767!7#7!#!!3 )73wzw	,,6cr	,.YyyYjQ-3y  d  &  73#7!3#6  &5472654&"dH _@vo+ȢTuuxxmq #x7I,p2jZ 7    I   #73#7!3!319T#yy%R-y   v  X 	  3#7!3!v;ySѷy1VR         #73#73#7!#7!!!31x`D*]Wxyqy'y    rlE )  77654#"'6$ '32?!"&54767<qNƖ;Rv<Sd[u2Nw0RhkMF^bXmer.0Dhi+-)Bf<VYg#/  J% +  3!73#7!#7!!2!"&'7332?676&#{3D)]'FAfSP.<La52,EzyyyC@Op""^XKW_ 9' '  3!73#7!#7!!2#"&'732676&#9JP8y!"6aEF'G<E,q-BILI0Uyy5yߨjlPG^{ui    
 /  #73	#7!##7!##7!#	3#74#!733!73'3}
-uu-ғVyZۖXXfy#yyZyyZyy@FryAy8yyyy   D
D X  733267654'&"#6$323!367632#&#"26735>54654'7#"'&547#!# #"2v	Z/&$;օ_UbU?֖2v	Z/&$2ct;xIX\Ն_
aa9֖7QS/gr[fHvT.hr[sS3:$];vo	P`a/V(f7>
 om&   z    1oD&   z    _   #73#7!##7!#	3#74#!7331 w-ٓVyZXyyydyyLFry=u8y    sDtD :  7!767632#&#"3275>5464'7#"'&'&/!W~dFs)~_%vp*:
H29b*t;xI.byQ/P#Py>kXk/pfP]:$];vo	P`a/L A,I "`    _ #  !#3##7!#	3!733!73#737# G-ؓ Y ypdyyLyy=u8yyp    st 1  3#737#7!!!767632#&#"327#"'&'&/s+gq~	fFs)~_%jp*:
H29byN/P#Pgx߉kXuk/pf[A*I "`   U  l   !##7!#	3!733!73!UHaw-ؓ Y i-`uydyyLyy=u8yy    ,D +  !767632#&#"327#"'&'&/!!,;W~dFs)~_%vp*:
H29byQ/P#P#,=kXk/pf[A,I "`     #73#7!#!#7!#3#74#!73!31 bRb VyZvvyyy
yyFrydy     sD' .  7!!!326735>54654'#"'&4?!!U]UbD8.&t;xI|8&ayH
341p:1%$];vo	P`a/V'
@Y
   	   #73#7!#!#7!#7!3!73!31 bRb	D* vvyyy
y-yydy    s  '   7!!!#7!3!!!V]V9y!TbbyHߨy
 J	 1  !2!"&'7332?676&#!3!73!3!73#7!#'FAfSP.<La52,Ez{  kC@Op""^XKW_yy-yyyy 9' -  !2#"&'732676&+3!73!3!73#7!#aEF'G<E,q-BILI0UHPjlPG^{uiyy5yy5yy UoK&   zo   EoD&   z     _o   !#7!3#74#!73!_HH.dVyZg.`u-Fry    sDD I  3#7!>2>3 326735>54654'#"'&4764'&#"!64'&#"sP^s*[C8.&t;xI|8>YX~yXY~y]Vchja>M-
341p:1%$];vo	P`a/V'
@Y?h4yoh4y   g  [ <    aV'   7!#7!!al+cpujy:4ye%!7  g  Y   7!##7!#!!3!73!7!7g	44	\yy9yyByyX    aV'   7!#7!3#!#737al+cp&77y:4ye%yy7 v    #73	#7!##7!#	3#074#!733lp'_VyZqy;yy\yy5Fry:y   D' *  ##7!3326735>54654'#"/%w]9,8.&t;xIr]y!+41p:1%$];vo	P`a/V'o     -;   !#7#!#7!#3#4#!73#eHSH.bVyd.`u@yyF?y     GD8' :  7!#7#32!326735>54654' '#"&47#G-V-ya3M@tcDC.&t;xI|RR}ulBl{?@7JT
341p:1%$./;vo	P`a/V'_TM+l     u "  7!#3!#7!#3#74#!73!"&547MTdD}VyZ^QM\yyu&emyyFryv #     D' 9  7!3267!326735>54654'#"'&4?#"&547?(Ql^BbD8.&t;xI|3pӪ6yM)0OUT
341p:1%$];vo	P`a/V'
@YO_!   e   #73#7!#!23!736&#!3R1a'>>zyyyyyy;y   E  # K     ,    
k'vu   
5'     J8 1  32!"&'7332?676&#!3!73#7!#3#7!#'FAfSP.<La52,Ez{  a8-kC@Op""^XKW_yyyyyy  9' -  #"&'732676&+3!73#7!##7!#dTDF'G<E,q-BILI0U{c9KhlPG^{uiLyy6xx~yy   J )  %!3!73#7!#!#7!#!"&'7332?6q~w  bRb AfSP.|<La52Uyyyy
yyC@Op""^XKW    9' $  #"&'73267!3!73#7!#!#7!#~<E,q-BILzJ{>]>}}PG^{syy5yy?yy   J #  7!#3!#7!#3!"#3!"&547JMTdD}d,6yV^QM\yyu&emyyyv #     ' #  )!3#'&'&7#7!#3#7!#3/AX7e&D8{;&.R}:9iyyByy      n   !#3!73# o xyy#   }'XH{   F5&w       &{  oFu FN&   jX   /  [    8D     0k'vxu   D5'      VQ   ]D   V'ou   ]N' j       
'oTu   
N' j4     m&  ou 1N&   jc   y  `'T    P&   qD _&   q    &  ou _N&   j    U'ou   EN' j      U_   TD7   U'ou%   TN' j   &   	&  ou FN&   j    OP&   q6D9&   q   O&  o8u9N&   jT    Ok&  x8u9f&  T      u&  ou   FN&   j       #73#7!#7!3#74#1D*VyZyy-Fr  rDlE 2  7476%654#"'6$ 32?5>54654'#"&ro&qN[u2Nt;xIجgQF^bXme)Bf<V3D$;vo	P`a8].2m     	&  ou N&   j   2R    "	D .  ! '&76767.7!2#6'&'&# ;# 32767aihp6ow*p
	89!*;0=+DDRRON|ML~a@$./#1Q1ADE& Vr $  733267! '7326#7!#!"&-<Laj(86w]fN,<r>9U/S^XM^X>$yy"     9i' *  "'732676)3#"&'73267#"XTF>[abf5h <E,qBIMT:~M%MLx$/G\'$^{+XmB.-    
@ +   '7326#7!##7!#	3!733!73	&5x^fN,<q>8Uo'_qLM^X>$yy\yy5yy:yy;    ' #  "'732676)33!##"XTF>[abf5h]9;CT:~M%MLx$/GFyoXmB.-    en 4   kVRD T   g  	 :   =  ' Z     B  %3!"'#".547#7!#327.547>54&'#7!#LD%#-GS؛V :_FQG">/
d'DY2'9<t P<9iyy4ik4>`yy )J9"BFF b:	S`f/0{@Hy!RyyU?)1   k 0  %3!73>323!737>54&#"!2.#!
qœT[[/bjAcH0tE|#^yyy`̀:*^p;L^yy1ZQBeF!DP    r  N & ;  2.+3!73#".547>32>54&#";UEr#g^46 6qʘYpRW\gAfR@1J0!DPyy*bvANׂ7-an>DAS2WO$aDl+=O/  )  m 0  3!737>3232.+3!73>54&#"[[qœTW/Er#g^46 bjAcH0{yy^̀:*^p;LA!DPyy1ZQBeF     3  32>?#7!##".5467#7!#!2.#!>bjAbH0/[8[qēT =E{#
-AQ/h/ZRAeGyy^~6-bo?#`yy!"6'    4lM :  "3!.5467>$3232.#!!32>7>54&ڮx
ݠYEsFWEr#cZu?$Sy̥|)ny'y#C ӋD9uxzٽyU!BRFc66`*y   l\ #  '3#7!#!2.#!!2.#!% <sE|#
-AQ/ E|#
-AQ/yyy!"6'!"6'   lu .  %2.#!73>323!737>54&#"E{#
-AQ/qŒT[[/bjAcH0!"6'y`̀:*^p;L^yy1ZQBeF  	r A O  #".547>;7654.#"3!73>$3232.+!"32P{le|F
wr0`boRChEr^#+5"A:1;8@Bxx<1_Z22up6!;eI*5\{FRyyP9tx= !$7%I{[kGZRIS    # 6  2.+#".5467>;#7!32>7#"Er#h^3Qr˙Z=AT)3K0A`E,nAfQ>'!DP^̀:$Zu D&׀65yRӌS=K)BeF6"]      4 '  %3!73#7!#6323!737>54&#"+ =xqŒT[[/bjAcH0yyyyy*^p;L^yy1ZQBeF    lv   '3#7!#!2.#! #E|#
-AQ/yyy-!"6'  	^ 1  #7!##".5467!3!73#7!#!#32>7i[8[TqƒTQМ <[qbjAcH/yyǸ:*^pC%yyyyy0[PBeF     b , C  "#".54>7!!3>32.32>7654.'@fTQ}f4]PEx+@XY?~sb${

AgJa^;+cv[j<9Yn@!L=|]Fb9\A" DS3]+DnM*UYXKOb;g       m *  #7!#3!73#".5467#7!#32>7y[8[ <<~AqŒTT qbjAcH/yy%yy6)_p C%yy0[PBeF    x   #7.546,7!yx
R4jW"'PlU![iG$R1>N    9e > P  "3!.5467>$327.'#".4>32>54&"3267.x
ݠY4cZ#D#_E3RznFiAC{kj(L;$s-#%6?UK5ibWy'y$D ӋD9ux\O.PV-\,>F9\lCDB=X#'--'    8l ,  3!737>3232.'!73>54&#",[[qŒTEr#dYbjAcH0{yy^̀:*^p;L!BPy1ZQBeF    + 8  &#"3!"&54>7.+7!>3!2654'V;Jdu 
0PH5ai
*IIU4#V|kaZ- +ĺH[T.7	k2/)p\#%yUgFB\?$'r^?B   -  !2.+#".5467#7!#32>7#w Er#h^qƒTbjAbH0ō!DP̀:*^pC%`yy0[PBeF  (L Q  #32>7>54.#!!!!2>54.#"!>32#".547)H#GlJRlI1M`0*ap.cR5 8M-5cS<d~؟Z;hRL]4Szcp	l-WD)4]O$B^=~YR#IpN.H2"CfC`c2*RwMDw]>7UoC%"RiM32ho*/   ?i +  #7!##".5467#".'%3!#3267"[8[qŒTEr#5h^VbjZyy^̀:)_p C%P DPy0[P     p :  %267>=#7!#".54>3'.+7!2%.#"x
ޟWBoM488vRH=D$4_Mh]
&y$D ӋD;xzt̬^2[

y	p줌   5 $  %3!73>323!73>54&#"
3qœT2bjAcH0yyy`̀:*^p;Lyy1ZQBeF     TL 9  "3!.5467>$32##7332>7>54.ݮx
ܡZGxPGkGk49Og

9Vyy$D ӋDA}uoäZ/e8m;@Eǂ3[*DmM*    )   -  3!737>,323!73>54.'3!73[[ Ip ">Y7[[CpV9{yy^̀:,dw4<yy-C1 	yy
'>V9    >lm 3 U  %2.#!!3267>54.54>32>54.#">Er#cZu@%SH<8\v{v\8(T{ݦaNpOV(Ii@Ea;0DRSN<%	!6W@'!BRF'$?a%;E'!AlU@|^8<xv-gqSQ_W(2WvC&1$#4K6AIN%>      0  %3!73>3232.+3!73>54&#"
qœTWEr#g^#6 bjAcH0yyy`̀:*^p;LA!DPyy1ZQBeF    E %  #7!##".5467#7!#32>7qƒTbjAbH0\yỳ:*^pC%`yy0[PBeF     ]l 1  %32.#!737#".546?#7!#32>7#7!#Er#h^,<}AqƒT[8[/bjAcH/ !DPy*^qB%^yy0[QBeFyy  ( K  #3>54./.54>$32!>54.#"#".547)I-Oj>EwW2-Ol?ZU(hjȜ^b#7E!9eM,(LnFg]+7fw`	l!<U6!>W9-D5+:M]j;jW*X](9N0$@YhD2'6!P^l=Iu_D%8lg*/     g $  %3!73>323!737>54&#"
qœT[[/bjAcH0yyy`̀:*^p;L^yy1ZQBeF   ", H Y  !"'>7.547>32#".5467!#32>7>54.654&#"326^0%es}=N[}}ϔR9fUSY/꟏`J=fMZ]8%>T^XidTuPD)g?Z`2(OuMFy_@>Xm<xy=5ih/l*P@'=eG#9Z>!y+!XW}"VQr      p   %3!73#7!#!2.#! <E{#^fyyyyy!DP   P  Z ' 5 C  !#3!737.5467>$?#>54.'>TߜS	#=T1?saM	"=U3Bu`KyJ	5bi<!āEdyyd
6ci>"|@K4V%J`:_&]6W&G\7*`      4 G  #".'%;>32#"&'!2.#!3!7332>7654&#" Er#4g^{rʖX	KkSEx6"Er#h^ 0h_;cP;d^}# DPvyu:0bc,1RjO4!DPyyK9n^$TdX>re   A  (  %2>54&#"".54>7$!2A@[2[M x[2ZN\BKV?T?yN׊wä?M׊xå?    [ / = L  !##".54>3!##"$.54%>54.'>#";	K#A];PrE3Tmss/>Qu	 <U6Gw^Fg1-$
'gy
4I1T6ZBAbF.y=hd5<σ=1fl#_.N!C[< 
2a93"+
   F   DA 	  >?!	v+TЊVm   d   	!cLdx Y%   "#>32>73NxT0iU|VNvR/nU{!3?Th:0@#]c3   >bd   !dx  } +  >32#".5332>54.#""#U9u];Kft6>^@! ' 5&)7GtWu{?8S9D^:9O0$%2)3Z|H    =   3!=9$#k     z' 2  %# 47#7!3267#7!3267#7!3!7#"&R0^bh9ly3<^fy2<`fᷗPn5M1=M+yBc"9/yE91yRy]Vc VnD #  %!3!73#7!>32!654&#";*T]j?GI6Bk!]yyyyy0C,:LwD2?;#   V*D   5  !!3!73#".54>76327!>54&#"3267k_;cV=p]e5"<S1p
	JM7SB4ENh#yyyTP5f_X}.PTy2T#`W']uHr,[T    #V]D '  %!3!73654&#"3!73#7!>32];6Bk!]*T]j?lyyyyD2?;#yy5y0C,:L     r| $  3!7#"&5467#7!!!32>7x)T]j?̘`a6A6UB05y0C,C%yy~D<3'Q|V   VD  1  !!73#".54>76327!>54&#"3267k_V=p]e5"<S1p
	JM7SB4ENh#!yyTP5f_X}.PTy2T#`W']uHr,[T        !!!73#7!l# `'yyy"y VD $  !73#7!>323!73>54&#"*U]i?ln:?k!yyy0D+:Lyy5#;D6y    VrB  H  32>7#""3!73#7!>323##".54>;>54.(	U#F?6+(#$RSPD15{IfY#zh_h79ro?e{-"j+X_)Ed"5H]9yyyy1D*0hv/yo29W<Ec<bzE   :|  ,  !#".547>;#7!#"32>7|NvgIwH`6TA4CJ4SA3'ylՌC3fi;I͇Ctyy*`tN}3d]Nl    |VA #  73#7!>323!73654&#"3S}*T]j?ln6Bk!Vyy}0C,:Lyy5D2?;yy   VV' 	  !73#7!Vyyy  V5 >  3!7#"&5467>54&#"3!73#7!>3232>7#75)T]j?::?k!S}*U]i?-5B6UB0]'Ry0C,C%+#;D6yyyy}0D+:L?_"<5'Q|Vy    6O  3  #".54>7%!#32>7>54&'#"{lJ_k=R?8\$/VH,TH8
	BI#"HC<ъE8mgުobCI-[1ylQhlQ}x-XU2Y)iH4k    VD !  3!73#".547#7!3267#7!:YPn6jT4Ƙ3;`fyy]V<o[E_yE91y      = $  #73#7!>323!73>54&#"36  }*T]j?ln7Bk!]y#x}0D+:Lyy5#:?<#y   C 8 K  %3!7#"&54>7".'.546?3267!654&'32677)T]j?:aA	)6=E@SJuO?hMC4'(qzv-FsH	RF@P4!7@k!yy0C,dze)
	@)1t?lMq5?E!Al]-0bPz5sX~D<3  #V
D #  !73654&#"3!73#7!>32
6Bk!]*T]j?yyD2?;#yy5y0C,:L+    G+ 3 J  67#73>32#6454.#"3!7#"&54%326?>54.'TrRbIfd>-~!+<uoh.tJQ)T]j?5Bj!"<R03*!ylQ%2?nU?m]0Zy0C,:w?_"<5I9BdF)?y   HK+ E  "3!7#"&5467#7!3267654.54>32#654 "=. & )T]j?lx5Bj!I$No)UPH-~(:'335<H+"#y0C,C%+y?_"<5z'C;679 GtR,  V'   #7!#!732>7B $5)yyy/Q>     Z+ J  "3267#7!3!7#"&5467>7.54>32#654':+0%"C5Bj"\䷗)T]j?L,<'2'Ir)UPH-~-:=<+"`
&08?_"<5yRy0C,C% C>3#0>)Rd8  gVM :  >323!!".54>7654.#"sAUN{T-UsgE#-2%9a}za1J3+OG?N:_B$%Ed>)4QtomowAy(+OQWbqbB9,J5%1    mD $  #73#7!>323!73>54&#"3*U]i?ln;?k!]y5y0D+:Lyy5#:D7#y    VR 2  !".54>7#".54673273w$12WuGDmN*;ABGX3-$AY5=DϐU/-y):|}:5G*0j6VH*F- Z]T	.7     V#' 3  #"&'# &67#7!3267#7!3267#7!3!7YPn^sly3<^gy2<`g]Vchja E'+yBc"9/yE91yyy     VQL 3 O S  .5467>323!!"&54>7654>54.#">>j&D3HjP[~JL}e!.e:>J<hP.3L0;V9,3**Bw]<#G(&HLV4-5cVH4'OxRY|smkn:y<2)LNR/=DV

4aJ,*CR'5H>=(+./c60m|G\.    |D +  654&#"3!73#7!>32!!73>IPk!].Z]a5J^6<az?Rz+*I:,l=5Xh#yy5y5E)(TXa.yyr  zW' #  3!7#"&5467#7!32>7#7W)T]j?ly6B5UB1\'Ry0C,C%+y?_"<5'Q|Vy    qV %  !73#"&5467#7!32>7#7!Y*T]i?lx6A6UB0yy0D+C%+y@`#;3'Q|Vy    wD 8  >323!>54&#"3!7#".547#7!3267#7!$Pn6kT4fy2<`fPn6kT4fy2<`f]V<o[E^yoAb!:1y]V<o[E_yE91y  VxD $  73#7!>323!73>54&#"3M*U]i?ln:?k!Vyy0D+:Lyy5#;D6yy   R9D + ?  #"'7332>?#".54>76327!>54&#"3267nt1qw}RyX:=p]e5"<S1p
	JM7SB3FNh#`px?Ba]$SeyTP5f_X}.PTy2T#`W']uY[U      ' 	  %!73#7!Ayyy5yR     qV :  >323!>54&#"3!73#".547#7!3267#7!Pn6jT4fy3;`YPn6jT4fy3;`]V<o[F^yoAb!:1Hyy]V<o[E_yE91y    VD   7  !!7#73#7!>32#"&'32>7>54&#"ޘ=p]f6"<T2pA

JN6TB3EN5TB1yiiyvyTP6f^X}.PTi3T#`V(^tGr,ZU(V   _,D  *  %2>7>54&#"".546$32o8VD7EP9VD7!I8xDnxD2[T+gS2^Z+gc_Yq9ldc9ldjzU-   +VX 4 A P  #3!73.547!##".54>3654.'>#";J\;ku;X;dPnB/Ql{?d$GiD^gC?#E;-*7?yEo]MoW;yy1Hp\36yly2>`C@gP:%@5@^@'	@h)G7 &3     r` "  !!7#"&5467#7!32>7#71)T]j?̘6A5UB1\'Ry0C,C%y~D<3'Q|Vy  !y  #  7>32#"&54>32#"&54+50>,;!2<+52<-;/?h1$<. :-<.1$;.";+80   F   3267#"&'|9XRH6EWS<   i   * 2 :  %323"+7323"+73#7!7332#67>'&'676'&'kuVuի2y2ĩƵ&;y;;*T->9S9_6E)Lj&iPjFjt\X+64(BE)      " A  654&+"!7#7!>323!374.#!73#7!#!23!,3"9 GA34|;>?H`9}|2%3|y|^{yQc7'}0;&BY2|{+&&?V0:v
z;ii6O3v     :  %376=4.#!73!".5467#"&+7!#3!#7!#323!wn$$-|U\]0F	?^{M^Ar|^{ejkKx/%z4U?/S{|#a||`g1w   yZ| )  32>7654.#!73!3!73#7!#2!݁$/E+}py{yyyU|E]9	
.:5bPF-+2|ȁ9}}6Zu@.Z.    *  L  >54.+";2>7!#!".5&6?>7!#73!3#'7#	DjKlX^jauQ\pK	OpHFM=x=PF<yn^E(1Y*FuT/GmK9d-MiUAzn%I%uJr^I2Gjv wj*E[it;!   }   %3!3!73#7!#3!|=pr{|r|V}}w遁~~-x   y *  >54&+3!73!3!73#7!#!203!g+={z=q|r{yyR{rB:bG(8VT*%-xyń8|}#?X4  x  B  654#%;2>7%#!".547#".546?#7!#3!#!2.63+"oQzazR]2	9aE'z_{@y%G1l2600O98Ue8%HgB%,m5J,||y*~y#     _  A  ;#">54.+3!"$.546?>3!#!23!4bZ=Ms^C44&zu`-h}zTJ~[38B#_^1XyU(F0!6zb#I&h©c7{s+OrF,z       %3!".54?'#7!#3!#3!x6P5u[{&rrxZ3D&||s%8yy       ,  >54&#!7%3!73!".5&67#7!#!2?BET[U}BHd>{]zF搌)>.m$I7Jyz7#=R0,`||iy7H      5  654&#%;267%+".5467!!73#7!#2a.-Ŏ.06NshTSh<	4xovo`vB?*.f1DYQC`V((LnE#pz|;^D!   i  P  ";267654&/#!"&5&676$!37!".54?#7!#3!#!23!=Q4 e07vI^f.7IriL'@/0Q;!w\}	) 	~,?~	h0-J6!0>XKE39?aV'&c%6"}||N
xhoD&}    5  23!7>54&#!!23!73>54.#!3!73#7AeE$})' os_T&}|~
	%ڹ{|=|%B4*7| *Kf;.yyX#I!/#yy{  Xu " \  654.+";2>7##".'+".54?>;232>7!!"HnL=ypeT@	
.@R2n7xtm[Bg'Ith5UE72YUW0|ۣ_+^eԁГO"LkMjO1B*Bh\p>:dUk*^1;wm`F(7`NQuK$*L> / R؆OWiǮg:]^fY7LP*?G8    7  #+"&5467#".54?#7!#3!#;2>7#7!}K}z6M1	yY|$2{%0* 
|^xS|S)rw,/B(%,uzzp(9n4-47N/}    t 4  %3%".4?#".54?#7!#;;#7!#3!z|MoG"(7R6$z\|+%)T|^{{x7.JjE%>/!4xx	u!zx+y     $ 9  >54&++".5467#7!;267#7!#!23!z(xAYltv7Tf9x|.-9`a~nM~B".BoYC-0UwH&3*9=akyy~>#    z
 '  #+".5467#7!#;2>7#7!haLmA|^{$*0&	~bVa4,QsG!yy":9?0C'v    :  654&#!!26737>54.#!73#7!2#%!23!17z0EOFz 3{{xk1FFKV^xE01>K'z z0H0E^93F*7y  ] ! Y  >74.+";2>72>54.'+".546?66$;23!!EiHC~sdR<	(OvM\@|sfT?*ZK1(Cg[	&%%ؙS&"&?gH''??w;]K:fSb3b3bP6_W%C\7&]\.U݈-Z0pPՄ`h!UVP+7F-{     }   ;  >54&+76"?+3!73# 467>3!2>BmP5YJ>9B {ᅏB}yCE"zln8,jBgiJʀc=ae ЗQyy82k:]<sk3p@     =  37>54&#'3!73%".546?#7!#;#7!#!23!x$&(||AiL)/y\y(	%Ҡ|_pr;eJ*1}..:Lyyp<W9yx&3(xx&@X1~   #  %3>54&+"3!73 ;23!z#$.(%{{7(	}xRu(7- McyyG (X1y      %3!"&5&67#7!#3!#7!#3!.~z\	e|^{l40f|_}}x7?#xxE:N\%xx+y     e @  ##!".54?>73!2>7!".5467#7!#3!#7!}fNFlB&*@SZ_,o--.%	^k:;z\{C	"Qo{`L=t[7*Kf<?CC<2'9O"9J)=eL2zz!4)
z    $  !23!73>54.#3!73#7!THxU/	}	$zz;y[Ms6\zD*+]yy81%7yyxx     O  %#".5&6?66$;3!72>54.+"32>?#7!#3!-m\<[/':W4xvlS1	&AV1WDxjV?!
	#HpM[>xl]F+*1|l|.L7 IԌ,X1ߺe2J`wG)-||) +fY<:cL(W-V[$9FE<Ãx       D  ";2>7>54.#'+".5476$)#7!#!23!:YA(	R8>91'~w}^n]k:	L$6
o|bnB.[G,c~05H*7GY&Fc=G#d`/,QrG&)d
zz>dH<"/~  !  A  654.#!!2>737654.#%3!73#7!2#!!23!$0b@!?3#ez%}|x=xHc;3
S~TQ*3Vc6#~	!1!,!xx{%<K&/WC)4M2	}     _ G  +".546?>3;2>?>54.#!#7!#3!!32RuJxnʛ\bR6C	J'UTN?,$A]9y!/~Kvc	I}fN6.TvI^IgBQ"jO, !am 6GLN#L%;sZ7zzxZ;nc)-     )  %37>54&#!73#7!#!#7!#3!!23!| :<||`|wxz_xLN&~w3>~xx6xx{cdy      O  >54&+3267!+3!73!"3!73>7!!".546?#7!#3!2/EHpdcfZwo}n2B.!9z{KRtcpT`W(y_{#</dq=7 BN[[QtI"xy6cPyy]XpA9-	xx	;_E   -  #+".5467!!73#7!#;2>7#7!Z^bn;،}r}|693-#
}bTrG@bC#k|yy#7CG#;P-Y|   "  37654&#!3!73#7!#!23!}2)'}|=|`|+,sh0#}VH)2!rxyyy BeE<"|   S~ R  +".5467#7!#;2>?654.'.54?>3!!7#WLpSp̛\;v;k)(E_8fTmL	+QtIXY-	WT@&3):$=yjO.D|lX?"DrP{}?iB?ufA*&<dRB7@Q9#-V@Y8Ա3/)-7FYnE1      #  %3!".5467#7!#3!#7!#3!{~pj3;|]x7,0:|`~~xM.RB-!.:Ayy,z  H   %3!73!73#7!#!#7!#3!yz{r{]zrYr{`}r}xyy8xxxx    $ T  >54.#!!2>7";2>7!+".54?6$!3#7!2#%!#3!> 3$U;8,D<5'4$- 0&OiHdn\p?	%BѢvņEZ{5e~C
+ q,7~+>(/-5!;R2|Qe9#HnJ%,tz2XE#3TrE~ |\  )  9 A  #".5467>732>7>54.'.54?!'!dOe9
?`U'B1-=#6UB3	 ( 
&9-sn6&LqK=">qaR
#7P7(=(.SrD 7%>2(/7@'*6ZX9*#3)!8FW57   I   ; T  #".547>7>54.'.546?!>74&#"32>7$|ic0_Ր/''9',XF,=LG]B0!"7)BY?,B՘T:fR\h]n*E!(5#$,6!0203RwQ-g?S3@E8g[L6 3$:aH    4  P  %654&#"32>%".5467>7>54&#".54>32JNHoYE[f>bN?i"خzB	
WzKpR6 *0)5%
	-*BɆO^4Gb:,kO[f([j.O!TT MuxJ6aS@!c_":AF@8%('4D.CiA$?X4jI>[{L8     7=r  p  >54&#"32>7>54.#"'>7.54>32>32#".547>73.#"b-76Q@9>D0B3,
Hn84@U<"ADK,0[G+)Pul7P:)N[X`3!{m_h6!,:' &0!4O@5u.b^S?%	8]%38"TlCe%@5FvZ$4W>"(F9*!#PdSTe:'1:-WRYjuE8aL<A4YQL&	/]XWL>-28HZ9;   3s D  %#".547>73267654.#".5467>32thk7EYed\$C>+FJh{#'6 $D:-&,/E-uZnz@>eD,,@eL6$dIhKD@|7+ ')@,2;HO%hZ)8@ 4s _  %#".547>732>?>54&+732>7654&#".547>32!`fwA^Y!4( ZZ)F;.'B22+;=90BB,PB4)*:O1khOrEK`m5"A4 rt;1XyH*-RrM.g0<J.A*E1$C^:#;F90N9c8=)'E6%2DL!S`4 CfE(-JqT<6ER0'+      . h  >54&#"32>>54.#"32>%#"&5467>7.547>32>3"#*1/,&#3,( 2#1XLA* CcI8g,x(c5T; oJOsK#
)2x&`tO@5L?;"(?,1/M,/9\Bc1,.VA5e/*I4Cu[)Y*"<-3`lٍC,b7J5L^5-5oa-)Ic: E$;<<K^6(B18CT4R   G  r  S  >54&#"32>%>32>32+732>54&#"3#".548E:1UJB@C.UNFL)i_3'YULWc5#(\22++SK?/==!.9
'y]f5;Jr,VI([lV~/J?*]oՊCC:.!*UW_~֐JCm4J=$! @"&S3ՒK2_W_    H  s .  #7>?>54&#"#.54>32w2ܧ"#70-%EI3M@=$!%"<?4^]^f5Rp|	 DoY^-D4ToXt%&'|Kjmǭc73^   k3Cs Q  %#".54>732>?>74&#!72>7>54&#">32&iH|P0Pipp0!C6#);'CZA0	/'_a^N7
&0,=+$D9+8cR<dH(q1&OxQKwZB.lG[o@ )	*W\1*R$/=#1;C$!	(	wkJpYI"<]t=/+    F=~   #72>7>74.#"!7>?>54&#"!7>?>54&#" #654.'.#'>7#.547>32>32>32`y|/,(SNF%#>4,$/=<(B6(	MH(E9+MuH#8ED<QfE0+JO^@cTF@aB"*\&I?2"SWT"$D<.E[Jd;Y{]? 2dd;U%	"G=P"*CD+H,S-4)+G4U!20BD'%(Q'8'.J_a\"TF]vI*-$;1'+C.0<%n@<3r,)8! ;.,="EUCnR%T    F    L  >54.#"32>%#".54>32>54&#".547>32>*8!2SE:GG<VC6L'akl6<gP8l)kS`*J;+6! oNZ-08	-ZZQz-QB&T-o/4bVh^3%y/4 5("30j. R{R*z~5?    P    Q  >54&#"3267%#".547>3232>7#".#">32V98/b[Q'7#^*q(s\g7Yz]9G84$>HQ-.#Ydo9!4*##$!k$LG?Uh;FCh*JD*_lNp))4
lٕM(QwPKXqg],".P*\M1$+H6
+VXS    Ps ^  #.#7>7>54&#"!7>?654&#"#.54>32>32XyN#0'#7@K-'nC+8)OD7	'*KA2K9-&	
%$4V>#2[|V3R>+$V`k;Q|U,MAy%
%4$F_;Aq,09 >[;D0BB)I*D6,HJ5]J"?+J:(}Rf{Ic`53D'(E24^OX  & & S  #".54>732>7>74&+732>7654.54?3qx{op9Oh%BO>T;)LNq,!4* 2KXK2?`n`?#<MUU&0Q;!nI2Uq?Ru\ {+25+L CL-RsFGq,VN6K,,8(!-A4 )02%!%9U@9aP@1#4J_=E 3'q I  32>73#".547>732>7#'72>54&#Q@3tsjT7(r_tB
Qzm$5'EX8YF4BJ"$/Sa@1#EH#"'Ѝ:.QnA%"NoL/b3:F-%05'JjCtB008_D&3$6?/>  X j  ">32>32#72>7>54&#"!7>?>54.#"3#.547>7>73:M65z93Q?,#PW^1T`4em4>^K>#*6FG@
"*
 (`6[N4>_@"Gm*hlhV:	+D`T/Ql=)0B&&B0/YSVcY')ZhW65<<dIH!#+.BD'L(H":(7!oSif^vGRKG!	!!GRTD+      L  #".5&7654&#"#7>3232>7>54.54>7"hX`2	,83PmEu}/j=SA6 	G{)3)0)p}B5_MEM4)"+M9!jg8H§^Ej#8"3("$*Wdf*!!98:AK."    4  #   654&#">654&'32>#".547>7732>7332>7>4'#"&547>73.54>32#v,,)4(s!9)% +'/ިωD Su^)stc/-5ynT;$>O8)D EiJh}b,DT_1mp	.SG<28_|Dsv0TAY]0		&.$!?#C-038pQlhqXL'29y?RB_=PH}r3 5'SG 28C/#L);cG(WJ@DE$&TI    x3s w  %+".54>7;2>7>54.#"!7>?>54&#"#".546?!32>32>32sxkAoGHx!7/(87`9V?*+) '
 )?=F1,N:#	/$:I 45:ER31'
:BJ'@iK*6kP2\P[sOa6H]<3+?PEeo*, )(F 
DB/2/$)"8W<.H36`&!2LXL2 ))7YA#P/  k3s    >54&#"32>#".54>732>?654&+732>7>54&#"3#".54>32>32596N<.7A3I9-|x22Zc<ju/WH6"',$&#(B:5/6+,/N`nv{=\`21XzW"KH?(TPFYb4	
UmE-L8 Ba#9-&KqJ>b&99%Lvar>,J`41231-=F7P2v<&)(%Te2P10?)7`fC'3Z{HPqQ-+*.TvHA"YbC#2D.*    3 A  %#".54>732>7654&#".54>32'%3qwhw@SiFQ	WQ<U>*VXIB.,!&D]n{@3O?25ؽ`J3\M`tKi)` 7NF(Hf>-3E2XF#"[09maR<!І̔   ,>s l  '>7>54&#"!7>?>54&#"!654.#"'>7.5467>32>32\ҍH\?+3:0WH5#+QO0K<1XH4plbI+<Yg+!STO?e5^H*
#{n4WD2'aim3W_2V}<)GSkM<]#65.L6#+&BB&K*)>3'MrL:;g:&?@EVmG#L-<2OrJ#";M+;D$[nJ#H'|m12B%$A2'MoH!I    u3r D  % !".547>732>7#".547>7332>7!G`yFQwe!	 3&7XE2k.p9Vf9DhcJnO3(.)UI8D8&Fa;NpM.n'3=")#AZ8~1XyG26Mq^V13_\]13Y&9C2G,     _    j  >54&#"32>#".54>32654&#"#7654.#".5467>32>32\ND7TA3;E":51/0>}{c_-6_Y<g#*#&77 -6U9O1Rht8,F6%IMM"=eG'E0T#[^2[MJ3IS
7YbOAnR^_45%7/3',#39=?Lh>,89,1S?'_:  F  >54&#">32+732>7>54&#"!>32#$#++)'O7BN1Qb7\t~2*,.IRS 07/`T>wjhKnH$6\|E8CD#+=bG0ZQHN[nN)4lp>j-BK!:O/2-lj54H,DiR?      3~r i  %#".54?>732>7332>54&+732>7654&'.5473#VuHqs;!..=HLM$L]f0M*'XVM'?[B.]$*@,U`4;6W-+$ ,

"<0&UeO*bU8MmU:Bwbft-ejje[%+6>!( jBg5V>!J~^Uf+G5-D'+0 "!'	$/<'/bYJ/EbC0     A  w  ;  654&#"32>%#"&547>32>74.#72;!MI*LC9@F.RJ@_"v&H`vFNw&i %'Hc;vaiz;gSP|/JFNdzGeE|jN,8-v1#)(KnE.   (*  {  >54&#">'>7>54&#"#7654&#">32#>7>7>7>32>32c(*1aR>
ToW/G]9@!0)66*')"HhK~[3`BqW:
&!Xxd$:,
;EN+x&E4;%?T`xxd L*HDC$L.,.

+M=:JTOC<G-QsE89caCs_H%QPKEpe_hxK m7us9"++!IL&    4    .#"32>7#".547>732>54.54?#".54>32>54&''>73%#%%	 "
387'&-&Phy@\n>dO%6+"KD7U=)
,EFE6Q62GVd6?;61<6302\ZZ1+G1?F@+,B$$,' !,+".G>8<E,+1UgH/3^P>BCnR4
_<Nb<(CF(ARUO0QKI)+0s')AP'!NLG6 %0[c?RVfp4$BVvYCyrm7Qa1U       T  32>7>4.#"#".547654&#"#7>32>7>7	<=C^A*L(,ZP>.tY[.#7%8QmH.I3R>(XwLE_>$
=tZ6$?BG4P8&JD:+ :S4@6`PW`

Æ>Y9&C3)iC	PwZA*.43\W'V    A3s   %#".'##".54?32>54&#"'>7.#".54>32>7654&#".54>323267654.'7BG`r=Ar]GN3	+\L1ag3ZC'	6"(SD,0,"t\'%85GpAdV,	8|mU' w>\j+3W>#=d8"+@3(>dG'\*a=)EY2P}W.-B,!5	)$/TC7E#-D}sk2{[$#2 #89z<Ec;<ri/?S:
	
Q!,:U8-D.KoUA72MSQ@'(9
/7@%  (  j l  #".54>732>7>54&#2>54&#2>7>54.'.5473323d dQR/cj$fX4L9*)J<;+.Mv+,'%>/RV-"*r,	?Ve.#H:$9]x?&E5 qm5FsWJp\#Y%5G1-RO>_A6R;+[=:Z?4/XS
4*!	
7/$5-B*'25.&&08 0RD5?GK$     7      >54&#">32>7>74.'73#!".54676>3232>7>54&#"32>7>54.#"U#0*'4Q=,/)gZQ:DYc*2+5Qa,3+-atA7wj4H+ToI.B'=U8N
'#!#HoKA#3J,"3<Ch*'=5-JF`yJ1&MF<+25BA;-5="Fx^1tEB0&a<UpM4X-2;	+6-RN<)0$9 @s  F  654&#";2>".'3267.54>323267D+BA1RG<"!KPQQ{kf;XPN)U'-H[T;fSTk>	HiZ4*!U6sJB-Mbd5/?&)i`!4A !@4$Mgi{U-5aU F%Ut3    3) W  2>7#".54>732>73##".54>732>?>74&+7q0ok]/qqe"Oj>1A%?B	( Auok6-tCllq`n<Nm
30(
<I&LD8=	;DP+-9Zq9+,L;2UKBZ3^/;X:ڐX3a57chv@9aG]sNf;KQ#P;>G1S>&B>G    3 r  %#".547>732>7>54'>54.'.547>32>54.#"3$}xth/V}e/*(PL9Q<*K

`=A9R-F0 5D#0_K.jKE|]6!4$'UF-+GY.?|c=0TsC$=-7~CBg=))R{Y:m&<XBJ1H@0Sp@
#:r$E)BV1+9'#5M9.7UxM#?hM7")8!6O2+8$	4N<Ar[C.;H,3  #   / ? S  '#37'##".547>$?.54>3237"32>7654.#"7e~B^{nx?2Hfld/EZkh?TX <2$G=_r6e,?%.L>08IUi<*NmD)2a`6	#DhHmK!A_=9H:[=0 G8	%=)8B"
f

2P  ?33  k  >54.#"32>".547>32>7>32#"&'#732>7>54.#"3%4>;3z	/<'FBB^cr>$+m"l6?Z_&!6w9We70u9c+&_Ʉ,,3&GEE#*;$?X}+-3#F>O #-U?$Q^`و>\yL*O$)t&QX0n@߈:ZY-!:/#&,U|Qw-/;!  4 X  #".547>7>54.#".54>3232>7>54&'7QTpDWP_L[3'3Q`	'2$C`xOE}]7aI<}lQX_1bT@avN}`E-4cY4>n|_*"=J^B!*ER	*Z3$TRM:#?`A-6FueW'!IWh>V?TU#A];AU" <&sEd%   3s F  !32>7654.'3#"&'32>7>54'7#"&547D	*:#+A3,$32XwN<]!p	KU0H4#	:2 1VwR^6 #;+GrTU;)B;:":jLv`C%u/@C'?. :0$8*7fXG3Xl     83}  R  32>7654&#">3232>54'7#".54>7.546IMHs\I^g>cO?SnHl{CYyi_-=6.P<""bKA-XpP~W/3aYAx]7tkNU]-akWDXY,ZXPrX=3^R;BQw4.\XS$..#:-' 3G-DsU0#=T05c[Q$D`~M>   Vrs I  7>54.#"%>54&#"'>3.547>32Px^+" 5(-XM?3I,!8'/8BJF:%<R2,J5{v[q@9lf`- [dd*-"?fJ5T#2G82?Qf>&C_ 6% 8K+7.FRa69Afn9.TuG/    Y  ! 5  >32#"&'>32#"&'>32#"&'3(7A!9F"8J(3G'7A#7H!9J(2G(8A!/#"9I(5G3%<.<01)2&<.<01&2&'</.&   0 @  ! 5467>323267#".'3&"'"'632>54#"32>-W
	JkO%!	gU#:e-"/ =((	1N4/)̿:!	7\B$

!x)-"Z`3H%:EJ+B2B     '    3!73'!3!73!u$rgq{0-N'Ryyyyyy   ?'  #  #7!!73#7!!73!737!3!73#7!?8y ;yLyK y8"tq{#2>f'ߦΆ{zyyy5yy     X<D 	  6  %326? 32764'&"#"$547%654#"#6$ 632 !"|_i/*p9=D
u$h{?s*N!zV9#蔩>%M<J^G D" ztooU!     '   ,  %32676&+732676&+73#73#7! 3#!PvPOowOPM;3a^yPk]bJHDJRyy1y_8y
Gt    TD    32673#  !2#6&#"`Vr+p:}ofnom:p
drȃ**((**ه      ('    %32676&+73#7!  ![*)g[P22yRy5y      ('    #73#73#7!  !'32676&+3#!DD22[*)g[Dy^y^yyy    '   #7!!73#7!!73!73#78y ;yLyK y8'ߦΆ{zy5y D 2   !"'&'73327676'&+7327676'&'&#6760stYXV`af*t55ulEC:;&&QR//ms,0rpDgGGHGf%]-.43_L>@x>@I`32\|a_   e-    #"'&547>32#7!3!|QO-!OQ-"Qo7*7Oo7)7yRy '   '733267#7!#!"&?.;Laj(ab/S'^Xyy"     '   #73#7!##7!#3!733!{KPs}t9y6xx~yyyy{Xy     '   3737'%#7!#%!73*/>W.0P.xHyրuyyuh     '   #73#7!!#3!73!3!7y3pZ䓑y5y|yuu:y  h  '   #3!73##7!#gV}g'zzzwzz   ED R    "D    &#"#>3  !"&'332`Vr*p:}ofom:perȃ'****'     Tl 	    676&  !  !  Խnh67p\Zrq[[v2?     H+   .7 ! !7>76&#"U'7c5V@gu&8oup~r}zk   |   '  	>76&#;# >7'7>3 a5]j\jUv7VAfXv6V@g|[Ln^[Nm[BD@oPTAAtHV   \D  ( 7  65&#"#6$ 6  ! ' '&73276$&#"26764Os*N!y
^3\z"?%_^686qp)*
()"Gztnnl@JppDaDK9UV^	Iaӗ"_љ    TE  !  676#7 ! 6%&7!"!276x@/0774gDCFCKRuyqnza
y bPE   lD    !  !&"4x4s252)   l    !  !267k33251)       '    3!73#7!2#>&+320Av5гgb&G&fyy5yd      O' % 2  &'&'&7676763!#3!73#"!73>%#"3( YDP|HE8&L;6}Cy3 3->4-f7AnK	5yyyc[y>BWY
 *H><3     O' % 2  .'#7!;#7!#3!"'&'&767676#";Pc^y(
8E)htjZ_"kyfAL,!-3y 	B>y[cyyy5	KnA7J3<>H* 
     q  '   !#7!3!73!q8T8y!  !!ߨyy5  |'   #7!#3267#7!## &7{b&zgV+\l$ٺ(yykoyyշ   h/   !73##!#!2676&#!#ybS4#ybmx%y,?|BXkc  ?hC 	  -  7"&>2"&>32!73##!#!2676&#!#<EgxFi<Eg<;GiybS4#ybmx%yXxTV:<XXxXXxX?~BXkc    t &  #!#!2676&#!!2676&#!!73#\?$ybot|yDot|yEybQ7Js=S^hb>R_hb>n     +  @'   !#7!##7!#bub{yy`yyR     >  s'   #7!####7!#h;}`tZ}Tu';LyyRfyy      '   #7!#!!735$w:%w<y9+w  ' !  	!#!#"%73327676'&+55#w:wOK!Χ -o!E[J9KgK+wIEK=9<&PD7NX5F     3273# 6%7 76#"#763 .2q'rI0o+00q'G2HBxWBW  D #  2 32673#"'#"&'3327.76 '"΃=`r*p:}oӂom:per`]]x"DbR**ZZ**'Rbܰ"    '   #73#7!#7!3!8y!Ty5yߨy     '   3!733!73uqq{0'Ryy`yy    '   #73#7!#3!73!3!Py5yyyy5y   '      ' /  763!#"3!737$'&?6+7!2#7!#676&*H@(&q]oAN'(?I*&4ulm|"Vy`[KyyKZ`yŋH-yy(c   '   "'7327>?#7!#3!73!Y?TE?>'ZW/!"dp"4N}%Vڤyyyy5     7333!73'!3!eM
YH\)tpA#KCCCC-:   }C  #  !#737!3!73#7!#7!373#7#!73%e/x%gH+W;U?UJU+CCCBviiw       $  73#7!2#32676&+32676&+xx-w6SlxWpRZxbwZCBefIVmZztEGHAPSXXV    3 	 % /  32676'&'#73#73#7!23##367676&+c;x1!AEyC6y.EA";&;YoSUYZ,
aD[MDghJ,M7\|v#HIB  ) 	   3276'&+73#7!2#[WVWP21Xxxno,-RSfRSCBij     73#7!#7!373#7#!73xxM+Wt;V?VJV+CBviiw   <L   !73!##33!#7!#3+WJV?V;tW+MxxwMiivBP  6   .#"326?#7!#"&$32ox))\5`*2rSFtnXHd[-maB+*#$    73#7!#!#7!#3!73!3xxy>w=xyxxKKyCBBBBPCCPC    |   73#7!#3xxyyCBBPC    4   7332767#7!##"&R0=!"x[[4f3))qBB$>=      73#7!##7!#3!3xxyCe_~vk\JyCBB,BBNCC    A   73#7!#!73xxyrU.CBBX     73#7!!#3!73#3%wwxxx]xCBBPCCr=C       73#7!#7!##3#xy&rxIxDvxCBBBQC     `   3#3!73##7!b~yyyckfx=DDDD  DD    6,    27676'&#" '&7632yNN)(&'ywPNU&nmXmn-,XYYXCqrqrqrr       !  6767 ! 767&763"276';)+V+qMD:8<XMs|bI^<{N\F`       73#7!2+3327676&+xx0؜=>GR;<LRGCB܃C00OP^   &  3!'.+3!73#7!2%32>'&+6!!W`_46&CyxxML~SXr"&&YR=0CM*CCB9:iVdT)*   <   73!#7!#7!3}W.-U}C͂YC     z   #7!#3267#7!##"'&7xx[#)*"[wHx^*LK)BBe=={BBYQQ    A   ###7!#3#7!#Od\eDJM*p$aVBB;BB    ,     &"32677!7#"&76763$TS& =:InTE{zlz"Y*hP]h5EL\|}l    \     327676&#"7!632'"2$TS&!<:KnTE{zkx"Z)hP]hEK\}}l     5  )  6737'&''"&7676'&7676?BQW2*l;h7>^@dcܪTB*'8$DC'
.58By$W=D!$TTjR51 d.     7  	  6  326?"327>4'&"#"&5476%674#"#> 672 #"N<B$TS&+wJBMx(Hih1)M]z6$ӿS_#+"Z)G(]hSLDAe`?>H0F     Xy  ,  #7!>32#"'&'#32767654'&#"`?M&jG@*
 eeF++	BE''DC((B.-S6R*/RS-J6'!.01~M10.-g  /  +  7654'&#"3276#7#"'&54767632#7(	BEMDB)(z'55G?* dcFW>`:7&".`~N00.-J-S6R)1RR-.B    L 
 (  654'&#"327673#"'&54767632/;:#&WI44h1K4
 rqE1
J..-6mA6X3"!@c^P8X'.QRV;a,2     \    326?%!76&#"#>32#"&C<9FB8WHii1! 㩦t]\k
ArdC?c^     5 2  "&76767&'&7>32#6'&#";#"2673HIvp78Ǯ7<=@I"!JD+*	%%VY33	EHZkHFUM9''''8NU
v34*"#B"#)43DG64     A 1  2#"'&'73327676'&+7327676'&#&#676vp87Ǯ7<=@J"!JD+*	$%WY34	EHYkHGUN8N''9MU
v34)##B"#(53DG55    > ' ;  #"'&'73326?#"'&547>327!654'&#"32767vqCCBEH#%Rgh&55G@* ȎGV>	BENEB()|		2VnB-S6R)1-.KC7&".`~N00.-f   n    #"'&54767632#7!3!b
T32	**14^`?s_
-=+
CC   Vm   ##7!%#733#5߰_>z>QHIBCCC0  r- 1  >323!654'&#"#654'&#"##7!67632c<xHt,	D_L4<SPM4<)*Pt`>378ERZ:69$<"*CWG%
OJWG%
('JCS37     ,  654'&#"##7!>32#"'&'7326Ad6CSIs_>4rNq-	b&*),G	).0g'V^CS4/:&;"(GY\
}4   MS      2767654'&" '&547> R()RR;	 bR;	 55\64j[6tR;\#)R;[$(   2   >32#"&'7332676&#"n/ !ED$F?H]h3WD`>dcJHnqFB      > #6&" b !Rѐij         &73267  !RБij    Y  ,  32767654'&#"'#7!67632#"&'#
CE'&EC((_?&55F@+ deFVE:6'!.01~M10.-^CK.S6R*/RS--    v   #73733#32673#"'&547aa((P
$(2^9:y)CC101X#$&3$      3!7#"'&547#7!32767s_489Oq-	D`?L7D)(ICR4:%<!)1CE%,+_H    G;G   !73##!#!2676&#!#QL7^5"L7}K	YlLU#]EdgU%1<8I  D .  #"'&7#7!32767#7!3267#7!3!7#"&U<xIs-,D`?M4;**@P/L3<T@P.r_2oFRZ;599s1Cl()I!CnPJ!CCR3/6   o 
  #7!73LzJfWCKrCC  #  232673#"'#"&'73327.7>B[~R(<H]G OrFSfFiE FBH<:<OQc{7.IL22LI.7{cO    &  -  327676'&+7327676'&#6#"'2>E		.) #- Y'|,߬.:@O==^VM1@06PU5DC&2VH*t3>Wa0.X9Sv|     eU   '&7#7!676'&'73ϑv)GC]dNIB3 Qz!-rg(C9=r <(s9+* Mm     ! & .  &76767672#6'&'&#"72 &767626&"][Y?KJGF	%CK.	VTT:tE,N8$O74R_&#x1\TSڧS2lkl   Uk  8  6767676'&#"#7&'&'&'&767673676C+0)DQ.-#I#$"POwQ.%7	D^u%1)=/*Z*(-o4>bH1WcII$G9j?:]'  ,AWUX0H   4  3!73'&'&'"#7676727#7!#327673"'&'KvHQ/
&*;"!&($#AH,
&;"!&($<<<"&rH<<?<	&qH ,  X  T     9cu  T   IC  T     oIF  T  &rH  T   eUSI  T   <d    32676&#"%63#"&'#K*CEK&ECN@8^=AŏGW>G;h]cb]G)	RV-/ UkSK  T  dL  T    D - 7  '&'47#7!7267!63232673#"'4#"3 76F-ly	Wk!tcdu	CPs*Nz4|_p32/jDl=J+y}C(6T"Gztoo]& 9D # 6  6$!2#654'&#">32 #"&'!3267654'&#",n#jm2q7<'=pdC3p in{,mi$o!!	\/3ySQdKXQScF='SW7"X     >'   !#3#3!73#73#CEoFC'yyyyfyV   @  '   73#7!3#3#"'&?@CZ [BU,yVy1y<=c0?   3VD  ( 3  73#7!>323##"&'!%!654'&'"!3276KB=peD^]8pnz
nj?=Sqjm>6yVySQd-1yQSy`A5"WSOdF=&SXM  (|'  %  #7!#!#7!#3## &?#73!3267{CCC$ٺ(0&zgV+yyVyyy\\yy%ko    ' , 4  !3#'"&'&'&7#736767!7!!6'&'7!!276q6 uBDkaz{HPx">g !J3
 =&)TN@|JPyg_bJCHFDL`]iyPJ|@yyZfhV}yhpph    9m   %3#"&'73326?##7!W <E,q.BILyy}PG^{}x      *  #7676?6&7667632'&76&#"?BQW2*l;h7>^~ dcܪUB*'8#EC(	.58Cy%W<C USR51 c.   M &  #"'&54767632#654'&#"3267.P9	 tsFEDE$G G^34WCacebQ9[%+QR8$77G1+9GB    b-,  ,  3276#'676!"'#767&'&632#6'&#"[(cV9/c tH
VW>e543";H^>@&T;D
'n'/OO8+TM#$@B|4  6Q	  ,  #"&7>32.''7.'77.#"267>dM"5X= V3-FS$QR~"=R7H"=
(U9

i~ih;i  8 0  "'&733>76'&+7327676'&#"#76763200kCHET	$$XW54	DJ-,IIAB6vp8746GD384)#"B#"*43v
UN8N''9MU   #  267#737>32#654'&#"3##0>2<wcd5d/G,2;wOy?GCIae
}?GKCs!2   |   #7!3##"'&'7326?#73_>tji&**+G	).0^^CCEY\
},4CEC   @  '  !##"&'73326?#"&76767#"3267 _rCEGKQhh&kF~ fd,FM8#EBQC|:8VnB--~TR`a[f        3!#"&7#7!32767#7cG4rOqYD`?T6C));RB<4.tq1CK+,^C    1    3!#737#7!3#67632#"'&D_;`_*_>9`_
**32
	**23CCCC--+       #7!3#"'&J]<W9mu)6eMCxH!"6#    5     '!#3!73#P_e`b_d_CC=CC    Vv   !#3#3!737#737#_*_`,`b_,_`)_CCCCC  n  + 6  67632#"'&#&767232#7!#6'&'&#&76767}
*)41
	**2321SPw_>6E	tT-,+*/zlCr#-1,PE1O  c$   #7!32673#"&7"`>.*-G0X&}BcC4',|
\Y  #~   3#"&'733276?##7!`&S,G	).`_?Y\
|,'DEB        73#7!#373yexydU.CBBA    . 5  >32#"&'7332676'&#"#6&#"##7!>32;yHs,.c&S,G	).0\5;)+OM4<**Os_>2pERZ:69:rGY\
|,'4Cl')IWl:')ICS307  ^ .  #"'&7#7!32767#7!32767#7!3!#"&m<xHt,,D`?L4;*)AP/L4<*(AP/_G3oERZ;59:r1Cn('K!Cm:('K!CB<3/6 ) $  #7!>323!6&#"#"&'733267_?4rNqZD_S6CRZ&S,G	).0CS4/tqCyJ:V^rY\
|,'4C    "  #7!>3232673#"&76&#"s_>4rNqYc.*-H0X&}e6CSICS4/tqGC4',|
\YJ:V^       73#73#73##3VdV4=AVtu?ACEEE_C   VJ 	      &7> 2767!7!6'&"<  b  (($  )#f5/ut/o-45-     S   '  !#7&'&7676?#676'&#:Ma  j33Kb! g+{'g 2?(h#1?ARRA@RR?)55/55    % 8  332676&/.7>32#6&#"#"'32673#"&7\GOQDR%?XcJ<M!GIQDN!2W})(.).G0Y%}`AE)'#'TG`]<<&$!+*Mc^7C4',|
\Y   !  67632#6&#"#"&'7332767cS5d/G&,4*$cS&S+G*.$>`33
}**!F&P7.
|,'(5      "  #73733#;#"&'733276?"&7*aa))O%&S,G	)-SCCL&sY\
|,'E5Ke     `  %  7#7!3#3!7#"&?#737#7!#3267*R19YX,_4qOqYQQ*`?97DQCCCR4.tq2CCCm;W_  R^ )  ##"&'&'&7>7#7!2676'&'7!OgbWC<HJLN~-2xC1&j#O;m(%'%)65<O#C[F6We>>|eY5B[     Lm   #7!#3267#73##"&7_R6OA7l3XR<xCCo<>}CCgvs   t   $7#7!727676'&'73+I`>W`?65Qg12,+C<HIGCu|=>fX5B#GGN<67(%        33!"3'&76zJgf\)JxCuqD    ~" %  	327#&'&#"'7&'&#"7633267FO2Lqpe4PZ$#I?P2Kroe4QZ#$I>d
%PW]$(C	&PW\#(  1    7!#7!!3327673#"'&?1K%p.)G1,,&A?CdB:uC,|
.,[E    G&  "  #767!7!#7!367676'376VK$p%5>fSC`+APP
CdB:K2Sk>;'   5   #"&'7332676&+?!#7!<VJR(MPW`}We)K$p.Css{NR\VYa{dB     VJ     !6'&"!276 &7>32W'
3*(
/*....vIVVIHRRH     f   73!7(  D:f   !!3z(䲤x   f   !7!#@(   bf   #!zR(x  f 	  3#'#3V򰤥򰤥fx     Hf 	  %3#'#Pfx   ^& $     ED& D     B'wu %   1)& E 5KB& %  0   1K)& E m  B& %     1)& E    UoKk&   pu Eof&       'wu '   k& G )5K& '     Kl& G    & '     k& G   o& '     ok& G   & '  s& l& G  f&  0u'S   (   Di'  H    0u'R   (   D#i'  H  0& (  c  DD& H   90& (  c   D9D& H    o0k'vxu   Do5'       %'wTu )  {& I 5 U~& *  u .9U& J      'wu +   D  "& K 5K& +     EK#& K      'ou +   D  "& K 5o& +     Do"& K   ;& +     D;"& K !  9& ,    "9& L     Fu&  ,     u  V'_     8k& .  p.u D  .k& N pduK8& .     DK.& N   8& .  @   D.& N -  K+& /     .K& O  \  K+P&   q D .KP&   qD+& /  e  j& O   +& /  && O  F&  	k& 0  pfu q  f& P     	~'wjp 0   r  N'j   P  K	& 0     rKD& P  =    'wu 1   r  PN& Q    K& 1  ~   rKPD& Q    & 1     qOD& Q Z  & 1   rPD& Q    Uu& 2     ES& R    Uq& 2     E6K& R    Uu& 2     Ei& R    Uu& 2     EDi& R     k& 3  pxu 3V~f& S  ^    'wu 3   3V~N'   S    9'wu 5   q  N& U   K9& 5  a   `KD& U    K9P&   qD `K&   q   9& 5    D& U    t'wu 6  WN&B  V     Kt'   6  KWD'B   V   & 6  }8& V   t& 6    |& V   - Kt'wu  KWN&B      _  q'wDu 7   b& W 5 _Kq& 7     cKq& W  5   ^p& 7 A   -q& W z   _q& 7  &q& W   & Ka& 8     K^'& X %   9a& 8     9^'& X $   a& 8    ^'& X #  au& 8     Q& X    aq& 8     _q& X     l  o& 9 q:u )  V& Y    mK'   9   *K*'O   Y   g  	r'r| :   =  f'   Z   g  	r'p| :   =  f'   Z   g  	& :   jA =  & Z   jh f  	& : | <  N& Z    gP	'S  :   =K''w   Z    w'wIu ;    N& [      w'oIu ;    N& [     g  ['w%| <  9N& \      & =  duf& ]    K& =    Kz& ]  ?  & =  ,  z& ]     D"& K -   b& W 5 <  & Z   9& \     E& D .  {'5A   { (  '?#73767632#654'&#"7#7767=*#UK-pEP^&+)|P//-iy\\9&s]i<[p:9   { '  7367632#654'&#"!!#7767#737,WUK-pEP/)|P//yc<\9&:2yC<[p:9yy   + 2  #"&'332>54&+7#"3!73 )XXyN@y=a5"B+YqoF CiU*bZ:]_%+H1*Ec{\%sCyyV%
4EXQ   %	-  ^K& $     EKD& D Q  ^  b& $  u E& D   ^  o& $  -   F& D   a^  o& $  ,   FT& D   a^  & $  ,   Fx& D   a^  & $  ,   F& D   a^K& $  '  |u EKf& D 'Q    ^  u& $  .   F5& D   ^  u& $  .   F5& D   ^  	)& $  .   F& D   ^  & $  .   FN& D   ^K& $  '  |u EK5& D 'Q    K0& (     DKD& H  I    0b& (  u D& H      0o& (  qdu DV& H      o'W   (   D& H     Jo& (  W   D& H     & (  W   D+x& H     0& (  W   D& H   K0& (  '  u DKf& H  '      b& ,  u D  & L tK& ,     @K& L  o   UK& 2  F   EKD& R     Ub& 2  @u D& R <   Uo& 2     E-& R    Uo& 2     E& R    U<& 2     ELx& R    U& 2     E& R    UK& 2  'M  u DKf& R '     Tk'pub   F
f' v   c   Tk'rub   F
f' C   c   Tb'@ub   F
'<  c   To'qub   F
V'   c   TK'M  b   FK
b'  c   Ka'y   8   K_'& X     ab& 8  su ^& X S   	k'puq   f' v   r   	k'ruq   f' C   r   	b'suq   'S  r   	o'quq   V'   r   K	'y  q   Kb'  r   g  [r& <  r|96' C  \   fKZ& <   9'& \  p   f  Zi& < |9& \     f  Zo& < qu9V& \       *    #73#7!#!73!!1 L-Hyyy-\-   F     %3!#737#7!!7#7!3#3!!101Ϙyyyxxyy   T&*  6    T&*  n    T&*  C    T&*  P    T&*  D   T&*  Q$   T&*  E    T&*  R   ^  &  6   ^  &  np   }  q'  C    q'  P   E&r D     i'   Q ^  &  E   ^  &  Rv   3&.  6t    3&.  n    3&.  Cg    3&.  Pr    3	&.  D    3&.  Q      n'>  6       \',  n     }  	r'B  C    	r'B  P  t  '  D    	'  Q  VM&0  6   VM&0  n    VM&0  C    VM&0  P    Vl&0  D   Vc&0  Q   Vr&0  E    V]&0  R      	'>  6       '2  n     }  'N  C    'T  P  t  
q'  D    
'  Q    	'  El       	'  Rm      !M&2  6     !M&2  n    [ !&2  C    q !&2  P     !&2  D    x !&2  Q     !&2  E     !&2  R      <'J  6       $'2  n     }  :'H  C    @'N  P  t  '  D    '  Q    '
  El       '  Rm     E&8  6    E&8  n    E&8  C    E&8  P    EV&8  D   E@&8  Q    &< 6   "'   n     }	'  C  	'  P  t'O  D  0'  Q  C&>  6    C&>  n    C&>  C    C&>  P    [&>  D   U&>  Q   C&>  E    C&>  R      '  n       
!'  P    	'Z  Q    'p  Rm     WP&B  6   WP&B  n   WP&B  C   WP&B  P   WP&B  D   WP&B  Q   WP&B  E   WP&B  R   &  #&"T 6   h  e'"   n     }  	'"  C    	'"  P  t  '"P  D    e'"  Q    '"  El       +'"\  Rm     Tf&*  b    Tf%   3f&.  b    3f&   VMf&0  b    VMf'    !Mf&2  b     !f(   Ef&8  b    EfE   Cf&>  b    CfF   WPf&B  b   WPfG   TW&       TW&       TW&       TW&       TW&       TW&       TW&       TW&      ^W&  5   ^W&  5    }Wq&  5   Wq&  5  WE&  5S   Wi&  5w   ^W&  5   ^W&  5    VM&  V   VM&  V   VM&  V   VM&  V   Vl&  V   Vc&  V   Vr&  V   V]&  V   W	&  5G   W&  5;   }W&  5W   W&  5]   tW
q&  5   W
&  5   W	&  5   W	&  5   WWP&  @   WWP&  @   WWP&  @   WWP&  @   WWP&  @   WWP&  @   WWP&  @   WWP&  @   &W#&  5   hWe&  5a   }W	&  5   W	&  5   tW&  5   We&  5a   W&  5   W+&  5'   T5&*      T&*   q    TWf&       TWA&  *     TWf&  %     TV&*  7    TWV&  -    ^  }&  H^  P&   qD  f&H bv  ^  f  ^W&  5   6  W      '&767632'6g@"$5/AD& !7{ZI	')>61+8B8Y(Bw/. V  O)& j  7 V VMf'V     VMD'V  0   VMf'V  '   VMV&0  7    VMV'V  <   }  f'  bv     W  f   }  	f'  bv     W  	?f  W&  5	   )'6  bS     T'6  m  mu'7 [6    !5&2       !y&2   q     !&2  `     !]
    !V&2  7     !-&2  8     k&  vu  P&   qD }  f'  bv     W  lf   :'bd  n     T&m  n  fn'7 Tn   C5&>      C&>   q    C&>  `    )  V'&:  6   V'&:  n    CV&>  7    _&>  8    g  [k&  vDu g  [P&   q&D }  f'p  bv     W  Af     R'D  n    O)5'b  j  O)  f C   WWPf'@     WWP''@  B   WWPf'@  G   WP'7B   WWP'@  f   }5f'  bv     Wf   }  f'"  bv       f	  W&"  5   4f v       &'&767632s8lM:<DA"
41x./wB(Y8B8+16>)'   T   !!t4 T    W:   !!.K   V   !!$.   V   !!$.     !! .  )& _   _J     & B   B    Tq   !67qn|0߿hC7`  C`   >?!Cm|1޿C7a   ;?   >?!m|0߿C7`    !   &'&547! 6"
aUmHS7N@3*^     TB    !67!67Bn}0~n|0߿hC7aC7`   C1    >?!%>?!m{1޿m|1޿C7aC7a   ?    >?!%>?!m~0߿m|0߿C7`C7`        0&'&5470!&'&547! 7!
#7!
aUmHS7O@3)^CaUmHS7N@3*^   d;L   3%%#7J~*q c*J##R##   ;L   3%%%%#77J~*q
\*q,~c*
\c*J####I####  '`   467>32#"&'.'535II245633JI326J235624IJ336633    'AF   'AoH   $`   7>32#"&NOZONZNppNOpp    ` 	   %>2"&%>32#"&BZZsNOZONZNppNOppONppNOpp    [`   !  %>32#"&%>2"&%>32#"&ONZNOZtZZsNOZONZNppNOppONppNOppONppNOpp     x
 
  " , 0 < G  2 &7>"32676&"32676&'2#"&6!3#2#"&7>"32676	a&''&@R !@AS! @S !@AS! -M󿾣MN,ٿ&'󿾢'&S !@AS! dߋev-d   	 x 
  ! - 9 C G S ^  2 &7>"32676&%2 &7>"32676&"32676&'2#"&6!3#2#"&7>"32676ο&&&&@Q!!@AT  f&''&@R !@AS! @S !@AS! -M󿾣MN,ٿ&'󿾢'&S !@AS! dddߋev-d  `   !`u   `&  w   `'w  &     J`   #!Ţ`uJ`A&  |  J`&  '|       <   #%##   -   7Ѳv -    e -   	7 --AB &           %  >32#7#>32#"&67676i((()(H"yNOZONZLS""B)NppNOpp\t  M  B  0   -'   {'  {     j   3#,  O   3!!#3Yb7ՑTx"x^    z   !!73#73#B8ՑՑx^ & "  "   & "      &   "     `;   2####7b%$ڤ0И0q辸}   fS    3'#"&'.467>3،I326535IR2633235  fS    '372+r،I535623I532336 -         M 	   "&7>2&7!ZYK{+:-NnnNNqpȎmDX   la  #  %#'-73%%#'-73%===
====
oqqpqqp  B:'    '  l    d?   #"'&'&'$#"5>32326w
sՐs?VR:BHIWQ9DH   `t'  &  'w  e    1<     27676'&" '&632)*65)*65	KL\\<<==<<<|nnd     ,    >32#"'&543!#7!
T32	**14^`s_>-=
+
`CC    	&    !737!733#3%}f}A^yX^yN    7 %  !67632#"&'73327676'&#"#7 (0679TTuvMM(LHW]99  Y-,*(?[LMKKPP76om67$     ,E   -  67632#"'&76$32#&'&#"27676&"0/66<BBnmLM,29?@F L%&EqAA8&'"'&JIJJfe8CD10vw`00wv0   H7   	#!#!.W<dHp    O  ( 7   '&76767&'&7> '6&#"3266&#"3276`m.-ppUUHGs^''V<<m":;>:;>,*HI%&IG&'a88[q<==<q[88/.HhnnhH./WBBWV  @dL&&df''''     9  -   "27676'#"'&767632#"'&'733276K&'"&''066<BBmmNM,29??G M&%FoBB01vw`00wv1zJIIJff	8DC   n   !!#!5!eKKn!!     L   !!'L    R    !!!!''|w}   z   &76$7Ř+*o**)XDIB5Ͼ4    7>76&'7 1p+**WǗ*+B4н5BI   HX   #7!676323!654'&#"Ht_?499Op-	D_T6CRJCS4:&;"(Cy'V^   1  <T  d   P T {  d    -T t  d     5T u  d   	 &T  d     7T  d   ,  ET  d   H 7T  d     OT  d     9T  d      d   1  d    -  d   zah  d  ah  d   ,d.  d   L  i4  d   M  Si=  d   Y  d   \  i5  d   l  gr  d   V mh:  d   g  g  d   r -i;  d   H Xi  d   Y&iA  d   ( u  d   v  B  d      % ) -  7!7!7!#7!3#7!#!!!!!#3!7373'#37#QӢQ
QlUUP0P-yyyyybyy-Lyyy   4  #" #7367676767#73 32#.#"!!!!3267QLyLhl}GvmtBMYRLjp;$w58
w$>Cķw,16wܭ    u	X  " / ;  #7367'"76!3  !73  6&+	 3  #"'3276#"&/H225@c${EqIewej	@2iH:YF5<d)%p<aK k^|yf,2F$RN7P    s  ) 0 5  327!73#737#737#7!23#3##!3!6767%!&+peOOLLR|FcIEZ7iao)plykUkywB]kkiIxyTUk      @  !!32673# '&767#7!6767!7!67676'&#"#6763 !&8UBA=D֒х,!(
@[1m:>ABpp;@}|+
E#"3'y*32Zrv32uvD9y/
;+y1-1]h23GHJ,|{2+y      ! *  #&'&%6?3#&'&'6767	Ql7y5A?.y/54m~Gv7)KPCY;`\A76EtSLFΐC[EAWTQR  U      7!73!7!!3dƸdLyMy   o   '  7!!!!3!.+732767!7!&'&#LM?LM#jvV43*RVOZT'L%=^wwLuwRZ.-X`yÌMxLGwG.L    _ %  #73'%7'%#7!#772$7#7!#1S! J '""r3F!|}yYysYytzyyX{rY{sxeta      %  32676&+73#737#73#7!2+!!3}d~2{''=2㭑y yyyyyyyy  	' &8   r     	]' )8   r   E  # K    F  " !   3!64'&#"!'7#7!%>'l`@tŦ: 13SD=JyHZ4Gd_+xqg_T    W    4  62"&54&"2765!!>3"!#7267#7!nC+qj98P89NXzNYN׿tvNKwLd<Tu4a<Rt9PQ3ӊ9PSy    (  !#5#3!53##%3#3!53#3!53#55LVVKVVVqV TTմb`PPb%R`PPgPPR  "    QM (  !#! 76'&'7!#7! '&676<&49FF:343&<[[+==+}5 ٚ) }\<ܡ  8 .  7  m         #3!3!!#3!#7D)h]%d%{yyy`߾ly         6$3  #"$'3  4&#"3!ђ:>lrq;zvD8p991dGEÃ875GFX    n   )!!K^7%#      ^   	!!^9+#         )!!DCyy)fo  ^s 8 E  !6$3 #"&'33267654'&'!73>7'#>7654'&#" et,o
 & Jx=*/keIg-[DU	=VNӃPPb/4SC=" 8g29`R\	DqxxWlCS/*nOm1   '   #3!!7!#7!#3O8y ;sL!2yyyy  9'd'   {  9'd'   {  9' {d'Xd& {    9' ud& {    & t  '   ud 9'd& {    'd& t     & u  'd   	&  'd   9'd& {    &  'd   9&'d& {    &'d& u     &'d&     H&'d&     9 & {      ,         #73#7!#3!1 Kyyyy\      	     #73#7!#3!!!1	 Kyyyy\      	   #73#7!##7!###31/W}yyy#yy\y  m   9    n  	f   !73###7!##7!#3D؍W?y\yy#yyy  n  f    !73###7!##7!#3%!D؍W?y\yy#yyyy     n  f     !73###7!##7!#3%!!!D؍W
?y\yy#yyyy      	C    #73#7!##7!#	3!733!	1]p&_p
yyy\yy5yy:y\;     w ;     	7    	3!73	#7!##7!#3!73!	3ppi&_?:yy;yy\yyyy5      7   #  	3!73	#7!##7!#3!73!!!	3ppu&_?:yy;yy\yyyy5  + /   UK &     '    	 0   E   L   E  ' L
   L   E  ' L  ' L
   L   E  ' Y
   L   *  * Y   *  X' L   Y   *  
b' L  ' L   Y   *  l' L  ' L  ' L
   Y   E  ' [
   L    ' [    w' L   [    
' L  ' L   [   E   O   ED F   l G   r  D P    L  	   '  ) '&547 )  " !3!32 65!	p~F}F
?e?ZgjYh\|,F|d     # ,  #7!  )73!32 65!#6767654}F
o?45'Q/\yYgy,G|d\ңCMf3gU  L  	   % 9 M  6767654'32 65!#%7#" !37.54776 '&547 )  !5'Q0S?43&R/?e3p~F}F
p83gT1;@,F|d\ҤCNf`F.dT\|@ϤCL
iZgjYh   	    #$!  ! $'3!2 6hcGYzE(A~oЗYd_@M   -D   "#63  ! 3326764'&>Tp:}Y4p`k/+'TiCMi_v/d  |Vq   !#   !2#.#" 3267ޥSoEFzG큖ܕKef@Af  1&  '   ud  L ?8 	  !#53?`4_4
    	  !#53%
4_4    u h8 	  5!3#u4_4(4c
c4   	  3%#54c
c4`4_4  L h8   3#!#534_44_44c
c4
      %#553%4c
c4
*4_4v4_4   . < 	  %'7~%J%؜E%J%~    < 	  %'%7%E%J%~<E~%%5    j 	  7%'% E~%%5T5%%~ . j 	  '75%%~~%J%  L ?w   !!'!#53!l̇l~4_4wKK(
   u hw   !3#!'!5!0l4_4.l4wK4c
c4K(   n] #  67>3'.'"'"&/'7"Y,-X"AWVBll"Y,-Y!BWVBl~%K%"$#"ACFBml"$#!BCGCl%K%~     WF #  7%7%#&'.#'7>727>l%K%~lBVWB!Y-,Y"llBVWA"X-,Yl~%%6lCGCB!#$"lmBFCA"#$     L ?8   !###5333?Z44_4744
4        !#5553%%4
4474_44  u h8   5!333###u474_44(44c
c44       3%%#55544c
c44Z44_474    L P;   !#53!4_4:(
7
  d h;   	'57!3#+ƍ:4_4(ɍ
4c
c4    L ?8   3#!#53c<4_4
       %!!5!53%
Ă4_4    u h8   #3!3#QĂ4_4(4c
c4     !5!!%#54c
c4<4_4       %!!5!5553%%4
474؂4_4(4     L ?   52#!#53!264&
4_4k%44ܵ 
4J4    u h   "3!3#!"&63%44%k4_44J44c
c4     L ?    !546 +#5!#5	3264&"!6 Yʂ4_Y%44J48Y 
4J44%    u h    3#!#5#"&6 )54&"34_4Y 64J44%8c
c4 YY%44J4    L h8 -  2327623276;3##"#"'&"#"&+#53'$'3;;3'$''4_4:=QFGZGFQ=:4_4&44&4c
c4ZZ
   L hw   3#!'!#53!4_4l4_4nl4c
c4K(
sK   _   %'7ԃF	!
	M^ K43dF'         !#!#534_4A
      
   3#!#4_44c
c4      #53!34_4
A   
   !3!3#4_44c
c        %#5!5!4c
c4I4_4   - m^4   #53!34_4
m    !   4."7#5676$ aĨ1 
?N<FbaaT8>p4_4u}l     !   #4$ 7#5&'."ܜ<N?
 1ĨaFl}u4_4p>8Taa     <    5!!1'7j~%J%ќE%J%~   u?'    ^     c   #" 547327654''7kkkkkB?%J%Vijllkt[$J%      c   '7%'327654'7 #"'&54%J%?BkkkkkB%J$[tkllji     F(?8   53!F4<(
  F ?   !!#FĂ4         3%#
4         #5<4    u(n8   !5!3n<4(4    u n   #!5n4
4       3%4/Ă4       #53
4/4< Lh'B  D  ^   ZZ'C  E^     Lh'D  B  ^   L2?'B  >B      'C>  C     u2h'D  D  >  'E  E>     F ,n 's  8n      F ,n 'r   o  8    L ?w    !!!!'7##53!7!,B-G,84_48ȉB-&&wKyôKy
ZZ    L hw   !  3'3#7!'7##53!!!%!7',84_48G,84_48dG&&-,Bo&&wKyc
cKy
ZZZZ   u hw    3'3#7!'7!5!7!5!!7'0,84_488G,\BtB&&wKyc
cKyôôZZ     L ?8   #53!!!84_48VX&&y
ZZ      53'#'#=
ZZV84_48&&X  u h8   '3#7!5!7'!584_48&&Xc
cZZ    7#5373wc
cZZt84_48VX&&  L h8    '3#7!#53!7'!84_4884_48R&&z&c
c
ZZZ      7#553'%7'wc
c
ZZZt84_4884_48Rz&&&  ./   '77%J%[%Kх%J%7K%[        '7%''/'%J%7K%[d7%%K[%      jk   7%'77?7(7%%K[%[%%7%[K    . j/k   %'7%%7%[K7%J%[%K  L ?   %#53!!!!!!!4_4)Gw$S$
yjj   u h   %7!5!7!5!'!5!'3)$S$wG)4_yjjy
  L ?8   3#'!#533JK4_4*Y+Y
   u h8   33#!'#5374_4KJ4c
c4Y+Y        !#!5!5!5!53%!!!!
P44_4P    3!!!!%#5!5!5!5!4c
c4jP̂4_44P    L ?8      #5!#5!##53!#5wt4_4<
         #53#53#553%#53
VJt4_4  u h8      53!53!533#!53=VJt4_4(4c
c4       3#3#3%#53#4c
c4t4_4<  u ?8   !###333!?474(44  u ?8   !333###!u47444   L ?8    !55!!#53d=_=;EE
        %3'3!#53#EE
dd=_=    u h8    !7'!!53#5d=_=EERc
c       #7#%!3#53EERc
cfd=_=          %5!!!'3'3!#53#dEE
dd^SdS=_=      +    %3!53#53#'3'3#!5#c^ș
dEE=_=d22      +     3'!3#!5#73!53#53#3'E77Ed^ș
Py7722d=_= Q      +     3'!5#73!53#53#3#E;d^ș
ŸEy12d=_=OϺ2         )#57#53##3'373!3'3c
cDD
JEE>==_==;H>   +   %  %3!53#57#53##3'3733'3#!5c^ș
cDD
EED==_==;z22    u hg    #3!53#577'!5#35o=_=d22șc
cdEE&      "    3!!%'7ٜ~%J%x؜E%J%~           !5!7%'%{'E~%%5sx؜5%%~     3#53#53#7#3'3cc
c
EEEE=_=`=_=<(     u h8  ! )  5!6762!3#!"'&')276%!&'&"ug/XX/4_4/XX/3333(9.XX.94c
c49.XX.93333 ZZ'C^  E      uhJ 	    5!'3#75!'3#75!'3#7u<4[4<`<4[4<`<4[4<ܼ
ۼܼ
ۼܼ
ۼ     L ?8   !#!#53!3?O4_4
    u h8   3!3#!#!5!4_4O4c
c4    L h8   3#!#!#53!34_44_4M4c
c4
  L ?8   !###!#53!333?jP̂4_44P
    u h8   3!3#!###!5!3344_4PjP4c
c4    L h8   3#######5333334_4PЂ4_4P4c
c4
     L ?8    %!#53<=_=Pn
    u h8    75!3#=_=>n4c
c4    L h8     7%!3#!#53'`=_==_=>Pn4c
c4
    	    
  3#3pT+  LF  (  >54&"#"&54632 #"&54324&#"324X:*:|fMHeMIecBds<+@lFWt|uy       A   !5!!5!!5AO55+     
A     !'7#53#5!!5!73!A|A2?}l&lnB2=ll`+<<on    )      %!	3 dd+  )      	%!# }{1b+       !"!!3!!"$$3Ho8D8oHج(o_,0/+_o(\(     " *  3#!!23!!"'''&$;7##";JJl
k	H20jh(yP/l%o8OOV(\(,/+P*o_,0        35!26767!5!&'.#!5!2#o8D8oH(خo_,0/+_oج    " *  '7#53!5!"#!5!2+3&'&326767JJl^k	H20jhخydP/l%o8O*("OVج/+Ppo_,0   /w   !#3!53!3!53#/XFFT^TT^TT  /w   !53#5!#!#5!#3FwTTT^TT^     w   !#'.#!!26?3!5	ӋX\S~!v0"
HX6S4+)X&G     !!          !!!!#!5!qff      s 	    4632#"!!#!5!pNOppONgppoHff \B      ^   %#'-73%hbbibHH*{x  JM     &"265$632 &MnKKpKCNLpJK6  JM 	  632 &ٶ     HD 
  3##'%ugdɌKZ3qtk   HD 
 5  3##'%>32#"&'5332654&+532654&#"ugdɌK4X@ifx|PP`VOX]b[)QWNHBP`Z3qtkidH^o]z{POVRPWTD@?FI@     BDl 
    3##'%!535!533#3%ugdɌK}{}wZ3qtk^yX^yN     %  .#"326"&'#"&54632>3"3.zN]vlQK~F\E`]XD_#|F-{=LJqXUqtq}밸urKL         /  32654&#".#"326#"&54632>32#"&-{N^ulQJ|.zN]vlQK~E`]XD_]1KLoYVqr$LJqXUqtE}밸u찷q   r   %!3!0   r   %!3!04  8   #e   8+   '37#J樢֨Jc|    8c    ###cee   8   #'3737#w怢"怢O#T6 5  J   !!!5EGT    5  J   !!!5fgwT          !#4."#4$ o޾o(\(oooo~(خ      32>53 $5o޾oج~oooo~ج(  1q )  26732#"&'&'&'"
#"&54632VfbwL>.>
c('8z`yNB2FKbP<I0,".t>fbN>J?(:  1'      1
'@  '           4632#"&!!X=>XX>=X=XX=>XX    {     4632#"&4632#"&!!X=>XX>=XX=>XX>=X)r=XX=>XXZ>XX>=XX!    {   # / 3  4632#"&4632#"&4632#"&4632#"&!!X=>XX>=XX=>XX>=XX=>XX>=XX=>XX>=X)=XX=>XXZ>XX>=XX!=XX=>XXZ>XX>=XX!     {   +  #"/&#"5632327%4632#"&4632#"&ۿe)__)eX=>XX>=XX=>XX>=XrD9Ψ9D=XX=>XXZ>XX>=XX    @   #"/&#"5632327ۿe)__)erD9Ψ9D   @   532?632&#"#"ٿe)__)erΑD9Ψ9D          !!#"/&'&#"5>32326]e_aM``d_eMUS:
BGJVQ9
DH   -    !!#"'&'&'&#"5>32326]e_	aM``d_eMVR9BHIVR9
DH      9  #"'&'&'&#"5>32326#"'&'&'&#"5>32326]e_
aM``d_eM`]e_	aM``d_eMoUS:BGJVQ9DHVR9BHIVR9DH     - 	     4632#"!!!!pNOppONppo  H 	     4632#"4632#"!!!!pNOppONppNOppONIppohppo    H 	     4632#" 4632#"!!!!^pNOppONpNOppONpIppohppo    H 	     4632#" 4632#"!!!!pNOppONpNOppONIppohppo     $ 	     4632#"4632#"!!!!pNOppONppNOppONppoppo.     $ 	      4632#"4632#"!!!!RpNOppONppNOppONppoppo.      !3!!!'7#5!7!Vb5}   I     !!!!!!r       
  %!55yPP        
  55%!!y           !"3!!"$$3ooooج(o޾o(\(          35!2>4.#!5!2#oooo(خo޾oج         !!!#'7&'&$;	#"-gY.-(gJ!ooo_OV(\(Oo޾7       35!!5!3+'7	32>4&'&+gY.-خgJj߉ooo_8OVجOo޾7     Q    7!!!"3!!"$$3ooooج(7bo޾o(\(    Q    7!!5!2>4.#!5!2#oooo(خ7^o޾oج   	   !#5332>53 $5b<4=4<o޾oج9
9~oooo~ج(       32>53 $54632#"o޾oجpNOppON~oooo~ج(5ppo       3##5#53532>53 $5o޾oج~oooo~ج(        %!!!!        !!5!!6    Q    7!!!!!!7`  Q    7!!!!5!!7b6         3!#!       !3!6         # +  $  $!676767!%&'&'&'ج(\(c/,_77_,//,_77_,/\(جb7_+/0,_77_,0/+_7          $  $!2676!&'."ج(\(b7޾77޾7\(جb/+_oo_+0,_oo_,         !  $  $7'2%654'7&"ج(\(m33i\ 33\\(ج\jk\3\kj\j3         $  $	32>54&#"ج(\(?\joo\koo3\(ج3ooj 3ook\        	  !   4632#" 2>4." $  $pNOppONo޾oo޾(\(4ppo,޾oo޾oo%\(ج         *   &"265$632".2>4." $  $7O66P6lgՏo޾oo޾(\(86Q56'jgi޾oo޾oo%\(ج       )  '#'7'7372>4." $  $bbbTo޾oo޾(\(XZZX梇޾oo޾oo%\(ج            !!!!&2>4." $  $Po޾oo޾(\(B/޾oo޾oo%\(ج            !!&2>4." $  $x`o޾oo޾(\(޾oo޾oo%\(ج          !)!!!!!!((((((           !!!!6((       	    %!!	!		!g~cg       	     4632#"!!!!pNOppON64ppo6     :   3!!#    :   #!5!:+{z         !!#!||^          35!3!^         3!!#[       3!!!!#[[NM      :   3!!!!#NM      :    !#;!!#       :     !#3#;!!#a+         3!!!!+3iNM     :   3!!!'!#coubb  :    3!!!!!'##7!?p(R*n9RUNbRbLM     :    !#;3!!#''˼luubmb           !#;!!!!!'7#7#?#L?8`RG>))RNbRb[Xర        7'	δ    
V 	  4632#"pNOppONyppo       	  3	%!	\ !C|    N   !#!7xV   z   	!#7yKx     N   !3Obb"Vx z   !73!Kbx      !#{h   I,    $%%$nn!"nn8ʸ        ' + 6 @ K V  #"&6 3546 +32 &=# &6;5#'54&#"3!3264&#"32654&#!#"3265˭ʏʭʏeHGeeGHefGHefGHefGMGeeGHe`ʏʭʏ˭GffGHefffGMGeeHGeeHGeeG      !3!h{     qf   477632#"&'&'&#"jkbwL=.>\ bP<I0-".#<    -   0#"&546323265jkbwL=.>\bP<I0-".z#     T    !!!!%!!Pr6L + x     # / ; G S _ k w           +7CO[gs  !2#!"543!254#!"+"=4;2+"=4;2%+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2%+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2'+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2'+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;22+"=4#"=43+"=4;2+"=4;2"=43!2#UݓJIIJ%J%%J%%K$$K%J%J%%J%F%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%%%%C%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%$%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%$%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%%%%%%%*$%%%J%%J%%K$$K%%%%%JJJI%%I&%J%%J%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%%% %I%HJ%%J%%J%%J%%J%%J%     .    !7!!!!P,QQ,P.bb   m   !5!ݠ r0p        !!#v      !&5 ƠT_C   m   5!] p g ]   !0v	        !!]#ƚ ΐ,U  m   !!! #	q       !!#v      !! 	r    m   !!]# N#   ]   !0v	        !!!]# #   sXm   !4763!!"{zf+!u0%    y   !4'&/32765!9+en:==@ne( =F|AEuH<  sXy   3!!"'&5!+f}{y%0W   sy   !!	  m   4'&#!!2s!+fz{}%0   sXy   &'&!;!76<<(en@==:ne+!<TuEA|R=   y   !#!!2765s{}f+!y0%       !  	z        !	!!$<   7.>    3!38|PP|.b    j   5!j    l   !X      3 	      !@ 	  <j     5!!5!!5!r#B#B#j    <l     !!!!!r#B#B#XXX m     333mjjj  m     !!!@@@mjjj  <j      53353353353<xxxj    <l      3333333<xxxXXXX   n      3333p^^^^    n      !!!!@@@@p^^^^     !!      l   !! l       !!#      l   !!# l       !5! j     l   !! X       !5!$ j     l   !!$ X   j   3!-j    3!-m    j   !!@j       !!@m   j   5!3,jk     !3,X j   5!!@jk    !!@X        3!!- 	       3!!- 	    	  #!!!P@ j   	  33!!P-# k      !!!@# 	    	  #!!!P@ m      	  33!!P-# l     !!!@# 	     !5!3, jk       !!3, X    	  !5!!#@P jk   	  !5!33$,P jk      !5!!$@ jk    	  !!!#@P X      	  !!33$,P X     !!!$@ X     !5!! j    l 	  !!!!- XV  l 	  !5!5!!, jV  l   !!! X     !5!!$# j    l 	  !!!!$# XV  l 	  !5!5!!$# jV  l   !!!$# X j   5!3!,-jk  	  !3!!,-XV    	  5!3!!5,-3jkV      !3!,-X   j   5!!!@jk     	  !!!!@#XV   	  5!!!!5@jkV     !!!@X      #!5!3!,-jjk     !!3!!,- X       !5!3!!,- jk       !!3!!,- X      !5!!!!@ jk       !5!3!!$,-# jk        !5!!!!$@# jk       !!!!!#@#P XV      #5!5!!!!P$@ Vk      !!33!!$,P# XV       !5!533!!$P-# jV       !!!!!@ X     !!3!!$,-# X      !!!!!$@# X      !5!!!!$@# jk      !!!!!$@# X  <j    5!35!<yj  <l    !!!XX       33lUTT        !!@@lUTT     5!5!  x X    333x 		    	  !!!!- ¬B  x  	  !!##xms j  x     !!3!!xm3-s ¬jB    	  !5!5!5!, >   X 	  5!###ljjj     X    !5!!!5!4l t, >  	  3!!!--A   xj 	  333!xjk   x    3!3!kA  	  5!5!5!3,,=    jX 	  5!333jkk    X    5!35!3̠=      3!!!!-- 	AB x     333!!xs 		   x   	   3!33!!-skA	jB        !5!5!5!3,,   X    !5!333xt jk	    X     5!3!5!33t,	       !5!!5!4 B     5!!###sjjj      	   5!!5!3!!t,-sjB     5!5!3!,-XA   j   5!333!jkk     	   5!5!333!XkA       !5!5!5!3!!!!,,-- AB        5!333!!###sjkkjj         !!!!5!5!333!-s t, jBkA        43!!"yY[ p~|     4&#!5!2[Yx p~|  j   5!2653#xY[j~|q    j   !"&533![Yyjq|~  *m   3YѲ/	Y   *m   #3*/	Y *m   #	#	3	3*i    S   jh   5!|j       3?  hj   5!h}j       3 @  hl   |X    !@? hl   !h}X     !@ @ l   5!5!!5ijVV     333PP ?@    l   !!!iXVV     #!#P@P ?@  ;	      ;?   !O ?   ; j   !O j   ;   !O k   ;   !O @   ;   !O    ;   !O    ;B   !O B   ;   !O 	   q   ! 	      ! 	      ! 	      !' 	   I   !] 	      ! 	       3 	   :	'       bm         # ' + / 3 7 ; ?  53!5353!5353!5353!5353!5353!5353!5353!53('O'('('(67576    (  'l         # ' + / 3 7 ; ? C G K O S W [ _ c g k o s w {           #5353353353!3#%3#%3#%3#3#5#53#53#1#53#1#53#75353535313#3#3#3#75353535313#3#3#3#75353535313#3#3#3#bb~! 
  'm       5 9 = A  35#%35#35#%35#%35#35#35#35#35#35!35!#5#!5#35735#35#wNOŶZXYI6Z   B;	  B  q :	         !( @  ;	'    	      ;   !!!;(' 	@   ;'	  	'      ;   !!;@@	    ;   !!!O   ;	'   ;&	  	'  ;   !!'(      %   !     %    !!!,7r<R     %    %3!254#!") ) ,orVoVZttV   %&	  	    %        !%!5!5!5!5!5!5!5!5!5!W77777 rrrrr  %        !%3#3#3#3#3#ᰰܲްܲް t88888   %         # ' + / 3 7 ; ? C G K O S W [ _ c g  35#35#35#35#35#35#35#35#35#35#35#35#35#35#35#35#35#35#35#35#35#35#35#35#35#!L$" $"$ܮ.,,.ܮ.,,.,,.,,.,,.   %   
       !33775353535W!yBߢ| T}<B     %   
       !%353555#5#5#57#!yyB| r!C}     %  	       $ ( - 1 5 9 = A F K O S W \ a e j o s  7'#7'7'#7'7'7'#7'7'7'75#7'7'7'7'7'37'75'7'7'7'37'75'7'37'35'!,2|5y2~~2O~~5~|~2~~2~~5~}}}}~~~~}1y|~||~|}|||~|}}| z4|2~12~~~~|~~~~54~}22~}~45~4z231|42~~1O~~4~|~1~}1~~4}}~~}}~~~|1|~|}~|||||~||}}4|1~21~~~~|~~~~44~~11}|~44~~41       7!         %!!!,rv        %!!        !!!cr   "   !    "    !!!,r8V     !   %!!n      !    	!!!bSnr     !%   	    !%    !	       7	        7!	  !%         !%    	x;rRff          7          7	x^rSS      !   7      !    7	xtrSS     !%   !$    !%    	%!bc6r        !         	%!QQZr    !%       !%    	W                  	z      !        !    		#W    !%   	  !%    	uvxx    !%     	>+uv))xx  p)   )  $7632#"' 327$%&#" %632#"'~~~~eMM>yJJJJJ6````qq|qq   #u    	9%-    p)    327$%&#" %632#"'MM>y````qq|qq     r' 	   ' / 7 ? G  %&'&'6767&'&'7%'676727"'64'7&"'62&47\+;.81F9K58.42d;E9G,:.80G9J6&8.;+d1O9FLL&_`JnLL'`_n<1& j(0=Ju &,A=N:0('<1& j(0=Ju &1<>EB0(n_II'[[JnII'[[   p)    % / 3  6%632#"'327&#"6767&'&6pyAAAA,+-,,-+A@@Rqq|qq%%mܱ[0$
%@%|"    p)   ) 7   3276'&#"7632#"' 327$%&#" %632#"'r99:9rr9:99XWXXXXWXMM>yB!!BB!!oe33eje33````qq|qq     p    $  $pkk]Ak^    p     $  $27$%&#pkk]<MAk^a``     p     $  $"3pkk]<MAk^``    p     $  $%&#"pkk]Ak^>``    p     $  $327$pkk]\LLAk^>``    p     $  $"327$!pkk]<MMgAk^```     p     $  $"!pkk]<Ak^`  p})   6%63"'pRqq     )    #2y|q*q   ( 
   2654&#"!|~}}|v<    	(     $%632#"' 327$%&#"!IMM>y_O````|qqqqH(     	(    !#%&#")%632OyyMMqq>~``     	    3327$3!#"'$@1 >qq``   ) 	  %63"æqv`  ) 	  2#%&#u)q>`   	  527$3Muyv`>q   	  "'$33yuMq`     p)   %632#%&#"puqq>``  p   03327$3#"'$puMMuyy``>qq  !%         !%         !%   !    !%   !$ 3! 
   2654&#"4632"&nȊce;~|ddcc||}  %    !%!!d r<     %    !%!!We r<     %    !%!W7 r<    %    !%!W7 r<  %     !%!!!!+c,b r<<     !% 
    4632"&!	W>>VV}V2j>VV>>VVJ      !%    !	c      !%    !	b    p (     7 &  $   %;<*X֖   %  	   !!!!!!,7,rWb<)) Ie  %  	   !!!!%!!,crWbM)<R re  %  	   !!!!%!!,br+ceR re   %  	   !!!!!!,7+r+ceR Ie  p      $  $!327$%&'pkk]]4MAk^Or``O+    p      $  $67$%&#"!pkk]uM14Ak^^O``rOc     p      $  $!%&#"67$!pkk]\M̦4Ak^OT``%OT     p      $  $327$!%&'pkk]\M40̉Ak^``TOTO     !%    7!!xtr R      !%    	%!#Wnr   !%    !xtr    y    !!!,Lr0R<6    y   !06    "K    %!!!,|rhOn    "K   !h#n    !%    !	#W   	       " * 2 : A I  3#''%#&'52#"'&5476!!'5%!!'53'5%3'5%3#'sMM7:==-0YG.b#CKSuYGr=;>MM^??@7`d?\gOOOOy>*<?v^ 
    < B H N T Z ` f l   3264'&#"&7367'67675673#''5&'&'7&'677&'67'%%&'&'%6767%&'0/CB^0/AC/88pkTcR|NOOfUip88pqUfONNQaQh!$b)dLQk
KRt!%c'd&//^000NN|P_Pfp88poQ`QyNNP\Qgp88pmQ\Py,
M
N>&`7"
bK*V&"g{M	M       ! ) 1   !   !   32 54 #" &#%#7&'67&'6767KJ]_VNEWMCe2ntjnti7IL6a]]pu	otpu	ot         ! ) 1   !   !   32 54 #" 3$3&'67&'6767KJ]_TNEAgntjnti7IL6a]	Uypu	otpu	ot        %   !   !  #$''&'6%&'667KJOR`7IL0cZ
		
		 
       " * 2 : A I X  3#''%#&'52#"'&5476!!'5%!!'53'5%3'5%3#'32765'&#"sNN99=>-1\H0e%FKSwZGr=;=NN$E| 1	?'_>?@7`d@\hPPPPy?+<>w_VG{?,rCA     0: 1 @  7#'#53'&'&54767&'&=33676=3#32654'&i($lm$(($[Uu&tU[$&uU[[UV$|ddbe|$%
ZSSZ
%_TYYT    *  $  4&#"326&54 32 %##5!&w衤礡PP 䤣L~~ |	     *  $  "32654&'#5!3% #" 5476礡 𳉧פ㤤ף	|~~L    #  &$76+"'&5'476%7!ttsstEuspid5s
qttrtt<֤ꧦg\ul9 S     52654&#"#4 32 33#!5z{ym㗗yyy{(|      j   #53533#632#4654&#"#*jjoon}mZyH{zF      2  4  "32654&7#"&54767!!53#5!!3!!#3!!8OO87ON=0LmkL/>Λ2  1O79NN97Os0LllllL1KӘJJ-    ' <  %#5#535&'&'5'73'3#'73'676=35'73'33◰zhNgeMjzzTThOʍ7NjYYӖy     ?    ! #!!!'!27674'&#.d ;6zFH%QM_\ǃ$P<   C   #  #"'##56'##"/547 ?^'5@_*SU&/UL	;Yԧ9UP(`XI.     s  2  22732 #&547636=4'&# #4'&#"*tpz&=<xQ>hG:V
Hek%PF5NPB|-&pA&NF    X      	 &&5	<F:^;"Vgd     G 7  236;2"##'65##"'&5476;235&'&=476ex<JT`(GeRUdfB3	VNT<G48u<B<h	mMD:SGEnQh  B  " < B  +"'##56#+"'&57547 7;2732;276=4'3&'"~V"0b*SV*8UiQ"_|Q
)w`SgA
?6N#euB?gIo5	F(pZR      w   2367632#&5476(t*#\l~ ΨT]1klSI|-  X     	&47EosU     H 2 ` g  26;2"##'65##"'&5476;2&'5476&+"326733276=4/#"567654'&#"35&5hr=)\"IfRUdgC3&=cGkv	==Nr%SZU6vk 6)S<F98:d	mOE:Rp&i	C]&'Ax.+0	nM,W`c        3#"/4?23hH0#!cZ-@   o   3#'654'&'#"54732XWz=\9`Y'6?F` 1TFG*֙-@ x/   #"=4?2%#"=4?26ձ'VQܖCت+YP*~:ۉ8z"C     o    "'4723!# 5472!5kmOdXX[;Z$}@Ϝ   "    3363'$6'"-8w?WXc1	      0    3%#'#3%#)N(4/c}    4 ( ,  377#'#'547#5773%%.wwzy.**  <<7CA<<{8AMt  u h8 	  !53#5u=_=c
c  	&   *'$6 76#"'676 7	5N@"	#c7Y	+^FJ,SR+}Pm)6 &   767$676&#""K*PH0`b/YM)7cab$D.9cimP}+$%S  #u   	  	!	!j.u-1      !!1mpp      	!!2mp     (   53'#'#'##
ɩj55j4_4)wo?G     (   #5337373(7
7j55j4_4)G?ow     c #  5676$  '&'72>4."7#?N<ć-'TĨaaĨ1 
&4u}lN!1aĨaaT8>p4_   c #  	#5&'."2767 $$ 7
 1ĨaaT'-<N?&_4p>8TaaĨa1!N<l}u  u O  % - 5 =  53676$ 33## $'&'!#676765#35%3&'&'&u2N<N2܂4_42NN2%#T0C0T#%#T00T#(`VV`4c
c4`VV`0T#%#T00T#%#T0   L 8 	  !#534_4
  u ,8 	  5!3#u	d4_4(4c
c4   L ,8   3#!#53	ق4_4Ƃ4_44c
c4
    L 8   #53!!!84_48	&&	ly
ZZ  u ,8   '3#7!5!7'!5	84_48	l&&c
cZZ  L ,8    #53!'3#7!!784_4884_48R&&J&y
c
cwZZZ   L 8   3#!#53
'x4_4
   u ,8   #3!3#Q4_4(4c
c4   L 8    #53!53#=!84_48>p&&y
llôZZ     u ,8    '3#7!#3!7'	84_48&&c
cllôZZ     u ,8   !3#!'!5!794_4KJ{**4c
c4Y+++Y ,@,  ,+,  ,@',,  , ,   , @',,   , +',,   , @',',,   @  ,@',  ,@',  ,@',',  , @',   , @',',   , @',',   , @',',',   +  ,@',  ,+',  ,@',',  , +',   , @',',   , +',',   , @',',',   @'  ,@','  ,@','  ,@',','  , @', '  , @',', '  , @',', '  , @',',', '      , @',   , +',   , @',',   , ',    , @',',    , +',',    , @',',',     @'   , @','   , @','   , @',','   , @', '   , @',', '   , @',', '   , @',',', '    +'   , @','   , +','   , @',','   , +', '   , @',', '   , +',', '   , @',',', '    @''   , @',''   , @',''   , @',',''   , @', ''   , @',', ''   , @',', ''   , @',',', ''   ,p  ,p  ,p@',,p  ,p+',,p  ,p@',',,p  ,p', ,p  ,p@',', ,p  ,p+',', ,p  ,p@',',', ,p  ,p@',p  ,p@',',p  ,p@',',p  ,p@',',',p  ,p@', ',p  ,p@',', ',p  ,p@',', ',p  ,p@',',', ',p  ,p+',p  ,p@',',p  ,p+',',p  ,p@',',',p  ,p+', ',p  ,p@',', ',p  ,p+',', ',p  ,p@',',', ',p  ,p@'',p  ,p@','',p  ,p@','',p  ,p@',','',p  ,p@', '',p  ,p@',', '',p  ,p@',', '',p  ,p@',',', '',p  ,p' ,p  ,p@',' ,p  ,p+',' ,p  ,p@',',' ,p  ,p', ' ,p  ,p@',', ' ,p  ,p+',', ' ,p  ,p@',',', ' ,p  ,p@'' ,p  ,p@','' ,p  ,p@','' ,p  ,p@',','' ,p  ,p@', '' ,p  ,p@',', '' ,p  ,p@',', '' ,p  ,p@',',', '' ,p  ,p+'' ,p  ,p@','' ,p  ,p+','' ,p  ,p@',','' ,p  ,p+', '' ,p  ,p@',', '' ,p  ,p+',', '' ,p  ,p@',',', '' ,p  ,p@''' ,p  ,p@',''' ,p  ,p@',''' ,p  ,p@',',''' ,p  ,p@', ''' ,p  ,p@',', ''' ,p  ,p@',', ''' ,p  ,p@',',', ''' ,p  p  p  ,p@',p  ,p+',p  ,p@',',p  ,p', p  ,p@',', p  ,p+',', p  ,p@',',', p  p@'p  ,p@','p  ,p@','p  ,p@',','p  ,p@', 'p  ,p@',', 'p  ,p@',', 'p  ,p@',',', 'p  p+'p  ,p@','p  ,p+','p  ,p@',','p  ,p+', 'p  ,p@',', 'p  ,p+',', 'p  ,p@',',', 'p  p@''p  ,p@',''p  ,p@',''p  ,p@',',''p  ,p@', ''p  ,p@',', ''p  ,p@',', ''p  ,p@',',', ''p  p' p  ,p@',' p  ,p+',' p  ,p@',',' p  ,p', ' p  ,p@',', ' p  ,p+',', ' p  ,p@',',', ' p  p@'' p  ,p@','' p  ,p@','' p  ,p@',','' p  ,p@', '' p  ,p@',', '' p  ,p@',', '' p  ,p@',',', '' p  p+'' p  ,p@','' p  ,p+','' p  ,p@',','' p  ,p+', '' p  ,p@',', '' p  ,p+',', '' p  ,p@',',', '' p  p@''' p  ,p@',''' p  ,p@',''' p  ,p@',',''' p  ,p@', ''' p  ,p@',', ''' p  ,p@',', ''' p  ,p@',',', ''' p  ,p  ',pp  ,p@',',pp  ,p+',',pp  ,p@',',',pp  ,p', ',pp  ,p@',', ',pp  ,p+',', ',pp  ,p@',',', ',pp  ,p@'',pp  ,p@','',pp  ,p@','',pp  ,p@',','',pp  ,p@', '',pp  ,p@',', '',pp  ,p@',', '',pp  ,p@',',', '',pp  ,p+'',pp  ,p@','',pp  ,p+','',pp  ,p@',','',pp  ,p+', '',pp  ,p@',', '',pp  ,p+',', '',pp  ,p@',',', '',pp  ,p@''',pp  ,p@',''',pp  ,p@',''',pp  ,p@',',''',pp  ,p@', ''',pp  ,p@',', ''',pp  ,p@',', ''',pp  ,p@',',', ''',pp  ,p' ',pp  ,p@',' ',pp  ,p+',' ',pp  ,p@',',' ',pp  ,p', ' ',pp  ,p@',', ' ',pp  ,p+',', ' ',pp  ,p@',',', ' ',pp  ,p@'' ',pp  ,p@','' ',pp  ,p@','' ',pp  ,p@',','' ',pp  ,p@', '' ',pp  ,p@',', '' ',pp  ,p@',', '' ',pp  ,p@',',', '' ',pp  ,p+'' ',pp  ,p@','' ',pp  ,p+','' ',pp  ,p@',','' ',pp  ,p+', '' ',pp  ,p@',', '' ',pp  ,p+',', '' ',pp  ,p@',',', '' ',pp  ,p@''' ',pp  ,p@',''' ',pp  ,p@',''' ',pp  ,p@',',''' ',pp  ,p@', ''' ',pp  ,p@',', ''' ',pp  ,p@',', ''' ',pp  ,p@',',', ''' ',pp    u h8   3!333###!#!5!M474_44}44c
c44  u h8 !  33333#######!5!33Ђ474_44P  P44c
c44    L ?8    #53!53!!!!#=!84_48gG&&y
llôllôZZ  u h8    3!'3#7!#5!5!5!5!!7'g84_48&&lc
cllôôZZ   L h8   !  '3#7!#5!#53!53!!7!7'84_4884_48&&UU&&c
cll
llZZZZ     u h8   #3!333###Qʂ474_44(44c
c44     L ?8    #53!53#=!84_48z4&&y
llôZZ     u h8    '3#7!#3!7'84_48&&c
cllôZZ       3!!%#5!5!4c
c4O4_4        !#!5!53%!!
4_4O T  `   '#'##53`yjjy
)$S$wG)4_    T`   #53373`
yjj4_4)Gw$S$  L ?8    !5#!#53?ٴ;4_4
   u h8    5!35!3#u'ł4_4(4c
c4    L ?8 	    !#53!!5#!54_4
   u h8 	    5!3#!5!35!4_4`(4c
c4   d h;     53333###!53!'573>474_44ƍ:+(44c
c44ɍ
     n h8 
    + 2   4632#"$4632#"$4632#"$4632#"3#B2/EE/2B2/EE/2B2/EE/2B2/EE/24_4ebDD10DCbDD10DCbDD10DCbDD10Dc
c      !55!5!!%44474        %!!5!5544474  d h;   3!3#!##'573M4_4ƍ:4c
c4ɍ
    d h;   333######'57333Ђ4_4PDƍ:DP4c
c4ɍ
  d h;   	'57!333###+ƍ:474_44(ɍ
44c
c44  d h;   33333######'573V474_44+ƍ:+44c
c44ɍ
    d h; %  33333#######5'57533Þ474_44PöꍶP44c
c44嘴
  u P; 	  !!u:7
7  d ?; 	  !'57!?ƍ:(ɍ
     u P;   !5!3#|:u:u(77
7  d ?;   !!'7#'573'7|ƍuƍ:uɍɍ
ɪ  L ?8   !#53?T4k4  u h8   5!37'#u4k4(4nn4   L ?8   3#!#53!c04k4   u h8   #3!37'#!QЂ4k404nn4  . j   %'%'7~%%5~%J%5%%~r%J%~   . j   	%7%'7r%J%~5%%r~%%5~%J%  .4   %264''7 'J4~%J%j[ [4Jj%J%~Z Z       % &7%7%2[ [j%J%~4JZ Zk~%%5J4     j   &"%'%&6 J4k~%%5[ [4J5%%~kZ Z   . j4   '6 '764&"[ [5%%~k4JZ Z~%J%jJ4     <   %	'''77'7%'BB~%%%%~؜B%%~~%%      <   %'	77'7%'7%'7'B%%~~%%<B~%%%%~      j   7	7%'7''77 B~%%%%~TBB%%~~%%   . <   	'77''7BB%%~~%%BB~%%%%~     <     7'%7 QǜǜQT蜵      <     	'!	'QQTQ9Q      < 	    '7'7%'%77%'7'c~%%~E~%%WQ~~%%Ӝ%%~ӜQ     < 	    7%'7''7%'c~~%%~9E%%~Q)~%%~~E~%%Q      <     %7'7'7%''ǜ~%%~Q؜~~%%Q    <     	'7%'7'	~~%%~QT9~%%~~cQ    <     7!''7%'!'7ǜQE%%~~%%~E~%%%%~~   <     	'	'7'7'7%Q~%%E~~%%QE%%~~~~%%    W h8   !3#!&'&'&'767672%4_4WB!,/+,Y"llAXVVWA"V4c
c4CB!$"lmB##CA"%   +    53%#!5!26
<FdGa4_4d    +    4&#!5!2%#5dF<ġ4c
c4WFd4_4 - g   2653#!#53Fd4_4dF<
 M    !3#!"&53a4_4d4c
c4<Fd    E   %'7>4.'75%%~E`66`EY}EE}~%J%E£EY   o   %.>7%'.Y}EE}YE`66`E~%%YYE£E5%%     ie   > ."'7XZF¤D4$&X~DD~XD`66`D~&J$    O6K    .'72>7%7%XZF¤D$J&jX~DD~XD`66`D~&$    O K    %5!%'%."'> ~&$4D¢FZԟ#4$&~D`66`DX~DD~  i  e  !  533##5#5> ."'7eIXZF¤D4$&IyX~DD~XD`66`D~&J$   w     ''7327676'ܬ?C%I%]s*4[Hkk%I%@BHk,k , w   327'7%'  ؛kkH[4*s]%I%C?kkHB@%I%W  c  #   767%3 $2>4&'&'#'-1B4u}l@aĨaaT8>p4T<N?NĨaaĨ0!˺
0  c  #   767'3 $2>4&'&'#7l}u4B1-@aĨaaT4p>8T<N?NĨaaĨ0
!0  Lh 	   5!3#!#53u4_4EE4_44c
c4 
   Lh 	   !#535!3#?`4_44_4b
h4c
c4  Lh 	   !#535!3#?`4_44_4
4c
c4  u  h8    533##5#5'5!3#xd4_4I4c
c4   L  ?8    533##5#5!#53L`4_4I
     u h8   5!'77!3#!''7ulmyymh4_4myym(lyyl4c
c4lyyl     L h8  ' /  3##"'&'##5336762)&'&"!2764_4/XX/4_4/XX/_33334c
c49.XX.9
9.XX.93333   %  47675553%%"&6264&"-X.94
49.Xfff~X.x474_44.X~}Őfff     F n8 	  #!53n44
4
  F n8 	  #5!34k4(
4
  	  #53%
4
/4k4   	  53%#
4
<44  F(n8 	  53!3F44(
4
   	  3%%#
4
4R4  F n 	  #!#5n4R4
4
  	  #553
4
/44   u?8   #333!Q74(4    u?8   !5!333#c47(4        !5!!%#44        %3%!!544     u ?   !!###3Q44    u ?   3###!5c44        #55!5!447        %!!5!553474     F?8 
  3#!53!c4`
  un8 
  3!3!#u`44
     
  3%!!5!
4  
  5!!%#4
4  F ? 
  3#!#5!c4
  u n 
  3!#!#u4
4     
  !5!53!
`4    
  5!!#5
44` F ,? 'o  8n        'q8  p      u ,n 's  8r      't   u8      F`n     53!!5!'3F4</<7W
p܂  F ,n    #!5!!#n4/7<
4܂T     F`n     !5!3	53!n<4W7<4f
T    F ,n    !!#	#7!5FĂ4(7<
     Fy?  
  5!53!u4<y^
    F E?  
  !!!!#u6/Ă4܂    uyn  
  !5!3	5!n<44  u En  
  #!5!!n46U
4^   't   q8     'u8  p       u(?   !264&#!5!2#!u%44%kk4J4ܵ      u h     !!!!5!3#44g4_4\4c
c4    u h    #"/&#"56323275!3#z`@oa={xx{=ao@`ze4_4D9Ψ9DF4c
c4   L J?8    %#"/&#"5632327!#53z`@oa={xx{=ao@`zg`4_4D9Ψ9D@
     u Jh8    %#"/&#"5632327%5!3#z`@oa={xx{=ao@`ze4_4D9Ψ9Dd4c
c4     uh8  ' 1  #"/&#"56323275#"/&#"5632327%5!3#z`@oa={xx{=ao@`zz`@oa={xx{=ao@`ze4_4nD9Ψ9DD9Ψ9Dd4c
c4     Ld?S    	5!#53-d`4_4c!
     L U   !!#53!?܂4_4$
q
  udhS    55	!3#!4_4`c10Pc4c
c4  udh     3!!"&63!!"!3#!U<ܛ<4_4`xU6_4c
c4    L 9 %  !3!!"$'&'##533676$3!!"?8oV:4_4:V(o81._o欔do
peo_/2    Ld?     4&#!5!2#!5!2!#53U<ܛ<`4_4HxU
    P ~   %"&7&63"3!!"3Ǜnnܛ@[[@I@[[@6nn6[[[[   6 d   2#5264&#!5!264&#nnܛ@[[@I@[[@nn[[[[       46 6 #4&"#4&"6nn6[[[[6nnܛ@[[@I@[[@     n    ' &532653265nn[[[[nnܛ@[[@I@[[@   #u   	u- 1'	`  '@  '       3 3  267!5!7632#"&54&#"!!#"&54632jc"]qiRA@Ae
&>bakTF<A=,{jT@OMJ&ekfSShWANHC    3 =  #"&5463232!5!6567!5!67632#"&54&#"!!!&>bakTF<AY;!?qiRA@AS''5&fSShWANHC^U~jT@OMJ&ALMC    /         #"/&#"5632327%4632#"&ۿe)__)eX=>XX>=XrD9Ψ9D=XX=>XX    {   +  #"/&#"5632327%4632#"&4632#"&ۿe)__)eX=>XX>=XX=>XX>=XrD9Ψ9D=XX=>XXZ>XX>=XX      %	'7%'11m,J+mU1L1wl++l    /"    %77%7	'711m+J,mU11l+K+l   j^    	7%'71M1m+,m1L1ql++l    / j"^    	'%'	'71M1vm,+m11wl+K+l    L h8    !53#5!#537'!55*`=_==_=c
c
EEEE     L ?8 	  !#53?=_=
       	  )#53#c
=_=   	  !3#53Qc
c=_=      	  	'7%'m,J+m9wl++l  /" 	  '7m+J,m9l+K+l    j^ 	  	7%'7m+,m^l++l / j"^ 	  	'7vm,+m^l+K+l   L h8   !53#5!#53*`=_==_=c
c
     3#53#53cc
c
=_=`=_=   u h   %#5!5!44c
c494_4    uhF   !5!534A
4_4     L ?   !!%#54c
c94_4     L?F   53%!!
A4_4    %    !%!!W7 r     %    !!!W7     %    !!,7r<R      %    !!cr<R    !%    	vdxx    !%    	u    !%    	!	uv}x   !%    !	x     %  	      # ) - 1 7  #535#5#5#5##5#5#5##5##53#5#5#5##5qrrrrMrqrrrrrrrtr$ttttrtttttrttr      *   #73#737#73#7!#!!!!!731U#G GL#LQL-Hykyy_   A   %3!#737#73#7!3#3#k*Sj*yy*xxxxx     !  32676&+!!73#73#7!2#!3pxp3L3R''a㭑3yTyy 'V % -  3!.+32673# &7#7! %326&+V43*RV;x(0aL^.]S/T&7z.-X`yÌM͕X^""3y!      #73#7!#!#7!#3#476#!73!3 bRb Vydwwyyy
yyFydy  FD =  654'&#"!#7!>32326735>54654'#"'&54KKUk!t }S}G-\C8.&t;xI|80~G/,4x}_TjCl=J-
341p:1%$];vo	P`a/V'
 "   V   #73#7!##7!#	3#476+3 j-@Vyduyyy!yy3Fy  FDH 2  "&'&/!#7!#7!3275>5464'7Lm,P 	0K+Q29b*t;xI.B"dxyy%:<P]:$];vo	P`a/L   3   #7!#!!#476#!&g5,F{YydhA6    Iz 5  	3275>54654''&'&"'7&'&#"76267D$|Rx&t;xIuQNptc#|RxNptc	Dp:1%$];vo	P`a/V^CI.y	DCI.   <  "  7>'&  6  7!#3!7 '&'4+կC+%)qF(JMvK7|/gi2σp   VV	 !  373#7!!#!"&'733267#3Vhfg/SQ.<Laj(gݾyyBy""^Xy     n    ###7!#!#7!nz؎?1f1wy\yy1y     "   64'&   '!73#7!6 ++C+%׷FpJM(vK87|W/c΂σp   (  D   )#7!632#64&#"{uY\,q%BSy'?:/   g  
N   654#"!!#7!#!632	]([!k{sN,eGA"?\yyk>'   ;  CD   4####7!3632#6g4&7`tfui9P\,qqbFfyH;L'       !3!73#7!#!73#SJw  b%dyyyy
    v  i' 	  !#7!!9aU
yHy  fC  5  %676766'&#"&'&'&767673%62 !lEN2&Bl/cH82 "$L>%,(&V*y2mI8JDbNcpk-HQ]oB!E6XA,~fpgnGNvX6E!>     !  6&#"#7>323!7#"&'332672PEYp-QU۾"Ѣ$I|W9>q@Lt#sLNyok	=US̵     lD      &"26626&"      L}$J}fM)4}Cgx3g~eED⸺+)   '   !#3!3!!#3!!#j8y KyLy; y'yy!2  Xt  T      ###7!##7NY[lpD  DD*D    BV F  !26764&/&'&5476$! #6&# !"'2673"./&'&'3tNF.+W
@(IH/,b^
(C.{$@ơuOA17:#"DvrOV+78dBf5>XOS474nHm8B4{$mL1D.M]1[bb  V>   2673"&/&#!7!#!2J{%@¡/XN|g5+FaKC=pI1DTL}hAp     j :  6?>7>7!!7!!!>7>7>7>7!!ad>s<0,Z,\2P/[Z]2:)G.c)G.&1ZX\3$|	3`	%l"^  AAQ =  ! 7!3676&'.7>7!#73>7!>767#?>7!L<0
/
}|	ad	s /ZY\22`2r*y;;<ANn##@	8-] 
\!7Q  B O  # 7!'!7676'3&767>7#!!!>7>7!>7>7
)4h 5	'A0-Z-]3'L'4n/P4"%.P4'0[Z]2
#&g@Nn?#C?u?b_opo	
-a-a
$y#     L  >76#"3>767>3 #"7>7>7>7#3>?3#	U
h@=
RS?/+'C-21>d_!0,1(I.-GI+'uPQ)I-.+	.>QQ&> P.BB{#[
;B.     D 4   73#!!!>7>7>7>7!77+,:0Z[\2=w=`s<,K2`,K1)1]Z]3D7yg2' X#y""B!   ZC I  !3$>73#!#73>7!>7>7!>7>7%23#[:0\[]2JJ.91[[]3=v=n@s)0\Z]3"+2[[]3 A	e:CB&sg]z#y#}g       G  <  %>7!7!>7*"#!!2637!>7>7%3# <;<0[[]2=w=J&1Z[]2**-=#.Q59)2[[^3oXYkE5]zr"|g     Z    D  %67!7!.#7>7%6?>7>7!>7>7!3#"=x>0[[^2=v=;0[\^2JJ$0ZZ\2	?B)0-\-]3*2[[]3rаP\k]x$x#}g2    . )  !3#!#73>7!>7>7!3#:0[[^2!nt+2Z[]3s3X3g]y"|g   VCh 	 2  %67&?!>7#737!>7>7!7>v=_c>u=1-Z-]2

	<(2ZZ\3 бNy.N>s?Z?@q"s    M    J  %67#!7!3#!#7>7!>7>7!>7>7%3=y>0[\^2=v=$0-Z-]3
=0[[^2=w>nAs)0[Z]3"*2[[]3pаPnkg] x%x"|    ;  >7>7673#"7>7>7>7%!!>?!2'S'
/8p8? 6k5?N% "E!(-VUY/2.TUX0	LFAss$T

bU',5$a4_^Ll: 	
;`		A    V  h 0  >7>7%3#!3#!!>7>7!!::<"-%ce m;_c>w>mpH<lC&t"|g2g Y	
  Y D  )7!7.'?>7!>767#?>7!6?>767#73>7%3#y#/[Z]3
 /YY\2EE0YYZ2?}?v
0-Z-\2>x?rsjj\V]
V]|g       9  !7!%7#73>7!>7>7!>767#73>7%3#o%0[Z]2&7b<
Us74d:
0Z[]3>x?rqk;	 K]	EX]|g   Al ?  &?!#73>7!>7>7!>767#737!7+&1.Z.]3!;;?"ߓrl@sF!1YZ\3OO*
GA		#L#	]	*Z*'ZFC7o7   Z   E  !3#!7!#73>7!6?>767>7#737!>7>7!3#Z:_c=x>p	%0[Z\2@t0-Z-\2JJ
G(2\[^3
sgk][[[Fq"}g   V  f ,  !7!>7#737!>767#73>7!3#&0ZY\2
H0ZY\2>z?rqk:QQZFX\|g   BD;  ;  676'>7#673!! 7.#73>7!>76327
	ORHGLLM&(`<rpr=H)3 	 cc !#A~		
ft$I$%d\1d!     Z;g L  &?!7!.'?>7!>767#73>7%6?>767>7#737!7ĕ1[Z]3$0[Z\2?B
0[Y]3>x>x$0-Z-\3JJ	3;n_k[T]2Y1\<-Z-~  Dnp  " Q  >76#">7#>732?673!&?#"7676->7!>7632]Y%II={=A_6BHI~5`_`5]RPO'(H"|BA)*#	cu
	aTG
SHZ/tXTf{8N360

*/0    B C  %7!&7!#73>7!>7>7>7#737!>7>7!3#,OMQ.%+~*NLO-sQW)O)G*NLO-!Rhek4m%Q$Y]ssXX[7*[*k     V  d ,  !23#!#73>7!>7>7%3#@0-Z-]2>w>>>s)2[Z]2!p~g]y!|g  VDh -  &?!#73>7>767#73>7!77$0-Z-]2?q!0YZ\2?w?pDd] U]*R*   VDf /  !"'77267>7!#73>7!>767#73>7!ߊl<?aH7		0[Z\2?r0YZ\3?w?p7{J.-)]U\   |Co .  !!&>7#737!>7>7%3#;0\[]2:s:'ν%*2	H(2[Z\3"p%L%&P-Fi[?n#|g   D *  )!67#73>7!>7>7%3#G;0[[^2JJ#4;q	",2Z[\3pdr#4~]x"|g       M  E  >7>767!>76#""767>767%#737!>7#>3 3#*:u9C'2b1?	_1_1O^!J"H6	W5k63	#qd<9TD21/	slj0)A1D^^'<[? M-Rf    D E  !23#%0!&67#73>7!>7>7!>7>7!3#:_c=w>?90[\]2pp
*&$p+2Z[\3$2Z[\3pg{PMռ[e]y"y"|g    BC C  !"&'465!3 76! 7>767"&#73>7!>7>7!23#!3 R0^[/6k7A+1Z[]3>`d+X,cs+7AÛ
4[x"f3}}
X    D 8  !77!3273#>7#73>7!6?>767#73>7!3#$0.Z.]2$YA6=r0-Z-\3?w>ook ]U]|g2     6B$  >  >7%!7.'%7#73>7!6$7>7!89jjk;!31-z $@"..1Os!F	J0/0

*IFI+Mjj%mm-] #G#/7      	 Q  %#!7!3#!!!6?>7>7!6?>7>7!>767#73>7%3A
"1.Z.]3	;_c=y=o:.1f#./%0-Z-]2#`d?y?ro2kf~
2&c
	$v$V[|   mCL +  %'!	67!!>7>7!3#0Z[\2={=XY=%F(2[Y\3 qВO~jefq"g   )  +"76?7>767676#"!!632RJ
eb!@@?/,`,6Bbv17 	:	
4,b$}
   VD 3  .767>7!#73>7!>767>7#737!JPC	
0-X-[2?q0YZ\3JJ	G	D`Y).']]\\>$    WD: 7  !7!&?!#73>7!>7>7!>767#73>7%3#$A,i!*J0Bs$(F. G(H.@~AwqSҦ	]	*\*	e]|g  F  _  >7>7>7#>3 3#!67676#"3#"767>767#>73>7>7!!P$-2j10A0[6-S&5:M&9q9B$XW#	!&J&.8geg9L1W8,Xj2,[D>{TUmf!1#C\jjX
   n{   %  #"&76$?367673#"&7>32i((2()(H"yNOZONZS""-BNppNOpp<\t   {@    #"/&#"56323274632#"&ۿe)__)eX=>XX>=XrD9Ψ9D>XX>=XX     !#!7՚x   +{   #7!! 8xo    N   3!!ɱbx       !73!՚cx      $  %#"&7>320#6&#"0#7.76$32NOZONZ;y]nw^:(((9i٢OppONpp͂+"  Ji   /XDj     X     '+   U  
&   ,    %;E  4 :   2654&""'7>3232?36  &54?6?"&!3+ȢTs+PD	(IlEN@{lWa4U`TecUp2jV /_~=zq$x(ت)$&}'Ry   y
}  (  %#!   ! 3#7!#3!72#"3jQFFyx%j@@|@@{y"ͷjkη yyyyEHIE  ZD    )#    ! 3#7! &"32Z=33xFb6d6pq+)hy    	  "  !73!3!73#7!#!33!73!3wzK?kj(E?Ϲ#;y"yyyyyy1y  D  (  7!7#"'&767#!#7!!676! &#"3267DnVL"Z]>0,9=0$4_]u$r{q1y<J   V>   T)D   *      #733%мtt        #733$"t        #733s$^ht  w      #7337$4t  ;      3#733#%켼t   ;      #73#3%2мt    ;      #73#3e$n    ;  M    #73#3)$h    ;      #73#3$4    ;      !#73#3%!   ;     3#!!v%F  ;     3#3!!<$F̼    ;  M   3#3!!x$F    ;     3#3!!$Fd    ;     %!!3%     	  #7%3'|3II    ]q 	  37#'7iII    f 	   >2"&3#7fSb:	Sb:W+??+->>)kk   R 	   "&7>2#73Sd8Sb:W+>>+,??jj  OSw~d   V $  #73#7!#!#7!#!"&'733267!3 bRb /SP-<Lak(wyyy
yy""^Xy    r9" "  3#7!>32#"&'732676&#"r }R}(<E,q.BIL0Uk!tx}_TߣPG^{+i  ` ,  !73!#!#7!!!"&'332676&+7!3
g.II.d94`))v@yB,NyuwTy((Hfy    `q  2  #73!!!"&'#"&7!3267332676&+7#@b@Q4_()v<!ہ$N~:@O(\':B+yJwTy((5uDVZ@   -  6$!2#6&#"6733"'32673# $76%&)v:v@y/y&V|֜!'y@v*(+@((|Oiavxj((̍t   (   $76$7.76$32#6&#";#"32673/&  3v};y
?vm]|4B6qk%IŢ'u##{lvx캀x      ?33267!7!3#!"&	!G.<Lag'0Se'^XsZ"h     9'    37!3##"&'73326?b <E,q-BIMsZ}PG^{}h   +*  ( +  !'&767632'6%733267!7!!!!"&	!@!$
6.AD& !7{ZJ.<Lag'd0Se	')>61+8B8Y(Bx0.^XsZ"h     V'  * -  '&767632'67!!!#"&'7326?h3
+%36 	,cH:bu <E,p.BIL!1+("-5,G!5_&%sZ}PG^{}h   '   #7!!73#7!3!73#78y ;yLyKP'ߦΆ{z{y5y    cD -  332676&/.76$3273#6&#"!"&'#8q	~l:eu"T?qAqsl|
3Oǁ#c=qHw}KF@E%*&mnEB6>%5#    _  
   !  !73333!73!3!73!3!wz=h(E?N&E?Ϲw#;y\yy1yy1y#;    GLD  % 2  "7676! 63 7!7#"'&#"3267&#"3267,+0,,,,Dnéz9<1$4_\v$9<1$4_\v$ =X=r{oo<J<J    _	   %  !733676   ! '&'!3%2#"wz<;-5[FFYϸ@A|@@|#;y\3*ddhy\BKLB    GD  $ 5   '#"7676! 63  &#"326726674'&z,+07]3?9<1$4_\v$p2 
1 
oo 77kAJ<Ju c4"`b6#a   3	  %  !#!3!73#7!#326#7!# ! '&mѠK`ʤTrC66BxU!;Lyyyyyy ݓh  GD  -  &#"3267"7676! 7267!3!7#"'I9<1$4_\v$,+0vy	Wk!tcQ}Gl<J }C(6TRy_Thh  _      !733	#7!#!!3wz=}XϹ#;y\O8yyy  GD  %  6#7!7#"7676! 6&#"3267RBuʾ n,+0,,`9<1$4_\v${Ĥ =s<J _       !3!733!#7!#!!!#P1Dz=5}V17^#Vyy\yy@y#x>    )D 	 3 9  7#"3267#"&76$;76&"#7>3 !67#73#!676)c'9ORz0Vn #bj+q-fqpm'??&uf{'J^NldlTP?|Wc""jgـ{wCĤ# V  !  #733#7!##"'7332?!3!xz=c@%Ԇ-<jF,wϸgwy\yy<D^Xb>;y#;    G9lD  >  &#"3267676! 676'7% #"'732767"'#'&I9<1$4_\v$K,0,,sB;ML$Zn_+q.+ukpGVUl<J={EkolyfZ3+E
HYhh~    	j   -D     7    #73#737#7!#3##7!#	3!31 9-?vypyyp!yy3yy  F  .   )#737#7!!!#7!3!+g| Psytgx߉yyyX        !73#7!#%!73}3 l͞L-Hyyyׄ        %3!#7!%[Kyy6x   .   &   '&#7376 3#%276!!'&#s'R%Q|n?+6?*)4>~kθ4.εѡ̸y  ?D   '  '&7#73676! 3#%2767!!6'&#v=q:pA:-h%	"rqA7w؀w㆔p`VWaR``R  V>   &      6    '2#"!2#"][FF@A|@@|\@A|@@|ddUBKLBBKLB    T)D   %     !263   !"''26&"!26&"?33y33pd5b6pd5b6+)ttuuq     V    3!73#7! #:LZQF@Q[4{2^yyy6p  6V'    !#7! 6#	9QU9
+R!']XyN     GV+   #6#"!!!#7!6$32+G"c\}](hx}yywp     IVD   #6&#"!!!#7!>32=qALt$Q)S
%J|W3US̵\yVXyok	    v     #3!73!# -Hyyyu     3'   3!#57!yw    GVg   #7!>323#"&76&#"G]cݡ5u7_Ɋ-q0=z6VyaUycfN    IVD   #7!>323#"&76&#"I
R}(@?[,D1Uk!VXy_Tyco]i    GV+   #6#"!#7!6$32+G"}](hx}ywp     IVD   #6&#"!#7!>32=qALt$
%J|W3US̵9Xyok	     Y   7!!32673!  %67UBܕLhFFL(Nfeg   W'   !!32673# 7#u+ Q1/Rk%I43'y'dπx&   F   !#7w%%      #ll+      u      #73#7!#7!#3#4+37
Vyd?yyyyF?7By   sDD 7  6&#"!#7!>32326735>54654'#"'&471UkA@"uR}([D8.&t;xI|3iNNy_T-
341p:1%$];vo	P`a/V'
@Y    <   !  "#6)#!#7!#3!73!3!73WX$FzAbRb  ww \Y[fy
yyyydyy   # '  73#737#7!#!7#7!#3#3!73!3!7!ydyyyywyyyydyyBBywC KeBBeeBBeK CCPCe    ,  ' 4  32673 ''&547> 6 '6'&"2>'&"Hii1LmR;	 JSiMl'	
;;##"+GGP4R4'tC@d]=<R;\#)>>&5`) //45jT4jS    '   #73#7!!#7!#!!#3$V`Wy5ya&yyyy     h     )73!#3!!#!#3y%d%{])D3yl`y   o  5    )73!"&76$3!#3#"3a''TR9{pzyyjy   	   #3!!73#7!#3#7	 ޾yyByyysy    m   #73#7!#3YB y{yyy    _  
   )!3!73!!#7!#z'2}{ٲ?Zyy\yy   5  #".7>732>76.'.?! z$<^Z9sZQaD
+B##@*N\#	*<!9vUA{ܦbGՏB{p/>KYi9QTWCAC[e&2&JJK%A   *&  D  >.#"2>%#".7>7>76.'.7!RNSzZATWRzY=x")"3Mjn !"C-@.+'^eQgLLe[OPJYY?{cE/G"-	)@`H&
/<L2(b@X     S  6.#"32>%#".7>7>76&'".7>32":e@Rv[CxQG|hS~`MZmB x|^^5	?K*I:'Pzad'=zlV57ro65ovok4*eeiG$$Fg\e1'NNL$XR, %0>+=pU21VtC]A0CYp       f  >.#"32>.#"'>7.67>32>32#".7>7.#"5u!?<?j[M#$N>=`PC=DiI0inq8$NZi?bf>	D_{i@YA.\dxi*#uyt#$yE)09#?cQC !7r5 7|sc?HʉFDˇm,7s%E6 .I5/#&pLPa7.;@]^kxTFƀܯ& -=SnG     ?  #".7>732>76.#".7>32눂΅2C[jjb%0.)'\z=eP:<W0+]S@$57bCxn}ǁ0wr8Hi8`P?.f.DY8=aE>S18P3(:+=WuLob-6kf  U  #".>732>76.+732>76.#".7>32}GkE"aS#2%=_9:cTG.Q3P'Y#MIC&J73i\I-62H){n@r^;c}BJUzI3Lbx}fId9HV3Sl@ WxeW'Kb<aE%
._T-1
0BW;ee3+AZsGa`>Eo    ' e  6&'"32>>.#"32>%#".7>7#".7>32;>7:.#"7E72)0%</%0!&S=:oeX#'E5V_CZxU|%$EYg4VMiVInN23kXa
<&$
)= =kCdV(J<>M+,Mw89{ŋ=yo^F([mkyS+bJ{j)6^JYQ&4CJJ ;S 	TP%k    K6  M  6.#"32>%6>32>32+732>7>.#"#".*4JUPt]O*)7<JQhY65-a]R^sF"0>yq(i/tzy4')+@')<L,.2Q~jjslNwIH%7$IhQ#Ҟi<
!=3oܹS    ] 5  #7>7>4.#"#.>7>32lB{ɟ!LjRC$  F<SeQ$&!!'"=BIhwxk6`-AqDp >m`ƹr]Ż}JJ      O  #".7>732>764.+72>7>.#"32##32)zM|`:
5K[_](%)\KOpVD#%?#*+ehdS=
$\b`(TsP`R	ma(މ;6RqX(J@6+	L/7F3R~U,0qpI,?MX0(9#->&Q"IsPOrWC R     
v   #72>7>.#"!7>?6&#"!7>?6&"#.#"'>7.7>32>32>32
`d><n_N9(*MB56(.7:a/SC37!7Oh%E@90'&^i]S!xOLX*^`a/Xe;!avB(WOD'dga&$RND%^fi/@zgQ-r`<D~odp=9_E2P/AA/P2v#A^;2N/AA+),v{+Ibov8ڗ_:
';ZX,UB(;_D$[y\˖e=.>$'B10B%$>,$Fg    -  F  64.#"326%#".7>32>76&#".67>3 '5^9;n`O0\@u%h܇)"]|G HHE-q5dS;Gbw~}7=2(m(8qp}r6ӝ{6\aiH%STNU9-;!0++:aN<'   C  X  6.#"32>%#".67>3232>7#"&'.#">32!5Y35qiY$0\<$GFD@;!]uYTyX+ [~c(MH@)BCLT.0$Ydo:@v92V'!-\UHJ}c<yZ2lxi&(Gplȓd<:aǂnd/
$1N-T@&(!1Q<9G>F9, ?`    ` \  .#7>7>.#"!7>76.#"#.67>32>32$ZjvG0F92 ?FO0!78%(8:0VI8t}(+t/M18ZUZ9'03!1dXD $ Vl\8dR>)cgf-cޫfT(8,Kf?b7h*NmB0/O,AA,P.BmN*QwĜvS1Qq~Ƣs> 9N.-N9!g    P  #".7>732>76.+732>76.'.?3$φ1 __	" 1X;JqWA0O+'+ZN;#Ga2Hi2"C[2>xfD]z?POՎGEHu^J"0960hT#/dpom51J20;#4YI.0	(@\ALkI,Py     = R  #".7>7>7".'7>76.#32>73-{А?Z}Q'0^E6k]ILV\VJ;)6VyQFaG@2 /"	!?1J5w||:4pmdM2fCCu\SmF+I)4G2QnCAmSc;K[76dS;9W9 1<$RG.-       3 q  #72>7>.#"!7>?6.#"3#.7>3232>7#"&'.#">32>32os'CtaL>@!YXL	'"075:fVE$6`:'hK
_5,P$Gvd&hMA=v=&G Is`&EW7iZG,jrr5qu|j̱)Kr^{H=iQzRXQBBQXRz7S<(
H~bs.%ryQ$-g>X81Sl<"5I--I5?    P  #".764.#"#7>3232>764.'3.7>3"]xJL|b=


+63SrJOq@/_EFmZL%+*	En^792$)-]C?o_= <XnK%)/
0%.Q=#.ZYyb*$fRoK2.5B,3gS5)%!"Nh  CU  o  6&#">%32>76.'.7>7.7>32#"$&7>7#"&'3267,-%!	.M#&%$ ,	Cmh}`)5gRH[:N0bL2I`97'	GbyDHtJ
#8N5bY~o&JdX .OJ?w.'
>4
-"!+	=4~Wkyxo,NLFq!*s;:`
;Vj8,[VN'6D)G_:9_H'8,%&y{^c8zrJ+jn	   l k  #".7>732>76&#"7>?6&#"#".?32>7>32>32~sɉ7eo 80(2O-EhK2"/=U '-/&>?K3:Y7+ X
MW\)3);CN-UV(tҡ_HzRwPq=YrA_U'!7HML ZIAI7GNF@BGNG2BL DW1!>X7OZ,
$-."+cx     n  >.#"32632>7>.#72>7>.#"#".7>32>32#".7D6>_M?D>v8zfxW-QO"QjJ7C413:%	Tp@FlR/KgT*ecX*\XMq`QEsIᠢ8wo54lsxv;Ve5DhJaK1m{\zH*"Qai/YmM)*NnXOsS/1#!1?|xczW<c]_tA3gi   6 J  #".7>732>7.#".7>327"."#'%$LsJBVhsy="=6+Gc3FoT;&HJN-?7(*I/dQq=>?>;i
ЈC&=YxMImO5#m(>[?D\9@iFQE`<"- 0&GZtMIpK&QH   ]  '>7>.#"!7>?>.#"#.#"'>7.7>32>32^ݖMgF/A86\J5'%+'"J;7TGB$-Riz>V~M8pqo7O˂MBN_<tv(/v7]J7)gru8rd]@-pVlx?,Ok?-R*BA*S-?kO,/sr`I9%Poq;`C%{:3'	1z@6I)(H7 5  	4  B  #".7>732>7#".7>7332>7!"{̊:ih):)	&RBrZ@&RSQ%l6HssJvZB83!NOM?-	lTюH=p_Sd?t8FO%7V=*6ibR|j/$"KbX0jZ:-<DH#  5  U  6.#"32>%#".7>326.#"#76.'&>32>322T6Ao]K!QC<vm``!z&#u$LJDk /4.($8 .4	by<-PA2LSW+UV ``uB-gyt5&iCΏLUݙP#/"2,O@SSDO(3.7^`i8)56)9aF   T G  >76.#">32+732>7>.#"!>32#(3G(?9/NH]Fx_7c~1^ b,7>@=,S75tgMF%yo1idV<

HkHp6& 1 9T6488ZlkpL&0Ntfxd+4Si5n+ .:H)'F<3  : a  #".7>7>72326732>76.'>76.'.73cM,'%LhO2aB04-F(%9RC:!b @p~hQ)F+@D>F.N>.	
&0"	'6+U=5^e?zW%Job?cHHWDEF	,cڂvw82jtN_8T/Ld;$:0)4<E*);,"2?N25_RFAc   *  6  >.#"32>%#".7>326.#72$%R:3icX$&VB>lZFt~_vP*]yJX-U<hI(ԇ4z4#cnx@8i<qQ4YzJffD">3X<M,5ga    CX B X  >32>32%>76&#76.#">32#".7%32>7>.#"2`U,L>/NV\.;iE#-!>8.-50%k(ZZW$uƂ.#&҅-!c&8H(CkYI!*XA6ukXFa9(65)7g`/J-3(ODSSDP)2"U/#P݌UL΃RdjE(5tyg-Bu     ~H    .#"32>7%#".7>732>76.'.7#".7>32>7>'#"&'732>73%:B=&$DKG/:%H3_}:>~mHpO(;-#3R1:m[C,(
J?F_6;ZyK?< 27r6Tw+=;62(/;>C#$/M@4BP_:WjJ/,C^xJPhLl4E]AIe?>\?HnWF :>A&26*EW,4\D'C6=p31%%ZXCD("!&1BFA7ϾKVt    F  32>7>.#"#".76&#"#7>32>76$7,]MJy_E!$XG3obIQ)}x	3<UrLD_2=*_04;DhO:;xhT.FtT/PYh)%Ca<LR{5#iTo@?p\*
"2:<[       #".7#".72>7>.#"'>76.#".7>32>7>.#".7>3232676&'UwMlD9vsm/YyB
	#;Twc?hC	#1";/",-#rIw	%1<#*&JS 6#JjLZ~MAl
*%),)Tho,CkBn%&=]9TKb2t?iK*z0
!,4EpU&VTL:#1Tp?	3&-HY,5eN/+]Y>C~nQ/(>M'[^\(=iN-].GjO?2 	>R>DW1'SXPsc-5p<Z\=J]S/Yf~     k  #".7>732>7>.'232>76."+2>76.'.732"}X`7
PnB3	7_>=dP<"(*C	=:1	'++EDE8
NzQiY	!;+/	A\n51`G#<Wn?5]>чv5-GiZ<`J3S*=._~L "KyWIhG*V=6-%2 SQ!:/&);gQ(9]D$;0'!/A-/A. D[s     F  u  6&#">#".76>3232>7>.'>7>.'>7>.'7u9#6.)E^?(4-@N+"6"	*=K)!4VxHn4q{*Km9KW+IiD137;3]6>#237:3U:D'C6V^i*KG0ZTP.@Z*K?4-6?%"7.&5FZ:WS)9]y$QQtZJ'JikC%%9D.K6 
#$!w{!-5+	!#Ud"6C!ghR,=q      G  6.#"7>%3.'#72>7.676>324.WQ3TJB?@"'$A!+v{s:PctE'POL$=vsV++ORXi}N<"OV[0Ma/+mUWvP!@AkՊZ[?~m(	1E-2*	@\O"#P     =( V  2>7#".7>?32>73#".7>732>76.+7ac6w%bh)	'$
C=40Hz9#S]eil4cz;({O|_9(*"	*TADqZC	3Z<%DSH;/:eM%4)!h7*!*Ki?աsP3(gzLڅ:1MkU2|CRX"CtV22`XUzI     k  #".7>732>7>.'>76.#"#".7>3!!"32>7>32v;:foAe;3]P=PEBB;J@aH/-/~DF@7W7]}R(\"=3' @LU-3geb-;]7G^-no87kf8aWP&w%-2Nc9"FiGlW(
.E%@Y50@&3XB[xE&=->/DqUx<Bd !   M  32>76&#"'#!".76$%7&$.7>323>7'#3>7UuwG
1U<$F;*	9K]5^O;Xs=C0҆3447逐kF825/H35835/i <]@AY9"3#>@3VBKc<51a]3gm]`1(Xc=    V  >.#"32>".76>327!>32#"&'#732>76.#"3}"+;C"VTH5M*,SNI1և)+/~3<?!EEAV*/:p5 ]ы(%
*I-*RRQ(#/Y:#הMDpR:S56xNZ'h_"kN|`N 0B'
QpF!;ߣy6   D/  % X  676'>7#6777>767#737!>7#>323!+"7>7>7>7%	$ @ B%$FGF$@~AEv0	4:z>FFQ	KFF0	16b`b6?EZZ
343$[&,#Cee		N((#W	[?2Ô?'=<bw@    u       M & 0  '"3   54767&'&47676 767 264&"}/AYAAGU(jNGVP?+%S$Q2>;AAP8#_0G._  .9UD J      !  3!7#"'&547#7!3267%7!^R}G.ly	Xk!to$+$'Ry_TiDl=J+y}C(5T   V * .  %#"&'# 47#7!3267!3267!3!7!Ղ_slyYX}byXY}b|$$chja?L+yg4h4Ry    z   46232673#"&zyx>>1W5clfՃ[dL)H86 {     4>232673#"&^l4A0`eJvNۛXMBP*(n    { C  #67267#7376$32#654'&#"!76$32#654'&#"!!#67267)|P^"UK-pEP^"UJ,pEP^)|P^5<[88sy9&s9&sy5<[88s   {n '  #7376$!2#654'&#"!3!!#67267#(Car/p.4i˷)|P^yL	J(-VRy5<[88s    {   #7376$)3!#"3##67267#)L2X)|P^yLeyVy5<[88s    { G  !#67267#7376$32#654'&#"!76$!2#454'&#"!3!!#67267P5)|P^"UK-pEP^(Caq.p.3i˷)|P^5<[88sy9&sL	J(-VRy5<[88s   { @  #67267#7376$32#654'&#"!7676)3!#"3##67267)|P^"UK-pEP^G2X)|P^5<[88sy9&sLOfeyVy5<[88s   { <  #67267#7376$!2!!32673#"'&547#7374'&'&#")|P^(C]i'/)'~:@N(A*~(' R}f<[88syLyuY-"VZE,\2Ay99-     l  7654'&#"3#654#"!"'3327654&/.5476$32&5476$32!!32673#"'&547#7EQ:{5q{n#9qvw2ec"?A
!3>>
'~:@N(A*~'% 1'?ew3A!%5V#)<)bu;%*P"' -))+0+'5yuY-"VZE,\2Ay    "	Z  0 4  %32767654'&#"3>32376$7654'&#"	"-NOCB"-ON<y"nw.SR:(3'
Tqion6*888O6*8p͂I.J,6\\+5/Rn"B  ^   $    B %   UK &     '    0 (    % )   U~ *     +     ,  V6 -    8 .    + /    	 0     1   U 2     3   en 4    9 5   t 6   _  q 7   a 8   m   9   g  	 :    w ;   g  [ <     =   FD D   2* E   ED F   l G   DD H  { I   .9UD J   E  # K   E   L  9 M   E  / N   E   O   r  D P   r  PD Q   ED R   3V~D S   kVRD T   r  D U  WD V   cq W   _' X   *  * Y   =  ' Z    ' [  9' \  z ]  ^      B    %    ]    0           U        8  ^      	           U           U_       _  q   g  [   U      w      !    "   )     TA*  V'+   TV',   %	-   36.   MU/   VMD0   T,1    !M'2    '3    4   @V'5   u  _'6   8U7   ED8    '9  V'D:   zUD;   V'<   w !d'=   C'>   V	'?  9D@   V'A   WP'B   LF   ED`   f,J   **[   MV*N   .R(D\   W'O   5f   !#f    D *     67632"$6762"'844<;##32xw43x$$hx$?x+,,+x++Vx+,,+xV+     !#      %  7676323276?3#"&/.#"CCd=IB)nBBe"@/40){CB'!,zAB+    R   #i       !#'#4 4 &   373߫      #."#67632T{d>>{6bc7:6CB  P   327673#"&P{d>>{6bc7:6CB     6762"'43x$#43x$?x+,,+x+++   R     !#!#xb     #!#c lo'&  o      '   %3!#73#7!3#]CZyyyVy1y * 	  462"&*NO,h`7h`    8'  '  #454'# 5476732#7&#"32>7V,n7+N~'*Pd	'E'S8sV %L7M3Ty^}
	?8"9v'&     @Kw'&  o   { W  !#"&'7332767#7376$32#654'&#"!76$32#654'&#"!!#"&'7332767S2#UK-pEP//"UK-pEP^"UJ,pEP^#UJ,pEP//5\[9&9:y9&s9&sy5\[9&9:  {n /  #654'&#"!3!!#"&'733267#7376$!2?p.4i˷"UK-pEP^(Car	J(-VRy59&syL   { '  6$)3!#"3##"&'733267#73I)L2X"UK-pEP^seyVy59&sy   { Y  !#"&'7332767#7376$32#654'&#"!76$!2#454'&#"!3!!#"&'733267P5#UK-pEP//"UK-pEP^(Caq.p.3i˷#UJ,pEP^5\[9&9:y9&sL	J(-VRy59&s  { R  !#"&'7332767#7376$32#654'&#"!7676)3!#"3##"&'733267K:#UK-pEP//"UK-pEP^G2X"UK-pEP^5\[9&9:y9&sLOfeyVy59&s   9 &  #73#7!#7!##"'&'7332767378ds<BAF,qBc0).?yyyyNW

($5.7By  !{D 
 C T  64'&"03 63232673# /#"'&5476$!37654'&#"#7>327#"326?p32+z?Ls*Nwfoq|ZB#!):{g+q-eqZLm	YVt%&BUDQ"GztL&'W?k&+?!I0CWa""&!nq0$10pg          <>"wwvuuvu   rf&  ' q  v  3A)J'oX q P>  MPGq' q  oc  A1J' q X>w#X  gAu'o#Xp  gAMu'o#Xrx  M\u'p q   M\u'rx q   )?.J' q U>q(S  gAv'o#Xt  )?q'oYcq(S  \bO't)twfw  )?u'q(Sp  cxo'pys)u  co's)ury  cY'qVs)u  b>c'q`vP  g>Iu'vPp|  g>u'vPr]  g>	)'vP<  c's)uS   ^ &pJp Z 9D # . :  $!2!#!"'3 # &767&767&'6&#"2632676!"IChC%ZI*K%wL1#|5\]c5aHư |y])"H~[NnTNyfSwwuu"#7N;R       %733267##7!#!7+!"&g.<Laj(jG
 /S'^X!!\yyyZ"    J   )3!	!#!(R{R%{@/`L    nD    %26&"   !  ;#"&opd5c6[33y33t qy3,T q+)\#'   '   #7!#3!733!73#7!#\ JgwyyFyyyyyy    )  '    )!xq'R`   TD     #3373#726&"   !  lk>klk>kpd5b6t33y33j>jjjp q+)       '     73!3!#!##3373#7yO>OyDyOOy,k>kk>k0jfjjfj>jjj   '   	!73!	!#7!~ujYT)jj4' j   i  '   #  !#2#3!737"$$37#"26&&:o:G\GU:3\GU:3'yZիZyyZ+ZxXX%X+X    (D "  %!73!7>76&"!73!.76 32 Ry/ (!$Uʥ$9( /y,8*Q̝ϻQ@
  r   c  u      u   R  u   )' '  6&+7!"3!73>3!!"&'73326f{.~ ^oa/6z=7,x	#XD`\wGyyySDhh  a   #7!#326#7!# ! {66{BC\yyyy &U     8   #  #73#73#7!$3#!'376!%6'&+$sf Ko鉁Ad!AOfyP
yy.} k  ( 3  7367632#7!3#!7#"'&547!3276?6'4'&#"C`8pc[=pdC
mi@?$ hn>5)y܃QSx<y)SQd06dC7"XSQy^C='SXL    	 *  .#" !!3267#7!# '&7#7367 !2CB5ITCOpF)G Ʊr&&xNLϚi@A   9D  / 9  &#"!73676! 3#"&'73326?#"767!32767@r/"oqNMyOY0 jm2q7<'z+$=mh@>%l<Bvyy`ly7dz!!	\/3y SQ    ^n,_<      +    +f	)              3f d              f         +   T x9 s  / - R T ] _    $ w  & 1 |      5_^ U UP U e  _ 5 m g5 g N      / F 2 E  Dq . E
 E E
 Ew r rV E 3 k7 r c  * =% %     r    L :/ O     R T  ?       @     P    eX PX PX  5_5_5_5_5_58F0^ UP U U U U U     gd/ F/ F/ F/ F/ F/ Ft 8 E D D D D
 u
 u
 ]
 uV ! rV EV EV EV EV E V     5_/ F5_/ F5_/ F^ U E^ U E^ U E^ U E   D D D D D U . U . U . U . E E
 u
 u
 u
 l
 u E E u
 E
 E Et EP rP rP r  F  UV E UV E UV E	q V9 F7 r7 r7 r     _ c _ c `              g = g gq 2=^ ^ B 1= " V O V q B* X F  F
 w P  U TV F	 t {=  J /  V S    Q gAA A A J .\ 1 1\ 1{
# 	i D
5 q5_/ F
 u UV E           ]5_/ F5_/ FF0 8* V * " UV E UV EA{
#  /	LP58/ FF0t 8V5_/ E5_/ E D D
  
 D UV D UV D7 q7 q      _ c D FS - 	  5_/ E D UV E UV E UV E UV E g a  w@ '@ x5U^j7 ' Ha  75_ D } l7 . */ ( T( / 3  _ P ' E ]B R 3~B S  1 T f   F r
 
 
E 1 L
 Z] nw w w   V T}  E` O7 J7  r | 
qR  O W >o N  + >    h  h h\ Z V " '   Mh  h  '	o M 6 a } eP F] FL D, l& gO O   87  V 'j o+ o T T 9F 	 -           6B  ?  B      # \# ] \ 	  8  *W @V g( ( - *      w  ;  m n  p  B    |                   
  z  >                      .    3  P    t    r                    ,    9          b      w            5  g  i    \      z  '                #  ; vl $7 Fj oj E  h  - E -  O5_  W	 WK W W WJ  5_5 U5_P U _ g U5N  g( T 3   ( TPH V % 3 M V T  @ u 8V ER z Vb w = C  W  V E  WV T f  W  M W= < |V z^ | j8 "G ^ V 3= R . E U E - ^ U  ^ ^ U^ 6 ] V 	
G~ O
 G U^ U _~ O N5N 
%
X U	] 
L/ F PA D r F D
r  1  j s   sV E r 3 Ew r7 >m  w 	  %$ G ) F s^  D D > r E
 E
 u  s Fj s   @f s	 
  :	  } b U8 FS  fS  f <c d v r

r   18 sGj sT U ,q s	W s
^ U E _	# s g a g aO - GN U H E

r J 
/ F/ FF0 8 D V ] V ]

r   1A   UV E UV T UV T] ) F~ O~ O~ ON   r	$   " 	
  e k9 g = & rE )  4	&  l	   9Y 8  (O ?  F ) > O ]w (v " P! A uFX  >  =p z6 i # r F$ :|0 6 x  # G H Zgly Y  z qR w RR q _ + r  F  y *T  y1 	 _9  } | s	( X K  j z   ] }  eX ;  	 ~7 S    )  I% 7S Q G Hk F< F P P & XB j  x kK ,u. _  ! A (	e A (A 7 ] # ?qa 8 V !"t X Tff} hV E " T HV |9 \ V V h h  q. Oc ?> + >j! 6}BB^ <M 6[b4a `c 6 0 <e z AD ,D \ 5 7 X / L \K 5K A >f n0 V r  Mk 2   Y v) X   
XS e\  UP ,O )  XS eZ UPW 

 @ 3. (o
 k Mj b 6K 8+ @- f 1t f f V c #p t     V. S3 % ) ` RC L  7 1L    V    D        5_/ E 1 1 1^ U E      D D D D Dq U . D E D D D
"
 u D D D
 .
 .
j
w qw rw rP rP rP qP r UV E UV E UV E UV E 3 37 q7 `7 `7      _ b _ c ^ - _          5 l )5 m * g = g = g = f < g =55 g D b < EqqqV %5_/ E5_/ E5_/ F5_/ F5_/ F5_/ F5_/ E5_/ F5_/ F5_/ F5_/ F5_/ E D D D D D D D D
 D
 @ UV E UV D UV E UV E UV E UV E UV D TV F TV F TV F TV F TV F               g f f f F( T( T( T( T( T( T( T( T5_5_ } 5_5_ 3 3 3 3 3 3W E 	[ }	[  t           
 }
 
; t
w 	 	    [ q  x     } d t   V EV EV EV EV EV E4 z 	 }	 G t         ` 	| 	 &  W W W W W W W Ws & h
% }
1 o t / { ( T( T 3 3    V EV E   W W( T( T( T( T( T( T( T( T5_5_ } 5_5_          
 }
 
; t
w 	 	  W W W W W W W Ws & h
% }
1 o t / { ( T( T( T( T( T( T( T5_5_}5_5_     O      } W	 } W     m       }K W     f    RR   g g& } WH  O O  W W W W W } W }J                    V                               R TR T W  V  V      T C   T C  / d/'' d                          x x  
 JJ
J 3 3 e     / -V O    `    / - M/ ls   d                                                1 , 	  , H  9 9 9 b zb H 1 P   	  , H  9 9 9 b zbD , L M \, l0 VV g r H Y( ( v	=Q   U o	   E F   Q58I    9 ^H 9H 9 9H 9H H 9H H H 	H 9H H 9H H H H 9		5 m	3 n3 n3 n	5	^ U
 E E	 E E * *
 * * E

 E E w r

 L
% L^  -^ |H 1 L u L.  . L u n W L u L d L u L u L u L L_-   u   F F u u L Z L L u F F L L u L u L.  . L u L u L u u u L u u   u Z u L u L L u L L u L! 	F L   ) )     / /    ] & & B HB HB B`      < 0 55   1 1! 1                                                              /   N  N O l   -   x          ]           ]   s   s s   s    7 < < < < < <xxxxxxxhh''''''''''''''''''  '  '  ''q''''''''''          l l   g g ' ' ' '   ' '   ' ' ' '   ' '   ' ' ' ' '  p  p r p p p p p p p p p7 p7 T         p p' ' ' ' 3     ' ' '  p     p p p p' ' '     ' , , , , , ,    , ,S,, ,,,C, ,X, ,B, ,X,   ,x,     u 	      D ux Lx ux Lx Lx ux Lx Lx ux Lx ux u@  @,@,@,@,@,@,@,@@,@,@,@,@,@,@,@@,@,@,@,@,@,@,@@,@,@,@,@,@,@,@@,@,@,@,@,@,@,@@,@,@,@,@,@,@,@@,@,@,@,@,@,@,@@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@@,@,@,@,@,@,@,@@,@,@,@,@,@,@,@@,@,@,@,@,@,@,@@,@,@,@,@,@,@,@@,@,@,@,@,@,@,@@,@,@,@,@,@,@,@@,@,@,@,@,@,@,@@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@,@, u u L u L u L uTT L u L u d n d d d d d u d u d L u L u....   .         W++-ME i O O i, L L L u L u L F F F F u u u u F u F u F  u  F F F F F F u u   u u u L u u LB L u u L LP6   A 1 3 3   / / L L / / L u u L L    ' ' ' '  
' F F < V5  (	 g ;; v= fV  B/  An C M  Z  Z + V M + V Y   Z) V) B Z  ' V+ V) V2 | |  s Bi  6  m( , V WP    + N  J / 
 
 U %
L y4 Z
L;  V{ T *      w  ;  ;  ;  ;  ;  ;  ;  ;  ;  ;  ;  ]6 f6 R6 r E      + 
h_ G
_ G	X3 G _ G _ ) G^  - FS  ( V{ TL 6 G7 I v
 3 G I G7 I^ Y WFs N P~ s<. , h o
I_  *I '  _ w K ] 
 	 - C2 `   3  C !   	 5g : * C h   F  YD ; 
 uV  . w   z  	+                                                                                 5_^ U UP U e  _ 5 m g5 g/ F 2 E  Dq . E
 E E
 Ew r rV E 3 k7 r c  * =5_5 U5_P U U _ g U5N  )( TPH V % 3 M V T  @ u 8V ER z Vb w = C  WF L E f=  MR . W  6  D      R    4    P    R  
 l
 
*
"
 @	+P !   rx3xMxxgxgxMxMx)xgx)x\x)xxxxbxgxgxgx  P V n! )V T  io r  R 0a         
  7  9k  :  ;k  <   & : $ 7 $ 9k $ : $ < $ I $ W $ Y $ Z $ \ $  $  $  $& $' $: $ $ $ $ %  & % & & % * & % 2 & % < %  & %  & %  & %  & %  & %  & %  & %  %  & %  & %  & % & %: &  &  '  '  & '  ' 9 (  & ) 2 )  ) 2 )  )  ) $ ) D ) H ) R ) U ) X )  )  )  )  )  )  )  )  )  )  )  )  )  )  )  )  )  )  )  )  )  )  )  )  )  )  )  ) ) ) )1 *  *  & *  -  - a -  -  . k . $ . & . 2 . 8 . : . < . H . R . X . \ .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  . . .0 .1 .: / 7Y / 8 / 9 / :u / <} / \ /  /  /  /  / } /  /  /&Y /0 /:} / / / / 1 } 1 } 1  1  2  2  K 2  2 9 2 ; 3  3  3  3  3  3 $k 3 D 3 H 3 R 3 k 3 k 3 k 3 k 3 k 3  3  3  3  3  3  3  3  3  3  3  3  3  3  3  3  3  3  3 3 3 4  4  K 4  5 7 5 9 5 : 5 < 5 D / 5 \ 5  5  / 5  / 5  / 5  / 5  / 5  / 5  / 5  & 5  5  5& 5: 5 5 6  6  K 6  6 6 6  6" 7  7  7  7  7  7 $ 7 7 7 D< 7 F 7 H 7 R 7 Uk 7 VD 7 XD 7 Z 7 \ 7 mk 7 }k 7  7  7  7  7  7 < 7 < 7 < 7 < 7 < 7 < 7 a 7  7  7  7  7  7  7  7  7  7  7 a 7 D 7 D 7 D 7 D 7  7  7  7  7  7a 7k 7k 7!D 7#D 7& 71D 7k 7k 7k 7k 8 D 8  8 D 8  8  8 $ 8  8  8  8  8  9  9 k 9  9 2 9 2 9 $a 9 2 9 DD 9 HD 9 L 9 RD 9 X} 9 \ 9 a 9 a 9 a 9 a 9 a 9  9  9  9  9  9  9 D 9 D 9 D 9 D 9 D 9 D 9 D 9 D 9 D 9 D 9 D 9 D 9 D 9 D 9 D 9 D 9 D 9 } 9 } 9 } 9 } 9  9  9 D 9 9D 91} 9 & 9 9 & 9 :  :  :  : u : u : $} : DN : HY : L : RY : U : X : \ : } : } : } : } : } : N : N : N : N : N : N : u : Y : Y : Y : Y : Y : Y : Y : Y : Y : Y :  :  :  :  :  :  : Y :Y : : :1 : & : : & : ;  ; $ ; & ; 2 ;  ;  ;  ;  ;  ;  ;  ;  ;  ;  ;  ;  ;  ;  ; <  < 2 <  <  <  < $} < & < Da < HN < L < RN < XN < } < } < } < } < } <  < a < a < a < a < a < a < a < N < N < N < N < N < N < N < N < N < N < N < N < N < N <  <  < N <N <1N =  =  I  I  I  I  I A I  N  R  U k U D U K U K U K U K Y Y Y 2 Y K Y K Y K Y K Z Y Z 2 Z K Z K Z K Z K [  \ < \  \ K \ K \ K \ K m - m 7k m&k } - } 7k }&k  7  9k  :  <  I  W  Y  Z  \       & ' :      7  9k  :  <  I  W  Y  Z  \       & ' :      7  9k  :  <  I  W  Y  Z  \       & ' :      7  9k  :  <  I  W  Y  Z  \       & ' :      7  9k  :  <  I  W  Y  Z  \       & ' :       &       &   &   &   &     K    $  9  <             :  }  }         K    9  ;     K    9  ;     K    9  ;     K    9  ;     K    9  ;     K    9  ;  D    D      $            D    D      $            D    D      $            D    D      $              2        $}  &  Da  HN  L  RN  XN  }  }  }  }  }    a  a  a  a  a  a  a  N  N  N  N  N  N  N  N  N  N  N  N  N  N      N N 1N     &                  <    K  K  K  K      <    K  K  K  K             &    9   &     &    7Y  8  9  :u  <}  \          }     &Y 0 :}      7Y  8  9  :u  <}  \          }     &Y 0 :}     O 7Y 8 9 :u <} \     }  &Y0:}	 }	 }	 	   & 7 9 : < D / \   /  /  /  /  /  /  /  &  &: k D K K K K 7 9 : < D / \   /  /  /  /  /  /  /  &  &: k D K K K K     K    6   "" "  K" " 6" ""& & & & & & $& 7& D<& F& H& R& Uk& VD& XD& Z& \& mk& }k& & & & & & <& <& <& <& <& <& a& & & & & & & & & & & a& D& D& D& D& & & & & &a&k&k&!D&#D&&&1D&k&k&k&k0 D0 0 D0 0 0 $0 0 0 0 0 : : 2: : : : $}: &: Da: HN: L: RN: XN: }: }: }: }: }: : a: a: a: a: a: a: a: N: N: N: N: N: N: N: N: N: N: N: N: N: N: : : N:N:1N? ? } $} } } } } }  7 9k : ;k < &: $       $ 9 9 : 9 ; 9 < 9        9: 9 7 9 : ;  <D Y Z D&:D - 7k&k - 7k&k k $ & 2 8 : < H R X \                                    01:        ,   ,   ,   ,   p         d  <  X      ,  `          P      t    4      |    	@  	  	  	  
  
|  t    <       X              \      @               H      H          H  t                        X      h    @    0      t      x     8     !8  !T  !  "<  "<  "  #   #l  $   $  $  %  %  &  '\  '  '  '  (  (  )@  )  )  *d  *  *  +0  +\  +  +  ,4  ,  ,  ,  ,  -P  -h  -  -  -  -  .T  .  .  /  /   /8  /P  /h  /  /  /  0$  0<  0T  0l  0  0  0  0  1  1  1  1  1  2  2t  3(  3@  3X  3p  3  3  3  4h  4  4  4  4  4  4  5  5(  5@  5  5  6  6,  6D  6\  6t  6  7`  7x  7  7  7  7  8\  8t  8  8  8  8  8  9  9  94  9L  9d  9|  9  9  9  9  9  :  :  :  :  :  ;   ;  ;0  ;H  ;`  ;x  ;  ;  ;  ;  ;  <  <   <8  <P  <h  <  =   =x  =  =  =  =  =  >  >   >8  >P  >x  >  >  >  >  >  ?  ?X  ?p  ?  ?  ?  ?  ?  @   @  @l  @  @  @  @  A  A$  A<  AT  A  Bh  B  B  B  B  B  B  C  DH  D`  Dx  D  D  D  D  D  E  E   E8  EP  Eh  E  E  E  E  E  E  FT  F  F  F  G  G   G8  GP  Gh  G  G  G  G  G  G  H  H(  H@  HX  Hp  H  H  H  H  H  IP  I  J  J  K8  K  L,  L  M0  M  M  NX  N  Ot  P   Px  P  Q  R  R  SL  S  Th  T  T  Ul  U  V   V  W<  W  X  X  X  X  YX  Y  ZP  Z  [  \(  \  \  ]  ^   ^P  ^  _8  _P  _h  _  ``  `  aD  a  b0  b  c  c|  c  dx  d  e\  e  f(  fH  f`  f  f  f  g  g$  g<  gT  gl  g  g  g  g  g  g  h  h,  hD  h\  ht  h  h  h  h  h  i  i  i4  iD  i\  it  i  i  i  i  jl  k  k4  kL  kd  k|  k  k  k  k  k  l  l$  l<  lT  ll  l  l  m0  m  m  n   n  ox  o  o  o  o  o  p  p   p8  pP  ph  p  p  p  p  p  p  q  q(  q@  qX  qp  q  q  q  q  q  r   r  r0  rH  r`  rx  s  s  s  s  t,  t  ux  u  vP  v  v  v  v  w  w  w4  wL  wd  w|  w  w  w  w  w  xl  y  y  y  z  {\  {  ||  }  }X  }  ~    x    l        \      |         `     h  x          <    8    X      l    D    |    h    T    \  t      <      l      $      X    X    h          @      @    p    t        <    <      L      |    d     \      |            $  t    D    $        \        $    H    $    D    @      h    l        0  \        t      0  X                4  H  t            @  t             t    <  |      4  `          $  8  L  `  t                   h  |    ¤        (  d  Ð       <  P  d  Č  İ      X  ŀ  Ũ      8  x  ƌ  Ơ       4  H  h  ǐ        ,  h  |  Ȑ  Ȥ  ȸ  <  X  t  ɔ  ɴ      H  ʬ    H  d  t  t  ˈ       0  @  ̀        H  ̈́  ʹ            4  L  d  t  ΐ  ά          ,  <  L  τ  ϰ        l  |  Ќ        T  d  t  ф        Ҍ  Ҝ  @          (  @  X  p    հ    ּ  ט    \      l    <  ڤ  0  @  ۈ    d      |  <    ߤ  X  p          <    \           T  ,      |    <      (        `  p        t          L          ,  D      h  x        X    l          $        \  l           |          \  l  |            l    8                \    X         H  X  p    X        (  8  H  X  h < L  H   D  @  <    l     , <  	` 	 	 
  
 
0 
 `     x <  $ 4   D \ t  t   ,  @  l h     8  D  @  8  (    8    d  (   (   !< ! "X " " " " # # $@ $ %H % &< &p & & & & & & ' '  '0 '@ 'X 'p ' ' ' ' ' ' ( (  (8 (P (h ( ( ( ( ( ( )  ) )0 )H )` )x ) ) ) *  * * * * +p + , -  - - - - - . /< / 0 1 1 2@ 2 3 4X 4 5  5 6 7 7t 8` 8 9 :  ;  ; <4 < =T = > ?h ? @t AD A B C C D E( F F FH Fh F F GL Gp H H I( I J  J J Kp L< L M< Ml N( N O8 O P P Q R R S T@ T UL U V Wd W XT Y  Yt Z0 Z` [ [ \< ]( ] ^  ^8 ^ _ `l ` a b b cd d( d e$ e f g` h\ i  i jL j k| lx m4 m n` n o p p q r sP s t uP u v w w| xx y0 z  {  |0 | }   | \      d  X   X  @  (     t h    ` T  x   \ <   `  0  t  ,     4   H    d  X     d    P  @   \   t  $ d   X        H    d   L   4   `  8 x  ,    <  T  8  t ( ń  h  ` Ǹ    Ȭ  x  h ʜ  ˨  ̨ d    4 H \ p ΄      l |   Ѹ 8  <  D  h   p  T ׸ $ ` ؘ  ٌ  $ \  ۜ  ܈  8  x  X  \  $ h  T  8     , \         8 P h        ( @ X p         0 H ` x         8 P h        ( @ X p         0 H ` x         8 P h        ( @ X p         0 H ` x         8 P h        ( @ X p         0 H ` x         8 P h        ( @ X p         0  4     , D \ t       $ D \ t       $ D \ t        4 L d |       4 L d |       $ < T t       $ < T l        , D \ t        4 L d |   < T l        , D \ t           4  L  h              , D \ t       $ < X t        4 P l        4 L d |       ( @ X p        4 P h        ( D \ t        , D T l |       	 	$ 	< 	T 	l 	 	 	 	 	 	 
 
, 
D 
\ 
t 
 
 
 
 
   4 L d |       $ < T l        , D \ t        4 L d t       4 L d |         8 P h        $ 4 P h          8 P h          0 H ` |      ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( D T p        L x    L    <    <                  < T t      D \    4 l     , l         D  D  D  D  D  D  D  D  D  D  D  D  D     !H ! "X " #@ # $ $$ $L $ $ %, %@ %T %h %| % % % % % % & & &0 &D &X &l & & & & & & & ' '  '4 'H '\ ' ( )| *, * + + ,` , -` -x - - . . /D /T / / 0 0\ 0 0 1 1L 2$ 2h 2 2 2 2 3 30 3P 3p 3 3 3 3 4 40 4P 4h 4x 4 5 5d 5t 5 60 6 7$ 74 7 88 8H 8X 8h 8x 8 8 8 8 8 9  9  9H 9` 9p 9 9 9 9 9 9 :x ; < <| < =P =p = = >  >0 >x > > ?( ?\ ? ? @( @ A( At A B BT B B C$ C` C C D0 D| D E0 E F$ F F G G@ Gx G G H  H| H I  I< I J J0 JX J J J J K  KD K` K| K K K K L L$ L@ L M  M M M N8 Nt N O$ Ol O O P@ P P Q Qh Q R Rl R S S\ S S T  Td T T UL U V Vd V W@ W W X$ X Y Y0 Y Y Z4 Z Z [H [ [ \0 \ \ ]D ]x ] ^ ^8 ^ _( _ ` `T ` ` a aL a a a b< bh b c@ c d  d d d e eD el e e f fX f g$ g< g\ g g h i iX i j  jh k k\ k l l| l m< m m m n( nt n o4 o p pX p q( q q q r rH rl r s< s t< t u, u v\ v wD w w x4 x| x x x y y8 yh y y z z@ z z {0 { { { |( |L |t | | | }0 ~ ~@ ~ ~ (   T p     8 \ x     <      x    $ @ \ x     8 t   4      4 X |     , L l      , X     , T     0 X      ( T     $ L t    $ X    ( \    < p    @ d     8 d     P |    4 h    @ t    X    D    D t      < X t       $ L p        8 T p       4 P d 0        @ \       <     `  $  l      D d       < h      @ \      4 `      $       x  0    8 t  @     H       8      ( d    p   0 p  p  p     0 \ x     |  0  h  d   Ǹ d  @  ,  ˔   < |  < Μ  8   d   0 X Ѭ   |    , t ԰  D Հ ռ  L ָ ָ     , H l ׀ ל ׸    @ l ؀ ؜ ظ    @ l و ٬     L x ڬ     8 \ ۀ ۬    < ` ܌ ܸ   , P | ݠ   , P | ި   < p ߬     8 \      < `     , P |    , P |    < p     < `     < h    0 l     H |    L    , h      8 \      < `     , P |    , P |    < p     < `     < h    0 l     H |    L    , h     < `     < h    0 l     H |    L    , h    ( \    , X    0 l    L     ,  h      X    `     4   L     h   $ l  0  	 	L 	 
 
 
 x   0 |   H   ,   ( |  D   P    l   |  \   , t   p  $   <  <   8   0  X     H x    @ t    D x      8  h       ! !0 !L !h ! ! "$ "d " " #  #4 #P #l # # $\ $ %, % & &d & ' ' ' (< ( ( )  )@ )h *  * * +( + ,  ,P , , -X - - - . .L . . . /4 /l / / 0 0@ 0l 0 0 0 1  1P 1 2, 2 2 3T 3 4X 5 5x 6 6d 7 7 8 8T 8 9 9 9 :< :l ;$ ; ; <P <d < = = > ?| @ Ax B, C C D ED E F G HT I4 I J K L8 L M N O Pl Q Q RD R S T Ut V0 W  X X Y0 Y Z [ \L \ \ \ ] ]@ ] ] ] ] ] ^ ^ _d _ `T ` ` a  a, aX a a a b b0 b\ b b b b c  cH cl c c d dL d` d eP e f g$ g h hh i i i j k k lP m m n$ n o o p8 p q| q q r rp r r s| t t u4 u u v, v v v wX w x xX x y y4 yT yd y zh z {` | |d | } }p } ~ ~ t d  @ , L @   8         < l  x  @ 8     4    $      ( 8   `  <  T  H $                                  , < L \ l |           , < L \ l |           , < L \ l |           , < L \ l |           , < L \ l |           , < L \ l |           , < L \ l     |      X     8 d      , 4 ,      $ @ \ x        < X t        4  h ¨  Ä ð 0 Ę  \     Ɣ  t  Ȭ d   	 +     @   +       >        _        :       _                            V                    	%       4 #        r          	       	     	  G  	  0k  	  0  	    	  ,(  	  "m  	  :  	 &  	  h  	   X  	    C o p y r i g h t   ( c )   2 0 0 3   b y   B i t s t r e a m ,   I n c .   A l l   R i g h t s   R e s e r v e d . 
 D e j a V u   c h a n g e s   a r e   i n   p u b l i c   d o m a i n 
  Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved.
DejaVu changes are in public domain
  D e j a V u   S e r i f  DejaVu Serif  B o l d   I t a l i c  Bold Italic  D e j a V u   S e r i f   B o l d   I t a l i c  DejaVu Serif Bold Italic  D e j a V u   S e r i f   B o l d   I t a l i c  DejaVu Serif Bold Italic  V e r s i o n   2 . 3 7  Version 2.37  D e j a V u S e r i f - B o l d I t a l i c  DejaVuSerif-BoldItalic  D e j a V u   f o n t s   t e a m  DejaVu fonts team  h t t p : / / d e j a v u . s o u r c e f o r g e . n e t  http://dejavu.sourceforge.net  F o n t s   a r e   ( c )   B i t s t r e a m   ( s e e   b e l o w ) .   D e j a V u   c h a n g e s   a r e   i n   p u b l i c   d o m a i n . 
 
 B i t s t r e a m   V e r a   F o n t s   C o p y r i g h t 
 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
 
 C o p y r i g h t   ( c )   2 0 0 3   b y   B i t s t r e a m ,   I n c .   A l l   R i g h t s   R e s e r v e d .   B i t s t r e a m   V e r a   i s   a   t r a d e m a r k   o f   B i t s t r e a m ,   I n c . 
 
 P e r m i s s i o n   i s   h e r e b y   g r a n t e d ,   f r e e   o f   c h a r g e ,   t o   a n y   p e r s o n   o b t a i n i n g   a   c o p y   o f   t h e   f o n t s   a c c o m p a n y i n g   t h i s   l i c e n s e   ( " F o n t s " )   a n d   a s s o c i a t e d   d o c u m e n t a t i o n   f i l e s   ( t h e   " F o n t   S o f t w a r e " ) ,   t o   r e p r o d u c e   a n d   d i s t r i b u t e   t h e   F o n t   S o f t w a r e ,   i n c l u d i n g   w i t h o u t   l i m i t a t i o n   t h e   r i g h t s   t o   u s e ,   c o p y ,   m e r g e ,   p u b l i s h ,   d i s t r i b u t e ,   a n d / o r   s e l l   c o p i e s   o f   t h e   F o n t   S o f t w a r e ,   a n d   t o   p e r m i t   p e r s o n s   t o   w h o m   t h e   F o n t   S o f t w a r e   i s   f u r n i s h e d   t o   d o   s o ,   s u b j e c t   t o   t h e   f o l l o w i n g   c o n d i t i o n s : 
 
 T h e   a b o v e   c o p y r i g h t   a n d   t r a d e m a r k   n o t i c e s   a n d   t h i s   p e r m i s s i o n   n o t i c e   s h a l l   b e   i n c l u d e d   i n   a l l   c o p i e s   o f   o n e   o r   m o r e   o f   t h e   F o n t   S o f t w a r e   t y p e f a c e s . 
 
 T h e   F o n t   S o f t w a r e   m a y   b e   m o d i f i e d ,   a l t e r e d ,   o r   a d d e d   t o ,   a n d   i n   p a r t i c u l a r   t h e   d e s i g n s   o f   g l y p h s   o r   c h a r a c t e r s   i n   t h e   F o n t s   m a y   b e   m o d i f i e d   a n d   a d d i t i o n a l   g l y p h s   o r     o r   c h a r a c t e r s   m a y   b e   a d d e d   t o   t h e   F o n t s ,   o n l y   i f   t h e   f o n t s   a r e   r e n a m e d   t o   n a m e s   n o t   c o n t a i n i n g   e i t h e r   t h e   w o r d s   " B i t s t r e a m "   o r   t h e   w o r d   " V e r a " . 
 
 T h i s   L i c e n s e   b e c o m e s   n u l l   a n d   v o i d   t o   t h e   e x t e n t   a p p l i c a b l e   t o   F o n t s   o r   F o n t   S o f t w a r e   t h a t   h a s   b e e n   m o d i f i e d   a n d   i s   d i s t r i b u t e d   u n d e r   t h e   " B i t s t r e a m   V e r a "   n a m e s . 
 
 T h e   F o n t   S o f t w a r e   m a y   b e   s o l d   a s   p a r t   o f   a   l a r g e r   s o f t w a r e   p a c k a g e   b u t   n o   c o p y   o f   o n e   o r   m o r e   o f   t h e   F o n t   S o f t w a r e   t y p e f a c e s   m a y   b e   s o l d   b y   i t s e l f . 
 
 T H E   F O N T   S O F T W A R E   I S   P R O V I D E D   " A S   I S " ,   W I T H O U T   W A R R A N T Y   O F   A N Y   K I N D ,   E X P R E S S   O R   I M P L I E D ,   I N C L U D I N G   B U T   N O T   L I M I T E D   T O   A N Y   W A R R A N T I E S   O F   M E R C H A N T A B I L I T Y ,   F I T N E S S   F O R   A   P A R T I C U L A R   P U R P O S E   A N D   N O N I N F R I N G E M E N T   O F   C O P Y R I G H T ,   P A T E N T ,   T R A D E M A R K ,   O R   O T H E R   R I G H T .   I N   N O   E V E N T   S H A L L   B I T S T R E A M   O R   T H E   G N O M E   F O U N D A T I O N   B E   L I A B L E   F O R   A N Y   C L A I M ,   D A M A G E S   O R   O T H E R   L I A B I L I T Y ,   I N C L U D I N G   A N Y   G E N E R A L ,   S P E C I A L ,   I N D I R E C T ,   I N C I D E N T A L ,   O R   C O N S E Q U E N T I A L   D A M A G E S ,   W H E T H E R   I N   A N   A C T I O N   O F   C O N T R A C T ,   T O R T   O R   O T H E R W I S E ,   A R I S I N G   F R O M ,   O U T   O F   T H E   U S E   O R   I N A B I L I T Y   T O   U S E   T H E   F O N T   S O F T W A R E   O R   F R O M   O T H E R   D E A L I N G S   I N   T H E   F O N T   S O F T W A R E . 
 
 E x c e p t   a s   c o n t a i n e d   i n   t h i s   n o t i c e ,   t h e   n a m e s   o f   G n o m e ,   t h e   G n o m e   F o u n d a t i o n ,   a n d   B i t s t r e a m   I n c . ,   s h a l l   n o t   b e   u s e d   i n   a d v e r t i s i n g   o r   o t h e r w i s e   t o   p r o m o t e   t h e   s a l e ,   u s e   o r   o t h e r   d e a l i n g s   i n   t h i s   F o n t   S o f t w a r e   w i t h o u t   p r i o r   w r i t t e n   a u t h o r i z a t i o n   f r o m   t h e   G n o m e   F o u n d a t i o n   o r   B i t s t r e a m   I n c . ,   r e s p e c t i v e l y .   F o r   f u r t h e r   i n f o r m a t i o n ,   c o n t a c t :   f o n t s   a t   g n o m e   d o t   o r g .   
  Fonts are (c) Bitstream (see below). DejaVu changes are in public domain.

Bitstream Vera Fonts Copyright
------------------------------

Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. Bitstream Vera is a trademark of Bitstream, Inc.

Permission is hereby granted, free of charge, to any person obtaining a copy of the fonts accompanying this license ("Fonts") and associated documentation files (the "Font Software"), to reproduce and distribute the Font Software, including without limitation the rights to use, copy, merge, publish, distribute, and/or sell copies of the Font Software, and to permit persons to whom the Font Software is furnished to do so, subject to the following conditions:

The above copyright and trademark notices and this permission notice shall be included in all copies of one or more of the Font Software typefaces.

The Font Software may be modified, altered, or added to, and in particular the designs of glyphs or characters in the Fonts may be modified and additional glyphs or  or characters may be added to the Fonts, only if the fonts are renamed to names not containing either the words "Bitstream" or the word "Vera".

This License becomes null and void to the extent applicable to Fonts or Font Software that has been modified and is distributed under the "Bitstream Vera" names.

The Font Software may be sold as part of a larger software package but no copy of one or more of the Font Software typefaces may be sold by itself.

THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL BITSTREAM OR THE GNOME FOUNDATION BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE.

Except as contained in this notice, the names of Gnome, the Gnome Foundation, and Bitstream Inc., shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Font Software without prior written authorization from the Gnome Foundation or Bitstream Inc., respectively. For further information, contact: fonts at gnome dot org. 
  h t t p : / / d e j a v u . s o u r c e f o r g e . n e t / w i k i / i n d e x . p h p / L i c e n s e  http://dejavu.sourceforge.net/wiki/index.php/License  D e j a V u   S e r i f  DejaVu Serif  B o l d   I t a l i c  Bold Italic         ~ Z                               	 
                        ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a                                    b c  d  e        f     g      h    j i k m l n  o q p r s u t v w  x z y { } |    ~       	
     !"#$%&'()*+  ,-./0123456789:  ;<=>?@ABCDEFGHI  JKLMNOPQRS    TUVWXYZ[\]^_`abcdefghi jklm  nopqrstuvwxyz{|}~  	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~         	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDE FGHIJKLMNOPQRSTUVWXYZ[ \]^_`abcdefghijklmnopqrstuvwxyz{|}~ 	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ 	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ 	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ 	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~                 	
  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~            	 											
																						 	!	"	#	$	%	&	'	(	)	*	+	,	-	.	/	0	1	2	3	4	5	6	7	8	9	:	;	<	=	>	?	@	A	B	C	D	E	F	G	H	I	J	K	L	M	N	O	P	Q	R	S	T	U	V	W	X	Y	Z	[	\	]	^	_	`	a	b	c	d	e	f	g	h	i	j	k	l	m	n	o	p	q	r	s	t	u	v	w	x	y	z	{	|	}	~																																																																																																																																	
 








	 























 
!
"
#
$
%
&
'
(
)
*
+
,
-
.
/
0
1
2
3
4
5
6
7
8
9
:
;
<
=
>
?
@
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
[
\
]
^
_
`
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
{
|
}
~
































































































































 	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ 	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~   	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~	sfthyphenAmacronamacronAbreveabreveAogonekaogonekCcircumflexccircumflex
Cdotaccent
cdotaccentDcarondcaronDcroatEmacronemacronEbreveebreve
Edotaccent
edotaccentEogonekeogonekEcaronecaronGcircumflexgcircumflex
Gdotaccent
gdotaccentGcommaaccentgcommaaccentHcircumflexhcircumflexHbarhbarItildeitildeImacronimacronIbreveibreveIogonekiogonekIJijJcircumflexjcircumflexKcommaaccentkcommaaccentkgreenlandicLacutelacuteLcommaaccentlcommaaccentLcaronlcaronLdotldotNacutenacuteNcommaaccentncommaaccentNcaronncaronnapostropheEngengOmacronomacronObreveobreveOhungarumlautohungarumlautRacuteracuteRcommaaccentrcommaaccentRcaronrcaronSacutesacuteScircumflexscircumflexTcommaaccenttcommaaccentTcarontcaronTbartbarUtildeutildeUmacronumacronUbreveubreveUringuringUhungarumlautuhungarumlautUogonekuogonekWcircumflexwcircumflexYcircumflexycircumflexZacutezacute
Zdotaccent
zdotaccentlongsuni0180uni0181uni0182uni0183uni0184uni0185uni0186uni0187uni0188uni0189uni018Auni018Buni018Cuni018Duni018Euni018Funi0190uni0191uni0193uni0194uni0195uni0196uni0197uni0198uni0199uni019Auni019Buni019Cuni019Duni019Euni019FOhornohornuni01A2uni01A3uni01A4uni01A5uni01A6uni01A7uni01A8uni01A9uni01AAuni01ABuni01ACuni01ADuni01AEUhornuhornuni01B1uni01B2uni01B3uni01B4uni01B5uni01B6uni01B7uni01B8uni01B9uni01BAuni01BBuni01BCuni01BDuni01BEuni01BFuni01C0uni01C1uni01C2uni01C3uni01C4uni01C5uni01C6uni01C7uni01C8uni01C9uni01CAuni01CBuni01CCuni01CDuni01CEuni01CFuni01D0uni01D1uni01D2uni01D3uni01D4uni01D5uni01D6uni01D7uni01D8uni01D9uni01DAuni01DBuni01DCuni01DDuni01DEuni01DFuni01E0uni01E1uni01E2uni01E3uni01E4uni01E5Gcarongcaronuni01E8uni01E9uni01EAuni01EBuni01ECuni01EDuni01EEuni01EFuni01F0uni01F1uni01F2uni01F3uni01F4uni01F5uni01F6uni01F7uni01F8uni01F9
Aringacute
aringacuteAEacuteaeacuteOslashacuteoslashacuteuni0200uni0201uni0202uni0203uni0204uni0205uni0206uni0207uni0208uni0209uni020Auni020Buni020Cuni020Duni020Euni020Funi0210uni0211uni0212uni0213uni0214uni0215uni0216uni0217Scommaaccentscommaaccentuni021Auni021Buni021Cuni021Duni021Euni021Funi0220uni0221uni0222uni0223uni0224uni0225uni0226uni0227uni0228uni0229uni022Auni022Buni022Cuni022Duni022Euni022Funi0230uni0231uni0232uni0233uni0234uni0235uni0236dotlessjuni0238uni0239uni023Auni023Buni023Cuni023Duni023Euni023Funi0240uni0241uni0242uni0243uni0244uni0245uni0246uni0247uni0248uni0249uni024Auni024Buni024Cuni024Duni024Euni024Funi0250uni0251uni0252uni0253uni0254uni0255uni0256uni0257uni0258uni0259uni025Auni025Buni025Cuni025Duni025Euni025Funi0260uni0261uni0262uni0263uni0264uni0265uni0266uni0267uni0268uni0269uni026Auni026Buni026Cuni026Duni026Euni026Funi0270uni0271uni0272uni0273uni0274uni0275uni0276uni0277uni0278uni0279uni027Auni027Buni027Cuni027Duni027Euni027Funi0280uni0281uni0282uni0283uni0284uni0285uni0286uni0287uni0288uni0289uni028Auni028Buni028Cuni028Duni028Euni028Funi0290uni0291uni0292uni0293uni0294uni0295uni0296uni0297uni0298uni0299uni029Auni029Buni029Cuni029Duni029Euni029Funi02A0uni02A1uni02A2uni02A3uni02A4uni02A5uni02A6uni02A7uni02A8uni02A9uni02AAuni02ABuni02ACuni02ADuni02AEuni02AFuni02B0uni02B1uni02B2uni02B3uni02B4uni02B5uni02B6uni02B7uni02B8uni02B9uni02BAuni02BBuni02BCuni02BDuni02BEuni02BFuni02C0uni02C1uni02C2uni02C3uni02C4uni02C5uni02C8uni02C9uni02CAuni02CBuni02CCuni02CDuni02D0uni02D1uni02D2uni02D3uni02D6uni02D7uni02DEuni02E0uni02E1uni02E2uni02E3uni02E4uni02E5uni02E6uni02E7uni02E8uni02E9uni02ECuni02EEuni02EFuni02F0uni02F3uni02F7	gravecomb	acutecombuni0302	tildecombuni0304uni0305uni0306uni0307uni0308hookabovecombuni030Auni030Buni030Cuni030Duni030Euni030Funi0310uni0311uni0312uni0313uni0314uni0315uni0316uni0317uni0318uni0319uni031Auni031Buni031Cuni031Duni031Euni031Funi0320uni0321uni0322dotbelowcombuni0324uni0325uni0326uni0327uni0328uni0329uni032Auni032Buni032Cuni032Duni032Euni032Funi0330uni0331uni0332uni0333uni0334uni0335uni0336uni0337uni0338uni0339uni033Auni033Buni033Cuni033Duni033Euni033Funi0343uni034Funi0358uni0360uni0361uni0370uni0371uni0372uni0373uni0374uni0375uni0376uni0377uni037Auni037Buni037Cuni037Duni037Euni037Ftonosdieresistonos
Alphatonos	anoteleiaEpsilontonosEtatonos	IotatonosOmicrontonosUpsilontonos
OmegatonosiotadieresistonosAlphaBetaGammauni0394EpsilonZetaEtaThetaIotaKappaLambdaMuNuXiOmicronPiRhoSigmaTauUpsilonPhiChiPsiIotadieresisUpsilondieresis
alphatonosepsilontonosetatonos	iotatonosupsilondieresistonosalphabetagammadeltaepsilonzetaetathetaiotakappalambdauni03BCnuxiomicronrhosigma1sigmatauupsilonphichipsiomegaiotadieresisupsilondieresisomicrontonosupsilontonos
omegatonosuni03CFuni03D0theta1Upsilon1uni03D3uni03D4phi1omega1uni03D7uni03D8uni03D9uni03DAuni03DBuni03DCuni03DDuni03DEuni03DFuni03E0uni03E1uni03F0uni03F1uni03F2uni03F3uni03F4uni03F5uni03F6uni03F7uni03F8uni03F9uni03FAuni03FBuni03FCuni03FDuni03FEuni03FFuni0400uni0401uni0402uni0403uni0404uni0405uni0406uni0407uni0408uni0409uni040Auni040Buni040Cuni040Duni040Euni040Funi0410uni0411uni0412uni0413uni0414uni0415uni0416uni0417uni0418uni0419uni041Auni041Buni041Cuni041Duni041Euni041Funi0420uni0421uni0422uni0423uni0424uni0425uni0426uni0427uni0428uni0429uni042Auni042Buni042Cuni042Duni042Euni042Funi0430uni0431uni0432uni0433uni0434uni0435uni0436uni0437uni0438uni0439uni043Auni043Buni043Cuni043Duni043Euni043Funi0440uni0441uni0442uni0443uni0444uni0445uni0446uni0447uni0448uni0449uni044Auni044Buni044Cuni044Duni044Euni044Funi0450uni0451uni0452uni0453uni0454uni0455uni0456uni0457uni0458uni0459uni045Auni045Buni045Cuni045Duni045Euni045Funi0462uni0463uni0464uni0465uni046Auni046Buni046Cuni046Duni0470uni0471uni0472uni0473uni0474uni0475uni0476uni0477uni048Cuni048Duni0490uni0491uni0492uni0493uni0494uni0495uni0496uni0497uni0498uni0499uni049Auni049Buni049Euni049Funi04A0uni04A1uni04A2uni04A3uni04A4uni04A5uni04A6uni04A7uni04AAuni04ABuni04ACuni04ADuni04AEuni04AFuni04B0uni04B1uni04B2uni04B3uni04B4uni04B5uni04B6uni04B7uni04BAuni04BBuni04C0uni04C1uni04C2uni04C3uni04C4uni04C7uni04C8uni04CBuni04CCuni04CFuni04D0uni04D1uni04D2uni04D3uni04D4uni04D5uni04D6uni04D7uni04D8uni04D9uni04DAuni04DBuni04DCuni04DDuni04DEuni04DFuni04E0uni04E1uni04E2uni04E3uni04E4uni04E5uni04E6uni04E7uni04E8uni04E9uni04EAuni04EBuni04ECuni04EDuni04EEuni04EFuni04F0uni04F1uni04F2uni04F3uni04F4uni04F5uni04F6uni04F7uni04F8uni04F9uni0510uni0511uni0512uni0513uni0514uni0515uni051Auni051Buni051Cuni051Duni0531uni0532uni0533uni0534uni0535uni0536uni0537uni0538uni0539uni053Auni053Buni053Cuni053Duni053Euni053Funi0540uni0541uni0542uni0543uni0544uni0545uni0546uni0547uni0548uni0549uni054Auni054Buni054Cuni054Duni054Euni054Funi0550uni0551uni0552uni0553uni0554uni0555uni0556uni0559uni055Auni055Buni055Cuni055Duni055Euni055Funi0561uni0562uni0563uni0564uni0565uni0566uni0567uni0568uni0569uni056Auni056Buni056Cuni056Duni056Euni056Funi0570uni0571uni0572uni0573uni0574uni0575uni0576uni0577uni0578uni0579uni057Auni057Buni057Cuni057Duni057Euni057Funi0580uni0581uni0582uni0583uni0584uni0585uni0586uni0587uni0589uni058Auni0E3Funi10A0uni10A1uni10A2uni10A3uni10A4uni10A5uni10A6uni10A7uni10A8uni10A9uni10AAuni10ABuni10ACuni10ADuni10AEuni10AFuni10B0uni10B1uni10B2uni10B3uni10B4uni10B5uni10B6uni10B7uni10B8uni10B9uni10BAuni10BBuni10BCuni10BDuni10BEuni10BFuni10C0uni10C1uni10C2uni10C3uni10C4uni10C5uni10D0uni10D1uni10D2uni10D3uni10D4uni10D5uni10D6uni10D7uni10D8uni10D9uni10DAuni10DBuni10DCuni10DDuni10DEuni10DFuni10E0uni10E1uni10E2uni10E3uni10E4uni10E5uni10E6uni10E7uni10E8uni10E9uni10EAuni10EBuni10ECuni10EDuni10EEuni10EFuni10F0uni10F1uni10F2uni10F3uni10F4uni10F5uni10F6uni10F7uni10F8uni10F9uni10FAuni10FBuni10FCuni1D00uni1D01uni1D02uni1D03uni1D04uni1D05uni1D06uni1D07uni1D08uni1D09uni1D0Auni1D0Buni1D0Cuni1D0Duni1D0Euni1D0Funi1D10uni1D11uni1D12uni1D13uni1D14uni1D15uni1D16uni1D17uni1D18uni1D19uni1D1Auni1D1Buni1D1Cuni1D1Duni1D1Euni1D1Funi1D20uni1D21uni1D22uni1D23uni1D24uni1D25uni1D26uni1D27uni1D28uni1D29uni1D2Auni1D2Buni1D2Cuni1D2Duni1D2Euni1D2Funi1D30uni1D31uni1D32uni1D33uni1D34uni1D35uni1D36uni1D37uni1D38uni1D39uni1D3Auni1D3Buni1D3Cuni1D3Duni1D3Euni1D3Funi1D40uni1D41uni1D42uni1D43uni1D44uni1D45uni1D46uni1D47uni1D48uni1D49uni1D4Auni1D4Buni1D4Cuni1D4Duni1D4Euni1D4Funi1D50uni1D51uni1D52uni1D53uni1D54uni1D55uni1D56uni1D57uni1D58uni1D59uni1D5Auni1D5Buni1D5Cuni1D5Duni1D5Euni1D5Funi1D60uni1D61uni1D62uni1D63uni1D64uni1D65uni1D66uni1D67uni1D68uni1D69uni1D6Auni1D6Buni1D77uni1D78uni1D7Buni1D7Cuni1D7Duni1D7Euni1D7Funi1D85uni1D9Buni1D9Cuni1D9Duni1D9Euni1D9Funi1DA0uni1DA1uni1DA2uni1DA3uni1DA4uni1DA5uni1DA6uni1DA7uni1DA8uni1DA9uni1DAAuni1DABuni1DACuni1DADuni1DAEuni1DAFuni1DB0uni1DB1uni1DB2uni1DB3uni1DB4uni1DB5uni1DB6uni1DB7uni1DB8uni1DB9uni1DBAuni1DBBuni1DBCuni1DBDuni1DBEuni1DBFuni1DC4uni1DC5uni1DC6uni1DC7uni1DC8uni1DC9uni1E00uni1E01uni1E02uni1E03uni1E04uni1E05uni1E06uni1E07uni1E08uni1E09uni1E0Auni1E0Buni1E0Cuni1E0Duni1E0Euni1E0Funi1E10uni1E11uni1E12uni1E13uni1E14uni1E15uni1E16uni1E17uni1E18uni1E19uni1E1Auni1E1Buni1E1Cuni1E1Duni1E1Euni1E1Funi1E20uni1E21uni1E22uni1E23uni1E24uni1E25uni1E26uni1E27uni1E28uni1E29uni1E2Auni1E2Buni1E2Cuni1E2Duni1E2Euni1E2Funi1E30uni1E31uni1E32uni1E33uni1E34uni1E35uni1E36uni1E37uni1E38uni1E39uni1E3Auni1E3Buni1E3Cuni1E3Duni1E3Euni1E3Funi1E40uni1E41uni1E42uni1E43uni1E44uni1E45uni1E46uni1E47uni1E48uni1E49uni1E4Auni1E4Buni1E4Cuni1E4Duni1E4Euni1E4Funi1E50uni1E51uni1E52uni1E53uni1E54uni1E55uni1E56uni1E57uni1E58uni1E59uni1E5Auni1E5Buni1E5Cuni1E5Duni1E5Euni1E5Funi1E60uni1E61uni1E62uni1E63uni1E64uni1E65uni1E66uni1E67uni1E68uni1E69uni1E6Auni1E6Buni1E6Cuni1E6Duni1E6Euni1E6Funi1E70uni1E71uni1E72uni1E73uni1E74uni1E75uni1E76uni1E77uni1E78uni1E79uni1E7Auni1E7Buni1E7Cuni1E7Duni1E7Euni1E7FWgravewgraveWacutewacute	Wdieresis	wdieresisuni1E86uni1E87uni1E88uni1E89uni1E8Auni1E8Buni1E8Cuni1E8Duni1E8Euni1E8Funi1E90uni1E91uni1E92uni1E93uni1E94uni1E95uni1E96uni1E97uni1E98uni1E99uni1E9Auni1E9Buni1E9Cuni1E9Duni1E9Euni1E9Funi1EA0uni1EA1uni1EA2uni1EA3uni1EA4uni1EA5uni1EA6uni1EA7uni1EA8uni1EA9uni1EAAuni1EABuni1EACuni1EADuni1EAEuni1EAFuni1EB0uni1EB1uni1EB2uni1EB3uni1EB4uni1EB5uni1EB6uni1EB7uni1EB8uni1EB9uni1EBAuni1EBBuni1EBCuni1EBDuni1EBEuni1EBFuni1EC0uni1EC1uni1EC2uni1EC3uni1EC4uni1EC5uni1EC6uni1EC7uni1EC8uni1EC9uni1ECAuni1ECBuni1ECCuni1ECDuni1ECEuni1ECFuni1ED0uni1ED1uni1ED2uni1ED3uni1ED4uni1ED5uni1ED6uni1ED7uni1ED8uni1ED9uni1EDAuni1EDBuni1EDCuni1EDDuni1EDEuni1EDFuni1EE0uni1EE1uni1EE2uni1EE3uni1EE4uni1EE5uni1EE6uni1EE7uni1EE8uni1EE9uni1EEAuni1EEBuni1EECuni1EEDuni1EEEuni1EEFuni1EF0uni1EF1Ygraveygraveuni1EF4uni1EF5uni1EF6uni1EF7uni1EF8uni1EF9uni1EFAuni1EFBuni1F00uni1F01uni1F02uni1F03uni1F04uni1F05uni1F06uni1F07uni1F08uni1F09uni1F0Auni1F0Buni1F0Cuni1F0Duni1F0Euni1F0Funi1F10uni1F11uni1F12uni1F13uni1F14uni1F15uni1F18uni1F19uni1F1Auni1F1Buni1F1Cuni1F1Duni1F20uni1F21uni1F22uni1F23uni1F24uni1F25uni1F26uni1F27uni1F28uni1F29uni1F2Auni1F2Buni1F2Cuni1F2Duni1F2Euni1F2Funi1F30uni1F31uni1F32uni1F33uni1F34uni1F35uni1F36uni1F37uni1F38uni1F39uni1F3Auni1F3Buni1F3Cuni1F3Duni1F3Euni1F3Funi1F40uni1F41uni1F42uni1F43uni1F44uni1F45uni1F48uni1F49uni1F4Auni1F4Buni1F4Cuni1F4Duni1F50uni1F51uni1F52uni1F53uni1F54uni1F55uni1F56uni1F57uni1F59uni1F5Buni1F5Duni1F5Funi1F60uni1F61uni1F62uni1F63uni1F64uni1F65uni1F66uni1F67uni1F68uni1F69uni1F6Auni1F6Buni1F6Cuni1F6Duni1F6Euni1F6Funi1F70uni1F71uni1F72uni1F73uni1F74uni1F75uni1F76uni1F77uni1F78uni1F79uni1F7Auni1F7Buni1F7Cuni1F7Duni1F80uni1F81uni1F82uni1F83uni1F84uni1F85uni1F86uni1F87uni1F88uni1F89uni1F8Auni1F8Buni1F8Cuni1F8Duni1F8Euni1F8Funi1F90uni1F91uni1F92uni1F93uni1F94uni1F95uni1F96uni1F97uni1F98uni1F99uni1F9Auni1F9Buni1F9Cuni1F9Duni1F9Euni1F9Funi1FA0uni1FA1uni1FA2uni1FA3uni1FA4uni1FA5uni1FA6uni1FA7uni1FA8uni1FA9uni1FAAuni1FABuni1FACuni1FADuni1FAEuni1FAFuni1FB0uni1FB1uni1FB2uni1FB3uni1FB4uni1FB6uni1FB7uni1FB8uni1FB9uni1FBAuni1FBBuni1FBCuni1FBDuni1FBEuni1FBFuni1FC0uni1FC1uni1FC2uni1FC3uni1FC4uni1FC6uni1FC7uni1FC8uni1FC9uni1FCAuni1FCBuni1FCCuni1FCDuni1FCEuni1FCFuni1FD0uni1FD1uni1FD2uni1FD3uni1FD6uni1FD7uni1FD8uni1FD9uni1FDAuni1FDBuni1FDDuni1FDEuni1FDFuni1FE0uni1FE1uni1FE2uni1FE3uni1FE4uni1FE5uni1FE6uni1FE7uni1FE8uni1FE9uni1FEAuni1FEBuni1FECuni1FEDuni1FEEuni1FEFuni1FF2uni1FF3uni1FF4uni1FF6uni1FF7uni1FF8uni1FF9uni1FFAuni1FFBuni1FFCuni1FFDuni1FFEuni2000uni2001uni2002uni2003uni2004uni2005uni2006uni2007uni2008uni2009uni200Auni200Buni200Cuni200Duni200Euni200Funi2010uni2011
figuredashuni2015uni2016underscoredblquotereverseduni201Funi2023onedotenleadertwodotenleaderuni202Auni202Buni202Cuni202Duni202Euni202Funi2031minuteseconduni2034uni2035uni2036uni2037uni2038	exclamdbluni203Duni203Euni2042uni2045uni2046uni2047uni2048uni2049uni204Buni204Cuni204Duni204Euni204Funi2051uni2052uni2053uni2057uni205Funi2060uni2061uni2062uni2063uni2064uni206Auni206Buni206Cuni206Duni206Euni206Funi2070uni2071uni2074uni2075uni2076uni2077uni2078uni2079uni207Auni207Buni207Cuni207Duni207Euni207Funi2080uni2081uni2082uni2083uni2084uni2085uni2086uni2087uni2088uni2089uni208Auni208Buni208Cuni208Duni208Euni2090uni2091uni2092uni2093uni2094uni2095uni2096uni2097uni2098uni2099uni209Auni209Buni209Cuni20A6Eurouni20AFuni20B1uni20B4uni20B5uni20B8uni20B9uni20BAuni20BDuni2103uni2109uni210Euni210Funi2116uni2126uni2127uni212Auni212Buni2132uni2141uni2142uni2143uni2144uni214Buni214Euni2150uni2151uni2152onethird	twothirdsuni2155uni2156uni2157uni2158uni2159uni215A	oneeighththreeeighthsfiveeighthsseveneighthsuni215Funi2160uni2161uni2162uni2163uni2164uni2165uni2166uni2167uni2168uni2169uni216Auni216Buni216Cuni216Duni216Euni216Funi2170uni2171uni2172uni2173uni2174uni2175uni2176uni2177uni2178uni2179uni217Auni217Buni217Cuni217Duni217Euni217Funi2180uni2181uni2182uni2183uni2184uni2185uni2189	arrowleftarrowup
arrowright	arrowdown	arrowboth	arrowupdnuni2196uni2197uni2198uni2199uni219Auni219Buni219Cuni219Duni219Euni219Funi21A0uni21A1uni21A2uni21A3uni21A4uni21A5uni21A6uni21A7arrowupdnbseuni21A9uni21AAuni21ABuni21ACuni21ADuni21AEuni21AFuni21B0uni21B1uni21B2uni21B3uni21B4carriagereturnuni21B6uni21B7uni21B8uni21B9uni21BAuni21BBuni21BCuni21BDuni21BEuni21BFuni21C0uni21C1uni21C2uni21C3uni21C4uni21C5uni21C6uni21C7uni21C8uni21C9uni21CAuni21CBuni21CCuni21CDuni21CEuni21CFarrowdblleft
arrowdbluparrowdblrightarrowdbldownarrowdblbothuni21D5uni21D6uni21D7uni21D8uni21D9uni21DAuni21DBuni21DCuni21DDuni21DEuni21DFuni21E0uni21E1uni21E2uni21E3uni21E4uni21E5uni21E6uni21E7uni21E8uni21E9uni21EAuni21EBuni21ECuni21EDuni21EEuni21EFuni21F0uni21F1uni21F2uni21F3uni21F4uni21F5uni21F6uni21F7uni21F8uni21F9uni21FAuni21FBuni21FCuni21FDuni21FEuni21FF	universalexistentialuni2204gradientelement
notelementsuchthatuni220Cuni2210uni2213uni2214uni2215asteriskmathuni2218uni2219uni221Buni221Cproportional
orthogonalangleuni2223uni2224uni2225uni2226
logicaland	logicalorintersectionunionuni222Cuni222Duni2238uni2239uni223Auni223Bsimilaruni223Duni2242uni2243uni2250uni2251uni2252uni2253uni2254uni2255equivalencepropersubsetpropersuperset	notsubsetuni2285reflexsubsetreflexsupersetuni228Cuni228Duni228Euni228Funi2290uni2291uni2292uni2293uni2294
circleplusuni2296circlemultiplyuni2298uni2299uni229Auni229Buni229Cuni229Duni229Euni229Funi22A0uni22A1uni22A2uni22A3uni22A4perpendicularuni22A6uni22A7uni22A8uni22A9uni22AAuni22ABuni22ACuni22ADuni22AEuni22AFuni22C4dotmathhouseuni2308uni2309uni230Auni230Brevlogicalnotuni2311uni2318uni2319
integraltp
integralbtuni2325uni2328uni237Duni239Buni239Cuni239Duni239Euni239Funi23A0uni23A1uni23A2uni23A3uni23A4uni23A5uni23A6uni23A7uni23A8uni23A9uni23AAuni23ABuni23ACuni23ADuni23AEuni23CFuni2423SF100000uni2501SF110000uni2503uni2504uni2505uni2506uni2507uni2508uni2509uni250Auni250BSF010000uni250Duni250Euni250FSF030000uni2511uni2512uni2513SF020000uni2515uni2516uni2517SF040000uni2519uni251Auni251BSF080000uni251Duni251Euni251Funi2520uni2521uni2522uni2523SF090000uni2525uni2526uni2527uni2528uni2529uni252Auni252BSF060000uni252Duni252Euni252Funi2530uni2531uni2532uni2533SF070000uni2535uni2536uni2537uni2538uni2539uni253Auni253BSF050000uni253Duni253Euni253Funi2540uni2541uni2542uni2543uni2544uni2545uni2546uni2547uni2548uni2549uni254Auni254Buni254Cuni254Duni254Euni254FSF430000SF240000SF510000SF520000SF390000SF220000SF210000SF250000SF500000SF490000SF380000SF280000SF270000SF260000SF360000SF370000SF420000SF190000SF200000SF230000SF470000SF480000SF410000SF450000SF460000SF400000SF540000SF530000SF440000uni256Duni256Euni256Funi2570uni2571uni2572uni2573uni2574uni2575uni2576uni2577uni2578uni2579uni257Auni257Buni257Cuni257Duni257Euni257Fupblockuni2581uni2582uni2583dnblockuni2585uni2586uni2587blockuni2589uni258Auni258Blfblockuni258Duni258Euni258Frtblockltshadeshadedkshadeuni2594uni2595uni2596uni2597uni2598uni2599uni259Auni259Buni259Cuni259Duni259Euni259F	filledboxH22073uni25A2uni25A3uni25A4uni25A5uni25A6uni25A7uni25A8uni25A9H18543H18551
filledrectuni25ADuni25AEuni25AFuni25B0uni25B1triagupuni25B3uni25B4uni25B5uni25B6uni25B7uni25B8uni25B9triagrtuni25BBtriagdnuni25BDuni25BEuni25BFuni25C0uni25C1uni25C2uni25C3triaglfuni25C5uni25C6uni25C7uni25C8uni25C9circleuni25CCuni25CDuni25CEH18533uni25D0uni25D1uni25D2uni25D3uni25D4uni25D5uni25D6uni25D7	invbullet	invcircleuni25DAuni25DBuni25DCuni25DDuni25DEuni25DFuni25E0uni25E1uni25E2uni25E3uni25E4uni25E5
openbulletuni25E7uni25E8uni25E9uni25EAuni25EBuni25ECuni25EDuni25EEuni25EFuni25F0uni25F1uni25F2uni25F3uni25F4uni25F5uni25F6uni25F7uni25F8uni25F9uni25FAuni25FBuni25FCuni25FDuni25FEuni25FFuni2600uni2638uni2639	smilefaceinvsmilefacesununi263Ffemaleuni2641maleuni2643uni2644uni2645uni2646uni2647spadeuni2661uni2662clubuni2664heartdiamonduni2667uni2669musicalnotemusicalnotedbluni266Cuni266Duni266Euni266Funi27A1uni27C5uni27C6uni27E0uni27E8uni27E9uni27F0uni27F1uni27F2uni27F3uni27F4uni27F5uni27F6uni27F7uni27F8uni27F9uni27FAuni27FBuni27FCuni27FDuni27FEuni27FFuni2800uni2801uni2802uni2803uni2804uni2805uni2806uni2807uni2808uni2809uni280Auni280Buni280Cuni280Duni280Euni280Funi2810uni2811uni2812uni2813uni2814uni2815uni2816uni2817uni2818uni2819uni281Auni281Buni281Cuni281Duni281Euni281Funi2820uni2821uni2822uni2823uni2824uni2825uni2826uni2827uni2828uni2829uni282Auni282Buni282Cuni282Duni282Euni282Funi2830uni2831uni2832uni2833uni2834uni2835uni2836uni2837uni2838uni2839uni283Auni283Buni283Cuni283Duni283Euni283Funi2840uni2841uni2842uni2843uni2844uni2845uni2846uni2847uni2848uni2849uni284Auni284Buni284Cuni284Duni284Euni284Funi2850uni2851uni2852uni2853uni2854uni2855uni2856uni2857uni2858uni2859uni285Auni285Buni285Cuni285Duni285Euni285Funi2860uni2861uni2862uni2863uni2864uni2865uni2866uni2867uni2868uni2869uni286Auni286Buni286Cuni286Duni286Euni286Funi2870uni2871uni2872uni2873uni2874uni2875uni2876uni2877uni2878uni2879uni287Auni287Buni287Cuni287Duni287Euni287Funi2880uni2881uni2882uni2883uni2884uni2885uni2886uni2887uni2888uni2889uni288Auni288Buni288Cuni288Duni288Euni288Funi2890uni2891uni2892uni2893uni2894uni2895uni2896uni2897uni2898uni2899uni289Auni289Buni289Cuni289Duni289Euni289Funi28A0uni28A1uni28A2uni28A3uni28A4uni28A5uni28A6uni28A7uni28A8uni28A9uni28AAuni28ABuni28ACuni28ADuni28AEuni28AFuni28B0uni28B1uni28B2uni28B3uni28B4uni28B5uni28B6uni28B7uni28B8uni28B9uni28BAuni28BBuni28BCuni28BDuni28BEuni28BFuni28C0uni28C1uni28C2uni28C3uni28C4uni28C5uni28C6uni28C7uni28C8uni28C9uni28CAuni28CBuni28CCuni28CDuni28CEuni28CFuni28D0uni28D1uni28D2uni28D3uni28D4uni28D5uni28D6uni28D7uni28D8uni28D9uni28DAuni28DBuni28DCuni28DDuni28DEuni28DFuni28E0uni28E1uni28E2uni28E3uni28E4uni28E5uni28E6uni28E7uni28E8uni28E9uni28EAuni28EBuni28ECuni28EDuni28EEuni28EFuni28F0uni28F1uni28F2uni28F3uni28F4uni28F5uni28F6uni28F7uni28F8uni28F9uni28FAuni28FBuni28FCuni28FDuni28FEuni28FFuni2900uni2901uni2902uni2903uni2904uni2905uni2906uni2907uni2908uni2909uni290Auni290Buni290Cuni290Duni290Euni290Funi2910uni2911uni2912uni2913uni2914uni2915uni2916uni2917uni2918uni2919uni291Auni291Buni291Cuni291Duni291Euni291Funi2920uni2921uni2922uni2923uni2924uni2925uni2926uni2927uni2928uni2929uni292Auni292Buni292Cuni292Duni292Euni292Funi2930uni2931uni2932uni2933uni2934uni2935uni2936uni2937uni2938uni2939uni293Auni293Buni293Cuni293Duni293Euni293Funi2940uni2941uni2942uni2943uni2944uni2945uni2946uni2947uni2948uni2949uni294Auni294Buni294Cuni294Duni294Euni294Funi2950uni2951uni2952uni2953uni2954uni2955uni2956uni2957uni2958uni2959uni295Auni295Buni295Cuni295Duni295Euni295Funi2960uni2961uni2962uni2963uni2964uni2965uni2966uni2967uni2968uni2969uni296Auni296Buni296Cuni296Duni296Euni296Funi2970uni2971uni2972uni2973uni2974uni2975uni2976uni2977uni2978uni2979uni297Auni297Buni297Cuni297Duni297Euni297Funi29EBuni2A0Cuni2A0Duni2A0Euni2A2Funi2A6Auni2A6Buni2B00uni2B01uni2B02uni2B03uni2B04uni2B05uni2B06uni2B07uni2B08uni2B09uni2B0Auni2B0Buni2B0Cuni2B0Duni2B0Euni2B0Funi2B10uni2B11uni2B12uni2B13uni2B14uni2B15uni2B16uni2B17uni2B18uni2B19uni2B1Auni2C60uni2C61uni2C63uni2C64uni2C67uni2C68uni2C69uni2C6Auni2C6Buni2C6Cuni2C6Duni2C6Euni2C6Funi2C70uni2C71uni2C72uni2C73uni2C75uni2C76uni2C77uni2C79uni2C7Auni2C7Buni2C7Cuni2C7Duni2C7Euni2C7Funi2D00uni2D01uni2D02uni2D03uni2D04uni2D05uni2D06uni2D07uni2D08uni2D09uni2D0Auni2D0Buni2D0Cuni2D0Duni2D0Euni2D0Funi2D10uni2D11uni2D12uni2D13uni2D14uni2D15uni2D16uni2D17uni2D18uni2D19uni2D1Auni2D1Buni2D1Cuni2D1Duni2D1Euni2D1Funi2D20uni2D21uni2D22uni2D23uni2D24uni2D25uni2E18uni2E1Funi2E22uni2E23uni2E24uni2E25uni2E2EuniA644uniA645uniA646uniA647uniA650uniA651uniA654uniA655uniA656uniA657uniA698uniA699uniA708uniA709uniA70AuniA70BuniA70CuniA70DuniA70EuniA70FuniA710uniA711uniA712uniA713uniA714uniA715uniA716uniA71BuniA71CuniA71DuniA71EuniA71FuniA726uniA727uniA728uniA729uniA72AuniA72BuniA72CuniA72DuniA72EuniA72FuniA730uniA731uniA732uniA733uniA734uniA735uniA736uniA737uniA738uniA739uniA73AuniA73BuniA73CuniA73DuniA73EuniA73FuniA740uniA741uniA746uniA747uniA74AuniA74BuniA74EuniA74FuniA768uniA769uniA77BuniA77CuniA780uniA781uniA782uniA783uniA784uniA785uniA786uniA787uniA78BuniA78CuniA78DuniA790uniA791uniA7AAuniA7F8uniA7F9uniA7FAuniA7FBuniA7FCuniA7FDuniA7FEuniA7FFuniF400uniF401uniF402uniF403uniF404uniF405uniF406uniF407uniF408uniF409uniF40AuniF40BuniF40CuniF40DuniF40EuniF40FuniF410uniF411uniF412uniF413uniF414uniF415uniF416uniF417uniF418uniF419uniF41AuniF41BuniF41CuniF41DuniF41EuniF41FuniF420uniF421uniF422uniF423uniF424uniF425uniF426uniF428uniF6C4uniF6C5uniF6C6uniF6C7uniF6C8cyrBrevecyrbreveuniFB00uniFB03uniFB04uniFB05uniFB06uniFE00uniFE01uniFE02uniFE03uniFE04uniFE05uniFE06uniFE07uniFE08uniFE09uniFE0AuniFE0BuniFE0CuniFE0DuniFE0EuniFE0FuniFFF9uniFFFAuniFFFBuniFFFCuniFFFDu1D468u1D469u1D46Au1D46Bu1D46Cu1D46Du1D46Eu1D46Fu1D470u1D471u1D472u1D473u1D474u1D475u1D476u1D477u1D478u1D479u1D47Au1D47Bu1D47Cu1D47Du1D47Eu1D47Fu1D480u1D481u1D482u1D483u1D484u1D485u1D486u1D487u1D488u1D489u1D48Au1D48Bu1D48Cu1D48Du1D48Eu1D48Fu1D490u1D491u1D492u1D493u1D494u1D495u1D496u1D497u1D498u1D499u1D49Au1D49Bu1D71Cu1D71Du1D71Eu1D71Fu1D720u1D721u1D722u1D723u1D724u1D725u1D726u1D727u1D728u1D729u1D72Au1D72Bu1D72Cu1D72Du1D72Eu1D72Fu1D730u1D731u1D732u1D733u1D734u1D735u1D736u1D737u1D738u1D739u1D73Au1D73Bu1D73Cu1D73Du1D73Eu1D73Fu1D740u1D741u1D742u1D743u1D744u1D745u1D746u1D747u1D748u1D749u1D74Au1D74Bu1D74Cu1D74Du1D74Eu1D74Fu1D750u1D751u1D752u1D753u1D754u1D755	dlLtcaronDieresisAcuteTildeGrave
CircumflexCaronuni0311.caseBreve	DotaccentHungarumlautDoublegraveiogonek.dotlessuni0268.dotlessdotaccent.iuni029D.dotlessuni1E2D.dotlessuni1ECB.dotlessflorinflorinfloriniflorinlflorinfloriniflorinflorinlEng.altae.alt
brailledotuni0453.MKDuni03080304uni03040308uni03070304uni03080301uni03080300uni03040301uni03040300uni03030304uni0308030Cuni03030308uni030C0307uni03030301uni03020301uni03020300uni03020303uni03060303uni03060301uni03060300uni03060309uni03020309uni03010307g.altEng.alt2uni01B7.altq.smcpx.smcp
delta.smcp
theta.smcpxi.smcp
sigma.smcpphi.smcp
omega.smcpexclamdown.casequestiondown.caseuni2E18.casegermandbls.smcpUring.ringless
Dcroat.alt
dcroat.altuni01E4.altuni01E5.alt   @K
2ǻƻĖG}G0}
&
@7!72.+t+t]%]@%@@dtd@
2
}t}t2q@~t~}|}|{z{zy]zzyx%y]y@x%w7vtvkututsrqrqqpo.po.nmlkKj
hg
g@f!e}d@ckba}`^]][YXY-XW2VTSTSRQPQ%PPOONMN}MIMM@LL1KK2JIJ}IHG
H}G
FEF2EDEE@DCBCBA@A}@6	@@?=)?>=)>]==)<;<;:;:9
:9
878}76	776	6@5454+	43	32)2100/$)/7.!
.-,-,+	,,@+	*&*))@('('&''@&%$)%$!$)#!#"!
"! !
!  @!*@-:!}22!)k!)
!-}	-@
	
	

@@ d+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ StartFontMetrics 4.1
Notice Converted by PHP-font-lib
Comment https://github.com/PhenX/php-font-lib
EncodingScheme FontSpecific
FontName DejaVu Serif
FontSubfamily Bold Italic
UniqueID DejaVu Serif Bold Italic
FullName DejaVu Serif Bold Italic
Version Version 2.37
PostScriptName DejaVuSerif-BoldItalic
Manufacturer DejaVu fonts team
FontVendorURL http://dejavu.sourceforge.net
LicenseURL http://dejavu.sourceforge.net/wiki/index.php/License
PreferredFamily DejaVu Serif
PreferredSubfamily Bold Italic
Weight Bold
ItalicAngle -11
IsFixedPitch false
UnderlineThickness 44
UnderlinePosition -63
FontHeightOffset 0
Ascender 939
Descender -236
FontBBox -906 -389 1925 1145
StartCharMetrics 3506
U 32 ; WX 348 ; N space ; G 3
U 33 ; WX 439 ; N exclam ; G 4
U 34 ; WX 521 ; N quotedbl ; G 5
U 35 ; WX 838 ; N numbersign ; G 6
U 36 ; WX 696 ; N dollar ; G 7
U 37 ; WX 950 ; N percent ; G 8
U 38 ; WX 903 ; N ampersand ; G 9
U 39 ; WX 306 ; N quotesingle ; G 10
U 40 ; WX 473 ; N parenleft ; G 11
U 41 ; WX 473 ; N parenright ; G 12
U 42 ; WX 523 ; N asterisk ; G 13
U 43 ; WX 838 ; N plus ; G 14
U 44 ; WX 348 ; N comma ; G 15
U 45 ; WX 415 ; N hyphen ; G 16
U 46 ; WX 348 ; N period ; G 17
U 47 ; WX 365 ; N slash ; G 18
U 48 ; WX 696 ; N zero ; G 19
U 49 ; WX 696 ; N one ; G 20
U 50 ; WX 696 ; N two ; G 21
U 51 ; WX 696 ; N three ; G 22
U 52 ; WX 696 ; N four ; G 23
U 53 ; WX 696 ; N five ; G 24
U 54 ; WX 696 ; N six ; G 25
U 55 ; WX 696 ; N seven ; G 26
U 56 ; WX 696 ; N eight ; G 27
U 57 ; WX 696 ; N nine ; G 28
U 58 ; WX 369 ; N colon ; G 29
U 59 ; WX 369 ; N semicolon ; G 30
U 60 ; WX 838 ; N less ; G 31
U 61 ; WX 838 ; N equal ; G 32
U 62 ; WX 838 ; N greater ; G 33
U 63 ; WX 586 ; N question ; G 34
U 64 ; WX 1000 ; N at ; G 35
U 65 ; WX 776 ; N A ; G 36
U 66 ; WX 845 ; N B ; G 37
U 67 ; WX 796 ; N C ; G 38
U 68 ; WX 867 ; N D ; G 39
U 69 ; WX 762 ; N E ; G 40
U 70 ; WX 710 ; N F ; G 41
U 71 ; WX 854 ; N G ; G 42
U 72 ; WX 945 ; N H ; G 43
U 73 ; WX 468 ; N I ; G 44
U 74 ; WX 473 ; N J ; G 45
U 75 ; WX 869 ; N K ; G 46
U 76 ; WX 703 ; N L ; G 47
U 77 ; WX 1107 ; N M ; G 48
U 78 ; WX 914 ; N N ; G 49
U 79 ; WX 871 ; N O ; G 50
U 80 ; WX 752 ; N P ; G 51
U 81 ; WX 871 ; N Q ; G 52
U 82 ; WX 831 ; N R ; G 53
U 83 ; WX 722 ; N S ; G 54
U 84 ; WX 744 ; N T ; G 55
U 85 ; WX 872 ; N U ; G 56
U 86 ; WX 776 ; N V ; G 57
U 87 ; WX 1123 ; N W ; G 58
U 88 ; WX 776 ; N X ; G 59
U 89 ; WX 714 ; N Y ; G 60
U 90 ; WX 730 ; N Z ; G 61
U 91 ; WX 473 ; N bracketleft ; G 62
U 92 ; WX 365 ; N backslash ; G 63
U 93 ; WX 473 ; N bracketright ; G 64
U 94 ; WX 838 ; N asciicircum ; G 65
U 95 ; WX 500 ; N underscore ; G 66
U 96 ; WX 500 ; N grave ; G 67
U 97 ; WX 648 ; N a ; G 68
U 98 ; WX 699 ; N b ; G 69
U 99 ; WX 609 ; N c ; G 70
U 100 ; WX 699 ; N d ; G 71
U 101 ; WX 636 ; N e ; G 72
U 102 ; WX 430 ; N f ; G 73
U 103 ; WX 699 ; N g ; G 74
U 104 ; WX 727 ; N h ; G 75
U 105 ; WX 380 ; N i ; G 76
U 106 ; WX 362 ; N j ; G 77
U 107 ; WX 693 ; N k ; G 78
U 108 ; WX 380 ; N l ; G 79
U 109 ; WX 1058 ; N m ; G 80
U 110 ; WX 727 ; N n ; G 81
U 111 ; WX 667 ; N o ; G 82
U 112 ; WX 699 ; N p ; G 83
U 113 ; WX 699 ; N q ; G 84
U 114 ; WX 527 ; N r ; G 85
U 115 ; WX 563 ; N s ; G 86
U 116 ; WX 462 ; N t ; G 87
U 117 ; WX 727 ; N u ; G 88
U 118 ; WX 581 ; N v ; G 89
U 119 ; WX 861 ; N w ; G 90
U 120 ; WX 596 ; N x ; G 91
U 121 ; WX 581 ; N y ; G 92
U 122 ; WX 568 ; N z ; G 93
U 123 ; WX 643 ; N braceleft ; G 94
U 124 ; WX 364 ; N bar ; G 95
U 125 ; WX 643 ; N braceright ; G 96
U 126 ; WX 838 ; N asciitilde ; G 97
U 160 ; WX 348 ; N nbspace ; G 98
U 161 ; WX 439 ; N exclamdown ; G 99
U 162 ; WX 696 ; N cent ; G 100
U 163 ; WX 696 ; N sterling ; G 101
U 164 ; WX 636 ; N currency ; G 102
U 165 ; WX 696 ; N yen ; G 103
U 166 ; WX 364 ; N brokenbar ; G 104
U 167 ; WX 523 ; N section ; G 105
U 168 ; WX 500 ; N dieresis ; G 106
U 169 ; WX 1000 ; N copyright ; G 107
U 170 ; WX 487 ; N ordfeminine ; G 108
U 171 ; WX 625 ; N guillemotleft ; G 109
U 172 ; WX 838 ; N logicalnot ; G 110
U 173 ; WX 415 ; N sfthyphen ; G 111
U 174 ; WX 1000 ; N registered ; G 112
U 175 ; WX 500 ; N macron ; G 113
U 176 ; WX 500 ; N degree ; G 114
U 177 ; WX 838 ; N plusminus ; G 115
U 178 ; WX 438 ; N twosuperior ; G 116
U 179 ; WX 438 ; N threesuperior ; G 117
U 180 ; WX 500 ; N acute ; G 118
U 181 ; WX 732 ; N mu ; G 119
U 182 ; WX 636 ; N paragraph ; G 120
U 183 ; WX 348 ; N periodcentered ; G 121
U 184 ; WX 500 ; N cedilla ; G 122
U 185 ; WX 438 ; N onesuperior ; G 123
U 186 ; WX 500 ; N ordmasculine ; G 124
U 187 ; WX 625 ; N guillemotright ; G 125
U 188 ; WX 1043 ; N onequarter ; G 126
U 189 ; WX 1043 ; N onehalf ; G 127
U 190 ; WX 1043 ; N threequarters ; G 128
U 191 ; WX 586 ; N questiondown ; G 129
U 192 ; WX 776 ; N Agrave ; G 130
U 193 ; WX 776 ; N Aacute ; G 131
U 194 ; WX 776 ; N Acircumflex ; G 132
U 195 ; WX 776 ; N Atilde ; G 133
U 196 ; WX 776 ; N Adieresis ; G 134
U 197 ; WX 776 ; N Aring ; G 135
U 198 ; WX 1034 ; N AE ; G 136
U 199 ; WX 796 ; N Ccedilla ; G 137
U 200 ; WX 762 ; N Egrave ; G 138
U 201 ; WX 762 ; N Eacute ; G 139
U 202 ; WX 762 ; N Ecircumflex ; G 140
U 203 ; WX 762 ; N Edieresis ; G 141
U 204 ; WX 468 ; N Igrave ; G 142
U 205 ; WX 468 ; N Iacute ; G 143
U 206 ; WX 468 ; N Icircumflex ; G 144
U 207 ; WX 468 ; N Idieresis ; G 145
U 208 ; WX 874 ; N Eth ; G 146
U 209 ; WX 914 ; N Ntilde ; G 147
U 210 ; WX 871 ; N Ograve ; G 148
U 211 ; WX 871 ; N Oacute ; G 149
U 212 ; WX 871 ; N Ocircumflex ; G 150
U 213 ; WX 871 ; N Otilde ; G 151
U 214 ; WX 871 ; N Odieresis ; G 152
U 215 ; WX 838 ; N multiply ; G 153
U 216 ; WX 871 ; N Oslash ; G 154
U 217 ; WX 872 ; N Ugrave ; G 155
U 218 ; WX 872 ; N Uacute ; G 156
U 219 ; WX 872 ; N Ucircumflex ; G 157
U 220 ; WX 872 ; N Udieresis ; G 158
U 221 ; WX 714 ; N Yacute ; G 159
U 222 ; WX 757 ; N Thorn ; G 160
U 223 ; WX 760 ; N germandbls ; G 161
U 224 ; WX 648 ; N agrave ; G 162
U 225 ; WX 648 ; N aacute ; G 163
U 226 ; WX 648 ; N acircumflex ; G 164
U 227 ; WX 648 ; N atilde ; G 165
U 228 ; WX 648 ; N adieresis ; G 166
U 229 ; WX 648 ; N aring ; G 167
U 230 ; WX 932 ; N ae ; G 168
U 231 ; WX 609 ; N ccedilla ; G 169
U 232 ; WX 636 ; N egrave ; G 170
U 233 ; WX 636 ; N eacute ; G 171
U 234 ; WX 636 ; N ecircumflex ; G 172
U 235 ; WX 636 ; N edieresis ; G 173
U 236 ; WX 380 ; N igrave ; G 174
U 237 ; WX 380 ; N iacute ; G 175
U 238 ; WX 380 ; N icircumflex ; G 176
U 239 ; WX 380 ; N idieresis ; G 177
U 240 ; WX 667 ; N eth ; G 178
U 241 ; WX 727 ; N ntilde ; G 179
U 242 ; WX 667 ; N ograve ; G 180
U 243 ; WX 667 ; N oacute ; G 181
U 244 ; WX 667 ; N ocircumflex ; G 182
U 245 ; WX 667 ; N otilde ; G 183
U 246 ; WX 667 ; N odieresis ; G 184
U 247 ; WX 838 ; N divide ; G 185
U 248 ; WX 667 ; N oslash ; G 186
U 249 ; WX 727 ; N ugrave ; G 187
U 250 ; WX 727 ; N uacute ; G 188
U 251 ; WX 727 ; N ucircumflex ; G 189
U 252 ; WX 727 ; N udieresis ; G 190
U 253 ; WX 581 ; N yacute ; G 191
U 254 ; WX 699 ; N thorn ; G 192
U 255 ; WX 581 ; N ydieresis ; G 193
U 256 ; WX 776 ; N Amacron ; G 194
U 257 ; WX 648 ; N amacron ; G 195
U 258 ; WX 776 ; N Abreve ; G 196
U 259 ; WX 648 ; N abreve ; G 197
U 260 ; WX 776 ; N Aogonek ; G 198
U 261 ; WX 648 ; N aogonek ; G 199
U 262 ; WX 796 ; N Cacute ; G 200
U 263 ; WX 609 ; N cacute ; G 201
U 264 ; WX 796 ; N Ccircumflex ; G 202
U 265 ; WX 609 ; N ccircumflex ; G 203
U 266 ; WX 796 ; N Cdotaccent ; G 204
U 267 ; WX 609 ; N cdotaccent ; G 205
U 268 ; WX 796 ; N Ccaron ; G 206
U 269 ; WX 609 ; N ccaron ; G 207
U 270 ; WX 867 ; N Dcaron ; G 208
U 271 ; WX 699 ; N dcaron ; G 209
U 272 ; WX 874 ; N Dcroat ; G 210
U 273 ; WX 699 ; N dmacron ; G 211
U 274 ; WX 762 ; N Emacron ; G 212
U 275 ; WX 636 ; N emacron ; G 213
U 276 ; WX 762 ; N Ebreve ; G 214
U 277 ; WX 636 ; N ebreve ; G 215
U 278 ; WX 762 ; N Edotaccent ; G 216
U 279 ; WX 636 ; N edotaccent ; G 217
U 280 ; WX 762 ; N Eogonek ; G 218
U 281 ; WX 636 ; N eogonek ; G 219
U 282 ; WX 762 ; N Ecaron ; G 220
U 283 ; WX 636 ; N ecaron ; G 221
U 284 ; WX 854 ; N Gcircumflex ; G 222
U 285 ; WX 699 ; N gcircumflex ; G 223
U 286 ; WX 854 ; N Gbreve ; G 224
U 287 ; WX 699 ; N gbreve ; G 225
U 288 ; WX 854 ; N Gdotaccent ; G 226
U 289 ; WX 699 ; N gdotaccent ; G 227
U 290 ; WX 854 ; N Gcommaaccent ; G 228
U 291 ; WX 699 ; N gcommaaccent ; G 229
U 292 ; WX 945 ; N Hcircumflex ; G 230
U 293 ; WX 727 ; N hcircumflex ; G 231
U 294 ; WX 945 ; N Hbar ; G 232
U 295 ; WX 727 ; N hbar ; G 233
U 296 ; WX 468 ; N Itilde ; G 234
U 297 ; WX 380 ; N itilde ; G 235
U 298 ; WX 468 ; N Imacron ; G 236
U 299 ; WX 380 ; N imacron ; G 237
U 300 ; WX 468 ; N Ibreve ; G 238
U 301 ; WX 380 ; N ibreve ; G 239
U 302 ; WX 468 ; N Iogonek ; G 240
U 303 ; WX 380 ; N iogonek ; G 241
U 304 ; WX 468 ; N Idot ; G 242
U 305 ; WX 380 ; N dotlessi ; G 243
U 306 ; WX 942 ; N IJ ; G 244
U 307 ; WX 751 ; N ij ; G 245
U 308 ; WX 473 ; N Jcircumflex ; G 246
U 309 ; WX 362 ; N jcircumflex ; G 247
U 310 ; WX 869 ; N Kcommaaccent ; G 248
U 311 ; WX 693 ; N kcommaaccent ; G 249
U 312 ; WX 693 ; N kgreenlandic ; G 250
U 313 ; WX 703 ; N Lacute ; G 251
U 314 ; WX 380 ; N lacute ; G 252
U 315 ; WX 703 ; N Lcommaaccent ; G 253
U 316 ; WX 380 ; N lcommaaccent ; G 254
U 317 ; WX 703 ; N Lcaron ; G 255
U 318 ; WX 508 ; N lcaron ; G 256
U 319 ; WX 703 ; N Ldot ; G 257
U 320 ; WX 557 ; N ldot ; G 258
U 321 ; WX 710 ; N Lslash ; G 259
U 322 ; WX 385 ; N lslash ; G 260
U 323 ; WX 914 ; N Nacute ; G 261
U 324 ; WX 727 ; N nacute ; G 262
U 325 ; WX 914 ; N Ncommaaccent ; G 263
U 326 ; WX 727 ; N ncommaaccent ; G 264
U 327 ; WX 914 ; N Ncaron ; G 265
U 328 ; WX 727 ; N ncaron ; G 266
U 329 ; WX 1008 ; N napostrophe ; G 267
U 330 ; WX 872 ; N Eng ; G 268
U 331 ; WX 727 ; N eng ; G 269
U 332 ; WX 871 ; N Omacron ; G 270
U 333 ; WX 667 ; N omacron ; G 271
U 334 ; WX 871 ; N Obreve ; G 272
U 335 ; WX 667 ; N obreve ; G 273
U 336 ; WX 871 ; N Ohungarumlaut ; G 274
U 337 ; WX 667 ; N ohungarumlaut ; G 275
U 338 ; WX 1180 ; N OE ; G 276
U 339 ; WX 1028 ; N oe ; G 277
U 340 ; WX 831 ; N Racute ; G 278
U 341 ; WX 527 ; N racute ; G 279
U 342 ; WX 831 ; N Rcommaaccent ; G 280
U 343 ; WX 527 ; N rcommaaccent ; G 281
U 344 ; WX 831 ; N Rcaron ; G 282
U 345 ; WX 527 ; N rcaron ; G 283
U 346 ; WX 722 ; N Sacute ; G 284
U 347 ; WX 563 ; N sacute ; G 285
U 348 ; WX 722 ; N Scircumflex ; G 286
U 349 ; WX 563 ; N scircumflex ; G 287
U 350 ; WX 722 ; N Scedilla ; G 288
U 351 ; WX 563 ; N scedilla ; G 289
U 352 ; WX 722 ; N Scaron ; G 290
U 353 ; WX 563 ; N scaron ; G 291
U 354 ; WX 744 ; N Tcommaaccent ; G 292
U 355 ; WX 462 ; N tcommaaccent ; G 293
U 356 ; WX 744 ; N Tcaron ; G 294
U 357 ; WX 462 ; N tcaron ; G 295
U 358 ; WX 744 ; N Tbar ; G 296
U 359 ; WX 462 ; N tbar ; G 297
U 360 ; WX 872 ; N Utilde ; G 298
U 361 ; WX 727 ; N utilde ; G 299
U 362 ; WX 872 ; N Umacron ; G 300
U 363 ; WX 727 ; N umacron ; G 301
U 364 ; WX 872 ; N Ubreve ; G 302
U 365 ; WX 727 ; N ubreve ; G 303
U 366 ; WX 872 ; N Uring ; G 304
U 367 ; WX 727 ; N uring ; G 305
U 368 ; WX 872 ; N Uhungarumlaut ; G 306
U 369 ; WX 727 ; N uhungarumlaut ; G 307
U 370 ; WX 872 ; N Uogonek ; G 308
U 371 ; WX 727 ; N uogonek ; G 309
U 372 ; WX 1123 ; N Wcircumflex ; G 310
U 373 ; WX 861 ; N wcircumflex ; G 311
U 374 ; WX 714 ; N Ycircumflex ; G 312
U 375 ; WX 581 ; N ycircumflex ; G 313
U 376 ; WX 714 ; N Ydieresis ; G 314
U 377 ; WX 730 ; N Zacute ; G 315
U 378 ; WX 568 ; N zacute ; G 316
U 379 ; WX 730 ; N Zdotaccent ; G 317
U 380 ; WX 568 ; N zdotaccent ; G 318
U 381 ; WX 730 ; N Zcaron ; G 319
U 382 ; WX 568 ; N zcaron ; G 320
U 383 ; WX 430 ; N longs ; G 321
U 384 ; WX 699 ; N uni0180 ; G 322
U 385 ; WX 845 ; N uni0181 ; G 323
U 386 ; WX 854 ; N uni0182 ; G 324
U 387 ; WX 699 ; N uni0183 ; G 325
U 388 ; WX 854 ; N uni0184 ; G 326
U 389 ; WX 699 ; N uni0185 ; G 327
U 390 ; WX 796 ; N uni0186 ; G 328
U 391 ; WX 796 ; N uni0187 ; G 329
U 392 ; WX 609 ; N uni0188 ; G 330
U 393 ; WX 874 ; N uni0189 ; G 331
U 394 ; WX 867 ; N uni018A ; G 332
U 395 ; WX 854 ; N uni018B ; G 333
U 396 ; WX 699 ; N uni018C ; G 334
U 397 ; WX 667 ; N uni018D ; G 335
U 398 ; WX 762 ; N uni018E ; G 336
U 399 ; WX 871 ; N uni018F ; G 337
U 400 ; WX 721 ; N uni0190 ; G 338
U 401 ; WX 710 ; N uni0191 ; G 339
U 402 ; WX 430 ; N florin ; G 340
U 403 ; WX 854 ; N uni0193 ; G 341
U 404 ; WX 771 ; N uni0194 ; G 342
U 405 ; WX 1043 ; N uni0195 ; G 343
U 406 ; WX 468 ; N uni0196 ; G 344
U 407 ; WX 468 ; N uni0197 ; G 345
U 408 ; WX 869 ; N uni0198 ; G 346
U 409 ; WX 693 ; N uni0199 ; G 347
U 410 ; WX 380 ; N uni019A ; G 348
U 411 ; WX 701 ; N uni019B ; G 349
U 412 ; WX 1058 ; N uni019C ; G 350
U 413 ; WX 914 ; N uni019D ; G 351
U 414 ; WX 727 ; N uni019E ; G 352
U 415 ; WX 871 ; N uni019F ; G 353
U 416 ; WX 871 ; N Ohorn ; G 354
U 417 ; WX 667 ; N ohorn ; G 355
U 418 ; WX 1200 ; N uni01A2 ; G 356
U 419 ; WX 943 ; N uni01A3 ; G 357
U 420 ; WX 752 ; N uni01A4 ; G 358
U 421 ; WX 699 ; N uni01A5 ; G 359
U 422 ; WX 831 ; N uni01A6 ; G 360
U 423 ; WX 722 ; N uni01A7 ; G 361
U 424 ; WX 563 ; N uni01A8 ; G 362
U 425 ; WX 707 ; N uni01A9 ; G 363
U 426 ; WX 331 ; N uni01AA ; G 364
U 427 ; WX 462 ; N uni01AB ; G 365
U 428 ; WX 744 ; N uni01AC ; G 366
U 429 ; WX 462 ; N uni01AD ; G 367
U 430 ; WX 744 ; N uni01AE ; G 368
U 431 ; WX 872 ; N Uhorn ; G 369
U 432 ; WX 727 ; N uhorn ; G 370
U 433 ; WX 890 ; N uni01B1 ; G 371
U 434 ; WX 890 ; N uni01B2 ; G 372
U 435 ; WX 714 ; N uni01B3 ; G 373
U 436 ; WX 699 ; N uni01B4 ; G 374
U 437 ; WX 730 ; N uni01B5 ; G 375
U 438 ; WX 568 ; N uni01B6 ; G 376
U 439 ; WX 657 ; N uni01B7 ; G 377
U 440 ; WX 657 ; N uni01B8 ; G 378
U 441 ; WX 657 ; N uni01B9 ; G 379
U 442 ; WX 657 ; N uni01BA ; G 380
U 443 ; WX 696 ; N uni01BB ; G 381
U 444 ; WX 754 ; N uni01BC ; G 382
U 445 ; WX 568 ; N uni01BD ; G 383
U 446 ; WX 536 ; N uni01BE ; G 384
U 447 ; WX 716 ; N uni01BF ; G 385
U 448 ; WX 295 ; N uni01C0 ; G 386
U 449 ; WX 492 ; N uni01C1 ; G 387
U 450 ; WX 459 ; N uni01C2 ; G 388
U 451 ; WX 295 ; N uni01C3 ; G 389
U 452 ; WX 1597 ; N uni01C4 ; G 390
U 453 ; WX 1435 ; N uni01C5 ; G 391
U 454 ; WX 1267 ; N uni01C6 ; G 392
U 455 ; WX 1176 ; N uni01C7 ; G 393
U 456 ; WX 1065 ; N uni01C8 ; G 394
U 457 ; WX 742 ; N uni01C9 ; G 395
U 458 ; WX 1387 ; N uni01CA ; G 396
U 459 ; WX 1276 ; N uni01CB ; G 397
U 460 ; WX 1089 ; N uni01CC ; G 398
U 461 ; WX 776 ; N uni01CD ; G 399
U 462 ; WX 648 ; N uni01CE ; G 400
U 463 ; WX 468 ; N uni01CF ; G 401
U 464 ; WX 380 ; N uni01D0 ; G 402
U 465 ; WX 871 ; N uni01D1 ; G 403
U 466 ; WX 667 ; N uni01D2 ; G 404
U 467 ; WX 872 ; N uni01D3 ; G 405
U 468 ; WX 727 ; N uni01D4 ; G 406
U 469 ; WX 872 ; N uni01D5 ; G 407
U 470 ; WX 727 ; N uni01D6 ; G 408
U 471 ; WX 872 ; N uni01D7 ; G 409
U 472 ; WX 727 ; N uni01D8 ; G 410
U 473 ; WX 872 ; N uni01D9 ; G 411
U 474 ; WX 727 ; N uni01DA ; G 412
U 475 ; WX 872 ; N uni01DB ; G 413
U 476 ; WX 727 ; N uni01DC ; G 414
U 477 ; WX 636 ; N uni01DD ; G 415
U 478 ; WX 776 ; N uni01DE ; G 416
U 479 ; WX 648 ; N uni01DF ; G 417
U 480 ; WX 776 ; N uni01E0 ; G 418
U 481 ; WX 648 ; N uni01E1 ; G 419
U 482 ; WX 1034 ; N uni01E2 ; G 420
U 483 ; WX 975 ; N uni01E3 ; G 421
U 484 ; WX 896 ; N uni01E4 ; G 422
U 485 ; WX 699 ; N uni01E5 ; G 423
U 486 ; WX 854 ; N Gcaron ; G 424
U 487 ; WX 699 ; N gcaron ; G 425
U 488 ; WX 869 ; N uni01E8 ; G 426
U 489 ; WX 693 ; N uni01E9 ; G 427
U 490 ; WX 871 ; N uni01EA ; G 428
U 491 ; WX 667 ; N uni01EB ; G 429
U 492 ; WX 871 ; N uni01EC ; G 430
U 493 ; WX 667 ; N uni01ED ; G 431
U 494 ; WX 657 ; N uni01EE ; G 432
U 495 ; WX 568 ; N uni01EF ; G 433
U 496 ; WX 362 ; N uni01F0 ; G 434
U 497 ; WX 1597 ; N uni01F1 ; G 435
U 498 ; WX 1435 ; N uni01F2 ; G 436
U 499 ; WX 1267 ; N uni01F3 ; G 437
U 500 ; WX 854 ; N uni01F4 ; G 438
U 501 ; WX 699 ; N uni01F5 ; G 439
U 502 ; WX 1221 ; N uni01F6 ; G 440
U 503 ; WX 787 ; N uni01F7 ; G 441
U 504 ; WX 914 ; N uni01F8 ; G 442
U 505 ; WX 727 ; N uni01F9 ; G 443
U 506 ; WX 776 ; N Aringacute ; G 444
U 507 ; WX 648 ; N aringacute ; G 445
U 508 ; WX 1034 ; N AEacute ; G 446
U 509 ; WX 932 ; N aeacute ; G 447
U 510 ; WX 871 ; N Oslashacute ; G 448
U 511 ; WX 667 ; N oslashacute ; G 449
U 512 ; WX 776 ; N uni0200 ; G 450
U 513 ; WX 648 ; N uni0201 ; G 451
U 514 ; WX 776 ; N uni0202 ; G 452
U 515 ; WX 648 ; N uni0203 ; G 453
U 516 ; WX 762 ; N uni0204 ; G 454
U 517 ; WX 636 ; N uni0205 ; G 455
U 518 ; WX 762 ; N uni0206 ; G 456
U 519 ; WX 636 ; N uni0207 ; G 457
U 520 ; WX 468 ; N uni0208 ; G 458
U 521 ; WX 380 ; N uni0209 ; G 459
U 522 ; WX 468 ; N uni020A ; G 460
U 523 ; WX 380 ; N uni020B ; G 461
U 524 ; WX 871 ; N uni020C ; G 462
U 525 ; WX 667 ; N uni020D ; G 463
U 526 ; WX 871 ; N uni020E ; G 464
U 527 ; WX 667 ; N uni020F ; G 465
U 528 ; WX 831 ; N uni0210 ; G 466
U 529 ; WX 527 ; N uni0211 ; G 467
U 530 ; WX 831 ; N uni0212 ; G 468
U 531 ; WX 527 ; N uni0213 ; G 469
U 532 ; WX 872 ; N uni0214 ; G 470
U 533 ; WX 727 ; N uni0215 ; G 471
U 534 ; WX 872 ; N uni0216 ; G 472
U 535 ; WX 727 ; N uni0217 ; G 473
U 536 ; WX 722 ; N Scommaaccent ; G 474
U 537 ; WX 563 ; N scommaaccent ; G 475
U 538 ; WX 744 ; N uni021A ; G 476
U 539 ; WX 462 ; N uni021B ; G 477
U 540 ; WX 690 ; N uni021C ; G 478
U 541 ; WX 607 ; N uni021D ; G 479
U 542 ; WX 945 ; N uni021E ; G 480
U 543 ; WX 727 ; N uni021F ; G 481
U 544 ; WX 872 ; N uni0220 ; G 482
U 545 ; WX 791 ; N uni0221 ; G 483
U 546 ; WX 703 ; N uni0222 ; G 484
U 547 ; WX 616 ; N uni0223 ; G 485
U 548 ; WX 730 ; N uni0224 ; G 486
U 549 ; WX 568 ; N uni0225 ; G 487
U 550 ; WX 776 ; N uni0226 ; G 488
U 551 ; WX 648 ; N uni0227 ; G 489
U 552 ; WX 762 ; N uni0228 ; G 490
U 553 ; WX 636 ; N uni0229 ; G 491
U 554 ; WX 871 ; N uni022A ; G 492
U 555 ; WX 667 ; N uni022B ; G 493
U 556 ; WX 871 ; N uni022C ; G 494
U 557 ; WX 667 ; N uni022D ; G 495
U 558 ; WX 871 ; N uni022E ; G 496
U 559 ; WX 667 ; N uni022F ; G 497
U 560 ; WX 871 ; N uni0230 ; G 498
U 561 ; WX 667 ; N uni0231 ; G 499
U 562 ; WX 714 ; N uni0232 ; G 500
U 563 ; WX 581 ; N uni0233 ; G 501
U 564 ; WX 573 ; N uni0234 ; G 502
U 565 ; WX 922 ; N uni0235 ; G 503
U 566 ; WX 564 ; N uni0236 ; G 504
U 567 ; WX 362 ; N dotlessj ; G 505
U 568 ; WX 1031 ; N uni0238 ; G 506
U 569 ; WX 1031 ; N uni0239 ; G 507
U 570 ; WX 776 ; N uni023A ; G 508
U 571 ; WX 796 ; N uni023B ; G 509
U 572 ; WX 609 ; N uni023C ; G 510
U 573 ; WX 703 ; N uni023D ; G 511
U 574 ; WX 744 ; N uni023E ; G 512
U 575 ; WX 563 ; N uni023F ; G 513
U 576 ; WX 568 ; N uni0240 ; G 514
U 577 ; WX 660 ; N uni0241 ; G 515
U 578 ; WX 547 ; N uni0242 ; G 516
U 579 ; WX 845 ; N uni0243 ; G 517
U 580 ; WX 872 ; N uni0244 ; G 518
U 581 ; WX 776 ; N uni0245 ; G 519
U 582 ; WX 762 ; N uni0246 ; G 520
U 583 ; WX 636 ; N uni0247 ; G 521
U 584 ; WX 473 ; N uni0248 ; G 522
U 585 ; WX 387 ; N uni0249 ; G 523
U 586 ; WX 848 ; N uni024A ; G 524
U 587 ; WX 699 ; N uni024B ; G 525
U 588 ; WX 831 ; N uni024C ; G 526
U 589 ; WX 527 ; N uni024D ; G 527
U 590 ; WX 714 ; N uni024E ; G 528
U 591 ; WX 581 ; N uni024F ; G 529
U 592 ; WX 648 ; N uni0250 ; G 530
U 593 ; WX 770 ; N uni0251 ; G 531
U 594 ; WX 770 ; N uni0252 ; G 532
U 595 ; WX 699 ; N uni0253 ; G 533
U 596 ; WX 609 ; N uni0254 ; G 534
U 597 ; WX 609 ; N uni0255 ; G 535
U 598 ; WX 699 ; N uni0256 ; G 536
U 599 ; WX 730 ; N uni0257 ; G 537
U 600 ; WX 636 ; N uni0258 ; G 538
U 601 ; WX 636 ; N uni0259 ; G 539
U 602 ; WX 907 ; N uni025A ; G 540
U 603 ; WX 608 ; N uni025B ; G 541
U 604 ; WX 562 ; N uni025C ; G 542
U 605 ; WX 907 ; N uni025D ; G 543
U 606 ; WX 714 ; N uni025E ; G 544
U 607 ; WX 387 ; N uni025F ; G 545
U 608 ; WX 699 ; N uni0260 ; G 546
U 609 ; WX 699 ; N uni0261 ; G 547
U 610 ; WX 638 ; N uni0262 ; G 548
U 611 ; WX 601 ; N uni0263 ; G 549
U 612 ; WX 627 ; N uni0264 ; G 550
U 613 ; WX 727 ; N uni0265 ; G 551
U 614 ; WX 727 ; N uni0266 ; G 552
U 615 ; WX 727 ; N uni0267 ; G 553
U 616 ; WX 380 ; N uni0268 ; G 554
U 617 ; WX 380 ; N uni0269 ; G 555
U 618 ; WX 380 ; N uni026A ; G 556
U 619 ; WX 409 ; N uni026B ; G 557
U 620 ; WX 514 ; N uni026C ; G 558
U 621 ; WX 380 ; N uni026D ; G 559
U 622 ; WX 795 ; N uni026E ; G 560
U 623 ; WX 1058 ; N uni026F ; G 561
U 624 ; WX 1058 ; N uni0270 ; G 562
U 625 ; WX 1058 ; N uni0271 ; G 563
U 626 ; WX 727 ; N uni0272 ; G 564
U 627 ; WX 727 ; N uni0273 ; G 565
U 628 ; WX 712 ; N uni0274 ; G 566
U 629 ; WX 667 ; N uni0275 ; G 567
U 630 ; WX 1061 ; N uni0276 ; G 568
U 631 ; WX 944 ; N uni0277 ; G 569
U 632 ; WX 797 ; N uni0278 ; G 570
U 633 ; WX 571 ; N uni0279 ; G 571
U 634 ; WX 571 ; N uni027A ; G 572
U 635 ; WX 571 ; N uni027B ; G 573
U 636 ; WX 527 ; N uni027C ; G 574
U 637 ; WX 527 ; N uni027D ; G 575
U 638 ; WX 452 ; N uni027E ; G 576
U 639 ; WX 487 ; N uni027F ; G 577
U 640 ; WX 694 ; N uni0280 ; G 578
U 641 ; WX 694 ; N uni0281 ; G 579
U 642 ; WX 563 ; N uni0282 ; G 580
U 643 ; WX 331 ; N uni0283 ; G 581
U 644 ; WX 430 ; N uni0284 ; G 582
U 645 ; WX 540 ; N uni0285 ; G 583
U 646 ; WX 331 ; N uni0286 ; G 584
U 647 ; WX 492 ; N uni0287 ; G 585
U 648 ; WX 462 ; N uni0288 ; G 586
U 649 ; WX 727 ; N uni0289 ; G 587
U 650 ; WX 679 ; N uni028A ; G 588
U 651 ; WX 694 ; N uni028B ; G 589
U 652 ; WX 581 ; N uni028C ; G 590
U 653 ; WX 861 ; N uni028D ; G 591
U 654 ; WX 635 ; N uni028E ; G 592
U 655 ; WX 727 ; N uni028F ; G 593
U 656 ; WX 568 ; N uni0290 ; G 594
U 657 ; WX 568 ; N uni0291 ; G 595
U 658 ; WX 568 ; N uni0292 ; G 596
U 659 ; WX 568 ; N uni0293 ; G 597
U 660 ; WX 551 ; N uni0294 ; G 598
U 661 ; WX 551 ; N uni0295 ; G 599
U 662 ; WX 551 ; N uni0296 ; G 600
U 663 ; WX 545 ; N uni0297 ; G 601
U 664 ; WX 871 ; N uni0298 ; G 602
U 665 ; WX 695 ; N uni0299 ; G 603
U 666 ; WX 714 ; N uni029A ; G 604
U 667 ; WX 689 ; N uni029B ; G 605
U 668 ; WX 732 ; N uni029C ; G 606
U 669 ; WX 384 ; N uni029D ; G 607
U 670 ; WX 740 ; N uni029E ; G 608
U 671 ; WX 617 ; N uni029F ; G 609
U 672 ; WX 699 ; N uni02A0 ; G 610
U 673 ; WX 551 ; N uni02A1 ; G 611
U 674 ; WX 551 ; N uni02A2 ; G 612
U 675 ; WX 1117 ; N uni02A3 ; G 613
U 676 ; WX 1179 ; N uni02A4 ; G 614
U 677 ; WX 1117 ; N uni02A5 ; G 615
U 678 ; WX 938 ; N uni02A6 ; G 616
U 679 ; WX 715 ; N uni02A7 ; G 617
U 680 ; WX 946 ; N uni02A8 ; G 618
U 681 ; WX 1039 ; N uni02A9 ; G 619
U 682 ; WX 870 ; N uni02AA ; G 620
U 683 ; WX 795 ; N uni02AB ; G 621
U 684 ; WX 662 ; N uni02AC ; G 622
U 685 ; WX 443 ; N uni02AD ; G 623
U 686 ; WX 613 ; N uni02AE ; G 624
U 687 ; WX 717 ; N uni02AF ; G 625
U 688 ; WX 521 ; N uni02B0 ; G 626
U 689 ; WX 519 ; N uni02B1 ; G 627
U 690 ; WX 313 ; N uni02B2 ; G 628
U 691 ; WX 414 ; N uni02B3 ; G 629
U 692 ; WX 414 ; N uni02B4 ; G 630
U 693 ; WX 480 ; N uni02B5 ; G 631
U 694 ; WX 527 ; N uni02B6 ; G 632
U 695 ; WX 542 ; N uni02B7 ; G 633
U 696 ; WX 366 ; N uni02B8 ; G 634
U 697 ; WX 302 ; N uni02B9 ; G 635
U 698 ; WX 521 ; N uni02BA ; G 636
U 699 ; WX 348 ; N uni02BB ; G 637
U 700 ; WX 348 ; N uni02BC ; G 638
U 701 ; WX 348 ; N uni02BD ; G 639
U 702 ; WX 366 ; N uni02BE ; G 640
U 703 ; WX 366 ; N uni02BF ; G 641
U 704 ; WX 313 ; N uni02C0 ; G 642
U 705 ; WX 313 ; N uni02C1 ; G 643
U 706 ; WX 500 ; N uni02C2 ; G 644
U 707 ; WX 500 ; N uni02C3 ; G 645
U 708 ; WX 500 ; N uni02C4 ; G 646
U 709 ; WX 500 ; N uni02C5 ; G 647
U 710 ; WX 500 ; N circumflex ; G 648
U 711 ; WX 500 ; N caron ; G 649
U 712 ; WX 282 ; N uni02C8 ; G 650
U 713 ; WX 500 ; N uni02C9 ; G 651
U 714 ; WX 500 ; N uni02CA ; G 652
U 715 ; WX 500 ; N uni02CB ; G 653
U 716 ; WX 282 ; N uni02CC ; G 654
U 717 ; WX 500 ; N uni02CD ; G 655
U 720 ; WX 369 ; N uni02D0 ; G 656
U 721 ; WX 369 ; N uni02D1 ; G 657
U 722 ; WX 366 ; N uni02D2 ; G 658
U 723 ; WX 366 ; N uni02D3 ; G 659
U 726 ; WX 392 ; N uni02D6 ; G 660
U 727 ; WX 392 ; N uni02D7 ; G 661
U 728 ; WX 500 ; N breve ; G 662
U 729 ; WX 500 ; N dotaccent ; G 663
U 730 ; WX 500 ; N ring ; G 664
U 731 ; WX 500 ; N ogonek ; G 665
U 732 ; WX 500 ; N tilde ; G 666
U 733 ; WX 500 ; N hungarumlaut ; G 667
U 734 ; WX 417 ; N uni02DE ; G 668
U 736 ; WX 378 ; N uni02E0 ; G 669
U 737 ; WX 292 ; N uni02E1 ; G 670
U 738 ; WX 395 ; N uni02E2 ; G 671
U 739 ; WX 375 ; N uni02E3 ; G 672
U 740 ; WX 313 ; N uni02E4 ; G 673
U 741 ; WX 500 ; N uni02E5 ; G 674
U 742 ; WX 500 ; N uni02E6 ; G 675
U 743 ; WX 500 ; N uni02E7 ; G 676
U 744 ; WX 500 ; N uni02E8 ; G 677
U 745 ; WX 500 ; N uni02E9 ; G 678
U 748 ; WX 500 ; N uni02EC ; G 679
U 750 ; WX 553 ; N uni02EE ; G 680
U 751 ; WX 500 ; N uni02EF ; G 681
U 752 ; WX 500 ; N uni02F0 ; G 682
U 755 ; WX 500 ; N uni02F3 ; G 683
U 759 ; WX 500 ; N uni02F7 ; G 684
U 768 ; WX 0 ; N gravecomb ; G 685
U 769 ; WX 0 ; N acutecomb ; G 686
U 770 ; WX 0 ; N uni0302 ; G 687
U 771 ; WX 0 ; N tildecomb ; G 688
U 772 ; WX 0 ; N uni0304 ; G 689
U 773 ; WX 0 ; N uni0305 ; G 690
U 774 ; WX 0 ; N uni0306 ; G 691
U 775 ; WX 0 ; N uni0307 ; G 692
U 776 ; WX 0 ; N uni0308 ; G 693
U 777 ; WX 0 ; N hookabovecomb ; G 694
U 778 ; WX 0 ; N uni030A ; G 695
U 779 ; WX 0 ; N uni030B ; G 696
U 780 ; WX 0 ; N uni030C ; G 697
U 781 ; WX 0 ; N uni030D ; G 698
U 782 ; WX 0 ; N uni030E ; G 699
U 783 ; WX 0 ; N uni030F ; G 700
U 784 ; WX 0 ; N uni0310 ; G 701
U 785 ; WX 0 ; N uni0311 ; G 702
U 786 ; WX 0 ; N uni0312 ; G 703
U 787 ; WX 0 ; N uni0313 ; G 704
U 788 ; WX 0 ; N uni0314 ; G 705
U 789 ; WX 0 ; N uni0315 ; G 706
U 790 ; WX 0 ; N uni0316 ; G 707
U 791 ; WX 0 ; N uni0317 ; G 708
U 792 ; WX 0 ; N uni0318 ; G 709
U 793 ; WX 0 ; N uni0319 ; G 710
U 794 ; WX 0 ; N uni031A ; G 711
U 795 ; WX 0 ; N uni031B ; G 712
U 796 ; WX 0 ; N uni031C ; G 713
U 797 ; WX 0 ; N uni031D ; G 714
U 798 ; WX 0 ; N uni031E ; G 715
U 799 ; WX 0 ; N uni031F ; G 716
U 800 ; WX 0 ; N uni0320 ; G 717
U 801 ; WX 0 ; N uni0321 ; G 718
U 802 ; WX 0 ; N uni0322 ; G 719
U 803 ; WX 0 ; N dotbelowcomb ; G 720
U 804 ; WX 0 ; N uni0324 ; G 721
U 805 ; WX 0 ; N uni0325 ; G 722
U 806 ; WX 0 ; N uni0326 ; G 723
U 807 ; WX 0 ; N uni0327 ; G 724
U 808 ; WX 0 ; N uni0328 ; G 725
U 809 ; WX 0 ; N uni0329 ; G 726
U 810 ; WX 0 ; N uni032A ; G 727
U 811 ; WX 0 ; N uni032B ; G 728
U 812 ; WX 0 ; N uni032C ; G 729
U 813 ; WX 0 ; N uni032D ; G 730
U 814 ; WX 0 ; N uni032E ; G 731
U 815 ; WX 0 ; N uni032F ; G 732
U 816 ; WX 0 ; N uni0330 ; G 733
U 817 ; WX 0 ; N uni0331 ; G 734
U 818 ; WX 0 ; N uni0332 ; G 735
U 819 ; WX 0 ; N uni0333 ; G 736
U 820 ; WX 0 ; N uni0334 ; G 737
U 821 ; WX 0 ; N uni0335 ; G 738
U 822 ; WX 0 ; N uni0336 ; G 739
U 823 ; WX 0 ; N uni0337 ; G 740
U 824 ; WX 0 ; N uni0338 ; G 741
U 825 ; WX 0 ; N uni0339 ; G 742
U 826 ; WX 0 ; N uni033A ; G 743
U 827 ; WX 0 ; N uni033B ; G 744
U 828 ; WX 0 ; N uni033C ; G 745
U 829 ; WX 0 ; N uni033D ; G 746
U 830 ; WX 0 ; N uni033E ; G 747
U 831 ; WX 0 ; N uni033F ; G 748
U 835 ; WX 0 ; N uni0343 ; G 749
U 847 ; WX 0 ; N uni034F ; G 750
U 856 ; WX 0 ; N uni0358 ; G 751
U 864 ; WX 0 ; N uni0360 ; G 752
U 865 ; WX 0 ; N uni0361 ; G 753
U 880 ; WX 779 ; N uni0370 ; G 754
U 881 ; WX 576 ; N uni0371 ; G 755
U 882 ; WX 803 ; N uni0372 ; G 756
U 883 ; WX 777 ; N uni0373 ; G 757
U 884 ; WX 302 ; N uni0374 ; G 758
U 885 ; WX 302 ; N uni0375 ; G 759
U 886 ; WX 963 ; N uni0376 ; G 760
U 887 ; WX 737 ; N uni0377 ; G 761
U 890 ; WX 500 ; N uni037A ; G 762
U 891 ; WX 609 ; N uni037B ; G 763
U 892 ; WX 609 ; N uni037C ; G 764
U 893 ; WX 609 ; N uni037D ; G 765
U 894 ; WX 369 ; N uni037E ; G 766
U 895 ; WX 473 ; N uni037F ; G 767
U 900 ; WX 500 ; N tonos ; G 768
U 901 ; WX 500 ; N dieresistonos ; G 769
U 902 ; WX 776 ; N Alphatonos ; G 770
U 903 ; WX 348 ; N anoteleia ; G 771
U 904 ; WX 947 ; N Epsilontonos ; G 772
U 905 ; WX 1136 ; N Etatonos ; G 773
U 906 ; WX 662 ; N Iotatonos ; G 774
U 908 ; WX 887 ; N Omicrontonos ; G 775
U 910 ; WX 953 ; N Upsilontonos ; G 776
U 911 ; WX 911 ; N Omegatonos ; G 777
U 912 ; WX 484 ; N iotadieresistonos ; G 778
U 913 ; WX 776 ; N Alpha ; G 779
U 914 ; WX 845 ; N Beta ; G 780
U 915 ; WX 710 ; N Gamma ; G 781
U 916 ; WX 776 ; N uni0394 ; G 782
U 917 ; WX 762 ; N Epsilon ; G 783
U 918 ; WX 730 ; N Zeta ; G 784
U 919 ; WX 945 ; N Eta ; G 785
U 920 ; WX 871 ; N Theta ; G 786
U 921 ; WX 468 ; N Iota ; G 787
U 922 ; WX 869 ; N Kappa ; G 788
U 923 ; WX 776 ; N Lambda ; G 789
U 924 ; WX 1107 ; N Mu ; G 790
U 925 ; WX 914 ; N Nu ; G 791
U 926 ; WX 704 ; N Xi ; G 792
U 927 ; WX 871 ; N Omicron ; G 793
U 928 ; WX 945 ; N Pi ; G 794
U 929 ; WX 752 ; N Rho ; G 795
U 931 ; WX 707 ; N Sigma ; G 796
U 932 ; WX 744 ; N Tau ; G 797
U 933 ; WX 714 ; N Upsilon ; G 798
U 934 ; WX 871 ; N Phi ; G 799
U 935 ; WX 776 ; N Chi ; G 800
U 936 ; WX 913 ; N Psi ; G 801
U 937 ; WX 890 ; N Omega ; G 802
U 938 ; WX 468 ; N Iotadieresis ; G 803
U 939 ; WX 714 ; N Upsilondieresis ; G 804
U 940 ; WX 770 ; N alphatonos ; G 805
U 941 ; WX 608 ; N epsilontonos ; G 806
U 942 ; WX 727 ; N etatonos ; G 807
U 943 ; WX 484 ; N iotatonos ; G 808
U 944 ; WX 694 ; N upsilondieresistonos ; G 809
U 945 ; WX 770 ; N alpha ; G 810
U 946 ; WX 664 ; N beta ; G 811
U 947 ; WX 660 ; N gamma ; G 812
U 948 ; WX 667 ; N delta ; G 813
U 949 ; WX 608 ; N epsilon ; G 814
U 950 ; WX 592 ; N zeta ; G 815
U 951 ; WX 727 ; N eta ; G 816
U 952 ; WX 667 ; N theta ; G 817
U 953 ; WX 484 ; N iota ; G 818
U 954 ; WX 750 ; N kappa ; G 819
U 955 ; WX 701 ; N lambda ; G 820
U 956 ; WX 732 ; N uni03BC ; G 821
U 957 ; WX 694 ; N nu ; G 822
U 958 ; WX 592 ; N xi ; G 823
U 959 ; WX 667 ; N omicron ; G 824
U 960 ; WX 732 ; N pi ; G 825
U 961 ; WX 665 ; N rho ; G 826
U 962 ; WX 609 ; N sigma1 ; G 827
U 963 ; WX 737 ; N sigma ; G 828
U 964 ; WX 673 ; N tau ; G 829
U 965 ; WX 694 ; N upsilon ; G 830
U 966 ; WX 905 ; N phi ; G 831
U 967 ; WX 658 ; N chi ; G 832
U 968 ; WX 941 ; N psi ; G 833
U 969 ; WX 952 ; N omega ; G 834
U 970 ; WX 484 ; N iotadieresis ; G 835
U 971 ; WX 694 ; N upsilondieresis ; G 836
U 972 ; WX 667 ; N omicrontonos ; G 837
U 973 ; WX 694 ; N upsilontonos ; G 838
U 974 ; WX 952 ; N omegatonos ; G 839
U 975 ; WX 869 ; N uni03CF ; G 840
U 976 ; WX 667 ; N uni03D0 ; G 841
U 977 ; WX 849 ; N theta1 ; G 842
U 978 ; WX 764 ; N Upsilon1 ; G 843
U 979 ; WX 969 ; N uni03D3 ; G 844
U 980 ; WX 764 ; N uni03D4 ; G 845
U 981 ; WX 941 ; N phi1 ; G 846
U 982 ; WX 952 ; N omega1 ; G 847
U 983 ; WX 655 ; N uni03D7 ; G 848
U 984 ; WX 871 ; N uni03D8 ; G 849
U 985 ; WX 667 ; N uni03D9 ; G 850
U 986 ; WX 796 ; N uni03DA ; G 851
U 987 ; WX 609 ; N uni03DB ; G 852
U 988 ; WX 710 ; N uni03DC ; G 853
U 989 ; WX 527 ; N uni03DD ; G 854
U 990 ; WX 590 ; N uni03DE ; G 855
U 991 ; WX 660 ; N uni03DF ; G 856
U 992 ; WX 796 ; N uni03E0 ; G 857
U 993 ; WX 667 ; N uni03E1 ; G 858
U 1008 ; WX 655 ; N uni03F0 ; G 859
U 1009 ; WX 665 ; N uni03F1 ; G 860
U 1010 ; WX 609 ; N uni03F2 ; G 861
U 1011 ; WX 362 ; N uni03F3 ; G 862
U 1012 ; WX 871 ; N uni03F4 ; G 863
U 1013 ; WX 609 ; N uni03F5 ; G 864
U 1014 ; WX 609 ; N uni03F6 ; G 865
U 1015 ; WX 757 ; N uni03F7 ; G 866
U 1016 ; WX 699 ; N uni03F8 ; G 867
U 1017 ; WX 796 ; N uni03F9 ; G 868
U 1018 ; WX 1107 ; N uni03FA ; G 869
U 1019 ; WX 860 ; N uni03FB ; G 870
U 1020 ; WX 692 ; N uni03FC ; G 871
U 1021 ; WX 796 ; N uni03FD ; G 872
U 1022 ; WX 796 ; N uni03FE ; G 873
U 1023 ; WX 796 ; N uni03FF ; G 874
U 1024 ; WX 762 ; N uni0400 ; G 875
U 1025 ; WX 762 ; N uni0401 ; G 876
U 1026 ; WX 901 ; N uni0402 ; G 877
U 1027 ; WX 690 ; N uni0403 ; G 878
U 1028 ; WX 795 ; N uni0404 ; G 879
U 1029 ; WX 722 ; N uni0405 ; G 880
U 1030 ; WX 468 ; N uni0406 ; G 881
U 1031 ; WX 468 ; N uni0407 ; G 882
U 1032 ; WX 473 ; N uni0408 ; G 883
U 1033 ; WX 1202 ; N uni0409 ; G 884
U 1034 ; WX 1262 ; N uni040A ; G 885
U 1035 ; WX 963 ; N uni040B ; G 886
U 1036 ; WX 910 ; N uni040C ; G 887
U 1037 ; WX 945 ; N uni040D ; G 888
U 1038 ; WX 812 ; N uni040E ; G 889
U 1039 ; WX 945 ; N uni040F ; G 890
U 1040 ; WX 814 ; N uni0410 ; G 891
U 1041 ; WX 854 ; N uni0411 ; G 892
U 1042 ; WX 845 ; N uni0412 ; G 893
U 1043 ; WX 690 ; N uni0413 ; G 894
U 1044 ; WX 889 ; N uni0414 ; G 895
U 1045 ; WX 762 ; N uni0415 ; G 896
U 1046 ; WX 1312 ; N uni0416 ; G 897
U 1047 ; WX 721 ; N uni0417 ; G 898
U 1048 ; WX 945 ; N uni0418 ; G 899
U 1049 ; WX 945 ; N uni0419 ; G 900
U 1050 ; WX 910 ; N uni041A ; G 901
U 1051 ; WX 884 ; N uni041B ; G 902
U 1052 ; WX 1107 ; N uni041C ; G 903
U 1053 ; WX 945 ; N uni041D ; G 904
U 1054 ; WX 871 ; N uni041E ; G 905
U 1055 ; WX 945 ; N uni041F ; G 906
U 1056 ; WX 752 ; N uni0420 ; G 907
U 1057 ; WX 796 ; N uni0421 ; G 908
U 1058 ; WX 744 ; N uni0422 ; G 909
U 1059 ; WX 812 ; N uni0423 ; G 910
U 1060 ; WX 949 ; N uni0424 ; G 911
U 1061 ; WX 776 ; N uni0425 ; G 912
U 1062 ; WX 966 ; N uni0426 ; G 913
U 1063 ; WX 913 ; N uni0427 ; G 914
U 1064 ; WX 1268 ; N uni0428 ; G 915
U 1065 ; WX 1293 ; N uni0429 ; G 916
U 1066 ; WX 957 ; N uni042A ; G 917
U 1067 ; WX 1202 ; N uni042B ; G 918
U 1068 ; WX 825 ; N uni042C ; G 919
U 1069 ; WX 795 ; N uni042D ; G 920
U 1070 ; WX 1287 ; N uni042E ; G 921
U 1071 ; WX 882 ; N uni042F ; G 922
U 1072 ; WX 648 ; N uni0430 ; G 923
U 1073 ; WX 722 ; N uni0431 ; G 924
U 1074 ; WX 657 ; N uni0432 ; G 925
U 1075 ; WX 563 ; N uni0433 ; G 926
U 1076 ; WX 695 ; N uni0434 ; G 927
U 1077 ; WX 636 ; N uni0435 ; G 928
U 1078 ; WX 1306 ; N uni0436 ; G 929
U 1079 ; WX 638 ; N uni0437 ; G 930
U 1080 ; WX 727 ; N uni0438 ; G 931
U 1081 ; WX 727 ; N uni0439 ; G 932
U 1082 ; WX 677 ; N uni043A ; G 933
U 1083 ; WX 732 ; N uni043B ; G 934
U 1084 ; WX 951 ; N uni043C ; G 935
U 1085 ; WX 729 ; N uni043D ; G 936
U 1086 ; WX 667 ; N uni043E ; G 937
U 1087 ; WX 727 ; N uni043F ; G 938
U 1088 ; WX 699 ; N uni0440 ; G 939
U 1089 ; WX 609 ; N uni0441 ; G 940
U 1090 ; WX 1058 ; N uni0442 ; G 941
U 1091 ; WX 598 ; N uni0443 ; G 942
U 1092 ; WX 902 ; N uni0444 ; G 943
U 1093 ; WX 596 ; N uni0445 ; G 944
U 1094 ; WX 803 ; N uni0446 ; G 945
U 1095 ; WX 715 ; N uni0447 ; G 946
U 1096 ; WX 1058 ; N uni0448 ; G 947
U 1097 ; WX 1134 ; N uni0449 ; G 948
U 1098 ; WX 727 ; N uni044A ; G 949
U 1099 ; WX 1018 ; N uni044B ; G 950
U 1100 ; WX 660 ; N uni044C ; G 951
U 1101 ; WX 645 ; N uni044D ; G 952
U 1102 ; WX 1001 ; N uni044E ; G 953
U 1103 ; WX 796 ; N uni044F ; G 954
U 1104 ; WX 636 ; N uni0450 ; G 955
U 1105 ; WX 636 ; N uni0451 ; G 956
U 1106 ; WX 719 ; N uni0452 ; G 957
U 1107 ; WX 563 ; N uni0453 ; G 958
U 1108 ; WX 609 ; N uni0454 ; G 959
U 1109 ; WX 563 ; N uni0455 ; G 960
U 1110 ; WX 380 ; N uni0456 ; G 961
U 1111 ; WX 380 ; N uni0457 ; G 962
U 1112 ; WX 362 ; N uni0458 ; G 963
U 1113 ; WX 1014 ; N uni0459 ; G 964
U 1114 ; WX 1011 ; N uni045A ; G 965
U 1115 ; WX 727 ; N uni045B ; G 966
U 1116 ; WX 677 ; N uni045C ; G 967
U 1117 ; WX 727 ; N uni045D ; G 968
U 1118 ; WX 598 ; N uni045E ; G 969
U 1119 ; WX 727 ; N uni045F ; G 970
U 1122 ; WX 880 ; N uni0462 ; G 971
U 1123 ; WX 1050 ; N uni0463 ; G 972
U 1124 ; WX 1195 ; N uni0464 ; G 973
U 1125 ; WX 963 ; N uni0465 ; G 974
U 1130 ; WX 1312 ; N uni046A ; G 975
U 1131 ; WX 1010 ; N uni046B ; G 976
U 1132 ; WX 1630 ; N uni046C ; G 977
U 1133 ; WX 1247 ; N uni046D ; G 978
U 1136 ; WX 1096 ; N uni0470 ; G 979
U 1137 ; WX 1105 ; N uni0471 ; G 980
U 1138 ; WX 871 ; N uni0472 ; G 981
U 1139 ; WX 652 ; N uni0473 ; G 982
U 1140 ; WX 916 ; N uni0474 ; G 983
U 1141 ; WX 749 ; N uni0475 ; G 984
U 1142 ; WX 916 ; N uni0476 ; G 985
U 1143 ; WX 749 ; N uni0477 ; G 986
U 1164 ; WX 846 ; N uni048C ; G 987
U 1165 ; WX 673 ; N uni048D ; G 988
U 1168 ; WX 700 ; N uni0490 ; G 989
U 1169 ; WX 618 ; N uni0491 ; G 990
U 1170 ; WX 690 ; N uni0492 ; G 991
U 1171 ; WX 563 ; N uni0493 ; G 992
U 1172 ; WX 854 ; N uni0494 ; G 993
U 1173 ; WX 705 ; N uni0495 ; G 994
U 1174 ; WX 1312 ; N uni0496 ; G 995
U 1175 ; WX 1306 ; N uni0497 ; G 996
U 1176 ; WX 721 ; N uni0498 ; G 997
U 1177 ; WX 638 ; N uni0499 ; G 998
U 1178 ; WX 902 ; N uni049A ; G 999
U 1179 ; WX 703 ; N uni049B ; G 1000
U 1182 ; WX 910 ; N uni049E ; G 1001
U 1183 ; WX 677 ; N uni049F ; G 1002
U 1184 ; WX 1041 ; N uni04A0 ; G 1003
U 1185 ; WX 760 ; N uni04A1 ; G 1004
U 1186 ; WX 952 ; N uni04A2 ; G 1005
U 1187 ; WX 805 ; N uni04A3 ; G 1006
U 1188 ; WX 1167 ; N uni04A4 ; G 1007
U 1189 ; WX 955 ; N uni04A5 ; G 1008
U 1190 ; WX 1324 ; N uni04A6 ; G 1009
U 1191 ; WX 1013 ; N uni04A7 ; G 1010
U 1194 ; WX 796 ; N uni04AA ; G 1011
U 1195 ; WX 609 ; N uni04AB ; G 1012
U 1196 ; WX 744 ; N uni04AC ; G 1013
U 1197 ; WX 1142 ; N uni04AD ; G 1014
U 1198 ; WX 714 ; N uni04AE ; G 1015
U 1199 ; WX 572 ; N uni04AF ; G 1016
U 1200 ; WX 713 ; N uni04B0 ; G 1017
U 1201 ; WX 572 ; N uni04B1 ; G 1018
U 1202 ; WX 789 ; N uni04B2 ; G 1019
U 1203 ; WX 596 ; N uni04B3 ; G 1020
U 1204 ; WX 1010 ; N uni04B4 ; G 1021
U 1205 ; WX 833 ; N uni04B5 ; G 1022
U 1206 ; WX 913 ; N uni04B6 ; G 1023
U 1207 ; WX 792 ; N uni04B7 ; G 1024
U 1210 ; WX 910 ; N uni04BA ; G 1025
U 1211 ; WX 727 ; N uni04BB ; G 1026
U 1216 ; WX 468 ; N uni04C0 ; G 1027
U 1217 ; WX 1312 ; N uni04C1 ; G 1028
U 1218 ; WX 1306 ; N uni04C2 ; G 1029
U 1219 ; WX 869 ; N uni04C3 ; G 1030
U 1220 ; WX 693 ; N uni04C4 ; G 1031
U 1223 ; WX 945 ; N uni04C7 ; G 1032
U 1224 ; WX 732 ; N uni04C8 ; G 1033
U 1227 ; WX 984 ; N uni04CB ; G 1034
U 1228 ; WX 732 ; N uni04CC ; G 1035
U 1231 ; WX 380 ; N uni04CF ; G 1036
U 1232 ; WX 814 ; N uni04D0 ; G 1037
U 1233 ; WX 648 ; N uni04D1 ; G 1038
U 1234 ; WX 814 ; N uni04D2 ; G 1039
U 1235 ; WX 648 ; N uni04D3 ; G 1040
U 1236 ; WX 1034 ; N uni04D4 ; G 1041
U 1237 ; WX 975 ; N uni04D5 ; G 1042
U 1238 ; WX 762 ; N uni04D6 ; G 1043
U 1239 ; WX 636 ; N uni04D7 ; G 1044
U 1240 ; WX 871 ; N uni04D8 ; G 1045
U 1241 ; WX 636 ; N uni04D9 ; G 1046
U 1242 ; WX 871 ; N uni04DA ; G 1047
U 1243 ; WX 636 ; N uni04DB ; G 1048
U 1244 ; WX 1312 ; N uni04DC ; G 1049
U 1245 ; WX 1306 ; N uni04DD ; G 1050
U 1246 ; WX 721 ; N uni04DE ; G 1051
U 1247 ; WX 638 ; N uni04DF ; G 1052
U 1248 ; WX 657 ; N uni04E0 ; G 1053
U 1249 ; WX 568 ; N uni04E1 ; G 1054
U 1250 ; WX 945 ; N uni04E2 ; G 1055
U 1251 ; WX 727 ; N uni04E3 ; G 1056
U 1252 ; WX 945 ; N uni04E4 ; G 1057
U 1253 ; WX 727 ; N uni04E5 ; G 1058
U 1254 ; WX 871 ; N uni04E6 ; G 1059
U 1255 ; WX 667 ; N uni04E7 ; G 1060
U 1256 ; WX 871 ; N uni04E8 ; G 1061
U 1257 ; WX 667 ; N uni04E9 ; G 1062
U 1258 ; WX 871 ; N uni04EA ; G 1063
U 1259 ; WX 667 ; N uni04EB ; G 1064
U 1260 ; WX 795 ; N uni04EC ; G 1065
U 1261 ; WX 645 ; N uni04ED ; G 1066
U 1262 ; WX 812 ; N uni04EE ; G 1067
U 1263 ; WX 598 ; N uni04EF ; G 1068
U 1264 ; WX 812 ; N uni04F0 ; G 1069
U 1265 ; WX 598 ; N uni04F1 ; G 1070
U 1266 ; WX 812 ; N uni04F2 ; G 1071
U 1267 ; WX 598 ; N uni04F3 ; G 1072
U 1268 ; WX 913 ; N uni04F4 ; G 1073
U 1269 ; WX 715 ; N uni04F5 ; G 1074
U 1270 ; WX 690 ; N uni04F6 ; G 1075
U 1271 ; WX 563 ; N uni04F7 ; G 1076
U 1272 ; WX 1202 ; N uni04F8 ; G 1077
U 1273 ; WX 1018 ; N uni04F9 ; G 1078
U 1296 ; WX 721 ; N uni0510 ; G 1079
U 1297 ; WX 638 ; N uni0511 ; G 1080
U 1298 ; WX 884 ; N uni0512 ; G 1081
U 1299 ; WX 732 ; N uni0513 ; G 1082
U 1300 ; WX 1248 ; N uni0514 ; G 1083
U 1301 ; WX 1005 ; N uni0515 ; G 1084
U 1306 ; WX 820 ; N uni051A ; G 1085
U 1307 ; WX 640 ; N uni051B ; G 1086
U 1308 ; WX 1028 ; N uni051C ; G 1087
U 1309 ; WX 856 ; N uni051D ; G 1088
U 1329 ; WX 942 ; N uni0531 ; G 1089
U 1330 ; WX 832 ; N uni0532 ; G 1090
U 1331 ; WX 894 ; N uni0533 ; G 1091
U 1332 ; WX 909 ; N uni0534 ; G 1092
U 1333 ; WX 822 ; N uni0535 ; G 1093
U 1334 ; WX 821 ; N uni0536 ; G 1094
U 1335 ; WX 747 ; N uni0537 ; G 1095
U 1336 ; WX 832 ; N uni0538 ; G 1096
U 1337 ; WX 1125 ; N uni0539 ; G 1097
U 1338 ; WX 894 ; N uni053A ; G 1098
U 1339 ; WX 803 ; N uni053B ; G 1099
U 1340 ; WX 722 ; N uni053C ; G 1100
U 1341 ; WX 1188 ; N uni053D ; G 1101
U 1342 ; WX 887 ; N uni053E ; G 1102
U 1343 ; WX 842 ; N uni053F ; G 1103
U 1344 ; WX 737 ; N uni0540 ; G 1104
U 1345 ; WX 863 ; N uni0541 ; G 1105
U 1346 ; WX 918 ; N uni0542 ; G 1106
U 1347 ; WX 851 ; N uni0543 ; G 1107
U 1348 ; WX 977 ; N uni0544 ; G 1108
U 1349 ; WX 833 ; N uni0545 ; G 1109
U 1350 ; WX 914 ; N uni0546 ; G 1110
U 1351 ; WX 843 ; N uni0547 ; G 1111
U 1352 ; WX 871 ; N uni0548 ; G 1112
U 1353 ; WX 818 ; N uni0549 ; G 1113
U 1354 ; WX 1034 ; N uni054A ; G 1114
U 1355 ; WX 846 ; N uni054B ; G 1115
U 1356 ; WX 964 ; N uni054C ; G 1116
U 1357 ; WX 871 ; N uni054D ; G 1117
U 1358 ; WX 914 ; N uni054E ; G 1118
U 1359 ; WX 808 ; N uni054F ; G 1119
U 1360 ; WX 808 ; N uni0550 ; G 1120
U 1361 ; WX 836 ; N uni0551 ; G 1121
U 1362 ; WX 710 ; N uni0552 ; G 1122
U 1363 ; WX 955 ; N uni0553 ; G 1123
U 1364 ; WX 891 ; N uni0554 ; G 1124
U 1365 ; WX 871 ; N uni0555 ; G 1125
U 1366 ; WX 963 ; N uni0556 ; G 1126
U 1369 ; WX 307 ; N uni0559 ; G 1127
U 1370 ; WX 264 ; N uni055A ; G 1128
U 1371 ; WX 293 ; N uni055B ; G 1129
U 1372 ; WX 391 ; N uni055C ; G 1130
U 1373 ; WX 323 ; N uni055D ; G 1131
U 1374 ; WX 439 ; N uni055E ; G 1132
U 1375 ; WX 500 ; N uni055F ; G 1133
U 1377 ; WX 1055 ; N uni0561 ; G 1134
U 1378 ; WX 695 ; N uni0562 ; G 1135
U 1379 ; WX 776 ; N uni0563 ; G 1136
U 1380 ; WX 801 ; N uni0564 ; G 1137
U 1381 ; WX 729 ; N uni0565 ; G 1138
U 1382 ; WX 742 ; N uni0566 ; G 1139
U 1383 ; WX 599 ; N uni0567 ; G 1140
U 1384 ; WX 733 ; N uni0568 ; G 1141
U 1385 ; WX 909 ; N uni0569 ; G 1142
U 1386 ; WX 768 ; N uni056A ; G 1143
U 1387 ; WX 724 ; N uni056B ; G 1144
U 1388 ; WX 398 ; N uni056C ; G 1145
U 1389 ; WX 1087 ; N uni056D ; G 1146
U 1390 ; WX 695 ; N uni056E ; G 1147
U 1391 ; WX 719 ; N uni056F ; G 1148
U 1392 ; WX 737 ; N uni0570 ; G 1149
U 1393 ; WX 684 ; N uni0571 ; G 1150
U 1394 ; WX 738 ; N uni0572 ; G 1151
U 1395 ; WX 703 ; N uni0573 ; G 1152
U 1396 ; WX 724 ; N uni0574 ; G 1153
U 1397 ; WX 359 ; N uni0575 ; G 1154
U 1398 ; WX 719 ; N uni0576 ; G 1155
U 1399 ; WX 496 ; N uni0577 ; G 1156
U 1400 ; WX 738 ; N uni0578 ; G 1157
U 1401 ; WX 428 ; N uni0579 ; G 1158
U 1402 ; WX 1059 ; N uni057A ; G 1159
U 1403 ; WX 668 ; N uni057B ; G 1160
U 1404 ; WX 744 ; N uni057C ; G 1161
U 1405 ; WX 724 ; N uni057D ; G 1162
U 1406 ; WX 724 ; N uni057E ; G 1163
U 1407 ; WX 1040 ; N uni057F ; G 1164
U 1408 ; WX 724 ; N uni0580 ; G 1165
U 1409 ; WX 713 ; N uni0581 ; G 1166
U 1410 ; WX 493 ; N uni0582 ; G 1167
U 1411 ; WX 1040 ; N uni0583 ; G 1168
U 1412 ; WX 734 ; N uni0584 ; G 1169
U 1413 ; WX 693 ; N uni0585 ; G 1170
U 1414 ; WX 956 ; N uni0586 ; G 1171
U 1415 ; WX 833 ; N uni0587 ; G 1172
U 1417 ; WX 340 ; N uni0589 ; G 1173
U 1418 ; WX 388 ; N uni058A ; G 1174
U 3647 ; WX 696 ; N uni0E3F ; G 1175
U 4256 ; WX 765 ; N uni10A0 ; G 1176
U 4257 ; WX 945 ; N uni10A1 ; G 1177
U 4258 ; WX 876 ; N uni10A2 ; G 1178
U 4259 ; WX 884 ; N uni10A3 ; G 1179
U 4260 ; WX 791 ; N uni10A4 ; G 1180
U 4261 ; WX 1087 ; N uni10A5 ; G 1181
U 4262 ; WX 1024 ; N uni10A6 ; G 1182
U 4263 ; WX 1223 ; N uni10A7 ; G 1183
U 4264 ; WX 653 ; N uni10A8 ; G 1184
U 4265 ; WX 828 ; N uni10A9 ; G 1185
U 4266 ; WX 1061 ; N uni10AA ; G 1186
U 4267 ; WX 1061 ; N uni10AB ; G 1187
U 4268 ; WX 806 ; N uni10AC ; G 1188
U 4269 ; WX 1145 ; N uni10AD ; G 1189
U 4270 ; WX 979 ; N uni10AE ; G 1190
U 4271 ; WX 912 ; N uni10AF ; G 1191
U 4272 ; WX 1119 ; N uni10B0 ; G 1192
U 4273 ; WX 802 ; N uni10B1 ; G 1193
U 4274 ; WX 766 ; N uni10B2 ; G 1194
U 4275 ; WX 1085 ; N uni10B3 ; G 1195
U 4276 ; WX 986 ; N uni10B4 ; G 1196
U 4277 ; WX 1076 ; N uni10B5 ; G 1197
U 4278 ; WX 820 ; N uni10B6 ; G 1198
U 4279 ; WX 843 ; N uni10B7 ; G 1199
U 4280 ; WX 831 ; N uni10B8 ; G 1200
U 4281 ; WX 843 ; N uni10B9 ; G 1201
U 4282 ; WX 918 ; N uni10BA ; G 1202
U 4283 ; WX 1086 ; N uni10BB ; G 1203
U 4284 ; WX 779 ; N uni10BC ; G 1204
U 4285 ; WX 832 ; N uni10BD ; G 1205
U 4286 ; WX 822 ; N uni10BE ; G 1206
U 4287 ; WX 1121 ; N uni10BF ; G 1207
U 4288 ; WX 1132 ; N uni10C0 ; G 1208
U 4289 ; WX 812 ; N uni10C1 ; G 1209
U 4290 ; WX 902 ; N uni10C2 ; G 1210
U 4291 ; WX 812 ; N uni10C3 ; G 1211
U 4292 ; WX 890 ; N uni10C4 ; G 1212
U 4293 ; WX 1073 ; N uni10C5 ; G 1213
U 4304 ; WX 594 ; N uni10D0 ; G 1214
U 4305 ; WX 625 ; N uni10D1 ; G 1215
U 4306 ; WX 643 ; N uni10D2 ; G 1216
U 4307 ; WX 887 ; N uni10D3 ; G 1217
U 4308 ; WX 615 ; N uni10D4 ; G 1218
U 4309 ; WX 611 ; N uni10D5 ; G 1219
U 4310 ; WX 666 ; N uni10D6 ; G 1220
U 4311 ; WX 915 ; N uni10D7 ; G 1221
U 4312 ; WX 613 ; N uni10D8 ; G 1222
U 4313 ; WX 600 ; N uni10D9 ; G 1223
U 4314 ; WX 1120 ; N uni10DA ; G 1224
U 4315 ; WX 654 ; N uni10DB ; G 1225
U 4316 ; WX 640 ; N uni10DC ; G 1226
U 4317 ; WX 879 ; N uni10DD ; G 1227
U 4318 ; WX 624 ; N uni10DE ; G 1228
U 4319 ; WX 634 ; N uni10DF ; G 1229
U 4320 ; WX 877 ; N uni10E0 ; G 1230
U 4321 ; WX 657 ; N uni10E1 ; G 1231
U 4322 ; WX 802 ; N uni10E2 ; G 1232
U 4323 ; WX 751 ; N uni10E3 ; G 1233
U 4324 ; WX 869 ; N uni10E4 ; G 1234
U 4325 ; WX 639 ; N uni10E5 ; G 1235
U 4326 ; WX 912 ; N uni10E6 ; G 1236
U 4327 ; WX 622 ; N uni10E7 ; G 1237
U 4328 ; WX 647 ; N uni10E8 ; G 1238
U 4329 ; WX 640 ; N uni10E9 ; G 1239
U 4330 ; WX 729 ; N uni10EA ; G 1240
U 4331 ; WX 641 ; N uni10EB ; G 1241
U 4332 ; WX 639 ; N uni10EC ; G 1242
U 4333 ; WX 629 ; N uni10ED ; G 1243
U 4334 ; WX 674 ; N uni10EE ; G 1244
U 4335 ; WX 737 ; N uni10EF ; G 1245
U 4336 ; WX 625 ; N uni10F0 ; G 1246
U 4337 ; WX 657 ; N uni10F1 ; G 1247
U 4338 ; WX 625 ; N uni10F2 ; G 1248
U 4339 ; WX 625 ; N uni10F3 ; G 1249
U 4340 ; WX 624 ; N uni10F4 ; G 1250
U 4341 ; WX 670 ; N uni10F5 ; G 1251
U 4342 ; WX 940 ; N uni10F6 ; G 1252
U 4343 ; WX 680 ; N uni10F7 ; G 1253
U 4344 ; WX 636 ; N uni10F8 ; G 1254
U 4345 ; WX 672 ; N uni10F9 ; G 1255
U 4346 ; WX 625 ; N uni10FA ; G 1256
U 4347 ; WX 446 ; N uni10FB ; G 1257
U 4348 ; WX 363 ; N uni10FC ; G 1258
U 7424 ; WX 641 ; N uni1D00 ; G 1259
U 7425 ; WX 892 ; N uni1D01 ; G 1260
U 7426 ; WX 932 ; N uni1D02 ; G 1261
U 7427 ; WX 695 ; N uni1D03 ; G 1262
U 7428 ; WX 609 ; N uni1D04 ; G 1263
U 7429 ; WX 675 ; N uni1D05 ; G 1264
U 7430 ; WX 675 ; N uni1D06 ; G 1265
U 7431 ; WX 617 ; N uni1D07 ; G 1266
U 7432 ; WX 509 ; N uni1D08 ; G 1267
U 7433 ; WX 320 ; N uni1D09 ; G 1268
U 7434 ; WX 561 ; N uni1D0A ; G 1269
U 7435 ; WX 722 ; N uni1D0B ; G 1270
U 7436 ; WX 617 ; N uni1D0C ; G 1271
U 7437 ; WX 869 ; N uni1D0D ; G 1272
U 7438 ; WX 737 ; N uni1D0E ; G 1273
U 7439 ; WX 667 ; N uni1D0F ; G 1274
U 7440 ; WX 609 ; N uni1D10 ; G 1275
U 7441 ; WX 628 ; N uni1D11 ; G 1276
U 7442 ; WX 628 ; N uni1D12 ; G 1277
U 7443 ; WX 667 ; N uni1D13 ; G 1278
U 7444 ; WX 1028 ; N uni1D14 ; G 1279
U 7445 ; WX 598 ; N uni1D15 ; G 1280
U 7446 ; WX 667 ; N uni1D16 ; G 1281
U 7447 ; WX 667 ; N uni1D17 ; G 1282
U 7448 ; WX 586 ; N uni1D18 ; G 1283
U 7449 ; WX 801 ; N uni1D19 ; G 1284
U 7450 ; WX 801 ; N uni1D1A ; G 1285
U 7451 ; WX 620 ; N uni1D1B ; G 1286
U 7452 ; WX 647 ; N uni1D1C ; G 1287
U 7453 ; WX 664 ; N uni1D1D ; G 1288
U 7454 ; WX 923 ; N uni1D1E ; G 1289
U 7455 ; WX 655 ; N uni1D1F ; G 1290
U 7456 ; WX 581 ; N uni1D20 ; G 1291
U 7457 ; WX 861 ; N uni1D21 ; G 1292
U 7458 ; WX 568 ; N uni1D22 ; G 1293
U 7459 ; WX 568 ; N uni1D23 ; G 1294
U 7460 ; WX 588 ; N uni1D24 ; G 1295
U 7461 ; WX 802 ; N uni1D25 ; G 1296
U 7462 ; WX 586 ; N uni1D26 ; G 1297
U 7463 ; WX 641 ; N uni1D27 ; G 1298
U 7464 ; WX 732 ; N uni1D28 ; G 1299
U 7465 ; WX 586 ; N uni1D29 ; G 1300
U 7466 ; WX 854 ; N uni1D2A ; G 1301
U 7467 ; WX 705 ; N uni1D2B ; G 1302
U 7468 ; WX 489 ; N uni1D2C ; G 1303
U 7469 ; WX 651 ; N uni1D2D ; G 1304
U 7470 ; WX 532 ; N uni1D2E ; G 1305
U 7471 ; WX 532 ; N uni1D2F ; G 1306
U 7472 ; WX 546 ; N uni1D30 ; G 1307
U 7473 ; WX 480 ; N uni1D31 ; G 1308
U 7474 ; WX 480 ; N uni1D32 ; G 1309
U 7475 ; WX 538 ; N uni1D33 ; G 1310
U 7476 ; WX 595 ; N uni1D34 ; G 1311
U 7477 ; WX 294 ; N uni1D35 ; G 1312
U 7478 ; WX 298 ; N uni1D36 ; G 1313
U 7479 ; WX 547 ; N uni1D37 ; G 1314
U 7480 ; WX 443 ; N uni1D38 ; G 1315
U 7481 ; WX 697 ; N uni1D39 ; G 1316
U 7482 ; WX 576 ; N uni1D3A ; G 1317
U 7483 ; WX 606 ; N uni1D3B ; G 1318
U 7484 ; WX 548 ; N uni1D3C ; G 1319
U 7485 ; WX 442 ; N uni1D3D ; G 1320
U 7486 ; WX 474 ; N uni1D3E ; G 1321
U 7487 ; WX 523 ; N uni1D3F ; G 1322
U 7488 ; WX 469 ; N uni1D40 ; G 1323
U 7489 ; WX 549 ; N uni1D41 ; G 1324
U 7490 ; WX 708 ; N uni1D42 ; G 1325
U 7491 ; WX 408 ; N uni1D43 ; G 1326
U 7492 ; WX 408 ; N uni1D44 ; G 1327
U 7493 ; WX 484 ; N uni1D45 ; G 1328
U 7494 ; WX 587 ; N uni1D46 ; G 1329
U 7495 ; WX 499 ; N uni1D47 ; G 1330
U 7496 ; WX 498 ; N uni1D48 ; G 1331
U 7497 ; WX 444 ; N uni1D49 ; G 1332
U 7498 ; WX 444 ; N uni1D4A ; G 1333
U 7499 ; WX 412 ; N uni1D4B ; G 1334
U 7500 ; WX 412 ; N uni1D4C ; G 1335
U 7501 ; WX 498 ; N uni1D4D ; G 1336
U 7502 ; WX 300 ; N uni1D4E ; G 1337
U 7503 ; WX 523 ; N uni1D4F ; G 1338
U 7504 ; WX 729 ; N uni1D50 ; G 1339
U 7505 ; WX 473 ; N uni1D51 ; G 1340
U 7506 ; WX 467 ; N uni1D52 ; G 1341
U 7507 ; WX 427 ; N uni1D53 ; G 1342
U 7508 ; WX 467 ; N uni1D54 ; G 1343
U 7509 ; WX 467 ; N uni1D55 ; G 1344
U 7510 ; WX 499 ; N uni1D56 ; G 1345
U 7511 ; WX 371 ; N uni1D57 ; G 1346
U 7512 ; WX 520 ; N uni1D58 ; G 1347
U 7513 ; WX 418 ; N uni1D59 ; G 1348
U 7514 ; WX 729 ; N uni1D5A ; G 1349
U 7515 ; WX 491 ; N uni1D5B ; G 1350
U 7516 ; WX 505 ; N uni1D5C ; G 1351
U 7517 ; WX 418 ; N uni1D5D ; G 1352
U 7518 ; WX 416 ; N uni1D5E ; G 1353
U 7519 ; WX 420 ; N uni1D5F ; G 1354
U 7520 ; WX 570 ; N uni1D60 ; G 1355
U 7521 ; WX 414 ; N uni1D61 ; G 1356
U 7522 ; WX 239 ; N uni1D62 ; G 1357
U 7523 ; WX 414 ; N uni1D63 ; G 1358
U 7524 ; WX 520 ; N uni1D64 ; G 1359
U 7525 ; WX 491 ; N uni1D65 ; G 1360
U 7526 ; WX 418 ; N uni1D66 ; G 1361
U 7527 ; WX 416 ; N uni1D67 ; G 1362
U 7528 ; WX 419 ; N uni1D68 ; G 1363
U 7529 ; WX 570 ; N uni1D69 ; G 1364
U 7530 ; WX 414 ; N uni1D6A ; G 1365
U 7531 ; WX 1042 ; N uni1D6B ; G 1366
U 7543 ; WX 640 ; N uni1D77 ; G 1367
U 7544 ; WX 595 ; N uni1D78 ; G 1368
U 7547 ; WX 380 ; N uni1D7B ; G 1369
U 7548 ; WX 380 ; N uni1D7C ; G 1370
U 7549 ; WX 699 ; N uni1D7D ; G 1371
U 7550 ; WX 647 ; N uni1D7E ; G 1372
U 7551 ; WX 679 ; N uni1D7F ; G 1373
U 7557 ; WX 380 ; N uni1D85 ; G 1374
U 7579 ; WX 484 ; N uni1D9B ; G 1375
U 7580 ; WX 427 ; N uni1D9C ; G 1376
U 7581 ; WX 427 ; N uni1D9D ; G 1377
U 7582 ; WX 467 ; N uni1D9E ; G 1378
U 7583 ; WX 412 ; N uni1D9F ; G 1379
U 7584 ; WX 271 ; N uni1DA0 ; G 1380
U 7585 ; WX 373 ; N uni1DA1 ; G 1381
U 7586 ; WX 498 ; N uni1DA2 ; G 1382
U 7587 ; WX 522 ; N uni1DA3 ; G 1383
U 7588 ; WX 300 ; N uni1DA4 ; G 1384
U 7589 ; WX 307 ; N uni1DA5 ; G 1385
U 7590 ; WX 300 ; N uni1DA6 ; G 1386
U 7591 ; WX 300 ; N uni1DA7 ; G 1387
U 7592 ; WX 370 ; N uni1DA8 ; G 1388
U 7593 ; WX 368 ; N uni1DA9 ; G 1389
U 7594 ; WX 321 ; N uni1DAA ; G 1390
U 7595 ; WX 430 ; N uni1DAB ; G 1391
U 7596 ; WX 682 ; N uni1DAC ; G 1392
U 7597 ; WX 729 ; N uni1DAD ; G 1393
U 7598 ; WX 588 ; N uni1DAE ; G 1394
U 7599 ; WX 587 ; N uni1DAF ; G 1395
U 7600 ; WX 472 ; N uni1DB0 ; G 1396
U 7601 ; WX 467 ; N uni1DB1 ; G 1397
U 7602 ; WX 522 ; N uni1DB2 ; G 1398
U 7603 ; WX 400 ; N uni1DB3 ; G 1399
U 7604 ; WX 387 ; N uni1DB4 ; G 1400
U 7605 ; WX 371 ; N uni1DB5 ; G 1401
U 7606 ; WX 520 ; N uni1DB6 ; G 1402
U 7607 ; WX 475 ; N uni1DB7 ; G 1403
U 7608 ; WX 408 ; N uni1DB8 ; G 1404
U 7609 ; WX 489 ; N uni1DB9 ; G 1405
U 7610 ; WX 366 ; N uni1DBA ; G 1406
U 7611 ; WX 357 ; N uni1DBB ; G 1407
U 7612 ; WX 527 ; N uni1DBC ; G 1408
U 7613 ; WX 412 ; N uni1DBD ; G 1409
U 7614 ; WX 452 ; N uni1DBE ; G 1410
U 7615 ; WX 467 ; N uni1DBF ; G 1411
U 7620 ; WX 0 ; N uni1DC4 ; G 1412
U 7621 ; WX 0 ; N uni1DC5 ; G 1413
U 7622 ; WX 0 ; N uni1DC6 ; G 1414
U 7623 ; WX 0 ; N uni1DC7 ; G 1415
U 7624 ; WX 0 ; N uni1DC8 ; G 1416
U 7625 ; WX 0 ; N uni1DC9 ; G 1417
U 7680 ; WX 776 ; N uni1E00 ; G 1418
U 7681 ; WX 648 ; N uni1E01 ; G 1419
U 7682 ; WX 845 ; N uni1E02 ; G 1420
U 7683 ; WX 699 ; N uni1E03 ; G 1421
U 7684 ; WX 845 ; N uni1E04 ; G 1422
U 7685 ; WX 699 ; N uni1E05 ; G 1423
U 7686 ; WX 845 ; N uni1E06 ; G 1424
U 7687 ; WX 699 ; N uni1E07 ; G 1425
U 7688 ; WX 796 ; N uni1E08 ; G 1426
U 7689 ; WX 609 ; N uni1E09 ; G 1427
U 7690 ; WX 867 ; N uni1E0A ; G 1428
U 7691 ; WX 699 ; N uni1E0B ; G 1429
U 7692 ; WX 867 ; N uni1E0C ; G 1430
U 7693 ; WX 699 ; N uni1E0D ; G 1431
U 7694 ; WX 867 ; N uni1E0E ; G 1432
U 7695 ; WX 699 ; N uni1E0F ; G 1433
U 7696 ; WX 867 ; N uni1E10 ; G 1434
U 7697 ; WX 699 ; N uni1E11 ; G 1435
U 7698 ; WX 867 ; N uni1E12 ; G 1436
U 7699 ; WX 699 ; N uni1E13 ; G 1437
U 7700 ; WX 762 ; N uni1E14 ; G 1438
U 7701 ; WX 636 ; N uni1E15 ; G 1439
U 7702 ; WX 762 ; N uni1E16 ; G 1440
U 7703 ; WX 636 ; N uni1E17 ; G 1441
U 7704 ; WX 762 ; N uni1E18 ; G 1442
U 7705 ; WX 636 ; N uni1E19 ; G 1443
U 7706 ; WX 762 ; N uni1E1A ; G 1444
U 7707 ; WX 636 ; N uni1E1B ; G 1445
U 7708 ; WX 762 ; N uni1E1C ; G 1446
U 7709 ; WX 636 ; N uni1E1D ; G 1447
U 7710 ; WX 710 ; N uni1E1E ; G 1448
U 7711 ; WX 430 ; N uni1E1F ; G 1449
U 7712 ; WX 854 ; N uni1E20 ; G 1450
U 7713 ; WX 699 ; N uni1E21 ; G 1451
U 7714 ; WX 945 ; N uni1E22 ; G 1452
U 7715 ; WX 727 ; N uni1E23 ; G 1453
U 7716 ; WX 945 ; N uni1E24 ; G 1454
U 7717 ; WX 727 ; N uni1E25 ; G 1455
U 7718 ; WX 945 ; N uni1E26 ; G 1456
U 7719 ; WX 727 ; N uni1E27 ; G 1457
U 7720 ; WX 945 ; N uni1E28 ; G 1458
U 7721 ; WX 727 ; N uni1E29 ; G 1459
U 7722 ; WX 945 ; N uni1E2A ; G 1460
U 7723 ; WX 727 ; N uni1E2B ; G 1461
U 7724 ; WX 468 ; N uni1E2C ; G 1462
U 7725 ; WX 380 ; N uni1E2D ; G 1463
U 7726 ; WX 468 ; N uni1E2E ; G 1464
U 7727 ; WX 380 ; N uni1E2F ; G 1465
U 7728 ; WX 869 ; N uni1E30 ; G 1466
U 7729 ; WX 693 ; N uni1E31 ; G 1467
U 7730 ; WX 869 ; N uni1E32 ; G 1468
U 7731 ; WX 693 ; N uni1E33 ; G 1469
U 7732 ; WX 869 ; N uni1E34 ; G 1470
U 7733 ; WX 693 ; N uni1E35 ; G 1471
U 7734 ; WX 703 ; N uni1E36 ; G 1472
U 7735 ; WX 380 ; N uni1E37 ; G 1473
U 7736 ; WX 703 ; N uni1E38 ; G 1474
U 7737 ; WX 380 ; N uni1E39 ; G 1475
U 7738 ; WX 703 ; N uni1E3A ; G 1476
U 7739 ; WX 380 ; N uni1E3B ; G 1477
U 7740 ; WX 703 ; N uni1E3C ; G 1478
U 7741 ; WX 380 ; N uni1E3D ; G 1479
U 7742 ; WX 1107 ; N uni1E3E ; G 1480
U 7743 ; WX 1058 ; N uni1E3F ; G 1481
U 7744 ; WX 1107 ; N uni1E40 ; G 1482
U 7745 ; WX 1058 ; N uni1E41 ; G 1483
U 7746 ; WX 1107 ; N uni1E42 ; G 1484
U 7747 ; WX 1058 ; N uni1E43 ; G 1485
U 7748 ; WX 914 ; N uni1E44 ; G 1486
U 7749 ; WX 727 ; N uni1E45 ; G 1487
U 7750 ; WX 914 ; N uni1E46 ; G 1488
U 7751 ; WX 727 ; N uni1E47 ; G 1489
U 7752 ; WX 914 ; N uni1E48 ; G 1490
U 7753 ; WX 727 ; N uni1E49 ; G 1491
U 7754 ; WX 914 ; N uni1E4A ; G 1492
U 7755 ; WX 727 ; N uni1E4B ; G 1493
U 7756 ; WX 871 ; N uni1E4C ; G 1494
U 7757 ; WX 667 ; N uni1E4D ; G 1495
U 7758 ; WX 871 ; N uni1E4E ; G 1496
U 7759 ; WX 667 ; N uni1E4F ; G 1497
U 7760 ; WX 871 ; N uni1E50 ; G 1498
U 7761 ; WX 667 ; N uni1E51 ; G 1499
U 7762 ; WX 871 ; N uni1E52 ; G 1500
U 7763 ; WX 667 ; N uni1E53 ; G 1501
U 7764 ; WX 752 ; N uni1E54 ; G 1502
U 7765 ; WX 699 ; N uni1E55 ; G 1503
U 7766 ; WX 752 ; N uni1E56 ; G 1504
U 7767 ; WX 699 ; N uni1E57 ; G 1505
U 7768 ; WX 831 ; N uni1E58 ; G 1506
U 7769 ; WX 527 ; N uni1E59 ; G 1507
U 7770 ; WX 831 ; N uni1E5A ; G 1508
U 7771 ; WX 527 ; N uni1E5B ; G 1509
U 7772 ; WX 831 ; N uni1E5C ; G 1510
U 7773 ; WX 527 ; N uni1E5D ; G 1511
U 7774 ; WX 831 ; N uni1E5E ; G 1512
U 7775 ; WX 527 ; N uni1E5F ; G 1513
U 7776 ; WX 722 ; N uni1E60 ; G 1514
U 7777 ; WX 563 ; N uni1E61 ; G 1515
U 7778 ; WX 722 ; N uni1E62 ; G 1516
U 7779 ; WX 563 ; N uni1E63 ; G 1517
U 7780 ; WX 722 ; N uni1E64 ; G 1518
U 7781 ; WX 563 ; N uni1E65 ; G 1519
U 7782 ; WX 722 ; N uni1E66 ; G 1520
U 7783 ; WX 563 ; N uni1E67 ; G 1521
U 7784 ; WX 722 ; N uni1E68 ; G 1522
U 7785 ; WX 563 ; N uni1E69 ; G 1523
U 7786 ; WX 744 ; N uni1E6A ; G 1524
U 7787 ; WX 462 ; N uni1E6B ; G 1525
U 7788 ; WX 744 ; N uni1E6C ; G 1526
U 7789 ; WX 462 ; N uni1E6D ; G 1527
U 7790 ; WX 744 ; N uni1E6E ; G 1528
U 7791 ; WX 462 ; N uni1E6F ; G 1529
U 7792 ; WX 744 ; N uni1E70 ; G 1530
U 7793 ; WX 462 ; N uni1E71 ; G 1531
U 7794 ; WX 872 ; N uni1E72 ; G 1532
U 7795 ; WX 727 ; N uni1E73 ; G 1533
U 7796 ; WX 872 ; N uni1E74 ; G 1534
U 7797 ; WX 727 ; N uni1E75 ; G 1535
U 7798 ; WX 872 ; N uni1E76 ; G 1536
U 7799 ; WX 727 ; N uni1E77 ; G 1537
U 7800 ; WX 872 ; N uni1E78 ; G 1538
U 7801 ; WX 727 ; N uni1E79 ; G 1539
U 7802 ; WX 872 ; N uni1E7A ; G 1540
U 7803 ; WX 727 ; N uni1E7B ; G 1541
U 7804 ; WX 776 ; N uni1E7C ; G 1542
U 7805 ; WX 581 ; N uni1E7D ; G 1543
U 7806 ; WX 776 ; N uni1E7E ; G 1544
U 7807 ; WX 581 ; N uni1E7F ; G 1545
U 7808 ; WX 1123 ; N Wgrave ; G 1546
U 7809 ; WX 861 ; N wgrave ; G 1547
U 7810 ; WX 1123 ; N Wacute ; G 1548
U 7811 ; WX 861 ; N wacute ; G 1549
U 7812 ; WX 1123 ; N Wdieresis ; G 1550
U 7813 ; WX 861 ; N wdieresis ; G 1551
U 7814 ; WX 1123 ; N uni1E86 ; G 1552
U 7815 ; WX 861 ; N uni1E87 ; G 1553
U 7816 ; WX 1123 ; N uni1E88 ; G 1554
U 7817 ; WX 861 ; N uni1E89 ; G 1555
U 7818 ; WX 776 ; N uni1E8A ; G 1556
U 7819 ; WX 596 ; N uni1E8B ; G 1557
U 7820 ; WX 776 ; N uni1E8C ; G 1558
U 7821 ; WX 596 ; N uni1E8D ; G 1559
U 7822 ; WX 714 ; N uni1E8E ; G 1560
U 7823 ; WX 581 ; N uni1E8F ; G 1561
U 7824 ; WX 730 ; N uni1E90 ; G 1562
U 7825 ; WX 568 ; N uni1E91 ; G 1563
U 7826 ; WX 730 ; N uni1E92 ; G 1564
U 7827 ; WX 568 ; N uni1E93 ; G 1565
U 7828 ; WX 730 ; N uni1E94 ; G 1566
U 7829 ; WX 568 ; N uni1E95 ; G 1567
U 7830 ; WX 727 ; N uni1E96 ; G 1568
U 7831 ; WX 462 ; N uni1E97 ; G 1569
U 7832 ; WX 861 ; N uni1E98 ; G 1570
U 7833 ; WX 581 ; N uni1E99 ; G 1571
U 7834 ; WX 1014 ; N uni1E9A ; G 1572
U 7835 ; WX 430 ; N uni1E9B ; G 1573
U 7836 ; WX 430 ; N uni1E9C ; G 1574
U 7837 ; WX 430 ; N uni1E9D ; G 1575
U 7838 ; WX 947 ; N uni1E9E ; G 1576
U 7839 ; WX 667 ; N uni1E9F ; G 1577
U 7840 ; WX 776 ; N uni1EA0 ; G 1578
U 7841 ; WX 648 ; N uni1EA1 ; G 1579
U 7842 ; WX 776 ; N uni1EA2 ; G 1580
U 7843 ; WX 648 ; N uni1EA3 ; G 1581
U 7844 ; WX 776 ; N uni1EA4 ; G 1582
U 7845 ; WX 648 ; N uni1EA5 ; G 1583
U 7846 ; WX 776 ; N uni1EA6 ; G 1584
U 7847 ; WX 648 ; N uni1EA7 ; G 1585
U 7848 ; WX 776 ; N uni1EA8 ; G 1586
U 7849 ; WX 648 ; N uni1EA9 ; G 1587
U 7850 ; WX 776 ; N uni1EAA ; G 1588
U 7851 ; WX 648 ; N uni1EAB ; G 1589
U 7852 ; WX 776 ; N uni1EAC ; G 1590
U 7853 ; WX 648 ; N uni1EAD ; G 1591
U 7854 ; WX 776 ; N uni1EAE ; G 1592
U 7855 ; WX 648 ; N uni1EAF ; G 1593
U 7856 ; WX 776 ; N uni1EB0 ; G 1594
U 7857 ; WX 648 ; N uni1EB1 ; G 1595
U 7858 ; WX 776 ; N uni1EB2 ; G 1596
U 7859 ; WX 648 ; N uni1EB3 ; G 1597
U 7860 ; WX 776 ; N uni1EB4 ; G 1598
U 7861 ; WX 648 ; N uni1EB5 ; G 1599
U 7862 ; WX 776 ; N uni1EB6 ; G 1600
U 7863 ; WX 648 ; N uni1EB7 ; G 1601
U 7864 ; WX 762 ; N uni1EB8 ; G 1602
U 7865 ; WX 636 ; N uni1EB9 ; G 1603
U 7866 ; WX 762 ; N uni1EBA ; G 1604
U 7867 ; WX 636 ; N uni1EBB ; G 1605
U 7868 ; WX 762 ; N uni1EBC ; G 1606
U 7869 ; WX 636 ; N uni1EBD ; G 1607
U 7870 ; WX 762 ; N uni1EBE ; G 1608
U 7871 ; WX 636 ; N uni1EBF ; G 1609
U 7872 ; WX 762 ; N uni1EC0 ; G 1610
U 7873 ; WX 636 ; N uni1EC1 ; G 1611
U 7874 ; WX 762 ; N uni1EC2 ; G 1612
U 7875 ; WX 636 ; N uni1EC3 ; G 1613
U 7876 ; WX 762 ; N uni1EC4 ; G 1614
U 7877 ; WX 636 ; N uni1EC5 ; G 1615
U 7878 ; WX 762 ; N uni1EC6 ; G 1616
U 7879 ; WX 636 ; N uni1EC7 ; G 1617
U 7880 ; WX 468 ; N uni1EC8 ; G 1618
U 7881 ; WX 380 ; N uni1EC9 ; G 1619
U 7882 ; WX 468 ; N uni1ECA ; G 1620
U 7883 ; WX 380 ; N uni1ECB ; G 1621
U 7884 ; WX 871 ; N uni1ECC ; G 1622
U 7885 ; WX 667 ; N uni1ECD ; G 1623
U 7886 ; WX 871 ; N uni1ECE ; G 1624
U 7887 ; WX 667 ; N uni1ECF ; G 1625
U 7888 ; WX 871 ; N uni1ED0 ; G 1626
U 7889 ; WX 667 ; N uni1ED1 ; G 1627
U 7890 ; WX 871 ; N uni1ED2 ; G 1628
U 7891 ; WX 667 ; N uni1ED3 ; G 1629
U 7892 ; WX 871 ; N uni1ED4 ; G 1630
U 7893 ; WX 667 ; N uni1ED5 ; G 1631
U 7894 ; WX 871 ; N uni1ED6 ; G 1632
U 7895 ; WX 667 ; N uni1ED7 ; G 1633
U 7896 ; WX 871 ; N uni1ED8 ; G 1634
U 7897 ; WX 667 ; N uni1ED9 ; G 1635
U 7898 ; WX 871 ; N uni1EDA ; G 1636
U 7899 ; WX 667 ; N uni1EDB ; G 1637
U 7900 ; WX 871 ; N uni1EDC ; G 1638
U 7901 ; WX 667 ; N uni1EDD ; G 1639
U 7902 ; WX 871 ; N uni1EDE ; G 1640
U 7903 ; WX 667 ; N uni1EDF ; G 1641
U 7904 ; WX 871 ; N uni1EE0 ; G 1642
U 7905 ; WX 667 ; N uni1EE1 ; G 1643
U 7906 ; WX 871 ; N uni1EE2 ; G 1644
U 7907 ; WX 667 ; N uni1EE3 ; G 1645
U 7908 ; WX 872 ; N uni1EE4 ; G 1646
U 7909 ; WX 727 ; N uni1EE5 ; G 1647
U 7910 ; WX 872 ; N uni1EE6 ; G 1648
U 7911 ; WX 727 ; N uni1EE7 ; G 1649
U 7912 ; WX 872 ; N uni1EE8 ; G 1650
U 7913 ; WX 727 ; N uni1EE9 ; G 1651
U 7914 ; WX 872 ; N uni1EEA ; G 1652
U 7915 ; WX 727 ; N uni1EEB ; G 1653
U 7916 ; WX 872 ; N uni1EEC ; G 1654
U 7917 ; WX 727 ; N uni1EED ; G 1655
U 7918 ; WX 872 ; N uni1EEE ; G 1656
U 7919 ; WX 727 ; N uni1EEF ; G 1657
U 7920 ; WX 872 ; N uni1EF0 ; G 1658
U 7921 ; WX 727 ; N uni1EF1 ; G 1659
U 7922 ; WX 714 ; N Ygrave ; G 1660
U 7923 ; WX 581 ; N ygrave ; G 1661
U 7924 ; WX 714 ; N uni1EF4 ; G 1662
U 7925 ; WX 581 ; N uni1EF5 ; G 1663
U 7926 ; WX 714 ; N uni1EF6 ; G 1664
U 7927 ; WX 581 ; N uni1EF7 ; G 1665
U 7928 ; WX 714 ; N uni1EF8 ; G 1666
U 7929 ; WX 581 ; N uni1EF9 ; G 1667
U 7930 ; WX 1078 ; N uni1EFA ; G 1668
U 7931 ; WX 701 ; N uni1EFB ; G 1669
U 7936 ; WX 770 ; N uni1F00 ; G 1670
U 7937 ; WX 770 ; N uni1F01 ; G 1671
U 7938 ; WX 770 ; N uni1F02 ; G 1672
U 7939 ; WX 770 ; N uni1F03 ; G 1673
U 7940 ; WX 770 ; N uni1F04 ; G 1674
U 7941 ; WX 770 ; N uni1F05 ; G 1675
U 7942 ; WX 770 ; N uni1F06 ; G 1676
U 7943 ; WX 770 ; N uni1F07 ; G 1677
U 7944 ; WX 776 ; N uni1F08 ; G 1678
U 7945 ; WX 776 ; N uni1F09 ; G 1679
U 7946 ; WX 978 ; N uni1F0A ; G 1680
U 7947 ; WX 978 ; N uni1F0B ; G 1681
U 7948 ; WX 832 ; N uni1F0C ; G 1682
U 7949 ; WX 849 ; N uni1F0D ; G 1683
U 7950 ; WX 776 ; N uni1F0E ; G 1684
U 7951 ; WX 776 ; N uni1F0F ; G 1685
U 7952 ; WX 608 ; N uni1F10 ; G 1686
U 7953 ; WX 608 ; N uni1F11 ; G 1687
U 7954 ; WX 608 ; N uni1F12 ; G 1688
U 7955 ; WX 608 ; N uni1F13 ; G 1689
U 7956 ; WX 608 ; N uni1F14 ; G 1690
U 7957 ; WX 608 ; N uni1F15 ; G 1691
U 7960 ; WX 917 ; N uni1F18 ; G 1692
U 7961 ; WX 909 ; N uni1F19 ; G 1693
U 7962 ; WX 1169 ; N uni1F1A ; G 1694
U 7963 ; WX 1169 ; N uni1F1B ; G 1695
U 7964 ; WX 1093 ; N uni1F1C ; G 1696
U 7965 ; WX 1120 ; N uni1F1D ; G 1697
U 7968 ; WX 727 ; N uni1F20 ; G 1698
U 7969 ; WX 727 ; N uni1F21 ; G 1699
U 7970 ; WX 727 ; N uni1F22 ; G 1700
U 7971 ; WX 727 ; N uni1F23 ; G 1701
U 7972 ; WX 727 ; N uni1F24 ; G 1702
U 7973 ; WX 727 ; N uni1F25 ; G 1703
U 7974 ; WX 727 ; N uni1F26 ; G 1704
U 7975 ; WX 727 ; N uni1F27 ; G 1705
U 7976 ; WX 1100 ; N uni1F28 ; G 1706
U 7977 ; WX 1094 ; N uni1F29 ; G 1707
U 7978 ; WX 1358 ; N uni1F2A ; G 1708
U 7979 ; WX 1361 ; N uni1F2B ; G 1709
U 7980 ; WX 1279 ; N uni1F2C ; G 1710
U 7981 ; WX 1308 ; N uni1F2D ; G 1711
U 7982 ; WX 1197 ; N uni1F2E ; G 1712
U 7983 ; WX 1194 ; N uni1F2F ; G 1713
U 7984 ; WX 484 ; N uni1F30 ; G 1714
U 7985 ; WX 484 ; N uni1F31 ; G 1715
U 7986 ; WX 484 ; N uni1F32 ; G 1716
U 7987 ; WX 484 ; N uni1F33 ; G 1717
U 7988 ; WX 484 ; N uni1F34 ; G 1718
U 7989 ; WX 484 ; N uni1F35 ; G 1719
U 7990 ; WX 484 ; N uni1F36 ; G 1720
U 7991 ; WX 484 ; N uni1F37 ; G 1721
U 7992 ; WX 629 ; N uni1F38 ; G 1722
U 7993 ; WX 617 ; N uni1F39 ; G 1723
U 7994 ; WX 878 ; N uni1F3A ; G 1724
U 7995 ; WX 881 ; N uni1F3B ; G 1725
U 7996 ; WX 799 ; N uni1F3C ; G 1726
U 7997 ; WX 831 ; N uni1F3D ; G 1727
U 7998 ; WX 723 ; N uni1F3E ; G 1728
U 7999 ; WX 714 ; N uni1F3F ; G 1729
U 8000 ; WX 667 ; N uni1F40 ; G 1730
U 8001 ; WX 667 ; N uni1F41 ; G 1731
U 8002 ; WX 667 ; N uni1F42 ; G 1732
U 8003 ; WX 667 ; N uni1F43 ; G 1733
U 8004 ; WX 667 ; N uni1F44 ; G 1734
U 8005 ; WX 667 ; N uni1F45 ; G 1735
U 8008 ; WX 900 ; N uni1F48 ; G 1736
U 8009 ; WX 935 ; N uni1F49 ; G 1737
U 8010 ; WX 1240 ; N uni1F4A ; G 1738
U 8011 ; WX 1237 ; N uni1F4B ; G 1739
U 8012 ; WX 1035 ; N uni1F4C ; G 1740
U 8013 ; WX 1066 ; N uni1F4D ; G 1741
U 8016 ; WX 694 ; N uni1F50 ; G 1742
U 8017 ; WX 694 ; N uni1F51 ; G 1743
U 8018 ; WX 694 ; N uni1F52 ; G 1744
U 8019 ; WX 694 ; N uni1F53 ; G 1745
U 8020 ; WX 694 ; N uni1F54 ; G 1746
U 8021 ; WX 694 ; N uni1F55 ; G 1747
U 8022 ; WX 694 ; N uni1F56 ; G 1748
U 8023 ; WX 694 ; N uni1F57 ; G 1749
U 8025 ; WX 922 ; N uni1F59 ; G 1750
U 8027 ; WX 1186 ; N uni1F5B ; G 1751
U 8029 ; WX 1133 ; N uni1F5D ; G 1752
U 8031 ; WX 1019 ; N uni1F5F ; G 1753
U 8032 ; WX 952 ; N uni1F60 ; G 1754
U 8033 ; WX 952 ; N uni1F61 ; G 1755
U 8034 ; WX 952 ; N uni1F62 ; G 1756
U 8035 ; WX 952 ; N uni1F63 ; G 1757
U 8036 ; WX 952 ; N uni1F64 ; G 1758
U 8037 ; WX 952 ; N uni1F65 ; G 1759
U 8038 ; WX 952 ; N uni1F66 ; G 1760
U 8039 ; WX 952 ; N uni1F67 ; G 1761
U 8040 ; WX 931 ; N uni1F68 ; G 1762
U 8041 ; WX 963 ; N uni1F69 ; G 1763
U 8042 ; WX 1268 ; N uni1F6A ; G 1764
U 8043 ; WX 1274 ; N uni1F6B ; G 1765
U 8044 ; WX 1054 ; N uni1F6C ; G 1766
U 8045 ; WX 1088 ; N uni1F6D ; G 1767
U 8046 ; WX 1023 ; N uni1F6E ; G 1768
U 8047 ; WX 1060 ; N uni1F6F ; G 1769
U 8048 ; WX 770 ; N uni1F70 ; G 1770
U 8049 ; WX 770 ; N uni1F71 ; G 1771
U 8050 ; WX 608 ; N uni1F72 ; G 1772
U 8051 ; WX 608 ; N uni1F73 ; G 1773
U 8052 ; WX 727 ; N uni1F74 ; G 1774
U 8053 ; WX 727 ; N uni1F75 ; G 1775
U 8054 ; WX 484 ; N uni1F76 ; G 1776
U 8055 ; WX 484 ; N uni1F77 ; G 1777
U 8056 ; WX 667 ; N uni1F78 ; G 1778
U 8057 ; WX 667 ; N uni1F79 ; G 1779
U 8058 ; WX 694 ; N uni1F7A ; G 1780
U 8059 ; WX 694 ; N uni1F7B ; G 1781
U 8060 ; WX 952 ; N uni1F7C ; G 1782
U 8061 ; WX 952 ; N uni1F7D ; G 1783
U 8064 ; WX 770 ; N uni1F80 ; G 1784
U 8065 ; WX 770 ; N uni1F81 ; G 1785
U 8066 ; WX 770 ; N uni1F82 ; G 1786
U 8067 ; WX 770 ; N uni1F83 ; G 1787
U 8068 ; WX 770 ; N uni1F84 ; G 1788
U 8069 ; WX 770 ; N uni1F85 ; G 1789
U 8070 ; WX 770 ; N uni1F86 ; G 1790
U 8071 ; WX 770 ; N uni1F87 ; G 1791
U 8072 ; WX 776 ; N uni1F88 ; G 1792
U 8073 ; WX 776 ; N uni1F89 ; G 1793
U 8074 ; WX 978 ; N uni1F8A ; G 1794
U 8075 ; WX 978 ; N uni1F8B ; G 1795
U 8076 ; WX 832 ; N uni1F8C ; G 1796
U 8077 ; WX 849 ; N uni1F8D ; G 1797
U 8078 ; WX 776 ; N uni1F8E ; G 1798
U 8079 ; WX 776 ; N uni1F8F ; G 1799
U 8080 ; WX 727 ; N uni1F90 ; G 1800
U 8081 ; WX 727 ; N uni1F91 ; G 1801
U 8082 ; WX 727 ; N uni1F92 ; G 1802
U 8083 ; WX 727 ; N uni1F93 ; G 1803
U 8084 ; WX 727 ; N uni1F94 ; G 1804
U 8085 ; WX 727 ; N uni1F95 ; G 1805
U 8086 ; WX 727 ; N uni1F96 ; G 1806
U 8087 ; WX 727 ; N uni1F97 ; G 1807
U 8088 ; WX 1100 ; N uni1F98 ; G 1808
U 8089 ; WX 1094 ; N uni1F99 ; G 1809
U 8090 ; WX 1358 ; N uni1F9A ; G 1810
U 8091 ; WX 1361 ; N uni1F9B ; G 1811
U 8092 ; WX 1279 ; N uni1F9C ; G 1812
U 8093 ; WX 1308 ; N uni1F9D ; G 1813
U 8094 ; WX 1197 ; N uni1F9E ; G 1814
U 8095 ; WX 1194 ; N uni1F9F ; G 1815
U 8096 ; WX 952 ; N uni1FA0 ; G 1816
U 8097 ; WX 952 ; N uni1FA1 ; G 1817
U 8098 ; WX 952 ; N uni1FA2 ; G 1818
U 8099 ; WX 952 ; N uni1FA3 ; G 1819
U 8100 ; WX 952 ; N uni1FA4 ; G 1820
U 8101 ; WX 952 ; N uni1FA5 ; G 1821
U 8102 ; WX 952 ; N uni1FA6 ; G 1822
U 8103 ; WX 952 ; N uni1FA7 ; G 1823
U 8104 ; WX 931 ; N uni1FA8 ; G 1824
U 8105 ; WX 963 ; N uni1FA9 ; G 1825
U 8106 ; WX 1268 ; N uni1FAA ; G 1826
U 8107 ; WX 1274 ; N uni1FAB ; G 1827
U 8108 ; WX 1054 ; N uni1FAC ; G 1828
U 8109 ; WX 1088 ; N uni1FAD ; G 1829
U 8110 ; WX 1023 ; N uni1FAE ; G 1830
U 8111 ; WX 1060 ; N uni1FAF ; G 1831
U 8112 ; WX 770 ; N uni1FB0 ; G 1832
U 8113 ; WX 770 ; N uni1FB1 ; G 1833
U 8114 ; WX 770 ; N uni1FB2 ; G 1834
U 8115 ; WX 770 ; N uni1FB3 ; G 1835
U 8116 ; WX 770 ; N uni1FB4 ; G 1836
U 8118 ; WX 770 ; N uni1FB6 ; G 1837
U 8119 ; WX 770 ; N uni1FB7 ; G 1838
U 8120 ; WX 776 ; N uni1FB8 ; G 1839
U 8121 ; WX 776 ; N uni1FB9 ; G 1840
U 8122 ; WX 811 ; N uni1FBA ; G 1841
U 8123 ; WX 776 ; N uni1FBB ; G 1842
U 8124 ; WX 776 ; N uni1FBC ; G 1843
U 8125 ; WX 500 ; N uni1FBD ; G 1844
U 8126 ; WX 500 ; N uni1FBE ; G 1845
U 8127 ; WX 500 ; N uni1FBF ; G 1846
U 8128 ; WX 500 ; N uni1FC0 ; G 1847
U 8129 ; WX 500 ; N uni1FC1 ; G 1848
U 8130 ; WX 727 ; N uni1FC2 ; G 1849
U 8131 ; WX 727 ; N uni1FC3 ; G 1850
U 8132 ; WX 727 ; N uni1FC4 ; G 1851
U 8134 ; WX 727 ; N uni1FC6 ; G 1852
U 8135 ; WX 727 ; N uni1FC7 ; G 1853
U 8136 ; WX 1000 ; N uni1FC8 ; G 1854
U 8137 ; WX 947 ; N uni1FC9 ; G 1855
U 8138 ; WX 1191 ; N uni1FCA ; G 1856
U 8139 ; WX 1118 ; N uni1FCB ; G 1857
U 8140 ; WX 945 ; N uni1FCC ; G 1858
U 8141 ; WX 500 ; N uni1FCD ; G 1859
U 8142 ; WX 500 ; N uni1FCE ; G 1860
U 8143 ; WX 500 ; N uni1FCF ; G 1861
U 8144 ; WX 484 ; N uni1FD0 ; G 1862
U 8145 ; WX 484 ; N uni1FD1 ; G 1863
U 8146 ; WX 484 ; N uni1FD2 ; G 1864
U 8147 ; WX 484 ; N uni1FD3 ; G 1865
U 8150 ; WX 484 ; N uni1FD6 ; G 1866
U 8151 ; WX 484 ; N uni1FD7 ; G 1867
U 8152 ; WX 468 ; N uni1FD8 ; G 1868
U 8153 ; WX 468 ; N uni1FD9 ; G 1869
U 8154 ; WX 714 ; N uni1FDA ; G 1870
U 8155 ; WX 662 ; N uni1FDB ; G 1871
U 8157 ; WX 500 ; N uni1FDD ; G 1872
U 8158 ; WX 500 ; N uni1FDE ; G 1873
U 8159 ; WX 500 ; N uni1FDF ; G 1874
U 8160 ; WX 694 ; N uni1FE0 ; G 1875
U 8161 ; WX 694 ; N uni1FE1 ; G 1876
U 8162 ; WX 694 ; N uni1FE2 ; G 1877
U 8163 ; WX 694 ; N uni1FE3 ; G 1878
U 8164 ; WX 665 ; N uni1FE4 ; G 1879
U 8165 ; WX 665 ; N uni1FE5 ; G 1880
U 8166 ; WX 694 ; N uni1FE6 ; G 1881
U 8167 ; WX 694 ; N uni1FE7 ; G 1882
U 8168 ; WX 714 ; N uni1FE8 ; G 1883
U 8169 ; WX 714 ; N uni1FE9 ; G 1884
U 8170 ; WX 1019 ; N uni1FEA ; G 1885
U 8171 ; WX 953 ; N uni1FEB ; G 1886
U 8172 ; WX 910 ; N uni1FEC ; G 1887
U 8173 ; WX 500 ; N uni1FED ; G 1888
U 8174 ; WX 500 ; N uni1FEE ; G 1889
U 8175 ; WX 500 ; N uni1FEF ; G 1890
U 8178 ; WX 952 ; N uni1FF2 ; G 1891
U 8179 ; WX 952 ; N uni1FF3 ; G 1892
U 8180 ; WX 952 ; N uni1FF4 ; G 1893
U 8182 ; WX 952 ; N uni1FF6 ; G 1894
U 8183 ; WX 952 ; N uni1FF7 ; G 1895
U 8184 ; WX 1069 ; N uni1FF8 ; G 1896
U 8185 ; WX 887 ; N uni1FF9 ; G 1897
U 8186 ; WX 1101 ; N uni1FFA ; G 1898
U 8187 ; WX 911 ; N uni1FFB ; G 1899
U 8188 ; WX 890 ; N uni1FFC ; G 1900
U 8189 ; WX 500 ; N uni1FFD ; G 1901
U 8190 ; WX 500 ; N uni1FFE ; G 1902
U 8192 ; WX 500 ; N uni2000 ; G 1903
U 8193 ; WX 1000 ; N uni2001 ; G 1904
U 8194 ; WX 500 ; N uni2002 ; G 1905
U 8195 ; WX 1000 ; N uni2003 ; G 1906
U 8196 ; WX 330 ; N uni2004 ; G 1907
U 8197 ; WX 250 ; N uni2005 ; G 1908
U 8198 ; WX 167 ; N uni2006 ; G 1909
U 8199 ; WX 696 ; N uni2007 ; G 1910
U 8200 ; WX 348 ; N uni2008 ; G 1911
U 8201 ; WX 200 ; N uni2009 ; G 1912
U 8202 ; WX 100 ; N uni200A ; G 1913
U 8203 ; WX 0 ; N uni200B ; G 1914
U 8204 ; WX 0 ; N uni200C ; G 1915
U 8205 ; WX 0 ; N uni200D ; G 1916
U 8206 ; WX 0 ; N uni200E ; G 1917
U 8207 ; WX 0 ; N uni200F ; G 1918
U 8208 ; WX 415 ; N uni2010 ; G 1919
U 8209 ; WX 415 ; N uni2011 ; G 1920
U 8210 ; WX 696 ; N figuredash ; G 1921
U 8211 ; WX 500 ; N endash ; G 1922
U 8212 ; WX 1000 ; N emdash ; G 1923
U 8213 ; WX 1000 ; N uni2015 ; G 1924
U 8214 ; WX 500 ; N uni2016 ; G 1925
U 8215 ; WX 500 ; N underscoredbl ; G 1926
U 8216 ; WX 348 ; N quoteleft ; G 1927
U 8217 ; WX 348 ; N quoteright ; G 1928
U 8218 ; WX 348 ; N quotesinglbase ; G 1929
U 8219 ; WX 348 ; N quotereversed ; G 1930
U 8220 ; WX 575 ; N quotedblleft ; G 1931
U 8221 ; WX 575 ; N quotedblright ; G 1932
U 8222 ; WX 575 ; N quotedblbase ; G 1933
U 8223 ; WX 575 ; N uni201F ; G 1934
U 8224 ; WX 523 ; N dagger ; G 1935
U 8225 ; WX 523 ; N daggerdbl ; G 1936
U 8226 ; WX 639 ; N bullet ; G 1937
U 8227 ; WX 639 ; N uni2023 ; G 1938
U 8228 ; WX 348 ; N onedotenleader ; G 1939
U 8229 ; WX 674 ; N twodotenleader ; G 1940
U 8230 ; WX 1000 ; N ellipsis ; G 1941
U 8234 ; WX 0 ; N uni202A ; G 1942
U 8235 ; WX 0 ; N uni202B ; G 1943
U 8236 ; WX 0 ; N uni202C ; G 1944
U 8237 ; WX 0 ; N uni202D ; G 1945
U 8238 ; WX 0 ; N uni202E ; G 1946
U 8239 ; WX 200 ; N uni202F ; G 1947
U 8240 ; WX 1385 ; N perthousand ; G 1948
U 8241 ; WX 1813 ; N uni2031 ; G 1949
U 8242 ; WX 264 ; N minute ; G 1950
U 8243 ; WX 447 ; N second ; G 1951
U 8244 ; WX 630 ; N uni2034 ; G 1952
U 8245 ; WX 264 ; N uni2035 ; G 1953
U 8246 ; WX 447 ; N uni2036 ; G 1954
U 8247 ; WX 630 ; N uni2037 ; G 1955
U 8248 ; WX 733 ; N uni2038 ; G 1956
U 8249 ; WX 400 ; N guilsinglleft ; G 1957
U 8250 ; WX 400 ; N guilsinglright ; G 1958
U 8252 ; WX 629 ; N exclamdbl ; G 1959
U 8253 ; WX 586 ; N uni203D ; G 1960
U 8254 ; WX 500 ; N uni203E ; G 1961
U 8258 ; WX 1023 ; N uni2042 ; G 1962
U 8260 ; WX 167 ; N fraction ; G 1963
U 8261 ; WX 473 ; N uni2045 ; G 1964
U 8262 ; WX 473 ; N uni2046 ; G 1965
U 8263 ; WX 1082 ; N uni2047 ; G 1966
U 8264 ; WX 856 ; N uni2048 ; G 1967
U 8265 ; WX 856 ; N uni2049 ; G 1968
U 8267 ; WX 636 ; N uni204B ; G 1969
U 8268 ; WX 500 ; N uni204C ; G 1970
U 8269 ; WX 500 ; N uni204D ; G 1971
U 8270 ; WX 523 ; N uni204E ; G 1972
U 8271 ; WX 369 ; N uni204F ; G 1973
U 8273 ; WX 523 ; N uni2051 ; G 1974
U 8274 ; WX 556 ; N uni2052 ; G 1975
U 8275 ; WX 1000 ; N uni2053 ; G 1976
U 8279 ; WX 813 ; N uni2057 ; G 1977
U 8287 ; WX 222 ; N uni205F ; G 1978
U 8288 ; WX 0 ; N uni2060 ; G 1979
U 8289 ; WX 0 ; N uni2061 ; G 1980
U 8290 ; WX 0 ; N uni2062 ; G 1981
U 8291 ; WX 0 ; N uni2063 ; G 1982
U 8292 ; WX 0 ; N uni2064 ; G 1983
U 8298 ; WX 0 ; N uni206A ; G 1984
U 8299 ; WX 0 ; N uni206B ; G 1985
U 8300 ; WX 0 ; N uni206C ; G 1986
U 8301 ; WX 0 ; N uni206D ; G 1987
U 8302 ; WX 0 ; N uni206E ; G 1988
U 8303 ; WX 0 ; N uni206F ; G 1989
U 8304 ; WX 438 ; N uni2070 ; G 1990
U 8305 ; WX 239 ; N uni2071 ; G 1991
U 8308 ; WX 438 ; N uni2074 ; G 1992
U 8309 ; WX 438 ; N uni2075 ; G 1993
U 8310 ; WX 438 ; N uni2076 ; G 1994
U 8311 ; WX 438 ; N uni2077 ; G 1995
U 8312 ; WX 438 ; N uni2078 ; G 1996
U 8313 ; WX 438 ; N uni2079 ; G 1997
U 8314 ; WX 528 ; N uni207A ; G 1998
U 8315 ; WX 528 ; N uni207B ; G 1999
U 8316 ; WX 528 ; N uni207C ; G 2000
U 8317 ; WX 298 ; N uni207D ; G 2001
U 8318 ; WX 298 ; N uni207E ; G 2002
U 8319 ; WX 458 ; N uni207F ; G 2003
U 8320 ; WX 438 ; N uni2080 ; G 2004
U 8321 ; WX 438 ; N uni2081 ; G 2005
U 8322 ; WX 438 ; N uni2082 ; G 2006
U 8323 ; WX 438 ; N uni2083 ; G 2007
U 8324 ; WX 438 ; N uni2084 ; G 2008
U 8325 ; WX 438 ; N uni2085 ; G 2009
U 8326 ; WX 438 ; N uni2086 ; G 2010
U 8327 ; WX 438 ; N uni2087 ; G 2011
U 8328 ; WX 438 ; N uni2088 ; G 2012
U 8329 ; WX 438 ; N uni2089 ; G 2013
U 8330 ; WX 528 ; N uni208A ; G 2014
U 8331 ; WX 528 ; N uni208B ; G 2015
U 8332 ; WX 528 ; N uni208C ; G 2016
U 8333 ; WX 298 ; N uni208D ; G 2017
U 8334 ; WX 298 ; N uni208E ; G 2018
U 8336 ; WX 408 ; N uni2090 ; G 2019
U 8337 ; WX 444 ; N uni2091 ; G 2020
U 8338 ; WX 467 ; N uni2092 ; G 2021
U 8339 ; WX 375 ; N uni2093 ; G 2022
U 8340 ; WX 444 ; N uni2094 ; G 2023
U 8341 ; WX 521 ; N uni2095 ; G 2024
U 8342 ; WX 523 ; N uni2096 ; G 2025
U 8343 ; WX 292 ; N uni2097 ; G 2026
U 8344 ; WX 729 ; N uni2098 ; G 2027
U 8345 ; WX 458 ; N uni2099 ; G 2028
U 8346 ; WX 499 ; N uni209A ; G 2029
U 8347 ; WX 395 ; N uni209B ; G 2030
U 8348 ; WX 371 ; N uni209C ; G 2031
U 8358 ; WX 696 ; N uni20A6 ; G 2032
U 8364 ; WX 696 ; N Euro ; G 2033
U 8367 ; WX 1155 ; N uni20AF ; G 2034
U 8369 ; WX 790 ; N uni20B1 ; G 2035
U 8372 ; WX 876 ; N uni20B4 ; G 2036
U 8373 ; WX 696 ; N uni20B5 ; G 2037
U 8376 ; WX 696 ; N uni20B8 ; G 2038
U 8377 ; WX 696 ; N uni20B9 ; G 2039
U 8378 ; WX 696 ; N uni20BA ; G 2040
U 8381 ; WX 696 ; N uni20BD ; G 2041
U 8451 ; WX 1198 ; N uni2103 ; G 2042
U 8457 ; WX 1112 ; N uni2109 ; G 2043
U 8462 ; WX 727 ; N uni210E ; G 2044
U 8463 ; WX 727 ; N uni210F ; G 2045
U 8470 ; WX 1087 ; N uni2116 ; G 2046
U 8482 ; WX 1000 ; N trademark ; G 2047
U 8486 ; WX 890 ; N uni2126 ; G 2048
U 8487 ; WX 890 ; N uni2127 ; G 2049
U 8490 ; WX 869 ; N uni212A ; G 2050
U 8491 ; WX 776 ; N uni212B ; G 2051
U 8498 ; WX 710 ; N uni2132 ; G 2052
U 8513 ; WX 786 ; N uni2141 ; G 2053
U 8514 ; WX 576 ; N uni2142 ; G 2054
U 8515 ; WX 637 ; N uni2143 ; G 2055
U 8516 ; WX 760 ; N uni2144 ; G 2056
U 8523 ; WX 903 ; N uni214B ; G 2057
U 8526 ; WX 592 ; N uni214E ; G 2058
U 8528 ; WX 1035 ; N uni2150 ; G 2059
U 8529 ; WX 1035 ; N uni2151 ; G 2060
U 8530 ; WX 1473 ; N uni2152 ; G 2061
U 8531 ; WX 1035 ; N onethird ; G 2062
U 8532 ; WX 1035 ; N twothirds ; G 2063
U 8533 ; WX 1035 ; N uni2155 ; G 2064
U 8534 ; WX 1035 ; N uni2156 ; G 2065
U 8535 ; WX 1035 ; N uni2157 ; G 2066
U 8536 ; WX 1035 ; N uni2158 ; G 2067
U 8537 ; WX 1035 ; N uni2159 ; G 2068
U 8538 ; WX 1035 ; N uni215A ; G 2069
U 8539 ; WX 1035 ; N oneeighth ; G 2070
U 8540 ; WX 1035 ; N threeeighths ; G 2071
U 8541 ; WX 1035 ; N fiveeighths ; G 2072
U 8542 ; WX 1035 ; N seveneighths ; G 2073
U 8543 ; WX 615 ; N uni215F ; G 2074
U 8544 ; WX 468 ; N uni2160 ; G 2075
U 8545 ; WX 843 ; N uni2161 ; G 2076
U 8546 ; WX 1218 ; N uni2162 ; G 2077
U 8547 ; WX 1135 ; N uni2163 ; G 2078
U 8548 ; WX 776 ; N uni2164 ; G 2079
U 8549 ; WX 1150 ; N uni2165 ; G 2080
U 8550 ; WX 1525 ; N uni2166 ; G 2081
U 8551 ; WX 1900 ; N uni2167 ; G 2082
U 8552 ; WX 1126 ; N uni2168 ; G 2083
U 8553 ; WX 776 ; N uni2169 ; G 2084
U 8554 ; WX 1127 ; N uni216A ; G 2085
U 8555 ; WX 1502 ; N uni216B ; G 2086
U 8556 ; WX 703 ; N uni216C ; G 2087
U 8557 ; WX 796 ; N uni216D ; G 2088
U 8558 ; WX 867 ; N uni216E ; G 2089
U 8559 ; WX 1107 ; N uni216F ; G 2090
U 8560 ; WX 380 ; N uni2170 ; G 2091
U 8561 ; WX 760 ; N uni2171 ; G 2092
U 8562 ; WX 1140 ; N uni2172 ; G 2093
U 8563 ; WX 961 ; N uni2173 ; G 2094
U 8564 ; WX 581 ; N uni2174 ; G 2095
U 8565 ; WX 961 ; N uni2175 ; G 2096
U 8566 ; WX 1341 ; N uni2176 ; G 2097
U 8567 ; WX 1721 ; N uni2177 ; G 2098
U 8568 ; WX 976 ; N uni2178 ; G 2099
U 8569 ; WX 596 ; N uni2179 ; G 2100
U 8570 ; WX 976 ; N uni217A ; G 2101
U 8571 ; WX 1356 ; N uni217B ; G 2102
U 8572 ; WX 380 ; N uni217C ; G 2103
U 8573 ; WX 609 ; N uni217D ; G 2104
U 8574 ; WX 699 ; N uni217E ; G 2105
U 8575 ; WX 1058 ; N uni217F ; G 2106
U 8576 ; WX 1255 ; N uni2180 ; G 2107
U 8577 ; WX 867 ; N uni2181 ; G 2108
U 8578 ; WX 1268 ; N uni2182 ; G 2109
U 8579 ; WX 796 ; N uni2183 ; G 2110
U 8580 ; WX 609 ; N uni2184 ; G 2111
U 8581 ; WX 796 ; N uni2185 ; G 2112
U 8585 ; WX 1035 ; N uni2189 ; G 2113
U 8592 ; WX 838 ; N arrowleft ; G 2114
U 8593 ; WX 838 ; N arrowup ; G 2115
U 8594 ; WX 838 ; N arrowright ; G 2116
U 8595 ; WX 838 ; N arrowdown ; G 2117
U 8596 ; WX 838 ; N arrowboth ; G 2118
U 8597 ; WX 838 ; N arrowupdn ; G 2119
U 8598 ; WX 838 ; N uni2196 ; G 2120
U 8599 ; WX 838 ; N uni2197 ; G 2121
U 8600 ; WX 838 ; N uni2198 ; G 2122
U 8601 ; WX 838 ; N uni2199 ; G 2123
U 8602 ; WX 838 ; N uni219A ; G 2124
U 8603 ; WX 838 ; N uni219B ; G 2125
U 8604 ; WX 838 ; N uni219C ; G 2126
U 8605 ; WX 838 ; N uni219D ; G 2127
U 8606 ; WX 838 ; N uni219E ; G 2128
U 8607 ; WX 838 ; N uni219F ; G 2129
U 8608 ; WX 838 ; N uni21A0 ; G 2130
U 8609 ; WX 838 ; N uni21A1 ; G 2131
U 8610 ; WX 838 ; N uni21A2 ; G 2132
U 8611 ; WX 838 ; N uni21A3 ; G 2133
U 8612 ; WX 838 ; N uni21A4 ; G 2134
U 8613 ; WX 838 ; N uni21A5 ; G 2135
U 8614 ; WX 838 ; N uni21A6 ; G 2136
U 8615 ; WX 838 ; N uni21A7 ; G 2137
U 8616 ; WX 838 ; N arrowupdnbse ; G 2138
U 8617 ; WX 838 ; N uni21A9 ; G 2139
U 8618 ; WX 838 ; N uni21AA ; G 2140
U 8619 ; WX 838 ; N uni21AB ; G 2141
U 8620 ; WX 838 ; N uni21AC ; G 2142
U 8621 ; WX 838 ; N uni21AD ; G 2143
U 8622 ; WX 838 ; N uni21AE ; G 2144
U 8623 ; WX 850 ; N uni21AF ; G 2145
U 8624 ; WX 838 ; N uni21B0 ; G 2146
U 8625 ; WX 838 ; N uni21B1 ; G 2147
U 8626 ; WX 838 ; N uni21B2 ; G 2148
U 8627 ; WX 838 ; N uni21B3 ; G 2149
U 8628 ; WX 838 ; N uni21B4 ; G 2150
U 8629 ; WX 838 ; N carriagereturn ; G 2151
U 8630 ; WX 838 ; N uni21B6 ; G 2152
U 8631 ; WX 838 ; N uni21B7 ; G 2153
U 8632 ; WX 838 ; N uni21B8 ; G 2154
U 8633 ; WX 838 ; N uni21B9 ; G 2155
U 8634 ; WX 838 ; N uni21BA ; G 2156
U 8635 ; WX 838 ; N uni21BB ; G 2157
U 8636 ; WX 838 ; N uni21BC ; G 2158
U 8637 ; WX 838 ; N uni21BD ; G 2159
U 8638 ; WX 838 ; N uni21BE ; G 2160
U 8639 ; WX 838 ; N uni21BF ; G 2161
U 8640 ; WX 838 ; N uni21C0 ; G 2162
U 8641 ; WX 838 ; N uni21C1 ; G 2163
U 8642 ; WX 838 ; N uni21C2 ; G 2164
U 8643 ; WX 838 ; N uni21C3 ; G 2165
U 8644 ; WX 838 ; N uni21C4 ; G 2166
U 8645 ; WX 838 ; N uni21C5 ; G 2167
U 8646 ; WX 838 ; N uni21C6 ; G 2168
U 8647 ; WX 838 ; N uni21C7 ; G 2169
U 8648 ; WX 838 ; N uni21C8 ; G 2170
U 8649 ; WX 838 ; N uni21C9 ; G 2171
U 8650 ; WX 838 ; N uni21CA ; G 2172
U 8651 ; WX 838 ; N uni21CB ; G 2173
U 8652 ; WX 838 ; N uni21CC ; G 2174
U 8653 ; WX 838 ; N uni21CD ; G 2175
U 8654 ; WX 838 ; N uni21CE ; G 2176
U 8655 ; WX 838 ; N uni21CF ; G 2177
U 8656 ; WX 838 ; N arrowdblleft ; G 2178
U 8657 ; WX 838 ; N arrowdblup ; G 2179
U 8658 ; WX 838 ; N arrowdblright ; G 2180
U 8659 ; WX 838 ; N arrowdbldown ; G 2181
U 8660 ; WX 838 ; N arrowdblboth ; G 2182
U 8661 ; WX 838 ; N uni21D5 ; G 2183
U 8662 ; WX 838 ; N uni21D6 ; G 2184
U 8663 ; WX 838 ; N uni21D7 ; G 2185
U 8664 ; WX 838 ; N uni21D8 ; G 2186
U 8665 ; WX 838 ; N uni21D9 ; G 2187
U 8666 ; WX 838 ; N uni21DA ; G 2188
U 8667 ; WX 838 ; N uni21DB ; G 2189
U 8668 ; WX 838 ; N uni21DC ; G 2190
U 8669 ; WX 838 ; N uni21DD ; G 2191
U 8670 ; WX 838 ; N uni21DE ; G 2192
U 8671 ; WX 838 ; N uni21DF ; G 2193
U 8672 ; WX 838 ; N uni21E0 ; G 2194
U 8673 ; WX 838 ; N uni21E1 ; G 2195
U 8674 ; WX 838 ; N uni21E2 ; G 2196
U 8675 ; WX 838 ; N uni21E3 ; G 2197
U 8676 ; WX 838 ; N uni21E4 ; G 2198
U 8677 ; WX 838 ; N uni21E5 ; G 2199
U 8678 ; WX 838 ; N uni21E6 ; G 2200
U 8679 ; WX 838 ; N uni21E7 ; G 2201
U 8680 ; WX 838 ; N uni21E8 ; G 2202
U 8681 ; WX 838 ; N uni21E9 ; G 2203
U 8682 ; WX 838 ; N uni21EA ; G 2204
U 8683 ; WX 838 ; N uni21EB ; G 2205
U 8684 ; WX 838 ; N uni21EC ; G 2206
U 8685 ; WX 838 ; N uni21ED ; G 2207
U 8686 ; WX 838 ; N uni21EE ; G 2208
U 8687 ; WX 838 ; N uni21EF ; G 2209
U 8688 ; WX 838 ; N uni21F0 ; G 2210
U 8689 ; WX 838 ; N uni21F1 ; G 2211
U 8690 ; WX 838 ; N uni21F2 ; G 2212
U 8691 ; WX 838 ; N uni21F3 ; G 2213
U 8692 ; WX 838 ; N uni21F4 ; G 2214
U 8693 ; WX 838 ; N uni21F5 ; G 2215
U 8694 ; WX 838 ; N uni21F6 ; G 2216
U 8695 ; WX 838 ; N uni21F7 ; G 2217
U 8696 ; WX 838 ; N uni21F8 ; G 2218
U 8697 ; WX 838 ; N uni21F9 ; G 2219
U 8698 ; WX 838 ; N uni21FA ; G 2220
U 8699 ; WX 838 ; N uni21FB ; G 2221
U 8700 ; WX 838 ; N uni21FC ; G 2222
U 8701 ; WX 838 ; N uni21FD ; G 2223
U 8702 ; WX 838 ; N uni21FE ; G 2224
U 8703 ; WX 838 ; N uni21FF ; G 2225
U 8704 ; WX 641 ; N universal ; G 2226
U 8706 ; WX 534 ; N partialdiff ; G 2227
U 8707 ; WX 620 ; N existential ; G 2228
U 8708 ; WX 620 ; N uni2204 ; G 2229
U 8710 ; WX 753 ; N increment ; G 2230
U 8711 ; WX 753 ; N gradient ; G 2231
U 8712 ; WX 740 ; N element ; G 2232
U 8713 ; WX 740 ; N notelement ; G 2233
U 8715 ; WX 740 ; N suchthat ; G 2234
U 8716 ; WX 740 ; N uni220C ; G 2235
U 8719 ; WX 842 ; N product ; G 2236
U 8720 ; WX 842 ; N uni2210 ; G 2237
U 8721 ; WX 753 ; N summation ; G 2238
U 8722 ; WX 838 ; N minus ; G 2239
U 8723 ; WX 838 ; N uni2213 ; G 2240
U 8724 ; WX 838 ; N uni2214 ; G 2241
U 8725 ; WX 365 ; N uni2215 ; G 2242
U 8727 ; WX 691 ; N asteriskmath ; G 2243
U 8728 ; WX 519 ; N uni2218 ; G 2244
U 8729 ; WX 519 ; N uni2219 ; G 2245
U 8730 ; WX 657 ; N radical ; G 2246
U 8731 ; WX 657 ; N uni221B ; G 2247
U 8732 ; WX 657 ; N uni221C ; G 2248
U 8733 ; WX 672 ; N proportional ; G 2249
U 8734 ; WX 833 ; N infinity ; G 2250
U 8735 ; WX 838 ; N orthogonal ; G 2251
U 8736 ; WX 838 ; N angle ; G 2252
U 8739 ; WX 324 ; N uni2223 ; G 2253
U 8740 ; WX 607 ; N uni2224 ; G 2254
U 8741 ; WX 529 ; N uni2225 ; G 2255
U 8742 ; WX 773 ; N uni2226 ; G 2256
U 8743 ; WX 812 ; N logicaland ; G 2257
U 8744 ; WX 812 ; N logicalor ; G 2258
U 8745 ; WX 838 ; N intersection ; G 2259
U 8746 ; WX 838 ; N union ; G 2260
U 8747 ; WX 579 ; N integral ; G 2261
U 8748 ; WX 1000 ; N uni222C ; G 2262
U 8749 ; WX 1391 ; N uni222D ; G 2263
U 8760 ; WX 838 ; N uni2238 ; G 2264
U 8761 ; WX 838 ; N uni2239 ; G 2265
U 8762 ; WX 838 ; N uni223A ; G 2266
U 8763 ; WX 838 ; N uni223B ; G 2267
U 8764 ; WX 838 ; N similar ; G 2268
U 8765 ; WX 838 ; N uni223D ; G 2269
U 8770 ; WX 838 ; N uni2242 ; G 2270
U 8771 ; WX 838 ; N uni2243 ; G 2271
U 8776 ; WX 838 ; N approxequal ; G 2272
U 8784 ; WX 838 ; N uni2250 ; G 2273
U 8785 ; WX 838 ; N uni2251 ; G 2274
U 8786 ; WX 838 ; N uni2252 ; G 2275
U 8787 ; WX 838 ; N uni2253 ; G 2276
U 8788 ; WX 1082 ; N uni2254 ; G 2277
U 8789 ; WX 1082 ; N uni2255 ; G 2278
U 8800 ; WX 838 ; N notequal ; G 2279
U 8801 ; WX 838 ; N equivalence ; G 2280
U 8804 ; WX 838 ; N lessequal ; G 2281
U 8805 ; WX 838 ; N greaterequal ; G 2282
U 8834 ; WX 838 ; N propersubset ; G 2283
U 8835 ; WX 838 ; N propersuperset ; G 2284
U 8836 ; WX 838 ; N notsubset ; G 2285
U 8837 ; WX 838 ; N uni2285 ; G 2286
U 8838 ; WX 838 ; N reflexsubset ; G 2287
U 8839 ; WX 838 ; N reflexsuperset ; G 2288
U 8844 ; WX 838 ; N uni228C ; G 2289
U 8845 ; WX 838 ; N uni228D ; G 2290
U 8846 ; WX 838 ; N uni228E ; G 2291
U 8847 ; WX 838 ; N uni228F ; G 2292
U 8848 ; WX 838 ; N uni2290 ; G 2293
U 8849 ; WX 838 ; N uni2291 ; G 2294
U 8850 ; WX 838 ; N uni2292 ; G 2295
U 8851 ; WX 838 ; N uni2293 ; G 2296
U 8852 ; WX 838 ; N uni2294 ; G 2297
U 8853 ; WX 838 ; N circleplus ; G 2298
U 8854 ; WX 838 ; N uni2296 ; G 2299
U 8855 ; WX 838 ; N circlemultiply ; G 2300
U 8856 ; WX 838 ; N uni2298 ; G 2301
U 8857 ; WX 838 ; N uni2299 ; G 2302
U 8858 ; WX 838 ; N uni229A ; G 2303
U 8859 ; WX 838 ; N uni229B ; G 2304
U 8860 ; WX 838 ; N uni229C ; G 2305
U 8861 ; WX 838 ; N uni229D ; G 2306
U 8862 ; WX 838 ; N uni229E ; G 2307
U 8863 ; WX 838 ; N uni229F ; G 2308
U 8864 ; WX 838 ; N uni22A0 ; G 2309
U 8865 ; WX 838 ; N uni22A1 ; G 2310
U 8866 ; WX 884 ; N uni22A2 ; G 2311
U 8867 ; WX 884 ; N uni22A3 ; G 2312
U 8868 ; WX 960 ; N uni22A4 ; G 2313
U 8869 ; WX 960 ; N perpendicular ; G 2314
U 8870 ; WX 616 ; N uni22A6 ; G 2315
U 8871 ; WX 616 ; N uni22A7 ; G 2316
U 8872 ; WX 884 ; N uni22A8 ; G 2317
U 8873 ; WX 884 ; N uni22A9 ; G 2318
U 8874 ; WX 884 ; N uni22AA ; G 2319
U 8875 ; WX 1080 ; N uni22AB ; G 2320
U 8876 ; WX 884 ; N uni22AC ; G 2321
U 8877 ; WX 884 ; N uni22AD ; G 2322
U 8878 ; WX 884 ; N uni22AE ; G 2323
U 8879 ; WX 1080 ; N uni22AF ; G 2324
U 8900 ; WX 626 ; N uni22C4 ; G 2325
U 8901 ; WX 398 ; N dotmath ; G 2326
U 8962 ; WX 834 ; N house ; G 2327
U 8968 ; WX 473 ; N uni2308 ; G 2328
U 8969 ; WX 473 ; N uni2309 ; G 2329
U 8970 ; WX 473 ; N uni230A ; G 2330
U 8971 ; WX 473 ; N uni230B ; G 2331
U 8976 ; WX 838 ; N revlogicalnot ; G 2332
U 8977 ; WX 539 ; N uni2311 ; G 2333
U 8984 ; WX 928 ; N uni2318 ; G 2334
U 8985 ; WX 838 ; N uni2319 ; G 2335
U 8992 ; WX 579 ; N integraltp ; G 2336
U 8993 ; WX 579 ; N integralbt ; G 2337
U 8997 ; WX 1000 ; N uni2325 ; G 2338
U 9000 ; WX 1443 ; N uni2328 ; G 2339
U 9085 ; WX 1008 ; N uni237D ; G 2340
U 9115 ; WX 500 ; N uni239B ; G 2341
U 9116 ; WX 500 ; N uni239C ; G 2342
U 9117 ; WX 500 ; N uni239D ; G 2343
U 9118 ; WX 500 ; N uni239E ; G 2344
U 9119 ; WX 500 ; N uni239F ; G 2345
U 9120 ; WX 500 ; N uni23A0 ; G 2346
U 9121 ; WX 500 ; N uni23A1 ; G 2347
U 9122 ; WX 500 ; N uni23A2 ; G 2348
U 9123 ; WX 500 ; N uni23A3 ; G 2349
U 9124 ; WX 500 ; N uni23A4 ; G 2350
U 9125 ; WX 500 ; N uni23A5 ; G 2351
U 9126 ; WX 500 ; N uni23A6 ; G 2352
U 9127 ; WX 750 ; N uni23A7 ; G 2353
U 9128 ; WX 750 ; N uni23A8 ; G 2354
U 9129 ; WX 750 ; N uni23A9 ; G 2355
U 9130 ; WX 750 ; N uni23AA ; G 2356
U 9131 ; WX 750 ; N uni23AB ; G 2357
U 9132 ; WX 750 ; N uni23AC ; G 2358
U 9133 ; WX 750 ; N uni23AD ; G 2359
U 9134 ; WX 579 ; N uni23AE ; G 2360
U 9167 ; WX 945 ; N uni23CF ; G 2361
U 9251 ; WX 834 ; N uni2423 ; G 2362
U 9472 ; WX 602 ; N SF100000 ; G 2363
U 9473 ; WX 602 ; N uni2501 ; G 2364
U 9474 ; WX 602 ; N SF110000 ; G 2365
U 9475 ; WX 602 ; N uni2503 ; G 2366
U 9476 ; WX 602 ; N uni2504 ; G 2367
U 9477 ; WX 602 ; N uni2505 ; G 2368
U 9478 ; WX 602 ; N uni2506 ; G 2369
U 9479 ; WX 602 ; N uni2507 ; G 2370
U 9480 ; WX 602 ; N uni2508 ; G 2371
U 9481 ; WX 602 ; N uni2509 ; G 2372
U 9482 ; WX 602 ; N uni250A ; G 2373
U 9483 ; WX 602 ; N uni250B ; G 2374
U 9484 ; WX 602 ; N SF010000 ; G 2375
U 9485 ; WX 602 ; N uni250D ; G 2376
U 9486 ; WX 602 ; N uni250E ; G 2377
U 9487 ; WX 602 ; N uni250F ; G 2378
U 9488 ; WX 602 ; N SF030000 ; G 2379
U 9489 ; WX 602 ; N uni2511 ; G 2380
U 9490 ; WX 602 ; N uni2512 ; G 2381
U 9491 ; WX 602 ; N uni2513 ; G 2382
U 9492 ; WX 602 ; N SF020000 ; G 2383
U 9493 ; WX 602 ; N uni2515 ; G 2384
U 9494 ; WX 602 ; N uni2516 ; G 2385
U 9495 ; WX 602 ; N uni2517 ; G 2386
U 9496 ; WX 602 ; N SF040000 ; G 2387
U 9497 ; WX 602 ; N uni2519 ; G 2388
U 9498 ; WX 602 ; N uni251A ; G 2389
U 9499 ; WX 602 ; N uni251B ; G 2390
U 9500 ; WX 602 ; N SF080000 ; G 2391
U 9501 ; WX 602 ; N uni251D ; G 2392
U 9502 ; WX 602 ; N uni251E ; G 2393
U 9503 ; WX 602 ; N uni251F ; G 2394
U 9504 ; WX 602 ; N uni2520 ; G 2395
U 9505 ; WX 602 ; N uni2521 ; G 2396
U 9506 ; WX 602 ; N uni2522 ; G 2397
U 9507 ; WX 602 ; N uni2523 ; G 2398
U 9508 ; WX 602 ; N SF090000 ; G 2399
U 9509 ; WX 602 ; N uni2525 ; G 2400
U 9510 ; WX 602 ; N uni2526 ; G 2401
U 9511 ; WX 602 ; N uni2527 ; G 2402
U 9512 ; WX 602 ; N uni2528 ; G 2403
U 9513 ; WX 602 ; N uni2529 ; G 2404
U 9514 ; WX 602 ; N uni252A ; G 2405
U 9515 ; WX 602 ; N uni252B ; G 2406
U 9516 ; WX 602 ; N SF060000 ; G 2407
U 9517 ; WX 602 ; N uni252D ; G 2408
U 9518 ; WX 602 ; N uni252E ; G 2409
U 9519 ; WX 602 ; N uni252F ; G 2410
U 9520 ; WX 602 ; N uni2530 ; G 2411
U 9521 ; WX 602 ; N uni2531 ; G 2412
U 9522 ; WX 602 ; N uni2532 ; G 2413
U 9523 ; WX 602 ; N uni2533 ; G 2414
U 9524 ; WX 602 ; N SF070000 ; G 2415
U 9525 ; WX 602 ; N uni2535 ; G 2416
U 9526 ; WX 602 ; N uni2536 ; G 2417
U 9527 ; WX 602 ; N uni2537 ; G 2418
U 9528 ; WX 602 ; N uni2538 ; G 2419
U 9529 ; WX 602 ; N uni2539 ; G 2420
U 9530 ; WX 602 ; N uni253A ; G 2421
U 9531 ; WX 602 ; N uni253B ; G 2422
U 9532 ; WX 602 ; N SF050000 ; G 2423
U 9533 ; WX 602 ; N uni253D ; G 2424
U 9534 ; WX 602 ; N uni253E ; G 2425
U 9535 ; WX 602 ; N uni253F ; G 2426
U 9536 ; WX 602 ; N uni2540 ; G 2427
U 9537 ; WX 602 ; N uni2541 ; G 2428
U 9538 ; WX 602 ; N uni2542 ; G 2429
U 9539 ; WX 602 ; N uni2543 ; G 2430
U 9540 ; WX 602 ; N uni2544 ; G 2431
U 9541 ; WX 602 ; N uni2545 ; G 2432
U 9542 ; WX 602 ; N uni2546 ; G 2433
U 9543 ; WX 602 ; N uni2547 ; G 2434
U 9544 ; WX 602 ; N uni2548 ; G 2435
U 9545 ; WX 602 ; N uni2549 ; G 2436
U 9546 ; WX 602 ; N uni254A ; G 2437
U 9547 ; WX 602 ; N uni254B ; G 2438
U 9548 ; WX 602 ; N uni254C ; G 2439
U 9549 ; WX 602 ; N uni254D ; G 2440
U 9550 ; WX 602 ; N uni254E ; G 2441
U 9551 ; WX 602 ; N uni254F ; G 2442
U 9552 ; WX 602 ; N SF430000 ; G 2443
U 9553 ; WX 602 ; N SF240000 ; G 2444
U 9554 ; WX 602 ; N SF510000 ; G 2445
U 9555 ; WX 602 ; N SF520000 ; G 2446
U 9556 ; WX 602 ; N SF390000 ; G 2447
U 9557 ; WX 602 ; N SF220000 ; G 2448
U 9558 ; WX 602 ; N SF210000 ; G 2449
U 9559 ; WX 602 ; N SF250000 ; G 2450
U 9560 ; WX 602 ; N SF500000 ; G 2451
U 9561 ; WX 602 ; N SF490000 ; G 2452
U 9562 ; WX 602 ; N SF380000 ; G 2453
U 9563 ; WX 602 ; N SF280000 ; G 2454
U 9564 ; WX 602 ; N SF270000 ; G 2455
U 9565 ; WX 602 ; N SF260000 ; G 2456
U 9566 ; WX 602 ; N SF360000 ; G 2457
U 9567 ; WX 602 ; N SF370000 ; G 2458
U 9568 ; WX 602 ; N SF420000 ; G 2459
U 9569 ; WX 602 ; N SF190000 ; G 2460
U 9570 ; WX 602 ; N SF200000 ; G 2461
U 9571 ; WX 602 ; N SF230000 ; G 2462
U 9572 ; WX 602 ; N SF470000 ; G 2463
U 9573 ; WX 602 ; N SF480000 ; G 2464
U 9574 ; WX 602 ; N SF410000 ; G 2465
U 9575 ; WX 602 ; N SF450000 ; G 2466
U 9576 ; WX 602 ; N SF460000 ; G 2467
U 9577 ; WX 602 ; N SF400000 ; G 2468
U 9578 ; WX 602 ; N SF540000 ; G 2469
U 9579 ; WX 602 ; N SF530000 ; G 2470
U 9580 ; WX 602 ; N SF440000 ; G 2471
U 9581 ; WX 602 ; N uni256D ; G 2472
U 9582 ; WX 602 ; N uni256E ; G 2473
U 9583 ; WX 602 ; N uni256F ; G 2474
U 9584 ; WX 602 ; N uni2570 ; G 2475
U 9585 ; WX 602 ; N uni2571 ; G 2476
U 9586 ; WX 602 ; N uni2572 ; G 2477
U 9587 ; WX 602 ; N uni2573 ; G 2478
U 9588 ; WX 602 ; N uni2574 ; G 2479
U 9589 ; WX 602 ; N uni2575 ; G 2480
U 9590 ; WX 602 ; N uni2576 ; G 2481
U 9591 ; WX 602 ; N uni2577 ; G 2482
U 9592 ; WX 602 ; N uni2578 ; G 2483
U 9593 ; WX 602 ; N uni2579 ; G 2484
U 9594 ; WX 602 ; N uni257A ; G 2485
U 9595 ; WX 602 ; N uni257B ; G 2486
U 9596 ; WX 602 ; N uni257C ; G 2487
U 9597 ; WX 602 ; N uni257D ; G 2488
U 9598 ; WX 602 ; N uni257E ; G 2489
U 9599 ; WX 602 ; N uni257F ; G 2490
U 9600 ; WX 769 ; N upblock ; G 2491
U 9601 ; WX 769 ; N uni2581 ; G 2492
U 9602 ; WX 769 ; N uni2582 ; G 2493
U 9603 ; WX 769 ; N uni2583 ; G 2494
U 9604 ; WX 769 ; N dnblock ; G 2495
U 9605 ; WX 769 ; N uni2585 ; G 2496
U 9606 ; WX 769 ; N uni2586 ; G 2497
U 9607 ; WX 769 ; N uni2587 ; G 2498
U 9608 ; WX 769 ; N block ; G 2499
U 9609 ; WX 769 ; N uni2589 ; G 2500
U 9610 ; WX 769 ; N uni258A ; G 2501
U 9611 ; WX 769 ; N uni258B ; G 2502
U 9612 ; WX 769 ; N lfblock ; G 2503
U 9613 ; WX 769 ; N uni258D ; G 2504
U 9614 ; WX 769 ; N uni258E ; G 2505
U 9615 ; WX 769 ; N uni258F ; G 2506
U 9616 ; WX 769 ; N rtblock ; G 2507
U 9617 ; WX 769 ; N ltshade ; G 2508
U 9618 ; WX 769 ; N shade ; G 2509
U 9619 ; WX 769 ; N dkshade ; G 2510
U 9620 ; WX 769 ; N uni2594 ; G 2511
U 9621 ; WX 769 ; N uni2595 ; G 2512
U 9622 ; WX 769 ; N uni2596 ; G 2513
U 9623 ; WX 769 ; N uni2597 ; G 2514
U 9624 ; WX 769 ; N uni2598 ; G 2515
U 9625 ; WX 769 ; N uni2599 ; G 2516
U 9626 ; WX 769 ; N uni259A ; G 2517
U 9627 ; WX 769 ; N uni259B ; G 2518
U 9628 ; WX 769 ; N uni259C ; G 2519
U 9629 ; WX 769 ; N uni259D ; G 2520
U 9630 ; WX 769 ; N uni259E ; G 2521
U 9631 ; WX 769 ; N uni259F ; G 2522
U 9632 ; WX 945 ; N filledbox ; G 2523
U 9633 ; WX 945 ; N H22073 ; G 2524
U 9634 ; WX 945 ; N uni25A2 ; G 2525
U 9635 ; WX 945 ; N uni25A3 ; G 2526
U 9636 ; WX 945 ; N uni25A4 ; G 2527
U 9637 ; WX 945 ; N uni25A5 ; G 2528
U 9638 ; WX 945 ; N uni25A6 ; G 2529
U 9639 ; WX 945 ; N uni25A7 ; G 2530
U 9640 ; WX 945 ; N uni25A8 ; G 2531
U 9641 ; WX 945 ; N uni25A9 ; G 2532
U 9642 ; WX 678 ; N H18543 ; G 2533
U 9643 ; WX 678 ; N H18551 ; G 2534
U 9644 ; WX 945 ; N filledrect ; G 2535
U 9645 ; WX 945 ; N uni25AD ; G 2536
U 9646 ; WX 550 ; N uni25AE ; G 2537
U 9647 ; WX 550 ; N uni25AF ; G 2538
U 9648 ; WX 769 ; N uni25B0 ; G 2539
U 9649 ; WX 769 ; N uni25B1 ; G 2540
U 9650 ; WX 769 ; N triagup ; G 2541
U 9651 ; WX 769 ; N uni25B3 ; G 2542
U 9652 ; WX 502 ; N uni25B4 ; G 2543
U 9653 ; WX 502 ; N uni25B5 ; G 2544
U 9654 ; WX 769 ; N uni25B6 ; G 2545
U 9655 ; WX 769 ; N uni25B7 ; G 2546
U 9656 ; WX 502 ; N uni25B8 ; G 2547
U 9657 ; WX 502 ; N uni25B9 ; G 2548
U 9658 ; WX 769 ; N triagrt ; G 2549
U 9659 ; WX 769 ; N uni25BB ; G 2550
U 9660 ; WX 769 ; N triagdn ; G 2551
U 9661 ; WX 769 ; N uni25BD ; G 2552
U 9662 ; WX 502 ; N uni25BE ; G 2553
U 9663 ; WX 502 ; N uni25BF ; G 2554
U 9664 ; WX 769 ; N uni25C0 ; G 2555
U 9665 ; WX 769 ; N uni25C1 ; G 2556
U 9666 ; WX 502 ; N uni25C2 ; G 2557
U 9667 ; WX 502 ; N uni25C3 ; G 2558
U 9668 ; WX 769 ; N triaglf ; G 2559
U 9669 ; WX 769 ; N uni25C5 ; G 2560
U 9670 ; WX 769 ; N uni25C6 ; G 2561
U 9671 ; WX 769 ; N uni25C7 ; G 2562
U 9672 ; WX 769 ; N uni25C8 ; G 2563
U 9673 ; WX 873 ; N uni25C9 ; G 2564
U 9674 ; WX 494 ; N lozenge ; G 2565
U 9675 ; WX 873 ; N circle ; G 2566
U 9676 ; WX 873 ; N uni25CC ; G 2567
U 9677 ; WX 873 ; N uni25CD ; G 2568
U 9678 ; WX 873 ; N uni25CE ; G 2569
U 9679 ; WX 873 ; N H18533 ; G 2570
U 9680 ; WX 873 ; N uni25D0 ; G 2571
U 9681 ; WX 873 ; N uni25D1 ; G 2572
U 9682 ; WX 873 ; N uni25D2 ; G 2573
U 9683 ; WX 873 ; N uni25D3 ; G 2574
U 9684 ; WX 873 ; N uni25D4 ; G 2575
U 9685 ; WX 873 ; N uni25D5 ; G 2576
U 9686 ; WX 527 ; N uni25D6 ; G 2577
U 9687 ; WX 527 ; N uni25D7 ; G 2578
U 9688 ; WX 791 ; N invbullet ; G 2579
U 9689 ; WX 970 ; N invcircle ; G 2580
U 9690 ; WX 970 ; N uni25DA ; G 2581
U 9691 ; WX 970 ; N uni25DB ; G 2582
U 9692 ; WX 387 ; N uni25DC ; G 2583
U 9693 ; WX 387 ; N uni25DD ; G 2584
U 9694 ; WX 387 ; N uni25DE ; G 2585
U 9695 ; WX 387 ; N uni25DF ; G 2586
U 9696 ; WX 873 ; N uni25E0 ; G 2587
U 9697 ; WX 873 ; N uni25E1 ; G 2588
U 9698 ; WX 769 ; N uni25E2 ; G 2589
U 9699 ; WX 769 ; N uni25E3 ; G 2590
U 9700 ; WX 769 ; N uni25E4 ; G 2591
U 9701 ; WX 769 ; N uni25E5 ; G 2592
U 9702 ; WX 590 ; N openbullet ; G 2593
U 9703 ; WX 945 ; N uni25E7 ; G 2594
U 9704 ; WX 945 ; N uni25E8 ; G 2595
U 9705 ; WX 945 ; N uni25E9 ; G 2596
U 9706 ; WX 945 ; N uni25EA ; G 2597
U 9707 ; WX 945 ; N uni25EB ; G 2598
U 9708 ; WX 769 ; N uni25EC ; G 2599
U 9709 ; WX 769 ; N uni25ED ; G 2600
U 9710 ; WX 769 ; N uni25EE ; G 2601
U 9711 ; WX 1119 ; N uni25EF ; G 2602
U 9712 ; WX 945 ; N uni25F0 ; G 2603
U 9713 ; WX 945 ; N uni25F1 ; G 2604
U 9714 ; WX 945 ; N uni25F2 ; G 2605
U 9715 ; WX 945 ; N uni25F3 ; G 2606
U 9716 ; WX 873 ; N uni25F4 ; G 2607
U 9717 ; WX 873 ; N uni25F5 ; G 2608
U 9718 ; WX 873 ; N uni25F6 ; G 2609
U 9719 ; WX 873 ; N uni25F7 ; G 2610
U 9720 ; WX 769 ; N uni25F8 ; G 2611
U 9721 ; WX 769 ; N uni25F9 ; G 2612
U 9722 ; WX 769 ; N uni25FA ; G 2613
U 9723 ; WX 830 ; N uni25FB ; G 2614
U 9724 ; WX 830 ; N uni25FC ; G 2615
U 9725 ; WX 732 ; N uni25FD ; G 2616
U 9726 ; WX 732 ; N uni25FE ; G 2617
U 9727 ; WX 769 ; N uni25FF ; G 2618
U 9728 ; WX 896 ; N uni2600 ; G 2619
U 9784 ; WX 896 ; N uni2638 ; G 2620
U 9785 ; WX 896 ; N uni2639 ; G 2621
U 9786 ; WX 896 ; N smileface ; G 2622
U 9787 ; WX 896 ; N invsmileface ; G 2623
U 9788 ; WX 896 ; N sun ; G 2624
U 9791 ; WX 614 ; N uni263F ; G 2625
U 9792 ; WX 731 ; N female ; G 2626
U 9793 ; WX 731 ; N uni2641 ; G 2627
U 9794 ; WX 896 ; N male ; G 2628
U 9795 ; WX 896 ; N uni2643 ; G 2629
U 9796 ; WX 896 ; N uni2644 ; G 2630
U 9797 ; WX 896 ; N uni2645 ; G 2631
U 9798 ; WX 896 ; N uni2646 ; G 2632
U 9799 ; WX 896 ; N uni2647 ; G 2633
U 9824 ; WX 896 ; N spade ; G 2634
U 9825 ; WX 896 ; N uni2661 ; G 2635
U 9826 ; WX 896 ; N uni2662 ; G 2636
U 9827 ; WX 896 ; N club ; G 2637
U 9828 ; WX 896 ; N uni2664 ; G 2638
U 9829 ; WX 896 ; N heart ; G 2639
U 9830 ; WX 896 ; N diamond ; G 2640
U 9831 ; WX 896 ; N uni2667 ; G 2641
U 9833 ; WX 472 ; N uni2669 ; G 2642
U 9834 ; WX 638 ; N musicalnote ; G 2643
U 9835 ; WX 896 ; N musicalnotedbl ; G 2644
U 9836 ; WX 896 ; N uni266C ; G 2645
U 9837 ; WX 472 ; N uni266D ; G 2646
U 9838 ; WX 357 ; N uni266E ; G 2647
U 9839 ; WX 484 ; N uni266F ; G 2648
U 10145 ; WX 838 ; N uni27A1 ; G 2649
U 10181 ; WX 457 ; N uni27C5 ; G 2650
U 10182 ; WX 457 ; N uni27C6 ; G 2651
U 10208 ; WX 494 ; N uni27E0 ; G 2652
U 10216 ; WX 457 ; N uni27E8 ; G 2653
U 10217 ; WX 457 ; N uni27E9 ; G 2654
U 10224 ; WX 838 ; N uni27F0 ; G 2655
U 10225 ; WX 838 ; N uni27F1 ; G 2656
U 10226 ; WX 838 ; N uni27F2 ; G 2657
U 10227 ; WX 838 ; N uni27F3 ; G 2658
U 10228 ; WX 1033 ; N uni27F4 ; G 2659
U 10229 ; WX 1434 ; N uni27F5 ; G 2660
U 10230 ; WX 1434 ; N uni27F6 ; G 2661
U 10231 ; WX 1434 ; N uni27F7 ; G 2662
U 10232 ; WX 1434 ; N uni27F8 ; G 2663
U 10233 ; WX 1434 ; N uni27F9 ; G 2664
U 10234 ; WX 1434 ; N uni27FA ; G 2665
U 10235 ; WX 1434 ; N uni27FB ; G 2666
U 10236 ; WX 1434 ; N uni27FC ; G 2667
U 10237 ; WX 1434 ; N uni27FD ; G 2668
U 10238 ; WX 1434 ; N uni27FE ; G 2669
U 10239 ; WX 1434 ; N uni27FF ; G 2670
U 10240 ; WX 781 ; N uni2800 ; G 2671
U 10241 ; WX 781 ; N uni2801 ; G 2672
U 10242 ; WX 781 ; N uni2802 ; G 2673
U 10243 ; WX 781 ; N uni2803 ; G 2674
U 10244 ; WX 781 ; N uni2804 ; G 2675
U 10245 ; WX 781 ; N uni2805 ; G 2676
U 10246 ; WX 781 ; N uni2806 ; G 2677
U 10247 ; WX 781 ; N uni2807 ; G 2678
U 10248 ; WX 781 ; N uni2808 ; G 2679
U 10249 ; WX 781 ; N uni2809 ; G 2680
U 10250 ; WX 781 ; N uni280A ; G 2681
U 10251 ; WX 781 ; N uni280B ; G 2682
U 10252 ; WX 781 ; N uni280C ; G 2683
U 10253 ; WX 781 ; N uni280D ; G 2684
U 10254 ; WX 781 ; N uni280E ; G 2685
U 10255 ; WX 781 ; N uni280F ; G 2686
U 10256 ; WX 781 ; N uni2810 ; G 2687
U 10257 ; WX 781 ; N uni2811 ; G 2688
U 10258 ; WX 781 ; N uni2812 ; G 2689
U 10259 ; WX 781 ; N uni2813 ; G 2690
U 10260 ; WX 781 ; N uni2814 ; G 2691
U 10261 ; WX 781 ; N uni2815 ; G 2692
U 10262 ; WX 781 ; N uni2816 ; G 2693
U 10263 ; WX 781 ; N uni2817 ; G 2694
U 10264 ; WX 781 ; N uni2818 ; G 2695
U 10265 ; WX 781 ; N uni2819 ; G 2696
U 10266 ; WX 781 ; N uni281A ; G 2697
U 10267 ; WX 781 ; N uni281B ; G 2698
U 10268 ; WX 781 ; N uni281C ; G 2699
U 10269 ; WX 781 ; N uni281D ; G 2700
U 10270 ; WX 781 ; N uni281E ; G 2701
U 10271 ; WX 781 ; N uni281F ; G 2702
U 10272 ; WX 781 ; N uni2820 ; G 2703
U 10273 ; WX 781 ; N uni2821 ; G 2704
U 10274 ; WX 781 ; N uni2822 ; G 2705
U 10275 ; WX 781 ; N uni2823 ; G 2706
U 10276 ; WX 781 ; N uni2824 ; G 2707
U 10277 ; WX 781 ; N uni2825 ; G 2708
U 10278 ; WX 781 ; N uni2826 ; G 2709
U 10279 ; WX 781 ; N uni2827 ; G 2710
U 10280 ; WX 781 ; N uni2828 ; G 2711
U 10281 ; WX 781 ; N uni2829 ; G 2712
U 10282 ; WX 781 ; N uni282A ; G 2713
U 10283 ; WX 781 ; N uni282B ; G 2714
U 10284 ; WX 781 ; N uni282C ; G 2715
U 10285 ; WX 781 ; N uni282D ; G 2716
U 10286 ; WX 781 ; N uni282E ; G 2717
U 10287 ; WX 781 ; N uni282F ; G 2718
U 10288 ; WX 781 ; N uni2830 ; G 2719
U 10289 ; WX 781 ; N uni2831 ; G 2720
U 10290 ; WX 781 ; N uni2832 ; G 2721
U 10291 ; WX 781 ; N uni2833 ; G 2722
U 10292 ; WX 781 ; N uni2834 ; G 2723
U 10293 ; WX 781 ; N uni2835 ; G 2724
U 10294 ; WX 781 ; N uni2836 ; G 2725
U 10295 ; WX 781 ; N uni2837 ; G 2726
U 10296 ; WX 781 ; N uni2838 ; G 2727
U 10297 ; WX 781 ; N uni2839 ; G 2728
U 10298 ; WX 781 ; N uni283A ; G 2729
U 10299 ; WX 781 ; N uni283B ; G 2730
U 10300 ; WX 781 ; N uni283C ; G 2731
U 10301 ; WX 781 ; N uni283D ; G 2732
U 10302 ; WX 781 ; N uni283E ; G 2733
U 10303 ; WX 781 ; N uni283F ; G 2734
U 10304 ; WX 781 ; N uni2840 ; G 2735
U 10305 ; WX 781 ; N uni2841 ; G 2736
U 10306 ; WX 781 ; N uni2842 ; G 2737
U 10307 ; WX 781 ; N uni2843 ; G 2738
U 10308 ; WX 781 ; N uni2844 ; G 2739
U 10309 ; WX 781 ; N uni2845 ; G 2740
U 10310 ; WX 781 ; N uni2846 ; G 2741
U 10311 ; WX 781 ; N uni2847 ; G 2742
U 10312 ; WX 781 ; N uni2848 ; G 2743
U 10313 ; WX 781 ; N uni2849 ; G 2744
U 10314 ; WX 781 ; N uni284A ; G 2745
U 10315 ; WX 781 ; N uni284B ; G 2746
U 10316 ; WX 781 ; N uni284C ; G 2747
U 10317 ; WX 781 ; N uni284D ; G 2748
U 10318 ; WX 781 ; N uni284E ; G 2749
U 10319 ; WX 781 ; N uni284F ; G 2750
U 10320 ; WX 781 ; N uni2850 ; G 2751
U 10321 ; WX 781 ; N uni2851 ; G 2752
U 10322 ; WX 781 ; N uni2852 ; G 2753
U 10323 ; WX 781 ; N uni2853 ; G 2754
U 10324 ; WX 781 ; N uni2854 ; G 2755
U 10325 ; WX 781 ; N uni2855 ; G 2756
U 10326 ; WX 781 ; N uni2856 ; G 2757
U 10327 ; WX 781 ; N uni2857 ; G 2758
U 10328 ; WX 781 ; N uni2858 ; G 2759
U 10329 ; WX 781 ; N uni2859 ; G 2760
U 10330 ; WX 781 ; N uni285A ; G 2761
U 10331 ; WX 781 ; N uni285B ; G 2762
U 10332 ; WX 781 ; N uni285C ; G 2763
U 10333 ; WX 781 ; N uni285D ; G 2764
U 10334 ; WX 781 ; N uni285E ; G 2765
U 10335 ; WX 781 ; N uni285F ; G 2766
U 10336 ; WX 781 ; N uni2860 ; G 2767
U 10337 ; WX 781 ; N uni2861 ; G 2768
U 10338 ; WX 781 ; N uni2862 ; G 2769
U 10339 ; WX 781 ; N uni2863 ; G 2770
U 10340 ; WX 781 ; N uni2864 ; G 2771
U 10341 ; WX 781 ; N uni2865 ; G 2772
U 10342 ; WX 781 ; N uni2866 ; G 2773
U 10343 ; WX 781 ; N uni2867 ; G 2774
U 10344 ; WX 781 ; N uni2868 ; G 2775
U 10345 ; WX 781 ; N uni2869 ; G 2776
U 10346 ; WX 781 ; N uni286A ; G 2777
U 10347 ; WX 781 ; N uni286B ; G 2778
U 10348 ; WX 781 ; N uni286C ; G 2779
U 10349 ; WX 781 ; N uni286D ; G 2780
U 10350 ; WX 781 ; N uni286E ; G 2781
U 10351 ; WX 781 ; N uni286F ; G 2782
U 10352 ; WX 781 ; N uni2870 ; G 2783
U 10353 ; WX 781 ; N uni2871 ; G 2784
U 10354 ; WX 781 ; N uni2872 ; G 2785
U 10355 ; WX 781 ; N uni2873 ; G 2786
U 10356 ; WX 781 ; N uni2874 ; G 2787
U 10357 ; WX 781 ; N uni2875 ; G 2788
U 10358 ; WX 781 ; N uni2876 ; G 2789
U 10359 ; WX 781 ; N uni2877 ; G 2790
U 10360 ; WX 781 ; N uni2878 ; G 2791
U 10361 ; WX 781 ; N uni2879 ; G 2792
U 10362 ; WX 781 ; N uni287A ; G 2793
U 10363 ; WX 781 ; N uni287B ; G 2794
U 10364 ; WX 781 ; N uni287C ; G 2795
U 10365 ; WX 781 ; N uni287D ; G 2796
U 10366 ; WX 781 ; N uni287E ; G 2797
U 10367 ; WX 781 ; N uni287F ; G 2798
U 10368 ; WX 781 ; N uni2880 ; G 2799
U 10369 ; WX 781 ; N uni2881 ; G 2800
U 10370 ; WX 781 ; N uni2882 ; G 2801
U 10371 ; WX 781 ; N uni2883 ; G 2802
U 10372 ; WX 781 ; N uni2884 ; G 2803
U 10373 ; WX 781 ; N uni2885 ; G 2804
U 10374 ; WX 781 ; N uni2886 ; G 2805
U 10375 ; WX 781 ; N uni2887 ; G 2806
U 10376 ; WX 781 ; N uni2888 ; G 2807
U 10377 ; WX 781 ; N uni2889 ; G 2808
U 10378 ; WX 781 ; N uni288A ; G 2809
U 10379 ; WX 781 ; N uni288B ; G 2810
U 10380 ; WX 781 ; N uni288C ; G 2811
U 10381 ; WX 781 ; N uni288D ; G 2812
U 10382 ; WX 781 ; N uni288E ; G 2813
U 10383 ; WX 781 ; N uni288F ; G 2814
U 10384 ; WX 781 ; N uni2890 ; G 2815
U 10385 ; WX 781 ; N uni2891 ; G 2816
U 10386 ; WX 781 ; N uni2892 ; G 2817
U 10387 ; WX 781 ; N uni2893 ; G 2818
U 10388 ; WX 781 ; N uni2894 ; G 2819
U 10389 ; WX 781 ; N uni2895 ; G 2820
U 10390 ; WX 781 ; N uni2896 ; G 2821
U 10391 ; WX 781 ; N uni2897 ; G 2822
U 10392 ; WX 781 ; N uni2898 ; G 2823
U 10393 ; WX 781 ; N uni2899 ; G 2824
U 10394 ; WX 781 ; N uni289A ; G 2825
U 10395 ; WX 781 ; N uni289B ; G 2826
U 10396 ; WX 781 ; N uni289C ; G 2827
U 10397 ; WX 781 ; N uni289D ; G 2828
U 10398 ; WX 781 ; N uni289E ; G 2829
U 10399 ; WX 781 ; N uni289F ; G 2830
U 10400 ; WX 781 ; N uni28A0 ; G 2831
U 10401 ; WX 781 ; N uni28A1 ; G 2832
U 10402 ; WX 781 ; N uni28A2 ; G 2833
U 10403 ; WX 781 ; N uni28A3 ; G 2834
U 10404 ; WX 781 ; N uni28A4 ; G 2835
U 10405 ; WX 781 ; N uni28A5 ; G 2836
U 10406 ; WX 781 ; N uni28A6 ; G 2837
U 10407 ; WX 781 ; N uni28A7 ; G 2838
U 10408 ; WX 781 ; N uni28A8 ; G 2839
U 10409 ; WX 781 ; N uni28A9 ; G 2840
U 10410 ; WX 781 ; N uni28AA ; G 2841
U 10411 ; WX 781 ; N uni28AB ; G 2842
U 10412 ; WX 781 ; N uni28AC ; G 2843
U 10413 ; WX 781 ; N uni28AD ; G 2844
U 10414 ; WX 781 ; N uni28AE ; G 2845
U 10415 ; WX 781 ; N uni28AF ; G 2846
U 10416 ; WX 781 ; N uni28B0 ; G 2847
U 10417 ; WX 781 ; N uni28B1 ; G 2848
U 10418 ; WX 781 ; N uni28B2 ; G 2849
U 10419 ; WX 781 ; N uni28B3 ; G 2850
U 10420 ; WX 781 ; N uni28B4 ; G 2851
U 10421 ; WX 781 ; N uni28B5 ; G 2852
U 10422 ; WX 781 ; N uni28B6 ; G 2853
U 10423 ; WX 781 ; N uni28B7 ; G 2854
U 10424 ; WX 781 ; N uni28B8 ; G 2855
U 10425 ; WX 781 ; N uni28B9 ; G 2856
U 10426 ; WX 781 ; N uni28BA ; G 2857
U 10427 ; WX 781 ; N uni28BB ; G 2858
U 10428 ; WX 781 ; N uni28BC ; G 2859
U 10429 ; WX 781 ; N uni28BD ; G 2860
U 10430 ; WX 781 ; N uni28BE ; G 2861
U 10431 ; WX 781 ; N uni28BF ; G 2862
U 10432 ; WX 781 ; N uni28C0 ; G 2863
U 10433 ; WX 781 ; N uni28C1 ; G 2864
U 10434 ; WX 781 ; N uni28C2 ; G 2865
U 10435 ; WX 781 ; N uni28C3 ; G 2866
U 10436 ; WX 781 ; N uni28C4 ; G 2867
U 10437 ; WX 781 ; N uni28C5 ; G 2868
U 10438 ; WX 781 ; N uni28C6 ; G 2869
U 10439 ; WX 781 ; N uni28C7 ; G 2870
U 10440 ; WX 781 ; N uni28C8 ; G 2871
U 10441 ; WX 781 ; N uni28C9 ; G 2872
U 10442 ; WX 781 ; N uni28CA ; G 2873
U 10443 ; WX 781 ; N uni28CB ; G 2874
U 10444 ; WX 781 ; N uni28CC ; G 2875
U 10445 ; WX 781 ; N uni28CD ; G 2876
U 10446 ; WX 781 ; N uni28CE ; G 2877
U 10447 ; WX 781 ; N uni28CF ; G 2878
U 10448 ; WX 781 ; N uni28D0 ; G 2879
U 10449 ; WX 781 ; N uni28D1 ; G 2880
U 10450 ; WX 781 ; N uni28D2 ; G 2881
U 10451 ; WX 781 ; N uni28D3 ; G 2882
U 10452 ; WX 781 ; N uni28D4 ; G 2883
U 10453 ; WX 781 ; N uni28D5 ; G 2884
U 10454 ; WX 781 ; N uni28D6 ; G 2885
U 10455 ; WX 781 ; N uni28D7 ; G 2886
U 10456 ; WX 781 ; N uni28D8 ; G 2887
U 10457 ; WX 781 ; N uni28D9 ; G 2888
U 10458 ; WX 781 ; N uni28DA ; G 2889
U 10459 ; WX 781 ; N uni28DB ; G 2890
U 10460 ; WX 781 ; N uni28DC ; G 2891
U 10461 ; WX 781 ; N uni28DD ; G 2892
U 10462 ; WX 781 ; N uni28DE ; G 2893
U 10463 ; WX 781 ; N uni28DF ; G 2894
U 10464 ; WX 781 ; N uni28E0 ; G 2895
U 10465 ; WX 781 ; N uni28E1 ; G 2896
U 10466 ; WX 781 ; N uni28E2 ; G 2897
U 10467 ; WX 781 ; N uni28E3 ; G 2898
U 10468 ; WX 781 ; N uni28E4 ; G 2899
U 10469 ; WX 781 ; N uni28E5 ; G 2900
U 10470 ; WX 781 ; N uni28E6 ; G 2901
U 10471 ; WX 781 ; N uni28E7 ; G 2902
U 10472 ; WX 781 ; N uni28E8 ; G 2903
U 10473 ; WX 781 ; N uni28E9 ; G 2904
U 10474 ; WX 781 ; N uni28EA ; G 2905
U 10475 ; WX 781 ; N uni28EB ; G 2906
U 10476 ; WX 781 ; N uni28EC ; G 2907
U 10477 ; WX 781 ; N uni28ED ; G 2908
U 10478 ; WX 781 ; N uni28EE ; G 2909
U 10479 ; WX 781 ; N uni28EF ; G 2910
U 10480 ; WX 781 ; N uni28F0 ; G 2911
U 10481 ; WX 781 ; N uni28F1 ; G 2912
U 10482 ; WX 781 ; N uni28F2 ; G 2913
U 10483 ; WX 781 ; N uni28F3 ; G 2914
U 10484 ; WX 781 ; N uni28F4 ; G 2915
U 10485 ; WX 781 ; N uni28F5 ; G 2916
U 10486 ; WX 781 ; N uni28F6 ; G 2917
U 10487 ; WX 781 ; N uni28F7 ; G 2918
U 10488 ; WX 781 ; N uni28F8 ; G 2919
U 10489 ; WX 781 ; N uni28F9 ; G 2920
U 10490 ; WX 781 ; N uni28FA ; G 2921
U 10491 ; WX 781 ; N uni28FB ; G 2922
U 10492 ; WX 781 ; N uni28FC ; G 2923
U 10493 ; WX 781 ; N uni28FD ; G 2924
U 10494 ; WX 781 ; N uni28FE ; G 2925
U 10495 ; WX 781 ; N uni28FF ; G 2926
U 10496 ; WX 838 ; N uni2900 ; G 2927
U 10497 ; WX 838 ; N uni2901 ; G 2928
U 10498 ; WX 838 ; N uni2902 ; G 2929
U 10499 ; WX 838 ; N uni2903 ; G 2930
U 10500 ; WX 838 ; N uni2904 ; G 2931
U 10501 ; WX 838 ; N uni2905 ; G 2932
U 10502 ; WX 838 ; N uni2906 ; G 2933
U 10503 ; WX 838 ; N uni2907 ; G 2934
U 10504 ; WX 838 ; N uni2908 ; G 2935
U 10505 ; WX 838 ; N uni2909 ; G 2936
U 10506 ; WX 838 ; N uni290A ; G 2937
U 10507 ; WX 838 ; N uni290B ; G 2938
U 10508 ; WX 838 ; N uni290C ; G 2939
U 10509 ; WX 838 ; N uni290D ; G 2940
U 10510 ; WX 838 ; N uni290E ; G 2941
U 10511 ; WX 838 ; N uni290F ; G 2942
U 10512 ; WX 838 ; N uni2910 ; G 2943
U 10513 ; WX 838 ; N uni2911 ; G 2944
U 10514 ; WX 838 ; N uni2912 ; G 2945
U 10515 ; WX 838 ; N uni2913 ; G 2946
U 10516 ; WX 838 ; N uni2914 ; G 2947
U 10517 ; WX 838 ; N uni2915 ; G 2948
U 10518 ; WX 838 ; N uni2916 ; G 2949
U 10519 ; WX 838 ; N uni2917 ; G 2950
U 10520 ; WX 838 ; N uni2918 ; G 2951
U 10521 ; WX 838 ; N uni2919 ; G 2952
U 10522 ; WX 838 ; N uni291A ; G 2953
U 10523 ; WX 838 ; N uni291B ; G 2954
U 10524 ; WX 838 ; N uni291C ; G 2955
U 10525 ; WX 838 ; N uni291D ; G 2956
U 10526 ; WX 838 ; N uni291E ; G 2957
U 10527 ; WX 838 ; N uni291F ; G 2958
U 10528 ; WX 838 ; N uni2920 ; G 2959
U 10529 ; WX 838 ; N uni2921 ; G 2960
U 10530 ; WX 838 ; N uni2922 ; G 2961
U 10531 ; WX 838 ; N uni2923 ; G 2962
U 10532 ; WX 838 ; N uni2924 ; G 2963
U 10533 ; WX 838 ; N uni2925 ; G 2964
U 10534 ; WX 838 ; N uni2926 ; G 2965
U 10535 ; WX 838 ; N uni2927 ; G 2966
U 10536 ; WX 838 ; N uni2928 ; G 2967
U 10537 ; WX 838 ; N uni2929 ; G 2968
U 10538 ; WX 838 ; N uni292A ; G 2969
U 10539 ; WX 838 ; N uni292B ; G 2970
U 10540 ; WX 838 ; N uni292C ; G 2971
U 10541 ; WX 838 ; N uni292D ; G 2972
U 10542 ; WX 838 ; N uni292E ; G 2973
U 10543 ; WX 838 ; N uni292F ; G 2974
U 10544 ; WX 838 ; N uni2930 ; G 2975
U 10545 ; WX 838 ; N uni2931 ; G 2976
U 10546 ; WX 838 ; N uni2932 ; G 2977
U 10547 ; WX 838 ; N uni2933 ; G 2978
U 10548 ; WX 838 ; N uni2934 ; G 2979
U 10549 ; WX 838 ; N uni2935 ; G 2980
U 10550 ; WX 838 ; N uni2936 ; G 2981
U 10551 ; WX 838 ; N uni2937 ; G 2982
U 10552 ; WX 838 ; N uni2938 ; G 2983
U 10553 ; WX 838 ; N uni2939 ; G 2984
U 10554 ; WX 838 ; N uni293A ; G 2985
U 10555 ; WX 838 ; N uni293B ; G 2986
U 10556 ; WX 838 ; N uni293C ; G 2987
U 10557 ; WX 838 ; N uni293D ; G 2988
U 10558 ; WX 838 ; N uni293E ; G 2989
U 10559 ; WX 838 ; N uni293F ; G 2990
U 10560 ; WX 838 ; N uni2940 ; G 2991
U 10561 ; WX 838 ; N uni2941 ; G 2992
U 10562 ; WX 838 ; N uni2942 ; G 2993
U 10563 ; WX 838 ; N uni2943 ; G 2994
U 10564 ; WX 838 ; N uni2944 ; G 2995
U 10565 ; WX 838 ; N uni2945 ; G 2996
U 10566 ; WX 838 ; N uni2946 ; G 2997
U 10567 ; WX 838 ; N uni2947 ; G 2998
U 10568 ; WX 838 ; N uni2948 ; G 2999
U 10569 ; WX 838 ; N uni2949 ; G 3000
U 10570 ; WX 838 ; N uni294A ; G 3001
U 10571 ; WX 838 ; N uni294B ; G 3002
U 10572 ; WX 838 ; N uni294C ; G 3003
U 10573 ; WX 838 ; N uni294D ; G 3004
U 10574 ; WX 838 ; N uni294E ; G 3005
U 10575 ; WX 838 ; N uni294F ; G 3006
U 10576 ; WX 838 ; N uni2950 ; G 3007
U 10577 ; WX 838 ; N uni2951 ; G 3008
U 10578 ; WX 838 ; N uni2952 ; G 3009
U 10579 ; WX 838 ; N uni2953 ; G 3010
U 10580 ; WX 838 ; N uni2954 ; G 3011
U 10581 ; WX 838 ; N uni2955 ; G 3012
U 10582 ; WX 838 ; N uni2956 ; G 3013
U 10583 ; WX 838 ; N uni2957 ; G 3014
U 10584 ; WX 838 ; N uni2958 ; G 3015
U 10585 ; WX 838 ; N uni2959 ; G 3016
U 10586 ; WX 838 ; N uni295A ; G 3017
U 10587 ; WX 838 ; N uni295B ; G 3018
U 10588 ; WX 838 ; N uni295C ; G 3019
U 10589 ; WX 838 ; N uni295D ; G 3020
U 10590 ; WX 838 ; N uni295E ; G 3021
U 10591 ; WX 838 ; N uni295F ; G 3022
U 10592 ; WX 838 ; N uni2960 ; G 3023
U 10593 ; WX 838 ; N uni2961 ; G 3024
U 10594 ; WX 838 ; N uni2962 ; G 3025
U 10595 ; WX 838 ; N uni2963 ; G 3026
U 10596 ; WX 838 ; N uni2964 ; G 3027
U 10597 ; WX 838 ; N uni2965 ; G 3028
U 10598 ; WX 838 ; N uni2966 ; G 3029
U 10599 ; WX 838 ; N uni2967 ; G 3030
U 10600 ; WX 838 ; N uni2968 ; G 3031
U 10601 ; WX 838 ; N uni2969 ; G 3032
U 10602 ; WX 838 ; N uni296A ; G 3033
U 10603 ; WX 838 ; N uni296B ; G 3034
U 10604 ; WX 838 ; N uni296C ; G 3035
U 10605 ; WX 838 ; N uni296D ; G 3036
U 10606 ; WX 838 ; N uni296E ; G 3037
U 10607 ; WX 838 ; N uni296F ; G 3038
U 10608 ; WX 838 ; N uni2970 ; G 3039
U 10609 ; WX 838 ; N uni2971 ; G 3040
U 10610 ; WX 838 ; N uni2972 ; G 3041
U 10611 ; WX 838 ; N uni2973 ; G 3042
U 10612 ; WX 838 ; N uni2974 ; G 3043
U 10613 ; WX 838 ; N uni2975 ; G 3044
U 10614 ; WX 838 ; N uni2976 ; G 3045
U 10615 ; WX 1032 ; N uni2977 ; G 3046
U 10616 ; WX 838 ; N uni2978 ; G 3047
U 10617 ; WX 838 ; N uni2979 ; G 3048
U 10618 ; WX 960 ; N uni297A ; G 3049
U 10619 ; WX 838 ; N uni297B ; G 3050
U 10620 ; WX 838 ; N uni297C ; G 3051
U 10621 ; WX 838 ; N uni297D ; G 3052
U 10622 ; WX 838 ; N uni297E ; G 3053
U 10623 ; WX 838 ; N uni297F ; G 3054
U 10731 ; WX 494 ; N uni29EB ; G 3055
U 10764 ; WX 1782 ; N uni2A0C ; G 3056
U 10765 ; WX 610 ; N uni2A0D ; G 3057
U 10766 ; WX 610 ; N uni2A0E ; G 3058
U 10799 ; WX 838 ; N uni2A2F ; G 3059
U 10858 ; WX 838 ; N uni2A6A ; G 3060
U 10859 ; WX 838 ; N uni2A6B ; G 3061
U 11008 ; WX 838 ; N uni2B00 ; G 3062
U 11009 ; WX 838 ; N uni2B01 ; G 3063
U 11010 ; WX 838 ; N uni2B02 ; G 3064
U 11011 ; WX 838 ; N uni2B03 ; G 3065
U 11012 ; WX 838 ; N uni2B04 ; G 3066
U 11013 ; WX 838 ; N uni2B05 ; G 3067
U 11014 ; WX 838 ; N uni2B06 ; G 3068
U 11015 ; WX 838 ; N uni2B07 ; G 3069
U 11016 ; WX 838 ; N uni2B08 ; G 3070
U 11017 ; WX 838 ; N uni2B09 ; G 3071
U 11018 ; WX 838 ; N uni2B0A ; G 3072
U 11019 ; WX 838 ; N uni2B0B ; G 3073
U 11020 ; WX 838 ; N uni2B0C ; G 3074
U 11021 ; WX 838 ; N uni2B0D ; G 3075
U 11022 ; WX 838 ; N uni2B0E ; G 3076
U 11023 ; WX 838 ; N uni2B0F ; G 3077
U 11024 ; WX 838 ; N uni2B10 ; G 3078
U 11025 ; WX 838 ; N uni2B11 ; G 3079
U 11026 ; WX 945 ; N uni2B12 ; G 3080
U 11027 ; WX 945 ; N uni2B13 ; G 3081
U 11028 ; WX 945 ; N uni2B14 ; G 3082
U 11029 ; WX 945 ; N uni2B15 ; G 3083
U 11030 ; WX 769 ; N uni2B16 ; G 3084
U 11031 ; WX 769 ; N uni2B17 ; G 3085
U 11032 ; WX 769 ; N uni2B18 ; G 3086
U 11033 ; WX 769 ; N uni2B19 ; G 3087
U 11034 ; WX 945 ; N uni2B1A ; G 3088
U 11360 ; WX 703 ; N uni2C60 ; G 3089
U 11361 ; WX 380 ; N uni2C61 ; G 3090
U 11363 ; WX 752 ; N uni2C63 ; G 3091
U 11364 ; WX 831 ; N uni2C64 ; G 3092
U 11367 ; WX 945 ; N uni2C67 ; G 3093
U 11368 ; WX 727 ; N uni2C68 ; G 3094
U 11369 ; WX 869 ; N uni2C69 ; G 3095
U 11370 ; WX 693 ; N uni2C6A ; G 3096
U 11371 ; WX 730 ; N uni2C6B ; G 3097
U 11372 ; WX 568 ; N uni2C6C ; G 3098
U 11373 ; WX 848 ; N uni2C6D ; G 3099
U 11374 ; WX 1107 ; N uni2C6E ; G 3100
U 11375 ; WX 776 ; N uni2C6F ; G 3101
U 11376 ; WX 848 ; N uni2C70 ; G 3102
U 11377 ; WX 709 ; N uni2C71 ; G 3103
U 11378 ; WX 1221 ; N uni2C72 ; G 3104
U 11379 ; WX 984 ; N uni2C73 ; G 3105
U 11381 ; WX 779 ; N uni2C75 ; G 3106
U 11382 ; WX 576 ; N uni2C76 ; G 3107
U 11383 ; WX 905 ; N uni2C77 ; G 3108
U 11385 ; WX 571 ; N uni2C79 ; G 3109
U 11386 ; WX 667 ; N uni2C7A ; G 3110
U 11387 ; WX 617 ; N uni2C7B ; G 3111
U 11388 ; WX 313 ; N uni2C7C ; G 3112
U 11389 ; WX 489 ; N uni2C7D ; G 3113
U 11390 ; WX 722 ; N uni2C7E ; G 3114
U 11391 ; WX 730 ; N uni2C7F ; G 3115
U 11520 ; WX 773 ; N uni2D00 ; G 3116
U 11521 ; WX 635 ; N uni2D01 ; G 3117
U 11522 ; WX 804 ; N uni2D02 ; G 3118
U 11523 ; WX 658 ; N uni2D03 ; G 3119
U 11524 ; WX 788 ; N uni2D04 ; G 3120
U 11525 ; WX 962 ; N uni2D05 ; G 3121
U 11526 ; WX 756 ; N uni2D06 ; G 3122
U 11527 ; WX 960 ; N uni2D07 ; G 3123
U 11528 ; WX 617 ; N uni2D08 ; G 3124
U 11529 ; WX 646 ; N uni2D09 ; G 3125
U 11530 ; WX 962 ; N uni2D0A ; G 3126
U 11531 ; WX 631 ; N uni2D0B ; G 3127
U 11532 ; WX 646 ; N uni2D0C ; G 3128
U 11533 ; WX 962 ; N uni2D0D ; G 3129
U 11534 ; WX 846 ; N uni2D0E ; G 3130
U 11535 ; WX 866 ; N uni2D0F ; G 3131
U 11536 ; WX 961 ; N uni2D10 ; G 3132
U 11537 ; WX 645 ; N uni2D11 ; G 3133
U 11538 ; WX 645 ; N uni2D12 ; G 3134
U 11539 ; WX 959 ; N uni2D13 ; G 3135
U 11540 ; WX 945 ; N uni2D14 ; G 3136
U 11541 ; WX 863 ; N uni2D15 ; G 3137
U 11542 ; WX 644 ; N uni2D16 ; G 3138
U 11543 ; WX 646 ; N uni2D17 ; G 3139
U 11544 ; WX 645 ; N uni2D18 ; G 3140
U 11545 ; WX 649 ; N uni2D19 ; G 3141
U 11546 ; WX 688 ; N uni2D1A ; G 3142
U 11547 ; WX 936 ; N uni2D1B ; G 3143
U 11548 ; WX 982 ; N uni2D1C ; G 3144
U 11549 ; WX 681 ; N uni2D1D ; G 3145
U 11550 ; WX 676 ; N uni2D1E ; G 3146
U 11551 ; WX 852 ; N uni2D1F ; G 3147
U 11552 ; WX 1113 ; N uni2D20 ; G 3148
U 11553 ; WX 632 ; N uni2D21 ; G 3149
U 11554 ; WX 645 ; N uni2D22 ; G 3150
U 11555 ; WX 646 ; N uni2D23 ; G 3151
U 11556 ; WX 749 ; N uni2D24 ; G 3152
U 11557 ; WX 914 ; N uni2D25 ; G 3153
U 11800 ; WX 586 ; N uni2E18 ; G 3154
U 11807 ; WX 838 ; N uni2E1F ; G 3155
U 11810 ; WX 473 ; N uni2E22 ; G 3156
U 11811 ; WX 473 ; N uni2E23 ; G 3157
U 11812 ; WX 473 ; N uni2E24 ; G 3158
U 11813 ; WX 473 ; N uni2E25 ; G 3159
U 11822 ; WX 586 ; N uni2E2E ; G 3160
U 42564 ; WX 722 ; N uniA644 ; G 3161
U 42565 ; WX 563 ; N uniA645 ; G 3162
U 42566 ; WX 468 ; N uniA646 ; G 3163
U 42567 ; WX 380 ; N uniA647 ; G 3164
U 42576 ; WX 1333 ; N uniA650 ; G 3165
U 42577 ; WX 1085 ; N uniA651 ; G 3166
U 42580 ; WX 1287 ; N uniA654 ; G 3167
U 42581 ; WX 1025 ; N uniA655 ; G 3168
U 42582 ; WX 1287 ; N uniA656 ; G 3169
U 42583 ; WX 1029 ; N uniA657 ; G 3170
U 42648 ; WX 1448 ; N uniA698 ; G 3171
U 42649 ; WX 1060 ; N uniA699 ; G 3172
U 42760 ; WX 500 ; N uniA708 ; G 3173
U 42761 ; WX 500 ; N uniA709 ; G 3174
U 42762 ; WX 500 ; N uniA70A ; G 3175
U 42763 ; WX 500 ; N uniA70B ; G 3176
U 42764 ; WX 500 ; N uniA70C ; G 3177
U 42765 ; WX 500 ; N uniA70D ; G 3178
U 42766 ; WX 500 ; N uniA70E ; G 3179
U 42767 ; WX 500 ; N uniA70F ; G 3180
U 42768 ; WX 500 ; N uniA710 ; G 3181
U 42769 ; WX 500 ; N uniA711 ; G 3182
U 42770 ; WX 500 ; N uniA712 ; G 3183
U 42771 ; WX 500 ; N uniA713 ; G 3184
U 42772 ; WX 500 ; N uniA714 ; G 3185
U 42773 ; WX 500 ; N uniA715 ; G 3186
U 42774 ; WX 500 ; N uniA716 ; G 3187
U 42779 ; WX 384 ; N uniA71B ; G 3188
U 42780 ; WX 384 ; N uniA71C ; G 3189
U 42781 ; WX 276 ; N uniA71D ; G 3190
U 42782 ; WX 276 ; N uniA71E ; G 3191
U 42783 ; WX 276 ; N uniA71F ; G 3192
U 42790 ; WX 945 ; N uniA726 ; G 3193
U 42791 ; WX 712 ; N uniA727 ; G 3194
U 42792 ; WX 1003 ; N uniA728 ; G 3195
U 42793 ; WX 909 ; N uniA729 ; G 3196
U 42794 ; WX 696 ; N uniA72A ; G 3197
U 42795 ; WX 609 ; N uniA72B ; G 3198
U 42796 ; WX 634 ; N uniA72C ; G 3199
U 42797 ; WX 598 ; N uniA72D ; G 3200
U 42798 ; WX 741 ; N uniA72E ; G 3201
U 42799 ; WX 706 ; N uniA72F ; G 3202
U 42800 ; WX 592 ; N uniA730 ; G 3203
U 42801 ; WX 563 ; N uniA731 ; G 3204
U 42802 ; WX 1301 ; N uniA732 ; G 3205
U 42803 ; WX 983 ; N uniA733 ; G 3206
U 42804 ; WX 1261 ; N uniA734 ; G 3207
U 42805 ; WX 985 ; N uniA735 ; G 3208
U 42806 ; WX 1168 ; N uniA736 ; G 3209
U 42807 ; WX 1007 ; N uniA737 ; G 3210
U 42808 ; WX 1016 ; N uniA738 ; G 3211
U 42809 ; WX 832 ; N uniA739 ; G 3212
U 42810 ; WX 1016 ; N uniA73A ; G 3213
U 42811 ; WX 832 ; N uniA73B ; G 3214
U 42812 ; WX 994 ; N uniA73C ; G 3215
U 42813 ; WX 746 ; N uniA73D ; G 3216
U 42814 ; WX 796 ; N uniA73E ; G 3217
U 42815 ; WX 609 ; N uniA73F ; G 3218
U 42816 ; WX 869 ; N uniA740 ; G 3219
U 42817 ; WX 693 ; N uniA741 ; G 3220
U 42822 ; WX 916 ; N uniA746 ; G 3221
U 42823 ; WX 581 ; N uniA747 ; G 3222
U 42826 ; WX 1010 ; N uniA74A ; G 3223
U 42827 ; WX 770 ; N uniA74B ; G 3224
U 42830 ; WX 1448 ; N uniA74E ; G 3225
U 42831 ; WX 1060 ; N uniA74F ; G 3226
U 42856 ; WX 787 ; N uniA768 ; G 3227
U 42857 ; WX 716 ; N uniA769 ; G 3228
U 42875 ; WX 694 ; N uniA77B ; G 3229
U 42876 ; WX 527 ; N uniA77C ; G 3230
U 42880 ; WX 703 ; N uniA780 ; G 3231
U 42881 ; WX 380 ; N uniA781 ; G 3232
U 42882 ; WX 872 ; N uniA782 ; G 3233
U 42883 ; WX 727 ; N uniA783 ; G 3234
U 42884 ; WX 694 ; N uniA784 ; G 3235
U 42885 ; WX 527 ; N uniA785 ; G 3236
U 42886 ; WX 796 ; N uniA786 ; G 3237
U 42887 ; WX 609 ; N uniA787 ; G 3238
U 42891 ; WX 439 ; N uniA78B ; G 3239
U 42892 ; WX 306 ; N uniA78C ; G 3240
U 42893 ; WX 913 ; N uniA78D ; G 3241
U 42896 ; WX 914 ; N uniA790 ; G 3242
U 42897 ; WX 812 ; N uniA791 ; G 3243
U 42922 ; WX 945 ; N uniA7AA ; G 3244
U 43000 ; WX 595 ; N uniA7F8 ; G 3245
U 43001 ; WX 647 ; N uniA7F9 ; G 3246
U 43002 ; WX 1068 ; N uniA7FA ; G 3247
U 43003 ; WX 710 ; N uniA7FB ; G 3248
U 43004 ; WX 752 ; N uniA7FC ; G 3249
U 43005 ; WX 1107 ; N uniA7FD ; G 3250
U 43006 ; WX 468 ; N uniA7FE ; G 3251
U 43007 ; WX 1286 ; N uniA7FF ; G 3252
U 62464 ; WX 726 ; N uniF400 ; G 3253
U 62465 ; WX 737 ; N uniF401 ; G 3254
U 62466 ; WX 786 ; N uniF402 ; G 3255
U 62467 ; WX 1019 ; N uniF403 ; G 3256
U 62468 ; WX 737 ; N uniF404 ; G 3257
U 62469 ; WX 731 ; N uniF405 ; G 3258
U 62470 ; WX 796 ; N uniF406 ; G 3259
U 62471 ; WX 1058 ; N uniF407 ; G 3260
U 62472 ; WX 737 ; N uniF408 ; G 3261
U 62473 ; WX 737 ; N uniF409 ; G 3262
U 62474 ; WX 1329 ; N uniF40A ; G 3263
U 62475 ; WX 754 ; N uniF40B ; G 3264
U 62476 ; WX 753 ; N uniF40C ; G 3265
U 62477 ; WX 1024 ; N uniF40D ; G 3266
U 62478 ; WX 737 ; N uniF40E ; G 3267
U 62479 ; WX 753 ; N uniF40F ; G 3268
U 62480 ; WX 1070 ; N uniF410 ; G 3269
U 62481 ; WX 818 ; N uniF411 ; G 3270
U 62482 ; WX 870 ; N uniF412 ; G 3271
U 62483 ; WX 819 ; N uniF413 ; G 3272
U 62484 ; WX 1016 ; N uniF414 ; G 3273
U 62485 ; WX 753 ; N uniF415 ; G 3274
U 62486 ; WX 1008 ; N uniF416 ; G 3275
U 62487 ; WX 752 ; N uniF417 ; G 3276
U 62488 ; WX 760 ; N uniF418 ; G 3277
U 62489 ; WX 753 ; N uniF419 ; G 3278
U 62490 ; WX 800 ; N uniF41A ; G 3279
U 62491 ; WX 753 ; N uniF41B ; G 3280
U 62492 ; WX 760 ; N uniF41C ; G 3281
U 62493 ; WX 738 ; N uniF41D ; G 3282
U 62494 ; WX 801 ; N uniF41E ; G 3283
U 62495 ; WX 956 ; N uniF41F ; G 3284
U 62496 ; WX 736 ; N uniF420 ; G 3285
U 62497 ; WX 847 ; N uniF421 ; G 3286
U 62498 ; WX 737 ; N uniF422 ; G 3287
U 62499 ; WX 737 ; N uniF423 ; G 3288
U 62500 ; WX 737 ; N uniF424 ; G 3289
U 62501 ; WX 793 ; N uniF425 ; G 3290
U 62502 ; WX 1033 ; N uniF426 ; G 3291
U 62504 ; WX 904 ; N uniF428 ; G 3292
U 63172 ; WX 380 ; N uniF6C4 ; G 3293
U 63173 ; WX 667 ; N uniF6C5 ; G 3294
U 63174 ; WX 699 ; N uniF6C6 ; G 3295
U 63175 ; WX 727 ; N uniF6C7 ; G 3296
U 63176 ; WX 1058 ; N uniF6C8 ; G 3297
U 63185 ; WX 500 ; N cyrBreve ; G 3298
U 63188 ; WX 500 ; N cyrbreve ; G 3299
U 64256 ; WX 827 ; N uniFB00 ; G 3300
U 64257 ; WX 727 ; N fi ; G 3301
U 64258 ; WX 727 ; N fl ; G 3302
U 64259 ; WX 1108 ; N uniFB03 ; G 3303
U 64260 ; WX 1146 ; N uniFB04 ; G 3304
U 64261 ; WX 879 ; N uniFB05 ; G 3305
U 64262 ; WX 971 ; N uniFB06 ; G 3306
U 65024 ; WX 0 ; N uniFE00 ; G 3307
U 65025 ; WX 0 ; N uniFE01 ; G 3308
U 65026 ; WX 0 ; N uniFE02 ; G 3309
U 65027 ; WX 0 ; N uniFE03 ; G 3310
U 65028 ; WX 0 ; N uniFE04 ; G 3311
U 65029 ; WX 0 ; N uniFE05 ; G 3312
U 65030 ; WX 0 ; N uniFE06 ; G 3313
U 65031 ; WX 0 ; N uniFE07 ; G 3314
U 65032 ; WX 0 ; N uniFE08 ; G 3315
U 65033 ; WX 0 ; N uniFE09 ; G 3316
U 65034 ; WX 0 ; N uniFE0A ; G 3317
U 65035 ; WX 0 ; N uniFE0B ; G 3318
U 65036 ; WX 0 ; N uniFE0C ; G 3319
U 65037 ; WX 0 ; N uniFE0D ; G 3320
U 65038 ; WX 0 ; N uniFE0E ; G 3321
U 65039 ; WX 0 ; N uniFE0F ; G 3322
U 65529 ; WX 0 ; N uniFFF9 ; G 3323
U 65530 ; WX 0 ; N uniFFFA ; G 3324
U 65531 ; WX 0 ; N uniFFFB ; G 3325
U 65532 ; WX 0 ; N uniFFFC ; G 3326
U 65533 ; WX 1113 ; N uniFFFD ; G 3327
EndCharMetrics
StartKernData 
StartKernPairs 1153

KPX dollar seven -112
KPX dollar nine -149
KPX dollar colon -102
KPX dollar less -102
KPX dollar I -36
KPX dollar W -36
KPX dollar Y -83
KPX dollar Z -83
KPX dollar backslash -83
KPX dollar questiondown -83
KPX dollar Aacute -83
KPX dollar Hbar -112
KPX dollar hbar -36
KPX dollar lacute -102

KPX percent ampersand 38
KPX percent asterisk 38
KPX percent two 38
KPX percent less -36
KPX percent Egrave 38
KPX percent Icircumflex 38
KPX percent agrave 38
KPX percent Ebreve 38
KPX percent lacute -36


KPX quotesingle nine -36


KPX parenright dollar -120
KPX parenright D -112
KPX parenright H -112
KPX parenright R -112
KPX parenright U -36
KPX parenright X -36
KPX parenright cent -112
KPX parenright sterling -112
KPX parenright currency -112
KPX parenright yen -112
KPX parenright brokenbar -112
KPX parenright section -112
KPX parenright dieresis -112
KPX parenright ordfeminine -112
KPX parenright guillemotleft -112
KPX parenright logicalnot -112
KPX parenright sfthyphen -112
KPX parenright acute -112
KPX parenright mu -112
KPX parenright paragraph -112
KPX parenright periodcentered -112
KPX parenright cedilla -112
KPX parenright ordmasculine -112
KPX parenright guillemotright -36
KPX parenright onequarter -36
KPX parenright onehalf -36
KPX parenright threequarters -36
KPX parenright Yacute -112
KPX parenright ebreve -112
KPX parenright edotaccent -36
KPX parenright ecaron -36
KPX parenright dotlessi -36



KPX period dollar -83
KPX period ampersand -55
KPX period two -55
KPX period eight -73
KPX period colon -73
KPX period less -55
KPX period H -45
KPX period R -45
KPX period X -45
KPX period backslash -92
KPX period ordfeminine -45
KPX period guillemotleft -45
KPX period logicalnot -45
KPX period sfthyphen -45
KPX period acute -45
KPX period mu -45
KPX period paragraph -45
KPX period periodcentered -45
KPX period cedilla -45
KPX period ordmasculine -36
KPX period guillemotright -45
KPX period onequarter -45
KPX period onehalf -45
KPX period threequarters -45
KPX period questiondown -92
KPX period Aacute -92
KPX period Egrave -55
KPX period Icircumflex -55
KPX period Yacute -45
KPX period Ebreve -55
KPX period ebreve -45
KPX period Idot -73
KPX period dotlessi -45
KPX period lacute -55

KPX slash seven -167
KPX slash eight -112
KPX slash nine -243
KPX slash colon -139
KPX slash less -131
KPX slash backslash -73
KPX slash questiondown -73
KPX slash Aacute -73
KPX slash Hbar -167
KPX slash Idot -112
KPX slash lacute -131


KPX two nine -36
KPX two semicolon -36

KPX three dollar -149
KPX three D -55
KPX three H -55
KPX three R -55
KPX three cent -55
KPX three sterling -55
KPX three currency -55
KPX three yen -55
KPX three brokenbar -55
KPX three section -55
KPX three dieresis -55
KPX three ordfeminine -55
KPX three guillemotleft -55
KPX three logicalnot -55
KPX three sfthyphen -55
KPX three acute -55
KPX three mu -55
KPX three paragraph -55
KPX three periodcentered -55
KPX three cedilla -55
KPX three ordmasculine -55
KPX three Yacute -55
KPX three ebreve -55


KPX five seven -36
KPX five nine -73
KPX five colon -45
KPX five less -63
KPX five D 47
KPX five backslash -36
KPX five cent 47
KPX five sterling 47
KPX five currency 47
KPX five yen 47
KPX five brokenbar 47
KPX five section 47
KPX five dieresis 47
KPX five ordmasculine 38
KPX five questiondown -36
KPX five Aacute -36
KPX five Hbar -36
KPX five lacute -63

KPX six six -45
KPX six Gdotaccent -45
KPX six Gcommaaccent -45

KPX seven dollar -112
KPX seven seven -73
KPX seven D -196
KPX seven F -235
KPX seven H -235
KPX seven R -235
KPX seven U -149
KPX seven V -188
KPX seven X -188
KPX seven Z -225
KPX seven backslash -225
KPX seven m -149
KPX seven braceright -149
KPX seven cent -196
KPX seven sterling -196
KPX seven currency -196
KPX seven yen -196
KPX seven brokenbar -196
KPX seven section -196
KPX seven dieresis -159
KPX seven copyright -235
KPX seven ordfeminine -235
KPX seven guillemotleft -235
KPX seven logicalnot -235
KPX seven sfthyphen -235
KPX seven acute -235
KPX seven mu -235
KPX seven paragraph -235
KPX seven periodcentered -235
KPX seven cedilla -235
KPX seven ordmasculine -159
KPX seven guillemotright -188
KPX seven onequarter -188
KPX seven onehalf -188
KPX seven threequarters -188
KPX seven questiondown -225
KPX seven Aacute -225
KPX seven Eacute -235
KPX seven Idieresis -235
KPX seven Yacute -235
KPX seven ebreve -159
KPX seven edotaccent -149
KPX seven ecaron -149
KPX seven gdotaccent -188
KPX seven gcommaaccent -188
KPX seven Hbar -73
KPX seven dotlessi -188

KPX eight dollar -63

KPX nine dollar -159
KPX nine two -36
KPX nine D -188
KPX nine H -188
KPX nine L -36
KPX nine R -188
KPX nine X -131
KPX nine backslash -83
KPX nine cent -188
KPX nine sterling -188
KPX nine currency -188
KPX nine yen -188
KPX nine brokenbar -188
KPX nine section -188
KPX nine dieresis -188
KPX nine ordfeminine -188
KPX nine guillemotleft -188
KPX nine logicalnot -188
KPX nine sfthyphen -188
KPX nine acute -188
KPX nine mu -188
KPX nine paragraph -188
KPX nine periodcentered -188
KPX nine cedilla -188
KPX nine ordmasculine -188
KPX nine guillemotright -131
KPX nine onequarter -131
KPX nine onehalf -131
KPX nine threequarters -131
KPX nine questiondown -83
KPX nine Aacute -83
KPX nine Yacute -188
KPX nine Ebreve -36
KPX nine ebreve -188
KPX nine dotlessi -131

KPX colon dollar -131
KPX colon D -178
KPX colon H -167
KPX colon L -36
KPX colon R -167
KPX colon U -92
KPX colon X -83
KPX colon backslash -45
KPX colon cent -178
KPX colon sterling -178
KPX colon currency -178
KPX colon yen -178
KPX colon brokenbar -178
KPX colon section -178
KPX colon dieresis -139
KPX colon ordfeminine -167
KPX colon guillemotleft -167
KPX colon logicalnot -167
KPX colon sfthyphen -167
KPX colon acute -167
KPX colon mu -167
KPX colon paragraph -167
KPX colon periodcentered -167
KPX colon cedilla -167
KPX colon ordmasculine -167
KPX colon guillemotright -83
KPX colon onequarter -83
KPX colon onehalf -83
KPX colon threequarters -83
KPX colon questiondown -45
KPX colon Aacute -45
KPX colon Yacute -167
KPX colon ebreve -167
KPX colon edotaccent -92
KPX colon ecaron -92
KPX colon dotlessi -83

KPX semicolon dollar -73
KPX semicolon ampersand -36
KPX semicolon two -36
KPX semicolon Egrave -36
KPX semicolon Icircumflex -36
KPX semicolon Ebreve -36

KPX less dollar -131
KPX less ampersand -36
KPX less D -159
KPX less H -178
KPX less L -36
KPX less R -178
KPX less X -178
KPX less cent -159
KPX less sterling -159
KPX less currency -159
KPX less yen -159
KPX less brokenbar -159
KPX less section -159
KPX less dieresis -159
KPX less ordfeminine -178
KPX less guillemotleft -178
KPX less logicalnot -178
KPX less sfthyphen -178
KPX less acute -178
KPX less mu -178
KPX less paragraph -178
KPX less periodcentered -178
KPX less cedilla -178
KPX less ordmasculine -178
KPX less guillemotright -178
KPX less onequarter -178
KPX less onehalf -178
KPX less threequarters -178
KPX less Egrave -36
KPX less Icircumflex -36
KPX less Yacute -178
KPX less ebreve -178
KPX less dotlessi -178










KPX m hyphen -73
KPX m seven -149
KPX m Hbar -149

KPX braceright hyphen -73
KPX braceright seven -149
KPX braceright Hbar -149














KPX Eth nine -36



KPX ucircumflex seven -167
KPX ucircumflex eight -112
KPX ucircumflex nine -243
KPX ucircumflex colon -139
KPX ucircumflex less -131
KPX ucircumflex backslash -73
KPX ucircumflex questiondown -73
KPX ucircumflex Aacute -73
KPX ucircumflex Hbar -167
KPX ucircumflex Idot -112
KPX ucircumflex lacute -131

KPX ydieresis seven -167
KPX ydieresis eight -112
KPX ydieresis nine -243
KPX ydieresis colon -139
KPX ydieresis less -131
KPX ydieresis backslash -73
KPX ydieresis questiondown -73
KPX ydieresis Aacute -73
KPX ydieresis Hbar -167
KPX ydieresis Idot -112
KPX ydieresis lacute -131

KPX Abreve O -241

KPX abreve seven -167
KPX abreve eight -112
KPX abreve nine -243
KPX abreve colon -139
KPX abreve less -131
KPX abreve backslash -73
KPX abreve questiondown -73
KPX abreve Aacute -73
KPX abreve Hbar -167
KPX abreve Idot -112
KPX abreve lacute -131



KPX Edotaccent seven -36
KPX Edotaccent nine -73
KPX Edotaccent colon -45
KPX Edotaccent less -63
KPX Edotaccent D 47
KPX Edotaccent backslash -36
KPX Edotaccent cent 47
KPX Edotaccent sterling 47
KPX Edotaccent currency 47
KPX Edotaccent yen 47
KPX Edotaccent brokenbar 47
KPX Edotaccent section 47
KPX Edotaccent dieresis 47
KPX Edotaccent ordmasculine 38
KPX Edotaccent questiondown -36
KPX Edotaccent Aacute -36
KPX Edotaccent Hbar -36
KPX Edotaccent lacute -63


KPX Ecaron seven -36
KPX Ecaron nine -73
KPX Ecaron colon -45
KPX Ecaron less -63
KPX Ecaron D 47
KPX Ecaron backslash -36
KPX Ecaron cent 47
KPX Ecaron sterling 47
KPX Ecaron currency 47
KPX Ecaron yen 47
KPX Ecaron brokenbar 47
KPX Ecaron section 47
KPX Ecaron dieresis 47
KPX Ecaron ordmasculine 38
KPX Ecaron questiondown -36
KPX Ecaron Aacute -36
KPX Ecaron Hbar -36
KPX Ecaron lacute -63


KPX Gdotaccent six -45
KPX Gdotaccent Gdotaccent -45
KPX Gdotaccent Gcommaaccent -45

KPX Gcommaaccent six -45
KPX Gcommaaccent Gdotaccent -45
KPX Gcommaaccent Gcommaaccent -45

KPX Hbar dollar -112
KPX Hbar seven -73
KPX Hbar D -196
KPX Hbar F -235
KPX Hbar H -235
KPX Hbar R -235
KPX Hbar U -149
KPX Hbar V -188
KPX Hbar X -188
KPX Hbar Z -225
KPX Hbar backslash -225
KPX Hbar m -149
KPX Hbar braceright -149
KPX Hbar cent -196
KPX Hbar sterling -196
KPX Hbar currency -196
KPX Hbar yen -196
KPX Hbar brokenbar -196
KPX Hbar section -196
KPX Hbar dieresis -159
KPX Hbar copyright -235
KPX Hbar ordfeminine -235
KPX Hbar guillemotleft -235
KPX Hbar logicalnot -235
KPX Hbar sfthyphen -235
KPX Hbar acute -235
KPX Hbar mu -235
KPX Hbar paragraph -235
KPX Hbar periodcentered -235
KPX Hbar cedilla -235
KPX Hbar ordmasculine -159
KPX Hbar guillemotright -188
KPX Hbar onequarter -188
KPX Hbar onehalf -188
KPX Hbar threequarters -188
KPX Hbar questiondown -225
KPX Hbar Aacute -225
KPX Hbar Eacute -235
KPX Hbar Idieresis -235
KPX Hbar Yacute -235
KPX Hbar ebreve -159
KPX Hbar edotaccent -149
KPX Hbar ecaron -149
KPX Hbar gdotaccent -188
KPX Hbar gcommaaccent -188
KPX Hbar Hbar -73
KPX Hbar dotlessi -188

KPX Idot dollar -63

KPX lacute dollar -131
KPX lacute ampersand -36
KPX lacute D -159
KPX lacute H -178
KPX lacute L -36
KPX lacute R -178
KPX lacute X -178
KPX lacute cent -159
KPX lacute sterling -159
KPX lacute currency -159
KPX lacute yen -159
KPX lacute brokenbar -159
KPX lacute section -159
KPX lacute dieresis -159
KPX lacute ordfeminine -178
KPX lacute guillemotleft -178
KPX lacute logicalnot -178
KPX lacute sfthyphen -178
KPX lacute acute -178
KPX lacute mu -178
KPX lacute paragraph -178
KPX lacute periodcentered -178
KPX lacute cedilla -178
KPX lacute ordmasculine -178
KPX lacute guillemotright -178
KPX lacute onequarter -178
KPX lacute onehalf -178
KPX lacute threequarters -178
KPX lacute Egrave -36
KPX lacute Icircumflex -36
KPX lacute Yacute -178
KPX lacute ebreve -178
KPX lacute dotlessi -178


KPX uni027D dollar -282
EndKernPairs
EndKernData
EndFontMetrics
       0FFTMs  <   GDEFP  X   GPOS	e    7NGSUB-  9T  OS/2m6  ?   VcmapO  @H  .cvt 3  Px  fpgm  R   gasp    R   glyfqd  R head*    6hhea    $hmtxx_   6kern8 L  loca.^ f  6maxp     namei   !postШ L  prepuy B,  ^       =    )    )                               o pz {                   
   DFLT cyrl *grek Flatn V            MKD  SRB                    ^ AZE  ^CRT  ^GAG  ^ISM  ^KAZ  ^KRK  ^KSM  ^LSM  ^MOL  ^NSM  ^ROM  ^SKS  ^SSM  ^TAT  ^TRK  ^        kern mark mkmk                                !8 4 V   @ F L R X ^ d j p v |                     f n< n< n< n< n< n<   f f f f f  n< nN n< (f (f (f (f (f (f              pp rr tx        pz  %                                                                     &  ,  2  8  >  D  J  P  V  \  b  h  n       *
 *
 *
 *
 *
 *
 ,            *
 *
 D *
 D D     p p p p p p    p p dl   &,28>DJPV\bhntz
"(.4:@FLRX^djpv|	 						$	*  	0	6	<	B	H  	N  	T	Z	`  	f	l	r	x	~								  	  									  	  	  	  
  




   
&
,
2
8
>  
D  
J  
P  
V  
\  
b
h
n  
t  
z









  












  "  (.4:@FLRX^dj  pv|                 $*  06<BHNTZ`  flrx~ &,28>DJPV\bhntz                                
        "(.  4  :  @  F  L  R  X  ^  d  j  p  v  |                                                 $*06<BHNTZ`flrx~ &,28>DJPV\bhntz
"(.4:@FLRX^djpv| $*06<BHNTZ`flrx~   &,28>DJPV\bhntz
"(.4:@FLRX^djpv  |                   $*06<BHNTZ`flrx~ &,28>DJPV\bhntz
"(.4:@FLRX^djpv  |         $*06<BHNTZ n Q   r U       x U   w Z               '    h   R     ! f               r      l I   O -   6        n Q       g G       Z 7   D      F 
 D  
 m     D       (R D R  	         R            CD n   D 6   D     XD  R D BR D     zD      }   D    D    D    D    D R }D    k <     |R _k Kk     k D     D  
 D     w Z   D    	    { D nD    1      }      (R h  D r C          w - "     D  I zD 0     . D U 8   }D    D R     D R           w Z   D         D L        rD " g   D s V       n Q   x [   D    h   R R  d   D    g J   D     -    D R D &   D    wD    D D m     D D D D D D D (   D D  
 D R D R      D 5D a   5D R D =   D      R D    D    D }R D    D    D %   D F     ^       D    R   
 D    n      :  + 1    D    /    D 2   h   R  ' !  j w         r t   n  D D D D D    D XD D D (D (D }D D D D D rD D 
  D x D  D 	 D     $D `   D             0 D   D    D    jD    D    D  
 D    D    D    D    D !   D    D    	D 5   hD h   D  
 D /   D /   D .   TD    {D    D    D    D 7   D    D    D /   D C   CI  D    D    ~D    D         fD    D     D    D ?   D    ID u   6D b   ) v L  , x "  / x / {  [ v    [       i  W   8 z    i  ,   ( q  O    <   &   Z  F   C   h   RI ~  D     D    YD  R D    D    /   4         O  P         (R    (R D         -  r  e r     
       B    " g         s      R '     
            s W   ~D     ]R o R   D        D        a    D    D       p V ~ a   J {D   D r D . ID  D 7    kD    2 R  R g R   R           D R   D R     {D    O 2   D !   1    D !   ? #   D !       I p      I p   ,R TD R f I   D  
          "    M &   F )   ED q   7    kD    t  R D  R =  R D  R  )   D  R  R D ?R =  R D  R     D  
     D 7   	        E AD m   # h    ;       IQ      x   D D     D D D  I 7  D R 1    H +   D  D    D    D    D    D    D     9    } `   m     ? "   D R  ~ $ =   D ]    4   5   7   9   :   ;   =   >   @   B C() DAA FHJ GLL JPR KUV NYY P_a Qij Tnn Vss Wux X|| \ ] _ ` b d h i j z! }$% '' ** ,, 12 66 9: BD LL NO QQ VV ZZ \] aa yz      oo qr {{ ~~                              77    ' )1DD#GG$VV%Y]&_`+dd-ww.||/~02&'35789:;

<=G"I%'M)+PYdSy_{|~  	      " - 5 ;pz < G    $  *  0  6  <  B  H  N  T  Z  `  f  l  r  x  ~                                 & , 2 8 >  D  J  P  V  \  b  h  n  t  z                         D D D D D D D D D D D D D D D D D D 8| _r _r C   C   Z   Z   U   F   I   Z   9      6   7 <   D   C   ;   D   C   ;   ;   :   -   W   ?   T   B   T   ;   D ^r D _r D D D D D D D ID ID ID ID ID ID bD bD bD ID ID J   r ( 5                                                                                                                                  k                                                                                                                                                               &       & &   &                                                                                                                                                                                             &                                                                                                     &                                                                                                      N                      u                                    uu                     &                                                                                                    a                                                                                                    k                                              }          }                                  YN  }                                                                    }  }                                                                                                   K                                                                                                aaD                                                                         K                                                                                               &                             /                                       / /       &                 K                                                                                                             &          aa  a          a    k              aaaaaa    a  k          DD                                                                                              D2u                    D    D        D        }          DD  DDD}D         K    kN                      N    Y        u                Nu  Yuuu       &                                                                                                      a                    a    N        N        N            a<  NNNN  )                                                                                                                                                                                                                    &                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     K                                                                                               &                                                                                                                                                                                                                                                                                                                                      YN  2                                                                                                 n U a V      } U  }                                                     /                                                                                                     /         9 9 9 9                                                                                               9                                                                      M    $ $  % %  & &  ' '  ( (  ) )  * *  - - 	 . . 
 / /  1 1  2 2  3 3  4 4  5 5  6 6  7 7  8 8  9 9  : :  ; ;  < <  = =  I I  N N  R R  U U  Y Z  [ [  \ \                                                  !                         " #		         "" && 00 77 $:: ?? }} %  % & ' 
   N             $ $  & &  * *  - -  2 2 	 6 6 
 7 7  8 8  9 9  : :  ; ;  < <  D D  F F  G G  H H  I I  J J  L L  M M  O O  P Q  R R  S S  T T  U U  V V  W W  X X  Y Y   Z Z ! [ [ " \ \ # ] ] $      %      	   	         &   '   (   )   *   +   ,   -   -      (      (   )    	 . / /   
!! 0"" 
## 0&& '' 100 11 ,77 2::  3 4 3 1  `  $ % & ' ( ) * - . / 1 2 3 4 5 6 7 8 9 : ; < = I N R U Y Z [ \                                          	 "&07:?}      
< DFLT cyrl 0grek blatn v               MKD   SRB                                   p AZE  CAT  CRT  ESP  GAG  GAL  ISM  KAZ  KRK  KSM  LSM  MOL  NSM  ROM  SKS  SSM  TAT  TRK                                             	aalt 8case >ccmp Ddlig Jliga Pliga Xlocl ^locl dsalt j        
                                   ( 0 8 @ H P X ` h     X                \                    B    p   ` ` `   z     L M     ** __   ^^     ! 'UU (  Y $ =  I I  K K  L M  O O                                                                                           		              "" $$ && (( ** ,, .. 00 22 44 66 88 :; == ?? AA HH RR TT VV           ** __   ^^     UU             	                  z    N   ( D      I O  O  I     T O  O T    O   IT  >     4     I L  L    T L  L    L   IT    
     W    W   VA      J     8     " & , 0 4           J   y   
sqtrwxpyuz  
    {!|~    L M *_^U      c R      3 63E f   R 
      PfEd   m`               ,   
       $     ,  
     `   `   ~?COXaw_emwV_?kxEMWY[]} & : > B I O S W d q         !!	!!!"!'!+!2!D!K!N!!" ""	""" "-"="C"H"U"a"e"""#####!#%#(#}##$#& &<&G&g&o''''))**/*k+,a,d,s,w,-%...%..GQWAGKOi|&(        COX`pzbjp1Ya? w{   HPY[]_   * < B D K Q W _ j t        !!	!!!"!&!*!2!A!K!N!P!!""""""#"8"B"H"P"`"d"""##### #%#(#}##$#% &8&?&`&i''''')**/*j+ ,`,c,g,u,y- ..."..DPT&FJNh{ (    |{zykiecOMKIGCA?='#X~}|{zxwvtsqpolkhgfeb[VTSJECB@><ieQ j;|uo߱߰߮߭߬,:42*fffee]eYeSeOeMeKe3e"eeeed                                                                                                                                                                                                                                                                                                                                                                      h              ~           b                                               ?    C  C    O  O    X  X    `  a    p  w    z                                 _  [  b  e    j  m    p  w                                                  
            7      =  1  V  A  Y  _  g  a    n        ?  ?                   k    w  x  W  {    Y      ^      _                               E    H  M    P  W    Y  Y    [  [    ]  ]    _  }              -      <      J      P      c      f       &  o   *   :     <   >     B   B     D   I     K   O     Q   S     W   W     _   d     j   q     t                                                                       !  !    !	  !	    !  !    !  !    !"  !"    !&  !'     !*  !+    !2  !2    !A  !D    !K  !K  	  !N  !N  
  !P  !    !  !  A  !  "   B  "  "    "  "	    "  "    "  "    "  "     "#  "-    "8  "=    "B  "C    "H  "H    "P  "U    "`  "a    "d  "e    "  "    "  "    "  "  	  #  #  	  #  #  	  #  #  	  #  #  	  #   #!  	   #%  #%  	"  #(  #(  	#  #}  #}  	$  #  #  	%  #  #  	9  $#  $#  	:  %   &   	;  &8  &<  
<  &?  &G  
A  &`  &g  
J  &i  &o  
R  '  '  
Y  '  '  
Z  '  '  
\  '  '  
]  '  )  
_  )  )    *  *    */  */    *j  *k    +   +    ,`  ,a    ,c  ,d    ,g  ,s    ,u  ,w  "  ,y  ,  %  -   -%  ,  .  .  R  .  .  S  ."  .%  T  ..  ..  X  D  G  Y  P  Q  ]  T  W  _      c      e      t  &  A  y  F  G    J  K    N  O    h  i    {  |                                     &    (  (                                         4 T    V g  ! ֤ ֥  3    5 
                                                                       	 
                        ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a                                   r d e i x  p k v j   s g w9 l |"    c nT m } b    
 : y                   q z  
 s       L j q     {        ) j   /     s 3    f   b   w PP     ; f   =   f     R   B s J    }  s    
 j j b \   j j j  j
     j j)R`fX { H j  j``'''D j  b   { s j    \)' \ j j    = f  H   f      JJ} T  {3 ` }T j N   N s    , %Id@QX Y!-,%Id@QX Y!-,   Py PXY%%#  Py PXY%-,KPX EDY!-,%E`D-,KSX%%EDY!!-,ED-         ff    !%!!f sr)     
   >32#"!#7[97?]791{10pNN87N       #!#h++        !!!3!!!!#!#!5!!5!T<fgi4R:gihf\RchaabbN   D   1  %>76&'3.76$73#6&'#.Es_liUi6l}_ښ4d4dQ3mptX 4d4`D
n_VxiXPj!H@1)t	<C3     
    $ .  "326&"2676&'2#"&7>3#  &76OXDVU:C#WCBDI杠$%岘,<$%%$(#Zۻۻۼ   P  E  %326!'# '&547>7&'&5476$32#654'&#">?!#31fzE]fomz}]ů'
Cl2q/5ngWUs%*feNf+'qTpGXVb4;e== """Y28qZ((:sPikk`    h   #h+   D   & %ޜEETDD;mcdmbjj }   76'7 %DD<ߜEEbj\]jbm''    !L   %#'-73%yLLyL\\նv}vw}       !!#!5!1Ϡ1Ϣ11     (    >?3(l|)E%Z  Jjs   !!i  s     
  >32#"[97?]790pNN87N   \BV   3#m   	   $  " 32 o2BBWBBGGaGGFPSTPMnohh       
  37!7%3!jÃzj     |   #>32!73!7>76&#"Op4vh&*>o$uD=|q
9<mĖ      )  >32!"&'332676&+732676& #L~^!͢"(ud8p"_2u%p,. ׫23"f~          	!73!73!!3hSX9tS9j%m
k   -   !>32 !"&'332676&#"# TS;V-. gg8q&%ZBVդT$$23"@C      	 #  $ 6&#">32 #" !2#6&#"Ko%'HRl-,DL%OU0qnnFȽKJy^ej         	#!#! /N$uDo1\    G 	  ,  6&  66&#"326#"&7>7.76$ x|} m|{m{|((氒#!#v͟ҟϴ  D  #  #"76 32 !"&'7332" 676&Qm-,MDLjOU0pmmuKn%'oKJxRel%"|ɽ  y    >2">32#"\p>[rA\89=Z980pNNpMpMLrL ;y    >?3>2"k})\p=
\pE%ZpMN78M   ^   	5Ѧ    f    !!!!     ^   55//y   1 
 !  >32#">32#>76&#"#\97?
^79tT#%2{@t~r-a0pNN87N/.ֶ3H+ʜ{     ? L  %#"&$3273>76&'&$#" 3267#"$'&7676$32 76&#"326K]N
]+%3PZ^0 -KVo'~ܣehF%$řt@Y9!4~MpsyfzrRPPR%oT&']gw}LLF]]{GF~b|i}   b  _    !7333!73!3r$U"=jkjjHj    c   $  %!2676&#!732676&+73#7!2!}+!!j$ +jj~}j kä     j   #"&'&7 !2#.#" 3267`kNZ6#DIzBq@@Odap\@A         %3  !#73#7!   !}#xyܺjRcEDjLlHj kvt         #73#7!#7!!73#7!!73 @{(Ra${`{$y({@j k         #73#7!#7!!73#7!3 @{(>a${`{$}j k~j    r   6&#  3267!7!#   !2ZA@qhKmDEYD88kMM_b;<      #73#7!#!#7!#3!73!3 GddG|}j kkkk jj~j    J   %3!73#7!#}Gjjj kk V   733267#7!##"&-rEXw{+q0Gca9kk"   ]   #73#7!##7!#	3!3 GnAvj kk5kk3jj      #73#7!#!73 G0{Hj kk     [   #73#7!	!#3!73#3 =5j k'k jj~j    :   #73#7!#7!##3*y9j kf/kkyj  j    %2 #" "&'&76$3  <@@@@NZ6FuE=D#uNQJKQkdapjpbcVobc    Y    !2676&#!73#7!2#!3}j&%kj kj    {O  0   '&547676$3  ;# '&'2 654'&#" q#uEo:)m$unl2<@6\@6\ӓ\ipbcՕ\im:C@RRQJmcmd        #  3!.+3!73#7!2%!26&#!BT(`bs%';u[REjۊQjj kп&,   ;  )  732676&/.76$32#6&#"!"&;Bs[ʉ!%7h=qd*{HTlt7;A©-+{kz<7=2  `     373!#!#7!3I-{D.D{-Ij`j        #7!# 6#7!#  H88BBjkkkkS    h  w   #7!###7!ެ jzkkjkk       !###7!#3#7!#jz!a?lBjkk9\kk z     	3!73	#7!##7!#	3!73+(ˠPNjjskkkk?jj     e     373#7!#	#7!#3iÌ+ mjkk\kk,j      #7!#!!735+{CbL(z@HZH  3   !!!!a/jj    B   #Dʠm    !   	!7!!7 /:jNj     	#	#}-     m   !5  mPP   od   #4udx    D=E  !  %#"'&54776323!326714#"װY>D:?~&]P5wTx39aCj,@    W  (  #7!>32 #"&'#3267654'&#"qiI{^>1{"  6+2%jmd_fKU_dO?[<deO\=pʿ    VUD #  #"'&547 32#454'&#"3267HoM2Ue[4k4:-5w3?kEN 1/0x:@iR`?t|}     (  (  	#7#"'&5476 32#77654'&#"326Ҹ J{^?14{#k# 5+2d_gJU6_d)jiN?[<eeN]=q   W`D  %  327673 '&5476 3 7654#"$,";t9f(hdoN1Rkpㆺ9A&"^>n#?QY>kDM4ceB|  V$ #  #654'&#"!!#72767#73767632a"Ogj)#ܳi35ư#nnC>.'qkb8<kZ[   H9D   1  #"&'733276?#"'&'&77676&#"326?.iQ,`t}]]&IuY8ElÓ61%'s}&&h`\Zŏd_wKh=Ha"Q=>*Si  b  l   3#7!>323!654'&#"chHl?'ox!z"sjVlne=fCUjjgE=!H   g  )    >32"'&543!#7!C	P/.	O^hq.D" /B! jk   9[  '  >32#"'&54#7!#"&'733267vQ/.
M0/%f H|8+_"R[nq.D" /B! Wkq!!>!-{  T  e   	3!##7!#7!'ޫOi+jhjkk   T  <   %3!#7!!ijjj     	D /  >323!654'&#"#654'&#"##7!>32aLn>%o"o{#s#o{#sh$Gd|Xuwh>eBSjN8>$EK6>#Dijp{    D   3#7!>323!654'&#"h$Hl@&ox"y#sklne=fCUjjgE=#H     VzD  !  %267654'& "'&5476   ,5,5oM1UoL1FhQ`?uhPa@uckEN2jEN     XVD  (  3267654'&#"'#7!>32 #"&'# 6+3i I{]>1{"tHiO?[<deO\=pʵkd_fKU_d  VD  $  %#"'&'&776763!"32676[ETToY8E=61~%^d0/wKh=HajQ=>*S    8D   #654'&#"##7!>3284jK"sh$Kz-`)4'iok    D /  3327654&/.547>32#654&#" 'Gj$D}S-jeu A5%l3 K1-,qAVIgF*-/G21mWX   p;q   #733!!32673#"'&547@@ZFHS$5 kJk]O. &U_G+P3A     '   33!7#"'&547#7!3267߸$Hk@'n_x!z"'Cjjoe<gCU9kgD="H    M  o'   !##7!677#7!ysM9zmxkdkd    s  '   %6767!###7!3nlfam_xp5Fllm>     f'   3##7!33!}}}4kb7j  9'   #"&'73327#7!67#7c[/_0(^Ay'~yE;*"kc7 k  A[ '  273327#.#"#7&'&/&#"763/li<)
""1^DOFli<""1^DOXV
	9yXV	9y      $  #"&76&+73267>;#"3t>+2U==2+>Dg8~~H8EititݓhXឈ"X     #     H" $  3267>7.76&+732;#"+]Ff8||I8EF?+2U>>2+?W"Whtitݔ     '   #"/&'&#"5>32326d]`
_\Yd^`
a\'XTB	9IMWQB:J    } 
    >32#"73[97?]791{1\pMN78N5  L  "  %#&76 73#6&'>7τ*)T~Aݜ5d5.094d4ZI5jZa\*,+
.'{il        #6&#"!!!73!73#736$32i	^` 9dp,tD%s9(UF_ekjRk'    h \ # .  7'#"&''7.5467'7>324&#"26^+))-`8wE@}=_))*,_8xEBzQrp^<zBEv9^,*))^>z@Fw9^,*(ppr    ]   $  373!7!7'!7!#7!##7!#!!!!3Hl7)ȧ^mHjoiAikk\kkizTij       ##
 
     =  A  >76&#6&#"#"&'732676'&'.7>7.7>32MG
DBMqI'\XXd`zE0ZH)\\kh
asH7N.S5&`9KHSaSamc_~,/~[PQbTqzc^1~O   7!    2#"'&7676!2#"'&76760	
'(32
	*)/	
'(23
	*)!#"03!!!!30"##"03!!!!30"#     , D  #"&54632#.#"3267   $&546%"3267>54&'.`PWTriwyxvaq0llll^]__]^⃄^]]^\^=%'mf_cnnn^^]僂^^__^]⃅]^^  Gt  5 9  7#"'&54767676327337654'&#"327676!!e"<@BI!^3-
!jk( 5"~~!<aCD
A[EEFM,+C:^.6wv;TvXvV =$)RS3)@&0LL|h     #    77~|t|#ssRssR   ^   !#!^  Jjs   !!i  s      $ < N  32654&+3#'.+3!53#5!2"3267>54&'.$  $&546}SSTR}*;tL#>1\TSS`׃^]__]^⃄^]]^\^0llllLKJL3(DF/DDCpmS[j^^]僂^^__^]⃅]^^gnnn   pb   !!V  u= 
   "3264&'2#"&546 LhgMLhjJ@v+..fiMLfgk1.-rB         !!#!5!!!1Ϡ1yy     #7>32!73!7%>76&#"FHEJ&NebNTNl "hzlKMzBUcL    *  >32#"&'732676&+732676&#"#N;}ctbƣH>!E	S\^wSe5aqCLRdFlcHdwdrzJMXR]_JJJCH@A  !f   3#Zbuf  [V'   33!7#"&'##7!3267%IZ9W [^y"y#'Ahjo$$+fkfD>"H    ;8   !####.76$vk3k$%1k/Nݸ  BL   >32#"&\97?]79>8MN78ML  u     !#"&'732676&'h4)	p*V,%L#9L	!@p1QY5-X<    ^V 
  737%33_{	fTzj^T  )x 
    26&#""&7> !!j=MihM[#"^EP-8Lװbh    g P#    	7%7ldk#^R^sXXs^R^sXX  ^'	d& {  5   ^& {  '5   t	d '	d& u  5    Ap} 
 !   #"&7>32#"&76$?332673\87?]79sU#$2{@u~q-`0pNN87NP/.ֶ3+ʜ{   b  _k& $  sub  _k& $  q,ub  _k& $  tub  _^& $  rub  _\& $  pu ;  7m 
  '   6&#"32!73.7>23!73!3H?@hF@?"UA3gO=~YWA?XZj%zSrrP#jjHj    K    #  !#73!3!73#7!#7!!73#7!!73d@ؤXG@{(Pa${`{$y({@MjHjj k    ju& &   zz     k& (  s4u  k& (  q4u  k& (  t4u  \& (  p4u  Jk& ,  su  k& ,  qu  k& ,  tu  \& ,  pu       %3  !#!!73#73#7!   !#yyܼiPxiRcEDjLlH}1je}kvt   :^& 1  ru jk& 2  su jk& 2  qu jk& 2  tu j^& 2  ru j\& 2  pu  D   		'	7	1s33r4rP13p4pq3   	  +  .#" 32 >'7 !"&''7&7 !270|@#.}<@B$CTAB"CCPBXVwQ`YYQJuRlSVVEiZUSG k& 8  su k& 8  qu k& 8  tu \& 8  pu e  k& <  qu       !2676&#!73#7!#!2#!3}p*9&%+j kkj QV 6  4&#"#72676$32#"&'7332676&/.76$Gw#ܳii"՘&AOTUH-mZfo9gK\@K/2QbuP_^4O-7`r%#eiyhTtJ6BRz    D=d& D   C9    DZf& D   v9    D=f& D  9    Dq7& D  9    D=!& D   j9    D=& D  9     E)D  0 >  654#"$"'!"#"'&547763263 32767332674#"pㆺ9=jY>D:";t9f(h~&]PxB|wTx39aa~q&"^>n#?QY>A5 VuUD& F   z    W`d& H   C^    Wf& H   v^    W`f& H  ^    W`!& H   j^      6d&    CH     if&    vH     "f&   H     A!&    jH    6  -  .#"32676& #"76 32.''%.'7%U+P(,(p)o*1/.S#I34'?2[#rO_		pاy/"5k7N:QV^DN     7& Q  W    Vzd& R   Ch    Vf& R   vh    Vzf& R  h    V7& R  h    Vz!& R   jh      y     4632#"&4632#"!!M87NN79LM87NN798MN78MLpNN87NH  	  +  .#"3267>'7 #"&''7.76 327eJ,cJ,01^8?.1U^6?o99Hv1g=;Ly3Jv56?Ms232? d& X   CH    f& X   vH    f& X  H    !& X   jH   9f& \   vD     +V  (  3267654'&#"#7!>32 #"&'# 6+35iI{^>1{#sHiO?[<deO\=pjmd_fKU_d  9!& \   jD   b  _1' q ; $   D=& q#  D    b  _i' ! $   D=-&& D    bw_';   $   Dw=E'    D   jk& &  q~u Vf& F   v^    jk'tu &   VUf&h  F     j^'xu &   VU!&h  F     jk& &  u~u Vf& F  ^     k& '  u0u (& G  o       (R  0  #7#"'&5476 32!7!7#7!37654'&#"326 J{^?14{#@Ff+ 5+25d_gJU6_dJjujjiN?[<eeN]=q    2' q< (   W`& q^ H      m'wu (   WiH&^  H      ^'x4u (   W`!&^  H    w'   (   Ww`D&u  H      k& (  u~u Wf& H  ^    rk'tu *   H9f&\  J     rm& *  w|u H9H& J      r^'xu *   H9!&\  J     r6'k  *   H9'  J    k'tu +   b  lk't3u K       '  !7!73#737#7!#!7#7!#3#3!73!3&&G&&G&}}fjzkkkkz?jj~j  b  l %  3#737#7!!!>323!654'&#"ch+<AHl?'ox!z"szvjzlne=fCUjjgE=!H  ^'ru ,   m  77'       2' q< ,   n  ' q       m'wu ,     @H'5      wp& ,& >   ;wO& L&     J^& ,  xu    '   %3!#7!_hjjk  V' -4   ,   g9' MH   L  Vk'tu -  9f'    S]'Z  .   TSe'  N      $   !##7!#7!	3!=ie+(ޫkkkj     m'qw /   T   l'qLv O  S'  /   TS<'U  O    'on /   T  'o= O    ' yC  /   T  ^' y } O        #73'%#7!#%!73^4Fd_4Rv0{Hjq\kk\       %3!'7#7!7),}fx+jj`VjbV:l'qv 1     6& vB Q    6:'  1   SD'  Q  :u& 1  u   f& Q  ^    O  (' Q  ~   `Vo (  326764'&  3!73#7!6!2#"'732w{+6z0{':[60ܑ.p@5mkkkW{D   9D ,  654'&#"##7!>32#"&'733276?"y#sh%HlB& H}8+_"R[77hgE=#Hklne;gCV!!>!-><    j2' q< 2   Vz& qh  R     jm'wu 2   VzH&h  R     jLk'yu 2   V-f'    R    w    !  %#  !!   )#7!!73#7!!73<=#3ED@{(Ra$y`y$y({j jb_   VD   =  %26& 654#"$327673 '&'#"'&5476  6763 XiXjpㆺ9?";t9f(hdooM1UoF82B|y&"^>n#?QY>kEN2ce    l'qJv 5     c6& vB U    S'h  5   S8D'  U    k& 5  u$u   Vf& U  4    ; l'qJv 6   c6& vB V     ; k'tu 6   f&  V     ;u & 6   z    uD& V   zb   ; k& 6  uu 0f& V      `u& z  7     Mu;q' zL   W   `  k& 7  uu pM& W  o  a     373!7!!#!#7!!!3xPgI-{D.D{-IgPxje}`}j   .:q   #737#733!!!!32673#"&A-@@Z-ZA%FHS$iOkkJkkLU_    ^'ru 8   7&H  X     2' q< 8   & qx  X     m'wu 8   H&H  X     m&  ] g & X  Q   k'yu 8   f&r  X     g'  8   w''   X     r& :  tP| s  f'f   Z   e  r& <  t|9f&3  \     e  \& <  pu  l'qJv =  c6& vB ]      ^& =  xuA&/ ]      k& =  uuAf& ]      V$   #654'&#"#72767#737>32a"Ogj#ܳi35ư#ܳC>.'qb8<k  W  0  #7!!!>32 #"&'##733267654'&#"qh+<=I{^>1{"  6+2%jzd_fKU_dzO?[<deO\=pʿ u  c  ( 2  "#6763!2)73327676'&+!2676'&#!UY$Cuvb#ba$__NO +N^YWC_+! CCjY[XL$]\OOabj??+> ON   |     +  327676'&#"#7!67632#"'&'!73#7m&75^_++32\^%4ihI^\{ļb{JK" edqqppeed/0/0dj@j    '    %!2676&#!	3 )73#}+!!{|nK+NjVvjv        32676&#">32 #"&'!73#7m&l++e%I{ļb{" Ʊʿmd__dj~       6$32 !"$'332 #"kaNZ6#DzBq8@@OHdapU@AXSIHS     `^ 6  #"&'&'&776!267632#6'&#"#&'&#"32767UjNZ#DIz^e]VrH?>7*_)!R[n-q]_@@[Z{{Olkdap\ (W:<!`--zYYPO   Q. 1  #"'&7763267632#6'&#"#6'&#"3267Hoo12e_//-`F|H>?7*_("R[86-k::cbZ55w3? H5!`--==@@st4tt|}       u      "#6763!  )7; 76!#UY$CawED˺#yܺjY[Xg	tjlH    3   	   %!"3#3! &7676!3!#^յba!!N+y|cS({@jNMkk jސvL   S  +  76'&#"3276!#3!7#"'& 32!#%56^^++23^\ J\]{^^b4{KI#hiieeppqqdejjd0/60/d   ^D & 2  %#"'&'?27676'&#"'&7632" 76&.=oo6eej'p??OS
?bonboobLcbX45(cbXj18DCY.-14B_ KCuu8uttu       )3!!#3!!#!#3>@{(y${`{$aR({@LqLk     k ! *  "#6763  #"'&'&'&?!'&!3276ղ|{OkE=D#SRvvuNZ#6^\m#9^\OPklVpb2122apG1ܜ     2  #654& ;#" 673 '&547>7&'&5476$ 3ps5H2_ 
1H:vY
"D0!bv&!W4Hj3,a>X9ioT/5 [AX"& V   "'7332767#7!#7!!73#7!c-r&w>?)A{)>b%{a{%=hVDKM9k=c7  $ +  #654'&#"!!#"&'733267#737>32a"Ogj)׽#ܳC>(a"Ogj#ܳC>.'qk1.'qk    h^ 0  "#7'&#  327!7!! '&76!267632#6'&};-qLjBg7NeKlDEY'IK}o*_hv6PDnpkӚ_bTM9<Bۓ	  D    	#7!##7!# ! 76 !276vˠP34<A0-$8/kkkk-Yrl    c 4  3#7!6763227676'&'73#"'&76'&#"chH\]l=?)?>\}p%)*mp@A=>_UefjYL!4%!"z"tjVl77egxkgf.;@o`bJC#$eVGH       J   ;#"'&7#7!# [4a&ɾG_<=c6ekk      I   %3!73#73#7!#3#}xiGijjje}kk}      !  632#6'&'"	3!3!73#7!#|C>D3+_)<WW=AuGnj`-&<3jjj kk    U  d !  	#7!	3!#67632#6'&#"v+'ޫO tsM:>7*_)%N[76kkjh_^!\1-=;   ;   73#7!3#3!iFZjpj&jj     V '  &'&#"#76763273!733!73''%z5<!#^'533/o45+wq7yZ,G\D.-|bVskk"kkcV    3  %#"'&7#7!#32767#7!#32767#7!#3!7#"&Ln?>)æ Eo|RS"Eo|RS"$Gd|uwggjj+]^jj$]^jjijp{   Va   733267#7!#7!###"'&-r&"Xw{+y90EGc019kf/kky]    VD   3#7!676323!6'&#"h%H\]l~)¤&""yUU#skl77kIH^]  j   '  "&'&76$3  '276!'&#"NZ6FuE=D#SRvB#0U\s*R\CdapjpbcVpb21k$ܜ  e': 2  SyD'   R    + 7  "&'&76$32676323!736&#"'2 #" ΘNZ6Fu̊A@MGܛ0+AwX5D#RSv;@AA@dapjpbcT(kkږ0pb21kQJKQ    VD  %  676323!6&#" #" 3226& .EH ɰ?[A	occUYjYk	kr{328  u  Y  #  !2#!3!73"#676!27676&#!mm&%kUY$Cpv]^}qrjj Y[XI'#PQ   3V  3  327676'&#"67632#6'&#"67632#"'&'#%66^_*+32w stCC>8+_(%O[86+H_\{ļa{JJ#sHiedqqppT\]!]0-><b10/0d  ! ,  #7!#!23!.+3!73!26764'&#!˾\*lbG
<CS)`b3'
':jkkhKz.4,[REjۋPjjr2|/G   j. 2  %# &7676?>76'&#"#67632327673P{*iiԔFFfg/q=h%!jkDCPOnm&sH3ٟ_^=7<zk{@AGF>+ҾaaA;7::lGFRQ  ED 1  %#"'&7676?67676'&#"#7>32327673VjgcbPP5543tuj-kTJJ8888|SQj;,,WVoFG/-*)(CR))tg*,fBB,-1++FY/.;;w      9[ 	 0  "!276'&6?3327673#"'&7&"# 76!2d7'"+d-%,[R43_+DDFHOa12+wT5k{_H>~=_@@VmQ>.,`"]s]=    d9q '  #733!!32673#"&'733276?#"&7@@Z&FHRE H}8+_DR[763>h!kJk]LU_!!`Z><W        !#7!3!73"#676D{-IVX$Eu{jjY[dL$     ` +  !!327673#"'&7#73767632#6'&#"Z%FH)*\T45!usM:>7*_)!R[77'k]L*+_CCGFk_^!`--=;    V   #"&7!#!#7!327673]PLNGܛ1I-{E.E{-I* yX65r"5`NK10c  j') 8  A''   X   r (    766'7!!#"&'&'&76 7!7 i.6hh6.Bn.SUuQ[ !.kg骩[hkkd[``[gTk       %  !'&7#7!#766'&'7313>b&ɾGԴ60A>lHU*SUtpAekk}B/	rSٗd[0'    e     %3!73#7!#	632#6'&#"iÌ+ ꗈCC?7*_!"R~Ajjjkk\k!`--Hl    9O= %  #"&'73326?#7!#62#6'&#"Jo/`/(^-<7O7hy](r+_!#RX|[D;=\kk%.`--        #7!7!!#!!!!735N+{CG_L(z@H}ZH}  @[ 1  7!&'&/&#"7632733!327'&'&#"#7&1]EMqoFli<y
&1]EMqoFli<kj	
9yFEXVij	
9yFEXVz | #  #7!#!!"'&'3327676'&'_+{Ci8NOM%.uikc?pmk"&GHTfZ}Cyx}|9Ddcfe  / #  "32673# '&7676?7!#7!no&"EE)p?yuuutu.%}}PiC{+TefŬcd9|}xy}`f  06' #  "32673# '&7676?7!#7!no&"EF)p?yuuutt-%}}Pf9j$efŬcd9|}xyVݸQf   6|' "  0#7!#!! 73! 5476$76'_$j9f1"%U_$#f#V'g	eښ      { $  #>323#!73!767!7!676&#"Op4vh&qEZ+>o$uD=cG+$T|q
9<t}EJ#mSK}z     B    !"&'332676&#!#7!#7!32x&)ud8p"z=A{)cUH23"tk  6t' $  !"'&'3327676'&#!#7!#7!;NN)-tjkc?plk"&GHh4iQyx}|9Ddcfeia  w?q %  33##"'&'73327676'&+#73@!pCP-+tsH?>7*_#!R[76%&[t3qjM^]]"`,.><<>j  SV{    6!2##7! 6&#"oX;iO[x:Kfkp     K     	#ޢ"+  K  &          !7!3!!!!#!7! s]]s (s ]] sS Ѣ     K      %#7#圜9c   k& '  ?j  
f& '  @j   (	`f& G  @  V& /   -P  9& /   MP   T9& O   M  V
& 1   -   9	[& 1   M    9& Q   M'  b  _k& $  uu D?f& D       k& ,  uu   ^f&   <   jk& 2  uu Vf& R  c    k& 8  uu f& X  J    3& 8     & X   c Z'   8   >& X   c X'   8   <& X   c Z& 8     >& X   c iVD  b  _3& $  	   DX& D   Rb  _3& $      DE& D   <K  1' q;    E)' q       sP &  6&#  326?!7!7!7!3##   !2ZA@qhD%9(DEYD88kkkMM_b;<    9D  * 2  4#" 32673##"&'7#7!6?#"&5 3232767mP
4ZiQ,	/IuJs}],Fwœ	%#kmFx&&k"&ZVmhf h`[+B rk'u~u *   H9f&}  J      ]k& .  ufu T  e'uv N   jg& 2    VgzD& R     jg2&   qH< Vgz&   qh   k'uuy  6|f& T    9f'f      ' =j   '  
' ]j   '   (	`' ]   G   rl'qv *   H9f'   J   	! +  7!3!73#7!#!#7!#3276#7!# '&}GddG8HH\`7Bf[BkkR~jj kkkkqqqvUl+ V     6&#"76!23!73#7!N[+x ^g]L'$jjk:k'su 1     d'   Q  ;  8k   0  '!6&#"3233!73!3!73&'&76767"}$_G?@hF@?<)A3(ٓ=\`KWeW~YWA?XO2QrP?&jjHjjw%=SrQ?   D}k   % 3 ?  %3!7#"'&'&77676"326763"&67676&#"326 DTUoY8D<j51~&]6. @,,_VezG@AhFA@jjjd0/wKh=HaޖQ=>*S(P栠PG?XW@AWX K  l'qv    E)k'    l'qnv  f'     b  _k'zu $   C<f'   D b  _m'vu $   C<H'   D   k'zu (   V_f'   H   m'vu (   V_H'   H   fk'zsu ,     d&    m'vu ,   b  &   ik'zu 2  Uyf'   R  im'vSu 2  UyH'   R   k'zu 5     7f'   U   m'vu 5     7H'   U  k'zbu 8   f'   X   m'vu 8   H'   X   ;4 & 6     4D& V      `4& 7     p4;q& W     R "  $  76,'&7%676.#@VnD~*58``=se<qoMqIsEGyRql{Ig8
gg   O> %  #6$76$7>'&?67>&#"t:k5b1yyw#dd'3O~i`(yXiC+C	?Q٦!d+gP9X>PdV0g^m     k'uu +   a  k'uv K   `Vo   6!23!7364'&  3!73#7!:[66z0{W{'kk5mkkk    Dj 	  9   76!"76&#"3262; !"'&'#767#" 32#7!T]'"%l++e	1+T5	+d\{Ľa5{#kf3k{_H>i]=G=_@@B6
/76_d)j  	_  !  676#7 ! 6%&7" 6%7%-D'</M	N.d#5a++:"):itaȓs멝bB*       % 6%6'7 %&7676<)1<!e{&+9ObO5G,I/F4ҩ`;ہi4ml      #7!#!!3'6767+{Cb)Al>)HZHZPE^=O  ph'   37!#!!3'6767C#j8f)Al>-Vf#VZPE]EYb  _^'xu $   C<!'   D u'%   (   Vu_D'   H  j3& 2  n   V& R    j3& 2  u   V& R   ~ j^'xru 2   Vz & R  h   j3& 2  Y   Vz& R   k e  2' q < <  9& q<  \      %~     %376'632!"'#767'&7#7!2p|.']r'M.i^m|iG UeOj   %PD  0  %3766&#"##7!>32632!"'#767'&7t2p&Dy#sh%Hl)#.&]r(M.^m|@Ñkln֐WG UeO     %q  &  %376632!"'#767'&7#733!2o)S.']r'N.S@@Z^m|XiG UeOkJk  9F'   #7!#"&'733267yf H|8+_DR[okq!!`Z{  9   7  76&#"326732676&#"7#" 32#7!>32 #"&'D%k++e&l++f% J{Ľb4{#kiI{ļb{" iʿd_76_d)jmd__d   VnD  , 9  6&#"32673>32 #"&';#!#" 3232676&#"%l++e%r I{Ļa{"_tJ{Ľa5{#{%l++fHHd__dkPd_76_di   bT    "  #73733!73!3!'7#;!dCNBԥ=*?6!BdHN1j=.hGjjHj99V:   $ .  '%&'&7 !27#4'32673#"&/7&'&#"  A+#CIzckB;q*ZOkNh^@(9EO[\ *GJ;daqY    *  '7&7 327#6'32673#"'7&'&#"	?L*2Ue_74?q2k5w3Honb:-^?ɐ 1{?n9-t|}|N@v      #73#73#7!#!!!73 xiGiPt0{Hje}kk}   :    )73'!#!7#73!>XZ@I-{D?B[1{냿sUjE`9GR y_J  @9D ?  32673#"'&/&'&'7332676&/.7>32#6&#"#"'T*O+E^'5f=7Q+0jv|O|aT[-jrutJj74!];D(<sC	wv]YFV1-,f,*gtRRCQ*-/o     9m'    3#7!#!3232673#"'&/&C$j9f0A(+E^(4g=f7R"Vf#VIa;D(<s^  1      "#7>3!2#0#3!7332676&#V+3`*EH&%&0kʕ|k&,`" jj       D   27676'&#"#7>;2#2_^>>U,3`*EH1mm%&i3gQPQP&,`" rqpM   b   ,  #73#73#7!2!32676&+!2676&#!!! 4ȭ$ +ׂ+!!3Nj}|kä^~} }   T    !7!#7!# 6#7!#  hH88BB}kkkkS  b  _   D  " &  !#7#373#7#!73!'7!73#7!	#%!s^(@{(${`{$O({@9^(8G=xaD Oo Oj kpz     W` $ + 4 <  327673#"''7&'&5476 32654'67&#"6dY+~ŧ3Gt9f(h<4/Z2E1N1R0*pDV@"	V '9zV7c=#?QY>_e&DkDM48C{]+y&"]?	    V   733267#73#7!#3##"&-rEXw{+jqjȄ0Gca}kk}Z"9&}] !      V  >  %2>?6.#"27!#32673#"&?#"'&6$sl|T;k[oZ<"21@1,({*AwXkr.PGܛ0$Ot^uuD,(N[ՅԨ[CtwffD2ttkږac""/IH'[_    9D  /  "32676#"'&'&7767632673#"&761~&^ETToY8E=>[Rf_+?H ޖQ=>*Sd0/wJi>GaqyZ`#        )  !26&#!3!&'&+3!73#73#7!2';u^C)))/0bssq%!,{.-REjۋ((jjLkIkп     :  8D   #6&#"!!##73#7!>3284j
>K[] #ZZKh$Lz-a)ON^aj0jiok     '       373!7!'#7!#!7#7!#!!3!iT+Tmyjzkkkkzkj+  9' & ,  3##"&'73327#73#7!!67#7!676*7@O[/_0(^AIyd.yq(!jE;*"jRkCkeS    D  !  632#"'#7!4#"132766ְ݆Y?E:D~&]P6wTx2:j@ V>C*    :C $ 2  7676'&'&/#767&'&767676'&9=/kDn]^10IA=9qdf4
#2w6so\.+37u$oU8$B<%oi4;^2Kyuz8Q{eq{
	    X $ 5  67632#"'&'#767632#6'&#"327676'&#"H_\{ļb{JK" - tsM:>7*_"!R[77&75^_++32\^%b10/0d]^!`--=;*edqqppee    .D   6$32#"'&'33276'&#"Hoo12e_`[4k;9cbZ64w3課0@@sttt|}     j%gD  .  %766! !"'#767&'&77632#6'&#"g1	۴	2*^r(o21e`_\5k9;bc,\m}G UeO
	 0@@st    b9f ' 8  327673#"'&?#"'& 32#7!76'&#"3276 [R42_+DEDHPO -I]]{_]a4{KJ"lf%66^_+*32]]h<>--`!]^&d0/60/d)jieeppqqde    9 # 4  67632#6'&#"#7#"'& 3276'&#"3276< tsM:>7*_"!R[77 K[]{]^b4{KH-%56^_++32^\4]^!`--=;Kf./60/ieeppqqde     OWD  !  7632#"'&'33276?%!6&#"b<11fe
AAygf*@m[[ XX}?@nmj_^     iVD  !  !76'&#"#67632 #"'&73267j*;<y[Y7Nop11dd754'nm?@}XX̕_^  VWD - 9  #"'&7 #"'&7&'&#"#67632%332327676<W2_rMD1cN<<y[X8No0r69R05URNN0]Qk̕vp>,m?>XX!%=;>+eU^_\;  42 0  67632#6&#"!3#"32673#"'&76767&'&oo6eej+l~^!%]\YV+Gtl-qpkPljxR}O/Y*DCYZi><tO2Rjf$OON6#C     	2 2  "#767632'"'&'73327676'&+73 76M^QQl+vkk6UUs=Us<XPeh`-iTItg?>A\]%!-.YCDC#6NOP$f55R2Ot<>i    2 D  "'767632%3327#&'&7'"'&'73327676'&+73 76M^QQl+vkk6UOr69Rj5<5%:WsLD =Ur=XOfib-l
tg?>B\]%!-.YC?u=;>-N&\Q#6NOP$fjR2Ot<>i  fD  #  %2676&+732676&# !2# rlx&&[nqZZ}mf{ywFm`ijcjb_m320`gNM    9'   #7!3##"&'733267#73yf`n H|8+_DR[onkjȤ!!`Z{8j    9  :  !"3267#"&'73326?#"76 3!767632#6'&#"I'*e%C,iQ,`t}&I{ļ0+5X stH>?8+_""R[85Htp|}&&h`ďd_76]^!`--=<    H9w'  '  !##"&'73326?#"76 !"3267,iQ,`t}&I{ļ0+5J'*e%'k[&&h`ďd_76!t   f^D   6&#"326?#7!#"7 32tZjb~41}L`ʯ12Uo[4Ռ4)jxF@3 1/0  8'  !  #"'&76	#7! 3 327676"l?("ܣ.**?.%@N@gAkpSk
6"6/"9    jA  %  62#76"'&'&#767632760i	0D}[c1*f`vm'rRBs9K0jlXlBNlhQ  V'   %#"&7#7!3267#7!3!5Hk)o_y%Cz#^Xjo9kkj   c  k (  676323!6'&#"#67632#6'&#"HZ]l*ox&!"z"s tsM:>7*_"!RX:6jl77jjGH]^!`--=9  9b 7  67632#"'&'73327676'&#"#67632#6'&#"H[\l* tsH?>8+_#!R[77&!"z#s tsM:>8+_#!R[76jl77^]!`--><GH]^!`--=;      <&}  |        '   #7!3"'&wh [PL_]k8<=c^Y   '   %3!73#7!#_jjjRkg  '   %  %3!'&#"#67632#7!32673#"'h*  `AA[oi+@`AA[jj('LJI;jPKJI  4  I    %3!$7672#7!3#'6[%+W0wiH<jj8dj ccri   k9   #7!327673#"'&7i [R42_+DEDHPO j<>--`!]^	     6j *  #7!3!#7!!!"'&'3327676'&_񊁮i`b1NXM%-tjkc?plk"&GGffjjVx}|9Ddcfe   ' *  %#"&7#7!3267#7!3267#7!3!7#"&3Ln{(o^ Fo{#^XFo{#^X%Hd|uw:jqjjjBijp{    V' *  %#"&7#7!3267#7!3267#7!3!#"&3Ln|)o^ Fo|"^XFo{"^XxHd|uw:jqjjjkgjp{  9D ;  #"'&'73327676&#"#6'&#"##7!>3267632g stCC?8+_DR[86 Eo{RS#s##o{SR#sh%Hd|GGL^^n>>)Kh^]!`Z><]]CD]]ijp>=qu;<hgw    9D *  #"'&'7332767#7!67632#6'&#"` tsH?>8+_#!R[77ΰh%H][l*x&""yUU#Ch^]!`--><$kl77\jIH^]     9D )  6'&#"##7!>32327673#"'&7&""yUU#sh%HlB?* [R42_+?JDHNO jIH^]klnec<>--`]^   g'   #73#7!#7!##3]z0jRkkk'Z-j   fkD     %2767!!6'& "'&76 cS,-56U!05cYoobonbFuccujuujᙚ   f  s'  &  &7! 7676)#7!!73#7!!73}'(SP-0{01_.a @V_E_Qauppo	R	M|{`    XD  &  32676#" 326?   #"&'#"7 'G\_&//&^_\'c@;(v~
*v̷(;($(3SS1G    `V     #"76 3#7!2 %"!2676&#NN21TEh[brXjK-,js32bn0c8    '   33267#7!3!7#"'&4j?K"_$K`_z-1/
ONjBio65       332767#7!3!7#"'&K4j
>K^Z#$K`_z-1/
ON^[jVio65     9' &  !7#"&'332767#7!32673#"'&70%N]`z-`43j
?KZZ#_>\Re^+DDEHNKq45
ON^]jq|Z`!]Y   gXaD   #6&#"##7!67632a4j?K"Ÿh%L__z-01)ONfio56    9eD +  #6&#"327673#"'&?#7!67632d4j?K[["BG [R42_+DEDHPO ]]h%L__z-01)ON^^<>--`!]^hio56      =   !#67632#6'&#"I stCC?8+_""R[86ޤ^]!`--><    =   6'&#"#767632#7 [R42_+?JDHNO ނ<>--`]^"     X'  %  3!.+3!73#7!2%32676&+/TeDEzL`?lyTkIjRb:|jjSjf~.eQPb     '  $  #!73#7!#3267!#32676&#wcƛLzE\C2KoFkzSl~fjSjj|:bRjI:KbPQe     !9D :  332676&/.7>32#6&#"#"/32673#"&7qjv|O|bT[-jrut%&~64g]?[Rf_+DH 3wv]YFV1-,f,*gtRRC()*-.HFod{Z`!!   9^ '  #"'&'733276767632#6'&#"3sH>>8+_""RY9K"sH?=8+_"!R[7K#ht]!`-->Pnr]"`,.>Qmi 9+ .  3##"&'733267#73+7;7>32#6&#"Kn H}8+_DR[onK#ܳC='aDOg55~jȤ!!`Z{8jkKN8;   9X> %  6'&#"#767632327673#"'&m%+[R34_+DEEHNj9&- YR34_+DDFHOihGnQ=--`!^|nP>--`!]}   9 	 0  2767&# %# 76!23767632#6'&#"#76Y:C
%Mx#(+sH?=8+_!"R[7K&j(d>H_{k~G=]s]"`,.>QmV@@_     'D   %3##!7!6&#"#>32P@@Z%FH)*$54!kkJkL+*_FG  hVaq   #733!!327673#"'&79@@Z%FH*)$44 kJkЇL+*_FG     ,'  (  !3#3!7#"'&?#73#7!!#!3276?X`F$H[\k@@*K_`KA!&"!zUS'jjj87edMjkHH^\  `' %  !#"&'.7>7!7! 7676&'7!R|^Ujk;C0$&pq#Im@lICGFDKn@kk.pp.k  u' "  3#&'&7#7!7676'&'p@A=?^UeekVM"vh \|p%)*m@o`cIC#$^S]k8<<kgf.  M  o'   33!7!76yrM9zmx'DkFdl     s  '   7!7377337!#unkfalwpM>5lls Dm>         # 7632#654'&#"3!7!i [/_0(^Ay'~yP#;*"}kcu      \'   !73#7!##7!#39<'YR>j1ooXooj   9N'   37!#!!327673#"'&?C$j9f) [R24_+DEEHQP!Vf#V҃;>--`!]\h    BS'    %276#"!7!#!!2!#h?0C$j9fA..'%lcyVf#VEȾ 6|' #  #7!#!!"'&'3327676'&'_$j9f1NOM%-uikc?plk"&GHf#Vyx}|9Ddcfe  ?6|' $ ,   76676'&+7!#!#77&"2#(	.K>&GH_$j9f1NOM%-q1o6V{fef#Vyx}K56{_     O     37332676&#"#7>32#3OtZ&%mZn#_)hV'(r|jz¾ydb))j      6   )73"&76$32#6&#";3|r)(VX)_onZ%&\Ztj{))bdyz*        !#2#"&'7332676&+#}|r)(VX)_onZ%&\Ztj))bdyz     9   >32#6&#"32673#"&7 H}8+_DR[m>[Rf_+DH !!`ZyzZ`!!     k   -  67632"'&2 #" "&'&76$3  	('0.		O^<@@@@NZ6FuE=D#u.""""./B!!QJKQkdapjpbcVobc     -'   '   #!73#7327654&+327654&+0aHxjBSYhuK`[v'ȉL9 jSj[,8T2Q8Iv=`     2D  #  % !";#"!"'&7>7.7>3 ZZqnx&&^,mY[|fFm_bjcji`mMNg`   9O +  6&#"326?#7!#"7 327>32#6&#"tZjb~41}L`ʯ12Uxf H|7*^CR\n]Ռ4)jxF@3 1!!`Zx       P'   3!73!3!73#7!#!#7!PP>>jjfjjSjj=jj 9'}   ~    T'   	#7!733!3!7xٙ'"O.jjckk    '   #73#7!#!7340jHjSjj    _V % 4  3!#"'& 3267632#6'&#"6&#"32767sKZ]{]^a4{KJ#; suH>>8+_!#R[76%l++32]]%kPf./60/d4]^!`--=;qqde    O   #  373#7332676&#"#7>32#3#3O<<tZ&%mZn#_)hV'(r+<j4j8z¾ydb))jj     6 #  )73#737"&76$32#6&#";3#3<+r)(VX)_onZ%&\Zt<<j4j))bdyzj  (  = H  76&#"326273327#.#"#7#"'&5476 32#7!63&'&/&#"D%k++eli<*
""0_DOFli J{^?14{#kfrxO
""1^DxiXV
	9yXd_gJU6_d)j~	9     b6 6 C  #7!3!7#" 32#7!!!"'&'3327676'&%76&#"326_񍁰!I{Ľa5{#kf`e1NON&-uikc?plk"&GG%l++effjd_76_d)jVyx}|9Ddcfe8i  HB   8 <  %276#"%76'&#"3276!3!2!#7!7#"'& 32#7!!?2%56^_*+32]]Od?..'%%!I]]{_^a5{JJ#kf|lcyieeppqqdeVDȾd0/60/d)j8   m  0q 6  #733!!3!2676&/.7>32#6&#"#!"&7@@Z-Fc|O|bT[-jqut%'}64o!kJk]%6YFV1-,f,*gtRRC(*)-.HFop     9 @  #"'&'7332767!32673#"&7#733!6767632#6'&#"sH>>8+_""RY9K%FHS$h AAGsH?=8+_"!RY9K#hs]!`-->PnC]LU_kJs]"]/.>Qmi   pyq  9  %76#"#733!!327&77632#6'&#"6! !"'!"&7y2@@Z%FW-2cZ5k9;bc,-'|ki!]m{kJk]LS 0/@@stiYY    9 @  #737>32#6&#"!>32#"&'73327676&#"#!#72767I#ܳC='aDOgj%HlB?* H}8+_DR[76&Dy#s)"ݳi36kKNqlneb!!`Z><Ñb8<     U  L *  %!2676&/.7>32#6&#"#!#7!!|O}aT[-jqut%'}64Eij9YFV1-,f,*gtRRC(*)-.HFoj   Tc ! ,  3#7!633273327#.#"#&'&/&#"UirxOFli<)
""1^DOFli<
""1^DxjXV
	9yXQ	9    /   )  #73####7!##73####7!#N_I_L[\I*kEN_I_L[\I*kE5/<<C<<k/<<C<<k         #!##!# Dj8;hEgDj8;hE5!^!^  X -  	3#"&7376'&#"#767632#3267#7yH]\l~) [Rf_+I?EHQP -g%"!z#^'jel77<=Z`#^]HGj  9x B  76'&#"#767632#3267#7!3327673#"'&?37#"&7] [R33_+DDEHOP -g%"!z#^V- [R42_+DEDHPO H]\l~)'<=--`!^]HGjY<>--`!]^h=l77    F   #73676323#6'&#"FmK,89Cm()>eDKP34A,;=99w;Zm((44c  @ )  676323#6'&#"#>32#6'&#",79Cm()>eDKP34Arj-&'";36$ =99w;Zm((44c\h		z6#K     "   >32#"'#73#"'&'7332767
2"
 lGGj,''#;38"!4&&4<s\45	
{6"#H     [   #6'&#"##73>32B/T87@rhm.tL<-45b;j?<  2   7332767#733#7#"&
B/T875hm.tL<-45b;;j?<    *  7#"'&'7332767#73327673#"'&7_09:L B/T77593;+*+-j21jA-45c;sJ!#6{		44]    (  #!73#7!#3276?3#327>'&#K<=`TdT
].c+)P3.B&%B#$=N()***7*!$x   I6   6767#73###733TEDa@=ZcaD]QKGQQp<<dTC=/     #"&'73327#736767#7>n9<<)oaLfPMK!		q	V<8<   otf   otDf&  t    G   #>7GZf#@?[    V 	  >?3Zf#VUF@?xy[  
  0.703]vO!$FP[?  :   672676&#672@jG@sA?,__=>X@?X=>POPP   B   "'&6763"3sA?,__s@iF@PPOP>=X?@X>  . !  327676'&#"#7676323!7WOL:#":6 !?,-,/o56J=KEq""mj""6z		44}5+;;   '.   73&'&767632#6'&#";3'qEI-6JIo/)(%>6;E+;LOr;d+5}44		z6DjmDi;  23   %%vDF     2   7-7'     |f   3##ܨttfg    |of   #33$tt|g   \f   3##ttf    "f   33Ettx     3bbpb q  !f v  od C    H@   3bb  &T q^      1x    )3!#=(=l     lx   !#=x  #   #    \RzJ   733##7#7$$   ]y   !7y$$ )H   327673 &`--;;`&ނHO#$$#O  I73!    2"'&767`	
'(f
	*!#"03!!!!30"  	    "&67626'&#"3276,,__@P#$@A43$#A@45g栠OPP?,,+,@A+,,,   Fw     !33267#"&7>^o		88<!%E qk	Q{/.8		YQ1i    n87 "  '&'&#"#6763232673#"'&.*  `AA[&.+@`AA[&Z7('LJI!7PKJI  f    3#3#rPtfx t?   %3327#&'&7Nr68Si6;7":XrMCc=;>-N(	\Q     `  !  '"'&767#73653327676oQD'g`XS(OX,$9$=aM<Օ˵S k  Ln   3##73qs;,;  b  1  73327676&/.767632#6'&#"#"'&EOZP0/
4^RTBON{7::<E
'&LKW	TZ\$#UTC><BB2'0J9R/.: !..&('>U01      #'#73733#'RN'ROޙX< ;    '.   73&'&767632#6'&#";3'qEI-6JIo/)(%>6;E+;LOr;d+5}44		z6DjmDi; A  X   !!7!AGЈ    X   !!7!3A<4       X   3#!7xxAhh      X   3#!7f<A4    Q  X   %3!7*  /E        >?3%>?3Zf#mZf#F@?[P@?[  ($   QE    9B3   ve-Y  {d C    f v    gf    7    bo q            &)H    7!    7! j     Y   2#767676'&#"7676
*BMv" 2)IX/co 18X(Op6'<"  9]     f    1f     m   3JJ~   m'   "     Ff    ###rtfxx&)'      )gH   #6'&"#> `--;;`&")O#$$#O   '& 	  #6767vT\IH*pPgIJ6 C   2'67&'&7676E	D^0>'7#,LS#&8F'  (   2&'&?676-/-)1@P)	 2'F8&#SL,#7  X f   3# uf  Xe Cj   cve vU   LG%   73#7#7 \ "   =G%   33##  ۥ   }t   !#!\@t"J   A   732676&'#"&j/.F
qQ1]M^WC8:$C q|<  :_   "'&6763"3as@@,`^s@iG@:OPPP{X@?X    6   733!7  "   %   ##7#7  ۔  G%   733##7#7       %   !!!"۔  {9W    '#"&'733276?- H|8+_DR[76-褻!!`Z><  9S    %332673#"&7- [Rf_+DH <>Z`!! Ix3b A  x5b j<A   (    6&#"3267"&7>2[,'(?*('Acc&65'(56&Z}}ZY||   74gd 	  >=37LF::ud*pPgIJ6 u   z     Fw        pd   3JJ~    Pf   #!#7q-JVJ-y CZb   #"3327673327673#"'&?W,`7	J%`7	I&`CS#N		J  dbB  d@  CWbL   Ed   #6'&"#> `--;;`&"EO#$$#O  K^e&.  :f qXp     m B        ]      eQ ' 9  '&'&#"#676763232767673#"'&'&#"#676763

gf;P$` >AmkTi

gf;P$` >Jd_`i
gf;P$` >AmkT)	9>(&;=3)B	9>(&;F*)F	9>(&;=3)   :   7!jj :   7!	jj  '   'Z??^??    I *   'AB9EG    I@e   2#72676&#s@@,`^s@iG@OPPP{X@?X Kl   73!3-JJ-y ?Ig    !!66k&jb& C"b   632#6'&#"#6'&#"#32?W,`7	J%`7	I&`CS#N		J    S<U   '77''^}^T^}^Uwuhtthuuhtth n   .7>77>76'&'\KW/MV0PQX$ +0PQX$      '      C   17!     +GC^   #"'$#"7>323276C|Wc+2X)c!^agE@LeebF@Lr   ?7^    #&'& #676y$d$H^H|[wwPH  "     '#    !     373!#!#!3mʄ.mjV3j   W  '   ##3!73##cKҢKc'jjB~  otf   3pt  oV H   %#ϡH  t   33!73##7!t\yyRjxjjJ/kk     '   3#7!33!^yCjCj W 	  ?3?K*65g(Ղ]    =-D?   VUD' yER F   =-D' y R?  ;y   V -   !f   3#Zbuf7'   j  b  _f&   
   BL y     f'\          qf'V          f'V        =f&        f'          cf&"0      -'H  2  b  _ $    c %        #73#7!#7!3 A{)>j kj         )3_!iy     (     =     +    j   +  #3!73#72 #" "&'&76$3  P${a{%%{a{$<@@@@NZ6FuE=D#ubQJKQkdapjpbcVobc    J ,    ] .   b  _   %3!7333!7i\"jyjjkjj   [ 0  : 1          %73!3!#!##3!73#7;{@N@{D{@@{${`{$${`{$L]Lc    j 2        #3!73!3!73#7k jjjj k    Y 3        	!73!	!#7!]{@5)@{(I. `   7   e   <    r   ' 0 9   3!737&'&'.>7676?#7!#67676'&'F1qiQL_wVaF1uFtGm?tXųq-/hRs/-fN/OF!
ajja
!FOOHdkkdHZvmVcVmvZ z   ;      F /  ;#"3!73$'&6+732#7!#676L97f[!<744Zm6<%[f99/K5GOp"#kwijj	i~3k_Bkk|C_     3 '  %!73!767  !3!&7676$  Pu;$-6D6-{$;uN*u"Q[A)ƤӶF7SF-W`֗g[`_\g  \'pu   e  \'pu   V>f& e *     4!f&   .     Vf& L 0      -if' H  2   &W >      V>C , <  #"#&'&547676327673327#"'&'&'"32?=/kBj]>0IA<9qef4#6hoUY<6rn\-3xoU8#gKUC<%oi4;^Ν8y9>8Q&zeeN]=r     V9  -  732676'&+7327676'&	7632!"'E)JK_2fT4]M&"Q~R[IVURQQ8R;Z]kH=EOq08tdTS(ml^\    T'   %'&7#7! 76'&'73O@EjfT[D -pf
6<lVgtk1cCk;F;T5aK     7r # ,  &'&7676326'&"32 #"7626& ?oo6eej'p??OS
?bbbKXiXj08DCY.-14B_ K3CX8    42 3  6'&";#"3267#"'&76767'&767632'p??OPJK0\deIIotg(qpnMywp;Joo6eeY.-12DX34i@AmT?@jf$OPM'O*DC     eU   3$#7276#$'&66%!#J.5n:}ioo8'޶i4{rZLl堐    VD   !##7!>32#6&#"qh%HlB@*׹&Dy#klnebÑ   fj+     '&#"!32762 #" 7$(ocF?6$)oc>ččn@AkK+J     -k'   #7!7'&˃hC4vN"k#JyuzP     "'   ##7!#	3!733!73#7Q';'kckkjjjjTi     V    &'&#"#7676323!733!73z5<!#^'533/o45wq7yZ\D.-|#kk"kk  [V'   #7!3267#7!3!7#"&'[^y%Dy#^X%IZ9W [VfkkAhjo$$+      '   %6767676'&'73##7!a^S&Eph;.)[yht0tFld\Fa;1mTfJ=,g\,k  FU )   3$#7276# '&76767&76%!#!k6":}i\c%.*0]i4?-@k>moHrZLlwVez& VzD R     `'   #73#7!#3!73!3!jRkkjjRj  VtD    32676'&#"#676763  #"&'j%l+,4>f]긹1owIb a{"HihzoeOzr#._d  U|D    %$#7276#$'&7 32#6&#"i:}inp21Ve[5ku,.67HrZLl 1/0qr    h'    %2676'&'" !! #"76,(3-\b*,jV851bFlmuk3|    -'   7'&7!#!C2vN i4f"KyuzPk  y' "  3#&'&7#7!767'&'Ip%)-=?^UeekVM"vh \|p%40X'Oso`cIC#$^S]k8<<k;f/     oVi, ) 7  #&'&'&'&76767367676767676'&#"R6?;4,\QpkW05$! R,DqA)-$CM\F@EL%+WLL327V!E@l<sO;/f8oiv<l@KmdllqqK   9=D 5  !73&'&#"#767632#7!#327673#"'&'-
$<"#^'533/<>C#D.
$<"#^'533/<>C#jjcD.1xkkAAcD.1xaO    VV' 1  #"'&'&'&76'&'737376767673#R]P<>:+-de'*%#*~_K%-VKe9>9,#;T\F^[V$KFf<lp%;g[վk<ksd^;$qi<fFK$   G#' :  %"'&'&'&767673767673767'&'73#&]P;?5,[RplV05%"*D9aFF9"E^L%50Xp%)-%BM\F^]$K@l<sO;/f8k<gphpg<k8f/;Os<l@K$   -E!' jL  2   y!& jH >     Vf& o 8     yf&  >     G#f' W  B       373#7!##7!#	7%3GnA1lZYc'vj kk5kk3{KKYj     fO+   $  767676'#" 3 2767#"6$/K4+5%"čnJ̦ 6ޓoc<d"hKl`p$    hw+  )  ##"'&#7!3276"'&#'&#"v}Hesy^k83ocF|:K_OK8>(K;&K[@Vk̶?Jg*	ptL\       #6'&3!73'&#7 AqkٜYUTdI|e	&ue6jjk{Rs    f'K          \&K  pu  FV   #  %676'&'#$'&76%3'NbY5*N^oc[[^oc񥱴NbY6)K\ut^y-e^t8u\   G'   <  !##&'"'&'&'&76767#)767673767'&"+-%BM\F^]Z]P;?5.Y/#4805%"*D9aFF9"E^L%5'k;<l@K$$K@l<x?%@5k<gphpg<k8;   '9$D T  "#"'&'&7 '&76?76'&#"#767632676767 327673#"&'733276<>?;*fBS3)*j-$<!#^'533/<>B9%Oj'X))
=l	-$<"#^*=[l`H|8+_DRKGi./z~+45ˆFspTS'D.1xz
#BJ[5"5ghZS'Ds`U!!`Z>Z  VD  $  %2 #" #&'&'&76$3  ;@AA@>NN^TvNZ6GuE=D"u`NQJKQfn
#2apjpbcVob2"  VD    %26& #&'&  5YjYkOO[ocUcF8]m{2|     U  #   '&'&7 !2#4&#" %$#7276pUZ5#CIzCq@>XSX|i2,gp\@AĵrZLl    |U $  &3$#7276#$'&77637673#ځv_1-66:|ioo18Ĝ3\k&A[t^qrrZLlz2]I        #73#7!#7!!#7!3 @{(>ay<{$}j k˻~j    P' %  67632#6&#"!!#"&'733276$x3qB+b<IP9J#8?$y2oC+b:HP9UbdVRE@jbdVRFg     3     )	##7!	332ShE	y3j	       	#!3:qkq|Oi    >U #  	#6'#&'&#6$3 #7276k';ځq{ƃJqC zHÐ7%@oB o`[YXA@뗲72k   4VD     #&'&'#&%7 #66~ΚpPzQ^hPV Tf4!|nXv D E  67 327673#"'&'&7 '&76?76'&#"#767632676'(X))
=k	-$<""^(524/<>?;*m;S4)+j	-$<""^(524/<>B9%OJ[5"5ghZS'D./z~0/5ˆFspTS'D.1xz
#    .RuD # 2  62#4'&#'&7676763  #"&'32676'&#"ԏY*_/V^0ueP!x1owIb b{"3)F'&l+-5>g]<,7)L-^Jjzr#._d_:dihzoe  VUD F  9[ M    j   !  !  6'& "&'&76$3  8 @<SI\~C<NZ6FuE=D#uQ}dapjpbcVobc WTD    <D +  % !7!6'&'&#676"'&'&'&'3"_$ۂUY)k4fcjrkl.8%=,WN9FiN>AB/:2cAK        +V    j &     [   #73#7!	!#3!73#3 |kj kAk jj+=j    VB'   	33!##׸nj"'AhV;  VD  '  !!#7#73676763  #"&'32676'&#"	ee1owIb a{"Q%l+,4>f]kppkzr#._dihzoe    />   j& &   y " /' y| ">    k&  s4u  \&  p`u  (E .  6'&3!73!#!#7!6%$#"&'733267#DhrlfC-{D?D{-T+~X%U0GB.rFXw{*ϴ5Q[Vokk`l&+rI""ca  k&~  q@u  r   ! '& !2#.#" !!3 `؞I"BqB//OXz= ;  6    J ,    \&q  puV -    $ /  )73!#"&'73267#7!#3 3267654&+
T8x^'C!r;";dxW 
qPj""Pm2kky-5,]    K  (  %326&+)73!3!73#7!#!#7!#3 N@T}}GddGdxWmOjKPj~jj kkkkb      %  #7!6%$3!736'&3!73!#D{-T+~X%EE#DfrlfC-{Dl&+rkkd5O[Vokk`     \k&  qu  k&  su ;D&  z 9   74#!73#7!#!#7!#3!"ZGGe,6qjjjjjj      $$      !  %!267654'&#!!#7!3 )73#}+!-DA{)Sc|n7+Nj7.]4NVd%'j     c %        %3!73#7!#7!}A{)jjj k   	 $  3!74#!"#326767#7!#38y	 aY1d,6jSbv!43<SZ!eqM\m2kk U    (     	( +  !##7!#	3!733!73'3!73	#7!##G{__æ{kykkjjjjxjjkky   1    '&'33267654'&+73267654'& #$ŉfQ9
( tX;f 
3H_2	):%p3x[ kLk-3kRi92X3+b>Zj+%P0E~Z        #73#7!#7#7!#3!733 G!Gg!j kkekk jjj     &  r   \   !##7!#	3!733!73#G{_kykkjjjj      %!#"&'7326#7!#3!7B8x^'C!r;q?;j""PA2kk jj  [ 0     +   j 2        #3!73!3!73#7k jjjj k    Y 3   j &   `   7    ;D   %#"&'7332?#7!##7!#B)D!rI8T>`Pq""dK}Tkk2kkb.  o  ; ! , 7  !#32 +3!737#".5 6;7#326654&+";F'zJWd45kSqjjq?=&&?S]H{I=y   z   ;   9   74#!73#7!#!#7!#3YGGSqk jjjj T       W !  #3!73! '&547#7!#3!#7WgpVJBJ.B&}k jjcLx#(kk% Q/Bk   	A   %!#7!#3!73#7!#!#7!#}1GG1G{jj kk jjjj 	`   74#!73#7!#!#7!#!#7!#3YG1G1GSqk jjjjjj T        	   %!2>54&#!#3 )73!#t	,qMbC7Up({@j.]kDm18LjL     &   ,         %!267654'&#!)73#7!#3 }	!.CUpGbYj7j7.]4NLj kkDm1     /    !"#$3 !"$'3!2 !7!6IqBUIpE#N,A0X֕\hF"z_    	 ) 9  %3!73#7!#!67676763  #"'&'&'&7!276'&#"~Gig":RuE=D#SSuuvNZ@@\\@@\\jjj kkwcpb12Vob2122apzJK    
 %  !"3&'&5476$3!#3!73!3!73q
&;W>
#Es!I2|0G] _Dn,3k jjLjj  D=E D    dJ & 2  4?67676$>7367632 #"'&73 65# d
cj>Q)djafO.MijoM2jM+ZY@H"Y<%E95dNnMOjDN͒k{jQ3h    WLD   %  4$3 #"&732654&#""$654WeL\]т\`Vvk/ǸP+lOƣifmD@Wߌ   E '  7476?654&#"'>763232?!"&Ut=^17)u2|+cɸ-3͙֐rG6,H/`=Q}=]oBo.&90?    W  /  327654'.#"476  654'&#"'63 #"'&)dA7C,1Uo0Oɀg=z?mD~oM\uKHIY!Nh+EN2bS_ROkk̿rk  W`D H    	D C  3324&#"#>323336 32#4&#"3273#"&547### #"&'FobN{CkR5՛ȣRR:YY/obN{CkR5՛ȣdd4YY$~`U.~*Y/~`Ҁ~HT	T/    5D )  332654&+732654&"#6$3 #"'ejЈ\0nԯ$@ujʳ3lEujqn=[n[!X_SرX    ' X   '    D -  3#7!26?62#4#"27#"'&/&/h]mg"wG'F5+s6Y/X j038an:Xk#_#MH.5aH9E,br*@  '   "'732676!33!"TF4eW7hBT<~G }zYICjWuA     '   "'73276#7!!3!#?SF45-E5Ty$J,H`}=^j%Cj5Ru      '   7!!33!!#^RRddjYCj   VzD R     D Q   XVD S   VUD F     	D P  9' \    9V  * 5  4 2#7!7632 "/##"62?'&" 264&"9BS&5]irQ9iB&5eeQ9iR0P6 ?AR0P6~FS-2FiF2F2FF2 ǰ(FF(VP(FUF   f' [    V%' 2  7!2673326735>54654'#"'#"'&47_x!#s;<6!n2IdNSiׯB'nkg"HN

3<G8`Vp^pRFT^AX;e<X9    l'   7!326733!#"&547^Cho@[L7j&^MCjP_  ' '  7!267326733!7#"&'# 47^#"s#"s%|ojqNv$EPjKt$CPBi{qBS:    V' @  7!26732673326735>54654'#"'#"&'# 47^##s##s;<6!n2IdNSi|ojqMw$EPjNq$CP

3<G8`Vp^pRFT^AX;{qCR:  PE , :  "'7>32327673632#"&54??#"&2654&#"*#K?Ib@iK5Xbd~o
!Ơ648#AInoM$&-^A{Omm.2Ŷj!h=A.:/o0twIl$     '  # )  7!632#"&5472767654&"33hY~p!¡|4APMIݛθk4mb06Ŷf ~(/oNI%10txHl%'Cj     '  #  7!632#"&5472767654&"hY~p!¡|4APMIݛk4mb06Ŷf ~(/oNI%10txHl%   0.D   6$32 '733 !7!65#"@oL={0j"_$	j$eFRXi@5u[     D  $  7!36    '&547##3 65# i]6CoL1-fSZ+ZZi"jEN͐t%(1hQ3h     '  '  "'732?67.547>3!3!#";#"WTF/`#2qcƛ`kTnXFmFl<Q}?[q`!wCj̣4Xh2C   W`d' C      W`!& j^       N9O $  73#7!!!6!2'6 764'&#"#NKh_FP0*)"=kjkwIhl~[wUp%U   Kf&   v*     WTD   47  #654# !! 73#"'&W6U4kQ$d=iG}GP)_{iVD͙i    D V   g  ) L     A!   9[ M    '  3   26764&#" "'732676!3632#"&547"AInoTF4eV7hBY~o
!ƠzT<~G ]o%atvFl}x[I4ml.2ŶjpWuA     '  )   26764&#"7!!3632#"&54?!#A	Jon^RRY~o
!ǡ'd]o)\uxHljY4mm-3Ŷk  N  k   73#7!!!6323!64&"#NLh`G۰e9B2"=kjkڢUjSgi    f&   v:    d' C     9'    P''c k    v   $ 0  !#!#7654+3 )73#"#!7#!267654'&#G8oZ6Yj7Upͷd+o8	!.CkgrCm19Lj!gv7.]4N   E  0   26764&"7!73 632 &547654" #$AIݚoh7!ʳ+~p#shi]o%atwIlk-#mb06öf [O     .  ! '&547!3!73#7!#!76!2#.#" !!! IبxrGodNI"BqB/~OXѕELjj kk,ցzfVT=     D (  %273#"'&547###7!36 32#654# !!<e=iH
aiY;?٦4kQ$F͙j8>i5_{iWE      (  	73>37!23!73&+3!73#"3	^9q!4"KZ||ZK<Zj\@`'HH`@jj>D~jjDj   Em' / 2  "&?32?>37!2327#"&/.+##"3z!_	A?*D| Z|.?A/Y!3GWddWGY7uYSHupQVVpuHSra{99{ar     
J  , 2  	7!23!73&+3!73#"3!73#7!#67!Z^q!3"KZ}}ZK<0Gd}Z'HH`@jj>D~jjDjj kk\~     '  . 6  	!7!2327#"'&/.+##"#!#7!32?67!Y Z|.?A/Y!3$%WddWGYTqi\##1VQVVpuHS9;_{99{%iC<=,     $  3!73!#7!3#7!#3632#6&#"77㦕PdGM?[I+_D5T!jj{klkk&gQ:     "Vz   !#7!3#7!3632#6&#"##hyci`2IP!_::;SSkD?jW:()_1PV j%    VD     %#"'&54  %32765 7c@A9BLD_:_|fJS2JNjSCh    O   7!#632#6&#"# L?[I+_D5R#jkkz&gQ:j     h  D   7!#632#64'&"#he2IO!_uǇkk%ğ(	*+*1P    Ok'zKu   h  f'      #  ,  '  7!7#7!#!!3 )73!267654'&#!@G@6Y]C
$	!
-C{gkkg{\y/3j⛪7.^4N   G  *  %26764&#"73#7!3#632#"&547CAInoLi`D~p!¡|/o%atxHl%jijmb06Ŷf         #73#7!3!3 9{Qj k%`j     X 	  3#7!3!>;iS·i1TT         #73#73#7!#7!!!3 ygA{)dyjp{k{j    E 0  77654&#"'6767632'32?!"&547673s=^17ON*v]Ip3J |+cɸ-3͙#,Qpl,I/`=Q>>=]eO4?prBo.&90?^r E ,  3!73#7!#7!6%$#"&'7332676'&C@{(>T+~X%U0GB.rFXw{*T#Dhrlfjj kp&+rI""ca5Q[V   9\' (  3!73#7!#7!!2#"'733276?6&#E4iBg9>(8vso+_CRU>6,&CjjTiem_]B`Z>5Ï    	( /  74#!733!73'3!73	#7!##7!##7!#	3Y^^æ|G|S}jjjxjjkkykkykkU   V	D S  3324&#"#>323336 32#4&#"32735>54654'#"&547### #"&'FobN{CkR5՛ȣRR:YY/obN{CkR#9IdNaȣdd5YY$~`U.~*Y/~`ҀR?W^pRFT^AX;HTU/  u&   z,    5uD&   z    {   #73#7!##7!#	3#74#!733G|SjX^j kkykkU}jj    VD ;  7!26?62#4#"275>54654#"#"'&/&/#h]hg"wG'F$,+$X/X$IdK?,5`n:Xk#[#MH$'%1eHVlRFTMZJE'gx*@   \ #  !#3##7!#	3!733!73#737#GF_k}ykkjjjj}    6  3#737#7!!!26?632#4#"27#"'&/&/i+<yiPRg"wG&G#-+#X/X j034an:Xzvjz[#MH$'%1eH9E'gx*@    S   !##7!#	3!733!73!#i{_({kykkjjjj  QZD 0  !26?632#4#"27#"'&/&/##Q4%]hPRg"wG'F$,+$X/X j035`n:X #[#MH$'%1eH9E'gx*@      )73!3!73#7!#!#7!#3#4||GddGSjj~jj kkkkT>  VC' +  3#7!!3326735>54654'#"54?!^RR;<6!n2IdNSi,djY

3<G8`Vp^pRFT^AX;6>   	X   #73#7!#!#7!#7!3!73!3 GddA{)||j kkkjj~j      '   7!!!#7!3!!#^RR8j 6ddjYߦj  E 2  6%$#"&'7332676'&3!73!3!73#7!#T+~X%U0GB.rFXw{*T#DhrlfDʌ&+rI""ca5Q[Vojjjj kk   9' .  3!73!3!73#7!#!2#"'733276?6&#4DGg9>(8vso+_CRU>6,&CjjBjjTiiem_]B`Z>5Ï   ju&   zL   VuUD&   zd     `   373!#!#7!3#6#I-{D.D{-ITjdj`T>     VD E  3#7!63263 326735>54654'#"547654'&"#654'&"h$p
a;<6!n2IdNSiG""s#"si{qCR

3<G8`Vp^pRFT^AX;6>nM<;$EH=:#D    e   <    yV'   7! #7!#y"]]kbkE#  e     7!#	#7!#!!3!73!7!7e+ 6996jkk\kk,{jj&{x   yV'   7! #7!!!#!7!7y"77kbkEG{{G z   !733!73	#7!##7!#	3#6#,'ˠPNTjdjjjskkkk@T>  V' (  3#7!3326735>54654'#"&/}}4<6!n2IdNSIXV1ykbU<G8`Vp^pRFT^AX;o\X     `   373!#!#7!!#7!#3#4#r-{D'D{-=Sjdj`jj T>  HVk' 8  7!#7#2673326735>5464'#"'#"'&547#H22i`!#s;<6!n2IdNSiׯB'k)gA@"HN

3<G8`VpRFTOPX*;e<TSX)   T   !73! &7#7!#3!#7!#3#6#k%=?=||ESjdj#9kkǘrkkT>  V' 3  7!32673326735>5464'#"54?#"&547^Chp@<;6!n2IdNSi#L7j*_M

3<G8`VpRFTOPX*;6>P_ S     #73#7!#! 3!736&#!3ae9)&BB}k jjkkWpk  b  l K    J ,    	(m'wu   	H'     E] 1  67$#"&'7332676'&3!73#7!##7!#/6+~X%U0GB.rFXw{*T#DhrlfCGnh+rI""ca5Q[Vojj kk5kk  9' .  3!73#7!##7!#32#"'733276?6&#B;Q39>(8vso+_CRU>6,&C4jjTikckkem_]B`Z>5Ï  E %  %0!3!73#7!#!#7!##"&'73326v|GddG4GB.rFXzu%~jj kkkk""ca 9Q' %  !3!73#7!#!#7!##"'733276yQ>>vso+_CR[89hlfjjSjj=jjۣ_]B`Z>>  T   )"#3! &7#7!#3!#7!#3OdbjSk%=?=||E"9kkǘrkk   Q' !  )"#3!"'&7#7!#3!#7!#3d,+hLCT1"B%	?KW6%MTjjs-#jj       !#3!73#jjj@   i' !{   D=-&&      \'pu{   D=!& j9     K      E)D     m'w4u   WiH&^      kQ   iVD   k\'pu   iV!& jZ       	(\'pu   	!' jN     \&  pu 5!&   j   |y  6|'T    2&   q< &   q\     \&  pu !&   jR    j\'pu   Vz!& jh      j_   fkD7   j\'pu%   fk!& jh &     /\&  pu 0.!&   j3    ;D2&   q <9&   qD    ;D\&  pu9!&   jD    ;Dk&  yu9f&  D      W\&  pu   l!&   j-       74#!73#7!#7!3Y@{(S}j kT  VE 8  7476?654&#"'>763232?5>54654'#"&Zt=^17)u2|+cʷ-34IdN
Ǚ֐rK2,I/`=Q}=]oBo.&90?8W^pRFT^SM:m   \&  pu !&   j    R    59D &  0#6!";#"3273#"&7>7.7!29(ly0\{g27˫f[PfjZYyqX    V (  #"&'73267#7!##"&'7332678w^'C!r;qJL<;0GC.rEXw{*Z""P62kk""ca)     9' &  "'732676!3#"&'733267"TF4eW7hB H}7*_"R[oSYY<B }zYIq!!>!-{,+iA 	 /  #"&'73267#7!##7!#	3!733!73	8w^'C!r;qJL<;N+(Z""P62kkkk?jjjjs}   f'    "'732676!333!##"TF4eW7hB}}4x}7T<B }zYIb7jXWiA  {O 4   VD T      :   s  ' Z     :  67>.'#7!#;!"&'#".7#7!#327.6?* HAFwHI3>TQH*N`v}.H&h?CAj+C`C^!OLC`kk`>5$k,+Bʈnkkt1FgZU4     .  76.#"!2.#!3!73>23!7D{XYnJYElT?/9>+<~{.aumvak98jb7
$w$
kkZЍHHЈXkk    ] # 0  >3232.+3!73!".6&#"3!q8nv|-SnElT?/9>r<<n~),FzVc> φ?CҏU
$w$
kk5Bwqk3  )   )  3!737>232.+3!73!"hau`}}.WvElT?/9>z<M&mkklɆBBɈA
$w$
kk    < )  7!#".7#7!#!2.#!!26?a}}.H?ElS?.9>+ZMd&hkklʅBBʈnkk
$w$
1vÊ     e 9  32>76.#"3!>32!2.#!n(~ͮY"YX:tmaK0cJvIvҖGY~IElT?.9>i?F?ruij57Uv_kݨtH!EՏlƮqM
$w$
F   J #  2.#!!2.#!73#7!#ElS?.9>}ElT?.9>~H?'
$w$

$w$
kkk    %  76&# !2.#!73>23!7&MElT?.9>}}.auYv
$w$
knɆBBɈkk     > N   "3!73>$32332.+#".>;76."2>?ҹdM(ElS?.9>,+pS8j[I->Tfpt8(i6eU@"4UlcP<+8jbkkZЍHC~p
$w$
lyt82LgfL2gak(RV++RzP   9 # 3  #7!#32.+#".>3!"32>7sH?nElS?.9>rP~vn46ncVnN.F|VXlKVjkk
$w$
c҉CB͆Az*ch..do     #  76&#"3!73#7!#>323!7&)aHQ&[bf1v}.
auTǼkkkkb-BɈ6kk      373#7!#!2.#GElT?.9>j kk
$w$
      ,  !#32>7#7!#".7!3!73#7!?]YDzYXnJYHS~{.PHjk7ak98jbkkUЍHHЈkkkk   ( 9  " .7>7#33>32.2>76.#/rj37;Tj=C+OU+3?CR^©esIB
n술LLL:W9[A"2-w'גz66{ǑrȔWk        $  3 7#7!#3!73#".7#7!YDzYbM	a`P&Zbf1v{.SHj7ak9/kkkk-HЈkk  @x_   #7.>,%3_s|FD9k`_'gcL9t!Yqh    d C S  %.'#"&7>32>76.#"3!467>32%"3267.<5Hvc9_H8|=As]BW^Mdc	XvAQf@U~Z'H/%-?$PZbM.[*>Dm];hM-*8!:bvr84ik5k-R&j]<@ae\C1j#)1/1=   C$ *  3!737>232.'!736.#"au`~{-DElT?+5;$D{XYmJYkklЍHHЈ
$w#
kxbj89ka     . ( 6  &3!"&>7.+732>3!2>'
;O 
90	<d]V-v+E;4Ka9e!
]W)2!Hi?.7	k3Z}S+'$k-H4Na7$XxF   *  !2.+".7#7!#32>7#ElT?.9>H~{.HDzYXnJ
$w$
ЍHHЈZkkak98jbx  H H  !#32>76.#!#3!2>76."#>2#".K=B7dMPb#^M"fo>oZ?IuaAo쿀7FhI2cWE(WkCkDdB!'P|UZY,m:SAeEE`;;`EY\..\YDjL0
	#7I[m@ir<9Tm   T51 *  #7!#".7#".'73!#32>7a`~{-DElT?.9>DzYXnJ|kklЍHHЈK
$w#
kbj89ka     6  .+732%&32>7>7#7!#".7>7HSY*5lcW!9)t _Yc+QnPxӓC|  z԰>4ik5kVOh^>H⚃u        3!73>23!736&M}}.&vtkknɆBBɈkk      /  >76."3!67>32#77RYcQnPxӓC{0k,;@=qy?4ik5kVOh^>H⚃slK     9 '  3!737>$ 3!736.'3!73Tau`H:Lgau`nxKmkkXЍHHЈkkxWhAkk
AiW    V 4 M  3267>76.7>76!2.#!676._'p9UckeY@ 
gyטGV|O'ElS?.9>i?gt>8ZppgH7jFIC450=M/9[EjˡhAړg­uP
$w$
F;Q{M14@nWK(v5vf*    .  "3!73>232.+3!736.YnJ~{.SDElT?/9>H<D{8jbkkZЍHHЈU
$w$
kkxak9     % #7!#".7#7!#bMH}}.H&TkkʅBBʈnkkt  E( 1  32.#!73#".?#7!#32>7#7!T@ElT?.9>3I&Zcf1v{-a`DyYVlLdHj
$w$
kx-HЈ"kk@ak95e]kk    9\ >  !#32>76./.7>32#6.'& .9=>7dKYtK
@sW][izaD"Ih:JfEI~ZpCkHfA)Hc95SC:;IcWTl>0^^DcA #B]98O?57=ɝ^uBF       "3!73>23!7376.YnJ~{.(.D{8jbkkZЍHHЈkkak9    U = P  !#32>76.#!"'>3.7>2#".6."32>U=F:iIX\1eJBA<t?/I0	p쿀7MlCLe.IzIubAH^>vbFkFeB+X[W}O&
$w.14BP.Y]0.\YDkN0?kYox?C,E`;=aEDc@Ae         !2.#!3!73#7!?ElT?.9>Hj
$w$
kkkk       F   * 4  !#3!737.>$?#  6.'>Fރ)r܁)*r (Pbfyu(QaeykX
Trl\sjjs\غXYЛj=
_	:gЙg:	
=j      # 6 E  >32#"&'!2.#!3!737#".'7;732676&#"ztn9lbA2ElT?.9>f%%#ElS?.9>'yI{U$# xs9;vyyv;43
$w$
kk
$w#
kMZ2     y4  !  %2 #" ".7>32E@@@@0 Vyn2" NQJKQkwnɬb6p㮥v   F % / 7  !##".>3!##"$.$6.'>#&;F>G+W~NBWk2 jC@ނ)ܻ @(Qaey?w ?k;]D+k=ih:kVrtȓSK9Лk<	
=jhKS B    8 
  >?386U?**+"Q_qB%Z    d   3#,wd I%   "#>32>73~NyV3Y+@R`l9MxT1^Ry*?K"+UNC1%<M(K^5   Nd   #udx    )  '>32#".7332>76.'&8kR@qP#
0G\6(E3Q%.#*>&MuWzz=@eG0R<!-C- #.$5%/c   =   3!=9$#k     ' *  %#"&7#7!3267#7!3267#7!3!7#"&5ݧ|)o^Dp|#^X#"p|#^X%Hd}:jqjjECjBijpz   VD   %!3!73#7!>32#6'&#"F@>h$Hm*G<%!"y#^kkjjkmm5II     VxD  *  %!3!73#".>327!#6&#"3267x>^J|cY0jb|# h\&k,+n&kkkkd_RΔR_dk  VxD "  %!3!736'&#"3!73#7!>32x>%!"y#_h$Hm*nkkjjIIjjRkmm     !326733!7#"&7#7!c'""z#2y%Hm~)Ϥ]`'kKHkmm'j     VpD  &  !73#".>327!#6&#"3267%X^J|cY0jb|# h	&k,+n&kkd_RΔR_dk      K   !!!73#7!K]a'kkk?j VD   73#7!>323!736'&#"!Ph$Hm*od%!"y#Vjkmmjj IIqk VC 2 A  #".7>;6.'&3!73#7!>322>7#"jR Boe
7eBZwRh$"^yY:wk[<N	-ET^ZL#LC3/kwy=*LlA=lQ/xY#*Z`pjjk1P91Qvh0I1#Xq,I     -  %  ".7>3!#7!!!#$ 67!"!ޤcmn.Kf`qQlU,Wҍ+,Oz{ʏNkk^zɐ   V   >323!736'&#"3!73#7!Hm~)od%!"y#Xfjmmjj IIpjjk    V' 	  !73#7!^kjj  V. /  3!7#"&?6'&#"3!73#7!>323267#7.$Hm~)-%!"y#XfHm~)-%!"y#_'DkmmIIpjjkVmmJHj     A)  1  #".7>7%!#2>76./#"J?YoJon&hdKI.7,:gjL
#D5EF}gMQyaC$OzrV%=)kT؋oq9:qnE|pc,9p     V   #"&7#7!3267#7!3!7cHm~)Ϥ]%!"y#_Xmm'jJHjjj     Z   #73#7!>323!736'&#"3ThHm~)oc'#!z#^j@jVmmjj GHj   <Y/ 1 D  3!7#".7>7&'.6?67326?>.'U%HmX_#OlM4~8.C 5:$,4KUY*K[OU>c=#.bO@vaFLkmm2fkd}oe13@O-l9"$
P,jB	NbN!HgtB5w    VD   !736'&#"3!73#7!>32\%!"y#_h$Hm*kjIIjjRkmm     V# ) ;  3!7#".767#73>32#6&#"2326?6.+U$HmX\%rT]HUH|8(_BRDy4ב>;^=#+hX&?VLkmm2fk$kjO!!UY?mWIbO!Hif2}  [/ 8  >32#6&#"3!7#"&7#7!32676.JKi|=H|8*_DR93'%Hm*n]x$M=#I
-:_D%!!aY&8#$<<@M`=kmm:jbN!v@dSE@@  8V@'   #7!+73267sfNqRz~ZmkVX-ks    d/ =  3267#7!3!7#"&7>7.47>32#6&#"	D;"B&Dy#^X%Hm*K(4AL"Ki{=H|8*_DR84(%/VE.`
&08ĐjDkmm C>3BTb0=bE&!!aY)?    gVD -  >763!!".7>76.}Y}yj+		Rz|T7O1#6#	TS,WyEH4T`		2`LUxmbU%8'j$1,`gpyRQpDE8   D   #73#7!>323!736'&#"3h%Hm~)oc'#!y#^jRkmmjj IIj    V[ *  3!!"&7>7.'.>?3{1'zEJrnH,#<5B$1-CMT)c$jK<]\
-&`ln-lH?NO
Q^  V-' ,  #"&'#"&7#7!3267#7!3267#7!3!7hcHd}ݧ|)o_Do|#_X #$n|#_Xjpzr:jqjjDCjjj   VlD * @  .7>763!!".7>76&6.>*W@kZ{`"	Qz|S
7O!#6#EiG/XzC5ZC("5>&FfB4^fyNOb<
8hIN{obU"8'j$1'U[a31dPvK	+BT`SJC 0z;6tz   D )  %!73>76.3!73#7!>76K.O@/3fR"_h%HmX`&=Ui9kkj/}@Bb6jjRkmh3igP<     '   3!7#"&7#7!3267#7%Hm~)o]x'""y#^'Dkmm:jKHj    V   	!!73#"&7#7!3267#7wRbHm~)o]x%!"y#kkmm:jJHj    D 5  %3!736.#"3!7#".7#7!3267#7!>32Dl$H8y#b%Hd>qLrX$H8|#^h%Hd>qLkkk+PpF 	jjp&\sJkjPpF jjp&\s    VD   73#7!>323!73>.#"3?h$Hm*od$M<#Vjkmmjj cN pj    M9{D # /  #"'73326?#".>327!6&#"3267ctӟ+`r~&J|cY0ib|# hP&lVn&[rz@Li_ďd_RΔR_dkF   ' 	  %!73#7!O^kkjSjD     V 7  #".7#7!3267#7!>323!736.#"3!7cHd>pMrX$H8|#]Hd>pMrl$H8y$jp&\sJkjPpF jVjp&\skk+PpF _jj  VD  (  !#7#73#7!>32#"&'326& ۱i J|bY0ib|#A&kVo湫kkgkd_RΕR_di   ezD    %2676&#"".7>32-,t-,tj!rtuj!qFcQ~ΓPQ~}ϔ   $V - 6 B  !##".7>3!#3!73.%6.'6$#";$*DǧjWb*6L\bc-K2v>=*7%ffUg5XB*.L5g"j[!IsQ6VB/k{	Nrl^jj9	]nha3Y2FRH5        %!7#"&7#7!3267#7!3%Hm~)Ϥ]'""z}%b\kkmm'jKHjj   y    >7632"'67632#"'/.89-.r`-.9-+57!1n(''&98'&&p&'$10$&  Rps   7'po|s5;6;     ' + 4  332#!73#7!3#67676'&'3#67676'&' d0̮' :d:ګݸYl?O:.ioTX>:t\Y-]_^8	,7wy6,8ADDA     2   " @  >54&+"#7#7!7>323!37654&#!73#7!#!23!4?6cM1$3,!6y99K-	&#CeC!!,%%5<fg61":M-(R*f&jMMF6K-e 7  M 0  %37654&#!73!"&5467#7!#3!#7!#323!Qq#	!J\af23EB
#NYe+!!j\\o5hh5!7,hhNI,1e   M (  2>7654.+73!3!73#7!#32!.!F@5;U7{{ 1>U4"}
+XO)7 jcnmGhh9U8K~     c   M  654.+";2>73#!".54?>?!#73!3#'7!j$N}Y3'U^r~Tyhu?KiCIN"wRC5DS^"NH7nfXA%gXHrO)N@n/MqI#KuW@wiLVzJmXC,
pf?f*?P_j8#     M   %3!3!73#7!#3! E|| eggKgge      (  >54&#!3!73!3!73#7!#!23!2+ೀ~E}~| |l/P: 8Y 6*eeiiJgg 9O/k      C  >54&#!;2>7#!".547%".546?#7!#3!#!24;NLV$:/%#ǭT:\@"&4!")|01_K-6C*B:6ZE":N-"7E$kgg^)9h6R7        + ;  >54&#!3!"$.54?>3!#!23!";Y.;].ew9_/@mO,A'<toF.6T 63$e]IRge7eC(JjB-jkEGe[         %3!".54?#7!#3!#3!|*=("}~18vve,;!gg**he     W  .  654&#!3%3!73!".547#7!#!2Y	yjf-J6KU	;8K-~99T7
+$b`O5':&ee,I]2>9ghh$C`;%O    3  8  >54.#!2>?#!"&547!!73#7!#!2@'9%(<()K<,
NoJ
Ò~|~&{<eI*		<. ;-+FY/Pe:y,.
MiIhg(G_7     9     W  ";2>7>74.+#!".5&67)%"&546?#7!#3!#!23!SmG(P%<+x4YE.	+-F0Ad\QZ1OI7HV|"K7J8S7u6YA!?1(AT,_/")[P$>^@)pWOKohh	 g$>/=%k     1  23!7654&#!!23!73654&#!3!73#7.K5	]"7/|y
R`E%;),k*!tA$ee`.(FKeef    {M   \  654.+";2>7##".'+".546?>;22>7!,Y\aFq]E
#N}ZvH~p[Di, ,E91EjZR-z̓S,Z`~ˏM
#Pl@%0A2#F;*=3|dp=5_[q/g6][4_^ј6XA.<#g~"E#[k=d~&O'T-)<)5D%!      W 8  #+".5467#"&54?#7!#3!#;2>7#7!ADomdW(RG	~}]\Q~DS3D-ԀMtL&9U;"VG%*YggR
8*h.8.1N9f        .  %3%"&547'"&54?#7!#;3!#7!#3!X]h	;TQ~B9J2?e[V[$->T#4gg33)3:3gge     =  654.#!+".5&67#7!#;267#7!#!23! ߙgIMvO)|/!Xx^m6U;J."1_\,.RrD(RihA7$>-~ggI0N9>#l      %  #+".547#7!#;2>7#7!V|WCy[5<B-A.sR|R*#DcA&ggD.@9*D1h    H    <  >54&#!!2>737>54.#!73#7!2#!!23!OW|K3P:'
~*6(؀o_*>Cw{FMMc9&	=<"=1 3)kh-C.AeF%"9K*:=d  n ! Z  >54.+";2>72>54.'+".54?>;23!)TW_N~lV?)UX_K|kWA1'C3)D2@bԗS'YfєP'	#*,FmL(@q;s7bJ6`Ze<s9fO7c^0C(/)!U]2k~KOce9^{OM,oiR4AP0\e       :  ";654.+32>%+3!73#"&5467 )22JpXD]fi'1K2IqZFszV{WCA `9|ƍW6tcn>W63uyݓIiee/i<=Bg~     <  37>54&#%3!73%".547#7!#3!#7!#!23!|,IH׼K5Y@$9}}/'?-o2T<":0%JOeeg4L1gh6)(hg";O-k   t %  %3654.#%"3!73>3!23!~51/~NrhdM&1
Lpcddb~B\zd   -  M "  %3!".547#7!#3!#7!#3!iPwO'ys		?Ene_6W?8O0hh+DH?2hhe       L <  #+".54?>73;27!".547#7!#3%#7!5[F>y`;@Xb*T,x_OtL%Z}b
	'`9lT3&D^7&NH<u!)3S=<Jgg29$g     "  %3>54&#!3!73#7!#!23!K[~|D}}?hI(	ve]*EReegg0Sp?)+e     g S  %'+".54?>;23!737654.+";2>?#7!#3#:N]df0?֙U0X{sZ1nkcK,m''Ge?ZN~lV?!&R\^+imgS6+wx675)U}OTkūc7 9O_l9Xefk0qaA9dS\a[T#7EE>ggd        E  ";2>7654.++".5&676$3!#7!#!23!LpM/[0G0i/N?/- *˂SzcUa5T"!|{A(M>&}'D5T,)9"4[H]$
_O"#CeB"Jgg1K2i       >  654&#!!2>7>54.#!3!73#7!2#!23!:F w/?)/"q|E|u>qU3@MoH0Hb;y)3$4!3(cch'=J$9Y< 0D* g   !  G  +".54?>3;2>?>54.#!#7!#3!!32dMnD~hUPl}<l"	-U|NL0gc[I1!2XzH͕9P}`	Gu\E.*NoEcCoP,eA+" 6N2/?IP'!?lP-ffh|1`_'+    2  N )  %37>54&#!73#7!#!#7!#3!!23!`\L{~|~|r]x%d
>1jchhJhhhOXXe     L  654+32>73+3!73#"3!73>3%!".546?#7!#3!2iFcD)!쀀H`B-9~LOzk"iPuL%3WDWf89&/K7ee[%P[de^U\03&hh	;\?(      ,  #+".547!!73#7!#;2>7#7!ʁQvTYe6|,XY'K?.rOmD5S<&@NhJhh0UK;T5eh    #  37>74&#!3!73#7!#!23!2BE E/gaR$
	#)&>J=Jedhh'Hf@$O+l   f M  +".547#7!#;26?654.'.546?>3!#7!-HiMiVHzO45[xBo1	4`TOzT+RuJ|462M56todL-AwhT<!@kMQ`a"Df>m+%@bOA 3;J5&:hM-83-"(3G`A(5       P !  %3!".5467#7!#3!#7!#3! b_/<|8
Xe]0O<1&hh,(2hhe      "   %3!73!73#7!#!#7!#3!Y~~~|~}||fffGhKggJggi  ;    ! O  >54&+!2>7";2673+".5&6?>;#7!2#%!#3!^k[/Q?)(OD3
!&;)UaIH[cUd]-Să{)?D[<ET,<$h6M1&!$>.u]L_6?aB-xRX.3hosr}ymi    :   9  #".5467>732>7654.54?3{ZExW2
#t%A0#<O,FkQ:-6-(;E;(lh3#FhE=!y*	$;U:/F/2Y{JE54L<49G0-:A?6)5H93?V?G     [  P 1 K  #".547>7>54.54?3>54&#"32>.#xp]W*YӔ 070   %+%.\I-Qf\tN5 -J7=\D2&){̒P6_M\i\f3R%.!1(*pp
".2C7&i@	*KrR\~Q5LR;naK7%<+ 9N^j 4$U = R  %#".547>7>54&#".54>32654&#"32>MfyAam;S{o}Y!BH9O4 
 0=wqErR-ȸG~_7ceWgN!sMw]F)LoX< 2\N<Bco]28f]V)030!O6<u[9 :O0iB'4UuK=[eOiw+`r-N"aa#R     I=l@ X o  #654.'.#"'>7.54>32>32#".547>7.#"7>54&#"32>ޏ<_C1O!%>@H.Y#BIS40bP3&Hkc9I1$Y] paTZ0#,;'(1?-DfN<0aXN8!tARGfO@!T^BXA3=#H@37,)$NeZPc9#3!BHWlo{B4Z{G<A8]QJ$3b^ZLE,-2>P35[6\&?G$ZsAf&N@K   3EA C  #".547>73267654.#".5467>32dkq]_0dss(B>+]d&3G+0YJ8$*(jO	hs=9_y?,,[xJ#DGgLRN7-$%.
/I30
+7@ )aU&}9   4GA g  #".547>72>?>74.+732>7>74.#".5467>32o{U[j:IavC!0$	9Vr]I7%	,<"7@'QJ<-C-8eR="`".a[Fe=Rfs9'K<%ln8.QqB)-M_:B'1A0 7)6 (Ig@":*;%g6X?2M%1&>--	%5> FoN*=]@'+WvP/-?Q6,6       E ; Q k  #"&547>7".547>32>32>3">54&#"32>>54.#"32>|*l,f;\@"bx?Ca?mLE'3"[kt;14K?=&'?+l9C$E?6>;.G:1+C/?n\J$<,TyX>%χ@ZmA'E_767h[*%B[6?HJ<	M[3/O<3?P4*a+J;??eI/F=+3aI1_-2U?$G{`%Q()I9!7g     X  @ > U  >32>32+732>7>74&#"#".54%654.#"32>w'^d,)[WLL{V.&R7#04j_NTU1@J&%kSY/%-@(?jZK V\:k^P%˄@QQ*=(&OwQ0o?̊GFsQP{/[K.*!B%#R2̋H.YR]lX5I.*bsQ0YL-c    W  5A 3  #7>?>54.#"#&54>322ɕ|"A<8%.H1.H=30/ ,,l0VxUSY.9dV	!Fu]\1)7!!:^[oLl&84Vjéb6/W|N*\   ~3A U  #".547>732>?654.+72>7>54&#"'>3232[$_AmFXkt21*#5N3WpL6  FSXM9;L"#&/*"
GyYm4V=!k/$IoK,0QmE#G.9H.L2'1
-^c1@@"<-t'5AI'%%!	kaUxZH%3Tl902    Y=[L   #72>7654.#"#7>?654&#"!7>?>74&#" #>54.'.#'>7.547>32>32>32@Qfrod%(TPI'5!1OA2
()BOm{"	
	R[DbE/$!HmC'?NMDRiH56PHM3D0VUV0OxQ)(~R+Q>&S^`&#H:$!T^c1@sW3UuY<n5jkm?'0	4YE2""+**+I,5F4:;zu70**'&(33@<?by9A=Y?TjB!)"<2)  #4%(gH>5l*5R:8V92K19R5<eK$T    V  " 5 N  #".54>32654&#".54>32>54.#"32>%{W``17_H(SC.jz7^K50+H_il1>6J+AhTC+/F/LmQ=ǃj,1[Qd[2&*:>%?/
$.zA#?jU@+qt0>W/9C$
0`a[1C*)Z     a  E 7 P  #".47>323267#".#">327>74&#"32>M&gQZ1PkO:L:1E~G NVZ+0($$("7-&'aaVK}[3QN:wl\ 2I.;k[F/ЎJ%KoWq`W):*&SE-$2Q='=*'PxQTj>e)[U-dsLr*1="*Qy  `7WA \  .#7>7>54&#"!7>?>74&#"#.547>3263286K[el54@-%g.8B(oF@Sn%()	WT8T@/($	%D-L7pdpuEkI%41lleT<!3)[8L/_?p-=GD1**)H*D7NR%D^rE#B,L;(\J]rD\loN}/VwI.d    8  Z  #".5467>732>7654&+732>7>74.546?3mnce2FbxD&.H5QkH0&cfl1J8(2LWL2z%<NPN<%i4?mP.h}F.Oi;'@jU>I,47+J!'?+1X}KWf[g"=T2.8&*?5%"0D1(0YsE!	(EfHD  3? X  %#".547>732>7#"&'#"&'32>54&#"732>73&}fTh:
B_Q%5'1O:FoU=+dik2%D MC-4SvQ2S#I%)+2I/^_6D>0~G9u]<b(x8*Jf<$"IgE(
A2;G.(-+PsI)A3"+3_I+#G9$*>H9J"'     hW q  >32>32#72>7>54.#"#7>?>54.#"3#.547>7>73#".$\ir8ovLhJvS-_c_&>_MA#!7($TQG#+
(3|9ZL&j6T9BcsV>
$;Ts]SrPBnP,tt+SxM*]3W}#+aoT:!4%BmQH"+**'L)H&>,<%?j-kiUmDRSG|!'$)>GH;%1To{;       [ M  #".547>54&#"#7>3232>7>54.54>7"G{]MyT,$#*&D1+@V7^e	
MkP= 5\G?B+3+	iw@1YyHEMzDV#%/&C3][@$N~1Js1J&2#$TUL;.*)+9L4A     4os d |   #".547>7&#"'>7332>7654&'#"&5467>7.54>32>54.#">>54&'326\-}> X}h8bP;FKMHB*=bN;!$%P{Vxk.'.4/Pj:VV1H3C6.Me8\^6ZD]b2	
* )1%6F*t	(6E)&5?[lMgir`N#16	a?RxIHhBSsS< 2V?$G<&#$*3  H*6ZA$K@"EDC!yW&H	(4 3*#B+"E!545	,     ~3YA r  %+".5467%;2>7654.#"#7>?654&#"".5&?33267>32>32}kjk:wa=LG!7/();'`2RB2&	$0B*('"'/GD::=H=,(S79''FB>@G>DM-5X?"fM.VyK2
8=7H]=-+&?/#9INK,+"&2/
D ,*.2/) #(6pR5*A.+:)92>?W6WS2A'1O:"P0   }3SA g }  #".54>732>?654&+732>7>54&#"".547>32>32>54&#"32>avon-&OyS#;lYA!;F=<7XH?CQ%;8=&
&y{T+mh"KE8*ZVJN{U-b~Q:dK+KRGeI5LZC`G55\k;(DW0>X>*HF=EQ!>Y8v7,45T'Zl0O >=";+9#`#/SqB@B^zG$;-*;%*NnC<Ci^5.F4,{?b$G9)RzP=b'FE(R   3p D  #".54>732>7654.#".54>32'%3gj]j9FsMGQrgNkJ1,Le8$>3()+#IzS;XE6$x[yF0VxH[lB
F)a?0ZR+PnD-!;+&B4(7(6F,NrE$?2  @>A k  '>7>54&#"!7>?>74&#"#>54.'.#"'>7.5467>32>32P{r	/I7)!GT>eO9	
$'		[e@aJ8_W0kh`H,BpV%*]WJk@y6jT3
!rbo aqz8T|l0`127CS49\$DC4U="$****&L(3B6*S|RCAh?#<=BRfC=L-H "<<=$,<!<9XsT#J(ug/uq5U< A   3@ D  %#".547>732>7#".547>7332>73EVl=@\vJ!
+F3GoS:<XL|Y1?]Y?_E.?F6iYB~#AY6IhE(L'4>#1&'Gd=UR-QpB26KmXN,,TV[2-R#KZ8P2   q  6 S k  #".54>32654.#"#7>54&#".547>32>32>54&#"32>%soWS'1XxQ,M:#'3$/#!!
.461&4$1FW`.e]LUY'3S: WiYGjP:*B/AhYO]K<fM[[3)=J!^5P6xx%<..)'5M(/3E^9wh0R<!,I9Lr-P#kn6aSG{3,F0Y  k D  >54&#">32+732>7>54&#"#>325$8F'A80u*HQaCHvV/Ukyxq-%)]fa!EO:tdJq_\|x3Qe19DF-:CkNc+C.-SxKGOWjJ(h7rw9e+R`%@Y4Ked2`M?hS;   23$@ f  %#".546?>7732>7332>54.+732>7654.5473sPkAgf3,GaQ0LLV:5"YZSb?[B0\6R7co<(<%)A4(#)#r(<F<()ax)\N3	I}hP7?q^3j9W;&5('j kD<n1=dG'Jc3S; k1Q< 72/15'1% *:.3j\F#;[FA  S   ' >  #"&547>32>54.#72654.#"32>!!xj%CXju}>5WA*#4^G*A2I/9aRBT_;gZKtDhBveK*$>S.&;%+V#B_=47o[<bE&>oXM{0YS!S    )*k h   '>7654&#"#7>54&#">32#>7>5>7>7>32>32654&#">]$4B)=3Lb''	*;-A2$
RˁAmN+	2I2!_oxulT7_*
OhVMQ>GR3q`=B<vcI		3rl]<=70)A81-+.&H9&7S80+u{s)t)Ki@7:IXj?)htyvlY@9r3gxe9om6NN2F+>A$H7DM(F^5&.<*bo_4>"3jidZ_fl   4 w   '#".54>732>54.54>7#".54>32>7>54&''>73%%7.#"32>,#)##VQa6CqN%7*#eZFiK1	6,3e`V$+?*+<IT-989++'0;$<Q0U^a+E"RH1;DAj
9*25* EHE6TC959B).yh./WzK\j@
=<Pc<(OS*DW[V":aTL'.JpU-ZF,$9G#GGB3'<J"=mbZ,6<M:^JT;VvQ:UR[@/<-kfV^/=*" 1=:0#'3     < S  #".547>54&#"#7>32>7>732%2>7654.#",iNuO( ! M r$8'u=BK_m9Mc= 
	?uX5.VStO2M&:(6oaI:و=2Z|JVb	-qmoc!:,'gE]ES
TvQ318?!*UUO1B7PV:Z>H?)G5#A]  P3A   %#".'72632#".54?32>7654&#"'>7.#".54>32>7654&#".5467>3232>7>54.'7=O^1'MG@6(DjUE	#RG/W|Z*J6L*55O9(-. @"m]"9.;-w 9[t;[zL&1gd]M:>0(${	<MS")D2B\oz=(/$6'
!m!18\@#!=fg$<=E-0L6&JtQ*%8%		(E64-3>	Bwme1c')=(#8p Q/B~c<@yn#$*8N5#	 $?2%*B-&;(&-;T>/-1 QZZH-/$

G:%    9   x  #".546732>7>54.#"732>54.#732>7>54.'.547332uYIuJnEbG1 '-t	RN8"+-h		BB8	0R>GnK':Hg(
?Yh2*M<$;Vo@-K4kg2AlQ11%4I15)]Z!DiG/K)6 4&?bE!12/ <2'
-&'#);&($8-"
,8$.L:*5EP(   I  G  z  654&#"3>#".5467>32#32>7654&#72>54.#72>7>74.'7g7<0F6-[zP2=PY(+!,GX+)!	*Vh95n~[
	Gx|!:R2NkF&	$ [4=+P>% -]4D*O@/+HB/),(&NxRk'6Sn+RG6%-6$KE<%/9""ApW0rE?;!K`F9"V/:D$
 3?B326(:$;H$6*72#8F#Ek*&<3-9RkD1  FPA 3 N  33267".'#732>7.54>32>54.#";2><Ln_9:;6/bhn<
?@6 KNJe^6^LJ^6	,D-?hUF'1+`a^ZZr0%8D ?:+
KlewS,1[O!F%Km)(4!Si[6;O0+o    3 d  2>7##".5467>732>73#".547>732>?>54&+7D-caZK7+FPUPFE|\6
$9<";.Kxn6LS[\],ww	ueUa5)ɘ41'
,E20`UD;Q\_";OYa.'"(D5#%9-%@,]3";X:p}X?,+e8cbo<5ZxC.-?<LR$&E%;*7\E%BIVh 3 m  %#".5467>732>7654'7>7654.547>32654.#"#skg[*Fb~N/+(
	idLhG.N5s;U;%'?RTR?']yA;kQ/,G14kX83UkqkU3"*L9"x}?=_v9)MrP2G'=YB#=WK4ZyE
G36-0E*.'0A,/E4,9NoG 7\D"*9"!?Z:1>(,F6#*t);N33     5  p  * \  #"32>7654.#"3%'#37'##".547>$737#".54>323^8zxH8S5*QC0
k 9P0;bM:'AV\^)AAlDlgD@lIT~mck9wAH^z_X)Klr AcD,(6"/$7!7ZB*".@)C8LDPb8'If?++][1@cEf|F;W87G   M3`  o  >54.#"32>".5467>323>73>32#"&'##732>7654.#"32E(%RLAz	%<M)4[RLM|Y0*a6=?7F^D&0BDD L}X1.{h?|,4/T:5+(<C2[VO&(:#&U|-6> 		'QGO!)6 \` HtS3vHς;
hP'	*&+	#KvR0m@Ղ8e/Mb4K*-5[Y^="   40U [  #".5467>7654.#".547>3232>7>54&'7Ngy>NuH	h}W4E&n~
R{[<kQ/XttVnx<weL9W`3Iv[A*1\T8^pUIAFQ54%(2	Q_

j:' $1hV89X;-4Gq\NJMZmEV@_b&Hg@AU# ;&A3X-  3MA F  332>7654.'3#"&'32>7>54&'7#"&547{	7L-<VA3*<&x-Ol~FWq	dm?]B+
"wm` ,O(E3!M|[W;+@5/3dHp\@#JT1KN.H5 >*ZfO1@mO-Sq    K3K ; P  >3232>54&'7#".546?.54732>7>74&#"!bao<Jx|~c)WL:gN-I.(KiDlK'
F}]7`dWkR!vMx^Gcs~B0X|M;@S|m23e_W&89)F5!i'8%@nQ/ 7K,iA'8XyM;@hNck0gq,M!dg/`   brdA G  7>7>54.#"'654.'.#"&54673.547>32W+
+H69l^J9P1;H$JI=kfS\piQe8n?X-e?'M% 7(DpQ5S#6M>7)o $e7%#6@+%A^Ab@T`g6+MmB-    4  ! 4  '&54>32#"&4>32#"&&454>32#"&)3#.'3 /`'4#-'4 -n)3#-'3 -D
3(.#3*%8,/#2)%3(,#3*%     :  654#"32>7!"5467>323267#".#"3632~_<]2@*Q
	?\tB
#"A1-F'06/"HH6lh@-g?-d 8L,9 	1S;!

B"#- NT2   ,'    3!73'!3!73	!y+P{qwAZ['Dkkkky    n  '  #  #7!!73#7!!73!737!3!73#7!8j >jEjK j8C(hw-zMi'ߦrzjkkQkk  \@D  0 >  32626!232#"'7# %654'&#"#676654#"3276pㆺ9Üj)Y>D:y4";t9f(he~&]PB|-wTx39a~&"^>n#?QY>DA5   z'    (   3##!73#73#732>&+32>&+\3KWQ@jbiu#hv'[;
jEjjHj[YZpn    fTD   32673#" 32#6&#"=-k0k4nedUe[4kt瀌0/11/0      Y'    %326&+73#7!   !U|P|01sjCjSj     Y'    #73#73#7!   !'326&+3#IH01s4|P|Hjvkrjjk   S'   #7!!73#7!!73!73#7S8j >jEjK j8C'ߦrzjSj  AD 2  2#"'&'73327676'&+7327676'&'&#676mYY>>T[[a*c	65ulDC<=&&QP//ms,/nlDgGGHGf%]-.43_j45d45i`32\|a_    JC-    #"'&547>2#7!3!g	P/.	O^f.D" /B! jDk   	'   '733267#7!##"&A.rEXw{*cqd0G'cakk"   '   ##7!#	3!733!73#7Q';'jbjjjjjjSj     '   #73'%#7!#%!7374S4:r4?M0jHjq\jj\t   V'   #73#7!!#3!73#3jSj%jjj65j   S'   3!73##7!#!)ejjjj]j  VzD R    'D   6&#"#>32 #"&'3326>-k0k4oede\4kt瀌0//0     f     6&  $7  76  d8:---iؘ  ^ 8   %.76 3 !7>76& e#-i -VD4`x8'ްeekw  d0 	  +  >76&#"3267#"7>7'7>32@OHx4pEPL|6wVv-UCMYs.R>M4&pJ-(oJw>@^CL=>^@L    \D   =  " 6&326%674'&'"#676 67632  '&'# 476۔Xj(Xj!pㆹ:T"<t9f(hpoM1.nx8C{y&"^>m#?QY>jEMΙde   D  !  676#7 ! 6%&76!"276%f~4#7T7#+#d"""vacgkt|zck^d    D   6& #6  -j-2T22        673  7,j(,1.12      Q'     #!3!73#7!232>&+h.̛Ftm|OlsjjSjur      '  (  &'&7>3!#3!73#"!73676%#"3w12ƛ^!LzE.-D2!*Fk>=)(m??fgggbg I Kk3233     k  '  (  &'&'#7!;#7!#3!"'&7676#";/UeDEzLGFJIm<=**k I gb:gggJJf??.3323     '   #7!3!73!#8i ߢ i8'ߦjjB!  ['   $ 67#7!# &7#7!#&cn**nc&j kk9kk   i   !73##!#!2676&#!C!jE`O" kDk¢cX3j^`z    j1i   1  >32#"&>32#"&!73##!#!2676&#!j	S036
N308U	S035

N308C!jE`P" kDk¢0FB42BE/EB23ADX3l`^z \]p &  #!#!2676&#!7!2676&#!7!73#kW  jD$$"iF`R5n^`o{`o{3d|   M  '   !#7!##7!#ywkk%kkD     t  %'   #7!####7!#>o}v
l_wa'kkDkk->      @'   #7!#!!73D$j8fB&k:Vf#V   C' #  #7!#!#"'&'73327676'&2_#j8f|:Zvgj^-iSOg?>AVc#Vk4ONO#c85R2Ot<>    *    !273# %7 7!"#763 *7(<)1#`+>Am(123#`+CղB?MCB  D "  3327.76  32673#"'#"&'ktt]]"!F!"=t0k4nee[RRb갫bR0/ZZ/0     ?'   #7!3!73#7?8j 6'ߦjjSj      ,'   3!733!73yFqwA'Dkk%kk    _'   #73#7!#3!73!3!jRkkjjRj    Q'      ( /  76;#"3!737&'&?6+732#7!#676D((I?*'p^?N'*?I((4"qr9QjeWK
jjJZejύI/Hkg0D  5' $  7>76?#7!#3!73!#"&'7326H"'%"!P% SA?F?)C*hMȼjjjjDuSPHO}  b    !7333!73'!3YUSi]h&twhC;	;;;    #  !#737!3!73#7!#7!!73#7!!734h?x(hR(NN=6N=NLN);;;<uiiu  d   $  32676&+732676&+73#7!2#q|UrgoPg_wwЎzwcudʼX__V<FLMF;<hgJY
m\|v      % /  73#73#7!23##'32676'&'#7367676&+
xF~~8xю|;3ǻqz+95!7Qg;gF <hgJ,
F7\|v;X__+
F#LMF      326&+73#7!2#vLu_wwv++׺[;<       73#7!#7!!73#7!!73ww)MP=4M<NMN);<uiiu       !73!!#3!!#7!#3(NLM<N4=PN)xxu^iiu<3    H   6&#"326?#7!#"&76$32_v}))|GA/0D]n+,4PZ,id<++!!   y   73#7!#!#7!#3!73!3wwox??xowxxOOx;<<!<<3;;h;       3!73#7!#xwwox;;<< &@   733267#7!##"&H
+8KMw,Yԃ77Tz<<|       73#7!##7!#	3#3wwoxEf9j'lkJx;<<<<<n;;       73#7!#!73wwoxM-;<<=  C   73#7!!#3!73#3w~}xx>YÍx;<S<3;;Gy;       73#73#7!##3~J~L@;<lX<<;  k   3#3!73##7!w~~xwRLv;2;;gN<<    C 
     676&#""&'.>7>32$6()u()_19"-gTJa+hUIȼ86?˟?77d>77     !  67672! 767&763"276'&++s0!ѿ!:NBr{<rRlރ`K[<nHJ} ^    32676&+73#7!2+3@^vO^_wwCFZUVY;<ll;     #  3#.+3!73#7!2%32>&+i*5RsX<>Hww݉|m_m$I_;3.;
M.;;<tkWcPO    =   73!#7!#7!3xM+C+My;Ƃł:;     c   #7!# 67#7!##"&7xpx^#Z #^x>xa*Ɔ*<<P<<E  U   ###7!#3#7!#|gChL]Wu=jfDNl]X<<Sq<<    +   !  #"'&'47676323#%326714#"To8'+k%ucOm;3y^]!mC/C fW;xqkTU#  V   !  672#"'#734#"1327676-To8(+k%ucOl;3y^]"mC/C!eW;xplTU#     6M , <  #"#&'&547676327673327'"'&/&'"727'C*B|;'a[m.)&$G?@!d"BF58&"WHE: KSV?>0V:P*/ZT&"G?;"4X
D ".E99+4#@     :   0 >  3267263232#"'7'"54%6'4'&#"#676654#"3276GTu$cC[o8'+k$d%dI$@U^AOl;2y^^%E`r9nnC/C eW6G5">#-G2#$vplTU    %  (  #73>32#"&'#3267654'&#"pP.uM|;'
|M^t
"XYw YXu;86W9Q)058],#3"8{9,3"?qk     @-  +  #7#"'&547>32#77654'&#"3276-t/::N{<'
|N]Dn	"XY<; YX;:]8W9Q)0686;;,#3"8?>|9+4#?89     @   (  327673#"'&54767632'654'&#"%dL98#^2zF1
kj@*|"UPt 2,8$>$#FbbV;W&,VWT7Y,5;%7"5jh   @   )  !7654'&#"#67632#"'&543267J&cM89#]1UVzF1	Վ?*!VPs!2'9$=#$Fb12W;W'+S8Y-%8"5kg       ?  "'&5476767&'&547>32#654'&#";#"327673Î:,88XR'|59:=?"ID+*&WW33DF,,^ED+!6:'(((OW
x*5&8;"FI65     @  <  2#"'&'7332767654'&+73267654'&#"#"#676fpXR'|59:=?"ID+*&WWfDFW^ED M79P()OV
y*6&8:;!3EH66    @  ( ;  #"&'733276?#"'&547>3273654'&"2767s^_Bt3=#$Of;:.;:N{<'}M^
";< :;FF}733nP8W9Q)068]<,#3"8?>|9+4#?89k   /J    "'&5476762#733#:;nuo<<   %   3###73%#73`l2tp|M`;0L,;<<   /C  2  676323#654'&#"#654'&#"##7367632/<;Ej&
FiP
FNhItQ	FNhHtuo-98?N--{B!":#9%.;o+ #&hcs*#%hc;j< #"   /  -  654'&#"##73>32#"&'733276X
MPlHtuo-tEm)_HIl-O#<49#"b:&#(hd<j=>9!:%0K\45{"""  @   !  2767654'&" '&547> >>!|G0
&F0
kBA:-6$A:-7#yV;W&,V;W&,V    @  #  >32#"&'7332>54'&#"}-oF1
lk@x:!D!$R^|)!^Ki =_dV<W&,VUC $-7#AEF   @    654&"#> @3|%w
;-6dV&,    @   2673 &5474|v
:-6eU'-     %	  )  3267654'&#"'#73>;2#"&'#
"XYw XYu^o.sJ{;'
|M^Ht;,#3"8{9,3"?qe<]85V9Q)058   %   #73733#32673#"'&547ff)t(S
,-4X55[d!<<,	05Q&%'.$   #   33#7#"'&547#733267;tum-tCp(
FiL
MPl;i;>8":%0><:&")jd  {1   7!73##!#7!2676&#![&ZC'v=3C&zfgqa[;c^]6DHKZ   /C  5  #"'&547#733267#7332767#733#7#"'&0;;Fi'
FiP
"FMh<eQ
FM53<evo-r?N,- A!":#8%/?<,#;hd<*"&44d<;j;?#"    
  #7373ɁLrL<+<<   "  3327.7>232673#"'#"&'CKSI9<aɤQ(ISfCE?`Sg_@y:iNH.7c`_c7.HN22      -  32676'&+7327676'&67632#"'-[`01m<P?5#9+.N5v:/
54So64-ɦf%.!cWu24<)"Y',IBSA8P/.=<}  t   '&7#73676'&'730',CpMoE(	GA
U!Σ=09A<v7&<	!'!/6l)    & # +  &'&7676326'&"32#"&7626&"(FE{"@@CF)(w04(>7ӓ7i/x2Fx2MH&&	
o2%5*䬬V%      Fd ) 7  #7&'&'&'&767673767676767676'&#"t.}#)%"	73sFC5-*E},(09,)|)/70.'$="RIA+!9 h?;
~BmqGR"=$*=8=j{=??*   B 4  !73&'&'"#7676727#7!#327673"'&/ W5"
&*;"!&(+	P+R#
&<"!&'+	<< 7"&rC<<v8&qD   A  \L  d   [ eu  d   #SC  d    SF  d  !~H  d   t cI  d   d    32676'&'"#6767672#"&'GXYt")QT?9thDI.=R{7{M`G;lp{:D>9_E@58    F!dfK  d  BtL  d    pD / 8  %#"&7#7!3267#7!63 327673#"654#"$e}*o_x'""z#^Xj"<t9f(h(pㆺ9?[X9kGHkOlce&"]?n#?QY>C{     9D " 5  6$32#54'&#">32 #"&'#3267654'&#"O-,iQ,`7:}'I{^>1{"! 6*3%f&&b.0ďd_fJU_dN?[<eeN]=q y     '   %3!73#73#7!#3#_IHHjjjxkokgk    @  l'   73#7!3#3"'&?@Hh\ [PL!kok&k:=c^Y     XVcD  ( 4  73#7!>323#'"&'#7!654'&#"!3276XGi I{]>{z5{"t;
3]\ 6^Tkokd_f16k،_dkC8]<pedN@[<dqd    '  #  $ 6?!%73#7!#!#7!#3# &?&&GG"GG**j&&kokkokkk__ $' , 4  !3#'"&'&'&7#736767!7!!6'&'7!! 76)<=_Vjk;C!<YU=!%mq@E&pj@|Raki`bJCHFDKa^kkaR|@kk.~ZiiZ~.kippj   9   %3#"&'733276?##7!) H}8+_DR[76ijҤ!!`Z><hj     %1 $ 2  76763'&'&/#76?'&'&767676'&f'C+E|;;b\k.)&$G?@!e XK"UHF: #VJQn>0VWZU%"G?;!5X
*DBE.F9{@E  (  #  #"'&547>32#454'&#"3267n.nF0 ؒ>z8 D &R^| `Jh O`cV;W&,C $;.6#AFF  (!   .  376632#"'#767&'&767632#6'&#" VdFrW_ `;
	HFlk@<<:!D$%S]>>5=FJo(0QQ9,WUVN$$@AY   K  ,  .#"2676&#"&7>32.''7.'77~2mG~
_FגՏ.  Y9Hx2x~ux>w^y<S+L!-05&T,     0  "'&733>76'&+732676'&#"#767632e--^BIET&&WWfDI--?F>>5|s89XR(&56IF386;8:<54x
WO9(((':OV   #  #654'&#"3##72767#73767632=1AC}qC !~ooEFp+Q'w
?QM<df7 !R<<Kd23     $d   #733##"'&'733276?#73nughJHl-('#<*49##<<:\54
	{62"#H:<  R  '  !##"&'73326?#"&7>7#"3267orBt3=IOfu/tN{w.Zw@YXu<};5fnP85|}p{qk     S   3#"'&7#733267#733#'Tm>-:9Do)(FhLMQk;dةnm;88y><m()jd<<    <    3##737#733#>2"'m9oo/o=nm)2;"1;;;<;4&&4%     VF   #733"'&zJnX:l20aR<rJ!#751     3!73#7!#nohoPn;;<9    737#7!#3#3!737n0oPn0nn,no+;<9;;;    &  #'#"76#73'&#"32>32#"'GH_x>n|fFhO2"7%*+p G<s@2D64&&4   N   #7332673#"'&7p94@<+++.k31_;_I""26{	
45\     3#"&'733276?##73bnGIl.N#<+3:#"mou\45{62""I:,;      73#7!#!73wkwoxi"M-;<<      =  #"'&'73327676'&#"#6'&#"##736763267632=IIl(,(#<*49#"]FN45HtQEN45Guuo-89?N--/;<Ei''0b\54
	{62""I['&45bsY%&45b;j< #"@B!";9u    j~  0  3##"'&'#"&7#7332767#7332767#73oP-q?M.-0;;EjNFiQFM44<eQFN43<e<i;?#"?A!"tu?<\'&43e<Z%&43e<       +  #"'&'7332767#73>323#6'&#"IHl.''#<3:"#o.tDoPFgLLQ65*b\54
	{6""IQ<j=>rw;Zm)(44d      *  6'&#"##7367632327673#"'&7MP65Isto-:;Dm)(_94!;$3+-l22m)(43e<j=96zKI""6{
45\  =   73#73#7!##3=WlWR~JY}qY~;<Nv<<l;    =  	  %  2767!'!654'&""'&547> >4x	"?8WF1
&F0
kkB7d$7#.%6#AA<AU<W&,V;V',WU   (   &  #7&'&76?#73'676'&t2i7F>kVo,o:h7E jUmgn8*=8"m6(>8!DWVD<CVTC:+A A,+A A*    {  :  332676&/.7>32#6&#"#"/32673#"&7GC
LWN\
3\NQ@w5p:CHJIT	OWY#"A;*:4><*W-lgHCB42'0J9R]:A..&('?U`8HE26{i\     &  #"'&'733276767632#6'&#"\[Hl-('#<*48$0YHl-('#<49#/bPA4
	{62"->lrQ?4	{6#->    He ,  #73733#32673#"'&'733276?#"'&7	ff)t(S,-4X+IIl-('#<49#" 'd!!<<K05\45	
{6""I1'(^       &  33#3#7#"&?#737#73!7#!3276<mm,m-tCpP	hh0i<./e)MP65;;i;>py+;<m()53  C ,  ##"&'&'&76767#7!27676'&'736X))'';6?ABDl&*IIhQf++GGE#IHX?58)%'&*76>XHI#<]tUh?>>?hV9:]     4*    267#7!#"&7#7!#R8ii>>hEh8Qm<<xqpy><<m     !  3#&'&7#737676'&'1FY)(''<5Cf70KoX:OVGE#IHX?58)%(5.bR<rJ!"J<kV9:  1   33#3#676ULrH0e$MDWL<8G<p  '  273327#.#"#7&'&/&#"7632EB&6<*SalQ2,DC%
<*SalR110X TD^M10 TC^N  Q   7!#7!!327673#"'&?C$$
:3 !<+++.j420g0uJ!"6{	
44]:    O2
    676#"7!#7!3632#76
(Z
C$$SD T0D0g0lPQ    ]@ !  #7%!#7!#"'&'73327676&<C#%1qbhhJBC?(GZc`ECZ9g0lFE Z]88`nr    (     6'&#"!32762#"&6"]\F?,j"\]F?({X蒑|Xn[ff[<[ff[j     f   %3!7 u C"f   !!3Vux   f   !7!#4uҔ   Sf   #!guRx  Zf 	  3##3dttfx 
f 	  3##tƨt:fx   b_& $     C<E& D }    c^'xu %   V]& E <xc'N   %   W'? 
 E  c& %  (   V& E  
 juk&   q~u Uuf&      ^'xu '   (]& G  [<x'N   '   (x'   G  & '  (   (& G  w  u& '  (   (u& G     & '  )&& G  &  Z& (     W`[& H     Z& (     W[& H   & (    ( V_D& H  (K& (      PK_D& H   um'wu   VuiH&^       ^'x u )  V%^& I < rk& *  u H9& J      ^'xu +   a  k]& K <x'   +   bxl'8   K    \'pu +   a  k]& K <u& +     auk& K (  C& +     aCk& K   ^KJ& ,    K(& L {    Z&  ,       x&   X  ]k& .  q~u S  d& N qpx]& .     Sxd& N   ]& .     Sd& N   x'^   /   /x<'   O  x2' q<   /xf3' q=  & /  9  K;& O   & /  <&<& O  &  [k& 0  qBu   f& P J    [^'xBu 0     	!'   P  x['   0   x	D'y   P  :]'xt 1     !& Q     x:'   1   xD'8   Q  :& 1     D& Q 	  :& 1  & D& Q  @& jZ'u   2   V'  R   jf& 2  u   Vz & R  ' j q rs  jZ& 2  r   Vz[& R    jZ& 2  r   V[& R     Yr& 3  q| XVf& S  _    Y^'xu 3   XV!'    S    ^'x
u 5     7!& U   x'q   5   Mx8D'   U  x2' q<   Mx8& q4     & 5    x7D& U    ; ^'xu 6   !&  V     ;x '%   6   xD'   V   ;"& 6   `& V   ; e& 6      & V    ;x ^'xu   x!&      `  ^'xu 7   p;]'O< W   `x'   7   px;q'u   W   _& 7    ;q& W  P   `& 7  #&;q& W  & x& 8     ~x'& X     K& 8     GK'& X     & 8   ( O'& X   ( Z& 8     & X   [ B& 8     C& X   l h  w^& 9  ru L  z7& Y    hxw'n   9   Mxo''   Y     k'sPu :   s  6& Z   C.   k'qPu :   s  6& Z   v   \'pPu :   s  !& Z   jp     ^'x7u :   r  !& Z    x'   :   rx'& Z   z  ^'xu ;     e!& [   z  \'pu ;     e!& [    e  ^'xu <  9!& \     k& =  tuAf& ]    x& =  /  xA[& ]    & =  
  A[& ]  |   ak& K    pS]& W  < r  & Z   9& \    C& D   V$^'<A   V$ &  '?#737>32#654'&#"7#72767o,#ܳC>(a"Ogj3+#ܳi35HVk.'pfVb8< V$ &  7367632#654'&#"!!#72767#737(TnC>(a"Og5%&#ܳi35ưkwE[.'8(Uk,b8<kk   , 5  %2>5!#7!"3!73>3!#"'3WO_{vI h5=m}Y<%T{q5v%?$Q~dfDkkI}/H{PHnDq-(7N& 7r-  bx_& $  I   Cx<E& D   b  _E& $  iu C<& D   b  9& $      D' k D  b  _:& $      D& D   ib  & $      Dg;' k D  b  _Y& $      D' k D  bx_& $  'I  uu Cx<f& D '    b  _Z& $      D\' H D  b  _Z& $      DI& D   Mb  _& $      DI& D   Mb  _Y& $      Dx& D   Mbx_& $  'I  uu CxDH& D '    x& (     Wx`D& H      E& (  ru V_& H     ^& (  r6u V7& H     J9& (  "   W'  H    :& (  $   W'  H    & (  #   W;& H     Y& (  #   W'  H  xk& (  'R  t*u Vx_f& H '      {E& ,  "u b  &  t  xJ& ,     4x)& L     jx& 2     VxzD& R     iE& 2 u Uy& R    j9& 2     V'  R   j:& 2     V'  R   j{& 2     V;'  R   jY& 2     V'  R   ix& 2 '  u Uxyf& R '     ek'qub   Syf& vh c     ek'sub   Syd& Ch c     eE'ub   Sy'  c   e^'rub   Sy7&h c     ex'  b   SxyD'  c   x& 8     x''0   X   E& 8  u & X     k'quq   f& vH r     k'suq   d& CH r     E'uq   '  r   ^'ruq   7&H r     xj'  q   xA'0  r   e  k& <  su96& \   C7   ex& <    9'& \    e  L& <  |9& \    e  ^& <  ru97& \          #73#7!#!73! 0{H|j kkj  U     %3!#737#7!!7#7!3#3!!!"i6_"i6Ϯjjkjjkj V>&6| *     V>'n   *   V>'C   *   V>'P   *   V>'D   *   V>'Q   *   V>'E   *   V>'R   *  b  _&6     b  _'nX     t  'C|  ,       &P ,  z  w'Dd     &Q T   b  _&E     b  _'Rs     4&6$ .     4&n .     4&C! .     4&P .     4E&DB .     4u&Ql .     x  '6          'n        t  g'C|         {&P    x  'Dd  :       %&Q p   V&6d 0     V&nX 0     V&C\ 0     V&Pl 0     V'D   0   V'Q   0   V&Ex 0     V&Rx 0     x  '6         'n        t  	'C|         	&P    x  	g'Dd  L       	&Q |     'EX         'RX        -k'6F  2    -k'nL  2   _ -;'Cg  2   h -8'Pd  2    -&D 2      -&Q 2      -'EL  2    -'RO  2   x  L'6         :'n        t  'C|         &P    x  'Dd  F       &Q |     'EX         'RX       Vz&6] 8     Vz&n] 8     Vz&CN 8     Vz&P] 8     V'D   8   V'Q   8   j'6     n'n  Q  t'C|  g     &P v   x'Dd        D&Q '   y&6N >     y&n? >     y&C9 >     y&PW >     ~&D{ >     'Q   >   &EQ >     }&RE >       r'n         	F&P Z     &Q      D'RX  X     G#'60  B   G#'n0  B   G#'C   B   G#'P,  B   G#'D<  B   G#'QD  B   G#'E8  B   G#'R@  B    3'6  "   ?  'n  "T  t  'C|  "j       &P "v   x  #'Dd  "        _&Q ",     'EX  "        S'RX  "      V>d'b   *   V>f%   4d&br .     4!f&   Vd'b   0   Vf'    -kd'bX  2    -if(   Vzd&b{ 8     VfE   yd&bc >     yfF   G#d'b1  B   G#fG   VW>&      VW>&      VW>&      VW>&      VW>&      VW>&      VW>&      VW>&     bW_&  5   bW_&  5    tW&  5   W&  5  zWw&  5   W&  5?   bW_&  5   bW_&  5    V&     V&     V&     V&     V&     V&     V&     V&     xW&  5   W&  5   tW	&  5r   W	&  5   xW	g&  5   W	&  56   W&  5   W&  5   GW#&      GW#&      GW#&      GW#&      GW#&      GW#&      GW#&      GW#&     W3&  5    ?W&  5    tW&  5   W&  5
   xW#&  5   W_&  5   W&  5r   WS&  5   V>H'   *   V>' q   *   VW>d&      VW>C&*      VW>f&%      V>7'7   *   VW>7&-     b  _i' !  b  _1' q ;  b  _d'bd    b  _f  bW_&  5   6  W      2'67&'&7676DE_0>'7#,LS#&8F' n87  7'7 TV j   Vd&     VD&0     Vf&'     V7&7x 0     V7&<       )d'b^  t       f     d'b^         qf  W&  5    'b   6    &m 6(  n8&6  7    -`H'U  2    -.' qL  2    -K'`R  2    -
    -7'7d  2    -'8d  2    J    w2' q<     d'b^         f  'n  b     	'n  m n8&n  7   yH&Q >     y& q] >     y&`B >     )  Vt&6D :    Vt&nD :     7&7H >     &8< >     e  i' !   e  1' q ;     d'b^         f     I'n       7& j  b b7  od C   GW#d&      GW#'&B      GW#f&G      G#&B  7> GW#&f      ?d'b^  "     =f     qd'b^  ">       cf	  W3&"  5   !f v      2&'&?676-/-)2AP)	3'F8&#SL,#7   Jjs   !!i  s  Jjs    Mb   !!gcb   Mb   !!gLb   Mb   !!gLb  b   !!  b & _   _J     ]& B   B     G   #>7GZf#@?[    o   >?3o[g"+?=[     8    >?38m{)E%Z     &'&5473^v&+P[y>MGT=P@'!V      #>7#>7Yf$Zf#@?[P@?[   o    >?3%>?3o[g"OYf#+?=[P??[    8     >?3%>?38m{)Jm|(E%ZPE%Z     ^    &'&5473&'&5473]^v&^t&+P[y>MGT=P@'!V?P[x=LHV?P?' V   l;   3%%#7Jy u k Fs   ;   3%%%%#77Jy u\ v3yj \k FE%'  3!   4632#"&3~|}}||}    3q   3     
  >32#"\87?]790pNN87N      
   $>32#"$>32#"p\87?]79\87?]790pNN87NMpNN87N  /  
     $>32#"$>32#"$>32#"\87?]79\87?]79\87?]790pNN87NMpNN87NMpNN87N  
 
  " - 8 < F  2#"&7>"32676&"32676&"26&#72#"&7>3#  &76I杠$%WCWVBXCWVC#XC9@UI杠$%岘,<$%%$ۻZݦ!&\ۻۻۼ  	 ( 
  ! - 9 D O S ]  2#"&7>"32676&%2#"&7>"32676&"32676&"26&#72#"&7>3#  &76H杠$$WDWVBI杠$%WCWVBXCWVC#XC9@UI杠$%岘,<$%%$ۻZZۻZݦ!&\ۻۻۼ  `   3`u    `&  ,   `',  &  X    `   #3W`u  `&  ,   `@&  'X  ,       #'#R     #   7|#ssR    g #   	7k#^R^sXX =' t         1   &  >32##>32#"67676'&tT#%2{6PU-a\97?
^79ʰZAm:!/.ֶ3B{pNN87N(;eO-    B     !'   {'  {      d   3#Ζ$ 2   !!3#!b"jJj        73!7!!7!/^Jjj   & "  "   & "   [   ' t   "      V;   2####7B%$ڤk3k3v辸//k   (    3+"&5463yv}~}|   (    ';2+v~}O|}  !k   {    1y 
   0.703"&7>2`a3\p>
]pPZ%pMM87N  !o'        B' H' v          d'   #"/&'&#"5>32326茞"܎ކ獞ڒ'XTB	9IMWQB:J   `H'X  '  &  ,    /    27676'&#""'&767632JF/0 gkEG/,wBD3;lvBD30wv]Xg]]`ƻ\ptfppppp  A\    6762"'&543##73:;nuo6;<       	!737!733#3O}NrgiTTR    &  !67632#"'&'73327676'&#"#28(12:NMFEFE&L.-cjGG+,k=22-:bZ

JIL+*:9kk99%  # 
 *  2676&#"67632#"'&767632#6'&#"پL_`0;;?IJH!CF1>~6899 L%%Jrkkrnhn7+JH}hkkv7   V   	#!#7!d%/O.e      	  3   6&"276'&#"27#"'&76767&'&7>321*TAB*TB$%$TS89$J9+n43ihKKMNvT9+?[%b11b1ܖ****T*T98Xs?>>?sX89?0KcrrcW$2     0  #"'&767632#"'&'733276"327676'&^7@?JGI"poEG245999 LJISTO`@>)%`d<=&%)JJ}KKhjwv	7<QQU98lrA978vn;;    k   !!#!5!Oaeak[:[:     1   !!'1[    d    !!!!''ZZ    f   &767)b+,֦n++&T=		=7;<    7>76&'7n*+&Tb,+7<;7=   [    #73>323#654'&#"[uo-tDo(
FgL
LQ56H<j=>9"9&/;Z:&#(44d /T  d   ^  VC {  d     T t  d   T u  d     C  d   5  d   #T  d   V  C  d   T  d   T  d       d   :  d      d   fMg  d  Mg  d   +d.  d   @d4  d   @d=  d     S  d   @d5  d   F  gr  d   %  g:  d   L  ng  d   /  Cd;  d   [  d  d   %	cA  d   bd  d   %B  d   J  ) -  3'73#737#73#7!3#7!#3#3###37#/;U/KtKK/oxU/;~jjjkkk~jj=Jj  4  #"#736767>7#73 32#6&#"!!!!3267-SABbJcoBjtzAD1wCvt90h1"0h.>Eh3	Dh吏    u  # 0 ;  #7367"76!32!73  6&+	 3  #"'3276#"48SS5@/LٚPvG"oPfi?$GC<[4V;I003R_^wژznX,sB7#RmNC       $ ) 0 5  #73#737#737#7!23#3##!3!27!7!6767%!&#! VUSSm<_GDX8ZkS`%8$j8kVkkq?WkkkAijVk    4 C  327673# &767#73676?67!7!676'&#"#676323#!CPOnm&sB{*g%$CFFfg/q=h%l :lGFRQ3K=j^=7j<e{@AGH>+ҾA7jb@*j      ! *  #&'&76?3#6'&'6767DSn5d5m?;ꖪ/d/A?]oCj9/ZZI\9ehQ?2I#nXF0׉EaODSn^ `   V      7!73!7!!3Y^wwjww,j   j  H *  !!!3!&'&+73767!7!6'&'#7HC_G`D bhB*))/0bޗUQB':AhKzhTX.-REjۋ((kHDhT2Hh    "  #73'%7'%#7!#%%2 7#7! ! V9^6^HG,;:n+fKjn؉ntkko؈o%k~        %  #73#737#73#7!2+!!332676&+ ;yw&%;S}j/kkrkkj & r   &     & r   )   b  l K    c  k !  6323!64'&"#'?#7!%ő۰?'ox!#s,h/pgje=Wjjg!HjTNfjN    ! ;  #"'&547632654'&"2!!>3"##72767#7!gh4#}[hg5$Eu1FuJ)'y)'ݾtFn`?>҅__A|Ii."54Jj-"4hP">Qrkf       (  3#3!53#3#53#5)#5#3!53##^VVV+TVV}-DVVABBBB7VBBBhBBBh   3"    r -  !#! 766'7!#7! '&'&'&7676u;P${z-6hh6-{$N;u*uuvQ[!!)1-F骩6FӉW֗g[`0/\gհ  ] .  ;  7m         #3!3!!#3!#7:@{(a${`{$}j kLj     a #  !!6$3  #"$'73267654&#"NL:=ku)Z_Q]jyIO_WUGG^cyl%-    x  ;   !#!7! )!-          	!7!_!++   {  b   !#	#3bʉf9      E  	>7654'&#"%!6$3 #"&'33267654'&'!73>7'#Bfz	F]fmmz }]Ư'Cl2q/5ngWfUs*fNf+'qSqGXVb4;e=< """Y28qZ(';s Pikk`   I'   #3!!7!#7!#368j >~O!Ajjjj  ^'d& {  5   ^'d& {  5   ^
'd' {d& {  5   ^^' ud'5   {   ^' ud'5   t   ^'d'5   {   'd'5   t   'd'5   u   'd'5     ^'d'5   {   'd'5     ^'d'5   {   'd'5   u   'd'5     V'd'5     ^'5   {    J ,         %3!73#7!+!!ľr|jjj kk           %3!73#7!+!!!!+||jjj kk          #7!###3!73#7!ެjzkkj jj kk  h  w 9    h  ,   %3!73###7!##7!#`ެ ljjj jkkzkk  h  
s    %3!73###7!##7!+!!rެ |jjj jkkzkk     h       %3!73###7!##7!#)!!!
+ެ |@|jjj jkkzkk          	3!73#7!##7!#	3!733	+qN(jj kkkk?jj  s  z   ;   {      %3!733!73	#7!##7!#!		+(ˠP=Njjjjjskkkk  ?   {  
'   #  %3!733!73	#7!##7!+!)!	\+(ˠP|Njjjjjskkkk  ?     /   j &     '    [ 0   g  ) L   g  & L   L   g  G& L  ' L   L   g  & L   Y   M  o' Y   M  & Y   L   M  	=& Y  ' L   L   M  & Y  ' L	  ' L   L   g  & L   [     f' [     & [   L     	;& [  ' L   L   T  < O   VUD F   ( G     	D P    ^  	D   +  ) '&547 )  #  !33  654'&!nE]D=S{##x<R|ƏVa_ŎVbtjfVp  L6fWn     & -  #7!  )7;  654'&!#6654RD˺#x<R|ܺ^M1İNjkŎVbtjL6fWnajEOs1iY     ^  	D   $ ; O  6654'3  654'&!#7# 37&'&54776! '&547 )  N#x<R|ܺ^M1O=S{_M2WE]D2jQ%DL6fWnajEO2liR%afVpDkDN ƏVa_ŎVbt    /   !"#$3 
!"$'3!2 6IqBUIp7}"O8@X֕\hSH  =-D   #"#6  #"&'33 6Z烦0k4oM1谻-Z_jEOͲi  V    %'"&'&7 !2#4&#" 32673#NZ6#DIzCq@@N\ldap\@A /^&  '5   ud  L ?8 	  !#53?_
    	  !53%	
_   u h8 	  !3#!u_Qc
cQ  	  %#5Qc
cQ_     L h8   3#!#53}__Qc
cQ
      -#553%Qc
cQ
_F_    - Q 	  %'7srfKrKf   P 	  %%7%Kfrfwq     j 	  7%'%sfwjrqwf . j 	  '7.rqwfsrfK  L ??   !'!#53!?_QE
XE  u h?   5!!3#!'uP_EXEQc
cQE   rFf   '7327>2'&""'&'fK^X{|X>>sWX>UV=Kf^XX>JJ>sXX>J%&=  NFB   "&'&"'7>232?%7%]=VU>XWs>>X|{X^K^=&%J>XXs>JJ>XX^f  L ?8   !###5333?\_\TQ
Q        !#5553%%Q
QT\_\  u h8   5!333###uT\_\EQQc
cQQ       3%%#555	QQc
cQQ\_\T    L F8   	!#53Tr.r_Qs
sQ
    n h8   	'57!3#4r.rTI_Es*
*sQc
cQ    L ?8   3#!#53_88
       )5!53%!8
8f_    u h8   3!3#!uf_Qc
cQ     !5!!%#5	Qc
cQ(_       )5!553%%!EQ
QEa_E  L ?c   264&#52#!#530-@@-qq_@Z@
  u hc   !3#!"&463"_qq-@@Qc
cQ➢@Z@     L ?c    #!#53!5462+7264&"â_➞qmm-@@Z@@
mq➢@Z@@-m   u hc    #"&462!3#!354&"mq_m@Z@@@➞qmQc
cQm-@@Z@    L h8 /    3276;3##"#"&"#"'&+#5332327V*!NUI_6%VZ.V.ZV%6_IUN!-~Qc
cQ**
~-  L h?   3#!'!#53!}_\_Qc
cQE
XE   `   -'7%l!
)ev|=f      !#!#53_^ 
         3#!#_Qc
cQ       #53!3_V(
 ^      !3!3#V_( Qc
c        %#5!5!Qc
cQ,v_   F mU4   #53!31_
    Z)'R   #4."%#54>2'AnnAQc
cQ[Ԛ[TnAAnT_uԚ[[   )ZR   4>2%#54."[Ԛ[Qc
cQAnnAuԚ[[u_TnAAnT    Q 	   %'7%5!srfKrKfɢ u?'  ^       	 !  2>4&''7".4677AAnnAA7fKM[[Ԛ[[M7nAAn7KfMԚ[[M    !  7".467%7%2>4&rM[[Ԛ[[MKf7AAnnAArMԚ[[Mfw7nAAn  FE?8   3!!FQ     F ?   5!!#F>   	     	%#>        3#5   uEn8   !5!3nQQ   u n   	#!5!n>Q   	   #3%Q/>      53Q/    Lh'B  D  ^   ZZ'C  E^     Lh'D  B  ^   L2?'B  >B      'C>  C     u2h'D  D  >  'E  E>     F ,n 'n   s  8   F ,n 'o  8r       L ?    %#53!7!!!!'7!%7!_Y&VBDMxVBD33
77^^    L h   !  !'3#7!'7!#53!!!7!7'BY_Y>VBY_Y; 33D337c
c7
^^^^  u h    %'7!5!7!5!7!'3#7!!7'B2	DVBlY_YDD3377c
c^^^    L ?8   %#53!!!!_Y33`
^^       53'#'#
^^G_Y`33  u h8   3#7!5!7'!5!_Y`338c
c^^    #5373c
c^^_Y33`  L h8    3#7!#53!!7'!_YY_Yv1(3338c
c
^^^     53'7#5'
c
c^^^^G_YY_Yv1(333 .   '78KEr|gsiK4sg|rE      7%''/'-K4sg|rErg|sE    jW   %'77?7|rg|sE4Es|gr  . jW   %'74Es|grtKEr|gs    L ?   %#53!!!!!!_=5==|
   u h   3#7!5!7!5!'!5!_=|==5
  L ?8   ##53373#'-_xx~?E
==Ϣm==    u h8   '#53733#@?~xx_Em==m==Qc
cQ       !#!5!5!5!53%!!!!88
88X_GX    3!!!!%#5!5!5!5!	88Qc
cQ88MXG_X    L ?8      #5!#5!##53!#5w_碢
         #53#53#553%#53
VJ_\  u h8      53!53!533#!53=VJ_\EQc
cQ       3#3#3%#53#	Qc
cQ_  u ?8   !##33!?a}E^^  u ?8   !33##!u}aQEEQ   L ?8    !55!!#53d=_=;EE
        %3'3!#53#EE
dd=_=    u h8    !7'!!53#5d=_=EERc
c       #7#%!3#53EERc
cfd=_=          %5!!!'3'3!#53#dEE
dd^SdS=_=      +    %3!53#53#'3'3#!5#c^ș
dEE=_=d22      +     3'!3#!5#73!53#53#3'E77Ed^ș
Py7722d=_= Q      +     3'!5#73!53#53#3#E;d^ș
ŸEy12d=_=OϺ2         )#57#53##3'373!3'3c
cDD
JEE>==_==;H>   +   %  %3!53#57#53##3'3733'3#!5c^ș
cDD
EED==_==;z22    u hg    #3!53#577'!5#35o=_=d22șc
cdEE&      " 	   %'7!!srfKd{rKfd     	   7%'%!5!sfwrqwfQ}d     3#53#53#7#3'3cc
c
EEEE=_=`=_=<(     u h8  " +  !6762!3#!"'&'!%3&'&#"#3276uz2PP2_2PP2	(:4.		(:4.	?2PP2?Qc
cQ?2PP2?	))	))  ZZ'E  C^      uhJ 	    !'3#7!!'3#7!!'3#7!u{[{{[{{[{q

,
  L ?8   !#!#53!3?Т_68
8    u h8   5!3!3#!#u06_ʢE8Qc
cQ8     L h8   3#!#!#53!3}_.._ҢQc
cQ8
8  L ?8   !###!#53!333?MXG_X88
88    u h8   5!333!3#!###uX_GXE88Qc
cQ88     L h8   3#!###!#53!333}_X_UXQc
cQ88
88  L ?8    #53!P=_=Q
    u h8    7%3#!5=_=,QQc
cQ    L h8     3#!#53%7=_==_=Qc
cQ
,    	    
  !3!3*B᫻1+     h-  (  >54&#""&54632 #"&54324&#"32IH7H0e՘ݢeWOmVPmmWKt,>bFأ[t}t{     |     !5!!5!!5gg+     |     !'7#53#5!!5!73!@4Eq#W?4,+*â*â	g    3  V    %	33^]<;A+     3  V    !	!#3#Ŭ1+       %!!"$$3!!"!![Hج(HA,m,Aޠ(\(oLTTLo     " *  %!!"''&'&$;3#!!'!#"[Hc[mqQV(^cNyLAp,5$A,87T\(8נo[6TLZoLT       !5!2#!5!26767!5!&'.H(خHA,m,AdجoLTTLo    " *  !5!2+'7#53!5!&!&'&326767Hd[mqQVخ]cNAp1,4#A,d+8Uج8נ~\TLZdooLT     5w'   !#3!53!3!53#56JJJJJJJ  5w'   !53#5!#!#5!#3'TTwJJJJJJJ     w   !#'.#!!>?3!5	nNI=DN)u?$HNh"%!%)/     1   !!Ӣ          !!#!5!!!1Ϡ1yyT    F    4632#"&!!#!5!M97NN79M1Ϡ18MN78MLyy\BV      S   %#'-73%yLLyL\\8v}vw}  g     &"265$62"&VzTT|TQOSWU|ST<yUQ    g   62"&٥OSUQ   =} 
  3##'%\sB} }`s-Pb;  = 
 5  3##'%	>32#"&'532654&+532654&#"#\sB} I;j_wyHDFb\^ffe5acQLRWF}`s-Pb;BlcHdwdrzJMXR]_JJJCH@A    =o 
    3##'%	!535!533#3\sB} JTNr}`s-Pb;QiTTR      %  .#"326"&'#"&54632>3"31UevYQJPG__KDa*M2CXXieu~९{YY         /  32654&#".#"326#"&54632>32#"&2TevYQ1UevYQG__KDa_/YYie9XXie~९{⦮u  I   %!3!~$  I   %!3!ȢT~$  8{   #{e   8#   37#'usususous    8    ###٢ee   8a   3737##'esآes^?ces@es      !3#	ihTJ         3	3##"JT       #4$ #4. x(\(ނ~(خ~ނ      3 $53 ><جނi~ج(~ނ   / %  26732#"&'.#"
#"&546327jPd@7*8	kOeD=!0

l9TA6?&#Hn!bSA8?S    /'     /	D'J  '      1y    4632#"&!!M87NN79L8MN78ML    y     4632#"&4632#"!!M87NN79LM87NN79r8MN78MLpNN87NH   y   " - 1  4632#"&4632#"4632#"&4632#"!!M87NN79LM87NN79M87NN79LM87NN798MN78MLpNN87Ni8MN78MLpNN87NH  y'	J'	-    '   #"/&#"563232ۿ\e\e'?	E?	E    '   32?632&#"#"'ٮe\e\'E	?E	?        !!#"/&'&#"5>32326c]\
_\Ye]`
a\ZT?	9ILZRB	9I   f    !!#"/&#"5>32326b^`
!_\Ye]`
a\YSB9ILZRA	9I    8  #"'&'&'&#"5>32326#"/&'&#"5>32326c]\
_\Ye]`
a\Xb^`
_\Ye]`
a\dZT?9ILZRB	9IѓYSB9ILZRA	9I    fD     4632#"&!!!!M97NN79M8MN78ML   D      %4632#"&4632#"&!!!!M97NN79MM97NN79MF8MN78ML8MN78ML     D      %4632#"&4632#"&!!!!M97NN79M	M97NN79MF8MN78ML8MN78ML     D      4632#"&4632#"&!!!!M97NN79M	M97NN79M8MN78ML8MN78ML   1k      4632#"&4632#"&!!!!M97NN79MM97NN79MN8MN78ML8MN78ML!    1k      4632#"&4632#"&!!!!`M97NN79MM97NN79MyN8MN78ML8MN78ML!    '   !!!!!'7!5!7! }/H{}?f٠f٠   F     !!!!!!Ҡ      
  	5	!!po         
  %!555f        %!!"$$3!!"[ج(ނޠ(\(ނ         !5!2#!5!2>.Y(خނdجނ     $  %!!"''&'&$;!!'#"[20ea#!(cNOނABn8V(\(8נ>+oq?       #!'7#53!5!32>&'&TYRخcN_poނoE80Vج8נĠEA)   j    7!!!!"$$3!!"ج(ނ̠(\(ނ  j    7!!!5!2#!5!2>.(خނجނ   	   !#533 $53 >]=]uجނӢ9
9j~ج(~ނ      4632#"&%3 $53 >M97NN79Mhجނ8MN78ML ~ج(~ނ       !5!3!!3 $53 >
,,جނ++բc~ج(~ނ       3!!!q<        !5!!5qĠ    j    7!!!!!q,<     j    7!!!5!!5q0Ġ        !#!#<r          )3!3Ġr        # +  $  $!!&'&'&!67676!ج(\(ULoA,,AoL6uULoA,u,AoL\(ج'-AoL7uTLoA-u-AoLTLoA-            $  $! 676%!&'. ج(\(J,AA,X,AA,\(جTLooLTLooL           & /  $  $	7	&'& 	676'&	 76ج(\(AooAAoo\(جXoAAoosAA          !  $  $&'&  >'&ج(\(AoaoނA\(جXoAJaAo         #  4632#"&$ >.  $  $M97NN79Mނެ(\(8MN78MLނނ\(ج         )   &"265$62". >.  $  $VzTT|TQOSłނެ(\(WU|ST<yUQނނ\(ج        )  %#'-73% >.  $  $7LL7Lۂނެ(\(vKvwKyނނ\(ج            !!!! >.  $  $VVނެ(\(llނނ\(ج            !!& >.  $  $Vނެ(\(Ӣނނ\(ج           3!%!)!!!!.p0ppq1qq         3!!%!!@@1q       	    3!%!		!	 m$nn#n          3!4632#"&!M97NN79Mf@8MN78MLY@         3!!#٢sgf       #!5!s+         !!#!gg           35!3!          3!!#٢5ˢgf       3!!!!#٢55ˢ/.         3!!!!#٢ss          #!3!!#{^/Ѣ+gf           #!#!3!!#{ ^/++gf     f    3!!!!##7ss+        3!!!'!#٢{[agDzDBf      3!!!!!'!#7!٢<SWAs3;XDn)D         #!33!!#'7#{^{CnAA+gDD[[     f      #!3!!!!!'7#7#%7!{^S4WNtX+Dn)Db         	r      BL   4632#"&M97NN79M8MN78ML      	  3	%!	||$$$`j   3   !!#ajH   !   	#!7 Nj    !   3!b"Hj !   !7!3/Nj   ^   !#^c?      $%%$~      	  1 ; F O Y  !! &546;#"&546 !54632+32#"&=54&#"3#"32653264&"2654&#l(ع(DbEDbbEEbbEDbPDbabbabDv(D(غPEaabbDEbbDbaaE	DbbEDb     ^   !3!b?c     l   4732#"'&'.#"0Pd@7+	h $TA6?&H    *u   
#"&546323250uPd@7+	h$DTA6?&Hk-k      T    !!!!%!!Bf6L̔4 + x     # / ; G S _ k w           +7CO[gs  !2#!"543!254#!"+"=4;2+"=4;2%+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2%+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2'+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2'+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;22+"=4#"=43+"=4;2+"=4;2"=43!2#UݓJIIJ%J%%J%%K$$K%J%J%%J%F%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%%%%C%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%$%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%$%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%%%%%%%*$%%%J%%J%%K$$K%%%%%JJJI%%I&%J%%J%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%%% %I%HJ%%J%%J%%J%%J%%J%     
.P    7!!!!!!*cc cc    P   #53 sàZ0  s   3#s     P   #5sˠАWeE&2   P   53Zyi P   #0Ps	  P   3#àР˓[   Pm   #!!s#	q  s   3#s     P   !!s`N	u     Pm   !5!#    Pz   3#z    Pz   3!5!`z Xm   #4763!!"]oyeD9uߑfW  ]   #'&%'53 763:*enK==Mne( =C_AEcH< X   3!!"'&5]9De{oVfd    ]   #3]	    ]m   4'&#!5!29Deyo}Wf    X   &'&3!3#76l<(enM==Kne*!<McEA_I=  ]   3#!5!2765o{eD9ᏞfV  u   3 	w         !	!!$<   5.    73!3!cc`  j   5!j    l   !X      3 	      !@ 	  <j     5!!5!!5!r#B#B#j    <l     !!!!!r#B#B#XXX m     333mjjj  m     !!!@@@mjjj  <j      53353353353<xxxj    <l      3333333<xxxXXXX   n      3333p^^^^    n      !!!!@@@@p^^^^     !!      l   !! l       !!#      l   !!# l       !5! j     l   !! X       !5!$ j     l   !!$ X   j   3!-j    3!-m    j   !!@j       !!@m   j   5!3,jk     !3,X j   5!!@jk    !!@X        3!!- 	       3!!- 	    	  #!!!P@ j   	  33!!P-# k      !!!@# 	    	  #!!!P@ m      	  33!!P-# l     !!!@# 	     !5!3, jk       !!3, X    	  !5!!#@P jk   	  !5!33$,P jk      !5!!$@ jk    	  !!!#@P X      	  !!33$,P X     !!!$@ X     !5!! j    l 	  !!!!- XV  l 	  !5!5!!, jV  l   !!! X     !5!!$# j    l 	  !!!!$# XV  l 	  !5!5!!$# jV  l   !!!$# X j   5!3!,-jk  	  !3!!,-XV    	  5!3!!5,-3jkV      !3!,-X   j   5!!!@jk     	  !!!!@#XV   	  5!!!!5@jkV     !!!@X      #!5!3!,-jjk     !!3!!,- X       !5!3!!,- jk       !!3!!,- X      !5!!!!@ jk       !5!3!!$,-# jk        !5!!!!$@# jk       !!!!!#@#P XV      #5!5!!!!P$@ Vk      !!33!!$,P# XV       !5!533!!$P-# jV       !!!!!@ X     !!3!!$,-# X      !!!!!$@# X      !5!!!!$@# jk      !!!!!$@# X  <j    5!35!<yj  <l    !!!XX       33lUTT        !!@@lUTT     5!5!  x X    333x 		    	  !!!!- ¬B  x  	  !!##xms j  x     !!3!!xm3-s ¬jB    	  !5!5!5!, >   X 	  5!###ljjj     X    !5!!!5!4l t, >  	  3!!!--A   xj 	  333!xjk   x    3!3!kA  	  5!5!5!3,,=    jX 	  5!333jkk    X    5!35!3̠=      3!!!!-- 	AB x     333!!xs 		   x   	   3!33!!-skA	jB        !5!5!5!3,,   X    !5!333xt jk	    X     5!3!5!33t,	       !5!!5!4 B     5!!###sjjj      	   5!!5!3!!t,-sjB     5!5!3!,-XA   j   5!333!jkk     	   5!5!333!XkA       !5!5!5!3!!!!,,-- AB        5!333!!###sjkkjj         !!!!5!5!333!-s t, jBkA        43!!"yY[ p~|     4&#!5!2[Yx p~|  j   5!2653#xY[j~|q    j   !"&533![Yyjq|~  *m   3YѲ/	Y   *m   #3*/	Y *m   #	#	3	3*i    S   jh   5!|j       3?  hj   5!h}j       3 @  hl   |X    !@? hl   !h}X     !@ @ l   5!5!!5ijVV     333PP ?@    l   !!!iXVV     #!#P@P ?@  ;	      ;?   !O ?   ; j   !O j   ;   !O k   ;   !O @   ;   !O    ;   !O    ;B   !O B   ;   !O 	   q   ! 	      ! 	      ! 	      !' 	   I   !] 	      ! 	       3 	   :	'       bm         # ' + / 3 7 ; ?  53!5353!5353!5353!5353!5353!5353!5353!53('O'('('(67576    (  'l         # ' + / 3 7 ; ? C G K O S W [ _ c g k o s w {           #5353353353!3#%3#%3#%3#3#5#53#53#1#53#1#53#75353535313#3#3#3#75353535313#3#3#3#75353535313#3#3#3#bb~! 
  'm       5 9 = A  35#%35#35#%35#%35#35#35#35#35#35!35!#5#!5#35735#35#wNOŶZXYI6Z   B;	  B  q :	         !( @  ;	'    	      ;   !!!;(' 	@   ;'	  	'      ;   !!;@@	    ;   !!!O   ;	'   ;&	  	'  ;   !!'(      %   !     %    !!!,7r<R     %    %3!254#!") ) ,orVoVZttV   %&	  	    %        !%!5!5!5!5!5!5!5!5!5!W77777 rrrrr  %        !%3#3#3#3#3#ᰰܲްܲް t88888   %         # ' + / 3 7 ; ? C G K O S W [ _ c g  35#35#35#35#35#35#35#35#35#35#35#35#35#35#35#35#35#35#35#35#35#35#35#35#35#!L$" $"$ܮ.,,.ܮ.,,.,,.,,.,,.   %   
       !33775353535W!yBߢ| T}<B     %   
       !%353555#5#5#57#!yyB| r!C}     %  	       $ ( - 1 5 9 = A F K O S W \ a e j o s  7'#7'7'#7'7'7'#7'7'7'75#7'7'7'7'7'37'75'7'7'7'37'75'7'37'35'!,2|5y2~~2O~~5~|~2~~2~~5~}}}}~~~~}1y|~||~|}|||~|}}| z4|2~12~~~~|~~~~54~}22~}~45~4z231|42~~1O~~4~|~1~}1~~4}}~~}}~~~|1|~|}~|||||~||}}4|1~21~~~~|~~~~44~~11}|~44~~41       7!         %!!!,rv        %!!        !!!cr   "   !    "    !!!,r8V     !   %!!n      !    	!!!bSnr     !%   	    !%    !	       7	        7!	  !%         !%    	x;rRff          7          7	x^rSS      !   7      !    7	xtrSS     !%   !$    !%    	%!bc6r        !         	%!QQZr    !%       !%    	W                  	z      !        !    		#W    !%   	  !%    	uvxx    !%     	>+uv))xx  p)   )  $7632#"' 327$%&#" %632#"'~~~~eMM>yJJJJJ6````qq|qq   #u    	9%-    p)    327$%&#" %632#"'MM>y````qq|qq     r' 	   ' / 7 ? G  %&'&'6767&'&'7%'676727"'64'7&"'62&47\+;.81F9K58.42d;E9G,:.80G9J6&8.;+d1O9FLL&_`JnLL'`_n<1& j(0=Ju &,A=N:0('<1& j(0=Ju &1<>EB0(n_II'[[JnII'[[   p)    % / 3  6%632#"'327&#"6767&'&6pyAAAA,+-,,-+A@@Rqq|qq%%mܱ[0$
%@%|"    p)   ) 7   3276'&#"7632#"' 327$%&#" %632#"'r99:9rr9:99XWXXXXWXMM>yB!!BB!!oe33eje33````qq|qq     p    $  $pkk]Ak^    p     $  $27$%&#pkk]<MAk^a``     p     $  $"3pkk]<MAk^``    p     $  $%&#"pkk]Ak^>``    p     $  $327$pkk]\LLAk^>``    p     $  $"327$!pkk]<MMgAk^```     p     $  $"!pkk]<Ak^`  p})   6%63"'pRqq     )    #2y|q*q   ( 
   2654&#"!|~}}|v<    	(     $%632#"' 327$%&#"!IMM>y_O````|qqqqH(     	(    !#%&#")%632OyyMMqq>~``     	    3327$3!#"'$@1 >qq``   ) 	  %63"æqv`  ) 	  2#%&#u)q>`   	  527$3Muyv`>q   	  "'$33yuMq`     p)   %632#%&#"puqq>``  p   03327$3#"'$puMMuyy``>qq  !%         !%         !%   !    !%   !$ 3! 
   2654&#"4632"&nȊce;~|ddcc||}  %    !%!!d r<     %    !%!!We r<     %    !%!W7 r<    %    !%!W7 r<  %     !%!!!!+c,b r<<     !% 
    4632"&!	W>>VV}V2j>VV>>VVJ      !%    !	c      !%    !	b    p (     7 &  $   %;<*X֖   %  	   !!!!!!,7,rWb<)) Ie  %  	   !!!!%!!,crWbM)<R re  %  	   !!!!%!!,br+ceR re   %  	   !!!!!!,7+r+ceR Ie  p      $  $!327$%&'pkk]]4MAk^Or``O+    p      $  $67$%&#"!pkk]uM14Ak^^O``rOc     p      $  $!%&#"67$!pkk]\M̦4Ak^OT``%OT     p      $  $327$!%&'pkk]\M40̉Ak^``TOTO     !%    7!!xtr R      !%    	%!#Wnr   !%    !xtr    y    !!!,Lr0R<6    y   !06    "K    %!!!,|rhOn    "K   !h#n    !%    !	#W   	       " * 2 : A I  3#''%#&'52#"'&5476!!'5%!!'53'5%3'5%3#'sMM7:==-0YG.b#CKSuYGr=;>MM^??@7`d?\gOOOOy>*<?v^ 
    < B H N T Z ` f l   3264'&#"&7367'67675673#''5&'&'7&'677&'67'%%&'&'%6767%&'0/CB^0/AC/88pkTcR|NOOfUip88pqUfONNQaQh!$b)dLQk
KRt!%c'd&//^000NN|P_Pfp88poQ`QyNNP\Qgp88pmQ\Py,
M
N>&`7"
bK*V&"g{M	M       ! ) 1   !   !   32 54 #" &#%#7&'67&'6767KJ]_VNEWMCe2ntjnti7IL6a]]pu	otpu	ot         ! ) 1   !   !   32 54 #" 3$3&'67&'6767KJ]_TNEAgntjnti7IL6a]	Uypu	otpu	ot        %   !   !  #$''&'6%&'667KJOR`7IL0cZ
		
		 
       " * 2 : A I X  3#''%#&'52#"'&5476!!'5%!!'53'5%3'5%3#'32765'&#"sNN99=>-1\H0e%FKSwZGr=;=NN$E| 1	?'_>?@7`d@\hPPPPy?+<>w_VG{?,rCA     0: 1 @  7#'#53'&'&54767&'&=33676=3#32654'&i($lm$(($[Uu&tU[$&uU[[UV$|ddbe|$%
ZSSZ
%_TYYT    *  $  4&#"326&54 32 %##5!&w衤礡PP 䤣L~~ |	     *  $  "32654&'#5!3% #" 5476礡 𳉧פ㤤ף	|~~L    #  &$76+"'&5'476%7!ttsstEuspid5s
qttrtt<֤ꧦg\ul9 S     52654&#"#4 32 33#!5z{ym㗗yyy{(|      j   #53533#632#4654&#"#*jjoon}mZyH{zF      2  4  "32654&7#"&54767!!53#5!!3!!#3!!8OO87ON=0LmkL/>Λ2  1O79NN97Os0LllllL1KӘJJ-    ' <  %#5#535&'&'5'73'3#'73'676=35'73'33◰zhNgeMjzzTThOʍ7NjYYӖy     ?    ! #!!!'!27674'&#.d ;6zFH%QM_\ǃ$P<   C   #  #"'##56'##"/547 ?^'5@_*SU&/UL	;Yԧ9UP(`XI.     s  2  22732 #&547636=4'&# #4'&#"*tpz&=<xQ>hG:V
Hek%PF5NPB|-&pA&NF    X      	 &&5	<F:^;"Vgd     G 7  236;2"##'65##"'&5476;235&'&=476ex<JT`(GeRUdfB3	VNT<G48u<B<h	mMD:SGEnQh  B  " < B  +"'##56#+"'&57547 7;2732;276=4'3&'"~V"0b*SV*8UiQ"_|Q
)w`SgA
?6N#euB?gIo5	F(pZR      w   2367632#&5476(t*#\l~ ΨT]1klSI|-  X     	&47EosU     H 2 ` g  26;2"##'65##"'&5476;2&'5476&+"326733276=4/#"567654'&#"35&5hr=)\"IfRUdgC3&=cGkv	==Nr%SZU6vk 6)S<F98:d	mOE:Rp&i	C]&'Ax.+0	nM,W`c        3#"/4?23hH0#!cZ-@   o   3#'654'&'#"54732XWz=\9`Y'6?F` 1TFG*֙-@ x/   #"=4?2%#"=4?26ձ'VQܖCت+YP*~:ۉ8z"C     o    "'4723!# 5472!5kmOdXX[;Z$}@Ϝ   "    3363'$6'"-8w?WXc1	      0    3%#'#3%#)N(4/c}    4 ( ,  377#'#'547#5773%%.wwzy.**  <<7CA<<{8AMt  u h8 	  !53#5u=_=c
c  	&   *'$6 76'&'676 7	h5X@ SDio]( 'IN=SRh}	4̡&.M
   G&   767$676&"KAV8#JL(	FWPT"D89hG
Mڡ4	}hS    #u   	  	!	!j.u-1   -   3#˪5ipp h   	#3h5ip       (   53'#'#'##
ɻEEG_Ax/'/@     (   #5337373(7
7EE_A@/'/x    e l2 %  2>4."%#54>2"&'7nAAnnAQc
cQ[Ԛ[[M7AAnnAAnT_uԚ[[Ԛ[[M    lO %  ".4>2%#54."26rMԚ[[Ԛ[Qc
cQAnnAAnrM[[Ԛ[[u_TnAAnnAA   u   % - 5 =  53676$ 33## $'&'336767675&'&'&'#uBV(\(VB_BVVB,AoMTTMoA,,AoMTTMoA,EqqQc
cQqqTLnB-u-BnLTTLnB-u-BnLT  L 8 	  !#534_
  u ,8 	  !3#!u	_4Qc
cQ  L ,8   3#!#53
A__Qc
cQ
    L 8   %#53!!!!_Y	dC33	
^^   u ,8   3#7!5!7'!5!	_Y	33C	d8c
c^^  L ,8    3#7!#53!!7'!	_YY_Y:m3338c
c
^^^  L 8   3#!#53
a_88
   u ,8   3!3#!u	*_Qc
cQ   L 8    3#5!#53!5!
a>Y_Y33
^^  u ,8    #3!'3#7!!7'Y_Y>	33c
c^^^  u ,8 #  !3#!'	#537鷷x_??x==Qc
cQm=====m==  gP,  g,  gP',,   g,    gP',,    g',,    gP',',,   uP  P',  P',  P',',   P',    P',',    P',',    P',',',   u  P',  ',  P',',   ',    P',',    ',',    P',',',   uP'  P','  P','  P',','   P', '   P',', '   P',', '   P',',', '  u     P',    ',    P',',    ',     P',',     ',',     P',',',    u P'    P','    P','    P',','    P', '    P',', '    P',', '    P',',', '   u '    P','    ','    P',','    ', '    P',', '    ',', '    P',',', '   u P''    P',''    P',''    P',',''    P', ''    P',', ''    P',', ''    P',',', ''   ag,p  agP',,p  ag',,p  agP',',,p  ag', ,p  agP',', ,p  ag',', ,p  agP',',', ,p  aP',p  aP',',p  aP',',p  aP',',',p  aP', ',p  aP',', ',p  aP',', ',p  aP',',', ',p  a',p  aP',',p  a',',p  aP',',',p  a', ',p  aP',', ',p  a',', ',p  aP',',', ',p  aP'',p  aP','',p  aP','',p  aP',','',p  aP', '',p  aP',', '',p  aP',', '',p  aP',',', '',p  a' ,p  aP',' ,p  a',' ,p  aP',',' ,p  a', ' ,p  aP',', ' ,p  a',', ' ,p  aP',',', ' ,p  aP'' ,p  aP','' ,p  aP','' ,p  aP',','' ,p  aP', '' ,p  aP',', '' ,p  aP',', '' ,p  aP',',', '' ,p  a'' ,p  aP','' ,p  a','' ,p  aP',','' ,p  a', '' ,p  aP',', '' ,p  a',', '' ,p  aP',',', '' ,p  aP''' ,p  aP',''' ,p  aP',''' ,p  aP',',''' ,p  aP', ''' ,p  aP',', ''' ,p  aP',', ''' ,p  aP',',', ''' ,p  uap  aP',p  a',p  aP',',p  a', p  aP',', p  a',', p  aP',',', p  uaP'p  aP','p  aP','p  aP',','p  aP', 'p  aP',', 'p  aP',', 'p  aP',',', 'p  ua'p  aP','p  a','p  aP',','p  a', 'p  aP',', 'p  a',', 'p  aP',',', 'p  uaP''p  aP',''p  aP',''p  aP',',''p  aP', ''p  aP',', ''p  aP',', ''p  aP',',', ''p  ua' p  aP',' p  a',' p  aP',',' p  a', ' p  aP',', ' p  a',', ' p  aP',',', ' p  uaP'' p  aP','' p  aP','' p  aP',','' p  aP', '' p  aP',', '' p  aP',', '' p  aP',',', '' p  ua'' p  aP','' p  a','' p  aP',','' p  a', '' p  aP',', '' p  a',', '' p  aP',',', '' p  uaP''' p  aP',''' p  aP',''' p  aP',',''' p  aP', ''' p  aP',', ''' p  aP',', ''' p  aP',',', ''' p  a',pp  aP',',pp  a',',pp  aP',',',pp  a', ',pp  aP',', ',pp  a',', ',pp  aP',',', ',pp  aP'',pp  aP','',pp  aP','',pp  aP',','',pp  aP', '',pp  aP',', '',pp  aP',', '',pp  aP',',', '',pp  a'',pp  aP','',pp  a','',pp  aP',','',pp  a', '',pp  aP',', '',pp  a',', '',pp  aP',',', '',pp  aP''',pp  aP',''',pp  aP',''',pp  aP',',''',pp  aP', ''',pp  aP',', ''',pp  aP',', ''',pp  aP',',', ''',pp  a' ',pp  aP',' ',pp  a',' ',pp  aP',',' ',pp  a', ' ',pp  aP',', ' ',pp  a',', ' ',pp  aP',',', ' ',pp  aP'' ',pp  aP','' ',pp  aP','' ',pp  aP',','' ',pp  aP', '' ',pp  aP',', '' ',pp  aP',', '' ',pp  aP',',', '' ',pp  a'' ',pp  aP','' ',pp  a','' ',pp  aP',','' ',pp  a', '' ',pp  aP',', '' ',pp  a',', '' ',pp  aP',',', '' ',pp  aP''' ',pp  aP',''' ',pp  aP',''' ',pp  aP',',''' ',pp  aP', ''' ',pp  aP',', ''' ',pp  aP',', ''' ',pp  aP',',', ''' ',pp    u h8   #!5!3!333###!4̢dL_L`88QQc
cQQ  u h8 !  ###!5!333!333###!`XOX#dL_L8888QQc
cQQ  L ?8    3!!!!#5!#53!5!m00Т2Y_Y33
^^   u h8    #5!5!5!5!53!'3#7!!7'G00Y_Y2'33c
c^^^   L h8   !  #5!#53!53!'3#7!!7')!Y_YjjY_Y33=33
c
c^^^^^    u h8   	#!#3!333#1ldL_EQQQc
cQ    L ?8    3#5!#53!5!Y_Y33
^^  u h8    #3!'3#7!!7'Y_YW33c
c^^^    3!!%#5!5!	8Qc
cQ8Т_6        !#!5!53%!!8
806_ʢ T  `   53'#'##T
G_=|==5 T`   #53373`
_=5==|  L ?8    !5#!#53?_碢
   u h8    5!35!3#ur_EQc
cQ    L ?8 	    !#53!!5#!5s_
   u h8 	    5!3#!5!35!A<_ddEQc
cQ   n h8     #5##53333#!'573}JdL_r.rT1碢QQQc
cQs*
*s    n h8 
    + 6 =   4632#"$4632#"$4632#"$4632#"$4632#"3#~5(&77&(5(&77&(5(&77&(5(&77&(5(&77&(_oN77'&76N77'&76N77'&76N77'&76N77'&7c
c         !5!5!!%	^^}a        %!!5!5QEEQa}  n h8   3!3#!##'573	_.r.rTQc
cQ8s*
*s    n h8   3!3#!####'57333U_XXr.rTXXQc
cQ88s*
*s8    n h8   333###!'57dL_Lr.rTQQc
cQQs*
*s  n h8   3!333###!##'573<dL_LĢqr.rTqQQc
cQQ8s*
*s  n h8 %  33333#######'5733dL_LϢXr.r8XQQc
cQQ8s*
*s    u F8 	  !5!Tr.rEQs
s    n ?8 	  !!'574r.rs*
*s    u F8   !5!3rCTriTr.rEsQQsQs
sQ   n ?8   '7!!'7#'57rTCrir.rTsss*
*s   L ?8   !!#5k8  t h8   %!=!37'kQQnn   L ?8   3#!#53!kr8   u h8   #3!37'#!rkQnnQ  . i   %'%'7fwfKLweKe   . h   %'7%7%xfLffJfx    -/   	'7"'7264m0eKPPr [?Kf1PߠPs ?[    27"&47%7%F?[ rPߠPKe Z@ sPPew    jy   	%'%&462&"Few1PPr [?1wePPs @Z . j0y   64&"'62'7m ?[ rPߠP1we Z@ sPO0eK    Q   %	'	'7	%7%s..sfJJfr-rJfJf     Q   %'	7	%7%	%'%r-rJfJfQss-IffI     j   7		%'%	'7ss-JffJjr-r-fJfJ   - Q   		'7	'7-r-r-fJfJs-.sfIJf    Q     7%	7rrrr~srssrrr   Q     	'	7		~rsr$s~~ssr}r}    Q     ''7%7%%%'%r~rrfqfqEr~s#rfqf     Q     	7	%'%''%7%~rfrfs~f}sf    Q 	    '7%7%	'	7rf~rsrrf~ssr  Q 	    %'%'		7fjrr~sFfrrr  Q     7'7	%7%rsrfr~frr~rfrfq    Q 	    '7%7%	'	'7rf~rsrfrf~s~rf    L h8   !3#!"&'&"'7>2,Q_^>XWs>>XQc
cQI>XXs>JJ>W  ,    %!5!26553%V[
ɢ]`P .    2%#54&#!5؞Rb
dP[VޠP`] F ^	   #!#53!2653^ޠP`]_
[ V n	   33!3#!"&V]`P_V[Pd
bR    W   %>4.'7'7Kj;;jKr[FF[wLԴLrZZfK    ]   %%'%.67fw[FF[rKj;;jwfZ 
 ZrLԴ     rO   '7>$ ."UwfZ 
 ZrLԴfK[FF[rKj;;j    h?E   %7% .'72>bKfZZrLԴ(fw[FF[rKj;;j   e B    %!5!%."'>$ %'KLԴLrZ 
 ZfKj;;jKr[FF[w    r  O  !  533##5#5%'7>$ ."HwfZ 
 ZrLԴJfK[FF[rKj;;j   ( =m   7"&''72>4&SrM[[MfK7nAAnrMԚ[[MKf7AAn G =   267%7%".467a7AAn7KfMԚ[[Mn7nAA7fwM[[M  l9  )   2>4.##".4>76732AnnAAnTMn[Ԛ[[jvuԚnAAnnA:!nxԚ[[Ԛ-r[  l9  )   2>4.'&'#"".4>33AnnAAnMTn[Ԛ[[uvjnAAnn!QAnxԚ[[Ԛ[Q-  Lh 	   !#53!3#!Z__
Qc
cQ  Lh 	   !3#!!#53Z#__Qc
cQ^
     Lh 	   !3#!!#53Z#__EQc
cQ
     u  h8    533##5#5!3#!d_JQc
cQ     L  ?8    533##5#5!#53=_J
     u h8   !5!'77!3#!''Zrr_&rrErrQc
cQrr    L h8  ' /  3#!"'&'!#53!6762!3&'&"#276}_2PP2_2PP2	(t(		(t(	Qc
cQ?2PP2?
?2PP2?	))	))   #   264&"7"&47675553%%QtQQt?2PP2?Q
Q8tQQtQ|2P䠠P2	T\_\  F n8 	  3!#!FQQ  F n8 	  !#5!3nQQ    	  	%#5Q     	  3%#5Q    FEn8 	  3!3!FQQ 	 	  #3%%Q/(F     F n 	  	#!#5!nF(Q     	  3#55Q    u?8 
  #33!a}E^  u?8 
  !5!33#}aEQE    
  !5!!%#	^(    
  %3%!!5	QE(   u ? 
  !!##3(^  u ? 
  3##!58EQ    
  #5!5!^(}a    
  %!!5!538EQa}   F?8 
  3!3#!F Q88  un8 
  !#3!3n QQ      
  	%!!5!88ࢢW     
  #!5!!%Q/W     F ? 
  5!3#!#FW88     u n 
  	#!#3!nࢢWQ       
  3!!5!588     
  5!5!!Q/  F ,? 'n   o  8     'p   q8     u ,n 'r   s  8   'u8  t       F}n     3!!!5!'3F(hP|   F ,n    	#!5!5!!#n>>hPQ  F}n     !5!3!!5ndhOQԵK  F ,n    5!!#7!5!F>h>,   F?  
  !5'3!!?6/A    F N?  
  !55!!#?6/>  un  
  !5%!5!3?6AQ  u Nn  
  	#!5!!5n>/65QL  'q8  t      'p   u8      u?   !264&#!5!2#!u-@@-EqqE)@Z@  u hq     !!!!!3#!44g_qQc
cQ     u h    #"/&#"563232!3#!zu;jnAsozt;jo@s_?	E?	EQc
cQ   L ?8    #"/&#"563232!#53zu;jnAsozt;jo@s_ᓮ?	E?	E
     u h8    #"/&#"563232!3#!zu;jnAsozt;jo@s_ᓮ?	E?	EQc
cQ   uoh8  ' 1  %#"/&#"563232#"/&#"563232!3#!zu;jnAsozt;jo@spzu;jnAsozt;jo@s_?	E?	E?	E?	EQc
cQ   Ld?6    	5!#53d_Ѧ!
     L re   !!#53!?2_'ת
Ӫ    udh6    55	!3#!_//yFQc
cQ  udh 	   !3#!!!"&63!!"u_ ͑ NnnWQc
cQ"͢nn    L k %  %!!"$'&'!#53!676$3!!"!!VB_7BV(A,/,A޴q
qoLTTLo  Ld? 	   !#53264&#!5!2#!5?_NnnN ͑W
Xnn͢    Z +t   %"&767&'&63"3!!"3ff͑NnnNDNnnN+"f

f"͢nnnn   @ +Z   2#5264&#!5!264&#ff͑NnnNDNnnNf

f͢nnnn       46 676 #4&"#4&""f

f"͢nnnnEgg͑NnnNDNnnN     x    '&' &532653265f

f͢nnnn֑gg͑NnnNDNnnN   #u   	u- /'J  '  &      / -  27!5!7632#"&'.#"!!#"&546327jR_Pd@7*8	k^_OeD=!0

TA6?&#Hc!SA8?S  / 4  #"&5463232#5!767!5!7632#"&'.#"!!!lL_OeD=!0

d<_Pd@7*8	b`SA8?SfEZQTA6?&#HM   D    y'	-    y'	 J'	'-        %	'7%'11m,J+mU1L1wl++l    /"    %77%7	'711m+J,mU11l+K+l   j^    	7%'71M1m+,m1L1ql++l    / j"^    	'%'	'71M1vm,+m11wl+K+l    L h8    !53#5!#537'!55*`=_==_=c
c
EEEE     L ?8 	  !#53?=_=
       	  )#53#c
=_=   	  !3#53Qc
c=_=      	  	'7%'m,J+m9wl++l  /" 	  '7m+J,m9l+K+l    j^ 	  	7%'7m+,m^l++l / j"^ 	  	'7vm,+m^l+K+l   L h8   !53#5!#53*`=_==_=c
c
     3#53#53cc
c
=_=`=_=   uh   %#5!5!Qc
cQ _V    u1h   !5!53^ 
)V_     L?   !!%#5 Qc
c_     L1?   53%!!
 ^)_    %    !%!!W7 r     %    !!!W7     %    !!,7r<R      %    !!cr<R    !%    	vdxx    !%    	u    !%    	!	uv}x   !%    !	x     %  	      # ) - 1 7  #535#5#5#5##5#5#5##5##53#5#5#5##5qrrrrMrqrrrrrrrtr$ttttrtttttrttr         #73#737#73#7!#!!!!!73 X(IGIP(PT0{Hj}}ykk}}Q      %3!#737#73#7!3#3#!o(Zin(jj<kkjkk   X  !  #73#737#7!2#!3!2676&#!!! 0&%kS}0Pj}kj}  V % -  3!.+32673#"&7#7!2%!26&#!C*))`b}+AwXkr-PGܛ0%':t.-REjۋP{ږac""Akп&,  9   #73#7!#!#7!#3#4#!73!3GeeGSjd||j kkkk U>j~j    cV :  654'&#"##7!>32326735>54654'#"542@!zUU#shHlA'b;<6!n2IdNSi!IgE=!H]\jVlne=fCU

3<G8`Vp^pRFT^AX;6    {   #73#7!##7!#	3#4+3GnBSjdiuj kk5kk3U>j    UV 1  %'&/##7!#7!275>54654#"#"'&amiOi+$x1Y/X$IdK?,5rRhjkky
"5aHVlRFTMZJE'     #7!#!!#4#+{CbVjdHZHD> U@[ :  '.#"#7&'&/&#"76327332?5>54654'WEOFli<&1]EMqoFli<)'&1]Eo/2IdN5XV	
9yFEXV

9k+8`Vp^pRFT^AX   Zj  *   $ 7!#3!7'"'&5476%!$2767676p(K,({v'N_uJ,X0XW>x5-ttkkʦ.ׇmCt<0.,T  	V !  373#7!	!##"&'733267#3	=0GB-rEXw{+6j k'k""ca~j    q  l    !###7!#!#7]܈ި=t:jkjjHj    )  $ &'!73#7!67632! ''&",('N_uJ,3NX0>x5ttkk̥.ׇmC*0[T    J  =   !##7!6762#64&"yLDFn]a'^(s(&8k|..;4^       	    	###7!#367632#64'&#"jz!a?lT&9ko*_UO>Bjkk9ݰ.BO .[  q  =   !###7!367632#64&"l_wpoO*'P]a'^%tD.k>}Q+[88BW       !3!73#7!#!73# }Gd${`{~jj kk      ' 	  !##7!d^R|jY   IB, % 3  %&'&'&76767367632$%67676'&#"6D5-[RpkW05$"R,Du@)-%BMg;FL$+WLL237T@l<sO;/f8oiv<l@T;dllqqK    y $  3327676&#"#7>323!7#"'&K4j
>K[["?[Rg_*EH ְ$K`_z-1/
ON^_ށ{Z`!!io65     fjD       6763267&"26$    Z"8nG#Q$O\/bU3C9:/]_*67>|}S32      '   !#3!3!!#3!!#C8j KjEj> j'jj!rbA  Mt  d    9   #7!###7!(j\m^W~<<<<   bVF I  73 64'&/&'&5476$32#654&# !"'2673"./&'bBs9Ns6-E.
%7>q1$2E/
UMM:l BrL=06?HT-'k<R"\(:7;AaBb/7Xz^+=<7=^A`+2K
*GK7gK2C-J[1\e  V   #7!#!322673#"'&/&#,{Da#|a25l!͓u"WpHZHs0jHuq)k     J   %73#7##3?%73#E5S5A^#)яB1?<=4/Yl2;t;:l   _;/ "   73!$76&7##7373%#?3v4<		&7&"vt/}\33Η3:g9J96AI9J <+ %   673!76&77###7373%7D4Ef3!HC<L(4]mw+l;Fd F9\6J9K9    %  67%67$%#3%73#7S䬊CvZkSa046ՌycX_]r5+})&5P1J!?=w163w)  q;<   &?3###737%73Z"B4cs@v,;UK=T3J9J9Kɱ     x> %  !3###7373%73%?###&7D1rCv-/sA2}I=T3J9J9J8pT3I}      '    %#7#7#3%73%?3#'1[)3;$9/rK=s@3H}_ |J8oT   x      %#7#'7?%73%733#C 1B1'6Cw-.uK>Ks@3J9H:J8pT3       !3###7373%733#A1JqҔv/uKT4J9J9oT3  x=F    %&?#7#7373%73E34&
	;.K=@@3QG@AJ9o   k    #  %##7#3###773%73%?3 0'5D1rDv-.sK=T3s@3K=T3J:H:J8o   o 	 "  ?6767%#3%737P2Bv`BN9,I0;DE%'yh%64"@=[6QQ<YP	&  x  F   %?3##3##3%73#+/)qB3qqG?#@J8oT3K=T3b11    w #  !#7#7'?3%#?3%#73?3#\&5$9Hyzvuq>3q>3J7o<J7o<J8oT    x  D   !7##7373%#73?3#'7But
ts@3J8o>J7oT3   ;O "  &7#'#7373%73%#7373E)R9ϺuїuNB+

G;w@3\CJ9RF<5HG:     x   %  !3##7##7373%#7373%733#A3s(7Bv15

F/uK=T3s@3J8p<TnIGJ8pT3  x  D   !7##7373%#73733#(7/

H uts@3=IHGp;I:oT3   a>    6%67;# 7'7373%63_en(T	j):vC"&+6wJ888   x5 '  &?#7#'?3%#73?%7#7373ރ$1&6Btz,
'5bs@3s@3J5p=J8o<UxI=z    >%l   '  6%677%	#&?6-73%$F/?Q4Y)c9P\L H	4x%"([T'!H@D}:5.<S/;/   < '  %#&7##7373%#7373%733#d%x,h5vҲ3
G@Vh>\];=bJ8<gH8l;X<  x  B   !###7373%?3#G3rAv,sH>T3J9L5oT3  x>F   &7##737%#7373'3Cut%>K@3J9p<J9fT  x<D   %!73 ##7373%#7373!'*6Cvt\|@3J9o<I:   =M   !!#7373%?3#A2!.5
	H-sKevRxH@ J8oT3    >   !#!#7373%?3#'B1n_Ct/sKJ8J8oT       p 	   ?67?"67%#7373O-ZUS\[QXlH9
	pzN$>nRQ$B3!BH@    > #  !#'!#7373%73%733#A3rA28t.(rK>T3Kyb J9J9J9oT3   a= %  ! 533 76! 7'7373%73##3 /0JG{Gt
.r23"пH:J8T4DK   >   !7%3##7373%#73733#>&5[$Aurrs@3J9o<J9oT3   R<    7%#7'7#7373%73Ttr(_"QvH$H[+>8+*MJ:ĜS6       #  #?3%73%#73?3##7#3##t
* t
r%2A4sH8H8q;H9oT3s@3K<S3  =*   #	!!%733#m4cBH9.ոsK>KXZJ8T3      ?7%676#3$0IKc^*db0,jXR+8y)vaS    x>   &?##7373%#7373fS%9Bt,6
	GQ>s@3J8p<TvI?   x> #  !7#&7##7373?37#73?3#^$Ev;I{s["ڤ}w !3J8qJ8oT3     ( ! +  7$3##67%3%73#?67]2`;LZ6BƑ,L)r&F}ρ'CQ\T?- .k8'}De@%xp,     Bp}   &  #"&76$?367673#"&7>32dtT#%
2{6PU-a\97?
^796ZAm:!/.ֶ35B{_pNN87Ne|(;eO-  ''	J    3   !!#aj   :!   !7!#Mѱjo      !!3/j o   !7!3/j'    k 
 !  $#"&7>32#6&#"#7.76$32\97>
]792axr~@{2հ%#+TpMN78N{+3캶.   j.i   EDj     JX     '+     ' ,      PE , : @  "'7>32327673632#"&54??#"&2654&#"33*#K?Ib@iK5Xbd~o
!Ơ648#AInoθM$&-^A{Omm.2Ŷj!h=A.:/o0twIl$'Cj   	  (  %!!   ! !#7!#3!72 #" rMEDE3giG<@@@@jLe]kk jjQKJQ  ]rD    ##" 323#7!#%26& F7bUlcI^θXiXi̇32vkF8      "  !73!3!73#7!#!33!73!3!TKsGht=k$jLjj kkjjHj     wD  +  32674#"#"'&54767###7!!676323!B~%^Q5ְY?Zi]U;,@wUw391i߄Cj    k
   fD   A  X    3#3[
X0X   X    3#	3
$dX       X    3#	3G
X    X    3#	3
X  Q  X    73#3#kɈX  Q  X    3##3
X0X    Q  fX    3##37
$dX    Q  *X    3##3s
X    Q  X    3##3D
X    Q  X    %3#!#3
X   Q  X   3#!!و
GAX  Q  fX   3#3!!و
<AẌ    Q  *X   3#3!!و
xAX    Q  X   3#3!!و
AXd    Q  X   7!!3
X    l{ 	  7%3'Ɍ2ll/ - 	  7#'7Ќ/ll =y    >32#"&3#7=9$"(9"$(N ++ ++)4 4p    >32#"&738$"):"$'N.++ ++̍4     Tw~d    	VD $  373#7!#!#7!##"&'733267!3	GeeG0GB-rEXw{+}j kkkk""ca~j  9b "  3#7!>32#"&'7332676&#"hHl* H}8+_DR[n&Cz"sjVln!!`Z{Ï    6 ,  !73!#!#7!!!"&'332676&+7!3"I-{E.E{-I<1N&-uc?p"&_ۥj`V89DǬfj    6q  6  #7!32673327676'&#733!!"'&'&'&7_%FHR$T7Rmk"&GH @@1NON&-uikc>14!f]LU_C,dcfekJVyx}|9<BF    -  6$!2#6&#"6733"'32673# &76%&)Dud8p`'=p^Շ!&p8xu' B23ސ+T)f/32ħr    #C )  "&76$7.76$32#6&#";#"32673%^l3pJqc2_nw2H#!}.,~r|fƟ|}       	!733267!733##"&.rEXwx*#˺1GcamDk"  9'    !#"&'73326?!733%% H|8+_DR[o#h!!`Z{hmDkk     C   )  2'67&'&7676!733267!73!!#"&D(E^0='.rDXwy*"˹c1G7#,uLT"&9F'camDk"   '  ( +  2'67&'&7676'#"&'73326?!73!%66K&
3 H|8+_DR[o#O,#a=C.6!h!!`Z{hmDkk    S'   #7!!73#7!3!73#7S8j >jEjO'ߦrijjSj     D -  332676&/.7>3273#6&#"#"&'Ajv|P}cT)	j>jqutK~kg*	Pwv]YFT3-.f .gtRRCQ*-.o / c  	&   !  #73333!73!3!73!3!!"Z=S#>k$,$jkjjHjjHj:    ED  + 9  "'!"'&5477632676323!732674#"32674#"RlɰY>C:!: ~&]P7~&]P7wSy2:`CjIB1B    c	]   +  #733676$3  #"&'&'!3!2 #" !VKuE=D#vNS%k$<@@@@jk>bcVobcdagjkQJKQ  EBD  , :  "'&5477632632 # '%267654'&$%32674#"Y>E:oL1j,5,5~&]P7wSy2:bbiENchQ_@thPa@uB  O	j  #  3!73#7!# 6#7!#  '&7%!#?ؤXGE88BjN#djj kkkkjkM  ED  3  32674#"#"'&5477632326733!7#&'&~&]P7Y>E:y"z#s%Hk@	,BwTx39aZQ="HNCjjod c  n    #733#7!##!3!"ެRk$jkzkkj    EaD  )  32674#"#"'&7477632$77#7!!~&]P5װY?E: Y9zmx,@wTx2:bCɑkd c  n     !3!733!#7!#!!##\";U*Ǭi:rMjjkkkk[     =YD  6 <  #"267!7#"&76$3!76&'"#7>32!67#7!3##6764NN88Kk xn#_*hV_^)E!z<D#&x%KI!/;:{p@ArsJFIydb))nmϕkkL?S|y6    V  "  #733#7!##"&'733267!3!t"~u)C rI7T|ZWk$jkDQkk/""dj     E9(D  A  32674#""'&5477632367#7!#"&'7332?"'&'~&]P7Y>E:y"zh ~yc[/_0(^A;,BwSy2:bZQ="HO=kE;*"d    /j   =-D     \    #73#737#7!#3##7!#	3!3 G9Avj}kk}5kk3jj  U  d   	3!##737#7!!!#7!'ޫOi+<Ă+jhzvjzekk       373#7!#%!73Go0{HjMkkM         %3!#7!7ijjIjI   ( 1  "&'&'&7#7367676$3 3#'276!!'&#NZ$BRuE'$GSvB#0U\h*R]dapzzrqbcտzzob22l%ܜ D   &  '&7#73676323#'2767!!6'& koc8oc6ٔcV-/52T/5cUkوkيbuggufttf    k
 ) 5 A  "&'&76$3 676$3  '"&'&''2 #" !2 #" NZ6FuE(:HuE=D#SSvN2;Jv<@@@@<@@@@dapjpbc5>F=bcVob22da>HH>b22lQJKQQJKQ   fD  ! *  " 32676  #'&''26& !26& bUn
boהXiXjXiXj32d88   V    3!73#7! #*J^g]LN5'$jjkD  [V'    ##7! #6vMJ;i]<8'vgfkp75  bVG   #6!!##7!>2G=qoe`{'`°yjkrs     fVaD   #6&#"!!##7!>32a3j
?K#^Sh%Lz-`)ONjVhiok     z  p   #3!73!#pV0{Hj kku     U;'   3!#7!!i~jj  bV   #7!6$323"&7&#" b`{'` <m?[!g9l0Vkrt{yw$   fVD   #7!>323"&76&#"fh%Hl~)@?[ 4&Dy#VfklnycÑ     bVG   #6##7!>2G=q`{'`°yqkrs     fVaD   #6&#"##7!>32a3j
?K#Ƹh%Lz-`)ONhiok  mL   7!!32673#"&'&7767wgQ@@NkOZ5#C*,^ww*Xdap[%   i'   7!!32673#"774+cYjw3H14kk2t4|}3  !   !#71{1       #ll+      W   V   #73#7!#7!#3#6+3SjdE9j kf/kkT!j  V<D 7  3#7!>32326735>54654'#"7654'&#"h$Hl?&a;<6!n2IdNRj*S"y#sklne=fDT

3<G8`Vp^pRFT^AX;hD>"H  u   #  "#6763!#!#7!#3!73!3!73UY$CuvbddG|}jY[XL$kkk jj~jj o  '  !7!73#737#7!#!7#7!#3#3!73!3LxixxxowwoxxxixwFFwo;Dn<<nn<<nD;;h;  7    <  26&"%674#"627673$'&'#"'&547> 67672|7B{8TFTv$&cI$@U^AF	kF0	&E	jÃ  %E`rD5"=#-G2#V
VV<V&,V
Vr89     '   #73#7!!#7!#!!#3^ˣ˷hiTjQEjjji          )73!#3!!#!#3}${`{$a>({@jLk          !"3!73!"&76$3!#3ky~k%&2rj#k     O   #3!	!73#7!#3#7OM%hHˍ5j k'k jj~j   qm   %3!73#7!#VHGjjjkk    c  
&   	3!7333#7!###RlBlljkkj99\kkB     F  #"&5467>732>7654./.5467>7>7!
6OkF

XgG+62&
b*7-]M0	Ivԡ^(`.Asc%?C(El}OQA=<ro5j2cdf63&m :;>A#4r\*R        R  654.#"32>7#".5467>7>54.'.5473&/M8\`B1P<\_> ubs@	3Kfh)#!1'"!'0F^8ek0O8JbB|4,J6MT؛V>rd#Y&=x`A@S	*;,&B+!*6$0~Q<gc]       _  >54.#"532>%#".547>7>7>54&'".547>32%B\6X|_(LmENpW(YuFlU yhaa6
OI2UC-!)7	HvkL}Y0LvIL0R"Ba@6mpW@B`@)bafD#=siCBwe+'OLH 
42,$YA$ ;lR1&D^7&\9Af^ ?      m  w  654&#"32>.#"'>7.5467>32>32#".5467>7.#"#A5IRGubP".E.FmWEKGmL5nkf-kBkeY)@Yp\:Q;,.egf/Vb4"h\h9	.5:(3>(HoXE%-c`XC'Jy\`G|W0/A'5p1$B4%;*5C,[3i/L~^6&6""6%9oh9|C]K_'N%Dsa&
HvJ86	#.=N1-<    > N  #".547>7326767>54.#".5467>2MxygxB=NXVO
21*oj$>}?'BV./h[F#,0'OA)mģu@oo87cT25ClS<)q6J\4B0\`{~	(7!7N0' 8Pg>)l_+)QwM40       h  #".547>732>7>54.+732>7>54&#"3267.547>32rpXV
RpA%3&'CZ3?n^K&AT-Z)U'b_S]c9seO%m,L8 pbNyKWmy:5]F(	vF0[V+$EyaCm9DO-8&0@&'Zj#C:S3 L|\+IS
-]R#9N/"bb1$MvQ,.\\:1LkI#I       1 z  >54&'"32>7>54&#"532>%#".54>7>7#".547>323223>32&#"GB$D;/$1.H8(i`@zl\"-J7_fD+&sar>=MX.?cD#^~KRqF)
	*Zco>9B/6[ 6`H*
!6.(H;*%+K<Hw0uj:zB8/P;"X^]Czh.00Gub&&C^9-.VzN%1L^.'4LUyN$>CRnP&L&    J   X  >54&#"32>%6>32>32+732>754.#"#".546&1Se[bM()3FT[mY4摄-,`\O]j9%&<kQ(=4~}3O1E(7HR'
0c\+\gqgabnhCsWW,A, Wy\iS?FZ4	:0C$+itx9C{m`   R   ?  #7>7>54.#"#.54>7>32%7Mmc&IjRB"*F4]lR""#+$}*8!Ha|hv`)@[+,dgh08cJ+n9@Gr B@GlTXzGScQ       Y  #".547>7532>7>54.#!72>7654&#"32'n\Kbw}14*"j{W|\G"-9,)r{|gI$ 438"LSwL#UsGMzU-
1ք9,[`;FWX4QDQ[.T;TX1q2W1>!+=JV/F11L54KnS?8cT)T     	   #72>7654&#"!7>?654&#"5!7>?654&#.#"'>7.547>32>2>32	Zp|5:j\KPB/XK;
%+5PW5]L9(.
4b`*NF>3(@n[NtT0WyS=LFRfJ1W)YO> _fdJWN= Xci0Ih>
n\:BzkjPku;Z>C &)<GV,I+8$DJ$A[6/]/6!HX.G)-#FI)H_kr7;e,`c@*
	 .F`A"=*R@'0L6),#nLG?/H33M32K34H-8le)S+      j  T  654.#"326%#".5467>32>7>7654&#".547>32$$>R.@xhUyh $]o|C
Wq@%URE
9o[@#)@Xkpo1=ZFY3<pe:j)}t͌w4@vf(P*^eE$"('O)6k57<8,/&&O*!8^K:&05    <    i  654.#"532>%#".5467>7>7>3232>7#"&'.'.#">32$<O+;zp_# ;Q0<umb9/y\uC2*RoVA>;	%A$CDF&"$RX^.5q6	(N!4*#%.faRWO
tI?O,3jqV?R0#i:$Xr7FacNLj`-
	'>-Q?%&0O9SN
3D(4ik#H     ]%b s  .#7>7>54&#"5!7>7>7>7654."#.54676>32>32/"Tbmt|?(9/-7?L.%#V_d_Y$&AI6cQ<
#%)
-6KZJB<=@%#4:%R5nY9.z8eQ8'afd+W`3ӥ~bN$!8,<T30W}Ujx+Li?)R*HE.=IV&M%QT81 -H3"LzW>[a8	`~H[;=[;:Z> 8qtQ       ' l  #".5467>732>7>54.+732>7>54.'.547>7>735#udyD
QrL# 9Q2S}^D
!8G&(1eWA.J_1:qZ8(Ha51ke[D(Qht66[A%
$͉D2a]!C#HpV@!-53-/K5H+.al-L!Aa@0H/
'(E9; 1E/#GfG+:RmF$M+      ]  #".5467>7>7#"&'#"&'7>7654.#"32>73,yeISoB3U;X;=veM1g2)P&'<?]vE!8a*L000)<)*B.L0D&bnw;TRlE5^M&RxT4O*[%:)9#?jQ>!gG+3aP8'-0*SA'!0:=2&*     2^   #72>7>54.#"5!7>77>7654.#"3#.5467>3232>7#"&'.#">32>32?hi{*@o]J&<,%caS		% 
3HQCr]G 8K+(yLpK%Zzy1+P$IoZ!\J|t85o9$M!Uf%(RV\27kYA(gor4Si;hƫ&HoH5'@.<fM
%2:=!HULSK0#(7G)Fz_N|0@U4]|S2d1tָN']=U6
9^x@!-6T:<U5(Y  {  A ]  #".547654&#"#7>3232>7>54.'.5467>3"54VoC\M%+f7.F^<lt	;V8Oy`M$	#:YwJ970#+"H:&Gk\;7fY8-{1!**N;#srA#yM8L/#c)>%9-$!)0!0cQ3$$#=Nc?6    :      654&#">7.54>7.5467>32#".5467>7#"&'73267332>7654.'[%-* $#1!?[;#A_<9>DZk94X@#
 /<'ĻVuc܎BF\wL&!#>6%j9,B;84,"mc( BgF1N6=B,+ !'*?O,4oh\!F;E]7)C1&&6*!;,b-Z`6Nq4x6iB?A	wMkt+\?P:67ocP?CB#@          #".5467>732>764747>764&#"7>7>7>7>54&#"#"&547>7532>7>32>32u[yGX\6/&	"8I'NrR6#<>=(.,:%
"+##;;>'Q_	

F!BIJ!AO:?I-=hL*	1o˛\6f]<PrJ	}<Uj:"?8P3 6EJJjj9@#.-	/68	HS@GD%>P-]Q"!&U&"	LV*
OM.<$@fI#M,         654&#"532>32>7>54.#72>7>54&#"#".5467>32>32#".5467%TSElUBPXEmWDEqS{_2<cI$^_CVV$;9<$
Rk}9Qk?	F^uK)c`Q+\XLbi6

WpE/Q;"ʊG^d[7ljM0[W7o7P%2$DdABg )7nn/WJ9'!H+/s.TjK(Awd&O'LoQ-$>.)<'+U~R"N%YwV.E^<6?\o?/X}O8!       [  #".5467>732>767.#".547>32>75>7*'*&"#'%"yx]]fJ!=3*/K`0Mz[>"G#$FLT2%L@-&&+![xE9hZK

6!#!Ȅ@HxZ,hM$	v%;U;.@'@gB@X7!-	+)5D,;HCjJ' :P/)N(%?(      p r  '>7654&#"!7>7>7>7>54&#"#.#"'>7.5467>32>32IS}LeC,'MT=gR:#(\dA`ND#";P^g45g]O: ^6oru;[e=<FP/Xh9.ho#cpy9O\3\5,k~Pb\f-Mh;;&+JV'L%35K].o7]'DkUC6/09H]wM9]A$bk5/%
(}b'M#Brl6R9K`8       Z  #".547>732>7>7>7#".547>7332>7>7>7!$vc{E	\T(9'	iqH|bD!$Y__(VrBDigItZA$:+#TTRC1
)}ǌJ0X|M+)O`<	~5BJ"D*OJ6T:DC5bae7&@/*QvL-,Rxc**!L`}R3#?2+;BF!MP4  )  z  g  >54.#"32>7#".5467>32>7>54.#"#7654&'&>32>32	 9O.H{dO+^dCtb$ xdq<Qk~E(XQB: (2Hm
M?*;%Wjr21S@*GQY-AjL)u'F>fH(,cvedX%f\~ǊI8mh.j4XdD$#7E"y{
!
]gPZ(<7+>%!_i7)A/-A*+Je9'      S  >76.#">32+732>7>54.#"!>323}(9N+&LB4QdQ{K\su,?"62=FD@6L-'RQK<+ >#ob=nH;Se5s1+8Q41YXY1R_*]l*W/glI%0Np`9a%:Q1(7?E"*k) ;U6
&A8+   ,   }  #".5467>70?>7723267332>7654.#72>7>54.'.546735(juG
H`yH3zM9$/+V&l)6OA80(He=QoS6H(/1/>:_I2$&)4!B6"+NwZ.XD)RAE~n-^.!F$FFU@08+bz]^5d$HhB 1gp</6V="=+Ke;(%#'+3!)#)3A)5\OB4Jb?/  "  e  B  >54.#"32>%#".5467>32>7>54&#72w2I-9sk]#iiFwaH!qnp9	VoC2WH65yz*cq=*V4<S5"`wUrz7e/nNO\&G"cbA!3F*ff#@,(MrJ/  4   J d  >32>32'>54&"#7654&#">32#".5467%32>7>54&#"$VxI,M=)	IS]0*L;"&,-1(K>/=5 B:+s"`ge(ZtC	&xfyC
	%AV2Jw_M ph<s\B{^8+@*0A)$Ed?9PC`/I3P[0!621!3!B4 9lf#W&U6g`$H&BEp+EX36r}@i'o[?r^        2>?.#"%#".547>7532>7654.'.5467#".5467>2>54'#"&'732>737>70=AA/66$+68,Ys43ni^G*
`|@':,#":N-@xcH$	WA1H/5NdxD7H?|3Dd 2;B !A8-t#	 ',URz44o3!)"&?6.1;H.'ReI/#6J_;+(M~aDp3BV;1",>'<Z;<-'D<6.26/HQ3C% 0YC(UHcB7:WVz
<1%>5-+Y)u
.      4  Y  32>7>54.#"".546764&#"#7>32>7>79Z@ReH	5P68ykO6(q9

!q5I`>+C-
!AED 1;9^L;EoF?4)C/NT%JC91A($B]:I7fY'N)+7]oQj?#B\9&X+FL,$,4+[m[   )   #".5<67#".546732>7>54.#"'>76&54.#".5467>32>7#>7>54.#".5467>323267>54&#%Lh}AX{N$Aqf`0AhH&M.N:!l	*9-H7%
/#"f4fioxK.I48DXP#C[r@QrC'Af
6H10Scd%.N9k	+#LqRZ*>)<eH)_
!*3Ql?67lH!:N.-2&+FW*&F, &BbI5)"$WSC-	%=BE#%:fK+Z
1GaC%&$90R),>R26R96@Pp`*%&WZh+<kO/=G"(6>I-#N   F   #".5467>7532>7>54.#7;2>7654.#'7>7654.'.546732v phI		"נ

"?X6FpW?*<?K::ID7*=E+.+=wSVI*SyNPzQ)c&C0A	.AP*!;+-BS0DR݃r3!L~]G#p's
'6%#@4F+"JuR%D<D"	+	4*"$6
9.'A3/	'-J5"8-$%4"
,?- $}]2    @       4&#">7#".5467>7>76>3232>7>54&'>7>4.'>7>4.'7_18-E6,YvN.nH*4iB'1D{jN,	
!3{c|t
I|7Wn8OqH	KUHLKV/$@1+AOJZ3(<(NFxX1#!1Z~M0AYCWw$R7AVUH0SzQ')B`R(\-&Y&B?NmkC"QtYH$4e45h59b&Sg8$7B%=#' F ,'	="4? CdL?;;!8VvI2    K  >54.#"7>%3.'#72>7.5467>32*,2M4Sk_0,70v77J\ju>G?>`gS+Ev|c=DLU.3H/)gwMZn>M5I-HK9TY-W=yg&5J./J3-wJ9i/}L!-jR       k  2>7##".5467>?32>73#".5467>732>7>54.+7Hs`M7	P]c\NM[2
);'":/Nz72|DAY7'p]~J&ə(!	5Q8K}aG <U4~%F)E\dh//-'+K9#&5'_
	(If=_IUa5!A с8(U\>'>MP5*H32^T==kO.    A   #".5467>732>7>54&'2>7>54&#"#".547>3!!"32>7>325l~jqJ2SzV #)H_69iWBlf&	@HqR7H:3}BC8%>-RmG|))J<,,$EMQ*1d`Y&(B/	)?*jl6+SzP+9^QDw/79
2/<#!CfEHj&JA/%?V2!3%"8+&,XsC%<,)D2<!t7*8J2T     # j  32>7654&#"5'##".5467>$7>7,5467>323>7'#23>7/Htm+RD0.Z\;jV@2isUYn!.m{B(
xqlf0Aa"" 
=af.!#!q;\B0K?!3")+3T>+/>%@?&KnH*ai8.,.2X^1<^B8 '++-        h  >54&"32>".5476>32>73>32#"&'#732>7>54.#"3I)DT&a^N$;K(4_VLZq?.p?GE	*NGBaZ+-q><Rt(c$4%	2F(2_XT(2E*'|FMRBmP"'8$4t2gmizW30Ck(+9i\HUK!N \|K.@% 6-@(9؟O~3<U6     >   '  6#%677%#7373%$#767%+@f4g/A!O
	LJg.I@GcQF%5,P1"(;H@2G>>D3 F    n       , ) 5  47%.47%63267#'"632 #"'&73 65# ,@&I4|WQx-Z=>h1[09=oM2oM+ZYENLWG#[+Y;	jEN͙kujR3h  H9D J      !  33!7#"'&547#7!32677!߸$Hk@'n_x!z"Y'Cjjoe<gCU9kgD="H    H ' +  7!267326733!7#"&'# 477!^#"s#"s%|oIjqNv$EPjKt$CPBi{qBS:7     H   4623273#"&M`1.YY^eX5B=!lk  ]/r   46232673# AD!&+hFD.6)1#jTY    V C  !#72767#73767632#654'&#"!767632#654'&#"!!#72767#ܳi35ư#nnC>(a"Ogj#nnC='a"Ogj)#ܳi35b8<kZ[.'qZ[.'qkb8<  V &  #7376$32'654'&#"!3!!#72767A&WT*^*5{Ǻ#ܳi35k`="*dCjb8<   V&   #7376$3!3!#"!!#72767A'ף'#ܳi35k`Vjdkb8<  V F  !#72767#73767632#654'&#"!76$32'654'&#"!3!!#72767#ܳi35ư#nnC>(a"Ogj&WT+])5{Ǻ"ݳi36b8<kZ[.'q`="*dCjb8<  V >  !#72767#73767632#654'&#"!76$3!3!#"!!#72767#ܳi35ư#nnC>(a"Ogj'ף'#ܳi35b8<kZ[.'q`Vjdkb8< V :  #7376$32!!32673#"'&547#737654'&#"#72767A&Iz1VZFHS$4 ,*5I|#ܳi35k`Hk]O. &U_G+P3Ak="*3b8<     Q l  &5476$32!!32673#"'&547#737654'&#"#654&#"#"'73327654&/.547>32
!W68
ZFHR$5 *8hH/&-jeu'A5%ʳ0jA}Q"A	())+/&):rk]M0 &U_G+P1CkrE3En<"IgF*-/G21nWX G5-/nA     TL  1 5  %32767654'&#"3>32376767654'&#"	97./
 79\3a-r~:'۹@{2酅$	QkTecE6>h&'''7&'N{O6Q&++3vv-({Qkb  _ $    c %   j &     '     (     )   r *     +    J ,  V -    ] .     /    [ 0  : 1   j 2    Y 3   {O 4     5   ;  6   `   7    8   h  w 9      :  z   ;   e   <     =   D=E D   W E   VUD F   ( G   W`D H  V$ I   H9D J   g  ) L  9[ M   T  e N   T  < O     	D P     D Q   VzD R   XVD S   VD T     8D U   D V   p;q W   ' X   M  o' Y   s  ' Z     f' [  9' \  A[ ]     '   9F'  b  _    c                       j    J    ]  b  _    [  :       j        Y   j_       `     e     r    z        F!    3"   3  V   V>C*  V9+   T',   7r-   42.   eU/   VD0   fj+1    -k'2    "'3    V4   [V'5     '6   FU7   VzD8    `'9  VtD:   U|D;   h'<    -'=   y'>   oVi,?  9=D@  VV'A   G#'B   h-   WTD`   hw+J  D[   FVN   .RuD\   G'O   df   3#uf  m    2#"'&7676!2#"'&76760	
((21
	)*/	
((12
	)*##.2!""!2.####.2!""!2.##    3#u C  !  '.#"'67632327673#"'+&' `?>U$1,)	a?>^C@>.d;;		/i99-       #~u    =   3#'#Xtt  z   373-tt   p   #."#67632"^`v^+\]7667u?>|     32673#"&^`v^+\]7667u?>|    D .    2"'&76^8	
((d
	F.2!""!2.        3#3#
uSu   m    #!#3uu ;w'&        <'   %3!#73#7!3#4ZKh`jjjkj A )    62"&A[]0[^/N<GK:  9'    #'# 5476!3#7!'&#" cqs(dˮf'oLIKL:kqqZ{
M   K'&  {   4x'&     V W  2767#73767632#654'&#"!767632#654'&#"!!#"&'7332767!#"&'73si35ư#nnC>(a"Ogj#nnC='a"Ogj)#ܳC='a"Oi35#ܳC=(a"8<kZ[.'qZ[.'qk.'8<.'    /  '654'&#"!3!!#"&'733267#7376$32^*5{Ǻ#ܳC>(a"Ogj&WT="*dCj1.'qk`    ' '  !3!#"!!#"&'733267#7376$ף'ٽ#ܳC>(a"Ogj'Vjdk1.'qk`   Z  !#"&'7332767#73767632#654'&#"!76$32'654'&#"!3!!#"&'733267%lnC=(a"Oi34ư#nnC>(a"Ogj&WT+])5{Ǻ#ܳC='a"Ogj1Y[.'99kZ[.'q`="*dCj1.'q     R  #"&'7332767#73767632#654'&#"!76$3!3!#"!!#"&'733267!3%lnC=(a"Og53ư#nnC>(a"Ogj'ף'ٽ#ܳC>(a"OgjY[.'96kZ[.'q`Vjdk1.'q    9: &  #73#7!#7!##"'&'73367673*0Oat?>7*_!}@80(;j kf/kkyPc!>"-?9j  4)D = K T  %#"'&5476$3!7654'&#"#7>320763 327673 '&/7#"326654#"$Re}ZB	 *;t#_*hVX~j";t9f(hdoM+퉝'8tspㆺ9?[X[Ck',I"K0Ccc)),>Cce&"^>n#?QY>vzF/AB|  ;<   '4632#"&^GDaaDG^F``FDa`  }4& q(&   v \   cS3'pU q $=  XaB'p,[ q   P	3' q '=xP  cS Z'pUqld  cSZ'pUsd  XaZ'qhd q   XaZ'sd q   7j	3' q '=r\  cSX'pUu&b  7jf'p,r\  qce'uux|  7jGZ'qdr\  6c(9'qtCtu  6c4:'s3Dtu  6c+Y'tur*p  lV+Y'r*pwP  VZ'q`dwP  VZ'wPsd  V'wPj  6c'tu  ^h~&qpa ]  9tD  0 <  6&#"326%6$32!!#"'! # &767&767&'&32$76!"l|{n{|D# sTG#sSGF5%m1!hf,OkbAB<켓Mt,OVqh8lU~_f    :   !##"&'733267##7!wɸ0GC.rEXw{*yRjkL""ca)kk      	!#!	!3!@I({@5@{.,LL  D    %26& "  ;.(YjYjcTct)mF8c32i!B?w     '   	#7!#3!733!73#7!#kڊlt3kkw7jj>jjkk    '    )3F'D%    fjD     #3373#726& "   
k>kk>kXiXjbUbj>jjjb8c32    `'     %73!3!#!##3373#7Tk8f8kBPk88kk>kk>kj"jj"j>jjj   @'   	!73!	!#7!7j8Tf)jO`Xj' j   h  '  ! '  %3!737&'&7637#7!#2'"!2>&#h~4i~4^{'h?{'gjjjdWiiXdkghXiiWSȎȎ      D "  %373!7>76& !733.76 32 j)C($$Wm(C)j㍆,m,B.ƹ.B@
      c  u   A   u   BR  u   ' &  6+7#"3!73>3!#"&'73326.B(+`f,Ռ!ع>2%j?KGl'j>jj
k,#r:s      #7!# 6#7!#  {88BBjkkkkS        #  #73#73#7! 3#!'3 76!%6'&!#xiR~I#?+h|ܼije}kũ}j!}   $ ,  !#7#'&7#7367632#7!3#!3276?6&#" I{^T{z6{#kf,2^\&&l^S,d_k֊_d)j5kcqddkpb   i *  6&#  !!3267!7!#'&7#7367 !2A~FbqhKmwEYD}x88kMMԛ}b;<    9D ' 3 ;  73676323##"&'73326?#"'&547673267!!4#"U>]Y.iQ,`s}&IuY?	1%:Imck݃"k9&&h`ŏd_wTx39'%S @3Pms"d    ^Ц_<      +    +I:(            m  I( d              f        7    D  P3    !  ( J ]    -   G D    J   c jjd r)5P1  jb {{ ;V `  h9 {H e      o D W{ V ( W H' b g{ T T '  V X   7 p'  M s 7  H   7   h ]     G   J  p   5 5  3 [   5 ^ ) g ^ ^ J Accccc<L j))))u  j j j j j    H ehXQ D D D D D D E{ V W W W W     6'  V V V V V ' ' ' '  +c Dc Dc D j{ V j{ V j{ V j{ Vj (u ( W W W W Wd r Hd r Hd r Hd r H' b' b) m) n) )  ;) iD g5{ T P TP TP4 T_ TZ  '  '  '  O `'  j V j V j V	 w V   { ; { ; { ; { ; V `7 MV `7 pV a7 . '  '  '  '  '  ' 9  sH eH e777 Wu  `{ Qujv 3  ^ k d h u c) ) U  '  j e SQ u bv 3  { j E7 dV 7 `V  '  r  e7 / 0 ~ J w S\ K K\ K
	V (
 T
5	{ c D)  j V '  '  '  '  '  ic Dc DL E sd r H T j V j V
	V (d r H	; ' < DL Ec Cc C V V) ) b i U i U   '  ' { ; V `7 p,' a ` D 	k 7 c C V j V j V j V j VH e   { 9 c{PV; @7  1  Tc W5B   :H ' g Vg : X{ .{ j- bv 9 O i VK 4 	/  fw  H f  ' ' c'  #  ' 4 k    & + fR f X `i  g    !, 7 '7 h' , `  M s>  {{ ?J OJ J ]  k 2G 9U Xw _J OJ  (D b H m  p& Uh T /? " v Fp @ [q "P I: o o  u u >? '         \ B  p  oB   &  u u # \# ]  I  F n W ` L  ? 'A   Q       Q                   &        9    1        &    (      Y    c  M  >                |    I    (  7    G                              	    J  J        T              1  +  @ V !m W: o: o  U  { ={ V{ =5  c 3 P   .  # c j)c1  jbV `H e r{ )H eg VK 4 #  g V  7K 4V e  f# ?3 [ h F VB{ v hm   oF G#   V  G  f h~  ~ t F G '   { | 3G B > 4 .{ V{ j{ W{ <h + j1 / j /d (L r{ ;))51 ;L 11 jb jV ` ; o{/ 	!	![ d /	v D d W  W W	 ] 5' '    E  V'  X{ V C 9     U P [ { 0 L  W W N { W  g {  ' N ' '  v 	  \ E
  8 " jk V m h m h #[ G`; L 	  ] 51 1 # Z Q 	 	 j{ VV ` H e yH e y{	 } ` H j T' b)	 U U  D DL E W k i k i	  ] 5' '  j V j f j f /{ 0 ; ; ;/  L   ] 5 	  { 9  s{ }s  )s  e } 9. u   n  @{ d C .  HZ T d`   Vd j E 92 U   y Fu  8    =     S^ -p A  < ; V' [y8 g1 ~ B' 
 p '$ Mp  ey $O   R 27  c  g      9 {@  e  o H3  < -  g  ! 2     ;g : [ I  X Wr~ Y V a ` 8 h   ~ } @ q{ 2 Su ) P 9 IE 5+ M K b 2n \{ fm A X9U  V{ '- f- ^- d \   m  km  [O c j> M t77 ? 1Bm  
 He&X)hh k! C d\ =? . U + Vg 6 :3 %3 @ @ @m  @3 @f / % /1 / @ @ @ @3 % %1 #X  / t & F A [1 # t F  e# @ Xg % ( ( m  $ R1 S < V N    j   = =  e H1   4  1Y Y O ]     C      Z  
c C V W V j{ Uj (j (j (j (j W W V P Vd r H' a' b' a' a' a)^)  S S SP /P /PKP1 1 1  '  '  '  '  j V j V j V j Vb Xb X  M Mx{ ; { ; { ; { ;+ { ; V `7 pV `7 pV _7 V `7 ' ~ ' G ' O '  '  h L h M9  s9  s9  s9  r9  r{ { H e777' a7 p r: C 7c Cc Cc Dc Dc Dc Dc Cc Dc Dc Dc Dc C W V V W W W W V) b) 4 j V i U j V j V j V j V i U e S e S e S e S e S '  '  '  '  '  '  ' H eH eH eH e Ug Vg Vg Vg Vg Vg Vg Vg Vcc t {ccK 4K 4K 4K 4K 4K 4 x  t  xG          x 	 t	 	F x	v   # # # _# h# # # # + x  t o x    V V V V V V j  t	  x           Z   G G G G G G G G ?	 t	  x   g Vg VK 4K 4  # #  V V   G Gg Vg Vg Vg Vg Vg Vg Vg Vcc t {cc         x 	 t	 	F x	v    G G G G G G G G ?	 t	  x   g Vg Vg Vg Vg Vg Vg Vccccc    n      K 3  P     n# # # # # # ))     n      H eH e^ . R    o G G G G G                       V                                J J M  M  M       o 8   o% 8   l 33 V                         
    )   )  3 3 g8 J      !V    V      !   !  dN                                               5 / A5 5 5 #5 V5 5 9 9 9  f> [5 /5 ^5 5 5 5 5 #5 V5 5 9 9 9  f + @ @  @v F % L /> [3 %  %u> 4  V j a ' b' c   r<3 au xu {  ^ ^
 ^ ^  ^    ^  ^   V ^)p h h
S h h{{
{P jj1 g g g g M M	 M2 M g  	  T{ V ( 	 ^j	 ^ /{ =  / L u L-. L u r N L u L n L u L u L u L L`F Z  u   F F	 u u	 L Z L L u F F L L u L u L.  . L u L u L u u u L u u   u Z u L u L L u L L u L 	# hW |W | 3 3    ^ 5^ 5    ]p    = = =j  T      + / /	u /             D D                                          ?    ?          ++ *   xZ 
                                +  5 < < < < < <xxxxxxxhh''''''''''''''''''  '  '  ''q''''''''''          l l   g g ' ' ' '   ' '   ' ' ' '   ' '   ' ' ' ' '  p  p r p p p p p p p p p7 p7 T         p p' ' ' ' 3     ' ' '  p     p p p p' ' '     ' , , , , , ,    , ,S,, ,,,C, ,X, ,B, ,X,   ,x,     u 	     e D ux Lx ux Lx Lx ux Lx Lx ux Lx ux u  uuuuuuuuuuuuuuu u u L u L u L uTT L u L u n n n n n n n u n u n L t L u..-.- L,.FVW r h e r(G L L L u L u L F F F	 F u u u u F u F u F  u  F F F F F F u u   u u u L u u L L u u L LZ@    /+ /+ /   / / L L / / L u u L L    ' ' ' '  Pb ' c U7B Z1 	 qBM J	
  q@  I fm  9{ b/  _C  q x x + x k + x w) x  x) x) a x  ' x+ x) x2    s ai  R  ( , x xP J B  :J { j E) #   P	  ]	  T k fA   Q Q Q Q Q Q Q Q Q Q Ql=4  	  	  { #c @    	c E	c E	2Ow EcE EcE = E /{ = UK y tT k f [ b fP z U b' f b f m{ i7!3 /   ue 7 b 1)	cPg   g[  Jg Rg 
$   < ]g  2 {x :    ) , " 4i (fH @hg g ;  n , H'      VVS                                                                                 4 c jjd r)5P1  jb {{ ;V `  h9 {H e D W{ V ( W H g{ T T '  V X   7 p'  M s 7 {c j)c1  jb jV `H e r{  3g V  7K 4V e  f# ?3 [ h F VB{ v hm   oF G# h{ W ht F . G  e  m    C    =  z  p    D    n ; A 4VV  4, xcxXxxcxcxXxXx7xcx7xqx7x6x6x6xlxxxx6       fl c h7 J AJ B'        O  
  7  9k  :  ;  <   & : $ 7 $ 9 $ : $ < $ I $ W $ Y $ Z $ \ $  $  $  $& $' $: $ $ $ $ %  & % & & % * & % 2 & % < %  & %  & %  & %  & %  & %  & %  & %  %  & %  & %  & % & %: &  &  '  '  & '  ' 9 (  & )  )  )  )  )  ) $N ) Du ) H ) R ) N ) N ) N ) N ) N ) u ) u ) u ) u ) u ) u ) u )  )  )  )  )  )  )  )  )  )  )  ) *  *  & *  * < *  *: -  - a -  -  . k . $ . & . 2 . 8 . : . < . H . R . X . \} .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  . } . } .  .  .  . . .0 .1 .: / 7Y / 8 / 9 / :N / <} / \ /  /  /  /  / } /  /  /&Y /0 /:} / / 1 } 1 } 1  1  2  2  K 2  2 9 2 ; 3 a 3  3 a 3  3  3 $D 3 8 3 D 3 H 3 R 3 V 3 D 3 D 3 D 3 D 3 D 3  3  3  3  3  3  3  3  3  3  3  3  3  3  3  3  3  3  3  3  3  3  3 3! 3# 30 4  4  K 4  4 & 4 & 5 7 5 9 5 : 5 < 5 D / 5 \ 5  5  / 5  / 5  / 5  / 5  / 5  / 5  / 5  & 5  5  5& 5: 5 5 6  6  K 6  6 6 6  6" 7  7  7  7  7  7 $ 7 7 & 7 Da 7 Fa 7 Ha 7 Ra 7 Vk 7 Z 7  7  7  7  7  7 a 7 a 7 a 7 a 7 a 7 a 7 a 7 a 7 a 7 a 7 a 7 a 7 a 7 a 7 a 7 a 7 a 7 a 7 a 7 a 7 a 7a 7!k 7#k 7& & 8 D 8  8 D 8  8  8 $ 8 - 8  8  8  8  8  9  9 D 9  9 2 9 2 9 $u 9 2 9 DD 9 HD 9 L 9 RD 9 X} 9 \ 9 u 9 u 9 u 9 u 9 u 9  9  9  9  9  9  9 D 9 D 9 D 9 D 9 D 9 D 9 D 9 D 9 D 9 D 9 D 9 D 9 D 9 D 9 D 9 D 9 D 9 } 9 } 9 } 9 } 9  9  9 D 9 9D 91} 9 K 9 K :  : k :  : N : N : $ : DN : HY : L : Ru : U : X : \ :  :  :  :  :  : N : N : N : N : N : N : u : Y : Y : Y : Y : u : u : u : u : u : u :  :  :  :  :  :  : Y :u : : :1 : & : & ;  ; $ ; & ; 2 ;  ;  ;  ;  ;  ;  ;  ;  ;  ;  ;  ;  ;  ;  ; <  <  <  <  <  < $a < & < Da < HN < L < RN < XN < a < a < a < a < a <  < a < a < a < a < a < a < < < N < N < N < N < N < N < N < N < N < N < N < N < N < N <  <  < N <) <1N =  =  I  I  I  I  I & I  N  R  U  U  Y  Y  Z  Z  [  \  \   7  9  :  <  I  W  Y  Z  \       & ' :      7  9  :  <  I  W  Y  Z  \       & ' :      7  9  :  <  I  W  Y  Z  \       & ' :      7  9  :  <  I  W  Y  Z  \       & ' :      7  9  :  <  I  W  Y  Z  \       & ' :       &       &   &   &   &     K    $  9  <             :  }  }         K    9  ;     K    9  ;     K    9  ;     K    9  ;     K    9  ;     K    9  ;  D    D      $  -            D    D      $  -            D    D      $  -            D    D      $  -                      $a  &  Da  HN  L  RN  XN  a  a  a  a  a    a  a  a  a  a  a  <  N  N  N  N  N  N  N  N  N  N  N  N  N  N      N ) 1N     &                                         &    9   &     &    <   :  7Y  8  9  :N  <}  \          }     &Y 0 :}    7Y  8  9  :N  <}  \          }     &Y 0 :}   O 7Y 8 9 :N <2 \     2  &Y0:2	 }	 }	 	   & 7 9 : < D / \   /  /  /  /  /  /  /  &  &:   7 9 : < D / \   /  /  /  /  /  /  /  &  &:       K    6   "" "  K" " 6" ""& & & & & & $& 7 && Da& Fa& Ha& Ra& Vk& Z& & & & & & a& a& a& a& a& a& a& a& a& a& a& a& a& a& a& a& a& a& a& a& a&a&!k&#k&& &0 D0 0 D0 0 0 $0 -0 0 0 0 0 7 7 7 D n7 F U7 G a7 H V7 I 7 J a7 L 7 M 7 P }7 Q }7 R U7 S 7 T a7 U }7 V 7 W 7 X 7 Y 7 Z 7 [ 7 \ 7 ] 77: : : : : : $a: &: Da: HN: L: RN: XN: a: a: a: a: a: : a: a: a: a: a: a: <: N: N: N: N: N: N: N: N: N: N: N: N: N: N: : : N:):1N? ? } $} - /} } } } } }  7 9k : ; < &: $ - /       $ - / 9 9 : 9 ; 9 < 9        9: 9 7 9 : ; 9 < Y Z &: k $ & 2 8 : < H R X \}                                } }   01:        ,   ,   ,   ,   l         d  <  X      0  d          T      |    <        	  	D  	  	  	  
  
t  p    @      d    ,        d      H    (    H      p       l      $  D  p        H    @    @    T                p    p    P      \         l     !h  !  !  "X  "X  "  #   #  $   $  $  %  &  &  '  '  (   (  )  )(  )|  )  *  *  *  +   +d  +  +  ,  ,l  ,  ,  ,  -  -  -  -  -  -  .  .  /  /0  /H  /`  /x  /  /  /  /  /  0d  0|  0  0  0  0  0  18  1  1  2  2   28  2P  2  3h  3  3  3  3  3  3  4  4  4  5   5  50  5H  5`  5x  5  60  6H  6`  6x  6  6  6  7  7  7  7  7  8  8$  8  8  8  8  9  9   98  9P  9h  9  9  9  9  9  9  :  :(  :@  :P  :  ;  ;  ;4  ;L  ;d  ;|  ;  ;  ;  ;  ;  <  <$  <<  <T  <l  <  <  <  <  =P  =  =  =  >  >(  >@  >X  >p  >  >  >  >  >  ?  ?(  ?@  ?X  ?  ?  ?  ?  @  @   @8  @P  @h  @  @  A  A,  AD  A\  At  A  A  B(  B  B  B  B  C  C,  CD  C  D  D  D  D  D  E  E   E8  EP  Eh  E  E  E  E  E  E  F  F(  F@  F  G  G  G4  GL  Gd  G|  G  G  G  G  G  H  H$  H<  HT  Hl  H  H  H  H  H  H  I  I,  I  J(  J  J  Kt  K  LH  L  Md  N   N  N  N  O  P(  P  Q  Q  R  R  SH  S  Tl  T  T  Up  U  V(  V  WT  W  X   X  X  X  Y  Z,  Z  [L  [  \  ]  ],  ]  ^L  ^  _,  _  _  _  `T  `  a@  a  b  b  c0  c  d(  d  e$  e  f  f  f  g  g  gl  g  g  g  g  g  h  h(  h@  hX  hp  h  h  h  h  h  i   i  i0  iH  i`  ix  i  i  i  i  i  j   j  j0  jH  j`  jx  j  k   k  k  k  l  l$  l<  lT  ll  l  l  l  l  l  l  m  m,  mD  m  n<  nT  nl  o  o  p   p  p0  pH  p`  px  p  p  p  p  p  q  q   q8  qP  qh  q  q  q  q  q  q  r  r(  r@  rX  rp  r  r  r  r  r  sl  s  t  t$  t  uL  u  vT  v  v  w  w  w4  wL  wd  w|  w  w  w  w  w  x  x$  x<  x  yL  y  z  z  {  |  |  }@  }  }  ~  (              `        8    0    8      h          |    `      T  (         D    ,        @  X      8            T    h    $    <      l    <      `    `      $    @      |    t           H    $      x    <    h    t      @  x  $            D            H    $    P    L      x    X          @  l      \        D  l              $  8  d            ,  d      x      d    $  d        H  t    ¬        0  D  X  l  À  Ô  è  ü        T  h  |  Đ  İ        L  x      ,  @  T  |  Ơ      H  p  ǔ         `  t  Ȉ        ,  L  t          H  \  p  ʄ  ʘ  L  h  ˄  ˤ      $  T  ̴    T  p  ̀  ̀  ͔    (  8  H  Έ         L  ψ  ϸ            4  L  d  t  А  Ь          ,  <  L  ф  Ѱ        ҈  Ҙ  Ҩ        t  ӄ         0  @      ո  L  d  |  ֔  ֬        ״  P  ؼ  X    p    0  l    D  ܨ    ݜ  ݬ    d    @  ߈      t             8  P    H    D  `  x        `    @            x      h  x                 D         8  P  h      4                        @  P            8    8  P    $  4  D  T          4      H            x      0  @    d    x   L      D          D         	  	 
 
 
4 
 
 4 D T d t    ( @ X p   L  `   x  d t  ,    4   $ t   (     \   4  <  ,     $  <  T   !l !| ! ", " " # # $ $ % % &  & &( &@ & '| ' (t ( )P ) ) ) ) ) ) * * *4 *D *T *l * * * * * * + + +4 +L +d +| + + + + + + , ,, ,D ,\ ,t , , , , - - - - - .x / / 0( 0 0 0 0 0 1 2( 2 3D 3 4p 4 5` 6@ 6 7P 7 8, 8 9X 9 : ;( ; <T =  = >H > ?@ ? @ A4 A B, B CP D8 D ED F F G< GL G| G G H H H I0 I J$ J K  K K L$ L Mh M N N O@ O P P QP R R R S T0 T U U Vp V WX W Xh X Yh Y ZH Z [0 \  \d \ \ ] ^l _  _ `` ` a0 a b c c dT eX e f g h, h i\ j k k lt l m` n n oh p< p q rL s, s t, u ut u v wh x8 y zL { |$ }P ~< ~  X 4      4           t  \ L  H  t       | H    X     T     P   h   ( |  p <   ,     0  ,   D   h   X   H       D   h   D |  ( x  X  , l      l  x  t 0  Ĕ  4  \  8 t ǰ 0 Ȑ  H    ʐ $ ˌ    ̈́ ͘ ͬ     l ΀ Δ H   D Д < Ѹ h Ҽ d  d  Ր  d  T ׬   X  ( | ٴ t  ۜ $ p  | 0 ް < ߸ L   X  D  $      L        , D \ t        4 L d |       $ < T l        , D \ t        4 L d |       $ < T l        , D \ t       $ < T l        , D \ t        4 L d |       $ < T l        , D \ t        4 L d |       $ < T l        ,  $      4 L d |       4 L d |       4 L d |       $ < T l       $ < T l        , D d        , D \ t        4 L d |       $ < T l   , D \ t        8 P h          (  @  \  x            ( @ X p       ( @ \ x         8 T p       ( @ X p         8 P h        , D ` x         8 P l        0 @ X h        	 	  	8 	P 	h 	 	 	 	 	 	 
 
( 
@ 
X 
p 
 
 
 
 
    0 H ` x         8 P h        ( @ X p         0 H ` x       4 L d |        8 P h          4 D ` x         0 H ` x        ( @ X p       < < < < < < < < < < < < < < < < < X h       4 `    P   8     \            < X p     (     < t     4 d x     \                D   ! ! ! "l # #< #X # # # $\ $p $ $ $ $ $ $ $ % %$ %8 %L %` %t % % % % % % &  & &( &< &P &d &x & '$ ' ( )T *( * + + , , , , , -D . . . /0 /@ /P / 0  0D 0l 0 1t 1 1 1 2  2@ 2` 2 2 2 2 3  3  3@ 3` 3 3 3 3 4 4X 4 4 5 5x 5 6h 6x 6 7| 7 7 7 7 7 7 8 8 8, 8D 8d 8 8 8 8 8 8 9 9 9, 9 :d ;p ; <8 < < < =, =\ = = >  >T > > > ?@ ? ? @\ @ @ A< A A B  B\ B B C C` C C DX D EX E F  F8 Fp F F G GP G H  H@ H\ H I< Id I I I I J  JD Jl J J J J J K K0 KL Kh K LH L L M$ M` M M NL N N O$ Ol O O PP P Q Q` Q R  RP R R S S\ S S T( T T U@ U V V| V W W` W XT Xp X Y( Yp Y Z( Z Z [0 [l [ \ \ \ ]  ]P ]| ] ^l ^ _` _ _ `@ `\ ` ` ` aL a a a b b ct d  d  dD d` d d e e0 eX e e fl f f f g8 g g h0 ht h i@ i j4 j k kl k l< l l l m, mx m nH n o ol o pD p p q  q4 qh q q r` r s t, t uH u vp v w4 wl w x x0 xX x x x x y( y\ y y z  z z {L { { { | |0 |T |x | | } ~ ~d ~ ~    8 p     8 \     H    , ` |     $ @ t     X   , P t     ( L l      8 \     , \      , X     , X      , T x      L x    8 l    @ x    P     < h     < p    ( T     D x     `    8 h   4      P p       < X t      D X t        8 T p         \ p       , P d |    < T   H  X  4 ` |     D `      0 \ x     4 P |     , `  4 h   | 8 t  $   D        @ l    8 |     , X     \    \        D l     $ L <  h (   Ę  Ō  l  d  x  ɐ  x @ ˔   ( ̈́  H Θ  x Ϥ  Ѐ м   \ Ѱ ( Ҡ p Ӡ   T Ԑ  $ ` ը  t t ֈ ֜ ָ    ( < X t ט ״   ( < X t ؘ ش   ( D h ٌ ٸ   4 h | ژ ڴ    < h ۄ ۨ    H t ܨ    8 \ ݈ ݴ   8 d ޘ   , h | ߘ ߴ    < h      H t     8 \     8 d    , h      H t    $ X    ( L x    8 l    < x   $ h |      < h      H t     8 \     8 d    , h      H t    $ X    ( L x    8 l    < x   $ h      H t    $ X    ( L x    8 l    < x   $ h     D x    H |   ( d    < x    $  h      X    h  <   l   T   $ h   ( p    	  	 	 
X 
 X    `   4    h   X  8   \     4   p   <   0   @   l  |  (     |      0 `    $ T     D t      8  h       !, !H !d ! ! ! " "P " " " #  #T #p # # $ $x $ %H % &4 & & '0 ' ( (h ( ) )p ) ) *D * * + +, + + ,$ ,x , - -4 -d - - .  .4 .t . . /$ /\ / / / 0 0@ 0p 0 0 1  1 2 2` 2 3h 3 4 4 5 5 6 7 7 7 8l 8 94 9 9 : : ;< ; < <  <` =@ = > > ? ? @ @ A A A BD B CL C D< D E E E Fp G  G H, H H I@ I J J| K  K K Ld L M< M M Nx O  O O O P P( PL P P P P Q  Q Q R| R Sl S T T TH Tx T T T U$ UP U| U U U V V@ Vh V V V W0 Wx W X Xx Y Y Z\ Z [< [ \4 \ ]  ] ^0 ^ _ `D ` al a bP b c d d d d el e f fL f gx hd i  iT i i jP j j k k k l l| l l m m$ m n$ n o  o p8 p p qH q| q r s t u v w y z  z { }l ~X     h h  L        <      $    , `  ( 8   h  8 x D  0                         \ l |           , < L \ l |           , < L \ l |           , < L \ l |           , < L \ l |           , < L \ l |           , < L \ l |           , < L h   `      8 l     @     t    | t      0 L h       , H d        8 x  H t  P       L  (  P    	 +     @          >        _        :       U                            !       X             	       4        9        T  	       	     	  G  	  &\  	  &  	    	  $  	  "4  	  :j  	 &  	  h  	     	   F C o p y r i g h t   ( c )   2 0 0 3   b y   B i t s t r e a m ,   I n c .   A l l   R i g h t s   R e s e r v e d . 
 D e j a V u   c h a n g e s   a r e   i n   p u b l i c   d o m a i n 
  Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved.
DejaVu changes are in public domain
  D e j a V u   S e r i f  DejaVu Serif  I t a l i c  Italic  D e j a V u   S e r i f   I t a l i c  DejaVu Serif Italic  D e j a V u   S e r i f   I t a l i c  DejaVu Serif Italic  V e r s i o n   2 . 3 7  Version 2.37  D e j a V u S e r i f - I t a l i c  DejaVuSerif-Italic  D e j a V u   f o n t s   t e a m  DejaVu fonts team  h t t p : / / d e j a v u . s o u r c e f o r g e . n e t  http://dejavu.sourceforge.net  F o n t s   a r e   ( c )   B i t s t r e a m   ( s e e   b e l o w ) .   D e j a V u   c h a n g e s   a r e   i n   p u b l i c   d o m a i n . 
 
 B i t s t r e a m   V e r a   F o n t s   C o p y r i g h t 
 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
 
 C o p y r i g h t   ( c )   2 0 0 3   b y   B i t s t r e a m ,   I n c .   A l l   R i g h t s   R e s e r v e d .   B i t s t r e a m   V e r a   i s   a   t r a d e m a r k   o f   B i t s t r e a m ,   I n c . 
 
 P e r m i s s i o n   i s   h e r e b y   g r a n t e d ,   f r e e   o f   c h a r g e ,   t o   a n y   p e r s o n   o b t a i n i n g   a   c o p y   o f   t h e   f o n t s   a c c o m p a n y i n g   t h i s   l i c e n s e   ( " F o n t s " )   a n d   a s s o c i a t e d   d o c u m e n t a t i o n   f i l e s   ( t h e   " F o n t   S o f t w a r e " ) ,   t o   r e p r o d u c e   a n d   d i s t r i b u t e   t h e   F o n t   S o f t w a r e ,   i n c l u d i n g   w i t h o u t   l i m i t a t i o n   t h e   r i g h t s   t o   u s e ,   c o p y ,   m e r g e ,   p u b l i s h ,   d i s t r i b u t e ,   a n d / o r   s e l l   c o p i e s   o f   t h e   F o n t   S o f t w a r e ,   a n d   t o   p e r m i t   p e r s o n s   t o   w h o m   t h e   F o n t   S o f t w a r e   i s   f u r n i s h e d   t o   d o   s o ,   s u b j e c t   t o   t h e   f o l l o w i n g   c o n d i t i o n s : 
 
 T h e   a b o v e   c o p y r i g h t   a n d   t r a d e m a r k   n o t i c e s   a n d   t h i s   p e r m i s s i o n   n o t i c e   s h a l l   b e   i n c l u d e d   i n   a l l   c o p i e s   o f   o n e   o r   m o r e   o f   t h e   F o n t   S o f t w a r e   t y p e f a c e s . 
 
 T h e   F o n t   S o f t w a r e   m a y   b e   m o d i f i e d ,   a l t e r e d ,   o r   a d d e d   t o ,   a n d   i n   p a r t i c u l a r   t h e   d e s i g n s   o f   g l y p h s   o r   c h a r a c t e r s   i n   t h e   F o n t s   m a y   b e   m o d i f i e d   a n d   a d d i t i o n a l   g l y p h s   o r     o r   c h a r a c t e r s   m a y   b e   a d d e d   t o   t h e   F o n t s ,   o n l y   i f   t h e   f o n t s   a r e   r e n a m e d   t o   n a m e s   n o t   c o n t a i n i n g   e i t h e r   t h e   w o r d s   " B i t s t r e a m "   o r   t h e   w o r d   " V e r a " . 
 
 T h i s   L i c e n s e   b e c o m e s   n u l l   a n d   v o i d   t o   t h e   e x t e n t   a p p l i c a b l e   t o   F o n t s   o r   F o n t   S o f t w a r e   t h a t   h a s   b e e n   m o d i f i e d   a n d   i s   d i s t r i b u t e d   u n d e r   t h e   " B i t s t r e a m   V e r a "   n a m e s . 
 
 T h e   F o n t   S o f t w a r e   m a y   b e   s o l d   a s   p a r t   o f   a   l a r g e r   s o f t w a r e   p a c k a g e   b u t   n o   c o p y   o f   o n e   o r   m o r e   o f   t h e   F o n t   S o f t w a r e   t y p e f a c e s   m a y   b e   s o l d   b y   i t s e l f . 
 
 T H E   F O N T   S O F T W A R E   I S   P R O V I D E D   " A S   I S " ,   W I T H O U T   W A R R A N T Y   O F   A N Y   K I N D ,   E X P R E S S   O R   I M P L I E D ,   I N C L U D I N G   B U T   N O T   L I M I T E D   T O   A N Y   W A R R A N T I E S   O F   M E R C H A N T A B I L I T Y ,   F I T N E S S   F O R   A   P A R T I C U L A R   P U R P O S E   A N D   N O N I N F R I N G E M E N T   O F   C O P Y R I G H T ,   P A T E N T ,   T R A D E M A R K ,   O R   O T H E R   R I G H T .   I N   N O   E V E N T   S H A L L   B I T S T R E A M   O R   T H E   G N O M E   F O U N D A T I O N   B E   L I A B L E   F O R   A N Y   C L A I M ,   D A M A G E S   O R   O T H E R   L I A B I L I T Y ,   I N C L U D I N G   A N Y   G E N E R A L ,   S P E C I A L ,   I N D I R E C T ,   I N C I D E N T A L ,   O R   C O N S E Q U E N T I A L   D A M A G E S ,   W H E T H E R   I N   A N   A C T I O N   O F   C O N T R A C T ,   T O R T   O R   O T H E R W I S E ,   A R I S I N G   F R O M ,   O U T   O F   T H E   U S E   O R   I N A B I L I T Y   T O   U S E   T H E   F O N T   S O F T W A R E   O R   F R O M   O T H E R   D E A L I N G S   I N   T H E   F O N T   S O F T W A R E . 
 
 E x c e p t   a s   c o n t a i n e d   i n   t h i s   n o t i c e ,   t h e   n a m e s   o f   G n o m e ,   t h e   G n o m e   F o u n d a t i o n ,   a n d   B i t s t r e a m   I n c . ,   s h a l l   n o t   b e   u s e d   i n   a d v e r t i s i n g   o r   o t h e r w i s e   t o   p r o m o t e   t h e   s a l e ,   u s e   o r   o t h e r   d e a l i n g s   i n   t h i s   F o n t   S o f t w a r e   w i t h o u t   p r i o r   w r i t t e n   a u t h o r i z a t i o n   f r o m   t h e   G n o m e   F o u n d a t i o n   o r   B i t s t r e a m   I n c . ,   r e s p e c t i v e l y .   F o r   f u r t h e r   i n f o r m a t i o n ,   c o n t a c t :   f o n t s   a t   g n o m e   d o t   o r g .   
  Fonts are (c) Bitstream (see below). DejaVu changes are in public domain.

Bitstream Vera Fonts Copyright
------------------------------

Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. Bitstream Vera is a trademark of Bitstream, Inc.

Permission is hereby granted, free of charge, to any person obtaining a copy of the fonts accompanying this license ("Fonts") and associated documentation files (the "Font Software"), to reproduce and distribute the Font Software, including without limitation the rights to use, copy, merge, publish, distribute, and/or sell copies of the Font Software, and to permit persons to whom the Font Software is furnished to do so, subject to the following conditions:

The above copyright and trademark notices and this permission notice shall be included in all copies of one or more of the Font Software typefaces.

The Font Software may be modified, altered, or added to, and in particular the designs of glyphs or characters in the Fonts may be modified and additional glyphs or  or characters may be added to the Fonts, only if the fonts are renamed to names not containing either the words "Bitstream" or the word "Vera".

This License becomes null and void to the extent applicable to Fonts or Font Software that has been modified and is distributed under the "Bitstream Vera" names.

The Font Software may be sold as part of a larger software package but no copy of one or more of the Font Software typefaces may be sold by itself.

THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL BITSTREAM OR THE GNOME FOUNDATION BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE.

Except as contained in this notice, the names of Gnome, the Gnome Foundation, and Bitstream Inc., shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Font Software without prior written authorization from the Gnome Foundation or Bitstream Inc., respectively. For further information, contact: fonts at gnome dot org. 
  h t t p : / / d e j a v u . s o u r c e f o r g e . n e t / w i k i / i n d e x . p h p / L i c e n s e  http://dejavu.sourceforge.net/wiki/index.php/License  D e j a V u   S e r i f  DejaVu Serif  I t a l i c  Italic         ~ Z                               	 
                        ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a                                    b c  d  e        f     g      h    j i k m l n  o q p r s u t v w  x z y { } |    ~       	
     !"#$%&'()*+  ,-./0123456789:  ;<=>?@ABCDEFGHI  JKLMNOPQRS    TUVWXYZ[\]^_`abcdefghi jklm  nopqrstuvwxyz{|}~  	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~         	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDE FGHIJKLMNOPQRSTUVWXYZ[ \]^_`abcdefghijklmnopqrstuvwxyz{|}~ 	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ 	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ 	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ 	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~                 	
  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~            	 											
																						 	!	"	#	$	%	&	'	(	)	*	+	,	-	.	/	0	1	2	3	4	5	6	7	8	9	:	;	<	=	>	?	@	A	B	C	D	E	F	G	H	I	J	K	L	M	N	O	P	Q	R	S	T	U	V	W	X	Y	Z	[	\	]	^	_	`	a	b	c	d	e	f	g	h	i	j	k	l	m	n	o	p	q	r	s	t	u	v	w	x	y	z	{	|	}	~																																																																																																																																	
 








	 























 
!
"
#
$
%
&
'
(
)
*
+
,
-
.
/
0
1
2
3
4
5
6
7
8
9
:
;
<
=
>
?
@
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
[
\
]
^
_
`
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
{
|
}
~
































































































































 	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ 	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~   	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~	sfthyphenAmacronamacronAbreveabreveAogonekaogonekCcircumflexccircumflex
Cdotaccent
cdotaccentDcarondcaronDcroatEmacronemacronEbreveebreve
Edotaccent
edotaccentEogonekeogonekEcaronecaronGcircumflexgcircumflex
Gdotaccent
gdotaccentGcommaaccentgcommaaccentHcircumflexhcircumflexHbarhbarItildeitildeImacronimacronIbreveibreveIogonekiogonekIJijJcircumflexjcircumflexKcommaaccentkcommaaccentkgreenlandicLacutelacuteLcommaaccentlcommaaccentLcaronlcaronLdotldotNacutenacuteNcommaaccentncommaaccentNcaronncaronnapostropheEngengOmacronomacronObreveobreveOhungarumlautohungarumlautRacuteracuteRcommaaccentrcommaaccentRcaronrcaronSacutesacuteScircumflexscircumflexTcommaaccenttcommaaccentTcarontcaronTbartbarUtildeutildeUmacronumacronUbreveubreveUringuringUhungarumlautuhungarumlautUogonekuogonekWcircumflexwcircumflexYcircumflexycircumflexZacutezacute
Zdotaccent
zdotaccentlongsuni0180uni0181uni0182uni0183uni0184uni0185uni0186uni0187uni0188uni0189uni018Auni018Buni018Cuni018Duni018Euni018Funi0190uni0191uni0193uni0194uni0195uni0196uni0197uni0198uni0199uni019Auni019Buni019Cuni019Duni019Euni019FOhornohornuni01A2uni01A3uni01A4uni01A5uni01A6uni01A7uni01A8uni01A9uni01AAuni01ABuni01ACuni01ADuni01AEUhornuhornuni01B1uni01B2uni01B3uni01B4uni01B5uni01B6uni01B7uni01B8uni01B9uni01BAuni01BBuni01BCuni01BDuni01BEuni01BFuni01C0uni01C1uni01C2uni01C3uni01C4uni01C5uni01C6uni01C7uni01C8uni01C9uni01CAuni01CBuni01CCuni01CDuni01CEuni01CFuni01D0uni01D1uni01D2uni01D3uni01D4uni01D5uni01D6uni01D7uni01D8uni01D9uni01DAuni01DBuni01DCuni01DDuni01DEuni01DFuni01E0uni01E1uni01E2uni01E3uni01E4uni01E5Gcarongcaronuni01E8uni01E9uni01EAuni01EBuni01ECuni01EDuni01EEuni01EFuni01F0uni01F1uni01F2uni01F3uni01F4uni01F5uni01F6uni01F7uni01F8uni01F9
Aringacute
aringacuteAEacuteaeacuteOslashacuteoslashacuteuni0200uni0201uni0202uni0203uni0204uni0205uni0206uni0207uni0208uni0209uni020Auni020Buni020Cuni020Duni020Euni020Funi0210uni0211uni0212uni0213uni0214uni0215uni0216uni0217Scommaaccentscommaaccentuni021Auni021Buni021Cuni021Duni021Euni021Funi0220uni0221uni0222uni0223uni0224uni0225uni0226uni0227uni0228uni0229uni022Auni022Buni022Cuni022Duni022Euni022Funi0230uni0231uni0232uni0233uni0234uni0235uni0236dotlessjuni0238uni0239uni023Auni023Buni023Cuni023Duni023Euni023Funi0240uni0241uni0242uni0243uni0244uni0245uni0246uni0247uni0248uni0249uni024Auni024Buni024Cuni024Duni024Euni024Funi0250uni0251uni0252uni0253uni0254uni0255uni0256uni0257uni0258uni0259uni025Auni025Buni025Cuni025Duni025Euni025Funi0260uni0261uni0262uni0263uni0264uni0265uni0266uni0267uni0268uni0269uni026Auni026Buni026Cuni026Duni026Euni026Funi0270uni0271uni0272uni0273uni0274uni0275uni0276uni0277uni0278uni0279uni027Auni027Buni027Cuni027Duni027Euni027Funi0280uni0281uni0282uni0283uni0284uni0285uni0286uni0287uni0288uni0289uni028Auni028Buni028Cuni028Duni028Euni028Funi0290uni0291uni0292uni0293uni0294uni0295uni0296uni0297uni0298uni0299uni029Auni029Buni029Cuni029Duni029Euni029Funi02A0uni02A1uni02A2uni02A3uni02A4uni02A5uni02A6uni02A7uni02A8uni02A9uni02AAuni02ABuni02ACuni02ADuni02AEuni02AFuni02B0uni02B1uni02B2uni02B3uni02B4uni02B5uni02B6uni02B7uni02B8uni02B9uni02BAuni02BBuni02BCuni02BDuni02BEuni02BFuni02C0uni02C1uni02C2uni02C3uni02C4uni02C5uni02C8uni02C9uni02CAuni02CBuni02CCuni02CDuni02D0uni02D1uni02D2uni02D3uni02D6uni02D7uni02DEuni02E0uni02E1uni02E2uni02E3uni02E4uni02E5uni02E6uni02E7uni02E8uni02E9uni02ECuni02EEuni02EFuni02F0uni02F3uni02F7	gravecomb	acutecombuni0302	tildecombuni0304uni0305uni0306uni0307uni0308hookabovecombuni030Auni030Buni030Cuni030Duni030Euni030Funi0310uni0311uni0312uni0313uni0314uni0315uni0316uni0317uni0318uni0319uni031Auni031Buni031Cuni031Duni031Euni031Funi0320uni0321uni0322dotbelowcombuni0324uni0325uni0326uni0327uni0328uni0329uni032Auni032Buni032Cuni032Duni032Euni032Funi0330uni0331uni0332uni0333uni0334uni0335uni0336uni0337uni0338uni0339uni033Auni033Buni033Cuni033Duni033Euni033Funi0343uni034Funi0358uni0360uni0361uni0370uni0371uni0372uni0373uni0374uni0375uni0376uni0377uni037Auni037Buni037Cuni037Duni037Euni037Ftonosdieresistonos
Alphatonos	anoteleiaEpsilontonosEtatonos	IotatonosOmicrontonosUpsilontonos
OmegatonosiotadieresistonosAlphaBetaGammauni0394EpsilonZetaEtaThetaIotaKappaLambdaMuNuXiOmicronPiRhoSigmaTauUpsilonPhiChiPsiIotadieresisUpsilondieresis
alphatonosepsilontonosetatonos	iotatonosupsilondieresistonosalphabetagammadeltaepsilonzetaetathetaiotakappalambdauni03BCnuxiomicronrhosigma1sigmatauupsilonphichipsiomegaiotadieresisupsilondieresisomicrontonosupsilontonos
omegatonosuni03CFuni03D0theta1Upsilon1uni03D3uni03D4phi1omega1uni03D7uni03D8uni03D9uni03DAuni03DBuni03DCuni03DDuni03DEuni03DFuni03E0uni03E1uni03F0uni03F1uni03F2uni03F3uni03F4uni03F5uni03F6uni03F7uni03F8uni03F9uni03FAuni03FBuni03FCuni03FDuni03FEuni03FFuni0400uni0401uni0402uni0403uni0404uni0405uni0406uni0407uni0408uni0409uni040Auni040Buni040Cuni040Duni040Euni040Funi0410uni0411uni0412uni0413uni0414uni0415uni0416uni0417uni0418uni0419uni041Auni041Buni041Cuni041Duni041Euni041Funi0420uni0421uni0422uni0423uni0424uni0425uni0426uni0427uni0428uni0429uni042Auni042Buni042Cuni042Duni042Euni042Funi0430uni0431uni0432uni0433uni0434uni0435uni0436uni0437uni0438uni0439uni043Auni043Buni043Cuni043Duni043Euni043Funi0440uni0441uni0442uni0443uni0444uni0445uni0446uni0447uni0448uni0449uni044Auni044Buni044Cuni044Duni044Euni044Funi0450uni0451uni0452uni0453uni0454uni0455uni0456uni0457uni0458uni0459uni045Auni045Buni045Cuni045Duni045Euni045Funi0462uni0463uni0464uni0465uni046Auni046Buni046Cuni046Duni0470uni0471uni0472uni0473uni0474uni0475uni0476uni0477uni048Cuni048Duni0490uni0491uni0492uni0493uni0494uni0495uni0496uni0497uni0498uni0499uni049Auni049Buni049Euni049Funi04A0uni04A1uni04A2uni04A3uni04A4uni04A5uni04A6uni04A7uni04AAuni04ABuni04ACuni04ADuni04AEuni04AFuni04B0uni04B1uni04B2uni04B3uni04B4uni04B5uni04B6uni04B7uni04BAuni04BBuni04C0uni04C1uni04C2uni04C3uni04C4uni04C7uni04C8uni04CBuni04CCuni04CFuni04D0uni04D1uni04D2uni04D3uni04D4uni04D5uni04D6uni04D7uni04D8uni04D9uni04DAuni04DBuni04DCuni04DDuni04DEuni04DFuni04E0uni04E1uni04E2uni04E3uni04E4uni04E5uni04E6uni04E7uni04E8uni04E9uni04EAuni04EBuni04ECuni04EDuni04EEuni04EFuni04F0uni04F1uni04F2uni04F3uni04F4uni04F5uni04F6uni04F7uni04F8uni04F9uni0510uni0511uni0512uni0513uni0514uni0515uni051Auni051Buni051Cuni051Duni0531uni0532uni0533uni0534uni0535uni0536uni0537uni0538uni0539uni053Auni053Buni053Cuni053Duni053Euni053Funi0540uni0541uni0542uni0543uni0544uni0545uni0546uni0547uni0548uni0549uni054Auni054Buni054Cuni054Duni054Euni054Funi0550uni0551uni0552uni0553uni0554uni0555uni0556uni0559uni055Auni055Buni055Cuni055Duni055Euni055Funi0561uni0562uni0563uni0564uni0565uni0566uni0567uni0568uni0569uni056Auni056Buni056Cuni056Duni056Euni056Funi0570uni0571uni0572uni0573uni0574uni0575uni0576uni0577uni0578uni0579uni057Auni057Buni057Cuni057Duni057Euni057Funi0580uni0581uni0582uni0583uni0584uni0585uni0586uni0587uni0589uni058Auni0E3Funi10A0uni10A1uni10A2uni10A3uni10A4uni10A5uni10A6uni10A7uni10A8uni10A9uni10AAuni10ABuni10ACuni10ADuni10AEuni10AFuni10B0uni10B1uni10B2uni10B3uni10B4uni10B5uni10B6uni10B7uni10B8uni10B9uni10BAuni10BBuni10BCuni10BDuni10BEuni10BFuni10C0uni10C1uni10C2uni10C3uni10C4uni10C5uni10D0uni10D1uni10D2uni10D3uni10D4uni10D5uni10D6uni10D7uni10D8uni10D9uni10DAuni10DBuni10DCuni10DDuni10DEuni10DFuni10E0uni10E1uni10E2uni10E3uni10E4uni10E5uni10E6uni10E7uni10E8uni10E9uni10EAuni10EBuni10ECuni10EDuni10EEuni10EFuni10F0uni10F1uni10F2uni10F3uni10F4uni10F5uni10F6uni10F7uni10F8uni10F9uni10FAuni10FBuni10FCuni1D00uni1D01uni1D02uni1D03uni1D04uni1D05uni1D06uni1D07uni1D08uni1D09uni1D0Auni1D0Buni1D0Cuni1D0Duni1D0Euni1D0Funi1D10uni1D11uni1D12uni1D13uni1D14uni1D15uni1D16uni1D17uni1D18uni1D19uni1D1Auni1D1Buni1D1Cuni1D1Duni1D1Euni1D1Funi1D20uni1D21uni1D22uni1D23uni1D24uni1D25uni1D26uni1D27uni1D28uni1D29uni1D2Auni1D2Buni1D2Cuni1D2Duni1D2Euni1D2Funi1D30uni1D31uni1D32uni1D33uni1D34uni1D35uni1D36uni1D37uni1D38uni1D39uni1D3Auni1D3Buni1D3Cuni1D3Duni1D3Euni1D3Funi1D40uni1D41uni1D42uni1D43uni1D44uni1D45uni1D46uni1D47uni1D48uni1D49uni1D4Auni1D4Buni1D4Cuni1D4Duni1D4Euni1D4Funi1D50uni1D51uni1D52uni1D53uni1D54uni1D55uni1D56uni1D57uni1D58uni1D59uni1D5Auni1D5Buni1D5Cuni1D5Duni1D5Euni1D5Funi1D60uni1D61uni1D62uni1D63uni1D64uni1D65uni1D66uni1D67uni1D68uni1D69uni1D6Auni1D6Buni1D77uni1D78uni1D7Buni1D7Cuni1D7Duni1D7Euni1D7Funi1D85uni1D9Buni1D9Cuni1D9Duni1D9Euni1D9Funi1DA0uni1DA1uni1DA2uni1DA3uni1DA4uni1DA5uni1DA6uni1DA7uni1DA8uni1DA9uni1DAAuni1DABuni1DACuni1DADuni1DAEuni1DAFuni1DB0uni1DB1uni1DB2uni1DB3uni1DB4uni1DB5uni1DB6uni1DB7uni1DB8uni1DB9uni1DBAuni1DBBuni1DBCuni1DBDuni1DBEuni1DBFuni1DC4uni1DC5uni1DC6uni1DC7uni1DC8uni1DC9uni1E00uni1E01uni1E02uni1E03uni1E04uni1E05uni1E06uni1E07uni1E08uni1E09uni1E0Auni1E0Buni1E0Cuni1E0Duni1E0Euni1E0Funi1E10uni1E11uni1E12uni1E13uni1E14uni1E15uni1E16uni1E17uni1E18uni1E19uni1E1Auni1E1Buni1E1Cuni1E1Duni1E1Euni1E1Funi1E20uni1E21uni1E22uni1E23uni1E24uni1E25uni1E26uni1E27uni1E28uni1E29uni1E2Auni1E2Buni1E2Cuni1E2Duni1E2Euni1E2Funi1E30uni1E31uni1E32uni1E33uni1E34uni1E35uni1E36uni1E37uni1E38uni1E39uni1E3Auni1E3Buni1E3Cuni1E3Duni1E3Euni1E3Funi1E40uni1E41uni1E42uni1E43uni1E44uni1E45uni1E46uni1E47uni1E48uni1E49uni1E4Auni1E4Buni1E4Cuni1E4Duni1E4Euni1E4Funi1E50uni1E51uni1E52uni1E53uni1E54uni1E55uni1E56uni1E57uni1E58uni1E59uni1E5Auni1E5Buni1E5Cuni1E5Duni1E5Euni1E5Funi1E60uni1E61uni1E62uni1E63uni1E64uni1E65uni1E66uni1E67uni1E68uni1E69uni1E6Auni1E6Buni1E6Cuni1E6Duni1E6Euni1E6Funi1E70uni1E71uni1E72uni1E73uni1E74uni1E75uni1E76uni1E77uni1E78uni1E79uni1E7Auni1E7Buni1E7Cuni1E7Duni1E7Euni1E7FWgravewgraveWacutewacute	Wdieresis	wdieresisuni1E86uni1E87uni1E88uni1E89uni1E8Auni1E8Buni1E8Cuni1E8Duni1E8Euni1E8Funi1E90uni1E91uni1E92uni1E93uni1E94uni1E95uni1E96uni1E97uni1E98uni1E99uni1E9Auni1E9Buni1E9Cuni1E9Duni1E9Euni1E9Funi1EA0uni1EA1uni1EA2uni1EA3uni1EA4uni1EA5uni1EA6uni1EA7uni1EA8uni1EA9uni1EAAuni1EABuni1EACuni1EADuni1EAEuni1EAFuni1EB0uni1EB1uni1EB2uni1EB3uni1EB4uni1EB5uni1EB6uni1EB7uni1EB8uni1EB9uni1EBAuni1EBBuni1EBCuni1EBDuni1EBEuni1EBFuni1EC0uni1EC1uni1EC2uni1EC3uni1EC4uni1EC5uni1EC6uni1EC7uni1EC8uni1EC9uni1ECAuni1ECBuni1ECCuni1ECDuni1ECEuni1ECFuni1ED0uni1ED1uni1ED2uni1ED3uni1ED4uni1ED5uni1ED6uni1ED7uni1ED8uni1ED9uni1EDAuni1EDBuni1EDCuni1EDDuni1EDEuni1EDFuni1EE0uni1EE1uni1EE2uni1EE3uni1EE4uni1EE5uni1EE6uni1EE7uni1EE8uni1EE9uni1EEAuni1EEBuni1EECuni1EEDuni1EEEuni1EEFuni1EF0uni1EF1Ygraveygraveuni1EF4uni1EF5uni1EF6uni1EF7uni1EF8uni1EF9uni1EFAuni1EFBuni1F00uni1F01uni1F02uni1F03uni1F04uni1F05uni1F06uni1F07uni1F08uni1F09uni1F0Auni1F0Buni1F0Cuni1F0Duni1F0Euni1F0Funi1F10uni1F11uni1F12uni1F13uni1F14uni1F15uni1F18uni1F19uni1F1Auni1F1Buni1F1Cuni1F1Duni1F20uni1F21uni1F22uni1F23uni1F24uni1F25uni1F26uni1F27uni1F28uni1F29uni1F2Auni1F2Buni1F2Cuni1F2Duni1F2Euni1F2Funi1F30uni1F31uni1F32uni1F33uni1F34uni1F35uni1F36uni1F37uni1F38uni1F39uni1F3Auni1F3Buni1F3Cuni1F3Duni1F3Euni1F3Funi1F40uni1F41uni1F42uni1F43uni1F44uni1F45uni1F48uni1F49uni1F4Auni1F4Buni1F4Cuni1F4Duni1F50uni1F51uni1F52uni1F53uni1F54uni1F55uni1F56uni1F57uni1F59uni1F5Buni1F5Duni1F5Funi1F60uni1F61uni1F62uni1F63uni1F64uni1F65uni1F66uni1F67uni1F68uni1F69uni1F6Auni1F6Buni1F6Cuni1F6Duni1F6Euni1F6Funi1F70uni1F71uni1F72uni1F73uni1F74uni1F75uni1F76uni1F77uni1F78uni1F79uni1F7Auni1F7Buni1F7Cuni1F7Duni1F80uni1F81uni1F82uni1F83uni1F84uni1F85uni1F86uni1F87uni1F88uni1F89uni1F8Auni1F8Buni1F8Cuni1F8Duni1F8Euni1F8Funi1F90uni1F91uni1F92uni1F93uni1F94uni1F95uni1F96uni1F97uni1F98uni1F99uni1F9Auni1F9Buni1F9Cuni1F9Duni1F9Euni1F9Funi1FA0uni1FA1uni1FA2uni1FA3uni1FA4uni1FA5uni1FA6uni1FA7uni1FA8uni1FA9uni1FAAuni1FABuni1FACuni1FADuni1FAEuni1FAFuni1FB0uni1FB1uni1FB2uni1FB3uni1FB4uni1FB6uni1FB7uni1FB8uni1FB9uni1FBAuni1FBBuni1FBCuni1FBDuni1FBEuni1FBFuni1FC0uni1FC1uni1FC2uni1FC3uni1FC4uni1FC6uni1FC7uni1FC8uni1FC9uni1FCAuni1FCBuni1FCCuni1FCDuni1FCEuni1FCFuni1FD0uni1FD1uni1FD2uni1FD3uni1FD6uni1FD7uni1FD8uni1FD9uni1FDAuni1FDBuni1FDDuni1FDEuni1FDFuni1FE0uni1FE1uni1FE2uni1FE3uni1FE4uni1FE5uni1FE6uni1FE7uni1FE8uni1FE9uni1FEAuni1FEBuni1FECuni1FEDuni1FEEuni1FEFuni1FF2uni1FF3uni1FF4uni1FF6uni1FF7uni1FF8uni1FF9uni1FFAuni1FFBuni1FFCuni1FFDuni1FFEuni2000uni2001uni2002uni2003uni2004uni2005uni2006uni2007uni2008uni2009uni200Auni200Buni200Cuni200Duni200Euni200Funi2010uni2011
figuredashuni2015uni2016underscoredblquotereverseduni201Funi2023onedotenleadertwodotenleaderuni202Auni202Buni202Cuni202Duni202Euni202Funi2031minuteseconduni2034uni2035uni2036uni2037uni2038	exclamdbluni203Duni203Euni2042uni2045uni2046uni2047uni2048uni2049uni204Buni204Cuni204Duni204Euni204Funi2051uni2052uni2053uni2057uni205Funi2060uni2061uni2062uni2063uni2064uni206Auni206Buni206Cuni206Duni206Euni206Funi2070uni2071uni2074uni2075uni2076uni2077uni2078uni2079uni207Auni207Buni207Cuni207Duni207Euni207Funi2080uni2081uni2082uni2083uni2084uni2085uni2086uni2087uni2088uni2089uni208Auni208Buni208Cuni208Duni208Euni2090uni2091uni2092uni2093uni2094uni2095uni2096uni2097uni2098uni2099uni209Auni209Buni209Cuni20A6Eurouni20AFuni20B1uni20B4uni20B5uni20B8uni20B9uni20BAuni20BDuni2103uni2109uni210Euni210Funi2116uni2126uni2127uni212Auni212Buni2132uni2141uni2142uni2143uni2144uni214Buni214Euni2150uni2151uni2152onethird	twothirdsuni2155uni2156uni2157uni2158uni2159uni215A	oneeighththreeeighthsfiveeighthsseveneighthsuni215Funi2160uni2161uni2162uni2163uni2164uni2165uni2166uni2167uni2168uni2169uni216Auni216Buni216Cuni216Duni216Euni216Funi2170uni2171uni2172uni2173uni2174uni2175uni2176uni2177uni2178uni2179uni217Auni217Buni217Cuni217Duni217Euni217Funi2180uni2181uni2182uni2183uni2184uni2185uni2189	arrowleftarrowup
arrowright	arrowdown	arrowboth	arrowupdnuni2196uni2197uni2198uni2199uni219Auni219Buni219Cuni219Duni219Euni219Funi21A0uni21A1uni21A2uni21A3uni21A4uni21A5uni21A6uni21A7arrowupdnbseuni21A9uni21AAuni21ABuni21ACuni21ADuni21AEuni21AFuni21B0uni21B1uni21B2uni21B3uni21B4carriagereturnuni21B6uni21B7uni21B8uni21B9uni21BAuni21BBuni21BCuni21BDuni21BEuni21BFuni21C0uni21C1uni21C2uni21C3uni21C4uni21C5uni21C6uni21C7uni21C8uni21C9uni21CAuni21CBuni21CCuni21CDuni21CEuni21CFarrowdblleft
arrowdbluparrowdblrightarrowdbldownarrowdblbothuni21D5uni21D6uni21D7uni21D8uni21D9uni21DAuni21DBuni21DCuni21DDuni21DEuni21DFuni21E0uni21E1uni21E2uni21E3uni21E4uni21E5uni21E6uni21E7uni21E8uni21E9uni21EAuni21EBuni21ECuni21EDuni21EEuni21EFuni21F0uni21F1uni21F2uni21F3uni21F4uni21F5uni21F6uni21F7uni21F8uni21F9uni21FAuni21FBuni21FCuni21FDuni21FEuni21FF	universalexistentialuni2204gradientelement
notelementsuchthatuni220Cuni2210uni2213uni2214uni2215asteriskmathuni2218uni2219uni221Buni221Cproportional
orthogonalangleuni2223uni2224uni2225uni2226
logicaland	logicalorintersectionunionuni222Cuni222Duni2238uni2239uni223Auni223Bsimilaruni223Duni2242uni2243uni2250uni2251uni2252uni2253uni2254uni2255equivalencepropersubsetpropersuperset	notsubsetuni2285reflexsubsetreflexsupersetuni228Cuni228Duni228Euni228Funi2290uni2291uni2292uni2293uni2294
circleplusuni2296circlemultiplyuni2298uni2299uni229Auni229Buni229Cuni229Duni229Euni229Funi22A0uni22A1uni22A2uni22A3uni22A4perpendicularuni22A6uni22A7uni22A8uni22A9uni22AAuni22ABuni22ACuni22ADuni22AEuni22AFuni22C4dotmathhouseuni2308uni2309uni230Auni230Brevlogicalnotuni2311uni2318uni2319
integraltp
integralbtuni2325uni2328uni237Duni239Buni239Cuni239Duni239Euni239Funi23A0uni23A1uni23A2uni23A3uni23A4uni23A5uni23A6uni23A7uni23A8uni23A9uni23AAuni23ABuni23ACuni23ADuni23AEuni23CFuni2423SF100000uni2501SF110000uni2503uni2504uni2505uni2506uni2507uni2508uni2509uni250Auni250BSF010000uni250Duni250Euni250FSF030000uni2511uni2512uni2513SF020000uni2515uni2516uni2517SF040000uni2519uni251Auni251BSF080000uni251Duni251Euni251Funi2520uni2521uni2522uni2523SF090000uni2525uni2526uni2527uni2528uni2529uni252Auni252BSF060000uni252Duni252Euni252Funi2530uni2531uni2532uni2533SF070000uni2535uni2536uni2537uni2538uni2539uni253Auni253BSF050000uni253Duni253Euni253Funi2540uni2541uni2542uni2543uni2544uni2545uni2546uni2547uni2548uni2549uni254Auni254Buni254Cuni254Duni254Euni254FSF430000SF240000SF510000SF520000SF390000SF220000SF210000SF250000SF500000SF490000SF380000SF280000SF270000SF260000SF360000SF370000SF420000SF190000SF200000SF230000SF470000SF480000SF410000SF450000SF460000SF400000SF540000SF530000SF440000uni256Duni256Euni256Funi2570uni2571uni2572uni2573uni2574uni2575uni2576uni2577uni2578uni2579uni257Auni257Buni257Cuni257Duni257Euni257Fupblockuni2581uni2582uni2583dnblockuni2585uni2586uni2587blockuni2589uni258Auni258Blfblockuni258Duni258Euni258Frtblockltshadeshadedkshadeuni2594uni2595uni2596uni2597uni2598uni2599uni259Auni259Buni259Cuni259Duni259Euni259F	filledboxH22073uni25A2uni25A3uni25A4uni25A5uni25A6uni25A7uni25A8uni25A9H18543H18551
filledrectuni25ADuni25AEuni25AFuni25B0uni25B1triagupuni25B3uni25B4uni25B5uni25B6uni25B7uni25B8uni25B9triagrtuni25BBtriagdnuni25BDuni25BEuni25BFuni25C0uni25C1uni25C2uni25C3triaglfuni25C5uni25C6uni25C7uni25C8uni25C9circleuni25CCuni25CDuni25CEH18533uni25D0uni25D1uni25D2uni25D3uni25D4uni25D5uni25D6uni25D7	invbullet	invcircleuni25DAuni25DBuni25DCuni25DDuni25DEuni25DFuni25E0uni25E1uni25E2uni25E3uni25E4uni25E5
openbulletuni25E7uni25E8uni25E9uni25EAuni25EBuni25ECuni25EDuni25EEuni25EFuni25F0uni25F1uni25F2uni25F3uni25F4uni25F5uni25F6uni25F7uni25F8uni25F9uni25FAuni25FBuni25FCuni25FDuni25FEuni25FFuni2600uni2638uni2639	smilefaceinvsmilefacesununi263Ffemaleuni2641maleuni2643uni2644uni2645uni2646uni2647spadeuni2661uni2662clubuni2664heartdiamonduni2667uni2669musicalnotemusicalnotedbluni266Cuni266Duni266Euni266Funi27A1uni27C5uni27C6uni27E0uni27E8uni27E9uni27F0uni27F1uni27F2uni27F3uni27F4uni27F5uni27F6uni27F7uni27F8uni27F9uni27FAuni27FBuni27FCuni27FDuni27FEuni27FFuni2800uni2801uni2802uni2803uni2804uni2805uni2806uni2807uni2808uni2809uni280Auni280Buni280Cuni280Duni280Euni280Funi2810uni2811uni2812uni2813uni2814uni2815uni2816uni2817uni2818uni2819uni281Auni281Buni281Cuni281Duni281Euni281Funi2820uni2821uni2822uni2823uni2824uni2825uni2826uni2827uni2828uni2829uni282Auni282Buni282Cuni282Duni282Euni282Funi2830uni2831uni2832uni2833uni2834uni2835uni2836uni2837uni2838uni2839uni283Auni283Buni283Cuni283Duni283Euni283Funi2840uni2841uni2842uni2843uni2844uni2845uni2846uni2847uni2848uni2849uni284Auni284Buni284Cuni284Duni284Euni284Funi2850uni2851uni2852uni2853uni2854uni2855uni2856uni2857uni2858uni2859uni285Auni285Buni285Cuni285Duni285Euni285Funi2860uni2861uni2862uni2863uni2864uni2865uni2866uni2867uni2868uni2869uni286Auni286Buni286Cuni286Duni286Euni286Funi2870uni2871uni2872uni2873uni2874uni2875uni2876uni2877uni2878uni2879uni287Auni287Buni287Cuni287Duni287Euni287Funi2880uni2881uni2882uni2883uni2884uni2885uni2886uni2887uni2888uni2889uni288Auni288Buni288Cuni288Duni288Euni288Funi2890uni2891uni2892uni2893uni2894uni2895uni2896uni2897uni2898uni2899uni289Auni289Buni289Cuni289Duni289Euni289Funi28A0uni28A1uni28A2uni28A3uni28A4uni28A5uni28A6uni28A7uni28A8uni28A9uni28AAuni28ABuni28ACuni28ADuni28AEuni28AFuni28B0uni28B1uni28B2uni28B3uni28B4uni28B5uni28B6uni28B7uni28B8uni28B9uni28BAuni28BBuni28BCuni28BDuni28BEuni28BFuni28C0uni28C1uni28C2uni28C3uni28C4uni28C5uni28C6uni28C7uni28C8uni28C9uni28CAuni28CBuni28CCuni28CDuni28CEuni28CFuni28D0uni28D1uni28D2uni28D3uni28D4uni28D5uni28D6uni28D7uni28D8uni28D9uni28DAuni28DBuni28DCuni28DDuni28DEuni28DFuni28E0uni28E1uni28E2uni28E3uni28E4uni28E5uni28E6uni28E7uni28E8uni28E9uni28EAuni28EBuni28ECuni28EDuni28EEuni28EFuni28F0uni28F1uni28F2uni28F3uni28F4uni28F5uni28F6uni28F7uni28F8uni28F9uni28FAuni28FBuni28FCuni28FDuni28FEuni28FFuni2900uni2901uni2902uni2903uni2904uni2905uni2906uni2907uni2908uni2909uni290Auni290Buni290Cuni290Duni290Euni290Funi2910uni2911uni2912uni2913uni2914uni2915uni2916uni2917uni2918uni2919uni291Auni291Buni291Cuni291Duni291Euni291Funi2920uni2921uni2922uni2923uni2924uni2925uni2926uni2927uni2928uni2929uni292Auni292Buni292Cuni292Duni292Euni292Funi2930uni2931uni2932uni2933uni2934uni2935uni2936uni2937uni2938uni2939uni293Auni293Buni293Cuni293Duni293Euni293Funi2940uni2941uni2942uni2943uni2944uni2945uni2946uni2947uni2948uni2949uni294Auni294Buni294Cuni294Duni294Euni294Funi2950uni2951uni2952uni2953uni2954uni2955uni2956uni2957uni2958uni2959uni295Auni295Buni295Cuni295Duni295Euni295Funi2960uni2961uni2962uni2963uni2964uni2965uni2966uni2967uni2968uni2969uni296Auni296Buni296Cuni296Duni296Euni296Funi2970uni2971uni2972uni2973uni2974uni2975uni2976uni2977uni2978uni2979uni297Auni297Buni297Cuni297Duni297Euni297Funi29EBuni2A0Cuni2A0Duni2A0Euni2A2Funi2A6Auni2A6Buni2B00uni2B01uni2B02uni2B03uni2B04uni2B05uni2B06uni2B07uni2B08uni2B09uni2B0Auni2B0Buni2B0Cuni2B0Duni2B0Euni2B0Funi2B10uni2B11uni2B12uni2B13uni2B14uni2B15uni2B16uni2B17uni2B18uni2B19uni2B1Auni2C60uni2C61uni2C63uni2C64uni2C67uni2C68uni2C69uni2C6Auni2C6Buni2C6Cuni2C6Duni2C6Euni2C6Funi2C70uni2C71uni2C72uni2C73uni2C75uni2C76uni2C77uni2C79uni2C7Auni2C7Buni2C7Cuni2C7Duni2C7Euni2C7Funi2D00uni2D01uni2D02uni2D03uni2D04uni2D05uni2D06uni2D07uni2D08uni2D09uni2D0Auni2D0Buni2D0Cuni2D0Duni2D0Euni2D0Funi2D10uni2D11uni2D12uni2D13uni2D14uni2D15uni2D16uni2D17uni2D18uni2D19uni2D1Auni2D1Buni2D1Cuni2D1Duni2D1Euni2D1Funi2D20uni2D21uni2D22uni2D23uni2D24uni2D25uni2E18uni2E1Funi2E22uni2E23uni2E24uni2E25uni2E2EuniA644uniA645uniA646uniA647uniA650uniA651uniA654uniA655uniA656uniA657uniA698uniA699uniA708uniA709uniA70AuniA70BuniA70CuniA70DuniA70EuniA70FuniA710uniA711uniA712uniA713uniA714uniA715uniA716uniA71BuniA71CuniA71DuniA71EuniA71FuniA726uniA727uniA728uniA729uniA72AuniA72BuniA72CuniA72DuniA72EuniA72FuniA730uniA731uniA732uniA733uniA734uniA735uniA736uniA737uniA738uniA739uniA73AuniA73BuniA73CuniA73DuniA73EuniA73FuniA740uniA741uniA746uniA747uniA74AuniA74BuniA74EuniA74FuniA768uniA769uniA77BuniA77CuniA780uniA781uniA782uniA783uniA784uniA785uniA786uniA787uniA78BuniA78CuniA78DuniA790uniA791uniA7AAuniA7F8uniA7F9uniA7FAuniA7FBuniA7FCuniA7FDuniA7FEuniA7FFuniF400uniF401uniF402uniF403uniF404uniF405uniF406uniF407uniF408uniF409uniF40AuniF40BuniF40CuniF40DuniF40EuniF40FuniF410uniF411uniF412uniF413uniF414uniF415uniF416uniF417uniF418uniF419uniF41AuniF41BuniF41CuniF41DuniF41EuniF41FuniF420uniF421uniF422uniF423uniF424uniF425uniF426uniF428uniF6C4uniF6C5uniF6C6uniF6C7uniF6C8cyrBrevecyrbreveuniFB00uniFB03uniFB04uniFB05uniFB06uniFE00uniFE01uniFE02uniFE03uniFE04uniFE05uniFE06uniFE07uniFE08uniFE09uniFE0AuniFE0BuniFE0CuniFE0DuniFE0EuniFE0FuniFFF9uniFFFAuniFFFBuniFFFCuniFFFDu1D434u1D435u1D436u1D437u1D438u1D439u1D43Au1D43Bu1D43Cu1D43Du1D43Eu1D43Fu1D440u1D441u1D442u1D443u1D444u1D445u1D446u1D447u1D448u1D449u1D44Au1D44Bu1D44Cu1D44Du1D44Eu1D44Fu1D450u1D451u1D452u1D453u1D454u1D456u1D457u1D458u1D459u1D45Au1D45Bu1D45Cu1D45Du1D45Eu1D45Fu1D460u1D461u1D462u1D463u1D464u1D465u1D466u1D467u1D6A4u1D6A5u1D6E2u1D6E3u1D6E4u1D6E5u1D6E6u1D6E7u1D6E8u1D6E9u1D6EAu1D6EBu1D6ECu1D6EDu1D6EEu1D6EFu1D6F0u1D6F1u1D6F2u1D6F3u1D6F4u1D6F5u1D6F6u1D6F7u1D6F8u1D6F9u1D6FAu1D6FBu1D6FCu1D6FDu1D6FEu1D6FFu1D700u1D701u1D702u1D703u1D704u1D705u1D706u1D707u1D708u1D709u1D70Au1D70Bu1D70Cu1D70Du1D70Eu1D70Fu1D710u1D711u1D712u1D713u1D714u1D715u1D716u1D717u1D718u1D719u1D71Au1D71B	dlLtcaronDieresisAcuteTildeGrave
CircumflexCaronuni0311.caseBreve	DotaccentHungarumlautDoublegraveiogonek.dotlessuni0268.dotlessdotaccent.iuni029D.dotlessuni1E2D.dotlessuni1ECB.dotlessflorinflorinfloriniflorinlflorinfloriniflorinflorinlEng.altae.alt
brailledotuni0453.MKDuni03080304uni03040308uni03070304uni03080301uni03080300uni03040301uni03040300uni03030304uni0308030Cuni03030308uni030C0307uni03030301uni03020301uni03020300uni03020303uni03060303uni03060301uni03060300uni03060309uni03020309uni03010307g.altEng.alt2uni01B7.altq.smcpx.smcp
delta.smcp
theta.smcpxi.smcp
sigma.smcpphi.smcp
omega.smcpexclamdown.casequestiondown.caseuni2E18.casegermandbls.smcpUring.ringless
Dcroat.alt
dcroat.altuni01E4.altuni01E5.alt  @$d@$'d']}22GG}2d2dd%x
%K.%x
@@%0%@@	
 @I
o}@:]%]@%@0d0ddl~}~2}|{|{zyx
wv wvuv utltsrqpqpp@o}nm>nkm>lkllkk@jddjihihg]hhgf%g]g@f%eddeddcba`_.`_.^]\K[}ZYDXWVUSdRQ2POP}ONA@BLJdI"IH2GGFE
EDCDkCBCBABA@	A@	@@S?>->M=<=K<;
<<@;
:9:]98987654543432
321	2
2@1	0/0D/.//.
..-	d-,+,K+"++@*
*d)(0)A(-(0'-'&:%%]$#$S#"##@"! !]   

@#$0S-0
k@-B	d-
@
@8k
	d
}	d2}-2-
S d++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++  StartFontMetrics 4.1
Notice Converted by PHP-font-lib
Comment https://github.com/PhenX/php-font-lib
EncodingScheme FontSpecific
FontName DejaVu Serif
FontSubfamily Italic
UniqueID DejaVu Serif Italic
FullName DejaVu Serif Italic
Version Version 2.37
PostScriptName DejaVuSerif-Italic
Manufacturer DejaVu fonts team
FontVendorURL http://dejavu.sourceforge.net
LicenseURL http://dejavu.sourceforge.net/wiki/index.php/License
PreferredFamily DejaVu Serif
PreferredSubfamily Italic
Weight Medium
ItalicAngle -11
IsFixedPitch false
UnderlineThickness 44
UnderlinePosition -63
FontHeightOffset 0
Ascender 928
Descender -236
FontBBox -839 -347 1645 1109
StartCharMetrics 3507
U 32 ; WX 318 ; N space ; G 3
U 33 ; WX 402 ; N exclam ; G 4
U 34 ; WX 460 ; N quotedbl ; G 5
U 35 ; WX 838 ; N numbersign ; G 6
U 36 ; WX 636 ; N dollar ; G 7
U 37 ; WX 950 ; N percent ; G 8
U 38 ; WX 890 ; N ampersand ; G 9
U 39 ; WX 275 ; N quotesingle ; G 10
U 40 ; WX 390 ; N parenleft ; G 11
U 41 ; WX 390 ; N parenright ; G 12
U 42 ; WX 500 ; N asterisk ; G 13
U 43 ; WX 838 ; N plus ; G 14
U 44 ; WX 318 ; N comma ; G 15
U 45 ; WX 338 ; N hyphen ; G 16
U 46 ; WX 318 ; N period ; G 17
U 47 ; WX 337 ; N slash ; G 18
U 48 ; WX 636 ; N zero ; G 19
U 49 ; WX 636 ; N one ; G 20
U 50 ; WX 636 ; N two ; G 21
U 51 ; WX 636 ; N three ; G 22
U 52 ; WX 636 ; N four ; G 23
U 53 ; WX 636 ; N five ; G 24
U 54 ; WX 636 ; N six ; G 25
U 55 ; WX 636 ; N seven ; G 26
U 56 ; WX 636 ; N eight ; G 27
U 57 ; WX 636 ; N nine ; G 28
U 58 ; WX 337 ; N colon ; G 29
U 59 ; WX 337 ; N semicolon ; G 30
U 60 ; WX 838 ; N less ; G 31
U 61 ; WX 838 ; N equal ; G 32
U 62 ; WX 838 ; N greater ; G 33
U 63 ; WX 536 ; N question ; G 34
U 64 ; WX 1000 ; N at ; G 35
U 65 ; WX 722 ; N A ; G 36
U 66 ; WX 735 ; N B ; G 37
U 67 ; WX 765 ; N C ; G 38
U 68 ; WX 802 ; N D ; G 39
U 69 ; WX 730 ; N E ; G 40
U 70 ; WX 694 ; N F ; G 41
U 71 ; WX 799 ; N G ; G 42
U 72 ; WX 872 ; N H ; G 43
U 73 ; WX 395 ; N I ; G 44
U 74 ; WX 401 ; N J ; G 45
U 75 ; WX 747 ; N K ; G 46
U 76 ; WX 664 ; N L ; G 47
U 77 ; WX 1024 ; N M ; G 48
U 78 ; WX 875 ; N N ; G 49
U 79 ; WX 820 ; N O ; G 50
U 80 ; WX 673 ; N P ; G 51
U 81 ; WX 820 ; N Q ; G 52
U 82 ; WX 753 ; N R ; G 53
U 83 ; WX 685 ; N S ; G 54
U 84 ; WX 667 ; N T ; G 55
U 85 ; WX 843 ; N U ; G 56
U 86 ; WX 722 ; N V ; G 57
U 87 ; WX 1028 ; N W ; G 58
U 88 ; WX 712 ; N X ; G 59
U 89 ; WX 660 ; N Y ; G 60
U 90 ; WX 695 ; N Z ; G 61
U 91 ; WX 390 ; N bracketleft ; G 62
U 92 ; WX 337 ; N backslash ; G 63
U 93 ; WX 390 ; N bracketright ; G 64
U 94 ; WX 838 ; N asciicircum ; G 65
U 95 ; WX 500 ; N underscore ; G 66
U 96 ; WX 500 ; N grave ; G 67
U 97 ; WX 596 ; N a ; G 68
U 98 ; WX 640 ; N b ; G 69
U 99 ; WX 560 ; N c ; G 70
U 100 ; WX 640 ; N d ; G 71
U 101 ; WX 592 ; N e ; G 72
U 102 ; WX 370 ; N f ; G 73
U 103 ; WX 640 ; N g ; G 74
U 104 ; WX 644 ; N h ; G 75
U 105 ; WX 320 ; N i ; G 76
U 106 ; WX 310 ; N j ; G 77
U 107 ; WX 606 ; N k ; G 78
U 108 ; WX 320 ; N l ; G 79
U 109 ; WX 948 ; N m ; G 80
U 110 ; WX 644 ; N n ; G 81
U 111 ; WX 602 ; N o ; G 82
U 112 ; WX 640 ; N p ; G 83
U 113 ; WX 640 ; N q ; G 84
U 114 ; WX 478 ; N r ; G 85
U 115 ; WX 513 ; N s ; G 86
U 116 ; WX 402 ; N t ; G 87
U 117 ; WX 644 ; N u ; G 88
U 118 ; WX 565 ; N v ; G 89
U 119 ; WX 856 ; N w ; G 90
U 120 ; WX 564 ; N x ; G 91
U 121 ; WX 565 ; N y ; G 92
U 122 ; WX 527 ; N z ; G 93
U 123 ; WX 636 ; N braceleft ; G 94
U 124 ; WX 337 ; N bar ; G 95
U 125 ; WX 636 ; N braceright ; G 96
U 126 ; WX 838 ; N asciitilde ; G 97
U 160 ; WX 318 ; N nbspace ; G 98
U 161 ; WX 402 ; N exclamdown ; G 99
U 162 ; WX 636 ; N cent ; G 100
U 163 ; WX 636 ; N sterling ; G 101
U 164 ; WX 636 ; N currency ; G 102
U 165 ; WX 636 ; N yen ; G 103
U 166 ; WX 337 ; N brokenbar ; G 104
U 167 ; WX 500 ; N section ; G 105
U 168 ; WX 500 ; N dieresis ; G 106
U 169 ; WX 1000 ; N copyright ; G 107
U 170 ; WX 475 ; N ordfeminine ; G 108
U 171 ; WX 612 ; N guillemotleft ; G 109
U 172 ; WX 838 ; N logicalnot ; G 110
U 173 ; WX 338 ; N sfthyphen ; G 111
U 174 ; WX 1000 ; N registered ; G 112
U 175 ; WX 500 ; N macron ; G 113
U 176 ; WX 500 ; N degree ; G 114
U 177 ; WX 838 ; N plusminus ; G 115
U 178 ; WX 401 ; N twosuperior ; G 116
U 179 ; WX 401 ; N threesuperior ; G 117
U 180 ; WX 500 ; N acute ; G 118
U 181 ; WX 650 ; N mu ; G 119
U 182 ; WX 636 ; N paragraph ; G 120
U 183 ; WX 318 ; N periodcentered ; G 121
U 184 ; WX 500 ; N cedilla ; G 122
U 185 ; WX 401 ; N onesuperior ; G 123
U 186 ; WX 470 ; N ordmasculine ; G 124
U 187 ; WX 612 ; N guillemotright ; G 125
U 188 ; WX 969 ; N onequarter ; G 126
U 189 ; WX 969 ; N onehalf ; G 127
U 190 ; WX 969 ; N threequarters ; G 128
U 191 ; WX 536 ; N questiondown ; G 129
U 192 ; WX 722 ; N Agrave ; G 130
U 193 ; WX 722 ; N Aacute ; G 131
U 194 ; WX 722 ; N Acircumflex ; G 132
U 195 ; WX 722 ; N Atilde ; G 133
U 196 ; WX 722 ; N Adieresis ; G 134
U 197 ; WX 722 ; N Aring ; G 135
U 198 ; WX 1001 ; N AE ; G 136
U 199 ; WX 765 ; N Ccedilla ; G 137
U 200 ; WX 730 ; N Egrave ; G 138
U 201 ; WX 730 ; N Eacute ; G 139
U 202 ; WX 730 ; N Ecircumflex ; G 140
U 203 ; WX 730 ; N Edieresis ; G 141
U 204 ; WX 395 ; N Igrave ; G 142
U 205 ; WX 395 ; N Iacute ; G 143
U 206 ; WX 395 ; N Icircumflex ; G 144
U 207 ; WX 395 ; N Idieresis ; G 145
U 208 ; WX 807 ; N Eth ; G 146
U 209 ; WX 875 ; N Ntilde ; G 147
U 210 ; WX 820 ; N Ograve ; G 148
U 211 ; WX 820 ; N Oacute ; G 149
U 212 ; WX 820 ; N Ocircumflex ; G 150
U 213 ; WX 820 ; N Otilde ; G 151
U 214 ; WX 820 ; N Odieresis ; G 152
U 215 ; WX 838 ; N multiply ; G 153
U 216 ; WX 820 ; N Oslash ; G 154
U 217 ; WX 843 ; N Ugrave ; G 155
U 218 ; WX 843 ; N Uacute ; G 156
U 219 ; WX 843 ; N Ucircumflex ; G 157
U 220 ; WX 843 ; N Udieresis ; G 158
U 221 ; WX 660 ; N Yacute ; G 159
U 222 ; WX 676 ; N Thorn ; G 160
U 223 ; WX 668 ; N germandbls ; G 161
U 224 ; WX 596 ; N agrave ; G 162
U 225 ; WX 596 ; N aacute ; G 163
U 226 ; WX 596 ; N acircumflex ; G 164
U 227 ; WX 596 ; N atilde ; G 165
U 228 ; WX 596 ; N adieresis ; G 166
U 229 ; WX 596 ; N aring ; G 167
U 230 ; WX 940 ; N ae ; G 168
U 231 ; WX 560 ; N ccedilla ; G 169
U 232 ; WX 592 ; N egrave ; G 170
U 233 ; WX 592 ; N eacute ; G 171
U 234 ; WX 592 ; N ecircumflex ; G 172
U 235 ; WX 592 ; N edieresis ; G 173
U 236 ; WX 320 ; N igrave ; G 174
U 237 ; WX 320 ; N iacute ; G 175
U 238 ; WX 320 ; N icircumflex ; G 176
U 239 ; WX 320 ; N idieresis ; G 177
U 240 ; WX 602 ; N eth ; G 178
U 241 ; WX 644 ; N ntilde ; G 179
U 242 ; WX 602 ; N ograve ; G 180
U 243 ; WX 602 ; N oacute ; G 181
U 244 ; WX 602 ; N ocircumflex ; G 182
U 245 ; WX 602 ; N otilde ; G 183
U 246 ; WX 602 ; N odieresis ; G 184
U 247 ; WX 838 ; N divide ; G 185
U 248 ; WX 602 ; N oslash ; G 186
U 249 ; WX 644 ; N ugrave ; G 187
U 250 ; WX 644 ; N uacute ; G 188
U 251 ; WX 644 ; N ucircumflex ; G 189
U 252 ; WX 644 ; N udieresis ; G 190
U 253 ; WX 565 ; N yacute ; G 191
U 254 ; WX 640 ; N thorn ; G 192
U 255 ; WX 565 ; N ydieresis ; G 193
U 256 ; WX 722 ; N Amacron ; G 194
U 257 ; WX 596 ; N amacron ; G 195
U 258 ; WX 722 ; N Abreve ; G 196
U 259 ; WX 596 ; N abreve ; G 197
U 260 ; WX 722 ; N Aogonek ; G 198
U 261 ; WX 596 ; N aogonek ; G 199
U 262 ; WX 765 ; N Cacute ; G 200
U 263 ; WX 560 ; N cacute ; G 201
U 264 ; WX 765 ; N Ccircumflex ; G 202
U 265 ; WX 560 ; N ccircumflex ; G 203
U 266 ; WX 765 ; N Cdotaccent ; G 204
U 267 ; WX 560 ; N cdotaccent ; G 205
U 268 ; WX 765 ; N Ccaron ; G 206
U 269 ; WX 560 ; N ccaron ; G 207
U 270 ; WX 802 ; N Dcaron ; G 208
U 271 ; WX 640 ; N dcaron ; G 209
U 272 ; WX 807 ; N Dcroat ; G 210
U 273 ; WX 640 ; N dmacron ; G 211
U 274 ; WX 730 ; N Emacron ; G 212
U 275 ; WX 592 ; N emacron ; G 213
U 276 ; WX 730 ; N Ebreve ; G 214
U 277 ; WX 592 ; N ebreve ; G 215
U 278 ; WX 730 ; N Edotaccent ; G 216
U 279 ; WX 592 ; N edotaccent ; G 217
U 280 ; WX 730 ; N Eogonek ; G 218
U 281 ; WX 592 ; N eogonek ; G 219
U 282 ; WX 730 ; N Ecaron ; G 220
U 283 ; WX 592 ; N ecaron ; G 221
U 284 ; WX 799 ; N Gcircumflex ; G 222
U 285 ; WX 640 ; N gcircumflex ; G 223
U 286 ; WX 799 ; N Gbreve ; G 224
U 287 ; WX 640 ; N gbreve ; G 225
U 288 ; WX 799 ; N Gdotaccent ; G 226
U 289 ; WX 640 ; N gdotaccent ; G 227
U 290 ; WX 799 ; N Gcommaaccent ; G 228
U 291 ; WX 640 ; N gcommaaccent ; G 229
U 292 ; WX 872 ; N Hcircumflex ; G 230
U 293 ; WX 644 ; N hcircumflex ; G 231
U 294 ; WX 872 ; N Hbar ; G 232
U 295 ; WX 644 ; N hbar ; G 233
U 296 ; WX 395 ; N Itilde ; G 234
U 297 ; WX 320 ; N itilde ; G 235
U 298 ; WX 395 ; N Imacron ; G 236
U 299 ; WX 320 ; N imacron ; G 237
U 300 ; WX 395 ; N Ibreve ; G 238
U 301 ; WX 320 ; N ibreve ; G 239
U 302 ; WX 395 ; N Iogonek ; G 240
U 303 ; WX 320 ; N iogonek ; G 241
U 304 ; WX 395 ; N Idot ; G 242
U 305 ; WX 320 ; N dotlessi ; G 243
U 306 ; WX 801 ; N IJ ; G 244
U 307 ; WX 533 ; N ij ; G 245
U 308 ; WX 401 ; N Jcircumflex ; G 246
U 309 ; WX 310 ; N jcircumflex ; G 247
U 310 ; WX 747 ; N Kcommaaccent ; G 248
U 311 ; WX 606 ; N kcommaaccent ; G 249
U 312 ; WX 606 ; N kgreenlandic ; G 250
U 313 ; WX 664 ; N Lacute ; G 251
U 314 ; WX 320 ; N lacute ; G 252
U 315 ; WX 664 ; N Lcommaaccent ; G 253
U 316 ; WX 320 ; N lcommaaccent ; G 254
U 317 ; WX 664 ; N Lcaron ; G 255
U 318 ; WX 400 ; N lcaron ; G 256
U 319 ; WX 671 ; N Ldot ; G 257
U 320 ; WX 465 ; N ldot ; G 258
U 321 ; WX 669 ; N Lslash ; G 259
U 322 ; WX 324 ; N lslash ; G 260
U 323 ; WX 875 ; N Nacute ; G 261
U 324 ; WX 644 ; N nacute ; G 262
U 325 ; WX 875 ; N Ncommaaccent ; G 263
U 326 ; WX 644 ; N ncommaaccent ; G 264
U 327 ; WX 875 ; N Ncaron ; G 265
U 328 ; WX 644 ; N ncaron ; G 266
U 329 ; WX 866 ; N napostrophe ; G 267
U 330 ; WX 843 ; N Eng ; G 268
U 331 ; WX 644 ; N eng ; G 269
U 332 ; WX 820 ; N Omacron ; G 270
U 333 ; WX 602 ; N omacron ; G 271
U 334 ; WX 820 ; N Obreve ; G 272
U 335 ; WX 602 ; N obreve ; G 273
U 336 ; WX 820 ; N Ohungarumlaut ; G 274
U 337 ; WX 602 ; N ohungarumlaut ; G 275
U 338 ; WX 1137 ; N OE ; G 276
U 339 ; WX 989 ; N oe ; G 277
U 340 ; WX 753 ; N Racute ; G 278
U 341 ; WX 478 ; N racute ; G 279
U 342 ; WX 753 ; N Rcommaaccent ; G 280
U 343 ; WX 478 ; N rcommaaccent ; G 281
U 344 ; WX 753 ; N Rcaron ; G 282
U 345 ; WX 478 ; N rcaron ; G 283
U 346 ; WX 685 ; N Sacute ; G 284
U 347 ; WX 513 ; N sacute ; G 285
U 348 ; WX 685 ; N Scircumflex ; G 286
U 349 ; WX 513 ; N scircumflex ; G 287
U 350 ; WX 685 ; N Scedilla ; G 288
U 351 ; WX 513 ; N scedilla ; G 289
U 352 ; WX 685 ; N Scaron ; G 290
U 353 ; WX 513 ; N scaron ; G 291
U 354 ; WX 667 ; N Tcommaaccent ; G 292
U 355 ; WX 402 ; N tcommaaccent ; G 293
U 356 ; WX 667 ; N Tcaron ; G 294
U 357 ; WX 402 ; N tcaron ; G 295
U 358 ; WX 667 ; N Tbar ; G 296
U 359 ; WX 402 ; N tbar ; G 297
U 360 ; WX 843 ; N Utilde ; G 298
U 361 ; WX 644 ; N utilde ; G 299
U 362 ; WX 843 ; N Umacron ; G 300
U 363 ; WX 644 ; N umacron ; G 301
U 364 ; WX 843 ; N Ubreve ; G 302
U 365 ; WX 644 ; N ubreve ; G 303
U 366 ; WX 843 ; N Uring ; G 304
U 367 ; WX 644 ; N uring ; G 305
U 368 ; WX 843 ; N Uhungarumlaut ; G 306
U 369 ; WX 644 ; N uhungarumlaut ; G 307
U 370 ; WX 843 ; N Uogonek ; G 308
U 371 ; WX 644 ; N uogonek ; G 309
U 372 ; WX 1028 ; N Wcircumflex ; G 310
U 373 ; WX 856 ; N wcircumflex ; G 311
U 374 ; WX 660 ; N Ycircumflex ; G 312
U 375 ; WX 565 ; N ycircumflex ; G 313
U 376 ; WX 660 ; N Ydieresis ; G 314
U 377 ; WX 695 ; N Zacute ; G 315
U 378 ; WX 527 ; N zacute ; G 316
U 379 ; WX 695 ; N Zdotaccent ; G 317
U 380 ; WX 527 ; N zdotaccent ; G 318
U 381 ; WX 695 ; N Zcaron ; G 319
U 382 ; WX 527 ; N zcaron ; G 320
U 383 ; WX 370 ; N longs ; G 321
U 384 ; WX 640 ; N uni0180 ; G 322
U 385 ; WX 735 ; N uni0181 ; G 323
U 386 ; WX 735 ; N uni0182 ; G 324
U 387 ; WX 640 ; N uni0183 ; G 325
U 388 ; WX 735 ; N uni0184 ; G 326
U 389 ; WX 640 ; N uni0185 ; G 327
U 390 ; WX 765 ; N uni0186 ; G 328
U 391 ; WX 765 ; N uni0187 ; G 329
U 392 ; WX 560 ; N uni0188 ; G 330
U 393 ; WX 807 ; N uni0189 ; G 331
U 394 ; WX 802 ; N uni018A ; G 332
U 395 ; WX 735 ; N uni018B ; G 333
U 396 ; WX 640 ; N uni018C ; G 334
U 397 ; WX 602 ; N uni018D ; G 335
U 398 ; WX 730 ; N uni018E ; G 336
U 399 ; WX 820 ; N uni018F ; G 337
U 400 ; WX 623 ; N uni0190 ; G 338
U 401 ; WX 694 ; N uni0191 ; G 339
U 402 ; WX 370 ; N florin ; G 340
U 403 ; WX 799 ; N uni0193 ; G 341
U 404 ; WX 712 ; N uni0194 ; G 342
U 405 ; WX 932 ; N uni0195 ; G 343
U 406 ; WX 395 ; N uni0196 ; G 344
U 407 ; WX 395 ; N uni0197 ; G 345
U 408 ; WX 747 ; N uni0198 ; G 346
U 409 ; WX 606 ; N uni0199 ; G 347
U 410 ; WX 320 ; N uni019A ; G 348
U 411 ; WX 634 ; N uni019B ; G 349
U 412 ; WX 948 ; N uni019C ; G 350
U 413 ; WX 875 ; N uni019D ; G 351
U 414 ; WX 644 ; N uni019E ; G 352
U 415 ; WX 820 ; N uni019F ; G 353
U 416 ; WX 820 ; N Ohorn ; G 354
U 417 ; WX 602 ; N ohorn ; G 355
U 418 ; WX 1040 ; N uni01A2 ; G 356
U 419 ; WX 807 ; N uni01A3 ; G 357
U 420 ; WX 673 ; N uni01A4 ; G 358
U 421 ; WX 640 ; N uni01A5 ; G 359
U 422 ; WX 753 ; N uni01A6 ; G 360
U 423 ; WX 685 ; N uni01A7 ; G 361
U 424 ; WX 513 ; N uni01A8 ; G 362
U 425 ; WX 707 ; N uni01A9 ; G 363
U 426 ; WX 324 ; N uni01AA ; G 364
U 427 ; WX 402 ; N uni01AB ; G 365
U 428 ; WX 667 ; N uni01AC ; G 366
U 429 ; WX 402 ; N uni01AD ; G 367
U 430 ; WX 667 ; N uni01AE ; G 368
U 431 ; WX 843 ; N Uhorn ; G 369
U 432 ; WX 644 ; N uhorn ; G 370
U 433 ; WX 829 ; N uni01B1 ; G 371
U 434 ; WX 760 ; N uni01B2 ; G 372
U 435 ; WX 738 ; N uni01B3 ; G 373
U 436 ; WX 745 ; N uni01B4 ; G 374
U 437 ; WX 695 ; N uni01B5 ; G 375
U 438 ; WX 527 ; N uni01B6 ; G 376
U 439 ; WX 564 ; N uni01B7 ; G 377
U 440 ; WX 564 ; N uni01B8 ; G 378
U 441 ; WX 564 ; N uni01B9 ; G 379
U 442 ; WX 564 ; N uni01BA ; G 380
U 443 ; WX 636 ; N uni01BB ; G 381
U 444 ; WX 687 ; N uni01BC ; G 382
U 445 ; WX 564 ; N uni01BD ; G 383
U 446 ; WX 536 ; N uni01BE ; G 384
U 447 ; WX 635 ; N uni01BF ; G 385
U 448 ; WX 295 ; N uni01C0 ; G 386
U 449 ; WX 492 ; N uni01C1 ; G 387
U 450 ; WX 459 ; N uni01C2 ; G 388
U 451 ; WX 295 ; N uni01C3 ; G 389
U 452 ; WX 1497 ; N uni01C4 ; G 390
U 453 ; WX 1329 ; N uni01C5 ; G 391
U 454 ; WX 1167 ; N uni01C6 ; G 392
U 455 ; WX 1065 ; N uni01C7 ; G 393
U 456 ; WX 974 ; N uni01C8 ; G 394
U 457 ; WX 630 ; N uni01C9 ; G 395
U 458 ; WX 1276 ; N uni01CA ; G 396
U 459 ; WX 1185 ; N uni01CB ; G 397
U 460 ; WX 954 ; N uni01CC ; G 398
U 461 ; WX 722 ; N uni01CD ; G 399
U 462 ; WX 596 ; N uni01CE ; G 400
U 463 ; WX 395 ; N uni01CF ; G 401
U 464 ; WX 320 ; N uni01D0 ; G 402
U 465 ; WX 820 ; N uni01D1 ; G 403
U 466 ; WX 602 ; N uni01D2 ; G 404
U 467 ; WX 843 ; N uni01D3 ; G 405
U 468 ; WX 644 ; N uni01D4 ; G 406
U 469 ; WX 843 ; N uni01D5 ; G 407
U 470 ; WX 644 ; N uni01D6 ; G 408
U 471 ; WX 843 ; N uni01D7 ; G 409
U 472 ; WX 644 ; N uni01D8 ; G 410
U 473 ; WX 843 ; N uni01D9 ; G 411
U 474 ; WX 644 ; N uni01DA ; G 412
U 475 ; WX 843 ; N uni01DB ; G 413
U 476 ; WX 644 ; N uni01DC ; G 414
U 477 ; WX 592 ; N uni01DD ; G 415
U 478 ; WX 722 ; N uni01DE ; G 416
U 479 ; WX 596 ; N uni01DF ; G 417
U 480 ; WX 722 ; N uni01E0 ; G 418
U 481 ; WX 596 ; N uni01E1 ; G 419
U 482 ; WX 1001 ; N uni01E2 ; G 420
U 483 ; WX 940 ; N uni01E3 ; G 421
U 484 ; WX 848 ; N uni01E4 ; G 422
U 485 ; WX 640 ; N uni01E5 ; G 423
U 486 ; WX 799 ; N Gcaron ; G 424
U 487 ; WX 640 ; N gcaron ; G 425
U 488 ; WX 747 ; N uni01E8 ; G 426
U 489 ; WX 606 ; N uni01E9 ; G 427
U 490 ; WX 820 ; N uni01EA ; G 428
U 491 ; WX 602 ; N uni01EB ; G 429
U 492 ; WX 820 ; N uni01EC ; G 430
U 493 ; WX 602 ; N uni01ED ; G 431
U 494 ; WX 564 ; N uni01EE ; G 432
U 495 ; WX 564 ; N uni01EF ; G 433
U 496 ; WX 320 ; N uni01F0 ; G 434
U 497 ; WX 1497 ; N uni01F1 ; G 435
U 498 ; WX 1329 ; N uni01F2 ; G 436
U 499 ; WX 1167 ; N uni01F3 ; G 437
U 500 ; WX 799 ; N uni01F4 ; G 438
U 501 ; WX 640 ; N uni01F5 ; G 439
U 502 ; WX 1154 ; N uni01F6 ; G 440
U 503 ; WX 707 ; N uni01F7 ; G 441
U 504 ; WX 875 ; N uni01F8 ; G 442
U 505 ; WX 644 ; N uni01F9 ; G 443
U 506 ; WX 722 ; N Aringacute ; G 444
U 507 ; WX 596 ; N aringacute ; G 445
U 508 ; WX 1001 ; N AEacute ; G 446
U 509 ; WX 940 ; N aeacute ; G 447
U 510 ; WX 820 ; N Oslashacute ; G 448
U 511 ; WX 602 ; N oslashacute ; G 449
U 512 ; WX 722 ; N uni0200 ; G 450
U 513 ; WX 596 ; N uni0201 ; G 451
U 514 ; WX 722 ; N uni0202 ; G 452
U 515 ; WX 596 ; N uni0203 ; G 453
U 516 ; WX 730 ; N uni0204 ; G 454
U 517 ; WX 592 ; N uni0205 ; G 455
U 518 ; WX 730 ; N uni0206 ; G 456
U 519 ; WX 592 ; N uni0207 ; G 457
U 520 ; WX 395 ; N uni0208 ; G 458
U 521 ; WX 320 ; N uni0209 ; G 459
U 522 ; WX 395 ; N uni020A ; G 460
U 523 ; WX 320 ; N uni020B ; G 461
U 524 ; WX 820 ; N uni020C ; G 462
U 525 ; WX 602 ; N uni020D ; G 463
U 526 ; WX 820 ; N uni020E ; G 464
U 527 ; WX 602 ; N uni020F ; G 465
U 528 ; WX 753 ; N uni0210 ; G 466
U 529 ; WX 478 ; N uni0211 ; G 467
U 530 ; WX 753 ; N uni0212 ; G 468
U 531 ; WX 478 ; N uni0213 ; G 469
U 532 ; WX 843 ; N uni0214 ; G 470
U 533 ; WX 644 ; N uni0215 ; G 471
U 534 ; WX 843 ; N uni0216 ; G 472
U 535 ; WX 644 ; N uni0217 ; G 473
U 536 ; WX 685 ; N Scommaaccent ; G 474
U 537 ; WX 513 ; N scommaaccent ; G 475
U 538 ; WX 667 ; N uni021A ; G 476
U 539 ; WX 402 ; N uni021B ; G 477
U 540 ; WX 627 ; N uni021C ; G 478
U 541 ; WX 521 ; N uni021D ; G 479
U 542 ; WX 872 ; N uni021E ; G 480
U 543 ; WX 644 ; N uni021F ; G 481
U 544 ; WX 843 ; N uni0220 ; G 482
U 545 ; WX 814 ; N uni0221 ; G 483
U 546 ; WX 572 ; N uni0222 ; G 484
U 547 ; WX 552 ; N uni0223 ; G 485
U 548 ; WX 695 ; N uni0224 ; G 486
U 549 ; WX 527 ; N uni0225 ; G 487
U 550 ; WX 722 ; N uni0226 ; G 488
U 551 ; WX 596 ; N uni0227 ; G 489
U 552 ; WX 730 ; N uni0228 ; G 490
U 553 ; WX 592 ; N uni0229 ; G 491
U 554 ; WX 820 ; N uni022A ; G 492
U 555 ; WX 602 ; N uni022B ; G 493
U 556 ; WX 820 ; N uni022C ; G 494
U 557 ; WX 602 ; N uni022D ; G 495
U 558 ; WX 820 ; N uni022E ; G 496
U 559 ; WX 602 ; N uni022F ; G 497
U 560 ; WX 820 ; N uni0230 ; G 498
U 561 ; WX 602 ; N uni0231 ; G 499
U 562 ; WX 660 ; N uni0232 ; G 500
U 563 ; WX 565 ; N uni0233 ; G 501
U 564 ; WX 500 ; N uni0234 ; G 502
U 565 ; WX 832 ; N uni0235 ; G 503
U 566 ; WX 494 ; N uni0236 ; G 504
U 567 ; WX 310 ; N dotlessj ; G 505
U 568 ; WX 960 ; N uni0238 ; G 506
U 569 ; WX 960 ; N uni0239 ; G 507
U 570 ; WX 722 ; N uni023A ; G 508
U 571 ; WX 765 ; N uni023B ; G 509
U 572 ; WX 560 ; N uni023C ; G 510
U 573 ; WX 664 ; N uni023D ; G 511
U 574 ; WX 667 ; N uni023E ; G 512
U 575 ; WX 513 ; N uni023F ; G 513
U 576 ; WX 527 ; N uni0240 ; G 514
U 577 ; WX 583 ; N uni0241 ; G 515
U 578 ; WX 464 ; N uni0242 ; G 516
U 579 ; WX 735 ; N uni0243 ; G 517
U 580 ; WX 843 ; N uni0244 ; G 518
U 581 ; WX 722 ; N uni0245 ; G 519
U 582 ; WX 730 ; N uni0246 ; G 520
U 583 ; WX 592 ; N uni0247 ; G 521
U 584 ; WX 401 ; N uni0248 ; G 522
U 585 ; WX 315 ; N uni0249 ; G 523
U 586 ; WX 782 ; N uni024A ; G 524
U 587 ; WX 640 ; N uni024B ; G 525
U 588 ; WX 753 ; N uni024C ; G 526
U 589 ; WX 478 ; N uni024D ; G 527
U 590 ; WX 660 ; N uni024E ; G 528
U 591 ; WX 565 ; N uni024F ; G 529
U 592 ; WX 596 ; N uni0250 ; G 530
U 593 ; WX 675 ; N uni0251 ; G 531
U 594 ; WX 675 ; N uni0252 ; G 532
U 595 ; WX 640 ; N uni0253 ; G 533
U 596 ; WX 560 ; N uni0254 ; G 534
U 597 ; WX 560 ; N uni0255 ; G 535
U 598 ; WX 647 ; N uni0256 ; G 536
U 599 ; WX 683 ; N uni0257 ; G 537
U 600 ; WX 592 ; N uni0258 ; G 538
U 601 ; WX 592 ; N uni0259 ; G 539
U 602 ; WX 843 ; N uni025A ; G 540
U 603 ; WX 537 ; N uni025B ; G 541
U 604 ; WX 509 ; N uni025C ; G 542
U 605 ; WX 773 ; N uni025D ; G 543
U 606 ; WX 613 ; N uni025E ; G 544
U 607 ; WX 315 ; N uni025F ; G 545
U 608 ; WX 683 ; N uni0260 ; G 546
U 609 ; WX 640 ; N uni0261 ; G 547
U 610 ; WX 580 ; N uni0262 ; G 548
U 611 ; WX 599 ; N uni0263 ; G 549
U 612 ; WX 564 ; N uni0264 ; G 550
U 613 ; WX 644 ; N uni0265 ; G 551
U 614 ; WX 644 ; N uni0266 ; G 552
U 615 ; WX 644 ; N uni0267 ; G 553
U 616 ; WX 320 ; N uni0268 ; G 554
U 617 ; WX 392 ; N uni0269 ; G 555
U 618 ; WX 320 ; N uni026A ; G 556
U 619 ; WX 380 ; N uni026B ; G 557
U 620 ; WX 454 ; N uni026C ; G 558
U 621 ; WX 363 ; N uni026D ; G 559
U 622 ; WX 704 ; N uni026E ; G 560
U 623 ; WX 948 ; N uni026F ; G 561
U 624 ; WX 948 ; N uni0270 ; G 562
U 625 ; WX 948 ; N uni0271 ; G 563
U 626 ; WX 644 ; N uni0272 ; G 564
U 627 ; WX 694 ; N uni0273 ; G 565
U 628 ; WX 646 ; N uni0274 ; G 566
U 629 ; WX 602 ; N uni0275 ; G 567
U 630 ; WX 790 ; N uni0276 ; G 568
U 631 ; WX 821 ; N uni0277 ; G 569
U 632 ; WX 692 ; N uni0278 ; G 570
U 633 ; WX 501 ; N uni0279 ; G 571
U 634 ; WX 501 ; N uni027A ; G 572
U 635 ; WX 551 ; N uni027B ; G 573
U 636 ; WX 478 ; N uni027C ; G 574
U 637 ; WX 478 ; N uni027D ; G 575
U 638 ; WX 453 ; N uni027E ; G 576
U 639 ; WX 453 ; N uni027F ; G 577
U 640 ; WX 581 ; N uni0280 ; G 578
U 641 ; WX 581 ; N uni0281 ; G 579
U 642 ; WX 513 ; N uni0282 ; G 580
U 643 ; WX 271 ; N uni0283 ; G 581
U 644 ; WX 370 ; N uni0284 ; G 582
U 645 ; WX 487 ; N uni0285 ; G 583
U 646 ; WX 324 ; N uni0286 ; G 584
U 647 ; WX 402 ; N uni0287 ; G 585
U 648 ; WX 402 ; N uni0288 ; G 586
U 649 ; WX 644 ; N uni0289 ; G 587
U 650 ; WX 620 ; N uni028A ; G 588
U 651 ; WX 608 ; N uni028B ; G 589
U 652 ; WX 565 ; N uni028C ; G 590
U 653 ; WX 856 ; N uni028D ; G 591
U 654 ; WX 565 ; N uni028E ; G 592
U 655 ; WX 655 ; N uni028F ; G 593
U 656 ; WX 597 ; N uni0290 ; G 594
U 657 ; WX 560 ; N uni0291 ; G 595
U 658 ; WX 564 ; N uni0292 ; G 596
U 659 ; WX 560 ; N uni0293 ; G 597
U 660 ; WX 536 ; N uni0294 ; G 598
U 661 ; WX 536 ; N uni0295 ; G 599
U 662 ; WX 536 ; N uni0296 ; G 600
U 663 ; WX 420 ; N uni0297 ; G 601
U 664 ; WX 820 ; N uni0298 ; G 602
U 665 ; WX 563 ; N uni0299 ; G 603
U 666 ; WX 613 ; N uni029A ; G 604
U 667 ; WX 660 ; N uni029B ; G 605
U 668 ; WX 667 ; N uni029C ; G 606
U 669 ; WX 366 ; N uni029D ; G 607
U 670 ; WX 606 ; N uni029E ; G 608
U 671 ; WX 543 ; N uni029F ; G 609
U 672 ; WX 683 ; N uni02A0 ; G 610
U 673 ; WX 536 ; N uni02A1 ; G 611
U 674 ; WX 536 ; N uni02A2 ; G 612
U 675 ; WX 996 ; N uni02A3 ; G 613
U 676 ; WX 1033 ; N uni02A4 ; G 614
U 677 ; WX 998 ; N uni02A5 ; G 615
U 678 ; WX 823 ; N uni02A6 ; G 616
U 679 ; WX 598 ; N uni02A7 ; G 617
U 680 ; WX 825 ; N uni02A8 ; G 618
U 681 ; WX 894 ; N uni02A9 ; G 619
U 682 ; WX 725 ; N uni02AA ; G 620
U 683 ; WX 676 ; N uni02AB ; G 621
U 684 ; WX 598 ; N uni02AC ; G 622
U 685 ; WX 443 ; N uni02AD ; G 623
U 686 ; WX 781 ; N uni02AE ; G 624
U 687 ; WX 767 ; N uni02AF ; G 625
U 688 ; WX 433 ; N uni02B0 ; G 626
U 689 ; WX 430 ; N uni02B1 ; G 627
U 690 ; WX 264 ; N uni02B2 ; G 628
U 691 ; WX 347 ; N uni02B3 ; G 629
U 692 ; WX 347 ; N uni02B4 ; G 630
U 693 ; WX 430 ; N uni02B5 ; G 631
U 694 ; WX 392 ; N uni02B6 ; G 632
U 695 ; WX 539 ; N uni02B7 ; G 633
U 696 ; WX 355 ; N uni02B8 ; G 634
U 697 ; WX 278 ; N uni02B9 ; G 635
U 698 ; WX 460 ; N uni02BA ; G 636
U 699 ; WX 318 ; N uni02BB ; G 637
U 700 ; WX 318 ; N uni02BC ; G 638
U 701 ; WX 318 ; N uni02BD ; G 639
U 702 ; WX 307 ; N uni02BE ; G 640
U 703 ; WX 307 ; N uni02BF ; G 641
U 704 ; WX 280 ; N uni02C0 ; G 642
U 705 ; WX 281 ; N uni02C1 ; G 643
U 706 ; WX 500 ; N uni02C2 ; G 644
U 707 ; WX 500 ; N uni02C3 ; G 645
U 708 ; WX 500 ; N uni02C4 ; G 646
U 709 ; WX 500 ; N uni02C5 ; G 647
U 710 ; WX 500 ; N circumflex ; G 648
U 711 ; WX 500 ; N caron ; G 649
U 712 ; WX 282 ; N uni02C8 ; G 650
U 713 ; WX 500 ; N uni02C9 ; G 651
U 714 ; WX 500 ; N uni02CA ; G 652
U 715 ; WX 500 ; N uni02CB ; G 653
U 716 ; WX 282 ; N uni02CC ; G 654
U 717 ; WX 500 ; N uni02CD ; G 655
U 720 ; WX 337 ; N uni02D0 ; G 656
U 721 ; WX 337 ; N uni02D1 ; G 657
U 722 ; WX 307 ; N uni02D2 ; G 658
U 723 ; WX 307 ; N uni02D3 ; G 659
U 726 ; WX 392 ; N uni02D6 ; G 660
U 727 ; WX 392 ; N uni02D7 ; G 661
U 728 ; WX 500 ; N breve ; G 662
U 729 ; WX 500 ; N dotaccent ; G 663
U 730 ; WX 500 ; N ring ; G 664
U 731 ; WX 500 ; N ogonek ; G 665
U 732 ; WX 500 ; N tilde ; G 666
U 733 ; WX 500 ; N hungarumlaut ; G 667
U 734 ; WX 417 ; N uni02DE ; G 668
U 736 ; WX 377 ; N uni02E0 ; G 669
U 737 ; WX 243 ; N uni02E1 ; G 670
U 738 ; WX 337 ; N uni02E2 ; G 671
U 739 ; WX 355 ; N uni02E3 ; G 672
U 740 ; WX 281 ; N uni02E4 ; G 673
U 741 ; WX 493 ; N uni02E5 ; G 674
U 742 ; WX 493 ; N uni02E6 ; G 675
U 743 ; WX 493 ; N uni02E7 ; G 676
U 744 ; WX 493 ; N uni02E8 ; G 677
U 745 ; WX 493 ; N uni02E9 ; G 678
U 748 ; WX 500 ; N uni02EC ; G 679
U 750 ; WX 484 ; N uni02EE ; G 680
U 751 ; WX 500 ; N uni02EF ; G 681
U 752 ; WX 500 ; N uni02F0 ; G 682
U 755 ; WX 500 ; N uni02F3 ; G 683
U 759 ; WX 500 ; N uni02F7 ; G 684
U 768 ; WX 0 ; N gravecomb ; G 685
U 769 ; WX 0 ; N acutecomb ; G 686
U 770 ; WX 0 ; N uni0302 ; G 687
U 771 ; WX 0 ; N tildecomb ; G 688
U 772 ; WX 0 ; N uni0304 ; G 689
U 773 ; WX 0 ; N uni0305 ; G 690
U 774 ; WX 0 ; N uni0306 ; G 691
U 775 ; WX 0 ; N uni0307 ; G 692
U 776 ; WX 0 ; N uni0308 ; G 693
U 777 ; WX 0 ; N hookabovecomb ; G 694
U 778 ; WX 0 ; N uni030A ; G 695
U 779 ; WX 0 ; N uni030B ; G 696
U 780 ; WX 0 ; N uni030C ; G 697
U 781 ; WX 0 ; N uni030D ; G 698
U 782 ; WX 0 ; N uni030E ; G 699
U 783 ; WX 0 ; N uni030F ; G 700
U 784 ; WX 0 ; N uni0310 ; G 701
U 785 ; WX 0 ; N uni0311 ; G 702
U 786 ; WX 0 ; N uni0312 ; G 703
U 787 ; WX 0 ; N uni0313 ; G 704
U 788 ; WX 0 ; N uni0314 ; G 705
U 789 ; WX 0 ; N uni0315 ; G 706
U 790 ; WX 0 ; N uni0316 ; G 707
U 791 ; WX 0 ; N uni0317 ; G 708
U 792 ; WX 0 ; N uni0318 ; G 709
U 793 ; WX 0 ; N uni0319 ; G 710
U 794 ; WX 0 ; N uni031A ; G 711
U 795 ; WX 0 ; N uni031B ; G 712
U 796 ; WX 0 ; N uni031C ; G 713
U 797 ; WX 0 ; N uni031D ; G 714
U 798 ; WX 0 ; N uni031E ; G 715
U 799 ; WX 0 ; N uni031F ; G 716
U 800 ; WX 0 ; N uni0320 ; G 717
U 801 ; WX 0 ; N uni0321 ; G 718
U 802 ; WX 0 ; N uni0322 ; G 719
U 803 ; WX 0 ; N dotbelowcomb ; G 720
U 804 ; WX 0 ; N uni0324 ; G 721
U 805 ; WX 0 ; N uni0325 ; G 722
U 806 ; WX 0 ; N uni0326 ; G 723
U 807 ; WX 0 ; N uni0327 ; G 724
U 808 ; WX 0 ; N uni0328 ; G 725
U 809 ; WX 0 ; N uni0329 ; G 726
U 810 ; WX 0 ; N uni032A ; G 727
U 811 ; WX 0 ; N uni032B ; G 728
U 812 ; WX 0 ; N uni032C ; G 729
U 813 ; WX 0 ; N uni032D ; G 730
U 814 ; WX 0 ; N uni032E ; G 731
U 815 ; WX 0 ; N uni032F ; G 732
U 816 ; WX 0 ; N uni0330 ; G 733
U 817 ; WX 0 ; N uni0331 ; G 734
U 818 ; WX 0 ; N uni0332 ; G 735
U 819 ; WX 0 ; N uni0333 ; G 736
U 820 ; WX 0 ; N uni0334 ; G 737
U 821 ; WX 0 ; N uni0335 ; G 738
U 822 ; WX 0 ; N uni0336 ; G 739
U 823 ; WX 0 ; N uni0337 ; G 740
U 824 ; WX 0 ; N uni0338 ; G 741
U 825 ; WX 0 ; N uni0339 ; G 742
U 826 ; WX 0 ; N uni033A ; G 743
U 827 ; WX 0 ; N uni033B ; G 744
U 828 ; WX 0 ; N uni033C ; G 745
U 829 ; WX 0 ; N uni033D ; G 746
U 830 ; WX 0 ; N uni033E ; G 747
U 831 ; WX 0 ; N uni033F ; G 748
U 835 ; WX 0 ; N uni0343 ; G 749
U 847 ; WX 0 ; N uni034F ; G 750
U 856 ; WX 0 ; N uni0358 ; G 751
U 864 ; WX 0 ; N uni0360 ; G 752
U 865 ; WX 0 ; N uni0361 ; G 753
U 880 ; WX 740 ; N uni0370 ; G 754
U 881 ; WX 531 ; N uni0371 ; G 755
U 882 ; WX 667 ; N uni0372 ; G 756
U 883 ; WX 553 ; N uni0373 ; G 757
U 884 ; WX 278 ; N uni0374 ; G 758
U 885 ; WX 278 ; N uni0375 ; G 759
U 886 ; WX 875 ; N uni0376 ; G 760
U 887 ; WX 667 ; N uni0377 ; G 761
U 890 ; WX 500 ; N uni037A ; G 762
U 891 ; WX 560 ; N uni037B ; G 763
U 892 ; WX 560 ; N uni037C ; G 764
U 893 ; WX 560 ; N uni037D ; G 765
U 894 ; WX 337 ; N uni037E ; G 766
U 895 ; WX 401 ; N uni037F ; G 767
U 900 ; WX 500 ; N tonos ; G 768
U 901 ; WX 500 ; N dieresistonos ; G 769
U 902 ; WX 722 ; N Alphatonos ; G 770
U 903 ; WX 318 ; N anoteleia ; G 771
U 904 ; WX 900 ; N Epsilontonos ; G 772
U 905 ; WX 1039 ; N Etatonos ; G 773
U 906 ; WX 562 ; N Iotatonos ; G 774
U 908 ; WX 835 ; N Omicrontonos ; G 775
U 910 ; WX 897 ; N Upsilontonos ; G 776
U 911 ; WX 853 ; N Omegatonos ; G 777
U 912 ; WX 392 ; N iotadieresistonos ; G 778
U 913 ; WX 722 ; N Alpha ; G 779
U 914 ; WX 735 ; N Beta ; G 780
U 915 ; WX 694 ; N Gamma ; G 781
U 916 ; WX 722 ; N uni0394 ; G 782
U 917 ; WX 730 ; N Epsilon ; G 783
U 918 ; WX 695 ; N Zeta ; G 784
U 919 ; WX 872 ; N Eta ; G 785
U 920 ; WX 820 ; N Theta ; G 786
U 921 ; WX 395 ; N Iota ; G 787
U 922 ; WX 747 ; N Kappa ; G 788
U 923 ; WX 722 ; N Lambda ; G 789
U 924 ; WX 1024 ; N Mu ; G 790
U 925 ; WX 875 ; N Nu ; G 791
U 926 ; WX 704 ; N Xi ; G 792
U 927 ; WX 820 ; N Omicron ; G 793
U 928 ; WX 872 ; N Pi ; G 794
U 929 ; WX 673 ; N Rho ; G 795
U 931 ; WX 707 ; N Sigma ; G 796
U 932 ; WX 667 ; N Tau ; G 797
U 933 ; WX 660 ; N Upsilon ; G 798
U 934 ; WX 820 ; N Phi ; G 799
U 935 ; WX 712 ; N Chi ; G 800
U 936 ; WX 877 ; N Psi ; G 801
U 937 ; WX 829 ; N Omega ; G 802
U 938 ; WX 395 ; N Iotadieresis ; G 803
U 939 ; WX 660 ; N Upsilondieresis ; G 804
U 940 ; WX 675 ; N alphatonos ; G 805
U 941 ; WX 537 ; N epsilontonos ; G 806
U 942 ; WX 599 ; N etatonos ; G 807
U 943 ; WX 392 ; N iotatonos ; G 808
U 944 ; WX 608 ; N upsilondieresistonos ; G 809
U 945 ; WX 675 ; N alpha ; G 810
U 946 ; WX 578 ; N beta ; G 811
U 947 ; WX 598 ; N gamma ; G 812
U 948 ; WX 602 ; N delta ; G 813
U 949 ; WX 537 ; N epsilon ; G 814
U 950 ; WX 542 ; N zeta ; G 815
U 951 ; WX 599 ; N eta ; G 816
U 952 ; WX 602 ; N theta ; G 817
U 953 ; WX 392 ; N iota ; G 818
U 954 ; WX 656 ; N kappa ; G 819
U 955 ; WX 634 ; N lambda ; G 820
U 956 ; WX 650 ; N uni03BC ; G 821
U 957 ; WX 608 ; N nu ; G 822
U 958 ; WX 551 ; N xi ; G 823
U 959 ; WX 602 ; N omicron ; G 824
U 960 ; WX 657 ; N pi ; G 825
U 961 ; WX 588 ; N rho ; G 826
U 962 ; WX 560 ; N sigma1 ; G 827
U 963 ; WX 683 ; N sigma ; G 828
U 964 ; WX 553 ; N tau ; G 829
U 965 ; WX 608 ; N upsilon ; G 830
U 966 ; WX 700 ; N phi ; G 831
U 967 ; WX 606 ; N chi ; G 832
U 968 ; WX 784 ; N psi ; G 833
U 969 ; WX 815 ; N omega ; G 834
U 970 ; WX 392 ; N iotadieresis ; G 835
U 971 ; WX 608 ; N upsilondieresis ; G 836
U 972 ; WX 602 ; N omicrontonos ; G 837
U 973 ; WX 608 ; N upsilontonos ; G 838
U 974 ; WX 815 ; N omegatonos ; G 839
U 975 ; WX 747 ; N uni03CF ; G 840
U 976 ; WX 583 ; N uni03D0 ; G 841
U 977 ; WX 715 ; N theta1 ; G 842
U 978 ; WX 687 ; N Upsilon1 ; G 843
U 979 ; WX 874 ; N uni03D3 ; G 844
U 980 ; WX 687 ; N uni03D4 ; G 845
U 981 ; WX 682 ; N phi1 ; G 846
U 982 ; WX 815 ; N omega1 ; G 847
U 983 ; WX 624 ; N uni03D7 ; G 848
U 984 ; WX 820 ; N uni03D8 ; G 849
U 985 ; WX 602 ; N uni03D9 ; G 850
U 986 ; WX 765 ; N uni03DA ; G 851
U 987 ; WX 560 ; N uni03DB ; G 852
U 988 ; WX 694 ; N uni03DC ; G 853
U 989 ; WX 463 ; N uni03DD ; G 854
U 990 ; WX 590 ; N uni03DE ; G 855
U 991 ; WX 660 ; N uni03DF ; G 856
U 992 ; WX 782 ; N uni03E0 ; G 857
U 993 ; WX 577 ; N uni03E1 ; G 858
U 1008 ; WX 624 ; N uni03F0 ; G 859
U 1009 ; WX 588 ; N uni03F1 ; G 860
U 1010 ; WX 560 ; N uni03F2 ; G 861
U 1011 ; WX 310 ; N uni03F3 ; G 862
U 1012 ; WX 820 ; N uni03F4 ; G 863
U 1013 ; WX 560 ; N uni03F5 ; G 864
U 1014 ; WX 560 ; N uni03F6 ; G 865
U 1015 ; WX 676 ; N uni03F7 ; G 866
U 1016 ; WX 640 ; N uni03F8 ; G 867
U 1017 ; WX 765 ; N uni03F9 ; G 868
U 1018 ; WX 1024 ; N uni03FA ; G 869
U 1019 ; WX 708 ; N uni03FB ; G 870
U 1020 ; WX 588 ; N uni03FC ; G 871
U 1021 ; WX 765 ; N uni03FD ; G 872
U 1022 ; WX 765 ; N uni03FE ; G 873
U 1023 ; WX 765 ; N uni03FF ; G 874
U 1024 ; WX 730 ; N uni0400 ; G 875
U 1025 ; WX 730 ; N uni0401 ; G 876
U 1026 ; WX 799 ; N uni0402 ; G 877
U 1027 ; WX 662 ; N uni0403 ; G 878
U 1028 ; WX 765 ; N uni0404 ; G 879
U 1029 ; WX 685 ; N uni0405 ; G 880
U 1030 ; WX 395 ; N uni0406 ; G 881
U 1031 ; WX 395 ; N uni0407 ; G 882
U 1032 ; WX 401 ; N uni0408 ; G 883
U 1033 ; WX 1084 ; N uni0409 ; G 884
U 1034 ; WX 1118 ; N uni040A ; G 885
U 1035 ; WX 872 ; N uni040B ; G 886
U 1036 ; WX 774 ; N uni040C ; G 887
U 1037 ; WX 872 ; N uni040D ; G 888
U 1038 ; WX 723 ; N uni040E ; G 889
U 1039 ; WX 872 ; N uni040F ; G 890
U 1040 ; WX 757 ; N uni0410 ; G 891
U 1041 ; WX 735 ; N uni0411 ; G 892
U 1042 ; WX 735 ; N uni0412 ; G 893
U 1043 ; WX 662 ; N uni0413 ; G 894
U 1044 ; WX 813 ; N uni0414 ; G 895
U 1045 ; WX 730 ; N uni0415 ; G 896
U 1046 ; WX 1124 ; N uni0416 ; G 897
U 1047 ; WX 623 ; N uni0417 ; G 898
U 1048 ; WX 872 ; N uni0418 ; G 899
U 1049 ; WX 872 ; N uni0419 ; G 900
U 1050 ; WX 774 ; N uni041A ; G 901
U 1051 ; WX 834 ; N uni041B ; G 902
U 1052 ; WX 1024 ; N uni041C ; G 903
U 1053 ; WX 872 ; N uni041D ; G 904
U 1054 ; WX 820 ; N uni041E ; G 905
U 1055 ; WX 872 ; N uni041F ; G 906
U 1056 ; WX 673 ; N uni0420 ; G 907
U 1057 ; WX 765 ; N uni0421 ; G 908
U 1058 ; WX 667 ; N uni0422 ; G 909
U 1059 ; WX 723 ; N uni0423 ; G 910
U 1060 ; WX 830 ; N uni0424 ; G 911
U 1061 ; WX 712 ; N uni0425 ; G 912
U 1062 ; WX 872 ; N uni0426 ; G 913
U 1063 ; WX 773 ; N uni0427 ; G 914
U 1064 ; WX 1141 ; N uni0428 ; G 915
U 1065 ; WX 1141 ; N uni0429 ; G 916
U 1066 ; WX 794 ; N uni042A ; G 917
U 1067 ; WX 984 ; N uni042B ; G 918
U 1068 ; WX 674 ; N uni042C ; G 919
U 1069 ; WX 765 ; N uni042D ; G 920
U 1070 ; WX 1193 ; N uni042E ; G 921
U 1071 ; WX 808 ; N uni042F ; G 922
U 1072 ; WX 596 ; N uni0430 ; G 923
U 1073 ; WX 610 ; N uni0431 ; G 924
U 1074 ; WX 582 ; N uni0432 ; G 925
U 1075 ; WX 505 ; N uni0433 ; G 926
U 1076 ; WX 634 ; N uni0434 ; G 927
U 1077 ; WX 592 ; N uni0435 ; G 928
U 1078 ; WX 1137 ; N uni0436 ; G 929
U 1079 ; WX 545 ; N uni0437 ; G 930
U 1080 ; WX 644 ; N uni0438 ; G 931
U 1081 ; WX 644 ; N uni0439 ; G 932
U 1082 ; WX 597 ; N uni043A ; G 933
U 1083 ; WX 637 ; N uni043B ; G 934
U 1084 ; WX 829 ; N uni043C ; G 935
U 1085 ; WX 659 ; N uni043D ; G 936
U 1086 ; WX 602 ; N uni043E ; G 937
U 1087 ; WX 644 ; N uni043F ; G 938
U 1088 ; WX 640 ; N uni0440 ; G 939
U 1089 ; WX 560 ; N uni0441 ; G 940
U 1090 ; WX 948 ; N uni0442 ; G 941
U 1091 ; WX 580 ; N uni0443 ; G 942
U 1092 ; WX 783 ; N uni0444 ; G 943
U 1093 ; WX 564 ; N uni0445 ; G 944
U 1094 ; WX 698 ; N uni0446 ; G 945
U 1095 ; WX 622 ; N uni0447 ; G 946
U 1096 ; WX 947 ; N uni0448 ; G 947
U 1097 ; WX 1001 ; N uni0449 ; G 948
U 1098 ; WX 667 ; N uni044A ; G 949
U 1099 ; WX 814 ; N uni044B ; G 950
U 1100 ; WX 544 ; N uni044C ; G 951
U 1101 ; WX 560 ; N uni044D ; G 952
U 1102 ; WX 880 ; N uni044E ; G 953
U 1103 ; WX 662 ; N uni044F ; G 954
U 1104 ; WX 592 ; N uni0450 ; G 955
U 1105 ; WX 592 ; N uni0451 ; G 956
U 1106 ; WX 624 ; N uni0452 ; G 957
U 1107 ; WX 505 ; N uni0453 ; G 958
U 1108 ; WX 560 ; N uni0454 ; G 959
U 1109 ; WX 513 ; N uni0455 ; G 960
U 1110 ; WX 320 ; N uni0456 ; G 961
U 1111 ; WX 320 ; N uni0457 ; G 962
U 1112 ; WX 310 ; N uni0458 ; G 963
U 1113 ; WX 859 ; N uni0459 ; G 964
U 1114 ; WX 878 ; N uni045A ; G 965
U 1115 ; WX 644 ; N uni045B ; G 966
U 1116 ; WX 597 ; N uni045C ; G 967
U 1117 ; WX 644 ; N uni045D ; G 968
U 1118 ; WX 580 ; N uni045E ; G 969
U 1119 ; WX 644 ; N uni045F ; G 970
U 1122 ; WX 762 ; N uni0462 ; G 971
U 1123 ; WX 882 ; N uni0463 ; G 972
U 1124 ; WX 1129 ; N uni0464 ; G 973
U 1125 ; WX 834 ; N uni0465 ; G 974
U 1130 ; WX 1124 ; N uni046A ; G 975
U 1131 ; WX 920 ; N uni046B ; G 976
U 1132 ; WX 1359 ; N uni046C ; G 977
U 1133 ; WX 1063 ; N uni046D ; G 978
U 1136 ; WX 944 ; N uni0470 ; G 979
U 1137 ; WX 902 ; N uni0471 ; G 980
U 1138 ; WX 820 ; N uni0472 ; G 981
U 1139 ; WX 552 ; N uni0473 ; G 982
U 1140 ; WX 859 ; N uni0474 ; G 983
U 1141 ; WX 678 ; N uni0475 ; G 984
U 1142 ; WX 859 ; N uni0476 ; G 985
U 1143 ; WX 678 ; N uni0477 ; G 986
U 1164 ; WX 707 ; N uni048C ; G 987
U 1165 ; WX 544 ; N uni048D ; G 988
U 1168 ; WX 672 ; N uni0490 ; G 989
U 1169 ; WX 529 ; N uni0491 ; G 990
U 1170 ; WX 662 ; N uni0492 ; G 991
U 1171 ; WX 505 ; N uni0493 ; G 992
U 1172 ; WX 730 ; N uni0494 ; G 993
U 1173 ; WX 614 ; N uni0495 ; G 994
U 1174 ; WX 1124 ; N uni0496 ; G 995
U 1175 ; WX 1137 ; N uni0497 ; G 996
U 1176 ; WX 623 ; N uni0498 ; G 997
U 1177 ; WX 545 ; N uni0499 ; G 998
U 1178 ; WX 774 ; N uni049A ; G 999
U 1179 ; WX 604 ; N uni049B ; G 1000
U 1182 ; WX 774 ; N uni049E ; G 1001
U 1183 ; WX 597 ; N uni049F ; G 1002
U 1184 ; WX 892 ; N uni04A0 ; G 1003
U 1185 ; WX 669 ; N uni04A1 ; G 1004
U 1186 ; WX 872 ; N uni04A2 ; G 1005
U 1187 ; WX 712 ; N uni04A3 ; G 1006
U 1188 ; WX 1139 ; N uni04A4 ; G 1007
U 1189 ; WX 857 ; N uni04A5 ; G 1008
U 1190 ; WX 1206 ; N uni04A6 ; G 1009
U 1191 ; WX 943 ; N uni04A7 ; G 1010
U 1194 ; WX 765 ; N uni04AA ; G 1011
U 1195 ; WX 560 ; N uni04AB ; G 1012
U 1196 ; WX 667 ; N uni04AC ; G 1013
U 1197 ; WX 1013 ; N uni04AD ; G 1014
U 1198 ; WX 660 ; N uni04AE ; G 1015
U 1199 ; WX 571 ; N uni04AF ; G 1016
U 1200 ; WX 660 ; N uni04B0 ; G 1017
U 1201 ; WX 571 ; N uni04B1 ; G 1018
U 1202 ; WX 712 ; N uni04B2 ; G 1019
U 1203 ; WX 629 ; N uni04B3 ; G 1020
U 1204 ; WX 936 ; N uni04B4 ; G 1021
U 1205 ; WX 732 ; N uni04B5 ; G 1022
U 1206 ; WX 749 ; N uni04B6 ; G 1023
U 1207 ; WX 677 ; N uni04B7 ; G 1024
U 1210 ; WX 749 ; N uni04BA ; G 1025
U 1211 ; WX 644 ; N uni04BB ; G 1026
U 1216 ; WX 395 ; N uni04C0 ; G 1027
U 1217 ; WX 1124 ; N uni04C1 ; G 1028
U 1218 ; WX 1137 ; N uni04C2 ; G 1029
U 1219 ; WX 747 ; N uni04C3 ; G 1030
U 1220 ; WX 606 ; N uni04C4 ; G 1031
U 1223 ; WX 872 ; N uni04C7 ; G 1032
U 1224 ; WX 667 ; N uni04C8 ; G 1033
U 1227 ; WX 749 ; N uni04CB ; G 1034
U 1228 ; WX 667 ; N uni04CC ; G 1035
U 1231 ; WX 320 ; N uni04CF ; G 1036
U 1232 ; WX 757 ; N uni04D0 ; G 1037
U 1233 ; WX 596 ; N uni04D1 ; G 1038
U 1234 ; WX 757 ; N uni04D2 ; G 1039
U 1235 ; WX 596 ; N uni04D3 ; G 1040
U 1236 ; WX 1001 ; N uni04D4 ; G 1041
U 1237 ; WX 940 ; N uni04D5 ; G 1042
U 1238 ; WX 730 ; N uni04D6 ; G 1043
U 1239 ; WX 592 ; N uni04D7 ; G 1044
U 1240 ; WX 820 ; N uni04D8 ; G 1045
U 1241 ; WX 592 ; N uni04D9 ; G 1046
U 1242 ; WX 820 ; N uni04DA ; G 1047
U 1243 ; WX 592 ; N uni04DB ; G 1048
U 1244 ; WX 1124 ; N uni04DC ; G 1049
U 1245 ; WX 1137 ; N uni04DD ; G 1050
U 1246 ; WX 623 ; N uni04DE ; G 1051
U 1247 ; WX 545 ; N uni04DF ; G 1052
U 1248 ; WX 564 ; N uni04E0 ; G 1053
U 1249 ; WX 564 ; N uni04E1 ; G 1054
U 1250 ; WX 872 ; N uni04E2 ; G 1055
U 1251 ; WX 644 ; N uni04E3 ; G 1056
U 1252 ; WX 872 ; N uni04E4 ; G 1057
U 1253 ; WX 644 ; N uni04E5 ; G 1058
U 1254 ; WX 820 ; N uni04E6 ; G 1059
U 1255 ; WX 602 ; N uni04E7 ; G 1060
U 1256 ; WX 820 ; N uni04E8 ; G 1061
U 1257 ; WX 602 ; N uni04E9 ; G 1062
U 1258 ; WX 820 ; N uni04EA ; G 1063
U 1259 ; WX 602 ; N uni04EB ; G 1064
U 1260 ; WX 765 ; N uni04EC ; G 1065
U 1261 ; WX 560 ; N uni04ED ; G 1066
U 1262 ; WX 723 ; N uni04EE ; G 1067
U 1263 ; WX 580 ; N uni04EF ; G 1068
U 1264 ; WX 723 ; N uni04F0 ; G 1069
U 1265 ; WX 580 ; N uni04F1 ; G 1070
U 1266 ; WX 723 ; N uni04F2 ; G 1071
U 1267 ; WX 580 ; N uni04F3 ; G 1072
U 1268 ; WX 773 ; N uni04F4 ; G 1073
U 1269 ; WX 622 ; N uni04F5 ; G 1074
U 1270 ; WX 662 ; N uni04F6 ; G 1075
U 1271 ; WX 505 ; N uni04F7 ; G 1076
U 1272 ; WX 984 ; N uni04F8 ; G 1077
U 1273 ; WX 814 ; N uni04F9 ; G 1078
U 1296 ; WX 623 ; N uni0510 ; G 1079
U 1297 ; WX 545 ; N uni0511 ; G 1080
U 1298 ; WX 834 ; N uni0512 ; G 1081
U 1299 ; WX 637 ; N uni0513 ; G 1082
U 1300 ; WX 1199 ; N uni0514 ; G 1083
U 1301 ; WX 939 ; N uni0515 ; G 1084
U 1306 ; WX 820 ; N uni051A ; G 1085
U 1307 ; WX 640 ; N uni051B ; G 1086
U 1308 ; WX 1028 ; N uni051C ; G 1087
U 1309 ; WX 856 ; N uni051D ; G 1088
U 1329 ; WX 810 ; N uni0531 ; G 1089
U 1330 ; WX 811 ; N uni0532 ; G 1090
U 1331 ; WX 806 ; N uni0533 ; G 1091
U 1332 ; WX 828 ; N uni0534 ; G 1092
U 1333 ; WX 806 ; N uni0535 ; G 1093
U 1334 ; WX 826 ; N uni0536 ; G 1094
U 1335 ; WX 761 ; N uni0537 ; G 1095
U 1336 ; WX 811 ; N uni0538 ; G 1096
U 1337 ; WX 968 ; N uni0539 ; G 1097
U 1338 ; WX 816 ; N uni053A ; G 1098
U 1339 ; WX 772 ; N uni053B ; G 1099
U 1340 ; WX 682 ; N uni053C ; G 1100
U 1341 ; WX 1097 ; N uni053D ; G 1101
U 1342 ; WX 845 ; N uni053E ; G 1102
U 1343 ; WX 804 ; N uni053F ; G 1103
U 1344 ; WX 719 ; N uni0540 ; G 1104
U 1345 ; WX 810 ; N uni0541 ; G 1105
U 1346 ; WX 833 ; N uni0542 ; G 1106
U 1347 ; WX 831 ; N uni0543 ; G 1107
U 1348 ; WX 897 ; N uni0544 ; G 1108
U 1349 ; WX 763 ; N uni0545 ; G 1109
U 1350 ; WX 794 ; N uni0546 ; G 1110
U 1351 ; WX 754 ; N uni0547 ; G 1111
U 1352 ; WX 799 ; N uni0548 ; G 1112
U 1353 ; WX 797 ; N uni0549 ; G 1113
U 1354 ; WX 875 ; N uni054A ; G 1114
U 1355 ; WX 830 ; N uni054B ; G 1115
U 1356 ; WX 864 ; N uni054C ; G 1116
U 1357 ; WX 799 ; N uni054D ; G 1117
U 1358 ; WX 802 ; N uni054E ; G 1118
U 1359 ; WX 731 ; N uni054F ; G 1119
U 1360 ; WX 774 ; N uni0550 ; G 1120
U 1361 ; WX 749 ; N uni0551 ; G 1121
U 1362 ; WX 633 ; N uni0552 ; G 1122
U 1363 ; WX 845 ; N uni0553 ; G 1123
U 1364 ; WX 843 ; N uni0554 ; G 1124
U 1365 ; WX 835 ; N uni0555 ; G 1125
U 1366 ; WX 821 ; N uni0556 ; G 1126
U 1369 ; WX 307 ; N uni0559 ; G 1127
U 1370 ; WX 264 ; N uni055A ; G 1128
U 1371 ; WX 229 ; N uni055B ; G 1129
U 1372 ; WX 391 ; N uni055C ; G 1130
U 1373 ; WX 364 ; N uni055D ; G 1131
U 1374 ; WX 386 ; N uni055E ; G 1132
U 1375 ; WX 500 ; N uni055F ; G 1133
U 1377 ; WX 949 ; N uni0561 ; G 1134
U 1378 ; WX 618 ; N uni0562 ; G 1135
U 1379 ; WX 695 ; N uni0563 ; G 1136
U 1380 ; WX 695 ; N uni0564 ; G 1137
U 1381 ; WX 628 ; N uni0565 ; G 1138
U 1382 ; WX 688 ; N uni0566 ; G 1139
U 1383 ; WX 510 ; N uni0567 ; G 1140
U 1384 ; WX 636 ; N uni0568 ; G 1141
U 1385 ; WX 791 ; N uni0569 ; G 1142
U 1386 ; WX 671 ; N uni056A ; G 1143
U 1387 ; WX 635 ; N uni056B ; G 1144
U 1388 ; WX 305 ; N uni056C ; G 1145
U 1389 ; WX 973 ; N uni056D ; G 1146
U 1390 ; WX 614 ; N uni056E ; G 1147
U 1391 ; WX 628 ; N uni056F ; G 1148
U 1392 ; WX 636 ; N uni0570 ; G 1149
U 1393 ; WX 630 ; N uni0571 ; G 1150
U 1394 ; WX 636 ; N uni0572 ; G 1151
U 1395 ; WX 654 ; N uni0573 ; G 1152
U 1396 ; WX 644 ; N uni0574 ; G 1153
U 1397 ; WX 309 ; N uni0575 ; G 1154
U 1398 ; WX 636 ; N uni0576 ; G 1155
U 1399 ; WX 461 ; N uni0577 ; G 1156
U 1400 ; WX 649 ; N uni0578 ; G 1157
U 1401 ; WX 365 ; N uni0579 ; G 1158
U 1402 ; WX 940 ; N uni057A ; G 1159
U 1403 ; WX 562 ; N uni057B ; G 1160
U 1404 ; WX 657 ; N uni057C ; G 1161
U 1405 ; WX 644 ; N uni057D ; G 1162
U 1406 ; WX 630 ; N uni057E ; G 1163
U 1407 ; WX 930 ; N uni057F ; G 1164
U 1408 ; WX 644 ; N uni0580 ; G 1165
U 1409 ; WX 643 ; N uni0581 ; G 1166
U 1410 ; WX 483 ; N uni0582 ; G 1167
U 1411 ; WX 930 ; N uni0583 ; G 1168
U 1412 ; WX 636 ; N uni0584 ; G 1169
U 1413 ; WX 609 ; N uni0585 ; G 1170
U 1414 ; WX 809 ; N uni0586 ; G 1171
U 1415 ; WX 789 ; N uni0587 ; G 1172
U 1417 ; WX 340 ; N uni0589 ; G 1173
U 1418 ; WX 334 ; N uni058A ; G 1174
U 3647 ; WX 636 ; N uni0E3F ; G 1175
U 4256 ; WX 732 ; N uni10A0 ; G 1176
U 4257 ; WX 860 ; N uni10A1 ; G 1177
U 4258 ; WX 837 ; N uni10A2 ; G 1178
U 4259 ; WX 869 ; N uni10A3 ; G 1179
U 4260 ; WX 743 ; N uni10A4 ; G 1180
U 4261 ; WX 991 ; N uni10A5 ; G 1181
U 4262 ; WX 925 ; N uni10A6 ; G 1182
U 4263 ; WX 1111 ; N uni10A7 ; G 1183
U 4264 ; WX 576 ; N uni10A8 ; G 1184
U 4265 ; WX 760 ; N uni10A9 ; G 1185
U 4266 ; WX 972 ; N uni10AA ; G 1186
U 4267 ; WX 951 ; N uni10AB ; G 1187
U 4268 ; WX 753 ; N uni10AC ; G 1188
U 4269 ; WX 1084 ; N uni10AD ; G 1189
U 4270 ; WX 906 ; N uni10AE ; G 1190
U 4271 ; WX 838 ; N uni10AF ; G 1191
U 4272 ; WX 1049 ; N uni10B0 ; G 1192
U 4273 ; WX 743 ; N uni10B1 ; G 1193
U 4274 ; WX 679 ; N uni10B2 ; G 1194
U 4275 ; WX 1025 ; N uni10B3 ; G 1195
U 4276 ; WX 946 ; N uni10B4 ; G 1196
U 4277 ; WX 1029 ; N uni10B5 ; G 1197
U 4278 ; WX 741 ; N uni10B6 ; G 1198
U 4279 ; WX 743 ; N uni10B7 ; G 1199
U 4280 ; WX 742 ; N uni10B8 ; G 1200
U 4281 ; WX 743 ; N uni10B9 ; G 1201
U 4282 ; WX 889 ; N uni10BA ; G 1202
U 4283 ; WX 946 ; N uni10BB ; G 1203
U 4284 ; WX 724 ; N uni10BC ; G 1204
U 4285 ; WX 765 ; N uni10BD ; G 1205
U 4286 ; WX 743 ; N uni10BE ; G 1206
U 4287 ; WX 968 ; N uni10BF ; G 1207
U 4288 ; WX 1010 ; N uni10C0 ; G 1208
U 4289 ; WX 712 ; N uni10C1 ; G 1209
U 4290 ; WX 874 ; N uni10C2 ; G 1210
U 4291 ; WX 744 ; N uni10C3 ; G 1211
U 4292 ; WX 847 ; N uni10C4 ; G 1212
U 4293 ; WX 960 ; N uni10C5 ; G 1213
U 4304 ; WX 550 ; N uni10D0 ; G 1214
U 4305 ; WX 581 ; N uni10D1 ; G 1215
U 4306 ; WX 599 ; N uni10D2 ; G 1216
U 4307 ; WX 843 ; N uni10D3 ; G 1217
U 4308 ; WX 571 ; N uni10D4 ; G 1218
U 4309 ; WX 567 ; N uni10D5 ; G 1219
U 4310 ; WX 620 ; N uni10D6 ; G 1220
U 4311 ; WX 871 ; N uni10D7 ; G 1221
U 4312 ; WX 569 ; N uni10D8 ; G 1222
U 4313 ; WX 556 ; N uni10D9 ; G 1223
U 4314 ; WX 1076 ; N uni10DA ; G 1224
U 4315 ; WX 596 ; N uni10DB ; G 1225
U 4316 ; WX 596 ; N uni10DC ; G 1226
U 4317 ; WX 835 ; N uni10DD ; G 1227
U 4318 ; WX 580 ; N uni10DE ; G 1228
U 4319 ; WX 590 ; N uni10DF ; G 1229
U 4320 ; WX 833 ; N uni10E0 ; G 1230
U 4321 ; WX 607 ; N uni10E1 ; G 1231
U 4322 ; WX 758 ; N uni10E2 ; G 1232
U 4323 ; WX 701 ; N uni10E3 ; G 1233
U 4324 ; WX 825 ; N uni10E4 ; G 1234
U 4325 ; WX 595 ; N uni10E5 ; G 1235
U 4326 ; WX 868 ; N uni10E6 ; G 1236
U 4327 ; WX 578 ; N uni10E7 ; G 1237
U 4328 ; WX 604 ; N uni10E8 ; G 1238
U 4329 ; WX 596 ; N uni10E9 ; G 1239
U 4330 ; WX 685 ; N uni10EA ; G 1240
U 4331 ; WX 597 ; N uni10EB ; G 1241
U 4332 ; WX 557 ; N uni10EC ; G 1242
U 4333 ; WX 585 ; N uni10ED ; G 1243
U 4334 ; WX 625 ; N uni10EE ; G 1244
U 4335 ; WX 693 ; N uni10EF ; G 1245
U 4336 ; WX 582 ; N uni10F0 ; G 1246
U 4337 ; WX 613 ; N uni10F1 ; G 1247
U 4338 ; WX 581 ; N uni10F2 ; G 1248
U 4339 ; WX 582 ; N uni10F3 ; G 1249
U 4340 ; WX 580 ; N uni10F4 ; G 1250
U 4341 ; WX 659 ; N uni10F5 ; G 1251
U 4342 ; WX 896 ; N uni10F6 ; G 1252
U 4343 ; WX 636 ; N uni10F7 ; G 1253
U 4344 ; WX 592 ; N uni10F8 ; G 1254
U 4345 ; WX 628 ; N uni10F9 ; G 1255
U 4346 ; WX 581 ; N uni10FA ; G 1256
U 4347 ; WX 456 ; N uni10FB ; G 1257
U 4348 ; WX 373 ; N uni10FC ; G 1258
U 7424 ; WX 565 ; N uni1D00 ; G 1259
U 7425 ; WX 774 ; N uni1D01 ; G 1260
U 7426 ; WX 940 ; N uni1D02 ; G 1261
U 7427 ; WX 563 ; N uni1D03 ; G 1262
U 7428 ; WX 560 ; N uni1D04 ; G 1263
U 7429 ; WX 585 ; N uni1D05 ; G 1264
U 7430 ; WX 585 ; N uni1D06 ; G 1265
U 7431 ; WX 553 ; N uni1D07 ; G 1266
U 7432 ; WX 509 ; N uni1D08 ; G 1267
U 7433 ; WX 320 ; N uni1D09 ; G 1268
U 7434 ; WX 499 ; N uni1D0A ; G 1269
U 7435 ; WX 597 ; N uni1D0B ; G 1270
U 7436 ; WX 543 ; N uni1D0C ; G 1271
U 7437 ; WX 778 ; N uni1D0D ; G 1272
U 7438 ; WX 667 ; N uni1D0E ; G 1273
U 7439 ; WX 602 ; N uni1D0F ; G 1274
U 7440 ; WX 560 ; N uni1D10 ; G 1275
U 7441 ; WX 647 ; N uni1D11 ; G 1276
U 7442 ; WX 647 ; N uni1D12 ; G 1277
U 7443 ; WX 647 ; N uni1D13 ; G 1278
U 7444 ; WX 989 ; N uni1D14 ; G 1279
U 7445 ; WX 512 ; N uni1D15 ; G 1280
U 7446 ; WX 602 ; N uni1D16 ; G 1281
U 7447 ; WX 602 ; N uni1D17 ; G 1282
U 7448 ; WX 553 ; N uni1D18 ; G 1283
U 7449 ; WX 594 ; N uni1D19 ; G 1284
U 7450 ; WX 594 ; N uni1D1A ; G 1285
U 7451 ; WX 553 ; N uni1D1B ; G 1286
U 7452 ; WX 585 ; N uni1D1C ; G 1287
U 7453 ; WX 664 ; N uni1D1D ; G 1288
U 7454 ; WX 923 ; N uni1D1E ; G 1289
U 7455 ; WX 655 ; N uni1D1F ; G 1290
U 7456 ; WX 565 ; N uni1D20 ; G 1291
U 7457 ; WX 856 ; N uni1D21 ; G 1292
U 7458 ; WX 527 ; N uni1D22 ; G 1293
U 7459 ; WX 527 ; N uni1D23 ; G 1294
U 7460 ; WX 531 ; N uni1D24 ; G 1295
U 7461 ; WX 743 ; N uni1D25 ; G 1296
U 7462 ; WX 524 ; N uni1D26 ; G 1297
U 7463 ; WX 565 ; N uni1D27 ; G 1298
U 7464 ; WX 657 ; N uni1D28 ; G 1299
U 7465 ; WX 553 ; N uni1D29 ; G 1300
U 7466 ; WX 703 ; N uni1D2A ; G 1301
U 7467 ; WX 635 ; N uni1D2B ; G 1302
U 7468 ; WX 455 ; N uni1D2C ; G 1303
U 7469 ; WX 630 ; N uni1D2D ; G 1304
U 7470 ; WX 463 ; N uni1D2E ; G 1305
U 7471 ; WX 463 ; N uni1D2F ; G 1306
U 7472 ; WX 505 ; N uni1D30 ; G 1307
U 7473 ; WX 459 ; N uni1D31 ; G 1308
U 7474 ; WX 459 ; N uni1D32 ; G 1309
U 7475 ; WX 503 ; N uni1D33 ; G 1310
U 7476 ; WX 549 ; N uni1D34 ; G 1311
U 7477 ; WX 249 ; N uni1D35 ; G 1312
U 7478 ; WX 252 ; N uni1D36 ; G 1313
U 7479 ; WX 470 ; N uni1D37 ; G 1314
U 7480 ; WX 418 ; N uni1D38 ; G 1315
U 7481 ; WX 645 ; N uni1D39 ; G 1316
U 7482 ; WX 551 ; N uni1D3A ; G 1317
U 7483 ; WX 551 ; N uni1D3B ; G 1318
U 7484 ; WX 516 ; N uni1D3C ; G 1319
U 7485 ; WX 369 ; N uni1D3D ; G 1320
U 7486 ; WX 424 ; N uni1D3E ; G 1321
U 7487 ; WX 474 ; N uni1D3F ; G 1322
U 7488 ; WX 420 ; N uni1D40 ; G 1323
U 7489 ; WX 531 ; N uni1D41 ; G 1324
U 7490 ; WX 647 ; N uni1D42 ; G 1325
U 7491 ; WX 375 ; N uni1D43 ; G 1326
U 7492 ; WX 375 ; N uni1D44 ; G 1327
U 7493 ; WX 425 ; N uni1D45 ; G 1328
U 7494 ; WX 592 ; N uni1D46 ; G 1329
U 7495 ; WX 400 ; N uni1D47 ; G 1330
U 7496 ; WX 400 ; N uni1D48 ; G 1331
U 7497 ; WX 387 ; N uni1D49 ; G 1332
U 7498 ; WX 387 ; N uni1D4A ; G 1333
U 7499 ; WX 428 ; N uni1D4B ; G 1334
U 7500 ; WX 340 ; N uni1D4C ; G 1335
U 7501 ; WX 400 ; N uni1D4D ; G 1336
U 7502 ; WX 175 ; N uni1D4E ; G 1337
U 7503 ; WX 365 ; N uni1D4F ; G 1338
U 7504 ; WX 613 ; N uni1D50 ; G 1339
U 7505 ; WX 399 ; N uni1D51 ; G 1340
U 7506 ; WX 385 ; N uni1D52 ; G 1341
U 7507 ; WX 346 ; N uni1D53 ; G 1342
U 7508 ; WX 385 ; N uni1D54 ; G 1343
U 7509 ; WX 385 ; N uni1D55 ; G 1344
U 7510 ; WX 400 ; N uni1D56 ; G 1345
U 7511 ; WX 247 ; N uni1D57 ; G 1346
U 7512 ; WX 399 ; N uni1D58 ; G 1347
U 7513 ; WX 418 ; N uni1D59 ; G 1348
U 7514 ; WX 613 ; N uni1D5A ; G 1349
U 7515 ; WX 373 ; N uni1D5B ; G 1350
U 7516 ; WX 468 ; N uni1D5C ; G 1351
U 7517 ; WX 364 ; N uni1D5D ; G 1352
U 7518 ; WX 376 ; N uni1D5E ; G 1353
U 7519 ; WX 379 ; N uni1D5F ; G 1354
U 7520 ; WX 441 ; N uni1D60 ; G 1355
U 7521 ; WX 381 ; N uni1D61 ; G 1356
U 7522 ; WX 201 ; N uni1D62 ; G 1357
U 7523 ; WX 347 ; N uni1D63 ; G 1358
U 7524 ; WX 399 ; N uni1D64 ; G 1359
U 7525 ; WX 373 ; N uni1D65 ; G 1360
U 7526 ; WX 364 ; N uni1D66 ; G 1361
U 7527 ; WX 376 ; N uni1D67 ; G 1362
U 7528 ; WX 370 ; N uni1D68 ; G 1363
U 7529 ; WX 441 ; N uni1D69 ; G 1364
U 7530 ; WX 381 ; N uni1D6A ; G 1365
U 7531 ; WX 974 ; N uni1D6B ; G 1366
U 7543 ; WX 640 ; N uni1D77 ; G 1367
U 7544 ; WX 549 ; N uni1D78 ; G 1368
U 7547 ; WX 320 ; N uni1D7B ; G 1369
U 7548 ; WX 392 ; N uni1D7C ; G 1370
U 7549 ; WX 640 ; N uni1D7D ; G 1371
U 7550 ; WX 585 ; N uni1D7E ; G 1372
U 7551 ; WX 620 ; N uni1D7F ; G 1373
U 7557 ; WX 320 ; N uni1D85 ; G 1374
U 7579 ; WX 425 ; N uni1D9B ; G 1375
U 7580 ; WX 353 ; N uni1D9C ; G 1376
U 7581 ; WX 353 ; N uni1D9D ; G 1377
U 7582 ; WX 473 ; N uni1D9E ; G 1378
U 7583 ; WX 428 ; N uni1D9F ; G 1379
U 7584 ; WX 233 ; N uni1DA0 ; G 1380
U 7585 ; WX 316 ; N uni1DA1 ; G 1381
U 7586 ; WX 488 ; N uni1DA2 ; G 1382
U 7587 ; WX 399 ; N uni1DA3 ; G 1383
U 7588 ; WX 201 ; N uni1DA4 ; G 1384
U 7589 ; WX 201 ; N uni1DA5 ; G 1385
U 7590 ; WX 201 ; N uni1DA6 ; G 1386
U 7591 ; WX 201 ; N uni1DA7 ; G 1387
U 7592 ; WX 318 ; N uni1DA8 ; G 1388
U 7593 ; WX 263 ; N uni1DA9 ; G 1389
U 7594 ; WX 263 ; N uni1DAA ; G 1390
U 7595 ; WX 455 ; N uni1DAB ; G 1391
U 7596 ; WX 613 ; N uni1DAC ; G 1392
U 7597 ; WX 613 ; N uni1DAD ; G 1393
U 7598 ; WX 495 ; N uni1DAE ; G 1394
U 7599 ; WX 492 ; N uni1DAF ; G 1395
U 7600 ; WX 487 ; N uni1DB0 ; G 1396
U 7601 ; WX 385 ; N uni1DB1 ; G 1397
U 7602 ; WX 473 ; N uni1DB2 ; G 1398
U 7603 ; WX 328 ; N uni1DB3 ; G 1399
U 7604 ; WX 299 ; N uni1DB4 ; G 1400
U 7605 ; WX 334 ; N uni1DB5 ; G 1401
U 7606 ; WX 399 ; N uni1DB6 ; G 1402
U 7607 ; WX 477 ; N uni1DB7 ; G 1403
U 7608 ; WX 368 ; N uni1DB8 ; G 1404
U 7609 ; WX 464 ; N uni1DB9 ; G 1405
U 7610 ; WX 355 ; N uni1DBA ; G 1406
U 7611 ; WX 332 ; N uni1DBB ; G 1407
U 7612 ; WX 418 ; N uni1DBC ; G 1408
U 7613 ; WX 418 ; N uni1DBD ; G 1409
U 7614 ; WX 452 ; N uni1DBE ; G 1410
U 7615 ; WX 473 ; N uni1DBF ; G 1411
U 7620 ; WX 0 ; N uni1DC4 ; G 1412
U 7621 ; WX 0 ; N uni1DC5 ; G 1413
U 7622 ; WX 0 ; N uni1DC6 ; G 1414
U 7623 ; WX 0 ; N uni1DC7 ; G 1415
U 7624 ; WX 0 ; N uni1DC8 ; G 1416
U 7625 ; WX 0 ; N uni1DC9 ; G 1417
U 7680 ; WX 722 ; N uni1E00 ; G 1418
U 7681 ; WX 596 ; N uni1E01 ; G 1419
U 7682 ; WX 735 ; N uni1E02 ; G 1420
U 7683 ; WX 640 ; N uni1E03 ; G 1421
U 7684 ; WX 735 ; N uni1E04 ; G 1422
U 7685 ; WX 640 ; N uni1E05 ; G 1423
U 7686 ; WX 735 ; N uni1E06 ; G 1424
U 7687 ; WX 640 ; N uni1E07 ; G 1425
U 7688 ; WX 765 ; N uni1E08 ; G 1426
U 7689 ; WX 560 ; N uni1E09 ; G 1427
U 7690 ; WX 802 ; N uni1E0A ; G 1428
U 7691 ; WX 640 ; N uni1E0B ; G 1429
U 7692 ; WX 802 ; N uni1E0C ; G 1430
U 7693 ; WX 640 ; N uni1E0D ; G 1431
U 7694 ; WX 802 ; N uni1E0E ; G 1432
U 7695 ; WX 640 ; N uni1E0F ; G 1433
U 7696 ; WX 802 ; N uni1E10 ; G 1434
U 7697 ; WX 640 ; N uni1E11 ; G 1435
U 7698 ; WX 802 ; N uni1E12 ; G 1436
U 7699 ; WX 640 ; N uni1E13 ; G 1437
U 7700 ; WX 730 ; N uni1E14 ; G 1438
U 7701 ; WX 592 ; N uni1E15 ; G 1439
U 7702 ; WX 730 ; N uni1E16 ; G 1440
U 7703 ; WX 592 ; N uni1E17 ; G 1441
U 7704 ; WX 730 ; N uni1E18 ; G 1442
U 7705 ; WX 592 ; N uni1E19 ; G 1443
U 7706 ; WX 730 ; N uni1E1A ; G 1444
U 7707 ; WX 592 ; N uni1E1B ; G 1445
U 7708 ; WX 730 ; N uni1E1C ; G 1446
U 7709 ; WX 592 ; N uni1E1D ; G 1447
U 7710 ; WX 694 ; N uni1E1E ; G 1448
U 7711 ; WX 370 ; N uni1E1F ; G 1449
U 7712 ; WX 799 ; N uni1E20 ; G 1450
U 7713 ; WX 640 ; N uni1E21 ; G 1451
U 7714 ; WX 872 ; N uni1E22 ; G 1452
U 7715 ; WX 644 ; N uni1E23 ; G 1453
U 7716 ; WX 872 ; N uni1E24 ; G 1454
U 7717 ; WX 644 ; N uni1E25 ; G 1455
U 7718 ; WX 872 ; N uni1E26 ; G 1456
U 7719 ; WX 644 ; N uni1E27 ; G 1457
U 7720 ; WX 872 ; N uni1E28 ; G 1458
U 7721 ; WX 644 ; N uni1E29 ; G 1459
U 7722 ; WX 872 ; N uni1E2A ; G 1460
U 7723 ; WX 644 ; N uni1E2B ; G 1461
U 7724 ; WX 395 ; N uni1E2C ; G 1462
U 7725 ; WX 320 ; N uni1E2D ; G 1463
U 7726 ; WX 395 ; N uni1E2E ; G 1464
U 7727 ; WX 320 ; N uni1E2F ; G 1465
U 7728 ; WX 747 ; N uni1E30 ; G 1466
U 7729 ; WX 606 ; N uni1E31 ; G 1467
U 7730 ; WX 747 ; N uni1E32 ; G 1468
U 7731 ; WX 606 ; N uni1E33 ; G 1469
U 7732 ; WX 747 ; N uni1E34 ; G 1470
U 7733 ; WX 606 ; N uni1E35 ; G 1471
U 7734 ; WX 664 ; N uni1E36 ; G 1472
U 7735 ; WX 320 ; N uni1E37 ; G 1473
U 7736 ; WX 664 ; N uni1E38 ; G 1474
U 7737 ; WX 320 ; N uni1E39 ; G 1475
U 7738 ; WX 664 ; N uni1E3A ; G 1476
U 7739 ; WX 320 ; N uni1E3B ; G 1477
U 7740 ; WX 664 ; N uni1E3C ; G 1478
U 7741 ; WX 320 ; N uni1E3D ; G 1479
U 7742 ; WX 1024 ; N uni1E3E ; G 1480
U 7743 ; WX 948 ; N uni1E3F ; G 1481
U 7744 ; WX 1024 ; N uni1E40 ; G 1482
U 7745 ; WX 948 ; N uni1E41 ; G 1483
U 7746 ; WX 1024 ; N uni1E42 ; G 1484
U 7747 ; WX 953 ; N uni1E43 ; G 1485
U 7748 ; WX 875 ; N uni1E44 ; G 1486
U 7749 ; WX 644 ; N uni1E45 ; G 1487
U 7750 ; WX 875 ; N uni1E46 ; G 1488
U 7751 ; WX 644 ; N uni1E47 ; G 1489
U 7752 ; WX 875 ; N uni1E48 ; G 1490
U 7753 ; WX 644 ; N uni1E49 ; G 1491
U 7754 ; WX 875 ; N uni1E4A ; G 1492
U 7755 ; WX 644 ; N uni1E4B ; G 1493
U 7756 ; WX 820 ; N uni1E4C ; G 1494
U 7757 ; WX 602 ; N uni1E4D ; G 1495
U 7758 ; WX 820 ; N uni1E4E ; G 1496
U 7759 ; WX 602 ; N uni1E4F ; G 1497
U 7760 ; WX 820 ; N uni1E50 ; G 1498
U 7761 ; WX 602 ; N uni1E51 ; G 1499
U 7762 ; WX 820 ; N uni1E52 ; G 1500
U 7763 ; WX 602 ; N uni1E53 ; G 1501
U 7764 ; WX 673 ; N uni1E54 ; G 1502
U 7765 ; WX 640 ; N uni1E55 ; G 1503
U 7766 ; WX 673 ; N uni1E56 ; G 1504
U 7767 ; WX 640 ; N uni1E57 ; G 1505
U 7768 ; WX 753 ; N uni1E58 ; G 1506
U 7769 ; WX 478 ; N uni1E59 ; G 1507
U 7770 ; WX 753 ; N uni1E5A ; G 1508
U 7771 ; WX 478 ; N uni1E5B ; G 1509
U 7772 ; WX 753 ; N uni1E5C ; G 1510
U 7773 ; WX 478 ; N uni1E5D ; G 1511
U 7774 ; WX 753 ; N uni1E5E ; G 1512
U 7775 ; WX 478 ; N uni1E5F ; G 1513
U 7776 ; WX 685 ; N uni1E60 ; G 1514
U 7777 ; WX 513 ; N uni1E61 ; G 1515
U 7778 ; WX 685 ; N uni1E62 ; G 1516
U 7779 ; WX 513 ; N uni1E63 ; G 1517
U 7780 ; WX 685 ; N uni1E64 ; G 1518
U 7781 ; WX 513 ; N uni1E65 ; G 1519
U 7782 ; WX 685 ; N uni1E66 ; G 1520
U 7783 ; WX 521 ; N uni1E67 ; G 1521
U 7784 ; WX 685 ; N uni1E68 ; G 1522
U 7785 ; WX 513 ; N uni1E69 ; G 1523
U 7786 ; WX 667 ; N uni1E6A ; G 1524
U 7787 ; WX 402 ; N uni1E6B ; G 1525
U 7788 ; WX 667 ; N uni1E6C ; G 1526
U 7789 ; WX 402 ; N uni1E6D ; G 1527
U 7790 ; WX 667 ; N uni1E6E ; G 1528
U 7791 ; WX 402 ; N uni1E6F ; G 1529
U 7792 ; WX 667 ; N uni1E70 ; G 1530
U 7793 ; WX 402 ; N uni1E71 ; G 1531
U 7794 ; WX 843 ; N uni1E72 ; G 1532
U 7795 ; WX 644 ; N uni1E73 ; G 1533
U 7796 ; WX 843 ; N uni1E74 ; G 1534
U 7797 ; WX 644 ; N uni1E75 ; G 1535
U 7798 ; WX 843 ; N uni1E76 ; G 1536
U 7799 ; WX 644 ; N uni1E77 ; G 1537
U 7800 ; WX 843 ; N uni1E78 ; G 1538
U 7801 ; WX 644 ; N uni1E79 ; G 1539
U 7802 ; WX 843 ; N uni1E7A ; G 1540
U 7803 ; WX 644 ; N uni1E7B ; G 1541
U 7804 ; WX 722 ; N uni1E7C ; G 1542
U 7805 ; WX 565 ; N uni1E7D ; G 1543
U 7806 ; WX 722 ; N uni1E7E ; G 1544
U 7807 ; WX 565 ; N uni1E7F ; G 1545
U 7808 ; WX 1028 ; N Wgrave ; G 1546
U 7809 ; WX 856 ; N wgrave ; G 1547
U 7810 ; WX 1028 ; N Wacute ; G 1548
U 7811 ; WX 856 ; N wacute ; G 1549
U 7812 ; WX 1028 ; N Wdieresis ; G 1550
U 7813 ; WX 856 ; N wdieresis ; G 1551
U 7814 ; WX 1028 ; N uni1E86 ; G 1552
U 7815 ; WX 856 ; N uni1E87 ; G 1553
U 7816 ; WX 1028 ; N uni1E88 ; G 1554
U 7817 ; WX 856 ; N uni1E89 ; G 1555
U 7818 ; WX 712 ; N uni1E8A ; G 1556
U 7819 ; WX 564 ; N uni1E8B ; G 1557
U 7820 ; WX 712 ; N uni1E8C ; G 1558
U 7821 ; WX 564 ; N uni1E8D ; G 1559
U 7822 ; WX 660 ; N uni1E8E ; G 1560
U 7823 ; WX 565 ; N uni1E8F ; G 1561
U 7824 ; WX 695 ; N uni1E90 ; G 1562
U 7825 ; WX 527 ; N uni1E91 ; G 1563
U 7826 ; WX 695 ; N uni1E92 ; G 1564
U 7827 ; WX 527 ; N uni1E93 ; G 1565
U 7828 ; WX 695 ; N uni1E94 ; G 1566
U 7829 ; WX 527 ; N uni1E95 ; G 1567
U 7830 ; WX 644 ; N uni1E96 ; G 1568
U 7831 ; WX 402 ; N uni1E97 ; G 1569
U 7832 ; WX 856 ; N uni1E98 ; G 1570
U 7833 ; WX 565 ; N uni1E99 ; G 1571
U 7834 ; WX 903 ; N uni1E9A ; G 1572
U 7835 ; WX 370 ; N uni1E9B ; G 1573
U 7836 ; WX 370 ; N uni1E9C ; G 1574
U 7837 ; WX 370 ; N uni1E9D ; G 1575
U 7838 ; WX 829 ; N uni1E9E ; G 1576
U 7839 ; WX 602 ; N uni1E9F ; G 1577
U 7840 ; WX 722 ; N uni1EA0 ; G 1578
U 7841 ; WX 596 ; N uni1EA1 ; G 1579
U 7842 ; WX 722 ; N uni1EA2 ; G 1580
U 7843 ; WX 596 ; N uni1EA3 ; G 1581
U 7844 ; WX 722 ; N uni1EA4 ; G 1582
U 7845 ; WX 613 ; N uni1EA5 ; G 1583
U 7846 ; WX 722 ; N uni1EA6 ; G 1584
U 7847 ; WX 613 ; N uni1EA7 ; G 1585
U 7848 ; WX 722 ; N uni1EA8 ; G 1586
U 7849 ; WX 613 ; N uni1EA9 ; G 1587
U 7850 ; WX 722 ; N uni1EAA ; G 1588
U 7851 ; WX 613 ; N uni1EAB ; G 1589
U 7852 ; WX 722 ; N uni1EAC ; G 1590
U 7853 ; WX 596 ; N uni1EAD ; G 1591
U 7854 ; WX 722 ; N uni1EAE ; G 1592
U 7855 ; WX 596 ; N uni1EAF ; G 1593
U 7856 ; WX 722 ; N uni1EB0 ; G 1594
U 7857 ; WX 596 ; N uni1EB1 ; G 1595
U 7858 ; WX 722 ; N uni1EB2 ; G 1596
U 7859 ; WX 596 ; N uni1EB3 ; G 1597
U 7860 ; WX 722 ; N uni1EB4 ; G 1598
U 7861 ; WX 596 ; N uni1EB5 ; G 1599
U 7862 ; WX 722 ; N uni1EB6 ; G 1600
U 7863 ; WX 596 ; N uni1EB7 ; G 1601
U 7864 ; WX 730 ; N uni1EB8 ; G 1602
U 7865 ; WX 592 ; N uni1EB9 ; G 1603
U 7866 ; WX 730 ; N uni1EBA ; G 1604
U 7867 ; WX 592 ; N uni1EBB ; G 1605
U 7868 ; WX 730 ; N uni1EBC ; G 1606
U 7869 ; WX 592 ; N uni1EBD ; G 1607
U 7870 ; WX 730 ; N uni1EBE ; G 1608
U 7871 ; WX 615 ; N uni1EBF ; G 1609
U 7872 ; WX 730 ; N uni1EC0 ; G 1610
U 7873 ; WX 615 ; N uni1EC1 ; G 1611
U 7874 ; WX 730 ; N uni1EC2 ; G 1612
U 7875 ; WX 615 ; N uni1EC3 ; G 1613
U 7876 ; WX 730 ; N uni1EC4 ; G 1614
U 7877 ; WX 615 ; N uni1EC5 ; G 1615
U 7878 ; WX 730 ; N uni1EC6 ; G 1616
U 7879 ; WX 592 ; N uni1EC7 ; G 1617
U 7880 ; WX 395 ; N uni1EC8 ; G 1618
U 7881 ; WX 320 ; N uni1EC9 ; G 1619
U 7882 ; WX 395 ; N uni1ECA ; G 1620
U 7883 ; WX 320 ; N uni1ECB ; G 1621
U 7884 ; WX 820 ; N uni1ECC ; G 1622
U 7885 ; WX 602 ; N uni1ECD ; G 1623
U 7886 ; WX 820 ; N uni1ECE ; G 1624
U 7887 ; WX 602 ; N uni1ECF ; G 1625
U 7888 ; WX 820 ; N uni1ED0 ; G 1626
U 7889 ; WX 612 ; N uni1ED1 ; G 1627
U 7890 ; WX 820 ; N uni1ED2 ; G 1628
U 7891 ; WX 612 ; N uni1ED3 ; G 1629
U 7892 ; WX 820 ; N uni1ED4 ; G 1630
U 7893 ; WX 612 ; N uni1ED5 ; G 1631
U 7894 ; WX 820 ; N uni1ED6 ; G 1632
U 7895 ; WX 612 ; N uni1ED7 ; G 1633
U 7896 ; WX 820 ; N uni1ED8 ; G 1634
U 7897 ; WX 602 ; N uni1ED9 ; G 1635
U 7898 ; WX 820 ; N uni1EDA ; G 1636
U 7899 ; WX 602 ; N uni1EDB ; G 1637
U 7900 ; WX 820 ; N uni1EDC ; G 1638
U 7901 ; WX 602 ; N uni1EDD ; G 1639
U 7902 ; WX 820 ; N uni1EDE ; G 1640
U 7903 ; WX 602 ; N uni1EDF ; G 1641
U 7904 ; WX 820 ; N uni1EE0 ; G 1642
U 7905 ; WX 602 ; N uni1EE1 ; G 1643
U 7906 ; WX 820 ; N uni1EE2 ; G 1644
U 7907 ; WX 602 ; N uni1EE3 ; G 1645
U 7908 ; WX 843 ; N uni1EE4 ; G 1646
U 7909 ; WX 644 ; N uni1EE5 ; G 1647
U 7910 ; WX 843 ; N uni1EE6 ; G 1648
U 7911 ; WX 644 ; N uni1EE7 ; G 1649
U 7912 ; WX 843 ; N uni1EE8 ; G 1650
U 7913 ; WX 644 ; N uni1EE9 ; G 1651
U 7914 ; WX 843 ; N uni1EEA ; G 1652
U 7915 ; WX 644 ; N uni1EEB ; G 1653
U 7916 ; WX 843 ; N uni1EEC ; G 1654
U 7917 ; WX 644 ; N uni1EED ; G 1655
U 7918 ; WX 843 ; N uni1EEE ; G 1656
U 7919 ; WX 644 ; N uni1EEF ; G 1657
U 7920 ; WX 843 ; N uni1EF0 ; G 1658
U 7921 ; WX 644 ; N uni1EF1 ; G 1659
U 7922 ; WX 660 ; N Ygrave ; G 1660
U 7923 ; WX 565 ; N ygrave ; G 1661
U 7924 ; WX 660 ; N uni1EF4 ; G 1662
U 7925 ; WX 565 ; N uni1EF5 ; G 1663
U 7926 ; WX 660 ; N uni1EF6 ; G 1664
U 7927 ; WX 565 ; N uni1EF7 ; G 1665
U 7928 ; WX 660 ; N uni1EF8 ; G 1666
U 7929 ; WX 565 ; N uni1EF9 ; G 1667
U 7930 ; WX 949 ; N uni1EFA ; G 1668
U 7931 ; WX 581 ; N uni1EFB ; G 1669
U 7936 ; WX 675 ; N uni1F00 ; G 1670
U 7937 ; WX 675 ; N uni1F01 ; G 1671
U 7938 ; WX 675 ; N uni1F02 ; G 1672
U 7939 ; WX 675 ; N uni1F03 ; G 1673
U 7940 ; WX 675 ; N uni1F04 ; G 1674
U 7941 ; WX 675 ; N uni1F05 ; G 1675
U 7942 ; WX 675 ; N uni1F06 ; G 1676
U 7943 ; WX 675 ; N uni1F07 ; G 1677
U 7944 ; WX 722 ; N uni1F08 ; G 1678
U 7945 ; WX 722 ; N uni1F09 ; G 1679
U 7946 ; WX 869 ; N uni1F0A ; G 1680
U 7947 ; WX 869 ; N uni1F0B ; G 1681
U 7948 ; WX 734 ; N uni1F0C ; G 1682
U 7949 ; WX 763 ; N uni1F0D ; G 1683
U 7950 ; WX 722 ; N uni1F0E ; G 1684
U 7951 ; WX 722 ; N uni1F0F ; G 1685
U 7952 ; WX 537 ; N uni1F10 ; G 1686
U 7953 ; WX 537 ; N uni1F11 ; G 1687
U 7954 ; WX 537 ; N uni1F12 ; G 1688
U 7955 ; WX 537 ; N uni1F13 ; G 1689
U 7956 ; WX 537 ; N uni1F14 ; G 1690
U 7957 ; WX 537 ; N uni1F15 ; G 1691
U 7960 ; WX 853 ; N uni1F18 ; G 1692
U 7961 ; WX 841 ; N uni1F19 ; G 1693
U 7962 ; WX 1067 ; N uni1F1A ; G 1694
U 7963 ; WX 1077 ; N uni1F1B ; G 1695
U 7964 ; WX 1008 ; N uni1F1C ; G 1696
U 7965 ; WX 1035 ; N uni1F1D ; G 1697
U 7968 ; WX 599 ; N uni1F20 ; G 1698
U 7969 ; WX 599 ; N uni1F21 ; G 1699
U 7970 ; WX 599 ; N uni1F22 ; G 1700
U 7971 ; WX 599 ; N uni1F23 ; G 1701
U 7972 ; WX 599 ; N uni1F24 ; G 1702
U 7973 ; WX 599 ; N uni1F25 ; G 1703
U 7974 ; WX 599 ; N uni1F26 ; G 1704
U 7975 ; WX 599 ; N uni1F27 ; G 1705
U 7976 ; WX 998 ; N uni1F28 ; G 1706
U 7977 ; WX 992 ; N uni1F29 ; G 1707
U 7978 ; WX 1212 ; N uni1F2A ; G 1708
U 7979 ; WX 1224 ; N uni1F2B ; G 1709
U 7980 ; WX 1159 ; N uni1F2C ; G 1710
U 7981 ; WX 1183 ; N uni1F2D ; G 1711
U 7982 ; WX 1098 ; N uni1F2E ; G 1712
U 7983 ; WX 1095 ; N uni1F2F ; G 1713
U 7984 ; WX 392 ; N uni1F30 ; G 1714
U 7985 ; WX 392 ; N uni1F31 ; G 1715
U 7986 ; WX 392 ; N uni1F32 ; G 1716
U 7987 ; WX 392 ; N uni1F33 ; G 1717
U 7988 ; WX 392 ; N uni1F34 ; G 1718
U 7989 ; WX 392 ; N uni1F35 ; G 1719
U 7990 ; WX 392 ; N uni1F36 ; G 1720
U 7991 ; WX 392 ; N uni1F37 ; G 1721
U 7992 ; WX 521 ; N uni1F38 ; G 1722
U 7993 ; WX 512 ; N uni1F39 ; G 1723
U 7994 ; WX 735 ; N uni1F3A ; G 1724
U 7995 ; WX 738 ; N uni1F3B ; G 1725
U 7996 ; WX 679 ; N uni1F3C ; G 1726
U 7997 ; WX 706 ; N uni1F3D ; G 1727
U 7998 ; WX 624 ; N uni1F3E ; G 1728
U 7999 ; WX 615 ; N uni1F3F ; G 1729
U 8000 ; WX 602 ; N uni1F40 ; G 1730
U 8001 ; WX 602 ; N uni1F41 ; G 1731
U 8002 ; WX 602 ; N uni1F42 ; G 1732
U 8003 ; WX 602 ; N uni1F43 ; G 1733
U 8004 ; WX 602 ; N uni1F44 ; G 1734
U 8005 ; WX 602 ; N uni1F45 ; G 1735
U 8008 ; WX 820 ; N uni1F48 ; G 1736
U 8009 ; WX 859 ; N uni1F49 ; G 1737
U 8010 ; WX 1120 ; N uni1F4A ; G 1738
U 8011 ; WX 1127 ; N uni1F4B ; G 1739
U 8012 ; WX 937 ; N uni1F4C ; G 1740
U 8013 ; WX 964 ; N uni1F4D ; G 1741
U 8016 ; WX 608 ; N uni1F50 ; G 1742
U 8017 ; WX 608 ; N uni1F51 ; G 1743
U 8018 ; WX 608 ; N uni1F52 ; G 1744
U 8019 ; WX 608 ; N uni1F53 ; G 1745
U 8020 ; WX 608 ; N uni1F54 ; G 1746
U 8021 ; WX 608 ; N uni1F55 ; G 1747
U 8022 ; WX 608 ; N uni1F56 ; G 1748
U 8023 ; WX 608 ; N uni1F57 ; G 1749
U 8025 ; WX 851 ; N uni1F59 ; G 1750
U 8027 ; WX 1079 ; N uni1F5B ; G 1751
U 8029 ; WX 1044 ; N uni1F5D ; G 1752
U 8031 ; WX 953 ; N uni1F5F ; G 1753
U 8032 ; WX 815 ; N uni1F60 ; G 1754
U 8033 ; WX 815 ; N uni1F61 ; G 1755
U 8034 ; WX 815 ; N uni1F62 ; G 1756
U 8035 ; WX 815 ; N uni1F63 ; G 1757
U 8036 ; WX 815 ; N uni1F64 ; G 1758
U 8037 ; WX 815 ; N uni1F65 ; G 1759
U 8038 ; WX 815 ; N uni1F66 ; G 1760
U 8039 ; WX 815 ; N uni1F67 ; G 1761
U 8040 ; WX 829 ; N uni1F68 ; G 1762
U 8041 ; WX 870 ; N uni1F69 ; G 1763
U 8042 ; WX 1131 ; N uni1F6A ; G 1764
U 8043 ; WX 1137 ; N uni1F6B ; G 1765
U 8044 ; WX 946 ; N uni1F6C ; G 1766
U 8045 ; WX 976 ; N uni1F6D ; G 1767
U 8046 ; WX 938 ; N uni1F6E ; G 1768
U 8047 ; WX 970 ; N uni1F6F ; G 1769
U 8048 ; WX 675 ; N uni1F70 ; G 1770
U 8049 ; WX 675 ; N uni1F71 ; G 1771
U 8050 ; WX 537 ; N uni1F72 ; G 1772
U 8051 ; WX 537 ; N uni1F73 ; G 1773
U 8052 ; WX 599 ; N uni1F74 ; G 1774
U 8053 ; WX 599 ; N uni1F75 ; G 1775
U 8054 ; WX 392 ; N uni1F76 ; G 1776
U 8055 ; WX 392 ; N uni1F77 ; G 1777
U 8056 ; WX 602 ; N uni1F78 ; G 1778
U 8057 ; WX 602 ; N uni1F79 ; G 1779
U 8058 ; WX 608 ; N uni1F7A ; G 1780
U 8059 ; WX 608 ; N uni1F7B ; G 1781
U 8060 ; WX 815 ; N uni1F7C ; G 1782
U 8061 ; WX 815 ; N uni1F7D ; G 1783
U 8064 ; WX 675 ; N uni1F80 ; G 1784
U 8065 ; WX 675 ; N uni1F81 ; G 1785
U 8066 ; WX 675 ; N uni1F82 ; G 1786
U 8067 ; WX 675 ; N uni1F83 ; G 1787
U 8068 ; WX 675 ; N uni1F84 ; G 1788
U 8069 ; WX 675 ; N uni1F85 ; G 1789
U 8070 ; WX 675 ; N uni1F86 ; G 1790
U 8071 ; WX 675 ; N uni1F87 ; G 1791
U 8072 ; WX 722 ; N uni1F88 ; G 1792
U 8073 ; WX 722 ; N uni1F89 ; G 1793
U 8074 ; WX 869 ; N uni1F8A ; G 1794
U 8075 ; WX 869 ; N uni1F8B ; G 1795
U 8076 ; WX 734 ; N uni1F8C ; G 1796
U 8077 ; WX 763 ; N uni1F8D ; G 1797
U 8078 ; WX 722 ; N uni1F8E ; G 1798
U 8079 ; WX 722 ; N uni1F8F ; G 1799
U 8080 ; WX 599 ; N uni1F90 ; G 1800
U 8081 ; WX 599 ; N uni1F91 ; G 1801
U 8082 ; WX 599 ; N uni1F92 ; G 1802
U 8083 ; WX 599 ; N uni1F93 ; G 1803
U 8084 ; WX 599 ; N uni1F94 ; G 1804
U 8085 ; WX 599 ; N uni1F95 ; G 1805
U 8086 ; WX 599 ; N uni1F96 ; G 1806
U 8087 ; WX 599 ; N uni1F97 ; G 1807
U 8088 ; WX 998 ; N uni1F98 ; G 1808
U 8089 ; WX 992 ; N uni1F99 ; G 1809
U 8090 ; WX 1212 ; N uni1F9A ; G 1810
U 8091 ; WX 1224 ; N uni1F9B ; G 1811
U 8092 ; WX 1159 ; N uni1F9C ; G 1812
U 8093 ; WX 1183 ; N uni1F9D ; G 1813
U 8094 ; WX 1098 ; N uni1F9E ; G 1814
U 8095 ; WX 1095 ; N uni1F9F ; G 1815
U 8096 ; WX 815 ; N uni1FA0 ; G 1816
U 8097 ; WX 815 ; N uni1FA1 ; G 1817
U 8098 ; WX 815 ; N uni1FA2 ; G 1818
U 8099 ; WX 815 ; N uni1FA3 ; G 1819
U 8100 ; WX 815 ; N uni1FA4 ; G 1820
U 8101 ; WX 815 ; N uni1FA5 ; G 1821
U 8102 ; WX 815 ; N uni1FA6 ; G 1822
U 8103 ; WX 815 ; N uni1FA7 ; G 1823
U 8104 ; WX 829 ; N uni1FA8 ; G 1824
U 8105 ; WX 870 ; N uni1FA9 ; G 1825
U 8106 ; WX 1131 ; N uni1FAA ; G 1826
U 8107 ; WX 1137 ; N uni1FAB ; G 1827
U 8108 ; WX 946 ; N uni1FAC ; G 1828
U 8109 ; WX 976 ; N uni1FAD ; G 1829
U 8110 ; WX 938 ; N uni1FAE ; G 1830
U 8111 ; WX 970 ; N uni1FAF ; G 1831
U 8112 ; WX 675 ; N uni1FB0 ; G 1832
U 8113 ; WX 675 ; N uni1FB1 ; G 1833
U 8114 ; WX 675 ; N uni1FB2 ; G 1834
U 8115 ; WX 675 ; N uni1FB3 ; G 1835
U 8116 ; WX 675 ; N uni1FB4 ; G 1836
U 8118 ; WX 675 ; N uni1FB6 ; G 1837
U 8119 ; WX 675 ; N uni1FB7 ; G 1838
U 8120 ; WX 722 ; N uni1FB8 ; G 1839
U 8121 ; WX 722 ; N uni1FB9 ; G 1840
U 8122 ; WX 722 ; N uni1FBA ; G 1841
U 8123 ; WX 722 ; N uni1FBB ; G 1842
U 8124 ; WX 722 ; N uni1FBC ; G 1843
U 8125 ; WX 500 ; N uni1FBD ; G 1844
U 8126 ; WX 500 ; N uni1FBE ; G 1845
U 8127 ; WX 500 ; N uni1FBF ; G 1846
U 8128 ; WX 500 ; N uni1FC0 ; G 1847
U 8129 ; WX 500 ; N uni1FC1 ; G 1848
U 8130 ; WX 599 ; N uni1FC2 ; G 1849
U 8131 ; WX 599 ; N uni1FC3 ; G 1850
U 8132 ; WX 599 ; N uni1FC4 ; G 1851
U 8134 ; WX 599 ; N uni1FC6 ; G 1852
U 8135 ; WX 599 ; N uni1FC7 ; G 1853
U 8136 ; WX 912 ; N uni1FC8 ; G 1854
U 8137 ; WX 900 ; N uni1FC9 ; G 1855
U 8138 ; WX 1063 ; N uni1FCA ; G 1856
U 8139 ; WX 1039 ; N uni1FCB ; G 1857
U 8140 ; WX 872 ; N uni1FCC ; G 1858
U 8141 ; WX 500 ; N uni1FCD ; G 1859
U 8142 ; WX 500 ; N uni1FCE ; G 1860
U 8143 ; WX 500 ; N uni1FCF ; G 1861
U 8144 ; WX 392 ; N uni1FD0 ; G 1862
U 8145 ; WX 392 ; N uni1FD1 ; G 1863
U 8146 ; WX 392 ; N uni1FD2 ; G 1864
U 8147 ; WX 392 ; N uni1FD3 ; G 1865
U 8150 ; WX 392 ; N uni1FD6 ; G 1866
U 8151 ; WX 392 ; N uni1FD7 ; G 1867
U 8152 ; WX 395 ; N uni1FD8 ; G 1868
U 8153 ; WX 395 ; N uni1FD9 ; G 1869
U 8154 ; WX 588 ; N uni1FDA ; G 1870
U 8155 ; WX 562 ; N uni1FDB ; G 1871
U 8157 ; WX 500 ; N uni1FDD ; G 1872
U 8158 ; WX 500 ; N uni1FDE ; G 1873
U 8159 ; WX 500 ; N uni1FDF ; G 1874
U 8160 ; WX 608 ; N uni1FE0 ; G 1875
U 8161 ; WX 608 ; N uni1FE1 ; G 1876
U 8162 ; WX 608 ; N uni1FE2 ; G 1877
U 8163 ; WX 608 ; N uni1FE3 ; G 1878
U 8164 ; WX 588 ; N uni1FE4 ; G 1879
U 8165 ; WX 588 ; N uni1FE5 ; G 1880
U 8166 ; WX 608 ; N uni1FE6 ; G 1881
U 8167 ; WX 608 ; N uni1FE7 ; G 1882
U 8168 ; WX 660 ; N uni1FE8 ; G 1883
U 8169 ; WX 660 ; N uni1FE9 ; G 1884
U 8170 ; WX 921 ; N uni1FEA ; G 1885
U 8171 ; WX 897 ; N uni1FEB ; G 1886
U 8172 ; WX 790 ; N uni1FEC ; G 1887
U 8173 ; WX 500 ; N uni1FED ; G 1888
U 8174 ; WX 500 ; N uni1FEE ; G 1889
U 8175 ; WX 500 ; N uni1FEF ; G 1890
U 8178 ; WX 815 ; N uni1FF2 ; G 1891
U 8179 ; WX 815 ; N uni1FF3 ; G 1892
U 8180 ; WX 815 ; N uni1FF4 ; G 1893
U 8182 ; WX 815 ; N uni1FF6 ; G 1894
U 8183 ; WX 815 ; N uni1FF7 ; G 1895
U 8184 ; WX 961 ; N uni1FF8 ; G 1896
U 8185 ; WX 835 ; N uni1FF9 ; G 1897
U 8186 ; WX 984 ; N uni1FFA ; G 1898
U 8187 ; WX 853 ; N uni1FFB ; G 1899
U 8188 ; WX 829 ; N uni1FFC ; G 1900
U 8189 ; WX 500 ; N uni1FFD ; G 1901
U 8190 ; WX 500 ; N uni1FFE ; G 1902
U 8192 ; WX 500 ; N uni2000 ; G 1903
U 8193 ; WX 1000 ; N uni2001 ; G 1904
U 8194 ; WX 500 ; N uni2002 ; G 1905
U 8195 ; WX 1000 ; N uni2003 ; G 1906
U 8196 ; WX 330 ; N uni2004 ; G 1907
U 8197 ; WX 250 ; N uni2005 ; G 1908
U 8198 ; WX 167 ; N uni2006 ; G 1909
U 8199 ; WX 636 ; N uni2007 ; G 1910
U 8200 ; WX 318 ; N uni2008 ; G 1911
U 8201 ; WX 200 ; N uni2009 ; G 1912
U 8202 ; WX 100 ; N uni200A ; G 1913
U 8203 ; WX 0 ; N uni200B ; G 1914
U 8204 ; WX 0 ; N uni200C ; G 1915
U 8205 ; WX 0 ; N uni200D ; G 1916
U 8206 ; WX 0 ; N uni200E ; G 1917
U 8207 ; WX 0 ; N uni200F ; G 1918
U 8208 ; WX 338 ; N uni2010 ; G 1919
U 8209 ; WX 338 ; N uni2011 ; G 1920
U 8210 ; WX 636 ; N figuredash ; G 1921
U 8211 ; WX 500 ; N endash ; G 1922
U 8212 ; WX 1000 ; N emdash ; G 1923
U 8213 ; WX 1000 ; N uni2015 ; G 1924
U 8214 ; WX 500 ; N uni2016 ; G 1925
U 8215 ; WX 500 ; N underscoredbl ; G 1926
U 8216 ; WX 318 ; N quoteleft ; G 1927
U 8217 ; WX 318 ; N quoteright ; G 1928
U 8218 ; WX 318 ; N quotesinglbase ; G 1929
U 8219 ; WX 318 ; N quotereversed ; G 1930
U 8220 ; WX 511 ; N quotedblleft ; G 1931
U 8221 ; WX 511 ; N quotedblright ; G 1932
U 8222 ; WX 518 ; N quotedblbase ; G 1933
U 8223 ; WX 511 ; N uni201F ; G 1934
U 8224 ; WX 500 ; N dagger ; G 1935
U 8225 ; WX 500 ; N daggerdbl ; G 1936
U 8226 ; WX 590 ; N bullet ; G 1937
U 8227 ; WX 590 ; N uni2023 ; G 1938
U 8228 ; WX 334 ; N onedotenleader ; G 1939
U 8229 ; WX 667 ; N twodotenleader ; G 1940
U 8230 ; WX 1000 ; N ellipsis ; G 1941
U 8234 ; WX 0 ; N uni202A ; G 1942
U 8235 ; WX 0 ; N uni202B ; G 1943
U 8236 ; WX 0 ; N uni202C ; G 1944
U 8237 ; WX 0 ; N uni202D ; G 1945
U 8238 ; WX 0 ; N uni202E ; G 1946
U 8239 ; WX 200 ; N uni202F ; G 1947
U 8240 ; WX 1342 ; N perthousand ; G 1948
U 8241 ; WX 1734 ; N uni2031 ; G 1949
U 8242 ; WX 227 ; N minute ; G 1950
U 8243 ; WX 374 ; N second ; G 1951
U 8244 ; WX 520 ; N uni2034 ; G 1952
U 8245 ; WX 227 ; N uni2035 ; G 1953
U 8246 ; WX 374 ; N uni2036 ; G 1954
U 8247 ; WX 520 ; N uni2037 ; G 1955
U 8248 ; WX 339 ; N uni2038 ; G 1956
U 8249 ; WX 400 ; N guilsinglleft ; G 1957
U 8250 ; WX 400 ; N guilsinglright ; G 1958
U 8252 ; WX 527 ; N exclamdbl ; G 1959
U 8253 ; WX 536 ; N uni203D ; G 1960
U 8254 ; WX 500 ; N uni203E ; G 1961
U 8258 ; WX 1000 ; N uni2042 ; G 1962
U 8260 ; WX 167 ; N fraction ; G 1963
U 8261 ; WX 390 ; N uni2045 ; G 1964
U 8262 ; WX 390 ; N uni2046 ; G 1965
U 8263 ; WX 976 ; N uni2047 ; G 1966
U 8264 ; WX 753 ; N uni2048 ; G 1967
U 8265 ; WX 753 ; N uni2049 ; G 1968
U 8267 ; WX 636 ; N uni204B ; G 1969
U 8268 ; WX 500 ; N uni204C ; G 1970
U 8269 ; WX 500 ; N uni204D ; G 1971
U 8270 ; WX 500 ; N uni204E ; G 1972
U 8271 ; WX 337 ; N uni204F ; G 1973
U 8273 ; WX 500 ; N uni2051 ; G 1974
U 8274 ; WX 450 ; N uni2052 ; G 1975
U 8275 ; WX 1000 ; N uni2053 ; G 1976
U 8279 ; WX 663 ; N uni2057 ; G 1977
U 8287 ; WX 222 ; N uni205F ; G 1978
U 8288 ; WX 0 ; N uni2060 ; G 1979
U 8289 ; WX 0 ; N uni2061 ; G 1980
U 8290 ; WX 0 ; N uni2062 ; G 1981
U 8291 ; WX 0 ; N uni2063 ; G 1982
U 8292 ; WX 0 ; N uni2064 ; G 1983
U 8298 ; WX 0 ; N uni206A ; G 1984
U 8299 ; WX 0 ; N uni206B ; G 1985
U 8300 ; WX 0 ; N uni206C ; G 1986
U 8301 ; WX 0 ; N uni206D ; G 1987
U 8302 ; WX 0 ; N uni206E ; G 1988
U 8303 ; WX 0 ; N uni206F ; G 1989
U 8304 ; WX 401 ; N uni2070 ; G 1990
U 8305 ; WX 201 ; N uni2071 ; G 1991
U 8308 ; WX 401 ; N uni2074 ; G 1992
U 8309 ; WX 401 ; N uni2075 ; G 1993
U 8310 ; WX 401 ; N uni2076 ; G 1994
U 8311 ; WX 401 ; N uni2077 ; G 1995
U 8312 ; WX 401 ; N uni2078 ; G 1996
U 8313 ; WX 401 ; N uni2079 ; G 1997
U 8314 ; WX 528 ; N uni207A ; G 1998
U 8315 ; WX 528 ; N uni207B ; G 1999
U 8316 ; WX 528 ; N uni207C ; G 2000
U 8317 ; WX 246 ; N uni207D ; G 2001
U 8318 ; WX 246 ; N uni207E ; G 2002
U 8319 ; WX 405 ; N uni207F ; G 2003
U 8320 ; WX 401 ; N uni2080 ; G 2004
U 8321 ; WX 401 ; N uni2081 ; G 2005
U 8322 ; WX 401 ; N uni2082 ; G 2006
U 8323 ; WX 401 ; N uni2083 ; G 2007
U 8324 ; WX 401 ; N uni2084 ; G 2008
U 8325 ; WX 401 ; N uni2085 ; G 2009
U 8326 ; WX 401 ; N uni2086 ; G 2010
U 8327 ; WX 401 ; N uni2087 ; G 2011
U 8328 ; WX 401 ; N uni2088 ; G 2012
U 8329 ; WX 401 ; N uni2089 ; G 2013
U 8330 ; WX 528 ; N uni208A ; G 2014
U 8331 ; WX 528 ; N uni208B ; G 2015
U 8332 ; WX 528 ; N uni208C ; G 2016
U 8333 ; WX 246 ; N uni208D ; G 2017
U 8334 ; WX 246 ; N uni208E ; G 2018
U 8336 ; WX 375 ; N uni2090 ; G 2019
U 8337 ; WX 387 ; N uni2091 ; G 2020
U 8338 ; WX 385 ; N uni2092 ; G 2021
U 8339 ; WX 355 ; N uni2093 ; G 2022
U 8340 ; WX 387 ; N uni2094 ; G 2023
U 8341 ; WX 433 ; N uni2095 ; G 2024
U 8342 ; WX 365 ; N uni2096 ; G 2025
U 8343 ; WX 243 ; N uni2097 ; G 2026
U 8344 ; WX 613 ; N uni2098 ; G 2027
U 8345 ; WX 405 ; N uni2099 ; G 2028
U 8346 ; WX 400 ; N uni209A ; G 2029
U 8347 ; WX 337 ; N uni209B ; G 2030
U 8348 ; WX 247 ; N uni209C ; G 2031
U 8358 ; WX 636 ; N uni20A6 ; G 2032
U 8364 ; WX 636 ; N Euro ; G 2033
U 8367 ; WX 1057 ; N uni20AF ; G 2034
U 8369 ; WX 706 ; N uni20B1 ; G 2035
U 8372 ; WX 780 ; N uni20B4 ; G 2036
U 8373 ; WX 636 ; N uni20B5 ; G 2037
U 8376 ; WX 636 ; N uni20B8 ; G 2038
U 8377 ; WX 636 ; N uni20B9 ; G 2039
U 8378 ; WX 636 ; N uni20BA ; G 2040
U 8381 ; WX 636 ; N uni20BD ; G 2041
U 8451 ; WX 1119 ; N uni2103 ; G 2042
U 8457 ; WX 1047 ; N uni2109 ; G 2043
U 8462 ; WX 644 ; N uni210E ; G 2044
U 8463 ; WX 644 ; N uni210F ; G 2045
U 8470 ; WX 946 ; N uni2116 ; G 2046
U 8482 ; WX 1000 ; N trademark ; G 2047
U 8486 ; WX 829 ; N uni2126 ; G 2048
U 8487 ; WX 829 ; N uni2127 ; G 2049
U 8490 ; WX 747 ; N uni212A ; G 2050
U 8491 ; WX 722 ; N uni212B ; G 2051
U 8498 ; WX 694 ; N uni2132 ; G 2052
U 8513 ; WX 775 ; N uni2141 ; G 2053
U 8514 ; WX 557 ; N uni2142 ; G 2054
U 8515 ; WX 557 ; N uni2143 ; G 2055
U 8516 ; WX 611 ; N uni2144 ; G 2056
U 8523 ; WX 890 ; N uni214B ; G 2057
U 8526 ; WX 514 ; N uni214E ; G 2058
U 8528 ; WX 969 ; N uni2150 ; G 2059
U 8529 ; WX 969 ; N uni2151 ; G 2060
U 8530 ; WX 1370 ; N uni2152 ; G 2061
U 8531 ; WX 969 ; N onethird ; G 2062
U 8532 ; WX 969 ; N twothirds ; G 2063
U 8533 ; WX 969 ; N uni2155 ; G 2064
U 8534 ; WX 969 ; N uni2156 ; G 2065
U 8535 ; WX 969 ; N uni2157 ; G 2066
U 8536 ; WX 969 ; N uni2158 ; G 2067
U 8537 ; WX 969 ; N uni2159 ; G 2068
U 8538 ; WX 969 ; N uni215A ; G 2069
U 8539 ; WX 969 ; N oneeighth ; G 2070
U 8540 ; WX 969 ; N threeeighths ; G 2071
U 8541 ; WX 969 ; N fiveeighths ; G 2072
U 8542 ; WX 969 ; N seveneighths ; G 2073
U 8543 ; WX 568 ; N uni215F ; G 2074
U 8544 ; WX 395 ; N uni2160 ; G 2075
U 8545 ; WX 680 ; N uni2161 ; G 2076
U 8546 ; WX 964 ; N uni2162 ; G 2077
U 8547 ; WX 999 ; N uni2163 ; G 2078
U 8548 ; WX 722 ; N uni2164 ; G 2079
U 8549 ; WX 1006 ; N uni2165 ; G 2080
U 8550 ; WX 1291 ; N uni2166 ; G 2081
U 8551 ; WX 1575 ; N uni2167 ; G 2082
U 8552 ; WX 965 ; N uni2168 ; G 2083
U 8553 ; WX 712 ; N uni2169 ; G 2084
U 8554 ; WX 969 ; N uni216A ; G 2085
U 8555 ; WX 1253 ; N uni216B ; G 2086
U 8556 ; WX 664 ; N uni216C ; G 2087
U 8557 ; WX 765 ; N uni216D ; G 2088
U 8558 ; WX 802 ; N uni216E ; G 2089
U 8559 ; WX 1024 ; N uni216F ; G 2090
U 8560 ; WX 320 ; N uni2170 ; G 2091
U 8561 ; WX 640 ; N uni2171 ; G 2092
U 8562 ; WX 959 ; N uni2172 ; G 2093
U 8563 ; WX 885 ; N uni2173 ; G 2094
U 8564 ; WX 565 ; N uni2174 ; G 2095
U 8565 ; WX 885 ; N uni2175 ; G 2096
U 8566 ; WX 1205 ; N uni2176 ; G 2097
U 8567 ; WX 1524 ; N uni2177 ; G 2098
U 8568 ; WX 884 ; N uni2178 ; G 2099
U 8569 ; WX 564 ; N uni2179 ; G 2100
U 8570 ; WX 884 ; N uni217A ; G 2101
U 8571 ; WX 1204 ; N uni217B ; G 2102
U 8572 ; WX 320 ; N uni217C ; G 2103
U 8573 ; WX 560 ; N uni217D ; G 2104
U 8574 ; WX 640 ; N uni217E ; G 2105
U 8575 ; WX 948 ; N uni217F ; G 2106
U 8576 ; WX 1206 ; N uni2180 ; G 2107
U 8577 ; WX 802 ; N uni2181 ; G 2108
U 8578 ; WX 1206 ; N uni2182 ; G 2109
U 8579 ; WX 765 ; N uni2183 ; G 2110
U 8580 ; WX 560 ; N uni2184 ; G 2111
U 8581 ; WX 765 ; N uni2185 ; G 2112
U 8585 ; WX 969 ; N uni2189 ; G 2113
U 8592 ; WX 838 ; N arrowleft ; G 2114
U 8593 ; WX 838 ; N arrowup ; G 2115
U 8594 ; WX 838 ; N arrowright ; G 2116
U 8595 ; WX 838 ; N arrowdown ; G 2117
U 8596 ; WX 838 ; N arrowboth ; G 2118
U 8597 ; WX 838 ; N arrowupdn ; G 2119
U 8598 ; WX 838 ; N uni2196 ; G 2120
U 8599 ; WX 838 ; N uni2197 ; G 2121
U 8600 ; WX 838 ; N uni2198 ; G 2122
U 8601 ; WX 838 ; N uni2199 ; G 2123
U 8602 ; WX 838 ; N uni219A ; G 2124
U 8603 ; WX 838 ; N uni219B ; G 2125
U 8604 ; WX 838 ; N uni219C ; G 2126
U 8605 ; WX 838 ; N uni219D ; G 2127
U 8606 ; WX 838 ; N uni219E ; G 2128
U 8607 ; WX 838 ; N uni219F ; G 2129
U 8608 ; WX 838 ; N uni21A0 ; G 2130
U 8609 ; WX 838 ; N uni21A1 ; G 2131
U 8610 ; WX 838 ; N uni21A2 ; G 2132
U 8611 ; WX 838 ; N uni21A3 ; G 2133
U 8612 ; WX 838 ; N uni21A4 ; G 2134
U 8613 ; WX 838 ; N uni21A5 ; G 2135
U 8614 ; WX 838 ; N uni21A6 ; G 2136
U 8615 ; WX 838 ; N uni21A7 ; G 2137
U 8616 ; WX 838 ; N arrowupdnbse ; G 2138
U 8617 ; WX 838 ; N uni21A9 ; G 2139
U 8618 ; WX 838 ; N uni21AA ; G 2140
U 8619 ; WX 838 ; N uni21AB ; G 2141
U 8620 ; WX 838 ; N uni21AC ; G 2142
U 8621 ; WX 838 ; N uni21AD ; G 2143
U 8622 ; WX 838 ; N uni21AE ; G 2144
U 8623 ; WX 838 ; N uni21AF ; G 2145
U 8624 ; WX 838 ; N uni21B0 ; G 2146
U 8625 ; WX 838 ; N uni21B1 ; G 2147
U 8626 ; WX 838 ; N uni21B2 ; G 2148
U 8627 ; WX 838 ; N uni21B3 ; G 2149
U 8628 ; WX 838 ; N uni21B4 ; G 2150
U 8629 ; WX 838 ; N carriagereturn ; G 2151
U 8630 ; WX 838 ; N uni21B6 ; G 2152
U 8631 ; WX 838 ; N uni21B7 ; G 2153
U 8632 ; WX 838 ; N uni21B8 ; G 2154
U 8633 ; WX 838 ; N uni21B9 ; G 2155
U 8634 ; WX 838 ; N uni21BA ; G 2156
U 8635 ; WX 838 ; N uni21BB ; G 2157
U 8636 ; WX 838 ; N uni21BC ; G 2158
U 8637 ; WX 838 ; N uni21BD ; G 2159
U 8638 ; WX 838 ; N uni21BE ; G 2160
U 8639 ; WX 838 ; N uni21BF ; G 2161
U 8640 ; WX 838 ; N uni21C0 ; G 2162
U 8641 ; WX 838 ; N uni21C1 ; G 2163
U 8642 ; WX 838 ; N uni21C2 ; G 2164
U 8643 ; WX 838 ; N uni21C3 ; G 2165
U 8644 ; WX 838 ; N uni21C4 ; G 2166
U 8645 ; WX 838 ; N uni21C5 ; G 2167
U 8646 ; WX 838 ; N uni21C6 ; G 2168
U 8647 ; WX 838 ; N uni21C7 ; G 2169
U 8648 ; WX 838 ; N uni21C8 ; G 2170
U 8649 ; WX 838 ; N uni21C9 ; G 2171
U 8650 ; WX 838 ; N uni21CA ; G 2172
U 8651 ; WX 838 ; N uni21CB ; G 2173
U 8652 ; WX 838 ; N uni21CC ; G 2174
U 8653 ; WX 838 ; N uni21CD ; G 2175
U 8654 ; WX 838 ; N uni21CE ; G 2176
U 8655 ; WX 838 ; N uni21CF ; G 2177
U 8656 ; WX 838 ; N arrowdblleft ; G 2178
U 8657 ; WX 838 ; N arrowdblup ; G 2179
U 8658 ; WX 838 ; N arrowdblright ; G 2180
U 8659 ; WX 838 ; N arrowdbldown ; G 2181
U 8660 ; WX 838 ; N arrowdblboth ; G 2182
U 8661 ; WX 838 ; N uni21D5 ; G 2183
U 8662 ; WX 838 ; N uni21D6 ; G 2184
U 8663 ; WX 838 ; N uni21D7 ; G 2185
U 8664 ; WX 838 ; N uni21D8 ; G 2186
U 8665 ; WX 838 ; N uni21D9 ; G 2187
U 8666 ; WX 838 ; N uni21DA ; G 2188
U 8667 ; WX 838 ; N uni21DB ; G 2189
U 8668 ; WX 838 ; N uni21DC ; G 2190
U 8669 ; WX 838 ; N uni21DD ; G 2191
U 8670 ; WX 838 ; N uni21DE ; G 2192
U 8671 ; WX 838 ; N uni21DF ; G 2193
U 8672 ; WX 838 ; N uni21E0 ; G 2194
U 8673 ; WX 838 ; N uni21E1 ; G 2195
U 8674 ; WX 838 ; N uni21E2 ; G 2196
U 8675 ; WX 838 ; N uni21E3 ; G 2197
U 8676 ; WX 838 ; N uni21E4 ; G 2198
U 8677 ; WX 838 ; N uni21E5 ; G 2199
U 8678 ; WX 838 ; N uni21E6 ; G 2200
U 8679 ; WX 838 ; N uni21E7 ; G 2201
U 8680 ; WX 838 ; N uni21E8 ; G 2202
U 8681 ; WX 838 ; N uni21E9 ; G 2203
U 8682 ; WX 838 ; N uni21EA ; G 2204
U 8683 ; WX 838 ; N uni21EB ; G 2205
U 8684 ; WX 838 ; N uni21EC ; G 2206
U 8685 ; WX 838 ; N uni21ED ; G 2207
U 8686 ; WX 838 ; N uni21EE ; G 2208
U 8687 ; WX 838 ; N uni21EF ; G 2209
U 8688 ; WX 838 ; N uni21F0 ; G 2210
U 8689 ; WX 838 ; N uni21F1 ; G 2211
U 8690 ; WX 838 ; N uni21F2 ; G 2212
U 8691 ; WX 838 ; N uni21F3 ; G 2213
U 8692 ; WX 838 ; N uni21F4 ; G 2214
U 8693 ; WX 838 ; N uni21F5 ; G 2215
U 8694 ; WX 838 ; N uni21F6 ; G 2216
U 8695 ; WX 838 ; N uni21F7 ; G 2217
U 8696 ; WX 838 ; N uni21F8 ; G 2218
U 8697 ; WX 838 ; N uni21F9 ; G 2219
U 8698 ; WX 838 ; N uni21FA ; G 2220
U 8699 ; WX 838 ; N uni21FB ; G 2221
U 8700 ; WX 838 ; N uni21FC ; G 2222
U 8701 ; WX 838 ; N uni21FD ; G 2223
U 8702 ; WX 838 ; N uni21FE ; G 2224
U 8703 ; WX 838 ; N uni21FF ; G 2225
U 8704 ; WX 604 ; N universal ; G 2226
U 8706 ; WX 517 ; N partialdiff ; G 2227
U 8707 ; WX 542 ; N existential ; G 2228
U 8708 ; WX 542 ; N uni2204 ; G 2229
U 8710 ; WX 698 ; N increment ; G 2230
U 8711 ; WX 698 ; N gradient ; G 2231
U 8712 ; WX 740 ; N element ; G 2232
U 8713 ; WX 740 ; N notelement ; G 2233
U 8715 ; WX 740 ; N suchthat ; G 2234
U 8716 ; WX 740 ; N uni220C ; G 2235
U 8719 ; WX 796 ; N product ; G 2236
U 8720 ; WX 796 ; N uni2210 ; G 2237
U 8721 ; WX 714 ; N summation ; G 2238
U 8722 ; WX 838 ; N minus ; G 2239
U 8723 ; WX 838 ; N uni2213 ; G 2240
U 8724 ; WX 838 ; N uni2214 ; G 2241
U 8725 ; WX 337 ; N uni2215 ; G 2242
U 8727 ; WX 680 ; N asteriskmath ; G 2243
U 8728 ; WX 490 ; N uni2218 ; G 2244
U 8729 ; WX 490 ; N uni2219 ; G 2245
U 8730 ; WX 637 ; N radical ; G 2246
U 8731 ; WX 637 ; N uni221B ; G 2247
U 8732 ; WX 637 ; N uni221C ; G 2248
U 8733 ; WX 677 ; N proportional ; G 2249
U 8734 ; WX 833 ; N infinity ; G 2250
U 8735 ; WX 838 ; N orthogonal ; G 2251
U 8736 ; WX 838 ; N angle ; G 2252
U 8739 ; WX 291 ; N uni2223 ; G 2253
U 8740 ; WX 479 ; N uni2224 ; G 2254
U 8741 ; WX 462 ; N uni2225 ; G 2255
U 8742 ; WX 634 ; N uni2226 ; G 2256
U 8743 ; WX 732 ; N logicaland ; G 2257
U 8744 ; WX 732 ; N logicalor ; G 2258
U 8745 ; WX 838 ; N intersection ; G 2259
U 8746 ; WX 838 ; N union ; G 2260
U 8747 ; WX 521 ; N integral ; G 2261
U 8748 ; WX 852 ; N uni222C ; G 2262
U 8749 ; WX 1182 ; N uni222D ; G 2263
U 8760 ; WX 838 ; N uni2238 ; G 2264
U 8761 ; WX 838 ; N uni2239 ; G 2265
U 8762 ; WX 838 ; N uni223A ; G 2266
U 8763 ; WX 838 ; N uni223B ; G 2267
U 8764 ; WX 838 ; N similar ; G 2268
U 8765 ; WX 838 ; N uni223D ; G 2269
U 8770 ; WX 838 ; N uni2242 ; G 2270
U 8771 ; WX 838 ; N uni2243 ; G 2271
U 8776 ; WX 838 ; N approxequal ; G 2272
U 8784 ; WX 838 ; N uni2250 ; G 2273
U 8785 ; WX 838 ; N uni2251 ; G 2274
U 8786 ; WX 838 ; N uni2252 ; G 2275
U 8787 ; WX 838 ; N uni2253 ; G 2276
U 8788 ; WX 1033 ; N uni2254 ; G 2277
U 8789 ; WX 1033 ; N uni2255 ; G 2278
U 8800 ; WX 838 ; N notequal ; G 2279
U 8801 ; WX 838 ; N equivalence ; G 2280
U 8804 ; WX 838 ; N lessequal ; G 2281
U 8805 ; WX 838 ; N greaterequal ; G 2282
U 8834 ; WX 838 ; N propersubset ; G 2283
U 8835 ; WX 838 ; N propersuperset ; G 2284
U 8836 ; WX 838 ; N notsubset ; G 2285
U 8837 ; WX 838 ; N uni2285 ; G 2286
U 8838 ; WX 838 ; N reflexsubset ; G 2287
U 8839 ; WX 838 ; N reflexsuperset ; G 2288
U 8844 ; WX 838 ; N uni228C ; G 2289
U 8845 ; WX 838 ; N uni228D ; G 2290
U 8846 ; WX 838 ; N uni228E ; G 2291
U 8847 ; WX 846 ; N uni228F ; G 2292
U 8848 ; WX 846 ; N uni2290 ; G 2293
U 8849 ; WX 846 ; N uni2291 ; G 2294
U 8850 ; WX 846 ; N uni2292 ; G 2295
U 8851 ; WX 838 ; N uni2293 ; G 2296
U 8852 ; WX 838 ; N uni2294 ; G 2297
U 8853 ; WX 838 ; N circleplus ; G 2298
U 8854 ; WX 838 ; N uni2296 ; G 2299
U 8855 ; WX 838 ; N circlemultiply ; G 2300
U 8856 ; WX 838 ; N uni2298 ; G 2301
U 8857 ; WX 838 ; N uni2299 ; G 2302
U 8858 ; WX 838 ; N uni229A ; G 2303
U 8859 ; WX 838 ; N uni229B ; G 2304
U 8860 ; WX 838 ; N uni229C ; G 2305
U 8861 ; WX 838 ; N uni229D ; G 2306
U 8862 ; WX 838 ; N uni229E ; G 2307
U 8863 ; WX 838 ; N uni229F ; G 2308
U 8864 ; WX 838 ; N uni22A0 ; G 2309
U 8865 ; WX 838 ; N uni22A1 ; G 2310
U 8866 ; WX 860 ; N uni22A2 ; G 2311
U 8867 ; WX 860 ; N uni22A3 ; G 2312
U 8868 ; WX 940 ; N uni22A4 ; G 2313
U 8869 ; WX 940 ; N perpendicular ; G 2314
U 8870 ; WX 567 ; N uni22A6 ; G 2315
U 8871 ; WX 567 ; N uni22A7 ; G 2316
U 8872 ; WX 860 ; N uni22A8 ; G 2317
U 8873 ; WX 860 ; N uni22A9 ; G 2318
U 8874 ; WX 860 ; N uni22AA ; G 2319
U 8875 ; WX 1031 ; N uni22AB ; G 2320
U 8876 ; WX 860 ; N uni22AC ; G 2321
U 8877 ; WX 860 ; N uni22AD ; G 2322
U 8878 ; WX 860 ; N uni22AE ; G 2323
U 8879 ; WX 1031 ; N uni22AF ; G 2324
U 8900 ; WX 626 ; N uni22C4 ; G 2325
U 8901 ; WX 342 ; N dotmath ; G 2326
U 8962 ; WX 764 ; N house ; G 2327
U 8968 ; WX 390 ; N uni2308 ; G 2328
U 8969 ; WX 390 ; N uni2309 ; G 2329
U 8970 ; WX 390 ; N uni230A ; G 2330
U 8971 ; WX 390 ; N uni230B ; G 2331
U 8976 ; WX 838 ; N revlogicalnot ; G 2332
U 8977 ; WX 513 ; N uni2311 ; G 2333
U 8984 ; WX 1000 ; N uni2318 ; G 2334
U 8985 ; WX 838 ; N uni2319 ; G 2335
U 8992 ; WX 521 ; N integraltp ; G 2336
U 8993 ; WX 521 ; N integralbt ; G 2337
U 8997 ; WX 1000 ; N uni2325 ; G 2338
U 9000 ; WX 1443 ; N uni2328 ; G 2339
U 9085 ; WX 919 ; N uni237D ; G 2340
U 9115 ; WX 500 ; N uni239B ; G 2341
U 9116 ; WX 500 ; N uni239C ; G 2342
U 9117 ; WX 500 ; N uni239D ; G 2343
U 9118 ; WX 500 ; N uni239E ; G 2344
U 9119 ; WX 500 ; N uni239F ; G 2345
U 9120 ; WX 500 ; N uni23A0 ; G 2346
U 9121 ; WX 500 ; N uni23A1 ; G 2347
U 9122 ; WX 500 ; N uni23A2 ; G 2348
U 9123 ; WX 500 ; N uni23A3 ; G 2349
U 9124 ; WX 500 ; N uni23A4 ; G 2350
U 9125 ; WX 500 ; N uni23A5 ; G 2351
U 9126 ; WX 500 ; N uni23A6 ; G 2352
U 9127 ; WX 750 ; N uni23A7 ; G 2353
U 9128 ; WX 750 ; N uni23A8 ; G 2354
U 9129 ; WX 750 ; N uni23A9 ; G 2355
U 9130 ; WX 750 ; N uni23AA ; G 2356
U 9131 ; WX 750 ; N uni23AB ; G 2357
U 9132 ; WX 750 ; N uni23AC ; G 2358
U 9133 ; WX 750 ; N uni23AD ; G 2359
U 9134 ; WX 521 ; N uni23AE ; G 2360
U 9167 ; WX 945 ; N uni23CF ; G 2361
U 9251 ; WX 764 ; N uni2423 ; G 2362
U 9472 ; WX 602 ; N SF100000 ; G 2363
U 9473 ; WX 602 ; N uni2501 ; G 2364
U 9474 ; WX 602 ; N SF110000 ; G 2365
U 9475 ; WX 602 ; N uni2503 ; G 2366
U 9476 ; WX 602 ; N uni2504 ; G 2367
U 9477 ; WX 602 ; N uni2505 ; G 2368
U 9478 ; WX 602 ; N uni2506 ; G 2369
U 9479 ; WX 602 ; N uni2507 ; G 2370
U 9480 ; WX 602 ; N uni2508 ; G 2371
U 9481 ; WX 602 ; N uni2509 ; G 2372
U 9482 ; WX 602 ; N uni250A ; G 2373
U 9483 ; WX 602 ; N uni250B ; G 2374
U 9484 ; WX 602 ; N SF010000 ; G 2375
U 9485 ; WX 602 ; N uni250D ; G 2376
U 9486 ; WX 602 ; N uni250E ; G 2377
U 9487 ; WX 602 ; N uni250F ; G 2378
U 9488 ; WX 602 ; N SF030000 ; G 2379
U 9489 ; WX 602 ; N uni2511 ; G 2380
U 9490 ; WX 602 ; N uni2512 ; G 2381
U 9491 ; WX 602 ; N uni2513 ; G 2382
U 9492 ; WX 602 ; N SF020000 ; G 2383
U 9493 ; WX 602 ; N uni2515 ; G 2384
U 9494 ; WX 602 ; N uni2516 ; G 2385
U 9495 ; WX 602 ; N uni2517 ; G 2386
U 9496 ; WX 602 ; N SF040000 ; G 2387
U 9497 ; WX 602 ; N uni2519 ; G 2388
U 9498 ; WX 602 ; N uni251A ; G 2389
U 9499 ; WX 602 ; N uni251B ; G 2390
U 9500 ; WX 602 ; N SF080000 ; G 2391
U 9501 ; WX 602 ; N uni251D ; G 2392
U 9502 ; WX 602 ; N uni251E ; G 2393
U 9503 ; WX 602 ; N uni251F ; G 2394
U 9504 ; WX 602 ; N uni2520 ; G 2395
U 9505 ; WX 602 ; N uni2521 ; G 2396
U 9506 ; WX 602 ; N uni2522 ; G 2397
U 9507 ; WX 602 ; N uni2523 ; G 2398
U 9508 ; WX 602 ; N SF090000 ; G 2399
U 9509 ; WX 602 ; N uni2525 ; G 2400
U 9510 ; WX 602 ; N uni2526 ; G 2401
U 9511 ; WX 602 ; N uni2527 ; G 2402
U 9512 ; WX 602 ; N uni2528 ; G 2403
U 9513 ; WX 602 ; N uni2529 ; G 2404
U 9514 ; WX 602 ; N uni252A ; G 2405
U 9515 ; WX 602 ; N uni252B ; G 2406
U 9516 ; WX 602 ; N SF060000 ; G 2407
U 9517 ; WX 602 ; N uni252D ; G 2408
U 9518 ; WX 602 ; N uni252E ; G 2409
U 9519 ; WX 602 ; N uni252F ; G 2410
U 9520 ; WX 602 ; N uni2530 ; G 2411
U 9521 ; WX 602 ; N uni2531 ; G 2412
U 9522 ; WX 602 ; N uni2532 ; G 2413
U 9523 ; WX 602 ; N uni2533 ; G 2414
U 9524 ; WX 602 ; N SF070000 ; G 2415
U 9525 ; WX 602 ; N uni2535 ; G 2416
U 9526 ; WX 602 ; N uni2536 ; G 2417
U 9527 ; WX 602 ; N uni2537 ; G 2418
U 9528 ; WX 602 ; N uni2538 ; G 2419
U 9529 ; WX 602 ; N uni2539 ; G 2420
U 9530 ; WX 602 ; N uni253A ; G 2421
U 9531 ; WX 602 ; N uni253B ; G 2422
U 9532 ; WX 602 ; N SF050000 ; G 2423
U 9533 ; WX 602 ; N uni253D ; G 2424
U 9534 ; WX 602 ; N uni253E ; G 2425
U 9535 ; WX 602 ; N uni253F ; G 2426
U 9536 ; WX 602 ; N uni2540 ; G 2427
U 9537 ; WX 602 ; N uni2541 ; G 2428
U 9538 ; WX 602 ; N uni2542 ; G 2429
U 9539 ; WX 602 ; N uni2543 ; G 2430
U 9540 ; WX 602 ; N uni2544 ; G 2431
U 9541 ; WX 602 ; N uni2545 ; G 2432
U 9542 ; WX 602 ; N uni2546 ; G 2433
U 9543 ; WX 602 ; N uni2547 ; G 2434
U 9544 ; WX 602 ; N uni2548 ; G 2435
U 9545 ; WX 602 ; N uni2549 ; G 2436
U 9546 ; WX 602 ; N uni254A ; G 2437
U 9547 ; WX 602 ; N uni254B ; G 2438
U 9548 ; WX 602 ; N uni254C ; G 2439
U 9549 ; WX 602 ; N uni254D ; G 2440
U 9550 ; WX 602 ; N uni254E ; G 2441
U 9551 ; WX 602 ; N uni254F ; G 2442
U 9552 ; WX 602 ; N SF430000 ; G 2443
U 9553 ; WX 602 ; N SF240000 ; G 2444
U 9554 ; WX 602 ; N SF510000 ; G 2445
U 9555 ; WX 602 ; N SF520000 ; G 2446
U 9556 ; WX 602 ; N SF390000 ; G 2447
U 9557 ; WX 602 ; N SF220000 ; G 2448
U 9558 ; WX 602 ; N SF210000 ; G 2449
U 9559 ; WX 602 ; N SF250000 ; G 2450
U 9560 ; WX 602 ; N SF500000 ; G 2451
U 9561 ; WX 602 ; N SF490000 ; G 2452
U 9562 ; WX 602 ; N SF380000 ; G 2453
U 9563 ; WX 602 ; N SF280000 ; G 2454
U 9564 ; WX 602 ; N SF270000 ; G 2455
U 9565 ; WX 602 ; N SF260000 ; G 2456
U 9566 ; WX 602 ; N SF360000 ; G 2457
U 9567 ; WX 602 ; N SF370000 ; G 2458
U 9568 ; WX 602 ; N SF420000 ; G 2459
U 9569 ; WX 602 ; N SF190000 ; G 2460
U 9570 ; WX 602 ; N SF200000 ; G 2461
U 9571 ; WX 602 ; N SF230000 ; G 2462
U 9572 ; WX 602 ; N SF470000 ; G 2463
U 9573 ; WX 602 ; N SF480000 ; G 2464
U 9574 ; WX 602 ; N SF410000 ; G 2465
U 9575 ; WX 602 ; N SF450000 ; G 2466
U 9576 ; WX 602 ; N SF460000 ; G 2467
U 9577 ; WX 602 ; N SF400000 ; G 2468
U 9578 ; WX 602 ; N SF540000 ; G 2469
U 9579 ; WX 602 ; N SF530000 ; G 2470
U 9580 ; WX 602 ; N SF440000 ; G 2471
U 9581 ; WX 602 ; N uni256D ; G 2472
U 9582 ; WX 602 ; N uni256E ; G 2473
U 9583 ; WX 602 ; N uni256F ; G 2474
U 9584 ; WX 602 ; N uni2570 ; G 2475
U 9585 ; WX 602 ; N uni2571 ; G 2476
U 9586 ; WX 602 ; N uni2572 ; G 2477
U 9587 ; WX 602 ; N uni2573 ; G 2478
U 9588 ; WX 602 ; N uni2574 ; G 2479
U 9589 ; WX 602 ; N uni2575 ; G 2480
U 9590 ; WX 602 ; N uni2576 ; G 2481
U 9591 ; WX 602 ; N uni2577 ; G 2482
U 9592 ; WX 602 ; N uni2578 ; G 2483
U 9593 ; WX 602 ; N uni2579 ; G 2484
U 9594 ; WX 602 ; N uni257A ; G 2485
U 9595 ; WX 602 ; N uni257B ; G 2486
U 9596 ; WX 602 ; N uni257C ; G 2487
U 9597 ; WX 602 ; N uni257D ; G 2488
U 9598 ; WX 602 ; N uni257E ; G 2489
U 9599 ; WX 602 ; N uni257F ; G 2490
U 9600 ; WX 769 ; N upblock ; G 2491
U 9601 ; WX 769 ; N uni2581 ; G 2492
U 9602 ; WX 769 ; N uni2582 ; G 2493
U 9603 ; WX 769 ; N uni2583 ; G 2494
U 9604 ; WX 769 ; N dnblock ; G 2495
U 9605 ; WX 769 ; N uni2585 ; G 2496
U 9606 ; WX 769 ; N uni2586 ; G 2497
U 9607 ; WX 769 ; N uni2587 ; G 2498
U 9608 ; WX 769 ; N block ; G 2499
U 9609 ; WX 769 ; N uni2589 ; G 2500
U 9610 ; WX 769 ; N uni258A ; G 2501
U 9611 ; WX 769 ; N uni258B ; G 2502
U 9612 ; WX 769 ; N lfblock ; G 2503
U 9613 ; WX 769 ; N uni258D ; G 2504
U 9614 ; WX 769 ; N uni258E ; G 2505
U 9615 ; WX 769 ; N uni258F ; G 2506
U 9616 ; WX 769 ; N rtblock ; G 2507
U 9617 ; WX 769 ; N ltshade ; G 2508
U 9618 ; WX 769 ; N shade ; G 2509
U 9619 ; WX 769 ; N dkshade ; G 2510
U 9620 ; WX 769 ; N uni2594 ; G 2511
U 9621 ; WX 769 ; N uni2595 ; G 2512
U 9622 ; WX 769 ; N uni2596 ; G 2513
U 9623 ; WX 769 ; N uni2597 ; G 2514
U 9624 ; WX 769 ; N uni2598 ; G 2515
U 9625 ; WX 769 ; N uni2599 ; G 2516
U 9626 ; WX 769 ; N uni259A ; G 2517
U 9627 ; WX 769 ; N uni259B ; G 2518
U 9628 ; WX 769 ; N uni259C ; G 2519
U 9629 ; WX 769 ; N uni259D ; G 2520
U 9630 ; WX 769 ; N uni259E ; G 2521
U 9631 ; WX 769 ; N uni259F ; G 2522
U 9632 ; WX 945 ; N filledbox ; G 2523
U 9633 ; WX 945 ; N H22073 ; G 2524
U 9634 ; WX 945 ; N uni25A2 ; G 2525
U 9635 ; WX 945 ; N uni25A3 ; G 2526
U 9636 ; WX 945 ; N uni25A4 ; G 2527
U 9637 ; WX 945 ; N uni25A5 ; G 2528
U 9638 ; WX 945 ; N uni25A6 ; G 2529
U 9639 ; WX 945 ; N uni25A7 ; G 2530
U 9640 ; WX 945 ; N uni25A8 ; G 2531
U 9641 ; WX 945 ; N uni25A9 ; G 2532
U 9642 ; WX 678 ; N H18543 ; G 2533
U 9643 ; WX 678 ; N H18551 ; G 2534
U 9644 ; WX 945 ; N filledrect ; G 2535
U 9645 ; WX 945 ; N uni25AD ; G 2536
U 9646 ; WX 550 ; N uni25AE ; G 2537
U 9647 ; WX 550 ; N uni25AF ; G 2538
U 9648 ; WX 769 ; N uni25B0 ; G 2539
U 9649 ; WX 769 ; N uni25B1 ; G 2540
U 9650 ; WX 769 ; N triagup ; G 2541
U 9651 ; WX 769 ; N uni25B3 ; G 2542
U 9652 ; WX 502 ; N uni25B4 ; G 2543
U 9653 ; WX 502 ; N uni25B5 ; G 2544
U 9654 ; WX 769 ; N uni25B6 ; G 2545
U 9655 ; WX 769 ; N uni25B7 ; G 2546
U 9656 ; WX 502 ; N uni25B8 ; G 2547
U 9657 ; WX 502 ; N uni25B9 ; G 2548
U 9658 ; WX 769 ; N triagrt ; G 2549
U 9659 ; WX 769 ; N uni25BB ; G 2550
U 9660 ; WX 769 ; N triagdn ; G 2551
U 9661 ; WX 769 ; N uni25BD ; G 2552
U 9662 ; WX 502 ; N uni25BE ; G 2553
U 9663 ; WX 502 ; N uni25BF ; G 2554
U 9664 ; WX 769 ; N uni25C0 ; G 2555
U 9665 ; WX 769 ; N uni25C1 ; G 2556
U 9666 ; WX 502 ; N uni25C2 ; G 2557
U 9667 ; WX 502 ; N uni25C3 ; G 2558
U 9668 ; WX 769 ; N triaglf ; G 2559
U 9669 ; WX 769 ; N uni25C5 ; G 2560
U 9670 ; WX 769 ; N uni25C6 ; G 2561
U 9671 ; WX 769 ; N uni25C7 ; G 2562
U 9672 ; WX 769 ; N uni25C8 ; G 2563
U 9673 ; WX 873 ; N uni25C9 ; G 2564
U 9674 ; WX 494 ; N lozenge ; G 2565
U 9675 ; WX 873 ; N circle ; G 2566
U 9676 ; WX 873 ; N uni25CC ; G 2567
U 9677 ; WX 873 ; N uni25CD ; G 2568
U 9678 ; WX 873 ; N uni25CE ; G 2569
U 9679 ; WX 873 ; N H18533 ; G 2570
U 9680 ; WX 873 ; N uni25D0 ; G 2571
U 9681 ; WX 873 ; N uni25D1 ; G 2572
U 9682 ; WX 873 ; N uni25D2 ; G 2573
U 9683 ; WX 873 ; N uni25D3 ; G 2574
U 9684 ; WX 873 ; N uni25D4 ; G 2575
U 9685 ; WX 873 ; N uni25D5 ; G 2576
U 9686 ; WX 527 ; N uni25D6 ; G 2577
U 9687 ; WX 527 ; N uni25D7 ; G 2578
U 9688 ; WX 791 ; N invbullet ; G 2579
U 9689 ; WX 970 ; N invcircle ; G 2580
U 9690 ; WX 970 ; N uni25DA ; G 2581
U 9691 ; WX 970 ; N uni25DB ; G 2582
U 9692 ; WX 387 ; N uni25DC ; G 2583
U 9693 ; WX 387 ; N uni25DD ; G 2584
U 9694 ; WX 387 ; N uni25DE ; G 2585
U 9695 ; WX 387 ; N uni25DF ; G 2586
U 9696 ; WX 873 ; N uni25E0 ; G 2587
U 9697 ; WX 873 ; N uni25E1 ; G 2588
U 9698 ; WX 769 ; N uni25E2 ; G 2589
U 9699 ; WX 769 ; N uni25E3 ; G 2590
U 9700 ; WX 769 ; N uni25E4 ; G 2591
U 9701 ; WX 769 ; N uni25E5 ; G 2592
U 9702 ; WX 590 ; N openbullet ; G 2593
U 9703 ; WX 945 ; N uni25E7 ; G 2594
U 9704 ; WX 945 ; N uni25E8 ; G 2595
U 9705 ; WX 945 ; N uni25E9 ; G 2596
U 9706 ; WX 945 ; N uni25EA ; G 2597
U 9707 ; WX 945 ; N uni25EB ; G 2598
U 9708 ; WX 769 ; N uni25EC ; G 2599
U 9709 ; WX 769 ; N uni25ED ; G 2600
U 9710 ; WX 769 ; N uni25EE ; G 2601
U 9711 ; WX 1119 ; N uni25EF ; G 2602
U 9712 ; WX 945 ; N uni25F0 ; G 2603
U 9713 ; WX 945 ; N uni25F1 ; G 2604
U 9714 ; WX 945 ; N uni25F2 ; G 2605
U 9715 ; WX 945 ; N uni25F3 ; G 2606
U 9716 ; WX 873 ; N uni25F4 ; G 2607
U 9717 ; WX 873 ; N uni25F5 ; G 2608
U 9718 ; WX 873 ; N uni25F6 ; G 2609
U 9719 ; WX 873 ; N uni25F7 ; G 2610
U 9720 ; WX 769 ; N uni25F8 ; G 2611
U 9721 ; WX 769 ; N uni25F9 ; G 2612
U 9722 ; WX 769 ; N uni25FA ; G 2613
U 9723 ; WX 830 ; N uni25FB ; G 2614
U 9724 ; WX 830 ; N uni25FC ; G 2615
U 9725 ; WX 732 ; N uni25FD ; G 2616
U 9726 ; WX 732 ; N uni25FE ; G 2617
U 9727 ; WX 769 ; N uni25FF ; G 2618
U 9728 ; WX 896 ; N uni2600 ; G 2619
U 9784 ; WX 896 ; N uni2638 ; G 2620
U 9785 ; WX 896 ; N uni2639 ; G 2621
U 9786 ; WX 896 ; N smileface ; G 2622
U 9787 ; WX 896 ; N invsmileface ; G 2623
U 9788 ; WX 896 ; N sun ; G 2624
U 9791 ; WX 614 ; N uni263F ; G 2625
U 9792 ; WX 731 ; N female ; G 2626
U 9793 ; WX 731 ; N uni2641 ; G 2627
U 9794 ; WX 896 ; N male ; G 2628
U 9795 ; WX 896 ; N uni2643 ; G 2629
U 9796 ; WX 896 ; N uni2644 ; G 2630
U 9797 ; WX 896 ; N uni2645 ; G 2631
U 9798 ; WX 896 ; N uni2646 ; G 2632
U 9799 ; WX 896 ; N uni2647 ; G 2633
U 9824 ; WX 896 ; N spade ; G 2634
U 9825 ; WX 896 ; N uni2661 ; G 2635
U 9826 ; WX 896 ; N uni2662 ; G 2636
U 9827 ; WX 896 ; N club ; G 2637
U 9828 ; WX 896 ; N uni2664 ; G 2638
U 9829 ; WX 896 ; N heart ; G 2639
U 9830 ; WX 896 ; N diamond ; G 2640
U 9831 ; WX 896 ; N uni2667 ; G 2641
U 9833 ; WX 472 ; N uni2669 ; G 2642
U 9834 ; WX 638 ; N musicalnote ; G 2643
U 9835 ; WX 896 ; N musicalnotedbl ; G 2644
U 9836 ; WX 896 ; N uni266C ; G 2645
U 9837 ; WX 472 ; N uni266D ; G 2646
U 9838 ; WX 357 ; N uni266E ; G 2647
U 9839 ; WX 484 ; N uni266F ; G 2648
U 10145 ; WX 838 ; N uni27A1 ; G 2649
U 10181 ; WX 390 ; N uni27C5 ; G 2650
U 10182 ; WX 390 ; N uni27C6 ; G 2651
U 10208 ; WX 494 ; N uni27E0 ; G 2652
U 10216 ; WX 390 ; N uni27E8 ; G 2653
U 10217 ; WX 390 ; N uni27E9 ; G 2654
U 10224 ; WX 838 ; N uni27F0 ; G 2655
U 10225 ; WX 838 ; N uni27F1 ; G 2656
U 10226 ; WX 838 ; N uni27F2 ; G 2657
U 10227 ; WX 838 ; N uni27F3 ; G 2658
U 10228 ; WX 1033 ; N uni27F4 ; G 2659
U 10229 ; WX 1434 ; N uni27F5 ; G 2660
U 10230 ; WX 1434 ; N uni27F6 ; G 2661
U 10231 ; WX 1434 ; N uni27F7 ; G 2662
U 10232 ; WX 1434 ; N uni27F8 ; G 2663
U 10233 ; WX 1434 ; N uni27F9 ; G 2664
U 10234 ; WX 1434 ; N uni27FA ; G 2665
U 10235 ; WX 1434 ; N uni27FB ; G 2666
U 10236 ; WX 1434 ; N uni27FC ; G 2667
U 10237 ; WX 1434 ; N uni27FD ; G 2668
U 10238 ; WX 1434 ; N uni27FE ; G 2669
U 10239 ; WX 1434 ; N uni27FF ; G 2670
U 10240 ; WX 732 ; N uni2800 ; G 2671
U 10241 ; WX 732 ; N uni2801 ; G 2672
U 10242 ; WX 732 ; N uni2802 ; G 2673
U 10243 ; WX 732 ; N uni2803 ; G 2674
U 10244 ; WX 732 ; N uni2804 ; G 2675
U 10245 ; WX 732 ; N uni2805 ; G 2676
U 10246 ; WX 732 ; N uni2806 ; G 2677
U 10247 ; WX 732 ; N uni2807 ; G 2678
U 10248 ; WX 732 ; N uni2808 ; G 2679
U 10249 ; WX 732 ; N uni2809 ; G 2680
U 10250 ; WX 732 ; N uni280A ; G 2681
U 10251 ; WX 732 ; N uni280B ; G 2682
U 10252 ; WX 732 ; N uni280C ; G 2683
U 10253 ; WX 732 ; N uni280D ; G 2684
U 10254 ; WX 732 ; N uni280E ; G 2685
U 10255 ; WX 732 ; N uni280F ; G 2686
U 10256 ; WX 732 ; N uni2810 ; G 2687
U 10257 ; WX 732 ; N uni2811 ; G 2688
U 10258 ; WX 732 ; N uni2812 ; G 2689
U 10259 ; WX 732 ; N uni2813 ; G 2690
U 10260 ; WX 732 ; N uni2814 ; G 2691
U 10261 ; WX 732 ; N uni2815 ; G 2692
U 10262 ; WX 732 ; N uni2816 ; G 2693
U 10263 ; WX 732 ; N uni2817 ; G 2694
U 10264 ; WX 732 ; N uni2818 ; G 2695
U 10265 ; WX 732 ; N uni2819 ; G 2696
U 10266 ; WX 732 ; N uni281A ; G 2697
U 10267 ; WX 732 ; N uni281B ; G 2698
U 10268 ; WX 732 ; N uni281C ; G 2699
U 10269 ; WX 732 ; N uni281D ; G 2700
U 10270 ; WX 732 ; N uni281E ; G 2701
U 10271 ; WX 732 ; N uni281F ; G 2702
U 10272 ; WX 732 ; N uni2820 ; G 2703
U 10273 ; WX 732 ; N uni2821 ; G 2704
U 10274 ; WX 732 ; N uni2822 ; G 2705
U 10275 ; WX 732 ; N uni2823 ; G 2706
U 10276 ; WX 732 ; N uni2824 ; G 2707
U 10277 ; WX 732 ; N uni2825 ; G 2708
U 10278 ; WX 732 ; N uni2826 ; G 2709
U 10279 ; WX 732 ; N uni2827 ; G 2710
U 10280 ; WX 732 ; N uni2828 ; G 2711
U 10281 ; WX 732 ; N uni2829 ; G 2712
U 10282 ; WX 732 ; N uni282A ; G 2713
U 10283 ; WX 732 ; N uni282B ; G 2714
U 10284 ; WX 732 ; N uni282C ; G 2715
U 10285 ; WX 732 ; N uni282D ; G 2716
U 10286 ; WX 732 ; N uni282E ; G 2717
U 10287 ; WX 732 ; N uni282F ; G 2718
U 10288 ; WX 732 ; N uni2830 ; G 2719
U 10289 ; WX 732 ; N uni2831 ; G 2720
U 10290 ; WX 732 ; N uni2832 ; G 2721
U 10291 ; WX 732 ; N uni2833 ; G 2722
U 10292 ; WX 732 ; N uni2834 ; G 2723
U 10293 ; WX 732 ; N uni2835 ; G 2724
U 10294 ; WX 732 ; N uni2836 ; G 2725
U 10295 ; WX 732 ; N uni2837 ; G 2726
U 10296 ; WX 732 ; N uni2838 ; G 2727
U 10297 ; WX 732 ; N uni2839 ; G 2728
U 10298 ; WX 732 ; N uni283A ; G 2729
U 10299 ; WX 732 ; N uni283B ; G 2730
U 10300 ; WX 732 ; N uni283C ; G 2731
U 10301 ; WX 732 ; N uni283D ; G 2732
U 10302 ; WX 732 ; N uni283E ; G 2733
U 10303 ; WX 732 ; N uni283F ; G 2734
U 10304 ; WX 732 ; N uni2840 ; G 2735
U 10305 ; WX 732 ; N uni2841 ; G 2736
U 10306 ; WX 732 ; N uni2842 ; G 2737
U 10307 ; WX 732 ; N uni2843 ; G 2738
U 10308 ; WX 732 ; N uni2844 ; G 2739
U 10309 ; WX 732 ; N uni2845 ; G 2740
U 10310 ; WX 732 ; N uni2846 ; G 2741
U 10311 ; WX 732 ; N uni2847 ; G 2742
U 10312 ; WX 732 ; N uni2848 ; G 2743
U 10313 ; WX 732 ; N uni2849 ; G 2744
U 10314 ; WX 732 ; N uni284A ; G 2745
U 10315 ; WX 732 ; N uni284B ; G 2746
U 10316 ; WX 732 ; N uni284C ; G 2747
U 10317 ; WX 732 ; N uni284D ; G 2748
U 10318 ; WX 732 ; N uni284E ; G 2749
U 10319 ; WX 732 ; N uni284F ; G 2750
U 10320 ; WX 732 ; N uni2850 ; G 2751
U 10321 ; WX 732 ; N uni2851 ; G 2752
U 10322 ; WX 732 ; N uni2852 ; G 2753
U 10323 ; WX 732 ; N uni2853 ; G 2754
U 10324 ; WX 732 ; N uni2854 ; G 2755
U 10325 ; WX 732 ; N uni2855 ; G 2756
U 10326 ; WX 732 ; N uni2856 ; G 2757
U 10327 ; WX 732 ; N uni2857 ; G 2758
U 10328 ; WX 732 ; N uni2858 ; G 2759
U 10329 ; WX 732 ; N uni2859 ; G 2760
U 10330 ; WX 732 ; N uni285A ; G 2761
U 10331 ; WX 732 ; N uni285B ; G 2762
U 10332 ; WX 732 ; N uni285C ; G 2763
U 10333 ; WX 732 ; N uni285D ; G 2764
U 10334 ; WX 732 ; N uni285E ; G 2765
U 10335 ; WX 732 ; N uni285F ; G 2766
U 10336 ; WX 732 ; N uni2860 ; G 2767
U 10337 ; WX 732 ; N uni2861 ; G 2768
U 10338 ; WX 732 ; N uni2862 ; G 2769
U 10339 ; WX 732 ; N uni2863 ; G 2770
U 10340 ; WX 732 ; N uni2864 ; G 2771
U 10341 ; WX 732 ; N uni2865 ; G 2772
U 10342 ; WX 732 ; N uni2866 ; G 2773
U 10343 ; WX 732 ; N uni2867 ; G 2774
U 10344 ; WX 732 ; N uni2868 ; G 2775
U 10345 ; WX 732 ; N uni2869 ; G 2776
U 10346 ; WX 732 ; N uni286A ; G 2777
U 10347 ; WX 732 ; N uni286B ; G 2778
U 10348 ; WX 732 ; N uni286C ; G 2779
U 10349 ; WX 732 ; N uni286D ; G 2780
U 10350 ; WX 732 ; N uni286E ; G 2781
U 10351 ; WX 732 ; N uni286F ; G 2782
U 10352 ; WX 732 ; N uni2870 ; G 2783
U 10353 ; WX 732 ; N uni2871 ; G 2784
U 10354 ; WX 732 ; N uni2872 ; G 2785
U 10355 ; WX 732 ; N uni2873 ; G 2786
U 10356 ; WX 732 ; N uni2874 ; G 2787
U 10357 ; WX 732 ; N uni2875 ; G 2788
U 10358 ; WX 732 ; N uni2876 ; G 2789
U 10359 ; WX 732 ; N uni2877 ; G 2790
U 10360 ; WX 732 ; N uni2878 ; G 2791
U 10361 ; WX 732 ; N uni2879 ; G 2792
U 10362 ; WX 732 ; N uni287A ; G 2793
U 10363 ; WX 732 ; N uni287B ; G 2794
U 10364 ; WX 732 ; N uni287C ; G 2795
U 10365 ; WX 732 ; N uni287D ; G 2796
U 10366 ; WX 732 ; N uni287E ; G 2797
U 10367 ; WX 732 ; N uni287F ; G 2798
U 10368 ; WX 732 ; N uni2880 ; G 2799
U 10369 ; WX 732 ; N uni2881 ; G 2800
U 10370 ; WX 732 ; N uni2882 ; G 2801
U 10371 ; WX 732 ; N uni2883 ; G 2802
U 10372 ; WX 732 ; N uni2884 ; G 2803
U 10373 ; WX 732 ; N uni2885 ; G 2804
U 10374 ; WX 732 ; N uni2886 ; G 2805
U 10375 ; WX 732 ; N uni2887 ; G 2806
U 10376 ; WX 732 ; N uni2888 ; G 2807
U 10377 ; WX 732 ; N uni2889 ; G 2808
U 10378 ; WX 732 ; N uni288A ; G 2809
U 10379 ; WX 732 ; N uni288B ; G 2810
U 10380 ; WX 732 ; N uni288C ; G 2811
U 10381 ; WX 732 ; N uni288D ; G 2812
U 10382 ; WX 732 ; N uni288E ; G 2813
U 10383 ; WX 732 ; N uni288F ; G 2814
U 10384 ; WX 732 ; N uni2890 ; G 2815
U 10385 ; WX 732 ; N uni2891 ; G 2816
U 10386 ; WX 732 ; N uni2892 ; G 2817
U 10387 ; WX 732 ; N uni2893 ; G 2818
U 10388 ; WX 732 ; N uni2894 ; G 2819
U 10389 ; WX 732 ; N uni2895 ; G 2820
U 10390 ; WX 732 ; N uni2896 ; G 2821
U 10391 ; WX 732 ; N uni2897 ; G 2822
U 10392 ; WX 732 ; N uni2898 ; G 2823
U 10393 ; WX 732 ; N uni2899 ; G 2824
U 10394 ; WX 732 ; N uni289A ; G 2825
U 10395 ; WX 732 ; N uni289B ; G 2826
U 10396 ; WX 732 ; N uni289C ; G 2827
U 10397 ; WX 732 ; N uni289D ; G 2828
U 10398 ; WX 732 ; N uni289E ; G 2829
U 10399 ; WX 732 ; N uni289F ; G 2830
U 10400 ; WX 732 ; N uni28A0 ; G 2831
U 10401 ; WX 732 ; N uni28A1 ; G 2832
U 10402 ; WX 732 ; N uni28A2 ; G 2833
U 10403 ; WX 732 ; N uni28A3 ; G 2834
U 10404 ; WX 732 ; N uni28A4 ; G 2835
U 10405 ; WX 732 ; N uni28A5 ; G 2836
U 10406 ; WX 732 ; N uni28A6 ; G 2837
U 10407 ; WX 732 ; N uni28A7 ; G 2838
U 10408 ; WX 732 ; N uni28A8 ; G 2839
U 10409 ; WX 732 ; N uni28A9 ; G 2840
U 10410 ; WX 732 ; N uni28AA ; G 2841
U 10411 ; WX 732 ; N uni28AB ; G 2842
U 10412 ; WX 732 ; N uni28AC ; G 2843
U 10413 ; WX 732 ; N uni28AD ; G 2844
U 10414 ; WX 732 ; N uni28AE ; G 2845
U 10415 ; WX 732 ; N uni28AF ; G 2846
U 10416 ; WX 732 ; N uni28B0 ; G 2847
U 10417 ; WX 732 ; N uni28B1 ; G 2848
U 10418 ; WX 732 ; N uni28B2 ; G 2849
U 10419 ; WX 732 ; N uni28B3 ; G 2850
U 10420 ; WX 732 ; N uni28B4 ; G 2851
U 10421 ; WX 732 ; N uni28B5 ; G 2852
U 10422 ; WX 732 ; N uni28B6 ; G 2853
U 10423 ; WX 732 ; N uni28B7 ; G 2854
U 10424 ; WX 732 ; N uni28B8 ; G 2855
U 10425 ; WX 732 ; N uni28B9 ; G 2856
U 10426 ; WX 732 ; N uni28BA ; G 2857
U 10427 ; WX 732 ; N uni28BB ; G 2858
U 10428 ; WX 732 ; N uni28BC ; G 2859
U 10429 ; WX 732 ; N uni28BD ; G 2860
U 10430 ; WX 732 ; N uni28BE ; G 2861
U 10431 ; WX 732 ; N uni28BF ; G 2862
U 10432 ; WX 732 ; N uni28C0 ; G 2863
U 10433 ; WX 732 ; N uni28C1 ; G 2864
U 10434 ; WX 732 ; N uni28C2 ; G 2865
U 10435 ; WX 732 ; N uni28C3 ; G 2866
U 10436 ; WX 732 ; N uni28C4 ; G 2867
U 10437 ; WX 732 ; N uni28C5 ; G 2868
U 10438 ; WX 732 ; N uni28C6 ; G 2869
U 10439 ; WX 732 ; N uni28C7 ; G 2870
U 10440 ; WX 732 ; N uni28C8 ; G 2871
U 10441 ; WX 732 ; N uni28C9 ; G 2872
U 10442 ; WX 732 ; N uni28CA ; G 2873
U 10443 ; WX 732 ; N uni28CB ; G 2874
U 10444 ; WX 732 ; N uni28CC ; G 2875
U 10445 ; WX 732 ; N uni28CD ; G 2876
U 10446 ; WX 732 ; N uni28CE ; G 2877
U 10447 ; WX 732 ; N uni28CF ; G 2878
U 10448 ; WX 732 ; N uni28D0 ; G 2879
U 10449 ; WX 732 ; N uni28D1 ; G 2880
U 10450 ; WX 732 ; N uni28D2 ; G 2881
U 10451 ; WX 732 ; N uni28D3 ; G 2882
U 10452 ; WX 732 ; N uni28D4 ; G 2883
U 10453 ; WX 732 ; N uni28D5 ; G 2884
U 10454 ; WX 732 ; N uni28D6 ; G 2885
U 10455 ; WX 732 ; N uni28D7 ; G 2886
U 10456 ; WX 732 ; N uni28D8 ; G 2887
U 10457 ; WX 732 ; N uni28D9 ; G 2888
U 10458 ; WX 732 ; N uni28DA ; G 2889
U 10459 ; WX 732 ; N uni28DB ; G 2890
U 10460 ; WX 732 ; N uni28DC ; G 2891
U 10461 ; WX 732 ; N uni28DD ; G 2892
U 10462 ; WX 732 ; N uni28DE ; G 2893
U 10463 ; WX 732 ; N uni28DF ; G 2894
U 10464 ; WX 732 ; N uni28E0 ; G 2895
U 10465 ; WX 732 ; N uni28E1 ; G 2896
U 10466 ; WX 732 ; N uni28E2 ; G 2897
U 10467 ; WX 732 ; N uni28E3 ; G 2898
U 10468 ; WX 732 ; N uni28E4 ; G 2899
U 10469 ; WX 732 ; N uni28E5 ; G 2900
U 10470 ; WX 732 ; N uni28E6 ; G 2901
U 10471 ; WX 732 ; N uni28E7 ; G 2902
U 10472 ; WX 732 ; N uni28E8 ; G 2903
U 10473 ; WX 732 ; N uni28E9 ; G 2904
U 10474 ; WX 732 ; N uni28EA ; G 2905
U 10475 ; WX 732 ; N uni28EB ; G 2906
U 10476 ; WX 732 ; N uni28EC ; G 2907
U 10477 ; WX 732 ; N uni28ED ; G 2908
U 10478 ; WX 732 ; N uni28EE ; G 2909
U 10479 ; WX 732 ; N uni28EF ; G 2910
U 10480 ; WX 732 ; N uni28F0 ; G 2911
U 10481 ; WX 732 ; N uni28F1 ; G 2912
U 10482 ; WX 732 ; N uni28F2 ; G 2913
U 10483 ; WX 732 ; N uni28F3 ; G 2914
U 10484 ; WX 732 ; N uni28F4 ; G 2915
U 10485 ; WX 732 ; N uni28F5 ; G 2916
U 10486 ; WX 732 ; N uni28F6 ; G 2917
U 10487 ; WX 732 ; N uni28F7 ; G 2918
U 10488 ; WX 732 ; N uni28F8 ; G 2919
U 10489 ; WX 732 ; N uni28F9 ; G 2920
U 10490 ; WX 732 ; N uni28FA ; G 2921
U 10491 ; WX 732 ; N uni28FB ; G 2922
U 10492 ; WX 732 ; N uni28FC ; G 2923
U 10493 ; WX 732 ; N uni28FD ; G 2924
U 10494 ; WX 732 ; N uni28FE ; G 2925
U 10495 ; WX 732 ; N uni28FF ; G 2926
U 10496 ; WX 838 ; N uni2900 ; G 2927
U 10497 ; WX 838 ; N uni2901 ; G 2928
U 10498 ; WX 838 ; N uni2902 ; G 2929
U 10499 ; WX 838 ; N uni2903 ; G 2930
U 10500 ; WX 838 ; N uni2904 ; G 2931
U 10501 ; WX 838 ; N uni2905 ; G 2932
U 10502 ; WX 838 ; N uni2906 ; G 2933
U 10503 ; WX 838 ; N uni2907 ; G 2934
U 10504 ; WX 838 ; N uni2908 ; G 2935
U 10505 ; WX 838 ; N uni2909 ; G 2936
U 10506 ; WX 838 ; N uni290A ; G 2937
U 10507 ; WX 838 ; N uni290B ; G 2938
U 10508 ; WX 838 ; N uni290C ; G 2939
U 10509 ; WX 838 ; N uni290D ; G 2940
U 10510 ; WX 838 ; N uni290E ; G 2941
U 10511 ; WX 838 ; N uni290F ; G 2942
U 10512 ; WX 838 ; N uni2910 ; G 2943
U 10513 ; WX 838 ; N uni2911 ; G 2944
U 10514 ; WX 838 ; N uni2912 ; G 2945
U 10515 ; WX 838 ; N uni2913 ; G 2946
U 10516 ; WX 838 ; N uni2914 ; G 2947
U 10517 ; WX 838 ; N uni2915 ; G 2948
U 10518 ; WX 838 ; N uni2916 ; G 2949
U 10519 ; WX 838 ; N uni2917 ; G 2950
U 10520 ; WX 838 ; N uni2918 ; G 2951
U 10521 ; WX 838 ; N uni2919 ; G 2952
U 10522 ; WX 838 ; N uni291A ; G 2953
U 10523 ; WX 838 ; N uni291B ; G 2954
U 10524 ; WX 838 ; N uni291C ; G 2955
U 10525 ; WX 838 ; N uni291D ; G 2956
U 10526 ; WX 838 ; N uni291E ; G 2957
U 10527 ; WX 838 ; N uni291F ; G 2958
U 10528 ; WX 838 ; N uni2920 ; G 2959
U 10529 ; WX 838 ; N uni2921 ; G 2960
U 10530 ; WX 838 ; N uni2922 ; G 2961
U 10531 ; WX 838 ; N uni2923 ; G 2962
U 10532 ; WX 838 ; N uni2924 ; G 2963
U 10533 ; WX 838 ; N uni2925 ; G 2964
U 10534 ; WX 838 ; N uni2926 ; G 2965
U 10535 ; WX 838 ; N uni2927 ; G 2966
U 10536 ; WX 838 ; N uni2928 ; G 2967
U 10537 ; WX 838 ; N uni2929 ; G 2968
U 10538 ; WX 838 ; N uni292A ; G 2969
U 10539 ; WX 838 ; N uni292B ; G 2970
U 10540 ; WX 838 ; N uni292C ; G 2971
U 10541 ; WX 838 ; N uni292D ; G 2972
U 10542 ; WX 838 ; N uni292E ; G 2973
U 10543 ; WX 838 ; N uni292F ; G 2974
U 10544 ; WX 838 ; N uni2930 ; G 2975
U 10545 ; WX 838 ; N uni2931 ; G 2976
U 10546 ; WX 838 ; N uni2932 ; G 2977
U 10547 ; WX 838 ; N uni2933 ; G 2978
U 10548 ; WX 838 ; N uni2934 ; G 2979
U 10549 ; WX 838 ; N uni2935 ; G 2980
U 10550 ; WX 838 ; N uni2936 ; G 2981
U 10551 ; WX 838 ; N uni2937 ; G 2982
U 10552 ; WX 838 ; N uni2938 ; G 2983
U 10553 ; WX 838 ; N uni2939 ; G 2984
U 10554 ; WX 838 ; N uni293A ; G 2985
U 10555 ; WX 838 ; N uni293B ; G 2986
U 10556 ; WX 838 ; N uni293C ; G 2987
U 10557 ; WX 838 ; N uni293D ; G 2988
U 10558 ; WX 838 ; N uni293E ; G 2989
U 10559 ; WX 838 ; N uni293F ; G 2990
U 10560 ; WX 838 ; N uni2940 ; G 2991
U 10561 ; WX 838 ; N uni2941 ; G 2992
U 10562 ; WX 838 ; N uni2942 ; G 2993
U 10563 ; WX 838 ; N uni2943 ; G 2994
U 10564 ; WX 838 ; N uni2944 ; G 2995
U 10565 ; WX 838 ; N uni2945 ; G 2996
U 10566 ; WX 838 ; N uni2946 ; G 2997
U 10567 ; WX 838 ; N uni2947 ; G 2998
U 10568 ; WX 838 ; N uni2948 ; G 2999
U 10569 ; WX 838 ; N uni2949 ; G 3000
U 10570 ; WX 838 ; N uni294A ; G 3001
U 10571 ; WX 838 ; N uni294B ; G 3002
U 10572 ; WX 838 ; N uni294C ; G 3003
U 10573 ; WX 838 ; N uni294D ; G 3004
U 10574 ; WX 838 ; N uni294E ; G 3005
U 10575 ; WX 838 ; N uni294F ; G 3006
U 10576 ; WX 838 ; N uni2950 ; G 3007
U 10577 ; WX 838 ; N uni2951 ; G 3008
U 10578 ; WX 838 ; N uni2952 ; G 3009
U 10579 ; WX 838 ; N uni2953 ; G 3010
U 10580 ; WX 838 ; N uni2954 ; G 3011
U 10581 ; WX 838 ; N uni2955 ; G 3012
U 10582 ; WX 838 ; N uni2956 ; G 3013
U 10583 ; WX 838 ; N uni2957 ; G 3014
U 10584 ; WX 838 ; N uni2958 ; G 3015
U 10585 ; WX 838 ; N uni2959 ; G 3016
U 10586 ; WX 838 ; N uni295A ; G 3017
U 10587 ; WX 838 ; N uni295B ; G 3018
U 10588 ; WX 838 ; N uni295C ; G 3019
U 10589 ; WX 838 ; N uni295D ; G 3020
U 10590 ; WX 838 ; N uni295E ; G 3021
U 10591 ; WX 838 ; N uni295F ; G 3022
U 10592 ; WX 838 ; N uni2960 ; G 3023
U 10593 ; WX 838 ; N uni2961 ; G 3024
U 10594 ; WX 838 ; N uni2962 ; G 3025
U 10595 ; WX 838 ; N uni2963 ; G 3026
U 10596 ; WX 838 ; N uni2964 ; G 3027
U 10597 ; WX 838 ; N uni2965 ; G 3028
U 10598 ; WX 838 ; N uni2966 ; G 3029
U 10599 ; WX 838 ; N uni2967 ; G 3030
U 10600 ; WX 838 ; N uni2968 ; G 3031
U 10601 ; WX 838 ; N uni2969 ; G 3032
U 10602 ; WX 838 ; N uni296A ; G 3033
U 10603 ; WX 838 ; N uni296B ; G 3034
U 10604 ; WX 838 ; N uni296C ; G 3035
U 10605 ; WX 838 ; N uni296D ; G 3036
U 10606 ; WX 838 ; N uni296E ; G 3037
U 10607 ; WX 838 ; N uni296F ; G 3038
U 10608 ; WX 838 ; N uni2970 ; G 3039
U 10609 ; WX 838 ; N uni2971 ; G 3040
U 10610 ; WX 838 ; N uni2972 ; G 3041
U 10611 ; WX 838 ; N uni2973 ; G 3042
U 10612 ; WX 838 ; N uni2974 ; G 3043
U 10613 ; WX 838 ; N uni2975 ; G 3044
U 10614 ; WX 838 ; N uni2976 ; G 3045
U 10615 ; WX 981 ; N uni2977 ; G 3046
U 10616 ; WX 838 ; N uni2978 ; G 3047
U 10617 ; WX 838 ; N uni2979 ; G 3048
U 10618 ; WX 984 ; N uni297A ; G 3049
U 10619 ; WX 838 ; N uni297B ; G 3050
U 10620 ; WX 838 ; N uni297C ; G 3051
U 10621 ; WX 838 ; N uni297D ; G 3052
U 10622 ; WX 838 ; N uni297E ; G 3053
U 10623 ; WX 838 ; N uni297F ; G 3054
U 10731 ; WX 494 ; N uni29EB ; G 3055
U 10764 ; WX 1513 ; N uni2A0C ; G 3056
U 10765 ; WX 521 ; N uni2A0D ; G 3057
U 10766 ; WX 521 ; N uni2A0E ; G 3058
U 10799 ; WX 838 ; N uni2A2F ; G 3059
U 10858 ; WX 838 ; N uni2A6A ; G 3060
U 10859 ; WX 838 ; N uni2A6B ; G 3061
U 11008 ; WX 838 ; N uni2B00 ; G 3062
U 11009 ; WX 838 ; N uni2B01 ; G 3063
U 11010 ; WX 838 ; N uni2B02 ; G 3064
U 11011 ; WX 838 ; N uni2B03 ; G 3065
U 11012 ; WX 838 ; N uni2B04 ; G 3066
U 11013 ; WX 838 ; N uni2B05 ; G 3067
U 11014 ; WX 838 ; N uni2B06 ; G 3068
U 11015 ; WX 838 ; N uni2B07 ; G 3069
U 11016 ; WX 838 ; N uni2B08 ; G 3070
U 11017 ; WX 838 ; N uni2B09 ; G 3071
U 11018 ; WX 838 ; N uni2B0A ; G 3072
U 11019 ; WX 838 ; N uni2B0B ; G 3073
U 11020 ; WX 838 ; N uni2B0C ; G 3074
U 11021 ; WX 838 ; N uni2B0D ; G 3075
U 11022 ; WX 838 ; N uni2B0E ; G 3076
U 11023 ; WX 838 ; N uni2B0F ; G 3077
U 11024 ; WX 838 ; N uni2B10 ; G 3078
U 11025 ; WX 838 ; N uni2B11 ; G 3079
U 11026 ; WX 945 ; N uni2B12 ; G 3080
U 11027 ; WX 945 ; N uni2B13 ; G 3081
U 11028 ; WX 945 ; N uni2B14 ; G 3082
U 11029 ; WX 945 ; N uni2B15 ; G 3083
U 11030 ; WX 769 ; N uni2B16 ; G 3084
U 11031 ; WX 769 ; N uni2B17 ; G 3085
U 11032 ; WX 769 ; N uni2B18 ; G 3086
U 11033 ; WX 769 ; N uni2B19 ; G 3087
U 11034 ; WX 945 ; N uni2B1A ; G 3088
U 11360 ; WX 664 ; N uni2C60 ; G 3089
U 11361 ; WX 320 ; N uni2C61 ; G 3090
U 11363 ; WX 673 ; N uni2C63 ; G 3091
U 11364 ; WX 753 ; N uni2C64 ; G 3092
U 11367 ; WX 872 ; N uni2C67 ; G 3093
U 11368 ; WX 644 ; N uni2C68 ; G 3094
U 11369 ; WX 747 ; N uni2C69 ; G 3095
U 11370 ; WX 606 ; N uni2C6A ; G 3096
U 11371 ; WX 695 ; N uni2C6B ; G 3097
U 11372 ; WX 527 ; N uni2C6C ; G 3098
U 11373 ; WX 782 ; N uni2C6D ; G 3099
U 11374 ; WX 1024 ; N uni2C6E ; G 3100
U 11375 ; WX 722 ; N uni2C6F ; G 3101
U 11376 ; WX 782 ; N uni2C70 ; G 3102
U 11377 ; WX 663 ; N uni2C71 ; G 3103
U 11378 ; WX 1130 ; N uni2C72 ; G 3104
U 11379 ; WX 939 ; N uni2C73 ; G 3105
U 11381 ; WX 740 ; N uni2C75 ; G 3106
U 11382 ; WX 531 ; N uni2C76 ; G 3107
U 11383 ; WX 700 ; N uni2C77 ; G 3108
U 11385 ; WX 501 ; N uni2C79 ; G 3109
U 11386 ; WX 602 ; N uni2C7A ; G 3110
U 11387 ; WX 553 ; N uni2C7B ; G 3111
U 11388 ; WX 264 ; N uni2C7C ; G 3112
U 11389 ; WX 455 ; N uni2C7D ; G 3113
U 11390 ; WX 685 ; N uni2C7E ; G 3114
U 11391 ; WX 695 ; N uni2C7F ; G 3115
U 11520 ; WX 773 ; N uni2D00 ; G 3116
U 11521 ; WX 635 ; N uni2D01 ; G 3117
U 11522 ; WX 633 ; N uni2D02 ; G 3118
U 11523 ; WX 658 ; N uni2D03 ; G 3119
U 11524 ; WX 631 ; N uni2D04 ; G 3120
U 11525 ; WX 962 ; N uni2D05 ; G 3121
U 11526 ; WX 756 ; N uni2D06 ; G 3122
U 11527 ; WX 960 ; N uni2D07 ; G 3123
U 11528 ; WX 617 ; N uni2D08 ; G 3124
U 11529 ; WX 646 ; N uni2D09 ; G 3125
U 11530 ; WX 962 ; N uni2D0A ; G 3126
U 11531 ; WX 632 ; N uni2D0B ; G 3127
U 11532 ; WX 646 ; N uni2D0C ; G 3128
U 11533 ; WX 962 ; N uni2D0D ; G 3129
U 11534 ; WX 645 ; N uni2D0E ; G 3130
U 11535 ; WX 866 ; N uni2D0F ; G 3131
U 11536 ; WX 961 ; N uni2D10 ; G 3132
U 11537 ; WX 645 ; N uni2D11 ; G 3133
U 11538 ; WX 645 ; N uni2D12 ; G 3134
U 11539 ; WX 959 ; N uni2D13 ; G 3135
U 11540 ; WX 945 ; N uni2D14 ; G 3136
U 11541 ; WX 863 ; N uni2D15 ; G 3137
U 11542 ; WX 644 ; N uni2D16 ; G 3138
U 11543 ; WX 646 ; N uni2D17 ; G 3139
U 11544 ; WX 645 ; N uni2D18 ; G 3140
U 11545 ; WX 649 ; N uni2D19 ; G 3141
U 11546 ; WX 688 ; N uni2D1A ; G 3142
U 11547 ; WX 634 ; N uni2D1B ; G 3143
U 11548 ; WX 982 ; N uni2D1C ; G 3144
U 11549 ; WX 681 ; N uni2D1D ; G 3145
U 11550 ; WX 676 ; N uni2D1E ; G 3146
U 11551 ; WX 852 ; N uni2D1F ; G 3147
U 11552 ; WX 957 ; N uni2D20 ; G 3148
U 11553 ; WX 632 ; N uni2D21 ; G 3149
U 11554 ; WX 645 ; N uni2D22 ; G 3150
U 11555 ; WX 646 ; N uni2D23 ; G 3151
U 11556 ; WX 749 ; N uni2D24 ; G 3152
U 11557 ; WX 914 ; N uni2D25 ; G 3153
U 11800 ; WX 536 ; N uni2E18 ; G 3154
U 11807 ; WX 838 ; N uni2E1F ; G 3155
U 11810 ; WX 390 ; N uni2E22 ; G 3156
U 11811 ; WX 390 ; N uni2E23 ; G 3157
U 11812 ; WX 390 ; N uni2E24 ; G 3158
U 11813 ; WX 390 ; N uni2E25 ; G 3159
U 11822 ; WX 536 ; N uni2E2E ; G 3160
U 42564 ; WX 685 ; N uniA644 ; G 3161
U 42565 ; WX 513 ; N uniA645 ; G 3162
U 42566 ; WX 395 ; N uniA646 ; G 3163
U 42567 ; WX 392 ; N uniA647 ; G 3164
U 42576 ; WX 1104 ; N uniA650 ; G 3165
U 42577 ; WX 939 ; N uniA651 ; G 3166
U 42580 ; WX 1193 ; N uniA654 ; G 3167
U 42581 ; WX 871 ; N uniA655 ; G 3168
U 42582 ; WX 1140 ; N uniA656 ; G 3169
U 42583 ; WX 875 ; N uniA657 ; G 3170
U 42648 ; WX 1416 ; N uniA698 ; G 3171
U 42649 ; WX 999 ; N uniA699 ; G 3172
U 42760 ; WX 493 ; N uniA708 ; G 3173
U 42761 ; WX 493 ; N uniA709 ; G 3174
U 42762 ; WX 493 ; N uniA70A ; G 3175
U 42763 ; WX 493 ; N uniA70B ; G 3176
U 42764 ; WX 493 ; N uniA70C ; G 3177
U 42765 ; WX 493 ; N uniA70D ; G 3178
U 42766 ; WX 493 ; N uniA70E ; G 3179
U 42767 ; WX 493 ; N uniA70F ; G 3180
U 42768 ; WX 493 ; N uniA710 ; G 3181
U 42769 ; WX 493 ; N uniA711 ; G 3182
U 42770 ; WX 493 ; N uniA712 ; G 3183
U 42771 ; WX 493 ; N uniA713 ; G 3184
U 42772 ; WX 493 ; N uniA714 ; G 3185
U 42773 ; WX 493 ; N uniA715 ; G 3186
U 42774 ; WX 493 ; N uniA716 ; G 3187
U 42779 ; WX 369 ; N uniA71B ; G 3188
U 42780 ; WX 369 ; N uniA71C ; G 3189
U 42781 ; WX 253 ; N uniA71D ; G 3190
U 42782 ; WX 253 ; N uniA71E ; G 3191
U 42783 ; WX 253 ; N uniA71F ; G 3192
U 42790 ; WX 872 ; N uniA726 ; G 3193
U 42791 ; WX 634 ; N uniA727 ; G 3194
U 42792 ; WX 843 ; N uniA728 ; G 3195
U 42793 ; WX 754 ; N uniA729 ; G 3196
U 42794 ; WX 612 ; N uniA72A ; G 3197
U 42795 ; WX 560 ; N uniA72B ; G 3198
U 42796 ; WX 548 ; N uniA72C ; G 3199
U 42797 ; WX 531 ; N uniA72D ; G 3200
U 42798 ; WX 629 ; N uniA72E ; G 3201
U 42799 ; WX 610 ; N uniA72F ; G 3202
U 42800 ; WX 514 ; N uniA730 ; G 3203
U 42801 ; WX 513 ; N uniA731 ; G 3204
U 42802 ; WX 1195 ; N uniA732 ; G 3205
U 42803 ; WX 943 ; N uniA733 ; G 3206
U 42804 ; WX 1226 ; N uniA734 ; G 3207
U 42805 ; WX 950 ; N uniA735 ; G 3208
U 42806 ; WX 1149 ; N uniA736 ; G 3209
U 42807 ; WX 933 ; N uniA737 ; G 3210
U 42808 ; WX 968 ; N uniA738 ; G 3211
U 42809 ; WX 784 ; N uniA739 ; G 3212
U 42810 ; WX 968 ; N uniA73A ; G 3213
U 42811 ; WX 784 ; N uniA73B ; G 3214
U 42812 ; WX 962 ; N uniA73C ; G 3215
U 42813 ; WX 759 ; N uniA73D ; G 3216
U 42814 ; WX 765 ; N uniA73E ; G 3217
U 42815 ; WX 560 ; N uniA73F ; G 3218
U 42816 ; WX 747 ; N uniA740 ; G 3219
U 42817 ; WX 606 ; N uniA741 ; G 3220
U 42822 ; WX 787 ; N uniA746 ; G 3221
U 42823 ; WX 434 ; N uniA747 ; G 3222
U 42826 ; WX 932 ; N uniA74A ; G 3223
U 42827 ; WX 711 ; N uniA74B ; G 3224
U 42830 ; WX 1416 ; N uniA74E ; G 3225
U 42831 ; WX 999 ; N uniA74F ; G 3226
U 42856 ; WX 707 ; N uniA768 ; G 3227
U 42857 ; WX 610 ; N uniA769 ; G 3228
U 42875 ; WX 612 ; N uniA77B ; G 3229
U 42876 ; WX 478 ; N uniA77C ; G 3230
U 42880 ; WX 664 ; N uniA780 ; G 3231
U 42881 ; WX 320 ; N uniA781 ; G 3232
U 42882 ; WX 843 ; N uniA782 ; G 3233
U 42883 ; WX 644 ; N uniA783 ; G 3234
U 42884 ; WX 612 ; N uniA784 ; G 3235
U 42885 ; WX 478 ; N uniA785 ; G 3236
U 42886 ; WX 765 ; N uniA786 ; G 3237
U 42887 ; WX 560 ; N uniA787 ; G 3238
U 42891 ; WX 402 ; N uniA78B ; G 3239
U 42892 ; WX 275 ; N uniA78C ; G 3240
U 42893 ; WX 773 ; N uniA78D ; G 3241
U 42896 ; WX 875 ; N uniA790 ; G 3242
U 42897 ; WX 698 ; N uniA791 ; G 3243
U 42922 ; WX 872 ; N uniA7AA ; G 3244
U 43000 ; WX 549 ; N uniA7F8 ; G 3245
U 43001 ; WX 623 ; N uniA7F9 ; G 3246
U 43002 ; WX 957 ; N uniA7FA ; G 3247
U 43003 ; WX 694 ; N uniA7FB ; G 3248
U 43004 ; WX 673 ; N uniA7FC ; G 3249
U 43005 ; WX 1024 ; N uniA7FD ; G 3250
U 43006 ; WX 395 ; N uniA7FE ; G 3251
U 43007 ; WX 1201 ; N uniA7FF ; G 3252
U 62464 ; WX 664 ; N uniF400 ; G 3253
U 62465 ; WX 675 ; N uniF401 ; G 3254
U 62466 ; WX 724 ; N uniF402 ; G 3255
U 62467 ; WX 958 ; N uniF403 ; G 3256
U 62468 ; WX 675 ; N uniF404 ; G 3257
U 62469 ; WX 669 ; N uniF405 ; G 3258
U 62470 ; WX 735 ; N uniF406 ; G 3259
U 62471 ; WX 997 ; N uniF407 ; G 3260
U 62472 ; WX 675 ; N uniF408 ; G 3261
U 62473 ; WX 675 ; N uniF409 ; G 3262
U 62474 ; WX 1268 ; N uniF40A ; G 3263
U 62475 ; WX 693 ; N uniF40B ; G 3264
U 62476 ; WX 692 ; N uniF40C ; G 3265
U 62477 ; WX 963 ; N uniF40D ; G 3266
U 62478 ; WX 675 ; N uniF40E ; G 3267
U 62479 ; WX 692 ; N uniF40F ; G 3268
U 62480 ; WX 1009 ; N uniF410 ; G 3269
U 62481 ; WX 756 ; N uniF411 ; G 3270
U 62482 ; WX 809 ; N uniF412 ; G 3271
U 62483 ; WX 758 ; N uniF413 ; G 3272
U 62484 ; WX 955 ; N uniF414 ; G 3273
U 62485 ; WX 691 ; N uniF415 ; G 3274
U 62486 ; WX 946 ; N uniF416 ; G 3275
U 62487 ; WX 690 ; N uniF417 ; G 3276
U 62488 ; WX 698 ; N uniF418 ; G 3277
U 62489 ; WX 692 ; N uniF419 ; G 3278
U 62490 ; WX 739 ; N uniF41A ; G 3279
U 62491 ; WX 692 ; N uniF41B ; G 3280
U 62492 ; WX 698 ; N uniF41C ; G 3281
U 62493 ; WX 676 ; N uniF41D ; G 3282
U 62494 ; WX 739 ; N uniF41E ; G 3283
U 62495 ; WX 895 ; N uniF41F ; G 3284
U 62496 ; WX 675 ; N uniF420 ; G 3285
U 62497 ; WX 785 ; N uniF421 ; G 3286
U 62498 ; WX 676 ; N uniF422 ; G 3287
U 62499 ; WX 675 ; N uniF423 ; G 3288
U 62500 ; WX 675 ; N uniF424 ; G 3289
U 62501 ; WX 732 ; N uniF425 ; G 3290
U 62502 ; WX 972 ; N uniF426 ; G 3291
U 62504 ; WX 904 ; N uniF428 ; G 3292
U 63172 ; WX 320 ; N uniF6C4 ; G 3293
U 63173 ; WX 602 ; N uniF6C5 ; G 3294
U 63174 ; WX 640 ; N uniF6C6 ; G 3295
U 63175 ; WX 644 ; N uniF6C7 ; G 3296
U 63176 ; WX 947 ; N uniF6C8 ; G 3297
U 63185 ; WX 500 ; N cyrBreve ; G 3298
U 63188 ; WX 500 ; N cyrbreve ; G 3299
U 64256 ; WX 708 ; N uniFB00 ; G 3300
U 64257 ; WX 667 ; N fi ; G 3301
U 64258 ; WX 667 ; N fl ; G 3302
U 64259 ; WX 941 ; N uniFB03 ; G 3303
U 64260 ; WX 986 ; N uniFB04 ; G 3304
U 64261 ; WX 744 ; N uniFB05 ; G 3305
U 64262 ; WX 916 ; N uniFB06 ; G 3306
U 65024 ; WX 0 ; N uniFE00 ; G 3307
U 65025 ; WX 0 ; N uniFE01 ; G 3308
U 65026 ; WX 0 ; N uniFE02 ; G 3309
U 65027 ; WX 0 ; N uniFE03 ; G 3310
U 65028 ; WX 0 ; N uniFE04 ; G 3311
U 65029 ; WX 0 ; N uniFE05 ; G 3312
U 65030 ; WX 0 ; N uniFE06 ; G 3313
U 65031 ; WX 0 ; N uniFE07 ; G 3314
U 65032 ; WX 0 ; N uniFE08 ; G 3315
U 65033 ; WX 0 ; N uniFE09 ; G 3316
U 65034 ; WX 0 ; N uniFE0A ; G 3317
U 65035 ; WX 0 ; N uniFE0B ; G 3318
U 65036 ; WX 0 ; N uniFE0C ; G 3319
U 65037 ; WX 0 ; N uniFE0D ; G 3320
U 65038 ; WX 0 ; N uniFE0E ; G 3321
U 65039 ; WX 0 ; N uniFE0F ; G 3322
U 65529 ; WX 0 ; N uniFFF9 ; G 3323
U 65530 ; WX 0 ; N uniFFFA ; G 3324
U 65531 ; WX 0 ; N uniFFFB ; G 3325
U 65532 ; WX 0 ; N uniFFFC ; G 3326
U 65533 ; WX 1025 ; N uniFFFD ; G 3327
EndCharMetrics
StartKernData 
StartKernPairs 1103

KPX dollar seven -112
KPX dollar nine -102
KPX dollar colon -83
KPX dollar less -83
KPX dollar I -36
KPX dollar W -36
KPX dollar Y -83
KPX dollar Z -92
KPX dollar backslash -83
KPX dollar questiondown -83
KPX dollar Aacute -83
KPX dollar Hbar -112
KPX dollar hbar -36
KPX dollar lacute -83

KPX percent ampersand 38
KPX percent asterisk 38
KPX percent two 38
KPX percent less -36
KPX percent Egrave 38
KPX percent Icircumflex 38
KPX percent agrave 38
KPX percent Ebreve 38
KPX percent lacute -36


KPX quotesingle nine -36


KPX parenright dollar -178
KPX parenright D -139
KPX parenright H -112
KPX parenright R -112
KPX parenright cent -139
KPX parenright sterling -139
KPX parenright currency -139
KPX parenright yen -139
KPX parenright brokenbar -139
KPX parenright section -139
KPX parenright dieresis -139
KPX parenright ordfeminine -112
KPX parenright guillemotleft -112
KPX parenright logicalnot -112
KPX parenright sfthyphen -112
KPX parenright acute -112
KPX parenright mu -112
KPX parenright paragraph -112
KPX parenright periodcentered -112
KPX parenright cedilla -112
KPX parenright ordmasculine -112
KPX parenright Yacute -112
KPX parenright ebreve -112

KPX asterisk less -36
KPX asterisk lacute -36


KPX period dollar -83
KPX period ampersand -55
KPX period two -55
KPX period eight -73
KPX period colon -73
KPX period less -55
KPX period H -55
KPX period R -55
KPX period X -45
KPX period backslash -131
KPX period ordfeminine -55
KPX period guillemotleft -55
KPX period logicalnot -55
KPX period sfthyphen -55
KPX period acute -55
KPX period mu -55
KPX period paragraph -55
KPX period periodcentered -55
KPX period cedilla -55
KPX period ordmasculine -36
KPX period guillemotright -45
KPX period onequarter -45
KPX period onehalf -45
KPX period threequarters -45
KPX period questiondown -131
KPX period Aacute -131
KPX period Egrave -55
KPX period Icircumflex -55
KPX period Yacute -55
KPX period Ebreve -55
KPX period ebreve -55
KPX period Idot -73
KPX period dotlessi -45
KPX period lacute -55

KPX slash seven -167
KPX slash eight -112
KPX slash nine -243
KPX slash colon -178
KPX slash less -131
KPX slash backslash -36
KPX slash questiondown -36
KPX slash Aacute -36
KPX slash Hbar -167
KPX slash Idot -112
KPX slash lacute -131


KPX two nine -36
KPX two semicolon -36

KPX three dollar -188
KPX three eight -36
KPX three D -92
KPX three H -92
KPX three R -83
KPX three V -55
KPX three cent -92
KPX three sterling -92
KPX three currency -92
KPX three yen -92
KPX three brokenbar -92
KPX three section -92
KPX three dieresis -92
KPX three ordfeminine -92
KPX three guillemotleft -92
KPX three logicalnot -92
KPX three sfthyphen -92
KPX three acute -83
KPX three mu -83
KPX three paragraph -83
KPX three periodcentered -83
KPX three cedilla -83
KPX three ordmasculine -83
KPX three Yacute -92
KPX three ebreve -83
KPX three gdotaccent -55
KPX three gcommaaccent -55
KPX three Idot -36


KPX five seven -36
KPX five nine -73
KPX five colon -45
KPX five less -63
KPX five D 47
KPX five backslash -36
KPX five cent 47
KPX five sterling 47
KPX five currency 47
KPX five yen 47
KPX five brokenbar 47
KPX five section 47
KPX five dieresis 47
KPX five ordmasculine 38
KPX five questiondown -36
KPX five Aacute -36
KPX five Hbar -36
KPX five lacute -63

KPX six six -36
KPX six Gdotaccent -36
KPX six Gcommaaccent -36

KPX seven dollar -112
KPX seven seven 38
KPX seven D -159
KPX seven F -159
KPX seven H -159
KPX seven R -159
KPX seven V -149
KPX seven Z -73
KPX seven cent -159
KPX seven sterling -159
KPX seven currency -159
KPX seven yen -159
KPX seven brokenbar -159
KPX seven section -159
KPX seven dieresis -159
KPX seven copyright -159
KPX seven ordfeminine -159
KPX seven guillemotleft -159
KPX seven logicalnot -159
KPX seven sfthyphen -159
KPX seven acute -159
KPX seven mu -159
KPX seven paragraph -159
KPX seven periodcentered -159
KPX seven cedilla -159
KPX seven ordmasculine -159
KPX seven Eacute -159
KPX seven Idieresis -159
KPX seven Yacute -159
KPX seven ebreve -159
KPX seven gdotaccent -149
KPX seven gcommaaccent -149
KPX seven Hbar 38

KPX eight dollar -63
KPX eight hyphen -55

KPX nine dollar -139
KPX nine two -36
KPX nine D -188
KPX nine H -188
KPX nine L -36
KPX nine R -188
KPX nine X -131
KPX nine backslash -83
KPX nine cent -188
KPX nine sterling -188
KPX nine currency -188
KPX nine yen -188
KPX nine brokenbar -188
KPX nine section -188
KPX nine dieresis -188
KPX nine ordfeminine -188
KPX nine guillemotleft -188
KPX nine logicalnot -188
KPX nine sfthyphen -188
KPX nine acute -188
KPX nine mu -188
KPX nine paragraph -188
KPX nine periodcentered -188
KPX nine cedilla -188
KPX nine ordmasculine -188
KPX nine guillemotright -131
KPX nine onequarter -131
KPX nine onehalf -131
KPX nine threequarters -131
KPX nine questiondown -83
KPX nine Aacute -83
KPX nine Yacute -188
KPX nine Ebreve -36
KPX nine ebreve -188
KPX nine dotlessi -131

KPX colon dollar -102
KPX colon D -178
KPX colon H -167
KPX colon L -36
KPX colon R -139
KPX colon U -92
KPX colon X -83
KPX colon backslash -45
KPX colon cent -178
KPX colon sterling -178
KPX colon currency -178
KPX colon yen -178
KPX colon brokenbar -178
KPX colon section -178
KPX colon dieresis -139
KPX colon ordfeminine -167
KPX colon guillemotleft -167
KPX colon logicalnot -167
KPX colon sfthyphen -167
KPX colon acute -139
KPX colon mu -139
KPX colon paragraph -139
KPX colon periodcentered -139
KPX colon cedilla -139
KPX colon ordmasculine -139
KPX colon guillemotright -83
KPX colon onequarter -83
KPX colon onehalf -83
KPX colon threequarters -83
KPX colon questiondown -45
KPX colon Aacute -45
KPX colon Yacute -167
KPX colon ebreve -139
KPX colon edotaccent -92
KPX colon ecaron -92
KPX colon dotlessi -83

KPX semicolon dollar -73
KPX semicolon ampersand -36
KPX semicolon two -36
KPX semicolon Egrave -36
KPX semicolon Icircumflex -36
KPX semicolon Ebreve -36

KPX less dollar -159
KPX less ampersand -36
KPX less D -159
KPX less H -178
KPX less L -36
KPX less R -178
KPX less X -178
KPX less cent -159
KPX less sterling -159
KPX less currency -159
KPX less yen -159
KPX less brokenbar -159
KPX less section -159
KPX less dieresis -196
KPX less ordfeminine -178
KPX less guillemotleft -178
KPX less logicalnot -178
KPX less sfthyphen -178
KPX less acute -178
KPX less mu -178
KPX less paragraph -178
KPX less periodcentered -178
KPX less cedilla -178
KPX less ordmasculine -178
KPX less guillemotright -178
KPX less onequarter -178
KPX less onehalf -178
KPX less threequarters -178
KPX less Egrave -36
KPX less Icircumflex -36
KPX less Yacute -178
KPX less ebreve -215
KPX less dotlessi -178























KPX Eth nine -36


KPX agrave less -36
KPX agrave lacute -36

KPX ucircumflex seven -167
KPX ucircumflex eight -112
KPX ucircumflex nine -243
KPX ucircumflex colon -178
KPX ucircumflex less -131
KPX ucircumflex backslash -36
KPX ucircumflex questiondown -36
KPX ucircumflex Aacute -36
KPX ucircumflex Hbar -167
KPX ucircumflex Idot -112
KPX ucircumflex lacute -131

KPX ydieresis seven -167
KPX ydieresis eight -112
KPX ydieresis nine -243
KPX ydieresis colon -178
KPX ydieresis less -131
KPX ydieresis backslash -36
KPX ydieresis questiondown -36
KPX ydieresis Aacute -36
KPX ydieresis Hbar -167
KPX ydieresis Idot -112
KPX ydieresis lacute -131

KPX Abreve O -227

KPX abreve seven -167
KPX abreve eight -36
KPX abreve nine -243
KPX abreve colon -178
KPX abreve less -206
KPX abreve backslash -36
KPX abreve questiondown -36
KPX abreve Aacute -36
KPX abreve Hbar -167
KPX abreve Idot -36
KPX abreve lacute -206



KPX Edotaccent seven -36
KPX Edotaccent nine -73
KPX Edotaccent colon -45
KPX Edotaccent less -63
KPX Edotaccent D 47
KPX Edotaccent backslash -36
KPX Edotaccent cent 47
KPX Edotaccent sterling 47
KPX Edotaccent currency 47
KPX Edotaccent yen 47
KPX Edotaccent brokenbar 47
KPX Edotaccent section 47
KPX Edotaccent dieresis 47
KPX Edotaccent ordmasculine 38
KPX Edotaccent questiondown -36
KPX Edotaccent Aacute -36
KPX Edotaccent Hbar -36
KPX Edotaccent lacute -63


KPX Ecaron seven -36
KPX Ecaron nine -73
KPX Ecaron colon -45
KPX Ecaron less -63
KPX Ecaron D 47
KPX Ecaron backslash -36
KPX Ecaron cent 47
KPX Ecaron sterling 47
KPX Ecaron currency 47
KPX Ecaron yen 47
KPX Ecaron brokenbar 47
KPX Ecaron section 47
KPX Ecaron dieresis 47
KPX Ecaron ordmasculine 38
KPX Ecaron questiondown -36
KPX Ecaron Aacute -36
KPX Ecaron Hbar -36
KPX Ecaron lacute -63


KPX Gdotaccent six -36
KPX Gdotaccent Gdotaccent -36
KPX Gdotaccent Gcommaaccent -36

KPX Gcommaaccent six -36
KPX Gcommaaccent Gdotaccent -36
KPX Gcommaaccent Gcommaaccent -36

KPX Hbar dollar -112
KPX Hbar seven 38
KPX Hbar D -159
KPX Hbar F -159
KPX Hbar H -159
KPX Hbar R -159
KPX Hbar V -149
KPX Hbar Z -73
KPX Hbar cent -159
KPX Hbar sterling -159
KPX Hbar currency -159
KPX Hbar yen -159
KPX Hbar brokenbar -159
KPX Hbar section -159
KPX Hbar dieresis -159
KPX Hbar copyright -159
KPX Hbar ordfeminine -159
KPX Hbar guillemotleft -159
KPX Hbar logicalnot -159
KPX Hbar sfthyphen -159
KPX Hbar acute -159
KPX Hbar mu -159
KPX Hbar paragraph -159
KPX Hbar periodcentered -159
KPX Hbar cedilla -159
KPX Hbar ordmasculine -159
KPX Hbar Eacute -159
KPX Hbar Idieresis -159
KPX Hbar Yacute -159
KPX Hbar ebreve -159
KPX Hbar gdotaccent -149
KPX Hbar gcommaaccent -149
KPX Hbar Hbar 38

KPX Idot dollar -63
KPX Idot hyphen -55

KPX kcommaaccent D 110
KPX kcommaaccent F 85
KPX kcommaaccent G 97
KPX kcommaaccent H 86
KPX kcommaaccent I 220
KPX kcommaaccent J 97
KPX kcommaaccent L 220
KPX kcommaaccent M 218
KPX kcommaaccent P 125
KPX kcommaaccent Q 125
KPX kcommaaccent R 85
KPX kcommaaccent S 140
KPX kcommaaccent T 97
KPX kcommaaccent U 125
KPX kcommaaccent V 155
KPX kcommaaccent W 235
KPX kcommaaccent X 144
KPX kcommaaccent Y 205
KPX kcommaaccent Z 166
KPX kcommaaccent bracketleft 174
KPX kcommaaccent backslash 205
KPX kcommaaccent bracketright 179
KPX kcommaaccent kcommaaccent 261

KPX lacute dollar -159
KPX lacute ampersand -36
KPX lacute D -159
KPX lacute H -178
KPX lacute L -36
KPX lacute R -178
KPX lacute X -178
KPX lacute cent -159
KPX lacute sterling -159
KPX lacute currency -159
KPX lacute yen -159
KPX lacute brokenbar -159
KPX lacute section -159
KPX lacute dieresis -196
KPX lacute ordfeminine -178
KPX lacute guillemotleft -178
KPX lacute logicalnot -178
KPX lacute sfthyphen -178
KPX lacute acute -178
KPX lacute mu -178
KPX lacute paragraph -178
KPX lacute periodcentered -178
KPX lacute cedilla -178
KPX lacute ordmasculine -178
KPX lacute guillemotright -178
KPX lacute onequarter -178
KPX lacute onehalf -178
KPX lacute threequarters -178
KPX lacute Egrave -36
KPX lacute Icircumflex -36
KPX lacute Yacute -178
KPX lacute ebreve -215
KPX lacute dotlessi -178


KPX uni027D dollar -264
KPX uni027D hyphen 47
EndKernPairs
EndKernData
EndFontMetrics
       @FFTMs  L   GDEF|  h   GPOS    BbGSUB;  Dl  MATH99  K  OS/2m  O   VcmapLω  PD  cvt 3  a  fpgm  b   gasp    c,   glyf   c8 0headg <   6hhea s t   $hmtxI0   7 kern# ʸ   loca`   7$maxp&3 !    name|" "  !Npostd( Ch  prepuy Ǆ  ^       =    )    )                               z {                  
   DFLT  cyrl 0grek Llatn \math             MKD  SRB                    ^ AZE  ^CRT  ^GAG  ^ISM  ^KAZ  ^KRK  ^KSM  ^LSM  ^MOL  ^NSM  ^ROM  ^SKS  ^SSM  ^TAT  ^TRK  ^               kern mark mkmk                                 ': J r  ! D J P V \ b h n t z                        d  f        G          f  f  l  l  f    G  S    f  f  f  f  f  f                        {{ }}          {  &                                                                  $  *  0  6  <  B  H  N  T  Z  `  f  l  r  x                                      D    D  D                                 !@Z !z .4:@FLRX^djpv|	 						$	*	0	6	<	B	H	N	T	Z	`	f	l	r	x	~																					





 
&
,
2
8
>
D
J
P
V
\
b
h
n
t
z





  
  




  
  


  






  "(.4:@FLRX^  d  j  p  v  |                   $*06  <BHNTZ`flrx~     &,28>DJPV\bh  n  tz          
"(.4:@FLRX^djpv|           $  *  0  6  <BH  N  T  Z  `  f  l  r  x  ~                                                         &  ,  2  8  >  DJPV\bhnt  z    
"(.4:@FLRX^djpv| $*06<BHNTZ`flrx~ &,28>DJPV\bhntz    
"(.4:@FLRX^djpv| $*06<BHNTZ`flrx~                     &,28>DJPV\bhntz
"(.4:@FLRX^djpv| $*06<BHNTZ`flrx~ &,28>DJPV\bhntz
"(.4:@FLRX^djpv| $*06<BHNTZ`flrx~ &,28>DJPV\bhntz
"(.4:@FLRX^dj  p  v  |       $*06<BH         = =               X X   } }         R I I           g g   H H       H H                                     9D 9   H     hD h 
   9   ^D ^   5  V   \D \R H    H  H   H   vR H     H  H   D    RD    hD h   D HR 9D R (D H   D    9     HD R   BD B   oD o   BD B   <D <R D    k s     = =R ?k ?k H H   k D    hD hR } }   HD H   RD   D        9     5  V   H   
  = hD   H H       X       g RD H  D  R R    <D     D    - -   D CR X X   \D \R H I I   5  5    R ^D ^   H  t   RD    9  e   HD  vR     D                 ^D ^     R  vR     9D 9       (D H       <D <R D    9D 9   D    (D hD   9   hD hD hD D    ,D ,   ,D ,   D    HD  vR hD h 
 D R HD RR H   VD D    D R D    ID I     R =D    D =   D R {D {   D    D R (     H H   XD X     h 
 nD ?          9D 9       D      R =      } } I } }   H       p 9D ID ^D D D D hD D hD ZD D  D (D D D hD J  F 	D  D } D } D  /   D  H } D I I I   H     @ @   } }    }  BD B   ZD 
   4D >   hD h 
 0D 0   0D 0   &D &   {D    D    nD ?   D    D    hD h   D  
 D    D    D    D    DD y   D D   DD    9D 9   lD l   D    D    I  BD B   oD o   D    D 9   %  %   D    ID H   BD B   D    DD y   D    D                    2 2       u        $ $ K K          8 8        I   VD V   HD z   D HR lD l   {D {   K  K      H   5  V   5  V       R  R           y y        	    
       a    } } a a               [    D #   1     <1  R  2       H  H        R } }   H    I I   H         D     R     BD B       oD o   } }       hD h   GD G      V      D  YD  D  D Y D     D    } }R H R  KR   R c c   ; ;     D $R   D $R < <   D        D        I       I       I       I    R I TR     D  
 I I   H                 D        D     R ]D HR  R (D HR X    HD HR ? R RD R  R (D HR = =   hD h 
 g g   RD    } }   3 3    D        {        Q     	   n Q   r U       x U   w Z               '    h   R     ! f               r      l I   O -   6        n Q       g G       Z 7   D      F 
 D  
 m     D       (R D R       R            CD n   D 6   D     XD  R D BR D     zD      }   D    D    D    D    D R }D        a a   a a   / /   %             9R        %   < <   } }                              XD X   D    D        D    C }   D R D    }1 }   s1  R D    D }   GD G   D    D    D }R D  R D }   BD B   | -   D    ^D ^ }D }   ^D ^   ^D ^R FD F   D rD HD HD H   D  R HD HD g \D \R         hD h BD B   hD h   6D 6   ,D ,   D    {9 {         9       \D \R  { $ =   D ]    4   8   :   ;   <   >   ? @ A() CAB EHJ GLL JPR KUV NYY P_a Qij Tnn Vss Wuy X|| ] ^ ` a c e i j k {! ~$% '' ** ,, 12 66 9: BD LL QQ TT VV ZZ \] aa     oo qr {{ ~~                             77       ' )-DDGGVVY]ww ||!"&'$&()* +/2349#,:./D14F79J;=MkvP\o  	      " - 5 ;{ < G    $  *  0  6  <  B  H  N  T  Z  `  f  l  r  x  ~                                 & , 2 8 >  D  J  P  V  \  b  h  n  t  z                          D  D  D  D  D  D  D  D  D  D  D  D  D  D  D  D  D  D  |  r  r                                                                                                                D  r  D  r  D  D  D  D  D  D  D  D  D  D  D  D  D  D  D  D  D  D >   >: ) ?                                                                                                                                                      k                                                                                                                                                                                             &       & &   &                                                                                                                                                                                                                                   &                                                                                                                         &                                                                                                                          N                      u                                    uuu      Nu                       &                                                                                                                        a                                                                                                                        k                                              }            }                                                YN  }                                                                                        }  }                                                                                                                       K                                                                                                                    aaD                                                                                       K                                                                                                                   &                             /                                       / / /           &                               K                                                                                                                                 &          aa  a          a    k              aaaaaa          a  k                  DD                                                                                                                  D2u                    D    D        D        }          DDD  DDDDD}      D                 K    kN                      N    Y        u                NNu  YYuuu      u               &                                                                                                                          a                    a    N        N        N            aa<  NNNNNN        )                                                                                                                                                                                                                                                                    &                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         K                                                                                                                   &                                                                                                                                                                                                                                                                                                                                                                                                  YN  2                                                                                                   &          aa  a          a    k              aaaaaaaaa          a  k                                               n U a V      } U  }                                                                         /                                                                                                                         /         9 9 9 9                                                                                                                   9                                                                                          T    $ $  % %  & &  ' '  ( (  ) )  * *  - - 	 . . 
 / /  1 1  2 2  3 3  4 4  5 5  6 6  7 7  8 8  9 9  : :  ; ;  < <  = =  I I  N N  R R  U U  Y Z  [ [  \ \                                                  !                                           " #		         "" && $00 77 %:: ?? }} &  & ' ( 
                 $ $  & &  * *  - -  2 2 	 6 6 
 7 7  8 8  9 9  : :  ; ;  < <  D D  F F  G G  H H  I I  J J  L L  M M  O O  P Q  R R  S S  T T  U U  V V  W W  X X  Y Y   Z Z ! [ [ " \ \ # ] ] $      %      	   	         &   '   &   (   )   *   +   *   ,   -   ,   .   /   0   0   1   2   1   2   1   2      )            )   3   3   3   3   +              3  3  3 	 4 5 5   
!! 6"" 
## 6$$ 7%% 8&& '' 800 11 /66 977 :88 ;99 9::  2  3  3 7 8  3 ;

 9 < 9 < 9 <|} 9 = > =  8  g  $ % & ' ( ) * - . / 1 2 3 4 5 6 7 8 9 : ; < = I N R U Y Z [ \                                                	 "&07:?}      
N DFLT  cyrl 6grek hlatn |math8               MKD   SRB                                   p AZE  CAT  CRT  ESP  GAG  GAL  ISM  KAZ  KRK  KSM  LSM  MOL  NSM  ROM  SKS  SSM  TAT  TRK                                                   	 
aalt >case Dccmp Jdlig Pliga Vliga ^locl dlocl jsalt pssty v                                             " * 2 : B J R Z b j r     `         .    2    6    X    r                     N  6     $ * 0             ` ` `   z     L M     ** __   ^^     ! 'UU (  Y $ =  I I  K K  L M  O O                                                                                           		              "" $$ && (( ** ,, .. 00 22 44 66 88 :; == ?? AA HH RR TT VV           ** __   ^^     UU             
           	  	S        $        I O  O  I   I         I L  L   I    
     W    W   VA  $               J    2       & * .          J  y   
~|}{  
    !    L M *_^U      c d    
   P <       '        '              '      h  '   U                                    v                                   Z     Z   Z               Z   Z     Z   Z   Z  c   Z   Z  8     <         (   N R V Z ^ b f j n z                 
".:FR  0  P  p             K
P   K
P   K
P     
   
   
   6  L  b     
   
   
T  j         S
v
   U
w
   W
x
   g
|
   i
}
   
y
   
z
   
{
     	8   (	u  	7 ( (	 	6 (  	       	;   (	u  	: ( (	 	9 (  	       	>   (	u  	= ( (	 	< (  	q       	A   (	f  	@ ( (	~ 	? (  	q       	D   (	r  	E ( (	 	C ( (	  	E ( (	 	B (  	        _   (    _ (         	H   (	r  	E ( (	 	G ( (	  	E ( (	 	F (  	          (    (         	J  X  ,,          	2   (	o  	I ( (	  	1 (  	l       	=   (	 	< (  	q       	@   (	~ 	? (  	q       	>   (	u  	= (  	      	A   (	f  	@ (  	~           (     (         B   (    B (          q   (V   q (  V       q   (V   q (  V      > @ ^ _ `	)	*	+	,     B qSUWgi      3  3   f   R 
      PfEd @  m`               ,   
            ,  
     h   h   ~?COXaw_emwV_?kxEMWY[]} & : > B I O S W d q         !!	!!!!!"!$!'!+!2!I!K!N!!" ""	""" "-"="C"H"U"a"e"""#####!#%#(#}###$#& &<&G&g&o''''))**/*k+,a,d,s,w,-%...%..GQWAGKOi|&(        COX`pzbjp1Ya? w{   HPY[]_   * < B D K Q W _ j t        !!	!!!!!"!$!&!*!2!<!K!N!P!!""""""#"8"B"H"P"`"d"""##### #%#(#}###$#% &8&?&`&i''''')**/*j+ ,`,c,g,u,y- ..."..DPT&FJNh{ (    |{zykiecOMKIGCA?='#X~}|{zxwvtsqpolkhgfeb[VTSJECB@><zvb&!|)M߿߾>LFD<f'ffeeoekeeeae_e]eEe4e1e.e,ed*                                                                                                                                                                                                                                                                                                                                                                                            ~           b                                               ?    C  C    O  O    X  X    `  a    p  w    z                                 _  [  b  e    j  m    p  w                                                  
            7      =  1  V  A  Y  _  g  a    n        ?  ?                   k    w  x  W  {    Y      ^      _                               E    H  M    P  W    Y  Y    [  [    ]  ]    _  }              -      <      J      P      c      f       &  o   *   :     <   >     B   B     D   I     K   O     Q   S     W   W     _   d     j   q     t                                                                       !  !    !	  !	    !  !    !  !     !  !    !  !    !"  !"    !$  !$    !&  !'    !*  !+  	  !2  !2    !<  !I    !K  !K    !N  !N    !P  !    !  !  R  !  "   S  "  "    "  "	    "  "    "  "    "  "     "#  "-    "8  "=    "B  "C    "H  "H    "P  "U    "`  "a    "d  "e    "  "    "  "  	  "  "  	&  #  #  	(  #  #  	)  #  #  	-  #  #  	/  #   #!  	1  #%  #%  	3  #(  #(  	4  #}  #}  	5  #  #  	6  #  #  	J  #  #  	K  $#  $#  	L  %   &   	M  &8  &<  
N  &?  &G  
S  &`  &g  
\  &i  &o  
d  '  '  
k  '  '  
l  '  '  
n  '  '  
o  '  )  
q  )  )    *  *    */  */    *j  *k    +   +    ,`  ,a  #  ,c  ,d  %  ,g  ,s  '  ,u  ,w  4  ,y  ,  7  -   -%  >  .  .  d  .  .  e  ."  .%  f  ..  ..  j  D  G  k  P  Q  o  T  W  q      u      w        &  A    F  G    J  K    N  O    h  i    {  |                                     &    (  (                                        	 4 T   V g  / 8 9  A ; >  C @ D  G F F  L J P  M R k  T ֤ ֥  n    p 
                                                                       	 
                        ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a                                   r d e i x  p k v j   s g w9 l |"    c nT m } b    
 : y                   q z  
 s       L j q     {        ) j   /     s 3    f   b   w PP     ; f   =   f     R   B s J    }  s    
 j j b \   j j j  j
     j j)R`fX { H j  j``'''D j  b   { s j    \)' \ j j    = f  H   f      JJ} T  {3 ` }T j N   N s    , %Id@QX Y!-,%Id@QX Y!-,   Py PXY%%#  Py PXY%-,KPX EDY!-,%E`D-,KSX%%EDY!!-,ED-         ff   @ ] /1 0!%!!f sr) !   m@a	`b  1 0@9pp``__OO??    ]@	q%4632#"&!#5L97NN79LD{h8NN87NM     @ b 1 <20#!#h++         W@6	c c 	 

 991 /<22<2222220!!!3!!!!#!#!5!!5!T<fgi4R:gihf\RchaabbN    m   1 f@9&!.-, e,! %e/,`2"
 .	 
 ),% 
2221 2<2290%>54&'3.54673#.'#.qwvrdgripbldeYmvd`D
n_VxiXPj!H@1)t	<C3    q)   # ' 3 b@3&'$'$%&%Mjj. j$j&`($i4%'	!	+14991 2<0KSXY""32654&"32654&'2#"&5463#2#"&546XceVUccWcdVVbcU"Z#Zܻۻۻۼ     	 7 @e565665)*)	 **)M5* 6-)1-o/nld#ni`6o
)& *.-02
5-  &7
2 -2&289999999991 /299999990KSX999Y"%326!'#  5467.54632#.#">7#5!#3RWWfoiҙ30CsqngDlEO
٬cSeNfGXVe=yB""kpqZ=yqPikk`   h   b 1 0#h+    @ q 
21 990&7󚆆mcdmbjj     }  @ q 21 99056'5bj\]jbm''    !L  I@+
	 
i
	 	<2<2991 2290%#'-73%yLLyL\\նv}vw}         !@ r	 
<<1 /<<0!!#!5!1Ϡ1Ϣ11    J   @ 	  	91 990>=3J^XE%Z    ZZs    1 0!!Z  s       8  KQX
 <<<<Y1 a	`KQX<<<<Y074632#"&L97NN79Lh8NN87NM    B  *@  M i /991 0KSXY"3#m       #@ eei`	1 0%2#""  32  FPSTPcnohh       
 x@ddMis 	 1 /2990KSXY"K
TX  @   878Y@	   /	/
]KTX     @878Y!5!5%3!#ljÃzj       N  M@!  tdeiw 

9991 /990@F
FFFF]#>32!53!5>54&#"pkhou=Ŗq
9<mĖ    * M@+	etee)t e&ei`+ 	#)
 #
 +99991 90>32!"&'332654&+532654&#"#u^unp
_2p,. ׫23"f~  ?     @%d	
	d

	M
 ss
i <<91 /<<290KSXY"/	] 	  ]KTKT[KT[KT[X     @878Y@8I(
68
GH
] ]	!53!53!!3Xtj%m
k   y  @%xeteew b` 
 	
 91 90K	TKT[KT[X        @878YKTKT[X   @     878Y@&  / /] ]!>32  !"&'332654&#"#T4V gqq	Z5VդT$$23"@C     % c@" e ely#ei`& 
	&1 90@%		))NN N!]%2654&#">32  #"  !2#.#"DlB%O[qn¾FȽKJy^ej        r@   Mwb 
 	91 /90KSXY"K	TX 	  	 	 @878YKTX 	 @  	 	878Y]	#!#!-Nuo1\       / >@"$e	ee*i`0$'- '!0991 9904&#"3264&#"326#"$5467.54632)|{{|lv͟ҟϴ     % ]@$  elyee	i`&
 #&1 90@ !"AAA]#" 54 32  !"&'5332"32654&CmO[pm¾KJxRel%"ɽ    y   @a	a	`  <21 074632#"&4632#"&M88ML99LM89LL98Mh8NN88MM8ML99LM     Jy   "@ a	 1 990>=34632#"&J^X?M88MM88ME%Z8MN78MM   ^  @  291 90	5Ѧ     f   @r r <21 0!!!!    ^  @  <91 9055//y      " <@ a	!ei	`#   !#1 0%4632#"&>32#>54&#"#hM97NN79MjT{~rah8NN87NMc/.ֶ3H+ʜ{    o @ M m@;BAKE'N$ KE($Ez	Kzz@|$z+	|z+7N'(HA ==1N22991 <9999990%#"&5463253>54&'&$#"3267#"$'&5476$32 54&#"326;]گ];DCjϳZVd_m+`5l}YawLNsyzrRPPR%oT&']gw}LLF]]{GF~b|i}       @Q dddd Mo ob
 	91 /<290KSX22Y"(]@ ((((,+] ]!	5333!53!3$H}}jkjjHj     q  d   $ E@'o	ob o	~
$ !$	 !%229991 /2290%!2654&#!532654&+53#5!2!+w埙jj~}j kä    s  8@n dni`&' 	%1 0o]#"&'&5 !2#.#"3267BapmIzq%0dap\@A  q     =@ob
 o	 	$ !299991 /220@	0O]%3   !#53#5!   !#7ܺwRPjL66Hj kvt  q  3  R@*	obo~  $
!2221 /00O]353#5!#5!!53#5!!53q{R{{{j k   q  7  F@'	obo~ 
 $
!2221 /20353#5!#5!!53#5!3q{>{{j k~j     s  G@"	o	n dni` &%1 990  0 O ].#  3267!5!#   !2#q]ͯiY88kMM_b;<   q    ^@.	obo	~ $
$$
 $!2222221 /<2<20@	 p]353#5!#!#5!#3!53!3qGGj kkkk jj~j   q    7@
ob o	$ $!221 /220@0P`p]%3!53#5!#Gjjj kk   TV  m@	 dn	ob $
1 2990K
TX  @   878Y0]KTKT[X     @878Y533265#5!##"&rXXw^qGca9kk"   q   (@Dd	
	
dM	
obo 
$ $!2<2991 /<22<290KSX2Y"p]@		$	'6	F	HW	YYhzz




*
%%&&'(:
66F
F@F@F@F@B@@@@@S
XXUUPXXiieefb```yyvvvyyC] ]353#5!##5!#	3!3qGͪ<j kk5kk3jj    q    0@	ob	o $
 $!21 /20353#5!#!53qG{j kk   f   @GddM
obo $$$	$$ $!9991 /<2<290KSXY"]@	(/))8?99IHOJJXX_ZZihoiiw&$&&6355FEDFUTUTdddctuts$] ]353#5!	!#3!53#3qǿ  j k'k jj~j    d  p@-Mo
bo 	$$$ $!21 /2<22990KSXY" ]@0Op] ]353#5!#5!##3dyDj kf/kkyj    s    ,@ nni`!	%!1 0_"o""]%2#""&'&547>3  HapmmpbEnpbNQJKQkdappbcVobc     q     C@! oob
o	# 	$ !2299991 /220_]!2654&#!53#5!2#!3wj kj     s  " @@n n	i `#   %#999991 90_$o$$]  47>3   ;.'2#"`jmpbE6mdapbcVm:C@QJKQ    q  7  $ @H
	M o#obo#   $ $!%229999991 /<2229990KSX9Y"3!.+3!53#5!2%!2654&#!Fe(ٶCpbz'[REjۊQjj kп&    )'@B#"$! M ! dn'dni'`* ! )$) *99991 90KSX99Y"+]@ +0+P+p++]KTKT[KT[X * @  * *878Y@t(
))))) )!)"8	9
:::99:: :!9"8#I
IJIHI I!I"Y
YYYY Y!Y"j	l
llkkl l!l"i#{
{{{y{{ {!{"y#7++] ]732654&/.54$32#.#"!"&sq֯hq|ɹ˭{HTlt7;A©-+{kz<7=2       B  {@	obo 
$ $1 /2<20K	TX  @   878Y]KTKT[X     @878Y@/`]!53!#!#5!3I{.{Ij`j     `b  n@% 	 ob`$$$$ !1 <299990`]KTKT[X  @   878Y]#5!#326#5!# !  H廿jkkkkS       @9dd 	
	 

	M
 ob
	 	91 /<290KSX22Y" ]@"		(**']]	#5!###5!f jzkkjkk    
  3 @[ddd d  	
M 	ob 
 91 /<<<290KSX22Y"]KTX     @878Y@
%)$?<5LFX\Tmd~t			 	& &&&)$&54647I IEBFEGDH[ [XW[XY[_______f eeehgff	g
gfdehjjhusvuu	v
uwty||yV] ]!#	##5!#	3	#5!#y!7TZ9Bjkk9\kk       @gd d   ddM o
bo	 91 /<2<290KSX2222Y"]]KTKT[KT[X     @878Y@	  ) (%&65EFVUj icdy z 		 & &'&()%%$$/6 7778997F CGGEEKIFIIU SSSSWSVVS[[WYYe deededeedkllke``eee`x zzzz{yxxy{~||@{{}yuxxur] ]	3!53	#5!#	#5!#	3!53LP@Iuנjjskkkk?jj      Z /@Ed
d	


	M
obo 
	 $ $999991 /2<290KSX22Y"] ]K	TX  @   878YKTKT[KT[X     @878Y@d
6
E
[Zf
xw
	**/::7	8
?9?9????F	IV	Y[[ihoho`vvxxx)] ]!53#5!#	#5!#33+uu?jkk\kk,j  \  ?  m@#		M	b	 	

 991 /0KSXY"]@  	 
    O
] ]35!#!!53\{^LzHZH      $@ss q 1 0!!!!/jj      B  *@  M b /991 0KSXY"#m  o  @ss q 991 0!5!!5o/jNj       @
 b91 290	#	#}-     m    /1 0!5  mPP     sd  v 1 0 K	TKT[X     @878YKTKT[KT[KT[KT[KT[X     @878YKTX  @   878Y	#oudx     fD 
 ( ~@/! z!#&`z !-", '"*)22991 /99990@$*o*x(*z(]]5#"3263!5#"&5463!54&#"#5>32/퉆ts=kn_`VNvzojsJFIydb))     ;  ! G@%! zq z`5,' 0"2221 /990#]7#5!>32#"&'!532654&#"i6{{6ij@jmd__djuʿ   fD  5@ 	`- *1 0o]#" 5 32#.#"3267'ްeekw?3 1/0|}    f  ! O@& zq z`,', 5
*"<<1 /990@	 ####]%3!5#"5432#5!54&#"32636{{6fjjd_76_d)ji    fVD   N@z  `	 *21 90@ @ ]]!32673#" 54 32 .#"V碞y, }34ױ     J  q  q@& 
z qz	- ' 6,0<2<91 /222990]KTX     @878Y` `?] ]#.#"!!3!53#5354632qaSOgT)CBKNqkjjRk   f9D  , f@3,  ) z)#`-	-, ' 5&7*-221 99990@	 ....]#"&'53326=#"54325!4&#"32653iX`}6{{6h[&&h`ďd_76_dk    J    o@,
zqz
 =,,':,' ,021 /<299990/]KTX     @878Y353#5!>323!534&#"3Th3l_zj@jVlnjj Ïj     J  `   I@	zz ,',021 /20]KTX     @878Y4632#"&3!53#5!C/.CB//C갰hq.DD./BB(jjRk ;9   i@"		z- 6',01 990/ ` p ]KTX     @878Yss ]4632#"&#5!#"&'533265C/.CA0/C-fëH>_UR[Wq.DD./BBzkq!!`Z{   ;   @X					>>M	zzqz 	
  ,',0<9991 /<2290KSX9Y"]@		&))899HVWggghw	
 	
(	(
(&)-**+,)/666959?F	DDDEY	X
XWVVVh	ffgegaabef`x	x
xzxxvz	
T] ])53#5!#5!#	3!533Jij@jkkjj    ;  R 	 @@zq z, ',0
21 /20]KTX 
  
 
 @878Y%3!53#5!鱱ijjj@j   J  ^D 0 @A + 'z)%!z.#	 
=", ,'?=',?(,* '$,&01291 /<<222990@?2_2o222]KTX 1  1 1 @878Y@/
///
2	]>323!534&#"3!534&#"3!53#5!>32%5n`o{`o{h3d|Xuwjj%jj,jjTijp{  J  D  p@.
zz
 =,,':,' ,021 /<290/]KTX     @878Y353#5!>323!534&#"3Th3l`yjRklnjj Ñj     fjD   +@ `D	*1 0 o]%2654&#"" 54 32  hFc32    ;VD  # U@, z"z 
` $, 5!, '0$2221 2990%%]32654&#"'#5!>32#"&'3!53i6{{6Hiʵkd__dkk  fVD  # S@+#  
 zz
`$,', 5*$2<<1 2990%%]3!53#"54325!4&#"326536{{6hkkd_76_dk     J  D  @"	 z 	z
- ,',021 /2990@8 /@ @@@@@D@@@    ]]KTX     @878Y#.#"3!53#5!>32jNKͦh6z-c)ONjjTiok   sD ) @A#"$!> >M ! ''`* !->'F$- E*99991 90KSX99Y" +]@X'' '!'"'#Z
ZZZZZ Z!Z"X# !"# !"# !"#@++] ]75332654&/.54632#.#"#"&sj|_{ֽTcjutwZg;wv]YFV1-,f,*gtRRCQ*-/o,     ;'q  h@
  z`,	' /<291 <2990KTX  @   878Y@&&/
]#533!!32673#"&5ݢZ4FHBkJk]LU_   7'  u@"	z 	` ,',:,'/<1 /<2299990KTX  @   878Y]KTX     @878Y!3!5#"&5#5!3265#X3k__z'Cjjo9k     '  @9
	>  > M z
 	 	91 /<290KSX22Y"
]@H' Scv		
% ***	*
*8 0H GGW Xg hvvwxx	x
x] ]!#5!#	#5!#yy++wykk%kkD   !  ' @[
	

>
  	>  >>M
z 
	 91 /<<<290KSX22Y"`]@
$,
(3=
9DJ
IW
^di
itz
z
 	

 	
& ()	&
#**%&: ;??????:;	9
;88:9F EEE	F
FIHHHHHFQ PPPPPPPPP	R
TXVSPb ``dd`````	b
dfb`u xy}}yyyz@y	v
quvvvwwwtw	
x] ]	#5!##	##5!#vęw'kkDkk->     j' @g>>   > >M zz
 	91 /<2<290KSX2222Y"KTKT[X     @878Y@ 
 % *G IW WYXf fhhyy 
			( ),,%%('&&&))'9?9?H IGFGZYYYWYWUVVVVjjjghhhgefx ||||ywttttxvuuu [] ]#5!#	3!533!53	#5!#TߏLl%3kkw7jj>jjkk  9' @Y 
	>	>M 	z
	 -9991 <29990KSX229Y"]@ZYix))*
*''&XSUPUPSV
Vhd``dv wx~~tty	xxyuuvvvv(] ]7#5!#	#5!##"&'53326Fsy++w2zo/c2^9<7Cñkk%kkT|[D;=   R  '  j@"	>>	M	z	z 	
-
- 991 /0KSXY"KTKT[X     @878Yif	]35!#!!53RjffBkVf#V    $ ^@0!	 !	s ssq!
	%$   '%<29991 /999999990#"&54&+5326546;#"3>l==l>DVdbVititݓhXឈ"X       G1 0#     $ [@/ s s#sq %'%<29991 /9999999903265467.54&+532;#"+ FUbcUF?l>>l?W"Whtitݔ   '  >@   91 9999990#"/&'&#"5>32326d]`
_\Yd^`
a\'XTB	9IMWQB:J !}   $@	ab  1 04632#"&53L97NN79LC{D8MN78NN5     PL  " I@'
 
`# 	
-"
#22221 2<2<0%#&54 73#.'>7u#d d\PjsdZt,+
.'{il       d  L@( 
s eis	
 
I<2291 /22990#.#"!!!53!53#534632Ni
q`ydt%UK_ekjRk'    h \ # / o@=	- '!
0-!-'!0 *$0*	$
$*099999991 999999907'#"&''7.5467'7>324&#"326^+))-`8wE@}=_))*,_8xEBzQrpqq^<zBEv9^,*))^>z@Fw9^,*(ppr     $K@]ddM
s ssb"s #	% #I! I%<<9999991 /22<22<290KSX22Y"]@6iih
89969::9FKMMKKJ@@BBFIXVYYYYgegggffgjhohojjhuy||yzF] ]!53!5!5'!5!#5!#	#5!#!!!!3hlR)WSGmjoiAikk\kkizTij      @  G<21 0##
 
     \=  A k@; 39(',o$o?i$B 3/9)'J</J!	J!'J<6B99991 990>54&#.#"#"&'532654'&'.5467.54632{D7k :;\hXds}irNI̭ZM\lkhy~vmROȦN.S5&`9KHSaSamc_~,/~[PQbTqzc^1~O    77!   z@
 	1 <20 K
TKT[KT[KT[X  @   878YKTKT[KT[X     @878YKTX     878Y2#"&546!2#"&546=0EB32BE/EB23BE!E03BB30EE03BB30E       2 J M@+	 	?	3?' REK!Q9K!M-K1 /90#"&54632#.#"32672#"$'&5476$"3267>54&'.`PWTriwyxvaqmmllmmmmllmm^]__]^⃄^]]^\^=%'mf_cnmmmmnnmmmmng^^]僂^^__^]⃅]^^   }  ( , q@< &+))&i-) #* #Y #Y-2299991 999903#5#"&546;54&#"#5>325#"326!!FP0}WtiWfLMBilea\oFTP30pr-T^FEPNQUah      %#   :@
 	 Z
Z	<21 <222<220	5	5%)+#)+#ssRssR     ^  @r  1 0!#!^  ZZs    1 0!!Z  s       $ < T @TNNM	 1%=1I7""	P NPN"L7KCL+KCMOU2<99999991 /2<229990KSX9Y"32654&+3#'.+3!53#5!2"3267>54&'.'2#"$'&5476$}SSTR}*;tL#>1\TSS`׃^]__]^⃄^]]^\^ㄘmmllmmmmllmmLKJL3(DF/DDCpmS[j^^]僂^^__^]⃅]^^gnmmmmnnmmmmn    b+  (  1 0KTX     @878Y!!V    u=   @ i	1 0"32654&'2#"&546 LhgMLhjJ@v+..fiMLfgKKk1.-rB        *@r 	r 
<2<21 /<<0!!#!5!!!1Ϡ1yy    Z  k@6
	M
  h
 \ 99991 99990KSX9Y"#5>32!53!5%>54&#"FBEJVJaTN^ "hzlKMzBUcL  d * R@, &	)&h+ 	#) #\\ +99991 9990>32#"&'532654&+532654&#"#}I;j_wyHDFb\^ffe5acQLRWFlcHdwdrzJMXR]_JJJCH@A  Rf  O 1 0 K	TKT[X     @878YKTKT[KT[X     @878Y3#uf   ;V'  @3	zz z	` , ,',:,'0 2<91 /<2299990!]KTX   @     878Y!]!3!5#"&'3!53#5!3265#X4Z9^'鱦^`y'Ahjo$$kkk   ;  -@
o b 				91 2290!####.54$yvkkk/Nݸ   BL  	a  1 04632#"&M97NN79M8MN78ML   #u    "@	
 	 	991 /90!#"&'532654&'B@?~p*X.)O#9B,,@p1QY5-X<    
 ?@M h	\ 1 2990KSXY"535733fTzj^T     ^d    ,@ i	Y	Y991 02654&#""&54632!!jklihmliԯP-Lװױbh     H#   :@ 
	Z Z
<<1 <222<220	5	%5	s+)N+(#^R^sXXs^R^sXX  'd& {  5   ?& {  '5   td d'd& u  5    p}  " 8@a	!e	#  !#1 0#"&54632#"$54675332673
M87NN79LjU{~q`8NN87NM/.ֶ3+ʜ{   k& $  ~u  k& $  |u  k& $  u  ^& $  }u  \& $  {u   m   ) @add)('d&d%"#$M	%o	f'#o!$ ('&*%"   *99999991 /<29990KSX22Y" ]@:/ /   /&)"!   ///..)(%'&+/]]4&#"326!	53.546323!53!3wY?@WW@?Y#"HHKrrNH}}Z?YWA?XXj%zSrrP#jjHj     # @U dd
	ddMo !ob 	o~
	 $ "$$<22991 /<2220KSX2Y" ]@          ! " #0%O%o%%]!#53!3!53#5!#5!!53#5!!53dZ昤XN{P{{{MjHjj k   su& &   zL   q  3k& (  ~u q  3k& (  |u q  3k& (  u q  3\& (  {u q  k& ,  ~u q  k& ,  |u W  k& ,  u _  \& ,  {u  q     M@%	ob o
 $ !<2299991 /22<200]%3   !#!!53#53#5!   !#8ܼPyȾRPjL66H}1je}kvt d^& 1  }u sk& 2  ~Hu sk& 2  |Hu sk& 2  Hu s^& 2  }Hu s\& 2  {Hu  D  /@
 	
	 <291 <290		'	7	1s33r4rP13p4pq3    d' 	  + s@:,+&
	  )*&nn&i`,,#* #
	 )+#%,999999991 99990_-o--].#"324&'7 !"&''7&5 !27A| "5@}!"{WWoeNWUC`PXVwQ`YYQJuRlSVVEiZUSG    `bk& 8  ~u `bk& 8  |u `bk& 8  u `b\& 8  {u  Zk& <  |u  q     M@&o oob
o	# 	$ !222299991 /220_]!2654&#!53#5!#!2#!3wp9j kkj   ; 3 @;-.# z#"'q`	z *-. $-">1 '*'"',
04999991 /99990@D	--./5``o55      /01 2 3 -/0123]].#"!534632#"#"&'5332654&/.546wz6IYwUOmofoPuVhYwZj8l]4M/7cr%#eiyhTuI6ARz    fd& D   C9    ff& D   v9    ff& D  9    f7& D  9    f!& D   j9    f& D  9     fD 
 8 ? @G ,2*$29z*z2/*<'!6`@$+ -?+ 23 9**@2299991 2<2999990@(AoA*+,9?]]5#"326#"&5463!54&#"#5>32>32 !32673#"&.#"/퉆tsmS}t_`V7Ju衟y+z\NvzoF[XIxcc))WZXY}[,    fuD& F   zd    fVd& H   C^    fVf& H   v^    fVf& H  ^    fV!& H   j^     `d&    CH   J  f&    vH   	  f&   H     !&    jH    fj  - a@3-,+'$#"!(	`(q.-,#"!'($+D*.999999991 99990 /o/].#"32654& #" 54 32.''%.'7%5-Q(/l#K4I2%%=_w\B%		pاy/"5k7N:QV^DN J  7& Q      fjd& R   Ch    fjf& R   vh    fjf& R  h    fj7& R  h    fj!& R   jh      y    '@a	ar	  <<1 04632#"&4632#"&!!M87NN79LM87NN79L8MN78MLU8NN87NM    L} 	  + @?+*&
	  )*&&`,,#* #
	 )#+D#*,999999991 99990@
 -o-w x]].#"32654&'7 #"&''7.54 327H&pJ-(oJw>@^CL=>^@Lo99Hv1g=;Ly3Jv56?Ms232?    7d& X   CH    7f& X   vH    7f& X  H    7!& X   jH   9f& \   vD     ;V  # S@+ 
"z zq` $, 5!, '0$2221 299990%]32654&#"#5!>32#"&'3!53i6{{6Hijmd__dkk9!& \   jD     1' q ; $   f& q#  D      i' ! $   f-&S D    w'   $   fwD'b   D   sk& &  |5u ff& F   v^    sk'=u &   ff&h  F     s^'=u &   f!&h  F     sk& &  5u ff& F  ^    q  k& '  u f& G  zZ q       f  ) d@2! z!'zq z`$,', 5$
**<2<91 /<2990@	 ++++]%3!5#"5432!5!5#5!3#54&#"32636{{6Ffjjd_76_dJjujji    q  32' q < (   fV& q^ H     q  3m'u (   fVH&^  H     q  3^'u (   fV!&^  H     qw3'q   (   fwVD'   H   q  3k& (  5u fVf& H  ^    sk'Xu *   f9f&\  J     sm& *  3u f9H& J      s^'Xu *   f9!&\  J     s6'  *   f9'\  J   q  k'}u +    k'u K    q    ' @ $&$$"$$
!(<2222<2222221@# ob%!o ~ /<2<2@

9/<<220@	 )p)))]!5!53#535#5!#!5#5!#3#3!53!3wGGfjzkkkkz?jj~j    J   % @=$,
,':,"
' ,0&<2221@"z	q#z  /<29999@z	9/<20/''']KTX &  & & @878Y353#535#5!!!>323!534&#"3Th<3l_zjPzvjzlnjj Ïj   J  ^'}u ,    7'G      i  2' q< ,    `' q      ]  m'u ,     H'G      qw& ,      Jw`& L      q  ^& ,  u  J  `' 	 @@z z, ',0
21 /20]KTX 
  
 
 @878Y%3!53#5!갰hjjjRk  qV& ,   -4   @"!1   J9& L   MH   @6%1   TVk'u -  ;9Ef'     qS't  .   ;S'  N    ;  $ @X					>>M	zzz 	
  ,',0<9991 /<2290KSX9Y"]@		&))899HVWggghw	
 	
(	(
(&)-**+,)/666959?F	DDDEY	X
XWVVVh	ffgegaabef`x	x
xzxxvz	
T] ])53#5!#5!#	3!533JijOkkkjj   q  m'|fw /   ;  Rl'|v O   qS'  /   ;XR'0 $ O   q  'zn /   ;  X'z O   q  ' y(  /   ;  E' y| } O    V  )  Q@-o	bo 
 
$ $!<2299991 /290353'7#5!#%!53{FF3F{jq\kk\   -  {  a@% 
zq z , ',	0<2<9991 /290P]KTX     @878Y%3!53'7#5!7ꮊ=Ǯf<jjj>`VjbV dl'|jv 1   J  6& vK Q     dE'  1   JSD'  Q   du& 1  g J  f& Q  ^    q  }&~  Q    `V ' M@ $%!(221 @$%!dn ob !
i%o /2 90353#5!>32#"&'5332765&#"3`{JGIp[Xu1/Ѿkkrt""caKI@$k   J9JD ( l@',':,%' ,0)261@%"
z'z
  /29 0ss ]@/*`****]353#5!>32#"&'53327654&#"3Th3lUSëH>_UR[++`yjRklnec!!`Z><Ñj   s2' qH< 2   fj& qh  R     sm'Hu 2   fjH&h  R     sk'Hu 2   fjf'    R    w  u  ! ^@0 ob o~	
  	%"2299991 /0 #0#]%#   !!   )#5!!53#5!!53q7#3P{Ryy{j jb_     fD  , 3 k@/'- -z 0*$`4'3-	!*42991 2<2<9990@P5-3]]%2654&#"!32673#"&'#" 54 32>32 .#"h碞y,IEςFIzF}ba`c32c``cױ   q  7l'|v 5   J  6& vK U     qS7'  5   JSD'4  U   q  7k& 5  u J  f& U  4    l'|v 6   s6& vK V     k'u 6   sf&  V     u& 6   z    suD& V   z    k& 6  u sf& V      uB' z    7   ;u'q& z  W       Bk& 7  u ;'M& W  z    B  @
$ $
<<1@o 	obo  /2<2<20K	TX  @   878Y]KTKT[X     @878Y@/`]!53!5!!#!#5!!!3PI{.{IPje}`}j  ;'q   #535#533!!!!32673#"&ݢZZ4FHBOkkJkkLU_   `b^'}u 8   77&H  X     `b2' qa< 8   7& qx  X     `bm'u 8   7H&H  X     `bm&  m g 7& X  U   `bk'u 8   7f&r  X     `gb& 8  h 7w)'& X  h   
  3r'| :   !  f'p   Z    Zr'| <  9f&<  \      Z\& <  {u \  ?l'|v =   R  6& vK ]     \  ?^'u =   R  &< ]     \  ?k& =  u R  f& ]       J  q  i@-'6,	0<21@
zq z /2990]KTX     @878Y``?] ]%3!53#5354632#.#"CBaSOg**jjjRkKN8;    ;  (  7#535#5!!!>32#"&'!532654&#"찰h<6{{6ijPzvjzd__djuʿ    @  d  ( 2  "#6763!2)53327654'&+!2654'&#!/DGfsb#tsOPabNLKKk+SRjY[XL$]\OOabj??+> ON   q  d|    ;  +  327654'&#"#5!67632#"'&'!53#5JIHIIHIJPi6TS{||{ST6edqqppeed/0/0dj@j    q  d    %!2654&#!	3 )53#+w|bNjVvjv   ;     32654&#">32#"&'!53#56{{6ʿmd__dj~    s  4@%	&' 1 @n idn`06$32 !"$'332#"sB7apmnzq%0HdapU@AXSIHS   s9^ 6  #"&'&'&576!247632#4'&#"#&'&#"32767Bap67IzcmQKrHBA>_2*R[Vq%op{{{{ll0lkdap\ (W:<!`--zYYPO    f 1  #"'&5763267632#4'&#"#&'&#"3267'ް荍ed12R<|HAB>_1+R[,*kFGLLKLw? H5!`--==@@st4tt|}  q      @      "#6763!  )5; 76 !#/DG^wP˺#ܺjY[Xg	tjlH     q  d 	   %!"3#3! $5476!3!#յSRNb|S{jNMkk jސvL     ;  +  54'&#"3276!#3!5#"'&32!#OIJIHHIJI6ST{||{TS6iieeppqqdejjd0/60/d    fjD & 2  %#"'&'57276'4'&#"'&7632" 76&bB!&bb6hhplHHEI%Mb鍌荍?ɔLKKL(LK18DCY.-14B_ KCuu8uttu  q  3   )3!!#3!!#!#33>{{{R{LqLk    s ! *  "#6763  #"'&'&'&=!'&!3276Sll0BE77pc}~ap67{}#|}}|OPklVpb2122apG1ܜ  } ( H@! '$%)91 @!eet ee'i`)90#.#";#"32673#"$5467.546!2{p2_۴&˸~j9iѫ    5V7   "'533276'#5!#5!!53#5!Xrw/0{>{{]VDKM9k=c7   ;q /  #4'&'&#"!!#"&'5332765#53547632qa	*Og**)\]CBa	*Og**\]CB.'89k1[[.'98k[[     sM^ 0  "#5'&# 327!5!! '&76!267632#4'&@}$q4QjLSeY=@}|_nv6PDnpkӚ_bTM9<Bۓ	  Dd    	#5!#	#5!# ! 54 !254fLP@Iul<A8kkkk-Yrl   J 9  353#5!6763227654'&'53#"'&54'&#"3Th3QRlQS*+\}p[==vpYZ*+QH^_ji]/0zj@jVl77eg<<kgf.;@o`bJC#$eSGHj   q     ;#"'&5#5!#*,[>uG_<=c6ekk   g     %3!53#53#5!#3#ȾGjjje}kk}     q   !  632#4'&'"	3!3!53#5!#}|CAG9_1%=WKͪ<Gj`-&<3jjj kk  F   (  	#5!#	3!533!5347632#4'&#"baM=A>_2*R[++kkjjjjK_^!`--=;    ;  R   53#5!3#3!53<ijpj&jjjf    T   '  &'&#"#56763273!53	3!53''%%"#5<^212/o==2<wqŪy&= \D.-|bVskk"kkcV  J^ 3  %#"'&5#5!#32765#5!#32765#5!#3!5#"&5nSR`o{@A`o{A@3d|uwggjj+]^jj$]^jjijp{  3V   533265#5!#5!###"'&r/,Xw^yEIJc019kf/kky]  JVD  q@/
zz
 =,,':,' ,021 /290/]KTX     @878Y353#5!>323!534&#"3Th3l`yjRklnjjÑj    s   '  "&'&7>3  '276!'&#"HapmmpbE77pc}~}s	#	s}o}}odapjpbcVpb21k$ܜ  nP& 2  c+D& R     s + 7  "&'&7>32676323!534&#"'2#"Hapmmpb̚==IGƾ^wX,77pc}~dapjpbcT(kkږ0pb21kQJKQ    fV9D  '  476323!534&#" #"  3226& e-AHðW[A鐐ؗ	kk{328    @    #  !2#!3!53"#676!27654&#!/DGbs-NNqrjj Y[XI'#PQ    ;V  8  327654'&#"47632#4'&#"67632#"'&'3!53JIHIIHIJabCFB>_1+R[,*6TS{||{ST6HiedqqppeeT\]!`--><d/0/0dkk     q7 ! )  #5!#!23!&'&+3!53!26&#!/\lF32(ٶD78b'jkkп-.REjۋ')jjr,      2  %# $5476?>54'&#"#67632327673ӄ{VW˹|RSXYq||hWXŶ98^]^]sH3ٟ_^=7<zk{@AGF>+ҾaaA;7::lGFRQ     sD 1  %#"'&5476?67654'&#"#5>32327673bgtsCB--<;tujcT>=0/AA|GFj;,,WVoFG/-*)(CR))tg*,fBB,-1++FY/.;;w   S     ;9 	 0  "!276'&6=3327673#"'&7&"# 76!275.dzYl;+[R+*_>ABHaxwfAk{_H>~=_@@VmQ>.,`"]s]=  ;9'q '  #533!!32673#"&'533276=#"&5ݢZ4FHBëH>_UR[,*0>kJk]LU_!!`Z><W    W  B   !#5!3!53"#676F{IEFfxjjY[dL$     ;T +  !!327673#"'&5#53547632#4'&#"Z4FH!!OGBBbaM=A>_2*R[++'k]L*+_CCGFk_^!`--=;    VB   #"&7!#!#5!327673
IIJGI{.{I/-yX,,r"5`NK10c   Zk& 8 * ,A& X '    }' (   764'5!!#"$'&'&547!5UՉV9;mc  bo::ۈkg骩[hkkd[``[gTk     q   $  !'&5#5!#764'&'53KuG*֑\Xlj}9;mciAekk}B/	rSٗd[0'     c   %3!53#5!#	632#&'&#"3+uuCFB>_*+R~3gjjjkk\k!`--Hl  9M= %  	#"&'53326?#5!#	>32#.#"L2zo/c2^9<7C%Fsy+
2zo/c2^9<7C9|[D;=\kk%|[D;=    \  ?   35!5!!#!!!!53\y{cG_ULzH}ZH}   R  '   35#53!#!3!!53R!'jfBkVzj#Vij  fI #  #5!#!!"'&'3327654'&_X{iOfeuopnp
YX[[TfZ}Cyx}|9Ddcfe   fI #  "32673# '&5476?5!#5![[XY
pnpouefOi{XTefŬcd9|}xy}`f   f6I' #  "32673# '&5476?5!#5![[XY
pnpouefOfjJefŬcd9|}xyVݸQf   6.'   #5!#! 73 54$54_Jjf/,_xf#V'guښԸ    b $  #>323#!53!567!5!654&#"pkhV8K$ou=S8+$<q
9<t}EJ#mSK}z  q    !"&'332654&#!#5!#5!32cunp
={ǆUH23"tk     '6I' $  !"'&'3327654'&#!#5!#5!feuopnp
YX[[ȱiyx}|9Ddcfeia    lq %  33##"'&'53327654'&+#53rRbbaHBA>_+*R[++++[tqjM^]]"`,.><<>j    ;V{    6!23!53#5! 4&#"鱱iGxx:Kkkkp       #+    '           !5!3!!!!#!5!ssssS Ѣ            %#5#9c   q  k'?j   '   q  
Vf'@j   '   f	f'@   G   qV'' -P   /   q9' MP   /   ;9A' M   O   dV	' -    1   d9' M    1   J9' M'   Q    k& $  u ff& D  8    V  k& ,  u   f&   G   sk& 2  Gu fjf& R  g    `bk& 8  u 7f& X  G    `b3'    8   7' X   `bZ& 8      7>' X   `bX& 8      7<' X   `bZ'    8   7>' X   fVD    3&'  $     f'} D    3&&  $     f'} D    1' q;    f' q       s &  .#  32675!5!5!5!3##   !2#q]DɅͯiY88xkkkMM_b;<    9D  0 8  4&#"3265#"54325!#3#"&'5#5!6532767{6{{6hG~iX}L#fưZV*iZk[%#khF|&&k"&h`\+A   sk'Yu *   f9f'\   J   q  k'Gu .     'K N   sg'L 2   fgjD&l R     sg2' qH<   fgj& qh      fIk'Kuy   f6If& T    ;9f&  G   q  ' =j   '   q  
V' ]j   '   f	' ]   G   sk'|Uu *   f9f'\   J    q +  5!3!53#5!#!#5!#3276#5!# '& GG]^FJfR~jj kkkkqqqvUl+    qV7     4&#"56!23!53#5!oy+Ƨ'$jjk    dk'~su 1   J  d'R   Q     k   0  '!4&#"3233!53!3!53&'&54767"$GY?@WW@?@3P'$}}\#%P?TeW~YWA?XO2QrP?&jjHjjw%=SrQ?     fk 
 ( 6 B  5#"3263!5#"&5463!54&#"#5>323"&47674&#"326/퉆ts=kn_`VŸ1)OOHdX@AWWA@XNvzojsJFIydb))(P栠PG?XW@AWX     k'|u    fk'     d'k'|Iu    L}f'       k'u $   ff'9   D    m'u $   fH'9   D   q  3k'u (   fVf'^   H   q  3m'u (   fVH'^   H    k'u ,    `f&   E   _  m'u ,     H'H      sk'6u 2   fjf'h   R   sm'Hu 2   fjH'h   R   q  7k'u 5   J  f'(   U   q  7m'u 5   J  H'(   U   `bk'tu 8   7f'H   X   `bm'u 8   7H'H   X   4& 6     s4D& V      4B& 7     ;4'q& W      Rs "  $  56$6'&57676.#<n
x`FweL_QqoMqIsEGyRql{Ig8
gg     GO> %  #6$56$764'&576764&#"2gkZ l|-ImT>atVMXiC+C	?Q٦!d+gP9X>PdV0g^m q  k'u +     'K K    `Vb   353#5!>323!53&#"3`{JѾkkrt'kk$k     fj` 	  9   54!"54&#"3262; !"'&'#767#"32#5!]5.퓌	fAdT{{6f3k{_H>i]=G=_@@B6
/76_d)j     RZ  !  654#5 ! 4%$5" 4%2Xe	Da+itaȓs멝bB*     f     % 4%4'7 %&54765;p,b'SyQF4ҩ`;ہi4ml     \?   35!#!!3'6767\{^P^,
HZHZPE^=O  Rp'   35!#!!3'6767RjffP^, 	Vf#VZPE]EY  ^'u $   f!'9   D   qu3'   (   fuVD'S   H   s3'    2   fj' R   s3'    2   fj' R   s\'Hs 2   fj &h R     s3'    2   fj' R    Z2' q < <  9& q<  \      ;%     %354'632!"'#767'&5#5!Do$k	rni^m|iG UeOj    J%D  4  %3544&#"3!53#5!>32632!"'#767'&5Do`yh3l$k	ro^m|@ÑjjRkln֐WG UeO   ;%q  &  %354632!"'#767'&5#533!Do$k	roZ^m|XiG UeOkJk   ;9'  U@-

6', 01@ 
 z 990/`p]KTX  @8Yss ]#5!#"&'533265fëH>_UR[Wkq!!`Z{   fG   7  54&#"326732654&#"5#"32#5!>32#"&'{6{{6i6{{6iʿd_76_d)jmd__d     fVGD  0 =  4&#"326553>32#"&';#!53#"3232654&#"{6{{66{{6Hkk;d__dkkd_76_di        "  #5373	3!53!3!'7#;!c7P5N}*4@VHNdj=.hGjjHj99V:  . $ .  '7&'&5 !27#&'32673#"&/7&'&#"|N:#7IzgsuPvq{0Ba=p9EO[\ *GJ;daqY    %V   *  '7&5 327#&'32673#"'7&'&#"qLhed99gL\k	 		Lw'ްчAG^?ɐ 1{?n9-t|}|N@v    g     353#53#5!#!!!53qȾGP{je}kk}      )53'!#!7#53!N|I{3PJ{IsjE`9GR y_J    s9D ?  32673#"'&/&'&'5332654&/.54632#.#"#"'J*P+9^2c=>]2O j|_{ֽTcjutwZ76!];D(<sC	wv]YFV1-,f,*gtRRCQ*-/o     R97'    !#5!#!3232673#"'&/&(jff0m#/)+9^2c=g>^1(>Vf#VIa;D(<s^  L  b    "#5>3!2#0#3!5332654&#VU$+`>H&0ʕk&,`" jj     L  mD    27654'&#"#5>;23!53VNNNNU$+`>H1ZgQPQP&,`" rqrMjj    g  d   ,  353#53#5!2!32654&+!2654&#!!!qȾ埙+Nj}|kä^~} }  Vl  #  #5!#!#5!#3#   5#53! 6H@
ʻjkkkk}}S}}}i        q3D  " &  !#5#353#5#!53!'7!53#5!#7!e{{{O{#e8QxD Oo Oj kpz   fV  % , 3  &'&''7&'&54 327!32673#"&#"3#}Hc_O>72_dE)7Gy,K#' Qj^bf%D4ea$P\}jn   TV   533265#53#5!#3##"&rXXw^qGca}kk}Z";9`&  !      sV#  >  %2>=4.#"25!#32673#"&=#"'&4$l\++\k[Y8,/<6C2C{^wXXrIGAf^N[ՅԨ[CtwffD2ttkږac""/IH'[_     f9D  +  54&#"326#"325!#32673#"&5{6{{6hV[RU_9Hiyd_76_dk܃yZ`#     g  7  )  !26&#!3!&'&+3!53#53#5!2'G22(ٶD78bȾ!,{.-REjۋ((jjLkIkп    J  D    #.#"!!3!53#53#5!>32jNK#ͦh6z-c)ONjjjfjiok      Z     !53!5!'#5!#!7#5!#!!3!z+zzz@jzkkkkzkj+   9' & )  7#53'#5!#!7#5!#3#'"&'53326!FXyXXwX3<=o/c2^9<7Cvñjkkkkj~,.D;=g   fD  ,  32654&#"#5!>32#!32673#"'&퉆tsGF\=kJIn_`[ZVstvzoGGD.jsJFIyCBdb)mn   fD  ! O@& z z`',, 5
*"<<1 /990@	 ####]%3!5#"54325!#54&#"32636{{6hkkd_76_dk#i     fD  '  %!53#5!67632#"'&327654'&#"h6TS{|}{ST6JIIHHIIJkRjd/0/0ieeppqqed     ; ' 8  67632#"'&'!53547632#&'&#"327654'&#"6TS{||{ST6baHBA>_+*R[++JIHIIHIJEd/0/0djc]^!`--=;*edqqppee   fD   A@	  -!԰	KT
KT[X 8Y1 @ `!0>32#"'&'3327654'&#"f'ް荍eddekGFLLLKw課0@@sttt|}    f%D  .  %546! !"'#767&'&57632#&'&#"C
ڴ}	k	r
	eddekFGLL\m}G UeO
	 0@@st    f9 ' 8  327673#"'&=#"'&32#5!54'&#"32764*,[R+*_>BAHba6ST{}|{TS6fIJHIIHJIh<>--`!]^&d0/60/d)jieeppqqde     f % 6  47632#&'&#"3!5#"'&3254'&#"3276zbaHBA>_+*R[++6ST{}|{TR7IJHIIHJI4]^!`--=;jd0/60/ieeppqqde    fVD  !  7632 #"'&'33276=%!.#"fwv,MNyQQ@HI XX}?@nmj_^    fVD  !  !54'&#"#67632 #"'&73267fQQyNM,vw鍎IH'nm?@}XX̕_^  x:D - 9  #"'&' #"'&'&'&#"#67632%332327654KM/_q`T)e!QyNL ,vwrAER@HBAN0]Qk̕vp>,m?>XX!%=;>+eU^_\;     e2 0 s@)
!  )*1KSKQZX  8Y/3<91 @-z%!%
%`19/90@p2`P!@2 2]`2P2@2q47632#.#"!3#"32673#"'&74767&'&bb6hhpl^]\MJ5Wt
ljlhP{ziGxR6f*DCYZi><tO2Rjf$OON6#C   h2 2  "#567632'"'&'53327654'&+53 54^HHlphh6bbf6RxGgy}Phlgi^TtW5JM\]-.YCDC#6NOP$f55R2Ot<>i   e2 D  "'56763273327#&'&''"'&'53327654'&+53 54^HHlphh6b[rBDRj-J-#6Ws_S6RxGgz}Oiljl
tW5JM\]-.YC?u=;>-N&\Q#6NOP$fjR2Ot<>i    fD  #  %2654&+532654&# !2# ls&&qnqfԗjhFm`ijcjb_m320`gNM    ;9`'   #5!3##"&'533265#53fëH>_UR[WkjȤ!!`Z{8j  f9  :  !"3265#"&'53326=#"543!547632#&'&#"{~~iX`}6{XabHAB>_*+R[,*Htp|}&&h`ďd_76]^!`--=<    f9'  '  !##"&'53326=#"54!"3265#iX`}6{'k[&&h`ďd_76!t    f(D   .#"32675#5!#" 5 32bx,}RoeՌ4)jxF@3 1/0    8'  $    '&54	#5!##5!#327676:t_\R4) Y!56&(N@gAk	kkakk7!6/!:     B & 6  626;2#54+"#"'&54767#"#327654'&'X0i/D_;a*jp1O@q1)f3-SZ:%8,NY/2E9K/ߚ|xN+kk.Pf}W);A*&@fr|     7V'   3#"&5#5!3265#5!3%Ǯ3k__zXjo9kkj   T   /  676323!534'&#"3!53547632#&'&#"3PRl/0zbaHBA>_+*R[++jl77jj GHjjc]^!`--=9  T9J ?  67632#"'&'533276=4'&#"3!53547632#&'&#"3PRlbaHBA>_+*R[++/0zbaHBA>_+*R[++jl77^]!`--><GHjjc]^!`--=;    J  `&        J  c'   #5!3"'&h*,[b]_]k8<=c^Y  J  `'  D@z z
, ',0221 /220]KTX     @878Y%3!53#5!#갰jjjRkg   I   (  %3!53&'&#"#67632#5!32673#"'*`33[i+0`33[jjj~('LJI;jPKJI    J  s    %3!53$'&72#5!3#'&W;iH;jjjj8dj ccri   ;9b   #5!327673#"'&5i*,[R+*_>BAHbaj<>--`!]^	     ;6g ,  #5!3!53#5!!!"'&'3327654'&._Jf鱱ibOreuopnp
YX[[ffjj@jVx}|9Ddcfe    7K' *  %#"&5#5!3265#5!3265#5!3!5#"&p5n^`o{X`o{X3d|uw:jqjjjBijp{    7VK' ,  %#"&5#5!3265#5!3265#5!3!53#"&p5n^`o{X`o{X3d|uw:jqjjjkkjp{   J9D D  #"'&'53327654&#"3!534'&#"3!53#5!>3267632abHAB>_*+R[,*`o{@A00o{A@h3d|SS5RSnRRh^]!`--><]]jj,CD]]jjTijp>=qu;<hgw  ;9D .  #"'&'5332765#5!676323!534'&#"baHBA>_+*R[++h3RQl00yCCh^]!`--><$kl77jj IH^]   J9D .  4'&#"3!53#5!67632327673#"'&500yCCh3QRlUS*,[R+*_>BAHbajIH^]jjRkl77ec<>--`!]^   E'   353#5!#5!##3E]:ǦzjRkkk'Z-j    fjD     %2767!!&'& "'&76 hL?

@LTELLE%荍ҍFuccujuujᙚ    f  '  &  &7!  5476)#7!!'3#7!!53ʶmhhf,.3̙_a V__auppo	R	M|{`     f,D  &  32654 #" 326=  #"&'#"5 r\_ӄ_\r[cvv($(3SS1G    fV"   #  3!53"  3#5!#2  %"!26&# _Kjj#32bnjc8    J'   332765#5!#3!5#"'&JjNKHI36UUz-21
ON^^jjio65     J   332765#5!#3!5#"'&JjNKKI36UUz-21
ON^[jjio65     J9' +  !5#"'&'332765#5!#32673#"'&'k6UUz-217jNKHI3++\RT^>AAHa]o65
ON^^jj<>Z`!]Z   JXD   #.#"3!53#5!67632jNKIHͦh6UUz-12)ON^^rjjio56   J9D +  #.#"327673#"'&=#5!67632jNKIH*,[R+*_>BAHbah6UUz-12)ON^^<>--`!]^hio56    T  p=   %3!53547632#&'&#"ͥabHAB>_*+R[,*jjj
j^]!`--><j    T  p=   %54'&#"#5676323!5*,[R+*_>BAHbaj
j<>--`!]^jjj   J  '  $  3!.+3!53#5!2%32654&+2@$0PEz`{6lfgk:IjRb:|jjSjf~.eQPb     J  '  $  #!53#5!#3267!#32654&#z{zEP0$@~kgfl~fjSjj|:bRjI:KbPQe    s9D :  332654&/.54632#.#"#"/32673#"&5sj|_{ֽTcjutw-.DBgbW[RU_>H3wv]YFV1-,f,*gtRRC()*-.HFod{Z`!! ;9 '  #"'&'533276'&7632#&'&#"yaHBA>_+*RY-<j_waHBA>_+*R[+;^ht]!`-->Pnr]"`,.>Qmi   ;9q .  3##"&'533265#53+5;54632#.#"ëH>_UR[WCBaSOg**~jȤ!!`Z{8jkKN8;  J9> %  6'&#"#567632327673#"'&?;+[R*+_>ABHa <-YR*+_>ABHahGnQ=--`!^|nP>--`!]}  ;9 	 0  276'&# %# '&!237&7632#&'&#"#54Y.5 AfxaHBA>_*+R[+;lYzd>H_{k~G=]s]"`,.>QmV@@_  ;'D   %3##!5!4&#"#>32Z4FH!!BBkkJkL+*_FG     ;V'q   #533!!327673#"'&5ݢZ4FH!!BBkJkЇL+*_FG     7'  (  !3#3!5#"'&=#53#5!!#!3276X3QQkTS_ߠ!0/zCA'jjj87edMjkHH^\    f' &  !#"&'.5467!5! 7654&'5!噂VPHjkIRUwzZ[&Z[zv@lICGFDKn@kk.pppp.k  Jx' "  3#&'&5#5!7654'&'pYZ*,PH^^ki]h*+\}p[==v@o`cIC#$^S]k8<<kgf.   '   	3!53	3!53y՟qw'Dkk%kk     !  '   !3!533	33!53v<;w>-kkDkk          3!53	3!5367632#&'&#"Fy՟qw2==o/212^<7!"2kk%kk|-.D     T  '   !53#5!#	#5!#3'ڥj1ooXooj     R9'   35!#!!327673#"'&=Rjff*,[R*+_>BAHdaVf#V҃;>--`!]\h  RB'    %254#"!5!#!!2!#?0jff.lcyVf#VEȾ  f6I' #  #5!#!!"'&'3327654'&_JjfOfeuopnp
YX[[f#Vyx}|9Ddcfe   6I' $ ,   '&654'&+5!#!#'7&"2(	/i-[[_JjfOfeq	vLo6V{fef#Vyx}K56{_       35332654&#"#5>32#3tZtZn_`Vrjz¾ydb))j       )53"&54632#.#";3drV`_nZtZtj{))bdyz*         !#2#"&'5332654&+#rV`_nZtZtj))bdyz   9	   4632#.#"32673#"&5ëH>_UR[VV[RU_>H!!`ZyzZ`!!     s   -  47632"'&2#""&'&7>3  " 0." B^ "rapmmpbEnpb.""""./B!!QJKQkdapjpbcVobc I  +'    fD  #  % !";#"!"'&5467.5463 qnq&&shjfFm_bjcji`mMNg`   f +  .#"32675#5!#" 5 3254632#.#"bx,}Rxl¬H>^TR\VՌ4)jxF@3 1!!`Zx   F  '  ;93&x       ;T'   7!#3!533!53	#5!#^@<ljjjJckk$.jj  T  $'   353#5!#!53T4jjSjj   fV ( 9  3!53#"'&32=47632#&'&#"4'&#"3276546ST{}|{TS6abHAB>_*+R[,*IJHIIHJIkkd0/60/dL]^!`--=;eeppqqde     #  353#5332654&#"#5>32#3#3氰tZtZn_`Vrj4j8z¾ydb))jj        #  )53#535"&54632#.#";3#3dꮮrV`_nZtZtj4j))bdyzj   f  % )  54&#"326!!53!5#"32#5!!{ffBk6{{6fyiVզd_76_d)j};   f6 6 C  #5!3!5#"32#5!!!"'&'3327654'&%54&#"326_Ji6{{6feOfeuopnp
YX[[ffjd_76_d)jVyx}|9Ddcfe8i     fB   4 8  54&#"326254#"!3!2!#5!5#"'&32#5!!{?df.6ST{}|{TS6fwiɳcyVDȾd0/60/d)j8    ;  -q 6  #533!!3!2654&/.54632#.#"#!"&5ݢZ4Fc|_{ֽTcjutw-/DBkJk]%6YFV1-,f,*gtRRC(*)-.HFop  ;9C @  #"'&'533276'!32673#"&5#533!&7&7632#&'&#"NxaHBA>_+*RY-<x14FHBGxaHBA>_+*RY-;^hs]!`-->PnC]LU_kJs]"]/.>Qmi    ;Cq  9  %54#"#533!!327&57632#&'&#"6! !"'!"&5D~kZ4FstcckFGLL$}{|x]m{kJk]LS 0/@@stiYY     J9 A  !53!3!53#5354632#.#"!>32#"&'53327654&#"3)CBaSOgT3lUSëH>_UR[,*`yjRjjRkKNqlnec!!`Z><Ñj   ;  Y ,  %!2654&/.54632#.#"#!53#5!|_{ֽTcjutw-/DBij9YFV1-,f,*gtRRC(*)-.HFoj@j   ;      !!53!#!53#5!!ffBk5iy'Vj@j};     G`   )  #53####5!##53####5!#_I_[I*kP_I_[I*k5/<<C<<k/<<C<<k  G #     #!##!##jhjh5!^!^    ;X 0  353#"&5354'&#"#567632#3265#5E3RQl++[R*+_>ABHab0/z'jkl77<=--`!^]HGj  ;9 B  54'&#"#567632#3265#5!3327673#"'&=37#"&5++[R*+_>ABHab0/zV*,[R+*_>BAHba3RQl'<=--`!^]HGjY<>--`!]^h=l77   . !  53#53676323!534'&#"34gm 23Cm34ecKP)*c;;=99w;;m((44c;   . 1  676323!534'&#"3!53547632#&'&#" 13Cm34ecKP)*cg<=j-()&;38=99w;;m((44c;;\44		z6#K    .  "   4632#"'#53#"'&'5332765'**l<=j,))&;384&&4<s\45	
{6"#H    ._   #&'&#"3!53#5367632_B/T--gm"45L-45b;;;j?  ._   5332765#5!#3#5#"'&.B/T--]gm"45L-45b;;#;j?   .	 -  5#"'&'5332765#5!#327673#"'&'#35L"B/T--]e93;'()-j<;jA-45c;;/J!#6{		44]    .  (  #!53#5!#3276?3#32764'&#L&&45`TT
]c+gP`,B    B#$=N()***7*!$x     .G   #53####5!#{_I_[I*k/<<C<<k  .   7#5!##53##"'&'53326D+K/ibJ $&E;%"*0c!<<g<<bGr&"   tf   tf't      %  @ i	 	91 990#>7%ME}@?[   %  @ b	  	91 990>=3ME}F@?[  % 
  0.'03%N}EFP[?    u   452654&#452u@XX@sPOOP=>X@?X=>POPP  u   "'&4763"3sPOOPs@XX@PPOP>=X?@X>     .. #  327654'&#"#5676323+5L::6?)+*/o?@@5Jqqxr""mj""6z		44}5+;;  .. !  +53&'&547632#&'&#";3exqqJ5@@?o/+*(>6;88;Lr;d+5}44		z6DjmDi; 2   %%g  2   5-5g'   |?f   3##ttfg     |?f   #33Ttt|g     ?f  [@	 91 290 K	TKT[X     @878YKTKT[KT[KT[X     @878Y3##ttf  ?f  L@	 91 <90 K	TKT[X     @878YKTX     @878Y33ttx   5h   3Ԕ5"   b+ q  Rf v   sd C    h    3Ԕ"    +T q  ^      x    )3!#c=c=l     lx   !#c=x  u#     u#      Z:8   533##5#5 s     Z8s   !58"s    )9H  n@ [[ 1 20KTX     @878Y K	TX     @878Y KTKT[KT[X  @   878Y332673#"&`hddh`
HOGGO    7u!  - 	1 0 KTK
T[X  @   878Y2#"&546 0EB33BE!E03BB30E       \@	[ [1 0KTKT[KT[X     @878Y KTK	T[X     @878Y#"&546324&#"326sssszX@AWWA@Xssss?XW@AWX Lw    &@
   
9991 /9990!33267#"&546^WC8:$C q|<{/.8		YQ1i   J7  @  [[99991 <299990@A	 
	 
 ]KTKT[KT[X     @878Y KTKT[KT[X  @   878Y'.#"#>3232673#"&9!*0`f[&@%9"+0`f[&@Z7OL!7PK    f   :@  91 <20 K	TKT[X     @878Y3#3#rtfx     tZ   %3327#&'&',rBDRj-J/!6Ws_Sc=;>-N(	\Q     $  $'&547#5!#7#5!#327676I<4!f\my4j!XS!kX,$9$=`#<<<<]!w    . 	  3!53#53qss;;;   7S  1  53327654&/.547632#&'&#"#"'&7E\ZP+*>cWYPFE{7<=@E-,LKNX_a,+KKC@?BB2'0J9R/.: !..&('>U01     .   7#5!#3!53'3!537'#5!#]
\ZXZ\U5S<< <<<<<<     .. !  +53&'&547632#&'&#";3exqqJ5@@?o/+*(>6;88;Lr;d+5}44		z6DjmDi;    X   !!5!AGЈ     X   !!5!3A4    X   !!5!3Ahh    X   !!5!3A4    X   %3!5  ?  E    y    >=3%>=3%ME}^ME}F@?[P@?[  ?  $   ?  E    9  3   vJ  Y  yd C    Rf v     ?f     D7     b+   !!V         )9H     7u!     71! j     B   2#567654'&#"5676+ 1El6)IR,ao 18X(Op6'<"     f     ?f      Lm   3~ *m'   "     Af    ###=rtfxx)9'        )9H   #."#> `hh`
")OGGO & 	  #6767LF::u*pPgIJ6     2'67&'&5476D(	JP
1"&6"7#,LS#&8F'  kv   2&'&75476-"6&"1
PK	('F8&#SL,#7  } f   3#DƐtf  }e C
   Se v   [G%   53#5#5 "   lG%   33##lۥ p Nt   !#!pޔt"J     ZA   532654&'#"&z0.8		ZP1jM^WC8:$C q|<  :_   "'&4763"3sOPPOs@XX@:OPPP{X@?X    6   533!5"   %   ##5#5񥔥۔ G%   533##5#5    %   !!"۔   9    '#"&'533276=ëH>_UR[++褻!!`Z><   9T    %332673#"&5ݹ*,[RU_>HÀ<>Z`!! xub A  x5b jA   (    4&#"3267"&5462[6'(55('6y||||&65'(56&Z}}ZY|| 74gd 	  >=37LF::ud*pPgIJ6 #u   z     Lw        Jd   3~  +f   #!#5iVy C>b   #"3327473327673#"'& 0W`	:	J`	9
J`T0N		J   ? $  ? &  C9b    E9d   #."#> `hh`
"EOGGOKDe.  +f q p     m B        ]      =Q '  '&'&#"#676763232767673#"
gf7K`25cdTi
gf7K`2=[X`i)	9>(&;=3)B	9>(&;F*)   :   5!jj   :   5!jj      'LL^??       '&NsP9EG    @e   2#52654&#sOPPOs@XX@OPPP{X@?X &l   53!3y ?g    !!ub&b& C>b   632#&'&#"#&'&#"#32 0W`	:	J`	9
J`T0N		J !U   '77''thuuhtthuuhwuhtthuuhtth    .54675>54'&'!KP7!LO0PQX$ +0PQX$    '        7 	!     Gq^   #"%$#"5>323276q|Wcּ'-X8c^agE@LeebF@Lr   p?^    #&'& #676$ɟd$.^H|[wwPH  q  {4    F  ' 	  !!##5!0и^|j      B   !53!#!#!3.jV3j  S  '   ##3!53##ҦҸ'jjB~  tf   3Ant  V H   %#AnH  d   33!53##5!lyyRjxjjJ/kk     F  '   3#5!33!^&yjCj   W 	  =3?H33g(Ղ]    fDP   fD& F   yER fD&P   y R Jy   TV -   Rf  O 1 0 K	TKT[X     @878YKTKT[KT[X     @878Y3#uf  7R& j       f&   
   BL y     f'\          f'V          f'V        =f&        @f'          Wf&"0      -&2  H     $   q  d %    q  7   %3!53#5!#5!{>jjj k     N  p    )3	p=/JHy  q  3 (   \  ? =   q   +    s    , `@ nni`-,')!&$		%-221 @	+"!(%&/KTKT[X &8Y220_.o..]%2#""&'&547>3  #3!53#5HapmmpbEnpbo{{{{NQJKQkdappbcVobc	    q   ,   q   .        %	3!5333!5bJH\jyjjkjj f   0   d 1    q  #     %53!3!#!##3!53#5{N{D{{7{{{{L]Lc s 2   q     q   3    S     	!53!	!#5!{5h{I.   B 7    Z <    s   ' 0 9   3!535&'&'.46767675#5!#67654'&'mmpd}dNNe|dpmmpgyBqGqBygm`}}c˫c}}`/OF!
ajja
!FOOHdkkdHZvmVcVmvZ     ;    `   /  ;#"3!53$'&6+532#5!#676,f[tn[f^BGB^"#kwijj	i~3k_Bkk|C_   }  ' ) M@( n!i w 			'%*991 /<22990%!53!565 #" !3!&5476$32`PuuNsnc cotӶF7SF-W`֗g[`_\g    b  \&  {u  Z\&  {u f0f&*   e    ef&.        JVJf&0   L    J -f&2   H   Jx&>  W     f0C $ 2  '&'&5476276737'&'&'&767t(_>n{||uVL'$ge`"hF$&7}ˏA:?2sWIINsSoV7$C;%oi4;^ΝKyuz8Q&{eq{
	   V9  -  %32654'&+5327654'&7632!"'9P[]_2XH/M\wRx_FE|he=;Z]kH=EOq08tdTS(ml^\     JTc'   %'&7#5!76'&'53>:/Ej.4T(0pt(g(<lVgtk1cCk;F;T5aK    fj # ,  &'&547632&'&"32  #" 7626& nD&bb6hhplHHEI!Mb?7ؗ08DCY.-14B_ K3CX8   e2    SU    3$#5254#$'&46%!#pr9+kZ茍{i{rZLl堐  JVJD  [@':,' 021 @  z /90/]KTX      @878Y3#5!>32#4&#"h3l`yklnÑ   fi+    1@
	 
*221 @z

q`9/0'&#"!32762  #"  DKLCSDLLD@AkKJkj    J -'   #5!7'&hJ8|̎]"k#JyuzP   F  '    T      &'&#"#5676323!53	3!53%"#5<^212/o==2wqŪy\D.-|#kk"kk     FV'  n@ ,',:,'02<1 @	z z	`/<299990]KTX  @   878Y]!3!5#"&'##5!3265#X4Z9^'^`y'Ahjo$$+fk     J  q'   %6767676'&'53##5!zP_=*9HpqP>H_{ኹht0tFld\Fa;1mTfJ=,g\,k  SU  )   3$#5254# '&54767$54%!#!N_K19+kZs{'Ii@k>moHrZLlwVez& fjD R    J  '  J@%z	z =,'
,,:,' ,01 /<2220/@]353#5!#3!53!3T!jRkkjjRj   VMD    32654'&#"#476763 #"&'9HWQIWaCX {6HihzoeOzr#._d   fU D    %$#5254#$'&5 32#.#"9+kZ茍eekKMHrZLl 1/0qr  f:'    %2654'&'" !! #" 76hKCGK8rFlmuk3|   S -'   7'&7!#!J7}̎]if"KyuzPk     Jx' "  3#&'&5#5!765'&'p<B*,PH^^ki]h*+\}p[%Cb'Oso`cIC#$^S]k8<<k;f/     ZV@, ) 7  #&'&'&'&54767347676567654'&#");FHA-B<pbC%74-LhB-AMA<27%'WL6$V!E@l<sO;/f8oiv<l@KmdllqqK  9D 5  !53&'&#"#567632#5!#327673#"'&'s*<^212/<GL#jۃ*<^212/<GL#hjjcD.1xkkAAcD.1xaO     V' 1  #"'&'&'&54'&'537376547673#]WAMG'%&4ex-@7DD7@8me2(%'GMAW[V$KFf<lp%;g[վk<ksd^;$qi<fFK$    Z"' :  %"'&'&'&547673767653765'&'53#&>}]WAMA-B<pbC%7DD.MM.DD7%Cbp<B-AMAW]$K@l<sO;/f8k<gphpg<k8f/;Os<l@K$     -!&2   jL   Jx!&>   jH    fjf&8   o    Jxf&>       Z"f&B   W    q   353#5!##5!#	773qG|KlK~j kk5kk3{KKYj   fB+   $  767676'#"  3 2765#"DW7&*
pB̓ޓLC<d"hKl`p$   Fl+  )  ##"'&#5!3276"'&#'&#"l|䐣^`VLD`ys	/LKZm@Vk̶?Jg*	ptL\    =  4   #6'&3!53'&#5 Z )i߿k}0h&ue6jjk{Rs   f'   K     =  4\'{uK    MV$   #  %676'&'#$'&76%3';LK<wvww;LL;K\ut^y-e^t8u\     ,N'   <  !##&'"'&'&'&54767#)767653765'&,"$D-AMAW]}]WAMA-B#-,%7DD.MM.DD7'&'k;<l@K$$K@l<x?%@5k<gphpg<k8;    `9D T  "#"'&'&7'&76?'&'&#"#567632676767327673#"&'533276<GH'(']8:)CZc4*<^212/<GK$$ H]FC(yZh4*<^'9ZOH>_URK;X./z~+45ˆFspTS'D.1xz
#BJ[5"5ghZS'Ds`U!!`Z>Z   sV  $  %2#"#&'&'&7>3  HR`[apmmpbEnpb~YNQJKQfn
#2apjpbcVob2"  fVjD    %26& #&'&   hؗ﹥ssF8]m{2|  sU{ #   '&'&5 !2#.#"%$#52'&hpmIzq%{tX,kZ	2,gp\@AĵrZLl    fU  $  &3$#5254#$'&57637673#j`LKM9+kZ茍Ĝ.R	k3[t^qrrZLlz2]I   q  7   353#5!#5!!#5!3q{>y{j k˻~j  GPr %  47632#.#"!!#"&'533276{e3vFbKIP,>?|f2tGbJHP+AbdVRE@jbdVRFg  k  :   )##5!33:Ey3j	        	#!3qq|Oi  U #  	#&'#&'&#6$3 #5276xP{rp%qzH!9vC o`[YXA@뗲72k     \VHD     #&'&'#&%5 #66`0	2oP^RV Tf4!|nXv   `D E  67327673#"'&'&7'&76?'&'&#"#567632676FC(yZh4*<^212/<GH'('c2:)CZc4*<^212/<GK$$ HJ[5"5ghZS'D./z~0/5ˆFspTS'D.1xz
#    RMD # 2  62#&'&#'&5476763 #"&'32654'&#"LZ2_2_U0uw^WaCX {64YHWQI<,7)L-^Jjzr#._d_:dihzoe fD F  ;9 M    s   !  ! &'& "&'&7>3  8 c}}capmmpbEnpbQ}dapjpbcVobc    fD   fD   q       ;V    32654&#"#5!>32#"&'i6{{6HiOTjmd__d s &    f     353#5!	!#3!53#3qǿ  j kAk jj+=j   cV_'   	33!##oojƸ'AhV;    UVD  '  !!#5#53476763 #"&'32654'&#"reeWaBY {6IVPJkppkzr#._dihzoe sO   s' y " &   s&O   y| " q  3k'~u   q  3\'{u   BBB B|#I	#Iabh	FaF`C`#BC`C UXC`C85Y B B	#Ih;	 5 #I@PX@8 55Y  E , U@&% 	$
$-<1 @$d)n!%
n
obo
/2<204&#"3!53!#!#5!6$32#"&'533265x¼{?{89<GIrXXw^ϸookk`l2I""ca   q  k'|u~    s  U@&'
%91 @	ndn i`90 @	/
///]2#.#"!!3 3#   N<q%/	O`B^z=``  6   q   ,   _  \'{uq   }KTKT[KT[KT[KT[!KT[#KT[X $ @    $ $8448YKTX $ @   $ $848YKTKT[KT[KT[KT[X $  $ $ @848Y TV -    4D " + R@' #$$#$,<1 @*o nob`$o/220)53!#"&'533265#5!#3 32654&+DԾR7'IrPJIc xWCPj""Vm2kk  q    ( ^@	% $$"$% $!)22<2221 @#o!b o%~/<22<220%32654&+)53!3!53#5!#!#5!#3 ˥ԾGGxWjPj~jj kkkk    " O@  "$$
$ $"#<1 @n!o"bo/<2<20#5!6763!534&#"3!53!#{~{lkkdnlkk`  q  k'|Hu   q  k'~uu   &   u  q  F@$$$	$
!221 @ob	o/<2<20!"#4#!53#5!#!#5!#3Qe$$eȾGG?jjjjjj       $$   q  d   T@
	$!2291 @oo	b o/20@	
]%!2654&#!!#5!3 )53#+w{S|Njj     q  d %    q    -@
ob o	$!21 /20%3!53#5!#5!{jjj k    f 	 ! A@$	$!"99991 @o bo/222203!%#5!#3#4'!"#3252Z aPjn1d$jbEZkk U3l  q  3 (       + @$+$),<2<29991 @M	(#*o% b o/<<2<<290KSX@#	




dd	<<<<<<Y ")<<<<@+ !"#
$	%&'(*I:I:I:I:I:I:I:I:I:I:I:I:I:I:!##5!#	3!533!53'3!53	#5!##[Ge"-AA-"ekykkjjjjxjjkky     o ( I@!'( !' )91 @ee't e$ei`)9063 #"&'332654&+532654&#"#&_2ڭpZ ׫߽i9j~    q    r@$
$$
 $!2222221 @M
	
obo /<2<290KSX@
d
	
	dY353#5!#5#5!#3!533qGGj kkekk jjj    q  &  zu "	KT
KT[KT[X 8 @  8 8848Y  q    @$$!2<29991 @M	o bo/<2<290KSX@#	




dd	<<<<<<Y!##5!#	3!533!53#qG</kykkjjjj     4E  E@
$$$
 21 @
nob`o/220%!#"&'533265#5!#3!5R7'IrPCPR#j""Vi&2kk jj f   0   q   +   s 2    q    >@$
$	 $$
!221 @
obo/<220#3!53!3!53#5k jjjj k   q   3   s &     B 7      r@91 @Mn `ob<2990KSX@d
dd9Y"&'5332?#5!#	#5!#)Jr\8T0G%P`n""dK}Tkk2kkb.   u  / % . 7 `@+
$&$3 $/$8<<2<<21 @
 b'7no/<<2KSX&/n#<<2&/n#$o<<2Y0!#32+3!535#".54>;5#326&+";/FaootzǅgWϫԦkSBuzǒJqjjq?܂pǩ?S     ;    q  F@$$
 $$
!291 @	obo
/2<20)53#5!#!#5!#3#4GGj$k jjjj T>      C@$$ $$2<21 @	obo/2<20#3!53! $5#5!#3!#5ƾB&k jjƬkkk     q    \@$$	$$$ $!221 @ob 	o/22<<20@	  ]%!#5!#3!53#5!#!#5!#1GG1G{jj kk jjjj   q  d@
$$$$$$! 291 @o bo/22<<20@	  ]!#3#4#!53#5!#!#5!#!#iGj$dG1G1j T>k jjjj  F     G@
$$291 @o
ob o/20%!2654&#!#3  )53!#	Cp{jkLjL q  n' ,      q     @@#	$!2291 @oob o/220%!2654&#!)53#5!#3 	!pGYjLj kk  s  V@	&
'	91 @n	dn i`90 @	////]   !"$'3!2!5!
#"#$I^B`O	0%q<U^F"z@X    q	  ( Q@ &
$$!)2<2991 @#nin`obo/22990%3!53#5!#!76!   ! '&!2#"Gg3E]6jjj kkV_AQKJQ    F      `@$ $!2<1 @M	 oobo/<222290KSX@$$ 	  	<<Y!"3.5463!#3!53!3!53|E!I] k jjLjj   fD D    Wi6 " + B@! *D% ,991 @#!(`,9999990'&467676$>7367632  #"'& 3 e	"Y^SZjHdB6[Z醆՘+k^EQ-B_42lGjQO͒3     I  +'   " 8@,0#221 @z"z"z/2290 #!53#532654&+32654&+\zu(ק_jstiu~v'^q#힖jSj[YDDZp[[n  ;  '  0@,- 	,
021 @z	z/20#5!3!53#5j6'ߦjjSj    J' 	 ! H@,	,-!"99991 @z z/2220 #]3!%#5!#3#'&#!"#32>56
hddh8J^a3jj{  fVD H      C' + @,+,),<2<29991 @M	(#*z%  z/<<2<<290KSX@#	
>>



	<<<<<<Y ")<<<<@+ !"#
$	%&'(*I:I:I:I:I:I:I:I:I:I:I:I:I:I:!##5!#	3!533!53'3!53	#5!##ʏʘɶ'jbjjjjjj.Kjj.%jjb     ZD % E@$- 
 &91 @z' "`&9063 #"&'332654&+532654&# #ʸB{\0ylJXqyYZjfP[f   F  '  y@=
=,
: ,02222221 @M
	
zz /<2<290KSX@

	
	Y/]353#5!#5#5!#3!533FjSjj_jjjjROj F  '     @(IRX 8   8 8 @848Y  F  '  @
	=,02<2999991 @M
zz/<2<290KSX@>
>	

			Y##5!#	3!533!53#5J'jbjjjjjjSj   $' $ ?@=
,=,-%1 @ "
z`z/220%>76=#5!#3!53!#"&/326("

({SBDL?)?*hMȼjjjjDuSPHO}     J  '  @==,	,, ,09991 @ 
zz /<2<290KSX@>>Y353#5!	!#3!53#3J++jSj%jjj65j    F  '  @
,==,:,022<221 @ z	z/<2<20/] @)////____]3!53!3!53#5!#!#5!CjjfjjSjj=jj   fjD R    F  '  E@,
=	 ,:,
0221 @
zz/<220/]#3!53!3!53#5馦'jjjBjjSj    ;VD S   fD F    S  '  3@- ,
-	,
1 @	z/2<20#5!3!53!#iߦi'ߦjjB!  9' \   OV # 0 = b@8,2*,, 0><<<<1 @#21 $0!zq>;'!5-`>z>2<2<290#5!7632  #"/3!53#"  32'&#"32?32654&#"ƱiC0ii0CC0ii0CC(MSSM(CC(MSSM(iF22FejjF2/-2F((FUF((    j' [    J'  M@=,
 ,:,
0291 @	zz
/2<20/])53#5!#!#5!#3#'&IhiTjjBjj{   F  '  ^@,,= ,:,2<1 @	zz/2<2	#I#IRX	8Y0#3!53!"&5#5!#3!#5ݦb^E<Z'jjj9M@jjsPj     J  8'  ^@,,	,== ,0221 @z 	z/22<<20@  //]%!#5!#3!53#5!#!#5!#{BjjjjSjjBjj     J8'  f@
,,,==,0 291 @z z/22<<20@//  !]!#3#'&#!53#5!#!#5!#!#4hd'j{jSjjBjjB    <  '   T@,  ,-
21 @z
z z/2<0@
]%32654&+##!#3 )53`evwdxʦjp\\ojj    <  '   # i@, ",!,	 ,0$22221 @z z! z/<2<20@	
]%32654&+)53#5!#3 3!53#5!evwdajjp\\ojSjjLjjSjl   <  '   N@, 	 ,0221 @zz z/220@	
]%32654&+)53#5!#3 evwdajp\\ojSjj   fD  R@- 291 @ z` IIPX @8Y0! #632 #"&'33 !5Dk'4"$\_i   ;D  ( T@ D&,	,0)2<22991 @ #`z	z/229903!53#5!#367632  #"'&'2654&#"~zjjTikٌ͙w     A  '   BB@= 
,2<1 @M z
z	z/<222#I 	#IRX 8Y90KSXKRX>>
<<
#I@aC`#BC`C PXC`C8YYY#"3#3!53#!53.54637lfemRGЩUhdOOfjjjjw   fVd&   C    fV!&   jh  BBB B| #I%+#Iabh%FaF`C`#BC`C UX+C`C8+5Y B B%+ #Ih;%5 "#I@PX"@8"55Y     +9 $  53#5!!!6!2 '654&#"3!53+ϰhg;[kjk~[wUūjjR ;  f& v:       fD  Q@-	*291 @z `I IPX@8Y0%673#" ' 32#.# !!j4!q\k$F3)0/{iS sD V   J  ` L     !' jH      JKTKT[KT[$KT[X " @    " "8448YKTKT[X "    " " @8448Y;9 M    $' " + L@' =,+,-,<1 @+z 
z
`#z /220!53!#"/32>6=#5!#32!'32654&+:&{IIXL44?0#
ĻevwdfHӔO}lMȼjjfp^^o  F  '  ( \@$ 	,== :,0)22<<221 @(z z/<2<2<20)53!3!53#5!#!#5!#3232654&+evwd4ffjjSjj=jjp^^o     +   % j@=,
,  $,!&<2<<1 @z  #z%qz/<2<<0 KTKT[X !  = 8Y!!>323!5354&#"3!53#53#5!3l_zϰh'klnjjÏjjRkj    F  f& vH      F  d&   C    9'     <'  m@==,	,
0221 @z	z/<2<20$KTX@   8@8Y!"#'&#!53#5!#!#5!#3Qdhd[iTjjBjji  F    (  !5#5!#!#'&+3 )53#"!2654&#!FGobYb	!gkkgj  <  }  "  %3264&+3 )53#"#5!#5!!#&#evwdVbb(i(bbjpojSziz     q ,  2#.#"!!3 3# '&!3!53#5!#!767<q%/	O`BGdz=?jj kk,  ;ND +  %673#"'&'#3!53#5!#367632#.# !!4!|q\k$F͙wjjTik҂0/{iO       (  	53>35!23!53&+3!53#"3--t/KZZK/tZj\@`'HH`@jj>D~jjDj       C'  (  	53>35!23!53&+3!53#"3##&>d d>&DjV%QVV%Vejjw#fjj#j     q  
  , 2  	5!23!53&+3!53#"3!53#5!#67!?-t/KZZK/t0GZ'HH`@jj>D~jjDjj kk\~    ;  '  - 1  	5!23!53&+3!53#"3!53#5!#!M## dDE=&%BQVVVejjw#fjj#jjTikf     u $  3!53!#5!3#5!#3632#4&#"PRdG'3?aP_T5Tjj{klkk&gQ: V  "  !#5!3#5!3632#4&#"#3!53yyciRA2NW_L:;~߮kD?jW:()_1Pjj@    s%    fD     '&'& 325 VQh~h		{2|߽jh       5!#	632#4&#"# 2?aP_T5Rjkkz&gQ:j      UD   5!#	632#4&#"#+"F2NW_L:;~ykk%ğ()_1P     k&  u   Uf&      2  ^     5!5#5!#!!3 )53!2654&#!2@G@Y	{gkkg{j⛪    $      %3264&+53#5!3#3 )53evwdȱijpojijfW   q  
  /@	$!21 @
ob o/20%3!53#5!3!{jjj k%`     ;  X  0@, -	,
021 @z	z/203!3!53#5yi'1TjjTi   g     53#5!#5!!!3!53gȾ{{k{jjp    ;  '   53#5!#5!!!3!53;i6|{jߦ{jjX    qEb ,  3!53#5!#5!6%$#"&'5332654'&{>9 "nGIrXXw^NxpZUjj kp&+rI""ca5Q[V   ;9q' (  3!53#5!#5!!2#"'533276=4&#igMSca|_URT2,_jjTiem_]B`Z>5Ï     /  353	#5!##5!##5!#	3#4#!533!53'3-"eGe"-j$dAAjkkykkykkU>jjjxj  C' /  353	#5!##5!##5!#	3#'&#!533!53'3ɶhdʏʘj.%jjbjjbjj{jjj.Kj ou& z,      ZuD& z       q   353#5!##5!#	3#4#!533qG<j$d/j kkykkU>jj  ;'   !533!53#5!##5!#	3#'&#ۘhdjjjTikckk{     d   #  !#3##5!#	3!533!53#535#qG</˾k}ykkjjjj}  2   !  535#5!!!#5!#	3!533!532i<zvjzejjjjjjP    F     !##5!#	3!533!53!#Fi</{kykkjjjj     <  '   !##5!#	3!533!53#<kckkjjjjS     q   )53!3!53#5!#!#5!#3#4GGj$j~jj kkkkT>    F'   353#5!#!#5!#3#'&#!53!3FhdjSjj=jj{jfj  q     353#5!#!#5!#5!3!53!3qG{j kkkjj~j   F  x'   353#5!#!#5!#5!3!53!3Fj6jSjj>iߦjjfj   qE	3 2  6%$#"&'5332654'&3!53!3!53#5!#9 "nGIrXXw^NxpZUʌ&+rI""ca5Q[Vojjjj kk  ;9' .  3!53!3!53#5!#!2#"'533276=4&#BgMSca|_URT2,_jjBjjTiiem_]B`Z>5Ï   su' zL     fuD& zd       B   !53!#!#5!3#4#I{.{Ij$dj`T>     S'   !53!#!#5!3#'&#7iihdjB{    Z <   V'   5!#	#5!#3!53-)wkkkkwjjs    Z   5!#	#5!#!!3!53!5!5+uu?6ʿ63jkk\kk,{jj&{x  V'   5!#	#5!#!!3!535!5!5-)wkkkkwG{jj{G        !53	3!53	#5!#	#5!#	3#4#XLP@Iu״j$djjjskkkk@T>     q'   !533!53	#5!##5!#	3#'&#l%ߏLhdj>jjkk3kkw7{     U   !53!#!#5!!#5!#3#4#{'{=j$dj`jj T>     Sp'   5!#5#!#5!#3#'&#!53#Si妦hd2)Bjj{jB  w   !53! $5#5!#3!#5!#3#4#3?Ej$dj#9kkǘrkkT>  F' !  !53!"'&5#5!#3!#5!#3#'&#T<)?hdjW6%MTjjs-#jj{        #53#5!#! 3!534&#!3a9)k jjkkWpk J   K   q   ,     m'u     CH'      qE 1  67$#"&'5332654'&3!53#5!##5!#,5"nGIrXXw^NxpZUGh+rI""ca5Q[Vojj kk5kk    ;9' .  3!53#5!##5!#32#"'533276=4&#8zMSca|_URT2,_4jjTikckkem_]B`Z>5Ï   qE %  %0!3!53#5!#!#5!##"&'53326 GGGIrXXzX%~jj kkkk""ca     F9' %  !3!53#5!#!#5!##"'533276ca|_URZ,.hlfjjSjj=jjۣ_]B`Z>>     )"#3! $5#5!#3!#5!#3d$j?E"9kkǘrkk      F' !  )"#3!"'&5#5!#3!#5!#3dhT<)?W6%MTjjs-#jj  ;  X   !#3!53#;鱱jjj@      i'(!{   f-&S       \&{  {u f!&   j9         fD    q  3m'u   fVH&^      sQ   fVD   s\'{Hu   fV!& jh        \'{u     C!' j     o\'{u   Z!& j	      fIy   f6I'T   q  2' q<   F  ' q      q  \'{u   F  !' j      s\&  {Hu fj!&   jh    s_   fjD7   s\&%  {Hu fj!&&   jh    s\'{u   f!& j3      2' q <   9' q      \'{u   9!' j      k'u   9f'        \'{;u   F  !' j       q   353#5!#5!3#4#q{j$dj kT>    ;'   353#5!#5!3#'&#Fi5hdjTi{   q  n\'{u   <  !' j9     }R    fD &  0#&!";#"3273#"$5467.5!2ly0\{B˫f[PfjZYyqX   4EE (  %#"&'533265!#"&'533265#5!#GIrXXzXR7'IrPCPR#0""ca5""Vi&2kk    $9' .  #"'5332765!#"&/32>7676=#5!#%ca|_URZ,.
({SBDL?)?"
h_]B`Z>>uSPHO}JfbhMȼjj  4	 /  #"&'533265#5!#	#5!#	3!53	3!53	R7'IrPCPR#@IuנWZ""Vi&2kkkk?jjjjs}   $A' 6  %>76=#5!##5!#	3!533!53	!#"&/326("
ߏLl%r
{SBDL?)?*hMȼjj3kkw7jj>jjvSghPHO}  s 4   fVD T   
  3 :   !  ' Z    F B  >54.'#5!#;!"&'#".5#5!#327.546?0WFH+'$:/%QN/F`v˖VH_:N.#j
-@Y<0wF!MJ@`kk`>#k,+Bʈnkkt15THA!-     F   .  54.#"!2.#!3!534>23!5-XXYX-EnXF5=@+V˖Vaumvak98jb7
$w$
kkZЍHHЈXkk  d   # 0  >3232.+3!53!".4&#"3!d[nv˖VnEnXF5=@rnʚ5/ZVc> φ?CҏU
$w$
kk5Bwqk3    (   )  3!5354>232.+3!53!"Rau`V˖VvEnXF5=@zmkklɆBBɈA
$w$
kk   F )  5!#".5#5!#!2.#!!26=5aV˖VHEnXF5=@+chkklʅBBʈnkk
$w$
1vÊ      >  32>54.#"3!&54>32!2.#!z״c4<m]NsGc8^}BPyX27^|DEnXF5=@iF;lptu;1hr3kWJn\: BcehnI
$w$
F      #  2.#!!2.#!53#5!#EnXF5=@}EnXF5=@~H'
$w$

$w$
kkk  F %  54&# !2.#!534>23!5EnXF5=@V˖VauYv
$w$
knɆBBɈkk   F 8 G   "3!534>32332.+".4>;54."2>5ү}Fmr(EnXF5=@,M~PPTF}26^D''D^l[@$8jbkkZЍHC~p
$w$
yt88rr8gak(RV++RzPg     d # 3  #5!#32.+#".>3!"32>5HnEnXF5=@rVvnʚ[\ncVZ/.ZVXX-jkk
$w$
c҉CB͆Az*ch..do        #  54&#"3!53#5!#>323!5ﱲH R]c1v˖VauTǼkkkkb-BɈ6kk       353#5!#!2.#GEnXF5=@j kk
$w$
   ,  !#32>5#5!#".5!3!53#5!)]-XYXX-HV˖VHjk6ak98jbkkTЍHHЈkkkk   , & 7  " .547#33>32.2>54.$#r]`bevdͯEU4;CFBwq>B^nIB
n술LL젙uW9[A"2-w'גz66{ǑrȔWk     $  3 5#5!#3!53#".5#5!-XYca` R]c1v˖VHj7ak9/kkkk-HЈkk    mx4   #5.54>$73fA;Rkkrk`'ef' 2t"^<8f      E W  %.'#".54>32>54.#"3!.54>32%"3267.QK>QjcGrP*,OoB8D3U>"<paMqEc7\{AQ{Z34]K-Q$,!3C$PQ6jd[M.[*>D#?Y64ZB&*8!7\{<4ik5k-R&j]< CdiYA1j#)1/)   = *  3!5354>232.'!534.#"gau`V˖VDEnXF19=$-XXYX-YkklЍHHЈ
$w#
kxbj89ka      < . =  .#"3!"&54>7.+532>3!2654'		<?B*
?:'FavH&-/e*JDC#YT:t#I}[37d,Ol@.7	k>80~Q 	k-G4Ti;^ [<;D  `, *  !2.+".5#5!#32>5#EnXF5=@HV˖VH-XYXX-
$w$
ЍHHЈZkkak98jbx    C  !#32>54.#!#3!2>4."#4>2#".=BJqMRuGCmI)
o>iM,-Tz{V.UȑR2YyGKyKb膃lkDdB!+X_QxP(m:SAe`;;`EY\..\YDjL0
?eXpzAB} <1 *  #5!#".5#".'73!#32>5a`V˖VDEnXF5=@ѿ-XYXX-|kklЍHHЈK
$w#
kbj89ka      :  .+532%.#"32>54&'#5!#".54>7NY]*5mfZ$kR#A o~D8jc_l:c+hxzlS؆  z԰P}|E4ik5k-R&ގCL~o     F      3!534>23!534&2V˖VvtkknɆBBɈkk     0  32>4.#"3!.54>32#55КIDm}C8jc_l:chxzlSچkf;@LE4ik5k-R&ގCL~ڦhlK     '  3!5354>$ 3!534.'3!53>au`bHb.aiau`ld/mkkXЍHHЈkkxWhAkk
AiW     4 M  3267>54.54>32!2.#!654.#"c
?hh?ONsS/5[{J'EnXF5=@i8]v{v]8
^gIwQYk<FIC450NV)Axed[!CdcdpM
$w$
FIP)>q^K(hz99d    F   .  "3!534>232.+3!534.2YX-V˖VDEnXF5=@H-X8jbkkZЍHHЈU
$w$
kkxak9  F   % #5!#".5#5!#2cHV˖VHTkkʅBBʈnkkt     ~ 1  32.#!53#".=#5!#32>7#5!@EnXF5=@3 R]c1v˖Va`-XYVY/Hj
$w$
kx-HЈ"kk@ak95e]kk    q[ >  !#32>54./.54>32#4.#" .q=>	KpKYf8!M~]`m;I}a`9\u<HvT.(V_QekHfA)Hc95SD9;G^}SWqA0^^Ge@%D]86N=47=ɝ^uBF     F      "3!534>23!5354.2YX-V˖V-X8jbkkZЍHHЈkkak9   l = O  !#32>54.#!"'>3.54>2#". 4."32>=FNvIXsBIuJ@=562T<"UȑR8]zAMyKb腃l-Tz{V.'T^>pVkFeB+X[W}O&
$w.14BP.Y]0.\YDkN0?kYox?C`;=aEDc@A         !2.#!3!53#5!)EnXF5=@Hj
$w$
kkkk      A   * 4  !#3!535.4>75# 4.'>>FNNMM3edde3eccekX
Trl\sjjs\غXYЛj=
_	:gЙg:	
=j     a 3 A  >32#"&'!2.#!3!535#".'7;326&#"Ytnʚ[]lbKEnXF5=@f#EnXF5=@'/[Uxs9;vv;43
$w$
kk
$w#
_MZ2n    ,  !  %2  #"  "$&546$32Wggi/XNQJKQkwvpnȬc6  {7 ( 2 :  !##".54>3!##"$.$4.'>#";{>G>dPBWxF(CYac-ǾNZ컯b3ecce?wz?k;]D+k=iQ6R;&	kVrtȓSK9Лk<	
=jhIT  u    Z   >=3Z_W+E%Z    d   3#d  %   "#4>32>53NqJ$Z:hVMpI#^9h*?K"@~c=%<M(K^5     sd   	#oudx    )  '4>32#".'332>5.#"M9GwR@w\7 ;V6(J;(Q(*#<O-GxX5zz=@eG0R<!-C- #.':%6b    Z   3!Z#k    9M' -  %#"&5#5!3265#5!3265#5!3!5#"&rkݧ^2N8|X1O8|X3d}:jqRsH jjPpF jBijpz     JVrD   %!3!53#5!>32#4.#"r@h3m3S<kkjjkmm5cN     fVD  )  %!3!53#".4>325!#4&#"32656|cvAAvb|6hkkkkd_RΔR_dkF   JVD #  %!3!534.#"3!53#5!>323S<h3mkkjjcN jjRkmm   /   !326533!5#"&5#5!3S=3m]'kbN!kmm'j   fVD  %  !53#".4>325!#4&#"3265X6|cvAAvb|6hkkd_RΔR_dkF    9     !!!53#5!]'kkk?j  9VD   53#5!>323!534.#"!Ch3m3S<Vjkmmjj cN qk     9VqC 4 C  #".54>;.#"3!53#5!>322>7#"qGub4-_e	.BQY],Yd5hNnY:{ujT7	 6JTWI/#H:%/kwy=*LlA=lQ/Q{Y:"+Z_pjjk1P91Qvh0I1#Xq,I  f  $  ".54>3!#5!!!%2>5!"޳EEn.fqEFpN*ҍOz{ʏNkkIzɐ9ro     9V   >323!534.#"3!53#5!3m3S<fjmmjj cN pjjk    /V$' 	  !53#5!$^kjj     9V~ 1  3!5#"&=4.#"3!53#5!>323265#5ΰ3m3S<f3m3S='DkmmcN pjjkVmmbN!j     x|)  /  ".54>7%!#32>54./"|N޼NCxbWc}GV,QrFBrS/9[BGFrQzɐOOzrV%=
kTިq95gdK{k/9p     9V   #"&5#5!3265#5!3!5u3m]3S=Xmm'jbN!jjj   9     353#5!>323!534.#"3Ch3m3S<j@jVmmjj cM j   / 5 H  3!5#".54>7#".546?3267326=4.',3mXrB.Pm}D&USL:"jEBkP'O%/CNQoA#,Mi=EnP6^G(Lkmm2fkd}oe1	(37l9$"P,jB	NbN!HgtB5w   9VD   !534.#"3!53#5!>32\3S<h3mkjcN jjRkmm    # ) =  3!5#".547#53>32#.#"2326=4.+A3m^o>94]3UH?_	SRDzl[$d#-Je=I{X&!$Lkmm7qw}kjO!!UY?mWIbO!Hif2ik)  9// 8  4>32#.#"3!5#"&5#5!32654.8\u=H?_UR5+#*#3m]3S=!'!-:_D%!!aY&8#$<<@M`=kmm:jbN!v@dSE@@  V'   #5!+53265f5`Rz~[WkVX-ks     m/ ?  3265#5!3!5#"&54>7.54>32#.#",M<3S=X3m)BW36Zu@H?_UR4,%/VE.`
&08bN!jDkmm C>3?Q]/?gI'!!aY)?  V}F 2  >323!!".54>54.#"([i{Ioo7;a|~e@AH0#:*?gg?5Yt>X2.H0>iMQui^S$- j$1+]elt}NRwN%EC     T  D   353#5!>323!534.#"3^h3m3S<jRkmmjj cN j    $V[ 2  3!!".54>7.546?33'z#:*J~\Hb9'*jP!*HPV) x~B$j$1]\	)EdE3e+lH'-!>
QYT	   9V=' /  #"&'#"&5#5!3265#5!3265#5!3!53d}kݧ_2N8|X1O8|Xjpzr:jqRsH jjPpF jjj     oV#F / L  .54>323!!".54>7654&.#">5<3fS4Ycnh2;a}~dAAH!#:*4Wq>;Yn;:^C%/FQ#%!8fN.3[dsKYg8EoHLwl_R"- j$1'U[a3#DHoK'!:P07\QI#&_03lrx>     T  D )  %!53>54.#"3!53#5!>32K$8%?dGh6tVo@!9L,kkj/}@?z`;jjRkqi9miM:     9'   3!5#"&5#5!3265#5-3m]3S='Dkmm:jbN!j     9V   !!53#"&5#5!3265#5-wR3m]3S=kkmm:jbN!j   97D 5  %3!534.#"3!5#".5#5!3265#5!>321O8y3d>x^:X1O8|h3d>x^:kkk+PpF 	jjp&\sJkjPpF jjp&\s  JVD   53#5!>323!534.#"3Th3m3S<Vjkmmjj cN pj  n9D # /  #"'53326=#".4>325!4&#"3265;A|tӮ`~6|cvAAvb|6h[rz@Li_ďd_RΔR_dkF   T  ' 	  %!53#5!N^kkjSjD  9V7 7  #".5#5!3265#5!>323!534.#"3!5\3d>x^:X1O8|]3d>x^:1O8yjp&\sJkjPpF jVjp&\skk+PpF _jj  VD  (  !#5#53#5!>32#"&'326& űi6|bvAAub|6撫kkgkd_RΕR_di   nrD    %26& ".54>32p֠	꽇IItuIIF6cQ~ΓPQ~}ϔ   (V - 6 B  !##".54>3!#3!53.%4.'>#";(*EjWp@%?S]a,ۼVPO"Byg}g5R98R5g"j[!IsQ6VB/k{	Nrl^jj9	]nha3Y2FRH5    9w   %!5#"&5#5!3267#5!3w3m]3S=}\kkmm'jbN!jj    y  "  74>2".4>32".$080$#1:1#%01$$181$h1$%161$$181$$10$$  ZZs   3267#"&'Z?B>B?B?Bs  R   ' + 4  332#!53#5!3#67654'&'3#67654'&'ldΐ~{d櫫j7DD7j丸HKJGt\Y-]_^8	,7wy6,8ADDA    n  n  :  4.+"#5#5%7>323!354.#!53#5!#!23!5)6[B%3B!)p9Re7 ÀNwP))9"%5<fh52DlBf."jMMF(G_8e  n  t +  %354&#!53!".5'5!#3!#5!#323!q 0\`W)2!XYNYeEFj\!HvUgh4G+hhte   nF #  2>54.+53!3!57#5!#32!!D7"#Db@ 1hu;}
+XO;N-jcnmFhhO    \  C  4.+";2>53#!".=4>?!#57!3#'5!i*argn:,f{qb+Tz{ΖTgaIwQ5S^H?}oQ1tD>{xN~=KuWYznTpf>f	0J_m{?     n  n   %3!3!57#5!#3!| eggJgge     n   %  4.#!3!53!3!53#5!#!23! ,~~ l5cI,Y->&eeiiJgg*Hd:k      9  4.#!;2>5#!".5%".=#5!#3!'!2#6$N.K6$6#TAnO,-E.'}7r[9$@/8M26ZE,Ha42IX'kgg^8.h!EiG       7  ";7#4.#!!"$&=4>3!!23!څڛU'HhV//7/x<ox9/Kc:akOb9GfE!$czgc8eD5bUj          %3!".=#5!#3!#3!5|1L3}~9Fvve$<N*ggBChe    n    )  4.#!3%7!53!".5#5!#!2(Hf>4\IK	0M;+~JoH$EfD"GkH#fe":LTW(ghh<o     Y  %  1  4.#!>57#!".5!53'5!#!243G*4J/*B-1Y|KR\2~~&C|]7#I;#&J;%+GY/Oe:/X~Q
NiIgg3XuB       c  H  ";2>54.+#!".5)%".5'#5!'3!#!23!Ri:1L4x4Q7V2R>'S]]k:*H5|+$KJHe@6YA&SD,(AT,_CP+[P$(S~UpW8O3ohh/.g@nUk   n   +  23!54&#!!23!534.#!3!53#56Y@#]B7__/3S=5Q:,k;/*Zeee`8V;eef  yt  U  4.+";2>5#".'+".=4>;22>5!;xxajG2MfMvHkR:iǺ+JED$<]RO.[_63]_`\1+Ib729F1$?/3ftqErD5^_Ϙ6XA.;$<ka[k=<kdT-)<)5D%!      3  #+".5#".=5!#3!#;2>5#5%+`lqe/4I.~}4O6Q~(F84>"NrM&$IpM#@W2YhgR)6 h8K.1N9f     3 )  %3%"&5'".5'#5!#;3!5!3!?Xo2M3~SB 8*e[~5ZCggEG,F33hge  n   3  4.#!+".5#5!#;265#5!#!23!!+IuIUg9)@.XZmBjI'#=-1^Z-<hSRih:hN0}ggI M~\l   n  o #  #+".5#5!#;2>5#5!o<jWKnC&>--=%sR|R*-U~Pgg?Y8*C2h     n    1  4&#!!2>5354.#!53'5!2#!!23!\iK3M3~&E4{i.-h|Mh{?	YY!=1 I=)kg9T9AeF%<_s9d   y  R  4.+";2>52654.'+".=4>;2!6Og~J_NjO58QjJ_qt<LK2R<.|bc`41[fc[3U[0@qYa66`YeZf:yVE71(U]2Apacd99ec,oiR=Nb=\d  n     2  ";4.+32>7+3!5#" )2 iJd>>dJAfIIfADzӂ{ `9|ƍu4y43uyܔIiee/=B    D   1  754&#%3!5%".55!'3!#5!!2!|aXK=jN.}}0M89dM-0kxeeh#Eb?hh(L:#(hg+I_6j   n  k !  %34.#%"3!534>3!23!w~"-0!~&VgïdpLLqcddb~Bd   n  n   %3!".5#5!#3!#5!#3!zic\,(B1ne_%Uf0hhJhB2hhe  n  m 2  #+".=4>73;25!".5#5!#3%#'!lDnEDrI0HU&_aY*}50`9lS4.Om?&NH<u)"Regg2$J<'g  n  o   %34.#!3!53#5!#!23!w0O:~|}J`7e]4W?"eegg@kMe    n L  %'+"$&=46$;27!554.+";2>=#5!'3#T/BRZb/?qeZ5y^8m'.ANW-ZMiP54MhN^+baYD)w䀀675(qx%BZky>XfflNPM;$:cSGg=#6FE>ggd     n  9  ;  ";2>54.++".5463!#5!#!23!LlE 9V;i/K2I&27jc^rB!A-^M1'E4TDZ84[H]%1^O",T~RJgg@`?i   n H  5  4.#!!2>54.#!3!53#5!2#!23!U$:) /<!"9)ـ||uBe>9bHUsEy/ $4!32*cch,CP%9X>%A]6g   n  >  +".=4>3;2>=4.#!#5!#3!!325YxD~oԦe8[t<\5cZL1aYN9 @nRτrFv\E-1ZNcCoP,eA+HgB/@HP'Kc9ffh|;ut   n  o %  %354.#!53#5!#!#5!#3%!2!z6P6L{~rꊘd,<$jchhJhhhNvuc   n  P 
 @  4+32>53+3!53#"7!5463%!".5'#5!#3!2^F_:GY1~"[R&3_LcuB9/K7ee[%P[ee_)E3hh%MvR   Y   )  #+".5!!53#5!#;2>5#5!:gSds>,8R7'D2rOmDCnO@NhJhhDa>;T5eh   n  n   754.#!3!57#5!#!23!{+B.g}a%)Ic>Jedhh?sbl    n [ B  +".55!;26=4.'.=4>3!#5![ftMuU2yN";O]d1o>thea/;fI|=]A@vX4b~H"=Scm8Qaa2f^S>$mU~`K$#:KfL:hM- @;5$0>Z}V  n  q   %3!".5#5!#3!#5!#3!|tj1|Xe]GuZ&hh2hhe  n  D   %3!5!57#5!#!#5!#3!~~~~fffHhJggJggi    -   E  4.+!2>5";2653+"&=4>;#5! '%!'3!=8X>/K6(I9"1K3Uae@scU7v{)
օ'@-T,<$h6N0.XC)u]L_6xRX.3hr{}mi     n   3  #".54>732>54.=3OZStD/I4B.0Ne5F]82?A?2$<LOL<$lh33ec<iWB'8'BdC"2Y{JFfM:57F\@A?D]D44=Vx   n  $ - A  #".54>7>54.=34.#"32>$>wpyy<(Cha+797+-6-?mF3dW\c/	2i`\a+){̒PZo={seN32/>).D3pp%1*,@]E-4>|Óco;;naWuDFu  P4gU 9 M  %#".54>7>54&#".54>324.#"32>gVatĐQ+\b[vER\9K+	k/%.^cOf;XN%HjEWyL""KxUMmF )rGG~gco]2/VOJ$IR0!
)8C'4_H+*Id:V9'FuZk:+`rWY,#R     n==@ Q f  #4.'.#"'>7.54>32>32#".54>7.#"54.#"32>&OzT3R!%<79"}7@O31f_T?$<uo9M<1F]ds?>qae|E&.5@-DX28ia?~rbH)b,OBG\56[FBO,='VO@7,)AN`~f]K#3!BHDzo{BK\8]QJ$3b^en,16?To[GuT.$ZsaQ$K    F3A =  #".54>732>54.#".54>32<urmF2@D@"wC];#?W50R=#2?]*C.CqOhr<hs=N{H<^F1 D-AU4#FgD7?N,/I3/B!AQX$aU&1_Z   P4A V  #".54>732>574.+532>54.#".54>32L~UiN/Qn@&
!EiI9Q5#=P-U^'J;#8X?8_F(4/C3(
=n[Q~O0Pe54kU6ln8=jRMiD'B0<K0Ka8(Ig@Lg?g6X?Wn>-O=0,550M~Y1'Q}UWvP/:UtO   (   4 H ^  #".5467".54>32>32>3"4.#"32>4.#"32>E}lkxAPTH{[39_x?WU*C=B'48Qf;4E3&?dE$(C3$>-(>*.C,~!CeD?Z9$5E,Tj:%χ@B~A;dJh[*>iMJ<	M[3/O<Kl?dF%?eIK`83aIOvIG{`%RQI8!7g    n  u@ 7 K  4>32>32+532>54.#"#".%4.#"32>nM^dCJLGcvBPR704W>";[@0:=D~lj|D%C]8?^>;_G:^B#%˄@QQ*=(Aˊ̊GFsQua*.*!AHS2̋HL}ub**bstd--c   n  A )  #5>=4.#"#&54>32yy|!7(8cNDY5!6'owAwhj{C9dV	!Fu]|_%Zo]zM(
VgtMK  23A K  #".54>732>=4.#!52>4.#"'>3232O_1mj`I+9Xi1$?aDVd3)6'YXP=$
!A6&;$G+)!
7]{Cm?x\8k/)@VmBQmE#G.9H.Pc6-^c14iT4t'5AIN7# 	<ZH>JtC  n=L   #'2>54.#"#5>=4.#"!5>=4.#" #4.'.#'>7.54>32>2>32*EX^\%(E23J.1J1,J96L.4T=DP*}pYW0M^]RZsL66K?=)j(JMR0E{jU< JyR*YO=	;OWLTK9	<N\1PtEUuY<n5jk`u>4YE2-G,**+I,5:Z<<Z:7,G+**'&(3:V8?by9hIfS'C9/$ #4%(Kduyw2l*5R:8V99V89R5(c  n  $ 1 G  #".54>324.#".54>324.#"32>$J{WzCNZ(ZO;	@fI7ZA#KBkDy9"1=H)A[9@dELb7ǃj,OysL&*(@+%?/)8z367KrM&)TWc`9	0`axa*)Z    B 6 I  #".54>3232>7#".#">3254&#"32>BNgewB)QyO:SB9"=976BM+52.--"1PVP]|Ixp:jP/!BcB;`C%/ЎJ:srq`W)%&SE-$2Q='=*>}jǵ-ds~R*Qy  n7,A N  .#5>54.#"!5>=4&#"#.54>32632,,?NZ26F63$L%DDH(hm'RInswnEQ*"5ADG}\5<ocp(M[k:41lleT<!3)[8L/_I`7D*H)**)H*D9dP&B$Cx_A\$knoN}P    n ! L  #".54>732>54.+532>54.=3!<unt~B(Jf>;cJQ^.!DiIl1A''?PTQ?&z.KadaK."8JNO"QmAh}F>gG@jU>I,47GuT/1X}Kod/g"=T25E."7Q=$,(BcH<ZB.9i    n3#? R  %#".4>732>5#"&'#"&'32>54.#"532>53#G~f`M%KtN'	8aLFc?&^ei2%E(bV;?jQ2[):85+8;W86>5G9~ymS1b(x86^gE(
A2;G./K4+PsI	7_M3_I+#G9$/:$?0"'  n) c  >32>32#52>54.#"#5>=4.#"3#.54>7>73#"=Re8o*(h^uB-XX_>S2	(SJ$L>(%;H"|r&D[6jPb6.UňkuK>(?b]SpO,BnP,ttExW}#+aoZsBBmQH)L'**'L)HRmBlj4}VG|!'%)>GH;%1To{;
    m @  #".54."#54>3232>54.54>7"mL]`tA&<$D2N7{lwMd:&'&$?3,24.FQF.iw@KczP]0%/&C3JsE^?(':,A<4(")73:Tz  Z4s \ p   #".54>7&#"'>7332>54.'#".54>7.546324.#">4.'326SZ'OwQ8XB,.=GLG>*,;$)fx]&2P9%?U04Q7 D>/@'pipy'?/R~eH&4,),($.8	/)/6+&?Olw`N#16	a?RGSTt3<'A02E*!48C0-04YllY664Yua$(#&*3*#B798545",  (3A e  %+".5%;2>54.#"#5>5'.#"#".57332>32>327mjk-cbZD)6( 9Q2`2H2%007.8/9"#+6$+R?'&'**/27@a,9H-EtT0fM4L^q@
8=7H]=5_H*#9INK,/>$&2/
/1.,*.2/DP6pR5AhJ?:1~W6WS2A'%Vi    n3A a u  #".54>732>=4.+532>54.#"#".54>32>324.#"32>Kom{S2?`D%NyT;cG((A1=<7M/,M=%833IwQcr>>uh"POJIKE`r@8cNI]50R>GY21XFCU/5\k;->FM&*=-"0e^L6!>Y8v2M3T'ZlGjF#"+;K/`#GxY^zG$;-*;%?p]i^5%Bj^]}K )RzPTT*(R   n3" B  #".54>732>54.#".54>32'%3"9ojmN.Qn@;+'HgAN_47\u=$:)(_F;'6\xA;\OG'Kx[yFBs]EmQ1	F)aKkE +PnD-%C3&B40'7NjF>oS0$?2     n>oA `  '>54.#"!5>=4.#"#4.'.#"'>7.54>32>32o(Yd&<I'/S@>^A!8ZC@U3*MnDC}]7-S]&*VK9/yMQBwbo&H`p8^m<T|l0`)GTlOQxP'5U=(L&**&L(=U5*S|RJxf))DGRla.MB::=",<!<9%rrug/uq5U< 8k     P3	@ =  %#".54>732>5#".54>7332>53	`N$GkH6W?Fe?$XZxF EmM3G-0K45aJ,,Nl@IhE(L'4>#!B6"'Gd=UR@nUKmXN,,TV[2EwX38P2    4 K _  #".54>324.#"#54.#".54>32>324.#"32>4D}oLhO6I~b,YL9/= $(5'3*4G,+FY.b4EO'DoN+*Ie;G[4:bJA`@]K-Ok}DiM)=J!^$.	5P6xx6P5).<%M8@CE^9vi0R<! Ut\_16aS`s?Y     B C  >54.#">32+532>54.#"#4632i
&?.&8%6C[CXvF)FZde-%)NE05U<9kS1̷KrM&"8H&%-3"=-CkNc+C.C|kWjJ(h7rwRe9%@Y4K%@Z41PA/  n3@ Y  %#".=4>7532>7332>54.+532>54.53abϐN5WA,DBG/"VTGb6=+RxMOvO(%BY3);&'9D9'r 4BEB4 Lc$QOH7 mx@d醢W;&5('j kDhK-SsFRh;k1Q<-H>9=E++:)#4I5,UF5'8Qp   n  '   4  #"4>324.#524.#"32>'E|j6N`q>5aRA,3?|b=,OmA9P3;aI;^B#tDBveK*$>S.P[-V2^Uf|F>oXmg2!S    d*a \ |  '>54&#"#54.">32#>5<'.'.54>32>324.#">a$4!"	G?LN2Z:"
1Ok?
+ `ps_>_%.
!JwUTk*:L3Hc<.E.<jP.
	%SNA"#)A81-+.<*H9!1 7S8-3+u{s)s;jWIXj?7c9r3gxe9om6\[2F+4Q<dH((F^5&.<*bo_4>"3jidZ_fl    Z4A p   %#".54>732>54.54>70#".54>324>54.''>73%%5.#"2>+@K@+RVbM4Un9&$A[7M_5-6-L&KJ$4V=""?[9CJN(-M<!-DF?E(TOG5')5F6;; 2?=6HfPEOcFyh.Dze?eI-=<Pc<;Z> /K`0Fr`RKI'1DZ;Z-F,4MY%,^M1'<J"=mbZ,+W\c8:^JT;VvQ.GAANaA-kfV^/=*"!0881!'3    w 2 F  #".54&#"#54632>74>732%32>54.#"wRidq< ,Mdr3P7*i@*G^4*GU.	N~OvoTl?9U76fN0:و=Rl)1-qmocOp]ES
TvQ318?!@Ӊ:Z>?w\8#A]   23EA   %#".'72632#".5732>54.#"'>7.#".54>32>54.#".54>3232>54.'7E#>S1'PQQRR);YC2	BC?16fZ1[F*H2=5J."2!DKnO(>>D.-$03X<<)CV,[nV&+]ZR=$#0!j*?K"2XB&,Jbmq4#/:<;$3*J1'8\@#!=fg$<=E-+=P2JtQ*3K1%(E6-M8 	Bwme1c'&;R*p0K4\F)@yn#$*8N5!	2?*/+*B-:Z>;T>/-1 QZZH-/$!(8K  n  % j  #".546732>54."532>54.#"532>54.'.5332%I|Y8wocK+fn"
,PoCEY3 1;6~~
=6% 2:tt		@9'
/aVU~T)#:,pqF&0L^/2aM/&Ec=:gL-kg2$<WvMh)1%4I1FhE"!DiGXqB
4&/H34J02/ <2+:%$F>#)5B&$8-"%5G-.L:*CV`   n  e  j  4&#"3>#".54>3 #32>54.#52>54.#52>54.'7bCO0;!TnA%;I$>2 !3@?4!nJ'S[-cs*LoENb8)OM&>-0=NR*E2->%"BGE6"OH&NxRk'6Sn+RG6-8B$@:3/?N0*sʡ?K`F9"W 3?3Q:(:/< B6#72#8F#`bH!*7GXj     nF$A 0 E  33267".'#532>7.54>324.#";2>$ HrR?A?/lxE
7qtx> FHEVzN$O_YO8[D?^>,CQ$+TA(ZZr0%8D ?:+
4xWp~DGlpO!Sio++o   n3% V  2>5##".54>732>73#".546732>574.+5HDe=+;FNJCPmA
% 'I<K|hU&0BJQ'H~ecK#8]F0ZE+8Z@_JuF'"7`L%9-%@&E*/(;X:p}X?,6̐cbo<HvP?<LR$AmO,7\EAkM*h     n3" [  %#".54>732>56&'5>54.54>2.#""?wkRlQ6'LpH$"DbALY.jp};L-3SkojS3>e{eF#9Q9*VE,>ff>:iQ0x}?'AV\\(MrP2G'=YBMkE4ZyE
6-0E*L`=%!(DiSNoG DqU";N..C+GV4 <bOt7RrN     n    # Q  #"32>54.#"3%'#37'##".54>$735#"$.54>323@8ze,#EfB*N;#$A[6;[> -Lcjk.QllSSl/dmrHQND}kwj1lr AcDAY6/$7!,7ZBAZ:C8LDPb85_Q][1*YbQ_4/\V  n3`  d  4.#"32>".54>323>73>32#"&'##732>54.#"3 .:C&%OB*/K]/4R8ocwBEza8BH".RB;?B bxD?si?3T-'3542S;!:S5&`[5	'QGO:M-\`8Иς;
hP'	*&+	;ʏՂ8e/Mb4K/D-[\    n4U M  #".54>54.#".54>3232>54.'7`]=~viN.@ii@'AV/nf(55c[Gh?7ZtxtZ7#IsP<lQ0%?fG'3nc-9Qi~I^pUIAFQ5FV-Q_j YC1hV8'Q|UGq\NJMZmESW-&Hg@>SC>(A P^k   3:A ;  332>54.'3#"&'32>54.'7#"&5,Ja5<M+>]=[T(FxZW#{?W6"]~L N`,O2ZD(!M|[TrS?!!Rf|KUf8JTz.H5"C7&Z7Kb=@mO-   n3K 6 H  4>3232>54&'7#".54%5.732>54&#"nVbsŐQ"Vn]O#o[3W@$$*@:(=m[O_4XN#EhEW{N$MkCcs~BCygS|m2+URM#QR1&*7i5N45YA$*H_5q'KzbZe50gq/`     nr#A <  '>54.#"'.'.#"&5473.54>32#r1bU9dI+)PvM(H<,-(@9,-ChG%F~i_Mn?X-e?6lW6DpQj^H*BXqGN`:
#6@A4e2,\lR`g69g   Z  $  ( :  7.54>32#"&&54>32#"&&4>2#"&g''' 7''' 8 ','' 7D
*))%) ))%.)))%  Zz 
 1  4#"32>7! 4>323267#".#"3632񈅅27(JkB
"&%<-#='2!0%B6 8L,	1S;!

B"#-      '    	3!53'!3!53!ySPSqwZ'Dkkkky      '  #  #5!!53#5!!53!535!3!53#5!jjjjC]hwzM'ߦrzjkkQkk  fD 
 8 ?  32654&#"'>32#!32673#"&'#" !54&#"#>323267U퉆tsmS}t_`V7Juy+zvzoF[XIxcc))WZXY*}[Ժ    I  g'    (   3##!53#53#53264&+3264&+\@d_jstiu~v'[;
jEjjHj[YZpn     fD   32673#"  32#.#"=keeeek瀌0/11/0    I  Y'    %326&+53#5!   !||VjCjSj  I  Y'    353#53#5!   !'326&+3#IVH||jvkrjjk    ;  '   #5!!53#5!!53!53#5jjjjC'ߦrzjSj  fD 2  2#"'&'53327654'&+5327654'&'&#676KLLKT__hc
>>ul:9FG&&GF99ms|[YDgGGHGf%]-.43_j45d45i`32\|a_  JJ`- 
   #"&5462#5!#3!C/.CB^C.DD./BBjjk    '   7533265#5!##"&rXXw^qG'cakk"    F  '    /  $'   353'7#5!#%!53TF4DFvjjq\jj\t   J  '    F'   3!53##5!#!Ce&jjjj]j   fjD R    D   4&#"#>32  #"&'3326>keeeek瀌0//0    f     4&  67   54   d8b22ؘ   e 8   %.54 3  !5>54& 3 1/04|}8'ްeekw   $0 	  +  >54&#"3267#" 5467'7>32 99Hv1g=;Ly3Jv56?Ms232?4&pJ-(oJw>@^CL=>^@L  fD  ( /  " 6&!54&#"#>32>32  #"&'#" 73267(Ry,IEςFIz8F}ba`cc``c)  <D  !  654#5 ! 4%&54!"254%!~<T#dvacgkt|zck^d  fjD   4& #4   ؗ2   fj    653   5=(.2   l  $'     #!3!53#5!23264&+$tZmeflsjjSjur      y'  (  &'&54763!#3!53#"!53676%#"3z=>TU^!zEP0ᑍ$$k4332m??fJJggg:bg I Kk3233    y'  (  &'&'#5!;#5!#3!"'&5476#";2$$0PEzߧUT>=ʭm2334k I gb:gggJJf??.3323  S  '    '   $ 65#5!# &5#5!#iǦj kk9kk    i   !53##!#!2654&#!jjokkcX3j^`z  i   1  4632#"&4632#"&!53##!#!2654&#!E03BB30EE03BB30Ejjokk0FB42BE/EB23ADX3l`^z   \p 0  #!#3!2654&#!#3!2654&#!#3!53#uwjj%jj,jjTijp{5n`o{`o{3d|   ' Y   !  ' Z   R  ' ]    h' #  #5!#!#"'&'53327654'&2jfʞEiy{vjnei^YW5JMVc#Vk4ONO#c85R2Ot<>  d    !253# %5 5!"#563 1`x`1`yCղB?MCB    <D "  3327.54   32673#"'#"&'<ktMp'pMtkeeeeRRb갫bR0/ZZ/0   ;  '    'N   J  '9   l  $'    K  m( /  54;#"3!535$'&=4+532#5!#676-I?_O N_?IC+0CjeWK
jjJZejύI/Hkg0D   $'       !5333!53'!3ZISOjP\iOtNgC;	;;;      #  !#535!3!53#5!#5!!53#5!!534?8w`gRtMN6NNN;;;<uiiu     Ge   #  3264&+532654&+53#5!2#?rhhrg__gxxюd`w|XV<FLMF;<hgJY
m\|v   A  $ .  53#53#5!23##'3264'&'#53676'4&+Gx~~xю2>qi4!;30_g;gF <hgJ,
F7\|v;X+
F#LMF   G    32654&+53#5!2#?uøuxxv׺;<     GG   53#5!#5!!53#5!!53GxxMP4MMN;<uiiu     GG   !53!!#3!!#5!#3G NNN4PNxxu^iiu<3   H   .#"32675#5!#"$54$32:}G:1TnPaid<++!!   G   53#5!#!#5!#3!53!3Gxxowwoxxww;<<!<<3;;h;   G   3!53#5!#?wxxow;;<<    533265#5!##"&lG87K;x|-\ԃ77Tz<<|    G   53#5!##5!#	3#3Gxxowf8jmkBw;<<<<<n;;   G:   53#5!#!53GxxowN;<<=  @   53#5!	!#3!53#3GxJK~ywYx;<S<3;;Gy;     ?0   53#53#5!##3?4~J~M;<lX<<;   ?0   3#3!53##5!>~~xLv;2;;gN<<     H 	     654& "&'.5467>32v6ʝ8`=GEEG=aEG>ȼ86?ef?77d>77     4  !  65452! 547&743"254'͗έs߱:NBr{<rRlރ`K[<nHJ}  G6    32654&+53#5!2+3?^bb^xxőFZUVY;<;    G  #  3#.+3!53#5!2%3264&+j,@rݓ*G>xx݉mi_ZZ_;3.;
M.;;<tkWcPO     P   53!#5!#5!3yMCNx;Ƃł:;     <   #5!# 65#5!# &5ypxv vx=wt<<P<<E   *   ###5!#3#5!#gg^Xvfm\X<<Sq<<   @  	 '  5#"2673#5#"&546;54&#"#5>32VUVXth&eCp\TER
<<r7W~BD?HO;@)'iZ\f)DJ87y{    @  	 *  32654&"#53>32+32673#"'&VUVXth&eCp..TER
<<:87HI4~BE>IP9;@)(jY]f)C&%87x==   @   '  53#3#5#"'&63254'&#"32761oo"45M|ON}M54"..XZ-..-ZX..]<$;]8WW;k98?>|{@?89   @|  
 7 >  32654&#"'>32+32673#"&'#"&'!54&#"#>323267VUVIHYE4N|ZQIS
<<r6Yz#.yJedMa\yL[VP]	4~BE>IP'32ff)CK87x0312x{GFbc3hjkg  %     #53>32#"&'#5732654&#"p"iM||Mi"\XY\\YX\;8658];kq{|}qk    @     3#5#"&632#5354&#"326o"iM|}Mi"mt\XZ[[ZX\;]85686;;kq}|{q   @     !32673#"&54632.#"fcMa]z\UP\
x{GFbbchjjh     @   !  !54'&#"#67632#"'&73267@33dL11]KKyYYQR.-VP\
x>=#$Fb12WUSSch55kg    @U  1  "&54767&'&54632#&'&#";#"2673T0/UU/0|5<<A>''ID%$,-WW-,HEHN^98VO:'(((9OW
x45<8;683FI65  @U  0  2#"'&'53327654'&+532654'&#&#>B/0UU0/|5<<B?''JD%#,,WWX#$EIN_r WO9((((9OV
y46;8:;64EHl     @   +  #"&'53326=#"&632534&#"3265By8=TOf_"iM|}Mi"\XZ[[ZX\};5fnP8568]<kq}|{qk    / 	    #"&4632#5!#3#0***jmPoo4&&4%<<$<    %   !53#53%#5!#3!53'3qipa/ra_[h;;<<;;L     /  0  >323!534&#"3!534&#"3!53#53>32"hEihhe=FMQde=FMReio!c?Ni{BCtu;;4[Mhc;;8YKhc;;;j<?E    /  '  53#53>32#"&'5332654&#"35io!fDn55{l-S'<6496<MPUe;<j=>97yK\i{62DImQhd;  @      26&""&6 '___&Ã      @    >32#"&'53326'&#"@oYXXY@~@D-,R^`0/_KY=_dVVVUN$$AAEF     @    4&"#46 @__&ƀ    @   2653 &5__ڱ     %   "  32654&#"'#53>32#"&'3!53	\XY\\YX\tp"iM||Mi"mp;kq{|}qe<]8658<<   %   #53533#32673#"&5ffu!,-*WY[eS<<K+05QKO^   #   33#5#"&5#533265#n!fCpih<LQUe;i;>py><mQjd    S{   5!53##!#5!2654&#!SZCvCE~Cz[vqa[;c^]6DHKZ     /  /  #"&5#5332765#5332765#533#5#"'&6!44Eihh=FM()eFM)(do c?N54 A!"tu?<\M44d<Y&&44d<;j;?#"      #5!##53#?L4kdK<<g<<  & "  3327.546232673#"'#"&'&CYSI0Gz{G1ISXC@~?`]]_@~?iNH.7c`_c7.HN22  Q  -  32654'&+5327654'&47632#"'3\`p9;m<P7.19tK4vK<,+OrB@f'!cWu24<)"Y',IBSA8P/.=<}   /   '&7#53676'&'53'%+C!Xo֣GI@Σ=09A<v7&<	!'!/6l)    @ " *  &'&54632&'&"32#"&7626&"+|{"BBFD--w+.0>Y'g___MHL	
o2%5*䬬V%     9O ) 7  #5&'&'&'&747673547676567654'&#"t}&,-))&kF>*"!0}A*)1)&|#70"'$="RIA+!9 h?;
~BmqGR"=$*=8=j{=??*   5  !53&'&'"#5676727#5!#327673"'&/EWT&;  &-0BP+RT&<  &,0B<< 7&rC<<v8&qD    /  L  d   . _eu  d   #SC  d    SF  d   Q!~H  d   / cI  d    Qd    32654'&'"#4767672#"&']XY[-6QT3.t7=*8Q{Mj"G;lp{:D>9_E@58    9!OfK  d   tL  d    7eD ) 0  "&'#"&5#5!3265#5!632 !32673.#"yzNS}__zX碞y,R[X[X9kkQn}    f9D  +  4632#.#">32#"&'!532654&#"iX`}6{{6h&&h`ďd__dkt  G    J  `'   %3!53#53#5!#3#갰jjjxkokgk     J  c'   53#5!3#7"'&=Jh*+\b]kok&k<>c^Y     ;V1D  ( 1  #5!>323#'"&'3!53#53!3276!&'&#"i6{|n{zp|{6鱱ēH@<@HJHkd_k،_dkk!kkqd"aped    '  #  $ 6=!%53#5!#!#5!#3# &=i"Ǧj&&kokkokkk__    ' + 3  !3#"&'&'&'#536767!5!!&'&'5!! 76A+**QHֹJS*),Aw=,,=vpU[&ZV@|Raki`bJCGFDL`^kkaR|@kk.~ZiiZ~.kippj    9R   %3#"&'533276=!53#5!ëH>_UR[++ijjh!!`Z><hj@j  @   %  #53#5367632#"'&32654&#"#oo"54N{NO|N45"/.XY\\YX./]<;]8XW";k89~{|~88     @    #"&54632#.#"3267o@~?CYS^__^KZO`cNHFF    @!   .  354632#"'#7670'&547632#&'&#"*WeFrTO`DHYYY@???C,-S^/05=FJo(0QQ9,
WUVN$$@AY     @  -  .#"32654&#"&54632.''7.'773mhcY[aDsv/!. 'c;K:x~ux>w^y<S+L!-05&T,     @U  1  "'&'3367654'&+532654'&#"#567632B99_NIE$#,,WWX#%DJ''?B<<5|/0UU0/56IF36;8:<54x
WO9(((':OV  /+   #.#"3#3!53#5354632+=42A5oootq*T*w*+?QM<$;;<Kcf y   #533##"'&'533276=#53nhh==l.))'<63:<<:\54
	{62"#H:<    @  '  !##"&'53326=#"&5467#"3265YoBy8=TOf_"iM|UZ[[ZX\<};5fnP85|}p{qk    #   3#"'&5#533265#533#'n!fCp45hLQUenn;>88y><m()jd<<  /    3!535#535#533#4762"'noooonn:*);;;;<;4&4%  /   #533"'&o9l>:aR<rJ!#751   /   3!53#5!#nooPn;;<9  H   535#5!#3#3!535HnnPnnnnn;<9;;;   c   %  #'#"'&#53'&#"324632"'DG?_wFm|$fFhP**<7%*+p G<s@2D64&&4     %"   #53327673#"'&5p94<'*)-l>=;_I""6{	
45\ v   3#"&'533276=#53#53	m{k.R'<549ppu\i{62""I:;;     5   53#5!#!535xxow!N;<<   /<  D  #"'&'5332654'&#"3!534'&#"3!53#536763267632<=>k.))'<3:6FM)(deFMReio!12?N45"35Ei44b\54
	{6DI['&44c;;8Y%&hc;;;j< #"@B!";9u     /  1  3!53#"'&'#"&5#5332765#5332765#535om c?N54!44Eihh=FM()eFM)(d<<-;?#"?A!"tu?<\M44d<Y&&44d<   +  #"'&'533265#53676323!534'&#"==l.))'<63:6o 43DohgeLQTb\54
	{62DIQ<j=rw;;m)(hd  /  -  4'&#"3!53#53>32327673#"'&5?MP*+eio!fDn5594<'*)-l>=m)(44d;;<j=>97yKI""6{	
45\   5   53#53#5!##35WW(~JYq;<Nv<<l;    @       2767!'!&'&""'&76 '0()0x+00+YYXY&YXXYB7dd7p<AA<AUWVVVVWU     @  # +  3!535&'&7675#5!#'676'&nokGYXGloQnkFXXFkt4 /0 3//<<DWVD<9CVWC:+A A,+A A*    HT  :  332654&/.54632#.#"#"/32673#"&5HCYWNR<aSVNw5u>CUJIKT\^+*A>7:45<'S-l{HCB42'0J9R]:A..&('?U`8HE26{i\  &  #"'&'533276'&7632#&'&#"L=l.))'<638&C<K=l-*)'<49%
;bPA4
	{62"->lrQ?4	{6#->  % &  #53533#32673#"&'53326=#"&5ffu!,-*Wzl.R'<63:6&eS<<K+05\i{62DI1O^    #  '  33#3#5#"'&=#535#53!5#!3276nnn!fCp45hhh.eeLQ*);;i;>88y+;<m()53     @ +  #"&'&'&54767#5!27654'&'53`993-;<v.399aKM998:'&K#IHX?58)%'&*76>XHI#<]tUh?>>?hV9:]      265#5!#"&5#5!#JBiihEhQm<<xqpy><<m    / "  3#&'&5#537654'&'Ga893-;<CgC:o:OF:'&K#IHX?58)%5.bR<rJ!"J<kV9:     3!533#53LkeK<<g<<  4y   5!#5!!534C%\lD0g0l     4   5!#5!!327673#"'&=4C%\94<())-k?=0g0uJ!"6{	
44]:     42|    654#"5!#5!3632#70h'Z[C%\ST0D0g0lPQ   @ !  #57!#5!#"'&'53327654&M<C$1tYXJFFFGnca87r9g0lFE Z]88`nr   @     &'&#"!32762#"'&76?+/^\0*w+/\]0+YXYXYYYXn[ff[<[ff[{zj{zz{z{  f   73!5u   +f   !!3^ux   f   !5!#3uҔ   +f   #!^ux   2f 	  3##3<t̨tfx  2f 	  3##ttfx   & $     fD& D  9   q  d^'u %   ;]& E  H< qxd& %     ;x'   E   qd& %     ;'   E   suk&   |5u fuf&   h   q  ^'u '   f]& G  < qx'   '   fx'9   G   q& '     f& G  9   q& z '     fu& G     q'   '   f'9   G   q  3Z&/  (     fV[' H   q  3Z&/  (     fV[' H   q3'   (   fVD'^   H   qK3'   (   fKVD& H  ^   qu3m'u   fuVH&^      q  7^'u )   J  q]& I  5< sk& *  Xu f9& J  \   q  ^'}u +   J  ]& K  H< qx'}   +   Jx'   K   q  \'{}u +     ^& K  H< qu& +     Ju& K  '   qC& +  }   JC& K     FK& ,    K& L  H   ]  Z'   ,     '    q  r& .  |L| ;  & N  |? qx& .  I   ;x& N     q& .  I   ;& N     qx'   /   ;xR'F   O   ix2&   q< xq3&   qF= q& /     s& O  H   q'   /   	'H   O   f  k'|u 0   J  ^f'   P   f  ^'u 0   J  ^!& P     fx'   0   Jx^D'   P   d^'gu 1   J  !'    Q   dx'g   1   JxD'   Q   d& 1  g   JD& Q     d'g   1   JD'   Q   sZ'    2   fj' R   sd'    2   fj '}h ' j f  R   sZ'    2   fj[' R   sZ'    2   fj[' R   q  k'|u 3   ;Vf'   S   q  ^'u 3   ;V!& S      q  7^'u 5   J  !& U  (   qx7'   5   JxD'H   U   qx72&   q < Jx&   q4    q7'   5   D& U  H   ^'u 6   s!& V      x'   6   sxD'   V   ' 6   s'M V   e&   6     s'R V   x^'u   sx!'       B^'u 7   ;']':< W   xB& 7     ;x'q& W      B& 7     ;-q& W     B'   7   ;Aq'   W   `xb'   8   7x''R   X   `Kb& 8     7K'& X  R   `b'   8   7''R   X   `bZ'    8   7' X   `bB'    8   7C' X    j& 9  }  7& Y  B  x'   9  x''D   Y   
  3k'~u :   !  d'o   Z   
  3k'|u :   !  f'o   Z   
  3\'{u :   !  !' jp   Z   
  3^'u :   !  !& Z  o   
x3& :     !x'& Z  o     ^'u ;     j!& [  B     \'{u ;     j!& [  B    Z^'u <  9!& \  <   \  ?k'u =   R  f& ]     \x?& =     Rx'& ]     \?& =     R'& ]     J& K    '^& W  9< !  & Z  o  9& \  <   fL& D     J  q]'5<A    3  q !  %3!53'75#5354632#.#"7=ǰCBaSOg**<jjj>`VkKN8:fV  J  q    %3!53#535#5367632#.#"!!F\CBaSOg*%jjjRkkkwE[KN8)Tk  ` 7  !#5!"3!534>3!#"&'33269T_b^9;ޣ5k0YkZX=%H}]YSv.%6gef.TgkkI}*FXMqe2?29[:) fj-  x& $     fxD& D  9    E& $  u f& D  9    :&   $     f& D    :&   $     f' D    &   $     f;& D    u&   $     f & D  x& $  '  u fxf& D  '9  9    Z&/  $     f' D    Z&(  $     f' D    &(  $     f' D    Y&(  $     f' D  x& $  '  u fxH& D  '9  9   qx3& (     fxVD& H  ^   q  3E& (  u fV& H  ^   q  3j& (  } fV7& H  ^   q  \:&0  (     f& H   q  3:&0  (     fV& H   q  3&0  (     f<' H   q  3u&0  (     fV & H   qx3k& (  '  u fxVf& H  '^  ^   q  E& ,  u J  `&   =   qx'   ,   Jx`'V   L   sx'H   2   fxjD'h   R   sE& 2  Hu fj& R  h   s:'    2   f& R   s:'    2   fj& R   s'    2   f;& R   su'    2   fj & R   sxk& 2  'H  Hu fxjf& R  'h  h   nPk'|Hub   c+f& vh c     nPk'~Hub   c+d& Ch c     nPE''ub   c+'}  c   nP^'}Hub   c+7&h c     nxP'H  b   cx+D'h  c   `xb'   8   7x'& X     `bE& 8  u 7& X  H   Zk'|uq   ,f& vH r     Zk'~uq   ,d& CH r     ZE'uq   ,'H  r   Z^'}uq   ,7&H r     Zxk'  q   ,xA'  r    Zr& <  ~|96& \   C  xZ'   <  9''h   \    ZL'| <  9'<   \    Zj'} <  97'<   \    q  f    353#5!#!53!q{|j kkj   ;  i    %3!53#535#5!!5#5!3#!ұi_ijjj(kjjk(   f0&*  6|    f0&*  n    f0&*  C    f0&*  P    f0&*  D    f0&*  Q    f0&*  E    f0&*  R     &  6     &  nX   	  ',  C|     
  ',  P    & Dd     /&T Q     &  E     &  Rs   e&.  6$    e&.  n    e&.  C!    e&.  P    e&.  DB    e&.  Ql      /'   6       '   n     	  '  C|     
  '  P    m':  Dd       'p  Q  JVJ&0  6d    JVJ&0  nX    JVJ&0  C\    JVJ&0  Pl    JVJ&0  D    JVJ&0  Q    JVJ&0  Ex    JVJ&0  Rx      '  6       '   n     	  	A'  C|     
  	Y'  P    'L  Dd       	'|  Q    W'  EX       Q'  RX     J -&2  6F   J -&2  nL   -&2  Cg   -&2  Pd   @ -&2  D     -
&2  Q     -&2  EL    -&2  RO     '  6       '   n     	  p'  C|     
  v'  P    'F  Dd       4'|  Q    '  EX       z'  RX     fj&8  6]    fj&8  n]    fj&8  CN    fj&8  P]    fj&8  D    fj&8  Q    &  6   n&Q n   	'g  C|     
'v  P  '   Dd     D''  Q  Jx&>  6N    Jx&>  n?    Jx&>  C9    Jx&>  PW    Jx&>  D{    Jx&>  Q    Jx&>  EQ    Jx&>  RE      '  n     
  'Z  P    l'  Q    'X  RX     Z"&B  60   Z"&B  n0   Z"&B  C    Z"&B  P,   Z"&B  D<   Z"&B  QD   Z"&B  E8   Z"&B  R@     '&"  6     {&"T n   	  '"j  C|     
  '"v  P    '"   Dd       S'",  Q    '"   EX       G'"   RX     f0d&*  b    f0f%   ed&.  br    ef&   JVJd&0  b    JVJf'    -d&2  bX   J -f(   fjd&8  b{    fjfE   Jxd&>  bc    JxfF   Z"d&B  b1   Z"fG   fW0&2      fW0&2      fW0&2      fW0&2      fW0&2      fW0&2      fW0&2      fW0&2     W'5     W'5      	W'5     
W'5     W'5      W/'5    W'5     W'5      JVJ'j     JVJ'j     JVJ'j     JVJ'j     JVJ'j     JVJ'j     JVJ'j     JVJ'j     W'5     W'5s     	W	A'55     
W	Y'5M     W'5     W	'5     WW'5K     WQ'5E     ZW"'@     ZW"'@     ZW"'@     ZW"'@     ZW"'@     ZW"'@     ZW"'@     ZW"'@     W''5R     W{'5     	W'5     
W'5     W'5B     WS'5~     W'50     WG'5r     f0H&*      f0&*   q    fW0d&2      fW0C&2 *     fW0f&2 %     f07&*  7    fW07&2 -      i&   !  1&   q ;  d&  bd    f  W'5     6  W      2'67&'&5476D'	JO
1!&6"7#,LS#&8F'  J7   7J& j  7  V JVJd'j     JVJD'j  0   JVJf'j  '   JVJ7&0  7x    JVJ7'j  <     d't  b^       f     d'  b^       f   qW'5}     '6  b     d'6(  m  J'7  6    -H&2  U   ! -&2   qL   -&2  `R    -
    -7&2  7d    -&2  8d   ]  m&  u i  2&   q<   Dd'  b^       f   'b  n     v&m$ n   J'7  n   JxH&>  Q    Jx&>   q]    Jx&>  `B    Jx)   VM&:  6D    VM&:  nD    Jx7&>  7H    Jx&>  8<     Zi&   !  Z1&   q ;   pd'  b^       @f     	'   n     77'b   j   7R   sd C   ZW"d'@     ZW"''@  B   ZW"f'@  G   Z"'7>B   ZW"'@  f   ?d'"  b^     =f     ed'">  b^       Wf	   }W''5R  "  Rf v      2&'&75476,"7&"1
OJ
''F8&#SL,#7   ZZs    1 0!!Z  s   ZZs    Zb    /1 0!!Zcb  Zb    /1 0!!ZLb  Zb    /1 0!!ZLb    b    /1 0!!  b ' _J   _     ]& B   B     %  @ i	 	91 990#>7%ME}@?[     @ b	  	91 990>=3NF~+?=[  Z   @ 	  	91 990>=3Z_WE%Z       .'3N~F+P[=     /@	 i	 	991 <290#>7#>7LE|ME}@?[P@?[    r   3@	 b	 	 991 <290>=3%>=3NF~@LE}+?=[P??[     Z`    2@	 	 	 991 <290>=3%>=3Z_W;_XE%ZPE%Z   r    .'3.'3rN~FN}E+P[=?P[?   9;  6@
	 bH H	<2<21 <2<203%%#5#p##pFs     9;  \@1	
 bH
 H<222<2221 2<2<22<203%%%%#55#p##p##p##pFE%'  3!  	 1 04632#"&3~|}}||}    3q   3     
  64632#"M87NN790pNN87N    
   $4632#"$4632#"{M87NN79
M87NN790pNN87NMpNN87N    /    # &@a!	`$    $1 <<220%4632#"&%4632#"&%4632#"&%M87NN79LVM87NN79LVM87NN79Lh8NN87NM88NN87NM88NN87NM    q
L   # 0 < @ L |@B?@=@=>?>MG$j jGj=*j1 ?7`A=iM$>0-'@!':	-:4!D4JM991 2<<2290KSXY"2#"&546"32654&"32654&"32654&#'2#"&5463#2#"&546WddWVbcXcdWVbcXbdVVbaU"ZܻۻZݦ!\ܻۻۻۼ   	 qo 
  ! - 9 D O S ]  2#"&546"32654&%2#"&546"32654&"32654&"26&#'2#"&5463#  &54WddWVbcWddWVbcXcdWVbcXbdbaU"Z<¹ۻZZۻZݦ!&\ۻۻۼ  (`   3(`u    (`',     (`'X  &  ,    (`   #3W`u (`',     (`',  'X         #'#R     s#  #@  Z21 0	5s)+#ssR    #  #@ Z <1 05	+(#^R^sXX    ' t            &  >32##4632#"67654'&jT{:IaM97NN795S4ZI)/.ֶ3B{pNN87N(;eO-       B     !'   '  {   {     +@  M` i1 0KSXY"3#7R      !!3#!"jJj    o   53!5!!5!/^Jjj  E& "  "   |& "   [   |' t   "      ;y   2####5kkv辸//k     (    3+"&5463yv}~}|   (    ';2+v~}O|}  !k   {    hy 
   0.'03"&5462hPX1MpMMpPZ%pMM87N   !o'         BY' H'           d'   #"/&'&#"5>32326茞"܎ކ獞ڒ'XTB	9IMWQB:J   (`$'X  '  &  ,    4  	    2654&" '&5476 0jjj}_^^_R_^^ļrrrrrrr     /    462#"3!53#53}+:*)inoo4&&4%n;;<   5   P@'	
	

	M
 
h\ <<91 <<290KSXY"	!535!533#3TNriTTR  D $  !67632#"&'5332654'&#"#%$01;bacbHNNrfmv:;n?/0%;\

KKJJOTtnl::%    (  ,   27654'&#"67632#"'&54632#.#"85445bch4K&EG?[Z¢]^7<=?OZMBB::lm::pjo<j%LKij	8<RS     O   	#!#5!jg"Rg   5   5   4'&"274'&"276 '&54767.54632l777777700000000KuCB]\\]BCvipWVp'1221122"L*++*LM*++*p;9Yu@??@uW;:bLdt::dLb  3  ,  #"&547632#"'&'53326"327654r/<<L`a]^>5<?M	.-K~5445bc45*KLij	8Q::ml::88jo     k   !!#!5!Oaeak[:[:     1   !!'1[    d    !!!!''ZZ    f   &7aTTa=		=7;<    [   5>54&'5[aUUa7<;7=r  .  !  53#53676323!534'&#"34gm 23Cm34ecKP)*c;<j=99w;;m)(44d;   4 T  d     C {  d   Z  T t  d   dT u  d   5  C  d   DC  d   (T  d   O  C  d   5T  d   3T  d       d   :  d      d   fMg  d   [Mg  d   @d.  d   @d4  d   @d=  d   .  T  d   @d5  d   .  gr  d   %  g:  d   .  g  d   /  d;  d   .  d  d   %dA  d   7Sd  d   %B  d    8  ) -  3'53#535#53#5!3#5!#3#3###35#jxj~jjjkkk~jj=Jj   q 4 p@;-s+!s1e dei`#5-+$(#,"5	.!,",(4 (5299999999991 22<20#" #73&'&5467#73 32#.#"!!!!3267q+筽/--/c|jz/1w/t0h1"0h.>Eh3	Dh吏   uZ  # 0 ;  37367"76!32 !73  4&+3  #"'3254#"8t* @|0vDP4JJH4\V|JJDR_^wژznX,sB7#RmNC   q  ] $ ) 0 5  353#535#535#5!23#3##!3!27!5!654'%!&#!qVVVVI ^FEZ M@8Bj6kVkkq@Xkk^CrjVk     R C  327673# $547#53676?67!5!654'&#"#676323#!8^]^]s{U͹$!7RSXYq||hYՌ :lGFRQ3K=j^=7j<e{@AGH>+ҾA7jb@*j     q ! *  #&'&76753#&'&'6767q+t]d{dCBd|jL?\W<Ld?mo6nXF0׉EaODSn^ `        5!53!5!!3d^wwjww,j   ^   (  !!!3!&'&+532767!7!&'&+7/`Y`/QWF23(ٶD78bޗHD-1H-hOhSY.-REjۋ((kGDhU1Ih    "  353'%5'%#5!#772 5#5! !qN4L4GPPGfYjn؉ntkko؈o%k~     q    %  353#535#53#5!2+!!332654&+qw罕j/kkrkkj    V  &  !   !2#.#"3267'&7;Iz 'Ωܕ+O?>P~~ef@Af(;ϭ;'  _x' &   r  _  ' )   r   `  3   #  353#5!#!#5!#3!53!33!3` R  8Dyyy
yyyydy\     b  l   3#7!>323!654'&#"chHl?'ox!z"sjVlne=fCUjjgE=!H   c  k !  6323!64'&"#'?#7!%ő۰?'ox!#s,h/pgje=Wjjg!HjTNfjN  Z      353#5!#5!#!335Z
mU/yyyy7By\Roiz     L+ 	   /   #"&63264&"!!463"##52765#5!+ghhg-OOuNN̓ԗ#"yԗ#"t+iihhhP">Qrkf     `      )  353#5!2#!332654&+367654'&`R&ppyefjGgfGyyy㭑vx:SR9     V    2 F  $  !   ;#"&2#">54.&7u[xy5y3L5{z/SS:%/?`{|;a?//?`hjdt/92)BKLB̾>cxc#@`UcTR~RSdU_A#$A_UbSQ     `    # ' 1 B  3!.+3!53#5! %326&+#!&'&/67654&'&?Yz-ڙEaV= Ty"&$:%&˦.\1<,0:\W`yÌMyyy!h?#J*^p)7Q%+7fCa#+       ( z@D#
'%! b)	&S"7$S	PPPTPS$T 7)2291 <<22<22999903#3!53#3#53#5)#5#3!53##^VVV+TVV}-DVVABBBB7VBBBhBBBh     L      35!#!!53	3L{5jhA\ }  '"    }' .  !#! 764'5!#5! '&'&'&5476DuP]\Nu9:nc co::{z1-F骩6FӉW֗g[`0/\gհ q   .    m     V     #3!3!!#3!#5:{{{j kLj    F  '     353#5!#3!53!33!#3FPpppy5yyyy5y5  2T'  $ 4  '&7#5!76'&'53%7654&3276&/7#cĚA6\k36|u,>KhO$<.)37X#E̸Gwgnk!4fMJ,:]B`%b*VEZ;h1.p   `      %3!53#5!#5!3#ӿ3yyyy-   `  2     #3!53!3!53#5#!#2yyy-yyy  5w     #7!5!	!#5!	!53CekqM{rd?{L2~Pk        !!6$3   !"$'53   !"kJu^uopkoSUggHF_`2/.2%         !#!5!)+         !5!_++         !#	#3bef9    	   '  %32 65!#73#7!  !%#$65&?}F
o)jIIbSy,G|dyyYgy[M     k  " & 4  4#"26?6$  #7!3!7 '&547	3	&477_n{-
ց$=9cyAdCD p h'=q[Hz*`华"Xico*xeydKX"?Ԗ8pCsL?v   DD    , 3  64'&"3273# '&547  &4?67354B8;&*Y~VNwS3hoL%96XUS\wԹfFS(kO\:qhjG;      	      462"&3!73#7!&>4&"3#*NOox0<1!pp-ha7g`yy5y(%#(<(j5    9 	  # +  462"&#7!!"'7267 2654#>7#LOO%@8x,q%L0!=79wJRp-gb7f`y\'?:^{(<(.A1UK+q     a 	 7  	>54&#"%!>3  #"&'332654&'3!53>7'#FWWfMi.30CsqngDlEO
'cSNfGXVe=yB""kpqZ=yq Pikk`  1  '   33!!#3!#5!#31jjj!Abrjjj  '5  & {  d '5  & {  d 
'5  & {  ' {dd X' ud'5   {   ZX' ud'5   t   q'd'5   {   Zq'd'5   t   dq'd'5   u   5q'd'5     'd'5   {   D'd'5     'd'5   {   d'd'5   u   D'd'5     O'd'5     '5   {   q   ,    q      %3!53#5!+!!Ar|jjj kk   q  F     %3!53#5!+!!!!+վ||jjj kk     q     	#5!###3!53#5!jzkkj jj kk    9        %3!53###5!#	#5!#ݾ ljjj jkkzkk     	    %3!53###5!#	#5!+!!	$r |jjj jkkzkk     )     %3!53###5!#	#5!#)!!!k+ |G|jjj jkkzkk     q      	3!53#5!#	#5!#	3!533	q@IuנLjj kkkk?jj  s       ;      O    %3!53	3!53	#5!#	#5!#!		LP@IԾujjjjjskkkk  ?      	   #  %3!53	3!53	#5!#	#5!+!)!	ؾ²LP@I|ujjjjjskkkk  ?   q   /   s &   q   '   f   0   J  ` L   J  ' L   L   J  ~' L  ' L   L   J  ' Y   L    ' Y    ' L   Y    	t' L  ' L   Y    ' L  ' L  ' L	   Y   J  ' [   L     j' [     ' L   [     	r' L  ' L   [   ;  R O   fD F   f G   J  ^D P    q  	0     )   )   #   !33   !P]P7#˺#7vAtj  LlH    q     &  #5!   )5;   !#67654'&/RP˺#7ܺxxc9LL9jkvtjLlHasXutW  q  	0    ) 5  6'3   !#5#  35&'&76!   )   6#7ܺxx{6 xxNP]P22DLlHa2lk2aDvAt  s   332#"#6$3  #"$s0ا%qzImpaSHISXA@Upad    fD   33276'&#"#67632#"&fwKLLLFGkedde荍?}|ttts@@0   sV    %'"&'&5 !2#.#"32673#apmIzq%0\ldap\@A   4X' ud'5      L ?8 	 L@
	 
<2991@			
 990@D	D@@@@@T	TPPPP]!#53?_
    	 J@	
991@	  /<2990@KKOOOO@[[____ ]!53%	
_     u h8 	 L@
 
<2991@	
 990@KKOOOO@[[____]!3#!u_Qc
cQ  	 L@	
991@
 
 <2990@DD@@@@@TTPPPP ]%#5Qc
cQ_     L h8   3#!#53}__Qc
cQ
      -#553%Qc
cQ
_F_    - Q 	  %'7srfKrKf   P 	  %%7%Kfrfwq     j 	  7%'%sfwjrqwf . j 	  '7.rqwfsrfK  L ??   !'!#53!?_QE
XE  u h?   5!!3#!'uP_EXEQc
cQE   rFf   '7327>2'&""'&'fK^X{|X>>sWX>UV=Kf^XX>JJ>sXX>J%&=  NFB   "&'&"'7>232?%7%]=VU>XWs>>X|{X^K^=&%J>XXs>JJ>XX^f  L ?8   !###5333?\_\TQ
Q        !#5553%%Q
QT\_\  u h8   5!333###uT\_\EQQc
cQQ       3%%#555	QQc
cQQ\_\T    L F8   	!#53Tr.r_Qs
sQ
    n h8   	'57!3#4r.rTI_Es*
*sQc
cQ    L ?8   3#!#53_88
       )5!53%!8
8f_    u h8   3!3#!uf_Qc
cQ     !5!!%#5	Qc
cQ(_       )5!553%%!EQ
QEa_E  L ?c   264&#52#!#530-@@-qq_@Z@
  u hc   !3#!"&463"_qq-@@Qc
cQ➢@Z@     L ?c    #!#53!5462+7264&"â_➞qmm-@@Z@@
mq➢@Z@@-m   u hc    #"&462!3#!354&"mq_m@Z@@@➞qmQc
cQm-@@Z@    L h8 /    3276;3##"#"&"#"'&+#5332327V*!NUI_6%VZ.V.ZV%6_IUN!-~Qc
cQ**
~-  L h?   3#!'!#53!}_\_Qc
cQE
XE   `   -'7%l!
)ev|=f      !#!#53_^ 
         3#!#_Qc
cQ       #53!3_V(
 ^      !3!3#V_( Qc
c        %#5!5!Qc
cQ,v_   F mU4   #53!31_
    Z)'R   #4."%#54>2'AnnAQc
cQ[Ԛ[TnAAnT_uԚ[[   )ZR   4>2%#54."[Ԛ[Qc
cQAnnAuԚ[[u_TnAAnT    Q 	   %'7%5!srfKrKfɢ u?'    ^     	 !  2>4&''7".4677AAnnAA7fKM[[Ԛ[[M7nAAn7KfMԚ[[M    !  7".467%7%2>4&rM[[Ԛ[[MKf7AAnnAArMԚ[[Mfw7nAAn  FE?8   3!!FQ     F ?   5!!#F>   	     	%#>        3#5   uEn8   !5!3nQQ   u n   	#!5!n>Q   	   #3%Q/>      53Q/    Lh'U  ^S     ZZ'V^  T     Lh'S  ^U     L2?'S  S  >    'T  T>     u2h'U  >U    'V>  V     F ,n '  8      F ,n '     8    L ?    %#53!7!!!!'7!%7!_Y&VBDMxVBD33
77^^    L h   !  !'3#7!'7!#53!!!7!7'BY_Y>VBY_Y; 33D337c
c7
^^^^  u h    %'7!5!7!5!7!'3#7!!7'B2	DVBlY_YDD3377c
c^^^    L ?8   %#53!!!!_Y33`
^^       53'#'#
^^G_Y`33  u h8   3#7!5!7'!5!_Y`338c
c^^    #5373c
c^^_Y33`  L h8    3#7!#53!!7'!_YY_Yv1(3338c
c
^^^     53'7#5'
c
c^^^^G_YY_Yv1(333 .   '78KEr|gsiK4sg|rE      7%''/'-K4sg|rErg|sE    jW   %'77?7|rg|sE4Es|gr  . jW   %'74Es|grtKEr|gs    L ?   %#53!!!!!!_=5==|
   u h   3#7!5!7!5!'!5!_=|==5
  L ?8   ##53373#'-_xx~?E
==Ϣm==    u h8   '#53733#@?~xx_Em==m==Qc
cQ       !#!5!5!5!53%!!!!88
88X_GX    3!!!!%#5!5!5!5!	88Qc
cQ88MXG_X    L ?8      #5!#5!##53!#5w_碢
         #53#53#553%#53
VJ_\  u h8      53!53!533#!53=VJ_\EQc
cQ       3#3#3%#53#	Qc
cQ_  u ?8   !##33!?a}E^^  u ?8   !33##!u}aQEEQ   L ?8    !55!!#53d=_=;EE
        %3'3!#53#EE
dd=_=    u h8    !7'!!53#5d=_=EERc
c       #7#%!3#53EERc
cfd=_=          %5!!!'3'3!#53#dEE
dd^SdS=_=      +    %3!53#53#'3'3#!5#c^ș
dEE=_=d22      +     3'!3#!5#73!53#53#3'E77Ed^ș
Py7722d=_= Q      +     3'!5#73!53#53#3#E;d^ș
ŸEy12d=_=OϺ2         )#57#53##3'373!3'3c
cDD
JEE>==_==;H>   +   %  %3!53#57#53##3'3733'3#!5c^ș
cDD
EED==_==;z22    u hg    #3!53#577'!5#35o=_=d22șc
cdEE&      " 	   %'7!!srfKd{rKfd     	   7%'%!5!sfwrqwfQ}d     3#53#53#7#3'3cc
c
EEEE=_=`=_=<(     u h8  " +  !6762!3#!"'&'!%3&'&#"#3276uz2PP2_2PP2	(:4.		(:4.	?2PP2?Qc
cQ?2PP2?	))	))  ZZ'T^  V      uhJ 	    !'3#7!!'3#7!!'3#7!u{[{{[{{[{q

,
  L ?8   !#!#53!3?Т_68
8    u h8   5!3!3#!#u06_ʢE8Qc
cQ8     L h8   3#!#!#53!3}_.._ҢQc
cQ8
8  L ?8   !###!#53!333?MXG_X88
88    u h8   5!333!3#!###uX_GXE88Qc
cQ88     L h8   3#!###!#53!333}_X_UXQc
cQ88
88  L ?8    #53!P=_=Q
    u h8    7%3#!5=_=,QQc
cQ    L h8     3#!#53%7=_==_=Qc
cQ
,    	    
  !3!3*B᫻1+     h-  ) 6@ '!	'!*$ $*9991 990>54&#"#"&54632 #"&54324&#"32IH7$$0e՘ݢeWOmVPmmWKt,>bFأ[t}t{     |     !5!!5!!5gg+     |     !'7#53#5!!5!73!@4Eq#W?4,+*â*â	g    3  V   M@)dd  M wb 91 /90KSXY"%	33^]<;A+    3  V    !	!#3#Ŭ1+       %!!"$$3!!"!![Hج(HA,m,Aޠ(\(oLTTLo     " *  %!!"''&'&$;3#!!'!#"[Hc[mqQV(^cNyLAp,5$A,87T\(8נo[6TLZoLT       !5!2#!5!26767!5!&'.H(خHA,m,AdجoLTTLo    " *  !5!2+'7#53!5!&!&'&326767Hd[mqQVخ]cNAp1,4#A,d+8Uج8נ~\TLZdooLT     5w'  =@"
 V	WVVW V221 22<20!#3!53!3!53#56JJJJJJJ     5w'   !53#5!#!#5!#3'TTwJJJJJJJ     w  J@# 	 <91 990@

*]]!#'.#!!>?3!5	nNI=DN)u?$HNh"%!%)/   1  @	r  1 0!!Ӣ          !!#!5!!!1Ϡ1yyT    F    4632#"&!!#!5!M97NN79M1Ϡ18MN78MLyy  B      S   %#'-73%yLLyL\\8v}vw}  g     &"265$62"&VzTT|TQOSWU|ST<yUQ    g   62"&٥OSUQ   =} 
 *@
	 
	 91 903##'%\sB} }`s-Pb;   =' u s   =o' K       %  .#"326"&'#"&54632>3"31UevYQJPG__KDa*M2CXXieu~९{YY         / D@$	!- $'!!0 $U*U099991 9999032654&#".#"326#"&54632>32#"&2TevYQ1UevYQG__KDa_/YYie9XXie~९{⦮u  I   %!3!~$  I   %!3!ȢT~$  8{   #{e   8#   37#'usususous    8    ###٢ee   8a   3737##'esآes^?ces@es      !3#	ihTJ         3	3##"JT       #4$ #4. x(\(ނ~(خ~ނ      3 $53 ><جނi~ج(~ނ   / % #@  &
XX&1 026732#"&'.#"
#"&546327jPd@7*8	kOeD=!0

l9TA6?&#Hn!bSA8?S /'     /	D'J  '      1y    4632#"&!!M87NN79L8MN78ML    y     4632#"&4632#"!!M87NN79LM87NN79r8MN78MLpNN87NH   y   " - 1  4632#"&4632#"4632#"&4632#"!!M87NN79LM87NN79M87NN79LM87NN798MN78MLpNN87Ni8MN78MLpNN87NH  y'	'J'	'-    '   #"/&#"563232ۿ\e\e'?	E?	E    '   32?632&#"#"'ٮe\e\'E	?E	?        !!#"/&'&#"5>32326c]\
_\Ye]`
a\ZT?	9ILZRB	9I   f    !!#"/&#"5>32326b^`
!_\Ye]`
a\YSB9ILZRA	9I    8 l@9216/$#(!6/,( +!/(/66!921$# +9<291 9999999999990#"'&'&'&#"5>32326#"/&'&#"5>32326c]\
_\Ye]`
a\Xb^`
_\Ye]`
a\dZT?9ILZRB	9IѓYSB9ILZRA	9I    fD     4632#"&!!!!M97NN79M8MN78ML   D      %4632#"&4632#"&!!!!M97NN79MM97NN79MF8MN78ML8MN78ML     D      %4632#"&4632#"&!!!!M97NN79M	M97NN79MF8MN78ML8MN78ML     D      4632#"&4632#"&!!!!M97NN79M	M97NN79M8MN78ML8MN78ML   1k      4632#"&4632#"&!!!!M97NN79MM97NN79MN8MN78ML8MN78ML!    1k      4632#"&4632#"&!!!!`M97NN79MM97NN79MyN8MN78ML8MN78ML!    '  <@!
r 
r	 <291 <2<29990!!!!!'7!5!7! }/H{}?f٠f٠   F     !!!!!!Ҡ      
 &@ r	 <2291 /90	5	!!po       
 &@
	 r
 <<291 /90%!555f          %!!"$$3!!"[ج(ނޠ(\(ނ         !5!2#!5!2>.Y(خނdجނ     $  %!!"''&'&$;!!'#"[20ea#!(cNOނABn8V(\(8נ>+oq?       #!'7#53!5!32>&'&TYRخcN_poނoE80Vج8נĠEA)   j    7!!!!"$$3!!"ج(ނ̠(\(ނ  j    7!!!5!2#!5!2>.(خނجނ   	   !#533 $53 >]=]uجނӢ9
9j~ج(~ނ      4632#"&%3 $53 >M97NN79Mhجނ8MN78ML ~ج(~ނ       !5!3!!3 $53 >
,,جނ++բc~ج(~ނ       3!!!q<        !5!!5qĠ    j    7!!!!!q,<     j    7!!!5!!5q0Ġ        !#!#<r          )3!3Ġr        # +  $  $!!&'&'&!67676!ج(\(ULoA,,AoL6uULoA,u,AoL\(ج'-AoL7uTLoA-u-AoLTLoA-            $  $! 676%!&'. ج(\(J,AA,X,AA,\(جTLooLTLooL           & /  $  $	7	&'& 	676'&	 76ج(\(AooAAoo\(جXoAAoosAA          !  $  $&'&  >'&ج(\(AoaoނA\(جXoAJaAo         #  4632#"&$ >.  $  $M97NN79Mނެ(\(8MN78MLނނ\(ج         )   &"265$62". >.  $  $VzTT|TQOSłނެ(\(WU|ST<yUQނނ\(ج        )  %#'-73% >.  $  $7LL7Lۂނެ(\(vKvwKyނނ\(ج            !!!! >.  $  $VVނެ(\(llނނ\(ج            !!& >.  $  $Vނެ(\(Ӣނނ\(ج           3!%!)!!!!.p0ppq1qq         3!!%!!@@1q       	    3!%!		!	 m$nn#n          3!4632#"&!M97NN79Mf@8MN78MLY@         3!!#٢sgf       #!5!s+         !!#!gg           35!3!          3!!#٢5ˢgf       3!!!!#٢55ˢ/.         3!!!!#٢ss          #!3!!#{^/Ѣ+gf           #!#!3!!#{ ^/++gf     f    3!!!!##7ss+        3!!!'!#٢{[agDzDBf      3!!!!!'!#7!٢<SWAs3;XDn)D         #!33!!#'7#{^{CnAA+gDD[[     f      #!3!!!!!'7#7#%7!{^S4WNtX+Dn)Db         	r      BL  	a  1 04632#"&M97NN79M8MN78ML        	  3	%!	||$$$`j       !!#jH   o   #!5oj     3!"Hj   o   !5!3o/j  ^   !#^c?      $%%$~      	  1 ; F O Y  !! &546;#"&546 !54632+32#"&=54&#"3#"32653264&"2654&#l(ع(DbEDbbEEbbEDbPDbabbabDv(D(غPEaabbDEbbDbaaE	DbbEDb     ^   !3!b?c     l   4732#"'&'.#"0Pd@7+	h $TA6?&H    *u   
#"&546323250uPd@7+	h$DTA6?&Hk-k      T    !!!!%!!Bf6L̔4 + x     # / ; G S _ k w           +7CO[gs  !2#!"543!254#!"+"=4;2+"=4;2%+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2%+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2'+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2'+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;2+"=4;22+"=4#"=43+"=4;2+"=4;2"=43!2#UݓJIIJ%J%%J%%K$$K%J%J%%J%F%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%%%%C%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%$%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%$%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%%%%%%%*$%%%J%%J%%K$$K%%%%%JJJI%%I&%J%%J%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%J%%%% %I%HJ%%J%%J%%J%%J%%J%     .@    7!!!!!!     P   #53 sàZ0  s   3#s     P   #5sˠАWeE&2   P   53Zyi P   #0Ps	  P   3#àР˓[   Pm   #!!s#	q  s   3#s     P   !!s`N	u     Pm   !5!#    Pz   3#z    Pz   3!5!`z Xm   #4763!!"]oyeD9uߑfW  ]   #'&%'53 763:*enK==Mne( =C_AEcH< X   3!!"'&5]9De{oVfd    ]   #3]	    ]m   4'&#!5!29Deyo}Wf    X   &'&3!3#76l<(enM==Kne*!<McEA_I=  ]   3#!5!2765o{eD9ᏞfV  u   3 	w  _  t   !#'%3t!}Z--Pb        !	!!$<   .    73!3!` j   5!j    l   !X      3 	      !@ 	  <j     5!!5!!5!r#B#B#j    <l     !!!!!r#B#B#XXX m     333mjjj  m     !!!@@@mjjj  <j      53353353353<xxxj    <l      3333333<xxxXXXX   n      3333p^^^^    n      !!!!@@@@p^^^^     !!      l   !! l       !!#      l   !!# l       !5! j     l   !! X       !5!$ j     l   !!$ X   j   3!-j    3!-m    j   !!@j       !!@m   j   5!3,jk     !3,X j   5!!@jk    !!@X        3!!- 	       3!!- 	    	  #!!!P@ j   	  33!!P-# k      !!!@# 	    	  #!!!P@ m      	  33!!P-# l     !!!@# 	     !5!3, jk       !!3, X    	  !5!!#@P jk   	  !5!33$,P jk      !5!!$@ jk    	  !!!#@P X      	  !!33$,P X     !!!$@ X     !5!! j    l 	  !!!!- XV  l 	  !5!5!!, jV  l   !!! X     !5!!$# j    l 	  !!!!$# XV  l 	  !5!5!!$# jV  l   !!!$# X j   5!3!,-jk  	  !3!!,-XV    	  5!3!!5,-3jkV      !3!,-X   j   5!!!@jk     	  !!!!@#XV   	  5!!!!5@jkV     !!!@X      #!5!3!,-jjk     !!3!!,- X       !5!3!!,- jk       !!3!!,- X      !5!!!!@ jk       !5!3!!$,-# jk        !5!!!!$@# jk       !!!!!#@#P XV      #5!5!!!!P$@ Vk      !!33!!$,P# XV       !5!533!!$P-# jV       !!!!!@ X     !!3!!$,-# X      !!!!!$@# X      !5!!!!$@# jk      !!!!!$@# X  <j    5!35!<yj  <l    !!!XX       33lUTT        !!@@lUTT     5!5!  x X    333x 		    	  !!!!- ¬B  x  	  !!##xms j  x     !!3!!xm3-s ¬jB    	  !5!5!5!, >   X 	  5!###ljjj     X    !5!!!5!4l t, >  	  3!!!--A   xj 	  333!xjk   x    3!3!kA  	  5!5!5!3,,=    jX 	  5!333jkk    X    5!35!3̠=      3!!!!-- 	AB x     333!!xs 		   x   	   3!33!!-skA	jB        !5!5!5!3,,   X    !5!333xt jk	    X     5!3!5!33t,	       !5!!5!4 B     5!!###sjjj      	   5!!5!3!!t,-sjB     5!5!3!,-XA   j   5!333!jkk     	   5!5!333!XkA       !5!5!5!3!!!!,,-- AB        5!333!!###sjkkjj         !!!!5!5!333!-s t, jBkA        43!!"yY[ p~|     4&#!5!2[Yx p~|  j   5!2653#xY[j~|q    j   !"&533![Yyjq|~  *m   3YѲ/	Y   *m   #3*/	Y *m   #	#	3	3*i    S   jh   5!|j       3?  hj   5!h}j       3 @  hl   |X    !@? hl   !h}X     !@ @ l   5!5!!5ijVV     333PP ?@    l   !!!iXVV     #!#P@P ?@  ;	      ;?   !O ?   ; j   !O j   ;   !O k   ;   !O @   ;   !O    ;   !O    ;B   !O B   ;   !O 	   q   ! 	      ! 	      ! 	      !' 	   I   !] 	      ! 	       3 	   :	'       bm         # ' + / 3 7 ; ?  53!5353!5353!5353!5353!5353!5353!5353!53('O'('('(67576    (  'l         # ' + / 3 7 ; ? C G K O S W [ _ c g k o s w {           #5353353353!3#%3#%3#%3#3#5#53#53#1#53#1#53#75353535313#3#3#3#75353535313#3#3#3#75353535313#3#3#3#bb~! 
  'm       5 9 = A  35#%35#35#%35#%35#35#35#35#35#35!35!#5#!5#35735#35#wNOŶZXYI6Z   B;	  B  q :	         !( @  ;	'    	      ;   !!!;(' 	@   ;'	'  	      ;   !!;@@	    ;   !!!O   ;	'   ;'	'	    ;   !!'(      %   !     %    !!!,7r<R     %    %3!254#!") ) ,orVoVZttV   %&	  	    %        !%!5!5!5!5!5!5!5!5!5!W77777 rrrrr  %        !%3#3#3#3#3#ᰰܲްܲް t88888   %         # ' + / 3 7 ; ? C G K O S W [ _ c g  35#35#35#35#35#35#35#35#35#35#35#35#35#35#35#35#35#35#35#35#35#35#35#35#35#!L$" $"$ܮ.,,.ܮ.,,.,,.,,.,,.   %   
       !33775353535W!yBߢ| T}<B     %   
       !%353555#5#5#57#!yyB| r!C}     %  	       $ ( - 1 5 9 = A F K O S W \ a e j o s  7'#7'7'#7'7'7'#7'7'7'75#7'7'7'7'7'37'75'7'7'7'37'75'7'37'35'!,2|5y2~~2O~~5~|~2~~2~~5~}}}}~~~~}1y|~||~|}|||~|}}| z4|2~12~~~~|~~~~54~}22~}~45~4z231|42~~1O~~4~|~1~}1~~4}}~~}}~~~|1|~|}~|||||~||}}4|1~21~~~~|~~~~44~~11}|~44~~41       7!         %!!!,rv        %!!        !!!cr   "   !    "    !!!,r8V     !   %!!n      !    	!!!bSnr     !%   	    !%    !	       7	        7!	  !%         !%    	x;rRff          7          7	x^rSS      !   7      !    7	xtrSS     !%   !$    !%    	%!bc6r        !         	%!QQZr    !%       !%    	W                  	z      !        !    		#W    !%   	  !%    	uvxx    !%     	>+uv))xx  p)   )  $7632#"' 327$%&#" %632#"'~~~~eMM>yJJJJJ6````qq|qq   #u   "@  91 990	9%-  p)    327$%&#" %632#"'MM>y````qq|qq     r' 	   ' / 7 ? G  %&'&'6767&'&'7%'676727"'64'7&"'62&47\+;.81F9K58.42d;E9G,:.80G9J6&8.;+d1O9FLL&_`JnLL'`_n<1& j(0=Ju &,A=N:0('<1& j(0=Ju &1<>EB0(n_II'[[JnII'[[   p)    % / 3  6%632#"'327&#"6767&'&6pyAAAA,+-,,-+A@@Rqq|qq%%mܱ[0$
%@%|"    p)   ) 7   3276'&#"7632#"' 327$%&#" %632#"'r99:9rr9:99XWXXXXWXMM>yB!!BB!!oe33eje33````qq|qq     p    $  $pkk]Ak^    p     $  $27$%&#pkk]<MAk^a``     p     $  $"3pkk]<MAk^``    p     $  $%&#"pkk]Ak^>``    p     $  $327$pkk]\LLAk^>``    p     $  $"327$!pkk]<MMgAk^```     p     $  $"!pkk]<Ak^`  p})   6%63"'pRqq     )    #2y|q*q   ( 
   2654&#"!|~}}|v<    	(     $%632#"' 327$%&#"!IMM>y_O````|qqqqH(     	(    !#%&#")%632OyyMMqq>~``     	    3327$3!#"'$@1 >qq``   ) 	  %63"æqv`  ) 	  2#%&#u)q>`   	  527$3Muyv`>q   	  "'$33yuMq`     p)   %632#%&#"puqq>``  p   03327$3#"'$puMMuyy``>qq  !%         !%         !%   !    !%   !$ 3! 
   2654&#"4632"&nȊce;~|ddcc||}  %    !%!!d r<     %    !%!!We r<     %    !%!W7 r<    %    !%!W7 r<  %     !%!!!!+c,b r<<     !% 
    4632"&!	W>>VV}V2j>VV>>VVJ      !%    !	c      !%    !	b    p (     7 &  $   %;<*X֖   %  	   !!!!!!,7,rWb<)) Ie  %  	   !!!!%!!,crWbM)<R re  %  	   !!!!%!!,br+ceR re   %  	   !!!!!!,7+r+ceR Ie  p      $  $!327$%&'pkk]]4MAk^Or``O+    p      $  $67$%&#"!pkk]uM14Ak^^O``rOc     p      $  $!%&#"67$!pkk]\M̦4Ak^OT``%OT     p      $  $327$!%&'pkk]\M40̉Ak^``TOTO     !%    7!!xtr R      !%    	%!#Wnr   !%    !xtr    y    !!!,Lr0R<6    y   !06    "K    %!!!,|rhOn    "K   !h#n    !%    !	#W   	       " * 2 : A I C   +  Dи  H   / / F/ H/ $ ' + $ +и ' /013#''%#&'52#"'&5476!!'5%!!'53'5%3'5%3#'sMM7:==-0YG.b#CKSuYGr=;>MM^??@7`d?\gOOOOy>*<?v^  
    < B H N T Z ` f l   3264'&#"&7367'67675673#''5&'&'7&'677&'67'%%&'&'%6767%&'0/CB^0/AC/88pkTcR|NOOfUip88pqUfONNQaQh!$b)dLQk
KRt!%c'd&//^000NN|P_Pfp88poQ`QyNNP\Qgp88pmQ\Py,
M
N>&`7"
bK*V&"g{M	M       ! ) 1a    +  0 , + 0  $ +    + A   &  6  F  V  f  v              ]A     ]A     ]A   )  9  I  Y  i  y              ] , и  (и (/A  0 & 0 6 0 F 0 V 0 f 0 v 0  0  0  0  0  0  0 ]A  0  0 ]  3   	 +    +    +  & " + & " *и & .01 !   !   32 54 #" &#%#7&'67&'6767KJ]_VNEWMCe2ntjnti7IL6a]]pu	otpu	ot        ! ) 1a    +  0 , + 0  $ +    + A   &  6  F  V  f  v              ]A     ]A     ]A   )  9  I  Y  i  y              ] , и  (и (/A  0 & 0 6 0 F 0 V 0 f 0 v 0  0  0  0  0  0  0 ]A  0  0 ]  3   	 +    +    +  & " + & " *и & .01 !   !   32 54 #" 3$3&'67&'6767KJ]_TNEAgntjnti7IL6a]	Uypu	otpu	ot           % ͺ    +    +    +   и /A     ]A   )  9  I  Y  i  y              ]  "и "/  '   	 +     +    +   и /   и  $01 !   !  #$''&'6%&'667KJOR`7IL0cZ
		
		    
       " * 2 : A I X  Y/ Z/ ܸ ܸ  и  /  и / Y и / и /  Bи B/  Cи C/  Eи  Gи G/  LA  L & L 6 L F L V L f L v L  L  L  L  L  L  L ]A  L  L ]  F/ H/  / /  W +  $ ' + $ +и ' /013#''%#&'52#"'&5476!!'5%!!'53'5%3'5%3#'32765'&#"sNN99=>-1\H0e%FKSwZGr=;=NN$E| 1	?'_>?@7`d@\hPPPPy?+<>w_VG{?,rCA    0: 1 @! 7  + 7 	  + 	 . + + .    .9 и 	 и /  к   .9  A  7 & 7 6 7 F 7 V 7 f 7 v 7  7  7  7  7  7  7 ]A  7  7 ] 7 !и + =и . B   / "/ +/ -/ / 
  + 
 ' 2 + ' :  + :   2 '9  и  и 
 и /  2 '9017#'#53'&'&54767&'&=33676=3#32654'&i($lm$(($[Uu&tU[$&uU[[UV$|ddbe|$%
ZSSZ
%_TYYT   *  $   +    +     + A       ]A    )   9   I   Y   i   y                     ]A   &  6  F  V  f  v              ]A     ]  и /  "и  &  /   +    +  	 # + 	 # и  и  !и !/014&#"326&54 32 %##5!&w衤礡PP 䤣L~~ |	  *  $  ! +    +   	 + A   &  6  F  V  f  v              ]A     ]A  	  	 ]A  	 ) 	 9 	 I 	 Y 	 i 	 y 	  	  	  	  	  	  	 ]  и /  и /  &  /   +    +     +   и /  и /  01"32654&'#5!3% #" 5476礡 𳉧פ㤤ף	|~~L     #    +  %    + 01&$76+"'&5'476%7!ttsstEuspid5s
qttrtt<֤ꧦg\ul9  S     / /  и / A   &  6  F  V  f  v              ]A     ]   9  ܸ ܸ   / /   +    +   0152654&#"#4 32 33#!5z{ym㗗yyy{(|   j  Ǹ  / !/    и  / и   	ܸ и ! ܸ A     ]A   )  9  I  Y  i  y              ] и / 	   / / /    +    +   и   к 
  901#53533#632#4654&#"#*jjoon}mZyH{zF       2  4 ˺   +    +  . + + .   ܸ  "и  $и  &и  (и + -ܸ 0и + 2и . 6  / $ ! + $    +   &  + & $ 'и & )и $ +и ! -и   /и  1и  301"32654&7#"&54767!!53#5!!3!!#3!!8OO87ON=0LmkL/>Λ2  1O79NN97Os0LllllL1KӘJJ-     ' <   +    +  4 ) + 4  к   49  и  к   49   49 "  49  #A  )  ) ]A  ) ) ) 9 ) I ) Y ) i ) y )  )  )  )  )  )  ) ] ) +и +/ ,  49 4 2и 2/  9и 4 >  / / :   + :   и : к   9   9   9   9   9   9 "  9 #  9 +  9 ,  9 1  9 2  901%#5#535&'&'5'73'3#'73'676=35'73'33◰zhNgeMjzzTThOʍ7NjYYӖy      ?    / /  и /  и  /  ܸ  ܸ и  A     ]A   )  9  I  Y  i  y              ]    +     +    	 + 01! #!!!'!27674'&#.d ;6zFH%QM_\ǃ$P<  C   #    +   / /  / "/01#"'##56'##"/547 ?^'5@_*SU&/UL	;Yԧ9UP(`XI.      s  2 Q 3/ 4/ ܸ !ܸ 
и 
/ 3 и / ܺ +  9  /  & +   и & /0122732 #&547636=4'&# #4'&#"*tpz&=<xQ>hG:V
Hek%PF5NPB|-&pA&NF   X        / /    901	 &&5	<F:^;"Vgd    G 7 C   +   / /  /    9    9     9 /   901236;2"##'65##"'&5476;235&'&=476ex<JT`(GeRUdfB3	VNT<G48u<B<h	mMD:SGEnQh   B  " < B  '  + '   +   8 +     9   9   9 #  9 =  9 >  9 D   / / / 4 	 + 4 	 к #   9 4 +к =   9 >   901+"'##56#+"'&57547 7;2732;276=4'3&'"~V"0b*SV*8UiQ"_|Q
)w`SgA
?6N#euB?gIo5	F(pZR     w    /  / 	/    9012367632#&5476(t*#\l~ ΨT]1klSI|- X       / /01	&47EosU      H 2 ` g   +   Z +   N +    9   9 V  9A  Z  Z ]A  Z ) Z 9 Z I Z Y Z i Z y Z  Z  Z  Z  Z  Z  Z ] i  / /   ^ +   J  + J ) : + ) и / ) 	и  !и ) ,и ,/ : 7и 7/ J Aи : Qи Q/ : Sи : Uи U/ V : 790126;2"##'65##"'&5476;2&'5476&+"326733276=4/#"567654'&#"35&5hr=)\"IfRUdgC3&=cGkv	==Nr%SZU6vk 6)S<F98:d	mOE:Rp&i	C]&'Ax.+0	nM,W`c      %   +    / / /    9013#"/4?23hH0#!cZ-@  o  3   +     / / /    9    9013#'654'&'#"54732XWz=\9`Y'6?F` 1TFG*֙-@  x/  e /  /  и /  и  /   ܸ и /  ܸ     / /    9    9    901#"=4?2%#"=4?26ձ'VQܖCت+YP*~:ۉ8z"C    o    / / ܸ  и  /  ܸ  и / ܸ и      +    +    +   и /  и /   9   901"'4723!# 5472!5kmOdXX[;Z$}@Ϝ    "      +    +   к   9A     ]A   )  9  I  Y  i  y              ]     / / 
/   +   
  9013363'$6'"-8w?WXc1	     0    / /  и /  и  /  ܸ и /  и  ܸ и /  	ܸ и 	 и /   / / / 	/    9    9 
   9    9    9    9013%#'#3%#)N(4/c}     4 ( ,=   +    +  и  ܺ   9 и  к 	  9  ܺ   9 к   9  и  !и  %и  &и  'и  +и (и  )и  *к ,  9   / / / /    9    9 	   9 
   9    9    9    9    9    9 &   9 *   9 ,   901377#'#'547#5773%%.wwzy.**  <<7CA<<{8AMt     u h8 	  !53#5u=_=c
c  n&   *'$&76'&'6767	h7HUEBy3ި
)R?SRh}	4̡&.M
  n&   567$&54&"n?R)
3yBEUH7hG
Mڡ4	}hS   #u   	  	!	!j.u-1   {   3	#pp     h   	#	3hp      (   53'#'#'##
ɻEEG_Ax/'/@     (   #5337373(7
7EE_A@/'/x    e l2 %  2>4."%#54>2"&'7nAAnnAQc
cQ[Ԛ[[M7AAnnAAnT_uԚ[[Ԛ[[M    lO %  ".4>2%#54."26rMԚ[[Ԛ[Qc
cQAnnAAnrM[[Ԛ[[u_TnAAnnAA   u   % - 5 =  53676$ 33## $'&'336767675&'&'&'#uBV(\(VB_BVVB,AoMTTMoA,,AoMTTMoA,EqqQc
cQqqTLnB-u-BnLTTLnB-u-BnLT  L 8 	  !#534_
  u ,8 	  !3#!u	_4Qc
cQ  L ,8   3#!#53
A__Qc
cQ
    L 8   %#53!!!!_Y	dC33	
^^   u ,8   3#7!5!7'!5!	_Y	33C	d8c
c^^  L ,8    3#7!#53!!7'!	_YY_Y:m3338c
c
^^^  L 8   3#!#53
a_88
   u ,8   3!3#!u	*_Qc
cQ   L 8    3#5!#53!5!
a>Y_Y33
^^  u ,8    #3!'3#7!!7'Y_Y>	33c
c^^^  u ,8 #  !3#!'	#537鷷x_??x==Qc
cQm=====m==  gP,  g,  gP',,   g,    gP', ,   g', ,   gP', ',,  uP  P',  P',  P'',,   P',    P'', ,   P'', ,   P'', ',,  u  P',  ',  P'',,   ',    P'', ,   '', ,   P'', ',,  uP'  P'',  P'',  P''',,   P'',    P''', ,   P''', ,   P''', ',,  u     P' ,   ' ,   P' ',,   ' ,    P' ', ,   ' ', ,   P' ', ',,  u P'    P' ',   P' ',   P' '',,   P' ',    P' '', ,   P' '', ,   P' '', ',,  u '    P' ',   ' ',   P' '',,   ' ',    P' '', ,   ' '', ,   P' '', ',,  u P' '   P' '',   P' '',   P' ''',,   P' '',    P' ''', ,   P' ''', ,   P' ''', ',,  ag,p  agP',p,  ag',p,  agP',p',,  ag',p,   agP',p', ,  ag',p', ,  agP',p', ',,  aP',p  aP',p',  aP',p',  aP',p'',,  aP',p',   aP',p'', ,  aP',p'', ,  aP',p'', ',,  a',p  aP',p',  a',p',  aP',p'',,  a',p',   aP',p'', ,  a',p'', ,  aP',p'', ',,  aP',p'  aP',p'',  aP',p'',  aP',p''',,  aP',p'',   aP',p''', ,  aP',p''', ,  aP',p''', ',,  a',p   aP',p' ,  a',p' ,  aP',p' ',,  a',p' ,   aP',p' ', ,  a',p' ', ,  aP',p' ', ',,  aP',p'   aP',p' ',  aP',p' ',  aP',p' '',,  aP',p' ',   aP',p' '', ,  aP',p' '', ,  aP',p' '', ',,  a',p'   aP',p' ',  a',p' ',  aP',p' '',,  a',p' ',   aP',p' '', ,  a',p' '', ,  aP',p' '', ',,  aP',p' '  aP',p' '',  aP',p' '',  aP',p' ''',,  aP',p' '',   aP',p' ''', ,  aP',p' ''', ,  aP',p' ''', ',,  uap  aP'p,  a'p,  aP'p',,  a'p,   aP'p', ,  a'p', ,  aP'p', ',,  uaP'p  aP'p',  aP'p',  aP'p'',,  aP'p',   aP'p'', ,  aP'p'', ,  aP'p'', ',,  ua'p  aP'p',  a'p',  aP'p'',,  a'p',   aP'p'', ,  a'p'', ,  aP'p'', ',,  uaP'p'  aP'p'',  aP'p'',  aP'p''',,  aP'p'',   aP'p''', ,  aP'p''', ,  aP'p''', ',,  ua'p   aP'p' ,  a'p' ,  aP'p' ',,  a'p' ,   aP'p' ', ,  a'p' ', ,  aP'p' ', ',,  uaP'p'   aP'p' ',  aP'p' ',  aP'p' '',,  aP'p' ',   aP'p' '', ,  aP'p' '', ,  aP'p' '', ',,  ua'p'   aP'p' ',  a'p' ',  aP'p' '',,  a'p' ',   aP'p' '', ,  a'p' '', ,  aP'p' '', ',,  uaP'p' '  aP'p' '',  aP'p' '',  aP'p' ''',,  aP'p' '',   aP'p' ''', ,  aP'p' ''', ,  aP'p' ''', ',,  a'p,p  aP'p',p,  a'p',p,  aP'p',p',,  a'p',p,   aP'p',p', ,  a'p',p', ,  aP'p',p', ',,  aP'p',p  aP'p',p',  aP'p',p',  aP'p',p'',,  aP'p',p',   aP'p',p'', ,  aP'p',p'', ,  aP'p',p'', ',,  a'p',p  aP'p',p',  a'p',p',  aP'p',p'',,  a'p',p',   aP'p',p'', ,  a'p',p'', ,  aP'p',p'', ',,  aP'p',p'  aP'p',p'',  aP'p',p'',  aP'p',p''',,  aP'p',p'',   aP'p',p''', ,  aP'p',p''', ,  aP'p',p''', ',,  a'p',p   aP'p',p' ,  a'p',p' ,  aP'p',p' ',,  a'p',p' ,   aP'p',p' ', ,  a'p',p' ', ,  aP'p',p' ', ',,  aP'p',p'   aP'p',p' ',  aP'p',p' ',  aP'p',p' '',,  aP'p',p' ',   aP'p',p' '', ,  aP'p',p' '', ,  aP'p',p' '', ',,  a'p',p'   aP'p',p' ',  a'p',p' ',  aP'p',p' '',,  a'p',p' ',   aP'p',p' '', ,  a'p',p' '', ,  aP'p',p' '', ',,  aP'p',p' '  aP'p',p' '',  aP'p',p' '',  aP'p',p' ''',,  aP'p',p' '',   aP'p',p' ''', ,  aP'p',p' ''', ,  aP'p',p' ''', ',,    u h8   #!5!3!333###!4̢dL_L`88QQc
cQQ  u h8 !  ###!5!333!333###!`XOX#dL_L8888QQc
cQQ  L ?8    3!!!!#5!#53!5!m00Т2Y_Y33
^^   u h8    #5!5!5!5!53!'3#7!!7'G00Y_Y2'33c
c^^^   L h8   !  #5!#53!53!'3#7!!7')!Y_YjjY_Y33=33
c
c^^^^^    u h8   	#!#3!333#1ldL_EQQQc
cQ    L ?8    3#5!#53!5!Y_Y33
^^  u h8    #3!'3#7!!7'Y_YW33c
c^^^    3!!%#5!5!	8Qc
cQ8Т_6        !#!5!53%!!8
806_ʢ T  `   53'#'##T
G_=|==5 T`   #53373`
_=5==|  L ?8    !5#!#53?_碢
   u h8    5!35!3#ur_EQc
cQ    L ?8 	    !#53!!5#!5s_
   u h8 	    5!3#!5!35!A<_ddEQc
cQ   n h8     #5##53333#!'573}JdL_r.rT1碢QQQc
cQs*
*s    n h8 
    + 6 =   4632#"$4632#"$4632#"$4632#"$4632#"3#~5(&77&(5(&77&(5(&77&(5(&77&(5(&77&(_oN77'&76N77'&76N77'&76N77'&76N77'&7c
c         !5!5!!%	^^}a        %!!5!5QEEQa}  n h8   3!3#!##'573	_.r.rTQc
cQ8s*
*s    n h8   3!3#!####'57333U_XXr.rTXXQc
cQ88s*
*s8    n h8   333###!'57dL_Lr.rTQQc
cQQs*
*s  n h8   3!333###!##'573<dL_LĢqr.rTqQQc
cQQ8s*
*s  n h8 %  33333#######'5733dL_LϢXr.r8XQQc
cQQ8s*
*s    u F8 	  !5!Tr.rEQs
s    n ?8 	  !!'574r.rs*
*s    u F8   !5!3rCTriTr.rEsQQsQs
sQ   n ?8   '7!!'7#'57rTCrir.rTsss*
*s   L ?8   !!#5k8  t h8   %!=!37'kQQnn   L ?8   3#!#53!kr8   u h8   #3!37'#!rkQnnQ  . i   %'%'7fwfKLweKe   . h   %'7%7%xfLffJfx    -/   	'7"'7264m0eKPPr [?Kf1PߠPs ?[    27"&47%7%F?[ rPߠPKe Z@ sPPew    jy   	%'%&462&"Few1PPr [?1wePPs @Z . j0y   64&"'62'7m ?[ rPߠP1we Z@ sPO0eK    Q   %	'	'7	%7%s..sfJJfr-rJfJf     Q   %'	7	%7%	%'%r-rJfJfQss-IffI     j   7		%'%	'7ss-JffJjr-r-fJfJ   - Q   		'7	'7-r-r-fJfJs-.sfIJf    Q     7%	7rrrr~srssrrr   Q     	'	7		~rsr$s~~ssr}r}    Q     ''7%7%%%'%r~rrfqfqEr~s#rfqf     Q     	7	%'%''%7%~rfrfs~f}sf    Q 	    '7%7%	'	7rf~rsrrf~ssr  Q 	    %'%'		7fjrr~sFfrrr  Q     7'7	%7%rsrfr~frr~rfrfq    Q 	    '7%7%	'	'7rf~rsrfrf~s~rf    L h8   !3#!"&'&"'7>2,Q_^>XWs>>XQc
cQI>XXs>JJ>W  ,    %!5!26553%V[
ɢ]`P .    2%#54&#!5؞Rb
dP[VޠP`] F ^	   #!#53!2653^ޠP`]_
[ V n	   33!3#!"&V]`P_V[Pd
bR    W   %>4.'7'7Kj;;jKr[FF[wLԴLrZZfK    ]   %%'%.67fw[FF[rKj;;jwfZ 
 ZrLԴ     rO   '7>$ ."UwfZ 
 ZrLԴfK[FF[rKj;;j    h?E   %7% .'72>bKfZZrLԴ(fw[FF[rKj;;j   e B    %!5!%."'>$ %'KLԴLrZ 
 ZfKj;;jKr[FF[w    r  O  !  533##5#5%'7>$ ."HwfZ 
 ZrLԴJfK[FF[rKj;;j   ( =m   7"&''72>4&SrM[[MfK7nAAnrMԚ[[MKf7AAn G =   267%7%".467a7AAn7KfMԚ[[Mn7nAA7fwM[[M  l9  )   2>4.##".4>76732AnnAAnTMn[Ԛ[[jvuԚnAAnnA:!nxԚ[[Ԛ-r[  l9  )   2>4.'&'#"".4>33AnnAAnMTn[Ԛ[[uvjnAAnn!QAnxԚ[[Ԛ[Q-  Lh 	   !#53!3#!Z__
Qc
cQ  Lh 	   !3#!!#53Z#__Qc
cQ^
     Lh 	   !3#!!#53Z#__EQc
cQ
     u  h8    533##5#5!3#!d_JQc
cQ     L  ?8    533##5#5!#53=_J
     u h8   !5!'77!3#!''Zrr_&rrErrQc
cQrr    L h8  ' /  3#!"'&'!#53!6762!3&'&"#276}_2PP2_2PP2	(t(		(t(	Qc
cQ?2PP2?
?2PP2?	))	))   #   264&"7"&47675553%%QtQQt?2PP2?Q
Q8tQQtQ|2P䠠P2	T\_\  F n8 	  3!#!FQQ  F n8 	  !#5!3nQQ    	  	%#5Q     	  3%#5Q    FEn8 	  3!3!FQQ 	 	  #3%%Q/(F     F n 	  	#!#5!nF(Q     	  3#55Q    u?8 
  #33!a}E^  u?8 
  !5!33#}aEQE    
  !5!!%#	^(    
  %3%!!5	QE(   u ? 
  !!##3(^  u ? 
  3##!58EQ    
  #5!5!^(}a    
  %!!5!538EQa}   F?8 
  3!3#!F Q88  un8 
  !#3!3n QQ      
  	%!!5!88ࢢW     
  #!5!!%Q/W     F ? 
  5!3#!#FW88     u n 
  	#!#3!nࢢWQ       
  3!!5!588     
  5!5!!Q/  F ,? '  8        '8        u ,n '  8      '   8      F}n     3!!!5!'3F(hP|   F ,n    	#!5!5!!#n>>hPQ  F}n     !5!3!!5ndhOQԵK  F ,n    5!!#7!5!F>h>,   F?  
  !5'3!!?6/A    F N?  
  !55!!#?6/>  un  
  !5%!5!3?6AQ  u Nn  
  	#!5!!5n>/65QL  '   8     '8         u?   !264&#!5!2#!u-@@-EqqE)@Z@  u hq     !!!!!3#!44g_qQc
cQ     u h    #"/&#"563232!3#!zu;jnAsozt;jo@s_?	E?	EQc
cQ   L ?8    #"/&#"563232!#53zu;jnAsozt;jo@s_ᓮ?	E?	E
     u h8    #"/&#"563232!3#!zu;jnAsozt;jo@s_ᓮ?	E?	EQc
cQ   uoh8  ' 1  %#"/&#"563232#"/&#"563232!3#!zu;jnAsozt;jo@spzu;jnAsozt;jo@s_?	E?	E?	E?	EQc
cQ   Ld?6    	5!#53d_Ѧ!
     L re   !!#53!?2_'ת
Ӫ    udh6    55	!3#!_//yFQc
cQ  udh 	   !3#!!!"&63!!"u_ ͑ NnnWQc
cQ"͢nn    L k %  %!!"$'&'!#53!676$3!!"!!VB_7BV(A,/,A޴q
qoLTTLo  Ld? 	   !#53264&#!5!2#!5?_NnnN ͑W
Xnn͢    Z +t   %"&767&'&63"3!!"3ff͑NnnNDNnnN+"f

f"͢nnnn   @ +Z   2#5264&#!5!264&#ff͑NnnNDNnnNf

f͢nnnn       46 676 #4&"#4&""f

f"͢nnnnEgg͑NnnNDNnnN     x    '&' &532653265f

f͢nnnn֑gg͑NnnNDNnnN   #u   	u- /'J  '  &      / -  27!5!7632#"&'.#"!!#"&546327jR_Pd@7*8	k^_OeD=!0

TA6?&#Hc!SA8?S  / 4  #"&5463232#5!767!5!7632#"&'.#"!!!lL_OeD=!0

d<_Pd@7*8	b`SA8?SfEZQTA6?&#HM   D    y'	'-    y'	' J'	''-        %	'7%'11m,J+mU1L1wl++l    /"    %77%7	'711m+J,mU11l+K+l   j^    	7%'71M1m+,m1L1ql++l    / j"^    	'%'	'71M1vm,+m11wl+K+l    L h8    !53#5!#537'!55*`=_==_=c
c
EEEE     L ?8 	  !#53?=_=
       	  )#53#c
=_=   	  !3#53Qc
c=_=      	  	'7%'m,J+m9wl++l  /" 	  '7m+J,m9l+K+l    j^ 	  	7%'7m+,m^l++l / j"^ 	  	'7vm,+m^l+K+l   L h8   !53#5!#53*`=_==_=c
c
     3#53#53cc
c
=_=`=_=   uh   %#5!5!Qc
cQ _V    u1h   !5!53^ 
)V_     L?   !!%#5 Qc
c_     L1?   53%!!
 ^)_    %    !%!!W7 r     %    !!!W7     %    !!,7r<R      %    !!cr<R    !%    	vdxx    !%    	u    !%    	!	uv}x   !%    !	x     %  	      # ) - 1 7  #535#5#5#5##5#5#5##5##53#5#5#5##5qrrrrMrqrrrrrrrtr$ttttrtttttrttr     g     353#535#53#5!#!!!!!53qȾGPP{j}}ykk}}Q     $  l   %3!53#535#53#5!3#3#ȱijjjkkjkk     g    !  353#535#5!2#!3!2654&#!!!qȾPj}kj}  qV7 & .  3!&'&+32673#"&5#5!2%!26&#!F32(ٶD78b^wXXrIGƾz'.-REjۋ(({ږac""Akп&,   q   353#5!#!#5!#3#4#!53!3qGGj$dj kkkk U>j~j  J !  353#5!>323#'&#!534&#"3Th3lhd_zj@jVln{j Ïj     q   353#5!##5!#	3#4+3qGͪj$di<j kk5kk3U>j  ;   )53#5!#5!#	3#'&#!533Jihdj@jkk{j    \?   35!#!!#4#\{^j$dHZHD>   R'   35!#!!#'&#RjffhdVf#V{   s  3  25!#3!5#"'&4$2>=4.#"C{vAf^l\++\k[Y8,/<6C2ttkk/IH'[_^[ՅԨ[CtwffD2   fV !  353#5!	!##"&'533265#3qGIrXXw^  j k'k""ca~j         !	###5!#!#55}t}:jkjjHj  s  3  "&'!53#5!>32"32>54.CAf^l\++\k[Y8,/<6C2ttkk/IH'[ՅԨ[CtwffD2     M=   !##5!#	67632#.#"yy+
3<=o/c2^9<7C%kk%|.-D;=\  
  	
 !  	#	##5!#	3	>32#.#"}y!7TZ<GG%Mo?_GT2!Bjkk9@^4!!_[++    !  =   !#	##5!#3>32#.#"w<cL]g^7>66kk->}OY/@?BW    q  {   !3!53#5!#!53# G{{~jj kk     F  '   53#5!3!53#5!#{{fjjSjj  Z@, % 3  %&'&'&54767347632$%67654'&#"o9UA-B<pbC%74-NgB-AV827%'WL6$T@l<sO;/f8oiv<l@T;dllqqK     J $  3327654&#"#5>323!5#"'&JjNKHIW[RU_>Hð6UUz-21
ON^_ށ{Z`!!io65  fjD       6763265&"26$      /\Y+ujhghL/3C9:/]_*67>|}S32   u  2'   !#3!3!!#3!!#Cjjjj'jj!rbA  .Mt  d      	#5!###5!j\m^W~<<<<  V @  732654&/.54$32#.#"!"'32673#".'sq֯hq|ɹ˭MO.00I,Hnl8YF{ZOD>I%HTlt7;A©-+{kz<7=
U8B'gK2C-J[bVF     \V )  35!#!3232673#"./.#\{^#&J2D w"<-? Jl9g[G*lBLHZH7 v  0jHu99)kAG  x   %73#7##3?%73#>L4=8VB1?<=4/Yl2;t;:l    x; "   73!$7.7##5373%#5?3<@&?Юv
ӢztӖ\33Η3:g9J96AI9J     < %   &73!76&77###5373%7(=,1HC#/l>b\mҎw	l;Fd F9\6J9K9    %  67%67$%#3%53#1ީ*G5iK_XI=aY98i좢l&5P1J!?=w163w)  q;   &=3###537%73>cs
v;UK=T3J9J9Kɱ   x>: %  !3###5373%73%?###&5;rv
t
<I=T3J9J9J8pT3I}    x      %#7#7#3%53%?3#;m<rK=s@3H}_ |J8oT     x  7    %#7#'5?%73%733#(;";?wuK>Ks@3J9H:J8pT3       x   !3###5373%733#;-qZvuKT4J9J9oT3   x=    %&=7#7#5353%73*=C=K=@@3QG@AJ9o  k  .  #  %##7#3###573%73%?3:>
;rvsK=T3s@3K=T3J:H:J8o      	 "  ?6767%#3%537ROe(v^(I0dS"UCC%'yh%64"@=[6QQ<YP	&    x     %?3##3##3%73#`q
=q9@J8oT3K=T3b11     x; #  !#7#7'5?3%#5?3%#53?3#\=
A
yzvuq>3q>3J7o<J7o<J8oT   x     !7##5373%#53?3#@uĘtts@3J8o>J7oT3     s;u "  &5#'#5373%73%#5353[#puZk/ԡ;w@3\CJ9RF<5HG:   x  8 %  !3##7##5373%#5353%733#=s
@v	uK=T3s@3J8p<TnIGJ8pT3    x     !7##5353%#53733#@ut	s@3=IHGp;I:oT3   x>    6%67;# 5'5373%6^_l6jv-"&+6wJ888  x55 '  &=7#7#'5?3%#53?%'#5353:?t×z´5bs@3s@3J5p=J8o<UxI=z   >l   '  6%67?#&/6-'3%$*۸)&M[5"YqaOV+ 	.pc%"([T'!H@D}:5.<S/;/   x<p '  %#&5##5373%#5353%733#elUOp ҂vkcU'~Vh>\];=bJ8<gH8l;X<   x     !###5373%?3#=s	v
sH>T3J9L5oT3    x>   &5##537%#5373<u
tǨ>K@3J9p<J9fT   x<   %!53 ##5373%#5373'*?vt\|@3J9o<I:    =   !! #5353%?3#<QDNsKevRxH@ J8oT3   >   !#!#5373%?3#';A__t	sKJ8J8oT       	   ?67?"67%#5353JN]7T3|ZYu2aAV+pzN$>nRQ$B3!BH@    >c #  !#'! #5373%73%733#=s<XYWtrK>T3Kyb J9J9J9oT3    x= %  ! '33 7&! 7'5373%73##3 AJ!G{,t{r	x=k"пH:J8T4DK   >   !7%3##5373%#53733#>>	*珁$@u×rr
s@3J9o<J9oT3  x<X    7%#5'7#5373%73T1v,Ρt[+>8+*MJ:ĜS6     D #  #5?3%73%#53?3##7#3##Bt
tr;	>sH8H8q;H9oT3s@3K<S3     x=   #!!%733#7n>`nsK>KXZJ8T3  y   ?7%676#3$	/-A<c`nOFE1+8y)vaS    x>   &?##5373%#53532Bt´0>s@3J8p<TvI?   x> #  !7#&5##5373?37#53?3#ov#-{s["ڤ}w !3J8qJ8oT3     ! +  7$3##67%3%'3#?67^J[;Lu64(W\Ĳpd*|~CQ\T?- .k8'}De@%xp,     p}   &  #"$54675367673#"&54632jT{:HaM97NN795S4ZI)/.ֶ35B{_pNN87Ne|'<eO-    ''	'J    :   !!#j   :o   !5!#ѿj&     !!3o/j   o   !5!3o/jp   
 !  $#"&54632#.#"#5.54$32
M97NN79*ar~{TpMN78N{+3캶. i   sDj   q  X   J  c'+   F  e&   ,    <  '   $  ##!#3 )5;264&+3!53#5!xʦevwd˦jjpojjSjl   	  (  %!!   ! !#5!#3!52#"]E3gGjLe]kk jjQKJQ     ]D  #  ##"   3#5!#3!5326& Szҍ~ؗ̇32vkijj$8    q  	2  "  !53!3!53#5!#!33!53!3!KJG}}$jLjj kkjjHj     ;D - 8  3!5#"&547!3!53#5!#!63!54&#"#5>325#"326S=kwn_`V퉆tsjsJFQ?jjTikTIydb))vzo  s
   fD      X    3#3֪X0X     X    3#3֪$dX     X    3#3֪X     X    3#3֪X     X    73#3#֪X       X    3##3s눈X0X     X    3##3s눈$dX     X    3##3s눈X     X    3##3s눈X     X    %3#!#3s눈X    X   !#!!^GAX      X   !#3!!^AẌ     X   !#3!!^AX     X   !#3!!^AXd     X   %!!3^X   s 	  5%3'Gll/     s 	  7#%5/ll     W    4632#"&3#50$"11"$0+N ++ ++)4    W    4632#"&530$"11"$0*N+++ ++̍4   WT  d    qV $  353#5!#!#5!##"&'533265!3qGGGIrXXw^j kkkk""ca~j  J9J &  353#5!>32#"&'5332654&#"3Th3lëH>_UR[V_zj@jVln!!`Z{Ïj     6 ,  !53!#!#5!!!"&'332654&+5!3I{.{IOunp
_Jۿj`V89DǬfj    ;6q  6  #5!32673327654'&#533!!"'&'&'&5_J4FHBG/N
YX[[Ofeuopn>Bf]LU_C,dcfekJVyx}|9<BF    XM -  4$!2#4&#"6533"'32673# $547&unp|FpfՐ~
pnu߯B23ސ+T)f/32ħr     f )  "$5467.54632#.#";#"32673Y৊^upcqh2_w'#!}.,~r|fƟ|}  ?1    	!533267!533##"&%rXXw\i˾GcamDk"  ?9'    !#"&'53326=!533%`ëH>_UR[Wi%h!!`Z{hmDkk  ?C   )  2'67&'&5476	!533267!53!!#"&=D(JO1"&6"%rXXw\icG7#,uLT"&9F'camDk"  ?'  ( +  2'67&'&'476'#"&'53326=!53!%16 ;?	',ëH>_UR[WiO%,#a=C.6!h!!`Z{hmDkk   ;  '   #5!!53#5!3!53#5jjj'ߦrijjSj    sD -  332654&/.5463253#.#"#"&'sj|_{ֽT,jjutw[g-Pwv]YFV1-,f .gtRRCR)-.o /    	   !  #533	33!53!3!53!3!	!}7F}}$$jkjjHjjHj:   fTD ) 6 A L  463!54&#"#5>3 >323!5#"&'#"&63!54&#"5#"326%5#"326fn_`VH`V=kH}ln퉆ts7퉆ts?Iydb))D))jsJFxFQ13Iydb<ovzorvzo   	]   +  #53367>3  #"&'&'!3!	2#".bEnpcagD}$jk>bcVobcdagjkQJKQ     f3D # , 7  "&'#"&5463!54&#"#5>32>32  '26& #"32653zNS}n_`V7Ju딗ؗ퉆ts[X[XIydb))WZXYc8vzor      #  3!53#5!# 6#5!#  '&'%!#yXNEʻcdjj kkkkjkM   f-D 
 :  #"3265463!54&#"#5>323265#5!3!5#"&'#"&/퉆ts7n_`V.0yX3k`
?}/vzorIydb))GHkCjjos8L         #533	#5!##!3!묦}$jkzkkj  f?D 
 -  5#"3265#"&5463!54&#"#5>32#5!#/퉆ts=kn_`VhwyNvzosJFIydb))RkkD           !3!533!#5!#!!##ߧ\F;*Ь t|Mjjkkkk[   f?D ' * 5  !5#"&5463!54&#"#5>323#5!#3!##"3265/=kn_`Vts{wwf퉆tssJFIydb))nm"kkk/;vzor  V  "  #533	#5!##"&'533267!3!)Jr]7T_;}$jkDQkk/""dj     f9D 
 ?  5#"326#5!##"&'53326?&'#"&5463!54&#"#5>32/퉆tsC$Qw3yo/c2^9<6C&Gj>?}n_`VNvzog<kkT~YD;<]i8LIydb))    sj   fD   d     2      q     !53#5!#7!53lG{jMkkM     ;  <   %3!53#5!7ijjj{IjI  ~  ' 0  "&'&'&'#536767>3 3#'276!!'&#"ap6/	,6pbEȳ/7pe}s	#	s}o~}odapzzrqbcտzzodak%ܜ D   %  "'&'#53676 3#'2767!!&'& ~|Ԍ}~LBCLTBLLBkوk׌cuggufttf    s
 ) 5 A  "&'&7>3 67>3  #"&'&''2#"!2#"HapmmpbE2%,=bE77pe{~a>-->e{~dapjpbc5>F=bcVod01da>HH>d01kQJKQQJKQ     fD  ! *  "  32676   #"'&''26& !26& hꔗؗؗ32͙c88     qV7    3!53#5! #oo'$jjkD     ;Vq'    3!53#5! #4v3鱱i'vgkkkp75    oV   #& !!##5!>2qe˰{J°yjkrs   JVD   #.#"!!##5!>32jNKh6z-c)ONjVhiok  1     #3!53!#߾V{j kku    ;R' 	  3!#5!#~jjj  oVU   #5!>323"&5&#"{JV[Vkrt{yw$     JVD   #5!>323"&54&#"h3lV[`yVfklnycÑ  oV   #& ##5!>2q˰{J°yqkrs  JVD   #.#"##5!>32jNKh6z-c)ONhiok     A   5!!32673#"&'&5767Aw_@{0Bapm#&^ww*Xdap[%     41'   5!!32673#" 574/!Lw'ްkk2t4|}3      !#5D{  h   b 1 0#h+       d   353#5!#5!#3#4+3dɾj$dEDj kf/kkT!j     JD !  353#5!>323#'&#!534&#"3Th3lhd`yjRkln{j Ñj @   #  "#6763!#!#5!#3!53!3!53/DGfsbGjY[XL$kkk jj~jj    G  '  !5!53#535#5!#!5#5!#3#3!53!3?xxxxowwoxxxxwwo;Dn<<nn<<nD;;h;  @   ' .   26&"%!32673#"&'#"&632>32.#"'___fdLa]yR.+RS,.~M[VP\
Ã  ux{GFbb76678668chjjh     J  ^'   353#5!!#5!#!!#3J^ˠhiTjQEjjji     V     )53!#3!!#!#3{{>{ƾjLk      I      !"3!53!"$54$3!#3h¾rj#k    f     #3!	!53#5!#3#5MhǿH  j k'k jj~j    q  m   %3!53#5!#Gjjjkk    	   	3!533	3	#5!##	#1ŬRZTZ9ykkj99\kkB    l 7  #".546732>54.'.=3OӄΎL_dـq*[c[xH1Oe30[F*!'&?R,.b]R>$&w֢_EЊZ@BWf8ORQC=z|EZ1?'
 FIM')[fr    x  D  4.#"32>%#".54>7>54.'.53BrY]u@?ub]s@
Xvt˘W*Hoh%/ B5"3(\R6eJJbYNNGڝWVۄ?y`@/D*%?_I"*9L6'b7	Q    nG  Q  4.#"32>7#".54>7>54&'".54>32K7^~GYc48fXO~W.0TrFS{Z2E|h_}Kf\2S="(.clUj=?yjN.ol43lsli3)cbfE##DcZ_-*OJF"UQ+ 8V2.#<lR10SqAd=*?Vq      i  4.#"2>.#"'>7.54>32>32#".7>7.#"59^FHgA@e`;Y}O5jaX#@KZ6d[<5Rs^:VE:&X^b/lLNiIvaE&7(19E,J_7+g9 6ytiL(.@=~yl21k%$C4 %;*-#$lJN^6'7""7&UޟW3XvDND|~ժ~'*;RlG  l @  #".54>732654.#".54>32N{v˖U"8GKH"%2Ri61bP1!2<O/jZ<H~cpOso6F~fDmT=)f7K\4t=P07O1#8-$DcLl`+5gd     l V  #".54>732>54.+532>54&#"7.54>32UqArU23Wp>0%2Ur@BgG&7Yp:%.([N3~9rZ8,623^H+Lc:ypcJ+9Zp6If<vG2J_uCEz`C`8CP/Qi> UubT%I}_u
-\R-Ib:cc1)@XpE_^;@k   6R  % b  4&'"32>4.#"32>%#".54>7+".54>32>2>3:.#"m`W$B20B&/E.(KnFAmP,?qZawB
Zst͘X4E(JzW/@kL_X)"$#+~#;6- KlAxaS'H:<K**L3~t67xYTYj^`Nwc&4[|GW{O%Aap/?d	
#6&h    c  M  4.#"32>%4>32>32+532>54.#"#".<ra\h37fU\r>9~ʒB!QQKUx\@ (F]ls9F=*UF,,OmB2AE.*8љʀ<[ggpiEtZX.C, K}ϨxBk 
?
8/l߷J   x 7  #5>54.#"#.54>32%EjMz>C)DaC^r=
(=,{PnG&3S{lnV6@[,?nBm<iZrZzGH{   x M  #".54>732>54.#!52>54.#"32#32]oiȝ`Aao-)$GsUYq@(AR)*lqmV3$! 201%dW'?fBavCل::xXY4
DDQ[/PzS+/omG+=KV.'7#!GoMOrU@Q     	   #'2>54.#"!5>=4&#"!5>=4&#.#"'>7.54>32>32>32	.Ofqt4:[? &AV/2S>"ns7W=  {+D5%Nl~ӠhT%{T}/t LRV)X]4*Hbpy;+b\MK]a'&_\NH[e0:un_F)to]:B{lan;8\C*H/JJ/H*s"@\9)H.JJ/H+sy*G_lr7ѓ]: +Z~+R@(/L6!_~ZW20M88Q44P74L1#De  x  B  4.#"3267#".54>324&#".54>3 6Zu?BlM*/UvG]^ݠY/Pm{@%^\P;mT3,1+3)G]gk1 j'7mmzo5Θx4Zޅ_gE$#*yKT7+1$0b<8_L9'       T  4.#"32>%#".54>3232>7#"&'.#">323Um9<pW4/RrD<mT1WyM{eH(-XW!HHD+H%@<; *?JU/3y=5_$!0!Y[SCpT0]X1itf%$i;8^ka.	'1-S?&' /O;7a_a78M/>\}    ]  .#5>.#"!5>54.#"#.74>32>32 9P`m:-C<>'(IKO-!LKE5;^E8Y>! ,Kd8DS.!4BC=Q4pmaJ+4OkS8m_NJX`-uJۨ{aN&6,<R3/T e)Kj@n'J*JJ*I(@jK)OrrP/Lmzo= @^>=_?!d   x L  #".54>732>'.+532>54.=3Xvt˘W4[zE	+OmBTrF7Ug12`L./LbfbL/t:^y}y^:;\q5Nb8ÄDB}pIqW?t!-53-Z|M!-]bkj40I03=%6VC-/-28\IJiH*Mv   x R  #".54>7>5#"&'#"&'7>54.#"32>53Rzp͜]5Yr=))3"JqN=qV31k6)U)!=/'JjC 6e1!CA;)4<X97M*hsz<SxH|JBArZSyU4A*\NkA?kQU8H[85bP9")-)SA&!09#PE-+  | q  #52>54.#"!5>=4.#"3#.54>3232>7#".#">32>32|7h`pA^<3]K<=9, 3BC?Ca?0Pi9{hn: DjyEDCLgOf<rnm8*bed-[kFCj9sfSQdo6fP`jɬ%Io[xF
':P5w453JJ354w5Q;&	Fz_p-"quS%Q<V7JtDID7YAAY7=  	| M  #".54.#"#54>3232>54.'.54>3"|-Ok|CE~lP.$![7W<)OvMPqH"0;.$ CfF7-)71gU7$k];;UkIFY3"*,O;"u`)#dIiL5)4D-1dQ3&$%Hc     {  s  4.#">.54>7.54>32#".54>7#"&'53267332>54.'+#(		'!+
_MqI$-A*):$'Ea9=aD$:KɁ=)NrfУwM&<`D2">3{<#:stq]'/adINOR+	+" ) &8Sh7,YTJ&1@*F\88\F9c#$sz\`66bduH
=?mRm}|r*LKEp -u84Y    A_ q  #".54>732>54.#"5>5'4.#"#".5732>7>32>32_CږFzhL+3`W'2Qe3NkD%/",3	+""'0<'/P: *&,?H!Ab+8G/Ka8p͜] <YqOQsK	t:Tk<]T& 6FJK,=%#/,	5BHAIJBIB13$?P/!<V5#MW*
TQ0@%)au       l  4.#"32632>54.#52>54.#"#".54>32>32#".5 ?]?H`;;aGsnMpW|T1:wlbzC7X>%:32]W_Z!?ZqK)ij` !NOHwD3WtB@uW3fVstl43iots9SpC,<M/^|I0ixZvF(!N_g/ڝXZہMoQ.%?/,>'=xu`wS;a[]q?>sf   x E  #".54>732>5.#".54>32"&#'%HyEvW36IV^/3%<^u9OlB5`]_3%H9#05GF>gG<qi`)9z80ʅA%;WuKHjL2 m&:U:B[8?fD#C\9 -7B.jGmI%!;S2R    _  '>54.#"!5>=4.#"#.#"'>7.54>32>32([n)BK%	;]B?^??bDAV3-OlG:sj`P=]D=^I]/<K1OiL)Mkp.Pds:fxAx\6r-lPit>+Mh=g&K)II)K&g=hM+-j[p[H.9G\vL9]B$_k80$	gD=ts5V< 4  x @  #".54>732>5#".54>7332>53W{oƖW9dQ%+IxU/LX^+aS!M^AcB!4U=7xdA̊F<m\Q`;	v5BH"5T<*H65f_Sxe*"#J_|U/gW87Vj2   4  R  4.#"32>7#".54>324.#"#54&'&4>32>325Wr<IpL'CjLCz[6Xx{̓R\i*daR3@ G9OOC9!EkJ1YK98HV.J`8E]s@,dvq3%gBɋJS閉הN%;H#!0^fQQfZ2-I0]g6,F1.E.8^|D    C  >'4.#"632+'32>54.#"#4>32)DX/&F4v?yjO-1Pinm-16MJ7-Nk=;r\8Awc+b_WC'(CZ1J.08R4v7W}ihmJ%/sĕua*3Qf3#k*-9EPC6*   {Z `  #".74654>7523267332>54.'5>54.'.53Z2WvG`:X;6u?/-P]48:fPQ~U,0Oe5#S":T8*56*u"8F%+VD*@mR={d?0l_=aGGX@*6+`~~s71hqO]4 >,Kd;50,.8G.$7,$-<O46]QB>`  x  8  4.#"32>%#".54>324.#52)KlB:lS3'MrKFkH$
WrWdE%-Ol|C3aVF!EhHrKv3"`ku>7f;nO2WvHccB!6J,:K+3d_     M > R  4>32>32'>54&#54&#">32#".5732>54.#"8`J.UH89KY1Vn?8COP9G @3R`e+iŘ\R{xЙW6[yDLkC'LpI<rW5pD|^8-E.1F,6g]0J,2ZfQQf^0!#H;%N׉SJɀOg%3qvd,@s     x    .#"32>7%#".54>732>54.'.5467#".54>32>54&'#"&'532>735>7^7<<!@>5)?M(*P>&7[u}|58|qW3?cy;.#/-Le9ArT1 3@ 1'MF:X;=]?<V3o6As*8@E!"@6'	e!SQ)YXo#(" 7RA6:I_AUfI.+B[tHQ`Bd3AV;Gc=<Z=BhVH!8<E*VW)CT+3YB&VHK8&C :<RQy	 *8H>5/.b/z D   Z  J  32>54.#"#".54&#"#54>32>7>7 IuVTrFEoQ9rZ8fZrэI)f9Z?9\A$7?D#<YA,8yrgN-DqR.MVe($B^:JPx"(+6`fRk?=mY3*"/86W  u   #".'#".72>54.#"'>7.#".7>3267>54.#".54>3232>54.#3VuB`~b%Arf[+Uf9*h6bI)_$8C->&'F9!_4zj%0;CK)).G/ :-)IhAQ$#+([XP=$!0 8><:/,=Yb&9bI*H׎%-8"&A/-K6RAZ9`>fJ)p&
$/BmU8nH/Ql=3&,FW+3bL. b|Q5@~oR0(%KSW);fL,\&/<I,=0"'9>wCBT1&P|VRr`*,k;:wo`H) 3$-8 #I]z    x o  #".54>732>54.#75232>54.+5>54.'.532WqyКX.UxK

.RtEFiE"-894!Q"
H>*3JQJ276,.ZY]Z-X2L5@#;L)-Q=$6O32V?$s4,j<\G4c
&7(\{K!IvUJgE("+5,697
!/!%)9cN
(7[B$:.%/A-/A-BYp     x+  m  4&#">#".54>3232>54.'>54.'5>54.'7>O/:Yp@U@7()77)UڅOsS/5gd,h}8_~FP|T+(RI7_GQ)(RI8^KS'*D0@AlDIE.YQ^0@YWz%*5@%$8-"2DY9T|Q(7[vNSvYH%`c $8A0K5(
E -7*%<!5C!aiQ&7l   x  C  4.#"7>%3.'#52>7.54>32Bu\VpD/=@>1lZ:/YQ*NID `ug88cp^DLR+T[/(If|MO}fI'	>@gpL&X^ɮ9	6L//L5	<Z~L!"M    x [  2>7##".54>?32>73#".546732>54.+'yK|cJ3GRZTJWi:
#1%H<Ot`(/AMU+aQ#^pkǚ]-#HlJMqJ$5ZxCt+H^hj//-(9`K)7'Y!(Je>ѝpM0&cwJԂ84q|&s@NRAqT11^VSwG    x h   #".54>732>54.'7'2>54.#"#".54>3!!"3267>32Vj؝Y>hO43XwB:aG(>lV R!KiC-?%4y?@~9,J66]~Gs*G3;29P-]ZV&1S<!}E`>آl76hc9aQDk$)-
	Ka7"DfEkU&'0#?W4/>&1UAXtD$<,<.)BoSv8>a   yN   J  "32>54&#"3'##".54$%5&$.54>323>7'#3>7ww4%HiD+O<#lo<gK+3wco|ʏNz^Ttt5p8jho:N;]C?X6!2"<?2T@Mc:!0^Z/dlZ]0'Va'    0  X  4.#"32>".54>326453>32#"&'#732>54.#"3%/\P'ZM40L_05S9ynŔWB|qANR#"FFC x6D}rAE2jrc$.
(F]42Q8,Kc8ҐKBmP8Q44uKW52 I{.2hL^}K .@&NmE 9ٟu4   >   '  6#%677%#5353%$#767%)fش.cZf'C9Ql0y*%5,P1"(;H@2G>>D3 F    fj # +  7.5%63267#'"632  #" 73  f'huUQsX<>V"H)27=ט+LdP#[$!9)	3   }3  P 1 
020KT	KT[X       @848YKTX   @    848Y4632327&54632#".}E00E2mm2E00E-*.EE0
0EE.-0b^2  ]9f  U 1 
020	KTX       @848YKTKT[KT[X   @    848Y4632327&54632! &0""02||20""04400$$##$$00     J* 5 v@ -1%-$1,/'$64, -'6	,06<2<<<91 @!+$/z$#( q05z,3/<222<2<22290%3!53#5354632#.#"!54632#.#"!!3!53BB`RPfTBB`RPfT(jjRkKNqKNqkjj     J  ' " }@1 z "q
z- =,', 	,'0#<221 /<222990@	$/$o$$]KTX #  # # @878Y'.#"!3!53!3!53#5354632/^z{Ǯ갰WYVUdCjjRjjRk`   J    u@.zz qz	 =',,',0<2<991 /<222990/]KTX     @878Y!3!53#"!!3!53#53546ף'ٮ갰Vjj@dkjjRk`     H  
 ; @%/,-'2-4 %-$7,5'$:, -'6	,0<<2<<<1 @$+$5z$#( q.36;z,19/<<222<2<22290/=12]!3!53#5354632#.#"!54632'.#"!3!53!3!53CBaSOgT-WY^z{ǮjjRkKNq`VUdCjjRjj    F   6 y@-'6
,07<2<@
2,1,'5, <<@#,!'&,/'91 @"&15z.
%4/<<222@0	z
(z!qq220!3!53#5354632#.#"!5463!3!53#"!!3!53CBaSOgT+ף'ٮjjRkKNq`Vjj@dkjj     O .  &#"3!53#5354632!!32673#"&5#53Cr갰W[CZ4FHB.dCjjRk`Nk]LU_k  d V  #.#"#"&'5332654&/.54632&54632!!32673#"&5#5354&#"jjutw-.CCgbj|_{ֽ
V?@<Z4FHBhHE+gtRRC(*)-.HFo,,wv]YFV1-,fW))+`prk]LU_kreoX-    TL 
 ! %  $32654&#"3>3235>54$#"	M97NN79ar~{TpMN78N{+3캶. b  _    !7333!73!3r$U"=jkjjHj    c   $  %!2676&#!732676&+73#7!2!}+!!j$ +jj~}j kä     j   #"&'&7 !2#.#" 3267`kNZ6#DIzBq@@Odap\@A         %3  !#73#7!   !}#xyܺjRcEDjLlHj kvt         #73#7!#7!!73#7!!73 @{(Ra${`{$y({@j k         #73#7!#7!!73#7!3 @{(>a${`{$}j k~j    r   6&#  3267!7!#   !2ZA@qhKmDEYD88kMM_b;<      #73#7!#!#7!#3!73!3 GddG|}j kkkk jj~j    J   %3!73#7!#}Gjjj kk V   733267#7!##"&-rEXw{+q0Gca9kk"   ]   #73#7!##7!#	3!3 GnAvj kk5kk3jj      #73#7!#!73 G0{Hj kk     [   #73#7!	!#3!73#3 =5j k'k jj~j    :   #73#7!#7!##3*y9j kf/kkyj  j    %2 #" "&'&76$3  <@@@@NZ6FuE=D#uNQJKQkdapjpbcVobc    Y    !2676&#!73#7!2#!3}j&%kj kj    {O  0   '&547676$3  ;# '&'2 654'&#" q#uEo:)m$unl2<@6\@6\ӓ\ipbcՕ\im:C@RRQJmcmd        #  3!.+3!73#7!2%!26&#!BT(`bs%';u[REjۊQjj kп&,   ;  )  732676&/.76$32#6&#"!"&;Bs[ʉ!%7h=qd*{HTlt7;A©-+{kz<7=2  `     373!#!#7!3I-{D.D{-Ij`j        #7!# 6#7!#  H88BBjkkkkS    h  w   #7!###7!ެ jzkkjkk       !###7!#3#7!#jz!a?lBjkk9\kk z     	3!73	#7!##7!#	3!73+(ˠPNjjskkkk?jj     e     373#7!#	#7!#3iÌ+ mjkk\kk,j      #7!#!!735+{CbL(z@HZH   D=E  !  %#"'&54776323!326714#"װY>D:?~&]P5wTx39aCj,@    W  (  #7!>32 #"&'#3267654'&#"qiI{^>1{"  6+2%jmd_fKU_dO?[<deO\=pʿ    VUD #  #"'&547 32#454'&#"3267HoM2Ue[4k4:-5w3?kEN 1/0x:@iR`?t|}     (  (  	#7#"'&5476 32#77654'&#"326Ҹ J{^?14{#k# 5+2d_gJU6_d)jiN?[<eeN]=q   W`D  %  327673 '&5476 3 7654#"$,";t9f(hdoN1Rkpㆺ9A&"^>n#?QY>kDM4ceB|  V$ #  #654'&#"!!#72767#73767632a"Ogj)#ܳi35ư#nnC>.'qkb8<kZ[   H9D   1  #"&'733276?#"'&'&77676&#"326?.iQ,`t}]]&IuY8ElÓ61%'s}&&h`\Zŏd_wKh=Ha"Q=>*Si  g  )    >32"'&543!#7!C	P/.	O^hq.D" /B! jk   9[  '  >32#"'&54#7!#"&'733267vQ/.
M0/%f H|8+_"R[nq.D" /B! Wkq!!>!-{  T  e   	3!##7!#7!'ޫOi+jhjkk   T  <   %3!#7!!ijjj     	D /  >323!654'&#"#654'&#"##7!>32aLn>%o"o{#s#o{#sh$Gd|Xuwh>eBSjN8>$EK6>#Dijp{    D   3#7!>323!654'&#"h$Hl@&ox"y#sklne=fCUjjgE=#H     VzD  !  %267654'& "'&5476   ,5,5oM1UoL1FhQ`?uhPa@uckEN2jEN     XVD  (  3267654'&#"'#7!>32 #"&'# 6+3i I{]>1{"tHiO?[<deO\=pʵkd_fKU_d  VD  $  %#"'&'&776763!"32676[ETToY8E=61~%^d0/wKh=HajQ=>*S    8D   #654'&#"##7!>3284jK"sh$Kz-`)4'iok    D /  3327654&/.547>32#654&#" 'Gj$D}S-jeu A5%l3 K1-,qAVIgF*-/G21mWX   p;q   #733!!32673#"'&547@@ZFHS$5 kJk]O. &U_G+P3A     '   33!7#"'&547#7!3267߸$Hk@'n_x!z"'Cjjoe<gCU9kgD="H    M  o'   !##7!677#7!ysM9zmxkdkd    s  '   %6767!###7!3nlfam_xp5Fllm>     f'   3##7!33!}}}4kb7j  9'   #"&'73327#7!67#7c[/_0(^Ay'~yE;*"kc7 k  A[ '  273327#.#"#7&'&/&#"763/li<)
""1^DOFli<""1^DOXV
	9yXV	9y      L     #5333!53!3!73#z23E{}<ؖMy\yy1y#;l    `  R   $ ( : H  353#5! !32654&+32654&+#67>54'&67654'&'`uyHBi?#"L?W-3S3QGyyƤf}v-iCZ5*"(!4M0k?4'%*Ly8!Z$;     `      '  %32+53#5!   !%#676'&UoɏB
YABy,GE+yyy%;53;   `      353#5!#5!!53#5!!533`>yyy!\  `      353#5!#5!!53#5!33`3{yy!y\    V3  $ 2  .#"3267#5!#   !267'&?-ҿT;I6::T	|
Q?= Ʊ&&xNLhi@AAguity'<̫:   `  `    353#5!#33` 8yyyy\ jV{    533265#5!#!"&6765MLaMS2G)S^X+yy"e%L3  `  3      353#5!##5!#	3!333` y-ٓg8?MUyyy!yy3yy\Bu    `  s    353#5!#!533` L%yyy-\    V  {   !  353#5!	!#3!53#3#3%#3Vhg 13呑D|_yyByyysy\     V     * A B C  %2#"   !   %&7>4.'2%{TxyS}|;a?//@`);`?//?`<!%\BKLByddE RSdT`AFB_UcTQRScU_@F@`UcTR1P|x  L ) H  7332654&/.54$!2#.#"!"$654'&/.'&54ؿn۲'
ĵhлђ::AP_cAD;`<1ZHbvrZd+78Ǹ,,gf]a4742O}AH/71GTH<PLP+7O         !53!#!#5!33sgȇd/yu-y\     F  &  #5!#326#5!# !  #.5 έ
q@|&,\yyyy &Up?/Vh_     R    ###5!#	#537R}͍nL%&y\yy#yyZ      	     )	!#5!#	!	#5!#!3737#VĠBH#ΙP#$qP j?\yykyyqr?\iz    
  3    	3!53	#5!#	#5!#	3!53	3ɸ-!6]?:yy;yy\yy5yy          !53#5!#	#5!#3	3`D̦PNbTyyy9yyBy\/    T D  ' 1 ;  3!5#"&546;54&#"#5>3 5#"32634.'&547hFnzjsq_q	cjMORdyp(@1P)NI`yTP?{Wc""ldlRr<3^MUfK`Und  /F   # 7  7#5!>32  #"&'!5326&#"#>54.ǘ-pp-_jmYYmj_yp,00, ;G3# /+4#y#xSQQSyfʯ1"C56	AYXDuQC(    TD  &  #   !2#.#"3267&&4oup~r}zk>.uv.=HL&(**هπxT,qo+    Th    $ 3  54&#"3263!5#"  32#5!3&'&767o`inYZmi`b-pp-pk::W:dd;i6ySQ,*QSxy"rqCstD   TD   % *  4&#"!32673#   !  &=473&5N^[O%|s+ .C%$#Xҩwηzt#(vshjh   ?    $  #.#"!!3!53#535463234pKEPH:UN	R@p
NLsyyy5yklP7    T9hD  + 2 A  !"&'53326=#"  325!4&#"326565#&'&76jsq-pp-`inYZmi`HpW:dd;W::`!!ifySQ,*QSy6V`^CstDrq     ?    ! 1  353#5!>323!534&#"3334.F @}EUkdpp#5/y#x}_Tyy5i#y"-/.3/1+Dg<)  F     # '  4632#"&3!53#5!32654&#"3#pQOooOQpo ((!ppTQooQOonuyy5y-((5 h9=   + 3  4632#"&#5!#"&'5326532654&#">5#oRNpoOQp)<Iq;BI:P () (EBpTQopPOony\PG^{()(YUK+q    F     !  )53#5!#5!#3!533!3#3s}cpp%^@y#xyyyy{X"!>   F   	   %3!53#5!3#?oppyyy#xe"  F  HD 0 = L P  >323!534&#"3!534&#"3!53#5!>3234.%34.#Js=S^h>R_h>np"4.)p&:pyjayyhyyhyy5y]Vc"9y
+Eg<'"<w
)3G,45  F  D  ! 1  353#5!>323!534&#"33%34.F@}EUkdpp#5/y5y_Tyy5i#y5/.3/1+Dg<)    TD    +  %26&"   !  67654'&'&p[Z\\?>-$yy$-/,$yy$,0T q+)w"qq"x!qq"z     /VFD  ! % 3  326&#"%#5!>32  #"&'3!5;#676'&)_jmYYmj_-pp-bp::X;ee;HiʯySQQSHyy!qrDtsD    TVhD  " & 5  3!53#"  325!4&#"32653%&'&76їc-pp-`inYZmi`ypjW:dd;W::!yySQ,*QSy6!CstDrq     ;  LD    #.#"3!53#5!>32#LqPLtF4|Yp3US̵\yy5yok	>5     X-D ) S  7332654&/.54632#.#"!"&67>54'&/&'.'&54`qlsIi^Ձq	lo@SѠcO	E(1Q1 '$+9," E)w}KF@F%)!mnEB6>%51nQ)3"%.).3+
O<X*7.%	?m)     1q  %  #53!!!32673#"&5.4'#˚b',:@>	ۜ
	p#yJyuDVZQ8+);)    /'   )  3!5#"&5#5!3265#5#.'#?}BXkckq*p"40'Ry_T+ykyR51Cg<)     '    !#5!#	#5!#	3ub{Igyy`yyR5      '     #5!####5!##37	37Pȋ}tZ}|%FD';LyyRfyyyR'4     '    #5!#	3!533!53	#5!#	#ϼ<\ɏJwgOyyFyyyyyy5   9'     #"&'5326?#5!##5!#!70s1xGqCCAP(1se4ubMJGc%5yyuyyj  H  F'    35!#!!53	37Hb5wwp4,y9+wF     '   %3!#7!_hjjk   9F'   #7!#"&'733267yf H|8+_DR[okq!!`Z{  `1 	   )  $26&"   !   '676'&'&QYYY>+*>+##,/-##-/XHIpq,, LM-f-     
   !5!5%!!3w;yyw          ,  #>3 !53!57$54&#"!!67654&'&'xzz?`Év?^3@4::TVdB%%ДJ=o^DUlJo**zɴ    * 7 H  >3 !"&'332654&+532654&#"#67>54'&'67654&'&'v!vyB4vyT9;5?9vI_f10*14O###̱((Hx{'(lHC<o21U:U!#1?2JSM  T  =     )53!5!!!3	3#qx  C6ys+o       # /  !>3   !"&'332654&#"#!!67654'&'BZ@zxLw3d[P9uw:P[34(*F?Be<I0dg3}     #  ! + 9  >32  !   !2#.#"26&"64&'&577A_^XZvynwXXWvb!2C!u44qffiѯPW!7N@%mǗ'         	#!#!!7!XE4+()P   j#  ! - 7 A K W   $5467.54$! 4&#"264&#"326>54&'&547&547>54.ȺL\]KKK']rs\]rq^=VPPc""bQPF-[_Z .nZ)J̥Υ$Ⱦ'wwuuշaLTu!IxMOuU!uTMae^|k\^g&\-JF7     o  ! + 8   "26#" 54 !   !"&'3326.547676'&!WWX B^$2<Zvyo( 3upGD {P55iafi97pUk8&   f   ̲  0x  ]3#ǐuf  7   k@
 	1 <20 KTKT[X  @   878YKTKT[X     @878YKTX  @   878Y2#"&546!2#"&546=0EC21CE/EC12CEF.2CC2.FF.2CC2.F    P 1 0@  / /] KTX     @878YKTX     @878Y3#?u J @!  [[999991 <<99990@2 

]]K	TK
T[KT[X  @   878Y@) 
] K
TKT[KT[X     @878Y KTKT[X  @   878Y'.#"'>3232653#"'0)'4`fU$>71,)/ag^CH>9.dv7/ir-    q  P 1 0@  / /] KTX     @878YKTX  @   878Y#u   ?  u@	 91 290 KTX     @878Y@  / //	]KTX     @878YKTX  @   878Y3#'#tt ?  c@	 91 <90 KTX     @878Y@////]KTX     @878Y373tt 7   #."#>32^kk^7667u}|    7  N@ [[ 1 <0 KTKT[K
T[X     @878Y@ 	]332673#"&^k\\k^7667u}|    u  - 	1 0KTKT[X     @878Y2#"&546 /FC22CFF.2CC2.F       3#3#uu  T    #!#uu   Jw`'&        J  `'   %3!53#53#5!3#갰hjjjfjkj         47632"'&!"/.!"B^"!q.""""./B!!  ;93'    #'# 54!2#5!'&#"32+qdof8o~bBKL<kqqZ{_   K'&   H   Jx`'&   V    d9 $ @	$#$!$  $!!%221@!o
b"o  /2<2299dn%0@! ! MKSXY" ]@0&O&p&&&] ]353#5!#5!##"'&'53367653d@NtBA>_+*}A*&Fj kf/kkyPc!`--?9j  ;<   '4632#"&^GDaaDG^F``FDa` S3'{U q =  aB'{[ q    P3' q =P  SZ'{U|d  SZ'{U~d  aZ' q  |d  aZ' q  ~d  vj
3' q =}\  }SX'{Ub  vj
d'}\{}  }ce'|u  vjDZ'}\|@d  }c,:'|(Du  }cS:'u~D  vc
u'}u  vV
Y'}pP  VZ'|dP  VZ'~dP  V'P  }c'u  ^Q&|Mp d  m9D  0 <  4&#"326%4632!!#"'! # &547&'&7&'&32654!"b|{{|)sYZsY:Fڢ:|%|!OkbAB<켓Mt,OVqh8lU~_f    d   !##"&'533265##5!/GIrXXw^yRjkL""ca)kk       U   	!#!	!3!I{h5{.,LL  fjD    %26& "    ;.hؗ`6mF8c32i!B?w   E  2'    )3	2'D%   fjD     #3353#526& "     kkkkUؗj>jjjb8c32  i  '     %53!3!#!##3353#5kfkPkkSkkkkj"jj"j>jjj   S  '   	!53!	!#5!j7fjO`Xj' j   h  '  ! '  %3!535&'&7635#5!#2'"!264&#갸yzzy{?{jjjdWiiXdkghXiiWSȎȎ     f  D "  %353!5>54& !533.54 32 BjCwzڵzvCj㙴:>B.ƹ.B@
   !   !@	ai  1 /04632#"&53L97NN79LC{Dm8MN78NN5      " 8@a	!e`	i#  !#1 0#"&54632#"$54675332673
M87NN79LjU{~q`m8NN87NM/.ֶ3+ʜ{  d  u    C' &  4+5#"3!53463!#"&'53326Bк>9jJKGV'j>jj
k,#r:s     `b  n@% 	 ob`$$$$ !1 <299990`]KTKT[X  @   878Y]#5!#326#5!# !  {廳jkkkkS    q  |   #  353#53#5! 3#!'3 76!%&'&!#{ȾRع~	˼#ܼje}kũ}j!}      & .  %3!5#'&'#5367632#5!3#!3276=6&#"36{|o{zo|{6f@HJIH@jjd_k֊_d)j5kcqddkpb   *  .# !!3267!5!#'&'#53&5 !2z#~]q]ͯ̕(ɻY}x88kMMԛ}b;<  9D ( 1 9  53676325!#3##"&'53326=#'&'33276=6&#"zo|{6hiX`}6{|o@HJIH@k֊_dkk9&&h`ďd_ִcqddkpb    K#   !!!!5!!!!5!!Kh#iii	}ii	}    K#   !5!!5!!!!5!!!KJi	}ii	}ii   #   !#.#!!>73!5	kogV`0xrY3fn#A0*h4$4EX:H   B %  267 !2#"&'.#" !"&54632q[N;OpaV/C͙Qtw\LY61f[v\OY)(v   B	]&     B&  '  {   B&  '  '{  8    B -  27!5!!2#"&'.#"!!!"&54632ttq[N;OupaV/C͸D:w\LY61fZv\OY)(v    B 7  !"&'4763232!5!767!5!7!2'"&'&'&#"!!!m$mp10V/Dk&Uq.-N;Pn}v\O,-*'vebsl:v]L--6133)n     t   3#ZZ   !;   #!tZ @Z        13-      ',        .'X  ',            !#i-    ',        .'X  ',        Z'X  ',  '        ^Qo_<      +    +:             m  p                f        7    q 3     !  J Z        ?       J   J    q sj q q qd s q) q5T qP q1 f  d sb q s q{ V  `9 
 H \           f ;{ f f f J f' J J{; ; ; J' J f ; f J s7 ;' 7 ! 7 R     7   h  \    }   Z      5 Z5 d 3 ;   #5  ^    dJ  s q q q q) q) q) W) _u q  d s s s s s d ` ` ` `Hh qX ; f f f f f f f{ f f f f f J 	  f' J f f f f f  L' 7' 7' 7' 7 ; f f f s{ f s{ f s{ f s{ fj q fu q f q f q f q f q f q fd s fd s fd s fd s f q' q' J) J) i) ] ) q J) q Ji qD J5T{; q ; ;P q ;P q ;P q ;P q ;Z V -  d' J  d' J  d' J q `' J s f s f s f	 w f q J q J q J{  s{  s{  s{  sV 7 ;V 7 ;V 7 ; `' 7 `' 7 `' 7 `' 7 `' 7 `' 79 
 !HH \7 R \7 R \7 R J ;@ q ; q ; s s{ fu qj@ q ; f q s }5;d s u J) q) g q F ; T J 3' J s n cQ su fb@ ; q{  s S<7 ;V W7 ;V  Z' , } qM \7 R f f f  ~ q 'J  ;\   \  q
 q	V f q q
 ;
5 d	{ d J f) V  s f `' 7 `' 7 `' 7 `' 7 `' 7 f f f f sd s f q  s f s f f f; q
 q	V fd s f	; q q  d' J f f d L f f q f q f)) _  s f s f q J q J `' 7 `' 7{  sV 7 ; , G q'  ` f Rk f \7 R f q f s f s f s f s fH ; J ;{; f f .{ %P gV s7 R L L g V q f5T;B s f g JH f f f ;{ f{ f- fv f f f x% e h/ e f;w f f f  ' 7' T' T J# J J I J ; ; 7 7 J&; J+ E fR f f f J Ji J J J T T J J s,;; J<7 ;7 ;' 7 f J !> T R{ R f{ J J J ]  s I fG fU F; ;X Tw fJ J  fD f f ; ; ;& J ;h ; G G? ;" ;v .p . . . .q ." . .c .:     u uu u> .? .          3      3     u uu u Z Z      L    W   . 7d .? .                                     B            A          l  ~      [  l  p                      (  7  #  L                                            "                 p q@ FV m S: :   dU F { f{ f{ f J5T    3 P   .  #  q q N q \ q s) q q1 f  d q s qb q SV H s  ` }) bHg f% e J# J Jg f  J f% eV S J f# J  F T3 F Jh S fB J { fv fm S J Z F  Z#  J f J Z q f F~ = ~ =t M , ` s f s{ f qG kG B  \ ` { f{; s{ f{ fh q ; s1 f c U s s s q qdL q s{ ) q) _5T 4 q1 q q  q  q qL q f q  o q q1 q 41 f q s qb q sV   u  q/ 	! q	! q[ F qd q s	 qv F f W I1 ; J f\ ] ZU FU F  F $9 JU F fU F ;{ fm S C O % JJ Fp Jp J <^ <[ <{ f ; A f f +1 ;{ f s J {; $ F' +  FU F @ < F <	 q ; \ 
 q ; 8 sk f m  m  2[ $` q; ;L g0 ; q ; \  oK Z1 q ;1 d  2  F < q! F	 q F	 q ; s{ fV m SHH    S F' J) q \  q ; qU FU F ;  f  f f q f s f s f \  o] Z f f qU F qU F s f s f s f s{ f      / J FL q1 ; q^ < }] f 4 $	 4Z $ s f9 
 !{ F} F d (s F  } F F d. u   n  m{  = . ` Z d F`    Fd Fj  q2 F l      {u u Z        Z 9 J f J / f 9 9S 9^ f 9p / 9 x 9 9  9; ' 9y m1 T $ 9~ oB T' 9
 9p 9' J$ n Tp 9  ny (O 9  Z R n n n  n nS     n Y  n y,  Q n n[ n y~ n( D n n n n	 n~ n n
 n n n Y n n n n S n n P n} Fu P ( nz n^ 2 n n  n n n n Z ( n n n P  g n n d Zw 2 n n n n n1 n n n  n n~ Z Z2 f I{ f I Im ; f J   FX /9 JU F f{ - f- e- $ f < f fm l  m S O c >  !7 R7 h? d <1 ;B Jm l K $ G A
 G G G He G G GX G) @h ?h ?! H 4d G G\ ? <.  @ @3 @ @3 %3 @ @ @ @ @3 @f / % /1 / @ @ @ @3 % %1 #X S / & Q / @ 9  / .1 # Q / Q 9  7 fe G J# J ; 3 @ @ @ @ @ /3 @1 # / / / Hg %f 5 / /A< /1 5 @ @ H %1 # @  / 4 4 4 @ @          2  2 f q ; q ; q ; s{ fj q fj q fj q fj q fj q f q f q f q f q f q f q Jd s f q' J q' J q'  q' J q' J) F) ]  q ; q ; q ;P q ;P i P q P q 	1 f J1 f J1 f J  d' J  d' J  d' J  d' J s f s f s f s fb q ;b q ; q J q J q J q {  s{  s{  s{ + s{  sV 7 ;V 7 ;V 7 ;V 7 ; `' 7 `' 7 `' 7 `' 7 `' 79 
 !9 
 !9 
 !9 
 !9 
 !    H \7 R \7 R \7 R' J7 !: f J 3 J ` f f f f f f f f f f f f f q f q f q f q f q f q f q f q f) q J) q J s f s f s f s f s f s f s f n c n c n c n c n c `' 7 `' 7 Z' , Z' , Z' , Z' , Z' ,HHHH q ;g fg fg fg fg fg fg fg f 	 
  K eK eK eK eK eK e   	 
 G  J J J J J J J J  	 		 
	F 	v   # J# J### @# # # +   	 
o     f f f f f f   		 
   J J J J J J J J  
Z   Z Z Z Z Z Z Z Z  	 		 
    g fg fK eK e J J# # J f f J J Z Zg fg fg fg fg fg fg fg f 	 
   J J J J J J J J  	 		 
	F 	v    Z Z Z Z Z Z Z Z  	 		 
    g fg fg fg fg fg fg f        J J J J JK 3  P  q      # # !## # # ) ]) i         J J J J   J JHH^ . R        Z Z Z Z Z     }                   V                                Z Z Z  Z  Z          Z   % Z   9  933 V                         
 q q ( () ( ( () ( 3 3 8 J      !V   E         !   !   dN (                                              5 4 /5 55 D5 (5 O5 55 39 9 9  f [v .5 45 5 Z5 d5 55 D5 (5 O5 55 39 9 9  f [ @ @ @d . @v . % . /v .3 % 7 % 8u  q> R   ^ q^ V _a _ `' b' cP Z L ` V `   L } } q V FH 2 ` ` 53 u u   D
 a 1  
   Z  Z d 5  D  d D O ) qp q q q
S q  
 P q sj q1 f J J J J	2 J  	  ;{ f f J	 qj q	 q s{ f s 4 L u L-. L u r N L u L n L u L u L u L L`F Z  u   F F	 u u	 L Z L L u F F L L u L u L.  . L u L u L u u u L u u   u Z u L u L L u L L u L 	# hW |W | 3 3    ^ 5^ 5      p    = = =j  T      + / /	u /             D D                                          ?    ?             ++ *   xZ                                 +_   < < < < < <xxxxxxxhh''''''''''''''''''  '  '  ''q''''''''''          l l   g g ' ' ' '   ' '   ' ' ' '   ' '   ' ' ' ' '  p  p r p p p p p p p p p7 p7 T         p p' ' ' ' 3     ' ' '  p     p p p p' ' '     ' , , , , , ,    , ,S,, ,,,C, ,X, ,B, ,X,   ,x,     u n n      e D ux Lx ux Lx Lx ux Lx Lx ux Lx ux u  uuuuuuuuuuuuuuu u u L u L u L uTT L u L u n n n n n n n u n u n L t L u..-.- L,.FVW r h e r(G L L L u L u L F F F	 F u u u u F u F u F  u  F F F F F F u u   u u u L u u L L u u L LZ@    /+ /+ /   / / L L / / L u u L L    ' ' ' '  P g $b g q q' J q ; \7 RB s1 fB sM	
 
 ! qr F Z J fm u .{  \/ x x C  q x x x + x k + x x) x s x) x) x x  x' x+ x) x2    s xi  x  x( , x xP J      J {  s) q# J F <	  ]	 q1 ;T s f                s s    q J 	 ; X{ fc ?@ ? ? ? ; s	 f	 f	2y fE fE f f s{ f1 d  2K qy ;tT s f q ; o JP 1 ; o' J o J A{ 473 /   d' J@e G @ J Vb I1 f) q	; lR x n R lF l 6 R xR x
 v xt  R xt x  	c { A s x} q x 4t  {t x T x  uQ x xS xR xR x y ;  f  }   JV JV J9 H> F, Ov d                                                                                4 c jjd r)5P1  jb {{ ;V `  h9 {H e D W{ V ( W H g{ T T '  V X   7 p'  M s 75 ` ` ` ` V `j ` ` V V   F55 
/ T / T T Tq ? T ?
 Fh F
 Fw F FV T / T7 ; X 1 /   H { `    T    j o                        T J J ; J  d,xxxxxxxxvx}xvx}xvx}x}xvxvxxxx}   m  d  f E fl ic S h f7J J ' C ` q 	 K	 K  B	 B_ B B B B    .      .  Z         W  

  7  9k  :  ;  <   & : $ 7 $ 9 $ : $ < $ I $ W $ Y $ Z $ \ $  $  $  $$ $% $& $' $6 $7 $8 $9 $: $ $ $ $
 $ $ $ $ $ $| $} $ $ $ $ $ %  & % & & % * & % 2 & % < %  & %  & %  & %  & %  & %  & %  & %  %  & %  & %  & %  & %  & %  & %  & %  & % & % & % & % & %8 %: % & % & % & % &  &  '  '  & '  ' 9 (  & )  )  )  )  )  ) $N ) Du ) H ) R ) N ) N ) N ) N ) N ) u ) u ) u ) u ) u ) u ) u )  )  )  )  )  )  )  )  )  )  ) N ) u ) N ) u ) N ) u )  )  )  )  )  ) ) ) ) )u ) ) ) *  *  & *  * < *  *: -  - a -  -  . k . $ . & . 2 . 8 . : . < . H . R . X . \} .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  . } . } .  .  .  . . .0 .1 .: / 7Y / 8 / 9 / :N / <} / \ /  /  /  /  / } /  /  /&Y /0 /:} / / 1 } 1 } 1  1  2  2  K 2  2 9 2 ; 3 a 3  3 a 3  3  3 $D 3 8 3 D 3 H 3 R 3 V 3 D 3 D 3 D 3 D 3 D 3  3  3  3  3  3  3  3  3  3  3  3  3  3  3  3  3  3  3  3  3  3  3 3! 3# 30 4  4  K 4  4 & 4 & 5 7 5 9 5 : 5 < 5 D / 5 \ 5  5  / 5  / 5  / 5  / 5  / 5  / 5  / 5  & 5  5  5& 5: 5 5 6  6  K 6  6 6 6  6" 7  7  7  7  7  7 $ 7 7 & 7 Da 7 Fa 7 Ha 7 Ra 7 Vk 7 Z 7  7  7  7  7  7  7 a 7  7  7  7  7 a 7 a 7  7 a 7  7  7  7 a 7  7  7  7 a 7 a 7 a 7 a 7a 7!k 7#k 7& & 8 D 8  8 D 8  8  8 $ 8 - 8  8  8  8  8  9  9 D 9  9 2 9 2 9 $u 9 2 9 DD 9 HD 9 L 9 RD 9 X} 9 \ 9 u 9 u 9 u 9 u 9 u 9  9  9  9  9  9  9 D 9 D 9 D 9 D 9 D 9 D 9 D 9 D 9 D 9 D 9 D 9 D 9 D 9 D 9 D 9 D 9 D 9 } 9 } 9 } 9 } 9  9  9 D 9 9D 91} 9 K 9 K :  : k :  : N : N : $ : DN : HY : L : Ru : U : X : \ :  :  :  :  :  : N : N : N : N : N : N : u : Y : Y : Y : Y : u : u : u : u : u : u :  :  :  :  :  :  : Y :u : : :1 : & : & ;  ; $ ; & ; 2 ;  ;  ;  ;  ;  ;  ;  ;  ;  ;  ;  ;  ;  ;  ; <  <  <  <  <  < $a < & < Da < HN < L < RN < XN < a < a < a < a < a <  < a < a < a < a < a < a < < < N < N < N < N < N < N < N < N < N < N < N < N < N < N <  <  < N <) <1N =  =  I  I  I  I  I & I  N  R  U  U  Y  Y  Z  Z  [  \  \   7  9  :  <  I  W  Y  Z  \       $ % & ' 6 7 8 9 :    
      | }       7  9  :  <  I  W  Y  Z  \       $ % & ' 6 7 8 9 :    
      | }       7  9  :  <  I  W  Y  Z  \       $ % & ' 6 7 8 9 :    
      | }       7  9  :  <  I  W  Y  Z  \       $ % & ' 6 7 8 9 :    
      | }       7  9  :  <  I  W  Y  Z  \       $ % & ' 6 7 8 9 :    
      | }        &       &   &   &   &     K    $  9  <             :  }  }         K    9  ;     K    9  ;     K    9  ;     K    9  ;     K    9  ;     K    9  ;  D    D      $  -            D    D      $  -            D    D      $  -            D    D      $  -                      $a  &  Da  HN  L  RN  XN  a  a  a  a  a    a  a  a  a  a  a  <  N  N  N  N  N  N  N  N  N  N  N  N  N  N      N ) 1N     &                              7  9  :  <  I  W  Y  Z  \       $ % & ' 6 7 8 9 :    
      | }       7  9  :  <  I  W  Y  Z  \       $ % & ' 6 7 8 9 :    
      | }       7  9  :  <  I  W  Y  Z  \       $ % & ' 6 7 8 9 :    
      | }                          &    9     &    9   &     &    <   :  7Y  8  9  :N  <}  \          }     &Y 0 :}    7Y  8  9  :N  <}  \          }     &Y 0 :}   O 7Y 8 9 :N <2 \     2  &Y0:2	 }	 }	 	   & 7 9 : < D / \   /  /  /  /  /  /  /  &  &:   7 9 : < D / \   /  /  /  /  /  /  /  &  &:       K    6   "" "  K" " 6" ""& & & & & & $& 7 && Da& Fa& Ha& Ra& Vk& Z& & & & & & a& a& a& a& a& a& a& a& a& a& a& a& a& a& a& a& a& a& a& a& a&a&!k&#k&& &0 D0 0 D0 0 0 $0 -0 0 0 0 0 7 7 7 D n7 F U7 G a7 H V7 I 7 J a7 L 7 M 7 P }7 Q }7 R U7 S 7 T a7 U }7 V 7 W 7 X 7 Y 7 Z 7 [ 7 \ 7 ] 777 : : : : : : $a: &: Da: HN: L: RN: XN: a: a: a: a: a: : a: a: a: a: a: a: <: N: N: N: N: N: N: N: N: N: N: N: N: N: N: : : N:):1N? ? } $} - /} } } } } }  7 9k : ; < &: $ - /       $ - / 9 9 : 9 ; 9 < 9        9: 9 7 9 : ; 9 < Y Z &: k $ & 2 8 : < H R X \}                                } }   01:      &        D   D   D   D     4        x       X    H        d    	  
@            P  ,       L              ,    \      P    d    @    \        \  !X  #   #  $|  %L  '4  )  +  +  +  ,<  ,  ,  ,  -  .  /4  /  0|  1,  1  2  3  48  5   6  7@  8p  98  9  :x  ;<  <   =t  >(  >  ?  A  D  Ep  F  F  G  G  H`  H`  H  I  J8  K<  L  MD  Np  O8  Ph  Q`  Q  R  RD  S  T   T  T  U  V  V  W  X<  X|  X  YL  Y  ZX  Zx  Z  Z  [\  [t  [  [  [  [  ]T  ^  ^  ^  ^  ^  _   _  _0  _H  _`  `  `0  `H  ``  `x  `  `  a  b(  b@  bX  bp  b  b  cL  d  d  d  d  d  e  e(  f  f  f  f  f  g  g$  g<  gT  gl  hd  h|  h  h  h  h  h  ix  j  j  j  j  j  k   k  k  k  l  l   l8  lP  lh  l  l  l  l  l  l  m  m(  m@  mX  mh  nH  n`  nx  n  n  n  n  n  o  o   o8  oP  oh  o  o  o  o  o  o  p  p(  q  r  r(  r@  rX  rp  r  r  r  r  r  sP  st  s  s  s  s  s  u  u  v   v  v0  vH  v`  vx  v  w,  w  w  w  x  x,  xD  x\  xt  y4  z  z,  zD  z\  zt  z  z  {|  |  |  |  |  |  }   }  }0  }H  }`  }x  }  }  }  }  }  ~  ~   ~8    t                4  L  d  |              $  <  T  l      T    l  |    \    `          x         x  8    $    (      H    4  p          <  T  l          @    p          X        l    D      \    D          d    ,  H  `             0  H  `  x                 8  P  h                (  8  P  h          L      $  <  T  l                ,  D  \  t    T  l    $         0  H  `  x                 8  P  h                (  @  X  p            d        l        P              (  @  X  p            P    `      P    p    @    X    $                (    \    D    4    p      <    x        °  ð  D    ŀ    |    \    |    \    (  \    H  ˠ    |    x  8    H  ό    Ѐ     |    ,  Ҭ    ӌ    4  Ԩ      @    8    $  x    l      p    ,  ی    X    8  ݌    <      X        \    4        P       \      <      X             T    4      d  t        @  x                     0  @  P  `  |             ,  H    H    X  |    ,      `      <  `             4  H  \  p                  ,                 <  l      (  D  X  l          P  t          T  h  |          4  X          $  8  L  `  t    , L l    L        t    ( ` |    @ P h     $ < L h        $ X        	 	 	( 	 	 	 	 	 
  
 
 
 h @ X p            0  <   ,  d  H X  H   X  x $  p      L  \    x 4 4      @       ! ! "| " " #  #0 #@ #P # # $ $X $ $ $ % %( % & & 't ' ' (, (< ) ) * * * * + + ,L ,\ , -l -| / / 0 0 1 2h 2x 2 2 3 3( 38 3H 4 5 5  5 6L 6 7 8` 8x 9 9 : ;t ; <\ =  =d > >( ? @h A4 Ah BP C  C D D EL E\ El E E G G G Hd I I J K` K L M| N N OT O O P P P Q Q  Q R S S S S T U  U V V W, W X` Y Yx Y Y ZT Z Z [ [$ [ [ \L \ \ ]@ ] ^@ ^ _h _ _ _ `d ` a< a b bd b c cp d d d d e  eD eT e f  f` f g< g g hH h i  i i  i8 iP i jl j kL k l lD l\ lt l l l l l l m m m, mD m\ mt m m m m m m n n$ n< nT nd nt n n n n n o o o4 oL od o| o o p p$ p< pL p q8 q r\ s s s$ s4 sD t  t u u v v w  w xX x yX y z z {0 { || | } ~( ~ \  \  ` 4    L    x 0  T d       ,   p  @ t     `     h 4  @    P  <    l  \  D l      `  @  `    8    T   4   $  $   0  0     P   D  h  @  H  l   |  8     d ,  L      8  à  Ő Ɣ < <   p ˸   p Ј Ѩ h P D $ 0  נ h  ټ L ژ   @ ܜ  D ݐ $ l ް    d t    x    @ t  D     p       (     ( 8      |   `   @    `   T   x   H  8  d  ,       ,  $ h   (   ( x   8  (    d x      D X l                l    8   `    t   @    	 	 	 
@ 
 t  \  T   H   D   @ d     ( @ X p         0 H ` x         8 P h        ( @ X p         0 H ` x         8 P h        ( @ X p         0 H ` x       ( @ X p         0 H ` x         8 P h        ( @ X p         0 H ` x         8 P h        ( @ X p       | ! !( !@ !X !p ! ! ! ! ! "  " "0 "H "h " " " " " #  # #0 #H #h # # # # # $  $ $0 $H $` $x $ $ $ $ $ % %0 %H %` %x % % % % % & &  &8 &P &h & & & & & ' '  '8 'P 'h ' ' ' ' ' ' ( (( (@ (X (p ( ( ( ( ( )  ) )0 )H )` )x ) ) ) ) * *p * * * * * +  + +0 +H +` +| + + + + + , ,$ ,< ,T ,l , , , , , - -$ -< -T -l - - - - - .  . .8 .P .l . . . . . / / /4 /L /d /| / / / / 0 0 08 0T 0l 0 0 0 0 0 0 1 10 1H 1d 1| 1 1 1 1 1 2 2$ 2< 2X 2p 2 2 2 2 2 3 3 34 3L 3d 3| 3 3 3 3 3 4 44 4L 4\ 4t 4 4 4 4 4 4 4 5 5$ 5< 5L 5d 5| 5 5 5 5 5 6 6$ 6< 6T 6l 6 6 6 6 6 6 7 7, 7D 7\ 7t 7 7 7 7 7 8 8 84 8L 8d 8| 8 8 8 8 8 9 9$ 9< 9T 9l 9 9 9 9 9 9 : :, :D :\ :t : : : : : : ; ;L ;\ ;t ; ; ; ; ; < < <4 <D <\ <x < < < < < =  = =0 =H =` =| = = = = = > >  >0 >H >` >x > > > > > ? ?  ?0 ?@ ?X ?p ? ? ? ? ? @  @ @( @8 @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ A A4 A\ At A A B BX B B Cl C D$ D EL E E E F F F F F F F F H I I< IT It I I I I J8 J J K$ K8 K\ K K L L L4 LP L L L M  MD M` M M N N N N N N N N N N N N N N\ N O0 O P( PT P Q Q Q Q R0 Rd R R R S S S, S@ ST Sh S| S S S S S S T T T0 TD TX Tl T T T T T T T U V W\ W X YP Y Z Z Z [| [ [ \ \ \ ]P ] ^l _P `( a ad at b b b( bp b c| c d dx d e e, eX e f gT g h` i iP ip i i i i j j8 jX jx j j j j k k8 kP k` k k l0 l@ l l mX m m nP n n n o  o o  o8 oX op o o o o o p p  p@ pP p` pp p p q| rD r s s s t t u u u v$ vX v v v wD w w x` x x y@ y y z$ z` z z { {d { { |\ | }\ } ~ ~< ~t ~ ~  T   D `  @ h     $ H p       4 P l  L   ( d   P   ( p   T   d   T    `   ,   D      d  X t  , t  ,   4 p     \   `  P  h  P      p   < T l      H p    X  @ X x      H   , t  D   |  8   @     4   |    0 X | (  l  x   8   4      H l    $ d   H   H        @ `    ,   t    4 l       D `    D `   $ @ l      , `    D Ä   < ` Ą Ĩ    8 X | Š    $ H p Ƙ    H t ǜ    D l Ȝ    D p ɘ    @ d ʐ ʼ   8 d ˌ ˼  $ X ̌   , d ͜   < p Τ   ( T π Ϩ   ( \ Ј д   @ t Ѡ    0 d Ҩ   L Ӏ Ӱ  $ T Ԕ    | լ   < \ x ָ    ( D ` | ט ׼   0 D ` | ؘ ش    $ @ \ x ٔ ٰ     ܄ H \ p ݌ ݠ ݴ    < P h ތ ި  ( @ ߘ  4  D    L h     0 L t       H d       < h      L    t    D   0   P    ,   L x     D      8 d     h   ( h   (  (  ( P x     0 X    <       H 	@ 
d        D   ,                h  4   |     !$ !` ! ! "0 "l " " # # # # # # # $ $4 $H $d $ $ $ $ % %4 %H %d % % % % & &4 &P &t & & & ' '@ 't ' ' ' ' (  ($ (H (t ( ( ( ) )( )T ) ) ) ) * *D *h * * * + +D +p + + , ,8 ,t , , , , -  -$ -H -t - - - . .( .T . . . . / /D /h / / / 0 0D 0p 0 0 1 18 1t 1 1 1 2 2( 2T 2 2 2 3 30 3d 3 3 3 44 4X 4 4 4 5 5D 5x 5 5 6 6H 6 6 6 70 7t 7 7 7 7 8  8$ 8H 8t 8 8 8 9 9( 9T 9 9 9 9 : :D :h : : : ; ;D ;p ; ; < <8 <t < < < = =( =T = = = > >0 >d > > > ?4 ?X ? ? ? @ @D @x @ @ A AH A A A B0 Bt B B B C C( CT C C C D D0 Dd D D D E4 EX E E E F FD Fx F F G GH G G G H0 Ht H H H I$ IP I I I J  JT J J J K4 Kp K K L LH L L L M0 Mt M M N  Nd N N O( Ot O PH P Q  Qx Q R R` R R S0 St S S T4 T| T U U V, V W  Wd W Xd X X Y Yl Y Y Z@ Z Z [$ [t [ \ \d \ ]D ] ^$ ^h ^ _  _ _ `@ ` a  a| a b bH b b c< c c dL d e ex f  f f g4 g g h, h i, i i j j< jl j j k  k0 k` k k k l  lP l l l m mD mt m m n n8 nT np n n n o  o\ o o o p, p` p| p p q q q rT r s@ s s t< t u ut u v$ v| v v wP w x  x x8 x x y0 y y z z@ zp z z { {@ { { { |0 |h | | | }$ }L }| } } ~ ~  \  P   l   H  H  ( |  \     d      4    (    p  8     |  H      ,   0   X  X  0    \  (  L d     L \ l |       0 @ P x     @ h       D h    ( h |  T      8  P    t   4  0  ,  @    , < |  P   D   $ t   ,    h     h  4  8   $ |    d @ \     | P ¤ ` D @      D `     Ϭ d h   l 8   (      X  ߌ 4 @ $  $ 4                         p  `   d  < l   L   x  |      `   l        $ |  H p  h  \  0      ( l  \   (         H (  D     t (  X      	d 	 
| 
 $   8     \  0       D        D   P  @       X    ( d        ! !H !d ! ! ! ! ! " "( "D "` "| " " " " # #$ #@ #\ #x # $D $ $ %D %p % &8 &t & 'X ' (` (t ( ) *( * +@ + ,0 ,x , -T -l - - .H . / /4 /P /h / / / / 0   	 +             >        _        :       Q       p                                   a      	       4                 	       	     	  G  	  V  	  }  	    	    	  "  	  :%  	 &  	  h;  	    	    C o p y r i g h t   ( c )   2 0 0 3   b y   B i t s t r e a m ,   I n c .   A l l   R i g h t s   R e s e r v e d . 
 D e j a V u   c h a n g e s   a r e   i n   p u b l i c   d o m a i n 
  Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved.
DejaVu changes are in public domain
  D e j a V u   S e r i f  DejaVu Serif  B o o k  Book  D e j a V u   S e r i f  DejaVu Serif  D e j a V u   S e r i f  DejaVu Serif  V e r s i o n   2 . 3 7  Version 2.37  D e j a V u S e r i f  DejaVuSerif  D e j a V u   f o n t s   t e a m  DejaVu fonts team  h t t p : / / d e j a v u . s o u r c e f o r g e . n e t  http://dejavu.sourceforge.net  F o n t s   a r e   ( c )   B i t s t r e a m   ( s e e   b e l o w ) .   D e j a V u   c h a n g e s   a r e   i n   p u b l i c   d o m a i n . 
 
 B i t s t r e a m   V e r a   F o n t s   C o p y r i g h t 
 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
 
 C o p y r i g h t   ( c )   2 0 0 3   b y   B i t s t r e a m ,   I n c .   A l l   R i g h t s   R e s e r v e d .   B i t s t r e a m   V e r a   i s   a   t r a d e m a r k   o f   B i t s t r e a m ,   I n c . 
 
 P e r m i s s i o n   i s   h e r e b y   g r a n t e d ,   f r e e   o f   c h a r g e ,   t o   a n y   p e r s o n   o b t a i n i n g   a   c o p y   o f   t h e   f o n t s   a c c o m p a n y i n g   t h i s   l i c e n s e   ( " F o n t s " )   a n d   a s s o c i a t e d   d o c u m e n t a t i o n   f i l e s   ( t h e   " F o n t   S o f t w a r e " ) ,   t o   r e p r o d u c e   a n d   d i s t r i b u t e   t h e   F o n t   S o f t w a r e ,   i n c l u d i n g   w i t h o u t   l i m i t a t i o n   t h e   r i g h t s   t o   u s e ,   c o p y ,   m e r g e ,   p u b l i s h ,   d i s t r i b u t e ,   a n d / o r   s e l l   c o p i e s   o f   t h e   F o n t   S o f t w a r e ,   a n d   t o   p e r m i t   p e r s o n s   t o   w h o m   t h e   F o n t   S o f t w a r e   i s   f u r n i s h e d   t o   d o   s o ,   s u b j e c t   t o   t h e   f o l l o w i n g   c o n d i t i o n s : 
 
 T h e   a b o v e   c o p y r i g h t   a n d   t r a d e m a r k   n o t i c e s   a n d   t h i s   p e r m i s s i o n   n o t i c e   s h a l l   b e   i n c l u d e d   i n   a l l   c o p i e s   o f   o n e   o r   m o r e   o f   t h e   F o n t   S o f t w a r e   t y p e f a c e s . 
 
 T h e   F o n t   S o f t w a r e   m a y   b e   m o d i f i e d ,   a l t e r e d ,   o r   a d d e d   t o ,   a n d   i n   p a r t i c u l a r   t h e   d e s i g n s   o f   g l y p h s   o r   c h a r a c t e r s   i n   t h e   F o n t s   m a y   b e   m o d i f i e d   a n d   a d d i t i o n a l   g l y p h s   o r     o r   c h a r a c t e r s   m a y   b e   a d d e d   t o   t h e   F o n t s ,   o n l y   i f   t h e   f o n t s   a r e   r e n a m e d   t o   n a m e s   n o t   c o n t a i n i n g   e i t h e r   t h e   w o r d s   " B i t s t r e a m "   o r   t h e   w o r d   " V e r a " . 
 
 T h i s   L i c e n s e   b e c o m e s   n u l l   a n d   v o i d   t o   t h e   e x t e n t   a p p l i c a b l e   t o   F o n t s   o r   F o n t   S o f t w a r e   t h a t   h a s   b e e n   m o d i f i e d   a n d   i s   d i s t r i b u t e d   u n d e r   t h e   " B i t s t r e a m   V e r a "   n a m e s . 
 
 T h e   F o n t   S o f t w a r e   m a y   b e   s o l d   a s   p a r t   o f   a   l a r g e r   s o f t w a r e   p a c k a g e   b u t   n o   c o p y   o f   o n e   o r   m o r e   o f   t h e   F o n t   S o f t w a r e   t y p e f a c e s   m a y   b e   s o l d   b y   i t s e l f . 
 
 T H E   F O N T   S O F T W A R E   I S   P R O V I D E D   " A S   I S " ,   W I T H O U T   W A R R A N T Y   O F   A N Y   K I N D ,   E X P R E S S   O R   I M P L I E D ,   I N C L U D I N G   B U T   N O T   L I M I T E D   T O   A N Y   W A R R A N T I E S   O F   M E R C H A N T A B I L I T Y ,   F I T N E S S   F O R   A   P A R T I C U L A R   P U R P O S E   A N D   N O N I N F R I N G E M E N T   O F   C O P Y R I G H T ,   P A T E N T ,   T R A D E M A R K ,   O R   O T H E R   R I G H T .   I N   N O   E V E N T   S H A L L   B I T S T R E A M   O R   T H E   G N O M E   F O U N D A T I O N   B E   L I A B L E   F O R   A N Y   C L A I M ,   D A M A G E S   O R   O T H E R   L I A B I L I T Y ,   I N C L U D I N G   A N Y   G E N E R A L ,   S P E C I A L ,   I N D I R E C T ,   I N C I D E N T A L ,   O R   C O N S E Q U E N T I A L   D A M A G E S ,   W H E T H E R   I N   A N   A C T I O N   O F   C O N T R A C T ,   T O R T   O R   O T H E R W I S E ,   A R I S I N G   F R O M ,   O U T   O F   T H E   U S E   O R   I N A B I L I T Y   T O   U S E   T H E   F O N T   S O F T W A R E   O R   F R O M   O T H E R   D E A L I N G S   I N   T H E   F O N T   S O F T W A R E . 
 
 E x c e p t   a s   c o n t a i n e d   i n   t h i s   n o t i c e ,   t h e   n a m e s   o f   G n o m e ,   t h e   G n o m e   F o u n d a t i o n ,   a n d   B i t s t r e a m   I n c . ,   s h a l l   n o t   b e   u s e d   i n   a d v e r t i s i n g   o r   o t h e r w i s e   t o   p r o m o t e   t h e   s a l e ,   u s e   o r   o t h e r   d e a l i n g s   i n   t h i s   F o n t   S o f t w a r e   w i t h o u t   p r i o r   w r i t t e n   a u t h o r i z a t i o n   f r o m   t h e   G n o m e   F o u n d a t i o n   o r   B i t s t r e a m   I n c . ,   r e s p e c t i v e l y .   F o r   f u r t h e r   i n f o r m a t i o n ,   c o n t a c t :   f o n t s   a t   g n o m e   d o t   o r g .   
  Fonts are (c) Bitstream (see below). DejaVu changes are in public domain.

Bitstream Vera Fonts Copyright
------------------------------

Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. Bitstream Vera is a trademark of Bitstream, Inc.

Permission is hereby granted, free of charge, to any person obtaining a copy of the fonts accompanying this license ("Fonts") and associated documentation files (the "Font Software"), to reproduce and distribute the Font Software, including without limitation the rights to use, copy, merge, publish, distribute, and/or sell copies of the Font Software, and to permit persons to whom the Font Software is furnished to do so, subject to the following conditions:

The above copyright and trademark notices and this permission notice shall be included in all copies of one or more of the Font Software typefaces.

The Font Software may be modified, altered, or added to, and in particular the designs of glyphs or characters in the Fonts may be modified and additional glyphs or  or characters may be added to the Fonts, only if the fonts are renamed to names not containing either the words "Bitstream" or the word "Vera".

This License becomes null and void to the extent applicable to Fonts or Font Software that has been modified and is distributed under the "Bitstream Vera" names.

The Font Software may be sold as part of a larger software package but no copy of one or more of the Font Software typefaces may be sold by itself.

THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL BITSTREAM OR THE GNOME FOUNDATION BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE.

Except as contained in this notice, the names of Gnome, the Gnome Foundation, and Bitstream Inc., shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Font Software without prior written authorization from the Gnome Foundation or Bitstream Inc., respectively. For further information, contact: fonts at gnome dot org. 
  h t t p : / / d e j a v u . s o u r c e f o r g e . n e t / w i k i / i n d e x . p h p / L i c e n s e  http://dejavu.sourceforge.net/wiki/index.php/License  D e j a V u   S e r i f  DejaVu Serif  B o o k  Book          ~ Z                               	 
                        ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a                                    b c  d  e        f     g      h    j i k m l n  o q p r s u t v w  x z y { } |    ~       	
     !"#$%&'()*+  ,-./0123456789:  ;<=>?@ABCDEFGHI  JKLMNOPQRS    TUVWXYZ[\]^_`abcdefghi jklm  nopqrstuvwxyz{|}~  	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~         	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDE FGHIJKLMNOPQRSTUVWXYZ[ \]^_`abcdefghijklmnopqrstuvwxyz{|}~ 	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ 	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ 	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ 	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~                 	
  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~          	   											
																						 	!	"	#	$	%	&	'	(	)	*	+	,	-	.	/	0	1	2	3	4	5	6	7	8	9	:	;	<	=	>	?	@	A	B	C	D	E	F	G	H	I	J	K	L	M	N	O	P	Q	R	S	T	U	V	W	X	Y	Z	[	\	]	^	_	`	a	b	c	d	e	f	g	h	i	j	k	l	m	n	o	p	q	r	s	t	u	v	w	x	y	z	{	|	}	~																																																																																																																																	
 








	


















 




 
!
"
#
$
%
&
'
(
)
*
+
,
-
.
/
0
1
2
3
4
5
6
7
8
9
:
;
<
=
>
?
@
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
[
\
]
^
_
`
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
{
|
}
~
































































































































 	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ 	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~   	
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~	sfthyphenAmacronamacronAbreveabreveAogonekaogonekCcircumflexccircumflex
Cdotaccent
cdotaccentDcarondcaronDcroatEmacronemacronEbreveebreve
Edotaccent
edotaccentEogonekeogonekEcaronecaronGcircumflexgcircumflex
Gdotaccent
gdotaccentGcommaaccentgcommaaccentHcircumflexhcircumflexHbarhbarItildeitildeImacronimacronIbreveibreveIogonekiogonekIJijJcircumflexjcircumflexKcommaaccentkcommaaccentkgreenlandicLacutelacuteLcommaaccentlcommaaccentLcaronlcaronLdotldotNacutenacuteNcommaaccentncommaaccentNcaronncaronnapostropheEngengOmacronomacronObreveobreveOhungarumlautohungarumlautRacuteracuteRcommaaccentrcommaaccentRcaronrcaronSacutesacuteScircumflexscircumflexTcommaaccenttcommaaccentTcarontcaronTbartbarUtildeutildeUmacronumacronUbreveubreveUringuringUhungarumlautuhungarumlautUogonekuogonekWcircumflexwcircumflexYcircumflexycircumflexZacutezacute
Zdotaccent
zdotaccentlongsuni0180uni0181uni0182uni0183uni0184uni0185uni0186uni0187uni0188uni0189uni018Auni018Buni018Cuni018Duni018Euni018Funi0190uni0191uni0193uni0194uni0195uni0196uni0197uni0198uni0199uni019Auni019Buni019Cuni019Duni019Euni019FOhornohornuni01A2uni01A3uni01A4uni01A5uni01A6uni01A7uni01A8uni01A9uni01AAuni01ABuni01ACuni01ADuni01AEUhornuhornuni01B1uni01B2uni01B3uni01B4uni01B5uni01B6uni01B7uni01B8uni01B9uni01BAuni01BBuni01BCuni01BDuni01BEuni01BFuni01C0uni01C1uni01C2uni01C3uni01C4uni01C5uni01C6uni01C7uni01C8uni01C9uni01CAuni01CBuni01CCuni01CDuni01CEuni01CFuni01D0uni01D1uni01D2uni01D3uni01D4uni01D5uni01D6uni01D7uni01D8uni01D9uni01DAuni01DBuni01DCuni01DDuni01DEuni01DFuni01E0uni01E1uni01E2uni01E3uni01E4uni01E5Gcarongcaronuni01E8uni01E9uni01EAuni01EBuni01ECuni01EDuni01EEuni01EFuni01F0uni01F1uni01F2uni01F3uni01F4uni01F5uni01F6uni01F7uni01F8uni01F9
Aringacute
aringacuteAEacuteaeacuteOslashacuteoslashacuteuni0200uni0201uni0202uni0203uni0204uni0205uni0206uni0207uni0208uni0209uni020Auni020Buni020Cuni020Duni020Euni020Funi0210uni0211uni0212uni0213uni0214uni0215uni0216uni0217Scommaaccentscommaaccentuni021Auni021Buni021Cuni021Duni021Euni021Funi0220uni0221uni0222uni0223uni0224uni0225uni0226uni0227uni0228uni0229uni022Auni022Buni022Cuni022Duni022Euni022Funi0230uni0231uni0232uni0233uni0234uni0235uni0236dotlessjuni0238uni0239uni023Auni023Buni023Cuni023Duni023Euni023Funi0240uni0241uni0242uni0243uni0244uni0245uni0246uni0247uni0248uni0249uni024Auni024Buni024Cuni024Duni024Euni024Funi0250uni0251uni0252uni0253uni0254uni0255uni0256uni0257uni0258uni0259uni025Auni025Buni025Cuni025Duni025Euni025Funi0260uni0261uni0262uni0263uni0264uni0265uni0266uni0267uni0268uni0269uni026Auni026Buni026Cuni026Duni026Euni026Funi0270uni0271uni0272uni0273uni0274uni0275uni0276uni0277uni0278uni0279uni027Auni027Buni027Cuni027Duni027Euni027Funi0280uni0281uni0282uni0283uni0284uni0285uni0286uni0287uni0288uni0289uni028Auni028Buni028Cuni028Duni028Euni028Funi0290uni0291uni0292uni0293uni0294uni0295uni0296uni0297uni0298uni0299uni029Auni029Buni029Cuni029Duni029Euni029Funi02A0uni02A1uni02A2uni02A3uni02A4uni02A5uni02A6uni02A7uni02A8uni02A9uni02AAuni02ABuni02ACuni02ADuni02AEuni02AFuni02B0uni02B1uni02B2uni02B3uni02B4uni02B5uni02B6uni02B7uni02B8uni02B9uni02BAuni02BBuni02BCuni02BDuni02BEuni02BFuni02C0uni02C1uni02C2uni02C3uni02C4uni02C5uni02C8uni02C9uni02CAuni02CBuni02CCuni02CDuni02D0uni02D1uni02D2uni02D3uni02D6uni02D7uni02DEuni02E0uni02E1uni02E2uni02E3uni02E4uni02E5uni02E6uni02E7uni02E8uni02E9uni02ECuni02EEuni02EFuni02F0uni02F3uni02F7	gravecomb	acutecombuni0302	tildecombuni0304uni0305uni0306uni0307uni0308hookabovecombuni030Auni030Buni030Cuni030Duni030Euni030Funi0310uni0311uni0312uni0313uni0314uni0315uni0316uni0317uni0318uni0319uni031Auni031Buni031Cuni031Duni031Euni031Funi0320uni0321uni0322dotbelowcombuni0324uni0325uni0326uni0327uni0328uni0329uni032Auni032Buni032Cuni032Duni032Euni032Funi0330uni0331uni0332uni0333uni0334uni0335uni0336uni0337uni0338uni0339uni033Auni033Buni033Cuni033Duni033Euni033Funi0343uni034Funi0358uni0360uni0361uni0370uni0371uni0372uni0373uni0374uni0375uni0376uni0377uni037Auni037Buni037Cuni037Duni037Euni037Ftonosdieresistonos
Alphatonos	anoteleiaEpsilontonosEtatonos	IotatonosOmicrontonosUpsilontonos
OmegatonosiotadieresistonosAlphaBetaGammauni0394EpsilonZetaEtaThetaIotaKappaLambdaMuNuXiOmicronPiRhoSigmaTauUpsilonPhiChiPsiIotadieresisUpsilondieresis
alphatonosepsilontonosetatonos	iotatonosupsilondieresistonosalphabetagammadeltaepsilonzetaetathetaiotakappalambdauni03BCnuxiomicronrhosigma1sigmatauupsilonphichipsiomegaiotadieresisupsilondieresisomicrontonosupsilontonos
omegatonosuni03CFuni03D0theta1Upsilon1uni03D3uni03D4phi1omega1uni03D7uni03D8uni03D9uni03DAuni03DBuni03DCuni03DDuni03DEuni03DFuni03E0uni03E1uni03F0uni03F1uni03F2uni03F3uni03F4uni03F5uni03F6uni03F7uni03F8uni03F9uni03FAuni03FBuni03FCuni03FDuni03FEuni03FFuni0400uni0401uni0402uni0403uni0404uni0405uni0406uni0407uni0408uni0409uni040Auni040Buni040Cuni040Duni040Euni040Funi0410uni0411uni0412uni0413uni0414uni0415uni0416uni0417uni0418uni0419uni041Auni041Buni041Cuni041Duni041Euni041Funi0420uni0421uni0422uni0423uni0424uni0425uni0426uni0427uni0428uni0429uni042Auni042Buni042Cuni042Duni042Euni042Funi0430uni0431uni0432uni0433uni0434uni0435uni0436uni0437uni0438uni0439uni043Auni043Buni043Cuni043Duni043Euni043Funi0440uni0441uni0442uni0443uni0444uni0445uni0446uni0447uni0448uni0449uni044Auni044Buni044Cuni044Duni044Euni044Funi0450uni0451uni0452uni0453uni0454uni0455uni0456uni0457uni0458uni0459uni045Auni045Buni045Cuni045Duni045Euni045Funi0462uni0463uni0464uni0465uni046Auni046Buni046Cuni046Duni0470uni0471uni0472uni0473uni0474uni0475uni0476uni0477uni048Cuni048Duni0490uni0491uni0492uni0493uni0494uni0495uni0496uni0497uni0498uni0499uni049Auni049Buni049Euni049Funi04A0uni04A1uni04A2uni04A3uni04A4uni04A5uni04A6uni04A7uni04AAuni04ABuni04ACuni04ADuni04AEuni04AFuni04B0uni04B1uni04B2uni04B3uni04B4uni04B5uni04B6uni04B7uni04BAuni04BBuni04C0uni04C1uni04C2uni04C3uni04C4uni04C7uni04C8uni04CBuni04CCuni04CFuni04D0uni04D1uni04D2uni04D3uni04D4uni04D5uni04D6uni04D7uni04D8uni04D9uni04DAuni04DBuni04DCuni04DDuni04DEuni04DFuni04E0uni04E1uni04E2uni04E3uni04E4uni04E5uni04E6uni04E7uni04E8uni04E9uni04EAuni04EBuni04ECuni04EDuni04EEuni04EFuni04F0uni04F1uni04F2uni04F3uni04F4uni04F5uni04F6uni04F7uni04F8uni04F9uni0510uni0511uni0512uni0513uni0514uni0515uni051Auni051Buni051Cuni051Duni0531uni0532uni0533uni0534uni0535uni0536uni0537uni0538uni0539uni053Auni053Buni053Cuni053Duni053Euni053Funi0540uni0541uni0542uni0543uni0544uni0545uni0546uni0547uni0548uni0549uni054Auni054Buni054Cuni054Duni054Euni054Funi0550uni0551uni0552uni0553uni0554uni0555uni0556uni0559uni055Auni055Buni055Cuni055Duni055Euni055Funi0561uni0562uni0563uni0564uni0565uni0566uni0567uni0568uni0569uni056Auni056Buni056Cuni056Duni056Euni056Funi0570uni0571uni0572uni0573uni0574uni0575uni0576uni0577uni0578uni0579uni057Auni057Buni057Cuni057Duni057Euni057Funi0580uni0581uni0582uni0583uni0584uni0585uni0586uni0587uni0589uni058Auni0E3Funi10A0uni10A1uni10A2uni10A3uni10A4uni10A5uni10A6uni10A7uni10A8uni10A9uni10AAuni10ABuni10ACuni10ADuni10AEuni10AFuni10B0uni10B1uni10B2uni10B3uni10B4uni10B5uni10B6uni10B7uni10B8uni10B9uni10BAuni10BBuni10BCuni10BDuni10BEuni10BFuni10C0uni10C1uni10C2uni10C3uni10C4uni10C5uni10D0uni10D1uni10D2uni10D3uni10D4uni10D5uni10D6uni10D7uni10D8uni10D9uni10DAuni10DBuni10DCuni10DDuni10DEuni10DFuni10E0uni10E1uni10E2uni10E3uni10E4uni10E5uni10E6uni10E7uni10E8uni10E9uni10EAuni10EBuni10ECuni10EDuni10EEuni10EFuni10F0uni10F1uni10F2uni10F3uni10F4uni10F5uni10F6uni10F7uni10F8uni10F9uni10FAuni10FBuni10FCuni1D00uni1D01uni1D02uni1D03uni1D04uni1D05uni1D06uni1D07uni1D08uni1D09uni1D0Auni1D0Buni1D0Cuni1D0Duni1D0Euni1D0Funi1D10uni1D11uni1D12uni1D13uni1D14uni1D15uni1D16uni1D17uni1D18uni1D19uni1D1Auni1D1Buni1D1Cuni1D1Duni1D1Euni1D1Funi1D20uni1D21uni1D22uni1D23uni1D24uni1D25uni1D26uni1D27uni1D28uni1D29uni1D2Auni1D2Buni1D2Cuni1D2Duni1D2Euni1D2Funi1D30uni1D31uni1D32uni1D33uni1D34uni1D35uni1D36uni1D37uni1D38uni1D39uni1D3Auni1D3Buni1D3Cuni1D3Duni1D3Euni1D3Funi1D40uni1D41uni1D42uni1D43uni1D44uni1D45uni1D46uni1D47uni1D48uni1D49uni1D4Auni1D4Buni1D4Cuni1D4Duni1D4Euni1D4Funi1D50uni1D51uni1D52uni1D53uni1D54uni1D55uni1D56uni1D57uni1D58uni1D59uni1D5Auni1D5Buni1D5Cuni1D5Duni1D5Euni1D5Funi1D60uni1D61uni1D62uni1D63uni1D64uni1D65uni1D66uni1D67uni1D68uni1D69uni1D6Auni1D6Buni1D77uni1D78uni1D7Buni1D7Cuni1D7Duni1D7Euni1D7Funi1D85uni1D9Buni1D9Cuni1D9Duni1D9Euni1D9Funi1DA0uni1DA1uni1DA2uni1DA3uni1DA4uni1DA5uni1DA6uni1DA7uni1DA8uni1DA9uni1DAAuni1DABuni1DACuni1DADuni1DAEuni1DAFuni1DB0uni1DB1uni1DB2uni1DB3uni1DB4uni1DB5uni1DB6uni1DB7uni1DB8uni1DB9uni1DBAuni1DBBuni1DBCuni1DBDuni1DBEuni1DBFuni1DC4uni1DC5uni1DC6uni1DC7uni1DC8uni1DC9uni1E00uni1E01uni1E02uni1E03uni1E04uni1E05uni1E06uni1E07uni1E08uni1E09uni1E0Auni1E0Buni1E0Cuni1E0Duni1E0Euni1E0Funi1E10uni1E11uni1E12uni1E13uni1E14uni1E15uni1E16uni1E17uni1E18uni1E19uni1E1Auni1E1Buni1E1Cuni1E1Duni1E1Euni1E1Funi1E20uni1E21uni1E22uni1E23uni1E24uni1E25uni1E26uni1E27uni1E28uni1E29uni1E2Auni1E2Buni1E2Cuni1E2Duni1E2Euni1E2Funi1E30uni1E31uni1E32uni1E33uni1E34uni1E35uni1E36uni1E37uni1E38uni1E39uni1E3Auni1E3Buni1E3Cuni1E3Duni1E3Euni1E3Funi1E40uni1E41uni1E42uni1E43uni1E44uni1E45uni1E46uni1E47uni1E48uni1E49uni1E4Auni1E4Buni1E4Cuni1E4Duni1E4Euni1E4Funi1E50uni1E51uni1E52uni1E53uni1E54uni1E55uni1E56uni1E57uni1E58uni1E59uni1E5Auni1E5Buni1E5Cuni1E5Duni1E5Euni1E5Funi1E60uni1E61uni1E62uni1E63uni1E64uni1E65uni1E66uni1E67uni1E68uni1E69uni1E6Auni1E6Buni1E6Cuni1E6Duni1E6Euni1E6Funi1E70uni1E71uni1E72uni1E73uni1E74uni1E75uni1E76uni1E77uni1E78uni1E79uni1E7Auni1E7Buni1E7Cuni1E7Duni1E7Euni1E7FWgravewgraveWacutewacute	Wdieresis	wdieresisuni1E86uni1E87uni1E88uni1E89uni1E8Auni1E8Buni1E8Cuni1E8Duni1E8Euni1E8Funi1E90uni1E91uni1E92uni1E93uni1E94uni1E95uni1E96uni1E97uni1E98uni1E99uni1E9Auni1E9Buni1E9Cuni1E9Duni1E9Euni1E9Funi1EA0uni1EA1uni1EA2uni1EA3uni1EA4uni1EA5uni1EA6uni1EA7uni1EA8uni1EA9uni1EAAuni1EABuni1EACuni1EADuni1EAEuni1EAFuni1EB0uni1EB1uni1EB2uni1EB3uni1EB4uni1EB5uni1EB6uni1EB7uni1EB8uni1EB9uni1EBAuni1EBBuni1EBCuni1EBDuni1ebeuni1ebFuni1EC0uni1EC1uni1EC2uni1EC3uni1EC4uni1EC5uni1EC6uni1EC7uni1EC8uni1EC9uni1ECAuni1ECBuni1ECCuni1ECDuni1ECEuni1ECFuni1ED0uni1ED1uni1ED2uni1ED3uni1ED4uni1ED5uni1ED6uni1ED7uni1ED8uni1ED9uni1EDAuni1EDBuni1EDCuni1EDDuni1EDEuni1EDFuni1EE0uni1EE1uni1EE2uni1EE3uni1EE4uni1EE5uni1EE6uni1EE7uni1EE8uni1EE9uni1EEAuni1EEBuni1EECuni1EEDuni1EEEuni1EEFuni1EF0uni1EF1Ygraveygraveuni1EF4uni1EF5uni1EF6uni1EF7uni1EF8uni1EF9uni1EFAuni1EFBuni1F00uni1F01uni1F02uni1F03uni1F04uni1F05uni1F06uni1F07uni1F08uni1F09uni1F0Auni1F0Buni1F0Cuni1F0Duni1F0Euni1F0Funi1F10uni1F11uni1F12uni1F13uni1F14uni1F15uni1F18uni1F19uni1F1Auni1F1Buni1F1Cuni1F1Duni1F20uni1F21uni1F22uni1F23uni1F24uni1F25uni1F26uni1F27uni1F28uni1F29uni1F2Auni1F2Buni1F2Cuni1F2Duni1F2Euni1F2Funi1F30uni1F31uni1F32uni1F33uni1F34uni1F35uni1F36uni1F37uni1F38uni1F39uni1F3Auni1F3Buni1F3Cuni1F3Duni1F3Euni1F3Funi1F40uni1F41uni1F42uni1F43uni1F44uni1F45uni1F48uni1F49uni1F4Auni1F4Buni1F4Cuni1F4Duni1F50uni1F51uni1F52uni1F53uni1F54uni1F55uni1F56uni1F57uni1F59uni1F5Buni1F5Duni1F5Funi1F60uni1F61uni1F62uni1F63uni1F64uni1F65uni1F66uni1F67uni1F68uni1F69uni1F6Auni1F6Buni1F6Cuni1F6Duni1F6Euni1F6Funi1F70uni1F71uni1F72uni1F73uni1F74uni1F75uni1F76uni1F77uni1F78uni1F79uni1F7Auni1F7Buni1F7Cuni1F7Duni1F80uni1F81uni1F82uni1F83uni1F84uni1F85uni1F86uni1F87uni1F88uni1F89uni1F8Auni1F8Buni1F8Cuni1F8Duni1F8Euni1F8Funi1F90uni1F91uni1F92uni1F93uni1F94uni1F95uni1F96uni1F97uni1F98uni1F99uni1F9Auni1F9Buni1F9Cuni1F9Duni1F9Euni1F9Funi1FA0uni1FA1uni1FA2uni1FA3uni1FA4uni1FA5uni1FA6uni1FA7uni1FA8uni1FA9uni1FAAuni1FABuni1FACuni1FADuni1FAEuni1FAFuni1FB0uni1FB1uni1FB2uni1FB3uni1FB4uni1FB6uni1FB7uni1FB8uni1FB9uni1FBAuni1FBBuni1FBCuni1FBDuni1FBEuni1FBFuni1FC0uni1FC1uni1FC2uni1FC3uni1FC4uni1FC6uni1FC7uni1FC8uni1FC9uni1FCAuni1FCBuni1FCCuni1FCDuni1FCEuni1FCFuni1FD0uni1FD1uni1FD2uni1FD3uni1FD6uni1FD7uni1FD8uni1FD9uni1FDAuni1FDBuni1FDDuni1FDEuni1FDFuni1FE0uni1FE1uni1FE2uni1FE3uni1FE4uni1FE5uni1FE6uni1FE7uni1FE8uni1FE9uni1FEAuni1FEBuni1FECuni1FEDuni1FEEuni1FEFuni1FF2uni1FF3uni1FF4uni1FF6uni1FF7uni1FF8uni1FF9uni1FFAuni1FFBuni1FFCuni1FFDuni1FFEuni2000uni2001uni2002uni2003uni2004uni2005uni2006uni2007uni2008uni2009uni200Auni200Buni200Cuni200Duni200Euni200Funi2010uni2011
figuredashuni2015uni2016underscoredblquotereverseduni201Funi2023onedotenleadertwodotenleaderuni202Auni202Buni202Cuni202Duni202Euni202Funi2031minuteseconduni2034uni2035uni2036uni2037uni2038	exclamdbluni203Duni203Euni2042uni2045uni2046uni2047uni2048uni2049uni204Buni204Cuni204Duni204Euni204Funi2051uni2052uni2053uni2057uni205Funi2060uni2061uni2062uni2063uni2064uni206Auni206Buni206Cuni206Duni206Euni206Funi2070uni2071uni2074uni2075uni2076uni2077uni2078uni2079uni207Auni207Buni207Cuni207Duni207Euni207Funi2080uni2081uni2082uni2083uni2084uni2085uni2086uni2087uni2088uni2089uni208Auni208Buni208Cuni208Duni208Euni2090uni2091uni2092uni2093uni2094uni2095uni2096uni2097uni2098uni2099uni209Auni209Buni209Cuni20A6Eurouni20AFuni20B1uni20B4uni20B5uni20B8uni20B9uni20BAuni20BDuni2102uni2103uni2109uni210Duni210Euni210Funi2115uni2116uni2119uni211Auni211Duni2124uni2126uni2127uni212Auni212Buni2132uni213Cuni213Duni213Euni213Funi2140uni2141uni2142uni2143uni2144uni2145uni2146uni2147uni2148uni2149uni214Buni214Euni2150uni2151uni2152onethird	twothirdsuni2155uni2156uni2157uni2158uni2159uni215A	oneeighththreeeighthsfiveeighthsseveneighthsuni215Funi2160uni2161uni2162uni2163uni2164uni2165uni2166uni2167uni2168uni2169uni216Auni216Buni216Cuni216Duni216Euni216Funi2170uni2171uni2172uni2173uni2174uni2175uni2176uni2177uni2178uni2179uni217Auni217Buni217Cuni217Duni217Euni217Funi2180uni2181uni2182uni2183uni2184uni2185uni2189	arrowleftarrowup
arrowright	arrowdown	arrowboth	arrowupdnuni2196uni2197uni2198uni2199uni219Auni219Buni219Cuni219Duni219Euni219Funi21A0uni21A1uni21A2uni21A3uni21A4uni21A5uni21A6uni21A7arrowupdnbseuni21A9uni21AAuni21ABuni21ACuni21ADuni21AEuni21AFuni21B0uni21B1uni21B2uni21B3uni21B4carriagereturnuni21B6uni21B7uni21B8uni21B9uni21BAuni21BBuni21BCuni21BDuni21BEuni21BFuni21C0uni21C1uni21C2uni21C3uni21C4uni21C5uni21C6uni21C7uni21C8uni21C9uni21CAuni21CBuni21CCuni21CDuni21CEuni21CFarrowdblleft
arrowdbluparrowdblrightarrowdbldownarrowdblbothuni21D5uni21D6uni21D7uni21D8uni21D9uni21DAuni21DBuni21DCuni21DDuni21DEuni21DFuni21E0uni21E1uni21E2uni21E3uni21E4uni21E5uni21E6uni21E7uni21E8uni21E9uni21EAuni21EBuni21ECuni21EDuni21EEuni21EFuni21F0uni21F1uni21F2uni21F3uni21F4uni21F5uni21F6uni21F7uni21F8uni21F9uni21FAuni21FBuni21FCuni21FDuni21FEuni21FF	universalexistentialuni2204gradientelement
notelementsuchthatuni220Cuni2210uni2213uni2214uni2215asteriskmathuni2218uni2219uni221Buni221Cproportional
orthogonalangleuni2223uni2224uni2225uni2226
logicaland	logicalorintersectionunionuni222Cuni222Duni2238uni2239uni223Auni223Bsimilaruni223Duni2242uni2243uni2250uni2251uni2252uni2253uni2254uni2255equivalencepropersubsetpropersuperset	notsubsetuni2285reflexsubsetreflexsupersetuni228Cuni228Duni228Euni228Funi2290uni2291uni2292uni2293uni2294
circleplusuni2296circlemultiplyuni2298uni2299uni229Auni229Buni229Cuni229Duni229Euni229Funi22A0uni22A1uni22A2uni22A3uni22A4perpendicularuni22A6uni22A7uni22A8uni22A9uni22AAuni22ABuni22ACuni22ADuni22AEuni22AFuni22C4dotmathhouseuni2308uni2309uni230Auni230Brevlogicalnotuni2311uni2318uni2319
integraltp
integralbtuni2325uni2328uni237Duni239Buni239Cuni239Duni239Euni239Funi23A0uni23A1uni23A2uni23A3uni23A4uni23A5uni23A6uni23A7uni23A8uni23A9uni23AAuni23ABuni23ACuni23ADuni23AEuni23B7uni23CFuni2423SF100000uni2501SF110000uni2503uni2504uni2505uni2506uni2507uni2508uni2509uni250Auni250BSF010000uni250Duni250Euni250FSF030000uni2511uni2512uni2513SF020000uni2515uni2516uni2517SF040000uni2519uni251Auni251BSF080000uni251Duni251Euni251Funi2520uni2521uni2522uni2523SF090000uni2525uni2526uni2527uni2528uni2529uni252Auni252BSF060000uni252Duni252Euni252Funi2530uni2531uni2532uni2533SF070000uni2535uni2536uni2537uni2538uni2539uni253Auni253BSF050000uni253Duni253Euni253Funi2540uni2541uni2542uni2543uni2544uni2545uni2546uni2547uni2548uni2549uni254Auni254Buni254Cuni254Duni254Euni254FSF430000SF240000SF510000SF520000SF390000SF220000SF210000SF250000SF500000SF490000SF380000SF280000SF270000SF260000SF360000SF370000SF420000SF190000SF200000SF230000SF470000SF480000SF410000SF450000SF460000SF400000SF540000SF530000SF440000uni256Duni256Euni256Funi2570uni2571uni2572uni2573uni2574uni2575uni2576uni2577uni2578uni2579uni257Auni257Buni257Cuni257Duni257Euni257Fupblockuni2581uni2582uni2583dnblockuni2585uni2586uni2587blockuni2589uni258Auni258Blfblockuni258Duni258Euni258Frtblockltshadeshadedkshadeuni2594uni2595uni2596uni2597uni2598uni2599uni259Auni259Buni259Cuni259Duni259Euni259F	filledboxH22073uni25A2uni25A3uni25A4uni25A5uni25A6uni25A7uni25A8uni25A9H18543H18551
filledrectuni25ADuni25AEuni25AFuni25B0uni25B1triagupuni25B3uni25B4uni25B5uni25B6uni25B7uni25B8uni25B9triagrtuni25BBtriagdnuni25BDuni25BEuni25BFuni25C0uni25C1uni25C2uni25C3triaglfuni25C5uni25C6uni25C7uni25C8uni25C9circleuni25CCuni25CDuni25CEH18533uni25D0uni25D1uni25D2uni25D3uni25D4uni25D5uni25D6uni25D7	invbullet	invcircleuni25DAuni25DBuni25DCuni25DDuni25DEuni25DFuni25E0uni25E1uni25E2uni25E3uni25E4uni25E5
openbulletuni25E7uni25E8uni25E9uni25EAuni25EBuni25ECuni25EDuni25EEuni25EFuni25F0uni25F1uni25F2uni25F3uni25F4uni25F5uni25F6uni25F7uni25F8uni25F9uni25FAuni25FBuni25FCuni25FDuni25FEuni25FFuni2600uni2638uni2639	smilefaceinvsmilefacesununi263Ffemaleuni2641maleuni2643uni2644uni2645uni2646uni2647spadeuni2661uni2662clubuni2664heartdiamonduni2667uni2669musicalnotemusicalnotedbluni266Cuni266Duni266Euni266Funi27A1uni27C5uni27C6uni27E0uni27E8uni27E9uni27F0uni27F1uni27F2uni27F3uni27F4uni27F5uni27F6uni27F7uni27F8uni27F9uni27FAuni27FBuni27FCuni27FDuni27FEuni27FFuni2800uni2801uni2802uni2803uni2804uni2805uni2806uni2807uni2808uni2809uni280Auni280Buni280Cuni280Duni280Euni280Funi2810uni2811uni2812uni2813uni2814uni2815uni2816uni2817uni2818uni2819uni281Auni281Buni281Cuni281Duni281Euni281Funi2820uni2821uni2822uni2823uni2824uni2825uni2826uni2827uni2828uni2829uni282Auni282Buni282Cuni282Duni282Euni282Funi2830uni2831uni2832uni2833uni2834uni2835uni2836uni2837uni2838uni2839uni283Auni283Buni283Cuni283Duni283Euni283Funi2840uni2841uni2842uni2843uni2844uni2845uni2846uni2847uni2848uni2849uni284Auni284Buni284Cuni284Duni284Euni284Funi2850uni2851uni2852uni2853uni2854uni2855uni2856uni2857uni2858uni2859uni285Auni285Buni285Cuni285Duni285Euni285Funi2860uni2861uni2862uni2863uni2864uni2865uni2866uni2867uni2868uni2869uni286Auni286Buni286Cuni286Duni286Euni286Funi2870uni2871uni2872uni2873uni2874uni2875uni2876uni2877uni2878uni2879uni287Auni287Buni287Cuni287Duni287Euni287Funi2880uni2881uni2882uni2883uni2884uni2885uni2886uni2887uni2888uni2889uni288Auni288Buni288Cuni288Duni288Euni288Funi2890uni2891uni2892uni2893uni2894uni2895uni2896uni2897uni2898uni2899uni289Auni289Buni289Cuni289Duni289Euni289Funi28A0uni28A1uni28A2uni28A3uni28A4uni28A5uni28A6uni28A7uni28A8uni28A9uni28AAuni28ABuni28ACuni28ADuni28AEuni28AFuni28B0uni28B1uni28B2uni28B3uni28B4uni28B5uni28B6uni28B7uni28B8uni28B9uni28BAuni28BBuni28BCuni28BDuni28BEuni28BFuni28C0uni28C1uni28C2uni28C3uni28C4uni28C5uni28C6uni28C7uni28C8uni28C9uni28CAuni28CBuni28CCuni28CDuni28CEuni28CFuni28D0uni28D1uni28D2uni28D3uni28D4uni28D5uni28D6uni28D7uni28D8uni28D9uni28DAuni28DBuni28DCuni28DDuni28DEuni28DFuni28E0uni28E1uni28E2uni28E3uni28E4uni28E5uni28E6uni28E7uni28E8uni28E9uni28EAuni28EBuni28ECuni28EDuni28EEuni28EFuni28F0uni28F1uni28F2uni28F3uni28F4uni28F5uni28F6uni28F7uni28F8uni28F9uni28FAuni28FBuni28FCuni28FDuni28FEuni28FFuni2900uni2901uni2902uni2903uni2904uni2905uni2906uni2907uni2908uni2909uni290Auni290Buni290Cuni290Duni290Euni290Funi2910uni2911uni2912uni2913uni2914uni2915uni2916uni2917uni2918uni2919uni291Auni291Buni291Cuni291Duni291Euni291Funi2920uni2921uni2922uni2923uni2924uni2925uni2926uni2927uni2928uni2929uni292Auni292Buni292Cuni292Duni292Euni292Funi2930uni2931uni2932uni2933uni2934uni2935uni2936uni2937uni2938uni2939uni293Auni293Buni293Cuni293Duni293Euni293Funi2940uni2941uni2942uni2943uni2944uni2945uni2946uni2947uni2948uni2949uni294Auni294Buni294Cuni294Duni294Euni294Funi2950uni2951uni2952uni2953uni2954uni2955uni2956uni2957uni2958uni2959uni295Auni295Buni295Cuni295Duni295Euni295Funi2960uni2961uni2962uni2963uni2964uni2965uni2966uni2967uni2968uni2969uni296Auni296Buni296Cuni296Duni296Euni296Funi2970uni2971uni2972uni2973uni2974uni2975uni2976uni2977uni2978uni2979uni297Auni297Buni297Cuni297Duni297Euni297Funi29EBuni2A0Cuni2A0Duni2A0Euni2A2Funi2A6Auni2A6Buni2B00uni2B01uni2B02uni2B03uni2B04uni2B05uni2B06uni2B07uni2B08uni2B09uni2B0Auni2B0Buni2B0Cuni2B0Duni2B0Euni2B0Funi2B10uni2B11uni2B12uni2B13uni2B14uni2B15uni2B16uni2B17uni2B18uni2B19uni2B1Auni2C60uni2C61uni2C63uni2C64uni2C67uni2C68uni2C69uni2C6Auni2C6Buni2C6Cuni2C6Duni2C6Euni2C6Funi2C70uni2C71uni2C72uni2C73uni2C75uni2C76uni2C77uni2C79uni2C7Auni2C7Buni2C7Cuni2C7Duni2C7Euni2C7Funi2D00uni2D01uni2D02uni2D03uni2D04uni2D05uni2D06uni2D07uni2D08uni2D09uni2D0Auni2D0Buni2D0Cuni2D0Duni2D0Euni2D0Funi2D10uni2D11uni2D12uni2D13uni2D14uni2D15uni2D16uni2D17uni2D18uni2D19uni2D1Auni2D1Buni2D1Cuni2D1Duni2D1Euni2D1Funi2D20uni2D21uni2D22uni2D23uni2D24uni2D25uni2E18uni2E1Funi2E22uni2E23uni2E24uni2E25uni2E2EuniA644uniA645uniA646uniA647uniA650uniA651uniA654uniA655uniA656uniA657uniA698uniA699uniA708uniA709uniA70AuniA70BuniA70CuniA70DuniA70EuniA70FuniA710uniA711uniA712uniA713uniA714uniA715uniA716uniA71BuniA71CuniA71DuniA71EuniA71FuniA726uniA727uniA728uniA729uniA72AuniA72BuniA72CuniA72DuniA72EuniA72FuniA730uniA731uniA732uniA733uniA734uniA735uniA736uniA737uniA738uniA739uniA73AuniA73BuniA73CuniA73DuniA73EuniA73FuniA740uniA741uniA746uniA747uniA74AuniA74BuniA74EuniA74FuniA768uniA769uniA77BuniA77CuniA780uniA781uniA782uniA783uniA784uniA785uniA786uniA787uniA78BuniA78CuniA78DuniA790uniA791uniA7AAuniA7F8uniA7F9uniA7FAuniA7FBuniA7FCuniA7FDuniA7FEuniA7FFuniF400uniF401uniF402uniF403uniF404uniF405uniF406uniF407uniF408uniF409uniF40AuniF40BuniF40CuniF40DuniF40EuniF40FuniF410uniF411uniF412uniF413uniF414uniF415uniF416uniF417uniF418uniF419uniF41AuniF41BuniF41CuniF41DuniF41EuniF41FuniF420uniF421uniF422uniF423uniF424uniF425uniF426uniF428uniF6C5cyrBrevecyrbreveuniFB00uniFB03uniFB04uniFB05uniFB06uniFE00uniFE01uniFE02uniFE03uniFE04uniFE05uniFE06uniFE07uniFE08uniFE09uniFE0AuniFE0BuniFE0CuniFE0DuniFE0EuniFE0FuniFFF9uniFFFAuniFFFBuniFFFCuniFFFDu1D434u1D435u1D436u1D437u1D438u1D439u1D43Au1D43Bu1D43Cu1D43Du1D43Eu1D43Fu1D440u1D441u1D442u1D443u1D444u1D445u1D446u1D447u1D448u1D449u1D44Au1D44Bu1D44Cu1D44Du1D44Eu1D44Fu1D450u1D451u1D452u1D453u1D454u1D456u1D457u1D458u1D459u1D45Au1D45Bu1D45Cu1D45Du1D45Eu1D45Fu1D460u1D461u1D462u1D463u1D464u1D465u1D466u1D467u1D538u1D539u1D53Bu1D53Cu1D53Du1D53Eu1D540u1D541u1D542u1D543u1D544u1D546u1D54Au1D54Bu1D54Cu1D54Du1D54Eu1D54Fu1D550u1D552u1D553u1D554u1D555u1D556u1D557u1D558u1D559u1D55Au1D55Bu1D55Cu1D55Du1D55Eu1D55Fu1D560u1D561u1D562u1D563u1D564u1D565u1D566u1D567u1D568u1D569u1D56Au1D56Bu1D6A4u1D6A5u1D7D8u1D7D9u1D7DAu1D7DBu1D7DCu1D7DDu1D7DEu1D7DFu1D7E0u1D7E1	dlLtcaronDieresisAcuteTildeGrave
CircumflexCaronuni0311.caseBreve	DotaccentHungarumlautDoublegraveiogonek.dotlessuni0268.dotlessdotaccent.iuni029D.dotlessuni1E2D.dotlessuni1ECB.dotlessEng.alt
brailledotuni03080304uni03040308uni03070304uni03080301uni03080300uni03040301uni03040300uni03030304uni0308030Cuni03030308uni030C0307uni03030301uni03020301uni03020300uni03020303uni03060303uni03060301uni03060300uni03060309uni03020309uni03010307g.altEng.alt2uni01B7.altq.smcp
delta.smcp
theta.smcpxi.smcp
sigma.smcpphi.smcp
omega.smcpexclamdown.casequestiondown.caseuni2E18.casegermandbls.smcpUring.ringless
Dcroat.alt
dcroat.altuni01E4.altuni01E5.altproduct.displayuni2210.displaysummation.displayintegral.displayuni222C.displayuni222D.displayuni2A0C.displayuni2A0D.displayuni2A0E.displayuni221A.extuni221A.topminute.ssty1second.ssty1uni2034.ssty1uni2035.ssty1uni2036.ssty1uni2037.ssty1uni2057.ssty  @$d@$'d']}22GG}2d2dd%x
%K.%x
@@%0%@@	
 @I
o}@:]%]@%@0d0ddl~}~2}|{|{zyx
wv wvuv utltsrqpqpp@o}nm>nkm>lkllkk@jddjihihg]hhgf%g]g@f%eddeddcba`_.`_.^]\K[}ZYDXWVUSdRQ2POP}ONA@BLJdI"IH2GGFE
EDCDkCBCBABA@	A@	@@S?>->M=<=K<;
<<@;
:9:]98987654543432
321	2
2@1	0/0D/.//.
..-	d-,+,K+"++@*
*d)(0)A(-(0'-'&:%%]$#$S#"##@"! !]   

@#$0S-0
k@-B	d-
@
@8k
	d
}	d2}-2-
S d++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++  StartFontMetrics 4.1
Notice Converted by PHP-font-lib
Comment https://github.com/PhenX/php-font-lib
EncodingScheme FontSpecific
FontName DejaVu Serif
FontSubfamily Book
UniqueID DejaVu Serif
FullName DejaVu Serif
Version Version 2.37
PostScriptName DejaVuSerif
Manufacturer DejaVu fonts team
FontVendorURL http://dejavu.sourceforge.net
LicenseURL http://dejavu.sourceforge.net/wiki/index.php/License
PreferredFamily DejaVu Serif
PreferredSubfamily Book
Weight Medium
ItalicAngle 0
IsFixedPitch false
UnderlineThickness 44
UnderlinePosition -63
FontHeightOffset 0
Ascender 928
Descender -236
FontBBox -770 -347 2105 1109
StartCharMetrics 3528
U 32 ; WX 318 ; N space ; G 3
U 33 ; WX 402 ; N exclam ; G 4
U 34 ; WX 460 ; N quotedbl ; G 5
U 35 ; WX 838 ; N numbersign ; G 6
U 36 ; WX 636 ; N dollar ; G 7
U 37 ; WX 950 ; N percent ; G 8
U 38 ; WX 890 ; N ampersand ; G 9
U 39 ; WX 275 ; N quotesingle ; G 10
U 40 ; WX 390 ; N parenleft ; G 11
U 41 ; WX 390 ; N parenright ; G 12
U 42 ; WX 500 ; N asterisk ; G 13
U 43 ; WX 838 ; N plus ; G 14
U 44 ; WX 318 ; N comma ; G 15
U 45 ; WX 338 ; N hyphen ; G 16
U 46 ; WX 318 ; N period ; G 17
U 47 ; WX 337 ; N slash ; G 18
U 48 ; WX 636 ; N zero ; G 19
U 49 ; WX 636 ; N one ; G 20
U 50 ; WX 636 ; N two ; G 21
U 51 ; WX 636 ; N three ; G 22
U 52 ; WX 636 ; N four ; G 23
U 53 ; WX 636 ; N five ; G 24
U 54 ; WX 636 ; N six ; G 25
U 55 ; WX 636 ; N seven ; G 26
U 56 ; WX 636 ; N eight ; G 27
U 57 ; WX 636 ; N nine ; G 28
U 58 ; WX 337 ; N colon ; G 29
U 59 ; WX 337 ; N semicolon ; G 30
U 60 ; WX 838 ; N less ; G 31
U 61 ; WX 838 ; N equal ; G 32
U 62 ; WX 838 ; N greater ; G 33
U 63 ; WX 536 ; N question ; G 34
U 64 ; WX 1000 ; N at ; G 35
U 65 ; WX 722 ; N A ; G 36
U 66 ; WX 735 ; N B ; G 37
U 67 ; WX 765 ; N C ; G 38
U 68 ; WX 802 ; N D ; G 39
U 69 ; WX 730 ; N E ; G 40
U 70 ; WX 694 ; N F ; G 41
U 71 ; WX 799 ; N G ; G 42
U 72 ; WX 872 ; N H ; G 43
U 73 ; WX 395 ; N I ; G 44
U 74 ; WX 401 ; N J ; G 45
U 75 ; WX 747 ; N K ; G 46
U 76 ; WX 664 ; N L ; G 47
U 77 ; WX 1024 ; N M ; G 48
U 78 ; WX 875 ; N N ; G 49
U 79 ; WX 820 ; N O ; G 50
U 80 ; WX 673 ; N P ; G 51
U 81 ; WX 820 ; N Q ; G 52
U 82 ; WX 753 ; N R ; G 53
U 83 ; WX 685 ; N S ; G 54
U 84 ; WX 667 ; N T ; G 55
U 85 ; WX 843 ; N U ; G 56
U 86 ; WX 722 ; N V ; G 57
U 87 ; WX 1028 ; N W ; G 58
U 88 ; WX 712 ; N X ; G 59
U 89 ; WX 660 ; N Y ; G 60
U 90 ; WX 695 ; N Z ; G 61
U 91 ; WX 390 ; N bracketleft ; G 62
U 92 ; WX 337 ; N backslash ; G 63
U 93 ; WX 390 ; N bracketright ; G 64
U 94 ; WX 838 ; N asciicircum ; G 65
U 95 ; WX 500 ; N underscore ; G 66
U 96 ; WX 500 ; N grave ; G 67
U 97 ; WX 596 ; N a ; G 68
U 98 ; WX 640 ; N b ; G 69
U 99 ; WX 560 ; N c ; G 70
U 100 ; WX 640 ; N d ; G 71
U 101 ; WX 592 ; N e ; G 72
U 102 ; WX 370 ; N f ; G 73
U 103 ; WX 640 ; N g ; G 74
U 104 ; WX 644 ; N h ; G 75
U 105 ; WX 320 ; N i ; G 76
U 106 ; WX 310 ; N j ; G 77
U 107 ; WX 606 ; N k ; G 78
U 108 ; WX 320 ; N l ; G 79
U 109 ; WX 948 ; N m ; G 80
U 110 ; WX 644 ; N n ; G 81
U 111 ; WX 602 ; N o ; G 82
U 112 ; WX 640 ; N p ; G 83
U 113 ; WX 640 ; N q ; G 84
U 114 ; WX 478 ; N r ; G 85
U 115 ; WX 513 ; N s ; G 86
U 116 ; WX 402 ; N t ; G 87
U 117 ; WX 644 ; N u ; G 88
U 118 ; WX 565 ; N v ; G 89
U 119 ; WX 856 ; N w ; G 90
U 120 ; WX 564 ; N x ; G 91
U 121 ; WX 565 ; N y ; G 92
U 122 ; WX 527 ; N z ; G 93
U 123 ; WX 636 ; N braceleft ; G 94
U 124 ; WX 337 ; N bar ; G 95
U 125 ; WX 636 ; N braceright ; G 96
U 126 ; WX 838 ; N asciitilde ; G 97
U 160 ; WX 318 ; N nbspace ; G 98
U 161 ; WX 402 ; N exclamdown ; G 99
U 162 ; WX 636 ; N cent ; G 100
U 163 ; WX 636 ; N sterling ; G 101
U 164 ; WX 636 ; N currency ; G 102
U 165 ; WX 636 ; N yen ; G 103
U 166 ; WX 337 ; N brokenbar ; G 104
U 167 ; WX 500 ; N section ; G 105
U 168 ; WX 500 ; N dieresis ; G 106
U 169 ; WX 1000 ; N copyright ; G 107
U 170 ; WX 475 ; N ordfeminine ; G 108
U 171 ; WX 612 ; N guillemotleft ; G 109
U 172 ; WX 838 ; N logicalnot ; G 110
U 173 ; WX 338 ; N sfthyphen ; G 111
U 174 ; WX 1000 ; N registered ; G 112
U 175 ; WX 500 ; N macron ; G 113
U 176 ; WX 500 ; N degree ; G 114
U 177 ; WX 838 ; N plusminus ; G 115
U 178 ; WX 401 ; N twosuperior ; G 116
U 179 ; WX 401 ; N threesuperior ; G 117
U 180 ; WX 500 ; N acute ; G 118
U 181 ; WX 650 ; N mu ; G 119
U 182 ; WX 636 ; N paragraph ; G 120
U 183 ; WX 318 ; N periodcentered ; G 121
U 184 ; WX 500 ; N cedilla ; G 122
U 185 ; WX 401 ; N onesuperior ; G 123
U 186 ; WX 470 ; N ordmasculine ; G 124
U 187 ; WX 612 ; N guillemotright ; G 125
U 188 ; WX 969 ; N onequarter ; G 126
U 189 ; WX 969 ; N onehalf ; G 127
U 190 ; WX 969 ; N threequarters ; G 128
U 191 ; WX 536 ; N questiondown ; G 129
U 192 ; WX 722 ; N Agrave ; G 130
U 193 ; WX 722 ; N Aacute ; G 131
U 194 ; WX 722 ; N Acircumflex ; G 132
U 195 ; WX 722 ; N Atilde ; G 133
U 196 ; WX 722 ; N Adieresis ; G 134
U 197 ; WX 722 ; N Aring ; G 135
U 198 ; WX 1001 ; N AE ; G 136
U 199 ; WX 765 ; N Ccedilla ; G 137
U 200 ; WX 730 ; N Egrave ; G 138
U 201 ; WX 730 ; N Eacute ; G 139
U 202 ; WX 730 ; N Ecircumflex ; G 140
U 203 ; WX 730 ; N Edieresis ; G 141
U 204 ; WX 395 ; N Igrave ; G 142
U 205 ; WX 395 ; N Iacute ; G 143
U 206 ; WX 395 ; N Icircumflex ; G 144
U 207 ; WX 395 ; N Idieresis ; G 145
U 208 ; WX 807 ; N Eth ; G 146
U 209 ; WX 875 ; N Ntilde ; G 147
U 210 ; WX 820 ; N Ograve ; G 148
U 211 ; WX 820 ; N Oacute ; G 149
U 212 ; WX 820 ; N Ocircumflex ; G 150
U 213 ; WX 820 ; N Otilde ; G 151
U 214 ; WX 820 ; N Odieresis ; G 152
U 215 ; WX 838 ; N multiply ; G 153
U 216 ; WX 820 ; N Oslash ; G 154
U 217 ; WX 843 ; N Ugrave ; G 155
U 218 ; WX 843 ; N Uacute ; G 156
U 219 ; WX 843 ; N Ucircumflex ; G 157
U 220 ; WX 843 ; N Udieresis ; G 158
U 221 ; WX 660 ; N Yacute ; G 159
U 222 ; WX 676 ; N Thorn ; G 160
U 223 ; WX 668 ; N germandbls ; G 161
U 224 ; WX 596 ; N agrave ; G 162
U 225 ; WX 596 ; N aacute ; G 163
U 226 ; WX 596 ; N acircumflex ; G 164
U 227 ; WX 596 ; N atilde ; G 165
U 228 ; WX 596 ; N adieresis ; G 166
U 229 ; WX 596 ; N aring ; G 167
U 230 ; WX 940 ; N ae ; G 168
U 231 ; WX 560 ; N ccedilla ; G 169
U 232 ; WX 592 ; N egrave ; G 170
U 233 ; WX 592 ; N eacute ; G 171
U 234 ; WX 592 ; N ecircumflex ; G 172
U 235 ; WX 592 ; N edieresis ; G 173
U 236 ; WX 320 ; N igrave ; G 174
U 237 ; WX 320 ; N iacute ; G 175
U 238 ; WX 320 ; N icircumflex ; G 176
U 239 ; WX 320 ; N idieresis ; G 177
U 240 ; WX 602 ; N eth ; G 178
U 241 ; WX 644 ; N ntilde ; G 179
U 242 ; WX 602 ; N ograve ; G 180
U 243 ; WX 602 ; N oacute ; G 181
U 244 ; WX 602 ; N ocircumflex ; G 182
U 245 ; WX 602 ; N otilde ; G 183
U 246 ; WX 602 ; N odieresis ; G 184
U 247 ; WX 838 ; N divide ; G 185
U 248 ; WX 602 ; N oslash ; G 186
U 249 ; WX 644 ; N ugrave ; G 187
U 250 ; WX 644 ; N uacute ; G 188
U 251 ; WX 644 ; N ucircumflex ; G 189
U 252 ; WX 644 ; N udieresis ; G 190
U 253 ; WX 565 ; N yacute ; G 191
U 254 ; WX 640 ; N thorn ; G 192
U 255 ; WX 565 ; N ydieresis ; G 193
U 256 ; WX 722 ; N Amacron ; G 194
U 257 ; WX 596 ; N amacron ; G 195
U 258 ; WX 722 ; N Abreve ; G 196
U 259 ; WX 596 ; N abreve ; G 197
U 260 ; WX 722 ; N Aogonek ; G 198
U 261 ; WX 596 ; N aogonek ; G 199
U 262 ; WX 765 ; N Cacute ; G 200
U 263 ; WX 560 ; N cacute ; G 201
U 264 ; WX 765 ; N Ccircumflex ; G 202
U 265 ; WX 560 ; N ccircumflex ; G 203
U 266 ; WX 765 ; N Cdotaccent ; G 204
U 267 ; WX 560 ; N cdotaccent ; G 205
U 268 ; WX 765 ; N Ccaron ; G 206
U 269 ; WX 560 ; N ccaron ; G 207
U 270 ; WX 802 ; N Dcaron ; G 208
U 271 ; WX 640 ; N dcaron ; G 209
U 272 ; WX 807 ; N Dcroat ; G 210
U 273 ; WX 640 ; N dmacron ; G 211
U 274 ; WX 730 ; N Emacron ; G 212
U 275 ; WX 592 ; N emacron ; G 213
U 276 ; WX 730 ; N Ebreve ; G 214
U 277 ; WX 592 ; N ebreve ; G 215
U 278 ; WX 730 ; N Edotaccent ; G 216
U 279 ; WX 592 ; N edotaccent ; G 217
U 280 ; WX 730 ; N Eogonek ; G 218
U 281 ; WX 592 ; N eogonek ; G 219
U 282 ; WX 730 ; N Ecaron ; G 220
U 283 ; WX 592 ; N ecaron ; G 221
U 284 ; WX 799 ; N Gcircumflex ; G 222
U 285 ; WX 640 ; N gcircumflex ; G 223
U 286 ; WX 799 ; N Gbreve ; G 224
U 287 ; WX 640 ; N gbreve ; G 225
U 288 ; WX 799 ; N Gdotaccent ; G 226
U 289 ; WX 640 ; N gdotaccent ; G 227
U 290 ; WX 799 ; N Gcommaaccent ; G 228
U 291 ; WX 640 ; N gcommaaccent ; G 229
U 292 ; WX 872 ; N Hcircumflex ; G 230
U 293 ; WX 644 ; N hcircumflex ; G 231
U 294 ; WX 872 ; N Hbar ; G 232
U 295 ; WX 644 ; N hbar ; G 233
U 296 ; WX 395 ; N Itilde ; G 234
U 297 ; WX 320 ; N itilde ; G 235
U 298 ; WX 395 ; N Imacron ; G 236
U 299 ; WX 320 ; N imacron ; G 237
U 300 ; WX 395 ; N Ibreve ; G 238
U 301 ; WX 320 ; N ibreve ; G 239
U 302 ; WX 395 ; N Iogonek ; G 240
U 303 ; WX 320 ; N iogonek ; G 241
U 304 ; WX 395 ; N Idot ; G 242
U 305 ; WX 320 ; N dotlessi ; G 243
U 306 ; WX 801 ; N IJ ; G 244
U 307 ; WX 533 ; N ij ; G 245
U 308 ; WX 401 ; N Jcircumflex ; G 246
U 309 ; WX 310 ; N jcircumflex ; G 247
U 310 ; WX 747 ; N Kcommaaccent ; G 248
U 311 ; WX 606 ; N kcommaaccent ; G 249
U 312 ; WX 606 ; N kgreenlandic ; G 250
U 313 ; WX 664 ; N Lacute ; G 251
U 314 ; WX 320 ; N lacute ; G 252
U 315 ; WX 664 ; N Lcommaaccent ; G 253
U 316 ; WX 320 ; N lcommaaccent ; G 254
U 317 ; WX 664 ; N Lcaron ; G 255
U 318 ; WX 320 ; N lcaron ; G 256
U 319 ; WX 664 ; N Ldot ; G 257
U 320 ; WX 320 ; N ldot ; G 258
U 321 ; WX 669 ; N Lslash ; G 259
U 322 ; WX 324 ; N lslash ; G 260
U 323 ; WX 875 ; N Nacute ; G 261
U 324 ; WX 644 ; N nacute ; G 262
U 325 ; WX 875 ; N Ncommaaccent ; G 263
U 326 ; WX 644 ; N ncommaaccent ; G 264
U 327 ; WX 875 ; N Ncaron ; G 265
U 328 ; WX 644 ; N ncaron ; G 266
U 329 ; WX 866 ; N napostrophe ; G 267
U 330 ; WX 843 ; N Eng ; G 268
U 331 ; WX 644 ; N eng ; G 269
U 332 ; WX 820 ; N Omacron ; G 270
U 333 ; WX 602 ; N omacron ; G 271
U 334 ; WX 820 ; N Obreve ; G 272
U 335 ; WX 602 ; N obreve ; G 273
U 336 ; WX 820 ; N Ohungarumlaut ; G 274
U 337 ; WX 602 ; N ohungarumlaut ; G 275
U 338 ; WX 1137 ; N OE ; G 276
U 339 ; WX 989 ; N oe ; G 277
U 340 ; WX 753 ; N Racute ; G 278
U 341 ; WX 478 ; N racute ; G 279
U 342 ; WX 753 ; N Rcommaaccent ; G 280
U 343 ; WX 478 ; N rcommaaccent ; G 281
U 344 ; WX 753 ; N Rcaron ; G 282
U 345 ; WX 478 ; N rcaron ; G 283
U 346 ; WX 685 ; N Sacute ; G 284
U 347 ; WX 513 ; N sacute ; G 285
U 348 ; WX 685 ; N Scircumflex ; G 286
U 349 ; WX 513 ; N scircumflex ; G 287
U 350 ; WX 685 ; N Scedilla ; G 288
U 351 ; WX 513 ; N scedilla ; G 289
U 352 ; WX 685 ; N Scaron ; G 290
U 353 ; WX 513 ; N scaron ; G 291
U 354 ; WX 667 ; N Tcommaaccent ; G 292
U 355 ; WX 402 ; N tcommaaccent ; G 293
U 356 ; WX 667 ; N Tcaron ; G 294
U 357 ; WX 402 ; N tcaron ; G 295
U 358 ; WX 667 ; N Tbar ; G 296
U 359 ; WX 402 ; N tbar ; G 297
U 360 ; WX 843 ; N Utilde ; G 298
U 361 ; WX 644 ; N utilde ; G 299
U 362 ; WX 843 ; N Umacron ; G 300
U 363 ; WX 644 ; N umacron ; G 301
U 364 ; WX 843 ; N Ubreve ; G 302
U 365 ; WX 644 ; N ubreve ; G 303
U 366 ; WX 843 ; N Uring ; G 304
U 367 ; WX 644 ; N uring ; G 305
U 368 ; WX 843 ; N Uhungarumlaut ; G 306
U 369 ; WX 644 ; N uhungarumlaut ; G 307
U 370 ; WX 843 ; N Uogonek ; G 308
U 371 ; WX 644 ; N uogonek ; G 309
U 372 ; WX 1028 ; N Wcircumflex ; G 310
U 373 ; WX 856 ; N wcircumflex ; G 311
U 374 ; WX 660 ; N Ycircumflex ; G 312
U 375 ; WX 565 ; N ycircumflex ; G 313
U 376 ; WX 660 ; N Ydieresis ; G 314
U 377 ; WX 695 ; N Zacute ; G 315
U 378 ; WX 527 ; N zacute ; G 316
U 379 ; WX 695 ; N Zdotaccent ; G 317
U 380 ; WX 527 ; N zdotaccent ; G 318
U 381 ; WX 695 ; N Zcaron ; G 319
U 382 ; WX 527 ; N zcaron ; G 320
U 383 ; WX 370 ; N longs ; G 321
U 384 ; WX 640 ; N uni0180 ; G 322
U 385 ; WX 735 ; N uni0181 ; G 323
U 386 ; WX 735 ; N uni0182 ; G 324
U 387 ; WX 640 ; N uni0183 ; G 325
U 388 ; WX 735 ; N uni0184 ; G 326
U 389 ; WX 640 ; N uni0185 ; G 327
U 390 ; WX 765 ; N uni0186 ; G 328
U 391 ; WX 765 ; N uni0187 ; G 329
U 392 ; WX 560 ; N uni0188 ; G 330
U 393 ; WX 807 ; N uni0189 ; G 331
U 394 ; WX 802 ; N uni018A ; G 332
U 395 ; WX 735 ; N uni018B ; G 333
U 396 ; WX 640 ; N uni018C ; G 334
U 397 ; WX 602 ; N uni018D ; G 335
U 398 ; WX 730 ; N uni018E ; G 336
U 399 ; WX 820 ; N uni018F ; G 337
U 400 ; WX 623 ; N uni0190 ; G 338
U 401 ; WX 694 ; N uni0191 ; G 339
U 402 ; WX 370 ; N florin ; G 340
U 403 ; WX 799 ; N uni0193 ; G 341
U 404 ; WX 712 ; N uni0194 ; G 342
U 405 ; WX 932 ; N uni0195 ; G 343
U 406 ; WX 395 ; N uni0196 ; G 344
U 407 ; WX 395 ; N uni0197 ; G 345
U 408 ; WX 747 ; N uni0198 ; G 346
U 409 ; WX 606 ; N uni0199 ; G 347
U 410 ; WX 320 ; N uni019A ; G 348
U 411 ; WX 634 ; N uni019B ; G 349
U 412 ; WX 948 ; N uni019C ; G 350
U 413 ; WX 875 ; N uni019D ; G 351
U 414 ; WX 644 ; N uni019E ; G 352
U 415 ; WX 820 ; N uni019F ; G 353
U 416 ; WX 820 ; N Ohorn ; G 354
U 417 ; WX 602 ; N ohorn ; G 355
U 418 ; WX 1040 ; N uni01A2 ; G 356
U 419 ; WX 807 ; N uni01A3 ; G 357
U 420 ; WX 673 ; N uni01A4 ; G 358
U 421 ; WX 640 ; N uni01A5 ; G 359
U 422 ; WX 753 ; N uni01A6 ; G 360
U 423 ; WX 685 ; N uni01A7 ; G 361
U 424 ; WX 513 ; N uni01A8 ; G 362
U 425 ; WX 707 ; N uni01A9 ; G 363
U 426 ; WX 324 ; N uni01AA ; G 364
U 427 ; WX 402 ; N uni01AB ; G 365
U 428 ; WX 667 ; N uni01AC ; G 366
U 429 ; WX 402 ; N uni01AD ; G 367
U 430 ; WX 667 ; N uni01AE ; G 368
U 431 ; WX 843 ; N Uhorn ; G 369
U 432 ; WX 644 ; N uhorn ; G 370
U 433 ; WX 829 ; N uni01B1 ; G 371
U 434 ; WX 760 ; N uni01B2 ; G 372
U 435 ; WX 738 ; N uni01B3 ; G 373
U 436 ; WX 663 ; N uni01B4 ; G 374
U 437 ; WX 695 ; N uni01B5 ; G 375
U 438 ; WX 527 ; N uni01B6 ; G 376
U 439 ; WX 564 ; N uni01B7 ; G 377
U 440 ; WX 564 ; N uni01B8 ; G 378
U 441 ; WX 564 ; N uni01B9 ; G 379
U 442 ; WX 564 ; N uni01BA ; G 380
U 443 ; WX 636 ; N uni01BB ; G 381
U 444 ; WX 687 ; N uni01BC ; G 382
U 445 ; WX 564 ; N uni01BD ; G 383
U 446 ; WX 536 ; N uni01BE ; G 384
U 447 ; WX 635 ; N uni01BF ; G 385
U 448 ; WX 295 ; N uni01C0 ; G 386
U 449 ; WX 492 ; N uni01C1 ; G 387
U 450 ; WX 459 ; N uni01C2 ; G 388
U 451 ; WX 295 ; N uni01C3 ; G 389
U 452 ; WX 1497 ; N uni01C4 ; G 390
U 453 ; WX 1329 ; N uni01C5 ; G 391
U 454 ; WX 1167 ; N uni01C6 ; G 392
U 455 ; WX 1065 ; N uni01C7 ; G 393
U 456 ; WX 974 ; N uni01C8 ; G 394
U 457 ; WX 630 ; N uni01C9 ; G 395
U 458 ; WX 1276 ; N uni01CA ; G 396
U 459 ; WX 1185 ; N uni01CB ; G 397
U 460 ; WX 954 ; N uni01CC ; G 398
U 461 ; WX 722 ; N uni01CD ; G 399
U 462 ; WX 596 ; N uni01CE ; G 400
U 463 ; WX 395 ; N uni01CF ; G 401
U 464 ; WX 320 ; N uni01D0 ; G 402
U 465 ; WX 820 ; N uni01D1 ; G 403
U 466 ; WX 602 ; N uni01D2 ; G 404
U 467 ; WX 843 ; N uni01D3 ; G 405
U 468 ; WX 644 ; N uni01D4 ; G 406
U 469 ; WX 843 ; N uni01D5 ; G 407
U 470 ; WX 644 ; N uni01D6 ; G 408
U 471 ; WX 843 ; N uni01D7 ; G 409
U 472 ; WX 644 ; N uni01D8 ; G 410
U 473 ; WX 843 ; N uni01D9 ; G 411
U 474 ; WX 644 ; N uni01DA ; G 412
U 475 ; WX 843 ; N uni01DB ; G 413
U 476 ; WX 644 ; N uni01DC ; G 414
U 477 ; WX 592 ; N uni01DD ; G 415
U 478 ; WX 722 ; N uni01DE ; G 416
U 479 ; WX 596 ; N uni01DF ; G 417
U 480 ; WX 722 ; N uni01E0 ; G 418
U 481 ; WX 596 ; N uni01E1 ; G 419
U 482 ; WX 1001 ; N uni01E2 ; G 420
U 483 ; WX 940 ; N uni01E3 ; G 421
U 484 ; WX 848 ; N uni01E4 ; G 422
U 485 ; WX 640 ; N uni01E5 ; G 423
U 486 ; WX 799 ; N Gcaron ; G 424
U 487 ; WX 640 ; N gcaron ; G 425
U 488 ; WX 747 ; N uni01E8 ; G 426
U 489 ; WX 606 ; N uni01E9 ; G 427
U 490 ; WX 820 ; N uni01EA ; G 428
U 491 ; WX 602 ; N uni01EB ; G 429
U 492 ; WX 820 ; N uni01EC ; G 430
U 493 ; WX 602 ; N uni01ED ; G 431
U 494 ; WX 564 ; N uni01EE ; G 432
U 495 ; WX 564 ; N uni01EF ; G 433
U 496 ; WX 320 ; N uni01F0 ; G 434
U 497 ; WX 1497 ; N uni01F1 ; G 435
U 498 ; WX 1329 ; N uni01F2 ; G 436
U 499 ; WX 1167 ; N uni01F3 ; G 437
U 500 ; WX 799 ; N uni01F4 ; G 438
U 501 ; WX 640 ; N uni01F5 ; G 439
U 502 ; WX 1154 ; N uni01F6 ; G 440
U 503 ; WX 707 ; N uni01F7 ; G 441
U 504 ; WX 875 ; N uni01F8 ; G 442
U 505 ; WX 644 ; N uni01F9 ; G 443
U 506 ; WX 722 ; N Aringacute ; G 444
U 507 ; WX 596 ; N aringacute ; G 445
U 508 ; WX 1001 ; N AEacute ; G 446
U 509 ; WX 940 ; N aeacute ; G 447
U 510 ; WX 820 ; N Oslashacute ; G 448
U 511 ; WX 602 ; N oslashacute ; G 449
U 512 ; WX 722 ; N uni0200 ; G 450
U 513 ; WX 596 ; N uni0201 ; G 451
U 514 ; WX 722 ; N uni0202 ; G 452
U 515 ; WX 596 ; N uni0203 ; G 453
U 516 ; WX 730 ; N uni0204 ; G 454
U 517 ; WX 592 ; N uni0205 ; G 455
U 518 ; WX 730 ; N uni0206 ; G 456
U 519 ; WX 592 ; N uni0207 ; G 457
U 520 ; WX 395 ; N uni0208 ; G 458
U 521 ; WX 320 ; N uni0209 ; G 459
U 522 ; WX 395 ; N uni020A ; G 460
U 523 ; WX 320 ; N uni020B ; G 461
U 524 ; WX 820 ; N uni020C ; G 462
U 525 ; WX 602 ; N uni020D ; G 463
U 526 ; WX 820 ; N uni020E ; G 464
U 527 ; WX 602 ; N uni020F ; G 465
U 528 ; WX 753 ; N uni0210 ; G 466
U 529 ; WX 478 ; N uni0211 ; G 467
U 530 ; WX 753 ; N uni0212 ; G 468
U 531 ; WX 478 ; N uni0213 ; G 469
U 532 ; WX 843 ; N uni0214 ; G 470
U 533 ; WX 644 ; N uni0215 ; G 471
U 534 ; WX 843 ; N uni0216 ; G 472
U 535 ; WX 644 ; N uni0217 ; G 473
U 536 ; WX 685 ; N Scommaaccent ; G 474
U 537 ; WX 513 ; N scommaaccent ; G 475
U 538 ; WX 667 ; N uni021A ; G 476
U 539 ; WX 402 ; N uni021B ; G 477
U 540 ; WX 627 ; N uni021C ; G 478
U 541 ; WX 521 ; N uni021D ; G 479
U 542 ; WX 872 ; N uni021E ; G 480
U 543 ; WX 644 ; N uni021F ; G 481
U 544 ; WX 843 ; N uni0220 ; G 482
U 545 ; WX 814 ; N uni0221 ; G 483
U 546 ; WX 572 ; N uni0222 ; G 484
U 547 ; WX 552 ; N uni0223 ; G 485
U 548 ; WX 695 ; N uni0224 ; G 486
U 549 ; WX 527 ; N uni0225 ; G 487
U 550 ; WX 722 ; N uni0226 ; G 488
U 551 ; WX 596 ; N uni0227 ; G 489
U 552 ; WX 730 ; N uni0228 ; G 490
U 553 ; WX 592 ; N uni0229 ; G 491
U 554 ; WX 820 ; N uni022A ; G 492
U 555 ; WX 602 ; N uni022B ; G 493
U 556 ; WX 820 ; N uni022C ; G 494
U 557 ; WX 602 ; N uni022D ; G 495
U 558 ; WX 820 ; N uni022E ; G 496
U 559 ; WX 602 ; N uni022F ; G 497
U 560 ; WX 820 ; N uni0230 ; G 498
U 561 ; WX 602 ; N uni0231 ; G 499
U 562 ; WX 660 ; N uni0232 ; G 500
U 563 ; WX 565 ; N uni0233 ; G 501
U 564 ; WX 500 ; N uni0234 ; G 502
U 565 ; WX 832 ; N uni0235 ; G 503
U 566 ; WX 494 ; N uni0236 ; G 504
U 567 ; WX 310 ; N dotlessj ; G 505
U 568 ; WX 960 ; N uni0238 ; G 506
U 569 ; WX 960 ; N uni0239 ; G 507
U 570 ; WX 722 ; N uni023A ; G 508
U 571 ; WX 765 ; N uni023B ; G 509
U 572 ; WX 560 ; N uni023C ; G 510
U 573 ; WX 664 ; N uni023D ; G 511
U 574 ; WX 667 ; N uni023E ; G 512
U 575 ; WX 513 ; N uni023F ; G 513
U 576 ; WX 527 ; N uni0240 ; G 514
U 577 ; WX 583 ; N uni0241 ; G 515
U 578 ; WX 464 ; N uni0242 ; G 516
U 579 ; WX 735 ; N uni0243 ; G 517
U 580 ; WX 843 ; N uni0244 ; G 518
U 581 ; WX 722 ; N uni0245 ; G 519
U 582 ; WX 730 ; N uni0246 ; G 520
U 583 ; WX 592 ; N uni0247 ; G 521
U 584 ; WX 401 ; N uni0248 ; G 522
U 585 ; WX 315 ; N uni0249 ; G 523
U 586 ; WX 782 ; N uni024A ; G 524
U 587 ; WX 640 ; N uni024B ; G 525
U 588 ; WX 753 ; N uni024C ; G 526
U 589 ; WX 478 ; N uni024D ; G 527
U 590 ; WX 660 ; N uni024E ; G 528
U 591 ; WX 565 ; N uni024F ; G 529
U 592 ; WX 596 ; N uni0250 ; G 530
U 593 ; WX 640 ; N uni0251 ; G 531
U 594 ; WX 640 ; N uni0252 ; G 532
U 595 ; WX 640 ; N uni0253 ; G 533
U 596 ; WX 560 ; N uni0254 ; G 534
U 597 ; WX 560 ; N uni0255 ; G 535
U 598 ; WX 647 ; N uni0256 ; G 536
U 599 ; WX 683 ; N uni0257 ; G 537
U 600 ; WX 592 ; N uni0258 ; G 538
U 601 ; WX 592 ; N uni0259 ; G 539
U 602 ; WX 843 ; N uni025A ; G 540
U 603 ; WX 518 ; N uni025B ; G 541
U 604 ; WX 509 ; N uni025C ; G 542
U 605 ; WX 773 ; N uni025D ; G 543
U 606 ; WX 613 ; N uni025E ; G 544
U 607 ; WX 315 ; N uni025F ; G 545
U 608 ; WX 683 ; N uni0260 ; G 546
U 609 ; WX 640 ; N uni0261 ; G 547
U 610 ; WX 580 ; N uni0262 ; G 548
U 611 ; WX 599 ; N uni0263 ; G 549
U 612 ; WX 564 ; N uni0264 ; G 550
U 613 ; WX 644 ; N uni0265 ; G 551
U 614 ; WX 644 ; N uni0266 ; G 552
U 615 ; WX 644 ; N uni0267 ; G 553
U 616 ; WX 320 ; N uni0268 ; G 554
U 617 ; WX 392 ; N uni0269 ; G 555
U 618 ; WX 320 ; N uni026A ; G 556
U 619 ; WX 380 ; N uni026B ; G 557
U 620 ; WX 454 ; N uni026C ; G 558
U 621 ; WX 363 ; N uni026D ; G 559
U 622 ; WX 704 ; N uni026E ; G 560
U 623 ; WX 948 ; N uni026F ; G 561
U 624 ; WX 948 ; N uni0270 ; G 562
U 625 ; WX 948 ; N uni0271 ; G 563
U 626 ; WX 644 ; N uni0272 ; G 564
U 627 ; WX 694 ; N uni0273 ; G 565
U 628 ; WX 646 ; N uni0274 ; G 566
U 629 ; WX 602 ; N uni0275 ; G 567
U 630 ; WX 790 ; N uni0276 ; G 568
U 631 ; WX 821 ; N uni0277 ; G 569
U 632 ; WX 692 ; N uni0278 ; G 570
U 633 ; WX 501 ; N uni0279 ; G 571
U 634 ; WX 501 ; N uni027A ; G 572
U 635 ; WX 551 ; N uni027B ; G 573
U 636 ; WX 478 ; N uni027C ; G 574
U 637 ; WX 478 ; N uni027D ; G 575
U 638 ; WX 453 ; N uni027E ; G 576
U 639 ; WX 453 ; N uni027F ; G 577
U 640 ; WX 581 ; N uni0280 ; G 578
U 641 ; WX 581 ; N uni0281 ; G 579
U 642 ; WX 513 ; N uni0282 ; G 580
U 643 ; WX 271 ; N uni0283 ; G 581
U 644 ; WX 370 ; N uni0284 ; G 582
U 645 ; WX 487 ; N uni0285 ; G 583
U 646 ; WX 324 ; N uni0286 ; G 584
U 647 ; WX 402 ; N uni0287 ; G 585
U 648 ; WX 402 ; N uni0288 ; G 586
U 649 ; WX 644 ; N uni0289 ; G 587
U 650 ; WX 620 ; N uni028A ; G 588
U 651 ; WX 608 ; N uni028B ; G 589
U 652 ; WX 565 ; N uni028C ; G 590
U 653 ; WX 856 ; N uni028D ; G 591
U 654 ; WX 565 ; N uni028E ; G 592
U 655 ; WX 655 ; N uni028F ; G 593
U 656 ; WX 597 ; N uni0290 ; G 594
U 657 ; WX 560 ; N uni0291 ; G 595
U 658 ; WX 564 ; N uni0292 ; G 596
U 659 ; WX 560 ; N uni0293 ; G 597
U 660 ; WX 536 ; N uni0294 ; G 598
U 661 ; WX 536 ; N uni0295 ; G 599
U 662 ; WX 536 ; N uni0296 ; G 600
U 663 ; WX 420 ; N uni0297 ; G 601
U 664 ; WX 820 ; N uni0298 ; G 602
U 665 ; WX 563 ; N uni0299 ; G 603
U 666 ; WX 613 ; N uni029A ; G 604
U 667 ; WX 660 ; N uni029B ; G 605
U 668 ; WX 667 ; N uni029C ; G 606
U 669 ; WX 366 ; N uni029D ; G 607
U 670 ; WX 606 ; N uni029E ; G 608
U 671 ; WX 543 ; N uni029F ; G 609
U 672 ; WX 683 ; N uni02A0 ; G 610
U 673 ; WX 536 ; N uni02A1 ; G 611
U 674 ; WX 536 ; N uni02A2 ; G 612
U 675 ; WX 996 ; N uni02A3 ; G 613
U 676 ; WX 1033 ; N uni02A4 ; G 614
U 677 ; WX 998 ; N uni02A5 ; G 615
U 678 ; WX 823 ; N uni02A6 ; G 616
U 679 ; WX 598 ; N uni02A7 ; G 617
U 680 ; WX 825 ; N uni02A8 ; G 618
U 681 ; WX 894 ; N uni02A9 ; G 619
U 682 ; WX 725 ; N uni02AA ; G 620
U 683 ; WX 676 ; N uni02AB ; G 621
U 684 ; WX 598 ; N uni02AC ; G 622
U 685 ; WX 443 ; N uni02AD ; G 623
U 686 ; WX 781 ; N uni02AE ; G 624
U 687 ; WX 767 ; N uni02AF ; G 625
U 688 ; WX 433 ; N uni02B0 ; G 626
U 689 ; WX 430 ; N uni02B1 ; G 627
U 690 ; WX 264 ; N uni02B2 ; G 628
U 691 ; WX 347 ; N uni02B3 ; G 629
U 692 ; WX 347 ; N uni02B4 ; G 630
U 693 ; WX 430 ; N uni02B5 ; G 631
U 694 ; WX 392 ; N uni02B6 ; G 632
U 695 ; WX 585 ; N uni02B7 ; G 633
U 696 ; WX 423 ; N uni02B8 ; G 634
U 697 ; WX 278 ; N uni02B9 ; G 635
U 698 ; WX 460 ; N uni02BA ; G 636
U 699 ; WX 318 ; N uni02BB ; G 637
U 700 ; WX 318 ; N uni02BC ; G 638
U 701 ; WX 318 ; N uni02BD ; G 639
U 702 ; WX 307 ; N uni02BE ; G 640
U 703 ; WX 307 ; N uni02BF ; G 641
U 704 ; WX 280 ; N uni02C0 ; G 642
U 705 ; WX 281 ; N uni02C1 ; G 643
U 706 ; WX 500 ; N uni02C2 ; G 644
U 707 ; WX 500 ; N uni02C3 ; G 645
U 708 ; WX 500 ; N uni02C4 ; G 646
U 709 ; WX 500 ; N uni02C5 ; G 647
U 710 ; WX 500 ; N circumflex ; G 648
U 711 ; WX 500 ; N caron ; G 649
U 712 ; WX 275 ; N uni02C8 ; G 650
U 713 ; WX 500 ; N uni02C9 ; G 651
U 714 ; WX 500 ; N uni02CA ; G 652
U 715 ; WX 500 ; N uni02CB ; G 653
U 716 ; WX 275 ; N uni02CC ; G 654
U 717 ; WX 500 ; N uni02CD ; G 655
U 720 ; WX 337 ; N uni02D0 ; G 656
U 721 ; WX 337 ; N uni02D1 ; G 657
U 722 ; WX 307 ; N uni02D2 ; G 658
U 723 ; WX 307 ; N uni02D3 ; G 659
U 726 ; WX 329 ; N uni02D6 ; G 660
U 727 ; WX 329 ; N uni02D7 ; G 661
U 728 ; WX 500 ; N breve ; G 662
U 729 ; WX 500 ; N dotaccent ; G 663
U 730 ; WX 500 ; N ring ; G 664
U 731 ; WX 500 ; N ogonek ; G 665
U 732 ; WX 500 ; N tilde ; G 666
U 733 ; WX 500 ; N hungarumlaut ; G 667
U 734 ; WX 417 ; N uni02DE ; G 668
U 736 ; WX 377 ; N uni02E0 ; G 669
U 737 ; WX 243 ; N uni02E1 ; G 670
U 738 ; WX 337 ; N uni02E2 ; G 671
U 739 ; WX 424 ; N uni02E3 ; G 672
U 740 ; WX 281 ; N uni02E4 ; G 673
U 741 ; WX 493 ; N uni02E5 ; G 674
U 742 ; WX 493 ; N uni02E6 ; G 675
U 743 ; WX 493 ; N uni02E7 ; G 676
U 744 ; WX 493 ; N uni02E8 ; G 677
U 745 ; WX 493 ; N uni02E9 ; G 678
U 748 ; WX 500 ; N uni02EC ; G 679
U 750 ; WX 484 ; N uni02EE ; G 680
U 751 ; WX 500 ; N uni02EF ; G 681
U 752 ; WX 500 ; N uni02F0 ; G 682
U 755 ; WX 500 ; N uni02F3 ; G 683
U 759 ; WX 500 ; N uni02F7 ; G 684
U 768 ; WX 0 ; N gravecomb ; G 685
U 769 ; WX 0 ; N acutecomb ; G 686
U 770 ; WX 0 ; N uni0302 ; G 687
U 771 ; WX 0 ; N tildecomb ; G 688
U 772 ; WX 0 ; N uni0304 ; G 689
U 773 ; WX 0 ; N uni0305 ; G 690
U 774 ; WX 0 ; N uni0306 ; G 691
U 775 ; WX 0 ; N uni0307 ; G 692
U 776 ; WX 0 ; N uni0308 ; G 693
U 777 ; WX 0 ; N hookabovecomb ; G 694
U 778 ; WX 0 ; N uni030A ; G 695
U 779 ; WX 0 ; N uni030B ; G 696
U 780 ; WX 0 ; N uni030C ; G 697
U 781 ; WX 0 ; N uni030D ; G 698
U 782 ; WX 0 ; N uni030E ; G 699
U 783 ; WX 0 ; N uni030F ; G 700
U 784 ; WX 0 ; N uni0310 ; G 701
U 785 ; WX 0 ; N uni0311 ; G 702
U 786 ; WX 0 ; N uni0312 ; G 703
U 787 ; WX 0 ; N uni0313 ; G 704
U 788 ; WX 0 ; N uni0314 ; G 705
U 789 ; WX 0 ; N uni0315 ; G 706
U 790 ; WX 0 ; N uni0316 ; G 707
U 791 ; WX 0 ; N uni0317 ; G 708
U 792 ; WX 0 ; N uni0318 ; G 709
U 793 ; WX 0 ; N uni0319 ; G 710
U 794 ; WX 0 ; N uni031A ; G 711
U 795 ; WX 0 ; N uni031B ; G 712
U 796 ; WX 0 ; N uni031C ; G 713
U 797 ; WX 0 ; N uni031D ; G 714
U 798 ; WX 0 ; N uni031E ; G 715
U 799 ; WX 0 ; N uni031F ; G 716
U 800 ; WX 0 ; N uni0320 ; G 717
U 801 ; WX 0 ; N uni0321 ; G 718
U 802 ; WX 0 ; N uni0322 ; G 719
U 803 ; WX 0 ; N dotbelowcomb ; G 720
U 804 ; WX 0 ; N uni0324 ; G 721
U 805 ; WX 0 ; N uni0325 ; G 722
U 806 ; WX 0 ; N uni0326 ; G 723
U 807 ; WX 0 ; N uni0327 ; G 724
U 808 ; WX 0 ; N uni0328 ; G 725
U 809 ; WX 0 ; N uni0329 ; G 726
U 810 ; WX 0 ; N uni032A ; G 727
U 811 ; WX 0 ; N uni032B ; G 728
U 812 ; WX 0 ; N uni032C ; G 729
U 813 ; WX 0 ; N uni032D ; G 730
U 814 ; WX 0 ; N uni032E ; G 731
U 815 ; WX 0 ; N uni032F ; G 732
U 816 ; WX 0 ; N uni0330 ; G 733
U 817 ; WX 0 ; N uni0331 ; G 734
U 818 ; WX 0 ; N uni0332 ; G 735
U 819 ; WX 0 ; N uni0333 ; G 736
U 820 ; WX 0 ; N uni0334 ; G 737
U 821 ; WX 0 ; N uni0335 ; G 738
U 822 ; WX 0 ; N uni0336 ; G 739
U 823 ; WX 0 ; N uni0337 ; G 740
U 824 ; WX 0 ; N uni0338 ; G 741
U 825 ; WX 0 ; N uni0339 ; G 742
U 826 ; WX 0 ; N uni033A ; G 743
U 827 ; WX 0 ; N uni033B ; G 744
U 828 ; WX 0 ; N uni033C ; G 745
U 829 ; WX 0 ; N uni033D ; G 746
U 830 ; WX 0 ; N uni033E ; G 747
U 831 ; WX 0 ; N uni033F ; G 748
U 835 ; WX 0 ; N uni0343 ; G 749
U 847 ; WX 0 ; N uni034F ; G 750
U 856 ; WX 0 ; N uni0358 ; G 751
U 864 ; WX 0 ; N uni0360 ; G 752
U 865 ; WX 0 ; N uni0361 ; G 753
U 880 ; WX 740 ; N uni0370 ; G 754
U 881 ; WX 531 ; N uni0371 ; G 755
U 882 ; WX 667 ; N uni0372 ; G 756
U 883 ; WX 553 ; N uni0373 ; G 757
U 884 ; WX 278 ; N uni0374 ; G 758
U 885 ; WX 278 ; N uni0375 ; G 759
U 886 ; WX 875 ; N uni0376 ; G 760
U 887 ; WX 667 ; N uni0377 ; G 761
U 890 ; WX 500 ; N uni037A ; G 762
U 891 ; WX 560 ; N uni037B ; G 763
U 892 ; WX 560 ; N uni037C ; G 764
U 893 ; WX 560 ; N uni037D ; G 765
U 894 ; WX 337 ; N uni037E ; G 766
U 895 ; WX 401 ; N uni037F ; G 767
U 900 ; WX 500 ; N tonos ; G 768
U 901 ; WX 500 ; N dieresistonos ; G 769
U 902 ; WX 722 ; N Alphatonos ; G 770
U 903 ; WX 318 ; N anoteleia ; G 771
U 904 ; WX 900 ; N Epsilontonos ; G 772
U 905 ; WX 1039 ; N Etatonos ; G 773
U 906 ; WX 562 ; N Iotatonos ; G 774
U 908 ; WX 835 ; N Omicrontonos ; G 775
U 910 ; WX 897 ; N Upsilontonos ; G 776
U 911 ; WX 853 ; N Omegatonos ; G 777
U 912 ; WX 392 ; N iotadieresistonos ; G 778
U 913 ; WX 722 ; N Alpha ; G 779
U 914 ; WX 735 ; N Beta ; G 780
U 915 ; WX 694 ; N Gamma ; G 781
U 916 ; WX 722 ; N uni0394 ; G 782
U 917 ; WX 730 ; N Epsilon ; G 783
U 918 ; WX 695 ; N Zeta ; G 784
U 919 ; WX 872 ; N Eta ; G 785
U 920 ; WX 820 ; N Theta ; G 786
U 921 ; WX 395 ; N Iota ; G 787
U 922 ; WX 747 ; N Kappa ; G 788
U 923 ; WX 722 ; N Lambda ; G 789
U 924 ; WX 1024 ; N Mu ; G 790
U 925 ; WX 875 ; N Nu ; G 791
U 926 ; WX 704 ; N Xi ; G 792
U 927 ; WX 820 ; N Omicron ; G 793
U 928 ; WX 872 ; N Pi ; G 794
U 929 ; WX 673 ; N Rho ; G 795
U 931 ; WX 707 ; N Sigma ; G 796
U 932 ; WX 667 ; N Tau ; G 797
U 933 ; WX 660 ; N Upsilon ; G 798
U 934 ; WX 820 ; N Phi ; G 799
U 935 ; WX 712 ; N Chi ; G 800
U 936 ; WX 877 ; N Psi ; G 801
U 937 ; WX 829 ; N Omega ; G 802
U 938 ; WX 395 ; N Iotadieresis ; G 803
U 939 ; WX 660 ; N Upsilondieresis ; G 804
U 940 ; WX 675 ; N alphatonos ; G 805
U 941 ; WX 518 ; N epsilontonos ; G 806
U 942 ; WX 599 ; N etatonos ; G 807
U 943 ; WX 392 ; N iotatonos ; G 808
U 944 ; WX 608 ; N upsilondieresistonos ; G 809
U 945 ; WX 675 ; N alpha ; G 810
U 946 ; WX 578 ; N beta ; G 811
U 947 ; WX 598 ; N gamma ; G 812
U 948 ; WX 602 ; N delta ; G 813
U 949 ; WX 518 ; N epsilon ; G 814
U 950 ; WX 542 ; N zeta ; G 815
U 951 ; WX 599 ; N eta ; G 816
U 952 ; WX 602 ; N theta ; G 817
U 953 ; WX 392 ; N iota ; G 818
U 954 ; WX 625 ; N kappa ; G 819
U 955 ; WX 634 ; N lambda ; G 820
U 956 ; WX 650 ; N uni03BC ; G 821
U 957 ; WX 608 ; N nu ; G 822
U 958 ; WX 551 ; N xi ; G 823
U 959 ; WX 602 ; N omicron ; G 824
U 960 ; WX 657 ; N pi ; G 825
U 961 ; WX 588 ; N rho ; G 826
U 962 ; WX 560 ; N sigma1 ; G 827
U 963 ; WX 683 ; N sigma ; G 828
U 964 ; WX 553 ; N tau ; G 829
U 965 ; WX 608 ; N upsilon ; G 830
U 966 ; WX 700 ; N phi ; G 831
U 967 ; WX 606 ; N chi ; G 832
U 968 ; WX 784 ; N psi ; G 833
U 969 ; WX 815 ; N omega ; G 834
U 970 ; WX 392 ; N iotadieresis ; G 835
U 971 ; WX 608 ; N upsilondieresis ; G 836
U 972 ; WX 602 ; N omicrontonos ; G 837
U 973 ; WX 608 ; N upsilontonos ; G 838
U 974 ; WX 815 ; N omegatonos ; G 839
U 975 ; WX 747 ; N uni03CF ; G 840
U 976 ; WX 583 ; N uni03D0 ; G 841
U 977 ; WX 715 ; N theta1 ; G 842
U 978 ; WX 687 ; N Upsilon1 ; G 843
U 979 ; WX 874 ; N uni03D3 ; G 844
U 980 ; WX 687 ; N uni03D4 ; G 845
U 981 ; WX 682 ; N phi1 ; G 846
U 982 ; WX 815 ; N omega1 ; G 847
U 983 ; WX 624 ; N uni03D7 ; G 848
U 984 ; WX 820 ; N uni03D8 ; G 849
U 985 ; WX 602 ; N uni03D9 ; G 850
U 986 ; WX 765 ; N uni03DA ; G 851
U 987 ; WX 560 ; N uni03DB ; G 852
U 988 ; WX 694 ; N uni03DC ; G 853
U 989 ; WX 463 ; N uni03DD ; G 854
U 990 ; WX 590 ; N uni03DE ; G 855
U 991 ; WX 660 ; N uni03DF ; G 856
U 992 ; WX 782 ; N uni03E0 ; G 857
U 993 ; WX 577 ; N uni03E1 ; G 858
U 1008 ; WX 624 ; N uni03F0 ; G 859
U 1009 ; WX 588 ; N uni03F1 ; G 860
U 1010 ; WX 560 ; N uni03F2 ; G 861
U 1011 ; WX 310 ; N uni03F3 ; G 862
U 1012 ; WX 820 ; N uni03F4 ; G 863
U 1013 ; WX 560 ; N uni03F5 ; G 864
U 1014 ; WX 560 ; N uni03F6 ; G 865
U 1015 ; WX 676 ; N uni03F7 ; G 866
U 1016 ; WX 640 ; N uni03F8 ; G 867
U 1017 ; WX 765 ; N uni03F9 ; G 868
U 1018 ; WX 1024 ; N uni03FA ; G 869
U 1019 ; WX 708 ; N uni03FB ; G 870
U 1020 ; WX 588 ; N uni03FC ; G 871
U 1021 ; WX 765 ; N uni03FD ; G 872
U 1022 ; WX 765 ; N uni03FE ; G 873
U 1023 ; WX 765 ; N uni03FF ; G 874
U 1024 ; WX 730 ; N uni0400 ; G 875
U 1025 ; WX 730 ; N uni0401 ; G 876
U 1026 ; WX 799 ; N uni0402 ; G 877
U 1027 ; WX 662 ; N uni0403 ; G 878
U 1028 ; WX 765 ; N uni0404 ; G 879
U 1029 ; WX 685 ; N uni0405 ; G 880
U 1030 ; WX 395 ; N uni0406 ; G 881
U 1031 ; WX 395 ; N uni0407 ; G 882
U 1032 ; WX 401 ; N uni0408 ; G 883
U 1033 ; WX 1084 ; N uni0409 ; G 884
U 1034 ; WX 1118 ; N uni040A ; G 885
U 1035 ; WX 872 ; N uni040B ; G 886
U 1036 ; WX 774 ; N uni040C ; G 887
U 1037 ; WX 872 ; N uni040D ; G 888
U 1038 ; WX 723 ; N uni040E ; G 889
U 1039 ; WX 872 ; N uni040F ; G 890
U 1040 ; WX 757 ; N uni0410 ; G 891
U 1041 ; WX 735 ; N uni0411 ; G 892
U 1042 ; WX 735 ; N uni0412 ; G 893
U 1043 ; WX 662 ; N uni0413 ; G 894
U 1044 ; WX 813 ; N uni0414 ; G 895
U 1045 ; WX 730 ; N uni0415 ; G 896
U 1046 ; WX 1124 ; N uni0416 ; G 897
U 1047 ; WX 623 ; N uni0417 ; G 898
U 1048 ; WX 872 ; N uni0418 ; G 899
U 1049 ; WX 872 ; N uni0419 ; G 900
U 1050 ; WX 774 ; N uni041A ; G 901
U 1051 ; WX 834 ; N uni041B ; G 902
U 1052 ; WX 1024 ; N uni041C ; G 903
U 1053 ; WX 872 ; N uni041D ; G 904
U 1054 ; WX 820 ; N uni041E ; G 905
U 1055 ; WX 872 ; N uni041F ; G 906
U 1056 ; WX 673 ; N uni0420 ; G 907
U 1057 ; WX 765 ; N uni0421 ; G 908
U 1058 ; WX 667 ; N uni0422 ; G 909
U 1059 ; WX 723 ; N uni0423 ; G 910
U 1060 ; WX 830 ; N uni0424 ; G 911
U 1061 ; WX 712 ; N uni0425 ; G 912
U 1062 ; WX 872 ; N uni0426 ; G 913
U 1063 ; WX 773 ; N uni0427 ; G 914
U 1064 ; WX 1141 ; N uni0428 ; G 915
U 1065 ; WX 1141 ; N uni0429 ; G 916
U 1066 ; WX 794 ; N uni042A ; G 917
U 1067 ; WX 984 ; N uni042B ; G 918
U 1068 ; WX 674 ; N uni042C ; G 919
U 1069 ; WX 765 ; N uni042D ; G 920
U 1070 ; WX 1193 ; N uni042E ; G 921
U 1071 ; WX 808 ; N uni042F ; G 922
U 1072 ; WX 596 ; N uni0430 ; G 923
U 1073 ; WX 602 ; N uni0431 ; G 924
U 1074 ; WX 563 ; N uni0432 ; G 925
U 1075 ; WX 524 ; N uni0433 ; G 926
U 1076 ; WX 616 ; N uni0434 ; G 927
U 1077 ; WX 592 ; N uni0435 ; G 928
U 1078 ; WX 920 ; N uni0436 ; G 929
U 1079 ; WX 545 ; N uni0437 ; G 930
U 1080 ; WX 667 ; N uni0438 ; G 931
U 1081 ; WX 667 ; N uni0439 ; G 932
U 1082 ; WX 625 ; N uni043A ; G 933
U 1083 ; WX 635 ; N uni043B ; G 934
U 1084 ; WX 778 ; N uni043C ; G 935
U 1085 ; WX 667 ; N uni043D ; G 936
U 1086 ; WX 602 ; N uni043E ; G 937
U 1087 ; WX 667 ; N uni043F ; G 938
U 1088 ; WX 640 ; N uni0440 ; G 939
U 1089 ; WX 560 ; N uni0441 ; G 940
U 1090 ; WX 553 ; N uni0442 ; G 941
U 1091 ; WX 588 ; N uni0443 ; G 942
U 1092 ; WX 783 ; N uni0444 ; G 943
U 1093 ; WX 564 ; N uni0445 ; G 944
U 1094 ; WX 643 ; N uni0446 ; G 945
U 1095 ; WX 661 ; N uni0447 ; G 946
U 1096 ; WX 930 ; N uni0448 ; G 947
U 1097 ; WX 930 ; N uni0449 ; G 948
U 1098 ; WX 636 ; N uni044A ; G 949
U 1099 ; WX 796 ; N uni044B ; G 950
U 1100 ; WX 544 ; N uni044C ; G 951
U 1101 ; WX 560 ; N uni044D ; G 952
U 1102 ; WX 871 ; N uni044E ; G 953
U 1103 ; WX 631 ; N uni044F ; G 954
U 1104 ; WX 592 ; N uni0450 ; G 955
U 1105 ; WX 592 ; N uni0451 ; G 956
U 1106 ; WX 624 ; N uni0452 ; G 957
U 1107 ; WX 524 ; N uni0453 ; G 958
U 1108 ; WX 560 ; N uni0454 ; G 959
U 1109 ; WX 513 ; N uni0455 ; G 960
U 1110 ; WX 320 ; N uni0456 ; G 961
U 1111 ; WX 320 ; N uni0457 ; G 962
U 1112 ; WX 310 ; N uni0458 ; G 963
U 1113 ; WX 843 ; N uni0459 ; G 964
U 1114 ; WX 860 ; N uni045A ; G 965
U 1115 ; WX 644 ; N uni045B ; G 966
U 1116 ; WX 625 ; N uni045C ; G 967
U 1117 ; WX 667 ; N uni045D ; G 968
U 1118 ; WX 588 ; N uni045E ; G 969
U 1119 ; WX 656 ; N uni045F ; G 970
U 1122 ; WX 762 ; N uni0462 ; G 971
U 1123 ; WX 603 ; N uni0463 ; G 972
U 1124 ; WX 1129 ; N uni0464 ; G 973
U 1125 ; WX 834 ; N uni0465 ; G 974
U 1130 ; WX 1124 ; N uni046A ; G 975
U 1131 ; WX 920 ; N uni046B ; G 976
U 1132 ; WX 1359 ; N uni046C ; G 977
U 1133 ; WX 1113 ; N uni046D ; G 978
U 1136 ; WX 944 ; N uni0470 ; G 979
U 1137 ; WX 902 ; N uni0471 ; G 980
U 1138 ; WX 820 ; N uni0472 ; G 981
U 1139 ; WX 552 ; N uni0473 ; G 982
U 1140 ; WX 859 ; N uni0474 ; G 983
U 1141 ; WX 678 ; N uni0475 ; G 984
U 1142 ; WX 859 ; N uni0476 ; G 985
U 1143 ; WX 678 ; N uni0477 ; G 986
U 1164 ; WX 707 ; N uni048C ; G 987
U 1165 ; WX 544 ; N uni048D ; G 988
U 1168 ; WX 672 ; N uni0490 ; G 989
U 1169 ; WX 529 ; N uni0491 ; G 990
U 1170 ; WX 662 ; N uni0492 ; G 991
U 1171 ; WX 523 ; N uni0493 ; G 992
U 1172 ; WX 728 ; N uni0494 ; G 993
U 1173 ; WX 614 ; N uni0495 ; G 994
U 1174 ; WX 1124 ; N uni0496 ; G 995
U 1175 ; WX 920 ; N uni0497 ; G 996
U 1176 ; WX 636 ; N uni0498 ; G 997
U 1177 ; WX 537 ; N uni0499 ; G 998
U 1178 ; WX 774 ; N uni049A ; G 999
U 1179 ; WX 606 ; N uni049B ; G 1000
U 1182 ; WX 774 ; N uni049E ; G 1001
U 1183 ; WX 625 ; N uni049F ; G 1002
U 1184 ; WX 891 ; N uni04A0 ; G 1003
U 1185 ; WX 717 ; N uni04A1 ; G 1004
U 1186 ; WX 872 ; N uni04A2 ; G 1005
U 1187 ; WX 641 ; N uni04A3 ; G 1006
U 1188 ; WX 1139 ; N uni04A4 ; G 1007
U 1189 ; WX 852 ; N uni04A5 ; G 1008
U 1190 ; WX 1205 ; N uni04A6 ; G 1009
U 1191 ; WX 941 ; N uni04A7 ; G 1010
U 1194 ; WX 765 ; N uni04AA ; G 1011
U 1195 ; WX 560 ; N uni04AB ; G 1012
U 1196 ; WX 667 ; N uni04AC ; G 1013
U 1197 ; WX 553 ; N uni04AD ; G 1014
U 1198 ; WX 660 ; N uni04AE ; G 1015
U 1199 ; WX 565 ; N uni04AF ; G 1016
U 1200 ; WX 660 ; N uni04B0 ; G 1017
U 1201 ; WX 565 ; N uni04B1 ; G 1018
U 1202 ; WX 712 ; N uni04B2 ; G 1019
U 1203 ; WX 564 ; N uni04B3 ; G 1020
U 1204 ; WX 952 ; N uni04B4 ; G 1021
U 1205 ; WX 732 ; N uni04B5 ; G 1022
U 1206 ; WX 749 ; N uni04B6 ; G 1023
U 1207 ; WX 690 ; N uni04B7 ; G 1024
U 1210 ; WX 749 ; N uni04BA ; G 1025
U 1211 ; WX 644 ; N uni04BB ; G 1026
U 1216 ; WX 395 ; N uni04C0 ; G 1027
U 1217 ; WX 1124 ; N uni04C1 ; G 1028
U 1218 ; WX 920 ; N uni04C2 ; G 1029
U 1219 ; WX 747 ; N uni04C3 ; G 1030
U 1220 ; WX 606 ; N uni04C4 ; G 1031
U 1223 ; WX 872 ; N uni04C7 ; G 1032
U 1224 ; WX 667 ; N uni04C8 ; G 1033
U 1227 ; WX 749 ; N uni04CB ; G 1034
U 1228 ; WX 667 ; N uni04CC ; G 1035
U 1231 ; WX 320 ; N uni04CF ; G 1036
U 1232 ; WX 757 ; N uni04D0 ; G 1037
U 1233 ; WX 596 ; N uni04D1 ; G 1038
U 1234 ; WX 757 ; N uni04D2 ; G 1039
U 1235 ; WX 596 ; N uni04D3 ; G 1040
U 1236 ; WX 1001 ; N uni04D4 ; G 1041
U 1237 ; WX 940 ; N uni04D5 ; G 1042
U 1238 ; WX 730 ; N uni04D6 ; G 1043
U 1239 ; WX 592 ; N uni04D7 ; G 1044
U 1240 ; WX 820 ; N uni04D8 ; G 1045
U 1241 ; WX 592 ; N uni04D9 ; G 1046
U 1242 ; WX 820 ; N uni04DA ; G 1047
U 1243 ; WX 592 ; N uni04DB ; G 1048
U 1244 ; WX 1124 ; N uni04DC ; G 1049
U 1245 ; WX 920 ; N uni04DD ; G 1050
U 1246 ; WX 623 ; N uni04DE ; G 1051
U 1247 ; WX 545 ; N uni04DF ; G 1052
U 1248 ; WX 564 ; N uni04E0 ; G 1053
U 1249 ; WX 564 ; N uni04E1 ; G 1054
U 1250 ; WX 872 ; N uni04E2 ; G 1055
U 1251 ; WX 667 ; N uni04E3 ; G 1056
U 1252 ; WX 872 ; N uni04E4 ; G 1057
U 1253 ; WX 667 ; N uni04E5 ; G 1058
U 1254 ; WX 820 ; N uni04E6 ; G 1059
U 1255 ; WX 602 ; N uni04E7 ; G 1060
U 1256 ; WX 820 ; N uni04E8 ; G 1061
U 1257 ; WX 602 ; N uni04E9 ; G 1062
U 1258 ; WX 820 ; N uni04EA ; G 1063
U 1259 ; WX 602 ; N uni04EB ; G 1064
U 1260 ; WX 765 ; N uni04EC ; G 1065
U 1261 ; WX 560 ; N uni04ED ; G 1066
U 1262 ; WX 723 ; N uni04EE ; G 1067
U 1263 ; WX 588 ; N uni04EF ; G 1068
U 1264 ; WX 723 ; N uni04F0 ; G 1069
U 1265 ; WX 588 ; N uni04F1 ; G 1070
U 1266 ; WX 723 ; N uni04F2 ; G 1071
U 1267 ; WX 588 ; N uni04F3 ; G 1072
U 1268 ; WX 773 ; N uni04F4 ; G 1073
U 1269 ; WX 661 ; N uni04F5 ; G 1074
U 1270 ; WX 662 ; N uni04F6 ; G 1075
U 1271 ; WX 524 ; N uni04F7 ; G 1076
U 1272 ; WX 984 ; N uni04F8 ; G 1077
U 1273 ; WX 796 ; N uni04F9 ; G 1078
U 1296 ; WX 623 ; N uni0510 ; G 1079
U 1297 ; WX 545 ; N uni0511 ; G 1080
U 1298 ; WX 834 ; N uni0512 ; G 1081
U 1299 ; WX 635 ; N uni0513 ; G 1082
U 1300 ; WX 1198 ; N uni0514 ; G 1083
U 1301 ; WX 919 ; N uni0515 ; G 1084
U 1306 ; WX 820 ; N uni051A ; G 1085
U 1307 ; WX 640 ; N uni051B ; G 1086
U 1308 ; WX 1028 ; N uni051C ; G 1087
U 1309 ; WX 856 ; N uni051D ; G 1088
U 1329 ; WX 810 ; N uni0531 ; G 1089
U 1330 ; WX 811 ; N uni0532 ; G 1090
U 1331 ; WX 826 ; N uni0533 ; G 1091
U 1332 ; WX 847 ; N uni0534 ; G 1092
U 1333 ; WX 806 ; N uni0535 ; G 1093
U 1334 ; WX 826 ; N uni0536 ; G 1094
U 1335 ; WX 761 ; N uni0537 ; G 1095
U 1336 ; WX 811 ; N uni0538 ; G 1096
U 1337 ; WX 968 ; N uni0539 ; G 1097
U 1338 ; WX 816 ; N uni053A ; G 1098
U 1339 ; WX 772 ; N uni053B ; G 1099
U 1340 ; WX 682 ; N uni053C ; G 1100
U 1341 ; WX 1097 ; N uni053D ; G 1101
U 1342 ; WX 845 ; N uni053E ; G 1102
U 1343 ; WX 804 ; N uni053F ; G 1103
U 1344 ; WX 719 ; N uni0540 ; G 1104
U 1345 ; WX 810 ; N uni0541 ; G 1105
U 1346 ; WX 833 ; N uni0542 ; G 1106
U 1347 ; WX 843 ; N uni0543 ; G 1107
U 1348 ; WX 897 ; N uni0544 ; G 1108
U 1349 ; WX 763 ; N uni0545 ; G 1109
U 1350 ; WX 794 ; N uni0546 ; G 1110
U 1351 ; WX 754 ; N uni0547 ; G 1111
U 1352 ; WX 799 ; N uni0548 ; G 1112
U 1353 ; WX 797 ; N uni0549 ; G 1113
U 1354 ; WX 875 ; N uni054A ; G 1114
U 1355 ; WX 830 ; N uni054B ; G 1115
U 1356 ; WX 884 ; N uni054C ; G 1116
U 1357 ; WX 799 ; N uni054D ; G 1117
U 1358 ; WX 802 ; N uni054E ; G 1118
U 1359 ; WX 731 ; N uni054F ; G 1119
U 1360 ; WX 774 ; N uni0550 ; G 1120
U 1361 ; WX 749 ; N uni0551 ; G 1121
U 1362 ; WX 633 ; N uni0552 ; G 1122
U 1363 ; WX 845 ; N uni0553 ; G 1123
U 1364 ; WX 843 ; N uni0554 ; G 1124
U 1365 ; WX 835 ; N uni0555 ; G 1125
U 1366 ; WX 821 ; N uni0556 ; G 1126
U 1369 ; WX 307 ; N uni0559 ; G 1127
U 1370 ; WX 264 ; N uni055A ; G 1128
U 1371 ; WX 229 ; N uni055B ; G 1129
U 1372 ; WX 391 ; N uni055C ; G 1130
U 1373 ; WX 364 ; N uni055D ; G 1131
U 1374 ; WX 386 ; N uni055E ; G 1132
U 1375 ; WX 500 ; N uni055F ; G 1133
U 1377 ; WX 949 ; N uni0561 ; G 1134
U 1378 ; WX 618 ; N uni0562 ; G 1135
U 1379 ; WX 695 ; N uni0563 ; G 1136
U 1380 ; WX 695 ; N uni0564 ; G 1137
U 1381 ; WX 628 ; N uni0565 ; G 1138
U 1382 ; WX 688 ; N uni0566 ; G 1139
U 1383 ; WX 510 ; N uni0567 ; G 1140
U 1384 ; WX 636 ; N uni0568 ; G 1141
U 1385 ; WX 791 ; N uni0569 ; G 1142
U 1386 ; WX 671 ; N uni056A ; G 1143
U 1387 ; WX 635 ; N uni056B ; G 1144
U 1388 ; WX 305 ; N uni056C ; G 1145
U 1389 ; WX 973 ; N uni056D ; G 1146
U 1390 ; WX 614 ; N uni056E ; G 1147
U 1391 ; WX 628 ; N uni056F ; G 1148
U 1392 ; WX 636 ; N uni0570 ; G 1149
U 1393 ; WX 630 ; N uni0571 ; G 1150
U 1394 ; WX 636 ; N uni0572 ; G 1151
U 1395 ; WX 654 ; N uni0573 ; G 1152
U 1396 ; WX 644 ; N uni0574 ; G 1153
U 1397 ; WX 309 ; N uni0575 ; G 1154
U 1398 ; WX 636 ; N uni0576 ; G 1155
U 1399 ; WX 461 ; N uni0577 ; G 1156
U 1400 ; WX 649 ; N uni0578 ; G 1157
U 1401 ; WX 365 ; N uni0579 ; G 1158
U 1402 ; WX 940 ; N uni057A ; G 1159
U 1403 ; WX 562 ; N uni057B ; G 1160
U 1404 ; WX 657 ; N uni057C ; G 1161
U 1405 ; WX 644 ; N uni057D ; G 1162
U 1406 ; WX 630 ; N uni057E ; G 1163
U 1407 ; WX 930 ; N uni057F ; G 1164
U 1408 ; WX 644 ; N uni0580 ; G 1165
U 1409 ; WX 643 ; N uni0581 ; G 1166
U 1410 ; WX 483 ; N uni0582 ; G 1167
U 1411 ; WX 930 ; N uni0583 ; G 1168
U 1412 ; WX 636 ; N uni0584 ; G 1169
U 1413 ; WX 609 ; N uni0585 ; G 1170
U 1414 ; WX 809 ; N uni0586 ; G 1171
U 1415 ; WX 789 ; N uni0587 ; G 1172
U 1417 ; WX 340 ; N uni0589 ; G 1173
U 1418 ; WX 334 ; N uni058A ; G 1174
U 3647 ; WX 636 ; N uni0E3F ; G 1175
U 4256 ; WX 723 ; N uni10A0 ; G 1176
U 4257 ; WX 850 ; N uni10A1 ; G 1177
U 4258 ; WX 828 ; N uni10A2 ; G 1178
U 4259 ; WX 859 ; N uni10A3 ; G 1179
U 4260 ; WX 733 ; N uni10A4 ; G 1180
U 4261 ; WX 981 ; N uni10A5 ; G 1181
U 4262 ; WX 916 ; N uni10A6 ; G 1182
U 4263 ; WX 1101 ; N uni10A7 ; G 1183
U 4264 ; WX 566 ; N uni10A8 ; G 1184
U 4265 ; WX 750 ; N uni10A9 ; G 1185
U 4266 ; WX 962 ; N uni10AA ; G 1186
U 4267 ; WX 941 ; N uni10AB ; G 1187
U 4268 ; WX 743 ; N uni10AC ; G 1188
U 4269 ; WX 1075 ; N uni10AD ; G 1189
U 4270 ; WX 896 ; N uni10AE ; G 1190
U 4271 ; WX 829 ; N uni10AF ; G 1191
U 4272 ; WX 1040 ; N uni10B0 ; G 1192
U 4273 ; WX 733 ; N uni10B1 ; G 1193
U 4274 ; WX 669 ; N uni10B2 ; G 1194
U 4275 ; WX 1015 ; N uni10B3 ; G 1195
U 4276 ; WX 937 ; N uni10B4 ; G 1196
U 4277 ; WX 1020 ; N uni10B5 ; G 1197
U 4278 ; WX 731 ; N uni10B6 ; G 1198
U 4279 ; WX 733 ; N uni10B7 ; G 1199
U 4280 ; WX 732 ; N uni10B8 ; G 1200
U 4281 ; WX 733 ; N uni10B9 ; G 1201
U 4282 ; WX 879 ; N uni10BA ; G 1202
U 4283 ; WX 937 ; N uni10BB ; G 1203
U 4284 ; WX 714 ; N uni10BC ; G 1204
U 4285 ; WX 755 ; N uni10BD ; G 1205
U 4286 ; WX 733 ; N uni10BE ; G 1206
U 4287 ; WX 958 ; N uni10BF ; G 1207
U 4288 ; WX 1000 ; N uni10C0 ; G 1208
U 4289 ; WX 702 ; N uni10C1 ; G 1209
U 4290 ; WX 864 ; N uni10C2 ; G 1210
U 4291 ; WX 734 ; N uni10C3 ; G 1211
U 4292 ; WX 837 ; N uni10C4 ; G 1212
U 4293 ; WX 951 ; N uni10C5 ; G 1213
U 4304 ; WX 541 ; N uni10D0 ; G 1214
U 4305 ; WX 571 ; N uni10D1 ; G 1215
U 4306 ; WX 589 ; N uni10D2 ; G 1216
U 4307 ; WX 833 ; N uni10D3 ; G 1217
U 4308 ; WX 561 ; N uni10D4 ; G 1218
U 4309 ; WX 557 ; N uni10D5 ; G 1219
U 4310 ; WX 618 ; N uni10D6 ; G 1220
U 4311 ; WX 861 ; N uni10D7 ; G 1221
U 4312 ; WX 560 ; N uni10D8 ; G 1222
U 4313 ; WX 546 ; N uni10D9 ; G 1223
U 4314 ; WX 1066 ; N uni10DA ; G 1224
U 4315 ; WX 586 ; N uni10DB ; G 1225
U 4316 ; WX 586 ; N uni10DC ; G 1226
U 4317 ; WX 825 ; N uni10DD ; G 1227
U 4318 ; WX 570 ; N uni10DE ; G 1228
U 4319 ; WX 581 ; N uni10DF ; G 1229
U 4320 ; WX 824 ; N uni10E0 ; G 1230
U 4321 ; WX 607 ; N uni10E1 ; G 1231
U 4322 ; WX 748 ; N uni10E2 ; G 1232
U 4323 ; WX 698 ; N uni10E3 ; G 1233
U 4324 ; WX 815 ; N uni10E4 ; G 1234
U 4325 ; WX 585 ; N uni10E5 ; G 1235
U 4326 ; WX 858 ; N uni10E6 ; G 1236
U 4327 ; WX 568 ; N uni10E7 ; G 1237
U 4328 ; WX 594 ; N uni10E8 ; G 1238
U 4329 ; WX 586 ; N uni10E9 ; G 1239
U 4330 ; WX 675 ; N uni10EA ; G 1240
U 4331 ; WX 587 ; N uni10EB ; G 1241
U 4332 ; WX 582 ; N uni10EC ; G 1242
U 4333 ; WX 576 ; N uni10ED ; G 1243
U 4334 ; WX 612 ; N uni10EE ; G 1244
U 4335 ; WX 683 ; N uni10EF ; G 1245
U 4336 ; WX 572 ; N uni10F0 ; G 1246
U 4337 ; WX 603 ; N uni10F1 ; G 1247
U 4338 ; WX 571 ; N uni10F2 ; G 1248
U 4339 ; WX 572 ; N uni10F3 ; G 1249
U 4340 ; WX 570 ; N uni10F4 ; G 1250
U 4341 ; WX 649 ; N uni10F5 ; G 1251
U 4342 ; WX 886 ; N uni10F6 ; G 1252
U 4343 ; WX 626 ; N uni10F7 ; G 1253
U 4344 ; WX 582 ; N uni10F8 ; G 1254
U 4345 ; WX 619 ; N uni10F9 ; G 1255
U 4346 ; WX 571 ; N uni10FA ; G 1256
U 4347 ; WX 437 ; N uni10FB ; G 1257
U 4348 ; WX 354 ; N uni10FC ; G 1258
U 7424 ; WX 565 ; N uni1D00 ; G 1259
U 7425 ; WX 774 ; N uni1D01 ; G 1260
U 7426 ; WX 940 ; N uni1D02 ; G 1261
U 7427 ; WX 563 ; N uni1D03 ; G 1262
U 7428 ; WX 560 ; N uni1D04 ; G 1263
U 7429 ; WX 585 ; N uni1D05 ; G 1264
U 7430 ; WX 585 ; N uni1D06 ; G 1265
U 7431 ; WX 553 ; N uni1D07 ; G 1266
U 7432 ; WX 509 ; N uni1D08 ; G 1267
U 7433 ; WX 320 ; N uni1D09 ; G 1268
U 7434 ; WX 499 ; N uni1D0A ; G 1269
U 7435 ; WX 625 ; N uni1D0B ; G 1270
U 7436 ; WX 543 ; N uni1D0C ; G 1271
U 7437 ; WX 778 ; N uni1D0D ; G 1272
U 7438 ; WX 667 ; N uni1D0E ; G 1273
U 7439 ; WX 602 ; N uni1D0F ; G 1274
U 7440 ; WX 560 ; N uni1D10 ; G 1275
U 7441 ; WX 647 ; N uni1D11 ; G 1276
U 7442 ; WX 647 ; N uni1D12 ; G 1277
U 7443 ; WX 647 ; N uni1D13 ; G 1278
U 7444 ; WX 989 ; N uni1D14 ; G 1279
U 7445 ; WX 512 ; N uni1D15 ; G 1280
U 7446 ; WX 602 ; N uni1D16 ; G 1281
U 7447 ; WX 602 ; N uni1D17 ; G 1282
U 7448 ; WX 553 ; N uni1D18 ; G 1283
U 7449 ; WX 594 ; N uni1D19 ; G 1284
U 7450 ; WX 594 ; N uni1D1A ; G 1285
U 7451 ; WX 553 ; N uni1D1B ; G 1286
U 7452 ; WX 585 ; N uni1D1C ; G 1287
U 7453 ; WX 664 ; N uni1D1D ; G 1288
U 7454 ; WX 923 ; N uni1D1E ; G 1289
U 7455 ; WX 655 ; N uni1D1F ; G 1290
U 7456 ; WX 565 ; N uni1D20 ; G 1291
U 7457 ; WX 856 ; N uni1D21 ; G 1292
U 7458 ; WX 527 ; N uni1D22 ; G 1293
U 7459 ; WX 527 ; N uni1D23 ; G 1294
U 7460 ; WX 531 ; N uni1D24 ; G 1295
U 7461 ; WX 743 ; N uni1D25 ; G 1296
U 7462 ; WX 524 ; N uni1D26 ; G 1297
U 7463 ; WX 565 ; N uni1D27 ; G 1298
U 7464 ; WX 657 ; N uni1D28 ; G 1299
U 7465 ; WX 553 ; N uni1D29 ; G 1300
U 7466 ; WX 703 ; N uni1D2A ; G 1301
U 7467 ; WX 635 ; N uni1D2B ; G 1302
U 7468 ; WX 455 ; N uni1D2C ; G 1303
U 7469 ; WX 630 ; N uni1D2D ; G 1304
U 7470 ; WX 463 ; N uni1D2E ; G 1305
U 7471 ; WX 463 ; N uni1D2F ; G 1306
U 7472 ; WX 505 ; N uni1D30 ; G 1307
U 7473 ; WX 459 ; N uni1D31 ; G 1308
U 7474 ; WX 459 ; N uni1D32 ; G 1309
U 7475 ; WX 503 ; N uni1D33 ; G 1310
U 7476 ; WX 549 ; N uni1D34 ; G 1311
U 7477 ; WX 249 ; N uni1D35 ; G 1312
U 7478 ; WX 252 ; N uni1D36 ; G 1313
U 7479 ; WX 470 ; N uni1D37 ; G 1314
U 7480 ; WX 418 ; N uni1D38 ; G 1315
U 7481 ; WX 645 ; N uni1D39 ; G 1316
U 7482 ; WX 551 ; N uni1D3A ; G 1317
U 7483 ; WX 551 ; N uni1D3B ; G 1318
U 7484 ; WX 516 ; N uni1D3C ; G 1319
U 7485 ; WX 369 ; N uni1D3D ; G 1320
U 7486 ; WX 424 ; N uni1D3E ; G 1321
U 7487 ; WX 474 ; N uni1D3F ; G 1322
U 7488 ; WX 420 ; N uni1D40 ; G 1323
U 7489 ; WX 531 ; N uni1D41 ; G 1324
U 7490 ; WX 647 ; N uni1D42 ; G 1325
U 7491 ; WX 386 ; N uni1D43 ; G 1326
U 7492 ; WX 386 ; N uni1D44 ; G 1327
U 7493 ; WX 400 ; N uni1D45 ; G 1328
U 7494 ; WX 618 ; N uni1D46 ; G 1329
U 7495 ; WX 400 ; N uni1D47 ; G 1330
U 7496 ; WX 400 ; N uni1D48 ; G 1331
U 7497 ; WX 387 ; N uni1D49 ; G 1332
U 7498 ; WX 387 ; N uni1D4A ; G 1333
U 7499 ; WX 340 ; N uni1D4B ; G 1334
U 7500 ; WX 340 ; N uni1D4C ; G 1335
U 7501 ; WX 400 ; N uni1D4D ; G 1336
U 7502 ; WX 175 ; N uni1D4E ; G 1337
U 7503 ; WX 365 ; N uni1D4F ; G 1338
U 7504 ; WX 613 ; N uni1D50 ; G 1339
U 7505 ; WX 399 ; N uni1D51 ; G 1340
U 7506 ; WX 385 ; N uni1D52 ; G 1341
U 7507 ; WX 346 ; N uni1D53 ; G 1342
U 7508 ; WX 385 ; N uni1D54 ; G 1343
U 7509 ; WX 385 ; N uni1D55 ; G 1344
U 7510 ; WX 400 ; N uni1D56 ; G 1345
U 7511 ; WX 247 ; N uni1D57 ; G 1346
U 7512 ; WX 399 ; N uni1D58 ; G 1347
U 7513 ; WX 418 ; N uni1D59 ; G 1348
U 7514 ; WX 613 ; N uni1D5A ; G 1349
U 7515 ; WX 373 ; N uni1D5B ; G 1350
U 7516 ; WX 468 ; N uni1D5C ; G 1351
U 7517 ; WX 364 ; N uni1D5D ; G 1352
U 7518 ; WX 376 ; N uni1D5E ; G 1353
U 7519 ; WX 379 ; N uni1D5F ; G 1354
U 7520 ; WX 441 ; N uni1D60 ; G 1355
U 7521 ; WX 381 ; N uni1D61 ; G 1356
U 7522 ; WX 201 ; N uni1D62 ; G 1357
U 7523 ; WX 347 ; N uni1D63 ; G 1358
U 7524 ; WX 399 ; N uni1D64 ; G 1359
U 7525 ; WX 373 ; N uni1D65 ; G 1360
U 7526 ; WX 364 ; N uni1D66 ; G 1361
U 7527 ; WX 376 ; N uni1D67 ; G 1362
U 7528 ; WX 370 ; N uni1D68 ; G 1363
U 7529 ; WX 441 ; N uni1D69 ; G 1364
U 7530 ; WX 381 ; N uni1D6A ; G 1365
U 7531 ; WX 974 ; N uni1D6B ; G 1366
U 7543 ; WX 640 ; N uni1D77 ; G 1367
U 7544 ; WX 549 ; N uni1D78 ; G 1368
U 7547 ; WX 320 ; N uni1D7B ; G 1369
U 7548 ; WX 392 ; N uni1D7C ; G 1370
U 7549 ; WX 640 ; N uni1D7D ; G 1371
U 7550 ; WX 585 ; N uni1D7E ; G 1372
U 7551 ; WX 620 ; N uni1D7F ; G 1373
U 7557 ; WX 320 ; N uni1D85 ; G 1374
U 7579 ; WX 400 ; N uni1D9B ; G 1375
U 7580 ; WX 346 ; N uni1D9C ; G 1376
U 7581 ; WX 346 ; N uni1D9D ; G 1377
U 7582 ; WX 385 ; N uni1D9E ; G 1378
U 7583 ; WX 340 ; N uni1D9F ; G 1379
U 7584 ; WX 222 ; N uni1DA0 ; G 1380
U 7585 ; WX 229 ; N uni1DA1 ; G 1381
U 7586 ; WX 400 ; N uni1DA2 ; G 1382
U 7587 ; WX 399 ; N uni1DA3 ; G 1383
U 7588 ; WX 234 ; N uni1DA4 ; G 1384
U 7589 ; WX 244 ; N uni1DA5 ; G 1385
U 7590 ; WX 234 ; N uni1DA6 ; G 1386
U 7591 ; WX 234 ; N uni1DA7 ; G 1387
U 7592 ; WX 230 ; N uni1DA8 ; G 1388
U 7593 ; WX 175 ; N uni1DA9 ; G 1389
U 7594 ; WX 175 ; N uni1DAA ; G 1390
U 7595 ; WX 367 ; N uni1DAB ; G 1391
U 7596 ; WX 613 ; N uni1DAC ; G 1392
U 7597 ; WX 613 ; N uni1DAD ; G 1393
U 7598 ; WX 407 ; N uni1DAE ; G 1394
U 7599 ; WX 404 ; N uni1DAF ; G 1395
U 7600 ; WX 399 ; N uni1DB0 ; G 1396
U 7601 ; WX 385 ; N uni1DB1 ; G 1397
U 7602 ; WX 385 ; N uni1DB2 ; G 1398
U 7603 ; WX 328 ; N uni1DB3 ; G 1399
U 7604 ; WX 211 ; N uni1DB4 ; G 1400
U 7605 ; WX 247 ; N uni1DB5 ; G 1401
U 7606 ; WX 399 ; N uni1DB6 ; G 1402
U 7607 ; WX 389 ; N uni1DB7 ; G 1403
U 7608 ; WX 368 ; N uni1DB8 ; G 1404
U 7609 ; WX 376 ; N uni1DB9 ; G 1405
U 7610 ; WX 373 ; N uni1DBA ; G 1406
U 7611 ; WX 331 ; N uni1DBB ; G 1407
U 7612 ; WX 331 ; N uni1DBC ; G 1408
U 7613 ; WX 331 ; N uni1DBD ; G 1409
U 7614 ; WX 364 ; N uni1DBE ; G 1410
U 7615 ; WX 385 ; N uni1DBF ; G 1411
U 7620 ; WX 0 ; N uni1DC4 ; G 1412
U 7621 ; WX 0 ; N uni1DC5 ; G 1413
U 7622 ; WX 0 ; N uni1DC6 ; G 1414
U 7623 ; WX 0 ; N uni1DC7 ; G 1415
U 7624 ; WX 0 ; N uni1DC8 ; G 1416
U 7625 ; WX 0 ; N uni1DC9 ; G 1417
U 7680 ; WX 722 ; N uni1E00 ; G 1418
U 7681 ; WX 596 ; N uni1E01 ; G 1419
U 7682 ; WX 735 ; N uni1E02 ; G 1420
U 7683 ; WX 640 ; N uni1E03 ; G 1421
U 7684 ; WX 735 ; N uni1E04 ; G 1422
U 7685 ; WX 640 ; N uni1E05 ; G 1423
U 7686 ; WX 735 ; N uni1E06 ; G 1424
U 7687 ; WX 640 ; N uni1E07 ; G 1425
U 7688 ; WX 765 ; N uni1E08 ; G 1426
U 7689 ; WX 560 ; N uni1E09 ; G 1427
U 7690 ; WX 802 ; N uni1E0A ; G 1428
U 7691 ; WX 640 ; N uni1E0B ; G 1429
U 7692 ; WX 802 ; N uni1E0C ; G 1430
U 7693 ; WX 640 ; N uni1E0D ; G 1431
U 7694 ; WX 802 ; N uni1E0E ; G 1432
U 7695 ; WX 640 ; N uni1E0F ; G 1433
U 7696 ; WX 802 ; N uni1E10 ; G 1434
U 7697 ; WX 640 ; N uni1E11 ; G 1435
U 7698 ; WX 802 ; N uni1E12 ; G 1436
U 7699 ; WX 640 ; N uni1E13 ; G 1437
U 7700 ; WX 730 ; N uni1E14 ; G 1438
U 7701 ; WX 592 ; N uni1E15 ; G 1439
U 7702 ; WX 730 ; N uni1E16 ; G 1440
U 7703 ; WX 592 ; N uni1E17 ; G 1441
U 7704 ; WX 730 ; N uni1E18 ; G 1442
U 7705 ; WX 592 ; N uni1E19 ; G 1443
U 7706 ; WX 730 ; N uni1E1A ; G 1444
U 7707 ; WX 592 ; N uni1E1B ; G 1445
U 7708 ; WX 730 ; N uni1E1C ; G 1446
U 7709 ; WX 592 ; N uni1E1D ; G 1447
U 7710 ; WX 694 ; N uni1E1E ; G 1448
U 7711 ; WX 370 ; N uni1E1F ; G 1449
U 7712 ; WX 799 ; N uni1E20 ; G 1450
U 7713 ; WX 640 ; N uni1E21 ; G 1451
U 7714 ; WX 872 ; N uni1E22 ; G 1452
U 7715 ; WX 644 ; N uni1E23 ; G 1453
U 7716 ; WX 872 ; N uni1E24 ; G 1454
U 7717 ; WX 644 ; N uni1E25 ; G 1455
U 7718 ; WX 872 ; N uni1E26 ; G 1456
U 7719 ; WX 644 ; N uni1E27 ; G 1457
U 7720 ; WX 872 ; N uni1E28 ; G 1458
U 7721 ; WX 644 ; N uni1E29 ; G 1459
U 7722 ; WX 872 ; N uni1E2A ; G 1460
U 7723 ; WX 644 ; N uni1E2B ; G 1461
U 7724 ; WX 395 ; N uni1E2C ; G 1462
U 7725 ; WX 320 ; N uni1E2D ; G 1463
U 7726 ; WX 395 ; N uni1E2E ; G 1464
U 7727 ; WX 320 ; N uni1E2F ; G 1465
U 7728 ; WX 747 ; N uni1E30 ; G 1466
U 7729 ; WX 606 ; N uni1E31 ; G 1467
U 7730 ; WX 747 ; N uni1E32 ; G 1468
U 7731 ; WX 606 ; N uni1E33 ; G 1469
U 7732 ; WX 747 ; N uni1E34 ; G 1470
U 7733 ; WX 606 ; N uni1E35 ; G 1471
U 7734 ; WX 664 ; N uni1E36 ; G 1472
U 7735 ; WX 320 ; N uni1E37 ; G 1473
U 7736 ; WX 664 ; N uni1E38 ; G 1474
U 7737 ; WX 320 ; N uni1E39 ; G 1475
U 7738 ; WX 664 ; N uni1E3A ; G 1476
U 7739 ; WX 320 ; N uni1E3B ; G 1477
U 7740 ; WX 664 ; N uni1E3C ; G 1478
U 7741 ; WX 320 ; N uni1E3D ; G 1479
U 7742 ; WX 1024 ; N uni1E3E ; G 1480
U 7743 ; WX 948 ; N uni1E3F ; G 1481
U 7744 ; WX 1024 ; N uni1E40 ; G 1482
U 7745 ; WX 948 ; N uni1E41 ; G 1483
U 7746 ; WX 1024 ; N uni1E42 ; G 1484
U 7747 ; WX 948 ; N uni1E43 ; G 1485
U 7748 ; WX 875 ; N uni1E44 ; G 1486
U 7749 ; WX 644 ; N uni1E45 ; G 1487
U 7750 ; WX 875 ; N uni1E46 ; G 1488
U 7751 ; WX 644 ; N uni1E47 ; G 1489
U 7752 ; WX 875 ; N uni1E48 ; G 1490
U 7753 ; WX 644 ; N uni1E49 ; G 1491
U 7754 ; WX 875 ; N uni1E4A ; G 1492
U 7755 ; WX 644 ; N uni1E4B ; G 1493
U 7756 ; WX 820 ; N uni1E4C ; G 1494
U 7757 ; WX 602 ; N uni1E4D ; G 1495
U 7758 ; WX 820 ; N uni1E4E ; G 1496
U 7759 ; WX 602 ; N uni1E4F ; G 1497
U 7760 ; WX 820 ; N uni1E50 ; G 1498
U 7761 ; WX 602 ; N uni1E51 ; G 1499
U 7762 ; WX 820 ; N uni1E52 ; G 1500
U 7763 ; WX 602 ; N uni1E53 ; G 1501
U 7764 ; WX 673 ; N uni1E54 ; G 1502
U 7765 ; WX 640 ; N uni1E55 ; G 1503
U 7766 ; WX 673 ; N uni1E56 ; G 1504
U 7767 ; WX 640 ; N uni1E57 ; G 1505
U 7768 ; WX 753 ; N uni1E58 ; G 1506
U 7769 ; WX 478 ; N uni1E59 ; G 1507
U 7770 ; WX 753 ; N uni1E5A ; G 1508
U 7771 ; WX 478 ; N uni1E5B ; G 1509
U 7772 ; WX 753 ; N uni1E5C ; G 1510
U 7773 ; WX 478 ; N uni1E5D ; G 1511
U 7774 ; WX 753 ; N uni1E5E ; G 1512
U 7775 ; WX 478 ; N uni1E5F ; G 1513
U 7776 ; WX 685 ; N uni1E60 ; G 1514
U 7777 ; WX 513 ; N uni1E61 ; G 1515
U 7778 ; WX 685 ; N uni1E62 ; G 1516
U 7779 ; WX 513 ; N uni1E63 ; G 1517
U 7780 ; WX 685 ; N uni1E64 ; G 1518
U 7781 ; WX 513 ; N uni1E65 ; G 1519
U 7782 ; WX 685 ; N uni1E66 ; G 1520
U 7783 ; WX 521 ; N uni1E67 ; G 1521
U 7784 ; WX 685 ; N uni1E68 ; G 1522
U 7785 ; WX 513 ; N uni1E69 ; G 1523
U 7786 ; WX 667 ; N uni1E6A ; G 1524
U 7787 ; WX 402 ; N uni1E6B ; G 1525
U 7788 ; WX 667 ; N uni1E6C ; G 1526
U 7789 ; WX 402 ; N uni1E6D ; G 1527
U 7790 ; WX 667 ; N uni1E6E ; G 1528
U 7791 ; WX 402 ; N uni1E6F ; G 1529
U 7792 ; WX 667 ; N uni1E70 ; G 1530
U 7793 ; WX 402 ; N uni1E71 ; G 1531
U 7794 ; WX 843 ; N uni1E72 ; G 1532
U 7795 ; WX 644 ; N uni1E73 ; G 1533
U 7796 ; WX 843 ; N uni1E74 ; G 1534
U 7797 ; WX 644 ; N uni1E75 ; G 1535
U 7798 ; WX 843 ; N uni1E76 ; G 1536
U 7799 ; WX 644 ; N uni1E77 ; G 1537
U 7800 ; WX 843 ; N uni1E78 ; G 1538
U 7801 ; WX 644 ; N uni1E79 ; G 1539
U 7802 ; WX 843 ; N uni1E7A ; G 1540
U 7803 ; WX 644 ; N uni1E7B ; G 1541
U 7804 ; WX 722 ; N uni1E7C ; G 1542
U 7805 ; WX 565 ; N uni1E7D ; G 1543
U 7806 ; WX 722 ; N uni1E7E ; G 1544
U 7807 ; WX 565 ; N uni1E7F ; G 1545
U 7808 ; WX 1028 ; N Wgrave ; G 1546
U 7809 ; WX 856 ; N wgrave ; G 1547
U 7810 ; WX 1028 ; N Wacute ; G 1548
U 7811 ; WX 856 ; N wacute ; G 1549
U 7812 ; WX 1028 ; N Wdieresis ; G 1550
U 7813 ; WX 856 ; N wdieresis ; G 1551
U 7814 ; WX 1028 ; N uni1E86 ; G 1552
U 7815 ; WX 856 ; N uni1E87 ; G 1553
U 7816 ; WX 1028 ; N uni1E88 ; G 1554
U 7817 ; WX 856 ; N uni1E89 ; G 1555
U 7818 ; WX 712 ; N uni1E8A ; G 1556
U 7819 ; WX 564 ; N uni1E8B ; G 1557
U 7820 ; WX 712 ; N uni1E8C ; G 1558
U 7821 ; WX 564 ; N uni1E8D ; G 1559
U 7822 ; WX 660 ; N uni1E8E ; G 1560
U 7823 ; WX 565 ; N uni1E8F ; G 1561
U 7824 ; WX 695 ; N uni1E90 ; G 1562
U 7825 ; WX 527 ; N uni1E91 ; G 1563
U 7826 ; WX 695 ; N uni1E92 ; G 1564
U 7827 ; WX 527 ; N uni1E93 ; G 1565
U 7828 ; WX 695 ; N uni1E94 ; G 1566
U 7829 ; WX 527 ; N uni1E95 ; G 1567
U 7830 ; WX 644 ; N uni1E96 ; G 1568
U 7831 ; WX 402 ; N uni1E97 ; G 1569
U 7832 ; WX 856 ; N uni1E98 ; G 1570
U 7833 ; WX 565 ; N uni1E99 ; G 1571
U 7834 ; WX 903 ; N uni1E9A ; G 1572
U 7835 ; WX 370 ; N uni1E9B ; G 1573
U 7836 ; WX 370 ; N uni1E9C ; G 1574
U 7837 ; WX 370 ; N uni1E9D ; G 1575
U 7838 ; WX 829 ; N uni1E9E ; G 1576
U 7839 ; WX 602 ; N uni1E9F ; G 1577
U 7840 ; WX 722 ; N uni1EA0 ; G 1578
U 7841 ; WX 596 ; N uni1EA1 ; G 1579
U 7842 ; WX 722 ; N uni1EA2 ; G 1580
U 7843 ; WX 596 ; N uni1EA3 ; G 1581
U 7844 ; WX 722 ; N uni1EA4 ; G 1582
U 7845 ; WX 613 ; N uni1EA5 ; G 1583
U 7846 ; WX 722 ; N uni1EA6 ; G 1584
U 7847 ; WX 613 ; N uni1EA7 ; G 1585
U 7848 ; WX 722 ; N uni1EA8 ; G 1586
U 7849 ; WX 613 ; N uni1EA9 ; G 1587
U 7850 ; WX 722 ; N uni1EAA ; G 1588
U 7851 ; WX 613 ; N uni1EAB ; G 1589
U 7852 ; WX 722 ; N uni1EAC ; G 1590
U 7853 ; WX 596 ; N uni1EAD ; G 1591
U 7854 ; WX 722 ; N uni1EAE ; G 1592
U 7855 ; WX 596 ; N uni1EAF ; G 1593
U 7856 ; WX 722 ; N uni1EB0 ; G 1594
U 7857 ; WX 596 ; N uni1EB1 ; G 1595
U 7858 ; WX 722 ; N uni1EB2 ; G 1596
U 7859 ; WX 596 ; N uni1EB3 ; G 1597
U 7860 ; WX 722 ; N uni1EB4 ; G 1598
U 7861 ; WX 596 ; N uni1EB5 ; G 1599
U 7862 ; WX 722 ; N uni1EB6 ; G 1600
U 7863 ; WX 596 ; N uni1EB7 ; G 1601
U 7864 ; WX 730 ; N uni1EB8 ; G 1602
U 7865 ; WX 592 ; N uni1EB9 ; G 1603
U 7866 ; WX 730 ; N uni1EBA ; G 1604
U 7867 ; WX 592 ; N uni1EBB ; G 1605
U 7868 ; WX 730 ; N uni1EBC ; G 1606
U 7869 ; WX 592 ; N uni1EBD ; G 1607
U 7870 ; WX 730 ; N uni1ebe ; G 1608
U 7871 ; WX 615 ; N uni1ebF ; G 1609
U 7872 ; WX 730 ; N uni1EC0 ; G 1610
U 7873 ; WX 615 ; N uni1EC1 ; G 1611
U 7874 ; WX 730 ; N uni1EC2 ; G 1612
U 7875 ; WX 615 ; N uni1EC3 ; G 1613
U 7876 ; WX 730 ; N uni1EC4 ; G 1614
U 7877 ; WX 615 ; N uni1EC5 ; G 1615
U 7878 ; WX 730 ; N uni1EC6 ; G 1616
U 7879 ; WX 592 ; N uni1EC7 ; G 1617
U 7880 ; WX 395 ; N uni1EC8 ; G 1618
U 7881 ; WX 320 ; N uni1EC9 ; G 1619
U 7882 ; WX 395 ; N uni1ECA ; G 1620
U 7883 ; WX 320 ; N uni1ECB ; G 1621
U 7884 ; WX 820 ; N uni1ECC ; G 1622
U 7885 ; WX 602 ; N uni1ECD ; G 1623
U 7886 ; WX 820 ; N uni1ECE ; G 1624
U 7887 ; WX 602 ; N uni1ECF ; G 1625
U 7888 ; WX 820 ; N uni1ED0 ; G 1626
U 7889 ; WX 612 ; N uni1ED1 ; G 1627
U 7890 ; WX 820 ; N uni1ED2 ; G 1628
U 7891 ; WX 612 ; N uni1ED3 ; G 1629
U 7892 ; WX 820 ; N uni1ED4 ; G 1630
U 7893 ; WX 612 ; N uni1ED5 ; G 1631
U 7894 ; WX 820 ; N uni1ED6 ; G 1632
U 7895 ; WX 612 ; N uni1ED7 ; G 1633
U 7896 ; WX 820 ; N uni1ED8 ; G 1634
U 7897 ; WX 602 ; N uni1ED9 ; G 1635
U 7898 ; WX 820 ; N uni1EDA ; G 1636
U 7899 ; WX 602 ; N uni1EDB ; G 1637
U 7900 ; WX 820 ; N uni1EDC ; G 1638
U 7901 ; WX 602 ; N uni1EDD ; G 1639
U 7902 ; WX 820 ; N uni1EDE ; G 1640
U 7903 ; WX 602 ; N uni1EDF ; G 1641
U 7904 ; WX 820 ; N uni1EE0 ; G 1642
U 7905 ; WX 602 ; N uni1EE1 ; G 1643
U 7906 ; WX 820 ; N uni1EE2 ; G 1644
U 7907 ; WX 602 ; N uni1EE3 ; G 1645
U 7908 ; WX 843 ; N uni1EE4 ; G 1646
U 7909 ; WX 644 ; N uni1EE5 ; G 1647
U 7910 ; WX 843 ; N uni1EE6 ; G 1648
U 7911 ; WX 644 ; N uni1EE7 ; G 1649
U 7912 ; WX 843 ; N uni1EE8 ; G 1650
U 7913 ; WX 644 ; N uni1EE9 ; G 1651
U 7914 ; WX 843 ; N uni1EEA ; G 1652
U 7915 ; WX 644 ; N uni1EEB ; G 1653
U 7916 ; WX 843 ; N uni1EEC ; G 1654
U 7917 ; WX 644 ; N uni1EED ; G 1655
U 7918 ; WX 843 ; N uni1EEE ; G 1656
U 7919 ; WX 644 ; N uni1EEF ; G 1657
U 7920 ; WX 843 ; N uni1EF0 ; G 1658
U 7921 ; WX 644 ; N uni1EF1 ; G 1659
U 7922 ; WX 660 ; N Ygrave ; G 1660
U 7923 ; WX 565 ; N ygrave ; G 1661
U 7924 ; WX 660 ; N uni1EF4 ; G 1662
U 7925 ; WX 565 ; N uni1EF5 ; G 1663
U 7926 ; WX 660 ; N uni1EF6 ; G 1664
U 7927 ; WX 565 ; N uni1EF7 ; G 1665
U 7928 ; WX 660 ; N uni1EF8 ; G 1666
U 7929 ; WX 565 ; N uni1EF9 ; G 1667
U 7930 ; WX 949 ; N uni1EFA ; G 1668
U 7931 ; WX 581 ; N uni1EFB ; G 1669
U 7936 ; WX 675 ; N uni1F00 ; G 1670
U 7937 ; WX 675 ; N uni1F01 ; G 1671
U 7938 ; WX 675 ; N uni1F02 ; G 1672
U 7939 ; WX 675 ; N uni1F03 ; G 1673
U 7940 ; WX 675 ; N uni1F04 ; G 1674
U 7941 ; WX 675 ; N uni1F05 ; G 1675
U 7942 ; WX 675 ; N uni1F06 ; G 1676
U 7943 ; WX 675 ; N uni1F07 ; G 1677
U 7944 ; WX 722 ; N uni1F08 ; G 1678
U 7945 ; WX 722 ; N uni1F09 ; G 1679
U 7946 ; WX 869 ; N uni1F0A ; G 1680
U 7947 ; WX 869 ; N uni1F0B ; G 1681
U 7948 ; WX 734 ; N uni1F0C ; G 1682
U 7949 ; WX 763 ; N uni1F0D ; G 1683
U 7950 ; WX 722 ; N uni1F0E ; G 1684
U 7951 ; WX 722 ; N uni1F0F ; G 1685
U 7952 ; WX 537 ; N uni1F10 ; G 1686
U 7953 ; WX 537 ; N uni1F11 ; G 1687
U 7954 ; WX 537 ; N uni1F12 ; G 1688
U 7955 ; WX 537 ; N uni1F13 ; G 1689
U 7956 ; WX 537 ; N uni1F14 ; G 1690
U 7957 ; WX 537 ; N uni1F15 ; G 1691
U 7960 ; WX 853 ; N uni1F18 ; G 1692
U 7961 ; WX 841 ; N uni1F19 ; G 1693
U 7962 ; WX 1067 ; N uni1F1A ; G 1694
U 7963 ; WX 1077 ; N uni1F1B ; G 1695
U 7964 ; WX 1008 ; N uni1F1C ; G 1696
U 7965 ; WX 1035 ; N uni1F1D ; G 1697
U 7968 ; WX 599 ; N uni1F20 ; G 1698
U 7969 ; WX 599 ; N uni1F21 ; G 1699
U 7970 ; WX 599 ; N uni1F22 ; G 1700
U 7971 ; WX 599 ; N uni1F23 ; G 1701
U 7972 ; WX 599 ; N uni1F24 ; G 1702
U 7973 ; WX 599 ; N uni1F25 ; G 1703
U 7974 ; WX 599 ; N uni1F26 ; G 1704
U 7975 ; WX 599 ; N uni1F27 ; G 1705
U 7976 ; WX 998 ; N uni1F28 ; G 1706
U 7977 ; WX 992 ; N uni1F29 ; G 1707
U 7978 ; WX 1212 ; N uni1F2A ; G 1708
U 7979 ; WX 1224 ; N uni1F2B ; G 1709
U 7980 ; WX 1159 ; N uni1F2C ; G 1710
U 7981 ; WX 1183 ; N uni1F2D ; G 1711
U 7982 ; WX 1098 ; N uni1F2E ; G 1712
U 7983 ; WX 1095 ; N uni1F2F ; G 1713
U 7984 ; WX 392 ; N uni1F30 ; G 1714
U 7985 ; WX 392 ; N uni1F31 ; G 1715
U 7986 ; WX 392 ; N uni1F32 ; G 1716
U 7987 ; WX 392 ; N uni1F33 ; G 1717
U 7988 ; WX 392 ; N uni1F34 ; G 1718
U 7989 ; WX 392 ; N uni1F35 ; G 1719
U 7990 ; WX 392 ; N uni1F36 ; G 1720
U 7991 ; WX 392 ; N uni1F37 ; G 1721
U 7992 ; WX 521 ; N uni1F38 ; G 1722
U 7993 ; WX 512 ; N uni1F39 ; G 1723
U 7994 ; WX 735 ; N uni1F3A ; G 1724
U 7995 ; WX 738 ; N uni1F3B ; G 1725
U 7996 ; WX 679 ; N uni1F3C ; G 1726
U 7997 ; WX 706 ; N uni1F3D ; G 1727
U 7998 ; WX 624 ; N uni1F3E ; G 1728
U 7999 ; WX 615 ; N uni1F3F ; G 1729
U 8000 ; WX 602 ; N uni1F40 ; G 1730
U 8001 ; WX 602 ; N uni1F41 ; G 1731
U 8002 ; WX 602 ; N uni1F42 ; G 1732
U 8003 ; WX 602 ; N uni1F43 ; G 1733
U 8004 ; WX 602 ; N uni1F44 ; G 1734
U 8005 ; WX 602 ; N uni1F45 ; G 1735
U 8008 ; WX 820 ; N uni1F48 ; G 1736
U 8009 ; WX 859 ; N uni1F49 ; G 1737
U 8010 ; WX 1120 ; N uni1F4A ; G 1738
U 8011 ; WX 1127 ; N uni1F4B ; G 1739
U 8012 ; WX 937 ; N uni1F4C ; G 1740
U 8013 ; WX 964 ; N uni1F4D ; G 1741
U 8016 ; WX 608 ; N uni1F50 ; G 1742
U 8017 ; WX 608 ; N uni1F51 ; G 1743
U 8018 ; WX 608 ; N uni1F52 ; G 1744
U 8019 ; WX 608 ; N uni1F53 ; G 1745
U 8020 ; WX 608 ; N uni1F54 ; G 1746
U 8021 ; WX 608 ; N uni1F55 ; G 1747
U 8022 ; WX 608 ; N uni1F56 ; G 1748
U 8023 ; WX 608 ; N uni1F57 ; G 1749
U 8025 ; WX 851 ; N uni1F59 ; G 1750
U 8027 ; WX 1079 ; N uni1F5B ; G 1751
U 8029 ; WX 1044 ; N uni1F5D ; G 1752
U 8031 ; WX 953 ; N uni1F5F ; G 1753
U 8032 ; WX 815 ; N uni1F60 ; G 1754
U 8033 ; WX 815 ; N uni1F61 ; G 1755
U 8034 ; WX 815 ; N uni1F62 ; G 1756
U 8035 ; WX 815 ; N uni1F63 ; G 1757
U 8036 ; WX 815 ; N uni1F64 ; G 1758
U 8037 ; WX 815 ; N uni1F65 ; G 1759
U 8038 ; WX 815 ; N uni1F66 ; G 1760
U 8039 ; WX 815 ; N uni1F67 ; G 1761
U 8040 ; WX 829 ; N uni1F68 ; G 1762
U 8041 ; WX 870 ; N uni1F69 ; G 1763
U 8042 ; WX 1131 ; N uni1F6A ; G 1764
U 8043 ; WX 1137 ; N uni1F6B ; G 1765
U 8044 ; WX 946 ; N uni1F6C ; G 1766
U 8045 ; WX 976 ; N uni1F6D ; G 1767
U 8046 ; WX 938 ; N uni1F6E ; G 1768
U 8047 ; WX 970 ; N uni1F6F ; G 1769
U 8048 ; WX 675 ; N uni1F70 ; G 1770
U 8049 ; WX 675 ; N uni1F71 ; G 1771
U 8050 ; WX 537 ; N uni1F72 ; G 1772
U 8051 ; WX 537 ; N uni1F73 ; G 1773
U 8052 ; WX 599 ; N uni1F74 ; G 1774
U 8053 ; WX 599 ; N uni1F75 ; G 1775
U 8054 ; WX 392 ; N uni1F76 ; G 1776
U 8055 ; WX 392 ; N uni1F77 ; G 1777
U 8056 ; WX 602 ; N uni1F78 ; G 1778
U 8057 ; WX 602 ; N uni1F79 ; G 1779
U 8058 ; WX 608 ; N uni1F7A ; G 1780
U 8059 ; WX 608 ; N uni1F7B ; G 1781
U 8060 ; WX 815 ; N uni1F7C ; G 1782
U 8061 ; WX 815 ; N uni1F7D ; G 1783
U 8064 ; WX 675 ; N uni1F80 ; G 1784
U 8065 ; WX 675 ; N uni1F81 ; G 1785
U 8066 ; WX 675 ; N uni1F82 ; G 1786
U 8067 ; WX 675 ; N uni1F83 ; G 1787
U 8068 ; WX 675 ; N uni1F84 ; G 1788
U 8069 ; WX 675 ; N uni1F85 ; G 1789
U 8070 ; WX 675 ; N uni1F86 ; G 1790
U 8071 ; WX 675 ; N uni1F87 ; G 1791
U 8072 ; WX 722 ; N uni1F88 ; G 1792
U 8073 ; WX 722 ; N uni1F89 ; G 1793
U 8074 ; WX 869 ; N uni1F8A ; G 1794
U 8075 ; WX 869 ; N uni1F8B ; G 1795
U 8076 ; WX 734 ; N uni1F8C ; G 1796
U 8077 ; WX 763 ; N uni1F8D ; G 1797
U 8078 ; WX 722 ; N uni1F8E ; G 1798
U 8079 ; WX 722 ; N uni1F8F ; G 1799
U 8080 ; WX 599 ; N uni1F90 ; G 1800
U 8081 ; WX 599 ; N uni1F91 ; G 1801
U 8082 ; WX 599 ; N uni1F92 ; G 1802
U 8083 ; WX 599 ; N uni1F93 ; G 1803
U 8084 ; WX 599 ; N uni1F94 ; G 1804
U 8085 ; WX 599 ; N uni1F95 ; G 1805
U 8086 ; WX 599 ; N uni1F96 ; G 1806
U 8087 ; WX 599 ; N uni1F97 ; G 1807
U 8088 ; WX 998 ; N uni1F98 ; G 1808
U 8089 ; WX 992 ; N uni1F99 ; G 1809
U 8090 ; WX 1212 ; N uni1F9A ; G 1810
U 8091 ; WX 1224 ; N uni1F9B ; G 1811
U 8092 ; WX 1159 ; N uni1F9C ; G 1812
U 8093 ; WX 1183 ; N uni1F9D ; G 1813
U 8094 ; WX 1098 ; N uni1F9E ; G 1814
U 8095 ; WX 1095 ; N uni1F9F ; G 1815
U 8096 ; WX 815 ; N uni1FA0 ; G 1816
U 8097 ; WX 815 ; N uni1FA1 ; G 1817
U 8098 ; WX 815 ; N uni1FA2 ; G 1818
U 8099 ; WX 815 ; N uni1FA3 ; G 1819
U 8100 ; WX 815 ; N uni1FA4 ; G 1820
U 8101 ; WX 815 ; N uni1FA5 ; G 1821
U 8102 ; WX 815 ; N uni1FA6 ; G 1822
U 8103 ; WX 815 ; N uni1FA7 ; G 1823
U 8104 ; WX 829 ; N uni1FA8 ; G 1824
U 8105 ; WX 870 ; N uni1FA9 ; G 1825
U 8106 ; WX 1131 ; N uni1FAA ; G 1826
U 8107 ; WX 1137 ; N uni1FAB ; G 1827
U 8108 ; WX 946 ; N uni1FAC ; G 1828
U 8109 ; WX 976 ; N uni1FAD ; G 1829
U 8110 ; WX 938 ; N uni1FAE ; G 1830
U 8111 ; WX 970 ; N uni1FAF ; G 1831
U 8112 ; WX 675 ; N uni1FB0 ; G 1832
U 8113 ; WX 675 ; N uni1FB1 ; G 1833
U 8114 ; WX 675 ; N uni1FB2 ; G 1834
U 8115 ; WX 675 ; N uni1FB3 ; G 1835
U 8116 ; WX 675 ; N uni1FB4 ; G 1836
U 8118 ; WX 675 ; N uni1FB6 ; G 1837
U 8119 ; WX 675 ; N uni1FB7 ; G 1838
U 8120 ; WX 722 ; N uni1FB8 ; G 1839
U 8121 ; WX 722 ; N uni1FB9 ; G 1840
U 8122 ; WX 722 ; N uni1FBA ; G 1841
U 8123 ; WX 722 ; N uni1FBB ; G 1842
U 8124 ; WX 722 ; N uni1FBC ; G 1843
U 8125 ; WX 500 ; N uni1FBD ; G 1844
U 8126 ; WX 500 ; N uni1FBE ; G 1845
U 8127 ; WX 500 ; N uni1FBF ; G 1846
U 8128 ; WX 500 ; N uni1FC0 ; G 1847
U 8129 ; WX 500 ; N uni1FC1 ; G 1848
U 8130 ; WX 599 ; N uni1FC2 ; G 1849
U 8131 ; WX 599 ; N uni1FC3 ; G 1850
U 8132 ; WX 599 ; N uni1FC4 ; G 1851
U 8134 ; WX 599 ; N uni1FC6 ; G 1852
U 8135 ; WX 599 ; N uni1FC7 ; G 1853
U 8136 ; WX 912 ; N uni1FC8 ; G 1854
U 8137 ; WX 900 ; N uni1FC9 ; G 1855
U 8138 ; WX 1063 ; N uni1FCA ; G 1856
U 8139 ; WX 1039 ; N uni1FCB ; G 1857
U 8140 ; WX 872 ; N uni1FCC ; G 1858
U 8141 ; WX 500 ; N uni1FCD ; G 1859
U 8142 ; WX 500 ; N uni1FCE ; G 1860
U 8143 ; WX 500 ; N uni1FCF ; G 1861
U 8144 ; WX 392 ; N uni1FD0 ; G 1862
U 8145 ; WX 392 ; N uni1FD1 ; G 1863
U 8146 ; WX 392 ; N uni1FD2 ; G 1864
U 8147 ; WX 392 ; N uni1FD3 ; G 1865
U 8150 ; WX 392 ; N uni1FD6 ; G 1866
U 8151 ; WX 392 ; N uni1FD7 ; G 1867
U 8152 ; WX 395 ; N uni1FD8 ; G 1868
U 8153 ; WX 395 ; N uni1FD9 ; G 1869
U 8154 ; WX 588 ; N uni1FDA ; G 1870
U 8155 ; WX 562 ; N uni1FDB ; G 1871
U 8157 ; WX 500 ; N uni1FDD ; G 1872
U 8158 ; WX 500 ; N uni1FDE ; G 1873
U 8159 ; WX 500 ; N uni1FDF ; G 1874
U 8160 ; WX 608 ; N uni1FE0 ; G 1875
U 8161 ; WX 608 ; N uni1FE1 ; G 1876
U 8162 ; WX 608 ; N uni1FE2 ; G 1877
U 8163 ; WX 608 ; N uni1FE3 ; G 1878
U 8164 ; WX 588 ; N uni1FE4 ; G 1879
U 8165 ; WX 588 ; N uni1FE5 ; G 1880
U 8166 ; WX 608 ; N uni1FE6 ; G 1881
U 8167 ; WX 608 ; N uni1FE7 ; G 1882
U 8168 ; WX 660 ; N uni1FE8 ; G 1883
U 8169 ; WX 660 ; N uni1FE9 ; G 1884
U 8170 ; WX 921 ; N uni1FEA ; G 1885
U 8171 ; WX 897 ; N uni1FEB ; G 1886
U 8172 ; WX 790 ; N uni1FEC ; G 1887
U 8173 ; WX 500 ; N uni1FED ; G 1888
U 8174 ; WX 500 ; N uni1FEE ; G 1889
U 8175 ; WX 500 ; N uni1FEF ; G 1890
U 8178 ; WX 815 ; N uni1FF2 ; G 1891
U 8179 ; WX 815 ; N uni1FF3 ; G 1892
U 8180 ; WX 815 ; N uni1FF4 ; G 1893
U 8182 ; WX 815 ; N uni1FF6 ; G 1894
U 8183 ; WX 815 ; N uni1FF7 ; G 1895
U 8184 ; WX 961 ; N uni1FF8 ; G 1896
U 8185 ; WX 835 ; N uni1FF9 ; G 1897
U 8186 ; WX 984 ; N uni1FFA ; G 1898
U 8187 ; WX 853 ; N uni1FFB ; G 1899
U 8188 ; WX 829 ; N uni1FFC ; G 1900
U 8189 ; WX 500 ; N uni1FFD ; G 1901
U 8190 ; WX 500 ; N uni1FFE ; G 1902
U 8192 ; WX 500 ; N uni2000 ; G 1903
U 8193 ; WX 1000 ; N uni2001 ; G 1904
U 8194 ; WX 500 ; N uni2002 ; G 1905
U 8195 ; WX 1000 ; N uni2003 ; G 1906
U 8196 ; WX 330 ; N uni2004 ; G 1907
U 8197 ; WX 250 ; N uni2005 ; G 1908
U 8198 ; WX 167 ; N uni2006 ; G 1909
U 8199 ; WX 636 ; N uni2007 ; G 1910
U 8200 ; WX 318 ; N uni2008 ; G 1911
U 8201 ; WX 200 ; N uni2009 ; G 1912
U 8202 ; WX 100 ; N uni200A ; G 1913
U 8203 ; WX 0 ; N uni200B ; G 1914
U 8204 ; WX 0 ; N uni200C ; G 1915
U 8205 ; WX 0 ; N uni200D ; G 1916
U 8206 ; WX 0 ; N uni200E ; G 1917
U 8207 ; WX 0 ; N uni200F ; G 1918
U 8208 ; WX 338 ; N uni2010 ; G 1919
U 8209 ; WX 338 ; N uni2011 ; G 1920
U 8210 ; WX 636 ; N figuredash ; G 1921
U 8211 ; WX 500 ; N endash ; G 1922
U 8212 ; WX 1000 ; N emdash ; G 1923
U 8213 ; WX 1000 ; N uni2015 ; G 1924
U 8214 ; WX 500 ; N uni2016 ; G 1925
U 8215 ; WX 500 ; N underscoredbl ; G 1926
U 8216 ; WX 318 ; N quoteleft ; G 1927
U 8217 ; WX 318 ; N quoteright ; G 1928
U 8218 ; WX 318 ; N quotesinglbase ; G 1929
U 8219 ; WX 318 ; N quotereversed ; G 1930
U 8220 ; WX 511 ; N quotedblleft ; G 1931
U 8221 ; WX 511 ; N quotedblright ; G 1932
U 8222 ; WX 518 ; N quotedblbase ; G 1933
U 8223 ; WX 511 ; N uni201F ; G 1934
U 8224 ; WX 500 ; N dagger ; G 1935
U 8225 ; WX 500 ; N daggerdbl ; G 1936
U 8226 ; WX 590 ; N bullet ; G 1937
U 8227 ; WX 590 ; N uni2023 ; G 1938
U 8228 ; WX 334 ; N onedotenleader ; G 1939
U 8229 ; WX 667 ; N twodotenleader ; G 1940
U 8230 ; WX 1000 ; N ellipsis ; G 1941
U 8234 ; WX 0 ; N uni202A ; G 1942
U 8235 ; WX 0 ; N uni202B ; G 1943
U 8236 ; WX 0 ; N uni202C ; G 1944
U 8237 ; WX 0 ; N uni202D ; G 1945
U 8238 ; WX 0 ; N uni202E ; G 1946
U 8239 ; WX 200 ; N uni202F ; G 1947
U 8240 ; WX 1342 ; N perthousand ; G 1948
U 8241 ; WX 1734 ; N uni2031 ; G 1949
U 8242 ; WX 227 ; N minute ; G 1950
U 8243 ; WX 374 ; N second ; G 1951
U 8244 ; WX 520 ; N uni2034 ; G 1952
U 8245 ; WX 227 ; N uni2035 ; G 1953
U 8246 ; WX 374 ; N uni2036 ; G 1954
U 8247 ; WX 520 ; N uni2037 ; G 1955
U 8248 ; WX 339 ; N uni2038 ; G 1956
U 8249 ; WX 400 ; N guilsinglleft ; G 1957
U 8250 ; WX 400 ; N guilsinglright ; G 1958
U 8252 ; WX 527 ; N exclamdbl ; G 1959
U 8253 ; WX 536 ; N uni203D ; G 1960
U 8254 ; WX 500 ; N uni203E ; G 1961
U 8258 ; WX 1000 ; N uni2042 ; G 1962
U 8260 ; WX 167 ; N fraction ; G 1963
U 8261 ; WX 390 ; N uni2045 ; G 1964
U 8262 ; WX 390 ; N uni2046 ; G 1965
U 8263 ; WX 976 ; N uni2047 ; G 1966
U 8264 ; WX 753 ; N uni2048 ; G 1967
U 8265 ; WX 753 ; N uni2049 ; G 1968
U 8267 ; WX 636 ; N uni204B ; G 1969
U 8268 ; WX 500 ; N uni204C ; G 1970
U 8269 ; WX 500 ; N uni204D ; G 1971
U 8270 ; WX 500 ; N uni204E ; G 1972
U 8271 ; WX 337 ; N uni204F ; G 1973
U 8273 ; WX 500 ; N uni2051 ; G 1974
U 8274 ; WX 450 ; N uni2052 ; G 1975
U 8275 ; WX 1000 ; N uni2053 ; G 1976
U 8279 ; WX 663 ; N uni2057 ; G 1977
U 8287 ; WX 222 ; N uni205F ; G 1978
U 8288 ; WX 0 ; N uni2060 ; G 1979
U 8289 ; WX 0 ; N uni2061 ; G 1980
U 8290 ; WX 0 ; N uni2062 ; G 1981
U 8291 ; WX 0 ; N uni2063 ; G 1982
U 8292 ; WX 0 ; N uni2064 ; G 1983
U 8298 ; WX 0 ; N uni206A ; G 1984
U 8299 ; WX 0 ; N uni206B ; G 1985
U 8300 ; WX 0 ; N uni206C ; G 1986
U 8301 ; WX 0 ; N uni206D ; G 1987
U 8302 ; WX 0 ; N uni206E ; G 1988
U 8303 ; WX 0 ; N uni206F ; G 1989
U 8304 ; WX 401 ; N uni2070 ; G 1990
U 8305 ; WX 201 ; N uni2071 ; G 1991
U 8308 ; WX 401 ; N uni2074 ; G 1992
U 8309 ; WX 401 ; N uni2075 ; G 1993
U 8310 ; WX 401 ; N uni2076 ; G 1994
U 8311 ; WX 401 ; N uni2077 ; G 1995
U 8312 ; WX 401 ; N uni2078 ; G 1996
U 8313 ; WX 401 ; N uni2079 ; G 1997
U 8314 ; WX 528 ; N uni207A ; G 1998
U 8315 ; WX 528 ; N uni207B ; G 1999
U 8316 ; WX 528 ; N uni207C ; G 2000
U 8317 ; WX 246 ; N uni207D ; G 2001
U 8318 ; WX 246 ; N uni207E ; G 2002
U 8319 ; WX 433 ; N uni207F ; G 2003
U 8320 ; WX 401 ; N uni2080 ; G 2004
U 8321 ; WX 401 ; N uni2081 ; G 2005
U 8322 ; WX 401 ; N uni2082 ; G 2006
U 8323 ; WX 401 ; N uni2083 ; G 2007
U 8324 ; WX 401 ; N uni2084 ; G 2008
U 8325 ; WX 401 ; N uni2085 ; G 2009
U 8326 ; WX 401 ; N uni2086 ; G 2010
U 8327 ; WX 401 ; N uni2087 ; G 2011
U 8328 ; WX 401 ; N uni2088 ; G 2012
U 8329 ; WX 401 ; N uni2089 ; G 2013
U 8330 ; WX 528 ; N uni208A ; G 2014
U 8331 ; WX 528 ; N uni208B ; G 2015
U 8332 ; WX 528 ; N uni208C ; G 2016
U 8333 ; WX 246 ; N uni208D ; G 2017
U 8334 ; WX 246 ; N uni208E ; G 2018
U 8336 ; WX 386 ; N uni2090 ; G 2019
U 8337 ; WX 387 ; N uni2091 ; G 2020
U 8338 ; WX 385 ; N uni2092 ; G 2021
U 8339 ; WX 424 ; N uni2093 ; G 2022
U 8340 ; WX 387 ; N uni2094 ; G 2023
U 8341 ; WX 433 ; N uni2095 ; G 2024
U 8342 ; WX 365 ; N uni2096 ; G 2025
U 8343 ; WX 243 ; N uni2097 ; G 2026
U 8344 ; WX 613 ; N uni2098 ; G 2027
U 8345 ; WX 433 ; N uni2099 ; G 2028
U 8346 ; WX 400 ; N uni209A ; G 2029
U 8347 ; WX 337 ; N uni209B ; G 2030
U 8348 ; WX 247 ; N uni209C ; G 2031
U 8358 ; WX 636 ; N uni20A6 ; G 2032
U 8364 ; WX 636 ; N Euro ; G 2033
U 8367 ; WX 1057 ; N uni20AF ; G 2034
U 8369 ; WX 706 ; N uni20B1 ; G 2035
U 8372 ; WX 780 ; N uni20B4 ; G 2036
U 8373 ; WX 636 ; N uni20B5 ; G 2037
U 8376 ; WX 636 ; N uni20B8 ; G 2038
U 8377 ; WX 636 ; N uni20B9 ; G 2039
U 8378 ; WX 636 ; N uni20BA ; G 2040
U 8381 ; WX 636 ; N uni20BD ; G 2041
U 8450 ; WX 796 ; N uni2102 ; G 2042
U 8451 ; WX 1119 ; N uni2103 ; G 2043
U 8457 ; WX 1047 ; N uni2109 ; G 2044
U 8461 ; WX 945 ; N uni210D ; G 2045
U 8462 ; WX 644 ; N uni210E ; G 2046
U 8463 ; WX 644 ; N uni210F ; G 2047
U 8469 ; WX 914 ; N uni2115 ; G 2048
U 8470 ; WX 946 ; N uni2116 ; G 2049
U 8473 ; WX 752 ; N uni2119 ; G 2050
U 8474 ; WX 871 ; N uni211A ; G 2051
U 8477 ; WX 831 ; N uni211D ; G 2052
U 8482 ; WX 1000 ; N trademark ; G 2053
U 8484 ; WX 730 ; N uni2124 ; G 2054
U 8486 ; WX 829 ; N uni2126 ; G 2055
U 8487 ; WX 829 ; N uni2127 ; G 2056
U 8490 ; WX 747 ; N uni212A ; G 2057
U 8491 ; WX 722 ; N uni212B ; G 2058
U 8498 ; WX 694 ; N uni2132 ; G 2059
U 8508 ; WX 732 ; N uni213C ; G 2060
U 8509 ; WX 660 ; N uni213D ; G 2061
U 8510 ; WX 710 ; N uni213E ; G 2062
U 8511 ; WX 944 ; N uni213F ; G 2063
U 8512 ; WX 714 ; N uni2140 ; G 2064
U 8513 ; WX 775 ; N uni2141 ; G 2065
U 8514 ; WX 557 ; N uni2142 ; G 2066
U 8515 ; WX 557 ; N uni2143 ; G 2067
U 8516 ; WX 611 ; N uni2144 ; G 2068
U 8517 ; WX 867 ; N uni2145 ; G 2069
U 8518 ; WX 699 ; N uni2146 ; G 2070
U 8519 ; WX 636 ; N uni2147 ; G 2071
U 8520 ; WX 380 ; N uni2148 ; G 2072
U 8521 ; WX 362 ; N uni2149 ; G 2073
U 8523 ; WX 890 ; N uni214B ; G 2074
U 8526 ; WX 514 ; N uni214E ; G 2075
U 8528 ; WX 969 ; N uni2150 ; G 2076
U 8529 ; WX 969 ; N uni2151 ; G 2077
U 8530 ; WX 1370 ; N uni2152 ; G 2078
U 8531 ; WX 969 ; N onethird ; G 2079
U 8532 ; WX 969 ; N twothirds ; G 2080
U 8533 ; WX 969 ; N uni2155 ; G 2081
U 8534 ; WX 969 ; N uni2156 ; G 2082
U 8535 ; WX 969 ; N uni2157 ; G 2083
U 8536 ; WX 969 ; N uni2158 ; G 2084
U 8537 ; WX 969 ; N uni2159 ; G 2085
U 8538 ; WX 969 ; N uni215A ; G 2086
U 8539 ; WX 969 ; N oneeighth ; G 2087
U 8540 ; WX 969 ; N threeeighths ; G 2088
U 8541 ; WX 969 ; N fiveeighths ; G 2089
U 8542 ; WX 969 ; N seveneighths ; G 2090
U 8543 ; WX 568 ; N uni215F ; G 2091
U 8544 ; WX 395 ; N uni2160 ; G 2092
U 8545 ; WX 680 ; N uni2161 ; G 2093
U 8546 ; WX 964 ; N uni2162 ; G 2094
U 8547 ; WX 999 ; N uni2163 ; G 2095
U 8548 ; WX 722 ; N uni2164 ; G 2096
U 8549 ; WX 1006 ; N uni2165 ; G 2097
U 8550 ; WX 1291 ; N uni2166 ; G 2098
U 8551 ; WX 1575 ; N uni2167 ; G 2099
U 8552 ; WX 965 ; N uni2168 ; G 2100
U 8553 ; WX 712 ; N uni2169 ; G 2101
U 8554 ; WX 969 ; N uni216A ; G 2102
U 8555 ; WX 1253 ; N uni216B ; G 2103
U 8556 ; WX 664 ; N uni216C ; G 2104
U 8557 ; WX 765 ; N uni216D ; G 2105
U 8558 ; WX 802 ; N uni216E ; G 2106
U 8559 ; WX 1024 ; N uni216F ; G 2107
U 8560 ; WX 320 ; N uni2170 ; G 2108
U 8561 ; WX 640 ; N uni2171 ; G 2109
U 8562 ; WX 959 ; N uni2172 ; G 2110
U 8563 ; WX 885 ; N uni2173 ; G 2111
U 8564 ; WX 565 ; N uni2174 ; G 2112
U 8565 ; WX 885 ; N uni2175 ; G 2113
U 8566 ; WX 1205 ; N uni2176 ; G 2114
U 8567 ; WX 1524 ; N uni2177 ; G 2115
U 8568 ; WX 884 ; N uni2178 ; G 2116
U 8569 ; WX 564 ; N uni2179 ; G 2117
U 8570 ; WX 884 ; N uni217A ; G 2118
U 8571 ; WX 1204 ; N uni217B ; G 2119
U 8572 ; WX 320 ; N uni217C ; G 2120
U 8573 ; WX 560 ; N uni217D ; G 2121
U 8574 ; WX 640 ; N uni217E ; G 2122
U 8575 ; WX 948 ; N uni217F ; G 2123
U 8576 ; WX 1206 ; N uni2180 ; G 2124
U 8577 ; WX 802 ; N uni2181 ; G 2125
U 8578 ; WX 1206 ; N uni2182 ; G 2126
U 8579 ; WX 765 ; N uni2183 ; G 2127
U 8580 ; WX 560 ; N uni2184 ; G 2128
U 8581 ; WX 765 ; N uni2185 ; G 2129
U 8585 ; WX 969 ; N uni2189 ; G 2130
U 8592 ; WX 838 ; N arrowleft ; G 2131
U 8593 ; WX 838 ; N arrowup ; G 2132
U 8594 ; WX 838 ; N arrowright ; G 2133
U 8595 ; WX 838 ; N arrowdown ; G 2134
U 8596 ; WX 838 ; N arrowboth ; G 2135
U 8597 ; WX 838 ; N arrowupdn ; G 2136
U 8598 ; WX 838 ; N uni2196 ; G 2137
U 8599 ; WX 838 ; N uni2197 ; G 2138
U 8600 ; WX 838 ; N uni2198 ; G 2139
U 8601 ; WX 838 ; N uni2199 ; G 2140
U 8602 ; WX 838 ; N uni219A ; G 2141
U 8603 ; WX 838 ; N uni219B ; G 2142
U 8604 ; WX 838 ; N uni219C ; G 2143
U 8605 ; WX 838 ; N uni219D ; G 2144
U 8606 ; WX 838 ; N uni219E ; G 2145
U 8607 ; WX 838 ; N uni219F ; G 2146
U 8608 ; WX 838 ; N uni21A0 ; G 2147
U 8609 ; WX 838 ; N uni21A1 ; G 2148
U 8610 ; WX 838 ; N uni21A2 ; G 2149
U 8611 ; WX 838 ; N uni21A3 ; G 2150
U 8612 ; WX 838 ; N uni21A4 ; G 2151
U 8613 ; WX 838 ; N uni21A5 ; G 2152
U 8614 ; WX 838 ; N uni21A6 ; G 2153
U 8615 ; WX 838 ; N uni21A7 ; G 2154
U 8616 ; WX 838 ; N arrowupdnbse ; G 2155
U 8617 ; WX 838 ; N uni21A9 ; G 2156
U 8618 ; WX 838 ; N uni21AA ; G 2157
U 8619 ; WX 838 ; N uni21AB ; G 2158
U 8620 ; WX 838 ; N uni21AC ; G 2159
U 8621 ; WX 838 ; N uni21AD ; G 2160
U 8622 ; WX 838 ; N uni21AE ; G 2161
U 8623 ; WX 838 ; N uni21AF ; G 2162
U 8624 ; WX 838 ; N uni21B0 ; G 2163
U 8625 ; WX 838 ; N uni21B1 ; G 2164
U 8626 ; WX 838 ; N uni21B2 ; G 2165
U 8627 ; WX 838 ; N uni21B3 ; G 2166
U 8628 ; WX 838 ; N uni21B4 ; G 2167
U 8629 ; WX 838 ; N carriagereturn ; G 2168
U 8630 ; WX 838 ; N uni21B6 ; G 2169
U 8631 ; WX 838 ; N uni21B7 ; G 2170
U 8632 ; WX 838 ; N uni21B8 ; G 2171
U 8633 ; WX 838 ; N uni21B9 ; G 2172
U 8634 ; WX 838 ; N uni21BA ; G 2173
U 8635 ; WX 838 ; N uni21BB ; G 2174
U 8636 ; WX 838 ; N uni21BC ; G 2175
U 8637 ; WX 838 ; N uni21BD ; G 2176
U 8638 ; WX 838 ; N uni21BE ; G 2177
U 8639 ; WX 838 ; N uni21BF ; G 2178
U 8640 ; WX 838 ; N uni21C0 ; G 2179
U 8641 ; WX 838 ; N uni21C1 ; G 2180
U 8642 ; WX 838 ; N uni21C2 ; G 2181
U 8643 ; WX 838 ; N uni21C3 ; G 2182
U 8644 ; WX 838 ; N uni21C4 ; G 2183
U 8645 ; WX 838 ; N uni21C5 ; G 2184
U 8646 ; WX 838 ; N uni21C6 ; G 2185
U 8647 ; WX 838 ; N uni21C7 ; G 2186
U 8648 ; WX 838 ; N uni21C8 ; G 2187
U 8649 ; WX 838 ; N uni21C9 ; G 2188
U 8650 ; WX 838 ; N uni21CA ; G 2189
U 8651 ; WX 838 ; N uni21CB ; G 2190
U 8652 ; WX 838 ; N uni21CC ; G 2191
U 8653 ; WX 838 ; N uni21CD ; G 2192
U 8654 ; WX 838 ; N uni21CE ; G 2193
U 8655 ; WX 838 ; N uni21CF ; G 2194
U 8656 ; WX 838 ; N arrowdblleft ; G 2195
U 8657 ; WX 838 ; N arrowdblup ; G 2196
U 8658 ; WX 838 ; N arrowdblright ; G 2197
U 8659 ; WX 838 ; N arrowdbldown ; G 2198
U 8660 ; WX 838 ; N arrowdblboth ; G 2199
U 8661 ; WX 838 ; N uni21D5 ; G 2200
U 8662 ; WX 838 ; N uni21D6 ; G 2201
U 8663 ; WX 838 ; N uni21D7 ; G 2202
U 8664 ; WX 838 ; N uni21D8 ; G 2203
U 8665 ; WX 838 ; N uni21D9 ; G 2204
U 8666 ; WX 838 ; N uni21DA ; G 2205
U 8667 ; WX 838 ; N uni21DB ; G 2206
U 8668 ; WX 838 ; N uni21DC ; G 2207
U 8669 ; WX 838 ; N uni21DD ; G 2208
U 8670 ; WX 838 ; N uni21DE ; G 2209
U 8671 ; WX 838 ; N uni21DF ; G 2210
U 8672 ; WX 838 ; N uni21E0 ; G 2211
U 8673 ; WX 838 ; N uni21E1 ; G 2212
U 8674 ; WX 838 ; N uni21E2 ; G 2213
U 8675 ; WX 838 ; N uni21E3 ; G 2214
U 8676 ; WX 838 ; N uni21E4 ; G 2215
U 8677 ; WX 838 ; N uni21E5 ; G 2216
U 8678 ; WX 838 ; N uni21E6 ; G 2217
U 8679 ; WX 838 ; N uni21E7 ; G 2218
U 8680 ; WX 838 ; N uni21E8 ; G 2219
U 8681 ; WX 838 ; N uni21E9 ; G 2220
U 8682 ; WX 838 ; N uni21EA ; G 2221
U 8683 ; WX 838 ; N uni21EB ; G 2222
U 8684 ; WX 838 ; N uni21EC ; G 2223
U 8685 ; WX 838 ; N uni21ED ; G 2224
U 8686 ; WX 838 ; N uni21EE ; G 2225
U 8687 ; WX 838 ; N uni21EF ; G 2226
U 8688 ; WX 838 ; N uni21F0 ; G 2227
U 8689 ; WX 838 ; N uni21F1 ; G 2228
U 8690 ; WX 838 ; N uni21F2 ; G 2229
U 8691 ; WX 838 ; N uni21F3 ; G 2230
U 8692 ; WX 838 ; N uni21F4 ; G 2231
U 8693 ; WX 838 ; N uni21F5 ; G 2232
U 8694 ; WX 838 ; N uni21F6 ; G 2233
U 8695 ; WX 838 ; N uni21F7 ; G 2234
U 8696 ; WX 838 ; N uni21F8 ; G 2235
U 8697 ; WX 838 ; N uni21F9 ; G 2236
U 8698 ; WX 838 ; N uni21FA ; G 2237
U 8699 ; WX 838 ; N uni21FB ; G 2238
U 8700 ; WX 838 ; N uni21FC ; G 2239
U 8701 ; WX 838 ; N uni21FD ; G 2240
U 8702 ; WX 838 ; N uni21FE ; G 2241
U 8703 ; WX 838 ; N uni21FF ; G 2242
U 8704 ; WX 604 ; N universal ; G 2243
U 8706 ; WX 517 ; N partialdiff ; G 2244
U 8707 ; WX 542 ; N existential ; G 2245
U 8708 ; WX 542 ; N uni2204 ; G 2246
U 8710 ; WX 698 ; N increment ; G 2247
U 8711 ; WX 698 ; N gradient ; G 2248
U 8712 ; WX 740 ; N element ; G 2249
U 8713 ; WX 740 ; N notelement ; G 2250
U 8715 ; WX 740 ; N suchthat ; G 2251
U 8716 ; WX 740 ; N uni220C ; G 2252
U 8719 ; WX 796 ; N product ; G 2253
U 8720 ; WX 796 ; N uni2210 ; G 2254
U 8721 ; WX 714 ; N summation ; G 2255
U 8722 ; WX 838 ; N minus ; G 2256
U 8723 ; WX 838 ; N uni2213 ; G 2257
U 8724 ; WX 838 ; N uni2214 ; G 2258
U 8725 ; WX 337 ; N uni2215 ; G 2259
U 8727 ; WX 680 ; N asteriskmath ; G 2260
U 8728 ; WX 490 ; N uni2218 ; G 2261
U 8729 ; WX 490 ; N uni2219 ; G 2262
U 8730 ; WX 637 ; N radical ; G 2263
U 8731 ; WX 637 ; N uni221B ; G 2264
U 8732 ; WX 637 ; N uni221C ; G 2265
U 8733 ; WX 677 ; N proportional ; G 2266
U 8734 ; WX 833 ; N infinity ; G 2267
U 8735 ; WX 838 ; N orthogonal ; G 2268
U 8736 ; WX 838 ; N angle ; G 2269
U 8739 ; WX 291 ; N uni2223 ; G 2270
U 8740 ; WX 479 ; N uni2224 ; G 2271
U 8741 ; WX 462 ; N uni2225 ; G 2272
U 8742 ; WX 634 ; N uni2226 ; G 2273
U 8743 ; WX 732 ; N logicaland ; G 2274
U 8744 ; WX 732 ; N logicalor ; G 2275
U 8745 ; WX 838 ; N intersection ; G 2276
U 8746 ; WX 838 ; N union ; G 2277
U 8747 ; WX 521 ; N integral ; G 2278
U 8748 ; WX 852 ; N uni222C ; G 2279
U 8749 ; WX 1182 ; N uni222D ; G 2280
U 8760 ; WX 838 ; N uni2238 ; G 2281
U 8761 ; WX 838 ; N uni2239 ; G 2282
U 8762 ; WX 838 ; N uni223A ; G 2283
U 8763 ; WX 838 ; N uni223B ; G 2284
U 8764 ; WX 838 ; N similar ; G 2285
U 8765 ; WX 838 ; N uni223D ; G 2286
U 8770 ; WX 838 ; N uni2242 ; G 2287
U 8771 ; WX 838 ; N uni2243 ; G 2288
U 8776 ; WX 838 ; N approxequal ; G 2289
U 8784 ; WX 838 ; N uni2250 ; G 2290
U 8785 ; WX 838 ; N uni2251 ; G 2291
U 8786 ; WX 838 ; N uni2252 ; G 2292
U 8787 ; WX 838 ; N uni2253 ; G 2293
U 8788 ; WX 1033 ; N uni2254 ; G 2294
U 8789 ; WX 1033 ; N uni2255 ; G 2295
U 8800 ; WX 838 ; N notequal ; G 2296
U 8801 ; WX 838 ; N equivalence ; G 2297
U 8804 ; WX 838 ; N lessequal ; G 2298
U 8805 ; WX 838 ; N greaterequal ; G 2299
U 8834 ; WX 838 ; N propersubset ; G 2300
U 8835 ; WX 838 ; N propersuperset ; G 2301
U 8836 ; WX 838 ; N notsubset ; G 2302
U 8837 ; WX 838 ; N uni2285 ; G 2303
U 8838 ; WX 838 ; N reflexsubset ; G 2304
U 8839 ; WX 838 ; N reflexsuperset ; G 2305
U 8844 ; WX 838 ; N uni228C ; G 2306
U 8845 ; WX 838 ; N uni228D ; G 2307
U 8846 ; WX 838 ; N uni228E ; G 2308
U 8847 ; WX 846 ; N uni228F ; G 2309
U 8848 ; WX 846 ; N uni2290 ; G 2310
U 8849 ; WX 846 ; N uni2291 ; G 2311
U 8850 ; WX 846 ; N uni2292 ; G 2312
U 8851 ; WX 838 ; N uni2293 ; G 2313
U 8852 ; WX 838 ; N uni2294 ; G 2314
U 8853 ; WX 838 ; N circleplus ; G 2315
U 8854 ; WX 838 ; N uni2296 ; G 2316
U 8855 ; WX 838 ; N circlemultiply ; G 2317
U 8856 ; WX 838 ; N uni2298 ; G 2318
U 8857 ; WX 838 ; N uni2299 ; G 2319
U 8858 ; WX 838 ; N uni229A ; G 2320
U 8859 ; WX 838 ; N uni229B ; G 2321
U 8860 ; WX 838 ; N uni229C ; G 2322
U 8861 ; WX 838 ; N uni229D ; G 2323
U 8862 ; WX 838 ; N uni229E ; G 2324
U 8863 ; WX 838 ; N uni229F ; G 2325
U 8864 ; WX 838 ; N uni22A0 ; G 2326
U 8865 ; WX 838 ; N uni22A1 ; G 2327
U 8866 ; WX 860 ; N uni22A2 ; G 2328
U 8867 ; WX 860 ; N uni22A3 ; G 2329
U 8868 ; WX 940 ; N uni22A4 ; G 2330
U 8869 ; WX 940 ; N perpendicular ; G 2331
U 8870 ; WX 567 ; N uni22A6 ; G 2332
U 8871 ; WX 567 ; N uni22A7 ; G 2333
U 8872 ; WX 860 ; N uni22A8 ; G 2334
U 8873 ; WX 860 ; N uni22A9 ; G 2335
U 8874 ; WX 860 ; N uni22AA ; G 2336
U 8875 ; WX 1031 ; N uni22AB ; G 2337
U 8876 ; WX 860 ; N uni22AC ; G 2338
U 8877 ; WX 860 ; N uni22AD ; G 2339
U 8878 ; WX 860 ; N uni22AE ; G 2340
U 8879 ; WX 1031 ; N uni22AF ; G 2341
U 8900 ; WX 626 ; N uni22C4 ; G 2342
U 8901 ; WX 342 ; N dotmath ; G 2343
U 8962 ; WX 764 ; N house ; G 2344
U 8968 ; WX 390 ; N uni2308 ; G 2345
U 8969 ; WX 390 ; N uni2309 ; G 2346
U 8970 ; WX 390 ; N uni230A ; G 2347
U 8971 ; WX 390 ; N uni230B ; G 2348
U 8976 ; WX 838 ; N revlogicalnot ; G 2349
U 8977 ; WX 513 ; N uni2311 ; G 2350
U 8984 ; WX 1000 ; N uni2318 ; G 2351
U 8985 ; WX 838 ; N uni2319 ; G 2352
U 8992 ; WX 521 ; N integraltp ; G 2353
U 8993 ; WX 521 ; N integralbt ; G 2354
U 8997 ; WX 1000 ; N uni2325 ; G 2355
U 9000 ; WX 1443 ; N uni2328 ; G 2356
U 9085 ; WX 919 ; N uni237D ; G 2357
U 9115 ; WX 500 ; N uni239B ; G 2358
U 9116 ; WX 500 ; N uni239C ; G 2359
U 9117 ; WX 500 ; N uni239D ; G 2360
U 9118 ; WX 500 ; N uni239E ; G 2361
U 9119 ; WX 500 ; N uni239F ; G 2362
U 9120 ; WX 500 ; N uni23A0 ; G 2363
U 9121 ; WX 500 ; N uni23A1 ; G 2364
U 9122 ; WX 500 ; N uni23A2 ; G 2365
U 9123 ; WX 500 ; N uni23A3 ; G 2366
U 9124 ; WX 500 ; N uni23A4 ; G 2367
U 9125 ; WX 500 ; N uni23A5 ; G 2368
U 9126 ; WX 500 ; N uni23A6 ; G 2369
U 9127 ; WX 750 ; N uni23A7 ; G 2370
U 9128 ; WX 750 ; N uni23A8 ; G 2371
U 9129 ; WX 750 ; N uni23A9 ; G 2372
U 9130 ; WX 750 ; N uni23AA ; G 2373
U 9131 ; WX 750 ; N uni23AB ; G 2374
U 9132 ; WX 750 ; N uni23AC ; G 2375
U 9133 ; WX 750 ; N uni23AD ; G 2376
U 9134 ; WX 521 ; N uni23AE ; G 2377
U 9143 ; WX 637 ; N uni23B7 ; G 2378
U 9167 ; WX 945 ; N uni23CF ; G 2379
U 9251 ; WX 764 ; N uni2423 ; G 2380
U 9472 ; WX 602 ; N SF100000 ; G 2381
U 9473 ; WX 602 ; N uni2501 ; G 2382
U 9474 ; WX 602 ; N SF110000 ; G 2383
U 9475 ; WX 602 ; N uni2503 ; G 2384
U 9476 ; WX 602 ; N uni2504 ; G 2385
U 9477 ; WX 602 ; N uni2505 ; G 2386
U 9478 ; WX 602 ; N uni2506 ; G 2387
U 9479 ; WX 602 ; N uni2507 ; G 2388
U 9480 ; WX 602 ; N uni2508 ; G 2389
U 9481 ; WX 602 ; N uni2509 ; G 2390
U 9482 ; WX 602 ; N uni250A ; G 2391
U 9483 ; WX 602 ; N uni250B ; G 2392
U 9484 ; WX 602 ; N SF010000 ; G 2393
U 9485 ; WX 602 ; N uni250D ; G 2394
U 9486 ; WX 602 ; N uni250E ; G 2395
U 9487 ; WX 602 ; N uni250F ; G 2396
U 9488 ; WX 602 ; N SF030000 ; G 2397
U 9489 ; WX 602 ; N uni2511 ; G 2398
U 9490 ; WX 602 ; N uni2512 ; G 2399
U 9491 ; WX 602 ; N uni2513 ; G 2400
U 9492 ; WX 602 ; N SF020000 ; G 2401
U 9493 ; WX 602 ; N uni2515 ; G 2402
U 9494 ; WX 602 ; N uni2516 ; G 2403
U 9495 ; WX 602 ; N uni2517 ; G 2404
U 9496 ; WX 602 ; N SF040000 ; G 2405
U 9497 ; WX 602 ; N uni2519 ; G 2406
U 9498 ; WX 602 ; N uni251A ; G 2407
U 9499 ; WX 602 ; N uni251B ; G 2408
U 9500 ; WX 602 ; N SF080000 ; G 2409
U 9501 ; WX 602 ; N uni251D ; G 2410
U 9502 ; WX 602 ; N uni251E ; G 2411
U 9503 ; WX 602 ; N uni251F ; G 2412
U 9504 ; WX 602 ; N uni2520 ; G 2413
U 9505 ; WX 602 ; N uni2521 ; G 2414
U 9506 ; WX 602 ; N uni2522 ; G 2415
U 9507 ; WX 602 ; N uni2523 ; G 2416
U 9508 ; WX 602 ; N SF090000 ; G 2417
U 9509 ; WX 602 ; N uni2525 ; G 2418
U 9510 ; WX 602 ; N uni2526 ; G 2419
U 9511 ; WX 602 ; N uni2527 ; G 2420
U 9512 ; WX 602 ; N uni2528 ; G 2421
U 9513 ; WX 602 ; N uni2529 ; G 2422
U 9514 ; WX 602 ; N uni252A ; G 2423
U 9515 ; WX 602 ; N uni252B ; G 2424
U 9516 ; WX 602 ; N SF060000 ; G 2425
U 9517 ; WX 602 ; N uni252D ; G 2426
U 9518 ; WX 602 ; N uni252E ; G 2427
U 9519 ; WX 602 ; N uni252F ; G 2428
U 9520 ; WX 602 ; N uni2530 ; G 2429
U 9521 ; WX 602 ; N uni2531 ; G 2430
U 9522 ; WX 602 ; N uni2532 ; G 2431
U 9523 ; WX 602 ; N uni2533 ; G 2432
U 9524 ; WX 602 ; N SF070000 ; G 2433
U 9525 ; WX 602 ; N uni2535 ; G 2434
U 9526 ; WX 602 ; N uni2536 ; G 2435
U 9527 ; WX 602 ; N uni2537 ; G 2436
U 9528 ; WX 602 ; N uni2538 ; G 2437
U 9529 ; WX 602 ; N uni2539 ; G 2438
U 9530 ; WX 602 ; N uni253A ; G 2439
U 9531 ; WX 602 ; N uni253B ; G 2440
U 9532 ; WX 602 ; N SF050000 ; G 2441
U 9533 ; WX 602 ; N uni253D ; G 2442
U 9534 ; WX 602 ; N uni253E ; G 2443
U 9535 ; WX 602 ; N uni253F ; G 2444
U 9536 ; WX 602 ; N uni2540 ; G 2445
U 9537 ; WX 602 ; N uni2541 ; G 2446
U 9538 ; WX 602 ; N uni2542 ; G 2447
U 9539 ; WX 602 ; N uni2543 ; G 2448
U 9540 ; WX 602 ; N uni2544 ; G 2449
U 9541 ; WX 602 ; N uni2545 ; G 2450
U 9542 ; WX 602 ; N uni2546 ; G 2451
U 9543 ; WX 602 ; N uni2547 ; G 2452
U 9544 ; WX 602 ; N uni2548 ; G 2453
U 9545 ; WX 602 ; N uni2549 ; G 2454
U 9546 ; WX 602 ; N uni254A ; G 2455
U 9547 ; WX 602 ; N uni254B ; G 2456
U 9548 ; WX 602 ; N uni254C ; G 2457
U 9549 ; WX 602 ; N uni254D ; G 2458
U 9550 ; WX 602 ; N uni254E ; G 2459
U 9551 ; WX 602 ; N uni254F ; G 2460
U 9552 ; WX 602 ; N SF430000 ; G 2461
U 9553 ; WX 602 ; N SF240000 ; G 2462
U 9554 ; WX 602 ; N SF510000 ; G 2463
U 9555 ; WX 602 ; N SF520000 ; G 2464
U 9556 ; WX 602 ; N SF390000 ; G 2465
U 9557 ; WX 602 ; N SF220000 ; G 2466
U 9558 ; WX 602 ; N SF210000 ; G 2467
U 9559 ; WX 602 ; N SF250000 ; G 2468
U 9560 ; WX 602 ; N SF500000 ; G 2469
U 9561 ; WX 602 ; N SF490000 ; G 2470
U 9562 ; WX 602 ; N SF380000 ; G 2471
U 9563 ; WX 602 ; N SF280000 ; G 2472
U 9564 ; WX 602 ; N SF270000 ; G 2473
U 9565 ; WX 602 ; N SF260000 ; G 2474
U 9566 ; WX 602 ; N SF360000 ; G 2475
U 9567 ; WX 602 ; N SF370000 ; G 2476
U 9568 ; WX 602 ; N SF420000 ; G 2477
U 9569 ; WX 602 ; N SF190000 ; G 2478
U 9570 ; WX 602 ; N SF200000 ; G 2479
U 9571 ; WX 602 ; N SF230000 ; G 2480
U 9572 ; WX 602 ; N SF470000 ; G 2481
U 9573 ; WX 602 ; N SF480000 ; G 2482
U 9574 ; WX 602 ; N SF410000 ; G 2483
U 9575 ; WX 602 ; N SF450000 ; G 2484
U 9576 ; WX 602 ; N SF460000 ; G 2485
U 9577 ; WX 602 ; N SF400000 ; G 2486
U 9578 ; WX 602 ; N SF540000 ; G 2487
U 9579 ; WX 602 ; N SF530000 ; G 2488
U 9580 ; WX 602 ; N SF440000 ; G 2489
U 9581 ; WX 602 ; N uni256D ; G 2490
U 9582 ; WX 602 ; N uni256E ; G 2491
U 9583 ; WX 602 ; N uni256F ; G 2492
U 9584 ; WX 602 ; N uni2570 ; G 2493
U 9585 ; WX 602 ; N uni2571 ; G 2494
U 9586 ; WX 602 ; N uni2572 ; G 2495
U 9587 ; WX 602 ; N uni2573 ; G 2496
U 9588 ; WX 602 ; N uni2574 ; G 2497
U 9589 ; WX 602 ; N uni2575 ; G 2498
U 9590 ; WX 602 ; N uni2576 ; G 2499
U 9591 ; WX 602 ; N uni2577 ; G 2500
U 9592 ; WX 602 ; N uni2578 ; G 2501
U 9593 ; WX 602 ; N uni2579 ; G 2502
U 9594 ; WX 602 ; N uni257A ; G 2503
U 9595 ; WX 602 ; N uni257B ; G 2504
U 9596 ; WX 602 ; N uni257C ; G 2505
U 9597 ; WX 602 ; N uni257D ; G 2506
U 9598 ; WX 602 ; N uni257E ; G 2507
U 9599 ; WX 602 ; N uni257F ; G 2508
U 9600 ; WX 769 ; N upblock ; G 2509
U 9601 ; WX 769 ; N uni2581 ; G 2510
U 9602 ; WX 769 ; N uni2582 ; G 2511
U 9603 ; WX 769 ; N uni2583 ; G 2512
U 9604 ; WX 769 ; N dnblock ; G 2513
U 9605 ; WX 769 ; N uni2585 ; G 2514
U 9606 ; WX 769 ; N uni2586 ; G 2515
U 9607 ; WX 769 ; N uni2587 ; G 2516
U 9608 ; WX 769 ; N block ; G 2517
U 9609 ; WX 769 ; N uni2589 ; G 2518
U 9610 ; WX 769 ; N uni258A ; G 2519
U 9611 ; WX 769 ; N uni258B ; G 2520
U 9612 ; WX 769 ; N lfblock ; G 2521
U 9613 ; WX 769 ; N uni258D ; G 2522
U 9614 ; WX 769 ; N uni258E ; G 2523
U 9615 ; WX 769 ; N uni258F ; G 2524
U 9616 ; WX 769 ; N rtblock ; G 2525
U 9617 ; WX 769 ; N ltshade ; G 2526
U 9618 ; WX 769 ; N shade ; G 2527
U 9619 ; WX 769 ; N dkshade ; G 2528
U 9620 ; WX 769 ; N uni2594 ; G 2529
U 9621 ; WX 769 ; N uni2595 ; G 2530
U 9622 ; WX 769 ; N uni2596 ; G 2531
U 9623 ; WX 769 ; N uni2597 ; G 2532
U 9624 ; WX 769 ; N uni2598 ; G 2533
U 9625 ; WX 769 ; N uni2599 ; G 2534
U 9626 ; WX 769 ; N uni259A ; G 2535
U 9627 ; WX 769 ; N uni259B ; G 2536
U 9628 ; WX 769 ; N uni259C ; G 2537
U 9629 ; WX 769 ; N uni259D ; G 2538
U 9630 ; WX 769 ; N uni259E ; G 2539
U 9631 ; WX 769 ; N uni259F ; G 2540
U 9632 ; WX 945 ; N filledbox ; G 2541
U 9633 ; WX 945 ; N H22073 ; G 2542
U 9634 ; WX 945 ; N uni25A2 ; G 2543
U 9635 ; WX 945 ; N uni25A3 ; G 2544
U 9636 ; WX 945 ; N uni25A4 ; G 2545
U 9637 ; WX 945 ; N uni25A5 ; G 2546
U 9638 ; WX 945 ; N uni25A6 ; G 2547
U 9639 ; WX 945 ; N uni25A7 ; G 2548
U 9640 ; WX 945 ; N uni25A8 ; G 2549
U 9641 ; WX 945 ; N uni25A9 ; G 2550
U 9642 ; WX 678 ; N H18543 ; G 2551
U 9643 ; WX 678 ; N H18551 ; G 2552
U 9644 ; WX 945 ; N filledrect ; G 2553
U 9645 ; WX 945 ; N uni25AD ; G 2554
U 9646 ; WX 550 ; N uni25AE ; G 2555
U 9647 ; WX 550 ; N uni25AF ; G 2556
U 9648 ; WX 769 ; N uni25B0 ; G 2557
U 9649 ; WX 769 ; N uni25B1 ; G 2558
U 9650 ; WX 769 ; N triagup ; G 2559
U 9651 ; WX 769 ; N uni25B3 ; G 2560
U 9652 ; WX 502 ; N uni25B4 ; G 2561
U 9653 ; WX 502 ; N uni25B5 ; G 2562
U 9654 ; WX 769 ; N uni25B6 ; G 2563
U 9655 ; WX 769 ; N uni25B7 ; G 2564
U 9656 ; WX 502 ; N uni25B8 ; G 2565
U 9657 ; WX 502 ; N uni25B9 ; G 2566
U 9658 ; WX 769 ; N triagrt ; G 2567
U 9659 ; WX 769 ; N uni25BB ; G 2568
U 9660 ; WX 769 ; N triagdn ; G 2569
U 9661 ; WX 769 ; N uni25BD ; G 2570
U 9662 ; WX 502 ; N uni25BE ; G 2571
U 9663 ; WX 502 ; N uni25BF ; G 2572
U 9664 ; WX 769 ; N uni25C0 ; G 2573
U 9665 ; WX 769 ; N uni25C1 ; G 2574
U 9666 ; WX 502 ; N uni25C2 ; G 2575
U 9667 ; WX 502 ; N uni25C3 ; G 2576
U 9668 ; WX 769 ; N triaglf ; G 2577
U 9669 ; WX 769 ; N uni25C5 ; G 2578
U 9670 ; WX 769 ; N uni25C6 ; G 2579
U 9671 ; WX 769 ; N uni25C7 ; G 2580
U 9672 ; WX 769 ; N uni25C8 ; G 2581
U 9673 ; WX 873 ; N uni25C9 ; G 2582
U 9674 ; WX 494 ; N lozenge ; G 2583
U 9675 ; WX 873 ; N circle ; G 2584
U 9676 ; WX 873 ; N uni25CC ; G 2585
U 9677 ; WX 873 ; N uni25CD ; G 2586
U 9678 ; WX 873 ; N uni25CE ; G 2587
U 9679 ; WX 873 ; N H18533 ; G 2588
U 9680 ; WX 873 ; N uni25D0 ; G 2589
U 9681 ; WX 873 ; N uni25D1 ; G 2590
U 9682 ; WX 873 ; N uni25D2 ; G 2591
U 9683 ; WX 873 ; N uni25D3 ; G 2592
U 9684 ; WX 873 ; N uni25D4 ; G 2593
U 9685 ; WX 873 ; N uni25D5 ; G 2594
U 9686 ; WX 527 ; N uni25D6 ; G 2595
U 9687 ; WX 527 ; N uni25D7 ; G 2596
U 9688 ; WX 791 ; N invbullet ; G 2597
U 9689 ; WX 970 ; N invcircle ; G 2598
U 9690 ; WX 970 ; N uni25DA ; G 2599
U 9691 ; WX 970 ; N uni25DB ; G 2600
U 9692 ; WX 387 ; N uni25DC ; G 2601
U 9693 ; WX 387 ; N uni25DD ; G 2602
U 9694 ; WX 387 ; N uni25DE ; G 2603
U 9695 ; WX 387 ; N uni25DF ; G 2604
U 9696 ; WX 873 ; N uni25E0 ; G 2605
U 9697 ; WX 873 ; N uni25E1 ; G 2606
U 9698 ; WX 769 ; N uni25E2 ; G 2607
U 9699 ; WX 769 ; N uni25E3 ; G 2608
U 9700 ; WX 769 ; N uni25E4 ; G 2609
U 9701 ; WX 769 ; N uni25E5 ; G 2610
U 9702 ; WX 590 ; N openbullet ; G 2611
U 9703 ; WX 945 ; N uni25E7 ; G 2612
U 9704 ; WX 945 ; N uni25E8 ; G 2613
U 9705 ; WX 945 ; N uni25E9 ; G 2614
U 9706 ; WX 945 ; N uni25EA ; G 2615
U 9707 ; WX 945 ; N uni25EB ; G 2616
U 9708 ; WX 769 ; N uni25EC ; G 2617
U 9709 ; WX 769 ; N uni25ED ; G 2618
U 9710 ; WX 769 ; N uni25EE ; G 2619
U 9711 ; WX 1119 ; N uni25EF ; G 2620
U 9712 ; WX 945 ; N uni25F0 ; G 2621
U 9713 ; WX 945 ; N uni25F1 ; G 2622
U 9714 ; WX 945 ; N uni25F2 ; G 2623
U 9715 ; WX 945 ; N uni25F3 ; G 2624
U 9716 ; WX 873 ; N uni25F4 ; G 2625
U 9717 ; WX 873 ; N uni25F5 ; G 2626
U 9718 ; WX 873 ; N uni25F6 ; G 2627
U 9719 ; WX 873 ; N uni25F7 ; G 2628
U 9720 ; WX 769 ; N uni25F8 ; G 2629
U 9721 ; WX 769 ; N uni25F9 ; G 2630
U 9722 ; WX 769 ; N uni25FA ; G 2631
U 9723 ; WX 830 ; N uni25FB ; G 2632
U 9724 ; WX 830 ; N uni25FC ; G 2633
U 9725 ; WX 732 ; N uni25FD ; G 2634
U 9726 ; WX 732 ; N uni25FE ; G 2635
U 9727 ; WX 769 ; N uni25FF ; G 2636
U 9728 ; WX 896 ; N uni2600 ; G 2637
U 9784 ; WX 896 ; N uni2638 ; G 2638
U 9785 ; WX 896 ; N uni2639 ; G 2639
U 9786 ; WX 896 ; N smileface ; G 2640
U 9787 ; WX 896 ; N invsmileface ; G 2641
U 9788 ; WX 896 ; N sun ; G 2642
U 9791 ; WX 614 ; N uni263F ; G 2643
U 9792 ; WX 731 ; N female ; G 2644
U 9793 ; WX 731 ; N uni2641 ; G 2645
U 9794 ; WX 896 ; N male ; G 2646
U 9795 ; WX 896 ; N uni2643 ; G 2647
U 9796 ; WX 896 ; N uni2644 ; G 2648
U 9797 ; WX 896 ; N uni2645 ; G 2649
U 9798 ; WX 896 ; N uni2646 ; G 2650
U 9799 ; WX 896 ; N uni2647 ; G 2651
U 9824 ; WX 896 ; N spade ; G 2652
U 9825 ; WX 896 ; N uni2661 ; G 2653
U 9826 ; WX 896 ; N uni2662 ; G 2654
U 9827 ; WX 896 ; N club ; G 2655
U 9828 ; WX 896 ; N uni2664 ; G 2656
U 9829 ; WX 896 ; N heart ; G 2657
U 9830 ; WX 896 ; N diamond ; G 2658
U 9831 ; WX 896 ; N uni2667 ; G 2659
U 9833 ; WX 472 ; N uni2669 ; G 2660
U 9834 ; WX 638 ; N musicalnote ; G 2661
U 9835 ; WX 896 ; N musicalnotedbl ; G 2662
U 9836 ; WX 896 ; N uni266C ; G 2663
U 9837 ; WX 472 ; N uni266D ; G 2664
U 9838 ; WX 357 ; N uni266E ; G 2665
U 9839 ; WX 484 ; N uni266F ; G 2666
U 10145 ; WX 838 ; N uni27A1 ; G 2667
U 10181 ; WX 390 ; N uni27C5 ; G 2668
U 10182 ; WX 390 ; N uni27C6 ; G 2669
U 10208 ; WX 494 ; N uni27E0 ; G 2670
U 10216 ; WX 390 ; N uni27E8 ; G 2671
U 10217 ; WX 390 ; N uni27E9 ; G 2672
U 10224 ; WX 838 ; N uni27F0 ; G 2673
U 10225 ; WX 838 ; N uni27F1 ; G 2674
U 10226 ; WX 838 ; N uni27F2 ; G 2675
U 10227 ; WX 838 ; N uni27F3 ; G 2676
U 10228 ; WX 1033 ; N uni27F4 ; G 2677
U 10229 ; WX 1434 ; N uni27F5 ; G 2678
U 10230 ; WX 1434 ; N uni27F6 ; G 2679
U 10231 ; WX 1434 ; N uni27F7 ; G 2680
U 10232 ; WX 1434 ; N uni27F8 ; G 2681
U 10233 ; WX 1434 ; N uni27F9 ; G 2682
U 10234 ; WX 1434 ; N uni27FA ; G 2683
U 10235 ; WX 1434 ; N uni27FB ; G 2684
U 10236 ; WX 1434 ; N uni27FC ; G 2685
U 10237 ; WX 1434 ; N uni27FD ; G 2686
U 10238 ; WX 1434 ; N uni27FE ; G 2687
U 10239 ; WX 1434 ; N uni27FF ; G 2688
U 10240 ; WX 732 ; N uni2800 ; G 2689
U 10241 ; WX 732 ; N uni2801 ; G 2690
U 10242 ; WX 732 ; N uni2802 ; G 2691
U 10243 ; WX 732 ; N uni2803 ; G 2692
U 10244 ; WX 732 ; N uni2804 ; G 2693
U 10245 ; WX 732 ; N uni2805 ; G 2694
U 10246 ; WX 732 ; N uni2806 ; G 2695
U 10247 ; WX 732 ; N uni2807 ; G 2696
U 10248 ; WX 732 ; N uni2808 ; G 2697
U 10249 ; WX 732 ; N uni2809 ; G 2698
U 10250 ; WX 732 ; N uni280A ; G 2699
U 10251 ; WX 732 ; N uni280B ; G 2700
U 10252 ; WX 732 ; N uni280C ; G 2701
U 10253 ; WX 732 ; N uni280D ; G 2702
U 10254 ; WX 732 ; N uni280E ; G 2703
U 10255 ; WX 732 ; N uni280F ; G 2704
U 10256 ; WX 732 ; N uni2810 ; G 2705
U 10257 ; WX 732 ; N uni2811 ; G 2706
U 10258 ; WX 732 ; N uni2812 ; G 2707
U 10259 ; WX 732 ; N uni2813 ; G 2708
U 10260 ; WX 732 ; N uni2814 ; G 2709
U 10261 ; WX 732 ; N uni2815 ; G 2710
U 10262 ; WX 732 ; N uni2816 ; G 2711
U 10263 ; WX 732 ; N uni2817 ; G 2712
U 10264 ; WX 732 ; N uni2818 ; G 2713
U 10265 ; WX 732 ; N uni2819 ; G 2714
U 10266 ; WX 732 ; N uni281A ; G 2715
U 10267 ; WX 732 ; N uni281B ; G 2716
U 10268 ; WX 732 ; N uni281C ; G 2717
U 10269 ; WX 732 ; N uni281D ; G 2718
U 10270 ; WX 732 ; N uni281E ; G 2719
U 10271 ; WX 732 ; N uni281F ; G 2720
U 10272 ; WX 732 ; N uni2820 ; G 2721
U 10273 ; WX 732 ; N uni2821 ; G 2722
U 10274 ; WX 732 ; N uni2822 ; G 2723
U 10275 ; WX 732 ; N uni2823 ; G 2724
U 10276 ; WX 732 ; N uni2824 ; G 2725
U 10277 ; WX 732 ; N uni2825 ; G 2726
U 10278 ; WX 732 ; N uni2826 ; G 2727
U 10279 ; WX 732 ; N uni2827 ; G 2728
U 10280 ; WX 732 ; N uni2828 ; G 2729
U 10281 ; WX 732 ; N uni2829 ; G 2730
U 10282 ; WX 732 ; N uni282A ; G 2731
U 10283 ; WX 732 ; N uni282B ; G 2732
U 10284 ; WX 732 ; N uni282C ; G 2733
U 10285 ; WX 732 ; N uni282D ; G 2734
U 10286 ; WX 732 ; N uni282E ; G 2735
U 10287 ; WX 732 ; N uni282F ; G 2736
U 10288 ; WX 732 ; N uni2830 ; G 2737
U 10289 ; WX 732 ; N uni2831 ; G 2738
U 10290 ; WX 732 ; N uni2832 ; G 2739
U 10291 ; WX 732 ; N uni2833 ; G 2740
U 10292 ; WX 732 ; N uni2834 ; G 2741
U 10293 ; WX 732 ; N uni2835 ; G 2742
U 10294 ; WX 732 ; N uni2836 ; G 2743
U 10295 ; WX 732 ; N uni2837 ; G 2744
U 10296 ; WX 732 ; N uni2838 ; G 2745
U 10297 ; WX 732 ; N uni2839 ; G 2746
U 10298 ; WX 732 ; N uni283A ; G 2747
U 10299 ; WX 732 ; N uni283B ; G 2748
U 10300 ; WX 732 ; N uni283C ; G 2749
U 10301 ; WX 732 ; N uni283D ; G 2750
U 10302 ; WX 732 ; N uni283E ; G 2751
U 10303 ; WX 732 ; N uni283F ; G 2752
U 10304 ; WX 732 ; N uni2840 ; G 2753
U 10305 ; WX 732 ; N uni2841 ; G 2754
U 10306 ; WX 732 ; N uni2842 ; G 2755
U 10307 ; WX 732 ; N uni2843 ; G 2756
U 10308 ; WX 732 ; N uni2844 ; G 2757
U 10309 ; WX 732 ; N uni2845 ; G 2758
U 10310 ; WX 732 ; N uni2846 ; G 2759
U 10311 ; WX 732 ; N uni2847 ; G 2760
U 10312 ; WX 732 ; N uni2848 ; G 2761
U 10313 ; WX 732 ; N uni2849 ; G 2762
U 10314 ; WX 732 ; N uni284A ; G 2763
U 10315 ; WX 732 ; N uni284B ; G 2764
U 10316 ; WX 732 ; N uni284C ; G 2765
U 10317 ; WX 732 ; N uni284D ; G 2766
U 10318 ; WX 732 ; N uni284E ; G 2767
U 10319 ; WX 732 ; N uni284F ; G 2768
U 10320 ; WX 732 ; N uni2850 ; G 2769
U 10321 ; WX 732 ; N uni2851 ; G 2770
U 10322 ; WX 732 ; N uni2852 ; G 2771
U 10323 ; WX 732 ; N uni2853 ; G 2772
U 10324 ; WX 732 ; N uni2854 ; G 2773
U 10325 ; WX 732 ; N uni2855 ; G 2774
U 10326 ; WX 732 ; N uni2856 ; G 2775
U 10327 ; WX 732 ; N uni2857 ; G 2776
U 10328 ; WX 732 ; N uni2858 ; G 2777
U 10329 ; WX 732 ; N uni2859 ; G 2778
U 10330 ; WX 732 ; N uni285A ; G 2779
U 10331 ; WX 732 ; N uni285B ; G 2780
U 10332 ; WX 732 ; N uni285C ; G 2781
U 10333 ; WX 732 ; N uni285D ; G 2782
U 10334 ; WX 732 ; N uni285E ; G 2783
U 10335 ; WX 732 ; N uni285F ; G 2784
U 10336 ; WX 732 ; N uni2860 ; G 2785
U 10337 ; WX 732 ; N uni2861 ; G 2786
U 10338 ; WX 732 ; N uni2862 ; G 2787
U 10339 ; WX 732 ; N uni2863 ; G 2788
U 10340 ; WX 732 ; N uni2864 ; G 2789
U 10341 ; WX 732 ; N uni2865 ; G 2790
U 10342 ; WX 732 ; N uni2866 ; G 2791
U 10343 ; WX 732 ; N uni2867 ; G 2792
U 10344 ; WX 732 ; N uni2868 ; G 2793
U 10345 ; WX 732 ; N uni2869 ; G 2794
U 10346 ; WX 732 ; N uni286A ; G 2795
U 10347 ; WX 732 ; N uni286B ; G 2796
U 10348 ; WX 732 ; N uni286C ; G 2797
U 10349 ; WX 732 ; N uni286D ; G 2798
U 10350 ; WX 732 ; N uni286E ; G 2799
U 10351 ; WX 732 ; N uni286F ; G 2800
U 10352 ; WX 732 ; N uni2870 ; G 2801
U 10353 ; WX 732 ; N uni2871 ; G 2802
U 10354 ; WX 732 ; N uni2872 ; G 2803
U 10355 ; WX 732 ; N uni2873 ; G 2804
U 10356 ; WX 732 ; N uni2874 ; G 2805
U 10357 ; WX 732 ; N uni2875 ; G 2806
U 10358 ; WX 732 ; N uni2876 ; G 2807
U 10359 ; WX 732 ; N uni2877 ; G 2808
U 10360 ; WX 732 ; N uni2878 ; G 2809
U 10361 ; WX 732 ; N uni2879 ; G 2810
U 10362 ; WX 732 ; N uni287A ; G 2811
U 10363 ; WX 732 ; N uni287B ; G 2812
U 10364 ; WX 732 ; N uni287C ; G 2813
U 10365 ; WX 732 ; N uni287D ; G 2814
U 10366 ; WX 732 ; N uni287E ; G 2815
U 10367 ; WX 732 ; N uni287F ; G 2816
U 10368 ; WX 732 ; N uni2880 ; G 2817
U 10369 ; WX 732 ; N uni2881 ; G 2818
U 10370 ; WX 732 ; N uni2882 ; G 2819
U 10371 ; WX 732 ; N uni2883 ; G 2820
U 10372 ; WX 732 ; N uni2884 ; G 2821
U 10373 ; WX 732 ; N uni2885 ; G 2822
U 10374 ; WX 732 ; N uni2886 ; G 2823
U 10375 ; WX 732 ; N uni2887 ; G 2824
U 10376 ; WX 732 ; N uni2888 ; G 2825
U 10377 ; WX 732 ; N uni2889 ; G 2826
U 10378 ; WX 732 ; N uni288A ; G 2827
U 10379 ; WX 732 ; N uni288B ; G 2828
U 10380 ; WX 732 ; N uni288C ; G 2829
U 10381 ; WX 732 ; N uni288D ; G 2830
U 10382 ; WX 732 ; N uni288E ; G 2831
U 10383 ; WX 732 ; N uni288F ; G 2832
U 10384 ; WX 732 ; N uni2890 ; G 2833
U 10385 ; WX 732 ; N uni2891 ; G 2834
U 10386 ; WX 732 ; N uni2892 ; G 2835
U 10387 ; WX 732 ; N uni2893 ; G 2836
U 10388 ; WX 732 ; N uni2894 ; G 2837
U 10389 ; WX 732 ; N uni2895 ; G 2838
U 10390 ; WX 732 ; N uni2896 ; G 2839
U 10391 ; WX 732 ; N uni2897 ; G 2840
U 10392 ; WX 732 ; N uni2898 ; G 2841
U 10393 ; WX 732 ; N uni2899 ; G 2842
U 10394 ; WX 732 ; N uni289A ; G 2843
U 10395 ; WX 732 ; N uni289B ; G 2844
U 10396 ; WX 732 ; N uni289C ; G 2845
U 10397 ; WX 732 ; N uni289D ; G 2846
U 10398 ; WX 732 ; N uni289E ; G 2847
U 10399 ; WX 732 ; N uni289F ; G 2848
U 10400 ; WX 732 ; N uni28A0 ; G 2849
U 10401 ; WX 732 ; N uni28A1 ; G 2850
U 10402 ; WX 732 ; N uni28A2 ; G 2851
U 10403 ; WX 732 ; N uni28A3 ; G 2852
U 10404 ; WX 732 ; N uni28A4 ; G 2853
U 10405 ; WX 732 ; N uni28A5 ; G 2854
U 10406 ; WX 732 ; N uni28A6 ; G 2855
U 10407 ; WX 732 ; N uni28A7 ; G 2856
U 10408 ; WX 732 ; N uni28A8 ; G 2857
U 10409 ; WX 732 ; N uni28A9 ; G 2858
U 10410 ; WX 732 ; N uni28AA ; G 2859
U 10411 ; WX 732 ; N uni28AB ; G 2860
U 10412 ; WX 732 ; N uni28AC ; G 2861
U 10413 ; WX 732 ; N uni28AD ; G 2862
U 10414 ; WX 732 ; N uni28AE ; G 2863
U 10415 ; WX 732 ; N uni28AF ; G 2864
U 10416 ; WX 732 ; N uni28B0 ; G 2865
U 10417 ; WX 732 ; N uni28B1 ; G 2866
U 10418 ; WX 732 ; N uni28B2 ; G 2867
U 10419 ; WX 732 ; N uni28B3 ; G 2868
U 10420 ; WX 732 ; N uni28B4 ; G 2869
U 10421 ; WX 732 ; N uni28B5 ; G 2870
U 10422 ; WX 732 ; N uni28B6 ; G 2871
U 10423 ; WX 732 ; N uni28B7 ; G 2872
U 10424 ; WX 732 ; N uni28B8 ; G 2873
U 10425 ; WX 732 ; N uni28B9 ; G 2874
U 10426 ; WX 732 ; N uni28BA ; G 2875
U 10427 ; WX 732 ; N uni28BB ; G 2876
U 10428 ; WX 732 ; N uni28BC ; G 2877
U 10429 ; WX 732 ; N uni28BD ; G 2878
U 10430 ; WX 732 ; N uni28BE ; G 2879
U 10431 ; WX 732 ; N uni28BF ; G 2880
U 10432 ; WX 732 ; N uni28C0 ; G 2881
U 10433 ; WX 732 ; N uni28C1 ; G 2882
U 10434 ; WX 732 ; N uni28C2 ; G 2883
U 10435 ; WX 732 ; N uni28C3 ; G 2884
U 10436 ; WX 732 ; N uni28C4 ; G 2885
U 10437 ; WX 732 ; N uni28C5 ; G 2886
U 10438 ; WX 732 ; N uni28C6 ; G 2887
U 10439 ; WX 732 ; N uni28C7 ; G 2888
U 10440 ; WX 732 ; N uni28C8 ; G 2889
U 10441 ; WX 732 ; N uni28C9 ; G 2890
U 10442 ; WX 732 ; N uni28CA ; G 2891
U 10443 ; WX 732 ; N uni28CB ; G 2892
U 10444 ; WX 732 ; N uni28CC ; G 2893
U 10445 ; WX 732 ; N uni28CD ; G 2894
U 10446 ; WX 732 ; N uni28CE ; G 2895
U 10447 ; WX 732 ; N uni28CF ; G 2896
U 10448 ; WX 732 ; N uni28D0 ; G 2897
U 10449 ; WX 732 ; N uni28D1 ; G 2898
U 10450 ; WX 732 ; N uni28D2 ; G 2899
U 10451 ; WX 732 ; N uni28D3 ; G 2900
U 10452 ; WX 732 ; N uni28D4 ; G 2901
U 10453 ; WX 732 ; N uni28D5 ; G 2902
U 10454 ; WX 732 ; N uni28D6 ; G 2903
U 10455 ; WX 732 ; N uni28D7 ; G 2904
U 10456 ; WX 732 ; N uni28D8 ; G 2905
U 10457 ; WX 732 ; N uni28D9 ; G 2906
U 10458 ; WX 732 ; N uni28DA ; G 2907
U 10459 ; WX 732 ; N uni28DB ; G 2908
U 10460 ; WX 732 ; N uni28DC ; G 2909
U 10461 ; WX 732 ; N uni28DD ; G 2910
U 10462 ; WX 732 ; N uni28DE ; G 2911
U 10463 ; WX 732 ; N uni28DF ; G 2912
U 10464 ; WX 732 ; N uni28E0 ; G 2913
U 10465 ; WX 732 ; N uni28E1 ; G 2914
U 10466 ; WX 732 ; N uni28E2 ; G 2915
U 10467 ; WX 732 ; N uni28E3 ; G 2916
U 10468 ; WX 732 ; N uni28E4 ; G 2917
U 10469 ; WX 732 ; N uni28E5 ; G 2918
U 10470 ; WX 732 ; N uni28E6 ; G 2919
U 10471 ; WX 732 ; N uni28E7 ; G 2920
U 10472 ; WX 732 ; N uni28E8 ; G 2921
U 10473 ; WX 732 ; N uni28E9 ; G 2922
U 10474 ; WX 732 ; N uni28EA ; G 2923
U 10475 ; WX 732 ; N uni28EB ; G 2924
U 10476 ; WX 732 ; N uni28EC ; G 2925
U 10477 ; WX 732 ; N uni28ED ; G 2926
U 10478 ; WX 732 ; N uni28EE ; G 2927
U 10479 ; WX 732 ; N uni28EF ; G 2928
U 10480 ; WX 732 ; N uni28F0 ; G 2929
U 10481 ; WX 732 ; N uni28F1 ; G 2930
U 10482 ; WX 732 ; N uni28F2 ; G 2931
U 10483 ; WX 732 ; N uni28F3 ; G 2932
U 10484 ; WX 732 ; N uni28F4 ; G 2933
U 10485 ; WX 732 ; N uni28F5 ; G 2934
U 10486 ; WX 732 ; N uni28F6 ; G 2935
U 10487 ; WX 732 ; N uni28F7 ; G 2936
U 10488 ; WX 732 ; N uni28F8 ; G 2937
U 10489 ; WX 732 ; N uni28F9 ; G 2938
U 10490 ; WX 732 ; N uni28FA ; G 2939
U 10491 ; WX 732 ; N uni28FB ; G 2940
U 10492 ; WX 732 ; N uni28FC ; G 2941
U 10493 ; WX 732 ; N uni28FD ; G 2942
U 10494 ; WX 732 ; N uni28FE ; G 2943
U 10495 ; WX 732 ; N uni28FF ; G 2944
U 10496 ; WX 838 ; N uni2900 ; G 2945
U 10497 ; WX 838 ; N uni2901 ; G 2946
U 10498 ; WX 838 ; N uni2902 ; G 2947
U 10499 ; WX 838 ; N uni2903 ; G 2948
U 10500 ; WX 838 ; N uni2904 ; G 2949
U 10501 ; WX 838 ; N uni2905 ; G 2950
U 10502 ; WX 838 ; N uni2906 ; G 2951
U 10503 ; WX 838 ; N uni2907 ; G 2952
U 10504 ; WX 838 ; N uni2908 ; G 2953
U 10505 ; WX 838 ; N uni2909 ; G 2954
U 10506 ; WX 838 ; N uni290A ; G 2955
U 10507 ; WX 838 ; N uni290B ; G 2956
U 10508 ; WX 838 ; N uni290C ; G 2957
U 10509 ; WX 838 ; N uni290D ; G 2958
U 10510 ; WX 838 ; N uni290E ; G 2959
U 10511 ; WX 838 ; N uni290F ; G 2960
U 10512 ; WX 838 ; N uni2910 ; G 2961
U 10513 ; WX 838 ; N uni2911 ; G 2962
U 10514 ; WX 838 ; N uni2912 ; G 2963
U 10515 ; WX 838 ; N uni2913 ; G 2964
U 10516 ; WX 838 ; N uni2914 ; G 2965
U 10517 ; WX 838 ; N uni2915 ; G 2966
U 10518 ; WX 838 ; N uni2916 ; G 2967
U 10519 ; WX 838 ; N uni2917 ; G 2968
U 10520 ; WX 838 ; N uni2918 ; G 2969
U 10521 ; WX 838 ; N uni2919 ; G 2970
U 10522 ; WX 838 ; N uni291A ; G 2971
U 10523 ; WX 838 ; N uni291B ; G 2972
U 10524 ; WX 838 ; N uni291C ; G 2973
U 10525 ; WX 838 ; N uni291D ; G 2974
U 10526 ; WX 838 ; N uni291E ; G 2975
U 10527 ; WX 838 ; N uni291F ; G 2976
U 10528 ; WX 838 ; N uni2920 ; G 2977
U 10529 ; WX 838 ; N uni2921 ; G 2978
U 10530 ; WX 838 ; N uni2922 ; G 2979
U 10531 ; WX 838 ; N uni2923 ; G 2980
U 10532 ; WX 838 ; N uni2924 ; G 2981
U 10533 ; WX 838 ; N uni2925 ; G 2982
U 10534 ; WX 838 ; N uni2926 ; G 2983
U 10535 ; WX 838 ; N uni2927 ; G 2984
U 10536 ; WX 838 ; N uni2928 ; G 2985
U 10537 ; WX 838 ; N uni2929 ; G 2986
U 10538 ; WX 838 ; N uni292A ; G 2987
U 10539 ; WX 838 ; N uni292B ; G 2988
U 10540 ; WX 838 ; N uni292C ; G 2989
U 10541 ; WX 838 ; N uni292D ; G 2990
U 10542 ; WX 838 ; N uni292E ; G 2991
U 10543 ; WX 838 ; N uni292F ; G 2992
U 10544 ; WX 838 ; N uni2930 ; G 2993
U 10545 ; WX 838 ; N uni2931 ; G 2994
U 10546 ; WX 838 ; N uni2932 ; G 2995
U 10547 ; WX 838 ; N uni2933 ; G 2996
U 10548 ; WX 838 ; N uni2934 ; G 2997
U 10549 ; WX 838 ; N uni2935 ; G 2998
U 10550 ; WX 838 ; N uni2936 ; G 2999
U 10551 ; WX 838 ; N uni2937 ; G 3000
U 10552 ; WX 838 ; N uni2938 ; G 3001
U 10553 ; WX 838 ; N uni2939 ; G 3002
U 10554 ; WX 838 ; N uni293A ; G 3003
U 10555 ; WX 838 ; N uni293B ; G 3004
U 10556 ; WX 838 ; N uni293C ; G 3005
U 10557 ; WX 838 ; N uni293D ; G 3006
U 10558 ; WX 838 ; N uni293E ; G 3007
U 10559 ; WX 838 ; N uni293F ; G 3008
U 10560 ; WX 838 ; N uni2940 ; G 3009
U 10561 ; WX 838 ; N uni2941 ; G 3010
U 10562 ; WX 838 ; N uni2942 ; G 3011
U 10563 ; WX 838 ; N uni2943 ; G 3012
U 10564 ; WX 838 ; N uni2944 ; G 3013
U 10565 ; WX 838 ; N uni2945 ; G 3014
U 10566 ; WX 838 ; N uni2946 ; G 3015
U 10567 ; WX 838 ; N uni2947 ; G 3016
U 10568 ; WX 838 ; N uni2948 ; G 3017
U 10569 ; WX 838 ; N uni2949 ; G 3018
U 10570 ; WX 838 ; N uni294A ; G 3019
U 10571 ; WX 838 ; N uni294B ; G 3020
U 10572 ; WX 838 ; N uni294C ; G 3021
U 10573 ; WX 838 ; N uni294D ; G 3022
U 10574 ; WX 838 ; N uni294E ; G 3023
U 10575 ; WX 838 ; N uni294F ; G 3024
U 10576 ; WX 838 ; N uni2950 ; G 3025
U 10577 ; WX 838 ; N uni2951 ; G 3026
U 10578 ; WX 838 ; N uni2952 ; G 3027
U 10579 ; WX 838 ; N uni2953 ; G 3028
U 10580 ; WX 838 ; N uni2954 ; G 3029
U 10581 ; WX 838 ; N uni2955 ; G 3030
U 10582 ; WX 838 ; N uni2956 ; G 3031
U 10583 ; WX 838 ; N uni2957 ; G 3032
U 10584 ; WX 838 ; N uni2958 ; G 3033
U 10585 ; WX 838 ; N uni2959 ; G 3034
U 10586 ; WX 838 ; N uni295A ; G 3035
U 10587 ; WX 838 ; N uni295B ; G 3036
U 10588 ; WX 838 ; N uni295C ; G 3037
U 10589 ; WX 838 ; N uni295D ; G 3038
U 10590 ; WX 838 ; N uni295E ; G 3039
U 10591 ; WX 838 ; N uni295F ; G 3040
U 10592 ; WX 838 ; N uni2960 ; G 3041
U 10593 ; WX 838 ; N uni2961 ; G 3042
U 10594 ; WX 838 ; N uni2962 ; G 3043
U 10595 ; WX 838 ; N uni2963 ; G 3044
U 10596 ; WX 838 ; N uni2964 ; G 3045
U 10597 ; WX 838 ; N uni2965 ; G 3046
U 10598 ; WX 838 ; N uni2966 ; G 3047
U 10599 ; WX 838 ; N uni2967 ; G 3048
U 10600 ; WX 838 ; N uni2968 ; G 3049
U 10601 ; WX 838 ; N uni2969 ; G 3050
U 10602 ; WX 838 ; N uni296A ; G 3051
U 10603 ; WX 838 ; N uni296B ; G 3052
U 10604 ; WX 838 ; N uni296C ; G 3053
U 10605 ; WX 838 ; N uni296D ; G 3054
U 10606 ; WX 838 ; N uni296E ; G 3055
U 10607 ; WX 838 ; N uni296F ; G 3056
U 10608 ; WX 838 ; N uni2970 ; G 3057
U 10609 ; WX 838 ; N uni2971 ; G 3058
U 10610 ; WX 838 ; N uni2972 ; G 3059
U 10611 ; WX 838 ; N uni2973 ; G 3060
U 10612 ; WX 838 ; N uni2974 ; G 3061
U 10613 ; WX 838 ; N uni2975 ; G 3062
U 10614 ; WX 838 ; N uni2976 ; G 3063
U 10615 ; WX 981 ; N uni2977 ; G 3064
U 10616 ; WX 838 ; N uni2978 ; G 3065
U 10617 ; WX 838 ; N uni2979 ; G 3066
U 10618 ; WX 984 ; N uni297A ; G 3067
U 10619 ; WX 838 ; N uni297B ; G 3068
U 10620 ; WX 838 ; N uni297C ; G 3069
U 10621 ; WX 838 ; N uni297D ; G 3070
U 10622 ; WX 838 ; N uni297E ; G 3071
U 10623 ; WX 838 ; N uni297F ; G 3072
U 10731 ; WX 494 ; N uni29EB ; G 3073
U 10764 ; WX 1513 ; N uni2A0C ; G 3074
U 10765 ; WX 521 ; N uni2A0D ; G 3075
U 10766 ; WX 521 ; N uni2A0E ; G 3076
U 10799 ; WX 838 ; N uni2A2F ; G 3077
U 10858 ; WX 838 ; N uni2A6A ; G 3078
U 10859 ; WX 838 ; N uni2A6B ; G 3079
U 11008 ; WX 838 ; N uni2B00 ; G 3080
U 11009 ; WX 838 ; N uni2B01 ; G 3081
U 11010 ; WX 838 ; N uni2B02 ; G 3082
U 11011 ; WX 838 ; N uni2B03 ; G 3083
U 11012 ; WX 838 ; N uni2B04 ; G 3084
U 11013 ; WX 838 ; N uni2B05 ; G 3085
U 11014 ; WX 838 ; N uni2B06 ; G 3086
U 11015 ; WX 838 ; N uni2B07 ; G 3087
U 11016 ; WX 838 ; N uni2B08 ; G 3088
U 11017 ; WX 838 ; N uni2B09 ; G 3089
U 11018 ; WX 838 ; N uni2B0A ; G 3090
U 11019 ; WX 838 ; N uni2B0B ; G 3091
U 11020 ; WX 838 ; N uni2B0C ; G 3092
U 11021 ; WX 838 ; N uni2B0D ; G 3093
U 11022 ; WX 838 ; N uni2B0E ; G 3094
U 11023 ; WX 838 ; N uni2B0F ; G 3095
U 11024 ; WX 838 ; N uni2B10 ; G 3096
U 11025 ; WX 838 ; N uni2B11 ; G 3097
U 11026 ; WX 945 ; N uni2B12 ; G 3098
U 11027 ; WX 945 ; N uni2B13 ; G 3099
U 11028 ; WX 945 ; N uni2B14 ; G 3100
U 11029 ; WX 945 ; N uni2B15 ; G 3101
U 11030 ; WX 769 ; N uni2B16 ; G 3102
U 11031 ; WX 769 ; N uni2B17 ; G 3103
U 11032 ; WX 769 ; N uni2B18 ; G 3104
U 11033 ; WX 769 ; N uni2B19 ; G 3105
U 11034 ; WX 945 ; N uni2B1A ; G 3106
U 11360 ; WX 664 ; N uni2C60 ; G 3107
U 11361 ; WX 320 ; N uni2C61 ; G 3108
U 11363 ; WX 673 ; N uni2C63 ; G 3109
U 11364 ; WX 753 ; N uni2C64 ; G 3110
U 11367 ; WX 872 ; N uni2C67 ; G 3111
U 11368 ; WX 644 ; N uni2C68 ; G 3112
U 11369 ; WX 747 ; N uni2C69 ; G 3113
U 11370 ; WX 606 ; N uni2C6A ; G 3114
U 11371 ; WX 695 ; N uni2C6B ; G 3115
U 11372 ; WX 527 ; N uni2C6C ; G 3116
U 11373 ; WX 782 ; N uni2C6D ; G 3117
U 11374 ; WX 1024 ; N uni2C6E ; G 3118
U 11375 ; WX 722 ; N uni2C6F ; G 3119
U 11376 ; WX 782 ; N uni2C70 ; G 3120
U 11377 ; WX 663 ; N uni2C71 ; G 3121
U 11378 ; WX 1130 ; N uni2C72 ; G 3122
U 11379 ; WX 939 ; N uni2C73 ; G 3123
U 11381 ; WX 740 ; N uni2C75 ; G 3124
U 11382 ; WX 556 ; N uni2C76 ; G 3125
U 11383 ; WX 700 ; N uni2C77 ; G 3126
U 11385 ; WX 501 ; N uni2C79 ; G 3127
U 11386 ; WX 602 ; N uni2C7A ; G 3128
U 11387 ; WX 553 ; N uni2C7B ; G 3129
U 11388 ; WX 264 ; N uni2C7C ; G 3130
U 11389 ; WX 455 ; N uni2C7D ; G 3131
U 11390 ; WX 685 ; N uni2C7E ; G 3132
U 11391 ; WX 695 ; N uni2C7F ; G 3133
U 11520 ; WX 773 ; N uni2D00 ; G 3134
U 11521 ; WX 635 ; N uni2D01 ; G 3135
U 11522 ; WX 633 ; N uni2D02 ; G 3136
U 11523 ; WX 658 ; N uni2D03 ; G 3137
U 11524 ; WX 631 ; N uni2D04 ; G 3138
U 11525 ; WX 962 ; N uni2D05 ; G 3139
U 11526 ; WX 756 ; N uni2D06 ; G 3140
U 11527 ; WX 960 ; N uni2D07 ; G 3141
U 11528 ; WX 617 ; N uni2D08 ; G 3142
U 11529 ; WX 646 ; N uni2D09 ; G 3143
U 11530 ; WX 962 ; N uni2D0A ; G 3144
U 11531 ; WX 632 ; N uni2D0B ; G 3145
U 11532 ; WX 646 ; N uni2D0C ; G 3146
U 11533 ; WX 962 ; N uni2D0D ; G 3147
U 11534 ; WX 645 ; N uni2D0E ; G 3148
U 11535 ; WX 866 ; N uni2D0F ; G 3149
U 11536 ; WX 961 ; N uni2D10 ; G 3150
U 11537 ; WX 645 ; N uni2D11 ; G 3151
U 11538 ; WX 645 ; N uni2D12 ; G 3152
U 11539 ; WX 959 ; N uni2D13 ; G 3153
U 11540 ; WX 945 ; N uni2D14 ; G 3154
U 11541 ; WX 863 ; N uni2D15 ; G 3155
U 11542 ; WX 644 ; N uni2D16 ; G 3156
U 11543 ; WX 646 ; N uni2D17 ; G 3157
U 11544 ; WX 645 ; N uni2D18 ; G 3158
U 11545 ; WX 649 ; N uni2D19 ; G 3159
U 11546 ; WX 688 ; N uni2D1A ; G 3160
U 11547 ; WX 634 ; N uni2D1B ; G 3161
U 11548 ; WX 982 ; N uni2D1C ; G 3162
U 11549 ; WX 681 ; N uni2D1D ; G 3163
U 11550 ; WX 676 ; N uni2D1E ; G 3164
U 11551 ; WX 852 ; N uni2D1F ; G 3165
U 11552 ; WX 957 ; N uni2D20 ; G 3166
U 11553 ; WX 632 ; N uni2D21 ; G 3167
U 11554 ; WX 645 ; N uni2D22 ; G 3168
U 11555 ; WX 646 ; N uni2D23 ; G 3169
U 11556 ; WX 749 ; N uni2D24 ; G 3170
U 11557 ; WX 914 ; N uni2D25 ; G 3171
U 11800 ; WX 536 ; N uni2E18 ; G 3172
U 11807 ; WX 838 ; N uni2E1F ; G 3173
U 11810 ; WX 390 ; N uni2E22 ; G 3174
U 11811 ; WX 390 ; N uni2E23 ; G 3175
U 11812 ; WX 390 ; N uni2E24 ; G 3176
U 11813 ; WX 390 ; N uni2E25 ; G 3177
U 11822 ; WX 536 ; N uni2E2E ; G 3178
U 42564 ; WX 685 ; N uniA644 ; G 3179
U 42565 ; WX 513 ; N uniA645 ; G 3180
U 42566 ; WX 395 ; N uniA646 ; G 3181
U 42567 ; WX 392 ; N uniA647 ; G 3182
U 42576 ; WX 1104 ; N uniA650 ; G 3183
U 42577 ; WX 888 ; N uniA651 ; G 3184
U 42580 ; WX 1193 ; N uniA654 ; G 3185
U 42581 ; WX 871 ; N uniA655 ; G 3186
U 42582 ; WX 1140 ; N uniA656 ; G 3187
U 42583 ; WX 899 ; N uniA657 ; G 3188
U 42648 ; WX 1416 ; N uniA698 ; G 3189
U 42649 ; WX 999 ; N uniA699 ; G 3190
U 42760 ; WX 493 ; N uniA708 ; G 3191
U 42761 ; WX 493 ; N uniA709 ; G 3192
U 42762 ; WX 493 ; N uniA70A ; G 3193
U 42763 ; WX 493 ; N uniA70B ; G 3194
U 42764 ; WX 493 ; N uniA70C ; G 3195
U 42765 ; WX 493 ; N uniA70D ; G 3196
U 42766 ; WX 493 ; N uniA70E ; G 3197
U 42767 ; WX 493 ; N uniA70F ; G 3198
U 42768 ; WX 493 ; N uniA710 ; G 3199
U 42769 ; WX 493 ; N uniA711 ; G 3200
U 42770 ; WX 493 ; N uniA712 ; G 3201
U 42771 ; WX 493 ; N uniA713 ; G 3202
U 42772 ; WX 493 ; N uniA714 ; G 3203
U 42773 ; WX 493 ; N uniA715 ; G 3204
U 42774 ; WX 493 ; N uniA716 ; G 3205
U 42779 ; WX 369 ; N uniA71B ; G 3206
U 42780 ; WX 369 ; N uniA71C ; G 3207
U 42781 ; WX 253 ; N uniA71D ; G 3208
U 42782 ; WX 253 ; N uniA71E ; G 3209
U 42783 ; WX 253 ; N uniA71F ; G 3210
U 42790 ; WX 872 ; N uniA726 ; G 3211
U 42791 ; WX 634 ; N uniA727 ; G 3212
U 42792 ; WX 843 ; N uniA728 ; G 3213
U 42793 ; WX 754 ; N uniA729 ; G 3214
U 42794 ; WX 612 ; N uniA72A ; G 3215
U 42795 ; WX 560 ; N uniA72B ; G 3216
U 42796 ; WX 548 ; N uniA72C ; G 3217
U 42797 ; WX 531 ; N uniA72D ; G 3218
U 42798 ; WX 629 ; N uniA72E ; G 3219
U 42799 ; WX 610 ; N uniA72F ; G 3220
U 42800 ; WX 514 ; N uniA730 ; G 3221
U 42801 ; WX 513 ; N uniA731 ; G 3222
U 42802 ; WX 1195 ; N uniA732 ; G 3223
U 42803 ; WX 944 ; N uniA733 ; G 3224
U 42804 ; WX 1226 ; N uniA734 ; G 3225
U 42805 ; WX 950 ; N uniA735 ; G 3226
U 42806 ; WX 1149 ; N uniA736 ; G 3227
U 42807 ; WX 934 ; N uniA737 ; G 3228
U 42808 ; WX 968 ; N uniA738 ; G 3229
U 42809 ; WX 784 ; N uniA739 ; G 3230
U 42810 ; WX 968 ; N uniA73A ; G 3231
U 42811 ; WX 784 ; N uniA73B ; G 3232
U 42812 ; WX 962 ; N uniA73C ; G 3233
U 42813 ; WX 824 ; N uniA73D ; G 3234
U 42814 ; WX 765 ; N uniA73E ; G 3235
U 42815 ; WX 560 ; N uniA73F ; G 3236
U 42816 ; WX 774 ; N uniA740 ; G 3237
U 42817 ; WX 625 ; N uniA741 ; G 3238
U 42822 ; WX 787 ; N uniA746 ; G 3239
U 42823 ; WX 434 ; N uniA747 ; G 3240
U 42826 ; WX 932 ; N uniA74A ; G 3241
U 42827 ; WX 711 ; N uniA74B ; G 3242
U 42830 ; WX 1416 ; N uniA74E ; G 3243
U 42831 ; WX 999 ; N uniA74F ; G 3244
U 42856 ; WX 707 ; N uniA768 ; G 3245
U 42857 ; WX 610 ; N uniA769 ; G 3246
U 42875 ; WX 612 ; N uniA77B ; G 3247
U 42876 ; WX 478 ; N uniA77C ; G 3248
U 42880 ; WX 664 ; N uniA780 ; G 3249
U 42881 ; WX 320 ; N uniA781 ; G 3250
U 42882 ; WX 843 ; N uniA782 ; G 3251
U 42883 ; WX 644 ; N uniA783 ; G 3252
U 42884 ; WX 612 ; N uniA784 ; G 3253
U 42885 ; WX 478 ; N uniA785 ; G 3254
U 42886 ; WX 765 ; N uniA786 ; G 3255
U 42887 ; WX 560 ; N uniA787 ; G 3256
U 42891 ; WX 402 ; N uniA78B ; G 3257
U 42892 ; WX 275 ; N uniA78C ; G 3258
U 42893 ; WX 773 ; N uniA78D ; G 3259
U 42896 ; WX 875 ; N uniA790 ; G 3260
U 42897 ; WX 644 ; N uniA791 ; G 3261
U 42922 ; WX 872 ; N uniA7AA ; G 3262
U 43000 ; WX 549 ; N uniA7F8 ; G 3263
U 43001 ; WX 623 ; N uniA7F9 ; G 3264
U 43002 ; WX 957 ; N uniA7FA ; G 3265
U 43003 ; WX 694 ; N uniA7FB ; G 3266
U 43004 ; WX 673 ; N uniA7FC ; G 3267
U 43005 ; WX 1024 ; N uniA7FD ; G 3268
U 43006 ; WX 395 ; N uniA7FE ; G 3269
U 43007 ; WX 1201 ; N uniA7FF ; G 3270
U 62464 ; WX 654 ; N uniF400 ; G 3271
U 62465 ; WX 665 ; N uniF401 ; G 3272
U 62466 ; WX 714 ; N uniF402 ; G 3273
U 62467 ; WX 947 ; N uniF403 ; G 3274
U 62468 ; WX 665 ; N uniF404 ; G 3275
U 62469 ; WX 659 ; N uniF405 ; G 3276
U 62470 ; WX 725 ; N uniF406 ; G 3277
U 62471 ; WX 986 ; N uniF407 ; G 3278
U 62472 ; WX 665 ; N uniF408 ; G 3279
U 62473 ; WX 665 ; N uniF409 ; G 3280
U 62474 ; WX 1257 ; N uniF40A ; G 3281
U 62475 ; WX 683 ; N uniF40B ; G 3282
U 62476 ; WX 682 ; N uniF40C ; G 3283
U 62477 ; WX 953 ; N uniF40D ; G 3284
U 62478 ; WX 665 ; N uniF40E ; G 3285
U 62479 ; WX 682 ; N uniF40F ; G 3286
U 62480 ; WX 999 ; N uniF410 ; G 3287
U 62481 ; WX 746 ; N uniF411 ; G 3288
U 62482 ; WX 798 ; N uniF412 ; G 3289
U 62483 ; WX 748 ; N uniF413 ; G 3290
U 62484 ; WX 944 ; N uniF414 ; G 3291
U 62485 ; WX 681 ; N uniF415 ; G 3292
U 62486 ; WX 936 ; N uniF416 ; G 3293
U 62487 ; WX 680 ; N uniF417 ; G 3294
U 62488 ; WX 688 ; N uniF418 ; G 3295
U 62489 ; WX 682 ; N uniF419 ; G 3296
U 62490 ; WX 729 ; N uniF41A ; G 3297
U 62491 ; WX 682 ; N uniF41B ; G 3298
U 62492 ; WX 688 ; N uniF41C ; G 3299
U 62493 ; WX 666 ; N uniF41D ; G 3300
U 62494 ; WX 729 ; N uniF41E ; G 3301
U 62495 ; WX 884 ; N uniF41F ; G 3302
U 62496 ; WX 665 ; N uniF420 ; G 3303
U 62497 ; WX 706 ; N uniF421 ; G 3304
U 62498 ; WX 666 ; N uniF422 ; G 3305
U 62499 ; WX 665 ; N uniF423 ; G 3306
U 62500 ; WX 665 ; N uniF424 ; G 3307
U 62501 ; WX 722 ; N uniF425 ; G 3308
U 62502 ; WX 961 ; N uniF426 ; G 3309
U 62504 ; WX 904 ; N uniF428 ; G 3310
U 63173 ; WX 602 ; N uniF6C5 ; G 3311
U 63185 ; WX 500 ; N cyrBreve ; G 3312
U 63188 ; WX 500 ; N cyrbreve ; G 3313
U 64256 ; WX 710 ; N uniFB00 ; G 3314
U 64257 ; WX 667 ; N fi ; G 3315
U 64258 ; WX 667 ; N fl ; G 3316
U 64259 ; WX 1028 ; N uniFB03 ; G 3317
U 64260 ; WX 1030 ; N uniFB04 ; G 3318
U 64261 ; WX 771 ; N uniFB05 ; G 3319
U 64262 ; WX 933 ; N uniFB06 ; G 3320
U 65024 ; WX 0 ; N uniFE00 ; G 3321
U 65025 ; WX 0 ; N uniFE01 ; G 3322
U 65026 ; WX 0 ; N uniFE02 ; G 3323
U 65027 ; WX 0 ; N uniFE03 ; G 3324
U 65028 ; WX 0 ; N uniFE04 ; G 3325
U 65029 ; WX 0 ; N uniFE05 ; G 3326
U 65030 ; WX 0 ; N uniFE06 ; G 3327
U 65031 ; WX 0 ; N uniFE07 ; G 3328
U 65032 ; WX 0 ; N uniFE08 ; G 3329
U 65033 ; WX 0 ; N uniFE09 ; G 3330
U 65034 ; WX 0 ; N uniFE0A ; G 3331
U 65035 ; WX 0 ; N uniFE0B ; G 3332
U 65036 ; WX 0 ; N uniFE0C ; G 3333
U 65037 ; WX 0 ; N uniFE0D ; G 3334
U 65038 ; WX 0 ; N uniFE0E ; G 3335
U 65039 ; WX 0 ; N uniFE0F ; G 3336
U 65529 ; WX 0 ; N uniFFF9 ; G 3337
U 65530 ; WX 0 ; N uniFFFA ; G 3338
U 65531 ; WX 0 ; N uniFFFB ; G 3339
U 65532 ; WX 0 ; N uniFFFC ; G 3340
U 65533 ; WX 1025 ; N uniFFFD ; G 3341
EndCharMetrics
StartKernData 
StartKernPairs 1367

KPX dollar seven -112
KPX dollar nine -102
KPX dollar colon -83
KPX dollar less -83
KPX dollar I -36
KPX dollar W -36
KPX dollar Y -83
KPX dollar Z -92
KPX dollar backslash -83
KPX dollar questiondown -83
KPX dollar Aacute -83
KPX dollar Hcircumflex -112
KPX dollar hcircumflex -36
KPX dollar Hbar -112
KPX dollar hbar -36
KPX dollar Kcommaaccent -83
KPX dollar kcommaaccent -92
KPX dollar kgreenlandic -83
KPX dollar Lacute -83
KPX dollar lacute -83
KPX dollar uni01DC -112
KPX dollar uni01DD -36
KPX dollar uni01F4 -83

KPX percent ampersand 38
KPX percent asterisk 38
KPX percent two 38
KPX percent less -36
KPX percent Egrave 38
KPX percent Ecircumflex 38
KPX percent Igrave 38
KPX percent Icircumflex 38
KPX percent Thorn 38
KPX percent agrave 38
KPX percent acircumflex 38
KPX percent adieresis 38
KPX percent Dcaron 38
KPX percent Dcroat 38
KPX percent Emacron 38
KPX percent Ebreve 38
KPX percent kgreenlandic -36
KPX percent lacute -36
KPX percent uni01AC 38
KPX percent uni01AE 38
KPX percent uni01F0 38
KPX percent uni01F4 -36


KPX quotesingle nine -36


KPX parenright dollar -178
KPX parenright D -139
KPX parenright H -112
KPX parenright R -112
KPX parenright cent -139
KPX parenright sterling -139
KPX parenright currency -139
KPX parenright yen -139
KPX parenright brokenbar -139
KPX parenright section -139
KPX parenright dieresis -139
KPX parenright ordfeminine -112
KPX parenright guillemotleft -112
KPX parenright logicalnot -112
KPX parenright sfthyphen -112
KPX parenright acute -112
KPX parenright mu -112
KPX parenright paragraph -112
KPX parenright periodcentered -112
KPX parenright cedilla -112
KPX parenright ordmasculine -112
KPX parenright Acircumflex -178
KPX parenright Atilde -139
KPX parenright Adieresis -178
KPX parenright Aring -139
KPX parenright AE -178
KPX parenright Ccedilla -139
KPX parenright Otilde -112
KPX parenright multiply -112
KPX parenright Ugrave -112
KPX parenright Ucircumflex -112
KPX parenright Yacute -112
KPX parenright dcaron -112
KPX parenright dmacron -112
KPX parenright emacron -112
KPX parenright ebreve -112
KPX parenright uni01A5 -139
KPX parenright uni01AD -112
KPX parenright Uhorn -112
KPX parenright uni01F1 -112

KPX asterisk less -36
KPX asterisk lacute -36


KPX period dollar -83
KPX period ampersand -55
KPX period two -55
KPX period eight -73
KPX period colon -73
KPX period less -55
KPX period H -55
KPX period R -55
KPX period X -45
KPX period backslash -131
KPX period ordfeminine -55
KPX period guillemotleft -55
KPX period logicalnot -55
KPX period sfthyphen -55
KPX period acute -55
KPX period mu -55
KPX period paragraph -55
KPX period periodcentered -55
KPX period cedilla -55
KPX period ordmasculine -36
KPX period guillemotright -45
KPX period onequarter -45
KPX period onehalf -45
KPX period threequarters -45
KPX period questiondown -131
KPX period Aacute -131
KPX period Egrave -55
KPX period Icircumflex -55
KPX period Yacute -55
KPX period Ebreve -55
KPX period ebreve -55
KPX period Idot -73
KPX period dotlessi -45
KPX period lacute -55

KPX slash seven -167
KPX slash eight -112
KPX slash nine -243
KPX slash colon -178
KPX slash less -131
KPX slash backslash -36
KPX slash questiondown -36
KPX slash Aacute -36
KPX slash Hbar -167
KPX slash Idot -112
KPX slash lacute -131


KPX two nine -36
KPX two semicolon -36

KPX three dollar -188
KPX three eight -36
KPX three D -92
KPX three H -92
KPX three R -83
KPX three V -55
KPX three cent -92
KPX three sterling -92
KPX three currency -92
KPX three yen -92
KPX three brokenbar -92
KPX three section -92
KPX three dieresis -92
KPX three ordfeminine -92
KPX three guillemotleft -92
KPX three logicalnot -92
KPX three sfthyphen -92
KPX three acute -83
KPX three mu -83
KPX three paragraph -83
KPX three periodcentered -83
KPX three cedilla -83
KPX three ordmasculine -83
KPX three Yacute -92
KPX three ebreve -83
KPX three gdotaccent -55
KPX three gcommaaccent -55
KPX three Idot -36


KPX five seven -36
KPX five nine -73
KPX five colon -45
KPX five less -63
KPX five D 47
KPX five backslash -36
KPX five cent 47
KPX five sterling 47
KPX five currency 47
KPX five yen 47
KPX five brokenbar 47
KPX five section 47
KPX five dieresis 47
KPX five ordmasculine 38
KPX five questiondown -36
KPX five Aacute -36
KPX five Hbar -36
KPX five lacute -63

KPX six six -36
KPX six Gdotaccent -36
KPX six Gcommaaccent -36

KPX seven dollar -112
KPX seven seven 38
KPX seven D -159
KPX seven F -159
KPX seven H -159
KPX seven R -159
KPX seven V -149
KPX seven Z -73
KPX seven cent -59
KPX seven sterling -159
KPX seven currency -59
KPX seven yen -59
KPX seven brokenbar -59
KPX seven section -59
KPX seven dieresis -159
KPX seven copyright -159
KPX seven ordfeminine -99
KPX seven guillemotleft -159
KPX seven logicalnot -99
KPX seven sfthyphen -99
KPX seven acute -79
KPX seven mu -159
KPX seven paragraph -79
KPX seven periodcentered -79
KPX seven cedilla -79
KPX seven ordmasculine -159
KPX seven Eacute -159
KPX seven Idieresis -159
KPX seven Yacute -159
KPX seven ebreve -159
KPX seven gdotaccent -149
KPX seven gcommaaccent -149
KPX seven Hbar 38

KPX eight dollar -63
KPX eight hyphen -55

KPX nine dollar -139
KPX nine two -36
KPX nine D -188
KPX nine H -188
KPX nine L -36
KPX nine R -188
KPX nine X -131
KPX nine backslash -83
KPX nine cent -188
KPX nine sterling -188
KPX nine currency -188
KPX nine yen -188
KPX nine brokenbar -188
KPX nine section -188
KPX nine dieresis -188
KPX nine ordfeminine -188
KPX nine guillemotleft -188
KPX nine logicalnot -188
KPX nine sfthyphen -188
KPX nine acute -188
KPX nine mu -188
KPX nine paragraph -188
KPX nine periodcentered -188
KPX nine cedilla -188
KPX nine ordmasculine -188
KPX nine guillemotright -131
KPX nine onequarter -131
KPX nine onehalf -131
KPX nine threequarters -131
KPX nine questiondown -83
KPX nine Aacute -83
KPX nine Yacute -188
KPX nine Ebreve -36
KPX nine ebreve -188
KPX nine dotlessi -131

KPX colon dollar -102
KPX colon D -178
KPX colon H -167
KPX colon L -36
KPX colon R -139
KPX colon U -92
KPX colon X -83
KPX colon backslash -45
KPX colon cent -178
KPX colon sterling -178
KPX colon currency -178
KPX colon yen -178
KPX colon brokenbar -178
KPX colon section -178
KPX colon dieresis -139
KPX colon ordfeminine -167
KPX colon guillemotleft -167
KPX colon logicalnot -167
KPX colon sfthyphen -167
KPX colon acute -139
KPX colon mu -139
KPX colon paragraph -139
KPX colon periodcentered -139
KPX colon cedilla -139
KPX colon ordmasculine -139
KPX colon guillemotright -83
KPX colon onequarter -83
KPX colon onehalf -83
KPX colon threequarters -83
KPX colon questiondown -45
KPX colon Aacute -45
KPX colon Yacute -167
KPX colon ebreve -139
KPX colon edotaccent -92
KPX colon ecaron -92
KPX colon dotlessi -83

KPX semicolon dollar -73
KPX semicolon ampersand -36
KPX semicolon two -36
KPX semicolon Egrave -36
KPX semicolon Icircumflex -36
KPX semicolon Ebreve -36

KPX less dollar -159
KPX less ampersand -36
KPX less D -159
KPX less H -178
KPX less L -36
KPX less R -178
KPX less X -178
KPX less cent -159
KPX less sterling -159
KPX less currency -159
KPX less yen -159
KPX less brokenbar -159
KPX less section -159
KPX less dieresis -196
KPX less ordfeminine -178
KPX less guillemotleft -178
KPX less logicalnot -178
KPX less sfthyphen -178
KPX less acute -178
KPX less mu -178
KPX less paragraph -178
KPX less periodcentered -178
KPX less cedilla -178
KPX less ordmasculine -178
KPX less guillemotright -178
KPX less onequarter -178
KPX less onehalf -178
KPX less threequarters -178
KPX less Egrave -36
KPX less Icircumflex -36
KPX less Yacute -178
KPX less ebreve -215
KPX less dotlessi -178





















KPX Acircumflex seven -112
KPX Acircumflex nine -102
KPX Acircumflex colon -83
KPX Acircumflex less -83
KPX Acircumflex I -36
KPX Acircumflex W -36
KPX Acircumflex Y -83
KPX Acircumflex Z -92
KPX Acircumflex backslash -83
KPX Acircumflex questiondown -83
KPX Acircumflex Aacute -83
KPX Acircumflex Hcircumflex -112
KPX Acircumflex hcircumflex -36
KPX Acircumflex Hbar -112
KPX Acircumflex hbar -36
KPX Acircumflex Kcommaaccent -83
KPX Acircumflex kcommaaccent -92
KPX Acircumflex kgreenlandic -83
KPX Acircumflex Lacute -83
KPX Acircumflex lacute -83
KPX Acircumflex uni01DC -112
KPX Acircumflex uni01DD -36
KPX Acircumflex uni01F4 -83

KPX Adieresis seven -112
KPX Adieresis nine -102
KPX Adieresis colon -83
KPX Adieresis less -83
KPX Adieresis I -36
KPX Adieresis W -36
KPX Adieresis Y -83
KPX Adieresis Z -92
KPX Adieresis backslash -83
KPX Adieresis questiondown -83
KPX Adieresis Aacute -83
KPX Adieresis Hcircumflex -112
KPX Adieresis hcircumflex -36
KPX Adieresis Hbar -112
KPX Adieresis hbar -36
KPX Adieresis Kcommaaccent -83
KPX Adieresis kcommaaccent -92
KPX Adieresis kgreenlandic -83
KPX Adieresis Lacute -83
KPX Adieresis lacute -83
KPX Adieresis uni01DC -112
KPX Adieresis uni01DD -36
KPX Adieresis uni01F4 -83

KPX AE seven -112
KPX AE nine -102
KPX AE colon -83
KPX AE less -83
KPX AE I -36
KPX AE W -36
KPX AE Y -83
KPX AE Z -92
KPX AE backslash -83
KPX AE questiondown -83
KPX AE Aacute -83
KPX AE Hcircumflex -112
KPX AE hcircumflex -36
KPX AE Hbar -112
KPX AE hbar -36
KPX AE Kcommaaccent -83
KPX AE kcommaaccent -92
KPX AE kgreenlandic -83
KPX AE Lacute -83
KPX AE lacute -83
KPX AE uni01DC -112
KPX AE uni01DD -36
KPX AE uni01F4 -83





KPX Eth nine -36

KPX Ograve nine -36


KPX agrave less -36
KPX agrave lacute -36

KPX ucircumflex seven -167
KPX ucircumflex eight -112
KPX ucircumflex nine -243
KPX ucircumflex colon -178
KPX ucircumflex less -131
KPX ucircumflex backslash -36
KPX ucircumflex questiondown -36
KPX ucircumflex Aacute -36
KPX ucircumflex Hbar -167
KPX ucircumflex Idot -112
KPX ucircumflex lacute -131

KPX ydieresis seven -167
KPX ydieresis eight -112
KPX ydieresis nine -243
KPX ydieresis colon -178
KPX ydieresis less -131
KPX ydieresis backslash -36
KPX ydieresis questiondown -36
KPX ydieresis Aacute -36
KPX ydieresis Hbar -167
KPX ydieresis Idot -112
KPX ydieresis lacute -131

KPX Abreve O -227

KPX abreve seven -167
KPX abreve eight -36
KPX abreve nine -243
KPX abreve colon -178
KPX abreve less -206
KPX abreve backslash -36
KPX abreve questiondown -36
KPX abreve Aacute -36
KPX abreve Hbar -167
KPX abreve Idot -36
KPX abreve lacute -206



KPX Edotaccent seven -36
KPX Edotaccent nine -73
KPX Edotaccent colon -45
KPX Edotaccent less -63
KPX Edotaccent D 47
KPX Edotaccent backslash -36
KPX Edotaccent cent 47
KPX Edotaccent sterling 47
KPX Edotaccent currency 47
KPX Edotaccent yen 47
KPX Edotaccent brokenbar 47
KPX Edotaccent section 47
KPX Edotaccent dieresis 47
KPX Edotaccent ordmasculine 38
KPX Edotaccent questiondown -36
KPX Edotaccent Aacute -36
KPX Edotaccent Hbar -36
KPX Edotaccent lacute -63


KPX Ecaron seven -36
KPX Ecaron nine -73
KPX Ecaron colon -45
KPX Ecaron less -63
KPX Ecaron D 47
KPX Ecaron backslash -36
KPX Ecaron cent 47
KPX Ecaron sterling 47
KPX Ecaron currency 47
KPX Ecaron yen 47
KPX Ecaron brokenbar 47
KPX Ecaron section 47
KPX Ecaron dieresis 47
KPX Ecaron ordmasculine 38
KPX Ecaron questiondown -36
KPX Ecaron Aacute -36
KPX Ecaron Hbar -36
KPX Ecaron lacute -63


KPX Gdotaccent six -36
KPX Gdotaccent Gdotaccent -36
KPX Gdotaccent Gcommaaccent -36

KPX Gcommaaccent six -36
KPX Gcommaaccent Gdotaccent -36
KPX Gcommaaccent Gcommaaccent -36

KPX Hbar dollar -112
KPX Hbar seven 38
KPX Hbar D -159
KPX Hbar F -159
KPX Hbar H -159
KPX Hbar R -159
KPX Hbar V -149
KPX Hbar Z -73
KPX Hbar cent -159
KPX Hbar sterling -159
KPX Hbar currency -159
KPX Hbar yen -159
KPX Hbar brokenbar -159
KPX Hbar section -159
KPX Hbar dieresis -159
KPX Hbar copyright -159
KPX Hbar ordfeminine -159
KPX Hbar guillemotleft -159
KPX Hbar logicalnot -159
KPX Hbar sfthyphen -159
KPX Hbar acute -159
KPX Hbar mu -159
KPX Hbar paragraph -159
KPX Hbar periodcentered -159
KPX Hbar cedilla -159
KPX Hbar ordmasculine -159
KPX Hbar Eacute -159
KPX Hbar Idieresis -159
KPX Hbar Yacute -159
KPX Hbar ebreve -159
KPX Hbar gdotaccent -149
KPX Hbar gcommaaccent -149
KPX Hbar Hbar 38

KPX Idot dollar -63
KPX Idot hyphen -55

KPX kcommaaccent D 110
KPX kcommaaccent F 85
KPX kcommaaccent G 97
KPX kcommaaccent H 86
KPX kcommaaccent I 220
KPX kcommaaccent J 97
KPX kcommaaccent L 220
KPX kcommaaccent M 218
KPX kcommaaccent P 125
KPX kcommaaccent Q 125
KPX kcommaaccent R 85
KPX kcommaaccent S 140
KPX kcommaaccent T 97
KPX kcommaaccent U 125
KPX kcommaaccent V 155
KPX kcommaaccent W 235
KPX kcommaaccent X 144
KPX kcommaaccent Y 205
KPX kcommaaccent Z 166
KPX kcommaaccent bracketleft 174
KPX kcommaaccent backslash 205
KPX kcommaaccent bracketright 179
KPX kcommaaccent kcommaaccent 261

KPX lacute dollar -159
KPX lacute ampersand -36
KPX lacute D -159
KPX lacute H -178
KPX lacute L -36
KPX lacute R -178
KPX lacute X -178
KPX lacute cent -159
KPX lacute sterling -159
KPX lacute currency -159
KPX lacute yen -159
KPX lacute brokenbar -159
KPX lacute section -159
KPX lacute dieresis -196
KPX lacute ordfeminine -178
KPX lacute guillemotleft -178
KPX lacute logicalnot -178
KPX lacute sfthyphen -178
KPX lacute acute -178
KPX lacute mu -178
KPX lacute paragraph -178
KPX lacute periodcentered -178
KPX lacute cedilla -178
KPX lacute ordmasculine -178
KPX lacute guillemotright -178
KPX lacute onequarter -178
KPX lacute onehalf -178
KPX lacute threequarters -178
KPX lacute Egrave -36
KPX lacute Icircumflex -36
KPX lacute Yacute -178
KPX lacute ebreve -215
KPX lacute dotlessi -178


KPX uni027D dollar -264
KPX uni027D hyphen 47
EndKernPairs
EndKernData
EndFontMetrics
StartFontMetrics 4.1
Comment Copyright (c) 1985, 1987, 1989, 1990, 1997 Adobe Systems Incorporated.  All Rights Reserved.
Comment Creation Date: Thu May  1 12:43:52 1997
Comment UniqueID 43052
Comment VMusage 37169 48194
FontName Helvetica-Bold
FullName Helvetica Bold
FamilyName Helvetica
Weight Bold
ItalicAngle 0
IsFixedPitch false
CharacterSet ExtendedRoman
FontBBox -170 -228 1003 962
UnderlinePosition -100
UnderlineThickness 50
Version 002.000
Notice Copyright (c) 1985, 1987, 1989, 1990, 1997 Adobe Systems Incorporated.  All Rights Reserved.Helvetica is a trademark of Linotype-Hell AG and/or its subsidiaries.
EncodingScheme WinAnsiEncoding
CapHeight 718
XHeight 532
Ascender 718
Descender -207
StdHW 118
StdVW 140
StartCharMetrics 317
C 32 ; WX 278 ; N space ; B 0 0 0 0 ;
C 160 ; WX 278 ; N space ; B 0 0 0 0 ;
C 33 ; WX 333 ; N exclam ; B 90 0 244 718 ;
C 34 ; WX 474 ; N quotedbl ; B 98 447 376 718 ;
C 35 ; WX 556 ; N numbersign ; B 18 0 538 698 ;
C 36 ; WX 556 ; N dollar ; B 30 -115 523 775 ;
C 37 ; WX 889 ; N percent ; B 28 -19 861 710 ;
C 38 ; WX 722 ; N ampersand ; B 54 -19 701 718 ;
C 146 ; WX 278 ; N quoteright ; B 69 445 209 718 ;
C 40 ; WX 333 ; N parenleft ; B 35 -208 314 734 ;
C 41 ; WX 333 ; N parenright ; B 19 -208 298 734 ;
C 42 ; WX 389 ; N asterisk ; B 27 387 362 718 ;
C 43 ; WX 584 ; N plus ; B 40 0 544 506 ;
C 44 ; WX 278 ; N comma ; B 64 -168 214 146 ;
C 45 ; WX 333 ; N hyphen ; B 27 215 306 345 ;
C 173 ; WX 333 ; N hyphen ; B 44 232 289 322 ;
C 46 ; WX 278 ; N period ; B 64 0 214 146 ;
C 47 ; WX 278 ; N slash ; B -33 -19 311 737 ;
C 48 ; WX 556 ; N zero ; B 32 -19 524 710 ;
C 49 ; WX 556 ; N one ; B 69 0 378 710 ;
C 50 ; WX 556 ; N two ; B 26 0 511 710 ;
C 51 ; WX 556 ; N three ; B 27 -19 516 710 ;
C 52 ; WX 556 ; N four ; B 27 0 526 710 ;
C 53 ; WX 556 ; N five ; B 27 -19 516 698 ;
C 54 ; WX 556 ; N six ; B 31 -19 520 710 ;
C 55 ; WX 556 ; N seven ; B 25 0 528 698 ;
C 56 ; WX 556 ; N eight ; B 32 -19 524 710 ;
C 57 ; WX 556 ; N nine ; B 30 -19 522 710 ;
C 58 ; WX 333 ; N colon ; B 92 0 242 512 ;
C 59 ; WX 333 ; N semicolon ; B 92 -168 242 512 ;
C 60 ; WX 584 ; N less ; B 38 -8 546 514 ;
C 61 ; WX 584 ; N equal ; B 40 87 544 419 ;
C 62 ; WX 584 ; N greater ; B 38 -8 546 514 ;
C 63 ; WX 611 ; N question ; B 60 0 556 727 ;
C 64 ; WX 975 ; N at ; B 118 -19 856 737 ;
C 65 ; WX 722 ; N A ; B 20 0 702 718 ;
C 66 ; WX 722 ; N B ; B 76 0 669 718 ;
C 67 ; WX 722 ; N C ; B 44 -19 684 737 ;
C 68 ; WX 722 ; N D ; B 76 0 685 718 ;
C 69 ; WX 667 ; N E ; B 76 0 621 718 ;
C 70 ; WX 611 ; N F ; B 76 0 587 718 ;
C 71 ; WX 778 ; N G ; B 44 -19 713 737 ;
C 72 ; WX 722 ; N H ; B 71 0 651 718 ;
C 73 ; WX 278 ; N I ; B 64 0 214 718 ;
C 74 ; WX 556 ; N J ; B 22 -18 484 718 ;
C 75 ; WX 722 ; N K ; B 87 0 722 718 ;
C 76 ; WX 611 ; N L ; B 76 0 583 718 ;
C 77 ; WX 833 ; N M ; B 69 0 765 718 ;
C 78 ; WX 722 ; N N ; B 69 0 654 718 ;
C 79 ; WX 778 ; N O ; B 44 -19 734 737 ;
C 80 ; WX 667 ; N P ; B 76 0 627 718 ;
C 81 ; WX 778 ; N Q ; B 44 -52 737 737 ;
C 82 ; WX 722 ; N R ; B 76 0 677 718 ;
C 83 ; WX 667 ; N S ; B 39 -19 629 737 ;
C 84 ; WX 611 ; N T ; B 14 0 598 718 ;
C 85 ; WX 722 ; N U ; B 72 -19 651 718 ;
C 86 ; WX 667 ; N V ; B 19 0 648 718 ;
C 87 ; WX 944 ; N W ; B 16 0 929 718 ;
C 88 ; WX 667 ; N X ; B 14 0 653 718 ;
C 89 ; WX 667 ; N Y ; B 15 0 653 718 ;
C 90 ; WX 611 ; N Z ; B 25 0 586 718 ;
C 91 ; WX 333 ; N bracketleft ; B 63 -196 309 722 ;
C 92 ; WX 278 ; N backslash ; B -33 -19 311 737 ;
C 93 ; WX 333 ; N bracketright ; B 24 -196 270 722 ;
C 94 ; WX 584 ; N asciicircum ; B 62 323 522 698 ;
C 95 ; WX 556 ; N underscore ; B 0 -125 556 -75 ;
C 145 ; WX 278 ; N quoteleft ; B 69 454 209 727 ;
C 97 ; WX 556 ; N a ; B 29 -14 527 546 ;
C 98 ; WX 611 ; N b ; B 61 -14 578 718 ;
C 99 ; WX 556 ; N c ; B 34 -14 524 546 ;
C 100 ; WX 611 ; N d ; B 34 -14 551 718 ;
C 101 ; WX 556 ; N e ; B 23 -14 528 546 ;
C 102 ; WX 333 ; N f ; B 10 0 318 727 ; L i fi ; L l fl ;
C 103 ; WX 611 ; N g ; B 40 -217 553 546 ;
C 104 ; WX 611 ; N h ; B 65 0 546 718 ;
C 105 ; WX 278 ; N i ; B 69 0 209 725 ;
C 106 ; WX 278 ; N j ; B 3 -214 209 725 ;
C 107 ; WX 556 ; N k ; B 69 0 562 718 ;
C 108 ; WX 278 ; N l ; B 69 0 209 718 ;
C 109 ; WX 889 ; N m ; B 64 0 826 546 ;
C 110 ; WX 611 ; N n ; B 65 0 546 546 ;
C 111 ; WX 611 ; N o ; B 34 -14 578 546 ;
C 112 ; WX 611 ; N p ; B 62 -207 578 546 ;
C 113 ; WX 611 ; N q ; B 34 -207 552 546 ;
C 114 ; WX 389 ; N r ; B 64 0 373 546 ;
C 115 ; WX 556 ; N s ; B 30 -14 519 546 ;
C 116 ; WX 333 ; N t ; B 10 -6 309 676 ;
C 117 ; WX 611 ; N u ; B 66 -14 545 532 ;
C 118 ; WX 556 ; N v ; B 13 0 543 532 ;
C 119 ; WX 778 ; N w ; B 10 0 769 532 ;
C 120 ; WX 556 ; N x ; B 15 0 541 532 ;
C 121 ; WX 556 ; N y ; B 10 -214 539 532 ;
C 122 ; WX 500 ; N z ; B 20 0 480 532 ;
C 123 ; WX 389 ; N braceleft ; B 48 -196 365 722 ;
C 124 ; WX 280 ; N bar ; B 84 -225 196 775 ;
C 125 ; WX 389 ; N braceright ; B 24 -196 341 722 ;
C 126 ; WX 584 ; N asciitilde ; B 61 163 523 343 ;
C 161 ; WX 333 ; N exclamdown ; B 90 -186 244 532 ;
C 162 ; WX 556 ; N cent ; B 34 -118 524 628 ;
C 163 ; WX 556 ; N sterling ; B 28 -16 541 718 ;
C -1 ; WX 167 ; N fraction ; B -170 -19 336 710 ;
C 165 ; WX 556 ; N yen ; B -9 0 565 698 ;
C 131 ; WX 556 ; N florin ; B -10 -210 516 737 ;
C 167 ; WX 556 ; N section ; B 34 -184 522 727 ;
C 164 ; WX 556 ; N currency ; B -3 76 559 636 ;
C 39 ; WX 238 ; N quotesingle ; B 70 447 168 718 ;
C 147 ; WX 500 ; N quotedblleft ; B 64 454 436 727 ;
C 171 ; WX 556 ; N guillemotleft ; B 88 76 468 484 ;
C 139 ; WX 333 ; N guilsinglleft ; B 83 76 250 484 ;
C 155 ; WX 333 ; N guilsinglright ; B 83 76 250 484 ;
C -1 ; WX 611 ; N fi ; B 10 0 542 727 ;
C -1 ; WX 611 ; N fl ; B 10 0 542 727 ;
C 150 ; WX 556 ; N endash ; B 0 227 556 333 ;
C 134 ; WX 556 ; N dagger ; B 36 -171 520 718 ;
C 135 ; WX 556 ; N daggerdbl ; B 36 -171 520 718 ;
C 183 ; WX 278 ; N periodcentered ; B 58 172 220 334 ;
C 182 ; WX 556 ; N paragraph ; B -8 -191 539 700 ;
C 149 ; WX 350 ; N bullet ; B 10 194 340 524 ;
C 130 ; WX 278 ; N quotesinglbase ; B 69 -146 209 127 ;
C 132 ; WX 500 ; N quotedblbase ; B 64 -146 436 127 ;
C 148 ; WX 500 ; N quotedblright ; B 64 445 436 718 ;
C 187 ; WX 556 ; N guillemotright ; B 88 76 468 484 ;
C 133 ; WX 1000 ; N ellipsis ; B 92 0 908 146 ;
C 137 ; WX 1000 ; N perthousand ; B -3 -19 1003 710 ;
C 191 ; WX 611 ; N questiondown ; B 55 -195 551 532 ;
C 96 ; WX 333 ; N grave ; B -23 604 225 750 ;
C 180 ; WX 333 ; N acute ; B 108 604 356 750 ;
C 136 ; WX 333 ; N circumflex ; B -10 604 343 750 ;
C 152 ; WX 333 ; N tilde ; B -17 610 350 737 ;
C 175 ; WX 333 ; N macron ; B -6 604 339 678 ;
C -1 ; WX 333 ; N breve ; B -2 604 335 750 ;
C -1 ; WX 333 ; N dotaccent ; B 104 614 230 729 ;
C 168 ; WX 333 ; N dieresis ; B 6 614 327 729 ;
C -1 ; WX 333 ; N ring ; B 59 568 275 776 ;
C 184 ; WX 333 ; N cedilla ; B 6 -228 245 0 ;
C -1 ; WX 333 ; N hungarumlaut ; B 9 604 486 750 ;
C -1 ; WX 333 ; N ogonek ; B 71 -228 304 0 ;
C -1 ; WX 333 ; N caron ; B -10 604 343 750 ;
C 151 ; WX 1000 ; N emdash ; B 0 227 1000 333 ;
C 198 ; WX 1000 ; N AE ; B 5 0 954 718 ;
C 170 ; WX 370 ; N ordfeminine ; B 22 401 347 737 ;
C -1 ; WX 611 ; N Lslash ; B -20 0 583 718 ;
C 216 ; WX 778 ; N Oslash ; B 33 -27 744 745 ;
C 140 ; WX 1000 ; N OE ; B 37 -19 961 737 ;
C 186 ; WX 365 ; N ordmasculine ; B 6 401 360 737 ;
C 230 ; WX 889 ; N ae ; B 29 -14 858 546 ;
C -1 ; WX 278 ; N dotlessi ; B 69 0 209 532 ;
C -1 ; WX 278 ; N lslash ; B -18 0 296 718 ;
C 248 ; WX 611 ; N oslash ; B 22 -29 589 560 ;
C 156 ; WX 944 ; N oe ; B 34 -14 912 546 ;
C 223 ; WX 611 ; N germandbls ; B 69 -14 579 731 ;
C 207 ; WX 278 ; N Idieresis ; B -21 0 300 915 ;
C 233 ; WX 556 ; N eacute ; B 23 -14 528 750 ;
C -1 ; WX 556 ; N abreve ; B 29 -14 527 750 ;
C -1 ; WX 611 ; N uhungarumlaut ; B 66 -14 625 750 ;
C -1 ; WX 556 ; N ecaron ; B 23 -14 528 750 ;
C 159 ; WX 667 ; N Ydieresis ; B 15 0 653 915 ;
C 247 ; WX 584 ; N divide ; B 40 -42 544 548 ;
C 221 ; WX 667 ; N Yacute ; B 15 0 653 936 ;
C 194 ; WX 722 ; N Acircumflex ; B 20 0 702 936 ;
C 225 ; WX 556 ; N aacute ; B 29 -14 527 750 ;
C 219 ; WX 722 ; N Ucircumflex ; B 72 -19 651 936 ;
C 253 ; WX 556 ; N yacute ; B 10 -214 539 750 ;
C -1 ; WX 556 ; N scommaaccent ; B 30 -228 519 546 ;
C 234 ; WX 556 ; N ecircumflex ; B 23 -14 528 750 ;
C -1 ; WX 722 ; N Uring ; B 72 -19 651 962 ;
C 220 ; WX 722 ; N Udieresis ; B 72 -19 651 915 ;
C -1 ; WX 556 ; N aogonek ; B 29 -224 545 546 ;
C 218 ; WX 722 ; N Uacute ; B 72 -19 651 936 ;
C -1 ; WX 611 ; N uogonek ; B 66 -228 545 532 ;
C 203 ; WX 667 ; N Edieresis ; B 76 0 621 915 ;
C -1 ; WX 722 ; N Dcroat ; B -5 0 685 718 ;
C -1 ; WX 250 ; N commaaccent ; B 64 -228 199 -50 ;
C 169 ; WX 737 ; N copyright ; B -11 -19 749 737 ;
C -1 ; WX 667 ; N Emacron ; B 76 0 621 864 ;
C -1 ; WX 556 ; N ccaron ; B 34 -14 524 750 ;
C 229 ; WX 556 ; N aring ; B 29 -14 527 776 ;
C -1 ; WX 722 ; N Ncommaaccent ; B 69 -228 654 718 ;
C -1 ; WX 278 ; N lacute ; B 69 0 329 936 ;
C 224 ; WX 556 ; N agrave ; B 29 -14 527 750 ;
C -1 ; WX 611 ; N Tcommaaccent ; B 14 -228 598 718 ;
C -1 ; WX 722 ; N Cacute ; B 44 -19 684 936 ;
C 227 ; WX 556 ; N atilde ; B 29 -14 527 737 ;
C -1 ; WX 667 ; N Edotaccent ; B 76 0 621 915 ;
C 154 ; WX 556 ; N scaron ; B 30 -14 519 750 ;
C -1 ; WX 556 ; N scedilla ; B 30 -228 519 546 ;
C 237 ; WX 278 ; N iacute ; B 69 0 329 750 ;
C -1 ; WX 494 ; N lozenge ; B 10 0 484 745 ;
C -1 ; WX 722 ; N Rcaron ; B 76 0 677 936 ;
C -1 ; WX 778 ; N Gcommaaccent ; B 44 -228 713 737 ;
C 251 ; WX 611 ; N ucircumflex ; B 66 -14 545 750 ;
C 226 ; WX 556 ; N acircumflex ; B 29 -14 527 750 ;
C -1 ; WX 722 ; N Amacron ; B 20 0 702 864 ;
C -1 ; WX 389 ; N rcaron ; B 18 0 373 750 ;
C 231 ; WX 556 ; N ccedilla ; B 34 -228 524 546 ;
C -1 ; WX 611 ; N Zdotaccent ; B 25 0 586 915 ;
C 222 ; WX 667 ; N Thorn ; B 76 0 627 718 ;
C -1 ; WX 778 ; N Omacron ; B 44 -19 734 864 ;
C -1 ; WX 722 ; N Racute ; B 76 0 677 936 ;
C -1 ; WX 667 ; N Sacute ; B 39 -19 629 936 ;
C -1 ; WX 743 ; N dcaron ; B 34 -14 750 718 ;
C -1 ; WX 722 ; N Umacron ; B 72 -19 651 864 ;
C -1 ; WX 611 ; N uring ; B 66 -14 545 776 ;
C 179 ; WX 333 ; N threesuperior ; B 8 271 326 710 ;
C 210 ; WX 778 ; N Ograve ; B 44 -19 734 936 ;
C 192 ; WX 722 ; N Agrave ; B 20 0 702 936 ;
C -1 ; WX 722 ; N Abreve ; B 20 0 702 936 ;
C 215 ; WX 584 ; N multiply ; B 40 1 545 505 ;
C 250 ; WX 611 ; N uacute ; B 66 -14 545 750 ;
C -1 ; WX 611 ; N Tcaron ; B 14 0 598 936 ;
C -1 ; WX 494 ; N partialdiff ; B 11 -21 494 750 ;
C 255 ; WX 556 ; N ydieresis ; B 10 -214 539 729 ;
C -1 ; WX 722 ; N Nacute ; B 69 0 654 936 ;
C 238 ; WX 278 ; N icircumflex ; B -37 0 316 750 ;
C 202 ; WX 667 ; N Ecircumflex ; B 76 0 621 936 ;
C 228 ; WX 556 ; N adieresis ; B 29 -14 527 729 ;
C 235 ; WX 556 ; N edieresis ; B 23 -14 528 729 ;
C -1 ; WX 556 ; N cacute ; B 34 -14 524 750 ;
C -1 ; WX 611 ; N nacute ; B 65 0 546 750 ;
C -1 ; WX 611 ; N umacron ; B 66 -14 545 678 ;
C -1 ; WX 722 ; N Ncaron ; B 69 0 654 936 ;
C 205 ; WX 278 ; N Iacute ; B 64 0 329 936 ;
C 177 ; WX 584 ; N plusminus ; B 40 0 544 506 ;
C 166 ; WX 280 ; N brokenbar ; B 84 -150 196 700 ;
C 174 ; WX 737 ; N registered ; B -11 -19 748 737 ;
C -1 ; WX 778 ; N Gbreve ; B 44 -19 713 936 ;
C -1 ; WX 278 ; N Idotaccent ; B 64 0 214 915 ;
C -1 ; WX 600 ; N summation ; B 14 -10 585 706 ;
C 200 ; WX 667 ; N Egrave ; B 76 0 621 936 ;
C -1 ; WX 389 ; N racute ; B 64 0 384 750 ;
C -1 ; WX 611 ; N omacron ; B 34 -14 578 678 ;
C -1 ; WX 611 ; N Zacute ; B 25 0 586 936 ;
C 142 ; WX 611 ; N Zcaron ; B 25 0 586 936 ;
C -1 ; WX 549 ; N greaterequal ; B 26 0 523 704 ;
C 208 ; WX 722 ; N Eth ; B -5 0 685 718 ;
C 199 ; WX 722 ; N Ccedilla ; B 44 -228 684 737 ;
C -1 ; WX 278 ; N lcommaaccent ; B 69 -228 213 718 ;
C -1 ; WX 389 ; N tcaron ; B 10 -6 421 878 ;
C -1 ; WX 556 ; N eogonek ; B 23 -228 528 546 ;
C -1 ; WX 722 ; N Uogonek ; B 72 -228 651 718 ;
C 193 ; WX 722 ; N Aacute ; B 20 0 702 936 ;
C 196 ; WX 722 ; N Adieresis ; B 20 0 702 915 ;
C 232 ; WX 556 ; N egrave ; B 23 -14 528 750 ;
C -1 ; WX 500 ; N zacute ; B 20 0 480 750 ;
C -1 ; WX 278 ; N iogonek ; B 16 -224 249 725 ;
C 211 ; WX 778 ; N Oacute ; B 44 -19 734 936 ;
C 243 ; WX 611 ; N oacute ; B 34 -14 578 750 ;
C -1 ; WX 556 ; N amacron ; B 29 -14 527 678 ;
C -1 ; WX 556 ; N sacute ; B 30 -14 519 750 ;
C 239 ; WX 278 ; N idieresis ; B -21 0 300 729 ;
C 212 ; WX 778 ; N Ocircumflex ; B 44 -19 734 936 ;
C 217 ; WX 722 ; N Ugrave ; B 72 -19 651 936 ;
C -1 ; WX 612 ; N Delta ; B 6 0 608 688 ;
C 254 ; WX 611 ; N thorn ; B 62 -208 578 718 ;
C 178 ; WX 333 ; N twosuperior ; B 9 283 324 710 ;
C 214 ; WX 778 ; N Odieresis ; B 44 -19 734 915 ;
C 181 ; WX 611 ; N mu ; B 66 -207 545 532 ;
C 236 ; WX 278 ; N igrave ; B -50 0 209 750 ;
C -1 ; WX 611 ; N ohungarumlaut ; B 34 -14 625 750 ;
C -1 ; WX 667 ; N Eogonek ; B 76 -224 639 718 ;
C -1 ; WX 611 ; N dcroat ; B 34 -14 650 718 ;
C 190 ; WX 834 ; N threequarters ; B 16 -19 799 710 ;
C -1 ; WX 667 ; N Scedilla ; B 39 -228 629 737 ;
C -1 ; WX 400 ; N lcaron ; B 69 0 408 718 ;
C -1 ; WX 722 ; N Kcommaaccent ; B 87 -228 722 718 ;
C -1 ; WX 611 ; N Lacute ; B 76 0 583 936 ;
C 153 ; WX 1000 ; N trademark ; B 44 306 956 718 ;
C -1 ; WX 556 ; N edotaccent ; B 23 -14 528 729 ;
C 204 ; WX 278 ; N Igrave ; B -50 0 214 936 ;
C -1 ; WX 278 ; N Imacron ; B -33 0 312 864 ;
C -1 ; WX 611 ; N Lcaron ; B 76 0 583 718 ;
C 189 ; WX 834 ; N onehalf ; B 26 -19 794 710 ;
C -1 ; WX 549 ; N lessequal ; B 29 0 526 704 ;
C 244 ; WX 611 ; N ocircumflex ; B 34 -14 578 750 ;
C 241 ; WX 611 ; N ntilde ; B 65 0 546 737 ;
C -1 ; WX 722 ; N Uhungarumlaut ; B 72 -19 681 936 ;
C 201 ; WX 667 ; N Eacute ; B 76 0 621 936 ;
C -1 ; WX 556 ; N emacron ; B 23 -14 528 678 ;
C -1 ; WX 611 ; N gbreve ; B 40 -217 553 750 ;
C 188 ; WX 834 ; N onequarter ; B 26 -19 766 710 ;
C 138 ; WX 667 ; N Scaron ; B 39 -19 629 936 ;
C -1 ; WX 667 ; N Scommaaccent ; B 39 -228 629 737 ;
C -1 ; WX 778 ; N Ohungarumlaut ; B 44 -19 734 936 ;
C 176 ; WX 400 ; N degree ; B 57 426 343 712 ;
C 242 ; WX 611 ; N ograve ; B 34 -14 578 750 ;
C -1 ; WX 722 ; N Ccaron ; B 44 -19 684 936 ;
C 249 ; WX 611 ; N ugrave ; B 66 -14 545 750 ;
C -1 ; WX 549 ; N radical ; B 10 -46 512 850 ;
C -1 ; WX 722 ; N Dcaron ; B 76 0 685 936 ;
C -1 ; WX 389 ; N rcommaaccent ; B 64 -228 373 546 ;
C 209 ; WX 722 ; N Ntilde ; B 69 0 654 923 ;
C 245 ; WX 611 ; N otilde ; B 34 -14 578 737 ;
C -1 ; WX 722 ; N Rcommaaccent ; B 76 -228 677 718 ;
C -1 ; WX 611 ; N Lcommaaccent ; B 76 -228 583 718 ;
C 195 ; WX 722 ; N Atilde ; B 20 0 702 923 ;
C -1 ; WX 722 ; N Aogonek ; B 20 -224 742 718 ;
C 197 ; WX 722 ; N Aring ; B 20 0 702 962 ;
C 213 ; WX 778 ; N Otilde ; B 44 -19 734 923 ;
C -1 ; WX 500 ; N zdotaccent ; B 20 0 480 729 ;
C -1 ; WX 667 ; N Ecaron ; B 76 0 621 936 ;
C -1 ; WX 278 ; N Iogonek ; B -11 -228 222 718 ;
C -1 ; WX 556 ; N kcommaaccent ; B 69 -228 562 718 ;
C -1 ; WX 584 ; N minus ; B 40 197 544 309 ;
C 206 ; WX 278 ; N Icircumflex ; B -37 0 316 936 ;
C -1 ; WX 611 ; N ncaron ; B 65 0 546 750 ;
C -1 ; WX 333 ; N tcommaaccent ; B 10 -228 309 676 ;
C 172 ; WX 584 ; N logicalnot ; B 40 108 544 419 ;
C 246 ; WX 611 ; N odieresis ; B 34 -14 578 729 ;
C 252 ; WX 611 ; N udieresis ; B 66 -14 545 729 ;
C -1 ; WX 549 ; N notequal ; B 15 -49 540 570 ;
C -1 ; WX 611 ; N gcommaaccent ; B 40 -217 553 850 ;
C 240 ; WX 611 ; N eth ; B 34 -14 578 737 ;
C 158 ; WX 500 ; N zcaron ; B 20 0 480 750 ;
C -1 ; WX 611 ; N ncommaaccent ; B 65 -228 546 546 ;
C 185 ; WX 333 ; N onesuperior ; B 26 283 237 710 ;
C -1 ; WX 278 ; N imacron ; B -8 0 285 678 ;
C 128 ; WX 556 ; N Euro ; B 0 0 0 0 ;
EndCharMetrics
StartKernData
StartKernPairs 2481
KPX A C -40
KPX A Cacute -40
KPX A Ccaron -40
KPX A Ccedilla -40
KPX A G -50
KPX A Gbreve -50
KPX A Gcommaaccent -50
KPX A O -40
KPX A Oacute -40
KPX A Ocircumflex -40
KPX A Odieresis -40
KPX A Ograve -40
KPX A Ohungarumlaut -40
KPX A Omacron -40
KPX A Oslash -40
KPX A Otilde -40
KPX A Q -40
KPX A T -90
KPX A Tcaron -90
KPX A Tcommaaccent -90
KPX A U -50
KPX A Uacute -50
KPX A Ucircumflex -50
KPX A Udieresis -50
KPX A Ugrave -50
KPX A Uhungarumlaut -50
KPX A Umacron -50
KPX A Uogonek -50
KPX A Uring -50
KPX A V -80
KPX A W -60
KPX A Y -110
KPX A Yacute -110
KPX A Ydieresis -110
KPX A u -30
KPX A uacute -30
KPX A ucircumflex -30
KPX A udieresis -30
KPX A ugrave -30
KPX A uhungarumlaut -30
KPX A umacron -30
KPX A uogonek -30
KPX A uring -30
KPX A v -40
KPX A w -30
KPX A y -30
KPX A yacute -30
KPX A ydieresis -30
KPX Aacute C -40
KPX Aacute Cacute -40
KPX Aacute Ccaron -40
KPX Aacute Ccedilla -40
KPX Aacute G -50
KPX Aacute Gbreve -50
KPX Aacute Gcommaaccent -50
KPX Aacute O -40
KPX Aacute Oacute -40
KPX Aacute Ocircumflex -40
KPX Aacute Odieresis -40
KPX Aacute Ograve -40
KPX Aacute Ohungarumlaut -40
KPX Aacute Omacron -40
KPX Aacute Oslash -40
KPX Aacute Otilde -40
KPX Aacute Q -40
KPX Aacute T -90
KPX Aacute Tcaron -90
KPX Aacute Tcommaaccent -90
KPX Aacute U -50
KPX Aacute Uacute -50
KPX Aacute Ucircumflex -50
KPX Aacute Udieresis -50
KPX Aacute Ugrave -50
KPX Aacute Uhungarumlaut -50
KPX Aacute Umacron -50
KPX Aacute Uogonek -50
KPX Aacute Uring -50
KPX Aacute V -80
KPX Aacute W -60
KPX Aacute Y -110
KPX Aacute Yacute -110
KPX Aacute Ydieresis -110
KPX Aacute u -30
KPX Aacute uacute -30
KPX Aacute ucircumflex -30
KPX Aacute udieresis -30
KPX Aacute ugrave -30
KPX Aacute uhungarumlaut -30
KPX Aacute umacron -30
KPX Aacute uogonek -30
KPX Aacute uring -30
KPX Aacute v -40
KPX Aacute w -30
KPX Aacute y -30
KPX Aacute yacute -30
KPX Aacute ydieresis -30
KPX Abreve C -40
KPX Abreve Cacute -40
KPX Abreve Ccaron -40
KPX Abreve Ccedilla -40
KPX Abreve G -50
KPX Abreve Gbreve -50
KPX Abreve Gcommaaccent -50
KPX Abreve O -40
KPX Abreve Oacute -40
KPX Abreve Ocircumflex -40
KPX Abreve Odieresis -40
KPX Abreve Ograve -40
KPX Abreve Ohungarumlaut -40
KPX Abreve Omacron -40
KPX Abreve Oslash -40
KPX Abreve Otilde -40
KPX Abreve Q -40
KPX Abreve T -90
KPX Abreve Tcaron -90
KPX Abreve Tcommaaccent -90
KPX Abreve U -50
KPX Abreve Uacute -50
KPX Abreve Ucircumflex -50
KPX Abreve Udieresis -50
KPX Abreve Ugrave -50
KPX Abreve Uhungarumlaut -50
KPX Abreve Umacron -50
KPX Abreve Uogonek -50
KPX Abreve Uring -50
KPX Abreve V -80
KPX Abreve W -60
KPX Abreve Y -110
KPX Abreve Yacute -110
KPX Abreve Ydieresis -110
KPX Abreve u -30
KPX Abreve uacute -30
KPX Abreve ucircumflex -30
KPX Abreve udieresis -30
KPX Abreve ugrave -30
KPX Abreve uhungarumlaut -30
KPX Abreve umacron -30
KPX Abreve uogonek -30
KPX Abreve uring -30
KPX Abreve v -40
KPX Abreve w -30
KPX Abreve y -30
KPX Abreve yacute -30
KPX Abreve ydieresis -30
KPX Acircumflex C -40
KPX Acircumflex Cacute -40
KPX Acircumflex Ccaron -40
KPX Acircumflex Ccedilla -40
KPX Acircumflex G -50
KPX Acircumflex Gbreve -50
KPX Acircumflex Gcommaaccent -50
KPX Acircumflex O -40
KPX Acircumflex Oacute -40
KPX Acircumflex Ocircumflex -40
KPX Acircumflex Odieresis -40
KPX Acircumflex Ograve -40
KPX Acircumflex Ohungarumlaut -40
KPX Acircumflex Omacron -40
KPX Acircumflex Oslash -40
KPX Acircumflex Otilde -40
KPX Acircumflex Q -40
KPX Acircumflex T -90
KPX Acircumflex Tcaron -90
KPX Acircumflex Tcommaaccent -90
KPX Acircumflex U -50
KPX Acircumflex Uacute -50
KPX Acircumflex Ucircumflex -50
KPX Acircumflex Udieresis -50
KPX Acircumflex Ugrave -50
KPX Acircumflex Uhungarumlaut -50
KPX Acircumflex Umacron -50
KPX Acircumflex Uogonek -50
KPX Acircumflex Uring -50
KPX Acircumflex V -80
KPX Acircumflex W -60
KPX Acircumflex Y -110
KPX Acircumflex Yacute -110
KPX Acircumflex Ydieresis -110
KPX Acircumflex u -30
KPX Acircumflex uacute -30
KPX Acircumflex ucircumflex -30
KPX Acircumflex udieresis -30
KPX Acircumflex ugrave -30
KPX Acircumflex uhungarumlaut -30
KPX Acircumflex umacron -30
KPX Acircumflex uogonek -30
KPX Acircumflex uring -30
KPX Acircumflex v -40
KPX Acircumflex w -30
KPX Acircumflex y -30
KPX Acircumflex yacute -30
KPX Acircumflex ydieresis -30
KPX Adieresis C -40
KPX Adieresis Cacute -40
KPX Adieresis Ccaron -40
KPX Adieresis Ccedilla -40
KPX Adieresis G -50
KPX Adieresis Gbreve -50
KPX Adieresis Gcommaaccent -50
KPX Adieresis O -40
KPX Adieresis Oacute -40
KPX Adieresis Ocircumflex -40
KPX Adieresis Odieresis -40
KPX Adieresis Ograve -40
KPX Adieresis Ohungarumlaut -40
KPX Adieresis Omacron -40
KPX Adieresis Oslash -40
KPX Adieresis Otilde -40
KPX Adieresis Q -40
KPX Adieresis T -90
KPX Adieresis Tcaron -90
KPX Adieresis Tcommaaccent -90
KPX Adieresis U -50
KPX Adieresis Uacute -50
KPX Adieresis Ucircumflex -50
KPX Adieresis Udieresis -50
KPX Adieresis Ugrave -50
KPX Adieresis Uhungarumlaut -50
KPX Adieresis Umacron -50
KPX Adieresis Uogonek -50
KPX Adieresis Uring -50
KPX Adieresis V -80
KPX Adieresis W -60
KPX Adieresis Y -110
KPX Adieresis Yacute -110
KPX Adieresis Ydieresis -110
KPX Adieresis u -30
KPX Adieresis uacute -30
KPX Adieresis ucircumflex -30
KPX Adieresis udieresis -30
KPX Adieresis ugrave -30
KPX Adieresis uhungarumlaut -30
KPX Adieresis umacron -30
KPX Adieresis uogonek -30
KPX Adieresis uring -30
KPX Adieresis v -40
KPX Adieresis w -30
KPX Adieresis y -30
KPX Adieresis yacute -30
KPX Adieresis ydieresis -30
KPX Agrave C -40
KPX Agrave Cacute -40
KPX Agrave Ccaron -40
KPX Agrave Ccedilla -40
KPX Agrave G -50
KPX Agrave Gbreve -50
KPX Agrave Gcommaaccent -50
KPX Agrave O -40
KPX Agrave Oacute -40
KPX Agrave Ocircumflex -40
KPX Agrave Odieresis -40
KPX Agrave Ograve -40
KPX Agrave Ohungarumlaut -40
KPX Agrave Omacron -40
KPX Agrave Oslash -40
KPX Agrave Otilde -40
KPX Agrave Q -40
KPX Agrave T -90
KPX Agrave Tcaron -90
KPX Agrave Tcommaaccent -90
KPX Agrave U -50
KPX Agrave Uacute -50
KPX Agrave Ucircumflex -50
KPX Agrave Udieresis -50
KPX Agrave Ugrave -50
KPX Agrave Uhungarumlaut -50
KPX Agrave Umacron -50
KPX Agrave Uogonek -50
KPX Agrave Uring -50
KPX Agrave V -80
KPX Agrave W -60
KPX Agrave Y -110
KPX Agrave Yacute -110
KPX Agrave Ydieresis -110
KPX Agrave u -30
KPX Agrave uacute -30
KPX Agrave ucircumflex -30
KPX Agrave udieresis -30
KPX Agrave ugrave -30
KPX Agrave uhungarumlaut -30
KPX Agrave umacron -30
KPX Agrave uogonek -30
KPX Agrave uring -30
KPX Agrave v -40
KPX Agrave w -30
KPX Agrave y -30
KPX Agrave yacute -30
KPX Agrave ydieresis -30
KPX Amacron C -40
KPX Amacron Cacute -40
KPX Amacron Ccaron -40
KPX Amacron Ccedilla -40
KPX Amacron G -50
KPX Amacron Gbreve -50
KPX Amacron Gcommaaccent -50
KPX Amacron O -40
KPX Amacron Oacute -40
KPX Amacron Ocircumflex -40
KPX Amacron Odieresis -40
KPX Amacron Ograve -40
KPX Amacron Ohungarumlaut -40
KPX Amacron Omacron -40
KPX Amacron Oslash -40
KPX Amacron Otilde -40
KPX Amacron Q -40
KPX Amacron T -90
KPX Amacron Tcaron -90
KPX Amacron Tcommaaccent -90
KPX Amacron U -50
KPX Amacron Uacute -50
KPX Amacron Ucircumflex -50
KPX Amacron Udieresis -50
KPX Amacron Ugrave -50
KPX Amacron Uhungarumlaut -50
KPX Amacron Umacron -50
KPX Amacron Uogonek -50
KPX Amacron Uring -50
KPX Amacron V -80
KPX Amacron W -60
KPX Amacron Y -110
KPX Amacron Yacute -110
KPX Amacron Ydieresis -110
KPX Amacron u -30
KPX Amacron uacute -30
KPX Amacron ucircumflex -30
KPX Amacron udieresis -30
KPX Amacron ugrave -30
KPX Amacron uhungarumlaut -30
KPX Amacron umacron -30
KPX Amacron uogonek -30
KPX Amacron uring -30
KPX Amacron v -40
KPX Amacron w -30
KPX Amacron y -30
KPX Amacron yacute -30
KPX Amacron ydieresis -30
KPX Aogonek C -40
KPX Aogonek Cacute -40
KPX Aogonek Ccaron -40
KPX Aogonek Ccedilla -40
KPX Aogonek G -50
KPX Aogonek Gbreve -50
KPX Aogonek Gcommaaccent -50
KPX Aogonek O -40
KPX Aogonek Oacute -40
KPX Aogonek Ocircumflex -40
KPX Aogonek Odieresis -40
KPX Aogonek Ograve -40
KPX Aogonek Ohungarumlaut -40
KPX Aogonek Omacron -40
KPX Aogonek Oslash -40
KPX Aogonek Otilde -40
KPX Aogonek Q -40
KPX Aogonek T -90
KPX Aogonek Tcaron -90
KPX Aogonek Tcommaaccent -90
KPX Aogonek U -50
KPX Aogonek Uacute -50
KPX Aogonek Ucircumflex -50
KPX Aogonek Udieresis -50
KPX Aogonek Ugrave -50
KPX Aogonek Uhungarumlaut -50
KPX Aogonek Umacron -50
KPX Aogonek Uogonek -50
KPX Aogonek Uring -50
KPX Aogonek V -80
KPX Aogonek W -60
KPX Aogonek Y -110
KPX Aogonek Yacute -110
KPX Aogonek Ydieresis -110
KPX Aogonek u -30
KPX Aogonek uacute -30
KPX Aogonek ucircumflex -30
KPX Aogonek udieresis -30
KPX Aogonek ugrave -30
KPX Aogonek uhungarumlaut -30
KPX Aogonek umacron -30
KPX Aogonek uogonek -30
KPX Aogonek uring -30
KPX Aogonek v -40
KPX Aogonek w -30
KPX Aogonek y -30
KPX Aogonek yacute -30
KPX Aogonek ydieresis -30
KPX Aring C -40
KPX Aring Cacute -40
KPX Aring Ccaron -40
KPX Aring Ccedilla -40
KPX Aring G -50
KPX Aring Gbreve -50
KPX Aring Gcommaaccent -50
KPX Aring O -40
KPX Aring Oacute -40
KPX Aring Ocircumflex -40
KPX Aring Odieresis -40
KPX Aring Ograve -40
KPX Aring Ohungarumlaut -40
KPX Aring Omacron -40
KPX Aring Oslash -40
KPX Aring Otilde -40
KPX Aring Q -40
KPX Aring T -90
KPX Aring Tcaron -90
KPX Aring Tcommaaccent -90
KPX Aring U -50
KPX Aring Uacute -50
KPX Aring Ucircumflex -50
KPX Aring Udieresis -50
KPX Aring Ugrave -50
KPX Aring Uhungarumlaut -50
KPX Aring Umacron -50
KPX Aring Uogonek -50
KPX Aring Uring -50
KPX Aring V -80
KPX Aring W -60
KPX Aring Y -110
KPX Aring Yacute -110
KPX Aring Ydieresis -110
KPX Aring u -30
KPX Aring uacute -30
KPX Aring ucircumflex -30
KPX Aring udieresis -30
KPX Aring ugrave -30
KPX Aring uhungarumlaut -30
KPX Aring umacron -30
KPX Aring uogonek -30
KPX Aring uring -30
KPX Aring v -40
KPX Aring w -30
KPX Aring y -30
KPX Aring yacute -30
KPX Aring ydieresis -30
KPX Atilde C -40
KPX Atilde Cacute -40
KPX Atilde Ccaron -40
KPX Atilde Ccedilla -40
KPX Atilde G -50
KPX Atilde Gbreve -50
KPX Atilde Gcommaaccent -50
KPX Atilde O -40
KPX Atilde Oacute -40
KPX Atilde Ocircumflex -40
KPX Atilde Odieresis -40
KPX Atilde Ograve -40
KPX Atilde Ohungarumlaut -40
KPX Atilde Omacron -40
KPX Atilde Oslash -40
KPX Atilde Otilde -40
KPX Atilde Q -40
KPX Atilde T -90
KPX Atilde Tcaron -90
KPX Atilde Tcommaaccent -90
KPX Atilde U -50
KPX Atilde Uacute -50
KPX Atilde Ucircumflex -50
KPX Atilde Udieresis -50
KPX Atilde Ugrave -50
KPX Atilde Uhungarumlaut -50
KPX Atilde Umacron -50
KPX Atilde Uogonek -50
KPX Atilde Uring -50
KPX Atilde V -80
KPX Atilde W -60
KPX Atilde Y -110
KPX Atilde Yacute -110
KPX Atilde Ydieresis -110
KPX Atilde u -30
KPX Atilde uacute -30
KPX Atilde ucircumflex -30
KPX Atilde udieresis -30
KPX Atilde ugrave -30
KPX Atilde uhungarumlaut -30
KPX Atilde umacron -30
KPX Atilde uogonek -30
KPX Atilde uring -30
KPX Atilde v -40
KPX Atilde w -30
KPX Atilde y -30
KPX Atilde yacute -30
KPX Atilde ydieresis -30
KPX B A -30
KPX B Aacute -30
KPX B Abreve -30
KPX B Acircumflex -30
KPX B Adieresis -30
KPX B Agrave -30
KPX B Amacron -30
KPX B Aogonek -30
KPX B Aring -30
KPX B Atilde -30
KPX B U -10
KPX B Uacute -10
KPX B Ucircumflex -10
KPX B Udieresis -10
KPX B Ugrave -10
KPX B Uhungarumlaut -10
KPX B Umacron -10
KPX B Uogonek -10
KPX B Uring -10
KPX D A -40
KPX D Aacute -40
KPX D Abreve -40
KPX D Acircumflex -40
KPX D Adieresis -40
KPX D Agrave -40
KPX D Amacron -40
KPX D Aogonek -40
KPX D Aring -40
KPX D Atilde -40
KPX D V -40
KPX D W -40
KPX D Y -70
KPX D Yacute -70
KPX D Ydieresis -70
KPX D comma -30
KPX D period -30
KPX Dcaron A -40
KPX Dcaron Aacute -40
KPX Dcaron Abreve -40
KPX Dcaron Acircumflex -40
KPX Dcaron Adieresis -40
KPX Dcaron Agrave -40
KPX Dcaron Amacron -40
KPX Dcaron Aogonek -40
KPX Dcaron Aring -40
KPX Dcaron Atilde -40
KPX Dcaron V -40
KPX Dcaron W -40
KPX Dcaron Y -70
KPX Dcaron Yacute -70
KPX Dcaron Ydieresis -70
KPX Dcaron comma -30
KPX Dcaron period -30
KPX Dcroat A -40
KPX Dcroat Aacute -40
KPX Dcroat Abreve -40
KPX Dcroat Acircumflex -40
KPX Dcroat Adieresis -40
KPX Dcroat Agrave -40
KPX Dcroat Amacron -40
KPX Dcroat Aogonek -40
KPX Dcroat Aring -40
KPX Dcroat Atilde -40
KPX Dcroat V -40
KPX Dcroat W -40
KPX Dcroat Y -70
KPX Dcroat Yacute -70
KPX Dcroat Ydieresis -70
KPX Dcroat comma -30
KPX Dcroat period -30
KPX F A -80
KPX F Aacute -80
KPX F Abreve -80
KPX F Acircumflex -80
KPX F Adieresis -80
KPX F Agrave -80
KPX F Amacron -80
KPX F Aogonek -80
KPX F Aring -80
KPX F Atilde -80
KPX F a -20
KPX F aacute -20
KPX F abreve -20
KPX F acircumflex -20
KPX F adieresis -20
KPX F agrave -20
KPX F amacron -20
KPX F aogonek -20
KPX F aring -20
KPX F atilde -20
KPX F comma -100
KPX F period -100
KPX J A -20
KPX J Aacute -20
KPX J Abreve -20
KPX J Acircumflex -20
KPX J Adieresis -20
KPX J Agrave -20
KPX J Amacron -20
KPX J Aogonek -20
KPX J Aring -20
KPX J Atilde -20
KPX J comma -20
KPX J period -20
KPX J u -20
KPX J uacute -20
KPX J ucircumflex -20
KPX J udieresis -20
KPX J ugrave -20
KPX J uhungarumlaut -20
KPX J umacron -20
KPX J uogonek -20
KPX J uring -20
KPX K O -30
KPX K Oacute -30
KPX K Ocircumflex -30
KPX K Odieresis -30
KPX K Ograve -30
KPX K Ohungarumlaut -30
KPX K Omacron -30
KPX K Oslash -30
KPX K Otilde -30
KPX K e -15
KPX K eacute -15
KPX K ecaron -15
KPX K ecircumflex -15
KPX K edieresis -15
KPX K edotaccent -15
KPX K egrave -15
KPX K emacron -15
KPX K eogonek -15
KPX K o -35
KPX K oacute -35
KPX K ocircumflex -35
KPX K odieresis -35
KPX K ograve -35
KPX K ohungarumlaut -35
KPX K omacron -35
KPX K oslash -35
KPX K otilde -35
KPX K u -30
KPX K uacute -30
KPX K ucircumflex -30
KPX K udieresis -30
KPX K ugrave -30
KPX K uhungarumlaut -30
KPX K umacron -30
KPX K uogonek -30
KPX K uring -30
KPX K y -40
KPX K yacute -40
KPX K ydieresis -40
KPX Kcommaaccent O -30
KPX Kcommaaccent Oacute -30
KPX Kcommaaccent Ocircumflex -30
KPX Kcommaaccent Odieresis -30
KPX Kcommaaccent Ograve -30
KPX Kcommaaccent Ohungarumlaut -30
KPX Kcommaaccent Omacron -30
KPX Kcommaaccent Oslash -30
KPX Kcommaaccent Otilde -30
KPX Kcommaaccent e -15
KPX Kcommaaccent eacute -15
KPX Kcommaaccent ecaron -15
KPX Kcommaaccent ecircumflex -15
KPX Kcommaaccent edieresis -15
KPX Kcommaaccent edotaccent -15
KPX Kcommaaccent egrave -15
KPX Kcommaaccent emacron -15
KPX Kcommaaccent eogonek -15
KPX Kcommaaccent o -35
KPX Kcommaaccent oacute -35
KPX Kcommaaccent ocircumflex -35
KPX Kcommaaccent odieresis -35
KPX Kcommaaccent ograve -35
KPX Kcommaaccent ohungarumlaut -35
KPX Kcommaaccent omacron -35
KPX Kcommaaccent oslash -35
KPX Kcommaaccent otilde -35
KPX Kcommaaccent u -30
KPX Kcommaaccent uacute -30
KPX Kcommaaccent ucircumflex -30
KPX Kcommaaccent udieresis -30
KPX Kcommaaccent ugrave -30
KPX Kcommaaccent uhungarumlaut -30
KPX Kcommaaccent umacron -30
KPX Kcommaaccent uogonek -30
KPX Kcommaaccent uring -30
KPX Kcommaaccent y -40
KPX Kcommaaccent yacute -40
KPX Kcommaaccent ydieresis -40
KPX L T -90
KPX L Tcaron -90
KPX L Tcommaaccent -90
KPX L V -110
KPX L W -80
KPX L Y -120
KPX L Yacute -120
KPX L Ydieresis -120
KPX L quotedblright -140
KPX L quoteright -140
KPX L y -30
KPX L yacute -30
KPX L ydieresis -30
KPX Lacute T -90
KPX Lacute Tcaron -90
KPX Lacute Tcommaaccent -90
KPX Lacute V -110
KPX Lacute W -80
KPX Lacute Y -120
KPX Lacute Yacute -120
KPX Lacute Ydieresis -120
KPX Lacute quotedblright -140
KPX Lacute quoteright -140
KPX Lacute y -30
KPX Lacute yacute -30
KPX Lacute ydieresis -30
KPX Lcommaaccent T -90
KPX Lcommaaccent Tcaron -90
KPX Lcommaaccent Tcommaaccent -90
KPX Lcommaaccent V -110
KPX Lcommaaccent W -80
KPX Lcommaaccent Y -120
KPX Lcommaaccent Yacute -120
KPX Lcommaaccent Ydieresis -120
KPX Lcommaaccent quotedblright -140
KPX Lcommaaccent quoteright -140
KPX Lcommaaccent y -30
KPX Lcommaaccent yacute -30
KPX Lcommaaccent ydieresis -30
KPX Lslash T -90
KPX Lslash Tcaron -90
KPX Lslash Tcommaaccent -90
KPX Lslash V -110
KPX Lslash W -80
KPX Lslash Y -120
KPX Lslash Yacute -120
KPX Lslash Ydieresis -120
KPX Lslash quotedblright -140
KPX Lslash quoteright -140
KPX Lslash y -30
KPX Lslash yacute -30
KPX Lslash ydieresis -30
KPX O A -50
KPX O Aacute -50
KPX O Abreve -50
KPX O Acircumflex -50
KPX O Adieresis -50
KPX O Agrave -50
KPX O Amacron -50
KPX O Aogonek -50
KPX O Aring -50
KPX O Atilde -50
KPX O T -40
KPX O Tcaron -40
KPX O Tcommaaccent -40
KPX O V -50
KPX O W -50
KPX O X -50
KPX O Y -70
KPX O Yacute -70
KPX O Ydieresis -70
KPX O comma -40
KPX O period -40
KPX Oacute A -50
KPX Oacute Aacute -50
KPX Oacute Abreve -50
KPX Oacute Acircumflex -50
KPX Oacute Adieresis -50
KPX Oacute Agrave -50
KPX Oacute Amacron -50
KPX Oacute Aogonek -50
KPX Oacute Aring -50
KPX Oacute Atilde -50
KPX Oacute T -40
KPX Oacute Tcaron -40
KPX Oacute Tcommaaccent -40
KPX Oacute V -50
KPX Oacute W -50
KPX Oacute X -50
KPX Oacute Y -70
KPX Oacute Yacute -70
KPX Oacute Ydieresis -70
KPX Oacute comma -40
KPX Oacute period -40
KPX Ocircumflex A -50
KPX Ocircumflex Aacute -50
KPX Ocircumflex Abreve -50
KPX Ocircumflex Acircumflex -50
KPX Ocircumflex Adieresis -50
KPX Ocircumflex Agrave -50
KPX Ocircumflex Amacron -50
KPX Ocircumflex Aogonek -50
KPX Ocircumflex Aring -50
KPX Ocircumflex Atilde -50
KPX Ocircumflex T -40
KPX Ocircumflex Tcaron -40
KPX Ocircumflex Tcommaaccent -40
KPX Ocircumflex V -50
KPX Ocircumflex W -50
KPX Ocircumflex X -50
KPX Ocircumflex Y -70
KPX Ocircumflex Yacute -70
KPX Ocircumflex Ydieresis -70
KPX Ocircumflex comma -40
KPX Ocircumflex period -40
KPX Odieresis A -50
KPX Odieresis Aacute -50
KPX Odieresis Abreve -50
KPX Odieresis Acircumflex -50
KPX Odieresis Adieresis -50
KPX Odieresis Agrave -50
KPX Odieresis Amacron -50
KPX Odieresis Aogonek -50
KPX Odieresis Aring -50
KPX Odieresis Atilde -50
KPX Odieresis T -40
KPX Odieresis Tcaron -40
KPX Odieresis Tcommaaccent -40
KPX Odieresis V -50
KPX Odieresis W -50
KPX Odieresis X -50
KPX Odieresis Y -70
KPX Odieresis Yacute -70
KPX Odieresis Ydieresis -70
KPX Odieresis comma -40
KPX Odieresis period -40
KPX Ograve A -50
KPX Ograve Aacute -50
KPX Ograve Abreve -50
KPX Ograve Acircumflex -50
KPX Ograve Adieresis -50
KPX Ograve Agrave -50
KPX Ograve Amacron -50
KPX Ograve Aogonek -50
KPX Ograve Aring -50
KPX Ograve Atilde -50
KPX Ograve T -40
KPX Ograve Tcaron -40
KPX Ograve Tcommaaccent -40
KPX Ograve V -50
KPX Ograve W -50
KPX Ograve X -50
KPX Ograve Y -70
KPX Ograve Yacute -70
KPX Ograve Ydieresis -70
KPX Ograve comma -40
KPX Ograve period -40
KPX Ohungarumlaut A -50
KPX Ohungarumlaut Aacute -50
KPX Ohungarumlaut Abreve -50
KPX Ohungarumlaut Acircumflex -50
KPX Ohungarumlaut Adieresis -50
KPX Ohungarumlaut Agrave -50
KPX Ohungarumlaut Amacron -50
KPX Ohungarumlaut Aogonek -50
KPX Ohungarumlaut Aring -50
KPX Ohungarumlaut Atilde -50
KPX Ohungarumlaut T -40
KPX Ohungarumlaut Tcaron -40
KPX Ohungarumlaut Tcommaaccent -40
KPX Ohungarumlaut V -50
KPX Ohungarumlaut W -50
KPX Ohungarumlaut X -50
KPX Ohungarumlaut Y -70
KPX Ohungarumlaut Yacute -70
KPX Ohungarumlaut Ydieresis -70
KPX Ohungarumlaut comma -40
KPX Ohungarumlaut period -40
KPX Omacron A -50
KPX Omacron Aacute -50
KPX Omacron Abreve -50
KPX Omacron Acircumflex -50
KPX Omacron Adieresis -50
KPX Omacron Agrave -50
KPX Omacron Amacron -50
KPX Omacron Aogonek -50
KPX Omacron Aring -50
KPX Omacron Atilde -50
KPX Omacron T -40
KPX Omacron Tcaron -40
KPX Omacron Tcommaaccent -40
KPX Omacron V -50
KPX Omacron W -50
KPX Omacron X -50
KPX Omacron Y -70
KPX Omacron Yacute -70
KPX Omacron Ydieresis -70
KPX Omacron comma -40
KPX Omacron period -40
KPX Oslash A -50
KPX Oslash Aacute -50
KPX Oslash Abreve -50
KPX Oslash Acircumflex -50
KPX Oslash Adieresis -50
KPX Oslash Agrave -50
KPX Oslash Amacron -50
KPX Oslash Aogonek -50
KPX Oslash Aring -50
KPX Oslash Atilde -50
KPX Oslash T -40
KPX Oslash Tcaron -40
KPX Oslash Tcommaaccent -40
KPX Oslash V -50
KPX Oslash W -50
KPX Oslash X -50
KPX Oslash Y -70
KPX Oslash Yacute -70
KPX Oslash Ydieresis -70
KPX Oslash comma -40
KPX Oslash period -40
KPX Otilde A -50
KPX Otilde Aacute -50
KPX Otilde Abreve -50
KPX Otilde Acircumflex -50
KPX Otilde Adieresis -50
KPX Otilde Agrave -50
KPX Otilde Amacron -50
KPX Otilde Aogonek -50
KPX Otilde Aring -50
KPX Otilde Atilde -50
KPX Otilde T -40
KPX Otilde Tcaron -40
KPX Otilde Tcommaaccent -40
KPX Otilde V -50
KPX Otilde W -50
KPX Otilde X -50
KPX Otilde Y -70
KPX Otilde Yacute -70
KPX Otilde Ydieresis -70
KPX Otilde comma -40
KPX Otilde period -40
KPX P A -100
KPX P Aacute -100
KPX P Abreve -100
KPX P Acircumflex -100
KPX P Adieresis -100
KPX P Agrave -100
KPX P Amacron -100
KPX P Aogonek -100
KPX P Aring -100
KPX P Atilde -100
KPX P a -30
KPX P aacute -30
KPX P abreve -30
KPX P acircumflex -30
KPX P adieresis -30
KPX P agrave -30
KPX P amacron -30
KPX P aogonek -30
KPX P aring -30
KPX P atilde -30
KPX P comma -120
KPX P e -30
KPX P eacute -30
KPX P ecaron -30
KPX P ecircumflex -30
KPX P edieresis -30
KPX P edotaccent -30
KPX P egrave -30
KPX P emacron -30
KPX P eogonek -30
KPX P o -40
KPX P oacute -40
KPX P ocircumflex -40
KPX P odieresis -40
KPX P ograve -40
KPX P ohungarumlaut -40
KPX P omacron -40
KPX P oslash -40
KPX P otilde -40
KPX P period -120
KPX Q U -10
KPX Q Uacute -10
KPX Q Ucircumflex -10
KPX Q Udieresis -10
KPX Q Ugrave -10
KPX Q Uhungarumlaut -10
KPX Q Umacron -10
KPX Q Uogonek -10
KPX Q Uring -10
KPX Q comma 20
KPX Q period 20
KPX R O -20
KPX R Oacute -20
KPX R Ocircumflex -20
KPX R Odieresis -20
KPX R Ograve -20
KPX R Ohungarumlaut -20
KPX R Omacron -20
KPX R Oslash -20
KPX R Otilde -20
KPX R T -20
KPX R Tcaron -20
KPX R Tcommaaccent -20
KPX R U -20
KPX R Uacute -20
KPX R Ucircumflex -20
KPX R Udieresis -20
KPX R Ugrave -20
KPX R Uhungarumlaut -20
KPX R Umacron -20
KPX R Uogonek -20
KPX R Uring -20
KPX R V -50
KPX R W -40
KPX R Y -50
KPX R Yacute -50
KPX R Ydieresis -50
KPX Racute O -20
KPX Racute Oacute -20
KPX Racute Ocircumflex -20
KPX Racute Odieresis -20
KPX Racute Ograve -20
KPX Racute Ohungarumlaut -20
KPX Racute Omacron -20
KPX Racute Oslash -20
KPX Racute Otilde -20
KPX Racute T -20
KPX Racute Tcaron -20
KPX Racute Tcommaaccent -20
KPX Racute U -20
KPX Racute Uacute -20
KPX Racute Ucircumflex -20
KPX Racute Udieresis -20
KPX Racute Ugrave -20
KPX Racute Uhungarumlaut -20
KPX Racute Umacron -20
KPX Racute Uogonek -20
KPX Racute Uring -20
KPX Racute V -50
KPX Racute W -40
KPX Racute Y -50
KPX Racute Yacute -50
KPX Racute Ydieresis -50
KPX Rcaron O -20
KPX Rcaron Oacute -20
KPX Rcaron Ocircumflex -20
KPX Rcaron Odieresis -20
KPX Rcaron Ograve -20
KPX Rcaron Ohungarumlaut -20
KPX Rcaron Omacron -20
KPX Rcaron Oslash -20
KPX Rcaron Otilde -20
KPX Rcaron T -20
KPX Rcaron Tcaron -20
KPX Rcaron Tcommaaccent -20
KPX Rcaron U -20
KPX Rcaron Uacute -20
KPX Rcaron Ucircumflex -20
KPX Rcaron Udieresis -20
KPX Rcaron Ugrave -20
KPX Rcaron Uhungarumlaut -20
KPX Rcaron Umacron -20
KPX Rcaron Uogonek -20
KPX Rcaron Uring -20
KPX Rcaron V -50
KPX Rcaron W -40
KPX Rcaron Y -50
KPX Rcaron Yacute -50
KPX Rcaron Ydieresis -50
KPX Rcommaaccent O -20
KPX Rcommaaccent Oacute -20
KPX Rcommaaccent Ocircumflex -20
KPX Rcommaaccent Odieresis -20
KPX Rcommaaccent Ograve -20
KPX Rcommaaccent Ohungarumlaut -20
KPX Rcommaaccent Omacron -20
KPX Rcommaaccent Oslash -20
KPX Rcommaaccent Otilde -20
KPX Rcommaaccent T -20
KPX Rcommaaccent Tcaron -20
KPX Rcommaaccent Tcommaaccent -20
KPX Rcommaaccent U -20
KPX Rcommaaccent Uacute -20
KPX Rcommaaccent Ucircumflex -20
KPX Rcommaaccent Udieresis -20
KPX Rcommaaccent Ugrave -20
KPX Rcommaaccent Uhungarumlaut -20
KPX Rcommaaccent Umacron -20
KPX Rcommaaccent Uogonek -20
KPX Rcommaaccent Uring -20
KPX Rcommaaccent V -50
KPX Rcommaaccent W -40
KPX Rcommaaccent Y -50
KPX Rcommaaccent Yacute -50
KPX Rcommaaccent Ydieresis -50
KPX T A -90
KPX T Aacute -90
KPX T Abreve -90
KPX T Acircumflex -90
KPX T Adieresis -90
KPX T Agrave -90
KPX T Amacron -90
KPX T Aogonek -90
KPX T Aring -90
KPX T Atilde -90
KPX T O -40
KPX T Oacute -40
KPX T Ocircumflex -40
KPX T Odieresis -40
KPX T Ograve -40
KPX T Ohungarumlaut -40
KPX T Omacron -40
KPX T Oslash -40
KPX T Otilde -40
KPX T a -80
KPX T aacute -80
KPX T abreve -80
KPX T acircumflex -80
KPX T adieresis -80
KPX T agrave -80
KPX T amacron -80
KPX T aogonek -80
KPX T aring -80
KPX T atilde -80
KPX T colon -40
KPX T comma -80
KPX T e -60
KPX T eacute -60
KPX T ecaron -60
KPX T ecircumflex -60
KPX T edieresis -60
KPX T edotaccent -60
KPX T egrave -60
KPX T emacron -60
KPX T eogonek -60
KPX T hyphen -120
KPX T o -80
KPX T oacute -80
KPX T ocircumflex -80
KPX T odieresis -80
KPX T ograve -80
KPX T ohungarumlaut -80
KPX T omacron -80
KPX T oslash -80
KPX T otilde -80
KPX T period -80
KPX T r -80
KPX T racute -80
KPX T rcommaaccent -80
KPX T semicolon -40
KPX T u -90
KPX T uacute -90
KPX T ucircumflex -90
KPX T udieresis -90
KPX T ugrave -90
KPX T uhungarumlaut -90
KPX T umacron -90
KPX T uogonek -90
KPX T uring -90
KPX T w -60
KPX T y -60
KPX T yacute -60
KPX T ydieresis -60
KPX Tcaron A -90
KPX Tcaron Aacute -90
KPX Tcaron Abreve -90
KPX Tcaron Acircumflex -90
KPX Tcaron Adieresis -90
KPX Tcaron Agrave -90
KPX Tcaron Amacron -90
KPX Tcaron Aogonek -90
KPX Tcaron Aring -90
KPX Tcaron Atilde -90
KPX Tcaron O -40
KPX Tcaron Oacute -40
KPX Tcaron Ocircumflex -40
KPX Tcaron Odieresis -40
KPX Tcaron Ograve -40
KPX Tcaron Ohungarumlaut -40
KPX Tcaron Omacron -40
KPX Tcaron Oslash -40
KPX Tcaron Otilde -40
KPX Tcaron a -80
KPX Tcaron aacute -80
KPX Tcaron abreve -80
KPX Tcaron acircumflex -80
KPX Tcaron adieresis -80
KPX Tcaron agrave -80
KPX Tcaron amacron -80
KPX Tcaron aogonek -80
KPX Tcaron aring -80
KPX Tcaron atilde -80
KPX Tcaron colon -40
KPX Tcaron comma -80
KPX Tcaron e -60
KPX Tcaron eacute -60
KPX Tcaron ecaron -60
KPX Tcaron ecircumflex -60
KPX Tcaron edieresis -60
KPX Tcaron edotaccent -60
KPX Tcaron egrave -60
KPX Tcaron emacron -60
KPX Tcaron eogonek -60
KPX Tcaron hyphen -120
KPX Tcaron o -80
KPX Tcaron oacute -80
KPX Tcaron ocircumflex -80
KPX Tcaron odieresis -80
KPX Tcaron ograve -80
KPX Tcaron ohungarumlaut -80
KPX Tcaron omacron -80
KPX Tcaron oslash -80
KPX Tcaron otilde -80
KPX Tcaron period -80
KPX Tcaron r -80
KPX Tcaron racute -80
KPX Tcaron rcommaaccent -80
KPX Tcaron semicolon -40
KPX Tcaron u -90
KPX Tcaron uacute -90
KPX Tcaron ucircumflex -90
KPX Tcaron udieresis -90
KPX Tcaron ugrave -90
KPX Tcaron uhungarumlaut -90
KPX Tcaron umacron -90
KPX Tcaron uogonek -90
KPX Tcaron uring -90
KPX Tcaron w -60
KPX Tcaron y -60
KPX Tcaron yacute -60
KPX Tcaron ydieresis -60
KPX Tcommaaccent A -90
KPX Tcommaaccent Aacute -90
KPX Tcommaaccent Abreve -90
KPX Tcommaaccent Acircumflex -90
KPX Tcommaaccent Adieresis -90
KPX Tcommaaccent Agrave -90
KPX Tcommaaccent Amacron -90
KPX Tcommaaccent Aogonek -90
KPX Tcommaaccent Aring -90
KPX Tcommaaccent Atilde -90
KPX Tcommaaccent O -40
KPX Tcommaaccent Oacute -40
KPX Tcommaaccent Ocircumflex -40
KPX Tcommaaccent Odieresis -40
KPX Tcommaaccent Ograve -40
KPX Tcommaaccent Ohungarumlaut -40
KPX Tcommaaccent Omacron -40
KPX Tcommaaccent Oslash -40
KPX Tcommaaccent Otilde -40
KPX Tcommaaccent a -80
KPX Tcommaaccent aacute -80
KPX Tcommaaccent abreve -80
KPX Tcommaaccent acircumflex -80
KPX Tcommaaccent adieresis -80
KPX Tcommaaccent agrave -80
KPX Tcommaaccent amacron -80
KPX Tcommaaccent aogonek -80
KPX Tcommaaccent aring -80
KPX Tcommaaccent atilde -80
KPX Tcommaaccent colon -40
KPX Tcommaaccent comma -80
KPX Tcommaaccent e -60
KPX Tcommaaccent eacute -60
KPX Tcommaaccent ecaron -60
KPX Tcommaaccent ecircumflex -60
KPX Tcommaaccent edieresis -60
KPX Tcommaaccent edotaccent -60
KPX Tcommaaccent egrave -60
KPX Tcommaaccent emacron -60
KPX Tcommaaccent eogonek -60
KPX Tcommaaccent hyphen -120
KPX Tcommaaccent o -80
KPX Tcommaaccent oacute -80
KPX Tcommaaccent ocircumflex -80
KPX Tcommaaccent odieresis -80
KPX Tcommaaccent ograve -80
KPX Tcommaaccent ohungarumlaut -80
KPX Tcommaaccent omacron -80
KPX Tcommaaccent oslash -80
KPX Tcommaaccent otilde -80
KPX Tcommaaccent period -80
KPX Tcommaaccent r -80
KPX Tcommaaccent racute -80
KPX Tcommaaccent rcommaaccent -80
KPX Tcommaaccent semicolon -40
KPX Tcommaaccent u -90
KPX Tcommaaccent uacute -90
KPX Tcommaaccent ucircumflex -90
KPX Tcommaaccent udieresis -90
KPX Tcommaaccent ugrave -90
KPX Tcommaaccent uhungarumlaut -90
KPX Tcommaaccent umacron -90
KPX Tcommaaccent uogonek -90
KPX Tcommaaccent uring -90
KPX Tcommaaccent w -60
KPX Tcommaaccent y -60
KPX Tcommaaccent yacute -60
KPX Tcommaaccent ydieresis -60
KPX U A -50
KPX U Aacute -50
KPX U Abreve -50
KPX U Acircumflex -50
KPX U Adieresis -50
KPX U Agrave -50
KPX U Amacron -50
KPX U Aogonek -50
KPX U Aring -50
KPX U Atilde -50
KPX U comma -30
KPX U period -30
KPX Uacute A -50
KPX Uacute Aacute -50
KPX Uacute Abreve -50
KPX Uacute Acircumflex -50
KPX Uacute Adieresis -50
KPX Uacute Agrave -50
KPX Uacute Amacron -50
KPX Uacute Aogonek -50
KPX Uacute Aring -50
KPX Uacute Atilde -50
KPX Uacute comma -30
KPX Uacute period -30
KPX Ucircumflex A -50
KPX Ucircumflex Aacute -50
KPX Ucircumflex Abreve -50
KPX Ucircumflex Acircumflex -50
KPX Ucircumflex Adieresis -50
KPX Ucircumflex Agrave -50
KPX Ucircumflex Amacron -50
KPX Ucircumflex Aogonek -50
KPX Ucircumflex Aring -50
KPX Ucircumflex Atilde -50
KPX Ucircumflex comma -30
KPX Ucircumflex period -30
KPX Udieresis A -50
KPX Udieresis Aacute -50
KPX Udieresis Abreve -50
KPX Udieresis Acircumflex -50
KPX Udieresis Adieresis -50
KPX Udieresis Agrave -50
KPX Udieresis Amacron -50
KPX Udieresis Aogonek -50
KPX Udieresis Aring -50
KPX Udieresis Atilde -50
KPX Udieresis comma -30
KPX Udieresis period -30
KPX Ugrave A -50
KPX Ugrave Aacute -50
KPX Ugrave Abreve -50
KPX Ugrave Acircumflex -50
KPX Ugrave Adieresis -50
KPX Ugrave Agrave -50
KPX Ugrave Amacron -50
KPX Ugrave Aogonek -50
KPX Ugrave Aring -50
KPX Ugrave Atilde -50
KPX Ugrave comma -30
KPX Ugrave period -30
KPX Uhungarumlaut A -50
KPX Uhungarumlaut Aacute -50
KPX Uhungarumlaut Abreve -50
KPX Uhungarumlaut Acircumflex -50
KPX Uhungarumlaut Adieresis -50
KPX Uhungarumlaut Agrave -50
KPX Uhungarumlaut Amacron -50
KPX Uhungarumlaut Aogonek -50
KPX Uhungarumlaut Aring -50
KPX Uhungarumlaut Atilde -50
KPX Uhungarumlaut comma -30
KPX Uhungarumlaut period -30
KPX Umacron A -50
KPX Umacron Aacute -50
KPX Umacron Abreve -50
KPX Umacron Acircumflex -50
KPX Umacron Adieresis -50
KPX Umacron Agrave -50
KPX Umacron Amacron -50
KPX Umacron Aogonek -50
KPX Umacron Aring -50
KPX Umacron Atilde -50
KPX Umacron comma -30
KPX Umacron period -30
KPX Uogonek A -50
KPX Uogonek Aacute -50
KPX Uogonek Abreve -50
KPX Uogonek Acircumflex -50
KPX Uogonek Adieresis -50
KPX Uogonek Agrave -50
KPX Uogonek Amacron -50
KPX Uogonek Aogonek -50
KPX Uogonek Aring -50
KPX Uogonek Atilde -50
KPX Uogonek comma -30
KPX Uogonek period -30
KPX Uring A -50
KPX Uring Aacute -50
KPX Uring Abreve -50
KPX Uring Acircumflex -50
KPX Uring Adieresis -50
KPX Uring Agrave -50
KPX Uring Amacron -50
KPX Uring Aogonek -50
KPX Uring Aring -50
KPX Uring Atilde -50
KPX Uring comma -30
KPX Uring period -30
KPX V A -80
KPX V Aacute -80
KPX V Abreve -80
KPX V Acircumflex -80
KPX V Adieresis -80
KPX V Agrave -80
KPX V Amacron -80
KPX V Aogonek -80
KPX V Aring -80
KPX V Atilde -80
KPX V G -50
KPX V Gbreve -50
KPX V Gcommaaccent -50
KPX V O -50
KPX V Oacute -50
KPX V Ocircumflex -50
KPX V Odieresis -50
KPX V Ograve -50
KPX V Ohungarumlaut -50
KPX V Omacron -50
KPX V Oslash -50
KPX V Otilde -50
KPX V a -60
KPX V aacute -60
KPX V abreve -60
KPX V acircumflex -60
KPX V adieresis -60
KPX V agrave -60
KPX V amacron -60
KPX V aogonek -60
KPX V aring -60
KPX V atilde -60
KPX V colon -40
KPX V comma -120
KPX V e -50
KPX V eacute -50
KPX V ecaron -50
KPX V ecircumflex -50
KPX V edieresis -50
KPX V edotaccent -50
KPX V egrave -50
KPX V emacron -50
KPX V eogonek -50
KPX V hyphen -80
KPX V o -90
KPX V oacute -90
KPX V ocircumflex -90
KPX V odieresis -90
KPX V ograve -90
KPX V ohungarumlaut -90
KPX V omacron -90
KPX V oslash -90
KPX V otilde -90
KPX V period -120
KPX V semicolon -40
KPX V u -60
KPX V uacute -60
KPX V ucircumflex -60
KPX V udieresis -60
KPX V ugrave -60
KPX V uhungarumlaut -60
KPX V umacron -60
KPX V uogonek -60
KPX V uring -60
KPX W A -60
KPX W Aacute -60
KPX W Abreve -60
KPX W Acircumflex -60
KPX W Adieresis -60
KPX W Agrave -60
KPX W Amacron -60
KPX W Aogonek -60
KPX W Aring -60
KPX W Atilde -60
KPX W O -20
KPX W Oacute -20
KPX W Ocircumflex -20
KPX W Odieresis -20
KPX W Ograve -20
KPX W Ohungarumlaut -20
KPX W Omacron -20
KPX W Oslash -20
KPX W Otilde -20
KPX W a -40
KPX W aacute -40
KPX W abreve -40
KPX W acircumflex -40
KPX W adieresis -40
KPX W agrave -40
KPX W amacron -40
KPX W aogonek -40
KPX W aring -40
KPX W atilde -40
KPX W colon -10
KPX W comma -80
KPX W e -35
KPX W eacute -35
KPX W ecaron -35
KPX W ecircumflex -35
KPX W edieresis -35
KPX W edotaccent -35
KPX W egrave -35
KPX W emacron -35
KPX W eogonek -35
KPX W hyphen -40
KPX W o -60
KPX W oacute -60
KPX W ocircumflex -60
KPX W odieresis -60
KPX W ograve -60
KPX W ohungarumlaut -60
KPX W omacron -60
KPX W oslash -60
KPX W otilde -60
KPX W period -80
KPX W semicolon -10
KPX W u -45
KPX W uacute -45
KPX W ucircumflex -45
KPX W udieresis -45
KPX W ugrave -45
KPX W uhungarumlaut -45
KPX W umacron -45
KPX W uogonek -45
KPX W uring -45
KPX W y -20
KPX W yacute -20
KPX W ydieresis -20
KPX Y A -110
KPX Y Aacute -110
KPX Y Abreve -110
KPX Y Acircumflex -110
KPX Y Adieresis -110
KPX Y Agrave -110
KPX Y Amacron -110
KPX Y Aogonek -110
KPX Y Aring -110
KPX Y Atilde -110
KPX Y O -70
KPX Y Oacute -70
KPX Y Ocircumflex -70
KPX Y Odieresis -70
KPX Y Ograve -70
KPX Y Ohungarumlaut -70
KPX Y Omacron -70
KPX Y Oslash -70
KPX Y Otilde -70
KPX Y a -90
KPX Y aacute -90
KPX Y abreve -90
KPX Y acircumflex -90
KPX Y adieresis -90
KPX Y agrave -90
KPX Y amacron -90
KPX Y aogonek -90
KPX Y aring -90
KPX Y atilde -90
KPX Y colon -50
KPX Y comma -100
KPX Y e -80
KPX Y eacute -80
KPX Y ecaron -80
KPX Y ecircumflex -80
KPX Y edieresis -80
KPX Y edotaccent -80
KPX Y egrave -80
KPX Y emacron -80
KPX Y eogonek -80
KPX Y o -100
KPX Y oacute -100
KPX Y ocircumflex -100
KPX Y odieresis -100
KPX Y ograve -100
KPX Y ohungarumlaut -100
KPX Y omacron -100
KPX Y oslash -100
KPX Y otilde -100
KPX Y period -100
KPX Y semicolon -50
KPX Y u -100
KPX Y uacute -100
KPX Y ucircumflex -100
KPX Y udieresis -100
KPX Y ugrave -100
KPX Y uhungarumlaut -100
KPX Y umacron -100
KPX Y uogonek -100
KPX Y uring -100
KPX Yacute A -110
KPX Yacute Aacute -110
KPX Yacute Abreve -110
KPX Yacute Acircumflex -110
KPX Yacute Adieresis -110
KPX Yacute Agrave -110
KPX Yacute Amacron -110
KPX Yacute Aogonek -110
KPX Yacute Aring -110
KPX Yacute Atilde -110
KPX Yacute O -70
KPX Yacute Oacute -70
KPX Yacute Ocircumflex -70
KPX Yacute Odieresis -70
KPX Yacute Ograve -70
KPX Yacute Ohungarumlaut -70
KPX Yacute Omacron -70
KPX Yacute Oslash -70
KPX Yacute Otilde -70
KPX Yacute a -90
KPX Yacute aacute -90
KPX Yacute abreve -90
KPX Yacute acircumflex -90
KPX Yacute adieresis -90
KPX Yacute agrave -90
KPX Yacute amacron -90
KPX Yacute aogonek -90
KPX Yacute aring -90
KPX Yacute atilde -90
KPX Yacute colon -50
KPX Yacute comma -100
KPX Yacute e -80
KPX Yacute eacute -80
KPX Yacute ecaron -80
KPX Yacute ecircumflex -80
KPX Yacute edieresis -80
KPX Yacute edotaccent -80
KPX Yacute egrave -80
KPX Yacute emacron -80
KPX Yacute eogonek -80
KPX Yacute o -100
KPX Yacute oacute -100
KPX Yacute ocircumflex -100
KPX Yacute odieresis -100
KPX Yacute ograve -100
KPX Yacute ohungarumlaut -100
KPX Yacute omacron -100
KPX Yacute oslash -100
KPX Yacute otilde -100
KPX Yacute period -100
KPX Yacute semicolon -50
KPX Yacute u -100
KPX Yacute uacute -100
KPX Yacute ucircumflex -100
KPX Yacute udieresis -100
KPX Yacute ugrave -100
KPX Yacute uhungarumlaut -100
KPX Yacute umacron -100
KPX Yacute uogonek -100
KPX Yacute uring -100
KPX Ydieresis A -110
KPX Ydieresis Aacute -110
KPX Ydieresis Abreve -110
KPX Ydieresis Acircumflex -110
KPX Ydieresis Adieresis -110
KPX Ydieresis Agrave -110
KPX Ydieresis Amacron -110
KPX Ydieresis Aogonek -110
KPX Ydieresis Aring -110
KPX Ydieresis Atilde -110
KPX Ydieresis O -70
KPX Ydieresis Oacute -70
KPX Ydieresis Ocircumflex -70
KPX Ydieresis Odieresis -70
KPX Ydieresis Ograve -70
KPX Ydieresis Ohungarumlaut -70
KPX Ydieresis Omacron -70
KPX Ydieresis Oslash -70
KPX Ydieresis Otilde -70
KPX Ydieresis a -90
KPX Ydieresis aacute -90
KPX Ydieresis abreve -90
KPX Ydieresis acircumflex -90
KPX Ydieresis adieresis -90
KPX Ydieresis agrave -90
KPX Ydieresis amacron -90
KPX Ydieresis aogonek -90
KPX Ydieresis aring -90
KPX Ydieresis atilde -90
KPX Ydieresis colon -50
KPX Ydieresis comma -100
KPX Ydieresis e -80
KPX Ydieresis eacute -80
KPX Ydieresis ecaron -80
KPX Ydieresis ecircumflex -80
KPX Ydieresis edieresis -80
KPX Ydieresis edotaccent -80
KPX Ydieresis egrave -80
KPX Ydieresis emacron -80
KPX Ydieresis eogonek -80
KPX Ydieresis o -100
KPX Ydieresis oacute -100
KPX Ydieresis ocircumflex -100
KPX Ydieresis odieresis -100
KPX Ydieresis ograve -100
KPX Ydieresis ohungarumlaut -100
KPX Ydieresis omacron -100
KPX Ydieresis oslash -100
KPX Ydieresis otilde -100
KPX Ydieresis period -100
KPX Ydieresis semicolon -50
KPX Ydieresis u -100
KPX Ydieresis uacute -100
KPX Ydieresis ucircumflex -100
KPX Ydieresis udieresis -100
KPX Ydieresis ugrave -100
KPX Ydieresis uhungarumlaut -100
KPX Ydieresis umacron -100
KPX Ydieresis uogonek -100
KPX Ydieresis uring -100
KPX a g -10
KPX a gbreve -10
KPX a gcommaaccent -10
KPX a v -15
KPX a w -15
KPX a y -20
KPX a yacute -20
KPX a ydieresis -20
KPX aacute g -10
KPX aacute gbreve -10
KPX aacute gcommaaccent -10
KPX aacute v -15
KPX aacute w -15
KPX aacute y -20
KPX aacute yacute -20
KPX aacute ydieresis -20
KPX abreve g -10
KPX abreve gbreve -10
KPX abreve gcommaaccent -10
KPX abreve v -15
KPX abreve w -15
KPX abreve y -20
KPX abreve yacute -20
KPX abreve ydieresis -20
KPX acircumflex g -10
KPX acircumflex gbreve -10
KPX acircumflex gcommaaccent -10
KPX acircumflex v -15
KPX acircumflex w -15
KPX acircumflex y -20
KPX acircumflex yacute -20
KPX acircumflex ydieresis -20
KPX adieresis g -10
KPX adieresis gbreve -10
KPX adieresis gcommaaccent -10
KPX adieresis v -15
KPX adieresis w -15
KPX adieresis y -20
KPX adieresis yacute -20
KPX adieresis ydieresis -20
KPX agrave g -10
KPX agrave gbreve -10
KPX agrave gcommaaccent -10
KPX agrave v -15
KPX agrave w -15
KPX agrave y -20
KPX agrave yacute -20
KPX agrave ydieresis -20
KPX amacron g -10
KPX amacron gbreve -10
KPX amacron gcommaaccent -10
KPX amacron v -15
KPX amacron w -15
KPX amacron y -20
KPX amacron yacute -20
KPX amacron ydieresis -20
KPX aogonek g -10
KPX aogonek gbreve -10
KPX aogonek gcommaaccent -10
KPX aogonek v -15
KPX aogonek w -15
KPX aogonek y -20
KPX aogonek yacute -20
KPX aogonek ydieresis -20
KPX aring g -10
KPX aring gbreve -10
KPX aring gcommaaccent -10
KPX aring v -15
KPX aring w -15
KPX aring y -20
KPX aring yacute -20
KPX aring ydieresis -20
KPX atilde g -10
KPX atilde gbreve -10
KPX atilde gcommaaccent -10
KPX atilde v -15
KPX atilde w -15
KPX atilde y -20
KPX atilde yacute -20
KPX atilde ydieresis -20
KPX b l -10
KPX b lacute -10
KPX b lcommaaccent -10
KPX b lslash -10
KPX b u -20
KPX b uacute -20
KPX b ucircumflex -20
KPX b udieresis -20
KPX b ugrave -20
KPX b uhungarumlaut -20
KPX b umacron -20
KPX b uogonek -20
KPX b uring -20
KPX b v -20
KPX b y -20
KPX b yacute -20
KPX b ydieresis -20
KPX c h -10
KPX c k -20
KPX c kcommaaccent -20
KPX c l -20
KPX c lacute -20
KPX c lcommaaccent -20
KPX c lslash -20
KPX c y -10
KPX c yacute -10
KPX c ydieresis -10
KPX cacute h -10
KPX cacute k -20
KPX cacute kcommaaccent -20
KPX cacute l -20
KPX cacute lacute -20
KPX cacute lcommaaccent -20
KPX cacute lslash -20
KPX cacute y -10
KPX cacute yacute -10
KPX cacute ydieresis -10
KPX ccaron h -10
KPX ccaron k -20
KPX ccaron kcommaaccent -20
KPX ccaron l -20
KPX ccaron lacute -20
KPX ccaron lcommaaccent -20
KPX ccaron lslash -20
KPX ccaron y -10
KPX ccaron yacute -10
KPX ccaron ydieresis -10
KPX ccedilla h -10
KPX ccedilla k -20
KPX ccedilla kcommaaccent -20
KPX ccedilla l -20
KPX ccedilla lacute -20
KPX ccedilla lcommaaccent -20
KPX ccedilla lslash -20
KPX ccedilla y -10
KPX ccedilla yacute -10
KPX ccedilla ydieresis -10
KPX colon space -40
KPX comma quotedblright -120
KPX comma quoteright -120
KPX comma space -40
KPX d d -10
KPX d dcroat -10
KPX d v -15
KPX d w -15
KPX d y -15
KPX d yacute -15
KPX d ydieresis -15
KPX dcroat d -10
KPX dcroat dcroat -10
KPX dcroat v -15
KPX dcroat w -15
KPX dcroat y -15
KPX dcroat yacute -15
KPX dcroat ydieresis -15
KPX e comma 10
KPX e period 20
KPX e v -15
KPX e w -15
KPX e x -15
KPX e y -15
KPX e yacute -15
KPX e ydieresis -15
KPX eacute comma 10
KPX eacute period 20
KPX eacute v -15
KPX eacute w -15
KPX eacute x -15
KPX eacute y -15
KPX eacute yacute -15
KPX eacute ydieresis -15
KPX ecaron comma 10
KPX ecaron period 20
KPX ecaron v -15
KPX ecaron w -15
KPX ecaron x -15
KPX ecaron y -15
KPX ecaron yacute -15
KPX ecaron ydieresis -15
KPX ecircumflex comma 10
KPX ecircumflex period 20
KPX ecircumflex v -15
KPX ecircumflex w -15
KPX ecircumflex x -15
KPX ecircumflex y -15
KPX ecircumflex yacute -15
KPX ecircumflex ydieresis -15
KPX edieresis comma 10
KPX edieresis period 20
KPX edieresis v -15
KPX edieresis w -15
KPX edieresis x -15
KPX edieresis y -15
KPX edieresis yacute -15
KPX edieresis ydieresis -15
KPX edotaccent comma 10
KPX edotaccent period 20
KPX edotaccent v -15
KPX edotaccent w -15
KPX edotaccent x -15
KPX edotaccent y -15
KPX edotaccent yacute -15
KPX edotaccent ydieresis -15
KPX egrave comma 10
KPX egrave period 20
KPX egrave v -15
KPX egrave w -15
KPX egrave x -15
KPX egrave y -15
KPX egrave yacute -15
KPX egrave ydieresis -15
KPX emacron comma 10
KPX emacron period 20
KPX emacron v -15
KPX emacron w -15
KPX emacron x -15
KPX emacron y -15
KPX emacron yacute -15
KPX emacron ydieresis -15
KPX eogonek comma 10
KPX eogonek period 20
KPX eogonek v -15
KPX eogonek w -15
KPX eogonek x -15
KPX eogonek y -15
KPX eogonek yacute -15
KPX eogonek ydieresis -15
KPX f comma -10
KPX f e -10
KPX f eacute -10
KPX f ecaron -10
KPX f ecircumflex -10
KPX f edieresis -10
KPX f edotaccent -10
KPX f egrave -10
KPX f emacron -10
KPX f eogonek -10
KPX f o -20
KPX f oacute -20
KPX f ocircumflex -20
KPX f odieresis -20
KPX f ograve -20
KPX f ohungarumlaut -20
KPX f omacron -20
KPX f oslash -20
KPX f otilde -20
KPX f period -10
KPX f quotedblright 30
KPX f quoteright 30
KPX g e 10
KPX g eacute 10
KPX g ecaron 10
KPX g ecircumflex 10
KPX g edieresis 10
KPX g edotaccent 10
KPX g egrave 10
KPX g emacron 10
KPX g eogonek 10
KPX g g -10
KPX g gbreve -10
KPX g gcommaaccent -10
KPX gbreve e 10
KPX gbreve eacute 10
KPX gbreve ecaron 10
KPX gbreve ecircumflex 10
KPX gbreve edieresis 10
KPX gbreve edotaccent 10
KPX gbreve egrave 10
KPX gbreve emacron 10
KPX gbreve eogonek 10
KPX gbreve g -10
KPX gbreve gbreve -10
KPX gbreve gcommaaccent -10
KPX gcommaaccent e 10
KPX gcommaaccent eacute 10
KPX gcommaaccent ecaron 10
KPX gcommaaccent ecircumflex 10
KPX gcommaaccent edieresis 10
KPX gcommaaccent edotaccent 10
KPX gcommaaccent egrave 10
KPX gcommaaccent emacron 10
KPX gcommaaccent eogonek 10
KPX gcommaaccent g -10
KPX gcommaaccent gbreve -10
KPX gcommaaccent gcommaaccent -10
KPX h y -20
KPX h yacute -20
KPX h ydieresis -20
KPX k o -15
KPX k oacute -15
KPX k ocircumflex -15
KPX k odieresis -15
KPX k ograve -15
KPX k ohungarumlaut -15
KPX k omacron -15
KPX k oslash -15
KPX k otilde -15
KPX kcommaaccent o -15
KPX kcommaaccent oacute -15
KPX kcommaaccent ocircumflex -15
KPX kcommaaccent odieresis -15
KPX kcommaaccent ograve -15
KPX kcommaaccent ohungarumlaut -15
KPX kcommaaccent omacron -15
KPX kcommaaccent oslash -15
KPX kcommaaccent otilde -15
KPX l w -15
KPX l y -15
KPX l yacute -15
KPX l ydieresis -15
KPX lacute w -15
KPX lacute y -15
KPX lacute yacute -15
KPX lacute ydieresis -15
KPX lcommaaccent w -15
KPX lcommaaccent y -15
KPX lcommaaccent yacute -15
KPX lcommaaccent ydieresis -15
KPX lslash w -15
KPX lslash y -15
KPX lslash yacute -15
KPX lslash ydieresis -15
KPX m u -20
KPX m uacute -20
KPX m ucircumflex -20
KPX m udieresis -20
KPX m ugrave -20
KPX m uhungarumlaut -20
KPX m umacron -20
KPX m uogonek -20
KPX m uring -20
KPX m y -30
KPX m yacute -30
KPX m ydieresis -30
KPX n u -10
KPX n uacute -10
KPX n ucircumflex -10
KPX n udieresis -10
KPX n ugrave -10
KPX n uhungarumlaut -10
KPX n umacron -10
KPX n uogonek -10
KPX n uring -10
KPX n v -40
KPX n y -20
KPX n yacute -20
KPX n ydieresis -20
KPX nacute u -10
KPX nacute uacute -10
KPX nacute ucircumflex -10
KPX nacute udieresis -10
KPX nacute ugrave -10
KPX nacute uhungarumlaut -10
KPX nacute umacron -10
KPX nacute uogonek -10
KPX nacute uring -10
KPX nacute v -40
KPX nacute y -20
KPX nacute yacute -20
KPX nacute ydieresis -20
KPX ncaron u -10
KPX ncaron uacute -10
KPX ncaron ucircumflex -10
KPX ncaron udieresis -10
KPX ncaron ugrave -10
KPX ncaron uhungarumlaut -10
KPX ncaron umacron -10
KPX ncaron uogonek -10
KPX ncaron uring -10
KPX ncaron v -40
KPX ncaron y -20
KPX ncaron yacute -20
KPX ncaron ydieresis -20
KPX ncommaaccent u -10
KPX ncommaaccent uacute -10
KPX ncommaaccent ucircumflex -10
KPX ncommaaccent udieresis -10
KPX ncommaaccent ugrave -10
KPX ncommaaccent uhungarumlaut -10
KPX ncommaaccent umacron -10
KPX ncommaaccent uogonek -10
KPX ncommaaccent uring -10
KPX ncommaaccent v -40
KPX ncommaaccent y -20
KPX ncommaaccent yacute -20
KPX ncommaaccent ydieresis -20
KPX ntilde u -10
KPX ntilde uacute -10
KPX ntilde ucircumflex -10
KPX ntilde udieresis -10
KPX ntilde ugrave -10
KPX ntilde uhungarumlaut -10
KPX ntilde umacron -10
KPX ntilde uogonek -10
KPX ntilde uring -10
KPX ntilde v -40
KPX ntilde y -20
KPX ntilde yacute -20
KPX ntilde ydieresis -20
KPX o v -20
KPX o w -15
KPX o x -30
KPX o y -20
KPX o yacute -20
KPX o ydieresis -20
KPX oacute v -20
KPX oacute w -15
KPX oacute x -30
KPX oacute y -20
KPX oacute yacute -20
KPX oacute ydieresis -20
KPX ocircumflex v -20
KPX ocircumflex w -15
KPX ocircumflex x -30
KPX ocircumflex y -20
KPX ocircumflex yacute -20
KPX ocircumflex ydieresis -20
KPX odieresis v -20
KPX odieresis w -15
KPX odieresis x -30
KPX odieresis y -20
KPX odieresis yacute -20
KPX odieresis ydieresis -20
KPX ograve v -20
KPX ograve w -15
KPX ograve x -30
KPX ograve y -20
KPX ograve yacute -20
KPX ograve ydieresis -20
KPX ohungarumlaut v -20
KPX ohungarumlaut w -15
KPX ohungarumlaut x -30
KPX ohungarumlaut y -20
KPX ohungarumlaut yacute -20
KPX ohungarumlaut ydieresis -20
KPX omacron v -20
KPX omacron w -15
KPX omacron x -30
KPX omacron y -20
KPX omacron yacute -20
KPX omacron ydieresis -20
KPX oslash v -20
KPX oslash w -15
KPX oslash x -30
KPX oslash y -20
KPX oslash yacute -20
KPX oslash ydieresis -20
KPX otilde v -20
KPX otilde w -15
KPX otilde x -30
KPX otilde y -20
KPX otilde yacute -20
KPX otilde ydieresis -20
KPX p y -15
KPX p yacute -15
KPX p ydieresis -15
KPX period quotedblright -120
KPX period quoteright -120
KPX period space -40
KPX quotedblright space -80
KPX quoteleft quoteleft -46
KPX quoteright d -80
KPX quoteright dcroat -80
KPX quoteright l -20
KPX quoteright lacute -20
KPX quoteright lcommaaccent -20
KPX quoteright lslash -20
KPX quoteright quoteright -46
KPX quoteright r -40
KPX quoteright racute -40
KPX quoteright rcaron -40
KPX quoteright rcommaaccent -40
KPX quoteright s -60
KPX quoteright sacute -60
KPX quoteright scaron -60
KPX quoteright scedilla -60
KPX quoteright scommaaccent -60
KPX quoteright space -80
KPX quoteright v -20
KPX r c -20
KPX r cacute -20
KPX r ccaron -20
KPX r ccedilla -20
KPX r comma -60
KPX r d -20
KPX r dcroat -20
KPX r g -15
KPX r gbreve -15
KPX r gcommaaccent -15
KPX r hyphen -20
KPX r o -20
KPX r oacute -20
KPX r ocircumflex -20
KPX r odieresis -20
KPX r ograve -20
KPX r ohungarumlaut -20
KPX r omacron -20
KPX r oslash -20
KPX r otilde -20
KPX r period -60
KPX r q -20
KPX r s -15
KPX r sacute -15
KPX r scaron -15
KPX r scedilla -15
KPX r scommaaccent -15
KPX r t 20
KPX r tcommaaccent 20
KPX r v 10
KPX r y 10
KPX r yacute 10
KPX r ydieresis 10
KPX racute c -20
KPX racute cacute -20
KPX racute ccaron -20
KPX racute ccedilla -20
KPX racute comma -60
KPX racute d -20
KPX racute dcroat -20
KPX racute g -15
KPX racute gbreve -15
KPX racute gcommaaccent -15
KPX racute hyphen -20
KPX racute o -20
KPX racute oacute -20
KPX racute ocircumflex -20
KPX racute odieresis -20
KPX racute ograve -20
KPX racute ohungarumlaut -20
KPX racute omacron -20
KPX racute oslash -20
KPX racute otilde -20
KPX racute period -60
KPX racute q -20
KPX racute s -15
KPX racute sacute -15
KPX racute scaron -15
KPX racute scedilla -15
KPX racute scommaaccent -15
KPX racute t 20
KPX racute tcommaaccent 20
KPX racute v 10
KPX racute y 10
KPX racute yacute 10
KPX racute ydieresis 10
KPX rcaron c -20
KPX rcaron cacute -20
KPX rcaron ccaron -20
KPX rcaron ccedilla -20
KPX rcaron comma -60
KPX rcaron d -20
KPX rcaron dcroat -20
KPX rcaron g -15
KPX rcaron gbreve -15
KPX rcaron gcommaaccent -15
KPX rcaron hyphen -20
KPX rcaron o -20
KPX rcaron oacute -20
KPX rcaron ocircumflex -20
KPX rcaron odieresis -20
KPX rcaron ograve -20
KPX rcaron ohungarumlaut -20
KPX rcaron omacron -20
KPX rcaron oslash -20
KPX rcaron otilde -20
KPX rcaron period -60
KPX rcaron q -20
KPX rcaron s -15
KPX rcaron sacute -15
KPX rcaron scaron -15
KPX rcaron scedilla -15
KPX rcaron scommaaccent -15
KPX rcaron t 20
KPX rcaron tcommaaccent 20
KPX rcaron v 10
KPX rcaron y 10
KPX rcaron yacute 10
KPX rcaron ydieresis 10
KPX rcommaaccent c -20
KPX rcommaaccent cacute -20
KPX rcommaaccent ccaron -20
KPX rcommaaccent ccedilla -20
KPX rcommaaccent comma -60
KPX rcommaaccent d -20
KPX rcommaaccent dcroat -20
KPX rcommaaccent g -15
KPX rcommaaccent gbreve -15
KPX rcommaaccent gcommaaccent -15
KPX rcommaaccent hyphen -20
KPX rcommaaccent o -20
KPX rcommaaccent oacute -20
KPX rcommaaccent ocircumflex -20
KPX rcommaaccent odieresis -20
KPX rcommaaccent ograve -20
KPX rcommaaccent ohungarumlaut -20
KPX rcommaaccent omacron -20
KPX rcommaaccent oslash -20
KPX rcommaaccent otilde -20
KPX rcommaaccent period -60
KPX rcommaaccent q -20
KPX rcommaaccent s -15
KPX rcommaaccent sacute -15
KPX rcommaaccent scaron -15
KPX rcommaaccent scedilla -15
KPX rcommaaccent scommaaccent -15
KPX rcommaaccent t 20
KPX rcommaaccent tcommaaccent 20
KPX rcommaaccent v 10
KPX rcommaaccent y 10
KPX rcommaaccent yacute 10
KPX rcommaaccent ydieresis 10
KPX s w -15
KPX sacute w -15
KPX scaron w -15
KPX scedilla w -15
KPX scommaaccent w -15
KPX semicolon space -40
KPX space T -100
KPX space Tcaron -100
KPX space Tcommaaccent -100
KPX space V -80
KPX space W -80
KPX space Y -120
KPX space Yacute -120
KPX space Ydieresis -120
KPX space quotedblleft -80
KPX space quoteleft -60
KPX v a -20
KPX v aacute -20
KPX v abreve -20
KPX v acircumflex -20
KPX v adieresis -20
KPX v agrave -20
KPX v amacron -20
KPX v aogonek -20
KPX v aring -20
KPX v atilde -20
KPX v comma -80
KPX v o -30
KPX v oacute -30
KPX v ocircumflex -30
KPX v odieresis -30
KPX v ograve -30
KPX v ohungarumlaut -30
KPX v omacron -30
KPX v oslash -30
KPX v otilde -30
KPX v period -80
KPX w comma -40
KPX w o -20
KPX w oacute -20
KPX w ocircumflex -20
KPX w odieresis -20
KPX w ograve -20
KPX w ohungarumlaut -20
KPX w omacron -20
KPX w oslash -20
KPX w otilde -20
KPX w period -40
KPX x e -10
KPX x eacute -10
KPX x ecaron -10
KPX x ecircumflex -10
KPX x edieresis -10
KPX x edotaccent -10
KPX x egrave -10
KPX x emacron -10
KPX x eogonek -10
KPX y a -30
KPX y aacute -30
KPX y abreve -30
KPX y acircumflex -30
KPX y adieresis -30
KPX y agrave -30
KPX y amacron -30
KPX y aogonek -30
KPX y aring -30
KPX y atilde -30
KPX y comma -80
KPX y e -10
KPX y eacute -10
KPX y ecaron -10
KPX y ecircumflex -10
KPX y edieresis -10
KPX y edotaccent -10
KPX y egrave -10
KPX y emacron -10
KPX y eogonek -10
KPX y o -25
KPX y oacute -25
KPX y ocircumflex -25
KPX y odieresis -25
KPX y ograve -25
KPX y ohungarumlaut -25
KPX y omacron -25
KPX y oslash -25
KPX y otilde -25
KPX y period -80
KPX yacute a -30
KPX yacute aacute -30
KPX yacute abreve -30
KPX yacute acircumflex -30
KPX yacute adieresis -30
KPX yacute agrave -30
KPX yacute amacron -30
KPX yacute aogonek -30
KPX yacute aring -30
KPX yacute atilde -30
KPX yacute comma -80
KPX yacute e -10
KPX yacute eacute -10
KPX yacute ecaron -10
KPX yacute ecircumflex -10
KPX yacute edieresis -10
KPX yacute edotaccent -10
KPX yacute egrave -10
KPX yacute emacron -10
KPX yacute eogonek -10
KPX yacute o -25
KPX yacute oacute -25
KPX yacute ocircumflex -25
KPX yacute odieresis -25
KPX yacute ograve -25
KPX yacute ohungarumlaut -25
KPX yacute omacron -25
KPX yacute oslash -25
KPX yacute otilde -25
KPX yacute period -80
KPX ydieresis a -30
KPX ydieresis aacute -30
KPX ydieresis abreve -30
KPX ydieresis acircumflex -30
KPX ydieresis adieresis -30
KPX ydieresis agrave -30
KPX ydieresis amacron -30
KPX ydieresis aogonek -30
KPX ydieresis aring -30
KPX ydieresis atilde -30
KPX ydieresis comma -80
KPX ydieresis e -10
KPX ydieresis eacute -10
KPX ydieresis ecaron -10
KPX ydieresis ecircumflex -10
KPX ydieresis edieresis -10
KPX ydieresis edotaccent -10
KPX ydieresis egrave -10
KPX ydieresis emacron -10
KPX ydieresis eogonek -10
KPX ydieresis o -25
KPX ydieresis oacute -25
KPX ydieresis ocircumflex -25
KPX ydieresis odieresis -25
KPX ydieresis ograve -25
KPX ydieresis ohungarumlaut -25
KPX ydieresis omacron -25
KPX ydieresis oslash -25
KPX ydieresis otilde -25
KPX ydieresis period -80
KPX z e 10
KPX z eacute 10
KPX z ecaron 10
KPX z ecircumflex 10
KPX z edieresis 10
KPX z edotaccent 10
KPX z egrave 10
KPX z emacron 10
KPX z eogonek 10
KPX zacute e 10
KPX zacute eacute 10
KPX zacute ecaron 10
KPX zacute ecircumflex 10
KPX zacute edieresis 10
KPX zacute edotaccent 10
KPX zacute egrave 10
KPX zacute emacron 10
KPX zacute eogonek 10
KPX zcaron e 10
KPX zcaron eacute 10
KPX zcaron ecaron 10
KPX zcaron ecircumflex 10
KPX zcaron edieresis 10
KPX zcaron edotaccent 10
KPX zcaron egrave 10
KPX zcaron emacron 10
KPX zcaron eogonek 10
KPX zdotaccent e 10
KPX zdotaccent eacute 10
KPX zdotaccent ecaron 10
KPX zdotaccent ecircumflex 10
KPX zdotaccent edieresis 10
KPX zdotaccent edotaccent 10
KPX zdotaccent egrave 10
KPX zdotaccent emacron 10
KPX zdotaccent eogonek 10
EndKernPairs
EndKernData
EndFontMetrics
StartFontMetrics 4.1
Comment Copyright (c) 1985, 1987, 1989, 1990, 1997 Adobe Systems Incorporated.  All Rights Reserved.
Comment Creation Date: Thu May  1 12:45:12 1997
Comment UniqueID 43053
Comment VMusage 14482 68586
FontName Helvetica-BoldOblique
FullName Helvetica Bold Oblique
FamilyName Helvetica
Weight Bold
ItalicAngle -12
IsFixedPitch false
CharacterSet ExtendedRoman
FontBBox -174 -228 1114 962
UnderlinePosition -100
UnderlineThickness 50
Version 002.000
Notice Copyright (c) 1985, 1987, 1989, 1990, 1997 Adobe Systems Incorporated.  All Rights Reserved.Helvetica is a trademark of Linotype-Hell AG and/or its subsidiaries.
EncodingScheme WinAnsiEncoding
CapHeight 718
XHeight 532
Ascender 718
Descender -207
StdHW 118
StdVW 140
StartCharMetrics 317
C 32 ; WX 278 ; N space ; B 0 0 0 0 ;
C 160 ; WX 278 ; N space ; B 0 0 0 0 ;
C 33 ; WX 333 ; N exclam ; B 94 0 397 718 ;
C 34 ; WX 474 ; N quotedbl ; B 193 447 529 718 ;
C 35 ; WX 556 ; N numbersign ; B 60 0 644 698 ;
C 36 ; WX 556 ; N dollar ; B 67 -115 622 775 ;
C 37 ; WX 889 ; N percent ; B 136 -19 901 710 ;
C 38 ; WX 722 ; N ampersand ; B 89 -19 732 718 ;
C 146 ; WX 278 ; N quoteright ; B 167 445 362 718 ;
C 40 ; WX 333 ; N parenleft ; B 76 -208 470 734 ;
C 41 ; WX 333 ; N parenright ; B -25 -208 369 734 ;
C 42 ; WX 389 ; N asterisk ; B 146 387 481 718 ;
C 43 ; WX 584 ; N plus ; B 82 0 610 506 ;
C 44 ; WX 278 ; N comma ; B 28 -168 245 146 ;
C 45 ; WX 333 ; N hyphen ; B 73 215 379 345 ;
C 173 ; WX 333 ; N hyphen ; B 44 232 289 322 ;
C 46 ; WX 278 ; N period ; B 64 0 245 146 ;
C 47 ; WX 278 ; N slash ; B -37 -19 468 737 ;
C 48 ; WX 556 ; N zero ; B 86 -19 617 710 ;
C 49 ; WX 556 ; N one ; B 173 0 529 710 ;
C 50 ; WX 556 ; N two ; B 26 0 619 710 ;
C 51 ; WX 556 ; N three ; B 65 -19 608 710 ;
C 52 ; WX 556 ; N four ; B 60 0 598 710 ;
C 53 ; WX 556 ; N five ; B 64 -19 636 698 ;
C 54 ; WX 556 ; N six ; B 85 -19 619 710 ;
C 55 ; WX 556 ; N seven ; B 125 0 676 698 ;
C 56 ; WX 556 ; N eight ; B 69 -19 616 710 ;
C 57 ; WX 556 ; N nine ; B 78 -19 615 710 ;
C 58 ; WX 333 ; N colon ; B 92 0 351 512 ;
C 59 ; WX 333 ; N semicolon ; B 56 -168 351 512 ;
C 60 ; WX 584 ; N less ; B 82 -8 655 514 ;
C 61 ; WX 584 ; N equal ; B 58 87 633 419 ;
C 62 ; WX 584 ; N greater ; B 36 -8 609 514 ;
C 63 ; WX 611 ; N question ; B 165 0 671 727 ;
C 64 ; WX 975 ; N at ; B 186 -19 954 737 ;
C 65 ; WX 722 ; N A ; B 20 0 702 718 ;
C 66 ; WX 722 ; N B ; B 76 0 764 718 ;
C 67 ; WX 722 ; N C ; B 107 -19 789 737 ;
C 68 ; WX 722 ; N D ; B 76 0 777 718 ;
C 69 ; WX 667 ; N E ; B 76 0 757 718 ;
C 70 ; WX 611 ; N F ; B 76 0 740 718 ;
C 71 ; WX 778 ; N G ; B 108 -19 817 737 ;
C 72 ; WX 722 ; N H ; B 71 0 804 718 ;
C 73 ; WX 278 ; N I ; B 64 0 367 718 ;
C 74 ; WX 556 ; N J ; B 60 -18 637 718 ;
C 75 ; WX 722 ; N K ; B 87 0 858 718 ;
C 76 ; WX 611 ; N L ; B 76 0 611 718 ;
C 77 ; WX 833 ; N M ; B 69 0 918 718 ;
C 78 ; WX 722 ; N N ; B 69 0 807 718 ;
C 79 ; WX 778 ; N O ; B 107 -19 823 737 ;
C 80 ; WX 667 ; N P ; B 76 0 738 718 ;
C 81 ; WX 778 ; N Q ; B 107 -52 823 737 ;
C 82 ; WX 722 ; N R ; B 76 0 778 718 ;
C 83 ; WX 667 ; N S ; B 81 -19 718 737 ;
C 84 ; WX 611 ; N T ; B 140 0 751 718 ;
C 85 ; WX 722 ; N U ; B 116 -19 804 718 ;
C 86 ; WX 667 ; N V ; B 172 0 801 718 ;
C 87 ; WX 944 ; N W ; B 169 0 1082 718 ;
C 88 ; WX 667 ; N X ; B 14 0 791 718 ;
C 89 ; WX 667 ; N Y ; B 168 0 806 718 ;
C 90 ; WX 611 ; N Z ; B 25 0 737 718 ;
C 91 ; WX 333 ; N bracketleft ; B 21 -196 462 722 ;
C 92 ; WX 278 ; N backslash ; B 124 -19 307 737 ;
C 93 ; WX 333 ; N bracketright ; B -18 -196 423 722 ;
C 94 ; WX 584 ; N asciicircum ; B 131 323 591 698 ;
C 95 ; WX 556 ; N underscore ; B -27 -125 540 -75 ;
C 145 ; WX 278 ; N quoteleft ; B 165 454 361 727 ;
C 97 ; WX 556 ; N a ; B 55 -14 583 546 ;
C 98 ; WX 611 ; N b ; B 61 -14 645 718 ;
C 99 ; WX 556 ; N c ; B 79 -14 599 546 ;
C 100 ; WX 611 ; N d ; B 82 -14 704 718 ;
C 101 ; WX 556 ; N e ; B 70 -14 593 546 ;
C 102 ; WX 333 ; N f ; B 87 0 469 727 ; L i fi ; L l fl ;
C 103 ; WX 611 ; N g ; B 38 -217 666 546 ;
C 104 ; WX 611 ; N h ; B 65 0 629 718 ;
C 105 ; WX 278 ; N i ; B 69 0 363 725 ;
C 106 ; WX 278 ; N j ; B -42 -214 363 725 ;
C 107 ; WX 556 ; N k ; B 69 0 670 718 ;
C 108 ; WX 278 ; N l ; B 69 0 362 718 ;
C 109 ; WX 889 ; N m ; B 64 0 909 546 ;
C 110 ; WX 611 ; N n ; B 65 0 629 546 ;
C 111 ; WX 611 ; N o ; B 82 -14 643 546 ;
C 112 ; WX 611 ; N p ; B 18 -207 645 546 ;
C 113 ; WX 611 ; N q ; B 80 -207 665 546 ;
C 114 ; WX 389 ; N r ; B 64 0 489 546 ;
C 115 ; WX 556 ; N s ; B 63 -14 584 546 ;
C 116 ; WX 333 ; N t ; B 100 -6 422 676 ;
C 117 ; WX 611 ; N u ; B 98 -14 658 532 ;
C 118 ; WX 556 ; N v ; B 126 0 656 532 ;
C 119 ; WX 778 ; N w ; B 123 0 882 532 ;
C 120 ; WX 556 ; N x ; B 15 0 648 532 ;
C 121 ; WX 556 ; N y ; B 42 -214 652 532 ;
C 122 ; WX 500 ; N z ; B 20 0 583 532 ;
C 123 ; WX 389 ; N braceleft ; B 94 -196 518 722 ;
C 124 ; WX 280 ; N bar ; B 36 -225 361 775 ;
C 125 ; WX 389 ; N braceright ; B -18 -196 407 722 ;
C 126 ; WX 584 ; N asciitilde ; B 115 163 577 343 ;
C 161 ; WX 333 ; N exclamdown ; B 50 -186 353 532 ;
C 162 ; WX 556 ; N cent ; B 79 -118 599 628 ;
C 163 ; WX 556 ; N sterling ; B 50 -16 635 718 ;
C -1 ; WX 167 ; N fraction ; B -174 -19 487 710 ;
C 165 ; WX 556 ; N yen ; B 60 0 713 698 ;
C 131 ; WX 556 ; N florin ; B -50 -210 669 737 ;
C 167 ; WX 556 ; N section ; B 61 -184 598 727 ;
C 164 ; WX 556 ; N currency ; B 27 76 680 636 ;
C 39 ; WX 238 ; N quotesingle ; B 165 447 321 718 ;
C 147 ; WX 500 ; N quotedblleft ; B 160 454 588 727 ;
C 171 ; WX 556 ; N guillemotleft ; B 135 76 571 484 ;
C 139 ; WX 333 ; N guilsinglleft ; B 130 76 353 484 ;
C 155 ; WX 333 ; N guilsinglright ; B 99 76 322 484 ;
C -1 ; WX 611 ; N fi ; B 87 0 696 727 ;
C -1 ; WX 611 ; N fl ; B 87 0 695 727 ;
C 150 ; WX 556 ; N endash ; B 48 227 627 333 ;
C 134 ; WX 556 ; N dagger ; B 118 -171 626 718 ;
C 135 ; WX 556 ; N daggerdbl ; B 46 -171 628 718 ;
C 183 ; WX 278 ; N periodcentered ; B 110 172 276 334 ;
C 182 ; WX 556 ; N paragraph ; B 98 -191 688 700 ;
C 149 ; WX 350 ; N bullet ; B 83 194 420 524 ;
C 130 ; WX 278 ; N quotesinglbase ; B 41 -146 236 127 ;
C 132 ; WX 500 ; N quotedblbase ; B 36 -146 463 127 ;
C 148 ; WX 500 ; N quotedblright ; B 162 445 589 718 ;
C 187 ; WX 556 ; N guillemotright ; B 104 76 540 484 ;
C 133 ; WX 1000 ; N ellipsis ; B 92 0 939 146 ;
C 137 ; WX 1000 ; N perthousand ; B 76 -19 1038 710 ;
C 191 ; WX 611 ; N questiondown ; B 53 -195 559 532 ;
C 96 ; WX 333 ; N grave ; B 136 604 353 750 ;
C 180 ; WX 333 ; N acute ; B 236 604 515 750 ;
C 136 ; WX 333 ; N circumflex ; B 118 604 471 750 ;
C 152 ; WX 333 ; N tilde ; B 113 610 507 737 ;
C 175 ; WX 333 ; N macron ; B 122 604 483 678 ;
C -1 ; WX 333 ; N breve ; B 156 604 494 750 ;
C -1 ; WX 333 ; N dotaccent ; B 235 614 385 729 ;
C 168 ; WX 333 ; N dieresis ; B 137 614 482 729 ;
C -1 ; WX 333 ; N ring ; B 200 568 420 776 ;
C 184 ; WX 333 ; N cedilla ; B -37 -228 220 0 ;
C -1 ; WX 333 ; N hungarumlaut ; B 137 604 645 750 ;
C -1 ; WX 333 ; N ogonek ; B 41 -228 264 0 ;
C -1 ; WX 333 ; N caron ; B 149 604 502 750 ;
C 151 ; WX 1000 ; N emdash ; B 48 227 1071 333 ;
C 198 ; WX 1000 ; N AE ; B 5 0 1100 718 ;
C 170 ; WX 370 ; N ordfeminine ; B 125 401 465 737 ;
C -1 ; WX 611 ; N Lslash ; B 34 0 611 718 ;
C 216 ; WX 778 ; N Oslash ; B 35 -27 894 745 ;
C 140 ; WX 1000 ; N OE ; B 99 -19 1114 737 ;
C 186 ; WX 365 ; N ordmasculine ; B 123 401 485 737 ;
C 230 ; WX 889 ; N ae ; B 56 -14 923 546 ;
C -1 ; WX 278 ; N dotlessi ; B 69 0 322 532 ;
C -1 ; WX 278 ; N lslash ; B 40 0 407 718 ;
C 248 ; WX 611 ; N oslash ; B 22 -29 701 560 ;
C 156 ; WX 944 ; N oe ; B 82 -14 977 546 ;
C 223 ; WX 611 ; N germandbls ; B 69 -14 657 731 ;
C 207 ; WX 278 ; N Idieresis ; B 64 0 494 915 ;
C 233 ; WX 556 ; N eacute ; B 70 -14 627 750 ;
C -1 ; WX 556 ; N abreve ; B 55 -14 606 750 ;
C -1 ; WX 611 ; N uhungarumlaut ; B 98 -14 784 750 ;
C -1 ; WX 556 ; N ecaron ; B 70 -14 614 750 ;
C 159 ; WX 667 ; N Ydieresis ; B 168 0 806 915 ;
C 247 ; WX 584 ; N divide ; B 82 -42 610 548 ;
C 221 ; WX 667 ; N Yacute ; B 168 0 806 936 ;
C 194 ; WX 722 ; N Acircumflex ; B 20 0 706 936 ;
C 225 ; WX 556 ; N aacute ; B 55 -14 627 750 ;
C 219 ; WX 722 ; N Ucircumflex ; B 116 -19 804 936 ;
C 253 ; WX 556 ; N yacute ; B 42 -214 652 750 ;
C -1 ; WX 556 ; N scommaaccent ; B 63 -228 584 546 ;
C 234 ; WX 556 ; N ecircumflex ; B 70 -14 593 750 ;
C -1 ; WX 722 ; N Uring ; B 116 -19 804 962 ;
C 220 ; WX 722 ; N Udieresis ; B 116 -19 804 915 ;
C -1 ; WX 556 ; N aogonek ; B 55 -224 583 546 ;
C 218 ; WX 722 ; N Uacute ; B 116 -19 804 936 ;
C -1 ; WX 611 ; N uogonek ; B 98 -228 658 532 ;
C 203 ; WX 667 ; N Edieresis ; B 76 0 757 915 ;
C -1 ; WX 722 ; N Dcroat ; B 62 0 777 718 ;
C -1 ; WX 250 ; N commaaccent ; B 16 -228 188 -50 ;
C 169 ; WX 737 ; N copyright ; B 56 -19 835 737 ;
C -1 ; WX 667 ; N Emacron ; B 76 0 757 864 ;
C -1 ; WX 556 ; N ccaron ; B 79 -14 614 750 ;
C 229 ; WX 556 ; N aring ; B 55 -14 583 776 ;
C -1 ; WX 722 ; N Ncommaaccent ; B 69 -228 807 718 ;
C -1 ; WX 278 ; N lacute ; B 69 0 528 936 ;
C 224 ; WX 556 ; N agrave ; B 55 -14 583 750 ;
C -1 ; WX 611 ; N Tcommaaccent ; B 140 -228 751 718 ;
C -1 ; WX 722 ; N Cacute ; B 107 -19 789 936 ;
C 227 ; WX 556 ; N atilde ; B 55 -14 619 737 ;
C -1 ; WX 667 ; N Edotaccent ; B 76 0 757 915 ;
C 154 ; WX 556 ; N scaron ; B 63 -14 614 750 ;
C -1 ; WX 556 ; N scedilla ; B 63 -228 584 546 ;
C 237 ; WX 278 ; N iacute ; B 69 0 488 750 ;
C -1 ; WX 494 ; N lozenge ; B 90 0 564 745 ;
C -1 ; WX 722 ; N Rcaron ; B 76 0 778 936 ;
C -1 ; WX 778 ; N Gcommaaccent ; B 108 -228 817 737 ;
C 251 ; WX 611 ; N ucircumflex ; B 98 -14 658 750 ;
C 226 ; WX 556 ; N acircumflex ; B 55 -14 583 750 ;
C -1 ; WX 722 ; N Amacron ; B 20 0 718 864 ;
C -1 ; WX 389 ; N rcaron ; B 64 0 530 750 ;
C 231 ; WX 556 ; N ccedilla ; B 79 -228 599 546 ;
C -1 ; WX 611 ; N Zdotaccent ; B 25 0 737 915 ;
C 222 ; WX 667 ; N Thorn ; B 76 0 716 718 ;
C -1 ; WX 778 ; N Omacron ; B 107 -19 823 864 ;
C -1 ; WX 722 ; N Racute ; B 76 0 778 936 ;
C -1 ; WX 667 ; N Sacute ; B 81 -19 722 936 ;
C -1 ; WX 743 ; N dcaron ; B 82 -14 903 718 ;
C -1 ; WX 722 ; N Umacron ; B 116 -19 804 864 ;
C -1 ; WX 611 ; N uring ; B 98 -14 658 776 ;
C 179 ; WX 333 ; N threesuperior ; B 91 271 441 710 ;
C 210 ; WX 778 ; N Ograve ; B 107 -19 823 936 ;
C 192 ; WX 722 ; N Agrave ; B 20 0 702 936 ;
C -1 ; WX 722 ; N Abreve ; B 20 0 729 936 ;
C 215 ; WX 584 ; N multiply ; B 57 1 635 505 ;
C 250 ; WX 611 ; N uacute ; B 98 -14 658 750 ;
C -1 ; WX 611 ; N Tcaron ; B 140 0 751 936 ;
C -1 ; WX 494 ; N partialdiff ; B 43 -21 585 750 ;
C 255 ; WX 556 ; N ydieresis ; B 42 -214 652 729 ;
C -1 ; WX 722 ; N Nacute ; B 69 0 807 936 ;
C 238 ; WX 278 ; N icircumflex ; B 69 0 444 750 ;
C 202 ; WX 667 ; N Ecircumflex ; B 76 0 757 936 ;
C 228 ; WX 556 ; N adieresis ; B 55 -14 594 729 ;
C 235 ; WX 556 ; N edieresis ; B 70 -14 594 729 ;
C -1 ; WX 556 ; N cacute ; B 79 -14 627 750 ;
C -1 ; WX 611 ; N nacute ; B 65 0 654 750 ;
C -1 ; WX 611 ; N umacron ; B 98 -14 658 678 ;
C -1 ; WX 722 ; N Ncaron ; B 69 0 807 936 ;
C 205 ; WX 278 ; N Iacute ; B 64 0 528 936 ;
C 177 ; WX 584 ; N plusminus ; B 40 0 625 506 ;
C 166 ; WX 280 ; N brokenbar ; B 52 -150 345 700 ;
C 174 ; WX 737 ; N registered ; B 55 -19 834 737 ;
C -1 ; WX 778 ; N Gbreve ; B 108 -19 817 936 ;
C -1 ; WX 278 ; N Idotaccent ; B 64 0 397 915 ;
C -1 ; WX 600 ; N summation ; B 14 -10 670 706 ;
C 200 ; WX 667 ; N Egrave ; B 76 0 757 936 ;
C -1 ; WX 389 ; N racute ; B 64 0 543 750 ;
C -1 ; WX 611 ; N omacron ; B 82 -14 643 678 ;
C -1 ; WX 611 ; N Zacute ; B 25 0 737 936 ;
C 142 ; WX 611 ; N Zcaron ; B 25 0 737 936 ;
C -1 ; WX 549 ; N greaterequal ; B 26 0 629 704 ;
C 208 ; WX 722 ; N Eth ; B 62 0 777 718 ;
C 199 ; WX 722 ; N Ccedilla ; B 107 -228 789 737 ;
C -1 ; WX 278 ; N lcommaaccent ; B 30 -228 362 718 ;
C -1 ; WX 389 ; N tcaron ; B 100 -6 608 878 ;
C -1 ; WX 556 ; N eogonek ; B 70 -228 593 546 ;
C -1 ; WX 722 ; N Uogonek ; B 116 -228 804 718 ;
C 193 ; WX 722 ; N Aacute ; B 20 0 750 936 ;
C 196 ; WX 722 ; N Adieresis ; B 20 0 716 915 ;
C 232 ; WX 556 ; N egrave ; B 70 -14 593 750 ;
C -1 ; WX 500 ; N zacute ; B 20 0 599 750 ;
C -1 ; WX 278 ; N iogonek ; B -14 -224 363 725 ;
C 211 ; WX 778 ; N Oacute ; B 107 -19 823 936 ;
C 243 ; WX 611 ; N oacute ; B 82 -14 654 750 ;
C -1 ; WX 556 ; N amacron ; B 55 -14 595 678 ;
C -1 ; WX 556 ; N sacute ; B 63 -14 627 750 ;
C 239 ; WX 278 ; N idieresis ; B 69 0 455 729 ;
C 212 ; WX 778 ; N Ocircumflex ; B 107 -19 823 936 ;
C 217 ; WX 722 ; N Ugrave ; B 116 -19 804 936 ;
C -1 ; WX 612 ; N Delta ; B 6 0 608 688 ;
C 254 ; WX 611 ; N thorn ; B 18 -208 645 718 ;
C 178 ; WX 333 ; N twosuperior ; B 69 283 449 710 ;
C 214 ; WX 778 ; N Odieresis ; B 107 -19 823 915 ;
C 181 ; WX 611 ; N mu ; B 22 -207 658 532 ;
C 236 ; WX 278 ; N igrave ; B 69 0 326 750 ;
C -1 ; WX 611 ; N ohungarumlaut ; B 82 -14 784 750 ;
C -1 ; WX 667 ; N Eogonek ; B 76 -224 757 718 ;
C -1 ; WX 611 ; N dcroat ; B 82 -14 789 718 ;
C 190 ; WX 834 ; N threequarters ; B 99 -19 839 710 ;
C -1 ; WX 667 ; N Scedilla ; B 81 -228 718 737 ;
C -1 ; WX 400 ; N lcaron ; B 69 0 561 718 ;
C -1 ; WX 722 ; N Kcommaaccent ; B 87 -228 858 718 ;
C -1 ; WX 611 ; N Lacute ; B 76 0 611 936 ;
C 153 ; WX 1000 ; N trademark ; B 179 306 1109 718 ;
C -1 ; WX 556 ; N edotaccent ; B 70 -14 593 729 ;
C 204 ; WX 278 ; N Igrave ; B 64 0 367 936 ;
C -1 ; WX 278 ; N Imacron ; B 64 0 496 864 ;
C -1 ; WX 611 ; N Lcaron ; B 76 0 643 718 ;
C 189 ; WX 834 ; N onehalf ; B 132 -19 858 710 ;
C -1 ; WX 549 ; N lessequal ; B 29 0 676 704 ;
C 244 ; WX 611 ; N ocircumflex ; B 82 -14 643 750 ;
C 241 ; WX 611 ; N ntilde ; B 65 0 646 737 ;
C -1 ; WX 722 ; N Uhungarumlaut ; B 116 -19 880 936 ;
C 201 ; WX 667 ; N Eacute ; B 76 0 757 936 ;
C -1 ; WX 556 ; N emacron ; B 70 -14 595 678 ;
C -1 ; WX 611 ; N gbreve ; B 38 -217 666 750 ;
C 188 ; WX 834 ; N onequarter ; B 132 -19 806 710 ;
C 138 ; WX 667 ; N Scaron ; B 81 -19 718 936 ;
C -1 ; WX 667 ; N Scommaaccent ; B 81 -228 718 737 ;
C -1 ; WX 778 ; N Ohungarumlaut ; B 107 -19 908 936 ;
C 176 ; WX 400 ; N degree ; B 175 426 467 712 ;
C 242 ; WX 611 ; N ograve ; B 82 -14 643 750 ;
C -1 ; WX 722 ; N Ccaron ; B 107 -19 789 936 ;
C 249 ; WX 611 ; N ugrave ; B 98 -14 658 750 ;
C -1 ; WX 549 ; N radical ; B 112 -46 689 850 ;
C -1 ; WX 722 ; N Dcaron ; B 76 0 777 936 ;
C -1 ; WX 389 ; N rcommaaccent ; B 26 -228 489 546 ;
C 209 ; WX 722 ; N Ntilde ; B 69 0 807 923 ;
C 245 ; WX 611 ; N otilde ; B 82 -14 646 737 ;
C -1 ; WX 722 ; N Rcommaaccent ; B 76 -228 778 718 ;
C -1 ; WX 611 ; N Lcommaaccent ; B 76 -228 611 718 ;
C 195 ; WX 722 ; N Atilde ; B 20 0 741 923 ;
C -1 ; WX 722 ; N Aogonek ; B 20 -224 702 718 ;
C 197 ; WX 722 ; N Aring ; B 20 0 702 962 ;
C 213 ; WX 778 ; N Otilde ; B 107 -19 823 923 ;
C -1 ; WX 500 ; N zdotaccent ; B 20 0 583 729 ;
C -1 ; WX 667 ; N Ecaron ; B 76 0 757 936 ;
C -1 ; WX 278 ; N Iogonek ; B -41 -228 367 718 ;
C -1 ; WX 556 ; N kcommaaccent ; B 69 -228 670 718 ;
C -1 ; WX 584 ; N minus ; B 82 197 610 309 ;
C 206 ; WX 278 ; N Icircumflex ; B 64 0 484 936 ;
C -1 ; WX 611 ; N ncaron ; B 65 0 641 750 ;
C -1 ; WX 333 ; N tcommaaccent ; B 58 -228 422 676 ;
C 172 ; WX 584 ; N logicalnot ; B 105 108 633 419 ;
C 246 ; WX 611 ; N odieresis ; B 82 -14 643 729 ;
C 252 ; WX 611 ; N udieresis ; B 98 -14 658 729 ;
C -1 ; WX 549 ; N notequal ; B 32 -49 630 570 ;
C -1 ; WX 611 ; N gcommaaccent ; B 38 -217 666 850 ;
C 240 ; WX 611 ; N eth ; B 82 -14 670 737 ;
C 158 ; WX 500 ; N zcaron ; B 20 0 586 750 ;
C -1 ; WX 611 ; N ncommaaccent ; B 65 -228 629 546 ;
C 185 ; WX 333 ; N onesuperior ; B 148 283 388 710 ;
C -1 ; WX 278 ; N imacron ; B 69 0 429 678 ;
C 128 ; WX 556 ; N Euro ; B 0 0 0 0 ;
EndCharMetrics
StartKernData
StartKernPairs 2481
KPX A C -40
KPX A Cacute -40
KPX A Ccaron -40
KPX A Ccedilla -40
KPX A G -50
KPX A Gbreve -50
KPX A Gcommaaccent -50
KPX A O -40
KPX A Oacute -40
KPX A Ocircumflex -40
KPX A Odieresis -40
KPX A Ograve -40
KPX A Ohungarumlaut -40
KPX A Omacron -40
KPX A Oslash -40
KPX A Otilde -40
KPX A Q -40
KPX A T -90
KPX A Tcaron -90
KPX A Tcommaaccent -90
KPX A U -50
KPX A Uacute -50
KPX A Ucircumflex -50
KPX A Udieresis -50
KPX A Ugrave -50
KPX A Uhungarumlaut -50
KPX A Umacron -50
KPX A Uogonek -50
KPX A Uring -50
KPX A V -80
KPX A W -60
KPX A Y -110
KPX A Yacute -110
KPX A Ydieresis -110
KPX A u -30
KPX A uacute -30
KPX A ucircumflex -30
KPX A udieresis -30
KPX A ugrave -30
KPX A uhungarumlaut -30
KPX A umacron -30
KPX A uogonek -30
KPX A uring -30
KPX A v -40
KPX A w -30
KPX A y -30
KPX A yacute -30
KPX A ydieresis -30
KPX Aacute C -40
KPX Aacute Cacute -40
KPX Aacute Ccaron -40
KPX Aacute Ccedilla -40
KPX Aacute G -50
KPX Aacute Gbreve -50
KPX Aacute Gcommaaccent -50
KPX Aacute O -40
KPX Aacute Oacute -40
KPX Aacute Ocircumflex -40
KPX Aacute Odieresis -40
KPX Aacute Ograve -40
KPX Aacute Ohungarumlaut -40
KPX Aacute Omacron -40
KPX Aacute Oslash -40
KPX Aacute Otilde -40
KPX Aacute Q -40
KPX Aacute T -90
KPX Aacute Tcaron -90
KPX Aacute Tcommaaccent -90
KPX Aacute U -50
KPX Aacute Uacute -50
KPX Aacute Ucircumflex -50
KPX Aacute Udieresis -50
KPX Aacute Ugrave -50
KPX Aacute Uhungarumlaut -50
KPX Aacute Umacron -50
KPX Aacute Uogonek -50
KPX Aacute Uring -50
KPX Aacute V -80
KPX Aacute W -60
KPX Aacute Y -110
KPX Aacute Yacute -110
KPX Aacute Ydieresis -110
KPX Aacute u -30
KPX Aacute uacute -30
KPX Aacute ucircumflex -30
KPX Aacute udieresis -30
KPX Aacute ugrave -30
KPX Aacute uhungarumlaut -30
KPX Aacute umacron -30
KPX Aacute uogonek -30
KPX Aacute uring -30
KPX Aacute v -40
KPX Aacute w -30
KPX Aacute y -30
KPX Aacute yacute -30
KPX Aacute ydieresis -30
KPX Abreve C -40
KPX Abreve Cacute -40
KPX Abreve Ccaron -40
KPX Abreve Ccedilla -40
KPX Abreve G -50
KPX Abreve Gbreve -50
KPX Abreve Gcommaaccent -50
KPX Abreve O -40
KPX Abreve Oacute -40
KPX Abreve Ocircumflex -40
KPX Abreve Odieresis -40
KPX Abreve Ograve -40
KPX Abreve Ohungarumlaut -40
KPX Abreve Omacron -40
KPX Abreve Oslash -40
KPX Abreve Otilde -40
KPX Abreve Q -40
KPX Abreve T -90
KPX Abreve Tcaron -90
KPX Abreve Tcommaaccent -90
KPX Abreve U -50
KPX Abreve Uacute -50
KPX Abreve Ucircumflex -50
KPX Abreve Udieresis -50
KPX Abreve Ugrave -50
KPX Abreve Uhungarumlaut -50
KPX Abreve Umacron -50
KPX Abreve Uogonek -50
KPX Abreve Uring -50
KPX Abreve V -80
KPX Abreve W -60
KPX Abreve Y -110
KPX Abreve Yacute -110
KPX Abreve Ydieresis -110
KPX Abreve u -30
KPX Abreve uacute -30
KPX Abreve ucircumflex -30
KPX Abreve udieresis -30
KPX Abreve ugrave -30
KPX Abreve uhungarumlaut -30
KPX Abreve umacron -30
KPX Abreve uogonek -30
KPX Abreve uring -30
KPX Abreve v -40
KPX Abreve w -30
KPX Abreve y -30
KPX Abreve yacute -30
KPX Abreve ydieresis -30
KPX Acircumflex C -40
KPX Acircumflex Cacute -40
KPX Acircumflex Ccaron -40
KPX Acircumflex Ccedilla -40
KPX Acircumflex G -50
KPX Acircumflex Gbreve -50
KPX Acircumflex Gcommaaccent -50
KPX Acircumflex O -40
KPX Acircumflex Oacute -40
KPX Acircumflex Ocircumflex -40
KPX Acircumflex Odieresis -40
KPX Acircumflex Ograve -40
KPX Acircumflex Ohungarumlaut -40
KPX Acircumflex Omacron -40
KPX Acircumflex Oslash -40
KPX Acircumflex Otilde -40
KPX Acircumflex Q -40
KPX Acircumflex T -90
KPX Acircumflex Tcaron -90
KPX Acircumflex Tcommaaccent -90
KPX Acircumflex U -50
KPX Acircumflex Uacute -50
KPX Acircumflex Ucircumflex -50
KPX Acircumflex Udieresis -50
KPX Acircumflex Ugrave -50
KPX Acircumflex Uhungarumlaut -50
KPX Acircumflex Umacron -50
KPX Acircumflex Uogonek -50
KPX Acircumflex Uring -50
KPX Acircumflex V -80
KPX Acircumflex W -60
KPX Acircumflex Y -110
KPX Acircumflex Yacute -110
KPX Acircumflex Ydieresis -110
KPX Acircumflex u -30
KPX Acircumflex uacute -30
KPX Acircumflex ucircumflex -30
KPX Acircumflex udieresis -30
KPX Acircumflex ugrave -30
KPX Acircumflex uhungarumlaut -30
KPX Acircumflex umacron -30
KPX Acircumflex uogonek -30
KPX Acircumflex uring -30
KPX Acircumflex v -40
KPX Acircumflex w -30
KPX Acircumflex y -30
KPX Acircumflex yacute -30
KPX Acircumflex ydieresis -30
KPX Adieresis C -40
KPX Adieresis Cacute -40
KPX Adieresis Ccaron -40
KPX Adieresis Ccedilla -40
KPX Adieresis G -50
KPX Adieresis Gbreve -50
KPX Adieresis Gcommaaccent -50
KPX Adieresis O -40
KPX Adieresis Oacute -40
KPX Adieresis Ocircumflex -40
KPX Adieresis Odieresis -40
KPX Adieresis Ograve -40
KPX Adieresis Ohungarumlaut -40
KPX Adieresis Omacron -40
KPX Adieresis Oslash -40
KPX Adieresis Otilde -40
KPX Adieresis Q -40
KPX Adieresis T -90
KPX Adieresis Tcaron -90
KPX Adieresis Tcommaaccent -90
KPX Adieresis U -50
KPX Adieresis Uacute -50
KPX Adieresis Ucircumflex -50
KPX Adieresis Udieresis -50
KPX Adieresis Ugrave -50
KPX Adieresis Uhungarumlaut -50
KPX Adieresis Umacron -50
KPX Adieresis Uogonek -50
KPX Adieresis Uring -50
KPX Adieresis V -80
KPX Adieresis W -60
KPX Adieresis Y -110
KPX Adieresis Yacute -110
KPX Adieresis Ydieresis -110
KPX Adieresis u -30
KPX Adieresis uacute -30
KPX Adieresis ucircumflex -30
KPX Adieresis udieresis -30
KPX Adieresis ugrave -30
KPX Adieresis uhungarumlaut -30
KPX Adieresis umacron -30
KPX Adieresis uogonek -30
KPX Adieresis uring -30
KPX Adieresis v -40
KPX Adieresis w -30
KPX Adieresis y -30
KPX Adieresis yacute -30
KPX Adieresis ydieresis -30
KPX Agrave C -40
KPX Agrave Cacute -40
KPX Agrave Ccaron -40
KPX Agrave Ccedilla -40
KPX Agrave G -50
KPX Agrave Gbreve -50
KPX Agrave Gcommaaccent -50
KPX Agrave O -40
KPX Agrave Oacute -40
KPX Agrave Ocircumflex -40
KPX Agrave Odieresis -40
KPX Agrave Ograve -40
KPX Agrave Ohungarumlaut -40
KPX Agrave Omacron -40
KPX Agrave Oslash -40
KPX Agrave Otilde -40
KPX Agrave Q -40
KPX Agrave T -90
KPX Agrave Tcaron -90
KPX Agrave Tcommaaccent -90
KPX Agrave U -50
KPX Agrave Uacute -50
KPX Agrave Ucircumflex -50
KPX Agrave Udieresis -50
KPX Agrave Ugrave -50
KPX Agrave Uhungarumlaut -50
KPX Agrave Umacron -50
KPX Agrave Uogonek -50
KPX Agrave Uring -50
KPX Agrave V -80
KPX Agrave W -60
KPX Agrave Y -110
KPX Agrave Yacute -110
KPX Agrave Ydieresis -110
KPX Agrave u -30
KPX Agrave uacute -30
KPX Agrave ucircumflex -30
KPX Agrave udieresis -30
KPX Agrave ugrave -30
KPX Agrave uhungarumlaut -30
KPX Agrave umacron -30
KPX Agrave uogonek -30
KPX Agrave uring -30
KPX Agrave v -40
KPX Agrave w -30
KPX Agrave y -30
KPX Agrave yacute -30
KPX Agrave ydieresis -30
KPX Amacron C -40
KPX Amacron Cacute -40
KPX Amacron Ccaron -40
KPX Amacron Ccedilla -40
KPX Amacron G -50
KPX Amacron Gbreve -50
KPX Amacron Gcommaaccent -50
KPX Amacron O -40
KPX Amacron Oacute -40
KPX Amacron Ocircumflex -40
KPX Amacron Odieresis -40
KPX Amacron Ograve -40
KPX Amacron Ohungarumlaut -40
KPX Amacron Omacron -40
KPX Amacron Oslash -40
KPX Amacron Otilde -40
KPX Amacron Q -40
KPX Amacron T -90
KPX Amacron Tcaron -90
KPX Amacron Tcommaaccent -90
KPX Amacron U -50
KPX Amacron Uacute -50
KPX Amacron Ucircumflex -50
KPX Amacron Udieresis -50
KPX Amacron Ugrave -50
KPX Amacron Uhungarumlaut -50
KPX Amacron Umacron -50
KPX Amacron Uogonek -50
KPX Amacron Uring -50
KPX Amacron V -80
KPX Amacron W -60
KPX Amacron Y -110
KPX Amacron Yacute -110
KPX Amacron Ydieresis -110
KPX Amacron u -30
KPX Amacron uacute -30
KPX Amacron ucircumflex -30
KPX Amacron udieresis -30
KPX Amacron ugrave -30
KPX Amacron uhungarumlaut -30
KPX Amacron umacron -30
KPX Amacron uogonek -30
KPX Amacron uring -30
KPX Amacron v -40
KPX Amacron w -30
KPX Amacron y -30
KPX Amacron yacute -30
KPX Amacron ydieresis -30
KPX Aogonek C -40
KPX Aogonek Cacute -40
KPX Aogonek Ccaron -40
KPX Aogonek Ccedilla -40
KPX Aogonek G -50
KPX Aogonek Gbreve -50
KPX Aogonek Gcommaaccent -50
KPX Aogonek O -40
KPX Aogonek Oacute -40
KPX Aogonek Ocircumflex -40
KPX Aogonek Odieresis -40
KPX Aogonek Ograve -40
KPX Aogonek Ohungarumlaut -40
KPX Aogonek Omacron -40
KPX Aogonek Oslash -40
KPX Aogonek Otilde -40
KPX Aogonek Q -40
KPX Aogonek T -90
KPX Aogonek Tcaron -90
KPX Aogonek Tcommaaccent -90
KPX Aogonek U -50
KPX Aogonek Uacute -50
KPX Aogonek Ucircumflex -50
KPX Aogonek Udieresis -50
KPX Aogonek Ugrave -50
KPX Aogonek Uhungarumlaut -50
KPX Aogonek Umacron -50
KPX Aogonek Uogonek -50
KPX Aogonek Uring -50
KPX Aogonek V -80
KPX Aogonek W -60
KPX Aogonek Y -110
KPX Aogonek Yacute -110
KPX Aogonek Ydieresis -110
KPX Aogonek u -30
KPX Aogonek uacute -30
KPX Aogonek ucircumflex -30
KPX Aogonek udieresis -30
KPX Aogonek ugrave -30
KPX Aogonek uhungarumlaut -30
KPX Aogonek umacron -30
KPX Aogonek uogonek -30
KPX Aogonek uring -30
KPX Aogonek v -40
KPX Aogonek w -30
KPX Aogonek y -30
KPX Aogonek yacute -30
KPX Aogonek ydieresis -30
KPX Aring C -40
KPX Aring Cacute -40
KPX Aring Ccaron -40
KPX Aring Ccedilla -40
KPX Aring G -50
KPX Aring Gbreve -50
KPX Aring Gcommaaccent -50
KPX Aring O -40
KPX Aring Oacute -40
KPX Aring Ocircumflex -40
KPX Aring Odieresis -40
KPX Aring Ograve -40
KPX Aring Ohungarumlaut -40
KPX Aring Omacron -40
KPX Aring Oslash -40
KPX Aring Otilde -40
KPX Aring Q -40
KPX Aring T -90
KPX Aring Tcaron -90
KPX Aring Tcommaaccent -90
KPX Aring U -50
KPX Aring Uacute -50
KPX Aring Ucircumflex -50
KPX Aring Udieresis -50
KPX Aring Ugrave -50
KPX Aring Uhungarumlaut -50
KPX Aring Umacron -50
KPX Aring Uogonek -50
KPX Aring Uring -50
KPX Aring V -80
KPX Aring W -60
KPX Aring Y -110
KPX Aring Yacute -110
KPX Aring Ydieresis -110
KPX Aring u -30
KPX Aring uacute -30
KPX Aring ucircumflex -30
KPX Aring udieresis -30
KPX Aring ugrave -30
KPX Aring uhungarumlaut -30
KPX Aring umacron -30
KPX Aring uogonek -30
KPX Aring uring -30
KPX Aring v -40
KPX Aring w -30
KPX Aring y -30
KPX Aring yacute -30
KPX Aring ydieresis -30
KPX Atilde C -40
KPX Atilde Cacute -40
KPX Atilde Ccaron -40
KPX Atilde Ccedilla -40
KPX Atilde G -50
KPX Atilde Gbreve -50
KPX Atilde Gcommaaccent -50
KPX Atilde O -40
KPX Atilde Oacute -40
KPX Atilde Ocircumflex -40
KPX Atilde Odieresis -40
KPX Atilde Ograve -40
KPX Atilde Ohungarumlaut -40
KPX Atilde Omacron -40
KPX Atilde Oslash -40
KPX Atilde Otilde -40
KPX Atilde Q -40
KPX Atilde T -90
KPX Atilde Tcaron -90
KPX Atilde Tcommaaccent -90
KPX Atilde U -50
KPX Atilde Uacute -50
KPX Atilde Ucircumflex -50
KPX Atilde Udieresis -50
KPX Atilde Ugrave -50
KPX Atilde Uhungarumlaut -50
KPX Atilde Umacron -50
KPX Atilde Uogonek -50
KPX Atilde Uring -50
KPX Atilde V -80
KPX Atilde W -60
KPX Atilde Y -110
KPX Atilde Yacute -110
KPX Atilde Ydieresis -110
KPX Atilde u -30
KPX Atilde uacute -30
KPX Atilde ucircumflex -30
KPX Atilde udieresis -30
KPX Atilde ugrave -30
KPX Atilde uhungarumlaut -30
KPX Atilde umacron -30
KPX Atilde uogonek -30
KPX Atilde uring -30
KPX Atilde v -40
KPX Atilde w -30
KPX Atilde y -30
KPX Atilde yacute -30
KPX Atilde ydieresis -30
KPX B A -30
KPX B Aacute -30
KPX B Abreve -30
KPX B Acircumflex -30
KPX B Adieresis -30
KPX B Agrave -30
KPX B Amacron -30
KPX B Aogonek -30
KPX B Aring -30
KPX B Atilde -30
KPX B U -10
KPX B Uacute -10
KPX B Ucircumflex -10
KPX B Udieresis -10
KPX B Ugrave -10
KPX B Uhungarumlaut -10
KPX B Umacron -10
KPX B Uogonek -10
KPX B Uring -10
KPX D A -40
KPX D Aacute -40
KPX D Abreve -40
KPX D Acircumflex -40
KPX D Adieresis -40
KPX D Agrave -40
KPX D Amacron -40
KPX D Aogonek -40
KPX D Aring -40
KPX D Atilde -40
KPX D V -40
KPX D W -40
KPX D Y -70
KPX D Yacute -70
KPX D Ydieresis -70
KPX D comma -30
KPX D period -30
KPX Dcaron A -40
KPX Dcaron Aacute -40
KPX Dcaron Abreve -40
KPX Dcaron Acircumflex -40
KPX Dcaron Adieresis -40
KPX Dcaron Agrave -40
KPX Dcaron Amacron -40
KPX Dcaron Aogonek -40
KPX Dcaron Aring -40
KPX Dcaron Atilde -40
KPX Dcaron V -40
KPX Dcaron W -40
KPX Dcaron Y -70
KPX Dcaron Yacute -70
KPX Dcaron Ydieresis -70
KPX Dcaron comma -30
KPX Dcaron period -30
KPX Dcroat A -40
KPX Dcroat Aacute -40
KPX Dcroat Abreve -40
KPX Dcroat Acircumflex -40
KPX Dcroat Adieresis -40
KPX Dcroat Agrave -40
KPX Dcroat Amacron -40
KPX Dcroat Aogonek -40
KPX Dcroat Aring -40
KPX Dcroat Atilde -40
KPX Dcroat V -40
KPX Dcroat W -40
KPX Dcroat Y -70
KPX Dcroat Yacute -70
KPX Dcroat Ydieresis -70
KPX Dcroat comma -30
KPX Dcroat period -30
KPX F A -80
KPX F Aacute -80
KPX F Abreve -80
KPX F Acircumflex -80
KPX F Adieresis -80
KPX F Agrave -80
KPX F Amacron -80
KPX F Aogonek -80
KPX F Aring -80
KPX F Atilde -80
KPX F a -20
KPX F aacute -20
KPX F abreve -20
KPX F acircumflex -20
KPX F adieresis -20
KPX F agrave -20
KPX F amacron -20
KPX F aogonek -20
KPX F aring -20
KPX F atilde -20
KPX F comma -100
KPX F period -100
KPX J A -20
KPX J Aacute -20
KPX J Abreve -20
KPX J Acircumflex -20
KPX J Adieresis -20
KPX J Agrave -20
KPX J Amacron -20
KPX J Aogonek -20
KPX J Aring -20
KPX J Atilde -20
KPX J comma -20
KPX J period -20
KPX J u -20
KPX J uacute -20
KPX J ucircumflex -20
KPX J udieresis -20
KPX J ugrave -20
KPX J uhungarumlaut -20
KPX J umacron -20
KPX J uogonek -20
KPX J uring -20
KPX K O -30
KPX K Oacute -30
KPX K Ocircumflex -30
KPX K Odieresis -30
KPX K Ograve -30
KPX K Ohungarumlaut -30
KPX K Omacron -30
KPX K Oslash -30
KPX K Otilde -30
KPX K e -15
KPX K eacute -15
KPX K ecaron -15
KPX K ecircumflex -15
KPX K edieresis -15
KPX K edotaccent -15
KPX K egrave -15
KPX K emacron -15
KPX K eogonek -15
KPX K o -35
KPX K oacute -35
KPX K ocircumflex -35
KPX K odieresis -35
KPX K ograve -35
KPX K ohungarumlaut -35
KPX K omacron -35
KPX K oslash -35
KPX K otilde -35
KPX K u -30
KPX K uacute -30
KPX K ucircumflex -30
KPX K udieresis -30
KPX K ugrave -30
KPX K uhungarumlaut -30
KPX K umacron -30
KPX K uogonek -30
KPX K uring -30
KPX K y -40
KPX K yacute -40
KPX K ydieresis -40
KPX Kcommaaccent O -30
KPX Kcommaaccent Oacute -30
KPX Kcommaaccent Ocircumflex -30
KPX Kcommaaccent Odieresis -30
KPX Kcommaaccent Ograve -30
KPX Kcommaaccent Ohungarumlaut -30
KPX Kcommaaccent Omacron -30
KPX Kcommaaccent Oslash -30
KPX Kcommaaccent Otilde -30
KPX Kcommaaccent e -15
KPX Kcommaaccent eacute -15
KPX Kcommaaccent ecaron -15
KPX Kcommaaccent ecircumflex -15
KPX Kcommaaccent edieresis -15
KPX Kcommaaccent edotaccent -15
KPX Kcommaaccent egrave -15
KPX Kcommaaccent emacron -15
KPX Kcommaaccent eogonek -15
KPX Kcommaaccent o -35
KPX Kcommaaccent oacute -35
KPX Kcommaaccent ocircumflex -35
KPX Kcommaaccent odieresis -35
KPX Kcommaaccent ograve -35
KPX Kcommaaccent ohungarumlaut -35
KPX Kcommaaccent omacron -35
KPX Kcommaaccent oslash -35
KPX Kcommaaccent otilde -35
KPX Kcommaaccent u -30
KPX Kcommaaccent uacute -30
KPX Kcommaaccent ucircumflex -30
KPX Kcommaaccent udieresis -30
KPX Kcommaaccent ugrave -30
KPX Kcommaaccent uhungarumlaut -30
KPX Kcommaaccent umacron -30
KPX Kcommaaccent uogonek -30
KPX Kcommaaccent uring -30
KPX Kcommaaccent y -40
KPX Kcommaaccent yacute -40
KPX Kcommaaccent ydieresis -40
KPX L T -90
KPX L Tcaron -90
KPX L Tcommaaccent -90
KPX L V -110
KPX L W -80
KPX L Y -120
KPX L Yacute -120
KPX L Ydieresis -120
KPX L quotedblright -140
KPX L quoteright -140
KPX L y -30
KPX L yacute -30
KPX L ydieresis -30
KPX Lacute T -90
KPX Lacute Tcaron -90
KPX Lacute Tcommaaccent -90
KPX Lacute V -110
KPX Lacute W -80
KPX Lacute Y -120
KPX Lacute Yacute -120
KPX Lacute Ydieresis -120
KPX Lacute quotedblright -140
KPX Lacute quoteright -140
KPX Lacute y -30
KPX Lacute yacute -30
KPX Lacute ydieresis -30
KPX Lcommaaccent T -90
KPX Lcommaaccent Tcaron -90
KPX Lcommaaccent Tcommaaccent -90
KPX Lcommaaccent V -110
KPX Lcommaaccent W -80
KPX Lcommaaccent Y -120
KPX Lcommaaccent Yacute -120
KPX Lcommaaccent Ydieresis -120
KPX Lcommaaccent quotedblright -140
KPX Lcommaaccent quoteright -140
KPX Lcommaaccent y -30
KPX Lcommaaccent yacute -30
KPX Lcommaaccent ydieresis -30
KPX Lslash T -90
KPX Lslash Tcaron -90
KPX Lslash Tcommaaccent -90
KPX Lslash V -110
KPX Lslash W -80
KPX Lslash Y -120
KPX Lslash Yacute -120
KPX Lslash Ydieresis -120
KPX Lslash quotedblright -140
KPX Lslash quoteright -140
KPX Lslash y -30
KPX Lslash yacute -30
KPX Lslash ydieresis -30
KPX O A -50
KPX O Aacute -50
KPX O Abreve -50
KPX O Acircumflex -50
KPX O Adieresis -50
KPX O Agrave -50
KPX O Amacron -50
KPX O Aogonek -50
KPX O Aring -50
KPX O Atilde -50
KPX O T -40
KPX O Tcaron -40
KPX O Tcommaaccent -40
KPX O V -50
KPX O W -50
KPX O X -50
KPX O Y -70
KPX O Yacute -70
KPX O Ydieresis -70
KPX O comma -40
KPX O period -40
KPX Oacute A -50
KPX Oacute Aacute -50
KPX Oacute Abreve -50
KPX Oacute Acircumflex -50
KPX Oacute Adieresis -50
KPX Oacute Agrave -50
KPX Oacute Amacron -50
KPX Oacute Aogonek -50
KPX Oacute Aring -50
KPX Oacute Atilde -50
KPX Oacute T -40
KPX Oacute Tcaron -40
KPX Oacute Tcommaaccent -40
KPX Oacute V -50
KPX Oacute W -50
KPX Oacute X -50
KPX Oacute Y -70
KPX Oacute Yacute -70
KPX Oacute Ydieresis -70
KPX Oacute comma -40
KPX Oacute period -40
KPX Ocircumflex A -50
KPX Ocircumflex Aacute -50
KPX Ocircumflex Abreve -50
KPX Ocircumflex Acircumflex -50
KPX Ocircumflex Adieresis -50
KPX Ocircumflex Agrave -50
KPX Ocircumflex Amacron -50
KPX Ocircumflex Aogonek -50
KPX Ocircumflex Aring -50
KPX Ocircumflex Atilde -50
KPX Ocircumflex T -40
KPX Ocircumflex Tcaron -40
KPX Ocircumflex Tcommaaccent -40
KPX Ocircumflex V -50
KPX Ocircumflex W -50
KPX Ocircumflex X -50
KPX Ocircumflex Y -70
KPX Ocircumflex Yacute -70
KPX Ocircumflex Ydieresis -70
KPX Ocircumflex comma -40
KPX Ocircumflex period -40
KPX Odieresis A -50
KPX Odieresis Aacute -50
KPX Odieresis Abreve -50
KPX Odieresis Acircumflex -50
KPX Odieresis Adieresis -50
KPX Odieresis Agrave -50
KPX Odieresis Amacron -50
KPX Odieresis Aogonek -50
KPX Odieresis Aring -50
KPX Odieresis Atilde -50
KPX Odieresis T -40
KPX Odieresis Tcaron -40
KPX Odieresis Tcommaaccent -40
KPX Odieresis V -50
KPX Odieresis W -50
KPX Odieresis X -50
KPX Odieresis Y -70
KPX Odieresis Yacute -70
KPX Odieresis Ydieresis -70
KPX Odieresis comma -40
KPX Odieresis period -40
KPX Ograve A -50
KPX Ograve Aacute -50
KPX Ograve Abreve -50
KPX Ograve Acircumflex -50
KPX Ograve Adieresis -50
KPX Ograve Agrave -50
KPX Ograve Amacron -50
KPX Ograve Aogonek -50
KPX Ograve Aring -50
KPX Ograve Atilde -50
KPX Ograve T -40
KPX Ograve Tcaron -40
KPX Ograve Tcommaaccent -40
KPX Ograve V -50
KPX Ograve W -50
KPX Ograve X -50
KPX Ograve Y -70
KPX Ograve Yacute -70
KPX Ograve Ydieresis -70
KPX Ograve comma -40
KPX Ograve period -40
KPX Ohungarumlaut A -50
KPX Ohungarumlaut Aacute -50
KPX Ohungarumlaut Abreve -50
KPX Ohungarumlaut Acircumflex -50
KPX Ohungarumlaut Adieresis -50
KPX Ohungarumlaut Agrave -50
KPX Ohungarumlaut Amacron -50
KPX Ohungarumlaut Aogonek -50
KPX Ohungarumlaut Aring -50
KPX Ohungarumlaut Atilde -50
KPX Ohungarumlaut T -40
KPX Ohungarumlaut Tcaron -40
KPX Ohungarumlaut Tcommaaccent -40
KPX Ohungarumlaut V -50
KPX Ohungarumlaut W -50
KPX Ohungarumlaut X -50
KPX Ohungarumlaut Y -70
KPX Ohungarumlaut Yacute -70
KPX Ohungarumlaut Ydieresis -70
KPX Ohungarumlaut comma -40
KPX Ohungarumlaut period -40
KPX Omacron A -50
KPX Omacron Aacute -50
KPX Omacron Abreve -50
KPX Omacron Acircumflex -50
KPX Omacron Adieresis -50
KPX Omacron Agrave -50
KPX Omacron Amacron -50
KPX Omacron Aogonek -50
KPX Omacron Aring -50
KPX Omacron Atilde -50
KPX Omacron T -40
KPX Omacron Tcaron -40
KPX Omacron Tcommaaccent -40
KPX Omacron V -50
KPX Omacron W -50
KPX Omacron X -50
KPX Omacron Y -70
KPX Omacron Yacute -70
KPX Omacron Ydieresis -70
KPX Omacron comma -40
KPX Omacron period -40
KPX Oslash A -50
KPX Oslash Aacute -50
KPX Oslash Abreve -50
KPX Oslash Acircumflex -50
KPX Oslash Adieresis -50
KPX Oslash Agrave -50
KPX Oslash Amacron -50
KPX Oslash Aogonek -50
KPX Oslash Aring -50
KPX Oslash Atilde -50
KPX Oslash T -40
KPX Oslash Tcaron -40
KPX Oslash Tcommaaccent -40
KPX Oslash V -50
KPX Oslash W -50
KPX Oslash X -50
KPX Oslash Y -70
KPX Oslash Yacute -70
KPX Oslash Ydieresis -70
KPX Oslash comma -40
KPX Oslash period -40
KPX Otilde A -50
KPX Otilde Aacute -50
KPX Otilde Abreve -50
KPX Otilde Acircumflex -50
KPX Otilde Adieresis -50
KPX Otilde Agrave -50
KPX Otilde Amacron -50
KPX Otilde Aogonek -50
KPX Otilde Aring -50
KPX Otilde Atilde -50
KPX Otilde T -40
KPX Otilde Tcaron -40
KPX Otilde Tcommaaccent -40
KPX Otilde V -50
KPX Otilde W -50
KPX Otilde X -50
KPX Otilde Y -70
KPX Otilde Yacute -70
KPX Otilde Ydieresis -70
KPX Otilde comma -40
KPX Otilde period -40
KPX P A -100
KPX P Aacute -100
KPX P Abreve -100
KPX P Acircumflex -100
KPX P Adieresis -100
KPX P Agrave -100
KPX P Amacron -100
KPX P Aogonek -100
KPX P Aring -100
KPX P Atilde -100
KPX P a -30
KPX P aacute -30
KPX P abreve -30
KPX P acircumflex -30
KPX P adieresis -30
KPX P agrave -30
KPX P amacron -30
KPX P aogonek -30
KPX P aring -30
KPX P atilde -30
KPX P comma -120
KPX P e -30
KPX P eacute -30
KPX P ecaron -30
KPX P ecircumflex -30
KPX P edieresis -30
KPX P edotaccent -30
KPX P egrave -30
KPX P emacron -30
KPX P eogonek -30
KPX P o -40
KPX P oacute -40
KPX P ocircumflex -40
KPX P odieresis -40
KPX P ograve -40
KPX P ohungarumlaut -40
KPX P omacron -40
KPX P oslash -40
KPX P otilde -40
KPX P period -120
KPX Q U -10
KPX Q Uacute -10
KPX Q Ucircumflex -10
KPX Q Udieresis -10
KPX Q Ugrave -10
KPX Q Uhungarumlaut -10
KPX Q Umacron -10
KPX Q Uogonek -10
KPX Q Uring -10
KPX Q comma 20
KPX Q period 20
KPX R O -20
KPX R Oacute -20
KPX R Ocircumflex -20
KPX R Odieresis -20
KPX R Ograve -20
KPX R Ohungarumlaut -20
KPX R Omacron -20
KPX R Oslash -20
KPX R Otilde -20
KPX R T -20
KPX R Tcaron -20
KPX R Tcommaaccent -20
KPX R U -20
KPX R Uacute -20
KPX R Ucircumflex -20
KPX R Udieresis -20
KPX R Ugrave -20
KPX R Uhungarumlaut -20
KPX R Umacron -20
KPX R Uogonek -20
KPX R Uring -20
KPX R V -50
KPX R W -40
KPX R Y -50
KPX R Yacute -50
KPX R Ydieresis -50
KPX Racute O -20
KPX Racute Oacute -20
KPX Racute Ocircumflex -20
KPX Racute Odieresis -20
KPX Racute Ograve -20
KPX Racute Ohungarumlaut -20
KPX Racute Omacron -20
KPX Racute Oslash -20
KPX Racute Otilde -20
KPX Racute T -20
KPX Racute Tcaron -20
KPX Racute Tcommaaccent -20
KPX Racute U -20
KPX Racute Uacute -20
KPX Racute Ucircumflex -20
KPX Racute Udieresis -20
KPX Racute Ugrave -20
KPX Racute Uhungarumlaut -20
KPX Racute Umacron -20
KPX Racute Uogonek -20
KPX Racute Uring -20
KPX Racute V -50
KPX Racute W -40
KPX Racute Y -50
KPX Racute Yacute -50
KPX Racute Ydieresis -50
KPX Rcaron O -20
KPX Rcaron Oacute -20
KPX Rcaron Ocircumflex -20
KPX Rcaron Odieresis -20
KPX Rcaron Ograve -20
KPX Rcaron Ohungarumlaut -20
KPX Rcaron Omacron -20
KPX Rcaron Oslash -20
KPX Rcaron Otilde -20
KPX Rcaron T -20
KPX Rcaron Tcaron -20
KPX Rcaron Tcommaaccent -20
KPX Rcaron U -20
KPX Rcaron Uacute -20
KPX Rcaron Ucircumflex -20
KPX Rcaron Udieresis -20
KPX Rcaron Ugrave -20
KPX Rcaron Uhungarumlaut -20
KPX Rcaron Umacron -20
KPX Rcaron Uogonek -20
KPX Rcaron Uring -20
KPX Rcaron V -50
KPX Rcaron W -40
KPX Rcaron Y -50
KPX Rcaron Yacute -50
KPX Rcaron Ydieresis -50
KPX Rcommaaccent O -20
KPX Rcommaaccent Oacute -20
KPX Rcommaaccent Ocircumflex -20
KPX Rcommaaccent Odieresis -20
KPX Rcommaaccent Ograve -20
KPX Rcommaaccent Ohungarumlaut -20
KPX Rcommaaccent Omacron -20
KPX Rcommaaccent Oslash -20
KPX Rcommaaccent Otilde -20
KPX Rcommaaccent T -20
KPX Rcommaaccent Tcaron -20
KPX Rcommaaccent Tcommaaccent -20
KPX Rcommaaccent U -20
KPX Rcommaaccent Uacute -20
KPX Rcommaaccent Ucircumflex -20
KPX Rcommaaccent Udieresis -20
KPX Rcommaaccent Ugrave -20
KPX Rcommaaccent Uhungarumlaut -20
KPX Rcommaaccent Umacron -20
KPX Rcommaaccent Uogonek -20
KPX Rcommaaccent Uring -20
KPX Rcommaaccent V -50
KPX Rcommaaccent W -40
KPX Rcommaaccent Y -50
KPX Rcommaaccent Yacute -50
KPX Rcommaaccent Ydieresis -50
KPX T A -90
KPX T Aacute -90
KPX T Abreve -90
KPX T Acircumflex -90
KPX T Adieresis -90
KPX T Agrave -90
KPX T Amacron -90
KPX T Aogonek -90
KPX T Aring -90
KPX T Atilde -90
KPX T O -40
KPX T Oacute -40
KPX T Ocircumflex -40
KPX T Odieresis -40
KPX T Ograve -40
KPX T Ohungarumlaut -40
KPX T Omacron -40
KPX T Oslash -40
KPX T Otilde -40
KPX T a -80
KPX T aacute -80
KPX T abreve -80
KPX T acircumflex -80
KPX T adieresis -80
KPX T agrave -80
KPX T amacron -80
KPX T aogonek -80
KPX T aring -80
KPX T atilde -80
KPX T colon -40
KPX T comma -80
KPX T e -60
KPX T eacute -60
KPX T ecaron -60
KPX T ecircumflex -60
KPX T edieresis -60
KPX T edotaccent -60
KPX T egrave -60
KPX T emacron -60
KPX T eogonek -60
KPX T hyphen -120
KPX T o -80
KPX T oacute -80
KPX T ocircumflex -80
KPX T odieresis -80
KPX T ograve -80
KPX T ohungarumlaut -80
KPX T omacron -80
KPX T oslash -80
KPX T otilde -80
KPX T period -80
KPX T r -80
KPX T racute -80
KPX T rcommaaccent -80
KPX T semicolon -40
KPX T u -90
KPX T uacute -90
KPX T ucircumflex -90
KPX T udieresis -90
KPX T ugrave -90
KPX T uhungarumlaut -90
KPX T umacron -90
KPX T uogonek -90
KPX T uring -90
KPX T w -60
KPX T y -60
KPX T yacute -60
KPX T ydieresis -60
KPX Tcaron A -90
KPX Tcaron Aacute -90
KPX Tcaron Abreve -90
KPX Tcaron Acircumflex -90
KPX Tcaron Adieresis -90
KPX Tcaron Agrave -90
KPX Tcaron Amacron -90
KPX Tcaron Aogonek -90
KPX Tcaron Aring -90
KPX Tcaron Atilde -90
KPX Tcaron O -40
KPX Tcaron Oacute -40
KPX Tcaron Ocircumflex -40
KPX Tcaron Odieresis -40
KPX Tcaron Ograve -40
KPX Tcaron Ohungarumlaut -40
KPX Tcaron Omacron -40
KPX Tcaron Oslash -40
KPX Tcaron Otilde -40
KPX Tcaron a -80
KPX Tcaron aacute -80
KPX Tcaron abreve -80
KPX Tcaron acircumflex -80
KPX Tcaron adieresis -80
KPX Tcaron agrave -80
KPX Tcaron amacron -80
KPX Tcaron aogonek -80
KPX Tcaron aring -80
KPX Tcaron atilde -80
KPX Tcaron colon -40
KPX Tcaron comma -80
KPX Tcaron e -60
KPX Tcaron eacute -60
KPX Tcaron ecaron -60
KPX Tcaron ecircumflex -60
KPX Tcaron edieresis -60
KPX Tcaron edotaccent -60
KPX Tcaron egrave -60
KPX Tcaron emacron -60
KPX Tcaron eogonek -60
KPX Tcaron hyphen -120
KPX Tcaron o -80
KPX Tcaron oacute -80
KPX Tcaron ocircumflex -80
KPX Tcaron odieresis -80
KPX Tcaron ograve -80
KPX Tcaron ohungarumlaut -80
KPX Tcaron omacron -80
KPX Tcaron oslash -80
KPX Tcaron otilde -80
KPX Tcaron period -80
KPX Tcaron r -80
KPX Tcaron racute -80
KPX Tcaron rcommaaccent -80
KPX Tcaron semicolon -40
KPX Tcaron u -90
KPX Tcaron uacute -90
KPX Tcaron ucircumflex -90
KPX Tcaron udieresis -90
KPX Tcaron ugrave -90
KPX Tcaron uhungarumlaut -90
KPX Tcaron umacron -90
KPX Tcaron uogonek -90
KPX Tcaron uring -90
KPX Tcaron w -60
KPX Tcaron y -60
KPX Tcaron yacute -60
KPX Tcaron ydieresis -60
KPX Tcommaaccent A -90
KPX Tcommaaccent Aacute -90
KPX Tcommaaccent Abreve -90
KPX Tcommaaccent Acircumflex -90
KPX Tcommaaccent Adieresis -90
KPX Tcommaaccent Agrave -90
KPX Tcommaaccent Amacron -90
KPX Tcommaaccent Aogonek -90
KPX Tcommaaccent Aring -90
KPX Tcommaaccent Atilde -90
KPX Tcommaaccent O -40
KPX Tcommaaccent Oacute -40
KPX Tcommaaccent Ocircumflex -40
KPX Tcommaaccent Odieresis -40
KPX Tcommaaccent Ograve -40
KPX Tcommaaccent Ohungarumlaut -40
KPX Tcommaaccent Omacron -40
KPX Tcommaaccent Oslash -40
KPX Tcommaaccent Otilde -40
KPX Tcommaaccent a -80
KPX Tcommaaccent aacute -80
KPX Tcommaaccent abreve -80
KPX Tcommaaccent acircumflex -80
KPX Tcommaaccent adieresis -80
KPX Tcommaaccent agrave -80
KPX Tcommaaccent amacron -80
KPX Tcommaaccent aogonek -80
KPX Tcommaaccent aring -80
KPX Tcommaaccent atilde -80
KPX Tcommaaccent colon -40
KPX Tcommaaccent comma -80
KPX Tcommaaccent e -60
KPX Tcommaaccent eacute -60
KPX Tcommaaccent ecaron -60
KPX Tcommaaccent ecircumflex -60
KPX Tcommaaccent edieresis -60
KPX Tcommaaccent edotaccent -60
KPX Tcommaaccent egrave -60
KPX Tcommaaccent emacron -60
KPX Tcommaaccent eogonek -60
KPX Tcommaaccent hyphen -120
KPX Tcommaaccent o -80
KPX Tcommaaccent oacute -80
KPX Tcommaaccent ocircumflex -80
KPX Tcommaaccent odieresis -80
KPX Tcommaaccent ograve -80
KPX Tcommaaccent ohungarumlaut -80
KPX Tcommaaccent omacron -80
KPX Tcommaaccent oslash -80
KPX Tcommaaccent otilde -80
KPX Tcommaaccent period -80
KPX Tcommaaccent r -80
KPX Tcommaaccent racute -80
KPX Tcommaaccent rcommaaccent -80
KPX Tcommaaccent semicolon -40
KPX Tcommaaccent u -90
KPX Tcommaaccent uacute -90
KPX Tcommaaccent ucircumflex -90
KPX Tcommaaccent udieresis -90
KPX Tcommaaccent ugrave -90
KPX Tcommaaccent uhungarumlaut -90
KPX Tcommaaccent umacron -90
KPX Tcommaaccent uogonek -90
KPX Tcommaaccent uring -90
KPX Tcommaaccent w -60
KPX Tcommaaccent y -60
KPX Tcommaaccent yacute -60
KPX Tcommaaccent ydieresis -60
KPX U A -50
KPX U Aacute -50
KPX U Abreve -50
KPX U Acircumflex -50
KPX U Adieresis -50
KPX U Agrave -50
KPX U Amacron -50
KPX U Aogonek -50
KPX U Aring -50
KPX U Atilde -50
KPX U comma -30
KPX U period -30
KPX Uacute A -50
KPX Uacute Aacute -50
KPX Uacute Abreve -50
KPX Uacute Acircumflex -50
KPX Uacute Adieresis -50
KPX Uacute Agrave -50
KPX Uacute Amacron -50
KPX Uacute Aogonek -50
KPX Uacute Aring -50
KPX Uacute Atilde -50
KPX Uacute comma -30
KPX Uacute period -30
KPX Ucircumflex A -50
KPX Ucircumflex Aacute -50
KPX Ucircumflex Abreve -50
KPX Ucircumflex Acircumflex -50
KPX Ucircumflex Adieresis -50
KPX Ucircumflex Agrave -50
KPX Ucircumflex Amacron -50
KPX Ucircumflex Aogonek -50
KPX Ucircumflex Aring -50
KPX Ucircumflex Atilde -50
KPX Ucircumflex comma -30
KPX Ucircumflex period -30
KPX Udieresis A -50
KPX Udieresis Aacute -50
KPX Udieresis Abreve -50
KPX Udieresis Acircumflex -50
KPX Udieresis Adieresis -50
KPX Udieresis Agrave -50
KPX Udieresis Amacron -50
KPX Udieresis Aogonek -50
KPX Udieresis Aring -50
KPX Udieresis Atilde -50
KPX Udieresis comma -30
KPX Udieresis period -30
KPX Ugrave A -50
KPX Ugrave Aacute -50
KPX Ugrave Abreve -50
KPX Ugrave Acircumflex -50
KPX Ugrave Adieresis -50
KPX Ugrave Agrave -50
KPX Ugrave Amacron -50
KPX Ugrave Aogonek -50
KPX Ugrave Aring -50
KPX Ugrave Atilde -50
KPX Ugrave comma -30
KPX Ugrave period -30
KPX Uhungarumlaut A -50
KPX Uhungarumlaut Aacute -50
KPX Uhungarumlaut Abreve -50
KPX Uhungarumlaut Acircumflex -50
KPX Uhungarumlaut Adieresis -50
KPX Uhungarumlaut Agrave -50
KPX Uhungarumlaut Amacron -50
KPX Uhungarumlaut Aogonek -50
KPX Uhungarumlaut Aring -50
KPX Uhungarumlaut Atilde -50
KPX Uhungarumlaut comma -30
KPX Uhungarumlaut period -30
KPX Umacron A -50
KPX Umacron Aacute -50
KPX Umacron Abreve -50
KPX Umacron Acircumflex -50
KPX Umacron Adieresis -50
KPX Umacron Agrave -50
KPX Umacron Amacron -50
KPX Umacron Aogonek -50
KPX Umacron Aring -50
KPX Umacron Atilde -50
KPX Umacron comma -30
KPX Umacron period -30
KPX Uogonek A -50
KPX Uogonek Aacute -50
KPX Uogonek Abreve -50
KPX Uogonek Acircumflex -50
KPX Uogonek Adieresis -50
KPX Uogonek Agrave -50
KPX Uogonek Amacron -50
KPX Uogonek Aogonek -50
KPX Uogonek Aring -50
KPX Uogonek Atilde -50
KPX Uogonek comma -30
KPX Uogonek period -30
KPX Uring A -50
KPX Uring Aacute -50
KPX Uring Abreve -50
KPX Uring Acircumflex -50
KPX Uring Adieresis -50
KPX Uring Agrave -50
KPX Uring Amacron -50
KPX Uring Aogonek -50
KPX Uring Aring -50
KPX Uring Atilde -50
KPX Uring comma -30
KPX Uring period -30
KPX V A -80
KPX V Aacute -80
KPX V Abreve -80
KPX V Acircumflex -80
KPX V Adieresis -80
KPX V Agrave -80
KPX V Amacron -80
KPX V Aogonek -80
KPX V Aring -80
KPX V Atilde -80
KPX V G -50
KPX V Gbreve -50
KPX V Gcommaaccent -50
KPX V O -50
KPX V Oacute -50
KPX V Ocircumflex -50
KPX V Odieresis -50
KPX V Ograve -50
KPX V Ohungarumlaut -50
KPX V Omacron -50
KPX V Oslash -50
KPX V Otilde -50
KPX V a -60
KPX V aacute -60
KPX V abreve -60
KPX V acircumflex -60
KPX V adieresis -60
KPX V agrave -60
KPX V amacron -60
KPX V aogonek -60
KPX V aring -60
KPX V atilde -60
KPX V colon -40
KPX V comma -120
KPX V e -50
KPX V eacute -50
KPX V ecaron -50
KPX V ecircumflex -50
KPX V edieresis -50
KPX V edotaccent -50
KPX V egrave -50
KPX V emacron -50
KPX V eogonek -50
KPX V hyphen -80
KPX V o -90
KPX V oacute -90
KPX V ocircumflex -90
KPX V odieresis -90
KPX V ograve -90
KPX V ohungarumlaut -90
KPX V omacron -90
KPX V oslash -90
KPX V otilde -90
KPX V period -120
KPX V semicolon -40
KPX V u -60
KPX V uacute -60
KPX V ucircumflex -60
KPX V udieresis -60
KPX V ugrave -60
KPX V uhungarumlaut -60
KPX V umacron -60
KPX V uogonek -60
KPX V uring -60
KPX W A -60
KPX W Aacute -60
KPX W Abreve -60
KPX W Acircumflex -60
KPX W Adieresis -60
KPX W Agrave -60
KPX W Amacron -60
KPX W Aogonek -60
KPX W Aring -60
KPX W Atilde -60
KPX W O -20
KPX W Oacute -20
KPX W Ocircumflex -20
KPX W Odieresis -20
KPX W Ograve -20
KPX W Ohungarumlaut -20
KPX W Omacron -20
KPX W Oslash -20
KPX W Otilde -20
KPX W a -40
KPX W aacute -40
KPX W abreve -40
KPX W acircumflex -40
KPX W adieresis -40
KPX W agrave -40
KPX W amacron -40
KPX W aogonek -40
KPX W aring -40
KPX W atilde -40
KPX W colon -10
KPX W comma -80
KPX W e -35
KPX W eacute -35
KPX W ecaron -35
KPX W ecircumflex -35
KPX W edieresis -35
KPX W edotaccent -35
KPX W egrave -35
KPX W emacron -35
KPX W eogonek -35
KPX W hyphen -40
KPX W o -60
KPX W oacute -60
KPX W ocircumflex -60
KPX W odieresis -60
KPX W ograve -60
KPX W ohungarumlaut -60
KPX W omacron -60
KPX W oslash -60
KPX W otilde -60
KPX W period -80
KPX W semicolon -10
KPX W u -45
KPX W uacute -45
KPX W ucircumflex -45
KPX W udieresis -45
KPX W ugrave -45
KPX W uhungarumlaut -45
KPX W umacron -45
KPX W uogonek -45
KPX W uring -45
KPX W y -20
KPX W yacute -20
KPX W ydieresis -20
KPX Y A -110
KPX Y Aacute -110
KPX Y Abreve -110
KPX Y Acircumflex -110
KPX Y Adieresis -110
KPX Y Agrave -110
KPX Y Amacron -110
KPX Y Aogonek -110
KPX Y Aring -110
KPX Y Atilde -110
KPX Y O -70
KPX Y Oacute -70
KPX Y Ocircumflex -70
KPX Y Odieresis -70
KPX Y Ograve -70
KPX Y Ohungarumlaut -70
KPX Y Omacron -70
KPX Y Oslash -70
KPX Y Otilde -70
KPX Y a -90
KPX Y aacute -90
KPX Y abreve -90
KPX Y acircumflex -90
KPX Y adieresis -90
KPX Y agrave -90
KPX Y amacron -90
KPX Y aogonek -90
KPX Y aring -90
KPX Y atilde -90
KPX Y colon -50
KPX Y comma -100
KPX Y e -80
KPX Y eacute -80
KPX Y ecaron -80
KPX Y ecircumflex -80
KPX Y edieresis -80
KPX Y edotaccent -80
KPX Y egrave -80
KPX Y emacron -80
KPX Y eogonek -80
KPX Y o -100
KPX Y oacute -100
KPX Y ocircumflex -100
KPX Y odieresis -100
KPX Y ograve -100
KPX Y ohungarumlaut -100
KPX Y omacron -100
KPX Y oslash -100
KPX Y otilde -100
KPX Y period -100
KPX Y semicolon -50
KPX Y u -100
KPX Y uacute -100
KPX Y ucircumflex -100
KPX Y udieresis -100
KPX Y ugrave -100
KPX Y uhungarumlaut -100
KPX Y umacron -100
KPX Y uogonek -100
KPX Y uring -100
KPX Yacute A -110
KPX Yacute Aacute -110
KPX Yacute Abreve -110
KPX Yacute Acircumflex -110
KPX Yacute Adieresis -110
KPX Yacute Agrave -110
KPX Yacute Amacron -110
KPX Yacute Aogonek -110
KPX Yacute Aring -110
KPX Yacute Atilde -110
KPX Yacute O -70
KPX Yacute Oacute -70
KPX Yacute Ocircumflex -70
KPX Yacute Odieresis -70
KPX Yacute Ograve -70
KPX Yacute Ohungarumlaut -70
KPX Yacute Omacron -70
KPX Yacute Oslash -70
KPX Yacute Otilde -70
KPX Yacute a -90
KPX Yacute aacute -90
KPX Yacute abreve -90
KPX Yacute acircumflex -90
KPX Yacute adieresis -90
KPX Yacute agrave -90
KPX Yacute amacron -90
KPX Yacute aogonek -90
KPX Yacute aring -90
KPX Yacute atilde -90
KPX Yacute colon -50
KPX Yacute comma -100
KPX Yacute e -80
KPX Yacute eacute -80
KPX Yacute ecaron -80
KPX Yacute ecircumflex -80
KPX Yacute edieresis -80
KPX Yacute edotaccent -80
KPX Yacute egrave -80
KPX Yacute emacron -80
KPX Yacute eogonek -80
KPX Yacute o -100
KPX Yacute oacute -100
KPX Yacute ocircumflex -100
KPX Yacute odieresis -100
KPX Yacute ograve -100
KPX Yacute ohungarumlaut -100
KPX Yacute omacron -100
KPX Yacute oslash -100
KPX Yacute otilde -100
KPX Yacute period -100
KPX Yacute semicolon -50
KPX Yacute u -100
KPX Yacute uacute -100
KPX Yacute ucircumflex -100
KPX Yacute udieresis -100
KPX Yacute ugrave -100
KPX Yacute uhungarumlaut -100
KPX Yacute umacron -100
KPX Yacute uogonek -100
KPX Yacute uring -100
KPX Ydieresis A -110
KPX Ydieresis Aacute -110
KPX Ydieresis Abreve -110
KPX Ydieresis Acircumflex -110
KPX Ydieresis Adieresis -110
KPX Ydieresis Agrave -110
KPX Ydieresis Amacron -110
KPX Ydieresis Aogonek -110
KPX Ydieresis Aring -110
KPX Ydieresis Atilde -110
KPX Ydieresis O -70
KPX Ydieresis Oacute -70
KPX Ydieresis Ocircumflex -70
KPX Ydieresis Odieresis -70
KPX Ydieresis Ograve -70
KPX Ydieresis Ohungarumlaut -70
KPX Ydieresis Omacron -70
KPX Ydieresis Oslash -70
KPX Ydieresis Otilde -70
KPX Ydieresis a -90
KPX Ydieresis aacute -90
KPX Ydieresis abreve -90
KPX Ydieresis acircumflex -90
KPX Ydieresis adieresis -90
KPX Ydieresis agrave -90
KPX Ydieresis amacron -90
KPX Ydieresis aogonek -90
KPX Ydieresis aring -90
KPX Ydieresis atilde -90
KPX Ydieresis colon -50
KPX Ydieresis comma -100
KPX Ydieresis e -80
KPX Ydieresis eacute -80
KPX Ydieresis ecaron -80
KPX Ydieresis ecircumflex -80
KPX Ydieresis edieresis -80
KPX Ydieresis edotaccent -80
KPX Ydieresis egrave -80
KPX Ydieresis emacron -80
KPX Ydieresis eogonek -80
KPX Ydieresis o -100
KPX Ydieresis oacute -100
KPX Ydieresis ocircumflex -100
KPX Ydieresis odieresis -100
KPX Ydieresis ograve -100
KPX Ydieresis ohungarumlaut -100
KPX Ydieresis omacron -100
KPX Ydieresis oslash -100
KPX Ydieresis otilde -100
KPX Ydieresis period -100
KPX Ydieresis semicolon -50
KPX Ydieresis u -100
KPX Ydieresis uacute -100
KPX Ydieresis ucircumflex -100
KPX Ydieresis udieresis -100
KPX Ydieresis ugrave -100
KPX Ydieresis uhungarumlaut -100
KPX Ydieresis umacron -100
KPX Ydieresis uogonek -100
KPX Ydieresis uring -100
KPX a g -10
KPX a gbreve -10
KPX a gcommaaccent -10
KPX a v -15
KPX a w -15
KPX a y -20
KPX a yacute -20
KPX a ydieresis -20
KPX aacute g -10
KPX aacute gbreve -10
KPX aacute gcommaaccent -10
KPX aacute v -15
KPX aacute w -15
KPX aacute y -20
KPX aacute yacute -20
KPX aacute ydieresis -20
KPX abreve g -10
KPX abreve gbreve -10
KPX abreve gcommaaccent -10
KPX abreve v -15
KPX abreve w -15
KPX abreve y -20
KPX abreve yacute -20
KPX abreve ydieresis -20
KPX acircumflex g -10
KPX acircumflex gbreve -10
KPX acircumflex gcommaaccent -10
KPX acircumflex v -15
KPX acircumflex w -15
KPX acircumflex y -20
KPX acircumflex yacute -20
KPX acircumflex ydieresis -20
KPX adieresis g -10
KPX adieresis gbreve -10
KPX adieresis gcommaaccent -10
KPX adieresis v -15
KPX adieresis w -15
KPX adieresis y -20
KPX adieresis yacute -20
KPX adieresis ydieresis -20
KPX agrave g -10
KPX agrave gbreve -10
KPX agrave gcommaaccent -10
KPX agrave v -15
KPX agrave w -15
KPX agrave y -20
KPX agrave yacute -20
KPX agrave ydieresis -20
KPX amacron g -10
KPX amacron gbreve -10
KPX amacron gcommaaccent -10
KPX amacron v -15
KPX amacron w -15
KPX amacron y -20
KPX amacron yacute -20
KPX amacron ydieresis -20
KPX aogonek g -10
KPX aogonek gbreve -10
KPX aogonek gcommaaccent -10
KPX aogonek v -15
KPX aogonek w -15
KPX aogonek y -20
KPX aogonek yacute -20
KPX aogonek ydieresis -20
KPX aring g -10
KPX aring gbreve -10
KPX aring gcommaaccent -10
KPX aring v -15
KPX aring w -15
KPX aring y -20
KPX aring yacute -20
KPX aring ydieresis -20
KPX atilde g -10
KPX atilde gbreve -10
KPX atilde gcommaaccent -10
KPX atilde v -15
KPX atilde w -15
KPX atilde y -20
KPX atilde yacute -20
KPX atilde ydieresis -20
KPX b l -10
KPX b lacute -10
KPX b lcommaaccent -10
KPX b lslash -10
KPX b u -20
KPX b uacute -20
KPX b ucircumflex -20
KPX b udieresis -20
KPX b ugrave -20
KPX b uhungarumlaut -20
KPX b umacron -20
KPX b uogonek -20
KPX b uring -20
KPX b v -20
KPX b y -20
KPX b yacute -20
KPX b ydieresis -20
KPX c h -10
KPX c k -20
KPX c kcommaaccent -20
KPX c l -20
KPX c lacute -20
KPX c lcommaaccent -20
KPX c lslash -20
KPX c y -10
KPX c yacute -10
KPX c ydieresis -10
KPX cacute h -10
KPX cacute k -20
KPX cacute kcommaaccent -20
KPX cacute l -20
KPX cacute lacute -20
KPX cacute lcommaaccent -20
KPX cacute lslash -20
KPX cacute y -10
KPX cacute yacute -10
KPX cacute ydieresis -10
KPX ccaron h -10
KPX ccaron k -20
KPX ccaron kcommaaccent -20
KPX ccaron l -20
KPX ccaron lacute -20
KPX ccaron lcommaaccent -20
KPX ccaron lslash -20
KPX ccaron y -10
KPX ccaron yacute -10
KPX ccaron ydieresis -10
KPX ccedilla h -10
KPX ccedilla k -20
KPX ccedilla kcommaaccent -20
KPX ccedilla l -20
KPX ccedilla lacute -20
KPX ccedilla lcommaaccent -20
KPX ccedilla lslash -20
KPX ccedilla y -10
KPX ccedilla yacute -10
KPX ccedilla ydieresis -10
KPX colon space -40
KPX comma quotedblright -120
KPX comma quoteright -120
KPX comma space -40
KPX d d -10
KPX d dcroat -10
KPX d v -15
KPX d w -15
KPX d y -15
KPX d yacute -15
KPX d ydieresis -15
KPX dcroat d -10
KPX dcroat dcroat -10
KPX dcroat v -15
KPX dcroat w -15
KPX dcroat y -15
KPX dcroat yacute -15
KPX dcroat ydieresis -15
KPX e comma 10
KPX e period 20
KPX e v -15
KPX e w -15
KPX e x -15
KPX e y -15
KPX e yacute -15
KPX e ydieresis -15
KPX eacute comma 10
KPX eacute period 20
KPX eacute v -15
KPX eacute w -15
KPX eacute x -15
KPX eacute y -15
KPX eacute yacute -15
KPX eacute ydieresis -15
KPX ecaron comma 10
KPX ecaron period 20
KPX ecaron v -15
KPX ecaron w -15
KPX ecaron x -15
KPX ecaron y -15
KPX ecaron yacute -15
KPX ecaron ydieresis -15
KPX ecircumflex comma 10
KPX ecircumflex period 20
KPX ecircumflex v -15
KPX ecircumflex w -15
KPX ecircumflex x -15
KPX ecircumflex y -15
KPX ecircumflex yacute -15
KPX ecircumflex ydieresis -15
KPX edieresis comma 10
KPX edieresis period 20
KPX edieresis v -15
KPX edieresis w -15
KPX edieresis x -15
KPX edieresis y -15
KPX edieresis yacute -15
KPX edieresis ydieresis -15
KPX edotaccent comma 10
KPX edotaccent period 20
KPX edotaccent v -15
KPX edotaccent w -15
KPX edotaccent x -15
KPX edotaccent y -15
KPX edotaccent yacute -15
KPX edotaccent ydieresis -15
KPX egrave comma 10
KPX egrave period 20
KPX egrave v -15
KPX egrave w -15
KPX egrave x -15
KPX egrave y -15
KPX egrave yacute -15
KPX egrave ydieresis -15
KPX emacron comma 10
KPX emacron period 20
KPX emacron v -15
KPX emacron w -15
KPX emacron x -15
KPX emacron y -15
KPX emacron yacute -15
KPX emacron ydieresis -15
KPX eogonek comma 10
KPX eogonek period 20
KPX eogonek v -15
KPX eogonek w -15
KPX eogonek x -15
KPX eogonek y -15
KPX eogonek yacute -15
KPX eogonek ydieresis -15
KPX f comma -10
KPX f e -10
KPX f eacute -10
KPX f ecaron -10
KPX f ecircumflex -10
KPX f edieresis -10
KPX f edotaccent -10
KPX f egrave -10
KPX f emacron -10
KPX f eogonek -10
KPX f o -20
KPX f oacute -20
KPX f ocircumflex -20
KPX f odieresis -20
KPX f ograve -20
KPX f ohungarumlaut -20
KPX f omacron -20
KPX f oslash -20
KPX f otilde -20
KPX f period -10
KPX f quotedblright 30
KPX f quoteright 30
KPX g e 10
KPX g eacute 10
KPX g ecaron 10
KPX g ecircumflex 10
KPX g edieresis 10
KPX g edotaccent 10
KPX g egrave 10
KPX g emacron 10
KPX g eogonek 10
KPX g g -10
KPX g gbreve -10
KPX g gcommaaccent -10
KPX gbreve e 10
KPX gbreve eacute 10
KPX gbreve ecaron 10
KPX gbreve ecircumflex 10
KPX gbreve edieresis 10
KPX gbreve edotaccent 10
KPX gbreve egrave 10
KPX gbreve emacron 10
KPX gbreve eogonek 10
KPX gbreve g -10
KPX gbreve gbreve -10
KPX gbreve gcommaaccent -10
KPX gcommaaccent e 10
KPX gcommaaccent eacute 10
KPX gcommaaccent ecaron 10
KPX gcommaaccent ecircumflex 10
KPX gcommaaccent edieresis 10
KPX gcommaaccent edotaccent 10
KPX gcommaaccent egrave 10
KPX gcommaaccent emacron 10
KPX gcommaaccent eogonek 10
KPX gcommaaccent g -10
KPX gcommaaccent gbreve -10
KPX gcommaaccent gcommaaccent -10
KPX h y -20
KPX h yacute -20
KPX h ydieresis -20
KPX k o -15
KPX k oacute -15
KPX k ocircumflex -15
KPX k odieresis -15
KPX k ograve -15
KPX k ohungarumlaut -15
KPX k omacron -15
KPX k oslash -15
KPX k otilde -15
KPX kcommaaccent o -15
KPX kcommaaccent oacute -15
KPX kcommaaccent ocircumflex -15
KPX kcommaaccent odieresis -15
KPX kcommaaccent ograve -15
KPX kcommaaccent ohungarumlaut -15
KPX kcommaaccent omacron -15
KPX kcommaaccent oslash -15
KPX kcommaaccent otilde -15
KPX l w -15
KPX l y -15
KPX l yacute -15
KPX l ydieresis -15
KPX lacute w -15
KPX lacute y -15
KPX lacute yacute -15
KPX lacute ydieresis -15
KPX lcommaaccent w -15
KPX lcommaaccent y -15
KPX lcommaaccent yacute -15
KPX lcommaaccent ydieresis -15
KPX lslash w -15
KPX lslash y -15
KPX lslash yacute -15
KPX lslash ydieresis -15
KPX m u -20
KPX m uacute -20
KPX m ucircumflex -20
KPX m udieresis -20
KPX m ugrave -20
KPX m uhungarumlaut -20
KPX m umacron -20
KPX m uogonek -20
KPX m uring -20
KPX m y -30
KPX m yacute -30
KPX m ydieresis -30
KPX n u -10
KPX n uacute -10
KPX n ucircumflex -10
KPX n udieresis -10
KPX n ugrave -10
KPX n uhungarumlaut -10
KPX n umacron -10
KPX n uogonek -10
KPX n uring -10
KPX n v -40
KPX n y -20
KPX n yacute -20
KPX n ydieresis -20
KPX nacute u -10
KPX nacute uacute -10
KPX nacute ucircumflex -10
KPX nacute udieresis -10
KPX nacute ugrave -10
KPX nacute uhungarumlaut -10
KPX nacute umacron -10
KPX nacute uogonek -10
KPX nacute uring -10
KPX nacute v -40
KPX nacute y -20
KPX nacute yacute -20
KPX nacute ydieresis -20
KPX ncaron u -10
KPX ncaron uacute -10
KPX ncaron ucircumflex -10
KPX ncaron udieresis -10
KPX ncaron ugrave -10
KPX ncaron uhungarumlaut -10
KPX ncaron umacron -10
KPX ncaron uogonek -10
KPX ncaron uring -10
KPX ncaron v -40
KPX ncaron y -20
KPX ncaron yacute -20
KPX ncaron ydieresis -20
KPX ncommaaccent u -10
KPX ncommaaccent uacute -10
KPX ncommaaccent ucircumflex -10
KPX ncommaaccent udieresis -10
KPX ncommaaccent ugrave -10
KPX ncommaaccent uhungarumlaut -10
KPX ncommaaccent umacron -10
KPX ncommaaccent uogonek -10
KPX ncommaaccent uring -10
KPX ncommaaccent v -40
KPX ncommaaccent y -20
KPX ncommaaccent yacute -20
KPX ncommaaccent ydieresis -20
KPX ntilde u -10
KPX ntilde uacute -10
KPX ntilde ucircumflex -10
KPX ntilde udieresis -10
KPX ntilde ugrave -10
KPX ntilde uhungarumlaut -10
KPX ntilde umacron -10
KPX ntilde uogonek -10
KPX ntilde uring -10
KPX ntilde v -40
KPX ntilde y -20
KPX ntilde yacute -20
KPX ntilde ydieresis -20
KPX o v -20
KPX o w -15
KPX o x -30
KPX o y -20
KPX o yacute -20
KPX o ydieresis -20
KPX oacute v -20
KPX oacute w -15
KPX oacute x -30
KPX oacute y -20
KPX oacute yacute -20
KPX oacute ydieresis -20
KPX ocircumflex v -20
KPX ocircumflex w -15
KPX ocircumflex x -30
KPX ocircumflex y -20
KPX ocircumflex yacute -20
KPX ocircumflex ydieresis -20
KPX odieresis v -20
KPX odieresis w -15
KPX odieresis x -30
KPX odieresis y -20
KPX odieresis yacute -20
KPX odieresis ydieresis -20
KPX ograve v -20
KPX ograve w -15
KPX ograve x -30
KPX ograve y -20
KPX ograve yacute -20
KPX ograve ydieresis -20
KPX ohungarumlaut v -20
KPX ohungarumlaut w -15
KPX ohungarumlaut x -30
KPX ohungarumlaut y -20
KPX ohungarumlaut yacute -20
KPX ohungarumlaut ydieresis -20
KPX omacron v -20
KPX omacron w -15
KPX omacron x -30
KPX omacron y -20
KPX omacron yacute -20
KPX omacron ydieresis -20
KPX oslash v -20
KPX oslash w -15
KPX oslash x -30
KPX oslash y -20
KPX oslash yacute -20
KPX oslash ydieresis -20
KPX otilde v -20
KPX otilde w -15
KPX otilde x -30
KPX otilde y -20
KPX otilde yacute -20
KPX otilde ydieresis -20
KPX p y -15
KPX p yacute -15
KPX p ydieresis -15
KPX period quotedblright -120
KPX period quoteright -120
KPX period space -40
KPX quotedblright space -80
KPX quoteleft quoteleft -46
KPX quoteright d -80
KPX quoteright dcroat -80
KPX quoteright l -20
KPX quoteright lacute -20
KPX quoteright lcommaaccent -20
KPX quoteright lslash -20
KPX quoteright quoteright -46
KPX quoteright r -40
KPX quoteright racute -40
KPX quoteright rcaron -40
KPX quoteright rcommaaccent -40
KPX quoteright s -60
KPX quoteright sacute -60
KPX quoteright scaron -60
KPX quoteright scedilla -60
KPX quoteright scommaaccent -60
KPX quoteright space -80
KPX quoteright v -20
KPX r c -20
KPX r cacute -20
KPX r ccaron -20
KPX r ccedilla -20
KPX r comma -60
KPX r d -20
KPX r dcroat -20
KPX r g -15
KPX r gbreve -15
KPX r gcommaaccent -15
KPX r hyphen -20
KPX r o -20
KPX r oacute -20
KPX r ocircumflex -20
KPX r odieresis -20
KPX r ograve -20
KPX r ohungarumlaut -20
KPX r omacron -20
KPX r oslash -20
KPX r otilde -20
KPX r period -60
KPX r q -20
KPX r s -15
KPX r sacute -15
KPX r scaron -15
KPX r scedilla -15
KPX r scommaaccent -15
KPX r t 20
KPX r tcommaaccent 20
KPX r v 10
KPX r y 10
KPX r yacute 10
KPX r ydieresis 10
KPX racute c -20
KPX racute cacute -20
KPX racute ccaron -20
KPX racute ccedilla -20
KPX racute comma -60
KPX racute d -20
KPX racute dcroat -20
KPX racute g -15
KPX racute gbreve -15
KPX racute gcommaaccent -15
KPX racute hyphen -20
KPX racute o -20
KPX racute oacute -20
KPX racute ocircumflex -20
KPX racute odieresis -20
KPX racute ograve -20
KPX racute ohungarumlaut -20
KPX racute omacron -20
KPX racute oslash -20
KPX racute otilde -20
KPX racute period -60
KPX racute q -20
KPX racute s -15
KPX racute sacute -15
KPX racute scaron -15
KPX racute scedilla -15
KPX racute scommaaccent -15
KPX racute t 20
KPX racute tcommaaccent 20
KPX racute v 10
KPX racute y 10
KPX racute yacute 10
KPX racute ydieresis 10
KPX rcaron c -20
KPX rcaron cacute -20
KPX rcaron ccaron -20
KPX rcaron ccedilla -20
KPX rcaron comma -60
KPX rcaron d -20
KPX rcaron dcroat -20
KPX rcaron g -15
KPX rcaron gbreve -15
KPX rcaron gcommaaccent -15
KPX rcaron hyphen -20
KPX rcaron o -20
KPX rcaron oacute -20
KPX rcaron ocircumflex -20
KPX rcaron odieresis -20
KPX rcaron ograve -20
KPX rcaron ohungarumlaut -20
KPX rcaron omacron -20
KPX rcaron oslash -20
KPX rcaron otilde -20
KPX rcaron period -60
KPX rcaron q -20
KPX rcaron s -15
KPX rcaron sacute -15
KPX rcaron scaron -15
KPX rcaron scedilla -15
KPX rcaron scommaaccent -15
KPX rcaron t 20
KPX rcaron tcommaaccent 20
KPX rcaron v 10
KPX rcaron y 10
KPX rcaron yacute 10
KPX rcaron ydieresis 10
KPX rcommaaccent c -20
KPX rcommaaccent cacute -20
KPX rcommaaccent ccaron -20
KPX rcommaaccent ccedilla -20
KPX rcommaaccent comma -60
KPX rcommaaccent d -20
KPX rcommaaccent dcroat -20
KPX rcommaaccent g -15
KPX rcommaaccent gbreve -15
KPX rcommaaccent gcommaaccent -15
KPX rcommaaccent hyphen -20
KPX rcommaaccent o -20
KPX rcommaaccent oacute -20
KPX rcommaaccent ocircumflex -20
KPX rcommaaccent odieresis -20
KPX rcommaaccent ograve -20
KPX rcommaaccent ohungarumlaut -20
KPX rcommaaccent omacron -20
KPX rcommaaccent oslash -20
KPX rcommaaccent otilde -20
KPX rcommaaccent period -60
KPX rcommaaccent q -20
KPX rcommaaccent s -15
KPX rcommaaccent sacute -15
KPX rcommaaccent scaron -15
KPX rcommaaccent scedilla -15
KPX rcommaaccent scommaaccent -15
KPX rcommaaccent t 20
KPX rcommaaccent tcommaaccent 20
KPX rcommaaccent v 10
KPX rcommaaccent y 10
KPX rcommaaccent yacute 10
KPX rcommaaccent ydieresis 10
KPX s w -15
KPX sacute w -15
KPX scaron w -15
KPX scedilla w -15
KPX scommaaccent w -15
KPX semicolon space -40
KPX space T -100
KPX space Tcaron -100
KPX space Tcommaaccent -100
KPX space V -80
KPX space W -80
KPX space Y -120
KPX space Yacute -120
KPX space Ydieresis -120
KPX space quotedblleft -80
KPX space quoteleft -60
KPX v a -20
KPX v aacute -20
KPX v abreve -20
KPX v acircumflex -20
KPX v adieresis -20
KPX v agrave -20
KPX v amacron -20
KPX v aogonek -20
KPX v aring -20
KPX v atilde -20
KPX v comma -80
KPX v o -30
KPX v oacute -30
KPX v ocircumflex -30
KPX v odieresis -30
KPX v ograve -30
KPX v ohungarumlaut -30
KPX v omacron -30
KPX v oslash -30
KPX v otilde -30
KPX v period -80
KPX w comma -40
KPX w o -20
KPX w oacute -20
KPX w ocircumflex -20
KPX w odieresis -20
KPX w ograve -20
KPX w ohungarumlaut -20
KPX w omacron -20
KPX w oslash -20
KPX w otilde -20
KPX w period -40
KPX x e -10
KPX x eacute -10
KPX x ecaron -10
KPX x ecircumflex -10
KPX x edieresis -10
KPX x edotaccent -10
KPX x egrave -10
KPX x emacron -10
KPX x eogonek -10
KPX y a -30
KPX y aacute -30
KPX y abreve -30
KPX y acircumflex -30
KPX y adieresis -30
KPX y agrave -30
KPX y amacron -30
KPX y aogonek -30
KPX y aring -30
KPX y atilde -30
KPX y comma -80
KPX y e -10
KPX y eacute -10
KPX y ecaron -10
KPX y ecircumflex -10
KPX y edieresis -10
KPX y edotaccent -10
KPX y egrave -10
KPX y emacron -10
KPX y eogonek -10
KPX y o -25
KPX y oacute -25
KPX y ocircumflex -25
KPX y odieresis -25
KPX y ograve -25
KPX y ohungarumlaut -25
KPX y omacron -25
KPX y oslash -25
KPX y otilde -25
KPX y period -80
KPX yacute a -30
KPX yacute aacute -30
KPX yacute abreve -30
KPX yacute acircumflex -30
KPX yacute adieresis -30
KPX yacute agrave -30
KPX yacute amacron -30
KPX yacute aogonek -30
KPX yacute aring -30
KPX yacute atilde -30
KPX yacute comma -80
KPX yacute e -10
KPX yacute eacute -10
KPX yacute ecaron -10
KPX yacute ecircumflex -10
KPX yacute edieresis -10
KPX yacute edotaccent -10
KPX yacute egrave -10
KPX yacute emacron -10
KPX yacute eogonek -10
KPX yacute o -25
KPX yacute oacute -25
KPX yacute ocircumflex -25
KPX yacute odieresis -25
KPX yacute ograve -25
KPX yacute ohungarumlaut -25
KPX yacute omacron -25
KPX yacute oslash -25
KPX yacute otilde -25
KPX yacute period -80
KPX ydieresis a -30
KPX ydieresis aacute -30
KPX ydieresis abreve -30
KPX ydieresis acircumflex -30
KPX ydieresis adieresis -30
KPX ydieresis agrave -30
KPX ydieresis amacron -30
KPX ydieresis aogonek -30
KPX ydieresis aring -30
KPX ydieresis atilde -30
KPX ydieresis comma -80
KPX ydieresis e -10
KPX ydieresis eacute -10
KPX ydieresis ecaron -10
KPX ydieresis ecircumflex -10
KPX ydieresis edieresis -10
KPX ydieresis edotaccent -10
KPX ydieresis egrave -10
KPX ydieresis emacron -10
KPX ydieresis eogonek -10
KPX ydieresis o -25
KPX ydieresis oacute -25
KPX ydieresis ocircumflex -25
KPX ydieresis odieresis -25
KPX ydieresis ograve -25
KPX ydieresis ohungarumlaut -25
KPX ydieresis omacron -25
KPX ydieresis oslash -25
KPX ydieresis otilde -25
KPX ydieresis period -80
KPX z e 10
KPX z eacute 10
KPX z ecaron 10
KPX z ecircumflex 10
KPX z edieresis 10
KPX z edotaccent 10
KPX z egrave 10
KPX z emacron 10
KPX z eogonek 10
KPX zacute e 10
KPX zacute eacute 10
KPX zacute ecaron 10
KPX zacute ecircumflex 10
KPX zacute edieresis 10
KPX zacute edotaccent 10
KPX zacute egrave 10
KPX zacute emacron 10
KPX zacute eogonek 10
KPX zcaron e 10
KPX zcaron eacute 10
KPX zcaron ecaron 10
KPX zcaron ecircumflex 10
KPX zcaron edieresis 10
KPX zcaron edotaccent 10
KPX zcaron egrave 10
KPX zcaron emacron 10
KPX zcaron eogonek 10
KPX zdotaccent e 10
KPX zdotaccent eacute 10
KPX zdotaccent ecaron 10
KPX zdotaccent ecircumflex 10
KPX zdotaccent edieresis 10
KPX zdotaccent edotaccent 10
KPX zdotaccent egrave 10
KPX zdotaccent emacron 10
KPX zdotaccent eogonek 10
EndKernPairs
EndKernData
EndFontMetrics
StartFontMetrics 4.1
Comment Copyright (c) 1985, 1987, 1989, 1990, 1997 Adobe Systems Incorporated.  All Rights Reserved.
Comment Creation Date: Thu May  1 12:44:31 1997
Comment UniqueID 43055
Comment VMusage 14960 69346
FontName Helvetica-Oblique
FullName Helvetica Oblique
FamilyName Helvetica
Weight Medium
ItalicAngle -12
IsFixedPitch false
CharacterSet ExtendedRoman
FontBBox -170 -225 1116 931
UnderlinePosition -100
UnderlineThickness 50
Version 002.000
Notice Copyright (c) 1985, 1987, 1989, 1990, 1997 Adobe Systems Incorporated.  All Rights Reserved.Helvetica is a trademark of Linotype-Hell AG and/or its subsidiaries.
EncodingScheme WinAnsiEncoding
CapHeight 718
XHeight 523
Ascender 718
Descender -207
StdHW 76
StdVW 88
StartCharMetrics 317
C 32 ; WX 278 ; N space ; B 0 0 0 0 ;
C 160 ; WX 278 ; N space ; B 0 0 0 0 ;
C 33 ; WX 278 ; N exclam ; B 90 0 340 718 ;
C 34 ; WX 355 ; N quotedbl ; B 168 463 438 718 ;
C 35 ; WX 556 ; N numbersign ; B 73 0 631 688 ;
C 36 ; WX 556 ; N dollar ; B 69 -115 617 775 ;
C 37 ; WX 889 ; N percent ; B 147 -19 889 703 ;
C 38 ; WX 667 ; N ampersand ; B 77 -15 647 718 ;
C 146 ; WX 222 ; N quoteright ; B 151 463 310 718 ;
C 40 ; WX 333 ; N parenleft ; B 108 -207 454 733 ;
C 41 ; WX 333 ; N parenright ; B -9 -207 337 733 ;
C 42 ; WX 389 ; N asterisk ; B 165 431 475 718 ;
C 43 ; WX 584 ; N plus ; B 85 0 606 505 ;
C 44 ; WX 278 ; N comma ; B 56 -147 214 106 ;
C 45 ; WX 333 ; N hyphen ; B 93 232 357 322 ;
C 173 ; WX 333 ; N hyphen ; B 44 232 289 322 ;
C 46 ; WX 278 ; N period ; B 87 0 214 106 ;
C 47 ; WX 278 ; N slash ; B -21 -19 452 737 ;
C 48 ; WX 556 ; N zero ; B 93 -19 608 703 ;
C 49 ; WX 556 ; N one ; B 207 0 508 703 ;
C 50 ; WX 556 ; N two ; B 26 0 617 703 ;
C 51 ; WX 556 ; N three ; B 75 -19 610 703 ;
C 52 ; WX 556 ; N four ; B 61 0 576 703 ;
C 53 ; WX 556 ; N five ; B 68 -19 621 688 ;
C 54 ; WX 556 ; N six ; B 91 -19 615 703 ;
C 55 ; WX 556 ; N seven ; B 137 0 669 688 ;
C 56 ; WX 556 ; N eight ; B 74 -19 607 703 ;
C 57 ; WX 556 ; N nine ; B 82 -19 609 703 ;
C 58 ; WX 278 ; N colon ; B 87 0 301 516 ;
C 59 ; WX 278 ; N semicolon ; B 56 -147 301 516 ;
C 60 ; WX 584 ; N less ; B 94 11 641 495 ;
C 61 ; WX 584 ; N equal ; B 63 115 628 390 ;
C 62 ; WX 584 ; N greater ; B 50 11 597 495 ;
C 63 ; WX 556 ; N question ; B 161 0 610 727 ;
C 64 ; WX 1015 ; N at ; B 215 -19 965 737 ;
C 65 ; WX 667 ; N A ; B 14 0 654 718 ;
C 66 ; WX 667 ; N B ; B 74 0 712 718 ;
C 67 ; WX 722 ; N C ; B 108 -19 782 737 ;
C 68 ; WX 722 ; N D ; B 81 0 764 718 ;
C 69 ; WX 667 ; N E ; B 86 0 762 718 ;
C 70 ; WX 611 ; N F ; B 86 0 736 718 ;
C 71 ; WX 778 ; N G ; B 111 -19 799 737 ;
C 72 ; WX 722 ; N H ; B 77 0 799 718 ;
C 73 ; WX 278 ; N I ; B 91 0 341 718 ;
C 74 ; WX 500 ; N J ; B 47 -19 581 718 ;
C 75 ; WX 667 ; N K ; B 76 0 808 718 ;
C 76 ; WX 556 ; N L ; B 76 0 555 718 ;
C 77 ; WX 833 ; N M ; B 73 0 914 718 ;
C 78 ; WX 722 ; N N ; B 76 0 799 718 ;
C 79 ; WX 778 ; N O ; B 105 -19 826 737 ;
C 80 ; WX 667 ; N P ; B 86 0 737 718 ;
C 81 ; WX 778 ; N Q ; B 105 -56 826 737 ;
C 82 ; WX 722 ; N R ; B 88 0 773 718 ;
C 83 ; WX 667 ; N S ; B 90 -19 713 737 ;
C 84 ; WX 611 ; N T ; B 148 0 750 718 ;
C 85 ; WX 722 ; N U ; B 123 -19 797 718 ;
C 86 ; WX 667 ; N V ; B 173 0 800 718 ;
C 87 ; WX 944 ; N W ; B 169 0 1081 718 ;
C 88 ; WX 667 ; N X ; B 19 0 790 718 ;
C 89 ; WX 667 ; N Y ; B 167 0 806 718 ;
C 90 ; WX 611 ; N Z ; B 23 0 741 718 ;
C 91 ; WX 278 ; N bracketleft ; B 21 -196 403 722 ;
C 92 ; WX 278 ; N backslash ; B 140 -19 291 737 ;
C 93 ; WX 278 ; N bracketright ; B -14 -196 368 722 ;
C 94 ; WX 469 ; N asciicircum ; B 42 264 539 688 ;
C 95 ; WX 556 ; N underscore ; B -27 -125 540 -75 ;
C 145 ; WX 222 ; N quoteleft ; B 165 470 323 725 ;
C 97 ; WX 556 ; N a ; B 61 -15 559 538 ;
C 98 ; WX 556 ; N b ; B 58 -15 584 718 ;
C 99 ; WX 500 ; N c ; B 74 -15 553 538 ;
C 100 ; WX 556 ; N d ; B 84 -15 652 718 ;
C 101 ; WX 556 ; N e ; B 84 -15 578 538 ;
C 102 ; WX 278 ; N f ; B 86 0 416 728 ; L i fi ; L l fl ;
C 103 ; WX 556 ; N g ; B 42 -220 610 538 ;
C 104 ; WX 556 ; N h ; B 65 0 573 718 ;
C 105 ; WX 222 ; N i ; B 67 0 308 718 ;
C 106 ; WX 222 ; N j ; B -60 -210 308 718 ;
C 107 ; WX 500 ; N k ; B 67 0 600 718 ;
C 108 ; WX 222 ; N l ; B 67 0 308 718 ;
C 109 ; WX 833 ; N m ; B 65 0 852 538 ;
C 110 ; WX 556 ; N n ; B 65 0 573 538 ;
C 111 ; WX 556 ; N o ; B 83 -14 585 538 ;
C 112 ; WX 556 ; N p ; B 14 -207 584 538 ;
C 113 ; WX 556 ; N q ; B 84 -207 605 538 ;
C 114 ; WX 333 ; N r ; B 77 0 446 538 ;
C 115 ; WX 500 ; N s ; B 63 -15 529 538 ;
C 116 ; WX 278 ; N t ; B 102 -7 368 669 ;
C 117 ; WX 556 ; N u ; B 94 -15 600 523 ;
C 118 ; WX 500 ; N v ; B 119 0 603 523 ;
C 119 ; WX 722 ; N w ; B 125 0 820 523 ;
C 120 ; WX 500 ; N x ; B 11 0 594 523 ;
C 121 ; WX 500 ; N y ; B 15 -214 600 523 ;
C 122 ; WX 500 ; N z ; B 31 0 571 523 ;
C 123 ; WX 334 ; N braceleft ; B 92 -196 445 722 ;
C 124 ; WX 260 ; N bar ; B 46 -225 332 775 ;
C 125 ; WX 334 ; N braceright ; B 0 -196 354 722 ;
C 126 ; WX 584 ; N asciitilde ; B 111 180 580 326 ;
C 161 ; WX 333 ; N exclamdown ; B 77 -195 326 523 ;
C 162 ; WX 556 ; N cent ; B 95 -115 584 623 ;
C 163 ; WX 556 ; N sterling ; B 49 -16 634 718 ;
C -1 ; WX 167 ; N fraction ; B -170 -19 482 703 ;
C 165 ; WX 556 ; N yen ; B 81 0 699 688 ;
C 131 ; WX 556 ; N florin ; B -52 -207 654 737 ;
C 167 ; WX 556 ; N section ; B 76 -191 584 737 ;
C 164 ; WX 556 ; N currency ; B 60 99 646 603 ;
C 39 ; WX 191 ; N quotesingle ; B 157 463 285 718 ;
C 147 ; WX 333 ; N quotedblleft ; B 138 470 461 725 ;
C 171 ; WX 556 ; N guillemotleft ; B 146 108 554 446 ;
C 139 ; WX 333 ; N guilsinglleft ; B 137 108 340 446 ;
C 155 ; WX 333 ; N guilsinglright ; B 111 108 314 446 ;
C -1 ; WX 500 ; N fi ; B 86 0 587 728 ;
C -1 ; WX 500 ; N fl ; B 86 0 585 728 ;
C 150 ; WX 556 ; N endash ; B 51 240 623 313 ;
C 134 ; WX 556 ; N dagger ; B 135 -159 622 718 ;
C 135 ; WX 556 ; N daggerdbl ; B 52 -159 623 718 ;
C 183 ; WX 278 ; N periodcentered ; B 129 190 257 315 ;
C 182 ; WX 537 ; N paragraph ; B 126 -173 650 718 ;
C 149 ; WX 350 ; N bullet ; B 91 202 413 517 ;
C 130 ; WX 222 ; N quotesinglbase ; B 21 -149 180 106 ;
C 132 ; WX 333 ; N quotedblbase ; B -6 -149 318 106 ;
C 148 ; WX 333 ; N quotedblright ; B 124 463 448 718 ;
C 187 ; WX 556 ; N guillemotright ; B 120 108 528 446 ;
C 133 ; WX 1000 ; N ellipsis ; B 115 0 908 106 ;
C 137 ; WX 1000 ; N perthousand ; B 88 -19 1029 703 ;
C 191 ; WX 611 ; N questiondown ; B 85 -201 534 525 ;
C 96 ; WX 333 ; N grave ; B 170 593 337 734 ;
C 180 ; WX 333 ; N acute ; B 248 593 475 734 ;
C 136 ; WX 333 ; N circumflex ; B 147 593 438 734 ;
C 152 ; WX 333 ; N tilde ; B 125 606 490 722 ;
C 175 ; WX 333 ; N macron ; B 143 627 468 684 ;
C -1 ; WX 333 ; N breve ; B 167 595 476 731 ;
C -1 ; WX 333 ; N dotaccent ; B 249 604 362 706 ;
C 168 ; WX 333 ; N dieresis ; B 168 604 443 706 ;
C -1 ; WX 333 ; N ring ; B 214 572 402 756 ;
C 184 ; WX 333 ; N cedilla ; B 2 -225 232 0 ;
C -1 ; WX 333 ; N hungarumlaut ; B 157 593 565 734 ;
C -1 ; WX 333 ; N ogonek ; B 43 -225 249 0 ;
C -1 ; WX 333 ; N caron ; B 177 593 468 734 ;
C 151 ; WX 1000 ; N emdash ; B 51 240 1067 313 ;
C 198 ; WX 1000 ; N AE ; B 8 0 1097 718 ;
C 170 ; WX 370 ; N ordfeminine ; B 127 405 449 737 ;
C -1 ; WX 556 ; N Lslash ; B 41 0 555 718 ;
C 216 ; WX 778 ; N Oslash ; B 43 -19 890 737 ;
C 140 ; WX 1000 ; N OE ; B 98 -19 1116 737 ;
C 186 ; WX 365 ; N ordmasculine ; B 141 405 468 737 ;
C 230 ; WX 889 ; N ae ; B 61 -15 909 538 ;
C -1 ; WX 278 ; N dotlessi ; B 95 0 294 523 ;
C -1 ; WX 222 ; N lslash ; B 41 0 347 718 ;
C 248 ; WX 611 ; N oslash ; B 29 -22 647 545 ;
C 156 ; WX 944 ; N oe ; B 83 -15 964 538 ;
C 223 ; WX 611 ; N germandbls ; B 67 -15 658 728 ;
C 207 ; WX 278 ; N Idieresis ; B 91 0 458 901 ;
C 233 ; WX 556 ; N eacute ; B 84 -15 587 734 ;
C -1 ; WX 556 ; N abreve ; B 61 -15 578 731 ;
C -1 ; WX 556 ; N uhungarumlaut ; B 94 -15 677 734 ;
C -1 ; WX 556 ; N ecaron ; B 84 -15 580 734 ;
C 159 ; WX 667 ; N Ydieresis ; B 167 0 806 901 ;
C 247 ; WX 584 ; N divide ; B 85 -19 606 524 ;
C 221 ; WX 667 ; N Yacute ; B 167 0 806 929 ;
C 194 ; WX 667 ; N Acircumflex ; B 14 0 654 929 ;
C 225 ; WX 556 ; N aacute ; B 61 -15 587 734 ;
C 219 ; WX 722 ; N Ucircumflex ; B 123 -19 797 929 ;
C 253 ; WX 500 ; N yacute ; B 15 -214 600 734 ;
C -1 ; WX 500 ; N scommaaccent ; B 63 -225 529 538 ;
C 234 ; WX 556 ; N ecircumflex ; B 84 -15 578 734 ;
C -1 ; WX 722 ; N Uring ; B 123 -19 797 931 ;
C 220 ; WX 722 ; N Udieresis ; B 123 -19 797 901 ;
C -1 ; WX 556 ; N aogonek ; B 61 -220 559 538 ;
C 218 ; WX 722 ; N Uacute ; B 123 -19 797 929 ;
C -1 ; WX 556 ; N uogonek ; B 94 -225 600 523 ;
C 203 ; WX 667 ; N Edieresis ; B 86 0 762 901 ;
C -1 ; WX 722 ; N Dcroat ; B 69 0 764 718 ;
C -1 ; WX 250 ; N commaaccent ; B 39 -225 172 -40 ;
C 169 ; WX 737 ; N copyright ; B 54 -19 837 737 ;
C -1 ; WX 667 ; N Emacron ; B 86 0 762 879 ;
C -1 ; WX 500 ; N ccaron ; B 74 -15 553 734 ;
C 229 ; WX 556 ; N aring ; B 61 -15 559 756 ;
C -1 ; WX 722 ; N Ncommaaccent ; B 76 -225 799 718 ;
C -1 ; WX 222 ; N lacute ; B 67 0 461 929 ;
C 224 ; WX 556 ; N agrave ; B 61 -15 559 734 ;
C -1 ; WX 611 ; N Tcommaaccent ; B 148 -225 750 718 ;
C -1 ; WX 722 ; N Cacute ; B 108 -19 782 929 ;
C 227 ; WX 556 ; N atilde ; B 61 -15 592 722 ;
C -1 ; WX 667 ; N Edotaccent ; B 86 0 762 901 ;
C 154 ; WX 500 ; N scaron ; B 63 -15 552 734 ;
C -1 ; WX 500 ; N scedilla ; B 63 -225 529 538 ;
C 237 ; WX 278 ; N iacute ; B 95 0 448 734 ;
C -1 ; WX 471 ; N lozenge ; B 88 0 540 728 ;
C -1 ; WX 722 ; N Rcaron ; B 88 0 773 929 ;
C -1 ; WX 778 ; N Gcommaaccent ; B 111 -225 799 737 ;
C 251 ; WX 556 ; N ucircumflex ; B 94 -15 600 734 ;
C 226 ; WX 556 ; N acircumflex ; B 61 -15 559 734 ;
C -1 ; WX 667 ; N Amacron ; B 14 0 677 879 ;
C -1 ; WX 333 ; N rcaron ; B 77 0 508 734 ;
C 231 ; WX 500 ; N ccedilla ; B 74 -225 553 538 ;
C -1 ; WX 611 ; N Zdotaccent ; B 23 0 741 901 ;
C 222 ; WX 667 ; N Thorn ; B 86 0 712 718 ;
C -1 ; WX 778 ; N Omacron ; B 105 -19 826 879 ;
C -1 ; WX 722 ; N Racute ; B 88 0 773 929 ;
C -1 ; WX 667 ; N Sacute ; B 90 -19 713 929 ;
C -1 ; WX 643 ; N dcaron ; B 84 -15 808 718 ;
C -1 ; WX 722 ; N Umacron ; B 123 -19 797 879 ;
C -1 ; WX 556 ; N uring ; B 94 -15 600 756 ;
C 179 ; WX 333 ; N threesuperior ; B 90 270 436 703 ;
C 210 ; WX 778 ; N Ograve ; B 105 -19 826 929 ;
C 192 ; WX 667 ; N Agrave ; B 14 0 654 929 ;
C -1 ; WX 667 ; N Abreve ; B 14 0 685 926 ;
C 215 ; WX 584 ; N multiply ; B 50 0 642 506 ;
C 250 ; WX 556 ; N uacute ; B 94 -15 600 734 ;
C -1 ; WX 611 ; N Tcaron ; B 148 0 750 929 ;
C -1 ; WX 476 ; N partialdiff ; B 41 -38 550 714 ;
C 255 ; WX 500 ; N ydieresis ; B 15 -214 600 706 ;
C -1 ; WX 722 ; N Nacute ; B 76 0 799 929 ;
C 238 ; WX 278 ; N icircumflex ; B 95 0 411 734 ;
C 202 ; WX 667 ; N Ecircumflex ; B 86 0 762 929 ;
C 228 ; WX 556 ; N adieresis ; B 61 -15 559 706 ;
C 235 ; WX 556 ; N edieresis ; B 84 -15 578 706 ;
C -1 ; WX 500 ; N cacute ; B 74 -15 559 734 ;
C -1 ; WX 556 ; N nacute ; B 65 0 587 734 ;
C -1 ; WX 556 ; N umacron ; B 94 -15 600 684 ;
C -1 ; WX 722 ; N Ncaron ; B 76 0 799 929 ;
C 205 ; WX 278 ; N Iacute ; B 91 0 489 929 ;
C 177 ; WX 584 ; N plusminus ; B 39 0 618 506 ;
C 166 ; WX 260 ; N brokenbar ; B 62 -150 316 700 ;
C 174 ; WX 737 ; N registered ; B 54 -19 837 737 ;
C -1 ; WX 778 ; N Gbreve ; B 111 -19 799 926 ;
C -1 ; WX 278 ; N Idotaccent ; B 91 0 377 901 ;
C -1 ; WX 600 ; N summation ; B 15 -10 671 706 ;
C 200 ; WX 667 ; N Egrave ; B 86 0 762 929 ;
C -1 ; WX 333 ; N racute ; B 77 0 475 734 ;
C -1 ; WX 556 ; N omacron ; B 83 -14 585 684 ;
C -1 ; WX 611 ; N Zacute ; B 23 0 741 929 ;
C 142 ; WX 611 ; N Zcaron ; B 23 0 741 929 ;
C -1 ; WX 549 ; N greaterequal ; B 26 0 620 674 ;
C 208 ; WX 722 ; N Eth ; B 69 0 764 718 ;
C 199 ; WX 722 ; N Ccedilla ; B 108 -225 782 737 ;
C -1 ; WX 222 ; N lcommaaccent ; B 25 -225 308 718 ;
C -1 ; WX 317 ; N tcaron ; B 102 -7 501 808 ;
C -1 ; WX 556 ; N eogonek ; B 84 -225 578 538 ;
C -1 ; WX 722 ; N Uogonek ; B 123 -225 797 718 ;
C 193 ; WX 667 ; N Aacute ; B 14 0 683 929 ;
C 196 ; WX 667 ; N Adieresis ; B 14 0 654 901 ;
C 232 ; WX 556 ; N egrave ; B 84 -15 578 734 ;
C -1 ; WX 500 ; N zacute ; B 31 0 571 734 ;
C -1 ; WX 222 ; N iogonek ; B -61 -225 308 718 ;
C 211 ; WX 778 ; N Oacute ; B 105 -19 826 929 ;
C 243 ; WX 556 ; N oacute ; B 83 -14 587 734 ;
C -1 ; WX 556 ; N amacron ; B 61 -15 580 684 ;
C -1 ; WX 500 ; N sacute ; B 63 -15 559 734 ;
C 239 ; WX 278 ; N idieresis ; B 95 0 416 706 ;
C 212 ; WX 778 ; N Ocircumflex ; B 105 -19 826 929 ;
C 217 ; WX 722 ; N Ugrave ; B 123 -19 797 929 ;
C -1 ; WX 612 ; N Delta ; B 6 0 608 688 ;
C 254 ; WX 556 ; N thorn ; B 14 -207 584 718 ;
C 178 ; WX 333 ; N twosuperior ; B 64 281 449 703 ;
C 214 ; WX 778 ; N Odieresis ; B 105 -19 826 901 ;
C 181 ; WX 556 ; N mu ; B 24 -207 600 523 ;
C 236 ; WX 278 ; N igrave ; B 95 0 310 734 ;
C -1 ; WX 556 ; N ohungarumlaut ; B 83 -14 677 734 ;
C -1 ; WX 667 ; N Eogonek ; B 86 -220 762 718 ;
C -1 ; WX 556 ; N dcroat ; B 84 -15 689 718 ;
C 190 ; WX 834 ; N threequarters ; B 130 -19 861 703 ;
C -1 ; WX 667 ; N Scedilla ; B 90 -225 713 737 ;
C -1 ; WX 299 ; N lcaron ; B 67 0 464 718 ;
C -1 ; WX 667 ; N Kcommaaccent ; B 76 -225 808 718 ;
C -1 ; WX 556 ; N Lacute ; B 76 0 555 929 ;
C 153 ; WX 1000 ; N trademark ; B 186 306 1056 718 ;
C -1 ; WX 556 ; N edotaccent ; B 84 -15 578 706 ;
C 204 ; WX 278 ; N Igrave ; B 91 0 351 929 ;
C -1 ; WX 278 ; N Imacron ; B 91 0 483 879 ;
C -1 ; WX 556 ; N Lcaron ; B 76 0 570 718 ;
C 189 ; WX 834 ; N onehalf ; B 114 -19 839 703 ;
C -1 ; WX 549 ; N lessequal ; B 26 0 666 674 ;
C 244 ; WX 556 ; N ocircumflex ; B 83 -14 585 734 ;
C 241 ; WX 556 ; N ntilde ; B 65 0 592 722 ;
C -1 ; WX 722 ; N Uhungarumlaut ; B 123 -19 801 929 ;
C 201 ; WX 667 ; N Eacute ; B 86 0 762 929 ;
C -1 ; WX 556 ; N emacron ; B 84 -15 580 684 ;
C -1 ; WX 556 ; N gbreve ; B 42 -220 610 731 ;
C 188 ; WX 834 ; N onequarter ; B 150 -19 802 703 ;
C 138 ; WX 667 ; N Scaron ; B 90 -19 713 929 ;
C -1 ; WX 667 ; N Scommaaccent ; B 90 -225 713 737 ;
C -1 ; WX 778 ; N Ohungarumlaut ; B 105 -19 829 929 ;
C 176 ; WX 400 ; N degree ; B 169 411 468 703 ;
C 242 ; WX 556 ; N ograve ; B 83 -14 585 734 ;
C -1 ; WX 722 ; N Ccaron ; B 108 -19 782 929 ;
C 249 ; WX 556 ; N ugrave ; B 94 -15 600 734 ;
C -1 ; WX 453 ; N radical ; B 79 -80 617 762 ;
C -1 ; WX 722 ; N Dcaron ; B 81 0 764 929 ;
C -1 ; WX 333 ; N rcommaaccent ; B 30 -225 446 538 ;
C 209 ; WX 722 ; N Ntilde ; B 76 0 799 917 ;
C 245 ; WX 556 ; N otilde ; B 83 -14 602 722 ;
C -1 ; WX 722 ; N Rcommaaccent ; B 88 -225 773 718 ;
C -1 ; WX 556 ; N Lcommaaccent ; B 76 -225 555 718 ;
C 195 ; WX 667 ; N Atilde ; B 14 0 699 917 ;
C -1 ; WX 667 ; N Aogonek ; B 14 -225 654 718 ;
C 197 ; WX 667 ; N Aring ; B 14 0 654 931 ;
C 213 ; WX 778 ; N Otilde ; B 105 -19 826 917 ;
C -1 ; WX 500 ; N zdotaccent ; B 31 0 571 706 ;
C -1 ; WX 667 ; N Ecaron ; B 86 0 762 929 ;
C -1 ; WX 278 ; N Iogonek ; B -33 -225 341 718 ;
C -1 ; WX 500 ; N kcommaaccent ; B 67 -225 600 718 ;
C -1 ; WX 584 ; N minus ; B 85 216 606 289 ;
C 206 ; WX 278 ; N Icircumflex ; B 91 0 452 929 ;
C -1 ; WX 556 ; N ncaron ; B 65 0 580 734 ;
C -1 ; WX 278 ; N tcommaaccent ; B 63 -225 368 669 ;
C 172 ; WX 584 ; N logicalnot ; B 106 108 628 390 ;
C 246 ; WX 556 ; N odieresis ; B 83 -14 585 706 ;
C 252 ; WX 556 ; N udieresis ; B 94 -15 600 706 ;
C -1 ; WX 549 ; N notequal ; B 34 -35 623 551 ;
C -1 ; WX 556 ; N gcommaaccent ; B 42 -220 610 822 ;
C 240 ; WX 556 ; N eth ; B 81 -15 617 737 ;
C 158 ; WX 500 ; N zcaron ; B 31 0 571 734 ;
C -1 ; WX 556 ; N ncommaaccent ; B 65 -225 573 538 ;
C 185 ; WX 333 ; N onesuperior ; B 166 281 371 703 ;
C -1 ; WX 278 ; N imacron ; B 95 0 417 684 ;
C 128 ; WX 556 ; N Euro ; B 0 0 0 0 ;
EndCharMetrics
StartKernData
StartKernPairs 2705
KPX A C -30
KPX A Cacute -30
KPX A Ccaron -30
KPX A Ccedilla -30
KPX A G -30
KPX A Gbreve -30
KPX A Gcommaaccent -30
KPX A O -30
KPX A Oacute -30
KPX A Ocircumflex -30
KPX A Odieresis -30
KPX A Ograve -30
KPX A Ohungarumlaut -30
KPX A Omacron -30
KPX A Oslash -30
KPX A Otilde -30
KPX A Q -30
KPX A T -120
KPX A Tcaron -120
KPX A Tcommaaccent -120
KPX A U -50
KPX A Uacute -50
KPX A Ucircumflex -50
KPX A Udieresis -50
KPX A Ugrave -50
KPX A Uhungarumlaut -50
KPX A Umacron -50
KPX A Uogonek -50
KPX A Uring -50
KPX A V -70
KPX A W -50
KPX A Y -100
KPX A Yacute -100
KPX A Ydieresis -100
KPX A u -30
KPX A uacute -30
KPX A ucircumflex -30
KPX A udieresis -30
KPX A ugrave -30
KPX A uhungarumlaut -30
KPX A umacron -30
KPX A uogonek -30
KPX A uring -30
KPX A v -40
KPX A w -40
KPX A y -40
KPX A yacute -40
KPX A ydieresis -40
KPX Aacute C -30
KPX Aacute Cacute -30
KPX Aacute Ccaron -30
KPX Aacute Ccedilla -30
KPX Aacute G -30
KPX Aacute Gbreve -30
KPX Aacute Gcommaaccent -30
KPX Aacute O -30
KPX Aacute Oacute -30
KPX Aacute Ocircumflex -30
KPX Aacute Odieresis -30
KPX Aacute Ograve -30
KPX Aacute Ohungarumlaut -30
KPX Aacute Omacron -30
KPX Aacute Oslash -30
KPX Aacute Otilde -30
KPX Aacute Q -30
KPX Aacute T -120
KPX Aacute Tcaron -120
KPX Aacute Tcommaaccent -120
KPX Aacute U -50
KPX Aacute Uacute -50
KPX Aacute Ucircumflex -50
KPX Aacute Udieresis -50
KPX Aacute Ugrave -50
KPX Aacute Uhungarumlaut -50
KPX Aacute Umacron -50
KPX Aacute Uogonek -50
KPX Aacute Uring -50
KPX Aacute V -70
KPX Aacute W -50
KPX Aacute Y -100
KPX Aacute Yacute -100
KPX Aacute Ydieresis -100
KPX Aacute u -30
KPX Aacute uacute -30
KPX Aacute ucircumflex -30
KPX Aacute udieresis -30
KPX Aacute ugrave -30
KPX Aacute uhungarumlaut -30
KPX Aacute umacron -30
KPX Aacute uogonek -30
KPX Aacute uring -30
KPX Aacute v -40
KPX Aacute w -40
KPX Aacute y -40
KPX Aacute yacute -40
KPX Aacute ydieresis -40
KPX Abreve C -30
KPX Abreve Cacute -30
KPX Abreve Ccaron -30
KPX Abreve Ccedilla -30
KPX Abreve G -30
KPX Abreve Gbreve -30
KPX Abreve Gcommaaccent -30
KPX Abreve O -30
KPX Abreve Oacute -30
KPX Abreve Ocircumflex -30
KPX Abreve Odieresis -30
KPX Abreve Ograve -30
KPX Abreve Ohungarumlaut -30
KPX Abreve Omacron -30
KPX Abreve Oslash -30
KPX Abreve Otilde -30
KPX Abreve Q -30
KPX Abreve T -120
KPX Abreve Tcaron -120
KPX Abreve Tcommaaccent -120
KPX Abreve U -50
KPX Abreve Uacute -50
KPX Abreve Ucircumflex -50
KPX Abreve Udieresis -50
KPX Abreve Ugrave -50
KPX Abreve Uhungarumlaut -50
KPX Abreve Umacron -50
KPX Abreve Uogonek -50
KPX Abreve Uring -50
KPX Abreve V -70
KPX Abreve W -50
KPX Abreve Y -100
KPX Abreve Yacute -100
KPX Abreve Ydieresis -100
KPX Abreve u -30
KPX Abreve uacute -30
KPX Abreve ucircumflex -30
KPX Abreve udieresis -30
KPX Abreve ugrave -30
KPX Abreve uhungarumlaut -30
KPX Abreve umacron -30
KPX Abreve uogonek -30
KPX Abreve uring -30
KPX Abreve v -40
KPX Abreve w -40
KPX Abreve y -40
KPX Abreve yacute -40
KPX Abreve ydieresis -40
KPX Acircumflex C -30
KPX Acircumflex Cacute -30
KPX Acircumflex Ccaron -30
KPX Acircumflex Ccedilla -30
KPX Acircumflex G -30
KPX Acircumflex Gbreve -30
KPX Acircumflex Gcommaaccent -30
KPX Acircumflex O -30
KPX Acircumflex Oacute -30
KPX Acircumflex Ocircumflex -30
KPX Acircumflex Odieresis -30
KPX Acircumflex Ograve -30
KPX Acircumflex Ohungarumlaut -30
KPX Acircumflex Omacron -30
KPX Acircumflex Oslash -30
KPX Acircumflex Otilde -30
KPX Acircumflex Q -30
KPX Acircumflex T -120
KPX Acircumflex Tcaron -120
KPX Acircumflex Tcommaaccent -120
KPX Acircumflex U -50
KPX Acircumflex Uacute -50
KPX Acircumflex Ucircumflex -50
KPX Acircumflex Udieresis -50
KPX Acircumflex Ugrave -50
KPX Acircumflex Uhungarumlaut -50
KPX Acircumflex Umacron -50
KPX Acircumflex Uogonek -50
KPX Acircumflex Uring -50
KPX Acircumflex V -70
KPX Acircumflex W -50
KPX Acircumflex Y -100
KPX Acircumflex Yacute -100
KPX Acircumflex Ydieresis -100
KPX Acircumflex u -30
KPX Acircumflex uacute -30
KPX Acircumflex ucircumflex -30
KPX Acircumflex udieresis -30
KPX Acircumflex ugrave -30
KPX Acircumflex uhungarumlaut -30
KPX Acircumflex umacron -30
KPX Acircumflex uogonek -30
KPX Acircumflex uring -30
KPX Acircumflex v -40
KPX Acircumflex w -40
KPX Acircumflex y -40
KPX Acircumflex yacute -40
KPX Acircumflex ydieresis -40
KPX Adieresis C -30
KPX Adieresis Cacute -30
KPX Adieresis Ccaron -30
KPX Adieresis Ccedilla -30
KPX Adieresis G -30
KPX Adieresis Gbreve -30
KPX Adieresis Gcommaaccent -30
KPX Adieresis O -30
KPX Adieresis Oacute -30
KPX Adieresis Ocircumflex -30
KPX Adieresis Odieresis -30
KPX Adieresis Ograve -30
KPX Adieresis Ohungarumlaut -30
KPX Adieresis Omacron -30
KPX Adieresis Oslash -30
KPX Adieresis Otilde -30
KPX Adieresis Q -30
KPX Adieresis T -120
KPX Adieresis Tcaron -120
KPX Adieresis Tcommaaccent -120
KPX Adieresis U -50
KPX Adieresis Uacute -50
KPX Adieresis Ucircumflex -50
KPX Adieresis Udieresis -50
KPX Adieresis Ugrave -50
KPX Adieresis Uhungarumlaut -50
KPX Adieresis Umacron -50
KPX Adieresis Uogonek -50
KPX Adieresis Uring -50
KPX Adieresis V -70
KPX Adieresis W -50
KPX Adieresis Y -100
KPX Adieresis Yacute -100
KPX Adieresis Ydieresis -100
KPX Adieresis u -30
KPX Adieresis uacute -30
KPX Adieresis ucircumflex -30
KPX Adieresis udieresis -30
KPX Adieresis ugrave -30
KPX Adieresis uhungarumlaut -30
KPX Adieresis umacron -30
KPX Adieresis uogonek -30
KPX Adieresis uring -30
KPX Adieresis v -40
KPX Adieresis w -40
KPX Adieresis y -40
KPX Adieresis yacute -40
KPX Adieresis ydieresis -40
KPX Agrave C -30
KPX Agrave Cacute -30
KPX Agrave Ccaron -30
KPX Agrave Ccedilla -30
KPX Agrave G -30
KPX Agrave Gbreve -30
KPX Agrave Gcommaaccent -30
KPX Agrave O -30
KPX Agrave Oacute -30
KPX Agrave Ocircumflex -30
KPX Agrave Odieresis -30
KPX Agrave Ograve -30
KPX Agrave Ohungarumlaut -30
KPX Agrave Omacron -30
KPX Agrave Oslash -30
KPX Agrave Otilde -30
KPX Agrave Q -30
KPX Agrave T -120
KPX Agrave Tcaron -120
KPX Agrave Tcommaaccent -120
KPX Agrave U -50
KPX Agrave Uacute -50
KPX Agrave Ucircumflex -50
KPX Agrave Udieresis -50
KPX Agrave Ugrave -50
KPX Agrave Uhungarumlaut -50
KPX Agrave Umacron -50
KPX Agrave Uogonek -50
KPX Agrave Uring -50
KPX Agrave V -70
KPX Agrave W -50
KPX Agrave Y -100
KPX Agrave Yacute -100
KPX Agrave Ydieresis -100
KPX Agrave u -30
KPX Agrave uacute -30
KPX Agrave ucircumflex -30
KPX Agrave udieresis -30
KPX Agrave ugrave -30
KPX Agrave uhungarumlaut -30
KPX Agrave umacron -30
KPX Agrave uogonek -30
KPX Agrave uring -30
KPX Agrave v -40
KPX Agrave w -40
KPX Agrave y -40
KPX Agrave yacute -40
KPX Agrave ydieresis -40
KPX Amacron C -30
KPX Amacron Cacute -30
KPX Amacron Ccaron -30
KPX Amacron Ccedilla -30
KPX Amacron G -30
KPX Amacron Gbreve -30
KPX Amacron Gcommaaccent -30
KPX Amacron O -30
KPX Amacron Oacute -30
KPX Amacron Ocircumflex -30
KPX Amacron Odieresis -30
KPX Amacron Ograve -30
KPX Amacron Ohungarumlaut -30
KPX Amacron Omacron -30
KPX Amacron Oslash -30
KPX Amacron Otilde -30
KPX Amacron Q -30
KPX Amacron T -120
KPX Amacron Tcaron -120
KPX Amacron Tcommaaccent -120
KPX Amacron U -50
KPX Amacron Uacute -50
KPX Amacron Ucircumflex -50
KPX Amacron Udieresis -50
KPX Amacron Ugrave -50
KPX Amacron Uhungarumlaut -50
KPX Amacron Umacron -50
KPX Amacron Uogonek -50
KPX Amacron Uring -50
KPX Amacron V -70
KPX Amacron W -50
KPX Amacron Y -100
KPX Amacron Yacute -100
KPX Amacron Ydieresis -100
KPX Amacron u -30
KPX Amacron uacute -30
KPX Amacron ucircumflex -30
KPX Amacron udieresis -30
KPX Amacron ugrave -30
KPX Amacron uhungarumlaut -30
KPX Amacron umacron -30
KPX Amacron uogonek -30
KPX Amacron uring -30
KPX Amacron v -40
KPX Amacron w -40
KPX Amacron y -40
KPX Amacron yacute -40
KPX Amacron ydieresis -40
KPX Aogonek C -30
KPX Aogonek Cacute -30
KPX Aogonek Ccaron -30
KPX Aogonek Ccedilla -30
KPX Aogonek G -30
KPX Aogonek Gbreve -30
KPX Aogonek Gcommaaccent -30
KPX Aogonek O -30
KPX Aogonek Oacute -30
KPX Aogonek Ocircumflex -30
KPX Aogonek Odieresis -30
KPX Aogonek Ograve -30
KPX Aogonek Ohungarumlaut -30
KPX Aogonek Omacron -30
KPX Aogonek Oslash -30
KPX Aogonek Otilde -30
KPX Aogonek Q -30
KPX Aogonek T -120
KPX Aogonek Tcaron -120
KPX Aogonek Tcommaaccent -120
KPX Aogonek U -50
KPX Aogonek Uacute -50
KPX Aogonek Ucircumflex -50
KPX Aogonek Udieresis -50
KPX Aogonek Ugrave -50
KPX Aogonek Uhungarumlaut -50
KPX Aogonek Umacron -50
KPX Aogonek Uogonek -50
KPX Aogonek Uring -50
KPX Aogonek V -70
KPX Aogonek W -50
KPX Aogonek Y -100
KPX Aogonek Yacute -100
KPX Aogonek Ydieresis -100
KPX Aogonek u -30
KPX Aogonek uacute -30
KPX Aogonek ucircumflex -30
KPX Aogonek udieresis -30
KPX Aogonek ugrave -30
KPX Aogonek uhungarumlaut -30
KPX Aogonek umacron -30
KPX Aogonek uogonek -30
KPX Aogonek uring -30
KPX Aogonek v -40
KPX Aogonek w -40
KPX Aogonek y -40
KPX Aogonek yacute -40
KPX Aogonek ydieresis -40
KPX Aring C -30
KPX Aring Cacute -30
KPX Aring Ccaron -30
KPX Aring Ccedilla -30
KPX Aring G -30
KPX Aring Gbreve -30
KPX Aring Gcommaaccent -30
KPX Aring O -30
KPX Aring Oacute -30
KPX Aring Ocircumflex -30
KPX Aring Odieresis -30
KPX Aring Ograve -30
KPX Aring Ohungarumlaut -30
KPX Aring Omacron -30
KPX Aring Oslash -30
KPX Aring Otilde -30
KPX Aring Q -30
KPX Aring T -120
KPX Aring Tcaron -120
KPX Aring Tcommaaccent -120
KPX Aring U -50
KPX Aring Uacute -50
KPX Aring Ucircumflex -50
KPX Aring Udieresis -50
KPX Aring Ugrave -50
KPX Aring Uhungarumlaut -50
KPX Aring Umacron -50
KPX Aring Uogonek -50
KPX Aring Uring -50
KPX Aring V -70
KPX Aring W -50
KPX Aring Y -100
KPX Aring Yacute -100
KPX Aring Ydieresis -100
KPX Aring u -30
KPX Aring uacute -30
KPX Aring ucircumflex -30
KPX Aring udieresis -30
KPX Aring ugrave -30
KPX Aring uhungarumlaut -30
KPX Aring umacron -30
KPX Aring uogonek -30
KPX Aring uring -30
KPX Aring v -40
KPX Aring w -40
KPX Aring y -40
KPX Aring yacute -40
KPX Aring ydieresis -40
KPX Atilde C -30
KPX Atilde Cacute -30
KPX Atilde Ccaron -30
KPX Atilde Ccedilla -30
KPX Atilde G -30
KPX Atilde Gbreve -30
KPX Atilde Gcommaaccent -30
KPX Atilde O -30
KPX Atilde Oacute -30
KPX Atilde Ocircumflex -30
KPX Atilde Odieresis -30
KPX Atilde Ograve -30
KPX Atilde Ohungarumlaut -30
KPX Atilde Omacron -30
KPX Atilde Oslash -30
KPX Atilde Otilde -30
KPX Atilde Q -30
KPX Atilde T -120
KPX Atilde Tcaron -120
KPX Atilde Tcommaaccent -120
KPX Atilde U -50
KPX Atilde Uacute -50
KPX Atilde Ucircumflex -50
KPX Atilde Udieresis -50
KPX Atilde Ugrave -50
KPX Atilde Uhungarumlaut -50
KPX Atilde Umacron -50
KPX Atilde Uogonek -50
KPX Atilde Uring -50
KPX Atilde V -70
KPX Atilde W -50
KPX Atilde Y -100
KPX Atilde Yacute -100
KPX Atilde Ydieresis -100
KPX Atilde u -30
KPX Atilde uacute -30
KPX Atilde ucircumflex -30
KPX Atilde udieresis -30
KPX Atilde ugrave -30
KPX Atilde uhungarumlaut -30
KPX Atilde umacron -30
KPX Atilde uogonek -30
KPX Atilde uring -30
KPX Atilde v -40
KPX Atilde w -40
KPX Atilde y -40
KPX Atilde yacute -40
KPX Atilde ydieresis -40
KPX B U -10
KPX B Uacute -10
KPX B Ucircumflex -10
KPX B Udieresis -10
KPX B Ugrave -10
KPX B Uhungarumlaut -10
KPX B Umacron -10
KPX B Uogonek -10
KPX B Uring -10
KPX B comma -20
KPX B period -20
KPX C comma -30
KPX C period -30
KPX Cacute comma -30
KPX Cacute period -30
KPX Ccaron comma -30
KPX Ccaron period -30
KPX Ccedilla comma -30
KPX Ccedilla period -30
KPX D A -40
KPX D Aacute -40
KPX D Abreve -40
KPX D Acircumflex -40
KPX D Adieresis -40
KPX D Agrave -40
KPX D Amacron -40
KPX D Aogonek -40
KPX D Aring -40
KPX D Atilde -40
KPX D V -70
KPX D W -40
KPX D Y -90
KPX D Yacute -90
KPX D Ydieresis -90
KPX D comma -70
KPX D period -70
KPX Dcaron A -40
KPX Dcaron Aacute -40
KPX Dcaron Abreve -40
KPX Dcaron Acircumflex -40
KPX Dcaron Adieresis -40
KPX Dcaron Agrave -40
KPX Dcaron Amacron -40
KPX Dcaron Aogonek -40
KPX Dcaron Aring -40
KPX Dcaron Atilde -40
KPX Dcaron V -70
KPX Dcaron W -40
KPX Dcaron Y -90
KPX Dcaron Yacute -90
KPX Dcaron Ydieresis -90
KPX Dcaron comma -70
KPX Dcaron period -70
KPX Dcroat A -40
KPX Dcroat Aacute -40
KPX Dcroat Abreve -40
KPX Dcroat Acircumflex -40
KPX Dcroat Adieresis -40
KPX Dcroat Agrave -40
KPX Dcroat Amacron -40
KPX Dcroat Aogonek -40
KPX Dcroat Aring -40
KPX Dcroat Atilde -40
KPX Dcroat V -70
KPX Dcroat W -40
KPX Dcroat Y -90
KPX Dcroat Yacute -90
KPX Dcroat Ydieresis -90
KPX Dcroat comma -70
KPX Dcroat period -70
KPX F A -80
KPX F Aacute -80
KPX F Abreve -80
KPX F Acircumflex -80
KPX F Adieresis -80
KPX F Agrave -80
KPX F Amacron -80
KPX F Aogonek -80
KPX F Aring -80
KPX F Atilde -80
KPX F a -50
KPX F aacute -50
KPX F abreve -50
KPX F acircumflex -50
KPX F adieresis -50
KPX F agrave -50
KPX F amacron -50
KPX F aogonek -50
KPX F aring -50
KPX F atilde -50
KPX F comma -150
KPX F e -30
KPX F eacute -30
KPX F ecaron -30
KPX F ecircumflex -30
KPX F edieresis -30
KPX F edotaccent -30
KPX F egrave -30
KPX F emacron -30
KPX F eogonek -30
KPX F o -30
KPX F oacute -30
KPX F ocircumflex -30
KPX F odieresis -30
KPX F ograve -30
KPX F ohungarumlaut -30
KPX F omacron -30
KPX F oslash -30
KPX F otilde -30
KPX F period -150
KPX F r -45
KPX F racute -45
KPX F rcaron -45
KPX F rcommaaccent -45
KPX J A -20
KPX J Aacute -20
KPX J Abreve -20
KPX J Acircumflex -20
KPX J Adieresis -20
KPX J Agrave -20
KPX J Amacron -20
KPX J Aogonek -20
KPX J Aring -20
KPX J Atilde -20
KPX J a -20
KPX J aacute -20
KPX J abreve -20
KPX J acircumflex -20
KPX J adieresis -20
KPX J agrave -20
KPX J amacron -20
KPX J aogonek -20
KPX J aring -20
KPX J atilde -20
KPX J comma -30
KPX J period -30
KPX J u -20
KPX J uacute -20
KPX J ucircumflex -20
KPX J udieresis -20
KPX J ugrave -20
KPX J uhungarumlaut -20
KPX J umacron -20
KPX J uogonek -20
KPX J uring -20
KPX K O -50
KPX K Oacute -50
KPX K Ocircumflex -50
KPX K Odieresis -50
KPX K Ograve -50
KPX K Ohungarumlaut -50
KPX K Omacron -50
KPX K Oslash -50
KPX K Otilde -50
KPX K e -40
KPX K eacute -40
KPX K ecaron -40
KPX K ecircumflex -40
KPX K edieresis -40
KPX K edotaccent -40
KPX K egrave -40
KPX K emacron -40
KPX K eogonek -40
KPX K o -40
KPX K oacute -40
KPX K ocircumflex -40
KPX K odieresis -40
KPX K ograve -40
KPX K ohungarumlaut -40
KPX K omacron -40
KPX K oslash -40
KPX K otilde -40
KPX K u -30
KPX K uacute -30
KPX K ucircumflex -30
KPX K udieresis -30
KPX K ugrave -30
KPX K uhungarumlaut -30
KPX K umacron -30
KPX K uogonek -30
KPX K uring -30
KPX K y -50
KPX K yacute -50
KPX K ydieresis -50
KPX Kcommaaccent O -50
KPX Kcommaaccent Oacute -50
KPX Kcommaaccent Ocircumflex -50
KPX Kcommaaccent Odieresis -50
KPX Kcommaaccent Ograve -50
KPX Kcommaaccent Ohungarumlaut -50
KPX Kcommaaccent Omacron -50
KPX Kcommaaccent Oslash -50
KPX Kcommaaccent Otilde -50
KPX Kcommaaccent e -40
KPX Kcommaaccent eacute -40
KPX Kcommaaccent ecaron -40
KPX Kcommaaccent ecircumflex -40
KPX Kcommaaccent edieresis -40
KPX Kcommaaccent edotaccent -40
KPX Kcommaaccent egrave -40
KPX Kcommaaccent emacron -40
KPX Kcommaaccent eogonek -40
KPX Kcommaaccent o -40
KPX Kcommaaccent oacute -40
KPX Kcommaaccent ocircumflex -40
KPX Kcommaaccent odieresis -40
KPX Kcommaaccent ograve -40
KPX Kcommaaccent ohungarumlaut -40
KPX Kcommaaccent omacron -40
KPX Kcommaaccent oslash -40
KPX Kcommaaccent otilde -40
KPX Kcommaaccent u -30
KPX Kcommaaccent uacute -30
KPX Kcommaaccent ucircumflex -30
KPX Kcommaaccent udieresis -30
KPX Kcommaaccent ugrave -30
KPX Kcommaaccent uhungarumlaut -30
KPX Kcommaaccent umacron -30
KPX Kcommaaccent uogonek -30
KPX Kcommaaccent uring -30
KPX Kcommaaccent y -50
KPX Kcommaaccent yacute -50
KPX Kcommaaccent ydieresis -50
KPX L T -110
KPX L Tcaron -110
KPX L Tcommaaccent -110
KPX L V -110
KPX L W -70
KPX L Y -140
KPX L Yacute -140
KPX L Ydieresis -140
KPX L quotedblright -140
KPX L quoteright -160
KPX L y -30
KPX L yacute -30
KPX L ydieresis -30
KPX Lacute T -110
KPX Lacute Tcaron -110
KPX Lacute Tcommaaccent -110
KPX Lacute V -110
KPX Lacute W -70
KPX Lacute Y -140
KPX Lacute Yacute -140
KPX Lacute Ydieresis -140
KPX Lacute quotedblright -140
KPX Lacute quoteright -160
KPX Lacute y -30
KPX Lacute yacute -30
KPX Lacute ydieresis -30
KPX Lcaron T -110
KPX Lcaron Tcaron -110
KPX Lcaron Tcommaaccent -110
KPX Lcaron V -110
KPX Lcaron W -70
KPX Lcaron Y -140
KPX Lcaron Yacute -140
KPX Lcaron Ydieresis -140
KPX Lcaron quotedblright -140
KPX Lcaron quoteright -160
KPX Lcaron y -30
KPX Lcaron yacute -30
KPX Lcaron ydieresis -30
KPX Lcommaaccent T -110
KPX Lcommaaccent Tcaron -110
KPX Lcommaaccent Tcommaaccent -110
KPX Lcommaaccent V -110
KPX Lcommaaccent W -70
KPX Lcommaaccent Y -140
KPX Lcommaaccent Yacute -140
KPX Lcommaaccent Ydieresis -140
KPX Lcommaaccent quotedblright -140
KPX Lcommaaccent quoteright -160
KPX Lcommaaccent y -30
KPX Lcommaaccent yacute -30
KPX Lcommaaccent ydieresis -30
KPX Lslash T -110
KPX Lslash Tcaron -110
KPX Lslash Tcommaaccent -110
KPX Lslash V -110
KPX Lslash W -70
KPX Lslash Y -140
KPX Lslash Yacute -140
KPX Lslash Ydieresis -140
KPX Lslash quotedblright -140
KPX Lslash quoteright -160
KPX Lslash y -30
KPX Lslash yacute -30
KPX Lslash ydieresis -30
KPX O A -20
KPX O Aacute -20
KPX O Abreve -20
KPX O Acircumflex -20
KPX O Adieresis -20
KPX O Agrave -20
KPX O Amacron -20
KPX O Aogonek -20
KPX O Aring -20
KPX O Atilde -20
KPX O T -40
KPX O Tcaron -40
KPX O Tcommaaccent -40
KPX O V -50
KPX O W -30
KPX O X -60
KPX O Y -70
KPX O Yacute -70
KPX O Ydieresis -70
KPX O comma -40
KPX O period -40
KPX Oacute A -20
KPX Oacute Aacute -20
KPX Oacute Abreve -20
KPX Oacute Acircumflex -20
KPX Oacute Adieresis -20
KPX Oacute Agrave -20
KPX Oacute Amacron -20
KPX Oacute Aogonek -20
KPX Oacute Aring -20
KPX Oacute Atilde -20
KPX Oacute T -40
KPX Oacute Tcaron -40
KPX Oacute Tcommaaccent -40
KPX Oacute V -50
KPX Oacute W -30
KPX Oacute X -60
KPX Oacute Y -70
KPX Oacute Yacute -70
KPX Oacute Ydieresis -70
KPX Oacute comma -40
KPX Oacute period -40
KPX Ocircumflex A -20
KPX Ocircumflex Aacute -20
KPX Ocircumflex Abreve -20
KPX Ocircumflex Acircumflex -20
KPX Ocircumflex Adieresis -20
KPX Ocircumflex Agrave -20
KPX Ocircumflex Amacron -20
KPX Ocircumflex Aogonek -20
KPX Ocircumflex Aring -20
KPX Ocircumflex Atilde -20
KPX Ocircumflex T -40
KPX Ocircumflex Tcaron -40
KPX Ocircumflex Tcommaaccent -40
KPX Ocircumflex V -50
KPX Ocircumflex W -30
KPX Ocircumflex X -60
KPX Ocircumflex Y -70
KPX Ocircumflex Yacute -70
KPX Ocircumflex Ydieresis -70
KPX Ocircumflex comma -40
KPX Ocircumflex period -40
KPX Odieresis A -20
KPX Odieresis Aacute -20
KPX Odieresis Abreve -20
KPX Odieresis Acircumflex -20
KPX Odieresis Adieresis -20
KPX Odieresis Agrave -20
KPX Odieresis Amacron -20
KPX Odieresis Aogonek -20
KPX Odieresis Aring -20
KPX Odieresis Atilde -20
KPX Odieresis T -40
KPX Odieresis Tcaron -40
KPX Odieresis Tcommaaccent -40
KPX Odieresis V -50
KPX Odieresis W -30
KPX Odieresis X -60
KPX Odieresis Y -70
KPX Odieresis Yacute -70
KPX Odieresis Ydieresis -70
KPX Odieresis comma -40
KPX Odieresis period -40
KPX Ograve A -20
KPX Ograve Aacute -20
KPX Ograve Abreve -20
KPX Ograve Acircumflex -20
KPX Ograve Adieresis -20
KPX Ograve Agrave -20
KPX Ograve Amacron -20
KPX Ograve Aogonek -20
KPX Ograve Aring -20
KPX Ograve Atilde -20
KPX Ograve T -40
KPX Ograve Tcaron -40
KPX Ograve Tcommaaccent -40
KPX Ograve V -50
KPX Ograve W -30
KPX Ograve X -60
KPX Ograve Y -70
KPX Ograve Yacute -70
KPX Ograve Ydieresis -70
KPX Ograve comma -40
KPX Ograve period -40
KPX Ohungarumlaut A -20
KPX Ohungarumlaut Aacute -20
KPX Ohungarumlaut Abreve -20
KPX Ohungarumlaut Acircumflex -20
KPX Ohungarumlaut Adieresis -20
KPX Ohungarumlaut Agrave -20
KPX Ohungarumlaut Amacron -20
KPX Ohungarumlaut Aogonek -20
KPX Ohungarumlaut Aring -20
KPX Ohungarumlaut Atilde -20
KPX Ohungarumlaut T -40
KPX Ohungarumlaut Tcaron -40
KPX Ohungarumlaut Tcommaaccent -40
KPX Ohungarumlaut V -50
KPX Ohungarumlaut W -30
KPX Ohungarumlaut X -60
KPX Ohungarumlaut Y -70
KPX Ohungarumlaut Yacute -70
KPX Ohungarumlaut Ydieresis -70
KPX Ohungarumlaut comma -40
KPX Ohungarumlaut period -40
KPX Omacron A -20
KPX Omacron Aacute -20
KPX Omacron Abreve -20
KPX Omacron Acircumflex -20
KPX Omacron Adieresis -20
KPX Omacron Agrave -20
KPX Omacron Amacron -20
KPX Omacron Aogonek -20
KPX Omacron Aring -20
KPX Omacron Atilde -20
KPX Omacron T -40
KPX Omacron Tcaron -40
KPX Omacron Tcommaaccent -40
KPX Omacron V -50
KPX Omacron W -30
KPX Omacron X -60
KPX Omacron Y -70
KPX Omacron Yacute -70
KPX Omacron Ydieresis -70
KPX Omacron comma -40
KPX Omacron period -40
KPX Oslash A -20
KPX Oslash Aacute -20
KPX Oslash Abreve -20
KPX Oslash Acircumflex -20
KPX Oslash Adieresis -20
KPX Oslash Agrave -20
KPX Oslash Amacron -20
KPX Oslash Aogonek -20
KPX Oslash Aring -20
KPX Oslash Atilde -20
KPX Oslash T -40
KPX Oslash Tcaron -40
KPX Oslash Tcommaaccent -40
KPX Oslash V -50
KPX Oslash W -30
KPX Oslash X -60
KPX Oslash Y -70
KPX Oslash Yacute -70
KPX Oslash Ydieresis -70
KPX Oslash comma -40
KPX Oslash period -40
KPX Otilde A -20
KPX Otilde Aacute -20
KPX Otilde Abreve -20
KPX Otilde Acircumflex -20
KPX Otilde Adieresis -20
KPX Otilde Agrave -20
KPX Otilde Amacron -20
KPX Otilde Aogonek -20
KPX Otilde Aring -20
KPX Otilde Atilde -20
KPX Otilde T -40
KPX Otilde Tcaron -40
KPX Otilde Tcommaaccent -40
KPX Otilde V -50
KPX Otilde W -30
KPX Otilde X -60
KPX Otilde Y -70
KPX Otilde Yacute -70
KPX Otilde Ydieresis -70
KPX Otilde comma -40
KPX Otilde period -40
KPX P A -120
KPX P Aacute -120
KPX P Abreve -120
KPX P Acircumflex -120
KPX P Adieresis -120
KPX P Agrave -120
KPX P Amacron -120
KPX P Aogonek -120
KPX P Aring -120
KPX P Atilde -120
KPX P a -40
KPX P aacute -40
KPX P abreve -40
KPX P acircumflex -40
KPX P adieresis -40
KPX P agrave -40
KPX P amacron -40
KPX P aogonek -40
KPX P aring -40
KPX P atilde -40
KPX P comma -180
KPX P e -50
KPX P eacute -50
KPX P ecaron -50
KPX P ecircumflex -50
KPX P edieresis -50
KPX P edotaccent -50
KPX P egrave -50
KPX P emacron -50
KPX P eogonek -50
KPX P o -50
KPX P oacute -50
KPX P ocircumflex -50
KPX P odieresis -50
KPX P ograve -50
KPX P ohungarumlaut -50
KPX P omacron -50
KPX P oslash -50
KPX P otilde -50
KPX P period -180
KPX Q U -10
KPX Q Uacute -10
KPX Q Ucircumflex -10
KPX Q Udieresis -10
KPX Q Ugrave -10
KPX Q Uhungarumlaut -10
KPX Q Umacron -10
KPX Q Uogonek -10
KPX Q Uring -10
KPX R O -20
KPX R Oacute -20
KPX R Ocircumflex -20
KPX R Odieresis -20
KPX R Ograve -20
KPX R Ohungarumlaut -20
KPX R Omacron -20
KPX R Oslash -20
KPX R Otilde -20
KPX R T -30
KPX R Tcaron -30
KPX R Tcommaaccent -30
KPX R U -40
KPX R Uacute -40
KPX R Ucircumflex -40
KPX R Udieresis -40
KPX R Ugrave -40
KPX R Uhungarumlaut -40
KPX R Umacron -40
KPX R Uogonek -40
KPX R Uring -40
KPX R V -50
KPX R W -30
KPX R Y -50
KPX R Yacute -50
KPX R Ydieresis -50
KPX Racute O -20
KPX Racute Oacute -20
KPX Racute Ocircumflex -20
KPX Racute Odieresis -20
KPX Racute Ograve -20
KPX Racute Ohungarumlaut -20
KPX Racute Omacron -20
KPX Racute Oslash -20
KPX Racute Otilde -20
KPX Racute T -30
KPX Racute Tcaron -30
KPX Racute Tcommaaccent -30
KPX Racute U -40
KPX Racute Uacute -40
KPX Racute Ucircumflex -40
KPX Racute Udieresis -40
KPX Racute Ugrave -40
KPX Racute Uhungarumlaut -40
KPX Racute Umacron -40
KPX Racute Uogonek -40
KPX Racute Uring -40
KPX Racute V -50
KPX Racute W -30
KPX Racute Y -50
KPX Racute Yacute -50
KPX Racute Ydieresis -50
KPX Rcaron O -20
KPX Rcaron Oacute -20
KPX Rcaron Ocircumflex -20
KPX Rcaron Odieresis -20
KPX Rcaron Ograve -20
KPX Rcaron Ohungarumlaut -20
KPX Rcaron Omacron -20
KPX Rcaron Oslash -20
KPX Rcaron Otilde -20
KPX Rcaron T -30
KPX Rcaron Tcaron -30
KPX Rcaron Tcommaaccent -30
KPX Rcaron U -40
KPX Rcaron Uacute -40
KPX Rcaron Ucircumflex -40
KPX Rcaron Udieresis -40
KPX Rcaron Ugrave -40
KPX Rcaron Uhungarumlaut -40
KPX Rcaron Umacron -40
KPX Rcaron Uogonek -40
KPX Rcaron Uring -40
KPX Rcaron V -50
KPX Rcaron W -30
KPX Rcaron Y -50
KPX Rcaron Yacute -50
KPX Rcaron Ydieresis -50
KPX Rcommaaccent O -20
KPX Rcommaaccent Oacute -20
KPX Rcommaaccent Ocircumflex -20
KPX Rcommaaccent Odieresis -20
KPX Rcommaaccent Ograve -20
KPX Rcommaaccent Ohungarumlaut -20
KPX Rcommaaccent Omacron -20
KPX Rcommaaccent Oslash -20
KPX Rcommaaccent Otilde -20
KPX Rcommaaccent T -30
KPX Rcommaaccent Tcaron -30
KPX Rcommaaccent Tcommaaccent -30
KPX Rcommaaccent U -40
KPX Rcommaaccent Uacute -40
KPX Rcommaaccent Ucircumflex -40
KPX Rcommaaccent Udieresis -40
KPX Rcommaaccent Ugrave -40
KPX Rcommaaccent Uhungarumlaut -40
KPX Rcommaaccent Umacron -40
KPX Rcommaaccent Uogonek -40
KPX Rcommaaccent Uring -40
KPX Rcommaaccent V -50
KPX Rcommaaccent W -30
KPX Rcommaaccent Y -50
KPX Rcommaaccent Yacute -50
KPX Rcommaaccent Ydieresis -50
KPX S comma -20
KPX S period -20
KPX Sacute comma -20
KPX Sacute period -20
KPX Scaron comma -20
KPX Scaron period -20
KPX Scedilla comma -20
KPX Scedilla period -20
KPX Scommaaccent comma -20
KPX Scommaaccent period -20
KPX T A -120
KPX T Aacute -120
KPX T Abreve -120
KPX T Acircumflex -120
KPX T Adieresis -120
KPX T Agrave -120
KPX T Amacron -120
KPX T Aogonek -120
KPX T Aring -120
KPX T Atilde -120
KPX T O -40
KPX T Oacute -40
KPX T Ocircumflex -40
KPX T Odieresis -40
KPX T Ograve -40
KPX T Ohungarumlaut -40
KPX T Omacron -40
KPX T Oslash -40
KPX T Otilde -40
KPX T a -120
KPX T aacute -120
KPX T abreve -60
KPX T acircumflex -120
KPX T adieresis -120
KPX T agrave -120
KPX T amacron -60
KPX T aogonek -120
KPX T aring -120
KPX T atilde -60
KPX T colon -20
KPX T comma -120
KPX T e -120
KPX T eacute -120
KPX T ecaron -120
KPX T ecircumflex -120
KPX T edieresis -120
KPX T edotaccent -120
KPX T egrave -60
KPX T emacron -60
KPX T eogonek -120
KPX T hyphen -140
KPX T o -120
KPX T oacute -120
KPX T ocircumflex -120
KPX T odieresis -120
KPX T ograve -120
KPX T ohungarumlaut -120
KPX T omacron -60
KPX T oslash -120
KPX T otilde -60
KPX T period -120
KPX T r -120
KPX T racute -120
KPX T rcaron -120
KPX T rcommaaccent -120
KPX T semicolon -20
KPX T u -120
KPX T uacute -120
KPX T ucircumflex -120
KPX T udieresis -120
KPX T ugrave -120
KPX T uhungarumlaut -120
KPX T umacron -60
KPX T uogonek -120
KPX T uring -120
KPX T w -120
KPX T y -120
KPX T yacute -120
KPX T ydieresis -60
KPX Tcaron A -120
KPX Tcaron Aacute -120
KPX Tcaron Abreve -120
KPX Tcaron Acircumflex -120
KPX Tcaron Adieresis -120
KPX Tcaron Agrave -120
KPX Tcaron Amacron -120
KPX Tcaron Aogonek -120
KPX Tcaron Aring -120
KPX Tcaron Atilde -120
KPX Tcaron O -40
KPX Tcaron Oacute -40
KPX Tcaron Ocircumflex -40
KPX Tcaron Odieresis -40
KPX Tcaron Ograve -40
KPX Tcaron Ohungarumlaut -40
KPX Tcaron Omacron -40
KPX Tcaron Oslash -40
KPX Tcaron Otilde -40
KPX Tcaron a -120
KPX Tcaron aacute -120
KPX Tcaron abreve -60
KPX Tcaron acircumflex -120
KPX Tcaron adieresis -120
KPX Tcaron agrave -120
KPX Tcaron amacron -60
KPX Tcaron aogonek -120
KPX Tcaron aring -120
KPX Tcaron atilde -60
KPX Tcaron colon -20
KPX Tcaron comma -120
KPX Tcaron e -120
KPX Tcaron eacute -120
KPX Tcaron ecaron -120
KPX Tcaron ecircumflex -120
KPX Tcaron edieresis -120
KPX Tcaron edotaccent -120
KPX Tcaron egrave -60
KPX Tcaron emacron -60
KPX Tcaron eogonek -120
KPX Tcaron hyphen -140
KPX Tcaron o -120
KPX Tcaron oacute -120
KPX Tcaron ocircumflex -120
KPX Tcaron odieresis -120
KPX Tcaron ograve -120
KPX Tcaron ohungarumlaut -120
KPX Tcaron omacron -60
KPX Tcaron oslash -120
KPX Tcaron otilde -60
KPX Tcaron period -120
KPX Tcaron r -120
KPX Tcaron racute -120
KPX Tcaron rcaron -120
KPX Tcaron rcommaaccent -120
KPX Tcaron semicolon -20
KPX Tcaron u -120
KPX Tcaron uacute -120
KPX Tcaron ucircumflex -120
KPX Tcaron udieresis -120
KPX Tcaron ugrave -120
KPX Tcaron uhungarumlaut -120
KPX Tcaron umacron -60
KPX Tcaron uogonek -120
KPX Tcaron uring -120
KPX Tcaron w -120
KPX Tcaron y -120
KPX Tcaron yacute -120
KPX Tcaron ydieresis -60
KPX Tcommaaccent A -120
KPX Tcommaaccent Aacute -120
KPX Tcommaaccent Abreve -120
KPX Tcommaaccent Acircumflex -120
KPX Tcommaaccent Adieresis -120
KPX Tcommaaccent Agrave -120
KPX Tcommaaccent Amacron -120
KPX Tcommaaccent Aogonek -120
KPX Tcommaaccent Aring -120
KPX Tcommaaccent Atilde -120
KPX Tcommaaccent O -40
KPX Tcommaaccent Oacute -40
KPX Tcommaaccent Ocircumflex -40
KPX Tcommaaccent Odieresis -40
KPX Tcommaaccent Ograve -40
KPX Tcommaaccent Ohungarumlaut -40
KPX Tcommaaccent Omacron -40
KPX Tcommaaccent Oslash -40
KPX Tcommaaccent Otilde -40
KPX Tcommaaccent a -120
KPX Tcommaaccent aacute -120
KPX Tcommaaccent abreve -60
KPX Tcommaaccent acircumflex -120
KPX Tcommaaccent adieresis -120
KPX Tcommaaccent agrave -120
KPX Tcommaaccent amacron -60
KPX Tcommaaccent aogonek -120
KPX Tcommaaccent aring -120
KPX Tcommaaccent atilde -60
KPX Tcommaaccent colon -20
KPX Tcommaaccent comma -120
KPX Tcommaaccent e -120
KPX Tcommaaccent eacute -120
KPX Tcommaaccent ecaron -120
KPX Tcommaaccent ecircumflex -120
KPX Tcommaaccent edieresis -120
KPX Tcommaaccent edotaccent -120
KPX Tcommaaccent egrave -60
KPX Tcommaaccent emacron -60
KPX Tcommaaccent eogonek -120
KPX Tcommaaccent hyphen -140
KPX Tcommaaccent o -120
KPX Tcommaaccent oacute -120
KPX Tcommaaccent ocircumflex -120
KPX Tcommaaccent odieresis -120
KPX Tcommaaccent ograve -120
KPX Tcommaaccent ohungarumlaut -120
KPX Tcommaaccent omacron -60
KPX Tcommaaccent oslash -120
KPX Tcommaaccent otilde -60
KPX Tcommaaccent period -120
KPX Tcommaaccent r -120
KPX Tcommaaccent racute -120
KPX Tcommaaccent rcaron -120
KPX Tcommaaccent rcommaaccent -120
KPX Tcommaaccent semicolon -20
KPX Tcommaaccent u -120
KPX Tcommaaccent uacute -120
KPX Tcommaaccent ucircumflex -120
KPX Tcommaaccent udieresis -120
KPX Tcommaaccent ugrave -120
KPX Tcommaaccent uhungarumlaut -120
KPX Tcommaaccent umacron -60
KPX Tcommaaccent uogonek -120
KPX Tcommaaccent uring -120
KPX Tcommaaccent w -120
KPX Tcommaaccent y -120
KPX Tcommaaccent yacute -120
KPX Tcommaaccent ydieresis -60
KPX U A -40
KPX U Aacute -40
KPX U Abreve -40
KPX U Acircumflex -40
KPX U Adieresis -40
KPX U Agrave -40
KPX U Amacron -40
KPX U Aogonek -40
KPX U Aring -40
KPX U Atilde -40
KPX U comma -40
KPX U period -40
KPX Uacute A -40
KPX Uacute Aacute -40
KPX Uacute Abreve -40
KPX Uacute Acircumflex -40
KPX Uacute Adieresis -40
KPX Uacute Agrave -40
KPX Uacute Amacron -40
KPX Uacute Aogonek -40
KPX Uacute Aring -40
KPX Uacute Atilde -40
KPX Uacute comma -40
KPX Uacute period -40
KPX Ucircumflex A -40
KPX Ucircumflex Aacute -40
KPX Ucircumflex Abreve -40
KPX Ucircumflex Acircumflex -40
KPX Ucircumflex Adieresis -40
KPX Ucircumflex Agrave -40
KPX Ucircumflex Amacron -40
KPX Ucircumflex Aogonek -40
KPX Ucircumflex Aring -40
KPX Ucircumflex Atilde -40
KPX Ucircumflex comma -40
KPX Ucircumflex period -40
KPX Udieresis A -40
KPX Udieresis Aacute -40
KPX Udieresis Abreve -40
KPX Udieresis Acircumflex -40
KPX Udieresis Adieresis -40
KPX Udieresis Agrave -40
KPX Udieresis Amacron -40
KPX Udieresis Aogonek -40
KPX Udieresis Aring -40
KPX Udieresis Atilde -40
KPX Udieresis comma -40
KPX Udieresis period -40
KPX Ugrave A -40
KPX Ugrave Aacute -40
KPX Ugrave Abreve -40
KPX Ugrave Acircumflex -40
KPX Ugrave Adieresis -40
KPX Ugrave Agrave -40
KPX Ugrave Amacron -40
KPX Ugrave Aogonek -40
KPX Ugrave Aring -40
KPX Ugrave Atilde -40
KPX Ugrave comma -40
KPX Ugrave period -40
KPX Uhungarumlaut A -40
KPX Uhungarumlaut Aacute -40
KPX Uhungarumlaut Abreve -40
KPX Uhungarumlaut Acircumflex -40
KPX Uhungarumlaut Adieresis -40
KPX Uhungarumlaut Agrave -40
KPX Uhungarumlaut Amacron -40
KPX Uhungarumlaut Aogonek -40
KPX Uhungarumlaut Aring -40
KPX Uhungarumlaut Atilde -40
KPX Uhungarumlaut comma -40
KPX Uhungarumlaut period -40
KPX Umacron A -40
KPX Umacron Aacute -40
KPX Umacron Abreve -40
KPX Umacron Acircumflex -40
KPX Umacron Adieresis -40
KPX Umacron Agrave -40
KPX Umacron Amacron -40
KPX Umacron Aogonek -40
KPX Umacron Aring -40
KPX Umacron Atilde -40
KPX Umacron comma -40
KPX Umacron period -40
KPX Uogonek A -40
KPX Uogonek Aacute -40
KPX Uogonek Abreve -40
KPX Uogonek Acircumflex -40
KPX Uogonek Adieresis -40
KPX Uogonek Agrave -40
KPX Uogonek Amacron -40
KPX Uogonek Aogonek -40
KPX Uogonek Aring -40
KPX Uogonek Atilde -40
KPX Uogonek comma -40
KPX Uogonek period -40
KPX Uring A -40
KPX Uring Aacute -40
KPX Uring Abreve -40
KPX Uring Acircumflex -40
KPX Uring Adieresis -40
KPX Uring Agrave -40
KPX Uring Amacron -40
KPX Uring Aogonek -40
KPX Uring Aring -40
KPX Uring Atilde -40
KPX Uring comma -40
KPX Uring period -40
KPX V A -80
KPX V Aacute -80
KPX V Abreve -80
KPX V Acircumflex -80
KPX V Adieresis -80
KPX V Agrave -80
KPX V Amacron -80
KPX V Aogonek -80
KPX V Aring -80
KPX V Atilde -80
KPX V G -40
KPX V Gbreve -40
KPX V Gcommaaccent -40
KPX V O -40
KPX V Oacute -40
KPX V Ocircumflex -40
KPX V Odieresis -40
KPX V Ograve -40
KPX V Ohungarumlaut -40
KPX V Omacron -40
KPX V Oslash -40
KPX V Otilde -40
KPX V a -70
KPX V aacute -70
KPX V abreve -70
KPX V acircumflex -70
KPX V adieresis -70
KPX V agrave -70
KPX V amacron -70
KPX V aogonek -70
KPX V aring -70
KPX V atilde -70
KPX V colon -40
KPX V comma -125
KPX V e -80
KPX V eacute -80
KPX V ecaron -80
KPX V ecircumflex -80
KPX V edieresis -80
KPX V edotaccent -80
KPX V egrave -80
KPX V emacron -80
KPX V eogonek -80
KPX V hyphen -80
KPX V o -80
KPX V oacute -80
KPX V ocircumflex -80
KPX V odieresis -80
KPX V ograve -80
KPX V ohungarumlaut -80
KPX V omacron -80
KPX V oslash -80
KPX V otilde -80
KPX V period -125
KPX V semicolon -40
KPX V u -70
KPX V uacute -70
KPX V ucircumflex -70
KPX V udieresis -70
KPX V ugrave -70
KPX V uhungarumlaut -70
KPX V umacron -70
KPX V uogonek -70
KPX V uring -70
KPX W A -50
KPX W Aacute -50
KPX W Abreve -50
KPX W Acircumflex -50
KPX W Adieresis -50
KPX W Agrave -50
KPX W Amacron -50
KPX W Aogonek -50
KPX W Aring -50
KPX W Atilde -50
KPX W O -20
KPX W Oacute -20
KPX W Ocircumflex -20
KPX W Odieresis -20
KPX W Ograve -20
KPX W Ohungarumlaut -20
KPX W Omacron -20
KPX W Oslash -20
KPX W Otilde -20
KPX W a -40
KPX W aacute -40
KPX W abreve -40
KPX W acircumflex -40
KPX W adieresis -40
KPX W agrave -40
KPX W amacron -40
KPX W aogonek -40
KPX W aring -40
KPX W atilde -40
KPX W comma -80
KPX W e -30
KPX W eacute -30
KPX W ecaron -30
KPX W ecircumflex -30
KPX W edieresis -30
KPX W edotaccent -30
KPX W egrave -30
KPX W emacron -30
KPX W eogonek -30
KPX W hyphen -40
KPX W o -30
KPX W oacute -30
KPX W ocircumflex -30
KPX W odieresis -30
KPX W ograve -30
KPX W ohungarumlaut -30
KPX W omacron -30
KPX W oslash -30
KPX W otilde -30
KPX W period -80
KPX W u -30
KPX W uacute -30
KPX W ucircumflex -30
KPX W udieresis -30
KPX W ugrave -30
KPX W uhungarumlaut -30
KPX W umacron -30
KPX W uogonek -30
KPX W uring -30
KPX W y -20
KPX W yacute -20
KPX W ydieresis -20
KPX Y A -110
KPX Y Aacute -110
KPX Y Abreve -110
KPX Y Acircumflex -110
KPX Y Adieresis -110
KPX Y Agrave -110
KPX Y Amacron -110
KPX Y Aogonek -110
KPX Y Aring -110
KPX Y Atilde -110
KPX Y O -85
KPX Y Oacute -85
KPX Y Ocircumflex -85
KPX Y Odieresis -85
KPX Y Ograve -85
KPX Y Ohungarumlaut -85
KPX Y Omacron -85
KPX Y Oslash -85
KPX Y Otilde -85
KPX Y a -140
KPX Y aacute -140
KPX Y abreve -70
KPX Y acircumflex -140
KPX Y adieresis -140
KPX Y agrave -140
KPX Y amacron -70
KPX Y aogonek -140
KPX Y aring -140
KPX Y atilde -140
KPX Y colon -60
KPX Y comma -140
KPX Y e -140
KPX Y eacute -140
KPX Y ecaron -140
KPX Y ecircumflex -140
KPX Y edieresis -140
KPX Y edotaccent -140
KPX Y egrave -140
KPX Y emacron -70
KPX Y eogonek -140
KPX Y hyphen -140
KPX Y i -20
KPX Y iacute -20
KPX Y iogonek -20
KPX Y o -140
KPX Y oacute -140
KPX Y ocircumflex -140
KPX Y odieresis -140
KPX Y ograve -140
KPX Y ohungarumlaut -140
KPX Y omacron -140
KPX Y oslash -140
KPX Y otilde -140
KPX Y period -140
KPX Y semicolon -60
KPX Y u -110
KPX Y uacute -110
KPX Y ucircumflex -110
KPX Y udieresis -110
KPX Y ugrave -110
KPX Y uhungarumlaut -110
KPX Y umacron -110
KPX Y uogonek -110
KPX Y uring -110
KPX Yacute A -110
KPX Yacute Aacute -110
KPX Yacute Abreve -110
KPX Yacute Acircumflex -110
KPX Yacute Adieresis -110
KPX Yacute Agrave -110
KPX Yacute Amacron -110
KPX Yacute Aogonek -110
KPX Yacute Aring -110
KPX Yacute Atilde -110
KPX Yacute O -85
KPX Yacute Oacute -85
KPX Yacute Ocircumflex -85
KPX Yacute Odieresis -85
KPX Yacute Ograve -85
KPX Yacute Ohungarumlaut -85
KPX Yacute Omacron -85
KPX Yacute Oslash -85
KPX Yacute Otilde -85
KPX Yacute a -140
KPX Yacute aacute -140
KPX Yacute abreve -70
KPX Yacute acircumflex -140
KPX Yacute adieresis -140
KPX Yacute agrave -140
KPX Yacute amacron -70
KPX Yacute aogonek -140
KPX Yacute aring -140
KPX Yacute atilde -70
KPX Yacute colon -60
KPX Yacute comma -140
KPX Yacute e -140
KPX Yacute eacute -140
KPX Yacute ecaron -140
KPX Yacute ecircumflex -140
KPX Yacute edieresis -140
KPX Yacute edotaccent -140
KPX Yacute egrave -140
KPX Yacute emacron -70
KPX Yacute eogonek -140
KPX Yacute hyphen -140
KPX Yacute i -20
KPX Yacute iacute -20
KPX Yacute iogonek -20
KPX Yacute o -140
KPX Yacute oacute -140
KPX Yacute ocircumflex -140
KPX Yacute odieresis -140
KPX Yacute ograve -140
KPX Yacute ohungarumlaut -140
KPX Yacute omacron -70
KPX Yacute oslash -140
KPX Yacute otilde -140
KPX Yacute period -140
KPX Yacute semicolon -60
KPX Yacute u -110
KPX Yacute uacute -110
KPX Yacute ucircumflex -110
KPX Yacute udieresis -110
KPX Yacute ugrave -110
KPX Yacute uhungarumlaut -110
KPX Yacute umacron -110
KPX Yacute uogonek -110
KPX Yacute uring -110
KPX Ydieresis A -110
KPX Ydieresis Aacute -110
KPX Ydieresis Abreve -110
KPX Ydieresis Acircumflex -110
KPX Ydieresis Adieresis -110
KPX Ydieresis Agrave -110
KPX Ydieresis Amacron -110
KPX Ydieresis Aogonek -110
KPX Ydieresis Aring -110
KPX Ydieresis Atilde -110
KPX Ydieresis O -85
KPX Ydieresis Oacute -85
KPX Ydieresis Ocircumflex -85
KPX Ydieresis Odieresis -85
KPX Ydieresis Ograve -85
KPX Ydieresis Ohungarumlaut -85
KPX Ydieresis Omacron -85
KPX Ydieresis Oslash -85
KPX Ydieresis Otilde -85
KPX Ydieresis a -140
KPX Ydieresis aacute -140
KPX Ydieresis abreve -70
KPX Ydieresis acircumflex -140
KPX Ydieresis adieresis -140
KPX Ydieresis agrave -140
KPX Ydieresis amacron -70
KPX Ydieresis aogonek -140
KPX Ydieresis aring -140
KPX Ydieresis atilde -70
KPX Ydieresis colon -60
KPX Ydieresis comma -140
KPX Ydieresis e -140
KPX Ydieresis eacute -140
KPX Ydieresis ecaron -140
KPX Ydieresis ecircumflex -140
KPX Ydieresis edieresis -140
KPX Ydieresis edotaccent -140
KPX Ydieresis egrave -140
KPX Ydieresis emacron -70
KPX Ydieresis eogonek -140
KPX Ydieresis hyphen -140
KPX Ydieresis i -20
KPX Ydieresis iacute -20
KPX Ydieresis iogonek -20
KPX Ydieresis o -140
KPX Ydieresis oacute -140
KPX Ydieresis ocircumflex -140
KPX Ydieresis odieresis -140
KPX Ydieresis ograve -140
KPX Ydieresis ohungarumlaut -140
KPX Ydieresis omacron -140
KPX Ydieresis oslash -140
KPX Ydieresis otilde -140
KPX Ydieresis period -140
KPX Ydieresis semicolon -60
KPX Ydieresis u -110
KPX Ydieresis uacute -110
KPX Ydieresis ucircumflex -110
KPX Ydieresis udieresis -110
KPX Ydieresis ugrave -110
KPX Ydieresis uhungarumlaut -110
KPX Ydieresis umacron -110
KPX Ydieresis uogonek -110
KPX Ydieresis uring -110
KPX a v -20
KPX a w -20
KPX a y -30
KPX a yacute -30
KPX a ydieresis -30
KPX aacute v -20
KPX aacute w -20
KPX aacute y -30
KPX aacute yacute -30
KPX aacute ydieresis -30
KPX abreve v -20
KPX abreve w -20
KPX abreve y -30
KPX abreve yacute -30
KPX abreve ydieresis -30
KPX acircumflex v -20
KPX acircumflex w -20
KPX acircumflex y -30
KPX acircumflex yacute -30
KPX acircumflex ydieresis -30
KPX adieresis v -20
KPX adieresis w -20
KPX adieresis y -30
KPX adieresis yacute -30
KPX adieresis ydieresis -30
KPX agrave v -20
KPX agrave w -20
KPX agrave y -30
KPX agrave yacute -30
KPX agrave ydieresis -30
KPX amacron v -20
KPX amacron w -20
KPX amacron y -30
KPX amacron yacute -30
KPX amacron ydieresis -30
KPX aogonek v -20
KPX aogonek w -20
KPX aogonek y -30
KPX aogonek yacute -30
KPX aogonek ydieresis -30
KPX aring v -20
KPX aring w -20
KPX aring y -30
KPX aring yacute -30
KPX aring ydieresis -30
KPX atilde v -20
KPX atilde w -20
KPX atilde y -30
KPX atilde yacute -30
KPX atilde ydieresis -30
KPX b b -10
KPX b comma -40
KPX b l -20
KPX b lacute -20
KPX b lcommaaccent -20
KPX b lslash -20
KPX b period -40
KPX b u -20
KPX b uacute -20
KPX b ucircumflex -20
KPX b udieresis -20
KPX b ugrave -20
KPX b uhungarumlaut -20
KPX b umacron -20
KPX b uogonek -20
KPX b uring -20
KPX b v -20
KPX b y -20
KPX b yacute -20
KPX b ydieresis -20
KPX c comma -15
KPX c k -20
KPX c kcommaaccent -20
KPX cacute comma -15
KPX cacute k -20
KPX cacute kcommaaccent -20
KPX ccaron comma -15
KPX ccaron k -20
KPX ccaron kcommaaccent -20
KPX ccedilla comma -15
KPX ccedilla k -20
KPX ccedilla kcommaaccent -20
KPX colon space -50
KPX comma quotedblright -100
KPX comma quoteright -100
KPX e comma -15
KPX e period -15
KPX e v -30
KPX e w -20
KPX e x -30
KPX e y -20
KPX e yacute -20
KPX e ydieresis -20
KPX eacute comma -15
KPX eacute period -15
KPX eacute v -30
KPX eacute w -20
KPX eacute x -30
KPX eacute y -20
KPX eacute yacute -20
KPX eacute ydieresis -20
KPX ecaron comma -15
KPX ecaron period -15
KPX ecaron v -30
KPX ecaron w -20
KPX ecaron x -30
KPX ecaron y -20
KPX ecaron yacute -20
KPX ecaron ydieresis -20
KPX ecircumflex comma -15
KPX ecircumflex period -15
KPX ecircumflex v -30
KPX ecircumflex w -20
KPX ecircumflex x -30
KPX ecircumflex y -20
KPX ecircumflex yacute -20
KPX ecircumflex ydieresis -20
KPX edieresis comma -15
KPX edieresis period -15
KPX edieresis v -30
KPX edieresis w -20
KPX edieresis x -30
KPX edieresis y -20
KPX edieresis yacute -20
KPX edieresis ydieresis -20
KPX edotaccent comma -15
KPX edotaccent period -15
KPX edotaccent v -30
KPX edotaccent w -20
KPX edotaccent x -30
KPX edotaccent y -20
KPX edotaccent yacute -20
KPX edotaccent ydieresis -20
KPX egrave comma -15
KPX egrave period -15
KPX egrave v -30
KPX egrave w -20
KPX egrave x -30
KPX egrave y -20
KPX egrave yacute -20
KPX egrave ydieresis -20
KPX emacron comma -15
KPX emacron period -15
KPX emacron v -30
KPX emacron w -20
KPX emacron x -30
KPX emacron y -20
KPX emacron yacute -20
KPX emacron ydieresis -20
KPX eogonek comma -15
KPX eogonek period -15
KPX eogonek v -30
KPX eogonek w -20
KPX eogonek x -30
KPX eogonek y -20
KPX eogonek yacute -20
KPX eogonek ydieresis -20
KPX f a -30
KPX f aacute -30
KPX f abreve -30
KPX f acircumflex -30
KPX f adieresis -30
KPX f agrave -30
KPX f amacron -30
KPX f aogonek -30
KPX f aring -30
KPX f atilde -30
KPX f comma -30
KPX f dotlessi -28
KPX f e -30
KPX f eacute -30
KPX f ecaron -30
KPX f ecircumflex -30
KPX f edieresis -30
KPX f edotaccent -30
KPX f egrave -30
KPX f emacron -30
KPX f eogonek -30
KPX f o -30
KPX f oacute -30
KPX f ocircumflex -30
KPX f odieresis -30
KPX f ograve -30
KPX f ohungarumlaut -30
KPX f omacron -30
KPX f oslash -30
KPX f otilde -30
KPX f period -30
KPX f quotedblright 60
KPX f quoteright 50
KPX g r -10
KPX g racute -10
KPX g rcaron -10
KPX g rcommaaccent -10
KPX gbreve r -10
KPX gbreve racute -10
KPX gbreve rcaron -10
KPX gbreve rcommaaccent -10
KPX gcommaaccent r -10
KPX gcommaaccent racute -10
KPX gcommaaccent rcaron -10
KPX gcommaaccent rcommaaccent -10
KPX h y -30
KPX h yacute -30
KPX h ydieresis -30
KPX k e -20
KPX k eacute -20
KPX k ecaron -20
KPX k ecircumflex -20
KPX k edieresis -20
KPX k edotaccent -20
KPX k egrave -20
KPX k emacron -20
KPX k eogonek -20
KPX k o -20
KPX k oacute -20
KPX k ocircumflex -20
KPX k odieresis -20
KPX k ograve -20
KPX k ohungarumlaut -20
KPX k omacron -20
KPX k oslash -20
KPX k otilde -20
KPX kcommaaccent e -20
KPX kcommaaccent eacute -20
KPX kcommaaccent ecaron -20
KPX kcommaaccent ecircumflex -20
KPX kcommaaccent edieresis -20
KPX kcommaaccent edotaccent -20
KPX kcommaaccent egrave -20
KPX kcommaaccent emacron -20
KPX kcommaaccent eogonek -20
KPX kcommaaccent o -20
KPX kcommaaccent oacute -20
KPX kcommaaccent ocircumflex -20
KPX kcommaaccent odieresis -20
KPX kcommaaccent ograve -20
KPX kcommaaccent ohungarumlaut -20
KPX kcommaaccent omacron -20
KPX kcommaaccent oslash -20
KPX kcommaaccent otilde -20
KPX m u -10
KPX m uacute -10
KPX m ucircumflex -10
KPX m udieresis -10
KPX m ugrave -10
KPX m uhungarumlaut -10
KPX m umacron -10
KPX m uogonek -10
KPX m uring -10
KPX m y -15
KPX m yacute -15
KPX m ydieresis -15
KPX n u -10
KPX n uacute -10
KPX n ucircumflex -10
KPX n udieresis -10
KPX n ugrave -10
KPX n uhungarumlaut -10
KPX n umacron -10
KPX n uogonek -10
KPX n uring -10
KPX n v -20
KPX n y -15
KPX n yacute -15
KPX n ydieresis -15
KPX nacute u -10
KPX nacute uacute -10
KPX nacute ucircumflex -10
KPX nacute udieresis -10
KPX nacute ugrave -10
KPX nacute uhungarumlaut -10
KPX nacute umacron -10
KPX nacute uogonek -10
KPX nacute uring -10
KPX nacute v -20
KPX nacute y -15
KPX nacute yacute -15
KPX nacute ydieresis -15
KPX ncaron u -10
KPX ncaron uacute -10
KPX ncaron ucircumflex -10
KPX ncaron udieresis -10
KPX ncaron ugrave -10
KPX ncaron uhungarumlaut -10
KPX ncaron umacron -10
KPX ncaron uogonek -10
KPX ncaron uring -10
KPX ncaron v -20
KPX ncaron y -15
KPX ncaron yacute -15
KPX ncaron ydieresis -15
KPX ncommaaccent u -10
KPX ncommaaccent uacute -10
KPX ncommaaccent ucircumflex -10
KPX ncommaaccent udieresis -10
KPX ncommaaccent ugrave -10
KPX ncommaaccent uhungarumlaut -10
KPX ncommaaccent umacron -10
KPX ncommaaccent uogonek -10
KPX ncommaaccent uring -10
KPX ncommaaccent v -20
KPX ncommaaccent y -15
KPX ncommaaccent yacute -15
KPX ncommaaccent ydieresis -15
KPX ntilde u -10
KPX ntilde uacute -10
KPX ntilde ucircumflex -10
KPX ntilde udieresis -10
KPX ntilde ugrave -10
KPX ntilde uhungarumlaut -10
KPX ntilde umacron -10
KPX ntilde uogonek -10
KPX ntilde uring -10
KPX ntilde v -20
KPX ntilde y -15
KPX ntilde yacute -15
KPX ntilde ydieresis -15
KPX o comma -40
KPX o period -40
KPX o v -15
KPX o w -15
KPX o x -30
KPX o y -30
KPX o yacute -30
KPX o ydieresis -30
KPX oacute comma -40
KPX oacute period -40
KPX oacute v -15
KPX oacute w -15
KPX oacute x -30
KPX oacute y -30
KPX oacute yacute -30
KPX oacute ydieresis -30
KPX ocircumflex comma -40
KPX ocircumflex period -40
KPX ocircumflex v -15
KPX ocircumflex w -15
KPX ocircumflex x -30
KPX ocircumflex y -30
KPX ocircumflex yacute -30
KPX ocircumflex ydieresis -30
KPX odieresis comma -40
KPX odieresis period -40
KPX odieresis v -15
KPX odieresis w -15
KPX odieresis x -30
KPX odieresis y -30
KPX odieresis yacute -30
KPX odieresis ydieresis -30
KPX ograve comma -40
KPX ograve period -40
KPX ograve v -15
KPX ograve w -15
KPX ograve x -30
KPX ograve y -30
KPX ograve yacute -30
KPX ograve ydieresis -30
KPX ohungarumlaut comma -40
KPX ohungarumlaut period -40
KPX ohungarumlaut v -15
KPX ohungarumlaut w -15
KPX ohungarumlaut x -30
KPX ohungarumlaut y -30
KPX ohungarumlaut yacute -30
KPX ohungarumlaut ydieresis -30
KPX omacron comma -40
KPX omacron period -40
KPX omacron v -15
KPX omacron w -15
KPX omacron x -30
KPX omacron y -30
KPX omacron yacute -30
KPX omacron ydieresis -30
KPX oslash a -55
KPX oslash aacute -55
KPX oslash abreve -55
KPX oslash acircumflex -55
KPX oslash adieresis -55
KPX oslash agrave -55
KPX oslash amacron -55
KPX oslash aogonek -55
KPX oslash aring -55
KPX oslash atilde -55
KPX oslash b -55
KPX oslash c -55
KPX oslash cacute -55
KPX oslash ccaron -55
KPX oslash ccedilla -55
KPX oslash comma -95
KPX oslash d -55
KPX oslash dcroat -55
KPX oslash e -55
KPX oslash eacute -55
KPX oslash ecaron -55
KPX oslash ecircumflex -55
KPX oslash edieresis -55
KPX oslash edotaccent -55
KPX oslash egrave -55
KPX oslash emacron -55
KPX oslash eogonek -55
KPX oslash f -55
KPX oslash g -55
KPX oslash gbreve -55
KPX oslash gcommaaccent -55
KPX oslash h -55
KPX oslash i -55
KPX oslash iacute -55
KPX oslash icircumflex -55
KPX oslash idieresis -55
KPX oslash igrave -55
KPX oslash imacron -55
KPX oslash iogonek -55
KPX oslash j -55
KPX oslash k -55
KPX oslash kcommaaccent -55
KPX oslash l -55
KPX oslash lacute -55
KPX oslash lcommaaccent -55
KPX oslash lslash -55
KPX oslash m -55
KPX oslash n -55
KPX oslash nacute -55
KPX oslash ncaron -55
KPX oslash ncommaaccent -55
KPX oslash ntilde -55
KPX oslash o -55
KPX oslash oacute -55
KPX oslash ocircumflex -55
KPX oslash odieresis -55
KPX oslash ograve -55
KPX oslash ohungarumlaut -55
KPX oslash omacron -55
KPX oslash oslash -55
KPX oslash otilde -55
KPX oslash p -55
KPX oslash period -95
KPX oslash q -55
KPX oslash r -55
KPX oslash racute -55
KPX oslash rcaron -55
KPX oslash rcommaaccent -55
KPX oslash s -55
KPX oslash sacute -55
KPX oslash scaron -55
KPX oslash scedilla -55
KPX oslash scommaaccent -55
KPX oslash t -55
KPX oslash tcommaaccent -55
KPX oslash u -55
KPX oslash uacute -55
KPX oslash ucircumflex -55
KPX oslash udieresis -55
KPX oslash ugrave -55
KPX oslash uhungarumlaut -55
KPX oslash umacron -55
KPX oslash uogonek -55
KPX oslash uring -55
KPX oslash v -70
KPX oslash w -70
KPX oslash x -85
KPX oslash y -70
KPX oslash yacute -70
KPX oslash ydieresis -70
KPX oslash z -55
KPX oslash zacute -55
KPX oslash zcaron -55
KPX oslash zdotaccent -55
KPX otilde comma -40
KPX otilde period -40
KPX otilde v -15
KPX otilde w -15
KPX otilde x -30
KPX otilde y -30
KPX otilde yacute -30
KPX otilde ydieresis -30
KPX p comma -35
KPX p period -35
KPX p y -30
KPX p yacute -30
KPX p ydieresis -30
KPX period quotedblright -100
KPX period quoteright -100
KPX period space -60
KPX quotedblright space -40
KPX quoteleft quoteleft -57
KPX quoteright d -50
KPX quoteright dcroat -50
KPX quoteright quoteright -57
KPX quoteright r -50
KPX quoteright racute -50
KPX quoteright rcaron -50
KPX quoteright rcommaaccent -50
KPX quoteright s -50
KPX quoteright sacute -50
KPX quoteright scaron -50
KPX quoteright scedilla -50
KPX quoteright scommaaccent -50
KPX quoteright space -70
KPX r a -10
KPX r aacute -10
KPX r abreve -10
KPX r acircumflex -10
KPX r adieresis -10
KPX r agrave -10
KPX r amacron -10
KPX r aogonek -10
KPX r aring -10
KPX r atilde -10
KPX r colon 30
KPX r comma -50
KPX r i 15
KPX r iacute 15
KPX r icircumflex 15
KPX r idieresis 15
KPX r igrave 15
KPX r imacron 15
KPX r iogonek 15
KPX r k 15
KPX r kcommaaccent 15
KPX r l 15
KPX r lacute 15
KPX r lcommaaccent 15
KPX r lslash 15
KPX r m 25
KPX r n 25
KPX r nacute 25
KPX r ncaron 25
KPX r ncommaaccent 25
KPX r ntilde 25
KPX r p 30
KPX r period -50
KPX r semicolon 30
KPX r t 40
KPX r tcommaaccent 40
KPX r u 15
KPX r uacute 15
KPX r ucircumflex 15
KPX r udieresis 15
KPX r ugrave 15
KPX r uhungarumlaut 15
KPX r umacron 15
KPX r uogonek 15
KPX r uring 15
KPX r v 30
KPX r y 30
KPX r yacute 30
KPX r ydieresis 30
KPX racute a -10
KPX racute aacute -10
KPX racute abreve -10
KPX racute acircumflex -10
KPX racute adieresis -10
KPX racute agrave -10
KPX racute amacron -10
KPX racute aogonek -10
KPX racute aring -10
KPX racute atilde -10
KPX racute colon 30
KPX racute comma -50
KPX racute i 15
KPX racute iacute 15
KPX racute icircumflex 15
KPX racute idieresis 15
KPX racute igrave 15
KPX racute imacron 15
KPX racute iogonek 15
KPX racute k 15
KPX racute kcommaaccent 15
KPX racute l 15
KPX racute lacute 15
KPX racute lcommaaccent 15
KPX racute lslash 15
KPX racute m 25
KPX racute n 25
KPX racute nacute 25
KPX racute ncaron 25
KPX racute ncommaaccent 25
KPX racute ntilde 25
KPX racute p 30
KPX racute period -50
KPX racute semicolon 30
KPX racute t 40
KPX racute tcommaaccent 40
KPX racute u 15
KPX racute uacute 15
KPX racute ucircumflex 15
KPX racute udieresis 15
KPX racute ugrave 15
KPX racute uhungarumlaut 15
KPX racute umacron 15
KPX racute uogonek 15
KPX racute uring 15
KPX racute v 30
KPX racute y 30
KPX racute yacute 30
KPX racute ydieresis 30
KPX rcaron a -10
KPX rcaron aacute -10
KPX rcaron abreve -10
KPX rcaron acircumflex -10
KPX rcaron adieresis -10
KPX rcaron agrave -10
KPX rcaron amacron -10
KPX rcaron aogonek -10
KPX rcaron aring -10
KPX rcaron atilde -10
KPX rcaron colon 30
KPX rcaron comma -50
KPX rcaron i 15
KPX rcaron iacute 15
KPX rcaron icircumflex 15
KPX rcaron idieresis 15
KPX rcaron igrave 15
KPX rcaron imacron 15
KPX rcaron iogonek 15
KPX rcaron k 15
KPX rcaron kcommaaccent 15
KPX rcaron l 15
KPX rcaron lacute 15
KPX rcaron lcommaaccent 15
KPX rcaron lslash 15
KPX rcaron m 25
KPX rcaron n 25
KPX rcaron nacute 25
KPX rcaron ncaron 25
KPX rcaron ncommaaccent 25
KPX rcaron ntilde 25
KPX rcaron p 30
KPX rcaron period -50
KPX rcaron semicolon 30
KPX rcaron t 40
KPX rcaron tcommaaccent 40
KPX rcaron u 15
KPX rcaron uacute 15
KPX rcaron ucircumflex 15
KPX rcaron udieresis 15
KPX rcaron ugrave 15
KPX rcaron uhungarumlaut 15
KPX rcaron umacron 15
KPX rcaron uogonek 15
KPX rcaron uring 15
KPX rcaron v 30
KPX rcaron y 30
KPX rcaron yacute 30
KPX rcaron ydieresis 30
KPX rcommaaccent a -10
KPX rcommaaccent aacute -10
KPX rcommaaccent abreve -10
KPX rcommaaccent acircumflex -10
KPX rcommaaccent adieresis -10
KPX rcommaaccent agrave -10
KPX rcommaaccent amacron -10
KPX rcommaaccent aogonek -10
KPX rcommaaccent aring -10
KPX rcommaaccent atilde -10
KPX rcommaaccent colon 30
KPX rcommaaccent comma -50
KPX rcommaaccent i 15
KPX rcommaaccent iacute 15
KPX rcommaaccent icircumflex 15
KPX rcommaaccent idieresis 15
KPX rcommaaccent igrave 15
KPX rcommaaccent imacron 15
KPX rcommaaccent iogonek 15
KPX rcommaaccent k 15
KPX rcommaaccent kcommaaccent 15
KPX rcommaaccent l 15
KPX rcommaaccent lacute 15
KPX rcommaaccent lcommaaccent 15
KPX rcommaaccent lslash 15
KPX rcommaaccent m 25
KPX rcommaaccent n 25
KPX rcommaaccent nacute 25
KPX rcommaaccent ncaron 25
KPX rcommaaccent ncommaaccent 25
KPX rcommaaccent ntilde 25
KPX rcommaaccent p 30
KPX rcommaaccent period -50
KPX rcommaaccent semicolon 30
KPX rcommaaccent t 40
KPX rcommaaccent tcommaaccent 40
KPX rcommaaccent u 15
KPX rcommaaccent uacute 15
KPX rcommaaccent ucircumflex 15
KPX rcommaaccent udieresis 15
KPX rcommaaccent ugrave 15
KPX rcommaaccent uhungarumlaut 15
KPX rcommaaccent umacron 15
KPX rcommaaccent uogonek 15
KPX rcommaaccent uring 15
KPX rcommaaccent v 30
KPX rcommaaccent y 30
KPX rcommaaccent yacute 30
KPX rcommaaccent ydieresis 30
KPX s comma -15
KPX s period -15
KPX s w -30
KPX sacute comma -15
KPX sacute period -15
KPX sacute w -30
KPX scaron comma -15
KPX scaron period -15
KPX scaron w -30
KPX scedilla comma -15
KPX scedilla period -15
KPX scedilla w -30
KPX scommaaccent comma -15
KPX scommaaccent period -15
KPX scommaaccent w -30
KPX semicolon space -50
KPX space T -50
KPX space Tcaron -50
KPX space Tcommaaccent -50
KPX space V -50
KPX space W -40
KPX space Y -90
KPX space Yacute -90
KPX space Ydieresis -90
KPX space quotedblleft -30
KPX space quoteleft -60
KPX v a -25
KPX v aacute -25
KPX v abreve -25
KPX v acircumflex -25
KPX v adieresis -25
KPX v agrave -25
KPX v amacron -25
KPX v aogonek -25
KPX v aring -25
KPX v atilde -25
KPX v comma -80
KPX v e -25
KPX v eacute -25
KPX v ecaron -25
KPX v ecircumflex -25
KPX v edieresis -25
KPX v edotaccent -25
KPX v egrave -25
KPX v emacron -25
KPX v eogonek -25
KPX v o -25
KPX v oacute -25
KPX v ocircumflex -25
KPX v odieresis -25
KPX v ograve -25
KPX v ohungarumlaut -25
KPX v omacron -25
KPX v oslash -25
KPX v otilde -25
KPX v period -80
KPX w a -15
KPX w aacute -15
KPX w abreve -15
KPX w acircumflex -15
KPX w adieresis -15
KPX w agrave -15
KPX w amacron -15
KPX w aogonek -15
KPX w aring -15
KPX w atilde -15
KPX w comma -60
KPX w e -10
KPX w eacute -10
KPX w ecaron -10
KPX w ecircumflex -10
KPX w edieresis -10
KPX w edotaccent -10
KPX w egrave -10
KPX w emacron -10
KPX w eogonek -10
KPX w o -10
KPX w oacute -10
KPX w ocircumflex -10
KPX w odieresis -10
KPX w ograve -10
KPX w ohungarumlaut -10
KPX w omacron -10
KPX w oslash -10
KPX w otilde -10
KPX w period -60
KPX x e -30
KPX x eacute -30
KPX x ecaron -30
KPX x ecircumflex -30
KPX x edieresis -30
KPX x edotaccent -30
KPX x egrave -30
KPX x emacron -30
KPX x eogonek -30
KPX y a -20
KPX y aacute -20
KPX y abreve -20
KPX y acircumflex -20
KPX y adieresis -20
KPX y agrave -20
KPX y amacron -20
KPX y aogonek -20
KPX y aring -20
KPX y atilde -20
KPX y comma -100
KPX y e -20
KPX y eacute -20
KPX y ecaron -20
KPX y ecircumflex -20
KPX y edieresis -20
KPX y edotaccent -20
KPX y egrave -20
KPX y emacron -20
KPX y eogonek -20
KPX y o -20
KPX y oacute -20
KPX y ocircumflex -20
KPX y odieresis -20
KPX y ograve -20
KPX y ohungarumlaut -20
KPX y omacron -20
KPX y oslash -20
KPX y otilde -20
KPX y period -100
KPX yacute a -20
KPX yacute aacute -20
KPX yacute abreve -20
KPX yacute acircumflex -20
KPX yacute adieresis -20
KPX yacute agrave -20
KPX yacute amacron -20
KPX yacute aogonek -20
KPX yacute aring -20
KPX yacute atilde -20
KPX yacute comma -100
KPX yacute e -20
KPX yacute eacute -20
KPX yacute ecaron -20
KPX yacute ecircumflex -20
KPX yacute edieresis -20
KPX yacute edotaccent -20
KPX yacute egrave -20
KPX yacute emacron -20
KPX yacute eogonek -20
KPX yacute o -20
KPX yacute oacute -20
KPX yacute ocircumflex -20
KPX yacute odieresis -20
KPX yacute ograve -20
KPX yacute ohungarumlaut -20
KPX yacute omacron -20
KPX yacute oslash -20
KPX yacute otilde -20
KPX yacute period -100
KPX ydieresis a -20
KPX ydieresis aacute -20
KPX ydieresis abreve -20
KPX ydieresis acircumflex -20
KPX ydieresis adieresis -20
KPX ydieresis agrave -20
KPX ydieresis amacron -20
KPX ydieresis aogonek -20
KPX ydieresis aring -20
KPX ydieresis atilde -20
KPX ydieresis comma -100
KPX ydieresis e -20
KPX ydieresis eacute -20
KPX ydieresis ecaron -20
KPX ydieresis ecircumflex -20
KPX ydieresis edieresis -20
KPX ydieresis edotaccent -20
KPX ydieresis egrave -20
KPX ydieresis emacron -20
KPX ydieresis eogonek -20
KPX ydieresis o -20
KPX ydieresis oacute -20
KPX ydieresis ocircumflex -20
KPX ydieresis odieresis -20
KPX ydieresis ograve -20
KPX ydieresis ohungarumlaut -20
KPX ydieresis omacron -20
KPX ydieresis oslash -20
KPX ydieresis otilde -20
KPX ydieresis period -100
KPX z e -15
KPX z eacute -15
KPX z ecaron -15
KPX z ecircumflex -15
KPX z edieresis -15
KPX z edotaccent -15
KPX z egrave -15
KPX z emacron -15
KPX z eogonek -15
KPX z o -15
KPX z oacute -15
KPX z ocircumflex -15
KPX z odieresis -15
KPX z ograve -15
KPX z ohungarumlaut -15
KPX z omacron -15
KPX z oslash -15
KPX z otilde -15
KPX zacute e -15
KPX zacute eacute -15
KPX zacute ecaron -15
KPX zacute ecircumflex -15
KPX zacute edieresis -15
KPX zacute edotaccent -15
KPX zacute egrave -15
KPX zacute emacron -15
KPX zacute eogonek -15
KPX zacute o -15
KPX zacute oacute -15
KPX zacute ocircumflex -15
KPX zacute odieresis -15
KPX zacute ograve -15
KPX zacute ohungarumlaut -15
KPX zacute omacron -15
KPX zacute oslash -15
KPX zacute otilde -15
KPX zcaron e -15
KPX zcaron eacute -15
KPX zcaron ecaron -15
KPX zcaron ecircumflex -15
KPX zcaron edieresis -15
KPX zcaron edotaccent -15
KPX zcaron egrave -15
KPX zcaron emacron -15
KPX zcaron eogonek -15
KPX zcaron o -15
KPX zcaron oacute -15
KPX zcaron ocircumflex -15
KPX zcaron odieresis -15
KPX zcaron ograve -15
KPX zcaron ohungarumlaut -15
KPX zcaron omacron -15
KPX zcaron oslash -15
KPX zcaron otilde -15
KPX zdotaccent e -15
KPX zdotaccent eacute -15
KPX zdotaccent ecaron -15
KPX zdotaccent ecircumflex -15
KPX zdotaccent edieresis -15
KPX zdotaccent edotaccent -15
KPX zdotaccent egrave -15
KPX zdotaccent emacron -15
KPX zdotaccent eogonek -15
KPX zdotaccent o -15
KPX zdotaccent oacute -15
KPX zdotaccent ocircumflex -15
KPX zdotaccent odieresis -15
KPX zdotaccent ograve -15
KPX zdotaccent ohungarumlaut -15
KPX zdotaccent omacron -15
KPX zdotaccent oslash -15
KPX zdotaccent otilde -15
EndKernPairs
EndKernData
EndFontMetrics
StartFontMetrics 4.1
Comment Copyright (c) 1985, 1987, 1989, 1990, 1997 Adobe Systems Incorporated.  All Rights Reserved.
Comment Creation Date: Thu May  1 12:38:23 1997
Comment UniqueID 43054
Comment VMusage 37069 48094
FontName Helvetica
FullName Helvetica
FamilyName Helvetica
Weight Medium
ItalicAngle 0
IsFixedPitch false
CharacterSet ExtendedRoman
FontBBox -166 -225 1000 931 
UnderlinePosition -100
UnderlineThickness 50
Version 002.000
Notice Copyright (c) 1985, 1987, 1989, 1990, 1997 Adobe Systems Incorporated.  All Rights Reserved.Helvetica is a trademark of Linotype-Hell AG and/or its subsidiaries.
EncodingScheme WinAnsiEncoding
CapHeight 718
XHeight 523
Ascender 718
Descender -207
StdHW 76
StdVW 88
StartCharMetrics 317
C 32 ; WX 278 ; N space ; B 0 0 0 0 ;
C 160 ; WX 278 ; N space ; B 0 0 0 0 ;
C 33 ; WX 278 ; N exclam ; B 90 0 187 718 ;
C 34 ; WX 355 ; N quotedbl ; B 70 463 285 718 ;
C 35 ; WX 556 ; N numbersign ; B 28 0 529 688 ;
C 36 ; WX 556 ; N dollar ; B 32 -115 520 775 ;
C 37 ; WX 889 ; N percent ; B 39 -19 850 703 ;
C 38 ; WX 667 ; N ampersand ; B 44 -15 645 718 ;
C 146 ; WX 222 ; N quoteright ; B 53 463 157 718 ;
C 40 ; WX 333 ; N parenleft ; B 68 -207 299 733 ;
C 41 ; WX 333 ; N parenright ; B 34 -207 265 733 ;
C 42 ; WX 389 ; N asterisk ; B 39 431 349 718 ;
C 43 ; WX 584 ; N plus ; B 39 0 545 505 ;
C 44 ; WX 278 ; N comma ; B 87 -147 191 106 ;
C 45 ; WX 333 ; N hyphen ; B 44 232 289 322 ;
C 173 ; WX 333 ; N hyphen ; B 44 232 289 322 ;
C 46 ; WX 278 ; N period ; B 87 0 191 106 ;
C 47 ; WX 278 ; N slash ; B -17 -19 295 737 ;
C 48 ; WX 556 ; N zero ; B 37 -19 519 703 ;
C 49 ; WX 556 ; N one ; B 101 0 359 703 ;
C 50 ; WX 556 ; N two ; B 26 0 507 703 ;
C 51 ; WX 556 ; N three ; B 34 -19 522 703 ;
C 52 ; WX 556 ; N four ; B 25 0 523 703 ;
C 53 ; WX 556 ; N five ; B 32 -19 514 688 ;
C 54 ; WX 556 ; N six ; B 38 -19 518 703 ;
C 55 ; WX 556 ; N seven ; B 37 0 523 688 ;
C 56 ; WX 556 ; N eight ; B 38 -19 517 703 ;
C 57 ; WX 556 ; N nine ; B 42 -19 514 703 ;
C 58 ; WX 278 ; N colon ; B 87 0 191 516 ;
C 59 ; WX 278 ; N semicolon ; B 87 -147 191 516 ;
C 60 ; WX 584 ; N less ; B 48 11 536 495 ;
C 61 ; WX 584 ; N equal ; B 39 115 545 390 ;
C 62 ; WX 584 ; N greater ; B 48 11 536 495 ;
C 63 ; WX 556 ; N question ; B 56 0 492 727 ;
C 64 ; WX 1015 ; N at ; B 147 -19 868 737 ;
C 65 ; WX 667 ; N A ; B 14 0 654 718 ;
C 66 ; WX 667 ; N B ; B 74 0 627 718 ;
C 67 ; WX 722 ; N C ; B 44 -19 681 737 ;
C 68 ; WX 722 ; N D ; B 81 0 674 718 ;
C 69 ; WX 667 ; N E ; B 86 0 616 718 ;
C 70 ; WX 611 ; N F ; B 86 0 583 718 ;
C 71 ; WX 778 ; N G ; B 48 -19 704 737 ;
C 72 ; WX 722 ; N H ; B 77 0 646 718 ;
C 73 ; WX 278 ; N I ; B 91 0 188 718 ;
C 74 ; WX 500 ; N J ; B 17 -19 428 718 ;
C 75 ; WX 667 ; N K ; B 76 0 663 718 ;
C 76 ; WX 556 ; N L ; B 76 0 537 718 ;
C 77 ; WX 833 ; N M ; B 73 0 761 718 ;
C 78 ; WX 722 ; N N ; B 76 0 646 718 ;
C 79 ; WX 778 ; N O ; B 39 -19 739 737 ;
C 80 ; WX 667 ; N P ; B 86 0 622 718 ;
C 81 ; WX 778 ; N Q ; B 39 -56 739 737 ;
C 82 ; WX 722 ; N R ; B 88 0 684 718 ;
C 83 ; WX 667 ; N S ; B 49 -19 620 737 ;
C 84 ; WX 611 ; N T ; B 14 0 597 718 ;
C 85 ; WX 722 ; N U ; B 79 -19 644 718 ;
C 86 ; WX 667 ; N V ; B 20 0 647 718 ;
C 87 ; WX 944 ; N W ; B 16 0 928 718 ;
C 88 ; WX 667 ; N X ; B 19 0 648 718 ;
C 89 ; WX 667 ; N Y ; B 14 0 653 718 ;
C 90 ; WX 611 ; N Z ; B 23 0 588 718 ;
C 91 ; WX 278 ; N bracketleft ; B 63 -196 250 722 ;
C 92 ; WX 278 ; N backslash ; B -17 -19 295 737 ;
C 93 ; WX 278 ; N bracketright ; B 28 -196 215 722 ;
C 94 ; WX 469 ; N asciicircum ; B -14 264 483 688 ;
C 95 ; WX 556 ; N underscore ; B 0 -125 556 -75 ;
C 145 ; WX 222 ; N quoteleft ; B 65 470 169 725 ;
C 97 ; WX 556 ; N a ; B 36 -15 530 538 ;
C 98 ; WX 556 ; N b ; B 58 -15 517 718 ;
C 99 ; WX 500 ; N c ; B 30 -15 477 538 ;
C 100 ; WX 556 ; N d ; B 35 -15 499 718 ;
C 101 ; WX 556 ; N e ; B 40 -15 516 538 ;
C 102 ; WX 278 ; N f ; B 14 0 262 728 ; L i fi ; L l fl ;
C 103 ; WX 556 ; N g ; B 40 -220 499 538 ;
C 104 ; WX 556 ; N h ; B 65 0 491 718 ;
C 105 ; WX 222 ; N i ; B 67 0 155 718 ;
C 106 ; WX 222 ; N j ; B -16 -210 155 718 ;
C 107 ; WX 500 ; N k ; B 67 0 501 718 ;
C 108 ; WX 222 ; N l ; B 67 0 155 718 ;
C 109 ; WX 833 ; N m ; B 65 0 769 538 ;
C 110 ; WX 556 ; N n ; B 65 0 491 538 ;
C 111 ; WX 556 ; N o ; B 35 -14 521 538 ;
C 112 ; WX 556 ; N p ; B 58 -207 517 538 ;
C 113 ; WX 556 ; N q ; B 35 -207 494 538 ;
C 114 ; WX 333 ; N r ; B 77 0 332 538 ;
C 115 ; WX 500 ; N s ; B 32 -15 464 538 ;
C 116 ; WX 278 ; N t ; B 14 -7 257 669 ;
C 117 ; WX 556 ; N u ; B 68 -15 489 523 ;
C 118 ; WX 500 ; N v ; B 8 0 492 523 ;
C 119 ; WX 722 ; N w ; B 14 0 709 523 ;
C 120 ; WX 500 ; N x ; B 11 0 490 523 ;
C 121 ; WX 500 ; N y ; B 11 -214 489 523 ;
C 122 ; WX 500 ; N z ; B 31 0 469 523 ;
C 123 ; WX 334 ; N braceleft ; B 42 -196 292 722 ;
C 124 ; WX 260 ; N bar ; B 94 -225 167 775 ;
C 125 ; WX 334 ; N braceright ; B 42 -196 292 722 ;
C 126 ; WX 584 ; N asciitilde ; B 61 180 523 326 ;
C 161 ; WX 333 ; N exclamdown ; B 118 -195 215 523 ;
C 162 ; WX 556 ; N cent ; B 51 -115 513 623 ;
C 163 ; WX 556 ; N sterling ; B 33 -16 539 718 ;
C -1 ; WX 167 ; N fraction ; B -166 -19 333 703 ;
C 165 ; WX 556 ; N yen ; B 3 0 553 688 ;
C 131 ; WX 556 ; N florin ; B -11 -207 501 737 ;
C 167 ; WX 556 ; N section ; B 43 -191 512 737 ;
C 164 ; WX 556 ; N currency ; B 28 99 528 603 ;
C 39 ; WX 191 ; N quotesingle ; B 59 463 132 718 ;
C 147 ; WX 333 ; N quotedblleft ; B 38 470 307 725 ;
C 171 ; WX 556 ; N guillemotleft ; B 97 108 459 446 ;
C 139 ; WX 333 ; N guilsinglleft ; B 88 108 245 446 ;
C 155 ; WX 333 ; N guilsinglright ; B 88 108 245 446 ;
C -1 ; WX 500 ; N fi ; B 14 0 434 728 ;
C -1 ; WX 500 ; N fl ; B 14 0 432 728 ;
C 150 ; WX 556 ; N endash ; B 0 240 556 313 ;
C 134 ; WX 556 ; N dagger ; B 43 -159 514 718 ;
C 135 ; WX 556 ; N daggerdbl ; B 43 -159 514 718 ;
C 183 ; WX 278 ; N periodcentered ; B 77 190 202 315 ;
C 182 ; WX 537 ; N paragraph ; B 18 -173 497 718 ;
C 149 ; WX 350 ; N bullet ; B 18 202 333 517 ;
C 130 ; WX 222 ; N quotesinglbase ; B 53 -149 157 106 ;
C 132 ; WX 333 ; N quotedblbase ; B 26 -149 295 106 ;
C 148 ; WX 333 ; N quotedblright ; B 26 463 295 718 ;
C 187 ; WX 556 ; N guillemotright ; B 97 108 459 446 ;
C 133 ; WX 1000 ; N ellipsis ; B 115 0 885 106 ;
C 137 ; WX 1000 ; N perthousand ; B 7 -19 994 703 ;
C 191 ; WX 611 ; N questiondown ; B 91 -201 527 525 ;
C 96 ; WX 333 ; N grave ; B 14 593 211 734 ;
C 180 ; WX 333 ; N acute ; B 122 593 319 734 ;
C 136 ; WX 333 ; N circumflex ; B 21 593 312 734 ;
C 152 ; WX 333 ; N tilde ; B -4 606 337 722 ;
C 175 ; WX 333 ; N macron ; B 10 627 323 684 ;
C -1 ; WX 333 ; N breve ; B 13 595 321 731 ;
C -1 ; WX 333 ; N dotaccent ; B 121 604 212 706 ;
C 168 ; WX 333 ; N dieresis ; B 40 604 293 706 ;
C -1 ; WX 333 ; N ring ; B 75 572 259 756 ;
C 184 ; WX 333 ; N cedilla ; B 45 -225 259 0 ;
C -1 ; WX 333 ; N hungarumlaut ; B 31 593 409 734 ;
C -1 ; WX 333 ; N ogonek ; B 73 -225 287 0 ;
C -1 ; WX 333 ; N caron ; B 21 593 312 734 ;
C 151 ; WX 1000 ; N emdash ; B 0 240 1000 313 ;
C 198 ; WX 1000 ; N AE ; B 8 0 951 718 ;
C 170 ; WX 370 ; N ordfeminine ; B 24 405 346 737 ;
C -1 ; WX 556 ; N Lslash ; B -20 0 537 718 ;
C 216 ; WX 778 ; N Oslash ; B 39 -19 740 737 ;
C 140 ; WX 1000 ; N OE ; B 36 -19 965 737 ;
C 186 ; WX 365 ; N ordmasculine ; B 25 405 341 737 ;
C 230 ; WX 889 ; N ae ; B 36 -15 847 538 ;
C -1 ; WX 278 ; N dotlessi ; B 95 0 183 523 ;
C -1 ; WX 222 ; N lslash ; B -20 0 242 718 ;
C 248 ; WX 611 ; N oslash ; B 28 -22 537 545 ;
C 156 ; WX 944 ; N oe ; B 35 -15 902 538 ;
C 223 ; WX 611 ; N germandbls ; B 67 -15 571 728 ;
C 207 ; WX 278 ; N Idieresis ; B 13 0 266 901 ;
C 233 ; WX 556 ; N eacute ; B 40 -15 516 734 ;
C -1 ; WX 556 ; N abreve ; B 36 -15 530 731 ;
C -1 ; WX 556 ; N uhungarumlaut ; B 68 -15 521 734 ;
C -1 ; WX 556 ; N ecaron ; B 40 -15 516 734 ;
C 159 ; WX 667 ; N Ydieresis ; B 14 0 653 901 ;
C 247 ; WX 584 ; N divide ; B 39 -19 545 524 ;
C 221 ; WX 667 ; N Yacute ; B 14 0 653 929 ;
C 194 ; WX 667 ; N Acircumflex ; B 14 0 654 929 ;
C 225 ; WX 556 ; N aacute ; B 36 -15 530 734 ;
C 219 ; WX 722 ; N Ucircumflex ; B 79 -19 644 929 ;
C 253 ; WX 500 ; N yacute ; B 11 -214 489 734 ;
C -1 ; WX 500 ; N scommaaccent ; B 32 -225 464 538 ;
C 234 ; WX 556 ; N ecircumflex ; B 40 -15 516 734 ;
C -1 ; WX 722 ; N Uring ; B 79 -19 644 931 ;
C 220 ; WX 722 ; N Udieresis ; B 79 -19 644 901 ;
C -1 ; WX 556 ; N aogonek ; B 36 -220 547 538 ;
C 218 ; WX 722 ; N Uacute ; B 79 -19 644 929 ;
C -1 ; WX 556 ; N uogonek ; B 68 -225 519 523 ;
C 203 ; WX 667 ; N Edieresis ; B 86 0 616 901 ;
C -1 ; WX 722 ; N Dcroat ; B 0 0 674 718 ;
C -1 ; WX 250 ; N commaaccent ; B 87 -225 181 -40 ;
C 169 ; WX 737 ; N copyright ; B -14 -19 752 737 ;
C -1 ; WX 667 ; N Emacron ; B 86 0 616 879 ;
C -1 ; WX 500 ; N ccaron ; B 30 -15 477 734 ;
C 229 ; WX 556 ; N aring ; B 36 -15 530 756 ;
C -1 ; WX 722 ; N Ncommaaccent ; B 76 -225 646 718 ;
C -1 ; WX 222 ; N lacute ; B 67 0 264 929 ;
C 224 ; WX 556 ; N agrave ; B 36 -15 530 734 ;
C -1 ; WX 611 ; N Tcommaaccent ; B 14 -225 597 718 ;
C -1 ; WX 722 ; N Cacute ; B 44 -19 681 929 ;
C 227 ; WX 556 ; N atilde ; B 36 -15 530 722 ;
C -1 ; WX 667 ; N Edotaccent ; B 86 0 616 901 ;
C 154 ; WX 500 ; N scaron ; B 32 -15 464 734 ;
C -1 ; WX 500 ; N scedilla ; B 32 -225 464 538 ;
C 237 ; WX 278 ; N iacute ; B 95 0 292 734 ;
C -1 ; WX 471 ; N lozenge ; B 10 0 462 728 ;
C -1 ; WX 722 ; N Rcaron ; B 88 0 684 929 ;
C -1 ; WX 778 ; N Gcommaaccent ; B 48 -225 704 737 ;
C 251 ; WX 556 ; N ucircumflex ; B 68 -15 489 734 ;
C 226 ; WX 556 ; N acircumflex ; B 36 -15 530 734 ;
C -1 ; WX 667 ; N Amacron ; B 14 0 654 879 ;
C -1 ; WX 333 ; N rcaron ; B 61 0 352 734 ;
C 231 ; WX 500 ; N ccedilla ; B 30 -225 477 538 ;
C -1 ; WX 611 ; N Zdotaccent ; B 23 0 588 901 ;
C 222 ; WX 667 ; N Thorn ; B 86 0 622 718 ;
C -1 ; WX 778 ; N Omacron ; B 39 -19 739 879 ;
C -1 ; WX 722 ; N Racute ; B 88 0 684 929 ;
C -1 ; WX 667 ; N Sacute ; B 49 -19 620 929 ;
C -1 ; WX 643 ; N dcaron ; B 35 -15 655 718 ;
C -1 ; WX 722 ; N Umacron ; B 79 -19 644 879 ;
C -1 ; WX 556 ; N uring ; B 68 -15 489 756 ;
C 179 ; WX 333 ; N threesuperior ; B 5 270 325 703 ;
C 210 ; WX 778 ; N Ograve ; B 39 -19 739 929 ;
C 192 ; WX 667 ; N Agrave ; B 14 0 654 929 ;
C -1 ; WX 667 ; N Abreve ; B 14 0 654 926 ;
C 215 ; WX 584 ; N multiply ; B 39 0 545 506 ;
C 250 ; WX 556 ; N uacute ; B 68 -15 489 734 ;
C -1 ; WX 611 ; N Tcaron ; B 14 0 597 929 ;
C -1 ; WX 476 ; N partialdiff ; B 13 -38 463 714 ;
C 255 ; WX 500 ; N ydieresis ; B 11 -214 489 706 ;
C -1 ; WX 722 ; N Nacute ; B 76 0 646 929 ;
C 238 ; WX 278 ; N icircumflex ; B -6 0 285 734 ;
C 202 ; WX 667 ; N Ecircumflex ; B 86 0 616 929 ;
C 228 ; WX 556 ; N adieresis ; B 36 -15 530 706 ;
C 235 ; WX 556 ; N edieresis ; B 40 -15 516 706 ;
C -1 ; WX 500 ; N cacute ; B 30 -15 477 734 ;
C -1 ; WX 556 ; N nacute ; B 65 0 491 734 ;
C -1 ; WX 556 ; N umacron ; B 68 -15 489 684 ;
C -1 ; WX 722 ; N Ncaron ; B 76 0 646 929 ;
C 205 ; WX 278 ; N Iacute ; B 91 0 292 929 ;
C 177 ; WX 584 ; N plusminus ; B 39 0 545 506 ;
C 166 ; WX 260 ; N brokenbar ; B 94 -150 167 700 ;
C 174 ; WX 737 ; N registered ; B -14 -19 752 737 ;
C -1 ; WX 778 ; N Gbreve ; B 48 -19 704 926 ;
C -1 ; WX 278 ; N Idotaccent ; B 91 0 188 901 ;
C -1 ; WX 600 ; N summation ; B 15 -10 586 706 ;
C 200 ; WX 667 ; N Egrave ; B 86 0 616 929 ;
C -1 ; WX 333 ; N racute ; B 77 0 332 734 ;
C -1 ; WX 556 ; N omacron ; B 35 -14 521 684 ;
C -1 ; WX 611 ; N Zacute ; B 23 0 588 929 ;
C 142 ; WX 611 ; N Zcaron ; B 23 0 588 929 ;
C -1 ; WX 549 ; N greaterequal ; B 26 0 523 674 ;
C 208 ; WX 722 ; N Eth ; B 0 0 674 718 ;
C 199 ; WX 722 ; N Ccedilla ; B 44 -225 681 737 ;
C -1 ; WX 222 ; N lcommaaccent ; B 67 -225 167 718 ;
C -1 ; WX 317 ; N tcaron ; B 14 -7 329 808 ;
C -1 ; WX 556 ; N eogonek ; B 40 -225 516 538 ;
C -1 ; WX 722 ; N Uogonek ; B 79 -225 644 718 ;
C 193 ; WX 667 ; N Aacute ; B 14 0 654 929 ;
C 196 ; WX 667 ; N Adieresis ; B 14 0 654 901 ;
C 232 ; WX 556 ; N egrave ; B 40 -15 516 734 ;
C -1 ; WX 500 ; N zacute ; B 31 0 469 734 ;
C -1 ; WX 222 ; N iogonek ; B -31 -225 183 718 ;
C 211 ; WX 778 ; N Oacute ; B 39 -19 739 929 ;
C 243 ; WX 556 ; N oacute ; B 35 -14 521 734 ;
C -1 ; WX 556 ; N amacron ; B 36 -15 530 684 ;
C -1 ; WX 500 ; N sacute ; B 32 -15 464 734 ;
C 239 ; WX 278 ; N idieresis ; B 13 0 266 706 ;
C 212 ; WX 778 ; N Ocircumflex ; B 39 -19 739 929 ;
C 217 ; WX 722 ; N Ugrave ; B 79 -19 644 929 ;
C -1 ; WX 612 ; N Delta ; B 6 0 608 688 ;
C 254 ; WX 556 ; N thorn ; B 58 -207 517 718 ;
C 178 ; WX 333 ; N twosuperior ; B 4 281 323 703 ;
C 214 ; WX 778 ; N Odieresis ; B 39 -19 739 901 ;
C 181 ; WX 556 ; N mu ; B 68 -207 489 523 ;
C 236 ; WX 278 ; N igrave ; B -13 0 184 734 ;
C -1 ; WX 556 ; N ohungarumlaut ; B 35 -14 521 734 ;
C -1 ; WX 667 ; N Eogonek ; B 86 -220 633 718 ;
C -1 ; WX 556 ; N dcroat ; B 35 -15 550 718 ;
C 190 ; WX 834 ; N threequarters ; B 45 -19 810 703 ;
C -1 ; WX 667 ; N Scedilla ; B 49 -225 620 737 ;
C -1 ; WX 299 ; N lcaron ; B 67 0 311 718 ;
C -1 ; WX 667 ; N Kcommaaccent ; B 76 -225 663 718 ;
C -1 ; WX 556 ; N Lacute ; B 76 0 537 929 ;
C 153 ; WX 1000 ; N trademark ; B 46 306 903 718 ;
C -1 ; WX 556 ; N edotaccent ; B 40 -15 516 706 ;
C 204 ; WX 278 ; N Igrave ; B -13 0 188 929 ;
C -1 ; WX 278 ; N Imacron ; B -17 0 296 879 ;
C -1 ; WX 556 ; N Lcaron ; B 76 0 537 718 ;
C 189 ; WX 834 ; N onehalf ; B 43 -19 773 703 ;
C -1 ; WX 549 ; N lessequal ; B 26 0 523 674 ;
C 244 ; WX 556 ; N ocircumflex ; B 35 -14 521 734 ;
C 241 ; WX 556 ; N ntilde ; B 65 0 491 722 ;
C -1 ; WX 722 ; N Uhungarumlaut ; B 79 -19 644 929 ;
C 201 ; WX 667 ; N Eacute ; B 86 0 616 929 ;
C -1 ; WX 556 ; N emacron ; B 40 -15 516 684 ;
C -1 ; WX 556 ; N gbreve ; B 40 -220 499 731 ;
C 188 ; WX 834 ; N onequarter ; B 73 -19 756 703 ;
C 138 ; WX 667 ; N Scaron ; B 49 -19 620 929 ;
C -1 ; WX 667 ; N Scommaaccent ; B 49 -225 620 737 ;
C -1 ; WX 778 ; N Ohungarumlaut ; B 39 -19 739 929 ;
C 176 ; WX 400 ; N degree ; B 54 411 346 703 ;
C 242 ; WX 556 ; N ograve ; B 35 -14 521 734 ;
C -1 ; WX 722 ; N Ccaron ; B 44 -19 681 929 ;
C 249 ; WX 556 ; N ugrave ; B 68 -15 489 734 ;
C -1 ; WX 453 ; N radical ; B -4 -80 458 762 ;
C -1 ; WX 722 ; N Dcaron ; B 81 0 674 929 ;
C -1 ; WX 333 ; N rcommaaccent ; B 77 -225 332 538 ;
C 209 ; WX 722 ; N Ntilde ; B 76 0 646 917 ;
C 245 ; WX 556 ; N otilde ; B 35 -14 521 722 ;
C -1 ; WX 722 ; N Rcommaaccent ; B 88 -225 684 718 ;
C -1 ; WX 556 ; N Lcommaaccent ; B 76 -225 537 718 ;
C 195 ; WX 667 ; N Atilde ; B 14 0 654 917 ;
C -1 ; WX 667 ; N Aogonek ; B 14 -225 654 718 ;
C 197 ; WX 667 ; N Aring ; B 14 0 654 931 ;
C 213 ; WX 778 ; N Otilde ; B 39 -19 739 917 ;
C -1 ; WX 500 ; N zdotaccent ; B 31 0 469 706 ;
C -1 ; WX 667 ; N Ecaron ; B 86 0 616 929 ;
C -1 ; WX 278 ; N Iogonek ; B -3 -225 211 718 ;
C -1 ; WX 500 ; N kcommaaccent ; B 67 -225 501 718 ;
C -1 ; WX 584 ; N minus ; B 39 216 545 289 ;
C 206 ; WX 278 ; N Icircumflex ; B -6 0 285 929 ;
C -1 ; WX 556 ; N ncaron ; B 65 0 491 734 ;
C -1 ; WX 278 ; N tcommaaccent ; B 14 -225 257 669 ;
C 172 ; WX 584 ; N logicalnot ; B 39 108 545 390 ;
C 246 ; WX 556 ; N odieresis ; B 35 -14 521 706 ;
C 252 ; WX 556 ; N udieresis ; B 68 -15 489 706 ;
C -1 ; WX 549 ; N notequal ; B 12 -35 537 551 ;
C -1 ; WX 556 ; N gcommaaccent ; B 40 -220 499 822 ;
C 240 ; WX 556 ; N eth ; B 35 -15 522 737 ;
C 158 ; WX 500 ; N zcaron ; B 31 0 469 734 ;
C -1 ; WX 556 ; N ncommaaccent ; B 65 -225 491 538 ;
C 185 ; WX 333 ; N onesuperior ; B 43 281 222 703 ;
C -1 ; WX 278 ; N imacron ; B 5 0 272 684 ;
C 128 ; WX 556 ; N Euro ; B 0 0 0 0 ;
EndCharMetrics
StartKernData
StartKernPairs 2705
KPX A C -30
KPX A Cacute -30
KPX A Ccaron -30
KPX A Ccedilla -30
KPX A G -30
KPX A Gbreve -30
KPX A Gcommaaccent -30
KPX A O -30
KPX A Oacute -30
KPX A Ocircumflex -30
KPX A Odieresis -30
KPX A Ograve -30
KPX A Ohungarumlaut -30
KPX A Omacron -30
KPX A Oslash -30
KPX A Otilde -30
KPX A Q -30
KPX A T -120
KPX A Tcaron -120
KPX A Tcommaaccent -120
KPX A U -50
KPX A Uacute -50
KPX A Ucircumflex -50
KPX A Udieresis -50
KPX A Ugrave -50
KPX A Uhungarumlaut -50
KPX A Umacron -50
KPX A Uogonek -50
KPX A Uring -50
KPX A V -70
KPX A W -50
KPX A Y -100
KPX A Yacute -100
KPX A Ydieresis -100
KPX A u -30
KPX A uacute -30
KPX A ucircumflex -30
KPX A udieresis -30
KPX A ugrave -30
KPX A uhungarumlaut -30
KPX A umacron -30
KPX A uogonek -30
KPX A uring -30
KPX A v -40
KPX A w -40
KPX A y -40
KPX A yacute -40
KPX A ydieresis -40
KPX Aacute C -30
KPX Aacute Cacute -30
KPX Aacute Ccaron -30
KPX Aacute Ccedilla -30
KPX Aacute G -30
KPX Aacute Gbreve -30
KPX Aacute Gcommaaccent -30
KPX Aacute O -30
KPX Aacute Oacute -30
KPX Aacute Ocircumflex -30
KPX Aacute Odieresis -30
KPX Aacute Ograve -30
KPX Aacute Ohungarumlaut -30
KPX Aacute Omacron -30
KPX Aacute Oslash -30
KPX Aacute Otilde -30
KPX Aacute Q -30
KPX Aacute T -120
KPX Aacute Tcaron -120
KPX Aacute Tcommaaccent -120
KPX Aacute U -50
KPX Aacute Uacute -50
KPX Aacute Ucircumflex -50
KPX Aacute Udieresis -50
KPX Aacute Ugrave -50
KPX Aacute Uhungarumlaut -50
KPX Aacute Umacron -50
KPX Aacute Uogonek -50
KPX Aacute Uring -50
KPX Aacute V -70
KPX Aacute W -50
KPX Aacute Y -100
KPX Aacute Yacute -100
KPX Aacute Ydieresis -100
KPX Aacute u -30
KPX Aacute uacute -30
KPX Aacute ucircumflex -30
KPX Aacute udieresis -30
KPX Aacute ugrave -30
KPX Aacute uhungarumlaut -30
KPX Aacute umacron -30
KPX Aacute uogonek -30
KPX Aacute uring -30
KPX Aacute v -40
KPX Aacute w -40
KPX Aacute y -40
KPX Aacute yacute -40
KPX Aacute ydieresis -40
KPX Abreve C -30
KPX Abreve Cacute -30
KPX Abreve Ccaron -30
KPX Abreve Ccedilla -30
KPX Abreve G -30
KPX Abreve Gbreve -30
KPX Abreve Gcommaaccent -30
KPX Abreve O -30
KPX Abreve Oacute -30
KPX Abreve Ocircumflex -30
KPX Abreve Odieresis -30
KPX Abreve Ograve -30
KPX Abreve Ohungarumlaut -30
KPX Abreve Omacron -30
KPX Abreve Oslash -30
KPX Abreve Otilde -30
KPX Abreve Q -30
KPX Abreve T -120
KPX Abreve Tcaron -120
KPX Abreve Tcommaaccent -120
KPX Abreve U -50
KPX Abreve Uacute -50
KPX Abreve Ucircumflex -50
KPX Abreve Udieresis -50
KPX Abreve Ugrave -50
KPX Abreve Uhungarumlaut -50
KPX Abreve Umacron -50
KPX Abreve Uogonek -50
KPX Abreve Uring -50
KPX Abreve V -70
KPX Abreve W -50
KPX Abreve Y -100
KPX Abreve Yacute -100
KPX Abreve Ydieresis -100
KPX Abreve u -30
KPX Abreve uacute -30
KPX Abreve ucircumflex -30
KPX Abreve udieresis -30
KPX Abreve ugrave -30
KPX Abreve uhungarumlaut -30
KPX Abreve umacron -30
KPX Abreve uogonek -30
KPX Abreve uring -30
KPX Abreve v -40
KPX Abreve w -40
KPX Abreve y -40
KPX Abreve yacute -40
KPX Abreve ydieresis -40
KPX Acircumflex C -30
KPX Acircumflex Cacute -30
KPX Acircumflex Ccaron -30
KPX Acircumflex Ccedilla -30
KPX Acircumflex G -30
KPX Acircumflex Gbreve -30
KPX Acircumflex Gcommaaccent -30
KPX Acircumflex O -30
KPX Acircumflex Oacute -30
KPX Acircumflex Ocircumflex -30
KPX Acircumflex Odieresis -30
KPX Acircumflex Ograve -30
KPX Acircumflex Ohungarumlaut -30
KPX Acircumflex Omacron -30
KPX Acircumflex Oslash -30
KPX Acircumflex Otilde -30
KPX Acircumflex Q -30
KPX Acircumflex T -120
KPX Acircumflex Tcaron -120
KPX Acircumflex Tcommaaccent -120
KPX Acircumflex U -50
KPX Acircumflex Uacute -50
KPX Acircumflex Ucircumflex -50
KPX Acircumflex Udieresis -50
KPX Acircumflex Ugrave -50
KPX Acircumflex Uhungarumlaut -50
KPX Acircumflex Umacron -50
KPX Acircumflex Uogonek -50
KPX Acircumflex Uring -50
KPX Acircumflex V -70
KPX Acircumflex W -50
KPX Acircumflex Y -100
KPX Acircumflex Yacute -100
KPX Acircumflex Ydieresis -100
KPX Acircumflex u -30
KPX Acircumflex uacute -30
KPX Acircumflex ucircumflex -30
KPX Acircumflex udieresis -30
KPX Acircumflex ugrave -30
KPX Acircumflex uhungarumlaut -30
KPX Acircumflex umacron -30
KPX Acircumflex uogonek -30
KPX Acircumflex uring -30
KPX Acircumflex v -40
KPX Acircumflex w -40
KPX Acircumflex y -40
KPX Acircumflex yacute -40
KPX Acircumflex ydieresis -40
KPX Adieresis C -30
KPX Adieresis Cacute -30
KPX Adieresis Ccaron -30
KPX Adieresis Ccedilla -30
KPX Adieresis G -30
KPX Adieresis Gbreve -30
KPX Adieresis Gcommaaccent -30
KPX Adieresis O -30
KPX Adieresis Oacute -30
KPX Adieresis Ocircumflex -30
KPX Adieresis Odieresis -30
KPX Adieresis Ograve -30
KPX Adieresis Ohungarumlaut -30
KPX Adieresis Omacron -30
KPX Adieresis Oslash -30
KPX Adieresis Otilde -30
KPX Adieresis Q -30
KPX Adieresis T -120
KPX Adieresis Tcaron -120
KPX Adieresis Tcommaaccent -120
KPX Adieresis U -50
KPX Adieresis Uacute -50
KPX Adieresis Ucircumflex -50
KPX Adieresis Udieresis -50
KPX Adieresis Ugrave -50
KPX Adieresis Uhungarumlaut -50
KPX Adieresis Umacron -50
KPX Adieresis Uogonek -50
KPX Adieresis Uring -50
KPX Adieresis V -70
KPX Adieresis W -50
KPX Adieresis Y -100
KPX Adieresis Yacute -100
KPX Adieresis Ydieresis -100
KPX Adieresis u -30
KPX Adieresis uacute -30
KPX Adieresis ucircumflex -30
KPX Adieresis udieresis -30
KPX Adieresis ugrave -30
KPX Adieresis uhungarumlaut -30
KPX Adieresis umacron -30
KPX Adieresis uogonek -30
KPX Adieresis uring -30
KPX Adieresis v -40
KPX Adieresis w -40
KPX Adieresis y -40
KPX Adieresis yacute -40
KPX Adieresis ydieresis -40
KPX Agrave C -30
KPX Agrave Cacute -30
KPX Agrave Ccaron -30
KPX Agrave Ccedilla -30
KPX Agrave G -30
KPX Agrave Gbreve -30
KPX Agrave Gcommaaccent -30
KPX Agrave O -30
KPX Agrave Oacute -30
KPX Agrave Ocircumflex -30
KPX Agrave Odieresis -30
KPX Agrave Ograve -30
KPX Agrave Ohungarumlaut -30
KPX Agrave Omacron -30
KPX Agrave Oslash -30
KPX Agrave Otilde -30
KPX Agrave Q -30
KPX Agrave T -120
KPX Agrave Tcaron -120
KPX Agrave Tcommaaccent -120
KPX Agrave U -50
KPX Agrave Uacute -50
KPX Agrave Ucircumflex -50
KPX Agrave Udieresis -50
KPX Agrave Ugrave -50
KPX Agrave Uhungarumlaut -50
KPX Agrave Umacron -50
KPX Agrave Uogonek -50
KPX Agrave Uring -50
KPX Agrave V -70
KPX Agrave W -50
KPX Agrave Y -100
KPX Agrave Yacute -100
KPX Agrave Ydieresis -100
KPX Agrave u -30
KPX Agrave uacute -30
KPX Agrave ucircumflex -30
KPX Agrave udieresis -30
KPX Agrave ugrave -30
KPX Agrave uhungarumlaut -30
KPX Agrave umacron -30
KPX Agrave uogonek -30
KPX Agrave uring -30
KPX Agrave v -40
KPX Agrave w -40
KPX Agrave y -40
KPX Agrave yacute -40
KPX Agrave ydieresis -40
KPX Amacron C -30
KPX Amacron Cacute -30
KPX Amacron Ccaron -30
KPX Amacron Ccedilla -30
KPX Amacron G -30
KPX Amacron Gbreve -30
KPX Amacron Gcommaaccent -30
KPX Amacron O -30
KPX Amacron Oacute -30
KPX Amacron Ocircumflex -30
KPX Amacron Odieresis -30
KPX Amacron Ograve -30
KPX Amacron Ohungarumlaut -30
KPX Amacron Omacron -30
KPX Amacron Oslash -30
KPX Amacron Otilde -30
KPX Amacron Q -30
KPX Amacron T -120
KPX Amacron Tcaron -120
KPX Amacron Tcommaaccent -120
KPX Amacron U -50
KPX Amacron Uacute -50
KPX Amacron Ucircumflex -50
KPX Amacron Udieresis -50
KPX Amacron Ugrave -50
KPX Amacron Uhungarumlaut -50
KPX Amacron Umacron -50
KPX Amacron Uogonek -50
KPX Amacron Uring -50
KPX Amacron V -70
KPX Amacron W -50
KPX Amacron Y -100
KPX Amacron Yacute -100
KPX Amacron Ydieresis -100
KPX Amacron u -30
KPX Amacron uacute -30
KPX Amacron ucircumflex -30
KPX Amacron udieresis -30
KPX Amacron ugrave -30
KPX Amacron uhungarumlaut -30
KPX Amacron umacron -30
KPX Amacron uogonek -30
KPX Amacron uring -30
KPX Amacron v -40
KPX Amacron w -40
KPX Amacron y -40
KPX Amacron yacute -40
KPX Amacron ydieresis -40
KPX Aogonek C -30
KPX Aogonek Cacute -30
KPX Aogonek Ccaron -30
KPX Aogonek Ccedilla -30
KPX Aogonek G -30
KPX Aogonek Gbreve -30
KPX Aogonek Gcommaaccent -30
KPX Aogonek O -30
KPX Aogonek Oacute -30
KPX Aogonek Ocircumflex -30
KPX Aogonek Odieresis -30
KPX Aogonek Ograve -30
KPX Aogonek Ohungarumlaut -30
KPX Aogonek Omacron -30
KPX Aogonek Oslash -30
KPX Aogonek Otilde -30
KPX Aogonek Q -30
KPX Aogonek T -120
KPX Aogonek Tcaron -120
KPX Aogonek Tcommaaccent -120
KPX Aogonek U -50
KPX Aogonek Uacute -50
KPX Aogonek Ucircumflex -50
KPX Aogonek Udieresis -50
KPX Aogonek Ugrave -50
KPX Aogonek Uhungarumlaut -50
KPX Aogonek Umacron -50
KPX Aogonek Uogonek -50
KPX Aogonek Uring -50
KPX Aogonek V -70
KPX Aogonek W -50
KPX Aogonek Y -100
KPX Aogonek Yacute -100
KPX Aogonek Ydieresis -100
KPX Aogonek u -30
KPX Aogonek uacute -30
KPX Aogonek ucircumflex -30
KPX Aogonek udieresis -30
KPX Aogonek ugrave -30
KPX Aogonek uhungarumlaut -30
KPX Aogonek umacron -30
KPX Aogonek uogonek -30
KPX Aogonek uring -30
KPX Aogonek v -40
KPX Aogonek w -40
KPX Aogonek y -40
KPX Aogonek yacute -40
KPX Aogonek ydieresis -40
KPX Aring C -30
KPX Aring Cacute -30
KPX Aring Ccaron -30
KPX Aring Ccedilla -30
KPX Aring G -30
KPX Aring Gbreve -30
KPX Aring Gcommaaccent -30
KPX Aring O -30
KPX Aring Oacute -30
KPX Aring Ocircumflex -30
KPX Aring Odieresis -30
KPX Aring Ograve -30
KPX Aring Ohungarumlaut -30
KPX Aring Omacron -30
KPX Aring Oslash -30
KPX Aring Otilde -30
KPX Aring Q -30
KPX Aring T -120
KPX Aring Tcaron -120
KPX Aring Tcommaaccent -120
KPX Aring U -50
KPX Aring Uacute -50
KPX Aring Ucircumflex -50
KPX Aring Udieresis -50
KPX Aring Ugrave -50
KPX Aring Uhungarumlaut -50
KPX Aring Umacron -50
KPX Aring Uogonek -50
KPX Aring Uring -50
KPX Aring V -70
KPX Aring W -50
KPX Aring Y -100
KPX Aring Yacute -100
KPX Aring Ydieresis -100
KPX Aring u -30
KPX Aring uacute -30
KPX Aring ucircumflex -30
KPX Aring udieresis -30
KPX Aring ugrave -30
KPX Aring uhungarumlaut -30
KPX Aring umacron -30
KPX Aring uogonek -30
KPX Aring uring -30
KPX Aring v -40
KPX Aring w -40
KPX Aring y -40
KPX Aring yacute -40
KPX Aring ydieresis -40
KPX Atilde C -30
KPX Atilde Cacute -30
KPX Atilde Ccaron -30
KPX Atilde Ccedilla -30
KPX Atilde G -30
KPX Atilde Gbreve -30
KPX Atilde Gcommaaccent -30
KPX Atilde O -30
KPX Atilde Oacute -30
KPX Atilde Ocircumflex -30
KPX Atilde Odieresis -30
KPX Atilde Ograve -30
KPX Atilde Ohungarumlaut -30
KPX Atilde Omacron -30
KPX Atilde Oslash -30
KPX Atilde Otilde -30
KPX Atilde Q -30
KPX Atilde T -120
KPX Atilde Tcaron -120
KPX Atilde Tcommaaccent -120
KPX Atilde U -50
KPX Atilde Uacute -50
KPX Atilde Ucircumflex -50
KPX Atilde Udieresis -50
KPX Atilde Ugrave -50
KPX Atilde Uhungarumlaut -50
KPX Atilde Umacron -50
KPX Atilde Uogonek -50
KPX Atilde Uring -50
KPX Atilde V -70
KPX Atilde W -50
KPX Atilde Y -100
KPX Atilde Yacute -100
KPX Atilde Ydieresis -100
KPX Atilde u -30
KPX Atilde uacute -30
KPX Atilde ucircumflex -30
KPX Atilde udieresis -30
KPX Atilde ugrave -30
KPX Atilde uhungarumlaut -30
KPX Atilde umacron -30
KPX Atilde uogonek -30
KPX Atilde uring -30
KPX Atilde v -40
KPX Atilde w -40
KPX Atilde y -40
KPX Atilde yacute -40
KPX Atilde ydieresis -40
KPX B U -10
KPX B Uacute -10
KPX B Ucircumflex -10
KPX B Udieresis -10
KPX B Ugrave -10
KPX B Uhungarumlaut -10
KPX B Umacron -10
KPX B Uogonek -10
KPX B Uring -10
KPX B comma -20
KPX B period -20
KPX C comma -30
KPX C period -30
KPX Cacute comma -30
KPX Cacute period -30
KPX Ccaron comma -30
KPX Ccaron period -30
KPX Ccedilla comma -30
KPX Ccedilla period -30
KPX D A -40
KPX D Aacute -40
KPX D Abreve -40
KPX D Acircumflex -40
KPX D Adieresis -40
KPX D Agrave -40
KPX D Amacron -40
KPX D Aogonek -40
KPX D Aring -40
KPX D Atilde -40
KPX D V -70
KPX D W -40
KPX D Y -90
KPX D Yacute -90
KPX D Ydieresis -90
KPX D comma -70
KPX D period -70
KPX Dcaron A -40
KPX Dcaron Aacute -40
KPX Dcaron Abreve -40
KPX Dcaron Acircumflex -40
KPX Dcaron Adieresis -40
KPX Dcaron Agrave -40
KPX Dcaron Amacron -40
KPX Dcaron Aogonek -40
KPX Dcaron Aring -40
KPX Dcaron Atilde -40
KPX Dcaron V -70
KPX Dcaron W -40
KPX Dcaron Y -90
KPX Dcaron Yacute -90
KPX Dcaron Ydieresis -90
KPX Dcaron comma -70
KPX Dcaron period -70
KPX Dcroat A -40
KPX Dcroat Aacute -40
KPX Dcroat Abreve -40
KPX Dcroat Acircumflex -40
KPX Dcroat Adieresis -40
KPX Dcroat Agrave -40
KPX Dcroat Amacron -40
KPX Dcroat Aogonek -40
KPX Dcroat Aring -40
KPX Dcroat Atilde -40
KPX Dcroat V -70
KPX Dcroat W -40
KPX Dcroat Y -90
KPX Dcroat Yacute -90
KPX Dcroat Ydieresis -90
KPX Dcroat comma -70
KPX Dcroat period -70
KPX F A -80
KPX F Aacute -80
KPX F Abreve -80
KPX F Acircumflex -80
KPX F Adieresis -80
KPX F Agrave -80
KPX F Amacron -80
KPX F Aogonek -80
KPX F Aring -80
KPX F Atilde -80
KPX F a -50
KPX F aacute -50
KPX F abreve -50
KPX F acircumflex -50
KPX F adieresis -50
KPX F agrave -50
KPX F amacron -50
KPX F aogonek -50
KPX F aring -50
KPX F atilde -50
KPX F comma -150
KPX F e -30
KPX F eacute -30
KPX F ecaron -30
KPX F ecircumflex -30
KPX F edieresis -30
KPX F edotaccent -30
KPX F egrave -30
KPX F emacron -30
KPX F eogonek -30
KPX F o -30
KPX F oacute -30
KPX F ocircumflex -30
KPX F odieresis -30
KPX F ograve -30
KPX F ohungarumlaut -30
KPX F omacron -30
KPX F oslash -30
KPX F otilde -30
KPX F period -150
KPX F r -45
KPX F racute -45
KPX F rcaron -45
KPX F rcommaaccent -45
KPX J A -20
KPX J Aacute -20
KPX J Abreve -20
KPX J Acircumflex -20
KPX J Adieresis -20
KPX J Agrave -20
KPX J Amacron -20
KPX J Aogonek -20
KPX J Aring -20
KPX J Atilde -20
KPX J a -20
KPX J aacute -20
KPX J abreve -20
KPX J acircumflex -20
KPX J adieresis -20
KPX J agrave -20
KPX J amacron -20
KPX J aogonek -20
KPX J aring -20
KPX J atilde -20
KPX J comma -30
KPX J period -30
KPX J u -20
KPX J uacute -20
KPX J ucircumflex -20
KPX J udieresis -20
KPX J ugrave -20
KPX J uhungarumlaut -20
KPX J umacron -20
KPX J uogonek -20
KPX J uring -20
KPX K O -50
KPX K Oacute -50
KPX K Ocircumflex -50
KPX K Odieresis -50
KPX K Ograve -50
KPX K Ohungarumlaut -50
KPX K Omacron -50
KPX K Oslash -50
KPX K Otilde -50
KPX K e -40
KPX K eacute -40
KPX K ecaron -40
KPX K ecircumflex -40
KPX K edieresis -40
KPX K edotaccent -40
KPX K egrave -40
KPX K emacron -40
KPX K eogonek -40
KPX K o -40
KPX K oacute -40
KPX K ocircumflex -40
KPX K odieresis -40
KPX K ograve -40
KPX K ohungarumlaut -40
KPX K omacron -40
KPX K oslash -40
KPX K otilde -40
KPX K u -30
KPX K uacute -30
KPX K ucircumflex -30
KPX K udieresis -30
KPX K ugrave -30
KPX K uhungarumlaut -30
KPX K umacron -30
KPX K uogonek -30
KPX K uring -30
KPX K y -50
KPX K yacute -50
KPX K ydieresis -50
KPX Kcommaaccent O -50
KPX Kcommaaccent Oacute -50
KPX Kcommaaccent Ocircumflex -50
KPX Kcommaaccent Odieresis -50
KPX Kcommaaccent Ograve -50
KPX Kcommaaccent Ohungarumlaut -50
KPX Kcommaaccent Omacron -50
KPX Kcommaaccent Oslash -50
KPX Kcommaaccent Otilde -50
KPX Kcommaaccent e -40
KPX Kcommaaccent eacute -40
KPX Kcommaaccent ecaron -40
KPX Kcommaaccent ecircumflex -40
KPX Kcommaaccent edieresis -40
KPX Kcommaaccent edotaccent -40
KPX Kcommaaccent egrave -40
KPX Kcommaaccent emacron -40
KPX Kcommaaccent eogonek -40
KPX Kcommaaccent o -40
KPX Kcommaaccent oacute -40
KPX Kcommaaccent ocircumflex -40
KPX Kcommaaccent odieresis -40
KPX Kcommaaccent ograve -40
KPX Kcommaaccent ohungarumlaut -40
KPX Kcommaaccent omacron -40
KPX Kcommaaccent oslash -40
KPX Kcommaaccent otilde -40
KPX Kcommaaccent u -30
KPX Kcommaaccent uacute -30
KPX Kcommaaccent ucircumflex -30
KPX Kcommaaccent udieresis -30
KPX Kcommaaccent ugrave -30
KPX Kcommaaccent uhungarumlaut -30
KPX Kcommaaccent umacron -30
KPX Kcommaaccent uogonek -30
KPX Kcommaaccent uring -30
KPX Kcommaaccent y -50
KPX Kcommaaccent yacute -50
KPX Kcommaaccent ydieresis -50
KPX L T -110
KPX L Tcaron -110
KPX L Tcommaaccent -110
KPX L V -110
KPX L W -70
KPX L Y -140
KPX L Yacute -140
KPX L Ydieresis -140
KPX L quotedblright -140
KPX L quoteright -160
KPX L y -30
KPX L yacute -30
KPX L ydieresis -30
KPX Lacute T -110
KPX Lacute Tcaron -110
KPX Lacute Tcommaaccent -110
KPX Lacute V -110
KPX Lacute W -70
KPX Lacute Y -140
KPX Lacute Yacute -140
KPX Lacute Ydieresis -140
KPX Lacute quotedblright -140
KPX Lacute quoteright -160
KPX Lacute y -30
KPX Lacute yacute -30
KPX Lacute ydieresis -30
KPX Lcaron T -110
KPX Lcaron Tcaron -110
KPX Lcaron Tcommaaccent -110
KPX Lcaron V -110
KPX Lcaron W -70
KPX Lcaron Y -140
KPX Lcaron Yacute -140
KPX Lcaron Ydieresis -140
KPX Lcaron quotedblright -140
KPX Lcaron quoteright -160
KPX Lcaron y -30
KPX Lcaron yacute -30
KPX Lcaron ydieresis -30
KPX Lcommaaccent T -110
KPX Lcommaaccent Tcaron -110
KPX Lcommaaccent Tcommaaccent -110
KPX Lcommaaccent V -110
KPX Lcommaaccent W -70
KPX Lcommaaccent Y -140
KPX Lcommaaccent Yacute -140
KPX Lcommaaccent Ydieresis -140
KPX Lcommaaccent quotedblright -140
KPX Lcommaaccent quoteright -160
KPX Lcommaaccent y -30
KPX Lcommaaccent yacute -30
KPX Lcommaaccent ydieresis -30
KPX Lslash T -110
KPX Lslash Tcaron -110
KPX Lslash Tcommaaccent -110
KPX Lslash V -110
KPX Lslash W -70
KPX Lslash Y -140
KPX Lslash Yacute -140
KPX Lslash Ydieresis -140
KPX Lslash quotedblright -140
KPX Lslash quoteright -160
KPX Lslash y -30
KPX Lslash yacute -30
KPX Lslash ydieresis -30
KPX O A -20
KPX O Aacute -20
KPX O Abreve -20
KPX O Acircumflex -20
KPX O Adieresis -20
KPX O Agrave -20
KPX O Amacron -20
KPX O Aogonek -20
KPX O Aring -20
KPX O Atilde -20
KPX O T -40
KPX O Tcaron -40
KPX O Tcommaaccent -40
KPX O V -50
KPX O W -30
KPX O X -60
KPX O Y -70
KPX O Yacute -70
KPX O Ydieresis -70
KPX O comma -40
KPX O period -40
KPX Oacute A -20
KPX Oacute Aacute -20
KPX Oacute Abreve -20
KPX Oacute Acircumflex -20
KPX Oacute Adieresis -20
KPX Oacute Agrave -20
KPX Oacute Amacron -20
KPX Oacute Aogonek -20
KPX Oacute Aring -20
KPX Oacute Atilde -20
KPX Oacute T -40
KPX Oacute Tcaron -40
KPX Oacute Tcommaaccent -40
KPX Oacute V -50
KPX Oacute W -30
KPX Oacute X -60
KPX Oacute Y -70
KPX Oacute Yacute -70
KPX Oacute Ydieresis -70
KPX Oacute comma -40
KPX Oacute period -40
KPX Ocircumflex A -20
KPX Ocircumflex Aacute -20
KPX Ocircumflex Abreve -20
KPX Ocircumflex Acircumflex -20
KPX Ocircumflex Adieresis -20
KPX Ocircumflex Agrave -20
KPX Ocircumflex Amacron -20
KPX Ocircumflex Aogonek -20
KPX Ocircumflex Aring -20
KPX Ocircumflex Atilde -20
KPX Ocircumflex T -40
KPX Ocircumflex Tcaron -40
KPX Ocircumflex Tcommaaccent -40
KPX Ocircumflex V -50
KPX Ocircumflex W -30
KPX Ocircumflex X -60
KPX Ocircumflex Y -70
KPX Ocircumflex Yacute -70
KPX Ocircumflex Ydieresis -70
KPX Ocircumflex comma -40
KPX Ocircumflex period -40
KPX Odieresis A -20
KPX Odieresis Aacute -20
KPX Odieresis Abreve -20
KPX Odieresis Acircumflex -20
KPX Odieresis Adieresis -20
KPX Odieresis Agrave -20
KPX Odieresis Amacron -20
KPX Odieresis Aogonek -20
KPX Odieresis Aring -20
KPX Odieresis Atilde -20
KPX Odieresis T -40
KPX Odieresis Tcaron -40
KPX Odieresis Tcommaaccent -40
KPX Odieresis V -50
KPX Odieresis W -30
KPX Odieresis X -60
KPX Odieresis Y -70
KPX Odieresis Yacute -70
KPX Odieresis Ydieresis -70
KPX Odieresis comma -40
KPX Odieresis period -40
KPX Ograve A -20
KPX Ograve Aacute -20
KPX Ograve Abreve -20
KPX Ograve Acircumflex -20
KPX Ograve Adieresis -20
KPX Ograve Agrave -20
KPX Ograve Amacron -20
KPX Ograve Aogonek -20
KPX Ograve Aring -20
KPX Ograve Atilde -20
KPX Ograve T -40
KPX Ograve Tcaron -40
KPX Ograve Tcommaaccent -40
KPX Ograve V -50
KPX Ograve W -30
KPX Ograve X -60
KPX Ograve Y -70
KPX Ograve Yacute -70
KPX Ograve Ydieresis -70
KPX Ograve comma -40
KPX Ograve period -40
KPX Ohungarumlaut A -20
KPX Ohungarumlaut Aacute -20
KPX Ohungarumlaut Abreve -20
KPX Ohungarumlaut Acircumflex -20
KPX Ohungarumlaut Adieresis -20
KPX Ohungarumlaut Agrave -20
KPX Ohungarumlaut Amacron -20
KPX Ohungarumlaut Aogonek -20
KPX Ohungarumlaut Aring -20
KPX Ohungarumlaut Atilde -20
KPX Ohungarumlaut T -40
KPX Ohungarumlaut Tcaron -40
KPX Ohungarumlaut Tcommaaccent -40
KPX Ohungarumlaut V -50
KPX Ohungarumlaut W -30
KPX Ohungarumlaut X -60
KPX Ohungarumlaut Y -70
KPX Ohungarumlaut Yacute -70
KPX Ohungarumlaut Ydieresis -70
KPX Ohungarumlaut comma -40
KPX Ohungarumlaut period -40
KPX Omacron A -20
KPX Omacron Aacute -20
KPX Omacron Abreve -20
KPX Omacron Acircumflex -20
KPX Omacron Adieresis -20
KPX Omacron Agrave -20
KPX Omacron Amacron -20
KPX Omacron Aogonek -20
KPX Omacron Aring -20
KPX Omacron Atilde -20
KPX Omacron T -40
KPX Omacron Tcaron -40
KPX Omacron Tcommaaccent -40
KPX Omacron V -50
KPX Omacron W -30
KPX Omacron X -60
KPX Omacron Y -70
KPX Omacron Yacute -70
KPX Omacron Ydieresis -70
KPX Omacron comma -40
KPX Omacron period -40
KPX Oslash A -20
KPX Oslash Aacute -20
KPX Oslash Abreve -20
KPX Oslash Acircumflex -20
KPX Oslash Adieresis -20
KPX Oslash Agrave -20
KPX Oslash Amacron -20
KPX Oslash Aogonek -20
KPX Oslash Aring -20
KPX Oslash Atilde -20
KPX Oslash T -40
KPX Oslash Tcaron -40
KPX Oslash Tcommaaccent -40
KPX Oslash V -50
KPX Oslash W -30
KPX Oslash X -60
KPX Oslash Y -70
KPX Oslash Yacute -70
KPX Oslash Ydieresis -70
KPX Oslash comma -40
KPX Oslash period -40
KPX Otilde A -20
KPX Otilde Aacute -20
KPX Otilde Abreve -20
KPX Otilde Acircumflex -20
KPX Otilde Adieresis -20
KPX Otilde Agrave -20
KPX Otilde Amacron -20
KPX Otilde Aogonek -20
KPX Otilde Aring -20
KPX Otilde Atilde -20
KPX Otilde T -40
KPX Otilde Tcaron -40
KPX Otilde Tcommaaccent -40
KPX Otilde V -50
KPX Otilde W -30
KPX Otilde X -60
KPX Otilde Y -70
KPX Otilde Yacute -70
KPX Otilde Ydieresis -70
KPX Otilde comma -40
KPX Otilde period -40
KPX P A -120
KPX P Aacute -120
KPX P Abreve -120
KPX P Acircumflex -120
KPX P Adieresis -120
KPX P Agrave -120
KPX P Amacron -120
KPX P Aogonek -120
KPX P Aring -120
KPX P Atilde -120
KPX P a -40
KPX P aacute -40
KPX P abreve -40
KPX P acircumflex -40
KPX P adieresis -40
KPX P agrave -40
KPX P amacron -40
KPX P aogonek -40
KPX P aring -40
KPX P atilde -40
KPX P comma -180
KPX P e -50
KPX P eacute -50
KPX P ecaron -50
KPX P ecircumflex -50
KPX P edieresis -50
KPX P edotaccent -50
KPX P egrave -50
KPX P emacron -50
KPX P eogonek -50
KPX P o -50
KPX P oacute -50
KPX P ocircumflex -50
KPX P odieresis -50
KPX P ograve -50
KPX P ohungarumlaut -50
KPX P omacron -50
KPX P oslash -50
KPX P otilde -50
KPX P period -180
KPX Q U -10
KPX Q Uacute -10
KPX Q Ucircumflex -10
KPX Q Udieresis -10
KPX Q Ugrave -10
KPX Q Uhungarumlaut -10
KPX Q Umacron -10
KPX Q Uogonek -10
KPX Q Uring -10
KPX R O -20
KPX R Oacute -20
KPX R Ocircumflex -20
KPX R Odieresis -20
KPX R Ograve -20
KPX R Ohungarumlaut -20
KPX R Omacron -20
KPX R Oslash -20
KPX R Otilde -20
KPX R T -30
KPX R Tcaron -30
KPX R Tcommaaccent -30
KPX R U -40
KPX R Uacute -40
KPX R Ucircumflex -40
KPX R Udieresis -40
KPX R Ugrave -40
KPX R Uhungarumlaut -40
KPX R Umacron -40
KPX R Uogonek -40
KPX R Uring -40
KPX R V -50
KPX R W -30
KPX R Y -50
KPX R Yacute -50
KPX R Ydieresis -50
KPX Racute O -20
KPX Racute Oacute -20
KPX Racute Ocircumflex -20
KPX Racute Odieresis -20
KPX Racute Ograve -20
KPX Racute Ohungarumlaut -20
KPX Racute Omacron -20
KPX Racute Oslash -20
KPX Racute Otilde -20
KPX Racute T -30
KPX Racute Tcaron -30
KPX Racute Tcommaaccent -30
KPX Racute U -40
KPX Racute Uacute -40
KPX Racute Ucircumflex -40
KPX Racute Udieresis -40
KPX Racute Ugrave -40
KPX Racute Uhungarumlaut -40
KPX Racute Umacron -40
KPX Racute Uogonek -40
KPX Racute Uring -40
KPX Racute V -50
KPX Racute W -30
KPX Racute Y -50
KPX Racute Yacute -50
KPX Racute Ydieresis -50
KPX Rcaron O -20
KPX Rcaron Oacute -20
KPX Rcaron Ocircumflex -20
KPX Rcaron Odieresis -20
KPX Rcaron Ograve -20
KPX Rcaron Ohungarumlaut -20
KPX Rcaron Omacron -20
KPX Rcaron Oslash -20
KPX Rcaron Otilde -20
KPX Rcaron T -30
KPX Rcaron Tcaron -30
KPX Rcaron Tcommaaccent -30
KPX Rcaron U -40
KPX Rcaron Uacute -40
KPX Rcaron Ucircumflex -40
KPX Rcaron Udieresis -40
KPX Rcaron Ugrave -40
KPX Rcaron Uhungarumlaut -40
KPX Rcaron Umacron -40
KPX Rcaron Uogonek -40
KPX Rcaron Uring -40
KPX Rcaron V -50
KPX Rcaron W -30
KPX Rcaron Y -50
KPX Rcaron Yacute -50
KPX Rcaron Ydieresis -50
KPX Rcommaaccent O -20
KPX Rcommaaccent Oacute -20
KPX Rcommaaccent Ocircumflex -20
KPX Rcommaaccent Odieresis -20
KPX Rcommaaccent Ograve -20
KPX Rcommaaccent Ohungarumlaut -20
KPX Rcommaaccent Omacron -20
KPX Rcommaaccent Oslash -20
KPX Rcommaaccent Otilde -20
KPX Rcommaaccent T -30
KPX Rcommaaccent Tcaron -30
KPX Rcommaaccent Tcommaaccent -30
KPX Rcommaaccent U -40
KPX Rcommaaccent Uacute -40
KPX Rcommaaccent Ucircumflex -40
KPX Rcommaaccent Udieresis -40
KPX Rcommaaccent Ugrave -40
KPX Rcommaaccent Uhungarumlaut -40
KPX Rcommaaccent Umacron -40
KPX Rcommaaccent Uogonek -40
KPX Rcommaaccent Uring -40
KPX Rcommaaccent V -50
KPX Rcommaaccent W -30
KPX Rcommaaccent Y -50
KPX Rcommaaccent Yacute -50
KPX Rcommaaccent Ydieresis -50
KPX S comma -20
KPX S period -20
KPX Sacute comma -20
KPX Sacute period -20
KPX Scaron comma -20
KPX Scaron period -20
KPX Scedilla comma -20
KPX Scedilla period -20
KPX Scommaaccent comma -20
KPX Scommaaccent period -20
KPX T A -120
KPX T Aacute -120
KPX T Abreve -120
KPX T Acircumflex -120
KPX T Adieresis -120
KPX T Agrave -120
KPX T Amacron -120
KPX T Aogonek -120
KPX T Aring -120
KPX T Atilde -120
KPX T O -40
KPX T Oacute -40
KPX T Ocircumflex -40
KPX T Odieresis -40
KPX T Ograve -40
KPX T Ohungarumlaut -40
KPX T Omacron -40
KPX T Oslash -40
KPX T Otilde -40
KPX T a -120
KPX T aacute -120
KPX T abreve -60
KPX T acircumflex -120
KPX T adieresis -120
KPX T agrave -120
KPX T amacron -60
KPX T aogonek -120
KPX T aring -120
KPX T atilde -60
KPX T colon -20
KPX T comma -120
KPX T e -120
KPX T eacute -120
KPX T ecaron -120
KPX T ecircumflex -120
KPX T edieresis -120
KPX T edotaccent -120
KPX T egrave -60
KPX T emacron -60
KPX T eogonek -120
KPX T hyphen -140
KPX T o -120
KPX T oacute -120
KPX T ocircumflex -120
KPX T odieresis -120
KPX T ograve -120
KPX T ohungarumlaut -120
KPX T omacron -60
KPX T oslash -120
KPX T otilde -60
KPX T period -120
KPX T r -120
KPX T racute -120
KPX T rcaron -120
KPX T rcommaaccent -120
KPX T semicolon -20
KPX T u -120
KPX T uacute -120
KPX T ucircumflex -120
KPX T udieresis -120
KPX T ugrave -120
KPX T uhungarumlaut -120
KPX T umacron -60
KPX T uogonek -120
KPX T uring -120
KPX T w -120
KPX T y -120
KPX T yacute -120
KPX T ydieresis -60
KPX Tcaron A -120
KPX Tcaron Aacute -120
KPX Tcaron Abreve -120
KPX Tcaron Acircumflex -120
KPX Tcaron Adieresis -120
KPX Tcaron Agrave -120
KPX Tcaron Amacron -120
KPX Tcaron Aogonek -120
KPX Tcaron Aring -120
KPX Tcaron Atilde -120
KPX Tcaron O -40
KPX Tcaron Oacute -40
KPX Tcaron Ocircumflex -40
KPX Tcaron Odieresis -40
KPX Tcaron Ograve -40
KPX Tcaron Ohungarumlaut -40
KPX Tcaron Omacron -40
KPX Tcaron Oslash -40
KPX Tcaron Otilde -40
KPX Tcaron a -120
KPX Tcaron aacute -120
KPX Tcaron abreve -60
KPX Tcaron acircumflex -120
KPX Tcaron adieresis -120
KPX Tcaron agrave -120
KPX Tcaron amacron -60
KPX Tcaron aogonek -120
KPX Tcaron aring -120
KPX Tcaron atilde -60
KPX Tcaron colon -20
KPX Tcaron comma -120
KPX Tcaron e -120
KPX Tcaron eacute -120
KPX Tcaron ecaron -120
KPX Tcaron ecircumflex -120
KPX Tcaron edieresis -120
KPX Tcaron edotaccent -120
KPX Tcaron egrave -60
KPX Tcaron emacron -60
KPX Tcaron eogonek -120
KPX Tcaron hyphen -140
KPX Tcaron o -120
KPX Tcaron oacute -120
KPX Tcaron ocircumflex -120
KPX Tcaron odieresis -120
KPX Tcaron ograve -120
KPX Tcaron ohungarumlaut -120
KPX Tcaron omacron -60
KPX Tcaron oslash -120
KPX Tcaron otilde -60
KPX Tcaron period -120
KPX Tcaron r -120
KPX Tcaron racute -120
KPX Tcaron rcaron -120
KPX Tcaron rcommaaccent -120
KPX Tcaron semicolon -20
KPX Tcaron u -120
KPX Tcaron uacute -120
KPX Tcaron ucircumflex -120
KPX Tcaron udieresis -120
KPX Tcaron ugrave -120
KPX Tcaron uhungarumlaut -120
KPX Tcaron umacron -60
KPX Tcaron uogonek -120
KPX Tcaron uring -120
KPX Tcaron w -120
KPX Tcaron y -120
KPX Tcaron yacute -120
KPX Tcaron ydieresis -60
KPX Tcommaaccent A -120
KPX Tcommaaccent Aacute -120
KPX Tcommaaccent Abreve -120
KPX Tcommaaccent Acircumflex -120
KPX Tcommaaccent Adieresis -120
KPX Tcommaaccent Agrave -120
KPX Tcommaaccent Amacron -120
KPX Tcommaaccent Aogonek -120
KPX Tcommaaccent Aring -120
KPX Tcommaaccent Atilde -120
KPX Tcommaaccent O -40
KPX Tcommaaccent Oacute -40
KPX Tcommaaccent Ocircumflex -40
KPX Tcommaaccent Odieresis -40
KPX Tcommaaccent Ograve -40
KPX Tcommaaccent Ohungarumlaut -40
KPX Tcommaaccent Omacron -40
KPX Tcommaaccent Oslash -40
KPX Tcommaaccent Otilde -40
KPX Tcommaaccent a -120
KPX Tcommaaccent aacute -120
KPX Tcommaaccent abreve -60
KPX Tcommaaccent acircumflex -120
KPX Tcommaaccent adieresis -120
KPX Tcommaaccent agrave -120
KPX Tcommaaccent amacron -60
KPX Tcommaaccent aogonek -120
KPX Tcommaaccent aring -120
KPX Tcommaaccent atilde -60
KPX Tcommaaccent colon -20
KPX Tcommaaccent comma -120
KPX Tcommaaccent e -120
KPX Tcommaaccent eacute -120
KPX Tcommaaccent ecaron -120
KPX Tcommaaccent ecircumflex -120
KPX Tcommaaccent edieresis -120
KPX Tcommaaccent edotaccent -120
KPX Tcommaaccent egrave -60
KPX Tcommaaccent emacron -60
KPX Tcommaaccent eogonek -120
KPX Tcommaaccent hyphen -140
KPX Tcommaaccent o -120
KPX Tcommaaccent oacute -120
KPX Tcommaaccent ocircumflex -120
KPX Tcommaaccent odieresis -120
KPX Tcommaaccent ograve -120
KPX Tcommaaccent ohungarumlaut -120
KPX Tcommaaccent omacron -60
KPX Tcommaaccent oslash -120
KPX Tcommaaccent otilde -60
KPX Tcommaaccent period -120
KPX Tcommaaccent r -120
KPX Tcommaaccent racute -120
KPX Tcommaaccent rcaron -120
KPX Tcommaaccent rcommaaccent -120
KPX Tcommaaccent semicolon -20
KPX Tcommaaccent u -120
KPX Tcommaaccent uacute -120
KPX Tcommaaccent ucircumflex -120
KPX Tcommaaccent udieresis -120
KPX Tcommaaccent ugrave -120
KPX Tcommaaccent uhungarumlaut -120
KPX Tcommaaccent umacron -60
KPX Tcommaaccent uogonek -120
KPX Tcommaaccent uring -120
KPX Tcommaaccent w -120
KPX Tcommaaccent y -120
KPX Tcommaaccent yacute -120
KPX Tcommaaccent ydieresis -60
KPX U A -40
KPX U Aacute -40
KPX U Abreve -40
KPX U Acircumflex -40
KPX U Adieresis -40
KPX U Agrave -40
KPX U Amacron -40
KPX U Aogonek -40
KPX U Aring -40
KPX U Atilde -40
KPX U comma -40
KPX U period -40
KPX Uacute A -40
KPX Uacute Aacute -40
KPX Uacute Abreve -40
KPX Uacute Acircumflex -40
KPX Uacute Adieresis -40
KPX Uacute Agrave -40
KPX Uacute Amacron -40
KPX Uacute Aogonek -40
KPX Uacute Aring -40
KPX Uacute Atilde -40
KPX Uacute comma -40
KPX Uacute period -40
KPX Ucircumflex A -40
KPX Ucircumflex Aacute -40
KPX Ucircumflex Abreve -40
KPX Ucircumflex Acircumflex -40
KPX Ucircumflex Adieresis -40
KPX Ucircumflex Agrave -40
KPX Ucircumflex Amacron -40
KPX Ucircumflex Aogonek -40
KPX Ucircumflex Aring -40
KPX Ucircumflex Atilde -40
KPX Ucircumflex comma -40
KPX Ucircumflex period -40
KPX Udieresis A -40
KPX Udieresis Aacute -40
KPX Udieresis Abreve -40
KPX Udieresis Acircumflex -40
KPX Udieresis Adieresis -40
KPX Udieresis Agrave -40
KPX Udieresis Amacron -40
KPX Udieresis Aogonek -40
KPX Udieresis Aring -40
KPX Udieresis Atilde -40
KPX Udieresis comma -40
KPX Udieresis period -40
KPX Ugrave A -40
KPX Ugrave Aacute -40
KPX Ugrave Abreve -40
KPX Ugrave Acircumflex -40
KPX Ugrave Adieresis -40
KPX Ugrave Agrave -40
KPX Ugrave Amacron -40
KPX Ugrave Aogonek -40
KPX Ugrave Aring -40
KPX Ugrave Atilde -40
KPX Ugrave comma -40
KPX Ugrave period -40
KPX Uhungarumlaut A -40
KPX Uhungarumlaut Aacute -40
KPX Uhungarumlaut Abreve -40
KPX Uhungarumlaut Acircumflex -40
KPX Uhungarumlaut Adieresis -40
KPX Uhungarumlaut Agrave -40
KPX Uhungarumlaut Amacron -40
KPX Uhungarumlaut Aogonek -40
KPX Uhungarumlaut Aring -40
KPX Uhungarumlaut Atilde -40
KPX Uhungarumlaut comma -40
KPX Uhungarumlaut period -40
KPX Umacron A -40
KPX Umacron Aacute -40
KPX Umacron Abreve -40
KPX Umacron Acircumflex -40
KPX Umacron Adieresis -40
KPX Umacron Agrave -40
KPX Umacron Amacron -40
KPX Umacron Aogonek -40
KPX Umacron Aring -40
KPX Umacron Atilde -40
KPX Umacron comma -40
KPX Umacron period -40
KPX Uogonek A -40
KPX Uogonek Aacute -40
KPX Uogonek Abreve -40
KPX Uogonek Acircumflex -40
KPX Uogonek Adieresis -40
KPX Uogonek Agrave -40
KPX Uogonek Amacron -40
KPX Uogonek Aogonek -40
KPX Uogonek Aring -40
KPX Uogonek Atilde -40
KPX Uogonek comma -40
KPX Uogonek period -40
KPX Uring A -40
KPX Uring Aacute -40
KPX Uring Abreve -40
KPX Uring Acircumflex -40
KPX Uring Adieresis -40
KPX Uring Agrave -40
KPX Uring Amacron -40
KPX Uring Aogonek -40
KPX Uring Aring -40
KPX Uring Atilde -40
KPX Uring comma -40
KPX Uring period -40
KPX V A -80
KPX V Aacute -80
KPX V Abreve -80
KPX V Acircumflex -80
KPX V Adieresis -80
KPX V Agrave -80
KPX V Amacron -80
KPX V Aogonek -80
KPX V Aring -80
KPX V Atilde -80
KPX V G -40
KPX V Gbreve -40
KPX V Gcommaaccent -40
KPX V O -40
KPX V Oacute -40
KPX V Ocircumflex -40
KPX V Odieresis -40
KPX V Ograve -40
KPX V Ohungarumlaut -40
KPX V Omacron -40
KPX V Oslash -40
KPX V Otilde -40
KPX V a -70
KPX V aacute -70
KPX V abreve -70
KPX V acircumflex -70
KPX V adieresis -70
KPX V agrave -70
KPX V amacron -70
KPX V aogonek -70
KPX V aring -70
KPX V atilde -70
KPX V colon -40
KPX V comma -125
KPX V e -80
KPX V eacute -80
KPX V ecaron -80
KPX V ecircumflex -80
KPX V edieresis -80
KPX V edotaccent -80
KPX V egrave -80
KPX V emacron -80
KPX V eogonek -80
KPX V hyphen -80
KPX V o -80
KPX V oacute -80
KPX V ocircumflex -80
KPX V odieresis -80
KPX V ograve -80
KPX V ohungarumlaut -80
KPX V omacron -80
KPX V oslash -80
KPX V otilde -80
KPX V period -125
KPX V semicolon -40
KPX V u -70
KPX V uacute -70
KPX V ucircumflex -70
KPX V udieresis -70
KPX V ugrave -70
KPX V uhungarumlaut -70
KPX V umacron -70
KPX V uogonek -70
KPX V uring -70
KPX W A -50
KPX W Aacute -50
KPX W Abreve -50
KPX W Acircumflex -50
KPX W Adieresis -50
KPX W Agrave -50
KPX W Amacron -50
KPX W Aogonek -50
KPX W Aring -50
KPX W Atilde -50
KPX W O -20
KPX W Oacute -20
KPX W Ocircumflex -20
KPX W Odieresis -20
KPX W Ograve -20
KPX W Ohungarumlaut -20
KPX W Omacron -20
KPX W Oslash -20
KPX W Otilde -20
KPX W a -40
KPX W aacute -40
KPX W abreve -40
KPX W acircumflex -40
KPX W adieresis -40
KPX W agrave -40
KPX W amacron -40
KPX W aogonek -40
KPX W aring -40
KPX W atilde -40
KPX W comma -80
KPX W e -30
KPX W eacute -30
KPX W ecaron -30
KPX W ecircumflex -30
KPX W edieresis -30
KPX W edotaccent -30
KPX W egrave -30
KPX W emacron -30
KPX W eogonek -30
KPX W hyphen -40
KPX W o -30
KPX W oacute -30
KPX W ocircumflex -30
KPX W odieresis -30
KPX W ograve -30
KPX W ohungarumlaut -30
KPX W omacron -30
KPX W oslash -30
KPX W otilde -30
KPX W period -80
KPX W u -30
KPX W uacute -30
KPX W ucircumflex -30
KPX W udieresis -30
KPX W ugrave -30
KPX W uhungarumlaut -30
KPX W umacron -30
KPX W uogonek -30
KPX W uring -30
KPX W y -20
KPX W yacute -20
KPX W ydieresis -20
KPX Y A -110
KPX Y Aacute -110
KPX Y Abreve -110
KPX Y Acircumflex -110
KPX Y Adieresis -110
KPX Y Agrave -110
KPX Y Amacron -110
KPX Y Aogonek -110
KPX Y Aring -110
KPX Y Atilde -110
KPX Y O -85
KPX Y Oacute -85
KPX Y Ocircumflex -85
KPX Y Odieresis -85
KPX Y Ograve -85
KPX Y Ohungarumlaut -85
KPX Y Omacron -85
KPX Y Oslash -85
KPX Y Otilde -85
KPX Y a -140
KPX Y aacute -140
KPX Y abreve -70
KPX Y acircumflex -140
KPX Y adieresis -140
KPX Y agrave -140
KPX Y amacron -70
KPX Y aogonek -140
KPX Y aring -140
KPX Y atilde -140
KPX Y colon -60
KPX Y comma -140
KPX Y e -140
KPX Y eacute -140
KPX Y ecaron -140
KPX Y ecircumflex -140
KPX Y edieresis -140
KPX Y edotaccent -140
KPX Y egrave -140
KPX Y emacron -70
KPX Y eogonek -140
KPX Y hyphen -140
KPX Y i -20
KPX Y iacute -20
KPX Y iogonek -20
KPX Y o -140
KPX Y oacute -140
KPX Y ocircumflex -140
KPX Y odieresis -140
KPX Y ograve -140
KPX Y ohungarumlaut -140
KPX Y omacron -140
KPX Y oslash -140
KPX Y otilde -140
KPX Y period -140
KPX Y semicolon -60
KPX Y u -110
KPX Y uacute -110
KPX Y ucircumflex -110
KPX Y udieresis -110
KPX Y ugrave -110
KPX Y uhungarumlaut -110
KPX Y umacron -110
KPX Y uogonek -110
KPX Y uring -110
KPX Yacute A -110
KPX Yacute Aacute -110
KPX Yacute Abreve -110
KPX Yacute Acircumflex -110
KPX Yacute Adieresis -110
KPX Yacute Agrave -110
KPX Yacute Amacron -110
KPX Yacute Aogonek -110
KPX Yacute Aring -110
KPX Yacute Atilde -110
KPX Yacute O -85
KPX Yacute Oacute -85
KPX Yacute Ocircumflex -85
KPX Yacute Odieresis -85
KPX Yacute Ograve -85
KPX Yacute Ohungarumlaut -85
KPX Yacute Omacron -85
KPX Yacute Oslash -85
KPX Yacute Otilde -85
KPX Yacute a -140
KPX Yacute aacute -140
KPX Yacute abreve -70
KPX Yacute acircumflex -140
KPX Yacute adieresis -140
KPX Yacute agrave -140
KPX Yacute amacron -70
KPX Yacute aogonek -140
KPX Yacute aring -140
KPX Yacute atilde -70
KPX Yacute colon -60
KPX Yacute comma -140
KPX Yacute e -140
KPX Yacute eacute -140
KPX Yacute ecaron -140
KPX Yacute ecircumflex -140
KPX Yacute edieresis -140
KPX Yacute edotaccent -140
KPX Yacute egrave -140
KPX Yacute emacron -70
KPX Yacute eogonek -140
KPX Yacute hyphen -140
KPX Yacute i -20
KPX Yacute iacute -20
KPX Yacute iogonek -20
KPX Yacute o -140
KPX Yacute oacute -140
KPX Yacute ocircumflex -140
KPX Yacute odieresis -140
KPX Yacute ograve -140
KPX Yacute ohungarumlaut -140
KPX Yacute omacron -70
KPX Yacute oslash -140
KPX Yacute otilde -140
KPX Yacute period -140
KPX Yacute semicolon -60
KPX Yacute u -110
KPX Yacute uacute -110
KPX Yacute ucircumflex -110
KPX Yacute udieresis -110
KPX Yacute ugrave -110
KPX Yacute uhungarumlaut -110
KPX Yacute umacron -110
KPX Yacute uogonek -110
KPX Yacute uring -110
KPX Ydieresis A -110
KPX Ydieresis Aacute -110
KPX Ydieresis Abreve -110
KPX Ydieresis Acircumflex -110
KPX Ydieresis Adieresis -110
KPX Ydieresis Agrave -110
KPX Ydieresis Amacron -110
KPX Ydieresis Aogonek -110
KPX Ydieresis Aring -110
KPX Ydieresis Atilde -110
KPX Ydieresis O -85
KPX Ydieresis Oacute -85
KPX Ydieresis Ocircumflex -85
KPX Ydieresis Odieresis -85
KPX Ydieresis Ograve -85
KPX Ydieresis Ohungarumlaut -85
KPX Ydieresis Omacron -85
KPX Ydieresis Oslash -85
KPX Ydieresis Otilde -85
KPX Ydieresis a -140
KPX Ydieresis aacute -140
KPX Ydieresis abreve -70
KPX Ydieresis acircumflex -140
KPX Ydieresis adieresis -140
KPX Ydieresis agrave -140
KPX Ydieresis amacron -70
KPX Ydieresis aogonek -140
KPX Ydieresis aring -140
KPX Ydieresis atilde -70
KPX Ydieresis colon -60
KPX Ydieresis comma -140
KPX Ydieresis e -140
KPX Ydieresis eacute -140
KPX Ydieresis ecaron -140
KPX Ydieresis ecircumflex -140
KPX Ydieresis edieresis -140
KPX Ydieresis edotaccent -140
KPX Ydieresis egrave -140
KPX Ydieresis emacron -70
KPX Ydieresis eogonek -140
KPX Ydieresis hyphen -140
KPX Ydieresis i -20
KPX Ydieresis iacute -20
KPX Ydieresis iogonek -20
KPX Ydieresis o -140
KPX Ydieresis oacute -140
KPX Ydieresis ocircumflex -140
KPX Ydieresis odieresis -140
KPX Ydieresis ograve -140
KPX Ydieresis ohungarumlaut -140
KPX Ydieresis omacron -140
KPX Ydieresis oslash -140
KPX Ydieresis otilde -140
KPX Ydieresis period -140
KPX Ydieresis semicolon -60
KPX Ydieresis u -110
KPX Ydieresis uacute -110
KPX Ydieresis ucircumflex -110
KPX Ydieresis udieresis -110
KPX Ydieresis ugrave -110
KPX Ydieresis uhungarumlaut -110
KPX Ydieresis umacron -110
KPX Ydieresis uogonek -110
KPX Ydieresis uring -110
KPX a v -20
KPX a w -20
KPX a y -30
KPX a yacute -30
KPX a ydieresis -30
KPX aacute v -20
KPX aacute w -20
KPX aacute y -30
KPX aacute yacute -30
KPX aacute ydieresis -30
KPX abreve v -20
KPX abreve w -20
KPX abreve y -30
KPX abreve yacute -30
KPX abreve ydieresis -30
KPX acircumflex v -20
KPX acircumflex w -20
KPX acircumflex y -30
KPX acircumflex yacute -30
KPX acircumflex ydieresis -30
KPX adieresis v -20
KPX adieresis w -20
KPX adieresis y -30
KPX adieresis yacute -30
KPX adieresis ydieresis -30
KPX agrave v -20
KPX agrave w -20
KPX agrave y -30
KPX agrave yacute -30
KPX agrave ydieresis -30
KPX amacron v -20
KPX amacron w -20
KPX amacron y -30
KPX amacron yacute -30
KPX amacron ydieresis -30
KPX aogonek v -20
KPX aogonek w -20
KPX aogonek y -30
KPX aogonek yacute -30
KPX aogonek ydieresis -30
KPX aring v -20
KPX aring w -20
KPX aring y -30
KPX aring yacute -30
KPX aring ydieresis -30
KPX atilde v -20
KPX atilde w -20
KPX atilde y -30
KPX atilde yacute -30
KPX atilde ydieresis -30
KPX b b -10
KPX b comma -40
KPX b l -20
KPX b lacute -20
KPX b lcommaaccent -20
KPX b lslash -20
KPX b period -40
KPX b u -20
KPX b uacute -20
KPX b ucircumflex -20
KPX b udieresis -20
KPX b ugrave -20
KPX b uhungarumlaut -20
KPX b umacron -20
KPX b uogonek -20
KPX b uring -20
KPX b v -20
KPX b y -20
KPX b yacute -20
KPX b ydieresis -20
KPX c comma -15
KPX c k -20
KPX c kcommaaccent -20
KPX cacute comma -15
KPX cacute k -20
KPX cacute kcommaaccent -20
KPX ccaron comma -15
KPX ccaron k -20
KPX ccaron kcommaaccent -20
KPX ccedilla comma -15
KPX ccedilla k -20
KPX ccedilla kcommaaccent -20
KPX colon space -50
KPX comma quotedblright -100
KPX comma quoteright -100
KPX e comma -15
KPX e period -15
KPX e v -30
KPX e w -20
KPX e x -30
KPX e y -20
KPX e yacute -20
KPX e ydieresis -20
KPX eacute comma -15
KPX eacute period -15
KPX eacute v -30
KPX eacute w -20
KPX eacute x -30
KPX eacute y -20
KPX eacute yacute -20
KPX eacute ydieresis -20
KPX ecaron comma -15
KPX ecaron period -15
KPX ecaron v -30
KPX ecaron w -20
KPX ecaron x -30
KPX ecaron y -20
KPX ecaron yacute -20
KPX ecaron ydieresis -20
KPX ecircumflex comma -15
KPX ecircumflex period -15
KPX ecircumflex v -30
KPX ecircumflex w -20
KPX ecircumflex x -30
KPX ecircumflex y -20
KPX ecircumflex yacute -20
KPX ecircumflex ydieresis -20
KPX edieresis comma -15
KPX edieresis period -15
KPX edieresis v -30
KPX edieresis w -20
KPX edieresis x -30
KPX edieresis y -20
KPX edieresis yacute -20
KPX edieresis ydieresis -20
KPX edotaccent comma -15
KPX edotaccent period -15
KPX edotaccent v -30
KPX edotaccent w -20
KPX edotaccent x -30
KPX edotaccent y -20
KPX edotaccent yacute -20
KPX edotaccent ydieresis -20
KPX egrave comma -15
KPX egrave period -15
KPX egrave v -30
KPX egrave w -20
KPX egrave x -30
KPX egrave y -20
KPX egrave yacute -20
KPX egrave ydieresis -20
KPX emacron comma -15
KPX emacron period -15
KPX emacron v -30
KPX emacron w -20
KPX emacron x -30
KPX emacron y -20
KPX emacron yacute -20
KPX emacron ydieresis -20
KPX eogonek comma -15
KPX eogonek period -15
KPX eogonek v -30
KPX eogonek w -20
KPX eogonek x -30
KPX eogonek y -20
KPX eogonek yacute -20
KPX eogonek ydieresis -20
KPX f a -30
KPX f aacute -30
KPX f abreve -30
KPX f acircumflex -30
KPX f adieresis -30
KPX f agrave -30
KPX f amacron -30
KPX f aogonek -30
KPX f aring -30
KPX f atilde -30
KPX f comma -30
KPX f dotlessi -28
KPX f e -30
KPX f eacute -30
KPX f ecaron -30
KPX f ecircumflex -30
KPX f edieresis -30
KPX f edotaccent -30
KPX f egrave -30
KPX f emacron -30
KPX f eogonek -30
KPX f o -30
KPX f oacute -30
KPX f ocircumflex -30
KPX f odieresis -30
KPX f ograve -30
KPX f ohungarumlaut -30
KPX f omacron -30
KPX f oslash -30
KPX f otilde -30
KPX f period -30
KPX f quotedblright 60
KPX f quoteright 50
KPX g r -10
KPX g racute -10
KPX g rcaron -10
KPX g rcommaaccent -10
KPX gbreve r -10
KPX gbreve racute -10
KPX gbreve rcaron -10
KPX gbreve rcommaaccent -10
KPX gcommaaccent r -10
KPX gcommaaccent racute -10
KPX gcommaaccent rcaron -10
KPX gcommaaccent rcommaaccent -10
KPX h y -30
KPX h yacute -30
KPX h ydieresis -30
KPX k e -20
KPX k eacute -20
KPX k ecaron -20
KPX k ecircumflex -20
KPX k edieresis -20
KPX k edotaccent -20
KPX k egrave -20
KPX k emacron -20
KPX k eogonek -20
KPX k o -20
KPX k oacute -20
KPX k ocircumflex -20
KPX k odieresis -20
KPX k ograve -20
KPX k ohungarumlaut -20
KPX k omacron -20
KPX k oslash -20
KPX k otilde -20
KPX kcommaaccent e -20
KPX kcommaaccent eacute -20
KPX kcommaaccent ecaron -20
KPX kcommaaccent ecircumflex -20
KPX kcommaaccent edieresis -20
KPX kcommaaccent edotaccent -20
KPX kcommaaccent egrave -20
KPX kcommaaccent emacron -20
KPX kcommaaccent eogonek -20
KPX kcommaaccent o -20
KPX kcommaaccent oacute -20
KPX kcommaaccent ocircumflex -20
KPX kcommaaccent odieresis -20
KPX kcommaaccent ograve -20
KPX kcommaaccent ohungarumlaut -20
KPX kcommaaccent omacron -20
KPX kcommaaccent oslash -20
KPX kcommaaccent otilde -20
KPX m u -10
KPX m uacute -10
KPX m ucircumflex -10
KPX m udieresis -10
KPX m ugrave -10
KPX m uhungarumlaut -10
KPX m umacron -10
KPX m uogonek -10
KPX m uring -10
KPX m y -15
KPX m yacute -15
KPX m ydieresis -15
KPX n u -10
KPX n uacute -10
KPX n ucircumflex -10
KPX n udieresis -10
KPX n ugrave -10
KPX n uhungarumlaut -10
KPX n umacron -10
KPX n uogonek -10
KPX n uring -10
KPX n v -20
KPX n y -15
KPX n yacute -15
KPX n ydieresis -15
KPX nacute u -10
KPX nacute uacute -10
KPX nacute ucircumflex -10
KPX nacute udieresis -10
KPX nacute ugrave -10
KPX nacute uhungarumlaut -10
KPX nacute umacron -10
KPX nacute uogonek -10
KPX nacute uring -10
KPX nacute v -20
KPX nacute y -15
KPX nacute yacute -15
KPX nacute ydieresis -15
KPX ncaron u -10
KPX ncaron uacute -10
KPX ncaron ucircumflex -10
KPX ncaron udieresis -10
KPX ncaron ugrave -10
KPX ncaron uhungarumlaut -10
KPX ncaron umacron -10
KPX ncaron uogonek -10
KPX ncaron uring -10
KPX ncaron v -20
KPX ncaron y -15
KPX ncaron yacute -15
KPX ncaron ydieresis -15
KPX ncommaaccent u -10
KPX ncommaaccent uacute -10
KPX ncommaaccent ucircumflex -10
KPX ncommaaccent udieresis -10
KPX ncommaaccent ugrave -10
KPX ncommaaccent uhungarumlaut -10
KPX ncommaaccent umacron -10
KPX ncommaaccent uogonek -10
KPX ncommaaccent uring -10
KPX ncommaaccent v -20
KPX ncommaaccent y -15
KPX ncommaaccent yacute -15
KPX ncommaaccent ydieresis -15
KPX ntilde u -10
KPX ntilde uacute -10
KPX ntilde ucircumflex -10
KPX ntilde udieresis -10
KPX ntilde ugrave -10
KPX ntilde uhungarumlaut -10
KPX ntilde umacron -10
KPX ntilde uogonek -10
KPX ntilde uring -10
KPX ntilde v -20
KPX ntilde y -15
KPX ntilde yacute -15
KPX ntilde ydieresis -15
KPX o comma -40
KPX o period -40
KPX o v -15
KPX o w -15
KPX o x -30
KPX o y -30
KPX o yacute -30
KPX o ydieresis -30
KPX oacute comma -40
KPX oacute period -40
KPX oacute v -15
KPX oacute w -15
KPX oacute x -30
KPX oacute y -30
KPX oacute yacute -30
KPX oacute ydieresis -30
KPX ocircumflex comma -40
KPX ocircumflex period -40
KPX ocircumflex v -15
KPX ocircumflex w -15
KPX ocircumflex x -30
KPX ocircumflex y -30
KPX ocircumflex yacute -30
KPX ocircumflex ydieresis -30
KPX odieresis comma -40
KPX odieresis period -40
KPX odieresis v -15
KPX odieresis w -15
KPX odieresis x -30
KPX odieresis y -30
KPX odieresis yacute -30
KPX odieresis ydieresis -30
KPX ograve comma -40
KPX ograve period -40
KPX ograve v -15
KPX ograve w -15
KPX ograve x -30
KPX ograve y -30
KPX ograve yacute -30
KPX ograve ydieresis -30
KPX ohungarumlaut comma -40
KPX ohungarumlaut period -40
KPX ohungarumlaut v -15
KPX ohungarumlaut w -15
KPX ohungarumlaut x -30
KPX ohungarumlaut y -30
KPX ohungarumlaut yacute -30
KPX ohungarumlaut ydieresis -30
KPX omacron comma -40
KPX omacron period -40
KPX omacron v -15
KPX omacron w -15
KPX omacron x -30
KPX omacron y -30
KPX omacron yacute -30
KPX omacron ydieresis -30
KPX oslash a -55
KPX oslash aacute -55
KPX oslash abreve -55
KPX oslash acircumflex -55
KPX oslash adieresis -55
KPX oslash agrave -55
KPX oslash amacron -55
KPX oslash aogonek -55
KPX oslash aring -55
KPX oslash atilde -55
KPX oslash b -55
KPX oslash c -55
KPX oslash cacute -55
KPX oslash ccaron -55
KPX oslash ccedilla -55
KPX oslash comma -95
KPX oslash d -55
KPX oslash dcroat -55
KPX oslash e -55
KPX oslash eacute -55
KPX oslash ecaron -55
KPX oslash ecircumflex -55
KPX oslash edieresis -55
KPX oslash edotaccent -55
KPX oslash egrave -55
KPX oslash emacron -55
KPX oslash eogonek -55
KPX oslash f -55
KPX oslash g -55
KPX oslash gbreve -55
KPX oslash gcommaaccent -55
KPX oslash h -55
KPX oslash i -55
KPX oslash iacute -55
KPX oslash icircumflex -55
KPX oslash idieresis -55
KPX oslash igrave -55
KPX oslash imacron -55
KPX oslash iogonek -55
KPX oslash j -55
KPX oslash k -55
KPX oslash kcommaaccent -55
KPX oslash l -55
KPX oslash lacute -55
KPX oslash lcommaaccent -55
KPX oslash lslash -55
KPX oslash m -55
KPX oslash n -55
KPX oslash nacute -55
KPX oslash ncaron -55
KPX oslash ncommaaccent -55
KPX oslash ntilde -55
KPX oslash o -55
KPX oslash oacute -55
KPX oslash ocircumflex -55
KPX oslash odieresis -55
KPX oslash ograve -55
KPX oslash ohungarumlaut -55
KPX oslash omacron -55
KPX oslash oslash -55
KPX oslash otilde -55
KPX oslash p -55
KPX oslash period -95
KPX oslash q -55
KPX oslash r -55
KPX oslash racute -55
KPX oslash rcaron -55
KPX oslash rcommaaccent -55
KPX oslash s -55
KPX oslash sacute -55
KPX oslash scaron -55
KPX oslash scedilla -55
KPX oslash scommaaccent -55
KPX oslash t -55
KPX oslash tcommaaccent -55
KPX oslash u -55
KPX oslash uacute -55
KPX oslash ucircumflex -55
KPX oslash udieresis -55
KPX oslash ugrave -55
KPX oslash uhungarumlaut -55
KPX oslash umacron -55
KPX oslash uogonek -55
KPX oslash uring -55
KPX oslash v -70
KPX oslash w -70
KPX oslash x -85
KPX oslash y -70
KPX oslash yacute -70
KPX oslash ydieresis -70
KPX oslash z -55
KPX oslash zacute -55
KPX oslash zcaron -55
KPX oslash zdotaccent -55
KPX otilde comma -40
KPX otilde period -40
KPX otilde v -15
KPX otilde w -15
KPX otilde x -30
KPX otilde y -30
KPX otilde yacute -30
KPX otilde ydieresis -30
KPX p comma -35
KPX p period -35
KPX p y -30
KPX p yacute -30
KPX p ydieresis -30
KPX period quotedblright -100
KPX period quoteright -100
KPX period space -60
KPX quotedblright space -40
KPX quoteleft quoteleft -57
KPX quoteright d -50
KPX quoteright dcroat -50
KPX quoteright quoteright -57
KPX quoteright r -50
KPX quoteright racute -50
KPX quoteright rcaron -50
KPX quoteright rcommaaccent -50
KPX quoteright s -50
KPX quoteright sacute -50
KPX quoteright scaron -50
KPX quoteright scedilla -50
KPX quoteright scommaaccent -50
KPX quoteright space -70
KPX r a -10
KPX r aacute -10
KPX r abreve -10
KPX r acircumflex -10
KPX r adieresis -10
KPX r agrave -10
KPX r amacron -10
KPX r aogonek -10
KPX r aring -10
KPX r atilde -10
KPX r colon 30
KPX r comma -50
KPX r i 15
KPX r iacute 15
KPX r icircumflex 15
KPX r idieresis 15
KPX r igrave 15
KPX r imacron 15
KPX r iogonek 15
KPX r k 15
KPX r kcommaaccent 15
KPX r l 15
KPX r lacute 15
KPX r lcommaaccent 15
KPX r lslash 15
KPX r m 25
KPX r n 25
KPX r nacute 25
KPX r ncaron 25
KPX r ncommaaccent 25
KPX r ntilde 25
KPX r p 30
KPX r period -50
KPX r semicolon 30
KPX r t 40
KPX r tcommaaccent 40
KPX r u 15
KPX r uacute 15
KPX r ucircumflex 15
KPX r udieresis 15
KPX r ugrave 15
KPX r uhungarumlaut 15
KPX r umacron 15
KPX r uogonek 15
KPX r uring 15
KPX r v 30
KPX r y 30
KPX r yacute 30
KPX r ydieresis 30
KPX racute a -10
KPX racute aacute -10
KPX racute abreve -10
KPX racute acircumflex -10
KPX racute adieresis -10
KPX racute agrave -10
KPX racute amacron -10
KPX racute aogonek -10
KPX racute aring -10
KPX racute atilde -10
KPX racute colon 30
KPX racute comma -50
KPX racute i 15
KPX racute iacute 15
KPX racute icircumflex 15
KPX racute idieresis 15
KPX racute igrave 15
KPX racute imacron 15
KPX racute iogonek 15
KPX racute k 15
KPX racute kcommaaccent 15
KPX racute l 15
KPX racute lacute 15
KPX racute lcommaaccent 15
KPX racute lslash 15
KPX racute m 25
KPX racute n 25
KPX racute nacute 25
KPX racute ncaron 25
KPX racute ncommaaccent 25
KPX racute ntilde 25
KPX racute p 30
KPX racute period -50
KPX racute semicolon 30
KPX racute t 40
KPX racute tcommaaccent 40
KPX racute u 15
KPX racute uacute 15
KPX racute ucircumflex 15
KPX racute udieresis 15
KPX racute ugrave 15
KPX racute uhungarumlaut 15
KPX racute umacron 15
KPX racute uogonek 15
KPX racute uring 15
KPX racute v 30
KPX racute y 30
KPX racute yacute 30
KPX racute ydieresis 30
KPX rcaron a -10
KPX rcaron aacute -10
KPX rcaron abreve -10
KPX rcaron acircumflex -10
KPX rcaron adieresis -10
KPX rcaron agrave -10
KPX rcaron amacron -10
KPX rcaron aogonek -10
KPX rcaron aring -10
KPX rcaron atilde -10
KPX rcaron colon 30
KPX rcaron comma -50
KPX rcaron i 15
KPX rcaron iacute 15
KPX rcaron icircumflex 15
KPX rcaron idieresis 15
KPX rcaron igrave 15
KPX rcaron imacron 15
KPX rcaron iogonek 15
KPX rcaron k 15
KPX rcaron kcommaaccent 15
KPX rcaron l 15
KPX rcaron lacute 15
KPX rcaron lcommaaccent 15
KPX rcaron lslash 15
KPX rcaron m 25
KPX rcaron n 25
KPX rcaron nacute 25
KPX rcaron ncaron 25
KPX rcaron ncommaaccent 25
KPX rcaron ntilde 25
KPX rcaron p 30
KPX rcaron period -50
KPX rcaron semicolon 30
KPX rcaron t 40
KPX rcaron tcommaaccent 40
KPX rcaron u 15
KPX rcaron uacute 15
KPX rcaron ucircumflex 15
KPX rcaron udieresis 15
KPX rcaron ugrave 15
KPX rcaron uhungarumlaut 15
KPX rcaron umacron 15
KPX rcaron uogonek 15
KPX rcaron uring 15
KPX rcaron v 30
KPX rcaron y 30
KPX rcaron yacute 30
KPX rcaron ydieresis 30
KPX rcommaaccent a -10
KPX rcommaaccent aacute -10
KPX rcommaaccent abreve -10
KPX rcommaaccent acircumflex -10
KPX rcommaaccent adieresis -10
KPX rcommaaccent agrave -10
KPX rcommaaccent amacron -10
KPX rcommaaccent aogonek -10
KPX rcommaaccent aring -10
KPX rcommaaccent atilde -10
KPX rcommaaccent colon 30
KPX rcommaaccent comma -50
KPX rcommaaccent i 15
KPX rcommaaccent iacute 15
KPX rcommaaccent icircumflex 15
KPX rcommaaccent idieresis 15
KPX rcommaaccent igrave 15
KPX rcommaaccent imacron 15
KPX rcommaaccent iogonek 15
KPX rcommaaccent k 15
KPX rcommaaccent kcommaaccent 15
KPX rcommaaccent l 15
KPX rcommaaccent lacute 15
KPX rcommaaccent lcommaaccent 15
KPX rcommaaccent lslash 15
KPX rcommaaccent m 25
KPX rcommaaccent n 25
KPX rcommaaccent nacute 25
KPX rcommaaccent ncaron 25
KPX rcommaaccent ncommaaccent 25
KPX rcommaaccent ntilde 25
KPX rcommaaccent p 30
KPX rcommaaccent period -50
KPX rcommaaccent semicolon 30
KPX rcommaaccent t 40
KPX rcommaaccent tcommaaccent 40
KPX rcommaaccent u 15
KPX rcommaaccent uacute 15
KPX rcommaaccent ucircumflex 15
KPX rcommaaccent udieresis 15
KPX rcommaaccent ugrave 15
KPX rcommaaccent uhungarumlaut 15
KPX rcommaaccent umacron 15
KPX rcommaaccent uogonek 15
KPX rcommaaccent uring 15
KPX rcommaaccent v 30
KPX rcommaaccent y 30
KPX rcommaaccent yacute 30
KPX rcommaaccent ydieresis 30
KPX s comma -15
KPX s period -15
KPX s w -30
KPX sacute comma -15
KPX sacute period -15
KPX sacute w -30
KPX scaron comma -15
KPX scaron period -15
KPX scaron w -30
KPX scedilla comma -15
KPX scedilla period -15
KPX scedilla w -30
KPX scommaaccent comma -15
KPX scommaaccent period -15
KPX scommaaccent w -30
KPX semicolon space -50
KPX space T -50
KPX space Tcaron -50
KPX space Tcommaaccent -50
KPX space V -50
KPX space W -40
KPX space Y -90
KPX space Yacute -90
KPX space Ydieresis -90
KPX space quotedblleft -30
KPX space quoteleft -60
KPX v a -25
KPX v aacute -25
KPX v abreve -25
KPX v acircumflex -25
KPX v adieresis -25
KPX v agrave -25
KPX v amacron -25
KPX v aogonek -25
KPX v aring -25
KPX v atilde -25
KPX v comma -80
KPX v e -25
KPX v eacute -25
KPX v ecaron -25
KPX v ecircumflex -25
KPX v edieresis -25
KPX v edotaccent -25
KPX v egrave -25
KPX v emacron -25
KPX v eogonek -25
KPX v o -25
KPX v oacute -25
KPX v ocircumflex -25
KPX v odieresis -25
KPX v ograve -25
KPX v ohungarumlaut -25
KPX v omacron -25
KPX v oslash -25
KPX v otilde -25
KPX v period -80
KPX w a -15
KPX w aacute -15
KPX w abreve -15
KPX w acircumflex -15
KPX w adieresis -15
KPX w agrave -15
KPX w amacron -15
KPX w aogonek -15
KPX w aring -15
KPX w atilde -15
KPX w comma -60
KPX w e -10
KPX w eacute -10
KPX w ecaron -10
KPX w ecircumflex -10
KPX w edieresis -10
KPX w edotaccent -10
KPX w egrave -10
KPX w emacron -10
KPX w eogonek -10
KPX w o -10
KPX w oacute -10
KPX w ocircumflex -10
KPX w odieresis -10
KPX w ograve -10
KPX w ohungarumlaut -10
KPX w omacron -10
KPX w oslash -10
KPX w otilde -10
KPX w period -60
KPX x e -30
KPX x eacute -30
KPX x ecaron -30
KPX x ecircumflex -30
KPX x edieresis -30
KPX x edotaccent -30
KPX x egrave -30
KPX x emacron -30
KPX x eogonek -30
KPX y a -20
KPX y aacute -20
KPX y abreve -20
KPX y acircumflex -20
KPX y adieresis -20
KPX y agrave -20
KPX y amacron -20
KPX y aogonek -20
KPX y aring -20
KPX y atilde -20
KPX y comma -100
KPX y e -20
KPX y eacute -20
KPX y ecaron -20
KPX y ecircumflex -20
KPX y edieresis -20
KPX y edotaccent -20
KPX y egrave -20
KPX y emacron -20
KPX y eogonek -20
KPX y o -20
KPX y oacute -20
KPX y ocircumflex -20
KPX y odieresis -20
KPX y ograve -20
KPX y ohungarumlaut -20
KPX y omacron -20
KPX y oslash -20
KPX y otilde -20
KPX y period -100
KPX yacute a -20
KPX yacute aacute -20
KPX yacute abreve -20
KPX yacute acircumflex -20
KPX yacute adieresis -20
KPX yacute agrave -20
KPX yacute amacron -20
KPX yacute aogonek -20
KPX yacute aring -20
KPX yacute atilde -20
KPX yacute comma -100
KPX yacute e -20
KPX yacute eacute -20
KPX yacute ecaron -20
KPX yacute ecircumflex -20
KPX yacute edieresis -20
KPX yacute edotaccent -20
KPX yacute egrave -20
KPX yacute emacron -20
KPX yacute eogonek -20
KPX yacute o -20
KPX yacute oacute -20
KPX yacute ocircumflex -20
KPX yacute odieresis -20
KPX yacute ograve -20
KPX yacute ohungarumlaut -20
KPX yacute omacron -20
KPX yacute oslash -20
KPX yacute otilde -20
KPX yacute period -100
KPX ydieresis a -20
KPX ydieresis aacute -20
KPX ydieresis abreve -20
KPX ydieresis acircumflex -20
KPX ydieresis adieresis -20
KPX ydieresis agrave -20
KPX ydieresis amacron -20
KPX ydieresis aogonek -20
KPX ydieresis aring -20
KPX ydieresis atilde -20
KPX ydieresis comma -100
KPX ydieresis e -20
KPX ydieresis eacute -20
KPX ydieresis ecaron -20
KPX ydieresis ecircumflex -20
KPX ydieresis edieresis -20
KPX ydieresis edotaccent -20
KPX ydieresis egrave -20
KPX ydieresis emacron -20
KPX ydieresis eogonek -20
KPX ydieresis o -20
KPX ydieresis oacute -20
KPX ydieresis ocircumflex -20
KPX ydieresis odieresis -20
KPX ydieresis ograve -20
KPX ydieresis ohungarumlaut -20
KPX ydieresis omacron -20
KPX ydieresis oslash -20
KPX ydieresis otilde -20
KPX ydieresis period -100
KPX z e -15
KPX z eacute -15
KPX z ecaron -15
KPX z ecircumflex -15
KPX z edieresis -15
KPX z edotaccent -15
KPX z egrave -15
KPX z emacron -15
KPX z eogonek -15
KPX z o -15
KPX z oacute -15
KPX z ocircumflex -15
KPX z odieresis -15
KPX z ograve -15
KPX z ohungarumlaut -15
KPX z omacron -15
KPX z oslash -15
KPX z otilde -15
KPX zacute e -15
KPX zacute eacute -15
KPX zacute ecaron -15
KPX zacute ecircumflex -15
KPX zacute edieresis -15
KPX zacute edotaccent -15
KPX zacute egrave -15
KPX zacute emacron -15
KPX zacute eogonek -15
KPX zacute o -15
KPX zacute oacute -15
KPX zacute ocircumflex -15
KPX zacute odieresis -15
KPX zacute ograve -15
KPX zacute ohungarumlaut -15
KPX zacute omacron -15
KPX zacute oslash -15
KPX zacute otilde -15
KPX zcaron e -15
KPX zcaron eacute -15
KPX zcaron ecaron -15
KPX zcaron ecircumflex -15
KPX zcaron edieresis -15
KPX zcaron edotaccent -15
KPX zcaron egrave -15
KPX zcaron emacron -15
KPX zcaron eogonek -15
KPX zcaron o -15
KPX zcaron oacute -15
KPX zcaron ocircumflex -15
KPX zcaron odieresis -15
KPX zcaron ograve -15
KPX zcaron ohungarumlaut -15
KPX zcaron omacron -15
KPX zcaron oslash -15
KPX zcaron otilde -15
KPX zdotaccent e -15
KPX zdotaccent eacute -15
KPX zdotaccent ecaron -15
KPX zdotaccent ecircumflex -15
KPX zdotaccent edieresis -15
KPX zdotaccent edotaccent -15
KPX zdotaccent egrave -15
KPX zdotaccent emacron -15
KPX zdotaccent eogonek -15
KPX zdotaccent o -15
KPX zdotaccent oacute -15
KPX zdotaccent ocircumflex -15
KPX zdotaccent odieresis -15
KPX zdotaccent ograve -15
KPX zdotaccent ohungarumlaut -15
KPX zdotaccent omacron -15
KPX zdotaccent oslash -15
KPX zdotaccent otilde -15
EndKernPairs
EndKernData
EndFontMetrics
StartFontMetrics 4.1
Comment Copyright (c) 1985, 1987, 1989, 1990, 1997 Adobe Systems Incorporated. All rights reserved.
Comment Creation Date: Thu May  1 15:12:25 1997
Comment UniqueID 43064
Comment VMusage 30820 39997
FontName Symbol
FullName Symbol
FamilyName Symbol
Weight Medium
ItalicAngle 0
IsFixedPitch false
CharacterSet Special
FontBBox -180 -293 1090 1010 
UnderlinePosition -100
UnderlineThickness 50
Version 001.008
Notice Copyright (c) 1985, 1987, 1989, 1990, 1997 Adobe Systems Incorporated. All rights reserved.
EncodingScheme FontSpecific
StdHW 92
StdVW 85
StartCharMetrics 190
C 32 ; WX 250 ; N space ; B 0 0 0 0 ;
C 33 ; WX 333 ; N exclam ; B 128 -17 240 672 ;
C 34 ; WX 713 ; N universal ; B 31 0 681 705 ;
C 35 ; WX 500 ; N numbersign ; B 20 -16 481 673 ;
C 36 ; WX 549 ; N existential ; B 25 0 478 707 ;
C 37 ; WX 833 ; N percent ; B 63 -36 771 655 ;
C 38 ; WX 778 ; N ampersand ; B 41 -18 750 661 ;
C 39 ; WX 439 ; N suchthat ; B 48 -17 414 500 ;
C 40 ; WX 333 ; N parenleft ; B 53 -191 300 673 ;
C 41 ; WX 333 ; N parenright ; B 30 -191 277 673 ;
C 42 ; WX 500 ; N asteriskmath ; B 65 134 427 551 ;
C 43 ; WX 549 ; N plus ; B 10 0 539 533 ;
C 44 ; WX 250 ; N comma ; B 56 -152 194 104 ;
C 45 ; WX 549 ; N minus ; B 11 233 535 288 ;
C 46 ; WX 250 ; N period ; B 69 -17 181 95 ;
C 47 ; WX 278 ; N slash ; B 0 -18 254 646 ;
C 48 ; WX 500 ; N zero ; B 24 -14 476 685 ;
C 49 ; WX 500 ; N one ; B 117 0 390 673 ;
C 50 ; WX 500 ; N two ; B 25 0 475 685 ;
C 51 ; WX 500 ; N three ; B 43 -14 435 685 ;
C 52 ; WX 500 ; N four ; B 15 0 469 685 ;
C 53 ; WX 500 ; N five ; B 32 -14 445 690 ;
C 54 ; WX 500 ; N six ; B 34 -14 468 685 ;
C 55 ; WX 500 ; N seven ; B 24 -16 448 673 ;
C 56 ; WX 500 ; N eight ; B 56 -14 445 685 ;
C 57 ; WX 500 ; N nine ; B 30 -18 459 685 ;
C 58 ; WX 278 ; N colon ; B 81 -17 193 460 ;
C 59 ; WX 278 ; N semicolon ; B 83 -152 221 460 ;
C 60 ; WX 549 ; N less ; B 26 0 523 522 ;
C 61 ; WX 549 ; N equal ; B 11 141 537 390 ;
C 62 ; WX 549 ; N greater ; B 26 0 523 522 ;
C 63 ; WX 444 ; N question ; B 70 -17 412 686 ;
C 64 ; WX 549 ; N congruent ; B 11 0 537 475 ;
C 65 ; WX 722 ; N Alpha ; B 4 0 684 673 ;
C 66 ; WX 667 ; N Beta ; B 29 0 592 673 ;
C 67 ; WX 722 ; N Chi ; B -9 0 704 673 ;
C 68 ; WX 612 ; N Delta ; B 6 0 608 688 ;
C 69 ; WX 611 ; N Epsilon ; B 32 0 617 673 ;
C 70 ; WX 763 ; N Phi ; B 26 0 741 673 ;
C 71 ; WX 603 ; N Gamma ; B 24 0 609 673 ;
C 72 ; WX 722 ; N Eta ; B 39 0 729 673 ;
C 73 ; WX 333 ; N Iota ; B 32 0 316 673 ;
C 74 ; WX 631 ; N theta1 ; B 18 -18 623 689 ;
C 75 ; WX 722 ; N Kappa ; B 35 0 722 673 ;
C 76 ; WX 686 ; N Lambda ; B 6 0 680 688 ;
C 77 ; WX 889 ; N Mu ; B 28 0 887 673 ;
C 78 ; WX 722 ; N Nu ; B 29 -8 720 673 ;
C 79 ; WX 722 ; N Omicron ; B 41 -17 715 685 ;
C 80 ; WX 768 ; N Pi ; B 25 0 745 673 ;
C 81 ; WX 741 ; N Theta ; B 41 -17 715 685 ;
C 82 ; WX 556 ; N Rho ; B 28 0 563 673 ;
C 83 ; WX 592 ; N Sigma ; B 5 0 589 673 ;
C 84 ; WX 611 ; N Tau ; B 33 0 607 673 ;
C 85 ; WX 690 ; N Upsilon ; B -8 0 694 673 ;
C 86 ; WX 439 ; N sigma1 ; B 40 -233 436 500 ;
C 87 ; WX 768 ; N Omega ; B 34 0 736 688 ;
C 88 ; WX 645 ; N Xi ; B 40 0 599 673 ;
C 89 ; WX 795 ; N Psi ; B 15 0 781 684 ;
C 90 ; WX 611 ; N Zeta ; B 44 0 636 673 ;
C 91 ; WX 333 ; N bracketleft ; B 86 -155 299 674 ;
C 92 ; WX 863 ; N therefore ; B 163 0 701 487 ;
C 93 ; WX 333 ; N bracketright ; B 33 -155 246 674 ;
C 94 ; WX 658 ; N perpendicular ; B 15 0 652 674 ;
C 95 ; WX 500 ; N underscore ; B -2 -125 502 -75 ;
C 96 ; WX 500 ; N radicalex ; B 480 881 1090 917 ;
C 97 ; WX 631 ; N alpha ; B 41 -18 622 500 ;
C 98 ; WX 549 ; N beta ; B 61 -223 515 741 ;
C 99 ; WX 549 ; N chi ; B 12 -231 522 499 ;
C 100 ; WX 494 ; N delta ; B 40 -19 481 740 ;
C 101 ; WX 439 ; N epsilon ; B 22 -19 427 502 ;
C 102 ; WX 521 ; N phi ; B 28 -224 492 673 ;
C 103 ; WX 411 ; N gamma ; B 5 -225 484 499 ;
C 104 ; WX 603 ; N eta ; B 0 -202 527 514 ;
C 105 ; WX 329 ; N iota ; B 0 -17 301 503 ;
C 106 ; WX 603 ; N phi1 ; B 36 -224 587 499 ;
C 107 ; WX 549 ; N kappa ; B 33 0 558 501 ;
C 108 ; WX 549 ; N lambda ; B 24 -17 548 739 ;
C 109 ; WX 576 ; N mu ; B 33 -223 567 500 ;
C 110 ; WX 521 ; N nu ; B -9 -16 475 507 ;
C 111 ; WX 549 ; N omicron ; B 35 -19 501 499 ;
C 112 ; WX 549 ; N pi ; B 10 -19 530 487 ;
C 113 ; WX 521 ; N theta ; B 43 -17 485 690 ;
C 114 ; WX 549 ; N rho ; B 50 -230 490 499 ;
C 115 ; WX 603 ; N sigma ; B 30 -21 588 500 ;
C 116 ; WX 439 ; N tau ; B 10 -19 418 500 ;
C 117 ; WX 576 ; N upsilon ; B 7 -18 535 507 ;
C 118 ; WX 713 ; N omega1 ; B 12 -18 671 583 ;
C 119 ; WX 686 ; N omega ; B 42 -17 684 500 ;
C 120 ; WX 493 ; N xi ; B 27 -224 469 766 ;
C 121 ; WX 686 ; N psi ; B 12 -228 701 500 ;
C 122 ; WX 494 ; N zeta ; B 60 -225 467 756 ;
C 123 ; WX 480 ; N braceleft ; B 58 -183 397 673 ;
C 124 ; WX 200 ; N bar ; B 65 -293 135 707 ;
C 125 ; WX 480 ; N braceright ; B 79 -183 418 673 ;
C 126 ; WX 549 ; N similar ; B 17 203 529 307 ;
C 160 ; WX 750 ; N Euro ; B 20 -12 714 685 ;
C 161 ; WX 620 ; N Upsilon1 ; B -2 0 610 685 ;
C 162 ; WX 247 ; N minute ; B 27 459 228 735 ;
C 163 ; WX 549 ; N lessequal ; B 29 0 526 639 ;
C 164 ; WX 167 ; N fraction ; B -180 -12 340 677 ;
C 165 ; WX 713 ; N infinity ; B 26 124 688 404 ;
C 166 ; WX 500 ; N florin ; B 2 -193 494 686 ;
C 167 ; WX 753 ; N club ; B 86 -26 660 533 ;
C 168 ; WX 753 ; N diamond ; B 142 -36 600 550 ;
C 169 ; WX 753 ; N heart ; B 117 -33 631 532 ;
C 170 ; WX 753 ; N spade ; B 113 -36 629 548 ;
C 171 ; WX 1042 ; N arrowboth ; B 24 -15 1024 511 ;
C 172 ; WX 987 ; N arrowleft ; B 32 -15 942 511 ;
C 173 ; WX 603 ; N arrowup ; B 45 0 571 910 ;
C 174 ; WX 987 ; N arrowright ; B 49 -15 959 511 ;
C 175 ; WX 603 ; N arrowdown ; B 45 -22 571 888 ;
C 176 ; WX 400 ; N degree ; B 50 385 350 685 ;
C 177 ; WX 549 ; N plusminus ; B 10 0 539 645 ;
C 178 ; WX 411 ; N second ; B 20 459 413 737 ;
C 179 ; WX 549 ; N greaterequal ; B 29 0 526 639 ;
C 180 ; WX 549 ; N multiply ; B 17 8 533 524 ;
C 181 ; WX 713 ; N proportional ; B 27 123 639 404 ;
C 182 ; WX 494 ; N partialdiff ; B 26 -20 462 746 ;
C 183 ; WX 460 ; N bullet ; B 50 113 410 473 ;
C 184 ; WX 549 ; N divide ; B 10 71 536 456 ;
C 185 ; WX 549 ; N notequal ; B 15 -25 540 549 ;
C 186 ; WX 549 ; N equivalence ; B 14 82 538 443 ;
C 187 ; WX 549 ; N approxequal ; B 14 135 527 394 ;
C 188 ; WX 1000 ; N ellipsis ; B 111 -17 889 95 ;
C 189 ; WX 603 ; N arrowvertex ; B 280 -120 336 1010 ;
C 190 ; WX 1000 ; N arrowhorizex ; B -60 220 1050 276 ;
C 191 ; WX 658 ; N carriagereturn ; B 15 -16 602 629 ;
C 192 ; WX 823 ; N aleph ; B 175 -18 661 658 ;
C 193 ; WX 686 ; N Ifraktur ; B 10 -53 578 740 ;
C 194 ; WX 795 ; N Rfraktur ; B 26 -15 759 734 ;
C 195 ; WX 987 ; N weierstrass ; B 159 -211 870 573 ;
C 196 ; WX 768 ; N circlemultiply ; B 43 -17 733 673 ;
C 197 ; WX 768 ; N circleplus ; B 43 -15 733 675 ;
C 198 ; WX 823 ; N emptyset ; B 39 -24 781 719 ;
C 199 ; WX 768 ; N intersection ; B 40 0 732 509 ;
C 200 ; WX 768 ; N union ; B 40 -17 732 492 ;
C 201 ; WX 713 ; N propersuperset ; B 20 0 673 470 ;
C 202 ; WX 713 ; N reflexsuperset ; B 20 -125 673 470 ;
C 203 ; WX 713 ; N notsubset ; B 36 -70 690 540 ;
C 204 ; WX 713 ; N propersubset ; B 37 0 690 470 ;
C 205 ; WX 713 ; N reflexsubset ; B 37 -125 690 470 ;
C 206 ; WX 713 ; N element ; B 45 0 505 468 ;
C 207 ; WX 713 ; N notelement ; B 45 -58 505 555 ;
C 208 ; WX 768 ; N angle ; B 26 0 738 673 ;
C 209 ; WX 713 ; N gradient ; B 36 -19 681 718 ;
C 210 ; WX 790 ; N registerserif ; B 50 -17 740 673 ;
C 211 ; WX 790 ; N copyrightserif ; B 51 -15 741 675 ;
C 212 ; WX 890 ; N trademarkserif ; B 18 293 855 673 ;
C 213 ; WX 823 ; N product ; B 25 -101 803 751 ;
C 214 ; WX 549 ; N radical ; B 10 -38 515 917 ;
C 215 ; WX 250 ; N dotmath ; B 69 210 169 310 ;
C 216 ; WX 713 ; N logicalnot ; B 15 0 680 288 ;
C 217 ; WX 603 ; N logicaland ; B 23 0 583 454 ;
C 218 ; WX 603 ; N logicalor ; B 30 0 578 477 ;
C 219 ; WX 1042 ; N arrowdblboth ; B 27 -20 1023 510 ;
C 220 ; WX 987 ; N arrowdblleft ; B 30 -15 939 513 ;
C 221 ; WX 603 ; N arrowdblup ; B 39 2 567 911 ;
C 222 ; WX 987 ; N arrowdblright ; B 45 -20 954 508 ;
C 223 ; WX 603 ; N arrowdbldown ; B 44 -19 572 890 ;
C 224 ; WX 494 ; N lozenge ; B 18 0 466 745 ;
C 225 ; WX 329 ; N angleleft ; B 25 -198 306 746 ;
C 226 ; WX 790 ; N registersans ; B 50 -20 740 670 ;
C 227 ; WX 790 ; N copyrightsans ; B 49 -15 739 675 ;
C 228 ; WX 786 ; N trademarksans ; B 5 293 725 673 ;
C 229 ; WX 713 ; N summation ; B 14 -108 695 752 ;
C 230 ; WX 384 ; N parenlefttp ; B 24 -293 436 926 ;
C 231 ; WX 384 ; N parenleftex ; B 24 -85 108 925 ;
C 232 ; WX 384 ; N parenleftbt ; B 24 -293 436 926 ;
C 233 ; WX 384 ; N bracketlefttp ; B 0 -80 349 926 ;
C 234 ; WX 384 ; N bracketleftex ; B 0 -79 77 925 ;
C 235 ; WX 384 ; N bracketleftbt ; B 0 -80 349 926 ;
C 236 ; WX 494 ; N bracelefttp ; B 209 -85 445 925 ;
C 237 ; WX 494 ; N braceleftmid ; B 20 -85 284 935 ;
C 238 ; WX 494 ; N braceleftbt ; B 209 -75 445 935 ;
C 239 ; WX 494 ; N braceex ; B 209 -85 284 935 ;
C 241 ; WX 329 ; N angleright ; B 21 -198 302 746 ;
C 242 ; WX 274 ; N integral ; B 2 -107 291 916 ;
C 243 ; WX 686 ; N integraltp ; B 308 -88 675 920 ;
C 244 ; WX 686 ; N integralex ; B 308 -88 378 975 ;
C 245 ; WX 686 ; N integralbt ; B 11 -87 378 921 ;
C 246 ; WX 384 ; N parenrighttp ; B 54 -293 466 926 ;
C 247 ; WX 384 ; N parenrightex ; B 382 -85 466 925 ;
C 248 ; WX 384 ; N parenrightbt ; B 54 -293 466 926 ;
C 249 ; WX 384 ; N bracketrighttp ; B 22 -80 371 926 ;
C 250 ; WX 384 ; N bracketrightex ; B 294 -79 371 925 ;
C 251 ; WX 384 ; N bracketrightbt ; B 22 -80 371 926 ;
C 252 ; WX 494 ; N bracerighttp ; B 48 -85 284 925 ;
C 253 ; WX 494 ; N bracerightmid ; B 209 -85 473 935 ;
C 254 ; WX 494 ; N bracerightbt ; B 48 -75 284 935 ;
C -1 ; WX 790 ; N apple ; B 56 -3 733 808 ;
EndCharMetrics
EndFontMetrics
StartFontMetrics 4.1
Comment Copyright (c) 1985, 1987, 1989, 1990, 1993, 1997 Adobe Systems Incorporated.  All Rights Reserved.
Comment Creation Date: Thu May  1 12:52:56 1997
Comment UniqueID 43065
Comment VMusage 41636 52661
FontName Times-Bold
FullName Times Bold
FamilyName Times
Weight Bold
ItalicAngle 0
IsFixedPitch false
CharacterSet ExtendedRoman
FontBBox -168 -218 1000 935
UnderlinePosition -100
UnderlineThickness 50
Version 002.000
Notice Copyright (c) 1985, 1987, 1989, 1990, 1993, 1997 Adobe Systems Incorporated.  All Rights Reserved.Times is a trademark of Linotype-Hell AG and/or its subsidiaries.
EncodingScheme WinAnsiEncoding
CapHeight 676
XHeight 461
Ascender 683
Descender -217
StdHW 44
StdVW 139
StartCharMetrics 317
C 32 ; WX 250 ; N space ; B 0 0 0 0 ;
C 160 ; WX 250 ; N space ; B 0 0 0 0 ;
C 33 ; WX 333 ; N exclam ; B 81 -13 251 691 ;
C 34 ; WX 555 ; N quotedbl ; B 83 404 472 691 ;
C 35 ; WX 500 ; N numbersign ; B 4 0 496 700 ;
C 36 ; WX 500 ; N dollar ; B 29 -99 472 750 ;
C 37 ; WX 1000 ; N percent ; B 124 -14 877 692 ;
C 38 ; WX 833 ; N ampersand ; B 62 -16 787 691 ;
C 146 ; WX 333 ; N quoteright ; B 79 356 263 691 ;
C 40 ; WX 333 ; N parenleft ; B 46 -168 306 694 ;
C 41 ; WX 333 ; N parenright ; B 27 -168 287 694 ;
C 42 ; WX 500 ; N asterisk ; B 56 255 447 691 ;
C 43 ; WX 570 ; N plus ; B 33 0 537 506 ;
C 44 ; WX 250 ; N comma ; B 39 -180 223 155 ;
C 45 ; WX 333 ; N hyphen ; B 44 171 287 287 ;
C 173 ; WX 333 ; N hyphen ; B 44 171 287 287 ;
C 46 ; WX 250 ; N period ; B 41 -13 210 156 ;
C 47 ; WX 278 ; N slash ; B -24 -19 302 691 ;
C 48 ; WX 500 ; N zero ; B 24 -13 476 688 ;
C 49 ; WX 500 ; N one ; B 65 0 442 688 ;
C 50 ; WX 500 ; N two ; B 17 0 478 688 ;
C 51 ; WX 500 ; N three ; B 16 -14 468 688 ;
C 52 ; WX 500 ; N four ; B 19 0 475 688 ;
C 53 ; WX 500 ; N five ; B 22 -8 470 676 ;
C 54 ; WX 500 ; N six ; B 28 -13 475 688 ;
C 55 ; WX 500 ; N seven ; B 17 0 477 676 ;
C 56 ; WX 500 ; N eight ; B 28 -13 472 688 ;
C 57 ; WX 500 ; N nine ; B 26 -13 473 688 ;
C 58 ; WX 333 ; N colon ; B 82 -13 251 472 ;
C 59 ; WX 333 ; N semicolon ; B 82 -180 266 472 ;
C 60 ; WX 570 ; N less ; B 31 -8 539 514 ;
C 61 ; WX 570 ; N equal ; B 33 107 537 399 ;
C 62 ; WX 570 ; N greater ; B 31 -8 539 514 ;
C 63 ; WX 500 ; N question ; B 57 -13 445 689 ;
C 64 ; WX 930 ; N at ; B 108 -19 822 691 ;
C 65 ; WX 722 ; N A ; B 9 0 689 690 ;
C 66 ; WX 667 ; N B ; B 16 0 619 676 ;
C 67 ; WX 722 ; N C ; B 49 -19 687 691 ;
C 68 ; WX 722 ; N D ; B 14 0 690 676 ;
C 69 ; WX 667 ; N E ; B 16 0 641 676 ;
C 70 ; WX 611 ; N F ; B 16 0 583 676 ;
C 71 ; WX 778 ; N G ; B 37 -19 755 691 ;
C 72 ; WX 778 ; N H ; B 21 0 759 676 ;
C 73 ; WX 389 ; N I ; B 20 0 370 676 ;
C 74 ; WX 500 ; N J ; B 3 -96 479 676 ;
C 75 ; WX 778 ; N K ; B 30 0 769 676 ;
C 76 ; WX 667 ; N L ; B 19 0 638 676 ;
C 77 ; WX 944 ; N M ; B 14 0 921 676 ;
C 78 ; WX 722 ; N N ; B 16 -18 701 676 ;
C 79 ; WX 778 ; N O ; B 35 -19 743 691 ;
C 80 ; WX 611 ; N P ; B 16 0 600 676 ;
C 81 ; WX 778 ; N Q ; B 35 -176 743 691 ;
C 82 ; WX 722 ; N R ; B 26 0 715 676 ;
C 83 ; WX 556 ; N S ; B 35 -19 513 692 ;
C 84 ; WX 667 ; N T ; B 31 0 636 676 ;
C 85 ; WX 722 ; N U ; B 16 -19 701 676 ;
C 86 ; WX 722 ; N V ; B 16 -18 701 676 ;
C 87 ; WX 1000 ; N W ; B 19 -15 981 676 ;
C 88 ; WX 722 ; N X ; B 16 0 699 676 ;
C 89 ; WX 722 ; N Y ; B 15 0 699 676 ;
C 90 ; WX 667 ; N Z ; B 28 0 634 676 ;
C 91 ; WX 333 ; N bracketleft ; B 67 -149 301 678 ;
C 92 ; WX 278 ; N backslash ; B -25 -19 303 691 ;
C 93 ; WX 333 ; N bracketright ; B 32 -149 266 678 ;
C 94 ; WX 581 ; N asciicircum ; B 73 311 509 676 ;
C 95 ; WX 500 ; N underscore ; B 0 -125 500 -75 ;
C 145 ; WX 333 ; N quoteleft ; B 70 356 254 691 ;
C 97 ; WX 500 ; N a ; B 25 -14 488 473 ;
C 98 ; WX 556 ; N b ; B 17 -14 521 676 ;
C 99 ; WX 444 ; N c ; B 25 -14 430 473 ;
C 100 ; WX 556 ; N d ; B 25 -14 534 676 ;
C 101 ; WX 444 ; N e ; B 25 -14 426 473 ;
C 102 ; WX 333 ; N f ; B 14 0 389 691 ; L i fi ; L l fl ;
C 103 ; WX 500 ; N g ; B 28 -206 483 473 ;
C 104 ; WX 556 ; N h ; B 16 0 534 676 ;
C 105 ; WX 278 ; N i ; B 16 0 255 691 ;
C 106 ; WX 333 ; N j ; B -57 -203 263 691 ;
C 107 ; WX 556 ; N k ; B 22 0 543 676 ;
C 108 ; WX 278 ; N l ; B 16 0 255 676 ;
C 109 ; WX 833 ; N m ; B 16 0 814 473 ;
C 110 ; WX 556 ; N n ; B 21 0 539 473 ;
C 111 ; WX 500 ; N o ; B 25 -14 476 473 ;
C 112 ; WX 556 ; N p ; B 19 -205 524 473 ;
C 113 ; WX 556 ; N q ; B 34 -205 536 473 ;
C 114 ; WX 444 ; N r ; B 29 0 434 473 ;
C 115 ; WX 389 ; N s ; B 25 -14 361 473 ;
C 116 ; WX 333 ; N t ; B 20 -12 332 630 ;
C 117 ; WX 556 ; N u ; B 16 -14 537 461 ;
C 118 ; WX 500 ; N v ; B 21 -14 485 461 ;
C 119 ; WX 722 ; N w ; B 23 -14 707 461 ;
C 120 ; WX 500 ; N x ; B 12 0 484 461 ;
C 121 ; WX 500 ; N y ; B 16 -205 480 461 ;
C 122 ; WX 444 ; N z ; B 21 0 420 461 ;
C 123 ; WX 394 ; N braceleft ; B 22 -175 340 698 ;
C 124 ; WX 220 ; N bar ; B 66 -218 154 782 ;
C 125 ; WX 394 ; N braceright ; B 54 -175 372 698 ;
C 126 ; WX 520 ; N asciitilde ; B 29 173 491 333 ;
C 161 ; WX 333 ; N exclamdown ; B 82 -203 252 501 ;
C 162 ; WX 500 ; N cent ; B 53 -140 458 588 ;
C 163 ; WX 500 ; N sterling ; B 21 -14 477 684 ;
C -1 ; WX 167 ; N fraction ; B -168 -12 329 688 ;
C 165 ; WX 500 ; N yen ; B -64 0 547 676 ;
C 131 ; WX 500 ; N florin ; B 0 -155 498 706 ;
C 167 ; WX 500 ; N section ; B 57 -132 443 691 ;
C 164 ; WX 500 ; N currency ; B -26 61 526 613 ;
C 39 ; WX 278 ; N quotesingle ; B 75 404 204 691 ;
C 147 ; WX 500 ; N quotedblleft ; B 32 356 486 691 ;
C 171 ; WX 500 ; N guillemotleft ; B 23 36 473 415 ;
C 139 ; WX 333 ; N guilsinglleft ; B 51 36 305 415 ;
C 155 ; WX 333 ; N guilsinglright ; B 28 36 282 415 ;
C -1 ; WX 556 ; N fi ; B 14 0 536 691 ;
C -1 ; WX 556 ; N fl ; B 14 0 536 691 ;
C 150 ; WX 500 ; N endash ; B 0 181 500 271 ;
C 134 ; WX 500 ; N dagger ; B 47 -134 453 691 ;
C 135 ; WX 500 ; N daggerdbl ; B 45 -132 456 691 ;
C 183 ; WX 250 ; N periodcentered ; B 41 248 210 417 ;
C 182 ; WX 540 ; N paragraph ; B 0 -186 519 676 ;
C 149 ; WX 350 ; N bullet ; B 35 198 315 478 ;
C 130 ; WX 333 ; N quotesinglbase ; B 79 -180 263 155 ;
C 132 ; WX 500 ; N quotedblbase ; B 14 -180 468 155 ;
C 148 ; WX 500 ; N quotedblright ; B 14 356 468 691 ;
C 187 ; WX 500 ; N guillemotright ; B 27 36 477 415 ;
C 133 ; WX 1000 ; N ellipsis ; B 82 -13 917 156 ;
C 137 ; WX 1000 ; N perthousand ; B 7 -29 995 706 ;
C 191 ; WX 500 ; N questiondown ; B 55 -201 443 501 ;
C 96 ; WX 333 ; N grave ; B 8 528 246 713 ;
C 180 ; WX 333 ; N acute ; B 86 528 324 713 ;
C 136 ; WX 333 ; N circumflex ; B -2 528 335 704 ;
C 152 ; WX 333 ; N tilde ; B -16 547 349 674 ;
C 175 ; WX 333 ; N macron ; B 1 565 331 637 ;
C -1 ; WX 333 ; N breve ; B 15 528 318 691 ;
C -1 ; WX 333 ; N dotaccent ; B 103 536 258 691 ;
C 168 ; WX 333 ; N dieresis ; B -2 537 335 667 ;
C -1 ; WX 333 ; N ring ; B 60 527 273 740 ;
C 184 ; WX 333 ; N cedilla ; B 68 -218 294 0 ;
C -1 ; WX 333 ; N hungarumlaut ; B -13 528 425 713 ;
C -1 ; WX 333 ; N ogonek ; B 90 -193 319 24 ;
C -1 ; WX 333 ; N caron ; B -2 528 335 704 ;
C 151 ; WX 1000 ; N emdash ; B 0 181 1000 271 ;
C 198 ; WX 1000 ; N AE ; B 4 0 951 676 ;
C 170 ; WX 300 ; N ordfeminine ; B -1 397 301 688 ;
C -1 ; WX 667 ; N Lslash ; B 19 0 638 676 ;
C 216 ; WX 778 ; N Oslash ; B 35 -74 743 737 ;
C 140 ; WX 1000 ; N OE ; B 22 -5 981 684 ;
C 186 ; WX 330 ; N ordmasculine ; B 18 397 312 688 ;
C 230 ; WX 722 ; N ae ; B 33 -14 693 473 ;
C -1 ; WX 278 ; N dotlessi ; B 16 0 255 461 ;
C -1 ; WX 278 ; N lslash ; B -22 0 303 676 ;
C 248 ; WX 500 ; N oslash ; B 25 -92 476 549 ;
C 156 ; WX 722 ; N oe ; B 22 -14 696 473 ;
C 223 ; WX 556 ; N germandbls ; B 19 -12 517 691 ;
C 207 ; WX 389 ; N Idieresis ; B 20 0 370 877 ;
C 233 ; WX 444 ; N eacute ; B 25 -14 426 713 ;
C -1 ; WX 500 ; N abreve ; B 25 -14 488 691 ;
C -1 ; WX 556 ; N uhungarumlaut ; B 16 -14 557 713 ;
C -1 ; WX 444 ; N ecaron ; B 25 -14 426 704 ;
C 159 ; WX 722 ; N Ydieresis ; B 15 0 699 877 ;
C 247 ; WX 570 ; N divide ; B 33 -31 537 537 ;
C 221 ; WX 722 ; N Yacute ; B 15 0 699 923 ;
C 194 ; WX 722 ; N Acircumflex ; B 9 0 689 914 ;
C 225 ; WX 500 ; N aacute ; B 25 -14 488 713 ;
C 219 ; WX 722 ; N Ucircumflex ; B 16 -19 701 914 ;
C 253 ; WX 500 ; N yacute ; B 16 -205 480 713 ;
C -1 ; WX 389 ; N scommaaccent ; B 25 -218 361 473 ;
C 234 ; WX 444 ; N ecircumflex ; B 25 -14 426 704 ;
C -1 ; WX 722 ; N Uring ; B 16 -19 701 935 ;
C 220 ; WX 722 ; N Udieresis ; B 16 -19 701 877 ;
C -1 ; WX 500 ; N aogonek ; B 25 -193 504 473 ;
C 218 ; WX 722 ; N Uacute ; B 16 -19 701 923 ;
C -1 ; WX 556 ; N uogonek ; B 16 -193 539 461 ;
C 203 ; WX 667 ; N Edieresis ; B 16 0 641 877 ;
C -1 ; WX 722 ; N Dcroat ; B 6 0 690 676 ;
C -1 ; WX 250 ; N commaaccent ; B 47 -218 203 -50 ;
C 169 ; WX 747 ; N copyright ; B 26 -19 721 691 ;
C -1 ; WX 667 ; N Emacron ; B 16 0 641 847 ;
C -1 ; WX 444 ; N ccaron ; B 25 -14 430 704 ;
C 229 ; WX 500 ; N aring ; B 25 -14 488 740 ;
C -1 ; WX 722 ; N Ncommaaccent ; B 16 -188 701 676 ;
C -1 ; WX 278 ; N lacute ; B 16 0 297 923 ;
C 224 ; WX 500 ; N agrave ; B 25 -14 488 713 ;
C -1 ; WX 667 ; N Tcommaaccent ; B 31 -218 636 676 ;
C -1 ; WX 722 ; N Cacute ; B 49 -19 687 923 ;
C 227 ; WX 500 ; N atilde ; B 25 -14 488 674 ;
C -1 ; WX 667 ; N Edotaccent ; B 16 0 641 901 ;
C 154 ; WX 389 ; N scaron ; B 25 -14 363 704 ;
C -1 ; WX 389 ; N scedilla ; B 25 -218 361 473 ;
C 237 ; WX 278 ; N iacute ; B 16 0 289 713 ;
C -1 ; WX 494 ; N lozenge ; B 10 0 484 745 ;
C -1 ; WX 722 ; N Rcaron ; B 26 0 715 914 ;
C -1 ; WX 778 ; N Gcommaaccent ; B 37 -218 755 691 ;
C 251 ; WX 556 ; N ucircumflex ; B 16 -14 537 704 ;
C 226 ; WX 500 ; N acircumflex ; B 25 -14 488 704 ;
C -1 ; WX 722 ; N Amacron ; B 9 0 689 847 ;
C -1 ; WX 444 ; N rcaron ; B 29 0 434 704 ;
C 231 ; WX 444 ; N ccedilla ; B 25 -218 430 473 ;
C -1 ; WX 667 ; N Zdotaccent ; B 28 0 634 901 ;
C 222 ; WX 611 ; N Thorn ; B 16 0 600 676 ;
C -1 ; WX 778 ; N Omacron ; B 35 -19 743 847 ;
C -1 ; WX 722 ; N Racute ; B 26 0 715 923 ;
C -1 ; WX 556 ; N Sacute ; B 35 -19 513 923 ;
C -1 ; WX 672 ; N dcaron ; B 25 -14 681 682 ;
C -1 ; WX 722 ; N Umacron ; B 16 -19 701 847 ;
C -1 ; WX 556 ; N uring ; B 16 -14 537 740 ;
C 179 ; WX 300 ; N threesuperior ; B 3 268 297 688 ;
C 210 ; WX 778 ; N Ograve ; B 35 -19 743 923 ;
C 192 ; WX 722 ; N Agrave ; B 9 0 689 923 ;
C -1 ; WX 722 ; N Abreve ; B 9 0 689 901 ;
C 215 ; WX 570 ; N multiply ; B 48 16 522 490 ;
C 250 ; WX 556 ; N uacute ; B 16 -14 537 713 ;
C -1 ; WX 667 ; N Tcaron ; B 31 0 636 914 ;
C -1 ; WX 494 ; N partialdiff ; B 11 -21 494 750 ;
C 255 ; WX 500 ; N ydieresis ; B 16 -205 480 667 ;
C -1 ; WX 722 ; N Nacute ; B 16 -18 701 923 ;
C 238 ; WX 278 ; N icircumflex ; B -37 0 300 704 ;
C 202 ; WX 667 ; N Ecircumflex ; B 16 0 641 914 ;
C 228 ; WX 500 ; N adieresis ; B 25 -14 488 667 ;
C 235 ; WX 444 ; N edieresis ; B 25 -14 426 667 ;
C -1 ; WX 444 ; N cacute ; B 25 -14 430 713 ;
C -1 ; WX 556 ; N nacute ; B 21 0 539 713 ;
C -1 ; WX 556 ; N umacron ; B 16 -14 537 637 ;
C -1 ; WX 722 ; N Ncaron ; B 16 -18 701 914 ;
C 205 ; WX 389 ; N Iacute ; B 20 0 370 923 ;
C 177 ; WX 570 ; N plusminus ; B 33 0 537 506 ;
C 166 ; WX 220 ; N brokenbar ; B 66 -143 154 707 ;
C 174 ; WX 747 ; N registered ; B 26 -19 721 691 ;
C -1 ; WX 778 ; N Gbreve ; B 37 -19 755 901 ;
C -1 ; WX 389 ; N Idotaccent ; B 20 0 370 901 ;
C -1 ; WX 600 ; N summation ; B 14 -10 585 706 ;
C 200 ; WX 667 ; N Egrave ; B 16 0 641 923 ;
C -1 ; WX 444 ; N racute ; B 29 0 434 713 ;
C -1 ; WX 500 ; N omacron ; B 25 -14 476 637 ;
C -1 ; WX 667 ; N Zacute ; B 28 0 634 923 ;
C 142 ; WX 667 ; N Zcaron ; B 28 0 634 914 ;
C -1 ; WX 549 ; N greaterequal ; B 26 0 523 704 ;
C 208 ; WX 722 ; N Eth ; B 6 0 690 676 ;
C 199 ; WX 722 ; N Ccedilla ; B 49 -218 687 691 ;
C -1 ; WX 278 ; N lcommaaccent ; B 16 -218 255 676 ;
C -1 ; WX 416 ; N tcaron ; B 20 -12 425 815 ;
C -1 ; WX 444 ; N eogonek ; B 25 -193 426 473 ;
C -1 ; WX 722 ; N Uogonek ; B 16 -193 701 676 ;
C 193 ; WX 722 ; N Aacute ; B 9 0 689 923 ;
C 196 ; WX 722 ; N Adieresis ; B 9 0 689 877 ;
C 232 ; WX 444 ; N egrave ; B 25 -14 426 713 ;
C -1 ; WX 444 ; N zacute ; B 21 0 420 713 ;
C -1 ; WX 278 ; N iogonek ; B 16 -193 274 691 ;
C 211 ; WX 778 ; N Oacute ; B 35 -19 743 923 ;
C 243 ; WX 500 ; N oacute ; B 25 -14 476 713 ;
C -1 ; WX 500 ; N amacron ; B 25 -14 488 637 ;
C -1 ; WX 389 ; N sacute ; B 25 -14 361 713 ;
C 239 ; WX 278 ; N idieresis ; B -37 0 300 667 ;
C 212 ; WX 778 ; N Ocircumflex ; B 35 -19 743 914 ;
C 217 ; WX 722 ; N Ugrave ; B 16 -19 701 923 ;
C -1 ; WX 612 ; N Delta ; B 6 0 608 688 ;
C 254 ; WX 556 ; N thorn ; B 19 -205 524 676 ;
C 178 ; WX 300 ; N twosuperior ; B 0 275 300 688 ;
C 214 ; WX 778 ; N Odieresis ; B 35 -19 743 877 ;
C 181 ; WX 556 ; N mu ; B 33 -206 536 461 ;
C 236 ; WX 278 ; N igrave ; B -27 0 255 713 ;
C -1 ; WX 500 ; N ohungarumlaut ; B 25 -14 529 713 ;
C -1 ; WX 667 ; N Eogonek ; B 16 -193 644 676 ;
C -1 ; WX 556 ; N dcroat ; B 25 -14 534 676 ;
C 190 ; WX 750 ; N threequarters ; B 23 -12 733 688 ;
C -1 ; WX 556 ; N Scedilla ; B 35 -218 513 692 ;
C -1 ; WX 394 ; N lcaron ; B 16 0 412 682 ;
C -1 ; WX 778 ; N Kcommaaccent ; B 30 -218 769 676 ;
C -1 ; WX 667 ; N Lacute ; B 19 0 638 923 ;
C 153 ; WX 1000 ; N trademark ; B 24 271 977 676 ;
C -1 ; WX 444 ; N edotaccent ; B 25 -14 426 691 ;
C 204 ; WX 389 ; N Igrave ; B 20 0 370 923 ;
C -1 ; WX 389 ; N Imacron ; B 20 0 370 847 ;
C -1 ; WX 667 ; N Lcaron ; B 19 0 652 682 ;
C 189 ; WX 750 ; N onehalf ; B -7 -12 775 688 ;
C -1 ; WX 549 ; N lessequal ; B 29 0 526 704 ;
C 244 ; WX 500 ; N ocircumflex ; B 25 -14 476 704 ;
C 241 ; WX 556 ; N ntilde ; B 21 0 539 674 ;
C -1 ; WX 722 ; N Uhungarumlaut ; B 16 -19 701 923 ;
C 201 ; WX 667 ; N Eacute ; B 16 0 641 923 ;
C -1 ; WX 444 ; N emacron ; B 25 -14 426 637 ;
C -1 ; WX 500 ; N gbreve ; B 28 -206 483 691 ;
C 188 ; WX 750 ; N onequarter ; B 28 -12 743 688 ;
C 138 ; WX 556 ; N Scaron ; B 35 -19 513 914 ;
C -1 ; WX 556 ; N Scommaaccent ; B 35 -218 513 692 ;
C -1 ; WX 778 ; N Ohungarumlaut ; B 35 -19 743 923 ;
C 176 ; WX 400 ; N degree ; B 57 402 343 688 ;
C 242 ; WX 500 ; N ograve ; B 25 -14 476 713 ;
C -1 ; WX 722 ; N Ccaron ; B 49 -19 687 914 ;
C 249 ; WX 556 ; N ugrave ; B 16 -14 537 713 ;
C -1 ; WX 549 ; N radical ; B 10 -46 512 850 ;
C -1 ; WX 722 ; N Dcaron ; B 14 0 690 914 ;
C -1 ; WX 444 ; N rcommaaccent ; B 29 -218 434 473 ;
C 209 ; WX 722 ; N Ntilde ; B 16 -18 701 884 ;
C 245 ; WX 500 ; N otilde ; B 25 -14 476 674 ;
C -1 ; WX 722 ; N Rcommaaccent ; B 26 -218 715 676 ;
C -1 ; WX 667 ; N Lcommaaccent ; B 19 -218 638 676 ;
C 195 ; WX 722 ; N Atilde ; B 9 0 689 884 ;
C -1 ; WX 722 ; N Aogonek ; B 9 -193 699 690 ;
C 197 ; WX 722 ; N Aring ; B 9 0 689 935 ;
C 213 ; WX 778 ; N Otilde ; B 35 -19 743 884 ;
C -1 ; WX 444 ; N zdotaccent ; B 21 0 420 691 ;
C -1 ; WX 667 ; N Ecaron ; B 16 0 641 914 ;
C -1 ; WX 389 ; N Iogonek ; B 20 -193 370 676 ;
C -1 ; WX 556 ; N kcommaaccent ; B 22 -218 543 676 ;
C -1 ; WX 570 ; N minus ; B 33 209 537 297 ;
C 206 ; WX 389 ; N Icircumflex ; B 20 0 370 914 ;
C -1 ; WX 556 ; N ncaron ; B 21 0 539 704 ;
C -1 ; WX 333 ; N tcommaaccent ; B 20 -218 332 630 ;
C 172 ; WX 570 ; N logicalnot ; B 33 108 537 399 ;
C 246 ; WX 500 ; N odieresis ; B 25 -14 476 667 ;
C 252 ; WX 556 ; N udieresis ; B 16 -14 537 667 ;
C -1 ; WX 549 ; N notequal ; B 15 -49 540 570 ;
C -1 ; WX 500 ; N gcommaaccent ; B 28 -206 483 829 ;
C 240 ; WX 500 ; N eth ; B 25 -14 476 691 ;
C 158 ; WX 444 ; N zcaron ; B 21 0 420 704 ;
C -1 ; WX 556 ; N ncommaaccent ; B 21 -218 539 473 ;
C 185 ; WX 300 ; N onesuperior ; B 28 275 273 688 ;
C -1 ; WX 278 ; N imacron ; B -8 0 272 637 ;
C 128 ; WX 500 ; N Euro ; B 0 0 0 0 ;
EndCharMetrics
StartKernData
StartKernPairs 2242
KPX A C -55
KPX A Cacute -55
KPX A Ccaron -55
KPX A Ccedilla -55
KPX A G -55
KPX A Gbreve -55
KPX A Gcommaaccent -55
KPX A O -45
KPX A Oacute -45
KPX A Ocircumflex -45
KPX A Odieresis -45
KPX A Ograve -45
KPX A Ohungarumlaut -45
KPX A Omacron -45
KPX A Oslash -45
KPX A Otilde -45
KPX A Q -45
KPX A T -95
KPX A Tcaron -95
KPX A Tcommaaccent -95
KPX A U -50
KPX A Uacute -50
KPX A Ucircumflex -50
KPX A Udieresis -50
KPX A Ugrave -50
KPX A Uhungarumlaut -50
KPX A Umacron -50
KPX A Uogonek -50
KPX A Uring -50
KPX A V -145
KPX A W -130
KPX A Y -100
KPX A Yacute -100
KPX A Ydieresis -100
KPX A p -25
KPX A quoteright -74
KPX A u -50
KPX A uacute -50
KPX A ucircumflex -50
KPX A udieresis -50
KPX A ugrave -50
KPX A uhungarumlaut -50
KPX A umacron -50
KPX A uogonek -50
KPX A uring -50
KPX A v -100
KPX A w -90
KPX A y -74
KPX A yacute -74
KPX A ydieresis -74
KPX Aacute C -55
KPX Aacute Cacute -55
KPX Aacute Ccaron -55
KPX Aacute Ccedilla -55
KPX Aacute G -55
KPX Aacute Gbreve -55
KPX Aacute Gcommaaccent -55
KPX Aacute O -45
KPX Aacute Oacute -45
KPX Aacute Ocircumflex -45
KPX Aacute Odieresis -45
KPX Aacute Ograve -45
KPX Aacute Ohungarumlaut -45
KPX Aacute Omacron -45
KPX Aacute Oslash -45
KPX Aacute Otilde -45
KPX Aacute Q -45
KPX Aacute T -95
KPX Aacute Tcaron -95
KPX Aacute Tcommaaccent -95
KPX Aacute U -50
KPX Aacute Uacute -50
KPX Aacute Ucircumflex -50
KPX Aacute Udieresis -50
KPX Aacute Ugrave -50
KPX Aacute Uhungarumlaut -50
KPX Aacute Umacron -50
KPX Aacute Uogonek -50
KPX Aacute Uring -50
KPX Aacute V -145
KPX Aacute W -130
KPX Aacute Y -100
KPX Aacute Yacute -100
KPX Aacute Ydieresis -100
KPX Aacute p -25
KPX Aacute quoteright -74
KPX Aacute u -50
KPX Aacute uacute -50
KPX Aacute ucircumflex -50
KPX Aacute udieresis -50
KPX Aacute ugrave -50
KPX Aacute uhungarumlaut -50
KPX Aacute umacron -50
KPX Aacute uogonek -50
KPX Aacute uring -50
KPX Aacute v -100
KPX Aacute w -90
KPX Aacute y -74
KPX Aacute yacute -74
KPX Aacute ydieresis -74
KPX Abreve C -55
KPX Abreve Cacute -55
KPX Abreve Ccaron -55
KPX Abreve Ccedilla -55
KPX Abreve G -55
KPX Abreve Gbreve -55
KPX Abreve Gcommaaccent -55
KPX Abreve O -45
KPX Abreve Oacute -45
KPX Abreve Ocircumflex -45
KPX Abreve Odieresis -45
KPX Abreve Ograve -45
KPX Abreve Ohungarumlaut -45
KPX Abreve Omacron -45
KPX Abreve Oslash -45
KPX Abreve Otilde -45
KPX Abreve Q -45
KPX Abreve T -95
KPX Abreve Tcaron -95
KPX Abreve Tcommaaccent -95
KPX Abreve U -50
KPX Abreve Uacute -50
KPX Abreve Ucircumflex -50
KPX Abreve Udieresis -50
KPX Abreve Ugrave -50
KPX Abreve Uhungarumlaut -50
KPX Abreve Umacron -50
KPX Abreve Uogonek -50
KPX Abreve Uring -50
KPX Abreve V -145
KPX Abreve W -130
KPX Abreve Y -100
KPX Abreve Yacute -100
KPX Abreve Ydieresis -100
KPX Abreve p -25
KPX Abreve quoteright -74
KPX Abreve u -50
KPX Abreve uacute -50
KPX Abreve ucircumflex -50
KPX Abreve udieresis -50
KPX Abreve ugrave -50
KPX Abreve uhungarumlaut -50
KPX Abreve umacron -50
KPX Abreve uogonek -50
KPX Abreve uring -50
KPX Abreve v -100
KPX Abreve w -90
KPX Abreve y -74
KPX Abreve yacute -74
KPX Abreve ydieresis -74
KPX Acircumflex C -55
KPX Acircumflex Cacute -55
KPX Acircumflex Ccaron -55
KPX Acircumflex Ccedilla -55
KPX Acircumflex G -55
KPX Acircumflex Gbreve -55
KPX Acircumflex Gcommaaccent -55
KPX Acircumflex O -45
KPX Acircumflex Oacute -45
KPX Acircumflex Ocircumflex -45
KPX Acircumflex Odieresis -45
KPX Acircumflex Ograve -45
KPX Acircumflex Ohungarumlaut -45
KPX Acircumflex Omacron -45
KPX Acircumflex Oslash -45
KPX Acircumflex Otilde -45
KPX Acircumflex Q -45
KPX Acircumflex T -95
KPX Acircumflex Tcaron -95
KPX Acircumflex Tcommaaccent -95
KPX Acircumflex U -50
KPX Acircumflex Uacute -50
KPX Acircumflex Ucircumflex -50
KPX Acircumflex Udieresis -50
KPX Acircumflex Ugrave -50
KPX Acircumflex Uhungarumlaut -50
KPX Acircumflex Umacron -50
KPX Acircumflex Uogonek -50
KPX Acircumflex Uring -50
KPX Acircumflex V -145
KPX Acircumflex W -130
KPX Acircumflex Y -100
KPX Acircumflex Yacute -100
KPX Acircumflex Ydieresis -100
KPX Acircumflex p -25
KPX Acircumflex quoteright -74
KPX Acircumflex u -50
KPX Acircumflex uacute -50
KPX Acircumflex ucircumflex -50
KPX Acircumflex udieresis -50
KPX Acircumflex ugrave -50
KPX Acircumflex uhungarumlaut -50
KPX Acircumflex umacron -50
KPX Acircumflex uogonek -50
KPX Acircumflex uring -50
KPX Acircumflex v -100
KPX Acircumflex w -90
KPX Acircumflex y -74
KPX Acircumflex yacute -74
KPX Acircumflex ydieresis -74
KPX Adieresis C -55
KPX Adieresis Cacute -55
KPX Adieresis Ccaron -55
KPX Adieresis Ccedilla -55
KPX Adieresis G -55
KPX Adieresis Gbreve -55
KPX Adieresis Gcommaaccent -55
KPX Adieresis O -45
KPX Adieresis Oacute -45
KPX Adieresis Ocircumflex -45
KPX Adieresis Odieresis -45
KPX Adieresis Ograve -45
KPX Adieresis Ohungarumlaut -45
KPX Adieresis Omacron -45
KPX Adieresis Oslash -45
KPX Adieresis Otilde -45
KPX Adieresis Q -45
KPX Adieresis T -95
KPX Adieresis Tcaron -95
KPX Adieresis Tcommaaccent -95
KPX Adieresis U -50
KPX Adieresis Uacute -50
KPX Adieresis Ucircumflex -50
KPX Adieresis Udieresis -50
KPX Adieresis Ugrave -50
KPX Adieresis Uhungarumlaut -50
KPX Adieresis Umacron -50
KPX Adieresis Uogonek -50
KPX Adieresis Uring -50
KPX Adieresis V -145
KPX Adieresis W -130
KPX Adieresis Y -100
KPX Adieresis Yacute -100
KPX Adieresis Ydieresis -100
KPX Adieresis p -25
KPX Adieresis quoteright -74
KPX Adieresis u -50
KPX Adieresis uacute -50
KPX Adieresis ucircumflex -50
KPX Adieresis udieresis -50
KPX Adieresis ugrave -50
KPX Adieresis uhungarumlaut -50
KPX Adieresis umacron -50
KPX Adieresis uogonek -50
KPX Adieresis uring -50
KPX Adieresis v -100
KPX Adieresis w -90
KPX Adieresis y -74
KPX Adieresis yacute -74
KPX Adieresis ydieresis -74
KPX Agrave C -55
KPX Agrave Cacute -55
KPX Agrave Ccaron -55
KPX Agrave Ccedilla -55
KPX Agrave G -55
KPX Agrave Gbreve -55
KPX Agrave Gcommaaccent -55
KPX Agrave O -45
KPX Agrave Oacute -45
KPX Agrave Ocircumflex -45
KPX Agrave Odieresis -45
KPX Agrave Ograve -45
KPX Agrave Ohungarumlaut -45
KPX Agrave Omacron -45
KPX Agrave Oslash -45
KPX Agrave Otilde -45
KPX Agrave Q -45
KPX Agrave T -95
KPX Agrave Tcaron -95
KPX Agrave Tcommaaccent -95
KPX Agrave U -50
KPX Agrave Uacute -50
KPX Agrave Ucircumflex -50
KPX Agrave Udieresis -50
KPX Agrave Ugrave -50
KPX Agrave Uhungarumlaut -50
KPX Agrave Umacron -50
KPX Agrave Uogonek -50
KPX Agrave Uring -50
KPX Agrave V -145
KPX Agrave W -130
KPX Agrave Y -100
KPX Agrave Yacute -100
KPX Agrave Ydieresis -100
KPX Agrave p -25
KPX Agrave quoteright -74
KPX Agrave u -50
KPX Agrave uacute -50
KPX Agrave ucircumflex -50
KPX Agrave udieresis -50
KPX Agrave ugrave -50
KPX Agrave uhungarumlaut -50
KPX Agrave umacron -50
KPX Agrave uogonek -50
KPX Agrave uring -50
KPX Agrave v -100
KPX Agrave w -90
KPX Agrave y -74
KPX Agrave yacute -74
KPX Agrave ydieresis -74
KPX Amacron C -55
KPX Amacron Cacute -55
KPX Amacron Ccaron -55
KPX Amacron Ccedilla -55
KPX Amacron G -55
KPX Amacron Gbreve -55
KPX Amacron Gcommaaccent -55
KPX Amacron O -45
KPX Amacron Oacute -45
KPX Amacron Ocircumflex -45
KPX Amacron Odieresis -45
KPX Amacron Ograve -45
KPX Amacron Ohungarumlaut -45
KPX Amacron Omacron -45
KPX Amacron Oslash -45
KPX Amacron Otilde -45
KPX Amacron Q -45
KPX Amacron T -95
KPX Amacron Tcaron -95
KPX Amacron Tcommaaccent -95
KPX Amacron U -50
KPX Amacron Uacute -50
KPX Amacron Ucircumflex -50
KPX Amacron Udieresis -50
KPX Amacron Ugrave -50
KPX Amacron Uhungarumlaut -50
KPX Amacron Umacron -50
KPX Amacron Uogonek -50
KPX Amacron Uring -50
KPX Amacron V -145
KPX Amacron W -130
KPX Amacron Y -100
KPX Amacron Yacute -100
KPX Amacron Ydieresis -100
KPX Amacron p -25
KPX Amacron quoteright -74
KPX Amacron u -50
KPX Amacron uacute -50
KPX Amacron ucircumflex -50
KPX Amacron udieresis -50
KPX Amacron ugrave -50
KPX Amacron uhungarumlaut -50
KPX Amacron umacron -50
KPX Amacron uogonek -50
KPX Amacron uring -50
KPX Amacron v -100
KPX Amacron w -90
KPX Amacron y -74
KPX Amacron yacute -74
KPX Amacron ydieresis -74
KPX Aogonek C -55
KPX Aogonek Cacute -55
KPX Aogonek Ccaron -55
KPX Aogonek Ccedilla -55
KPX Aogonek G -55
KPX Aogonek Gbreve -55
KPX Aogonek Gcommaaccent -55
KPX Aogonek O -45
KPX Aogonek Oacute -45
KPX Aogonek Ocircumflex -45
KPX Aogonek Odieresis -45
KPX Aogonek Ograve -45
KPX Aogonek Ohungarumlaut -45
KPX Aogonek Omacron -45
KPX Aogonek Oslash -45
KPX Aogonek Otilde -45
KPX Aogonek Q -45
KPX Aogonek T -95
KPX Aogonek Tcaron -95
KPX Aogonek Tcommaaccent -95
KPX Aogonek U -50
KPX Aogonek Uacute -50
KPX Aogonek Ucircumflex -50
KPX Aogonek Udieresis -50
KPX Aogonek Ugrave -50
KPX Aogonek Uhungarumlaut -50
KPX Aogonek Umacron -50
KPX Aogonek Uogonek -50
KPX Aogonek Uring -50
KPX Aogonek V -145
KPX Aogonek W -130
KPX Aogonek Y -100
KPX Aogonek Yacute -100
KPX Aogonek Ydieresis -100
KPX Aogonek p -25
KPX Aogonek quoteright -74
KPX Aogonek u -50
KPX Aogonek uacute -50
KPX Aogonek ucircumflex -50
KPX Aogonek udieresis -50
KPX Aogonek ugrave -50
KPX Aogonek uhungarumlaut -50
KPX Aogonek umacron -50
KPX Aogonek uogonek -50
KPX Aogonek uring -50
KPX Aogonek v -100
KPX Aogonek w -90
KPX Aogonek y -34
KPX Aogonek yacute -34
KPX Aogonek ydieresis -34
KPX Aring C -55
KPX Aring Cacute -55
KPX Aring Ccaron -55
KPX Aring Ccedilla -55
KPX Aring G -55
KPX Aring Gbreve -55
KPX Aring Gcommaaccent -55
KPX Aring O -45
KPX Aring Oacute -45
KPX Aring Ocircumflex -45
KPX Aring Odieresis -45
KPX Aring Ograve -45
KPX Aring Ohungarumlaut -45
KPX Aring Omacron -45
KPX Aring Oslash -45
KPX Aring Otilde -45
KPX Aring Q -45
KPX Aring T -95
KPX Aring Tcaron -95
KPX Aring Tcommaaccent -95
KPX Aring U -50
KPX Aring Uacute -50
KPX Aring Ucircumflex -50
KPX Aring Udieresis -50
KPX Aring Ugrave -50
KPX Aring Uhungarumlaut -50
KPX Aring Umacron -50
KPX Aring Uogonek -50
KPX Aring Uring -50
KPX Aring V -145
KPX Aring W -130
KPX Aring Y -100
KPX Aring Yacute -100
KPX Aring Ydieresis -100
KPX Aring p -25
KPX Aring quoteright -74
KPX Aring u -50
KPX Aring uacute -50
KPX Aring ucircumflex -50
KPX Aring udieresis -50
KPX Aring ugrave -50
KPX Aring uhungarumlaut -50
KPX Aring umacron -50
KPX Aring uogonek -50
KPX Aring uring -50
KPX Aring v -100
KPX Aring w -90
KPX Aring y -74
KPX Aring yacute -74
KPX Aring ydieresis -74
KPX Atilde C -55
KPX Atilde Cacute -55
KPX Atilde Ccaron -55
KPX Atilde Ccedilla -55
KPX Atilde G -55
KPX Atilde Gbreve -55
KPX Atilde Gcommaaccent -55
KPX Atilde O -45
KPX Atilde Oacute -45
KPX Atilde Ocircumflex -45
KPX Atilde Odieresis -45
KPX Atilde Ograve -45
KPX Atilde Ohungarumlaut -45
KPX Atilde Omacron -45
KPX Atilde Oslash -45
KPX Atilde Otilde -45
KPX Atilde Q -45
KPX Atilde T -95
KPX Atilde Tcaron -95
KPX Atilde Tcommaaccent -95
KPX Atilde U -50
KPX Atilde Uacute -50
KPX Atilde Ucircumflex -50
KPX Atilde Udieresis -50
KPX Atilde Ugrave -50
KPX Atilde Uhungarumlaut -50
KPX Atilde Umacron -50
KPX Atilde Uogonek -50
KPX Atilde Uring -50
KPX Atilde V -145
KPX Atilde W -130
KPX Atilde Y -100
KPX Atilde Yacute -100
KPX Atilde Ydieresis -100
KPX Atilde p -25
KPX Atilde quoteright -74
KPX Atilde u -50
KPX Atilde uacute -50
KPX Atilde ucircumflex -50
KPX Atilde udieresis -50
KPX Atilde ugrave -50
KPX Atilde uhungarumlaut -50
KPX Atilde umacron -50
KPX Atilde uogonek -50
KPX Atilde uring -50
KPX Atilde v -100
KPX Atilde w -90
KPX Atilde y -74
KPX Atilde yacute -74
KPX Atilde ydieresis -74
KPX B A -30
KPX B Aacute -30
KPX B Abreve -30
KPX B Acircumflex -30
KPX B Adieresis -30
KPX B Agrave -30
KPX B Amacron -30
KPX B Aogonek -30
KPX B Aring -30
KPX B Atilde -30
KPX B U -10
KPX B Uacute -10
KPX B Ucircumflex -10
KPX B Udieresis -10
KPX B Ugrave -10
KPX B Uhungarumlaut -10
KPX B Umacron -10
KPX B Uogonek -10
KPX B Uring -10
KPX D A -35
KPX D Aacute -35
KPX D Abreve -35
KPX D Acircumflex -35
KPX D Adieresis -35
KPX D Agrave -35
KPX D Amacron -35
KPX D Aogonek -35
KPX D Aring -35
KPX D Atilde -35
KPX D V -40
KPX D W -40
KPX D Y -40
KPX D Yacute -40
KPX D Ydieresis -40
KPX D period -20
KPX Dcaron A -35
KPX Dcaron Aacute -35
KPX Dcaron Abreve -35
KPX Dcaron Acircumflex -35
KPX Dcaron Adieresis -35
KPX Dcaron Agrave -35
KPX Dcaron Amacron -35
KPX Dcaron Aogonek -35
KPX Dcaron Aring -35
KPX Dcaron Atilde -35
KPX Dcaron V -40
KPX Dcaron W -40
KPX Dcaron Y -40
KPX Dcaron Yacute -40
KPX Dcaron Ydieresis -40
KPX Dcaron period -20
KPX Dcroat A -35
KPX Dcroat Aacute -35
KPX Dcroat Abreve -35
KPX Dcroat Acircumflex -35
KPX Dcroat Adieresis -35
KPX Dcroat Agrave -35
KPX Dcroat Amacron -35
KPX Dcroat Aogonek -35
KPX Dcroat Aring -35
KPX Dcroat Atilde -35
KPX Dcroat V -40
KPX Dcroat W -40
KPX Dcroat Y -40
KPX Dcroat Yacute -40
KPX Dcroat Ydieresis -40
KPX Dcroat period -20
KPX F A -90
KPX F Aacute -90
KPX F Abreve -90
KPX F Acircumflex -90
KPX F Adieresis -90
KPX F Agrave -90
KPX F Amacron -90
KPX F Aogonek -90
KPX F Aring -90
KPX F Atilde -90
KPX F a -25
KPX F aacute -25
KPX F abreve -25
KPX F acircumflex -25
KPX F adieresis -25
KPX F agrave -25
KPX F amacron -25
KPX F aogonek -25
KPX F aring -25
KPX F atilde -25
KPX F comma -92
KPX F e -25
KPX F eacute -25
KPX F ecaron -25
KPX F ecircumflex -25
KPX F edieresis -25
KPX F edotaccent -25
KPX F egrave -25
KPX F emacron -25
KPX F eogonek -25
KPX F o -25
KPX F oacute -25
KPX F ocircumflex -25
KPX F odieresis -25
KPX F ograve -25
KPX F ohungarumlaut -25
KPX F omacron -25
KPX F oslash -25
KPX F otilde -25
KPX F period -110
KPX J A -30
KPX J Aacute -30
KPX J Abreve -30
KPX J Acircumflex -30
KPX J Adieresis -30
KPX J Agrave -30
KPX J Amacron -30
KPX J Aogonek -30
KPX J Aring -30
KPX J Atilde -30
KPX J a -15
KPX J aacute -15
KPX J abreve -15
KPX J acircumflex -15
KPX J adieresis -15
KPX J agrave -15
KPX J amacron -15
KPX J aogonek -15
KPX J aring -15
KPX J atilde -15
KPX J e -15
KPX J eacute -15
KPX J ecaron -15
KPX J ecircumflex -15
KPX J edieresis -15
KPX J edotaccent -15
KPX J egrave -15
KPX J emacron -15
KPX J eogonek -15
KPX J o -15
KPX J oacute -15
KPX J ocircumflex -15
KPX J odieresis -15
KPX J ograve -15
KPX J ohungarumlaut -15
KPX J omacron -15
KPX J oslash -15
KPX J otilde -15
KPX J period -20
KPX J u -15
KPX J uacute -15
KPX J ucircumflex -15
KPX J udieresis -15
KPX J ugrave -15
KPX J uhungarumlaut -15
KPX J umacron -15
KPX J uogonek -15
KPX J uring -15
KPX K O -30
KPX K Oacute -30
KPX K Ocircumflex -30
KPX K Odieresis -30
KPX K Ograve -30
KPX K Ohungarumlaut -30
KPX K Omacron -30
KPX K Oslash -30
KPX K Otilde -30
KPX K e -25
KPX K eacute -25
KPX K ecaron -25
KPX K ecircumflex -25
KPX K edieresis -25
KPX K edotaccent -25
KPX K egrave -25
KPX K emacron -25
KPX K eogonek -25
KPX K o -25
KPX K oacute -25
KPX K ocircumflex -25
KPX K odieresis -25
KPX K ograve -25
KPX K ohungarumlaut -25
KPX K omacron -25
KPX K oslash -25
KPX K otilde -25
KPX K u -15
KPX K uacute -15
KPX K ucircumflex -15
KPX K udieresis -15
KPX K ugrave -15
KPX K uhungarumlaut -15
KPX K umacron -15
KPX K uogonek -15
KPX K uring -15
KPX K y -45
KPX K yacute -45
KPX K ydieresis -45
KPX Kcommaaccent O -30
KPX Kcommaaccent Oacute -30
KPX Kcommaaccent Ocircumflex -30
KPX Kcommaaccent Odieresis -30
KPX Kcommaaccent Ograve -30
KPX Kcommaaccent Ohungarumlaut -30
KPX Kcommaaccent Omacron -30
KPX Kcommaaccent Oslash -30
KPX Kcommaaccent Otilde -30
KPX Kcommaaccent e -25
KPX Kcommaaccent eacute -25
KPX Kcommaaccent ecaron -25
KPX Kcommaaccent ecircumflex -25
KPX Kcommaaccent edieresis -25
KPX Kcommaaccent edotaccent -25
KPX Kcommaaccent egrave -25
KPX Kcommaaccent emacron -25
KPX Kcommaaccent eogonek -25
KPX Kcommaaccent o -25
KPX Kcommaaccent oacute -25
KPX Kcommaaccent ocircumflex -25
KPX Kcommaaccent odieresis -25
KPX Kcommaaccent ograve -25
KPX Kcommaaccent ohungarumlaut -25
KPX Kcommaaccent omacron -25
KPX Kcommaaccent oslash -25
KPX Kcommaaccent otilde -25
KPX Kcommaaccent u -15
KPX Kcommaaccent uacute -15
KPX Kcommaaccent ucircumflex -15
KPX Kcommaaccent udieresis -15
KPX Kcommaaccent ugrave -15
KPX Kcommaaccent uhungarumlaut -15
KPX Kcommaaccent umacron -15
KPX Kcommaaccent uogonek -15
KPX Kcommaaccent uring -15
KPX Kcommaaccent y -45
KPX Kcommaaccent yacute -45
KPX Kcommaaccent ydieresis -45
KPX L T -92
KPX L Tcaron -92
KPX L Tcommaaccent -92
KPX L V -92
KPX L W -92
KPX L Y -92
KPX L Yacute -92
KPX L Ydieresis -92
KPX L quotedblright -20
KPX L quoteright -110
KPX L y -55
KPX L yacute -55
KPX L ydieresis -55
KPX Lacute T -92
KPX Lacute Tcaron -92
KPX Lacute Tcommaaccent -92
KPX Lacute V -92
KPX Lacute W -92
KPX Lacute Y -92
KPX Lacute Yacute -92
KPX Lacute Ydieresis -92
KPX Lacute quotedblright -20
KPX Lacute quoteright -110
KPX Lacute y -55
KPX Lacute yacute -55
KPX Lacute ydieresis -55
KPX Lcommaaccent T -92
KPX Lcommaaccent Tcaron -92
KPX Lcommaaccent Tcommaaccent -92
KPX Lcommaaccent V -92
KPX Lcommaaccent W -92
KPX Lcommaaccent Y -92
KPX Lcommaaccent Yacute -92
KPX Lcommaaccent Ydieresis -92
KPX Lcommaaccent quotedblright -20
KPX Lcommaaccent quoteright -110
KPX Lcommaaccent y -55
KPX Lcommaaccent yacute -55
KPX Lcommaaccent ydieresis -55
KPX Lslash T -92
KPX Lslash Tcaron -92
KPX Lslash Tcommaaccent -92
KPX Lslash V -92
KPX Lslash W -92
KPX Lslash Y -92
KPX Lslash Yacute -92
KPX Lslash Ydieresis -92
KPX Lslash quotedblright -20
KPX Lslash quoteright -110
KPX Lslash y -55
KPX Lslash yacute -55
KPX Lslash ydieresis -55
KPX N A -20
KPX N Aacute -20
KPX N Abreve -20
KPX N Acircumflex -20
KPX N Adieresis -20
KPX N Agrave -20
KPX N Amacron -20
KPX N Aogonek -20
KPX N Aring -20
KPX N Atilde -20
KPX Nacute A -20
KPX Nacute Aacute -20
KPX Nacute Abreve -20
KPX Nacute Acircumflex -20
KPX Nacute Adieresis -20
KPX Nacute Agrave -20
KPX Nacute Amacron -20
KPX Nacute Aogonek -20
KPX Nacute Aring -20
KPX Nacute Atilde -20
KPX Ncaron A -20
KPX Ncaron Aacute -20
KPX Ncaron Abreve -20
KPX Ncaron Acircumflex -20
KPX Ncaron Adieresis -20
KPX Ncaron Agrave -20
KPX Ncaron Amacron -20
KPX Ncaron Aogonek -20
KPX Ncaron Aring -20
KPX Ncaron Atilde -20
KPX Ncommaaccent A -20
KPX Ncommaaccent Aacute -20
KPX Ncommaaccent Abreve -20
KPX Ncommaaccent Acircumflex -20
KPX Ncommaaccent Adieresis -20
KPX Ncommaaccent Agrave -20
KPX Ncommaaccent Amacron -20
KPX Ncommaaccent Aogonek -20
KPX Ncommaaccent Aring -20
KPX Ncommaaccent Atilde -20
KPX Ntilde A -20
KPX Ntilde Aacute -20
KPX Ntilde Abreve -20
KPX Ntilde Acircumflex -20
KPX Ntilde Adieresis -20
KPX Ntilde Agrave -20
KPX Ntilde Amacron -20
KPX Ntilde Aogonek -20
KPX Ntilde Aring -20
KPX Ntilde Atilde -20
KPX O A -40
KPX O Aacute -40
KPX O Abreve -40
KPX O Acircumflex -40
KPX O Adieresis -40
KPX O Agrave -40
KPX O Amacron -40
KPX O Aogonek -40
KPX O Aring -40
KPX O Atilde -40
KPX O T -40
KPX O Tcaron -40
KPX O Tcommaaccent -40
KPX O V -50
KPX O W -50
KPX O X -40
KPX O Y -50
KPX O Yacute -50
KPX O Ydieresis -50
KPX Oacute A -40
KPX Oacute Aacute -40
KPX Oacute Abreve -40
KPX Oacute Acircumflex -40
KPX Oacute Adieresis -40
KPX Oacute Agrave -40
KPX Oacute Amacron -40
KPX Oacute Aogonek -40
KPX Oacute Aring -40
KPX Oacute Atilde -40
KPX Oacute T -40
KPX Oacute Tcaron -40
KPX Oacute Tcommaaccent -40
KPX Oacute V -50
KPX Oacute W -50
KPX Oacute X -40
KPX Oacute Y -50
KPX Oacute Yacute -50
KPX Oacute Ydieresis -50
KPX Ocircumflex A -40
KPX Ocircumflex Aacute -40
KPX Ocircumflex Abreve -40
KPX Ocircumflex Acircumflex -40
KPX Ocircumflex Adieresis -40
KPX Ocircumflex Agrave -40
KPX Ocircumflex Amacron -40
KPX Ocircumflex Aogonek -40
KPX Ocircumflex Aring -40
KPX Ocircumflex Atilde -40
KPX Ocircumflex T -40
KPX Ocircumflex Tcaron -40
KPX Ocircumflex Tcommaaccent -40
KPX Ocircumflex V -50
KPX Ocircumflex W -50
KPX Ocircumflex X -40
KPX Ocircumflex Y -50
KPX Ocircumflex Yacute -50
KPX Ocircumflex Ydieresis -50
KPX Odieresis A -40
KPX Odieresis Aacute -40
KPX Odieresis Abreve -40
KPX Odieresis Acircumflex -40
KPX Odieresis Adieresis -40
KPX Odieresis Agrave -40
KPX Odieresis Amacron -40
KPX Odieresis Aogonek -40
KPX Odieresis Aring -40
KPX Odieresis Atilde -40
KPX Odieresis T -40
KPX Odieresis Tcaron -40
KPX Odieresis Tcommaaccent -40
KPX Odieresis V -50
KPX Odieresis W -50
KPX Odieresis X -40
KPX Odieresis Y -50
KPX Odieresis Yacute -50
KPX Odieresis Ydieresis -50
KPX Ograve A -40
KPX Ograve Aacute -40
KPX Ograve Abreve -40
KPX Ograve Acircumflex -40
KPX Ograve Adieresis -40
KPX Ograve Agrave -40
KPX Ograve Amacron -40
KPX Ograve Aogonek -40
KPX Ograve Aring -40
KPX Ograve Atilde -40
KPX Ograve T -40
KPX Ograve Tcaron -40
KPX Ograve Tcommaaccent -40
KPX Ograve V -50
KPX Ograve W -50
KPX Ograve X -40
KPX Ograve Y -50
KPX Ograve Yacute -50
KPX Ograve Ydieresis -50
KPX Ohungarumlaut A -40
KPX Ohungarumlaut Aacute -40
KPX Ohungarumlaut Abreve -40
KPX Ohungarumlaut Acircumflex -40
KPX Ohungarumlaut Adieresis -40
KPX Ohungarumlaut Agrave -40
KPX Ohungarumlaut Amacron -40
KPX Ohungarumlaut Aogonek -40
KPX Ohungarumlaut Aring -40
KPX Ohungarumlaut Atilde -40
KPX Ohungarumlaut T -40
KPX Ohungarumlaut Tcaron -40
KPX Ohungarumlaut Tcommaaccent -40
KPX Ohungarumlaut V -50
KPX Ohungarumlaut W -50
KPX Ohungarumlaut X -40
KPX Ohungarumlaut Y -50
KPX Ohungarumlaut Yacute -50
KPX Ohungarumlaut Ydieresis -50
KPX Omacron A -40
KPX Omacron Aacute -40
KPX Omacron Abreve -40
KPX Omacron Acircumflex -40
KPX Omacron Adieresis -40
KPX Omacron Agrave -40
KPX Omacron Amacron -40
KPX Omacron Aogonek -40
KPX Omacron Aring -40
KPX Omacron Atilde -40
KPX Omacron T -40
KPX Omacron Tcaron -40
KPX Omacron Tcommaaccent -40
KPX Omacron V -50
KPX Omacron W -50
KPX Omacron X -40
KPX Omacron Y -50
KPX Omacron Yacute -50
KPX Omacron Ydieresis -50
KPX Oslash A -40
KPX Oslash Aacute -40
KPX Oslash Abreve -40
KPX Oslash Acircumflex -40
KPX Oslash Adieresis -40
KPX Oslash Agrave -40
KPX Oslash Amacron -40
KPX Oslash Aogonek -40
KPX Oslash Aring -40
KPX Oslash Atilde -40
KPX Oslash T -40
KPX Oslash Tcaron -40
KPX Oslash Tcommaaccent -40
KPX Oslash V -50
KPX Oslash W -50
KPX Oslash X -40
KPX Oslash Y -50
KPX Oslash Yacute -50
KPX Oslash Ydieresis -50
KPX Otilde A -40
KPX Otilde Aacute -40
KPX Otilde Abreve -40
KPX Otilde Acircumflex -40
KPX Otilde Adieresis -40
KPX Otilde Agrave -40
KPX Otilde Amacron -40
KPX Otilde Aogonek -40
KPX Otilde Aring -40
KPX Otilde Atilde -40
KPX Otilde T -40
KPX Otilde Tcaron -40
KPX Otilde Tcommaaccent -40
KPX Otilde V -50
KPX Otilde W -50
KPX Otilde X -40
KPX Otilde Y -50
KPX Otilde Yacute -50
KPX Otilde Ydieresis -50
KPX P A -74
KPX P Aacute -74
KPX P Abreve -74
KPX P Acircumflex -74
KPX P Adieresis -74
KPX P Agrave -74
KPX P Amacron -74
KPX P Aogonek -74
KPX P Aring -74
KPX P Atilde -74
KPX P a -10
KPX P aacute -10
KPX P abreve -10
KPX P acircumflex -10
KPX P adieresis -10
KPX P agrave -10
KPX P amacron -10
KPX P aogonek -10
KPX P aring -10
KPX P atilde -10
KPX P comma -92
KPX P e -20
KPX P eacute -20
KPX P ecaron -20
KPX P ecircumflex -20
KPX P edieresis -20
KPX P edotaccent -20
KPX P egrave -20
KPX P emacron -20
KPX P eogonek -20
KPX P o -20
KPX P oacute -20
KPX P ocircumflex -20
KPX P odieresis -20
KPX P ograve -20
KPX P ohungarumlaut -20
KPX P omacron -20
KPX P oslash -20
KPX P otilde -20
KPX P period -110
KPX Q U -10
KPX Q Uacute -10
KPX Q Ucircumflex -10
KPX Q Udieresis -10
KPX Q Ugrave -10
KPX Q Uhungarumlaut -10
KPX Q Umacron -10
KPX Q Uogonek -10
KPX Q Uring -10
KPX Q period -20
KPX R O -30
KPX R Oacute -30
KPX R Ocircumflex -30
KPX R Odieresis -30
KPX R Ograve -30
KPX R Ohungarumlaut -30
KPX R Omacron -30
KPX R Oslash -30
KPX R Otilde -30
KPX R T -40
KPX R Tcaron -40
KPX R Tcommaaccent -40
KPX R U -30
KPX R Uacute -30
KPX R Ucircumflex -30
KPX R Udieresis -30
KPX R Ugrave -30
KPX R Uhungarumlaut -30
KPX R Umacron -30
KPX R Uogonek -30
KPX R Uring -30
KPX R V -55
KPX R W -35
KPX R Y -35
KPX R Yacute -35
KPX R Ydieresis -35
KPX Racute O -30
KPX Racute Oacute -30
KPX Racute Ocircumflex -30
KPX Racute Odieresis -30
KPX Racute Ograve -30
KPX Racute Ohungarumlaut -30
KPX Racute Omacron -30
KPX Racute Oslash -30
KPX Racute Otilde -30
KPX Racute T -40
KPX Racute Tcaron -40
KPX Racute Tcommaaccent -40
KPX Racute U -30
KPX Racute Uacute -30
KPX Racute Ucircumflex -30
KPX Racute Udieresis -30
KPX Racute Ugrave -30
KPX Racute Uhungarumlaut -30
KPX Racute Umacron -30
KPX Racute Uogonek -30
KPX Racute Uring -30
KPX Racute V -55
KPX Racute W -35
KPX Racute Y -35
KPX Racute Yacute -35
KPX Racute Ydieresis -35
KPX Rcaron O -30
KPX Rcaron Oacute -30
KPX Rcaron Ocircumflex -30
KPX Rcaron Odieresis -30
KPX Rcaron Ograve -30
KPX Rcaron Ohungarumlaut -30
KPX Rcaron Omacron -30
KPX Rcaron Oslash -30
KPX Rcaron Otilde -30
KPX Rcaron T -40
KPX Rcaron Tcaron -40
KPX Rcaron Tcommaaccent -40
KPX Rcaron U -30
KPX Rcaron Uacute -30
KPX Rcaron Ucircumflex -30
KPX Rcaron Udieresis -30
KPX Rcaron Ugrave -30
KPX Rcaron Uhungarumlaut -30
KPX Rcaron Umacron -30
KPX Rcaron Uogonek -30
KPX Rcaron Uring -30
KPX Rcaron V -55
KPX Rcaron W -35
KPX Rcaron Y -35
KPX Rcaron Yacute -35
KPX Rcaron Ydieresis -35
KPX Rcommaaccent O -30
KPX Rcommaaccent Oacute -30
KPX Rcommaaccent Ocircumflex -30
KPX Rcommaaccent Odieresis -30
KPX Rcommaaccent Ograve -30
KPX Rcommaaccent Ohungarumlaut -30
KPX Rcommaaccent Omacron -30
KPX Rcommaaccent Oslash -30
KPX Rcommaaccent Otilde -30
KPX Rcommaaccent T -40
KPX Rcommaaccent Tcaron -40
KPX Rcommaaccent Tcommaaccent -40
KPX Rcommaaccent U -30
KPX Rcommaaccent Uacute -30
KPX Rcommaaccent Ucircumflex -30
KPX Rcommaaccent Udieresis -30
KPX Rcommaaccent Ugrave -30
KPX Rcommaaccent Uhungarumlaut -30
KPX Rcommaaccent Umacron -30
KPX Rcommaaccent Uogonek -30
KPX Rcommaaccent Uring -30
KPX Rcommaaccent V -55
KPX Rcommaaccent W -35
KPX Rcommaaccent Y -35
KPX Rcommaaccent Yacute -35
KPX Rcommaaccent Ydieresis -35
KPX T A -90
KPX T Aacute -90
KPX T Abreve -90
KPX T Acircumflex -90
KPX T Adieresis -90
KPX T Agrave -90
KPX T Amacron -90
KPX T Aogonek -90
KPX T Aring -90
KPX T Atilde -90
KPX T O -18
KPX T Oacute -18
KPX T Ocircumflex -18
KPX T Odieresis -18
KPX T Ograve -18
KPX T Ohungarumlaut -18
KPX T Omacron -18
KPX T Oslash -18
KPX T Otilde -18
KPX T a -92
KPX T aacute -92
KPX T abreve -52
KPX T acircumflex -52
KPX T adieresis -52
KPX T agrave -52
KPX T amacron -52
KPX T aogonek -92
KPX T aring -92
KPX T atilde -52
KPX T colon -74
KPX T comma -74
KPX T e -92
KPX T eacute -92
KPX T ecaron -92
KPX T ecircumflex -92
KPX T edieresis -52
KPX T edotaccent -92
KPX T egrave -52
KPX T emacron -52
KPX T eogonek -92
KPX T hyphen -92
KPX T i -18
KPX T iacute -18
KPX T iogonek -18
KPX T o -92
KPX T oacute -92
KPX T ocircumflex -92
KPX T odieresis -92
KPX T ograve -92
KPX T ohungarumlaut -92
KPX T omacron -92
KPX T oslash -92
KPX T otilde -92
KPX T period -90
KPX T r -74
KPX T racute -74
KPX T rcaron -74
KPX T rcommaaccent -74
KPX T semicolon -74
KPX T u -92
KPX T uacute -92
KPX T ucircumflex -92
KPX T udieresis -92
KPX T ugrave -92
KPX T uhungarumlaut -92
KPX T umacron -92
KPX T uogonek -92
KPX T uring -92
KPX T w -74
KPX T y -34
KPX T yacute -34
KPX T ydieresis -34
KPX Tcaron A -90
KPX Tcaron Aacute -90
KPX Tcaron Abreve -90
KPX Tcaron Acircumflex -90
KPX Tcaron Adieresis -90
KPX Tcaron Agrave -90
KPX Tcaron Amacron -90
KPX Tcaron Aogonek -90
KPX Tcaron Aring -90
KPX Tcaron Atilde -90
KPX Tcaron O -18
KPX Tcaron Oacute -18
KPX Tcaron Ocircumflex -18
KPX Tcaron Odieresis -18
KPX Tcaron Ograve -18
KPX Tcaron Ohungarumlaut -18
KPX Tcaron Omacron -18
KPX Tcaron Oslash -18
KPX Tcaron Otilde -18
KPX Tcaron a -92
KPX Tcaron aacute -92
KPX Tcaron abreve -52
KPX Tcaron acircumflex -52
KPX Tcaron adieresis -52
KPX Tcaron agrave -52
KPX Tcaron amacron -52
KPX Tcaron aogonek -92
KPX Tcaron aring -92
KPX Tcaron atilde -52
KPX Tcaron colon -74
KPX Tcaron comma -74
KPX Tcaron e -92
KPX Tcaron eacute -92
KPX Tcaron ecaron -92
KPX Tcaron ecircumflex -92
KPX Tcaron edieresis -52
KPX Tcaron edotaccent -92
KPX Tcaron egrave -52
KPX Tcaron emacron -52
KPX Tcaron eogonek -92
KPX Tcaron hyphen -92
KPX Tcaron i -18
KPX Tcaron iacute -18
KPX Tcaron iogonek -18
KPX Tcaron o -92
KPX Tcaron oacute -92
KPX Tcaron ocircumflex -92
KPX Tcaron odieresis -92
KPX Tcaron ograve -92
KPX Tcaron ohungarumlaut -92
KPX Tcaron omacron -92
KPX Tcaron oslash -92
KPX Tcaron otilde -92
KPX Tcaron period -90
KPX Tcaron r -74
KPX Tcaron racute -74
KPX Tcaron rcaron -74
KPX Tcaron rcommaaccent -74
KPX Tcaron semicolon -74
KPX Tcaron u -92
KPX Tcaron uacute -92
KPX Tcaron ucircumflex -92
KPX Tcaron udieresis -92
KPX Tcaron ugrave -92
KPX Tcaron uhungarumlaut -92
KPX Tcaron umacron -92
KPX Tcaron uogonek -92
KPX Tcaron uring -92
KPX Tcaron w -74
KPX Tcaron y -34
KPX Tcaron yacute -34
KPX Tcaron ydieresis -34
KPX Tcommaaccent A -90
KPX Tcommaaccent Aacute -90
KPX Tcommaaccent Abreve -90
KPX Tcommaaccent Acircumflex -90
KPX Tcommaaccent Adieresis -90
KPX Tcommaaccent Agrave -90
KPX Tcommaaccent Amacron -90
KPX Tcommaaccent Aogonek -90
KPX Tcommaaccent Aring -90
KPX Tcommaaccent Atilde -90
KPX Tcommaaccent O -18
KPX Tcommaaccent Oacute -18
KPX Tcommaaccent Ocircumflex -18
KPX Tcommaaccent Odieresis -18
KPX Tcommaaccent Ograve -18
KPX Tcommaaccent Ohungarumlaut -18
KPX Tcommaaccent Omacron -18
KPX Tcommaaccent Oslash -18
KPX Tcommaaccent Otilde -18
KPX Tcommaaccent a -92
KPX Tcommaaccent aacute -92
KPX Tcommaaccent abreve -52
KPX Tcommaaccent acircumflex -52
KPX Tcommaaccent adieresis -52
KPX Tcommaaccent agrave -52
KPX Tcommaaccent amacron -52
KPX Tcommaaccent aogonek -92
KPX Tcommaaccent aring -92
KPX Tcommaaccent atilde -52
KPX Tcommaaccent colon -74
KPX Tcommaaccent comma -74
KPX Tcommaaccent e -92
KPX Tcommaaccent eacute -92
KPX Tcommaaccent ecaron -92
KPX Tcommaaccent ecircumflex -92
KPX Tcommaaccent edieresis -52
KPX Tcommaaccent edotaccent -92
KPX Tcommaaccent egrave -52
KPX Tcommaaccent emacron -52
KPX Tcommaaccent eogonek -92
KPX Tcommaaccent hyphen -92
KPX Tcommaaccent i -18
KPX Tcommaaccent iacute -18
KPX Tcommaaccent iogonek -18
KPX Tcommaaccent o -92
KPX Tcommaaccent oacute -92
KPX Tcommaaccent ocircumflex -92
KPX Tcommaaccent odieresis -92
KPX Tcommaaccent ograve -92
KPX Tcommaaccent ohungarumlaut -92
KPX Tcommaaccent omacron -92
KPX Tcommaaccent oslash -92
KPX Tcommaaccent otilde -92
KPX Tcommaaccent period -90
KPX Tcommaaccent r -74
KPX Tcommaaccent racute -74
KPX Tcommaaccent rcaron -74
KPX Tcommaaccent rcommaaccent -74
KPX Tcommaaccent semicolon -74
KPX Tcommaaccent u -92
KPX Tcommaaccent uacute -92
KPX Tcommaaccent ucircumflex -92
KPX Tcommaaccent udieresis -92
KPX Tcommaaccent ugrave -92
KPX Tcommaaccent uhungarumlaut -92
KPX Tcommaaccent umacron -92
KPX Tcommaaccent uogonek -92
KPX Tcommaaccent uring -92
KPX Tcommaaccent w -74
KPX Tcommaaccent y -34
KPX Tcommaaccent yacute -34
KPX Tcommaaccent ydieresis -34
KPX U A -60
KPX U Aacute -60
KPX U Abreve -60
KPX U Acircumflex -60
KPX U Adieresis -60
KPX U Agrave -60
KPX U Amacron -60
KPX U Aogonek -60
KPX U Aring -60
KPX U Atilde -60
KPX U comma -50
KPX U period -50
KPX Uacute A -60
KPX Uacute Aacute -60
KPX Uacute Abreve -60
KPX Uacute Acircumflex -60
KPX Uacute Adieresis -60
KPX Uacute Agrave -60
KPX Uacute Amacron -60
KPX Uacute Aogonek -60
KPX Uacute Aring -60
KPX Uacute Atilde -60
KPX Uacute comma -50
KPX Uacute period -50
KPX Ucircumflex A -60
KPX Ucircumflex Aacute -60
KPX Ucircumflex Abreve -60
KPX Ucircumflex Acircumflex -60
KPX Ucircumflex Adieresis -60
KPX Ucircumflex Agrave -60
KPX Ucircumflex Amacron -60
KPX Ucircumflex Aogonek -60
KPX Ucircumflex Aring -60
KPX Ucircumflex Atilde -60
KPX Ucircumflex comma -50
KPX Ucircumflex period -50
KPX Udieresis A -60
KPX Udieresis Aacute -60
KPX Udieresis Abreve -60
KPX Udieresis Acircumflex -60
KPX Udieresis Adieresis -60
KPX Udieresis Agrave -60
KPX Udieresis Amacron -60
KPX Udieresis Aogonek -60
KPX Udieresis Aring -60
KPX Udieresis Atilde -60
KPX Udieresis comma -50
KPX Udieresis period -50
KPX Ugrave A -60
KPX Ugrave Aacute -60
KPX Ugrave Abreve -60
KPX Ugrave Acircumflex -60
KPX Ugrave Adieresis -60
KPX Ugrave Agrave -60
KPX Ugrave Amacron -60
KPX Ugrave Aogonek -60
KPX Ugrave Aring -60
KPX Ugrave Atilde -60
KPX Ugrave comma -50
KPX Ugrave period -50
KPX Uhungarumlaut A -60
KPX Uhungarumlaut Aacute -60
KPX Uhungarumlaut Abreve -60
KPX Uhungarumlaut Acircumflex -60
KPX Uhungarumlaut Adieresis -60
KPX Uhungarumlaut Agrave -60
KPX Uhungarumlaut Amacron -60
KPX Uhungarumlaut Aogonek -60
KPX Uhungarumlaut Aring -60
KPX Uhungarumlaut Atilde -60
KPX Uhungarumlaut comma -50
KPX Uhungarumlaut period -50
KPX Umacron A -60
KPX Umacron Aacute -60
KPX Umacron Abreve -60
KPX Umacron Acircumflex -60
KPX Umacron Adieresis -60
KPX Umacron Agrave -60
KPX Umacron Amacron -60
KPX Umacron Aogonek -60
KPX Umacron Aring -60
KPX Umacron Atilde -60
KPX Umacron comma -50
KPX Umacron period -50
KPX Uogonek A -60
KPX Uogonek Aacute -60
KPX Uogonek Abreve -60
KPX Uogonek Acircumflex -60
KPX Uogonek Adieresis -60
KPX Uogonek Agrave -60
KPX Uogonek Amacron -60
KPX Uogonek Aogonek -60
KPX Uogonek Aring -60
KPX Uogonek Atilde -60
KPX Uogonek comma -50
KPX Uogonek period -50
KPX Uring A -60
KPX Uring Aacute -60
KPX Uring Abreve -60
KPX Uring Acircumflex -60
KPX Uring Adieresis -60
KPX Uring Agrave -60
KPX Uring Amacron -60
KPX Uring Aogonek -60
KPX Uring Aring -60
KPX Uring Atilde -60
KPX Uring comma -50
KPX Uring period -50
KPX V A -135
KPX V Aacute -135
KPX V Abreve -135
KPX V Acircumflex -135
KPX V Adieresis -135
KPX V Agrave -135
KPX V Amacron -135
KPX V Aogonek -135
KPX V Aring -135
KPX V Atilde -135
KPX V G -30
KPX V Gbreve -30
KPX V Gcommaaccent -30
KPX V O -45
KPX V Oacute -45
KPX V Ocircumflex -45
KPX V Odieresis -45
KPX V Ograve -45
KPX V Ohungarumlaut -45
KPX V Omacron -45
KPX V Oslash -45
KPX V Otilde -45
KPX V a -92
KPX V aacute -92
KPX V abreve -92
KPX V acircumflex -92
KPX V adieresis -92
KPX V agrave -92
KPX V amacron -92
KPX V aogonek -92
KPX V aring -92
KPX V atilde -92
KPX V colon -92
KPX V comma -129
KPX V e -100
KPX V eacute -100
KPX V ecaron -100
KPX V ecircumflex -100
KPX V edieresis -100
KPX V edotaccent -100
KPX V egrave -100
KPX V emacron -100
KPX V eogonek -100
KPX V hyphen -74
KPX V i -37
KPX V iacute -37
KPX V icircumflex -37
KPX V idieresis -37
KPX V igrave -37
KPX V imacron -37
KPX V iogonek -37
KPX V o -100
KPX V oacute -100
KPX V ocircumflex -100
KPX V odieresis -100
KPX V ograve -100
KPX V ohungarumlaut -100
KPX V omacron -100
KPX V oslash -100
KPX V otilde -100
KPX V period -145
KPX V semicolon -92
KPX V u -92
KPX V uacute -92
KPX V ucircumflex -92
KPX V udieresis -92
KPX V ugrave -92
KPX V uhungarumlaut -92
KPX V umacron -92
KPX V uogonek -92
KPX V uring -92
KPX W A -120
KPX W Aacute -120
KPX W Abreve -120
KPX W Acircumflex -120
KPX W Adieresis -120
KPX W Agrave -120
KPX W Amacron -120
KPX W Aogonek -120
KPX W Aring -120
KPX W Atilde -120
KPX W O -10
KPX W Oacute -10
KPX W Ocircumflex -10
KPX W Odieresis -10
KPX W Ograve -10
KPX W Ohungarumlaut -10
KPX W Omacron -10
KPX W Oslash -10
KPX W Otilde -10
KPX W a -65
KPX W aacute -65
KPX W abreve -65
KPX W acircumflex -65
KPX W adieresis -65
KPX W agrave -65
KPX W amacron -65
KPX W aogonek -65
KPX W aring -65
KPX W atilde -65
KPX W colon -55
KPX W comma -92
KPX W e -65
KPX W eacute -65
KPX W ecaron -65
KPX W ecircumflex -65
KPX W edieresis -65
KPX W edotaccent -65
KPX W egrave -65
KPX W emacron -65
KPX W eogonek -65
KPX W hyphen -37
KPX W i -18
KPX W iacute -18
KPX W iogonek -18
KPX W o -75
KPX W oacute -75
KPX W ocircumflex -75
KPX W odieresis -75
KPX W ograve -75
KPX W ohungarumlaut -75
KPX W omacron -75
KPX W oslash -75
KPX W otilde -75
KPX W period -92
KPX W semicolon -55
KPX W u -50
KPX W uacute -50
KPX W ucircumflex -50
KPX W udieresis -50
KPX W ugrave -50
KPX W uhungarumlaut -50
KPX W umacron -50
KPX W uogonek -50
KPX W uring -50
KPX W y -60
KPX W yacute -60
KPX W ydieresis -60
KPX Y A -110
KPX Y Aacute -110
KPX Y Abreve -110
KPX Y Acircumflex -110
KPX Y Adieresis -110
KPX Y Agrave -110
KPX Y Amacron -110
KPX Y Aogonek -110
KPX Y Aring -110
KPX Y Atilde -110
KPX Y O -35
KPX Y Oacute -35
KPX Y Ocircumflex -35
KPX Y Odieresis -35
KPX Y Ograve -35
KPX Y Ohungarumlaut -35
KPX Y Omacron -35
KPX Y Oslash -35
KPX Y Otilde -35
KPX Y a -85
KPX Y aacute -85
KPX Y abreve -85
KPX Y acircumflex -85
KPX Y adieresis -85
KPX Y agrave -85
KPX Y amacron -85
KPX Y aogonek -85
KPX Y aring -85
KPX Y atilde -85
KPX Y colon -92
KPX Y comma -92
KPX Y e -111
KPX Y eacute -111
KPX Y ecaron -111
KPX Y ecircumflex -111
KPX Y edieresis -71
KPX Y edotaccent -111
KPX Y egrave -71
KPX Y emacron -71
KPX Y eogonek -111
KPX Y hyphen -92
KPX Y i -37
KPX Y iacute -37
KPX Y iogonek -37
KPX Y o -111
KPX Y oacute -111
KPX Y ocircumflex -111
KPX Y odieresis -111
KPX Y ograve -111
KPX Y ohungarumlaut -111
KPX Y omacron -111
KPX Y oslash -111
KPX Y otilde -111
KPX Y period -92
KPX Y semicolon -92
KPX Y u -92
KPX Y uacute -92
KPX Y ucircumflex -92
KPX Y udieresis -92
KPX Y ugrave -92
KPX Y uhungarumlaut -92
KPX Y umacron -92
KPX Y uogonek -92
KPX Y uring -92
KPX Yacute A -110
KPX Yacute Aacute -110
KPX Yacute Abreve -110
KPX Yacute Acircumflex -110
KPX Yacute Adieresis -110
KPX Yacute Agrave -110
KPX Yacute Amacron -110
KPX Yacute Aogonek -110
KPX Yacute Aring -110
KPX Yacute Atilde -110
KPX Yacute O -35
KPX Yacute Oacute -35
KPX Yacute Ocircumflex -35
KPX Yacute Odieresis -35
KPX Yacute Ograve -35
KPX Yacute Ohungarumlaut -35
KPX Yacute Omacron -35
KPX Yacute Oslash -35
KPX Yacute Otilde -35
KPX Yacute a -85
KPX Yacute aacute -85
KPX Yacute abreve -85
KPX Yacute acircumflex -85
KPX Yacute adieresis -85
KPX Yacute agrave -85
KPX Yacute amacron -85
KPX Yacute aogonek -85
KPX Yacute aring -85
KPX Yacute atilde -85
KPX Yacute colon -92
KPX Yacute comma -92
KPX Yacute e -111
KPX Yacute eacute -111
KPX Yacute ecaron -111
KPX Yacute ecircumflex -111
KPX Yacute edieresis -71
KPX Yacute edotaccent -111
KPX Yacute egrave -71
KPX Yacute emacron -71
KPX Yacute eogonek -111
KPX Yacute hyphen -92
KPX Yacute i -37
KPX Yacute iacute -37
KPX Yacute iogonek -37
KPX Yacute o -111
KPX Yacute oacute -111
KPX Yacute ocircumflex -111
KPX Yacute odieresis -111
KPX Yacute ograve -111
KPX Yacute ohungarumlaut -111
KPX Yacute omacron -111
KPX Yacute oslash -111
KPX Yacute otilde -111
KPX Yacute period -92
KPX Yacute semicolon -92
KPX Yacute u -92
KPX Yacute uacute -92
KPX Yacute ucircumflex -92
KPX Yacute udieresis -92
KPX Yacute ugrave -92
KPX Yacute uhungarumlaut -92
KPX Yacute umacron -92
KPX Yacute uogonek -92
KPX Yacute uring -92
KPX Ydieresis A -110
KPX Ydieresis Aacute -110
KPX Ydieresis Abreve -110
KPX Ydieresis Acircumflex -110
KPX Ydieresis Adieresis -110
KPX Ydieresis Agrave -110
KPX Ydieresis Amacron -110
KPX Ydieresis Aogonek -110
KPX Ydieresis Aring -110
KPX Ydieresis Atilde -110
KPX Ydieresis O -35
KPX Ydieresis Oacute -35
KPX Ydieresis Ocircumflex -35
KPX Ydieresis Odieresis -35
KPX Ydieresis Ograve -35
KPX Ydieresis Ohungarumlaut -35
KPX Ydieresis Omacron -35
KPX Ydieresis Oslash -35
KPX Ydieresis Otilde -35
KPX Ydieresis a -85
KPX Ydieresis aacute -85
KPX Ydieresis abreve -85
KPX Ydieresis acircumflex -85
KPX Ydieresis adieresis -85
KPX Ydieresis agrave -85
KPX Ydieresis amacron -85
KPX Ydieresis aogonek -85
KPX Ydieresis aring -85
KPX Ydieresis atilde -85
KPX Ydieresis colon -92
KPX Ydieresis comma -92
KPX Ydieresis e -111
KPX Ydieresis eacute -111
KPX Ydieresis ecaron -111
KPX Ydieresis ecircumflex -111
KPX Ydieresis edieresis -71
KPX Ydieresis edotaccent -111
KPX Ydieresis egrave -71
KPX Ydieresis emacron -71
KPX Ydieresis eogonek -111
KPX Ydieresis hyphen -92
KPX Ydieresis i -37
KPX Ydieresis iacute -37
KPX Ydieresis iogonek -37
KPX Ydieresis o -111
KPX Ydieresis oacute -111
KPX Ydieresis ocircumflex -111
KPX Ydieresis odieresis -111
KPX Ydieresis ograve -111
KPX Ydieresis ohungarumlaut -111
KPX Ydieresis omacron -111
KPX Ydieresis oslash -111
KPX Ydieresis otilde -111
KPX Ydieresis period -92
KPX Ydieresis semicolon -92
KPX Ydieresis u -92
KPX Ydieresis uacute -92
KPX Ydieresis ucircumflex -92
KPX Ydieresis udieresis -92
KPX Ydieresis ugrave -92
KPX Ydieresis uhungarumlaut -92
KPX Ydieresis umacron -92
KPX Ydieresis uogonek -92
KPX Ydieresis uring -92
KPX a v -25
KPX aacute v -25
KPX abreve v -25
KPX acircumflex v -25
KPX adieresis v -25
KPX agrave v -25
KPX amacron v -25
KPX aogonek v -25
KPX aring v -25
KPX atilde v -25
KPX b b -10
KPX b period -40
KPX b u -20
KPX b uacute -20
KPX b ucircumflex -20
KPX b udieresis -20
KPX b ugrave -20
KPX b uhungarumlaut -20
KPX b umacron -20
KPX b uogonek -20
KPX b uring -20
KPX b v -15
KPX comma quotedblright -45
KPX comma quoteright -55
KPX d w -15
KPX dcroat w -15
KPX e v -15
KPX eacute v -15
KPX ecaron v -15
KPX ecircumflex v -15
KPX edieresis v -15
KPX edotaccent v -15
KPX egrave v -15
KPX emacron v -15
KPX eogonek v -15
KPX f comma -15
KPX f dotlessi -35
KPX f i -25
KPX f o -25
KPX f oacute -25
KPX f ocircumflex -25
KPX f odieresis -25
KPX f ograve -25
KPX f ohungarumlaut -25
KPX f omacron -25
KPX f oslash -25
KPX f otilde -25
KPX f period -15
KPX f quotedblright 50
KPX f quoteright 55
KPX g period -15
KPX gbreve period -15
KPX gcommaaccent period -15
KPX h y -15
KPX h yacute -15
KPX h ydieresis -15
KPX i v -10
KPX iacute v -10
KPX icircumflex v -10
KPX idieresis v -10
KPX igrave v -10
KPX imacron v -10
KPX iogonek v -10
KPX k e -10
KPX k eacute -10
KPX k ecaron -10
KPX k ecircumflex -10
KPX k edieresis -10
KPX k edotaccent -10
KPX k egrave -10
KPX k emacron -10
KPX k eogonek -10
KPX k o -15
KPX k oacute -15
KPX k ocircumflex -15
KPX k odieresis -15
KPX k ograve -15
KPX k ohungarumlaut -15
KPX k omacron -15
KPX k oslash -15
KPX k otilde -15
KPX k y -15
KPX k yacute -15
KPX k ydieresis -15
KPX kcommaaccent e -10
KPX kcommaaccent eacute -10
KPX kcommaaccent ecaron -10
KPX kcommaaccent ecircumflex -10
KPX kcommaaccent edieresis -10
KPX kcommaaccent edotaccent -10
KPX kcommaaccent egrave -10
KPX kcommaaccent emacron -10
KPX kcommaaccent eogonek -10
KPX kcommaaccent o -15
KPX kcommaaccent oacute -15
KPX kcommaaccent ocircumflex -15
KPX kcommaaccent odieresis -15
KPX kcommaaccent ograve -15
KPX kcommaaccent ohungarumlaut -15
KPX kcommaaccent omacron -15
KPX kcommaaccent oslash -15
KPX kcommaaccent otilde -15
KPX kcommaaccent y -15
KPX kcommaaccent yacute -15
KPX kcommaaccent ydieresis -15
KPX n v -40
KPX nacute v -40
KPX ncaron v -40
KPX ncommaaccent v -40
KPX ntilde v -40
KPX o v -10
KPX o w -10
KPX oacute v -10
KPX oacute w -10
KPX ocircumflex v -10
KPX ocircumflex w -10
KPX odieresis v -10
KPX odieresis w -10
KPX ograve v -10
KPX ograve w -10
KPX ohungarumlaut v -10
KPX ohungarumlaut w -10
KPX omacron v -10
KPX omacron w -10
KPX oslash v -10
KPX oslash w -10
KPX otilde v -10
KPX otilde w -10
KPX period quotedblright -55
KPX period quoteright -55
KPX quotedblleft A -10
KPX quotedblleft Aacute -10
KPX quotedblleft Abreve -10
KPX quotedblleft Acircumflex -10
KPX quotedblleft Adieresis -10
KPX quotedblleft Agrave -10
KPX quotedblleft Amacron -10
KPX quotedblleft Aogonek -10
KPX quotedblleft Aring -10
KPX quotedblleft Atilde -10
KPX quoteleft A -10
KPX quoteleft Aacute -10
KPX quoteleft Abreve -10
KPX quoteleft Acircumflex -10
KPX quoteleft Adieresis -10
KPX quoteleft Agrave -10
KPX quoteleft Amacron -10
KPX quoteleft Aogonek -10
KPX quoteleft Aring -10
KPX quoteleft Atilde -10
KPX quoteleft quoteleft -63
KPX quoteright d -20
KPX quoteright dcroat -20
KPX quoteright quoteright -63
KPX quoteright r -20
KPX quoteright racute -20
KPX quoteright rcaron -20
KPX quoteright rcommaaccent -20
KPX quoteright s -37
KPX quoteright sacute -37
KPX quoteright scaron -37
KPX quoteright scedilla -37
KPX quoteright scommaaccent -37
KPX quoteright space -74
KPX quoteright v -20
KPX r c -18
KPX r cacute -18
KPX r ccaron -18
KPX r ccedilla -18
KPX r comma -92
KPX r e -18
KPX r eacute -18
KPX r ecaron -18
KPX r ecircumflex -18
KPX r edieresis -18
KPX r edotaccent -18
KPX r egrave -18
KPX r emacron -18
KPX r eogonek -18
KPX r g -10
KPX r gbreve -10
KPX r gcommaaccent -10
KPX r hyphen -37
KPX r n -15
KPX r nacute -15
KPX r ncaron -15
KPX r ncommaaccent -15
KPX r ntilde -15
KPX r o -18
KPX r oacute -18
KPX r ocircumflex -18
KPX r odieresis -18
KPX r ograve -18
KPX r ohungarumlaut -18
KPX r omacron -18
KPX r oslash -18
KPX r otilde -18
KPX r p -10
KPX r period -100
KPX r q -18
KPX r v -10
KPX racute c -18
KPX racute cacute -18
KPX racute ccaron -18
KPX racute ccedilla -18
KPX racute comma -92
KPX racute e -18
KPX racute eacute -18
KPX racute ecaron -18
KPX racute ecircumflex -18
KPX racute edieresis -18
KPX racute edotaccent -18
KPX racute egrave -18
KPX racute emacron -18
KPX racute eogonek -18
KPX racute g -10
KPX racute gbreve -10
KPX racute gcommaaccent -10
KPX racute hyphen -37
KPX racute n -15
KPX racute nacute -15
KPX racute ncaron -15
KPX racute ncommaaccent -15
KPX racute ntilde -15
KPX racute o -18
KPX racute oacute -18
KPX racute ocircumflex -18
KPX racute odieresis -18
KPX racute ograve -18
KPX racute ohungarumlaut -18
KPX racute omacron -18
KPX racute oslash -18
KPX racute otilde -18
KPX racute p -10
KPX racute period -100
KPX racute q -18
KPX racute v -10
KPX rcaron c -18
KPX rcaron cacute -18
KPX rcaron ccaron -18
KPX rcaron ccedilla -18
KPX rcaron comma -92
KPX rcaron e -18
KPX rcaron eacute -18
KPX rcaron ecaron -18
KPX rcaron ecircumflex -18
KPX rcaron edieresis -18
KPX rcaron edotaccent -18
KPX rcaron egrave -18
KPX rcaron emacron -18
KPX rcaron eogonek -18
KPX rcaron g -10
KPX rcaron gbreve -10
KPX rcaron gcommaaccent -10
KPX rcaron hyphen -37
KPX rcaron n -15
KPX rcaron nacute -15
KPX rcaron ncaron -15
KPX rcaron ncommaaccent -15
KPX rcaron ntilde -15
KPX rcaron o -18
KPX rcaron oacute -18
KPX rcaron ocircumflex -18
KPX rcaron odieresis -18
KPX rcaron ograve -18
KPX rcaron ohungarumlaut -18
KPX rcaron omacron -18
KPX rcaron oslash -18
KPX rcaron otilde -18
KPX rcaron p -10
KPX rcaron period -100
KPX rcaron q -18
KPX rcaron v -10
KPX rcommaaccent c -18
KPX rcommaaccent cacute -18
KPX rcommaaccent ccaron -18
KPX rcommaaccent ccedilla -18
KPX rcommaaccent comma -92
KPX rcommaaccent e -18
KPX rcommaaccent eacute -18
KPX rcommaaccent ecaron -18
KPX rcommaaccent ecircumflex -18
KPX rcommaaccent edieresis -18
KPX rcommaaccent edotaccent -18
KPX rcommaaccent egrave -18
KPX rcommaaccent emacron -18
KPX rcommaaccent eogonek -18
KPX rcommaaccent g -10
KPX rcommaaccent gbreve -10
KPX rcommaaccent gcommaaccent -10
KPX rcommaaccent hyphen -37
KPX rcommaaccent n -15
KPX rcommaaccent nacute -15
KPX rcommaaccent ncaron -15
KPX rcommaaccent ncommaaccent -15
KPX rcommaaccent ntilde -15
KPX rcommaaccent o -18
KPX rcommaaccent oacute -18
KPX rcommaaccent ocircumflex -18
KPX rcommaaccent odieresis -18
KPX rcommaaccent ograve -18
KPX rcommaaccent ohungarumlaut -18
KPX rcommaaccent omacron -18
KPX rcommaaccent oslash -18
KPX rcommaaccent otilde -18
KPX rcommaaccent p -10
KPX rcommaaccent period -100
KPX rcommaaccent q -18
KPX rcommaaccent v -10
KPX space A -55
KPX space Aacute -55
KPX space Abreve -55
KPX space Acircumflex -55
KPX space Adieresis -55
KPX space Agrave -55
KPX space Amacron -55
KPX space Aogonek -55
KPX space Aring -55
KPX space Atilde -55
KPX space T -30
KPX space Tcaron -30
KPX space Tcommaaccent -30
KPX space V -45
KPX space W -30
KPX space Y -55
KPX space Yacute -55
KPX space Ydieresis -55
KPX v a -10
KPX v aacute -10
KPX v abreve -10
KPX v acircumflex -10
KPX v adieresis -10
KPX v agrave -10
KPX v amacron -10
KPX v aogonek -10
KPX v aring -10
KPX v atilde -10
KPX v comma -55
KPX v e -10
KPX v eacute -10
KPX v ecaron -10
KPX v ecircumflex -10
KPX v edieresis -10
KPX v edotaccent -10
KPX v egrave -10
KPX v emacron -10
KPX v eogonek -10
KPX v o -10
KPX v oacute -10
KPX v ocircumflex -10
KPX v odieresis -10
KPX v ograve -10
KPX v ohungarumlaut -10
KPX v omacron -10
KPX v oslash -10
KPX v otilde -10
KPX v period -70
KPX w comma -55
KPX w o -10
KPX w oacute -10
KPX w ocircumflex -10
KPX w odieresis -10
KPX w ograve -10
KPX w ohungarumlaut -10
KPX w omacron -10
KPX w oslash -10
KPX w otilde -10
KPX w period -70
KPX y comma -55
KPX y e -10
KPX y eacute -10
KPX y ecaron -10
KPX y ecircumflex -10
KPX y edieresis -10
KPX y edotaccent -10
KPX y egrave -10
KPX y emacron -10
KPX y eogonek -10
KPX y o -25
KPX y oacute -25
KPX y ocircumflex -25
KPX y odieresis -25
KPX y ograve -25
KPX y ohungarumlaut -25
KPX y omacron -25
KPX y oslash -25
KPX y otilde -25
KPX y period -70
KPX yacute comma -55
KPX yacute e -10
KPX yacute eacute -10
KPX yacute ecaron -10
KPX yacute ecircumflex -10
KPX yacute edieresis -10
KPX yacute edotaccent -10
KPX yacute egrave -10
KPX yacute emacron -10
KPX yacute eogonek -10
KPX yacute o -25
KPX yacute oacute -25
KPX yacute ocircumflex -25
KPX yacute odieresis -25
KPX yacute ograve -25
KPX yacute ohungarumlaut -25
KPX yacute omacron -25
KPX yacute oslash -25
KPX yacute otilde -25
KPX yacute period -70
KPX ydieresis comma -55
KPX ydieresis e -10
KPX ydieresis eacute -10
KPX ydieresis ecaron -10
KPX ydieresis ecircumflex -10
KPX ydieresis edieresis -10
KPX ydieresis edotaccent -10
KPX ydieresis egrave -10
KPX ydieresis emacron -10
KPX ydieresis eogonek -10
KPX ydieresis o -25
KPX ydieresis oacute -25
KPX ydieresis ocircumflex -25
KPX ydieresis odieresis -25
KPX ydieresis ograve -25
KPX ydieresis ohungarumlaut -25
KPX ydieresis omacron -25
KPX ydieresis oslash -25
KPX ydieresis otilde -25
KPX ydieresis period -70
EndKernPairs
EndKernData
EndFontMetrics
StartFontMetrics 4.1
Comment Copyright (c) 1985, 1987, 1989, 1990, 1993, 1997 Adobe Systems Incorporated.  All Rights Reserved.
Comment Creation Date: Thu May  1 13:04:06 1997
Comment UniqueID 43066
Comment VMusage 45874 56899
FontName Times-BoldItalic
FullName Times Bold Italic
FamilyName Times
Weight Bold
ItalicAngle -15
IsFixedPitch false
CharacterSet ExtendedRoman
FontBBox -200 -218 996 921
UnderlinePosition -100
UnderlineThickness 50
Version 002.000
Notice Copyright (c) 1985, 1987, 1989, 1990, 1993, 1997 Adobe Systems Incorporated.  All Rights Reserved.Times is a trademark of Linotype-Hell AG and/or its subsidiaries.
EncodingScheme WinAnsiEncoding
CapHeight 669
XHeight 462
Ascender 683
Descender -217
StdHW 42
StdVW 121
StartCharMetrics 317
C 32 ; WX 250 ; N space ; B 0 0 0 0 ;
C 160 ; WX 250 ; N space ; B 0 0 0 0 ;
C 33 ; WX 389 ; N exclam ; B 67 -13 370 684 ;
C 34 ; WX 555 ; N quotedbl ; B 136 398 536 685 ;
C 35 ; WX 500 ; N numbersign ; B -33 0 533 700 ;
C 36 ; WX 500 ; N dollar ; B -20 -100 497 733 ;
C 37 ; WX 833 ; N percent ; B 39 -10 793 692 ;
C 38 ; WX 778 ; N ampersand ; B 5 -19 699 682 ;
C 146 ; WX 333 ; N quoteright ; B 98 369 302 685 ;
C 40 ; WX 333 ; N parenleft ; B 28 -179 344 685 ;
C 41 ; WX 333 ; N parenright ; B -44 -179 271 685 ;
C 42 ; WX 500 ; N asterisk ; B 65 249 456 685 ;
C 43 ; WX 570 ; N plus ; B 33 0 537 506 ;
C 44 ; WX 250 ; N comma ; B -60 -182 144 134 ;
C 45 ; WX 333 ; N hyphen ; B 2 166 271 282 ;
C 173 ; WX 333 ; N hyphen ; B 2 166 271 282 ;
C 46 ; WX 250 ; N period ; B -9 -13 139 135 ;
C 47 ; WX 278 ; N slash ; B -64 -18 342 685 ;
C 48 ; WX 500 ; N zero ; B 17 -14 477 683 ;
C 49 ; WX 500 ; N one ; B 5 0 419 683 ;
C 50 ; WX 500 ; N two ; B -27 0 446 683 ;
C 51 ; WX 500 ; N three ; B -15 -13 450 683 ;
C 52 ; WX 500 ; N four ; B -15 0 503 683 ;
C 53 ; WX 500 ; N five ; B -11 -13 487 669 ;
C 54 ; WX 500 ; N six ; B 23 -15 509 679 ;
C 55 ; WX 500 ; N seven ; B 52 0 525 669 ;
C 56 ; WX 500 ; N eight ; B 3 -13 476 683 ;
C 57 ; WX 500 ; N nine ; B -12 -10 475 683 ;
C 58 ; WX 333 ; N colon ; B 23 -13 264 459 ;
C 59 ; WX 333 ; N semicolon ; B -25 -183 264 459 ;
C 60 ; WX 570 ; N less ; B 31 -8 539 514 ;
C 61 ; WX 570 ; N equal ; B 33 107 537 399 ;
C 62 ; WX 570 ; N greater ; B 31 -8 539 514 ;
C 63 ; WX 500 ; N question ; B 79 -13 470 684 ;
C 64 ; WX 832 ; N at ; B 63 -18 770 685 ;
C 65 ; WX 667 ; N A ; B -67 0 593 683 ;
C 66 ; WX 667 ; N B ; B -24 0 624 669 ;
C 67 ; WX 667 ; N C ; B 32 -18 677 685 ;
C 68 ; WX 722 ; N D ; B -46 0 685 669 ;
C 69 ; WX 667 ; N E ; B -27 0 653 669 ;
C 70 ; WX 667 ; N F ; B -13 0 660 669 ;
C 71 ; WX 722 ; N G ; B 21 -18 706 685 ;
C 72 ; WX 778 ; N H ; B -24 0 799 669 ;
C 73 ; WX 389 ; N I ; B -32 0 406 669 ;
C 74 ; WX 500 ; N J ; B -46 -99 524 669 ;
C 75 ; WX 667 ; N K ; B -21 0 702 669 ;
C 76 ; WX 611 ; N L ; B -22 0 590 669 ;
C 77 ; WX 889 ; N M ; B -29 -12 917 669 ;
C 78 ; WX 722 ; N N ; B -27 -15 748 669 ;
C 79 ; WX 722 ; N O ; B 27 -18 691 685 ;
C 80 ; WX 611 ; N P ; B -27 0 613 669 ;
C 81 ; WX 722 ; N Q ; B 27 -208 691 685 ;
C 82 ; WX 667 ; N R ; B -29 0 623 669 ;
C 83 ; WX 556 ; N S ; B 2 -18 526 685 ;
C 84 ; WX 611 ; N T ; B 50 0 650 669 ;
C 85 ; WX 722 ; N U ; B 67 -18 744 669 ;
C 86 ; WX 667 ; N V ; B 65 -18 715 669 ;
C 87 ; WX 889 ; N W ; B 65 -18 940 669 ;
C 88 ; WX 667 ; N X ; B -24 0 694 669 ;
C 89 ; WX 611 ; N Y ; B 73 0 659 669 ;
C 90 ; WX 611 ; N Z ; B -11 0 590 669 ;
C 91 ; WX 333 ; N bracketleft ; B -37 -159 362 674 ;
C 92 ; WX 278 ; N backslash ; B -1 -18 279 685 ;
C 93 ; WX 333 ; N bracketright ; B -56 -157 343 674 ;
C 94 ; WX 570 ; N asciicircum ; B 67 304 503 669 ;
C 95 ; WX 500 ; N underscore ; B 0 -125 500 -75 ;
C 145 ; WX 333 ; N quoteleft ; B 128 369 332 685 ;
C 97 ; WX 500 ; N a ; B -21 -14 455 462 ;
C 98 ; WX 500 ; N b ; B -14 -13 444 699 ;
C 99 ; WX 444 ; N c ; B -5 -13 392 462 ;
C 100 ; WX 500 ; N d ; B -21 -13 517 699 ;
C 101 ; WX 444 ; N e ; B 5 -13 398 462 ;
C 102 ; WX 333 ; N f ; B -169 -205 446 698 ; L i fi ; L l fl ;
C 103 ; WX 500 ; N g ; B -52 -203 478 462 ;
C 104 ; WX 556 ; N h ; B -13 -9 498 699 ;
C 105 ; WX 278 ; N i ; B 2 -9 263 684 ;
C 106 ; WX 278 ; N j ; B -189 -207 279 684 ;
C 107 ; WX 500 ; N k ; B -23 -8 483 699 ;
C 108 ; WX 278 ; N l ; B 2 -9 290 699 ;
C 109 ; WX 778 ; N m ; B -14 -9 722 462 ;
C 110 ; WX 556 ; N n ; B -6 -9 493 462 ;
C 111 ; WX 500 ; N o ; B -3 -13 441 462 ;
C 112 ; WX 500 ; N p ; B -120 -205 446 462 ;
C 113 ; WX 500 ; N q ; B 1 -205 471 462 ;
C 114 ; WX 389 ; N r ; B -21 0 389 462 ;
C 115 ; WX 389 ; N s ; B -19 -13 333 462 ;
C 116 ; WX 278 ; N t ; B -11 -9 281 594 ;
C 117 ; WX 556 ; N u ; B 15 -9 492 462 ;
C 118 ; WX 444 ; N v ; B 16 -13 401 462 ;
C 119 ; WX 667 ; N w ; B 16 -13 614 462 ;
C 120 ; WX 500 ; N x ; B -46 -13 469 462 ;
C 121 ; WX 444 ; N y ; B -94 -205 392 462 ;
C 122 ; WX 389 ; N z ; B -43 -78 368 449 ;
C 123 ; WX 348 ; N braceleft ; B 5 -187 436 686 ;
C 124 ; WX 220 ; N bar ; B 66 -218 154 782 ;
C 125 ; WX 348 ; N braceright ; B -129 -187 302 686 ;
C 126 ; WX 570 ; N asciitilde ; B 54 173 516 333 ;
C 161 ; WX 389 ; N exclamdown ; B 19 -205 322 492 ;
C 162 ; WX 500 ; N cent ; B 42 -143 439 576 ;
C 163 ; WX 500 ; N sterling ; B -32 -12 510 683 ;
C -1 ; WX 167 ; N fraction ; B -169 -14 324 683 ;
C 165 ; WX 500 ; N yen ; B 33 0 628 669 ;
C 131 ; WX 500 ; N florin ; B -87 -156 537 707 ;
C 167 ; WX 500 ; N section ; B 36 -143 459 685 ;
C 164 ; WX 500 ; N currency ; B -26 34 526 586 ;
C 39 ; WX 278 ; N quotesingle ; B 128 398 268 685 ;
C 147 ; WX 500 ; N quotedblleft ; B 53 369 513 685 ;
C 171 ; WX 500 ; N guillemotleft ; B 12 32 468 415 ;
C 139 ; WX 333 ; N guilsinglleft ; B 32 32 303 415 ;
C 155 ; WX 333 ; N guilsinglright ; B 10 32 281 415 ;
C -1 ; WX 556 ; N fi ; B -188 -205 514 703 ;
C -1 ; WX 556 ; N fl ; B -186 -205 553 704 ;
C 150 ; WX 500 ; N endash ; B -40 178 477 269 ;
C 134 ; WX 500 ; N dagger ; B 91 -145 494 685 ;
C 135 ; WX 500 ; N daggerdbl ; B 10 -139 493 685 ;
C 183 ; WX 250 ; N periodcentered ; B 51 257 199 405 ;
C 182 ; WX 500 ; N paragraph ; B -57 -193 562 669 ;
C 149 ; WX 350 ; N bullet ; B 0 175 350 525 ;
C 130 ; WX 333 ; N quotesinglbase ; B -5 -182 199 134 ;
C 132 ; WX 500 ; N quotedblbase ; B -57 -182 403 134 ;
C 148 ; WX 500 ; N quotedblright ; B 53 369 513 685 ;
C 187 ; WX 500 ; N guillemotright ; B 12 32 468 415 ;
C 133 ; WX 1000 ; N ellipsis ; B 40 -13 852 135 ;
C 137 ; WX 1000 ; N perthousand ; B 7 -29 996 706 ;
C 191 ; WX 500 ; N questiondown ; B 30 -205 421 492 ;
C 96 ; WX 333 ; N grave ; B 85 516 297 697 ;
C 180 ; WX 333 ; N acute ; B 139 516 379 697 ;
C 136 ; WX 333 ; N circumflex ; B 40 516 367 690 ;
C 152 ; WX 333 ; N tilde ; B 48 536 407 655 ;
C 175 ; WX 333 ; N macron ; B 51 553 393 623 ;
C -1 ; WX 333 ; N breve ; B 71 516 387 678 ;
C -1 ; WX 333 ; N dotaccent ; B 163 550 298 684 ;
C 168 ; WX 333 ; N dieresis ; B 55 550 402 684 ;
C -1 ; WX 333 ; N ring ; B 127 516 340 729 ;
C 184 ; WX 333 ; N cedilla ; B -80 -218 156 5 ;
C -1 ; WX 333 ; N hungarumlaut ; B 69 516 498 697 ;
C -1 ; WX 333 ; N ogonek ; B 15 -183 244 34 ;
C -1 ; WX 333 ; N caron ; B 79 516 411 690 ;
C 151 ; WX 1000 ; N emdash ; B -40 178 977 269 ;
C 198 ; WX 944 ; N AE ; B -64 0 918 669 ;
C 170 ; WX 266 ; N ordfeminine ; B 16 399 330 685 ;
C -1 ; WX 611 ; N Lslash ; B -22 0 590 669 ;
C 216 ; WX 722 ; N Oslash ; B 27 -125 691 764 ;
C 140 ; WX 944 ; N OE ; B 23 -8 946 677 ;
C 186 ; WX 300 ; N ordmasculine ; B 56 400 347 685 ;
C 230 ; WX 722 ; N ae ; B -5 -13 673 462 ;
C -1 ; WX 278 ; N dotlessi ; B 2 -9 238 462 ;
C -1 ; WX 278 ; N lslash ; B -7 -9 307 699 ;
C 248 ; WX 500 ; N oslash ; B -3 -119 441 560 ;
C 156 ; WX 722 ; N oe ; B 6 -13 674 462 ;
C 223 ; WX 500 ; N germandbls ; B -200 -200 473 705 ;
C 207 ; WX 389 ; N Idieresis ; B -32 0 450 862 ;
C 233 ; WX 444 ; N eacute ; B 5 -13 435 697 ;
C -1 ; WX 500 ; N abreve ; B -21 -14 471 678 ;
C -1 ; WX 556 ; N uhungarumlaut ; B 15 -9 610 697 ;
C -1 ; WX 444 ; N ecaron ; B 5 -13 467 690 ;
C 159 ; WX 611 ; N Ydieresis ; B 73 0 659 862 ;
C 247 ; WX 570 ; N divide ; B 33 -29 537 535 ;
C 221 ; WX 611 ; N Yacute ; B 73 0 659 904 ;
C 194 ; WX 667 ; N Acircumflex ; B -67 0 593 897 ;
C 225 ; WX 500 ; N aacute ; B -21 -14 463 697 ;
C 219 ; WX 722 ; N Ucircumflex ; B 67 -18 744 897 ;
C 253 ; WX 444 ; N yacute ; B -94 -205 435 697 ;
C -1 ; WX 389 ; N scommaaccent ; B -19 -218 333 462 ;
C 234 ; WX 444 ; N ecircumflex ; B 5 -13 423 690 ;
C -1 ; WX 722 ; N Uring ; B 67 -18 744 921 ;
C 220 ; WX 722 ; N Udieresis ; B 67 -18 744 862 ;
C -1 ; WX 500 ; N aogonek ; B -21 -183 455 462 ;
C 218 ; WX 722 ; N Uacute ; B 67 -18 744 904 ;
C -1 ; WX 556 ; N uogonek ; B 15 -183 492 462 ;
C 203 ; WX 667 ; N Edieresis ; B -27 0 653 862 ;
C -1 ; WX 722 ; N Dcroat ; B -31 0 700 669 ;
C -1 ; WX 250 ; N commaaccent ; B -36 -218 131 -50 ;
C 169 ; WX 747 ; N copyright ; B 30 -18 718 685 ;
C -1 ; WX 667 ; N Emacron ; B -27 0 653 830 ;
C -1 ; WX 444 ; N ccaron ; B -5 -13 467 690 ;
C 229 ; WX 500 ; N aring ; B -21 -14 455 729 ;
C -1 ; WX 722 ; N Ncommaaccent ; B -27 -218 748 669 ;
C -1 ; WX 278 ; N lacute ; B 2 -9 392 904 ;
C 224 ; WX 500 ; N agrave ; B -21 -14 455 697 ;
C -1 ; WX 611 ; N Tcommaaccent ; B 50 -218 650 669 ;
C -1 ; WX 667 ; N Cacute ; B 32 -18 677 904 ;
C 227 ; WX 500 ; N atilde ; B -21 -14 491 655 ;
C -1 ; WX 667 ; N Edotaccent ; B -27 0 653 862 ;
C 154 ; WX 389 ; N scaron ; B -19 -13 424 690 ;
C -1 ; WX 389 ; N scedilla ; B -19 -218 333 462 ;
C 237 ; WX 278 ; N iacute ; B 2 -9 352 697 ;
C -1 ; WX 494 ; N lozenge ; B 10 0 484 745 ;
C -1 ; WX 667 ; N Rcaron ; B -29 0 623 897 ;
C -1 ; WX 722 ; N Gcommaaccent ; B 21 -218 706 685 ;
C 251 ; WX 556 ; N ucircumflex ; B 15 -9 492 690 ;
C 226 ; WX 500 ; N acircumflex ; B -21 -14 455 690 ;
C -1 ; WX 667 ; N Amacron ; B -67 0 593 830 ;
C -1 ; WX 389 ; N rcaron ; B -21 0 424 690 ;
C 231 ; WX 444 ; N ccedilla ; B -5 -218 392 462 ;
C -1 ; WX 611 ; N Zdotaccent ; B -11 0 590 862 ;
C 222 ; WX 611 ; N Thorn ; B -27 0 573 669 ;
C -1 ; WX 722 ; N Omacron ; B 27 -18 691 830 ;
C -1 ; WX 667 ; N Racute ; B -29 0 623 904 ;
C -1 ; WX 556 ; N Sacute ; B 2 -18 531 904 ;
C -1 ; WX 608 ; N dcaron ; B -21 -13 675 708 ;
C -1 ; WX 722 ; N Umacron ; B 67 -18 744 830 ;
C -1 ; WX 556 ; N uring ; B 15 -9 492 729 ;
C 179 ; WX 300 ; N threesuperior ; B 17 265 321 683 ;
C 210 ; WX 722 ; N Ograve ; B 27 -18 691 904 ;
C 192 ; WX 667 ; N Agrave ; B -67 0 593 904 ;
C -1 ; WX 667 ; N Abreve ; B -67 0 593 885 ;
C 215 ; WX 570 ; N multiply ; B 48 16 522 490 ;
C 250 ; WX 556 ; N uacute ; B 15 -9 492 697 ;
C -1 ; WX 611 ; N Tcaron ; B 50 0 650 897 ;
C -1 ; WX 494 ; N partialdiff ; B 11 -21 494 750 ;
C 255 ; WX 444 ; N ydieresis ; B -94 -205 443 655 ;
C -1 ; WX 722 ; N Nacute ; B -27 -15 748 904 ;
C 238 ; WX 278 ; N icircumflex ; B -3 -9 324 690 ;
C 202 ; WX 667 ; N Ecircumflex ; B -27 0 653 897 ;
C 228 ; WX 500 ; N adieresis ; B -21 -14 476 655 ;
C 235 ; WX 444 ; N edieresis ; B 5 -13 448 655 ;
C -1 ; WX 444 ; N cacute ; B -5 -13 435 697 ;
C -1 ; WX 556 ; N nacute ; B -6 -9 493 697 ;
C -1 ; WX 556 ; N umacron ; B 15 -9 492 623 ;
C -1 ; WX 722 ; N Ncaron ; B -27 -15 748 897 ;
C 205 ; WX 389 ; N Iacute ; B -32 0 432 904 ;
C 177 ; WX 570 ; N plusminus ; B 33 0 537 506 ;
C 166 ; WX 220 ; N brokenbar ; B 66 -143 154 707 ;
C 174 ; WX 747 ; N registered ; B 30 -18 718 685 ;
C -1 ; WX 722 ; N Gbreve ; B 21 -18 706 885 ;
C -1 ; WX 389 ; N Idotaccent ; B -32 0 406 862 ;
C -1 ; WX 600 ; N summation ; B 14 -10 585 706 ;
C 200 ; WX 667 ; N Egrave ; B -27 0 653 904 ;
C -1 ; WX 389 ; N racute ; B -21 0 407 697 ;
C -1 ; WX 500 ; N omacron ; B -3 -13 462 623 ;
C -1 ; WX 611 ; N Zacute ; B -11 0 590 904 ;
C 142 ; WX 611 ; N Zcaron ; B -11 0 590 897 ;
C -1 ; WX 549 ; N greaterequal ; B 26 0 523 704 ;
C 208 ; WX 722 ; N Eth ; B -31 0 700 669 ;
C 199 ; WX 667 ; N Ccedilla ; B 32 -218 677 685 ;
C -1 ; WX 278 ; N lcommaaccent ; B -42 -218 290 699 ;
C -1 ; WX 366 ; N tcaron ; B -11 -9 434 754 ;
C -1 ; WX 444 ; N eogonek ; B 5 -183 398 462 ;
C -1 ; WX 722 ; N Uogonek ; B 67 -183 744 669 ;
C 193 ; WX 667 ; N Aacute ; B -67 0 593 904 ;
C 196 ; WX 667 ; N Adieresis ; B -67 0 593 862 ;
C 232 ; WX 444 ; N egrave ; B 5 -13 398 697 ;
C -1 ; WX 389 ; N zacute ; B -43 -78 407 697 ;
C -1 ; WX 278 ; N iogonek ; B -20 -183 263 684 ;
C 211 ; WX 722 ; N Oacute ; B 27 -18 691 904 ;
C 243 ; WX 500 ; N oacute ; B -3 -13 463 697 ;
C -1 ; WX 500 ; N amacron ; B -21 -14 467 623 ;
C -1 ; WX 389 ; N sacute ; B -19 -13 407 697 ;
C 239 ; WX 278 ; N idieresis ; B 2 -9 364 655 ;
C 212 ; WX 722 ; N Ocircumflex ; B 27 -18 691 897 ;
C 217 ; WX 722 ; N Ugrave ; B 67 -18 744 904 ;
C -1 ; WX 612 ; N Delta ; B 6 0 608 688 ;
C 254 ; WX 500 ; N thorn ; B -120 -205 446 699 ;
C 178 ; WX 300 ; N twosuperior ; B 2 274 313 683 ;
C 214 ; WX 722 ; N Odieresis ; B 27 -18 691 862 ;
C 181 ; WX 576 ; N mu ; B -60 -207 516 449 ;
C 236 ; WX 278 ; N igrave ; B 2 -9 259 697 ;
C -1 ; WX 500 ; N ohungarumlaut ; B -3 -13 582 697 ;
C -1 ; WX 667 ; N Eogonek ; B -27 -183 653 669 ;
C -1 ; WX 500 ; N dcroat ; B -21 -13 552 699 ;
C 190 ; WX 750 ; N threequarters ; B 7 -14 726 683 ;
C -1 ; WX 556 ; N Scedilla ; B 2 -218 526 685 ;
C -1 ; WX 382 ; N lcaron ; B 2 -9 448 708 ;
C -1 ; WX 667 ; N Kcommaaccent ; B -21 -218 702 669 ;
C -1 ; WX 611 ; N Lacute ; B -22 0 590 904 ;
C 153 ; WX 1000 ; N trademark ; B 32 263 968 669 ;
C -1 ; WX 444 ; N edotaccent ; B 5 -13 398 655 ;
C 204 ; WX 389 ; N Igrave ; B -32 0 406 904 ;
C -1 ; WX 389 ; N Imacron ; B -32 0 461 830 ;
C -1 ; WX 611 ; N Lcaron ; B -22 0 671 718 ;
C 189 ; WX 750 ; N onehalf ; B -9 -14 723 683 ;
C -1 ; WX 549 ; N lessequal ; B 29 0 526 704 ;
C 244 ; WX 500 ; N ocircumflex ; B -3 -13 451 690 ;
C 241 ; WX 556 ; N ntilde ; B -6 -9 504 655 ;
C -1 ; WX 722 ; N Uhungarumlaut ; B 67 -18 744 904 ;
C 201 ; WX 667 ; N Eacute ; B -27 0 653 904 ;
C -1 ; WX 444 ; N emacron ; B 5 -13 439 623 ;
C -1 ; WX 500 ; N gbreve ; B -52 -203 478 678 ;
C 188 ; WX 750 ; N onequarter ; B 7 -14 721 683 ;
C 138 ; WX 556 ; N Scaron ; B 2 -18 553 897 ;
C -1 ; WX 556 ; N Scommaaccent ; B 2 -218 526 685 ;
C -1 ; WX 722 ; N Ohungarumlaut ; B 27 -18 723 904 ;
C 176 ; WX 400 ; N degree ; B 83 397 369 683 ;
C 242 ; WX 500 ; N ograve ; B -3 -13 441 697 ;
C -1 ; WX 667 ; N Ccaron ; B 32 -18 677 897 ;
C 249 ; WX 556 ; N ugrave ; B 15 -9 492 697 ;
C -1 ; WX 549 ; N radical ; B 10 -46 512 850 ;
C -1 ; WX 722 ; N Dcaron ; B -46 0 685 897 ;
C -1 ; WX 389 ; N rcommaaccent ; B -67 -218 389 462 ;
C 209 ; WX 722 ; N Ntilde ; B -27 -15 748 862 ;
C 245 ; WX 500 ; N otilde ; B -3 -13 491 655 ;
C -1 ; WX 667 ; N Rcommaaccent ; B -29 -218 623 669 ;
C -1 ; WX 611 ; N Lcommaaccent ; B -22 -218 590 669 ;
C 195 ; WX 667 ; N Atilde ; B -67 0 593 862 ;
C -1 ; WX 667 ; N Aogonek ; B -67 -183 604 683 ;
C 197 ; WX 667 ; N Aring ; B -67 0 593 921 ;
C 213 ; WX 722 ; N Otilde ; B 27 -18 691 862 ;
C -1 ; WX 389 ; N zdotaccent ; B -43 -78 368 655 ;
C -1 ; WX 667 ; N Ecaron ; B -27 0 653 897 ;
C -1 ; WX 389 ; N Iogonek ; B -32 -183 406 669 ;
C -1 ; WX 500 ; N kcommaaccent ; B -23 -218 483 699 ;
C -1 ; WX 606 ; N minus ; B 51 209 555 297 ;
C 206 ; WX 389 ; N Icircumflex ; B -32 0 450 897 ;
C -1 ; WX 556 ; N ncaron ; B -6 -9 523 690 ;
C -1 ; WX 278 ; N tcommaaccent ; B -62 -218 281 594 ;
C 172 ; WX 606 ; N logicalnot ; B 51 108 555 399 ;
C 246 ; WX 500 ; N odieresis ; B -3 -13 471 655 ;
C 252 ; WX 556 ; N udieresis ; B 15 -9 499 655 ;
C -1 ; WX 549 ; N notequal ; B 15 -49 540 570 ;
C -1 ; WX 500 ; N gcommaaccent ; B -52 -203 478 767 ;
C 240 ; WX 500 ; N eth ; B -3 -13 454 699 ;
C 158 ; WX 389 ; N zcaron ; B -43 -78 424 690 ;
C -1 ; WX 556 ; N ncommaaccent ; B -6 -218 493 462 ;
C 185 ; WX 300 ; N onesuperior ; B 30 274 301 683 ;
C -1 ; WX 278 ; N imacron ; B 2 -9 294 623 ;
C 128 ; WX 500 ; N Euro ; B 0 0 0 0 ;
EndCharMetrics
StartKernData
StartKernPairs 2038
KPX A C -65
KPX A Cacute -65
KPX A Ccaron -65
KPX A Ccedilla -65
KPX A G -60
KPX A Gbreve -60
KPX A Gcommaaccent -60
KPX A O -50
KPX A Oacute -50
KPX A Ocircumflex -50
KPX A Odieresis -50
KPX A Ograve -50
KPX A Ohungarumlaut -50
KPX A Omacron -50
KPX A Oslash -50
KPX A Otilde -50
KPX A Q -55
KPX A T -55
KPX A Tcaron -55
KPX A Tcommaaccent -55
KPX A U -50
KPX A Uacute -50
KPX A Ucircumflex -50
KPX A Udieresis -50
KPX A Ugrave -50
KPX A Uhungarumlaut -50
KPX A Umacron -50
KPX A Uogonek -50
KPX A Uring -50
KPX A V -95
KPX A W -100
KPX A Y -70
KPX A Yacute -70
KPX A Ydieresis -70
KPX A quoteright -74
KPX A u -30
KPX A uacute -30
KPX A ucircumflex -30
KPX A udieresis -30
KPX A ugrave -30
KPX A uhungarumlaut -30
KPX A umacron -30
KPX A uogonek -30
KPX A uring -30
KPX A v -74
KPX A w -74
KPX A y -74
KPX A yacute -74
KPX A ydieresis -74
KPX Aacute C -65
KPX Aacute Cacute -65
KPX Aacute Ccaron -65
KPX Aacute Ccedilla -65
KPX Aacute G -60
KPX Aacute Gbreve -60
KPX Aacute Gcommaaccent -60
KPX Aacute O -50
KPX Aacute Oacute -50
KPX Aacute Ocircumflex -50
KPX Aacute Odieresis -50
KPX Aacute Ograve -50
KPX Aacute Ohungarumlaut -50
KPX Aacute Omacron -50
KPX Aacute Oslash -50
KPX Aacute Otilde -50
KPX Aacute Q -55
KPX Aacute T -55
KPX Aacute Tcaron -55
KPX Aacute Tcommaaccent -55
KPX Aacute U -50
KPX Aacute Uacute -50
KPX Aacute Ucircumflex -50
KPX Aacute Udieresis -50
KPX Aacute Ugrave -50
KPX Aacute Uhungarumlaut -50
KPX Aacute Umacron -50
KPX Aacute Uogonek -50
KPX Aacute Uring -50
KPX Aacute V -95
KPX Aacute W -100
KPX Aacute Y -70
KPX Aacute Yacute -70
KPX Aacute Ydieresis -70
KPX Aacute quoteright -74
KPX Aacute u -30
KPX Aacute uacute -30
KPX Aacute ucircumflex -30
KPX Aacute udieresis -30
KPX Aacute ugrave -30
KPX Aacute uhungarumlaut -30
KPX Aacute umacron -30
KPX Aacute uogonek -30
KPX Aacute uring -30
KPX Aacute v -74
KPX Aacute w -74
KPX Aacute y -74
KPX Aacute yacute -74
KPX Aacute ydieresis -74
KPX Abreve C -65
KPX Abreve Cacute -65
KPX Abreve Ccaron -65
KPX Abreve Ccedilla -65
KPX Abreve G -60
KPX Abreve Gbreve -60
KPX Abreve Gcommaaccent -60
KPX Abreve O -50
KPX Abreve Oacute -50
KPX Abreve Ocircumflex -50
KPX Abreve Odieresis -50
KPX Abreve Ograve -50
KPX Abreve Ohungarumlaut -50
KPX Abreve Omacron -50
KPX Abreve Oslash -50
KPX Abreve Otilde -50
KPX Abreve Q -55
KPX Abreve T -55
KPX Abreve Tcaron -55
KPX Abreve Tcommaaccent -55
KPX Abreve U -50
KPX Abreve Uacute -50
KPX Abreve Ucircumflex -50
KPX Abreve Udieresis -50
KPX Abreve Ugrave -50
KPX Abreve Uhungarumlaut -50
KPX Abreve Umacron -50
KPX Abreve Uogonek -50
KPX Abreve Uring -50
KPX Abreve V -95
KPX Abreve W -100
KPX Abreve Y -70
KPX Abreve Yacute -70
KPX Abreve Ydieresis -70
KPX Abreve quoteright -74
KPX Abreve u -30
KPX Abreve uacute -30
KPX Abreve ucircumflex -30
KPX Abreve udieresis -30
KPX Abreve ugrave -30
KPX Abreve uhungarumlaut -30
KPX Abreve umacron -30
KPX Abreve uogonek -30
KPX Abreve uring -30
KPX Abreve v -74
KPX Abreve w -74
KPX Abreve y -74
KPX Abreve yacute -74
KPX Abreve ydieresis -74
KPX Acircumflex C -65
KPX Acircumflex Cacute -65
KPX Acircumflex Ccaron -65
KPX Acircumflex Ccedilla -65
KPX Acircumflex G -60
KPX Acircumflex Gbreve -60
KPX Acircumflex Gcommaaccent -60
KPX Acircumflex O -50
KPX Acircumflex Oacute -50
KPX Acircumflex Ocircumflex -50
KPX Acircumflex Odieresis -50
KPX Acircumflex Ograve -50
KPX Acircumflex Ohungarumlaut -50
KPX Acircumflex Omacron -50
KPX Acircumflex Oslash -50
KPX Acircumflex Otilde -50
KPX Acircumflex Q -55
KPX Acircumflex T -55
KPX Acircumflex Tcaron -55
KPX Acircumflex Tcommaaccent -55
KPX Acircumflex U -50
KPX Acircumflex Uacute -50
KPX Acircumflex Ucircumflex -50
KPX Acircumflex Udieresis -50
KPX Acircumflex Ugrave -50
KPX Acircumflex Uhungarumlaut -50
KPX Acircumflex Umacron -50
KPX Acircumflex Uogonek -50
KPX Acircumflex Uring -50
KPX Acircumflex V -95
KPX Acircumflex W -100
KPX Acircumflex Y -70
KPX Acircumflex Yacute -70
KPX Acircumflex Ydieresis -70
KPX Acircumflex quoteright -74
KPX Acircumflex u -30
KPX Acircumflex uacute -30
KPX Acircumflex ucircumflex -30
KPX Acircumflex udieresis -30
KPX Acircumflex ugrave -30
KPX Acircumflex uhungarumlaut -30
KPX Acircumflex umacron -30
KPX Acircumflex uogonek -30
KPX Acircumflex uring -30
KPX Acircumflex v -74
KPX Acircumflex w -74
KPX Acircumflex y -74
KPX Acircumflex yacute -74
KPX Acircumflex ydieresis -74
KPX Adieresis C -65
KPX Adieresis Cacute -65
KPX Adieresis Ccaron -65
KPX Adieresis Ccedilla -65
KPX Adieresis G -60
KPX Adieresis Gbreve -60
KPX Adieresis Gcommaaccent -60
KPX Adieresis O -50
KPX Adieresis Oacute -50
KPX Adieresis Ocircumflex -50
KPX Adieresis Odieresis -50
KPX Adieresis Ograve -50
KPX Adieresis Ohungarumlaut -50
KPX Adieresis Omacron -50
KPX Adieresis Oslash -50
KPX Adieresis Otilde -50
KPX Adieresis Q -55
KPX Adieresis T -55
KPX Adieresis Tcaron -55
KPX Adieresis Tcommaaccent -55
KPX Adieresis U -50
KPX Adieresis Uacute -50
KPX Adieresis Ucircumflex -50
KPX Adieresis Udieresis -50
KPX Adieresis Ugrave -50
KPX Adieresis Uhungarumlaut -50
KPX Adieresis Umacron -50
KPX Adieresis Uogonek -50
KPX Adieresis Uring -50
KPX Adieresis V -95
KPX Adieresis W -100
KPX Adieresis Y -70
KPX Adieresis Yacute -70
KPX Adieresis Ydieresis -70
KPX Adieresis quoteright -74
KPX Adieresis u -30
KPX Adieresis uacute -30
KPX Adieresis ucircumflex -30
KPX Adieresis udieresis -30
KPX Adieresis ugrave -30
KPX Adieresis uhungarumlaut -30
KPX Adieresis umacron -30
KPX Adieresis uogonek -30
KPX Adieresis uring -30
KPX Adieresis v -74
KPX Adieresis w -74
KPX Adieresis y -74
KPX Adieresis yacute -74
KPX Adieresis ydieresis -74
KPX Agrave C -65
KPX Agrave Cacute -65
KPX Agrave Ccaron -65
KPX Agrave Ccedilla -65
KPX Agrave G -60
KPX Agrave Gbreve -60
KPX Agrave Gcommaaccent -60
KPX Agrave O -50
KPX Agrave Oacute -50
KPX Agrave Ocircumflex -50
KPX Agrave Odieresis -50
KPX Agrave Ograve -50
KPX Agrave Ohungarumlaut -50
KPX Agrave Omacron -50
KPX Agrave Oslash -50
KPX Agrave Otilde -50
KPX Agrave Q -55
KPX Agrave T -55
KPX Agrave Tcaron -55
KPX Agrave Tcommaaccent -55
KPX Agrave U -50
KPX Agrave Uacute -50
KPX Agrave Ucircumflex -50
KPX Agrave Udieresis -50
KPX Agrave Ugrave -50
KPX Agrave Uhungarumlaut -50
KPX Agrave Umacron -50
KPX Agrave Uogonek -50
KPX Agrave Uring -50
KPX Agrave V -95
KPX Agrave W -100
KPX Agrave Y -70
KPX Agrave Yacute -70
KPX Agrave Ydieresis -70
KPX Agrave quoteright -74
KPX Agrave u -30
KPX Agrave uacute -30
KPX Agrave ucircumflex -30
KPX Agrave udieresis -30
KPX Agrave ugrave -30
KPX Agrave uhungarumlaut -30
KPX Agrave umacron -30
KPX Agrave uogonek -30
KPX Agrave uring -30
KPX Agrave v -74
KPX Agrave w -74
KPX Agrave y -74
KPX Agrave yacute -74
KPX Agrave ydieresis -74
KPX Amacron C -65
KPX Amacron Cacute -65
KPX Amacron Ccaron -65
KPX Amacron Ccedilla -65
KPX Amacron G -60
KPX Amacron Gbreve -60
KPX Amacron Gcommaaccent -60
KPX Amacron O -50
KPX Amacron Oacute -50
KPX Amacron Ocircumflex -50
KPX Amacron Odieresis -50
KPX Amacron Ograve -50
KPX Amacron Ohungarumlaut -50
KPX Amacron Omacron -50
KPX Amacron Oslash -50
KPX Amacron Otilde -50
KPX Amacron Q -55
KPX Amacron T -55
KPX Amacron Tcaron -55
KPX Amacron Tcommaaccent -55
KPX Amacron U -50
KPX Amacron Uacute -50
KPX Amacron Ucircumflex -50
KPX Amacron Udieresis -50
KPX Amacron Ugrave -50
KPX Amacron Uhungarumlaut -50
KPX Amacron Umacron -50
KPX Amacron Uogonek -50
KPX Amacron Uring -50
KPX Amacron V -95
KPX Amacron W -100
KPX Amacron Y -70
KPX Amacron Yacute -70
KPX Amacron Ydieresis -70
KPX Amacron quoteright -74
KPX Amacron u -30
KPX Amacron uacute -30
KPX Amacron ucircumflex -30
KPX Amacron udieresis -30
KPX Amacron ugrave -30
KPX Amacron uhungarumlaut -30
KPX Amacron umacron -30
KPX Amacron uogonek -30
KPX Amacron uring -30
KPX Amacron v -74
KPX Amacron w -74
KPX Amacron y -74
KPX Amacron yacute -74
KPX Amacron ydieresis -74
KPX Aogonek C -65
KPX Aogonek Cacute -65
KPX Aogonek Ccaron -65
KPX Aogonek Ccedilla -65
KPX Aogonek G -60
KPX Aogonek Gbreve -60
KPX Aogonek Gcommaaccent -60
KPX Aogonek O -50
KPX Aogonek Oacute -50
KPX Aogonek Ocircumflex -50
KPX Aogonek Odieresis -50
KPX Aogonek Ograve -50
KPX Aogonek Ohungarumlaut -50
KPX Aogonek Omacron -50
KPX Aogonek Oslash -50
KPX Aogonek Otilde -50
KPX Aogonek Q -55
KPX Aogonek T -55
KPX Aogonek Tcaron -55
KPX Aogonek Tcommaaccent -55
KPX Aogonek U -50
KPX Aogonek Uacute -50
KPX Aogonek Ucircumflex -50
KPX Aogonek Udieresis -50
KPX Aogonek Ugrave -50
KPX Aogonek Uhungarumlaut -50
KPX Aogonek Umacron -50
KPX Aogonek Uogonek -50
KPX Aogonek Uring -50
KPX Aogonek V -95
KPX Aogonek W -100
KPX Aogonek Y -70
KPX Aogonek Yacute -70
KPX Aogonek Ydieresis -70
KPX Aogonek quoteright -74
KPX Aogonek u -30
KPX Aogonek uacute -30
KPX Aogonek ucircumflex -30
KPX Aogonek udieresis -30
KPX Aogonek ugrave -30
KPX Aogonek uhungarumlaut -30
KPX Aogonek umacron -30
KPX Aogonek uogonek -30
KPX Aogonek uring -30
KPX Aogonek v -74
KPX Aogonek w -74
KPX Aogonek y -34
KPX Aogonek yacute -34
KPX Aogonek ydieresis -34
KPX Aring C -65
KPX Aring Cacute -65
KPX Aring Ccaron -65
KPX Aring Ccedilla -65
KPX Aring G -60
KPX Aring Gbreve -60
KPX Aring Gcommaaccent -60
KPX Aring O -50
KPX Aring Oacute -50
KPX Aring Ocircumflex -50
KPX Aring Odieresis -50
KPX Aring Ograve -50
KPX Aring Ohungarumlaut -50
KPX Aring Omacron -50
KPX Aring Oslash -50
KPX Aring Otilde -50
KPX Aring Q -55
KPX Aring T -55
KPX Aring Tcaron -55
KPX Aring Tcommaaccent -55
KPX Aring U -50
KPX Aring Uacute -50
KPX Aring Ucircumflex -50
KPX Aring Udieresis -50
KPX Aring Ugrave -50
KPX Aring Uhungarumlaut -50
KPX Aring Umacron -50
KPX Aring Uogonek -50
KPX Aring Uring -50
KPX Aring V -95
KPX Aring W -100
KPX Aring Y -70
KPX Aring Yacute -70
KPX Aring Ydieresis -70
KPX Aring quoteright -74
KPX Aring u -30
KPX Aring uacute -30
KPX Aring ucircumflex -30
KPX Aring udieresis -30
KPX Aring ugrave -30
KPX Aring uhungarumlaut -30
KPX Aring umacron -30
KPX Aring uogonek -30
KPX Aring uring -30
KPX Aring v -74
KPX Aring w -74
KPX Aring y -74
KPX Aring yacute -74
KPX Aring ydieresis -74
KPX Atilde C -65
KPX Atilde Cacute -65
KPX Atilde Ccaron -65
KPX Atilde Ccedilla -65
KPX Atilde G -60
KPX Atilde Gbreve -60
KPX Atilde Gcommaaccent -60
KPX Atilde O -50
KPX Atilde Oacute -50
KPX Atilde Ocircumflex -50
KPX Atilde Odieresis -50
KPX Atilde Ograve -50
KPX Atilde Ohungarumlaut -50
KPX Atilde Omacron -50
KPX Atilde Oslash -50
KPX Atilde Otilde -50
KPX Atilde Q -55
KPX Atilde T -55
KPX Atilde Tcaron -55
KPX Atilde Tcommaaccent -55
KPX Atilde U -50
KPX Atilde Uacute -50
KPX Atilde Ucircumflex -50
KPX Atilde Udieresis -50
KPX Atilde Ugrave -50
KPX Atilde Uhungarumlaut -50
KPX Atilde Umacron -50
KPX Atilde Uogonek -50
KPX Atilde Uring -50
KPX Atilde V -95
KPX Atilde W -100
KPX Atilde Y -70
KPX Atilde Yacute -70
KPX Atilde Ydieresis -70
KPX Atilde quoteright -74
KPX Atilde u -30
KPX Atilde uacute -30
KPX Atilde ucircumflex -30
KPX Atilde udieresis -30
KPX Atilde ugrave -30
KPX Atilde uhungarumlaut -30
KPX Atilde umacron -30
KPX Atilde uogonek -30
KPX Atilde uring -30
KPX Atilde v -74
KPX Atilde w -74
KPX Atilde y -74
KPX Atilde yacute -74
KPX Atilde ydieresis -74
KPX B A -25
KPX B Aacute -25
KPX B Abreve -25
KPX B Acircumflex -25
KPX B Adieresis -25
KPX B Agrave -25
KPX B Amacron -25
KPX B Aogonek -25
KPX B Aring -25
KPX B Atilde -25
KPX B U -10
KPX B Uacute -10
KPX B Ucircumflex -10
KPX B Udieresis -10
KPX B Ugrave -10
KPX B Uhungarumlaut -10
KPX B Umacron -10
KPX B Uogonek -10
KPX B Uring -10
KPX D A -25
KPX D Aacute -25
KPX D Abreve -25
KPX D Acircumflex -25
KPX D Adieresis -25
KPX D Agrave -25
KPX D Amacron -25
KPX D Aogonek -25
KPX D Aring -25
KPX D Atilde -25
KPX D V -50
KPX D W -40
KPX D Y -50
KPX D Yacute -50
KPX D Ydieresis -50
KPX Dcaron A -25
KPX Dcaron Aacute -25
KPX Dcaron Abreve -25
KPX Dcaron Acircumflex -25
KPX Dcaron Adieresis -25
KPX Dcaron Agrave -25
KPX Dcaron Amacron -25
KPX Dcaron Aogonek -25
KPX Dcaron Aring -25
KPX Dcaron Atilde -25
KPX Dcaron V -50
KPX Dcaron W -40
KPX Dcaron Y -50
KPX Dcaron Yacute -50
KPX Dcaron Ydieresis -50
KPX Dcroat A -25
KPX Dcroat Aacute -25
KPX Dcroat Abreve -25
KPX Dcroat Acircumflex -25
KPX Dcroat Adieresis -25
KPX Dcroat Agrave -25
KPX Dcroat Amacron -25
KPX Dcroat Aogonek -25
KPX Dcroat Aring -25
KPX Dcroat Atilde -25
KPX Dcroat V -50
KPX Dcroat W -40
KPX Dcroat Y -50
KPX Dcroat Yacute -50
KPX Dcroat Ydieresis -50
KPX F A -100
KPX F Aacute -100
KPX F Abreve -100
KPX F Acircumflex -100
KPX F Adieresis -100
KPX F Agrave -100
KPX F Amacron -100
KPX F Aogonek -100
KPX F Aring -100
KPX F Atilde -100
KPX F a -95
KPX F aacute -95
KPX F abreve -95
KPX F acircumflex -95
KPX F adieresis -95
KPX F agrave -95
KPX F amacron -95
KPX F aogonek -95
KPX F aring -95
KPX F atilde -95
KPX F comma -129
KPX F e -100
KPX F eacute -100
KPX F ecaron -100
KPX F ecircumflex -100
KPX F edieresis -100
KPX F edotaccent -100
KPX F egrave -100
KPX F emacron -100
KPX F eogonek -100
KPX F i -40
KPX F iacute -40
KPX F icircumflex -40
KPX F idieresis -40
KPX F igrave -40
KPX F imacron -40
KPX F iogonek -40
KPX F o -70
KPX F oacute -70
KPX F ocircumflex -70
KPX F odieresis -70
KPX F ograve -70
KPX F ohungarumlaut -70
KPX F omacron -70
KPX F oslash -70
KPX F otilde -70
KPX F period -129
KPX F r -50
KPX F racute -50
KPX F rcaron -50
KPX F rcommaaccent -50
KPX J A -25
KPX J Aacute -25
KPX J Abreve -25
KPX J Acircumflex -25
KPX J Adieresis -25
KPX J Agrave -25
KPX J Amacron -25
KPX J Aogonek -25
KPX J Aring -25
KPX J Atilde -25
KPX J a -40
KPX J aacute -40
KPX J abreve -40
KPX J acircumflex -40
KPX J adieresis -40
KPX J agrave -40
KPX J amacron -40
KPX J aogonek -40
KPX J aring -40
KPX J atilde -40
KPX J comma -10
KPX J e -40
KPX J eacute -40
KPX J ecaron -40
KPX J ecircumflex -40
KPX J edieresis -40
KPX J edotaccent -40
KPX J egrave -40
KPX J emacron -40
KPX J eogonek -40
KPX J o -40
KPX J oacute -40
KPX J ocircumflex -40
KPX J odieresis -40
KPX J ograve -40
KPX J ohungarumlaut -40
KPX J omacron -40
KPX J oslash -40
KPX J otilde -40
KPX J period -10
KPX J u -40
KPX J uacute -40
KPX J ucircumflex -40
KPX J udieresis -40
KPX J ugrave -40
KPX J uhungarumlaut -40
KPX J umacron -40
KPX J uogonek -40
KPX J uring -40
KPX K O -30
KPX K Oacute -30
KPX K Ocircumflex -30
KPX K Odieresis -30
KPX K Ograve -30
KPX K Ohungarumlaut -30
KPX K Omacron -30
KPX K Oslash -30
KPX K Otilde -30
KPX K e -25
KPX K eacute -25
KPX K ecaron -25
KPX K ecircumflex -25
KPX K edieresis -25
KPX K edotaccent -25
KPX K egrave -25
KPX K emacron -25
KPX K eogonek -25
KPX K o -25
KPX K oacute -25
KPX K ocircumflex -25
KPX K odieresis -25
KPX K ograve -25
KPX K ohungarumlaut -25
KPX K omacron -25
KPX K oslash -25
KPX K otilde -25
KPX K u -20
KPX K uacute -20
KPX K ucircumflex -20
KPX K udieresis -20
KPX K ugrave -20
KPX K uhungarumlaut -20
KPX K umacron -20
KPX K uogonek -20
KPX K uring -20
KPX K y -20
KPX K yacute -20
KPX K ydieresis -20
KPX Kcommaaccent O -30
KPX Kcommaaccent Oacute -30
KPX Kcommaaccent Ocircumflex -30
KPX Kcommaaccent Odieresis -30
KPX Kcommaaccent Ograve -30
KPX Kcommaaccent Ohungarumlaut -30
KPX Kcommaaccent Omacron -30
KPX Kcommaaccent Oslash -30
KPX Kcommaaccent Otilde -30
KPX Kcommaaccent e -25
KPX Kcommaaccent eacute -25
KPX Kcommaaccent ecaron -25
KPX Kcommaaccent ecircumflex -25
KPX Kcommaaccent edieresis -25
KPX Kcommaaccent edotaccent -25
KPX Kcommaaccent egrave -25
KPX Kcommaaccent emacron -25
KPX Kcommaaccent eogonek -25
KPX Kcommaaccent o -25
KPX Kcommaaccent oacute -25
KPX Kcommaaccent ocircumflex -25
KPX Kcommaaccent odieresis -25
KPX Kcommaaccent ograve -25
KPX Kcommaaccent ohungarumlaut -25
KPX Kcommaaccent omacron -25
KPX Kcommaaccent oslash -25
KPX Kcommaaccent otilde -25
KPX Kcommaaccent u -20
KPX Kcommaaccent uacute -20
KPX Kcommaaccent ucircumflex -20
KPX Kcommaaccent udieresis -20
KPX Kcommaaccent ugrave -20
KPX Kcommaaccent uhungarumlaut -20
KPX Kcommaaccent umacron -20
KPX Kcommaaccent uogonek -20
KPX Kcommaaccent uring -20
KPX Kcommaaccent y -20
KPX Kcommaaccent yacute -20
KPX Kcommaaccent ydieresis -20
KPX L T -18
KPX L Tcaron -18
KPX L Tcommaaccent -18
KPX L V -37
KPX L W -37
KPX L Y -37
KPX L Yacute -37
KPX L Ydieresis -37
KPX L quoteright -55
KPX L y -37
KPX L yacute -37
KPX L ydieresis -37
KPX Lacute T -18
KPX Lacute Tcaron -18
KPX Lacute Tcommaaccent -18
KPX Lacute V -37
KPX Lacute W -37
KPX Lacute Y -37
KPX Lacute Yacute -37
KPX Lacute Ydieresis -37
KPX Lacute quoteright -55
KPX Lacute y -37
KPX Lacute yacute -37
KPX Lacute ydieresis -37
KPX Lcommaaccent T -18
KPX Lcommaaccent Tcaron -18
KPX Lcommaaccent Tcommaaccent -18
KPX Lcommaaccent V -37
KPX Lcommaaccent W -37
KPX Lcommaaccent Y -37
KPX Lcommaaccent Yacute -37
KPX Lcommaaccent Ydieresis -37
KPX Lcommaaccent quoteright -55
KPX Lcommaaccent y -37
KPX Lcommaaccent yacute -37
KPX Lcommaaccent ydieresis -37
KPX Lslash T -18
KPX Lslash Tcaron -18
KPX Lslash Tcommaaccent -18
KPX Lslash V -37
KPX Lslash W -37
KPX Lslash Y -37
KPX Lslash Yacute -37
KPX Lslash Ydieresis -37
KPX Lslash quoteright -55
KPX Lslash y -37
KPX Lslash yacute -37
KPX Lslash ydieresis -37
KPX N A -30
KPX N Aacute -30
KPX N Abreve -30
KPX N Acircumflex -30
KPX N Adieresis -30
KPX N Agrave -30
KPX N Amacron -30
KPX N Aogonek -30
KPX N Aring -30
KPX N Atilde -30
KPX Nacute A -30
KPX Nacute Aacute -30
KPX Nacute Abreve -30
KPX Nacute Acircumflex -30
KPX Nacute Adieresis -30
KPX Nacute Agrave -30
KPX Nacute Amacron -30
KPX Nacute Aogonek -30
KPX Nacute Aring -30
KPX Nacute Atilde -30
KPX Ncaron A -30
KPX Ncaron Aacute -30
KPX Ncaron Abreve -30
KPX Ncaron Acircumflex -30
KPX Ncaron Adieresis -30
KPX Ncaron Agrave -30
KPX Ncaron Amacron -30
KPX Ncaron Aogonek -30
KPX Ncaron Aring -30
KPX Ncaron Atilde -30
KPX Ncommaaccent A -30
KPX Ncommaaccent Aacute -30
KPX Ncommaaccent Abreve -30
KPX Ncommaaccent Acircumflex -30
KPX Ncommaaccent Adieresis -30
KPX Ncommaaccent Agrave -30
KPX Ncommaaccent Amacron -30
KPX Ncommaaccent Aogonek -30
KPX Ncommaaccent Aring -30
KPX Ncommaaccent Atilde -30
KPX Ntilde A -30
KPX Ntilde Aacute -30
KPX Ntilde Abreve -30
KPX Ntilde Acircumflex -30
KPX Ntilde Adieresis -30
KPX Ntilde Agrave -30
KPX Ntilde Amacron -30
KPX Ntilde Aogonek -30
KPX Ntilde Aring -30
KPX Ntilde Atilde -30
KPX O A -40
KPX O Aacute -40
KPX O Abreve -40
KPX O Acircumflex -40
KPX O Adieresis -40
KPX O Agrave -40
KPX O Amacron -40
KPX O Aogonek -40
KPX O Aring -40
KPX O Atilde -40
KPX O T -40
KPX O Tcaron -40
KPX O Tcommaaccent -40
KPX O V -50
KPX O W -50
KPX O X -40
KPX O Y -50
KPX O Yacute -50
KPX O Ydieresis -50
KPX Oacute A -40
KPX Oacute Aacute -40
KPX Oacute Abreve -40
KPX Oacute Acircumflex -40
KPX Oacute Adieresis -40
KPX Oacute Agrave -40
KPX Oacute Amacron -40
KPX Oacute Aogonek -40
KPX Oacute Aring -40
KPX Oacute Atilde -40
KPX Oacute T -40
KPX Oacute Tcaron -40
KPX Oacute Tcommaaccent -40
KPX Oacute V -50
KPX Oacute W -50
KPX Oacute X -40
KPX Oacute Y -50
KPX Oacute Yacute -50
KPX Oacute Ydieresis -50
KPX Ocircumflex A -40
KPX Ocircumflex Aacute -40
KPX Ocircumflex Abreve -40
KPX Ocircumflex Acircumflex -40
KPX Ocircumflex Adieresis -40
KPX Ocircumflex Agrave -40
KPX Ocircumflex Amacron -40
KPX Ocircumflex Aogonek -40
KPX Ocircumflex Aring -40
KPX Ocircumflex Atilde -40
KPX Ocircumflex T -40
KPX Ocircumflex Tcaron -40
KPX Ocircumflex Tcommaaccent -40
KPX Ocircumflex V -50
KPX Ocircumflex W -50
KPX Ocircumflex X -40
KPX Ocircumflex Y -50
KPX Ocircumflex Yacute -50
KPX Ocircumflex Ydieresis -50
KPX Odieresis A -40
KPX Odieresis Aacute -40
KPX Odieresis Abreve -40
KPX Odieresis Acircumflex -40
KPX Odieresis Adieresis -40
KPX Odieresis Agrave -40
KPX Odieresis Amacron -40
KPX Odieresis Aogonek -40
KPX Odieresis Aring -40
KPX Odieresis Atilde -40
KPX Odieresis T -40
KPX Odieresis Tcaron -40
KPX Odieresis Tcommaaccent -40
KPX Odieresis V -50
KPX Odieresis W -50
KPX Odieresis X -40
KPX Odieresis Y -50
KPX Odieresis Yacute -50
KPX Odieresis Ydieresis -50
KPX Ograve A -40
KPX Ograve Aacute -40
KPX Ograve Abreve -40
KPX Ograve Acircumflex -40
KPX Ograve Adieresis -40
KPX Ograve Agrave -40
KPX Ograve Amacron -40
KPX Ograve Aogonek -40
KPX Ograve Aring -40
KPX Ograve Atilde -40
KPX Ograve T -40
KPX Ograve Tcaron -40
KPX Ograve Tcommaaccent -40
KPX Ograve V -50
KPX Ograve W -50
KPX Ograve X -40
KPX Ograve Y -50
KPX Ograve Yacute -50
KPX Ograve Ydieresis -50
KPX Ohungarumlaut A -40
KPX Ohungarumlaut Aacute -40
KPX Ohungarumlaut Abreve -40
KPX Ohungarumlaut Acircumflex -40
KPX Ohungarumlaut Adieresis -40
KPX Ohungarumlaut Agrave -40
KPX Ohungarumlaut Amacron -40
KPX Ohungarumlaut Aogonek -40
KPX Ohungarumlaut Aring -40
KPX Ohungarumlaut Atilde -40
KPX Ohungarumlaut T -40
KPX Ohungarumlaut Tcaron -40
KPX Ohungarumlaut Tcommaaccent -40
KPX Ohungarumlaut V -50
KPX Ohungarumlaut W -50
KPX Ohungarumlaut X -40
KPX Ohungarumlaut Y -50
KPX Ohungarumlaut Yacute -50
KPX Ohungarumlaut Ydieresis -50
KPX Omacron A -40
KPX Omacron Aacute -40
KPX Omacron Abreve -40
KPX Omacron Acircumflex -40
KPX Omacron Adieresis -40
KPX Omacron Agrave -40
KPX Omacron Amacron -40
KPX Omacron Aogonek -40
KPX Omacron Aring -40
KPX Omacron Atilde -40
KPX Omacron T -40
KPX Omacron Tcaron -40
KPX Omacron Tcommaaccent -40
KPX Omacron V -50
KPX Omacron W -50
KPX Omacron X -40
KPX Omacron Y -50
KPX Omacron Yacute -50
KPX Omacron Ydieresis -50
KPX Oslash A -40
KPX Oslash Aacute -40
KPX Oslash Abreve -40
KPX Oslash Acircumflex -40
KPX Oslash Adieresis -40
KPX Oslash Agrave -40
KPX Oslash Amacron -40
KPX Oslash Aogonek -40
KPX Oslash Aring -40
KPX Oslash Atilde -40
KPX Oslash T -40
KPX Oslash Tcaron -40
KPX Oslash Tcommaaccent -40
KPX Oslash V -50
KPX Oslash W -50
KPX Oslash X -40
KPX Oslash Y -50
KPX Oslash Yacute -50
KPX Oslash Ydieresis -50
KPX Otilde A -40
KPX Otilde Aacute -40
KPX Otilde Abreve -40
KPX Otilde Acircumflex -40
KPX Otilde Adieresis -40
KPX Otilde Agrave -40
KPX Otilde Amacron -40
KPX Otilde Aogonek -40
KPX Otilde Aring -40
KPX Otilde Atilde -40
KPX Otilde T -40
KPX Otilde Tcaron -40
KPX Otilde Tcommaaccent -40
KPX Otilde V -50
KPX Otilde W -50
KPX Otilde X -40
KPX Otilde Y -50
KPX Otilde Yacute -50
KPX Otilde Ydieresis -50
KPX P A -85
KPX P Aacute -85
KPX P Abreve -85
KPX P Acircumflex -85
KPX P Adieresis -85
KPX P Agrave -85
KPX P Amacron -85
KPX P Aogonek -85
KPX P Aring -85
KPX P Atilde -85
KPX P a -40
KPX P aacute -40
KPX P abreve -40
KPX P acircumflex -40
KPX P adieresis -40
KPX P agrave -40
KPX P amacron -40
KPX P aogonek -40
KPX P aring -40
KPX P atilde -40
KPX P comma -129
KPX P e -50
KPX P eacute -50
KPX P ecaron -50
KPX P ecircumflex -50
KPX P edieresis -50
KPX P edotaccent -50
KPX P egrave -50
KPX P emacron -50
KPX P eogonek -50
KPX P o -55
KPX P oacute -55
KPX P ocircumflex -55
KPX P odieresis -55
KPX P ograve -55
KPX P ohungarumlaut -55
KPX P omacron -55
KPX P oslash -55
KPX P otilde -55
KPX P period -129
KPX Q U -10
KPX Q Uacute -10
KPX Q Ucircumflex -10
KPX Q Udieresis -10
KPX Q Ugrave -10
KPX Q Uhungarumlaut -10
KPX Q Umacron -10
KPX Q Uogonek -10
KPX Q Uring -10
KPX R O -40
KPX R Oacute -40
KPX R Ocircumflex -40
KPX R Odieresis -40
KPX R Ograve -40
KPX R Ohungarumlaut -40
KPX R Omacron -40
KPX R Oslash -40
KPX R Otilde -40
KPX R T -30
KPX R Tcaron -30
KPX R Tcommaaccent -30
KPX R U -40
KPX R Uacute -40
KPX R Ucircumflex -40
KPX R Udieresis -40
KPX R Ugrave -40
KPX R Uhungarumlaut -40
KPX R Umacron -40
KPX R Uogonek -40
KPX R Uring -40
KPX R V -18
KPX R W -18
KPX R Y -18
KPX R Yacute -18
KPX R Ydieresis -18
KPX Racute O -40
KPX Racute Oacute -40
KPX Racute Ocircumflex -40
KPX Racute Odieresis -40
KPX Racute Ograve -40
KPX Racute Ohungarumlaut -40
KPX Racute Omacron -40
KPX Racute Oslash -40
KPX Racute Otilde -40
KPX Racute T -30
KPX Racute Tcaron -30
KPX Racute Tcommaaccent -30
KPX Racute U -40
KPX Racute Uacute -40
KPX Racute Ucircumflex -40
KPX Racute Udieresis -40
KPX Racute Ugrave -40
KPX Racute Uhungarumlaut -40
KPX Racute Umacron -40
KPX Racute Uogonek -40
KPX Racute Uring -40
KPX Racute V -18
KPX Racute W -18
KPX Racute Y -18
KPX Racute Yacute -18
KPX Racute Ydieresis -18
KPX Rcaron O -40
KPX Rcaron Oacute -40
KPX Rcaron Ocircumflex -40
KPX Rcaron Odieresis -40
KPX Rcaron Ograve -40
KPX Rcaron Ohungarumlaut -40
KPX Rcaron Omacron -40
KPX Rcaron Oslash -40
KPX Rcaron Otilde -40
KPX Rcaron T -30
KPX Rcaron Tcaron -30
KPX Rcaron Tcommaaccent -30
KPX Rcaron U -40
KPX Rcaron Uacute -40
KPX Rcaron Ucircumflex -40
KPX Rcaron Udieresis -40
KPX Rcaron Ugrave -40
KPX Rcaron Uhungarumlaut -40
KPX Rcaron Umacron -40
KPX Rcaron Uogonek -40
KPX Rcaron Uring -40
KPX Rcaron V -18
KPX Rcaron W -18
KPX Rcaron Y -18
KPX Rcaron Yacute -18
KPX Rcaron Ydieresis -18
KPX Rcommaaccent O -40
KPX Rcommaaccent Oacute -40
KPX Rcommaaccent Ocircumflex -40
KPX Rcommaaccent Odieresis -40
KPX Rcommaaccent Ograve -40
KPX Rcommaaccent Ohungarumlaut -40
KPX Rcommaaccent Omacron -40
KPX Rcommaaccent Oslash -40
KPX Rcommaaccent Otilde -40
KPX Rcommaaccent T -30
KPX Rcommaaccent Tcaron -30
KPX Rcommaaccent Tcommaaccent -30
KPX Rcommaaccent U -40
KPX Rcommaaccent Uacute -40
KPX Rcommaaccent Ucircumflex -40
KPX Rcommaaccent Udieresis -40
KPX Rcommaaccent Ugrave -40
KPX Rcommaaccent Uhungarumlaut -40
KPX Rcommaaccent Umacron -40
KPX Rcommaaccent Uogonek -40
KPX Rcommaaccent Uring -40
KPX Rcommaaccent V -18
KPX Rcommaaccent W -18
KPX Rcommaaccent Y -18
KPX Rcommaaccent Yacute -18
KPX Rcommaaccent Ydieresis -18
KPX T A -55
KPX T Aacute -55
KPX T Abreve -55
KPX T Acircumflex -55
KPX T Adieresis -55
KPX T Agrave -55
KPX T Amacron -55
KPX T Aogonek -55
KPX T Aring -55
KPX T Atilde -55
KPX T O -18
KPX T Oacute -18
KPX T Ocircumflex -18
KPX T Odieresis -18
KPX T Ograve -18
KPX T Ohungarumlaut -18
KPX T Omacron -18
KPX T Oslash -18
KPX T Otilde -18
KPX T a -92
KPX T aacute -92
KPX T abreve -92
KPX T acircumflex -92
KPX T adieresis -92
KPX T agrave -92
KPX T amacron -92
KPX T aogonek -92
KPX T aring -92
KPX T atilde -92
KPX T colon -74
KPX T comma -92
KPX T e -92
KPX T eacute -92
KPX T ecaron -92
KPX T ecircumflex -92
KPX T edieresis -52
KPX T edotaccent -92
KPX T egrave -52
KPX T emacron -52
KPX T eogonek -92
KPX T hyphen -92
KPX T i -37
KPX T iacute -37
KPX T iogonek -37
KPX T o -95
KPX T oacute -95
KPX T ocircumflex -95
KPX T odieresis -95
KPX T ograve -95
KPX T ohungarumlaut -95
KPX T omacron -95
KPX T oslash -95
KPX T otilde -95
KPX T period -92
KPX T r -37
KPX T racute -37
KPX T rcaron -37
KPX T rcommaaccent -37
KPX T semicolon -74
KPX T u -37
KPX T uacute -37
KPX T ucircumflex -37
KPX T udieresis -37
KPX T ugrave -37
KPX T uhungarumlaut -37
KPX T umacron -37
KPX T uogonek -37
KPX T uring -37
KPX T w -37
KPX T y -37
KPX T yacute -37
KPX T ydieresis -37
KPX Tcaron A -55
KPX Tcaron Aacute -55
KPX Tcaron Abreve -55
KPX Tcaron Acircumflex -55
KPX Tcaron Adieresis -55
KPX Tcaron Agrave -55
KPX Tcaron Amacron -55
KPX Tcaron Aogonek -55
KPX Tcaron Aring -55
KPX Tcaron Atilde -55
KPX Tcaron O -18
KPX Tcaron Oacute -18
KPX Tcaron Ocircumflex -18
KPX Tcaron Odieresis -18
KPX Tcaron Ograve -18
KPX Tcaron Ohungarumlaut -18
KPX Tcaron Omacron -18
KPX Tcaron Oslash -18
KPX Tcaron Otilde -18
KPX Tcaron a -92
KPX Tcaron aacute -92
KPX Tcaron abreve -92
KPX Tcaron acircumflex -92
KPX Tcaron adieresis -92
KPX Tcaron agrave -92
KPX Tcaron amacron -92
KPX Tcaron aogonek -92
KPX Tcaron aring -92
KPX Tcaron atilde -92
KPX Tcaron colon -74
KPX Tcaron comma -92
KPX Tcaron e -92
KPX Tcaron eacute -92
KPX Tcaron ecaron -92
KPX Tcaron ecircumflex -92
KPX Tcaron edieresis -52
KPX Tcaron edotaccent -92
KPX Tcaron egrave -52
KPX Tcaron emacron -52
KPX Tcaron eogonek -92
KPX Tcaron hyphen -92
KPX Tcaron i -37
KPX Tcaron iacute -37
KPX Tcaron iogonek -37
KPX Tcaron o -95
KPX Tcaron oacute -95
KPX Tcaron ocircumflex -95
KPX Tcaron odieresis -95
KPX Tcaron ograve -95
KPX Tcaron ohungarumlaut -95
KPX Tcaron omacron -95
KPX Tcaron oslash -95
KPX Tcaron otilde -95
KPX Tcaron period -92
KPX Tcaron r -37
KPX Tcaron racute -37
KPX Tcaron rcaron -37
KPX Tcaron rcommaaccent -37
KPX Tcaron semicolon -74
KPX Tcaron u -37
KPX Tcaron uacute -37
KPX Tcaron ucircumflex -37
KPX Tcaron udieresis -37
KPX Tcaron ugrave -37
KPX Tcaron uhungarumlaut -37
KPX Tcaron umacron -37
KPX Tcaron uogonek -37
KPX Tcaron uring -37
KPX Tcaron w -37
KPX Tcaron y -37
KPX Tcaron yacute -37
KPX Tcaron ydieresis -37
KPX Tcommaaccent A -55
KPX Tcommaaccent Aacute -55
KPX Tcommaaccent Abreve -55
KPX Tcommaaccent Acircumflex -55
KPX Tcommaaccent Adieresis -55
KPX Tcommaaccent Agrave -55
KPX Tcommaaccent Amacron -55
KPX Tcommaaccent Aogonek -55
KPX Tcommaaccent Aring -55
KPX Tcommaaccent Atilde -55
KPX Tcommaaccent O -18
KPX Tcommaaccent Oacute -18
KPX Tcommaaccent Ocircumflex -18
KPX Tcommaaccent Odieresis -18
KPX Tcommaaccent Ograve -18
KPX Tcommaaccent Ohungarumlaut -18
KPX Tcommaaccent Omacron -18
KPX Tcommaaccent Oslash -18
KPX Tcommaaccent Otilde -18
KPX Tcommaaccent a -92
KPX Tcommaaccent aacute -92
KPX Tcommaaccent abreve -92
KPX Tcommaaccent acircumflex -92
KPX Tcommaaccent adieresis -92
KPX Tcommaaccent agrave -92
KPX Tcommaaccent amacron -92
KPX Tcommaaccent aogonek -92
KPX Tcommaaccent aring -92
KPX Tcommaaccent atilde -92
KPX Tcommaaccent colon -74
KPX Tcommaaccent comma -92
KPX Tcommaaccent e -92
KPX Tcommaaccent eacute -92
KPX Tcommaaccent ecaron -92
KPX Tcommaaccent ecircumflex -92
KPX Tcommaaccent edieresis -52
KPX Tcommaaccent edotaccent -92
KPX Tcommaaccent egrave -52
KPX Tcommaaccent emacron -52
KPX Tcommaaccent eogonek -92
KPX Tcommaaccent hyphen -92
KPX Tcommaaccent i -37
KPX Tcommaaccent iacute -37
KPX Tcommaaccent iogonek -37
KPX Tcommaaccent o -95
KPX Tcommaaccent oacute -95
KPX Tcommaaccent ocircumflex -95
KPX Tcommaaccent odieresis -95
KPX Tcommaaccent ograve -95
KPX Tcommaaccent ohungarumlaut -95
KPX Tcommaaccent omacron -95
KPX Tcommaaccent oslash -95
KPX Tcommaaccent otilde -95
KPX Tcommaaccent period -92
KPX Tcommaaccent r -37
KPX Tcommaaccent racute -37
KPX Tcommaaccent rcaron -37
KPX Tcommaaccent rcommaaccent -37
KPX Tcommaaccent semicolon -74
KPX Tcommaaccent u -37
KPX Tcommaaccent uacute -37
KPX Tcommaaccent ucircumflex -37
KPX Tcommaaccent udieresis -37
KPX Tcommaaccent ugrave -37
KPX Tcommaaccent uhungarumlaut -37
KPX Tcommaaccent umacron -37
KPX Tcommaaccent uogonek -37
KPX Tcommaaccent uring -37
KPX Tcommaaccent w -37
KPX Tcommaaccent y -37
KPX Tcommaaccent yacute -37
KPX Tcommaaccent ydieresis -37
KPX U A -45
KPX U Aacute -45
KPX U Abreve -45
KPX U Acircumflex -45
KPX U Adieresis -45
KPX U Agrave -45
KPX U Amacron -45
KPX U Aogonek -45
KPX U Aring -45
KPX U Atilde -45
KPX Uacute A -45
KPX Uacute Aacute -45
KPX Uacute Abreve -45
KPX Uacute Acircumflex -45
KPX Uacute Adieresis -45
KPX Uacute Agrave -45
KPX Uacute Amacron -45
KPX Uacute Aogonek -45
KPX Uacute Aring -45
KPX Uacute Atilde -45
KPX Ucircumflex A -45
KPX Ucircumflex Aacute -45
KPX Ucircumflex Abreve -45
KPX Ucircumflex Acircumflex -45
KPX Ucircumflex Adieresis -45
KPX Ucircumflex Agrave -45
KPX Ucircumflex Amacron -45
KPX Ucircumflex Aogonek -45
KPX Ucircumflex Aring -45
KPX Ucircumflex Atilde -45
KPX Udieresis A -45
KPX Udieresis Aacute -45
KPX Udieresis Abreve -45
KPX Udieresis Acircumflex -45
KPX Udieresis Adieresis -45
KPX Udieresis Agrave -45
KPX Udieresis Amacron -45
KPX Udieresis Aogonek -45
KPX Udieresis Aring -45
KPX Udieresis Atilde -45
KPX Ugrave A -45
KPX Ugrave Aacute -45
KPX Ugrave Abreve -45
KPX Ugrave Acircumflex -45
KPX Ugrave Adieresis -45
KPX Ugrave Agrave -45
KPX Ugrave Amacron -45
KPX Ugrave Aogonek -45
KPX Ugrave Aring -45
KPX Ugrave Atilde -45
KPX Uhungarumlaut A -45
KPX Uhungarumlaut Aacute -45
KPX Uhungarumlaut Abreve -45
KPX Uhungarumlaut Acircumflex -45
KPX Uhungarumlaut Adieresis -45
KPX Uhungarumlaut Agrave -45
KPX Uhungarumlaut Amacron -45
KPX Uhungarumlaut Aogonek -45
KPX Uhungarumlaut Aring -45
KPX Uhungarumlaut Atilde -45
KPX Umacron A -45
KPX Umacron Aacute -45
KPX Umacron Abreve -45
KPX Umacron Acircumflex -45
KPX Umacron Adieresis -45
KPX Umacron Agrave -45
KPX Umacron Amacron -45
KPX Umacron Aogonek -45
KPX Umacron Aring -45
KPX Umacron Atilde -45
KPX Uogonek A -45
KPX Uogonek Aacute -45
KPX Uogonek Abreve -45
KPX Uogonek Acircumflex -45
KPX Uogonek Adieresis -45
KPX Uogonek Agrave -45
KPX Uogonek Amacron -45
KPX Uogonek Aogonek -45
KPX Uogonek Aring -45
KPX Uogonek Atilde -45
KPX Uring A -45
KPX Uring Aacute -45
KPX Uring Abreve -45
KPX Uring Acircumflex -45
KPX Uring Adieresis -45
KPX Uring Agrave -45
KPX Uring Amacron -45
KPX Uring Aogonek -45
KPX Uring Aring -45
KPX Uring Atilde -45
KPX V A -85
KPX V Aacute -85
KPX V Abreve -85
KPX V Acircumflex -85
KPX V Adieresis -85
KPX V Agrave -85
KPX V Amacron -85
KPX V Aogonek -85
KPX V Aring -85
KPX V Atilde -85
KPX V G -10
KPX V Gbreve -10
KPX V Gcommaaccent -10
KPX V O -30
KPX V Oacute -30
KPX V Ocircumflex -30
KPX V Odieresis -30
KPX V Ograve -30
KPX V Ohungarumlaut -30
KPX V Omacron -30
KPX V Oslash -30
KPX V Otilde -30
KPX V a -111
KPX V aacute -111
KPX V abreve -111
KPX V acircumflex -111
KPX V adieresis -111
KPX V agrave -111
KPX V amacron -111
KPX V aogonek -111
KPX V aring -111
KPX V atilde -111
KPX V colon -74
KPX V comma -129
KPX V e -111
KPX V eacute -111
KPX V ecaron -111
KPX V ecircumflex -111
KPX V edieresis -71
KPX V edotaccent -111
KPX V egrave -71
KPX V emacron -71
KPX V eogonek -111
KPX V hyphen -70
KPX V i -55
KPX V iacute -55
KPX V iogonek -55
KPX V o -111
KPX V oacute -111
KPX V ocircumflex -111
KPX V odieresis -111
KPX V ograve -111
KPX V ohungarumlaut -111
KPX V omacron -111
KPX V oslash -111
KPX V otilde -111
KPX V period -129
KPX V semicolon -74
KPX V u -55
KPX V uacute -55
KPX V ucircumflex -55
KPX V udieresis -55
KPX V ugrave -55
KPX V uhungarumlaut -55
KPX V umacron -55
KPX V uogonek -55
KPX V uring -55
KPX W A -74
KPX W Aacute -74
KPX W Abreve -74
KPX W Acircumflex -74
KPX W Adieresis -74
KPX W Agrave -74
KPX W Amacron -74
KPX W Aogonek -74
KPX W Aring -74
KPX W Atilde -74
KPX W O -15
KPX W Oacute -15
KPX W Ocircumflex -15
KPX W Odieresis -15
KPX W Ograve -15
KPX W Ohungarumlaut -15
KPX W Omacron -15
KPX W Oslash -15
KPX W Otilde -15
KPX W a -85
KPX W aacute -85
KPX W abreve -85
KPX W acircumflex -85
KPX W adieresis -85
KPX W agrave -85
KPX W amacron -85
KPX W aogonek -85
KPX W aring -85
KPX W atilde -85
KPX W colon -55
KPX W comma -74
KPX W e -90
KPX W eacute -90
KPX W ecaron -90
KPX W ecircumflex -90
KPX W edieresis -50
KPX W edotaccent -90
KPX W egrave -50
KPX W emacron -50
KPX W eogonek -90
KPX W hyphen -50
KPX W i -37
KPX W iacute -37
KPX W iogonek -37
KPX W o -80
KPX W oacute -80
KPX W ocircumflex -80
KPX W odieresis -80
KPX W ograve -80
KPX W ohungarumlaut -80
KPX W omacron -80
KPX W oslash -80
KPX W otilde -80
KPX W period -74
KPX W semicolon -55
KPX W u -55
KPX W uacute -55
KPX W ucircumflex -55
KPX W udieresis -55
KPX W ugrave -55
KPX W uhungarumlaut -55
KPX W umacron -55
KPX W uogonek -55
KPX W uring -55
KPX W y -55
KPX W yacute -55
KPX W ydieresis -55
KPX Y A -74
KPX Y Aacute -74
KPX Y Abreve -74
KPX Y Acircumflex -74
KPX Y Adieresis -74
KPX Y Agrave -74
KPX Y Amacron -74
KPX Y Aogonek -74
KPX Y Aring -74
KPX Y Atilde -74
KPX Y O -25
KPX Y Oacute -25
KPX Y Ocircumflex -25
KPX Y Odieresis -25
KPX Y Ograve -25
KPX Y Ohungarumlaut -25
KPX Y Omacron -25
KPX Y Oslash -25
KPX Y Otilde -25
KPX Y a -92
KPX Y aacute -92
KPX Y abreve -92
KPX Y acircumflex -92
KPX Y adieresis -92
KPX Y agrave -92
KPX Y amacron -92
KPX Y aogonek -92
KPX Y aring -92
KPX Y atilde -92
KPX Y colon -92
KPX Y comma -92
KPX Y e -111
KPX Y eacute -111
KPX Y ecaron -111
KPX Y ecircumflex -71
KPX Y edieresis -71
KPX Y edotaccent -111
KPX Y egrave -71
KPX Y emacron -71
KPX Y eogonek -111
KPX Y hyphen -92
KPX Y i -55
KPX Y iacute -55
KPX Y iogonek -55
KPX Y o -111
KPX Y oacute -111
KPX Y ocircumflex -111
KPX Y odieresis -111
KPX Y ograve -111
KPX Y ohungarumlaut -111
KPX Y omacron -111
KPX Y oslash -111
KPX Y otilde -111
KPX Y period -74
KPX Y semicolon -92
KPX Y u -92
KPX Y uacute -92
KPX Y ucircumflex -92
KPX Y udieresis -92
KPX Y ugrave -92
KPX Y uhungarumlaut -92
KPX Y umacron -92
KPX Y uogonek -92
KPX Y uring -92
KPX Yacute A -74
KPX Yacute Aacute -74
KPX Yacute Abreve -74
KPX Yacute Acircumflex -74
KPX Yacute Adieresis -74
KPX Yacute Agrave -74
KPX Yacute Amacron -74
KPX Yacute Aogonek -74
KPX Yacute Aring -74
KPX Yacute Atilde -74
KPX Yacute O -25
KPX Yacute Oacute -25
KPX Yacute Ocircumflex -25
KPX Yacute Odieresis -25
KPX Yacute Ograve -25
KPX Yacute Ohungarumlaut -25
KPX Yacute Omacron -25
KPX Yacute Oslash -25
KPX Yacute Otilde -25
KPX Yacute a -92
KPX Yacute aacute -92
KPX Yacute abreve -92
KPX Yacute acircumflex -92
KPX Yacute adieresis -92
KPX Yacute agrave -92
KPX Yacute amacron -92
KPX Yacute aogonek -92
KPX Yacute aring -92
KPX Yacute atilde -92
KPX Yacute colon -92
KPX Yacute comma -92
KPX Yacute e -111
KPX Yacute eacute -111
KPX Yacute ecaron -111
KPX Yacute ecircumflex -71
KPX Yacute edieresis -71
KPX Yacute edotaccent -111
KPX Yacute egrave -71
KPX Yacute emacron -71
KPX Yacute eogonek -111
KPX Yacute hyphen -92
KPX Yacute i -55
KPX Yacute iacute -55
KPX Yacute iogonek -55
KPX Yacute o -111
KPX Yacute oacute -111
KPX Yacute ocircumflex -111
KPX Yacute odieresis -111
KPX Yacute ograve -111
KPX Yacute ohungarumlaut -111
KPX Yacute omacron -111
KPX Yacute oslash -111
KPX Yacute otilde -111
KPX Yacute period -74
KPX Yacute semicolon -92
KPX Yacute u -92
KPX Yacute uacute -92
KPX Yacute ucircumflex -92
KPX Yacute udieresis -92
KPX Yacute ugrave -92
KPX Yacute uhungarumlaut -92
KPX Yacute umacron -92
KPX Yacute uogonek -92
KPX Yacute uring -92
KPX Ydieresis A -74
KPX Ydieresis Aacute -74
KPX Ydieresis Abreve -74
KPX Ydieresis Acircumflex -74
KPX Ydieresis Adieresis -74
KPX Ydieresis Agrave -74
KPX Ydieresis Amacron -74
KPX Ydieresis Aogonek -74
KPX Ydieresis Aring -74
KPX Ydieresis Atilde -74
KPX Ydieresis O -25
KPX Ydieresis Oacute -25
KPX Ydieresis Ocircumflex -25
KPX Ydieresis Odieresis -25
KPX Ydieresis Ograve -25
KPX Ydieresis Ohungarumlaut -25
KPX Ydieresis Omacron -25
KPX Ydieresis Oslash -25
KPX Ydieresis Otilde -25
KPX Ydieresis a -92
KPX Ydieresis aacute -92
KPX Ydieresis abreve -92
KPX Ydieresis acircumflex -92
KPX Ydieresis adieresis -92
KPX Ydieresis agrave -92
KPX Ydieresis amacron -92
KPX Ydieresis aogonek -92
KPX Ydieresis aring -92
KPX Ydieresis atilde -92
KPX Ydieresis colon -92
KPX Ydieresis comma -92
KPX Ydieresis e -111
KPX Ydieresis eacute -111
KPX Ydieresis ecaron -111
KPX Ydieresis ecircumflex -71
KPX Ydieresis edieresis -71
KPX Ydieresis edotaccent -111
KPX Ydieresis egrave -71
KPX Ydieresis emacron -71
KPX Ydieresis eogonek -111
KPX Ydieresis hyphen -92
KPX Ydieresis i -55
KPX Ydieresis iacute -55
KPX Ydieresis iogonek -55
KPX Ydieresis o -111
KPX Ydieresis oacute -111
KPX Ydieresis ocircumflex -111
KPX Ydieresis odieresis -111
KPX Ydieresis ograve -111
KPX Ydieresis ohungarumlaut -111
KPX Ydieresis omacron -111
KPX Ydieresis oslash -111
KPX Ydieresis otilde -111
KPX Ydieresis period -74
KPX Ydieresis semicolon -92
KPX Ydieresis u -92
KPX Ydieresis uacute -92
KPX Ydieresis ucircumflex -92
KPX Ydieresis udieresis -92
KPX Ydieresis ugrave -92
KPX Ydieresis uhungarumlaut -92
KPX Ydieresis umacron -92
KPX Ydieresis uogonek -92
KPX Ydieresis uring -92
KPX b b -10
KPX b period -40
KPX b u -20
KPX b uacute -20
KPX b ucircumflex -20
KPX b udieresis -20
KPX b ugrave -20
KPX b uhungarumlaut -20
KPX b umacron -20
KPX b uogonek -20
KPX b uring -20
KPX c h -10
KPX c k -10
KPX c kcommaaccent -10
KPX cacute h -10
KPX cacute k -10
KPX cacute kcommaaccent -10
KPX ccaron h -10
KPX ccaron k -10
KPX ccaron kcommaaccent -10
KPX ccedilla h -10
KPX ccedilla k -10
KPX ccedilla kcommaaccent -10
KPX comma quotedblright -95
KPX comma quoteright -95
KPX e b -10
KPX eacute b -10
KPX ecaron b -10
KPX ecircumflex b -10
KPX edieresis b -10
KPX edotaccent b -10
KPX egrave b -10
KPX emacron b -10
KPX eogonek b -10
KPX f comma -10
KPX f dotlessi -30
KPX f e -10
KPX f eacute -10
KPX f edotaccent -10
KPX f eogonek -10
KPX f f -18
KPX f o -10
KPX f oacute -10
KPX f ocircumflex -10
KPX f ograve -10
KPX f ohungarumlaut -10
KPX f oslash -10
KPX f otilde -10
KPX f period -10
KPX f quoteright 55
KPX k e -30
KPX k eacute -30
KPX k ecaron -30
KPX k ecircumflex -30
KPX k edieresis -30
KPX k edotaccent -30
KPX k egrave -30
KPX k emacron -30
KPX k eogonek -30
KPX k o -10
KPX k oacute -10
KPX k ocircumflex -10
KPX k odieresis -10
KPX k ograve -10
KPX k ohungarumlaut -10
KPX k omacron -10
KPX k oslash -10
KPX k otilde -10
KPX kcommaaccent e -30
KPX kcommaaccent eacute -30
KPX kcommaaccent ecaron -30
KPX kcommaaccent ecircumflex -30
KPX kcommaaccent edieresis -30
KPX kcommaaccent edotaccent -30
KPX kcommaaccent egrave -30
KPX kcommaaccent emacron -30
KPX kcommaaccent eogonek -30
KPX kcommaaccent o -10
KPX kcommaaccent oacute -10
KPX kcommaaccent ocircumflex -10
KPX kcommaaccent odieresis -10
KPX kcommaaccent ograve -10
KPX kcommaaccent ohungarumlaut -10
KPX kcommaaccent omacron -10
KPX kcommaaccent oslash -10
KPX kcommaaccent otilde -10
KPX n v -40
KPX nacute v -40
KPX ncaron v -40
KPX ncommaaccent v -40
KPX ntilde v -40
KPX o v -15
KPX o w -25
KPX o x -10
KPX o y -10
KPX o yacute -10
KPX o ydieresis -10
KPX oacute v -15
KPX oacute w -25
KPX oacute x -10
KPX oacute y -10
KPX oacute yacute -10
KPX oacute ydieresis -10
KPX ocircumflex v -15
KPX ocircumflex w -25
KPX ocircumflex x -10
KPX ocircumflex y -10
KPX ocircumflex yacute -10
KPX ocircumflex ydieresis -10
KPX odieresis v -15
KPX odieresis w -25
KPX odieresis x -10
KPX odieresis y -10
KPX odieresis yacute -10
KPX odieresis ydieresis -10
KPX ograve v -15
KPX ograve w -25
KPX ograve x -10
KPX ograve y -10
KPX ograve yacute -10
KPX ograve ydieresis -10
KPX ohungarumlaut v -15
KPX ohungarumlaut w -25
KPX ohungarumlaut x -10
KPX ohungarumlaut y -10
KPX ohungarumlaut yacute -10
KPX ohungarumlaut ydieresis -10
KPX omacron v -15
KPX omacron w -25
KPX omacron x -10
KPX omacron y -10
KPX omacron yacute -10
KPX omacron ydieresis -10
KPX oslash v -15
KPX oslash w -25
KPX oslash x -10
KPX oslash y -10
KPX oslash yacute -10
KPX oslash ydieresis -10
KPX otilde v -15
KPX otilde w -25
KPX otilde x -10
KPX otilde y -10
KPX otilde yacute -10
KPX otilde ydieresis -10
KPX period quotedblright -95
KPX period quoteright -95
KPX quoteleft quoteleft -74
KPX quoteright d -15
KPX quoteright dcroat -15
KPX quoteright quoteright -74
KPX quoteright r -15
KPX quoteright racute -15
KPX quoteright rcaron -15
KPX quoteright rcommaaccent -15
KPX quoteright s -74
KPX quoteright sacute -74
KPX quoteright scaron -74
KPX quoteright scedilla -74
KPX quoteright scommaaccent -74
KPX quoteright space -74
KPX quoteright t -37
KPX quoteright tcommaaccent -37
KPX quoteright v -15
KPX r comma -65
KPX r period -65
KPX racute comma -65
KPX racute period -65
KPX rcaron comma -65
KPX rcaron period -65
KPX rcommaaccent comma -65
KPX rcommaaccent period -65
KPX space A -37
KPX space Aacute -37
KPX space Abreve -37
KPX space Acircumflex -37
KPX space Adieresis -37
KPX space Agrave -37
KPX space Amacron -37
KPX space Aogonek -37
KPX space Aring -37
KPX space Atilde -37
KPX space V -70
KPX space W -70
KPX space Y -70
KPX space Yacute -70
KPX space Ydieresis -70
KPX v comma -37
KPX v e -15
KPX v eacute -15
KPX v ecaron -15
KPX v ecircumflex -15
KPX v edieresis -15
KPX v edotaccent -15
KPX v egrave -15
KPX v emacron -15
KPX v eogonek -15
KPX v o -15
KPX v oacute -15
KPX v ocircumflex -15
KPX v odieresis -15
KPX v ograve -15
KPX v ohungarumlaut -15
KPX v omacron -15
KPX v oslash -15
KPX v otilde -15
KPX v period -37
KPX w a -10
KPX w aacute -10
KPX w abreve -10
KPX w acircumflex -10
KPX w adieresis -10
KPX w agrave -10
KPX w amacron -10
KPX w aogonek -10
KPX w aring -10
KPX w atilde -10
KPX w comma -37
KPX w e -10
KPX w eacute -10
KPX w ecaron -10
KPX w ecircumflex -10
KPX w edieresis -10
KPX w edotaccent -10
KPX w egrave -10
KPX w emacron -10
KPX w eogonek -10
KPX w o -15
KPX w oacute -15
KPX w ocircumflex -15
KPX w odieresis -15
KPX w ograve -15
KPX w ohungarumlaut -15
KPX w omacron -15
KPX w oslash -15
KPX w otilde -15
KPX w period -37
KPX x e -10
KPX x eacute -10
KPX x ecaron -10
KPX x ecircumflex -10
KPX x edieresis -10
KPX x edotaccent -10
KPX x egrave -10
KPX x emacron -10
KPX x eogonek -10
KPX y comma -37
KPX y period -37
KPX yacute comma -37
KPX yacute period -37
KPX ydieresis comma -37
KPX ydieresis period -37
EndKernPairs
EndKernData
EndFontMetrics
StartFontMetrics 4.1
Comment Copyright (c) 1985, 1987, 1989, 1990, 1993, 1997 Adobe Systems Incorporated.  All Rights Reserved.
Comment Creation Date: Thu May  1 12:56:55 1997
Comment UniqueID 43067
Comment VMusage 47727 58752
FontName Times-Italic
FullName Times Italic
FamilyName Times
Weight Medium
ItalicAngle -15.5
IsFixedPitch false
CharacterSet ExtendedRoman
FontBBox -169 -217 1010 883
UnderlinePosition -100
UnderlineThickness 50
Version 002.000
Notice Copyright (c) 1985, 1987, 1989, 1990, 1993, 1997 Adobe Systems Incorporated.  All Rights Reserved.Times is a trademark of Linotype-Hell AG and/or its subsidiaries.
EncodingScheme WinAnsiEncoding
CapHeight 653
XHeight 441
Ascender 683
Descender -217
StdHW 32
StdVW 76
StartCharMetrics 317
C 32 ; WX 250 ; N space ; B 0 0 0 0 ;
C 160 ; WX 250 ; N space ; B 0 0 0 0 ;
C 33 ; WX 333 ; N exclam ; B 39 -11 302 667 ;
C 34 ; WX 420 ; N quotedbl ; B 144 421 432 666 ;
C 35 ; WX 500 ; N numbersign ; B 2 0 540 676 ;
C 36 ; WX 500 ; N dollar ; B 31 -89 497 731 ;
C 37 ; WX 833 ; N percent ; B 79 -13 790 676 ;
C 38 ; WX 778 ; N ampersand ; B 76 -18 723 666 ;
C 146 ; WX 333 ; N quoteright ; B 151 436 290 666 ;
C 40 ; WX 333 ; N parenleft ; B 42 -181 315 669 ;
C 41 ; WX 333 ; N parenright ; B 16 -180 289 669 ;
C 42 ; WX 500 ; N asterisk ; B 128 255 492 666 ;
C 43 ; WX 675 ; N plus ; B 86 0 590 506 ;
C 44 ; WX 250 ; N comma ; B -4 -129 135 101 ;
C 45 ; WX 333 ; N hyphen ; B 49 192 282 255 ;
C 173 ; WX 333 ; N hyphen ; B 49 192 282 255 ;
C 46 ; WX 250 ; N period ; B 27 -11 138 100 ;
C 47 ; WX 278 ; N slash ; B -65 -18 386 666 ;
C 48 ; WX 500 ; N zero ; B 32 -7 497 676 ;
C 49 ; WX 500 ; N one ; B 49 0 409 676 ;
C 50 ; WX 500 ; N two ; B 12 0 452 676 ;
C 51 ; WX 500 ; N three ; B 15 -7 465 676 ;
C 52 ; WX 500 ; N four ; B 1 0 479 676 ;
C 53 ; WX 500 ; N five ; B 15 -7 491 666 ;
C 54 ; WX 500 ; N six ; B 30 -7 521 686 ;
C 55 ; WX 500 ; N seven ; B 75 -8 537 666 ;
C 56 ; WX 500 ; N eight ; B 30 -7 493 676 ;
C 57 ; WX 500 ; N nine ; B 23 -17 492 676 ;
C 58 ; WX 333 ; N colon ; B 50 -11 261 441 ;
C 59 ; WX 333 ; N semicolon ; B 27 -129 261 441 ;
C 60 ; WX 675 ; N less ; B 84 -8 592 514 ;
C 61 ; WX 675 ; N equal ; B 86 120 590 386 ;
C 62 ; WX 675 ; N greater ; B 84 -8 592 514 ;
C 63 ; WX 500 ; N question ; B 132 -12 472 664 ;
C 64 ; WX 920 ; N at ; B 118 -18 806 666 ;
C 65 ; WX 611 ; N A ; B -51 0 564 668 ;
C 66 ; WX 611 ; N B ; B -8 0 588 653 ;
C 67 ; WX 667 ; N C ; B 66 -18 689 666 ;
C 68 ; WX 722 ; N D ; B -8 0 700 653 ;
C 69 ; WX 611 ; N E ; B -1 0 634 653 ;
C 70 ; WX 611 ; N F ; B 8 0 645 653 ;
C 71 ; WX 722 ; N G ; B 52 -18 722 666 ;
C 72 ; WX 722 ; N H ; B -8 0 767 653 ;
C 73 ; WX 333 ; N I ; B -8 0 384 653 ;
C 74 ; WX 444 ; N J ; B -6 -18 491 653 ;
C 75 ; WX 667 ; N K ; B 7 0 722 653 ;
C 76 ; WX 556 ; N L ; B -8 0 559 653 ;
C 77 ; WX 833 ; N M ; B -18 0 873 653 ;
C 78 ; WX 667 ; N N ; B -20 -15 727 653 ;
C 79 ; WX 722 ; N O ; B 60 -18 699 666 ;
C 80 ; WX 611 ; N P ; B 0 0 605 653 ;
C 81 ; WX 722 ; N Q ; B 59 -182 699 666 ;
C 82 ; WX 611 ; N R ; B -13 0 588 653 ;
C 83 ; WX 500 ; N S ; B 17 -18 508 667 ;
C 84 ; WX 556 ; N T ; B 59 0 633 653 ;
C 85 ; WX 722 ; N U ; B 102 -18 765 653 ;
C 86 ; WX 611 ; N V ; B 76 -18 688 653 ;
C 87 ; WX 833 ; N W ; B 71 -18 906 653 ;
C 88 ; WX 611 ; N X ; B -29 0 655 653 ;
C 89 ; WX 556 ; N Y ; B 78 0 633 653 ;
C 90 ; WX 556 ; N Z ; B -6 0 606 653 ;
C 91 ; WX 389 ; N bracketleft ; B 21 -153 391 663 ;
C 92 ; WX 278 ; N backslash ; B -41 -18 319 666 ;
C 93 ; WX 389 ; N bracketright ; B 12 -153 382 663 ;
C 94 ; WX 422 ; N asciicircum ; B 0 301 422 666 ;
C 95 ; WX 500 ; N underscore ; B 0 -125 500 -75 ;
C 145 ; WX 333 ; N quoteleft ; B 171 436 310 666 ;
C 97 ; WX 500 ; N a ; B 17 -11 476 441 ;
C 98 ; WX 500 ; N b ; B 23 -11 473 683 ;
C 99 ; WX 444 ; N c ; B 30 -11 425 441 ;
C 100 ; WX 500 ; N d ; B 15 -13 527 683 ;
C 101 ; WX 444 ; N e ; B 31 -11 412 441 ;
C 102 ; WX 278 ; N f ; B -147 -207 424 678 ; L i fi ; L l fl ;
C 103 ; WX 500 ; N g ; B 8 -206 472 441 ;
C 104 ; WX 500 ; N h ; B 19 -9 478 683 ;
C 105 ; WX 278 ; N i ; B 49 -11 264 654 ;
C 106 ; WX 278 ; N j ; B -124 -207 276 654 ;
C 107 ; WX 444 ; N k ; B 14 -11 461 683 ;
C 108 ; WX 278 ; N l ; B 41 -11 279 683 ;
C 109 ; WX 722 ; N m ; B 12 -9 704 441 ;
C 110 ; WX 500 ; N n ; B 14 -9 474 441 ;
C 111 ; WX 500 ; N o ; B 27 -11 468 441 ;
C 112 ; WX 500 ; N p ; B -75 -205 469 441 ;
C 113 ; WX 500 ; N q ; B 25 -209 483 441 ;
C 114 ; WX 389 ; N r ; B 45 0 412 441 ;
C 115 ; WX 389 ; N s ; B 16 -13 366 442 ;
C 116 ; WX 278 ; N t ; B 37 -11 296 546 ;
C 117 ; WX 500 ; N u ; B 42 -11 475 441 ;
C 118 ; WX 444 ; N v ; B 21 -18 426 441 ;
C 119 ; WX 667 ; N w ; B 16 -18 648 441 ;
C 120 ; WX 444 ; N x ; B -27 -11 447 441 ;
C 121 ; WX 444 ; N y ; B -24 -206 426 441 ;
C 122 ; WX 389 ; N z ; B -2 -81 380 428 ;
C 123 ; WX 400 ; N braceleft ; B 51 -177 407 687 ;
C 124 ; WX 275 ; N bar ; B 105 -217 171 783 ;
C 125 ; WX 400 ; N braceright ; B -7 -177 349 687 ;
C 126 ; WX 541 ; N asciitilde ; B 40 183 502 323 ;
C 161 ; WX 389 ; N exclamdown ; B 59 -205 322 473 ;
C 162 ; WX 500 ; N cent ; B 77 -143 472 560 ;
C 163 ; WX 500 ; N sterling ; B 10 -6 517 670 ;
C -1 ; WX 167 ; N fraction ; B -169 -10 337 676 ;
C 165 ; WX 500 ; N yen ; B 27 0 603 653 ;
C 131 ; WX 500 ; N florin ; B 25 -182 507 682 ;
C 167 ; WX 500 ; N section ; B 53 -162 461 666 ;
C 164 ; WX 500 ; N currency ; B -22 53 522 597 ;
C 39 ; WX 214 ; N quotesingle ; B 132 421 241 666 ;
C 147 ; WX 556 ; N quotedblleft ; B 166 436 514 666 ;
C 171 ; WX 500 ; N guillemotleft ; B 53 37 445 403 ;
C 139 ; WX 333 ; N guilsinglleft ; B 51 37 281 403 ;
C 155 ; WX 333 ; N guilsinglright ; B 52 37 282 403 ;
C -1 ; WX 500 ; N fi ; B -141 -207 481 681 ;
C -1 ; WX 500 ; N fl ; B -141 -204 518 682 ;
C 150 ; WX 500 ; N endash ; B -6 197 505 243 ;
C 134 ; WX 500 ; N dagger ; B 101 -159 488 666 ;
C 135 ; WX 500 ; N daggerdbl ; B 22 -143 491 666 ;
C 183 ; WX 250 ; N periodcentered ; B 70 199 181 310 ;
C 182 ; WX 523 ; N paragraph ; B 55 -123 616 653 ;
C 149 ; WX 350 ; N bullet ; B 40 191 310 461 ;
C 130 ; WX 333 ; N quotesinglbase ; B 44 -129 183 101 ;
C 132 ; WX 556 ; N quotedblbase ; B 57 -129 405 101 ;
C 148 ; WX 556 ; N quotedblright ; B 151 436 499 666 ;
C 187 ; WX 500 ; N guillemotright ; B 55 37 447 403 ;
C 133 ; WX 889 ; N ellipsis ; B 57 -11 762 100 ;
C 137 ; WX 1000 ; N perthousand ; B 25 -19 1010 706 ;
C 191 ; WX 500 ; N questiondown ; B 28 -205 368 471 ;
C 96 ; WX 333 ; N grave ; B 121 492 311 664 ;
C 180 ; WX 333 ; N acute ; B 180 494 403 664 ;
C 136 ; WX 333 ; N circumflex ; B 91 492 385 661 ;
C 152 ; WX 333 ; N tilde ; B 100 517 427 624 ;
C 175 ; WX 333 ; N macron ; B 99 532 411 583 ;
C -1 ; WX 333 ; N breve ; B 117 492 418 650 ;
C -1 ; WX 333 ; N dotaccent ; B 207 548 305 646 ;
C 168 ; WX 333 ; N dieresis ; B 107 548 405 646 ;
C -1 ; WX 333 ; N ring ; B 155 492 355 691 ;
C 184 ; WX 333 ; N cedilla ; B -30 -217 182 0 ;
C -1 ; WX 333 ; N hungarumlaut ; B 93 494 486 664 ;
C -1 ; WX 333 ; N ogonek ; B 20 -169 203 40 ;
C -1 ; WX 333 ; N caron ; B 121 492 426 661 ;
C 151 ; WX 889 ; N emdash ; B -6 197 894 243 ;
C 198 ; WX 889 ; N AE ; B -27 0 911 653 ;
C 170 ; WX 276 ; N ordfeminine ; B 42 406 352 676 ;
C -1 ; WX 556 ; N Lslash ; B -8 0 559 653 ;
C 216 ; WX 722 ; N Oslash ; B 60 -105 699 722 ;
C 140 ; WX 944 ; N OE ; B 49 -8 964 666 ;
C 186 ; WX 310 ; N ordmasculine ; B 67 406 362 676 ;
C 230 ; WX 667 ; N ae ; B 23 -11 640 441 ;
C -1 ; WX 278 ; N dotlessi ; B 49 -11 235 441 ;
C -1 ; WX 278 ; N lslash ; B 41 -11 312 683 ;
C 248 ; WX 500 ; N oslash ; B 28 -135 469 554 ;
C 156 ; WX 667 ; N oe ; B 20 -12 646 441 ;
C 223 ; WX 500 ; N germandbls ; B -168 -207 493 679 ;
C 207 ; WX 333 ; N Idieresis ; B -8 0 435 818 ;
C 233 ; WX 444 ; N eacute ; B 31 -11 459 664 ;
C -1 ; WX 500 ; N abreve ; B 17 -11 502 650 ;
C -1 ; WX 500 ; N uhungarumlaut ; B 42 -11 580 664 ;
C -1 ; WX 444 ; N ecaron ; B 31 -11 482 661 ;
C 159 ; WX 556 ; N Ydieresis ; B 78 0 633 818 ;
C 247 ; WX 675 ; N divide ; B 86 -11 590 517 ;
C 221 ; WX 556 ; N Yacute ; B 78 0 633 876 ;
C 194 ; WX 611 ; N Acircumflex ; B -51 0 564 873 ;
C 225 ; WX 500 ; N aacute ; B 17 -11 487 664 ;
C 219 ; WX 722 ; N Ucircumflex ; B 102 -18 765 873 ;
C 253 ; WX 444 ; N yacute ; B -24 -206 459 664 ;
C -1 ; WX 389 ; N scommaaccent ; B 16 -217 366 442 ;
C 234 ; WX 444 ; N ecircumflex ; B 31 -11 441 661 ;
C -1 ; WX 722 ; N Uring ; B 102 -18 765 883 ;
C 220 ; WX 722 ; N Udieresis ; B 102 -18 765 818 ;
C -1 ; WX 500 ; N aogonek ; B 17 -169 476 441 ;
C 218 ; WX 722 ; N Uacute ; B 102 -18 765 876 ;
C -1 ; WX 500 ; N uogonek ; B 42 -169 477 441 ;
C 203 ; WX 611 ; N Edieresis ; B -1 0 634 818 ;
C -1 ; WX 722 ; N Dcroat ; B -8 0 700 653 ;
C -1 ; WX 250 ; N commaaccent ; B 8 -217 133 -50 ;
C 169 ; WX 760 ; N copyright ; B 41 -18 719 666 ;
C -1 ; WX 611 ; N Emacron ; B -1 0 634 795 ;
C -1 ; WX 444 ; N ccaron ; B 30 -11 482 661 ;
C 229 ; WX 500 ; N aring ; B 17 -11 476 691 ;
C -1 ; WX 667 ; N Ncommaaccent ; B -20 -187 727 653 ;
C -1 ; WX 278 ; N lacute ; B 41 -11 395 876 ;
C 224 ; WX 500 ; N agrave ; B 17 -11 476 664 ;
C -1 ; WX 556 ; N Tcommaaccent ; B 59 -217 633 653 ;
C -1 ; WX 667 ; N Cacute ; B 66 -18 690 876 ;
C 227 ; WX 500 ; N atilde ; B 17 -11 511 624 ;
C -1 ; WX 611 ; N Edotaccent ; B -1 0 634 818 ;
C 154 ; WX 389 ; N scaron ; B 16 -13 454 661 ;
C -1 ; WX 389 ; N scedilla ; B 16 -217 366 442 ;
C 237 ; WX 278 ; N iacute ; B 49 -11 355 664 ;
C -1 ; WX 471 ; N lozenge ; B 13 0 459 724 ;
C -1 ; WX 611 ; N Rcaron ; B -13 0 588 873 ;
C -1 ; WX 722 ; N Gcommaaccent ; B 52 -217 722 666 ;
C 251 ; WX 500 ; N ucircumflex ; B 42 -11 475 661 ;
C 226 ; WX 500 ; N acircumflex ; B 17 -11 476 661 ;
C -1 ; WX 611 ; N Amacron ; B -51 0 564 795 ;
C -1 ; WX 389 ; N rcaron ; B 45 0 434 661 ;
C 231 ; WX 444 ; N ccedilla ; B 30 -217 425 441 ;
C -1 ; WX 556 ; N Zdotaccent ; B -6 0 606 818 ;
C 222 ; WX 611 ; N Thorn ; B 0 0 569 653 ;
C -1 ; WX 722 ; N Omacron ; B 60 -18 699 795 ;
C -1 ; WX 611 ; N Racute ; B -13 0 588 876 ;
C -1 ; WX 500 ; N Sacute ; B 17 -18 508 876 ;
C -1 ; WX 544 ; N dcaron ; B 15 -13 658 683 ;
C -1 ; WX 722 ; N Umacron ; B 102 -18 765 795 ;
C -1 ; WX 500 ; N uring ; B 42 -11 475 691 ;
C 179 ; WX 300 ; N threesuperior ; B 43 268 339 676 ;
C 210 ; WX 722 ; N Ograve ; B 60 -18 699 876 ;
C 192 ; WX 611 ; N Agrave ; B -51 0 564 876 ;
C -1 ; WX 611 ; N Abreve ; B -51 0 564 862 ;
C 215 ; WX 675 ; N multiply ; B 93 8 582 497 ;
C 250 ; WX 500 ; N uacute ; B 42 -11 477 664 ;
C -1 ; WX 556 ; N Tcaron ; B 59 0 633 873 ;
C -1 ; WX 476 ; N partialdiff ; B 17 -38 459 710 ;
C 255 ; WX 444 ; N ydieresis ; B -24 -206 441 606 ;
C -1 ; WX 667 ; N Nacute ; B -20 -15 727 876 ;
C 238 ; WX 278 ; N icircumflex ; B 33 -11 327 661 ;
C 202 ; WX 611 ; N Ecircumflex ; B -1 0 634 873 ;
C 228 ; WX 500 ; N adieresis ; B 17 -11 489 606 ;
C 235 ; WX 444 ; N edieresis ; B 31 -11 451 606 ;
C -1 ; WX 444 ; N cacute ; B 30 -11 459 664 ;
C -1 ; WX 500 ; N nacute ; B 14 -9 477 664 ;
C -1 ; WX 500 ; N umacron ; B 42 -11 485 583 ;
C -1 ; WX 667 ; N Ncaron ; B -20 -15 727 873 ;
C 205 ; WX 333 ; N Iacute ; B -8 0 433 876 ;
C 177 ; WX 675 ; N plusminus ; B 86 0 590 506 ;
C 166 ; WX 275 ; N brokenbar ; B 105 -142 171 708 ;
C 174 ; WX 760 ; N registered ; B 41 -18 719 666 ;
C -1 ; WX 722 ; N Gbreve ; B 52 -18 722 862 ;
C -1 ; WX 333 ; N Idotaccent ; B -8 0 384 818 ;
C -1 ; WX 600 ; N summation ; B 15 -10 585 706 ;
C 200 ; WX 611 ; N Egrave ; B -1 0 634 876 ;
C -1 ; WX 389 ; N racute ; B 45 0 431 664 ;
C -1 ; WX 500 ; N omacron ; B 27 -11 495 583 ;
C -1 ; WX 556 ; N Zacute ; B -6 0 606 876 ;
C 142 ; WX 556 ; N Zcaron ; B -6 0 606 873 ;
C -1 ; WX 549 ; N greaterequal ; B 26 0 523 658 ;
C 208 ; WX 722 ; N Eth ; B -8 0 700 653 ;
C 199 ; WX 667 ; N Ccedilla ; B 66 -217 689 666 ;
C -1 ; WX 278 ; N lcommaaccent ; B 22 -217 279 683 ;
C -1 ; WX 300 ; N tcaron ; B 37 -11 407 681 ;
C -1 ; WX 444 ; N eogonek ; B 31 -169 412 441 ;
C -1 ; WX 722 ; N Uogonek ; B 102 -184 765 653 ;
C 193 ; WX 611 ; N Aacute ; B -51 0 564 876 ;
C 196 ; WX 611 ; N Adieresis ; B -51 0 564 818 ;
C 232 ; WX 444 ; N egrave ; B 31 -11 412 664 ;
C -1 ; WX 389 ; N zacute ; B -2 -81 431 664 ;
C -1 ; WX 278 ; N iogonek ; B 49 -169 264 654 ;
C 211 ; WX 722 ; N Oacute ; B 60 -18 699 876 ;
C 243 ; WX 500 ; N oacute ; B 27 -11 487 664 ;
C -1 ; WX 500 ; N amacron ; B 17 -11 495 583 ;
C -1 ; WX 389 ; N sacute ; B 16 -13 431 664 ;
C 239 ; WX 278 ; N idieresis ; B 49 -11 352 606 ;
C 212 ; WX 722 ; N Ocircumflex ; B 60 -18 699 873 ;
C 217 ; WX 722 ; N Ugrave ; B 102 -18 765 876 ;
C -1 ; WX 612 ; N Delta ; B 6 0 608 688 ;
C 254 ; WX 500 ; N thorn ; B -75 -205 469 683 ;
C 178 ; WX 300 ; N twosuperior ; B 33 271 324 676 ;
C 214 ; WX 722 ; N Odieresis ; B 60 -18 699 818 ;
C 181 ; WX 500 ; N mu ; B -30 -209 497 428 ;
C 236 ; WX 278 ; N igrave ; B 49 -11 284 664 ;
C -1 ; WX 500 ; N ohungarumlaut ; B 27 -11 590 664 ;
C -1 ; WX 611 ; N Eogonek ; B -1 -169 634 653 ;
C -1 ; WX 500 ; N dcroat ; B 15 -13 572 683 ;
C 190 ; WX 750 ; N threequarters ; B 23 -10 736 676 ;
C -1 ; WX 500 ; N Scedilla ; B 17 -217 508 667 ;
C -1 ; WX 300 ; N lcaron ; B 41 -11 407 683 ;
C -1 ; WX 667 ; N Kcommaaccent ; B 7 -217 722 653 ;
C -1 ; WX 556 ; N Lacute ; B -8 0 559 876 ;
C 153 ; WX 980 ; N trademark ; B 30 247 957 653 ;
C -1 ; WX 444 ; N edotaccent ; B 31 -11 412 606 ;
C 204 ; WX 333 ; N Igrave ; B -8 0 384 876 ;
C -1 ; WX 333 ; N Imacron ; B -8 0 441 795 ;
C -1 ; WX 611 ; N Lcaron ; B -8 0 586 653 ;
C 189 ; WX 750 ; N onehalf ; B 34 -10 749 676 ;
C -1 ; WX 549 ; N lessequal ; B 26 0 523 658 ;
C 244 ; WX 500 ; N ocircumflex ; B 27 -11 468 661 ;
C 241 ; WX 500 ; N ntilde ; B 14 -9 476 624 ;
C -1 ; WX 722 ; N Uhungarumlaut ; B 102 -18 765 876 ;
C 201 ; WX 611 ; N Eacute ; B -1 0 634 876 ;
C -1 ; WX 444 ; N emacron ; B 31 -11 457 583 ;
C -1 ; WX 500 ; N gbreve ; B 8 -206 487 650 ;
C 188 ; WX 750 ; N onequarter ; B 33 -10 736 676 ;
C 138 ; WX 500 ; N Scaron ; B 17 -18 520 873 ;
C -1 ; WX 500 ; N Scommaaccent ; B 17 -217 508 667 ;
C -1 ; WX 722 ; N Ohungarumlaut ; B 60 -18 699 876 ;
C 176 ; WX 400 ; N degree ; B 101 390 387 676 ;
C 242 ; WX 500 ; N ograve ; B 27 -11 468 664 ;
C -1 ; WX 667 ; N Ccaron ; B 66 -18 689 873 ;
C 249 ; WX 500 ; N ugrave ; B 42 -11 475 664 ;
C -1 ; WX 453 ; N radical ; B 2 -60 452 768 ;
C -1 ; WX 722 ; N Dcaron ; B -8 0 700 873 ;
C -1 ; WX 389 ; N rcommaaccent ; B -3 -217 412 441 ;
C 209 ; WX 667 ; N Ntilde ; B -20 -15 727 836 ;
C 245 ; WX 500 ; N otilde ; B 27 -11 496 624 ;
C -1 ; WX 611 ; N Rcommaaccent ; B -13 -187 588 653 ;
C -1 ; WX 556 ; N Lcommaaccent ; B -8 -217 559 653 ;
C 195 ; WX 611 ; N Atilde ; B -51 0 566 836 ;
C -1 ; WX 611 ; N Aogonek ; B -51 -169 566 668 ;
C 197 ; WX 611 ; N Aring ; B -51 0 564 883 ;
C 213 ; WX 722 ; N Otilde ; B 60 -18 699 836 ;
C -1 ; WX 389 ; N zdotaccent ; B -2 -81 380 606 ;
C -1 ; WX 611 ; N Ecaron ; B -1 0 634 873 ;
C -1 ; WX 333 ; N Iogonek ; B -8 -169 384 653 ;
C -1 ; WX 444 ; N kcommaaccent ; B 14 -187 461 683 ;
C -1 ; WX 675 ; N minus ; B 86 220 590 286 ;
C 206 ; WX 333 ; N Icircumflex ; B -8 0 425 873 ;
C -1 ; WX 500 ; N ncaron ; B 14 -9 510 661 ;
C -1 ; WX 278 ; N tcommaaccent ; B 2 -217 296 546 ;
C 172 ; WX 675 ; N logicalnot ; B 86 108 590 386 ;
C 246 ; WX 500 ; N odieresis ; B 27 -11 489 606 ;
C 252 ; WX 500 ; N udieresis ; B 42 -11 479 606 ;
C -1 ; WX 549 ; N notequal ; B 12 -29 537 541 ;
C -1 ; WX 500 ; N gcommaaccent ; B 8 -206 472 706 ;
C 240 ; WX 500 ; N eth ; B 27 -11 482 683 ;
C 158 ; WX 389 ; N zcaron ; B -2 -81 434 661 ;
C -1 ; WX 500 ; N ncommaaccent ; B 14 -187 474 441 ;
C 185 ; WX 300 ; N onesuperior ; B 43 271 284 676 ;
C -1 ; WX 278 ; N imacron ; B 46 -11 311 583 ;
C 128 ; WX 500 ; N Euro ; B 0 0 0 0 ;
EndCharMetrics
StartKernData
StartKernPairs 2321
KPX A C -30
KPX A Cacute -30
KPX A Ccaron -30
KPX A Ccedilla -30
KPX A G -35
KPX A Gbreve -35
KPX A Gcommaaccent -35
KPX A O -40
KPX A Oacute -40
KPX A Ocircumflex -40
KPX A Odieresis -40
KPX A Ograve -40
KPX A Ohungarumlaut -40
KPX A Omacron -40
KPX A Oslash -40
KPX A Otilde -40
KPX A Q -40
KPX A T -37
KPX A Tcaron -37
KPX A Tcommaaccent -37
KPX A U -50
KPX A Uacute -50
KPX A Ucircumflex -50
KPX A Udieresis -50
KPX A Ugrave -50
KPX A Uhungarumlaut -50
KPX A Umacron -50
KPX A Uogonek -50
KPX A Uring -50
KPX A V -105
KPX A W -95
KPX A Y -55
KPX A Yacute -55
KPX A Ydieresis -55
KPX A quoteright -37
KPX A u -20
KPX A uacute -20
KPX A ucircumflex -20
KPX A udieresis -20
KPX A ugrave -20
KPX A uhungarumlaut -20
KPX A umacron -20
KPX A uogonek -20
KPX A uring -20
KPX A v -55
KPX A w -55
KPX A y -55
KPX A yacute -55
KPX A ydieresis -55
KPX Aacute C -30
KPX Aacute Cacute -30
KPX Aacute Ccaron -30
KPX Aacute Ccedilla -30
KPX Aacute G -35
KPX Aacute Gbreve -35
KPX Aacute Gcommaaccent -35
KPX Aacute O -40
KPX Aacute Oacute -40
KPX Aacute Ocircumflex -40
KPX Aacute Odieresis -40
KPX Aacute Ograve -40
KPX Aacute Ohungarumlaut -40
KPX Aacute Omacron -40
KPX Aacute Oslash -40
KPX Aacute Otilde -40
KPX Aacute Q -40
KPX Aacute T -37
KPX Aacute Tcaron -37
KPX Aacute Tcommaaccent -37
KPX Aacute U -50
KPX Aacute Uacute -50
KPX Aacute Ucircumflex -50
KPX Aacute Udieresis -50
KPX Aacute Ugrave -50
KPX Aacute Uhungarumlaut -50
KPX Aacute Umacron -50
KPX Aacute Uogonek -50
KPX Aacute Uring -50
KPX Aacute V -105
KPX Aacute W -95
KPX Aacute Y -55
KPX Aacute Yacute -55
KPX Aacute Ydieresis -55
KPX Aacute quoteright -37
KPX Aacute u -20
KPX Aacute uacute -20
KPX Aacute ucircumflex -20
KPX Aacute udieresis -20
KPX Aacute ugrave -20
KPX Aacute uhungarumlaut -20
KPX Aacute umacron -20
KPX Aacute uogonek -20
KPX Aacute uring -20
KPX Aacute v -55
KPX Aacute w -55
KPX Aacute y -55
KPX Aacute yacute -55
KPX Aacute ydieresis -55
KPX Abreve C -30
KPX Abreve Cacute -30
KPX Abreve Ccaron -30
KPX Abreve Ccedilla -30
KPX Abreve G -35
KPX Abreve Gbreve -35
KPX Abreve Gcommaaccent -35
KPX Abreve O -40
KPX Abreve Oacute -40
KPX Abreve Ocircumflex -40
KPX Abreve Odieresis -40
KPX Abreve Ograve -40
KPX Abreve Ohungarumlaut -40
KPX Abreve Omacron -40
KPX Abreve Oslash -40
KPX Abreve Otilde -40
KPX Abreve Q -40
KPX Abreve T -37
KPX Abreve Tcaron -37
KPX Abreve Tcommaaccent -37
KPX Abreve U -50
KPX Abreve Uacute -50
KPX Abreve Ucircumflex -50
KPX Abreve Udieresis -50
KPX Abreve Ugrave -50
KPX Abreve Uhungarumlaut -50
KPX Abreve Umacron -50
KPX Abreve Uogonek -50
KPX Abreve Uring -50
KPX Abreve V -105
KPX Abreve W -95
KPX Abreve Y -55
KPX Abreve Yacute -55
KPX Abreve Ydieresis -55
KPX Abreve quoteright -37
KPX Abreve u -20
KPX Abreve uacute -20
KPX Abreve ucircumflex -20
KPX Abreve udieresis -20
KPX Abreve ugrave -20
KPX Abreve uhungarumlaut -20
KPX Abreve umacron -20
KPX Abreve uogonek -20
KPX Abreve uring -20
KPX Abreve v -55
KPX Abreve w -55
KPX Abreve y -55
KPX Abreve yacute -55
KPX Abreve ydieresis -55
KPX Acircumflex C -30
KPX Acircumflex Cacute -30
KPX Acircumflex Ccaron -30
KPX Acircumflex Ccedilla -30
KPX Acircumflex G -35
KPX Acircumflex Gbreve -35
KPX Acircumflex Gcommaaccent -35
KPX Acircumflex O -40
KPX Acircumflex Oacute -40
KPX Acircumflex Ocircumflex -40
KPX Acircumflex Odieresis -40
KPX Acircumflex Ograve -40
KPX Acircumflex Ohungarumlaut -40
KPX Acircumflex Omacron -40
KPX Acircumflex Oslash -40
KPX Acircumflex Otilde -40
KPX Acircumflex Q -40
KPX Acircumflex T -37
KPX Acircumflex Tcaron -37
KPX Acircumflex Tcommaaccent -37
KPX Acircumflex U -50
KPX Acircumflex Uacute -50
KPX Acircumflex Ucircumflex -50
KPX Acircumflex Udieresis -50
KPX Acircumflex Ugrave -50
KPX Acircumflex Uhungarumlaut -50
KPX Acircumflex Umacron -50
KPX Acircumflex Uogonek -50
KPX Acircumflex Uring -50
KPX Acircumflex V -105
KPX Acircumflex W -95
KPX Acircumflex Y -55
KPX Acircumflex Yacute -55
KPX Acircumflex Ydieresis -55
KPX Acircumflex quoteright -37
KPX Acircumflex u -20
KPX Acircumflex uacute -20
KPX Acircumflex ucircumflex -20
KPX Acircumflex udieresis -20
KPX Acircumflex ugrave -20
KPX Acircumflex uhungarumlaut -20
KPX Acircumflex umacron -20
KPX Acircumflex uogonek -20
KPX Acircumflex uring -20
KPX Acircumflex v -55
KPX Acircumflex w -55
KPX Acircumflex y -55
KPX Acircumflex yacute -55
KPX Acircumflex ydieresis -55
KPX Adieresis C -30
KPX Adieresis Cacute -30
KPX Adieresis Ccaron -30
KPX Adieresis Ccedilla -30
KPX Adieresis G -35
KPX Adieresis Gbreve -35
KPX Adieresis Gcommaaccent -35
KPX Adieresis O -40
KPX Adieresis Oacute -40
KPX Adieresis Ocircumflex -40
KPX Adieresis Odieresis -40
KPX Adieresis Ograve -40
KPX Adieresis Ohungarumlaut -40
KPX Adieresis Omacron -40
KPX Adieresis Oslash -40
KPX Adieresis Otilde -40
KPX Adieresis Q -40
KPX Adieresis T -37
KPX Adieresis Tcaron -37
KPX Adieresis Tcommaaccent -37
KPX Adieresis U -50
KPX Adieresis Uacute -50
KPX Adieresis Ucircumflex -50
KPX Adieresis Udieresis -50
KPX Adieresis Ugrave -50
KPX Adieresis Uhungarumlaut -50
KPX Adieresis Umacron -50
KPX Adieresis Uogonek -50
KPX Adieresis Uring -50
KPX Adieresis V -105
KPX Adieresis W -95
KPX Adieresis Y -55
KPX Adieresis Yacute -55
KPX Adieresis Ydieresis -55
KPX Adieresis quoteright -37
KPX Adieresis u -20
KPX Adieresis uacute -20
KPX Adieresis ucircumflex -20
KPX Adieresis udieresis -20
KPX Adieresis ugrave -20
KPX Adieresis uhungarumlaut -20
KPX Adieresis umacron -20
KPX Adieresis uogonek -20
KPX Adieresis uring -20
KPX Adieresis v -55
KPX Adieresis w -55
KPX Adieresis y -55
KPX Adieresis yacute -55
KPX Adieresis ydieresis -55
KPX Agrave C -30
KPX Agrave Cacute -30
KPX Agrave Ccaron -30
KPX Agrave Ccedilla -30
KPX Agrave G -35
KPX Agrave Gbreve -35
KPX Agrave Gcommaaccent -35
KPX Agrave O -40
KPX Agrave Oacute -40
KPX Agrave Ocircumflex -40
KPX Agrave Odieresis -40
KPX Agrave Ograve -40
KPX Agrave Ohungarumlaut -40
KPX Agrave Omacron -40
KPX Agrave Oslash -40
KPX Agrave Otilde -40
KPX Agrave Q -40
KPX Agrave T -37
KPX Agrave Tcaron -37
KPX Agrave Tcommaaccent -37
KPX Agrave U -50
KPX Agrave Uacute -50
KPX Agrave Ucircumflex -50
KPX Agrave Udieresis -50
KPX Agrave Ugrave -50
KPX Agrave Uhungarumlaut -50
KPX Agrave Umacron -50
KPX Agrave Uogonek -50
KPX Agrave Uring -50
KPX Agrave V -105
KPX Agrave W -95
KPX Agrave Y -55
KPX Agrave Yacute -55
KPX Agrave Ydieresis -55
KPX Agrave quoteright -37
KPX Agrave u -20
KPX Agrave uacute -20
KPX Agrave ucircumflex -20
KPX Agrave udieresis -20
KPX Agrave ugrave -20
KPX Agrave uhungarumlaut -20
KPX Agrave umacron -20
KPX Agrave uogonek -20
KPX Agrave uring -20
KPX Agrave v -55
KPX Agrave w -55
KPX Agrave y -55
KPX Agrave yacute -55
KPX Agrave ydieresis -55
KPX Amacron C -30
KPX Amacron Cacute -30
KPX Amacron Ccaron -30
KPX Amacron Ccedilla -30
KPX Amacron G -35
KPX Amacron Gbreve -35
KPX Amacron Gcommaaccent -35
KPX Amacron O -40
KPX Amacron Oacute -40
KPX Amacron Ocircumflex -40
KPX Amacron Odieresis -40
KPX Amacron Ograve -40
KPX Amacron Ohungarumlaut -40
KPX Amacron Omacron -40
KPX Amacron Oslash -40
KPX Amacron Otilde -40
KPX Amacron Q -40
KPX Amacron T -37
KPX Amacron Tcaron -37
KPX Amacron Tcommaaccent -37
KPX Amacron U -50
KPX Amacron Uacute -50
KPX Amacron Ucircumflex -50
KPX Amacron Udieresis -50
KPX Amacron Ugrave -50
KPX Amacron Uhungarumlaut -50
KPX Amacron Umacron -50
KPX Amacron Uogonek -50
KPX Amacron Uring -50
KPX Amacron V -105
KPX Amacron W -95
KPX Amacron Y -55
KPX Amacron Yacute -55
KPX Amacron Ydieresis -55
KPX Amacron quoteright -37
KPX Amacron u -20
KPX Amacron uacute -20
KPX Amacron ucircumflex -20
KPX Amacron udieresis -20
KPX Amacron ugrave -20
KPX Amacron uhungarumlaut -20
KPX Amacron umacron -20
KPX Amacron uogonek -20
KPX Amacron uring -20
KPX Amacron v -55
KPX Amacron w -55
KPX Amacron y -55
KPX Amacron yacute -55
KPX Amacron ydieresis -55
KPX Aogonek C -30
KPX Aogonek Cacute -30
KPX Aogonek Ccaron -30
KPX Aogonek Ccedilla -30
KPX Aogonek G -35
KPX Aogonek Gbreve -35
KPX Aogonek Gcommaaccent -35
KPX Aogonek O -40
KPX Aogonek Oacute -40
KPX Aogonek Ocircumflex -40
KPX Aogonek Odieresis -40
KPX Aogonek Ograve -40
KPX Aogonek Ohungarumlaut -40
KPX Aogonek Omacron -40
KPX Aogonek Oslash -40
KPX Aogonek Otilde -40
KPX Aogonek Q -40
KPX Aogonek T -37
KPX Aogonek Tcaron -37
KPX Aogonek Tcommaaccent -37
KPX Aogonek U -50
KPX Aogonek Uacute -50
KPX Aogonek Ucircumflex -50
KPX Aogonek Udieresis -50
KPX Aogonek Ugrave -50
KPX Aogonek Uhungarumlaut -50
KPX Aogonek Umacron -50
KPX Aogonek Uogonek -50
KPX Aogonek Uring -50
KPX Aogonek V -105
KPX Aogonek W -95
KPX Aogonek Y -55
KPX Aogonek Yacute -55
KPX Aogonek Ydieresis -55
KPX Aogonek quoteright -37
KPX Aogonek u -20
KPX Aogonek uacute -20
KPX Aogonek ucircumflex -20
KPX Aogonek udieresis -20
KPX Aogonek ugrave -20
KPX Aogonek uhungarumlaut -20
KPX Aogonek umacron -20
KPX Aogonek uogonek -20
KPX Aogonek uring -20
KPX Aogonek v -55
KPX Aogonek w -55
KPX Aogonek y -55
KPX Aogonek yacute -55
KPX Aogonek ydieresis -55
KPX Aring C -30
KPX Aring Cacute -30
KPX Aring Ccaron -30
KPX Aring Ccedilla -30
KPX Aring G -35
KPX Aring Gbreve -35
KPX Aring Gcommaaccent -35
KPX Aring O -40
KPX Aring Oacute -40
KPX Aring Ocircumflex -40
KPX Aring Odieresis -40
KPX Aring Ograve -40
KPX Aring Ohungarumlaut -40
KPX Aring Omacron -40
KPX Aring Oslash -40
KPX Aring Otilde -40
KPX Aring Q -40
KPX Aring T -37
KPX Aring Tcaron -37
KPX Aring Tcommaaccent -37
KPX Aring U -50
KPX Aring Uacute -50
KPX Aring Ucircumflex -50
KPX Aring Udieresis -50
KPX Aring Ugrave -50
KPX Aring Uhungarumlaut -50
KPX Aring Umacron -50
KPX Aring Uogonek -50
KPX Aring Uring -50
KPX Aring V -105
KPX Aring W -95
KPX Aring Y -55
KPX Aring Yacute -55
KPX Aring Ydieresis -55
KPX Aring quoteright -37
KPX Aring u -20
KPX Aring uacute -20
KPX Aring ucircumflex -20
KPX Aring udieresis -20
KPX Aring ugrave -20
KPX Aring uhungarumlaut -20
KPX Aring umacron -20
KPX Aring uogonek -20
KPX Aring uring -20
KPX Aring v -55
KPX Aring w -55
KPX Aring y -55
KPX Aring yacute -55
KPX Aring ydieresis -55
KPX Atilde C -30
KPX Atilde Cacute -30
KPX Atilde Ccaron -30
KPX Atilde Ccedilla -30
KPX Atilde G -35
KPX Atilde Gbreve -35
KPX Atilde Gcommaaccent -35
KPX Atilde O -40
KPX Atilde Oacute -40
KPX Atilde Ocircumflex -40
KPX Atilde Odieresis -40
KPX Atilde Ograve -40
KPX Atilde Ohungarumlaut -40
KPX Atilde Omacron -40
KPX Atilde Oslash -40
KPX Atilde Otilde -40
KPX Atilde Q -40
KPX Atilde T -37
KPX Atilde Tcaron -37
KPX Atilde Tcommaaccent -37
KPX Atilde U -50
KPX Atilde Uacute -50
KPX Atilde Ucircumflex -50
KPX Atilde Udieresis -50
KPX Atilde Ugrave -50
KPX Atilde Uhungarumlaut -50
KPX Atilde Umacron -50
KPX Atilde Uogonek -50
KPX Atilde Uring -50
KPX Atilde V -105
KPX Atilde W -95
KPX Atilde Y -55
KPX Atilde Yacute -55
KPX Atilde Ydieresis -55
KPX Atilde quoteright -37
KPX Atilde u -20
KPX Atilde uacute -20
KPX Atilde ucircumflex -20
KPX Atilde udieresis -20
KPX Atilde ugrave -20
KPX Atilde uhungarumlaut -20
KPX Atilde umacron -20
KPX Atilde uogonek -20
KPX Atilde uring -20
KPX Atilde v -55
KPX Atilde w -55
KPX Atilde y -55
KPX Atilde yacute -55
KPX Atilde ydieresis -55
KPX B A -25
KPX B Aacute -25
KPX B Abreve -25
KPX B Acircumflex -25
KPX B Adieresis -25
KPX B Agrave -25
KPX B Amacron -25
KPX B Aogonek -25
KPX B Aring -25
KPX B Atilde -25
KPX B U -10
KPX B Uacute -10
KPX B Ucircumflex -10
KPX B Udieresis -10
KPX B Ugrave -10
KPX B Uhungarumlaut -10
KPX B Umacron -10
KPX B Uogonek -10
KPX B Uring -10
KPX D A -35
KPX D Aacute -35
KPX D Abreve -35
KPX D Acircumflex -35
KPX D Adieresis -35
KPX D Agrave -35
KPX D Amacron -35
KPX D Aogonek -35
KPX D Aring -35
KPX D Atilde -35
KPX D V -40
KPX D W -40
KPX D Y -40
KPX D Yacute -40
KPX D Ydieresis -40
KPX Dcaron A -35
KPX Dcaron Aacute -35
KPX Dcaron Abreve -35
KPX Dcaron Acircumflex -35
KPX Dcaron Adieresis -35
KPX Dcaron Agrave -35
KPX Dcaron Amacron -35
KPX Dcaron Aogonek -35
KPX Dcaron Aring -35
KPX Dcaron Atilde -35
KPX Dcaron V -40
KPX Dcaron W -40
KPX Dcaron Y -40
KPX Dcaron Yacute -40
KPX Dcaron Ydieresis -40
KPX Dcroat A -35
KPX Dcroat Aacute -35
KPX Dcroat Abreve -35
KPX Dcroat Acircumflex -35
KPX Dcroat Adieresis -35
KPX Dcroat Agrave -35
KPX Dcroat Amacron -35
KPX Dcroat Aogonek -35
KPX Dcroat Aring -35
KPX Dcroat Atilde -35
KPX Dcroat V -40
KPX Dcroat W -40
KPX Dcroat Y -40
KPX Dcroat Yacute -40
KPX Dcroat Ydieresis -40
KPX F A -115
KPX F Aacute -115
KPX F Abreve -115
KPX F Acircumflex -115
KPX F Adieresis -115
KPX F Agrave -115
KPX F Amacron -115
KPX F Aogonek -115
KPX F Aring -115
KPX F Atilde -115
KPX F a -75
KPX F aacute -75
KPX F abreve -75
KPX F acircumflex -75
KPX F adieresis -75
KPX F agrave -75
KPX F amacron -75
KPX F aogonek -75
KPX F aring -75
KPX F atilde -75
KPX F comma -135
KPX F e -75
KPX F eacute -75
KPX F ecaron -75
KPX F ecircumflex -75
KPX F edieresis -75
KPX F edotaccent -75
KPX F egrave -75
KPX F emacron -75
KPX F eogonek -75
KPX F i -45
KPX F iacute -45
KPX F icircumflex -45
KPX F idieresis -45
KPX F igrave -45
KPX F imacron -45
KPX F iogonek -45
KPX F o -105
KPX F oacute -105
KPX F ocircumflex -105
KPX F odieresis -105
KPX F ograve -105
KPX F ohungarumlaut -105
KPX F omacron -105
KPX F oslash -105
KPX F otilde -105
KPX F period -135
KPX F r -55
KPX F racute -55
KPX F rcaron -55
KPX F rcommaaccent -55
KPX J A -40
KPX J Aacute -40
KPX J Abreve -40
KPX J Acircumflex -40
KPX J Adieresis -40
KPX J Agrave -40
KPX J Amacron -40
KPX J Aogonek -40
KPX J Aring -40
KPX J Atilde -40
KPX J a -35
KPX J aacute -35
KPX J abreve -35
KPX J acircumflex -35
KPX J adieresis -35
KPX J agrave -35
KPX J amacron -35
KPX J aogonek -35
KPX J aring -35
KPX J atilde -35
KPX J comma -25
KPX J e -25
KPX J eacute -25
KPX J ecaron -25
KPX J ecircumflex -25
KPX J edieresis -25
KPX J edotaccent -25
KPX J egrave -25
KPX J emacron -25
KPX J eogonek -25
KPX J o -25
KPX J oacute -25
KPX J ocircumflex -25
KPX J odieresis -25
KPX J ograve -25
KPX J ohungarumlaut -25
KPX J omacron -25
KPX J oslash -25
KPX J otilde -25
KPX J period -25
KPX J u -35
KPX J uacute -35
KPX J ucircumflex -35
KPX J udieresis -35
KPX J ugrave -35
KPX J uhungarumlaut -35
KPX J umacron -35
KPX J uogonek -35
KPX J uring -35
KPX K O -50
KPX K Oacute -50
KPX K Ocircumflex -50
KPX K Odieresis -50
KPX K Ograve -50
KPX K Ohungarumlaut -50
KPX K Omacron -50
KPX K Oslash -50
KPX K Otilde -50
KPX K e -35
KPX K eacute -35
KPX K ecaron -35
KPX K ecircumflex -35
KPX K edieresis -35
KPX K edotaccent -35
KPX K egrave -35
KPX K emacron -35
KPX K eogonek -35
KPX K o -40
KPX K oacute -40
KPX K ocircumflex -40
KPX K odieresis -40
KPX K ograve -40
KPX K ohungarumlaut -40
KPX K omacron -40
KPX K oslash -40
KPX K otilde -40
KPX K u -40
KPX K uacute -40
KPX K ucircumflex -40
KPX K udieresis -40
KPX K ugrave -40
KPX K uhungarumlaut -40
KPX K umacron -40
KPX K uogonek -40
KPX K uring -40
KPX K y -40
KPX K yacute -40
KPX K ydieresis -40
KPX Kcommaaccent O -50
KPX Kcommaaccent Oacute -50
KPX Kcommaaccent Ocircumflex -50
KPX Kcommaaccent Odieresis -50
KPX Kcommaaccent Ograve -50
KPX Kcommaaccent Ohungarumlaut -50
KPX Kcommaaccent Omacron -50
KPX Kcommaaccent Oslash -50
KPX Kcommaaccent Otilde -50
KPX Kcommaaccent e -35
KPX Kcommaaccent eacute -35
KPX Kcommaaccent ecaron -35
KPX Kcommaaccent ecircumflex -35
KPX Kcommaaccent edieresis -35
KPX Kcommaaccent edotaccent -35
KPX Kcommaaccent egrave -35
KPX Kcommaaccent emacron -35
KPX Kcommaaccent eogonek -35
KPX Kcommaaccent o -40
KPX Kcommaaccent oacute -40
KPX Kcommaaccent ocircumflex -40
KPX Kcommaaccent odieresis -40
KPX Kcommaaccent ograve -40
KPX Kcommaaccent ohungarumlaut -40
KPX Kcommaaccent omacron -40
KPX Kcommaaccent oslash -40
KPX Kcommaaccent otilde -40
KPX Kcommaaccent u -40
KPX Kcommaaccent uacute -40
KPX Kcommaaccent ucircumflex -40
KPX Kcommaaccent udieresis -40
KPX Kcommaaccent ugrave -40
KPX Kcommaaccent uhungarumlaut -40
KPX Kcommaaccent umacron -40
KPX Kcommaaccent uogonek -40
KPX Kcommaaccent uring -40
KPX Kcommaaccent y -40
KPX Kcommaaccent yacute -40
KPX Kcommaaccent ydieresis -40
KPX L T -20
KPX L Tcaron -20
KPX L Tcommaaccent -20
KPX L V -55
KPX L W -55
KPX L Y -20
KPX L Yacute -20
KPX L Ydieresis -20
KPX L quoteright -37
KPX L y -30
KPX L yacute -30
KPX L ydieresis -30
KPX Lacute T -20
KPX Lacute Tcaron -20
KPX Lacute Tcommaaccent -20
KPX Lacute V -55
KPX Lacute W -55
KPX Lacute Y -20
KPX Lacute Yacute -20
KPX Lacute Ydieresis -20
KPX Lacute quoteright -37
KPX Lacute y -30
KPX Lacute yacute -30
KPX Lacute ydieresis -30
KPX Lcommaaccent T -20
KPX Lcommaaccent Tcaron -20
KPX Lcommaaccent Tcommaaccent -20
KPX Lcommaaccent V -55
KPX Lcommaaccent W -55
KPX Lcommaaccent Y -20
KPX Lcommaaccent Yacute -20
KPX Lcommaaccent Ydieresis -20
KPX Lcommaaccent quoteright -37
KPX Lcommaaccent y -30
KPX Lcommaaccent yacute -30
KPX Lcommaaccent ydieresis -30
KPX Lslash T -20
KPX Lslash Tcaron -20
KPX Lslash Tcommaaccent -20
KPX Lslash V -55
KPX Lslash W -55
KPX Lslash Y -20
KPX Lslash Yacute -20
KPX Lslash Ydieresis -20
KPX Lslash quoteright -37
KPX Lslash y -30
KPX Lslash yacute -30
KPX Lslash ydieresis -30
KPX N A -27
KPX N Aacute -27
KPX N Abreve -27
KPX N Acircumflex -27
KPX N Adieresis -27
KPX N Agrave -27
KPX N Amacron -27
KPX N Aogonek -27
KPX N Aring -27
KPX N Atilde -27
KPX Nacute A -27
KPX Nacute Aacute -27
KPX Nacute Abreve -27
KPX Nacute Acircumflex -27
KPX Nacute Adieresis -27
KPX Nacute Agrave -27
KPX Nacute Amacron -27
KPX Nacute Aogonek -27
KPX Nacute Aring -27
KPX Nacute Atilde -27
KPX Ncaron A -27
KPX Ncaron Aacute -27
KPX Ncaron Abreve -27
KPX Ncaron Acircumflex -27
KPX Ncaron Adieresis -27
KPX Ncaron Agrave -27
KPX Ncaron Amacron -27
KPX Ncaron Aogonek -27
KPX Ncaron Aring -27
KPX Ncaron Atilde -27
KPX Ncommaaccent A -27
KPX Ncommaaccent Aacute -27
KPX Ncommaaccent Abreve -27
KPX Ncommaaccent Acircumflex -27
KPX Ncommaaccent Adieresis -27
KPX Ncommaaccent Agrave -27
KPX Ncommaaccent Amacron -27
KPX Ncommaaccent Aogonek -27
KPX Ncommaaccent Aring -27
KPX Ncommaaccent Atilde -27
KPX Ntilde A -27
KPX Ntilde Aacute -27
KPX Ntilde Abreve -27
KPX Ntilde Acircumflex -27
KPX Ntilde Adieresis -27
KPX Ntilde Agrave -27
KPX Ntilde Amacron -27
KPX Ntilde Aogonek -27
KPX Ntilde Aring -27
KPX Ntilde Atilde -27
KPX O A -55
KPX O Aacute -55
KPX O Abreve -55
KPX O Acircumflex -55
KPX O Adieresis -55
KPX O Agrave -55
KPX O Amacron -55
KPX O Aogonek -55
KPX O Aring -55
KPX O Atilde -55
KPX O T -40
KPX O Tcaron -40
KPX O Tcommaaccent -40
KPX O V -50
KPX O W -50
KPX O X -40
KPX O Y -50
KPX O Yacute -50
KPX O Ydieresis -50
KPX Oacute A -55
KPX Oacute Aacute -55
KPX Oacute Abreve -55
KPX Oacute Acircumflex -55
KPX Oacute Adieresis -55
KPX Oacute Agrave -55
KPX Oacute Amacron -55
KPX Oacute Aogonek -55
KPX Oacute Aring -55
KPX Oacute Atilde -55
KPX Oacute T -40
KPX Oacute Tcaron -40
KPX Oacute Tcommaaccent -40
KPX Oacute V -50
KPX Oacute W -50
KPX Oacute X -40
KPX Oacute Y -50
KPX Oacute Yacute -50
KPX Oacute Ydieresis -50
KPX Ocircumflex A -55
KPX Ocircumflex Aacute -55
KPX Ocircumflex Abreve -55
KPX Ocircumflex Acircumflex -55
KPX Ocircumflex Adieresis -55
KPX Ocircumflex Agrave -55
KPX Ocircumflex Amacron -55
KPX Ocircumflex Aogonek -55
KPX Ocircumflex Aring -55
KPX Ocircumflex Atilde -55
KPX Ocircumflex T -40
KPX Ocircumflex Tcaron -40
KPX Ocircumflex Tcommaaccent -40
KPX Ocircumflex V -50
KPX Ocircumflex W -50
KPX Ocircumflex X -40
KPX Ocircumflex Y -50
KPX Ocircumflex Yacute -50
KPX Ocircumflex Ydieresis -50
KPX Odieresis A -55
KPX Odieresis Aacute -55
KPX Odieresis Abreve -55
KPX Odieresis Acircumflex -55
KPX Odieresis Adieresis -55
KPX Odieresis Agrave -55
KPX Odieresis Amacron -55
KPX Odieresis Aogonek -55
KPX Odieresis Aring -55
KPX Odieresis Atilde -55
KPX Odieresis T -40
KPX Odieresis Tcaron -40
KPX Odieresis Tcommaaccent -40
KPX Odieresis V -50
KPX Odieresis W -50
KPX Odieresis X -40
KPX Odieresis Y -50
KPX Odieresis Yacute -50
KPX Odieresis Ydieresis -50
KPX Ograve A -55
KPX Ograve Aacute -55
KPX Ograve Abreve -55
KPX Ograve Acircumflex -55
KPX Ograve Adieresis -55
KPX Ograve Agrave -55
KPX Ograve Amacron -55
KPX Ograve Aogonek -55
KPX Ograve Aring -55
KPX Ograve Atilde -55
KPX Ograve T -40
KPX Ograve Tcaron -40
KPX Ograve Tcommaaccent -40
KPX Ograve V -50
KPX Ograve W -50
KPX Ograve X -40
KPX Ograve Y -50
KPX Ograve Yacute -50
KPX Ograve Ydieresis -50
KPX Ohungarumlaut A -55
KPX Ohungarumlaut Aacute -55
KPX Ohungarumlaut Abreve -55
KPX Ohungarumlaut Acircumflex -55
KPX Ohungarumlaut Adieresis -55
KPX Ohungarumlaut Agrave -55
KPX Ohungarumlaut Amacron -55
KPX Ohungarumlaut Aogonek -55
KPX Ohungarumlaut Aring -55
KPX Ohungarumlaut Atilde -55
KPX Ohungarumlaut T -40
KPX Ohungarumlaut Tcaron -40
KPX Ohungarumlaut Tcommaaccent -40
KPX Ohungarumlaut V -50
KPX Ohungarumlaut W -50
KPX Ohungarumlaut X -40
KPX Ohungarumlaut Y -50
KPX Ohungarumlaut Yacute -50
KPX Ohungarumlaut Ydieresis -50
KPX Omacron A -55
KPX Omacron Aacute -55
KPX Omacron Abreve -55
KPX Omacron Acircumflex -55
KPX Omacron Adieresis -55
KPX Omacron Agrave -55
KPX Omacron Amacron -55
KPX Omacron Aogonek -55
KPX Omacron Aring -55
KPX Omacron Atilde -55
KPX Omacron T -40
KPX Omacron Tcaron -40
KPX Omacron Tcommaaccent -40
KPX Omacron V -50
KPX Omacron W -50
KPX Omacron X -40
KPX Omacron Y -50
KPX Omacron Yacute -50
KPX Omacron Ydieresis -50
KPX Oslash A -55
KPX Oslash Aacute -55
KPX Oslash Abreve -55
KPX Oslash Acircumflex -55
KPX Oslash Adieresis -55
KPX Oslash Agrave -55
KPX Oslash Amacron -55
KPX Oslash Aogonek -55
KPX Oslash Aring -55
KPX Oslash Atilde -55
KPX Oslash T -40
KPX Oslash Tcaron -40
KPX Oslash Tcommaaccent -40
KPX Oslash V -50
KPX Oslash W -50
KPX Oslash X -40
KPX Oslash Y -50
KPX Oslash Yacute -50
KPX Oslash Ydieresis -50
KPX Otilde A -55
KPX Otilde Aacute -55
KPX Otilde Abreve -55
KPX Otilde Acircumflex -55
KPX Otilde Adieresis -55
KPX Otilde Agrave -55
KPX Otilde Amacron -55
KPX Otilde Aogonek -55
KPX Otilde Aring -55
KPX Otilde Atilde -55
KPX Otilde T -40
KPX Otilde Tcaron -40
KPX Otilde Tcommaaccent -40
KPX Otilde V -50
KPX Otilde W -50
KPX Otilde X -40
KPX Otilde Y -50
KPX Otilde Yacute -50
KPX Otilde Ydieresis -50
KPX P A -90
KPX P Aacute -90
KPX P Abreve -90
KPX P Acircumflex -90
KPX P Adieresis -90
KPX P Agrave -90
KPX P Amacron -90
KPX P Aogonek -90
KPX P Aring -90
KPX P Atilde -90
KPX P a -80
KPX P aacute -80
KPX P abreve -80
KPX P acircumflex -80
KPX P adieresis -80
KPX P agrave -80
KPX P amacron -80
KPX P aogonek -80
KPX P aring -80
KPX P atilde -80
KPX P comma -135
KPX P e -80
KPX P eacute -80
KPX P ecaron -80
KPX P ecircumflex -80
KPX P edieresis -80
KPX P edotaccent -80
KPX P egrave -80
KPX P emacron -80
KPX P eogonek -80
KPX P o -80
KPX P oacute -80
KPX P ocircumflex -80
KPX P odieresis -80
KPX P ograve -80
KPX P ohungarumlaut -80
KPX P omacron -80
KPX P oslash -80
KPX P otilde -80
KPX P period -135
KPX Q U -10
KPX Q Uacute -10
KPX Q Ucircumflex -10
KPX Q Udieresis -10
KPX Q Ugrave -10
KPX Q Uhungarumlaut -10
KPX Q Umacron -10
KPX Q Uogonek -10
KPX Q Uring -10
KPX R O -40
KPX R Oacute -40
KPX R Ocircumflex -40
KPX R Odieresis -40
KPX R Ograve -40
KPX R Ohungarumlaut -40
KPX R Omacron -40
KPX R Oslash -40
KPX R Otilde -40
KPX R U -40
KPX R Uacute -40
KPX R Ucircumflex -40
KPX R Udieresis -40
KPX R Ugrave -40
KPX R Uhungarumlaut -40
KPX R Umacron -40
KPX R Uogonek -40
KPX R Uring -40
KPX R V -18
KPX R W -18
KPX R Y -18
KPX R Yacute -18
KPX R Ydieresis -18
KPX Racute O -40
KPX Racute Oacute -40
KPX Racute Ocircumflex -40
KPX Racute Odieresis -40
KPX Racute Ograve -40
KPX Racute Ohungarumlaut -40
KPX Racute Omacron -40
KPX Racute Oslash -40
KPX Racute Otilde -40
KPX Racute U -40
KPX Racute Uacute -40
KPX Racute Ucircumflex -40
KPX Racute Udieresis -40
KPX Racute Ugrave -40
KPX Racute Uhungarumlaut -40
KPX Racute Umacron -40
KPX Racute Uogonek -40
KPX Racute Uring -40
KPX Racute V -18
KPX Racute W -18
KPX Racute Y -18
KPX Racute Yacute -18
KPX Racute Ydieresis -18
KPX Rcaron O -40
KPX Rcaron Oacute -40
KPX Rcaron Ocircumflex -40
KPX Rcaron Odieresis -40
KPX Rcaron Ograve -40
KPX Rcaron Ohungarumlaut -40
KPX Rcaron Omacron -40
KPX Rcaron Oslash -40
KPX Rcaron Otilde -40
KPX Rcaron U -40
KPX Rcaron Uacute -40
KPX Rcaron Ucircumflex -40
KPX Rcaron Udieresis -40
KPX Rcaron Ugrave -40
KPX Rcaron Uhungarumlaut -40
KPX Rcaron Umacron -40
KPX Rcaron Uogonek -40
KPX Rcaron Uring -40
KPX Rcaron V -18
KPX Rcaron W -18
KPX Rcaron Y -18
KPX Rcaron Yacute -18
KPX Rcaron Ydieresis -18
KPX Rcommaaccent O -40
KPX Rcommaaccent Oacute -40
KPX Rcommaaccent Ocircumflex -40
KPX Rcommaaccent Odieresis -40
KPX Rcommaaccent Ograve -40
KPX Rcommaaccent Ohungarumlaut -40
KPX Rcommaaccent Omacron -40
KPX Rcommaaccent Oslash -40
KPX Rcommaaccent Otilde -40
KPX Rcommaaccent U -40
KPX Rcommaaccent Uacute -40
KPX Rcommaaccent Ucircumflex -40
KPX Rcommaaccent Udieresis -40
KPX Rcommaaccent Ugrave -40
KPX Rcommaaccent Uhungarumlaut -40
KPX Rcommaaccent Umacron -40
KPX Rcommaaccent Uogonek -40
KPX Rcommaaccent Uring -40
KPX Rcommaaccent V -18
KPX Rcommaaccent W -18
KPX Rcommaaccent Y -18
KPX Rcommaaccent Yacute -18
KPX Rcommaaccent Ydieresis -18
KPX T A -50
KPX T Aacute -50
KPX T Abreve -50
KPX T Acircumflex -50
KPX T Adieresis -50
KPX T Agrave -50
KPX T Amacron -50
KPX T Aogonek -50
KPX T Aring -50
KPX T Atilde -50
KPX T O -18
KPX T Oacute -18
KPX T Ocircumflex -18
KPX T Odieresis -18
KPX T Ograve -18
KPX T Ohungarumlaut -18
KPX T Omacron -18
KPX T Oslash -18
KPX T Otilde -18
KPX T a -92
KPX T aacute -92
KPX T abreve -92
KPX T acircumflex -92
KPX T adieresis -92
KPX T agrave -92
KPX T amacron -92
KPX T aogonek -92
KPX T aring -92
KPX T atilde -92
KPX T colon -55
KPX T comma -74
KPX T e -92
KPX T eacute -92
KPX T ecaron -92
KPX T ecircumflex -52
KPX T edieresis -52
KPX T edotaccent -92
KPX T egrave -52
KPX T emacron -52
KPX T eogonek -92
KPX T hyphen -74
KPX T i -55
KPX T iacute -55
KPX T iogonek -55
KPX T o -92
KPX T oacute -92
KPX T ocircumflex -92
KPX T odieresis -92
KPX T ograve -92
KPX T ohungarumlaut -92
KPX T omacron -92
KPX T oslash -92
KPX T otilde -92
KPX T period -74
KPX T r -55
KPX T racute -55
KPX T rcaron -55
KPX T rcommaaccent -55
KPX T semicolon -65
KPX T u -55
KPX T uacute -55
KPX T ucircumflex -55
KPX T udieresis -55
KPX T ugrave -55
KPX T uhungarumlaut -55
KPX T umacron -55
KPX T uogonek -55
KPX T uring -55
KPX T w -74
KPX T y -74
KPX T yacute -74
KPX T ydieresis -34
KPX Tcaron A -50
KPX Tcaron Aacute -50
KPX Tcaron Abreve -50
KPX Tcaron Acircumflex -50
KPX Tcaron Adieresis -50
KPX Tcaron Agrave -50
KPX Tcaron Amacron -50
KPX Tcaron Aogonek -50
KPX Tcaron Aring -50
KPX Tcaron Atilde -50
KPX Tcaron O -18
KPX Tcaron Oacute -18
KPX Tcaron Ocircumflex -18
KPX Tcaron Odieresis -18
KPX Tcaron Ograve -18
KPX Tcaron Ohungarumlaut -18
KPX Tcaron Omacron -18
KPX Tcaron Oslash -18
KPX Tcaron Otilde -18
KPX Tcaron a -92
KPX Tcaron aacute -92
KPX Tcaron abreve -92
KPX Tcaron acircumflex -92
KPX Tcaron adieresis -92
KPX Tcaron agrave -92
KPX Tcaron amacron -92
KPX Tcaron aogonek -92
KPX Tcaron aring -92
KPX Tcaron atilde -92
KPX Tcaron colon -55
KPX Tcaron comma -74
KPX Tcaron e -92
KPX Tcaron eacute -92
KPX Tcaron ecaron -92
KPX Tcaron ecircumflex -52
KPX Tcaron edieresis -52
KPX Tcaron edotaccent -92
KPX Tcaron egrave -52
KPX Tcaron emacron -52
KPX Tcaron eogonek -92
KPX Tcaron hyphen -74
KPX Tcaron i -55
KPX Tcaron iacute -55
KPX Tcaron iogonek -55
KPX Tcaron o -92
KPX Tcaron oacute -92
KPX Tcaron ocircumflex -92
KPX Tcaron odieresis -92
KPX Tcaron ograve -92
KPX Tcaron ohungarumlaut -92
KPX Tcaron omacron -92
KPX Tcaron oslash -92
KPX Tcaron otilde -92
KPX Tcaron period -74
KPX Tcaron r -55
KPX Tcaron racute -55
KPX Tcaron rcaron -55
KPX Tcaron rcommaaccent -55
KPX Tcaron semicolon -65
KPX Tcaron u -55
KPX Tcaron uacute -55
KPX Tcaron ucircumflex -55
KPX Tcaron udieresis -55
KPX Tcaron ugrave -55
KPX Tcaron uhungarumlaut -55
KPX Tcaron umacron -55
KPX Tcaron uogonek -55
KPX Tcaron uring -55
KPX Tcaron w -74
KPX Tcaron y -74
KPX Tcaron yacute -74
KPX Tcaron ydieresis -34
KPX Tcommaaccent A -50
KPX Tcommaaccent Aacute -50
KPX Tcommaaccent Abreve -50
KPX Tcommaaccent Acircumflex -50
KPX Tcommaaccent Adieresis -50
KPX Tcommaaccent Agrave -50
KPX Tcommaaccent Amacron -50
KPX Tcommaaccent Aogonek -50
KPX Tcommaaccent Aring -50
KPX Tcommaaccent Atilde -50
KPX Tcommaaccent O -18
KPX Tcommaaccent Oacute -18
KPX Tcommaaccent Ocircumflex -18
KPX Tcommaaccent Odieresis -18
KPX Tcommaaccent Ograve -18
KPX Tcommaaccent Ohungarumlaut -18
KPX Tcommaaccent Omacron -18
KPX Tcommaaccent Oslash -18
KPX Tcommaaccent Otilde -18
KPX Tcommaaccent a -92
KPX Tcommaaccent aacute -92
KPX Tcommaaccent abreve -92
KPX Tcommaaccent acircumflex -92
KPX Tcommaaccent adieresis -92
KPX Tcommaaccent agrave -92
KPX Tcommaaccent amacron -92
KPX Tcommaaccent aogonek -92
KPX Tcommaaccent aring -92
KPX Tcommaaccent atilde -92
KPX Tcommaaccent colon -55
KPX Tcommaaccent comma -74
KPX Tcommaaccent e -92
KPX Tcommaaccent eacute -92
KPX Tcommaaccent ecaron -92
KPX Tcommaaccent ecircumflex -52
KPX Tcommaaccent edieresis -52
KPX Tcommaaccent edotaccent -92
KPX Tcommaaccent egrave -52
KPX Tcommaaccent emacron -52
KPX Tcommaaccent eogonek -92
KPX Tcommaaccent hyphen -74
KPX Tcommaaccent i -55
KPX Tcommaaccent iacute -55
KPX Tcommaaccent iogonek -55
KPX Tcommaaccent o -92
KPX Tcommaaccent oacute -92
KPX Tcommaaccent ocircumflex -92
KPX Tcommaaccent odieresis -92
KPX Tcommaaccent ograve -92
KPX Tcommaaccent ohungarumlaut -92
KPX Tcommaaccent omacron -92
KPX Tcommaaccent oslash -92
KPX Tcommaaccent otilde -92
KPX Tcommaaccent period -74
KPX Tcommaaccent r -55
KPX Tcommaaccent racute -55
KPX Tcommaaccent rcaron -55
KPX Tcommaaccent rcommaaccent -55
KPX Tcommaaccent semicolon -65
KPX Tcommaaccent u -55
KPX Tcommaaccent uacute -55
KPX Tcommaaccent ucircumflex -55
KPX Tcommaaccent udieresis -55
KPX Tcommaaccent ugrave -55
KPX Tcommaaccent uhungarumlaut -55
KPX Tcommaaccent umacron -55
KPX Tcommaaccent uogonek -55
KPX Tcommaaccent uring -55
KPX Tcommaaccent w -74
KPX Tcommaaccent y -74
KPX Tcommaaccent yacute -74
KPX Tcommaaccent ydieresis -34
KPX U A -40
KPX U Aacute -40
KPX U Abreve -40
KPX U Acircumflex -40
KPX U Adieresis -40
KPX U Agrave -40
KPX U Amacron -40
KPX U Aogonek -40
KPX U Aring -40
KPX U Atilde -40
KPX U comma -25
KPX U period -25
KPX Uacute A -40
KPX Uacute Aacute -40
KPX Uacute Abreve -40
KPX Uacute Acircumflex -40
KPX Uacute Adieresis -40
KPX Uacute Agrave -40
KPX Uacute Amacron -40
KPX Uacute Aogonek -40
KPX Uacute Aring -40
KPX Uacute Atilde -40
KPX Uacute comma -25
KPX Uacute period -25
KPX Ucircumflex A -40
KPX Ucircumflex Aacute -40
KPX Ucircumflex Abreve -40
KPX Ucircumflex Acircumflex -40
KPX Ucircumflex Adieresis -40
KPX Ucircumflex Agrave -40
KPX Ucircumflex Amacron -40
KPX Ucircumflex Aogonek -40
KPX Ucircumflex Aring -40
KPX Ucircumflex Atilde -40
KPX Ucircumflex comma -25
KPX Ucircumflex period -25
KPX Udieresis A -40
KPX Udieresis Aacute -40
KPX Udieresis Abreve -40
KPX Udieresis Acircumflex -40
KPX Udieresis Adieresis -40
KPX Udieresis Agrave -40
KPX Udieresis Amacron -40
KPX Udieresis Aogonek -40
KPX Udieresis Aring -40
KPX Udieresis Atilde -40
KPX Udieresis comma -25
KPX Udieresis period -25
KPX Ugrave A -40
KPX Ugrave Aacute -40
KPX Ugrave Abreve -40
KPX Ugrave Acircumflex -40
KPX Ugrave Adieresis -40
KPX Ugrave Agrave -40
KPX Ugrave Amacron -40
KPX Ugrave Aogonek -40
KPX Ugrave Aring -40
KPX Ugrave Atilde -40
KPX Ugrave comma -25
KPX Ugrave period -25
KPX Uhungarumlaut A -40
KPX Uhungarumlaut Aacute -40
KPX Uhungarumlaut Abreve -40
KPX Uhungarumlaut Acircumflex -40
KPX Uhungarumlaut Adieresis -40
KPX Uhungarumlaut Agrave -40
KPX Uhungarumlaut Amacron -40
KPX Uhungarumlaut Aogonek -40
KPX Uhungarumlaut Aring -40
KPX Uhungarumlaut Atilde -40
KPX Uhungarumlaut comma -25
KPX Uhungarumlaut period -25
KPX Umacron A -40
KPX Umacron Aacute -40
KPX Umacron Abreve -40
KPX Umacron Acircumflex -40
KPX Umacron Adieresis -40
KPX Umacron Agrave -40
KPX Umacron Amacron -40
KPX Umacron Aogonek -40
KPX Umacron Aring -40
KPX Umacron Atilde -40
KPX Umacron comma -25
KPX Umacron period -25
KPX Uogonek A -40
KPX Uogonek Aacute -40
KPX Uogonek Abreve -40
KPX Uogonek Acircumflex -40
KPX Uogonek Adieresis -40
KPX Uogonek Agrave -40
KPX Uogonek Amacron -40
KPX Uogonek Aogonek -40
KPX Uogonek Aring -40
KPX Uogonek Atilde -40
KPX Uogonek comma -25
KPX Uogonek period -25
KPX Uring A -40
KPX Uring Aacute -40
KPX Uring Abreve -40
KPX Uring Acircumflex -40
KPX Uring Adieresis -40
KPX Uring Agrave -40
KPX Uring Amacron -40
KPX Uring Aogonek -40
KPX Uring Aring -40
KPX Uring Atilde -40
KPX Uring comma -25
KPX Uring period -25
KPX V A -60
KPX V Aacute -60
KPX V Abreve -60
KPX V Acircumflex -60
KPX V Adieresis -60
KPX V Agrave -60
KPX V Amacron -60
KPX V Aogonek -60
KPX V Aring -60
KPX V Atilde -60
KPX V O -30
KPX V Oacute -30
KPX V Ocircumflex -30
KPX V Odieresis -30
KPX V Ograve -30
KPX V Ohungarumlaut -30
KPX V Omacron -30
KPX V Oslash -30
KPX V Otilde -30
KPX V a -111
KPX V aacute -111
KPX V abreve -111
KPX V acircumflex -111
KPX V adieresis -111
KPX V agrave -111
KPX V amacron -111
KPX V aogonek -111
KPX V aring -111
KPX V atilde -111
KPX V colon -65
KPX V comma -129
KPX V e -111
KPX V eacute -111
KPX V ecaron -111
KPX V ecircumflex -111
KPX V edieresis -71
KPX V edotaccent -111
KPX V egrave -71
KPX V emacron -71
KPX V eogonek -111
KPX V hyphen -55
KPX V i -74
KPX V iacute -74
KPX V icircumflex -34
KPX V idieresis -34
KPX V igrave -34
KPX V imacron -34
KPX V iogonek -74
KPX V o -111
KPX V oacute -111
KPX V ocircumflex -111
KPX V odieresis -111
KPX V ograve -111
KPX V ohungarumlaut -111
KPX V omacron -111
KPX V oslash -111
KPX V otilde -111
KPX V period -129
KPX V semicolon -74
KPX V u -74
KPX V uacute -74
KPX V ucircumflex -74
KPX V udieresis -74
KPX V ugrave -74
KPX V uhungarumlaut -74
KPX V umacron -74
KPX V uogonek -74
KPX V uring -74
KPX W A -60
KPX W Aacute -60
KPX W Abreve -60
KPX W Acircumflex -60
KPX W Adieresis -60
KPX W Agrave -60
KPX W Amacron -60
KPX W Aogonek -60
KPX W Aring -60
KPX W Atilde -60
KPX W O -25
KPX W Oacute -25
KPX W Ocircumflex -25
KPX W Odieresis -25
KPX W Ograve -25
KPX W Ohungarumlaut -25
KPX W Omacron -25
KPX W Oslash -25
KPX W Otilde -25
KPX W a -92
KPX W aacute -92
KPX W abreve -92
KPX W acircumflex -92
KPX W adieresis -92
KPX W agrave -92
KPX W amacron -92
KPX W aogonek -92
KPX W aring -92
KPX W atilde -92
KPX W colon -65
KPX W comma -92
KPX W e -92
KPX W eacute -92
KPX W ecaron -92
KPX W ecircumflex -92
KPX W edieresis -52
KPX W edotaccent -92
KPX W egrave -52
KPX W emacron -52
KPX W eogonek -92
KPX W hyphen -37
KPX W i -55
KPX W iacute -55
KPX W iogonek -55
KPX W o -92
KPX W oacute -92
KPX W ocircumflex -92
KPX W odieresis -92
KPX W ograve -92
KPX W ohungarumlaut -92
KPX W omacron -92
KPX W oslash -92
KPX W otilde -92
KPX W period -92
KPX W semicolon -65
KPX W u -55
KPX W uacute -55
KPX W ucircumflex -55
KPX W udieresis -55
KPX W ugrave -55
KPX W uhungarumlaut -55
KPX W umacron -55
KPX W uogonek -55
KPX W uring -55
KPX W y -70
KPX W yacute -70
KPX W ydieresis -70
KPX Y A -50
KPX Y Aacute -50
KPX Y Abreve -50
KPX Y Acircumflex -50
KPX Y Adieresis -50
KPX Y Agrave -50
KPX Y Amacron -50
KPX Y Aogonek -50
KPX Y Aring -50
KPX Y Atilde -50
KPX Y O -15
KPX Y Oacute -15
KPX Y Ocircumflex -15
KPX Y Odieresis -15
KPX Y Ograve -15
KPX Y Ohungarumlaut -15
KPX Y Omacron -15
KPX Y Oslash -15
KPX Y Otilde -15
KPX Y a -92
KPX Y aacute -92
KPX Y abreve -92
KPX Y acircumflex -92
KPX Y adieresis -92
KPX Y agrave -92
KPX Y amacron -92
KPX Y aogonek -92
KPX Y aring -92
KPX Y atilde -92
KPX Y colon -65
KPX Y comma -92
KPX Y e -92
KPX Y eacute -92
KPX Y ecaron -92
KPX Y ecircumflex -92
KPX Y edieresis -52
KPX Y edotaccent -92
KPX Y egrave -52
KPX Y emacron -52
KPX Y eogonek -92
KPX Y hyphen -74
KPX Y i -74
KPX Y iacute -74
KPX Y icircumflex -34
KPX Y idieresis -34
KPX Y igrave -34
KPX Y imacron -34
KPX Y iogonek -74
KPX Y o -92
KPX Y oacute -92
KPX Y ocircumflex -92
KPX Y odieresis -92
KPX Y ograve -92
KPX Y ohungarumlaut -92
KPX Y omacron -92
KPX Y oslash -92
KPX Y otilde -92
KPX Y period -92
KPX Y semicolon -65
KPX Y u -92
KPX Y uacute -92
KPX Y ucircumflex -92
KPX Y udieresis -92
KPX Y ugrave -92
KPX Y uhungarumlaut -92
KPX Y umacron -92
KPX Y uogonek -92
KPX Y uring -92
KPX Yacute A -50
KPX Yacute Aacute -50
KPX Yacute Abreve -50
KPX Yacute Acircumflex -50
KPX Yacute Adieresis -50
KPX Yacute Agrave -50
KPX Yacute Amacron -50
KPX Yacute Aogonek -50
KPX Yacute Aring -50
KPX Yacute Atilde -50
KPX Yacute O -15
KPX Yacute Oacute -15
KPX Yacute Ocircumflex -15
KPX Yacute Odieresis -15
KPX Yacute Ograve -15
KPX Yacute Ohungarumlaut -15
KPX Yacute Omacron -15
KPX Yacute Oslash -15
KPX Yacute Otilde -15
KPX Yacute a -92
KPX Yacute aacute -92
KPX Yacute abreve -92
KPX Yacute acircumflex -92
KPX Yacute adieresis -92
KPX Yacute agrave -92
KPX Yacute amacron -92
KPX Yacute aogonek -92
KPX Yacute aring -92
KPX Yacute atilde -92
KPX Yacute colon -65
KPX Yacute comma -92
KPX Yacute e -92
KPX Yacute eacute -92
KPX Yacute ecaron -92
KPX Yacute ecircumflex -92
KPX Yacute edieresis -52
KPX Yacute edotaccent -92
KPX Yacute egrave -52
KPX Yacute emacron -52
KPX Yacute eogonek -92
KPX Yacute hyphen -74
KPX Yacute i -74
KPX Yacute iacute -74
KPX Yacute icircumflex -34
KPX Yacute idieresis -34
KPX Yacute igrave -34
KPX Yacute imacron -34
KPX Yacute iogonek -74
KPX Yacute o -92
KPX Yacute oacute -92
KPX Yacute ocircumflex -92
KPX Yacute odieresis -92
KPX Yacute ograve -92
KPX Yacute ohungarumlaut -92
KPX Yacute omacron -92
KPX Yacute oslash -92
KPX Yacute otilde -92
KPX Yacute period -92
KPX Yacute semicolon -65
KPX Yacute u -92
KPX Yacute uacute -92
KPX Yacute ucircumflex -92
KPX Yacute udieresis -92
KPX Yacute ugrave -92
KPX Yacute uhungarumlaut -92
KPX Yacute umacron -92
KPX Yacute uogonek -92
KPX Yacute uring -92
KPX Ydieresis A -50
KPX Ydieresis Aacute -50
KPX Ydieresis Abreve -50
KPX Ydieresis Acircumflex -50
KPX Ydieresis Adieresis -50
KPX Ydieresis Agrave -50
KPX Ydieresis Amacron -50
KPX Ydieresis Aogonek -50
KPX Ydieresis Aring -50
KPX Ydieresis Atilde -50
KPX Ydieresis O -15
KPX Ydieresis Oacute -15
KPX Ydieresis Ocircumflex -15
KPX Ydieresis Odieresis -15
KPX Ydieresis Ograve -15
KPX Ydieresis Ohungarumlaut -15
KPX Ydieresis Omacron -15
KPX Ydieresis Oslash -15
KPX Ydieresis Otilde -15
KPX Ydieresis a -92
KPX Ydieresis aacute -92
KPX Ydieresis abreve -92
KPX Ydieresis acircumflex -92
KPX Ydieresis adieresis -92
KPX Ydieresis agrave -92
KPX Ydieresis amacron -92
KPX Ydieresis aogonek -92
KPX Ydieresis aring -92
KPX Ydieresis atilde -92
KPX Ydieresis colon -65
KPX Ydieresis comma -92
KPX Ydieresis e -92
KPX Ydieresis eacute -92
KPX Ydieresis ecaron -92
KPX Ydieresis ecircumflex -92
KPX Ydieresis edieresis -52
KPX Ydieresis edotaccent -92
KPX Ydieresis egrave -52
KPX Ydieresis emacron -52
KPX Ydieresis eogonek -92
KPX Ydieresis hyphen -74
KPX Ydieresis i -74
KPX Ydieresis iacute -74
KPX Ydieresis icircumflex -34
KPX Ydieresis idieresis -34
KPX Ydieresis igrave -34
KPX Ydieresis imacron -34
KPX Ydieresis iogonek -74
KPX Ydieresis o -92
KPX Ydieresis oacute -92
KPX Ydieresis ocircumflex -92
KPX Ydieresis odieresis -92
KPX Ydieresis ograve -92
KPX Ydieresis ohungarumlaut -92
KPX Ydieresis omacron -92
KPX Ydieresis oslash -92
KPX Ydieresis otilde -92
KPX Ydieresis period -92
KPX Ydieresis semicolon -65
KPX Ydieresis u -92
KPX Ydieresis uacute -92
KPX Ydieresis ucircumflex -92
KPX Ydieresis udieresis -92
KPX Ydieresis ugrave -92
KPX Ydieresis uhungarumlaut -92
KPX Ydieresis umacron -92
KPX Ydieresis uogonek -92
KPX Ydieresis uring -92
KPX a g -10
KPX a gbreve -10
KPX a gcommaaccent -10
KPX aacute g -10
KPX aacute gbreve -10
KPX aacute gcommaaccent -10
KPX abreve g -10
KPX abreve gbreve -10
KPX abreve gcommaaccent -10
KPX acircumflex g -10
KPX acircumflex gbreve -10
KPX acircumflex gcommaaccent -10
KPX adieresis g -10
KPX adieresis gbreve -10
KPX adieresis gcommaaccent -10
KPX agrave g -10
KPX agrave gbreve -10
KPX agrave gcommaaccent -10
KPX amacron g -10
KPX amacron gbreve -10
KPX amacron gcommaaccent -10
KPX aogonek g -10
KPX aogonek gbreve -10
KPX aogonek gcommaaccent -10
KPX aring g -10
KPX aring gbreve -10
KPX aring gcommaaccent -10
KPX atilde g -10
KPX atilde gbreve -10
KPX atilde gcommaaccent -10
KPX b period -40
KPX b u -20
KPX b uacute -20
KPX b ucircumflex -20
KPX b udieresis -20
KPX b ugrave -20
KPX b uhungarumlaut -20
KPX b umacron -20
KPX b uogonek -20
KPX b uring -20
KPX c h -15
KPX c k -20
KPX c kcommaaccent -20
KPX cacute h -15
KPX cacute k -20
KPX cacute kcommaaccent -20
KPX ccaron h -15
KPX ccaron k -20
KPX ccaron kcommaaccent -20
KPX ccedilla h -15
KPX ccedilla k -20
KPX ccedilla kcommaaccent -20
KPX comma quotedblright -140
KPX comma quoteright -140
KPX e comma -10
KPX e g -40
KPX e gbreve -40
KPX e gcommaaccent -40
KPX e period -15
KPX e v -15
KPX e w -15
KPX e x -20
KPX e y -30
KPX e yacute -30
KPX e ydieresis -30
KPX eacute comma -10
KPX eacute g -40
KPX eacute gbreve -40
KPX eacute gcommaaccent -40
KPX eacute period -15
KPX eacute v -15
KPX eacute w -15
KPX eacute x -20
KPX eacute y -30
KPX eacute yacute -30
KPX eacute ydieresis -30
KPX ecaron comma -10
KPX ecaron g -40
KPX ecaron gbreve -40
KPX ecaron gcommaaccent -40
KPX ecaron period -15
KPX ecaron v -15
KPX ecaron w -15
KPX ecaron x -20
KPX ecaron y -30
KPX ecaron yacute -30
KPX ecaron ydieresis -30
KPX ecircumflex comma -10
KPX ecircumflex g -40
KPX ecircumflex gbreve -40
KPX ecircumflex gcommaaccent -40
KPX ecircumflex period -15
KPX ecircumflex v -15
KPX ecircumflex w -15
KPX ecircumflex x -20
KPX ecircumflex y -30
KPX ecircumflex yacute -30
KPX ecircumflex ydieresis -30
KPX edieresis comma -10
KPX edieresis g -40
KPX edieresis gbreve -40
KPX edieresis gcommaaccent -40
KPX edieresis period -15
KPX edieresis v -15
KPX edieresis w -15
KPX edieresis x -20
KPX edieresis y -30
KPX edieresis yacute -30
KPX edieresis ydieresis -30
KPX edotaccent comma -10
KPX edotaccent g -40
KPX edotaccent gbreve -40
KPX edotaccent gcommaaccent -40
KPX edotaccent period -15
KPX edotaccent v -15
KPX edotaccent w -15
KPX edotaccent x -20
KPX edotaccent y -30
KPX edotaccent yacute -30
KPX edotaccent ydieresis -30
KPX egrave comma -10
KPX egrave g -40
KPX egrave gbreve -40
KPX egrave gcommaaccent -40
KPX egrave period -15
KPX egrave v -15
KPX egrave w -15
KPX egrave x -20
KPX egrave y -30
KPX egrave yacute -30
KPX egrave ydieresis -30
KPX emacron comma -10
KPX emacron g -40
KPX emacron gbreve -40
KPX emacron gcommaaccent -40
KPX emacron period -15
KPX emacron v -15
KPX emacron w -15
KPX emacron x -20
KPX emacron y -30
KPX emacron yacute -30
KPX emacron ydieresis -30
KPX eogonek comma -10
KPX eogonek g -40
KPX eogonek gbreve -40
KPX eogonek gcommaaccent -40
KPX eogonek period -15
KPX eogonek v -15
KPX eogonek w -15
KPX eogonek x -20
KPX eogonek y -30
KPX eogonek yacute -30
KPX eogonek ydieresis -30
KPX f comma -10
KPX f dotlessi -60
KPX f f -18
KPX f i -20
KPX f iogonek -20
KPX f period -15
KPX f quoteright 92
KPX g comma -10
KPX g e -10
KPX g eacute -10
KPX g ecaron -10
KPX g ecircumflex -10
KPX g edieresis -10
KPX g edotaccent -10
KPX g egrave -10
KPX g emacron -10
KPX g eogonek -10
KPX g g -10
KPX g gbreve -10
KPX g gcommaaccent -10
KPX g period -15
KPX gbreve comma -10
KPX gbreve e -10
KPX gbreve eacute -10
KPX gbreve ecaron -10
KPX gbreve ecircumflex -10
KPX gbreve edieresis -10
KPX gbreve edotaccent -10
KPX gbreve egrave -10
KPX gbreve emacron -10
KPX gbreve eogonek -10
KPX gbreve g -10
KPX gbreve gbreve -10
KPX gbreve gcommaaccent -10
KPX gbreve period -15
KPX gcommaaccent comma -10
KPX gcommaaccent e -10
KPX gcommaaccent eacute -10
KPX gcommaaccent ecaron -10
KPX gcommaaccent ecircumflex -10
KPX gcommaaccent edieresis -10
KPX gcommaaccent edotaccent -10
KPX gcommaaccent egrave -10
KPX gcommaaccent emacron -10
KPX gcommaaccent eogonek -10
KPX gcommaaccent g -10
KPX gcommaaccent gbreve -10
KPX gcommaaccent gcommaaccent -10
KPX gcommaaccent period -15
KPX k e -10
KPX k eacute -10
KPX k ecaron -10
KPX k ecircumflex -10
KPX k edieresis -10
KPX k edotaccent -10
KPX k egrave -10
KPX k emacron -10
KPX k eogonek -10
KPX k o -10
KPX k oacute -10
KPX k ocircumflex -10
KPX k odieresis -10
KPX k ograve -10
KPX k ohungarumlaut -10
KPX k omacron -10
KPX k oslash -10
KPX k otilde -10
KPX k y -10
KPX k yacute -10
KPX k ydieresis -10
KPX kcommaaccent e -10
KPX kcommaaccent eacute -10
KPX kcommaaccent ecaron -10
KPX kcommaaccent ecircumflex -10
KPX kcommaaccent edieresis -10
KPX kcommaaccent edotaccent -10
KPX kcommaaccent egrave -10
KPX kcommaaccent emacron -10
KPX kcommaaccent eogonek -10
KPX kcommaaccent o -10
KPX kcommaaccent oacute -10
KPX kcommaaccent ocircumflex -10
KPX kcommaaccent odieresis -10
KPX kcommaaccent ograve -10
KPX kcommaaccent ohungarumlaut -10
KPX kcommaaccent omacron -10
KPX kcommaaccent oslash -10
KPX kcommaaccent otilde -10
KPX kcommaaccent y -10
KPX kcommaaccent yacute -10
KPX kcommaaccent ydieresis -10
KPX n v -40
KPX nacute v -40
KPX ncaron v -40
KPX ncommaaccent v -40
KPX ntilde v -40
KPX o g -10
KPX o gbreve -10
KPX o gcommaaccent -10
KPX o v -10
KPX oacute g -10
KPX oacute gbreve -10
KPX oacute gcommaaccent -10
KPX oacute v -10
KPX ocircumflex g -10
KPX ocircumflex gbreve -10
KPX ocircumflex gcommaaccent -10
KPX ocircumflex v -10
KPX odieresis g -10
KPX odieresis gbreve -10
KPX odieresis gcommaaccent -10
KPX odieresis v -10
KPX ograve g -10
KPX ograve gbreve -10
KPX ograve gcommaaccent -10
KPX ograve v -10
KPX ohungarumlaut g -10
KPX ohungarumlaut gbreve -10
KPX ohungarumlaut gcommaaccent -10
KPX ohungarumlaut v -10
KPX omacron g -10
KPX omacron gbreve -10
KPX omacron gcommaaccent -10
KPX omacron v -10
KPX oslash g -10
KPX oslash gbreve -10
KPX oslash gcommaaccent -10
KPX oslash v -10
KPX otilde g -10
KPX otilde gbreve -10
KPX otilde gcommaaccent -10
KPX otilde v -10
KPX period quotedblright -140
KPX period quoteright -140
KPX quoteleft quoteleft -111
KPX quoteright d -25
KPX quoteright dcroat -25
KPX quoteright quoteright -111
KPX quoteright r -25
KPX quoteright racute -25
KPX quoteright rcaron -25
KPX quoteright rcommaaccent -25
KPX quoteright s -40
KPX quoteright sacute -40
KPX quoteright scaron -40
KPX quoteright scedilla -40
KPX quoteright scommaaccent -40
KPX quoteright space -111
KPX quoteright t -30
KPX quoteright tcommaaccent -30
KPX quoteright v -10
KPX r a -15
KPX r aacute -15
KPX r abreve -15
KPX r acircumflex -15
KPX r adieresis -15
KPX r agrave -15
KPX r amacron -15
KPX r aogonek -15
KPX r aring -15
KPX r atilde -15
KPX r c -37
KPX r cacute -37
KPX r ccaron -37
KPX r ccedilla -37
KPX r comma -111
KPX r d -37
KPX r dcroat -37
KPX r e -37
KPX r eacute -37
KPX r ecaron -37
KPX r ecircumflex -37
KPX r edieresis -37
KPX r edotaccent -37
KPX r egrave -37
KPX r emacron -37
KPX r eogonek -37
KPX r g -37
KPX r gbreve -37
KPX r gcommaaccent -37
KPX r hyphen -20
KPX r o -45
KPX r oacute -45
KPX r ocircumflex -45
KPX r odieresis -45
KPX r ograve -45
KPX r ohungarumlaut -45
KPX r omacron -45
KPX r oslash -45
KPX r otilde -45
KPX r period -111
KPX r q -37
KPX r s -10
KPX r sacute -10
KPX r scaron -10
KPX r scedilla -10
KPX r scommaaccent -10
KPX racute a -15
KPX racute aacute -15
KPX racute abreve -15
KPX racute acircumflex -15
KPX racute adieresis -15
KPX racute agrave -15
KPX racute amacron -15
KPX racute aogonek -15
KPX racute aring -15
KPX racute atilde -15
KPX racute c -37
KPX racute cacute -37
KPX racute ccaron -37
KPX racute ccedilla -37
KPX racute comma -111
KPX racute d -37
KPX racute dcroat -37
KPX racute e -37
KPX racute eacute -37
KPX racute ecaron -37
KPX racute ecircumflex -37
KPX racute edieresis -37
KPX racute edotaccent -37
KPX racute egrave -37
KPX racute emacron -37
KPX racute eogonek -37
KPX racute g -37
KPX racute gbreve -37
KPX racute gcommaaccent -37
KPX racute hyphen -20
KPX racute o -45
KPX racute oacute -45
KPX racute ocircumflex -45
KPX racute odieresis -45
KPX racute ograve -45
KPX racute ohungarumlaut -45
KPX racute omacron -45
KPX racute oslash -45
KPX racute otilde -45
KPX racute period -111
KPX racute q -37
KPX racute s -10
KPX racute sacute -10
KPX racute scaron -10
KPX racute scedilla -10
KPX racute scommaaccent -10
KPX rcaron a -15
KPX rcaron aacute -15
KPX rcaron abreve -15
KPX rcaron acircumflex -15
KPX rcaron adieresis -15
KPX rcaron agrave -15
KPX rcaron amacron -15
KPX rcaron aogonek -15
KPX rcaron aring -15
KPX rcaron atilde -15
KPX rcaron c -37
KPX rcaron cacute -37
KPX rcaron ccaron -37
KPX rcaron ccedilla -37
KPX rcaron comma -111
KPX rcaron d -37
KPX rcaron dcroat -37
KPX rcaron e -37
KPX rcaron eacute -37
KPX rcaron ecaron -37
KPX rcaron ecircumflex -37
KPX rcaron edieresis -37
KPX rcaron edotaccent -37
KPX rcaron egrave -37
KPX rcaron emacron -37
KPX rcaron eogonek -37
KPX rcaron g -37
KPX rcaron gbreve -37
KPX rcaron gcommaaccent -37
KPX rcaron hyphen -20
KPX rcaron o -45
KPX rcaron oacute -45
KPX rcaron ocircumflex -45
KPX rcaron odieresis -45
KPX rcaron ograve -45
KPX rcaron ohungarumlaut -45
KPX rcaron omacron -45
KPX rcaron oslash -45
KPX rcaron otilde -45
KPX rcaron period -111
KPX rcaron q -37
KPX rcaron s -10
KPX rcaron sacute -10
KPX rcaron scaron -10
KPX rcaron scedilla -10
KPX rcaron scommaaccent -10
KPX rcommaaccent a -15
KPX rcommaaccent aacute -15
KPX rcommaaccent abreve -15
KPX rcommaaccent acircumflex -15
KPX rcommaaccent adieresis -15
KPX rcommaaccent agrave -15
KPX rcommaaccent amacron -15
KPX rcommaaccent aogonek -15
KPX rcommaaccent aring -15
KPX rcommaaccent atilde -15
KPX rcommaaccent c -37
KPX rcommaaccent cacute -37
KPX rcommaaccent ccaron -37
KPX rcommaaccent ccedilla -37
KPX rcommaaccent comma -111
KPX rcommaaccent d -37
KPX rcommaaccent dcroat -37
KPX rcommaaccent e -37
KPX rcommaaccent eacute -37
KPX rcommaaccent ecaron -37
KPX rcommaaccent ecircumflex -37
KPX rcommaaccent edieresis -37
KPX rcommaaccent edotaccent -37
KPX rcommaaccent egrave -37
KPX rcommaaccent emacron -37
KPX rcommaaccent eogonek -37
KPX rcommaaccent g -37
KPX rcommaaccent gbreve -37
KPX rcommaaccent gcommaaccent -37
KPX rcommaaccent hyphen -20
KPX rcommaaccent o -45
KPX rcommaaccent oacute -45
KPX rcommaaccent ocircumflex -45
KPX rcommaaccent odieresis -45
KPX rcommaaccent ograve -45
KPX rcommaaccent ohungarumlaut -45
KPX rcommaaccent omacron -45
KPX rcommaaccent oslash -45
KPX rcommaaccent otilde -45
KPX rcommaaccent period -111
KPX rcommaaccent q -37
KPX rcommaaccent s -10
KPX rcommaaccent sacute -10
KPX rcommaaccent scaron -10
KPX rcommaaccent scedilla -10
KPX rcommaaccent scommaaccent -10
KPX space A -18
KPX space Aacute -18
KPX space Abreve -18
KPX space Acircumflex -18
KPX space Adieresis -18
KPX space Agrave -18
KPX space Amacron -18
KPX space Aogonek -18
KPX space Aring -18
KPX space Atilde -18
KPX space T -18
KPX space Tcaron -18
KPX space Tcommaaccent -18
KPX space V -35
KPX space W -40
KPX space Y -75
KPX space Yacute -75
KPX space Ydieresis -75
KPX v comma -74
KPX v period -74
KPX w comma -74
KPX w period -74
KPX y comma -55
KPX y period -55
KPX yacute comma -55
KPX yacute period -55
KPX ydieresis comma -55
KPX ydieresis period -55
EndKernPairs
EndKernData
EndFontMetrics
StartFontMetrics 4.1
Comment Copyright (c) 1985, 1987, 1989, 1990, 1993, 1997 Adobe Systems Incorporated.  All Rights Reserved.
Comment Creation Date: Thu May  1 12:49:17 1997
Comment UniqueID 43068
Comment VMusage 43909 54934
FontName Times-Roman
FullName Times Roman
FamilyName Times
Weight Roman
ItalicAngle 0
IsFixedPitch false
CharacterSet ExtendedRoman
FontBBox -168 -218 1000 898
UnderlinePosition -100
UnderlineThickness 50
Version 002.00
Notice Copyright (c) 1985, 1987, 1989, 1990, 1993, 1997 Adobe Systems Incorporated.  All Rights Reserved.Times is a trademark of Linotype-Hell AG and/or its subsidiaries.
EncodingScheme WinAnsiEncoding
CapHeight 662
XHeight 450
Ascender 683
Descender -217
StdHW 28
StdVW 84
StartCharMetrics 317
C 32 ; WX 250 ; N space ; B 0 0 0 0 ;
C 160 ; WX 250 ; N space ; B 0 0 0 0 ;
C 33 ; WX 333 ; N exclam ; B 130 -9 238 676 ;
C 34 ; WX 408 ; N quotedbl ; B 77 431 331 676 ;
C 35 ; WX 500 ; N numbersign ; B 5 0 496 662 ;
C 36 ; WX 500 ; N dollar ; B 44 -87 457 727 ;
C 37 ; WX 833 ; N percent ; B 61 -13 772 676 ;
C 38 ; WX 778 ; N ampersand ; B 42 -13 750 676 ;
C 146 ; WX 333 ; N quoteright ; B 79 433 218 676 ;
C 40 ; WX 333 ; N parenleft ; B 48 -177 304 676 ;
C 41 ; WX 333 ; N parenright ; B 29 -177 285 676 ;
C 42 ; WX 500 ; N asterisk ; B 69 265 432 676 ;
C 43 ; WX 564 ; N plus ; B 30 0 534 506 ;
C 44 ; WX 250 ; N comma ; B 56 -141 195 102 ;
C 45 ; WX 333 ; N hyphen ; B 39 194 285 257 ;
C 173 ; WX 333 ; N hyphen ; B 39 194 285 257 ;
C 46 ; WX 250 ; N period ; B 70 -11 181 100 ;
C 47 ; WX 278 ; N slash ; B -9 -14 287 676 ;
C 48 ; WX 500 ; N zero ; B 24 -14 476 676 ;
C 49 ; WX 500 ; N one ; B 111 0 394 676 ;
C 50 ; WX 500 ; N two ; B 30 0 475 676 ;
C 51 ; WX 500 ; N three ; B 43 -14 431 676 ;
C 52 ; WX 500 ; N four ; B 12 0 472 676 ;
C 53 ; WX 500 ; N five ; B 32 -14 438 688 ;
C 54 ; WX 500 ; N six ; B 34 -14 468 684 ;
C 55 ; WX 500 ; N seven ; B 20 -8 449 662 ;
C 56 ; WX 500 ; N eight ; B 56 -14 445 676 ;
C 57 ; WX 500 ; N nine ; B 30 -22 459 676 ;
C 58 ; WX 278 ; N colon ; B 81 -11 192 459 ;
C 59 ; WX 278 ; N semicolon ; B 80 -141 219 459 ;
C 60 ; WX 564 ; N less ; B 28 -8 536 514 ;
C 61 ; WX 564 ; N equal ; B 30 120 534 386 ;
C 62 ; WX 564 ; N greater ; B 28 -8 536 514 ;
C 63 ; WX 444 ; N question ; B 68 -8 414 676 ;
C 64 ; WX 921 ; N at ; B 116 -14 809 676 ;
C 65 ; WX 722 ; N A ; B 15 0 706 674 ;
C 66 ; WX 667 ; N B ; B 17 0 593 662 ;
C 67 ; WX 667 ; N C ; B 28 -14 633 676 ;
C 68 ; WX 722 ; N D ; B 16 0 685 662 ;
C 69 ; WX 611 ; N E ; B 12 0 597 662 ;
C 70 ; WX 556 ; N F ; B 12 0 546 662 ;
C 71 ; WX 722 ; N G ; B 32 -14 709 676 ;
C 72 ; WX 722 ; N H ; B 19 0 702 662 ;
C 73 ; WX 333 ; N I ; B 18 0 315 662 ;
C 74 ; WX 389 ; N J ; B 10 -14 370 662 ;
C 75 ; WX 722 ; N K ; B 34 0 723 662 ;
C 76 ; WX 611 ; N L ; B 12 0 598 662 ;
C 77 ; WX 889 ; N M ; B 12 0 863 662 ;
C 78 ; WX 722 ; N N ; B 12 -11 707 662 ;
C 79 ; WX 722 ; N O ; B 34 -14 688 676 ;
C 80 ; WX 556 ; N P ; B 16 0 542 662 ;
C 81 ; WX 722 ; N Q ; B 34 -178 701 676 ;
C 82 ; WX 667 ; N R ; B 17 0 659 662 ;
C 83 ; WX 556 ; N S ; B 42 -14 491 676 ;
C 84 ; WX 611 ; N T ; B 17 0 593 662 ;
C 85 ; WX 722 ; N U ; B 14 -14 705 662 ;
C 86 ; WX 722 ; N V ; B 16 -11 697 662 ;
C 87 ; WX 944 ; N W ; B 5 -11 932 662 ;
C 88 ; WX 722 ; N X ; B 10 0 704 662 ;
C 89 ; WX 722 ; N Y ; B 22 0 703 662 ;
C 90 ; WX 611 ; N Z ; B 9 0 597 662 ;
C 91 ; WX 333 ; N bracketleft ; B 88 -156 299 662 ;
C 92 ; WX 278 ; N backslash ; B -9 -14 287 676 ;
C 93 ; WX 333 ; N bracketright ; B 34 -156 245 662 ;
C 94 ; WX 469 ; N asciicircum ; B 24 297 446 662 ;
C 95 ; WX 500 ; N underscore ; B 0 -125 500 -75 ;
C 145 ; WX 333 ; N quoteleft ; B 115 433 254 676 ;
C 97 ; WX 444 ; N a ; B 37 -10 442 460 ;
C 98 ; WX 500 ; N b ; B 3 -10 468 683 ;
C 99 ; WX 444 ; N c ; B 25 -10 412 460 ;
C 100 ; WX 500 ; N d ; B 27 -10 491 683 ;
C 101 ; WX 444 ; N e ; B 25 -10 424 460 ;
C 102 ; WX 333 ; N f ; B 20 0 383 683 ; L i fi ; L l fl ;
C 103 ; WX 500 ; N g ; B 28 -218 470 460 ;
C 104 ; WX 500 ; N h ; B 9 0 487 683 ;
C 105 ; WX 278 ; N i ; B 16 0 253 683 ;
C 106 ; WX 278 ; N j ; B -70 -218 194 683 ;
C 107 ; WX 500 ; N k ; B 7 0 505 683 ;
C 108 ; WX 278 ; N l ; B 19 0 257 683 ;
C 109 ; WX 778 ; N m ; B 16 0 775 460 ;
C 110 ; WX 500 ; N n ; B 16 0 485 460 ;
C 111 ; WX 500 ; N o ; B 29 -10 470 460 ;
C 112 ; WX 500 ; N p ; B 5 -217 470 460 ;
C 113 ; WX 500 ; N q ; B 24 -217 488 460 ;
C 114 ; WX 333 ; N r ; B 5 0 335 460 ;
C 115 ; WX 389 ; N s ; B 51 -10 348 460 ;
C 116 ; WX 278 ; N t ; B 13 -10 279 579 ;
C 117 ; WX 500 ; N u ; B 9 -10 479 450 ;
C 118 ; WX 500 ; N v ; B 19 -14 477 450 ;
C 119 ; WX 722 ; N w ; B 21 -14 694 450 ;
C 120 ; WX 500 ; N x ; B 17 0 479 450 ;
C 121 ; WX 500 ; N y ; B 14 -218 475 450 ;
C 122 ; WX 444 ; N z ; B 27 0 418 450 ;
C 123 ; WX 480 ; N braceleft ; B 100 -181 350 680 ;
C 124 ; WX 200 ; N bar ; B 67 -218 133 782 ;
C 125 ; WX 480 ; N braceright ; B 130 -181 380 680 ;
C 126 ; WX 541 ; N asciitilde ; B 40 183 502 323 ;
C 161 ; WX 333 ; N exclamdown ; B 97 -218 205 467 ;
C 162 ; WX 500 ; N cent ; B 53 -138 448 579 ;
C 163 ; WX 500 ; N sterling ; B 12 -8 490 676 ;
C -1 ; WX 167 ; N fraction ; B -168 -14 331 676 ;
C 165 ; WX 500 ; N yen ; B -53 0 512 662 ;
C 131 ; WX 500 ; N florin ; B 7 -189 490 676 ;
C 167 ; WX 500 ; N section ; B 70 -148 426 676 ;
C 164 ; WX 500 ; N currency ; B -22 58 522 602 ;
C 39 ; WX 180 ; N quotesingle ; B 48 431 133 676 ;
C 147 ; WX 444 ; N quotedblleft ; B 43 433 414 676 ;
C 171 ; WX 500 ; N guillemotleft ; B 42 33 456 416 ;
C 139 ; WX 333 ; N guilsinglleft ; B 63 33 285 416 ;
C 155 ; WX 333 ; N guilsinglright ; B 48 33 270 416 ;
C -1 ; WX 556 ; N fi ; B 31 0 521 683 ;
C -1 ; WX 556 ; N fl ; B 32 0 521 683 ;
C 150 ; WX 500 ; N endash ; B 0 201 500 250 ;
C 134 ; WX 500 ; N dagger ; B 59 -149 442 676 ;
C 135 ; WX 500 ; N daggerdbl ; B 58 -153 442 676 ;
C 183 ; WX 250 ; N periodcentered ; B 70 199 181 310 ;
C 182 ; WX 453 ; N paragraph ; B -22 -154 450 662 ;
C 149 ; WX 350 ; N bullet ; B 40 196 310 466 ;
C 130 ; WX 333 ; N quotesinglbase ; B 79 -141 218 102 ;
C 132 ; WX 444 ; N quotedblbase ; B 45 -141 416 102 ;
C 148 ; WX 444 ; N quotedblright ; B 30 433 401 676 ;
C 187 ; WX 500 ; N guillemotright ; B 44 33 458 416 ;
C 133 ; WX 1000 ; N ellipsis ; B 111 -11 888 100 ;
C 137 ; WX 1000 ; N perthousand ; B 7 -19 994 706 ;
C 191 ; WX 444 ; N questiondown ; B 30 -218 376 466 ;
C 96 ; WX 333 ; N grave ; B 19 507 242 678 ;
C 180 ; WX 333 ; N acute ; B 93 507 317 678 ;
C 136 ; WX 333 ; N circumflex ; B 11 507 322 674 ;
C 152 ; WX 333 ; N tilde ; B 1 532 331 638 ;
C 175 ; WX 333 ; N macron ; B 11 547 322 601 ;
C -1 ; WX 333 ; N breve ; B 26 507 307 664 ;
C -1 ; WX 333 ; N dotaccent ; B 118 581 216 681 ;
C 168 ; WX 333 ; N dieresis ; B 18 581 315 681 ;
C -1 ; WX 333 ; N ring ; B 67 512 266 711 ;
C 184 ; WX 333 ; N cedilla ; B 52 -215 261 0 ;
C -1 ; WX 333 ; N hungarumlaut ; B -3 507 377 678 ;
C -1 ; WX 333 ; N ogonek ; B 62 -165 243 0 ;
C -1 ; WX 333 ; N caron ; B 11 507 322 674 ;
C 151 ; WX 1000 ; N emdash ; B 0 201 1000 250 ;
C 198 ; WX 889 ; N AE ; B 0 0 863 662 ;
C 170 ; WX 276 ; N ordfeminine ; B 4 394 270 676 ;
C -1 ; WX 611 ; N Lslash ; B 12 0 598 662 ;
C 216 ; WX 722 ; N Oslash ; B 34 -80 688 734 ;
C 140 ; WX 889 ; N OE ; B 30 -6 885 668 ;
C 186 ; WX 310 ; N ordmasculine ; B 6 394 304 676 ;
C 230 ; WX 667 ; N ae ; B 38 -10 632 460 ;
C -1 ; WX 278 ; N dotlessi ; B 16 0 253 460 ;
C -1 ; WX 278 ; N lslash ; B 19 0 259 683 ;
C 248 ; WX 500 ; N oslash ; B 29 -112 470 551 ;
C 156 ; WX 722 ; N oe ; B 30 -10 690 460 ;
C 223 ; WX 500 ; N germandbls ; B 12 -9 468 683 ;
C 207 ; WX 333 ; N Idieresis ; B 18 0 315 835 ;
C 233 ; WX 444 ; N eacute ; B 25 -10 424 678 ;
C -1 ; WX 444 ; N abreve ; B 37 -10 442 664 ;
C -1 ; WX 500 ; N uhungarumlaut ; B 9 -10 501 678 ;
C -1 ; WX 444 ; N ecaron ; B 25 -10 424 674 ;
C 159 ; WX 722 ; N Ydieresis ; B 22 0 703 835 ;
C 247 ; WX 564 ; N divide ; B 30 -10 534 516 ;
C 221 ; WX 722 ; N Yacute ; B 22 0 703 890 ;
C 194 ; WX 722 ; N Acircumflex ; B 15 0 706 886 ;
C 225 ; WX 444 ; N aacute ; B 37 -10 442 678 ;
C 219 ; WX 722 ; N Ucircumflex ; B 14 -14 705 886 ;
C 253 ; WX 500 ; N yacute ; B 14 -218 475 678 ;
C -1 ; WX 389 ; N scommaaccent ; B 51 -218 348 460 ;
C 234 ; WX 444 ; N ecircumflex ; B 25 -10 424 674 ;
C -1 ; WX 722 ; N Uring ; B 14 -14 705 898 ;
C 220 ; WX 722 ; N Udieresis ; B 14 -14 705 835 ;
C -1 ; WX 444 ; N aogonek ; B 37 -165 469 460 ;
C 218 ; WX 722 ; N Uacute ; B 14 -14 705 890 ;
C -1 ; WX 500 ; N uogonek ; B 9 -155 487 450 ;
C 203 ; WX 611 ; N Edieresis ; B 12 0 597 835 ;
C -1 ; WX 722 ; N Dcroat ; B 16 0 685 662 ;
C -1 ; WX 250 ; N commaaccent ; B 59 -218 184 -50 ;
C 169 ; WX 760 ; N copyright ; B 38 -14 722 676 ;
C -1 ; WX 611 ; N Emacron ; B 12 0 597 813 ;
C -1 ; WX 444 ; N ccaron ; B 25 -10 412 674 ;
C 229 ; WX 444 ; N aring ; B 37 -10 442 711 ;
C -1 ; WX 722 ; N Ncommaaccent ; B 12 -198 707 662 ;
C -1 ; WX 278 ; N lacute ; B 19 0 290 890 ;
C 224 ; WX 444 ; N agrave ; B 37 -10 442 678 ;
C -1 ; WX 611 ; N Tcommaaccent ; B 17 -218 593 662 ;
C -1 ; WX 667 ; N Cacute ; B 28 -14 633 890 ;
C 227 ; WX 444 ; N atilde ; B 37 -10 442 638 ;
C -1 ; WX 611 ; N Edotaccent ; B 12 0 597 835 ;
C 154 ; WX 389 ; N scaron ; B 39 -10 350 674 ;
C -1 ; WX 389 ; N scedilla ; B 51 -215 348 460 ;
C 237 ; WX 278 ; N iacute ; B 16 0 290 678 ;
C -1 ; WX 471 ; N lozenge ; B 13 0 459 724 ;
C -1 ; WX 667 ; N Rcaron ; B 17 0 659 886 ;
C -1 ; WX 722 ; N Gcommaaccent ; B 32 -218 709 676 ;
C 251 ; WX 500 ; N ucircumflex ; B 9 -10 479 674 ;
C 226 ; WX 444 ; N acircumflex ; B 37 -10 442 674 ;
C -1 ; WX 722 ; N Amacron ; B 15 0 706 813 ;
C -1 ; WX 333 ; N rcaron ; B 5 0 335 674 ;
C 231 ; WX 444 ; N ccedilla ; B 25 -215 412 460 ;
C -1 ; WX 611 ; N Zdotaccent ; B 9 0 597 835 ;
C 222 ; WX 556 ; N Thorn ; B 16 0 542 662 ;
C -1 ; WX 722 ; N Omacron ; B 34 -14 688 813 ;
C -1 ; WX 667 ; N Racute ; B 17 0 659 890 ;
C -1 ; WX 556 ; N Sacute ; B 42 -14 491 890 ;
C -1 ; WX 588 ; N dcaron ; B 27 -10 589 695 ;
C -1 ; WX 722 ; N Umacron ; B 14 -14 705 813 ;
C -1 ; WX 500 ; N uring ; B 9 -10 479 711 ;
C 179 ; WX 300 ; N threesuperior ; B 15 262 291 676 ;
C 210 ; WX 722 ; N Ograve ; B 34 -14 688 890 ;
C 192 ; WX 722 ; N Agrave ; B 15 0 706 890 ;
C -1 ; WX 722 ; N Abreve ; B 15 0 706 876 ;
C 215 ; WX 564 ; N multiply ; B 38 8 527 497 ;
C 250 ; WX 500 ; N uacute ; B 9 -10 479 678 ;
C -1 ; WX 611 ; N Tcaron ; B 17 0 593 886 ;
C -1 ; WX 476 ; N partialdiff ; B 17 -38 459 710 ;
C 255 ; WX 500 ; N ydieresis ; B 14 -218 475 623 ;
C -1 ; WX 722 ; N Nacute ; B 12 -11 707 890 ;
C 238 ; WX 278 ; N icircumflex ; B -16 0 295 674 ;
C 202 ; WX 611 ; N Ecircumflex ; B 12 0 597 886 ;
C 228 ; WX 444 ; N adieresis ; B 37 -10 442 623 ;
C 235 ; WX 444 ; N edieresis ; B 25 -10 424 623 ;
C -1 ; WX 444 ; N cacute ; B 25 -10 413 678 ;
C -1 ; WX 500 ; N nacute ; B 16 0 485 678 ;
C -1 ; WX 500 ; N umacron ; B 9 -10 479 601 ;
C -1 ; WX 722 ; N Ncaron ; B 12 -11 707 886 ;
C 205 ; WX 333 ; N Iacute ; B 18 0 317 890 ;
C 177 ; WX 564 ; N plusminus ; B 30 0 534 506 ;
C 166 ; WX 200 ; N brokenbar ; B 67 -143 133 707 ;
C 174 ; WX 760 ; N registered ; B 38 -14 722 676 ;
C -1 ; WX 722 ; N Gbreve ; B 32 -14 709 876 ;
C -1 ; WX 333 ; N Idotaccent ; B 18 0 315 835 ;
C -1 ; WX 600 ; N summation ; B 15 -10 585 706 ;
C 200 ; WX 611 ; N Egrave ; B 12 0 597 890 ;
C -1 ; WX 333 ; N racute ; B 5 0 335 678 ;
C -1 ; WX 500 ; N omacron ; B 29 -10 470 601 ;
C -1 ; WX 611 ; N Zacute ; B 9 0 597 890 ;
C 142 ; WX 611 ; N Zcaron ; B 9 0 597 886 ;
C -1 ; WX 549 ; N greaterequal ; B 26 0 523 666 ;
C 208 ; WX 722 ; N Eth ; B 16 0 685 662 ;
C 199 ; WX 667 ; N Ccedilla ; B 28 -215 633 676 ;
C -1 ; WX 278 ; N lcommaaccent ; B 19 -218 257 683 ;
C -1 ; WX 326 ; N tcaron ; B 13 -10 318 722 ;
C -1 ; WX 444 ; N eogonek ; B 25 -165 424 460 ;
C -1 ; WX 722 ; N Uogonek ; B 14 -165 705 662 ;
C 193 ; WX 722 ; N Aacute ; B 15 0 706 890 ;
C 196 ; WX 722 ; N Adieresis ; B 15 0 706 835 ;
C 232 ; WX 444 ; N egrave ; B 25 -10 424 678 ;
C -1 ; WX 444 ; N zacute ; B 27 0 418 678 ;
C -1 ; WX 278 ; N iogonek ; B 16 -165 265 683 ;
C 211 ; WX 722 ; N Oacute ; B 34 -14 688 890 ;
C 243 ; WX 500 ; N oacute ; B 29 -10 470 678 ;
C -1 ; WX 444 ; N amacron ; B 37 -10 442 601 ;
C -1 ; WX 389 ; N sacute ; B 51 -10 348 678 ;
C 239 ; WX 278 ; N idieresis ; B -9 0 288 623 ;
C 212 ; WX 722 ; N Ocircumflex ; B 34 -14 688 886 ;
C 217 ; WX 722 ; N Ugrave ; B 14 -14 705 890 ;
C -1 ; WX 612 ; N Delta ; B 6 0 608 688 ;
C 254 ; WX 500 ; N thorn ; B 5 -217 470 683 ;
C 178 ; WX 300 ; N twosuperior ; B 1 270 296 676 ;
C 214 ; WX 722 ; N Odieresis ; B 34 -14 688 835 ;
C 181 ; WX 500 ; N mu ; B 36 -218 512 450 ;
C 236 ; WX 278 ; N igrave ; B -8 0 253 678 ;
C -1 ; WX 500 ; N ohungarumlaut ; B 29 -10 491 678 ;
C -1 ; WX 611 ; N Eogonek ; B 12 -165 597 662 ;
C -1 ; WX 500 ; N dcroat ; B 27 -10 500 683 ;
C 190 ; WX 750 ; N threequarters ; B 15 -14 718 676 ;
C -1 ; WX 556 ; N Scedilla ; B 42 -215 491 676 ;
C -1 ; WX 344 ; N lcaron ; B 19 0 347 695 ;
C -1 ; WX 722 ; N Kcommaaccent ; B 34 -198 723 662 ;
C -1 ; WX 611 ; N Lacute ; B 12 0 598 890 ;
C 153 ; WX 980 ; N trademark ; B 30 256 957 662 ;
C -1 ; WX 444 ; N edotaccent ; B 25 -10 424 623 ;
C 204 ; WX 333 ; N Igrave ; B 18 0 315 890 ;
C -1 ; WX 333 ; N Imacron ; B 11 0 322 813 ;
C -1 ; WX 611 ; N Lcaron ; B 12 0 598 676 ;
C 189 ; WX 750 ; N onehalf ; B 31 -14 746 676 ;
C -1 ; WX 549 ; N lessequal ; B 26 0 523 666 ;
C 244 ; WX 500 ; N ocircumflex ; B 29 -10 470 674 ;
C 241 ; WX 500 ; N ntilde ; B 16 0 485 638 ;
C -1 ; WX 722 ; N Uhungarumlaut ; B 14 -14 705 890 ;
C 201 ; WX 611 ; N Eacute ; B 12 0 597 890 ;
C -1 ; WX 444 ; N emacron ; B 25 -10 424 601 ;
C -1 ; WX 500 ; N gbreve ; B 28 -218 470 664 ;
C 188 ; WX 750 ; N onequarter ; B 37 -14 718 676 ;
C 138 ; WX 556 ; N Scaron ; B 42 -14 491 886 ;
C -1 ; WX 556 ; N Scommaaccent ; B 42 -218 491 676 ;
C -1 ; WX 722 ; N Ohungarumlaut ; B 34 -14 688 890 ;
C 176 ; WX 400 ; N degree ; B 57 390 343 676 ;
C 242 ; WX 500 ; N ograve ; B 29 -10 470 678 ;
C -1 ; WX 667 ; N Ccaron ; B 28 -14 633 886 ;
C 249 ; WX 500 ; N ugrave ; B 9 -10 479 678 ;
C -1 ; WX 453 ; N radical ; B 2 -60 452 768 ;
C -1 ; WX 722 ; N Dcaron ; B 16 0 685 886 ;
C -1 ; WX 333 ; N rcommaaccent ; B 5 -218 335 460 ;
C 209 ; WX 722 ; N Ntilde ; B 12 -11 707 850 ;
C 245 ; WX 500 ; N otilde ; B 29 -10 470 638 ;
C -1 ; WX 667 ; N Rcommaaccent ; B 17 -198 659 662 ;
C -1 ; WX 611 ; N Lcommaaccent ; B 12 -218 598 662 ;
C 195 ; WX 722 ; N Atilde ; B 15 0 706 850 ;
C -1 ; WX 722 ; N Aogonek ; B 15 -165 738 674 ;
C 197 ; WX 722 ; N Aring ; B 15 0 706 898 ;
C 213 ; WX 722 ; N Otilde ; B 34 -14 688 850 ;
C -1 ; WX 444 ; N zdotaccent ; B 27 0 418 623 ;
C -1 ; WX 611 ; N Ecaron ; B 12 0 597 886 ;
C -1 ; WX 333 ; N Iogonek ; B 18 -165 315 662 ;
C -1 ; WX 500 ; N kcommaaccent ; B 7 -218 505 683 ;
C -1 ; WX 564 ; N minus ; B 30 220 534 286 ;
C 206 ; WX 333 ; N Icircumflex ; B 11 0 322 886 ;
C -1 ; WX 500 ; N ncaron ; B 16 0 485 674 ;
C -1 ; WX 278 ; N tcommaaccent ; B 13 -218 279 579 ;
C 172 ; WX 564 ; N logicalnot ; B 30 108 534 386 ;
C 246 ; WX 500 ; N odieresis ; B 29 -10 470 623 ;
C 252 ; WX 500 ; N udieresis ; B 9 -10 479 623 ;
C -1 ; WX 549 ; N notequal ; B 12 -31 537 547 ;
C -1 ; WX 500 ; N gcommaaccent ; B 28 -218 470 749 ;
C 240 ; WX 500 ; N eth ; B 29 -10 471 686 ;
C 158 ; WX 444 ; N zcaron ; B 27 0 418 674 ;
C -1 ; WX 500 ; N ncommaaccent ; B 16 -218 485 460 ;
C 185 ; WX 300 ; N onesuperior ; B 57 270 248 676 ;
C -1 ; WX 278 ; N imacron ; B 6 0 271 601 ;
C 128 ; WX 500 ; N Euro ; B 0 0 0 0 ;
EndCharMetrics
StartKernData
StartKernPairs 2073
KPX A C -40
KPX A Cacute -40
KPX A Ccaron -40
KPX A Ccedilla -40
KPX A G -40
KPX A Gbreve -40
KPX A Gcommaaccent -40
KPX A O -55
KPX A Oacute -55
KPX A Ocircumflex -55
KPX A Odieresis -55
KPX A Ograve -55
KPX A Ohungarumlaut -55
KPX A Omacron -55
KPX A Oslash -55
KPX A Otilde -55
KPX A Q -55
KPX A T -111
KPX A Tcaron -111
KPX A Tcommaaccent -111
KPX A U -55
KPX A Uacute -55
KPX A Ucircumflex -55
KPX A Udieresis -55
KPX A Ugrave -55
KPX A Uhungarumlaut -55
KPX A Umacron -55
KPX A Uogonek -55
KPX A Uring -55
KPX A V -135
KPX A W -90
KPX A Y -105
KPX A Yacute -105
KPX A Ydieresis -105
KPX A quoteright -111
KPX A v -74
KPX A w -92
KPX A y -92
KPX A yacute -92
KPX A ydieresis -92
KPX Aacute C -40
KPX Aacute Cacute -40
KPX Aacute Ccaron -40
KPX Aacute Ccedilla -40
KPX Aacute G -40
KPX Aacute Gbreve -40
KPX Aacute Gcommaaccent -40
KPX Aacute O -55
KPX Aacute Oacute -55
KPX Aacute Ocircumflex -55
KPX Aacute Odieresis -55
KPX Aacute Ograve -55
KPX Aacute Ohungarumlaut -55
KPX Aacute Omacron -55
KPX Aacute Oslash -55
KPX Aacute Otilde -55
KPX Aacute Q -55
KPX Aacute T -111
KPX Aacute Tcaron -111
KPX Aacute Tcommaaccent -111
KPX Aacute U -55
KPX Aacute Uacute -55
KPX Aacute Ucircumflex -55
KPX Aacute Udieresis -55
KPX Aacute Ugrave -55
KPX Aacute Uhungarumlaut -55
KPX Aacute Umacron -55
KPX Aacute Uogonek -55
KPX Aacute Uring -55
KPX Aacute V -135
KPX Aacute W -90
KPX Aacute Y -105
KPX Aacute Yacute -105
KPX Aacute Ydieresis -105
KPX Aacute quoteright -111
KPX Aacute v -74
KPX Aacute w -92
KPX Aacute y -92
KPX Aacute yacute -92
KPX Aacute ydieresis -92
KPX Abreve C -40
KPX Abreve Cacute -40
KPX Abreve Ccaron -40
KPX Abreve Ccedilla -40
KPX Abreve G -40
KPX Abreve Gbreve -40
KPX Abreve Gcommaaccent -40
KPX Abreve O -55
KPX Abreve Oacute -55
KPX Abreve Ocircumflex -55
KPX Abreve Odieresis -55
KPX Abreve Ograve -55
KPX Abreve Ohungarumlaut -55
KPX Abreve Omacron -55
KPX Abreve Oslash -55
KPX Abreve Otilde -55
KPX Abreve Q -55
KPX Abreve T -111
KPX Abreve Tcaron -111
KPX Abreve Tcommaaccent -111
KPX Abreve U -55
KPX Abreve Uacute -55
KPX Abreve Ucircumflex -55
KPX Abreve Udieresis -55
KPX Abreve Ugrave -55
KPX Abreve Uhungarumlaut -55
KPX Abreve Umacron -55
KPX Abreve Uogonek -55
KPX Abreve Uring -55
KPX Abreve V -135
KPX Abreve W -90
KPX Abreve Y -105
KPX Abreve Yacute -105
KPX Abreve Ydieresis -105
KPX Abreve quoteright -111
KPX Abreve v -74
KPX Abreve w -92
KPX Abreve y -92
KPX Abreve yacute -92
KPX Abreve ydieresis -92
KPX Acircumflex C -40
KPX Acircumflex Cacute -40
KPX Acircumflex Ccaron -40
KPX Acircumflex Ccedilla -40
KPX Acircumflex G -40
KPX Acircumflex Gbreve -40
KPX Acircumflex Gcommaaccent -40
KPX Acircumflex O -55
KPX Acircumflex Oacute -55
KPX Acircumflex Ocircumflex -55
KPX Acircumflex Odieresis -55
KPX Acircumflex Ograve -55
KPX Acircumflex Ohungarumlaut -55
KPX Acircumflex Omacron -55
KPX Acircumflex Oslash -55
KPX Acircumflex Otilde -55
KPX Acircumflex Q -55
KPX Acircumflex T -111
KPX Acircumflex Tcaron -111
KPX Acircumflex Tcommaaccent -111
KPX Acircumflex U -55
KPX Acircumflex Uacute -55
KPX Acircumflex Ucircumflex -55
KPX Acircumflex Udieresis -55
KPX Acircumflex Ugrave -55
KPX Acircumflex Uhungarumlaut -55
KPX Acircumflex Umacron -55
KPX Acircumflex Uogonek -55
KPX Acircumflex Uring -55
KPX Acircumflex V -135
KPX Acircumflex W -90
KPX Acircumflex Y -105
KPX Acircumflex Yacute -105
KPX Acircumflex Ydieresis -105
KPX Acircumflex quoteright -111
KPX Acircumflex v -74
KPX Acircumflex w -92
KPX Acircumflex y -92
KPX Acircumflex yacute -92
KPX Acircumflex ydieresis -92
KPX Adieresis C -40
KPX Adieresis Cacute -40
KPX Adieresis Ccaron -40
KPX Adieresis Ccedilla -40
KPX Adieresis G -40
KPX Adieresis Gbreve -40
KPX Adieresis Gcommaaccent -40
KPX Adieresis O -55
KPX Adieresis Oacute -55
KPX Adieresis Ocircumflex -55
KPX Adieresis Odieresis -55
KPX Adieresis Ograve -55
KPX Adieresis Ohungarumlaut -55
KPX Adieresis Omacron -55
KPX Adieresis Oslash -55
KPX Adieresis Otilde -55
KPX Adieresis Q -55
KPX Adieresis T -111
KPX Adieresis Tcaron -111
KPX Adieresis Tcommaaccent -111
KPX Adieresis U -55
KPX Adieresis Uacute -55
KPX Adieresis Ucircumflex -55
KPX Adieresis Udieresis -55
KPX Adieresis Ugrave -55
KPX Adieresis Uhungarumlaut -55
KPX Adieresis Umacron -55
KPX Adieresis Uogonek -55
KPX Adieresis Uring -55
KPX Adieresis V -135
KPX Adieresis W -90
KPX Adieresis Y -105
KPX Adieresis Yacute -105
KPX Adieresis Ydieresis -105
KPX Adieresis quoteright -111
KPX Adieresis v -74
KPX Adieresis w -92
KPX Adieresis y -92
KPX Adieresis yacute -92
KPX Adieresis ydieresis -92
KPX Agrave C -40
KPX Agrave Cacute -40
KPX Agrave Ccaron -40
KPX Agrave Ccedilla -40
KPX Agrave G -40
KPX Agrave Gbreve -40
KPX Agrave Gcommaaccent -40
KPX Agrave O -55
KPX Agrave Oacute -55
KPX Agrave Ocircumflex -55
KPX Agrave Odieresis -55
KPX Agrave Ograve -55
KPX Agrave Ohungarumlaut -55
KPX Agrave Omacron -55
KPX Agrave Oslash -55
KPX Agrave Otilde -55
KPX Agrave Q -55
KPX Agrave T -111
KPX Agrave Tcaron -111
KPX Agrave Tcommaaccent -111
KPX Agrave U -55
KPX Agrave Uacute -55
KPX Agrave Ucircumflex -55
KPX Agrave Udieresis -55
KPX Agrave Ugrave -55
KPX Agrave Uhungarumlaut -55
KPX Agrave Umacron -55
KPX Agrave Uogonek -55
KPX Agrave Uring -55
KPX Agrave V -135
KPX Agrave W -90
KPX Agrave Y -105
KPX Agrave Yacute -105
KPX Agrave Ydieresis -105
KPX Agrave quoteright -111
KPX Agrave v -74
KPX Agrave w -92
KPX Agrave y -92
KPX Agrave yacute -92
KPX Agrave ydieresis -92
KPX Amacron C -40
KPX Amacron Cacute -40
KPX Amacron Ccaron -40
KPX Amacron Ccedilla -40
KPX Amacron G -40
KPX Amacron Gbreve -40
KPX Amacron Gcommaaccent -40
KPX Amacron O -55
KPX Amacron Oacute -55
KPX Amacron Ocircumflex -55
KPX Amacron Odieresis -55
KPX Amacron Ograve -55
KPX Amacron Ohungarumlaut -55
KPX Amacron Omacron -55
KPX Amacron Oslash -55
KPX Amacron Otilde -55
KPX Amacron Q -55
KPX Amacron T -111
KPX Amacron Tcaron -111
KPX Amacron Tcommaaccent -111
KPX Amacron U -55
KPX Amacron Uacute -55
KPX Amacron Ucircumflex -55
KPX Amacron Udieresis -55
KPX Amacron Ugrave -55
KPX Amacron Uhungarumlaut -55
KPX Amacron Umacron -55
KPX Amacron Uogonek -55
KPX Amacron Uring -55
KPX Amacron V -135
KPX Amacron W -90
KPX Amacron Y -105
KPX Amacron Yacute -105
KPX Amacron Ydieresis -105
KPX Amacron quoteright -111
KPX Amacron v -74
KPX Amacron w -92
KPX Amacron y -92
KPX Amacron yacute -92
KPX Amacron ydieresis -92
KPX Aogonek C -40
KPX Aogonek Cacute -40
KPX Aogonek Ccaron -40
KPX Aogonek Ccedilla -40
KPX Aogonek G -40
KPX Aogonek Gbreve -40
KPX Aogonek Gcommaaccent -40
KPX Aogonek O -55
KPX Aogonek Oacute -55
KPX Aogonek Ocircumflex -55
KPX Aogonek Odieresis -55
KPX Aogonek Ograve -55
KPX Aogonek Ohungarumlaut -55
KPX Aogonek Omacron -55
KPX Aogonek Oslash -55
KPX Aogonek Otilde -55
KPX Aogonek Q -55
KPX Aogonek T -111
KPX Aogonek Tcaron -111
KPX Aogonek Tcommaaccent -111
KPX Aogonek U -55
KPX Aogonek Uacute -55
KPX Aogonek Ucircumflex -55
KPX Aogonek Udieresis -55
KPX Aogonek Ugrave -55
KPX Aogonek Uhungarumlaut -55
KPX Aogonek Umacron -55
KPX Aogonek Uogonek -55
KPX Aogonek Uring -55
KPX Aogonek V -135
KPX Aogonek W -90
KPX Aogonek Y -105
KPX Aogonek Yacute -105
KPX Aogonek Ydieresis -105
KPX Aogonek quoteright -111
KPX Aogonek v -74
KPX Aogonek w -52
KPX Aogonek y -52
KPX Aogonek yacute -52
KPX Aogonek ydieresis -52
KPX Aring C -40
KPX Aring Cacute -40
KPX Aring Ccaron -40
KPX Aring Ccedilla -40
KPX Aring G -40
KPX Aring Gbreve -40
KPX Aring Gcommaaccent -40
KPX Aring O -55
KPX Aring Oacute -55
KPX Aring Ocircumflex -55
KPX Aring Odieresis -55
KPX Aring Ograve -55
KPX Aring Ohungarumlaut -55
KPX Aring Omacron -55
KPX Aring Oslash -55
KPX Aring Otilde -55
KPX Aring Q -55
KPX Aring T -111
KPX Aring Tcaron -111
KPX Aring Tcommaaccent -111
KPX Aring U -55
KPX Aring Uacute -55
KPX Aring Ucircumflex -55
KPX Aring Udieresis -55
KPX Aring Ugrave -55
KPX Aring Uhungarumlaut -55
KPX Aring Umacron -55
KPX Aring Uogonek -55
KPX Aring Uring -55
KPX Aring V -135
KPX Aring W -90
KPX Aring Y -105
KPX Aring Yacute -105
KPX Aring Ydieresis -105
KPX Aring quoteright -111
KPX Aring v -74
KPX Aring w -92
KPX Aring y -92
KPX Aring yacute -92
KPX Aring ydieresis -92
KPX Atilde C -40
KPX Atilde Cacute -40
KPX Atilde Ccaron -40
KPX Atilde Ccedilla -40
KPX Atilde G -40
KPX Atilde Gbreve -40
KPX Atilde Gcommaaccent -40
KPX Atilde O -55
KPX Atilde Oacute -55
KPX Atilde Ocircumflex -55
KPX Atilde Odieresis -55
KPX Atilde Ograve -55
KPX Atilde Ohungarumlaut -55
KPX Atilde Omacron -55
KPX Atilde Oslash -55
KPX Atilde Otilde -55
KPX Atilde Q -55
KPX Atilde T -111
KPX Atilde Tcaron -111
KPX Atilde Tcommaaccent -111
KPX Atilde U -55
KPX Atilde Uacute -55
KPX Atilde Ucircumflex -55
KPX Atilde Udieresis -55
KPX Atilde Ugrave -55
KPX Atilde Uhungarumlaut -55
KPX Atilde Umacron -55
KPX Atilde Uogonek -55
KPX Atilde Uring -55
KPX Atilde V -135
KPX Atilde W -90
KPX Atilde Y -105
KPX Atilde Yacute -105
KPX Atilde Ydieresis -105
KPX Atilde quoteright -111
KPX Atilde v -74
KPX Atilde w -92
KPX Atilde y -92
KPX Atilde yacute -92
KPX Atilde ydieresis -92
KPX B A -35
KPX B Aacute -35
KPX B Abreve -35
KPX B Acircumflex -35
KPX B Adieresis -35
KPX B Agrave -35
KPX B Amacron -35
KPX B Aogonek -35
KPX B Aring -35
KPX B Atilde -35
KPX B U -10
KPX B Uacute -10
KPX B Ucircumflex -10
KPX B Udieresis -10
KPX B Ugrave -10
KPX B Uhungarumlaut -10
KPX B Umacron -10
KPX B Uogonek -10
KPX B Uring -10
KPX D A -40
KPX D Aacute -40
KPX D Abreve -40
KPX D Acircumflex -40
KPX D Adieresis -40
KPX D Agrave -40
KPX D Amacron -40
KPX D Aogonek -40
KPX D Aring -40
KPX D Atilde -40
KPX D V -40
KPX D W -30
KPX D Y -55
KPX D Yacute -55
KPX D Ydieresis -55
KPX Dcaron A -40
KPX Dcaron Aacute -40
KPX Dcaron Abreve -40
KPX Dcaron Acircumflex -40
KPX Dcaron Adieresis -40
KPX Dcaron Agrave -40
KPX Dcaron Amacron -40
KPX Dcaron Aogonek -40
KPX Dcaron Aring -40
KPX Dcaron Atilde -40
KPX Dcaron V -40
KPX Dcaron W -30
KPX Dcaron Y -55
KPX Dcaron Yacute -55
KPX Dcaron Ydieresis -55
KPX Dcroat A -40
KPX Dcroat Aacute -40
KPX Dcroat Abreve -40
KPX Dcroat Acircumflex -40
KPX Dcroat Adieresis -40
KPX Dcroat Agrave -40
KPX Dcroat Amacron -40
KPX Dcroat Aogonek -40
KPX Dcroat Aring -40
KPX Dcroat Atilde -40
KPX Dcroat V -40
KPX Dcroat W -30
KPX Dcroat Y -55
KPX Dcroat Yacute -55
KPX Dcroat Ydieresis -55
KPX F A -74
KPX F Aacute -74
KPX F Abreve -74
KPX F Acircumflex -74
KPX F Adieresis -74
KPX F Agrave -74
KPX F Amacron -74
KPX F Aogonek -74
KPX F Aring -74
KPX F Atilde -74
KPX F a -15
KPX F aacute -15
KPX F abreve -15
KPX F acircumflex -15
KPX F adieresis -15
KPX F agrave -15
KPX F amacron -15
KPX F aogonek -15
KPX F aring -15
KPX F atilde -15
KPX F comma -80
KPX F o -15
KPX F oacute -15
KPX F ocircumflex -15
KPX F odieresis -15
KPX F ograve -15
KPX F ohungarumlaut -15
KPX F omacron -15
KPX F oslash -15
KPX F otilde -15
KPX F period -80
KPX J A -60
KPX J Aacute -60
KPX J Abreve -60
KPX J Acircumflex -60
KPX J Adieresis -60
KPX J Agrave -60
KPX J Amacron -60
KPX J Aogonek -60
KPX J Aring -60
KPX J Atilde -60
KPX K O -30
KPX K Oacute -30
KPX K Ocircumflex -30
KPX K Odieresis -30
KPX K Ograve -30
KPX K Ohungarumlaut -30
KPX K Omacron -30
KPX K Oslash -30
KPX K Otilde -30
KPX K e -25
KPX K eacute -25
KPX K ecaron -25
KPX K ecircumflex -25
KPX K edieresis -25
KPX K edotaccent -25
KPX K egrave -25
KPX K emacron -25
KPX K eogonek -25
KPX K o -35
KPX K oacute -35
KPX K ocircumflex -35
KPX K odieresis -35
KPX K ograve -35
KPX K ohungarumlaut -35
KPX K omacron -35
KPX K oslash -35
KPX K otilde -35
KPX K u -15
KPX K uacute -15
KPX K ucircumflex -15
KPX K udieresis -15
KPX K ugrave -15
KPX K uhungarumlaut -15
KPX K umacron -15
KPX K uogonek -15
KPX K uring -15
KPX K y -25
KPX K yacute -25
KPX K ydieresis -25
KPX Kcommaaccent O -30
KPX Kcommaaccent Oacute -30
KPX Kcommaaccent Ocircumflex -30
KPX Kcommaaccent Odieresis -30
KPX Kcommaaccent Ograve -30
KPX Kcommaaccent Ohungarumlaut -30
KPX Kcommaaccent Omacron -30
KPX Kcommaaccent Oslash -30
KPX Kcommaaccent Otilde -30
KPX Kcommaaccent e -25
KPX Kcommaaccent eacute -25
KPX Kcommaaccent ecaron -25
KPX Kcommaaccent ecircumflex -25
KPX Kcommaaccent edieresis -25
KPX Kcommaaccent edotaccent -25
KPX Kcommaaccent egrave -25
KPX Kcommaaccent emacron -25
KPX Kcommaaccent eogonek -25
KPX Kcommaaccent o -35
KPX Kcommaaccent oacute -35
KPX Kcommaaccent ocircumflex -35
KPX Kcommaaccent odieresis -35
KPX Kcommaaccent ograve -35
KPX Kcommaaccent ohungarumlaut -35
KPX Kcommaaccent omacron -35
KPX Kcommaaccent oslash -35
KPX Kcommaaccent otilde -35
KPX Kcommaaccent u -15
KPX Kcommaaccent uacute -15
KPX Kcommaaccent ucircumflex -15
KPX Kcommaaccent udieresis -15
KPX Kcommaaccent ugrave -15
KPX Kcommaaccent uhungarumlaut -15
KPX Kcommaaccent umacron -15
KPX Kcommaaccent uogonek -15
KPX Kcommaaccent uring -15
KPX Kcommaaccent y -25
KPX Kcommaaccent yacute -25
KPX Kcommaaccent ydieresis -25
KPX L T -92
KPX L Tcaron -92
KPX L Tcommaaccent -92
KPX L V -100
KPX L W -74
KPX L Y -100
KPX L Yacute -100
KPX L Ydieresis -100
KPX L quoteright -92
KPX L y -55
KPX L yacute -55
KPX L ydieresis -55
KPX Lacute T -92
KPX Lacute Tcaron -92
KPX Lacute Tcommaaccent -92
KPX Lacute V -100
KPX Lacute W -74
KPX Lacute Y -100
KPX Lacute Yacute -100
KPX Lacute Ydieresis -100
KPX Lacute quoteright -92
KPX Lacute y -55
KPX Lacute yacute -55
KPX Lacute ydieresis -55
KPX Lcaron quoteright -92
KPX Lcaron y -55
KPX Lcaron yacute -55
KPX Lcaron ydieresis -55
KPX Lcommaaccent T -92
KPX Lcommaaccent Tcaron -92
KPX Lcommaaccent Tcommaaccent -92
KPX Lcommaaccent V -100
KPX Lcommaaccent W -74
KPX Lcommaaccent Y -100
KPX Lcommaaccent Yacute -100
KPX Lcommaaccent Ydieresis -100
KPX Lcommaaccent quoteright -92
KPX Lcommaaccent y -55
KPX Lcommaaccent yacute -55
KPX Lcommaaccent ydieresis -55
KPX Lslash T -92
KPX Lslash Tcaron -92
KPX Lslash Tcommaaccent -92
KPX Lslash V -100
KPX Lslash W -74
KPX Lslash Y -100
KPX Lslash Yacute -100
KPX Lslash Ydieresis -100
KPX Lslash quoteright -92
KPX Lslash y -55
KPX Lslash yacute -55
KPX Lslash ydieresis -55
KPX N A -35
KPX N Aacute -35
KPX N Abreve -35
KPX N Acircumflex -35
KPX N Adieresis -35
KPX N Agrave -35
KPX N Amacron -35
KPX N Aogonek -35
KPX N Aring -35
KPX N Atilde -35
KPX Nacute A -35
KPX Nacute Aacute -35
KPX Nacute Abreve -35
KPX Nacute Acircumflex -35
KPX Nacute Adieresis -35
KPX Nacute Agrave -35
KPX Nacute Amacron -35
KPX Nacute Aogonek -35
KPX Nacute Aring -35
KPX Nacute Atilde -35
KPX Ncaron A -35
KPX Ncaron Aacute -35
KPX Ncaron Abreve -35
KPX Ncaron Acircumflex -35
KPX Ncaron Adieresis -35
KPX Ncaron Agrave -35
KPX Ncaron Amacron -35
KPX Ncaron Aogonek -35
KPX Ncaron Aring -35
KPX Ncaron Atilde -35
KPX Ncommaaccent A -35
KPX Ncommaaccent Aacute -35
KPX Ncommaaccent Abreve -35
KPX Ncommaaccent Acircumflex -35
KPX Ncommaaccent Adieresis -35
KPX Ncommaaccent Agrave -35
KPX Ncommaaccent Amacron -35
KPX Ncommaaccent Aogonek -35
KPX Ncommaaccent Aring -35
KPX Ncommaaccent Atilde -35
KPX Ntilde A -35
KPX Ntilde Aacute -35
KPX Ntilde Abreve -35
KPX Ntilde Acircumflex -35
KPX Ntilde Adieresis -35
KPX Ntilde Agrave -35
KPX Ntilde Amacron -35
KPX Ntilde Aogonek -35
KPX Ntilde Aring -35
KPX Ntilde Atilde -35
KPX O A -35
KPX O Aacute -35
KPX O Abreve -35
KPX O Acircumflex -35
KPX O Adieresis -35
KPX O Agrave -35
KPX O Amacron -35
KPX O Aogonek -35
KPX O Aring -35
KPX O Atilde -35
KPX O T -40
KPX O Tcaron -40
KPX O Tcommaaccent -40
KPX O V -50
KPX O W -35
KPX O X -40
KPX O Y -50
KPX O Yacute -50
KPX O Ydieresis -50
KPX Oacute A -35
KPX Oacute Aacute -35
KPX Oacute Abreve -35
KPX Oacute Acircumflex -35
KPX Oacute Adieresis -35
KPX Oacute Agrave -35
KPX Oacute Amacron -35
KPX Oacute Aogonek -35
KPX Oacute Aring -35
KPX Oacute Atilde -35
KPX Oacute T -40
KPX Oacute Tcaron -40
KPX Oacute Tcommaaccent -40
KPX Oacute V -50
KPX Oacute W -35
KPX Oacute X -40
KPX Oacute Y -50
KPX Oacute Yacute -50
KPX Oacute Ydieresis -50
KPX Ocircumflex A -35
KPX Ocircumflex Aacute -35
KPX Ocircumflex Abreve -35
KPX Ocircumflex Acircumflex -35
KPX Ocircumflex Adieresis -35
KPX Ocircumflex Agrave -35
KPX Ocircumflex Amacron -35
KPX Ocircumflex Aogonek -35
KPX Ocircumflex Aring -35
KPX Ocircumflex Atilde -35
KPX Ocircumflex T -40
KPX Ocircumflex Tcaron -40
KPX Ocircumflex Tcommaaccent -40
KPX Ocircumflex V -50
KPX Ocircumflex W -35
KPX Ocircumflex X -40
KPX Ocircumflex Y -50
KPX Ocircumflex Yacute -50
KPX Ocircumflex Ydieresis -50
KPX Odieresis A -35
KPX Odieresis Aacute -35
KPX Odieresis Abreve -35
KPX Odieresis Acircumflex -35
KPX Odieresis Adieresis -35
KPX Odieresis Agrave -35
KPX Odieresis Amacron -35
KPX Odieresis Aogonek -35
KPX Odieresis Aring -35
KPX Odieresis Atilde -35
KPX Odieresis T -40
KPX Odieresis Tcaron -40
KPX Odieresis Tcommaaccent -40
KPX Odieresis V -50
KPX Odieresis W -35
KPX Odieresis X -40
KPX Odieresis Y -50
KPX Odieresis Yacute -50
KPX Odieresis Ydieresis -50
KPX Ograve A -35
KPX Ograve Aacute -35
KPX Ograve Abreve -35
KPX Ograve Acircumflex -35
KPX Ograve Adieresis -35
KPX Ograve Agrave -35
KPX Ograve Amacron -35
KPX Ograve Aogonek -35
KPX Ograve Aring -35
KPX Ograve Atilde -35
KPX Ograve T -40
KPX Ograve Tcaron -40
KPX Ograve Tcommaaccent -40
KPX Ograve V -50
KPX Ograve W -35
KPX Ograve X -40
KPX Ograve Y -50
KPX Ograve Yacute -50
KPX Ograve Ydieresis -50
KPX Ohungarumlaut A -35
KPX Ohungarumlaut Aacute -35
KPX Ohungarumlaut Abreve -35
KPX Ohungarumlaut Acircumflex -35
KPX Ohungarumlaut Adieresis -35
KPX Ohungarumlaut Agrave -35
KPX Ohungarumlaut Amacron -35
KPX Ohungarumlaut Aogonek -35
KPX Ohungarumlaut Aring -35
KPX Ohungarumlaut Atilde -35
KPX Ohungarumlaut T -40
KPX Ohungarumlaut Tcaron -40
KPX Ohungarumlaut Tcommaaccent -40
KPX Ohungarumlaut V -50
KPX Ohungarumlaut W -35
KPX Ohungarumlaut X -40
KPX Ohungarumlaut Y -50
KPX Ohungarumlaut Yacute -50
KPX Ohungarumlaut Ydieresis -50
KPX Omacron A -35
KPX Omacron Aacute -35
KPX Omacron Abreve -35
KPX Omacron Acircumflex -35
KPX Omacron Adieresis -35
KPX Omacron Agrave -35
KPX Omacron Amacron -35
KPX Omacron Aogonek -35
KPX Omacron Aring -35
KPX Omacron Atilde -35
KPX Omacron T -40
KPX Omacron Tcaron -40
KPX Omacron Tcommaaccent -40
KPX Omacron V -50
KPX Omacron W -35
KPX Omacron X -40
KPX Omacron Y -50
KPX Omacron Yacute -50
KPX Omacron Ydieresis -50
KPX Oslash A -35
KPX Oslash Aacute -35
KPX Oslash Abreve -35
KPX Oslash Acircumflex -35
KPX Oslash Adieresis -35
KPX Oslash Agrave -35
KPX Oslash Amacron -35
KPX Oslash Aogonek -35
KPX Oslash Aring -35
KPX Oslash Atilde -35
KPX Oslash T -40
KPX Oslash Tcaron -40
KPX Oslash Tcommaaccent -40
KPX Oslash V -50
KPX Oslash W -35
KPX Oslash X -40
KPX Oslash Y -50
KPX Oslash Yacute -50
KPX Oslash Ydieresis -50
KPX Otilde A -35
KPX Otilde Aacute -35
KPX Otilde Abreve -35
KPX Otilde Acircumflex -35
KPX Otilde Adieresis -35
KPX Otilde Agrave -35
KPX Otilde Amacron -35
KPX Otilde Aogonek -35
KPX Otilde Aring -35
KPX Otilde Atilde -35
KPX Otilde T -40
KPX Otilde Tcaron -40
KPX Otilde Tcommaaccent -40
KPX Otilde V -50
KPX Otilde W -35
KPX Otilde X -40
KPX Otilde Y -50
KPX Otilde Yacute -50
KPX Otilde Ydieresis -50
KPX P A -92
KPX P Aacute -92
KPX P Abreve -92
KPX P Acircumflex -92
KPX P Adieresis -92
KPX P Agrave -92
KPX P Amacron -92
KPX P Aogonek -92
KPX P Aring -92
KPX P Atilde -92
KPX P a -15
KPX P aacute -15
KPX P abreve -15
KPX P acircumflex -15
KPX P adieresis -15
KPX P agrave -15
KPX P amacron -15
KPX P aogonek -15
KPX P aring -15
KPX P atilde -15
KPX P comma -111
KPX P period -111
KPX Q U -10
KPX Q Uacute -10
KPX Q Ucircumflex -10
KPX Q Udieresis -10
KPX Q Ugrave -10
KPX Q Uhungarumlaut -10
KPX Q Umacron -10
KPX Q Uogonek -10
KPX Q Uring -10
KPX R O -40
KPX R Oacute -40
KPX R Ocircumflex -40
KPX R Odieresis -40
KPX R Ograve -40
KPX R Ohungarumlaut -40
KPX R Omacron -40
KPX R Oslash -40
KPX R Otilde -40
KPX R T -60
KPX R Tcaron -60
KPX R Tcommaaccent -60
KPX R U -40
KPX R Uacute -40
KPX R Ucircumflex -40
KPX R Udieresis -40
KPX R Ugrave -40
KPX R Uhungarumlaut -40
KPX R Umacron -40
KPX R Uogonek -40
KPX R Uring -40
KPX R V -80
KPX R W -55
KPX R Y -65
KPX R Yacute -65
KPX R Ydieresis -65
KPX Racute O -40
KPX Racute Oacute -40
KPX Racute Ocircumflex -40
KPX Racute Odieresis -40
KPX Racute Ograve -40
KPX Racute Ohungarumlaut -40
KPX Racute Omacron -40
KPX Racute Oslash -40
KPX Racute Otilde -40
KPX Racute T -60
KPX Racute Tcaron -60
KPX Racute Tcommaaccent -60
KPX Racute U -40
KPX Racute Uacute -40
KPX Racute Ucircumflex -40
KPX Racute Udieresis -40
KPX Racute Ugrave -40
KPX Racute Uhungarumlaut -40
KPX Racute Umacron -40
KPX Racute Uogonek -40
KPX Racute Uring -40
KPX Racute V -80
KPX Racute W -55
KPX Racute Y -65
KPX Racute Yacute -65
KPX Racute Ydieresis -65
KPX Rcaron O -40
KPX Rcaron Oacute -40
KPX Rcaron Ocircumflex -40
KPX Rcaron Odieresis -40
KPX Rcaron Ograve -40
KPX Rcaron Ohungarumlaut -40
KPX Rcaron Omacron -40
KPX Rcaron Oslash -40
KPX Rcaron Otilde -40
KPX Rcaron T -60
KPX Rcaron Tcaron -60
KPX Rcaron Tcommaaccent -60
KPX Rcaron U -40
KPX Rcaron Uacute -40
KPX Rcaron Ucircumflex -40
KPX Rcaron Udieresis -40
KPX Rcaron Ugrave -40
KPX Rcaron Uhungarumlaut -40
KPX Rcaron Umacron -40
KPX Rcaron Uogonek -40
KPX Rcaron Uring -40
KPX Rcaron V -80
KPX Rcaron W -55
KPX Rcaron Y -65
KPX Rcaron Yacute -65
KPX Rcaron Ydieresis -65
KPX Rcommaaccent O -40
KPX Rcommaaccent Oacute -40
KPX Rcommaaccent Ocircumflex -40
KPX Rcommaaccent Odieresis -40
KPX Rcommaaccent Ograve -40
KPX Rcommaaccent Ohungarumlaut -40
KPX Rcommaaccent Omacron -40
KPX Rcommaaccent Oslash -40
KPX Rcommaaccent Otilde -40
KPX Rcommaaccent T -60
KPX Rcommaaccent Tcaron -60
KPX Rcommaaccent Tcommaaccent -60
KPX Rcommaaccent U -40
KPX Rcommaaccent Uacute -40
KPX Rcommaaccent Ucircumflex -40
KPX Rcommaaccent Udieresis -40
KPX Rcommaaccent Ugrave -40
KPX Rcommaaccent Uhungarumlaut -40
KPX Rcommaaccent Umacron -40
KPX Rcommaaccent Uogonek -40
KPX Rcommaaccent Uring -40
KPX Rcommaaccent V -80
KPX Rcommaaccent W -55
KPX Rcommaaccent Y -65
KPX Rcommaaccent Yacute -65
KPX Rcommaaccent Ydieresis -65
KPX T A -93
KPX T Aacute -93
KPX T Abreve -93
KPX T Acircumflex -93
KPX T Adieresis -93
KPX T Agrave -93
KPX T Amacron -93
KPX T Aogonek -93
KPX T Aring -93
KPX T Atilde -93
KPX T O -18
KPX T Oacute -18
KPX T Ocircumflex -18
KPX T Odieresis -18
KPX T Ograve -18
KPX T Ohungarumlaut -18
KPX T Omacron -18
KPX T Oslash -18
KPX T Otilde -18
KPX T a -80
KPX T aacute -80
KPX T abreve -80
KPX T acircumflex -80
KPX T adieresis -40
KPX T agrave -40
KPX T amacron -40
KPX T aogonek -80
KPX T aring -80
KPX T atilde -40
KPX T colon -50
KPX T comma -74
KPX T e -70
KPX T eacute -70
KPX T ecaron -70
KPX T ecircumflex -70
KPX T edieresis -30
KPX T edotaccent -70
KPX T egrave -70
KPX T emacron -30
KPX T eogonek -70
KPX T hyphen -92
KPX T i -35
KPX T iacute -35
KPX T iogonek -35
KPX T o -80
KPX T oacute -80
KPX T ocircumflex -80
KPX T odieresis -80
KPX T ograve -80
KPX T ohungarumlaut -80
KPX T omacron -80
KPX T oslash -80
KPX T otilde -80
KPX T period -74
KPX T r -35
KPX T racute -35
KPX T rcaron -35
KPX T rcommaaccent -35
KPX T semicolon -55
KPX T u -45
KPX T uacute -45
KPX T ucircumflex -45
KPX T udieresis -45
KPX T ugrave -45
KPX T uhungarumlaut -45
KPX T umacron -45
KPX T uogonek -45
KPX T uring -45
KPX T w -80
KPX T y -80
KPX T yacute -80
KPX T ydieresis -80
KPX Tcaron A -93
KPX Tcaron Aacute -93
KPX Tcaron Abreve -93
KPX Tcaron Acircumflex -93
KPX Tcaron Adieresis -93
KPX Tcaron Agrave -93
KPX Tcaron Amacron -93
KPX Tcaron Aogonek -93
KPX Tcaron Aring -93
KPX Tcaron Atilde -93
KPX Tcaron O -18
KPX Tcaron Oacute -18
KPX Tcaron Ocircumflex -18
KPX Tcaron Odieresis -18
KPX Tcaron Ograve -18
KPX Tcaron Ohungarumlaut -18
KPX Tcaron Omacron -18
KPX Tcaron Oslash -18
KPX Tcaron Otilde -18
KPX Tcaron a -80
KPX Tcaron aacute -80
KPX Tcaron abreve -80
KPX Tcaron acircumflex -80
KPX Tcaron adieresis -40
KPX Tcaron agrave -40
KPX Tcaron amacron -40
KPX Tcaron aogonek -80
KPX Tcaron aring -80
KPX Tcaron atilde -40
KPX Tcaron colon -50
KPX Tcaron comma -74
KPX Tcaron e -70
KPX Tcaron eacute -70
KPX Tcaron ecaron -70
KPX Tcaron ecircumflex -30
KPX Tcaron edieresis -30
KPX Tcaron edotaccent -70
KPX Tcaron egrave -70
KPX Tcaron emacron -30
KPX Tcaron eogonek -70
KPX Tcaron hyphen -92
KPX Tcaron i -35
KPX Tcaron iacute -35
KPX Tcaron iogonek -35
KPX Tcaron o -80
KPX Tcaron oacute -80
KPX Tcaron ocircumflex -80
KPX Tcaron odieresis -80
KPX Tcaron ograve -80
KPX Tcaron ohungarumlaut -80
KPX Tcaron omacron -80
KPX Tcaron oslash -80
KPX Tcaron otilde -80
KPX Tcaron period -74
KPX Tcaron r -35
KPX Tcaron racute -35
KPX Tcaron rcaron -35
KPX Tcaron rcommaaccent -35
KPX Tcaron semicolon -55
KPX Tcaron u -45
KPX Tcaron uacute -45
KPX Tcaron ucircumflex -45
KPX Tcaron udieresis -45
KPX Tcaron ugrave -45
KPX Tcaron uhungarumlaut -45
KPX Tcaron umacron -45
KPX Tcaron uogonek -45
KPX Tcaron uring -45
KPX Tcaron w -80
KPX Tcaron y -80
KPX Tcaron yacute -80
KPX Tcaron ydieresis -80
KPX Tcommaaccent A -93
KPX Tcommaaccent Aacute -93
KPX Tcommaaccent Abreve -93
KPX Tcommaaccent Acircumflex -93
KPX Tcommaaccent Adieresis -93
KPX Tcommaaccent Agrave -93
KPX Tcommaaccent Amacron -93
KPX Tcommaaccent Aogonek -93
KPX Tcommaaccent Aring -93
KPX Tcommaaccent Atilde -93
KPX Tcommaaccent O -18
KPX Tcommaaccent Oacute -18
KPX Tcommaaccent Ocircumflex -18
KPX Tcommaaccent Odieresis -18
KPX Tcommaaccent Ograve -18
KPX Tcommaaccent Ohungarumlaut -18
KPX Tcommaaccent Omacron -18
KPX Tcommaaccent Oslash -18
KPX Tcommaaccent Otilde -18
KPX Tcommaaccent a -80
KPX Tcommaaccent aacute -80
KPX Tcommaaccent abreve -80
KPX Tcommaaccent acircumflex -80
KPX Tcommaaccent adieresis -40
KPX Tcommaaccent agrave -40
KPX Tcommaaccent amacron -40
KPX Tcommaaccent aogonek -80
KPX Tcommaaccent aring -80
KPX Tcommaaccent atilde -40
KPX Tcommaaccent colon -50
KPX Tcommaaccent comma -74
KPX Tcommaaccent e -70
KPX Tcommaaccent eacute -70
KPX Tcommaaccent ecaron -70
KPX Tcommaaccent ecircumflex -30
KPX Tcommaaccent edieresis -30
KPX Tcommaaccent edotaccent -70
KPX Tcommaaccent egrave -30
KPX Tcommaaccent emacron -70
KPX Tcommaaccent eogonek -70
KPX Tcommaaccent hyphen -92
KPX Tcommaaccent i -35
KPX Tcommaaccent iacute -35
KPX Tcommaaccent iogonek -35
KPX Tcommaaccent o -80
KPX Tcommaaccent oacute -80
KPX Tcommaaccent ocircumflex -80
KPX Tcommaaccent odieresis -80
KPX Tcommaaccent ograve -80
KPX Tcommaaccent ohungarumlaut -80
KPX Tcommaaccent omacron -80
KPX Tcommaaccent oslash -80
KPX Tcommaaccent otilde -80
KPX Tcommaaccent period -74
KPX Tcommaaccent r -35
KPX Tcommaaccent racute -35
KPX Tcommaaccent rcaron -35
KPX Tcommaaccent rcommaaccent -35
KPX Tcommaaccent semicolon -55
KPX Tcommaaccent u -45
KPX Tcommaaccent uacute -45
KPX Tcommaaccent ucircumflex -45
KPX Tcommaaccent udieresis -45
KPX Tcommaaccent ugrave -45
KPX Tcommaaccent uhungarumlaut -45
KPX Tcommaaccent umacron -45
KPX Tcommaaccent uogonek -45
KPX Tcommaaccent uring -45
KPX Tcommaaccent w -80
KPX Tcommaaccent y -80
KPX Tcommaaccent yacute -80
KPX Tcommaaccent ydieresis -80
KPX U A -40
KPX U Aacute -40
KPX U Abreve -40
KPX U Acircumflex -40
KPX U Adieresis -40
KPX U Agrave -40
KPX U Amacron -40
KPX U Aogonek -40
KPX U Aring -40
KPX U Atilde -40
KPX Uacute A -40
KPX Uacute Aacute -40
KPX Uacute Abreve -40
KPX Uacute Acircumflex -40
KPX Uacute Adieresis -40
KPX Uacute Agrave -40
KPX Uacute Amacron -40
KPX Uacute Aogonek -40
KPX Uacute Aring -40
KPX Uacute Atilde -40
KPX Ucircumflex A -40
KPX Ucircumflex Aacute -40
KPX Ucircumflex Abreve -40
KPX Ucircumflex Acircumflex -40
KPX Ucircumflex Adieresis -40
KPX Ucircumflex Agrave -40
KPX Ucircumflex Amacron -40
KPX Ucircumflex Aogonek -40
KPX Ucircumflex Aring -40
KPX Ucircumflex Atilde -40
KPX Udieresis A -40
KPX Udieresis Aacute -40
KPX Udieresis Abreve -40
KPX Udieresis Acircumflex -40
KPX Udieresis Adieresis -40
KPX Udieresis Agrave -40
KPX Udieresis Amacron -40
KPX Udieresis Aogonek -40
KPX Udieresis Aring -40
KPX Udieresis Atilde -40
KPX Ugrave A -40
KPX Ugrave Aacute -40
KPX Ugrave Abreve -40
KPX Ugrave Acircumflex -40
KPX Ugrave Adieresis -40
KPX Ugrave Agrave -40
KPX Ugrave Amacron -40
KPX Ugrave Aogonek -40
KPX Ugrave Aring -40
KPX Ugrave Atilde -40
KPX Uhungarumlaut A -40
KPX Uhungarumlaut Aacute -40
KPX Uhungarumlaut Abreve -40
KPX Uhungarumlaut Acircumflex -40
KPX Uhungarumlaut Adieresis -40
KPX Uhungarumlaut Agrave -40
KPX Uhungarumlaut Amacron -40
KPX Uhungarumlaut Aogonek -40
KPX Uhungarumlaut Aring -40
KPX Uhungarumlaut Atilde -40
KPX Umacron A -40
KPX Umacron Aacute -40
KPX Umacron Abreve -40
KPX Umacron Acircumflex -40
KPX Umacron Adieresis -40
KPX Umacron Agrave -40
KPX Umacron Amacron -40
KPX Umacron Aogonek -40
KPX Umacron Aring -40
KPX Umacron Atilde -40
KPX Uogonek A -40
KPX Uogonek Aacute -40
KPX Uogonek Abreve -40
KPX Uogonek Acircumflex -40
KPX Uogonek Adieresis -40
KPX Uogonek Agrave -40
KPX Uogonek Amacron -40
KPX Uogonek Aogonek -40
KPX Uogonek Aring -40
KPX Uogonek Atilde -40
KPX Uring A -40
KPX Uring Aacute -40
KPX Uring Abreve -40
KPX Uring Acircumflex -40
KPX Uring Adieresis -40
KPX Uring Agrave -40
KPX Uring Amacron -40
KPX Uring Aogonek -40
KPX Uring Aring -40
KPX Uring Atilde -40
KPX V A -135
KPX V Aacute -135
KPX V Abreve -135
KPX V Acircumflex -135
KPX V Adieresis -135
KPX V Agrave -135
KPX V Amacron -135
KPX V Aogonek -135
KPX V Aring -135
KPX V Atilde -135
KPX V G -15
KPX V Gbreve -15
KPX V Gcommaaccent -15
KPX V O -40
KPX V Oacute -40
KPX V Ocircumflex -40
KPX V Odieresis -40
KPX V Ograve -40
KPX V Ohungarumlaut -40
KPX V Omacron -40
KPX V Oslash -40
KPX V Otilde -40
KPX V a -111
KPX V aacute -111
KPX V abreve -111
KPX V acircumflex -71
KPX V adieresis -71
KPX V agrave -71
KPX V amacron -71
KPX V aogonek -111
KPX V aring -111
KPX V atilde -71
KPX V colon -74
KPX V comma -129
KPX V e -111
KPX V eacute -111
KPX V ecaron -71
KPX V ecircumflex -71
KPX V edieresis -71
KPX V edotaccent -111
KPX V egrave -71
KPX V emacron -71
KPX V eogonek -111
KPX V hyphen -100
KPX V i -60
KPX V iacute -60
KPX V icircumflex -20
KPX V idieresis -20
KPX V igrave -20
KPX V imacron -20
KPX V iogonek -60
KPX V o -129
KPX V oacute -129
KPX V ocircumflex -129
KPX V odieresis -89
KPX V ograve -89
KPX V ohungarumlaut -129
KPX V omacron -89
KPX V oslash -129
KPX V otilde -89
KPX V period -129
KPX V semicolon -74
KPX V u -75
KPX V uacute -75
KPX V ucircumflex -75
KPX V udieresis -75
KPX V ugrave -75
KPX V uhungarumlaut -75
KPX V umacron -75
KPX V uogonek -75
KPX V uring -75
KPX W A -120
KPX W Aacute -120
KPX W Abreve -120
KPX W Acircumflex -120
KPX W Adieresis -120
KPX W Agrave -120
KPX W Amacron -120
KPX W Aogonek -120
KPX W Aring -120
KPX W Atilde -120
KPX W O -10
KPX W Oacute -10
KPX W Ocircumflex -10
KPX W Odieresis -10
KPX W Ograve -10
KPX W Ohungarumlaut -10
KPX W Omacron -10
KPX W Oslash -10
KPX W Otilde -10
KPX W a -80
KPX W aacute -80
KPX W abreve -80
KPX W acircumflex -80
KPX W adieresis -80
KPX W agrave -80
KPX W amacron -80
KPX W aogonek -80
KPX W aring -80
KPX W atilde -80
KPX W colon -37
KPX W comma -92
KPX W e -80
KPX W eacute -80
KPX W ecaron -80
KPX W ecircumflex -80
KPX W edieresis -40
KPX W edotaccent -80
KPX W egrave -40
KPX W emacron -40
KPX W eogonek -80
KPX W hyphen -65
KPX W i -40
KPX W iacute -40
KPX W iogonek -40
KPX W o -80
KPX W oacute -80
KPX W ocircumflex -80
KPX W odieresis -80
KPX W ograve -80
KPX W ohungarumlaut -80
KPX W omacron -80
KPX W oslash -80
KPX W otilde -80
KPX W period -92
KPX W semicolon -37
KPX W u -50
KPX W uacute -50
KPX W ucircumflex -50
KPX W udieresis -50
KPX W ugrave -50
KPX W uhungarumlaut -50
KPX W umacron -50
KPX W uogonek -50
KPX W uring -50
KPX W y -73
KPX W yacute -73
KPX W ydieresis -73
KPX Y A -120
KPX Y Aacute -120
KPX Y Abreve -120
KPX Y Acircumflex -120
KPX Y Adieresis -120
KPX Y Agrave -120
KPX Y Amacron -120
KPX Y Aogonek -120
KPX Y Aring -120
KPX Y Atilde -120
KPX Y O -30
KPX Y Oacute -30
KPX Y Ocircumflex -30
KPX Y Odieresis -30
KPX Y Ograve -30
KPX Y Ohungarumlaut -30
KPX Y Omacron -30
KPX Y Oslash -30
KPX Y Otilde -30
KPX Y a -100
KPX Y aacute -100
KPX Y abreve -100
KPX Y acircumflex -100
KPX Y adieresis -60
KPX Y agrave -60
KPX Y amacron -60
KPX Y aogonek -100
KPX Y aring -100
KPX Y atilde -60
KPX Y colon -92
KPX Y comma -129
KPX Y e -100
KPX Y eacute -100
KPX Y ecaron -100
KPX Y ecircumflex -100
KPX Y edieresis -60
KPX Y edotaccent -100
KPX Y egrave -60
KPX Y emacron -60
KPX Y eogonek -100
KPX Y hyphen -111
KPX Y i -55
KPX Y iacute -55
KPX Y iogonek -55
KPX Y o -110
KPX Y oacute -110
KPX Y ocircumflex -110
KPX Y odieresis -70
KPX Y ograve -70
KPX Y ohungarumlaut -110
KPX Y omacron -70
KPX Y oslash -110
KPX Y otilde -70
KPX Y period -129
KPX Y semicolon -92
KPX Y u -111
KPX Y uacute -111
KPX Y ucircumflex -111
KPX Y udieresis -71
KPX Y ugrave -71
KPX Y uhungarumlaut -111
KPX Y umacron -71
KPX Y uogonek -111
KPX Y uring -111
KPX Yacute A -120
KPX Yacute Aacute -120
KPX Yacute Abreve -120
KPX Yacute Acircumflex -120
KPX Yacute Adieresis -120
KPX Yacute Agrave -120
KPX Yacute Amacron -120
KPX Yacute Aogonek -120
KPX Yacute Aring -120
KPX Yacute Atilde -120
KPX Yacute O -30
KPX Yacute Oacute -30
KPX Yacute Ocircumflex -30
KPX Yacute Odieresis -30
KPX Yacute Ograve -30
KPX Yacute Ohungarumlaut -30
KPX Yacute Omacron -30
KPX Yacute Oslash -30
KPX Yacute Otilde -30
KPX Yacute a -100
KPX Yacute aacute -100
KPX Yacute abreve -100
KPX Yacute acircumflex -100
KPX Yacute adieresis -60
KPX Yacute agrave -60
KPX Yacute amacron -60
KPX Yacute aogonek -100
KPX Yacute aring -100
KPX Yacute atilde -60
KPX Yacute colon -92
KPX Yacute comma -129
KPX Yacute e -100
KPX Yacute eacute -100
KPX Yacute ecaron -100
KPX Yacute ecircumflex -100
KPX Yacute edieresis -60
KPX Yacute edotaccent -100
KPX Yacute egrave -60
KPX Yacute emacron -60
KPX Yacute eogonek -100
KPX Yacute hyphen -111
KPX Yacute i -55
KPX Yacute iacute -55
KPX Yacute iogonek -55
KPX Yacute o -110
KPX Yacute oacute -110
KPX Yacute ocircumflex -110
KPX Yacute odieresis -70
KPX Yacute ograve -70
KPX Yacute ohungarumlaut -110
KPX Yacute omacron -70
KPX Yacute oslash -110
KPX Yacute otilde -70
KPX Yacute period -129
KPX Yacute semicolon -92
KPX Yacute u -111
KPX Yacute uacute -111
KPX Yacute ucircumflex -111
KPX Yacute udieresis -71
KPX Yacute ugrave -71
KPX Yacute uhungarumlaut -111
KPX Yacute umacron -71
KPX Yacute uogonek -111
KPX Yacute uring -111
KPX Ydieresis A -120
KPX Ydieresis Aacute -120
KPX Ydieresis Abreve -120
KPX Ydieresis Acircumflex -120
KPX Ydieresis Adieresis -120
KPX Ydieresis Agrave -120
KPX Ydieresis Amacron -120
KPX Ydieresis Aogonek -120
KPX Ydieresis Aring -120
KPX Ydieresis Atilde -120
KPX Ydieresis O -30
KPX Ydieresis Oacute -30
KPX Ydieresis Ocircumflex -30
KPX Ydieresis Odieresis -30
KPX Ydieresis Ograve -30
KPX Ydieresis Ohungarumlaut -30
KPX Ydieresis Omacron -30
KPX Ydieresis Oslash -30
KPX Ydieresis Otilde -30
KPX Ydieresis a -100
KPX Ydieresis aacute -100
KPX Ydieresis abreve -100
KPX Ydieresis acircumflex -100
KPX Ydieresis adieresis -60
KPX Ydieresis agrave -60
KPX Ydieresis amacron -60
KPX Ydieresis aogonek -100
KPX Ydieresis aring -100
KPX Ydieresis atilde -100
KPX Ydieresis colon -92
KPX Ydieresis comma -129
KPX Ydieresis e -100
KPX Ydieresis eacute -100
KPX Ydieresis ecaron -100
KPX Ydieresis ecircumflex -100
KPX Ydieresis edieresis -60
KPX Ydieresis edotaccent -100
KPX Ydieresis egrave -60
KPX Ydieresis emacron -60
KPX Ydieresis eogonek -100
KPX Ydieresis hyphen -111
KPX Ydieresis i -55
KPX Ydieresis iacute -55
KPX Ydieresis iogonek -55
KPX Ydieresis o -110
KPX Ydieresis oacute -110
KPX Ydieresis ocircumflex -110
KPX Ydieresis odieresis -70
KPX Ydieresis ograve -70
KPX Ydieresis ohungarumlaut -110
KPX Ydieresis omacron -70
KPX Ydieresis oslash -110
KPX Ydieresis otilde -70
KPX Ydieresis period -129
KPX Ydieresis semicolon -92
KPX Ydieresis u -111
KPX Ydieresis uacute -111
KPX Ydieresis ucircumflex -111
KPX Ydieresis udieresis -71
KPX Ydieresis ugrave -71
KPX Ydieresis uhungarumlaut -111
KPX Ydieresis umacron -71
KPX Ydieresis uogonek -111
KPX Ydieresis uring -111
KPX a v -20
KPX a w -15
KPX aacute v -20
KPX aacute w -15
KPX abreve v -20
KPX abreve w -15
KPX acircumflex v -20
KPX acircumflex w -15
KPX adieresis v -20
KPX adieresis w -15
KPX agrave v -20
KPX agrave w -15
KPX amacron v -20
KPX amacron w -15
KPX aogonek v -20
KPX aogonek w -15
KPX aring v -20
KPX aring w -15
KPX atilde v -20
KPX atilde w -15
KPX b period -40
KPX b u -20
KPX b uacute -20
KPX b ucircumflex -20
KPX b udieresis -20
KPX b ugrave -20
KPX b uhungarumlaut -20
KPX b umacron -20
KPX b uogonek -20
KPX b uring -20
KPX b v -15
KPX c y -15
KPX c yacute -15
KPX c ydieresis -15
KPX cacute y -15
KPX cacute yacute -15
KPX cacute ydieresis -15
KPX ccaron y -15
KPX ccaron yacute -15
KPX ccaron ydieresis -15
KPX ccedilla y -15
KPX ccedilla yacute -15
KPX ccedilla ydieresis -15
KPX comma quotedblright -70
KPX comma quoteright -70
KPX e g -15
KPX e gbreve -15
KPX e gcommaaccent -15
KPX e v -25
KPX e w -25
KPX e x -15
KPX e y -15
KPX e yacute -15
KPX e ydieresis -15
KPX eacute g -15
KPX eacute gbreve -15
KPX eacute gcommaaccent -15
KPX eacute v -25
KPX eacute w -25
KPX eacute x -15
KPX eacute y -15
KPX eacute yacute -15
KPX eacute ydieresis -15
KPX ecaron g -15
KPX ecaron gbreve -15
KPX ecaron gcommaaccent -15
KPX ecaron v -25
KPX ecaron w -25
KPX ecaron x -15
KPX ecaron y -15
KPX ecaron yacute -15
KPX ecaron ydieresis -15
KPX ecircumflex g -15
KPX ecircumflex gbreve -15
KPX ecircumflex gcommaaccent -15
KPX ecircumflex v -25
KPX ecircumflex w -25
KPX ecircumflex x -15
KPX ecircumflex y -15
KPX ecircumflex yacute -15
KPX ecircumflex ydieresis -15
KPX edieresis g -15
KPX edieresis gbreve -15
KPX edieresis gcommaaccent -15
KPX edieresis v -25
KPX edieresis w -25
KPX edieresis x -15
KPX edieresis y -15
KPX edieresis yacute -15
KPX edieresis ydieresis -15
KPX edotaccent g -15
KPX edotaccent gbreve -15
KPX edotaccent gcommaaccent -15
KPX edotaccent v -25
KPX edotaccent w -25
KPX edotaccent x -15
KPX edotaccent y -15
KPX edotaccent yacute -15
KPX edotaccent ydieresis -15
KPX egrave g -15
KPX egrave gbreve -15
KPX egrave gcommaaccent -15
KPX egrave v -25
KPX egrave w -25
KPX egrave x -15
KPX egrave y -15
KPX egrave yacute -15
KPX egrave ydieresis -15
KPX emacron g -15
KPX emacron gbreve -15
KPX emacron gcommaaccent -15
KPX emacron v -25
KPX emacron w -25
KPX emacron x -15
KPX emacron y -15
KPX emacron yacute -15
KPX emacron ydieresis -15
KPX eogonek g -15
KPX eogonek gbreve -15
KPX eogonek gcommaaccent -15
KPX eogonek v -25
KPX eogonek w -25
KPX eogonek x -15
KPX eogonek y -15
KPX eogonek yacute -15
KPX eogonek ydieresis -15
KPX f a -10
KPX f aacute -10
KPX f abreve -10
KPX f acircumflex -10
KPX f adieresis -10
KPX f agrave -10
KPX f amacron -10
KPX f aogonek -10
KPX f aring -10
KPX f atilde -10
KPX f dotlessi -50
KPX f f -25
KPX f i -20
KPX f iacute -20
KPX f quoteright 55
KPX g a -5
KPX g aacute -5
KPX g abreve -5
KPX g acircumflex -5
KPX g adieresis -5
KPX g agrave -5
KPX g amacron -5
KPX g aogonek -5
KPX g aring -5
KPX g atilde -5
KPX gbreve a -5
KPX gbreve aacute -5
KPX gbreve abreve -5
KPX gbreve acircumflex -5
KPX gbreve adieresis -5
KPX gbreve agrave -5
KPX gbreve amacron -5
KPX gbreve aogonek -5
KPX gbreve aring -5
KPX gbreve atilde -5
KPX gcommaaccent a -5
KPX gcommaaccent aacute -5
KPX gcommaaccent abreve -5
KPX gcommaaccent acircumflex -5
KPX gcommaaccent adieresis -5
KPX gcommaaccent agrave -5
KPX gcommaaccent amacron -5
KPX gcommaaccent aogonek -5
KPX gcommaaccent aring -5
KPX gcommaaccent atilde -5
KPX h y -5
KPX h yacute -5
KPX h ydieresis -5
KPX i v -25
KPX iacute v -25
KPX icircumflex v -25
KPX idieresis v -25
KPX igrave v -25
KPX imacron v -25
KPX iogonek v -25
KPX k e -10
KPX k eacute -10
KPX k ecaron -10
KPX k ecircumflex -10
KPX k edieresis -10
KPX k edotaccent -10
KPX k egrave -10
KPX k emacron -10
KPX k eogonek -10
KPX k o -10
KPX k oacute -10
KPX k ocircumflex -10
KPX k odieresis -10
KPX k ograve -10
KPX k ohungarumlaut -10
KPX k omacron -10
KPX k oslash -10
KPX k otilde -10
KPX k y -15
KPX k yacute -15
KPX k ydieresis -15
KPX kcommaaccent e -10
KPX kcommaaccent eacute -10
KPX kcommaaccent ecaron -10
KPX kcommaaccent ecircumflex -10
KPX kcommaaccent edieresis -10
KPX kcommaaccent edotaccent -10
KPX kcommaaccent egrave -10
KPX kcommaaccent emacron -10
KPX kcommaaccent eogonek -10
KPX kcommaaccent o -10
KPX kcommaaccent oacute -10
KPX kcommaaccent ocircumflex -10
KPX kcommaaccent odieresis -10
KPX kcommaaccent ograve -10
KPX kcommaaccent ohungarumlaut -10
KPX kcommaaccent omacron -10
KPX kcommaaccent oslash -10
KPX kcommaaccent otilde -10
KPX kcommaaccent y -15
KPX kcommaaccent yacute -15
KPX kcommaaccent ydieresis -15
KPX l w -10
KPX lacute w -10
KPX lcommaaccent w -10
KPX lslash w -10
KPX n v -40
KPX n y -15
KPX n yacute -15
KPX n ydieresis -15
KPX nacute v -40
KPX nacute y -15
KPX nacute yacute -15
KPX nacute ydieresis -15
KPX ncaron v -40
KPX ncaron y -15
KPX ncaron yacute -15
KPX ncaron ydieresis -15
KPX ncommaaccent v -40
KPX ncommaaccent y -15
KPX ncommaaccent yacute -15
KPX ncommaaccent ydieresis -15
KPX ntilde v -40
KPX ntilde y -15
KPX ntilde yacute -15
KPX ntilde ydieresis -15
KPX o v -15
KPX o w -25
KPX o y -10
KPX o yacute -10
KPX o ydieresis -10
KPX oacute v -15
KPX oacute w -25
KPX oacute y -10
KPX oacute yacute -10
KPX oacute ydieresis -10
KPX ocircumflex v -15
KPX ocircumflex w -25
KPX ocircumflex y -10
KPX ocircumflex yacute -10
KPX ocircumflex ydieresis -10
KPX odieresis v -15
KPX odieresis w -25
KPX odieresis y -10
KPX odieresis yacute -10
KPX odieresis ydieresis -10
KPX ograve v -15
KPX ograve w -25
KPX ograve y -10
KPX ograve yacute -10
KPX ograve ydieresis -10
KPX ohungarumlaut v -15
KPX ohungarumlaut w -25
KPX ohungarumlaut y -10
KPX ohungarumlaut yacute -10
KPX ohungarumlaut ydieresis -10
KPX omacron v -15
KPX omacron w -25
KPX omacron y -10
KPX omacron yacute -10
KPX omacron ydieresis -10
KPX oslash v -15
KPX oslash w -25
KPX oslash y -10
KPX oslash yacute -10
KPX oslash ydieresis -10
KPX otilde v -15
KPX otilde w -25
KPX otilde y -10
KPX otilde yacute -10
KPX otilde ydieresis -10
KPX p y -10
KPX p yacute -10
KPX p ydieresis -10
KPX period quotedblright -70
KPX period quoteright -70
KPX quotedblleft A -80
KPX quotedblleft Aacute -80
KPX quotedblleft Abreve -80
KPX quotedblleft Acircumflex -80
KPX quotedblleft Adieresis -80
KPX quotedblleft Agrave -80
KPX quotedblleft Amacron -80
KPX quotedblleft Aogonek -80
KPX quotedblleft Aring -80
KPX quotedblleft Atilde -80
KPX quoteleft A -80
KPX quoteleft Aacute -80
KPX quoteleft Abreve -80
KPX quoteleft Acircumflex -80
KPX quoteleft Adieresis -80
KPX quoteleft Agrave -80
KPX quoteleft Amacron -80
KPX quoteleft Aogonek -80
KPX quoteleft Aring -80
KPX quoteleft Atilde -80
KPX quoteleft quoteleft -74
KPX quoteright d -50
KPX quoteright dcroat -50
KPX quoteright l -10
KPX quoteright lacute -10
KPX quoteright lcommaaccent -10
KPX quoteright lslash -10
KPX quoteright quoteright -74
KPX quoteright r -50
KPX quoteright racute -50
KPX quoteright rcaron -50
KPX quoteright rcommaaccent -50
KPX quoteright s -55
KPX quoteright sacute -55
KPX quoteright scaron -55
KPX quoteright scedilla -55
KPX quoteright scommaaccent -55
KPX quoteright space -74
KPX quoteright t -18
KPX quoteright tcommaaccent -18
KPX quoteright v -50
KPX r comma -40
KPX r g -18
KPX r gbreve -18
KPX r gcommaaccent -18
KPX r hyphen -20
KPX r period -55
KPX racute comma -40
KPX racute g -18
KPX racute gbreve -18
KPX racute gcommaaccent -18
KPX racute hyphen -20
KPX racute period -55
KPX rcaron comma -40
KPX rcaron g -18
KPX rcaron gbreve -18
KPX rcaron gcommaaccent -18
KPX rcaron hyphen -20
KPX rcaron period -55
KPX rcommaaccent comma -40
KPX rcommaaccent g -18
KPX rcommaaccent gbreve -18
KPX rcommaaccent gcommaaccent -18
KPX rcommaaccent hyphen -20
KPX rcommaaccent period -55
KPX space A -55
KPX space Aacute -55
KPX space Abreve -55
KPX space Acircumflex -55
KPX space Adieresis -55
KPX space Agrave -55
KPX space Amacron -55
KPX space Aogonek -55
KPX space Aring -55
KPX space Atilde -55
KPX space T -18
KPX space Tcaron -18
KPX space Tcommaaccent -18
KPX space V -50
KPX space W -30
KPX space Y -90
KPX space Yacute -90
KPX space Ydieresis -90
KPX v a -25
KPX v aacute -25
KPX v abreve -25
KPX v acircumflex -25
KPX v adieresis -25
KPX v agrave -25
KPX v amacron -25
KPX v aogonek -25
KPX v aring -25
KPX v atilde -25
KPX v comma -65
KPX v e -15
KPX v eacute -15
KPX v ecaron -15
KPX v ecircumflex -15
KPX v edieresis -15
KPX v edotaccent -15
KPX v egrave -15
KPX v emacron -15
KPX v eogonek -15
KPX v o -20
KPX v oacute -20
KPX v ocircumflex -20
KPX v odieresis -20
KPX v ograve -20
KPX v ohungarumlaut -20
KPX v omacron -20
KPX v oslash -20
KPX v otilde -20
KPX v period -65
KPX w a -10
KPX w aacute -10
KPX w abreve -10
KPX w acircumflex -10
KPX w adieresis -10
KPX w agrave -10
KPX w amacron -10
KPX w aogonek -10
KPX w aring -10
KPX w atilde -10
KPX w comma -65
KPX w o -10
KPX w oacute -10
KPX w ocircumflex -10
KPX w odieresis -10
KPX w ograve -10
KPX w ohungarumlaut -10
KPX w omacron -10
KPX w oslash -10
KPX w otilde -10
KPX w period -65
KPX x e -15
KPX x eacute -15
KPX x ecaron -15
KPX x ecircumflex -15
KPX x edieresis -15
KPX x edotaccent -15
KPX x egrave -15
KPX x emacron -15
KPX x eogonek -15
KPX y comma -65
KPX y period -65
KPX yacute comma -65
KPX yacute period -65
KPX ydieresis comma -65
KPX ydieresis period -65
EndKernPairs
EndKernData
EndFontMetrics
StartFontMetrics 4.1
Comment Copyright (c) 1985, 1987, 1988, 1989, 1997 Adobe Systems Incorporated. All Rights Reserved.
Comment Creation Date: Thu May  1 15:14:13 1997
Comment UniqueID 43082
Comment VMusage 45775 55535
FontName ZapfDingbats
FullName ITC Zapf Dingbats
FamilyName ZapfDingbats
Weight Medium
ItalicAngle 0
IsFixedPitch false
CharacterSet Special
FontBBox -1 -143 981 820 
UnderlinePosition -100
UnderlineThickness 50
Version 002.000
Notice Copyright (c) 1985, 1987, 1988, 1989, 1997 Adobe Systems Incorporated. All Rights Reserved.ITC Zapf Dingbats is a registered trademark of International Typeface Corporation.
EncodingScheme FontSpecific
StdHW 28
StdVW 90
StartCharMetrics 202
C 32 ; WX 278 ; N space ; B 0 0 0 0 ;
C 33 ; WX 974 ; N a1 ; B 35 72 939 621 ;
C 34 ; WX 961 ; N a2 ; B 35 81 927 611 ;
C 35 ; WX 974 ; N a202 ; B 35 72 939 621 ;
C 36 ; WX 980 ; N a3 ; B 35 0 945 692 ;
C 37 ; WX 719 ; N a4 ; B 34 139 685 566 ;
C 38 ; WX 789 ; N a5 ; B 35 -14 755 705 ;
C 39 ; WX 790 ; N a119 ; B 35 -14 755 705 ;
C 40 ; WX 791 ; N a118 ; B 35 -13 761 705 ;
C 41 ; WX 690 ; N a117 ; B 34 138 655 553 ;
C 42 ; WX 960 ; N a11 ; B 35 123 925 568 ;
C 43 ; WX 939 ; N a12 ; B 35 134 904 559 ;
C 44 ; WX 549 ; N a13 ; B 29 -11 516 705 ;
C 45 ; WX 855 ; N a14 ; B 34 59 820 632 ;
C 46 ; WX 911 ; N a15 ; B 35 50 876 642 ;
C 47 ; WX 933 ; N a16 ; B 35 139 899 550 ;
C 48 ; WX 911 ; N a105 ; B 35 50 876 642 ;
C 49 ; WX 945 ; N a17 ; B 35 139 909 553 ;
C 50 ; WX 974 ; N a18 ; B 35 104 938 587 ;
C 51 ; WX 755 ; N a19 ; B 34 -13 721 705 ;
C 52 ; WX 846 ; N a20 ; B 36 -14 811 705 ;
C 53 ; WX 762 ; N a21 ; B 35 0 727 692 ;
C 54 ; WX 761 ; N a22 ; B 35 0 727 692 ;
C 55 ; WX 571 ; N a23 ; B -1 -68 571 661 ;
C 56 ; WX 677 ; N a24 ; B 36 -13 642 705 ;
C 57 ; WX 763 ; N a25 ; B 35 0 728 692 ;
C 58 ; WX 760 ; N a26 ; B 35 0 726 692 ;
C 59 ; WX 759 ; N a27 ; B 35 0 725 692 ;
C 60 ; WX 754 ; N a28 ; B 35 0 720 692 ;
C 61 ; WX 494 ; N a6 ; B 35 0 460 692 ;
C 62 ; WX 552 ; N a7 ; B 35 0 517 692 ;
C 63 ; WX 537 ; N a8 ; B 35 0 503 692 ;
C 64 ; WX 577 ; N a9 ; B 35 96 542 596 ;
C 65 ; WX 692 ; N a10 ; B 35 -14 657 705 ;
C 66 ; WX 786 ; N a29 ; B 35 -14 751 705 ;
C 67 ; WX 788 ; N a30 ; B 35 -14 752 705 ;
C 68 ; WX 788 ; N a31 ; B 35 -14 753 705 ;
C 69 ; WX 790 ; N a32 ; B 35 -14 756 705 ;
C 70 ; WX 793 ; N a33 ; B 35 -13 759 705 ;
C 71 ; WX 794 ; N a34 ; B 35 -13 759 705 ;
C 72 ; WX 816 ; N a35 ; B 35 -14 782 705 ;
C 73 ; WX 823 ; N a36 ; B 35 -14 787 705 ;
C 74 ; WX 789 ; N a37 ; B 35 -14 754 705 ;
C 75 ; WX 841 ; N a38 ; B 35 -14 807 705 ;
C 76 ; WX 823 ; N a39 ; B 35 -14 789 705 ;
C 77 ; WX 833 ; N a40 ; B 35 -14 798 705 ;
C 78 ; WX 816 ; N a41 ; B 35 -13 782 705 ;
C 79 ; WX 831 ; N a42 ; B 35 -14 796 705 ;
C 80 ; WX 923 ; N a43 ; B 35 -14 888 705 ;
C 81 ; WX 744 ; N a44 ; B 35 0 710 692 ;
C 82 ; WX 723 ; N a45 ; B 35 0 688 692 ;
C 83 ; WX 749 ; N a46 ; B 35 0 714 692 ;
C 84 ; WX 790 ; N a47 ; B 34 -14 756 705 ;
C 85 ; WX 792 ; N a48 ; B 35 -14 758 705 ;
C 86 ; WX 695 ; N a49 ; B 35 -14 661 706 ;
C 87 ; WX 776 ; N a50 ; B 35 -6 741 699 ;
C 88 ; WX 768 ; N a51 ; B 35 -7 734 699 ;
C 89 ; WX 792 ; N a52 ; B 35 -14 757 705 ;
C 90 ; WX 759 ; N a53 ; B 35 0 725 692 ;
C 91 ; WX 707 ; N a54 ; B 35 -13 672 704 ;
C 92 ; WX 708 ; N a55 ; B 35 -14 672 705 ;
C 93 ; WX 682 ; N a56 ; B 35 -14 647 705 ;
C 94 ; WX 701 ; N a57 ; B 35 -14 666 705 ;
C 95 ; WX 826 ; N a58 ; B 35 -14 791 705 ;
C 96 ; WX 815 ; N a59 ; B 35 -14 780 705 ;
C 97 ; WX 789 ; N a60 ; B 35 -14 754 705 ;
C 98 ; WX 789 ; N a61 ; B 35 -14 754 705 ;
C 99 ; WX 707 ; N a62 ; B 34 -14 673 705 ;
C 100 ; WX 687 ; N a63 ; B 36 0 651 692 ;
C 101 ; WX 696 ; N a64 ; B 35 0 661 691 ;
C 102 ; WX 689 ; N a65 ; B 35 0 655 692 ;
C 103 ; WX 786 ; N a66 ; B 34 -14 751 705 ;
C 104 ; WX 787 ; N a67 ; B 35 -14 752 705 ;
C 105 ; WX 713 ; N a68 ; B 35 -14 678 705 ;
C 106 ; WX 791 ; N a69 ; B 35 -14 756 705 ;
C 107 ; WX 785 ; N a70 ; B 36 -14 751 705 ;
C 108 ; WX 791 ; N a71 ; B 35 -14 757 705 ;
C 109 ; WX 873 ; N a72 ; B 35 -14 838 705 ;
C 110 ; WX 761 ; N a73 ; B 35 0 726 692 ;
C 111 ; WX 762 ; N a74 ; B 35 0 727 692 ;
C 112 ; WX 762 ; N a203 ; B 35 0 727 692 ;
C 113 ; WX 759 ; N a75 ; B 35 0 725 692 ;
C 114 ; WX 759 ; N a204 ; B 35 0 725 692 ;
C 115 ; WX 892 ; N a76 ; B 35 0 858 705 ;
C 116 ; WX 892 ; N a77 ; B 35 -14 858 692 ;
C 117 ; WX 788 ; N a78 ; B 35 -14 754 705 ;
C 118 ; WX 784 ; N a79 ; B 35 -14 749 705 ;
C 119 ; WX 438 ; N a81 ; B 35 -14 403 705 ;
C 120 ; WX 138 ; N a82 ; B 35 0 104 692 ;
C 121 ; WX 277 ; N a83 ; B 35 0 242 692 ;
C 122 ; WX 415 ; N a84 ; B 35 0 380 692 ;
C 123 ; WX 392 ; N a97 ; B 35 263 357 705 ;
C 124 ; WX 392 ; N a98 ; B 34 263 357 705 ;
C 125 ; WX 668 ; N a99 ; B 35 263 633 705 ;
C 126 ; WX 668 ; N a100 ; B 36 263 634 705 ;
C 128 ; WX 390 ; N a89 ; B 35 -14 356 705 ;
C 129 ; WX 390 ; N a90 ; B 35 -14 355 705 ;
C 130 ; WX 317 ; N a93 ; B 35 0 283 692 ;
C 131 ; WX 317 ; N a94 ; B 35 0 283 692 ;
C 132 ; WX 276 ; N a91 ; B 35 0 242 692 ;
C 133 ; WX 276 ; N a92 ; B 35 0 242 692 ;
C 134 ; WX 509 ; N a205 ; B 35 0 475 692 ;
C 135 ; WX 509 ; N a85 ; B 35 0 475 692 ;
C 136 ; WX 410 ; N a206 ; B 35 0 375 692 ;
C 137 ; WX 410 ; N a86 ; B 35 0 375 692 ;
C 138 ; WX 234 ; N a87 ; B 35 -14 199 705 ;
C 139 ; WX 234 ; N a88 ; B 35 -14 199 705 ;
C 140 ; WX 334 ; N a95 ; B 35 0 299 692 ;
C 141 ; WX 334 ; N a96 ; B 35 0 299 692 ;
C 161 ; WX 732 ; N a101 ; B 35 -143 697 806 ;
C 162 ; WX 544 ; N a102 ; B 56 -14 488 706 ;
C 163 ; WX 544 ; N a103 ; B 34 -14 508 705 ;
C 164 ; WX 910 ; N a104 ; B 35 40 875 651 ;
C 165 ; WX 667 ; N a106 ; B 35 -14 633 705 ;
C 166 ; WX 760 ; N a107 ; B 35 -14 726 705 ;
C 167 ; WX 760 ; N a108 ; B 0 121 758 569 ;
C 168 ; WX 776 ; N a112 ; B 35 0 741 705 ;
C 169 ; WX 595 ; N a111 ; B 34 -14 560 705 ;
C 170 ; WX 694 ; N a110 ; B 35 -14 659 705 ;
C 171 ; WX 626 ; N a109 ; B 34 0 591 705 ;
C 172 ; WX 788 ; N a120 ; B 35 -14 754 705 ;
C 173 ; WX 788 ; N a121 ; B 35 -14 754 705 ;
C 174 ; WX 788 ; N a122 ; B 35 -14 754 705 ;
C 175 ; WX 788 ; N a123 ; B 35 -14 754 705 ;
C 176 ; WX 788 ; N a124 ; B 35 -14 754 705 ;
C 177 ; WX 788 ; N a125 ; B 35 -14 754 705 ;
C 178 ; WX 788 ; N a126 ; B 35 -14 754 705 ;
C 179 ; WX 788 ; N a127 ; B 35 -14 754 705 ;
C 180 ; WX 788 ; N a128 ; B 35 -14 754 705 ;
C 181 ; WX 788 ; N a129 ; B 35 -14 754 705 ;
C 182 ; WX 788 ; N a130 ; B 35 -14 754 705 ;
C 183 ; WX 788 ; N a131 ; B 35 -14 754 705 ;
C 184 ; WX 788 ; N a132 ; B 35 -14 754 705 ;
C 185 ; WX 788 ; N a133 ; B 35 -14 754 705 ;
C 186 ; WX 788 ; N a134 ; B 35 -14 754 705 ;
C 187 ; WX 788 ; N a135 ; B 35 -14 754 705 ;
C 188 ; WX 788 ; N a136 ; B 35 -14 754 705 ;
C 189 ; WX 788 ; N a137 ; B 35 -14 754 705 ;
C 190 ; WX 788 ; N a138 ; B 35 -14 754 705 ;
C 191 ; WX 788 ; N a139 ; B 35 -14 754 705 ;
C 192 ; WX 788 ; N a140 ; B 35 -14 754 705 ;
C 193 ; WX 788 ; N a141 ; B 35 -14 754 705 ;
C 194 ; WX 788 ; N a142 ; B 35 -14 754 705 ;
C 195 ; WX 788 ; N a143 ; B 35 -14 754 705 ;
C 196 ; WX 788 ; N a144 ; B 35 -14 754 705 ;
C 197 ; WX 788 ; N a145 ; B 35 -14 754 705 ;
C 198 ; WX 788 ; N a146 ; B 35 -14 754 705 ;
C 199 ; WX 788 ; N a147 ; B 35 -14 754 705 ;
C 200 ; WX 788 ; N a148 ; B 35 -14 754 705 ;
C 201 ; WX 788 ; N a149 ; B 35 -14 754 705 ;
C 202 ; WX 788 ; N a150 ; B 35 -14 754 705 ;
C 203 ; WX 788 ; N a151 ; B 35 -14 754 705 ;
C 204 ; WX 788 ; N a152 ; B 35 -14 754 705 ;
C 205 ; WX 788 ; N a153 ; B 35 -14 754 705 ;
C 206 ; WX 788 ; N a154 ; B 35 -14 754 705 ;
C 207 ; WX 788 ; N a155 ; B 35 -14 754 705 ;
C 208 ; WX 788 ; N a156 ; B 35 -14 754 705 ;
C 209 ; WX 788 ; N a157 ; B 35 -14 754 705 ;
C 210 ; WX 788 ; N a158 ; B 35 -14 754 705 ;
C 211 ; WX 788 ; N a159 ; B 35 -14 754 705 ;
C 212 ; WX 894 ; N a160 ; B 35 58 860 634 ;
C 213 ; WX 838 ; N a161 ; B 35 152 803 540 ;
C 214 ; WX 1016 ; N a163 ; B 34 152 981 540 ;
C 215 ; WX 458 ; N a164 ; B 35 -127 422 820 ;
C 216 ; WX 748 ; N a196 ; B 35 94 698 597 ;
C 217 ; WX 924 ; N a165 ; B 35 140 890 552 ;
C 218 ; WX 748 ; N a192 ; B 35 94 698 597 ;
C 219 ; WX 918 ; N a166 ; B 35 166 884 526 ;
C 220 ; WX 927 ; N a167 ; B 35 32 892 660 ;
C 221 ; WX 928 ; N a168 ; B 35 129 891 562 ;
C 222 ; WX 928 ; N a169 ; B 35 128 893 563 ;
C 223 ; WX 834 ; N a170 ; B 35 155 799 537 ;
C 224 ; WX 873 ; N a171 ; B 35 93 838 599 ;
C 225 ; WX 828 ; N a172 ; B 35 104 791 588 ;
C 226 ; WX 924 ; N a173 ; B 35 98 889 594 ;
C 227 ; WX 924 ; N a162 ; B 35 98 889 594 ;
C 228 ; WX 917 ; N a174 ; B 35 0 882 692 ;
C 229 ; WX 930 ; N a175 ; B 35 84 896 608 ;
C 230 ; WX 931 ; N a176 ; B 35 84 896 608 ;
C 231 ; WX 463 ; N a177 ; B 35 -99 429 791 ;
C 232 ; WX 883 ; N a178 ; B 35 71 848 623 ;
C 233 ; WX 836 ; N a179 ; B 35 44 802 648 ;
C 234 ; WX 836 ; N a193 ; B 35 44 802 648 ;
C 235 ; WX 867 ; N a180 ; B 35 101 832 591 ;
C 236 ; WX 867 ; N a199 ; B 35 101 832 591 ;
C 237 ; WX 696 ; N a181 ; B 35 44 661 648 ;
C 238 ; WX 696 ; N a200 ; B 35 44 661 648 ;
C 239 ; WX 874 ; N a182 ; B 35 77 840 619 ;
C 241 ; WX 874 ; N a201 ; B 35 73 840 615 ;
C 242 ; WX 760 ; N a183 ; B 35 0 725 692 ;
C 243 ; WX 946 ; N a184 ; B 35 160 911 533 ;
C 244 ; WX 771 ; N a197 ; B 34 37 736 655 ;
C 245 ; WX 865 ; N a185 ; B 35 207 830 481 ;
C 246 ; WX 771 ; N a194 ; B 34 37 736 655 ;
C 247 ; WX 888 ; N a198 ; B 34 -19 853 712 ;
C 248 ; WX 967 ; N a186 ; B 35 124 932 568 ;
C 249 ; WX 888 ; N a195 ; B 34 -19 853 712 ;
C 250 ; WX 831 ; N a187 ; B 35 113 796 579 ;
C 251 ; WX 873 ; N a188 ; B 36 118 838 578 ;
C 252 ; WX 927 ; N a189 ; B 35 150 891 542 ;
C 253 ; WX 970 ; N a190 ; B 35 76 931 616 ;
C 254 ; WX 918 ; N a191 ; B 34 99 884 593 ;
EndCharMetrics
EndFontMetrics
{
    "sans-serif": {
        "normal": "Helvetica",
        "bold": "Helvetica-Bold",
        "italic": "Helvetica-Oblique",
        "bold_italic": "Helvetica-BoldOblique"
    },
    "times": {
        "normal": "Times-Roman",
        "bold": "Times-Bold",
        "italic": "Times-Italic",
        "bold_italic": "Times-BoldItalic"
    },
    "times-roman": {
        "normal": "Times-Roman",
        "bold": "Times-Bold",
        "italic": "Times-Italic",
        "bold_italic": "Times-BoldItalic"
    },
    "courier": {
        "normal": "Courier",
        "bold": "Courier-Bold",
        "italic": "Courier-Oblique",
        "bold_italic": "Courier-BoldOblique"
    },
    "helvetica": {
        "normal": "Helvetica",
        "bold": "Helvetica-Bold",
        "italic": "Helvetica-Oblique",
        "bold_italic": "Helvetica-BoldOblique"
    },
    "zapfdingbats": {
        "normal": "ZapfDingbats",
        "bold": "ZapfDingbats",
        "italic": "ZapfDingbats",
        "bold_italic": "ZapfDingbats"
    },
    "symbol": {
        "normal": "Symbol",
        "bold": "Symbol",
        "italic": "Symbol",
        "bold_italic": "Symbol"
    },
    "serif": {
        "normal": "Times-Roman",
        "bold": "Times-Bold",
        "italic": "Times-Italic",
        "bold_italic": "Times-BoldItalic"
    },
    "monospace": {
        "normal": "Courier",
        "bold": "Courier-Bold",
        "italic": "Courier-Oblique",
        "bold_italic": "Courier-BoldOblique"
    },
    "fixed": {
        "normal": "Courier",
        "bold": "Courier-Bold",
        "italic": "Courier-Oblique",
        "bold_italic": "Courier-BoldOblique"
    },
    "dejavu sans": {
        "bold": "DejaVuSans-Bold",
        "bold_italic": "DejaVuSans-BoldOblique",
        "italic": "DejaVuSans-Oblique",
        "normal": "DejaVuSans"
    },
    "dejavu sans mono": {
        "bold": "DejaVuSansMono-Bold",
        "bold_italic": "DejaVuSansMono-BoldOblique",
        "italic": "DejaVuSansMono-Oblique",
        "normal": "DejaVuSansMono"
    },
    "dejavu serif": {
        "bold": "DejaVuSerif-Bold",
        "bold_italic": "DejaVuSerif-BoldItalic",
        "italic": "DejaVuSerif-Italic",
        "normal": "DejaVuSerif"
    }
}<html>
	<head>
		<meta http-equiv="content-type" content="text/html;charset=iso-8859-1">
		<meta name="generator" content="Adobe GoLive 4">
		<title>Core 14 AFM Files - ReadMe</title>
	</head>
	<body bgcolor="white">
		<font color="white">or</font>
		<table border="0" cellpadding="0" cellspacing="2">
			<tr>
				<td width="40"></td>
				<td width="300">This file and the 14 PostScript(R) AFM files it accompanies may be used, copied, and distributed for any purpose and without charge, with or without modification, provided that all copyright notices are retained; that the AFM files are not distributed without this file; that all modifications to this file or any of the AFM files are prominently noted in the modified file(s); and that this paragraph is not modified. Adobe Systems has no responsibility or obligation to support the use of the AFM files. <font color="white">Col</font></td>
			</tr>
		</table>
		<p>Source <a href="http://www.adobe.com/devnet/font/#pcfi">http://www.adobe.com/devnet/font/#pcfi</a></p>
</body>
</html>PNG

   IHDR   @   @   XGl   sBITO   PLTEतｽި   	pHYs    ~   tEXtSoftware Adobe Fireworks CS4Ӡ   tEXtCreation Time 04/12/11#  IDATHj0`*q> {@`ذwΎIЋIVսuug}_,: ͠l ] ͽp#`ݔPr{ n &vD  D	`$ 4<tX\Pza》mV-<| # #!pWG˗>Ӳȣ@݋<Iep+VE+iT#J@M:'U 똀y>X4oޚfY> @E (/r߿HI..p.@8P&Ɓ6U(;ȓH%O"OȺ[ߥ    IENDB`<?xml version="1.0"?>
<svg width="64" height="64" xmlns="http://www.w3.org/2000/svg">
 <g>
  <rect stroke="#666666" id="svg_1" height="60.499994" width="60.166667" y="1.666669" x="1.999998" stroke-width="1.5" fill="none"/>
  <line stroke-linecap="butt" stroke-linejoin="miter" id="svg_3" y2="59.333253" x2="59.749916" y1="4.333415" x1="4.250079" stroke-width="1.5" stroke="#999999" fill="none"/>
  <line stroke-linecap="butt" stroke-linejoin="miter" id="svg_4" y2="59.999665" x2="4.062838" y1="3.750342" x1="60.062164" stroke-width="1.5" stroke="#999999" fill="none"/>
 </g>
</svg>/**
 * dompdf default stylesheet.
 *
 * @package dompdf
 * @link    https://github.com/dompdf/dompdf
 * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
 *
 * Portions from Mozilla
 * @link https://dxr.mozilla.org/mozilla-central/source/layout/style/res/html.css
 * @license http://mozilla.org/MPL/2.0/ Mozilla Public License, v. 2.0
 *
 * Portions from W3C
 * @link https://www.w3.org/TR/css-ui-3/#default-style-sheet
 *
 */

@page {
  margin: 1.2cm;
}

html {
  display: -dompdf-page !important;
  counter-reset: page;
}

/* blocks */

article,
aside,
details,
div,
dt,
figcaption,
footer,
form,
header,
hgroup,
main,
nav,
noscript,
section,
summary {
  display: block;
}

body {
  page-break-before: avoid;
  display: block !important;
  counter-increment: page;
}

p, dl, multicol {
  display: block;
  margin: 1em 0;
}

dd {
  display: block;
  margin-left: 40px;
}

blockquote, figure {
  display: block;
  margin: 1em 40px;
}

address {
  display: block;
  font-style: italic;
}

center {
  display: block;
  text-align: center;
}

blockquote[type=cite] {
  display: block;
  margin: 1em 0;
  padding-left: 1em;
  border-left: solid;
  border-color: blue;
  border-width: thin;
}

h1, h2, h3, h4, h5, h6 {
  display: block;
  font-weight: bold;
}

h1 {
  font-size: 2em;
  margin: .67em 0;
}

h2 {
  font-size: 1.5em;
  margin: .83em 0;
}

h3 {
  font-size: 1.17em;
  margin: 1em 0;
}

h4 {
  margin: 1.33em 0;
}

h5 {
  font-size: 0.83em;
  margin: 1.67em 0;
}

h6 {
  font-size: 0.67em;
  margin: 2.33em 0;
}

listing {
  display: block;
  font-family: fixed;
  font-size: medium;
  white-space: pre;
  margin: 1em 0;
}

plaintext, pre, xmp {
  display: block;
  font-family: fixed;
  white-space: pre;
  margin: 1em 0;
}

/* tables */

table {
  display: table;
  border-spacing: 2px;
  border-collapse: separate;
  margin-top: 0;
  margin-bottom: 0;
  text-indent: 0;
  text-align: left; /* quirk */
}

table[border] {
  border: outset gray;
}

table[border] td,
table[border] th {
  border: 1px inset gray;
}

table[border="0"] td,
table[border="0"] th {
  border-width: 0;
}

/* make sure backgrounds are inherited in tables  -- see bug 4510 */
td, th, tr {
  background: inherit;
}

/* caption inherits from table not table-outer */
caption {
  display: table-caption;
  text-align: center;
}

tr {
  display: table-row;
  vertical-align: inherit;
}

col {
  display: table-column;
}

colgroup {
  display: table-column-group;
}

tbody {
  display: table-row-group;
  vertical-align: middle;
}

thead {
  display: table-header-group;
  vertical-align: middle;
}

tfoot {
  display: table-footer-group;
  vertical-align: middle;
}

/* To simulate tbody auto-insertion */
table > tr {
  vertical-align: middle;
}

td {
  display: table-cell;
  vertical-align: inherit;
  text-align: inherit;
  padding: 1px;
}

th {
  display: table-cell;
  vertical-align: inherit;
  text-align: center;
  font-weight: bold;
  padding: 1px;
}

/* inlines */

q::before {
  content: open-quote;
}

q::after {
  content: close-quote;
}

:link {
  color: #00c;
  text-decoration: underline;
}

b, strong {
  font-weight: bolder;
}

i, cite, em, var, dfn {
  font-style: italic;
}

tt, code, kbd, samp {
  font-family: fixed;
}

u, ins {
  text-decoration: underline;
}

s, strike, del {
  text-decoration: line-through;
}

big {
  font-size: larger;
}

small {
  font-size: smaller;
}

sub {
  vertical-align: sub;
  font-size: smaller;
  line-height: normal;
}

sup {
  vertical-align: super;
  font-size: smaller;
  line-height: normal;
}

nobr {
  white-space: nowrap;
}

mark {
  background: yellow;
  color: black;
}

/* titles */

abbr[title], acronym[title] {
  text-decoration: dotted underline;
}

/* lists */

ul, menu, dir {
  display: block;
  list-style-type: disc;
  margin: 1em 0;
  padding-left: 40px;
}

ol {
  display: block;
  list-style-type: decimal;
  margin: 1em 0;
  padding-left: 40px;
}

li {
  display: list-item;
}

/*li::before {
  display: -dompdf-list-bullet !important;
  content: counter(-dompdf-default-counter) ". ";
  padding-right: 0.5em;
}*/

/* nested lists have no top/bottom margins */
:matches(ul, ol, dir, menu, dl) ul,
:matches(ul, ol, dir, menu, dl) ol,
:matches(ul, ol, dir, menu, dl) dir,
:matches(ul, ol, dir, menu, dl) menu,
:matches(ul, ol, dir, menu, dl) dl {
  margin-top: 0;
  margin-bottom: 0;
}

/* 2 deep unordered lists use a circle */
:matches(ul, ol, dir, menu) ul,
:matches(ul, ol, dir, menu) ul,
:matches(ul, ol, dir, menu) ul,
:matches(ul, ol, dir, menu) ul {
  list-style-type: circle;
}

/* 3 deep (or more) unordered lists use a square */
:matches(ul, ol, dir, menu) :matches(ul, ol, dir, menu) ul,
:matches(ul, ol, dir, menu) :matches(ul, ol, dir, menu) menu,
:matches(ul, ol, dir, menu) :matches(ul, ol, dir, menu) dir {
  list-style-type: square;
}

/* forms */
/* From https://www.w3.org/TR/css-ui-3/#default-style-sheet */
form {
  display: block;
}

input, button, select {
  display: inline-block;
  font-family: sans-serif;
}

input[type=text],
input[type=password],
select {
  width: 12em;
}

input[type=text],
input[type=password],
input[type=button],
input[type=submit],
input[type=reset],
input[type=file],
button,
textarea,
select {
  background: #FFF;
  border: 1px solid #999;
  padding: 2px;
  margin: 2px;
}

input[type=button],
input[type=submit],
input[type=reset],
input[type=file],
button {
  background: #CCC;
  text-align: center;
}

input[type=file] {
  width: 8em;
}

input[type=text]::before,
input[type=button]::before,
input[type=submit]::before,
input[type=reset]::before {
  content: attr(value);
}

input[type=file]::before {
  content: "Choose a file";
}

input[type=password][value]::before {
  font-family: "DejaVu Sans" !important;
  content: "\2022\2022\2022\2022\2022\2022\2022\2022";
  line-height: 1em;
}

input[type=checkbox],
input[type=radio],
select::after {
  font-family: "DejaVu Sans" !important;
  font-size: 18px;
  line-height: 1;
}

input[type=checkbox]::before {
  content: "\2610";
}

input[type=checkbox][checked]::before {
  content: "\2611";
}

input[type=radio]::before {
  content: "\25CB";
}

input[type=radio][checked]::before {
  content: "\25C9";
}

textarea {
  display: block;
  height: 3em;
  overflow: hidden;
  font-family: monospace;
  white-space: pre-wrap;
  word-wrap: break-word;
}

select {
  position: relative!important;
  overflow: hidden!important;
}

select::after {
  position: absolute;
  right: 0;
  top: 0;
  height: 5em;
  width: 1.4em;
  text-align: center;
  background: #CCC;
  content: "\25BE";
}

select option {
  display: none;
}

select option[selected] {
  display: inline;
}

fieldset {
  display: block;
  margin: 0.6em 2px 2px;
  padding: 0.75em;
  border: 1pt groove #666;
  position: relative;
}

fieldset > legend {
  position: absolute;
  top: -0.6em;
  left: 0.75em;
  padding: 0 0.3em;
  background: white;
}

legend {
  display: inline-block;
}

/* leafs */

hr {
  display: block;
  height: 0;
  border: 1px inset;
  margin: 0.5em auto 0.5em auto;
}

hr[size="1"] {
  border-style: solid none none none;
}

iframe {
  border: 2px inset;
}

noframes {
  display: block;
}

br {
  display: -dompdf-br;
}

img, img_generated {
  display: -dompdf-image !important;
}

dompdf_generated {
  display: inline;
}

/* hidden elements */
area, base, basefont, head, meta, script, style, title,
noembed, param {
  display: none;
  -dompdf-keep: yes;
}
<?php
/**
 * @package dompdf
 * @link    https://github.com/dompdf/dompdf
 * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
 */

// FIXME: Need to sanity check inputs to this class
namespace Dompdf\Adapter;

use Dompdf\Canvas;
use Dompdf\Dompdf;
use Dompdf\Exception;
use Dompdf\FontMetrics;
use Dompdf\Helpers;
use Dompdf\Image\Cache;
use FontLib\Exception\FontNotFoundException;

/**
 * PDF rendering interface
 *
 * Dompdf\Adapter\CPDF provides a simple stateless interface to the stateful one
 * provided by the Cpdf class.
 *
 * Unless otherwise mentioned, all dimensions are in points (1/72 in).  The
 * coordinate origin is in the top left corner, and y values increase
 * downwards.
 *
 * See {@link http://www.ros.co.nz/pdf/} for more complete documentation
 * on the underlying {@link Cpdf} class.
 *
 * @package dompdf
 */
class CPDF implements Canvas
{

    /**
     * Dimensions of paper sizes in points
     *
     * @var array
     */
    static $PAPER_SIZES = [
        "4a0" => [0.0, 0.0, 4767.87, 6740.79],
        "2a0" => [0.0, 0.0, 3370.39, 4767.87],
        "a0" => [0.0, 0.0, 2383.94, 3370.39],
        "a1" => [0.0, 0.0, 1683.78, 2383.94],
        "a2" => [0.0, 0.0, 1190.55, 1683.78],
        "a3" => [0.0, 0.0, 841.89, 1190.55],
        "a4" => [0.0, 0.0, 595.28, 841.89],
        "a5" => [0.0, 0.0, 419.53, 595.28],
        "a6" => [0.0, 0.0, 297.64, 419.53],
        "a7" => [0.0, 0.0, 209.76, 297.64],
        "a8" => [0.0, 0.0, 147.40, 209.76],
        "a9" => [0.0, 0.0, 104.88, 147.40],
        "a10" => [0.0, 0.0, 73.70, 104.88],
        "b0" => [0.0, 0.0, 2834.65, 4008.19],
        "b1" => [0.0, 0.0, 2004.09, 2834.65],
        "b2" => [0.0, 0.0, 1417.32, 2004.09],
        "b3" => [0.0, 0.0, 1000.63, 1417.32],
        "b4" => [0.0, 0.0, 708.66, 1000.63],
        "b5" => [0.0, 0.0, 498.90, 708.66],
        "b6" => [0.0, 0.0, 354.33, 498.90],
        "b7" => [0.0, 0.0, 249.45, 354.33],
        "b8" => [0.0, 0.0, 175.75, 249.45],
        "b9" => [0.0, 0.0, 124.72, 175.75],
        "b10" => [0.0, 0.0, 87.87, 124.72],
        "c0" => [0.0, 0.0, 2599.37, 3676.54],
        "c1" => [0.0, 0.0, 1836.85, 2599.37],
        "c2" => [0.0, 0.0, 1298.27, 1836.85],
        "c3" => [0.0, 0.0, 918.43, 1298.27],
        "c4" => [0.0, 0.0, 649.13, 918.43],
        "c5" => [0.0, 0.0, 459.21, 649.13],
        "c6" => [0.0, 0.0, 323.15, 459.21],
        "c7" => [0.0, 0.0, 229.61, 323.15],
        "c8" => [0.0, 0.0, 161.57, 229.61],
        "c9" => [0.0, 0.0, 113.39, 161.57],
        "c10" => [0.0, 0.0, 79.37, 113.39],
        "ra0" => [0.0, 0.0, 2437.80, 3458.27],
        "ra1" => [0.0, 0.0, 1729.13, 2437.80],
        "ra2" => [0.0, 0.0, 1218.90, 1729.13],
        "ra3" => [0.0, 0.0, 864.57, 1218.90],
        "ra4" => [0.0, 0.0, 609.45, 864.57],
        "sra0" => [0.0, 0.0, 2551.18, 3628.35],
        "sra1" => [0.0, 0.0, 1814.17, 2551.18],
        "sra2" => [0.0, 0.0, 1275.59, 1814.17],
        "sra3" => [0.0, 0.0, 907.09, 1275.59],
        "sra4" => [0.0, 0.0, 637.80, 907.09],
        "letter" => [0.0, 0.0, 612.00, 792.00],
        "half-letter" => [0.0, 0.0, 396.00, 612.00],
        "legal" => [0.0, 0.0, 612.00, 1008.00],
        "ledger" => [0.0, 0.0, 1224.00, 792.00],
        "tabloid" => [0.0, 0.0, 792.00, 1224.00],
        "executive" => [0.0, 0.0, 521.86, 756.00],
        "folio" => [0.0, 0.0, 612.00, 936.00],
        "commercial #10 envelope" => [0.0, 0.0, 684.00, 297.00],
        "catalog #10 1/2 envelope" => [0.0, 0.0, 648.00, 864.00],
        "8.5x11" => [0.0, 0.0, 612.00, 792.00],
        "8.5x14" => [0.0, 0.0, 612.00, 1008.00],
        "11x17" => [0.0, 0.0, 792.00, 1224.00],
    ];

    /**
     * The Dompdf object
     *
     * @var Dompdf
     */
    protected $_dompdf;

    /**
     * Instance of Cpdf class
     *
     * @var \Dompdf\Cpdf
     */
    protected $_pdf;

    /**
     * PDF width, in points
     *
     * @var float
     */
    protected $_width;

    /**
     * PDF height, in points
     *
     * @var float
     */
    protected $_height;

    /**
     * Current page number
     *
     * @var int
     */
    protected $_page_number;

    /**
     * Total number of pages
     *
     * @var int
     */
    protected $_page_count;

    /**
     * Array of pages for accessing after rendering is initially complete
     *
     * @var array
     */
    protected $_pages;

    /**
     * Currently-applied opacity level (0 - 1)
     *
     * @var float
     */
    protected $_current_opacity = 1;

    public function __construct($paper = "letter", string $orientation = "portrait", ?Dompdf $dompdf = null)
    {
        if (is_array($paper)) {
            $size = array_map("floatval", $paper);
        } else {
            $paper = strtolower($paper);
            $size = self::$PAPER_SIZES[$paper] ?? self::$PAPER_SIZES["letter"];
        }

        if (strtolower($orientation) === "landscape") {
            [$size[2], $size[3]] = [$size[3], $size[2]];
        }

        if ($dompdf === null) {
            $this->_dompdf = new Dompdf();
        } else {
            $this->_dompdf = $dompdf;
        }

        $this->_pdf = new \Dompdf\Cpdf(
            $size,
            true,
            $this->_dompdf->getOptions()->getFontCache(),
            $this->_dompdf->getOptions()->getTempDir()
        );

        $this->_pdf->addInfo("Producer", sprintf("%s + CPDF", $this->_dompdf->version));
        $time = substr_replace(date('YmdHisO'), '\'', -2, 0) . '\'';
        $this->_pdf->addInfo("CreationDate", "D:$time");
        $this->_pdf->addInfo("ModDate", "D:$time");

        $this->_width = $size[2] - $size[0];
        $this->_height = $size[3] - $size[1];

        $this->_page_number = $this->_page_count = 1;

        $this->_pages = [$this->_pdf->getFirstPageId()];
    }

    public function get_dompdf()
    {
        return $this->_dompdf;
    }

    /**
     * Returns the Cpdf instance
     *
     * @return \Dompdf\Cpdf
     */
    public function get_cpdf()
    {
        return $this->_pdf;
    }

    public function add_info(string $label, string $value): void
    {
        $this->_pdf->addInfo($label, $value);
    }

    /**
     * Opens a new 'object'
     *
     * While an object is open, all drawing actions are recorded in the object,
     * as opposed to being drawn on the current page.  Objects can be added
     * later to a specific page or to several pages.
     *
     * The return value is an integer ID for the new object.
     *
     * @see CPDF::close_object()
     * @see CPDF::add_object()
     *
     * @return int
     */
    public function open_object()
    {
        $ret = $this->_pdf->openObject();
        $this->_pdf->saveState();
        return $ret;
    }

    /**
     * Reopens an existing 'object'
     *
     * @see CPDF::open_object()
     * @param int $object the ID of a previously opened object
     */
    public function reopen_object($object)
    {
        $this->_pdf->reopenObject($object);
        $this->_pdf->saveState();
    }

    /**
     * Closes the current 'object'
     *
     * @see CPDF::open_object()
     */
    public function close_object()
    {
        $this->_pdf->restoreState();
        $this->_pdf->closeObject();
    }

    /**
     * Adds a specified 'object' to the document
     *
     * $object int specifying an object created with {@link
     * CPDF::open_object()}.  $where can be one of:
     * - 'add' add to current page only
     * - 'all' add to every page from the current one onwards
     * - 'odd' add to all odd numbered pages from now on
     * - 'even' add to all even numbered pages from now on
     * - 'next' add the object to the next page only
     * - 'nextodd' add to all odd numbered pages from the next one
     * - 'nexteven' add to all even numbered pages from the next one
     *
     * @see Cpdf::addObject()
     *
     * @param int $object
     * @param string $where
     */
    public function add_object($object, $where = 'all')
    {
        $this->_pdf->addObject($object, $where);
    }

    /**
     * Stops the specified 'object' from appearing in the document.
     *
     * The object will stop being displayed on the page following the current
     * one.
     *
     * @param int $object
     */
    public function stop_object($object)
    {
        $this->_pdf->stopObject($object);
    }

    /**
     * Serialize the pdf object's current state for retrieval later
     */
    public function serialize_object($id)
    {
        return $this->_pdf->serializeObject($id);
    }

    public function reopen_serialized_object($obj)
    {
        return $this->_pdf->restoreSerializedObject($obj);
    }

    //........................................................................

    public function get_width()
    {
        return $this->_width;
    }

    public function get_height()
    {
        return $this->_height;
    }

    public function get_page_number()
    {
        return $this->_page_number;
    }

    public function get_page_count()
    {
        return $this->_page_count;
    }

    /**
     * Sets the current page number
     *
     * @param int $num
     */
    public function set_page_number($num)
    {
        $this->_page_number = $num;
    }

    public function set_page_count($count)
    {
        $this->_page_count = $count;
    }

    /**
     * Sets the stroke color
     *
     * See {@link Style::set_color()} for the format of the color array.
     *
     * @param array $color
     */
    protected function _set_stroke_color($color)
    {
        $this->_pdf->setStrokeColor($color);
        $alpha = isset($color["alpha"]) ? $color["alpha"] : 1;
        $alpha *= $this->_current_opacity;
        $this->_set_line_transparency("Normal", $alpha);
    }

    /**
     * Sets the fill colour
     *
     * See {@link Style::set_color()} for the format of the colour array.
     *
     * @param array $color
     */
    protected function _set_fill_color($color)
    {
        $this->_pdf->setColor($color);
        $alpha = isset($color["alpha"]) ? $color["alpha"] : 1;
        $alpha *= $this->_current_opacity;
        $this->_set_fill_transparency("Normal", $alpha);
    }

    /**
     * Sets line transparency
     * @see Cpdf::setLineTransparency()
     *
     * Valid blend modes are (case-sensitive):
     *
     * Normal, Multiply, Screen, Overlay, Darken, Lighten,
     * ColorDodge, ColorBurn, HardLight, SoftLight, Difference,
     * Exclusion
     *
     * @param string $mode    the blending mode to use
     * @param float  $opacity 0.0 fully transparent, 1.0 fully opaque
     */
    protected function _set_line_transparency($mode, $opacity)
    {
        $this->_pdf->setLineTransparency($mode, $opacity);
    }

    /**
     * Sets fill transparency
     * @see Cpdf::setFillTransparency()
     *
     * Valid blend modes are (case-sensitive):
     *
     * Normal, Multiply, Screen, Overlay, Darken, Lighten,
     * ColorDogde, ColorBurn, HardLight, SoftLight, Difference,
     * Exclusion
     *
     * @param string $mode    the blending mode to use
     * @param float  $opacity 0.0 fully transparent, 1.0 fully opaque
     */
    protected function _set_fill_transparency($mode, $opacity)
    {
        $this->_pdf->setFillTransparency($mode, $opacity);
    }

    /**
     * Sets the line style
     *
     * @see Cpdf::setLineStyle()
     *
     * @param float  $width
     * @param string $cap
     * @param string $join
     * @param array  $dash
     */
    protected function _set_line_style($width, $cap, $join, $dash)
    {
        $this->_pdf->setLineStyle($width, $cap, $join, $dash);
    }

    public function set_opacity(float $opacity, string $mode = "Normal"): void
    {
        $this->_set_line_transparency($mode, $opacity);
        $this->_set_fill_transparency($mode, $opacity);
        $this->_current_opacity = $opacity;
    }

    public function set_default_view($view, $options = [])
    {
        array_unshift($options, $view);
        call_user_func_array([$this->_pdf, "openHere"], $options);
    }

    /**
     * Remaps y coords from 4th to 1st quadrant
     *
     * @param float $y
     * @return float
     */
    protected function y($y)
    {
        return $this->_height - $y;
    }

    public function line($x1, $y1, $x2, $y2, $color, $width, $style = [], $cap = "butt")
    {
        $this->_set_stroke_color($color);
        $this->_set_line_style($width, $cap, "", $style);

        $this->_pdf->line($x1, $this->y($y1),
            $x2, $this->y($y2));
        $this->_set_line_transparency("Normal", $this->_current_opacity);
    }

    public function arc($x, $y, $r1, $r2, $astart, $aend, $color, $width, $style = [], $cap = "butt")
    {
        $this->_set_stroke_color($color);
        $this->_set_line_style($width, $cap, "", $style);

        $this->_pdf->ellipse($x, $this->y($y), $r1, $r2, 0, 8, $astart, $aend, false, false, true, false);
        $this->_set_line_transparency("Normal", $this->_current_opacity);
    }

    public function rectangle($x1, $y1, $w, $h, $color, $width, $style = [], $cap = "butt")
    {
        $this->_set_stroke_color($color);
        $this->_set_line_style($width, $cap, "", $style);
        $this->_pdf->rectangle($x1, $this->y($y1) - $h, $w, $h);
        $this->_set_line_transparency("Normal", $this->_current_opacity);
    }

    public function filled_rectangle($x1, $y1, $w, $h, $color)
    {
        $this->_set_fill_color($color);
        $this->_pdf->filledRectangle($x1, $this->y($y1) - $h, $w, $h);
        $this->_set_fill_transparency("Normal", $this->_current_opacity);
    }

    public function clipping_rectangle($x1, $y1, $w, $h)
    {
        $this->_pdf->clippingRectangle($x1, $this->y($y1) - $h, $w, $h);
    }

    public function clipping_roundrectangle($x1, $y1, $w, $h, $rTL, $rTR, $rBR, $rBL)
    {
        $this->_pdf->clippingRectangleRounded($x1, $this->y($y1) - $h, $w, $h, $rTL, $rTR, $rBR, $rBL);
    }

    public function clipping_polygon(array $points): void
    {
        // Adjust y values
        for ($i = 1; $i < count($points); $i += 2) {
            $points[$i] = $this->y($points[$i]);
        }

        $this->_pdf->clippingPolygon($points);
    }

    public function clipping_end()
    {
        $this->_pdf->clippingEnd();
    }

    public function save()
    {
        $this->_pdf->saveState();
    }

    public function restore()
    {
        $this->_pdf->restoreState();
    }

    public function rotate($angle, $x, $y)
    {
        $this->_pdf->rotate($angle, $x, $y);
    }

    public function skew($angle_x, $angle_y, $x, $y)
    {
        $this->_pdf->skew($angle_x, $angle_y, $x, $y);
    }

    public function scale($s_x, $s_y, $x, $y)
    {
        $this->_pdf->scale($s_x, $s_y, $x, $y);
    }

    public function translate($t_x, $t_y)
    {
        $this->_pdf->translate($t_x, $t_y);
    }

    public function transform($a, $b, $c, $d, $e, $f)
    {
        $this->_pdf->transform([$a, $b, $c, $d, $e, $f]);
    }

    public function polygon($points, $color, $width = null, $style = [], $fill = false)
    {
        $this->_set_fill_color($color);
        $this->_set_stroke_color($color);

        if (!$fill && isset($width)) {
            $this->_set_line_style($width, "square", "miter", $style);
        }

        // Adjust y values
        for ($i = 1; $i < count($points); $i += 2) {
            $points[$i] = $this->y($points[$i]);
        }

        $this->_pdf->polygon($points, $fill);

        $this->_set_fill_transparency("Normal", $this->_current_opacity);
        $this->_set_line_transparency("Normal", $this->_current_opacity);
    }

    public function circle($x, $y, $r, $color, $width = null, $style = [], $fill = false)
    {
        $this->_set_fill_color($color);
        $this->_set_stroke_color($color);

        if (!$fill && isset($width)) {
            $this->_set_line_style($width, "round", "round", $style);
        }

        $this->_pdf->ellipse($x, $this->y($y), $r, 0, 0, 8, 0, 360, 1, $fill);

        $this->_set_fill_transparency("Normal", $this->_current_opacity);
        $this->_set_line_transparency("Normal", $this->_current_opacity);
    }

    /**
     * Convert image to a PNG image
     *
     * @param string $image_url
     * @param string $type
     *
     * @return string|null The url of the newly converted image
     */
    protected function _convert_to_png($image_url, $type)
    {
        $filename = Cache::getTempImage($image_url);

        if ($filename !== null && file_exists($filename)) {
            return $filename;
        }
 
        $func_name = "imagecreatefrom$type";

        set_error_handler([Helpers::class, "record_warnings"]);

        if (!function_exists($func_name)) {
            if (!method_exists(Helpers::class, $func_name)) {
                throw new Exception("Function $func_name() not found.  Cannot convert $type image: $image_url.  Please install the image PHP extension.");
            }
            $func_name = [Helpers::class, $func_name];
        }

        try {
            $im = call_user_func($func_name, $image_url);

            if ($im) {
                imageinterlace($im, false);

                $tmp_dir = $this->_dompdf->getOptions()->getTempDir();
                $tmp_name = @tempnam($tmp_dir, "{$type}_dompdf_img_");
                @unlink($tmp_name);
                $filename = "$tmp_name.png";

                imagepng($im, $filename);
                imagedestroy($im);
            } else {
                $filename = null;
            }
        } finally {
            restore_error_handler();
        }

        if ($filename !== null) {
            Cache::addTempImage($image_url, $filename);
        }

        return $filename;
    }

    public function image($img, $x, $y, $w, $h, $resolution = "normal")
    {
        [$width, $height, $type] = Helpers::dompdf_getimagesize($img, $this->get_dompdf()->getHttpContext());

        $debug_png = $this->_dompdf->getOptions()->getDebugPng();

        if ($debug_png) {
            print "[image:$img|$width|$height|$type]";
        }

        switch ($type) {
            case "jpeg":
                if ($debug_png) {
                    print '!!!jpg!!!';
                }
                $this->_pdf->addJpegFromFile($img, $x, $this->y($y) - $h, $w, $h);
                break;

            case "webp":
            /** @noinspection PhpMissingBreakStatementInspection */
            case "gif":
            /** @noinspection PhpMissingBreakStatementInspection */
            case "bmp":
                if ($debug_png) print "!!!{$type}!!!";
                $img = $this->_convert_to_png($img, $type);
                if ($img === null) {
                    if ($debug_png) print '!!!conversion to PDF failed!!!';
                    $this->image(Cache::$broken_image, $x, $y, $w, $h, $resolution);
                    break;
                }

            case "png":
                if ($debug_png) print '!!!png!!!';

                $this->_pdf->addPngFromFile($img, $x, $this->y($y) - $h, $w, $h);
                break;

            case "svg":
                if ($debug_png) print '!!!SVG!!!';

                $this->_pdf->addSvgFromFile($img, $x, $this->y($y) - $h, $w, $h);
                break;

            default:
                if ($debug_png) print '!!!unknown!!!';
        }
    }

    public function select($x, $y, $w, $h, $font, $size, $color = [0, 0, 0], $opts = [])
    {
        $pdf = $this->_pdf;

        $font .= ".afm";
        $pdf->selectFont($font);

        if (!isset($pdf->acroFormId)) {
            $pdf->addForm();
        }

        $ft = \Dompdf\Cpdf::ACROFORM_FIELD_CHOICE;
        $ff = \Dompdf\Cpdf::ACROFORM_FIELD_CHOICE_COMBO;

        $id = $pdf->addFormField($ft, rand(), $x, $this->y($y) - $h, $x + $w, $this->y($y), $ff, $size, $color);
        $pdf->setFormFieldOpt($id, $opts);
    }

    public function textarea($x, $y, $w, $h, $font, $size, $color = [0, 0, 0])
    {
        $pdf = $this->_pdf;

        $font .= ".afm";
        $pdf->selectFont($font);

        if (!isset($pdf->acroFormId)) {
            $pdf->addForm();
        }

        $ft = \Dompdf\Cpdf::ACROFORM_FIELD_TEXT;
        $ff = \Dompdf\Cpdf::ACROFORM_FIELD_TEXT_MULTILINE;

        $pdf->addFormField($ft, rand(), $x, $this->y($y) - $h, $x + $w, $this->y($y), $ff, $size, $color);
    }

    public function input($x, $y, $w, $h, $type, $font, $size, $color = [0, 0, 0])
    {
        $pdf = $this->_pdf;

        $font .= ".afm";
        $pdf->selectFont($font);

        if (!isset($pdf->acroFormId)) {
            $pdf->addForm();
        }

        $ft = \Dompdf\Cpdf::ACROFORM_FIELD_TEXT;
        $ff = 0;

        switch ($type) {
            case 'text':
                $ft = \Dompdf\Cpdf::ACROFORM_FIELD_TEXT;
                break;
            case 'password':
                $ft = \Dompdf\Cpdf::ACROFORM_FIELD_TEXT;
                $ff = \Dompdf\Cpdf::ACROFORM_FIELD_TEXT_PASSWORD;
                break;
            case 'submit':
                $ft = \Dompdf\Cpdf::ACROFORM_FIELD_BUTTON;
                break;
        }

        $pdf->addFormField($ft, rand(), $x, $this->y($y) - $h, $x + $w, $this->y($y), $ff, $size, $color);
    }

    public function text($x, $y, $text, $font, $size, $color = [0, 0, 0], $word_space = 0.0, $char_space = 0.0, $angle = 0.0)
    {
        $pdf = $this->_pdf;

        $this->_set_fill_color($color);

        $is_font_subsetting = $this->_dompdf->getOptions()->getIsFontSubsettingEnabled();
        $pdf->selectFont($font . '.afm', '', true, $is_font_subsetting);

        $pdf->addText($x, $this->y($y) - $pdf->getFontHeight($size), $size, $text, $angle, $word_space, $char_space);

        $this->_set_fill_transparency("Normal", $this->_current_opacity);
    }

    public function javascript($code)
    {
        $this->_pdf->addJavascript($code);
    }

    //........................................................................

    public function add_named_dest($anchorname)
    {
        $this->_pdf->addDestination($anchorname, "Fit");
    }

    public function add_link($url, $x, $y, $width, $height)
    {
        $y = $this->y($y) - $height;

        if (strpos($url, '#') === 0) {
            // Local link
            $name = substr($url, 1);
            if ($name) {
                $this->_pdf->addInternalLink($name, $x, $y, $x + $width, $y + $height);
            }
        } else {
            $this->_pdf->addLink($url, $x, $y, $x + $width, $y + $height);
        }
    }

    /**
     * @throws FontNotFoundException
     */
    public function get_text_width($text, $font, $size, $word_spacing = 0.0, $char_spacing = 0.0)
    {
        $this->_pdf->selectFont($font, '', true, $this->_dompdf->getOptions()->getIsFontSubsettingEnabled());
        return $this->_pdf->getTextWidth($size, $text, $word_spacing, $char_spacing);
    }

    /**
     * @throws FontNotFoundException
     */
    public function get_font_height($font, $size)
    {
        $options = $this->_dompdf->getOptions();
        $this->_pdf->selectFont($font, '', true, $options->getIsFontSubsettingEnabled());

        return $this->_pdf->getFontHeight($size) * $options->getFontHeightRatio();
    }

    /*function get_font_x_height($font, $size) {
      $this->_pdf->selectFont($font);
      $ratio = $this->_dompdf->getOptions()->getFontHeightRatio();
      return $this->_pdf->getFontXHeight($size) * $ratio;
    }*/

    /**
     * @throws FontNotFoundException
     */
    public function get_font_baseline($font, $size)
    {
        $ratio = $this->_dompdf->getOptions()->getFontHeightRatio();
        return $this->get_font_height($font, $size) / $ratio;
    }

    /**
     * Processes a callback or script on every page.
     *
     * The callback function receives the four parameters `int $pageNumber`,
     * `int $pageCount`, `Canvas $canvas`, and `FontMetrics $fontMetrics`, in
     * that order. If a script is passed as string, the variables `$PAGE_NUM`,
     * `$PAGE_COUNT`, `$pdf`, and `$fontMetrics` are available instead. Passing
     * a script as string is deprecated and will be removed in a future version.
     *
     * This function can be used to add page numbers to all pages after the
     * first one, for example.
     *
     * @param callable|string $callback The callback function or PHP script to process on every page
     */
    public function page_script($callback): void
    {
        if (is_string($callback)) {
            $this->processPageScript(function (
                int $PAGE_NUM,
                int $PAGE_COUNT,
                self $pdf,
                FontMetrics $fontMetrics
            ) use ($callback) {
                eval($callback);
            });
            return;
        }

        $this->processPageScript($callback);
    }

    public function page_text($x, $y, $text, $font, $size, $color = [0, 0, 0], $word_space = 0.0, $char_space = 0.0, $angle = 0.0)
    {
        $this->processPageScript(function (int $pageNumber, int $pageCount) use ($x, $y, $text, $font, $size, $color, $word_space, $char_space, $angle) {
            $text = str_replace(
                ["{PAGE_NUM}", "{PAGE_COUNT}"],
                [$pageNumber, $pageCount],
                $text
            );
            $this->text($x, $y, $text, $font, $size, $color, $word_space, $char_space, $angle);
        });
    }

    public function page_line($x1, $y1, $x2, $y2, $color, $width, $style = [])
    {
        $this->processPageScript(function () use ($x1, $y1, $x2, $y2, $color, $width, $style) {
            $this->line($x1, $y1, $x2, $y2, $color, $width, $style);
        });
    }

    /**
     * @return int
     */
    public function new_page()
    {
        $this->_page_number++;
        $this->_page_count++;

        $ret = $this->_pdf->newPage();
        $this->_pages[] = $ret;
        return $ret;
    }

    protected function processPageScript(callable $callback): void
    {
        $pageNumber = 1;

        foreach ($this->_pages as $pid) {
            $this->reopen_object($pid);

            $fontMetrics = $this->_dompdf->getFontMetrics();
            $callback($pageNumber, $this->_page_count, $this, $fontMetrics);

            $this->close_object();
            $pageNumber++;
        }
    }

    public function stream($filename = "document.pdf", $options = [])
    {
        if (headers_sent()) {
            die("Unable to stream pdf: headers already sent");
        }

        if (!isset($options["compress"])) $options["compress"] = true;
        if (!isset($options["Attachment"])) $options["Attachment"] = true;

        $debug = !$options['compress'];
        $tmp = ltrim($this->_pdf->output($debug));

        header("Cache-Control: private");
        header("Content-Type: application/pdf");
        header("Content-Length: " . mb_strlen($tmp, "8bit"));

        $filename = str_replace(["\n", "'"], "", basename($filename, ".pdf")) . ".pdf";
        $attachment = $options["Attachment"] ? "attachment" : "inline";
        header(Helpers::buildContentDispositionHeader($attachment, $filename));

        echo $tmp;
        flush();
    }

    public function output($options = [])
    {
        if (!isset($options["compress"])) $options["compress"] = true;

        $debug = !$options['compress'];

        return $this->_pdf->output($debug);
    }

    /**
     * Returns logging messages generated by the Cpdf class
     *
     * @return string
     */
    public function get_messages()
    {
        return $this->_pdf->messages;
    }
}
<?php
/**
 * @package dompdf
 * @link    https://github.com/dompdf/dompdf
 * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
 */
namespace Dompdf\Adapter;

use Dompdf\Canvas;
use Dompdf\Dompdf;
use Dompdf\Helpers;
use Dompdf\Image\Cache;

/**
 * Image rendering interface
 *
 * Renders to an image format supported by GD (jpeg, gif, png, xpm).
 * Not super-useful day-to-day but handy nonetheless
 *
 * @package dompdf
 */
class GD implements Canvas
{
    /**
     * @var Dompdf
     */
    protected $_dompdf;

    /**
     * Resource handle for the image
     *
     * @var \GdImage|resource
     */
    protected $_img;

    /**
     * Resource handle for the image
     *
     * @var \GdImage[]|resource[]
     */
    protected $_imgs;

    /**
     * Apparent canvas width in pixels
     *
     * @var int
     */
    protected $_width;

    /**
     * Apparent canvas height in pixels
     *
     * @var int
     */
    protected $_height;

    /**
     * Actual image width in pixels
     *
     * @var int
     */
    protected $_actual_width;

    /**
     * Actual image height in pixels
     *
     * @var int
     */
    protected $_actual_height;

    /**
     * Current page number
     *
     * @var int
     */
    protected $_page_number;

    /**
     * Total number of pages
     *
     * @var int
     */
    protected $_page_count;

    /**
     * Image antialias factor
     *
     * @var float
     */
    protected $_aa_factor;

    /**
     * Allocated colors
     *
     * @var array
     */
    protected $_colors;

    /**
     * Background color
     *
     * @var int
     */
    protected $_bg_color;

    /**
     * Background color array
     *
     * @var array
     */
    protected $_bg_color_array;

    /**
     * Actual DPI
     *
     * @var int
     */
    protected $dpi;

    /**
     * Amount to scale font sizes
     *
     * Font sizes are 72 DPI, GD internally uses 96. Scale them proportionally.
     * 72 / 96 = 0.75.
     *
     * @var float
     */
    const FONT_SCALE = 0.75;

    /**
     * @param string|float[] $paper       The paper size to use as either a standard paper size (see {@link CPDF::$PAPER_SIZES}) or
     *                                    an array of the form `[x1, y1, x2, y2]` (typically `[0, 0, width, height]`).
     * @param string         $orientation The paper orientation, either `portrait` or `landscape`.
     * @param Dompdf|null    $dompdf      The Dompdf instance.
     * @param float          $aa_factor   Anti-aliasing factor, 1 for no AA
     * @param array          $bg_color    Image background color: array(r,g,b,a), 0 <= r,g,b,a <= 1
     */
    public function __construct($paper = "letter", string $orientation = "portrait", ?Dompdf $dompdf = null, float $aa_factor = 1.0, array $bg_color = [1, 1, 1, 0])
    {
        if (is_array($paper)) {
            $size = array_map("floatval", $paper);
        } else {
            $paper = strtolower($paper);
            $size = CPDF::$PAPER_SIZES[$paper] ?? CPDF::$PAPER_SIZES["letter"];
        }

        if (strtolower($orientation) === "landscape") {
            [$size[2], $size[3]] = [$size[3], $size[2]];
        }

        if ($dompdf === null) {
            $this->_dompdf = new Dompdf();
        } else {
            $this->_dompdf = $dompdf;
        }

        $this->dpi = $this->get_dompdf()->getOptions()->getDpi();

        if ($aa_factor < 1) {
            $aa_factor = 1;
        }

        $this->_aa_factor = $aa_factor;

        $size[2] *= $aa_factor;
        $size[3] *= $aa_factor;

        $this->_width = $size[2] - $size[0];
        $this->_height = $size[3] - $size[1];

        $this->_actual_width = $this->_upscale($this->_width);
        $this->_actual_height = $this->_upscale($this->_height);

        $this->_page_number = $this->_page_count = 0;

        if (is_null($bg_color) || !is_array($bg_color)) {
            // Pure white bg
            $bg_color = [1, 1, 1, 0];
        }

        $this->_bg_color_array = $bg_color;

        $this->new_page();
    }

    public function get_dompdf()
    {
        return $this->_dompdf;
    }

    /**
     * Return the GD image resource
     *
     * @return \GdImage|resource
     */
    public function get_image()
    {
        return $this->_img;
    }

    /**
     * Return the image's width in pixels
     *
     * @return int
     */
    public function get_width()
    {
        return round($this->_width / $this->_aa_factor);
    }

    /**
     * Return the image's height in pixels
     *
     * @return int
     */
    public function get_height()
    {
        return round($this->_height / $this->_aa_factor);
    }

    public function get_page_number()
    {
        return $this->_page_number;
    }

    public function get_page_count()
    {
        return $this->_page_count;
    }

    /**
     * Sets the current page number
     *
     * @param int $num
     */
    public function set_page_number($num)
    {
        $this->_page_number = $num;
    }

    public function set_page_count($count)
    {
        $this->_page_count = $count;
    }

    public function set_opacity(float $opacity, string $mode = "Normal"): void
    {
        // FIXME
    }

    /**
     * Allocate a new color.  Allocate with GD as needed and store
     * previously allocated colors in $this->_colors.
     *
     * @param array $color The new current color
     * @return int The allocated color
     */
    protected function _allocate_color($color)
    {
        $a = isset($color["alpha"]) ? $color["alpha"] : 1;

        if (isset($color["c"])) {
            $color = Helpers::cmyk_to_rgb($color);
        }

        list($r, $g, $b) = $color;

        $r = round($r * 255);
        $g = round($g * 255);
        $b = round($b * 255);
        $a = round(127 - ($a * 127));

        // Clip values
        $r = $r > 255 ? 255 : $r;
        $g = $g > 255 ? 255 : $g;
        $b = $b > 255 ? 255 : $b;
        $a = $a > 127 ? 127 : $a;

        $r = $r < 0 ? 0 : $r;
        $g = $g < 0 ? 0 : $g;
        $b = $b < 0 ? 0 : $b;
        $a = $a < 0 ? 0 : $a;

        $key = sprintf("#%02X%02X%02X%02X", $r, $g, $b, $a);

        if (isset($this->_colors[$key])) {
            return $this->_colors[$key];
        }

        if ($a != 0) {
            $this->_colors[$key] = imagecolorallocatealpha($this->get_image(), $r, $g, $b, $a);
        } else {
            $this->_colors[$key] = imagecolorallocate($this->get_image(), $r, $g, $b);
        }

        return $this->_colors[$key];
    }

    /**
     * Scales value up to the current canvas DPI from 72 DPI
     *
     * @param float $length
     * @return int
     */
    protected function _upscale($length)
    {
        return round(($length * $this->dpi) / 72 * $this->_aa_factor);
    }

    /**
     * Scales value down from the current canvas DPI to 72 DPI
     *
     * @param float $length
     * @return float
     */
    protected function _downscale($length)
    {
        return round(($length / $this->dpi * 72) / $this->_aa_factor);
    }

    protected function convertStyle(array $style, int $color, int $width): array
    {
        $gdStyle = [];

        if (count($style) === 1) {
            $style[] = $style[0];
        }

        foreach ($style as $index => $s) {
            $d = $this->_upscale($s);

            for ($i = 0; $i < $d; $i++) {
                for ($j = 0; $j < $width; $j++) {
                    $gdStyle[] = $index % 2 === 0
                        ? $color
                        : IMG_COLOR_TRANSPARENT;
                }
            }
        }

        return $gdStyle;
    }

    public function line($x1, $y1, $x2, $y2, $color, $width, $style = [], $cap = "butt")
    {
        // Account for the fact that round and square caps are expected to
        // extend outwards
        if ($cap === "round" || $cap === "square") {
            // Shift line by half width
            $w = $width / 2;
            $a = $x2 - $x1;
            $b = $y2 - $y1;
            $c = sqrt($a ** 2 + $b ** 2);
            $dx = $a * $w / $c;
            $dy = $b * $w / $c;

            $x1 -= $dx;
            $x2 -= $dx;
            $y1 -= $dy;
            $y2 -= $dy;

            // Adapt dash pattern
            if (is_array($style)) {
                foreach ($style as $index => &$s) {
                    $s = $index % 2 === 0 ? $s + $width : $s - $width;
                }
            }
        }

        // Scale by the AA factor and DPI
        $x1 = $this->_upscale($x1);
        $y1 = $this->_upscale($y1);
        $x2 = $this->_upscale($x2);
        $y2 = $this->_upscale($y2);
        $width = $this->_upscale($width);

        $c = $this->_allocate_color($color);

        // Convert the style array if required
        if (is_array($style) && count($style) > 0) {
            $gd_style = $this->convertStyle($style, $c, $width);

            if (!empty($gd_style)) {
                imagesetstyle($this->get_image(), $gd_style);
                $c = IMG_COLOR_STYLED;
            }
        }

        imagesetthickness($this->get_image(), $width);

        imageline($this->get_image(), $x1, $y1, $x2, $y2, $c);
    }

    public function arc($x, $y, $r1, $r2, $astart, $aend, $color, $width, $style = [], $cap = "butt")
    {
        // Account for the fact that round and square caps are expected to
        // extend outwards
        if ($cap === "round" || $cap === "square") {
            // Adapt dash pattern
            if (is_array($style)) {
                foreach ($style as $index => &$s) {
                    $s = $index % 2 === 0 ? $s + $width : $s - $width;
                }
            }
        }

        // Scale by the AA factor and DPI
        $x = $this->_upscale($x);
        $y = $this->_upscale($y);
        $w = $this->_upscale($r1 * 2);
        $h = $this->_upscale($r2 * 2);
        $width = $this->_upscale($width);

        // Adapt angles as imagearc counts clockwise
        $start = 360 - $aend;
        $end = 360 - $astart;

        $c = $this->_allocate_color($color);

        // Convert the style array if required
        if (is_array($style) && count($style) > 0) {
            $gd_style = $this->convertStyle($style, $c, $width);

            if (!empty($gd_style)) {
                imagesetstyle($this->get_image(), $gd_style);
                $c = IMG_COLOR_STYLED;
            }
        }

        imagesetthickness($this->get_image(), $width);

        imagearc($this->get_image(), $x, $y, $w, $h, $start, $end, $c);
    }

    public function rectangle($x1, $y1, $w, $h, $color, $width, $style = [], $cap = "butt")
    {
        // Account for the fact that round and square caps are expected to
        // extend outwards
        if ($cap === "round" || $cap === "square") {
            // Adapt dash pattern
            if (is_array($style)) {
                foreach ($style as $index => &$s) {
                    $s = $index % 2 === 0 ? $s + $width : $s - $width;
                }
            }
        }

        // Scale by the AA factor and DPI
        $x1 = $this->_upscale($x1);
        $y1 = $this->_upscale($y1);
        $w = $this->_upscale($w);
        $h = $this->_upscale($h);
        $width = $this->_upscale($width);

        $c = $this->_allocate_color($color);

        // Convert the style array if required
        if (is_array($style) && count($style) > 0) {
            $gd_style = $this->convertStyle($style, $c, $width);

            if (!empty($gd_style)) {
                imagesetstyle($this->get_image(), $gd_style);
                $c = IMG_COLOR_STYLED;
            }
        }

        imagesetthickness($this->get_image(), $width);

        if ($c === IMG_COLOR_STYLED) {
            $points = [
                $x1, $y1,
                $x1 + $w, $y1,
                $x1 + $w, $y1 + $h,
                $x1, $y1 + $h
            ];
            if (version_compare(PHP_VERSION, "8.1.0", "<")) {
                imagepolygon($this->get_image(), $points, count($points)/2, $c);
            } else {
                imagepolygon($this->get_image(), $points, $c);
            }
        } else {
            imagerectangle($this->get_image(), $x1, $y1, $x1 + $w, $y1 + $h, $c);
        }
    }

    public function filled_rectangle($x1, $y1, $w, $h, $color)
    {
        // Scale by the AA factor and DPI
        $x1 = $this->_upscale($x1);
        $y1 = $this->_upscale($y1);
        $w = $this->_upscale($w);
        $h = $this->_upscale($h);

        $c = $this->_allocate_color($color);

        imagefilledrectangle($this->get_image(), $x1, $y1, $x1 + $w, $y1 + $h, $c);
    }

    public function clipping_rectangle($x1, $y1, $w, $h)
    {
        // @todo
    }

    public function clipping_roundrectangle($x1, $y1, $w, $h, $rTL, $rTR, $rBR, $rBL)
    {
        // @todo
    }

    public function clipping_polygon(array $points): void
    {
        // @todo
    }

    public function clipping_end()
    {
        // @todo
    }

    public function save()
    {
        $this->get_dompdf()->getOptions()->setDpi(72);
    }

    public function restore()
    {
        $this->get_dompdf()->getOptions()->setDpi($this->dpi);
    }

    public function rotate($angle, $x, $y)
    {
        // @todo
    }

    public function skew($angle_x, $angle_y, $x, $y)
    {
        // @todo
    }

    public function scale($s_x, $s_y, $x, $y)
    {
        // @todo
    }

    public function translate($t_x, $t_y)
    {
        // @todo
    }

    public function transform($a, $b, $c, $d, $e, $f)
    {
        // @todo
    }

    public function polygon($points, $color, $width = null, $style = [], $fill = false)
    {
        // Scale each point by the AA factor and DPI
        foreach (array_keys($points) as $i) {
            $points[$i] = $this->_upscale($points[$i]);
        }

        $width = isset($width) ? $this->_upscale($width) : null;

        $c = $this->_allocate_color($color);

        // Convert the style array if required
        if (is_array($style) && count($style) > 0 && isset($width) && !$fill) {
            $gd_style = $this->convertStyle($style, $c, $width);

            if (!empty($gd_style)) {
                imagesetstyle($this->get_image(), $gd_style);
                $c = IMG_COLOR_STYLED;
            }
        }

        imagesetthickness($this->get_image(), isset($width) ? $width : 0);

        if ($fill) {
            if (version_compare(PHP_VERSION, "8.1.0", "<")) {
                imagefilledpolygon($this->get_image(), $points, count($points)/2, $c);
            } else {
                imagefilledpolygon($this->get_image(), $points, $c);
            }
        } else {
            if (version_compare(PHP_VERSION, "8.1.0", "<")) {
                imagepolygon($this->get_image(), $points, count($points)/2, $c);
            } else {
                imagepolygon($this->get_image(), $points, $c);
            }
        }
    }

    public function circle($x, $y, $r, $color, $width = null, $style = [], $fill = false)
    {
        // Scale by the AA factor and DPI
        $x = $this->_upscale($x);
        $y = $this->_upscale($y);
        $d = $this->_upscale(2 * $r);
        $width = isset($width) ? $this->_upscale($width) : null;

        $c = $this->_allocate_color($color);

        // Convert the style array if required
        if (is_array($style) && count($style) > 0 && isset($width) && !$fill) {
            $gd_style = $this->convertStyle($style, $c, $width);

            if (!empty($gd_style)) {
                imagesetstyle($this->get_image(), $gd_style);
                $c = IMG_COLOR_STYLED;
            }
        }

        imagesetthickness($this->get_image(), isset($width) ? $width : 0);

        if ($fill) {
            imagefilledellipse($this->get_image(), $x, $y, $d, $d, $c);
        } else {
            imageellipse($this->get_image(), $x, $y, $d, $d, $c);
        }
    }

    /**
     * @throws \Exception
     */
    public function image($img, $x, $y, $w, $h, $resolution = "normal")
    {
        $img_type = Cache::detect_type($img, $this->get_dompdf()->getHttpContext());

        if (!$img_type) {
            return;
        }

        $func_name = "imagecreatefrom$img_type";
        if (!function_exists($func_name)) {
            if (!method_exists(Helpers::class, $func_name)) {
                throw new \Exception("Function $func_name() not found.  Cannot convert $img_type image: $img.  Please install the image PHP extension.");
            }
            $func_name = [Helpers::class, $func_name];
        }
        $src = @call_user_func($func_name, $img);

        if (!$src) {
            return; // Probably should add to $_dompdf_errors or whatever here
        }

        // Scale by the AA factor and DPI
        $x = $this->_upscale($x);
        $y = $this->_upscale($y);

        $w = $this->_upscale($w);
        $h = $this->_upscale($h);

        $img_w = imagesx($src);
        $img_h = imagesy($src);

        imagecopyresampled($this->get_image(), $src, $x, $y, 0, 0, $w, $h, $img_w, $img_h);
    }

    public function text($x, $y, $text, $font, $size, $color = [0, 0, 0], $word_spacing = 0.0, $char_spacing = 0.0, $angle = 0.0)
    {
        // Scale by the AA factor and DPI
        $x = $this->_upscale($x);
        $y = $this->_upscale($y);
        $size = $this->_upscale($size) * self::FONT_SCALE;

        $h = round($this->get_font_height_actual($font, $size));
        $c = $this->_allocate_color($color);

        // imagettftext() converts numeric entities to their respective
        // character. Preserve any originally double encoded entities to be
        // represented as is.
        // eg: &amp;#160; will render &#160; rather than its character.
        $text = preg_replace('/&(#(?:x[a-fA-F0-9]+|[0-9]+);)/', '&#38;\1', $text);

        $text = mb_encode_numericentity($text, [0x0080, 0xff, 0, 0xff], 'UTF-8');

        $font = $this->get_ttf_file($font);

        // FIXME: word spacing
        imagettftext($this->get_image(), $size, $angle, $x, $y + $h, $c, $font, $text);
    }

    public function javascript($code)
    {
        // Not implemented
    }

    public function add_named_dest($anchorname)
    {
        // Not implemented
    }

    public function add_link($url, $x, $y, $width, $height)
    {
        // Not implemented
    }

    public function add_info(string $label, string $value): void
    {
        // N/A
    }

    public function set_default_view($view, $options = [])
    {
        // N/A
    }

    public function get_text_width($text, $font, $size, $word_spacing = 0.0, $char_spacing = 0.0)
    {
        $font = $this->get_ttf_file($font);
        $size = $this->_upscale($size) * self::FONT_SCALE;

        // imagettfbbox() converts numeric entities to their respective
        // character. Preserve any originally double encoded entities to be
        // represented as is.
        // eg: &amp;#160; will render &#160; rather than its character.
        $text = preg_replace('/&(#(?:x[a-fA-F0-9]+|[0-9]+);)/', '&#38;\1', $text);

        $text = mb_encode_numericentity($text, [0x0080, 0xffff, 0, 0xffff], 'UTF-8');

        // FIXME: word spacing
        list($x1, , $x2) = imagettfbbox($size, 0, $font, $text);

        // Add additional 1pt to prevent text overflow issues
        return $this->_downscale($x2 - $x1) + 1;
    }

    /**
     * @param string|null $font
     * @return string
     */
    public function get_ttf_file($font)
    {
        if ($font === null) {
            $font = "";
        }

        if ( stripos($font, ".ttf") === false ) {
            $font .= ".ttf";
        }

        if (!file_exists($font)) {
            $font_metrics = $this->_dompdf->getFontMetrics();
            $font = $font_metrics->getFont($this->_dompdf->getOptions()->getDefaultFont()) . ".ttf";
            if (!file_exists($font)) {
                if (strpos($font, "mono")) {
                    $font = $font_metrics->getFont("DejaVu Mono") . ".ttf";
                } elseif (strpos($font, "sans") !== false) {
                    $font = $font_metrics->getFont("DejaVu Sans") . ".ttf";
                } elseif (strpos($font, "serif")) {
                    $font = $font_metrics->getFont("DejaVu Serif") . ".ttf";
                } else {
                    $font = $font_metrics->getFont("DejaVu Sans") . ".ttf";
                }
            }
        }

        return $font;
    }

    public function get_font_height($font, $size)
    {
        $size = $this->_upscale($size) * self::FONT_SCALE;

        $height = $this->get_font_height_actual($font, $size);

        return $this->_downscale($height);
    }

    /**
     * @param string $font
     * @param float  $size
     *
     * @return float
     */
    protected function get_font_height_actual($font, $size)
    {
        $font = $this->get_ttf_file($font);
        $ratio = $this->_dompdf->getOptions()->getFontHeightRatio();

        // FIXME: word spacing
        list(, $y2, , , , $y1) = imagettfbbox($size, 0, $font, "MXjpqytfhl"); // Test string with ascenders, descenders and caps
        return ($y2 - $y1) * $ratio;
    }

    public function get_font_baseline($font, $size)
    {
        $ratio = $this->_dompdf->getOptions()->getFontHeightRatio();
        return $this->get_font_height($font, $size) / $ratio;
    }

    public function new_page()
    {
        $this->_page_number++;
        $this->_page_count++;

        $this->_img = imagecreatetruecolor($this->_actual_width, $this->_actual_height);

        $this->_bg_color = $this->_allocate_color($this->_bg_color_array);
        imagealphablending($this->_img, true);
        imagesavealpha($this->_img, true);
        imagefill($this->_img, 0, 0, $this->_bg_color);

        $this->_imgs[] = $this->_img;
    }

    public function open_object()
    {
        // N/A
    }

    public function close_object()
    {
        // N/A
    }

    public function add_object()
    {
        // N/A
    }

    public function page_script($callback): void
    {
        // N/A
    }

    public function page_text($x, $y, $text, $font, $size, $color = [0, 0, 0], $word_space = 0.0, $char_space = 0.0, $angle = 0.0)
    {
        // N/A
    }

    public function page_line($x1, $y1, $x2, $y2, $color, $width, $style = [])
    {
        // N/A
    }

    /**
     * Streams the image to the client.
     *
     * @param string $filename The filename to present to the client.
     * @param array  $options  Associative array: 'type' => jpeg|jpg|png; 'quality' => 0 - 100 (JPEG only);
     *     'page' => Number of the page to output (defaults to the first); 'Attachment': 1 or 0 (default 1).
     */
    public function stream($filename, $options = [])
    {
        if (headers_sent()) {
            die("Unable to stream image: headers already sent");
        }

        if (!isset($options["type"])) $options["type"] = "png";
        if (!isset($options["Attachment"])) $options["Attachment"] = true;
        $type = strtolower($options["type"]);

        switch ($type) {
            case "jpg":
            case "jpeg":
                $contentType = "image/jpeg";
                $extension = ".jpg";
                break;
            case "png":
            default:
                $contentType = "image/png";
                $extension = ".png";
                break;
        }

        header("Cache-Control: private");
        header("Content-Type: $contentType");

        $filename = str_replace(["\n", "'"], "", basename($filename, ".$type")) . $extension;
        $attachment = $options["Attachment"] ? "attachment" : "inline";
        header(Helpers::buildContentDispositionHeader($attachment, $filename));

        $this->_output($options);
        flush();
    }

    /**
     * Returns the image as a string.
     *
     * @param array $options Associative array: 'type' => jpeg|jpg|png; 'quality' => 0 - 100 (JPEG only);
     *     'page' => Number of the page to output (defaults to the first).
     * @return string
     */
    public function output($options = [])
    {
        ob_start();

        $this->_output($options);

        return ob_get_clean();
    }

    /**
     * Outputs the image stream directly.
     *
     * @param array $options Associative array: 'type' => jpeg|jpg|png; 'quality' => 0 - 100 (JPEG only);
     *     'page' => Number of the page to output (defaults to the first).
     */
    protected function _output($options = [])
    {
        if (!isset($options["type"])) $options["type"] = "png";
        if (!isset($options["page"])) $options["page"] = 1;
        $type = strtolower($options["type"]);

        if (isset($this->_imgs[$options["page"] - 1])) {
            $img = $this->_imgs[$options["page"] - 1];
        } else {
            $img = $this->_imgs[0];
        }

        // Perform any antialiasing
        if ($this->_aa_factor != 1) {
            $dst_w = round($this->_actual_width / $this->_aa_factor);
            $dst_h = round($this->_actual_height / $this->_aa_factor);
            $dst = imagecreatetruecolor($dst_w, $dst_h);
            imagecopyresampled($dst, $img, 0, 0, 0, 0,
                $dst_w, $dst_h,
                $this->_actual_width, $this->_actual_height);
        } else {
            $dst = $img;
        }

        switch ($type) {
            case "jpg":
            case "jpeg":
                if (!isset($options["quality"])) {
                    $options["quality"] = 75;
                }

                imagejpeg($dst, null, $options["quality"]);
                break;
            case "png":
            default:
                imagepng($dst);
                break;
        }

        if ($this->_aa_factor != 1) {
            imagedestroy($dst);
        }
    }
}
<?php
/**
 * @package dompdf
 * @link    https://github.com/dompdf/dompdf
 * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
 */
namespace Dompdf\Adapter;

use Dompdf\Canvas;
use Dompdf\Dompdf;
use Dompdf\Exception;
use Dompdf\FontMetrics;
use Dompdf\Helpers;
use Dompdf\Image\Cache;

/**
 * PDF rendering interface
 *
 * Dompdf\Adapter\PDFLib provides a simple, stateless interface to the one
 * provided by PDFLib.
 *
 * Unless otherwise mentioned, all dimensions are in points (1/72 in).
 * The coordinate origin is in the top left corner and y values
 * increase downwards.
 *
 * See {@link http://www.pdflib.com/} for more complete documentation
 * on the underlying PDFlib functions.
 *
 * @package dompdf
 */
class PDFLib implements Canvas
{

    /**
     * Dimensions of paper sizes in points
     *
     * @var array
     */
    public static $PAPER_SIZES = []; // Set to Dompdf\Adapter\CPDF::$PAPER_SIZES below.

    /**
     * Whether to create PDFs in memory or on disk
     *
     * @var bool
     */
    static $IN_MEMORY = true;

    /**
     * Saves the major version of PDFLib for compatibility requests
     *
     * @var null|int
     */
    protected static $MAJOR_VERSION = null;


    /**
     * Transforms the list of native fonts into PDFLib compatible names (casesensitive)
     *
     * @var array
     */
    public static $nativeFontsTpPDFLib = [
        "courier"               => "Courier",
        "courier-bold"          => "Courier-Bold",
        "courier-oblique"       => "Courier-Oblique",
        "courier-boldoblique"   => "Courier-BoldOblique",
        "helvetica"             => "Helvetica",
        "helvetica-bold"        => "Helvetica-Bold",
        "helvetica-oblique"     => "Helvetica-Oblique",
        "helvetica-boldoblique" => "Helvetica-BoldOblique",
        "times"                 => "Times-Roman",
        "times-roman"           => "Times-Roman",
        "times-bold"            => "Times-Bold",
        "times-italic"          => "Times-Italic",
        "times-bolditalic"      => "Times-BoldItalic",
        "symbol"                => "Symbol",
        "zapfdinbats"           => "ZapfDingbats",
        "zapfdingbats"          => "ZapfDingbats",
    ];

    /**
     * @var \Dompdf\Dompdf
     */
    protected $_dompdf;

    /**
     * Instance of PDFLib class
     *
     * @var \PDFLib
     */
    protected $_pdf;

    /**
     * Name of temporary file used for PDFs created on disk
     *
     * @var string
     */
    protected $_file;

    /**
     * PDF width, in points
     *
     * @var float
     */
    protected $_width;

    /**
     * PDF height, in points
     *
     * @var float
     */
    protected $_height;

    /**
     * Last fill color used
     *
     * @var array
     */
    protected $_last_fill_color;

    /**
     * Last stroke color used
     *
     * @var array
     */
    protected $_last_stroke_color;

    /**
     * The current opacity level
     *
     * @var float|null
     */
    protected $_current_opacity;

    /**
     * Cache of image handles
     *
     * @var array
     */
    protected $_imgs;

    /**
     * Cache of font handles
     *
     * @var array
     */
    protected $_fonts;

    /**
     * Cache of fontFile checks
     *
     * @var array
     */
    protected $_fontsFiles;

    /**
     * List of objects (templates) to add to multiple pages
     *
     * @var array
     */
    protected $_objs;

    /**
     * List of gstate objects created for this PDF (for reuse)
     *
     * @var array
     */
    protected $_gstates = [];

    /**
     * Current page number
     *
     * @var int
     */
    protected $_page_number;

    /**
     * Total number of pages
     *
     * @var int
     */
    protected $_page_count;

    /**
     * Array of pages for accessing after rendering is initially complete
     *
     * @var array
     */
    protected $_pages;

    public function __construct($paper = "letter", string $orientation = "portrait", ?Dompdf $dompdf = null)
    {
        if (is_array($paper)) {
            $size = array_map("floatval", $paper);
        } else {
            $paper = strtolower($paper);
            $size = self::$PAPER_SIZES[$paper] ?? self::$PAPER_SIZES["letter"];
        }

        if (strtolower($orientation) === "landscape") {
            [$size[2], $size[3]] = [$size[3], $size[2]];
        }

        $this->_width = $size[2] - $size[0];
        $this->_height = $size[3] - $size[1];

        if ($dompdf === null) {
            $this->_dompdf = new Dompdf();
        } else {
            $this->_dompdf = $dompdf;
        }

        $this->_pdf = new \PDFLib();

        $license = $dompdf->getOptions()->getPdflibLicense();
        if (strlen($license) > 0) {
            $this->setPDFLibParameter("license", $license);
        }

        if ($this->getPDFLibMajorVersion() < 10) {
            $this->setPDFLibParameter("textformat", "utf8");
        }
        if ($this->getPDFLibMajorVersion() >= 7) {
            $this->setPDFLibParameter("errorpolicy", "return");
            //            $this->_pdf->set_option('logging={filename=' . \APP_PATH . '/logs/pdflib.log classes={api=1 warning=2}}');
            //            $this->_pdf->set_option('errorpolicy=exception');
        } else {
            $this->setPDFLibParameter("fontwarning", "false");
        }

        $searchPath = $this->_dompdf->getOptions()->getFontDir();
        if (empty($searchPath) === false) {
            $this->_pdf->set_option('searchpath={' . $searchPath . '}');
        }

        // fetch PDFLib version information for the producer field
        $this->_pdf->set_info("Producer Addendum", sprintf("%s + PDFLib %s", $dompdf->version, $this->getPDFLibMajorVersion()));

        // Silence pedantic warnings about missing TZ settings
        $tz = @date_default_timezone_get();
        date_default_timezone_set("UTC");
        $this->_pdf->set_info("Date", date("Y-m-d"));
        date_default_timezone_set($tz);

        if (self::$IN_MEMORY) {
            $this->_pdf->begin_document("", "");
        } else {
            $tmp_dir = $this->_dompdf->getOptions()->getTempDir();
            $tmp_name = @tempnam($tmp_dir, "libdompdf_pdf_");
            @unlink($tmp_name);
            $this->_file = "$tmp_name.pdf";
            $this->_pdf->begin_document($this->_file, "");
        }

        $this->_pdf->begin_page_ext($this->_width, $this->_height, "");

        $this->_page_number = $this->_page_count = 1;

        $this->_imgs = [];
        $this->_fonts = [];
        $this->_objs = [];
    }

    function get_dompdf()
    {
        return $this->_dompdf;
    }

    /**
     * Close the pdf
     */
    protected function _close()
    {
        $this->_place_objects();

        // Close all pages
        $this->_pdf->suspend_page("");
        for ($p = 1; $p <= $this->_page_count; $p++) {
            $this->_pdf->resume_page("pagenumber=$p");
            $this->_pdf->end_page_ext("");
        }

        $this->_pdf->end_document("");
    }


    /**
     * Returns the PDFLib instance
     *
     * @return PDFLib
     */
    public function get_pdflib()
    {
        return $this->_pdf;
    }

    public function add_info(string $label, string $value): void
    {
        $this->_pdf->set_info($label, $value);
    }

    /**
     * Opens a new 'object' (template in PDFLib-speak)
     *
     * While an object is open, all drawing actions are recorded to the
     * object instead of being drawn on the current page.  Objects can
     * be added later to a specific page or to several pages.
     *
     * The return value is an integer ID for the new object.
     *
     * @see PDFLib::close_object()
     * @see PDFLib::add_object()
     *
     * @return int
     */
    public function open_object()
    {
        $this->_pdf->suspend_page("");
        if ($this->getPDFLibMajorVersion() >= 7) {
            $ret = $this->_pdf->begin_template_ext($this->_width, $this->_height, null);
        } else {
            $ret = $this->_pdf->begin_template($this->_width, $this->_height);
        }
        $this->_pdf->save();
        $this->_objs[$ret] = ["start_page" => $this->_page_number];

        return $ret;
    }

    /**
     * Reopen an existing object (NOT IMPLEMENTED)
     * PDFLib does not seem to support reopening templates.
     *
     * @param int $object the ID of a previously opened object
     *
     * @throws Exception
     * @return void
     */
    public function reopen_object($object)
    {
        throw new Exception("PDFLib does not support reopening objects.");
    }

    /**
     * Close the current template
     *
     * @see PDFLib::open_object()
     */
    public function close_object()
    {
        $this->_pdf->restore();
        if ($this->getPDFLibMajorVersion() >= 7) {
            $this->_pdf->end_template_ext($this->_width, $this->_height);
        } else {
            $this->_pdf->end_template();
        }
        $this->_pdf->resume_page("pagenumber=" . $this->_page_number);
    }

    /**
     * Adds the specified object to the document
     *
     * $where can be one of:
     * - 'add' add to current page only
     * - 'all' add to every page from the current one onwards
     * - 'odd' add to all odd numbered pages from now on
     * - 'even' add to all even numbered pages from now on
     * - 'next' add the object to the next page only
     * - 'nextodd' add to all odd numbered pages from the next one
     * - 'nexteven' add to all even numbered pages from the next one
     *
     * @param int    $object the object handle returned by open_object()
     * @param string $where
     */
    public function add_object($object, $where = 'all')
    {

        if (mb_strpos($where, "next") !== false) {
            $this->_objs[$object]["start_page"]++;
            $where = str_replace("next", "", $where);
            if ($where == "") {
                $where = "add";
            }
        }

        $this->_objs[$object]["where"] = $where;
    }

    /**
     * Stops the specified template from appearing in the document.
     *
     * The object will stop being displayed on the page following the
     * current one.
     *
     * @param int $object
     */
    public function stop_object($object)
    {

        if (!isset($this->_objs[$object])) {
            return;
        }

        $start = $this->_objs[$object]["start_page"];
        $where = $this->_objs[$object]["where"];

        // Place the object on this page if required
        if ($this->_page_number >= $start &&
            (($this->_page_number % 2 == 0 && $where === "even") ||
                ($this->_page_number % 2 == 1 && $where === "odd") ||
                ($where === "all"))
        ) {
            $this->_pdf->fit_image($object, 0, 0, "");
        }

        $this->_objs[$object] = null;
        unset($this->_objs[$object]);
    }

    /**
     * Add all active objects to the current page
     */
    protected function _place_objects()
    {

        foreach ($this->_objs as $obj => $props) {
            $start = $props["start_page"];
            $where = $props["where"];

            // Place the object on this page if required
            if ($this->_page_number >= $start &&
                (($this->_page_number % 2 == 0 && $where === "even") ||
                    ($this->_page_number % 2 == 1 && $where === "odd") ||
                    ($where === "all"))
            ) {
                $this->_pdf->fit_image($obj, 0, 0, "");
            }
        }
    }

    public function get_width()
    {
        return $this->_width;
    }

    public function get_height()
    {
        return $this->_height;
    }

    public function get_page_number()
    {
        return $this->_page_number;
    }

    public function get_page_count()
    {
        return $this->_page_count;
    }

    /**
     * @param $num
     */
    public function set_page_number($num)
    {
        $this->_page_number = (int)$num;
    }

    public function set_page_count($count)
    {
        $this->_page_count = (int)$count;
    }

    /**
     * Sets the line style
     *
     * @param float  $width
     * @param string $cap
     * @param string $join
     * @param array  $dash
     */
    protected function _set_line_style($width, $cap, $join, $dash)
    {
        if (!is_array($dash)) {
            $dash = [];
        }

        // Work around PDFLib limitation with 0 dash length:
        // Value 0 for option 'dasharray' is too small (minimum 1.5e-05)
        foreach ($dash as &$d) {
            if ($d == 0) {
                $d = 1.5e-5;
            }
        }

        if (count($dash) === 1) {
            $dash[] = $dash[0];
        }

        if ($this->getPDFLibMajorVersion() >= 9) {
            if (count($dash) > 1) {
                $this->_pdf->set_graphics_option("dasharray={" . implode(" ", $dash) . "}");
            } else {
                $this->_pdf->set_graphics_option("dasharray=none");
            }
        } else {
            if (count($dash) > 1) {
                $this->_pdf->setdashpattern("dasharray={" . implode(" ", $dash) . "}");
            } else {
                $this->_pdf->setdash(0, 0);
            }
        }

        switch ($join) {
            case "miter":
                if ($this->getPDFLibMajorVersion() >= 9) {
                    $this->_pdf->set_graphics_option('linejoin=0');
                } else {
                    $this->_pdf->setlinejoin(0);
                }
                break;

            case "round":
                if ($this->getPDFLibMajorVersion() >= 9) {
                    $this->_pdf->set_graphics_option('linejoin=1');
                } else {
                    $this->_pdf->setlinejoin(1);
                }
                break;

            case "bevel":
                if ($this->getPDFLibMajorVersion() >= 9) {
                    $this->_pdf->set_graphics_option('linejoin=2');
                } else {
                    $this->_pdf->setlinejoin(2);
                }
                break;

            default:
                break;
        }

        switch ($cap) {
            case "butt":
                if ($this->getPDFLibMajorVersion() >= 9) {
                    $this->_pdf->set_graphics_option('linecap=0');
                } else {
                    $this->_pdf->setlinecap(0);
                }
                break;

            case "round":
                if ($this->getPDFLibMajorVersion() >= 9) {
                    $this->_pdf->set_graphics_option('linecap=1');
                } else {
                    $this->_pdf->setlinecap(1);
                }
                break;

            case "square":
                if ($this->getPDFLibMajorVersion() >= 9) {
                    $this->_pdf->set_graphics_option('linecap=2');
                } else {
                    $this->_pdf->setlinecap(2);
                }
                break;

            default:
                break;
        }

        $this->_pdf->setlinewidth($width);
    }

    /**
     * Sets the line color
     *
     * @param array $color array(r,g,b)
     */
    protected function _set_stroke_color($color)
    {
        // TODO: we should check the current PDF stroke color
        // instead of the cached value
        if ($this->_last_stroke_color == $color) {
            // FIXME: do nothing, this optimization is broken by the
            // stroke being set as a side effect of other operations
            //return;
        }

        $alpha = isset($color["alpha"]) ? $color["alpha"] : 1;
        if (isset($this->_current_opacity)) {
            $alpha *= $this->_current_opacity;
        }

        $this->_last_stroke_color = $color;

        if (isset($color[3])) {
            $type = "cmyk";
            list($c1, $c2, $c3, $c4) = [$color[0], $color[1], $color[2], $color[3]];
        } elseif (isset($color[2])) {
            $type = "rgb";
            list($c1, $c2, $c3, $c4) = [$color[0], $color[1], $color[2], null];
        } else {
            $type = "gray";
            list($c1, $c2, $c3, $c4) = [$color[0], $color[1], null, null];
        }

        $this->_set_stroke_opacity($alpha, "Normal");
        $this->_pdf->setcolor("stroke", $type, $c1, $c2, $c3, $c4);
    }

    /**
     * Sets the fill color
     *
     * @param array $color array(r,g,b)
     */
    protected function _set_fill_color($color)
    {
        // TODO: we should check the current PDF fill color
        // instead of the cached value
        if ($this->_last_fill_color == $color) {
            // FIXME: do nothing, this optimization is broken by the
            // fill being set as a side effect of other operations
            //return;
        }

        $alpha = isset($color["alpha"]) ? $color["alpha"] : 1;
        if (isset($this->_current_opacity)) {
            $alpha *= $this->_current_opacity;
        }

        $this->_last_fill_color = $color;

        if (isset($color[3])) {
            $type = "cmyk";
            list($c1, $c2, $c3, $c4) = [$color[0], $color[1], $color[2], $color[3]];
        } elseif (isset($color[2])) {
            $type = "rgb";
            list($c1, $c2, $c3, $c4) = [$color[0], $color[1], $color[2], null];
        } else {
            $type = "gray";
            list($c1, $c2, $c3, $c4) = [$color[0], $color[1], null, null];
        }

        $this->_set_fill_opacity($alpha, "Normal");
        $this->_pdf->setcolor("fill", $type, $c1, $c2, $c3, $c4);
    }

    /**
     * Sets the fill opacity
     *
     * @param float  $opacity
     * @param string $mode
     */
    public function _set_fill_opacity($opacity, $mode = "Normal")
    {
        if ($mode === "Normal" && isset($opacity)) {
            $this->_set_gstate("opacityfill=$opacity");
        }
    }

    /**
     * Sets the stroke opacity
     *
     * @param float  $opacity
     * @param string $mode
     */
    public function _set_stroke_opacity($opacity, $mode = "Normal")
    {
        if ($mode === "Normal" && isset($opacity)) {
            $this->_set_gstate("opacitystroke=$opacity");
        }
    }

    public function set_opacity(float $opacity, string $mode = "Normal"): void
    {
        if ($mode === "Normal") {
            $this->_set_gstate("opacityfill=$opacity opacitystroke=$opacity");
            $this->_current_opacity = $opacity;
        }
    }

    /**
     * Sets the gstate
     *
     * @param $gstate_options
     * @return int
     */
    public function _set_gstate($gstate_options)
    {
        if (($gstate = array_search($gstate_options, $this->_gstates)) === false) {
            $gstate = $this->_pdf->create_gstate($gstate_options);
            $this->_gstates[$gstate] = $gstate_options;
        }

        return $this->_pdf->set_gstate($gstate);
    }

    public function set_default_view($view, $options = [])
    {
        // TODO
        // http://www.pdflib.com/fileadmin/pdflib/pdf/manuals/PDFlib-8.0.2-API-reference.pdf
        /**
         * fitheight Fit the page height to the window, with the x coordinate left at the left edge of the window.
         * fitrect Fit the rectangle specified by left, bottom, right, and top to the window.
         * fitvisible Fit the visible contents of the page (the ArtBox) to the window.
         * fitvisibleheight Fit the visible contents of the page to the window with the x coordinate left at the left edge of the window.
         * fitvisiblewidth Fit the visible contents of the page to the window with the y coordinate top at the top edge of the window.
         * fitwidth Fit the page width to the window, with the y coordinate top at the top edge of the window.
         * fitwindow Fit the complete page to the window.
         * fixed
         */
        //$this->setPDFLibParameter("openaction", $view);
    }

    /**
     * Loads a specific font and stores the corresponding descriptor.
     *
     * @param string $font
     * @param string $encoding
     * @param string $options
     *
     * @return int the font descriptor for the font
     */
    protected function _load_font($font, $encoding = null, $options = "")
    {
        // Fix for PDFLibs case-sensitive font names
        $baseFont = basename($font);
        $isNativeFont = false;
        if (isset(self::$nativeFontsTpPDFLib[$baseFont])) {
            $font = self::$nativeFontsTpPDFLib[$baseFont];
            $isNativeFont = true;
        }

        // Check if the font is a native PDF font
        // Embed non-native fonts
        $test = strtolower($baseFont);
        if (in_array($test, DOMPDF::$nativeFonts)) {
            $font = basename($font);
        } else {
            // Embed non-native fonts
            $options .= " embedding=true";
        }

        $options .= " autosubsetting=" . ($this->_dompdf->getOptions()->getIsFontSubsettingEnabled() === false ? "false" : "true");

        if (is_null($encoding)) {
            // Unicode encoding is only available for the commerical
            // version of PDFlib and not PDFlib-Lite
            if (strlen($this->_dompdf->getOptions()->getPdflibLicense()) > 0) {
                $encoding = "unicode";
            } else {
                $encoding = "auto";
            }
        }

        $key = "$font:$encoding:$options";
        if (isset($this->_fonts[$key])) {
            return $this->_fonts[$key];
        }

        // Native fonts are build in, just load it
        if ($isNativeFont) {
            $this->_fonts[$key] = $this->_pdf->load_font($font, $encoding, $options);

            return $this->_fonts[$key];
        }

        $fontOutline = $this->getPDFLibParameter("FontOutline", 1);
        if ($fontOutline === "" || $fontOutline <= 0) {
            $families = $this->_dompdf->getFontMetrics()->getFontFamilies();
            foreach ($families as $files) {
                foreach ($files as $file) {
                    $face = basename($file);
                    $afm = null;

                    if (isset($this->_fontsFiles[$face])) {
                        continue;
                    }

                    // Prefer ttfs to afms
                    if (file_exists("$file.ttf")) {
                        $outline = "$file.ttf";
                    } elseif (file_exists("$file.TTF")) {
                        $outline = "$file.TTF";
                    } elseif (file_exists("$file.pfb")) {
                        $outline = "$file.pfb";
                        if (file_exists("$file.afm")) {
                            $afm = "$file.afm";
                        }
                    } elseif (file_exists("$file.PFB")) {
                        $outline = "$file.PFB";
                        if (file_exists("$file.AFM")) {
                            $afm = "$file.AFM";
                        }
                    } else {
                        continue;
                    }

                    $this->_fontsFiles[$face] = true;

                    if ($this->getPDFLibMajorVersion() >= 9) {
                        $this->setPDFLibParameter("FontOutline", '{' . "$face=$outline" . '}');
                    } else {
                        $this->setPDFLibParameter("FontOutline", "\{$face\}=\{$outline\}");
                    }

                    if (is_null($afm)) {
                        continue;
                    }
                    if ($this->getPDFLibMajorVersion() >= 9) {
                        $this->setPDFLibParameter("FontAFM", '{' . "$face=$afm" . '}');
                    } else {
                        $this->setPDFLibParameter("FontAFM", "\{$face\}=\{$afm\}");
                    }
                }
            }
        }

        $this->_fonts[$key] = $this->_pdf->load_font($font, $encoding, $options);

        return $this->_fonts[$key];
    }

    /**
     * Remaps y coords from 4th to 1st quadrant
     *
     * @param float $y
     * @return float
     */
    protected function y($y)
    {
        return $this->_height - $y;
    }

    public function line($x1, $y1, $x2, $y2, $color, $width, $style = [], $cap = "butt")
    {
        $this->_set_line_style($width, $cap, "", $style);
        $this->_set_stroke_color($color);

        $y1 = $this->y($y1);
        $y2 = $this->y($y2);

        $this->_pdf->moveto($x1, $y1);
        $this->_pdf->lineto($x2, $y2);
        $this->_pdf->stroke();

        $this->_set_stroke_opacity($this->_current_opacity, "Normal");
    }

    public function arc($x, $y, $r1, $r2, $astart, $aend, $color, $width, $style = [], $cap = "butt")
    {
        $this->_set_line_style($width, $cap, "", $style);
        $this->_set_stroke_color($color);

        $y = $this->y($y);

        $this->_pdf->arc($x, $y, $r1, $astart, $aend);
        $this->_pdf->stroke();

        $this->_set_stroke_opacity($this->_current_opacity, "Normal");
    }

    public function rectangle($x1, $y1, $w, $h, $color, $width, $style = [], $cap = "butt")
    {
        $this->_set_stroke_color($color);
        $this->_set_line_style($width, $cap, "", $style);

        $y1 = $this->y($y1) - $h;

        $this->_pdf->rect($x1, $y1, $w, $h);
        $this->_pdf->stroke();

        $this->_set_stroke_opacity($this->_current_opacity, "Normal");
    }

    public function filled_rectangle($x1, $y1, $w, $h, $color)
    {
        $this->_set_fill_color($color);

        $y1 = $this->y($y1) - $h;

        $this->_pdf->rect(floatval($x1), floatval($y1), floatval($w), floatval($h));
        $this->_pdf->fill();

        $this->_set_fill_opacity($this->_current_opacity, "Normal");
    }

    public function clipping_rectangle($x1, $y1, $w, $h)
    {
        $this->_pdf->save();

        $y1 = $this->y($y1) - $h;

        $this->_pdf->rect(floatval($x1), floatval($y1), floatval($w), floatval($h));
        $this->_pdf->clip();
    }

    public function clipping_roundrectangle($x1, $y1, $w, $h, $rTL, $rTR, $rBR, $rBL)
    {
        if ($this->getPDFLibMajorVersion() < 9) {
            //TODO: add PDFLib7 support
            $this->clipping_rectangle($x1, $y1, $w, $h);
            return;
        }

        $this->_pdf->save();

        // we use 0,0 for the base coordinates for the path points
        // since we're drawing the path at the $x1,$y1 coordinates

        $path = 0;
        //start: left edge, top end
        $path = $this->_pdf->add_path_point($path, 0, 0 - $rTL + $h, "move", "");
        // line: left edge, bottom end
        $path = $this->_pdf->add_path_point($path, 0, 0 + $rBL, "line", "");
        // curve: bottom-left corner
        if ($rBL > 0) {
            $path = $this->_pdf->add_path_point($path, 0 + $rBL, 0, "elliptical", "radius=$rBL clockwise=false");
        }
        // line: bottom edge, left end
        $path = $this->_pdf->add_path_point($path, 0 - $rBR + $w, 0, "line", "");
        // curve: bottom-right corner
        if ($rBR > 0) {
            $path = $this->_pdf->add_path_point($path, 0 + $w, 0 + $rBR, "elliptical", "radius=$rBR clockwise=false");
        }
        // line: right edge, top end
        $path = $this->_pdf->add_path_point($path, 0 + $w, 0 - $rTR + $h, "line", "");
        // curve: top-right corner
        if ($rTR > 0) {
            $path = $this->_pdf->add_path_point($path, 0 - $rTR + $w, 0 + $h, "elliptical", "radius=$rTR clockwise=false");
        }
        // line: top edge, left end
        $path = $this->_pdf->add_path_point($path, 0 + $rTL, 0 + $h, "line", "");
        // curve: top-left corner
        if ($rTL > 0) {
            $path = $this->_pdf->add_path_point($path, 0, 0 - $rTL + $h, "elliptical", "radius=$rTL clockwise=false");
        }
        $this->_pdf->draw_path($path, $x1, $this->_height-$y1-$h, "clip=true");
    }

    public function clipping_polygon(array $points): void
    {
        $this->_pdf->save();

        $y = $this->y(array_pop($points));
        $x = array_pop($points);
        $this->_pdf->moveto($x, $y);

        while (count($points) > 1) {
            $y = $this->y(array_pop($points));
            $x = array_pop($points);
            $this->_pdf->lineto($x, $y);
        }

        $this->_pdf->closepath();
        $this->_pdf->clip();
    }

    public function clipping_end()
    {
        $this->_pdf->restore();
    }

    public function save()
    {
        $this->_pdf->save();
    }

    function restore()
    {
        $this->_pdf->restore();
    }

    public function rotate($angle, $x, $y)
    {
        $pdf = $this->_pdf;
        $pdf->translate($x, $this->_height - $y);
        $pdf->rotate(-$angle);
        $pdf->translate(-$x, -$this->_height + $y);
    }

    public function skew($angle_x, $angle_y, $x, $y)
    {
        $pdf = $this->_pdf;
        $pdf->translate($x, $this->_height - $y);
        $pdf->skew($angle_y, $angle_x); // Needs to be inverted
        $pdf->translate(-$x, -$this->_height + $y);
    }

    public function scale($s_x, $s_y, $x, $y)
    {
        $pdf = $this->_pdf;
        $pdf->translate($x, $this->_height - $y);
        $pdf->scale($s_x, $s_y);
        $pdf->translate(-$x, -$this->_height + $y);
    }

    public function translate($t_x, $t_y)
    {
        $this->_pdf->translate($t_x, -$t_y);
    }

    public function transform($a, $b, $c, $d, $e, $f)
    {
        $this->_pdf->concat($a, $b, $c, $d, $e, $f);
    }

    public function polygon($points, $color, $width = null, $style = [], $fill = false)
    {
        $this->_set_fill_color($color);
        $this->_set_stroke_color($color);

        if (!$fill && isset($width)) {
            $this->_set_line_style($width, "square", "miter", $style);
        }

        $y = $this->y(array_pop($points));
        $x = array_pop($points);
        $this->_pdf->moveto($x, $y);

        while (count($points) > 1) {
            $y = $this->y(array_pop($points));
            $x = array_pop($points);
            $this->_pdf->lineto($x, $y);
        }

        if ($fill) {
            $this->_pdf->fill();
        } else {
            $this->_pdf->closepath_stroke();
        }

        $this->_set_fill_opacity($this->_current_opacity, "Normal");
        $this->_set_stroke_opacity($this->_current_opacity, "Normal");
    }

    public function circle($x, $y, $r, $color, $width = null, $style = [], $fill = false)
    {
        $this->_set_fill_color($color);
        $this->_set_stroke_color($color);

        if (!$fill && isset($width)) {
            $this->_set_line_style($width, "round", "round", $style);
        }

        $y = $this->y($y);

        $this->_pdf->circle($x, $y, $r);

        if ($fill) {
            $this->_pdf->fill();
        } else {
            $this->_pdf->stroke();
        }

        $this->_set_fill_opacity($this->_current_opacity, "Normal");
        $this->_set_stroke_opacity($this->_current_opacity, "Normal");
    }

    public function image($img, $x, $y, $w, $h, $resolution = "normal")
    {
        $w = (int)$w;
        $h = (int)$h;

        $img_type = Cache::detect_type($img, $this->get_dompdf()->getHttpContext());

        // Strip file:// prefix
        if (substr($img, 0, 7) === "file://") {
            $img = substr($img, 7);
        }

        if (!isset($this->_imgs[$img])) {
            if (strtolower($img_type) === "svg") {
                //FIXME: PDFLib loads SVG but returns error message "Function must not be called in 'page' scope"
                $image_load_response = $this->_pdf->load_graphics($img_type, $img, "");
            } else {
                $image_load_response = $this->_pdf->load_image($img_type, $img, "");
            }
            if ($image_load_response === 0) {
                //TODO: should do something with the error message
                $error = $this->_pdf->get_errmsg();
                return;
            }
            $this->_imgs[$img] = $image_load_response;
        }

        $img = $this->_imgs[$img];

        $y = $this->y($y) - $h;
        if (strtolower($img_type) === "svg") {
            $this->_pdf->fit_graphics($img, $x, $y, 'boxsize={' . "$w $h" . '} fitmethod=entire');
        } else {
            $this->_pdf->fit_image($img, $x, $y, 'boxsize={' . "$w $h" . '} fitmethod=entire');
        }
    }

    public function text($x, $y, $text, $font, $size, $color = [0, 0, 0], $word_spacing = 0, $char_spacing = 0, $angle = 0)
    {
        if ($size == 0) {
            return;
        }

        $fh = $this->_load_font($font);

        $this->_pdf->setfont($fh, $size);
        $this->_set_fill_color($color);

        $y = $this->y($y) - $this->get_font_height($font, $size);

        $word_spacing = (float)$word_spacing;
        $char_spacing = (float)$char_spacing;
        $angle = -(float)$angle;

        $this->_pdf->fit_textline($text, $x, $y, "rotate=$angle wordspacing=$word_spacing charspacing=$char_spacing ");

        $this->_set_fill_opacity($this->_current_opacity, "Normal");
    }

    public function javascript($code)
    {
        if (strlen($this->_dompdf->getOptions()->getPdflibLicense()) > 0) {
            $this->_pdf->create_action("JavaScript", $code);
        }
    }

    public function add_named_dest($anchorname)
    {
        $this->_pdf->add_nameddest($anchorname, "");
    }

    public function add_link($url, $x, $y, $width, $height)
    {
        $y = $this->y($y) - $height;
        if (strpos($url, '#') === 0) {
            // Local link
            $name = substr($url, 1);
            if ($name) {
                $this->_pdf->create_annotation($x, $y, $x + $width, $y + $height, 'Link',
                    "contents={$url} destname=" . substr($url, 1) . " linewidth=0");
            }
        } else {
            //TODO: PDFLib::create_action does not permit non-HTTP links for URI actions
            $action = $this->_pdf->create_action("URI", "url={{$url}}");
            // add the annotation only if the action was created
            if ($action !== 0) {
                $this->_pdf->create_annotation($x, $y, $x + $width, $y + $height, 'Link', "contents={{$url}} action={activate=$action} linewidth=0");
            }
        }
    }

    public function get_text_width($text, $font, $size, $word_spacing = 0.0, $letter_spacing = 0.0)
    {
        if ($size == 0) {
            return 0.0;
        }

        $fh = $this->_load_font($font);

        // Determine the additional width due to extra spacing
        $num_spaces = mb_substr_count($text, " ");
        $delta = $word_spacing * $num_spaces;

        if ($letter_spacing) {
            $num_chars = mb_strlen($text);
            $delta += $num_chars * $letter_spacing;
        }

        return $this->_pdf->stringwidth($text, $fh, $size) + $delta;
    }

    public function get_font_height($font, $size)
    {
        if ($size == 0) {
            return 0.0;
        }

        $fh = $this->_load_font($font);

        $this->_pdf->setfont($fh, $size);

        $asc = $this->_pdf->info_font($fh, "ascender", "fontsize=$size");
        $desc = $this->_pdf->info_font($fh, "descender", "fontsize=$size");

        // $desc is usually < 0,
        $ratio = $this->_dompdf->getOptions()->getFontHeightRatio();

        return (abs($asc) + abs($desc)) * $ratio;
    }

    public function get_font_baseline($font, $size)
    {
        $ratio = $this->_dompdf->getOptions()->getFontHeightRatio();

        return $this->get_font_height($font, $size) / $ratio * 1.1;
    }

    /**
     * Processes a callback or script on every page.
     *
     * The callback function receives the four parameters `int $pageNumber`,
     * `int $pageCount`, `Canvas $canvas`, and `FontMetrics $fontMetrics`, in
     * that order. If a script is passed as string, the variables `$PAGE_NUM`,
     * `$PAGE_COUNT`, `$pdf`, and `$fontMetrics` are available instead. Passing
     * a script as string is deprecated and will be removed in a future version.
     *
     * This function can be used to add page numbers to all pages after the
     * first one, for example.
     *
     * @param callable|string $callback The callback function or PHP script to process on every page
     */
    public function page_script($callback): void
    {
        if (is_string($callback)) {
            $this->processPageScript(function (
                int $PAGE_NUM,
                int $PAGE_COUNT,
                self $pdf,
                FontMetrics $fontMetrics
            ) use ($callback) {
                eval($callback);
            });
            return;
        }

        $this->processPageScript($callback);
    }

    public function page_text($x, $y, $text, $font, $size, $color = [0, 0, 0], $word_space = 0.0, $char_space = 0.0, $angle = 0.0)
    {
        $this->processPageScript(function (int $pageNumber, int $pageCount) use ($x, $y, $text, $font, $size, $color, $word_space, $char_space, $angle) {
            $text = str_replace(
                ["{PAGE_NUM}", "{PAGE_COUNT}"],
                [$pageNumber, $pageCount],
                $text
            );
            $this->text($x, $y, $text, $font, $size, $color, $word_space, $char_space, $angle);
        });
    }

    public function page_line($x1, $y1, $x2, $y2, $color, $width, $style = [])
    {
        $this->processPageScript(function () use ($x1, $y1, $x2, $y2, $color, $width, $style) {
            $this->line($x1, $y1, $x2, $y2, $color, $width, $style);
        });
    }

    public function new_page()
    {
        // Add objects to the current page
        $this->_place_objects();

        $this->_pdf->suspend_page("");
        $this->_pdf->begin_page_ext($this->_width, $this->_height, "");
        $this->_page_number = ++$this->_page_count;
    }

    protected function processPageScript(callable $callback): void
    {
        $this->_pdf->suspend_page("");

        for ($p = 1; $p <= $this->_page_count; $p++) {
            $this->_pdf->resume_page("pagenumber=$p");

            $fontMetrics = $this->_dompdf->getFontMetrics();
            $callback($p, $this->_page_count, $this, $fontMetrics);

            $this->_pdf->suspend_page("");
        }

        $this->_pdf->resume_page("pagenumber=" . $this->_page_number);
    }

    /**
     * @throws Exception
     */
    public function stream($filename = "document.pdf", $options = [])
    {
        if (headers_sent()) {
            die("Unable to stream pdf: headers already sent");
        }

        if (!isset($options["compress"])) {
            $options["compress"] = true;
        }
        if (!isset($options["Attachment"])) {
            $options["Attachment"] = true;
        }

        if ($options["compress"]) {
            $this->setPDFLibValue("compress", 6);
        } else {
            $this->setPDFLibValue("compress", 0);
        }

        $this->_close();

        $data = "";

        if (self::$IN_MEMORY) {
            $data = $this->_pdf->get_buffer();
            $size = mb_strlen($data, "8bit");
        } else {
            $size = filesize($this->_file);
        }

        header("Cache-Control: private");
        header("Content-Type: application/pdf");
        header("Content-Length: " . $size);

        $filename = str_replace(["\n", "'"], "", basename($filename, ".pdf")) . ".pdf";
        $attachment = $options["Attachment"] ? "attachment" : "inline";
        header(Helpers::buildContentDispositionHeader($attachment, $filename));

        if (self::$IN_MEMORY) {
            echo $data;
        } else {
            // Chunked readfile()
            $chunk = (1 << 21); // 2 MB
            $fh = fopen($this->_file, "rb");
            if (!$fh) {
                throw new Exception("Unable to load temporary PDF file: " . $this->_file);
            }

            while (!feof($fh)) {
                echo fread($fh, $chunk);
            }
            fclose($fh);

            //debugpng
            if ($this->_dompdf->getOptions()->getDebugPng()) {
                print '[pdflib stream unlink ' . $this->_file . ']';
            }
            if (!$this->_dompdf->getOptions()->getDebugKeepTemp()) {
                unlink($this->_file);
            }
            $this->_file = null;
            unset($this->_file);
        }

        flush();
    }

    public function output($options = [])
    {
        if (!isset($options["compress"])) {
            $options["compress"] = true;
        }

        if ($options["compress"]) {
            $this->setPDFLibValue("compress", 6);
        } else {
            $this->setPDFLibValue("compress", 0);
        }

        $this->_close();

        if (self::$IN_MEMORY) {
            $data = $this->_pdf->get_buffer();
        } else {
            $data = file_get_contents($this->_file);

            //debugpng
            if ($this->_dompdf->getOptions()->getDebugPng()) {
                print '[pdflib output unlink ' . $this->_file . ']';
            }
            if (!$this->_dompdf->getOptions()->getDebugKeepTemp()) {
                unlink($this->_file);
            }
            $this->_file = null;
            unset($this->_file);
        }

        return $data;
    }

    /**
     * @param string $keyword
     * @param string $optlist
     * @return mixed
     */
    protected function getPDFLibParameter($keyword, $optlist = "")
    {
        if ($this->getPDFLibMajorVersion() >= 9) {
            return $this->_pdf->get_option($keyword, "");
        }

        return $this->_pdf->get_parameter($keyword, $optlist);
    }

    /**
     * @param string $keyword
     * @param string $value
     * @return mixed
     */
    protected function setPDFLibParameter($keyword, $value)
    {
        if ($this->getPDFLibMajorVersion() >= 9) {
            return $this->_pdf->set_option($keyword . "=" . $value);
        }

        return $this->_pdf->set_parameter($keyword, $value);
    }

    /**
     * @param string $keyword
     * @param string $optlist
     * @return mixed
     */
    protected function getPDFLibValue($keyword, $optlist = "")
    {
        if ($this->getPDFLibMajorVersion() >= 9) {
            return $this->getPDFLibParameter($keyword, $optlist);
        }

        return $this->_pdf->get_value($keyword);
    }

    /**
     * @param string $keyword
     * @param string $value
     * @return mixed
     */
    protected function setPDFLibValue($keyword, $value)
    {
        if ($this->getPDFLibMajorVersion() >= 9) {
            return $this->setPDFLibParameter($keyword, $value);
        }

        return $this->_pdf->set_value($keyword, $value);
    }

    /**
     * @return int
     */
    protected function getPDFLibMajorVersion()
    {
        if (is_null(self::$MAJOR_VERSION)) {
            if (method_exists($this->_pdf, "get_option")) {
                self::$MAJOR_VERSION = abs(intval($this->_pdf->get_option("major", "")));
            } else {
                self::$MAJOR_VERSION = abs(intval($this->_pdf->get_value("major", "")));
            }
        }

        return self::$MAJOR_VERSION;
    }
}

// Workaround for idiotic limitation on statics...
PDFLib::$PAPER_SIZES = CPDF::$PAPER_SIZES;
<?php
/**
 * @package dompdf
 * @link    https://github.com/dompdf/dompdf
 * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
 */
namespace Dompdf;

/**
 * Main rendering interface
 *
 * Currently {@link Dompdf\Adapter\CPDF}, {@link Dompdf\Adapter\PDFLib}, and {@link Dompdf\Adapter\GD}
 * implement this interface.
 *
 * Implementations should measure x and y increasing to the left and down,
 * respectively, with the origin in the top left corner.  Implementations
 * are free to use a unit other than points for length, but I can't
 * guarantee that the results will look any good.
 *
 * @package dompdf
 */
interface Canvas
{
    /**
     * @param string|float[] $paper       The paper size to use as either a standard paper size (see {@link Dompdf\Adapter\CPDF::$PAPER_SIZES})
     *                                    or an array of the form `[x1, y1, x2, y2]` (typically `[0, 0, width, height]`).
     * @param string         $orientation The paper orientation, either `portrait` or `landscape`.
     * @param Dompdf|null    $dompdf      The Dompdf instance.
     */
    public function __construct($paper = "letter", string $orientation = "portrait", ?Dompdf $dompdf = null);

    /**
     * @return Dompdf
     */
    function get_dompdf();

    /**
     * Returns the current page number
     *
     * @return int
     */
    function get_page_number();

    /**
     * Returns the total number of pages in the document
     *
     * @return int
     */
    function get_page_count();

    /**
     * Sets the total number of pages
     *
     * @param int $count
     */
    function set_page_count($count);

    /**
     * Draws a line from x1,y1 to x2,y2
     *
     * See {@link Cpdf::setLineStyle()} for a description of the format of the
     * $style and $cap parameters (aka dash and cap).
     *
     * @param float  $x1
     * @param float  $y1
     * @param float  $x2
     * @param float  $y2
     * @param array  $color Color array in the format `[r, g, b, "alpha" => alpha]`
     *                      where r, g, b, and alpha are float values between 0 and 1
     * @param float  $width
     * @param array  $style
     * @param string $cap   `butt`, `round`, or `square`
     */
    function line($x1, $y1, $x2, $y2, $color, $width, $style = [], $cap = "butt");

    /**
     * Draws an arc
     *
     * See {@link Cpdf::setLineStyle()} for a description of the format of the
     * $style and $cap parameters (aka dash and cap).
     *
     * @param float  $x      X coordinate of the arc
     * @param float  $y      Y coordinate of the arc
     * @param float  $r1     Radius 1
     * @param float  $r2     Radius 2
     * @param float  $astart Start angle in degrees
     * @param float  $aend   End angle in degrees
     * @param array  $color  Color array in the format `[r, g, b, "alpha" => alpha]`
     *                       where r, g, b, and alpha are float values between 0 and 1
     * @param float  $width
     * @param array  $style
     * @param string $cap   `butt`, `round`, or `square`
     */
    function arc($x, $y, $r1, $r2, $astart, $aend, $color, $width, $style = [], $cap = "butt");

    /**
     * Draws a rectangle at x1,y1 with width w and height h
     *
     * See {@link Cpdf::setLineStyle()} for a description of the format of the
     * $style and $cap parameters (aka dash and cap).
     *
     * @param float  $x1
     * @param float  $y1
     * @param float  $w
     * @param float  $h
     * @param array  $color  Color array in the format `[r, g, b, "alpha" => alpha]`
     *                       where r, g, b, and alpha are float values between 0 and 1
     * @param float  $width
     * @param array  $style
     * @param string $cap   `butt`, `round`, or `square`
     */
    function rectangle($x1, $y1, $w, $h, $color, $width, $style = [], $cap = "butt");

    /**
     * Draws a filled rectangle at x1,y1 with width w and height h
     *
     * @param float $x1
     * @param float $y1
     * @param float $w
     * @param float $h
     * @param array $color Color array in the format `[r, g, b, "alpha" => alpha]`
     *                     where r, g, b, and alpha are float values between 0 and 1
     */
    function filled_rectangle($x1, $y1, $w, $h, $color);

    /**
     * Starts a clipping rectangle at x1,y1 with width w and height h
     *
     * @param float $x1
     * @param float $y1
     * @param float $w
     * @param float $h
     */
    function clipping_rectangle($x1, $y1, $w, $h);

    /**
     * Starts a rounded clipping rectangle at x1,y1 with width w and height h
     *
     * @param float $x1
     * @param float $y1
     * @param float $w
     * @param float $h
     * @param float $tl
     * @param float $tr
     * @param float $br
     * @param float $bl
     */
    function clipping_roundrectangle($x1, $y1, $w, $h, $tl, $tr, $br, $bl);

    /**
     * Starts a clipping polygon
     *
     * @param float[] $points
     */
    public function clipping_polygon(array $points): void;

    /**
     * Ends the last clipping shape
     */
    function clipping_end();

    /**
     * Processes a callback on every page.
     *
     * The callback function receives the four parameters `int $pageNumber`,
     * `int $pageCount`, `Canvas $canvas`, and `FontMetrics $fontMetrics`, in
     * that order.
     *
     * This function can be used to add page numbers to all pages after the
     * first one, for example.
     *
     * @param callable $callback The callback function to process on every page
     */
    public function page_script($callback): void;

    /**
     * Writes text at the specified x and y coordinates on every page.
     *
     * The strings '{PAGE_NUM}' and '{PAGE_COUNT}' are automatically replaced
     * with their current values.
     *
     * @param float  $x
     * @param float  $y
     * @param string $text       The text to write
     * @param string $font       The font file to use
     * @param float  $size       The font size, in points
     * @param array  $color      Color array in the format `[r, g, b, "alpha" => alpha]`
     *                           where r, g, b, and alpha are float values between 0 and 1
     * @param float  $word_space Word spacing adjustment
     * @param float  $char_space Char spacing adjustment
     * @param float  $angle      Angle to write the text at, measured clockwise starting from the x-axis
     */
    public function page_text($x, $y, $text, $font, $size, $color = [0, 0, 0], $word_space = 0.0, $char_space = 0.0, $angle = 0.0);

    /**
     * Draws a line at the specified coordinates on every page.
     *
     * @param float $x1
     * @param float $y1
     * @param float $x2
     * @param float $y2
     * @param array $color Color array in the format `[r, g, b, "alpha" => alpha]`
     *                     where r, g, b, and alpha are float values between 0 and 1
     * @param float $width
     * @param array $style
     */
    public function page_line($x1, $y1, $x2, $y2, $color, $width, $style = []);

    /**
     * Save current state
     */
    function save();

    /**
     * Restore last state
     */
    function restore();

    /**
     * Rotate
     *
     * @param float $angle angle in degrees for counter-clockwise rotation
     * @param float $x     Origin abscissa
     * @param float $y     Origin ordinate
     */
    function rotate($angle, $x, $y);

    /**
     * Skew
     *
     * @param float $angle_x
     * @param float $angle_y
     * @param float $x       Origin abscissa
     * @param float $y       Origin ordinate
     */
    function skew($angle_x, $angle_y, $x, $y);

    /**
     * Scale
     *
     * @param float $s_x scaling factor for width as percent
     * @param float $s_y scaling factor for height as percent
     * @param float $x   Origin abscissa
     * @param float $y   Origin ordinate
     */
    function scale($s_x, $s_y, $x, $y);

    /**
     * Translate
     *
     * @param float $t_x movement to the right
     * @param float $t_y movement to the bottom
     */
    function translate($t_x, $t_y);

    /**
     * Transform
     *
     * @param float $a
     * @param float $b
     * @param float $c
     * @param float $d
     * @param float $e
     * @param float $f
     */
    function transform($a, $b, $c, $d, $e, $f);

    /**
     * Draws a polygon
     *
     * The polygon is formed by joining all the points stored in the $points
     * array.  $points has the following structure:
     * ```
     * array(0 => x1,
     *       1 => y1,
     *       2 => x2,
     *       3 => y2,
     *       ...
     *       );
     * ```
     *
     * See {@link Cpdf::setLineStyle()} for a description of the format of the
     * $style parameter (aka dash).
     *
     * @param array $points
     * @param array $color  Color array in the format `[r, g, b, "alpha" => alpha]`
     *                      where r, g, b, and alpha are float values between 0 and 1
     * @param float $width
     * @param array $style
     * @param bool  $fill   Fills the polygon if true
     */
    function polygon($points, $color, $width = null, $style = [], $fill = false);

    /**
     * Draws a circle at $x,$y with radius $r
     *
     * See {@link Cpdf::setLineStyle()} for a description of the format of the
     * $style parameter (aka dash).
     *
     * @param float $x
     * @param float $y
     * @param float $r
     * @param array $color Color array in the format `[r, g, b, "alpha" => alpha]`
     *                     where r, g, b, and alpha are float values between 0 and 1
     * @param float $width
     * @param array $style
     * @param bool  $fill  Fills the circle if true
     */
    function circle($x, $y, $r, $color, $width = null, $style = [], $fill = false);

    /**
     * Add an image to the pdf.
     *
     * The image is placed at the specified x and y coordinates with the
     * given width and height.
     *
     * @param string $img        The path to the image
     * @param float  $x          X position
     * @param float  $y          Y position
     * @param float  $w          Width
     * @param float  $h          Height
     * @param string $resolution The resolution of the image
     */
    function image($img, $x, $y, $w, $h, $resolution = "normal");

    /**
     * Writes text at the specified x and y coordinates
     *
     * @param float  $x
     * @param float  $y
     * @param string $text        The text to write
     * @param string $font        The font file to use
     * @param float  $size        The font size, in points
     * @param array  $color       Color array in the format `[r, g, b, "alpha" => alpha]`
     *                            where r, g, b, and alpha are float values between 0 and 1
     * @param float  $word_space  Word spacing adjustment
     * @param float  $char_space  Char spacing adjustment
     * @param float  $angle       Angle to write the text at, measured clockwise starting from the x-axis
     */
    function text($x, $y, $text, $font, $size, $color = [0, 0, 0], $word_space = 0.0, $char_space = 0.0, $angle = 0.0);

    /**
     * Add a named destination (similar to <a name="foo">...</a> in html)
     *
     * @param string $anchorname The name of the named destination
     */
    function add_named_dest($anchorname);

    /**
     * Add a link to the pdf
     *
     * @param string $url    The url to link to
     * @param float  $x      The x position of the link
     * @param float  $y      The y position of the link
     * @param float  $width  The width of the link
     * @param float  $height The height of the link
     */
    function add_link($url, $x, $y, $width, $height);

    /**
     * Add meta information to the PDF.
     *
     * @param string $label Label of the value (Creator, Producer, etc.)
     * @param string $value The text to set
     */
    public function add_info(string $label, string $value): void;

    /**
     * Calculates text size, in points
     *
     * @param string $text         The text to be sized
     * @param string $font         The font file to use
     * @param float  $size         The font size, in points
     * @param float  $word_spacing Word spacing, if any
     * @param float  $char_spacing Char spacing, if any
     *
     * @return float
     */
    function get_text_width($text, $font, $size, $word_spacing = 0.0, $char_spacing = 0.0);

    /**
     * Calculates font height, in points
     *
     * @param string $font The font file to use
     * @param float  $size The font size, in points
     *
     * @return float
     */
    function get_font_height($font, $size);

    /**
     * Returns the font x-height, in points
     *
     * @param string $font The font file to use
     * @param float  $size The font size, in points
     *
     * @return float
     */
    //function get_font_x_height($font, $size);

    /**
     * Calculates font baseline, in points
     *
     * @param string $font The font file to use
     * @param float  $size The font size, in points
     *
     * @return float
     */
    function get_font_baseline($font, $size);

    /**
     * Returns the PDF's width in points
     *
     * @return float
     */
    function get_width();

    /**
     * Returns the PDF's height in points
     *
     * @return float
     */
    function get_height();

    /**
     * Sets the opacity
     *
     * @param float  $opacity
     * @param string $mode
     */
    public function set_opacity(float $opacity, string $mode = "Normal"): void;

    /**
     * Sets the default view
     *
     * @param string $view
     * 'XYZ'  left, top, zoom
     * 'Fit'
     * 'FitH' top
     * 'FitV' left
     * 'FitR' left,bottom,right
     * 'FitB'
     * 'FitBH' top
     * 'FitBV' left
     * @param array $options
     */
    function set_default_view($view, $options = []);

    /**
     * @param string $code
     */
    function javascript($code);

    /**
     * Starts a new page
     *
     * Subsequent drawing operations will appear on the new page.
     */
    function new_page();

    /**
     * Streams the PDF to the client.
     *
     * @param string $filename The filename to present to the client.
     * @param array  $options  Associative array: 'compress' => 1 or 0 (default 1); 'Attachment' => 1 or 0 (default 1).
     */
    function stream($filename, $options = []);

    /**
     * Returns the PDF as a string.
     *
     * @param array $options Associative array: 'compress' => 1 or 0 (default 1).
     *
     * @return string
     */
    function output($options = []);
}
<?php
/**
 * @package dompdf
 * @link    https://github.com/dompdf/dompdf
 * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
 */
namespace Dompdf;

/**
 * Create canvas instances
 *
 * The canvas factory creates canvas instances based on the
 * availability of rendering backends and config options.
 *
 * @package dompdf
 */
class CanvasFactory
{
    /**
     * Constructor is private: this is a static class
     */
    private function __construct()
    {
    }

    /**
     * @param Dompdf         $dompdf
     * @param string|float[] $paper
     * @param string         $orientation
     * @param string|null    $class
     *
     * @return Canvas
     */
    static function get_instance(Dompdf $dompdf, $paper, string $orientation, ?string $class = null)
    {
        $backend = strtolower($dompdf->getOptions()->getPdfBackend());

        if (isset($class) && class_exists($class, false)) {
            $class .= "_Adapter";
        } else {
            if (($backend === "auto" || $backend === "pdflib") &&
                class_exists("PDFLib", false)
            ) {
                $class = "Dompdf\\Adapter\\PDFLib";
            }

            else {
                if ($backend === "gd" && extension_loaded('gd')) {
                    $class = "Dompdf\\Adapter\\GD";
                } else {
                    $class = "Dompdf\\Adapter\\CPDF";
                }
            }
        }

        return new $class($paper, $orientation, $dompdf);
    }
}
<?php
/**
 * @package dompdf
 * @link    https://github.com/dompdf/dompdf
 * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
 */
namespace Dompdf;

use Dompdf\FrameDecorator\AbstractFrameDecorator;
use Dompdf\FrameDecorator\Table as TableFrameDecorator;
use Dompdf\FrameDecorator\TableCell as TableCellFrameDecorator;

/**
 * Maps table cells to the table grid.
 *
 * This class resolves borders in tables with collapsed borders and helps
 * place row & column spanned table cells.
 *
 * @package dompdf
 */
class Cellmap
{
    /**
     * Border style weight lookup for collapsed border resolution.
     */
    protected const BORDER_STYLE_SCORE = [
        "double" => 8,
        "solid"  => 7,
        "dashed" => 6,
        "dotted" => 5,
        "ridge"  => 4,
        "outset" => 3,
        "groove" => 2,
        "inset"  => 1,
        "none"   => 0
    ];

    /**
     * The table object this cellmap is attached to.
     *
     * @var TableFrameDecorator
     */
    protected $_table;

    /**
     * The total number of rows in the table
     *
     * @var int
     */
    protected $_num_rows;

    /**
     * The total number of columns in the table
     *
     * @var int
     */
    protected $_num_cols;

    /**
     * 2D array mapping <row,column> to frames
     *
     * @var Frame[][]
     */
    protected $_cells;

    /**
     * 1D array of column dimensions
     *
     * @var array
     */
    protected $_columns;

    /**
     * 1D array of row dimensions
     *
     * @var array
     */
    protected $_rows;

    /**
     * 2D array of border specs
     *
     * @var array
     */
    protected $_borders;

    /**
     * 1D Array mapping frames to (multiple) <row, col> pairs, keyed on frame_id.
     *
     * @var array[]
     */
    protected $_frames;

    /**
     * Current column when adding cells, 0-based
     *
     * @var int
     */
    private $__col;

    /**
     * Current row when adding cells, 0-based
     *
     * @var int
     */
    private $__row;

    /**
     * Tells whether the columns' width can be modified
     *
     * @var bool
     */
    private $_columns_locked = false;

    /**
     * Tells whether the table has table-layout:fixed
     *
     * @var bool
     */
    private $_fixed_layout = false;

    /**
     * @param TableFrameDecorator $table
     */
    public function __construct(TableFrameDecorator $table)
    {
        $this->_table = $table;
        $this->reset();
    }

    public function reset(): void
    {
        $this->_num_rows = 0;
        $this->_num_cols = 0;

        $this->_cells = [];
        $this->_frames = [];

        if (!$this->_columns_locked) {
            $this->_columns = [];
        }

        $this->_rows = [];

        $this->_borders = [];

        $this->__col = $this->__row = 0;
    }

    public function lock_columns(): void
    {
        $this->_columns_locked = true;
    }

    /**
     * @return bool
     */
    public function is_columns_locked()
    {
        return $this->_columns_locked;
    }

    /**
     * @param bool $fixed
     */
    public function set_layout_fixed(bool $fixed)
    {
        $this->_fixed_layout = $fixed;
    }

    /**
     * @return bool
     */
    public function is_layout_fixed()
    {
        return $this->_fixed_layout;
    }

    /**
     * @return int
     */
    public function get_num_rows()
    {
        return $this->_num_rows;
    }

    /**
     * @return int
     */
    public function get_num_cols()
    {
        return $this->_num_cols;
    }

    /**
     * @return array
     */
    public function &get_columns()
    {
        return $this->_columns;
    }

    /**
     * @param $columns
     */
    public function set_columns($columns)
    {
        $this->_columns = $columns;
    }

    /**
     * @param int $i
     *
     * @return mixed
     */
    public function &get_column($i)
    {
        if (!isset($this->_columns[$i])) {
            $this->_columns[$i] = [
                "x"          => 0,
                "min-width"  => 0,
                "max-width"  => 0,
                "used-width" => null,
                "absolute"   => 0,
                "percent"    => 0,
                "auto"       => true,
            ];
        }

        return $this->_columns[$i];
    }

    /**
     * @return array
     */
    public function &get_rows()
    {
        return $this->_rows;
    }

    /**
     * @param int $j
     *
     * @return mixed
     */
    public function &get_row($j)
    {
        if (!isset($this->_rows[$j])) {
            $this->_rows[$j] = [
                "y"            => 0,
                "first-column" => 0,
                "height"       => null,
            ];
        }

        return $this->_rows[$j];
    }

    /**
     * @param int $i
     * @param int $j
     * @param mixed $h_v
     * @param null|mixed $prop
     *
     * @return mixed
     */
    public function get_border($i, $j, $h_v, $prop = null)
    {
        if (!isset($this->_borders[$i][$j][$h_v])) {
            $this->_borders[$i][$j][$h_v] = [
                "width" => 0,
                "style" => "solid",
                "color" => "black",
            ];
        }

        if (isset($prop)) {
            return $this->_borders[$i][$j][$h_v][$prop];
        }

        return $this->_borders[$i][$j][$h_v];
    }

    /**
     * @param int $i
     * @param int $j
     *
     * @return array
     */
    public function get_border_properties($i, $j)
    {
        return [
            "top"    => $this->get_border($i, $j, "horizontal"),
            "right"  => $this->get_border($i, $j + 1, "vertical"),
            "bottom" => $this->get_border($i + 1, $j, "horizontal"),
            "left"   => $this->get_border($i, $j, "vertical"),
        ];
    }

    /**
     * @param Frame $frame
     *
     * @return array|null
     */
    public function get_spanned_cells(Frame $frame)
    {
        $key = $frame->get_id();

        if (isset($this->_frames[$key])) {
            return $this->_frames[$key];
        }

        return null;
    }

    /**
     * @param Frame $frame
     *
     * @return bool
     */
    public function frame_exists_in_cellmap(Frame $frame)
    {
        $key = $frame->get_id();

        return isset($this->_frames[$key]);
    }

    /**
     * @param Frame $frame
     *
     * @return array
     * @throws Exception
     */
    public function get_frame_position(Frame $frame)
    {
        global $_dompdf_warnings;

        $key = $frame->get_id();

        if (!isset($this->_frames[$key])) {
            throw new Exception("Frame not found in cellmap");
        }

        // Positions are stored relative to the table position
        [$table_x, $table_y] = $this->_table->get_position();
        $col = $this->_frames[$key]["columns"][0];
        $row = $this->_frames[$key]["rows"][0];

        if (!isset($this->_columns[$col])) {
            $_dompdf_warnings[] = "Frame not found in columns array.  Check your table layout for missing or extra TDs.";
            $x = $table_x;
        } else {
            $x = $table_x + $this->_columns[$col]["x"];
        }

        if (!isset($this->_rows[$row])) {
            $_dompdf_warnings[] = "Frame not found in row array.  Check your table layout for missing or extra TDs.";
            $y = $table_y;
        } else {
            $y = $table_y + $this->_rows[$row]["y"];
        }

        return [$x, $y, "x" => $x, "y" => $y];
    }

    /**
     * @param Frame $frame
     *
     * @return int
     * @throws Exception
     */
    public function get_frame_width(Frame $frame)
    {
        $key = $frame->get_id();

        if (!isset($this->_frames[$key])) {
            throw new Exception("Frame not found in cellmap");
        }

        $cols = $this->_frames[$key]["columns"];
        $w = 0;
        foreach ($cols as $i) {
            $w += $this->_columns[$i]["used-width"];
        }

        return $w;
    }

    /**
     * @param Frame $frame
     *
     * @return int
     * @throws Exception
     * @throws Exception
     */
    public function get_frame_height(Frame $frame)
    {
        $key = $frame->get_id();

        if (!isset($this->_frames[$key])) {
            throw new Exception("Frame not found in cellmap");
        }

        $rows = $this->_frames[$key]["rows"];
        $h = 0;
        foreach ($rows as $i) {
            if (!isset($this->_rows[$i])) {
                throw new Exception("The row #$i could not be found, please file an issue in the tracker with the HTML code");
            }

            $h += $this->_rows[$i]["height"];
        }

        return $h;
    }

    /**
     * @param int $j
     * @param mixed $width
     */
    public function set_column_width($j, $width)
    {
        if ($this->_columns_locked) {
            return;
        }

        $col =& $this->get_column($j);
        $col["used-width"] = $width;
        $next_col =& $this->get_column($j + 1);
        $next_col["x"] = $col["x"] + $width;
    }

    /**
     * @param int $i
     * @param long $height
     */
    public function set_row_height($i, $height)
    {
        $row =& $this->get_row($i);
        if ($height > $row["height"]) {
            $row["height"] = $height;
        }
        $next_row =& $this->get_row($i + 1);
        $next_row["y"] = $row["y"] + $row["height"];
    }

    /**
     * https://www.w3.org/TR/CSS21/tables.html#border-conflict-resolution
     *
     * @param int    $i
     * @param int    $j
     * @param string $h_v         `horizontal` or `vertical`
     * @param array  $border_spec
     */
    protected function resolve_border(int $i, int $j, string $h_v, array $border_spec): void
    {
        if (!isset($this->_borders[$i][$j][$h_v])) {
            $this->_borders[$i][$j][$h_v] = $border_spec;
            return;
        }

        $border = $this->_borders[$i][$j][$h_v];

        $n_width = $border_spec["width"];
        $n_style = $border_spec["style"];
        $o_width = $border["width"];
        $o_style = $border["style"];

        if ($o_style === "hidden") {
            return;
        }

        // A style of `none` has lowest priority independent of its specified
        // width here, as its resolved width is always 0
        if ($n_style === "hidden" || $n_width > $o_width
            || ($o_width == $n_width
                && isset(self::BORDER_STYLE_SCORE[$n_style])
                && isset(self::BORDER_STYLE_SCORE[$o_style])
                && self::BORDER_STYLE_SCORE[$n_style] > self::BORDER_STYLE_SCORE[$o_style])
        ) {
            $this->_borders[$i][$j][$h_v] = $border_spec;
        }
    }

    /**
     * Get the resolved border properties for the given frame.
     *
     * @param AbstractFrameDecorator $frame
     *
     * @return array[]
     */
    protected function get_resolved_border(AbstractFrameDecorator $frame): array
    {
        $key = $frame->get_id();
        $columns = $this->_frames[$key]["columns"];
        $rows = $this->_frames[$key]["rows"];

        $first_col = $columns[0];
        $last_col = $columns[count($columns) - 1];
        $first_row = $rows[0];
        $last_row = $rows[count($rows) - 1];

        $max_top = null;
        $max_bottom = null;
        $max_left = null;
        $max_right = null;

        foreach ($columns as $col) {
            $top = $this->_borders[$first_row][$col]["horizontal"];
            $bottom = $this->_borders[$last_row + 1][$col]["horizontal"];

            if ($max_top === null || $top["width"] > $max_top["width"]) {
                $max_top = $top;
            }
            if ($max_bottom === null || $bottom["width"] > $max_bottom["width"]) {
                $max_bottom = $bottom;
            }
        }

        foreach ($rows as $row) {
            $left = $this->_borders[$row][$first_col]["vertical"];
            $right = $this->_borders[$row][$last_col + 1]["vertical"];

            if ($max_left === null || $left["width"] > $max_left["width"]) {
                $max_left = $left;
            }
            if ($max_right === null || $right["width"] > $max_right["width"]) {
                $max_right = $right;
            }
        }

        return [$max_top, $max_right, $max_bottom, $max_left];
    }

    /**
     * @param AbstractFrameDecorator $frame
     */
    public function add_frame(Frame $frame): void
    {
        $style = $frame->get_style();
        $display = $style->display;

        $collapse = $this->_table->get_style()->border_collapse === "collapse";

        // Recursively add the frames within the table, its row groups and rows
        if ($frame === $this->_table
            || $display === "table-row"
            || in_array($display, TableFrameDecorator::ROW_GROUPS, true)
        ) {
            $start_row = $this->__row;

            foreach ($frame->get_children() as $child) {
                $this->add_frame($child);
            }

            if ($display === "table-row") {
                $this->add_row();
            }

            $num_rows = $this->__row - $start_row - 1;
            $key = $frame->get_id();

            // Row groups always span across the entire table
            $this->_frames[$key]["columns"] = range(0, max(0, $this->_num_cols - 1));
            $this->_frames[$key]["rows"] = range($start_row, max(0, $this->__row - 1));
            $this->_frames[$key]["frame"] = $frame;

            if ($collapse) {
                $bp = $style->get_border_properties();

                // Resolve vertical borders
                for ($i = 0; $i < $num_rows + 1; $i++) {
                    $this->resolve_border($start_row + $i, 0, "vertical", $bp["left"]);
                    $this->resolve_border($start_row + $i, $this->_num_cols, "vertical", $bp["right"]);
                }

                // Resolve horizontal borders
                for ($j = 0; $j < $this->_num_cols; $j++) {
                    $this->resolve_border($start_row, $j, "horizontal", $bp["top"]);
                    $this->resolve_border($this->__row, $j, "horizontal", $bp["bottom"]);
                }

                if ($frame === $this->_table) {
                    // Clear borders because the cells are now using them. The
                    // border width still needs to be set to half the resolved
                    // width so that the table is positioned properly
                    [$top, $right, $bottom, $left] = $this->get_resolved_border($frame);

                    $style->set_used("border_top_width", $top["width"] / 2);
                    $style->set_used("border_right_width", $right["width"] / 2);
                    $style->set_used("border_bottom_width", $bottom["width"] / 2);
                    $style->set_used("border_left_width", $left["width"] / 2);
                    $style->set_used("border_style", "none");
                } else {
                    // Clear borders for rows and row groups
                    $style->set_used("border_width", 0);
                    $style->set_used("border_style", "none");
                }
            }

            if ($frame === $this->_table) {
                // Apply resolved borders to table cells and calculate column
                // widths after all frames have been added
                $this->calculate_column_widths();
            }
            return;
        }

        // Add the frame to the cellmap
        $key = $frame->get_id();
        $node = $frame->get_node();
        $bp = $style->get_border_properties();

        // Determine where this cell is going
        $colspan = max((int) $node->getAttribute("colspan"), 1);
        $rowspan = max((int) $node->getAttribute("rowspan"), 1);

        // Find the next available column (fix by Ciro Mondueri)
        $ac = $this->__col;
        while (isset($this->_cells[$this->__row][$ac])) {
            $ac++;
        }

        $this->__col = $ac;

        // Rows:
        for ($i = 0; $i < $rowspan; $i++) {
            $row = $this->__row + $i;

            $this->_frames[$key]["rows"][] = $row;

            for ($j = 0; $j < $colspan; $j++) {
                $this->_cells[$row][$this->__col + $j] = $frame;
            }

            if ($collapse) {
                // Resolve vertical borders
                $this->resolve_border($row, $this->__col, "vertical", $bp["left"]);
                $this->resolve_border($row, $this->__col + $colspan, "vertical", $bp["right"]);
            }
        }

        // Columns:
        for ($j = 0; $j < $colspan; $j++) {
            $col = $this->__col + $j;
            $this->_frames[$key]["columns"][] = $col;

            if ($collapse) {
                // Resolve horizontal borders
                $this->resolve_border($this->__row, $col, "horizontal", $bp["top"]);
                $this->resolve_border($this->__row + $rowspan, $col, "horizontal", $bp["bottom"]);
            }
        }

        $this->_frames[$key]["frame"] = $frame;

        $this->__col += $colspan;
        if ($this->__col > $this->_num_cols) {
            $this->_num_cols = $this->__col;
        }
    }

    /**
     * Apply resolved borders to table cells and calculate column widths.
     */
    protected function calculate_column_widths(): void
    {
        $table = $this->_table;
        $table_style = $table->get_style();
        $collapse = $table_style->border_collapse === "collapse";

        if ($collapse) {
            $v_spacing = 0;
            $h_spacing = 0;
        } else {
            // The additional 1/2 width gets added to the table proper
            [$h, $v] = $table_style->border_spacing;
            $v_spacing = $v / 2;
            $h_spacing = $h / 2;
        }

        foreach ($this->_frames as $frame_info) {
            /** @var TableCellFrameDecorator */
            $frame = $frame_info["frame"];
            $style = $frame->get_style();
            $display = $style->display;

            if ($display !== "table-cell") {
                continue;
            }

            if ($collapse) {
                // Set the resolved border at half width
                [$top, $right, $bottom, $left] = $this->get_resolved_border($frame);

                $style->set_used("border_top_width", $top["width"] / 2);
                $style->set_used("border_top_style", $top["style"]);
                $style->set_used("border_top_color", $top["color"]);
                $style->set_used("border_right_width", $right["width"] / 2);
                $style->set_used("border_right_style", $right["style"]);
                $style->set_used("border_right_color", $right["color"]);
                $style->set_used("border_bottom_width", $bottom["width"] / 2);
                $style->set_used("border_bottom_style", $bottom["style"]);
                $style->set_used("border_bottom_color", $bottom["color"]);
                $style->set_used("border_left_width", $left["width"] / 2);
                $style->set_used("border_left_style", $left["style"]);
                $style->set_used("border_left_color", $left["color"]);
                $style->set_used("margin", 0);
            } else {
                // Border spacing is effectively a margin between cells
                $style->set_used("margin_top", $v_spacing);
                $style->set_used("margin_bottom", $v_spacing);
                $style->set_used("margin_left", $h_spacing);
                $style->set_used("margin_right", $h_spacing);
            }

            if ($this->_columns_locked) {
                continue;
            }

            $node = $frame->get_node();
            $colspan = max((int) $node->getAttribute("colspan"), 1);
            $first_col = $frame_info["columns"][0];

            // Resolve the frame's width
            if ($this->_fixed_layout) {
                list($frame_min, $frame_max) = [0, 10e-10];
            } else {
                list($frame_min, $frame_max) = $frame->get_min_max_width();
            }

            $width = $style->width;

            $val = null;
            if (Helpers::is_percent($width) && $colspan === 1) {
                $var = "percent";
                $val = (float)rtrim($width, "% ");
            } elseif ($width !== "auto" && $colspan === 1) {
                $var = "absolute";
                $val = $frame_min;
            }

            $min = 0;
            $max = 0;
            for ($cs = 0; $cs < $colspan; $cs++) {

                // Resolve the frame's width(s) with other cells
                $col =& $this->get_column($first_col + $cs);

                // Note: $var is either 'percent' or 'absolute'.  We compare the
                // requested percentage or absolute values with the existing widths
                // and adjust accordingly.
                if (isset($var) && $val > $col[$var]) {
                    $col[$var] = $val;
                    $col["auto"] = false;
                }

                $min += $col["min-width"];
                $max += $col["max-width"];
            }

            if ($frame_min > $min && $colspan === 1) {
                // The frame needs more space.  Expand each sub-column
                // FIXME try to avoid putting this dummy value when table-layout:fixed
                $inc = ($this->is_layout_fixed() ? 10e-10 : ($frame_min - $min));
                for ($c = 0; $c < $colspan; $c++) {
                    $col =& $this->get_column($first_col + $c);
                    $col["min-width"] += $inc;
                }
            }

            if ($frame_max > $max) {
                // FIXME try to avoid putting this dummy value when table-layout:fixed
                $inc = ($this->is_layout_fixed() ? 10e-10 : ($frame_max - $max) / $colspan);
                for ($c = 0; $c < $colspan; $c++) {
                    $col =& $this->get_column($first_col + $c);
                    $col["max-width"] += $inc;
                }
            }
        }

        // Adjust absolute columns so that the absolute (and max) width is the
        // largest minimum width of all cells. This accounts for cells without
        // absolute width within an absolute column
        foreach ($this->_columns as &$col) {
            if ($col["absolute"] > 0) {
                $col["absolute"] = $col["min-width"];
                $col["max-width"] = $col["min-width"];
            }
        }
    }

    protected function add_row(): void
    {
        $this->__row++;
        $this->_num_rows++;

        // Find the next available column
        $i = 0;
        while (isset($this->_cells[$this->__row][$i])) {
            $i++;
        }

        $this->__col = $i;
    }

    /**
     * Remove a row from the cellmap.
     *
     * @param Frame
     */
    public function remove_row(Frame $row)
    {
        $key = $row->get_id();
        if (!isset($this->_frames[$key])) {
            return; // Presumably this row has already been removed
        }

        $this->__row = $this->_num_rows--;

        $rows = $this->_frames[$key]["rows"];
        $columns = $this->_frames[$key]["columns"];

        // Remove all frames from this row
        foreach ($rows as $r) {
            foreach ($columns as $c) {
                if (isset($this->_cells[$r][$c])) {
                    $id = $this->_cells[$r][$c]->get_id();

                    $this->_cells[$r][$c] = null;
                    unset($this->_cells[$r][$c]);

                    // has multiple rows?
                    if (isset($this->_frames[$id]) && count($this->_frames[$id]["rows"]) > 1) {
                        // remove just the desired row, but leave the frame
                        if (($row_key = array_search($r, $this->_frames[$id]["rows"])) !== false) {
                            unset($this->_frames[$id]["rows"][$row_key]);
                        }
                        continue;
                    }

                    $this->_frames[$id] = null;
                    unset($this->_frames[$id]);
                }
            }

            $this->_rows[$r] = null;
            unset($this->_rows[$r]);
        }

        $this->_frames[$key] = null;
        unset($this->_frames[$key]);
    }

    /**
     * Remove a row group from the cellmap.
     *
     * @param Frame $group The group to remove
     */
    public function remove_row_group(Frame $group)
    {
        $key = $group->get_id();
        if (!isset($this->_frames[$key])) {
            return; // Presumably this row has already been removed
        }

        $iter = $group->get_first_child();
        while ($iter) {
            $this->remove_row($iter);
            $iter = $iter->get_next_sibling();
        }

        $this->_frames[$key] = null;
        unset($this->_frames[$key]);
    }

    /**
     * Update a row group after rows have been removed
     *
     * @param Frame $group    The group to update
     * @param Frame $last_row The last row in the row group
     */
    public function update_row_group(Frame $group, Frame $last_row)
    {
        $g_key = $group->get_id();

        $first_index = $this->_frames[$g_key]["rows"][0];
        $last_index = $first_index;
        $row = $last_row;
        while ($row = $row->get_prev_sibling()) {
            $last_index++;
        }

        $this->_frames[$g_key]["rows"] = range($first_index, $last_index);
    }

    public function assign_x_positions(): void
    {
        // Pre-condition: widths must be resolved and assigned to columns and
        // column[0]["x"] must be set.

        if ($this->_columns_locked) {
            return;
        }

        $x = $this->_columns[0]["x"];
        foreach (array_keys($this->_columns) as $j) {
            $this->_columns[$j]["x"] = $x;
            $x += $this->_columns[$j]["used-width"];
        }
    }

    public function assign_frame_heights(): void
    {
        // Pre-condition: widths and heights of each column & row must be
        // calcluated
        foreach ($this->_frames as $arr) {
            $frame = $arr["frame"];

            $h = 0.0;
            foreach ($arr["rows"] as $row) {
                if (!isset($this->_rows[$row])) {
                    // The row has been removed because of a page split, so skip it.
                    continue;
                }

                $h += $this->_rows[$row]["height"];
            }

            if ($frame instanceof TableCellFrameDecorator) {
                $frame->set_cell_height($h);
            } else {
                $frame->get_style()->set_used("height", $h);
            }
        }
    }

    /**
     * Re-adjust frame height if the table height is larger than its content
     */
    public function set_frame_heights(float $table_height, float $content_height): void
    {
        // Distribute the increased height proportionally amongst each row
        foreach ($this->_frames as $arr) {
            $frame = $arr["frame"];

            $h = 0.0;
            foreach ($arr["rows"] as $row) {
                if (!isset($this->_rows[$row])) {
                    continue;
                }

                $h += $this->_rows[$row]["height"];
            }

            if ($content_height > 0) {
                $new_height = ($h / $content_height) * $table_height;
            } else {
                $new_height = 0.0;
            }

            if ($frame instanceof TableCellFrameDecorator) {
                $frame->set_cell_height($new_height);
            } else {
                $frame->get_style()->set_used("height", $new_height);
            }
        }
    }

    /**
     * Used for debugging:
     *
     * @return string
     */
    public function __toString(): string
    {
        $str = "";
        $str .= "Columns:<br/>";
        $str .= Helpers::pre_r($this->_columns, true);
        $str .= "Rows:<br/>";
        $str .= Helpers::pre_r($this->_rows, true);

        $str .= "Frames:<br/>";
        $arr = [];
        foreach ($this->_frames as $key => $val) {
            $arr[$key] = ["columns" => $val["columns"], "rows" => $val["rows"]];
        }

        $str .= Helpers::pre_r($arr, true);

        if (php_sapi_name() == "cli") {
            $str = strip_tags(str_replace(["<br/>", "<b>", "</b>"],
                ["\n", chr(27) . "[01;33m", chr(27) . "[0m"],
                $str));
        }

        return $str;
    }
}
<?php
/**
 * @package dompdf
 * @link    https://github.com/dompdf/dompdf
 * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
 */
namespace Dompdf\Css;

use Dompdf\Frame;
use Dompdf\Helpers;

/**
 * Translates HTML 4.0 attributes into CSS rules
 *
 * @package dompdf
 */
class AttributeTranslator
{
    static $_style_attr = "_html_style_attribute";

    // Munged data originally from
    // http://www.w3.org/TR/REC-html40/index/attributes.html
    // http://www.cs.tut.fi/~jkorpela/html2css.html
    private static $__ATTRIBUTE_LOOKUP = [
        //'caption' => array ( 'align' => '', ),
        'img' => [
            'align' => [
                'bottom' => 'vertical-align: baseline;',
                'middle' => 'vertical-align: middle;',
                'top' => 'vertical-align: top;',
                'left' => 'float: left;',
                'right' => 'float: right;'
            ],
            'border' => 'border: %0.2Fpx solid;',
            'height' => '_set_px_height',
            'hspace' => 'padding-left: %1$0.2Fpx; padding-right: %1$0.2Fpx;',
            'vspace' => 'padding-top: %1$0.2Fpx; padding-bottom: %1$0.2Fpx;',
            'width' => '_set_px_width',
        ],
        'table' => [
            'align' => [
                'left' => 'margin-left: 0; margin-right: auto;',
                'center' => 'margin-left: auto; margin-right: auto;',
                'right' => 'margin-left: auto; margin-right: 0;'
            ],
            'bgcolor' => 'background-color: %s;',
            'border' => '_set_table_border',
            'cellpadding' => '_set_table_cellpadding', //'border-spacing: %0.2F; border-collapse: separate;',
            'cellspacing' => '_set_table_cellspacing',
            'frame' => [
                'void' => 'border-style: none;',
                'above' => 'border-top-style: solid;',
                'below' => 'border-bottom-style: solid;',
                'hsides' => 'border-left-style: solid; border-right-style: solid;',
                'vsides' => 'border-top-style: solid; border-bottom-style: solid;',
                'lhs' => 'border-left-style: solid;',
                'rhs' => 'border-right-style: solid;',
                'box' => 'border-style: solid;',
                'border' => 'border-style: solid;'
            ],
            'rules' => '_set_table_rules',
            'width' => 'width: %s;',
        ],
        'hr' => [
            'align' => '_set_hr_align', // Need to grab width to set 'left' & 'right' correctly
            'noshade' => 'border-style: solid;',
            'size' => '_set_hr_size', //'border-width: %0.2F px;',
            'width' => 'width: %s;',
        ],
        'div' => [
            'align' => 'text-align: %s;',
        ],
        'h1' => [
            'align' => 'text-align: %s;',
        ],
        'h2' => [
            'align' => 'text-align: %s;',
        ],
        'h3' => [
            'align' => 'text-align: %s;',
        ],
        'h4' => [
            'align' => 'text-align: %s;',
        ],
        'h5' => [
            'align' => 'text-align: %s;',
        ],
        'h6' => [
            'align' => 'text-align: %s;',
        ],
        //TODO: translate more form element attributes
        'input' => [
            'size' => '_set_input_width'
        ],
        'p' => [
            'align' => 'text-align: %s;',
        ],
//    'col' => array(
//      'align'  => '',
//      'valign' => '',
//    ),
//    'colgroup' => array(
//      'align'  => '',
//      'valign' => '',
//    ),
        'tbody' => [
            'align' => '_set_table_row_align',
            'valign' => '_set_table_row_valign',
        ],
        'td' => [
            'align' => 'text-align: %s;',
            'bgcolor' => '_set_background_color',
            'height' => 'height: %s;',
            'nowrap' => 'white-space: nowrap;',
            'valign' => 'vertical-align: %s;',
            'width' => 'width: %s;',
        ],
        'tfoot' => [
            'align' => '_set_table_row_align',
            'valign' => '_set_table_row_valign',
        ],
        'th' => [
            'align' => 'text-align: %s;',
            'bgcolor' => '_set_background_color',
            'height' => 'height: %s;',
            'nowrap' => 'white-space: nowrap;',
            'valign' => 'vertical-align: %s;',
            'width' => 'width: %s;',
        ],
        'thead' => [
            'align' => '_set_table_row_align',
            'valign' => '_set_table_row_valign',
        ],
        'tr' => [
            'align' => '_set_table_row_align',
            'bgcolor' => '_set_table_row_bgcolor',
            'valign' => '_set_table_row_valign',
        ],
        'body' => [
            'background' => 'background-image: url(%s);',
            'bgcolor' => '_set_background_color',
            'link' => '_set_body_link',
            'text' => '_set_color',
        ],
        'br' => [
            'clear' => 'clear: %s;',
        ],
        'basefont' => [
            'color' => '_set_color',
            'face' => 'font-family: %s;',
            'size' => '_set_basefont_size',
        ],
        'font' => [
            'color' => '_set_color',
            'face' => 'font-family: %s;',
            'size' => '_set_font_size',
        ],
        'dir' => [
            'compact' => 'margin: 0.5em 0;',
        ],
        'dl' => [
            'compact' => 'margin: 0.5em 0;',
        ],
        'menu' => [
            'compact' => 'margin: 0.5em 0;',
        ],
        'ol' => [
            'compact' => 'margin: 0.5em 0;',
            'start' => 'counter-reset: -dompdf-default-counter %d;',
            'type' => 'list-style-type: %s;',
        ],
        'ul' => [
            'compact' => 'margin: 0.5em 0;',
            'type' => 'list-style-type: %s;',
        ],
        'li' => [
            'type' => 'list-style-type: %s;',
            'value' => 'counter-reset: -dompdf-default-counter %d;',
        ],
        'pre' => [
            'width' => 'width: %s;',
        ],
    ];

    protected static $_last_basefont_size = 3;
    protected static $_font_size_lookup = [
        // For basefont support
        -3 => "4pt",
        -2 => "5pt",
        -1 => "6pt",
        0 => "7pt",

        1 => "8pt",
        2 => "10pt",
        3 => "12pt",
        4 => "14pt",
        5 => "18pt",
        6 => "24pt",
        7 => "34pt",

        // For basefont support
        8 => "48pt",
        9 => "44pt",
        10 => "52pt",
        11 => "60pt",
    ];

    /**
     * @param Frame $frame
     */
    static function translate_attributes(Frame $frame)
    {
        $node = $frame->get_node();
        $tag = $node->nodeName;

        if (!isset(self::$__ATTRIBUTE_LOOKUP[$tag])) {
            return;
        }

        $valid_attrs = self::$__ATTRIBUTE_LOOKUP[$tag];
        $attrs = $node->attributes;
        $style = rtrim($node->getAttribute(self::$_style_attr), "; ");
        if ($style != "") {
            $style .= ";";
        }

        foreach ($attrs as $attr => $attr_node) {
            if (!isset($valid_attrs[$attr])) {
                continue;
            }

            $value = $attr_node->value;

            $target = $valid_attrs[$attr];

            // Look up $value in $target, if $target is an array:
            if (is_array($target)) {
                if (isset($target[$value])) {
                    $style .= " " . self::_resolve_target($node, $target[$value], $value);
                }
            } else {
                // otherwise use target directly
                $style .= " " . self::_resolve_target($node, $target, $value);
            }
        }

        if (!is_null($style)) {
            $style = ltrim($style);
            $node->setAttribute(self::$_style_attr, $style);
        }
    }

    /**
     * @param \DOMNode $node
     * @param string $target
     * @param string $value
     *
     * @return string
     */
    protected static function _resolve_target(\DOMNode $node, $target, $value)
    {
        if ($target[0] === "_") {
            return self::$target($node, $value);
        }

        return $value ? sprintf($target, $value) : "";
    }

    /**
     * @param \DOMElement $node
     * @param string $new_style
     */
    static function append_style(\DOMElement $node, $new_style)
    {
        $style = rtrim($node->getAttribute(self::$_style_attr), ";");
        $style .= $new_style;
        $style = ltrim($style, ";");
        $node->setAttribute(self::$_style_attr, $style);
    }

    /**
     * @param \DOMNode $node
     *
     * @return \DOMNodeList|\DOMElement[]
     */
    protected static function get_cell_list(\DOMNode $node)
    {
        $xpath = new \DOMXpath($node->ownerDocument);

        switch ($node->nodeName) {
            default:
            case "table":
                $query = "tr/td | thead/tr/td | tbody/tr/td | tfoot/tr/td | tr/th | thead/tr/th | tbody/tr/th | tfoot/tr/th";
                break;

            case "tbody":
            case "tfoot":
            case "thead":
                $query = "tr/td | tr/th";
                break;

            case "tr":
                $query = "td | th";
                break;
        }

        return $xpath->query($query, $node);
    }

    /**
     * @param string $value
     *
     * @return string
     */
    protected static function _get_valid_color($value)
    {
        if (preg_match('/^#?([0-9A-F]{6})$/i', $value, $matches)) {
            $value = "#$matches[1]";
        }

        return $value;
    }

    /**
     * @param \DOMElement $node
     * @param string $value
     *
     * @return string
     */
    protected static function _set_color(\DOMElement $node, $value)
    {
        $value = self::_get_valid_color($value);

        return "color: $value;";
    }

    /**
     * @param \DOMElement $node
     * @param string $value
     *
     * @return string
     */
    protected static function _set_background_color(\DOMElement $node, $value)
    {
        $value = self::_get_valid_color($value);

        return "background-color: $value;";
    }

    protected static function _set_px_width(\DOMElement $node, string $value): string
    {
        $v = trim($value);

        if (Helpers::is_percent($v)) {
            return sprintf("width: %s;", $v);
        }

        if (is_numeric(mb_substr($v, 0, 1))) {
            return sprintf("width: %spx;", (float) $v);
        }

        return "";
    }

    protected static function _set_px_height(\DOMElement $node, string $value): string
    {
        $v = trim($value);

        if (Helpers::is_percent($v)) {
            return sprintf("height: %s;", $v);
        }

        if (is_numeric(mb_substr($v, 0, 1))) {
            return sprintf("height: %spx;", (float) $v);
        }

        return "";
    }

    /**
     * @param \DOMElement $node
     * @param string $value
     *
     * @return null
     */
    protected static function _set_table_cellpadding(\DOMElement $node, $value)
    {
        $cell_list = self::get_cell_list($node);

        foreach ($cell_list as $cell) {
            self::append_style($cell, "; padding: {$value}px;");
        }

        return null;
    }

    /**
     * @param \DOMElement $node
     * @param string $value
     *
     * @return string
     */
    protected static function _set_table_border(\DOMElement $node, $value)
    {
        return "border-width: $value" . "px;";
    }

    /**
     * @param \DOMElement $node
     * @param string $value
     *
     * @return string
     */
    protected static function _set_table_cellspacing(\DOMElement $node, $value)
    {
        $style = rtrim($node->getAttribute(self::$_style_attr), ";");

        if ($value == 0) {
            $style .= "; border-collapse: collapse;";
        } else {
            $style .= "; border-spacing: {$value}px; border-collapse: separate;";
        }

        return ltrim($style, ";");
    }

    /**
     * @param \DOMElement $node
     * @param string $value
     *
     * @return null|string
     */
    protected static function _set_table_rules(\DOMElement $node, $value)
    {
        $new_style = "; border-collapse: collapse;";

        switch ($value) {
            case "none":
                $new_style .= "border-style: none;";
                break;

            case "groups":
                // FIXME: unsupported
                return null;

            case "rows":
                $new_style .= "border-style: solid none solid none; border-width: 1px; ";
                break;

            case "cols":
                $new_style .= "border-style: none solid none solid; border-width: 1px; ";
                break;

            case "all":
                $new_style .= "border-style: solid; border-width: 1px; ";
                break;

            default:
                // Invalid value
                return null;
        }

        $cell_list = self::get_cell_list($node);

        foreach ($cell_list as $cell) {
            $style = $cell->getAttribute(self::$_style_attr);
            $style .= $new_style;
            $cell->setAttribute(self::$_style_attr, $style);
        }

        $style = rtrim($node->getAttribute(self::$_style_attr), ";");
        $style .= "; border-collapse: collapse; ";

        return ltrim($style, "; ");
    }

    /**
     * @param \DOMElement $node
     * @param string $value
     *
     * @return string
     */
    protected static function _set_hr_size(\DOMElement $node, $value)
    {
        $style = rtrim($node->getAttribute(self::$_style_attr), ";");
        $style .= "; border-width: " . max(0, $value - 2) . "; ";

        return ltrim($style, "; ");
    }

    /**
     * @param \DOMElement $node
     * @param string $value
     *
     * @return null|string
     */
    protected static function _set_hr_align(\DOMElement $node, $value)
    {
        $style = rtrim($node->getAttribute(self::$_style_attr), ";");
        $width = $node->getAttribute("width");

        if ($width == "") {
            $width = "100%";
        }

        $remainder = 100 - (double)rtrim($width, "% ");

        switch ($value) {
            case "left":
                $style .= "; margin-right: $remainder %;";
                break;

            case "right":
                $style .= "; margin-left: $remainder %;";
                break;

            case "center":
                $style .= "; margin-left: auto; margin-right: auto;";
                break;

            default:
                return null;
        }

        return ltrim($style, "; ");
    }

    /**
     * @param \DOMElement $node
     * @param string $value
     *
     * @return null|string
     */
    protected static function _set_input_width(\DOMElement $node, $value)
    {
        if (empty($value)) { return null; }

        if ($node->hasAttribute("type") && in_array(strtolower($node->getAttribute("type")), ["text","password"])) {
            return sprintf("width: %Fem", (((int)$value * .65)+2));
        } else {
            return sprintf("width: %upx;", (int)$value);
        }
    }

    /**
     * @param \DOMElement $node
     * @param string $value
     *
     * @return null
     */
    protected static function _set_table_row_align(\DOMElement $node, $value)
    {
        $cell_list = self::get_cell_list($node);

        foreach ($cell_list as $cell) {
            self::append_style($cell, "; text-align: $value;");
        }

        return null;
    }

    /**
     * @param \DOMElement $node
     * @param string $value
     *
     * @return null
     */
    protected static function _set_table_row_valign(\DOMElement $node, $value)
    {
        $cell_list = self::get_cell_list($node);

        foreach ($cell_list as $cell) {
            self::append_style($cell, "; vertical-align: $value;");
        }

        return null;
    }

    /**
     * @param \DOMElement $node
     * @param string $value
     *
     * @return null
     */
    protected static function _set_table_row_bgcolor(\DOMElement $node, $value)
    {
        $cell_list = self::get_cell_list($node);
        $value = self::_get_valid_color($value);

        foreach ($cell_list as $cell) {
            self::append_style($cell, "; background-color: $value;");
        }

        return null;
    }

    /**
     * @param \DOMElement $node
     * @param string $value
     *
     * @return null
     */
    protected static function _set_body_link(\DOMElement $node, $value)
    {
        $a_list = $node->getElementsByTagName("a");
        $value = self::_get_valid_color($value);

        foreach ($a_list as $a) {
            self::append_style($a, "; color: $value;");
        }

        return null;
    }

    /**
     * @param \DOMElement $node
     * @param string $value
     *
     * @return null
     */
    protected static function _set_basefont_size(\DOMElement $node, $value)
    {
        // FIXME: ? we don't actually set the font size of anything here, just
        // the base size for later modification by <font> tags.
        self::$_last_basefont_size = $value;

        return null;
    }

    /**
     * @param \DOMElement $node
     * @param string $value
     *
     * @return string
     */
    protected static function _set_font_size(\DOMElement $node, $value)
    {
        $style = $node->getAttribute(self::$_style_attr);

        if ($value[0] === "-" || $value[0] === "+") {
            $value = self::$_last_basefont_size + (int)$value;
        }

        if (isset(self::$_font_size_lookup[$value])) {
            $style .= "; font-size: " . self::$_font_size_lookup[$value] . ";";
        } else {
            $style .= "; font-size: $value;";
        }

        return ltrim($style, "; ");
    }
}
<?php

/**
 * @package dompdf
 * @link    https://github.com/dompdf/dompdf
 * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
 */
namespace Dompdf\Css;

use Dompdf\Helpers;

class Color
{
    static $cssColorNames = [
        "aliceblue" => "F0F8FF",
        "antiquewhite" => "FAEBD7",
        "aqua" => "00FFFF",
        "aquamarine" => "7FFFD4",
        "azure" => "F0FFFF",
        "beige" => "F5F5DC",
        "bisque" => "FFE4C4",
        "black" => "000000",
        "blanchedalmond" => "FFEBCD",
        "blue" => "0000FF",
        "blueviolet" => "8A2BE2",
        "brown" => "A52A2A",
        "burlywood" => "DEB887",
        "cadetblue" => "5F9EA0",
        "chartreuse" => "7FFF00",
        "chocolate" => "D2691E",
        "coral" => "FF7F50",
        "cornflowerblue" => "6495ED",
        "cornsilk" => "FFF8DC",
        "crimson" => "DC143C",
        "cyan" => "00FFFF",
        "darkblue" => "00008B",
        "darkcyan" => "008B8B",
        "darkgoldenrod" => "B8860B",
        "darkgray" => "A9A9A9",
        "darkgreen" => "006400",
        "darkgrey" => "A9A9A9",
        "darkkhaki" => "BDB76B",
        "darkmagenta" => "8B008B",
        "darkolivegreen" => "556B2F",
        "darkorange" => "FF8C00",
        "darkorchid" => "9932CC",
        "darkred" => "8B0000",
        "darksalmon" => "E9967A",
        "darkseagreen" => "8FBC8F",
        "darkslateblue" => "483D8B",
        "darkslategray" => "2F4F4F",
        "darkslategrey" => "2F4F4F",
        "darkturquoise" => "00CED1",
        "darkviolet" => "9400D3",
        "deeppink" => "FF1493",
        "deepskyblue" => "00BFFF",
        "dimgray" => "696969",
        "dimgrey" => "696969",
        "dodgerblue" => "1E90FF",
        "firebrick" => "B22222",
        "floralwhite" => "FFFAF0",
        "forestgreen" => "228B22",
        "fuchsia" => "FF00FF",
        "gainsboro" => "DCDCDC",
        "ghostwhite" => "F8F8FF",
        "gold" => "FFD700",
        "goldenrod" => "DAA520",
        "gray" => "808080",
        "green" => "008000",
        "greenyellow" => "ADFF2F",
        "grey" => "808080",
        "honeydew" => "F0FFF0",
        "hotpink" => "FF69B4",
        "indianred" => "CD5C5C",
        "indigo" => "4B0082",
        "ivory" => "FFFFF0",
        "khaki" => "F0E68C",
        "lavender" => "E6E6FA",
        "lavenderblush" => "FFF0F5",
        "lawngreen" => "7CFC00",
        "lemonchiffon" => "FFFACD",
        "lightblue" => "ADD8E6",
        "lightcoral" => "F08080",
        "lightcyan" => "E0FFFF",
        "lightgoldenrodyellow" => "FAFAD2",
        "lightgray" => "D3D3D3",
        "lightgreen" => "90EE90",
        "lightgrey" => "D3D3D3",
        "lightpink" => "FFB6C1",
        "lightsalmon" => "FFA07A",
        "lightseagreen" => "20B2AA",
        "lightskyblue" => "87CEFA",
        "lightslategray" => "778899",
        "lightslategrey" => "778899",
        "lightsteelblue" => "B0C4DE",
        "lightyellow" => "FFFFE0",
        "lime" => "00FF00",
        "limegreen" => "32CD32",
        "linen" => "FAF0E6",
        "magenta" => "FF00FF",
        "maroon" => "800000",
        "mediumaquamarine" => "66CDAA",
        "mediumblue" => "0000CD",
        "mediumorchid" => "BA55D3",
        "mediumpurple" => "9370DB",
        "mediumseagreen" => "3CB371",
        "mediumslateblue" => "7B68EE",
        "mediumspringgreen" => "00FA9A",
        "mediumturquoise" => "48D1CC",
        "mediumvioletred" => "C71585",
        "midnightblue" => "191970",
        "mintcream" => "F5FFFA",
        "mistyrose" => "FFE4E1",
        "moccasin" => "FFE4B5",
        "navajowhite" => "FFDEAD",
        "navy" => "000080",
        "oldlace" => "FDF5E6",
        "olive" => "808000",
        "olivedrab" => "6B8E23",
        "orange" => "FFA500",
        "orangered" => "FF4500",
        "orchid" => "DA70D6",
        "palegoldenrod" => "EEE8AA",
        "palegreen" => "98FB98",
        "paleturquoise" => "AFEEEE",
        "palevioletred" => "DB7093",
        "papayawhip" => "FFEFD5",
        "peachpuff" => "FFDAB9",
        "peru" => "CD853F",
        "pink" => "FFC0CB",
        "plum" => "DDA0DD",
        "powderblue" => "B0E0E6",
        "purple" => "800080",
        "red" => "FF0000",
        "rosybrown" => "BC8F8F",
        "royalblue" => "4169E1",
        "saddlebrown" => "8B4513",
        "salmon" => "FA8072",
        "sandybrown" => "F4A460",
        "seagreen" => "2E8B57",
        "seashell" => "FFF5EE",
        "sienna" => "A0522D",
        "silver" => "C0C0C0",
        "skyblue" => "87CEEB",
        "slateblue" => "6A5ACD",
        "slategray" => "708090",
        "slategrey" => "708090",
        "snow" => "FFFAFA",
        "springgreen" => "00FF7F",
        "steelblue" => "4682B4",
        "tan" => "D2B48C",
        "teal" => "008080",
        "thistle" => "D8BFD8",
        "tomato" => "FF6347",
        "turquoise" => "40E0D0",
        "violet" => "EE82EE",
        "wheat" => "F5DEB3",
        "white" => "FFFFFF",
        "whitesmoke" => "F5F5F5",
        "yellow" => "FFFF00",
        "yellowgreen" => "9ACD32",
    ];

    /**
     * @param array|string|null $color
     * @return array|string|null
     */
    static function parse($color)
    {
        if ($color === null) {
            return null;
        }

        if (is_array($color)) {
            // Assume the array has the right format...
            // FIXME: should/could verify this.
            return $color;
        }

        static $cache = [];

        $color = strtolower($color);

        if (isset($cache[$color])) {
            return $cache[$color];
        }

        if ($color === "transparent") {
            return $cache[$color] = $color;
        }

        if (isset(self::$cssColorNames[$color])) {
            return $cache[$color] = self::getArray(self::$cssColorNames[$color]);
        }

        // https://www.w3.org/TR/css-color-4/#hex-notation
        if (mb_substr($color, 0, 1) === "#") {
            $length = mb_strlen($color);
            $alpha = 1.0;

            // #rgb format
            if ($length === 4) {
                return $cache[$color] = self::getArray($color[1] . $color[1] . $color[2] . $color[2] . $color[3] . $color[3]);
            }

            // #rgba format
            if ($length === 5) {
                if (ctype_xdigit($color[4])) {
                    $alpha = round(hexdec($color[4] . $color[4])/255, 2);
                }
                return $cache[$color] = self::getArray($color[1] . $color[1] . $color[2] . $color[2] . $color[3] . $color[3], $alpha);
            }

            // #rrggbb format
            if ($length === 7) {
                return $cache[$color] = self::getArray(mb_substr($color, 1, 6));
            }
            
            // #rrggbbaa format
            if ($length === 9) {
                if (ctype_xdigit(mb_substr($color, 7, 2))) {
                    $alpha = round(hexdec(mb_substr($color, 7, 2))/255, 2);
                }
                return $cache[$color] = self::getArray(mb_substr($color, 1, 6), $alpha);
            }

            return null;
        }

        // rgb( r g b [/α] ) / rgb( r,g,b[,α] ) format and alias rgba()
        // https://www.w3.org/TR/css-color-4/#rgb-functions
        if (mb_substr($color, 0, 4) === "rgb(" || mb_substr($color, 0, 5) === "rgba(") {
            $i = mb_strpos($color, "(");
            $j = mb_strpos($color, ")");

            // Bad color value
            if ($i === false || $j === false) {
                return null;
            }

            $value_decl = trim(mb_substr($color, $i + 1, $j - $i - 1));

            if (mb_strpos($value_decl, ",") === false) {
                // Space-separated values syntax `r g b` or `r g b / α`
                $parts = preg_split("/\s*\/\s*/", $value_decl);
                $triplet = preg_split("/\s+/", $parts[0]);
                $alpha = $parts[1] ?? 1.0;
            } else {
                // Comma-separated values syntax `r, g, b` or `r, g, b, α`
                $parts = preg_split("/\s*,\s*/", $value_decl);
                $triplet = array_slice($parts, 0, 3);
                $alpha = $parts[3] ?? 1.0;
            }

            if (count($triplet) !== 3) {
                return null;
            }

            // Parse alpha value
            if (Helpers::is_percent($alpha)) {
                $alpha = (float) $alpha / 100;
            } else {
                $alpha = (float) $alpha;
            }

            $alpha = max(0.0, min($alpha, 1.0));

            foreach ($triplet as &$c) {
                if (Helpers::is_percent($c)) {
                    $c = round((float) $c * 2.55);
                }
            }

            return $cache[$color] = self::getArray(vsprintf("%02X%02X%02X", $triplet), $alpha);
        }

        // cmyk( c,m,y,k ) format
        // http://www.w3.org/TR/css3-gcpm/#cmyk-colors
        if (mb_substr($color, 0, 5) === "cmyk(") {
            $i = mb_strpos($color, "(");
            $j = mb_strpos($color, ")");

            // Bad color value
            if ($i === false || $j === false) {
                return null;
            }

            $values = explode(",", mb_substr($color, $i + 1, $j - $i - 1));

            if (count($values) != 4) {
                return null;
            }

            $values = array_map(function ($c) {
                return min(1.0, max(0.0, floatval(trim($c))));
            }, $values);

            return $cache[$color] = self::getArray($values);
        }

        // Invalid or unsupported color format
        return null;
    }

    /**
     * @param array|string $color
     * @param float $alpha
     * @return array
     */
    static function getArray($color, $alpha = 1.0)
    {
        $c = [null, null, null, null, "alpha" => $alpha, "hex" => null];

        if (is_array($color)) {
            $c = $color;
            $c["c"] = $c[0];
            $c["m"] = $c[1];
            $c["y"] = $c[2];
            $c["k"] = $c[3];
            $c["alpha"] = $alpha;
            $c["hex"] = "cmyk($c[0],$c[1],$c[2],$c[3])";
        } else {
            if (ctype_xdigit($color) === false || mb_strlen($color) !== 6) {
                // invalid color value ... expected 6-character hex
                return $c;
            }
            $c[0] = hexdec(mb_substr($color, 0, 2)) / 0xff;
            $c[1] = hexdec(mb_substr($color, 2, 2)) / 0xff;
            $c[2] = hexdec(mb_substr($color, 4, 2)) / 0xff;
            $c["r"] = $c[0];
            $c["g"] = $c[1];
            $c["b"] = $c[2];
            $c["alpha"] = $alpha;
            $c["hex"] = sprintf("#%s%02X", $color, round($alpha * 255));
        }

        return $c;
    }
}
<?php
/**
 * @package dompdf
 * @link    https://github.com/dompdf/dompdf
 * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
 */
namespace Dompdf\Css;

use Dompdf\Adapter\CPDF;
use Dompdf\Exception;
use Dompdf\FontMetrics;
use Dompdf\Frame;

/**
 * Represents CSS properties.
 *
 * The Style class is responsible for handling and storing CSS properties.
 * It includes methods to resolve colors and lengths, as well as getters &
 * setters for many CSS properties.
 *
 * Access to the different CSS properties is provided by the methods
 * {@link Style::set_prop()} and {@link Style::get_specified()}, and the
 * property overload methods {@link Style::__set()} and {@link Style::__get()},
 * as well as {@link Style::set_used()}. The latter methods operate on used
 * values and permit access to any (CSS) property using the following syntax:
 *
 * ```
 * $style->margin_top = 10.0;
 * echo $style->margin_top; // Returns `10.0`
 * ```
 *
 * To declare a property from a string, use {@link Style::set_prop()}:
 *
 * ```
 * $style->set_prop("margin_top", "1em");
 * echo $style->get_specified("margin_top"); // Returns `1em`
 * echo $style->margin_top; // Returns `12.0`, assuming the default font size
 * ```
 *
 * Actual CSS parsing is performed in the {@link Stylesheet} class.
 *
 * @property string          $azimuth
 * @property string          $background_attachment
 * @property array|string    $background_color
 * @property string          $background_image            Image URL or `none`
 * @property string          $background_image_resolution
 * @property array           $background_position
 * @property string          $background_repeat
 * @property array|string    $background_size             `cover`, `contain`, or `[width, height]`, each being a length, percentage, or `auto`
 * @property string          $border_collapse
 * @property string          $border_color                Only use for setting all sides to the same color
 * @property float[]         $border_spacing              Pair of `[horizontal, vertical]` spacing
 * @property string          $border_style                Only use for setting all sides to the same style
 * @property array|string    $border_top_color
 * @property array|string    $border_right_color
 * @property array|string    $border_bottom_color
 * @property array|string    $border_left_color
 * @property string          $border_top_style            Valid border style
 * @property string          $border_right_style          Valid border style
 * @property string          $border_bottom_style         Valid border style
 * @property string          $border_left_style           Valid border style
 * @property float           $border_top_width            Length in pt
 * @property float           $border_right_width          Length in pt
 * @property float           $border_bottom_width         Length in pt
 * @property float           $border_left_width           Length in pt
 * @property string          $border_width                Only use for setting all sides to the same width
 * @property float|string    $border_bottom_left_radius   Radius in pt or a percentage value
 * @property float|string    $border_bottom_right_radius  Radius in pt or a percentage value
 * @property float|string    $border_top_left_radius      Radius in pt or a percentage value
 * @property float|string    $border_top_right_radius     Radius in pt or a percentage value
 * @property string          $border_radius               Only use for setting all corners to the same radius
 * @property float|string    $bottom                      Length in pt, a percentage value, or `auto`
 * @property string          $caption_side
 * @property string          $clear
 * @property string          $clip
 * @property array|string    $color
 * @property string[]|string $content                     List of content components, `normal`, or `none`
 * @property array|string    $counter_increment           Array defining the counters to increment or `none`
 * @property array|string    $counter_reset               Array defining the counters to reset or `none`
 * @property string          $cue_after
 * @property string          $cue_before
 * @property string          $cue
 * @property string          $cursor
 * @property string          $direction
 * @property string          $display
 * @property string          $elevation
 * @property string          $empty_cells
 * @property string          $float
 * @property string          $font_family
 * @property float           $font_size                   Length in pt
 * @property string          $font_style
 * @property string          $font_variant
 * @property string          $font_weight
 * @property float|string    $height                      Length in pt, a percentage value, or `auto`
 * @property string          $image_resolution
 * @property string          $inset                       Only use for setting all box insets to the same length
 * @property float|string    $left                        Length in pt, a percentage value, or `auto`
 * @property float           $letter_spacing              Length in pt
 * @property float           $line_height                 Length in pt
 * @property string          $list_style_image            Image URL or `none`
 * @property string          $list_style_position
 * @property string          $list_style_type
 * @property float|string    $margin_right                Length in pt, a percentage value, or `auto`
 * @property float|string    $margin_left                 Length in pt, a percentage value, or `auto`
 * @property float|string    $margin_top                  Length in pt, a percentage value, or `auto`
 * @property float|string    $margin_bottom               Length in pt, a percentage value, or `auto`
 * @property string          $margin                      Only use for setting all sides to the same length
 * @property float|string    $max_height                  Length in pt, a percentage value, or `none`
 * @property float|string    $max_width                   Length in pt, a percentage value, or `none`
 * @property float|string    $min_height                  Length in pt, a percentage value, or `auto`
 * @property float|string    $min_width                   Length in pt, a percentage value, or `auto`
 * @property float           $opacity                     Number in the range [0, 1]
 * @property int             $orphans
 * @property array|string    $outline_color
 * @property string          $outline_style               Valid border style, except for `hidden`
 * @property float           $outline_width               Length in pt
 * @property float           $outline_offset              Length in pt
 * @property string          $overflow
 * @property string          $overflow_wrap
 * @property float|string    $padding_top                 Length in pt or a percentage value
 * @property float|string    $padding_right               Length in pt or a percentage value
 * @property float|string    $padding_bottom              Length in pt or a percentage value
 * @property float|string    $padding_left                Length in pt or a percentage value
 * @property string          $padding                     Only use for setting all sides to the same length
 * @property string          $page_break_after
 * @property string          $page_break_before
 * @property string          $page_break_inside
 * @property string          $pause_after
 * @property string          $pause_before
 * @property string          $pause
 * @property string          $pitch_range
 * @property string          $pitch
 * @property string          $play_during
 * @property string          $position
 * @property string          $quotes
 * @property string          $richness
 * @property float|string    $right                       Length in pt, a percentage value, or `auto`
 * @property float[]|string  $size                        Pair of `[width, height]` or `auto`
 * @property string          $speak_header
 * @property string          $speak_numeral
 * @property string          $speak_punctuation
 * @property string          $speak
 * @property string          $speech_rate
 * @property string          $src
 * @property string          $stress
 * @property string          $table_layout
 * @property string          $text_align
 * @property string          $text_decoration
 * @property float|string    $text_indent                 Length in pt or a percentage value
 * @property string          $text_transform
 * @property float|string    $top                         Length in pt, a percentage value, or `auto`
 * @property array           $transform                   List of transforms
 * @property array           $transform_origin
 * @property string          $unicode_bidi
 * @property string          $unicode_range
 * @property string          $vertical_align
 * @property string          $visibility
 * @property string          $voice_family
 * @property string          $volume
 * @property string          $white_space
 * @property int             $widows
 * @property float|string    $width                       Length in pt, a percentage value, or `auto`
 * @property string          $word_break
 * @property float           $word_spacing                Length in pt
 * @property int|string      $z_index                     Integer value or `auto`
 * @property string          $_dompdf_keep
 *
 * @package dompdf
 */
class Style
{
    protected const CSS_IDENTIFIER = "-?[_a-zA-Z]+[_a-zA-Z0-9-]*";
    protected const CSS_INTEGER = "[+-]?\d+";
    protected const CSS_NUMBER = "[+-]?\d*\.?\d+(?:[eE][+-]?\d+)?";

    /**
     * Default font size, in points.
     *
     * @var float
     */
    public static $default_font_size = 12;

    /**
     * Default line height, as a fraction of the font size.
     *
     * @var float
     */
    public static $default_line_height = 1.2;

    /**
     * Default "absolute" font sizes relative to the default font-size
     * https://www.w3.org/TR/css-fonts-3/#absolute-size-value
     *
     * @var array<float>
     */
    public static $font_size_keywords = [
        "xx-small" => 0.6, // 3/5
        "x-small" => 0.75, // 3/4
        "small" => 0.889, // 8/9
        "medium" => 1, // 1
        "large" => 1.2, // 6/5
        "x-large" => 1.5, // 3/2
        "xx-large" => 2.0, // 2/1
    ];

    /**
     * List of valid text-align keywords.
     */
    public const TEXT_ALIGN_KEYWORDS = ["left", "right", "center", "justify"];

    /**
     * List of valid vertical-align keywords.
     */
    public const VERTICAL_ALIGN_KEYWORDS = ["baseline", "bottom", "middle",
        "sub", "super", "text-bottom", "text-top", "top"];

    /**
     * List of all block-level (outer) display types.
     * * https://www.w3.org/TR/css-display-3/#display-type
     * * https://www.w3.org/TR/css-display-3/#block-level
     */
    public const BLOCK_LEVEL_TYPES = [
        "block",
        // "flow-root",
        "list-item",
        // "flex",
        // "grid",
        "table"
    ];

    /**
     * List of all inline-level (outer) display types.
     * * https://www.w3.org/TR/css-display-3/#display-type
     * * https://www.w3.org/TR/css-display-3/#inline-level
     */
    public const INLINE_LEVEL_TYPES = [
        "inline",
        "inline-block",
        // "inline-flex",
        // "inline-grid",
        "inline-table"
    ];

    /**
     * List of all table-internal (outer) display types.
     * * https://www.w3.org/TR/css-display-3/#layout-specific-display
     */
    public const TABLE_INTERNAL_TYPES = [
        "table-row-group",
        "table-header-group",
        "table-footer-group",
        "table-row",
        "table-cell",
        "table-column-group",
        "table-column",
        "table-caption"
    ];

    /**
     * List of all inline (inner) display types.
     */
    public const INLINE_TYPES = ["inline"];

    /**
     * List of all block (inner) display types.
     */
    public const BLOCK_TYPES = ["block", "inline-block", "table-cell", "list-item"];

    /**
     * List of all table (inner) display types.
     */
    public const TABLE_TYPES = ["table", "inline-table"];

    /**
     * Lookup table for valid display types. Initially computed from the
     * different constants.
     *
     * @var array
     */
    protected static $valid_display_types = [];

    /**
     * List of all positioned types.
     */
    public const POSITIONED_TYPES = ["relative", "absolute", "fixed"];

    /**
     * List of valid border styles.
     */
    public const BORDER_STYLES = [
        "none", "hidden",
        "dotted", "dashed", "solid",
        "double", "groove", "ridge", "inset", "outset"
    ];

    /**
     * List of valid outline-style values.
     * Same as the border styles, except `auto` is allowed, `hidden` is not.
     *
     * @link https://www.w3.org/TR/css-ui-4/#typedef-outline-line-style
     */
    protected const OUTLINE_STYLES = [
        "auto", "none",
        "dotted", "dashed", "solid",
        "double", "groove", "ridge", "inset", "outset"
    ];

    /**
     * Map of CSS shorthand properties and their corresponding sub-properties.
     * The order of the sub-properties is relevant for the fallback getter,
     * which is used in case no specific getter method is defined.
     *
     * @var array
     */
    protected static $_props_shorthand = [
        "background" => [
            "background_image",
            "background_position",
            "background_size",
            "background_repeat",
            // "background_origin",
            // "background_clip",
            "background_attachment",
            "background_color"
        ],
        "border" => [
            "border_top_width",
            "border_right_width",
            "border_bottom_width",
            "border_left_width",
            "border_top_style",
            "border_right_style",
            "border_bottom_style",
            "border_left_style",
            "border_top_color",
            "border_right_color",
            "border_bottom_color",
            "border_left_color"
        ],
        "border_top" => [
            "border_top_width",
            "border_top_style",
            "border_top_color"
        ],
        "border_right" => [
            "border_right_width",
            "border_right_style",
            "border_right_color"
        ],
        "border_bottom" => [
            "border_bottom_width",
            "border_bottom_style",
            "border_bottom_color"
        ],
        "border_left" => [
            "border_left_width",
            "border_left_style",
            "border_left_color"
        ],
        "border_width" => [
            "border_top_width",
            "border_right_width",
            "border_bottom_width",
            "border_left_width"
        ],
        "border_style" => [
            "border_top_style",
            "border_right_style",
            "border_bottom_style",
            "border_left_style"
        ],
        "border_color" => [
            "border_top_color",
            "border_right_color",
            "border_bottom_color",
            "border_left_color"
        ],
        "border_radius" => [
            "border_top_left_radius",
            "border_top_right_radius",
            "border_bottom_right_radius",
            "border_bottom_left_radius"
        ],
        "font" => [
            "font_family",
            "font_size",
            // "font_stretch",
            "font_style",
            "font_variant",
            "font_weight",
            "line_height"
        ],
        "inset" => [
            "top",
            "right",
            "bottom",
            "left"
        ],
        "list_style" => [
            "list_style_image",
            "list_style_position",
            "list_style_type"
        ],
        "margin" => [
            "margin_top",
            "margin_right",
            "margin_bottom",
            "margin_left"
        ],
        "padding" => [
            "padding_top",
            "padding_right",
            "padding_bottom",
            "padding_left"
        ],
        "outline" => [
            "outline_width",
            "outline_style",
            "outline_color"
        ]
    ];

    /**
     * Maps legacy property names to actual property names.
     *
     * @var array
     */
    protected static $_props_alias = [
        "word_wrap"                           => "overflow_wrap",
        "_dompdf_background_image_resolution" => "background_image_resolution",
        "_dompdf_image_resolution"            => "image_resolution",
        "_webkit_transform"                   => "transform",
        "_webkit_transform_origin"            => "transform_origin"
    ];

    /**
     * Default style values.
     *
     * @link https://www.w3.org/TR/CSS21/propidx.html
     *
     * @var array
     */
    protected static $_defaults = null;

    /**
     * List of inherited properties
     *
     * @link https://www.w3.org/TR/CSS21/propidx.html
     *
     * @var array
     */
    protected static $_inherited = null;

    /**
     * Caches method_exists result
     *
     * @var array<bool>
     */
    protected static $_methods_cache = [];

    /**
     * The stylesheet this style belongs to
     *
     * @var Stylesheet
     */
    protected $_stylesheet;

    /**
     * Media queries attached to the style
     *
     * @var array
     */
    protected $_media_queries;

    /**
     * Properties set by an `!important` declaration.
     *
     * @var array
     */
    protected $_important_props = [];

    /**
     * Specified (or declared) values of the CSS properties.
     *
     * https://www.w3.org/TR/css-cascade-3/#value-stages
     *
     * @var array
     */
    protected $_props = [];

    /**
     * Computed values of the CSS properties.
     *
     * @var array
     */
    protected $_props_computed = [];

    /**
     * Used values of the CSS properties.
     *
     * @var array
     */
    protected $_props_used = [];

    /**
     * Marks properties with non-final used values that should be cleared on
     * style reset.
     *
     * @var array
     */
    protected $non_final_used = [];

    protected static $_dependency_map = [
        "border_top_style" => [
            "border_top_width"
        ],
        "border_bottom_style" => [
            "border_bottom_width"
        ],
        "border_left_style" => [
            "border_left_width"
        ],
        "border_right_style" => [
            "border_right_width"
        ],
        "direction" => [
            "text_align"
        ],
        "font_size" => [
            "background_position",
            "background_size",
            "border_top_width",
            "border_right_width",
            "border_bottom_width",
            "border_left_width",
            "border_top_left_radius",
            "border_top_right_radius",
            "border_bottom_right_radius",
            "border_bottom_left_radius",
            "letter_spacing",
            "line_height",
            "margin_top",
            "margin_right",
            "margin_bottom",
            "margin_left",
            "outline_width",
            "outline_offset",
            "padding_top",
            "padding_right",
            "padding_bottom",
            "padding_left",
            "word_spacing",
            "width",
            "height",
            "min-width",
            "min-height",
            "max-width",
            "max-height"
        ],
        "float" => [
            "display"
        ],
        "position" => [
            "display"
        ],
        "outline_style" => [
            "outline_width"
        ]
    ];

    /**
     * Lookup table for dependent properties. Initially computed from the
     * dependency map.
     *
     * @var array
     */
    protected static $_dependent_props = [];

    /**
     * Style of the parent element in document tree.
     *
     * @var Style
     */
    protected $parent_style;

    /**
     * @var Frame|null
     */
    protected $_frame;

    /**
     * The origin of the style
     *
     * @var int
     */
    protected $_origin = Stylesheet::ORIG_AUTHOR;

    /**
     * The computed bottom spacing
     *
     * @var float|string|null
     */
    private $_computed_bottom_spacing = null;

    /**
     * @var bool|null
     */
    private $has_border_radius_cache = null;

    /**
     * @var array|null
     */
    private $resolved_border_radius = null;

    /**
     * @var FontMetrics
     */
    private $fontMetrics;

    /**
     * @param Stylesheet $stylesheet The stylesheet the style is associated with.
     * @param int        $origin
     */
    public function __construct(Stylesheet $stylesheet, int $origin = Stylesheet::ORIG_AUTHOR)
    {
        $this->fontMetrics = $stylesheet->getFontMetrics();

        $this->_stylesheet = $stylesheet;
        $this->_media_queries = [];
        $this->_origin = $origin;
        $this->parent_style = null;

        if (!isset(self::$_defaults)) {

            // Shorthand
            $d =& self::$_defaults;

            // All CSS 2.1 properties, and their default values
            // Some properties are specified with their computed value for
            // efficiency; this only works if the computed value is not
            // dependent on another property
            $d["azimuth"] = "center";
            $d["background_attachment"] = "scroll";
            $d["background_color"] = "transparent";
            $d["background_image"] = "none";
            $d["background_image_resolution"] = "normal";
            $d["background_position"] = ["0%", "0%"];
            $d["background_repeat"] = "repeat";
            $d["background"] = "";
            $d["border_collapse"] = "separate";
            $d["border_color"] = "";
            $d["border_spacing"] = [0.0, 0.0];
            $d["border_style"] = "";
            $d["border_top"] = "";
            $d["border_right"] = "";
            $d["border_bottom"] = "";
            $d["border_left"] = "";
            $d["border_top_color"] = "currentcolor";
            $d["border_right_color"] = "currentcolor";
            $d["border_bottom_color"] = "currentcolor";
            $d["border_left_color"] = "currentcolor";
            $d["border_top_style"] = "none";
            $d["border_right_style"] = "none";
            $d["border_bottom_style"] = "none";
            $d["border_left_style"] = "none";
            $d["border_top_width"] = "medium";
            $d["border_right_width"] = "medium";
            $d["border_bottom_width"] = "medium";
            $d["border_left_width"] = "medium";
            $d["border_width"] = "";
            $d["border_bottom_left_radius"] = 0.0;
            $d["border_bottom_right_radius"] = 0.0;
            $d["border_top_left_radius"] = 0.0;
            $d["border_top_right_radius"] = 0.0;
            $d["border_radius"] = "";
            $d["border"] = "";
            $d["bottom"] = "auto";
            $d["caption_side"] = "top";
            $d["clear"] = "none";
            $d["clip"] = "auto";
            $d["color"] = "#000000";
            $d["content"] = "normal";
            $d["counter_increment"] = "none";
            $d["counter_reset"] = "none";
            $d["cue_after"] = "none";
            $d["cue_before"] = "none";
            $d["cue"] = "";
            $d["cursor"] = "auto";
            $d["direction"] = "ltr";
            $d["display"] = "inline";
            $d["elevation"] = "level";
            $d["empty_cells"] = "show";
            $d["float"] = "none";
            $d["font_family"] = $stylesheet->get_dompdf()->getOptions()->getDefaultFont();
            $d["font_size"] = "medium";
            $d["font_style"] = "normal";
            $d["font_variant"] = "normal";
            $d["font_weight"] = "normal";
            $d["font"] = "";
            $d["height"] = "auto";
            $d["image_resolution"] = "normal";
            $d["inset"] = "";
            $d["left"] = "auto";
            $d["letter_spacing"] = "normal";
            $d["line_height"] = "normal";
            $d["list_style_image"] = "none";
            $d["list_style_position"] = "outside";
            $d["list_style_type"] = "disc";
            $d["list_style"] = "";
            $d["margin_right"] = 0.0;
            $d["margin_left"] = 0.0;
            $d["margin_top"] = 0.0;
            $d["margin_bottom"] = 0.0;
            $d["margin"] = "";
            $d["max_height"] = "none";
            $d["max_width"] = "none";
            $d["min_height"] = "auto";
            $d["min_width"] = "auto";
            $d["orphans"] = 2;
            $d["outline_color"] = "currentcolor"; // "invert" special color is not supported
            $d["outline_style"] = "none";
            $d["outline_width"] = "medium";
            $d["outline_offset"] = 0.0;
            $d["outline"] = "";
            $d["overflow"] = "visible";
            $d["overflow_wrap"] = "normal";
            $d["padding_top"] = 0.0;
            $d["padding_right"] = 0.0;
            $d["padding_bottom"] = 0.0;
            $d["padding_left"] = 0.0;
            $d["padding"] = "";
            $d["page_break_after"] = "auto";
            $d["page_break_before"] = "auto";
            $d["page_break_inside"] = "auto";
            $d["pause_after"] = "0";
            $d["pause_before"] = "0";
            $d["pause"] = "";
            $d["pitch_range"] = "50";
            $d["pitch"] = "medium";
            $d["play_during"] = "auto";
            $d["position"] = "static";
            $d["quotes"] = "auto";
            $d["richness"] = "50";
            $d["right"] = "auto";
            $d["size"] = "auto"; // @page
            $d["speak_header"] = "once";
            $d["speak_numeral"] = "continuous";
            $d["speak_punctuation"] = "none";
            $d["speak"] = "normal";
            $d["speech_rate"] = "medium";
            $d["stress"] = "50";
            $d["table_layout"] = "auto";
            $d["text_align"] = "";
            $d["text_decoration"] = "none";
            $d["text_indent"] = 0.0;
            $d["text_transform"] = "none";
            $d["top"] = "auto";
            $d["unicode_bidi"] = "normal";
            $d["vertical_align"] = "baseline";
            $d["visibility"] = "visible";
            $d["voice_family"] = "";
            $d["volume"] = "medium";
            $d["white_space"] = "normal";
            $d["widows"] = 2;
            $d["width"] = "auto";
            $d["word_break"] = "normal";
            $d["word_spacing"] = "normal";
            $d["z_index"] = "auto";

            // CSS3
            $d["opacity"] = 1.0;
            $d["background_size"] = ["auto", "auto"];
            $d["transform"] = "none";
            $d["transform_origin"] = "50% 50%";

            // for @font-face
            $d["src"] = "";
            $d["unicode_range"] = "";

            // vendor-prefixed properties
            $d["_dompdf_keep"] = "";

            // Properties that inherit by default
            self::$_inherited = [
                "azimuth",
                "background_image_resolution",
                "border_collapse",
                "border_spacing",
                "caption_side",
                "color",
                "cursor",
                "direction",
                "elevation",
                "empty_cells",
                "font_family",
                "font_size",
                "font_style",
                "font_variant",
                "font_weight",
                "font",
                "image_resolution",
                "letter_spacing",
                "line_height",
                "list_style_image",
                "list_style_position",
                "list_style_type",
                "list_style",
                "orphans",
                "overflow_wrap",
                "pitch_range",
                "pitch",
                "quotes",
                "richness",
                "speak_header",
                "speak_numeral",
                "speak_punctuation",
                "speak",
                "speech_rate",
                "stress",
                "text_align",
                "text_indent",
                "text_transform",
                "visibility",
                "voice_family",
                "volume",
                "white_space",
                "widows",
                "word_break",
                "word_spacing",
            ];

            // Compute dependent props from dependency map
            foreach (self::$_dependency_map as $props) {
                foreach ($props as $prop) {
                    self::$_dependent_props[$prop] = true;
                }
            }

            // Compute valid display-type lookup table
            self::$valid_display_types = [
                "none"                => true,
                "-dompdf-br"          => true,
                "-dompdf-image"       => true,
                "-dompdf-list-bullet" => true,
                "-dompdf-page"        => true
            ];
            foreach (self::BLOCK_LEVEL_TYPES as $val) {
                self::$valid_display_types[$val] = true;
            }
            foreach (self::INLINE_LEVEL_TYPES as $val) {
                self::$valid_display_types[$val] = true;
            }
            foreach (self::TABLE_INTERNAL_TYPES as $val) {
                self::$valid_display_types[$val] = true;
            }
        }
    }

    /**
     * Clear all non-final used values.
     *
     * @return void
     */
    public function reset(): void
    {
        foreach (array_keys($this->non_final_used) as $prop) {
            unset($this->_props_used[$prop]);
        }

        $this->non_final_used = [];
    }

    /**
     * @param array $media_queries
     */
    public function set_media_queries(array $media_queries): void
    {
        $this->_media_queries = $media_queries;
    }

    /**
     * @return array
     */
    public function get_media_queries(): array
    {
        return $this->_media_queries;
    }

    /**
     * @param Frame $frame
     */
    public function set_frame(Frame $frame): void
    {
        $this->_frame = $frame;
    }

    /**
     * @return Frame|null
     */
    public function get_frame(): ?Frame
    {
        return $this->_frame;
    }

    /**
     * @param int $origin
     */
    public function set_origin(int $origin): void
    {
        $this->_origin = $origin;
    }

    /**
     * @return int
     */
    public function get_origin(): int
    {
        return $this->_origin;
    }

    /**
     * Returns the {@link Stylesheet} the style is associated with.
     *
     * @return Stylesheet
     */
    public function get_stylesheet(): Stylesheet
    {
        return $this->_stylesheet;
    }

    public function is_absolute(): bool
    {
        $position = $this->__get("position");
        return $position === "absolute" || $position === "fixed";
    }

    public function is_in_flow(): bool
    {
        $float = $this->__get("float");
        return $float === "none" && !$this->is_absolute();
    }

    /**
     * Converts any CSS length value into an absolute length in points.
     *
     * length_in_pt() takes a single length (e.g. '1em') or an array of
     * lengths and returns an absolute length.  If an array is passed, then
     * the return value is the sum of all elements. If any of the lengths
     * provided are "auto" or "none" then that value is returned.
     *
     * If a reference size is not provided, the current font size is used.
     *
     * @param float|string|array $length   The numeric length (or string measurement) or array of lengths to resolve.
     * @param float|null         $ref_size An absolute reference size to resolve percentage lengths.
     *
     * @return float|string
     */
    public function length_in_pt($length, ?float $ref_size = null)
    {
        $font_size = $this->__get("font_size");
        $ref_size = $ref_size ?? $font_size;

        if (!\is_array($length)) {
            $length = [$length];
        }

        $ret = 0.0;

        foreach ($length as $l) {
            if ($l === "auto" || $l === "none") {
                return $l;
            }

            // Assume numeric values are already in points
            if (is_numeric($l)) {
                $ret += (float) $l;
                continue;
            }

            $val = $this->single_length_in_pt((string) $l, $ref_size, $font_size);
            $ret += $val ?? 0;
        }

        return $ret;
    }

    /**
     * Convert a length declaration to pt.
     *
     * @param string     $l         The length declaration.
     * @param float      $ref_size  Reference size for percentage declarations.
     * @param float|null $font_size Font size for resolving font-size relative units.
     *
     * @return float|null The length in pt, or `null` for invalid declarations.
     */
    protected function single_length_in_pt(string $l, float $ref_size = 0, ?float $font_size = null): ?float
    {
        static $cache = [];

        $font_size = $font_size ?? $this->__get("font_size");

        $key = "$l/$ref_size/$font_size";

        if (\array_key_exists($key, $cache)) {
            return $cache[$key];
        }

        $number = self::CSS_NUMBER;
        $pattern = "/^($number)(.*)?$/";

        if (!preg_match($pattern, $l, $matches)) {
            return null;
        }

        $v = (float) $matches[1];
        $unit = mb_strtolower($matches[2]);

        if ($unit === "") {
            // Legacy support for unitless values, not covered by spec. Might
            // want to restrict this to unitless `0` in the future
            $value = $v;
        }

        elseif ($unit === "%") {
            $value = $v / 100 * $ref_size;
        }

        elseif ($unit === "px") {
            $dpi = $this->_stylesheet->get_dompdf()->getOptions()->getDpi();
            $value = ($v * 72) / $dpi;
        }

        elseif ($unit === "pt") {
            $value = $v;
        }

        elseif ($unit === "rem") {
            $tree = $this->_stylesheet->get_dompdf()->getTree();
            $root_style = $tree !== null ? $tree->get_root()->get_style() : null;
            $root_font_size = $root_style === null || $root_style === $this
                ? $font_size
                : $root_style->__get("font_size");
            $value = $v * $root_font_size;

            // Skip caching if the root style is not available yet, as to avoid
            // incorrectly cached values if the root font size is different from
            // the default
            if ($root_style === null) {
                return $value;
            }
        }

        elseif ($unit === "em") {
            $value = $v * $font_size;
        }

        elseif ($unit === "cm") {
            $value = $v * 72 / 2.54;
        }

        elseif ($unit === "mm") {
            $value = $v * 72 / 25.4;
        }

        elseif ($unit === "ex") {
            // FIXME: em:ex ratio?
            $value = $v * $font_size / 2;
        }

        elseif ($unit === "in") {
            $value = $v * 72;
        }

        elseif ($unit === "pc") {
            $value = $v * 12;
        }

        else {
            // Invalid or unsupported declaration
            $value = null;
        }

        return $cache[$key] = $value;
    }

    /**
     * Resolve inherited property values using the provided parent style or the
     * default values, in case no parent style exists.
     *
     * https://www.w3.org/TR/css-cascade-3/#inheriting
     *
     * @param Style|null $parent
     */
    public function inherit(?Style $parent = null): void
    {
        $this->parent_style = $parent;

        // Clear the computed font size, as it might depend on the parent
        // font size
        unset($this->_props_computed["font_size"]);
        unset($this->_props_used["font_size"]);

        if ($parent) {
            foreach (self::$_inherited as $prop) {
                // For properties that inherit by default: When the cascade did
                // not result in a value, inherit the parent value. Inheritance
                // is handled via the specific sub-properties for shorthands
                if (isset($this->_props[$prop]) || isset(self::$_props_shorthand[$prop])) {
                    continue;
                }

                if (isset($parent->_props[$prop])) {
                    $parent_val = $parent->computed($prop);

                    $this->_props[$prop] = $parent_val;
                    $this->_props_computed[$prop] = $parent_val;
                    $this->_props_used[$prop] = null;
                }
            }
        }

        foreach ($this->_props as $prop => $val) {
            if ($val === "inherit") {
                if ($parent && isset($parent->_props[$prop])) {
                    $parent_val = $parent->computed($prop);

                    $this->_props[$prop] = $parent_val;
                    $this->_props_computed[$prop] = $parent_val;
                    $this->_props_used[$prop] = null;
                } else {
                    // Parent prop not set, use default
                    $this->_props[$prop] = self::$_defaults[$prop];
                    unset($this->_props_computed[$prop]);
                    unset($this->_props_used[$prop]);
                }
            }
        }
    }

    /**
     * Override properties in this style with those in $style
     *
     * @param Style $style
     */
    public function merge(Style $style): void
    {
        foreach ($style->_props as $prop => $val) {
            $important = isset($style->_important_props[$prop]);

            // `!important` declarations take precedence over normal ones
            if (!$important && isset($this->_important_props[$prop])) {
                continue;
            }

            if ($important) {
                $this->_important_props[$prop] = true;
            }

            $this->_props[$prop] = $val;

            // Copy an existing computed value only for non-dependent
            // properties; otherwise it may be invalid for the current style
            if (!isset(self::$_dependent_props[$prop])
                && \array_key_exists($prop, $style->_props_computed)
            ) {
                $this->_props_computed[$prop] = $style->_props_computed[$prop];
                $this->_props_used[$prop] = null;
            } else {
                unset($this->_props_computed[$prop]);
                unset($this->_props_used[$prop]);
            }
        }
    }

    /**
     * Clear information about important declarations after the style has been
     * finalized during stylesheet loading.
     */
    public function clear_important(): void
    {
        $this->_important_props = [];
    }

    /**
     * Clear border-radius and bottom-spacing cache as necessary when a given
     * property is set.
     *
     * @param string $prop The property that is set.
     */
    protected function clear_cache(string $prop): void
    {
        // Clear border-radius cache on setting any border-radius
        // property
        if ($prop === "border_top_left_radius"
            || $prop === "border_top_right_radius"
            || $prop === "border_bottom_left_radius"
            || $prop === "border_bottom_right_radius"
        ) {
            $this->has_border_radius_cache = null;
            $this->resolved_border_radius = null;
        }

        // Clear bottom-spacing cache if necessary. Border style can
        // disable/enable border calculations
        if ($prop === "margin_bottom"
            || $prop === "padding_bottom"
            || $prop === "border_bottom_width"
            || $prop === "border_bottom_style"
        ) {
            $this->_computed_bottom_spacing = null;
        }
    }

    /**
     * Set a style property from a value declaration.
     *
     * Setting `$clear_dependencies` to `false` is useful for saving a bit of
     * unnecessary work while loading stylesheets.
     *
     * @param string $prop               The property to set.
     * @param mixed  $val                The value declaration or computed value.
     * @param bool   $important          Whether the declaration is important.
     * @param bool   $clear_dependencies Whether to clear computed values of dependent properties.
     */
    public function set_prop(string $prop, $val, bool $important = false, bool $clear_dependencies = true): void
    {
        $prop = str_replace("-", "_", $prop);

        // Legacy property aliases
        if (isset(self::$_props_alias[$prop])) {
            $prop = self::$_props_alias[$prop];
        }

        if (!isset(self::$_defaults[$prop])) {
            global $_dompdf_warnings;
            $_dompdf_warnings[] = "'$prop' is not a recognized CSS property.";
            return;
        }

        if ($prop !== "content" && \is_string($val) && mb_strpos($val, "url") === false && mb_strlen($val) > 1) {
            $val = mb_strtolower(trim(str_replace(["\n", "\t"], [" "], $val)));
        }

        if (isset(self::$_props_shorthand[$prop])) {
            // Shorthand properties directly set their respective sub-properties
            // https://www.w3.org/TR/css-cascade-3/#shorthand
            if ($val === "initial" || $val === "inherit" || $val === "unset") {
                foreach (self::$_props_shorthand[$prop] as $sub_prop) {
                    $this->set_prop($sub_prop, $val, $important, $clear_dependencies);
                }
            } else {
                $method = "_set_$prop";

                if (!isset(self::$_methods_cache[$method])) {
                    self::$_methods_cache[$method] = method_exists($this, $method);
                }

                if (self::$_methods_cache[$method]) {
                    $values = $this->$method($val);

                    if ($values === []) {
                        return;
                    }

                    // Each missing sub-property is assigned its initial value
                    // https://www.w3.org/TR/css-cascade-3/#shorthand
                    foreach (self::$_props_shorthand[$prop] as $sub_prop) {
                        $sub_val = $values[$sub_prop] ?? self::$_defaults[$sub_prop];
                        $this->set_prop($sub_prop, $sub_val, $important, $clear_dependencies);
                    }
                }
            }
        } else {
            // Legacy support for `word-break: break-word`
            // https://www.w3.org/TR/css-text-3/#valdef-word-break-break-word
            if ($prop === "word_break" && $val === "break-word") {
                $val = "normal";
                $this->set_prop("overflow_wrap", "anywhere", $important, $clear_dependencies);
            }

            // `!important` declarations take precedence over normal ones
            if (!$important && isset($this->_important_props[$prop])) {
                return;
            }

            if ($important) {
                $this->_important_props[$prop] = true;
            }

            // https://www.w3.org/TR/css-cascade-3/#inherit-initial
            if ($val === "unset") {
                $val = \in_array($prop, self::$_inherited, true)
                    ? "inherit"
                    : "initial";
            }

            // https://www.w3.org/TR/css-cascade-3/#valdef-all-initial
            if ($val === "initial") {
                $val = self::$_defaults[$prop];
            }

            $computed = $this->compute_prop($prop, $val);

            // Skip invalid declarations
            if ($computed === null) {
                return;
            }

            $this->_props[$prop] = $val;
            $this->_props_computed[$prop] = $computed;
            $this->_props_used[$prop] = null;

            if ($clear_dependencies) {
                // Clear the computed values of any dependent properties, so
                // they can be re-computed
                if (isset(self::$_dependency_map[$prop])) {
                    foreach (self::$_dependency_map[$prop] as $dependent) {
                        unset($this->_props_computed[$dependent]);
                        unset($this->_props_used[$dependent]);
                    }
                }

                $this->clear_cache($prop);
            }
        }
    }

    /**
     * Get the specified value of a style property.
     *
     * @param string $prop
     *
     * @return mixed
     * @throws Exception
     */
    public function get_specified(string $prop)
    {
        // Legacy property aliases
        if (isset(self::$_props_alias[$prop])) {
            $prop = self::$_props_alias[$prop];
        }

        if (!isset(self::$_defaults[$prop])) {
            throw new Exception("'$prop' is not a recognized CSS property.");
        }

        return $this->_props[$prop] ?? self::$_defaults[$prop];
    }

    /**
     * Set a style property to its final value.
     *
     * This sets the specified and used value of the style property to the given
     * value, meaning the value is not parsed and thus should have a type
     * compatible with the property.
     *
     * If a shorthand property is specified, all of its sub-properties are set
     * to the given value.
     *
     * @param string $prop The property to set.
     * @param mixed  $val  The final value of the property.
     *
     * @throws Exception
     */
    public function __set(string $prop, $val)
    {
        // Legacy property aliases
        if (isset(self::$_props_alias[$prop])) {
            $prop = self::$_props_alias[$prop];
        }

        if (!isset(self::$_defaults[$prop])) {
            throw new Exception("'$prop' is not a recognized CSS property.");
        }

        if (isset(self::$_props_shorthand[$prop])) {
            foreach (self::$_props_shorthand[$prop] as $sub_prop) {
                $this->__set($sub_prop, $val);
            }
        } else {
            $this->_props[$prop] = $val;
            $this->_props_computed[$prop] = $val;
            $this->_props_used[$prop] = $val;

            $this->clear_cache($prop);
        }
    }

    /**
     * Set the used value of a style property.
     *
     * Used values are cleared on style reset.
     *
     * If a shorthand property is specified, all of its sub-properties are set
     * to the given value.
     *
     * @param string $prop The property to set.
     * @param mixed  $val  The used value of the property.
     *
     * @throws Exception
     */
    public function set_used(string $prop, $val): void
    {
        // Legacy property aliases
        if (isset(self::$_props_alias[$prop])) {
            $prop = self::$_props_alias[$prop];
        }

        if (!isset(self::$_defaults[$prop])) {
            throw new Exception("'$prop' is not a recognized CSS property.");
        }

        if (isset(self::$_props_shorthand[$prop])) {
            foreach (self::$_props_shorthand[$prop] as $sub_prop) {
                $this->set_used($sub_prop, $val);
            }
        } else {
            $this->_props_used[$prop] = $val;
            $this->non_final_used[$prop] = true;
        }
    }

    /**
     * Get the used or computed value of a style property, depending on whether
     * the used value has been determined yet.
     *
     * @param string $prop
     *
     * @return mixed
     * @throws Exception
     */
    public function __get(string $prop)
    {
        // Legacy property aliases
        if (isset(self::$_props_alias[$prop])) {
            $prop = self::$_props_alias[$prop];
        }

        if (!isset(self::$_defaults[$prop])) {
            throw new Exception("'$prop' is not a recognized CSS property.");
        }

        if (isset($this->_props_used[$prop])) {
            return $this->_props_used[$prop];
        }

        $method = "_get_$prop";

        if (!isset(self::$_methods_cache[$method])) {
            self::$_methods_cache[$method] = method_exists($this, $method);
        }

        if (isset(self::$_props_shorthand[$prop])) {
            // Don't cache shorthand values, always use getter. If no dedicated
            // getter exists, use a simple fallback getter concatenating all
            // sub-property values
            if (self::$_methods_cache[$method]) {
                return $this->$method();
            } else {
                return implode(" ", array_map(function ($sub_prop) {
                    $val = $this->__get($sub_prop);
                    return \is_array($val) ? implode(" ", $val) : $val;
                }, self::$_props_shorthand[$prop]));
            }
        } else {
            $computed = $this->computed($prop);
            $used = self::$_methods_cache[$method]
                ? $this->$method($computed)
                : $computed;

            $this->_props_used[$prop] = $used;
            return $used;
        }
    }

    /**
     * @param string $prop The property to compute.
     * @param mixed  $val  The value to compute. Non-string values are treated as already computed.
     *
     * @return mixed The computed value.
     */
    protected function compute_prop(string $prop, $val)
    {
        // During style merge, the parent style is not available yet, so
        // temporarily use the initial value for `inherit` properties. The
        // keyword is properly resolved during inheritance
        if ($val === "inherit") {
            $val = self::$_defaults[$prop];
        }

        // Check for values which are already computed
        if (!\is_string($val)) {
            return $val;
        }

        $method = "_compute_$prop";

        if (!isset(self::$_methods_cache[$method])) {
            self::$_methods_cache[$method] = method_exists($this, $method);
        }

        if (self::$_methods_cache[$method]) {
            return $this->$method($val);
        } elseif ($val !== "") {
            return $val;
        } else {
            return null;
        }
    }

    /**
     * Get the computed value for the given property.
     *
     * @param string $prop The property to get the computed value of.
     *
     * @return mixed The computed value.
     */
    protected function computed(string $prop)
    {
        if (!\array_key_exists($prop, $this->_props_computed)) {
            $val = $this->_props[$prop] ?? self::$_defaults[$prop];
            $computed = $this->compute_prop($prop, $val);

            $this->_props_computed[$prop] = $computed;
        }

        return $this->_props_computed[$prop];
    }

    /**
     * @param float $cbw The width of the containing block.
     * @return float|string|null
     */
    public function computed_bottom_spacing(float $cbw)
    {
        // Caching the bottom spacing independently of the given width is a bit
        // iffy, but should be okay, as the containing block should only
        // potentially change after a page break, and the style is reset in that
        // case
        if ($this->_computed_bottom_spacing !== null) {
            return $this->_computed_bottom_spacing;
        }
        return $this->_computed_bottom_spacing = $this->length_in_pt(
            [
                $this->margin_bottom,
                $this->padding_bottom,
                $this->border_bottom_width
            ],
            $cbw
        );
    }

    /**
     * Returns an `array(r, g, b, "r" => r, "g" => g, "b" => b, "alpha" => alpha, "hex" => "#rrggbb")`
     * based on the provided CSS color value.
     *
     * @param string|null $color
     * @return array|string|null
     */
    public function munge_color($color)
    {
        return Color::parse($color);
    }

    /**
     * @return string
     */
    public function get_font_family_raw(): string
    {
        return trim($this->_props["font_family"], " \t\n\r\x0B\"'");
    }

    /**
     * Getter for the `font-family` CSS property.
     *
     * Uses the {@link FontMetrics} class to resolve the font family into an
     * actual font file.
     *
     * @param string $computed
     * @return string
     * @throws Exception
     *
     * @link https://www.w3.org/TR/CSS21/fonts.html#propdef-font-family
     */
    protected function _get_font_family($computed): string
    {
        //TODO: we should be using the calculated prop rather than perform the entire family parsing operation again

        $fontMetrics = $this->getFontMetrics();
        $DEBUGCSS = $this->_stylesheet->get_dompdf()->getOptions()->getDebugCss();

        // Select the appropriate font.  First determine the subtype, then check
        // the specified font-families for a candidate.

        // Resolve font-weight
        $weight = $this->__get("font_weight");
        if ($weight === 'bold') {
            $weight = 700;
        } elseif (preg_match('/^[0-9]+$/', $weight, $match)) {
            $weight = (int)$match[0];
        } else {
            $weight = 400;
        }

        // Resolve font-style
        $font_style = $this->__get("font_style");
        $subtype = $fontMetrics->getType($weight . ' ' . $font_style);

        $families = preg_split("/\s*,\s*/", $computed);

        $font = null;
        foreach ($families as $family) {
            //remove leading and trailing string delimiters, e.g. on font names with spaces;
            //remove leading and trailing whitespace
            $family = trim($family, " \t\n\r\x0B\"'");
            if ($DEBUGCSS) {
                print '(' . $family . ')';
            }
            $font = $fontMetrics->getFont($family, $subtype);

            if ($font) {
                if ($DEBUGCSS) {
                    print "<pre>[get_font_family:";
                    print '(' . $computed . '.' . $font_style . '.' . $weight . '.' . $subtype . ')';
                    print '(' . $font . ")get_font_family]\n</pre>";
                }
                return $font;
            }
        }

        $family = null;
        if ($DEBUGCSS) {
            print '(default)';
        }
        $font = $fontMetrics->getFont($family, $subtype);

        if ($font) {
            if ($DEBUGCSS) {
                print '(' . $font . ")get_font_family]\n</pre>";
            }
            return $font;
        }

        throw new Exception("Unable to find a suitable font replacement for: '" . $computed . "'");
    }

    /**
     * @param float|string $computed
     * @return float
     *
     * @link https://www.w3.org/TR/css-text-4/#word-spacing-property
     */
    protected function _get_word_spacing($computed)
    {
        if (\is_float($computed)) {
            return $computed;
        }

        // Resolve percentage values
        $font_size = $this->__get("font_size");
        return $this->single_length_in_pt($computed, $font_size);
    }

    /**
     * @param float|string $computed
     * @return float
     *
     * @link https://www.w3.org/TR/css-text-4/#letter-spacing-property
     */
    protected function _get_letter_spacing($computed)
    {
        if (\is_float($computed)) {
            return $computed;
        }

        // Resolve percentage values
        $font_size = $this->__get("font_size");
        return $this->single_length_in_pt($computed, $font_size);
    }

    /**
     * @param float|string $computed
     * @return float
     *
     * @link https://www.w3.org/TR/CSS21/visudet.html#propdef-line-height
     */
    protected function _get_line_height($computed)
    {
        // Lengths have been computed to float, number values to string
        if (\is_float($computed)) {
            return $computed;
        }

        $font_size = $this->__get("font_size");
        $factor = $computed === "normal"
            ? self::$default_line_height
            : (float) $computed;

        return $factor * $font_size;
    }

    /**
     * @param string $computed
     * @param bool   $current_is_parent
     *
     * @return array|string
     */
    protected function get_color_value($computed, bool $current_is_parent = false)
    {
        if ($computed === "currentcolor") {
            // https://www.w3.org/TR/css-color-4/#resolving-other-colors
            if ($current_is_parent) {
                // Use the `color` value from the parent for the `color`
                // property itself
                return isset($this->parent_style)
                    ? $this->parent_style->__get("color")
                    : $this->munge_color(self::$_defaults["color"]);
            }

            return $this->__get("color");
        }

        return $this->munge_color($computed) ?? "transparent";
    }

    /**
     * Returns the color as an array
     *
     * The array has the following format:
     * `array(r, g, b, "r" => r, "g" => g, "b" => b, "alpha" => alpha, "hex" => "#rrggbb")`
     *
     * @param string $computed
     * @return array|string
     *
     * @link https://www.w3.org/TR/CSS21/colors.html#propdef-color
     */
    protected function _get_color($computed)
    {
        return $this->get_color_value($computed, true);
    }

    /**
     * Returns the background color as an array
     *
     * See {@link Style::_get_color()} for format of the color array.
     *
     * @param string $computed
     * @return array|string
     *
     * @link https://www.w3.org/TR/CSS21/colors.html#propdef-background-color
     */
    protected function _get_background_color($computed)
    {
        return $this->get_color_value($computed);
    }

    /**
     * Returns the background image URI, or "none"
     *
     * @param string $computed
     * @return string
     *
     * @link https://www.w3.org/TR/CSS21/colors.html#propdef-background-image
     */
    protected function _get_background_image($computed): string
    {
        return $this->_stylesheet->resolve_url($computed);
    }

    /**
     * Returns the border color as an array
     *
     * See {@link Style::_get_color()} for format of the color array.
     *
     * @param string $computed
     * @return array|string
     *
     * @link https://www.w3.org/TR/CSS21/box.html#border-color-properties
     */
    protected function _get_border_top_color($computed)
    {
        return $this->get_color_value($computed);
    }

    /**
     * @param string $computed
     * @return array|string
     */
    protected function _get_border_right_color($computed)
    {
        return $this->get_color_value($computed);
    }

    /**
     * @param string $computed
     * @return array|string
     */
    protected function _get_border_bottom_color($computed)
    {
        return $this->get_color_value($computed);
    }

    /**
     * @param string $computed
     * @return array|string
     */
    protected function _get_border_left_color($computed)
    {
        return $this->get_color_value($computed);
    }

    /**
     * Return an array of all border properties.
     *
     * The returned array has the following structure:
     *
     * ```
     * array("top" => array("width" => [border-width],
     *                      "style" => [border-style],
     *                      "color" => [border-color (array)]),
     *       "bottom" ... )
     * ```
     *
     * @return array
     */
    public function get_border_properties(): array
    {
        return [
            "top" => [
                "width" => $this->__get("border_top_width"),
                "style" => $this->__get("border_top_style"),
                "color" => $this->__get("border_top_color"),
            ],
            "bottom" => [
                "width" => $this->__get("border_bottom_width"),
                "style" => $this->__get("border_bottom_style"),
                "color" => $this->__get("border_bottom_color"),
            ],
            "right" => [
                "width" => $this->__get("border_right_width"),
                "style" => $this->__get("border_right_style"),
                "color" => $this->__get("border_right_color"),
            ],
            "left" => [
                "width" => $this->__get("border_left_width"),
                "style" => $this->__get("border_left_style"),
                "color" => $this->__get("border_left_color"),
            ],
        ];
    }

    /**
     * Return a single border-side property
     *
     * @param string $side
     * @return string
     */
    protected function get_border_side(string $side): string
    {
        $color = $this->__get("border_{$side}_color");

        return $this->__get("border_{$side}_width") . " " .
            $this->__get("border_{$side}_style") . " " .
            (\is_array($color) ? $color["hex"] : $color);
    }

    /**
     * Return full border properties as a string
     *
     * Border properties are returned just as specified in CSS:
     * `[width] [style] [color]`
     * e.g. "1px solid blue"
     *
     * @return string
     *
     * @link https://www.w3.org/TR/CSS21/box.html#border-shorthand-properties
     */
    protected function _get_border_top(): string
    {
        return $this->get_border_side("top");
    }

    /**
     * @return string
     */
    protected function _get_border_right(): string
    {
        return $this->get_border_side("right");
    }

    /**
     * @return string
     */
    protected function _get_border_bottom(): string
    {
        return $this->get_border_side("bottom");
    }

    /**
     * @return string
     */
    protected function _get_border_left(): string
    {
        return $this->get_border_side("left");
    }

    public function has_border_radius(): bool
    {
        if (isset($this->has_border_radius_cache)) {
            return $this->has_border_radius_cache;
        }

        // Use a fixed ref size here. We don't know the border-box width here
        // and font size might be 0. Since we are only interested in whether
        // there is any border radius at all, this should do
        $tl = (float) $this->length_in_pt($this->border_top_left_radius, 12);
        $tr = (float) $this->length_in_pt($this->border_top_right_radius, 12);
        $br = (float) $this->length_in_pt($this->border_bottom_right_radius, 12);
        $bl = (float) $this->length_in_pt($this->border_bottom_left_radius, 12);

        $this->has_border_radius_cache = $tl + $tr + $br + $bl > 0;
        return $this->has_border_radius_cache;
    }

    /**
     * Get the final border-radius values to use.
     *
     * Percentage values are resolved relative to the width of the border box.
     * The border radius is additionally scaled for the given render box, and
     * constrained by its width and height.
     *
     * @param float[]      $border_box The border box of the frame.
     * @param float[]|null $render_box The box to resolve the border radius for.
     *
     * @return float[] A 4-tuple of top-left, top-right, bottom-right, and bottom-left radius.
     */
    public function resolve_border_radius(
        array $border_box,
        ?array $render_box = null
    ): array {
        $render_box = $render_box ?? $border_box;
        $use_cache = $render_box === $border_box;

        if ($use_cache && isset($this->resolved_border_radius)) {
            return $this->resolved_border_radius;
        }

        [$x, $y, $w, $h] = $border_box;

        // Resolve percentages relative to width, as long as we have no support
        // for per-axis radii
        $tl = (float) $this->length_in_pt($this->border_top_left_radius, $w);
        $tr = (float) $this->length_in_pt($this->border_top_right_radius, $w);
        $br = (float) $this->length_in_pt($this->border_bottom_right_radius, $w);
        $bl = (float) $this->length_in_pt($this->border_bottom_left_radius, $w);

        if ($tl + $tr + $br + $bl > 0) {
            [$rx, $ry, $rw, $rh] = $render_box;

            $t_offset = $y - $ry;
            $r_offset = $rx + $rw - $x - $w;
            $b_offset = $ry + $rh - $y - $h;
            $l_offset = $x - $rx;

            if ($tl > 0) {
                $tl = max($tl + ($t_offset + $l_offset) / 2, 0);
            }
            if ($tr > 0) {
                $tr = max($tr + ($t_offset + $r_offset) / 2, 0);
            }
            if ($br > 0) {
                $br = max($br + ($b_offset + $r_offset) / 2, 0);
            }
            if ($bl > 0) {
                $bl = max($bl + ($b_offset + $l_offset) / 2, 0);
            }

            if ($tl + $bl > $rh) {
                $f = $rh / ($tl + $bl);
                $tl = $f * $tl;
                $bl = $f * $bl;
            }
            if ($tr + $br > $rh) {
                $f = $rh / ($tr + $br);
                $tr = $f * $tr;
                $br = $f * $br;
            }
            if ($tl + $tr > $rw) {
                $f = $rw / ($tl + $tr);
                $tl = $f * $tl;
                $tr = $f * $tr;
            }
            if ($bl + $br > $rw) {
                $f = $rw / ($bl + $br);
                $bl = $f * $bl;
                $br = $f * $br;
            }
        }

        $values = [$tl, $tr, $br, $bl];

        if ($use_cache) {
            $this->resolved_border_radius = $values;
        }

        return $values;
    }

    /**
     * Returns the outline color as an array
     *
     * See {@link Style::_get_color()} for format of the color array.
     *
     * @param string $computed
     * @return array|string
     *
     * @link https://www.w3.org/TR/css-ui-4/#propdef-outline-color
     */
    protected function _get_outline_color($computed)
    {
        return $this->get_color_value($computed);
    }

    /**
     * @param string $computed
     * @return string
     *
     * @link https://www.w3.org/TR/css-ui-4/#propdef-outline-style
     */
    protected function _get_outline_style($computed): string
    {
        return $computed === "auto" ? "solid" : $computed;
    }

    /**
     * Return full outline properties as a string
     *
     * Outline properties are returned just as specified in CSS:
     * `[width] [style] [color]`
     * e.g. "1px solid blue"
     *
     * @return string
     *
     * @link https://www.w3.org/TR/CSS21/box.html#border-shorthand-properties
     */
    protected function _get_outline(): string
    {
        $color = $this->__get("outline_color");

        return $this->__get("outline_width") . " " .
            $this->__get("outline_style") . " " .
            (\is_array($color) ? $color["hex"] : $color);
    }

    /**
     * Returns the list style image URI, or "none"
     *
     * @param string $computed
     * @return string
     *
     * @link https://www.w3.org/TR/CSS21/generate.html#propdef-list-style-image
     */
    protected function _get_list_style_image($computed): string
    {
        return $this->_stylesheet->resolve_url($computed);
    }

    /**
     * @param string $value
     * @param int    $default
     *
     * @return array|string
     */
    protected function parse_counter_prop(string $value, int $default)
    {
        $ident = self::CSS_IDENTIFIER;
        $integer = self::CSS_INTEGER;
        $pattern = "/($ident)(?:\s+($integer))?/";

        if (!preg_match_all($pattern, $value, $matches, PREG_SET_ORDER)) {
            return "none";
        }

        $counters = [];

        foreach ($matches as $match) {
            $counter = $match[1];
            $value = isset($match[2]) ? (int) $match[2] : $default;
            $counters[$counter] = $value;
        }

        return $counters;
    }

    /**
     * @param string $computed
     * @return array|string
     *
     * @link https://www.w3.org/TR/CSS21/generate.html#propdef-counter-increment
     */
    protected function _get_counter_increment($computed)
    {
        if ($computed === "none") {
            return $computed;
        }

        return $this->parse_counter_prop($computed, 1);
    }

    /**
     * @param string $computed
     * @return array|string
     *
     * @link https://www.w3.org/TR/CSS21/generate.html#propdef-counter-reset
     */
    protected function _get_counter_reset($computed)
    {
        if ($computed === "none") {
            return $computed;
        }

        return $this->parse_counter_prop($computed, 0);
    }

    /**
     * @param string $computed
     * @return string[]|string
     *
     * @link https://www.w3.org/TR/CSS21/generate.html#propdef-content
     */
    protected function _get_content($computed)
    {
        if ($computed === "normal" || $computed === "none") {
            return $computed;
        }

        return $this->parse_property_value($computed);
    }

    /*==============================*/

    /**
     * Parse a property value into its components.
     *
     * @param string $value
     *
     * @return string[]
     */
    protected function parse_property_value(string $value): array
    {
        $ident = self::CSS_IDENTIFIER;
        $number = self::CSS_NUMBER;

        $pattern = "/\n" .
            "\s* \" ( (?:[^\"]|\\\\[\"])* ) (?<!\\\\)\" |\n" . // String ""
            "\s* '  ( (?:[^']|\\\\['])* )   (?<!\\\\)'  |\n" . // String ''
            "\s* ($ident \\([^)]*\\) )                  |\n" . // Functional
            "\s* ($ident)                               |\n" . // Keyword
            "\s* (\#[0-9a-fA-F]*)                       |\n" . // Hex value
            "\s* ($number [a-zA-Z%]*)                   |\n" . // Number (+ unit/percentage)
            "\s* ([\/,;])                                \n" . // Delimiter
            "/Sx";

        if (!preg_match_all($pattern, $value, $matches)) {
            return [];
        }

        return array_map("trim", $matches[0]);
    }

    protected function is_color_value(string $val): bool
    {
        return $val === "currentcolor"
            || $val === "transparent"
            || isset(Color::$cssColorNames[$val])
            || preg_match("/^#|rgb\(|rgba\(|cmyk\(/", $val);
    }

    /**
     * @param string $val
     * @return string|null
     */
    protected function compute_color_value(string $val): ?string
    {
        // https://www.w3.org/TR/css-color-4/#resolving-other-colors
        $munged_color = $val !== "currentcolor"
            ? $this->munge_color($val)
            : $val;

        if ($munged_color === null) {
            return null;
        }

        return \is_array($munged_color) ? $munged_color["hex"] : $munged_color;
    }

    /**
     * @param string $val
     * @return int|null
     */
    protected function compute_integer(string $val): ?int
    {
        $integer = self::CSS_INTEGER;
        return preg_match("/^$integer$/", $val)
            ? (int) $val
            : null;
    }

    /**
     * @param string $val
     * @return float|null
     */
    protected function compute_length(string $val): ?float
    {
        return mb_strpos($val, "%") === false
            ? $this->single_length_in_pt($val)
            : null;
    }

    /**
     * @param string $val
     * @return float|null
     */
    protected function compute_length_positive(string $val): ?float
    {
        $computed = $this->compute_length($val);
        return $computed !== null && $computed >= 0 ? $computed : null;
    }

    /**
     * @param string $val
     * @return float|string|null
     */
    protected function compute_length_percentage(string $val)
    {
        // Compute with a fixed ref size to decide whether percentage values
        // are valid
        $computed = $this->single_length_in_pt($val, 12);

        if ($computed === null) {
            return null;
        }

        // Retain valid percentage declarations
        return mb_strpos($val, "%") === false ? $computed : $val;
    }

    /**
     * @param string $val
     * @return float|string|null
     */
    protected function compute_length_percentage_positive(string $val)
    {
        // Compute with a fixed ref size to decide whether percentage values
        // are valid
        $computed = $this->single_length_in_pt($val, 12);

        if ($computed === null || $computed < 0) {
            return null;
        }

        // Retain valid percentage declarations
        return mb_strpos($val, "%") === false ? $computed : $val;
    }

    /**
     * @param string $val
     * @param string $style_prop The corresponding border-/outline-style property.
     *
     * @return float|null
     *
     * @link https://www.w3.org/TR/css-backgrounds-3/#typedef-line-width
     */
    protected function compute_line_width(string $val, string $style_prop): ?float
    {
        // Border-width keywords
        if ($val === "thin") {
            $computed = 0.5;
        } elseif ($val === "medium") {
            $computed = 1.5;
        } elseif ($val === "thick") {
            $computed = 2.5;
        } else {
            $computed = $this->compute_length_positive($val);
        }

        if ($computed === null) {
            return null;
        }

        // Computed width is 0 if the line style is `none` or `hidden`
        // https://www.w3.org/TR/css-backgrounds-3/#border-width
        // https://www.w3.org/TR/css-ui-4/#outline-width
        $lineStyle = $this->__get($style_prop);
        $hasLineStyle = $lineStyle !== "none" && $lineStyle !== "hidden";

        return $hasLineStyle ? $computed : 0.0;
    }

    /**
     * @param string $val
     * @return string|null
     */
    protected function compute_border_style(string $val): ?string
    {
        return \in_array($val, self::BORDER_STYLES, true) ? $val : null;
    }

    /**
     * Parse a property value with 1 to 4 components into 4 values, as required
     * by shorthand properties such as `margin`, `padding`, and `border-radius`.
     *
     * @param string $prop  The shorthand property with exactly 4 sub-properties to handle.
     * @param string $value The property value to parse.
     *
     * @return string[]
     */
    protected function set_quad_shorthand(string $prop, string $value): array
    {
        $v = $this->parse_property_value($value);

        switch (\count($v)) {
            case 1:
                $values = [$v[0], $v[0], $v[0], $v[0]];
                break;
            case 2:
                $values = [$v[0], $v[1], $v[0], $v[1]];
                break;
            case 3:
                $values = [$v[0], $v[1], $v[2], $v[1]];
                break;
            case 4:
                $values = [$v[0], $v[1], $v[2], $v[3]];
                break;
            default:
                return [];
        }

        return array_combine(self::$_props_shorthand[$prop], $values);
    }

    /*======================*/

    /**
     * @link https://www.w3.org/TR/CSS21/visuren.html#display-prop
     */
    protected function _compute_display(string $val)
    {
        // Make sure that common valid, but unsupported display types have an
        // appropriate fallback display type
        switch ($val) {
            case "flow-root":
            case "flex":
            case "grid":
            case "table-caption":
                $val = "block";
                break;
            case "inline-flex":
            case "inline-grid":
                $val = "inline-block";
                break;
        }

        if (!isset(self::$valid_display_types[$val])) {
            return null;
        }

        // https://www.w3.org/TR/CSS21/visuren.html#dis-pos-flo
        if ($this->is_in_flow()) {
            return $val;
        } else {
            switch ($val) {
                case "inline":
                case "inline-block":
                // case "table-row-group":
                // case "table-header-group":
                // case "table-footer-group":
                // case "table-row":
                // case "table-cell":
                // case "table-column-group":
                // case "table-column":
                // case "table-caption":
                    return "block";
                case "inline-table":
                    return "table";
                default:
                    return $val;
            }
        }
    }

    /**
     * @link https://www.w3.org/TR/CSS21/colors.html#propdef-color
     */
    protected function _compute_color(string $color)
    {
        return $this->compute_color_value($color);
    }

    /**
     * @link https://www.w3.org/TR/CSS21/colors.html#propdef-background-color
     */
    protected function _compute_background_color(string $color)
    {
        return $this->compute_color_value($color);
    }

    /**
     * @link https://www.w3.org/TR/CSS21/colors.html#propdef-background-image
     */
    protected function _compute_background_image(string $val)
    {
        $parsed_val = $this->_stylesheet->resolve_url($val);

        if ($parsed_val === "none") {
            return "none";
        } else {
            return "url($parsed_val)";
        }
    }

    /**
     * @link https://www.w3.org/TR/CSS21/colors.html#propdef-background-repeat
     */
    protected function _compute_background_repeat(string $val)
    {
        $keywords = ["repeat", "repeat-x", "repeat-y", "no-repeat"];
        return \in_array($val, $keywords, true) ? $val : null;
    }

    /**
     * @link https://www.w3.org/TR/CSS21/colors.html#propdef-background-attachment
     */
    protected function _compute_background_attachment(string $val)
    {
        $keywords = ["scroll", "fixed"];
        return \in_array($val, $keywords, true) ? $val : null;
    }

    /**
     * @link https://www.w3.org/TR/CSS21/colors.html#propdef-background-position
     */
    protected function _compute_background_position(string $val)
    {
        $parts = preg_split("/\s+/", $val);

        if (\count($parts) > 2) {
            return null;
        }

        switch ($parts[0]) {
            case "left":
                $x = "0%";
                break;

            case "right":
                $x = "100%";
                break;

            case "top":
                $y = "0%";
                break;

            case "bottom":
                $y = "100%";
                break;

            case "center":
                $x = "50%";
                $y = "50%";
                break;

            default:
                $x = $parts[0];
                break;
        }

        if (isset($parts[1])) {
            switch ($parts[1]) {
                case "left":
                    $x = "0%";
                    break;

                case "right":
                    $x = "100%";
                    break;

                case "top":
                    $y = "0%";
                    break;

                case "bottom":
                    $y = "100%";
                    break;

                case "center":
                    if ($parts[0] === "left" || $parts[0] === "right" || $parts[0] === "center") {
                        $y = "50%";
                    } else {
                        $x = "50%";
                    }
                    break;

                default:
                    $y = $parts[1];
                    break;
            }
        } else {
            $y = "50%";
        }

        if (!isset($x)) {
            $x = "0%";
        }

        if (!isset($y)) {
            $y = "0%";
        }

        return [$x, $y];
    }

    /**
     * Compute `background-size`.
     *
     * Computes to one of the following values:
     * * `cover`
     * * `contain`
     * * `[width, height]`, each being a length, percentage, or `auto`
     *
     * @link https://www.w3.org/TR/css-backgrounds-3/#background-size
     */
    protected function _compute_background_size(string $val)
    {
        if ($val === "cover" || $val === "contain") {
            return $val;
        }

        $parts = preg_split("/\s+/", $val);

        if (\count($parts) > 2) {
            return null;
        }

        $width = $parts[0];
        if ($width !== "auto") {
            $width = $this->compute_length_percentage_positive($width);
        }

        $height = $parts[1] ?? "auto";
        if ($height !== "auto") {
            $height = $this->compute_length_percentage_positive($height);
        }

        if ($width === null || $height === null) {
            return null;
        }

        return [$width, $height];
    }

    /**
     * @link https://www.w3.org/TR/css-backgrounds-3/#propdef-background
     */
    protected function _set_background(string $value): array
    {
        $components = $this->parse_property_value($value);
        $props = [];
        $pos_size = [];

        foreach ($components as $val) {
            if ($val === "none" || mb_substr($val, 0, 4) === "url(") {
                $props["background_image"] = $val;
            } elseif ($val === "scroll" || $val === "fixed") {
                $props["background_attachment"] = $val;
            } elseif ($val === "repeat" || $val === "repeat-x" || $val === "repeat-y" || $val === "no-repeat") {
                $props["background_repeat"] = $val;
            } elseif ($this->is_color_value($val)) {
                $props["background_color"] = $val;
            } else {
                $pos_size[] = $val;
            }
        }

        if (\count($pos_size)) {
            // Split value list at "/"
            $index = array_search("/", $pos_size, true);

            if ($index !== false) {
                $pos = \array_slice($pos_size, 0, $index);
                $size = \array_slice($pos_size, $index + 1);
            } else {
                $pos = $pos_size;
                $size = [];
            }

            $props["background_position"] = implode(" ", $pos);

            if (\count($size)) {
                $props["background_size"] = implode(" ", $size);
            }
        }

        return $props;
    }

    /**
     * @link https://www.w3.org/TR/CSS21/fonts.html#propdef-font-size
     */
    protected function _compute_font_size(string $size)
    {
        $parent_font_size = isset($this->parent_style)
            ? $this->parent_style->__get("font_size")
            : self::$default_font_size;

        switch ($size) {
            case "xx-small":
            case "x-small":
            case "small":
            case "medium":
            case "large":
            case "x-large":
            case "xx-large":
                $fs = self::$default_font_size * self::$font_size_keywords[$size];
                break;

            case "smaller":
                $fs = 8 / 9 * $parent_font_size;
                break;

            case "larger":
                $fs = 6 / 5 * $parent_font_size;
                break;

            default:
                $fs = $this->single_length_in_pt($size, $parent_font_size, $parent_font_size);
                break;
        }

        return $fs;
    }

    /**
     * @link https://www.w3.org/TR/CSS21/fonts.html#font-boldness
     */
    protected function _compute_font_weight(string $weight)
    {
        $computed_weight = $weight;

        if ($weight === "bolder") {
            //TODO: One font weight heavier than the parent element (among the available weights of the font).
            $computed_weight = "bold";
        } elseif ($weight === "lighter") {
            //TODO: One font weight lighter than the parent element (among the available weights of the font).
            $computed_weight = "normal";
        }

        return $computed_weight;
    }

    /**
     * Handle the `font` shorthand property.
     *
     * `[ font-style || font-variant || font-weight ] font-size [ / line-height ] font-family`
     *
     * @link https://www.w3.org/TR/CSS21/fonts.html#font-shorthand
     */
    protected function _set_font(string $value): array
    {
        $components = $this->parse_property_value($value);
        $props = [];

        $number = self::CSS_NUMBER;
        $unit = "pt|px|pc|rem|em|ex|in|cm|mm|%";
        $sizePattern = "/^(xx-small|x-small|small|medium|large|x-large|xx-large|smaller|larger|$number(?:$unit))$/";
        $sizeIndex = null;

        // Find index of font-size to split the component list
        foreach ($components as $i => $val) {
            if (preg_match($sizePattern, $val)) {
                $sizeIndex = $i;
                $props["font_size"] = $val;
                break;
            }
        }

        // `font-size` is mandatory
        if ($sizeIndex === null) {
            return [];
        }

        // `font-style`, `font-variant`, `font-weight` in any order
        $styleVariantWeight = \array_slice($components, 0, $sizeIndex);
        $stylePattern = "/^(italic|oblique)$/";
        $variantPattern = "/^(small-caps)$/";
        $weightPattern = "/^(bold|bolder|lighter|100|200|300|400|500|600|700|800|900)$/";

        if (\count($styleVariantWeight) > 3) {
            return [];
        }

        foreach ($styleVariantWeight as $val) {
            if ($val === "normal") {
                // Ignore any `normal` value, as it is valid and the initial
                // value for all three properties
            } elseif (!isset($props["font_style"]) && preg_match($stylePattern, $val)) {
                $props["font_style"] = $val;
            } elseif (!isset($props["font_variant"]) && preg_match($variantPattern, $val)) {
                $props["font_variant"] = $val;
            } elseif (!isset($props["font_weight"]) && preg_match($weightPattern, $val)) {
                $props["font_weight"] = $val;
            } else {
                // Duplicates and other values disallowed here
                return [];
            }
        }

        // Optional slash + `line-height` followed by mandatory `font-family`
        $lineFamily = \array_slice($components, $sizeIndex + 1);
        $hasLineHeight = $lineFamily !== [] && $lineFamily[0] === "/";
        $lineHeight = $hasLineHeight ? \array_slice($lineFamily, 1, 1) : [];
        $fontFamily = $hasLineHeight ? \array_slice($lineFamily, 2) : $lineFamily;
        $lineHeightPattern = "/^(normal|$number(?:$unit)?)$/";

        // Missing `font-family` or `line-height` after slash
        if ($fontFamily === []
            || ($hasLineHeight && !preg_match($lineHeightPattern, $lineHeight[0]))
        ) {
            return [];
        }

        if ($hasLineHeight) {
            $props["line_height"] = $lineHeight[0];
        }

        $props["font_family"] = implode("", $fontFamily);

        return $props;
    }

    /**
     * Compute `text-align`.
     *
     * If no alignment is set on the element and the direction is rtl then
     * the property is set to "right", otherwise it is set to "left".
     *
     * @link https://www.w3.org/TR/CSS21/text.html#propdef-text-align
     */
    protected function _compute_text_align(string $val)
    {
        $alignment = $val;
        if ($alignment === "") {
            $alignment = "left";
            if ($this->__get("direction") === "rtl") {
                $alignment = "right";
            }
        }

        if (!\in_array($alignment, self::TEXT_ALIGN_KEYWORDS, true)) {
            return null;
        }

        return $alignment;
    }

    /**
     * @link https://www.w3.org/TR/css-text-4/#word-spacing-property
     */
    protected function _compute_word_spacing(string $val)
    {
        if ($val === "normal") {
            return 0.0;
        }

        return $this->compute_length_percentage($val);
    }

    /**
     * @link https://www.w3.org/TR/css-text-4/#letter-spacing-property
     */
    protected function _compute_letter_spacing(string $val)
    {
        if ($val === "normal") {
            return 0.0;
        }

        return $this->compute_length_percentage($val);
    }

    /**
     * @link https://www.w3.org/TR/CSS21/visudet.html#propdef-line-height
     */
    protected function _compute_line_height(string $val)
    {
        if ($val === "normal") {
            return $val;
        }

        // Compute number values to string and lengths to float (in pt)
        if (is_numeric($val)) {
            return (string) $val;
        }

        $font_size = $this->__get("font_size");
        $computed = $this->single_length_in_pt($val, $font_size);
        return $computed !== null && $computed >= 0 ? $computed : null;
    }

    /**
     * @link https://www.w3.org/TR/css-text-3/#text-indent-property
     */
    protected function _compute_text_indent(string $val)
    {
        return $this->compute_length_percentage($val);
    }

    /**
     * @link https://www.w3.org/TR/CSS21/page.html#propdef-page-break-before
     */
    protected function _compute_page_break_before(string $break)
    {
        if ($break === "left" || $break === "right") {
            $break = "always";
        }

        return $break;
    }

    /**
     * @link https://www.w3.org/TR/CSS21/page.html#propdef-page-break-after
     */
    protected function _compute_page_break_after(string $break)
    {
        if ($break === "left" || $break === "right") {
            $break = "always";
        }

        return $break;
    }

    /**
     * @link https://www.w3.org/TR/CSS21/visudet.html#propdef-width
     */
    protected function _compute_width(string $val)
    {
        if ($val === "auto") {
            return $val;
        }

        return $this->compute_length_percentage_positive($val);
    }

    /**
     * @link https://www.w3.org/TR/CSS21/visudet.html#propdef-height
     */
    protected function _compute_height(string $val)
    {
        if ($val === "auto") {
            return $val;
        }

        return $this->compute_length_percentage_positive($val);
    }

    /**
     * @link https://www.w3.org/TR/CSS21/visudet.html#propdef-min-width
     */
    protected function _compute_min_width(string $val)
    {
        // Legacy support for `none`, not covered by spec
        if ($val === "auto" || $val === "none") {
            return "auto";
        }

        return $this->compute_length_percentage_positive($val);
    }

    /**
     * @link https://www.w3.org/TR/CSS21/visudet.html#propdef-min-height
     */
    protected function _compute_min_height(string $val)
    {
        // Legacy support for `none`, not covered by spec
        if ($val === "auto" || $val === "none") {
            return "auto";
        }

        return $this->compute_length_percentage_positive($val);
    }

    /**
     * @link https://www.w3.org/TR/CSS21/visudet.html#propdef-max-width
     */
    protected function _compute_max_width(string $val)
    {
        // Legacy support for `auto`, not covered by spec
        if ($val === "none" || $val === "auto") {
            return "none";
        }

        return $this->compute_length_percentage_positive($val);
    }

    /**
     * @link https://www.w3.org/TR/CSS21/visudet.html#propdef-max-height
     */
    protected function _compute_max_height(string $val)
    {
        // Legacy support for `auto`, not covered by spec
        if ($val === "none" || $val === "auto") {
            return "none";
        }

        return $this->compute_length_percentage_positive($val);
    }

    /**
     * @link https://www.w3.org/TR/css-position-3/#inset-properties
     * @link https://www.w3.org/TR/css-position-3/#propdef-inset
     */
    protected function _set_inset(string $val): array
    {
        return $this->set_quad_shorthand("inset", $val);
    }

    /**
     * @param string $val
     * @return float|string|null
     */
    protected function compute_box_inset(string $val)
    {
        if ($val === "auto") {
            return $val;
        }

        return $this->compute_length_percentage($val);
    }

    protected function _compute_top(string $val)
    {
        return $this->compute_box_inset($val);
    }

    protected function _compute_right(string $val)
    {
        return $this->compute_box_inset($val);
    }

    protected function _compute_bottom(string $val)
    {
        return $this->compute_box_inset($val);
    }

    protected function _compute_left(string $val)
    {
        return $this->compute_box_inset($val);
    }

    /**
     * @link https://www.w3.org/TR/CSS21/box.html#margin-properties
     * @link https://www.w3.org/TR/CSS21/box.html#propdef-margin
     */
    protected function _set_margin(string $val): array
    {
        return $this->set_quad_shorthand("margin", $val);
    }

    /**
     * @param string $val
     * @return float|string|null
     */
    protected function compute_margin(string $val)
    {
        // Legacy support for `none` keyword, not covered by spec
        if ($val === "none") {
            return 0.0;
        }

        if ($val === "auto") {
            return $val;
        }

        return $this->compute_length_percentage($val);
    }

    protected function _compute_margin_top(string $val)
    {
        return $this->compute_margin($val);
    }

    protected function _compute_margin_right(string $val)
    {
        return $this->compute_margin($val);
    }

    protected function _compute_margin_bottom(string $val)
    {
        return $this->compute_margin($val);
    }

    protected function _compute_margin_left(string $val)
    {
        return $this->compute_margin($val);
    }

    /**
     * @link https://www.w3.org/TR/CSS21/box.html#padding-properties
     * @link https://www.w3.org/TR/CSS21/box.html#propdef-padding
     */
    protected function _set_padding(string $val): array
    {
        return $this->set_quad_shorthand("padding", $val);
    }

    /**
     * @param string $val
     * @return float|string|null
     */
    protected function compute_padding(string $val)
    {
        // Legacy support for `none` keyword, not covered by spec
        if ($val === "none") {
            return 0.0;
        }

        return $this->compute_length_percentage_positive($val);
    }

    protected function _compute_padding_top(string $val)
    {
        return $this->compute_padding($val);
    }

    protected function _compute_padding_right(string $val)
    {
        return $this->compute_padding($val);
    }

    protected function _compute_padding_bottom(string $val)
    {
        return $this->compute_padding($val);
    }

    protected function _compute_padding_left(string $val)
    {
        return $this->compute_padding($val);
    }

    /**
     * @param string   $value  `width || style || color`
     * @param string[] $styles The list of border styles to accept.
     *
     * @return array Array of `[width, style, color]`, or `null` if the declaration is invalid.
     */
    protected function parse_border_side(string $value, array $styles = self::BORDER_STYLES): ?array
    {
        $components = $this->parse_property_value($value);
        $width = null;
        $style = null;
        $color = null;

        foreach ($components as $val) {
            if ($style === null && \in_array($val, $styles, true)) {
                $style = $val;
            } elseif ($color === null && $this->is_color_value($val)) {
                $color = $val;
            } elseif ($width === null) {
                // Assume width
                $width = $val;
            } else {
                // Duplicates are not allowed
                return null;
            }
        }

        return [$width, $style, $color];
    }

    /**
     * @link https://www.w3.org/TR/CSS21/box.html#border-properties
     * @link https://www.w3.org/TR/CSS21/box.html#propdef-border
     */
    protected function _set_border(string $value): array
    {
        $values = $this->parse_border_side($value);

        if ($values === null) {
            return [];
        }

        return array_merge(
            array_combine(self::$_props_shorthand["border_top"], $values),
            array_combine(self::$_props_shorthand["border_right"], $values),
            array_combine(self::$_props_shorthand["border_bottom"], $values),
            array_combine(self::$_props_shorthand["border_left"], $values)
        );
    }

    /**
     * @param string $prop
     * @param string $value
     * @return array
     */
    protected function set_border_side(string $prop, string $value): array
    {
        $values = $this->parse_border_side($value);

        if ($values === null) {
            return [];
        }

        return array_combine(self::$_props_shorthand[$prop], $values);
    }

    protected function _set_border_top(string $val): array
    {
        return $this->set_border_side("border_top", $val);
    }

    protected function _set_border_right(string $val): array
    {
        return $this->set_border_side("border_right", $val);
    }

    protected function _set_border_bottom(string $val): array
    {
        return $this->set_border_side("border_bottom", $val);
    }

    protected function _set_border_left(string $val): array
    {
        return $this->set_border_side("border_left", $val);
    }

    /**
     * @link https://www.w3.org/TR/CSS21/box.html#propdef-border-color
     */
    protected function _set_border_color(string $val): array
    {
        return $this->set_quad_shorthand("border_color", $val);
    }

    protected function _compute_border_top_color(string $val)
    {
        return $this->compute_color_value($val);
    }

    protected function _compute_border_right_color(string $val)
    {
        return $this->compute_color_value($val);
    }

    protected function _compute_border_bottom_color(string $val)
    {
        return $this->compute_color_value($val);
    }

    protected function _compute_border_left_color(string $val)
    {
        return $this->compute_color_value($val);
    }

    /**
     * @link https://www.w3.org/TR/CSS21/box.html#propdef-border-style
     */
    protected function _set_border_style(string $val): array
    {
        return $this->set_quad_shorthand("border_style", $val);
    }

    protected function _compute_border_top_style(string $val)
    {
        return $this->compute_border_style($val);
    }

    protected function _compute_border_right_style(string $val)
    {
        return $this->compute_border_style($val);
    }

    protected function _compute_border_bottom_style(string $val)
    {
        return $this->compute_border_style($val);
    }

    protected function _compute_border_left_style(string $val)
    {
        return $this->compute_border_style($val);
    }

    /**
     * @link https://www.w3.org/TR/CSS21/box.html#propdef-border-width
     */
    protected function _set_border_width(string $val): array
    {
        return $this->set_quad_shorthand("border_width", $val);
    }

    protected function _compute_border_top_width(string $val)
    {
        return $this->compute_line_width($val, "border_top_style");
    }

    protected function _compute_border_right_width(string $val)
    {
        return $this->compute_line_width($val, "border_right_style");
    }

    protected function _compute_border_bottom_width(string $val)
    {
        return $this->compute_line_width($val, "border_bottom_style");
    }

    protected function _compute_border_left_width(string $val)
    {
        return $this->compute_line_width($val, "border_left_style");
    }

    /**
     * @link https://www.w3.org/TR/css-backgrounds-3/#corners
     * @link https://www.w3.org/TR/css-backgrounds-3/#propdef-border-radius
     */
    protected function _set_border_radius(string $val): array
    {
        return $this->set_quad_shorthand("border_radius", $val);
    }

    protected function _compute_border_top_left_radius(string $val)
    {
        return $this->compute_length_percentage_positive($val);
    }

    protected function _compute_border_top_right_radius(string $val)
    {
        return $this->compute_length_percentage_positive($val);
    }

    protected function _compute_border_bottom_right_radius(string $val)
    {
        return $this->compute_length_percentage_positive($val);
    }

    protected function _compute_border_bottom_left_radius(string $val)
    {
        return $this->compute_length_percentage_positive($val);
    }

    /**
     * @link https://www.w3.org/TR/css-ui-4/#outline-props
     * @link https://www.w3.org/TR/css-ui-4/#propdef-outline
     */
    protected function _set_outline(string $value): array
    {
        $values = $this->parse_border_side($value, self::OUTLINE_STYLES);

        if ($values === null) {
            return [];
        }

        return array_combine(self::$_props_shorthand["outline"], $values);
    }

    protected function _compute_outline_color(string $val)
    {
        return $this->compute_color_value($val);
    }

    protected function _compute_outline_style(string $val)
    {
        return \in_array($val, self::OUTLINE_STYLES, true) ? $val : null;
    }

    protected function _compute_outline_width(string $val)
    {
        return $this->compute_line_width($val, "outline_style");
    }

    /**
     * @link https://www.w3.org/TR/css-ui-4/#propdef-outline-offset
     */
    protected function _compute_outline_offset(string $val)
    {
        return $this->compute_length($val);
    }

    /**
     * Compute `border-spacing` to two lengths of the form
     * `[horizontal, vertical]`.
     *
     * @link https://www.w3.org/TR/CSS21/tables.html#propdef-border-spacing
     */
    protected function _compute_border_spacing(string $val)
    {
        $parts = preg_split("/\s+/", $val);

        if (\count($parts) > 2) {
            return null;
        }

        $h = $this->compute_length_positive($parts[0]);
        $v = isset($parts[1])
            ? $this->compute_length_positive($parts[1])
            : $h;

        if ($h === null || $v === null) {
            return null;
        }

        return [$h, $v];
    }

    /**
     * @link https://www.w3.org/TR/CSS21/generate.html#propdef-list-style-image
     */
    protected function _compute_list_style_image(string $val)
    {
        $parsed_val = $this->_stylesheet->resolve_url($val);

        if ($parsed_val === "none") {
            return "none";
        } else {
            return "url($parsed_val)";
        }
    }

    /**
     * @link https://www.w3.org/TR/CSS21/generate.html#propdef-list-style
     */
    protected function _set_list_style(string $value): array
    {
        static $positions = ["inside", "outside"];
        static $types = [
            "disc", "circle", "square",
            "decimal-leading-zero", "decimal", "1",
            "lower-roman", "upper-roman", "a", "A",
            "lower-greek",
            "lower-latin", "upper-latin",
            "lower-alpha", "upper-alpha",
            "armenian", "georgian", "hebrew",
            "cjk-ideographic", "hiragana", "katakana",
            "hiragana-iroha", "katakana-iroha", "none"
        ];

        $components = $this->parse_property_value($value);
        $props = [];

        foreach ($components as $val) {
            /* https://www.w3.org/TR/CSS21/generate.html#list-style
             * A value of 'none' for the 'list-style' property sets both 'list-style-type' and 'list-style-image' to 'none'
             */
            if ($val === "none") {
                $props["list_style_type"] = $val;
                $props["list_style_image"] = $val;
                continue;
            }

            //On setting or merging or inheriting list_style_image as well as list_style_type,
            //and url exists, then url has precedence, otherwise fall back to list_style_type
            //Firefox is wrong here (list_style_image gets overwritten on explicit list_style_type)
            //Internet Explorer 7/8 and dompdf is right.

            if (mb_substr($val, 0, 4) === "url(") {
                $props["list_style_image"] = $val;
                continue;
            }

            if (\in_array($val, $types, true)) {
                $props["list_style_type"] = $val;
            } elseif (\in_array($val, $positions, true)) {
                $props["list_style_position"] = $val;
            }
        }

        return $props;
    }

    /**
     * @link https://www.w3.org/TR/css-page-3/#page-size-prop
     */
    protected function _compute_size(string $val)
    {
        if ($val === "auto") {
            return $val;
        }

        $parts = $this->parse_property_value($val);
        $count = \count($parts);

        if ($count === 0 || $count > 3) {
            return null;
        }

        $size = null;
        $orientation = null;
        $lengths = [];

        foreach ($parts as $part) {
            if ($size === null && isset(CPDF::$PAPER_SIZES[$part])) {
                $size = $part;
            } elseif ($orientation === null && ($part === "portrait" || $part === "landscape")) {
                $orientation = $part;
            } else {
                $lengths[] = $part;
            }
        }

        if ($size !== null && $lengths !== []) {
            return null;
        }

        if ($size !== null) {
            // Standard paper size
            [$l1, $l2] = \array_slice(CPDF::$PAPER_SIZES[$size], 2, 2);
        } elseif ($lengths === []) {
            // Orientation only, use default paper size
            $dims = $this->_stylesheet->get_dompdf()->getPaperSize();
            [$l1, $l2] = \array_slice($dims, 2, 2);
        } else {
            // Custom paper size
            $l1 = $this->compute_length_positive($lengths[0]);
            $l2 = isset($lengths[1]) ? $this->compute_length_positive($lengths[1]) : $l1;

            if ($l1 === null || $l2 === null) {
                return null;
            }
        }

        if (($orientation === "portrait" && $l1 > $l2)
            || ($orientation === "landscape" && $l2 > $l1)
        ) {
            return [$l2, $l1];
        }

        return [$l1, $l2];
    }

    /**
     * @param string $computed
     * @return array
     *
     * @link https://www.w3.org/TR/css-transforms-1/#transform-property
     */
    protected function _get_transform($computed)
    {
        //TODO: should be handled in setter (lengths set to absolute)

        $number = "\s*([^,\s]+)\s*";
        $tr_value = "\s*([^,\s]+)\s*";
        $angle = "\s*([^,\s]+(?:deg|rad)?)\s*";

        if (!preg_match_all("/[a-z]+\([^\)]+\)/i", $computed, $parts, PREG_SET_ORDER)) {
            return [];
        }

        $functions = [
            //"matrix"     => "\($number,$number,$number,$number,$number,$number\)",

            "translate" => "\($tr_value(?:,$tr_value)?\)",
            "translateX" => "\($tr_value\)",
            "translateY" => "\($tr_value\)",

            "scale" => "\($number(?:,$number)?\)",
            "scaleX" => "\($number\)",
            "scaleY" => "\($number\)",

            "rotate" => "\($angle\)",

            "skew" => "\($angle(?:,$angle)?\)",
            "skewX" => "\($angle\)",
            "skewY" => "\($angle\)",
        ];

        $transforms = [];

        foreach ($parts as $part) {
            $t = $part[0];

            foreach ($functions as $name => $pattern) {
                if (preg_match("/$name\s*$pattern/i", $t, $matches)) {
                    $values = \array_slice($matches, 1);

                    switch ($name) {
                        // <angle> units
                        case "rotate":
                        case "skew":
                        case "skewX":
                        case "skewY":

                            foreach ($values as $i => $value) {
                                if (strpos($value, "rad")) {
                                    $values[$i] = rad2deg((float) $value);
                                } else {
                                    $values[$i] = (float) $value;
                                }
                            }

                            switch ($name) {
                                case "skew":
                                    if (!isset($values[1])) {
                                        $values[1] = 0;
                                    }
                                    break;
                                case "skewX":
                                    $name = "skew";
                                    $values = [$values[0], 0];
                                    break;
                                case "skewY":
                                    $name = "skew";
                                    $values = [0, $values[0]];
                                    break;
                            }
                            break;

                        // <translation-value> units
                        case "translate":
                            $values[0] = $this->length_in_pt($values[0], (float)$this->length_in_pt($this->width));

                            if (isset($values[1])) {
                                $values[1] = $this->length_in_pt($values[1], (float)$this->length_in_pt($this->height));
                            } else {
                                $values[1] = 0;
                            }
                            break;

                        case "translateX":
                            $name = "translate";
                            $values = [$this->length_in_pt($values[0], (float)$this->length_in_pt($this->width)), 0];
                            break;

                        case "translateY":
                            $name = "translate";
                            $values = [0, $this->length_in_pt($values[0], (float)$this->length_in_pt($this->height))];
                            break;

                        // <number> units
                        case "scale":
                            if (!isset($values[1])) {
                                $values[1] = $values[0];
                            }
                            break;

                        case "scaleX":
                            $name = "scale";
                            $values = [$values[0], 1.0];
                            break;

                        case "scaleY":
                            $name = "scale";
                            $values = [1.0, $values[0]];
                            break;
                    }

                    $transforms[] = [
                        $name,
                        $values,
                    ];
                }
            }
        }

        return $transforms;
    }

    /**
     * @param string $computed
     * @return array
     *
     * @link https://www.w3.org/TR/css-transforms-1/#transform-origin-property
     */
    protected function _get_transform_origin($computed)
    {
        //TODO: should be handled in setter

        $values = preg_split("/\s+/", $computed);

        $values = array_map(function ($value) {
            if (\in_array($value, ["top", "left"], true)) {
                return 0;
            } elseif (\in_array($value, ["bottom", "right"], true)) {
                return "100%";
            } else {
                return $value;
            }
        }, $values);

        if (!isset($values[1])) {
            $values[1] = $values[0];
        }

        return $values;
    }

    /**
     * @param string $val
     * @return string|null
     */
    protected function parse_image_resolution(string $val): ?string
    {
        // If exif data could be get:
        // $re = '/^\s*(\d+|normal|auto)(?:\s*,\s*(\d+|normal))?\s*$/';

        $re = '/^\s*(\d+|normal|auto)\s*$/';

        if (!preg_match($re, $val, $matches)) {
            return null;
        }

        return $matches[1];
    }

    /**
     * auto | normal | dpi
     */
    protected function _compute_background_image_resolution(string $val)
    {
        return $this->parse_image_resolution($val);
    }

    /**
     * auto | normal | dpi
     */
    protected function _compute_image_resolution(string $val)
    {
        return $this->parse_image_resolution($val);
    }

    /**
     * @link https://www.w3.org/TR/css-break-3/#propdef-orphans
     */
    protected function _compute_orphans(string $val)
    {
        return $this->compute_integer($val);
    }

    /**
     * @link https://www.w3.org/TR/css-break-3/#propdef-widows
     */
    protected function _compute_widows(string $val)
    {
        return $this->compute_integer($val);
    }

    /**
     * @link https://www.w3.org/TR/css-color-4/#propdef-opacity
     */
    protected function _compute_opacity(string $val)
    {
        $number = self::CSS_NUMBER;
        $pattern = "/^($number)(%?)$/";

        if (!preg_match($pattern, $val, $matches)) {
            return null;
        }

        $v = (float) $matches[1];
        $percent = $matches[2] === "%";
        $opacity = $percent ? ($v / 100) : $v;

        return max(0.0, min($opacity, 1.0));
    }

    /**
     * @link https://www.w3.org/TR/CSS21//visuren.html#propdef-z-index
     */
    protected function _compute_z_index(string $val)
    {
        if ($val === "auto") {
            return $val;
        }

        return $this->compute_integer($val);
    }

    /**
     * @param FontMetrics $fontMetrics
     * @return $this
     */
    public function setFontMetrics(FontMetrics $fontMetrics)
    {
        $this->fontMetrics = $fontMetrics;
        return $this;
    }

    /**
     * @return FontMetrics
     */
    public function getFontMetrics()
    {
        return $this->fontMetrics;
    }

    /**
     * Generate a string representation of the Style
     *
     * This dumps the entire property array into a string via print_r.  Useful
     * for debugging.
     *
     * @return string
     */
    /*DEBUGCSS print: see below additional debugging util*/
    public function __toString(): string
    {
        $parent_font_size = $this->parent_style
            ? $this->parent_style->font_size
            : self::$default_font_size;

        return print_r(array_merge(["parent_font_size" => $parent_font_size],
            $this->_props), true);
    }

    /*DEBUGCSS*/
    public function debug_print(): void
    {
        $parent_font_size = $this->parent_style
            ? $this->parent_style->font_size
            : self::$default_font_size;

        print "    parent_font_size:" . $parent_font_size . ";\n";
        print "    Props [\n";
        print "      specified [\n";
        foreach ($this->_props as $prop => $val) {
            print '        ' . $prop . ': ' . preg_replace("/\r\n/", ' ', print_r($val, true));
            if (isset($this->_important_props[$prop])) {
                print ' !important';
            }
            print ";\n";
        }
        print "      ]\n";
        print "      computed [\n";
        foreach ($this->_props_computed as $prop => $val) {
            print '        ' . $prop . ': ' . preg_replace("/\r\n/", ' ', print_r($val, true));
            print ";\n";
        }
        print "      ]\n";
        print "      cached [\n";
        foreach ($this->_props_used as $prop => $val) {
            print '        ' . $prop . ': ' . preg_replace("/\r\n/", ' ', print_r($val, true));
            print ";\n";
        }
        print "      ]\n";
        print "    ]\n";
    }
}
<?php
/**
 * @package dompdf
 * @link    https://github.com/dompdf/dompdf
 * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
 */
namespace Dompdf\Css;

use DOMElement;
use DOMXPath;
use Dompdf\Dompdf;
use Dompdf\Helpers;
use Dompdf\Exception;
use Dompdf\FontMetrics;
use Dompdf\Frame\FrameTree;

/**
 * The master stylesheet class
 *
 * The Stylesheet class is responsible for parsing stylesheets and style
 * tags/attributes.  It also acts as a registry of the individual Style
 * objects generated by the current set of loaded CSS files and style
 * elements.
 *
 * @see Style
 * @package dompdf
 */
class Stylesheet
{
    /**
     * The location of the default built-in CSS file.
     */
    const DEFAULT_STYLESHEET = "/lib/res/html.css";

    /**
     * User agent stylesheet origin
     *
     * @var int
     */
    const ORIG_UA = 1;

    /**
     * User normal stylesheet origin
     *
     * @var int
     */
    const ORIG_USER = 2;

    /**
     * Author normal stylesheet origin
     *
     * @var int
     */
    const ORIG_AUTHOR = 3;

    /*
     * The highest possible specificity is 0x01000000 (and that is only for author
     * stylesheets, as it is for inline styles). Origin precedence can be achieved by
     * adding multiples of 0x10000000 to the actual specificity. Important
     * declarations are handled in Style; though technically they should be handled
     * here so that user important declarations can be made to take precedence over
     * user important declarations, this doesn't matter in practice as Dompdf does
     * not support user stylesheets, and user agent stylesheets can not include
     * important declarations.
     */
    private static $_stylesheet_origins = [
        self::ORIG_UA => 0x00000000, // user agent declarations
        self::ORIG_USER => 0x10000000, // user normal declarations
        self::ORIG_AUTHOR => 0x30000000, // author normal declarations
    ];

    /**
     * Non-CSS presentational hints (i.e. HTML 4 attributes) are handled as if added
     * to the beginning of an author stylesheet, i.e. anything in author stylesheets
     * should override them.
     */
    const SPEC_NON_CSS = 0x20000000;

    /**
     * Current dompdf instance
     *
     * @var Dompdf
     */
    private $_dompdf;

    /**
     * Array of currently defined styles
     *
     * @var Style[][]
     */
    private $_styles;

    /**
     * Base protocol of the document being parsed
     * Used to handle relative urls.
     *
     * @var string
     */
    private $_protocol = "";

    /**
     * Base hostname of the document being parsed
     * Used to handle relative urls.
     *
     * @var string
     */
    private $_base_host = "";

    /**
     * Base path of the document being parsed
     * Used to handle relative urls.
     *
     * @var string
     */
    private $_base_path = "";

    /**
     * The styles defined by @page rules
     *
     * @var array<Style>
     */
    private $_page_styles;

    /**
     * List of loaded files, used to prevent recursion
     *
     * @var array
     */
    private $_loaded_files;

    /**
     * Current stylesheet origin
     *
     * @var int
     */
    private $_current_origin = self::ORIG_UA;

    /**
     * Accepted CSS media types
     * List of types and parsing rules for future extensions:
     * http://www.w3.org/TR/REC-html40/types.html
     *   screen, tty, tv, projection, handheld, print, braille, aural, all
     * The following are non standard extensions for undocumented specific environments.
     *   static, visual, bitmap, paged, dompdf
     * Note, even though the generated pdf file is intended for print output,
     * the desired content might be different (e.g. screen or projection view of html file).
     * Therefore allow specification of content by dompdf setting Options::defaultMediaType.
     * If given, replace media "print" by Options::defaultMediaType.
     * (Previous version $ACCEPTED_MEDIA_TYPES = $ACCEPTED_GENERIC_MEDIA_TYPES + $ACCEPTED_DEFAULT_MEDIA_TYPE)
     */
    static $ACCEPTED_DEFAULT_MEDIA_TYPE = "print";
    static $ACCEPTED_GENERIC_MEDIA_TYPES = ["all", "static", "visual", "bitmap", "paged", "dompdf"];
    static $VALID_MEDIA_TYPES = ["all", "aural", "bitmap", "braille", "dompdf", "embossed", "handheld", "paged", "print", "projection", "screen", "speech", "static", "tty", "tv", "visual"];

    /**
     * @var FontMetrics
     */
    private $fontMetrics;

    /**
     * The class constructor.
     *
     * The base protocol, host & path are initialized to those of
     * the current script.
     */
    function __construct(Dompdf $dompdf)
    {
        $this->_dompdf = $dompdf;
        $this->setFontMetrics($dompdf->getFontMetrics());
        $this->_styles = [];
        $this->_loaded_files = [];
        $script = __FILE__;
        if (isset($_SERVER["SCRIPT_FILENAME"])) {
            $script = $_SERVER["SCRIPT_FILENAME"];
        }
        list($this->_protocol, $this->_base_host, $this->_base_path) = Helpers::explode_url($script);
        $this->_page_styles = ["base" => new Style($this)];
    }

    /**
     * Set the base protocol
     *
     * @param string $protocol
     */
    function set_protocol(string $protocol)
    {
        $this->_protocol = $protocol;
    }

    /**
     * Set the base host
     *
     * @param string $host
     */
    function set_host(string $host)
    {
        $this->_base_host = $host;
    }

    /**
     * Set the base path
     *
     * @param string $path
     */
    function set_base_path(string $path)
    {
        $this->_base_path = $path;
    }

    /**
     * Return the Dompdf object
     *
     * @return Dompdf
     */
    function get_dompdf()
    {
        return $this->_dompdf;
    }

    /**
     * Return the base protocol for this stylesheet
     *
     * @return string
     */
    function get_protocol()
    {
        return $this->_protocol;
    }

    /**
     * Return the base host for this stylesheet
     *
     * @return string
     */
    function get_host()
    {
        return $this->_base_host;
    }

    /**
     * Return the base path for this stylesheet
     *
     * @return string
     */
    function get_base_path()
    {
        return $this->_base_path;
    }

    /**
     * Return the array of page styles
     *
     * @return Style[]
     */
    function get_page_styles()
    {
        return $this->_page_styles;
    }

    /**
     * Create a new Style object associated with this stylesheet
     *
     * @return Style
     */
    function create_style(): Style
    {
        return new Style($this, $this->_current_origin);
    }

    /**
     * Add a new Style object to the stylesheet
     *
     * The style's origin is changed to the current origin of the stylesheet.
     *
     * @param string $key the Style's selector
     * @param Style $style the Style to be added
     */
    function add_style(string $key, Style $style): void
    {
        if (!isset($this->_styles[$key])) {
            $this->_styles[$key] = [];
        }

        $style->set_origin($this->_current_origin);
        $this->_styles[$key][] = $style;
    }

    /**
     * load and parse a CSS string
     *
     * @param string $css
     * @param int $origin
     */
    function load_css(&$css, $origin = self::ORIG_AUTHOR)
    {
        if ($origin) {
            $this->_current_origin = $origin;
        }
        $this->_parse_css($css);
    }

    /**
     * load and parse a CSS file
     *
     * @param string $file
     * @param int $origin
     */
    function load_css_file($file, $origin = self::ORIG_AUTHOR)
    {
        if ($origin) {
            $this->_current_origin = $origin;
        }

        // Prevent circular references
        if (isset($this->_loaded_files[$file])) {
            return;
        }

        $this->_loaded_files[$file] = true;

        if (strpos($file, "data:") === 0) {
            $parsed = Helpers::parse_data_uri($file);
            $css = $parsed["data"];
        } else {
            $options = $this->_dompdf->getOptions();

            $parsed_url = Helpers::explode_url($file);
            $protocol = $parsed_url["protocol"];

            if ($file !== $this->getDefaultStylesheet()) {
                $allowed_protocols = $options->getAllowedProtocols();
                if (!array_key_exists($protocol, $allowed_protocols)) {
                    Helpers::record_warnings(E_USER_WARNING, "Permission denied on $file. The communication protocol is not supported.", __FILE__, __LINE__);
                    return;
                }
                foreach ($allowed_protocols[$protocol]["rules"] as $rule) {
                    [$result, $message] = $rule($file);
                    if (!$result) {
                        Helpers::record_warnings(E_USER_WARNING, "Error loading $file: $message", __FILE__, __LINE__);
                        return;
                    }
                }
            }

            [$css, $http_response_header] = Helpers::getFileContent($file, $this->_dompdf->getHttpContext());

            $good_mime_type = true;

            // See http://the-stickman.com/web-development/php/getting-http-response-headers-when-using-file_get_contents/
            if (isset($http_response_header) && !$this->_dompdf->getQuirksmode()) {
                foreach ($http_response_header as $_header) {
                    if (preg_match("@Content-Type:\s*([\w/]+)@i", $_header, $matches) &&
                        ($matches[1] !== "text/css")
                    ) {
                        $good_mime_type = false;
                    }
                }
            }
            if (!$good_mime_type || $css === null) {
                Helpers::record_warnings(E_USER_WARNING, "Unable to load css file $file", __FILE__, __LINE__);
                return;
            }

            [$this->_protocol, $this->_base_host, $this->_base_path] = $parsed_url;
        }

        $this->_parse_css($css);
    }

    /**
     * @link https://www.w3.org/TR/CSS21/cascade.html#specificity
     *
     * @param string $selector
     * @param int    $origin
     *    - Stylesheet::ORIG_UA: user agent style sheet
     *    - Stylesheet::ORIG_USER: user style sheet
     *    - Stylesheet::ORIG_AUTHOR: author style sheet
     *
     * @return int
     */
    protected function specificity(string $selector, int $origin = self::ORIG_AUTHOR): int
    {
        $a = ($selector === "!attr") ? 1 : 0;

        $b = min(mb_substr_count($selector, "#"), 255);

        $c = min(mb_substr_count($selector, ".") +
            mb_substr_count($selector, "[") +
            mb_substr_count($selector, ":") -
            2 * mb_substr_count($selector, "::"), 255);

        $d = min(mb_substr_count($selector, " ") +
            mb_substr_count($selector, ">") +
            mb_substr_count($selector, "+") +
            mb_substr_count($selector, "~") -
            mb_substr_count($selector, "~=") +
            mb_substr_count($selector, "::"), 255);

        //If a normal element name is at the beginning of the string,
        //a leading whitespace might have been removed on whitespace collapsing and removal
        //therefore there might be one whitespace less as selected element names
        //this can lead to a too small specificity
        //see selectorToXpath

        if (!in_array($selector[0], [" ", ">", ".", "#", "+", "~", ":", "["], true) && $selector !== "*") {
            $d++;
        }

        if ($this->_dompdf->getOptions()->getDebugCss()) {
            /*DEBUGCSS*/
            print "<pre>\n";
            /*DEBUGCSS*/
            printf("specificity(): 0x%08x \"%s\"\n", self::$_stylesheet_origins[$origin] + (($a << 24) | ($b << 16) | ($c << 8) | ($d)), $selector);
            /*DEBUGCSS*/
            print "</pre>";
        }

        return self::$_stylesheet_origins[$origin] + (($a << 24) | ($b << 16) | ($c << 8) | ($d));
    }

    /**
     * Converts a CSS selector to an XPath query.
     *
     * @param string $selector
     * @param bool   $firstPass
     *
     * @return array|null
     */
    protected function selectorToXpath(string $selector, bool $firstPass = false): ?array
    {
        // Collapse white space and strip whitespace around delimiters
        //$search = array("/\\s+/", "/\\s+([.>#+:])\\s+/");
        //$replace = array(" ", "\\1");
        //$selector = preg_replace($search, $replace, trim($selector));

        // Initial query, always expanded to // below (non-absolute)
        $query = "/";

        // Will contain :before and :after
        $pseudo_elements = [];

        // Parse the selector
        //$s = preg_split("/([ :>.#+])/", $selector, -1, PREG_SPLIT_DELIM_CAPTURE);

        $delimiters = [" ", ">", ".", "#", "+", "~", ":", "[", "("];

        // Add an implicit space at the beginning of the selector if there is no
        // delimiter there already.
        if (!in_array($selector[0], $delimiters, true)) {
            $selector = " $selector";
        }

        $name = "*";
        $len = mb_strlen($selector);
        $i = 0;

        while ($i < $len) {

            $s = $selector[$i];
            $i++;

            // Eat characters up to the next delimiter
            $tok = "";
            $in_attr = false;
            $in_func = false;

            while ($i < $len) {
                $c = $selector[$i];
                $c_prev = $selector[$i - 1];

                if (!$in_func && !$in_attr && in_array($c, $delimiters, true) && !($c === $c_prev && $c === ":")) {
                    break;
                }

                if ($c_prev === "[") {
                    $in_attr = true;
                }
                if ($c_prev === "(") {
                    $in_func = true;
                }

                $tok .= $selector[$i++];

                if ($in_attr && $c === "]") {
                    $in_attr = false;
                    break;
                }
                if ($in_func && $c === ")") {
                    $in_func = false;
                    break;
                }
            }

            switch ($s) {

                case " ":
                case ">":
                    // All elements matching the next token that are descendants
                    // or children of the current token
                    // https://www.w3.org/TR/selectors-3/#descendant-combinators
                    // https://www.w3.org/TR/selectors-3/#child-combinators
                    $expr = $s === " " ? "descendant" : "child";

                    // Tag names are case-insensitive
                    $name = $tok === "" ? "*" : strtolower($tok);
                    $query .= "/$expr::$name";
                    break;

                case "+":
                    // Next-sibling combinator
                    // https://www.w3.org/TR/selectors-3/#sibling-combinators

                    // Tag names are case-insensitive
                    $name = $tok === "" ? "*" : strtolower($tok);
                    $query .= "/following-sibling::*[1]";

                    if ($name !== "*") {
                        $query .= "[name() = '$name']";
                    }
                    break;

                case "~":
                    // Subsequent-sibling combinator
                    // https://www.w3.org/TR/selectors-3/#sibling-combinators

                    // Tag names are case-insensitive
                    $name = $tok === "" ? "*" : strtolower($tok);
                    $query .= "/following-sibling::$name";
                    break;

                case "#":
                    // All elements matching the current token with id equal
                    // to the _next_ token
                    // https://www.w3.org/TR/selectors-3/#id-selectors
                    if ($query === "/") {
                        $query .= "/*";
                    }

                    $query .= "[@id=\"$tok\"]";
                    break;

                case ".":
                    // All elements matching the current token with a class
                    // equal to the _next_ token
                    // https://www.w3.org/TR/selectors-3/#class-html
                    if ($query === "/") {
                        $query .= "/*";
                    }

                    // Match multiple classes: $tok contains the current selected
                    // class.  Search for class attributes with class="$tok",
                    // class=".* $tok .*" and class=".* $tok"

                    // This doesn't work because libxml only supports XPath 1.0...
                    //$query .= "[matches(@$attr,\"^{$tok}\$|^{$tok}[ ]+|[ ]+{$tok}\$|[ ]+{$tok}[ ]+\")]";

                    $query .= "[contains(concat(' ', normalize-space(@class), ' '), concat(' ', '$tok', ' '))]";
                    break;

                case ":":
                    if ($query === "/") {
                        $query .= "/*";
                    }

                    $last = false;

                    // Pseudo-classes
                    switch ($tok) {

                        case "root":
                            $query .= "[not(parent::*)]";
                            break;

                        case "first-child":
                            $query .= "[not(preceding-sibling::*)]";
                            break;

                        case "last-child":
                            $query .= "[not(following-sibling::*)]";
                            break;

                        case "only-child":
                            $query .= "[not(preceding-sibling::*) and not(following-sibling::*)]";
                            break;

                        // https://www.w3.org/TR/selectors-3/#nth-child-pseudo
                        /** @noinspection PhpMissingBreakStatementInspection */
                        case "nth-last-child":
                            $last = true;
                        case "nth-child":
                            $p = $i + 1;
                            $nth = trim(mb_substr($selector, $p, strpos($selector, ")", $i) - $p));
                            $position = $last
                                ? "(count(following-sibling::*) + 1)"
                                : "(count(preceding-sibling::*) + 1)";

                            $condition = $this->selectorAnPlusB($nth, $position);
                            $query .= "[$condition]";
                            break;

                        // TODO: `*:first-of-type`, `*:nth-of-type` etc.
                        // (without fixed element name) are treated equivalent
                        // to their `:*-child` counterparts here. They might
                        // not be properly expressible in XPath 1.0
                        case "first-of-type":
                            $query .= "[not(preceding-sibling::$name)]";
                            break;

                        case "last-of-type":
                            $query .= "[not(following-sibling::$name)]";
                            break;

                        case "only-of-type":
                            $query .= "[not(preceding-sibling::$name) and not(following-sibling::$name)]";
                            break;

                        // https://www.w3.org/TR/selectors-3/#nth-of-type-pseudo
                        /** @noinspection PhpMissingBreakStatementInspection */
                        case "nth-last-of-type":
                            $last = true;
                        case "nth-of-type":
                            $p = $i + 1;
                            $nth = trim(mb_substr($selector, $p, strpos($selector, ")", $i) - $p));
                            $position = $last
                                ? "(count(following-sibling::$name) + 1)"
                                : "(count(preceding-sibling::$name) + 1)";

                            $condition = $this->selectorAnPlusB($nth, $position);
                            $query .= "[$condition]";
                            break;

                        // https://www.w3.org/TR/selectors-4/#empty-pseudo
                        case "empty":
                            $query .= "[not(*) and not(normalize-space())]";
                            break;

                        // TODO: bit of a hack attempt at matches support, currently only matches against elements
                        case "matches":
                            $p = $i + 1;
                            $matchList = trim(mb_substr($selector, $p, strpos($selector, ")", $i) - $p));

                            // Tag names are case-insensitive
                            $elements = array_map("trim", explode(",", strtolower($matchList)));
                            foreach ($elements as &$element) {
                                $element = "name() = '$element'";
                            }

                            $query .= "[" . implode(" or ", $elements) . "]";
                            break;

                        // https://www.w3.org/TR/selectors-3/#UIstates
                        case "disabled":
                        case "checked":
                            $query .= "[@$tok]";
                            break;

                        case "enabled":
                            $query .= "[not(@disabled)]";
                            break;

                        // https://www.w3.org/TR/selectors-3/#dynamic-pseudos
                        // https://www.w3.org/TR/selectors-4/#the-any-link-pseudo
                        case "link":
                        case "any-link":
                            $query .= "[@href]";
                            break;

                        // N/A
                        case "visited":
                        case "hover":
                        case "active":
                        case "focus":
                        case "focus-visible":
                        case "focus-within":
                            $query .= "[false()]";
                            break;

                        // https://www.w3.org/TR/selectors-3/#first-line
                        // https://www.w3.org/TR/selectors-3/#first-letter
                        case "first-line":
                        case ":first-line":
                        case "first-letter":
                        case ":first-letter":
                            // TODO
                            $el = ltrim($tok, ":");
                            $pseudo_elements[$el] = true;
                            break;

                        // https://www.w3.org/TR/selectors-3/#gen-content
                        case "before":
                        case ":before":
                        case "after":
                        case ":after":
                            $pos = ltrim($tok, ":");
                            $pseudo_elements[$pos] = true;
                            if (!$firstPass) {
                                $query .= "/*[@$pos]";
                            }
                            break;

                        // Invalid or unsupported pseudo-class or pseudo-element
                        default:
                            return null;
                    }

                    break;

                case "[":
                    // Attribute selectors.  All with an attribute matching the
                    // following token(s)
                    // https://www.w3.org/TR/selectors-3/#attribute-selectors
                    if ($query === "/") {
                        $query .= "/*";
                    }

                    $attr_delimiters = ["=", "]", "~", "|", "$", "^", "*"];
                    $tok_len = mb_strlen($tok);
                    $j = 0;

                    $attr = "";
                    $op = "";
                    $value = "";

                    while ($j < $tok_len) {
                        if (in_array($tok[$j], $attr_delimiters, true)) {
                            break;
                        }
                        $attr .= $tok[$j++];
                    }

                    if ($attr === "") {
                        // Selector invalid: Missing attribute name
                        return null;
                    }

                    if (!isset($tok[$j])) {
                        // Selector invalid: Missing ] or operator
                        return null;
                    }

                    switch ($tok[$j]) {

                        case "~":
                        case "|":
                        case "^":
                        case "$":
                        case "*":
                            $op .= $tok[$j++];

                            if (!isset($tok[$j]) || $tok[$j] !== "=") {
                                // Selector invalid: Incomplete attribute operator
                                return null;
                            }

                            $op .= $tok[$j];
                            break;

                        case "=":
                            $op = "=";
                            break;

                    }

                    // Read the attribute value, if required
                    if ($op !== "") {
                        $j++;
                        while ($j < $tok_len) {
                            if ($tok[$j] === "]") {
                                break;
                            }
                            $value .= $tok[$j++];
                        }
                    }

                    if (!isset($tok[$j])) {
                        // Selector invalid: Missing ]
                        return null;
                    }

                    $value = trim($value, "\"'");

                    switch ($op) {

                        case "":
                            $query .= "[@$attr]";
                            break;

                        case "=":
                            $query .= "[@$attr=\"$value\"]";
                            break;

                        case "~=":
                            // FIXME: this will break if $value contains quoted strings
                            // (e.g. [type~="a b c" "d e f"])
                            $query .= $value !== "" && !preg_match("/\s+/", $value)
                                ? "[contains(concat(' ', normalize-space(@$attr), ' '), concat(' ', \"$value\", ' '))]"
                                : "[false()]";
                            break;

                        case "|=":
                            $values = explode("-", $value);
                            $query .= "[";

                            foreach ($values as $val) {
                                $query .= "starts-with(@$attr, \"$val\") or ";
                            }

                            $query = rtrim($query, " or ") . "]";
                            break;

                        case "^=":
                            $query .= $value !== ""
                                ? "[starts-with(@$attr,\"$value\")]"
                                : "[false()]";
                            break;

                        case "$=":
                            $query .= $value !== ""
                                ? "[substring(@$attr, string-length(@$attr)-" . (strlen($value) - 1) . ")=\"$value\"]"
                                : "[false()]";
                            break;

                        case "*=":
                            $query .= $value !== ""
                                ? "[contains(@$attr,\"$value\")]"
                                : "[false()]";
                            break;
                    }

                    break;
            }
        }

        return ["query" => $query, "pseudo_elements" => $pseudo_elements];
    }

    /**
     * Parse an `nth-child` expression of the form `an+b`, `odd`, or `even`.
     *
     * @param string $expr
     * @param string $position
     *
     * @return string
     *
     * @link https://www.w3.org/TR/selectors-3/#nth-child-pseudo
     */
    protected function selectorAnPlusB(string $expr, string $position): string
    {
        // odd
        if ($expr === "odd") {
            return "($position mod 2) = 1";
        } // even
        elseif ($expr === "even") {
            return "($position mod 2) = 0";
        } // b
        elseif (preg_match("/^\d+$/", $expr)) {
            return "$position = $expr";
        }

        // an+b
        // https://github.com/tenderlove/nokogiri/blob/master/lib/nokogiri/css/xpath_visitor.rb
        $expr = preg_replace("/\s/", "", $expr);
        if (!preg_match("/^(?P<a>-?[0-9]*)?n(?P<b>[-+]?[0-9]+)?$/", $expr, $matches)) {
            return "false()";
        }

        $a = (isset($matches["a"]) && $matches["a"] !== "") ? ($matches["a"] !== "-" ? intval($matches["a"]) : -1) : 1;
        $b = (isset($matches["b"]) && $matches["b"] !== "") ? intval($matches["b"]) : 0;

        if ($b === 0) {
            return "($position mod $a) = 0";
        } else {
            $compare = ($a < 0) ? "<=" : ">=";
            $b2 = -$b;
            if ($b2 >= 0) {
                $b2 = "+$b2";
            }
            return "($position $compare $b) and ((($position $b2) mod " . abs($a) . ") = 0)";
        }
    }

    /**
     * applies all current styles to a particular document tree
     *
     * apply_styles() applies all currently loaded styles to the provided
     * {@link FrameTree}.  Aside from parsing CSS, this is the main purpose
     * of this class.
     *
     * @param FrameTree $tree
     */
    function apply_styles(FrameTree $tree)
    {
        // Use XPath to select nodes.  This would be easier if we could attach
        // Frame objects directly to DOMNodes using the setUserData() method, but
        // we can't do that just yet.  Instead, we set a _node attribute_ in
        // Frame->set_id() and use that as a handle on the Frame object via
        // FrameTree::$_registry.

        // We create a scratch array of styles indexed by frame id.  Once all
        // styles have been assigned, we order the cached styles by specificity
        // and create a final style object to assign to the frame.

        // FIXME: this is not particularly robust...

        $styles = [];
        $xp = new DOMXPath($tree->get_dom());
        $DEBUGCSS = $this->_dompdf->getOptions()->getDebugCss();

        // Add generated content
        foreach ($this->_styles as $selector => $selector_styles) {
            if (strpos($selector, ":before") === false && strpos($selector, ":after") === false) {
                continue;
            }

            $query = $this->selectorToXpath($selector, true);
            if ($query === null) {
                Helpers::record_warnings(E_USER_WARNING, "The CSS selector '$selector' is not valid", __FILE__, __LINE__);
                continue;
            }

            // Retrieve the nodes, limit to body for generated content
            // TODO: If we use a context node can we remove the leading dot?
            $nodes = @$xp->query('.' . $query["query"]);
            if ($nodes === false) {
                Helpers::record_warnings(E_USER_WARNING, "The CSS selector '$selector' is not valid", __FILE__, __LINE__);
                continue;
            }

            foreach ($selector_styles as $style) {
                foreach ($nodes as $node) {
                    // Only DOMElements get styles
                    if (!($node instanceof DOMElement)) {
                        continue;
                    }

                    foreach (array_keys($query["pseudo_elements"], true, true) as $pos) {
                        // Do not add a new pseudo element if another one already matched
                        if ($node->hasAttribute("dompdf_{$pos}_frame_id")) {
                            continue;
                        }

                        $content = $style->get_specified("content");

                        // Do not create non-displayed before/after pseudo elements
                        // https://www.w3.org/TR/CSS21/generate.html#content
                        // https://www.w3.org/TR/CSS21/generate.html#undisplayed-counters
                        if ($content === "normal" || $content === "none") {
                            continue;
                        }

                        if (($src = $this->resolve_url($content)) !== "none") {
                            $new_node = $node->ownerDocument->createElement("img_generated");
                            $new_node->setAttribute("src", $src);
                        } else {
                            $new_node = $node->ownerDocument->createElement("dompdf_generated");
                        }

                        $new_node->setAttribute($pos, $pos);
                        $new_frame_id = $tree->insert_node($node, $new_node, $pos);
                        $node->setAttribute("dompdf_{$pos}_frame_id", $new_frame_id);
                    }
                }
            }
        }

        // Apply all styles in stylesheet
        foreach ($this->_styles as $selector => $selector_styles) {
            $query = $this->selectorToXpath($selector);
            if ($query === null) {
                Helpers::record_warnings(E_USER_WARNING, "The CSS selector '$selector' is not valid", __FILE__, __LINE__);
                continue;
            }

            // Retrieve the nodes
            $nodes = @$xp->query($query["query"]);
            if ($nodes === false) {
                Helpers::record_warnings(E_USER_WARNING, "The CSS selector '$selector' is not valid", __FILE__, __LINE__);
                continue;
            }

            foreach ($selector_styles as $style) {
                $spec = $this->specificity($selector, $style->get_origin());

                foreach ($nodes as $node) {
                    // Only DOMElements get styles
                    if (!($node instanceof DOMElement)) {
                        continue;
                    }

                    $id = $node->getAttribute("frame_id");

                    // Assign the current style to the scratch array
                    $styles[$id][$spec][] = $style;
                }
            }
        }

        // Set the page width, height, and orientation based on the canvas paper size
        $canvas = $this->_dompdf->getCanvas();
        $paper_width = $canvas->get_width();
        $paper_height = $canvas->get_height();
        $paper_orientation = ($paper_width > $paper_height ? "landscape" : "portrait");

        if ($this->_page_styles["base"] && is_array($this->_page_styles["base"]->size)) {
            $paper_width = $this->_page_styles['base']->size[0];
            $paper_height = $this->_page_styles['base']->size[1];
            $paper_orientation = ($paper_width > $paper_height ? "landscape" : "portrait");
        }

        // Now create the styles and assign them to the appropriate frames. (We
        // iterate over the tree using an implicit FrameTree iterator.)
        $root_flg = false;
        foreach ($tree as $frame) {
            // Helpers::pre_r($frame->get_node()->nodeName . ":");
            if (!$root_flg && $this->_page_styles["base"]) {
                $style = $this->_page_styles["base"];
            } else {
                $style = $this->create_style();
            }

            // Find nearest DOMElement parent
            $p = $frame;
            while ($p = $p->get_parent()) {
                if ($p->get_node()->nodeType === XML_ELEMENT_NODE) {
                    break;
                }
            }

            // Styles can only be applied directly to DOMElements; anonymous
            // frames inherit from their parent
            if ($frame->get_node()->nodeType !== XML_ELEMENT_NODE) {
                $style->inherit($p ? $p->get_style() : null);
                $frame->set_style($style);
                continue;
            }

            $id = $frame->get_id();

            // Handle HTML 4.0 attributes
            AttributeTranslator::translate_attributes($frame);
            if (($str = $frame->get_node()->getAttribute(AttributeTranslator::$_style_attr)) !== "") {
                $styles[$id][self::SPEC_NON_CSS][] = $this->_parse_properties($str);
            }

            // Locate any additional style attributes
            if (($str = $frame->get_node()->getAttribute("style")) !== "") {
                // Destroy CSS comments
                $str = preg_replace("'/\*.*?\*/'si", "", $str);

                $spec = $this->specificity("!attr", self::ORIG_AUTHOR);
                $styles[$id][$spec][] = $this->_parse_properties($str);
            }

            // Grab the applicable styles
            if (isset($styles[$id])) {

                /** @var array[][] $applied_styles */
                $applied_styles = $styles[$id];

                // Sort by specificity
                ksort($applied_styles);

                if ($DEBUGCSS) {
                    $debug_nodename = $frame->get_node()->nodeName;
                    print "<pre>\n$debug_nodename [\n";
                    foreach ($applied_styles as $spec => $arr) {
                        printf("  specificity 0x%08x\n", $spec);
                        /** @var Style $s */
                        foreach ($arr as $s) {
                            print "  [\n";
                            $s->debug_print();
                            print "  ]\n";
                        }
                    }
                }

                // Merge the new styles with the inherited styles
                $acceptedmedia = self::$ACCEPTED_GENERIC_MEDIA_TYPES;
                $acceptedmedia[] = $this->_dompdf->getOptions()->getDefaultMediaType();
                foreach ($applied_styles as $arr) {
                    /** @var Style $s */
                    foreach ($arr as $s) {
                        $media_queries = $s->get_media_queries();
                        foreach ($media_queries as $media_query) {
                            list($media_query_feature, $media_query_value) = $media_query;
                            // if any of the Style's media queries fail then do not apply the style
                            //TODO: When the media query logic is fully developed we should not apply the Style when any of the media queries fail or are bad, per https://www.w3.org/TR/css3-mediaqueries/#error-handling
                            if (in_array($media_query_feature, self::$VALID_MEDIA_TYPES)) {
                                if ((strlen($media_query_feature) === 0 && !in_array($media_query, $acceptedmedia)) || (in_array($media_query, $acceptedmedia) && $media_query_value == "not")) {
                                    continue (3);
                                }
                            } else {
                                switch ($media_query_feature) {
                                    case "height":
                                        if ($paper_height !== (float)$style->length_in_pt($media_query_value)) {
                                            continue (3);
                                        }
                                        break;
                                    case "min-height":
                                        if ($paper_height < (float)$style->length_in_pt($media_query_value)) {
                                            continue (3);
                                        }
                                        break;
                                    case "max-height":
                                        if ($paper_height > (float)$style->length_in_pt($media_query_value)) {
                                            continue (3);
                                        }
                                        break;
                                    case "width":
                                        if ($paper_width !== (float)$style->length_in_pt($media_query_value)) {
                                            continue (3);
                                        }
                                        break;
                                    case "min-width":
                                        //if (min($paper_width, $media_query_width) === $paper_width) {
                                        if ($paper_width < (float)$style->length_in_pt($media_query_value)) {
                                            continue (3);
                                        }
                                        break;
                                    case "max-width":
                                        //if (max($paper_width, $media_query_width) === $paper_width) {
                                        if ($paper_width > (float)$style->length_in_pt($media_query_value)) {
                                            continue (3);
                                        }
                                        break;
                                    case "orientation":
                                        if ($paper_orientation !== $media_query_value) {
                                            continue (3);
                                        }
                                        break;
                                    default:
                                        Helpers::record_warnings(E_USER_WARNING, "Unknown media query: $media_query_feature", __FILE__, __LINE__);
                                        break;
                                }
                            }
                        }

                        $style->merge($s);
                    }
                }
            }

            // Handle inheritance
            if ($p && $DEBUGCSS) {
                print "  inherit [\n";
                $p->get_style()->debug_print();
                print "  ]\n";
            }

            $style->inherit($p ? $p->get_style() : null);

            if ($DEBUGCSS) {
                print "  DomElementStyle [\n";
                $style->debug_print();
                print "  ]\n";
                print "]\n</pre>";
            }

            $style->clear_important();
            $frame->set_style($style);

            if (!$root_flg && $this->_page_styles["base"]) {
                $root_flg = true;

                // set the page width, height, and orientation based on the parsed page style
                if ($style->size !== "auto") {
                    list($paper_width, $paper_height) = $style->size;
                }
                $paper_width = $paper_width - (float)$style->length_in_pt($style->margin_left) - (float)$style->length_in_pt($style->margin_right);
                $paper_height = $paper_height - (float)$style->length_in_pt($style->margin_top) - (float)$style->length_in_pt($style->margin_bottom);
                $paper_orientation = ($paper_width > $paper_height ? "landscape" : "portrait");
            }
        }

        // We're done!  Clean out the registry of all styles since we
        // won't be needing this later.
        foreach (array_keys($this->_styles) as $key) {
            $this->_styles[$key] = null;
            unset($this->_styles[$key]);
        }
    }

    /**
     * parse a CSS string using a regex parser
     * Called by {@link Stylesheet::parse_css()}
     *
     * @param string $str
     *
     * @throws Exception
     */
    private function _parse_css($str)
    {
        $str = trim($str);

        // Destroy comments and remove HTML comments
        $css = preg_replace([
            "'/\*.*?\*/'si",
            "/^<!--/",
            "/-->$/"
        ], "", $str);

        // FIXME: handle '{' within strings, e.g. [attr="string {}"]

        // Something more legible:
        $re =
            "/\s*                                   # Skip leading whitespace                             \n" .
            "( @([^\s{]+)\s*([^{;]*) (?:;|({)) )?   # Match @rules followed by ';' or '{'                 \n" .
            "(?(1)                                  # Only parse sub-sections if we're in an @rule...     \n" .
            "  (?(4)                                # ...and if there was a leading '{'                   \n" .
            "    \s*( (?:(?>[^{}]+) ({)?            # Parse rulesets and individual @page rules           \n" .
            "            (?(6) (?>[^}]*) }) \s*)+?                                                        \n" .
            "       )                                                                                     \n" .
            "   })                                  # Balancing '}'                                       \n" .
            "|                                      # Branch to match regular rules (not preceded by '@') \n" .
            "([^{]*{[^}]*}))                        # Parse normal rulesets                               \n" .
            "/xs";

        if (preg_match_all($re, $css, $matches, PREG_SET_ORDER) === false) {
            // An error occurred
            throw new Exception("Error parsing css file: preg_match_all() failed.");
        }

        // After matching, the array indices are set as follows:
        //
        // [0] => complete text of match
        // [1] => contains '@import ...;' or '@media {' if applicable
        // [2] => text following @ for cases where [1] is set
        // [3] => media types or full text following '@import ...;'
        // [4] => '{', if present
        // [5] => rulesets within media rules
        // [6] => '{', within media rules
        // [7] => individual rules, outside of media rules
        //

        $media_query_regex = "/(?:((only|not)?\s*(" . implode("|", self::$VALID_MEDIA_TYPES) . "))|(\s*\(\s*((?:(min|max)-)?([\w\-]+))\s*(?:\:\s*(.*?)\s*)?\)))/isx";

        //Helpers::pre_r($matches);
        foreach ($matches as $match) {
            $match[2] = trim($match[2]);

            if ($match[2] !== "") {
                // Handle @rules
                switch ($match[2]) {

                    case "import":
                        $this->_parse_import($match[3]);
                        break;

                    case "media":
                        $acceptedmedia = self::$ACCEPTED_GENERIC_MEDIA_TYPES;
                        $acceptedmedia[] = $this->_dompdf->getOptions()->getDefaultMediaType();

                        $media_queries = preg_split("/\s*,\s*/", mb_strtolower(trim($match[3])));
                        foreach ($media_queries as $media_query) {
                            if (in_array($media_query, $acceptedmedia)) {
                                //if we have a media type match go ahead and parse the stylesheet
                                $this->_parse_sections($match[5]);
                                break;
                            } elseif (!in_array($media_query, self::$VALID_MEDIA_TYPES)) {
                                // otherwise conditionally parse the stylesheet assuming there are parseable media queries
                                if (preg_match_all($media_query_regex, $media_query, $media_query_matches, PREG_SET_ORDER) !== false) {
                                    $mq = [];
                                    foreach ($media_query_matches as $media_query_match) {
                                        if (empty($media_query_match[1]) === false) {
                                            $media_query_feature = strtolower($media_query_match[3]);
                                            $media_query_value = strtolower($media_query_match[2]);
                                            $mq[] = [$media_query_feature, $media_query_value];
                                        } elseif (empty($media_query_match[4]) === false) {
                                            $media_query_feature = strtolower($media_query_match[5]);
                                            $media_query_value = (array_key_exists(8, $media_query_match) ? strtolower($media_query_match[8]) : null);
                                            $mq[] = [$media_query_feature, $media_query_value];
                                        }
                                    }
                                    $this->_parse_sections($match[5], $mq);
                                    break;
                                }
                            }
                        }
                        break;

                    case "page":
                        //This handles @page to be applied to page oriented media
                        //Note: This has a reduced syntax:
                        //@page { margin:1cm; color:blue; }
                        //Not a sequence of styles like a full.css, but only the properties
                        //of a single style, which is applied to the very first "root" frame before
                        //processing other styles of the frame.
                        //Working properties:
                        // margin (for margin around edge of paper)
                        // font-family (default font of pages)
                        // color (default text color of pages)
                        //Non working properties:
                        // border
                        // padding
                        // background-color
                        //Todo:Reason is unknown
                        //Other properties (like further font or border attributes) not tested.
                        //If a border or background color around each paper sheet is desired,
                        //assign it to the <body> tag, possibly only for the css of the correct media type.

                        // If the page has a name, skip the style.
                        $page_selector = trim($match[3]);

                        $key = null;
                        switch ($page_selector) {
                            case "":
                                $key = "base";
                                break;

                            case ":left":
                            case ":right":
                            case ":odd":
                            case ":even":
                            /** @noinspection PhpMissingBreakStatementInspection */
                            case ":first":
                                $key = $page_selector;
                                break;

                            default:
                                break 2;
                        }

                        // Store the style for later...
                        if (empty($this->_page_styles[$key])) {
                            $this->_page_styles[$key] = $this->_parse_properties($match[5]);
                        } else {
                            $this->_page_styles[$key]->merge($this->_parse_properties($match[5]));
                        }
                        break;

                    case "font-face":
                        $this->_parse_font_face($match[5]);
                        break;

                    default:
                        // ignore everything else
                        break;
                }

                continue;
            }

            if ($match[7] !== "") {
                $this->_parse_sections($match[7]);
            }
        }
    }

    /**
     * Resolve the given `url()` declaration to an absolute URL.
     *
     * @param string|null $val The declaration to resolve in the context of the stylesheet.
     * @return string The resolved URL, or `none`, if the value is `none`,
     *         invalid, or points to a non-existent local file.
     */
    public function resolve_url($val): string
    {
        $DEBUGCSS = $this->_dompdf->getOptions()->getDebugCss();
        $parsed_url = "none";

        if (empty($val) || $val === "none") {
            $path = "none";
        } elseif (mb_strpos($val, "url") === false) {
            $path = "none"; //Don't resolve no image -> otherwise would prefix path and no longer recognize as none
        } else {
            $val = preg_replace("/url\(\s*['\"]?([^'\")]+)['\"]?\s*\)/", "\\1", trim($val));

            // Resolve the url now in the context of the current stylesheet
            $path = Helpers::build_url($this->_protocol,
                $this->_base_host,
                $this->_base_path,
                $val);
            if ($path === null) {
                $path = "none";
            }
        }
        if ($DEBUGCSS) {
            $parsed_url = Helpers::explode_url($path);
            print "<pre>[_image\n";
            print_r($parsed_url);
            print $this->_protocol . "\n" . $this->_base_path . "\n" . $path . "\n";
            print "_image]</pre>";
        }
        return $path;
    }

    /**
     * parse @import{} sections
     *
     * @param string $url the url of the imported CSS file
     */
    private function _parse_import($url)
    {
        $arr = preg_split("/[\s\n,]/", $url, -1, PREG_SPLIT_NO_EMPTY);
        $url = array_shift($arr);
        $accept = false;

        if (count($arr) > 0) {
            $acceptedmedia = self::$ACCEPTED_GENERIC_MEDIA_TYPES;
            $acceptedmedia[] = $this->_dompdf->getOptions()->getDefaultMediaType();

            // @import url media_type [media_type...]
            foreach ($arr as $type) {
                if (in_array(mb_strtolower(trim($type)), $acceptedmedia)) {
                    $accept = true;
                    break;
                }
            }

        } else {
            // unconditional import
            $accept = true;
        }

        if ($accept) {
            // Store our current base url properties in case the new url is elsewhere
            $protocol = $this->_protocol;
            $host = $this->_base_host;
            $path = $this->_base_path;

            // $url = str_replace(array('"',"url", "(", ")"), "", $url);
            // If the protocol is php, assume that we will import using file://
            // $url = Helpers::build_url($protocol === "php://" ? "file://" : $protocol, $host, $path, $url);
            // Above does not work for subfolders and absolute urls.
            // Todo: As above, do we need to replace php or file to an empty protocol for local files?

            if (($url = $this->resolve_url($url)) !== "none") {
                $this->load_css_file($url);
            }

            // Restore the current base url
            $this->_protocol = $protocol;
            $this->_base_host = $host;
            $this->_base_path = $path;
        }
    }

    /**
     * parse @font-face{} sections
     * http://www.w3.org/TR/css3-fonts/#the-font-face-rule
     *
     * @param string $str CSS @font-face rules
     */
    private function _parse_font_face($str)
    {
        $descriptors = $this->_parse_properties($str);

        preg_match_all("/(url|local)\s*\(\s*[\"\']?([^\"\'\)]+)[\"\']?\s*\)\s*(format\s*\(\s*[\"\']?([^\"\'\)]+)[\"\']?\s*\))?/i", $descriptors->src, $src);

        $valid_sources = [];
        foreach ($src[0] as $i => $value) {
            $source = [
                "local" => strtolower($src[1][$i]) === "local",
                "uri" => $src[2][$i],
                "format" => strtolower($src[4][$i]),
                "path" => Helpers::build_url($this->_protocol, $this->_base_host, $this->_base_path, $src[2][$i]),
            ];

            if (!$source["local"] && in_array($source["format"], ["", "truetype"]) && $source["path"] !== null) {
                $valid_sources[] = $source;
            }
        }

        // No valid sources
        if (empty($valid_sources)) {
            return;
        }

        $style = [
            "family" => $descriptors->get_font_family_raw(),
            "weight" => $descriptors->font_weight,
            "style" => $descriptors->font_style,
        ];

        $this->getFontMetrics()->registerFont($style, $valid_sources[0]["path"], $this->_dompdf->getHttpContext());
    }

    /**
     * parse regular CSS blocks
     *
     * _parse_properties() creates a new Style object based on the provided
     * CSS rules.
     *
     * @param string $str CSS rules
     * @return Style
     */
    private function _parse_properties($str)
    {
        $properties = preg_split("/;(?=(?:[^\(]*\([^\)]*\))*(?![^\)]*\)))/", $str);
        $DEBUGCSS = $this->_dompdf->getOptions()->getDebugCss();

        if ($DEBUGCSS) {
            print '[_parse_properties';
        }

        // Create the style
        $style = new Style($this, Stylesheet::ORIG_AUTHOR);

        foreach ($properties as $prop) {
            // If the $prop contains an url, the regex may be wrong
            // @todo: fix the regex so that it works every time
            /*if (strpos($prop, "url(") === false) {
              if (preg_match("/([a-z-]+)\s*:\s*[^:]+$/i", $prop, $m))
                $prop = $m[0];
            }*/

            //A css property can have " ! important" appended (whitespace optional)
            //strip this off to decode core of the property correctly.

            /* Instead of short code, prefer the typical case with fast code
          $important = preg_match("/(.*?)!\s*important/",$prop,$match);
            if ( $important ) {
              $prop = $match[1];
            }
            $prop = trim($prop);
            */
            if ($DEBUGCSS) print '(';

            $important = false;
            $prop = trim($prop);

            if (substr($prop, -9) === 'important') {
                $prop_tmp = rtrim(substr($prop, 0, -9));

                if (substr($prop_tmp, -1) === '!') {
                    $prop = rtrim(substr($prop_tmp, 0, -1));
                    $important = true;
                }
            }

            if ($prop === "") {
                if ($DEBUGCSS) print 'empty)';
                continue;
            }

            $i = mb_strpos($prop, ":");
            if ($i === false) {
                if ($DEBUGCSS) print 'novalue' . $prop . ')';
                continue;
            }

            $prop_name = rtrim(mb_strtolower(mb_substr($prop, 0, $i)));
            $value = ltrim(mb_substr($prop, $i + 1));

            if ($DEBUGCSS) print $prop_name . ':=' . $value . ($important ? '!IMPORTANT' : '') . ')';

            $style->set_prop($prop_name, $value, $important, false);
        }
        if ($DEBUGCSS) print '_parse_properties]';

        return $style;
    }

    /**
     * parse selector + rulesets
     *
     * @param string $str CSS selectors and rulesets
     * @param array $media_queries
     */
    private function _parse_sections($str, $media_queries = [])
    {
        // Pre-process selectors: collapse all whitespace and strip whitespace
        // around '>', '.', ':', '+', '~', '#'
        $patterns = ["/\s+/", "/\s+([>.:+~#])\s+/"];
        $replacements = [" ", "\\1"];
        $DEBUGCSS = $this->_dompdf->getOptions()->getDebugCss();

        $sections = explode("}", $str);
        if ($DEBUGCSS) print '[_parse_sections';
        foreach ($sections as $sect) {
            $i = mb_strpos($sect, "{");
            if ($i === false) { continue; }

            if ($DEBUGCSS) print '[section';

            $selector_str = preg_replace($patterns, $replacements, mb_substr($sect, 0, $i));
            $selectors = preg_split("/,(?![^\(]*\))/", $selector_str, 0, PREG_SPLIT_NO_EMPTY);
            $style = $this->_parse_properties(trim(mb_substr($sect, $i + 1)));

            // Assign it to the selected elements
            foreach ($selectors as $selector) {
                $selector = trim($selector);

                if ($selector === "") {
                    if ($DEBUGCSS) print '#empty#';
                    continue;
                }
                if ($DEBUGCSS) print '#' . $selector . '#';
                //if ($DEBUGCSS) { if (strpos($selector,'p') !== false) print '!!!p!!!#'; }

                //FIXME: tag the selector with a hash of the media query to separate it from non-conditional styles (?), xpath comments are probably not what we want to do here
                if (count($media_queries) > 0) {
                    $style->set_media_queries($media_queries);
                }
                $this->add_style($selector, $style);
            }

            if ($DEBUGCSS) {
                print 'section]';
            }
        }

        if ($DEBUGCSS) {
            print "_parse_sections]\n";
        }
    }

    /**
     * @return string
     */
    public function getDefaultStylesheet()
    {
        $options = $this->_dompdf->getOptions();
        $rootDir = realpath($options->getRootDir());
        return Helpers::build_url("file://", "", $rootDir, $rootDir . self::DEFAULT_STYLESHEET);
    }

    /**
     * @param FontMetrics $fontMetrics
     * @return $this
     */
    public function setFontMetrics(FontMetrics $fontMetrics)
    {
        $this->fontMetrics = $fontMetrics;
        return $this;
    }

    /**
     * @return FontMetrics
     */
    public function getFontMetrics()
    {
        return $this->fontMetrics;
    }

    /**
     * dumps the entire stylesheet as a string
     *
     * Generates a string of each selector and associated style in the
     * Stylesheet.  Useful for debugging.
     *
     * @return string
     */
    function __toString()
    {
        $str = "";
        foreach ($this->_styles as $selector => $selector_styles) {
            foreach ($selector_styles as $style) {
                $str .= "$selector => " . $style->__toString() . "\n";
            }
        }

        return $str;
    }
}
<?php
/**
 * @package dompdf
 * @link    https://github.com/dompdf/dompdf
 * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
 */
namespace Dompdf;

use DOMDocument;
use DOMNode;
use Dompdf\Adapter\CPDF;
use DOMXPath;
use Dompdf\Frame\Factory;
use Dompdf\Frame\FrameTree;
use Dompdf\Image\Cache;
use Dompdf\Css\Stylesheet;
use Dompdf\Helpers;
use Masterminds\HTML5;

/**
 * Dompdf - PHP5 HTML to PDF renderer
 *
 * Dompdf loads HTML and does its best to render it as a PDF.  It gets its
 * name from the new DomDocument PHP5 extension.  Source HTML is first
 * parsed by a DomDocument object.  Dompdf takes the resulting DOM tree and
 * attaches a {@link Frame} object to each node.  {@link Frame} objects store
 * positioning and layout information and each has a reference to a {@link
 * Style} object.
 *
 * Style information is loaded and parsed (see {@link Stylesheet}) and is
 * applied to the frames in the tree by using XPath.  CSS selectors are
 * converted into XPath queries, and the computed {@link Style} objects are
 * applied to the {@link Frame}s.
 *
 * {@link Frame}s are then decorated (in the design pattern sense of the
 * word) based on their CSS display property ({@link
 * http://www.w3.org/TR/CSS21/visuren.html#propdef-display}).
 * Frame_Decorators augment the basic {@link Frame} class by adding
 * additional properties and methods specific to the particular type of
 * {@link Frame}.  For example, in the CSS layout model, block frames
 * (display: block;) contain line boxes that are usually filled with text or
 * other inline frames.  The Block therefore adds a $lines
 * property as well as methods to add {@link Frame}s to lines and to add
 * additional lines.  {@link Frame}s also are attached to specific
 * AbstractPositioner and {@link AbstractFrameReflower} objects that contain the
 * positioining and layout algorithm for a specific type of frame,
 * respectively.  This is an application of the Strategy pattern.
 *
 * Layout, or reflow, proceeds recursively (post-order) starting at the root
 * of the document.  Space constraints (containing block width & height) are
 * pushed down, and resolved positions and sizes bubble up.  Thus, every
 * {@link Frame} in the document tree is traversed once (except for tables
 * which use a two-pass layout algorithm).  If you are interested in the
 * details, see the reflow() method of the Reflower classes.
 *
 * Rendering is relatively straightforward once layout is complete. {@link
 * Frame}s are rendered using an adapted {@link Cpdf} class, originally
 * written by Wayne Munro, http://www.ros.co.nz/pdf/.  (Some performance
 * related changes have been made to the original {@link Cpdf} class, and
 * the {@link Dompdf\Adapter\CPDF} class provides a simple, stateless interface to
 * PDF generation.)  PDFLib support has now also been added, via the {@link
 * Dompdf\Adapter\PDFLib}.
 *
 *
 * @package dompdf
 */
class Dompdf
{
    /**
     * Version string for dompdf
     *
     * @var string
     */
    private $version = 'dompdf';

    /**
     * DomDocument representing the HTML document
     *
     * @var DOMDocument
     */
    private $dom;

    /**
     * FrameTree derived from the DOM tree
     *
     * @var FrameTree
     */
    private $tree;

    /**
     * Stylesheet for the document
     *
     * @var Stylesheet
     */
    private $css;

    /**
     * Actual PDF renderer
     *
     * @var Canvas
     */
    private $canvas;

    /**
     * Desired paper size ('letter', 'legal', 'A4', etc.)
     *
     * @var string|float[]
     */
    private $paperSize;

    /**
     * Paper orientation ('portrait' or 'landscape')
     *
     * @var string
     */
    private $paperOrientation = "portrait";

    /**
     * Callbacks on new page and new element
     *
     * @var array
     */
    private $callbacks = [];

    /**
     * Experimental caching capability
     *
     * @var string
     */
    private $cacheId;

    /**
     * Base hostname
     *
     * Used for relative paths/urls
     * @var string
     */
    private $baseHost = "";

    /**
     * Absolute base path
     *
     * Used for relative paths/urls
     * @var string
     */
    private $basePath = "";

    /**
     * Protocol used to request file (file://, http://, etc)
     *
     * @var string
     */
    private $protocol = "";

    /**
     * The system's locale
     *
     * @var string
     */
    private $systemLocale = null;

    /**
     * The system's mbstring internal encoding
     *
     * @var string
     */
    private $mbstringEncoding = null;

    /**
     * The system's PCRE JIT configuration
     *
     * @var string
     */
    private $pcreJit = null;

    /**
     * The default view of the PDF in the viewer
     *
     * @var string
     */
    private $defaultView = "Fit";

    /**
     * The default view options of the PDF in the viewer
     *
     * @var array
     */
    private $defaultViewOptions = [];

    /**
     * Tells whether the DOM document is in quirksmode (experimental)
     *
     * @var bool
     */
    private $quirksmode = false;

    /**
    * Local file extension whitelist
    *
    * File extensions supported by dompdf for local files.
    *
    * @var array
    */
    private $allowedLocalFileExtensions = ["htm", "html"];

    /**
     * @var array
     */
    private $messages = [];

    /**
     * @var Options
     */
    private $options;

    /**
     * @var FontMetrics
     */
    private $fontMetrics;

    /**
     * The list of built-in fonts
     *
     * @var array
     * @deprecated
     */
    public static $native_fonts = [
        "courier", "courier-bold", "courier-oblique", "courier-boldoblique",
        "helvetica", "helvetica-bold", "helvetica-oblique", "helvetica-boldoblique",
        "times-roman", "times-bold", "times-italic", "times-bolditalic",
        "symbol", "zapfdinbats"
    ];

    /**
     * The list of built-in fonts
     *
     * @var array
     */
    public static $nativeFonts = [
        "courier", "courier-bold", "courier-oblique", "courier-boldoblique",
        "helvetica", "helvetica-bold", "helvetica-oblique", "helvetica-boldoblique",
        "times-roman", "times-bold", "times-italic", "times-bolditalic",
        "symbol", "zapfdinbats"
    ];

    /**
     * Class constructor
     *
     * @param Options|array|null $options
     */
    public function __construct($options = null)
    {
        if (isset($options) && $options instanceof Options) {
            $this->setOptions($options);
        } elseif (is_array($options)) {
            $this->setOptions(new Options($options));
        } else {
            $this->setOptions(new Options());
        }

        $versionFile = realpath(__DIR__ . '/../VERSION');
        if (($version = file_get_contents($versionFile)) !== false) {
            $version = trim($version);
            if ($version !== '$Format:<%h>$') {
                $this->version = sprintf('dompdf %s', $version);
            }
        }

        $this->setPhpConfig();

        $this->paperSize = $this->options->getDefaultPaperSize();
        $this->paperOrientation = $this->options->getDefaultPaperOrientation();

        $this->canvas = CanvasFactory::get_instance($this, $this->paperSize, $this->paperOrientation);
        $this->fontMetrics = new FontMetrics($this->canvas, $this->options);
        $this->css = new Stylesheet($this);

        $this->restorePhpConfig();
    }

    /**
     * Save the system's existing locale, PCRE JIT, and MBString encoding
     * configuration and configure the system for Dompdf processing
     */
    private function setPhpConfig()
    {
        if (sprintf('%.1f', 1.0) !== '1.0') {
            $this->systemLocale = setlocale(LC_NUMERIC, "0");
            setlocale(LC_NUMERIC, "C");
        }

        $this->pcreJit = @ini_get('pcre.jit');
        @ini_set('pcre.jit', '0');

        $this->mbstringEncoding = mb_internal_encoding();
        mb_internal_encoding('UTF-8');
    }

    /**
     * Restore the system's locale configuration
     */
    private function restorePhpConfig()
    {
        if ($this->systemLocale !== null) {
            setlocale(LC_NUMERIC, $this->systemLocale);
            $this->systemLocale = null;
        }

        if ($this->pcreJit !== null) {
            @ini_set('pcre.jit', $this->pcreJit);
            $this->pcreJit = null;
        }

        if ($this->mbstringEncoding !== null) {
            mb_internal_encoding($this->mbstringEncoding);
            $this->mbstringEncoding = null;
        }
    }

    /**
     * @param $file
     * @deprecated
     */
    public function load_html_file($file)
    {
        $this->loadHtmlFile($file);
    }

    /**
     * Loads an HTML file
     * Parse errors are stored in the global array _dompdf_warnings.
     *
     * @param string $file a filename or url to load
     * @param string $encoding Encoding of $file
     *
     * @throws Exception
     */
    public function loadHtmlFile($file, $encoding = null)
    {
        $this->setPhpConfig();

        if (!$this->protocol && !$this->baseHost && !$this->basePath) {
            [$this->protocol, $this->baseHost, $this->basePath] = Helpers::explode_url($file);
        }
        $protocol = strtolower($this->protocol);
        $uri = Helpers::build_url($this->protocol, $this->baseHost, $this->basePath, $file);

        $allowed_protocols = $this->options->getAllowedProtocols();
        if (!array_key_exists($protocol, $allowed_protocols)) {
            throw new Exception("Permission denied on $file. The communication protocol is not supported.");
        }

        if ($protocol === "file://") {
            $ext = strtolower(pathinfo($uri, PATHINFO_EXTENSION));
            if (!in_array($ext, $this->allowedLocalFileExtensions)) {
                throw new Exception("Permission denied on $file: The file extension is forbidden.");
            }
        }

        foreach ($allowed_protocols[$protocol]["rules"] as $rule) {
            [$result, $message] = $rule($uri);
            if (!$result) {
                throw new Exception("Error loading $file: $message");
            }
        }

        [$contents, $http_response_header] = Helpers::getFileContent($uri, $this->options->getHttpContext());
        if ($contents === null) {
            throw new Exception("File '$file' not found.");
        }

        // See http://the-stickman.com/web-development/php/getting-http-response-headers-when-using-file_get_contents/
        if (isset($http_response_header)) {
            foreach ($http_response_header as $_header) {
                if (preg_match("@Content-Type:\s*[\w/]+;\s*?charset=([^\s]+)@i", $_header, $matches)) {
                    $encoding = strtoupper($matches[1]);
                    break;
                }
            }
        }

        $this->restorePhpConfig();

        $this->loadHtml($contents, $encoding);
    }

    /**
     * @param string $str
     * @param string $encoding
     * @deprecated
     */
    public function load_html($str, $encoding = null)
    {
        $this->loadHtml($str, $encoding);
    }

    public function loadDOM($doc, $quirksmode = false) {
        // Remove #text children nodes in nodes that shouldn't have
        $tag_names = ["html", "head", "table", "tbody", "thead", "tfoot", "tr"];
        foreach ($tag_names as $tag_name) {
            $nodes = $doc->getElementsByTagName($tag_name);

            foreach ($nodes as $node) {
                self::removeTextNodes($node);
            }
        }

        $this->dom = $doc;
        $this->quirksmode = $quirksmode;
        $this->tree = new FrameTree($this->dom);
    }

    /**
     * Loads an HTML string
     * Parse errors are stored in the global array _dompdf_warnings.
     *
     * @param string $str HTML text to load
     * @param string $encoding Encoding of $str
     */
    public function loadHtml($str, $encoding = null)
    {
        $this->setPhpConfig();

        // Determine character encoding when $encoding parameter not used
        if ($encoding === null) {
            mb_detect_order('auto');
            if (($encoding = mb_detect_encoding($str, null, true)) === false) {

                //"auto" is expanded to "ASCII,JIS,UTF-8,EUC-JP,SJIS"
                $encoding = "auto";
            }
        }

        if (in_array(strtoupper($encoding), array('UTF-8','UTF8')) === false) {
            $str = mb_convert_encoding($str, 'UTF-8', $encoding);

            //Update encoding after converting
            $encoding = 'UTF-8';
        }

        $metatags = [
            '@<meta\s+http-equiv="Content-Type"\s+content="(?:[\w/]+)(?:;\s*?charset=([^\s"]+))?@i',
            '@<meta\s+content="(?:[\w/]+)(?:;\s*?charset=([^\s"]+))"?\s+http-equiv="Content-Type"@i',
            '@<meta [^>]*charset\s*=\s*["\']?\s*([^"\' ]+)@i',
        ];
        foreach ($metatags as $metatag) {
            if (preg_match($metatag, $str, $matches)) {
                if (isset($matches[1]) && in_array($matches[1], mb_list_encodings())) {
                    $document_encoding = $matches[1];
                    break;
                }
            }
        }
        if (isset($document_encoding) && in_array(strtoupper($document_encoding), ['UTF-8','UTF8']) === false) {
            $str = preg_replace('/charset=([^\s"]+)/i', 'charset=UTF-8', $str);
        } elseif (isset($document_encoding) === false && strpos($str, '<head>') !== false) {
            $str = str_replace('<head>', '<head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">', $str);
        } elseif (isset($document_encoding) === false) {
            $str = '<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">' . $str;
        }

        // remove BOM mark from UTF-8, it's treated as document text by DOMDocument
        // FIXME: roll this into the encoding detection using UTF-8/16/32 BOM (http://us2.php.net/manual/en/function.mb-detect-encoding.php#91051)?
        if (substr($str, 0, 3) == chr(0xEF) . chr(0xBB) . chr(0xBF)) {
            $str = substr($str, 3);
        }

        // Store parsing warnings as messages
        set_error_handler([Helpers::class, 'record_warnings']);

        try {
            // @todo Take the quirksmode into account
            // https://quirks.spec.whatwg.org/
            // http://hsivonen.iki.fi/doctype/
            $quirksmode = false;

            $html5 = new HTML5(['encoding' => $encoding, 'disable_html_ns' => true]);
            $dom = $html5->loadHTML($str);

            // extra step to normalize the HTML document structure
            // see Masterminds/html5-php#166
            $doc = new DOMDocument("1.0", $encoding);
            $doc->preserveWhiteSpace = true;
            $doc->loadHTML($html5->saveHTML($dom), LIBXML_NOWARNING | LIBXML_NOERROR);

            $this->loadDOM($doc, $quirksmode);
        } finally {
            restore_error_handler();
            $this->restorePhpConfig();
        }
    }

    /**
     * @param DOMNode $node
     * @deprecated
     */
    public static function remove_text_nodes(DOMNode $node)
    {
        self::removeTextNodes($node);
    }

    /**
     * @param DOMNode $node
     */
    public static function removeTextNodes(DOMNode $node)
    {
        $children = [];
        for ($i = 0; $i < $node->childNodes->length; $i++) {
            $child = $node->childNodes->item($i);
            if ($child->nodeName === "#text") {
                $children[] = $child;
            }
        }

        foreach ($children as $child) {
            $node->removeChild($child);
        }
    }

    /**
     * Builds the {@link FrameTree}, loads any CSS and applies the styles to
     * the {@link FrameTree}
     */
    private function processHtml()
    {
        $this->tree->build_tree();

        $this->css->load_css_file($this->css->getDefaultStylesheet(), Stylesheet::ORIG_UA);

        $acceptedmedia = Stylesheet::$ACCEPTED_GENERIC_MEDIA_TYPES;
        $acceptedmedia[] = $this->options->getDefaultMediaType();

        // <base href="" />
        /** @var \DOMElement|null */
        $baseNode = $this->dom->getElementsByTagName("base")->item(0);
        $baseHref = $baseNode ? $baseNode->getAttribute("href") : "";
        if ($baseHref !== "") {
            [$this->protocol, $this->baseHost, $this->basePath] = Helpers::explode_url($baseHref);
        }

        // Set the base path of the Stylesheet to that of the file being processed
        $this->css->set_protocol($this->protocol);
        $this->css->set_host($this->baseHost);
        $this->css->set_base_path($this->basePath);

        // Get all the stylesheets so that they are processed in document order
        $xpath = new DOMXPath($this->dom);
        $stylesheets = $xpath->query("//*[name() = 'link' or name() = 'style']");

        /** @var \DOMElement $tag */
        foreach ($stylesheets as $tag) {
            switch (strtolower($tag->nodeName)) {
                // load <link rel="STYLESHEET" ... /> tags
                case "link":
                    if (mb_strtolower(stripos($tag->getAttribute("rel"), "stylesheet") !== false) || // may be "appendix stylesheet"
                        mb_strtolower($tag->getAttribute("type")) === "text/css"
                    ) {
                        //Check if the css file is for an accepted media type
                        //media not given then always valid
                        $formedialist = preg_split("/[\s\n,]/", $tag->getAttribute("media"), -1, PREG_SPLIT_NO_EMPTY);
                        if (count($formedialist) > 0) {
                            $accept = false;
                            foreach ($formedialist as $type) {
                                if (in_array(mb_strtolower(trim($type)), $acceptedmedia)) {
                                    $accept = true;
                                    break;
                                }
                            }

                            if (!$accept) {
                                //found at least one mediatype, but none of the accepted ones
                                //Skip this css file.
                                break;
                            }
                        }

                        $url = $tag->getAttribute("href");
                        $url = Helpers::build_url($this->protocol, $this->baseHost, $this->basePath, $url);

                        if ($url !== null) {
                            $this->css->load_css_file($url, Stylesheet::ORIG_AUTHOR);
                        }
                    }
                    break;

                // load <style> tags
                case "style":
                    // Accept all <style> tags by default (note this is contrary to W3C
                    // HTML 4.0 spec:
                    // http://www.w3.org/TR/REC-html40/present/styles.html#adef-media
                    // which states that the default media type is 'screen'
                    if ($tag->hasAttributes() &&
                        ($media = $tag->getAttribute("media")) &&
                        !in_array($media, $acceptedmedia)
                    ) {
                        break;
                    }

                    $css = "";
                    if ($tag->hasChildNodes()) {
                        $child = $tag->firstChild;
                        while ($child) {
                            $css .= $child->nodeValue; // Handle <style><!-- blah --></style>
                            $child = $child->nextSibling;
                        }
                    } else {
                        $css = $tag->nodeValue;
                    }

                    // Set the base path of the Stylesheet to that of the file being processed
                    $this->css->set_protocol($this->protocol);
                    $this->css->set_host($this->baseHost);
                    $this->css->set_base_path($this->basePath);

                    $this->css->load_css($css, Stylesheet::ORIG_AUTHOR);
                    break;
            }

            // Set the base path of the Stylesheet to that of the file being processed
            $this->css->set_protocol($this->protocol);
            $this->css->set_host($this->baseHost);
            $this->css->set_base_path($this->basePath);
        }
    }

    /**
     * @param string $cacheId
     * @deprecated
     */
    public function enable_caching($cacheId)
    {
        $this->enableCaching($cacheId);
    }

    /**
     * Enable experimental caching capability
     *
     * @param string $cacheId
     */
    public function enableCaching($cacheId)
    {
        $this->cacheId = $cacheId;
    }

    /**
     * @param string $value
     * @return bool
     * @deprecated
     */
    public function parse_default_view($value)
    {
        return $this->parseDefaultView($value);
    }

    /**
     * @param string $value
     * @return bool
     */
    public function parseDefaultView($value)
    {
        $valid = ["XYZ", "Fit", "FitH", "FitV", "FitR", "FitB", "FitBH", "FitBV"];

        $options = preg_split("/\s*,\s*/", trim($value));
        $defaultView = array_shift($options);

        if (!in_array($defaultView, $valid)) {
            return false;
        }

        $this->setDefaultView($defaultView, $options);
        return true;
    }

    /**
     * Renders the HTML to PDF
     */
    public function render()
    {
        $this->setPhpConfig();

        $logOutputFile = $this->options->getLogOutputFile();
        if ($logOutputFile) {
            if (!file_exists($logOutputFile) && is_writable(dirname($logOutputFile))) {
                touch($logOutputFile);
            }

            $startTime = microtime(true);
            if (is_writable($logOutputFile)) {
                ob_start();
            }
        }

        $this->processHtml();

        $this->css->apply_styles($this->tree);

        // @page style rules : size, margins
        $pageStyles = $this->css->get_page_styles();
        $basePageStyle = $pageStyles["base"];
        unset($pageStyles["base"]);

        foreach ($pageStyles as $pageStyle) {
            $pageStyle->inherit($basePageStyle);
        }

        // Set paper size if defined via CSS
        if (is_array($basePageStyle->size)) {
            [$width, $height] = $basePageStyle->size;
            $this->setPaper([0, 0, $width, $height]);
        }

        // Create a new canvas instance if the current one does not match the
        // desired paper size
        $canvasWidth = $this->canvas->get_width();
        $canvasHeight = $this->canvas->get_height();
        $size = $this->getPaperSize();

        if ($canvasWidth !== $size[2] || $canvasHeight !== $size[3]) {
            $this->canvas = CanvasFactory::get_instance($this, $this->paperSize, $this->paperOrientation);
            $this->fontMetrics->setCanvas($this->canvas);
        }

        $canvas = $this->canvas;

        $root_frame = $this->tree->get_root();
        $root = Factory::decorate_root($root_frame, $this);
        foreach ($this->tree as $frame) {
            if ($frame === $root_frame) {
                continue;
            }
            Factory::decorate_frame($frame, $this, $root);
        }

        // Add meta information
        $title = $this->dom->getElementsByTagName("title");
        if ($title->length) {
            $canvas->add_info("Title", trim($title->item(0)->nodeValue));
        }

        $metas = $this->dom->getElementsByTagName("meta");
        $labels = [
            "author" => "Author",
            "keywords" => "Keywords",
            "description" => "Subject",
        ];
        /** @var \DOMElement $meta */
        foreach ($metas as $meta) {
            $name = mb_strtolower($meta->getAttribute("name"));
            $value = trim($meta->getAttribute("content"));

            if (isset($labels[$name])) {
                $canvas->add_info($labels[$name], $value);
                continue;
            }

            if ($name === "dompdf.view" && $this->parseDefaultView($value)) {
                $canvas->set_default_view($this->defaultView, $this->defaultViewOptions);
            }
        }

        $root->set_containing_block(0, 0, $canvas->get_width(), $canvas->get_height());
        $root->set_renderer(new Renderer($this));

        // This is where the magic happens:
        $root->reflow();

        if (isset($this->callbacks["end_document"])) {
            $fs = $this->callbacks["end_document"];

            foreach ($fs as $f) {
                $canvas->page_script($f);
            }
        }

        // Clean up cached images
        if (!$this->options->getDebugKeepTemp()) {
            Cache::clear($this->options->getDebugPng());
        }

        global $_dompdf_warnings, $_dompdf_show_warnings;
        if ($_dompdf_show_warnings && isset($_dompdf_warnings)) {
            echo '<b>Dompdf Warnings</b><br><pre>';
            foreach ($_dompdf_warnings as $msg) {
                echo $msg . "\n";
            }

            if ($canvas instanceof CPDF) {
                echo $canvas->get_cpdf()->messages;
            }
            echo '</pre>';
            flush();
        }

        if ($logOutputFile && is_writable($logOutputFile)) {
            $this->writeLog($logOutputFile, $startTime);
            ob_end_clean();
        }

        $this->restorePhpConfig();
    }

    /**
     * Writes the output buffer in the log file
     *
     * @param string $logOutputFile
     * @param float $startTime
     */
    private function writeLog(string $logOutputFile, float $startTime): void
    {
        $frames = Frame::$ID_COUNTER;
        $memory = memory_get_peak_usage(true) / 1024;
        $time = (microtime(true) - $startTime) * 1000;

        $out = sprintf(
            "<span style='color: #000' title='Frames'>%6d</span>" .
            "<span style='color: #009' title='Memory'>%10.2f KB</span>" .
            "<span style='color: #900' title='Time'>%10.2f ms</span>" .
            "<span  title='Quirksmode'>  " .
            ($this->quirksmode ? "<span style='color: #d00'> ON</span>" : "<span style='color: #0d0'>OFF</span>") .
            "</span><br />", $frames, $memory, $time);

        $out .= ob_get_contents();
        ob_clean();

        file_put_contents($logOutputFile, $out);
    }

    /**
     * Add meta information to the PDF after rendering.
     *
     * @deprecated
     */
    public function add_info($label, $value)
    {
        $this->addInfo($label, $value);
    }

    /**
     * Add meta information to the PDF after rendering.
     *
     * @param string $label Label of the value (Creator, Producer, etc.)
     * @param string $value The text to set
     */
    public function addInfo(string $label, string $value): void
    {
        $this->canvas->add_info($label, $value);
    }

    /**
     * Streams the PDF to the client.
     *
     * The file will open a download dialog by default. The options
     * parameter controls the output. Accepted options (array keys) are:
     *
     * 'compress' = > 1 (=default) or 0:
     *   Apply content stream compression
     *
     * 'Attachment' => 1 (=default) or 0:
     *   Set the 'Content-Disposition:' HTTP header to 'attachment'
     *   (thereby causing the browser to open a download dialog)
     *
     * @param string $filename the name of the streamed file
     * @param array $options header options (see above)
     */
    public function stream($filename = "document.pdf", $options = [])
    {
        $this->setPhpConfig();

        $this->canvas->stream($filename, $options);

        $this->restorePhpConfig();
    }

    /**
     * Returns the PDF as a string.
     *
     * The options parameter controls the output. Accepted options are:
     *
     * 'compress' = > 1 or 0 - apply content stream compression, this is
     *    on (1) by default
     *
     * @param array $options options (see above)
     *
     * @return string|null
     */
    public function output($options = [])
    {
        $this->setPhpConfig();

        $output = $this->canvas->output($options);

        $this->restorePhpConfig();

        return $output;
    }

    /**
     * @return string
     * @deprecated
     */
    public function output_html()
    {
        return $this->outputHtml();
    }

    /**
     * Returns the underlying HTML document as a string
     *
     * @return string
     */
    public function outputHtml()
    {
        return $this->dom->saveHTML();
    }

    /**
     * Get the dompdf option value
     *
     * @param string $key
     * @return mixed
     * @deprecated
     */
    public function get_option($key)
    {
        return $this->options->get($key);
    }

    /**
     * @param string $key
     * @param mixed $value
     * @return $this
     * @deprecated
     */
    public function set_option($key, $value)
    {
        $this->options->set($key, $value);
        return $this;
    }

    /**
     * @param array $options
     * @return $this
     * @deprecated
     */
    public function set_options(array $options)
    {
        $this->options->set($options);
        return $this;
    }

    /**
     * @param string $size
     * @param string $orientation
     * @deprecated
     */
    public function set_paper($size, $orientation = "portrait")
    {
        $this->setPaper($size, $orientation);
    }

    /**
     * Sets the paper size & orientation
     *
     * @param string|float[] $size 'letter', 'legal', 'A4', etc. {@link Dompdf\Adapter\CPDF::$PAPER_SIZES}
     * @param string $orientation 'portrait' or 'landscape'
     * @return $this
     */
    public function setPaper($size, string $orientation = "portrait"): self
    {
        $this->paperSize = $size;
        $this->paperOrientation = $orientation;
        return $this;
    }

    /**
     * Gets the paper size
     *
     * @return float[] A four-element float array
     */
    public function getPaperSize(): array
    {
        $paper = $this->paperSize;
        $orientation = $this->paperOrientation;

        if (is_array($paper)) {
            $size = array_map("floatval", $paper);
        } else {
            $paper = strtolower($paper);
            $size = CPDF::$PAPER_SIZES[$paper] ?? CPDF::$PAPER_SIZES["letter"];
        }

        if (strtolower($orientation) === "landscape") {
            [$size[2], $size[3]] = [$size[3], $size[2]];
        }

        return $size;
    }

    /**
     * Gets the paper orientation
     *
     * @return string Either "portrait" or "landscape"
     */
    public function getPaperOrientation(): string
    {
        return $this->paperOrientation;
    }

    /**
     * @param FrameTree $tree
     * @return $this
     */
    public function setTree(FrameTree $tree)
    {
        $this->tree = $tree;
        return $this;
    }

    /**
     * @return FrameTree
     * @deprecated
     */
    public function get_tree()
    {
        return $this->getTree();
    }

    /**
     * Returns the underlying {@link FrameTree} object
     *
     * @return FrameTree
     */
    public function getTree()
    {
        return $this->tree;
    }

    /**
     * @param string $protocol
     * @return $this
     * @deprecated
     */
    public function set_protocol($protocol)
    {
        return $this->setProtocol($protocol);
    }

    /**
     * Sets the protocol to use
     * FIXME validate these
     *
     * @param string $protocol
     * @return $this
     */
    public function setProtocol(string $protocol)
    {
        $this->protocol = $protocol;
        return $this;
    }

    /**
     * @return string
     * @deprecated
     */
    public function get_protocol()
    {
        return $this->getProtocol();
    }

    /**
     * Returns the protocol in use
     *
     * @return string
     */
    public function getProtocol()
    {
        return $this->protocol;
    }

    /**
     * @param string $host
     * @deprecated
     */
    public function set_host($host)
    {
        $this->setBaseHost($host);
    }

    /**
     * Sets the base hostname
     *
     * @param string $baseHost
     * @return $this
     */
    public function setBaseHost(string $baseHost)
    {
        $this->baseHost = $baseHost;
        return $this;
    }

    /**
     * @return string
     * @deprecated
     */
    public function get_host()
    {
        return $this->getBaseHost();
    }

    /**
     * Returns the base hostname
     *
     * @return string
     */
    public function getBaseHost()
    {
        return $this->baseHost;
    }

    /**
     * Sets the base path
     *
     * @param string $path
     * @deprecated
     */
    public function set_base_path($path)
    {
        $this->setBasePath($path);
    }

    /**
     * Sets the base path
     *
     * @param string $basePath
     * @return $this
     */
    public function setBasePath(string $basePath)
    {
        $this->basePath = $basePath;
        return $this;
    }

    /**
     * @return string
     * @deprecated
     */
    public function get_base_path()
    {
        return $this->getBasePath();
    }

    /**
     * Returns the base path
     *
     * @return string
     */
    public function getBasePath()
    {
        return $this->basePath;
    }

    /**
     * @param string $default_view The default document view
     * @param array $options The view's options
     * @return $this
     * @deprecated
     */
    public function set_default_view($default_view, $options)
    {
        return $this->setDefaultView($default_view, $options);
    }

    /**
     * Sets the default view
     *
     * @param string $defaultView The default document view
     * @param array $options The view's options
     * @return $this
     */
    public function setDefaultView($defaultView, $options)
    {
        $this->defaultView = $defaultView;
        $this->defaultViewOptions = $options;
        return $this;
    }

    /**
     * @param resource $http_context
     * @return $this
     * @deprecated
     */
    public function set_http_context($http_context)
    {
        return $this->setHttpContext($http_context);
    }

    /**
     * Sets the HTTP context
     *
     * @param resource|array $httpContext
     * @return $this
     */
    public function setHttpContext($httpContext)
    {
        $this->options->setHttpContext($httpContext);
        return $this;
    }

    /**
     * @return resource
     * @deprecated
     */
    public function get_http_context()
    {
        return $this->getHttpContext();
    }

    /**
     * Returns the HTTP context
     *
     * @return resource
     */
    public function getHttpContext()
    {
        return $this->options->getHttpContext();
    }

    /**
     * Set a custom `Canvas` instance to render the document to.
     *
     * Be aware that the instance will be replaced on render if the document
     * defines a paper size different from the canvas.
     *
     * @param Canvas $canvas
     * @return $this
     */
    public function setCanvas(Canvas $canvas)
    {
        $this->canvas = $canvas;
        return $this;
    }

    /**
     * @return Canvas
     * @deprecated
     */
    public function get_canvas()
    {
        return $this->getCanvas();
    }

    /**
     * Return the underlying Canvas instance (e.g. Dompdf\Adapter\CPDF, Dompdf\Adapter\GD)
     *
     * @return Canvas
     */
    public function getCanvas()
    {
        return $this->canvas;
    }

    /**
     * @param Stylesheet $css
     * @return $this
     */
    public function setCss(Stylesheet $css)
    {
        $this->css = $css;
        return $this;
    }

    /**
     * @return Stylesheet
     * @deprecated
     */
    public function get_css()
    {
        return $this->getCss();
    }

    /**
     * Returns the stylesheet
     *
     * @return Stylesheet
     */
    public function getCss()
    {
        return $this->css;
    }

    /**
     * @param DOMDocument $dom
     * @return $this
     */
    public function setDom(DOMDocument $dom)
    {
        $this->dom = $dom;
        return $this;
    }

    /**
     * @return DOMDocument
     * @deprecated
     */
    public function get_dom()
    {
        return $this->getDom();
    }

    /**
     * @return DOMDocument
     */
    public function getDom()
    {
        return $this->dom;
    }

    /**
     * @param Options $options
     * @return $this
     */
    public function setOptions(Options $options)
    {
        // For backwards compatibility
        if ($this->options && $this->options->getHttpContext() && !$options->getHttpContext()) {
            $options->setHttpContext($this->options->getHttpContext());
        }

        $this->options = $options;
        $fontMetrics = $this->fontMetrics;
        if (isset($fontMetrics)) {
            $fontMetrics->setOptions($options);
        }
        return $this;
    }

    /**
     * @return Options
     */
    public function getOptions()
    {
        return $this->options;
    }

    /**
     * @return array
     * @deprecated
     */
    public function get_callbacks()
    {
        return $this->getCallbacks();
    }

    /**
     * Returns the callbacks array
     *
     * @return array
     */
    public function getCallbacks()
    {
        return $this->callbacks;
    }

    /**
     * @param array $callbacks the set of callbacks to set
     * @return $this
     * @deprecated
     */
    public function set_callbacks($callbacks)
    {
        return $this->setCallbacks($callbacks);
    }

    /**
     * Define callbacks that allow modifying the document during render.
     *
     * The callbacks array should contain arrays with `event` set to a callback
     * event name and `f` set to a function or any other callable.
     *
     * The available callback events are:
     * * `begin_page_reflow`: called before page reflow
     * * `begin_frame`: called before a frame is rendered
     * * `end_frame`: called after frame rendering is complete
     * * `begin_page_render`: called before a page is rendered
     * * `end_page_render`: called after page rendering is complete
     * * `end_document`: called for every page after rendering is complete
     *
     * The function `f` receives three arguments `Frame $frame`, `Canvas $canvas`,
     * and `FontMetrics $fontMetrics` for all events but `end_document`. For
     * `end_document`, the function receives four arguments `int $pageNumber`,
     * `int $pageCount`, `Canvas $canvas`, and `FontMetrics $fontMetrics` instead.
     *
     * @param array $callbacks The set of callbacks to set.
     * @return $this
     */
    public function setCallbacks(array $callbacks): self
    {
        $this->callbacks = [];

        foreach ($callbacks as $c) {
            if (is_array($c) && isset($c["event"]) && isset($c["f"])) {
                $event = $c["event"];
                $f = $c["f"];
                if (is_string($event) && is_callable($f)) {
                    $this->callbacks[$event][] = $f;
                }
            }
        }

        return $this;
    }

    /**
     * @return boolean
     * @deprecated
     */
    public function get_quirksmode()
    {
        return $this->getQuirksmode();
    }

    /**
     * Get the quirks mode
     *
     * @return boolean true if quirks mode is active
     */
    public function getQuirksmode()
    {
        return $this->quirksmode;
    }

    /**
     * @param FontMetrics $fontMetrics
     * @return $this
     */
    public function setFontMetrics(FontMetrics $fontMetrics)
    {
        $this->fontMetrics = $fontMetrics;
        return $this;
    }

    /**
     * @return FontMetrics
     */
    public function getFontMetrics()
    {
        return $this->fontMetrics;
    }

    /**
     * PHP5 overloaded getter
     * Along with {@link Dompdf::__set()} __get() provides access to all
     * properties directly.  Typically __get() is not called directly outside
     * of this class.
     *
     * @param string $prop
     *
     * @throws Exception
     * @return mixed
     */
    function __get($prop)
    {
        switch ($prop) {
            case 'version':
                return $this->version;
            default:
                throw new Exception('Invalid property: ' . $prop);
        }
    }
}
<?php
/**
 * @package dompdf
 * @link    https://github.com/dompdf/dompdf
 * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
 */
namespace Dompdf;

/**
 * Standard exception thrown by DOMPDF classes
 *
 * @package dompdf
 */
class Exception extends \Exception
{

    /**
     * Class constructor
     *
     * @param string $message Error message
     * @param int $code       Error code
     */
    public function __construct($message = null, $code = 0)
    {
        parent::__construct($message, $code);
    }
}
<?php
/**
 * @package dompdf
 * @link    https://github.com/dompdf/dompdf
 * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
 */
namespace Dompdf\Exception;

use Dompdf\Exception;

/**
 * Image exception thrown by DOMPDF
 *
 * @package dompdf
 */
class ImageException extends Exception
{

    /**
     * Class constructor
     *
     * @param string $message Error message
     * @param int $code       Error code
     */
    function __construct($message = null, $code = 0)
    {
        parent::__construct($message, $code);
    }

}
<?php
/**
 * @package dompdf
 * @link    https://github.com/dompdf/dompdf
 * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
 */
namespace Dompdf;

use FontLib\Font;

/**
 * The font metrics class
 *
 * This class provides information about fonts and text.  It can resolve
 * font names into actual installed font files, as well as determine the
 * size of text in a particular font and size.
 *
 * @static
 * @package dompdf
 */
class FontMetrics
{
    /**
     * Name of the user font families file
     *
     * This file must be writable by the webserver process only to update it
     * with save_font_families() after adding the .afm file references of a new font family
     * with FontMetrics::saveFontFamilies().
     * This is typically done only from command line with load_font.php on converting
     * ttf fonts to ufm with php-font-lib.
     */
    const USER_FONTS_FILE = "installed-fonts.json";


    /**
     * Underlying {@link Canvas} object to perform text size calculations
     *
     * @var Canvas
     */
    protected $canvas;

    /**
     * Array of bundled font family names to variants
     *
     * @var array
     */
    protected $bundledFonts = [];

    /**
     * Array of user defined font family names to variants
     *
     * @var array
     */
    protected $userFonts = [];

    /**
     * combined list of all font families with absolute paths
     *
     * @var array
     */
    protected $fontFamilies;

    /**
     * @var Options
     */
    private $options;

    /**
     * Class initialization
     */
    public function __construct(Canvas $canvas, Options $options)
    {
        $this->setCanvas($canvas);
        $this->setOptions($options);
        $this->loadFontFamilies();
    }

    /**
     * @deprecated
     */
    public function save_font_families()
    {
        $this->saveFontFamilies();
    }

    /**
     * Saves the stored font family cache
     *
     * The name and location of the cache file are determined by {@link
     * FontMetrics::USER_FONTS_FILE}. This file should be writable by the
     * webserver process.
     *
     * @see FontMetrics::loadFontFamilies()
     */
    public function saveFontFamilies()
    {
        file_put_contents($this->getUserFontsFilePath(), json_encode($this->userFonts, JSON_PRETTY_PRINT));
    }

    /**
     * @deprecated
     */
    public function load_font_families()
    {
        $this->loadFontFamilies();
    }

    /**
     * Loads the stored font family cache
     *
     * @see FontMetrics::saveFontFamilies()
     */
    public function loadFontFamilies()
    {
        $file = $this->options->getRootDir() . "/lib/fonts/installed-fonts.dist.json";
        $this->bundledFonts = json_decode(file_get_contents($file), true);

        if (is_readable($this->getUserFontsFilePath())) {
            $this->userFonts = json_decode(file_get_contents($this->getUserFontsFilePath()), true);
        } else {
            $this->loadFontFamiliesLegacy();
        }
    }

    private function loadFontFamiliesLegacy()
    {
        $legacyCacheFile = $this->options->getFontDir() . '/dompdf_font_family_cache.php';
        if (is_readable($legacyCacheFile)) {
            $fontDir = $this->options->getFontDir();
            $rootDir = $this->options->getRootDir();
    
            if (!defined("DOMPDF_DIR")) { define("DOMPDF_DIR", $rootDir); }
            if (!defined("DOMPDF_FONT_DIR")) { define("DOMPDF_FONT_DIR", $fontDir); }
    
            $cacheDataClosure = require $legacyCacheFile;
            $cacheData = is_array($cacheDataClosure) ? $cacheDataClosure : $cacheDataClosure($fontDir, $rootDir);
            if (is_array($cacheData)) {
                foreach ($cacheData as $family => $variants) {
                    if (!isset($this->bundledFonts[$family]) && is_array($variants)) {
                        foreach ($variants as $variant => $variantPath) {
                            $variantName = basename($variantPath);
                            $variantDir = dirname($variantPath);
                            if ($variantDir == $fontDir) {
                                $this->userFonts[$family][$variant] = $variantName;
                            } else {
                                $this->userFonts[$family][$variant] = $variantPath;
                            }
                        }
                    }
                }
                $this->saveFontFamilies();
            }
        }
    }

    /**
     * @param array $style
     * @param string $remote_file
     * @param resource $context
     * @return bool
     * @deprecated
     */
    public function register_font($style, $remote_file, $context = null)
    {
        return $this->registerFont($style, $remote_file);
    }

    /**
     * @param array $style
     * @param string $remoteFile
     * @param resource $context
     * @return bool
     */
    public function registerFont($style, $remoteFile, $context = null)
    {
        $fontname = mb_strtolower($style["family"]);
        $families = $this->getFontFamilies();

        $entry = [];
        if (isset($families[$fontname])) {
            $entry = $families[$fontname];
        }

        $styleString = $this->getType("{$style['weight']} {$style['style']}");

        $remoteHash = md5($remoteFile);

        $prefix = $fontname . "_" . $styleString;
        $prefix = trim($prefix, "-");
        if (function_exists('iconv')) {
            $prefix = @iconv('utf-8', 'us-ascii//TRANSLIT', $prefix);
        }
        $prefix_encoding = mb_detect_encoding($prefix, mb_detect_order(), true);
        $substchar = mb_substitute_character();
        mb_substitute_character(0x005F);
        $prefix = mb_convert_encoding($prefix, "ISO-8859-1", $prefix_encoding);
        mb_substitute_character($substchar);
        $prefix = preg_replace("[\W]", "_", $prefix);
        $prefix = preg_replace("/[^-_\w]+/", "", $prefix);

        $localFile = $prefix . "_" . $remoteHash;
        $localFilePath = $this->getOptions()->getFontDir() . "/" . $localFile;

        if (isset($entry[$styleString]) && $localFilePath == $entry[$styleString]) {
            return true;
        }


        $entry[$styleString] = $localFile;

        // Download the remote file
        [$protocol] = Helpers::explode_url($remoteFile);
        $allowed_protocols = $this->options->getAllowedProtocols();
        if (!array_key_exists($protocol, $allowed_protocols)) {
            Helpers::record_warnings(E_USER_WARNING, "Permission denied on $remoteFile. The communication protocol is not supported.", __FILE__, __LINE__);
            return false;
        }

        foreach ($allowed_protocols[$protocol]["rules"] as $rule) {
            [$result, $message] = $rule($remoteFile);
            if ($result !== true) {
                Helpers::record_warnings(E_USER_WARNING, "Error loading $remoteFile: $message", __FILE__, __LINE__);
                return false;
            }
        }

        list($remoteFileContent, $http_response_header) = @Helpers::getFileContent($remoteFile, $context);
        if ($remoteFileContent === null) {
            return false;
        }

        $localTempFile = @tempnam($this->options->get("tempDir"), "dompdf-font-");
        file_put_contents($localTempFile, $remoteFileContent);

        $font = Font::load($localTempFile);

        if (!$font) {
            unlink($localTempFile);
            return false;
        }

        $font->parse();
        $font->saveAdobeFontMetrics("$localFilePath.ufm");
        $font->close();

        unlink($localTempFile);

        if ( !file_exists("$localFilePath.ufm") ) {
            return false;
        }

        $fontExtension = ".ttf";
        switch ($font->getFontType()) {
            case "TrueType":
            default:
                $fontExtension = ".ttf";
                break;
        }

        // Save the changes
        file_put_contents($localFilePath.$fontExtension, $remoteFileContent);

        if ( !file_exists($localFilePath.$fontExtension) ) {
            unlink("$localFilePath.ufm");
            return false;
        }

        $this->setFontFamily($fontname, $entry);

        return true;
    }

    /**
     * @param $text
     * @param $font
     * @param $size
     * @param float $word_spacing
     * @param float $char_spacing
     * @return float
     * @deprecated
     */
    public function get_text_width($text, $font, $size, $word_spacing = 0.0, $char_spacing = 0.0)
    {
        //return self::$_pdf->get_text_width($text, $font, $size, $word_spacing, $char_spacing);
        return $this->getTextWidth($text, $font, $size, $word_spacing, $char_spacing);
    }

    /**
     * Calculates text size, in points
     *
     * @param string $text        The text to be sized
     * @param string $font        The font file to use
     * @param float  $size        The font size, in points
     * @param float  $wordSpacing Word spacing, if any
     * @param float  $charSpacing Char spacing, if any
     *
     * @return float
     */
    public function getTextWidth(string $text, $font, float $size, float $wordSpacing = 0.0, float $charSpacing = 0.0): float
    {
        // @todo Make sure this cache is efficient before enabling it
        static $cache = [];

        if ($text === "") {
            return 0;
        }

        // Don't cache long strings
        $useCache = !isset($text[50]); // Faster than strlen

        // Text-size calculations depend on the canvas used. Make sure to not
        // return wrong values when switching canvas backends
        $canvasClass = get_class($this->canvas);
        $key = "$canvasClass/$font/$size/$wordSpacing/$charSpacing";

        if ($useCache && isset($cache[$key][$text])) {
            return $cache[$key][$text];
        }

        $width = $this->canvas->get_text_width($text, $font, $size, $wordSpacing, $charSpacing);

        if ($useCache) {
            $cache[$key][$text] = $width;
        }

        return $width;
    }

    /**
     * @param $font
     * @param $size
     * @return float
     * @deprecated
     */
    public function get_font_height($font, $size)
    {
        return $this->getFontHeight($font, $size);
    }

    /**
     * Calculates font height, in points
     *
     * @param string $font The font file to use
     * @param float  $size The font size, in points
     *
     * @return float
     */
    public function getFontHeight($font, float $size): float
    {
        return $this->canvas->get_font_height($font, $size);
    }

    /**
     * Calculates font baseline, in points
     *
     * @param string $font The font file to use
     * @param float  $size The font size, in points
     *
     * @return float
     */
    public function getFontBaseline($font, float $size): float
    {
        return $this->canvas->get_font_baseline($font, $size);
    }

    /**
     * @param $family_raw
     * @param string $subtype_raw
     * @return string
     * @deprecated
     */
    public function get_font($family_raw, $subtype_raw = "normal")
    {
        return $this->getFont($family_raw, $subtype_raw);
    }

    /**
     * Resolves a font family & subtype into an actual font file
     * Subtype can be one of 'normal', 'bold', 'italic' or 'bold_italic'.  If
     * the particular font family has no suitable font file, the default font
     * ({@link Options::defaultFont}) is used.  The font file returned
     * is the absolute pathname to the font file on the system.
     *
     * @param string|null $familyRaw
     * @param string      $subtypeRaw
     *
     * @return string|null
     */
    public function getFont($familyRaw, $subtypeRaw = "normal")
    {
        static $cache = [];

        if (isset($cache[$familyRaw][$subtypeRaw])) {
            return $cache[$familyRaw][$subtypeRaw];
        }

        /* Allow calling for various fonts in search path. Therefore not immediately
         * return replacement on non match.
         * Only when called with NULL try replacement.
         * When this is also missing there is really trouble.
         * If only the subtype fails, nevertheless return failure.
         * Only on checking the fallback font, check various subtypes on same font.
         */

        $subtype = strtolower($subtypeRaw);

        $families = $this->getFontFamilies();
        if ($familyRaw) {
            $family = str_replace(["'", '"'], "", strtolower($familyRaw));

            if (isset($families[$family][$subtype])) {
                return $cache[$familyRaw][$subtypeRaw] = $families[$family][$subtype];
            }

            return null;
        }

        $fallback_families = [strtolower($this->options->getDefaultFont()), "serif"];
        foreach ($fallback_families as $family) {
            if (isset($families[$family][$subtype])) {
                return $cache[$familyRaw][$subtypeRaw] = $families[$family][$subtype];
            }
    
            if (!isset($families[$family])) {
                continue;
            }
    
            $family = $families[$family];
    
            foreach ($family as $sub => $font) {
                if (strpos($subtype, $sub) !== false) {
                    return $cache[$familyRaw][$subtypeRaw] = $font;
                }
            }
    
            if ($subtype !== "normal") {
                foreach ($family as $sub => $font) {
                    if ($sub !== "normal") {
                        return $cache[$familyRaw][$subtypeRaw] = $font;
                    }
                }
            }
    
            $subtype = "normal";
    
            if (isset($family[$subtype])) {
                return $cache[$familyRaw][$subtypeRaw] = $family[$subtype];
            }
        }
        
        return null;
    }

    /**
     * @param $family
     * @return null|string
     * @deprecated
     */
    public function get_family($family)
    {
        return $this->getFamily($family);
    }

    /**
     * @param string $family
     * @return null|string
     */
    public function getFamily($family)
    {
        $family = str_replace(["'", '"'], "", mb_strtolower($family));
        $families = $this->getFontFamilies();

        if (isset($families[$family])) {
            return $families[$family];
        }

        return null;
    }

    /**
     * @param $type
     * @return string
     * @deprecated
     */
    public function get_type($type)
    {
        return $this->getType($type);
    }

    /**
     * @param string $type
     * @return string
     */
    public function getType($type)
    {
        if (preg_match('/bold/i', $type)) {
            $weight = 700;
        } elseif (preg_match('/([1-9]00)/', $type, $match)) {
            $weight = (int)$match[0];
        } else {
            $weight = 400;
        }
        $weight = $weight === 400 ? 'normal' : $weight;
        $weight = $weight === 700 ? 'bold' : $weight;

        $style = preg_match('/italic|oblique/i', $type) ? 'italic' : null;

        if ($weight === 'normal' && $style !== null) {
            return $style;
        }

        return $style === null
            ? $weight
            : $weight.'_'.$style;
    }

    /**
     * @return array
     * @deprecated
     */
    public function get_font_families()
    {
        return $this->getFontFamilies();
    }

    /**
     * Returns the current font lookup table
     *
     * @return array
     */
    public function getFontFamilies()
    {
        if (!isset($this->fontFamilies)) {
            $this->setFontFamilies();
        }
        return $this->fontFamilies;
    }

    /**
     * Convert loaded fonts to font lookup table
     *
     * @return array
     */
    public function setFontFamilies()
    {
        $fontFamilies = [];
        if (isset($this->bundledFonts) && is_array($this->bundledFonts)) {
            foreach ($this->bundledFonts as $family => $variants) {
                if (!isset($fontFamilies[$family])) {
                    $fontFamilies[$family] = array_map(function ($variant) {
                        return $this->getOptions()->getRootDir() . '/lib/fonts/' . $variant;
                    }, $variants);
                }
            }
        }
        if (isset($this->userFonts) && is_array($this->userFonts)) {
            foreach ($this->userFonts as $family => $variants) {
                $fontFamilies[$family] = array_map(function ($variant) {
                    $variantName = basename($variant);
                    if ($variantName === $variant) {
                        return $this->getOptions()->getFontDir() . '/' . $variant;
                    }
                    return $variant;
                }, $variants);
            }
        }
        $this->fontFamilies = $fontFamilies;
    }

    /**
     * @param string $fontname
     * @param mixed $entry
     * @deprecated
     */
    public function set_font_family($fontname, $entry)
    {
        $this->setFontFamily($fontname, $entry);
    }

    /**
     * @param string $fontname
     * @param mixed $entry
     */
    public function setFontFamily($fontname, $entry)
    {
        $this->userFonts[mb_strtolower($fontname)] = $entry;
        $this->saveFontFamilies();
        unset($this->fontFamilies);
    }

    /**
     * @return string
     */
    public function getUserFontsFilePath()
    {
        return $this->options->getFontDir() . '/' . self::USER_FONTS_FILE;
    }

    /**
     * @param Options $options
     * @return $this
     */
    public function setOptions(Options $options)
    {
        $this->options = $options;
        unset($this->fontFamilies);
        return $this;
    }

    /**
     * @return Options
     */
    public function getOptions()
    {
        return $this->options;
    }

    /**
     * @param Canvas $canvas
     * @return $this
     */
    public function setCanvas(Canvas $canvas)
    {
        $this->canvas = $canvas;
        return $this;
    }

    /**
     * @return Canvas
     */
    public function getCanvas()
    {
        return $this->canvas;
    }
}
<?php
/**
 * @package dompdf
 * @link    https://github.com/dompdf/dompdf
 * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
 */
namespace Dompdf;

use Dompdf\Css\Style;
use Dompdf\Frame\FrameListIterator;

/**
 * The main Frame class
 *
 * This class represents a single HTML element.  This class stores
 * positioning information as well as containing block location and
 * dimensions. Style information for the element is stored in a {@link
 * Style} object. Tree structure is maintained via the parent & children
 * links.
 *
 * @package dompdf
 */
class Frame
{
    const WS_TEXT = 1;
    const WS_SPACE = 2;

    /**
     * The DOMElement or DOMText object this frame represents
     *
     * @var \DOMElement|\DOMText
     */
    protected $_node;

    /**
     * Unique identifier for this frame.  Used to reference this frame
     * via the node.
     *
     * @var int
     */
    protected $_id;

    /**
     * Unique id counter
     *
     * @var int
     */
    public static $ID_COUNTER = 0; /*protected*/

    /**
     * This frame's calculated style
     *
     * @var Style
     */
    protected $_style;

    /**
     * This frame's parent in the document tree.
     *
     * @var Frame
     */
    protected $_parent;

    /**
     * This frame's first child.  All children are handled as a
     * doubly-linked list.
     *
     * @var Frame
     */
    protected $_first_child;

    /**
     * This frame's last child.
     *
     * @var Frame
     */
    protected $_last_child;

    /**
     * This frame's previous sibling in the document tree.
     *
     * @var Frame
     */
    protected $_prev_sibling;

    /**
     * This frame's next sibling in the document tree.
     *
     * @var Frame
     */
    protected $_next_sibling;

    /**
     * This frame's containing block (used in layout): array(x, y, w, h)
     *
     * @var float[]
     */
    protected $_containing_block;

    /**
     * Position on the page of the top-left corner of the margin box of
     * this frame: array(x,y)
     *
     * @var float[]
     */
    protected $_position;

    /**
     * Absolute opacity of this frame
     *
     * @var float
     */
    protected $_opacity;

    /**
     * This frame's decorator
     *
     * @var FrameDecorator\AbstractFrameDecorator
     */
    protected $_decorator;

    /**
     * This frame's containing line box
     *
     * @var LineBox|null
     */
    protected $_containing_line;

    /**
     * @var array
     */
    protected $_is_cache = [];

    /**
     * Tells whether the frame was already pushed to the next page
     *
     * @var bool
     */
    public $_already_pushed = false;

    /**
     * @var bool
     */
    public $_float_next_line = false;

    /**
     * @var int
     */
    public static $_ws_state = self::WS_SPACE;

    /**
     * Class constructor
     *
     * @param \DOMNode $node the DOMNode this frame represents
     */
    public function __construct(\DOMNode $node)
    {
        $this->_node = $node;

        $this->_parent = null;
        $this->_first_child = null;
        $this->_last_child = null;
        $this->_prev_sibling = $this->_next_sibling = null;

        $this->_style = null;

        $this->_containing_block = [
            "x" => null,
            "y" => null,
            "w" => null,
            "h" => null,
        ];

        $this->_containing_block[0] =& $this->_containing_block["x"];
        $this->_containing_block[1] =& $this->_containing_block["y"];
        $this->_containing_block[2] =& $this->_containing_block["w"];
        $this->_containing_block[3] =& $this->_containing_block["h"];

        $this->_position = [
            "x" => null,
            "y" => null,
        ];

        $this->_position[0] =& $this->_position["x"];
        $this->_position[1] =& $this->_position["y"];

        $this->_opacity = 1.0;
        $this->_decorator = null;

        $this->set_id(self::$ID_COUNTER++);
    }

    /**
     * WIP : preprocessing to remove all the unused whitespace
     */
    protected function ws_trim()
    {
        if ($this->ws_keep()) {
            return;
        }

        if (self::$_ws_state === self::WS_SPACE) {
            $node = $this->_node;

            if ($node->nodeName === "#text" && !empty($node->nodeValue)) {
                $node->nodeValue = preg_replace("/[ \t\r\n\f]+/u", " ", trim($node->nodeValue));
                self::$_ws_state = self::WS_TEXT;
            }
        }
    }

    /**
     * @return bool
     */
    protected function ws_keep()
    {
        $whitespace = $this->get_style()->white_space;

        return in_array($whitespace, ["pre", "pre-wrap", "pre-line"]);
    }

    /**
     * @return bool
     */
    protected function ws_is_text()
    {
        $node = $this->get_node();

        if ($node->nodeName === "img") {
            return true;
        }

        if (!$this->is_in_flow()) {
            return false;
        }

        if ($this->is_text_node()) {
            return trim($node->nodeValue) !== "";
        }

        return true;
    }

    /**
     * "Destructor": forcibly free all references held by this frame
     *
     * @param bool $recursive if true, call dispose on all children
     */
    public function dispose($recursive = false)
    {
        if ($recursive) {
            while ($child = $this->_first_child) {
                $child->dispose(true);
            }
        }

        // Remove this frame from the tree
        if ($this->_prev_sibling) {
            $this->_prev_sibling->_next_sibling = $this->_next_sibling;
        }

        if ($this->_next_sibling) {
            $this->_next_sibling->_prev_sibling = $this->_prev_sibling;
        }

        if ($this->_parent && $this->_parent->_first_child === $this) {
            $this->_parent->_first_child = $this->_next_sibling;
        }

        if ($this->_parent && $this->_parent->_last_child === $this) {
            $this->_parent->_last_child = $this->_prev_sibling;
        }

        if ($this->_parent) {
            $this->_parent->get_node()->removeChild($this->_node);
        }

        $this->_style = null;
        unset($this->_style);
    }

    /**
     * Re-initialize the frame
     */
    public function reset()
    {
        $this->_position["x"] = null;
        $this->_position["y"] = null;

        $this->_containing_block["x"] = null;
        $this->_containing_block["y"] = null;
        $this->_containing_block["w"] = null;
        $this->_containing_block["h"] = null;

        $this->_style->reset();
    }

    /**
     * @return \DOMElement|\DOMText
     */
    public function get_node()
    {
        return $this->_node;
    }

    /**
     * @return int
     */
    public function get_id()
    {
        return $this->_id;
    }

    /**
     * @return Style
     */
    public function get_style()
    {
        return $this->_style;
    }

    /**
     * @deprecated
     * @return Style
     */
    public function get_original_style()
    {
        return $this->_style;
    }

    /**
     * @return Frame
     */
    public function get_parent()
    {
        return $this->_parent;
    }

    /**
     * @return FrameDecorator\AbstractFrameDecorator
     */
    public function get_decorator()
    {
        return $this->_decorator;
    }

    /**
     * @return Frame
     */
    public function get_first_child()
    {
        return $this->_first_child;
    }

    /**
     * @return Frame
     */
    public function get_last_child()
    {
        return $this->_last_child;
    }

    /**
     * @return Frame
     */
    public function get_prev_sibling()
    {
        return $this->_prev_sibling;
    }

    /**
     * @return Frame
     */
    public function get_next_sibling()
    {
        return $this->_next_sibling;
    }

    /**
     * @return FrameListIterator
     */
    public function get_children(): FrameListIterator
    {
        return new FrameListIterator($this);
    }

    // Layout property accessors

    /**
     * Containing block dimensions
     *
     * @param string|null $i The key of the wanted containing block's dimension (x, y, w, h)
     *
     * @return float[]|float
     */
    public function get_containing_block($i = null)
    {
        if (isset($i)) {
            return $this->_containing_block[$i];
        }

        return $this->_containing_block;
    }

    /**
     * Block position
     *
     * @param string|null $i The key of the wanted position value (x, y)
     *
     * @return float[]|float
     */
    public function get_position($i = null)
    {
        if (isset($i)) {
            return $this->_position[$i];
        }

        return $this->_position;
    }

    //........................................................................

    /**
     * Return the width of the margin box of the frame, in pt.  Meaningless
     * unless the width has been calculated properly.
     *
     * @return float
     */
    public function get_margin_width(): float
    {
        $style = $this->_style;

        return (float)$style->length_in_pt([
            $style->width,
            $style->margin_left,
            $style->margin_right,
            $style->border_left_width,
            $style->border_right_width,
            $style->padding_left,
            $style->padding_right
        ], $this->_containing_block["w"]);
    }

    /**
     * Return the height of the margin box of the frame, in pt.  Meaningless
     * unless the height has been calculated properly.
     *
     * @return float
     */
    public function get_margin_height(): float
    {
        $style = $this->_style;

        return (float)$style->length_in_pt(
            [
                $style->height,
                (float)$style->length_in_pt(
                    [
                        $style->border_top_width,
                        $style->border_bottom_width,
                        $style->margin_top,
                        $style->margin_bottom,
                        $style->padding_top,
                        $style->padding_bottom
                    ], $this->_containing_block["w"]
                )
            ],
            $this->_containing_block["h"]
        );
    }

    /**
     * Return the content box (x,y,w,h) of the frame.
     *
     * Width and height might be reported as 0 if they have not been resolved
     * yet.
     *
     * @return float[]
     */
    public function get_content_box(): array
    {
        $style = $this->_style;
        $cb = $this->_containing_block;

        $x = $this->_position["x"] +
            (float)$style->length_in_pt(
                [
                    $style->margin_left,
                    $style->border_left_width,
                    $style->padding_left
                ],
                $cb["w"]
            );

        $y = $this->_position["y"] +
            (float)$style->length_in_pt(
                [
                    $style->margin_top,
                    $style->border_top_width,
                    $style->padding_top
                ], $cb["w"]
            );

        $w = (float)$style->length_in_pt($style->width, $cb["w"]);

        $h = (float)$style->length_in_pt($style->height, $cb["h"]);

        return [0 => $x, "x" => $x,
            1 => $y, "y" => $y,
            2 => $w, "w" => $w,
            3 => $h, "h" => $h];
    }

    /**
     * Return the padding box (x,y,w,h) of the frame.
     *
     * Width and height might be reported as 0 if they have not been resolved
     * yet.
     *
     * @return float[]
     */
    public function get_padding_box(): array
    {
        $style = $this->_style;
        $cb = $this->_containing_block;

        $x = $this->_position["x"] +
            (float)$style->length_in_pt(
                [
                    $style->margin_left,
                    $style->border_left_width
                ],
                $cb["w"]
            );

        $y = $this->_position["y"] +
            (float)$style->length_in_pt(
                [
                    $style->margin_top,
                    $style->border_top_width
                ],
                $cb["h"]
            );

        $w = (float)$style->length_in_pt(
                [
                    $style->padding_left,
                    $style->width,
                    $style->padding_right
                ],
                $cb["w"]
            );

        $h = (float)$style->length_in_pt(
                [
                    $style->padding_top,
                    $style->padding_bottom,
                    $style->length_in_pt($style->height, $cb["h"])
                ],
                $cb["w"]
            );

        return [0 => $x, "x" => $x,
            1 => $y, "y" => $y,
            2 => $w, "w" => $w,
            3 => $h, "h" => $h];
    }

    /**
     * Return the border box of the frame.
     *
     * Width and height might be reported as 0 if they have not been resolved
     * yet.
     *
     * @return float[]
     */
    public function get_border_box(): array
    {
        $style = $this->_style;
        $cb = $this->_containing_block;

        $x = $this->_position["x"] + (float)$style->length_in_pt($style->margin_left, $cb["w"]);

        $y = $this->_position["y"] + (float)$style->length_in_pt($style->margin_top, $cb["w"]);

        $w = (float)$style->length_in_pt(
            [
                $style->border_left_width,
                $style->padding_left,
                $style->width,
                $style->padding_right,
                $style->border_right_width
            ],
            $cb["w"]
        );

        $h = (float)$style->length_in_pt(
            [
                $style->border_top_width,
                $style->padding_top,
                $style->padding_bottom,
                $style->border_bottom_width,
                $style->length_in_pt($style->height, $cb["h"])
            ],
            $cb["w"]
        );

        return [0 => $x, "x" => $x,
            1 => $y, "y" => $y,
            2 => $w, "w" => $w,
            3 => $h, "h" => $h];
    }

    /**
     * @param float|null $opacity
     *
     * @return float
     */
    public function get_opacity(?float $opacity = null): float
    {
        if ($opacity !== null) {
            $this->set_opacity($opacity);
        }

        return $this->_opacity;
    }

    /**
     * @return LineBox|null
     */
    public function &get_containing_line()
    {
        return $this->_containing_line;
    }

    //........................................................................
    // Set methods

    /**
     * @param int $id
     */
    public function set_id($id)
    {
        $this->_id = $id;

        // We can only set attributes of DOMElement objects (nodeType == 1).
        // Since these are the only objects that we can assign CSS rules to,
        // this shortcoming is okay.
        if ($this->_node->nodeType == XML_ELEMENT_NODE) {
            $this->_node->setAttribute("frame_id", $id);
        }
    }

    /**
     * @param Style $style
     */
    public function set_style(Style $style): void
    {
        // $style->set_frame($this);
        $this->_style = $style;
    }

    /**
     * @param FrameDecorator\AbstractFrameDecorator $decorator
     */
    public function set_decorator(FrameDecorator\AbstractFrameDecorator $decorator)
    {
        $this->_decorator = $decorator;
    }

    /**
     * @param float|float[]|null $x
     * @param float|null $y
     * @param float|null $w
     * @param float|null $h
     */
    public function set_containing_block($x = null, $y = null, $w = null, $h = null)
    {
        if (is_array($x)) {
            foreach ($x as $key => $val) {
                $$key = $val;
            }
        }

        if (is_numeric($x)) {
            $this->_containing_block["x"] = $x;
        }

        if (is_numeric($y)) {
            $this->_containing_block["y"] = $y;
        }

        if (is_numeric($w)) {
            $this->_containing_block["w"] = $w;
        }

        if (is_numeric($h)) {
            $this->_containing_block["h"] = $h;
        }
    }

    /**
     * @param float|float[]|null $x
     * @param float|null $y
     */
    public function set_position($x = null, $y = null)
    {
        if (is_array($x)) {
            list($x, $y) = [$x["x"], $x["y"]];
        }

        if (is_numeric($x)) {
            $this->_position["x"] = $x;
        }

        if (is_numeric($y)) {
            $this->_position["y"] = $y;
        }
    }

    /**
     * @param float $opacity
     */
    public function set_opacity(float $opacity): void
    {
        $parent = $this->get_parent();
        $base_opacity = $parent && $parent->_opacity !== null ? $parent->_opacity : 1.0;
        $this->_opacity = $base_opacity * $opacity;
    }

    /**
     * @param LineBox $line
     */
    public function set_containing_line(LineBox $line)
    {
        $this->_containing_line = $line;
    }

    /**
     * Indicates if the margin height is auto sized
     *
     * @return bool
     */
    public function is_auto_height()
    {
        $style = $this->_style;

        return in_array(
            "auto",
            [
                $style->height,
                $style->margin_top,
                $style->margin_bottom,
                $style->border_top_width,
                $style->border_bottom_width,
                $style->padding_top,
                $style->padding_bottom,
                $this->_containing_block["h"]
            ],
            true
        );
    }

    /**
     * Indicates if the margin width is auto sized
     *
     * @return bool
     */
    public function is_auto_width()
    {
        $style = $this->_style;

        return in_array(
            "auto",
            [
                $style->width,
                $style->margin_left,
                $style->margin_right,
                $style->border_left_width,
                $style->border_right_width,
                $style->padding_left,
                $style->padding_right,
                $this->_containing_block["w"]
            ],
            true
        );
    }

    /**
     * Tells if the frame is a text node
     *
     * @return bool
     */
    public function is_text_node(): bool
    {
        if (isset($this->_is_cache["text_node"])) {
            return $this->_is_cache["text_node"];
        }

        return $this->_is_cache["text_node"] = ($this->get_node()->nodeName === "#text");
    }

    /**
     * @return bool
     */
    public function is_positioned(): bool
    {
        if (isset($this->_is_cache["positioned"])) {
            return $this->_is_cache["positioned"];
        }

        $position = $this->get_style()->position;

        return $this->_is_cache["positioned"] = in_array($position, Style::POSITIONED_TYPES, true);
    }

    /**
     * @return bool
     */
    public function is_absolute(): bool
    {
        if (isset($this->_is_cache["absolute"])) {
            return $this->_is_cache["absolute"];
        }

        return $this->_is_cache["absolute"] = $this->get_style()->is_absolute();
    }

    /**
     * Whether the frame is a block container.
     *
     * @return bool
     */
    public function is_block(): bool
    {
        if (isset($this->_is_cache["block"])) {
            return $this->_is_cache["block"];
        }

        return $this->_is_cache["block"] = in_array($this->get_style()->display, Style::BLOCK_TYPES, true);
    }

    /**
     * Whether the frame has a block-level display type.
     *
     * @return bool
     */
    public function is_block_level(): bool
    {
        if (isset($this->_is_cache["block_level"])) {
            return $this->_is_cache["block_level"];
        }

        $display = $this->get_style()->display;

        return $this->_is_cache["block_level"] = in_array($display, Style::BLOCK_LEVEL_TYPES, true);
    }

    /**
     * Whether the frame has an inline-level display type.
     *
     * @return bool
     */
    public function is_inline_level(): bool
    {
        if (isset($this->_is_cache["inline_level"])) {
            return $this->_is_cache["inline_level"];
        }

        $display = $this->get_style()->display;

        return $this->_is_cache["inline_level"] = in_array($display, Style::INLINE_LEVEL_TYPES, true);
    }

    /**
     * @return bool
     */
    public function is_in_flow(): bool
    {
        if (isset($this->_is_cache["in_flow"])) {
            return $this->_is_cache["in_flow"];
        }

        return $this->_is_cache["in_flow"] = $this->get_style()->is_in_flow();
    }

    /**
     * @return bool
     */
    public function is_pre(): bool
    {
        if (isset($this->_is_cache["pre"])) {
            return $this->_is_cache["pre"];
        }

        $white_space = $this->get_style()->white_space;

        return $this->_is_cache["pre"] = in_array($white_space, ["pre", "pre-wrap"], true);
    }

    /**
     * @return bool
     */
    public function is_table(): bool
    {
        if (isset($this->_is_cache["table"])) {
            return $this->_is_cache["table"];
        }

        $display = $this->get_style()->display;

        return $this->_is_cache["table"] = in_array($display, Style::TABLE_TYPES, true);
    }


    /**
     * Inserts a new child at the beginning of the Frame
     *
     * @param Frame $child       The new Frame to insert
     * @param bool  $update_node Whether or not to update the DOM
     */
    public function prepend_child(Frame $child, $update_node = true)
    {
        if ($update_node) {
            $this->_node->insertBefore($child->_node, $this->_first_child ? $this->_first_child->_node : null);
        }

        // Remove the child from its parent
        if ($child->_parent) {
            $child->_parent->remove_child($child, false);
        }

        $child->_parent = $this;
        $child->_prev_sibling = null;

        // Handle the first child
        if (!$this->_first_child) {
            $this->_first_child = $child;
            $this->_last_child = $child;
            $child->_next_sibling = null;
        } else {
            $this->_first_child->_prev_sibling = $child;
            $child->_next_sibling = $this->_first_child;
            $this->_first_child = $child;
        }
    }

    /**
     * Inserts a new child at the end of the Frame
     *
     * @param Frame $child       The new Frame to insert
     * @param bool  $update_node Whether or not to update the DOM
     */
    public function append_child(Frame $child, $update_node = true)
    {
        if ($update_node) {
            $this->_node->appendChild($child->_node);
        }

        // Remove the child from its parent
        if ($child->_parent) {
            $child->_parent->remove_child($child, false);
        }

        $child->_parent = $this;
        $decorator = $child->get_decorator();
        // force an update to the cached parent
        if ($decorator !== null) {
            $decorator->get_parent(false);
        }
        $child->_next_sibling = null;

        // Handle the first child
        if (!$this->_last_child) {
            $this->_first_child = $child;
            $this->_last_child = $child;
            $child->_prev_sibling = null;
        } else {
            $this->_last_child->_next_sibling = $child;
            $child->_prev_sibling = $this->_last_child;
            $this->_last_child = $child;
        }
    }

    /**
     * Inserts a new child immediately before the specified frame
     *
     * @param Frame $new_child   The new Frame to insert
     * @param Frame $ref         The Frame after the new Frame
     * @param bool  $update_node Whether or not to update the DOM
     *
     * @throws Exception
     */
    public function insert_child_before(Frame $new_child, Frame $ref, $update_node = true)
    {
        if ($ref === $this->_first_child) {
            $this->prepend_child($new_child, $update_node);

            return;
        }

        if (is_null($ref)) {
            $this->append_child($new_child, $update_node);

            return;
        }

        if ($ref->_parent !== $this) {
            throw new Exception("Reference child is not a child of this node.");
        }

        // Update the node
        if ($update_node) {
            $this->_node->insertBefore($new_child->_node, $ref->_node);
        }

        // Remove the child from its parent
        if ($new_child->_parent) {
            $new_child->_parent->remove_child($new_child, false);
        }

        $new_child->_parent = $this;
        $new_child->_next_sibling = $ref;
        $new_child->_prev_sibling = $ref->_prev_sibling;

        if ($ref->_prev_sibling) {
            $ref->_prev_sibling->_next_sibling = $new_child;
        }

        $ref->_prev_sibling = $new_child;
    }

    /**
     * Inserts a new child immediately after the specified frame
     *
     * @param Frame $new_child   The new Frame to insert
     * @param Frame $ref         The Frame before the new Frame
     * @param bool  $update_node Whether or not to update the DOM
     *
     * @throws Exception
     */
    public function insert_child_after(Frame $new_child, Frame $ref, $update_node = true)
    {
        if ($ref === $this->_last_child) {
            $this->append_child($new_child, $update_node);

            return;
        }

        if (is_null($ref)) {
            $this->prepend_child($new_child, $update_node);

            return;
        }

        if ($ref->_parent !== $this) {
            throw new Exception("Reference child is not a child of this node.");
        }

        // Update the node
        if ($update_node) {
            if ($ref->_next_sibling) {
                $next_node = $ref->_next_sibling->_node;
                $this->_node->insertBefore($new_child->_node, $next_node);
            } else {
                $new_child->_node = $this->_node->appendChild($new_child->_node);
            }
        }

        // Remove the child from its parent
        if ($new_child->_parent) {
            $new_child->_parent->remove_child($new_child, false);
        }

        $new_child->_parent = $this;
        $new_child->_prev_sibling = $ref;
        $new_child->_next_sibling = $ref->_next_sibling;

        if ($ref->_next_sibling) {
            $ref->_next_sibling->_prev_sibling = $new_child;
        }

        $ref->_next_sibling = $new_child;
    }

    /**
     * Remove a child frame
     *
     * @param Frame $child
     * @param bool  $update_node Whether or not to remove the DOM node
     *
     * @throws Exception
     * @return Frame The removed child frame
     */
    public function remove_child(Frame $child, $update_node = true)
    {
        if ($child->_parent !== $this) {
            throw new Exception("Child not found in this frame");
        }

        if ($update_node) {
            $this->_node->removeChild($child->_node);
        }

        if ($child === $this->_first_child) {
            $this->_first_child = $child->_next_sibling;
        }

        if ($child === $this->_last_child) {
            $this->_last_child = $child->_prev_sibling;
        }

        if ($child->_prev_sibling) {
            $child->_prev_sibling->_next_sibling = $child->_next_sibling;
        }

        if ($child->_next_sibling) {
            $child->_next_sibling->_prev_sibling = $child->_prev_sibling;
        }

        $child->_next_sibling = null;
        $child->_prev_sibling = null;
        $child->_parent = null;

        return $child;
    }

    //........................................................................

    // Debugging function:
    /**
     * @return string
     */
    public function __toString()
    {
        // Skip empty text frames
//     if ( $this->is_text_node() &&
//          preg_replace("/\s/", "", $this->_node->data) === "" )
//       return "";


        $str = "<b>" . $this->_node->nodeName . ":</b><br/>";
        //$str .= spl_object_hash($this->_node) . "<br/>";
        $str .= "Id: " . $this->get_id() . "<br/>";
        $str .= "Class: " . get_class($this) . "<br/>";

        if ($this->is_text_node()) {
            $tmp = htmlspecialchars($this->_node->nodeValue);
            $str .= "<pre>'" . mb_substr($tmp, 0, 70) .
                (mb_strlen($tmp) > 70 ? "..." : "") . "'</pre>";
        } elseif ($css_class = $this->_node->getAttribute("class")) {
            $str .= "CSS class: '$css_class'<br/>";
        }

        if ($this->_parent) {
            $str .= "\nParent:" . $this->_parent->_node->nodeName .
                " (" . spl_object_hash($this->_parent->_node) . ") " .
                "<br/>";
        }

        if ($this->_prev_sibling) {
            $str .= "Prev: " . $this->_prev_sibling->_node->nodeName .
                " (" . spl_object_hash($this->_prev_sibling->_node) . ") " .
                "<br/>";
        }

        if ($this->_next_sibling) {
            $str .= "Next: " . $this->_next_sibling->_node->nodeName .
                " (" . spl_object_hash($this->_next_sibling->_node) . ") " .
                "<br/>";
        }

        $d = $this->get_decorator();
        while ($d && $d != $d->get_decorator()) {
            $str .= "Decorator: " . get_class($d) . "<br/>";
            $d = $d->get_decorator();
        }

        $str .= "Position: " . Helpers::pre_r($this->_position, true);
        $str .= "\nContaining block: " . Helpers::pre_r($this->_containing_block, true);
        $str .= "\nMargin width: " . Helpers::pre_r($this->get_margin_width(), true);
        $str .= "\nMargin height: " . Helpers::pre_r($this->get_margin_height(), true);

        $str .= "\nStyle: <pre>" . $this->_style->__toString() . "</pre>";

        if ($this->_decorator instanceof FrameDecorator\Block) {
            $str .= "Lines:<pre>";
            foreach ($this->_decorator->get_line_boxes() as $line) {
                foreach ($line->get_frames() as $frame) {
                    if ($frame instanceof FrameDecorator\Text) {
                        $str .= "\ntext: ";
                        $str .= "'" . htmlspecialchars($frame->get_text()) . "'";
                    } else {
                        $str .= "\nBlock: " . $frame->get_node()->nodeName . " (" . spl_object_hash($frame->get_node()) . ")";
                    }
                }

                $str .=
                    "\ny => " . $line->y . "\n" .
                    "w => " . $line->w . "\n" .
                    "h => " . $line->h . "\n" .
                    "left => " . $line->left . "\n" .
                    "right => " . $line->right . "\n";
            }
            $str .= "</pre>";
        }

        $str .= "\n";
        if (php_sapi_name() === "cli") {
            $str = strip_tags(str_replace(["<br/>", "<b>", "</b>"],
                ["\n", "", ""],
                $str));
        }

        return $str;
    }
}
<?php
/**
 * @package dompdf
 * @link    https://github.com/dompdf/dompdf
 * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
 */
namespace Dompdf\Frame;

use Dompdf\Dompdf;
use Dompdf\Exception;
use Dompdf\Frame;
use Dompdf\FrameDecorator\AbstractFrameDecorator;
use Dompdf\FrameDecorator\Page as PageFrameDecorator;
use Dompdf\FrameReflower\Page as PageFrameReflower;
use Dompdf\Positioner\AbstractPositioner;
use DOMXPath;

/**
 * Contains frame decorating logic
 *
 * This class is responsible for assigning the correct {@link AbstractFrameDecorator},
 * {@link AbstractPositioner}, and {@link AbstractFrameReflower} objects to {@link Frame}
 * objects.  This is determined primarily by the Frame's display type, but
 * also by the Frame's node's type (e.g. DomElement vs. #text)
 *
 * @package dompdf
 */
class Factory
{

    /**
     * Array of positioners for specific frame types
     *
     * @var AbstractPositioner[]
     */
    protected static $_positioners;

    /**
     * Decorate the root Frame
     *
     * @param Frame  $root   The frame to decorate
     * @param Dompdf $dompdf The dompdf instance
     *
     * @return PageFrameDecorator
     */
    public static function decorate_root(Frame $root, Dompdf $dompdf): PageFrameDecorator
    {
        $frame = new PageFrameDecorator($root, $dompdf);
        $frame->set_reflower(new PageFrameReflower($frame));
        $root->set_decorator($frame);

        return $frame;
    }

    /**
     * Decorate a Frame
     *
     * @param Frame      $frame  The frame to decorate
     * @param Dompdf     $dompdf The dompdf instance
     * @param Frame|null $root   The root of the frame
     *
     * @throws Exception
     * @return AbstractFrameDecorator|null
     * FIXME: this is admittedly a little smelly...
     */
    public static function decorate_frame(Frame $frame, Dompdf $dompdf, ?Frame $root = null): ?AbstractFrameDecorator
    {
        $style = $frame->get_style();
        $display = $style->display;

        switch ($display) {

            case "block":
                $positioner = "Block";
                $decorator = "Block";
                $reflower = "Block";
                break;

            case "inline-block":
                $positioner = "Inline";
                $decorator = "Block";
                $reflower = "Block";
                break;

            case "inline":
                $positioner = "Inline";
                if ($frame->is_text_node()) {
                    $decorator = "Text";
                    $reflower = "Text";
                } else {
                    $decorator = "Inline";
                    $reflower = "Inline";
                }
                break;

            case "table":
                $positioner = "Block";
                $decorator = "Table";
                $reflower = "Table";
                break;

            case "inline-table":
                $positioner = "Inline";
                $decorator = "Table";
                $reflower = "Table";
                break;

            case "table-row-group":
            case "table-header-group":
            case "table-footer-group":
                $positioner = "NullPositioner";
                $decorator = "TableRowGroup";
                $reflower = "TableRowGroup";
                break;

            case "table-row":
                $positioner = "NullPositioner";
                $decorator = "TableRow";
                $reflower = "TableRow";
                break;

            case "table-cell":
                $positioner = "TableCell";
                $decorator = "TableCell";
                $reflower = "TableCell";
                break;

            case "list-item":
                $positioner = "Block";
                $decorator = "Block";
                $reflower = "Block";
                break;

            case "-dompdf-list-bullet":
                if ($style->list_style_position === "inside") {
                    $positioner = "Inline";
                } else {
                    $positioner = "ListBullet";
                }

                if ($style->list_style_image !== "none") {
                    $decorator = "ListBulletImage";
                } else {
                    $decorator = "ListBullet";
                }

                $reflower = "ListBullet";
                break;

            case "-dompdf-image":
                $positioner = "Inline";
                $decorator = "Image";
                $reflower = "Image";
                break;

            case "-dompdf-br":
                $positioner = "Inline";
                $decorator = "Inline";
                $reflower = "Inline";
                break;

            default:
            case "none":
                if ($style->_dompdf_keep !== "yes") {
                    // Remove the node and the frame
                    $frame->get_parent()->remove_child($frame);
                    return null;
                }

                $positioner = "NullPositioner";
                $decorator = "NullFrameDecorator";
                $reflower = "NullFrameReflower";
                break;
        }

        // Handle CSS position
        $position = $style->position;

        if ($position === "absolute") {
            $positioner = "Absolute";
        } elseif ($position === "fixed") {
            $positioner = "Fixed";
        }

        $node = $frame->get_node();

        // Handle nodeName
        if ($node->nodeName === "img") {
            $style->set_prop("display", "-dompdf-image");
            $decorator = "Image";
            $reflower = "Image";
        }

        $decorator  = "Dompdf\\FrameDecorator\\$decorator";
        $reflower   = "Dompdf\\FrameReflower\\$reflower";

        /** @var AbstractFrameDecorator $deco */
        $deco = new $decorator($frame, $dompdf);

        $deco->set_positioner(self::getPositionerInstance($positioner));
        $deco->set_reflower(new $reflower($deco, $dompdf->getFontMetrics()));

        if ($root) {
            $deco->set_root($root);
        }

        if ($display === "list-item") {
            // Insert a list-bullet frame
            $xml = $dompdf->getDom();
            $bullet_node = $xml->createElement("bullet"); // arbitrary choice
            $b_f = new Frame($bullet_node);

            $node = $frame->get_node();
            $parent_node = $node->parentNode;
            if ($parent_node && $parent_node instanceof \DOMElement) {
                if (!$parent_node->hasAttribute("dompdf-children-count")) {
                    $xpath = new DOMXPath($xml);
                    $count = $xpath->query("li", $parent_node)->length;
                    $parent_node->setAttribute("dompdf-children-count", $count);
                }

                if (is_numeric($node->getAttribute("value"))) {
                    $index = intval($node->getAttribute("value"));
                } else {
                    if (!$parent_node->hasAttribute("dompdf-counter")) {
                        $index = ($parent_node->hasAttribute("start") ? $parent_node->getAttribute("start") : 1);
                    } else {
                        $index = (int)$parent_node->getAttribute("dompdf-counter") + 1;
                    }
                }

                $parent_node->setAttribute("dompdf-counter", $index);
                $bullet_node->setAttribute("dompdf-counter", $index);
            }

            $new_style = $dompdf->getCss()->create_style();
            $new_style->set_prop("display", "-dompdf-list-bullet");
            $new_style->inherit($style);
            $b_f->set_style($new_style);

            $deco->prepend_child(Factory::decorate_frame($b_f, $dompdf, $root));
        }

        return $deco;
    }

    /**
     * Creates Positioners
     *
     * @param string $type Type of positioner to use
     *
     * @return AbstractPositioner
     */
    protected static function getPositionerInstance(string $type): AbstractPositioner
    {
        if (!isset(self::$_positioners[$type])) {
            $class = '\\Dompdf\\Positioner\\'.$type;
            self::$_positioners[$type] = new $class();
        }
        return self::$_positioners[$type];
    }
}
<?php
/**
 * @package dompdf
 * @link    https://github.com/dompdf/dompdf
 * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
 */
namespace Dompdf\Frame;

use Iterator;
use Dompdf\Frame;

/**
 * Linked-list Iterator
 *
 * Returns children in order and allows for the list to change during iteration,
 * provided the changes occur to or after the current element.
 *
 * @package dompdf
 */
class FrameListIterator implements Iterator
{
    /**
     * @var Frame
     */
    protected $parent;

    /**
     * @var Frame|null
     */
    protected $cur;

    /**
     * @var Frame|null
     */
    protected $prev;

    /**
     * @var int
     */
    protected $num;

    /**
     * @param Frame $frame
     */
    public function __construct(Frame $frame)
    {
        $this->parent = $frame;
        $this->rewind();
    }

    public function rewind(): void
    {
        $this->cur = $this->parent->get_first_child();
        $this->prev = null;
        $this->num = 0;
    }

    /**
     * @return bool
     */
    public function valid(): bool
    {
        return $this->cur !== null;
    }

    /**
     * @return int
     */
    public function key(): int
    {
        return $this->num;
    }

    /**
     * @return Frame|null
     */
    public function current(): ?Frame
    {
        return $this->cur;
    }

    public function next(): void
    {
        if ($this->cur === null) {
            return;
        }

        if ($this->cur->get_parent() === $this->parent) {
            $this->prev = $this->cur;
            $this->cur = $this->cur->get_next_sibling();
            $this->num++;
        } else {
            // Continue from the previous child if the current frame has been
            // moved to another parent
            $this->cur = $this->prev !== null
                ? $this->prev->get_next_sibling()
                : $this->parent->get_first_child();
        }
    }
}
<?php
/**
 * @package dompdf
 * @link    https://github.com/dompdf/dompdf
 * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
 */
namespace Dompdf\Frame;

use DOMDocument;
use DOMNode;
use DOMElement;
use DOMXPath;

use Dompdf\Exception;
use Dompdf\Frame;
use IteratorAggregate;

/**
 * Represents an entire document as a tree of frames
 *
 * The FrameTree consists of {@link Frame} objects each tied to specific
 * DOMNode objects in a specific DomDocument.  The FrameTree has the same
 * structure as the DomDocument, but adds additional capabilities for
 * styling and layout.
 *
 * @package dompdf
 */
class FrameTree implements IteratorAggregate
{
    /**
     * Tags to ignore while parsing the tree
     *
     * @var array
     */
    protected static $HIDDEN_TAGS = [
        "area",
        "base",
        "basefont",
        "head",
        "style",
        "meta",
        "title",
        "colgroup",
        "noembed",
        "param",
        "#comment"
    ];

    /**
     * The main DomDocument
     *
     * @see http://ca2.php.net/manual/en/ref.dom.php
     * @var DOMDocument
     */
    protected $_dom;

    /**
     * The root node of the FrameTree.
     *
     * @var Frame
     */
    protected $_root;

    /**
     * Subtrees of absolutely positioned elements
     *
     * @var array of Frames
     */
    protected $_absolute_frames;

    /**
     * A mapping of {@link Frame} objects to DOMNode objects
     *
     * @var array
     */
    protected $_registry;

    /**
     * Class constructor
     *
     * @param DOMDocument $dom the main DomDocument object representing the current html document
     */
    public function __construct(DomDocument $dom)
    {
        $this->_dom = $dom;
        $this->_root = null;
        $this->_registry = [];
    }

    /**
     * Returns the DOMDocument object representing the current html document
     *
     * @return DOMDocument
     */
    public function get_dom()
    {
        return $this->_dom;
    }

    /**
     * Returns the root frame of the tree
     *
     * @return Frame
     */
    public function get_root()
    {
        return $this->_root;
    }

    /**
     * Returns a specific frame given its id
     *
     * @param string $id
     *
     * @return Frame|null
     */
    public function get_frame($id)
    {
        return isset($this->_registry[$id]) ? $this->_registry[$id] : null;
    }

    /**
     * Returns a post-order iterator for all frames in the tree
     *
     * @deprecated Iterate the tree directly instead
     * @return FrameTreeIterator
     */
    public function get_frames(): FrameTreeIterator
    {
        return new FrameTreeIterator($this->_root);
    }

    /**
     * Returns a post-order iterator for all frames in the tree
     *
     * @return FrameTreeIterator
     */
    public function getIterator(): FrameTreeIterator
    {
        return new FrameTreeIterator($this->_root);
    }

    /**
     * Builds the tree
     */
    public function build_tree()
    {
        $html = $this->_dom->getElementsByTagName("html")->item(0);
        if (is_null($html)) {
            $html = $this->_dom->firstChild;
        }

        if (is_null($html)) {
            throw new Exception("Requested HTML document contains no data.");
        }

        $this->fix_tables();

        $this->_root = $this->_build_tree_r($html);
    }

    /**
     * Adds missing TBODYs around TR
     */
    protected function fix_tables()
    {
        $xp = new DOMXPath($this->_dom);

        // Move table caption before the table
        // FIXME find a better way to deal with it...
        $captions = $xp->query('//table/caption');
        foreach ($captions as $caption) {
            $table = $caption->parentNode;
            $table->parentNode->insertBefore($caption, $table);
        }

        $firstRows = $xp->query('//table/tr[1]');
        /** @var DOMElement $tableChild */
        foreach ($firstRows as $tableChild) {
            $tbody = $this->_dom->createElement('tbody');
            $tableNode = $tableChild->parentNode;
            do {
                if ($tableChild->nodeName === 'tr') {
                    $tmpNode = $tableChild;
                    $tableChild = $tableChild->nextSibling;
                    $tableNode->removeChild($tmpNode);
                    $tbody->appendChild($tmpNode);
                } else {
                    if ($tbody->hasChildNodes() === true) {
                        $tableNode->insertBefore($tbody, $tableChild);
                        $tbody = $this->_dom->createElement('tbody');
                    }
                    $tableChild = $tableChild->nextSibling;
                }
            } while ($tableChild);
            if ($tbody->hasChildNodes() === true) {
                $tableNode->appendChild($tbody);
            }
        }
    }

    // FIXME: temporary hack, preferably we will improve rendering of sequential #text nodes
    /**
     * Remove a child from a node
     *
     * Remove a child from a node. If the removed node results in two
     * adjacent #text nodes then combine them.
     *
     * @param DOMNode $node the current DOMNode being considered
     * @param array $children an array of nodes that are the children of $node
     * @param int $index index from the $children array of the node to remove
     */
    protected function _remove_node(DOMNode $node, array &$children, $index)
    {
        $child = $children[$index];
        $previousChild = $child->previousSibling;
        $nextChild = $child->nextSibling;
        $node->removeChild($child);
        if (isset($previousChild, $nextChild)) {
            if ($previousChild->nodeName === "#text" && $nextChild->nodeName === "#text") {
                $previousChild->nodeValue .= $nextChild->nodeValue;
                $this->_remove_node($node, $children, $index+1);
            }
        }
        array_splice($children, $index, 1);
    }

    /**
     * Recursively adds {@link Frame} objects to the tree
     *
     * Recursively build a tree of Frame objects based on a dom tree.
     * No layout information is calculated at this time, although the
     * tree may be adjusted (i.e. nodes and frames for generated content
     * and images may be created).
     *
     * @param DOMNode $node the current DOMNode being considered
     *
     * @return Frame
     */
    protected function _build_tree_r(DOMNode $node)
    {
        $frame = new Frame($node);
        $id = $frame->get_id();
        $this->_registry[$id] = $frame;

        if (!$node->hasChildNodes()) {
            return $frame;
        }

        // Store the children in an array so that the tree can be modified
        $children = [];
        $length = $node->childNodes->length;
        for ($i = 0; $i < $length; $i++) {
            $children[] = $node->childNodes->item($i);
        }
        $index = 0;
        // INFO: We don't advance $index if a node is removed to avoid skipping nodes
        while ($index < count($children)) {
            $child = $children[$index];
            $nodeName = strtolower($child->nodeName);

            // Skip non-displaying nodes
            if (in_array($nodeName, self::$HIDDEN_TAGS)) {
                if ($nodeName !== "head" && $nodeName !== "style") {
                    $this->_remove_node($node, $children, $index);
                } else {
                    $index++;
                }
                continue;
            }
            // Skip empty text nodes
            if ($nodeName === "#text" && $child->nodeValue === "") {
                $this->_remove_node($node, $children, $index);
                continue;
            }
            // Skip empty image nodes
            if ($nodeName === "img" && $child->getAttribute("src") === "") {
                $this->_remove_node($node, $children, $index);
                continue;
            }

            if (is_object($child)) {
                $frame->append_child($this->_build_tree_r($child), false);
            }
            $index++;
        }

        return $frame;
    }

    /**
     * @param DOMElement $node
     * @param DOMElement $new_node
     * @param string $pos
     *
     * @return mixed
     */
    public function insert_node(DOMElement $node, DOMElement $new_node, $pos)
    {
        if ($pos === "after" || !$node->firstChild) {
            $node->appendChild($new_node);
        } else {
            $node->insertBefore($new_node, $node->firstChild);
        }

        $this->_build_tree_r($new_node);

        $frame_id = $new_node->getAttribute("frame_id");
        $frame = $this->get_frame($frame_id);

        $parent_id = $node->getAttribute("frame_id");
        $parent = $this->get_frame($parent_id);

        if ($parent) {
            if ($pos === "before") {
                $parent->prepend_child($frame, false);
            } else {
                $parent->append_child($frame, false);
            }
        }

        return $frame_id;
    }
}
<?php
/**
 * @package dompdf
 * @link    https://github.com/dompdf/dompdf
 * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
 */
namespace Dompdf\Frame;

use Iterator;
use Dompdf\Frame;

/**
 * Pre-order Iterator
 *
 * Returns frames in preorder traversal order (parent then children)
 *
 * @package dompdf
 */
class FrameTreeIterator implements Iterator
{
    /**
     * @var Frame
     */
    protected $_root;

    /**
     * @var Frame[]
     */
    protected $_stack = [];

    /**
     * @var int
     */
    protected $_num;

    /**
     * @param Frame $root
     */
    public function __construct(Frame $root)
    {
        $this->_stack[] = $this->_root = $root;
        $this->_num = 0;
    }

    public function rewind(): void
    {
        $this->_stack = [$this->_root];
        $this->_num = 0;
    }

    /**
     * @return bool
     */
    public function valid(): bool
    {
        return count($this->_stack) > 0;
    }

    /**
     * @return int
     */
    public function key(): int
    {
        return $this->_num;
    }

    /**
     * @return Frame
     */
    public function current(): Frame
    {
        return end($this->_stack);
    }

    public function next(): void
    {
        $b = array_pop($this->_stack);
        $this->_num++;

        // Push all children onto the stack in reverse order
        if ($c = $b->get_last_child()) {
            $this->_stack[] = $c;
            while ($c = $c->get_prev_sibling()) {
                $this->_stack[] = $c;
            }
        }
    }
}
<?php
/**
 * @package dompdf
 * @link    https://github.com/dompdf/dompdf
 * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
 */
namespace Dompdf\FrameDecorator;

use DOMElement;
use DOMNode;
use Dompdf\Helpers;
use Dompdf\Dompdf;
use Dompdf\Exception;
use Dompdf\Frame;
use Dompdf\Frame\Factory;
use Dompdf\Frame\FrameListIterator;
use Dompdf\Frame\FrameTreeIterator;
use Dompdf\FrameReflower\AbstractFrameReflower;
use Dompdf\Css\Style;
use Dompdf\Positioner\AbstractPositioner;

/**
 * Base AbstractFrameDecorator class
 *
 * @package dompdf
 */
abstract class AbstractFrameDecorator extends Frame
{
    const DEFAULT_COUNTER = "-dompdf-default-counter";

    /**
     * array([id] => counter_value) (for generated content)
     *
     * @var array
     */
    public $_counters = [];

    /**
     * The root node of the DOM tree
     *
     * @var Frame
     */
    protected $_root;

    /**
     * The decorated frame
     *
     * @var Frame
     */
    protected $_frame;

    /**
     * AbstractPositioner object used to position this frame (Strategy pattern)
     *
     * @var AbstractPositioner
     */
    protected $_positioner;

    /**
     * Reflower object used to calculate frame dimensions (Strategy pattern)
     *
     * @var AbstractFrameReflower
     */
    protected $_reflower;

    /**
     * Reference to the current dompdf instance
     *
     * @var Dompdf
     */
    protected $_dompdf;

    /**
     * First block parent
     *
     * @var Block
     */
    private $_block_parent;

    /**
     * First positioned parent (position: relative | absolute | fixed)
     *
     * @var AbstractFrameDecorator
     */
    private $_positioned_parent;

    /**
     * Cache for the get_parent while loop results
     *
     * @var Frame
     */
    private $_cached_parent;

    /**
     * Whether generated content and counters have been set.
     *
     * @var bool
     */
    public $content_set = false;

    /**
     * Whether the frame has been split
     *
     * @var bool
     */
    public $is_split = false;

    /**
     * Whether the frame is a split-off frame
     *
     * @var bool
     */
    public $is_split_off = false;

    /**
     * Class constructor
     *
     * @param Frame $frame   The decoration target
     * @param Dompdf $dompdf The Dompdf object
     */
    function __construct(Frame $frame, Dompdf $dompdf)
    {
        $this->_frame = $frame;
        $this->_root = null;
        $this->_dompdf = $dompdf;
        $frame->set_decorator($this);
    }

    /**
     * "Destructor": forcibly free all references held by this object
     *
     * @param bool $recursive if true, call dispose on all children
     */
    function dispose($recursive = false)
    {
        if ($recursive) {
            while ($child = $this->get_first_child()) {
                $child->dispose(true);
            }
        }

        $this->_root = null;
        unset($this->_root);

        $this->_frame->dispose(true);
        $this->_frame = null;
        unset($this->_frame);

        $this->_positioner = null;
        unset($this->_positioner);

        $this->_reflower = null;
        unset($this->_reflower);
    }

    /**
     * Return a copy of this frame with $node as its node
     *
     * @param DOMNode $node
     *
     * @return AbstractFrameDecorator
     */
    function copy(DOMNode $node)
    {
        $frame = new Frame($node);
        $style = clone $this->_frame->get_style();

        $style->reset();
        $frame->set_style($style);

        if ($node instanceof DOMElement && $node->hasAttribute("id")) {
            $node->setAttribute("data-dompdf-original-id", $node->getAttribute("id"));
            $node->removeAttribute("id");
        }

        return Factory::decorate_frame($frame, $this->_dompdf, $this->_root);
    }

    /**
     * Create a deep copy: copy this node and all children
     *
     * @return AbstractFrameDecorator
     */
    function deep_copy()
    {
        $node = $this->_frame->get_node()->cloneNode();
        $frame = new Frame($node);
        $style = clone $this->_frame->get_style();

        $style->reset();
        $frame->set_style($style);

        if ($node instanceof DOMElement && $node->hasAttribute("id")) {
            $node->setAttribute("data-dompdf-original-id", $node->getAttribute("id"));
            $node->removeAttribute("id");
        }

        $deco = Factory::decorate_frame($frame, $this->_dompdf, $this->_root);

        foreach ($this->get_children() as $child) {
            $deco->append_child($child->deep_copy());
        }

        return $deco;
    }

    /**
     * Create an anonymous child frame, inheriting styles from this frame.
     *
     * @param string $node_name
     * @param string $display
     *
     * @return AbstractFrameDecorator
     */
    public function create_anonymous_child(string $node_name, string $display): AbstractFrameDecorator
    {
        $style = $this->get_style();
        $child_style = $style->get_stylesheet()->create_style();
        $child_style->set_prop("display", $display);
        $child_style->inherit($style);

        $node = $this->get_node()->ownerDocument->createElement($node_name);
        $frame = new Frame($node);
        $frame->set_style($child_style);

        return Factory::decorate_frame($frame, $this->_dompdf, $this->_root);
    }

    function reset()
    {
        $this->_frame->reset();
        $this->_reflower->reset();
        $this->reset_generated_content();
        $this->revert_counter_increment();

        $this->content_set = false;
        $this->_counters = [];

        // clear parent lookup caches
        $this->_cached_parent = null;
        $this->_block_parent = null;
        $this->_positioned_parent = null;

        // Reset all children
        foreach ($this->get_children() as $child) {
            $child->reset();
        }
    }

    /**
     * If this represents a generated node then child nodes represent generated
     * content. Remove the children since the content will be generated next
     * time this frame is reflowed.
     */
    protected function reset_generated_content(): void
    {
        if ($this->content_set
            && $this->get_node()->nodeName === "dompdf_generated"
        ) {
            $content = $this->get_style()->content;

            if ($content !== "normal" && $content !== "none") {
                foreach ($this->get_children() as $child) {
                    $this->remove_child($child);
                }
            }
        }
    }

    /**
     * Decrement any counters that were incremented on the current node, unless
     * that node is the body.
     */
    protected function revert_counter_increment(): void
    {
        if ($this->content_set
            && $this->get_node()->nodeName !== "body"
            && ($decrement = $this->get_style()->counter_increment) !== "none"
        ) {
            $this->decrement_counters($decrement);
        }
    }

    // Getters -----------

    function get_id()
    {
        return $this->_frame->get_id();
    }

    /**
     * @return Frame
     */
    function get_frame()
    {
        return $this->_frame;
    }

    function get_node()
    {
        return $this->_frame->get_node();
    }

    function get_style()
    {
        return $this->_frame->get_style();
    }

    /**
     * @deprecated
     */
    function get_original_style()
    {
        return $this->_frame->get_style();
    }

    function get_containing_block($i = null)
    {
        return $this->_frame->get_containing_block($i);
    }

    function get_position($i = null)
    {
        return $this->_frame->get_position($i);
    }

    /**
     * @return Dompdf
     */
    function get_dompdf()
    {
        return $this->_dompdf;
    }

    public function get_margin_width(): float
    {
        return $this->_frame->get_margin_width();
    }

    public function get_margin_height(): float
    {
        return $this->_frame->get_margin_height();
    }

    public function get_content_box(): array
    {
        return $this->_frame->get_content_box();
    }

    public function get_padding_box(): array
    {
        return $this->_frame->get_padding_box();
    }

    public function get_border_box(): array
    {
        return $this->_frame->get_border_box();
    }

    function set_id($id)
    {
        $this->_frame->set_id($id);
    }

    public function set_style(Style $style): void
    {
        $this->_frame->set_style($style);
    }

    function set_containing_block($x = null, $y = null, $w = null, $h = null)
    {
        $this->_frame->set_containing_block($x, $y, $w, $h);
    }

    function set_position($x = null, $y = null)
    {
        $this->_frame->set_position($x, $y);
    }

    function is_auto_height()
    {
        return $this->_frame->is_auto_height();
    }

    function is_auto_width()
    {
        return $this->_frame->is_auto_width();
    }

    function __toString()
    {
        return $this->_frame->__toString();
    }

    function prepend_child(Frame $child, $update_node = true)
    {
        while ($child instanceof AbstractFrameDecorator) {
            $child = $child->_frame;
        }

        $this->_frame->prepend_child($child, $update_node);
    }

    function append_child(Frame $child, $update_node = true)
    {
        while ($child instanceof AbstractFrameDecorator) {
            $child = $child->_frame;
        }

        $this->_frame->append_child($child, $update_node);
    }

    function insert_child_before(Frame $new_child, Frame $ref, $update_node = true)
    {
        while ($new_child instanceof AbstractFrameDecorator) {
            $new_child = $new_child->_frame;
        }

        if ($ref instanceof AbstractFrameDecorator) {
            $ref = $ref->_frame;
        }

        $this->_frame->insert_child_before($new_child, $ref, $update_node);
    }

    function insert_child_after(Frame $new_child, Frame $ref, $update_node = true)
    {
        $insert_frame = $new_child;
        while ($insert_frame instanceof AbstractFrameDecorator) {
            $insert_frame = $insert_frame->_frame;
        }

        $reference_frame = $ref;
        while ($reference_frame instanceof AbstractFrameDecorator) {
            $reference_frame = $reference_frame->_frame;
        }

        $this->_frame->insert_child_after($insert_frame, $reference_frame, $update_node);
    }

    function remove_child(Frame $child, $update_node = true)
    {
        while ($child instanceof AbstractFrameDecorator) {
            $child = $child->_frame;
        }

        return $this->_frame->remove_child($child, $update_node);
    }

    /**
     * @param bool $use_cache
     * @return AbstractFrameDecorator
     */
    function get_parent($use_cache = true)
    {
        if ($use_cache && $this->_cached_parent) {
            return $this->_cached_parent;
        }
        $p = $this->_frame->get_parent();
        if ($p && $deco = $p->get_decorator()) {
            while ($tmp = $deco->get_decorator()) {
                $deco = $tmp;
            }

            return $this->_cached_parent = $deco;
        } else {
            return $this->_cached_parent = $p;
        }
    }

    /**
     * @return AbstractFrameDecorator
     */
    function get_first_child()
    {
        $c = $this->_frame->get_first_child();
        if ($c && $deco = $c->get_decorator()) {
            while ($tmp = $deco->get_decorator()) {
                $deco = $tmp;
            }

            return $deco;
        } else {
            if ($c) {
                return $c;
            }
        }

        return null;
    }

    /**
     * @return AbstractFrameDecorator
     */
    function get_last_child()
    {
        $c = $this->_frame->get_last_child();
        if ($c && $deco = $c->get_decorator()) {
            while ($tmp = $deco->get_decorator()) {
                $deco = $tmp;
            }

            return $deco;
        } else {
            if ($c) {
                return $c;
            }
        }

        return null;
    }

    /**
     * @return AbstractFrameDecorator
     */
    function get_prev_sibling()
    {
        $s = $this->_frame->get_prev_sibling();
        if ($s && $deco = $s->get_decorator()) {
            while ($tmp = $deco->get_decorator()) {
                $deco = $tmp;
            }

            return $deco;
        } else {
            if ($s) {
                return $s;
            }
        }

        return null;
    }

    /**
     * @return AbstractFrameDecorator
     */
    function get_next_sibling()
    {
        $s = $this->_frame->get_next_sibling();
        if ($s && $deco = $s->get_decorator()) {
            while ($tmp = $deco->get_decorator()) {
                $deco = $tmp;
            }

            return $deco;
        } else {
            if ($s) {
                return $s;
            }
        }

        return null;
    }

    /**
     * @return FrameListIterator<AbstractFrameDecorator>
     */
    public function get_children(): FrameListIterator
    {
        return new FrameListIterator($this);
    }

    /**
     * @return FrameTreeIterator<AbstractFrameDecorator>
     */
    function get_subtree(): FrameTreeIterator
    {
        return new FrameTreeIterator($this);
    }

    function set_positioner(AbstractPositioner $posn)
    {
        $this->_positioner = $posn;
        if ($this->_frame instanceof AbstractFrameDecorator) {
            $this->_frame->set_positioner($posn);
        }
    }

    function set_reflower(AbstractFrameReflower $reflower)
    {
        $this->_reflower = $reflower;
        if ($this->_frame instanceof AbstractFrameDecorator) {
            $this->_frame->set_reflower($reflower);
        }
    }

    /**
     * @return AbstractPositioner
     */
    function get_positioner()
    {
        return $this->_positioner;
    }

    /**
     * @return AbstractFrameReflower
     */
    function get_reflower()
    {
        return $this->_reflower;
    }

    /**
     * @param Frame $root
     */
    function set_root(Frame $root)
    {
        $this->_root = $root;

        if ($this->_frame instanceof AbstractFrameDecorator) {
            $this->_frame->set_root($root);
        }
    }

    /**
     * @return Page
     */
    function get_root()
    {
        return $this->_root;
    }

    /**
     * @return Block
     */
    function find_block_parent()
    {
        // Find our nearest block level parent
        if (isset($this->_block_parent)) {
            return $this->_block_parent;
        }

        $p = $this->get_parent();

        while ($p) {
            if ($p->is_block()) {
                break;
            }

            $p = $p->get_parent();
        }

        return $this->_block_parent = $p;
    }

    /**
     * @return AbstractFrameDecorator
     */
    function find_positioned_parent()
    {
        // Find our nearest relative positioned parent
        if (isset($this->_positioned_parent)) {
            return $this->_positioned_parent;
        }

        $p = $this->get_parent();
        while ($p) {
            if ($p->is_positioned()) {
                break;
            }

            $p = $p->get_parent();
        }

        if (!$p) {
            $p = $this->_root;
        }

        return $this->_positioned_parent = $p;
    }

    /**
     * Split this frame at $child.
     * The current frame is cloned and $child and all children following
     * $child are added to the clone.  The clone is then passed to the
     * current frame's parent->split() method.
     *
     * @param Frame|null $child
     * @param bool $page_break
     * @param bool $forced Whether the page break is forced.
     *
     * @throws Exception
     */
    public function split(?Frame $child = null, bool $page_break = false, bool $forced = false): void
    {
        if (is_null($child)) {
            $this->get_parent()->split($this, $page_break, $forced);
            return;
        }

        if ($child->get_parent() !== $this) {
            throw new Exception("Unable to split: frame is not a child of this one.");
        }

        $this->revert_counter_increment();

        $node = $this->_frame->get_node();
        $split = $this->copy($node->cloneNode());

        $style = $this->_frame->get_style();
        $split_style = $split->get_style();

        // Truncate the box decoration at the split, except for the body
        if ($node->nodeName !== "body") {
            // Clear bottom decoration of original frame
            $style->margin_bottom = 0.0;
            $style->padding_bottom = 0.0;
            $style->border_bottom_width = 0.0;
            $style->border_bottom_left_radius = 0.0;
            $style->border_bottom_right_radius = 0.0;

            // Clear top decoration of split frame
            $split_style->margin_top = 0.0;
            $split_style->padding_top = 0.0;
            $split_style->border_top_width = 0.0;
            $split_style->border_top_left_radius = 0.0;
            $split_style->border_top_right_radius = 0.0;
            $split_style->page_break_before = "auto";
        }

        $split_style->text_indent = 0.0;
        $split_style->counter_reset = "none";

        $this->is_split = true;
        $split->is_split_off = true;
        $split->_already_pushed = true;

        $this->get_parent()->insert_child_after($split, $this);

        if ($this instanceof Block) {
            // Remove the frames that will be moved to the new split node from
            // the line boxes
            $this->remove_frames_from_line($child);

            // recalculate the float offsets after paging
            foreach ($this->get_line_boxes() as $line_box) {
                $line_box->get_float_offsets();
            }
        }

        if (!$forced) {
            // Reset top margin in case of an unforced page break
            // https://www.w3.org/TR/CSS21/page.html#allowed-page-breaks
            $child->get_style()->margin_top = 0.0;
        }

        // Add $child and all following siblings to the new split node
        $iter = $child;
        while ($iter) {
            $frame = $iter;
            $iter = $iter->get_next_sibling();
            $frame->reset();
            $split->append_child($frame);
        }

        $this->get_parent()->split($split, $page_break, $forced);

        // Preserve the current counter values. This must be done after the
        // parent split, as counters get reset on frame reset
        $split->_counters = $this->_counters;
    }

    /**
     * @param array $counters
     */
    public function reset_counters(array $counters): void
    {
        foreach ($counters as $id => $value) {
            $this->reset_counter($id, $value);
        }
    }

    /**
     * @param string $id
     * @param int    $value
     */
    public function reset_counter(string $id = self::DEFAULT_COUNTER, int $value = 0): void
    {
        $this->get_parent()->_counters[$id] = $value;
    }

    /**
     * @param array $counters
     */
    public function decrement_counters(array $counters): void
    {
        foreach ($counters as $id => $increment) {
            $this->increment_counter($id, $increment * -1);
        }
    }

    /**
     * @param array $counters
     */
    public function increment_counters(array $counters): void
    {
        foreach ($counters as $id => $increment) {
            $this->increment_counter($id, $increment);
        }
    }

    /**
     * @param string $id
     * @param int    $increment
     */
    public function increment_counter(string $id = self::DEFAULT_COUNTER, int $increment = 1): void
    {
        $counter_frame = $this->lookup_counter_frame($id);

        if ($counter_frame) {
            if (!isset($counter_frame->_counters[$id])) {
                $counter_frame->_counters[$id] = 0;
            }

            $counter_frame->_counters[$id] += $increment;
        }
    }

    /**
     * @param string $id
     * @return AbstractFrameDecorator|null
     */
    function lookup_counter_frame($id = self::DEFAULT_COUNTER)
    {
        $f = $this->get_parent();

        while ($f) {
            if (isset($f->_counters[$id])) {
                return $f;
            }
            $fp = $f->get_parent();

            if (!$fp) {
                return $f;
            }

            $f = $fp;
        }

        return null;
    }

    /**
     * @param string $id
     * @param string $type
     * @return bool|string
     *
     * TODO: What version is the best : this one or the one in ListBullet ?
     */
    function counter_value(string $id = self::DEFAULT_COUNTER, string $type = "decimal")
    {
        $type = mb_strtolower($type);

        if (!isset($this->_counters[$id])) {
            $this->_counters[$id] = 0;
        }

        $value = $this->_counters[$id];

        switch ($type) {
            default:
            case "decimal":
                return $value;

            case "decimal-leading-zero":
                return str_pad($value, 2, "0", STR_PAD_LEFT);

            case "lower-roman":
                return Helpers::dec2roman($value);

            case "upper-roman":
                return mb_strtoupper(Helpers::dec2roman($value));

            case "lower-latin":
            case "lower-alpha":
                return chr((($value - 1) % 26) + ord('a'));

            case "upper-latin":
            case "upper-alpha":
                return chr((($value - 1) % 26) + ord('A'));

            case "lower-greek":
                return Helpers::unichr($value + 944);

            case "upper-greek":
                return Helpers::unichr($value + 912);
        }
    }

    final function position()
    {
        $this->_positioner->position($this);
    }

    /**
     * @param float $offset_x
     * @param float $offset_y
     * @param bool  $ignore_self
     */
    final function move(float $offset_x, float $offset_y, bool $ignore_self = false): void
    {
        $this->_positioner->move($this, $offset_x, $offset_y, $ignore_self);
    }

    /**
     * @param Block|null $block
     */
    final function reflow(Block $block = null)
    {
        // Uncomment this to see the frames before they're laid out, instead of
        // during rendering.
        //echo $this->_frame; flush();
        $this->_reflower->reflow($block);
    }

    /**
     * @return array
     */
    final public function get_min_max_width(): array
    {
        return $this->_reflower->get_min_max_width();
    }
}
<?php
/**
 * @package dompdf
 * @link    https://github.com/dompdf/dompdf
 * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
 */
namespace Dompdf\FrameDecorator;

use Dompdf\Dompdf;
use Dompdf\Frame;
use Dompdf\LineBox;

/**
 * Decorates frames for block layout
 *
 * @package dompdf
 */
class Block extends AbstractFrameDecorator
{
    /**
     * Current line index
     *
     * @var int
     */
    protected $_cl;

    /**
     * The block's line boxes
     *
     * @var LineBox[]
     */
    protected $_line_boxes;

    /**
     * List of markers that have not found their line box to vertically align
     * with yet. Markers are collected by nested block containers until an
     * inline line box is found at the start of the block.
     *
     * @var ListBullet[]
     */
    protected $dangling_markers;

    /**
     * Block constructor.
     * @param Frame $frame
     * @param Dompdf $dompdf
     */
    function __construct(Frame $frame, Dompdf $dompdf)
    {
        parent::__construct($frame, $dompdf);

        $this->_line_boxes = [new LineBox($this)];
        $this->_cl = 0;
        $this->dangling_markers = [];
    }

    function reset()
    {
        parent::reset();

        $this->_line_boxes = [new LineBox($this)];
        $this->_cl = 0;
        $this->dangling_markers = [];
    }

    /**
     * @return LineBox
     */
    function get_current_line_box()
    {
        return $this->_line_boxes[$this->_cl];
    }

    /**
     * @return int
     */
    function get_current_line_number()
    {
        return $this->_cl;
    }

    /**
     * @return LineBox[]
     */
    function get_line_boxes()
    {
        return $this->_line_boxes;
    }

    /**
     * @param int $line_number
     * @return int
     */
    function set_current_line_number($line_number)
    {
        $line_boxes_count = count($this->_line_boxes);
        $cl = max(min($line_number, $line_boxes_count), 0);
        return ($this->_cl = $cl);
    }

    /**
     * @param int $i
     */
    function clear_line($i)
    {
        if (isset($this->_line_boxes[$i])) {
            unset($this->_line_boxes[$i]);
        }
    }

    /**
     * @param Frame $frame
     * @return LineBox|null
     */
    public function add_frame_to_line(Frame $frame): ?LineBox
    {
        $current_line = $this->_line_boxes[$this->_cl];
        $frame->set_containing_line($current_line);

        // Inline frames are currently treated as wrappers, and are not actually
        // added to the line
        if ($frame instanceof Inline) {
            return null;
        }

        $current_line->add_frame($frame);

        $this->increase_line_width($frame->get_margin_width());
        $this->maximize_line_height($frame->get_margin_height(), $frame);

        // Add any dangling list markers to the first line box if it is inline
        if ($this->_cl === 0 && $current_line->inline
            && $this->dangling_markers !== []
        ) {
            foreach ($this->dangling_markers as $marker) {
                $current_line->add_list_marker($marker);
                $this->maximize_line_height($marker->get_margin_height(), $marker);
            }

            $this->dangling_markers = [];
        }

        return $current_line;
    }

    /**
     * Remove the given frame and all following frames and lines from the block.
     *
     * @param Frame $frame
     */
    public function remove_frames_from_line(Frame $frame): void
    {
        // Inline frames are not added to line boxes themselves, only their
        // text frame children
        $actualFrame = $frame;
        while ($actualFrame !== null && $actualFrame instanceof Inline) {
            $actualFrame = $actualFrame->get_first_child();
        }

        if ($actualFrame === null) {
            return;
        }

        // Search backwards through the lines for $frame
        $frame = $actualFrame;
        $i = $this->_cl;
        $j = null;

        while ($i > 0) {
            $line = $this->_line_boxes[$i];
            foreach ($line->get_frames() as $index => $f) {
                if ($frame === $f) {
                    $j = $index;
                    break 2;
                }
            }
            $i--;
        }

        if ($j === null) {
            return;
        }

        // Remove all lines that follow
        for ($k = $this->_cl; $k > $i; $k--) {
            unset($this->_line_boxes[$k]);
        }

        // Remove the line, if it is empty
        if ($j > 0) {
            $line->remove_frames($j);
        } else {
            unset($this->_line_boxes[$i]);
        }

        // Reset array indices
        $this->_line_boxes = array_values($this->_line_boxes);
        $this->_cl = count($this->_line_boxes) - 1;
    }

    /**
     * @param float $w
     */
    public function increase_line_width(float $w): void
    {
        $this->_line_boxes[$this->_cl]->w += $w;
    }

    /**
     * @param float $val
     * @param Frame $frame
     */
    public function maximize_line_height(float $val, Frame $frame): void
    {
        if ($val > $this->_line_boxes[$this->_cl]->h) {
            $this->_line_boxes[$this->_cl]->tallest_frame = $frame;
            $this->_line_boxes[$this->_cl]->h = $val;
        }
    }

    /**
     * @param bool $br
     */
    public function add_line(bool $br = false): void
    {
        $line = $this->_line_boxes[$this->_cl];

        $line->br = $br;
        $y = $line->y + $line->h;

        $new_line = new LineBox($this, $y);

        $this->_line_boxes[++$this->_cl] = $new_line;
    }

    /**
     * @param ListBullet $marker
     */
    public function add_dangling_marker(ListBullet $marker): void
    {
        $this->dangling_markers[] = $marker;
    }

    /**
     * Inherit any dangling markers from the parent block.
     *
     * @param Block $block
     */
    public function inherit_dangling_markers(self $block): void
    {
        if ($block->dangling_markers !== []) {
            $this->dangling_markers = $block->dangling_markers;
            $block->dangling_markers = [];
        }
    }
}
<?php
/**
 * @package dompdf
 * @link    https://github.com/dompdf/dompdf
 * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
 */
namespace Dompdf\FrameDecorator;

use Dompdf\Dompdf;
use Dompdf\Frame;
use Dompdf\Helpers;
use Dompdf\Image\Cache;

/**
 * Decorates frames for image layout and rendering
 *
 * @package dompdf
 */
class Image extends AbstractFrameDecorator
{

    /**
     * The path to the image file (note that remote images are
     * downloaded locally to Options:tempDir).
     *
     * @var string
     */
    protected $_image_url;

    /**
     * The image's file error message
     *
     * @var string
     */
    protected $_image_msg;

    /**
     * Class constructor
     *
     * @param Frame $frame the frame to decorate
     * @param DOMPDF $dompdf the document's dompdf object (required to resolve relative & remote urls)
     */
    function __construct(Frame $frame, Dompdf $dompdf)
    {
        parent::__construct($frame, $dompdf);
        $url = $frame->get_node()->getAttribute("src");

        $debug_png = $dompdf->getOptions()->getDebugPng();
        if ($debug_png) {
            print '[__construct ' . $url . ']';
        }

        list($this->_image_url, /*$type*/, $this->_image_msg) = Cache::resolve_url(
            $url,
            $dompdf->getProtocol(),
            $dompdf->getBaseHost(),
            $dompdf->getBasePath(),
            $dompdf->getOptions()
        );

        if (Cache::is_broken($this->_image_url) &&
            $alt = $frame->get_node()->getAttribute("alt")
        ) {
            $fontMetrics = $dompdf->getFontMetrics();
            $style = $frame->get_style();
            $font = $style->font_family;
            $size = $style->font_size;
            $word_spacing = $style->word_spacing;
            $letter_spacing = $style->letter_spacing;

            $style->width = (4 / 3) * $fontMetrics->getTextWidth($alt, $font, $size, $word_spacing, $letter_spacing);
            $style->height = $fontMetrics->getFontHeight($font, $size);
        }
    }

    /**
     * Get the intrinsic pixel dimensions of the image.
     *
     * @return array Width and height as `float|int`.
     */
    public function get_intrinsic_dimensions(): array
    {
        [$width, $height] = Helpers::dompdf_getimagesize($this->_image_url, $this->_dompdf->getHttpContext());

        return [$width, $height];
    }

    /**
     * Resample the given pixel length according to dpi.
     *
     * @param float|int $length
     * @return float
     */
    public function resample($length): float
    {
        $dpi = $this->_dompdf->getOptions()->getDpi();
        return ($length * 72) / $dpi;
    }

    /**
     * Return the image's url
     *
     * @return string The url of this image
     */
    function get_image_url()
    {
        return $this->_image_url;
    }

    /**
     * Return the image's error message
     *
     * @return string The image's error message
     */
    function get_image_msg()
    {
        return $this->_image_msg;
    }

}
<?php
/**
 * @package dompdf
 * @link    https://github.com/dompdf/dompdf
 * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
 */
namespace Dompdf\FrameDecorator;

use Dompdf\Dompdf;
use Dompdf\Frame;
use Dompdf\Exception;

/**
 * Decorates frames for inline layout
 *
 * @package dompdf
 */
class Inline extends AbstractFrameDecorator
{

    /**
     * Inline constructor.
     * @param Frame $frame
     * @param Dompdf $dompdf
     */
    function __construct(Frame $frame, Dompdf $dompdf)
    {
        parent::__construct($frame, $dompdf);
    }

    /**
     * Vertical padding, border, and margin do not apply when determining the
     * height for inline frames.
     *
     * http://www.w3.org/TR/CSS21/visudet.html#inline-non-replaced
     *
     * The vertical padding, border and margin of an inline, non-replaced box
     * start at the top and bottom of the content area, not the
     * 'line-height'. But only the 'line-height' is used to calculate the
     * height of the line box.
     *
     * @return float
     */
    public function get_margin_height(): float
    {
        $style = $this->get_style();
        $font = $style->font_family;
        $size = $style->font_size;
        $fontHeight = $this->_dompdf->getFontMetrics()->getFontHeight($font, $size);

        return ($style->line_height / ($size > 0 ? $size : 1)) * $fontHeight;
    }

    public function split(?Frame $child = null, bool $page_break = false, bool $forced = false): void
    {
        if (is_null($child)) {
            $this->get_parent()->split($this, $page_break, $forced);
            return;
        }

        if ($child->get_parent() !== $this) {
            throw new Exception("Unable to split: frame is not a child of this one.");
        }

        $this->revert_counter_increment();
        $node = $this->_frame->get_node();
        $split = $this->copy($node->cloneNode());

        $style = $this->_frame->get_style();
        $split_style = $split->get_style();

        // Unset the current node's right style properties
        $style->margin_right = 0.0;
        $style->padding_right = 0.0;
        $style->border_right_width = 0.0;
        $style->border_top_right_radius = 0.0;
        $style->border_bottom_right_radius = 0.0;

        // Unset the split node's left style properties since we don't want them
        // to propagate
        $split_style->margin_left = 0.0;
        $split_style->padding_left = 0.0;
        $split_style->border_left_width = 0.0;
        $split_style->border_top_left_radius = 0.0;
        $split_style->border_bottom_left_radius = 0.0;

        // If this is a generated node don't propagate the content style
        if ($split->get_node()->nodeName == "dompdf_generated") {
            $split_style->content = "normal";
        }

        //On continuation of inline element on next line,
        //don't repeat non-horizontally repeatable background images
        //See e.g. in testcase image_variants, long descriptions
        if (($url = $style->background_image) && $url !== "none"
            && ($repeat = $style->background_repeat) && $repeat !== "repeat" && $repeat !== "repeat-x"
        ) {
            $split_style->background_image = "none";
        }

        $this->get_parent()->insert_child_after($split, $this);

        // Add $child and all following siblings to the new split node
        $iter = $child;
        while ($iter) {
            $frame = $iter;
            $iter = $iter->get_next_sibling();
            $frame->reset();
            $split->append_child($frame);
        }

        $parent = $this->get_parent();

        if ($page_break) {
            $parent->split($split, $page_break, $forced);
        } elseif ($parent instanceof Inline) {
            $parent->split($split);
        }
    }

}
<?php
/**
 * @package dompdf
 * @link    https://github.com/dompdf/dompdf
 * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
 */
namespace Dompdf\FrameDecorator;

use Dompdf\Dompdf;
use Dompdf\Frame;

/**
 * Decorates frames for list bullet rendering
 *
 * @package dompdf
 */
class ListBullet extends AbstractFrameDecorator
{
    /**
     * Bullet diameter as fraction of font size.
     */
    public const BULLET_SIZE = 0.35;

    /**
     * Bullet offset from font baseline as fraction of font size.
     */
    public const BULLET_OFFSET = 0.1;

    /**
     * Thickness of bullet outline as fraction of font size.
     * See also `DECO_THICKNESS`. Screen: 0.08, print: better less, e.g. 0.04.
     */
    public const BULLET_THICKNESS = 0.04;

    /**
     * Indentation from the start of the line as fraction of font size.
     */
    public const MARKER_INDENT = 0.52;

    /**
     * ListBullet constructor.
     * @param Frame $frame
     * @param Dompdf $dompdf
     */
    function __construct(Frame $frame, Dompdf $dompdf)
    {
        parent::__construct($frame, $dompdf);
    }

    /**
     * Get the width of the bullet symbol.
     *
     * @return float
     */
    public function get_width(): float
    {
        $style = $this->_frame->get_style();

        if ($style->list_style_type === "none") {
            return 0.0;
        }

        return $style->font_size * self::BULLET_SIZE;
    }

    /**
     * Get the height of the bullet symbol.
     *
     * @return float
     */
    public function get_height(): float
    {
        $style = $this->_frame->get_style();

        if ($style->list_style_type === "none") {
            return 0.0;
        }

        return $style->font_size * self::BULLET_SIZE;
    }

    /**
     * Get the width of the bullet, including indentation.
     */
    public function get_margin_width(): float
    {
        $style = $this->get_style();

        if ($style->list_style_type === "none") {
            return 0.0;
        }

        return $style->font_size * (self::BULLET_SIZE + self::MARKER_INDENT);
    }

    /**
     * Get the line height for the bullet.
     *
     * This increases the height of the corresponding line box when necessary.
     */
    public function get_margin_height(): float
    {
        $style = $this->get_style();

        if ($style->list_style_type === "none") {
            return 0.0;
        }

        // TODO: This is a copy of `FrameDecorator\Text::get_margin_height()`
        // Would be nice to properly refactor that at some point
        $font = $style->font_family;
        $size = $style->font_size;
        $fontHeight = $this->_dompdf->getFontMetrics()->getFontHeight($font, $size);

        return ($style->line_height / ($size > 0 ? $size : 1)) * $fontHeight;
    }
}
<?php
/**
 * @package dompdf
 * @link    https://github.com/dompdf/dompdf
 * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
 */
namespace Dompdf\FrameDecorator;

use Dompdf\Dompdf;
use Dompdf\Frame;
use Dompdf\Helpers;
use Dompdf\Image\Cache;

/**
 * Decorates frames for list bullets with custom images
 *
 * @package dompdf
 */
class ListBulletImage extends ListBullet
{

    /**
     * The underlying image frame
     *
     * @var Image
     */
    protected $_img;

    /**
     * The image's width in pixels
     *
     * @var float
     */
    protected $_width;

    /**
     * The image's height in pixels
     *
     * @var float
     */
    protected $_height;

    /**
     * ListBulletImage constructor.
     * @param Frame $frame
     * @param Dompdf $dompdf
     */
    function __construct(Frame $frame, Dompdf $dompdf)
    {
        $style = $frame->get_style();
        $url = $style->list_style_image;
        $frame->get_node()->setAttribute("src", $url);
        $this->_img = new Image($frame, $dompdf);
        parent::__construct($this->_img, $dompdf);

        $url = $this->_img->get_image_url();

        if (Cache::is_broken($url)) {
            $this->_width = parent::get_width();
            $this->_height = parent::get_height();
        } else {
            // Resample the bullet image to be consistent with 'auto' sized images
            [$width, $height] = $this->_img->get_intrinsic_dimensions();
            $this->_width = $this->_img->resample($width);
            $this->_height = $this->_img->resample($height);
        }
    }

    public function get_width(): float
    {
        return $this->_width;
    }

    public function get_height(): float
    {
        return $this->_height;
    }

    public function get_margin_width(): float
    {
        $style = $this->get_style();
        return $this->_width + $style->font_size * self::MARKER_INDENT;
    }

    public function get_margin_height(): float
    {
        $fontMetrics = $this->_dompdf->getFontMetrics();
        $style = $this->get_style();
        $font = $style->font_family;
        $size = $style->font_size;
        $fontHeight = $fontMetrics->getFontHeight($font, $size);
        $baseline = $fontMetrics->getFontBaseline($font, $size);

        // This is the same factor as used in
        // `FrameDecorator\Text::get_margin_height()`
        $f = $style->line_height / ($size > 0 ? $size : 1);

        // FIXME: Tries to approximate replacing the space above the font
        // baseline with the image
        return $f * ($fontHeight - $baseline) + $this->_height;
    }

    /**
     * Return image url
     *
     * @return string
     */
    function get_image_url()
    {
        return $this->_img->get_image_url();
    }
}
<?php
/**
 * @package dompdf
 * @link    https://github.com/dompdf/dompdf
 * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
 */
namespace Dompdf\FrameDecorator;

use Dompdf\Dompdf;
use Dompdf\Frame;

/**
 * Dummy decorator
 *
 * @package dompdf
 */
class NullFrameDecorator extends AbstractFrameDecorator
{
    /**
     * NullFrameDecorator constructor.
     * @param Frame $frame
     * @param Dompdf $dompdf
     */
    function __construct(Frame $frame, Dompdf $dompdf)
    {
        parent::__construct($frame, $dompdf);
        $style = $this->_frame->get_style();
        $style->width = 0;
        $style->height = 0;
        $style->margin = 0;
        $style->padding = 0;
    }
}
<?php
/**
 * @package dompdf
 * @link    https://github.com/dompdf/dompdf
 * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
 */
namespace Dompdf\FrameDecorator;

use Dompdf\Dompdf;
use Dompdf\Helpers;
use Dompdf\Frame;
use Dompdf\Renderer;

/**
 * Decorates frames for page layout
 *
 * @package dompdf
 */
class Page extends AbstractFrameDecorator
{
    /**
     * The y value of the bottom edge of the page area.
     *
     * https://www.w3.org/TR/CSS21/page.html#page-margins
     *
     * @var float
     */
    protected $bottom_page_edge;

    /**
     * Flag indicating page is full.
     *
     * @var bool
     */
    protected $_page_full;

    /**
     * Number of tables currently being reflowed
     *
     * @var int
     */
    protected $_in_table;

    /**
     * The pdf renderer
     *
     * @var Renderer
     */
    protected $_renderer;

    /**
     * This page's floating frames
     *
     * @var array
     */
    protected $_floating_frames = [];

    //........................................................................

    /**
     * Class constructor
     *
     * @param Frame $frame the frame to decorate
     * @param Dompdf $dompdf
     */
    function __construct(Frame $frame, Dompdf $dompdf)
    {
        parent::__construct($frame, $dompdf);
        $this->_page_full = false;
        $this->_in_table = 0;
        $this->bottom_page_edge = null;
    }

    /**
     * Set the renderer used for this pdf
     *
     * @param Renderer $renderer the renderer to use
     */
    function set_renderer($renderer)
    {
        $this->_renderer = $renderer;
    }

    /**
     * Return the renderer used for this pdf
     *
     * @return Renderer
     */
    function get_renderer()
    {
        return $this->_renderer;
    }

    /**
     * Calculate the bottom edge of the page area after margins have been
     * applied for the current page.
     */
    public function calculate_bottom_page_edge(): void
    {
        [, , , $cbh] = $this->get_containing_block();
        $style = $this->get_style();
        $margin_bottom = (float) $style->length_in_pt($style->margin_bottom, $cbh);

        $this->bottom_page_edge = $cbh - $margin_bottom;
    }

    /**
     * Returns true if the page is full and is no longer accepting frames.
     *
     * @return bool
     */
    function is_full()
    {
        return $this->_page_full;
    }

    /**
     * Start a new page by resetting the full flag.
     */
    function next_page()
    {
        $this->_floating_frames = [];
        $this->_renderer->new_page();
        $this->_page_full = false;
    }

    /**
     * Indicate to the page that a table is currently being reflowed.
     */
    function table_reflow_start()
    {
        $this->_in_table++;
    }

    /**
     * Indicate to the page that table reflow is finished.
     */
    function table_reflow_end()
    {
        $this->_in_table--;
    }

    /**
     * Return whether we are currently in a nested table or not
     *
     * @return bool
     */
    function in_nested_table()
    {
        return $this->_in_table > 1;
    }

    /**
     * Check if a forced page break is required before $frame.  This uses the
     * frame's page_break_before property as well as the preceding frame's
     * page_break_after property.
     *
     * @link http://www.w3.org/TR/CSS21/page.html#forced
     *
     * @param AbstractFrameDecorator $frame the frame to check
     *
     * @return bool true if a page break occurred
     */
    function check_forced_page_break(Frame $frame)
    {
        // Skip check if page is already split and for the body
        if ($this->_page_full || $frame->get_node()->nodeName === "body") {
            return false;
        }

        $page_breaks = ["always", "left", "right"];
        $style = $frame->get_style();

        if (($frame->is_block_level() || $style->display === "table-row")
            && in_array($style->page_break_before, $page_breaks, true)
        ) {
            // Prevent cascading splits
            $frame->split(null, true, true);
            $style->page_break_before = "auto";
            $this->_page_full = true;
            $frame->_already_pushed = true;

            return true;
        }

        // Find the preceding block-level sibling (or table row). Inline
        // elements are treated as if wrapped in an anonymous block container
        // here. See https://www.w3.org/TR/CSS21/visuren.html#anonymous-block-level
        $prev = $frame->get_prev_sibling();
        while ($prev && (($prev->is_text_node() && $prev->get_node()->nodeValue === "")
            || $prev->get_node()->nodeName === "bullet")
        ) {
            $prev = $prev->get_prev_sibling();
        }

        if ($prev && ($prev->is_block_level() || $prev->get_style()->display === "table-row")) {
            if (in_array($prev->get_style()->page_break_after, $page_breaks, true)) {
                // Prevent cascading splits
                $frame->split(null, true, true);
                $prev->get_style()->page_break_after = "auto";
                $this->_page_full = true;
                $frame->_already_pushed = true;

                return true;
            }

            $prev_last_child = $prev->get_last_child();
            while ($prev_last_child && (($prev_last_child->is_text_node() && $prev_last_child->get_node()->nodeValue === "")
                || $prev_last_child->get_node()->nodeName === "bullet")
            ) {
                $prev_last_child = $prev_last_child->get_prev_sibling();
            }

            if ($prev_last_child
                && $prev_last_child->is_block_level()
                && in_array($prev_last_child->get_style()->page_break_after, $page_breaks, true)
            ) {
                $frame->split(null, true, true);
                $prev_last_child->get_style()->page_break_after = "auto";
                $this->_page_full = true;
                $frame->_already_pushed = true;

                return true;
            }
        }

        return false;
    }

    /**
     * Check for a gap between the top content edge of a frame and its child
     * content.
     *
     * Additionally, the top margin, border, and padding of the frame must fit
     * on the current page.
     *
     * @param float $childPos The top margin or line-box edge of the child content.
     * @param Frame $frame The parent frame to check.
     * @return bool
     */
    protected function hasGap(float $childPos, Frame $frame): bool
    {
        $style = $frame->get_style();
        $cbw = $frame->get_containing_block("w");
        $contentEdge = $frame->get_position("y") + (float) $style->length_in_pt([
            $style->margin_top,
            $style->border_top_width,
            $style->padding_top
        ], $cbw);

        return Helpers::lengthGreater($childPos, $contentEdge)
            && Helpers::lengthLessOrEqual($contentEdge, $this->bottom_page_edge);
    }

    /**
     * Determine if a page break is allowed before $frame
     * http://www.w3.org/TR/CSS21/page.html#allowed-page-breaks
     *
     * In the normal flow, page breaks can occur at the following places:
     *
     *    1. In the vertical margin between block boxes. When an
     *    unforced page break occurs here, the used values of the
     *    relevant 'margin-top' and 'margin-bottom' properties are set
     *    to '0'. When a forced page break occurs here, the used value
     *    of the relevant 'margin-bottom' property is set to '0'; the
     *    relevant 'margin-top' used value may either be set to '0' or
     *    retained.
     *    2. Between line boxes inside a block container box.
     *    3. Between the content edge of a block container box and the
     *    outer edges of its child content (margin edges of block-level
     *    children or line box edges for inline-level children) if there
     *    is a (non-zero) gap between them.
     *
     * These breaks are subject to the following rules:
     *
     *   * Rule A: Breaking at (1) is allowed only if the
     *     'page-break-after' and 'page-break-before' properties of all
     *     the elements generating boxes that meet at this margin allow
     *     it, which is when at least one of them has the value
     *     'always', 'left', or 'right', or when all of them are 'auto'.
     *
     *   * Rule B: However, if all of them are 'auto' and a common
     *     ancestor of all the elements has a 'page-break-inside' value
     *     of 'avoid', then breaking here is not allowed.
     *
     *   * Rule C: Breaking at (2) is allowed only if the number of line
     *     boxes between the break and the start of the enclosing block
     *     box is the value of 'orphans' or more, and the number of line
     *     boxes between the break and the end of the box is the value
     *     of 'widows' or more.
     *
     *   * Rule D: In addition, breaking at (2) or (3) is allowed only
     *     if the 'page-break-inside' property of the element and all
     *     its ancestors is 'auto'.
     *
     * If the above does not provide enough break points to keep content
     * from overflowing the page boxes, then rules A, B and D are
     * dropped in order to find additional breakpoints.
     *
     * If that still does not lead to sufficient break points, rule C is
     * dropped as well, to find still more break points.
     *
     * We also allow breaks between table rows.
     *
     * @param AbstractFrameDecorator $frame the frame to check
     *
     * @return bool true if a break is allowed, false otherwise
     */
    protected function _page_break_allowed(Frame $frame)
    {
        Helpers::dompdf_debug("page-break", "_page_break_allowed(" . $frame->get_node()->nodeName . ")");
        $display = $frame->get_style()->display;

        // Block Frames (1):
        if ($frame->is_block_level() || $display === "-dompdf-image") {

            // Avoid breaks within table-cells
            if ($this->_in_table > ($display === "table" ? 1 : 0)) {
                Helpers::dompdf_debug("page-break", "In table: " . $this->_in_table);

                return false;
            }

            // Rule A
            if ($frame->get_style()->page_break_before === "avoid") {
                Helpers::dompdf_debug("page-break", "before: avoid");

                return false;
            }

            // Find the preceding block-level sibling. Inline elements are
            // treated as if wrapped in an anonymous block container here. See
            // https://www.w3.org/TR/CSS21/visuren.html#anonymous-block-level
            $prev = $frame->get_prev_sibling();
            while ($prev && (($prev->is_text_node() && $prev->get_node()->nodeValue === "")
                || $prev->get_node()->nodeName === "bullet")
            ) {
                $prev = $prev->get_prev_sibling();
            }

            // Does the previous element allow a page break after?
            if ($prev && ($prev->is_block_level() || $prev->get_style()->display === "-dompdf-image")
                && $prev->get_style()->page_break_after === "avoid"
            ) {
                Helpers::dompdf_debug("page-break", "after: avoid");

                return false;
            }

            // Rules B & D
            $parent = $frame->get_parent();
            $p = $parent;
            while ($p) {
                if ($p->get_style()->page_break_inside === "avoid") {
                    Helpers::dompdf_debug("page-break", "parent->inside: avoid");

                    return false;
                }
                $p = $p->find_block_parent();
            }

            // To prevent cascading page breaks when a top-level element has
            // page-break-inside: avoid, ensure that at least one frame is
            // on the page before splitting.
            if ($parent->get_node()->nodeName === "body" && !$prev) {
                // We are the body's first child
                Helpers::dompdf_debug("page-break", "Body's first child.");

                return false;
            }

            // Check for a possible type (3) break
            if (!$prev && $parent && !$this->hasGap($frame->get_position("y"), $parent)) {
                Helpers::dompdf_debug("page-break", "First block-level frame, no gap");

                return false;
            }

            Helpers::dompdf_debug("page-break", "block: break allowed");

            return true;

        } // Inline frames (2):
        else {
            if ($frame->is_inline_level()) {

                // Avoid breaks within table-cells
                if ($this->_in_table) {
                    Helpers::dompdf_debug("page-break", "In table: " . $this->_in_table);

                    return false;
                }

                // Rule C
                $block_parent = $frame->find_block_parent();
                $parent_style = $block_parent->get_style();
                $line = $block_parent->get_current_line_box();
                $line_count = count($block_parent->get_line_boxes());
                $line_number = $frame->get_containing_line() && empty($line->get_frames())
                    ? $line_count - 1
                    : $line_count;

                // The line number of the frame can be less than the current
                // number of line boxes, in case we are backtracking. As long as
                // we are not checking for widows yet, just checking against the
                // number of line boxes is sufficient in most cases, though.
                if ($line_number <= $parent_style->orphans) {
                    Helpers::dompdf_debug("page-break", "orphans");

                    return false;
                }

                // FIXME: Checking widows is tricky without having laid out the
                // remaining line boxes.  Just ignore it for now...

                // Rule D
                $p = $block_parent;
                while ($p) {
                    if ($p->get_style()->page_break_inside === "avoid") {
                        Helpers::dompdf_debug("page-break", "parent->inside: avoid");

                        return false;
                    }
                    $p = $p->find_block_parent();
                }

                // To prevent cascading page breaks when a top-level element has
                // page-break-inside: avoid, ensure that at least one frame with
                // some content is on the page before splitting.
                $prev = $frame->get_prev_sibling();
                while ($prev && ($prev->is_text_node() && trim($prev->get_node()->nodeValue) == "")) {
                    $prev = $prev->get_prev_sibling();
                }

                if ($block_parent->get_node()->nodeName === "body" && !$prev) {
                    // We are the body's first child
                    Helpers::dompdf_debug("page-break", "Body's first child.");

                    return false;
                }

                Helpers::dompdf_debug("page-break", "inline: break allowed");

                return true;

            // Table-rows
            } else {
                if ($display === "table-row") {

                    // If this is a nested table, prevent the page from breaking
                    if ($this->_in_table > 1) {
                        Helpers::dompdf_debug("page-break", "table: nested table");

                        return false;
                    }

                    // Rule A (table row)
                    if ($frame->get_style()->page_break_before === "avoid") {
                        Helpers::dompdf_debug("page-break", "before: avoid");

                        return false;
                    }

                    // Find the preceding row
                    $prev = $frame->get_prev_sibling();

                    if (!$prev) {
                        $prev_group = $frame->get_parent()->get_prev_sibling();

                        if ($prev_group
                            && in_array($prev_group->get_style()->display, Table::ROW_GROUPS, true)
                        ) {
                            $prev = $prev_group->get_last_child();
                        }
                    }

                    // Check if a page break is allowed after the preceding row
                    if ($prev && $prev->get_style()->page_break_after === "avoid") {
                        Helpers::dompdf_debug("page-break", "after: avoid");

                        return false;
                    }

                    // Avoid breaking before the first row of a table
                    if (!$prev) {
                        Helpers::dompdf_debug("page-break", "table: first-row");

                        return false;
                    }

                    // Rule B (table row)
                    // Check if the page_break_inside property is not 'avoid'
                    // for the parent table or any of its ancestors
                    $table = Table::find_parent_table($frame);

                    $p = $table;
                    while ($p) {
                        if ($p->get_style()->page_break_inside === "avoid") {
                            Helpers::dompdf_debug("page-break", "parent->inside: avoid");

                            return false;
                        }
                        $p = $p->find_block_parent();
                    }

                    Helpers::dompdf_debug("page-break", "table-row: break allowed");

                    return true;
                } else {
                    if (in_array($display, Table::ROW_GROUPS, true)) {

                        // Disallow breaks at row-groups: only split at row boundaries
                        return false;

                    } else {
                        Helpers::dompdf_debug("page-break", "? " . $display);

                        return false;
                    }
                }
            }
        }
    }

    /**
     * Check if $frame will fit on the page.  If the frame does not fit,
     * the frame tree is modified so that a page break occurs in the
     * correct location.
     *
     * @param AbstractFrameDecorator $frame the frame to check
     *
     * @return bool
     */
    function check_page_break(Frame $frame)
    {
        if ($this->_page_full || $frame->_already_pushed
            // Never check for breaks on empty text nodes
            || ($frame->is_text_node() && $frame->get_node()->nodeValue === "")
        ) {
            return false;
        }

        $p = $frame;
        do {
            $display = $p->get_style()->display;
            if ($display == "table-row") {
                if ($p->_already_pushed) { return false; }
            }
        } while ($p = $p->get_parent());

        // If the frame is absolute or fixed it shouldn't break
        $p = $frame;
        do {
            if ($p->is_absolute()) {
                return false;
            }
        } while ($p = $p->get_parent());

        $margin_height = $frame->get_margin_height();

        // Determine the frame's maximum y value
        $max_y = (float)$frame->get_position("y") + $margin_height;

        // If a split is to occur here, then the bottom margins & paddings of all
        // parents of $frame must fit on the page as well:
        $p = $frame->get_parent();
        while ($p && $p !== $this) {
            $cbw = $p->get_containing_block("w");
            $max_y += (float) $p->get_style()->computed_bottom_spacing($cbw);
            $p = $p->get_parent();
        }

        // Check if $frame flows off the page
        if (Helpers::lengthLessOrEqual($max_y, $this->bottom_page_edge)) {
            // no: do nothing
            return false;
        }

        Helpers::dompdf_debug("page-break", "check_page_break");
        Helpers::dompdf_debug("page-break", "in_table: " . $this->_in_table);

        // yes: determine page break location
        $iter = $frame;
        $flg = false;
        $pushed_flg = false;

        $in_table = $this->_in_table;

        Helpers::dompdf_debug("page-break", "Starting search");
        while ($iter) {
            // echo "\nbacktrack: " .$iter->get_node()->nodeName ." ".spl_object_hash($iter->get_node()). "";
            if ($iter === $this) {
                Helpers::dompdf_debug("page-break", "reached root.");
                // We've reached the root in our search.  Just split at $frame.
                break;
            }

            if ($iter->_already_pushed) {
                $pushed_flg = true;
            } elseif ($this->_page_break_allowed($iter)) {
                Helpers::dompdf_debug("page-break", "break allowed, splitting.");
                $iter->split(null, true);
                $this->_page_full = true;
                $this->_in_table = $in_table;
                $iter->_already_pushed = true;
                $frame->_already_pushed = true;

                return true;
            }

            if (!$flg && $next = $iter->get_last_child()) {
                Helpers::dompdf_debug("page-break", "following last child.");

                if ($next->is_table()) {
                    $this->_in_table++;
                }

                $iter = $next;
                $pushed_flg = false;
                continue;
            }

            if ($pushed_flg) {
                // The frame was already pushed, avoid breaking on a previous page
                break;
            }

            $next = $iter->get_prev_sibling();
            // Skip empty text nodes
            while ($next && $next->is_text_node() && $next->get_node()->nodeValue === "") {
                $next = $next->get_prev_sibling();
            }

            if ($next) {
                Helpers::dompdf_debug("page-break", "following prev sibling.");

                if ($next->is_table() && !$iter->is_table()) {
                    $this->_in_table++;
                } elseif (!$next->is_table() && $iter->is_table()) {
                    $this->_in_table--;
                }

                $iter = $next;
                $flg = false;
                continue;
            }

            if ($next = $iter->get_parent()) {
                Helpers::dompdf_debug("page-break", "following parent.");

                if ($iter->is_table()) {
                    $this->_in_table--;
                }

                $iter = $next;
                $flg = true;
                continue;
            }

            break;
        }

        $this->_in_table = $in_table;

        // No valid page break found.  Just break at $frame.
        Helpers::dompdf_debug("page-break", "no valid break found, just splitting.");

        // If we are in a table, backtrack to the nearest top-level table row
        if ($this->_in_table) {
            $iter = $frame;
            while ($iter && $iter->get_style()->display !== "table-row" && $iter->get_style()->display !== 'table-row-group' && $iter->_already_pushed === false) {
                $iter = $iter->get_parent();
            }

            if ($iter) {
                $iter->split(null, true);
                $iter->_already_pushed = true;
            } else {
                return false;
            }
        } else {
            $frame->split(null, true);
        }

        $this->_page_full = true;
        $frame->_already_pushed = true;

        return true;
    }

    //........................................................................

    public function split(?Frame $child = null, bool $page_break = false, bool $forced = false): void
    {
        // Do nothing
    }

    /**
     * Add a floating frame
     *
     * @param Frame $frame
     *
     * @return void
     */
    function add_floating_frame(Frame $frame)
    {
        array_unshift($this->_floating_frames, $frame);
    }

    /**
     * @return Frame[]
     */
    function get_floating_frames()
    {
        return $this->_floating_frames;
    }

    /**
     * @param $key
     */
    public function remove_floating_frame($key)
    {
        unset($this->_floating_frames[$key]);
    }

    /**
     * @param Frame $child
     * @return int|mixed
     */
    public function get_lowest_float_offset(Frame $child)
    {
        $style = $child->get_style();
        $side = $style->clear;
        $float = $style->float;

        $y = 0;

        if ($float === "none") {
            foreach ($this->_floating_frames as $key => $frame) {
                if ($side === "both" || $frame->get_style()->float === $side) {
                    $y = max($y, $frame->get_position("y") + $frame->get_margin_height());
                }
                $this->remove_floating_frame($key);
            }
        }

        if ($y > 0) {
            $y++; // add 1px buffer from float
        }

        return $y;
    }
}
<?php
/**
 * @package dompdf
 * @link    https://github.com/dompdf/dompdf
 * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
 */
namespace Dompdf\FrameDecorator;

use Dompdf\Cellmap;
use DOMNode;
use Dompdf\Css\Style;
use Dompdf\Dompdf;
use Dompdf\Frame;

/**
 * Decorates Frames for table layout
 *
 * @package dompdf
 */
class Table extends AbstractFrameDecorator
{
    public const VALID_CHILDREN = Style::TABLE_INTERNAL_TYPES;

    /**
     * List of all row-group display types.
     */
    public const ROW_GROUPS = [
        "table-row-group",
        "table-header-group",
        "table-footer-group"
    ];

    /**
     * The Cellmap object for this table.  The cellmap maps table cells
     * to rows and columns, and aids in calculating column widths.
     *
     * @var Cellmap
     */
    protected $_cellmap;

    /**
     * Table header rows.  Each table header is duplicated when a table
     * spans pages.
     *
     * @var TableRowGroup[]
     */
    protected $_headers;

    /**
     * Table footer rows.  Each table footer is duplicated when a table
     * spans pages.
     *
     * @var TableRowGroup[]
     */
    protected $_footers;

    /**
     * Class constructor
     *
     * @param Frame $frame the frame to decorate
     * @param Dompdf $dompdf
     */
    public function __construct(Frame $frame, Dompdf $dompdf)
    {
        parent::__construct($frame, $dompdf);
        $this->_cellmap = new Cellmap($this);

        if ($frame->get_style()->table_layout === "fixed") {
            $this->_cellmap->set_layout_fixed(true);
        }

        $this->_headers = [];
        $this->_footers = [];
    }

    public function reset()
    {
        parent::reset();
        $this->_cellmap->reset();
        $this->_headers = [];
        $this->_footers = [];
        $this->_reflower->reset();
    }

    //........................................................................

    /**
     * Split the table at $row.  $row and all subsequent rows will be
     * added to the clone.  This method is overridden in order to remove
     * frames from the cellmap properly.
     */
    public function split(?Frame $child = null, bool $page_break = false, bool $forced = false): void
    {
        if (is_null($child)) {
            parent::split($child, $page_break, $forced);
            return;
        }

        // If $child is a header or if it is the first non-header row, do
        // not duplicate headers, simply move the table to the next page.
        if (count($this->_headers)
            && !in_array($child, $this->_headers, true)
            && !in_array($child->get_prev_sibling(), $this->_headers, true)
        ) {
            $first_header = null;

            // Insert copies of the table headers before $child
            foreach ($this->_headers as $header) {

                $new_header = $header->deep_copy();

                if (is_null($first_header)) {
                    $first_header = $new_header;
                }

                $this->insert_child_before($new_header, $child);
            }

            parent::split($first_header, $page_break, $forced);

        } elseif (in_array($child->get_style()->display, self::ROW_GROUPS, true)) {

            // Individual rows should have already been handled
            parent::split($child, $page_break, $forced);

        } else {

            $iter = $child;

            while ($iter) {
                $this->_cellmap->remove_row($iter);
                $iter = $iter->get_next_sibling();
            }

            parent::split($child, $page_break, $forced);
        }
    }

    public function copy(DOMNode $node)
    {
        $deco = parent::copy($node);

        // In order to keep columns' widths through pages
        $deco->_cellmap->set_columns($this->_cellmap->get_columns());
        $deco->_cellmap->lock_columns();

        return $deco;
    }

    /**
     * Static function to locate the parent table of a frame
     *
     * @param Frame $frame
     *
     * @return Table the table that is an ancestor of $frame
     */
    public static function find_parent_table(Frame $frame)
    {
        while ($frame = $frame->get_parent()) {
            if ($frame->is_table()) {
                break;
            }
        }

        return $frame;
    }

    /**
     * Return this table's Cellmap
     *
     * @return Cellmap
     */
    public function get_cellmap()
    {
        return $this->_cellmap;
    }

    //........................................................................

    /**
     * Check for text nodes between valid table children that only contain white
     * space, except if white space is to be preserved.
     *
     * @param AbstractFrameDecorator $frame
     *
     * @return bool
     */
    private function isEmptyTextNode(AbstractFrameDecorator $frame): bool
    {
        // This is based on the white-space pattern in `FrameReflower\Text`,
        // i.e. only match on collapsible white space
        $wsPattern = '/^[^\S\xA0\x{202F}\x{2007}]*$/u';
        $validChildOrNull = function ($frame) {
            return $frame === null
                || in_array($frame->get_style()->display, self::VALID_CHILDREN, true);
        };

        return $frame instanceof Text
            && !$frame->is_pre()
            && preg_match($wsPattern, $frame->get_text())
            && $validChildOrNull($frame->get_prev_sibling())
            && $validChildOrNull($frame->get_next_sibling());
    }

    /**
     * Restructure tree so that the table has the correct structure. Misplaced
     * children are appropriately wrapped in anonymous row groups, rows, and
     * cells.
     *
     * https://www.w3.org/TR/CSS21/tables.html#anonymous-boxes
     */
    public function normalize(): void
    {
        $column_caption = ["table-column-group", "table-column", "table-caption"];
        $children = iterator_to_array($this->get_children());
        $tbody = null;

        foreach ($children as $child) {
            $display = $child->get_style()->display;

            if (in_array($display, self::ROW_GROUPS, true)) {
                // Reset anonymous tbody
                $tbody = null;

                // Add headers and footers
                if ($display === "table-header-group") {
                    $this->_headers[] = $child;
                } elseif ($display === "table-footer-group") {
                    $this->_footers[] = $child;
                }
                continue;
            }

            if (in_array($display, $column_caption, true)) {
                continue;
            }

            // Remove empty text nodes between valid children
            if ($this->isEmptyTextNode($child)) {
                $this->remove_child($child);
                continue;
            }

            // Catch consecutive misplaced frames within a single anonymous group
            if ($tbody === null) {
                $tbody = $this->create_anonymous_child("tbody", "table-row-group");
                $this->insert_child_before($tbody, $child);
            }

            $tbody->append_child($child);
        }

        // Handle empty table: Make sure there is at least one row group
        if (!$this->get_first_child()) {
            $tbody = $this->create_anonymous_child("tbody", "table-row-group");
            $this->append_child($tbody);
        }

        foreach ($this->get_children() as $child) {
            $display = $child->get_style()->display;

            if (in_array($display, self::ROW_GROUPS, true)) {
                $this->normalizeRowGroup($child);
            }
        }
    }

    private function normalizeRowGroup(AbstractFrameDecorator $frame): void
    {
        $children = iterator_to_array($frame->get_children());
        $tr = null;

        foreach ($children as $child) {
            $display = $child->get_style()->display;

            if ($display === "table-row") {
                // Reset anonymous tr
                $tr = null;
                continue;
            }

            // Remove empty text nodes between valid children
            if ($this->isEmptyTextNode($child)) {
                $frame->remove_child($child);
                continue;
            }

            // Catch consecutive misplaced frames within a single anonymous row
            if ($tr === null) {
                $tr = $frame->create_anonymous_child("tr", "table-row");
                $frame->insert_child_before($tr, $child);
            }

            $tr->append_child($child);
        }

        // Handle empty row group: Make sure there is at least one row
        if (!$frame->get_first_child()) {
            $tr = $frame->create_anonymous_child("tr", "table-row");
            $frame->append_child($tr);
        }

        foreach ($frame->get_children() as $child) {
            $this->normalizeRow($child);
        }
    }

    private function normalizeRow(AbstractFrameDecorator $frame): void
    {
        $children = iterator_to_array($frame->get_children());
        $td = null;

        foreach ($children as $child) {
            $display = $child->get_style()->display;

            if ($display === "table-cell") {
                // Reset anonymous td
                $td = null;
                continue;
            }

            // Remove empty text nodes between valid children
            if ($this->isEmptyTextNode($child)) {
                $frame->remove_child($child);
                continue;
            }

            // Catch consecutive misplaced frames within a single anonymous cell
            if ($td === null) {
                $td = $frame->create_anonymous_child("td", "table-cell");
                $frame->insert_child_before($td, $child);
            }

            $td->append_child($child);
        }

        // Handle empty row: Make sure there is at least one cell
        if (!$frame->get_first_child()) {
            $td = $frame->create_anonymous_child("td", "table-cell");
            $frame->append_child($td);
        }
    }
}
<?php
/**
 * @package dompdf
 * @link    https://github.com/dompdf/dompdf
 * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
 */
namespace Dompdf\FrameDecorator;

use Dompdf\Dompdf;
use Dompdf\Frame;
use Dompdf\FrameDecorator\Block as BlockFrameDecorator;

/**
 * Decorates table cells for layout
 *
 * @package dompdf
 */
class TableCell extends BlockFrameDecorator
{

    protected $_resolved_borders;
    protected $_content_height;

    //........................................................................

    /**
     * TableCell constructor.
     * @param Frame $frame
     * @param Dompdf $dompdf
     */
    function __construct(Frame $frame, Dompdf $dompdf)
    {
        parent::__construct($frame, $dompdf);
        $this->_resolved_borders = [];
        $this->_content_height = 0;
    }

    //........................................................................

    function reset()
    {
        parent::reset();
        $this->_resolved_borders = [];
        $this->_content_height = 0;
        $this->_frame->reset();
    }

    /**
     * @return int
     */
    function get_content_height()
    {
        return $this->_content_height;
    }

    /**
     * @param $height
     */
    function set_content_height($height)
    {
        $this->_content_height = $height;
    }

    /**
     * @param $height
     */
    function set_cell_height($height)
    {
        $style = $this->get_style();
        $v_space = (float)$style->length_in_pt(
            [
                $style->margin_top,
                $style->padding_top,
                $style->border_top_width,
                $style->border_bottom_width,
                $style->padding_bottom,
                $style->margin_bottom
            ],
            (float)$style->length_in_pt($style->height)
        );

        $new_height = $height - $v_space;
        $style->set_used("height", $new_height);

        if ($new_height > $this->_content_height) {
            $y_offset = 0;

            // Adjust our vertical alignment
            switch ($style->vertical_align) {
                default:
                case "baseline":
                    // FIXME: this isn't right

                case "top":
                    // Don't need to do anything
                    return;

                case "middle":
                    $y_offset = ($new_height - $this->_content_height) / 2;
                    break;

                case "bottom":
                    $y_offset = $new_height - $this->_content_height;
                    break;
            }

            if ($y_offset) {
                // Move our children
                foreach ($this->get_line_boxes() as $line) {
                    foreach ($line->get_frames() as $frame) {
                        $frame->move(0, $y_offset);
                    }
                }
            }
        }
    }

    /**
     * @param $side
     * @param $border_spec
     */
    function set_resolved_border($side, $border_spec)
    {
        $this->_resolved_borders[$side] = $border_spec;
    }

    /**
     * @param $side
     * @return mixed
     */
    function get_resolved_border($side)
    {
        return $this->_resolved_borders[$side];
    }

    /**
     * @return array
     */
    function get_resolved_borders()
    {
        return $this->_resolved_borders;
    }
}
<?php
/**
 * @package dompdf
 * @link    https://github.com/dompdf/dompdf
 * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
 */
namespace Dompdf\FrameDecorator;

use Dompdf\Dompdf;
use Dompdf\Frame;

/**
 * Decorates Frames for table row layout
 *
 * @package dompdf
 */
class TableRow extends AbstractFrameDecorator
{
    /**
     * TableRow constructor.
     * @param Frame $frame
     * @param Dompdf $dompdf
     */
    function __construct(Frame $frame, Dompdf $dompdf)
    {
        parent::__construct($frame, $dompdf);
    }
}
<?php
/**
 * @package dompdf
 * @link    https://github.com/dompdf/dompdf
 * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
 */
namespace Dompdf\FrameDecorator;

use Dompdf\Dompdf;
use Dompdf\Frame;

/**
 * Table row group decorator
 *
 * Overrides split() method for tbody, thead & tfoot elements
 *
 * @package dompdf
 */
class TableRowGroup extends AbstractFrameDecorator
{

    /**
     * Class constructor
     *
     * @param Frame $frame   Frame to decorate
     * @param Dompdf $dompdf Current dompdf instance
     */
    function __construct(Frame $frame, Dompdf $dompdf)
    {
        parent::__construct($frame, $dompdf);
    }

    /**
     * Split the row group at the given child and remove all subsequent child
     * rows and all subsequent row groups from the cellmap.
     */
    public function split(?Frame $child = null, bool $page_break = false, bool $forced = false): void
    {
        if (is_null($child)) {
            parent::split($child, $page_break, $forced);
            return;
        }

        // Remove child & all subsequent rows from the cellmap
        /** @var Table $parent */
        $parent = $this->get_parent();
        $cellmap = $parent->get_cellmap();
        $iter = $child;

        while ($iter) {
            $cellmap->remove_row($iter);
            $iter = $iter->get_next_sibling();
        }

        // Remove all subsequent row groups from the cellmap
        $iter = $this->get_next_sibling();

        while ($iter) {
            $cellmap->remove_row_group($iter);
            $iter = $iter->get_next_sibling();
        }

        // If we are splitting at the first child remove the
        // table-row-group from the cellmap as well
        if ($child === $this->get_first_child()) {
            $cellmap->remove_row_group($this);
            parent::split(null, $page_break, $forced);
            return;
        }

        $cellmap->update_row_group($this, $child->get_prev_sibling());
        parent::split($child, $page_break, $forced);
    }
}
<?php
/**
 * @package dompdf
 * @link    https://github.com/dompdf/dompdf
 * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
 */
namespace Dompdf\FrameDecorator;

use Dompdf\Dompdf;
use Dompdf\Frame;
use Dompdf\Exception;

/**
 * Decorates Frame objects for text layout
 *
 * @package dompdf
 */
class Text extends AbstractFrameDecorator
{
    /**
     * @var float
     */
    protected $text_spacing;

    /**
     * Text constructor.
     * @param Frame $frame
     * @param Dompdf $dompdf
     * @throws Exception
     */
    function __construct(Frame $frame, Dompdf $dompdf)
    {
        if (!$frame->is_text_node()) {
            throw new Exception("Text_Decorator can only be applied to #text nodes.");
        }

        parent::__construct($frame, $dompdf);
        $this->text_spacing = 0.0;
    }

    function reset()
    {
        parent::reset();
        $this->text_spacing = 0.0;
    }

    // Accessor methods

    /**
     * @return float
     */
    public function get_text_spacing(): float
    {
        return $this->text_spacing;
    }

    /**
     * @return string
     */
    function get_text()
    {
        // FIXME: this should be in a child class (and is incorrect)
//    if ( $this->_frame->get_style()->content !== "normal" ) {
//      $this->_frame->get_node()->data = $this->_frame->get_style()->content;
//      $this->_frame->get_style()->content = "normal";
//    }

//      Helpers::pre_r("---");
//      $style = $this->_frame->get_style();
//      var_dump($text = $this->_frame->get_node()->data);
//      var_dump($asc = utf8_decode($text));
//      for ($i = 0; $i < strlen($asc); $i++)
//        Helpers::pre_r("$i: " . $asc[$i] . " - " . ord($asc[$i]));
//      Helpers::pre_r("width: " . $this->_dompdf->getFontMetrics()->getTextWidth($text, $style->font_family, $style->font_size));

        return $this->_frame->get_node()->data;
    }

    //........................................................................

    /**
     * Vertical padding, border, and margin do not apply when determining the
     * height for inline frames.
     *
     * http://www.w3.org/TR/CSS21/visudet.html#inline-non-replaced
     *
     * The vertical padding, border and margin of an inline, non-replaced box
     * start at the top and bottom of the content area, not the
     * 'line-height'. But only the 'line-height' is used to calculate the
     * height of the line box.
     *
     * @return float
     */
    public function get_margin_height(): float
    {
        // This function is also called in add_frame_to_line() and is used to
        // determine the line height
        $style = $this->get_style();
        $font = $style->font_family;
        $size = $style->font_size;
        $fontHeight = $this->_dompdf->getFontMetrics()->getFontHeight($font, $size);

        return ($style->line_height / ($size > 0 ? $size : 1)) * $fontHeight;
    }

    public function get_padding_box(): array
    {
        $style = $this->_frame->get_style();
        $pb = $this->_frame->get_padding_box();
        $pb[3] = $pb["h"] = (float) $style->length_in_pt($style->height);
        return $pb;
    }

    /**
     * @param float $spacing
     */
    public function set_text_spacing(float $spacing): void
    {
        $this->text_spacing = $spacing;
        $this->recalculate_width();
    }

    /**
     * Recalculate the text width
     *
     * @return float
     */
    public function recalculate_width(): float
    {
        $fontMetrics = $this->_dompdf->getFontMetrics();
        $style = $this->get_style();
        $text = $this->get_text();
        $font = $style->font_family;
        $size = $style->font_size;
        $word_spacing = $this->text_spacing + $style->word_spacing;
        $letter_spacing = $style->letter_spacing;
        $text_width = $fontMetrics->getTextWidth($text, $font, $size, $word_spacing, $letter_spacing);

        $style->set_used("width", $text_width);
        return $text_width;
    }

    // Text manipulation methods

    /**
     * Split the text in this frame at the offset specified.  The remaining
     * text is added as a sibling frame following this one and is returned.
     *
     * @param int $offset
     * @return Frame|null
     */
    function split_text($offset)
    {
        if ($offset == 0) {
            return null;
        }

        $split = $this->_frame->get_node()->splitText($offset);
        if ($split === false) {
            return null;
        }
        
        $deco = $this->copy($split);

        $p = $this->get_parent();
        $p->insert_child_after($deco, $this, false);

        if ($p instanceof Inline) {
            $p->split($deco);
        }

        return $deco;
    }

    /**
     * @param int $offset
     * @param int $count
     */
    function delete_text($offset, $count)
    {
        $this->_frame->get_node()->deleteData($offset, $count);
    }

    /**
     * @param string $text
     */
    function set_text($text)
    {
        $this->_frame->get_node()->data = $text;
    }
}
<?php
/**
 * @package dompdf
 * @link    https://github.com/dompdf/dompdf
 * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
 */
namespace Dompdf\FrameReflower;

use Dompdf\Dompdf;
use Dompdf\Helpers;
use Dompdf\Frame;
use Dompdf\Frame\Factory;
use Dompdf\FrameDecorator\AbstractFrameDecorator;
use Dompdf\FrameDecorator\Block;

/**
 * Base reflower class
 *
 * Reflower objects are responsible for determining the width and height of
 * individual frames.  They also create line and page breaks as necessary.
 *
 * @package dompdf
 */
abstract class AbstractFrameReflower
{

    /**
     * Frame for this reflower
     *
     * @var AbstractFrameDecorator
     */
    protected $_frame;

    /**
     * Cached min/max child size
     *
     * @var array
     */
    protected $_min_max_child_cache;

    /**
     * Cached min/max size
     *
     * @var array
     */
    protected $_min_max_cache;

    /**
     * AbstractFrameReflower constructor.
     * @param AbstractFrameDecorator $frame
     */
    function __construct(AbstractFrameDecorator $frame)
    {
        $this->_frame = $frame;
        $this->_min_max_child_cache = null;
        $this->_min_max_cache = null;
    }

    /**
     * @return Dompdf
     */
    function get_dompdf()
    {
        return $this->_frame->get_dompdf();
    }

    public function reset(): void
    {
        $this->_min_max_child_cache = null;
        $this->_min_max_cache = null;
    }

    /**
     * Determine the actual containing block for absolute and fixed position.
     *
     * https://www.w3.org/TR/CSS21/visudet.html#containing-block-details
     */
    protected function determine_absolute_containing_block(): void
    {
        $frame = $this->_frame;
        $style = $frame->get_style();

        switch ($style->position) {
            case "absolute":
                $parent = $frame->find_positioned_parent();
                if ($parent !== $frame->get_root()) {
                    $parent_style = $parent->get_style();
                    $parent_padding_box = $parent->get_padding_box();
                    //FIXME: an accurate measure of the positioned parent height
                    //       is not possible until reflow has completed;
                    //       we'll fall back to the parent's containing block,
                    //       which is wrong for auto-height parents
                    if ($parent_style->height === "auto") {
                        $parent_containing_block = $parent->get_containing_block();
                        $containing_block_height = $parent_containing_block["h"] -
                            (float)$parent_style->length_in_pt([
                                $parent_style->margin_top,
                                $parent_style->margin_bottom,
                                $parent_style->border_top_width,
                                $parent_style->border_bottom_width
                            ], $parent_containing_block["w"]);
                    } else {
                        $containing_block_height = $parent_padding_box["h"];
                    }
                    $frame->set_containing_block($parent_padding_box["x"], $parent_padding_box["y"], $parent_padding_box["w"], $containing_block_height);
                    break;
                }
            case "fixed":
                $initial_cb = $frame->get_root()->get_first_child()->get_containing_block();
                $frame->set_containing_block($initial_cb["x"], $initial_cb["y"], $initial_cb["w"], $initial_cb["h"]);
                break;
            default:
                // Nothing to do, containing block already set via parent
                break;
        }
    }

    /**
     * Collapse frames margins
     * http://www.w3.org/TR/CSS21/box.html#collapsing-margins
     */
    protected function _collapse_margins(): void
    {
        $frame = $this->_frame;

        // Margins of float/absolutely positioned/inline-level elements do not collapse
        if (!$frame->is_in_flow() || $frame->is_inline_level()
            || $frame->get_root() === $frame || $frame->get_parent() === $frame->get_root()
        ) {
            return;
        }

        $cb = $frame->get_containing_block();
        $style = $frame->get_style();

        $t = $style->length_in_pt($style->margin_top, $cb["w"]);
        $b = $style->length_in_pt($style->margin_bottom, $cb["w"]);

        // Handle 'auto' values
        if ($t === "auto") {
            $style->set_used("margin_top", 0.0);
            $t = 0.0;
        }

        if ($b === "auto") {
            $style->set_used("margin_bottom", 0.0);
            $b = 0.0;
        }

        // Collapse vertical margins:
        $n = $frame->get_next_sibling();
        if ( $n && !($n->is_block_level() && $n->is_in_flow()) ) {
            while ($n = $n->get_next_sibling()) {
                if ($n->is_block_level() && $n->is_in_flow()) {
                    break;
                }

                if (!$n->get_first_child()) {
                    $n = null;
                    break;
                }
            }
        }

        if ($n) {
            $n_style = $n->get_style();
            $n_t = (float)$n_style->length_in_pt($n_style->margin_top, $cb["w"]);

            $b = $this->get_collapsed_margin_length($b, $n_t);
            $style->set_used("margin_bottom", $b);
            $n_style->set_used("margin_top", 0.0);
        }

        // Collapse our first child's margin, if there is no border or padding
        if ($style->border_top_width == 0 && $style->length_in_pt($style->padding_top) == 0) {
            $f = $this->_frame->get_first_child();
            if ( $f && !($f->is_block_level() && $f->is_in_flow()) ) {
                while ($f = $f->get_next_sibling()) {
                    if ($f->is_block_level() && $f->is_in_flow()) {
                        break;
                    }

                    if (!$f->get_first_child()) {
                        $f = null;
                        break;
                    }
                }
            }

            // Margins are collapsed only between block-level boxes
            if ($f) {
                $f_style = $f->get_style();
                $f_t = (float)$f_style->length_in_pt($f_style->margin_top, $cb["w"]);

                $t = $this->get_collapsed_margin_length($t, $f_t);
                $style->set_used("margin_top", $t);
                $f_style->set_used("margin_top", 0.0);
            }
        }

        // Collapse our last child's margin, if there is no border or padding
        if ($style->border_bottom_width == 0 && $style->length_in_pt($style->padding_bottom) == 0) {
            $l = $this->_frame->get_last_child();
            if ( $l && !($l->is_block_level() && $l->is_in_flow()) ) {
                while ($l = $l->get_prev_sibling()) {
                    if ($l->is_block_level() && $l->is_in_flow()) {
                        break;
                    }

                    if (!$l->get_last_child()) {
                        $l = null;
                        break;
                    }
                }
            }

            // Margins are collapsed only between block-level boxes
            if ($l) {
                $l_style = $l->get_style();
                $l_b = (float)$l_style->length_in_pt($l_style->margin_bottom, $cb["w"]);

                $b = $this->get_collapsed_margin_length($b, $l_b);
                $style->set_used("margin_bottom", $b);
                $l_style->set_used("margin_bottom", 0.0);
            }
        }
    }

    /**
     * Get the combined (collapsed) length of two adjoining margins.
     *
     * See http://www.w3.org/TR/CSS21/box.html#collapsing-margins.
     *
     * @param float $l1
     * @param float $l2
     *
     * @return float
     */
    private function get_collapsed_margin_length(float $l1, float $l2): float
    {
        if ($l1 < 0 && $l2 < 0) {
            return min($l1, $l2); // min(x, y) = - max(abs(x), abs(y)), if x < 0 && y < 0
        }
        
        if ($l1 < 0 || $l2 < 0) {
            return $l1 + $l2; // x + y = x - abs(y), if y < 0
        }
        
        return max($l1, $l2);
    }

    /**
     * Handle relative positioning according to
     * https://www.w3.org/TR/CSS21/visuren.html#relative-positioning.
     *
     * @param AbstractFrameDecorator $frame The frame to handle.
     */
    protected function position_relative(AbstractFrameDecorator $frame): void
    {
        $style = $frame->get_style();

        if ($style->position === "relative") {
            $cb = $frame->get_containing_block();
            $top = $style->length_in_pt($style->top, $cb["h"]);
            $right = $style->length_in_pt($style->right, $cb["w"]);
            $bottom = $style->length_in_pt($style->bottom, $cb["h"]);
            $left = $style->length_in_pt($style->left, $cb["w"]);

            // FIXME RTL case:
            // if ($left !== "auto" && $right !== "auto") $left = -$right;
            if ($left === "auto" && $right === "auto") {
                $left = 0;
            } elseif ($left === "auto") {
                $left = -$right;
            }

            if ($top === "auto" && $bottom === "auto") {
                $top = 0;
            } elseif ($top === "auto") {
                $top = -$bottom;
            }

            $frame->move($left, $top);
        }
    }

    /**
     * @param Block|null $block
     */
    abstract function reflow(Block $block = null);

    /**
     * Resolve the `min-width` property.
     *
     * Resolves to 0 if not set or if a percentage and the containing-block
     * width is not defined.
     *
     * @param float|null $cbw Width of the containing block.
     *
     * @return float
     */
    protected function resolve_min_width(?float $cbw): float
    {
        $style = $this->_frame->get_style();
        $min_width = $style->min_width;

        return $min_width !== "auto"
            ? $style->length_in_pt($min_width, $cbw ?? 0)
            : 0.0;
    }

    /**
     * Resolve the `max-width` property.
     *
     * Resolves to `INF` if not set or if a percentage and the containing-block
     * width is not defined.
     *
     * @param float|null $cbw Width of the containing block.
     *
     * @return float
     */
    protected function resolve_max_width(?float $cbw): float
    {
        $style = $this->_frame->get_style();
        $max_width = $style->max_width;

        return $max_width !== "none"
            ? $style->length_in_pt($max_width, $cbw ?? INF)
            : INF;
    }

    /**
     * Resolve the `min-height` property.
     *
     * Resolves to 0 if not set or if a percentage and the containing-block
     * height is not defined.
     *
     * @param float|null $cbh Height of the containing block.
     *
     * @return float
     */
    protected function resolve_min_height(?float $cbh): float
    {
        $style = $this->_frame->get_style();
        $min_height = $style->min_height;

        return $min_height !== "auto"
            ? $style->length_in_pt($min_height, $cbh ?? 0)
            : 0.0;
    }

    /**
     * Resolve the `max-height` property.
     *
     * Resolves to `INF` if not set or if a percentage and the containing-block
     * height is not defined.
     *
     * @param float|null $cbh Height of the containing block.
     *
     * @return float
     */
    protected function resolve_max_height(?float $cbh): float
    {
        $style = $this->_frame->get_style();
        $max_height = $style->max_height;

        return $max_height !== "none"
            ? $style->length_in_pt($style->max_height, $cbh ?? INF)
            : INF;
    }

    /**
     * Get the minimum and maximum preferred width of the contents of the frame,
     * as requested by its children.
     *
     * @return array A two-element array of min and max width.
     */
    public function get_min_max_child_width(): array
    {
        if (!is_null($this->_min_max_child_cache)) {
            return $this->_min_max_child_cache;
        }

        $low = [];
        $high = [];

        for ($iter = $this->_frame->get_children(); $iter->valid(); $iter->next()) {
            $inline_min = 0;
            $inline_max = 0;

            // Add all adjacent inline widths together to calculate max width
            while ($iter->valid() && ($iter->current()->is_inline_level() || $iter->current()->get_style()->display === "-dompdf-image")) {
                /** @var AbstractFrameDecorator */
                $child = $iter->current();
                $child->get_reflower()->_set_content();
                $minmax = $child->get_min_max_width();

                if (in_array($child->get_style()->white_space, ["pre", "nowrap"], true)) {
                    $inline_min += $minmax["min"];
                } else {
                    $low[] = $minmax["min"];
                }

                $inline_max += $minmax["max"];
                $iter->next();
            }

            if ($inline_min > 0) {
                $low[] = $inline_min;
            }
            if ($inline_max > 0) {
                $high[] = $inline_max;
            }

            // Skip children with absolute position
            if ($iter->valid() && !$iter->current()->is_absolute()) {
                /** @var AbstractFrameDecorator */
                $child = $iter->current();
                $child->get_reflower()->_set_content();
                list($low[], $high[]) = $child->get_min_max_width();
            }
        }

        $min = count($low) ? max($low) : 0;
        $max = count($high) ? max($high) : 0;

        return $this->_min_max_child_cache = [$min, $max];
    }

    /**
     * Get the minimum and maximum preferred content-box width of the frame.
     *
     * @return array A two-element array of min and max width.
     */
    public function get_min_max_content_width(): array
    {
        return $this->get_min_max_child_width();
    }

    /**
     * Get the minimum and maximum preferred border-box width of the frame.
     *
     * Required for shrink-to-fit width calculation, as used in automatic table
     * layout, absolute positioning, float and inline-block. This provides a
     * basic implementation. Child classes should override this or
     * `get_min_max_content_width` as necessary.
     *
     * @return array An array `[0 => min, 1 => max, "min" => min, "max" => max]`
     *         of min and max width.
     */
    public function get_min_max_width(): array
    {
        if (!is_null($this->_min_max_cache)) {
            return $this->_min_max_cache;
        }

        $style = $this->_frame->get_style();
        [$min, $max] = $this->get_min_max_content_width();

        // Account for margins, borders, and padding
        $dims = [
            $style->padding_left,
            $style->padding_right,
            $style->border_left_width,
            $style->border_right_width,
            $style->margin_left,
            $style->margin_right
        ];

        // The containing block is not defined yet, treat percentages as 0
        $delta = (float) $style->length_in_pt($dims, 0);
        $min += $delta;
        $max += $delta;

        return $this->_min_max_cache = [$min, $max, "min" => $min, "max" => $max];
    }

    /**
     * Parses a CSS string containing quotes and escaped hex characters
     *
     * @param $string string The CSS string to parse
     * @param $single_trim
     * @return string
     */
    protected function _parse_string($string, $single_trim = false)
    {
        if ($single_trim) {
            $string = preg_replace('/^[\"\']/', "", $string);
            $string = preg_replace('/[\"\']$/', "", $string);
        } else {
            $string = trim($string, "'\"");
        }

        $string = str_replace(["\\\n", '\\"', "\\'"],
            ["", '"', "'"], $string);

        // Convert escaped hex characters into ascii characters (e.g. \A => newline)
        $string = preg_replace_callback("/\\\\([0-9a-fA-F]{0,6})/",
            function ($matches) { return \Dompdf\Helpers::unichr(hexdec($matches[1])); },
            $string);
        return $string;
    }

    /**
     * Parses a CSS "quotes" property
     *
     * https://www.w3.org/TR/css-content-3/#quotes
     *
     * @return array An array of pairs of quotes
     */
    protected function _parse_quotes(): array
    {
        $quotes = $this->_frame->get_style()->quotes;

        if ($quotes === "none") {
            return [];
        }

        if ($quotes === "auto") {
            // TODO: Use typographically appropriate quotes for the current
            // language here
            return [['"', '"'], ["'", "'"]];
        }

        // Matches quote types
        $re = '/(\'[^\']*\')|(\"[^\"]*\")/';

        // Split on spaces, except within quotes
        if (!preg_match_all($re, $quotes, $matches, PREG_SET_ORDER)) {
            return [];
        }

        $quotes_array = [];
        foreach ($matches as $_quote) {
            $quotes_array[] = $this->_parse_string($_quote[0], true);
        }

        return array_chunk($quotes_array, 2);
    }

    /**
     * Parses the CSS "content" property
     *
     * https://www.w3.org/TR/CSS21/generate.html#content
     *
     * @return string The resulting string
     */
    protected function _parse_content(): string
    {
        $style = $this->_frame->get_style();
        $content = $style->content;

        if ($content === "normal" || $content === "none") {
            return "";
        }

        $quotes = $this->_parse_quotes();
        $text = "";

        foreach ($content as $val) {
            // String
            if (in_array(mb_substr($val, 0, 1), ['"', "'"], true)) {
                $text .= $this->_parse_string($val);
                continue;
            }

            $val = mb_strtolower($val);

            // Keywords
            if ($val === "open-quote") {
                // FIXME: Take quotation depth into account
                if (isset($quotes[0][0])) {
                    $text .= $quotes[0][0];
                }
                continue;
            } elseif ($val === "close-quote") {
                // FIXME: Take quotation depth into account
                if (isset($quotes[0][1])) {
                    $text .= $quotes[0][1];
                }
                continue;
            } elseif ($val === "no-open-quote") {
                // FIXME: Increment quotation depth
                continue;
            } elseif ($val === "no-close-quote") {
                // FIXME: Decrement quotation depth
                continue;
            }

            // attr()
            if (mb_substr($val, 0, 5) === "attr(") {
                $i = mb_strpos($val, ")");
                if ($i === false) {
                    continue;
                }

                $attr = trim(mb_substr($val, 5, $i - 5));
                if ($attr === "") {
                    continue;
                }

                $text .= $this->_frame->get_parent()->get_node()->getAttribute($attr);
                continue;
            }

            // counter()/counters()
            if (mb_substr($val, 0, 7) === "counter") {
                // Handle counter() references:
                // http://www.w3.org/TR/CSS21/generate.html#content

                $i = mb_strpos($val, ")");
                if ($i === false) {
                    continue;
                }

                preg_match('/(counters?)(^\()*?\(\s*([^\s,]+)\s*(,\s*["\']?([^"\'\)]*)["\']?\s*(,\s*([^\s)]+)\s*)?)?\)/i', $val, $args);
                $counter_id = $args[3];

                if (strtolower($args[1]) === "counter") {
                    // counter(name [,style])
                    if (isset($args[5])) {
                        $type = trim($args[5]);
                    } else {
                        $type = "decimal";
                    }
                    $p = $this->_frame->lookup_counter_frame($counter_id);

                    $text .= $p->counter_value($counter_id, $type);
                } elseif (strtolower($args[1]) === "counters") {
                    // counters(name, string [,style])
                    if (isset($args[5])) {
                        $string = $this->_parse_string($args[5]);
                    } else {
                        $string = "";
                    }

                    if (isset($args[7])) {
                        $type = trim($args[7]);
                    } else {
                        $type = "decimal";
                    }

                    $p = $this->_frame->lookup_counter_frame($counter_id);
                    $tmp = [];
                    while ($p) {
                        // We only want to use the counter values when they actually increment the counter
                        if (array_key_exists($counter_id, $p->_counters)) {
                            array_unshift($tmp, $p->counter_value($counter_id, $type));
                        }
                        $p = $p->lookup_counter_frame($counter_id);
                    }
                    $text .= implode($string, $tmp);
                } else {
                    // countertops?
                }

                continue;
            }
        }

        return $text;
    }

    /**
     * Handle counters and set generated content if the frame is a
     * generated-content frame.
     */
    protected function _set_content(): void
    {
        $frame = $this->_frame;

        if ($frame->content_set) {
            return;
        }

        $style = $frame->get_style();

        if (($reset = $style->counter_reset) !== "none") {
            $frame->reset_counters($reset);
        }

        if (($increment = $style->counter_increment) !== "none") {
            $frame->increment_counters($increment);
        }

        if ($frame->get_node()->nodeName === "dompdf_generated") {
            $content = $this->_parse_content();

            if ($content !== "") {
                $node = $frame->get_node()->ownerDocument->createTextNode($content);

                $new_style = $style->get_stylesheet()->create_style();
                $new_style->inherit($style);

                $new_frame = new Frame($node);
                $new_frame->set_style($new_style);

                Factory::decorate_frame($new_frame, $frame->get_dompdf(), $frame->get_root());
                $frame->append_child($new_frame);
            }
        }

        $frame->content_set = true;
    }
}
<?php
/**
 * @package dompdf
 * @link    https://github.com/dompdf/dompdf
 * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
 */
namespace Dompdf\FrameReflower;

use Dompdf\FrameDecorator\AbstractFrameDecorator;
use Dompdf\FrameDecorator\Block as BlockFrameDecorator;
use Dompdf\FrameDecorator\TableCell as TableCellFrameDecorator;
use Dompdf\FrameDecorator\Text as TextFrameDecorator;
use Dompdf\Exception;
use Dompdf\Css\Style;
use Dompdf\Helpers;

/**
 * Reflows block frames
 *
 * @package dompdf
 */
class Block extends AbstractFrameReflower
{
    // Minimum line width to justify, as fraction of available width
    const MIN_JUSTIFY_WIDTH = 0.80;

    /**
     * Frame for this reflower
     *
     * @var BlockFrameDecorator
     */
    protected $_frame;

    function __construct(BlockFrameDecorator $frame)
    {
        parent::__construct($frame);
    }

    /**
     *  Calculate the ideal used value for the width property as per:
     *  http://www.w3.org/TR/CSS21/visudet.html#Computing_widths_and_margins
     *
     * @param float $width
     *
     * @return array
     */
    protected function _calculate_width($width)
    {
        $frame = $this->_frame;
        $style = $frame->get_style();
        $absolute = $frame->is_absolute();

        $cb = $frame->get_containing_block();
        $w = $cb["w"];

        $rm = $style->length_in_pt($style->margin_right, $w);
        $lm = $style->length_in_pt($style->margin_left, $w);

        $left = $style->length_in_pt($style->left, $w);
        $right = $style->length_in_pt($style->right, $w);

        // Handle 'auto' values
        $dims = [$style->border_left_width,
            $style->border_right_width,
            $style->padding_left,
            $style->padding_right,
            $width !== "auto" ? $width : 0,
            $rm !== "auto" ? $rm : 0,
            $lm !== "auto" ? $lm : 0];

        // absolutely positioned boxes take the 'left' and 'right' properties into account
        if ($absolute) {
            $dims[] = $left !== "auto" ? $left : 0;
            $dims[] = $right !== "auto" ? $right : 0;
        }

        $sum = (float)$style->length_in_pt($dims, $w);

        // Compare to the containing block
        $diff = $w - $sum;

        if ($absolute) {
            // Absolutely positioned
            // http://www.w3.org/TR/CSS21/visudet.html#abs-non-replaced-width

            if ($width === "auto" || $left === "auto" || $right === "auto") {
                // "all of the three are 'auto'" logic + otherwise case
                if ($lm === "auto") {
                    $lm = 0;
                }
                if ($rm === "auto") {
                    $rm = 0;
                }

                $block_parent = $frame->find_block_parent();
                $parent_content = $block_parent->get_content_box();
                $line = $block_parent->get_current_line_box();

                // TODO: This is the in-flow inline position. Use the in-flow
                // block position if the original display type is block-level
                $inflow_x = $parent_content["x"] - $cb["x"] + $line->left + $line->w;

                if ($width === "auto" && $left === "auto" && $right === "auto") {
                    // rule 3, per instruction preceding rule set
                    // shrink-to-fit width
                    $left = $inflow_x;
                    [$min, $max] = $this->get_min_max_child_width();
                    $width = min(max($min, $diff - $left), $max);
                    $right = $diff - $left - $width;
                } elseif ($width === "auto" && $left === "auto") {
                    // rule 1
                    // shrink-to-fit width
                    [$min, $max] = $this->get_min_max_child_width();
                    $width = min(max($min, $diff), $max);
                    $left = $diff - $width;
                } elseif ($width === "auto" && $right === "auto") {
                    // rule 3
                    // shrink-to-fit width
                    [$min, $max] = $this->get_min_max_child_width();
                    $width = min(max($min, $diff), $max);
                    $right = $diff - $width;
                } elseif ($left === "auto" && $right === "auto") {
                    // rule 2
                    $left = $inflow_x;
                    $right = $diff - $left;
                } elseif ($left === "auto") {
                    // rule 4
                    $left = $diff;
                } elseif ($width === "auto") {
                    // rule 5
                    $width = max($diff, 0);
                } else {
                    // $right === "auto"
                    // rule 6
                    $right = $diff;
                }
            } else {
                // "none of the three are 'auto'" logic described in paragraph preceding the rules
                if ($diff >= 0) {
                    if ($lm === "auto" && $rm === "auto") {
                        $lm = $rm = $diff / 2;
                    } elseif ($lm === "auto") {
                        $lm = $diff;
                    } elseif ($rm === "auto") {
                        $rm = $diff;
                    }
                } else {
                    // over-constrained, solve for right
                    $right = $right + $diff;

                    if ($lm === "auto") {
                        $lm = 0;
                    }
                    if ($rm === "auto") {
                        $rm = 0;
                    }
                }
            }
        } elseif ($style->float !== "none" || $style->display === "inline-block") {
            // Shrink-to-fit width for float and inline block
            // https://www.w3.org/TR/CSS21/visudet.html#float-width
            // https://www.w3.org/TR/CSS21/visudet.html#inlineblock-width

            if ($width === "auto") {
                [$min, $max] = $this->get_min_max_child_width();
                $width = min(max($min, $diff), $max);
            }
            if ($lm === "auto") {
                $lm = 0;
            }
            if ($rm === "auto") {
                $rm = 0;
            }
        } else {
            // Block-level, normal flow
            // https://www.w3.org/TR/CSS21/visudet.html#blockwidth

            if ($diff >= 0) {
                // Find auto properties and get them to take up the slack
                if ($width === "auto") {
                    $width = $diff;

                    if ($lm === "auto") {
                        $lm = 0;
                    }
                    if ($rm === "auto") {
                        $rm = 0;
                    }
                } elseif ($lm === "auto" && $rm === "auto") {
                    $lm = $rm = $diff / 2;
                } elseif ($lm === "auto") {
                    $lm = $diff;
                } elseif ($rm === "auto") {
                    $rm = $diff;
                }
            } else {
                // We are over constrained--set margin-right to the difference
                $rm = (float) $rm + $diff;

                if ($width === "auto") {
                    $width = 0;
                }
                if ($lm === "auto") {
                    $lm = 0;
                }
            }
        }

        return [
            "width" => $width,
            "margin_left" => $lm,
            "margin_right" => $rm,
            "left" => $left,
            "right" => $right,
        ];
    }

    /**
     * Call the above function, but resolve max/min widths
     *
     * @throws Exception
     * @return array
     */
    protected function _calculate_restricted_width()
    {
        $frame = $this->_frame;
        $style = $frame->get_style();
        $cb = $frame->get_containing_block();

        if (!isset($cb["w"])) {
            throw new Exception("Box property calculation requires containing block width");
        }

        $width = $style->length_in_pt($style->width, $cb["w"]);

        $values = $this->_calculate_width($width);
        $margin_left = $values["margin_left"];
        $margin_right = $values["margin_right"];
        $width = $values["width"];
        $left = $values["left"];
        $right = $values["right"];

        // Handle min/max width
        // https://www.w3.org/TR/CSS21/visudet.html#min-max-widths
        $min_width = $this->resolve_min_width($cb["w"]);
        $max_width = $this->resolve_max_width($cb["w"]);

        if ($width > $max_width) {
            $values = $this->_calculate_width($max_width);
            $margin_left = $values["margin_left"];
            $margin_right = $values["margin_right"];
            $width = $values["width"];
            $left = $values["left"];
            $right = $values["right"];
        }

        if ($width < $min_width) {
            $values = $this->_calculate_width($min_width);
            $margin_left = $values["margin_left"];
            $margin_right = $values["margin_right"];
            $width = $values["width"];
            $left = $values["left"];
            $right = $values["right"];
        }

        return [$width, $margin_left, $margin_right, $left, $right];
    }

    /**
     * Determine the unrestricted height of content within the block
     * not by adding each line's height, but by getting the last line's position.
     * This because lines could have been pushed lower by a clearing element.
     *
     * @return float
     */
    protected function _calculate_content_height()
    {
        $height = 0;
        $lines = $this->_frame->get_line_boxes();
        if (count($lines) > 0) {
            $last_line = end($lines);
            $content_box = $this->_frame->get_content_box();
            $height = $last_line->y + $last_line->h - $content_box["y"];
        }
        return $height;
    }

    /**
     * Determine the frame's restricted height
     *
     * @return array
     */
    protected function _calculate_restricted_height()
    {
        $frame = $this->_frame;
        $style = $frame->get_style();
        $content_height = $this->_calculate_content_height();
        $cb = $frame->get_containing_block();

        $height = $style->length_in_pt($style->height, $cb["h"]);
        $margin_top = $style->length_in_pt($style->margin_top, $cb["w"]);
        $margin_bottom = $style->length_in_pt($style->margin_bottom, $cb["w"]);

        $top = $style->length_in_pt($style->top, $cb["h"]);
        $bottom = $style->length_in_pt($style->bottom, $cb["h"]);

        if ($frame->is_absolute()) {
            // Absolutely positioned
            // http://www.w3.org/TR/CSS21/visudet.html#abs-non-replaced-height

            $h_dims = [
                $top !== "auto" ? $top : 0,
                $height !== "auto" ? $height : 0,
                $bottom !== "auto" ? $bottom : 0
            ];
            $w_dims = [
                $style->margin_top !== "auto" ? $style->margin_top : 0,
                $style->padding_top,
                $style->border_top_width,
                $style->border_bottom_width,
                $style->padding_bottom,
                $style->margin_bottom !== "auto" ? $style->margin_bottom : 0
            ];

            $sum = (float)$style->length_in_pt($h_dims, $cb["h"])
                + (float)$style->length_in_pt($w_dims, $cb["w"]);

            $diff = $cb["h"] - $sum;

            if ($height === "auto" || $top === "auto" || $bottom === "auto") {
                // "all of the three are 'auto'" logic + otherwise case
                if ($margin_top === "auto") {
                    $margin_top = 0;
                }
                if ($margin_bottom === "auto") {
                    $margin_bottom = 0;
                }

                $block_parent = $frame->find_block_parent();
                $current_line = $block_parent->get_current_line_box();

                // TODO: This is the in-flow inline position. Use the in-flow
                // block position if the original display type is block-level
                $inflow_y = $current_line->y - $cb["y"];

                if ($height === "auto" && $top === "auto" && $bottom === "auto") {
                    // rule 3, per instruction preceding rule set
                    $top = $inflow_y;
                    $height = $content_height;
                    $bottom = $diff - $top - $height;
                } elseif ($height === "auto" && $top === "auto") {
                    // rule 1
                    $height = $content_height;
                    $top = $diff - $height;
                } elseif ($height === "auto" && $bottom === "auto") {
                    // rule 3
                    $height = $content_height;
                    $bottom = $diff - $height;
                } elseif ($top === "auto" && $bottom === "auto") {
                    // rule 2
                    $top = $inflow_y;
                    $bottom = $diff - $top;
                } elseif ($top === "auto") {
                    // rule 4
                    $top = $diff;
                } elseif ($height === "auto") {
                    // rule 5
                    $height = max($diff, 0);
                } else {
                    // $bottom === "auto"
                    // rule 6
                    $bottom = $diff;
                }
            } else {
                // "none of the three are 'auto'" logic described in paragraph preceding the rules
                if ($diff >= 0) {
                    if ($margin_top === "auto" && $margin_bottom === "auto") {
                        $margin_top = $margin_bottom = $diff / 2;
                    } elseif ($margin_top === "auto") {
                        $margin_top = $diff;
                    } elseif ($margin_bottom === "auto") {
                        $margin_bottom = $diff;
                    }
                } else {
                    // over-constrained, solve for bottom
                    $bottom = $bottom + $diff;

                    if ($margin_top === "auto") {
                        $margin_top = 0;
                    }
                    if ($margin_bottom === "auto") {
                        $margin_bottom = 0;
                    }
                }
            }
        } else {
            // https://www.w3.org/TR/CSS21/visudet.html#normal-block
            // https://www.w3.org/TR/CSS21/visudet.html#block-root-margin

            if ($height === "auto") {
                $height = $content_height;
            }
            if ($margin_top === "auto") {
                $margin_top = 0;
            }
            if ($margin_bottom === "auto") {
                $margin_bottom = 0;
            }

            // Handle min/max height
            // https://www.w3.org/TR/CSS21/visudet.html#min-max-heights
            $min_height = $this->resolve_min_height($cb["h"]);
            $max_height = $this->resolve_max_height($cb["h"]);
            $height = Helpers::clamp($height, $min_height, $max_height);
        }

        // TODO: Need to also take min/max height into account for absolute
        // positioning, using similar logic to the `_calculate_width`/
        // `calculate_restricted_width` split above. The non-absolute case
        // can simply clamp height within min/max, as margins and offsets are
        // not affected

        return [$height, $margin_top, $margin_bottom, $top, $bottom];
    }

    /**
     * Adjust the justification of each of our lines.
     * http://www.w3.org/TR/CSS21/text.html#propdef-text-align
     */
    protected function _text_align()
    {
        $style = $this->_frame->get_style();
        $w = $this->_frame->get_containing_block("w");
        $width = (float)$style->length_in_pt($style->width, $w);
        $text_indent = (float)$style->length_in_pt($style->text_indent, $w);

        switch ($style->text_align) {
            default:
            case "left":
                foreach ($this->_frame->get_line_boxes() as $line) {
                    if (!$line->inline) {
                        continue;
                    }

                    $line->trim_trailing_ws();

                    if ($line->left) {
                        foreach ($line->frames_to_align() as $frame) {
                            $frame->move($line->left, 0);
                        }
                    }
                }
                break;

            case "right":
                foreach ($this->_frame->get_line_boxes() as $i => $line) {
                    if (!$line->inline) {
                        continue;
                    }

                    $line->trim_trailing_ws();

                    $indent = $i === 0 ? $text_indent : 0;
                    $dx = $width - $line->w - $line->right - $indent;

                    foreach ($line->frames_to_align() as $frame) {
                        $frame->move($dx, 0);
                    }
                }
                break;

            case "justify":
                // We justify all lines except the last one, unless the frame
                // has been split, in which case the actual last line is part of
                // the split-off frame
                $lines = $this->_frame->get_line_boxes();
                $last_line_index = $this->_frame->is_split ? null : count($lines) - 1;

                foreach ($lines as $i => $line) {
                    if (!$line->inline) {
                        continue;
                    }

                    $line->trim_trailing_ws();

                    if ($line->left) {
                        foreach ($line->frames_to_align() as $frame) {
                            $frame->move($line->left, 0);
                        }
                    }

                    if ($line->br || $i === $last_line_index) {
                        continue;
                    }

                    $frames = $line->get_frames();
                    $other_frame_count = 0;

                    foreach ($frames as $frame) {
                        if (!($frame instanceof TextFrameDecorator)) {
                            $other_frame_count++;
                        }
                    }

                    $word_count = $line->wc + $other_frame_count;

                    // Set the spacing for each child
                    if ($word_count > 1) {
                        $indent = $i === 0 ? $text_indent : 0;
                        $spacing = ($width - $line->get_width() - $indent) / ($word_count - 1);
                    } else {
                        $spacing = 0;
                    }

                    $dx = 0;
                    foreach ($frames as $frame) {
                        if ($frame instanceof TextFrameDecorator) {
                            $text = $frame->get_text();
                            $spaces = mb_substr_count($text, " ");

                            $frame->move($dx, 0);
                            $frame->set_text_spacing($spacing);

                            $dx += $spaces * $spacing;
                        } else {
                            $frame->move($dx, 0);
                        }
                    }

                    // The line (should) now occupy the entire width
                    $line->w = $width;
                }
                break;

            case "center":
            case "centre":
                foreach ($this->_frame->get_line_boxes() as $i => $line) {
                    if (!$line->inline) {
                        continue;
                    }

                    $line->trim_trailing_ws();

                    $indent = $i === 0 ? $text_indent : 0;
                    $dx = ($width + $line->left - $line->w - $line->right - $indent) / 2;

                    foreach ($line->frames_to_align() as $frame) {
                        $frame->move($dx, 0);
                    }
                }
                break;
        }
    }

    /**
     * Align inline children vertically.
     * Aligns each child vertically after each line is reflowed
     */
    function vertical_align()
    {
        $fontMetrics = $this->get_dompdf()->getFontMetrics();

        foreach ($this->_frame->get_line_boxes() as $line) {
            $height = $line->h;

            // Move all markers to the top of the line box
            foreach ($line->get_list_markers() as $marker) {
                $x = $marker->get_position("x");
                $marker->set_position($x, $line->y);
            }

            foreach ($line->frames_to_align() as $frame) {
                $style = $frame->get_style();
                $isInlineBlock = $style->display !== "inline"
                    && $style->display !== "-dompdf-list-bullet";

                $baseline = $fontMetrics->getFontBaseline($style->font_family, $style->font_size);
                $y_offset = 0;

                //FIXME: The 0.8 ratio applied to the height is arbitrary (used to accommodate descenders?)
                if ($isInlineBlock) {
                    // Workaround: Skip vertical alignment if the frame is the
                    // only one one the line, excluding empty text frames, which
                    // may be the result of trailing white space
                    // FIXME: This special case should be removed once vertical
                    // alignment is properly fixed
                    $skip = true;

                    foreach ($line->get_frames() as $other) {
                        if ($other !== $frame
                            && !($other->is_text_node() && $other->get_node()->nodeValue === "")
                         ) {
                            $skip = false;
                            break;
                        }
                    }

                    if ($skip) {
                        continue;
                    }

                    $marginHeight = $frame->get_margin_height();
                    $imageHeightDiff = $height * 0.8 - $marginHeight;

                    $align = $frame->get_style()->vertical_align;
                    if (in_array($align, Style::VERTICAL_ALIGN_KEYWORDS, true)) {
                        switch ($align) {
                            case "middle":
                                $y_offset = $imageHeightDiff / 2;
                                break;

                            case "sub":
                                $y_offset = 0.3 * $height + $imageHeightDiff;
                                break;

                            case "super":
                                $y_offset = -0.2 * $height + $imageHeightDiff;
                                break;

                            case "text-top": // FIXME: this should be the height of the frame minus the height of the text
                                $y_offset = $height - $style->line_height;
                                break;

                            case "top":
                                break;

                            case "text-bottom": // FIXME: align bottom of image with the descender?
                            case "bottom":
                                $y_offset = 0.3 * $height + $imageHeightDiff;
                                break;

                            case "baseline":
                            default:
                                $y_offset = $imageHeightDiff;
                                break;
                        }
                    } else {
                        $y_offset = $baseline - (float)$style->length_in_pt($align, $style->font_size) - $marginHeight;
                    }
                } else {
                    $parent = $frame->get_parent();
                    if ($parent instanceof TableCellFrameDecorator) {
                        $align = "baseline";
                    } else {
                        $align = $parent->get_style()->vertical_align;
                    }
                    if (in_array($align, Style::VERTICAL_ALIGN_KEYWORDS, true)) {
                        switch ($align) {
                            case "middle":
                                $y_offset = ($height * 0.8 - $baseline) / 2;
                                break;

                            case "sub":
                                $y_offset = $height * 0.8 - $baseline * 0.5;
                                break;

                            case "super":
                                $y_offset = $height * 0.8 - $baseline * 1.4;
                                break;

                            case "text-top":
                            case "top": // Not strictly accurate, but good enough for now
                                break;

                            case "text-bottom":
                            case "bottom":
                                $y_offset = $height * 0.8 - $baseline;
                                break;

                            case "baseline":
                            default:
                                $y_offset = $height * 0.8 - $baseline;
                                break;
                        }
                    } else {
                        $y_offset = $height * 0.8 - $baseline - (float)$style->length_in_pt($align, $style->font_size);
                    }
                }

                if ($y_offset !== 0) {
                    $frame->move(0, $y_offset);
                }
            }
        }
    }

    /**
     * @param AbstractFrameDecorator $child
     */
    function process_clear(AbstractFrameDecorator $child)
    {
        $child_style = $child->get_style();
        $root = $this->_frame->get_root();

        // Handle "clear"
        if ($child_style->clear !== "none") {
            //TODO: this is a WIP for handling clear/float frames that are in between inline frames
            if ($child->get_prev_sibling() !== null) {
                $this->_frame->add_line();
            }
            if ($child_style->float !== "none" && $child->get_next_sibling()) {
                $this->_frame->set_current_line_number($this->_frame->get_current_line_number() - 1);
            }

            $lowest_y = $root->get_lowest_float_offset($child);

            // If a float is still applying, we handle it
            if ($lowest_y) {
                if ($child->is_in_flow()) {
                    $line_box = $this->_frame->get_current_line_box();
                    $line_box->y = $lowest_y + $child->get_margin_height();
                    $line_box->left = 0;
                    $line_box->right = 0;
                }

                $child->move(0, $lowest_y - $child->get_position("y"));
            }
        }
    }

    /**
     * @param AbstractFrameDecorator $child
     * @param float $cb_x
     * @param float $cb_w
     */
    function process_float(AbstractFrameDecorator $child, $cb_x, $cb_w)
    {
        $child_style = $child->get_style();
        $root = $this->_frame->get_root();

        // Handle "float"
        if ($child_style->float !== "none") {
            $root->add_floating_frame($child);

            // Remove next frame's beginning whitespace
            $next = $child->get_next_sibling();
            if ($next && $next instanceof TextFrameDecorator) {
                $next->set_text(ltrim($next->get_text()));
            }

            $line_box = $this->_frame->get_current_line_box();
            list($old_x, $old_y) = $child->get_position();

            $float_x = $cb_x;
            $float_y = $old_y;
            $float_w = $child->get_margin_width();

            if ($child_style->clear === "none") {
                switch ($child_style->float) {
                    case "left":
                        $float_x += $line_box->left;
                        break;
                    case "right":
                        $float_x += ($cb_w - $line_box->right - $float_w);
                        break;
                }
            } else {
                if ($child_style->float === "right") {
                    $float_x += ($cb_w - $float_w);
                }
            }

            if ($cb_w < $float_x + $float_w - $old_x) {
                // TODO handle when floating elements don't fit
            }

            $line_box->get_float_offsets();

            if ($child->_float_next_line) {
                $float_y += $line_box->h;
            }

            $child->set_position($float_x, $float_y);
            $child->move($float_x - $old_x, $float_y - $old_y, true);
        }
    }

    /**
     * @param BlockFrameDecorator $block
     */
    function reflow(BlockFrameDecorator $block = null)
    {

        // Check if a page break is forced
        $page = $this->_frame->get_root();
        $page->check_forced_page_break($this->_frame);

        // Bail if the page is full
        if ($page->is_full()) {
            return;
        }

        $this->determine_absolute_containing_block();

        // Counters and generated content
        $this->_set_content();

        // Inherit any dangling list markers
        if ($block && $this->_frame->is_in_flow()) {
            $this->_frame->inherit_dangling_markers($block);
        }

        // Collapse margins if required
        $this->_collapse_margins();

        $style = $this->_frame->get_style();
        $cb = $this->_frame->get_containing_block();

        // Determine the constraints imposed by this frame: calculate the width
        // of the content area:
        [$width, $margin_left, $margin_right, $left, $right] = $this->_calculate_restricted_width();

        // Store the calculated properties
        $style->set_used("width", $width);
        $style->set_used("margin_left", $margin_left);
        $style->set_used("margin_right", $margin_right);
        $style->set_used("left", $left);
        $style->set_used("right", $right);

        $margin_top = $style->length_in_pt($style->margin_top, $cb["w"]);
        $margin_bottom = $style->length_in_pt($style->margin_bottom, $cb["w"]);

        $auto_top = $style->top === "auto";
        $auto_margin_top = $margin_top === "auto";

        // Update the position
        $this->_frame->position();
        [$x, $y] = $this->_frame->get_position();

        // Adjust the first line based on the text-indent property
        $indent = (float)$style->length_in_pt($style->text_indent, $cb["w"]);
        $this->_frame->increase_line_width($indent);

        // Determine the content edge
        $top = (float)$style->length_in_pt([
            $margin_top !== "auto" ? $margin_top : 0,
            $style->border_top_width,
            $style->padding_top
        ], $cb["w"]);
        $bottom = (float)$style->length_in_pt([
            $margin_bottom !== "auto" ? $margin_bottom : 0,
            $style->border_bottom_width,
            $style->padding_bottom
        ], $cb["w"]);

        $cb_x = $x + (float)$margin_left + (float)$style->length_in_pt([$style->border_left_width,
                $style->padding_left], $cb["w"]);

        $cb_y = $y + $top;

        $height = $style->length_in_pt($style->height, $cb["h"]);
        if ($height === "auto") {
            $height = ($cb["h"] + $cb["y"]) - $bottom - $cb_y;
        }

        // Set the y position of the first line in this block
        $line_box = $this->_frame->get_current_line_box();
        $line_box->y = $cb_y;
        $line_box->get_float_offsets();

        // Set the containing blocks and reflow each child
        foreach ($this->_frame->get_children() as $child) {
            $child->set_containing_block($cb_x, $cb_y, $width, $height);
            $this->process_clear($child);
            $child->reflow($this->_frame);

            // Check for a page break before the child
            $page->check_page_break($child);

            // Don't add the child to the line if a page break has occurred
            // before it (possibly via a descendant), in which case it has been
            // reset, including its position
            if ($page->is_full() && $child->get_position("x") === null) {
                break;
            }

            $this->process_float($child, $cb_x, $width);
        }

        // Stop reflow if a page break has occurred before the frame, in which
        // case it has been reset, including its position
        if ($page->is_full() && $this->_frame->get_position("x") === null) {
            return;
        }

        // Determine our height
        [$height, $margin_top, $margin_bottom, $top, $bottom] = $this->_calculate_restricted_height();

        $style->set_used("height", $height);
        $style->set_used("margin_top", $margin_top);
        $style->set_used("margin_bottom", $margin_bottom);
        $style->set_used("top", $top);
        $style->set_used("bottom", $bottom);

        if ($this->_frame->is_absolute()) {
            if ($auto_top) {
                $this->_frame->move(0, $top);
            }
            if ($auto_margin_top) {
                $this->_frame->move(0, $margin_top, true);
            }
        }

        $this->_text_align();
        $this->vertical_align();

        // Handle relative positioning
        foreach ($this->_frame->get_children() as $child) {
            $this->position_relative($child);
        }

        if ($block && $this->_frame->is_in_flow()) {
            $block->add_frame_to_line($this->_frame);

            if ($this->_frame->is_block_level()) {
                $block->add_line();
            }
        }
    }

    public function get_min_max_content_width(): array
    {
        // TODO: While the containing block is not set yet on the frame, it can
        // already be determined in some cases due to fixed dimensions on the
        // ancestor forming the containing block. In such cases, percentage
        // values could be resolved here
        $style = $this->_frame->get_style();
        $width = $style->width;
        $fixed_width = $width !== "auto" && !Helpers::is_percent($width);

        // If the frame has a specified width, then we don't need to check
        // its children
        if ($fixed_width) {
            $min = (float) $style->length_in_pt($width, 0);
            $max = $min;
        } else {
            [$min, $max] = $this->get_min_max_child_width();
        }

        // Handle min/max width style properties
        $min_width = $this->resolve_min_width(null);
        $max_width = $this->resolve_max_width(null);
        $min = Helpers::clamp($min, $min_width, $max_width);
        $max = Helpers::clamp($max, $min_width, $max_width);

        return [$min, $max];
    }
}
<?php
/**
 * @package dompdf
 * @link    https://github.com/dompdf/dompdf
 * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
 */
namespace Dompdf\FrameReflower;

use Dompdf\Helpers;
use Dompdf\FrameDecorator\Block as BlockFrameDecorator;
use Dompdf\FrameDecorator\Image as ImageFrameDecorator;

/**
 * Image reflower class
 *
 * @package dompdf
 */
class Image extends AbstractFrameReflower
{

    /**
     * Image constructor.
     * @param ImageFrameDecorator $frame
     */
    function __construct(ImageFrameDecorator $frame)
    {
        parent::__construct($frame);
    }

    /**
     * @param BlockFrameDecorator|null $block
     */
    function reflow(BlockFrameDecorator $block = null)
    {
        $this->determine_absolute_containing_block();

        // Counters and generated content
        $this->_set_content();

        //FLOAT
        //$frame = $this->_frame;
        //$page = $frame->get_root();

        //if ($frame->get_style()->float !== "none" ) {
        //  $page->add_floating_frame($this);
        //}

        $this->resolve_dimensions();
        $this->resolve_margins();

        $frame = $this->_frame;
        $frame->position();

        if ($block && $frame->is_in_flow()) {
            $block->add_frame_to_line($frame);
        }
    }

    public function get_min_max_content_width(): array
    {
        // TODO: While the containing block is not set yet on the frame, it can
        // already be determined in some cases due to fixed dimensions on the
        // ancestor forming the containing block. In such cases, percentage
        // values could be resolved here
        $style = $this->_frame->get_style();

        [$width] = $this->calculate_size(null, null);
        $min_width = $this->resolve_min_width(null);
        $percent_width = Helpers::is_percent($style->width)
            || Helpers::is_percent($style->max_width)
            || ($style->width === "auto"
                && (Helpers::is_percent($style->height) || Helpers::is_percent($style->max_height)));

        // Use the specified min width as minimum when width or max width depend
        // on the containing block and cannot be resolved yet. This mimics
        // browser behavior
        $min = $percent_width ? $min_width : $width;
        $max = $width;

        return [$min, $max];
    }

    /**
     * Calculate width and height, accounting for min/max constraints.
     *
     * * https://www.w3.org/TR/CSS21/visudet.html#inline-replaced-width
     * * https://www.w3.org/TR/CSS21/visudet.html#inline-replaced-height
     * * https://www.w3.org/TR/CSS21/visudet.html#min-max-widths
     * * https://www.w3.org/TR/CSS21/visudet.html#min-max-heights
     *
     * @param float|null $cbw Width of the containing block.
     * @param float|null $cbh Height of the containing block.
     *
     * @return float[]
     */
    protected function calculate_size(?float $cbw, ?float $cbh): array
    {
        /** @var ImageFrameDecorator */
        $frame = $this->_frame;
        $style = $frame->get_style();

        $computed_width = $style->width;
        $computed_height = $style->height;

        $width = $cbw === null && Helpers::is_percent($computed_width)
            ? "auto"
            : $style->length_in_pt($computed_width, $cbw ?? 0);
        $height = $cbh === null && Helpers::is_percent($computed_height)
            ? "auto"
            : $style->length_in_pt($computed_height, $cbh ?? 0);
        $min_width = $this->resolve_min_width($cbw);
        $max_width = $this->resolve_max_width($cbw);
        $min_height = $this->resolve_min_height($cbh);
        $max_height = $this->resolve_max_height($cbh);

        if ($width === "auto" && $height === "auto") {
            // Use intrinsic dimensions, resampled to pt
            [$img_width, $img_height] = $frame->get_intrinsic_dimensions();
            $w = $frame->resample($img_width);
            $h = $frame->resample($img_height);

            // Resolve min/max constraints according to the constraint-violation
            // table in https://www.w3.org/TR/CSS21/visudet.html#min-max-widths
            $max_width = max($min_width, $max_width);
            $max_height = max($min_height, $max_height);

            if (($w > $max_width && $h <= $max_height)
                || ($w > $max_width && $h > $max_height && $max_width / $w <= $max_height / $h)
                || ($w < $min_width && $h > $min_height)
                || ($w < $min_width && $h < $min_height && $min_width / $w > $min_height / $h)
            ) {
                $width = Helpers::clamp($w, $min_width, $max_width);
                $height = $width * ($img_height / $img_width);
                $height = Helpers::clamp($height, $min_height, $max_height);
            } else {
                $height = Helpers::clamp($h, $min_height, $max_height);
                $width = $height * ($img_width / $img_height);
                $width = Helpers::clamp($width, $min_width, $max_width);
            }
        } elseif ($height === "auto") {
            // Width is fixed, scale height according to aspect ratio
            [$img_width, $img_height] = $frame->get_intrinsic_dimensions();
            $width = Helpers::clamp((float) $width, $min_width, $max_width);
            $height = $width * ($img_height / $img_width);
            $height = Helpers::clamp($height, $min_height, $max_height);
        } elseif ($width === "auto") {
            // Height is fixed, scale width according to aspect ratio
            [$img_width, $img_height] = $frame->get_intrinsic_dimensions();
            $height = Helpers::clamp((float) $height, $min_height, $max_height);
            $width = $height * ($img_width / $img_height);
            $width = Helpers::clamp($width, $min_width, $max_width);
        } else {
            // Width and height are fixed
            $width = Helpers::clamp((float) $width, $min_width, $max_width);
            $height = Helpers::clamp((float) $height, $min_height, $max_height);
        }

        return [$width, $height];
    }

    protected function resolve_dimensions(): void
    {
        /** @var ImageFrameDecorator */
        $frame = $this->_frame;
        $style = $frame->get_style();

        $debug_png = $this->get_dompdf()->getOptions()->getDebugPng();

        if ($debug_png) {
            [$img_width, $img_height] = $frame->get_intrinsic_dimensions();
            print "resolve_dimensions() " .
                $frame->get_style()->width . " " .
                $frame->get_style()->height . ";" .
                $frame->get_parent()->get_style()->width . " " .
                $frame->get_parent()->get_style()->height . ";" .
                $frame->get_parent()->get_parent()->get_style()->width . " " .
                $frame->get_parent()->get_parent()->get_style()->height . ";" .
                $img_width . " " .
                $img_height . "|";
        }

        [, , $cbw, $cbh] = $frame->get_containing_block();
        [$width, $height] = $this->calculate_size($cbw, $cbh);

        if ($debug_png) {
            print $width . " " . $height . ";";
        }

        $style->set_used("width", $width);
        $style->set_used("height", $height);
    }

    protected function resolve_margins(): void
    {
        // Only handle the inline case for now
        // https://www.w3.org/TR/CSS21/visudet.html#inline-replaced-width
        // https://www.w3.org/TR/CSS21/visudet.html#inline-replaced-height
        $style = $this->_frame->get_style();

        if ($style->margin_left === "auto") {
            $style->set_used("margin_left", 0.0);
        }
        if ($style->margin_right === "auto") {
            $style->set_used("margin_right", 0.0);
        }
        if ($style->margin_top === "auto") {
            $style->set_used("margin_top", 0.0);
        }
        if ($style->margin_bottom === "auto") {
            $style->set_used("margin_bottom", 0.0);
        }
    }
}
<?php
/**
 * @package dompdf
 * @link    https://github.com/dompdf/dompdf
 * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
 */
namespace Dompdf\FrameReflower;

use Dompdf\FrameDecorator\Block as BlockFrameDecorator;
use Dompdf\FrameDecorator\Inline as InlineFrameDecorator;
use Dompdf\FrameDecorator\Text as TextFrameDecorator;

/**
 * Reflows inline frames
 *
 * @package dompdf
 */
class Inline extends AbstractFrameReflower
{
    /**
     * Inline constructor.
     * @param InlineFrameDecorator $frame
     */
    function __construct(InlineFrameDecorator $frame)
    {
        parent::__construct($frame);
    }

    /**
     * Handle reflow of empty inline frames.
     *
     * Regular inline frames are positioned together with their text (or inline)
     * children after child reflow. Empty inline frames have no children that
     * could determine the positioning, so they need to be handled separately.
     *
     * @param BlockFrameDecorator $block
     */
    protected function reflow_empty(BlockFrameDecorator $block): void
    {
        /** @var InlineFrameDecorator */
        $frame = $this->_frame;
        $style = $frame->get_style();

        // Resolve width, so the margin width can be checked
        $style->set_used("width", 0.0);

        $cb = $frame->get_containing_block();
        $line = $block->get_current_line_box();
        $width = $frame->get_margin_width();

        if ($width > ($cb["w"] - $line->left - $line->w - $line->right)) {
            $block->add_line();

            // Find the appropriate inline ancestor to split
            $child = $frame;
            $p = $child->get_parent();
            while ($p instanceof InlineFrameDecorator && !$child->get_prev_sibling()) {
                $child = $p;
                $p = $p->get_parent();
            }

            if ($p instanceof InlineFrameDecorator) {
                // Split parent and stop current reflow. Reflow continues
                // via child-reflow loop of split parent
                $p->split($child);
                return;
            }
        }

        $frame->position();
        $block->add_frame_to_line($frame);
    }

    /**
     * @param BlockFrameDecorator|null $block
     */
    function reflow(BlockFrameDecorator $block = null)
    {
        /** @var InlineFrameDecorator */
        $frame = $this->_frame;

        // Check if a page break is forced
        $page = $frame->get_root();
        $page->check_forced_page_break($frame);

        if ($page->is_full()) {
            return;
        }

        // Counters and generated content
        $this->_set_content();

        $style = $frame->get_style();

        // Resolve auto margins
        // https://www.w3.org/TR/CSS21/visudet.html#inline-width
        // https://www.w3.org/TR/CSS21/visudet.html#inline-non-replaced
        if ($style->margin_left === "auto") {
            $style->set_used("margin_left", 0.0);
        }
        if ($style->margin_right === "auto") {
            $style->set_used("margin_right", 0.0);
        }
        if ($style->margin_top === "auto") {
            $style->set_used("margin_top", 0.0);
        }
        if ($style->margin_bottom === "auto") {
            $style->set_used("margin_bottom", 0.0);
        }

        // Handle line breaks
        if ($frame->get_node()->nodeName === "br") {
            if ($block) {
                $line = $block->get_current_line_box();
                $frame->set_containing_line($line);
                $block->maximize_line_height($frame->get_margin_height(), $frame);
                $block->add_line(true);

                $next = $frame->get_next_sibling();
                $p = $frame->get_parent();

                if ($next && $p instanceof InlineFrameDecorator) {
                    $p->split($next);
                }
            }
            return;
        }

        // Handle empty inline frames
        if (!$frame->get_first_child()) {
            if ($block) {
                $this->reflow_empty($block);
            }
            return;
        }

        // Add our margin, padding & border to the first and last children
        if (($f = $frame->get_first_child()) && $f instanceof TextFrameDecorator) {
            $f_style = $f->get_style();
            $f_style->margin_left = $style->margin_left;
            $f_style->padding_left = $style->padding_left;
            $f_style->border_left_width = $style->border_left_width;
            $f_style->border_left_style = $style->border_left_style;
            $f_style->border_left_color = $style->border_left_color;
        }

        if (($l = $frame->get_last_child()) && $l instanceof TextFrameDecorator) {
            $l_style = $l->get_style();
            $l_style->margin_right = $style->margin_right;
            $l_style->padding_right = $style->padding_right;
            $l_style->border_right_width = $style->border_right_width;
            $l_style->border_right_style = $style->border_right_style;
            $l_style->border_right_color = $style->border_right_color;
        }

        $cb = $frame->get_containing_block();

        // Set the containing blocks and reflow each child.  The containing
        // block is not changed by line boxes.
        foreach ($frame->get_children() as $child) {
            $child->set_containing_block($cb);
            $child->reflow($block);

            // Stop reflow if the frame has been reset by a line or page break
            // due to child reflow
            if (!$frame->content_set) {
                return;
            }
        }

        if (!$frame->get_first_child()) {
            return;
        }

        // Assume the position of the first child
        [$x, $y] = $frame->get_first_child()->get_position();
        $frame->set_position($x, $y);

        // Handle relative positioning
        foreach ($frame->get_children() as $child) {
            $this->position_relative($child);
        }

        if ($block) {
            $block->add_frame_to_line($frame);
        }
    }
}
<?php
/**
 * @package dompdf
 * @link    https://github.com/dompdf/dompdf
 * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
 */
namespace Dompdf\FrameReflower;

use Dompdf\FrameDecorator\Block as BlockFrameDecorator;
use Dompdf\FrameDecorator\ListBullet as ListBulletFrameDecorator;

/**
 * Reflows list bullets
 *
 * @package dompdf
 */
class ListBullet extends AbstractFrameReflower
{

    /**
     * ListBullet constructor.
     * @param ListBulletFrameDecorator $frame
     */
    function __construct(ListBulletFrameDecorator $frame)
    {
        parent::__construct($frame);
    }

    /**
     * @param BlockFrameDecorator|null $block
     */
    function reflow(BlockFrameDecorator $block = null)
    {
        if ($block === null) {
            return;
        }

        /** @var ListBulletFrameDecorator */
        $frame = $this->_frame;
        $style = $frame->get_style();

        $style->set_used("width", $frame->get_width());
        $frame->position();

        if ($style->list_style_position === "inside") {
            $block->add_frame_to_line($frame);
        } else {
            $block->add_dangling_marker($frame);
        }
    }
}
<?php
/**
 * @package dompdf
 * @link    https://github.com/dompdf/dompdf
 * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
 */
namespace Dompdf\FrameReflower;

use Dompdf\Frame;
use Dompdf\FrameDecorator\Block as BlockFrameDecorator;

/**
 * Dummy reflower
 *
 * @package dompdf
 */
class NullFrameReflower extends AbstractFrameReflower
{

    /**
     * NullFrameReflower constructor.
     * @param Frame $frame
     */
    function __construct(Frame $frame)
    {
        parent::__construct($frame);
    }

    /**
     * @param BlockFrameDecorator|null $block
     */
    function reflow(BlockFrameDecorator $block = null)
    {
        return;
    }

}
<?php
/**
 * @package dompdf
 * @link    https://github.com/dompdf/dompdf
 * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
 */
namespace Dompdf\FrameReflower;

use Dompdf\Frame;
use Dompdf\FrameDecorator\Block as BlockFrameDecorator;
use Dompdf\FrameDecorator\Page as PageFrameDecorator;

/**
 * Reflows pages
 *
 * @package dompdf
 */
class Page extends AbstractFrameReflower
{

    /**
     * Cache of the callbacks array
     *
     * @var array
     */
    private $_callbacks;

    /**
     * Cache of the canvas
     *
     * @var \Dompdf\Canvas
     */
    private $_canvas;

    /**
     * Page constructor.
     * @param PageFrameDecorator $frame
     */
    function __construct(PageFrameDecorator $frame)
    {
        parent::__construct($frame);
    }

    /**
     * @param PageFrameDecorator $frame
     * @param int $page_number
     */
    function apply_page_style(Frame $frame, $page_number)
    {
        $style = $frame->get_style();
        $page_styles = $style->get_stylesheet()->get_page_styles();

        // http://www.w3.org/TR/CSS21/page.html#page-selectors
        if (count($page_styles) > 1) {
            $odd = $page_number % 2 == 1;
            $first = $page_number == 1;

            $style = clone $page_styles["base"];

            // FIXME RTL
            if ($odd && isset($page_styles[":right"])) {
                $style->merge($page_styles[":right"]);
            }

            if ($odd && isset($page_styles[":odd"])) {
                $style->merge($page_styles[":odd"]);
            }

            // FIXME RTL
            if (!$odd && isset($page_styles[":left"])) {
                $style->merge($page_styles[":left"]);
            }

            if (!$odd && isset($page_styles[":even"])) {
                $style->merge($page_styles[":even"]);
            }

            if ($first && isset($page_styles[":first"])) {
                $style->merge($page_styles[":first"]);
            }

            $frame->set_style($style);
        }

        $frame->calculate_bottom_page_edge();
    }

    /**
     * Paged layout:
     * http://www.w3.org/TR/CSS21/page.html
     *
     * @param BlockFrameDecorator|null $block
     */
    function reflow(BlockFrameDecorator $block = null)
    {
        /** @var PageFrameDecorator $frame */
        $frame = $this->_frame;
        $child = $frame->get_first_child();
        $fixed_children = [];
        $prev_child = null;
        $current_page = 0;

        while ($child) {
            $this->apply_page_style($frame, $current_page + 1);

            $style = $frame->get_style();

            // Pages are only concerned with margins
            $cb = $frame->get_containing_block();
            $left = (float)$style->length_in_pt($style->margin_left, $cb["w"]);
            $right = (float)$style->length_in_pt($style->margin_right, $cb["w"]);
            $top = (float)$style->length_in_pt($style->margin_top, $cb["h"]);
            $bottom = (float)$style->length_in_pt($style->margin_bottom, $cb["h"]);

            $content_x = $cb["x"] + $left;
            $content_y = $cb["y"] + $top;
            $content_width = $cb["w"] - $left - $right;
            $content_height = $cb["h"] - $top - $bottom;

            // Only if it's the first page, we save the nodes with a fixed position
            if ($current_page == 0) {
                foreach ($child->get_children() as $onechild) {
                    if ($onechild->get_style()->position === "fixed") {
                        $fixed_children[] = $onechild->deep_copy();
                    }
                }
                $fixed_children = array_reverse($fixed_children);
            }

            $child->set_containing_block($content_x, $content_y, $content_width, $content_height);

            // Check for begin reflow callback
            $this->_check_callbacks("begin_page_reflow", $child);

            //Insert a copy of each node which have a fixed position
            if ($current_page >= 1) {
                foreach ($fixed_children as $fixed_child) {
                    $child->insert_child_before($fixed_child->deep_copy(), $child->get_first_child());
                }
            }

            $child->reflow();
            $next_child = $child->get_next_sibling();

            // Check for begin render callback
            $this->_check_callbacks("begin_page_render", $child);

            // Render the page
            $frame->get_renderer()->render($child);

            // Check for end render callback
            $this->_check_callbacks("end_page_render", $child);

            if ($next_child) {
                $frame->next_page();
            }

            // Wait to dispose of all frames on the previous page
            // so callback will have access to them
            if ($prev_child) {
                $prev_child->dispose(true);
            }
            $prev_child = $child;
            $child = $next_child;
            $current_page++;
        }

        // Dispose of previous page if it still exists
        if ($prev_child) {
            $prev_child->dispose(true);
        }
    }

    /**
     * Check for callbacks that need to be performed when a given event
     * gets triggered on a page
     *
     * @param string $event The type of event
     * @param Frame  $frame The frame that event is triggered on
     */
    protected function _check_callbacks(string $event, Frame $frame): void
    {
        if (!isset($this->_callbacks)) {
            $dompdf = $this->get_dompdf();
            $this->_callbacks = $dompdf->getCallbacks();
            $this->_canvas = $dompdf->getCanvas();
        }

        if (isset($this->_callbacks[$event])) {
            $fs = $this->_callbacks[$event];
            $canvas = $this->_canvas;
            $fontMetrics = $this->get_dompdf()->getFontMetrics();

            foreach ($fs as $f) {
                $f($frame, $canvas, $fontMetrics);
            }
        }
    }
}
<?php
/**
 * @package dompdf
 * @link    https://github.com/dompdf/dompdf
 * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
 */
namespace Dompdf\FrameReflower;

use Dompdf\FrameDecorator\Block as BlockFrameDecorator;
use Dompdf\FrameDecorator\Table as TableFrameDecorator;
use Dompdf\Helpers;

/**
 * Reflows tables
 *
 * @package dompdf
 */
class Table extends AbstractFrameReflower
{
    /**
     * Frame for this reflower
     *
     * @var TableFrameDecorator
     */
    protected $_frame;

    /**
     * Cache of results between call to get_min_max_width and assign_widths
     *
     * @var array
     */
    protected $_state;

    /**
     * Table constructor.
     * @param TableFrameDecorator $frame
     */
    function __construct(TableFrameDecorator $frame)
    {
        $this->_state = null;
        parent::__construct($frame);
    }

    /**
     * State is held here so it needs to be reset along with the decorator
     */
    public function reset(): void
    {
        parent::reset();
        $this->_state = null;
    }

    protected function _assign_widths()
    {
        $style = $this->_frame->get_style();

        // Find the min/max width of the table and sort the columns into
        // absolute/percent/auto arrays
        $delta = $this->_state["width_delta"];
        $min_width = $this->_state["min_width"];
        $max_width = $this->_state["max_width"];
        $percent_used = $this->_state["percent_used"];
        $absolute_used = $this->_state["absolute_used"];
        $auto_min = $this->_state["auto_min"];

        $absolute =& $this->_state["absolute"];
        $percent =& $this->_state["percent"];
        $auto =& $this->_state["auto"];

        // Determine the actual width of the table (excluding borders and
        // padding)
        $cb = $this->_frame->get_containing_block();
        $columns =& $this->_frame->get_cellmap()->get_columns();

        $width = $style->width;
        $min_table_width = $this->resolve_min_width($cb["w"]) - $delta;

        if ($width !== "auto") {
            $preferred_width = (float) $style->length_in_pt($width, $cb["w"]) - $delta;

            if ($preferred_width < $min_table_width) {
                $preferred_width = $min_table_width;
            }

            if ($preferred_width > $min_width) {
                $width = $preferred_width;
            } else {
                $width = $min_width;
            }

        } else {
            if ($max_width + $delta < $cb["w"]) {
                $width = $max_width;
            } elseif ($cb["w"] - $delta > $min_width) {
                $width = $cb["w"] - $delta;
            } else {
                $width = $min_width;
            }

            if ($width < $min_table_width) {
                $width = $min_table_width;
            }

        }

        // Store our resolved width
        $style->set_used("width", $width);

        $cellmap = $this->_frame->get_cellmap();

        if ($cellmap->is_columns_locked()) {
            return;
        }

        // If the whole table fits on the page, then assign each column it's max width
        if ($width == $max_width) {
            foreach ($columns as $i => $col) {
                $cellmap->set_column_width($i, $col["max-width"]);
            }

            return;
        }

        // Determine leftover and assign it evenly to all columns
        if ($width > $min_width) {
            // We have three cases to deal with:
            //
            // 1. All columns are auto or absolute width.  In this case we
            // distribute extra space across all auto columns weighted by the
            // difference between their max and min width, or by max width only
            // if the width of the table is larger than the max width for all
            // columns.
            //
            // 2. Only absolute widths have been specified, no auto columns.  In
            // this case we distribute extra space across all columns weighted
            // by their absolute width.
            //
            // 3. Percentage widths have been specified.  In this case we normalize
            // the percentage values and try to assign widths as fractions of
            // the table width. Absolute column widths are fully satisfied and
            // any remaining space is evenly distributed among all auto columns.

            // Case 1:
            if ($percent_used == 0 && count($auto)) {
                foreach ($absolute as $i) {
                    $w = $columns[$i]["min-width"];
                    $cellmap->set_column_width($i, $w);
                }

                if ($width < $max_width) {
                    $increment = $width - $min_width;
                    $table_delta = $max_width - $min_width;

                    foreach ($auto as $i) {
                        $min = $columns[$i]["min-width"];
                        $max = $columns[$i]["max-width"];
                        $col_delta = $max - $min;
                        $w = $min + $increment * ($col_delta / $table_delta);
                        $cellmap->set_column_width($i, $w);
                    }
                } else {
                    $increment = $width - $max_width;
                    $auto_max = $max_width - $absolute_used;

                    foreach ($auto as $i) {
                        $max = $columns[$i]["max-width"];
                        $f = $auto_max > 0 ? $max / $auto_max : 1 / count($auto);
                        $w = $max + $increment * $f;
                        $cellmap->set_column_width($i, $w);
                    }
                }
                return;
            }

            // Case 2:
            if ($percent_used == 0 && !count($auto)) {
                $increment = $width - $absolute_used;

                foreach ($absolute as $i) {
                    $abs = $columns[$i]["min-width"];
                    $f = $absolute_used > 0 ? $abs / $absolute_used : 1 / count($absolute);
                    $w = $abs + $increment * $f;
                    $cellmap->set_column_width($i, $w);
                }
                return;
            }

            // Case 3:
            if ($percent_used > 0) {
                // Scale percent values if the total percentage is > 100 or
                // there are no auto values to take up slack
                if ($percent_used > 100 || count($auto) == 0) {
                    $scale = 100 / $percent_used;
                } else {
                    $scale = 1;
                }

                // Account for the minimum space used by the unassigned auto
                // columns, by the columns with absolute widths, and the
                // percentage columns following the current one
                $used_width = $auto_min + $absolute_used;

                foreach ($absolute as $i) {
                    $w = $columns[$i]["min-width"];
                    $cellmap->set_column_width($i, $w);
                }

                $percent_min = 0;

                foreach ($percent as $i) {
                    $percent_min += $columns[$i]["min-width"];
                }

                // First-come, first served
                foreach ($percent as $i) {
                    $min = $columns[$i]["min-width"];
                    $percent_min -= $min;
                    $slack = $width - $used_width - $percent_min;

                    $columns[$i]["percent"] *= $scale;
                    $w = min($columns[$i]["percent"] * $width / 100, $slack);

                    if ($w < $min) {
                        $w = $min;
                    }

                    $cellmap->set_column_width($i, $w);
                    $used_width += $w;
                }

                // This works because $used_width includes the min-width of each
                // unassigned column
                if (count($auto) > 0) {
                    $increment = ($width - $used_width) / count($auto);

                    foreach ($auto as $i) {
                        $w = $columns[$i]["min-width"] + $increment;
                        $cellmap->set_column_width($i, $w);
                    }
                }
                return;
            }
        } else {
            // We are over-constrained:
            // Each column gets its minimum width
            foreach ($columns as $i => $col) {
                $cellmap->set_column_width($i, $col["min-width"]);
            }
        }
    }

    /**
     * Determine the frame's height based on min/max height
     *
     * @return float
     */
    protected function _calculate_height()
    {
        $frame = $this->_frame;
        $style = $frame->get_style();
        $cb = $frame->get_containing_block();

        $height = $style->length_in_pt($style->height, $cb["h"]);

        $cellmap = $frame->get_cellmap();
        $cellmap->assign_frame_heights();
        $rows = $cellmap->get_rows();

        // Determine our content height
        $content_height = 0.0;
        foreach ($rows as $r) {
            $content_height += $r["height"];
        }

        if ($height === "auto") {
            $height = $content_height;
        }

        // Handle min/max height
        // https://www.w3.org/TR/CSS21/visudet.html#min-max-heights
        $min_height = $this->resolve_min_height($cb["h"]);
        $max_height = $this->resolve_max_height($cb["h"]);
        $height = Helpers::clamp($height, $min_height, $max_height);

        // Use the content height or the height value, whichever is greater
        if ($height <= $content_height) {
            $height = $content_height;
        } else {
            // FIXME: Borders and row positions are not properly updated by this
            // $cellmap->set_frame_heights($height, $content_height);
        }

        return $height;
    }

    /**
     * @param BlockFrameDecorator|null $block
     */
    function reflow(BlockFrameDecorator $block = null)
    {
        /** @var TableFrameDecorator */
        $frame = $this->_frame;

        // Check if a page break is forced
        $page = $frame->get_root();
        $page->check_forced_page_break($frame);

        // Bail if the page is full
        if ($page->is_full()) {
            return;
        }

        // Let the page know that we're reflowing a table so that splits
        // are suppressed (simply setting page-break-inside: avoid won't
        // work because we may have an arbitrary number of block elements
        // inside tds.)
        $page->table_reflow_start();

        $this->determine_absolute_containing_block();

        // Counters and generated content
        $this->_set_content();

        // Collapse vertical margins, if required
        $this->_collapse_margins();

        // Table layout algorithm:
        // http://www.w3.org/TR/CSS21/tables.html#auto-table-layout

        if (is_null($this->_state)) {
            $this->get_min_max_width();
        }

        $cb = $frame->get_containing_block();
        $style = $frame->get_style();

        // This is slightly inexact, but should be okay.  Add half the
        // border-spacing to the table as padding.  The other half is added to
        // the cells themselves.
        if ($style->border_collapse === "separate") {
            [$h, $v] = $style->border_spacing;
            $v = $v / 2;
            $h = $h / 2;

            $style->set_used("padding_left", (float)$style->length_in_pt($style->padding_left, $cb["w"]) + $h);
            $style->set_used("padding_right", (float)$style->length_in_pt($style->padding_right, $cb["w"]) + $h);
            $style->set_used("padding_top", (float)$style->length_in_pt($style->padding_top, $cb["w"]) + $v);
            $style->set_used("padding_bottom", (float)$style->length_in_pt($style->padding_bottom, $cb["w"]) + $v);
        }

        $this->_assign_widths();

        // Adjust left & right margins, if they are auto
        $delta = $this->_state["width_delta"];
        $width = $style->width;
        $left = $style->length_in_pt($style->margin_left, $cb["w"]);
        $right = $style->length_in_pt($style->margin_right, $cb["w"]);

        $diff = (float) $cb["w"] - (float) $width - $delta;

        if ($left === "auto" && $right === "auto") {
            if ($diff < 0) {
                $left = 0;
                $right = $diff;
            } else {
                $left = $right = $diff / 2;
            }
        } else {
            if ($left === "auto") {
                $left = max($diff - $right, 0);
            }
            if ($right === "auto") {
                $right = max($diff - $left, 0);
            }
        }

        $style->set_used("margin_left", $left);
        $style->set_used("margin_right", $right);

        $frame->position();
        [$x, $y] = $frame->get_position();

        // Determine the content edge
        $offset_x = (float)$left + (float)$style->length_in_pt([
            $style->padding_left,
            $style->border_left_width
        ], $cb["w"]);
        $offset_y = (float)$style->length_in_pt([
            $style->margin_top,
            $style->border_top_width,
            $style->padding_top
        ], $cb["w"]);
        $content_x = $x + $offset_x;
        $content_y = $y + $offset_y;

        if (isset($cb["h"])) {
            $h = $cb["h"];
        } else {
            $h = null;
        }

        $cellmap = $frame->get_cellmap();
        $col =& $cellmap->get_column(0);
        $col["x"] = $offset_x;

        $row =& $cellmap->get_row(0);
        $row["y"] = $offset_y;

        $cellmap->assign_x_positions();

        // Set the containing block of each child & reflow
        foreach ($frame->get_children() as $child) {
            $child->set_containing_block($content_x, $content_y, $width, $h);
            $child->reflow();

            if (!$page->in_nested_table()) {
                // Check if a split has occurred
                $page->check_page_break($child);
    
                if ($page->is_full()) {
                    break;
                }
            }
        }

        // Stop reflow if a page break has occurred before the frame, in which
        // case it has been reset, including its position
        if ($page->is_full() && $frame->get_position("x") === null) {
            $page->table_reflow_end();
            return;
        }

        // Assign heights to our cells:
        $style->set_used("height", $this->_calculate_height());

        $page->table_reflow_end();

        if ($block && $frame->is_in_flow()) {
            $block->add_frame_to_line($frame);

            if ($frame->is_block_level()) {
                $block->add_line();
            }
        }
    }

    public function get_min_max_width(): array
    {
        if (!is_null($this->_min_max_cache)) {
            return $this->_min_max_cache;
        }

        $style = $this->_frame->get_style();
        $cellmap = $this->_frame->get_cellmap();

        $this->_frame->normalize();

        // Add the cells to the cellmap (this will calculate column widths as
        // frames are added)
        $cellmap->add_frame($this->_frame);

        // Find the min/max width of the table and sort the columns into
        // absolute/percent/auto arrays
        $this->_state = [];
        $this->_state["min_width"] = 0;
        $this->_state["max_width"] = 0;

        $this->_state["percent_used"] = 0;
        $this->_state["absolute_used"] = 0;
        $this->_state["auto_min"] = 0;

        $this->_state["absolute"] = [];
        $this->_state["percent"] = [];
        $this->_state["auto"] = [];

        $columns =& $cellmap->get_columns();
        foreach ($columns as $i => $col) {
            $this->_state["min_width"] += $col["min-width"];
            $this->_state["max_width"] += $col["max-width"];

            if ($col["absolute"] > 0) {
                $this->_state["absolute"][] = $i;
                $this->_state["absolute_used"] += $col["min-width"];
            } elseif ($col["percent"] > 0) {
                $this->_state["percent"][] = $i;
                $this->_state["percent_used"] += $col["percent"];
            } else {
                $this->_state["auto"][] = $i;
                $this->_state["auto_min"] += $col["min-width"];
            }
        }

        // Account for margins, borders, padding, and border spacing
        $cb_w = $this->_frame->get_containing_block("w");
        $lm = (float) $style->length_in_pt($style->margin_left, $cb_w);
        $rm = (float) $style->length_in_pt($style->margin_right, $cb_w);

        $dims = [
            $style->border_left_width,
            $style->border_right_width,
            $style->padding_left,
            $style->padding_right
        ];

        if ($style->border_collapse !== "collapse") {
            list($dims[]) = $style->border_spacing;
        }

        $delta = (float) $style->length_in_pt($dims, $cb_w);

        $this->_state["width_delta"] = $delta;

        $min_width = $this->_state["min_width"] + $delta + $lm + $rm;
        $max_width = $this->_state["max_width"] + $delta + $lm + $rm;

        return $this->_min_max_cache = [
            $min_width,
            $max_width,
            "min" => $min_width,
            "max" => $max_width
        ];
    }
}
<?php
/**
 * @package dompdf
 * @link    https://github.com/dompdf/dompdf
 * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
 */
namespace Dompdf\FrameReflower;

use Dompdf\FrameDecorator\Block as BlockFrameDecorator;
use Dompdf\FrameDecorator\Table as TableFrameDecorator;
use Dompdf\Helpers;

/**
 * Reflows table cells
 *
 * @package dompdf
 */
class TableCell extends Block
{
    /**
     * TableCell constructor.
     * @param BlockFrameDecorator $frame
     */
    function __construct(BlockFrameDecorator $frame)
    {
        parent::__construct($frame);
    }

    /**
     * @param BlockFrameDecorator|null $block
     */
    function reflow(BlockFrameDecorator $block = null)
    {
        // Counters and generated content
        $this->_set_content();

        $style = $this->_frame->get_style();

        $table = TableFrameDecorator::find_parent_table($this->_frame);
        $cellmap = $table->get_cellmap();

        list($x, $y) = $cellmap->get_frame_position($this->_frame);
        $this->_frame->set_position($x, $y);

        $cells = $cellmap->get_spanned_cells($this->_frame);

        $w = 0;
        foreach ($cells["columns"] as $i) {
            $col = $cellmap->get_column($i);
            $w += $col["used-width"];
        }

        //FIXME?
        $h = $this->_frame->get_containing_block("h");

        $left_space = (float)$style->length_in_pt([$style->margin_left,
                $style->padding_left,
                $style->border_left_width],
            $w);

        $right_space = (float)$style->length_in_pt([$style->padding_right,
                $style->margin_right,
                $style->border_right_width],
            $w);

        $top_space = (float)$style->length_in_pt([$style->margin_top,
                $style->padding_top,
                $style->border_top_width],
            $h);
        $bottom_space = (float)$style->length_in_pt([$style->margin_bottom,
                $style->padding_bottom,
                $style->border_bottom_width],
            $h);

        $cb_w = $w - $left_space - $right_space;
        $style->set_used("width", $cb_w);

        $content_x = $x + $left_space;
        $content_y = $line_y = $y + $top_space;

        // Adjust the first line based on the text-indent property
        $indent = (float)$style->length_in_pt($style->text_indent, $w);
        $this->_frame->increase_line_width($indent);

        $page = $this->_frame->get_root();

        // Set the y position of the first line in the cell
        $line_box = $this->_frame->get_current_line_box();
        $line_box->y = $line_y;

        // Set the containing blocks and reflow each child
        foreach ($this->_frame->get_children() as $child) {
            $child->set_containing_block($content_x, $content_y, $cb_w, $h);
            $this->process_clear($child);
            $child->reflow($this->_frame);
            $this->process_float($child, $content_x, $cb_w);

            if ($page->is_full()) {
                break;
            }
        }

        // Determine our height
        $style_height = (float)$style->length_in_pt($style->height, $h);

        /** @var FrameDecorator\TableCell */
        $frame = $this->_frame;

        $frame->set_content_height($this->_calculate_content_height());

        $height = max($style_height, (float)$frame->get_content_height());

        // Let the cellmap know our height
        $cell_height = $height / count($cells["rows"]);

        if ($style_height <= $height) {
            $cell_height += $top_space + $bottom_space;
        }

        foreach ($cells["rows"] as $i) {
            $cellmap->set_row_height($i, $cell_height);
        }

        $style->set_used("height", $height);

        $this->_text_align();
        $this->vertical_align();

        // Handle relative positioning
        foreach ($this->_frame->get_children() as $child) {
            $this->position_relative($child);
        }
    }

    public function get_min_max_content_width(): array
    {
        // Ignore percentage values for a specified width here, as they are
        // relative to the table width, which is not determined yet
        $style = $this->_frame->get_style();
        $width = $style->width;
        $fixed_width = $width !== "auto" && !Helpers::is_percent($width);

        [$min, $max] = $this->get_min_max_child_width();

        // For table cells: Use specified width if it is greater than the
        // minimum defined by the content
        if ($fixed_width) {
            $width = (float) $style->length_in_pt($width, 0);
            $min = max($width, $min);
            $max = $min;
        }

        // Handle min/max width style properties
        $min_width = $this->resolve_min_width(null);
        $max_width = $this->resolve_max_width(null);
        $min = Helpers::clamp($min, $min_width, $max_width);
        $max = Helpers::clamp($max, $min_width, $max_width);

        return [$min, $max];
    }
}
<?php
/**
 * @package dompdf
 * @link    https://github.com/dompdf/dompdf
 * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
 */
namespace Dompdf\FrameReflower;

use Dompdf\FrameDecorator\Block as BlockFrameDecorator;
use Dompdf\FrameDecorator\Table as TableFrameDecorator;
use Dompdf\FrameDecorator\TableRow as TableRowFrameDecorator;
use Dompdf\Exception;

/**
 * Reflows table rows
 *
 * @package dompdf
 */
class TableRow extends AbstractFrameReflower
{
    /**
     * TableRow constructor.
     * @param TableRowFrameDecorator $frame
     */
    function __construct(TableRowFrameDecorator $frame)
    {
        parent::__construct($frame);
    }

    /**
     * @param BlockFrameDecorator|null $block
     */
    function reflow(BlockFrameDecorator $block = null)
    {
        /** @var TableRowFrameDecorator */
        $frame = $this->_frame;

        // Check if a page break is forced
        $page = $frame->get_root();
        $page->check_forced_page_break($frame);

        // Bail if the page is full
        if ($page->is_full()) {
            return;
        }

        // Counters and generated content
        $this->_set_content();

        $this->_frame->position();
        $style = $this->_frame->get_style();
        $cb = $this->_frame->get_containing_block();

        foreach ($this->_frame->get_children() as $child) {
            $child->set_containing_block($cb);
            $child->reflow();

            if ($page->is_full()) {
                break;
            }
        }

        if ($page->is_full()) {
            return;
        }

        $table = TableFrameDecorator::find_parent_table($this->_frame);
        $cellmap = $table->get_cellmap();
        $style->set_used("width", $cellmap->get_frame_width($this->_frame));
        $style->set_used("height", $cellmap->get_frame_height($this->_frame));

        $this->_frame->set_position($cellmap->get_frame_position($this->_frame));
    }

    /**
     * @throws Exception
     */
    public function get_min_max_width(): array
    {
        throw new Exception("Min/max width is undefined for table rows");
    }
}
<?php
/**
 * @package dompdf
 * @link    https://github.com/dompdf/dompdf
 * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
 */
namespace Dompdf\FrameReflower;

use Dompdf\FrameDecorator\Block as BlockFrameDecorator;
use Dompdf\FrameDecorator\Table as TableFrameDecorator;
use Dompdf\FrameDecorator\TableRowGroup as TableRowGroupFrameDecorator;

/**
 * Reflows table row groups (e.g. tbody tags)
 *
 * @package dompdf
 */
class TableRowGroup extends AbstractFrameReflower
{

    /**
     * TableRowGroup constructor.
     * @param TableRowGroupFrameDecorator $frame
     */
    function __construct(TableRowGroupFrameDecorator $frame)
    {
        parent::__construct($frame);
    }

    /**
     * @param BlockFrameDecorator|null $block
     */
    function reflow(BlockFrameDecorator $block = null)
    {
        /** @var TableRowGroupFrameDecorator */
        $frame = $this->_frame;
        $page = $frame->get_root();

        // Counters and generated content
        $this->_set_content();

        $style = $frame->get_style();
        $cb = $frame->get_containing_block();

        foreach ($frame->get_children() as $child) {
            $child->set_containing_block($cb["x"], $cb["y"], $cb["w"], $cb["h"]);
            $child->reflow();

            // Check if a split has occurred
            $page->check_page_break($child);

            if ($page->is_full()) {
                break;
            }
        }

        $table = TableFrameDecorator::find_parent_table($frame);
        $cellmap = $table->get_cellmap();

        // Stop reflow if a page break has occurred before the frame, in which
        // case it is not part of its parent table's cell map yet
        if ($page->is_full() && !$cellmap->frame_exists_in_cellmap($frame)) {
            return;
        }

        $style->set_used("width", $cellmap->get_frame_width($frame));
        $style->set_used("height", $cellmap->get_frame_height($frame));

        $frame->set_position($cellmap->get_frame_position($frame));
    }
}
<?php
/**
 * @package dompdf
 * @link    https://github.com/dompdf/dompdf
 * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
 */
namespace Dompdf\FrameReflower;

use Dompdf\FrameDecorator\Block as BlockFrameDecorator;
use Dompdf\FrameDecorator\Inline as InlineFrameDecorator;
use Dompdf\FrameDecorator\Text as TextFrameDecorator;
use Dompdf\FontMetrics;
use Dompdf\Helpers;

/**
 * Reflows text frames.
 *
 * @package dompdf
 */
class Text extends AbstractFrameReflower
{
    /**
     * PHP string representation of HTML entity <shy>
     */
    const SOFT_HYPHEN = "\xC2\xAD";

    /**
     * The regex splits on everything that's a separator (^\S double negative),
     * excluding the following non-breaking space characters:
     * * nbsp (\xA0)
     * * narrow nbsp (\x{202F})
     * * figure space (\x{2007})
     */
    public static $_whitespace_pattern = '/([^\S\xA0\x{202F}\x{2007}]+)/u';

    /**
     * The regex splits on everything that's a separator (^\S double negative)
     * plus dashes, excluding the following non-breaking space characters:
     * * nbsp (\xA0)
     * * narrow nbsp (\x{202F})
     * * figure space (\x{2007})
     */
    public static $_wordbreak_pattern = '/([^\S\xA0\x{202F}\x{2007}\n]+|\R|\-+|\xAD+)/u';

    /**
     * Frame for this reflower
     *
     * @var TextFrameDecorator
     */
    protected $_frame;

    /**
     * Saves trailing whitespace trimmed after a line break, so it can be
     * restored when needed.
     *
     * @var string|null
     */
    protected $trailingWs = null;

    /**
     * @var FontMetrics
     */
    private $fontMetrics;

    /**
     * @param TextFrameDecorator $frame
     * @param FontMetrics $fontMetrics
     */
    public function __construct(TextFrameDecorator $frame, FontMetrics $fontMetrics)
    {
        parent::__construct($frame);
        $this->setFontMetrics($fontMetrics);
    }

    /**
     * Apply text transform and white-space collapse according to style.
     *
     * * http://www.w3.org/TR/CSS21/text.html#propdef-text-transform
     * * http://www.w3.org/TR/CSS21/text.html#propdef-white-space
     *
     * @param string $text
     * @return string
     */
    protected function pre_process_text(string $text): string
    {
        $style = $this->_frame->get_style();

        // Handle text transform
        switch ($style->text_transform) {
            case "capitalize":
                $text = Helpers::mb_ucwords($text);
                break;
            case "uppercase":
                $text = mb_convert_case($text, MB_CASE_UPPER);
                break;
            case "lowercase":
                $text = mb_convert_case($text, MB_CASE_LOWER);
                break;
            default:
                break;
        }

        // Handle white-space collapse
        switch ($style->white_space) {
            default:
            case "normal":
            case "nowrap":
                $text = preg_replace(self::$_whitespace_pattern, " ", $text) ?? "";
                break;

            case "pre-line":
                // Collapse white space except for line breaks
                $text = preg_replace('/([^\S\xA0\x{202F}\x{2007}\n]+)/u', " ", $text) ?? "";
                break;

            case "pre":
            case "pre-wrap":
                break;

        }

        return $text;
    }

    /**
     * @param string              $text
     * @param BlockFrameDecorator $block
     * @param bool                $nowrap
     *
     * @return bool|int
     */
    protected function line_break(string $text, BlockFrameDecorator $block, bool $nowrap = false)
    {
        $fontMetrics = $this->getFontMetrics();
        $frame = $this->_frame;
        $style = $frame->get_style();
        $font = $style->font_family;
        $size = $style->font_size;
        $word_spacing = $style->word_spacing;
        $letter_spacing = $style->letter_spacing;

        // Determine the available width
        $current_line = $block->get_current_line_box();
        $line_width = $frame->get_containing_block("w");
        $current_line_width = $current_line->left + $current_line->w + $current_line->right;
        $available_width = $line_width - $current_line_width;

        // Determine the frame width including margin, padding & border
        $visible_text = preg_replace('/\xAD/u', "", $text);
        $text_width = $fontMetrics->getTextWidth($visible_text, $font, $size, $word_spacing, $letter_spacing);
        $mbp_width = (float) $style->length_in_pt([
            $style->margin_left,
            $style->border_left_width,
            $style->padding_left,
            $style->padding_right,
            $style->border_right_width,
            $style->margin_right
        ], $line_width);
        $frame_width = $text_width + $mbp_width;

        if (Helpers::lengthLessOrEqual($frame_width, $available_width)) {
            return false;
        }

        if ($nowrap) {
            return $current_line_width == 0 ? false : 0;
        }

        // Split the text into words
        $words = preg_split(self::$_wordbreak_pattern, $text, -1, PREG_SPLIT_DELIM_CAPTURE);
        $wc = count($words);

        // Determine the split point
        $width = 0.0;
        $str = "";

        $space_width = $fontMetrics->getTextWidth(" ", $font, $size, $word_spacing, $letter_spacing);
        $shy_width = $fontMetrics->getTextWidth(self::SOFT_HYPHEN, $font, $size);

        // @todo support <wbr>
        for ($i = 0; $i < $wc; $i += 2) {
            // Allow trailing white space to overflow. White space is always
            // collapsed to the standard space character currently, so only
            // handle that for now
            $sep = $words[$i + 1] ?? "";
            $word = $sep === " " ? $words[$i] : $words[$i] . $sep;
            $word_width = $fontMetrics->getTextWidth($word, $font, $size, $word_spacing, $letter_spacing);
            $used_width = $width + $word_width + $mbp_width;

            if (Helpers::lengthGreater($used_width, $available_width)) {
                // If the previous split happened by soft hyphen, we have to
                // append its width again because the last hyphen of a line
                // won't be removed
                if (isset($words[$i - 1]) && self::SOFT_HYPHEN === $words[$i - 1]) {
                    $width += $shy_width;
                }
                break;
            }

            // If the word is splitted by soft hyphen, but no line break is needed
            // we have to reduce the width. But the str is not modified, otherwise
            // the wrong offset is calculated at the end of this method.
            if ($sep === self::SOFT_HYPHEN) {
                $width += $word_width - $shy_width;
                $str .= $word;
            } elseif ($sep === " ") {
                $width += $word_width + $space_width;
                $str .= $word . $sep;
            } else {
                $width += $word_width;
                $str .= $word;
            }
        }

        // The first word has overflowed. Force it onto the line, or as many
        // characters as fit if breaking words is allowed
        if ($current_line_width == 0 && $width === 0.0) {
            if ($sep === " ") {
                $word .= $sep;
            }

            // https://www.w3.org/TR/css-text-3/#overflow-wrap-property
            $wrap = $style->overflow_wrap;
            $break_word = $wrap === "anywhere" || $wrap === "break-word";

            if ($break_word) {
                $s = "";

                for ($j = 0; $j < mb_strlen($word); $j++) {
                    $c = mb_substr($word, $j, 1);
                    $w = $fontMetrics->getTextWidth($s . $c, $font, $size, $word_spacing, $letter_spacing);

                    if (Helpers::lengthGreater($w, $available_width)) {
                        break;
                    }

                    $s .= $c;
                }

                // Always force the first character onto the line
                $str = $j === 0 ? $s . $c : $s;
            } else {
                $str = $word;
            }
        }

        $offset = mb_strlen($str);
        return $offset;
    }

    /**
     * @param string $text
     * @return bool|int
     */
    protected function newline_break(string $text)
    {
        if (($i = mb_strpos($text, "\n")) === false) {
            return false;
        }

        return $i + 1;
    }

    /**
     * @param BlockFrameDecorator $block
     * @return bool|null Whether to add a new line at the end. `null` if reflow
     *         should be stopped.
     */
    protected function layout_line(BlockFrameDecorator $block): ?bool
    {
        $frame = $this->_frame;
        $style = $frame->get_style();
        $current_line = $block->get_current_line_box();
        $text = $frame->get_text();

        // Trim leading white space if this is the first text on the line
        if ($current_line->w === 0.0 && !$frame->is_pre()) {
            $text = ltrim($text, " ");
        }

        if ($text === "") {
            $frame->set_text("");
            $style->set_used("width", 0.0);
            return false;
        }

        // Determine the next line break
        // http://www.w3.org/TR/CSS21/text.html#propdef-white-space
        $white_space = $style->white_space;
        $nowrap = $white_space === "nowrap" || $white_space === "pre";

        switch ($white_space) {
            default:
            case "normal":
            case "nowrap":
                $split = $this->line_break($text, $block, $nowrap);
                $add_line = false;
                break;

            case "pre":
            case "pre-line":
            case "pre-wrap":
                $hard_split = $this->newline_break($text);
                $first_line = $hard_split !== false
                    ? mb_substr($text, 0, $hard_split)
                    : $text;
                $soft_split = $this->line_break($first_line, $block, $nowrap);

                $split = $soft_split !== false ? $soft_split : $hard_split;
                $add_line = $hard_split !== false;
                break;
        }

        if ($split === 0) {
            // Make sure to move text when floating frames leave no space to
            // place anything onto the line
            // TODO: Would probably be better to move just below the current
            // floating frame instead of trying to place text in line-height
            // increments
            if ($current_line->h === 0.0) {
                // Line height might be 0
                $h = max($frame->get_margin_height(), 1.0);
                $block->maximize_line_height($h, $frame);
            }

            // Break line and repeat layout
            $block->add_line();

            // Find the appropriate inline ancestor to split
            $child = $frame;
            $p = $child->get_parent();
            while ($p instanceof InlineFrameDecorator && !$child->get_prev_sibling()) {
                $child = $p;
                $p = $p->get_parent();
            }

            if ($p instanceof InlineFrameDecorator) {
                // Split parent and stop current reflow. Reflow continues
                // via child-reflow loop of split parent
                $p->split($child);
                return null;
            }

            return $this->layout_line($block);
        }

        // Final split point is determined
        if ($split !== false && $split < mb_strlen($text)) {
            // Split the line
            $frame->set_text($text);
            $frame->split_text($split);
            $add_line = true;

            // Remove inner soft hyphens
            $t = $frame->get_text();
            $shyPosition = mb_strpos($t, self::SOFT_HYPHEN);
            if (false !== $shyPosition && $shyPosition < mb_strlen($t) - 1) {
                $t = str_replace(self::SOFT_HYPHEN, "", mb_substr($t, 0, -1)) . mb_substr($t, -1);
                $frame->set_text($t);
            }
        } else {
            // No split required
            // Remove soft hyphens
            $text = str_replace(self::SOFT_HYPHEN, "", $text);
            $frame->set_text($text);
        }

        // Set our new width
        $frame->recalculate_width();

        return $add_line;
    }

    /**
     * @param BlockFrameDecorator|null $block
     */
    function reflow(BlockFrameDecorator $block = null)
    {
        $frame = $this->_frame;
        $page = $frame->get_root();
        $page->check_forced_page_break($frame);

        if ($page->is_full()) {
            return;
        }

        // Determine the text height
        $style = $frame->get_style();
        $size = $style->font_size;
        $font = $style->font_family;
        $font_height = $this->getFontMetrics()->getFontHeight($font, $size);
        $style->set_used("height", $font_height);

        // Handle text transform and white space
        $text = $this->pre_process_text($frame->get_text());
        $frame->set_text($text);

        if ($block === null) {
            return;
        }

        $add_line = $this->layout_line($block);

        if ($add_line === null) {
            return;
        }

        $frame->position();

        // Skip wrapped white space between block-level elements in case white
        // space is collapsed
        if ($frame->get_text() === "" && $frame->get_margin_width() === 0.0) {
            return;
        }

        $line = $block->add_frame_to_line($frame);
        $trimmed = trim($frame->get_text());

        // Split the text into words (used to determine spacing between
        // words on justified lines)
        if ($trimmed !== "") {
            $words = preg_split(self::$_whitespace_pattern, $trimmed);
            $line->wc += count($words);
        }

        if ($add_line) {
            $block->add_line();
        }
    }

    /**
     * Trim trailing white space from the frame text.
     */
    public function trim_trailing_ws(): void
    {
        $frame = $this->_frame;
        $text = $frame->get_text();
        $trailing = mb_substr($text, -1);

        // White space is always collapsed to the standard space character
        // currently, so only handle that for now
        if ($trailing === " ") {
            $this->trailingWs = $trailing;
            $frame->set_text(mb_substr($text, 0, -1));
            $frame->recalculate_width();
        }
    }

    public function reset(): void
    {
        parent::reset();

        // Restore trimmed trailing white space, as the frame will go through
        // another reflow and line breaks might be different after a split
        if ($this->trailingWs !== null) {
            $text = $this->_frame->get_text();
            $this->_frame->set_text($text . $this->trailingWs);
            $this->trailingWs = null;
        }
    }

    //........................................................................

    public function get_min_max_width(): array
    {
        $fontMetrics = $this->getFontMetrics();
        $frame = $this->_frame;
        $style = $frame->get_style();
        $text = $frame->get_text();
        $font = $style->font_family;
        $size = $style->font_size;
        $word_spacing = $style->word_spacing;
        $letter_spacing = $style->letter_spacing;

        // Handle text transform and white space
        $text = $this->pre_process_text($frame->get_text());

        if (!$frame->is_pre()) {
            // Determine whether the frame is at the start of its parent block.
            // Trim leading white space in that case
            $child = $frame;
            $p = $frame->get_parent();
            while (!$p->is_block() && !$child->get_prev_sibling()) {
                $child = $p;
                $p = $p->get_parent();
            }

            if (!$child->get_prev_sibling()) {
                $text = ltrim($text, " ");
            }

            // Determine whether the frame is at the end of its parent block.
            // Trim trailing white space in that case
            $child = $frame;
            $p = $frame->get_parent();
            while (!$p->is_block() && !$child->get_next_sibling()) {
                $child = $p;
                $p = $p->get_parent();
            }

            if (!$child->get_next_sibling()) {
                $text = rtrim($text, " ");
            }
        }

        // Strip soft hyphens for max-line-width calculations
        $visible_text = preg_replace('/\xAD/u', "", $text);

        // Determine minimum text width
        switch ($style->white_space) {
            default:
            case "normal":
            case "pre-line":
            case "pre-wrap":
                // The min width is the longest word or, if breaking words is
                // allowed with the `anywhere` keyword, the widest character.
                // For performance reasons, we only check the first character in
                // the latter case.
                // https://www.w3.org/TR/css-text-3/#overflow-wrap-property
                if ($style->overflow_wrap === "anywhere") {
                    $char = mb_substr($visible_text, 0, 1);
                    $min = $fontMetrics->getTextWidth($char, $font, $size, $word_spacing, $letter_spacing);
                } else {
                    // Find the longest word
                    $words = preg_split(self::$_wordbreak_pattern, $text, -1, PREG_SPLIT_DELIM_CAPTURE);
                    $lengths = array_map(function ($chunk) use ($fontMetrics, $font, $size, $word_spacing, $letter_spacing) {
                        // Allow trailing white space to overflow. As in actual
                        // layout above, only handle a single space for now
                        $sep = $chunk[1] ?? "";
                        $word = $sep === " " ? $chunk[0] : $chunk[0] . $sep;
                        return $fontMetrics->getTextWidth($word, $font, $size, $word_spacing, $letter_spacing);
                    }, array_chunk($words, 2));
                    $min = max($lengths);
                }
                break;

            case "pre":
                // Find the longest line
                $lines = array_flip(preg_split("/\R/u", $visible_text));
                array_walk($lines, function (&$chunked_text_width, $chunked_text) use ($fontMetrics, $font, $size, $word_spacing, $letter_spacing) {
                    $chunked_text_width = $fontMetrics->getTextWidth($chunked_text, $font, $size, $word_spacing, $letter_spacing);
                });
                arsort($lines);
                $min = reset($lines);
                break;

            case "nowrap":
                $min = $fontMetrics->getTextWidth($visible_text, $font, $size, $word_spacing, $letter_spacing);
                break;
        }

        // Determine maximum text width
        switch ($style->white_space) {
            default:
            case "normal":
                $max = $fontMetrics->getTextWidth($visible_text, $font, $size, $word_spacing, $letter_spacing);
                break;

            case "pre-line":
            case "pre-wrap":
                // Find the longest line
                $lines = array_flip(preg_split("/\R/u", $visible_text));
                array_walk($lines, function (&$chunked_text_width, $chunked_text) use ($fontMetrics, $font, $size, $word_spacing, $letter_spacing) {
                    $chunked_text_width = $fontMetrics->getTextWidth($chunked_text, $font, $size, $word_spacing, $letter_spacing);
                });
                arsort($lines);
                $max = reset($lines);
                break;

            case "pre":
            case "nowrap":
                $max = $min;
                break;
        }

        // Account for margins, borders, and padding
        $dims = [
            $style->padding_left,
            $style->padding_right,
            $style->border_left_width,
            $style->border_right_width,
            $style->margin_left,
            $style->margin_right
        ];

        // The containing block is not defined yet, treat percentages as 0
        $delta = (float) $style->length_in_pt($dims, 0);
        $min += $delta;
        $max += $delta;

        return [$min, $max, "min" => $min, "max" => $max];
    }

    /**
     * @param FontMetrics $fontMetrics
     * @return $this
     */
    public function setFontMetrics(FontMetrics $fontMetrics)
    {
        $this->fontMetrics = $fontMetrics;
        return $this;
    }

    /**
     * @return FontMetrics
     */
    public function getFontMetrics()
    {
        return $this->fontMetrics;
    }
}
<?php
/**
 * @package dompdf
 * @link    https://github.com/dompdf/dompdf
 * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
 */
namespace Dompdf;

class Helpers
{
    /**
     * print_r wrapper for html/cli output
     *
     * Wraps print_r() output in < pre > tags if the current sapi is not 'cli'.
     * Returns the output string instead of displaying it if $return is true.
     *
     * @param mixed $mixed variable or expression to display
     * @param bool $return
     *
     * @return string|null
     */
    public static function pre_r($mixed, $return = false)
    {
        if ($return) {
            return "<pre>" . print_r($mixed, true) . "</pre>";
        }

        if (php_sapi_name() !== "cli") {
            echo "<pre>";
        }

        print_r($mixed);

        if (php_sapi_name() !== "cli") {
            echo "</pre>";
        } else {
            echo "\n";
        }

        flush();

        return null;
    }

    /**
     * builds a full url given a protocol, hostname, base path and url
     *
     * @param string $protocol
     * @param string $host
     * @param string $base_path
     * @param string $url
     * @return string
     *
     * Initially the trailing slash of $base_path was optional, and conditionally appended.
     * However on dynamically created sites, where the page is given as url parameter,
     * the base path might not end with an url.
     * Therefore do not append a slash, and **require** the $base_url to ending in a slash
     * when needed.
     * Vice versa, on using the local file system path of a file, make sure that the slash
     * is appended (o.k. also for Windows)
     */
    public static function build_url($protocol, $host, $base_path, $url)
    {
        $protocol = mb_strtolower($protocol);
        if (empty($protocol)) {
            $protocol = "file://";
        }
        if ($url === "") {
            return null;
        }

        $url_lc = mb_strtolower($url);

        // Is the url already fully qualified, a Data URI, or a reference to a named anchor?
        // File-protocol URLs may require additional processing (e.g. for URLs with a relative path)
        if (
            (
                mb_strpos($url_lc, "://") !== false
                && !in_array(substr($url_lc, 0, 7), ["file://", "phar://"], true)
            )
            || mb_substr($url_lc, 0, 1) === "#"
            || mb_strpos($url_lc, "data:") === 0
            || mb_strpos($url_lc, "mailto:") === 0
            || mb_strpos($url_lc, "tel:") === 0
        ) {
            return $url;
        }

        $res = "";
        if (strpos($url_lc, "file://") === 0) {
            $url = substr($url, 7);
            $protocol = "file://";
        } elseif (strpos($url_lc, "phar://") === 0) {
            $res = substr($url, strpos($url_lc, ".phar")+5);
            $url = substr($url, 7, strpos($url_lc, ".phar")-2);
            $protocol = "phar://";
        }

        $ret = "";

        $is_local_path = in_array($protocol, ["file://", "phar://"], true);

        if ($is_local_path) {
            //On Windows local file, an abs path can begin also with a '\' or a drive letter and colon
            //drive: followed by a relative path would be a drive specific default folder.
            //not known in php app code, treat as abs path
            //($url[1] !== ':' || ($url[2]!=='\\' && $url[2]!=='/'))
            if ($url[0] !== '/' && (strtoupper(substr(PHP_OS, 0, 3)) !== 'WIN' || (mb_strlen($url) > 1 && $url[0] !== '\\' && $url[1] !== ':'))) {
                // For rel path and local access we ignore the host, and run the path through realpath()
                $ret .= realpath($base_path) . '/';
            }
            $ret .= $url;
            $ret = preg_replace('/\?(.*)$/', "", $ret);

            $filepath = realpath($ret);
            if ($filepath === false) {
                return null;
            }

            $ret = "$protocol$filepath$res";

            return $ret;
        }

        $ret = $protocol;
        // Protocol relative urls (e.g. "//example.org/style.css")
        if (strpos($url, '//') === 0) {
            $ret .= substr($url, 2);
            //remote urls with backslash in html/css are not really correct, but lets be genereous
        } elseif ($url[0] === '/' || $url[0] === '\\') {
            // Absolute path
            $ret .= $host . $url;
        } else {
            // Relative path
            //$base_path = $base_path !== "" ? rtrim($base_path, "/\\") . "/" : "";
            $ret .= $host . $base_path . $url;
        }

        // URL should now be complete, final cleanup
        $parsed_url = parse_url($ret);

        // reproduced from https://www.php.net/manual/en/function.parse-url.php#106731
        $scheme   = isset($parsed_url['scheme']) ? $parsed_url['scheme'] . '://' : '';
        $host     = isset($parsed_url['host']) ? $parsed_url['host'] : '';
        $port     = isset($parsed_url['port']) ? ':' . $parsed_url['port'] : '';
        $user     = isset($parsed_url['user']) ? $parsed_url['user'] : '';
        $pass     = isset($parsed_url['pass']) ? ':' . $parsed_url['pass']  : '';
        $pass     = ($user || $pass) ? "$pass@" : '';
        $path     = isset($parsed_url['path']) ? $parsed_url['path'] : '';
        $query    = isset($parsed_url['query']) ? '?' . $parsed_url['query'] : '';
        $fragment = isset($parsed_url['fragment']) ? '#' . $parsed_url['fragment'] : '';
        
        // partially reproduced from https://stackoverflow.com/a/1243431/264628
        /* replace '//' or '/./' or '/foo/../' with '/' */
        $re = array('#(/\.?/)#', '#/(?!\.\.)[^/]+/\.\./#');
        for ($n=1; $n>0; $path=preg_replace($re, '/', $path, -1, $n)) {}

        $ret = "$scheme$user$pass$host$port$path$query$fragment";

        return $ret;
    }

    /**
     * Builds a HTTP Content-Disposition header string using `$dispositionType`
     * and `$filename`.
     *
     * If the filename contains any characters not in the ISO-8859-1 character
     * set, a fallback filename will be included for clients not supporting the
     * `filename*` parameter.
     *
     * @param string $dispositionType
     * @param string $filename
     * @return string
     */
    public static function buildContentDispositionHeader($dispositionType, $filename)
    {
        $encoding = mb_detect_encoding($filename);
        $fallbackfilename = mb_convert_encoding($filename, "ISO-8859-1", $encoding);
        $fallbackfilename = str_replace("\"", "", $fallbackfilename);
        $encodedfilename = rawurlencode($filename);

        $contentDisposition = "Content-Disposition: $dispositionType; filename=\"$fallbackfilename\"";
        if ($fallbackfilename !== $filename) {
            $contentDisposition .= "; filename*=UTF-8''$encodedfilename";
        }

        return $contentDisposition;
    }

    /**
     * Converts decimal numbers to roman numerals.
     *
     * As numbers larger than 3999 (and smaller than 1) cannot be represented in
     * the standard form of roman numerals, those are left in decimal form.
     *
     * See https://en.wikipedia.org/wiki/Roman_numerals#Standard_form
     *
     * @param int|string $num
     *
     * @throws Exception
     * @return string
     */
    public static function dec2roman($num): string
    {

        static $ones = ["", "i", "ii", "iii", "iv", "v", "vi", "vii", "viii", "ix"];
        static $tens = ["", "x", "xx", "xxx", "xl", "l", "lx", "lxx", "lxxx", "xc"];
        static $hund = ["", "c", "cc", "ccc", "cd", "d", "dc", "dcc", "dccc", "cm"];
        static $thou = ["", "m", "mm", "mmm"];

        if (!is_numeric($num)) {
            throw new Exception("dec2roman() requires a numeric argument.");
        }

        if ($num >= 4000 || $num <= 0) {
            return (string) $num;
        }

        $num = strrev((string)$num);

        $ret = "";
        switch (mb_strlen($num)) {
            /** @noinspection PhpMissingBreakStatementInspection */
            case 4:
                $ret .= $thou[$num[3]];
            /** @noinspection PhpMissingBreakStatementInspection */
            case 3:
                $ret .= $hund[$num[2]];
            /** @noinspection PhpMissingBreakStatementInspection */
            case 2:
                $ret .= $tens[$num[1]];
            /** @noinspection PhpMissingBreakStatementInspection */
            case 1:
                $ret .= $ones[$num[0]];
            default:
                break;
        }

        return $ret;
    }

    /**
     * Restrict a length to the given range.
     *
     * If min > max, the result is min.
     *
     * @param float $length
     * @param float $min
     * @param float $max
     *
     * @return float
     */
    public static function clamp(float $length, float $min, float $max): float
    {
        return max($min, min($length, $max));
    }

    /**
     * Determines whether $value is a percentage or not
     *
     * @param string|float|int $value
     *
     * @return bool
     */
    public static function is_percent($value): bool
    {
        return is_string($value) && false !== mb_strpos($value, "%");
    }

    /**
     * Parses a data URI scheme
     * http://en.wikipedia.org/wiki/Data_URI_scheme
     *
     * @param string $data_uri The data URI to parse
     *
     * @return array|bool The result with charset, mime type and decoded data
     */
    public static function parse_data_uri($data_uri)
    {
        if (!preg_match('/^data:(?P<mime>[a-z0-9\/+-.]+)(;charset=(?P<charset>[a-z0-9-])+)?(?P<base64>;base64)?\,(?P<data>.*)?/is', $data_uri, $match)) {
            return false;
        }

        $match['data'] = rawurldecode($match['data']);
        $result = [
            'charset' => $match['charset'] ? $match['charset'] : 'US-ASCII',
            'mime' => $match['mime'] ? $match['mime'] : 'text/plain',
            'data' => $match['base64'] ? base64_decode($match['data']) : $match['data'],
        ];

        return $result;
    }

    /**
     * Encodes a Uniform Resource Identifier (URI) by replacing non-alphanumeric
     * characters with a percent (%) sign followed by two hex digits, excepting
     * characters in the URI reserved character set.
     *
     * Assumes that the URI is a complete URI, so does not encode reserved
     * characters that have special meaning in the URI.
     *
     * Simulates the encodeURI function available in JavaScript
     * https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/encodeURI
     *
     * Source: http://stackoverflow.com/q/4929584/264628
     *
     * @param string $uri The URI to encode
     * @return string The original URL with special characters encoded
     */
    public static function encodeURI($uri) {
        $unescaped = [
            '%2D'=>'-','%5F'=>'_','%2E'=>'.','%21'=>'!', '%7E'=>'~',
            '%2A'=>'*', '%27'=>"'", '%28'=>'(', '%29'=>')'
        ];
        $reserved = [
            '%3B'=>';','%2C'=>',','%2F'=>'/','%3F'=>'?','%3A'=>':',
            '%40'=>'@','%26'=>'&','%3D'=>'=','%2B'=>'+','%24'=>'$'
        ];
        $score = [
            '%23'=>'#'
        ];
        return strtr(rawurlencode(rawurldecode($uri)), array_merge($reserved, $unescaped, $score));
    }

    /**
     * Decoder for RLE8 compression in windows bitmaps
     * http://msdn.microsoft.com/library/default.asp?url=/library/en-us/gdi/bitmaps_6x0u.asp
     *
     * @param string $str Data to decode
     * @param int $width Image width
     *
     * @return string
     */
    public static function rle8_decode($str, $width)
    {
        $lineWidth = $width + (3 - ($width - 1) % 4);
        $out = '';
        $cnt = strlen($str);

        for ($i = 0; $i < $cnt; $i++) {
            $o = ord($str[$i]);
            switch ($o) {
                case 0: # ESCAPE
                    $i++;
                    switch (ord($str[$i])) {
                        case 0: # NEW LINE
                            $padCnt = $lineWidth - strlen($out) % $lineWidth;
                            if ($padCnt < $lineWidth) {
                                $out .= str_repeat(chr(0), $padCnt); # pad line
                            }
                            break;
                        case 1: # END OF FILE
                            $padCnt = $lineWidth - strlen($out) % $lineWidth;
                            if ($padCnt < $lineWidth) {
                                $out .= str_repeat(chr(0), $padCnt); # pad line
                            }
                            break 3;
                        case 2: # DELTA
                            $i += 2;
                            break;
                        default: # ABSOLUTE MODE
                            $num = ord($str[$i]);
                            for ($j = 0; $j < $num; $j++) {
                                $out .= $str[++$i];
                            }
                            if ($num % 2) {
                                $i++;
                            }
                    }
                    break;
                default:
                    $out .= str_repeat($str[++$i], $o);
            }
        }
        return $out;
    }

    /**
     * Decoder for RLE4 compression in windows bitmaps
     * see http://msdn.microsoft.com/library/default.asp?url=/library/en-us/gdi/bitmaps_6x0u.asp
     *
     * @param string $str Data to decode
     * @param int $width Image width
     *
     * @return string
     */
    public static function rle4_decode($str, $width)
    {
        $w = floor($width / 2) + ($width % 2);
        $lineWidth = $w + (3 - (($width - 1) / 2) % 4);
        $pixels = [];
        $cnt = strlen($str);
        $c = 0;

        for ($i = 0; $i < $cnt; $i++) {
            $o = ord($str[$i]);
            switch ($o) {
                case 0: # ESCAPE
                    $i++;
                    switch (ord($str[$i])) {
                        case 0: # NEW LINE
                            while (count($pixels) % $lineWidth != 0) {
                                $pixels[] = 0;
                            }
                            break;
                        case 1: # END OF FILE
                            while (count($pixels) % $lineWidth != 0) {
                                $pixels[] = 0;
                            }
                            break 3;
                        case 2: # DELTA
                            $i += 2;
                            break;
                        default: # ABSOLUTE MODE
                            $num = ord($str[$i]);
                            for ($j = 0; $j < $num; $j++) {
                                if ($j % 2 == 0) {
                                    $c = ord($str[++$i]);
                                    $pixels[] = ($c & 240) >> 4;
                                } else {
                                    $pixels[] = $c & 15;
                                }
                            }

                            if ($num % 2 == 0) {
                                $i++;
                            }
                    }
                    break;
                default:
                    $c = ord($str[++$i]);
                    for ($j = 0; $j < $o; $j++) {
                        $pixels[] = ($j % 2 == 0 ? ($c & 240) >> 4 : $c & 15);
                    }
            }
        }

        $out = '';
        if (count($pixels) % 2) {
            $pixels[] = 0;
        }

        $cnt = count($pixels) / 2;

        for ($i = 0; $i < $cnt; $i++) {
            $out .= chr(16 * $pixels[2 * $i] + $pixels[2 * $i + 1]);
        }

        return $out;
    }

    /**
     * parse a full url or pathname and return an array(protocol, host, path,
     * file + query + fragment)
     *
     * @param string $url
     * @return array
     */
    public static function explode_url($url)
    {
        $protocol = "";
        $host = "";
        $path = "";
        $file = "";
        $res = "";

        $arr = parse_url($url);
        if ( isset($arr["scheme"]) ) {
            $arr["scheme"] = mb_strtolower($arr["scheme"]);
        }

        if (isset($arr["scheme"]) && $arr["scheme"] !== "file" && $arr["scheme"] !== "phar" && strlen($arr["scheme"]) > 1) {
            $protocol = $arr["scheme"] . "://";

            if (isset($arr["user"])) {
                $host .= $arr["user"];

                if (isset($arr["pass"])) {
                    $host .= ":" . $arr["pass"];
                }

                $host .= "@";
            }

            if (isset($arr["host"])) {
                $host .= $arr["host"];
            }

            if (isset($arr["port"])) {
                $host .= ":" . $arr["port"];
            }

            if (isset($arr["path"]) && $arr["path"] !== "") {
                // Do we have a trailing slash?
                if ($arr["path"][mb_strlen($arr["path"]) - 1] === "/") {
                    $path = $arr["path"];
                    $file = "";
                } else {
                    $path = rtrim(dirname($arr["path"]), '/\\') . "/";
                    $file = basename($arr["path"]);
                }
            }

            if (isset($arr["query"])) {
                $file .= "?" . $arr["query"];
            }

            if (isset($arr["fragment"])) {
                $file .= "#" . $arr["fragment"];
            }

        } else {

            $protocol = "";
            $host = ""; // localhost, really

            $i = mb_stripos($url, "://");
            if ($i !== false) {
                $protocol = mb_strtolower(mb_substr($url, 0, $i + 3));
                $url = mb_substr($url, $i + 3);
            } else {
                $protocol = "file://";
            }

            if ($protocol === "phar://") {
                $res = substr($url, stripos($url, ".phar")+5);
                $url = substr($url, 7, stripos($url, ".phar")-2);
            }

            $file = basename($url);
            $path = dirname($url) . "/";
        }

        $ret = [$protocol, $host, $path, $file,
            "protocol" => $protocol,
            "host" => $host,
            "path" => $path,
            "file" => $file,
            "resource" => $res];
        return $ret;
    }

    /**
     * Print debug messages
     *
     * @param string $type The type of debug messages to print
     * @param string $msg The message to show
     */
    public static function dompdf_debug($type, $msg)
    {
        global $_DOMPDF_DEBUG_TYPES, $_dompdf_show_warnings, $_dompdf_debug;
        if (isset($_DOMPDF_DEBUG_TYPES[$type]) && ($_dompdf_show_warnings || $_dompdf_debug)) {
            $arr = debug_backtrace();

            echo basename($arr[0]["file"]) . " (" . $arr[0]["line"] . "): " . $arr[1]["function"] . ": ";
            Helpers::pre_r($msg);
        }
    }

    /**
     * Stores warnings in an array for display later
     * This function allows warnings generated by the DomDocument parser
     * and CSS loader ({@link Stylesheet}) to be captured and displayed
     * later.  Without this function, errors are displayed immediately and
     * PDF streaming is impossible.
     * @see http://www.php.net/manual/en/function.set-error_handler.php
     *
     * @param int $errno
     * @param string $errstr
     * @param string $errfile
     * @param string $errline
     *
     * @throws Exception
     */
    public static function record_warnings($errno, $errstr, $errfile, $errline)
    {
        // Not a warning or notice
        if (!($errno & (E_WARNING | E_NOTICE | E_USER_NOTICE | E_USER_WARNING | E_STRICT | E_DEPRECATED | E_USER_DEPRECATED))) {
            throw new Exception($errstr . " $errno");
        }

        global $_dompdf_warnings;
        global $_dompdf_show_warnings;

        if ($_dompdf_show_warnings) {
            echo $errstr . "\n";
        }

        $_dompdf_warnings[] = $errstr;
    }

    /**
     * @param $c
     * @return bool|string
     */
    public static function unichr($c)
    {
        if ($c <= 0x7F) {
            return chr($c);
        } elseif ($c <= 0x7FF) {
            return chr(0xC0 | $c >> 6) . chr(0x80 | $c & 0x3F);
        } elseif ($c <= 0xFFFF) {
            return chr(0xE0 | $c >> 12) . chr(0x80 | $c >> 6 & 0x3F)
            . chr(0x80 | $c & 0x3F);
        } elseif ($c <= 0x10FFFF) {
            return chr(0xF0 | $c >> 18) . chr(0x80 | $c >> 12 & 0x3F)
            . chr(0x80 | $c >> 6 & 0x3F)
            . chr(0x80 | $c & 0x3F);
        }
        return false;
    }

    /**
     * Converts a CMYK color to RGB
     *
     * @param float|float[] $c
     * @param float $m
     * @param float $y
     * @param float $k
     *
     * @return float[]
     */
    public static function cmyk_to_rgb($c, $m = null, $y = null, $k = null)
    {
        if (is_array($c)) {
            [$c, $m, $y, $k] = $c;
        }

        $c *= 255;
        $m *= 255;
        $y *= 255;
        $k *= 255;

        $r = (1 - round(2.55 * ($c + $k)));
        $g = (1 - round(2.55 * ($m + $k)));
        $b = (1 - round(2.55 * ($y + $k)));

        if ($r < 0) {
            $r = 0;
        }
        if ($g < 0) {
            $g = 0;
        }
        if ($b < 0) {
            $b = 0;
        }

        return [
            $r, $g, $b,
            "r" => $r, "g" => $g, "b" => $b
        ];
    }

    /**
     * getimagesize doesn't give a good size for 32bit BMP image v5
     *
     * @param string $filename
     * @param resource $context
     * @return array An array of three elements: width and height as
     *         `float|int`, and image type as `string|null`.
     */
    public static function dompdf_getimagesize($filename, $context = null)
    {
        static $cache = [];

        if (isset($cache[$filename])) {
            return $cache[$filename];
        }

        [$width, $height, $type] = getimagesize($filename);

        // Custom types
        $types = [
            IMAGETYPE_JPEG => "jpeg",
            IMAGETYPE_GIF  => "gif",
            IMAGETYPE_BMP  => "bmp",
            IMAGETYPE_PNG  => "png",
            IMAGETYPE_WEBP => "webp",
        ];

        $type = $types[$type] ?? null;

        if ($width == null || $height == null) {
            [$data] = Helpers::getFileContent($filename, $context);

            if ($data !== null) {
                if (substr($data, 0, 2) === "BM") {
                    $meta = unpack("vtype/Vfilesize/Vreserved/Voffset/Vheadersize/Vwidth/Vheight", $data);
                    $width = (int) $meta["width"];
                    $height = (int) $meta["height"];
                    $type = "bmp";
                } elseif (strpos($data, "<svg") !== false) {
                    $doc = new \Svg\Document();
                    $doc->loadFile($filename);

                    [$width, $height] = $doc->getDimensions();
                    $width = (float) $width;
                    $height = (float) $height;
                    $type = "svg";
                }
            }
        }

        return $cache[$filename] = [$width ?? 0, $height ?? 0, $type];
    }

    /**
     * Credit goes to mgutt
     * http://www.programmierer-forum.de/function-imagecreatefrombmp-welche-variante-laeuft-t143137.htm
     * Modified by Fabien Menager to support RGB555 BMP format
     */
    public static function imagecreatefrombmp($filename, $context = null)
    {
        if (!function_exists("imagecreatetruecolor")) {
            trigger_error("The PHP GD extension is required, but is not installed.", E_ERROR);
            return false;
        }

        // version 1.00
        if (!($fh = fopen($filename, 'rb'))) {
            trigger_error('imagecreatefrombmp: Can not open ' . $filename, E_USER_WARNING);
            return false;
        }

        $bytes_read = 0;

        // read file header
        $meta = unpack('vtype/Vfilesize/Vreserved/Voffset', fread($fh, 14));

        // check for bitmap
        if ($meta['type'] != 19778) {
            trigger_error('imagecreatefrombmp: ' . $filename . ' is not a bitmap!', E_USER_WARNING);
            return false;
        }

        // read image header
        $meta += unpack('Vheadersize/Vwidth/Vheight/vplanes/vbits/Vcompression/Vimagesize/Vxres/Vyres/Vcolors/Vimportant', fread($fh, 40));
        $bytes_read += 40;

        // read additional bitfield header
        if ($meta['compression'] == 3) {
            $meta += unpack('VrMask/VgMask/VbMask', fread($fh, 12));
            $bytes_read += 12;
        }

        // set bytes and padding
        $meta['bytes'] = $meta['bits'] / 8;
        $meta['decal'] = 4 - (4 * (($meta['width'] * $meta['bytes'] / 4) - floor($meta['width'] * $meta['bytes'] / 4)));
        if ($meta['decal'] == 4) {
            $meta['decal'] = 0;
        }

        // obtain imagesize
        if ($meta['imagesize'] < 1) {
            $meta['imagesize'] = $meta['filesize'] - $meta['offset'];
            // in rare cases filesize is equal to offset so we need to read physical size
            if ($meta['imagesize'] < 1) {
                $meta['imagesize'] = @filesize($filename) - $meta['offset'];
                if ($meta['imagesize'] < 1) {
                    trigger_error('imagecreatefrombmp: Can not obtain filesize of ' . $filename . '!', E_USER_WARNING);
                    return false;
                }
            }
        }

        // calculate colors
        $meta['colors'] = !$meta['colors'] ? pow(2, $meta['bits']) : $meta['colors'];

        // read color palette
        $palette = [];
        if ($meta['bits'] < 16) {
            $palette = unpack('l' . $meta['colors'], fread($fh, $meta['colors'] * 4));
            // in rare cases the color value is signed
            if ($palette[1] < 0) {
                foreach ($palette as $i => $color) {
                    $palette[$i] = $color + 16777216;
                }
            }
        }

        // ignore extra bitmap headers
        if ($meta['headersize'] > $bytes_read) {
            fread($fh, $meta['headersize'] - $bytes_read);
        }

        // create gd image
        $im = imagecreatetruecolor($meta['width'], $meta['height']);
        $data = fread($fh, $meta['imagesize']);

        // uncompress data
        switch ($meta['compression']) {
            case 1:
                $data = Helpers::rle8_decode($data, $meta['width']);
                break;
            case 2:
                $data = Helpers::rle4_decode($data, $meta['width']);
                break;
        }

        $p = 0;
        $vide = chr(0);
        $y = $meta['height'] - 1;
        $error = 'imagecreatefrombmp: ' . $filename . ' has not enough data!';

        // loop through the image data beginning with the lower left corner
        while ($y >= 0) {
            $x = 0;
            while ($x < $meta['width']) {
                switch ($meta['bits']) {
                    case 32:
                    case 24:
                        if (!($part = substr($data, $p, 3 /*$meta['bytes']*/))) {
                            trigger_error($error, E_USER_WARNING);
                            return $im;
                        }
                        $color = unpack('V', $part . $vide);
                        break;
                    case 16:
                        if (!($part = substr($data, $p, 2 /*$meta['bytes']*/))) {
                            trigger_error($error, E_USER_WARNING);
                            return $im;
                        }
                        $color = unpack('v', $part);

                        if (empty($meta['rMask']) || $meta['rMask'] != 0xf800) {
                            $color[1] = (($color[1] & 0x7c00) >> 7) * 65536 + (($color[1] & 0x03e0) >> 2) * 256 + (($color[1] & 0x001f) << 3); // 555
                        } else {
                            $color[1] = (($color[1] & 0xf800) >> 8) * 65536 + (($color[1] & 0x07e0) >> 3) * 256 + (($color[1] & 0x001f) << 3); // 565
                        }
                        break;
                    case 8:
                        $color = unpack('n', $vide . substr($data, $p, 1));
                        $color[1] = $palette[$color[1] + 1];
                        break;
                    case 4:
                        $color = unpack('n', $vide . substr($data, floor($p), 1));
                        $color[1] = ($p * 2) % 2 == 0 ? $color[1] >> 4 : $color[1] & 0x0F;
                        $color[1] = $palette[$color[1] + 1];
                        break;
                    case 1:
                        $color = unpack('n', $vide . substr($data, floor($p), 1));
                        switch (($p * 8) % 8) {
                            case 0:
                                $color[1] = $color[1] >> 7;
                                break;
                            case 1:
                                $color[1] = ($color[1] & 0x40) >> 6;
                                break;
                            case 2:
                                $color[1] = ($color[1] & 0x20) >> 5;
                                break;
                            case 3:
                                $color[1] = ($color[1] & 0x10) >> 4;
                                break;
                            case 4:
                                $color[1] = ($color[1] & 0x8) >> 3;
                                break;
                            case 5:
                                $color[1] = ($color[1] & 0x4) >> 2;
                                break;
                            case 6:
                                $color[1] = ($color[1] & 0x2) >> 1;
                                break;
                            case 7:
                                $color[1] = ($color[1] & 0x1);
                                break;
                        }
                        $color[1] = $palette[$color[1] + 1];
                        break;
                    default:
                        trigger_error('imagecreatefrombmp: ' . $filename . ' has ' . $meta['bits'] . ' bits and this is not supported!', E_USER_WARNING);
                        return false;
                }
                imagesetpixel($im, $x, $y, $color[1]);
                $x++;
                $p += $meta['bytes'];
            }
            $y--;
            $p += $meta['decal'];
        }
        fclose($fh);
        return $im;
    }

    /**
     * Gets the content of the file at the specified path using one of
     * the following methods, in preferential order:
     *  - file_get_contents: if allow_url_fopen is true or the file is local
     *  - curl: if allow_url_fopen is false and curl is available
     *
     * @param string $uri
     * @param resource $context
     * @param int $offset
     * @param int $maxlen
     * @return string[]
     */
    public static function getFileContent($uri, $context = null, $offset = 0, $maxlen = null)
    {
        $content = null;
        $headers = null;
        [$protocol] = Helpers::explode_url($uri);
        $is_local_path = in_array(strtolower($protocol), ["", "file://", "phar://"], true);
        $can_use_curl = in_array(strtolower($protocol), ["http://", "https://"], true);

        set_error_handler([self::class, 'record_warnings']);

        try {
            if ($is_local_path || ini_get('allow_url_fopen') || !$can_use_curl) {
                if ($is_local_path === false) {
                    $uri = Helpers::encodeURI($uri);
                }
                if (isset($maxlen)) {
                    $result = file_get_contents($uri, false, $context, $offset, $maxlen);
                } else {
                    $result = file_get_contents($uri, false, $context, $offset);
                }
                if ($result !== false) {
                    $content = $result;
                }
                if (isset($http_response_header)) {
                    $headers = $http_response_header;
                }

            } elseif ($can_use_curl && function_exists('curl_exec')) {
                $curl = curl_init($uri);

                curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
                curl_setopt($curl, CURLOPT_HEADER, true);
                if ($offset > 0) {
                    curl_setopt($curl, CURLOPT_RESUME_FROM, $offset);
                }

                if ($maxlen > 0) {
                    curl_setopt($curl, CURLOPT_BUFFERSIZE, 128);
                    curl_setopt($curl, CURLOPT_NOPROGRESS, false);
                    curl_setopt($curl, CURLOPT_PROGRESSFUNCTION, function ($res, $download_size_total, $download_size, $upload_size_total, $upload_size) use ($maxlen) {
                        return ($download_size > $maxlen) ? 1 : 0;
                    });
                }

                $context_options = [];
                if (!is_null($context)) {
                    $context_options = stream_context_get_options($context);
                }
                foreach ($context_options as $stream => $options) {
                    foreach ($options as $option => $value) {
                        $key = strtolower($stream) . ":" . strtolower($option);
                        switch ($key) {
                            case "curl:curl_verify_ssl_host":
                                curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, !$value ? 0 : 2);
                                break;
                            case "curl:max_redirects":
                                curl_setopt($curl, CURLOPT_MAXREDIRS, $value);
                                break;
                            case "http:follow_location":
                                curl_setopt($curl, CURLOPT_FOLLOWLOCATION, $value);
                                break;
                            case "http:header":
                                if (is_string($value)) {
                                    curl_setopt($curl, CURLOPT_HTTPHEADER, [$value]);
                                } else {
                                    curl_setopt($curl, CURLOPT_HTTPHEADER, $value);
                                }
                                break;
                            case "http:timeout":
                                curl_setopt($curl, CURLOPT_TIMEOUT, $value);
                                break;
                            case "http:user_agent":
                                curl_setopt($curl, CURLOPT_USERAGENT, $value);
                                break;
                            case "curl:curl_verify_ssl_peer":
                            case "ssl:verify_peer":
                                curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, $value);
                                break;
                        }
                    }
                }

                $data = curl_exec($curl);

                if ($data !== false && !curl_errno($curl)) {
                    switch ($http_code = curl_getinfo($curl, CURLINFO_HTTP_CODE)) {
                        case 200:
                            $raw_headers = substr($data, 0, curl_getinfo($curl, CURLINFO_HEADER_SIZE));
                            $headers = preg_split("/[\n\r]+/", trim($raw_headers));
                            $content = substr($data, curl_getinfo($curl, CURLINFO_HEADER_SIZE));
                            break;
                    }
                }
                curl_close($curl);
            }
        } finally {
            restore_error_handler();
        }

        return [$content, $headers];
    }

    /**
     * @param string $str
     * @return string
     */
    public static function mb_ucwords(string $str): string
    {
        $max_len = mb_strlen($str);
        if ($max_len === 1) {
            return mb_strtoupper($str);
        }

        $str = mb_strtoupper(mb_substr($str, 0, 1)) . mb_substr($str, 1);

        foreach ([' ', '.', ',', '!', '?', '-', '+'] as $s) {
            $pos = 0;
            while (($pos = mb_strpos($str, $s, $pos)) !== false) {
                $pos++;
                // Nothing to do if the separator is the last char of the string
                if ($pos !== false && $pos < $max_len) {
                    // If the char we want to upper is the last char there is nothing to append behind
                    if ($pos + 1 < $max_len) {
                        $str = mb_substr($str, 0, $pos) . mb_strtoupper(mb_substr($str, $pos, 1)) . mb_substr($str, $pos + 1);
                    } else {
                        $str = mb_substr($str, 0, $pos) . mb_strtoupper(mb_substr($str, $pos, 1));
                    }
                }
            }
        }

        return $str;
    }

    /**
     * Check whether two lengths should be considered equal, accounting for
     * inaccuracies in float computation.
     *
     * The implementation relies on the fact that we are neither dealing with
     * very large, nor with very small numbers in layout. Adapted from
     * https://floating-point-gui.de/errors/comparison/.
     *
     * @param float $a
     * @param float $b
     *
     * @return bool
     */
    public static function lengthEqual(float $a, float $b): bool
    {
        // The epsilon results in a precision of at least:
        // * 7 decimal digits at around 1
        // * 4 decimal digits at around 1000 (around the size of common paper formats)
        // * 2 decimal digits at around 100,000 (100,000pt ~ 35.28m)
        static $epsilon = 1e-8;
        static $almostZero = 1e-12;

        $diff = abs($a - $b);

        if ($a === $b || $diff < $almostZero) {
            return true;
        }

        return $diff < $epsilon * max(abs($a), abs($b));
    }

    /**
     * Check `$a < $b`, accounting for inaccuracies in float computation.
     */
    public static function lengthLess(float $a, float $b): bool
    {
        return $a < $b && !self::lengthEqual($a, $b);
    }

    /**
     * Check `$a <= $b`, accounting for inaccuracies in float computation.
     */
    public static function lengthLessOrEqual(float $a, float $b): bool
    {
        return $a <= $b || self::lengthEqual($a, $b);
    }

    /**
     * Check `$a > $b`, accounting for inaccuracies in float computation.
     */
    public static function lengthGreater(float $a, float $b): bool
    {
        return $a > $b && !self::lengthEqual($a, $b);
    }

    /**
     * Check `$a >= $b`, accounting for inaccuracies in float computation.
     */
    public static function lengthGreaterOrEqual(float $a, float $b): bool
    {
        return $a >= $b || self::lengthEqual($a, $b);
    }
}
<?php
/**
 * @package dompdf
 * @link    https://github.com/dompdf/dompdf
 * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
 */
namespace Dompdf\Image;

use Dompdf\Options;
use Dompdf\Helpers;
use Dompdf\Exception\ImageException;

/**
 * Static class that resolves image urls and downloads and caches
 * remote images if required.
 *
 * @package dompdf
 */
class Cache
{
    /**
     * Array of downloaded images.  Cached so that identical images are
     * not needlessly downloaded.
     *
     * @var array
     */
    protected static $_cache = [];

    /**
     * @var array
     */
    protected static $tempImages = [];

    /**
     * Array of image references from an SVG document.
     * Used to detect circular references across SVG documents.
     *
     * @var array
     */
    protected static $svgRefs = [];

    /**
     * The url to the "broken image" used when images can't be loaded
     *
     * @var string
     */
    public static $broken_image = "data:image/svg+xml;charset=utf8,%3C?xml version='1.0'?%3E%3Csvg width='64' height='64' xmlns='http://www.w3.org/2000/svg'%3E%3Cg%3E%3Crect stroke='%23666666' id='svg_1' height='60.499994' width='60.166667' y='1.666669' x='1.999998' stroke-width='1.5' fill='none'/%3E%3Cline stroke-linecap='null' stroke-linejoin='null' id='svg_3' y2='59.333253' x2='59.749916' y1='4.333415' x1='4.250079' stroke-width='1.5' stroke='%23999999' fill='none'/%3E%3Cline stroke-linecap='null' stroke-linejoin='null' id='svg_4' y2='59.999665' x2='4.062838' y1='3.750342' x1='60.062164' stroke-width='1.5' stroke='%23999999' fill='none'/%3E%3C/g%3E%3C/svg%3E";

    public static $error_message = "Image not found or type unknown";
    
    /**
     * Resolve and fetch an image for use.
     *
     * @param string $url       The url of the image
     * @param string $protocol  Default protocol if none specified in $url
     * @param string $host      Default host if none specified in $url
     * @param string $base_path Default path if none specified in $url
     * @param Options $options  An instance of Dompdf\Options
     *
     * @return array            An array with three elements: The local path to the image, the image
     *                          extension, and an error message if the image could not be cached
     */
    static function resolve_url($url, $protocol, $host, $base_path, Options $options)
    {
        $tempfile = null;
        $resolved_url = null;
        $type = null;
        $message = null;
        
        try {
            $full_url = Helpers::build_url($protocol, $host, $base_path, $url);

            if ($full_url === null) {
                throw new ImageException("Unable to parse image URL $url.", E_WARNING);
            }

            $parsed_url = Helpers::explode_url($full_url);
            $protocol = strtolower($parsed_url["protocol"]);
            $is_data_uri = strpos($protocol, "data:") === 0;
            
            if (!$is_data_uri) {
                $allowed_protocols = $options->getAllowedProtocols();
                if (!array_key_exists($protocol, $allowed_protocols)) {
                    throw new ImageException("Permission denied on $url. The communication protocol is not supported.", E_WARNING);
                }
                foreach ($allowed_protocols[$protocol]["rules"] as $rule) {
                    [$result, $message] = $rule($full_url);
                    if (!$result) {
                        throw new ImageException("Error loading $url: $message", E_WARNING);
                    }
                }
            }

            if ($protocol === "file://") {
                $resolved_url = $full_url;
            } elseif (isset(self::$_cache[$full_url])) {
                $resolved_url = self::$_cache[$full_url];
            } else {
                $tmp_dir = $options->getTempDir();
                if (($resolved_url = @tempnam($tmp_dir, "ca_dompdf_img_")) === false) {
                    throw new ImageException("Unable to create temporary image in " . $tmp_dir, E_WARNING);
                }
                $tempfile = $resolved_url;

                $image = null;
                if ($is_data_uri) {
                    if (($parsed_data_uri = Helpers::parse_data_uri($url)) !== false) {
                        $image = $parsed_data_uri["data"];
                    }
                } else {
                    list($image, $http_response_header) = Helpers::getFileContent($full_url, $options->getHttpContext());
                }

                // Image not found or invalid
                if ($image === null) {
                    $msg = ($is_data_uri ? "Data-URI could not be parsed" : "Image not found");
                    throw new ImageException($msg, E_WARNING);
                }

                if (@file_put_contents($resolved_url, $image) === false) {
                    throw new ImageException("Unable to create temporary image in " . $tmp_dir, E_WARNING);
                }

                self::$_cache[$full_url] = $resolved_url;
            }

            // Check if the local file is readable
            if (!is_readable($resolved_url) || !filesize($resolved_url)) {
                throw new ImageException("Image not readable or empty", E_WARNING);
            }

            list($width, $height, $type) = Helpers::dompdf_getimagesize($resolved_url, $options->getHttpContext());

            if (($width && $height && in_array($type, ["gif", "png", "jpeg", "bmp", "svg","webp"], true)) === false) {
                throw new ImageException("Image type unknown", E_WARNING);
            }

            if ($type === "svg") {
                $parser = xml_parser_create("utf-8");
                xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, false);
                xml_set_element_handler(
                    $parser,
                    function ($parser, $name, $attributes) use ($options, $parsed_url, $full_url) {
                        if (strtolower($name) === "image") {
                            if (!\array_key_exists($full_url, self::$svgRefs)) {
                                self::$svgRefs[$full_url] = [];
                            }
                            $attributes = array_change_key_case($attributes, CASE_LOWER);
                            $urls = [];
                            $urls[] = $attributes["xlink:href"] ?? "";
                            $urls[] = $attributes["href"] ?? "";
                            foreach ($urls as $url) {
                                if (empty($url)) {
                                    continue;
                                }

                                $inner_full_url = Helpers::build_url($parsed_url["protocol"], $parsed_url["host"], $parsed_url["path"], $url);
                                if (empty($inner_full_url)) {
                                    continue;
                                }
                                
                                self::detectCircularRef($full_url, $inner_full_url);
                                self::$svgRefs[$full_url][] = $inner_full_url;
                                [$resolved_url, $type, $message] = self::resolve_url($url, $parsed_url["protocol"], $parsed_url["host"], $parsed_url["path"], $options);
                                if (!empty($message)) {
                                    throw new ImageException("This SVG document references a restricted resource. $message", E_WARNING);
                                }
                            }
                        }
                    },
                    false
                );
        
                if (($fp = fopen($resolved_url, "r")) !== false) {
                    while ($line = fread($fp, 8192)) {
                        xml_parse($parser, $line, false);
                    }
                    fclose($fp);
                    xml_parse($parser, "", true);
                }
                xml_parser_free($parser);
            }
        } catch (ImageException $e) {
            if ($tempfile) {
                unlink($tempfile);
            }
            $resolved_url = self::$broken_image;
            list($width, $height, $type) = Helpers::dompdf_getimagesize($resolved_url, $options->getHttpContext());
            $message = self::$error_message;
            Helpers::record_warnings($e->getCode(), $e->getMessage() . " \n $url", $e->getFile(), $e->getLine());
            self::$_cache[$full_url] = $resolved_url;
        }

        return [$resolved_url, $type, $message];
    }

    static function detectCircularRef(string $src, string $target)
    {
        if (!\array_key_exists($target, self::$svgRefs)) {
            return;
        }
        foreach (self::$svgRefs[$target] as $ref) {
            if ($ref === $src) {
                throw new ImageException("Circular external SVG image reference detected.", E_WARNING);
            }
            self::detectCircularRef($src, $ref);
        }
    }

    /**
     * Register a temp file for the given original image file.
     *
     * @param string $filePath The path of the original image.
     * @param string $tempPath The path of the temp file to register.
     * @param string $key      An optional key to register the temp file at.
     */
    static function addTempImage(string $filePath, string $tempPath, string $key = "default"): void
    {
        if (!isset(self::$tempImages[$filePath])) {
            self::$tempImages[$filePath] = [];
        }

        self::$tempImages[$filePath][$key] = $tempPath;
    }

    /**
     * Get the path of a temp file registered for the given original image file.
     *
     * @param string $filePath The path of the original image.
     * @param string $key      The key the temp file is registered at.
     */
    static function getTempImage(string $filePath, string $key = "default"): ?string
    {
        return self::$tempImages[$filePath][$key] ?? null;
    }

    /**
     * Unlink all cached images (i.e. temporary images either downloaded
     * or converted) except for the bundled "broken image"
     */
    static function clear(bool $debugPng = false)
    {
        foreach (self::$_cache as $file) {
            if ($file === self::$broken_image) {
                continue;
            }
            if ($debugPng) {
                print "[clear unlink $file]";
            }
            if (file_exists($file)) {
                unlink($file);
            }
        }

        foreach (self::$tempImages as $versions) {
            foreach ($versions as $file) {
                if ($file === self::$broken_image) {
                    continue;
                }
                if ($debugPng) {
                    print "[unlink temp image $file]";
                }
                if (file_exists($file)) {
                    unlink($file);
                }
            }
        }

        self::$_cache = [];
        self::$tempImages = [];
        self::$svgRefs = [];
    }

    static function detect_type($file, $context = null)
    {
        list(, , $type) = Helpers::dompdf_getimagesize($file, $context);

        return $type;
    }

    static function is_broken($url)
    {
        return $url === self::$broken_image;
    }
}

if (file_exists(realpath(__DIR__ . "/../../lib/res/broken_image.svg"))) {
    Cache::$broken_image = realpath(__DIR__ . "/../../lib/res/broken_image.svg");
}
<?php
/**
 * @package dompdf
 * @link    https://github.com/dompdf/dompdf
 * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
 */
namespace Dompdf;

/**
 * Embeds Javascript into the PDF document
 *
 * @package dompdf
 */
class JavascriptEmbedder
{

    /**
     * @var Dompdf
     */
    protected $_dompdf;

    /**
     * JavascriptEmbedder constructor.
     *
     * @param Dompdf $dompdf
     */
    public function __construct(Dompdf $dompdf)
    {
        $this->_dompdf = $dompdf;
    }

    /**
     * @param $script
     */
    public function insert($script)
    {
        $this->_dompdf->getCanvas()->javascript($script);
    }

    /**
     * @param Frame $frame
     */
    public function render(Frame $frame)
    {
        if (!$this->_dompdf->getOptions()->getIsJavascriptEnabled()) {
            return;
        }

        $this->insert($frame->get_node()->nodeValue);
    }
}
<?php
/**
 * @package dompdf
 * @link    https://github.com/dompdf/dompdf
 * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
 */
namespace Dompdf;

use Dompdf\FrameDecorator\AbstractFrameDecorator;
use Dompdf\FrameDecorator\Block;
use Dompdf\FrameDecorator\ListBullet;
use Dompdf\FrameDecorator\Page;
use Dompdf\FrameReflower\Text as TextFrameReflower;
use Dompdf\Positioner\Inline as InlinePositioner;

/**
 * The line box class
 *
 * This class represents a line box
 * http://www.w3.org/TR/CSS2/visuren.html#line-box
 *
 * @package dompdf
 */
class LineBox
{

    /**
     * @var Block
     */
    protected $_block_frame;

    /**
     * @var AbstractFrameDecorator[]
     */
    protected $_frames = [];

    /**
     * @var ListBullet[]
     */
    protected $list_markers = [];

    /**
     * @var int
     */
    public $wc = 0;

    /**
     * @var float
     */
    public $y = null;

    /**
     * @var float
     */
    public $w = 0.0;

    /**
     * @var float
     */
    public $h = 0.0;

    /**
     * @var float
     */
    public $left = 0.0;

    /**
     * @var float
     */
    public $right = 0.0;

    /**
     * @var AbstractFrameDecorator
     */
    public $tallest_frame = null;

    /**
     * @var bool[]
     */
    public $floating_blocks = [];

    /**
     * @var bool
     */
    public $br = false;

    /**
     * Whether the line box contains any inline-positioned frames.
     *
     * @var bool
     */
    public $inline = false;

    /**
     * Class constructor
     *
     * @param Block $frame the Block containing this line
     * @param int $y
     */
    public function __construct(Block $frame, $y = 0)
    {
        $this->_block_frame = $frame;
        $this->_frames = [];
        $this->y = $y;

        $this->get_float_offsets();
    }

    /**
     * Returns the floating elements inside the first floating parent
     *
     * @param Page $root
     *
     * @return Frame[]
     */
    public function get_floats_inside(Page $root)
    {
        $floating_frames = $root->get_floating_frames();

        if (count($floating_frames) == 0) {
            return $floating_frames;
        }

        // Find nearest floating element
        $p = $this->_block_frame;
        while ($p->get_style()->float === "none") {
            $parent = $p->get_parent();

            if (!$parent) {
                break;
            }

            $p = $parent;
        }

        if ($p == $root) {
            return $floating_frames;
        }

        $parent = $p;

        $childs = [];

        foreach ($floating_frames as $_floating) {
            $p = $_floating->get_parent();

            while (($p = $p->get_parent()) && $p !== $parent);

            if ($p) {
                $childs[] = $p;
            }
        }

        return $childs;
    }

    public function get_float_offsets()
    {
        static $anti_infinite_loop = 10000; // FIXME smelly hack

        $reflower = $this->_block_frame->get_reflower();

        if (!$reflower) {
            return;
        }

        $cb_w = null;

        $block = $this->_block_frame;
        $root = $block->get_root();

        if (!$root) {
            return;
        }

        $style = $this->_block_frame->get_style();
        $floating_frames = $this->get_floats_inside($root);
        $inside_left_floating_width = 0;
        $inside_right_floating_width = 0;
        $outside_left_floating_width = 0;
        $outside_right_floating_width = 0;

        foreach ($floating_frames as $child_key => $floating_frame) {
            $floating_frame_parent = $floating_frame->get_parent();
            $id = $floating_frame->get_id();

            if (isset($this->floating_blocks[$id])) {
                continue;
            }

            $float = $floating_frame->get_style()->float;
            $floating_width = $floating_frame->get_margin_width();

            if (!$cb_w) {
                $cb_w = $floating_frame->get_containing_block("w");
            }

            $line_w = $this->get_width();

            if (!$floating_frame->_float_next_line && ($cb_w <= $line_w + $floating_width) && ($cb_w > $line_w)) {
                $floating_frame->_float_next_line = true;
                continue;
            }

            // If the child is still shifted by the floating element
            if ($anti_infinite_loop-- > 0 &&
                $floating_frame->get_position("y") + $floating_frame->get_margin_height() >= $this->y &&
                $block->get_position("x") + $block->get_margin_width() >= $floating_frame->get_position("x")
            ) {
                if ($float === "left") {
                    if ($floating_frame_parent === $this->_block_frame) {
                        $inside_left_floating_width += $floating_width;
                    } else {
                        $outside_left_floating_width += $floating_width;
                    }
                } elseif ($float === "right") {
                    if ($floating_frame_parent === $this->_block_frame) {
                        $inside_right_floating_width += $floating_width;
                    } else {
                        $outside_right_floating_width += $floating_width;
                    }
                }

                $this->floating_blocks[$id] = true;
            } // else, the floating element won't shift anymore
            else {
                $root->remove_floating_frame($child_key);
            }
        }

        $this->left += $inside_left_floating_width;
        if ($outside_left_floating_width > 0 && $outside_left_floating_width > ((float)$style->length_in_pt($style->margin_left) + (float)$style->length_in_pt($style->padding_left))) {
            $this->left += $outside_left_floating_width - (float)$style->length_in_pt($style->margin_left) - (float)$style->length_in_pt($style->padding_left);
        }
        $this->right += $inside_right_floating_width;
        if ($outside_right_floating_width > 0 && $outside_right_floating_width > ((float)$style->length_in_pt($style->margin_left) + (float)$style->length_in_pt($style->padding_right))) {
            $this->right += $outside_right_floating_width - (float)$style->length_in_pt($style->margin_right) - (float)$style->length_in_pt($style->padding_right);
        }
    }

    /**
     * @return float
     */
    public function get_width()
    {
        return $this->left + $this->w + $this->right;
    }

    /**
     * @return Block
     */
    public function get_block_frame()
    {
        return $this->_block_frame;
    }

    /**
     * @return AbstractFrameDecorator[]
     */
    function &get_frames()
    {
        return $this->_frames;
    }

    /**
     * @param AbstractFrameDecorator $frame
     */
    public function add_frame(Frame $frame): void
    {
        $this->_frames[] = $frame;

        if ($frame->get_positioner() instanceof InlinePositioner) {
            $this->inline = true;
        }
    }

    /**
     * Remove the frame at the given index and all following frames from the
     * line.
     *
     * @param int $index
     */
    public function remove_frames(int $index): void
    {
        $lastIndex = count($this->_frames) - 1;

        if ($index < 0 || $index > $lastIndex) {
            return;
        }

        for ($i = $lastIndex; $i >= $index; $i--) {
            $f = $this->_frames[$i];
            unset($this->_frames[$i]);
            $this->w -= $f->get_margin_width();
        }

        // Reset array indices
        $this->_frames = array_values($this->_frames);

        // Recalculate the height of the line
        $h = 0.0;
        $this->inline = false;

        foreach ($this->_frames as $f) {
            $h = max($h, $f->get_margin_height());

            if ($f->get_positioner() instanceof InlinePositioner) {
                $this->inline = true;
            }
        }

        $this->h = $h;
    }

    /**
     * Get the `outside` positioned list markers to be vertically aligned with
     * the line box.
     *
     * @return ListBullet[]
     */
    public function get_list_markers(): array
    {
        return $this->list_markers;
    }

    /**
     * Add a list marker to the line box.
     *
     * The list marker is only added for the purpose of vertical alignment, it
     * is not actually added to the list of frames of the line box.
     */
    public function add_list_marker(ListBullet $marker): void
    {
        $this->list_markers[] = $marker;
    }

    /**
     * An iterator of all list markers and inline positioned frames of the line
     * box.
     *
     * @return \Iterator<AbstractFrameDecorator>
     */
    public function frames_to_align(): \Iterator
    {
        yield from $this->list_markers;

        foreach ($this->_frames as $frame) {
            if ($frame->get_positioner() instanceof InlinePositioner) {
                yield $frame;
            }
        }
    }

    /**
     * Trim trailing whitespace from the line.
     */
    public function trim_trailing_ws(): void
    {
        $lastIndex = count($this->_frames) - 1;

        if ($lastIndex < 0) {
            return;
        }

        $lastFrame = $this->_frames[$lastIndex];
        $reflower = $lastFrame->get_reflower();

        if ($reflower instanceof TextFrameReflower && !$lastFrame->is_pre()) {
            $reflower->trim_trailing_ws();
            $this->recalculate_width();
        }
    }

    /**
     * Recalculate LineBox width based on the contained frames total width.
     *
     * @return float
     */
    public function recalculate_width(): float
    {
        $width = 0.0;

        foreach ($this->_frames as $frame) {
            $width += $frame->get_margin_width();
        }

        return $this->w = $width;
    }

    /**
     * @return string
     */
    public function __toString(): string
    {
        $props = ["wc", "y", "w", "h", "left", "right", "br"];
        $s = "";
        foreach ($props as $prop) {
            $s .= "$prop: " . $this->$prop . "\n";
        }
        $s .= count($this->_frames) . " frames\n";

        return $s;
    }
}

/*
class LineBoxList implements Iterator {
  private $_p = 0;
  private $_lines = array();

}
*/
<?php
/**
 * @package dompdf
 * @link    https://github.com/dompdf/dompdf
 * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
 */
namespace Dompdf;

class Options
{
    /**
     * The root of your DOMPDF installation
     *
     * @var string
     */
    private $rootDir;

    /**
     * The location of a temporary directory.
     *
     * The directory specified must be writable by the executing process.
     * The temporary directory is required to download remote images and when
     * using the PFDLib back end.
     *
     * @var string
     */
    private $tempDir;

    /**
     * The location of the DOMPDF font directory
     *
     * The location of the directory where DOMPDF will store fonts and font metrics
     * Note: This directory must exist and be writable by the executing process.
     *
     * @var string
     */
    private $fontDir;

    /**
     * The location of the DOMPDF font cache directory
     *
     * This directory contains the cached font metrics for the fonts used by DOMPDF.
     * This directory can be the same as $fontDir
     *
     * Note: This directory must exist and be writable by the executing process.
     *
     * @var string
     */
    private $fontCache;

    /**
     * dompdf's "chroot"
     *
     * Utilized by Dompdf's default file:// protocol URI validation rule.
     * All local files opened by dompdf must be in a subdirectory of the directory
     * or directories specified by this option.
     * DO NOT set this value to '/' since this could allow an attacker to use dompdf to
     * read any files on the server.  This should be an absolute path.
     *
     * ==== IMPORTANT ====
     * This setting may increase the risk of system exploit. Do not change
     * this settings without understanding the consequences. Additional
     * documentation is available on the dompdf wiki at:
     * https://github.com/dompdf/dompdf/wiki
     *
     * @var array
     */
    private $chroot;

    /**
    * Protocol whitelist
    *
    * Protocols and PHP wrappers allowed in URIs, and the validation rules
    * that determine if a resouce may be loaded. Full support is not guaranteed
    * for the protocols/wrappers specified
    * by this array.
    *
    * @var array
    */
    private $allowedProtocols = [
        "file://" => ["rules" => []],
        "http://" => ["rules" => []],
        "https://" => ["rules" => []]
    ];

    /**
    * Operational artifact (log files, temporary files) path validation
    *
    * @var callable
    */
    private $artifactPathValidation = null;

    /**
     * @var string
     */
    private $logOutputFile;

    /**
     * Styles targeted to this media type are applied to the document.
     * This is on top of the media types that are always applied:
     *    all, static, visual, bitmap, paged, dompdf
     *
     * @var string
     */
    private $defaultMediaType = "screen";

    /**
     * The default paper size.
     *
     * North America standard is "letter"; other countries generally "a4"
     * @see \Dompdf\Adapter\CPDF::PAPER_SIZES for valid sizes
     *
     * @var string|float[]
     */
    private $defaultPaperSize = "letter";

    /**
     * The default paper orientation.
     *
     * The orientation of the page (portrait or landscape).
     *
     * @var string
     */
    private $defaultPaperOrientation = "portrait";

    /**
     * The default font family
     *
     * Used if no suitable fonts can be found. This must exist in the font folder.
     *
     * @var string
     */
    private $defaultFont = "serif";

    /**
     * Image DPI setting
     *
     * This setting determines the default DPI setting for images and fonts.  The
     * DPI may be overridden for inline images by explicitly setting the
     * image's width & height style attributes (i.e. if the image's native
     * width is 600 pixels and you specify the image's width as 72 points,
     * the image will have a DPI of 600 in the rendered PDF.  The DPI of
     * background images can not be overridden and is controlled entirely
     * via this parameter.
     *
     * For the purposes of DOMPDF, pixels per inch (PPI) = dots per inch (DPI).
     * If a size in html is given as px (or without unit as image size),
     * this tells the corresponding size in pt at 72 DPI.
     * This adjusts the relative sizes to be similar to the rendering of the
     * html page in a reference browser.
     *
     * In pdf, always 1 pt = 1/72 inch
     *
     * @var int
     */
    private $dpi = 96;

    /**
     * A ratio applied to the fonts height to be more like browsers' line height
     *
     * @var float
     */
    private $fontHeightRatio = 1.1;

    /**
     * Enable embedded PHP
     *
     * If this setting is set to true then DOMPDF will automatically evaluate
     * embedded PHP contained within <script type="text/php"> ... </script> tags.
     *
     * ==== IMPORTANT ====
     * Enabling this for documents you do not trust (e.g. arbitrary remote html
     * pages) is a security risk. Embedded scripts are run with the same level of
     * system access available to dompdf. Set this option to false (recommended)
     * if you wish to process untrusted documents.
     *
     * This setting may increase the risk of system exploit. Do not change
     * this settings without understanding the consequences. Additional
     * documentation is available on the dompdf wiki at:
     * https://github.com/dompdf/dompdf/wiki
     *
     * @var bool
     */
    private $isPhpEnabled = false;

    /**
     * Enable remote file access
     *
     * If this setting is set to true, DOMPDF will access remote sites for
     * images and CSS files as required.
     *
     * ==== IMPORTANT ====
     * This can be a security risk, in particular in combination with isPhpEnabled and
     * allowing remote html code to be passed to $dompdf = new DOMPDF(); $dompdf->load_html(...);
     * This allows anonymous users to download legally doubtful internet content which on
     * tracing back appears to being downloaded by your server, or allows malicious php code
     * in remote html pages to be executed by your server with your account privileges.
     *
     * This setting may increase the risk of system exploit. Do not change
     * this settings without understanding the consequences. Additional
     * documentation is available on the dompdf wiki at:
     * https://github.com/dompdf/dompdf/wiki
     *
     * @var bool
     */
    private $isRemoteEnabled = false;

    /**
     * Enable inline JavaScript
     *
     * If this setting is set to true then DOMPDF will automatically insert
     * JavaScript code contained within <script type="text/javascript"> ... </script>
     * tags as written into the PDF.
     *
     * NOTE: This is PDF-based JavaScript to be executed by the PDF viewer,
     * not browser-based JavaScript executed by Dompdf.
     *
     * @var bool
     */
    private $isJavascriptEnabled = true;

    /**
     * Use the HTML5 Lib parser
     *
     * @deprecated
     * @var bool
     */
    private $isHtml5ParserEnabled = true;

    /**
     * Whether to enable font subsetting or not.
     *
     * @var bool
     */
    private $isFontSubsettingEnabled = true;

    /**
     * @var bool
     */
    private $debugPng = false;

    /**
     * @var bool
     */
    private $debugKeepTemp = false;

    /**
     * @var bool
     */
    private $debugCss = false;

    /**
     * @var bool
     */
    private $debugLayout = false;

    /**
     * @var bool
     */
    private $debugLayoutLines = true;

    /**
     * @var bool
     */
    private $debugLayoutBlocks = true;

    /**
     * @var bool
     */
    private $debugLayoutInline = true;

    /**
     * @var bool
     */
    private $debugLayoutPaddingBox = true;

    /**
     * The PDF rendering backend to use
     *
     * Valid settings are 'PDFLib', 'CPDF', 'GD', and 'auto'. 'auto' will
     * look for PDFLib and use it if found, or if not it will fall back on
     * CPDF. 'GD' renders PDFs to graphic files. {@link Dompdf\CanvasFactory}
     * ultimately determines which rendering class to instantiate
     * based on this setting.
     *
     * @var string
     */
    private $pdfBackend = "CPDF";

    /**
     * PDFlib license key
     *
     * If you are using a licensed, commercial version of PDFlib, specify
     * your license key here.  If you are using PDFlib-Lite or are evaluating
     * the commercial version of PDFlib, comment out this setting.
     *
     * @link http://www.pdflib.com
     *
     * If pdflib present in web server and auto or selected explicitly above,
     * a real license code must exist!
     *
     * @var string
     */
    private $pdflibLicense = "";

    /**
     * HTTP context created with stream_context_create()
     * Will be used for file_get_contents
     *
     * @link https://www.php.net/manual/context.php
     *
     * @var resource
     */
    private $httpContext;

    /**
     * @param array $attributes
     */
    public function __construct(array $attributes = null)
    {
        $rootDir = realpath(__DIR__ . "/../");
        $this->setChroot(array($rootDir));
        $this->setRootDir($rootDir);
        $this->setTempDir(sys_get_temp_dir());
        $this->setFontDir($rootDir . "/lib/fonts");
        $this->setFontCache($this->getFontDir());

        $ver = "";
        $versionFile = realpath(__DIR__ . '/../VERSION');
        if (($version = file_get_contents($versionFile)) !== false) {
            $version = trim($version);
            if ($version !== '$Format:<%h>$') {
                $ver = "/$version";
            }
        }
        $this->setHttpContext([
            "http" => [
                "follow_location" => false,
                "user_agent" => "Dompdf$ver https://github.com/dompdf/dompdf"
            ]
        ]);

        $this->setAllowedProtocols(["file://", "http://", "https://"]);

        $this->setArtifactPathValidation([$this, "validateArtifactPath"]);

        if (null !== $attributes) {
            $this->set($attributes);
        }
    }

    /**
     * @param array|string $attributes
     * @param null|mixed $value
     * @return $this
     */
    public function set($attributes, $value = null)
    {
        if (!is_array($attributes)) {
            $attributes = [$attributes => $value];
        }
        foreach ($attributes as $key => $value) {
            if ($key === 'tempDir' || $key === 'temp_dir') {
                $this->setTempDir($value);
            } elseif ($key === 'fontDir' || $key === 'font_dir') {
                $this->setFontDir($value);
            } elseif ($key === 'fontCache' || $key === 'font_cache') {
                $this->setFontCache($value);
            } elseif ($key === 'chroot') {
                $this->setChroot($value);
            } elseif ($key === 'allowedProtocols') {
                $this->setAllowedProtocols($value);
            } elseif ($key === 'artifactPathValidation') {
                $this->setArtifactPathValidation($value);
            } elseif ($key === 'logOutputFile' || $key === 'log_output_file') {
                $this->setLogOutputFile($value);
            } elseif ($key === 'defaultMediaType' || $key === 'default_media_type') {
                $this->setDefaultMediaType($value);
            } elseif ($key === 'defaultPaperSize' || $key === 'default_paper_size') {
                $this->setDefaultPaperSize($value);
            } elseif ($key === 'defaultPaperOrientation' || $key === 'default_paper_orientation') {
                $this->setDefaultPaperOrientation($value);
            } elseif ($key === 'defaultFont' || $key === 'default_font') {
                $this->setDefaultFont($value);
            } elseif ($key === 'dpi') {
                $this->setDpi($value);
            } elseif ($key === 'fontHeightRatio' || $key === 'font_height_ratio') {
                $this->setFontHeightRatio($value);
            } elseif ($key === 'isPhpEnabled' || $key === 'is_php_enabled' || $key === 'enable_php') {
                $this->setIsPhpEnabled($value);
            } elseif ($key === 'isRemoteEnabled' || $key === 'is_remote_enabled' || $key === 'enable_remote') {
                $this->setIsRemoteEnabled($value);
            } elseif ($key === 'isJavascriptEnabled' || $key === 'is_javascript_enabled' || $key === 'enable_javascript') {
                $this->setIsJavascriptEnabled($value);
            } elseif ($key === 'isHtml5ParserEnabled' || $key === 'is_html5_parser_enabled' || $key === 'enable_html5_parser') {
                $this->setIsHtml5ParserEnabled($value);
            } elseif ($key === 'isFontSubsettingEnabled' || $key === 'is_font_subsetting_enabled' || $key === 'enable_font_subsetting') {
                $this->setIsFontSubsettingEnabled($value);
            } elseif ($key === 'debugPng' || $key === 'debug_png') {
                $this->setDebugPng($value);
            } elseif ($key === 'debugKeepTemp' || $key === 'debug_keep_temp') {
                $this->setDebugKeepTemp($value);
            } elseif ($key === 'debugCss' || $key === 'debug_css') {
                $this->setDebugCss($value);
            } elseif ($key === 'debugLayout' || $key === 'debug_layout') {
                $this->setDebugLayout($value);
            } elseif ($key === 'debugLayoutLines' || $key === 'debug_layout_lines') {
                $this->setDebugLayoutLines($value);
            } elseif ($key === 'debugLayoutBlocks' || $key === 'debug_layout_blocks') {
                $this->setDebugLayoutBlocks($value);
            } elseif ($key === 'debugLayoutInline' || $key === 'debug_layout_inline') {
                $this->setDebugLayoutInline($value);
            } elseif ($key === 'debugLayoutPaddingBox' || $key === 'debug_layout_padding_box') {
                $this->setDebugLayoutPaddingBox($value);
            } elseif ($key === 'pdfBackend' || $key === 'pdf_backend') {
                $this->setPdfBackend($value);
            } elseif ($key === 'pdflibLicense' || $key === 'pdflib_license') {
                $this->setPdflibLicense($value);
            } elseif ($key === 'httpContext' || $key === 'http_context') {
                $this->setHttpContext($value);
            }
        }
        return $this;
    }

    /**
     * @param string $key
     * @return mixed
     */
    public function get($key)
    {
        if ($key === 'tempDir' || $key === 'temp_dir') {
            return $this->getTempDir();
        } elseif ($key === 'fontDir' || $key === 'font_dir') {
            return $this->getFontDir();
        } elseif ($key === 'fontCache' || $key === 'font_cache') {
            return $this->getFontCache();
        } elseif ($key === 'chroot') {
            return $this->getChroot();
        } elseif ($key === 'allowedProtocols') {
            return $this->getAllowedProtocols();
        } elseif ($key === 'artifactPathValidation') {
            return $this->getArtifactPathValidation();
        } elseif ($key === 'logOutputFile' || $key === 'log_output_file') {
            return $this->getLogOutputFile();
        } elseif ($key === 'defaultMediaType' || $key === 'default_media_type') {
            return $this->getDefaultMediaType();
        } elseif ($key === 'defaultPaperSize' || $key === 'default_paper_size') {
            return $this->getDefaultPaperSize();
        } elseif ($key === 'defaultPaperOrientation' || $key === 'default_paper_orientation') {
            return $this->getDefaultPaperOrientation();
        } elseif ($key === 'defaultFont' || $key === 'default_font') {
            return $this->getDefaultFont();
        } elseif ($key === 'dpi') {
            return $this->getDpi();
        } elseif ($key === 'fontHeightRatio' || $key === 'font_height_ratio') {
            return $this->getFontHeightRatio();
        } elseif ($key === 'isPhpEnabled' || $key === 'is_php_enabled' || $key === 'enable_php') {
            return $this->getIsPhpEnabled();
        } elseif ($key === 'isRemoteEnabled' || $key === 'is_remote_enabled' || $key === 'enable_remote') {
            return $this->getIsRemoteEnabled();
        } elseif ($key === 'isJavascriptEnabled' || $key === 'is_javascript_enabled' || $key === 'enable_javascript') {
            return $this->getIsJavascriptEnabled();
        } elseif ($key === 'isHtml5ParserEnabled' || $key === 'is_html5_parser_enabled' || $key === 'enable_html5_parser') {
            return $this->getIsHtml5ParserEnabled();
        } elseif ($key === 'isFontSubsettingEnabled' || $key === 'is_font_subsetting_enabled' || $key === 'enable_font_subsetting') {
            return $this->getIsFontSubsettingEnabled();
        } elseif ($key === 'debugPng' || $key === 'debug_png') {
            return $this->getDebugPng();
        } elseif ($key === 'debugKeepTemp' || $key === 'debug_keep_temp') {
            return $this->getDebugKeepTemp();
        } elseif ($key === 'debugCss' || $key === 'debug_css') {
            return $this->getDebugCss();
        } elseif ($key === 'debugLayout' || $key === 'debug_layout') {
            return $this->getDebugLayout();
        } elseif ($key === 'debugLayoutLines' || $key === 'debug_layout_lines') {
            return $this->getDebugLayoutLines();
        } elseif ($key === 'debugLayoutBlocks' || $key === 'debug_layout_blocks') {
            return $this->getDebugLayoutBlocks();
        } elseif ($key === 'debugLayoutInline' || $key === 'debug_layout_inline') {
            return $this->getDebugLayoutInline();
        } elseif ($key === 'debugLayoutPaddingBox' || $key === 'debug_layout_padding_box') {
            return $this->getDebugLayoutPaddingBox();
        } elseif ($key === 'pdfBackend' || $key === 'pdf_backend') {
            return $this->getPdfBackend();
        } elseif ($key === 'pdflibLicense' || $key === 'pdflib_license') {
            return $this->getPdflibLicense();
        } elseif ($key === 'httpContext' || $key === 'http_context') {
            return $this->getHttpContext();
        }
        return null;
    }

    /**
     * @param string $pdfBackend
     * @return $this
     */
    public function setPdfBackend($pdfBackend)
    {
        $this->pdfBackend = $pdfBackend;
        return $this;
    }

    /**
     * @return string
     */
    public function getPdfBackend()
    {
        return $this->pdfBackend;
    }

    /**
     * @param string $pdflibLicense
     * @return $this
     */
    public function setPdflibLicense($pdflibLicense)
    {
        $this->pdflibLicense = $pdflibLicense;
        return $this;
    }

    /**
     * @return string
     */
    public function getPdflibLicense()
    {
        return $this->pdflibLicense;
    }

    /**
     * @param array|string $chroot
     * @return $this
     */
    public function setChroot($chroot, $delimiter = ',')
    {
        if (is_string($chroot)) {
            $this->chroot = explode($delimiter, $chroot);
        } elseif (is_array($chroot)) {
            $this->chroot = $chroot;
        }
        return $this;
    }

    /**
     * @return array
     */
    public function getAllowedProtocols()
    {
        return $this->allowedProtocols;
    }

    /**
     * @param array $allowedProtocols The protocols to allow, as an array
     * formatted as ["protocol://" => ["rules" => [callable]], ...]
     * or ["protocol://", ...]
     *
     * @return $this
     */
    public function setAllowedProtocols(array $allowedProtocols)
    {
        $protocols = [];
        foreach ($allowedProtocols as $protocol => $config) {
            if (is_string($protocol)) {
                $protocols[$protocol] = [];
                if (is_array($config)) {
                    $protocols[$protocol] = $config;
                }
            } elseif (is_string($config)) {
                $protocols[$config] = [];
            }
        }
        $this->allowedProtocols = [];
        foreach ($protocols as $protocol => $config) {
            $this->addAllowedProtocol($protocol, ...($config["rules"] ?? []));
        }
        return $this;
    }

    /**
     * Adds a new protocol to the allowed protocols collection
     *
     * @param string $protocol The scheme to add (e.g. "http://")
     * @param callable $rule A callable that validates the protocol
     * @return $this
     */
    public function addAllowedProtocol(string $protocol, callable ...$rules)
    {
        $protocol = strtolower($protocol);
        if (empty($rules)) {
            $rules = [];
            switch ($protocol) {
                case "file://":
                    $rules[] = [$this, "validateLocalUri"];
                    break;
                case "http://":
                case "https://":
                    $rules[] = [$this, "validateRemoteUri"];
                    break;
                case "phar://":
                    $rules[] = [$this, "validatePharUri"];
                    break;
            }
        }
        $this->allowedProtocols[$protocol] = ["rules" => $rules];
        return $this;
    }

    /**
     * @return array
     */
    public function getArtifactPathValidation()
    {
        return $this->artifactPathValidation;
    }

    /**
     * @param callable $validator
     * @return $this
     */
    public function setArtifactPathValidation($validator)
    {
        $this->artifactPathValidation = $validator;
        return $this;
    }

    /**
     * @return array
     */
    public function getChroot()
    {
        $chroot = [];
        if (is_array($this->chroot)) {
            $chroot = $this->chroot;
        }
        return $chroot;
    }

    /**
     * @param boolean $debugCss
     * @return $this
     */
    public function setDebugCss($debugCss)
    {
        $this->debugCss = $debugCss;
        return $this;
    }

    /**
     * @return boolean
     */
    public function getDebugCss()
    {
        return $this->debugCss;
    }

    /**
     * @param boolean $debugKeepTemp
     * @return $this
     */
    public function setDebugKeepTemp($debugKeepTemp)
    {
        $this->debugKeepTemp = $debugKeepTemp;
        return $this;
    }

    /**
     * @return boolean
     */
    public function getDebugKeepTemp()
    {
        return $this->debugKeepTemp;
    }

    /**
     * @param boolean $debugLayout
     * @return $this
     */
    public function setDebugLayout($debugLayout)
    {
        $this->debugLayout = $debugLayout;
        return $this;
    }

    /**
     * @return boolean
     */
    public function getDebugLayout()
    {
        return $this->debugLayout;
    }

    /**
     * @param boolean $debugLayoutBlocks
     * @return $this
     */
    public function setDebugLayoutBlocks($debugLayoutBlocks)
    {
        $this->debugLayoutBlocks = $debugLayoutBlocks;
        return $this;
    }

    /**
     * @return boolean
     */
    public function getDebugLayoutBlocks()
    {
        return $this->debugLayoutBlocks;
    }

    /**
     * @param boolean $debugLayoutInline
     * @return $this
     */
    public function setDebugLayoutInline($debugLayoutInline)
    {
        $this->debugLayoutInline = $debugLayoutInline;
        return $this;
    }

    /**
     * @return boolean
     */
    public function getDebugLayoutInline()
    {
        return $this->debugLayoutInline;
    }

    /**
     * @param boolean $debugLayoutLines
     * @return $this
     */
    public function setDebugLayoutLines($debugLayoutLines)
    {
        $this->debugLayoutLines = $debugLayoutLines;
        return $this;
    }

    /**
     * @return boolean
     */
    public function getDebugLayoutLines()
    {
        return $this->debugLayoutLines;
    }

    /**
     * @param boolean $debugLayoutPaddingBox
     * @return $this
     */
    public function setDebugLayoutPaddingBox($debugLayoutPaddingBox)
    {
        $this->debugLayoutPaddingBox = $debugLayoutPaddingBox;
        return $this;
    }

    /**
     * @return boolean
     */
    public function getDebugLayoutPaddingBox()
    {
        return $this->debugLayoutPaddingBox;
    }

    /**
     * @param boolean $debugPng
     * @return $this
     */
    public function setDebugPng($debugPng)
    {
        $this->debugPng = $debugPng;
        return $this;
    }

    /**
     * @return boolean
     */
    public function getDebugPng()
    {
        return $this->debugPng;
    }

    /**
     * @param string $defaultFont
     * @return $this
     */
    public function setDefaultFont($defaultFont)
    {
        if (!($defaultFont === null || trim($defaultFont) === "")) {
            $this->defaultFont = $defaultFont;
        } else {
            $this->defaultFont = "serif";
        }
        return $this;
    }

    /**
     * @return string
     */
    public function getDefaultFont()
    {
        return $this->defaultFont;
    }

    /**
     * @param string $defaultMediaType
     * @return $this
     */
    public function setDefaultMediaType($defaultMediaType)
    {
        $this->defaultMediaType = $defaultMediaType;
        return $this;
    }

    /**
     * @return string
     */
    public function getDefaultMediaType()
    {
        return $this->defaultMediaType;
    }

    /**
     * @param string|float[] $defaultPaperSize
     * @return $this
     */
    public function setDefaultPaperSize($defaultPaperSize): self
    {
        $this->defaultPaperSize = $defaultPaperSize;
        return $this;
    }

    /**
     * @param string $defaultPaperOrientation
     * @return $this
     */
    public function setDefaultPaperOrientation(string $defaultPaperOrientation): self
    {
        $this->defaultPaperOrientation = $defaultPaperOrientation;
        return $this;
    }

    /**
     * @return string|float[]
     */
    public function getDefaultPaperSize()
    {
        return $this->defaultPaperSize;
    }

    /**
     * @return string
     */
    public function getDefaultPaperOrientation(): string
    {
        return $this->defaultPaperOrientation;
    }

    /**
     * @param int $dpi
     * @return $this
     */
    public function setDpi($dpi)
    {
        $this->dpi = $dpi;
        return $this;
    }

    /**
     * @return int
     */
    public function getDpi()
    {
        return $this->dpi;
    }

    /**
     * @param string $fontCache
     * @return $this
     */
    public function setFontCache($fontCache)
    {
        if (!is_callable($this->artifactPathValidation) || ($this->artifactPathValidation)($fontCache, "fontCache") === true) {
            $this->fontCache = $fontCache;
        }
        return $this;
    }

    /**
     * @return string
     */
    public function getFontCache()
    {
        return $this->fontCache;
    }

    /**
     * @param string $fontDir
     * @return $this
     */
    public function setFontDir($fontDir)
    {
        if (!is_callable($this->artifactPathValidation) || ($this->artifactPathValidation)($fontDir, "fontDir") === true) {
            $this->fontDir = $fontDir;
        }
        return $this;
    }

    /**
     * @return string
     */
    public function getFontDir()
    {
        return $this->fontDir;
    }

    /**
     * @param float $fontHeightRatio
     * @return $this
     */
    public function setFontHeightRatio($fontHeightRatio)
    {
        $this->fontHeightRatio = $fontHeightRatio;
        return $this;
    }

    /**
     * @return float
     */
    public function getFontHeightRatio()
    {
        return $this->fontHeightRatio;
    }

    /**
     * @param boolean $isFontSubsettingEnabled
     * @return $this
     */
    public function setIsFontSubsettingEnabled($isFontSubsettingEnabled)
    {
        $this->isFontSubsettingEnabled = $isFontSubsettingEnabled;
        return $this;
    }

    /**
     * @return boolean
     */
    public function getIsFontSubsettingEnabled()
    {
        return $this->isFontSubsettingEnabled;
    }

    /**
     * @return boolean
     */
    public function isFontSubsettingEnabled()
    {
        return $this->getIsFontSubsettingEnabled();
    }

    /**
     * @deprecated
     * @param boolean $isHtml5ParserEnabled
     * @return $this
     */
    public function setIsHtml5ParserEnabled($isHtml5ParserEnabled)
    {
        $this->isHtml5ParserEnabled = $isHtml5ParserEnabled;
        return $this;
    }

    /**
     * @deprecated
     * @return boolean
     */
    public function getIsHtml5ParserEnabled()
    {
        return $this->isHtml5ParserEnabled;
    }

    /**
     * @deprecated
     * @return boolean
     */
    public function isHtml5ParserEnabled()
    {
        return $this->getIsHtml5ParserEnabled();
    }

    /**
     * @param boolean $isJavascriptEnabled
     * @return $this
     */
    public function setIsJavascriptEnabled($isJavascriptEnabled)
    {
        $this->isJavascriptEnabled = $isJavascriptEnabled;
        return $this;
    }

    /**
     * @return boolean
     */
    public function getIsJavascriptEnabled()
    {
        return $this->isJavascriptEnabled;
    }

    /**
     * @return boolean
     */
    public function isJavascriptEnabled()
    {
        return $this->getIsJavascriptEnabled();
    }

    /**
     * @param boolean $isPhpEnabled
     * @return $this
     */
    public function setIsPhpEnabled($isPhpEnabled)
    {
        $this->isPhpEnabled = $isPhpEnabled;
        return $this;
    }

    /**
     * @return boolean
     */
    public function getIsPhpEnabled()
    {
        return $this->isPhpEnabled;
    }

    /**
     * @return boolean
     */
    public function isPhpEnabled()
    {
        return $this->getIsPhpEnabled();
    }

    /**
     * @param boolean $isRemoteEnabled
     * @return $this
     */
    public function setIsRemoteEnabled($isRemoteEnabled)
    {
        $this->isRemoteEnabled = $isRemoteEnabled;
        return $this;
    }

    /**
     * @return boolean
     */
    public function getIsRemoteEnabled()
    {
        return $this->isRemoteEnabled;
    }

    /**
     * @return boolean
     */
    public function isRemoteEnabled()
    {
        return $this->getIsRemoteEnabled();
    }

    /**
     * @param string $logOutputFile
     * @return $this
     */
    public function setLogOutputFile($logOutputFile)
    {
        if (!is_callable($this->artifactPathValidation) || ($this->artifactPathValidation)($logOutputFile, "logOutputFile") === true) {
            $this->logOutputFile = $logOutputFile;
        }
        return $this;
    }

    /**
     * @return string
     */
    public function getLogOutputFile()
    {
        return $this->logOutputFile;
    }

    /**
     * @param string $tempDir
     * @return $this
     */
    public function setTempDir($tempDir)
    {
        if (!is_callable($this->artifactPathValidation) || ($this->artifactPathValidation)($tempDir, "tempDir") === true) {
            $this->tempDir = $tempDir;
        }
        return $this;
    }

    /**
     * @return string
     */
    public function getTempDir()
    {
        return $this->tempDir;
    }

    /**
     * @param string $rootDir
     * @return $this
     */
    public function setRootDir($rootDir)
    {
        if (!is_callable($this->artifactPathValidation) || ($this->artifactPathValidation)($rootDir, "rootDir") === true) {
            $this->rootDir = $rootDir;
        }
        return $this;
    }

    /**
     * @return string
     */
    public function getRootDir()
    {
        return $this->rootDir;
    }

    /**
     * Sets the HTTP context
     *
     * @param resource|array $httpContext
     * @return $this
     */
    public function setHttpContext($httpContext)
    {
        $this->httpContext = is_array($httpContext) ? stream_context_create($httpContext) : $httpContext;
        return $this;
    }

    /**
     * Returns the HTTP context
     *
     * @return resource
     */
    public function getHttpContext()
    {
        return $this->httpContext;
    }


    public function validateArtifactPath(?string $path, string $option)
    {
        if ($path === null) {
            return true;
        }
        $parsed_uri = parse_url($path);
        if ($parsed_uri === false || (array_key_exists("scheme", $parsed_uri) && strtolower($parsed_uri["scheme"]) === "phar")) {
            return false;
        }
        return true;
    }

    public function validateLocalUri(string $uri)
    {
        if ($uri === null || strlen($uri) === 0) {
            return [false, "The URI must not be empty."];
        }

        $realfile = realpath(str_replace("file://", "", $uri));

        $dirs = $this->chroot;
        $dirs[] = $this->rootDir;
        $chrootValid = false;
        foreach ($dirs as $chrootPath) {
            $chrootPath = realpath($chrootPath);
            if ($chrootPath !== false && strpos($realfile, $chrootPath) === 0) {
                $chrootValid = true;
                break;
            }
        }
        if ($chrootValid !== true) {
            return [false, "Permission denied. The file could not be found under the paths specified by Options::chroot."];
        }

        if (!$realfile) {
            return [false, "File not found."];
        }

        return [true, null];
    }

    public function validatePharUri(string $uri)
    {
        if ($uri === null || strlen($uri) === 0) {
            return [false, "The URI must not be empty."];
        }

        $file = substr(substr($uri, 0, strpos($uri, ".phar") + 5), 7);
        return $this->validateLocalUri($file);
    }

    public function validateRemoteUri(string $uri)
    {
        if ($uri === null || strlen($uri) === 0) {
            return [false, "The URI must not be empty."];
        }

        if (!$this->isRemoteEnabled) {
            return [false, "Remote file requested, but remote file download is disabled."];
        }

        return [true, null];
    }
}
<?php
/**
 * @package dompdf
 * @link    https://github.com/dompdf/dompdf
 * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
 */
namespace Dompdf;

/**
 * Executes inline PHP code during the rendering process
 *
 * @package dompdf
 */
class PhpEvaluator
{

    /**
     * @var Canvas
     */
    protected $_canvas;

    /**
     * PhpEvaluator constructor.
     * @param Canvas $canvas
     */
    public function __construct(Canvas $canvas)
    {
        $this->_canvas = $canvas;
    }

    /**
     * @param $code
     * @param array $vars
     */
    public function evaluate($code, $vars = [])
    {
        if (!$this->_canvas->get_dompdf()->getOptions()->getIsPhpEnabled()) {
            return;
        }

        // Set up some variables for the inline code
        $pdf = $this->_canvas;
        $fontMetrics = $pdf->get_dompdf()->getFontMetrics();
        $PAGE_NUM = $pdf->get_page_number();
        $PAGE_COUNT = $pdf->get_page_count();

        // Override those variables if passed in
        foreach ($vars as $k => $v) {
            $$k = $v;
        }

        eval($code);
    }

    /**
     * @param Frame $frame
     */
    public function render(Frame $frame)
    {
        $this->evaluate($frame->get_node()->nodeValue);
    }
}
<?php
/**
 * @package dompdf
 * @link    https://github.com/dompdf/dompdf
 * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
 */
namespace Dompdf\Positioner;

use Dompdf\FrameDecorator\AbstractFrameDecorator;
use Dompdf\FrameReflower\Block;

/**
 * Positions absolutely positioned frames
 */
class Absolute extends AbstractPositioner
{

    /**
     * @param AbstractFrameDecorator $frame
     */
    function position(AbstractFrameDecorator $frame): void
    {
        if ($frame->get_reflower() instanceof Block) {
            $style = $frame->get_style();
            [$cbx, $cby, $cbw, $cbh] = $frame->get_containing_block();

            // If the `top` value is `auto`, the frame will be repositioned
            // after its height has been resolved
            $left = (float) $style->length_in_pt($style->left, $cbw);
            $top = (float) $style->length_in_pt($style->top, $cbh);

            $frame->set_position($cbx + $left, $cby + $top);
        } else {
            // Legacy positioning logic for image and table frames
            // TODO: Resolve dimensions, margins, and offsets similar to the
            // block case in the reflowers and use the simplified logic above
            $style = $frame->get_style();
            $block_parent = $frame->find_block_parent();
            $current_line = $block_parent->get_current_line_box();
    
            list($x, $y, $w, $h) = $frame->get_containing_block();
            $inflow_x = $block_parent->get_content_box()["x"] + $current_line->left + $current_line->w;
            $inflow_y = $current_line->y;

            $top = $style->length_in_pt($style->top, $h);
            $right = $style->length_in_pt($style->right, $w);
            $bottom = $style->length_in_pt($style->bottom, $h);
            $left = $style->length_in_pt($style->left, $w);

            list($width, $height) = [$frame->get_margin_width(), $frame->get_margin_height()];

            $orig_width = $style->get_specified("width");
            $orig_height = $style->get_specified("height");

            /****************************
             *
             * Width auto:
             * ____________| left=auto | left=fixed |
             * right=auto  |     A     |     B      |
             * right=fixed |     C     |     D      |
             *
             * Width fixed:
             * ____________| left=auto | left=fixed |
             * right=auto  |     E     |     F      |
             * right=fixed |     G     |     H      |
             *****************************/

            if ($left === "auto") {
                if ($right === "auto") {
                    // A or E - Keep the frame at the same position
                    $x = $inflow_x;
                } else {
                    if ($orig_width === "auto") {
                        // C
                        $x += $w - $width - $right;
                    } else {
                        // G
                        $x += $w - $width - $right;
                    }
                }
            } else {
                if ($right === "auto") {
                    // B or F
                    $x += (float)$left;
                } else {
                    if ($orig_width === "auto") {
                        // D - TODO change width
                        $x += (float)$left;
                    } else {
                        // H - Everything is fixed: left + width win
                        $x += (float)$left;
                    }
                }
            }

            // The same vertically
            if ($top === "auto") {
                if ($bottom === "auto") {
                    // A or E - Keep the frame at the same position
                    $y = $inflow_y;
                } else {
                    if ($orig_height === "auto") {
                        // C
                        $y += (float)$h - $height - (float)$bottom;
                    } else {
                        // G
                        $y += (float)$h - $height - (float)$bottom;
                    }
                }
            } else {
                if ($bottom === "auto") {
                    // B or F
                    $y += (float)$top;
                } else {
                    if ($orig_height === "auto") {
                        // D - TODO change height
                        $y += (float)$top;
                    } else {
                        // H - Everything is fixed: top + height win
                        $y += (float)$top;
                    }
                }
            }

            $frame->set_position($x, $y);
        }
    }
}
<?php
/**
 * @package dompdf
 * @link    https://github.com/dompdf/dompdf
 * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
 */
namespace Dompdf\Positioner;

use Dompdf\FrameDecorator\AbstractFrameDecorator;

/**
 * Base AbstractPositioner class
 *
 * Defines positioner interface
 *
 * @package dompdf
 */
abstract class AbstractPositioner
{

    /**
     * @param AbstractFrameDecorator $frame
     */
    abstract function position(AbstractFrameDecorator $frame): void;

    /**
     * @param AbstractFrameDecorator $frame
     * @param float                  $offset_x
     * @param float                  $offset_y
     * @param bool                   $ignore_self
     */
    function move(
        AbstractFrameDecorator $frame,
        float $offset_x,
        float $offset_y,
        bool $ignore_self = false
    ): void {
        [$x, $y] = $frame->get_position();

        if (!$ignore_self) {
            $frame->set_position($x + $offset_x, $y + $offset_y);
        }

        foreach ($frame->get_children() as $child) {
            $child->move($offset_x, $offset_y);
        }
    }
}
<?php
/**
 * @package dompdf
 * @link    https://github.com/dompdf/dompdf
 * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
 */
namespace Dompdf\Positioner;

use Dompdf\FrameDecorator\AbstractFrameDecorator;

/**
 * Positions block frames
 *
 * @package dompdf
 */
class Block extends AbstractPositioner
{

    function position(AbstractFrameDecorator $frame): void
    {
        $style = $frame->get_style();
        $cb = $frame->get_containing_block();
        $p = $frame->find_block_parent();

        if ($p) {
            $float = $style->float;

            if (!$float || $float === "none") {
                $p->add_line(true);
            }
            $y = $p->get_current_line_box()->y;
        } else {
            $y = $cb["y"];
        }

        $x = $cb["x"];

        $frame->set_position($x, $y);
    }
}
<?php
/**
 * @package dompdf
 * @link    https://github.com/dompdf/dompdf
 * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
 */
namespace Dompdf\Positioner;

use Dompdf\FrameDecorator\AbstractFrameDecorator;
use Dompdf\FrameReflower\Block;

/**
 * Positions fixely positioned frames
 */
class Fixed extends Absolute
{

    /**
     * @param AbstractFrameDecorator $frame
     */
    function position(AbstractFrameDecorator $frame): void
    {
        if ($frame->get_reflower() instanceof Block) {
            parent::position($frame);
        } else {
            // Legacy positioning logic for image and table frames
            // TODO: Resolve dimensions, margins, and offsets similar to the
            // block case in the reflowers and use the simplified logic above
            $style = $frame->get_style();
            $root = $frame->get_root();
            $initialcb = $root->get_containing_block();
            $initialcb_style = $root->get_style();

            $p = $frame->find_block_parent();
            if ($p) {
                $p->add_line();
            }
            // Compute the margins of the @page style
            $margin_top = (float)$initialcb_style->length_in_pt($initialcb_style->margin_top, $initialcb["h"]);
            $margin_right = (float)$initialcb_style->length_in_pt($initialcb_style->margin_right, $initialcb["w"]);
            $margin_bottom = (float)$initialcb_style->length_in_pt($initialcb_style->margin_bottom, $initialcb["h"]);
            $margin_left = (float)$initialcb_style->length_in_pt($initialcb_style->margin_left, $initialcb["w"]);

            // The needed computed style of the element
            $height = (float)$style->length_in_pt($style->get_specified("height"), $initialcb["h"]);
            $width = (float)$style->length_in_pt($style->get_specified("width"), $initialcb["w"]);

            $top = $style->length_in_pt($style->get_specified("top"), $initialcb["h"]);
            $right = $style->length_in_pt($style->get_specified("right"), $initialcb["w"]);
            $bottom = $style->length_in_pt($style->get_specified("bottom"), $initialcb["h"]);
            $left = $style->length_in_pt($style->get_specified("left"), $initialcb["w"]);

            $y = $margin_top;
            if (isset($top)) {
                $y = (float)$top + $margin_top;
                if ($top === "auto") {
                    $y = $margin_top;
                    if (isset($bottom) && $bottom !== "auto") {
                        $y = $initialcb["h"] - $bottom - $margin_bottom;
                        if ($frame->is_auto_height()) {
                            $y -= $height;
                        } else {
                            $y -= $frame->get_margin_height();
                        }
                    }
                }
            }

            $x = $margin_left;
            if (isset($left)) {
                $x = (float)$left + $margin_left;
                if ($left === "auto") {
                    $x = $margin_left;
                    if (isset($right) && $right !== "auto") {
                        $x = $initialcb["w"] - $right - $margin_right;
                        if ($frame->is_auto_width()) {
                            $x -= $width;
                        } else {
                            $x -= $frame->get_margin_width();
                        }
                    }
                }
            }

            $frame->set_position($x, $y);

            foreach ($frame->get_children() as $child) {
                $child->set_position($x, $y);
            }
        }
    }
}
<?php
/**
 * @package dompdf
 * @link    https://github.com/dompdf/dompdf
 * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
 */
namespace Dompdf\Positioner;

use Dompdf\FrameDecorator\AbstractFrameDecorator;
use Dompdf\FrameDecorator\Inline as InlineFrameDecorator;
use Dompdf\Exception;
use Dompdf\Helpers;

/**
 * Positions inline frames
 *
 * @package dompdf
 */
class Inline extends AbstractPositioner
{

    /**
     * @param AbstractFrameDecorator $frame
     * @throws Exception
     */
    function position(AbstractFrameDecorator $frame): void
    {
        // Find our nearest block level parent and access its lines property
        $block = $frame->find_block_parent();

        if (!$block) {
            throw new Exception("No block-level parent found.  Not good.");
        }

        $cb = $frame->get_containing_block();
        $line = $block->get_current_line_box();

        if (!$frame->is_text_node() && !($frame instanceof InlineFrameDecorator)) {
            // Atomic inline boxes and replaced inline elements
            // (inline-block, inline-table, img etc.)
            $width = $frame->get_margin_width();
            $available_width = $cb["w"] - $line->left - $line->w - $line->right;

            if (Helpers::lengthGreater($width, $available_width)) {
                $block->add_line();
                $line = $block->get_current_line_box();
            }
        }

        $frame->set_position($cb["x"] + $line->w, $line->y);
    }
}
<?php
/**
 * @package dompdf
 * @link    https://github.com/dompdf/dompdf
 * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
 */
namespace Dompdf\Positioner;

use Dompdf\FrameDecorator\AbstractFrameDecorator;
use Dompdf\FrameDecorator\ListBullet as ListBulletFrameDecorator;

/**
 * Positions list bullets
 *
 * @package dompdf
 */
class ListBullet extends AbstractPositioner
{
    /**
     * @param ListBulletFrameDecorator $frame
     */
    function position(AbstractFrameDecorator $frame): void
    {
        // List markers are positioned to the left of the border edge of their
        // parent element (FIXME: right for RTL)
        $parent = $frame->get_parent();
        $style = $parent->get_style();
        $cbw = $parent->get_containing_block("w");
        $margin_left = (float) $style->length_in_pt($style->margin_left, $cbw);
        $border_edge = $parent->get_position("x") + $margin_left;

        // This includes the marker indentation
        $x = $border_edge - $frame->get_margin_width();

        // The marker is later vertically aligned with the corresponding line
        // box and its vertical position is fine-tuned in the renderer
        $p = $frame->find_block_parent();
        $y = $p->get_current_line_box()->y;

        $frame->set_position($x, $y);
    }
}
<?php
/**
 * @package dompdf
 * @link    https://github.com/dompdf/dompdf
 * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
 */
namespace Dompdf\Positioner;

use Dompdf\FrameDecorator\AbstractFrameDecorator;

/**
 * Dummy positioner
 *
 * @package dompdf
 */
class NullPositioner extends AbstractPositioner
{

    /**
     * @param AbstractFrameDecorator $frame
     */
    function position(AbstractFrameDecorator $frame): void
    {
        return;
    }
}
<?php
/**
 * @package dompdf
 * @link    https://github.com/dompdf/dompdf
 * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
 */
namespace Dompdf\Positioner;

use Dompdf\FrameDecorator\AbstractFrameDecorator;
use Dompdf\FrameDecorator\Table;

/**
 * Positions table cells
 *
 * @package dompdf
 */
class TableCell extends AbstractPositioner
{

    /**
     * @param AbstractFrameDecorator $frame
     */
    function position(AbstractFrameDecorator $frame): void
    {
        $table = Table::find_parent_table($frame);
        $cellmap = $table->get_cellmap();
        $frame->set_position($cellmap->get_frame_position($frame));
    }
}
<?php
/**
 * @package dompdf
 * @link    https://github.com/dompdf/dompdf
 * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
 */
namespace Dompdf\Positioner;

use Dompdf\FrameDecorator\AbstractFrameDecorator;

/**
 * Positions table rows
 *
 * @package dompdf
 */
class TableRow extends AbstractPositioner
{

    /**
     * @param AbstractFrameDecorator $frame
     */
    function position(AbstractFrameDecorator $frame): void
    {
        $cb = $frame->get_containing_block();
        $p = $frame->get_prev_sibling();

        if ($p) {
            $y = $p->get_position("y") + $p->get_margin_height();
        } else {
            $y = $cb["y"];
        }
        $frame->set_position($cb["x"], $y);
    }
}
<?php
/**
 * @package dompdf
 * @link    https://github.com/dompdf/dompdf
 * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
 */
namespace Dompdf;

use Dompdf\Renderer\AbstractRenderer;
use Dompdf\Renderer\Block;
use Dompdf\Renderer\Image;
use Dompdf\Renderer\ListBullet;
use Dompdf\Renderer\TableCell;
use Dompdf\Renderer\TableRowGroup;
use Dompdf\Renderer\Text;

/**
 * Concrete renderer
 *
 * Instantiates several specific renderers in order to render any given frame.
 *
 * @package dompdf
 */
class Renderer extends AbstractRenderer
{

    /**
     * Array of renderers for specific frame types
     *
     * @var AbstractRenderer[]
     */
    protected $_renderers;

    /**
     * Cache of the callbacks array
     *
     * @var array
     */
    private $_callbacks;

    /**
     * Advance the canvas to the next page
     */
    function new_page()
    {
        $this->_canvas->new_page();
    }

    /**
     * Render frames recursively
     *
     * @param Frame $frame the frame to render
     */
    public function render(Frame $frame)
    {
        global $_dompdf_debug;

        $this->_check_callbacks("begin_frame", $frame);

        if ($_dompdf_debug) {
            echo $frame;
            flush();
        }

        $style = $frame->get_style();

        if (in_array($style->visibility, ["hidden", "collapse"], true)) {
            return;
        }

        $display = $style->display;
        $transformList = $style->transform;
        $hasTransform = $transformList !== [];

        // Starts the CSS transformation
        if ($hasTransform) {
            $this->_canvas->save();
            list($x, $y) = $frame->get_padding_box();
            $origin = $style->transform_origin;

            foreach ($transformList as $transform) {
                list($function, $values) = $transform;
                if ($function === "matrix") {
                    $function = "transform";
                }

                $values = array_map("floatval", $values);
                $values[] = $x + (float)$style->length_in_pt($origin[0], (float)$style->length_in_pt($style->width));
                $values[] = $y + (float)$style->length_in_pt($origin[1], (float)$style->length_in_pt($style->height));

                call_user_func_array([$this->_canvas, $function], $values);
            }
        }

        switch ($display) {

            case "block":
            case "list-item":
            case "inline-block":
            case "table":
            case "inline-table":
                $this->_render_frame("block", $frame);
                break;

            case "inline":
                if ($frame->is_text_node()) {
                    $this->_render_frame("text", $frame);
                } else {
                    $this->_render_frame("inline", $frame);
                }
                break;

            case "table-cell":
                $this->_render_frame("table-cell", $frame);
                break;

            case "table-row-group":
            case "table-header-group":
            case "table-footer-group":
                $this->_render_frame("table-row-group", $frame);
                break;

            case "-dompdf-list-bullet":
                $this->_render_frame("list-bullet", $frame);
                break;

            case "-dompdf-image":
                $this->_render_frame("image", $frame);
                break;

            case "none":
                $node = $frame->get_node();

                if ($node->nodeName === "script") {
                    if ($node->getAttribute("type") === "text/php" ||
                        $node->getAttribute("language") === "php"
                    ) {
                        // Evaluate embedded php scripts
                        $this->_render_frame("php", $frame);
                    } elseif ($node->getAttribute("type") === "text/javascript" ||
                        $node->getAttribute("language") === "javascript"
                    ) {
                        // Insert JavaScript
                        $this->_render_frame("javascript", $frame);
                    }
                }

                // Don't render children, so skip to next iter
                return;

            default:
                break;

        }

        // Starts the overflow: hidden box
        if ($style->overflow === "hidden") {
            $padding_box = $frame->get_padding_box();
            [$x, $y, $w, $h] = $padding_box;
            $style = $frame->get_style();

            if ($style->has_border_radius()) {
                $border_box = $frame->get_border_box();
                [$tl, $tr, $br, $bl] = $style->resolve_border_radius($border_box, $padding_box);
                $this->_canvas->clipping_roundrectangle($x, $y, $w, $h, $tl, $tr, $br, $bl);
            } else {
                $this->_canvas->clipping_rectangle($x, $y, $w, $h);
            }
        }

        $stack = [];

        foreach ($frame->get_children() as $child) {
            // < 0 : negative z-index
            // = 0 : no z-index, no stacking context
            // = 1 : stacking context without z-index
            // > 1 : z-index
            $child_style = $child->get_style();
            $child_z_index = $child_style->z_index;
            $z_index = 0;

            if ($child_z_index !== "auto") {
                $z_index = $child_z_index + 1;
            } elseif ($child_style->float !== "none" || $child->is_positioned()) {
                $z_index = 1;
            }

            $stack[$z_index][] = $child;
        }

        ksort($stack);

        foreach ($stack as $by_index) {
            foreach ($by_index as $child) {
                $this->render($child);
            }
        }

        // Ends the overflow: hidden box
        if ($style->overflow === "hidden") {
            $this->_canvas->clipping_end();
        }

        if ($hasTransform) {
            $this->_canvas->restore();
        }

        // Check for end frame callback
        $this->_check_callbacks("end_frame", $frame);
    }

    /**
     * Check for callbacks that need to be performed when a given event
     * gets triggered on a frame
     *
     * @param string $event The type of event
     * @param Frame  $frame The frame that event is triggered on
     */
    protected function _check_callbacks(string $event, Frame $frame): void
    {
        if (!isset($this->_callbacks)) {
            $this->_callbacks = $this->_dompdf->getCallbacks();
        }

        if (isset($this->_callbacks[$event])) {
            $fs = $this->_callbacks[$event];
            $canvas = $this->_canvas;
            $fontMetrics = $this->_dompdf->getFontMetrics();

            foreach ($fs as $f) {
                $f($frame, $canvas, $fontMetrics);
            }
        }
    }

    /**
     * Render a single frame
     *
     * Creates Renderer objects on demand
     *
     * @param string $type type of renderer to use
     * @param Frame $frame the frame to render
     */
    protected function _render_frame($type, $frame)
    {

        if (!isset($this->_renderers[$type])) {

            switch ($type) {
                case "block":
                    $this->_renderers[$type] = new Block($this->_dompdf);
                    break;

                case "inline":
                    $this->_renderers[$type] = new Renderer\Inline($this->_dompdf);
                    break;

                case "text":
                    $this->_renderers[$type] = new Text($this->_dompdf);
                    break;

                case "image":
                    $this->_renderers[$type] = new Image($this->_dompdf);
                    break;

                case "table-cell":
                    $this->_renderers[$type] = new TableCell($this->_dompdf);
                    break;

                case "table-row-group":
                    $this->_renderers[$type] = new TableRowGroup($this->_dompdf);
                    break;

                case "list-bullet":
                    $this->_renderers[$type] = new ListBullet($this->_dompdf);
                    break;

                case "php":
                    $this->_renderers[$type] = new PhpEvaluator($this->_canvas);
                    break;

                case "javascript":
                    $this->_renderers[$type] = new JavascriptEmbedder($this->_dompdf);
                    break;

            }
        }

        $this->_renderers[$type]->render($frame);
    }
}
<?php
/**
 * @package dompdf
 * @link    https://github.com/dompdf/dompdf
 * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
 */
namespace Dompdf\Renderer;

use Dompdf\Adapter\CPDF;
use Dompdf\Css\Color;
use Dompdf\Css\Style;
use Dompdf\Dompdf;
use Dompdf\Helpers;
use Dompdf\Frame;
use Dompdf\Image\Cache;

/**
 * Base renderer class
 *
 * @package dompdf
 */
abstract class AbstractRenderer
{

    /**
     * Rendering backend
     *
     * @var \Dompdf\Canvas
     */
    protected $_canvas;

    /**
     * Current dompdf instance
     *
     * @var Dompdf
     */
    protected $_dompdf;

    /**
     * Class constructor
     *
     * @param Dompdf $dompdf The current dompdf instance
     */
    function __construct(Dompdf $dompdf)
    {
        $this->_dompdf = $dompdf;
        $this->_canvas = $dompdf->getCanvas();
    }

    /**
     * Render a frame.
     *
     * Specialized in child classes
     *
     * @param Frame $frame The frame to render
     */
    abstract function render(Frame $frame);

    /**
     * @param Frame   $frame
     * @param float[] $border_box
     */
    protected function _render_background(Frame $frame, array $border_box): void
    {
        $style = $frame->get_style();
        $color = $style->background_color;
        $image = $style->background_image;
        [$x, $y, $w, $h] = $border_box;

        if ($color === "transparent" && $image === "none") {
            return;
        }

        if ($style->has_border_radius()) {
            [$tl, $tr, $br, $bl] = $style->resolve_border_radius($border_box);
            $this->_canvas->clipping_roundrectangle($x, $y, $w, $h, $tl, $tr, $br, $bl);
        }

        if ($color !== "transparent") {
            $this->_canvas->filled_rectangle($x, $y, $w, $h, $color);
        }

        if ($image !== "none") {
            $this->_background_image($image, $x, $y, $w, $h, $style);
        }

        if ($style->has_border_radius()) {
            $this->_canvas->clipping_end();
        }
    }

    /**
     * @param Frame   $frame
     * @param float[] $border_box
     * @param string  $corner_style
     */
    protected function _render_border(Frame $frame, array $border_box, string $corner_style = "bevel"): void
    {
        $style = $frame->get_style();
        $bp = $style->get_border_properties();
        [$x, $y, $w, $h] = $border_box;
        [$tl, $tr, $br, $bl] = $style->resolve_border_radius($border_box);

        // Short-cut: If all the borders are "solid" with the same color and
        // style, and no radius, we'd better draw a rectangle
        if ($bp["top"]["style"] === "solid" &&
            $bp["top"] === $bp["right"] &&
            $bp["right"] === $bp["bottom"] &&
            $bp["bottom"] === $bp["left"] &&
            !$style->has_border_radius()
        ) {
            $props = $bp["top"];
            if ($props["color"] === "transparent" || $props["width"] <= 0) {
                return;
            }

            $width = (float)$style->length_in_pt($props["width"]);
            $this->_canvas->rectangle($x + $width / 2, $y + $width / 2, $w - $width, $h - $width, $props["color"], $width);
            return;
        }

        // Do it the long way
        $widths = [
            (float)$style->length_in_pt($bp["top"]["width"]),
            (float)$style->length_in_pt($bp["right"]["width"]),
            (float)$style->length_in_pt($bp["bottom"]["width"]),
            (float)$style->length_in_pt($bp["left"]["width"])
        ];

        foreach ($bp as $side => $props) {
            if ($props["style"] === "none" ||
                $props["style"] === "hidden" ||
                $props["color"] === "transparent" ||
                $props["width"] <= 0
            ) {
                continue;
            }

            [$x, $y, $w, $h] = $border_box;
            $method = "_border_" . $props["style"];

            switch ($side) {
                case "top":
                    $length = $w;
                    $r1 = $tl;
                    $r2 = $tr;
                    break;

                case "bottom":
                    $length = $w;
                    $y += $h;
                    $r1 = $bl;
                    $r2 = $br;
                    break;

                case "left":
                    $length = $h;
                    $r1 = $tl;
                    $r2 = $bl;
                    break;

                case "right":
                    $length = $h;
                    $x += $w;
                    $r1 = $tr;
                    $r2 = $br;
                    break;

                default:
                    break;
            }

            // draw rounded corners
            $this->$method($x, $y, $length, $props["color"], $widths, $side, $corner_style, $r1, $r2);
        }
    }

    /**
     * @param Frame   $frame
     * @param float[] $border_box
     * @param string  $corner_style
     */
    protected function _render_outline(Frame $frame, array $border_box, string $corner_style = "bevel"): void
    {
        $style = $frame->get_style();

        $width = $style->outline_width;
        $outline_style = $style->outline_style;
        $color = $style->outline_color;

        if ($outline_style === "none" || $color === "transparent" || $width <= 0) {
            return;
        }

        $offset = $style->outline_offset;

        [$x, $y, $w, $h] = $border_box;
        $d = $width + $offset;
        $outline_box = [$x - $d, $y - $d, $w + $d * 2, $h + $d * 2];
        [$tl, $tr, $br, $bl] = $style->resolve_border_radius($border_box, $outline_box);

        $x -= $offset;
        $y -= $offset;
        $w += $offset * 2;
        $h += $offset * 2;

        // For a simple outline, we can draw a rectangle
        if ($outline_style === "solid" && !$style->has_border_radius()) {
            $x -= $width / 2;
            $y -= $width / 2;
            $w += $width;
            $h += $width;

            $this->_canvas->rectangle($x, $y, $w, $h, $color, $width);
            return;
        }

        $x -= $width;
        $y -= $width;
        $w += $width * 2;
        $h += $width * 2;

        $method = "_border_" . $outline_style;
        $widths = array_fill(0, 4, $width);
        $sides = ["top", "right", "left", "bottom"];

        foreach ($sides as $side) {
            switch ($side) {
                case "top":
                    $length = $w;
                    $side_x = $x;
                    $side_y = $y;
                    $r1 = $tl;
                    $r2 = $tr;
                    break;

                case "bottom":
                    $length = $w;
                    $side_x = $x;
                    $side_y = $y + $h;
                    $r1 = $bl;
                    $r2 = $br;
                    break;

                case "left":
                    $length = $h;
                    $side_x = $x;
                    $side_y = $y;
                    $r1 = $tl;
                    $r2 = $bl;
                    break;

                case "right":
                    $length = $h;
                    $side_x = $x + $w;
                    $side_y = $y;
                    $r1 = $tr;
                    $r2 = $br;
                    break;

                default:
                    break;
            }

            $this->$method($side_x, $side_y, $length, $color, $widths, $side, $corner_style, $r1, $r2);
        }
    }

    /**
     * Render a background image over a rectangular area
     *
     * @param string $url    The background image to load
     * @param float  $x      The left edge of the rectangular area
     * @param float  $y      The top edge of the rectangular area
     * @param float  $width  The width of the rectangular area
     * @param float  $height The height of the rectangular area
     * @param Style  $style  The associated Style object
     *
     * @throws \Exception
     */
    protected function _background_image($url, $x, $y, $width, $height, $style)
    {
        if (!function_exists("imagecreatetruecolor")) {
            throw new \Exception("The PHP GD extension is required, but is not installed.");
        }

        $sheet = $style->get_stylesheet();

        // Skip degenerate cases
        if ($width == 0 || $height == 0) {
            return;
        }

        $box_width = $width;
        $box_height = $height;

        //debugpng
        if ($this->_dompdf->getOptions()->getDebugPng()) {
            print '[_background_image ' . $url . ']';
        }

        list($img, $type, /*$msg*/) = Cache::resolve_url(
            $url,
            $sheet->get_protocol(),
            $sheet->get_host(),
            $sheet->get_base_path(),
            $this->_dompdf->getOptions()
        );

        // Bail if the image is no good
        if (Cache::is_broken($img)) {
            return;
        }

        //Try to optimize away reading and composing of same background multiple times
        //Postponing read with imagecreatefrom   ...()
        //final composition parameters and name not known yet
        //Therefore read dimension directly from file, instead of creating gd object first.
        //$img_w = imagesx($src); $img_h = imagesy($src);

        list($img_w, $img_h) = Helpers::dompdf_getimagesize($img, $this->_dompdf->getHttpContext());
        if ($img_w == 0 || $img_h == 0) {
            return;
        }

        // save for later check if file needs to be resized.
        $org_img_w = $img_w;
        $org_img_h = $img_h;

        $repeat = $style->background_repeat;
        $dpi = $this->_dompdf->getOptions()->getDpi();

        //Increase background resolution and dependent box size according to image resolution to be placed in
        //Then image can be copied in without resize
        $bg_width = round((float)($width * $dpi) / 72);
        $bg_height = round((float)($height * $dpi) / 72);

        list($img_w, $img_h) = $this->_resize_background_image(
            $img_w,
            $img_h,
            $bg_width,
            $bg_height,
            $style->background_size,
            $dpi
        );
        //Need %bg_x, $bg_y as background pos, where img starts, converted to pixel

        list($bg_x, $bg_y) = $style->background_position;

        if (Helpers::is_percent($bg_x)) {
            // The point $bg_x % from the left edge of the image is placed
            // $bg_x % from the left edge of the background rectangle
            $p = ((float)$bg_x) / 100.0;
            $x1 = $p * $img_w;
            $x2 = $p * $bg_width;

            $bg_x = $x2 - $x1;
        } else {
            $bg_x = (float)($style->length_in_pt($bg_x) * $dpi) / 72;
        }

        $bg_x = round($bg_x + (float)$style->length_in_pt($style->border_left_width) * $dpi / 72);

        if (Helpers::is_percent($bg_y)) {
            // The point $bg_y % from the left edge of the image is placed
            // $bg_y % from the left edge of the background rectangle
            $p = ((float)$bg_y) / 100.0;
            $y1 = $p * $img_h;
            $y2 = $p * $bg_height;

            $bg_y = $y2 - $y1;
        } else {
            $bg_y = (float)($style->length_in_pt($bg_y) * $dpi) / 72;
        }

        $bg_y = round($bg_y + (float)$style->length_in_pt($style->border_top_width) * $dpi / 72);

        //clip background to the image area on partial repeat. Nothing to do if img off area
        //On repeat, normalize start position to the tile at immediate left/top or 0/0 of area
        //On no repeat with positive offset: move size/start to have offset==0
        //Handle x/y Dimensions separately

        if ($repeat !== "repeat" && $repeat !== "repeat-x") {
            //No repeat x
            if ($bg_x < 0) {
                $bg_width = $img_w + $bg_x;
            } else {
                $x += ($bg_x * 72) / $dpi;
                $bg_width = $bg_width - $bg_x;
                if ($bg_width > $img_w) {
                    $bg_width = $img_w;
                }
                $bg_x = 0;
            }

            if ($bg_width <= 0) {
                return;
            }

            $width = (float)($bg_width * 72) / $dpi;
        } else {
            //repeat x
            if ($bg_x < 0) {
                $bg_x = -((-$bg_x) % $img_w);
            } else {
                $bg_x = $bg_x % $img_w;
                if ($bg_x > 0) {
                    $bg_x -= $img_w;
                }
            }
        }

        if ($repeat !== "repeat" && $repeat !== "repeat-y") {
            //no repeat y
            if ($bg_y < 0) {
                $bg_height = $img_h + $bg_y;
            } else {
                $y += ($bg_y * 72) / $dpi;
                $bg_height = $bg_height - $bg_y;
                if ($bg_height > $img_h) {
                    $bg_height = $img_h;
                }
                $bg_y = 0;
            }
            if ($bg_height <= 0) {
                return;
            }
            $height = (float)($bg_height * 72) / $dpi;
        } else {
            //repeat y
            if ($bg_y < 0) {
                $bg_y = -((-$bg_y) % $img_h);
            } else {
                $bg_y = $bg_y % $img_h;
                if ($bg_y > 0) {
                    $bg_y -= $img_h;
                }
            }
        }

        //Optimization, if repeat has no effect
        if ($repeat === "repeat" && $bg_y <= 0 && $img_h + $bg_y >= $bg_height) {
            $repeat = "repeat-x";
        }

        if ($repeat === "repeat" && $bg_x <= 0 && $img_w + $bg_x >= $bg_width) {
            $repeat = "repeat-y";
        }

        if (($repeat === "repeat-x" && $bg_x <= 0 && $img_w + $bg_x >= $bg_width) ||
            ($repeat === "repeat-y" && $bg_y <= 0 && $img_h + $bg_y >= $bg_height)
        ) {
            $repeat = "no-repeat";
        }

        // Avoid rendering identical background-image variants multiple times
        // This is not dependent of background color of box! .'_'.(is_array($bg_color) ? $bg_color["hex"] : $bg_color)
        // Note: Here, bg_* are the start values, not end values after going through the tile loops!

        $key = implode("_", [$bg_width, $bg_height, $img_w, $img_h, $bg_x, $bg_y, $repeat]);
        // FIXME: This will fail when a file with that exact name exists in the
        // same directory, included in the document as regular image
        $cpdfKey = $img . "_" . $key;
        $tmpFile = Cache::getTempImage($img, $key);
        $cached = ($this->_canvas instanceof CPDF && $this->_canvas->get_cpdf()->image_iscached($cpdfKey))
            || ($tmpFile !== null && file_exists($tmpFile));

        if (!$cached) {
            // img: image url string
            // img_w, img_h: original image size in px
            // width, height: box size in pt
            // bg_width, bg_height: box size in px
            // x, y: left/top edge of box on page in pt
            // start_x, start_y: placement of image relative to pattern
            // $repeat: repeat mode
            // $bg: GD object of result image
            // $src: GD object of original image

            // Create a new image to fit over the background rectangle
            $bg = imagecreatetruecolor($bg_width, $bg_height);
            $cpdfFromGd = true;

            switch (strtolower($type)) {
                case "png":
                    $cpdfFromGd = false;
                    imagesavealpha($bg, true);
                    imagealphablending($bg, false);
                    $src = @imagecreatefrompng($img);
                    break;

                case "jpeg":
                    $src = @imagecreatefromjpeg($img);
                    break;

                case "webp":
                    $src = @imagecreatefromwebp($img);
                    break;

                case "gif":
                    $src = @imagecreatefromgif($img);
                    break;

                case "bmp":
                    $src = @Helpers::imagecreatefrombmp($img);
                    break;

                default:
                    return; // Unsupported image type
            }

            if ($src == null) {
                return;
            }

            if ($img_w != $org_img_w || $img_h != $org_img_h) {
                $newSrc = imagescale($src, $img_w, $img_h);
                imagedestroy($src);
                $src = $newSrc;
            }

            if ($src == null) {
                return;
            }

            //Background color if box is not relevant here
            //Non transparent image: box clipped to real size. Background non relevant.
            //Transparent image: The image controls the transparency and lets shine through whatever background.
            //However on transparent image preset the composed image with the transparency color,
            //to keep the transparency when copying over the non transparent parts of the tiles.
            $ti = imagecolortransparent($src);
            $palletsize = imagecolorstotal($src);

            if ($ti >= 0 && $ti < $palletsize) {
                $tc = imagecolorsforindex($src, $ti);
                $ti = imagecolorallocate($bg, $tc['red'], $tc['green'], $tc['blue']);
                imagefill($bg, 0, 0, $ti);
                imagecolortransparent($bg, $ti);
            }

            //This has only an effect for the non repeatable dimension.
            //compute start of src and dest coordinates of the single copy
            if ($bg_x < 0) {
                $dst_x = 0;
                $src_x = -$bg_x;
            } else {
                $src_x = 0;
                $dst_x = $bg_x;
            }

            if ($bg_y < 0) {
                $dst_y = 0;
                $src_y = -$bg_y;
            } else {
                $src_y = 0;
                $dst_y = $bg_y;
            }

            //For historical reasons exchange meanings of variables:
            //start_* will be the start values, while bg_* will be the temporary start values in the loops
            $start_x = $bg_x;
            $start_y = $bg_y;

            // Copy regions from the source image to the background
            if ($repeat === "no-repeat") {
                // Simply place the image on the background
                imagecopy($bg, $src, $dst_x, $dst_y, $src_x, $src_y, $img_w, $img_h);

            } elseif ($repeat === "repeat-x") {
                for ($bg_x = $start_x; $bg_x < $bg_width; $bg_x += $img_w) {
                    if ($bg_x < 0) {
                        $dst_x = 0;
                        $src_x = -$bg_x;
                        $w = $img_w + $bg_x;
                    } else {
                        $dst_x = $bg_x;
                        $src_x = 0;
                        $w = $img_w;
                    }
                    imagecopy($bg, $src, $dst_x, $dst_y, $src_x, $src_y, $w, $img_h);
                }
            } elseif ($repeat === "repeat-y") {

                for ($bg_y = $start_y; $bg_y < $bg_height; $bg_y += $img_h) {
                    if ($bg_y < 0) {
                        $dst_y = 0;
                        $src_y = -$bg_y;
                        $h = $img_h + $bg_y;
                    } else {
                        $dst_y = $bg_y;
                        $src_y = 0;
                        $h = $img_h;
                    }
                    imagecopy($bg, $src, $dst_x, $dst_y, $src_x, $src_y, $img_w, $h);
                }
            } elseif ($repeat === "repeat") {
                for ($bg_y = $start_y; $bg_y < $bg_height; $bg_y += $img_h) {
                    for ($bg_x = $start_x; $bg_x < $bg_width; $bg_x += $img_w) {
                        if ($bg_x < 0) {
                            $dst_x = 0;
                            $src_x = -$bg_x;
                            $w = $img_w + $bg_x;
                        } else {
                            $dst_x = $bg_x;
                            $src_x = 0;
                            $w = $img_w;
                        }

                        if ($bg_y < 0) {
                            $dst_y = 0;
                            $src_y = -$bg_y;
                            $h = $img_h + $bg_y;
                        } else {
                            $dst_y = $bg_y;
                            $src_y = 0;
                            $h = $img_h;
                        }
                        imagecopy($bg, $src, $dst_x, $dst_y, $src_x, $src_y, $w, $h);
                    }
                }
            } else {
                print 'Unknown repeat!';
            }

            imagedestroy($src);

            if ($cpdfFromGd && $this->_canvas instanceof CPDF) {
                // Skip writing temp file as the GD object is added directly
            } else {
                $tmpDir = $this->_dompdf->getOptions()->getTempDir();
                $tmpName = @tempnam($tmpDir, "bg_dompdf_img_");
                @unlink($tmpName);
                $tmpFile = "$tmpName.png";

                imagepng($bg, $tmpFile);
                imagedestroy($bg);

                Cache::addTempImage($img, $tmpFile, $key);
            }
        } else {
            $bg = null;
            $cpdfFromGd = $tmpFile === null;
        }

        if ($this->_dompdf->getOptions()->getDebugPng()) {
            print '[_background_image ' . $tmpFile . ']';
        }

        $this->_canvas->clipping_rectangle($x, $y, $box_width, $box_height);

        // When using cpdf and optimization to direct png creation from gd object is available,
        // don't create temp file, but place gd object directly into the pdf
        if ($cpdfFromGd && $this->_canvas instanceof CPDF) {
            // Note: CPDF_Adapter image converts y position
            $this->_canvas->get_cpdf()->addImagePng($bg, $cpdfKey, $x, $this->_canvas->get_height() - $y - $height, $width, $height);

            if (isset($bg)) {
                imagedestroy($bg);
            }
        } else {
            $this->_canvas->image($tmpFile, $x, $y, $width, $height);
        }

        $this->_canvas->clipping_end();
    }

    // Border rendering functions

    /**
     * @param float   $x
     * @param float   $y
     * @param float   $length
     * @param array   $color
     * @param float[] $widths
     * @param string  $side
     * @param string  $corner_style
     * @param float   $r1
     * @param float   $r2
     */
    protected function _border_dotted($x, $y, $length, $color, $widths, $side, $corner_style = "bevel", $r1 = 0, $r2 = 0)
    {
        $this->_border_line($x, $y, $length, $color, $widths, $side, $corner_style, "dotted", $r1, $r2);
    }

    /**
     * @param float   $x
     * @param float   $y
     * @param float   $length
     * @param array   $color
     * @param float[] $widths
     * @param string  $side
     * @param string  $corner_style
     * @param float   $r1
     * @param float   $r2
     */
    protected function _border_dashed($x, $y, $length, $color, $widths, $side, $corner_style = "bevel", $r1 = 0, $r2 = 0)
    {
        $this->_border_line($x, $y, $length, $color, $widths, $side, $corner_style, "dashed", $r1, $r2);
    }

    /**
     * @param float   $x
     * @param float   $y
     * @param float   $length
     * @param array   $color
     * @param float[] $widths
     * @param string  $side
     * @param string  $corner_style
     * @param float   $r1
     * @param float   $r2
     */
    protected function _border_solid($x, $y, $length, $color, $widths, $side, $corner_style = "bevel", $r1 = 0, $r2 = 0)
    {
        $this->_border_line($x, $y, $length, $color, $widths, $side, $corner_style, "solid", $r1, $r2);
    }

    /**
     * @param string $side
     * @param float  $ratio
     * @param float  $top
     * @param float  $right
     * @param float  $bottom
     * @param float  $left
     * @param float  $x
     * @param float  $y
     * @param float  $length
     * @param float  $r1
     * @param float  $r2
     */
    protected function _apply_ratio($side, $ratio, $top, $right, $bottom, $left, &$x, &$y, &$length, &$r1, &$r2)
    {
        switch ($side) {
            case "top":
                $r1 -= $left * $ratio;
                $r2 -= $right * $ratio;
                $x += $left * $ratio;
                $y += $top * $ratio;
                $length -= $left * $ratio + $right * $ratio;
                break;

            case "bottom":
                $r1 -= $right * $ratio;
                $r2 -= $left * $ratio;
                $x += $left * $ratio;
                $y -= $bottom * $ratio;
                $length -= $left * $ratio + $right * $ratio;
                break;

            case "left":
                $r1 -= $top * $ratio;
                $r2 -= $bottom * $ratio;
                $x += $left * $ratio;
                $y += $top * $ratio;
                $length -= $top * $ratio + $bottom * $ratio;
                break;

            case "right":
                $r1 -= $bottom * $ratio;
                $r2 -= $top * $ratio;
                $x -= $right * $ratio;
                $y += $top * $ratio;
                $length -= $top * $ratio + $bottom * $ratio;
                break;

            default:
                return;
        }
    }

    /**
     * @param float   $x
     * @param float   $y
     * @param float   $length
     * @param array   $color
     * @param float[] $widths
     * @param string  $side
     * @param string  $corner_style
     * @param float   $r1
     * @param float   $r2
     */
    protected function _border_double($x, $y, $length, $color, $widths, $side, $corner_style = "bevel", $r1 = 0, $r2 = 0)
    {
        list($top, $right, $bottom, $left) = $widths;

        $third_widths = [$top / 3, $right / 3, $bottom / 3, $left / 3];

        // draw the outer border
        $this->_border_solid($x, $y, $length, $color, $third_widths, $side, $corner_style, $r1, $r2);

        $this->_apply_ratio($side, 2 / 3, $top, $right, $bottom, $left, $x, $y, $length, $r1, $r2);

        $this->_border_solid($x, $y, $length, $color, $third_widths, $side, $corner_style, $r1, $r2);
    }

    /**
     * @param float   $x
     * @param float   $y
     * @param float   $length
     * @param array   $color
     * @param float[] $widths
     * @param string  $side
     * @param string  $corner_style
     * @param float   $r1
     * @param float   $r2
     */
    protected function _border_groove($x, $y, $length, $color, $widths, $side, $corner_style = "bevel", $r1 = 0, $r2 = 0)
    {
        list($top, $right, $bottom, $left) = $widths;

        $half_widths = [$top / 2, $right / 2, $bottom / 2, $left / 2];

        $this->_border_inset($x, $y, $length, $color, $half_widths, $side, $corner_style, $r1, $r2);

        $this->_apply_ratio($side, 0.5, $top, $right, $bottom, $left, $x, $y, $length, $r1, $r2);

        $this->_border_outset($x, $y, $length, $color, $half_widths, $side, $corner_style, $r1, $r2);
    }

    /**
     * @param float   $x
     * @param float   $y
     * @param float   $length
     * @param array   $color
     * @param float[] $widths
     * @param string  $side
     * @param string  $corner_style
     * @param float   $r1
     * @param float   $r2
     */
    protected function _border_ridge($x, $y, $length, $color, $widths, $side, $corner_style = "bevel", $r1 = 0, $r2 = 0)
    {
        list($top, $right, $bottom, $left) = $widths;

        $half_widths = [$top / 2, $right / 2, $bottom / 2, $left / 2];

        $this->_border_outset($x, $y, $length, $color, $half_widths, $side, $corner_style, $r1, $r2);

        $this->_apply_ratio($side, 0.5, $top, $right, $bottom, $left, $x, $y, $length, $r1, $r2);

        $this->_border_inset($x, $y, $length, $color, $half_widths, $side, $corner_style, $r1, $r2);
    }

    /**
     * @param $c
     * @return mixed
     */
    protected function _tint($c)
    {
        if (!is_numeric($c)) {
            return $c;
        }

        return min(1, $c + 0.16);
    }

    /**
     * @param $c
     * @return mixed
     */
    protected function _shade($c)
    {
        if (!is_numeric($c)) {
            return $c;
        }

        return max(0, $c - 0.33);
    }

    /**
     * @param float   $x
     * @param float   $y
     * @param float   $length
     * @param array   $color
     * @param float[] $widths
     * @param string  $side
     * @param string  $corner_style
     * @param float   $r1
     * @param float   $r2
     */
    protected function _border_inset($x, $y, $length, $color, $widths, $side, $corner_style = "bevel", $r1 = 0, $r2 = 0)
    {
        switch ($side) {
            case "top":
            case "left":
                $shade = array_map([$this, "_shade"], $color);
                $this->_border_solid($x, $y, $length, $shade, $widths, $side, $corner_style, $r1, $r2);
                break;

            case "bottom":
            case "right":
                $tint = array_map([$this, "_tint"], $color);
                $this->_border_solid($x, $y, $length, $tint, $widths, $side, $corner_style, $r1, $r2);
                break;

            default:
                return;
        }
    }

    /**
     * @param float   $x
     * @param float   $y
     * @param float   $length
     * @param array   $color
     * @param float[] $widths
     * @param string  $side
     * @param string  $corner_style
     * @param float   $r1
     * @param float   $r2
     */
    protected function _border_outset($x, $y, $length, $color, $widths, $side, $corner_style = "bevel", $r1 = 0, $r2 = 0)
    {
        switch ($side) {
            case "top":
            case "left":
                $tint = array_map([$this, "_tint"], $color);
                $this->_border_solid($x, $y, $length, $tint, $widths, $side, $corner_style, $r1, $r2);
                break;

            case "bottom":
            case "right":
                $shade = array_map([$this, "_shade"], $color);
                $this->_border_solid($x, $y, $length, $shade, $widths, $side, $corner_style, $r1, $r2);
                break;

            default:
                return;
        }
    }

    /**
     * Get the dash pattern and cap style for the given border style, width, and
     * line length.
     *
     * The base pattern is adjusted so that it fits the given line length
     * symmetrically.
     *
     * @param string $style
     * @param float  $width
     * @param float  $length
     *
     * @return array
     */
    protected function dashPattern(string $style, float $width, float $length): array
    {
        if ($style === "dashed") {
            $w = 3 * $width;

            if ($length < $w) {
                $s = $w;
            } else {
                // Scale dashes and gaps
                $r = round($length / $w);
                $r = $r % 2 === 0 ? $r + 1 : $r;
                $s = $length / $r;
            }

            return [[$s], "butt"];
        }

        if ($style === "dotted") {
            // Draw circles along the line
            // Round caps extend outwards by half line width, so a zero dash
            // width results in a circle
            $gap = $width <= 1 ? 2 : 1;
            $w = ($gap + 1) * $width;

            if ($length < $w) {
                $s = $w;
            } else {
                // Only scale gaps
                $l = $length - $width;
                $r = max(round($l / $w), 1);
                $s = $l / $r;
            }

            return [[0, $s], "round"];
        }

        return [[], "butt"];
    }

    /**
     * Draws a solid, dotted, or dashed line, observing the border radius
     *
     * @param float   $x
     * @param float   $y
     * @param float   $length
     * @param array   $color
     * @param float[] $widths
     * @param string  $side
     * @param string  $corner_style
     * @param string  $pattern_name
     * @param float   $r1
     * @param float   $r2
     */
    protected function _border_line($x, $y, $length, $color, $widths, $side, $corner_style = "bevel", $pattern_name = "none", $r1 = 0, $r2 = 0)
    {
        /** used by $$side */
        [$top, $right, $bottom, $left] = $widths;
        $width = $$side;

        // No need to clip corners if border radius is large enough
        $cornerClip = $corner_style === "bevel" && ($r1 < $width || $r2 < $width);
        $lineLength = $length - $r1 - $r2;
        [$pattern, $cap] = $this->dashPattern($pattern_name, $width, $lineLength);

        // Determine arc border radius for corner arcs
        $halfWidth = $width / 2;
        $ar1 = max($r1 - $halfWidth, 0);
        $ar2 = max($r2 - $halfWidth, 0);

        // Small angle adjustments to prevent the background from shining through
        $adj1 = $ar1 / 80;
        $adj2 = $ar2 / 80;

        // Adjust line width and corner angles to account for the fact that
        // round caps extend outwards. The line is actually only shifted below,
        // not shortened, as otherwise the end dash (circle) will vanish
        // occasionally
        $dl = $cap === "round" ? $halfWidth : 0;

        if ($cap === "round" && $ar1 > 0) {
            $adj1 -= rad2deg(asin($halfWidth / $ar1));
        }
        if ($cap === "round" && $ar2 > 0) {
            $adj2 -= rad2deg(asin($halfWidth / $ar2));
        }

        switch ($side) {
            case "top":
                if ($cornerClip) {
                    $points = [
                        $x, $y,
                        $x, $y - 1, // Extend outwards to avoid gaps
                        $x + $length, $y - 1, // Extend outwards to avoid gaps
                        $x + $length, $y,
                        $x + $length - max($right, $r2), $y + max($width, $r2),
                        $x + max($left, $r1), $y + max($width, $r1)
                    ];
                    $this->_canvas->clipping_polygon($points);
                }

                $y += $halfWidth;

                if ($ar1 > 0 && $adj1 > -22.5) {
                    $this->_canvas->arc($x + $r1, $y + $ar1, $ar1, $ar1, 90 - $adj1, 135 + $adj1, $color, $width, $pattern, $cap);
                }

                if ($lineLength > 0) {
                    $this->_canvas->line($x + $dl + $r1, $y, $x + $dl + $length - $r2, $y, $color, $width, $pattern, $cap);
                }

                if ($ar2 > 0 && $adj2 > -22.5) {
                    $this->_canvas->arc($x + $length - $r2, $y + $ar2, $ar2, $ar2, 45 - $adj2, 90 + $adj2, $color, $width, $pattern, $cap);
                }
                break;

            case "bottom":
                if ($cornerClip) {
                    $points = [
                        $x, $y,
                        $x, $y + 1, // Extend outwards to avoid gaps
                        $x + $length, $y + 1, // Extend outwards to avoid gaps
                        $x + $length, $y,
                        $x + $length - max($right, $r2), $y - max($width, $r2),
                        $x + max($left, $r1), $y - max($width, $r1)
                    ];
                    $this->_canvas->clipping_polygon($points);
                }

                $y -= $halfWidth;

                if ($ar1 > 0 && $adj1 > -22.5) {
                    $this->_canvas->arc($x + $r1, $y - $ar1, $ar1, $ar1, 225 - $adj1, 270 + $adj1, $color, $width, $pattern, $cap);
                }

                if ($lineLength > 0) {
                    $this->_canvas->line($x + $dl + $r1, $y, $x + $dl + $length - $r2, $y, $color, $width, $pattern, $cap);
                }

                if ($ar2 > 0 && $adj2 > -22.5) {
                    $this->_canvas->arc($x + $length - $r2, $y - $ar2, $ar2, $ar2, 270 - $adj2, 315 + $adj2, $color, $width, $pattern, $cap);
                }
                break;

            case "left":
                if ($cornerClip) {
                    $points = [
                        $x, $y,
                        $x - 1, $y, // Extend outwards to avoid gaps
                        $x - 1, $y + $length, // Extend outwards to avoid gaps
                        $x, $y + $length,
                        $x + max($width, $r2), $y + $length - max($bottom, $r2),
                        $x + max($width, $r1), $y + max($top, $r1)
                    ];
                    $this->_canvas->clipping_polygon($points);
                }

                $x += $halfWidth;

                if ($ar1 > 0 && $adj1 > -22.5) {
                    $this->_canvas->arc($x + $ar1, $y + $r1, $ar1, $ar1, 135 - $adj1, 180 + $adj1, $color, $width, $pattern, $cap);
                }

                if ($lineLength > 0) {
                    $this->_canvas->line($x, $y + $dl + $r1, $x, $y + $dl + $length - $r2, $color, $width, $pattern, $cap);
                }

                if ($ar2 > 0 && $adj2 > -22.5) {
                    $this->_canvas->arc($x + $ar2, $y + $length - $r2, $ar2, $ar2, 180 - $adj2, 225 + $adj2, $color, $width, $pattern, $cap);
                }
                break;

            case "right":
                if ($cornerClip) {
                    $points = [
                        $x, $y,
                        $x + 1, $y, // Extend outwards to avoid gaps
                        $x + 1, $y + $length, // Extend outwards to avoid gaps
                        $x, $y + $length,
                        $x - max($width, $r2), $y + $length - max($bottom, $r2),
                        $x - max($width, $r1), $y + max($top, $r1)
                    ];
                    $this->_canvas->clipping_polygon($points);
                }

                $x -= $halfWidth;

                if ($ar1 > 0 && $adj1 > -22.5) {
                    $this->_canvas->arc($x - $ar1, $y + $r1, $ar1, $ar1, 0 - $adj1, 45 + $adj1, $color, $width, $pattern, $cap);
                }

                if ($lineLength > 0) {
                    $this->_canvas->line($x, $y + $dl + $r1, $x, $y + $dl + $length - $r2, $color, $width, $pattern, $cap);
                }

                if ($ar2 > 0 && $adj2 > -22.5) {
                    $this->_canvas->arc($x - $ar2, $y + $length - $r2, $ar2, $ar2, 315 - $adj2, 360 + $adj2, $color, $width, $pattern, $cap);
                }
                break;
        }

        if ($cornerClip) {
            $this->_canvas->clipping_end();
        }
    }

    /**
     * @param float $opacity
     */
    protected function _set_opacity(float $opacity): void
    {
        if ($opacity >= 0.0 && $opacity <= 1.0) {
            $this->_canvas->set_opacity($opacity);
        }
    }

    /**
     * @param float[] $box
     * @param string  $color
     * @param array   $style
     */
    protected function _debug_layout($box, $color = "red", $style = [])
    {
        $this->_canvas->rectangle($box[0], $box[1], $box[2], $box[3], Color::parse($color), 0.1, $style);
    }

    /**
     * @param float        $img_width
     * @param float        $img_height
     * @param float        $container_width
     * @param float        $container_height
     * @param array|string $bg_resize
     * @param int          $dpi
     *
     * @return array
     */
    protected function _resize_background_image(
        $img_width,
        $img_height,
        $container_width,
        $container_height,
        $bg_resize,
        $dpi
    ) {
        // We got two some specific numbers and/or auto definitions
        if (is_array($bg_resize)) {
            $is_auto_width = $bg_resize[0] === 'auto';
            if ($is_auto_width) {
                $new_img_width = $img_width;
            } else {
                $new_img_width = $bg_resize[0];
                if (Helpers::is_percent($new_img_width)) {
                    $new_img_width = round(($container_width / 100) * (float)$new_img_width);
                } else {
                    $new_img_width = round($new_img_width * $dpi / 72);
                }
            }

            $is_auto_height = $bg_resize[1] === 'auto';
            if ($is_auto_height) {
                $new_img_height = $img_height;
            } else {
                $new_img_height = $bg_resize[1];
                if (Helpers::is_percent($new_img_height)) {
                    $new_img_height = round(($container_height / 100) * (float)$new_img_height);
                } else {
                    $new_img_height = round($new_img_height * $dpi / 72);
                }
            }

            // if one of both was set to auto the other one needs to scale proportionally
            if ($is_auto_width !== $is_auto_height) {
                if ($is_auto_height) {
                    $new_img_height = round($new_img_width * ($img_height / $img_width));
                } else {
                    $new_img_width = round($new_img_height * ($img_width / $img_height));
                }
            }
        } else {
            $container_ratio = $container_height / $container_width;

            if ($bg_resize === 'cover' || $bg_resize === 'contain') {
                $img_ratio = $img_height / $img_width;

                if (
                    ($bg_resize === 'cover' && $container_ratio > $img_ratio) ||
                    ($bg_resize === 'contain' && $container_ratio < $img_ratio)
                ) {
                    $new_img_height = $container_height;
                    $new_img_width = round($container_height / $img_ratio);
                } else {
                    $new_img_width = $container_width;
                    $new_img_height = round($container_width * $img_ratio);
                }
            } else {
                $new_img_width = $img_width;
                $new_img_height = $img_height;
            }
        }

        return [$new_img_width, $new_img_height];
    }
}
<?php
/**
 * @package dompdf
 * @link    https://github.com/dompdf/dompdf
 * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
 */
namespace Dompdf\Renderer;

use Dompdf\Frame;
use Dompdf\FrameDecorator\Block as BlockFrameDecorator;
use Dompdf\Helpers;

/**
 * Renders block frames
 *
 * @package dompdf
 */
class Block extends AbstractRenderer
{

    /**
     * @param Frame $frame
     */
    function render(Frame $frame)
    {
        $style = $frame->get_style();
        $node = $frame->get_node();
        $dompdf = $this->_dompdf;

        $this->_set_opacity($frame->get_opacity($style->opacity));

        [$x, $y, $w, $h] = $frame->get_border_box();

        if ($node->nodeName === "body") {
            // Margins should be fully resolved at this point
            $mt = $style->margin_top;
            $mb = $style->margin_bottom;
            $h = $frame->get_containing_block("h") - $mt - $mb;
        }

        $border_box = [$x, $y, $w, $h];

        // Draw our background, border and content
        $this->_render_background($frame, $border_box);
        $this->_render_border($frame, $border_box);
        $this->_render_outline($frame, $border_box);

        // Handle anchors & links
        if ($node->nodeName === "a" && $href = $node->getAttribute("href")) {
            $href = Helpers::build_url($dompdf->getProtocol(), $dompdf->getBaseHost(), $dompdf->getBasePath(), $href) ?? $href;
            $this->_canvas->add_link($href, $x, $y, $w, $h);
        }

        $id = $frame->get_node()->getAttribute("id");
        if (strlen($id) > 0) {
            $this->_canvas->add_named_dest($id);
        }

        $this->debugBlockLayout($frame, "red", false);
    }

    protected function debugBlockLayout(Frame $frame, ?string $color, bool $lines = false): void
    {
        $options = $this->_dompdf->getOptions();
        $debugLayout = $options->getDebugLayout();

        if (!$debugLayout) {
            return;
        }

        if ($color && $options->getDebugLayoutBlocks()) {
            $this->_debug_layout($frame->get_border_box(), $color);

            if ($options->getDebugLayoutPaddingBox()) {
                $this->_debug_layout($frame->get_padding_box(), $color, [0.5, 0.5]);
            }
        }

        if ($lines && $options->getDebugLayoutLines() && $frame instanceof BlockFrameDecorator) {
            [$cx, , $cw] = $frame->get_content_box();

            foreach ($frame->get_line_boxes() as $line) {
                $lw = $cw - $line->left - $line->right;
                $this->_debug_layout([$cx + $line->left, $line->y, $lw, $line->h], "orange");
            }
        }
    }
}
<?php
/**
 * @package dompdf
 * @link    https://github.com/dompdf/dompdf
 * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
 */
namespace Dompdf\Renderer;

use Dompdf\Frame;
use Dompdf\FrameDecorator\Image as ImageFrameDecorator;
use Dompdf\Image\Cache;

/**
 * Image renderer
 *
 * @package dompdf
 */
class Image extends Block
{
    /**
     * @param ImageFrameDecorator $frame
     */
    function render(Frame $frame)
    {
        $style = $frame->get_style();
        $border_box = $frame->get_border_box();

        $this->_set_opacity($frame->get_opacity($style->opacity));

        // Render background & borders
        $this->_render_background($frame, $border_box);
        $this->_render_border($frame, $border_box);
        $this->_render_outline($frame, $border_box);

        $content_box = $frame->get_content_box();
        [$x, $y, $w, $h] = $content_box;

        $src = $frame->get_image_url();
        $alt = null;

        if (Cache::is_broken($src) &&
            $alt = $frame->get_node()->getAttribute("alt")
        ) {
            $font = $style->font_family;
            $size = $style->font_size;
            $word_spacing = $style->word_spacing;
            $letter_spacing = $style->letter_spacing;

            $this->_canvas->text(
                $x,
                $y,
                $alt,
                $font,
                $size,
                $style->color,
                $word_spacing,
                $letter_spacing
            );
        } elseif ($w > 0 && $h > 0) {
            if ($style->has_border_radius()) {
                [$tl, $tr, $br, $bl] = $style->resolve_border_radius($border_box, $content_box);
                $this->_canvas->clipping_roundrectangle($x, $y, $w, $h, $tl, $tr, $br, $bl);
            }

            $this->_canvas->image($src, $x, $y, $w, $h, $style->image_resolution);

            if ($style->has_border_radius()) {
                $this->_canvas->clipping_end();
            }
        }

        if ($msg = $frame->get_image_msg()) {
            $parts = preg_split("/\s*\n\s*/", $msg);
            $font = $style->font_family;
            $height = 10;
            $_y = $alt ? $y + $h - count($parts) * $height : $y;

            foreach ($parts as $i => $_part) {
                $this->_canvas->text($x, $_y + $i * $height, $_part, $font, $height * 0.8, [0.5, 0.5, 0.5]);
            }
        }

        $id = $frame->get_node()->getAttribute("id");
        if (strlen($id) > 0) {
            $this->_canvas->add_named_dest($id);
        }

        $this->debugBlockLayout($frame, "blue");
    }
}
<?php
/**
 * @package dompdf
 * @link    https://github.com/dompdf/dompdf
 * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
 */
namespace Dompdf\Renderer;

use Dompdf\Frame;
use Dompdf\Helpers;

/**
 * Renders inline frames
 *
 * @package dompdf
 */
class Inline extends AbstractRenderer
{
    function render(Frame $frame)
    {
        if (!$frame->get_first_child()) {
            return; // No children, no service
        }

        $style = $frame->get_style();
        $dompdf = $this->_dompdf;

        $this->_set_opacity($frame->get_opacity($style->opacity));

        $do_debug_layout_line = $dompdf->getOptions()->getDebugLayout()
            && $dompdf->getOptions()->getDebugLayoutInline();

        // Draw the background & border behind each child.  To do this we need
        // to figure out just how much space each child takes:
        [$x, $y] = $frame->get_first_child()->get_position();
        [$w, $h] = $this->get_child_size($frame, $do_debug_layout_line);

        [, , $cbw] = $frame->get_containing_block();
        $margin_left = $style->length_in_pt($style->margin_left, $cbw);
        $pt = $style->length_in_pt($style->padding_top, $cbw);
        $pb = $style->length_in_pt($style->padding_bottom, $cbw);

        // Make sure that border and background start inside the left margin
        // Extend the drawn box by border and padding in vertical direction, as
        // these do not affect layout
        // FIXME: Using a small vertical offset of a fraction of the height here
        // to work around the vertical position being slightly off in general
        $x += $margin_left;
        $y -= $style->border_top_width + $pt - ($h * 0.1);
        $w += $style->border_left_width + $style->border_right_width;
        $h += $style->border_top_width + $pt + $style->border_bottom_width + $pb;

        $border_box = [$x, $y, $w, $h];
        $this->_render_background($frame, $border_box);
        $this->_render_border($frame, $border_box);
        $this->_render_outline($frame, $border_box);

        $node = $frame->get_node();
        $id = $node->getAttribute("id");
        if (strlen($id) > 0) {
            $this->_canvas->add_named_dest($id);
        }

        // Only two levels of links frames
        $is_link_node = $node->nodeName === "a";
        if ($is_link_node) {
            if (($name = $node->getAttribute("name"))) {
                $this->_canvas->add_named_dest($name);
            }
        }

        if ($frame->get_parent() && $frame->get_parent()->get_node()->nodeName === "a") {
            $link_node = $frame->get_parent()->get_node();
        }

        // Handle anchors & links
        if ($is_link_node) {
            if ($href = $node->getAttribute("href")) {
                $href = Helpers::build_url($dompdf->getProtocol(), $dompdf->getBaseHost(), $dompdf->getBasePath(), $href) ?? $href;
                $this->_canvas->add_link($href, $x, $y, $w, $h);
            }
        }
    }

    protected function get_child_size(Frame $frame, bool $do_debug_layout_line): array
    {
        $w = 0.0;
        $h = 0.0;

        foreach ($frame->get_children() as $child) {
            if ($child->get_node()->nodeValue === " " && $child->get_prev_sibling() && !$child->get_next_sibling()) {
                break;
            }

            $style = $child->get_style();
            $auto_width = $style->width === "auto";
            $auto_height = $style->height === "auto";
            [, , $child_w, $child_h] = $child->get_padding_box();

            if ($auto_width || $auto_height) {
                [$child_w2, $child_h2] = $this->get_child_size($child, $do_debug_layout_line);

                if ($auto_width) {
                    $child_w = $child_w2;
                }
    
                if ($auto_height) {
                    $child_h = $child_h2;
                }
            }

            $w += $child_w;
            $h = max($h, $child_h);

            if ($do_debug_layout_line) {
                $this->_debug_layout($child->get_border_box(), "blue");

                if ($this->_dompdf->getOptions()->getDebugLayoutPaddingBox()) {
                    $this->_debug_layout($child->get_padding_box(), "blue", [0.5, 0.5]);
                }
            }
        }

        return [$w, $h];
    }
}
<?php
/**
 * @package dompdf
 * @link    https://github.com/dompdf/dompdf
 * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
 */
namespace Dompdf\Renderer;

use Dompdf\Helpers;
use Dompdf\Frame;
use Dompdf\FrameDecorator\ListBullet as ListBulletFrameDecorator;
use Dompdf\FrameDecorator\ListBulletImage;
use Dompdf\Image\Cache;

/**
 * Renders list bullets
 *
 * @package dompdf
 */
class ListBullet extends AbstractRenderer
{
    /**
     * @param $type
     * @return mixed|string
     */
    static function get_counter_chars($type)
    {
        static $cache = [];

        if (isset($cache[$type])) {
            return $cache[$type];
        }

        $uppercase = false;
        $text = "";

        switch ($type) {
            case "decimal-leading-zero":
            case "decimal":
            case "1":
                return "0123456789";

            case "upper-alpha":
            case "upper-latin":
            case "A":
                $uppercase = true;
            case "lower-alpha":
            case "lower-latin":
            case "a":
                $text = "abcdefghijklmnopqrstuvwxyz";
                break;

            case "upper-roman":
            case "I":
                $uppercase = true;
            case "lower-roman":
            case "i":
                $text = "ivxlcdm";
                break;

            case "lower-greek":
                for ($i = 0; $i < 24; $i++) {
                    $text .= Helpers::unichr($i + 944);
                }
                break;
        }

        if ($uppercase) {
            $text = strtoupper($text);
        }

        return $cache[$type] = "$text.";
    }

    /**
     * @param int $n
     * @param string $type
     * @param int|null $pad
     *
     * @return string
     */
    private function make_counter($n, $type, $pad = null)
    {
        $n = intval($n);
        $text = "";
        $uppercase = false;

        switch ($type) {
            case "decimal-leading-zero":
            case "decimal":
            case "1":
                if ($pad) {
                    $text = str_pad($n, $pad, "0", STR_PAD_LEFT);
                } else {
                    $text = $n;
                }
                break;

            case "upper-alpha":
            case "upper-latin":
            case "A":
                $uppercase = true;
            case "lower-alpha":
            case "lower-latin":
            case "a":
                $text = chr((($n - 1) % 26) + ord('a'));
                break;

            case "upper-roman":
            case "I":
                $uppercase = true;
            case "lower-roman":
            case "i":
                $text = Helpers::dec2roman($n);
                break;

            case "lower-greek":
                $text = Helpers::unichr($n + 944);
                break;
        }

        if ($uppercase) {
            $text = strtoupper($text);
        }

        return "$text.";
    }

    /**
     * @param ListBulletFrameDecorator $frame
     */
    function render(Frame $frame)
    {
        $li = $frame->get_parent();
        $style = $frame->get_style();

        $this->_set_opacity($frame->get_opacity($style->opacity));

        // Don't render bullets twice if the list item was split
        if ($li->is_split_off) {
            return;
        }

        $font_family = $style->font_family;
        $font_size = $style->font_size;
        $baseline = $this->_canvas->get_font_baseline($font_family, $font_size);

        // Handle list-style-image
        // If list style image is requested but missing, fall back to predefined types
        if ($frame instanceof ListBulletImage && !Cache::is_broken($img = $frame->get_image_url())) {
            [$x, $y] = $frame->get_position();
            $w = $frame->get_width();
            $h = $frame->get_height();
            $y += $baseline - $h;

            $this->_canvas->image($img, $x, $y, $w, $h);
        } else {
            $bullet_style = $style->list_style_type;

            switch ($bullet_style) {
                default:
                case "disc":
                case "circle":
                    [$x, $y] = $frame->get_position();
                    $offset = $font_size * ListBulletFrameDecorator::BULLET_OFFSET;
                    $r = ($font_size * ListBulletFrameDecorator::BULLET_SIZE) / 2;
                    $x += $r;
                    $y += $baseline - $r - $offset;
                    $o = $font_size * ListBulletFrameDecorator::BULLET_THICKNESS;
                    $this->_canvas->circle($x, $y, $r, $style->color, $o, null, $bullet_style !== "circle");
                    break;

                case "square":
                    [$x, $y] = $frame->get_position();
                    $offset = $font_size * ListBulletFrameDecorator::BULLET_OFFSET;
                    $w = $font_size * ListBulletFrameDecorator::BULLET_SIZE;
                    $y += $baseline - $w - $offset;
                    $this->_canvas->filled_rectangle($x, $y, $w, $w, $style->color);
                    break;

                case "decimal-leading-zero":
                case "decimal":
                case "lower-alpha":
                case "lower-latin":
                case "lower-roman":
                case "lower-greek":
                case "upper-alpha":
                case "upper-latin":
                case "upper-roman":
                case "1": // HTML 4.0 compatibility
                case "a":
                case "i":
                case "A":
                case "I":
                    $pad = null;
                    if ($bullet_style === "decimal-leading-zero") {
                        $pad = strlen($li->get_parent()->get_node()->getAttribute("dompdf-children-count"));
                    }

                    $node = $frame->get_node();

                    if (!$node->hasAttribute("dompdf-counter")) {
                        return;
                    }

                    $index = $node->getAttribute("dompdf-counter");
                    $text = $this->make_counter($index, $bullet_style, $pad);

                    if (trim($text) === "") {
                        return;
                    }

                    $word_spacing = $style->word_spacing;
                    $letter_spacing = $style->letter_spacing;
                    $text_width = $this->_dompdf->getFontMetrics()->getTextWidth($text, $font_family, $font_size, $word_spacing, $letter_spacing);

                    [$x, $y] = $frame->get_position();
                    // Correct for static frame width applied by positioner
                    $x += $frame->get_width() - $text_width;

                    $this->_canvas->text($x, $y, $text,
                        $font_family, $font_size,
                        $style->color, $word_spacing, $letter_spacing);

                case "none":
                    break;
            }
        }

        $id = $frame->get_node()->getAttribute("id");
        if (strlen($id) > 0) {
            $this->_canvas->add_named_dest($id);
        }
    }
}
<?php
/**
 * @package dompdf
 * @link    https://github.com/dompdf/dompdf
 * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
 */
namespace Dompdf\Renderer;

use Dompdf\Frame;
use Dompdf\FrameDecorator\Table;

/**
 * Renders table cells
 *
 * @package dompdf
 */
class TableCell extends Block
{

    /**
     * @param Frame $frame
     */
    function render(Frame $frame)
    {
        $style = $frame->get_style();

        if (trim($frame->get_node()->nodeValue) === "" && $style->empty_cells === "hide") {
            return;
        }

        $this->_set_opacity($frame->get_opacity($style->opacity));

        $border_box = $frame->get_border_box();
        $table = Table::find_parent_table($frame);

        if ($table->get_style()->border_collapse !== "collapse") {
            $this->_render_background($frame, $border_box);
            $this->_render_border($frame, $border_box);
            $this->_render_outline($frame, $border_box);
        } else {
            // The collapsed case is slightly complicated...

            $cells = $table->get_cellmap()->get_spanned_cells($frame);

            if (is_null($cells)) {
                return;
            }

            // Render the background to the padding box, as the cells are
            // rendered individually one after another, and we don't want the
            // background to overlap an adjacent border
            $padding_box = $frame->get_padding_box();

            $this->_render_background($frame, $padding_box);
            $this->_render_collapsed_border($frame, $table);

            // FIXME: Outline should be drawn over other cells
            $this->_render_outline($frame, $border_box);
        }

        $id = $frame->get_node()->getAttribute("id");
        if (strlen($id) > 0) {
            $this->_canvas->add_named_dest($id);
        }

        // $this->debugBlockLayout($frame, "red", false);
    }

    /**
     * @param Frame $frame
     * @param Table $table
     */
    protected function _render_collapsed_border(Frame $frame, Table $table): void
    {
        $cellmap = $table->get_cellmap();
        $cells = $cellmap->get_spanned_cells($frame);
        $num_rows = $cellmap->get_num_rows();
        $num_cols = $cellmap->get_num_cols();

        [$table_x, $table_y] = $table->get_position();

        // Determine the top row spanned by this cell
        $i = $cells["rows"][0];
        $top_row = $cellmap->get_row($i);

        // Determine if this cell borders on the bottom of the table.  If so,
        // then we draw its bottom border.  Otherwise the next row down will
        // draw its top border instead.
        if (in_array($num_rows - 1, $cells["rows"])) {
            $draw_bottom = true;
            $bottom_row = $cellmap->get_row($num_rows - 1);
        } else {
            $draw_bottom = false;
        }

        // Draw the horizontal borders
        foreach ($cells["columns"] as $j) {
            $bp = $cellmap->get_border_properties($i, $j);
            $col = $cellmap->get_column($j);

            $x = $table_x + $col["x"] - $bp["left"]["width"] / 2;
            $y = $table_y + $top_row["y"] - $bp["top"]["width"] / 2;
            $w = $col["used-width"] + ($bp["left"]["width"] + $bp["right"]["width"]) / 2;

            if ($bp["top"]["width"] > 0) {
                $widths = [
                    (float)$bp["top"]["width"],
                    (float)$bp["right"]["width"],
                    (float)$bp["bottom"]["width"],
                    (float)$bp["left"]["width"]
                ];

                $method = "_border_" . $bp["top"]["style"];
                $this->$method($x, $y, $w, $bp["top"]["color"], $widths, "top", "square");
            }

            if ($draw_bottom) {
                $bp = $cellmap->get_border_properties($num_rows - 1, $j);
                if ($bp["bottom"]["width"] <= 0) {
                    continue;
                }
                
                $widths = [
                    (float)$bp["top"]["width"],
                    (float)$bp["right"]["width"],
                    (float)$bp["bottom"]["width"],
                    (float)$bp["left"]["width"]
                ];

                $y = $table_y + $bottom_row["y"] + $bottom_row["height"] + $bp["bottom"]["width"] / 2;

                $method = "_border_" . $bp["bottom"]["style"];
                $this->$method($x, $y, $w, $bp["bottom"]["color"], $widths, "bottom", "square");
            }
        }

        $j = $cells["columns"][0];
        $left_col = $cellmap->get_column($j);

        if (in_array($num_cols - 1, $cells["columns"])) {
            $draw_right = true;
            $right_col = $cellmap->get_column($num_cols - 1);
        } else {
            $draw_right = false;
        }

        // Draw the vertical borders
        foreach ($cells["rows"] as $i) {
            $bp = $cellmap->get_border_properties($i, $j);
            $row = $cellmap->get_row($i);

            $x = $table_x + $left_col["x"] - $bp["left"]["width"] / 2;
            $y = $table_y + $row["y"] - $bp["top"]["width"] / 2;
            $h = $row["height"] + ($bp["top"]["width"] + $bp["bottom"]["width"]) / 2;

            if ($bp["left"]["width"] > 0) {
                $widths = [
                    (float)$bp["top"]["width"],
                    (float)$bp["right"]["width"],
                    (float)$bp["bottom"]["width"],
                    (float)$bp["left"]["width"]
                ];

                $method = "_border_" . $bp["left"]["style"];
                $this->$method($x, $y, $h, $bp["left"]["color"], $widths, "left", "square");
            }

            if ($draw_right) {
                $bp = $cellmap->get_border_properties($i, $num_cols - 1);
                if ($bp["right"]["width"] <= 0) {
                    continue;
                }

                $widths = [
                    (float)$bp["top"]["width"],
                    (float)$bp["right"]["width"],
                    (float)$bp["bottom"]["width"],
                    (float)$bp["left"]["width"]
                ];

                $x = $table_x + $right_col["x"] + $right_col["used-width"] + $bp["right"]["width"] / 2;

                $method = "_border_" . $bp["right"]["style"];
                $this->$method($x, $y, $h, $bp["right"]["color"], $widths, "right", "square");
            }
        }
    }
}
<?php
/**
 * @package dompdf
 * @link    https://github.com/dompdf/dompdf
 * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
 */
namespace Dompdf\Renderer;

use Dompdf\Frame;

/**
 * Renders block frames
 *
 * @package dompdf
 */
class TableRowGroup extends Block
{

    /**
     * @param Frame $frame
     */
    function render(Frame $frame)
    {
        $style = $frame->get_style();

        $this->_set_opacity($frame->get_opacity($style->opacity));

        $border_box = $frame->get_border_box();

        $this->_render_border($frame, $border_box);
        $this->_render_outline($frame, $border_box);

        $id = $frame->get_node()->getAttribute("id");
        if (strlen($id) > 0) {
            $this->_canvas->add_named_dest($id);
        }

        $this->debugBlockLayout($frame, "red");
    }
}
<?php
/**
 * @package dompdf
 * @link    https://github.com/dompdf/dompdf
 * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
 */
namespace Dompdf\Renderer;

use Dompdf\Adapter\CPDF;
use Dompdf\Frame;

/**
 * Renders text frames
 *
 * @package dompdf
 */
class Text extends AbstractRenderer
{
    /** Thickness of underline. Screen: 0.08, print: better less, e.g. 0.04 */
    const DECO_THICKNESS = 0.02;

    //Tweaking if $base and $descent are not accurate.
    //Check method_exists( $this->_canvas, "get_cpdf" )
    //- For cpdf these can and must stay 0, because font metrics are used directly.
    //- For other renderers, if different values are wanted, separate the parameter sets.
    //  But $size and $size-$height seem to be accurate enough

    /** Relative to bottom of text, as fraction of height */
    const UNDERLINE_OFFSET = 0.0;

    /** Relative to top of text */
    const OVERLINE_OFFSET = 0.0;

    /** Relative to centre of text. */
    const LINETHROUGH_OFFSET = 0.0;

    /** How far to extend lines past either end, in pt */
    const DECO_EXTENSION = 0.0;

    /**
     * @param \Dompdf\FrameDecorator\Text $frame
     */
    function render(Frame $frame)
    {
        $style = $frame->get_style();
        $text = $frame->get_text();

        if ($text === "") {
            return;
        }

        $this->_set_opacity($frame->get_opacity($style->opacity));

        list($x, $y) = $frame->get_position();
        $cb = $frame->get_containing_block();

        $ml = $style->margin_left;
        $pl = $style->padding_left;
        $bl = $style->border_left_width;
        $x += (float) $style->length_in_pt([$ml, $pl, $bl], $cb["w"]);

        $font = $style->font_family;
        $size = $style->font_size;
        $frame_font_size = $frame->get_dompdf()->getFontMetrics()->getFontHeight($font, $size);
        $word_spacing = $frame->get_text_spacing() + $style->word_spacing;
        $letter_spacing = $style->letter_spacing;
        $width = (float) $style->width;

        /*$text = str_replace(
          array("{PAGE_NUM}"),
          array($this->_canvas->get_page_number()),
          $text
        );*/

        $this->_canvas->text($x, $y, $text,
            $font, $size,
            $style->color, $word_spacing, $letter_spacing);

        $line = $frame->get_containing_line();

        // FIXME Instead of using the tallest frame to position,
        // the decoration, the text should be well placed
        if (false && $line->tallest_frame) {
            $base_frame = $line->tallest_frame;
            $style = $base_frame->get_style();
            $size = $style->font_size;
        }

        $line_thickness = $size * self::DECO_THICKNESS;
        $underline_offset = $size * self::UNDERLINE_OFFSET;
        $overline_offset = $size * self::OVERLINE_OFFSET;
        $linethrough_offset = $size * self::LINETHROUGH_OFFSET;
        $underline_position = -0.08;

        if ($this->_canvas instanceof CPDF) {
            $cpdf_font = $this->_canvas->get_cpdf()->fonts[$style->font_family];

            if (isset($cpdf_font["UnderlinePosition"])) {
                $underline_position = $cpdf_font["UnderlinePosition"] / 1000;
            }

            if (isset($cpdf_font["UnderlineThickness"])) {
                $line_thickness = $size * ($cpdf_font["UnderlineThickness"] / 1000);
            }
        }

        $descent = $size * $underline_position;
        $base = $frame_font_size;

        // Handle text decoration:
        // http://www.w3.org/TR/CSS21/text.html#propdef-text-decoration

        // Draw all applicable text-decorations.  Start with the root and work our way down.
        $p = $frame;
        $stack = [];
        while ($p = $p->get_parent()) {
            $stack[] = $p;
        }

        while (isset($stack[0])) {
            $f = array_pop($stack);

            if (($text_deco = $f->get_style()->text_decoration) === "none") {
                continue;
            }

            $deco_y = $y; //$line->y;
            $color = $f->get_style()->color;

            switch ($text_deco) {
                default:
                    continue 2;

                case "underline":
                    $deco_y += $base - $descent + $underline_offset + $line_thickness / 2;
                    break;

                case "overline":
                    $deco_y += $overline_offset + $line_thickness / 2;
                    break;

                case "line-through":
                    $deco_y += $base * 0.7 + $linethrough_offset;
                    break;
            }

            $dx = 0;
            $x1 = $x - self::DECO_EXTENSION;
            $x2 = $x + $width + $dx + self::DECO_EXTENSION;
            $this->_canvas->line($x1, $deco_y, $x2, $deco_y, $color, $line_thickness);
        }

        if ($this->_dompdf->getOptions()->getDebugLayout() && $this->_dompdf->getOptions()->getDebugLayoutLines()) {
            $text_width = $this->_dompdf->getFontMetrics()->getTextWidth($text, $font, $size, $word_spacing, $letter_spacing);
            $this->_debug_layout([$x, $y, $text_width, $frame_font_size], "orange", [0.5, 0.5]);
        }
    }
}
name: "PHP Lint"

on:
  push:
  pull_request:

jobs:
  tests:
    name: "Lint"

    runs-on: ubuntu-latest

    strategy:
      matrix:
        php-version:
          - "5.3"
          - "8.0"

    steps:
      - name: "Checkout"
        uses: "actions/checkout@v2"

      - name: "Install PHP"
        uses: "shivammathur/setup-php@v2"
        with:
          coverage: "none"
          php-version: "${{ matrix.php-version }}"

      - name: "Lint PHP files"
        run: "find src/ -type f -name '*.php' -print0 | xargs -0 -L1 -P4 -- php -l -f"
name: "PHPStan"

on:
  - push
  - pull_request

env:
  COMPOSER_FLAGS: "--ansi --no-interaction --no-progress --prefer-dist"

jobs:
  tests:
    name: "PHPStan"

    runs-on: ubuntu-latest

    strategy:
      matrix:
        php-version:
          - "8.0"

    steps:
      - name: "Checkout"
        uses: "actions/checkout@v2"

      - name: "Install PHP"
        uses: "shivammathur/setup-php@v2"
        with:
          coverage: "none"
          php-version: "${{ matrix.php-version }}"

      - name: Get composer cache directory
        id: composercache
        run: echo "::set-output name=dir::$(composer config cache-files-dir)"

      - name: Cache dependencies
        uses: actions/cache@v2
        with:
          path: ${{ steps.composercache.outputs.dir }}
          key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }}
          restore-keys: ${{ runner.os }}-composer-

      - name: "Install latest dependencies"
        run: "composer update ${{ env.COMPOSER_FLAGS }}"

      - name: Run PHPStan
        run: composer phpstan
/vendor/Copyright (c) 2015 Jordi Boggiano

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is furnished
to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
CLI-Prompt
==========

While prompting for user input using `fgets()` is quite easy, sometimes you
need to prompt for sensitive information. In these cases, the characters typed
in by the user should not be directly visible, and this is quite a pain to
do in a cross-platform way.

This tiny package fixes just that for you:

```php
<?php

echo 'Say hello: ';

$answer = Seld\CliPrompt\CliPrompt::hiddenPrompt();

echo 'You answered: '.$answer . PHP_EOL;

// Output in the CLI:
// 
// Say hello:
// You answered: hello
```

Installation
------------

`composer require seld/cli-prompt`

API
---

- `Seld\CliPrompt\CliPrompt::hiddenPrompt($allowFallback = false);`

  > Prompts the user for input and hides what they type. If this fails for any
  > reason and `$allowFallback` is set to `true` the prompt will be done using
  > the usual `fgets()` and characters will be visible.

- `Seld\CliPrompt\CliPrompt::prompt();`

  > Regular user prompt for input with characters being shown on screen.

In both cases, the trailing newline the user enters when submitting the answer
is trimmed.

Requirements
------------

PHP 5.3 and above

License
-------

CLI-Prompt is licensed under the MIT License - see the LICENSE file for details

Acknowledgments
---------------

- This project uses hiddeninput.exe to prompt for passwords on Windows, sources
  and details can be found on the [github page of the project](https://github.com/Seldaek/hidden-input).
{
    "name": "seld/cli-prompt",
    "description": "Allows you to prompt for user input on the command line, and optionally hide the characters they type",
    "type": "library",
    "keywords": ["cli", "console", "hidden", "input", "prompt"],
    "license": "MIT",
    "require": {
        "php": ">=5.3"
    },
    "authors": [
        {
            "name": "Jordi Boggiano",
            "email": "j.boggiano@seld.be"
        }
    ],
    "autoload": {
        "psr-4": {
            "Seld\\CliPrompt\\": "src/"
        }
    },
    "extra": {
        "branch-alias": {
            "dev-master": "1.x-dev"
        }
    },
    "require-dev": {
        "phpstan/phpstan": "^0.12.63"
    },
    "scripts": {
        "phpstan": "vendor/bin/phpstan analyse"
    },
    "config": {
        "lock": false
    }
}
parameters:
    level: 8

    paths:
        - src/
<?php

require __DIR__.'/../vendor/autoload.php';

echo 'Say hello (visible): ';

$answer = Seld\CliPrompt\CliPrompt::prompt();

echo 'You answered: '.$answer . PHP_EOL;

echo 'Say hello (hidden): ';

$answer = Seld\CliPrompt\CliPrompt::hiddenPrompt();

echo 'You answered: '.$answer . PHP_EOL;
MZ                @                                       	!L!This program cannot be run in DOS mode.
$       ,;B;B;B2מ:B2-B2ƞ9B2ў?Ba98B;CB2Ȟ:B2֞:B2Ӟ:BRich;B        PE  L MoO         	  
         8           @                      `     ?   @                           "  P    @                      P  p   !                             8!  @                                          .text   	      
                    `.rdata  	       
                 @  @.data      0                    @  .rsrc       @                    @  @.reloc     P      "              @  B                                                                                                                                                                                                                                                                                                                                                        j$@ x  j @ e EPV  @ EЃPV @ MX @ e EP5H @ L @ YY5\ @ EP5` @ D @ YYP @ MMT @ 3H  ; 0@ u  h@   l3@ $40@ 5h3@ 40@ h$0@ h(0@ h 0@  @ 00@ }j  Yjh"@   3ۉ]d   p]俀3@ SVW0 @ ;t;u3Fuh  4 @ 3F|3@ ;u
j\  Y;|3@ u,5|3@ h @ h @   YYtE      5<0@ |3@ ;uh @ h @ l  YY|3@    9]uSW8 @ 93@ th3@   Yt
SjS3@ $0@  @ 5$0@ 5(0@ 5 0@ 80@ 9,0@ u7P @ E	MPQ  YYËeE80@ 39,0@ uPh @ 9<0@ u @ E80@   øMZ  f9  @ t3M< @   @ 8PE  uH  t  uՃ   v39   xtv39   j,0@ p @ jl @ YY3@ 3@  @ t3@  @ p3@  @  x3@ V    =0@  uh@  @ Yg  =0@ u	j @ Y3{  U(  H1@ D1@ @1@ <1@ 581@ =41@ f`1@ fT1@ f01@ f,1@ f%(1@ f-$1@ X1@ E L1@ EP1@ E\1@ 0@   P1@ L0@ @0@ 	 D0@     0@ 0@  @ 0@ j?  Yj   @ h!@ $ @ =0@  uj  Yh	 ( @ P, @ ËUE 8csmu*xu$@= t=!t="t= @u  3] hH@   @ 3% @ jh("@ b  53@ 5 @ YEuu @ Ygj  Ye 53@ ։E53@ YYEEPEPu5l @ YPU  Eu֣3@ uփ3@ E	   E  j  YËUuNYH]ËV!@ !@ W;stЃ;r_^ËV"@ "@ W;stЃ;r_^% @ ̋UMMZ  f9t3]ËA<8PE  u3ҹ  f9H]̋UEH<ASVq3WDv}H;r	X;r
B(;r3_^[]̋UjhH"@ he@ d    PSVW 0@ 1E3PEd    eE    h  @ *tUE-  @ Ph  @ Pt;@$ЃEMd    Y_^[]ËE3=  ËeE3Md    Y_^[]% @ % @ he@ d5    D$l$l$+SVW 0@ 1E3PeuEEEEd    ËMd    Y__^[]QËUuuuuh@ h 0@    ]ËVh   h   3V   tVVVVV   ^3ËU 0@ e e SWN@  ;tt	У0@ `VEP< @ u3u @ 3 @ 3 @ 3EP @ E3E3;uO@u5 0@ ։50@ ^_[%t @ %x @ %| @ % @ % @ % @ % @ % @ % @ Pd5    D$+d$SVW( 0@ 3PEuEEd    ËMd    Y__^[]QËM3M%T @ T$BJ3J3l"@ s                                                                                                                                                                                                                                                     #  #  #  )  r)  b)  H)  4)  )  (  (  (  (  (  (  )      #  $  %  %  &  d&  &  $      ('  '  '  '  '  (  ((  6(  '  H(  Z(  t(  (  '  '   '  '  '  l'  ^'  R'  F'  >'  >(  0'  '  )          @         W@ @                     MoO       l   !    @0@ 0@ bad allocation      H                                                            0@ !@    RSDSьJ!LZ    c:\users\seld\documents\visual studio 2010\Projects\hiddeninp\Release\hiddeninp.pdb     e                            @ @                 :@             @ @ @ "   d"@                        "          #      $#          &  D   H#          (  h                       #  #  #  )  r)  b)  H)  4)  )  (  (  (  (  (  (  )      #  $  %  %  &  d&  &  $      ('  '  '  '  '  (  ((  6(  '  H(  Z(  t(  (  '  '   '  '  '  l'  ^'  R'  F'  >'  >(  0'  '  )      GetConsoleMode  SetConsoleMode  ;GetStdHandle  KERNEL32.dll   ??$?6DU?$char_traits@D@std@@V?$allocator@D@1@@std@@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@0@AAV10@ABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@@Z ?cout@std@@3V?$basic_ostream@DU?$char_traits@D@std@@@1@A  J?cin@std@@3V?$basic_istream@DU?$char_traits@D@std@@@1@A  ??$getline@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@YAAAV?$basic_istream@DU?$char_traits@D@std@@@0@AAV10@AAV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@@Z ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV01@P6AAAV01@AAV01@@Z@Z  _??1?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@XZ  {??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@XZ  ?endl@std@@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@1@AAV21@@Z  MSVCP90.dll _amsg_exit   __getmainargs ,_cexit  |_exit f _XcptFilter exit   __initenv _initterm _initterm_e <_configthreadlocale  __setusermatherr  _adjust_fdiv   __p__commode   __p__fmode  j_encode_pointer  __set_app_type  K_crt_debugger_hook  C ?terminate@@YAXXZ MSVCR90.dll _unlock  __dllonexit v_lock _onexit `_decode_pointer s_except_handler4_common _invoke_watson  ?_controlfp_s  InterlockedExchange !Sleep InterlockedCompareExchange  -TerminateProcess  GetCurrentProcess >UnhandledExceptionFilter  SetUnhandledExceptionFilter IsDebuggerPresent TQueryPerformanceCounter fGetTickCount  GetCurrentThreadId  GetCurrentProcessId OGetSystemTimeAsFileTime s __CxxFrameHandler3                                                    N@D   $!@                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            8                   P                   h                	                   	     @  (        C  V        (4   V S _ V E R S I O N _ I N F O                                                  S t r i n g F i l e I n f o   b   0 4 0 9 0 4 b 0    Q  F i l e D e s c r i p t i o n     R e a d s   f r o m   s t d i n   w i t h o u t   l e a k i n g   i n f o   t o   t h e   t e r m i n a l   a n d   o u t p u t s   b a c k   t o   s t d o u t     6   F i l e V e r s i o n     1 ,   0 ,   0 ,   0     8   I n t e r n a l N a m e   h i d d e n i n p u t   P   L e g a l C o p y r i g h t   J o r d i   B o g g i a n o   -   2 0 1 2   H   O r i g i n a l F i l e n a m e   h i d d e n i n p u t . e x e   :   P r o d u c t N a m e     H i d d e n   I n p u t     :   P r o d u c t V e r s i o n   1 ,   0 ,   0 ,   0     D    V a r F i l e I n f o     $    T r a n s l a t i o n     	<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
    <security>
      <requestedPrivileges>
        <requestedExecutionLevel level="asInvoker" uiAccess="false"></requestedExecutionLevel>
      </requestedPrivileges>
    </security>
  </trustInfo>
  <dependency>
    <dependentAssembly>
      <assemblyIdentity type="win32" name="Microsoft.VC90.CRT" version="9.0.21022.8" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity>
    </dependentAssembly>
  </dependency>
</assembly>PAPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDING   @  00!0/080F0L0T0^0d0n0{000000000000001#1-1@1J1O1T1v1{1111111111111112"2*23292A2M2_2j2p222222222222333%303N3T3Z3`3f3l3s3z333333333333333334444%4;4B444444444445!5^5c5555H6M6_6}666 777*7w7|77777888=8E8P8V8\8b8h8n8t8z88889      $   0001 1t1x12 2@2\2`2h2t2 0     0                                                                                                                                                  <?php

/*
 * This file is part of CLI Prompt.
 *
 * (c) Jordi Boggiano <j.boggiano@seld.be>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

namespace Seld\CliPrompt;

class CliPrompt
{
    /**
     * Prompts the user for input and shows what they type
     *
     * @return string
     */
    public static function prompt()
    {
        $stdin = fopen('php://stdin', 'r');
        if (false === $stdin) {
            throw new \RuntimeException('Failed to open STDIN, could not prompt user for input.');
        }
        $answer = self::trimAnswer(fgets($stdin, 4096));
        fclose($stdin);

        return $answer;
    }

    /**
     * Prompts the user for input and hides what they type
     *
     * @param  bool   $allowFallback If prompting fails for any reason and this is set to true the prompt
     *                               will be done using the regular prompt() function, otherwise a
     *                               \RuntimeException is thrown.
     * @return string
     * @throws \RuntimeException on failure to prompt, unless $allowFallback is true
     */
    public static function hiddenPrompt($allowFallback = false)
    {
        // handle windows
        if (defined('PHP_WINDOWS_VERSION_BUILD')) {
            // fallback to hiddeninput executable
            $exe = __DIR__.'\\..\\res\\hiddeninput.exe';

            // handle code running from a phar
            if ('phar:' === substr(__FILE__, 0, 5)) {
                $tmpExe = sys_get_temp_dir().'/hiddeninput.exe';

                // use stream_copy_to_stream instead of copy
                // to work around https://bugs.php.net/bug.php?id=64634
                $source = fopen($exe, 'r');
                $target = fopen($tmpExe, 'w+');
                if (false === $source) {
                    throw new \RuntimeException('Failed to open '.$exe.' for reading.');
                }
                if (false === $target) {
                    throw new \RuntimeException('Failed to open '.$tmpExe.' for writing.');
                }
                stream_copy_to_stream($source, $target);
                fclose($source);
                fclose($target);
                unset($source, $target);

                $exe = $tmpExe;
            }

            $output = shell_exec($exe);

            // clean up
            if (isset($tmpExe)) {
                unlink($tmpExe);
            }

            if ($output !== null) {
                // output a newline to be on par with the regular prompt()
                echo PHP_EOL;

                return self::trimAnswer($output);
            }
        }

        if (file_exists('/usr/bin/env')) {
            // handle other OSs with bash/zsh/ksh/csh if available to hide the answer
            $test = "/usr/bin/env %s -c 'echo OK' 2> /dev/null";
            foreach (array('bash', 'zsh', 'ksh', 'csh', 'sh') as $sh) {
                $output = shell_exec(sprintf($test, $sh));
                if (is_string($output) && 'OK' === rtrim($output)) {
                    $shell = $sh;
                    break;
                }
            }

            if (isset($shell)) {
                $readCmd = ($shell === 'csh') ? 'set mypassword = $<' : 'read -r mypassword';
                $command = sprintf("/usr/bin/env %s -c 'stty -echo; %s; stty echo; echo \$mypassword'", $shell, $readCmd);
                $output = shell_exec($command);

                if ($output !== null) {
                    // output a newline to be on par with the regular prompt()
                    echo PHP_EOL;

                    return self::trimAnswer($output);
                }
            }
        }

        // not able to hide the answer
        if (!$allowFallback) {
            throw new \RuntimeException('Could not prompt for input in a secure fashion, aborting');
        }

        return self::prompt();
    }

    /**
     * @param string|bool $str
     * @return string
     */
    private static function trimAnswer($str)
    {
        return preg_replace('{\r?\n$}D', '', (string) $str) ?: '';
    }
}
Copyright (c) 2012 PHP Framework Interoperability Group

Permission is hereby granted, free of charge, to any person obtaining a copy 
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights 
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 
copies of the Software, and to permit persons to whom the Software is 
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in 
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
<?php

namespace Psr\Log;

/**
 * This is a simple Logger implementation that other Loggers can inherit from.
 *
 * It simply delegates all log-level-specific methods to the `log` method to
 * reduce boilerplate code that a simple Logger that does the same thing with
 * messages regardless of the error level has to implement.
 */
abstract class AbstractLogger implements LoggerInterface
{
    /**
     * System is unusable.
     *
     * @param string  $message
     * @param mixed[] $context
     *
     * @return void
     */
    public function emergency($message, array $context = array())
    {
        $this->log(LogLevel::EMERGENCY, $message, $context);
    }

    /**
     * Action must be taken immediately.
     *
     * Example: Entire website down, database unavailable, etc. This should
     * trigger the SMS alerts and wake you up.
     *
     * @param string  $message
     * @param mixed[] $context
     *
     * @return void
     */
    public function alert($message, array $context = array())
    {
        $this->log(LogLevel::ALERT, $message, $context);
    }

    /**
     * Critical conditions.
     *
     * Example: Application component unavailable, unexpected exception.
     *
     * @param string  $message
     * @param mixed[] $context
     *
     * @return void
     */
    public function critical($message, array $context = array())
    {
        $this->log(LogLevel::CRITICAL, $message, $context);
    }

    /**
     * Runtime errors that do not require immediate action but should typically
     * be logged and monitored.
     *
     * @param string  $message
     * @param mixed[] $context
     *
     * @return void
     */
    public function error($message, array $context = array())
    {
        $this->log(LogLevel::ERROR, $message, $context);
    }

    /**
     * Exceptional occurrences that are not errors.
     *
     * Example: Use of deprecated APIs, poor use of an API, undesirable things
     * that are not necessarily wrong.
     *
     * @param string  $message
     * @param mixed[] $context
     *
     * @return void
     */
    public function warning($message, array $context = array())
    {
        $this->log(LogLevel::WARNING, $message, $context);
    }

    /**
     * Normal but significant events.
     *
     * @param string  $message
     * @param mixed[] $context
     *
     * @return void
     */
    public function notice($message, array $context = array())
    {
        $this->log(LogLevel::NOTICE, $message, $context);
    }

    /**
     * Interesting events.
     *
     * Example: User logs in, SQL logs.
     *
     * @param string  $message
     * @param mixed[] $context
     *
     * @return void
     */
    public function info($message, array $context = array())
    {
        $this->log(LogLevel::INFO, $message, $context);
    }

    /**
     * Detailed debug information.
     *
     * @param string  $message
     * @param mixed[] $context
     *
     * @return void
     */
    public function debug($message, array $context = array())
    {
        $this->log(LogLevel::DEBUG, $message, $context);
    }
}
<?php

namespace Psr\Log;

class InvalidArgumentException extends \InvalidArgumentException
{
}
<?php

namespace Psr\Log;

/**
 * Describes log levels.
 */
class LogLevel
{
    const EMERGENCY = 'emergency';
    const ALERT     = 'alert';
    const CRITICAL  = 'critical';
    const ERROR     = 'error';
    const WARNING   = 'warning';
    const NOTICE    = 'notice';
    const INFO      = 'info';
    const DEBUG     = 'debug';
}
<?php

namespace Psr\Log;

/**
 * Describes a logger-aware instance.
 */
interface LoggerAwareInterface
{
    /**
     * Sets a logger instance on the object.
     *
     * @param LoggerInterface $logger
     *
     * @return void
     */
    public function setLogger(LoggerInterface $logger);
}
<?php

namespace Psr\Log;

/**
 * Basic Implementation of LoggerAwareInterface.
 */
trait LoggerAwareTrait
{
    /**
     * The logger instance.
     *
     * @var LoggerInterface|null
     */
    protected $logger;

    /**
     * Sets a logger.
     *
     * @param LoggerInterface $logger
     */
    public function setLogger(LoggerInterface $logger)
    {
        $this->logger = $logger;
    }
}
<?php

namespace Psr\Log;

/**
 * Describes a logger instance.
 *
 * The message MUST be a string or object implementing __toString().
 *
 * The message MAY contain placeholders in the form: {foo} where foo
 * will be replaced by the context data in key "foo".
 *
 * The context array can contain arbitrary data. The only assumption that
 * can be made by implementors is that if an Exception instance is given
 * to produce a stack trace, it MUST be in a key named "exception".
 *
 * See https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-3-logger-interface.md
 * for the full interface specification.
 */
interface LoggerInterface
{
    /**
     * System is unusable.
     *
     * @param string  $message
     * @param mixed[] $context
     *
     * @return void
     */
    public function emergency($message, array $context = array());

    /**
     * Action must be taken immediately.
     *
     * Example: Entire website down, database unavailable, etc. This should
     * trigger the SMS alerts and wake you up.
     *
     * @param string  $message
     * @param mixed[] $context
     *
     * @return void
     */
    public function alert($message, array $context = array());

    /**
     * Critical conditions.
     *
     * Example: Application component unavailable, unexpected exception.
     *
     * @param string  $message
     * @param mixed[] $context
     *
     * @return void
     */
    public function critical($message, array $context = array());

    /**
     * Runtime errors that do not require immediate action but should typically
     * be logged and monitored.
     *
     * @param string  $message
     * @param mixed[] $context
     *
     * @return void
     */
    public function error($message, array $context = array());

    /**
     * Exceptional occurrences that are not errors.
     *
     * Example: Use of deprecated APIs, poor use of an API, undesirable things
     * that are not necessarily wrong.
     *
     * @param string  $message
     * @param mixed[] $context
     *
     * @return void
     */
    public function warning($message, array $context = array());

    /**
     * Normal but significant events.
     *
     * @param string  $message
     * @param mixed[] $context
     *
     * @return void
     */
    public function notice($message, array $context = array());

    /**
     * Interesting events.
     *
     * Example: User logs in, SQL logs.
     *
     * @param string  $message
     * @param mixed[] $context
     *
     * @return void
     */
    public function info($message, array $context = array());

    /**
     * Detailed debug information.
     *
     * @param string  $message
     * @param mixed[] $context
     *
     * @return void
     */
    public function debug($message, array $context = array());

    /**
     * Logs with an arbitrary level.
     *
     * @param mixed   $level
     * @param string  $message
     * @param mixed[] $context
     *
     * @return void
     *
     * @throws \Psr\Log\InvalidArgumentException
     */
    public function log($level, $message, array $context = array());
}
<?php

namespace Psr\Log;

/**
 * This is a simple Logger trait that classes unable to extend AbstractLogger
 * (because they extend another class, etc) can include.
 *
 * It simply delegates all log-level-specific methods to the `log` method to
 * reduce boilerplate code that a simple Logger that does the same thing with
 * messages regardless of the error level has to implement.
 */
trait LoggerTrait
{
    /**
     * System is unusable.
     *
     * @param string $message
     * @param array  $context
     *
     * @return void
     */
    public function emergency($message, array $context = array())
    {
        $this->log(LogLevel::EMERGENCY, $message, $context);
    }

    /**
     * Action must be taken immediately.
     *
     * Example: Entire website down, database unavailable, etc. This should
     * trigger the SMS alerts and wake you up.
     *
     * @param string $message
     * @param array  $context
     *
     * @return void
     */
    public function alert($message, array $context = array())
    {
        $this->log(LogLevel::ALERT, $message, $context);
    }

    /**
     * Critical conditions.
     *
     * Example: Application component unavailable, unexpected exception.
     *
     * @param string $message
     * @param array  $context
     *
     * @return void
     */
    public function critical($message, array $context = array())
    {
        $this->log(LogLevel::CRITICAL, $message, $context);
    }

    /**
     * Runtime errors that do not require immediate action but should typically
     * be logged and monitored.
     *
     * @param string $message
     * @param array  $context
     *
     * @return void
     */
    public function error($message, array $context = array())
    {
        $this->log(LogLevel::ERROR, $message, $context);
    }

    /**
     * Exceptional occurrences that are not errors.
     *
     * Example: Use of deprecated APIs, poor use of an API, undesirable things
     * that are not necessarily wrong.
     *
     * @param string $message
     * @param array  $context
     *
     * @return void
     */
    public function warning($message, array $context = array())
    {
        $this->log(LogLevel::WARNING, $message, $context);
    }

    /**
     * Normal but significant events.
     *
     * @param string $message
     * @param array  $context
     *
     * @return void
     */
    public function notice($message, array $context = array())
    {
        $this->log(LogLevel::NOTICE, $message, $context);
    }

    /**
     * Interesting events.
     *
     * Example: User logs in, SQL logs.
     *
     * @param string $message
     * @param array  $context
     *
     * @return void
     */
    public function info($message, array $context = array())
    {
        $this->log(LogLevel::INFO, $message, $context);
    }

    /**
     * Detailed debug information.
     *
     * @param string $message
     * @param array  $context
     *
     * @return void
     */
    public function debug($message, array $context = array())
    {
        $this->log(LogLevel::DEBUG, $message, $context);
    }

    /**
     * Logs with an arbitrary level.
     *
     * @param mixed  $level
     * @param string $message
     * @param array  $context
     *
     * @return void
     *
     * @throws \Psr\Log\InvalidArgumentException
     */
    abstract public function log($level, $message, array $context = array());
}
<?php

namespace Psr\Log;

/**
 * This Logger can be used to avoid conditional log calls.
 *
 * Logging should always be optional, and if no logger is provided to your
 * library creating a NullLogger instance to have something to throw logs at
 * is a good way to avoid littering your code with `if ($this->logger) { }`
 * blocks.
 */
class NullLogger extends AbstractLogger
{
    /**
     * Logs with an arbitrary level.
     *
     * @param mixed  $level
     * @param string $message
     * @param array  $context
     *
     * @return void
     *
     * @throws \Psr\Log\InvalidArgumentException
     */
    public function log($level, $message, array $context = array())
    {
        // noop
    }
}
<?php

namespace Psr\Log\Test;

/**
 * This class is internal and does not follow the BC promise.
 *
 * Do NOT use this class in any way.
 *
 * @internal
 */
class DummyTest
{
    public function __toString()
    {
        return 'DummyTest';
    }
}
<?php

namespace Psr\Log\Test;

use Psr\Log\LoggerInterface;
use Psr\Log\LogLevel;
use PHPUnit\Framework\TestCase;

/**
 * Provides a base test class for ensuring compliance with the LoggerInterface.
 *
 * Implementors can extend the class and implement abstract methods to run this
 * as part of their test suite.
 */
abstract class LoggerInterfaceTest extends TestCase
{
    /**
     * @return LoggerInterface
     */
    abstract public function getLogger();

    /**
     * This must return the log messages in order.
     *
     * The simple formatting of the messages is: "<LOG LEVEL> <MESSAGE>".
     *
     * Example ->error('Foo') would yield "error Foo".
     *
     * @return string[]
     */
    abstract public function getLogs();

    public function testImplements()
    {
        $this->assertInstanceOf('Psr\Log\LoggerInterface', $this->getLogger());
    }

    /**
     * @dataProvider provideLevelsAndMessages
     */
    public function testLogsAtAllLevels($level, $message)
    {
        $logger = $this->getLogger();
        $logger->{$level}($message, array('user' => 'Bob'));
        $logger->log($level, $message, array('user' => 'Bob'));

        $expected = array(
            $level.' message of level '.$level.' with context: Bob',
            $level.' message of level '.$level.' with context: Bob',
        );
        $this->assertEquals($expected, $this->getLogs());
    }

    public function provideLevelsAndMessages()
    {
        return array(
            LogLevel::EMERGENCY => array(LogLevel::EMERGENCY, 'message of level emergency with context: {user}'),
            LogLevel::ALERT => array(LogLevel::ALERT, 'message of level alert with context: {user}'),
            LogLevel::CRITICAL => array(LogLevel::CRITICAL, 'message of level critical with context: {user}'),
            LogLevel::ERROR => array(LogLevel::ERROR, 'message of level error with context: {user}'),
            LogLevel::WARNING => array(LogLevel::WARNING, 'message of level warning with context: {user}'),
            LogLevel::NOTICE => array(LogLevel::NOTICE, 'message of level notice with context: {user}'),
            LogLevel::INFO => array(LogLevel::INFO, 'message of level info with context: {user}'),
            LogLevel::DEBUG => array(LogLevel::DEBUG, 'message of level debug with context: {user}'),
        );
    }

    /**
     * @expectedException \Psr\Log\InvalidArgumentException
     */
    public function testThrowsOnInvalidLevel()
    {
        $logger = $this->getLogger();
        $logger->log('invalid level', 'Foo');
    }

    public function testContextReplacement()
    {
        $logger = $this->getLogger();
        $logger->info('{Message {nothing} {user} {foo.bar} a}', array('user' => 'Bob', 'foo.bar' => 'Bar'));

        $expected = array('info {Message {nothing} Bob Bar a}');
        $this->assertEquals($expected, $this->getLogs());
    }

    public function testObjectCastToString()
    {
        if (method_exists($this, 'createPartialMock')) {
            $dummy = $this->createPartialMock('Psr\Log\Test\DummyTest', array('__toString'));
        } else {
            $dummy = $this->getMock('Psr\Log\Test\DummyTest', array('__toString'));
        }
        $dummy->expects($this->once())
            ->method('__toString')
            ->will($this->returnValue('DUMMY'));

        $this->getLogger()->warning($dummy);

        $expected = array('warning DUMMY');
        $this->assertEquals($expected, $this->getLogs());
    }

    public function testContextCanContainAnything()
    {
        $closed = fopen('php://memory', 'r');
        fclose($closed);

        $context = array(
            'bool' => true,
            'null' => null,
            'string' => 'Foo',
            'int' => 0,
            'float' => 0.5,
            'nested' => array('with object' => new DummyTest),
            'object' => new \DateTime,
            'resource' => fopen('php://memory', 'r'),
            'closed' => $closed,
        );

        $this->getLogger()->warning('Crazy context data', $context);

        $expected = array('warning Crazy context data');
        $this->assertEquals($expected, $this->getLogs());
    }

    public function testContextExceptionKeyCanBeExceptionOrOtherValues()
    {
        $logger = $this->getLogger();
        $logger->warning('Random message', array('exception' => 'oops'));
        $logger->critical('Uncaught Exception!', array('exception' => new \LogicException('Fail')));

        $expected = array(
            'warning Random message',
            'critical Uncaught Exception!'
        );
        $this->assertEquals($expected, $this->getLogs());
    }
}
<?php

namespace Psr\Log\Test;

use Psr\Log\AbstractLogger;

/**
 * Used for testing purposes.
 *
 * It records all records and gives you access to them for verification.
 *
 * @method bool hasEmergency($record)
 * @method bool hasAlert($record)
 * @method bool hasCritical($record)
 * @method bool hasError($record)
 * @method bool hasWarning($record)
 * @method bool hasNotice($record)
 * @method bool hasInfo($record)
 * @method bool hasDebug($record)
 *
 * @method bool hasEmergencyRecords()
 * @method bool hasAlertRecords()
 * @method bool hasCriticalRecords()
 * @method bool hasErrorRecords()
 * @method bool hasWarningRecords()
 * @method bool hasNoticeRecords()
 * @method bool hasInfoRecords()
 * @method bool hasDebugRecords()
 *
 * @method bool hasEmergencyThatContains($message)
 * @method bool hasAlertThatContains($message)
 * @method bool hasCriticalThatContains($message)
 * @method bool hasErrorThatContains($message)
 * @method bool hasWarningThatContains($message)
 * @method bool hasNoticeThatContains($message)
 * @method bool hasInfoThatContains($message)
 * @method bool hasDebugThatContains($message)
 *
 * @method bool hasEmergencyThatMatches($message)
 * @method bool hasAlertThatMatches($message)
 * @method bool hasCriticalThatMatches($message)
 * @method bool hasErrorThatMatches($message)
 * @method bool hasWarningThatMatches($message)
 * @method bool hasNoticeThatMatches($message)
 * @method bool hasInfoThatMatches($message)
 * @method bool hasDebugThatMatches($message)
 *
 * @method bool hasEmergencyThatPasses($message)
 * @method bool hasAlertThatPasses($message)
 * @method bool hasCriticalThatPasses($message)
 * @method bool hasErrorThatPasses($message)
 * @method bool hasWarningThatPasses($message)
 * @method bool hasNoticeThatPasses($message)
 * @method bool hasInfoThatPasses($message)
 * @method bool hasDebugThatPasses($message)
 */
class TestLogger extends AbstractLogger
{
    /**
     * @var array
     */
    public $records = [];

    public $recordsByLevel = [];

    /**
     * @inheritdoc
     */
    public function log($level, $message, array $context = [])
    {
        $record = [
            'level' => $level,
            'message' => $message,
            'context' => $context,
        ];

        $this->recordsByLevel[$record['level']][] = $record;
        $this->records[] = $record;
    }

    public function hasRecords($level)
    {
        return isset($this->recordsByLevel[$level]);
    }

    public function hasRecord($record, $level)
    {
        if (is_string($record)) {
            $record = ['message' => $record];
        }
        return $this->hasRecordThatPasses(function ($rec) use ($record) {
            if ($rec['message'] !== $record['message']) {
                return false;
            }
            if (isset($record['context']) && $rec['context'] !== $record['context']) {
                return false;
            }
            return true;
        }, $level);
    }

    public function hasRecordThatContains($message, $level)
    {
        return $this->hasRecordThatPasses(function ($rec) use ($message) {
            return strpos($rec['message'], $message) !== false;
        }, $level);
    }

    public function hasRecordThatMatches($regex, $level)
    {
        return $this->hasRecordThatPasses(function ($rec) use ($regex) {
            return preg_match($regex, $rec['message']) > 0;
        }, $level);
    }

    public function hasRecordThatPasses(callable $predicate, $level)
    {
        if (!isset($this->recordsByLevel[$level])) {
            return false;
        }
        foreach ($this->recordsByLevel[$level] as $i => $rec) {
            if (call_user_func($predicate, $rec, $i)) {
                return true;
            }
        }
        return false;
    }

    public function __call($method, $args)
    {
        if (preg_match('/(.*)(Debug|Info|Notice|Warning|Error|Critical|Alert|Emergency)(.*)/', $method, $matches) > 0) {
            $genericMethod = $matches[1] . ('Records' !== $matches[3] ? 'Record' : '') . $matches[3];
            $level = strtolower($matches[2]);
            if (method_exists($this, $genericMethod)) {
                $args[] = $level;
                return call_user_func_array([$this, $genericMethod], $args);
            }
        }
        throw new \BadMethodCallException('Call to undefined method ' . get_class($this) . '::' . $method . '()');
    }

    public function reset()
    {
        $this->records = [];
        $this->recordsByLevel = [];
    }
}
PSR Log
=======

This repository holds all interfaces/classes/traits related to
[PSR-3](https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-3-logger-interface.md).

Note that this is not a logger of its own. It is merely an interface that
describes a logger. See the specification for more details.

Installation
------------

```bash
composer require psr/log
```

Usage
-----

If you need a logger, you can use the interface like this:

```php
<?php

use Psr\Log\LoggerInterface;

class Foo
{
    private $logger;

    public function __construct(LoggerInterface $logger = null)
    {
        $this->logger = $logger;
    }

    public function doSomething()
    {
        if ($this->logger) {
            $this->logger->info('Doing work');
        }
           
        try {
            $this->doSomethingElse();
        } catch (Exception $exception) {
            $this->logger->error('Oh no!', array('exception' => $exception));
        }

        // do something useful
    }
}
```

You can then pick one of the implementations of the interface to get a logger.

If you want to implement the interface, you can require this package and
implement `Psr\Log\LoggerInterface` in your code. Please read the
[specification text](https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-3-logger-interface.md)
for details.
{
    "name": "psr/log",
    "description": "Common interface for logging libraries",
    "keywords": ["psr", "psr-3", "log"],
    "homepage": "https://github.com/php-fig/log",
    "license": "MIT",
    "authors": [
        {
            "name": "PHP-FIG",
            "homepage": "https://www.php-fig.org/"
        }
    ],
    "require": {
        "php": ">=5.3.0"
    },
    "autoload": {
        "psr-4": {
            "Psr\\Log\\": "Psr/Log/"
        }
    },
    "extra": {
        "branch-alias": {
            "dev-master": "1.1.x-dev"
        }
    }
}
Changelog
=========

--------

## 3.8.2 - 2022-01-23

### Fixed

* Avoid passing null to strlen(). [#186](https://github.com/thephpleague/climate/issues/186)
* [Support] Added compatibility for psr/log 2 & 3. [#191](https://github.com/thephpleague/climate/issues/191)

--------

## 3.8.1 - 2022-01-23

### Fixed

* [Linux] Avoid type issue when checking if \STDOUT is defined. [#185](https://github.com/thephpleague/climate/issues/185)

--------

## 3.8.0 - 2022-01-22

### Changed

* [Support] Added support for PHP 8.1.

### Fixed

* [Linux] Added a workaround for executed some parts of the code in a non-cli context. [#175](https://github.com/thephpleague/climate/pull/175)

--------

## 3.7.0 - 2021-01-10

### Changed

* [Support] Added support for PHP 8.0.
* [Support] Dropped support for PHP 7.2.

--------

## 3.6.0 - 2020-10-04

### Added

* [Arguments] Add a method to access trailing args as array. [#158](https://github.com/thephpleague/climate/pull/158)

### Fixed

* [Table] Add support for newlines in table data. [#160](https://github.com/thephpleague/climate/pull/160)
* [Checkbox] Don't try to add padding if the there's no spare space. [#161](https://github.com/thephpleague/climate/issues/161)

### Changed

* [Support] Dropped support for PHP 7.1.

--------

## 3.5.2 - 2019-12-01

### Fixed

* [Checkbox] Ensure we can output when the terminal width is unknown. [#156](https://github.com/thephpleague/climate/pull/156)

--------

## 3.5.1 - 2019-11-24

### Fixed

* [Art] Be stricter about matching filenames when looking for art. [#155](https://github.com/thephpleague/climate/issues/155)
* [Support] Provide better support for Windows using GitHub actions.

--------

## 3.5.0 - 2019-02-10

### Added

* [Arguments] Multiple arguments (eg `cli -d foo=bar -d baz=qux`) available via `$climate->arguments->getArray("d")`. [#111](https://github.com/thephpleague/climate/pull/111)
* [Arguments] A new method (`Argument::values()`) replaces the deprecated `valueArray()` method.
* [Spinner] Add an indeterminate progress spinner.
* [Exceptions] All exception now implement `League\CLImate\Exceptions\Exception`.
* [Basic] Allow single lines to be cleared using `$climate->clearLine()`. [#145](https://github.com/thephpleague/climate/issues/145).

### Fixed

* [Arguments] Mixing arguments with/without option values. [#122](https://github.com/thephpleague/climate/issues/122).
* [Output] Prevent `tput` output from being sent to the terminal.
* [Confirm] Accept more reasonable options for yes/no. [#126](https://github.com/thephpleague/climate/issues/126).
* [Radio] Allow ENTER to be used to choose an option. [#140](https://github.com/thephpleague/climate/issues/140).
* [Output] Improve the checks for ANSI color checks. [#128](https://github.com/thephpleague/climate/issues/128) / [#129](https://github.com/thephpleague/climate/issues/129).
* [Art] Only match filenames when looking for art. [#130](https://github.com/thephpleague/climate/issues/130)

### Changed

* [Support] Dropped support for PHP 5.6 and PHP 7.0

--------

## 3.4.1 - 2018-04-29

### Fixed

* [Json] Don't escape slashes when outputting JSON. [#121](https://github.com/thephpleague/climate/pull/121)

--------

## 3.4.0 - 2018-04-28

### Added

* [Logger] Added a Logger class to use CLImate as a PSR-3 logger.

--------

## 3.3.0 - 2018-04-20

### Fixed

* Ensure multibyte strings are supported everywhere.
* Improved support for IDE assistance when using method chaining. [#102](https://github.com/thephpleague/climate/pull/102)
* [Art] Improve handling of missing files. [#114](https://github.com/thephpleague/climate/issues/114)
* [Input] Correct the usage of `defaultTo()` with `accept()`. [#104](https://github.com/thephpleague/climate/pull/104)
* [Windows] Fixed the terminal width detection. [#64](https://github.com/thephpleague/climate/pull/64)

### Added

* [Table] Add support for a prefix argument for each row. [#51](https://github.com/thephpleague/climate/issues/51)
* [Progress] Added an `each()` method. [#112](https://github.com/thephpleague/climate/pull/112)

### Changed

* [Support] Add support for PHP 7.2
* [Support] Drop support for PHP 5.4
* [Support] Drop support for PHP 5.5
* [Support] Drop support for HHVM.
* Suggest the symfony polyfill library is `ext-mbstring` is not available. [#110](https://github.com/thephpleague/climate/pull/110)

--------

## 3.2.4 - 2016-10-30

### Fixed

* [Progres] Allow labels to be shown/hidden on each iteration. [#98](https://github.com/thephpleague/climate/pull/98)

--------

## 3.2.3 - 2016-10-17

### Added

* [Support] Added support for PHP 7.1

--------

## 3.2.2 - 2016-07-18

### Fixed

* [Art] Allow code to be used in a phar. [#86](https://github.com/thephpleague/climate/pull/86)

--------

## 3.2.1 - 2016-04-05

### Added

* [Arguments] Add a `trailing()` method to get any trailing arguments.
* [Progress] Added a `forceRedraw()` method. [#72](https://github.com/thephpleague/climate/issues/72)

### Fixed

* [Checkbox] Don't cancel out the formatting for the first checkbox. [#77](https://github.com/thephpleague/climate/issues/77)
* [Padding] Ensure formatting is handled. [#78](https://github.com/thephpleague/climate/issues/78)
* [Columns] Prevent error when less items than columns are passed. [#75](https://github.com/thephpleague/climate/pull/75)

--------

## 3.2.0 - 2015-08-13

### Added
- Multi-line support for `input` method [https://github.com/thephpleague/climate/pull/67](https://github.com/thephpleague/climate/pull/67)
- `extend` method for _much_ easier extending of CLImate

### Fixed
- Unnecessary progress bar re-drawing when the output hadn't changed [https://github.com/thephpleague/climate/pull/69](https://github.com/thephpleague/climate/pull/69)
- Progress label no longer removed once progress reaches 100% 
- Non-prefixed paramaters for `arguments` method now show in usage description [https://github.com/thephpleague/climate/issues/65](https://github.com/thephpleague/climate/issues/65)

## 3.1.1 - 2015-05-01

### Fixed
- Windows support added for `password` thanks to @Seldaek and [seld/cli-prompt](https://packagist.org/packages/seld/cli-prompt)

## 3.1.0 - 2015-04-30

### Added
- `password` prompt
- `checkboxes` prompt
- `radio` prompt
- 'file' as output option

## 3.0.0 - 2015-03-01

### Changed

- Custom output writers are added simply via the `output` property on CLImate now, as opposed to the immense amount of scaffolding required before

### Added

- Argument parsing
- StdErr output
- Buffer output
- `animate` method for running ASCII animations in the terminal. Because it's fun.
- Input now bolds the default response if it exists

## 2.6.1 - 2015-01-18

### Fixed

- Added `forceAnsiOn` and `forceAnsiOff` methods to address systems that were not identified correctly

## 2.6.0 - 2015-01-07

### Added

- Allow for passing an array of arrays into `columns` method
- `tab` method, for indenting text
- `padding` method, for padding strings to an equal width with a character
- `League\CLImate\TerminalObject\Repeatable` for repeatable objects such as `tab` and `br`
- `League\CLImate\Decorator\Parser\Ansi` and `League\CLImate\Decorator\Parser\NonAnsi`
- Factories:
    + `League\CLImate\Decorator\Parser\ParserFactory`
    + `League\CLImate\Util\System\SystemFactory`
- Terminal Objects now are appropriately namespaced as `Basic` or `Dynamic`
- Readers and Writers are appropriately namespaced as such under `League\CLImate\Util`

### Fixed

- Labels for `advance` method
- Non-ansi terminals will now have plaintext output instead of jumbled characters
- `border` method now default to full terminal width
# Contributor Code of Conduct

As contributors and maintainers of this project, and in the interest of fostering an open and welcoming community, we pledge to respect all people who contribute through reporting issues, posting feature requests, updating documentation, submitting pull requests or patches, and other activities.

We are committed to making participation in this project a harassment-free experience for everyone, regardless of level of experience, gender, gender identity and expression, sexual orientation, disability, personal appearance, body size, race, ethnicity, age, religion, or nationality.

Examples of unacceptable behavior by participants include:

* The use of sexualized language or imagery
* Personal attacks
* Trolling or insulting/derogatory comments
* Public or private harassment
* Publishing other's private information, such as physical or electronic addresses, without explicit permission
* Other unethical or unprofessional conduct.

Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct. By adopting this Code of Conduct, project maintainers commit themselves to fairly and consistently applying these principles to every aspect of managing this project. Project maintainers who do not follow or enforce the Code of Conduct may be permanently removed from the project team.

This code of conduct applies both within project spaces and in public spaces when an individual is representing the project or its community.

Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by opening an issue or contacting one or more of the project maintainers.

This Code of Conduct is adapted from the [Contributor Covenant](http://contributor-covenant.org), version 1.2.0, available at [http://contributor-covenant.org/version/1/2/0/](http://contributor-covenant.org/version/1/2/0/)
# Contributing

Contributions are **welcome** and will be fully **credited**.

We accept contributions via Pull Requests on [Github](https://github.com/thephpleague/climate).


## Pull Requests

- **[PSR-2 Coding Standard](https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-2-coding-style-guide.md)** - The easiest way to apply the conventions is to install [PHP Code Sniffer](http://pear.php.net/package/PHP_CodeSniffer).

- **Add tests!** - Your patch won't be accepted if it doesn't have tests.

- **Document any change in behaviour** - Make sure the `README.md` and any other relevant documentation are kept up-to-date.

- **Consider our release cycle** - We try to follow [SemVer v2.0.0](http://semver.org/). Randomly breaking public APIs is not an option.

- **Create feature branches** - Don't ask us to pull from your master branch.

- **One pull request per feature** - If you want to do more than one thing, send multiple pull requests.

- **Send coherent history** - Make sure each individual commit in your pull request is meaningful. If you had to make multiple intermediate commits while developing, please [squash them](http://www.git-scm.com/book/en/v2/Git-Tools-Rewriting-History#Changing-Multiple-Commit-Messages) before submitting.


## Running Tests

``` bash
$ composer test
```


**Happy coding**!
ARG PHP_VERSION=7.3
FROM php:${PHP_VERSION}-cli

ARG COVERAGE
RUN if [ "$COVERAGE" = "pcov" ]; then pecl install pcov && docker-php-ext-enable pcov; fi

# Install composer to manage PHP dependencies
RUN apt-get update && apt-get install -y git zip
RUN curl https://getcomposer.org/download/1.9.0/composer.phar -o /usr/local/sbin/composer
RUN chmod +x /usr/local/sbin/composer
RUN composer self-update

WORKDIR /app
The MIT License (MIT)

Copyright (c) 2014 Joe Tannenbaum

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
<p align="center"><img src="http://climate.thephpleague.com/img/CLImate_Blink.gif" width="300" alt="CLImate" /></p>

[![Latest Version](https://img.shields.io/github/tag/thephpleague/climate.svg?style=flat&label=release)](https://github.com/thephpleague/climate/tags)
[![Software License](https://img.shields.io/badge/license-MIT-brightgreen.svg?style=flat)](LICENSE.md)
[![Build Status](https://github.com/thephpleague/climate/workflows/.github/workflows/buildcheck.yml/badge.svg?branch=master)](https://github.com/thephpleague/climate/actions?query=branch%3Amaster+workflow%3Abuildcheck)
[![Coverage Status](https://img.shields.io/scrutinizer/coverage/g/thephpleague/climate.svg?style=flat)](https://scrutinizer-ci.com/g/thephpleague/climate/code-structure)
[![Quality Score](https://img.shields.io/scrutinizer/g/thephpleague/climate.svg?style=flat)](https://scrutinizer-ci.com/g/thephpleague/climate)
[![Total Downloads](https://img.shields.io/packagist/dt/league/climate.svg?style=flat)](https://packagist.org/packages/league/climate)

Running PHP from the command line? CLImate is your new best bud.

CLImate allows you to easily output colored text, special formats, and more.


## Installation

The recommended method of installing this library is via [Composer](https://getcomposer.org/).

Run the following command from your project root:

```bash
$ composer require league/climate
```


## Usage

```php
require_once __DIR__ . "/vendor/autoload.php";

$climate = new \League\CLImate\CLImate;

$climate->red('Whoa now this text is red.');
$climate->blue('Blue? Wow!');
```

_Read more at https://climate.thephpleague.com/_  


## Credits

This library was created by [Joe Tannenbaum](https://joe.codes/).  
It is currently maintained and developed by [Craig Duncan](https://twitter.com/duncan3dc).  
Much love to [Damian Makki](https://dribbble.com/damianmakki) for the logo.    
{
    "name": "league/climate",
    "description": "PHP's best friend for the terminal. CLImate allows you to easily output colored text, special formats, and more.",
    "keywords": ["cli","php", "terminal", "command", "colors"],
    "license": "MIT",
    "authors": [
        {
            "name": "Joe Tannenbaum",
            "email": "hey@joe.codes",
            "homepage": "http://joe.codes/",
            "role": "Developer"
        }, {
            "name": "Craig Duncan",
            "email": "git@duncanc.co.uk",
            "homepage": "https://github.com/duncan3dc",
            "role": "Developer"
        }
    ],
    "require": {
        "psr/log": "^1.0 || ^2.0 || ^3.0",
        "php": "^7.3 || ^8.0",
        "seld/cli-prompt": "^1.0"
    },
    "require-dev": {
        "phpunit/phpunit": "^9.5.10",
        "mockery/mockery": "^1.4.2",
        "mikey179/vfsstream": "^1.6.10"
    },
    "suggest": {
        "ext-mbstring": "If ext-mbstring is not available you MUST install symfony/polyfill-mbstring"
    },
    "autoload": {
        "psr-4": {
            "League\\CLImate\\": "src/"
        }
    },
    "autoload-dev": {
        "psr-4": {
            "League\\CLImate\\Tests\\": "tests/"
        }
    },
    "scripts": {
        "test": [
            "vendor/bin/phpunit",
            "@composer validate --strict"
        ]
    }
}
  _  _    ___  _  _
 | || |  / _ \| || |
 | || |_| | | | || |_
 |__   _| | | |__   _|
    | | | |_| |  | |
    |_|  \___/   |_|     ( )
      H
      H
     _H_
  .-'-.-'-.
 /         \
|           |
|   .-------'._
|  / /  '.' '. \
|  \ \ @   @ / /
|   '---------'
|    _______|
|  .'-+-+-+|
|  '.-+-+-+|
|    """""" |
'-.__   __.-'
     """  ______      _____ _      ______ _____
 |  ____/\   |_   _| |    |  ____|  __ \
 | |__ /  \    | | | |    | |__  | |  | |
 |  __/ /\ \   | | | |    |  __| | |  | |
 | | / ____ \ _| |_| |____| |____| |__| |
 |_|/_/    \_\_____|______|______|_____/<blue>     ( )</blue>
<blue>      H</blue>
<blue>      H</blue>
<blue>     _H_</blue>
<blue>  .-'-.-'-.</blue>
<blue> /         \</blue>
<blue>|           |</blue>
<blue>|   .-------'._</blue>
<blue>|  /<white>/  '.' '.</white> \</blue>
<blue>|  \<white>\ <black><blink>@   @</blink></black> /</white> /</blue>
<blue>|   '---------'</blue>
<blue>|    _______|</blue>
<blue>|  .'<black>-+-+-+</black>|</blue>
<blue>|  '.<black>-+-+-+</black>|</blue>
<blue>|    """""" |</blue>
<blue>'-.__   __.-'</blue>
<blue>     """</blue>  _____         _____ _____ ______ _____
 |  __ \ /\    / ____/ ____|  ____|  __ \
 | |__) /  \  | (___| (___ | |__  | |  | |
 |  ___/ /\ \  \___ \\___ \|  __| | |  | |
 | |  / ____ \ ____) |___) | |____| |__| |
 |_| /_/    \_\_____/_____/|______|_____/           __
    ____  / /_  ____
   / __ \/ __ \/ __ \
  / /_/ / / / / /_/ /
 / .___/_/ /_/ .___/
/_/         /_/hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyyyyyyyyyyyyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyssoo+/:--...`````````````..--:/++ossyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyso/:-.```                                ```.-:/osyyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyso/-.``                                                ``.-/+syhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhso/-``                                                            ``-:osyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhs+:.`                                                                      `.:+syhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyo:.`                                                                              `.:oyhhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhy+-`                              ```.`    `:::`     `....`                               `-+yhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhy+-`                              `+++///.   .o+-/o-   -o+://++`  .:`                           `-+shhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyo:`                         ::      `oo.```   .o+`  /s- `+o`  ``.   +s`   ./.                        `:oyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhy/.                            /s.      :s+/++.  -s/:::/s/ .s/  `/+/` -s:    +s`  -/-``                    ./shhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhys:`                  ``-//`      `o+`     .s/````` -s/----o+ .s/`  .+o``o+`   -s:  :s/:++/-                    `-oyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyo-                   `:++:-`        -s:  ``. oo//++/`.+.   `/:  -++++++- -s/`  `o+` -so.```-.                       .oyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyo.                 `-`  :s:`.:+`       /s//++/`.-.```               ````    :+++/+s. -s/:/+/`                           .oyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhho.                   .oo-  :oo+:.  `     `-.``                                  ``..` .so-` ``       `/+++-`                .oyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhs-                `:`   `/s:` -s/`./++.                  ```..........```                .-/++/       -o+.`-+o/                 .shhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhy:                ` .oo-`-/o/+o. -o+/-`           ``.-/+ossyyyhhyyyyyyhhyyysso+/:.``           `.     `+s-    `os`                  -yhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh+`               .o+` `:oo+-` `:s: `          `.:+syhhyyso+/::--........--::/+osyyhhys+/.`             -y:    .oo-  -+-               `/hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhy-               .os/`    .+o-    `         .:+shhys+/-.`                          `.-:+syhhso:.         `/o+:-/s/` :oo:oo-               -shhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhho`              `+o--oo-`    :o-         `-+shhs+:.`          ``.`  ...` `...   ``        `.:+shhs+-`        -//:.`:ooo-  .o/               `+hhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhh:                 `    -oo-`           `:oyhyo:.      ``` `.--` `--.` .--.` .--.` .--.   `      `:oyhho:`         -o+-`-oo`                    -hhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhy-                         -o+`        -oyhy+-`     `.` `.--` `.--` `--.` `--.` .--.` .--.  .-.`     `-/yhyo-`      `.     `                      .shhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhs`                            `      `:yhyo-`    `.` `.--` `.--` `.--` `--.` `--.` .--.` .--.` .--.      `.+yhy/.                                   `ohhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhh+`                                  .+yhs/`   `..``.--. `.--` `.--` `.--` `---` `--.` .--.` .--.` .--.   `   `:shh+.                                  `+hhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhho                                  .+hho-   ``` .--.``.--. `.--` `.--` `.--` `.--` `--.` `--.` .--.` .--.` `.`   -ohh+.                                  +hhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhh+`                                `/yho-   ` `--.``.--.``.--.``.--` `.--` `.--` `.--` `--.` `--.` .--.` .--.``..`   -ohh/`                                 /hhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhho                                 -yhs:    .-.` `--.` .--.``.--.``.--` `...  `..````..`  `.-.` `--.` .--.` .--.``..`   -shy:                                 +hhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhho`                               `ohy/`  `.` `--.` `--.` .--.``.-.` ``...-:://++++++++++//:-..``  `--.` `--.` .--.``.-`  `/yho`                               `ohhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhy`                               -shs.  ` `--.` `--.` `--.``.-. `.-:/++ooooooooooooooooooooooooo+:-```--.` `-.`  `.`   ..`  .shy:                               `yhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhy-                               /hh+`  `--` `.-.` `--.` `--. `-/+oooooooooooooooooooooooooooooooooso+-``.``````.....--` `..  `/hh/`                              -yhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhh/                               +hy:  `` `.--` `.-.` `--.` ``-osoooooooooooooooooooooooooooooooooo+/:--..--::/:::---... ..````  :yho`                              :hhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhs                              `+hy-   .--. `.--` `.-.` `-- `+soooooooooooooooooooooooooooooooooo/--:--:/+/-..` .` `...` `--.`    .yho`                              shhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhh-                              ohy-  ..``.--` `..` ``...` ``+soooooooooooooooooooooooooooooooo+:-::-:+o:.`.:+o/``.-` `--.` `--.`   .yho`                             -yhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhh+             -/               /hh-   .--. ```-/++++++/:-.  /soooooooooooooooooooooooooooooooo--/:-/oo-``-+oooooo:``--` `--.` `--.`  .yh+`              -/             +hhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhh.            -ss:             :hh:  ..``.`  -osooooooooos+ -sooooooooooooooooooooooooooooooo/./+.:os:``-osooooooos+-`.--` `.--` `--.  :hh/             -ss/`           `hhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhho       ..---/ooos/.````      `hh+   .--.   -sooooooooooo+`.oooooooooooooooooooooooooooooooo--o:.+so- .+sooooooooooos:``.--` `.--` `-.  /hh.      ..---/ooos/.````       ohhhhhhhhhhhhhhh
hhhhhhhhhhhhhhh:       -osssoooooosooo:`    `ohy` `.` .`  `ooooooooooooo` osoooooooooooooooooooooooooooos+.:s--oso` :ooooooooooooooos+` `.--` `.--` ``  sho`     -osssoooooosooo:`      -hhhhhhhhhhhhhhh
hhhhhhhhhhhhhhy`         -oooooooooo:.      -hh:  `--.`   .sooooooooooo-  +sooooooooooooooooooooooooooos/`+s-.ss+` :soooooooooooooooos+`  `.--` `.--`   -hh:       -oooooooooo:.        `shhhhhhhhhhhhhh
hhhhhhhhhhhhhh+           /sooooooo.        shs` `` `--   .sooooooooos- :`.oooooooooooooooooooooooooooo:`:s-.oso` :soooooooooooooooooos+ `. `.--` `.--` `ohs        /sooooooo.           /hhhhhhhhhhhhhh
hhhhhhhhhhhhhd-          .sooo/+oos-       .hd:  .--` `   `+oooooooos: -+/``+soooooooooooooooooooooooo.`:..`:/+- -soooooooooooooooooooos- --` `.--` `.-` -dh-      `sooo/+oos-           -dhhhhhhhhhhhhh
hhhhhhhhhhhhhh.          -/-`   .-+/       /dh`   `---`    .soooooos/ -////-`-ooooooooooooooooooooooo.`.::::---``oooooooooooooooooooooos/ `.--` `.--` ``  yh+      -/-`   .-+/           `hhhhhhhhhhhhhh
hhhhhhhhhhhhhy                            `ohs  .-` `.--  ` .oooooos- ///////.`:ooooooooooooooooooso`-+:``..---`/sooooooooooooooooooooos: ` `.--. `.--`   ohs`                            yhhhhhhhhhhhhh
hhhhhhhhhhhhhs                            .yh+  `.--` `-.    `+sooos/ -///////:.`-+sooooooooooooos+`-//:`+so+` .soooooooooooooooooooooos` --.  .--. `.--  /hy.                            ohhhhhhhhhhhhh
hhhhhhhhhhhhho                            .hh:  . `.--` `.     -osoos- ://///////-``/osooooooooos+`://:`+sos: `+oooooooooooooooooooooos/   .--.  .--. `.` -hh-                            ohhhhhhhhhhhhh
hhhhhhhhhhhhho                            .hh- `--` `.--`        -osos: -///////////-``:+ssoooos/`:///`/soso  :sooooooooooooooooooooooo``-.` .--.  .--.   -hh-                            +hhhhhhhhhhhhh
hhhhhhhhhhhhho                            .hh-   .--. `.--`        .+ss+.`:////////////-``-/oss/`:///`/soos-  osooooooooooooooooooooos-  `--.` `--.` .--` -hh-                            +hhhhhhhhhhhhh
hhhhhhhhhhhhho                            .hh:  .  .--. `.--`        `/os/``----://///////:-.`.`////`:soos/` :sooooooooooooooooooooos+ .-` `--.` `--.` .` -hh-                            ohhhhhhhhhhhhh
hhhhhhhhhhhhhs                            .yh+  --.  .--. `.--`     `   ..-:::..:`.//////////..////`:sooos```ooooooooooooooosssooooso. `.--` `--.` `--.`  /hh.                            ohhhhhhhhhhhhh
hhhhhhhhhhhhhy                            `sho   .--.` .--.  .--`  `-/+oooooos:`-`+..//////:`-////`-sooos:``.++oosssssoo+/:-..``....` ``  ``.` `--.` `--  ohs`                            shhhhhhhhhhhhh
hhhhhhhhhhhhhh`                            /dh` `` .--.` .--.  `.:+oooooooss/.-.`.+s/.-::/-`:////.-oooooo`-`--..``......---:::--.....``          `--.` `  yh+                            `hhhhhhhhhhhhhh
hhhhhhhhhhhhhd-                            .hd- `-.` `--.` ```:+oooooooso+:.-..://.-oo. ` ./////..ooooos--.`..```..........-::/+++oooooo++/:.`     `--.  -hd-                            .hhhhhhhhhhhhhh
hhhhhhhhhhhhhh+                             sho` `--.` `--  -ooooosso+/:-.-.-://///-.+s: -/////-.ooooos+`: ``....-:::/++oooooooooooooooooooooo+/.``` `.  ohy                             /hhhhhhhhhhhhhh
hhhhhhhhhhhhhhy`                            -hh-   `--.`  -.:+///::--.-..-://///////:`/s/`:///..ooooooo.:.:ooooooooooooooooooooooooooooooooooooos- --`  -hh:                            `shhhhhhhhhhhhhh
hhhhhhhhhhhhhhh-                  ``        `ohs  `` `--.``....```-`.-:///////////////`:s/`//.-oooooos-./`osooooooooooooooooooooooooooooooooooos/` `.`  shs`         `                  -hhhhhhhhhhhhhhh
hhhhhhhhhhhhhhho           `.-:/+++o`        .hh/  .-` `-.`.`::::`+/`/////////////////:`/s-..:sooooos+`+`.++oossooooooooooooooooooooooooooooos+- .-.   /hh.        `++` -::-            +hhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhh.         `++:-o/``o:         /hh:  .-.` ``..-///-.o-./////////////////:`o+.+oooooooo.// `.....-:/++ooosoooooooooooooooooooo/.`` `..  -yh/         :o` -s:-o/          `hhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhh+          -s. -o` .+`        `+hy.  `.--`  -`:///..s:./////////////////`:soooooooos.-o`` `.--`  `.....-::/++oooooooooo++:.`` .--.   .yho`         -o//o- .s:          /hhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhy-          +/  `  `:/`        `ohy.   `.--``-`:///.-s:.:///////////////`:sooooooos:.s- --` `.--` `.--`  `..````........` `--.``..  .shs`        `-``.-. `+/          .yhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhs           ``.```++-`         `ohy.    `.-.`:`////.-s+../////////////:`+ooooooos:`o/  `.--` `.--` `.--` `.-.` `.-.` `--.` .--.   .yho`        `/+` -`  ``           ohhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhh:          `+///+s:``.         `ohy:  ````...:.:///.-+s+--://///////-.+soooooos/.++`.-.``.--```.--` `.--` `.-.` `--.` `--.` .`  -yho`         /s. :o` -o`          :hhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhy-             .s/:/++.         `/hh/`  .. ``.:.-///-./oo+:---::::--:ooooooooo:.o+```.--.``.--```.--` `.--` `.--` `--.` `--`   :hh+`          -/++o/..o:          .yhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhy`          `/o/`  ` //`         :yho.  `..  `--.:///-./oso++////+oooooooos+--o/`.-.``.--.``.--` `.--` `.--` `.--` `--.` `  `ohy:          -/` `..:/+:          `shhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhho`          ..     `:s+`         .shy/   `..  .----:/:-.:+oooooooooooooo+:-+o-```.--.``.--.``.--. `.--` `.--` `.--` `.`   :yhs.         `/+- .++:. `          `+hhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhh+              .-/+/-/o`         `:yho-   `..  `-:::---.:+oooooooooo+:-:++:``--.` .--.``.--.``.--. `.--` `.--` `.-.    -ohy/`          /s.  ..`+s`           +hhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhh/           `++/.`   -:-          .+hho.   `..  `.:/++ooooo++///::-://:.`..` `--.` .--.``.--.``.--. `.--` `.--` `   .+hh+.            `/++-.`.o/           /hhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhh+           `     ./+/+/`          .+hho-   `.` `....``````..----..`..` `--.` `--.` `--.` .--.``.--. `.--. `.`   .+hho-          `---.``.:+++-           /hhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhh+`            `:+o+.  /s.           -+hho:`   `` `.--.  .-.`  .--` `--.` `--.` `--.` `--.` .--.``.--.``..`   `-ohho-           .s/::/++:`              /hhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhho`           :/.`++.-+o`             ./yhy+.       .--. `.--. `.--` `.--` `--.` `--.` `--.` `--.` .-.     ./shy+.              +o  .o//o-            +hhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhs.             .o+::. ``.-.           `:shhs/.      ..-. `.--. `.--` `.--` `--.` `--.` `--.` `-.      .:shhs:`            /:` `++/o-  `           .ohhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhy-            ::   .+++/:o/             `/shhs+-`      `   .--. `.--` `.--` `---` `--.` `.`      `-+shhs/`               `/o-  ./o+`            .yhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhh+              -+oo:` .s:                .:oyhhs/-`         ``  `...` `.-.` `..`           `-/oyhyo:.              :o-  .so:-` ``            /hhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhs.            .- `/o:o+` .//:`             `.:oyhhyo/:.`                            `.:/oyhhyo/.`             `-/- .+o++.`-/+.            .shhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh/`              -o+- `+o-.:o/.               `.-/osyhhyso+/:--..````````..--:/+osyhhyso/:.`               `/o:.`   .+o-`              `/hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhy-             ..  -o/`   .s:  .`                 `.-/+ossyyhhyyyyyyyyyyhyyysso+/-.`                     .s:      ` ./.             -shhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhho.               +o.  `/o:``+++/-`                      ``..............``                       -/+/-` .o+.  `++               .ohhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhy+`             `:++/++. .o+``.+o` ``                                                      ``   o+`./o/``:o/++:`             `+yhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhy+.             `...  -o++:.-o/``/o//:.                                              .-///++` oo .:+oo` `..`             `+yhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhy+.                `o- `+o:-  /s.`.:s- .:-.`                                 `.    :s:` `o/`.oo/-.`/:                .+yhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyo-`                  o/   :s-   -s- `+o:.`+/`   .`    ```    `.....  /-   :s.    +o.-/o:  `o+                   .oyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhs:`                ``  -s/.` -s-  .s:  .oo+  .s.  `+++o.  `o+:::o/ :o/.`o/     `+s:.`    ``                `:syhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhy+-`                 `.://++:  `++`  /o`+/`:o  .o/` :s-  o+  `/o` `:+oo`      `o/                     `-+yhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhs+.`                   `   -/o/`  s/ `o/o/  :s:---s+  /s//+s-     +o        ``                  `./shhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhys/-`                     ``.` `+.  `+o.  /s----s/  :s. `/+`    .:                         `-/syhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhs+-.                             `.   .-    :-  `:`   .`                            .-+shhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhys+-.`                                                                       `-/oyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhys+:.`                                                              `.-+oyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhso+:.``                                                  ``.:/oshhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyso+:-.```                                  ```.-:/osyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyyso++::-..``````````````````..-::/+osyyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyyyyyyyssyyyyyyyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyyyssooo+++////////////+++ooossyyyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyyso+//:-..````                          ````..-://+osyyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyyo+/:-.``                                                    ``.-:/+osyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyso/:.``                                                                    ``.-/+syhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyo+:.`                                                                                  `.:/oyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhhhhyo+-.`                                                                                            `.-+oyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhhhhyo:.`                                                                                                      `.:oshhhhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyo:.                                                                                                                .:oyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhhhys/.`                                                                                                                       .:oyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhy+-`                                                                                                                              `-+yhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhy+-                                                  ``..        -++++-         .---..``                                                 ./yhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhy/.                                               -//oosssss.     `+yo:/sy:      .ossoossss+-     ..                                           ./yhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh+.                                                  /ys:...``      `oyo`  -sy+`    oy+`  ``.:o:    `sy/                                             ./yhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhho-                                       `+s/          -sy-          `oyo`    `oy+   -sy-             +yo`      +s:                                       -ohhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhdy:`                                          :ys.          oso/+osys`   `sy:`.....:yo`  :ys`   `o+//-   -yy-      :ys.    .:.                                   :ydhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhds-                                `.            oyo          :ys/:--.`    `ssssssssssso`  +y+    `-:oy/  `oy+      `sy/    -ysys+:.                                 .ohhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhh/`                               .:oyy:           .sy:         .sy-         `oy/``    -ys` `oyo`     -sy-  :ys.      +yo`   .sy/`-/osss-                                `/hdhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhdy:                              .-+syo/-`             /ys.         +y+-:/+ooy: `oy/      -ss`  `+ysso+++ss+  `sy/      -sy:   -sy/     `-:`                                   :ydhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhdy:                                /ys/`     `           `oy+ `.-:+s- :yoo+/:--.`                   `---:/+:`    /ys/-.` `oy+   .ssoss/-.                                          -sdhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhdy-                            .:`    :ss: `-+sy:           -ysosso+/:.                                             -/oossssss.  .sy/`.:+sy:                                           -sdhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhdy:                             `oys-    -ssoss+:`             :/-.`                                                      `.--.`  .sy+`     `            `:++o+-                           -sdhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhh:`                                :sy+`   .ss+`    `.+:                                                                           ./osso:.`             -syo//oso/.                          :ydhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhh/`                         .+:       .oss-   .sy+`./oss+:`                             ``......----......```                          ``-/osso`         `+ys:`  `-+ss/                          `/hhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhdo.                           -sy+.   ./os+os+`  .ossso/-`                     `..://+ossyyyhhhhhhhhhhhhhhhhyyysso++/:-.`                     `--         :sy+.       /ys.                           `+dhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhy-                        `/:`  `+ys:-oss/.``+ys:` `/:``                 `.-/+osyhhhhhhhhhyyyysssoooooooosssyyyyhhhhhhhhhyso+/-.`                         /ys:        :sy+`   ``                        -sdhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhh+`                       `/ss/`    -osso-`     -ss-                  `.:+syhhhhhhhyso+/:-..``````           ``````.-::++oyyhhhhhhyso:.`                    /ys.      .oys-   `:os/`                       `/hhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhdy.                       `/sy+`       `/ss/`      ``               .:+syhhhhhys+/-.``                                      ``.-/+oyhhhhhys+:.`               `+ss+-```:ss/`  `:oy+/ss/.                       .sdhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhd+`                      `/ss+os+.        -oyo-                  .-+shhhhhyo+:.`                                                    `.-/oyhhhhhs+:.              `:osoooso-  `:oso-` `/ss/.                       /hhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhy-                       `oy/` ./ss+.       `/s/`             `./shhhhhs+:.`             `    `...`   `----`   .---.`    ```              `.:+shhhhhs+-`             .::-.` `:osoos/`   `/s/                        .ydyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhdo`                         ``     ./ss+.       `            `-+yhhhhyo:.           `    .---.   .----`   .----`  `.----`  `.---.`               .-+yhhhhyo-`               `/sso-``/ss/`   `                          `+dhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhd/                                    ./ss+.               `.+yhhhhs/.`            `---.`  `----.   `----.   .----`  `.----`  `.---.`  `..``         `./shhhhy+-`            .oo-     .+o.                                :hhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhh-                                       `/so.            `/yhhhhs/.          .--.`  `.---.`  `----.   `----.   .----`   .----`  `.---.`  `.--..`         .:shhhhy+.                                                        -hhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhy.                                          `           `-ohhhhy/.        `.`  `.---.`  `.---.`  `----.   `----.   `----`   .----`  `.---.`  `.---.`          .:shhhhs-`                                                      `sdyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyds`                                                     `:yhhhho-          .----`  `.---.`  `.---.`  `----.   `----.   `----`   .----`  `.---.`  `.---.`           .+yhhhy/`                                                     `odhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhdo`                                                    `/yhhhy/`       .--`   .----`  `.---.`  `.---.`  `----.   `----.   `----`   .----`   .----`  `.---.`   ``      `:shhhh/`                                                     +dhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhdo                                                    `/hhhhs-          .----`   .----`   .----`  `.---.`  `----.   `----.   `----`   .----`   .----`  `.---.`  `..`      -shhhh/`                                                    +dhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhdo                                                    :hhhhs-      `---.   `----`   .----`   .----`  `.---.`  `----.   `----.   `----`   .----`   .----`  `.---.`  `--`      .ohhhh/`                                                   +dhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhydo                                                   -ydhds-      `  `----.   `----`   .----`   .----`  `.---.`  `.---.`  `----.   `----.   `----`   .----`   .----`  `--.      .sdhhh:                                                   +dhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhydo                                                  `odhhy-      .--.   `----.   `----`   .----`   .----`   .---.   `....    `....`   `--:-.   `----`   .----`   .---.`  `-:.      -ydhds.                                                  +dhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhyds                                                  /dhhd/        `.---.`  `----.   `----.   `----`   .---.    `    ```.....--....```    ```.-.   `----`   .----`   .----`  `.:.`     :hhhd+                                                  odyhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhyhy`                                                `ydyds`     .:-`  `.---.`  `----.   `----.   `--.`      `.--//+ooosssssssssssssssssoo++/-.`       `----`   .----`   .----`   .:.     `odhdy.                                                 sdyhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhh.                                                :dhhd:       .----`   .---.`  `----.   `--:-`    `.-:/+oossssoooooooooooooooooooooooooooossso+/-`    `----`   `--:-`   .--.`    .:.     -hhhd/                                                `hhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhd:                                                +dyds`    `-`   .----`   .----`  `.---.`  ``  .:+ossssoooooooooooooooooooooooooooooooooooooooooosso+-`  `.---`   ```               .:`    `odydo`                                               -dhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhyd+                                               `ydhd/     `----`   .----`   .----`  `.-:-`  ./ossooooooooooooooooooooooooooooooooooooooooooooooooooosss+.  ``.`..``` ``..---::/+-     .-`    :dhhh.                                               /dyhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhy`                                              .hhhh-    `   `----`   .----`   .----`  `.  .+ssooooooooooooooooooooooooooooooooooooooooooooooooooosso/-`..--..`.-:++ooo++//:-----` .-`  `.`    -hhhh-                                               sdyhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhh.                                              -hhhh.    .:-.   `----`   .----`   .----`  `/ssooooooooooooooooooooooooooooooooooooooooooooooooooss+-`.-/:-`.-/ooo+:-.`      ```     .:--`  ``    `ydhd:                                              `hhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhyd+                                              -dhhy.     `----.   `----.   .----`   .:-` `osooooooooooooooooooooooooooooooooooooooooooooooooosso:`.:+:.`-/oso/-`  `   .-.   `-:--.   `----`       `sdhd:                                              :dhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhy`                                             -hhdy`   `.`  `----.   `...`    ..---`  `` `osooooooooooooooooooooooooooooooooooooooooooooooooss/.`-++-`./oyo:.  `./+so-  `--.   `----.   .----`      `sdhd:                                              sdhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhd:                    .`                       .hhhy`   `-:-.`  `-.`   `.........``  ``   `+soooooooooooooooooooooooooooooooooooooooooooooooss/.`:s/.`:oss+-`  ./ossooos+.  .--.`  `----.   `----`     `sdhd-                        .`                   -dhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhds                    .y+                      `yhhh.     `.---.     `:+osssssssssoo+/:-`  /yooooooooooooooooooooooooooooooooooooooooooooooos+. :s+``:oss+.   -+ssoooooooss/` `-:-.`  `----.   `----`    `yhhh.                      .so`                   odhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhd:                   -sss/                     sdhh-   `-`  `.-`   `/ssoooooooooooooooy+  -sooooooooooooooooooooooooooooooooooooooooooooooss: .ss- -osso-   -osooooooooooooss:  `---.`  `----.   `----`   .hhhy`                    -sss/                   -hhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhy                   :sooos/                   +dhd/    -:--`      `+sooooooooooooooooso` .ssooooooooooooooooooooooooooooooooooooooooooooos+``/y/``+sos/`  .+ssooooooooooooooos+` `.---.`  `----.   `-:-`   -dhdo                   :ssoos/                   sdhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhd/          .--::///+sooooos/-..```           -dhdo      .--:.     /sooooooooooooooooss. `osooooooooooooooooooooooooooooooooooooooooooooss: .oy- -ssss:   :ssooooooooooooooooooss-  `.---.`  `----.   `--    +dhd:         .--::///+sooooos/-..```            -dhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhh`          `/ssssssoooooooossssoooo-        `sdhy`   ..   .-`    -sooooooooooooooooss-  +sooooooooooooooooooooooooooooooooooooooooooooso. :ss. :soss.  `+soooooooooooooooooooooss:   `.---.`  `----.`  ..   `sdhy`        `/ssssssoooooooossssoooo-          `yhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhd+             .+ssooooooooooooooso:`         /dhd:   `:--`        +soooooooooooooooos-  `ssooooooooooooooooooooooooooooooooooooooooooos+``+ys. /soss.  `osoooooooooooooooooooooooos/    `.---.`  `.---.`      -dhd+          ./ssooooooooooooooso/`            /dhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhd:               .+soooooooooooso-`          `yhds     .----`      osooooooooooooooos/    /yoooooooooooooooooooooooooooooooooooooooooos/ `oss. /soss.  `osoooooooooooooooooooooooooos/     `.---.`  `.---.      odhh.           .+soooooooooooso:`              -dhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhy`                -soooooooooos/             /dhd:   `   `--:`     osoooooooooooooos/  -. `+soooooooooooooooooooooooooooooooooooooooss: .sss. :soss-  `osooooooooooooooooooooooooooooy:  .`  `.---.`  `.---.`   .hhd+            -yoooooooooos/                  sdhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhdo                 osoooossoooos+            `yhds   `--.   `-.     /yooooooooooooos+  .++. `+soooooooooooooooooooooooooooooooooooooss. ``./- :yssy:  `osoooooooooooooooooooooooooooooos.  --`  `.---.`  `.---`   odhh.           +soooossoooos+                  +dhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhd:                -yssso+::+ssoso`           -dhd/   `----.   `     `ssoooooooooooso` `///+.  :ssooooooooooooooooooooooooooooooooooso` -/:-.``..:+:   /yooooooooooooooooooooooooooooooos+  .:--`  `.---.`  `.:.   -dhd/          .sssso+::+ssoss`                 -dhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhd-                +o/-.`    .-+oy-           odhh.     `----.        -sooooooooooss. `/+///+:` .+sooooooooooooooooooooooooooooooooso` `::::::::-...` -sooooooooooooooooooooooooooooooooso`  .----`  `.---.`  `.`  `yhds          +o/-.`    `-+oy-                 .hhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhh`                `            `-.          `yhds   `-`  `----.    `  :sooooooooos/  :+///////.  .osooooooooooooooooooooooooooooos+``:-``.-::::::/: `osooooooooooooooooooooooooooooooooso`    .----`   .----`      +dhh`         `            `-.                  yhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhs                                           .hhd/   .:-.`  `----`   `  -ssoooooooy:  :+///////+/.  -ossooooooooooooooooooooooooos/ `/+/+- ````...-` /yooooooooooooooooooooooooooooooooos+  ..   .----`   .----`    :dhd:                                           odhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhdo                                           /dhd:   `.---.`  `-:-       .osoooooos+  -+/////////+/.  ./ssoooooooooooooooooooooos/ `///+: .sso++:   .soooooooooooooooooooooooooooooooooos.  -:-`   .----`   .---.   -dhd+                                           +dhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhd+                                           +dhh.     `.---.`  `--        :ssooooos-  :+//////////+/-` `-ossooooooooooooooooooy: .+//+: `osooos.   +sooooooooooooooooooooooooooooooooos/   `----.   `----`   .-:`  `yhdo                                           /dhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhd/                                           odhy`  `-`  `.---.`  `.        `+ssoooss.  :+////////////+:.  .:ossoooooooooooooos- .+//+/ `osoooy/   :yoooooooooooooooooooooooooooooooooos.     `----.   `----`   .`   sdds                                           /dhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhd/                                           odhy   `:--`   .----`            .+ssooss-  -+/////////////+/:.  `:ossoooooooooss- .+//+/  +soooso`  `osoooooooooooooooooooooooooooooooooy/  .:.   `----.   `----`      sdds                                           :dhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhd/                                           odhy    .----`   .----`            `/ssoos+` `:+//////////////+/:.  `-/ossooooss. -+////` +sooooy:   :yoooooooooooooooooooooooooooooooooso`  ----.   `----.   `----`    sdds                                           :dhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhd/                                           odhy      .----`   .----`            `:ssoss:  `/+///////////////+//-`  `-+osss. -+///+` /yoooos+   `ssoooooooooooooooooooooooooooooooooy-    `----.   `----.   `--:`   sdds                                           :dhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhd/                                           odhy`  `.   .----`   .----`             -+ssss:` `:/::://////////////+/:.`  `-` :+///+. :yooooss. ` /yooooooooooooooooooooooooooooooooos+  .-`  `.---.`  `----.   `-`   sdds                                           :dhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhd+                                           +dhh.   --.   `----`   .----`             `:/--`      `.``-/+///////////////. `/+///+. -yoooooy/ ` `ssooooooooooooooooooooooooooooooooss.  ----`  `.---.`  `----.      `yhdo                                           /dhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhdo                                           /dhd:   .:--.   `----`   .----`       ``    `.-://++/- .+.  -/+///////////+- `/////+- -ssooooso``. /yoooooooooooooooooooossssssoooooosy-    .--:-`  `.---.`  `.---.    .hhd+                                           +dhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhds                                           -hhd/    `----.   `----`   .----`     `.-/+ossssooooso``+` /. -///////////. .+////+- .ssoooooy- -``ossssssoooooooossssoo/::-..````````.  ```   ``.-`  `.---.`  `.-:.   :dhd:                                           odhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhy`                                          `yhdo      `----.   `----`   .-.`  .-+ossoooooooooss/``/. :ys/``-+/////+:` :+////+: .ssooooos+ .-  ``.-::/++ooooo/:-.`` ``..--:::::---..`          ``   `.---.`  `-.   +dhh.                                           shhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhh.                                           odhh`   .`  `----.   `----`    ./ossoooooooooooss/.`--````:sss: `-:://- `/+////+: `osoooooos. :``/::-.`     `````..-:////:--..```````````                `.---.`     `yhds                                           `hhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhd:                                           :dhd:   .:.`  `----.   `-`  `:ossoooooooooosss+:`.--``-++:``/ss+`  `   -+/////+: `osoooooos/ -: `-..```````.---:---.``````..-://++oooooooo++//:..`         `.----`   -dhd/                                           -dhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhdo                                           `yhds   `---.`  `----.    `/ssooooooooossso/:`.---``-//////. -sss- ` `:+/////+: `osooooooss``/` ``..```...```````..-://+oossssssoooooooooooossssso+:.`   ``   .-:`   odhh.                                           /dhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhy`                                           +dhd-   `.---.`  `-:.   .ssoooooosssoo/:...---``-:////////+: `+ss:  /+/////+: `+sooooooos: /: `````...--::/+++oossssssooooooooooooooooooooooooooossso+:.  ``  `.   .hhdo                                            sdhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhd-                                           `hhdo     `.---.`  ` .. /soooooo//-....---.``-:////////////+/` /ss/``/+///+: `osooooooos+ .o `ooooooosssssssooooooooooooooooooooooooooooooooooooooooooss. `:-`     +dhh.                                           .hhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhd+                                            /dhd-      `.---.`  -+-`......``...-.`..-:///////////////////` /ss+ `///+: `osoooooooss. o: /yoooooooooooooooooooooooooooooooooooooooooooooooooooooooy/  `--:.   .hhdo                                            /dhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhy`                           `.`             `yhhy`   .`  `.---.  ``....`````.. `::///////////////////////+. :sy/ `++- .osooooooooy: :o `ssoooooooooooooooooooooooooooooooooooooooooooooooooooooss/`    .-    sdhh.              ``                            sdhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhd:                    ``.-/+osy/              :dhd+    --`  `.-:` -` :::::/` +s` /+/////////////////////////` /ss- -- -ssoooooooos+ `y- /yssssoooooooooooooooooooooooooooooooooooooooooooooooosso.  .-.      /dhd/              -so`   .-.`                   -dhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhds                .//+oosso/-.+y-              odhd:   `---`  `.- `- .+///+: `so `/////////////////////////+/ `oyo` `:ssooooooooss. oo  `..-:/+ooossssooooooooooooooooooooooooooooooooooooooss+-   `----`   -hhds              -yo.  `+sooso.                 odhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhd-               -ys:.`.yo`  .yo`             `yhhh.   `----`  `` -- :+///+- .y+ `/////////////////////////+- .sy-`osoooooooooos- :y.  ...``   ``.-:/++oosssssooooooooooooooooooooooooooss+:`  ..   `-.   `yhhh`             `oy.  `+y/``-ss.               .hhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhds                /h-   /h/   /h:              .hhhy`    .----`    :. /+///+. :y/ `/+////////////////////////` +soosoooooooooos/ .y/    `----.    ```  ``..:/++oossssssssoooooooossssso+:.    .:--.       sdhd-              `oy+..+y+   -yo`               odhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhd:               `ss.  `/.   `.`               -dhds`     .----`  `/``//////` /y+``:+//////////////////////+. /yoooooooooooos+ `ss` --`  `.---.`  `----.      ``...-:///++++o++++/:-.`  `..`  `.---`    odhd/                `/+oss/   -sy.               .hhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhds`               :s:        `:+o.              :dhds`      .----` ./ `//////` +yo. -//////////////////////+` +soooooooooooso` +y: `---.`  `.---.`  `----.   `....`              ````   .---.`  `-`    +dhd/              `/:    ``   .so.                odhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhd/                         `oy+-`               :dhds`       .--:. -/ `////+/` +ys/``:+//////////////////+: .ssooooooooooss` /y/    .---.`  `.---.`  `----.   `-:--.   `----`   .-:--`   .---.`      odhd/               +y:   `                        :dhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhh.                .:+o/:.`/y/                   :dhdy`    `   .-:. :+ `//////` /sso- `:+///////////////+: `osooooooooooss. /y+` .`  `.---.`  `.---.`  `----.   `----.   `----`   .----`   .-:-    `sdhd/               /y:   :y/   .:`                `yhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhyds                .o:-:ososs:.   .               -hhhh.    `.   `:. -+``/+///+. -ssso:``-/+//////////+/- .osooooooooooss. /yo` .:--`   .----`  `.---.`  `----.   `----.   `----`   .----`   `    .ydhd:               /y+`  -yo`  `sy-                odyhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhyd/                     `ss/+ssosy:               .hhhd:    `-.   .. -o. :+///+: `+soss/. .-////////:.``/ssooooooooooss. /yo`   .----`   .----`  `.---.`  `----.   `----.   `----`   .----`     -hhhd-                /+oso+os.  `oy-                :dhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhd-                   `+h/  `.-.``-               `sdhd+     .:.   ` `+: .////+/. .ososso/-.````` `.:ossooooooooooos+``+y+` -.   .----`   .----`   .----`  `.---.   `----.   `----`   `-.     /dhdy.                    .-/osso/+y:                .hhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhh`                .osy+        +h+                /dhhh.     .:.     :+. -++//+/. -ossoosssooooosssooooooooooooss- .sy/  -:--.   `----`   .----`   .----`  `.---.`  `----.   `----.       .ydyd+                -oy-       .-+s/                `ydhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhyds                 --`          :yo`               .hhhd+     `-:.    `:/. .:/+++/. .+ssoooooooooooooooooooooss: `+ys.    `----.   `----`   .----`   .----`  `.---.`  `----.   `-:-`     /dhhh-               `+y+.   +y+-`                     odyhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhydo                          .:ososs.                +dhhh-     `-:.     :+:. `.--::` `-/osoooooooooooooosss+- .+ys: `-:.   `----.   `----`   .----`   .----`  `.---.`  `----.   `     -ydhdo`               `oy:   `os:/sy/                   +dyhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhd+                     `-+syo:. `sy-                .ydhds.     `-:.     ./oo+:-----:/+osooooooooosssso/-`.:oyo-   `.---.   `----.   `----.   `----`   .----`   .----`  `.-:-      .odhdy-                 -ys`    ``  .sy.                 /dhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhd+                  :oss+-`     `:`.                 :hhhdo.     `.:.`    `.:+sssssssssssssssooo+::.``-/oso:.``--`  `.---.   `----.   `----.   .----`   .----`  `.---.`  ``     `+hhhh/                    /sso:.    `+y/                 :dhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhd+                 ./.         `:oyo.                `+hhhho.      .--`  `..```..--------..`..---/+++/-.``   .----`  `.---.`  `----.   `----.   `----`   .----`   .-:-`      `+hhhdo`                      `-/oss/-:oy:                 :dhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhd+                         `-+ss/-oy:                 `+hhhho.      `..`  `---..        `..---..```   ----`   .----`  `.---.`  `----.   `----.   `----`   .----`  ``      .+hhhdo.                 ://::-.`   `:+o+/.                 /dhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhd+                      ./sso-`  `/yo.                 .+hhhhs-       ``   `----.   `.-...   `.---`   .----`   .----`  `.---.`  `.---.`  `----.   `----`   .--.`       -ohhhho.                 .os//++oss+-`                       /dhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhdo`                  :sso:+y/`   `oh/                   `+hhhhy/.           `.---.`  `----.   `----.   .----`   .----`  `.---.`  `.---.`  `----.   `----.          `:shhhh+.                   -ys.    `+sss+.`                   +dhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhds`                 ./.   -yo:-+ss/`                     `:shhhho-`          `.---.`  `----.   `----`   .----`   .----`  `.---.`  `.---.`  `----.`  `..`       `-ohhhhy/`                      :yo`  .oy/`-oo.                 `odhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhy.                     `/s++o+-`      ``                 `-+hhhhyo-`         `.---.`  `----.   `----.   .----`   .----`  `.---.`  `.---.`  `---.          `-+yhhhho-`                  -/`    /yo-:so.   ``                 .ydyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhh:                   `oy/`     .:/++oso:`                  `:ohhhhyo:.          `...`  `.---.`  `----.   `----`   .----`   .---.`  `.---.   `         `-+yhhhhs:`                     :ss/`   ./sss-`                     -hhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhd+`                  /:     .+so//:..+y/                     `:ohhhhho/.`               `----.`  `----.   `----`   .----`   .---.   ``           `./oyhhhhs/.                         `/ss.    `:+yo`                   /dhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhds.                     `-+sss.    `sy.                        .:oyhhhhyo/.`              ```.`   `----.   `----`   .---.   ``              `.:oyhhhhyo:.                     .o+.    `oy+-``    ..                  `odhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhh/                    :yo..+y+.  /y+     ``                     `./oyhhhhys+:.`                      `     ````                      `.:+syhhhhyo/.`                        `:ss+``:so//oso+:`                    :hhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhdo`                   .    .+s/+y+`  `:+oo+-`                      `./oyhhhhhys+/-.``                                        ``.-/+syhhhhhyo+-`                      `-/+o.  `:osos:`  `.:+-                   `+dhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhh:                       `-ss+-   -sy/--/ss/.                        `.-+oyhhhhhhhyo+/:--.````                  ````.--:/+osyhhhhhhys+:.`                        `/ss+-.`    `:os+.                         :yhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhds.                     /y+.   `+yo.    `:ss.                            `.-/+osyhhhhhhhhyyysso++++++//++++++ossyyyhhhhhhhhyss+/-.`                             +h/`          `-oy+`                     .odhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhh+`                    .    -ss:       -ss.  `-`                              `.-:/+ossyyhhhhhhhhhhhhhhhhhhhhhhyysso+/:-.`                                    +y+`        `    :-                    `/hhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhy:                        +h/      `+yo.  `oyso:.`                                   ```...-----::::-----....``                                    ./+/-`    :ss:      -s+                        -ydhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhds-                      .oso-` `:ss:   .sy-`:oss/`                                                                                              /yo:/sso/.  `+yo.``-+yo.                      .sdhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhds.                      .+ssosy+`   :ys.    `+h/   ``                                                                                  ``     /h:  `./sy:   -sssss+.                      .odhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhdo.                      `--.`    /yss/-`  :ss.  `oyo+:.`                                                                        `.:/osso-   /h:   `-+sy/    `..`                      .odhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhdo.                           `+y+`.+so+oyo`   +y/.:+sss-                                                                    .osso:.`.oy:  :yo.-oss/./yo`                          .odhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhds-                         -s/    -y+-.    /yo`    .sy-  /s/:-.`                                                  .:`      /y+`    .sy-  :sss:.    /:`                        .odhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhdy:                              +h:     :ys`     -ys`  `-ss+o. .o/`                                     -:`     +h/       +h+  `-+ys`   .ss:                              -sdhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh+`                           -o.    -ys.     .sy.    +y/    :yso     :y/      :++/.     `/++oooss+.  oh/     +y:        +yooso/-`     `o:`                          `/hdhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhds-                               .sy+-`   .sy-    :yo     os+s+    +y-    `oy/:sy:    `ss:....:ss. `/ys:` /h+         `oy/                                      -ohhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhhy+.                             .-/ossoosy:    `sy-    .yo -h+  .so`   -yy-  `oy/    +y-     oy-   `:ss+so`          `sy:                                  `/ydhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhy:`                               .-:.    ../y/     /h/  :h+ :h/   .ss.    `oy:   /y+...-/ss.      -sy-            .:.                               `:shhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhs:`                                   `/ooso/    oy.   /y/+y-   .so+/////oy:   -yooo++ss.        :yo                                           `-ohhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhs:`                                    `-.   -y+     /yso    -yo--::::oy-   .ss`   -ys.       `+/`                                       `-ohhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhs/.                                        `       :s:    -yo     `sy-   `oy-    -o+`                                              .:shhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhy+-`                                                   `.`      ..`    ``                                                   `-+shhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhs/-`                                                                                                                `-/syhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhys/-`                                                                                                        `-/oyhhhhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhs+:.`                                                                                              `.:+syhhhhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhys+:.`                                                                                    `.:+oyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyso/:.``                                                                      ``.:/osyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyyo+/:..``                                                      ``..-/+osyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyss++/:-..````                               ```..-:/++ssyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyyssso+++////::::::::::::////+++oossyyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyyyyysssooo+++++++//////////++++++++oossssyyyyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyyyso++//::--....```                                  ````....--://++ossyyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhhhhhhhhhhhyyysoo+/::--..``                                                                ``..---://oooyyyhhhhhhhhhhhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyyso++::-..```                                                                                    ```..-::/+osyyyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyso+/:-..```                                                                                                    ```..--/+osyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhddhyss/:-.```                                                                                                                    ```.-:/osyhhdhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhhhhhhhhhyo+--`                                                                                                                                      `.-+oyyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhhhhhhhhys++--`                                                                                                                                                `.-/+syyhhhhhhhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhhhhhyys+/--`                                                                                                                                                          `.-/+syyhhhhhyyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhhhdhhyo+-..`                                                                                                                                                                  ``.-/+syhddhhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhhddhso:-```                                                                                                                                                                          ```--oshddhhyyyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhdyy/:.`                                                                                                                                                                                      ``:/syhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhhhhhhhso/.`                                                                                                                                                                                              `.:+ohhhhhhhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhhhhhyyo/:``                                                                                                                                                                                                    ``:/osyhhhhhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyyhhdhyo+-.`                                                                                                                                                                                                            `.-+oyhhhhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyyhhdhh+/.``                                                                                                                                                                                                                  ``./+yhdhhyyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhdhy+-.`                                                                                                     `..---..                   `                                                                                          `-+sydhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhso-.`                                                                               ``````..:::.`          `./ossssss:-             ``-:///:::--..``                                                                                 `.-oshhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyyhhhhhso:.`                                                                            `.--::/+++oooossy:.          :+yss+++sss+-`         ``/+ssyssssssssoo:-``        ```                                                                       .:+ohhhhhyyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyyhhhhy+:``                                                                               .+sysssssooo++//:.`        ..ssyo+```/oyss:.        -/yyso+::://++ossys+.       .///.`                                                                        `:/shhhhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyyhhdhh+/.`                                                                                  ./sys+:-...````           `/oyss-`   ..ssyo+`       /oys+-`    ```.-:s+:`      `:syy/-                                                                          `.:/hhdhhyyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhys:-`                                                                --/-.                `-oys+.`                 ./oyso-`      :/syy:-    `.+syo:`           ``        :+yss.`         `-::.`                                                               .:oyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhhhhhy/:`                                                                 ``osyo+                `.+syo:`   ``````       `-osy+:         .+syo/    `-oyyo-`                     +oyo+           -oyy/:                                                                 `-:yydhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhhhhhyo:.                                                                      /+yss``               `/oys+:-:://+oo+.      `:syy:-`````````.:oyo/`   `:oys+.`     `:::---.`     `.ssy+:          -/syy-.      `````                                                         .-oyhhhhhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyyhhhhy/-                                                                         .:syy:-                :+ssossssssssoo-`     `-sss++/////////++sso/`   ./syo/      `.yyyssys+.    -/yys-`          +oyso``      :+so/-.``                                                        -:yyhhhyyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyyhhdhs:-                                                      `.`                   .osyo:                -:yss+/::---..``      `-sssssssssssssssssso/`   .+sy+:       `--:+oys/.   `/oys+.         ``ssy+/      `-oyssyss+/:-.                                                       .:oyhhhyyyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyyhhdhh/:`                                                    `.-/+s+-`                 `:oys+.`              .-yys/-               `-oss+/----------/oys/`  `-osy/:          `+syo:`  `-oyyo-`         .:yys/-     `-osy++:+osssso//-.`                                                    `-:yhdhhyyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhdhy/-                                                    `-:+ossyso:`                  `+sys/.              `.ssy+:          ```  `-oyy/-         `-oys+`   -osyo+-`       .:osyo-`  ./syo/`          :+yso-      :/yys-.```-:+osyyy+:                                                       .:shdhhyyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhhddo/`                                                  ``:/ossyso+/.``                    :+yso-`               osyo/``.--::://s+:` `-syh/-         `-shy+.`  `.+ssso++//:::/+ssss/`  `-ssy/-         `.+sys/.    ``ssyo+       `../+o:.                                                         `/oddhhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhhhhho/                                                   .:osssso+:-`                         .-yyy/-        ``.`   /+yssoosssyyyysyo:`  ./++-.         `.:/:-`     .-oosssyyyyysssoo.`   `-ssy+:`        ./oys+.`    :/yys+/.``                                                                        :+hhhhhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhhhdyo:`                                                    ./syso/.`        ``                    osyo+  ``..-:/+so-` :/ysooo++//:---..`                                `.----:://+/:.`      ./oyso/--..`` `-osy+:    `.+sssossso/:-``                                                                     `-oydhhhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhhdys..                                              ``       `/oyso-`     .-:+o.`                  /+yso::/+osssssso:` `.-..`````                                                 ```          `/+ssyssoo+/:/+ssy:-    .+syo+-:/ssssso+-`                                                                     `.osdhhyyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyyhhdho-.                                             `.:+o.`      ..ssy+/``.:/osyyy:-                  .:ssssssss++/:-..`                                                                           ``-:/++sssssyyyso``   -/syy:- ``.-:+oyo-`                                                                       `-+ydhhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhhdd+:`                                               .:yyyo/`       /+yso++oyyss+:-`                    .+os/:-..``                                                                                     ```..-////:..    `osyo+`       ``-.                     ``::://-.                                             `:/ddhhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyyhhdo/                                                   `-osyso-`      .osssso+/.`        ``                                                                                                                              -/yyso+-.``                           `-osyyyyyyso:.                                             -+hhhyyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhhhs:`                                                      -:ssyo+``    `.+sss+.        `..+/:`                                                                                                                            .-++osssso/:..`                      -:ssyo+///osyss/:.                                           `-shhhyyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhhhh:.                                           ..`            :/ssy/:`     -/yss/-   ``-:/osyso-`                                                                                                                              `.::+ossyso/:-`                 `.ssyso..`  -:+sssso:.                                           .-yhdhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyydhh/-                                           -:so+.           `-ossso/.    ``osyso..-/+ssyss/:.`                                                ```..---::::::::::::::::::::---..````                                              `.-:/osyss``              `.+oyss:.       `-:ssyoo                                             ./yhdyyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyyhdhs-`                                            :/yys+/        .-oossssss+/     .:sssossyyo+:-.`                                       ``..-::/++oosssyyhhhhhhhhhhhhhhhhhhhhhhhhhhyysssoo++/::-..``                                       `.-/::               .:osys+.`           /+yss``                                            `.oydhyyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhhhh.`                                        `       /+yyy/-   `-+ssyso:-/+syy:-    .:syss+:-``                                 ```..-:/+oyyyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyyoo+::..```                                                ``ossss-.             /+yss.`                                              ``yhdhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyyhhh/-                                        `./::`    `-+syso:--osyss/:.` `-osyso-`   `:/:-`                               ``..::++ssyhhhhhhhhhhhhhhhhhhhhhyyyyyysssoooooooooossssyyyyyhhhhhhhhhhhhhhhhhhhhhyyso+/:..```                                         -/yys/-             -:ssyo+       ```                                        ./yhdhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhhhs-`                                       ``/oyss.`     `/ossossso+:-      `./oyys/-                                  `..-//osyhhhhhhhhhhhhhhhyyssooo///::-----....`````````````...-----::://+oossyyhhhhhhhhhhhhhhhyss+/-..`                                     :+yso-            `-osyso-`     `./++.`                                       `.oydhyyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhhhh-.                                       `./+yys/:``      `.oosss+:`          `.oos/-                              .-:/+yyhhhhhhhhhhhhyyss++/::-..````                                         ```..-:::++osyyhhhhhhhhhhhhyy++:-.                                 -/yys/-          -/ssyo/.`    ``/+syyo/.`                                       .-hhdhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyyhhd+:                                        -/osyo/.`           .-osyo+-`           ...`                          `.:/+yyhhhhhhhhdhhyyo+/:-..```                                                             ``..--/+osyhhddhhhhhhhyyo+:.`                            `.ssyss/:`     .-ssyso.`    `./osssooyss/-                                        -/hhhyyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhhdy/.                                       -:sssss+:`             `.+oyss:.                                   ``.:/syhhhhhhhhdhyss+/-.```                                                                            ```.-//ssyhdhhhhhhhhyy+/-``                         .-+sssso/---:+oyso:.     -/sssso-.`/oyss/-`                                      `:sdhhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhhdd+:                                      `./ossooosso+-`             ..ssyso.`                              `.-+oyhhhhhhhhhhss+/-.```                                                                                       ``.-:/oshhhhhhhhhhyso--``                       `-:ossssssssss+.`   `-:sssoo-.   `./osyo/-`                                      -/dhhhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhdyo                                      ``+oyss:-.:/ssyoo.`             -/syyo/`                         ``-:oyhdhhhhhhhyy+/:.`                              `````      ``.....``      `...`````                                   `.-/+syhhhhhhhdhyo/:``                       .-/oooo+++-.   `./osssso+``      -:ssyo+                                        +sdhhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyydhs-`                                      ``oos/-     :/ssys+-`            `:+o:-                       `.:+shhdhhhhhhho+:.`                         ```     `.-----..     `.-:::--.`    `.--:----``     ``..`````                        `.:/+yhhhhhhdhhso:..                       `..``     `.+oyss++osyo/.`      -:o/:                                         -ohdhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyyhdho.`                                         `..`       `-+oyys+/`            ``                       -:syhhhhhhhhys+:-``                        `.-----.`    `.-:-----``    `.-:----.`    ``--:----.`    ``------..`                         `--/syhhhhhhhhys:-`                            `-+oyys+:``./oyyo:-       .`                                           `+ydhyyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhhhh-.                                                        `.+oyss+:`                                -/oyhhhhhhhhs+/..`                  ``...`    ``--:----``    `.-------``    `.-------``   ``.------.`    ``--:---..       ```                  `./+syhhhhhhhys/:                         -/ssys+-`    `.+oyyy-.                                                   `.hhhhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhdo/                                                            `-/osss+-.                          ``/+hhhhhhhhyy/:.``                    ..-----.`    ``-------.`    ``-------``    `.------.`     `.------.`     ..-----..`    `....``                 `.-:syhhhhhhhh+/.`                     .:ooo-.        `-+oo.`                                                     :+dhhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhydhs-                                                               `-/ssyss.`                     ``:+yhdhhhhdys+-`                ``..``   ``.------.     ``-------.     `.------..     `.------.`     ..------.`     ..------``     --:--..``                `./sydhhhhdhy+/``                   ``..            ```                                                        .ohdyyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyyhdyo`                                                                   -/s++``                   `.+sddhhhhhho+.`                  .-:::--`     `.------.`     `.----:-.`     ..----:..`    `.------.`     `.------.`     `-------``    `.--::---``                ``/ohhhhhhdds+-`                                                                                             `+sdhyyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhhhd-.                                                                     `.``                  ``/+yhdhhhhho+-`              ``     `.------..     `.------.`     ..------.`     ..------``     .------.``    `.------.`    ``-------.`    ``-------``                 `-/+hhhhhdhho+``                                                                                           `.hhhhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhdo/                                                                                           `./ohhhhhdhy+:``             `.----.`    `..-----..     `.------.`     `.------.`    ``-------``    `.-------``    `.-------`    ``.------.     ``------..                   `:/shdhhhhds+-`                                                                                           :odhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyydhy-`                                                                                          :+yhhhhhhdo/.`                ..:-----.`     .-------``    `.------.`     `-------.`    ``-------.`    ``------.`     `.------.`     ..------.`    `..:----..                   `./+hhhhhhhh+/                                                                                          `-ohdyyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhds.`                                                                                         :/dhhhydhh+:`            ``.`    ``-------``    `.-:-----``    `.-:-----      `.-:----.     ``--:----.     `.------..     `.------.`     ..:-----.`     .-------`      `             `-/yhdhhhdd+:                                                                                          `ohhhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhydd/-                                                                                        `-shdhhhhdo/`            ``--::-.`     `-----:-.`    ``-------``    ``-------`     `.----:-.`     ..----:-.      .-----:..     `.-----:.`     `.------.`     `-------``    ```.             /odhhhhdhy:.                                                                                        -:ddhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhdyy`                                                                                       ..yydhhhhho/                `.----:--`     `-----:-.     ``------..     `.------.`     `.------.`     ..------.`     .----:--``     .----:-.``   ``-------.`    ``-------.`    `...`            /+hhhhhdhy-.                                                                                        sydhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhd+-                                                                                      `:oydhhhdyo:`           ..`     `.------.`     `.------.`    `..-----..`    `.------.`     `.------.`     `-------``    `.-------``    `.-------``   ``.------.`    ``------..     `.-..`          `-oydhhhhhs:`                                                                                      ./hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyydho.                                                                                      :+hhhhhdys..          `.----..     `.------.`     `.------.`     ..------``    `.-------``    `--:----.`    ``-------.`    ``-------`     ``------.`     `.------.`    `..-----..`    `.--.`          `.oydhhhhho/                                                                                      .+ydyyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhhho`                                                                                     -/ddhhhdho-`            `.-::---..     `.-:----.`     `.------.`    ``-------``    `.-:-----``    `.-:-----      `--:----.     ``--:---..     `.------..     `.------.`     ..:-----.`     .-:-.          `-+hdhhhdd+:                                                                                     `oyhhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhdd/-                                                                                    .+ydhhhdd+:          ```     ..------``     .-:--:--`      -----:-.`    ``-----:-.`    ``-------``    `.----:--`     `.---::-.`     ..----:-.      .-----:..     `.-----:.`     `.------.`    `.-:-.`          -/ddhhhdho-`                                                                                   .-ddhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhdyy                                                                                     /odhhhhdo+          `.---``    `.-------``    `.-------`     `.------.`    ``-------.     `.-----:..     `.-----.``     `....---``     ..---:--``     .----:--``    `-------.`    ``-------.`    ``---.`          /ohhhhhds+``                                                                                   sydhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhd+:                                                                                   -/dhhhhhy/.           --:----.`    ``-------``    `.------.`     `.------.`     ..---::-.`    `..-....                           ```      `..------``    `.-------``    `.------.`    ``.------.`    `.--:.`         .:shhhhhd+:`                                                                                  -/dhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhydhs-                                                                                  ./ydhhhhd/-             ``.------.`    ``------..     `.------..     `.------.`     ..----..`                ```.......-----.......```         ````..-..`    ``-------`     `.------.`     `.------.`    `..:--``        .:hhhhhdy+.                                                                                  .ohdyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhdy-`                                                                                 :+dhhhhdo/          -.`     `.:-----.`    `..:-----.     `.-:----.`     `.-:::::``     ```        ``...-::////+++ooooooooooooooooooo+++///::-..``     `````     ``--:---..     `.------.`     `.------.`     .-:--`         :+dhhhhdo/                                                                                 `.sdhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhds/                                                                                 .-dhhhhdy/.        `.-::-..     `.------.`     ..------.`     ..------``     ...``        ````--://++ooossssssssssssssssssssosssssssssssssssssssooo//:--``           ..-----..     `.-:----.`     `.------.`     `----`        `:sdhhhdd:-                                                                                 :+ddyyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhdd-.                                                                               `.oyhhhhd+:          `.------.`     `.------.`    ``-------``    `.----:--``        ```..-:://+oosssssssooooooooooooooooooooooooooooooooooooooooooosssssso++/:-```       ..------``     .----:-.``    `------.`     ``---.`        :/dhhhhhs-`                                                                               ..hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhdys                                                                                `-shdhhdyo`        `    `.------.``   ``-------.`    ``-------.`    ``---..`    ``.-:/++oosssssssoooooooooooooooooooooooooooooooooooooooooooooooooooooooooosssss++:-.``    `.----:--``    `.-----.`      `````         ``---``        +sdhhdhy:`                                                                                osdhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhd+:                                                                                +sdhydhs-`       `.-``    `.-------``    `.-------`    ``-------.     ```   `.-:++osssssssoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooosssso+/-.`   ``.-----.`      ```                          ..:-`        -ohdyhdyo``                                                                              -/dhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhhy-`                                                                              -/ddhhhho.`      `.--:--.`    ``------.`     `.------.`     `.------.`     ``:/oosssssooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooossssso+:-`   ``````````````````              `````       ..:.`       `+ydhhdd+:                                                                               -shdyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhdy/.                                                                             `-shhhhhh-.        ``-------.     ``------..     `.------..     `.-::-.`   `:+ossssoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooosssss+:.`  ``.......`````````..-:::////++++ooso:` ``    ``.-``      `.hhhhhds:`                                                                             `:ydhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhho`                                                                             `-shdhhdo/             ..-----..`    `.------.`     `.------.`    ``.-    `/+sssoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooosssso+/-..``..---..`````..-::/++ooooooo+++/////::/:.` ..-`    ``-.`       :odhhhhy:`                                                                             `+yhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyddo:                                                                              /odhydhs-       `..`     ..------``     .------.`     `-------.`        `:/sssooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooossso+/:`````:::--.````.-/++ossso++/::--...`````          ..:--`    ``.``      -ohdyhds+                                                                              -/ddyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhd.`                                                                            ..dhhhhho.`      .-::-.`     `-------``    `.----:--``    `.----:--`    `./syooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooossso+-.```--//:-.```.-/oossso+::-.`            ```          ..::--.`     ``       `oydhhdd:.                                                                            ``hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhdys                                                                             `+sdhhdd/-        .-:----.`    ``-------.`    ``-------.`    `.---::``   :+ysooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooossso+:.` .:/+/:-``..:+osssoo:-.``       ````     `.---...`     `.------..             .-ddhhdyo`                                                                             osdhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhdo/                                                                            ./ydhhdys`         ``.-------`    ``.---::-.`    ``------..     `.---   ..sssoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooosss+/.` .-+++:-```-:osyss+/-.`     ..`   `.-:-.`    `.-::---..     `.------.`             +sdhydy+.                                                                            -+dhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh:.                                                                           `:yhhhhh/.      ``     `.------.`     ..--.--.`     `..---::..     ```   :+ssooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooosso+:.``./oo/:.` :/+ssss+:-``    `.:/oo+.`  `..::-.`     ..------``    `.------.`           `:yhhhhh/.                                                                           `:yhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhdho-                                                                            +sdhydy+.      ..:..     `.---::-.`                    ```..--.``      `-oyooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooossso.` `.oos:-```:+sssss:-`     `./+sssssso+`    .-:--``    `.-------``    `.-------`          `:ydyhdso                                                                            .+ydyyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhdy:`                                 ```                                      `.dhhhhy+`      `---::..     `.-..``      ````......```````     ```      .ossooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooso+.` `:oy+: ``-/ssysso:.     `-/osssoooooosso/`   `.-::-.`    ``-------.`    ``-------``         /sdhhdd-.                                        ```                               `-sdhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhho`                                 .o//                                      /oddydd:-        .-------``          `.-:/++ooooooooooo++//:--..``      -/ysoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooosss/-  `/+y+/  `:/sssss/:`     .-oosssoooooooooosso:.   `.:::-.`    ``-------.     `.------..        .-dhhhds+                                       .o//                                `+yhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhdo/                                 -/yso``                                  `.shhhdyy`          `.----:--        ..+ossssssssssssssssssssssooo+//``   +ossoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooss+/```:/yo:` `-+ossss+/`    `.:osssoooooooooooooossoo.`   ..:::-.`     ..-----..`    `.------..        sydhhds-`                                    -/yss``                               :+ddyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhydd/-                               ``ssssy:-                                  .ohdyhd+:      `.`    ``--:-.      `-+ssssooooooooooooooooooooossssso`` `.ssooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooyo/.` .+sy:- ``oosssyo/.`    `++sssoooooooooooooooooosso/.   `.-:---.`     ..------.`     .-------`      -+dhhdhs-                                  ``osssy:-                               .:ddhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh.`                               :+ssosso/`                                `:hhhhhy-      ..:-.     ``.`      .:sssoooooooooooooooooooooooooosy/:   :/ysoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooosy+:`  /oh+:  `/ossosy/:      :+ssooooooooooooooooooooooosso-`   .-::---.`    ``-------``    `.-:--:-.      -shdhhd/.                                 :/ysosss+`                              ``hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyy                               `:oyoooooyo/.                               +sdhydy:`      ----:-.`            oossoooooooooooooooooooooooooosso-  `.+soooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooossoo   :/hs/. `-ossosyo+     `-osyoooooooooooooooooooooooooossoo`    --:--:-.`     `-----:-.`    ``-----`     `-sdhhdyo                               `-oyoooooys/.                               sydhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhds+                 `  ```````...-:sssooooosss:.`                           ``yhhhhy+`       ..------.`        .-ysooooooooooooooooooooooooooooyo:`  ./oyooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooosso-` `:sh+:  `+oysosso-`   ``+ossooooooooooooooooooooooooooooosy+:    `.----:--`     `.----:-.`    ``-::..      +sdhhhh.`               `  ```````...-:sssooooosss:.`                             /odhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhd+:                `-:////+++++oooosooooooooosoo/::--...`````               -:ddydd+:          `.--::-.        :+ssoooooooooooooooooooooooooosso/`  `-sssooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooosss+.` -/yss`` -:ysosss+.`    :/ysoooooooooooooooooooooooooooooooooso:`    `.------.`     `.------.`    `.-:-`     -/ddydd/-              `-:////+++++oooosooooooooosoo/::--...`````                 -/dhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh/.                `.+oyssssssssssoooooooooooosssssssooo+++/:`              /oddhhh.`     ```   ``--:.`      `.+soooooooooooooooooooooooooooosy:-   /+ysooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooosss-. `.ssy/- `-+sssosy:.    `:oyooooooooooooooooooooooooooooooooooosss:-     `.------.`     ..------.`     ...`    ``yhhhds+              `.+oyssssssssssoooooooooooossssssoooo+++/:`                `:hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhy-                   `.ooysooooooooooooooooooooooooossssyy+/.`             .ohhhdyo      `---`    ``.`       `:oyoooooooooooooooooooooooooossoo`  ``ossooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooosy+/  `/oys+. `-ossosso+     .:sssoooooooooooooooooooooooooooooooooooossso``     `.-:----.`     `.------.`    ````     +sdhhds.`              ``ooysoooooooooooooooooooooooooosssyyo/.`                 -ohdhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhdh+.                     `.+ssooooooooooooooooooooooooosss/:`               ./ydhhd+:     ..:----``            .+ssoooooooooooooooooooooooooosy/-   ``sssooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooss+.  .+sys+`  /+ysosss:`   ``ossooooooooooooooooooooooooooooooooooooooooss+:        .-:-----`      -------.`           -/dhhdy+.                `.+osooooooooooooooooooooooooosss/:`                    ./ydhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhdy/.                       `:/ssooooooooooooooooooooosso/-`                 -shdhhy:`     `.------..           .ossooooooooooooooooooooooooosso-      +ossooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooosss/`` :+yyy:- `.sssooyo:`    -/ysooooooooooooooooooooooooooooooooooooooooooos+-`       `.-------``    `.------.`          -yhdhhy-                   -/ssooooooooooooooooooooosso+-`                      `:ydhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhds-`                         `/+ssoooooooooooooooooss+/.`                  `:hhhdho.        `.------.`         -ossoooooooooooooooooooooooooyo-`      :/ysoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooosss-. ..sssso`` :+ssosso/`   `.+sssoooooooooooooooooooooooooooooooooooooooooooss+.         `.------.`     `.------.`        .+hdhhh/.                    /+ssoooooooooooooooooss++.`                        `.shhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhho`                           .:ssooooooooooooooooso/.`                    :+dhhdy/`          `.----:-`        .ossooooooooooooooooooooooosso/`  ...` `-ossooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooss+/  `/ssss/- `-oyooosy:.    .+ssoooooooooooooooooooooooooooooooooooooooooooooosy/-   ```    `.------..     `.------.`      `-sdhhdo/                    .:ysooooooooooooooooso/.`                            +yhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhds+                            :+ysooooooooooooooooyo/.                     osdhhho.`    ...`    `.--:-`        .+ssooooooooooooooooooooooosy-.   //:`  `:oyooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooosso-`  `/oys+. `-ossoosoo`    -/ysooooooooooooooooooooooooooooooooooooooooooooooosso+   `.-.`    `.-:----..     `.-:----.`     `+yhhdys                    :+ysooooooooooooooooyo/.                             /odhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhdo/                            oossoooooosssoooooooso+.                   ``yhhhds+     `.-:-.`    ``:-.`       ./oyooooooooooooooooooooosso+   `.+++-`   :+ssooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooosss+.` `` ``::.` /+ysoosy/-    `oossoooooooooooooooooooooooooooooooooooooooooooooooooss.`   ---.`     .-------``     .------`     /oddhhh.`                  +ossoooooosssoooooooss+.                             :/ddhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhdd/:                          `.sssoosssssooossssooosso.                   ..hhhdd+:     `-:----.     ``.`       `-oyoooooooooooooooooooooss/-   -:+++//   ``osssooooooooooooooooooooooooooooooooooooooooooooooooooooooooooosy:- ``/:-.```   :/+oosso-`   .-ysooooooooooooooooooooooooooooooooooooooooooooooooooosy:-   .-:--``    `.-------``    `.--:-`     -/ddhhd-.                ``sssoosssssooosssoooosso-`                            -:ddhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhdd:-                          .:yssssso+/:...:/ssssssss:`                  -:ddhdd:-      ..------.`              `/ossooooooooooooooooooss+.  `.:+///++-.   .:sssoooooooooooooooooooooooooooooooooooooooooooooooooooooooosso+   -://:::--.`````..:--`    :+ssoooooooooooooooooooooooooooooooooooooooooooooooooooss+:   ..:----.`    ``------.``    `.:-.`    .-dhhdd/:                .-ysssssoo/:...:/ssssssss:.                            .-dhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhd-.                          :+yso+/-.`       --/oossy/-                  :+ddhhh.`        ..------.`             -:ysoooooooooooooooooos+.`  .:/+/////+/-`  `-+sssooooooooooooooooooooooooooooooooooooooooooooooooooooosss:.  `:/::::://:::--..`````  `.+sooooooooooooooooooooooooooooooooooooooooooooooooooooosso/`   `-------.`    `.------..     `.-`    ``hhhdds/                :+yso+/-.`       .-/+ossy/.                            `.hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh.`                         `:/:-.`              ../+y/:                  /sdhhhy``          `.------``       ``  ``sssooooooooooooooosso/   .-+/////////+:.   .-osssoooooooooooooooooooooooooooooooooooooooooooooooooooyo:` `  `.-:://:::::::::::::.` ./oyooooooooooooooooooooooooooooooooooooooooooooooooooooosso/`     ..------.`    `..-----..`    ```     sydhhy+                :/:-.`              ../+s/:                            ``hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh``                          ``                    ``...                 `+yhhdyo     `.-``    `-------.`      ``   :/ysooooooooooooooss/-   :/+//////////++-.   .:ossooooooooooooooooooooooooooooooooooooooooooooooooss+:  `/:-` ``.--:::::::::://:` `-ossooooooooooooooooooooooooooooooooooooooooooooooooooooosso/`       ..------.`     ..------.`          +sdhhho`               ``                    ``...                              yyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyy`                                                                       .ohhhds+     `.:--`     `.------.     ```  `-+ssooooooooooooosy:-   :/+////////////+/-`   `/+sssoooooooooooooooooooooooooooooooooooooooooooosss.` .-++//:.`  ```.---::::/:.` -/ssoooooooooooooooooooooooooooooooooooooooooooooooooooooosso/   ``     `.------``    `.-------``        /odhhds-`                                                                       oydhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhdys                                                                       `-sdhhdo/     .-::--.`     `.----:``     `   `.+sssooooooooooosy/-   :/+//////////////+:-    `/+sssooooooooooooooooooooooooooooooooooooooooosy/:  `:+///++-. `...````````.`   +ossooooooooooooooooooooooooooooooooooooooooooooooooooooooss/-   ..-`    ``-------.`    ``-------``      :+dhhdy:`                                                                       osdhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhdso                                                                       `:ydhhd+:     `.------.`     `.-::..           .-sssooooooooooss+:   -:+///////////////++:-`   `-+osssoooooooooooooooooooooooooooooooooooooss+.  .//+//+//  `/oss+//:-.`    ``sssooooooooooooooooooooooooooooooooooooooooooooooooooooooosy-.   --:--`     `.----:-.`    ``------..     -+dhhdy+.                                                                       +sdhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhds+                                                                       ./ydhhd+-       `.------..     `.-:-`            :/sssoooooooosso/`  `-+/////////////////+//-.   `./+sssooooooooooooooooooooooooooooooooosss+.` -:+////+-. `:oysssssys/.    -:ysooooooooooooooooooooooooooooooooooooooooooooooooooooooosss``   ------.`     `.------.`     ..-----`    ./hhhdy+.                                                                       /odhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhds+                                                                       .+ydhhh/.         `.-------``    `---`            .:osssooooooooyo-`  `:/+////////////////////-.`  ``-/osssoooooooooooooooooooooooooooooosy:- `.++///+/:` `-ossooooos+.`    :+ssooooooooooooooooooooooooooooooooooooooooooooooooooooooss+/     `.------..     `.------.`     ..-::``   `:yhhdho.                                                                       /odhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhdo+                                                                       .ohdhhh:`    ```    `.-------``   ``-..             -:sssoooooooss+.   `:+////////////////////+/:-.   `./+sssoooooooooooooooooooooooooossoo`  -/+////+:`  :+ysoooosso/    `.+soooooooooooooooooooooooooooooooooooooooooooooooooooooooosy/:       `.------.`     `.------.`    ``-:``    -yhhdho.                                                                       /odhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhdo/                                                                       .ohdhhy:`   ``:-.`    ``------.`     `.``             :/yssoooooosy/-   .-++////////////////////+++-.    `./+ssssooooooooooooooooooooosss:. `-/+///++:- ``sssooooosy:-    `:oyooooooooooooooooooooooooooooooooooooooooooooooooooooooosss-`  ```     .-:--:-.`     `--:----.`    ````    -shddhs-                                                                       :odhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhdo/                                                                       .ohdhhy-    ``:::-.     ``-----:..     `               `-+sssooooosss``   :/+//////////////////////++/--`    .:+osssooooooooooooooooooyo:` `-+//////+`` :/ysooooosss.`    .ossoooooooooooooooooooooooooooooooooooooooooooooooooooooooss/.  `.-:``    `.----:--``    `.----:--           -shddhs-                                                                       :+dhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhdo/                                                                       .ohdhhy-    ``:---:-.`    `..----:..`                    `.oosssooosso/`   .:/+//////////////////////+++::.``   .-++sssssooooooooooosso/   //+////+:- `.+ssooooosso+     .:ssooooooooooooooooooooooooooooooooooooooooooooooooooooooooyo-`  `--:--.`    ``-------`     `.------.`        -shddhs-                                                                       :+dhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhdo/                                                                       .ohdhhy-      ..------.`     ..------``                    `-/osssoooss+.`  `-:++///////////////////////+///:.`   ``-:/ossssooooooosss.` .-++//////.` .+ssoooooosy/:     :+ysoooooooooooooooooooooooooooooooooooooooooooooooooooooosso/`   `-------.     `.------..     `.------.`      -shddhs-                                                                       :+dhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhdo/                                                                       .ohdhhy-        `-------``    `.-------``                    `-:ssssooss+/   ``:/+/////////////////////////////:-.    `.-/+ossssoosy+:  `://////+/-` .:ssoooooosso-`     +ossooooooooooooooooooooooooooooooooooooooooooooooooooooooss/:     `..:----..`    `.-:----..     `.------``    -shddhs-                                                                       :+dhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhdo/                                                                       .ohdhhy-         ``--:----.`    ``-------`                      .-osysooss+:   `.:/+////////////////////////////++:-.`   ```:/+ssyso-` `:/+//////:   +ossooooooyo/.    `.sssooooooooooooooooooooooooooooooooooooooooooooooooooooooosy-.        ..:-----.`     .-:-----`      --:::``    -shddhs-                                                                       :+dhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhdo/                                                                       .ohdhhy-     ```    `.-:--:-.      `-----:-.                       -:ssssoyso-`   ../++////////////////////////////++//-.`     ../:.` -:+/////++.. .-ysooooooooyo-` `  -:ysoooooooooooooooooooooooooooooooooooooooooooooooooooooossoo   `...     `-------``    ``-------``    `.-:``    -shddhs-                                                                       :odhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhdo+                                                                       .ohdhhh:`   ``--`     `.------.`     ..-----..`                      .-+osssyo+``   ..........-://+////////////////////+//:-.```    `.++/////+//   /ossoooooosso/   `  :+ssoooooooooooooooooooooooooooooooooooooooooooooooooooooosy+:   .-:-.``   ``-------.`    ``-------.`    `.``    -yhhdhs-                                                                       /odhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhds+                                                                       .+ydhhh/.     ---.`     ..------.`     ..------``                      `-:/:---``           `````--///////////////////////++///-.  `-/+//////+-. `-oyoooooooosy/- ``  `/sssooooooooooooooooooooooooooooooooooooooooooooooooooooosss:.   .------`    ``-------.`    `.------..           -yhhdho.                                                                       /odhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhds+                                                                       .+ydhhd+-     --:--.`     `.------.`    ``-------``            ```             ```.......   .-:-`  .-//+////////////////////+++-` `-/+/////+//. `-ossooooooooss.` `. `-oyoooooooooooooooooooooooooooooooooooooooooosssssssssssssys+.    `.---::-.`     `.------.`    `..-----..`       .:hhhdho.                                                                       /odhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhdso                                                                       ./ydhhd+:     .-:----.`     `--:----.`    ``--:----.`           ```      `.-::/++oooooooo/: ``o/-`   `:/++//////////////////+/.` .-+///////+/.` :/ysooooooossoo ``.. ./oyooooooooooooooooooooooooooooooooossssssssssoooooooooossyo-`      ``..-:::..     `.------.`     ..------``     -/dhhdy+.                                                                       +sdhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhdys                                                                       `-sdhhdo/      `.-------``    `.-:-----`     `.------.            ```-:/+ossssssssosssosss+`  +:.` -.```:/+///////////////++.. ``+///////++:- ``sssoooooooosy+: `-```-sssoooooooooooooooooooooooooosssssso++///:-.....````````....   `````     ``.--..     `.------.`    ``----:--     :+dhhdy/.                                                                       +sdhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyy                                                                       `.ohhhds+        ``-------``    `.------.`     ..---::..      ``--/+osssssooooooooooooosy/- `./- ``so/.` .:/+////////////+::  `-/+///////++`` -/ysoooooooooss:. `-` `./++oosssssssssssssssssssssssoo+/:--.```` ```````````````````    ````        ``...``    `-------.`    ``--:-.     /odhhds-`                                                                       osdhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhy``                                                                      `+yhhdso          `.------.`     `.------.`     ..-..``   `.-/+sssssooooooooooooooossso+```-/.` -:yys+/`` -:++////////+//.` `:/+///////+/:  `+sssooooooooss+. ..-`    ``..-::://++oooooooooo+//::..`    `````..----:::::::::---...``                 ```      `.------.`    `.-..     +sdhhho.`                                                                       syhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh.`                                                                       +sdhhyy       `    `.------..     `.------.`     `    `-:+ossssooooooooooooooooossso/.``.:--   .-ossss/:`  ::+/////++/:`  -:+//////////-` ./oyooooooooooyo:` --.` ...````      ``.....---..``    ``..--://////////::----......`````                            `.------.`    ```     sydhhy+`                                                                      ``yhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhd-.                                                                       /oddhhh.`    `-.`    `.-------``    `-----:-.`      :/oossssooooooooooooooooosssso-. `.::-` ...` .:ossso+. ``...--::/.` `.++////////+/-` .:sssoooooooooss+`` :- ``+++//::-..`              `.--:////////::--...```       ``````````````                          `.------.`        ``yhhdds/                                                                       `.hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhd:.                                                                       -:ddhhd-.    `.-:``    `.-------``    `.--..    `./+ssssooooooooooooooooooossso/-. `-::.` ../++:- ``/osss+/       ``` `.:////////////:`  +ossoooooooooss+: .-:- `.::---..```       ``.---:://:::--..`````      `..--::://++++++ooo++++++/::--.`                    `.------.`      ..dhhdd+:                                                                       .-dhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhdd/-                                                                       .-dhhdd+:     `-:--.`    ``-------``    ``    `:/osssooooooooooooooooooossso+-.```:::.```-:////++.. `.ossss:-   ``   `.//+////////++.. .-ssooooooooooosy-. -/-.   `````     ``..---------..`````````````..::///+ooosssssssssssssssssssssssssso++/:..``               `.----:-`     -:ddhdd:.                                                                       .:ddhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhddo:                                                                       ``hhhhds/     `.-----.     `.------..       `-/sssooooooooooooooooosssss+/:.``.-::-. ``-:+///////+:.` -/ssss+.` `  ``//+/////////+//   /ossoooooooooosss`` :/`` ````...`````.....````    ```````--:://+ooosssssssoooooooooooooooooooooooooooosssssoo+/:```      ```    `.--:-`     :oddhhh.`                                                                       -/ddhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhds/                                                                         oydhhho`     `.----:-.`    `..-----`     ./oysoooooooooooooosssssoo/:- ``..:::.```.:/++////////+++-` `:ossso-`   -:++//////////+-. `:oyoooooooooooss++ `-//   ````````      `````...--::/+++oosssssssssoooooooooooooooooooooooooooooooooooooooooossssoo/-.``   ````    `.-.      +yhhhyy                                                                         /oddhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyo`                                                                        /odhhdy:`      ..------.`     .-:.`     :/yssooooooooossssssoo+::.. `.--::-.` `.::/++////////////+//`` -/ssso+   -/++////////+/:` `-sssoooooooooooss:. .+:-  `````.....---::///++ooooossssssssooooooooooooooooooooooooooooooooooooooooooooooooooooooosssss+/-`   `..     ``    `.shhhds+                                                                         +shhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhds-`                                                                       ./hhhdho.        `.------.`    ``  ```  +oyssssssssssoo++/:-..```---::-..` ..-////////////////////++:- ``oosss:- ``/////////+/:`  +ossooooooooooosso. `-o-` .+++++oooooooosssssssssssooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooosssss:.  `-:-.`        .+ydhhd+-                                                                       `.ohhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhdy:`                                                                        -yhdhhy-`        ``-------.`      :::` .-/+++++///::-..````..---:-.````.--/////////////////////////+/-` .:ssss+.` -:+/////++.. .-ssoooooooooooooyo:` :/+. .:ysssssssssssooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooosss-`  `-:---``      -shdhhy:`                                                                       `-sdhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhdy+.                                                                        .+ydhhd+-           `-------.     -/o:-```````````````.------.`````..::/++////////////////////////////.` ./oyss+. `./////+/:  `/ossooooooooooooss+.` o+:` /+ysoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooys+.   `----:-.     ./hhhdho.                                                                        ./ydhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhdhs-                                                                        `.sdhhds+      ``     `.----:-.`   `.:::----.......---..``  ``..::/+++///////////////////////////////+//   /ossy/- `-/+///.` ./syoooooooooooooss+: ``s/`  oossooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooosss+.`    ``--:.`     /odhhds-`                                                                        .ohdhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh:.                                           ``..-.`                       +sdhhhh``    `...     `.---:--`   `  ``````````     --.` .-/++++////////////////////////////////////++.. .-ssso+  `:++/.` -/ssoooooooooooooosy-. -/o/ ``sssooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooosss:.   `    ``.`     `yyhhhy+`                        `..                                             `-yhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhd+-                                     ``.--:/+osy+/                       -/ddydd/-     `-:..     `.--::.` `-`` `--------:-   ooo- `.//+///////////////////////////////////////+/:`  +osss.` -::- ``ossoooooooooooooosoo`  +s:- -/yysooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooosss/:   ``-.`          -:ddhdd+:                       .:ooo``      ``                                   ./dhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhdo+                                `.-::/+ossyssossso`                      `.hhhhds+      ..:-.`     `--:-. `--. .//+/////+/.` /+h/- `-/+////////////////////////////////////////+/-` -/yyy/- ```` :+ssoooooooooooooosy+/ `-oy`` -:ooosssssssoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooosss+-`   `.-:--.`        /oddhhd-.                      `osyso``   `./++//:.`                              :+dhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhdys                          `.-:++ossyyssso+/-.`-osy..                       osdhydy-`     `--:--`     `--:  `-- `./+/////+/:` `:yo+   ://///////////////////////////////////////+//.  -osyo/    `:oyooooooooooooooosss:` .ooo     ``..-:/++ossysssssooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooossyoo.`     `------:``    `.sdhhdys                       .-yyo-`     +oyyyyyyso.`                            osdhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh``                        ./shsso++-:/sy/-    `-sh+:                       ./dhhdhs-      ..:----`     `..` -:`` -/+//////+-` `:sh-. ..++////////////////////////////////////////+:. `:oys+.` :/ysooooooooooooooooys/. .:h+:  ```          `.-::/+oossssssssoooooooooooooooooooooooooooooooooooooooooooooooooooooooosss+:`           --:--      .ohdhhd+-                       :+ho-`    .:yyo:.-:+syo/`                           yhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhdd:-                        `.+ss+.`   `+ss+`    `+ss+`                       -shdhhd+-      `------..     `  ..:. .-++/////+/:  `+yo/`  //+///////////////////////////////////////+/:  `+syo:-.sssooooooooooooooooss+.` /oy:`   `.---..```         `..-:://+ooosssssssssoooooooooooooooooooooooooooooooooooooooosssss+/.`   ``---``    `.``     ./hhhdhy-                       `+ss+`    `/oyo:`  `.+syo.`                        .-dhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyddo/                          :+yo.`    :+hs:`    :+hs:`                      `-sdhhdys       `..-----..       `:-```/////////+`` -/hs:` .-+//////////////////////////////////////////   :ossooossooooooooooooooooss+: ``ys+.      ..-::---.`              ``..--::/++ooossssssssssoooooooooooooooooooooooooossssss+/-`      --::---`            +sdhydy:`                       `/syo:.``./syo/`   `.+yo/`                         :+ddhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhy+`                         .:hs/.    .-hy+.    .-so:`                        +sdhhhd-.        .-------``     ---` -:+/////++-. `.yss:. `-/+//////////////////////////////////////++.` -/sssssooooooooooooooooooss.. -:hs:` ``     `.-:----.`     `....```       ```..--://++ooosssssssssssssssssssssssssssoo+/--``        `.------..        `.hhhhhy+`                         -:yyso+/+syy-.    ./sh/-                          +sdhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhdy-`                        ``sss:`   ``:-.`     ````                         .-ddhhds/         `.-------``   `./. `.+///////+:`  /oho+   -:++////////////////////////////////////++.` -/ysooooooooooooooooooosso+  `/ss+`  ---`     `--:----.`    ``--:----.`           `````..-::///++++ooooooooooo++//:-.```   ``.--.     `.-:--::``      /oddydm/-                            :/ossyyy+/     .:syy..                        `.sdhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhdho.                          /oho/               ``.-:                         osdhydy:`         ``-------.`  `::: `-/+/////+/:` `-syy/-  `//+///////////////////////////////////++.` -/ysoooooooooooooooooooss:. `:sh/:  `--:--``    `.-------`     `.-:--:-.      ``..``             ``````````````           `.::----.`     .-:--      `-sdhhdys                         ```    ``.--.`    `.syyo/                          ./ydyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhy:`                         -:o:-             `.++syy-.                       ./hhhhhy:`          ``------..  `:/`` -/+//////+-. `:oyso:` `-//+///////////////////////////////////`  :+ssooooooooooooooooooss+. `-osy.. ``-------``    `.------.`     `.------.`    `..-----..`       ```  `         ```...`     `-------``    `.``     `-shdhhd+-                       `.so/.              `.o+/.`                          -shdhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhd+:                                           :+yys+/.`                        .+ydyhds+             ..---::.` -::- `.++/////+/:  `/osss/- `.:/+///////////////////////////////+/:  `/sssoooooooooooooooooos+.` :+yo+     `.------..     `.------.`     ..------.`     ..--:---``     ..---...``     .-:::--.`    ``-------.`           /odhhdho.                        -/hy+.                ``                            -/dhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhdyo                                `..``    `-oys+.`                            `oyhhhhd-.             ..--:-. ``+/.` :/+/////++.. .-sssss-. `.//+/////////////////////////////+:. `-oyooooooooooooooooooss+: ``ssy/-       `.------..     `.------.`     `.------``     `-------``    `.-:::---``   ``.-------`    ``.------.        `.hhhhhho.`                      `.+ys+`    `.-.`                                      +sdhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh``                          `.:/+os+/:.. ./sy+:                               -:ddhhdy+`       ``    ``--:-.` ::+. `-+////////:`  /+ysss+-` `.:/+/////////////////////////+//. `-ossooooooooooooooooosss.` -/yyo-  `-.`     .-------``    `.-:----.`    ``--:----.`    ``-------.`    ``-------`     `.------.`     `.-::--        /sdhydd/-                        ./sh:-    `:sy/:     `-:``                           `yhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhydd+:                          .:yyoo+ssyso++oss.`                                 osdhydho.      ``.``   ``--:.` .+/: `./+/////+/:. `.+sssss+/```.-//+////////////////////++/:`  /+ssooooooooooooooooosy+/ `.+syo-` ..:--.`    ``-------``    `.-------``    `.-------`     `.------.     ``------..     `.------..     ..-``      ./ydyhdys`                        ./yso`    `-oyy-.    ./sh:-                          -:ddhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhy+`                         ``::.``.-/++sssss+/:.````.-``                       `:yhhhhd+:       `..``   ``--- `./o.` -:++/////+:- ``/osssss+:```.-:/+/////////////////+//`` .-sssooooooooooooooooosso-` .+sy+:   .-:----.`    ``-------.`    ``------.``    `.------.`     ..------.`     ..-----..     `.------.`             -/hhhhhh/.                         +oyoo..`` :+ho+     .:yss``                          +sdhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhdy:`                                  `.ossoosssoo/++sy:-                        `:ydhhhhh.`      ``-.`     .-`` -:+:```//+/////++.` `.ssssosso:-`` .-/////////////////:.```-+sssooooooooooooooooosso-` -/yss.`   ``.------.     `.------..     `.------.`     ..------.`     ..------.`     .-------``     .------.`         ``yydhhdy/.                         `+osssso+::ooy:.     /oh+/                          `-sdhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhydhs-                                  .-yso:.--/oossso+-.                          :+ddyhds+`       ..-..     .``  +//. `-//+/////+:.` .:ossoosss+/.````.--::::::::--.` `./+sssooooooooooooooooooss/- ``ssy+:  `     `.------.`     ..-----..`    `.------..     `.------.`     `.------``    `.-------``    `.---::.`       `/oddyhdo/                            `.-:/oossssso/-.` `.yss-`                          .ohdyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhd+-                                 :+hs/.    `.--.```.-`                        ``sydhydyo.        .-:.`     `  `-+/: `.:++///////-. `./ossoossso+/--.`` `````` ``.-:+osssoooooooooooooooooosyo+```:+ys+.  `-..     `.------.`     ..------.`     .-------``    `.------.`    ``-------.`    ``-------``    ``--.`       ./ydhhdhy.`                                 `.-:/oosssoo//+ys:`                          ./hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhdyo                             `-:/oss+.`           +oy/-                         .:yhhhhdo+        ``:--`        ./+-. `.//+///////.. `.+ossooossssoo++/::::::/++oosssooooooooooooooooooooss+-` ./syo/`  .-:--.`     `.------.`    ``.------``    `.-------``    `.-------``   ``.------.`    ``-------.     ``        /odhhhhh/.                         `.://``       `..-//oosyyo/`                           +sdhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh..                          `.syyss:-             :+yso``                        `-shhhhhd:-        `.:--`       `.+/-``.-//+///////-` `./osssooosssssssssssssssssoooooooooooooooooooooss+/`` :+yss-.   .-:----.`     `-------.`    ``-------.`    ``-------``    `.------.`     `.------.`     ..------.`          .-hhhhhdy:`                         `+osyy-.    ``     ```.:/+:.                          `.hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyyddo:                            ///-.                ./sy/:                          -/ddhhhhs-`        `-:-.`       .-+::```-:++////++:-```-:ssssooooooooooooooooooooooooooooooooooooosso+`` -:yyy+:      `.-------`     `.------.     ``-------.     `.------..     `.------.`     ..------.`     ..---:-`        `.ohhhhdd+:                          -/yys/:`    :/o/-``      ``                            :/ddyyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhds.`                                              .-:osyo-`                          +odhhhhh/-        ``--:..       `://:.` ..::////++/:.` .-+osssoooooooooooooooooooooooooooooosssso/. `./oyyo/` ````    ``-------`     `.----:-.`     ..----:-.`     ..----:..`    `.-----:.`     `.------.`     `--``        ./hhdyhdso                          `-oys+.`    .-yyyyyo+:.`                                `ohhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhydho.                                          `.::ossoosss:.                          .ohdhhhhh-.        ``-::.`        :/+/:.` ``..---:::.`   .-/+oooooooooooooooooooooooooooossso+-. `.+oyss:- ``--:-.     `.------..     `.------.`     ..------.`     ..------``    `.------.``   ``-------.`     `        ..yhdhhdhs-`                         `-osy:-     `/oso://syy+/                               .+ydyyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhd/-                                      ../+osyso/-.:+yo+``                         `/odhhhhhs:`        `..:--``      `.:/o+/:-..`` ````` ```.-:+osoooooooooooooooooooosssss+/-.```-+oyso:-   ``::----.`    `..-----..     `.------.`     `.------.`    ``-------``    `.-------``   ``.-------           `-oydhhhds+`                           :+yso`       .-:. ``:/yss``                            ./hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhdys                                   .-/ooyss+/..`  `-oyh/-                          ``osdhhhhh+:          ..:--``      ``-:+ssso+/////////++ooooooooooooooooooooosssssoo+:-`` .-+oyys/:.`      ..------.`     .-------``    `.-:----.`     `-------.`    ``-------.`    ``-------`     `.-::-.          -/hhhhhdys``                            -/yss..             `:syy-.                            +sdhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhdd-.                             `.:/ssyss+/.``      `./o..                            `-shdyhhhh:-          `--:-`         `.-ooyyysssssssssssooooooooooossssssssoo+/:```` .-/syyso:-`  `..`    ``-------``    `.-:-----``    `.-:-----      `--:--:-.     ``--:---..     `.------..     ...`         .-hhhhydhy:`                               -osyo+/.`          :+yso``                          `.hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhdy+`                            .+yhso/-.               `./-.                            /oddhhhdy/.`          --:-.     ````  `.:/++oossssssssssssssssoo++//::..  ```.-:+oyys+/..   ``--::-.`    ``-----:-.`    ``-------``    ``------.`     `.----:-.`     ..----:-.      .-----:..              .:ydhhyhds/`                                  `:/ssyss/:.``   .-yys:.                            +sdhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhydy/.                           `.:/.`               `--osyso``                            +sdhhhhds+``         `.--..`    `...``   `...-------------...`````....-:/++ooo++--.` `    ``.----:--`    ``.------.`    `.------..     `.------..     `.------.`     ..------.`     .------`          ``/odhhhhdso``                                      .-/osyys+/--:+syo:`                           `:ydhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh/.                                             -:+syso+syo/`                            ./yhhhhhds+.`         ``---.`   ``---..```               ``..--:///////:::-.``  ``..-.`     `.------.`     `.------.`    `..-----..`    `.------..     `.------.`     `-------``    `..-``         `./odhhhhdy+-`                           ``.`````        `.:/osssssss/:                            `:hhhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhdyo                                          `-/ssyso-..:+hs+.                             -:hhdhhdhy+:           ``.-``    `.-:----.`             ````.....```         ``--:---..     `.------.`     ..------.`     ..------``    `.-:-----`     `--:----.`    ``-------.`                -/yhdhhhhd/-`                           `-+ooo+++///:-.      `.-:+/:--``                            +sdhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhdd:.                                      -:ossoo/.`   ``osyo/                              -/hddyhhhh/:            `..``    `.::----.`     ``......``     ``------.     `.-:----.`     `.-:----.`     `-------``    `.-------``    `.-:-----`     `.-:-----      `--::::.`             -:hhhhyddh+:                             `+oyssosssyyyyss/-`       ``                               .-dhhhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhhho`                                 `./+yysss+/`       `-oyy:-                              `/sddhhhdhs:.            ```     `.------..     ..::::--.`     ..:-----.`     .----:--``     .-:--:--`      -----:-.`    ``-----:-.`    ``-------``    `.------.`     `...`            `-ohdhhhhds+.`                             -:hyo-```..--:/+oyss/:`                                    `+ydhyyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyydho-                               :/syyo+:/+ys/.`     `-oyh/-                                 +ohhhhhdhh/:`                   `.------..     `.------.`     `-------``    `.-------``    `.-------`     `.------.`    ``-------.     `.------..     `.------..                 `-:yhdhhhhhs+``                               .-yss-`        :/sssss+:.``                               .+ydhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyyhhd+:                              /+y+/.` `.osy+:`` ..+osss..                                  `:oydhhhhhyo:-                    .------.``   ``-------.`    ``-------.`    ``-------``    `.------.`     `.------.`     ..-----..`    `.------..     `.----..               .:oyhhhhhdys/.                                    +oho/      `-+so+:+oyys:.                              -/dhhyyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhhhh.`                            `.-``     .:sss///+oyso:-                                      `.oshhhhhdhy/:`                  `.-------``    `.-------``   ``.------.     `.------..     `.------..     `.------.`     ..------.`     .------.``    `..`              `-/yhdhhhhdyo-.                                      -/yss.`   -/syy-. `.++o-`                            ``yydhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhds+                                      -/ssssssss/:.`                                         `.:syddhhhhhy+:                  ``--:::--`     `.------.`     `.:-----.`    `..:----..     `.-:----.`     `.------.`     `-------``    `.---::--                    :/shhhhhddhs/.`                              ``.`       .+sy+:`..ssy/-     ```                              /oddhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhdy+.                                  ..sss/-..-..        ````.-:..                               ``+shhhhhhhhs+:.`                ``..--:-.     `.------..     `.------.`     ..------``     .-------``     .------.`     `-------.`    ``-..``               ``-+ohhhhhhhhso.`                                `+oy+:      `./oysoooso-`                                     ./ydhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhhd+:                                `/oys/.         ``-://+ooosss+:.`                              `.-+shhhhhhhhso-.`                 ``..-..`    `.------.`     `.------.`    ``-------``    `.-------``    `.-------`    ``.----:-.                      `.-oshhhhhhhhso:.`                                   :/ssy/-`     `.++ssss+.``                                   -/hhhyyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhhhh.`                              `+so/`        `./osssssoo+//ssy/:                                 ``/+yhhhhhhhyyo:-``                  ```      `.----:-.``   ``-------.`    ``-------.`    ``-------``    `.----:-.`     `.-..``                  ``-:+sydhhhhhhyo/``                                       `-+sys/.`      .:+osso/:`                                ``yydhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyyhds+`                              .--.        :/sss+/:--.``  /oho+                                    `.:+yhhhhhhdhho+:..                          `.----:--``   ``.------.`    ``-------.     `.------..     `.------``                         `.:+oyhdhhhhhhh+/-`                                 `          .-ssy:.        `./+yss``                              `/oddyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhdho.                                      `-/syyso``       `osy/-                                        -:+sydhhhhhhhys/:.`                        ````.....`     `.--:::--`    `..--:::-.`    `..-----.`     ``````                       `.:/syhhhhhhhdys+:-                                   `-+/:          osy+:``        ``---                               ./ydhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhhdo+                                   .:+syoo+sy+:`     .-yso-`                                          ``./+shhhhhhhhhyso::.``                                   ``......``     ..-..-..`      ``````                              ``-:ooyhhhhhhhhhyo+..`                                     -/yyy/:`     -:ssssso+/-.                                        /odhhyyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhhhd:-                                 /+yso..`/+yso-.   :/hs+.                                              ``.:/syhhhhhhhhhyyo+:-```                                                                                          ```--+osyhhhhhhhhhys/:.``                                        `.:osys+-``.:osso//+sssss+/:.`                                 .-hhhhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyyhhhs-`                               `-/-.   ``+oyso...+syo-`    ``--:::..`                                     `.:+ohhhhhhhhhdhyso+:-.``                                                                                ```--+osyhdhhhhhhhhhso:.`                                      ``--:.`   .-ssyo+/+sss-. ``-:/ooyso-`                               `.ohhhyyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyydhh/.                                         ./osoossy/-     `/+sssyyso/-.                                        -:/oshhhhhhhhddhhyso/:-..``                                                                  ``..-:/osyhhddhhhhhhhhso+:-                                        .-/ossyy/-     .-+syyss:.        `.:-`                                .:yhdyyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhdhy.`                                        `/oyys/:     `-+syo+:::osyso-.                                         ``-:/osyhhhhhhhhhhhyyyoo+/:--..``                                                ```.--://+oyyyhhhhhhhhhhhhso+:-.`                                         .-osyss/::..       `:/sss/:`                                          ``sydhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhhdy+.`                                    -:osso+-`    ``+oyso.`   .-/osso/.                                            `.-:/ooyyhhhhhhhhhhhhhyyysso+//:::---..```                    ```..---::://+ossyyyhhhhhhhhhhhhhyyoo/:-.`                                            `-osso+-.             ``:/ssy+:`                                       `+sdhhhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhdhs:.                                   +oyso.`     `:+yyo:.       `-:sss:.                                               ```.-:/+ssyyhhhhhhhhhhhhhhhhhhyyyyssooo+++++++++++++++++++oosssyyyhhhhhhhhhhhhhhhhhhhyss+/:-.```                                                .+sh/:`                  `-+syso-`                                   `-ohdhhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhdys``                                 `./.`      .+sys+.`          `ssy/-                                                      ```.-:++osyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhdhhhhyyso+:-.````                                                      -oyy:-                     `.sso-`                                  `oydhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyyhdy+.                                          :+yss.`          `-/yss:.   ``/:.``                                                     ``..-:/++ossyyyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyyysso++/:--.``                                                     `          ./sys+.`             ```     ```                                  `/sddyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyydhs:.                                        +oho/           ./oyso-`    :+yys+/..`                                                            ```..--:::::///////+++++++///////::::---..``                                                            `.-/:-..       `:+yys:.          `-o+/`                                       `-ohdhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhdyy.`                                      /+ho+.`        :+yys:.    `:oyoo+ssso/:-                                                                                                                                                                .-+ossssoo:-.`    ``+oyso.`      ``+oho+                                      `.sydhhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhdyo.`                                    .:ssyo+-`    -:yyy/:     .:syy--`--ooyss/:`                                                                                                                                                             /+yso::/osyso+/``   `-+syo/.`  `-/oyys:.                                     `+sdhhhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyydhh/.                                    ``/+yys+/::/osyo:.      osyo+     `.:+syo-`                                                                                                                                                            /oh+:  `.-+oyyy+:     `/oyso///+syyo/.`                                    .:yhdhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhhdd:-                                      -/oyyyyyys:-      :+yso.         :/hs+.    ``..`                                                                                                                                      ``````       /oh+:      `./oys+.     `+osyyyys/:                                      .-hhdhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhhdy/.`                                    `.-::::--      `-oysso:-``    `.+syo:`    :+ys+/:..`                                                                                                                            `..:/+osoo/-.     /oh+:      ``:/yyy/-      `-----.`                                     .:shhhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyyhhds+``                                                .:sss++oss+/-...:osy/:    `.+ssssssso+/:.`                                                                                                                    `.-:+osssso+osyso``   /oh+/   `.:/oosoosss.`                                              ``/ohhhyyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhhhds+.`                                             `+oyo+`..:+sssoossyso``    .+sy+:.--+ossss+-`                                                                                                                `.+ssssoo:-.``.:oyy:-   :+yso..-+oyss+/.-+syo/`                                            `/odhhhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhhdhy/-                                           -:hys:.   ``:/yssoo+-.     .:yyy.`   ``.:+yso-`   ..:-.`                                                                                                       `/sys/.`      `:oyo/`  `-ossoosss/:.``  `+syo-`                                         .:yhdhhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhhhh/:`                                        ``/:-`      :+ho+``        +oyo/         `ssy/:   :+yyso+//:.`                                                                                   -:o/.`         .-yyo-`       `/oyo-`  `.+syso-`        `.``                                        `-:hhhhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhhdyo:.                                                  /oh+:        .-yys:.        `.sss:.   `.:/sssssy:.  `:/-.                                                               `..`         :+hs/.           osy+/    ``.:oss+.`    .-yss:.                                                  .-+yhhhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhhdys-.                                                osh/-        :+ys/.         :/ys+.      -/yso..-.` `-oys+-`        `.-``           `````            ````````.....``    `+os:.        -/hs+.           -/yss...:/oosss/-        /oyso``                                              .-sydhhyyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhhhhhy+-`                                             -/o:.      `-oys+.`       `.+sy+.`      +oh+/      `:oysso-       `:sy/-         `:/++//-.        ``//+++ooooosss++.`   osho/        :+ys:`            .+syooossoo/:-`         `-o/:`                                            `./shdhhhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyyhhdys-.                                            ```       .+sy/:         ./sh+:      `.sss:.      .+osssy/-      ./yh:-        :+yssssyoo``      ``sssooo++++/+osyo/`  -/yys/-`   `.oys+`             `-oyss+:-.``              ``                                            `.oshhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhhhhhy+.`                                                  .:ssyo+/:-``   -/sss.`      -/hs+.      `-sss:/sss``    .osy.`      .-yys/:.:+sy+:       `osy/-```````.+sy+.`  `-+syso:. .+sh/-                :+ys/.                                                             `./shhhhhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhhhhhys-.`                                               `.-:/oosss++///osyo/       `/oyo:`      .:yoo`./sh/-   `-sss``     ./oys/.  `.+syo-`      osy/-        /oyo-`    ..+oyso/+sss``                ..ssy/-                                                         `..oshhhhhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhdhs+-.                                                  ..://ossssso+-`      `.oys+`       -/ho+  `+ss+.` -/yo+      .+syo/`     -/yso-`     +oh+:       `/oys:`      `./ossss+/                    +oho+                                                       `-/sydhhhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyyhhdyy:-`                                                    ..-::.`      `..-/sh/:        /oh+/   -:hs+. :+h+/     .:yss.`       `osy+:     /+yo+.....--/oss+-`         .-ssy/-                    .-/-.                                                    `.-sydhhyyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhhhhhyo:-                                                              `/osssyy/:.`      +oy/-   ``osy:.:+h+:     .:yso...```````+oy+:     :/ysooossssssss:-             +oy+/                                                                           .:+yhhhhhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyyhhhhh+/.`                                                          `-:/++ooss+.    ``sss:`     -/yoooos:.     .:ssoooooooooooosy/:     -/yso++//::/osy-.             -/yso`                                                                      `.:+yhhhhyyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhhhhhhyo/``                                                          ```..:::`    .-hyo-       .+sssso-`     -/yso////++++++osy/-     .:yss````  .:syo/`            `:sso``                                                                  ``/+yhhhhhhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhdyo:.`                                                                    `.o+:`       `.+yys+.      -/yso``````````osy/-     `:sss.`     `/oys/.            `...                                                                 `.:osdhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyyyhhdys:-.`                                                                               -:so:`      -/hso         `ssy/-     `-oyy-.      ..ooo-.                                                                             `-:syhddyyyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhhhdhhs+:.`                                                                              .``       .-/::         `/++:.      `://.`        `````                                                                         `.:/syhdhhhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyyhhhhhyo/--                                                                                                    ````                                                                                                .-/oshhhhhyyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyy+/-`                                                                                                                                                                                                `./+yyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhdhhso-.                                                                                                                                                                                          ..oshhdhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhhhddhy+/.``                                                                                                                                                                              ``./+shhddhhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhhdddyyo/:..`                                                                                                                                                                    ``.-:osydddhhyyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhhhhhhhys+/:.`                                                                                                                                                            `.::+sshhhhhhhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyyyhhhhhhhss+/:.`                                                                                                                                                  ``-:+oshhhhhhhyyyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhhhhhhhhhyso/:``                                                                                                                                        ``:/+syhhhhhhhhhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhddhys+/--```                                                                                                                        ```.-/+syydddhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhysoo/:-..```                                                                                                        ```...:/oosyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyyyoo/::--.```                                                                                        ```..-::/+osyyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyhhhhhhhhhhyysso++::--..``                                                                      ``..--::/+oosyyhhhhhhhhhhyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyyyss++//:--...```                                            ```...--::/++osyyyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyyyyssoo++++/////:::::::::::::::::::://///+++++osssyyyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyysoo++//////++oosyyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhyo+/-.``                ``.-:+oyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhs+:.`                              `.:+shhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhyo:.`             ``  `.`  `.`             `.:oyhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhyo:`           .   :/-. -/./`./.-. /` .           `:oyhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhy+.        `.`   /-  `o-. +:-+-/-`/:-/ `+ ::-.         ./yhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhs/`       ` .+--   `+.-./--`.` ```---`::./.:/-.`   `       `/shhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhy/`       . .+.-+--.  ```   ```.....``   ````/:-`  `/-:-       `/yhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhy+.      `- :::-:--.`   .-:/++++//////++++/:-.` ``  `+. -+`.`      `+yhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhy-       -//` ./` `  .:+++:-.`` `  `  `  ``.-:+++:.   -:::-/::-       -shhhhhhhhhhhhhh
hhhhhhhhhhhhho`        ` `:: `  `:++:.````.`...........`.`````.:++:.   -.`- `        `ohhhhhhhhhhhhh
hhhhhhhhhhhh+`             `  .+o:.```.`..`..`................`  .:o+.                 +hhhhhhhhhhhh
hhhhhhhhhhh+                .+o-``.`..`..`..`..`..`..`...........```-o+.                /hhhhhhhhhhh
hhhhhhhhhh+               `/s- `..`..`..`..`...--:::::--.``........```-s/`               +hhhhhhhhhh
hhhhhhhhhs               `o+```..`..`..`.-/++oooooooooooo+/-..`..`.`````+s.               ohhhhhhhhh
hhhhhhhhy.              .y: .`..`..`..`:ooooooooooooooooo+/:-::-...-`..` :y.              `yhhhhhhhh
hhhhhhhh/      .       .y: .`.`.:---. /oooooooooooooooo/::/:-:++:..`..... -y.       .      /hhhhhhhh
hhhhhhhy`   `.:s:``    s/ .```+ooooo/-ooooooooooooooo+::/+./ooooo+...`..`. /y`   `.:s:``    yhhhhhhh
hhhhhhh+   `/ooooo/`  /s ..` :ooooo+`ooooooooooooooo//:+/.+oooooooo.`..`..` s/  `/ooooo/`   +hhhhhhh
hhhhhhh.     oooo/    h-`.`` :ooooo.:-ooooooooooooo:--/+`ooooooooooo`.`..`.`-h`   oooo/     .hhhhhhh
hhhhhhh     `.  `-   -h ``.. `+oos.///-/oooooooooo-----./oooooooooos.`..`..` y:  `.  `-      yhhhhhh
hhhhhhy              +s `..``  :oo:-///:-:+oooooo-/-/o-.sooooooooooo ..`..`. o+              yhhhhhh
hhhhhhy              ++ ..`..   `:o/-/////:-:/oo-/:/o+ oooooooooooo-`.`..`.. ++              shhhhhh
hhhhhhy              +o .`..`..   `-:.-.-:///:.-/::oo.-ooooooosooo+`.`..`..` o+              yhhhhhh
hhhhhhh              -y `..`..`..:+ooo+../-:/--//:oo/.:::///::-...``  ` ..`. y:              yhhhhhh
hhhhhhh.             `h-`.`..`-+ooo+/--:/-/:`://-ooo-`.`.-:::/++ooooo+:-``.`.h`             .hhhhhhh
hhhhhhh+         `    /s `..`.---.-:://///::/:::ooo:-+oooooooooooooooooo:`. s+              /hhhhhhh
hhhhhhhy     .:/:/`   `y/ .`.`-/-/-////////:/-/ooo/:`://++oooooooooooo/-`. :y`   `/`::`     yhhhhhhh
hhhhhhhh/    `/`.`:    .y- ..`.:/-/-////////.ooooo:-.`..`....:::///:-..`. -y.    .::`/`    :hhhhhhhh
hhhhhhhhy`    `--/:`    .y: `..-:/-//://///:/oooo:/.`..`..`..`..`..`..`. :y-    /.:`-`    `yhhhhhhhh
hhhhhhhhhs     `::.--    .s+````.:/::++/::/+ooo+::.`..`..`..`..`..`..```/s.    ..:/-:     ohhhhhhhhh
hhhhhhhhhh+     ``.-/:    `/s-````-:::/ooooo++/:-.`..`..`..`..`..`..` -s+`    /-`:/`     +hhhhhhhhhh
hhhhhhhhhhh/     ..``::.    .oo-```.-:::::::--...`..`..`..`..`..`.``-oo.    ..-:--:     /hhhhhhhhhhh
hhhhhhhhhhhh+      -:/.+`     .+o:`  `.``..`.......`..`..`..`.````:o+-     `+.::-`     /hhhhhhhhhhhh
hhhhhhhhhhhhho`     `:.---:     ./++:.`````.`...........`.``` .:+o/.    ` :-.:/ `    `ohhhhhhhhhhhhh
hhhhhhhhhhhhhhs-      -::-:`..     .:++/:..``  `` `  ` ``..:/++:.     ``-::::.`     -shhhhhhhhhhhhhh
hhhhhhhhhhhhhhhy+`      :.-:.-: `     `.-//+++////////+++//-.`     ` ::` .:-      `+yhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhy:`      /-.:./-:. `        ``......``        `` /-:-:--:      `:yhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhs:`     ```/-/:.:--- .`                 ` `/././::/```     `:shhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhs/.        : -:`-:`+`:: -` --` :-:`:.-:  /:-` -        ./shhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhyo:`       `.--`/- +.:+ /-.+ +-/- -+    -         `-oyhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhyo:``        `` . .- /../ :`.-  .          ``:oyhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhys+:``                              ``-+syhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhso+:.``                  ``.:/oshhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhysso++////////++oosyhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
<?php

namespace League\CLImate\Argument;

use League\CLImate\Exceptions\UnexpectedValueException;
use function is_array;

class Argument
{
    /**
     * An argument's name.
     *
     * Use this name when internally referring to the argument.
     *
     * @var string
     */
    protected $name;

    /**
     * An argument's short representation.
     *
     * @var string
     */
    protected $prefix;

    /**
     * An argument's long representation.
     *
     * @var string
     */
    protected $longPrefix;

    /**
     * An argument's description.
     *
     * @var string
     */
    protected $description;

    /**
     * Whether or not an argument is required.
     *
     * @var bool
     */
    protected $required = false;

    /**
     * Whether or not an argument only needs to be defined to have a value.
     *
     * These arguments have the value true when they are defined on the command
     * line.
     *
     * @var bool
     */
    protected $noValue = false;

    /**
     * Which data type to cast an argument's value to.
     *
     * Valid data types are "string", "int", "float", and "bool".
     *
     * @var string
     */
    protected $castTo = 'string';

    /**
     * An argument's default value.
     *
     * @var string
     */
    protected $defaultValue = [];

    /**
     * An argument's value, after type casting.
     *
     * @var string[]|int[]|float[]|bool[]
     */
    protected $values = [];

    /**
     * Build a new command argument.
     *
     * @param string $name
     */
    public function __construct($name)
    {
        $this->setName($name);
    }

    /**
     * Build a new command argument from an array.
     *
     * @param string $name
     * @param array $params
     *
     * @return Argument
     */
    public static function createFromArray($name, array $params)
    {
        $argument = new Argument($name);
        $params   = self::getSettableArgumentParams($params);

        foreach ($params as $key => $value) {
            $method = 'set' . ucwords($key);
            $argument->{$method}($value);
        }

        return $argument;
    }

    /**
     * Get argument params based on settable properties
     *
     * @param array $params
     *
     * @return array
     */
    protected static function getSettableArgumentParams(array $params)
    {
        $allowed = [
                    'prefix',
                    'longPrefix',
                    'description',
                    'required',
                    'noValue',
                    'castTo',
                    'defaultValue',
                ];

        return array_intersect_key($params, array_flip($allowed));
    }

    /**
     * Retrieve an argument's name.
     *
     * Use this name when internally referring to the argument.
     *
     * @return string
     */
    public function name()
    {
        return $this->name;
    }

    /**
     * Set an argument's name.
     *
     * Use this name when internally referring to the argument.
     *
     * @param string $name
     */
    protected function setName($name)
    {
        $this->name = trim($name);
    }

    /**
     * Retrieve an argument's short form.
     *
     * @return string
     */
    public function prefix()
    {
        return $this->prefix;
    }

    /**
     * Set an argument's short form.
     *
     * @param string $prefix
     */
    protected function setPrefix($prefix)
    {
        $this->prefix = trim($prefix);
    }

    /**
     * Retrieve an argument's long form.
     *
     * @return string
     */
    public function longPrefix()
    {
        return $this->longPrefix;
    }

    /**
     * Set an argument's short form.
     *
     * @param string $longPrefix
     */
    protected function setLongPrefix($longPrefix)
    {
        $this->longPrefix = trim($longPrefix);
    }

    /**
     * Determine if an argument has a prefix.
     *
     * @return bool
     */
    public function hasPrefix()
    {
        return $this->prefix() || $this->longPrefix();
    }

    /**
     * Retrieve an argument's description.
     *
     * @return string
     */
    public function description()
    {
        return $this->description;
    }

    /**
     * Set an argument's description.
     *
     * @param string $description
     */
    protected function setDescription($description)
    {
        $this->description = trim($description);
    }

    /**
     * Determine whether or not an argument is required.
     *
     * @return bool
     */
    public function isRequired()
    {
        return $this->required;
    }

    /**
     * Set whether an argument is required or not.
     *
     * @param bool $required
     */
    protected function setRequired($required)
    {
        $this->required = (bool) $required;
    }

    /**
     * Determine whether or not an argument only needs to be defined to have a
     * value.
     *
     * @return bool
     */
    public function noValue()
    {
        return $this->noValue;
    }

    /**
     * Set whether or not an argument only needs to be defined to have a value.
     *
     * @param bool $noValue
     */
    protected function setNoValue($noValue)
    {
        $this->setCastTo('bool');
        $this->noValue = (bool) $noValue;
    }

    /**
     * Retrieve the data type to cast an argument's value to.
     *
     * @return string
     */
    public function castTo()
    {
        return $this->castTo;
    }

    /**
     * Set the data type to cast an argument's value to.
     *
     * Valid data types are "string", "int", "float", and "bool".
     *
     * @param string $castTo
     *
     * @return void
     * @throws UnexpectedValueException if $castTo is not a valid data type.
     */
    protected function setCastTo($castTo)
    {
        if (!in_array($castTo, ['string', 'int', 'float', 'bool'])) {
            throw new UnexpectedValueException(
                "An argument may only be cast to the data type "
                . "'string', 'int', 'float', or 'bool'."
            );
        }

        $this->castTo = $this->noValue() ? 'bool' : $castTo;
    }

    /**
     * Retrieve an argument's default values.
     *
     * @return string
     */
    public function defaultValue()
    {
        return $this->defaultValue;
    }

    /**
     * Set an argument's default value.
     *
     * @param string $defaultValue
     */
    public function setDefaultValue($defaultValue)
    {
        if (!is_array($defaultValue)) {
            $defaultValue = [$defaultValue];
        }
        $this->defaultValue = $defaultValue;
    }

    /**
     * Retrieve an argument's value.
     *
     * Argument values are type cast based on the value of $castTo.
     *
     * @return string|int|float|bool
     */
    public function value()
    {
        if ($this->values) {
            return end($this->values);
        }
        $cast_method = 'castTo' . ucwords($this->castTo);
        return $this->{$cast_method}(current($this->defaultValue()));
    }

    /**
     * Retrieve an argument's values.
     *
     * Argument values are type cast based on the value of $castTo.
     *
     * @return string[]|int[]|float[]|bool[]
     */
    public function values()
    {
        if ($this->values) {
            return $this->values;
        }
        $cast_method = 'castTo' . ucwords($this->castTo);
        return array_map([$this, $cast_method], $this->defaultValue());
    }

    /**
     * @deprecated use values() instead.
     */
    public function valueArray()
    {
        return $this->values();
    }

    /**
     * Set an argument's value based on its command line entry.
     *
     * Argument values are type cast based on the value of $castTo.
     *
     * @param string|bool $value
     */
    public function setValue($value)
    {
        $cast_method = 'castTo' . ucwords($this->castTo);
        $this->values[] = $this->{$cast_method}($value);
    }

    /**
     * @param string $value
     *
     * @return string
     */
    protected function castToString($value)
    {
        return (string) $value;
    }

    /**
     * @param string $value
     *
     * @return int
     */
    protected function castToInt($value)
    {
        return (int) $value;
    }

    /**
     * @param string $value
     *
     * @return float
     */
    protected function castToFloat($value)
    {
        return (float) $value;
    }

    /**
     * @param string $value
     *
     * @return bool
     */
    protected function castToBool($value)
    {
        return (bool) $value;
    }
}
<?php

namespace League\CLImate\Argument;

class Filter
{
    protected $arguments = [];

    /**
     * Set the available arguments
     *
     * @param array $arguments
     */
    public function setArguments(array $arguments)
    {
        $this->arguments = $arguments;
    }

    /**
     * Retrieve optional arguments
     *
     * @return Argument[]
     */
    public function optional()
    {
        return $this->filterArguments(['isOptional']);
    }

    /**
     * Retrieve required arguments
     *
     * @return Argument[]
     */
    public function required()
    {
        return $this->filterArguments(['isRequired']);
    }

    /**
     * Retrieve arguments with prefix
     *
     * @return Argument[]
     */
    public function withPrefix()
    {
        return $this->filterArguments(['hasPrefix']);
    }

    /**
     * Retrieve arguments without prefix
     *
     * @return Argument[]
     */
    public function withoutPrefix()
    {
        return $this->filterArguments(['noPrefix']);
    }

    /**
     * Find all required arguments that don't have values after parsing.
     *
     * These arguments weren't defined on the command line.
     *
     * @return Argument[]
     */
    public function missing()
    {
        return $this->filterArguments(['isRequired', 'noValue']);
    }

    /**
     * Filter defined arguments as to whether they are required or not
     *
     * @param string[] $filters
     *
     * @return Argument[]
     */
    protected function filterArguments($filters = [])
    {
        $arguments = $this->arguments;

        foreach ($filters as $filter) {
            $arguments = array_filter($arguments, [$this, $filter]);
        }

        if (in_array('hasPrefix', $filters)) {
            usort($arguments, [$this, 'compareByPrefix']);
        }

        return array_values($arguments);
    }

    /**
     * Determine whether an argument as a prefix
     *
     * @param Argument $argument
     *
     * @return bool
     */
    protected function noPrefix($argument)
    {
        return !$argument->hasPrefix();
    }

    /**
     * Determine whether an argument as a prefix
     *
     * @param Argument $argument
     *
     * @return bool
     */
    protected function hasPrefix($argument)
    {
        return $argument->hasPrefix();
    }

    /**
     * Determine whether an argument is required
     *
     * @param Argument $argument
     *
     * @return bool
     */
    protected function isRequired($argument)
    {
        return $argument->isRequired();
    }

    /**
     * Determine whether an argument is optional
     *
     * @param Argument $argument
     *
     * @return bool
     */
    protected function isOptional($argument)
    {
        return !$argument->isRequired();
    }

    /**
     * Determine whether an argument is optional
     *
     * @param Argument $argument
     *
     * @return bool
     */
    protected function noValue($argument)
    {
        return $argument->values() == [];
    }

    /**
     * Compare two arguments by their short and long prefixes.
     *
     * @see usort()
     *
     * @param Argument $a
     * @param Argument $b
     *
     * @return int
     */
    public function compareByPrefix(Argument $a, Argument $b)
    {
        if ($this->prefixCompareString($a) < $this->prefixCompareString($b)) {
            return -1;
        }

        return 1;
    }

    /**
     * Prep the prefix string for comparison
     *
     * @param Argument $argument
     *
     * @return string
     */
    protected function prefixCompareString(Argument $argument)
    {
        return mb_strtolower($argument->longPrefix() ?: $argument->prefix() ?: '');
    }
}
<?php

namespace League\CLImate\Argument;

use League\CLImate\CLImate;
use League\CLImate\Exceptions\InvalidArgumentException;

class Manager
{
    /**
     * An array of arguments passed to the program.
     *
     * @var Argument[] $arguments
     */
    protected $arguments = [];

    /**
     * A program's description.
     *
     * @var string $description
     */
    protected $description;

    /**
     * Filter class to find various types of arguments
     *
     * @var \League\CLImate\Argument\Filter $filter
     */
    protected $filter;

    /**
     * Summary builder class
     *
     * @var \League\CLImate\Argument\Summary $summary
     */
    protected $summary;

    /**
     * Argument parser class
     *
     * @var \League\CLImate\Argument\Parser $parser
     */
    protected $parser;

    public function __construct()
    {
        $this->filter  = new Filter();
        $this->summary = new Summary();
        $this->parser  = new Parser();
    }

    /**
     * Add an argument.
     *
     * @param Argument|string|array $argument
     * @param $options
     *
     * @return void
     * @throws InvalidArgumentException if $argument isn't an array or Argument object.
     */
    public function add($argument, array $options = [])
    {
        if (is_array($argument)) {
            $this->addMany($argument);
            return;
        }

        if (is_string($argument)) {
            $argument = Argument::createFromArray($argument, $options);
        }

        if (!$argument instanceof Argument) {
            throw new InvalidArgumentException('Please provide an argument name or object.');
        }

        $this->arguments[$argument->name()] = $argument;
    }

    /**
     * Add multiple arguments to a CLImate script.
     *
     * @param array $arguments
     */
    protected function addMany(array $arguments = [])
    {
        foreach ($arguments as $name => $options) {
            $this->add($name, $options);
        }
    }

    /**
     * Determine if an argument exists.
     *
     * @param string $name
     * @return bool
     */
    public function exists($name)
    {
        return isset($this->arguments[$name]);
    }

    /**
     * Retrieve an argument's value.
     *
     * @param string $name
     * @return string|int|float|bool|null
     */
    public function get($name)
    {
        return isset($this->arguments[$name]) ? $this->arguments[$name]->value() : null;
    }

    /**
     * Retrieve an argument's all values as an array.
     *
     * @param string $name
     * @return string[]|int[]|float[]|bool[]
     */
    public function getArray($name)
    {
        return isset($this->arguments[$name]) ? $this->arguments[$name]->values() : [];
    }

    /**
     * Retrieve all arguments.
     *
     * @return Argument[]
     */
    public function all()
    {
        return $this->arguments;
    }

    /**
     * Determine if an argument has been defined on the command line.
     *
     * This can be useful for making sure an argument is present on the command
     * line before parse()'ing them into argument objects.
     *
     * @param string $name
     * @param array $argv
     *
     * @return bool
     */
    public function defined($name, array $argv = null)
    {
        // The argument isn't defined if it's not defined by the calling code.
        if (!$this->exists($name)) {
            return false;
        }

        $argument = $this->arguments[$name];
        $command_arguments = $this->parser->arguments($argv);

        foreach ($command_arguments as $command_argument) {
            if ($this->isArgument($argument, $command_argument)) {
                return true;
            }
        }

        return false;
    }

    /**
     * Check if the defined argument matches the command argument.
     *
     * @param Argument $argument
     * @param string $command_argument
     *
     * @return bool
     */
    protected function isArgument($argument, $command_argument)
    {
        $possibilities = [
            $argument->prefix()     => "-{$argument->prefix()}",
            $argument->longPrefix() => "--{$argument->longPrefix()}",
        ];

        foreach ($possibilities as $key => $search) {
            if ($key && strpos($command_argument, $search) === 0) {
                return true;
            }
        }

        return false;
    }

    /**
     * Retrieve all arguments as key/value pairs.
     *
     * @return array
     */
    public function toArray()
    {
        $return = [];

        foreach ($this->all() as $name => $argument) {
            $return[$name] = $argument->value();
        }

        return $return;
    }

    /**
     * Set a program's description.
     *
     * @param string $description
     */
    public function description($description)
    {
        $this->description = trim($description);
    }

    /**
     * Output a script's usage statement.
     *
     * @param CLImate $climate
     * @param array $argv
     */
    public function usage(CLImate $climate, array $argv = null)
    {
        $this->summary
                ->setClimate($climate)
                ->setDescription($this->description)
                ->setCommand($this->parser->command($argv))
                ->setFilter($this->filter, $this->all())
                ->output();
    }

    /**
     * Parse command line arguments into CLImate arguments.
     *
     * @param array $argv
     */
    public function parse(array $argv = null)
    {
        $this->parser->setFilter($this->filter, $this->all());

        $this->parser->parse($argv);
    }

    /**
     * Get the trailing arguments
     *
     * @return string|null
     */
    public function trailing()
    {
        return $this->parser->trailing();
    }

    /**
     * Get the trailing arguments as an array
     *
     * @return array|null
     */
    public function trailingArray()
    {
        return $this->parser->trailingArray();
    }
}
<?php

namespace League\CLImate\Argument;

use League\CLImate\Exceptions\InvalidArgumentException;

class Parser
{
    /**
     * Filter class to find various types of arguments
     *
     * @var \League\CLImate\Argument\Filter $filter
     */
    protected $filter;

    /**
     * Summary builder class
     *
     * @var \League\CLImate\Argument\Summary $summary
     */
    protected $summary;

    protected $trailing;

    protected $trailingArray;

    public function __construct()
    {
        $this->summary = new Summary();
    }

    /**
     * @param Filter $filter
     * @param Argument[] $arguments
     *
     * @return \League\CLImate\Argument\Parser
     */
    public function setFilter($filter, $arguments)
    {
        $this->filter = $filter;
        $this->filter->setArguments($arguments);

        return $this;
    }

    /**
     * Parse command line arguments into CLImate arguments.
     *
     * @param array $argv
     *
     * @return void
     * @throws InvalidArgumentException if required arguments aren't defined.
     */
    public function parse(array $argv = null)
    {
        $cliArguments = $this->arguments($argv);

        if (in_array('--', $cliArguments)) {
            $cliArguments = $this->removeTrailingArguments($cliArguments);
        }

        $unParsedArguments = $this->prefixedArguments($cliArguments);

        $this->nonPrefixedArguments($unParsedArguments);

        // After parsing find out which arguments were required but not
        // defined on the command line.
        $missingArguments = $this->filter->missing();

        if (count($missingArguments) > 0) {
            throw new InvalidArgumentException(
                'The following arguments are required: '
                . $this->summary->short($missingArguments) . '.'
            );
        }
    }

    /**
     * Get the command name.
     *
     * @param array $argv
     *
     * @return string
     */
    public function command(array $argv = null)
    {
        return $this->getCommandAndArguments($argv)['command'];
    }

    /**
     * Get the passed arguments.
     *
     * @param array $argv
     *
     * @return array
     */
    public function arguments(array $argv = null)
    {
        return $this->getCommandAndArguments($argv)['arguments'];
    }

    /**
     * Get the trailing arguments
     *
     * @return string|null
     */
    public function trailing()
    {
        return $this->trailing;
    }

    /**
     * Get the trailing arguments as an array
     *
     * @return array|null
     */
    public function trailingArray()
    {
        return $this->trailingArray;
    }

    /**
     * Remove the trailing arguments from the parser and set them aside
     *
     * @param array $arguments
     *
     * @return array
     */
    protected function removeTrailingArguments(array $arguments)
    {
        $trailing = array_splice($arguments, array_search('--', $arguments));
        array_shift($trailing);
        $this->trailingArray = $trailing;
        $this->trailing = implode(' ', $trailing);

        return $arguments;
    }

    /**
     * Parse command line options into prefixed CLImate arguments.
     *
     * Prefixed arguments are arguments with a prefix (-) or a long prefix (--)
     * on the command line.
     *
     * Return the arguments passed on the command line that didn't match up with
     * prefixed arguments so they can be assigned to non-prefixed arguments.
     *
     * @param array $argv
     * @return array
     */
    protected function prefixedArguments(array $argv = [])
    {
        foreach ($argv as $key => $passed_argument) {
            $argv = $this->trySettingArgumentValue($argv, $key, $passed_argument);
        }

        // Send un-parsed arguments back upstream.
        return array_values($argv);
    }

    /**
     * Parse unset command line options into non-prefixed CLImate arguments.
     *
     * Non-prefixed arguments are parsed after the prefixed arguments on the
     * command line, in the order that they're defined in the script.
     *
     * @param array $unParsedArguments
     */
    protected function nonPrefixedArguments(array $unParsedArguments = [])
    {
        foreach ($this->filter->withoutPrefix() as $key => $argument) {
            if (isset($unParsedArguments[$key])) {
                $argument->setValue($unParsedArguments[$key]);
            }
        }
    }

    /**
     * Parse the name and value of the argument passed in
     *
     * @param string $cliArgument
     * @return string[] [$name, $value]
     */
    protected function getNameAndValue($cliArgument)
    {
        // Look for arguments defined in the "key=value" format.
        if (strpos($cliArgument, '=') !== false) {
            return explode('=', $cliArgument, 2);
        }

        // If the argument isn't in "key=value" format then assume it's in
        // "key value" format and define the value after we've found the
        // matching CLImate argument.
        return [$cliArgument, null];
    }

    /**
     * Attempt to set the an argument's value and remove applicable
     * arguments from array
     *
     * @param array $argv
     * @param int $key
     * @param string $passed_argument
     *
     * @return array The new $argv
     */
    protected function trySettingArgumentValue($argv, $key, $passed_argument)
    {
        list($name, $value) = $this->getNameAndValue($passed_argument);

        // Look for the argument in our defined $arguments
        // and assign their value.
        if (!($argument = $this->findPrefixedArgument($name))) {
            return $argv;
        }

        // We found an argument key, so take it out of the array.
        unset($argv[$key]);

        return $this->setArgumentValue($argv, $argument, $key, $value);
    }

    /**
     * Set the argument's value
     *
     * @param array $argv
     * @param Argument $argument
     * @param int $key
     * @param string|null $value
     *
     * @return array The new $argv
     */
    protected function setArgumentValue($argv, $argument, $key, $value)
    {
        // Arguments are given the value true if they only need to
        // be defined on the command line to be set.
        if ($argument->noValue()) {
            $argument->setValue(true);
            return $argv;
        }

        if (is_null($value)) {
            if (count($argv) === 0) {
                return $argv;
            }

            // If the value wasn't previously defined in "key=value"
            // format then define it from the next command argument.
            $nextArgvValue = $argv[$key + 1];
            if ($this->isValidArgumentValue($nextArgvValue)) {
                $argument->setValue($nextArgvValue);
                unset($argv[$key + 1]);
                return $argv;
            }
        }

        $argument->setValue($value);

        return $argv;
    }

    /**
     * Check if the value is considered a valid input value.
     *
     * @param $argumentValue
     * @return bool
     */
    protected function isValidArgumentValue($argumentValue)
    {
        return empty($this->findPrefixedArgument($argumentValue));
    }

    /**
     * Search for argument in defined prefix arguments
     *
     * @param string $name
     *
     * @return Argument|false
     */
    protected function findPrefixedArgument($name)
    {
        foreach ($this->filter->withPrefix() as $argument) {
            if (in_array($name, ["-{$argument->prefix()}", "--{$argument->longPrefix()}"])) {
                return $argument;
            }
        }

        return false;
    }

    /**
     * Pull a command name and arguments from $argv.
     *
     * @param array $argv
     * @return array
     */
    protected function getCommandAndArguments(array $argv = null)
    {
        // If no $argv is provided then use the global PHP defined $argv.
        if (is_null($argv)) {
            global $argv;
        }

        $arguments = $argv;
        $command   = array_shift($arguments);

        return compact('arguments', 'command');
    }
}
<?php

namespace League\CLImate\Argument;

use League\CLImate\CLImate;

class Summary
{
    /**
     * @var \League\CLImate\CLImate $climate
     */
    protected $climate;

    /**
     * @var string $description
     */
    protected $description;

    /**
     * @var string $command
     */
    protected $command;

    /**
     * @var Filter $filter
     */
    protected $filter;

    /**
     * @param \League\CLImate\CLImate $climate
     *
     * @return \League\CLImate\Argument\Summary
     */
    public function setClimate(CLImate $climate)
    {
        $this->climate = $climate;

        return $this;
    }

    /**
     * @param string $description
     *
     * @return \League\CLImate\Argument\Summary
     */
    public function setDescription($description)
    {
        $this->description = $description;

        return $this;
    }

    /**
     * @param string $command
     *
     * @return \League\CLImate\Argument\Summary
     */
    public function setCommand($command)
    {
        $this->command = $command;

        return $this;
    }

    /**
     * @param Filter $filter
     * @param Argument[] $arguments
     *
     * @return \League\CLImate\Argument\Summary
     */
    public function setFilter($filter, $arguments)
    {
        $this->filter = $filter;
        $this->filter->setArguments($arguments);

        return $this;
    }

    /**
     * Output the full summary for the program
     */
    public function output()
    {
        // Print the description if it's defined.
        if ($this->description) {
            $this->climate->out($this->description)->br();
        }

        // Print the usage statement with the arguments without a prefix at the end.
        $this->climate->out("Usage: {$this->command} "
                            . $this->short($this->getOrderedArguments()));

        // Print argument details.
        foreach (['required', 'optional'] as $type) {
            $this->outputArguments($this->filter->{$type}(), $type);
        }
    }

    /**
     * Build a short summary of a list of arguments.
     *
     * @param Argument[] $arguments
     *
     * @return string
     */
    public function short($arguments)
    {
        return implode(' ', array_map([$this, 'argumentBracketed'], $arguments));
    }

    /**
     * Build an argument's summary for use in a usage statement.
     *
     * For example, "-u username, --user username", "--force", or
     * "-c count (default: 7)".
     *
     * @param Argument $argument
     *
     * @return string
     */
    public function argument(Argument $argument)
    {
        $summary     = $this->prefixedArguments($argument);
        $printedName = mb_strstr($summary, ' ' . $argument->name());

        // Print the argument name if it's not printed yet.
        if (!$printedName && !$argument->noValue()) {
            $summary .= $argument->name();
        }

        if ($defaults = $argument->defaultValue()) {
            if (count($defaults) == 1) {
                $summary .= " (default: {$defaults[0]})";
            } else {
                $summary .= ' (defaults: ' . implode(', ', $defaults) . ')';
            }
        }

        return $summary;
    }

    /**
     * Build argument summary surrounded by brackets
     *
     * @param Argument $argument
     *
     * @return string
     */
    protected function argumentBracketed(Argument $argument)
    {
        return '[' . $this->argument($argument) . ']';
    }

    /**
     * Get the arguments ordered by whether or not they have a prefix
     *
     * @return Argument[]
     */
    protected function getOrderedArguments()
    {
        return array_merge($this->filter->withPrefix(), $this->filter->withoutPrefix());
    }

    /**
     * Print out the argument list
     *
     * @param array $arguments
     * @param string $type
     */
    protected function outputArguments($arguments, $type)
    {
        if (count($arguments) == 0) {
            return;
        }

        $this->climate->br()->out(mb_convert_case($type, MB_CASE_TITLE) . ' Arguments:');

        foreach ($arguments as $argument) {
            $this->climate->tab()->out($this->argument($argument));

            if ($argument->description()) {
                $this->climate->tab(2)->out($argument->description());
            }
        }
    }

    /**
     * Builds the summary for any prefixed arguments
     *
     * @param Argument $argument
     *
     * @return string
     */
    protected function prefixedArguments(Argument $argument)
    {
        $prefixes = [$argument->prefix(), $argument->longPrefix()];
        $summary  = [];

        foreach ($prefixes as $key => $prefix) {
            if (!$prefix) {
                continue;
            }

            $sub = str_repeat('-', $key + 1) . $prefix;

            if (!$argument->noValue()) {
                $sub .= " {$argument->name()}";
            }

            $summary[] = $sub;
        }

        return implode(', ', $summary);
    }
}
<?php

namespace League\CLImate;

use League\CLImate\Argument\Manager as ArgumentManager;
use League\CLImate\Decorator\Style;
use League\CLImate\Settings\Manager as SettingsManager;
use League\CLImate\TerminalObject\Dynamic\Spinner;
use League\CLImate\TerminalObject\Router\Router;
use League\CLImate\Util\Helper;
use League\CLImate\Util\Output;
use League\CLImate\Util\UtilFactory;

/**
 * @method CLImate black(string $str = null)
 * @method CLImate red(string $str = null)
 * @method CLImate green(string $str = null)
 * @method CLImate yellow(string $str = null)
 * @method CLImate blue(string $str = null)
 * @method CLImate magenta(string $str = null)
 * @method CLImate cyan(string $str = null)
 * @method CLImate lightGray(string $str = null)
 * @method CLImate darkGray(string $str = null)
 * @method CLImate lightRed(string $str = null)
 * @method CLImate lightGreen(string $str = null)
 * @method CLImate lightYellow(string $str = null)
 * @method CLImate lightBlue(string $str = null)
 * @method CLImate lightMagenta(string $str = null)
 * @method CLImate lightCyan(string $str = null)
 * @method CLImate white(string $str = null)
 *
 * @method CLImate backgroundBlack(string $str = null)
 * @method CLImate backgroundRed(string $str = null)
 * @method CLImate backgroundGreen(string $str = null)
 * @method CLImate backgroundYellow(string $str = null)
 * @method CLImate backgroundBlue(string $str = null)
 * @method CLImate backgroundMagenta(string $str = null)
 * @method CLImate backgroundCyan(string $str = null)
 * @method CLImate backgroundLightGray(string $str = null)
 * @method CLImate backgroundDarkGray(string $str = null)
 * @method CLImate backgroundLightRed(string $str = null)
 * @method CLImate backgroundLightGreen(string $str = null)
 * @method CLImate backgroundLightYellow(string $str = null)
 * @method CLImate backgroundLightBlue(string $str = null)
 * @method CLImate backgroundLightMagenta(string $str = null)
 * @method CLImate backgroundLightCyan(string $str = null)
 * @method CLImate backgroundWhite(string $str = null)
 *
 * @method CLImate bold(string $str = null)
 * @method CLImate dim(string $str = null)
 * @method CLImate underline(string $str = null)
 * @method CLImate blink(string $str = null)
 * @method CLImate invert(string $str = null)
 * @method CLImate hidden(string $str = null)
 *
 * @method CLImate info(string $str = null)
 * @method CLImate comment(string $str = null)
 * @method CLImate whisper(string $str = null)
 * @method CLImate shout(string $str = null)
 * @method CLImate error(string $str = null)
 *
 * @method mixed out(string $str)
 * @method mixed inline(string $str)
 * @method mixed table(array $data)
 * @method mixed json(mixed $var)
 * @method mixed br($count = 1)
 * @method mixed tab($count = 1)
 * @method mixed draw(string $art)
 * @method mixed border(string $char = null, integer $length = null)
 * @method mixed dump(mixed $var)
 * @method mixed flank(string $output, string $char = null, integer $length = null)
 * @method mixed progress(integer $total = null)
 * @method Spinner spinner(string $label = null, string ...$characters = null)
 * @method mixed padding(integer $length = 0, string $char = '.')
 * @method mixed input(string $prompt, Util\Reader\ReaderInterface $reader = null)
 * @method mixed confirm(string $prompt, Util\Reader\ReaderInterface $reader = null)
 * @method mixed password(string $prompt, Util\Reader\ReaderInterface $reader = null)
 * @method mixed checkboxes(string $prompt, array $options, Util\Reader\ReaderInterface $reader = null)
 * @method mixed radio(string $prompt, array $options, Util\Reader\ReaderInterface $reader = null)
 * @method mixed animation(string $art, TerminalObject\Helper\Sleeper $sleeper = null)
 * @method mixed columns(array $data, $column_count = null)
 * @method mixed clear()
 * @method CLImate clearLine()
 *
 * @method CLImate addArt(string $dir)
 */
class CLImate
{
    /**
     * An instance of the Style class
     *
     * @var \League\CLImate\Decorator\Style $style
     */
    public $style;

    /**
     * An instance of the Terminal Object Router class
     *
     * @var \League\CLImate\TerminalObject\Router\Router $router
     */
    protected $router;

    /**
     * An instance of the Settings Manager class
     *
     * @var \League\CLImate\Settings\Manager $settings
     */
    protected $settings;

    /**
     * An instance of the Argument Manager class
     *
     * @var \League\CLImate\Argument\Manager $arguments
     */
    public $arguments;

    /**
     * An instance of the Output class
     *
     * @var \League\CLImate\Util\Output $output
     */
    public $output;

    /**
     * An instance of the Util Factory
     *
     * @var \League\CLImate\Util\UtilFactory $util
     */
    protected $util;

    public function __construct()
    {
        $this->setStyle(new Style());
        $this->setRouter(new Router());
        $this->setSettingsManager(new SettingsManager());
        $this->setOutput(new Output());
        $this->setUtil(new UtilFactory());
        $this->setArgumentManager(new ArgumentManager());
    }

    /**
     * Set the style property
     *
     * @param \League\CLImate\Decorator\Style $style
     */
    public function setStyle(Style $style)
    {
        $this->style = $style;
    }

    /**
     * Set the router property
     *
     * @param \League\CLImate\TerminalObject\Router\Router $router
     */
    public function setRouter(Router $router)
    {
        $this->router = $router;
    }

    /**
     * Set the settings property
     *
     * @param \League\CLImate\Settings\Manager $manager
     */
    public function setSettingsManager(SettingsManager $manager)
    {
        $this->settings = $manager;
    }

    /**
     * Set the arguments property
     *
     * @param \League\CLImate\Argument\Manager $manager
     */
    public function setArgumentManager(ArgumentManager $manager)
    {
        $this->arguments = $manager;
    }

    /**
     * Set the output property
     *
     * @param \League\CLImate\Util\Output $output
     */
    public function setOutput(Output $output)
    {
        $this->output = $output;
    }

    /**
     * Set the util property
     *
     * @param \League\CLImate\Util\UtilFactory $util
     */
    public function setUtil(UtilFactory $util)
    {
        $this->util = $util;
    }

    /**
     * Extend CLImate with custom methods
     *
     * @param string|object|array $class
     * @param string $key Optional custom key instead of class name
     *
     * @return \League\CLImate\CLImate
     */
    public function extend($class, $key = null)
    {
        $this->router->addExtension($key, $class);

        return $this;
    }

    /**
     * Force ansi support on
     *
     * @return \League\CLImate\CLImate
     */
    public function forceAnsiOn()
    {
        $this->util->system->forceAnsi();

        return $this;
    }

    /**
     * Force ansi support off
     *
     * @return \League\CLImate\CLImate
     */
    public function forceAnsiOff()
    {
        $this->util->system->forceAnsi(false);

        return $this;
    }

    /**
     * Write line to writer once
     *
     * @param string|array $writer
     *
     * @return \League\CLImate\CLImate
     */
    public function to($writer)
    {
        $this->output->once($writer);

        return $this;
    }

    /**
     * Output the program's usage statement
     *
     * @param array $argv
     * @return void
     */
    public function usage(array $argv = null)
    {
        $this->arguments->usage($this, $argv);
    }

    /**
     * Set the program's description
     *
     * @param string $description
     *
     * @return \League\CLImate\CLImate
     */
    public function description($description)
    {
        $this->arguments->description($description);

        return $this;
    }

    /**
     * Check if we have valid output
     *
     * @param  mixed   $output
     *
     * @return boolean
     */
    protected function hasOutput($output)
    {
        if (!empty($output)) {
            return true;
        }

        // Check for type first to avoid errors with objects/arrays/etc
        return ((is_string($output) || is_numeric($output)) && strlen($output) > 0);
    }

    /**
     * Search for the method within the string
     * and route it if we find one.
     *
     * @param  string $method
     * @param  string $name
     *
     * @return string The new string without the executed method.
     */
    protected function parseStyleMethod($method, $name)
    {
        // If the name starts with this method string...
        if (substr($name, 0, strlen($method)) == $method) {
            // ...remove the method name from the beginning of the string...
            $name = substr($name, strlen($method));

            // ...and trim off any of those underscores hanging around
            $name = ltrim($name, '_');

            $this->style->set($method);
        }

        return $name;
    }

    /**
     * Search for any style methods within the name and apply them
     *
     * @param  string $name
     * @param  array $method_search
     *
     * @return string Anything left over after applying styles
     */
    protected function applyStyleMethods($name, $method_search = null)
    {
        // Get all of the possible style attributes
        $method_search = $method_search ?: array_keys($this->style->all());

        $new_name = $this->searchForStyleMethods($name, $method_search);

        // While we still have a name left and we keep finding methods,
        // loop through the possibilities
        if (strlen($new_name) > 0 && $new_name != $name) {
            return $this->applyStyleMethods($new_name, $method_search);
        }

        return $new_name;
    }

    /**
     * Search for style methods in the current name
     *
     * @param string $name
     * @param array $search
     * @return string
     */
    protected function searchForStyleMethods($name, $search)
    {
        // Loop through the possible methods
        foreach ($search as $method) {
            // See if we found a valid method
            $name = $this->parseStyleMethod($method, $name);
        }

        return $name;
    }

    /**
     * Build up the terminal object and return it
     *
     * @param string $name
     * @param array $arguments
     *
     * @return object|null
     */
    protected function buildTerminalObject($name, $arguments)
    {
        // Retrieve the parser for the current set of styles
        $parser = $this->style->parser($this->util->system);

        // Reset the styles
        $this->style->reset();

        // Execute the terminal object
        $this->router->settings($this->settings);
        $this->router->parser($parser);
        $this->router->output($this->output);
        $this->router->util($this->util);

        return $this->router->execute($name, $arguments);
    }

    /**
     * Route anything leftover after styles were applied
     *
     * @param string $name
     * @param array $arguments
     *
     * @return object|null
     */
    protected function routeRemainingMethod($name, array $arguments)
    {
        // If we still have something left, let's figure out what it is
        if ($this->router->exists($name)) {
            $obj = $this->buildTerminalObject($name, $arguments);

            // If something was returned, return it
            if (is_object($obj)) {
                return $obj;
            }
        } elseif ($this->settings->exists($name)) {
            $this->settings->add($name, reset($arguments));
        // Handle passthroughs to the arguments manager.
        } else {
            // If we can't find it at this point, let's fail gracefully
            $this->out(reset($arguments));
        }
    }

    /**
     * Magic method for anything called that doesn't exist
     *
     * @param string $requested_method
     * @param array  $arguments
     *
     * @return \League\CLImate\CLImate|\League\CLImate\TerminalObject\Dynamic\DynamicTerminalObject
     *
     * List of many of the possible method being called here
     * documented at the top of this class.
     */
    public function __call($requested_method, $arguments)
    {
        // Apply any style methods that we can find first
        $name = $this->applyStyleMethods(Helper::snakeCase($requested_method));

        // The first argument is the string|array|object we want to echo out
        $output = reset($arguments);

        if (strlen($name)) {
            // If we have something left, let's try and route it to the appropriate place
            if ($result = $this->routeRemainingMethod($name, $arguments)) {
                return $result;
            }
        } elseif ($this->hasOutput($output)) {
            // If we have fulfilled all of the requested methods and we have output, output it
            $this->out($output);
        }

        return $this;
    }
}
<?php

namespace League\CLImate\Decorator\Component;

class BackgroundColor extends Color
{
    /**
     * The difference to add to a foreground color code
     * to get a background color code
     *
     * @const integer ADD
     */
    const ADD = 10;

    /**
     * Get the code for the requested color
     *
     * @param  mixed $val
     *
     * @return mixed
     */
    public function get($val)
    {
        $color = parent::get($this->strip($val));

        if ($color) {
            $color += self::ADD;
        }

        return $color;
    }

    /**
     * Set the current background color
     *
     * @param  mixed   $val
     *
     * @return boolean
     */
    public function set($val)
    {
        return parent::set($this->strip($val));
    }

    /**
     * Get all of the available background colors
     *
     * @return array
     */
    public function all()
    {
        $colors = [];

        foreach ($this->colors as $color => $code) {
            $colors['background_' . $color] = $code + self::ADD;
        }

        return $colors;
    }

    /**
     * Strip the color of any prefixes
     *
     * @param  string $val
     *
     * @return string
     */
    protected function strip($val)
    {
        return str_replace('background_', '', $val);
    }
}
<?php

namespace League\CLImate\Decorator\Component;

abstract class BaseDecorator implements DecoratorInterface
{
    /**
     * An array of defaults for the decorator
     *
     * @var array $defaults;
     */
    protected $defaults = [];

    /**
     * An array of currently set codes for the decorator
     *
     * @var array $current;
     */
    protected $current  = [];

    public function __construct()
    {
        $this->defaults();
    }

    /**
     * Load up the defaults for this decorator
     */
    public function defaults()
    {
        foreach ($this->defaults as $name => $code) {
            $this->add($name, $code);
        }
    }

    /**
     * Reset the currently set decorator
     */
    public function reset()
    {
        $this->current = [];
    }

    /**
     * Retrieve the currently set codes for the decorator
     *
     * @return array
     */
    public function current()
    {
        return $this->current;
    }
}
<?php

namespace League\CLImate\Decorator\Component;

class Color extends BaseDecorator
{
    /**
     * The available colors
     *
     * @var array
     */
    protected $colors = [];

    /**
     * An array of default colors
     *
     * @var array $defaults
     */
    protected $defaults = [
            'default'       => 39,
            'black'         => 30,
            'red'           => 31,
            'green'         => 32,
            'yellow'        => 33,
            'blue'          => 34,
            'magenta'       => 35,
            'cyan'          => 36,
            'light_gray'    => 37,
            'dark_gray'     => 90,
            'light_red'     => 91,
            'light_green'   => 92,
            'light_yellow'  => 93,
            'light_blue'    => 94,
            'light_magenta' => 95,
            'light_cyan'    => 96,
            'white'         => 97,
        ];

    /**
     * Add a color into the mix
     *
     * @param string  $key
     * @param integer $value
     */
    public function add($key, $value)
    {
        $this->colors[$key] = (int) $value;
    }

    /**
     * Retrieve all of available colors
     *
     * @return array
     */
    public function all()
    {
        return $this->colors;
    }

    /**
     * Get the code for the color
     *
     * @param  string  $val
     *
     * @return string
     */
    public function get($val)
    {
        // If we already have the code, just return that
        if (is_numeric($val)) {
            return $val;
        }

        if (array_key_exists($val, $this->colors)) {
            return $this->colors[$val];
        }

        return null;
    }

    /**
     * Set the current color
     *
     * @param  string   $val
     *
     * @return boolean
     */
    public function set($val)
    {
        $code = $this->get($val);

        if ($code) {
            $this->current = [$code];

            return true;
        }

        return false;
    }
}
<?php

namespace League\CLImate\Decorator\Component;

class Command extends BaseDecorator
{
    /**
     * Commands that correspond to a color in the $colors property
     *
     * @var array
     */
    public $commands = [];

    /**
     * The default commands available
     *
     * @var array $defaults
     */
    protected $defaults = [
            'info'    => 'green',
            'comment' => 'yellow',
            'whisper' => 'light_gray',
            'shout'   => 'red',
            'error'   => 'light_red',
        ];

    /**
     * Add a command into the mix
     *
     * @param string $key
     * @param mixed  $value
     */
    public function add($key, $value)
    {
        $this->commands[$key] = $value;
    }

    /**
     * Retrieve all of the available commands
     *
     * @return array
     */
    public function all()
    {
        return $this->commands;
    }

    /**
     * Get the style that corresponds to the command
     *
     * @param  string  $val
     *
     * @return string
     */
    public function get($val)
    {
        if (array_key_exists($val, $this->commands)) {
            return $this->commands[$val];
        }

        return null;
    }

    /**
     * Set the currently used command
     *
     * @param  string       $val
     *
     * @return string|false
     */
    public function set($val)
    {
        // Return the code because it is a string corresponding
        // to a property in another class
        return ($code = $this->get($val)) ? $code : false;
    }
}
<?php

namespace League\CLImate\Decorator\Component;

interface DecoratorInterface
{
    public function add($key, $value);

    /**
     * @return void
     */

    public function defaults();

    public function get($val);

    public function set($val);

    public function all();

    public function current();

    /**
     * @return void
     */

    public function reset();
}
<?php

namespace League\CLImate\Decorator\Component;

class Format extends BaseDecorator
{
    /**
     * The available formatting options
     *
     * @var array
     */
    protected $formats = [];

    /**
     * An array of default formats
     *
     * @var array $defaults
     */
    protected $defaults = [
            'bold'          => 1,
            'dim'           => 2,
            'underline'     => 4,
            'blink'         => 5,
            'invert'        => 7,
            'hidden'        => 8,
        ];

    /**
     * Add a format into the mix
     *
     * @param string $key
     * @param mixed  $value
     */
    public function add($key, $value)
    {
        $this->formats[$key] = (int) $value;
    }

    /**
     * Retrieve all of the available formats
     *
     * @return array
     */
    public function all()
    {
        return $this->formats;
    }

    /**
     * Get the code for the format
     *
     * @param  string  $val
     *
     * @return string
     */
    public function get($val)
    {
        // If we already have the code, just return that
        if (is_numeric($val)) {
            return $val;
        }

        if (array_key_exists($val, $this->formats)) {
            return $this->formats[$val];
        }

        return null;
    }

    /**
     * Set the current format
     *
     * @param  string $val
     *
     * @return boolean
     */
    public function set($val)
    {
        $code = $this->get($val);

        if ($code) {
            $this->current[] = $code;

            return true;
        }

        return false;
    }
}
<?php

namespace League\CLImate\Decorator\Parser;

use League\CLImate\Util\Helper;

class Ansi extends Parser
{
    /**
     * Wrap the string in the current style
     *
     * @param  string $str
     *
     * @return string
     */

    public function apply($str)
    {
        return $this->start() . $this->parse($str) . $this->end();
    }

    /**
     * Get the string that begins the style
     *
     * @param string $codes
     * @return string
     */
    protected function start($codes = null)
    {
        $codes = $codes ?: $this->currentCode();
        $codes = $this->codeStr($codes);

        return $this->wrapCodes($codes);
    }

    /**
     * Get the string that ends the style
     *
     * @param string|array $codes
     * @return string
     */
    protected function end($codes = null)
    {
        if (empty($codes)) {
            $codes = [0];
        } else {
            $codes = Helper::toArray($codes);

            // Reset everything back to normal up front
            array_unshift($codes, 0);
        }

        return $this->wrapCodes($this->codeStr($codes));
    }

    /**
     * Wrap the code string in the full escaped sequence
     *
     * @param  string $codes
     *
     * @return string
     */

    protected function wrapCodes($codes)
    {
        return "\e[{$codes}m";
    }

    /**
     * Parse the string for tags and replace them with their codes
     *
     * @param  string $str
     *
     * @return string
     */

    protected function parse($str)
    {
        $count = preg_match_all($this->tags->regex(), $str, $matches);

        // If we didn't find anything, return the string right back
        if (!$count || !is_array($matches)) {
            return $str;
        }

        // All we want is the array of actual strings matched
        $matches = reset($matches);

        return $this->parseTags($str, $matches);
    }

    /**
     * Parse the given string for the tags and replace them with the appropriate codes
     *
     * @param string $str
     * @param array $tags
     *
     * @return string
     */

    protected function parseTags($str, $tags)
    {
        // Let's keep a history of styles applied
        $history = ($this->currentCode()) ? [$this->currentCode()] : [];

        foreach ($tags as $tag) {
            $str = $this->replaceTag($str, $tag, $history);
        }

        return $str;
    }

    /**
     * Replace the tag in the str
     *
     * @param string $str
     * @param string $tag
     * @param array $history
     *
     * @return string
     */

    protected function replaceTag($str, $tag, &$history)
    {
        // We will be replacing tags one at a time, can't pass this by reference
        $replace_count = 1;

        if (strpos($tag, '/')) {
            // We are closing out the tag, pop off the last element and get the codes that are left
            array_pop($history);
            $replace = $this->end($history);
        } else {
            // We are starting a new tag, add it onto the history and replace with correct color code
            $history[] = $this->tags->value($tag);
            $replace = $this->start($this->tags->value($tag));
        }

        return str_replace($tag, $replace, $str, $replace_count);
    }

    /**
     * Stringify the codes
     *
     * @param  mixed  $codes
     *
     * @return string
     */

    protected function codeStr($codes)
    {
        // If we get something that is already a code string, just pass it back
        if (!is_array($codes) && strpos($codes, ';')) {
            return $codes;
        }

        $codes = Helper::toArray($codes);

        // Sort for the sake of consistency and testability
        sort($codes);

        return implode(';', $codes);
    }

    /**
     * Retrieve the current style code
     *
     * @return string
     */

    protected function currentCode()
    {
        return $this->codeStr($this->current);
    }
}
<?php

namespace League\CLImate\Decorator\Parser;

class NonAnsi extends Parser
{
    /**
     * Strip the string of any tags
     *
     * @param  string $str
     *
     * @return string
     */

    public function apply($str)
    {
        return preg_replace($this->tags->regex(), '', $str);
    }
}
<?php

namespace League\CLImate\Decorator\Parser;

use League\CLImate\Decorator\Tags;

abstract class Parser
{
    /**
     * An array of the currently applied codes
     *
     * @var array $current;
     */
    protected $current = [];

    /**
     * An array of the tags that should be searched for
     * and their corresponding replacements
     *
     * @var \League\CLImate\Decorator\Tags $tags
     */
    public $tags;

    public function __construct(array $current, Tags $tags)
    {
        $this->current = $current;
        $this->tags    = $tags;
    }

    /**
     * Wrap the string in the current style
     *
     * @param  string $str
     *
     * @return string
     */
    abstract public function apply($str);
}
<?php

namespace League\CLImate\Decorator\Parser;

use League\CLImate\Util\System\System;
use League\CLImate\Decorator\Tags;

class ParserFactory
{
    /**
     * Get an instance of the appropriate Parser class
     *
     * @param System $system
     * @param array $current
     * @param Tags $tags
     * @return Parser
     */
    public static function getInstance(System $system, array $current, Tags $tags)
    {
        if ($system->hasAnsiSupport()) {
            return new Ansi($current, $tags);
        }

        return new NonAnsi($current, $tags);
    }
}
<?php

namespace League\CLImate\Decorator\Parser;

trait ParserImporter
{
    /**
     * An instance of the Parser class
     *
     * @var \League\CLImate\Decorator\Parser\Parser $parser
     */
    protected $parser;

    /**
     * Import the parser and set the property
     *
     * @param \League\CLImate\Decorator\Parser\Parser $parser
     */
    public function parser(Parser $parser)
    {
        $this->parser = $parser;
    }
}
<?php

namespace League\CLImate\Decorator;

use League\CLImate\Decorator\Parser\ParserFactory;
use League\CLImate\Util\Helper;
use League\CLImate\Util\System\System;

/**
 * @method void addColor(string $color, integer $code)
 * @method void addFormat(string $format, integer $code)
 * @method void addCommand(string $command, mixed $style)
 */
class Style
{
    /**
     * An array of Decorator objects
     *
     * @var Component\DecoratorInterface[] $style
     */
    protected $style = [];

    /**
     * An array of the available Decorators
     * and their corresponding class names
     *
     * @var array $available
     */
    protected $available = [
        'format'     =>  'Format',
        'color'      =>  'Color',
        'background' =>  'BackgroundColor',
        'command'    =>  'Command',
    ];

    protected $parser;

    /**
     * An array of the current styles applied
     *
     * @var array $current
     */
    protected $current = [];

    public function __construct()
    {
        foreach ($this->available as $key => $class) {
            $class = 'League\CLImate\Decorator\Component\\' . $class;
            $this->style[$key] = new $class();
        }
    }

    /**
     * Get all of the styles available
     *
     * @return array
     */
    public function all()
    {
        $all = [];

        foreach ($this->style as $style) {
            $all = array_merge($all, $this->convertToCodes($style->all()));
        }

        return $all;
    }

    /**
     * Attempt to get the corresponding code for the style
     *
     * @param  mixed $key
     *
     * @return mixed
     */
    public function get($key)
    {
        foreach ($this->style as $style) {
            if ($code = $style->get($key)) {
                return $code;
            }
        }

        return false;
    }

    /**
     * Attempt to set some aspect of the styling,
     * return true if attempt was successful
     *
     * @param  string   $key
     *
     * @return boolean
     */
    public function set($key)
    {
        foreach ($this->style as $style) {
            if ($code = $style->set($key)) {
                return $this->validateCode($code);
            }
        }

        return false;
    }

    /**
     * Reset the current styles applied
     *
     */
    public function reset()
    {
        foreach ($this->style as $style) {
            $style->reset();
        }
    }

    /**
     * Get a new instance of the Parser class based on the current settings
     *
     * @param \League\CLImate\Util\System\System $system
     *
     * @return \League\CLImate\Decorator\Parser\Parser
     */
    public function parser(System $system)
    {
        return ParserFactory::getInstance($system, $this->current(), new Tags($this->all()));
    }

    /**
     * Compile an array of the current codes
     *
     * @return array
     */
    public function current()
    {
        $full_current = [];

        foreach ($this->style as $style) {
            $full_current = array_merge($full_current, Helper::toArray($style->current()));
        }

        $full_current = array_filter($full_current);

        return array_values($full_current);
    }

    /**
     * Make sure that the code is an integer, if not let's try and get it there
     *
     * @param mixed $code
     *
     * @return boolean
     */
    protected function validateCode($code)
    {
        if (is_integer($code)) {
            return true;
        }

        // Plug it back in and see what we get
        if (is_string($code)) {
            return $this->set($code);
        }

        if (is_array($code)) {
            return $this->validateCodeArray($code);
        }

        return false;
    }

    /**
     * Validate an array of codes
     *
     * @param array $codes
     *
     * @return boolean
     */
    protected function validateCodeArray(array $codes)
    {
        // Loop through it and add each of the properties
        $adds = [];

        foreach ($codes as $code) {
            $adds[] = $this->set($code);
        }

        // If any of them came back true, we're good to go
        return in_array(true, $adds);
    }

    /**
     * Convert the array of codes to integers
     *
     * @param array $codes
     * @return array
     */
    protected function convertToCodes(array $codes)
    {
        foreach ($codes as $key => $code) {
            if (is_int($code)) {
                continue;
            }

            $codes[$key] = $this->getCode($code);
        }

        return $codes;
    }

    /**
     * Retrieve the integers from the mixed code input
     *
     * @param string|array $code
     *
     * @return integer|array
     */
    protected function getCode($code)
    {
        if (is_array($code)) {
            return $this->getCodeArray($code);
        }

        return $this->get($code);
    }

    /**
     * Retrieve an array of integers from the array of codes
     *
     * @param array $codes
     *
     * @return array
     */
    protected function getCodeArray(array $codes)
    {
        foreach ($codes as $key => $code) {
            $codes[$key] = $this->get($code);
        }

        return $codes;
    }

    /**
     * Parse the add method for the style they are trying to add
     *
     * @param string $method
     *
     * @return string
     */
    protected function parseAddMethod($method)
    {
        return strtolower(substr($method, 3, strlen($method)));
    }

    /**
     * Add a custom style
     *
     * @param string $style
     * @param string $key
     * @param string $value
     */
    protected function add($style, $key, $value)
    {
        $this->style[$style]->add($key, $value);

        // If we are adding a color, make sure it gets added
        // as a background color too
        if ($style == 'color') {
            $this->style['background']->add($key, $value);
        }
    }

    /**
     * Magic Methods
     *
     * List of possible magic methods are at the top of this class
     *
     * @param string $requested_method
     * @param array  $arguments
     */
    public function __call($requested_method, $arguments)
    {
        // The only methods we are concerned about are 'add' methods
        if (substr($requested_method, 0, 3) != 'add') {
            return false;
        }

        $style = $this->parseAddMethod($requested_method);

        if (array_key_exists($style, $this->style)) {
            list($key, $value) = $arguments;
            $this->add($style, $key, $value);
        }
    }
}
<?php

namespace League\CLImate\Decorator;

class Tags
{
    /**
     * Original keys passed in to build tags
     *
     * @var array $tags
     */

    protected $keys = [];

    /**
     * Available tags and their values
     *
     * @var array $tags
     */

    protected $tags = [];

    public function __construct(array $keys)
    {
        $this->keys = $keys;
        $this->build();
    }

    /**
     * Get all available tags
     *
     * @return array
     */

    public function all()
    {
        return $this->tags;
    }

    /**
     * Get the value of the requested tag
     *
     * @param string $key
     *
     * @return string|null
     */

    public function value($key)
    {
        return (array_key_exists($key, $this->tags)) ? $this->tags[$key] : null;
    }

    /**
     * Get the regular expression that can be used to parse the string for tags
     *
     * @return string
     */

    public function regex()
    {
        return '(<(?:(?:(?:\\\)*\/)*(?:' . implode('|', array_keys($this->keys)) . '))>)';
    }

    /**
     * Build the search and replace for all of the various style tags
     */

    protected function build()
    {
        foreach ($this->keys as $tag => $code) {
            $this->tags["<{$tag}>"]    = $code;
            $this->tags["</{$tag}>"]   = $code;
            $this->tags["<\\/{$tag}>"] = $code;
        }
    }
}
<?php

namespace League\CLImate\Exceptions;

interface Exception
{
}
<?php

namespace League\CLImate\Exceptions;

class InvalidArgumentException extends \InvalidArgumentException implements Exception
{
}
<?php

namespace League\CLImate\Exceptions;

class RuntimeException extends \RuntimeException implements Exception
{
}
<?php

namespace League\CLImate\Exceptions;

class UnexpectedValueException extends \UnexpectedValueException implements Exception
{
}
<?php

namespace League\CLImate;

use Psr\Log\AbstractLogger;
use Psr\Log\InvalidArgumentException;
use Psr\Log\LogLevel;
use function array_key_exists;
use function is_array;
use function str_replace;
use function strpos;

/**
 * A PSR-3 compatible logger that uses CLImate for output.
 */
class Logger extends AbstractLogger
{
    /**
     * @var array $levels Conversion of the level strings to their numeric representations.
     */
    private $levels = [
        LogLevel::EMERGENCY => 1,
        LogLevel::ALERT => 2,
        LogLevel::CRITICAL => 3,
        LogLevel::ERROR => 4,
        LogLevel::WARNING => 5,
        LogLevel::NOTICE => 6,
        LogLevel::INFO => 7,
        LogLevel::DEBUG => 8,
    ];

    /**
     * @var int $level Ignore logging attempts at a level less than this.
     */
    private $level;

    /**
     * @var CLImate $climate The underlying climate instance we are using for output.
     */
    private $climate;

    /**
     * Create a new Logger instance.
     *
     * @param string $level One of the LogLevel constants
     * @param CLImate $climate An existing CLImate instance to use for output
     */
    public function __construct($level = LogLevel::INFO, CLImate $climate = null)
    {
        $this->level = $this->convertLevel($level);

        if ($climate === null) {
            $climate = new CLImate;
        }
        $this->climate = $climate;

        # Define some default styles to use for the output
        $commands = [
            "emergency" => ["white", "bold", "background_red"],
            "alert" => ["white", "background_yellow"],
            "critical" => ["red", "bold"],
            "error" => ["red"],
            "warning" => "yellow",
            "notice" => "light_cyan",
            "info" => "green",
            "debug" => "dark_gray",
        ];

        # If any of the required styles are not defined then define them now
        foreach ($commands as $command => $style) {
            if (!$this->climate->style->get($command)) {
                $this->climate->style->addCommand($command, $style);
            }
        }
    }


    /**
     * Get a numeric log level for the passed parameter.
     *
     * @param string $level One of the LogLevel constants
     *
     * @return int
     */
    private function convertLevel($level)
    {
        # If this is one of the defined string log levels then return it's numeric value
        if (!array_key_exists($level, $this->levels)) {
            throw new InvalidArgumentException("Unknown log level: {$level}");
        }

        return $this->levels[$level];
    }


    /**
     * Get a new instance logging at a different level
     *
     * @param string $level One of the LogLevel constants
     *
     * @return Logger
     */
    public function withLogLevel($level)
    {
        $logger = clone $this;
        $logger->level = $this->convertLevel($level);
        return $logger;
    }


    /**
     * Log messages to a CLImate instance.
     *
     * @param string $level One of the LogLevel constants
     * @param string|object $message If an object is passed it must implement __toString()
     * @param array $context Placeholders to be substituted in the message
     *
     * @return void
     */
    public function log($level, $message, array $context = []): void
    {
        if ($this->convertLevel($level) > $this->level) {
            return;
        }

        # Handle objects implementing __toString
        $message = (string)$message;

        # Handle any placeholders in the $context array
        foreach ($context as $key => $val) {
            $placeholder = "{" . $key . "}";

            # If this context key is used as a placeholder, then replace it, and remove it from the $context array
            if (strpos($message, $placeholder) !== false) {
                $val = (string)$val;
                $message = str_replace($placeholder, $val, $message);
                unset($context[$key]);
            }
        }

        # Send the message to the climate instance
        $this->climate->{$level}($message);

        # Append any context information not used as placeholders
        $this->outputRecursiveContext($level, $context, 1);
    }


    /**
     * Handle recursive arrays in the logging context.
     *
     * @param string $level One of the LogLevel constants
     * @param array $context The array of context to output
     * @param int $indent The current level of indentation to be used
     *
     * @return void
     */
    private function outputRecursiveContext($level, array $context, $indent)
    {
        foreach ($context as $key => $val) {
            $this->climate->tab($indent);

            $this->climate->{$level}()->inline("{$key}: ");

            if (is_array($val)) {
                $this->climate->{$level}("[");
                $this->outputRecursiveContext($level, $val, $indent + 1);
                $this->climate->tab($indent)->{$level}("]");
            } else {
                $this->climate->{$level}((string)$val);
            }
        }
    }
}
<?php

namespace League\CLImate\Settings;

class Art implements SettingsInterface
{
    /**
     * An array of valid art directories
     *  @var array[] $dirs
     */
    public $dirs = [];

    /**
     * Add directories of art
     */
    public function add()
    {
        $this->dirs = array_merge($this->dirs, func_get_args());
        $this->dirs = array_filter($this->dirs);
        $this->dirs = array_values($this->dirs);
    }
}
<?php

namespace League\CLImate\Settings;

class Manager
{
    /**
     * An array of settings that have been... set
     *
     * @var array $settings
     */
    protected $settings = [];

    /**
     * Check and see if the requested setting is a valid, registered setting
     *
     * @param  string  $name
     *
     * @return boolean
     */
    public function exists($name)
    {
        return class_exists($this->getPath($name));
    }

    /**
     * Add a setting
     *
     * @param string $name
     * @param mixed  $value
     */
    public function add($name, $value)
    {
        $setting = $this->getPath($name);
        $key     = $this->getClassName($name);

        // If the current key doesn't exist in the settings array, set it up
        if (!array_key_exists($name, $this->settings)) {
            $this->settings[$key] = new $setting();
        }

        $this->settings[$key]->add($value);
    }

    /**
     * Get the value of the requested setting if it exists
     *
     * @param  string $key
     *
     * @return mixed
     */
    public function get($key)
    {
        if (array_key_exists($key, $this->settings)) {
            return $this->settings[$key];
        }

        return false;
    }

    /**
     * Get the short name for the requested settings class
     *
     * @param  string $name
     *
     * @return string
     */
    protected function getPath($name)
    {
        return 'League\CLImate\Settings\\' . $this->getClassName($name);
    }

    /**
     * Get the short class name for the setting
     *
     * @param  string $name
     *
     * @return string
     */
    protected function getClassName($name)
    {
        return ucwords(str_replace('add_', '', $name));
    }
}
<?php

namespace League\CLImate\Settings;

trait SettingsImporter
{
    /**
     * Dictates any settings that a class may need access to
     *
     * @return array
     */
    public function settings()
    {
        return [];
    }

    /**
     * Import the setting into the class
     *
     * @param \League\CLImate\Settings\SettingsInterface $setting
     */
    public function importSetting($setting)
    {
        $short_name = basename(str_replace('\\', '/', get_class($setting)));

        $method = 'importSetting' . $short_name;

        if (method_exists($this, $method)) {
            $this->$method($setting);
        }
    }
}
<?php

namespace League\CLImate\Settings;

interface SettingsInterface
{
    /**
     * @return void
     */
    public function add();
}
<?php

namespace League\CLImate\TerminalObject\Basic;

use League\CLImate\Decorator\Parser\ParserImporter;
use League\CLImate\Settings\SettingsImporter;
use League\CLImate\Util\UtilImporter;

use function strlen;

abstract class BasicTerminalObject implements BasicTerminalObjectInterface
{
    use SettingsImporter, ParserImporter, UtilImporter;

    /**
     * Set the property if there is a valid value
     *
     * @param string $key
     * @param string $value
     */
    protected function set($key, $value)
    {
        if (strlen((string) $value)) {
            $this->$key = $value;
        }
    }

    /**
     * Get the parser for the current object
     *
     * @return \League\CLImate\Decorator\Parser\Parser
     */
    public function getParser()
    {
        return $this->parser;
    }

    /**
     * Check if this object requires a new line to be added after the output
     *
     * @return boolean
     */
    public function sameLine()
    {
        return false;
    }
}
<?php

namespace League\CLImate\TerminalObject\Basic;

use League\CLImate\Decorator\Parser\Parser;
use League\CLImate\Util\UtilFactory;

interface BasicTerminalObjectInterface
{
    public function result();

    public function settings();

    /**
     * @param $setting
     * @return void
     */
    public function importSetting($setting);

    /**
     * @return boolean
     */
    public function sameLine();

    /**
     * @param \League\CLImate\Decorator\Parser\Parser $parser
     */
    public function parser(Parser $parser);

    /**
     * @param UtilFactory $util
     */
    public function util(UtilFactory $util);
}
<?php

namespace League\CLImate\TerminalObject\Basic;

class Border extends BasicTerminalObject
{
    /**
     * The character to repeat for the border
     *
     * @var string $char
     */
    protected $char = '-';

    /**
     * The length of the border
     *
     * @var integer $length
     */
    protected $length;

    public function __construct($char = null, $length = null)
    {
        $this->char($char)->length($length);
    }

    /**
     * Set the character to repeat for the border
     *
     * @param string $char
     *
     * @return Border
     */
    public function char($char)
    {
        $this->set('char', $char);

        return $this;
    }

    /**
     * Set the length of the border
     *
     * @param integer $length
     *
     * @return Border
     */
    public function length($length)
    {
        $this->set('length', $length);

        return $this;
    }

    /**
     * Return the border
     *
     * @return string
     */
    public function result()
    {
        $length = $this->length ?: $this->util->width() ?: 100;
        $str    = str_repeat($this->char, $length);
        $str    = substr($str, 0, $length);

        return $str;
    }
}
<?php

namespace League\CLImate\TerminalObject\Basic;

class Br extends Repeatable
{
    /**
     * Return an empty string
     *
     * @return string
     */
    public function result()
    {
        return array_fill(0, $this->count, '');
    }
}
<?php

namespace League\CLImate\TerminalObject\Basic;

class Clear extends BasicTerminalObject
{
    /**
     * Clear the terminal
     *
     * @return string
     */
    public function result()
    {
        return "\e[H\e[2J";
    }

    public function sameLine()
    {
        return true;
    }
}
<?php

namespace League\CLImate\TerminalObject\Basic;

final class ClearLine extends Repeatable
{
    /**
     * Clear the lines.
     *
     * @return string
     */
    public function result()
    {
        $string = "";
        while ($this->count > 0) {
            $string .= $this->util->cursor->startOfCurrentLine();
            $string .= $this->util->cursor->deleteCurrentLine();
            --$this->count;

            $string .= $this->util->cursor->up();
        }

        $string .= $this->util->cursor->down();

        return $string;
    }


    /**
     * @inheritdoc
     */
    public function sameLine()
    {
        return true;
    }
}
<?php

namespace League\CLImate\TerminalObject\Basic;

use League\CLImate\TerminalObject\Helper\StringLength;

class Columns extends BasicTerminalObject
{
    use StringLength;

    /**
     * Number of columns
     *
     * @var integer $column_count
     */
    protected $column_count;

    /**
     * Data to columnize
     *
     * @var array $data
     */
    protected $data;

    public function __construct($data, $column_count = null)
    {
        $this->data  = $data;
        $this->column_count = $column_count;
    }

    /**
     * Calculate the number of columns organize data
     *
     * @return array
     */
    public function result()
    {
        $keys      = array_keys($this->data);
        $first_key = reset($keys);

        return (!is_int($first_key)) ? $this->associativeColumns() : $this->columns();
    }

    /**
     * Get columns for a regular array
     *
     * @return array
     */
    protected function columns()
    {
        $this->data    = $this->setData();
        $column_widths = $this->getColumnWidths();
        $output        = [];
        $count         = count(reset($this->data));

        for ($i = 0; $i < $count; $i++) {
            $output[] = $this->getRow($i, $column_widths);
        }

        return $output;
    }

    /**
     * Re-configure the data into it's final form
     */
    protected function setData()
    {
        // If it's already an array of arrays, we're good to go
        if (is_array(reset($this->data))) {
            return $this->setArrayOfArraysData();
        }

        $column_width = $this->getColumnWidth($this->data);
        $row_count    = $this->getMaxRows($column_width);

        return array_chunk($this->data, $row_count);
    }

    /**
     * Re-configure an array of arrays into column arrays
     */
    protected function setArrayOfArraysData()
    {
        $this->setColumnCountViaArray($this->data);

        $new_data = array_fill(0, $this->column_count, []);

        foreach ($this->data as $items) {
            for ($i = 0; $i < $this->column_count; $i++) {
                $new_data[$i][] = (array_key_exists($i, $items)) ? $items[$i] : null;
            }
        }

        return $new_data;
    }

    /**
     * Get columns for an associative array
     *
     * @return array
     */
    protected function associativeColumns()
    {
        $column_width = $this->getColumnWidth(array_keys($this->data));
        $output       = [];

        foreach ($this->data as $key => $value) {
            $output[] = $this->pad($key, $column_width) . $value;
        }

        return $output;
    }

    /**
     * Get the row of data
     *
     * @param integer $key
     * @param array $column_widths
     *
     * @return string
     */
    protected function getRow($key, $column_widths)
    {
        $row = [];

        for ($j = 0; $j < $this->column_count; $j++) {
            if (isset($this->data[$j]) && array_key_exists($key, $this->data[$j])) {
                $row[] = $this->pad($this->data[$j][$key], $column_widths[$j]);
            }
        }

        return trim(implode('', $row));
    }

    /**
     * Get the standard column width
     *
     * @param array $data
     *
     * @return integer
     */
    protected function getColumnWidth($data)
    {
        // Return the maximum width plus a buffer
        return $this->maxStrLen($data) + 5;
    }

    /**
     * Get an array of each column's width
     *
     * @return array
     */
    protected function getColumnWidths()
    {
        $column_widths = [];

        for ($i = 0; $i < $this->column_count; $i++) {
            if (!isset($this->data[$i])) {
                $column_widths[] = 0;
                continue;
            }
            $column_widths[] = $this->getColumnWidth($this->data[$i]);
        }

        return $column_widths;
    }

    /**
     * Set the count property
     *
     * @param integer $column_width
     */
    protected function setColumnCount($column_width)
    {
        $this->column_count = (int) floor($this->util->width() / $column_width);
    }

    /**
     * Set the count property via an array
     *
     * @param array $items
     */
    protected function setColumnCountViaArray($items)
    {
        $counts = array_map(function ($arr) {
            return count($arr);
        }, $items);

        $this->column_count = max($counts);
    }

    /**
     * Get the number of rows per column
     *
     * @param integer $column_width
     *
     * @return integer
     */
    protected function getMaxRows($column_width)
    {
        if (!$this->column_count) {
            $this->setColumnCount($column_width);
        }

        return ceil(count($this->data) / $this->column_count);
    }
}
<?php

namespace League\CLImate\TerminalObject\Basic;

use League\CLImate\TerminalObject\Helper\Art;

class Draw extends BasicTerminalObject
{
    use Art;

    public function __construct($art)
    {
        // Add the default art directory
        $this->addDir(__DIR__ . \DIRECTORY_SEPARATOR . '..' . \DIRECTORY_SEPARATOR . '..' . \DIRECTORY_SEPARATOR . 'ASCII');

        $this->art = $art;
    }

    /**
     * Return the art
     *
     * @return array
     */
    public function result()
    {
        $file = $this->artFile($this->art);

        return $this->parse($file);
    }
}
<?php

namespace League\CLImate\TerminalObject\Basic;

class Dump extends BasicTerminalObject
{
    /**
     * The data to convert to JSON
     *
     * @var mixed $data
     */
    protected $data;

    public function __construct($data)
    {
        $this->data = $data;
    }

    /**
     * Return the data as JSON
     *
     * @return string
     */
    public function result()
    {
        ob_start();

        var_dump($this->data);

        $result = ob_get_contents();

        ob_end_clean();

        return $result;
    }
}
<?php

namespace League\CLImate\TerminalObject\Basic;

class Flank extends BasicTerminalObject
{
    /**
     * The string that will be flanked
     *
     * @var string $str
     */
    protected $str;

    /**
     * The character(s) to repeat on either side of the string
     *
     * @var string $char
     */
    protected $char = '#';

    /**
     * How many times the character(s) should be repeated on either side
     *
     * @var integer $repeat
     */
    protected $repeat = 3;

    public function __construct($str, $char = null, $repeat = null)
    {
        $this->str = $str;

        $this->char($char)->repeat($repeat);
    }

    /**
     * Set the character(s) to repeat on either side
     *
     * @param string $char
     *
     * @return Flank
     */
    public function char($char)
    {
        $this->set('char', $char);

        return $this;
    }

    /**
     * Set the repeat of the flank character(s)
     *
     * @param integer $repeat
     *
     * @return Flank
     */
    public function repeat($repeat)
    {
        $this->set('repeat', $repeat);

        return $this;
    }

    /**
     * Return the flanked string
     *
     * @return string
     */
    public function result()
    {
        $flank = str_repeat($this->char, $this->repeat);

        return "{$flank} {$this->str} {$flank}";
    }
}
<?php

namespace League\CLImate\TerminalObject\Basic;

class Inline extends Out
{
    /**
     * Check if this object requires a new line should be added after the output
     *
     * @return boolean
     */
    public function sameLine()
    {
        return true;
    }
}
<?php

namespace League\CLImate\TerminalObject\Basic;

class Json extends BasicTerminalObject
{
    /**
     * The data to convert to JSON
     *
     * @var mixed $data
     */
    protected $data;

    public function __construct($data)
    {
        $this->data = $data;
    }

    /**
     * Return the data as JSON
     *
     * @return string
     */
    public function result()
    {
        return json_encode($this->data, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES);
    }
}
<?php

namespace League\CLImate\TerminalObject\Basic;

class Out extends BasicTerminalObject
{
    /**
     * The content to output
     *
     * @var string $content
     */
    protected $content;

    public function __construct($content)
    {
        $this->content = $content;
    }

    /**
     * Return the content to output
     *
     * @return string
     */
    public function result()
    {
        return $this->content;
    }
}
<?php

namespace League\CLImate\TerminalObject\Basic;

abstract class Repeatable extends BasicTerminalObject
{
    /**
     * How many times the element should be repeated
     *
     * @var integer
     */
    protected $count;

    public function __construct($count = 1)
    {
        $this->count = (int) round(max((int) $count, 1));
    }
}
<?php

namespace League\CLImate\TerminalObject\Basic;

/**
 * Tab class to enable tabs to be output without using the escape character.
 */
class Tab extends Repeatable
{
    /**
     * Check if this object requires a new line should be added after the output.
     *
     * @return boolean
     */
    public function sameLine()
    {
        return true;
    }

    /**
     * Return the relevant number of tab characters.
     *
     * @return string
     */
    public function result()
    {
        return str_repeat("\t", $this->count);
    }
}
<?php

namespace League\CLImate\TerminalObject\Basic;

use League\CLImate\Exceptions\InvalidArgumentException;
use League\CLImate\TerminalObject\Helper\StringLength;

use function array_keys;
use function count;
use function get_object_vars;
use function is_array;
use function is_object;
use function max;
use function preg_split;

class Table extends BasicTerminalObject
{
    use StringLength;

    /**
     * The data for the table, an array of (arrays|objects)
     *
     * @var array $data
     */
    protected $data           = [];

    /**
     * An array of the widths of each column in the table
     *
     * @var array $column_widths
     */
    protected $column_widths  = [];

    /**
     * The width of the table
     *
     * @var integer $table_width
     */
    protected $table_width    = 0;

    /**
     * The divider between table cells
     *
     * @var string $column_divider
     */
    protected $column_divider = ' | ';

    /**
     * The border to divide each row of the table
     *
     * @var string $border
     */
    protected $border;

    /**
     * The array of rows that will ultimately be returned
     *
     * @var array $rows
     */
    protected $rows           = [];

    /**
     * @var string $pregix A string to be output before each row is output.
     */
    private $prefix = "";


    public function __construct(array $data, $prefix = "")
    {
        $this->data = $this->getData($data);
        $this->prefix = $prefix;
    }


    /**
     * @param array $input
     *
     * @return array
     */
    private function getData(array $input)
    {
        $output = [];

        foreach ($input as $item) {
            if (is_object($item)) {
                $item = get_object_vars($item);
            }

            if (!is_array($item)) {
                throw new InvalidArgumentException("Invalid table data, you must pass an array of arrays or objects");
            }

            $output[] = $item;
        }

        return $this->splitRows($output);
    }

    /**
     * Split each row in $data into an array of arrays
     * Where each value represents a line in a cell
     *
     * @param array $data
     *
     * @return array
     */
    private function splitRows($data)
    {
        foreach ($data as $row_key => $row) {
            $height = 1;
            $lines = [];
            foreach ($row as $key => $column) {
                $lines[$key] = preg_split('/(\r\n|\r|\n)/u', $column);
                $height = max($height, count($lines[$key]));
            }
            $keys = array_keys($row);
            $new_rows = [];
            for ($i = 0; $i < $height; $i++) {
                $new_row = [];
                foreach ($keys as $key) {
                    $new_row[$key] = $lines[$key][$i] ?? '';
                }
                $new_rows[] = $new_row;
            }
            $data[$row_key] = $new_rows;
        }
        return $data;
    }


    /**
     * Return the built rows
     *
     * @return array
     */
    public function result()
    {
        $this->column_widths = $this->getColumnWidths();
        $this->table_width   = $this->getWidth();
        $this->border        = $this->getBorder();

        $this->buildHeaderRow();

        foreach ($this->data as $row_columns) {
            foreach ($row_columns as $columns) {
                $this->addLine($this->buildRow($columns));
            }
            $this->addLine($this->border);
        }

        return $this->rows;
    }

    /**
     * Append a line to the output.
     *
     * @param string $line The line to output
     *
     * @return void
     */
    private function addLine($line)
    {
        $this->rows[] = $this->prefix . $line;
    }


    /**
     * Determine the width of the table
     *
     * @return integer
     */
    protected function getWidth()
    {
        $first_row = reset($this->data);
        $first_row = reset($first_row);
        $first_row = $this->buildRow($first_row);

        return $this->lengthWithoutTags($first_row);
    }

    /**
     * Get the border for each row based on the table width
     */
    protected function getBorder()
    {
        return (new Border())->length($this->table_width)->result();
    }

    /**
     * Check for a header row (if it's an array of associative arrays or objects),
     * if there is one, tack it onto the front of the rows array
     */
    protected function buildHeaderRow()
    {
        $this->addLine($this->border);

        $header_row = $this->getHeaderRow();
        if ($header_row) {
            $this->addLine($this->buildRow($header_row));
            $this->addLine((new Border)->char('=')->length($this->table_width)->result());
        }
    }

    /**
     * Get table row
     *
     * @param  mixed  $columns
     *
     * @return string
     */
    protected function buildRow($columns)
    {
        $row = [];

        foreach ($columns as $key => $column) {
            $row[] = $this->buildCell($key, $column);
        }

        $row = implode($this->column_divider, $row);

        return trim($this->column_divider . $row . $this->column_divider);
    }

    /**
     * Build the string for this particular table cell
     *
     * @param  mixed  $key
     * @param  string $column
     *
     * @return string
     */
    protected function buildCell($key, $column)
    {
        return  $this->pad($column, $this->column_widths[$key]);
    }

    /**
     * Get the header row for the table if it's an associative array or object
     *
     * @return mixed
     */
    protected function getHeaderRow()
    {
        $first_item = reset($this->data);
        $first_item = reset($first_item);

        $keys       = array_keys($first_item);
        $first_key  = reset($keys);

        // We have an associative array (probably), let's have a header row
        if (!is_int($first_key)) {
            return array_combine($keys, $keys);
        }

        return false;
    }

    /**
     * Determine the width of each column
     *
     * @return array
     */
    protected function getColumnWidths()
    {
        $first_row = reset($this->data);
        $first_row = reset($first_row);

        // Create an array with the columns as keys and values of zero
        $column_widths = $this->getDefaultColumnWidths($first_row);

        foreach ($this->data as $row_columns) {
            foreach ($row_columns as $columns) {
                foreach ($columns as $key => $column) {
                    $column_widths[$key] = $this->getCellWidth($column_widths[$key], $column);
                }
            }
        }

        return $column_widths;
    }

    /**
     * Set up an array of default column widths
     *
     * @param array $columns
     *
     * @return array
     */
    protected function getDefaultColumnWidths(array $columns)
    {
        $widths = $this->arrayOfStrLens(array_keys($columns));

        return array_combine(array_keys($columns), $widths);
    }

    /**
     * Determine the width of the columns without tags
     *
     * @param array  $current_width
     * @param string $str
     *
     * @return integer
     */
    protected function getCellWidth($current_width, $str)
    {
        return max($current_width, $this->lengthWithoutTags($str));
    }
}
<?php

namespace League\CLImate\TerminalObject\Dynamic;

use League\CLImate\TerminalObject\Dynamic\Animation\Keyframe;
use League\CLImate\TerminalObject\Helper\Art;
use League\CLImate\TerminalObject\Helper\Sleeper;

class Animation extends DynamicTerminalObject
{
    use Art;

    /**
     * @var \League\CLImate\TerminalObject\Helper\Sleeper $sleeper
     */
    protected $sleeper;

    /**
     * @var \League\CLImate\TerminalObject\Dynamic\Animation\Keyframe $keyframes
     */
    protected $keyframes;

    public function __construct($art, Sleeper $sleeper = null, Keyframe $keyframes = null)
    {
        // Add the default art directory
        $this->addDir(__DIR__ . \DIRECTORY_SEPARATOR . '..' . \DIRECTORY_SEPARATOR . '..' . \DIRECTORY_SEPARATOR . 'ASCII');

        $this->setSleeper($sleeper);
        $this->setKeyFrames($keyframes);

        $this->art = $art;
    }

    /**
     * Run a basic animation
     */
    public function run()
    {
        $files     = $this->artDir($this->art);
        $animation = [];

        foreach ($files as $file) {
            $animation[] = $this->parse($file);
        }

        $this->animate($animation);
    }

    /**
     * Set the speed of the animation based on a percentage
     * (50% slower, 200% faster, etc)
     *
     * @param int|float $percentage
     *
     * @return \League\CLImate\TerminalObject\Dynamic\Animation
     */
    public function speed($percentage)
    {
        $this->sleeper->speed($percentage);

        return $this;
    }

    /**
     * Scroll the art
     *
     * @param string $direction
     * @return bool
     */
    public function scroll($direction = 'right')
    {
        $this->setupKeyframes();

        $mapping = $this->getScrollDirectionMapping();

        if (!array_key_exists($direction, $mapping)) {
            return false;
        }

        $lines       = $this->getLines();
        $enter_from  = $mapping[$direction];
        $exit_to     = $mapping[$enter_from];

        $this->animate($this->keyframes->scroll($lines, $enter_from, $exit_to));
    }

    /**
     * Animate the art exiting the screen
     *
     * @param string $direction top|bottom|right|left
     */
    public function exitTo($direction)
    {
        $this->setupKeyframes();

        $this->animate($this->keyframes->exitTo($this->getLines(), $direction));
    }

    /**
     * Animate the art entering the screen
     *
     * @param string $direction top|bottom|right|left
     */
    public function enterFrom($direction)
    {
        $this->setupKeyframes();

        $this->animate($this->keyframes->enterFrom($this->getLines(), $direction));
    }

    protected function getScrollDirectionMapping()
    {
        return [
            'left'   => 'right',
            'right'  => 'left',
            'top'    => 'bottom',
            'bottom' => 'top',
            'up'     => 'bottom',
            'down'   => 'top',
        ];
    }

    protected function getLines()
    {
        return $this->parse($this->artFile($this->art));
    }

    /**
     * @param \League\CLImate\TerminalObject\Helper\Sleeper $sleeper
     */
    protected function setSleeper($sleeper = null)
    {
        $this->sleeper = $sleeper ?: new Sleeper();
    }

    /**
     * @param League\CLImate\TerminalObject\Dynamic\Animation\Keyframe $keyframes
     */
    protected function setKeyFrames($keyframes)
    {
        $this->keyframes = $keyframes ?: new Keyframe;
    }

    /**
     * Set up the necessary properties on the Keyframe class
     */
    protected function setupKeyframes()
    {
        $this->keyframes->parser($this->parser);
        $this->keyframes->util($this->util);
    }

    /**
     * Animate the given keyframes
     *
     * @param array $keyframes Array of arrays
     */
    protected function animate(array $keyframes)
    {
        $count = 0;

        foreach ($keyframes as $lines) {
            $this->writeKeyFrame($lines, $count);
            $this->sleeper->sleep();
            $count = count($lines);
        }
    }

    /**
     * Write the current keyframe to the terminal, line by line
     *
     * @param array $lines
     * @param integer $count
     */
    protected function writeKeyFrame(array $lines, $count)
    {
        foreach ($lines as $key => $line) {
            $content = $this->getLineFormatted($line, $key, $count);
            $this->output->write($this->parser->apply($content));
        }
    }

    /**
     * Format the line to re-write previous lines, if necessary
     *
     * @param string $line
     * @param integer $key
     * @param integer $last_frame_count
     *
     * @return string
     */
    protected function getLineFormatted($line, $key, $last_frame_count)
    {
        // If this is the first thing we're writing, just return the line
        if ($last_frame_count == 0) {
            return $line;
        }

        $content = '';

        // If this is the first line of the frame,
        // move the cursor up the total number of previous lines from the previous frame
        if ($key == 0) {
            $content .= $this->util->cursor->up($last_frame_count);
        }

        $content .= $this->util->cursor->startOfCurrentLine();
        $content .= $this->util->cursor->deleteCurrentLine();
        $content .= $line;

        return $content;
    }
}
<?php

namespace League\CLImate\TerminalObject\Dynamic\Animation;

use League\CLImate\Decorator\Parser\ParserImporter;
use League\CLImate\TerminalObject\Helper\StringLength;
use League\CLImate\Util\UtilImporter;

class Keyframe
{
    use StringLength, ParserImporter, UtilImporter;

    /**
     * Get the enter keyframes for the desired direction
     *
     * @param array $lines
     * @param string $direction
     *
     * @return array
     */
    public function enterFrom($lines, $direction)
    {
        return array_reverse($this->exitTo($lines, $direction));
    }

    /**
     * Get the exit keyframes for the desired direction
     *
     * @param array $lines
     * @param string $direction
     *
     * @return array
     */
    public function exitTo($lines, $direction)
    {
        $lines       = $this->adjustLines($lines, $direction);
        $line_method = $this->getLineMethod($direction);

        $direction_keyframes = $this->getDirectionFrames($direction, $lines, $line_method);

        $keyframes   = array_fill(0, 4, $lines);
        $keyframes   = array_merge($keyframes, $direction_keyframes);
        $keyframes[] = array_fill(0, count($lines), '');

        return $keyframes;
    }

    /**
     * Get scroll keyframes
     *
     * @param array $lines
     * @param string $enter_from
     * @param string $exit_to
     *
     * @return array
     */
    public function scroll($lines, $enter_from, $exit_to)
    {
        $keyframes   = $this->enterFrom($lines, $enter_from);
        $keyframes   = array_merge($keyframes, $this->exitTo($lines, $exit_to));
        $keyframes   = array_unique($keyframes, SORT_REGULAR);
        $keyframes[] = reset($keyframes);

        return $keyframes;
    }

    /**
     * Get the line parser for the direction
     *
     * @param string $direction
     * @return string
     */
    protected function getLineMethod($direction)
    {
        return 'current' . ucwords(strtolower($direction)) . 'Line';
    }

    /**
     * Adjust the array of lines if necessary
     *
     * @param array $lines
     * @param string $direction
     *
     * @return array
     */
    protected function adjustLines(array $lines, $direction)
    {
        $adjust_method = 'adjust' . ucwords(strtolower($direction))  . 'Lines';

        if (method_exists($this, $adjust_method)) {
            return $this->$adjust_method($lines);
        }

        return $lines;
    }

    /**
     * Pad the array of lines for "right" animation
     *
     * @param array $lines
     * @return array
     */
    protected function adjustRightLines(array $lines)
    {
        return $this->padArray($lines, $this->util->width());
    }

    /**
     * Pad the array of lines for "left" animation
     *
     * @param array $lines
     * @return array
     */
    protected function adjustLeftLines(array $lines)
    {
        return $this->padArray($lines, $this->maxStrLen($lines));
    }

    /**
     * Get the keyframes appropriate for the animation direction
     *
     * @param string $direction
     * @param array $lines
     * @param string $line_method
     *
     * @return array
     */
    protected function getDirectionFrames($direction, array $lines, $line_method)
    {
        $mapping = [
            'exitHorizontalFrames' => ['left', 'right'],
            'exitVerticalFrames'   => ['top', 'bottom'],
        ];

        foreach ($mapping as $method => $directions) {
            if (in_array($direction, $directions)) {
                return $this->$method($lines, $line_method);
            }
        }

        // Fail gracefully, simply return an array
        return [];
    }

    /**
     * Create horizontal exit animation keyframes for the art
     *
     * @param array $lines
     * @param string $line_method
     *
     * @return array
     */
    protected function exitHorizontalFrames(array $lines, $line_method)
    {
        $keyframes = [];
        $length    = mb_strlen($lines[0]);

        for ($i = $length; $i > 0; $i--) {
            $keyframes[] = $this->getHorizontalKeyframe($lines, $i, $line_method, $length);
        }

        return $keyframes;
    }

    /**
     * Get the keyframe for a horizontal animation
     *
     * @param array $lines
     * @param int $frame_number
     * @param string $line_method
     * @param int $length
     *
     * @return array
     */
    protected function getHorizontalKeyframe(array $lines, $frame_number, $line_method, $length)
    {
        $keyframe = [];

        foreach ($lines as $line) {
            $keyframe[] = $this->$line_method($line, $frame_number, $length);
        }

        return $keyframe;
    }

    /**
     * Create vertical exit animation keyframes for the art
     *
     * @param array $lines
     * @param string $line_method
     *
     * @return array
     */
    protected function exitVerticalFrames(array $lines, $line_method)
    {
        $keyframes  = [];
        $line_count = count($lines);

        for ($i = $line_count - 1; $i >= 0; $i--) {
            $keyframes[] = $this->$line_method($lines, $line_count, $i);
        }

        return $keyframes;
    }

    /**
     * Get the current line as it is exiting left
     *
     * @param string $line
     * @param int $frame_number
     *
     * @return string
     */
    protected function currentLeftLine($line, $frame_number)
    {
        return mb_substr($line, -$frame_number);
    }


    /**
     * Get the current line as it is exiting right
     *
     * @param string $line
     * @param int $frame_number
     * @param int $length
     *
     * @return string
     */
    protected function currentRightLine($line, $frame_number, $length)
    {
        return str_repeat(' ', $length - $frame_number) . mb_substr($line, 0, $frame_number);
    }

    /**
     * Slice off X number of lines from the bottom and fill the rest with empty strings
     *
     * @param array $lines
     * @param integer $total_lines
     * @param integer $current
     *
     * @return array
     */
    protected function currentTopLine($lines, $total_lines, $current)
    {
        $keyframe = array_slice($lines, -$current, $current);

        return array_merge($keyframe, array_fill(0, $total_lines - $current, ''));
    }

    /**
     * Slice off X number of lines from the top and fill the rest with empty strings
     *
     * @param array $lines
     * @param integer $total_lines
     * @param integer $current
     *
     * @return array
     */
    protected function currentBottomLine($lines, $total_lines, $current)
    {
        $keyframe = array_fill(0, $total_lines - $current, '');

        return array_merge($keyframe, array_slice($lines, 0, $current));
    }
}
<?php

namespace League\CLImate\TerminalObject\Dynamic\Checkbox;

use League\CLImate\Decorator\Parser\ParserImporter;
use League\CLImate\TerminalObject\Helper\StringLength;
use League\CLImate\Util\UtilImporter;

class Checkbox
{
    use StringLength, ParserImporter, UtilImporter;

    /**
     * The value of the checkbox
     *
     * @var string|int|bool $value
     */
    protected $value;

    /**
     * The label for the checkbox
     *
     * @var string|int $label
     */
    protected $label;

    /**
     * Whether the checkbox is checked
     *
     * @var bool $checked
     */
    protected $checked = false;

    /**
     * Whether pointer is currently pointing at the checkbox
     *
     * @var bool $current
     */
    protected $current = false;

    /**
     * Whether the checkbox is the first in the group
     *
     * @var bool $first
     */
    protected $first = false;

    /**
     * Whether the checkbox is the last in the group
     *
     * @var bool $last
     */
    protected $last = false;

    public function __construct($label, $value)
    {
        $this->value = (!is_int($value)) ? $value : $label;
        $this->label = $label;
    }

    /**
     * @return bool
     */
    public function isCurrent()
    {
        return $this->current;
    }

    /**
     * @return bool
     */
    public function isChecked()
    {
        return $this->checked;
    }

    /**
     * @return bool
     */
    public function isFirst()
    {
        return $this->first;
    }

    /**
     * @return bool
     */
    public function isLast()
    {
        return $this->last;
    }

    /**
     * Set whether the pointer is currently pointing at this checkbox
     *
     * @param bool $current
     *
     * @return Checkbox
     */
    public function setCurrent($current = true)
    {
        $this->current = $current;

        return $this;
    }

    /**
     * Set whether the checkbox is currently checked
     *
     * @param bool $checked
     *
     * @return Checkbox
     */
    public function setChecked($checked = true)
    {
        $this->checked = $checked;

        return $this;
    }

    /**
     * @return Checkbox
     */
    public function setFirst()
    {
        $this->first = true;

        return $this;
    }

    /**
     * @return Checkbox
     */
    public function setLast()
    {
        $this->last = true;

        return $this;
    }

    /**
     * @return string|int|bool
     */
    public function getValue()
    {
        return $this->value;
    }

    /**
     * Build out basic checkbox string based on current options
     *
     * @return string
     */
    protected function buildCheckboxString()
    {
        $parts = [
            ($this->isCurrent()) ? $this->pointer() : ' ',
            $this->checkbox($this->isChecked()),
            $this->label,
        ];

        $line = implode(' ', $parts);

        return $line . $this->getPaddingString($line);
    }

    /**
     * Get the padding string based on the length of the terminal/line
     *
     * @param string $line
     *
     * @return string
     */
    protected function getPaddingString($line)
    {
        $length = $this->util->width() - $this->lengthWithoutTags($line);
        if ($length < 1) {
            return '';
        }

        return str_repeat(' ', $length);
    }

    /**
     * Get the checkbox symbol
     *
     * @param bool $checked
     *
     * @return string
     */
    protected function checkbox($checked)
    {
        if ($checked) {
            return html_entity_decode("&#x25CF;");
        }

        return html_entity_decode("&#x25CB;");
    }

    /**
     * Get the pointer symbol
     *
     * @return string
     */
    protected function pointer()
    {
        return html_entity_decode("&#x276F;");
    }

    public function __toString()
    {
        if ($this->isFirst()) {
            return $this->buildCheckboxString();
        }

        if ($this->isLast()) {
            return $this->buildCheckboxString() . $this->util->cursor->left(10) . '<hidden>';
        }

        return $this->buildCheckboxString();
    }
}
<?php

namespace League\CLImate\TerminalObject\Dynamic\Checkbox;

use League\CLImate\Decorator\Parser\ParserImporter;
use League\CLImate\Util\OutputImporter;
use League\CLImate\Util\UtilImporter;

class CheckboxGroup
{
    use OutputImporter, ParserImporter, UtilImporter;

    protected $checkboxes = [];

    protected $count;

    public function __construct(array $options)
    {
        foreach ($options as $key => $option) {
            $this->checkboxes[] = new Checkbox($option, $key);
        }

        $this->count = count($this->checkboxes);

        $this->checkboxes[0]->setFirst()->setCurrent();
        $this->checkboxes[$this->count - 1]->setLast();
    }

    public function write()
    {
        array_map([$this, 'writeCheckbox'], $this->checkboxes);
    }

    /**
     * Retrieve the checked option values
     *
     * @return array
     */
    public function getCheckedValues()
    {
        return array_values(array_map([$this, 'getValue'], $this->getChecked()));
    }

    /**
     * Set the newly selected option based on the direction
     *
     * @param string $direction 'previous' or 'next'
     */
    public function setCurrent($direction)
    {
        list($option, $key) = $this->getCurrent();

        $option->setCurrent(false);

        $new_key = $this->getCurrentKey($direction, $option, $key);

        $this->checkboxes[$new_key]->setCurrent();
    }

    /**
     * Toggle the current option's checked status
     */
    public function toggleCurrent()
    {
        list($option) = $this->getCurrent();

        $option->setChecked(!$option->isChecked());
    }

    /**
     * Get the number of checkboxes
     *
     * @return int
     */
    public function count()
    {
        return $this->count;
    }

    /**
     * Retrieve the checked options
     *
     * @return array
     */
    protected function getChecked()
    {
        return array_filter($this->checkboxes, [$this, 'isChecked']);
    }

    /**
     * Determine whether the option is checked
     *
     * @param Checkbox $option
     *
     * @return bool
     */
    protected function isChecked($option)
    {
        return $option->isChecked();
    }

    /**
     * Retrieve the option's value
     *
     * @param Checkbox $option
     *
     * @return mixed
     */
    protected function getValue($option)
    {
        return $option->getValue();
    }

    /**
     * Get the currently selected option
     *
     * @return array
     */
    protected function getCurrent()
    {
        foreach ($this->checkboxes as $key => $option) {
            if ($option->isCurrent()) {
                return [$option, $key];
            }
        }
    }

    /**
     * Retrieve the correct current key
     *
     * @param string $direction 'previous' or 'next'
     * @param Checkbox $option
     * @param int $key
     *
     * @return int
     */
    protected function getCurrentKey($direction, $option, $key)
    {
        $method = 'get' . ucwords($direction). 'Key';

        return $this->{$method}($option, $key);
    }

    /**
     * @param Checkbox $option
     * @param int $key
     *
     * @return int
     */
    protected function getPreviousKey($option, $key)
    {
        if ($option->isFirst()) {
            return count($this->checkboxes) - 1;
        }

        return --$key;
    }

    /**
     * @param Checkbox $option
     * @param int $key
     *
     * @return int
     */
    protected function getNextKey($option, $key)
    {
        if ($option->isLast()) {
            return 0;
        }

        return ++$key;
    }

    /**
     * @param Checkbox $checkbox
     */
    protected function writeCheckbox($checkbox)
    {
        $checkbox->util($this->util);
        $checkbox->parser($this->parser);

        $parsed = $this->parser->apply((string) $checkbox);

        if ($checkbox->isLast()) {
            $this->output->sameLine()->write($parsed);
            return;
        }

        $this->output->write($parsed);
    }
}
<?php

namespace League\CLImate\TerminalObject\Dynamic\Checkbox;

class RadioGroup extends CheckboxGroup
{
    /**
     * Toggle the currently selected option, uncheck all of the others
     */
    public function toggleCurrent()
    {
        list($checkbox, $checkbox_key) = $this->getCurrent();

        $checkbox->setChecked(!$checkbox->isChecked());

        foreach ($this->checkboxes as $key => $checkbox) {
            if ($key == $checkbox_key) {
                continue;
            }

            $checkbox->setChecked(false);
        }
    }

    /**
     * Get the checked option
     *
     * @return string|bool|int
     */
    public function getCheckedValues()
    {
        if ($checked = $this->getChecked()) {
            return reset($checked)->getValue();
        }

        return null;
    }
}
<?php

namespace League\CLImate\TerminalObject\Dynamic;

use League\CLImate\Util\Reader\ReaderInterface;
use League\CLImate\Util\Reader\Stdin;

class Checkboxes extends InputAbstract
{
    /**
     * The options to choose from
     *
     * @var Checkbox\CheckboxGroup $checkboxes
     */
    protected $checkboxes;

    public function __construct($prompt, array $options, ReaderInterface $reader = null)
    {
        $this->prompt  = $prompt;
        $this->reader  = $reader ?: new Stdin();

        $this->checkboxes = $this->buildCheckboxes($options);
    }

    /**
     * Do it! Prompt the user for information!
     *
     * @return string
     */
    public function prompt()
    {
        $this->output->write($this->parser->apply($this->promptFormatted()));

        $this->writeCheckboxes();

        $this->util->system->exec('stty sane');

        return $this->checkboxes->getCheckedValues();
    }

    /**
     * Build out the checkboxes
     *
     * @param array $options
     *
     * @return Checkbox\CheckboxGroup
     */
    protected function buildCheckboxes(array $options)
    {
        return new Checkbox\CheckboxGroup($options);
    }

    /**
     * Format the prompt string
     *
     * @return string
     */
    protected function promptFormatted()
    {
        return $this->prompt . ' (use <space> to select)';
    }

    /**
     * Output the checkboxes and listen for any keystrokes
     */
    protected function writeCheckboxes()
    {
        $this->updateCheckboxView();

        $this->util->system->exec('stty -icanon');
        $this->output->sameLine()->write($this->util->cursor->hide());

        $this->listenForInput();
    }

    /**
     * Listen for input and act on it
     */
    protected function listenForInput()
    {
        while ($char = $this->reader->char(1)) {
            if ($this->handleCharacter($char)) {
                break;
            }

            $this->moveCursorToTop();
            $this->updateCheckboxView();
        }
    }

    /**
     * Take the appropriate action based on the input character,
     * returns whether to stop listening or not
     *
     * @param string $char
     *
     * @return bool
     */
    protected function handleCharacter($char)
    {
        switch ($char) {
            case "\n":
                $this->output->sameLine()->write($this->util->cursor->defaultStyle());
                $this->output->sameLine()->write("\e[0m");
            return true; // Break the while loop as well

            case "\e":
                $this->handleAnsi();
            break;

            case ' ':
                $this->checkboxes->toggleCurrent();
            break;
        }

        return false;
    }

    /**
     * Move the cursor to the top of the option list
     */
    protected function moveCursorToTop()
    {
        $output = $this->util->cursor->up($this->checkboxes->count() - 1);
        $output .= $this->util->cursor->startOfCurrentLine();

        $this->output->sameLine()->write($output);
    }

    /**
     * Handle any ANSI characters
     */
    protected function handleAnsi()
    {
        switch ($this->reader->char(2)) {
            // Up arrow
            case '[A':
                $this->checkboxes->setCurrent('previous');
            break;

            // Down arrow
            case '[B':
                $this->checkboxes->setCurrent('next');
            break;
        }
    }

    /**
     * Re-write the checkboxes based on the current objects
     */
    protected function updateCheckboxView()
    {
        $this->checkboxes->util($this->util);
        $this->checkboxes->output($this->output);
        $this->checkboxes->parser($this->parser);

        $this->checkboxes->write();
    }
}
<?php

namespace League\CLImate\TerminalObject\Dynamic;

use League\CLImate\Util\Reader\ReaderInterface;
use function in_array;
use function strtolower;
use function substr;

class Confirm extends Input
{


    /**
     * @inheritdoc
     */
    public function __construct($prompt, ReaderInterface $reader = null)
    {
        parent::__construct($prompt, $reader);

        $this->default = "n";
    }


    /**
     * Let us know if the user confirmed.
     *
     * @return bool
     */
    public function confirmed()
    {
        if (in_array($this->default, ["y", "yes"], true)) {
            $this->prompt .= " [Y/n]";
        } else {
            $this->prompt .= " [y/N]";
        }

        $this->accept(['y', 'yes', 'n', 'no'], false);

        $response = strtolower($this->prompt());

        return (substr($response, 0, 1) === 'y');
    }
}
<?php

namespace League\CLImate\TerminalObject\Dynamic;

use League\CLImate\Decorator\Parser\ParserImporter;
use League\CLImate\Settings\SettingsImporter;
use League\CLImate\Util\OutputImporter;
use League\CLImate\Util\UtilImporter;

/**
 * The dynamic terminal object doesn't adhere to the basic terminal object
 * contract, which is why it gets its own base class
 */

abstract class DynamicTerminalObject implements DynamicTerminalObjectInterface
{
    use SettingsImporter, ParserImporter, OutputImporter, UtilImporter;
}
<?php

namespace League\CLImate\TerminalObject\Dynamic;

use League\CLImate\Decorator\Parser\Parser;
use League\CLImate\Util\UtilFactory;

interface DynamicTerminalObjectInterface
{
    public function settings();

    /**
     * @param $setting
     * @return void
     */
    public function importSetting($setting);

    /**
     * @param \League\CLImate\Decorator\Parser\Parser $parser
     */
    public function parser(Parser $parser);

    /**
     * @param UtilFactory $util
     */
    public function util(UtilFactory $util);
}
<?php

namespace League\CLImate\TerminalObject\Dynamic;

use League\CLImate\Util\Reader\ReaderInterface;
use League\CLImate\Util\Reader\Stdin;

class Input extends InputAbstract
{
    /**
     * An array of acceptable responses
     *
     * @var array|object $acceptable
     */
    protected $acceptable;

    /**
     * Whether we should be strict about the response given
     *
     * @var boolean $strict
     */
    protected $strict = false;

    /**
     * Whether to accept multiple lines of input
     *
     * Terminated by ^D
     *
     * @var boolean $multiLine
     */
    protected $multiLine = false;

    /**
     * Whether we should display the acceptable responses to the user
     *
     * @var boolean $show_acceptable
     */
    protected $show_acceptable = false;

    /**
     * A default answer in the case of no user response,
     * prevents re-prompting
     *
     * @var string
     */
    protected $default = '';

    public function __construct($prompt, ReaderInterface $reader = null)
    {
        $this->prompt = $prompt;
        $this->reader = $reader ?: new Stdin();
    }

    /**
     * Do it! Prompt the user for information!
     *
     * @return string
     */
    public function prompt()
    {
        $this->writePrompt();

        $response = $this->valueOrDefault($this->getUserInput());

        if ($this->isValidResponse($response)) {
            return $response;
        }

        return $this->prompt();
    }

    /**
     * Define the acceptable responses and whether or not to
     * display them to the user
     *
     * @param  array|object $acceptable
     * @param  boolean $show
     *
     * @return \League\CLImate\TerminalObject\Dynamic\Input
     */
    public function accept($acceptable, $show = false)
    {
        $this->acceptable      = $acceptable;
        $this->show_acceptable = $show;

        return $this;
    }

    /**
     * Define whether we should be strict about exact responses
     *
     * @return \League\CLImate\TerminalObject\Dynamic\Input
     */
    public function strict()
    {
        $this->strict = true;

        return $this;
    }

    /**
     * Set a default response
     *
     * @param string $default
     *
     * @return \League\CLImate\TerminalObject\Dynamic\Input
     */
    public function defaultTo($default)
    {
        $this->default = $default;

        return $this;
    }

    /**
     * Set multiline input to true
     *
     * @return \League\CLImate\TerminalObject\Dynamic\Input
     */
    public function multiLine()
    {
        $this->multiLine = true;

        return $this;
    }

    /**
     * @return string
     */
    protected function getUserInput()
    {
        if ($this->multiLine) {
            return $this->reader->multiLine();
        }

        return $this->reader->line();
    }

    /**
     * Write out the formatted prompt
     */
    protected function writePrompt()
    {
        $prompt = $this->parser->apply($this->promptFormatted());

        $this->output->sameLine()->write($prompt);
    }

    /**
     * If no response was given and there is a default, return it,
     * otherwise return response
     *
     * @param string $response
     *
     * @return string
     */
    protected function valueOrDefault($response)
    {
        if (strlen($response) == 0 && strlen($this->default)) {
            return $this->default;
        }

        return $response;
    }

    /**
     * Format the acceptable responses as options
     *
     * @return string
     */
    protected function acceptableFormatted()
    {
        if (!is_array($this->acceptable)) {
            return '';
        }

        $acceptable = array_map([$this, 'acceptableItemFormatted'], $this->acceptable);

        return '[' . implode('/', $acceptable) . ']';
    }

    /**
     * Format the acceptable item depending on whether it is the default or not
     *
     * @param string $item
     *
     * @return string
     */
    protected function acceptableItemFormatted($item)
    {
        if ($item == $this->default) {
            return '<bold>' . $item . '</bold>';
        }

        return $item;
    }

    /**
     * Format the prompt incorporating spacing and any acceptable options
     *
     * @return string
     */
    protected function promptFormatted()
    {
        $prompt = $this->prompt . ' ';

        if ($this->show_acceptable) {
            $prompt .= $this->acceptableFormatted() . ' ';
        }

        return $prompt;
    }

    /**
     * Apply some string manipulation functions for normalization
     *
     * @param string|array $var
     * @return array
     */
    protected function levelPlayingField($var)
    {
        $levelers = ['trim', 'mb_strtolower'];

        foreach ($levelers as $leveler) {
            if (is_array($var)) {
                $var = array_map($leveler, $var);
            } else {
                $var = $leveler($var);
            }
        }

        return $var;
    }

    /**
     * Determine whether or not the acceptable property is of type closure
     *
     * @return boolean
     */
    protected function acceptableIsClosure()
    {
        return (is_object($this->acceptable) && $this->acceptable instanceof \Closure);
    }

    /**
     * Determine if the user's response is in the acceptable responses array
     *
     * @param string $response
     *
     * @return boolean $response
     */
    protected function isAcceptableResponse($response)
    {
        if ($this->strict) {
            return in_array($response, $this->acceptable);
        }

        $acceptable = $this->levelPlayingField($this->acceptable);
        $response   = $this->levelPlayingField($response);

        return in_array($response, $acceptable);
    }

    /**
     * Determine if the user's response is valid based on the current settings
     *
     * @param string $response
     *
     * @return boolean $response
     */
    protected function isValidResponse($response)
    {
        if (empty($this->acceptable)) {
            return true;
        }

        if ($this->acceptableIsClosure()) {
            return call_user_func($this->acceptable, $response);
        }

        return $this->isAcceptableResponse($response);
    }
}
<?php

namespace League\CLImate\TerminalObject\Dynamic;

use League\CLImate\Util\Reader\ReaderInterface;
use League\CLImate\Util\Reader\Stdin;

abstract class InputAbstract extends DynamicTerminalObject
{
    /**
     * The prompt text
     *
     * @var string $prompt
     */
    protected $prompt;

    /**
     * An instance of ReaderInterface
     *
     * @var \League\CLImate\Util\Reader\ReaderInterface $reader
     */
    protected $reader;

    /**
     * Do it! Prompt the user for information!
     *
     * @return string
     */
    abstract public function prompt();

    /**
     * Format the prompt incorporating spacing and any acceptable options
     *
     * @return string
     */
    abstract protected function promptFormatted();
}
<?php

namespace League\CLImate\TerminalObject\Dynamic;

class Padding extends DynamicTerminalObject
{
    /**
     * The length that lines should be padded to
     *
     * @var integer $length
     */
    protected $length = 0;

    /**
     * The character(s) that should be used to pad
     *
     * @var string $char
     */
    protected $char = '.';


    /**
     * If they pass in a padding character, set the char
     *
     * @param int $length
     * @param string $char
     */
    public function __construct($length = null, $char = null)
    {
        if ($length !== null) {
            $this->length($length);
        }

        if (is_string($char)) {
            $this->char($char);
        }
    }

    /**
     * Set the character(s) that should be used to pad
     *
     * @param string $char
     *
     * @return \League\CLImate\TerminalObject\Dynamic\Padding
     */
    public function char($char)
    {
        $this->char = $char;

        return $this;
    }

    /**
     * Set the length of the line that should be generated
     *
     * @param integer $length
     *
     * @return \League\CLImate\TerminalObject\Dynamic\Padding
     */
    public function length($length)
    {
        $this->length = $length;

        return $this;
    }

    /**
     * Get the length of the line based on the width of the terminal window
     *
     * @return integer
     */
    protected function getLength()
    {
        if (!$this->length) {
            $this->length = $this->util->width();
        }

        return $this->length;
    }

    /**
     * Pad the content with the characters
     *
     * @param string $content
     *
     * @return string
     */
    protected function padContent($content)
    {
        if (strlen($this->char) > 0) {
            $length = $this->getLength();
            $padding_length = ceil($length / mb_strlen($this->char));

            $padding = str_repeat($this->char, $padding_length);
            $content .= mb_substr($padding, 0, $length - mb_strlen($content));
        }

        return $content;
    }

    /**
     * Output the content and pad to the previously defined length
     *
     * @param string $content
     *
     * @return \League\CLImate\TerminalObject\Dynamic\Padding
     */
    public function label($content)
    {
        // Handle long labels by splitting them across several lines
        $lines = [];
        $stop = mb_strlen($content);
        $width = $this->util->width();
        for ($i = 0; $i < $stop; $i += $width) {
            $lines[] = mb_substr($content, $i, $width);
        }
        $content = array_pop($lines);

        foreach ($lines as $line) {
            $this->output->write($this->parser->apply($line));
        }

        $content = $this->padContent($content);
        $content = $this->parser->apply($content);

        $this->output->sameLine();
        $this->output->write($content);

        return $this;
    }

    /**
     * Output result
     *
     * @param string $content
     */
    public function result($content)
    {
        $this->output->write($this->parser->apply(' ' . $content));
    }
}
<?php

namespace League\CLImate\TerminalObject\Dynamic;

class Password extends Input
{
    public function prompt()
    {
        $this->writePrompt();

        return $this->reader->hidden();
    }
}
<?php

namespace League\CLImate\TerminalObject\Dynamic;

use League\CLImate\Exceptions\UnexpectedValueException;

class Progress extends DynamicTerminalObject
{
    /**
     * The total number of items involved
     *
     * @var integer $total
     */
    protected $total = 0;

    /**
     * The current item that the progress bar represents
     *
     * @var integer $current
     */
    protected $current = 0;

    /**
     * The current percentage displayed
     *
     * @var string $current_percentage
     */
    protected $current_percentage = '';

    /**
     * The string length of the bar when at 100%
     *
     * @var integer $bar_str_len
     */
    protected $bar_str_len;

    /**
     * Flag indicating whether we are writing the bar for the first time
     *
     * @var boolean $first_line
     */
    protected $first_line = true;

    /**
     * Current status bar label
     *
     * @var string $label
     */
    protected $label;

    /**
     * Force a redraw every time
     *
     * @var boolean $force_redraw
     */
    protected $force_redraw = false;

    /**
     * If this progress bar ever displayed a label.
     *
     * @var boolean $has_label_line
     */
    protected $has_label_line = false;

    /**
     * If they pass in a total, set the total
     *
     * @param integer $total
     */
    public function __construct($total = null)
    {
        if ($total !== null) {
            $this->total($total);
        }
    }

    /**
     * Set the total property
     *
     * @param  integer $total
     *
     * @return Progress
     */
    public function total($total)
    {
        $this->total = $total;

        return $this;
    }

    /**
     * Determines the current percentage we are at and re-writes the progress bar
     *
     * @param integer $current
     * @param mixed   $label
     *
     * @return void
     * @throws UnexpectedValueException
     */
    public function current($current, $label = null)
    {
        if ($this->total == 0) {
            // Avoid dividing by 0
            throw new UnexpectedValueException('The progress total must be greater than zero.');
        }

        if ($current > $this->total) {
            throw new UnexpectedValueException('The current is greater than the total.');
        }

        $this->drawProgressBar($current, $label);

        $this->current = $current;
        $this->label   = $label;
    }

    /**
     * Increments the current position we are at and re-writes the progress bar
     *
     * @param integer $increment The number of items to increment by
     * @param string $label
     */
    public function advance($increment = 1, $label = null)
    {
        $this->current($this->current + $increment, $label);
    }

    /**
     * Force the progress bar to redraw every time regardless of whether it has changed or not
     *
     * @param boolean $force
     * @return Progress
     */
    public function forceRedraw($force = true)
    {
        $this->force_redraw = !!$force;

        return $this;
    }


    /**
     * Update a progress bar using an iterable.
     *
     * @param iterable $items Array or any other iterable object
     * @param callable $callback A handler to run on each item
     */
    public function each($items, callable $callback = null)
    {
        if ($items instanceof \Traversable) {
            $items = iterator_to_array($items);
        }

        $total = count($items);
        if (!$total) {
            return;
        }
        $this->total($total);

        foreach ($items as $key => $item) {
            if ($callback) {
                $label = $callback($item, $key);
            } else {
                $label = null;
            }

            $this->advance(1, $label);
        }
    }


    /**
     * Draw the progress bar, if necessary
     *
     * @param string $current
     * @param string $label
     */
    protected function drawProgressBar($current, $label)
    {
        $percentage = $this->percentageFormatted($current / $this->total);

        if ($this->shouldRedraw($percentage, $label)) {
            $progress_bar = $this->getProgressBar($current, $label);
            $this->output->write($this->parser->apply($progress_bar));
        }

        $this->current_percentage = $percentage;
    }

    /**
     * Build the progress bar str and return it
     *
     * @param integer $current
     * @param string $label
     *
     * @return string
     */
    protected function getProgressBar($current, $label)
    {
        if ($this->first_line) {
            // Drop down a line, we are about to
            // re-write this line for the progress bar
            $this->output->write('');
            $this->first_line = false;
        }

        // Move the cursor up and clear it to the end
        $line_count = $this->has_label_line ? 2 : 1;

        $progress_bar  = $this->util->cursor->up($line_count);
        $progress_bar .= $this->util->cursor->startOfCurrentLine();
        $progress_bar .= $this->util->cursor->deleteCurrentLine();
        $progress_bar .= $this->getProgressBarStr($current, $label);

        // If this line has a label then set that this progress bar has a label line
        if (strlen($label) > 0) {
            $this->has_label_line = true;
        }

        return $progress_bar;
    }

    /**
     * Get the progress bar string, basically:
     * =============>             50% label
     *
     * @param integer $current
     * @param string $label
     *
     * @return string
     */
    protected function getProgressBarStr($current, $label)
    {
        $percentage = $current / $this->total;
        $bar_length = round($this->getBarStrLen() * $percentage);

        $bar        = $this->getBar($bar_length);
        $number     = $this->percentageFormatted($percentage);

        if ($label) {
            $label = $this->labelFormatted($label);
        // If this line doesn't have a label, but we've had one before,
        // then ensure the label line is cleared
        } elseif ($this->has_label_line) {
            $label = $this->labelFormatted('');
        }

        return trim("{$bar} {$number}{$label}");
    }

    /**
     * Get the string for the actual bar based on the current length
     *
     * @param integer $length
     *
     * @return string
     */
    protected function getBar($length)
    {
        $bar     = str_repeat('=', $length);
        $padding = str_repeat(' ', $this->getBarStrLen() - $length);

        return "{$bar}>{$padding}";
    }

    /**
     * Get the length of the bar string based on the width of the terminal window
     *
     * @return integer
     */
    protected function getBarStrLen()
    {
        if (!$this->bar_str_len) {
            // Subtract 10 because of the '> 100%' plus some padding, max 100
            $this->bar_str_len = min($this->util->width() - 10, 100);
        }

        return $this->bar_str_len;
    }

    /**
     * Format the percentage so it looks pretty
     *
     * @param integer $percentage
     * @return float
     */
    protected function percentageFormatted($percentage)
    {
        return round($percentage * 100) . '%';
    }

    /**
     * Format the label so it is positioned correctly
     *
     * @param string $label
     * @return string
     */
    protected function labelFormatted($label)
    {
        return "\n" . $this->util->cursor->startOfCurrentLine() . $this->util->cursor->deleteCurrentLine() . $label;
    }

    /**
     * Determine whether the progress bar has changed and we need to redrew
     *
     * @param string $percentage
     * @param string $label
     *
     * @return boolean
     */
    protected function shouldRedraw($percentage, $label)
    {
        return ($this->force_redraw || $percentage != $this->current_percentage || $label != $this->label);
    }
}
<?php

namespace League\CLImate\TerminalObject\Dynamic;

class Radio extends Checkboxes
{
    /**
     * Build out the checkboxes
     *
     * @param array $options
     *
     * @return Checkbox\RadioGroup
     */
    protected function buildCheckboxes(array $options)
    {
        return new Checkbox\RadioGroup($options);
    }

    /**
     * Take the appropriate action based on the input character,
     * returns whether to stop listening or not
     *
     * @param string $char
     *
     * @return bool
     */
    protected function handleCharacter($char)
    {
        # Ignore space, as we can't select multiple options
        if ($char === " ") {
            return false;
        }

        # Use enter to select the current option
        if ($char === "\n") {
            $this->checkboxes->toggleCurrent();
        }

        return parent::handleCharacter($char);
    }

    /**
     * Format the prompt string
     *
     * @return string
     */
    protected function promptFormatted()
    {
        return $this->prompt . ' (press <Enter> to select)';
    }
}
<?php

namespace League\CLImate\TerminalObject\Dynamic;

use League\CLImate\Exceptions\UnexpectedValueException;
use function array_merge;
use function count;
use function microtime;
use function range;
use function str_repeat;
use function substr;
use function trim;

final class Spinner extends DynamicTerminalObject
{
    /**
     * @var string[] The characters to be used to present progress.
     */
    private $characters = ["[=---]", "[-=--]", "[--=-]", "[---=]", "[--=-]", "[-=--]"];

    /**
     * @var int The current item of the sequence
     */
    private $current = 0;

    /**
     * @var bool Flag indicating whether we are writing the bar for the first time.
     */
    private $firstLine = true;

    /**
     * @var string Current label.
     */
    private $label;

    /**
     * @var float When the spinner was last drawn.
     */
    private $lastDrawn;

    /**
     * @var float How long to wait in seconds between drawing each stage.
     */
    private $timeLimit = 0.1;


    /**
     * If they pass in a sequence, set the sequence
     *
     * @param string $label
     * @param string ...$characters
     */
    public function __construct($label = null, ...$characters)
    {
        if ($label !== null) {
            $this->label = $label;
        }

        if (count($characters) < 1) {
            $characters = [];
            $size = 5;
            $positions = array_merge(range(0, $size - 1), range($size - 2, 1, -1));
            foreach ($positions as $pos) {
                $line = str_repeat("-", $size);
                $characters[] = "[" . substr($line, 0, $pos) . "=" . substr($line, $pos + 1) . "]";
            }
        }
        $this->characters(...$characters);
    }


    /**
     * Set the length of time to wait between drawing each stage.
     *
     * @param float $timeLimit
     *
     * @return Spinner
     */
    public function timeLimit($timeLimit)
    {
        $this->timeLimit = (float) $timeLimit;

        return $this;
    }


    /**
     * Set the character to loop around.
     *
     * @param string $characters
     *
     * @return Spinner
     */
    public function characters(...$characters)
    {
        if (count($characters) < 1) {
            throw new UnexpectedValueException("You must specify the characters to use");
        }

        $this->characters = $characters;

        return $this;
    }


    /**
     * Re-writes the spinner
     *
     * @param string $label
     *
     * @return void
     */
    public function advance($label = null)
    {
        if ($label === null) {
            $label = $this->label;
        }

        if ($this->lastDrawn) {
            $time = microtime(true) - $this->lastDrawn;
            if ($time < $this->timeLimit) {
                return;
            }
        }

        ++$this->current;
        if ($this->current >= count($this->characters)) {
            $this->current = 0;
        }

        $characters = $this->characters[$this->current];
        $this->drawSpinner($characters, $label);
        $this->lastDrawn = microtime(true);
    }


    /**
     * Draw the spinner
     *
     * @param string $characters
     * @param string $label
     */
    private function drawSpinner($characters, $label)
    {
        $spinner = "";

        if ($this->firstLine) {
            $this->firstLine = false;
        } else {
            $spinner .= $this->util->cursor->up(1);
            $spinner .= $this->util->cursor->startOfCurrentLine();
            $spinner .= $this->util->cursor->deleteCurrentLine();
        }

        $spinner .= trim("{$characters} {$label}");

        $this->output->write($this->parser->apply($spinner));
    }
}
<?php

namespace League\CLImate\TerminalObject\Helper;

use League\CLImate\Exceptions\UnexpectedValueException;

use function preg_quote;

trait Art
{
    /**
     * The directories we should be looking for art in
     *
     * @var array $art_dirs
     */
    protected $art_dirs = [];

    /**
     * The default art if we can't find what the user requested
     *
     * @var string $default_art
     */
    protected $default_art = '404';

    /**
     * The art requested by the user
     *
     * @var string $art
     */
    protected $art = '';

    /**
     * Specify which settings Draw needs to import
     *
     * @return array
     */
    public function settings()
    {
        return ['Art'];
    }

    /**
     * Import the Art setting (any directories the user added)
     *
     * @param \League\CLImate\Settings\Art $setting
     */
    public function importSettingArt($setting)
    {
        foreach ($setting->dirs as $dir) {
            $this->addDir($dir);
        }
    }

    /**
     * Add a directory to search for art in
     *
     * @param string $dir
     */
    protected function addDir($dir)
    {
        // Add any additional directories to the top of the array
        // so that the user can override art
        array_unshift($this->art_dirs, rtrim($dir, \DIRECTORY_SEPARATOR));

        // Keep the array clean
        $this->art_dirs = array_unique($this->art_dirs);
        $this->art_dirs = array_filter($this->art_dirs);
        $this->art_dirs = array_values($this->art_dirs);
    }

    /**
     * Find a valid art path
     *
     * @param string $art
     *
     * @return array
     */
    protected function artDir($art)
    {
        return $this->fileSearch($art, preg_quote(\DIRECTORY_SEPARATOR) . '*.*');
    }

    /**
     * Find a valid art path
     *
     * @param string $art
     *
     * @return string
     */
    protected function artFile($art)
    {
        $files = $this->fileSearch($art, '(\.[^' . preg_quote(\DIRECTORY_SEPARATOR) . ']*)?$');

        if (count($files) === 0) {
            $this->addDir(__DIR__ . \DIRECTORY_SEPARATOR . '..' . \DIRECTORY_SEPARATOR . '..' . \DIRECTORY_SEPARATOR . 'ASCII');
            $files = $this->fileSearch($this->default_art, '.*');
        }

        if (count($files) === 0) {
            throw new UnexpectedValueException("Unable to find an art file with the name '{$art}'");
        }

        return reset($files);
    }

    /**
     * Find a set of files in the current art directories
     * based on a pattern
     *
     * @param string $art
     * @param string $pattern
     *
     * @return array
     */
    protected function fileSearch($art, $pattern)
    {
        foreach ($this->art_dirs as $dir) {
            $directory_iterator = new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($dir));

            $paths = [];
            $regex = '~' . preg_quote($art) . $pattern . '~';

            foreach ($directory_iterator as $file) {
                if ($file->isDir()) {
                    continue;
                }

                // Look for anything that has the $art filename
                if (preg_match($regex, $file)) {
                    $paths[] = $file->getPathname();
                }
            }

            asort($paths);

            // If we've got one, no need to look any further
            if (!empty($paths)) {
                return $paths;
            }
        }

        return [];
    }

    /**
     * Parse the contents of the file and return each line
     *
     * @param string $path
     *
     * @return array
     */
    protected function parse($path)
    {
        $output = file_get_contents($path);
        $output = explode("\n", $output);
        $output = array_map('rtrim', $output);

        return $output;
    }
}
<?php

namespace League\CLImate\TerminalObject\Helper;

class Sleeper implements SleeperInterface
{
    /**
     * The default length of the sleep
     *
     * @var int|float $speed
     */
    protected $speed = 50000;

    /**
     * Set the speed based on a percentage (50% slower, 200% faster, etc)
     *
     * @param int|float $percentage
     *
     * @return float
     */
    public function speed($percentage)
    {
        if (is_numeric($percentage) && $percentage > 0) {
            $this->speed *= (100 / $percentage);
        }

        return $this->speed;
    }

    /**
     * Sleep for the specified amount of time
     */
    public function sleep()
    {
        usleep($this->speed);
    }
}
<?php

namespace League\CLImate\TerminalObject\Helper;

interface SleeperInterface
{
    /**
     * @param int|float $percentage
     */
    public function speed($percentage);

    public function sleep();
}
<?php

namespace League\CLImate\TerminalObject\Helper;

trait StringLength
{
    /**
     * Tags the should not be ultimately considered
     * when calculating any string lengths
     *
     * @var array $ignore_tags
     */
    protected $ignore_tags = [];

    /**
     * Set the ignore tags property
     */
    protected function setIgnoreTags()
    {
        if (!count($this->ignore_tags)) {
            $this->ignore_tags = array_keys($this->parser->tags->all());
        }
    }

    /**
     * Determine the length of the string without any tags
     *
     * @param  string  $str
     *
     * @return integer
     */
    protected function lengthWithoutTags($str)
    {
        $this->setIgnoreTags();

        return mb_strwidth($this->withoutTags($str), 'UTF-8');
    }

    /**
     * Get the string without the tags that are to be ignored
     *
     * @param  string $str
     *
     * @return string
     */
    protected function withoutTags($str)
    {
        $this->setIgnoreTags();

        return str_replace($this->ignore_tags, '', $str);
    }

    /**
     * Apply padding to a string
     *
     * @param string $str
     * @param string $final_length
     * @param string $padding_side
     *
     * @return string
     */
    protected function pad($str, $final_length, $padding_side = 'right')
    {
        $padding = $final_length - $this->lengthWithoutTags($str);

        if ($padding_side == 'left') {
            return str_repeat(' ', $padding) . $str;
        }

        return $str . str_repeat(' ', $padding);
    }

    /**
     * Apply padding to an array of strings
     *
     * @param  array $arr
     * @param  integer $final_length
     * @param string $padding_side
     *
     * @return array
     */
    protected function padArray($arr, $final_length, $padding_side = 'right')
    {
        foreach ($arr as $key => $value) {
            $arr[$key] = $this->pad($value, $final_length, $padding_side);
        }

        return $arr;
    }

    /**
     * Find the max string length in an array
     *
     * @param array $arr
     * @return int
     */
    protected function maxStrLen(array $arr)
    {
        return max($this->arrayOfStrLens($arr));
    }

    /**
     * Get an array of the string lengths from an array of strings
     *
     * @param array $arr
     * @return array
     */
    protected function arrayOfStrLens(array $arr)
    {
        return array_map([$this, 'lengthWithoutTags'], $arr);
    }
}
<?php

namespace League\CLImate\TerminalObject\Router;

abstract class BaseRouter implements RouterInterface
{
    protected $extensions = [];

    /**
     * Add a custom extension to CLImate
     *
     * @param string $key
     * @param string $class
     */
    public function addExtension($key, $class)
    {
        $this->extensions[$key] = $class;
    }

    /**
     * Get the full path for the class based on the key
     *
     * @param string $class
     *
     * @return string
     */
    public function path($class)
    {
        return $this->getExtension($class) ?: $this->getPath($this->shortName($class));
    }

    /**
     * Determines if the requested class is a
     * valid terminal object class
     *
     * @param  string  $class
     *
     * @return boolean
     */
    public function exists($class)
    {
        $class = $this->path($class);

        return (is_object($class) || class_exists($class));
    }

    /**
     * Get the full path for the terminal object class
     *
     * @param  string $class
     *
     * @return string
     */
    protected function getPath($class)
    {
        return 'League\CLImate\TerminalObject\\' . $this->pathPrefix() . '\\' . $class;
    }

    /**
     * Get an extension by its key
     *
     * @param string $key
     *
     * @return string|false Full class path to extension
     */
    protected function getExtension($key)
    {
        if (array_key_exists($key, $this->extensions)) {
            return $this->extensions[$key];
        }

        return false;
    }

    /**
     * Get the class short name
     *
     * @param string $name
     *
     * @return string
     */
    protected function shortName($name)
    {
        $name = str_replace('_', ' ', $name);
        $name = ucwords($name);

        return str_replace(' ', '', $name);
    }
}
<?php

namespace League\CLImate\TerminalObject\Router;

use League\CLImate\Util\Helper;
use League\CLImate\Util\OutputImporter;

class BasicRouter extends BaseRouter
{
    use OutputImporter;

    /**
     * @return string
     */
    public function pathPrefix()
    {
        return 'Basic';
    }

    /**
     * Execute a basic terminal object
     *
     * @param \League\CLImate\TerminalObject\Basic\BasicTerminalObject $obj
     * @return void
     */
    public function execute($obj)
    {
        $results = Helper::toArray($obj->result());

        $this->output->persist();

        foreach ($results as $result) {
            if ($obj->sameLine()) {
                $this->output->sameLine();
            }

            $this->output->write($obj->getParser()->apply($result));
        }

        $this->output->persist(false);
    }
}
<?php

namespace League\CLImate\TerminalObject\Router;

use League\CLImate\Util\OutputImporter;

class DynamicRouter extends BaseRouter
{
    use OutputImporter;

    /**
     * @return string
     */
    public function pathPrefix()
    {
        return 'Dynamic';
    }

    /**
     * Execute a dynamic terminal object using given arguments
     *
     * @param \League\CLImate\TerminalObject\Dynamic\DynamicTerminalObject $obj
     *
     * @return \League\CLImate\TerminalObject\Dynamic\DynamicTerminalObject
     */
    public function execute($obj)
    {
        $obj->output($this->output);

        return $obj;
    }
}
<?php

namespace League\CLImate\TerminalObject\Router;

use League\CLImate\Exceptions\InvalidArgumentException;
use League\CLImate\Exceptions\UnexpectedValueException;
use League\CLImate\Util\Helper;

class ExtensionCollection
{
    /**
     * @var array collection
     */
    protected $collection = ['basic' => [], 'dynamic' => []];

    /**
     * @var string $basic_interface
     */
    protected $basic_interface = 'League\CLImate\TerminalObject\Basic\BasicTerminalObjectInterface';

    /**
     * @var string $dynamic_interface
     */
    protected $dynamic_interface = 'League\CLImate\TerminalObject\Dynamic\DynamicTerminalObjectInterface';

    public function __construct($key, $class)
    {
        $this->createCollection($key, $class);
    }

    public function collection()
    {
        return $this->collection;
    }

    /**
     * Create the collection from the key/class
     *
     * @param string $original_key
     * @param string|object|array $original_class
     *
     * @return void
     */
    protected function createCollection($original_key, $original_class)
    {
        $collection = $this->convertToArray($original_key, $original_class);

        foreach ($collection as $key => $class) {
            $this->validateExtension($class);
            $this->collection[$this->getType($class)][$this->getKey($key, $class)] = $class;
        }
    }

    /**
     * Convert the given class and key to an array of classes
     *
     * @param string|object|array $class
     * @param string $key Optional custom key instead of class name
     *
     * @return array
     */
    protected function convertToArray($key, $class)
    {
        if (is_array($class)) {
            return $class;
        }

        return [$this->getKey($key, $class) => $class];
    }

    /**
     * Ensure that the extension is valid
     *
     * @param string|object|array $class
     */
    protected function validateExtension($class)
    {
        $this->validateClassExists($class);
        $this->validateClassImplementation($class);
    }

    /**
     * @param string|object $class
     *
     * @throws UnexpectedValueException if extension class does not exist
     */
    protected function validateClassExists($class)
    {
        if (is_string($class) && !class_exists($class)) {
            throw new UnexpectedValueException('Class does not exist: ' . $class);
        }
    }

    /**
     * @param string|object $class
     *
     * @throws InvalidArgumentException if extension class does not implement either Dynamic or Basic interface
     */
    protected function validateClassImplementation($class)
    {
        $str_class = is_string($class);

        $valid_implementation = (is_a($class, $this->basic_interface, $str_class)
                                    || is_a($class, $this->dynamic_interface, $str_class));

        if (!$valid_implementation) {
            throw new InvalidArgumentException('Class must implement either '
                                    . $this->basic_interface . ' or ' . $this->dynamic_interface);
        }
    }

    /**
     * Determine the extension key based on the class
     *
     * @param string|null $key
     * @param string|object $class
     *
     * @return string
     */
    protected function getKey($key, $class)
    {
        if ($key === null || !is_string($key)) {
            $class_path = (is_string($class)) ? $class : get_class($class);

            $key = explode('\\', $class_path);
            $key = end($key);
        }

        return Helper::snakeCase($key);
    }

    /**
     * Get the type of class the extension implements
     *
     * @param string|object $class
     *
     * @return string 'basic' or 'dynamic'
     */
    protected function getType($class)
    {
        if (is_a($class, $this->basic_interface, is_string($class))) {
            return 'basic';
        }

        return 'dynamic';
    }
}
<?php

namespace League\CLImate\TerminalObject\Router;

use League\CLImate\Decorator\Parser\ParserImporter;
use League\CLImate\Settings\Manager;
use League\CLImate\Settings\SettingsImporter;
use League\CLImate\Util\OutputImporter;
use League\CLImate\Util\UtilImporter;

class Router
{
    use ParserImporter, SettingsImporter, OutputImporter, UtilImporter;

    /**
     * An instance of the Settings Manager class
     *
     * @var \League\CLImate\Settings\Manager $settings;
     */
    protected $settings;

    /**
     * An instance of the Dynamic Router class
     *
     * @var \League\CLImate\TerminalObject\Router\DynamicRouter $dynamic;
     */
    protected $dynamic;

    /**
     * An instance of the Basic Router class
     *
     * @var \League\CLImate\TerminalObject\Router\BasicRouter $basic;
     */
    protected $basic;

    public function __construct(DynamicRouter $dynamic = null, BasicRouter $basic = null)
    {
        $this->dynamic = $dynamic ?: new DynamicRouter();
        $this->basic   = $basic ?: new BasicRouter();
    }

    /**
     * Register a custom class with the router
     *
     * @param string $key
     * @param string $class
     */
    public function addExtension($key, $class)
    {
        $extension = new ExtensionCollection($key, $class);

        foreach ($extension->collection() as $obj_type => $collection) {
            foreach ($collection as $obj_key => $obj_class) {
                $this->{$obj_type}->addExtension($obj_key, $obj_class);
            }
        }
    }

    /**
     * Check if the name matches an existing terminal object
     *
     * @param string $name
     *
     * @return boolean
     */
    public function exists($name)
    {
        return ($this->basic->exists($name) || $this->dynamic->exists($name));
    }

    /**
     * Execute a terminal object using given arguments
     *
     * @param string $name
     * @param mixed  $arguments
     *
     * @return null|\League\CLImate\TerminalObject\Basic\BasicTerminalObjectInterface
     */
    public function execute($name, $arguments)
    {
        $router = $this->getRouter($name);

        $router->output($this->output);

        $obj = $this->getObject($router, $name, $arguments);

        $obj->parser($this->parser);
        $obj->util($this->util);

        // If the object needs any settings, import them
        foreach ($obj->settings() as $obj_setting) {
            $setting = $this->settings->get($obj_setting);

            if ($setting) {
                $obj->importSetting($setting);
            }
        }

        return $router->execute($obj);
    }

    /**
     * Get the object whether it's a string or already instantiated
     *
     * @param \League\CLImate\TerminalObject\Router\RouterInterface $router
     * @param string $name
     * @param array $arguments
     *
     * @return \League\CLImate\TerminalObject\Dynamic\DynamicTerminalObjectInterface|\League\CLImate\TerminalObject\Basic\BasicTerminalObjectInterface
     */
    protected function getObject($router, $name, $arguments)
    {
        $obj = $router->path($name);

        if (is_string($obj)) {
            $obj = (new \ReflectionClass($obj))->newInstanceArgs($arguments);
        }

        if (method_exists($obj, 'arguments')) {
            call_user_func_array([$obj, 'arguments'], $arguments);
        }

        return $obj;
    }

    /**
     * Determine which type of router we are using and return it
     *
     * @param string $name
     *
     * @return \League\CLImate\TerminalObject\Router\RouterInterface|null
     */
    protected function getRouter($name)
    {
        if ($this->basic->exists($name)) {
            return $this->basic;
        }

        if ($this->dynamic->exists($name)) {
            return $this->dynamic;
        }
    }

    /**
     * Set the settings property
     *
     * @param  \League\CLImate\Settings\Manager $settings
     *
     * @return Router
     */
    public function settings(Manager $settings)
    {
        $this->settings = $settings;

        return $this;
    }
}
<?php

namespace League\CLImate\TerminalObject\Router;

interface RouterInterface
{
    /**
     * @param $class
     * @return string
     */
    public function path($class);

    /**
     * @param $class
     * @return boolean
     */
    public function exists($class);

    /**
     * @param $obj
     * @return null|\League\CLImate\TerminalObject\Dynamic\DynamicTerminalObject
     */
    public function execute($obj);

    /**
     * @return string
     */
    public function pathPrefix();
}
<?php

namespace League\CLImate\Util;

class Cursor
{
    /**
     * Move the cursor up in the terminal x number of lines.
     *
     * @param int $lines
     *
     * @return string
     */
    public function up($lines = 1)
    {
        return "\e[{$lines}A";
    }

    /**
     * Move the cursor down in the terminal x number of lines.
     *
     * @param int $lines
     *
     * @return string
     */
    public function down($lines = 1)
    {
        return "\e[{$lines}B";
    }

    /**
     * Move the cursor right in the terminal x number of columns.
     *
     * @param int $cols
     *
     * @return string
     */
    public function right($columns = 1)
    {
        return "\e[{$columns}C";
    }

    /**
     * Move the cursor left in the terminal x number of columns.
     *
     * @param int $cols
     *
     * @return string
     */
    public function left($cols = 1)
    {
        return "\e[{$cols}D";
    }

    /**
     * Move cursor to the beginning of the current line.
     *
     * @return string
     */
    public function startOfCurrentLine()
    {
        return "\r";
    }

    /**
     * Delete the current line to the end.
     *
     * @return string
     */
    public function deleteCurrentLine()
    {
        return "\e[K";
    }

    /**
     * Get the style for hiding the cursor
     *
     * @return string
     */
    public function hide()
    {
        return "\e[?25l";
    }

    /**
     * Get the style for returning the cursor to its default
     *
     * @return string
     */
    public function defaultStyle()
    {
        return "\e[?25h";
    }
}
<?php

namespace League\CLImate\Util;

class Helper
{
    /**
     * @param string|array $var
     *
     * @return array
     */
    public static function toArray($var)
    {
        if (!is_array($var)) {
            return [$var];
        }

        return $var;
    }

    /**
     * Flatten a multi-dimensional array
     *
     * @param array $arr
     *
     * @return array
     */
    public static function flatten(array $arr)
    {
        $flattened = [];

        array_walk_recursive($arr, function ($a) use (&$flattened) {
            $flattened[] = $a;
        });

        return $flattened;
    }

    /**
     * Convert a string to snake case
     *
     * @param string $str
     *
     * @return string
     */
    public static function snakeCase($str)
    {
        return strtolower(preg_replace('/(.)([A-Z])/', '$1_$2', $str));
    }
}
<?php

namespace League\CLImate\Util;

use League\CLImate\Exceptions\InvalidArgumentException;
use League\CLImate\Exceptions\UnexpectedValueException;
use League\CLImate\Util\Writer\WriterInterface;

class Output
{
    /**
     * The content to be output
     *
     * @var string $content
     */
    protected $content;

    /**
     * Whether or not to add a new line after the output
     *
     * @var boolean $new_line
     */
    protected $new_line = true;

    /**
     * The array of available writers
     *
     * @var array[] $writers
     */
    protected $writers = [];

    /**
     * Default writers when one isn't specifed
     *
     * @var WriterInterface[] $default
     */
    protected $default = [];

    /**
     * Writers to be used just once
     *
     * @var null|array $once
     */
    protected $once;

    protected $persist = false;

    public function __construct()
    {
        $this->add('out', new Writer\StdOut);
        $this->add('error', new Writer\StdErr);
        $this->add('buffer', new Writer\Buffer);

        $this->defaultTo('out');
    }

    /**
     * Dictate that a new line should not be added after the output
     */
    public function sameLine()
    {
        $this->new_line = false;

        return $this;
    }

    /**
     * Add a writer to the available writers
     *
     * @param string $key
     * @param WriterInterface|array $writer
     *
     * @return \League\CLImate\Util\Output
     */
    public function add($key, $writer)
    {
        $this->writers[$key] = $this->resolve(Helper::toArray($writer));

        return $this;
    }

    /**
     * Set the default writer
     *
     * @param string|array $keys
     */
    public function defaultTo($keys)
    {
        $this->default = $this->getWriters($keys);
    }

    /**
     * Add a default writer
     *
     * @param string|array $keys
     */
    public function addDefault($keys)
    {
        $this->default = array_merge($this->default, $this->getWriters($keys));
    }

    /**
     * Register a writer to be used just once
     *
     * @param string|array $keys
     *
     * @return \League\CLImate\Util\Output
     */
    public function once($keys)
    {
        $this->once = $this->getWriters($keys);

        return $this;
    }

    /**
     * Persist or un-persist one time writers (for multi-line output)
     *
     * @param bool $persist
     *
     * @return \League\CLImate\Util\Output
     */
    public function persist($persist = true)
    {
        $this->persist = (bool) $persist;

        if (!$this->persist) {
            $this->resetOneTimers();
        }

        return $this;
    }

    /**
     * Get a specific writer
     *
     * @param string $writer
     *
     * @return WriterInterface|array
     * @throws UnexpectedValueException if writer key doesn't exist
     */
    public function get($writer)
    {
        if (!array_key_exists($writer, $this->writers)) {
            throw new UnexpectedValueException('Unknown writer [' . $writer . ']');
        }

        if (count($this->writers[$writer]) == 1) {
            return reset($this->writers[$writer]);
        }

        return $this->writers[$writer];
    }

    /**
     * Get the currently available writers
     *
     * @return array
     */
    public function getAvailable()
    {
        $writers = [];

        foreach ($this->writers as $key => $writer) {
            $writers[$key] = $this->getReadable($writer);
        }

        return $writers;
    }

    /**
     * Write the content using the provided writer
     *
     * @param  string $content
     */
    public function write($content)
    {
        if ($this->new_line) {
            $content .= PHP_EOL;
        }

        foreach ($this->getCurrentWriters() as $writer) {
            $writer->write($content);
        }

        $this->resetOneTimers();
    }

    /**
     * Resolve the writer(s) down to an array of WriterInterface classes
     *
     * @param WriterInterface|array|string $writer
     *
     * @return array
     */
    protected function resolve($writer)
    {
        $resolver = 'resolve' . ucwords(gettype($writer)) . 'Writer';

        if (method_exists($this, $resolver) && $resolved = $this->{$resolver}($writer)) {
            return $resolved;
        }

        $this->handleUnknownWriter($writer);
    }

    /**
     * @param array $writer
     *
     * @return array
     */
    protected function resolveArrayWriter($writer)
    {
        return Helper::flatten(array_map([$this, 'resolve'], $writer));
    }

    /**
     * @param object $writer
     *
     * @return WriterInterface|false
     */
    protected function resolveObjectWriter($writer)
    {
        if ($writer instanceof WriterInterface) {
            return $writer;
        }

        return false;
    }

    /**
     * @param string $writer
     *
     * @return array|false
     */
    protected function resolveStringWriter($writer)
    {
        if (is_string($writer) && array_key_exists($writer, $this->writers)) {
            return $this->writers[$writer];
        }

        return false;
    }

    /**
     * @param mixed $writer
     * @throws InvalidArgumentException For non-valid writer
     */
    protected function handleUnknownWriter($writer)
    {
        // If we've gotten this far and don't know what it is,
        // let's at least try and give a helpful error message
        if (is_object($writer)) {
            throw new InvalidArgumentException('Class [' . get_class($writer) . '] must implement '
                                    . 'League\CLImate\Util\Writer\WriterInterface.');
        }

        // No idea, just tell them we can't resolve it
        throw new InvalidArgumentException('Unable to resolve writer [' . $writer . ']');
    }

    /**
     * Get the readable version of the writer(s)
     *
     * @param array $writer
     *
     * @return string|array
     */
    protected function getReadable(array $writer)
    {
        $classes = array_map('get_class', $writer);

        if (count($classes) == 1) {
            return reset($classes);
        }

        return $classes;
    }

    /**
     * Get the writers based on their keys
     *
     * @param string|array $keys
     *
     * @return array
     */
    protected function getWriters($keys)
    {
        $writers = array_flip(Helper::toArray($keys));

        return Helper::flatten(array_intersect_key($this->writers, $writers));
    }

    /**
     * @return WriterInterface[]
     */
    protected function getCurrentWriters()
    {
        return $this->once ?: $this->default;
    }

    /**
     * Reset anything only used for the current content being written
     */
    protected function resetOneTimers()
    {
        // Reset new line flag for next time
        $this->new_line = true;

        if (!$this->persist) {
            // Reset once since we only want to use it... once.
            $this->once = null;
        }
    }
}
<?php

namespace League\CLImate\Util;

trait OutputImporter
{
    /**
     * An instance of the OutputFactory
     *
     * @var \League\CLImate\Util\Output $output
     */
    protected $output;

    /**
     * Sets the $output property
     *
     * @param Output $output
     */
    public function output(Output $output)
    {
        $this->output = $output;
    }
}
<?php

namespace League\CLImate\Util\Reader;

interface ReaderInterface
{
    /**
     * @return string
     */
    public function line();

    /**
     * @return string
     */
    public function multiLine();
}
<?php

namespace League\CLImate\Util\Reader;

use League\CLImate\Exceptions\RuntimeException;
use Seld\CliPrompt\CliPrompt;

class Stdin implements ReaderInterface
{
    protected $stdIn = false;

    /**
     * Read the line typed in by the user
     *
     * @return string
     */
    public function line()
    {
        return trim(fgets($this->getStdIn(), 1024));
    }

    /**
     * Read from STDIN until EOF (^D) is reached
     *
     * @return string
     */
    public function multiLine()
    {
        return trim(stream_get_contents($this->getStdIn()));
    }

    /**
     * Read one character
     *
     * @param int $count
     *
     * @return string
     */
    public function char($count = 1)
    {
        return fread($this->getStdIn(), $count);
    }

    /**
     * Read the line, but hide what the user is typing
     *
     * @return string
     */
    public function hidden()
    {
        return CliPrompt::hiddenPrompt();
    }

    /**
     * Return a valid STDIN, even if it previously EOF'ed
     *
     * Lazily re-opens STDIN after hitting an EOF
     *
     * @return resource
     * @throws RuntimeException
     */
    protected function getStdIn()
    {
        if ($this->stdIn && !feof($this->stdIn)) {
            return $this->stdIn;
        }

        try {
            $this->setStdIn();
        } catch (\Error $e) {
            throw new RuntimeException('Unable to read from STDIN', 0, $e);
        }

        return $this->stdIn;
    }

    /**
     * Attempt to set the stdin property
     *
     * @return void
     * @throws RuntimeException
     */
    protected function setStdIn()
    {
        if ($this->stdIn !== false) {
            fclose($this->stdIn);
        }

        $this->stdIn = fopen('php://stdin', 'r');

        if (!$this->stdIn) {
            throw new RuntimeException('Unable to read from STDIN');
        }
    }
}
<?php

namespace League\CLImate\Util\System;

use function getenv;

class Linux extends System
{
    /**
     * Get the width of the terminal
     *
     * @return integer|null
     */
    public function width()
    {
        return $this->getDimension($this->tput("cols"));
    }

    /**
     * Get the height of the terminal
     *
     * @return integer|null
     */
    public function height()
    {
        return $this->getDimension($this->tput("lines"));
    }

    /**
     * Get a value from the tput command.
     *
     * @param string $type
     *
     * @return array|null|string
     */
    private function tput($type)
    {
        return $this->exec("tput {$type} 2>/dev/null");
    }

    /**
     * Determine if system has access to bash commands
     *
     * @return bool
     */
    public function canAccessBash()
    {
        return (rtrim($this->exec("/usr/bin/env bash -c 'echo OK'")) === 'OK');
    }

    /**
     * Display a hidden response prompt and return the response
     *
     * @param string $prompt
     *
     * @return string
     */
    public function hiddenResponsePrompt($prompt)
    {
        $bash_command = 'read -s -p "' . $prompt . '" response && echo $response';

        return rtrim($this->exec("/usr/bin/env bash -c '{$bash_command}'"));
    }

    /**
     * Determine if dimension is numeric and return it
     *
     * @param integer|string|null $dimension
     *
     * @return integer|null
     */
    protected function getDimension($dimension)
    {
        return (is_numeric($dimension)) ? $dimension : null;
    }

    /**
     * Check if the stream supports ansi escape characters.
     *
     * Based on https://github.com/symfony/symfony/blob/master/src/Symfony/Component/Console/Output/StreamOutput.php
     *
     * @return bool
     */
    protected function systemHasAnsiSupport()
    {
        if ('Hyper' === getenv('TERM_PROGRAM')) {
            return true;
        }

        # If we're running in a web context then we can't use stdout
        if (!defined('STDOUT')) {
            return false;
        }

        $stream = \STDOUT;

        if (function_exists('stream_isatty')) {
            return @stream_isatty($stream);
        }

        if (function_exists('posix_isatty')) {
            return @posix_isatty($stream);
        }

        $stat = @fstat($stream);
        // Check if formatted mode is S_IFCHR
        return $stat ? 0020000 === ($stat['mode'] & 0170000) : false;
    }
}
<?php

namespace League\CLImate\Util\System;

abstract class System
{
    protected $force_ansi;

    /**
     * Force ansi on or off
     *
     * @param bool $force
     */
    public function forceAnsi($force = true)
    {
        $this->force_ansi = $force;
    }

    /**
     * @return integer|null
     */
    abstract public function width();

    /**
     * @return integer|null
     */
    abstract public function height();

    /**
     * Check if the stream supports ansi escape characters.
     *
     * @return bool
     */
    abstract protected function systemHasAnsiSupport();

    /**
     * Check if we are forcing ansi, fallback to system support
     *
     * @return bool
     */
    public function hasAnsiSupport()
    {
        if (is_bool($this->force_ansi)) {
            return $this->force_ansi;
        }

        return $this->systemHasAnsiSupport();
    }

    /**
     * Wraps exec function, allowing the dimension methods to decouple
     *
     * @param string $command
     * @param boolean $full
     *
     * @return string|array
     */
    public function exec($command, $full = false)
    {
        if ($full) {
            exec($command, $output);

            return $output;
        }

        return exec($command);
    }
}
<?php

namespace League\CLImate\Util\System;

class SystemFactory
{
    /**
     * @var \League\CLImate\Util\System\System $instance
     */

    protected static $instance;

    /**
     * Get an instance of the appropriate System class
     *
     * @return \League\CLImate\Util\System\System
     */

    public static function getInstance()
    {
        if (static::$instance) {
            return static::$instance;
        }

        static::$instance = self::getSystem();

        return static::$instance;
    }

    /**
     * Set the $instance property to the appropriate system
     *
     * @return \League\CLImate\Util\System\System
     */

    protected static function getSystem()
    {
        if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') {
            return new Windows();
        }

        return new Linux();
    }
}
<?php

namespace League\CLImate\Util\System;

class Windows extends System
{
    /**
     * Get the width of the terminal
     *
     * @return integer|null
     */
    public function width()
    {
        return $this->getDimension('width');
    }

    /**
     * Get the height of the terminal
     *
     * @return integer|null
     */
    public function height()
    {
        return $this->getDimension('height');
    }

    /**
     * Get specified terminal dimension
     *
     * @param string $key
     *
     * @return integer|null
     */

    protected function getDimension($key)
    {
        $index      = array_search($key, ['height', 'width']);
        $dimensions = $this->getDimensions();

        return (!empty($dimensions[$index])) ? $dimensions[$index] : null;
    }

    /**
     * Get information about the dimensions of the terminal
     *
     * @return array
     */
    protected function getDimensions()
    {
        $output = $this->exec('mode CON', true);

        if (!is_array($output)) {
            return [];
        }

        $output = implode("\n", $output);

        preg_match_all('/.*:\s*(\d+)/', $output, $matches);

        return (!empty($matches[1])) ? $matches[1] : [];
    }

    /**
     * Check if the stream supports ansi escape characters.
     *
     * Based on https://github.com/symfony/symfony/blob/master/src/Symfony/Component/Console/Output/StreamOutput.php
     *
     * @return bool
     */
    protected function systemHasAnsiSupport()
    {
        return (function_exists('sapi_windows_vt100_support') && @sapi_windows_vt100_support(STDOUT))
            || false !== getenv('ANSICON')
            || 'ON' === getenv('ConEmuANSI')
            || 'Hyper' === getenv('TERM_PROGRAM') 
            || 'xterm' === getenv('TERM');
    }
}
<?php

namespace League\CLImate\Util;

use League\CLImate\Util\System\SystemFactory;
use League\CLImate\Util\System\System;

class UtilFactory
{
    /**
     * A instance of the appropriate System class
     *
     * @var \League\CLImate\Util\System\System
     */

    public $system;

    /**
     * A instance of the Cursor class
     *
     * @var \League\CLImate\Util\Cursor
     */
    public $cursor;

    public function __construct(System $system = null, Cursor $cursor = null)
    {
        $this->system = $system ?: SystemFactory::getInstance();
        $this->cursor = $cursor ?: new Cursor();
    }

    /**
     * Get the width of the terminal
     *
     * @return integer
     */

    public function width()
    {
        return (int) $this->getDimension($this->system->width(), 80);
    }

    /**
     * Get the height of the terminal
     *
     * @return integer
     */

    public function height()
    {
        return (int) $this->getDimension($this->system->height(), 25);
    }

    /**
     * Determine if the value is numeric, fallback to a default if not
     *
     * @param integer|null $dimension
     * @param integer $default
     *
     * @return integer
     */

    protected function getDimension($dimension, $default)
    {
        return (is_numeric($dimension)) ? $dimension : $default;
    }
}
<?php

namespace League\CLImate\Util;

trait UtilImporter
{
    /**
     * An instance of the UtilFactory
     *
     * @var \League\CLImate\Util\UtilFactory $util
     */
    protected $util;

    /**
     * Sets the $util property
     *
     * @param UtilFactory $util
     */
    public function util(UtilFactory $util)
    {
        $this->util = $util;
    }
}
<?php

namespace League\CLImate\Util\Writer;

class Buffer implements WriterInterface
{
    /**
     * @var string $contents The buffered data.
     */
    protected $contents = "";

    /**
     * Write the content to the buffer.
     *
     * @param string $content
     *
     * @return void
     */
    public function write($content)
    {
        $this->contents .= $content;
    }


    /**
     * Get the buffered data.
     *
     * @return string
     */
    public function get()
    {
        return $this->contents;
    }

    /**
     * Clean the buffer and throw away any data.
     *
     * @return void
     */
    public function clean()
    {
        $this->contents = "";
    }
}
<?php

namespace League\CLImate\Util\Writer;

use League\CLImate\Exceptions\RuntimeException;

class File implements WriterInterface
{
    /** @var resource|string */
    protected $resource;

    /** @var boolean $close_locally */
    protected $close_locally = false;

    /** @var boolean $use_locking */
    protected $use_locking = false;

    /** @var boolean $gzip_file */
    protected $gzip_file = false;

    /**
     * @param string|resource $resource
     * @param bool $use_locking
     * @param bool $gzip_file
     */
    public function __construct($resource, $use_locking = false, $gzip_file = false)
    {
        $this->resource    = $resource;
        $this->use_locking = $use_locking;
        $this->gzip_file   = $gzip_file;
    }

    public function lock()
    {
        $this->use_locking = true;

        return $this;
    }

    public function gzipped()
    {
        $this->gzip_file = true;

        return $this;
    }

    /**
     * Write the content to the stream
     *
     * @param  string $content
     */
    public function write($content)
    {
        $resource = $this->getResource();

        if ($this->use_locking) {
            flock($resource, LOCK_EX);
        }

        gzwrite($resource, $content);

        if ($this->use_locking) {
            flock($resource, LOCK_UN);
        }
    }

    protected function getResource()
    {
        if (is_resource($this->resource)) {
            return $this->resource;
        }

        $this->close_locally = true;

        if (!is_writable($this->resource)) {
            throw new RuntimeException("The resource [{$this->resource}] is not writable");
        }

        if (!($this->resource = $this->openResource())) {
            throw new RuntimeException("The resource could not be opened");
        }

        return $this->resource;
    }

    protected function openResource()
    {
        if ($this->gzip_file) {
            return gzopen($this->resource, 'a');
        }

        return fopen($this->resource, 'a');
    }

    public function _destruct()
    {
        if ($this->close_locally) {
            gzclose($this->getResource());
        }
    }
}
<?php

namespace League\CLImate\Util\Writer;

class StdErr implements WriterInterface
{
    /**
     * Write the content to the stream
     *
     * @param  string $content
     */
    public function write($content)
    {
        fwrite(\STDERR, $content);
    }
}
<?php

namespace League\CLImate\Util\Writer;

class StdOut implements WriterInterface
{
    /**
     * Write the content to the stream
     *
     * @param  string $content
     */
    public function write($content)
    {
        fwrite(\STDOUT, $content);
    }
}
<?php

namespace League\CLImate\Util\Writer;

interface WriterInterface
{
    /**
     * @param  string $content
     *
     * @return void
     */
    public function write($content);
}
<?php

/*
 * This file is part of the Symfony package.
 *
 * (c) Fabien Potencier <fabien@symfony.com>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

namespace Symfony\Polyfill\Ctype;

/**
 * Ctype implementation through regex.
 *
 * @internal
 *
 * @author Gert de Pagter <BackEndTea@gmail.com>
 */
final class Ctype
{
    /**
     * Returns TRUE if every character in text is either a letter or a digit, FALSE otherwise.
     *
     * @see https://php.net/ctype-alnum
     *
     * @param mixed $text
     *
     * @return bool
     */
    public static function ctype_alnum($text)
    {
        $text = self::convert_int_to_char_for_ctype($text, __FUNCTION__);

        return \is_string($text) && '' !== $text && !preg_match('/[^A-Za-z0-9]/', $text);
    }

    /**
     * Returns TRUE if every character in text is a letter, FALSE otherwise.
     *
     * @see https://php.net/ctype-alpha
     *
     * @param mixed $text
     *
     * @return bool
     */
    public static function ctype_alpha($text)
    {
        $text = self::convert_int_to_char_for_ctype($text, __FUNCTION__);

        return \is_string($text) && '' !== $text && !preg_match('/[^A-Za-z]/', $text);
    }

    /**
     * Returns TRUE if every character in text is a control character from the current locale, FALSE otherwise.
     *
     * @see https://php.net/ctype-cntrl
     *
     * @param mixed $text
     *
     * @return bool
     */
    public static function ctype_cntrl($text)
    {
        $text = self::convert_int_to_char_for_ctype($text, __FUNCTION__);

        return \is_string($text) && '' !== $text && !preg_match('/[^\x00-\x1f\x7f]/', $text);
    }

    /**
     * Returns TRUE if every character in the string text is a decimal digit, FALSE otherwise.
     *
     * @see https://php.net/ctype-digit
     *
     * @param mixed $text
     *
     * @return bool
     */
    public static function ctype_digit($text)
    {
        $text = self::convert_int_to_char_for_ctype($text, __FUNCTION__);

        return \is_string($text) && '' !== $text && !preg_match('/[^0-9]/', $text);
    }

    /**
     * Returns TRUE if every character in text is printable and actually creates visible output (no white space), FALSE otherwise.
     *
     * @see https://php.net/ctype-graph
     *
     * @param mixed $text
     *
     * @return bool
     */
    public static function ctype_graph($text)
    {
        $text = self::convert_int_to_char_for_ctype($text, __FUNCTION__);

        return \is_string($text) && '' !== $text && !preg_match('/[^!-~]/', $text);
    }

    /**
     * Returns TRUE if every character in text is a lowercase letter.
     *
     * @see https://php.net/ctype-lower
     *
     * @param mixed $text
     *
     * @return bool
     */
    public static function ctype_lower($text)
    {
        $text = self::convert_int_to_char_for_ctype($text, __FUNCTION__);

        return \is_string($text) && '' !== $text && !preg_match('/[^a-z]/', $text);
    }

    /**
     * Returns TRUE if every character in text will actually create output (including blanks). Returns FALSE if text contains control characters or characters that do not have any output or control function at all.
     *
     * @see https://php.net/ctype-print
     *
     * @param mixed $text
     *
     * @return bool
     */
    public static function ctype_print($text)
    {
        $text = self::convert_int_to_char_for_ctype($text, __FUNCTION__);

        return \is_string($text) && '' !== $text && !preg_match('/[^ -~]/', $text);
    }

    /**
     * Returns TRUE if every character in text is printable, but neither letter, digit or blank, FALSE otherwise.
     *
     * @see https://php.net/ctype-punct
     *
     * @param mixed $text
     *
     * @return bool
     */
    public static function ctype_punct($text)
    {
        $text = self::convert_int_to_char_for_ctype($text, __FUNCTION__);

        return \is_string($text) && '' !== $text && !preg_match('/[^!-\/\:-@\[-`\{-~]/', $text);
    }

    /**
     * Returns TRUE if every character in text creates some sort of white space, FALSE otherwise. Besides the blank character this also includes tab, vertical tab, line feed, carriage return and form feed characters.
     *
     * @see https://php.net/ctype-space
     *
     * @param mixed $text
     *
     * @return bool
     */
    public static function ctype_space($text)
    {
        $text = self::convert_int_to_char_for_ctype($text, __FUNCTION__);

        return \is_string($text) && '' !== $text && !preg_match('/[^\s]/', $text);
    }

    /**
     * Returns TRUE if every character in text is an uppercase letter.
     *
     * @see https://php.net/ctype-upper
     *
     * @param mixed $text
     *
     * @return bool
     */
    public static function ctype_upper($text)
    {
        $text = self::convert_int_to_char_for_ctype($text, __FUNCTION__);

        return \is_string($text) && '' !== $text && !preg_match('/[^A-Z]/', $text);
    }

    /**
     * Returns TRUE if every character in text is a hexadecimal 'digit', that is a decimal digit or a character from [A-Fa-f] , FALSE otherwise.
     *
     * @see https://php.net/ctype-xdigit
     *
     * @param mixed $text
     *
     * @return bool
     */
    public static function ctype_xdigit($text)
    {
        $text = self::convert_int_to_char_for_ctype($text, __FUNCTION__);

        return \is_string($text) && '' !== $text && !preg_match('/[^A-Fa-f0-9]/', $text);
    }

    /**
     * Converts integers to their char versions according to normal ctype behaviour, if needed.
     *
     * If an integer between -128 and 255 inclusive is provided,
     * it is interpreted as the ASCII value of a single character
     * (negative values have 256 added in order to allow characters in the Extended ASCII range).
     * Any other integer is interpreted as a string containing the decimal digits of the integer.
     *
     * @param mixed  $int
     * @param string $function
     *
     * @return mixed
     */
    private static function convert_int_to_char_for_ctype($int, $function)
    {
        if (!\is_int($int)) {
            return $int;
        }

        if ($int < -128 || $int > 255) {
            return (string) $int;
        }

        if (\PHP_VERSION_ID >= 80100) {
            @trigger_error($function.'(): Argument of type int will be interpreted as string in the future', \E_USER_DEPRECATED);
        }

        if ($int < 0) {
            $int += 256;
        }

        return \chr($int);
    }
}
Copyright (c) 2018-present Fabien Potencier

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is furnished
to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
Symfony Polyfill / Ctype
========================

This component provides `ctype_*` functions to users who run php versions without the ctype extension.

More information can be found in the
[main Polyfill README](https://github.com/symfony/polyfill/blob/main/README.md).

License
=======

This library is released under the [MIT license](LICENSE).
<?php

/*
 * This file is part of the Symfony package.
 *
 * (c) Fabien Potencier <fabien@symfony.com>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

use Symfony\Polyfill\Ctype as p;

if (\PHP_VERSION_ID >= 80000) {
    return require __DIR__.'/bootstrap80.php';
}

if (!function_exists('ctype_alnum')) {
    function ctype_alnum($text) { return p\Ctype::ctype_alnum($text); }
}
if (!function_exists('ctype_alpha')) {
    function ctype_alpha($text) { return p\Ctype::ctype_alpha($text); }
}
if (!function_exists('ctype_cntrl')) {
    function ctype_cntrl($text) { return p\Ctype::ctype_cntrl($text); }
}
if (!function_exists('ctype_digit')) {
    function ctype_digit($text) { return p\Ctype::ctype_digit($text); }
}
if (!function_exists('ctype_graph')) {
    function ctype_graph($text) { return p\Ctype::ctype_graph($text); }
}
if (!function_exists('ctype_lower')) {
    function ctype_lower($text) { return p\Ctype::ctype_lower($text); }
}
if (!function_exists('ctype_print')) {
    function ctype_print($text) { return p\Ctype::ctype_print($text); }
}
if (!function_exists('ctype_punct')) {
    function ctype_punct($text) { return p\Ctype::ctype_punct($text); }
}
if (!function_exists('ctype_space')) {
    function ctype_space($text) { return p\Ctype::ctype_space($text); }
}
if (!function_exists('ctype_upper')) {
    function ctype_upper($text) { return p\Ctype::ctype_upper($text); }
}
if (!function_exists('ctype_xdigit')) {
    function ctype_xdigit($text) { return p\Ctype::ctype_xdigit($text); }
}
<?php

/*
 * This file is part of the Symfony package.
 *
 * (c) Fabien Potencier <fabien@symfony.com>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

use Symfony\Polyfill\Ctype as p;

if (!function_exists('ctype_alnum')) {
    function ctype_alnum(mixed $text): bool { return p\Ctype::ctype_alnum($text); }
}
if (!function_exists('ctype_alpha')) {
    function ctype_alpha(mixed $text): bool { return p\Ctype::ctype_alpha($text); }
}
if (!function_exists('ctype_cntrl')) {
    function ctype_cntrl(mixed $text): bool { return p\Ctype::ctype_cntrl($text); }
}
if (!function_exists('ctype_digit')) {
    function ctype_digit(mixed $text): bool { return p\Ctype::ctype_digit($text); }
}
if (!function_exists('ctype_graph')) {
    function ctype_graph(mixed $text): bool { return p\Ctype::ctype_graph($text); }
}
if (!function_exists('ctype_lower')) {
    function ctype_lower(mixed $text): bool { return p\Ctype::ctype_lower($text); }
}
if (!function_exists('ctype_print')) {
    function ctype_print(mixed $text): bool { return p\Ctype::ctype_print($text); }
}
if (!function_exists('ctype_punct')) {
    function ctype_punct(mixed $text): bool { return p\Ctype::ctype_punct($text); }
}
if (!function_exists('ctype_space')) {
    function ctype_space(mixed $text): bool { return p\Ctype::ctype_space($text); }
}
if (!function_exists('ctype_upper')) {
    function ctype_upper(mixed $text): bool { return p\Ctype::ctype_upper($text); }
}
if (!function_exists('ctype_xdigit')) {
    function ctype_xdigit(mixed $text): bool { return p\Ctype::ctype_xdigit($text); }
}
{
    "name": "symfony/polyfill-ctype",
    "type": "library",
    "description": "Symfony polyfill for ctype functions",
    "keywords": ["polyfill", "compatibility", "portable", "ctype"],
    "homepage": "https://symfony.com",
    "license": "MIT",
    "authors": [
        {
            "name": "Gert de Pagter",
            "email": "BackEndTea@gmail.com"
        },
        {
            "name": "Symfony Community",
            "homepage": "https://symfony.com/contributors"
        }
    ],
    "require": {
        "php": ">=7.2"
    },
    "provide": {
        "ext-ctype": "*"
    },
    "autoload": {
        "psr-4": { "Symfony\\Polyfill\\Ctype\\": "" },
        "files": [ "bootstrap.php" ]
    },
    "suggest": {
        "ext-ctype": "For best performance"
    },
    "minimum-stability": "dev",
    "extra": {
        "thanks": {
            "name": "symfony/polyfill",
            "url": "https://github.com/symfony/polyfill"
        }
    }
}
vendor/
composer.lock
phpunit.xml
CHANGELOG
=========

4.2.0
-----

 * added support for multiple files or directories in `LintCommand`

4.0.0
-----

 * The behavior of the non-specific tag `!` is changed and now forces
   non-evaluating your values.
 * complex mappings will throw a `ParseException`
 * support for the comma as a group separator for floats has been dropped, use
   the underscore instead
 * support for the `!!php/object` tag has been dropped, use the `!php/object`
   tag instead
 * duplicate mapping keys throw a `ParseException`
 * non-string mapping keys throw a `ParseException`, use the `Yaml::PARSE_KEYS_AS_STRINGS`
   flag to cast them to strings
 * `%` at the beginning of an unquoted string throw a `ParseException`
 * mappings with a colon (`:`) that is not followed by a whitespace throw a
   `ParseException`
 * the `Dumper::setIndentation()` method has been removed
 * being able to pass boolean options to the `Yaml::parse()`, `Yaml::dump()`,
   `Parser::parse()`, and `Dumper::dump()` methods to configure the behavior of
   the parser and dumper is no longer supported, pass bitmask flags instead
 * the constructor arguments of the `Parser` class have been removed
 * the `Inline` class is internal and no longer part of the BC promise
 * removed support for the `!str` tag, use the `!!str` tag instead
 * added support for tagged scalars.

   ```yml
   Yaml::parse('!foo bar', Yaml::PARSE_CUSTOM_TAGS);
   // returns TaggedValue('foo', 'bar');
   ```

3.4.0
-----

 * added support for parsing YAML files using the `Yaml::parseFile()` or `Parser::parseFile()` method

 * the `Dumper`, `Parser`, and `Yaml` classes are marked as final

 * Deprecated the `!php/object:` tag which will be replaced by the
   `!php/object` tag (without the colon) in 4.0.

 * Deprecated the `!php/const:` tag which will be replaced by the
   `!php/const` tag (without the colon) in 4.0.

 * Support for the `!str` tag is deprecated, use the `!!str` tag instead.

 * Deprecated using the non-specific tag `!` as its behavior will change in 4.0.
   It will force non-evaluating your values in 4.0. Use plain integers or `!!float` instead.

3.3.0
-----

 * Starting an unquoted string with a question mark followed by a space is
   deprecated and will throw a `ParseException` in Symfony 4.0.

 * Deprecated support for implicitly parsing non-string mapping keys as strings.
   Mapping keys that are no strings will lead to a `ParseException` in Symfony
   4.0. Use quotes to opt-in for keys to be parsed as strings.

   Before:

   ```php
   $yaml = <<<YAML
   null: null key
   true: boolean true
   2.0: float key
   YAML;

   Yaml::parse($yaml);
   ```

   After:

   ```php

   $yaml = <<<YAML
   "null": null key
   "true": boolean true
   "2.0": float key
   YAML;

   Yaml::parse($yaml);
   ```

 * Omitted mapping values will be parsed as `null`.

 * Omitting the key of a mapping is deprecated and will throw a `ParseException` in Symfony 4.0.

 * Added support for dumping empty PHP arrays as YAML sequences:

   ```php
   Yaml::dump([], 0, 0, Yaml::DUMP_EMPTY_ARRAY_AS_SEQUENCE);
   ```

3.2.0
-----

 * Mappings with a colon (`:`) that is not followed by a whitespace are deprecated
   when the mapping key is not quoted and will lead to a `ParseException` in
   Symfony 4.0 (e.g. `foo:bar` must be `foo: bar`).

 * Added support for parsing PHP constants:

   ```php
   Yaml::parse('!php/const:PHP_INT_MAX', Yaml::PARSE_CONSTANT);
   ```

 * Support for silently ignoring duplicate mapping keys in YAML has been
   deprecated and will lead to a `ParseException` in Symfony 4.0.

3.1.0
-----

 * Added support to dump `stdClass` and `ArrayAccess` objects as YAML mappings
   through the `Yaml::DUMP_OBJECT_AS_MAP` flag.

 * Strings that are not UTF-8 encoded will be dumped as base64 encoded binary
   data.

 * Added support for dumping multi line strings as literal blocks.

 * Added support for parsing base64 encoded binary data when they are tagged
   with the `!!binary` tag.

 * Added support for parsing timestamps as `\DateTime` objects:

   ```php
   Yaml::parse('2001-12-15 21:59:43.10 -5', Yaml::PARSE_DATETIME);
   ```

 * `\DateTime` and `\DateTimeImmutable` objects are dumped as YAML timestamps.

 * Deprecated usage of `%` at the beginning of an unquoted string.

 * Added support for customizing the YAML parser behavior through an optional bit field:

   ```php
   Yaml::parse('{ "foo": "bar", "fiz": "cat" }', Yaml::PARSE_EXCEPTION_ON_INVALID_TYPE | Yaml::PARSE_OBJECT | Yaml::PARSE_OBJECT_FOR_MAP);
   ```

 * Added support for customizing the dumped YAML string through an optional bit field:

   ```php
   Yaml::dump(['foo' => new A(), 'bar' => 1], 0, 0, Yaml::DUMP_EXCEPTION_ON_INVALID_TYPE | Yaml::DUMP_OBJECT);
   ```

3.0.0
-----

 * Yaml::parse() now throws an exception when a blackslash is not escaped
   in double-quoted strings

2.8.0
-----

 * Deprecated usage of a colon in an unquoted mapping value
 * Deprecated usage of @, \`, | and > at the beginning of an unquoted string
 * When surrounding strings with double-quotes, you must now escape `\` characters. Not
   escaping those characters (when surrounded by double-quotes) is deprecated.

   Before:

   ```yml
   class: "Foo\Var"
   ```

   After:

   ```yml
   class: "Foo\\Var"
   ```

2.1.0
-----

 * Yaml::parse() does not evaluate loaded files as PHP files by default
   anymore (call Yaml::enablePhpParsing() to get back the old behavior)
<?php

/*
 * This file is part of the Symfony package.
 *
 * (c) Fabien Potencier <fabien@symfony.com>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

namespace Symfony\Component\Yaml\Command;

use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Exception\InvalidArgumentException;
use Symfony\Component\Console\Exception\RuntimeException;
use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Component\Console\Style\SymfonyStyle;
use Symfony\Component\Yaml\Exception\ParseException;
use Symfony\Component\Yaml\Parser;
use Symfony\Component\Yaml\Yaml;

/**
 * Validates YAML files syntax and outputs encountered errors.
 *
 * @author Grégoire Pineau <lyrixx@lyrixx.info>
 * @author Robin Chalas <robin.chalas@gmail.com>
 */
class LintCommand extends Command
{
    protected static $defaultName = 'lint:yaml';

    private $parser;
    private $format;
    private $displayCorrectFiles;
    private $directoryIteratorProvider;
    private $isReadableProvider;

    public function __construct(string $name = null, callable $directoryIteratorProvider = null, callable $isReadableProvider = null)
    {
        parent::__construct($name);

        $this->directoryIteratorProvider = $directoryIteratorProvider;
        $this->isReadableProvider = $isReadableProvider;
    }

    /**
     * {@inheritdoc}
     */
    protected function configure()
    {
        $this
            ->setDescription('Lints a file and outputs encountered errors')
            ->addArgument('filename', InputArgument::IS_ARRAY, 'A file or a directory or STDIN')
            ->addOption('format', null, InputOption::VALUE_REQUIRED, 'The output format', 'txt')
            ->addOption('parse-tags', null, InputOption::VALUE_NONE, 'Parse custom tags')
            ->setHelp(<<<EOF
The <info>%command.name%</info> command lints a YAML file and outputs to STDOUT
the first encountered syntax error.

You can validates YAML contents passed from STDIN:

  <info>cat filename | php %command.full_name%</info>

You can also validate the syntax of a file:

  <info>php %command.full_name% filename</info>

Or of a whole directory:

  <info>php %command.full_name% dirname</info>
  <info>php %command.full_name% dirname --format=json</info>

EOF
            )
        ;
    }

    protected function execute(InputInterface $input, OutputInterface $output)
    {
        $io = new SymfonyStyle($input, $output);
        $filenames = (array) $input->getArgument('filename');
        $this->format = $input->getOption('format');
        $this->displayCorrectFiles = $output->isVerbose();
        $flags = $input->getOption('parse-tags') ? Yaml::PARSE_CUSTOM_TAGS : 0;

        if (0 === \count($filenames)) {
            if (!$stdin = $this->getStdin()) {
                throw new RuntimeException('Please provide a filename or pipe file content to STDIN.');
            }

            return $this->display($io, [$this->validate($stdin, $flags)]);
        }

        $filesInfo = [];
        foreach ($filenames as $filename) {
            if (!$this->isReadable($filename)) {
                throw new RuntimeException(sprintf('File or directory "%s" is not readable.', $filename));
            }

            foreach ($this->getFiles($filename) as $file) {
                $filesInfo[] = $this->validate(file_get_contents($file), $flags, $file);
            }
        }

        return $this->display($io, $filesInfo);
    }

    private function validate($content, $flags, $file = null)
    {
        $prevErrorHandler = set_error_handler(function ($level, $message, $file, $line) use (&$prevErrorHandler) {
            if (E_USER_DEPRECATED === $level) {
                throw new ParseException($message, $this->getParser()->getRealCurrentLineNb() + 1);
            }

            return $prevErrorHandler ? $prevErrorHandler($level, $message, $file, $line) : false;
        });

        try {
            $this->getParser()->parse($content, Yaml::PARSE_CONSTANT | $flags);
        } catch (ParseException $e) {
            return ['file' => $file, 'line' => $e->getParsedLine(), 'valid' => false, 'message' => $e->getMessage()];
        } finally {
            restore_error_handler();
        }

        return ['file' => $file, 'valid' => true];
    }

    private function display(SymfonyStyle $io, array $files)
    {
        switch ($this->format) {
            case 'txt':
                return $this->displayTxt($io, $files);
            case 'json':
                return $this->displayJson($io, $files);
            default:
                throw new InvalidArgumentException(sprintf('The format "%s" is not supported.', $this->format));
        }
    }

    private function displayTxt(SymfonyStyle $io, array $filesInfo)
    {
        $countFiles = \count($filesInfo);
        $erroredFiles = 0;

        foreach ($filesInfo as $info) {
            if ($info['valid'] && $this->displayCorrectFiles) {
                $io->comment('<info>OK</info>'.($info['file'] ? sprintf(' in %s', $info['file']) : ''));
            } elseif (!$info['valid']) {
                ++$erroredFiles;
                $io->text('<error> ERROR </error>'.($info['file'] ? sprintf(' in %s', $info['file']) : ''));
                $io->text(sprintf('<error> >> %s</error>', $info['message']));
            }
        }

        if (0 === $erroredFiles) {
            $io->success(sprintf('All %d YAML files contain valid syntax.', $countFiles));
        } else {
            $io->warning(sprintf('%d YAML files have valid syntax and %d contain errors.', $countFiles - $erroredFiles, $erroredFiles));
        }

        return min($erroredFiles, 1);
    }

    private function displayJson(SymfonyStyle $io, array $filesInfo)
    {
        $errors = 0;

        array_walk($filesInfo, function (&$v) use (&$errors) {
            $v['file'] = (string) $v['file'];
            if (!$v['valid']) {
                ++$errors;
            }
        });

        $io->writeln(json_encode($filesInfo, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES));

        return min($errors, 1);
    }

    private function getFiles($fileOrDirectory)
    {
        if (is_file($fileOrDirectory)) {
            yield new \SplFileInfo($fileOrDirectory);

            return;
        }

        foreach ($this->getDirectoryIterator($fileOrDirectory) as $file) {
            if (!\in_array($file->getExtension(), ['yml', 'yaml'])) {
                continue;
            }

            yield $file;
        }
    }

    private function getStdin()
    {
        if (0 !== ftell(STDIN)) {
            return;
        }

        $inputs = '';
        while (!feof(STDIN)) {
            $inputs .= fread(STDIN, 1024);
        }

        return $inputs;
    }

    private function getParser()
    {
        if (!$this->parser) {
            $this->parser = new Parser();
        }

        return $this->parser;
    }

    private function getDirectoryIterator($directory)
    {
        $default = function ($directory) {
            return new \RecursiveIteratorIterator(
                new \RecursiveDirectoryIterator($directory, \FilesystemIterator::SKIP_DOTS | \FilesystemIterator::FOLLOW_SYMLINKS),
                \RecursiveIteratorIterator::LEAVES_ONLY
            );
        };

        if (null !== $this->directoryIteratorProvider) {
            return ($this->directoryIteratorProvider)($directory, $default);
        }

        return $default($directory);
    }

    private function isReadable($fileOrDirectory)
    {
        $default = function ($fileOrDirectory) {
            return is_readable($fileOrDirectory);
        };

        if (null !== $this->isReadableProvider) {
            return ($this->isReadableProvider)($fileOrDirectory, $default);
        }

        return $default($fileOrDirectory);
    }
}
<?php

/*
 * This file is part of the Symfony package.
 *
 * (c) Fabien Potencier <fabien@symfony.com>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

namespace Symfony\Component\Yaml;

/**
 * Dumper dumps PHP variables to YAML strings.
 *
 * @author Fabien Potencier <fabien@symfony.com>
 *
 * @final
 */
class Dumper
{
    /**
     * The amount of spaces to use for indentation of nested nodes.
     *
     * @var int
     */
    protected $indentation;

    public function __construct(int $indentation = 4)
    {
        if ($indentation < 1) {
            throw new \InvalidArgumentException('The indentation must be greater than zero.');
        }

        $this->indentation = $indentation;
    }

    /**
     * Dumps a PHP value to YAML.
     *
     * @param mixed $input  The PHP value
     * @param int   $inline The level where you switch to inline YAML
     * @param int   $indent The level of indentation (used internally)
     * @param int   $flags  A bit field of Yaml::DUMP_* constants to customize the dumped YAML string
     *
     * @return string The YAML representation of the PHP value
     */
    public function dump($input, int $inline = 0, int $indent = 0, int $flags = 0): string
    {
        $output = '';
        $prefix = $indent ? str_repeat(' ', $indent) : '';
        $dumpObjectAsInlineMap = true;

        if (Yaml::DUMP_OBJECT_AS_MAP & $flags && ($input instanceof \ArrayObject || $input instanceof \stdClass)) {
            $dumpObjectAsInlineMap = empty((array) $input);
        }

        if ($inline <= 0 || (!\is_array($input) && $dumpObjectAsInlineMap) || empty($input)) {
            $output .= $prefix.Inline::dump($input, $flags);
        } else {
            $dumpAsMap = Inline::isHash($input);

            foreach ($input as $key => $value) {
                if ($inline >= 1 && Yaml::DUMP_MULTI_LINE_LITERAL_BLOCK & $flags && \is_string($value) && false !== strpos($value, "\n") && false === strpos($value, "\r\n")) {
                    // If the first line starts with a space character, the spec requires a blockIndicationIndicator
                    // http://www.yaml.org/spec/1.2/spec.html#id2793979
                    $blockIndentationIndicator = (' ' === substr($value, 0, 1)) ? (string) $this->indentation : '';
                    $output .= sprintf("%s%s%s |%s\n", $prefix, $dumpAsMap ? Inline::dump($key, $flags).':' : '-', '', $blockIndentationIndicator);

                    foreach (preg_split('/\n|\r\n/', $value) as $row) {
                        $output .= sprintf("%s%s%s\n", $prefix, str_repeat(' ', $this->indentation), $row);
                    }

                    continue;
                }

                $dumpObjectAsInlineMap = true;

                if (Yaml::DUMP_OBJECT_AS_MAP & $flags && ($value instanceof \ArrayObject || $value instanceof \stdClass)) {
                    $dumpObjectAsInlineMap = empty((array) $value);
                }

                $willBeInlined = $inline - 1 <= 0 || !\is_array($value) && $dumpObjectAsInlineMap || empty($value);

                $output .= sprintf('%s%s%s%s',
                    $prefix,
                    $dumpAsMap ? Inline::dump($key, $flags).':' : '-',
                    $willBeInlined ? ' ' : "\n",
                    $this->dump($value, $inline - 1, $willBeInlined ? 0 : $indent + $this->indentation, $flags)
                ).($willBeInlined ? "\n" : '');
            }
        }

        return $output;
    }
}
<?php

/*
 * This file is part of the Symfony package.
 *
 * (c) Fabien Potencier <fabien@symfony.com>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

namespace Symfony\Component\Yaml;

/**
 * Escaper encapsulates escaping rules for single and double-quoted
 * YAML strings.
 *
 * @author Matthew Lewinski <matthew@lewinski.org>
 *
 * @internal
 */
class Escaper
{
    // Characters that would cause a dumped string to require double quoting.
    const REGEX_CHARACTER_TO_ESCAPE = "[\\x00-\\x1f]|\xc2\x85|\xc2\xa0|\xe2\x80\xa8|\xe2\x80\xa9";

    // Mapping arrays for escaping a double quoted string. The backslash is
    // first to ensure proper escaping because str_replace operates iteratively
    // on the input arrays. This ordering of the characters avoids the use of strtr,
    // which performs more slowly.
    private static $escapees = ['\\', '\\\\', '\\"', '"',
                                     "\x00",  "\x01",  "\x02",  "\x03",  "\x04",  "\x05",  "\x06",  "\x07",
                                     "\x08",  "\x09",  "\x0a",  "\x0b",  "\x0c",  "\x0d",  "\x0e",  "\x0f",
                                     "\x10",  "\x11",  "\x12",  "\x13",  "\x14",  "\x15",  "\x16",  "\x17",
                                     "\x18",  "\x19",  "\x1a",  "\x1b",  "\x1c",  "\x1d",  "\x1e",  "\x1f",
                                     "\xc2\x85", "\xc2\xa0", "\xe2\x80\xa8", "\xe2\x80\xa9",
                               ];
    private static $escaped = ['\\\\', '\\"', '\\\\', '\\"',
                                     '\\0',   '\\x01', '\\x02', '\\x03', '\\x04', '\\x05', '\\x06', '\\a',
                                     '\\b',   '\\t',   '\\n',   '\\v',   '\\f',   '\\r',   '\\x0e', '\\x0f',
                                     '\\x10', '\\x11', '\\x12', '\\x13', '\\x14', '\\x15', '\\x16', '\\x17',
                                     '\\x18', '\\x19', '\\x1a', '\\e',   '\\x1c', '\\x1d', '\\x1e', '\\x1f',
                                     '\\N', '\\_', '\\L', '\\P',
                              ];

    /**
     * Determines if a PHP value would require double quoting in YAML.
     *
     * @param string $value A PHP value
     *
     * @return bool True if the value would require double quotes
     */
    public static function requiresDoubleQuoting(string $value): bool
    {
        return 0 < preg_match('/'.self::REGEX_CHARACTER_TO_ESCAPE.'/u', $value);
    }

    /**
     * Escapes and surrounds a PHP value with double quotes.
     *
     * @param string $value A PHP value
     *
     * @return string The quoted, escaped string
     */
    public static function escapeWithDoubleQuotes(string $value): string
    {
        return sprintf('"%s"', str_replace(self::$escapees, self::$escaped, $value));
    }

    /**
     * Determines if a PHP value would require single quoting in YAML.
     *
     * @param string $value A PHP value
     *
     * @return bool True if the value would require single quotes
     */
    public static function requiresSingleQuoting(string $value): bool
    {
        // Determines if a PHP value is entirely composed of a value that would
        // require single quoting in YAML.
        if (\in_array(strtolower($value), ['null', '~', 'true', 'false', 'y', 'n', 'yes', 'no', 'on', 'off'])) {
            return true;
        }

        // Determines if the PHP value contains any single characters that would
        // cause it to require single quoting in YAML.
        return 0 < preg_match('/[ \s \' " \: \{ \} \[ \] , & \* \# \?] | \A[ \- ? | < > = ! % @ ` ]/x', $value);
    }

    /**
     * Escapes and surrounds a PHP value with single quotes.
     *
     * @param string $value A PHP value
     *
     * @return string The quoted, escaped string
     */
    public static function escapeWithSingleQuotes(string $value): string
    {
        return sprintf("'%s'", str_replace('\'', '\'\'', $value));
    }
}
<?php

/*
 * This file is part of the Symfony package.
 *
 * (c) Fabien Potencier <fabien@symfony.com>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

namespace Symfony\Component\Yaml\Exception;

/**
 * Exception class thrown when an error occurs during dumping.
 *
 * @author Fabien Potencier <fabien@symfony.com>
 */
class DumpException extends RuntimeException
{
}
<?php

/*
 * This file is part of the Symfony package.
 *
 * (c) Fabien Potencier <fabien@symfony.com>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

namespace Symfony\Component\Yaml\Exception;

/**
 * Exception interface for all exceptions thrown by the component.
 *
 * @author Fabien Potencier <fabien@symfony.com>
 */
interface ExceptionInterface extends \Throwable
{
}
<?php

/*
 * This file is part of the Symfony package.
 *
 * (c) Fabien Potencier <fabien@symfony.com>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

namespace Symfony\Component\Yaml\Exception;

/**
 * Exception class thrown when an error occurs during parsing.
 *
 * @author Fabien Potencier <fabien@symfony.com>
 */
class ParseException extends RuntimeException
{
    private $parsedFile;
    private $parsedLine;
    private $snippet;
    private $rawMessage;

    /**
     * @param string          $message    The error message
     * @param int             $parsedLine The line where the error occurred
     * @param string|null     $snippet    The snippet of code near the problem
     * @param string|null     $parsedFile The file name where the error occurred
     * @param \Exception|null $previous   The previous exception
     */
    public function __construct(string $message, int $parsedLine = -1, string $snippet = null, string $parsedFile = null, \Exception $previous = null)
    {
        $this->parsedFile = $parsedFile;
        $this->parsedLine = $parsedLine;
        $this->snippet = $snippet;
        $this->rawMessage = $message;

        $this->updateRepr();

        parent::__construct($this->message, 0, $previous);
    }

    /**
     * Gets the snippet of code near the error.
     *
     * @return string The snippet of code
     */
    public function getSnippet()
    {
        return $this->snippet;
    }

    /**
     * Sets the snippet of code near the error.
     *
     * @param string $snippet The code snippet
     */
    public function setSnippet($snippet)
    {
        $this->snippet = $snippet;

        $this->updateRepr();
    }

    /**
     * Gets the filename where the error occurred.
     *
     * This method returns null if a string is parsed.
     *
     * @return string The filename
     */
    public function getParsedFile()
    {
        return $this->parsedFile;
    }

    /**
     * Sets the filename where the error occurred.
     *
     * @param string $parsedFile The filename
     */
    public function setParsedFile($parsedFile)
    {
        $this->parsedFile = $parsedFile;

        $this->updateRepr();
    }

    /**
     * Gets the line where the error occurred.
     *
     * @return int The file line
     */
    public function getParsedLine()
    {
        return $this->parsedLine;
    }

    /**
     * Sets the line where the error occurred.
     *
     * @param int $parsedLine The file line
     */
    public function setParsedLine($parsedLine)
    {
        $this->parsedLine = $parsedLine;

        $this->updateRepr();
    }

    private function updateRepr()
    {
        $this->message = $this->rawMessage;

        $dot = false;
        if ('.' === substr($this->message, -1)) {
            $this->message = substr($this->message, 0, -1);
            $dot = true;
        }

        if (null !== $this->parsedFile) {
            $this->message .= sprintf(' in %s', json_encode($this->parsedFile, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE));
        }

        if ($this->parsedLine >= 0) {
            $this->message .= sprintf(' at line %d', $this->parsedLine);
        }

        if ($this->snippet) {
            $this->message .= sprintf(' (near "%s")', $this->snippet);
        }

        if ($dot) {
            $this->message .= '.';
        }
    }
}
<?php

/*
 * This file is part of the Symfony package.
 *
 * (c) Fabien Potencier <fabien@symfony.com>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

namespace Symfony\Component\Yaml\Exception;

/**
 * Exception class thrown when an error occurs during parsing.
 *
 * @author Romain Neutron <imprec@gmail.com>
 */
class RuntimeException extends \RuntimeException implements ExceptionInterface
{
}
<?php

/*
 * This file is part of the Symfony package.
 *
 * (c) Fabien Potencier <fabien@symfony.com>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

namespace Symfony\Component\Yaml;

use Symfony\Component\Yaml\Exception\DumpException;
use Symfony\Component\Yaml\Exception\ParseException;
use Symfony\Component\Yaml\Tag\TaggedValue;

/**
 * Inline implements a YAML parser/dumper for the YAML inline syntax.
 *
 * @author Fabien Potencier <fabien@symfony.com>
 *
 * @internal
 */
class Inline
{
    const REGEX_QUOTED_STRING = '(?:"([^"\\\\]*+(?:\\\\.[^"\\\\]*+)*+)"|\'([^\']*+(?:\'\'[^\']*+)*+)\')';

    public static $parsedLineNumber = -1;
    public static $parsedFilename;

    private static $exceptionOnInvalidType = false;
    private static $objectSupport = false;
    private static $objectForMap = false;
    private static $constantSupport = false;

    /**
     * @param int         $flags
     * @param int|null    $parsedLineNumber
     * @param string|null $parsedFilename
     */
    public static function initialize($flags, $parsedLineNumber = null, $parsedFilename = null)
    {
        self::$exceptionOnInvalidType = (bool) (Yaml::PARSE_EXCEPTION_ON_INVALID_TYPE & $flags);
        self::$objectSupport = (bool) (Yaml::PARSE_OBJECT & $flags);
        self::$objectForMap = (bool) (Yaml::PARSE_OBJECT_FOR_MAP & $flags);
        self::$constantSupport = (bool) (Yaml::PARSE_CONSTANT & $flags);
        self::$parsedFilename = $parsedFilename;

        if (null !== $parsedLineNumber) {
            self::$parsedLineNumber = $parsedLineNumber;
        }
    }

    /**
     * Converts a YAML string to a PHP value.
     *
     * @param string $value      A YAML string
     * @param int    $flags      A bit field of PARSE_* constants to customize the YAML parser behavior
     * @param array  $references Mapping of variable names to values
     *
     * @return mixed A PHP value
     *
     * @throws ParseException
     */
    public static function parse(string $value = null, int $flags = 0, array $references = [])
    {
        self::initialize($flags);

        $value = trim($value);

        if ('' === $value) {
            return '';
        }

        if (2 /* MB_OVERLOAD_STRING */ & (int) ini_get('mbstring.func_overload')) {
            $mbEncoding = mb_internal_encoding();
            mb_internal_encoding('ASCII');
        }

        try {
            $i = 0;
            $tag = self::parseTag($value, $i, $flags);
            switch ($value[$i]) {
                case '[':
                    $result = self::parseSequence($value, $flags, $i, $references);
                    ++$i;
                    break;
                case '{':
                    $result = self::parseMapping($value, $flags, $i, $references);
                    ++$i;
                    break;
                default:
                    $result = self::parseScalar($value, $flags, null, $i, null === $tag, $references);
            }

            if (null !== $tag && '' !== $tag) {
                return new TaggedValue($tag, $result);
            }

            // some comments are allowed at the end
            if (preg_replace('/\s+#.*$/A', '', substr($value, $i))) {
                throw new ParseException(sprintf('Unexpected characters near "%s".', substr($value, $i)), self::$parsedLineNumber + 1, $value, self::$parsedFilename);
            }

            return $result;
        } finally {
            if (isset($mbEncoding)) {
                mb_internal_encoding($mbEncoding);
            }
        }
    }

    /**
     * Dumps a given PHP variable to a YAML string.
     *
     * @param mixed $value The PHP variable to convert
     * @param int   $flags A bit field of Yaml::DUMP_* constants to customize the dumped YAML string
     *
     * @return string The YAML string representing the PHP value
     *
     * @throws DumpException When trying to dump PHP resource
     */
    public static function dump($value, int $flags = 0): string
    {
        switch (true) {
            case \is_resource($value):
                if (Yaml::DUMP_EXCEPTION_ON_INVALID_TYPE & $flags) {
                    throw new DumpException(sprintf('Unable to dump PHP resources in a YAML file ("%s").', get_resource_type($value)));
                }

                return 'null';
            case $value instanceof \DateTimeInterface:
                return $value->format('c');
            case \is_object($value):
                if ($value instanceof TaggedValue) {
                    return '!'.$value->getTag().' '.self::dump($value->getValue(), $flags);
                }

                if (Yaml::DUMP_OBJECT & $flags) {
                    return '!php/object '.self::dump(serialize($value));
                }

                if (Yaml::DUMP_OBJECT_AS_MAP & $flags && ($value instanceof \stdClass || $value instanceof \ArrayObject)) {
                    $output = [];

                    foreach ($value as $key => $val) {
                        $output[] = sprintf('%s: %s', self::dump($key, $flags), self::dump($val, $flags));
                    }

                    return sprintf('{ %s }', implode(', ', $output));
                }

                if (Yaml::DUMP_EXCEPTION_ON_INVALID_TYPE & $flags) {
                    throw new DumpException('Object support when dumping a YAML file has been disabled.');
                }

                return 'null';
            case \is_array($value):
                return self::dumpArray($value, $flags);
            case null === $value:
                return 'null';
            case true === $value:
                return 'true';
            case false === $value:
                return 'false';
            case ctype_digit($value):
                return \is_string($value) ? "'$value'" : (int) $value;
            case is_numeric($value):
                $locale = setlocale(LC_NUMERIC, 0);
                if (false !== $locale) {
                    setlocale(LC_NUMERIC, 'C');
                }
                if (\is_float($value)) {
                    $repr = (string) $value;
                    if (is_infinite($value)) {
                        $repr = str_ireplace('INF', '.Inf', $repr);
                    } elseif (floor($value) == $value && $repr == $value) {
                        // Preserve float data type since storing a whole number will result in integer value.
                        $repr = '!!float '.$repr;
                    }
                } else {
                    $repr = \is_string($value) ? "'$value'" : (string) $value;
                }
                if (false !== $locale) {
                    setlocale(LC_NUMERIC, $locale);
                }

                return $repr;
            case '' == $value:
                return "''";
            case self::isBinaryString($value):
                return '!!binary '.base64_encode($value);
            case Escaper::requiresDoubleQuoting($value):
                return Escaper::escapeWithDoubleQuotes($value);
            case Escaper::requiresSingleQuoting($value):
            case Parser::preg_match('{^[0-9]+[_0-9]*$}', $value):
            case Parser::preg_match(self::getHexRegex(), $value):
            case Parser::preg_match(self::getTimestampRegex(), $value):
                return Escaper::escapeWithSingleQuotes($value);
            default:
                return $value;
        }
    }

    /**
     * Check if given array is hash or just normal indexed array.
     *
     * @param array|\ArrayObject|\stdClass $value The PHP array or array-like object to check
     *
     * @return bool true if value is hash array, false otherwise
     */
    public static function isHash($value): bool
    {
        if ($value instanceof \stdClass || $value instanceof \ArrayObject) {
            return true;
        }

        $expectedKey = 0;

        foreach ($value as $key => $val) {
            if ($key !== $expectedKey++) {
                return true;
            }
        }

        return false;
    }

    /**
     * Dumps a PHP array to a YAML string.
     *
     * @param array $value The PHP array to dump
     * @param int   $flags A bit field of Yaml::DUMP_* constants to customize the dumped YAML string
     *
     * @return string The YAML string representing the PHP array
     */
    private static function dumpArray(array $value, int $flags): string
    {
        // array
        if (($value || Yaml::DUMP_EMPTY_ARRAY_AS_SEQUENCE & $flags) && !self::isHash($value)) {
            $output = [];
            foreach ($value as $val) {
                $output[] = self::dump($val, $flags);
            }

            return sprintf('[%s]', implode(', ', $output));
        }

        // hash
        $output = [];
        foreach ($value as $key => $val) {
            $output[] = sprintf('%s: %s', self::dump($key, $flags), self::dump($val, $flags));
        }

        return sprintf('{ %s }', implode(', ', $output));
    }

    /**
     * Parses a YAML scalar.
     *
     * @return mixed
     *
     * @throws ParseException When malformed inline YAML string is parsed
     */
    public static function parseScalar(string $scalar, int $flags = 0, array $delimiters = null, int &$i = 0, bool $evaluate = true, array $references = [])
    {
        if (\in_array($scalar[$i], ['"', "'"])) {
            // quoted scalar
            $output = self::parseQuotedScalar($scalar, $i);

            if (null !== $delimiters) {
                $tmp = ltrim(substr($scalar, $i), ' ');
                if ('' === $tmp) {
                    throw new ParseException(sprintf('Unexpected end of line, expected one of "%s".', implode('', $delimiters)), self::$parsedLineNumber + 1, $scalar, self::$parsedFilename);
                }
                if (!\in_array($tmp[0], $delimiters)) {
                    throw new ParseException(sprintf('Unexpected characters (%s).', substr($scalar, $i)), self::$parsedLineNumber + 1, $scalar, self::$parsedFilename);
                }
            }
        } else {
            // "normal" string
            if (!$delimiters) {
                $output = substr($scalar, $i);
                $i += \strlen($output);

                // remove comments
                if (Parser::preg_match('/[ \t]+#/', $output, $match, PREG_OFFSET_CAPTURE)) {
                    $output = substr($output, 0, $match[0][1]);
                }
            } elseif (Parser::preg_match('/^(.*?)('.implode('|', $delimiters).')/', substr($scalar, $i), $match)) {
                $output = $match[1];
                $i += \strlen($output);
                $output = trim($output);
            } else {
                throw new ParseException(sprintf('Malformed inline YAML string: %s.', $scalar), self::$parsedLineNumber + 1, null, self::$parsedFilename);
            }

            // a non-quoted string cannot start with @ or ` (reserved) nor with a scalar indicator (| or >)
            if ($output && ('@' === $output[0] || '`' === $output[0] || '|' === $output[0] || '>' === $output[0] || '%' === $output[0])) {
                throw new ParseException(sprintf('The reserved indicator "%s" cannot start a plain scalar; you need to quote the scalar.', $output[0]), self::$parsedLineNumber + 1, $output, self::$parsedFilename);
            }

            if ($evaluate) {
                $output = self::evaluateScalar($output, $flags, $references);
            }
        }

        return $output;
    }

    /**
     * Parses a YAML quoted scalar.
     *
     * @throws ParseException When malformed inline YAML string is parsed
     */
    private static function parseQuotedScalar(string $scalar, int &$i): string
    {
        if (!Parser::preg_match('/'.self::REGEX_QUOTED_STRING.'/Au', substr($scalar, $i), $match)) {
            throw new ParseException(sprintf('Malformed inline YAML string: %s.', substr($scalar, $i)), self::$parsedLineNumber + 1, $scalar, self::$parsedFilename);
        }

        $output = substr($match[0], 1, \strlen($match[0]) - 2);

        $unescaper = new Unescaper();
        if ('"' == $scalar[$i]) {
            $output = $unescaper->unescapeDoubleQuotedString($output);
        } else {
            $output = $unescaper->unescapeSingleQuotedString($output);
        }

        $i += \strlen($match[0]);

        return $output;
    }

    /**
     * Parses a YAML sequence.
     *
     * @throws ParseException When malformed inline YAML string is parsed
     */
    private static function parseSequence(string $sequence, int $flags, int &$i = 0, array $references = []): array
    {
        $output = [];
        $len = \strlen($sequence);
        ++$i;

        // [foo, bar, ...]
        while ($i < $len) {
            if (']' === $sequence[$i]) {
                return $output;
            }
            if (',' === $sequence[$i] || ' ' === $sequence[$i]) {
                ++$i;

                continue;
            }

            $tag = self::parseTag($sequence, $i, $flags);
            switch ($sequence[$i]) {
                case '[':
                    // nested sequence
                    $value = self::parseSequence($sequence, $flags, $i, $references);
                    break;
                case '{':
                    // nested mapping
                    $value = self::parseMapping($sequence, $flags, $i, $references);
                    break;
                default:
                    $isQuoted = \in_array($sequence[$i], ['"', "'"]);
                    $value = self::parseScalar($sequence, $flags, [',', ']'], $i, null === $tag, $references);

                    // the value can be an array if a reference has been resolved to an array var
                    if (\is_string($value) && !$isQuoted && false !== strpos($value, ': ')) {
                        // embedded mapping?
                        try {
                            $pos = 0;
                            $value = self::parseMapping('{'.$value.'}', $flags, $pos, $references);
                        } catch (\InvalidArgumentException $e) {
                            // no, it's not
                        }
                    }

                    --$i;
            }

            if (null !== $tag && '' !== $tag) {
                $value = new TaggedValue($tag, $value);
            }

            $output[] = $value;

            ++$i;
        }

        throw new ParseException(sprintf('Malformed inline YAML string: %s.', $sequence), self::$parsedLineNumber + 1, null, self::$parsedFilename);
    }

    /**
     * Parses a YAML mapping.
     *
     * @return array|\stdClass
     *
     * @throws ParseException When malformed inline YAML string is parsed
     */
    private static function parseMapping(string $mapping, int $flags, int &$i = 0, array $references = [])
    {
        $output = [];
        $len = \strlen($mapping);
        ++$i;
        $allowOverwrite = false;

        // {foo: bar, bar:foo, ...}
        while ($i < $len) {
            switch ($mapping[$i]) {
                case ' ':
                case ',':
                    ++$i;
                    continue 2;
                case '}':
                    if (self::$objectForMap) {
                        return (object) $output;
                    }

                    return $output;
            }

            // key
            $offsetBeforeKeyParsing = $i;
            $isKeyQuoted = \in_array($mapping[$i], ['"', "'"], true);
            $key = self::parseScalar($mapping, $flags, [':', ' '], $i, false, []);

            if ($offsetBeforeKeyParsing === $i) {
                throw new ParseException('Missing mapping key.', self::$parsedLineNumber + 1, $mapping);
            }

            if (false === $i = strpos($mapping, ':', $i)) {
                break;
            }

            if (!$isKeyQuoted) {
                $evaluatedKey = self::evaluateScalar($key, $flags, $references);

                if ('' !== $key && $evaluatedKey !== $key && !\is_string($evaluatedKey) && !\is_int($evaluatedKey)) {
                    throw new ParseException('Implicit casting of incompatible mapping keys to strings is not supported. Quote your evaluable mapping keys instead.', self::$parsedLineNumber + 1, $mapping);
                }
            }

            if (!$isKeyQuoted && (!isset($mapping[$i + 1]) || !\in_array($mapping[$i + 1], [' ', ',', '[', ']', '{', '}'], true))) {
                throw new ParseException('Colons must be followed by a space or an indication character (i.e. " ", ",", "[", "]", "{", "}").', self::$parsedLineNumber + 1, $mapping);
            }

            if ('<<' === $key) {
                $allowOverwrite = true;
            }

            while ($i < $len) {
                if (':' === $mapping[$i] || ' ' === $mapping[$i]) {
                    ++$i;

                    continue;
                }

                $tag = self::parseTag($mapping, $i, $flags);
                switch ($mapping[$i]) {
                    case '[':
                        // nested sequence
                        $value = self::parseSequence($mapping, $flags, $i, $references);
                        // Spec: Keys MUST be unique; first one wins.
                        // Parser cannot abort this mapping earlier, since lines
                        // are processed sequentially.
                        // But overwriting is allowed when a merge node is used in current block.
                        if ('<<' === $key) {
                            foreach ($value as $parsedValue) {
                                $output += $parsedValue;
                            }
                        } elseif ($allowOverwrite || !isset($output[$key])) {
                            if (null !== $tag) {
                                $output[$key] = new TaggedValue($tag, $value);
                            } else {
                                $output[$key] = $value;
                            }
                        } elseif (isset($output[$key])) {
                            throw new ParseException(sprintf('Duplicate key "%s" detected.', $key), self::$parsedLineNumber + 1, $mapping);
                        }
                        break;
                    case '{':
                        // nested mapping
                        $value = self::parseMapping($mapping, $flags, $i, $references);
                        // Spec: Keys MUST be unique; first one wins.
                        // Parser cannot abort this mapping earlier, since lines
                        // are processed sequentially.
                        // But overwriting is allowed when a merge node is used in current block.
                        if ('<<' === $key) {
                            $output += $value;
                        } elseif ($allowOverwrite || !isset($output[$key])) {
                            if (null !== $tag) {
                                $output[$key] = new TaggedValue($tag, $value);
                            } else {
                                $output[$key] = $value;
                            }
                        } elseif (isset($output[$key])) {
                            throw new ParseException(sprintf('Duplicate key "%s" detected.', $key), self::$parsedLineNumber + 1, $mapping);
                        }
                        break;
                    default:
                        $value = self::parseScalar($mapping, $flags, [',', '}'], $i, null === $tag, $references);
                        // Spec: Keys MUST be unique; first one wins.
                        // Parser cannot abort this mapping earlier, since lines
                        // are processed sequentially.
                        // But overwriting is allowed when a merge node is used in current block.
                        if ('<<' === $key) {
                            $output += $value;
                        } elseif ($allowOverwrite || !isset($output[$key])) {
                            if (null !== $tag) {
                                $output[$key] = new TaggedValue($tag, $value);
                            } else {
                                $output[$key] = $value;
                            }
                        } elseif (isset($output[$key])) {
                            throw new ParseException(sprintf('Duplicate key "%s" detected.', $key), self::$parsedLineNumber + 1, $mapping);
                        }
                        --$i;
                }
                ++$i;

                continue 2;
            }
        }

        throw new ParseException(sprintf('Malformed inline YAML string: %s.', $mapping), self::$parsedLineNumber + 1, null, self::$parsedFilename);
    }

    /**
     * Evaluates scalars and replaces magic values.
     *
     * @return mixed The evaluated YAML string
     *
     * @throws ParseException when object parsing support was disabled and the parser detected a PHP object or when a reference could not be resolved
     */
    private static function evaluateScalar(string $scalar, int $flags, array $references = [])
    {
        $scalar = trim($scalar);
        $scalarLower = strtolower($scalar);

        if (0 === strpos($scalar, '*')) {
            if (false !== $pos = strpos($scalar, '#')) {
                $value = substr($scalar, 1, $pos - 2);
            } else {
                $value = substr($scalar, 1);
            }

            // an unquoted *
            if (false === $value || '' === $value) {
                throw new ParseException('A reference must contain at least one character.', self::$parsedLineNumber + 1, $value, self::$parsedFilename);
            }

            if (!array_key_exists($value, $references)) {
                throw new ParseException(sprintf('Reference "%s" does not exist.', $value), self::$parsedLineNumber + 1, $value, self::$parsedFilename);
            }

            return $references[$value];
        }

        switch (true) {
            case 'null' === $scalarLower:
            case '' === $scalar:
            case '~' === $scalar:
                return;
            case 'true' === $scalarLower:
                return true;
            case 'false' === $scalarLower:
                return false;
            case '!' === $scalar[0]:
                switch (true) {
                    case 0 === strpos($scalar, '!!str '):
                        return (string) substr($scalar, 6);
                    case 0 === strpos($scalar, '! '):
                        return substr($scalar, 2);
                    case 0 === strpos($scalar, '!php/object'):
                        if (self::$objectSupport) {
                            return unserialize(self::parseScalar(substr($scalar, 12)));
                        }

                        if (self::$exceptionOnInvalidType) {
                            throw new ParseException('Object support when parsing a YAML file has been disabled.', self::$parsedLineNumber + 1, $scalar, self::$parsedFilename);
                        }

                        return;
                    case 0 === strpos($scalar, '!php/const'):
                        if (self::$constantSupport) {
                            $i = 0;
                            if (\defined($const = self::parseScalar(substr($scalar, 11), 0, null, $i, false))) {
                                return \constant($const);
                            }

                            throw new ParseException(sprintf('The constant "%s" is not defined.', $const), self::$parsedLineNumber + 1, $scalar, self::$parsedFilename);
                        }
                        if (self::$exceptionOnInvalidType) {
                            throw new ParseException(sprintf('The string "%s" could not be parsed as a constant. Have you forgotten to pass the "Yaml::PARSE_CONSTANT" flag to the parser?', $scalar), self::$parsedLineNumber + 1, $scalar, self::$parsedFilename);
                        }

                        return;
                    case 0 === strpos($scalar, '!!float '):
                        return (float) substr($scalar, 8);
                    case 0 === strpos($scalar, '!!binary '):
                        return self::evaluateBinaryScalar(substr($scalar, 9));
                    default:
                        throw new ParseException(sprintf('The string "%s" could not be parsed as it uses an unsupported built-in tag.', $scalar), self::$parsedLineNumber, $scalar, self::$parsedFilename);
                }

            // Optimize for returning strings.
            // no break
            case '+' === $scalar[0] || '-' === $scalar[0] || '.' === $scalar[0] || is_numeric($scalar[0]):
                switch (true) {
                    case Parser::preg_match('{^[+-]?[0-9][0-9_]*$}', $scalar):
                        $scalar = str_replace('_', '', (string) $scalar);
                        // omitting the break / return as integers are handled in the next case
                        // no break
                    case ctype_digit($scalar):
                        $raw = $scalar;
                        $cast = (int) $scalar;

                        return '0' == $scalar[0] ? octdec($scalar) : (((string) $raw == (string) $cast) ? $cast : $raw);
                    case '-' === $scalar[0] && ctype_digit(substr($scalar, 1)):
                        $raw = $scalar;
                        $cast = (int) $scalar;

                        return '0' == $scalar[1] ? octdec($scalar) : (((string) $raw === (string) $cast) ? $cast : $raw);
                    case is_numeric($scalar):
                    case Parser::preg_match(self::getHexRegex(), $scalar):
                        $scalar = str_replace('_', '', $scalar);

                        return '0x' === $scalar[0].$scalar[1] ? hexdec($scalar) : (float) $scalar;
                    case '.inf' === $scalarLower:
                    case '.nan' === $scalarLower:
                        return -log(0);
                    case '-.inf' === $scalarLower:
                        return log(0);
                    case Parser::preg_match('/^(-|\+)?[0-9][0-9_]*(\.[0-9_]+)?$/', $scalar):
                        return (float) str_replace('_', '', $scalar);
                    case Parser::preg_match(self::getTimestampRegex(), $scalar):
                        if (Yaml::PARSE_DATETIME & $flags) {
                            // When no timezone is provided in the parsed date, YAML spec says we must assume UTC.
                            return new \DateTime($scalar, new \DateTimeZone('UTC'));
                        }

                        $timeZone = date_default_timezone_get();
                        date_default_timezone_set('UTC');
                        $time = strtotime($scalar);
                        date_default_timezone_set($timeZone);

                        return $time;
                }
        }

        return (string) $scalar;
    }

    private static function parseTag(string $value, int &$i, int $flags): ?string
    {
        if ('!' !== $value[$i]) {
            return null;
        }

        $tagLength = strcspn($value, " \t\n[]{},", $i + 1);
        $tag = substr($value, $i + 1, $tagLength);

        $nextOffset = $i + $tagLength + 1;
        $nextOffset += strspn($value, ' ', $nextOffset);

        // Is followed by a scalar and is a built-in tag
        if ($tag && (!isset($value[$nextOffset]) || !\in_array($value[$nextOffset], ['[', '{'], true)) && ('!' === $tag[0] || 'str' === $tag || 'php/const' === $tag || 'php/object' === $tag)) {
            // Manage in {@link self::evaluateScalar()}
            return null;
        }

        $i = $nextOffset;

        // Built-in tags
        if ($tag && '!' === $tag[0]) {
            throw new ParseException(sprintf('The built-in tag "!%s" is not implemented.', $tag), self::$parsedLineNumber + 1, $value, self::$parsedFilename);
        }

        if ('' === $tag || Yaml::PARSE_CUSTOM_TAGS & $flags) {
            return $tag;
        }

        throw new ParseException(sprintf('Tags support is not enabled. Enable the "Yaml::PARSE_CUSTOM_TAGS" flag to use "!%s".', $tag), self::$parsedLineNumber + 1, $value, self::$parsedFilename);
    }

    public static function evaluateBinaryScalar(string $scalar): string
    {
        $parsedBinaryData = self::parseScalar(preg_replace('/\s/', '', $scalar));

        if (0 !== (\strlen($parsedBinaryData) % 4)) {
            throw new ParseException(sprintf('The normalized base64 encoded data (data without whitespace characters) length must be a multiple of four (%d bytes given).', \strlen($parsedBinaryData)), self::$parsedLineNumber + 1, $scalar, self::$parsedFilename);
        }

        if (!Parser::preg_match('#^[A-Z0-9+/]+={0,2}$#i', $parsedBinaryData)) {
            throw new ParseException(sprintf('The base64 encoded data (%s) contains invalid characters.', $parsedBinaryData), self::$parsedLineNumber + 1, $scalar, self::$parsedFilename);
        }

        return base64_decode($parsedBinaryData, true);
    }

    private static function isBinaryString(string $value)
    {
        return !preg_match('//u', $value) || preg_match('/[^\x00\x07-\x0d\x1B\x20-\xff]/', $value);
    }

    /**
     * Gets a regex that matches a YAML date.
     *
     * @return string The regular expression
     *
     * @see http://www.yaml.org/spec/1.2/spec.html#id2761573
     */
    private static function getTimestampRegex(): string
    {
        return <<<EOF
        ~^
        (?P<year>[0-9][0-9][0-9][0-9])
        -(?P<month>[0-9][0-9]?)
        -(?P<day>[0-9][0-9]?)
        (?:(?:[Tt]|[ \t]+)
        (?P<hour>[0-9][0-9]?)
        :(?P<minute>[0-9][0-9])
        :(?P<second>[0-9][0-9])
        (?:\.(?P<fraction>[0-9]*))?
        (?:[ \t]*(?P<tz>Z|(?P<tz_sign>[-+])(?P<tz_hour>[0-9][0-9]?)
        (?::(?P<tz_minute>[0-9][0-9]))?))?)?
        $~x
EOF;
    }

    /**
     * Gets a regex that matches a YAML number in hexadecimal notation.
     *
     * @return string
     */
    private static function getHexRegex(): string
    {
        return '~^0x[0-9a-f_]++$~i';
    }
}
Copyright (c) 2004-2019 Fabien Potencier

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is furnished
to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
<?php

/*
 * This file is part of the Symfony package.
 *
 * (c) Fabien Potencier <fabien@symfony.com>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

namespace Symfony\Component\Yaml;

use Symfony\Component\Yaml\Exception\ParseException;
use Symfony\Component\Yaml\Tag\TaggedValue;

/**
 * Parser parses YAML strings to convert them to PHP arrays.
 *
 * @author Fabien Potencier <fabien@symfony.com>
 *
 * @final
 */
class Parser
{
    const TAG_PATTERN = '(?P<tag>![\w!.\/:-]+)';
    const BLOCK_SCALAR_HEADER_PATTERN = '(?P<separator>\||>)(?P<modifiers>\+|\-|\d+|\+\d+|\-\d+|\d+\+|\d+\-)?(?P<comments> +#.*)?';

    private $filename;
    private $offset = 0;
    private $totalNumberOfLines;
    private $lines = [];
    private $currentLineNb = -1;
    private $currentLine = '';
    private $refs = [];
    private $skippedLineNumbers = [];
    private $locallySkippedLineNumbers = [];
    private $refsBeingParsed = [];

    /**
     * Parses a YAML file into a PHP value.
     *
     * @param string $filename The path to the YAML file to be parsed
     * @param int    $flags    A bit field of PARSE_* constants to customize the YAML parser behavior
     *
     * @return mixed The YAML converted to a PHP value
     *
     * @throws ParseException If the file could not be read or the YAML is not valid
     */
    public function parseFile(string $filename, int $flags = 0)
    {
        if (!is_file($filename)) {
            throw new ParseException(sprintf('File "%s" does not exist.', $filename));
        }

        if (!is_readable($filename)) {
            throw new ParseException(sprintf('File "%s" cannot be read.', $filename));
        }

        $this->filename = $filename;

        try {
            return $this->parse(file_get_contents($filename), $flags);
        } finally {
            $this->filename = null;
        }
    }

    /**
     * Parses a YAML string to a PHP value.
     *
     * @param string $value A YAML string
     * @param int    $flags A bit field of PARSE_* constants to customize the YAML parser behavior
     *
     * @return mixed A PHP value
     *
     * @throws ParseException If the YAML is not valid
     */
    public function parse(string $value, int $flags = 0)
    {
        if (false === preg_match('//u', $value)) {
            throw new ParseException('The YAML value does not appear to be valid UTF-8.', -1, null, $this->filename);
        }

        $this->refs = [];

        $mbEncoding = null;
        $data = null;

        if (2 /* MB_OVERLOAD_STRING */ & (int) ini_get('mbstring.func_overload')) {
            $mbEncoding = mb_internal_encoding();
            mb_internal_encoding('UTF-8');
        }

        try {
            $data = $this->doParse($value, $flags);
        } finally {
            if (null !== $mbEncoding) {
                mb_internal_encoding($mbEncoding);
            }
            $this->lines = [];
            $this->currentLine = '';
            $this->refs = [];
            $this->skippedLineNumbers = [];
            $this->locallySkippedLineNumbers = [];
        }

        return $data;
    }

    /**
     * @internal
     *
     * @return int
     */
    public function getLastLineNumberBeforeDeprecation(): int
    {
        return $this->getRealCurrentLineNb();
    }

    private function doParse(string $value, int $flags)
    {
        $this->currentLineNb = -1;
        $this->currentLine = '';
        $value = $this->cleanup($value);
        $this->lines = explode("\n", $value);
        $this->locallySkippedLineNumbers = [];

        if (null === $this->totalNumberOfLines) {
            $this->totalNumberOfLines = \count($this->lines);
        }

        if (!$this->moveToNextLine()) {
            return null;
        }

        $data = [];
        $context = null;
        $allowOverwrite = false;

        while ($this->isCurrentLineEmpty()) {
            if (!$this->moveToNextLine()) {
                return null;
            }
        }

        // Resolves the tag and returns if end of the document
        if (null !== ($tag = $this->getLineTag($this->currentLine, $flags, false)) && !$this->moveToNextLine()) {
            return new TaggedValue($tag, '');
        }

        do {
            if ($this->isCurrentLineEmpty()) {
                continue;
            }

            // tab?
            if ("\t" === $this->currentLine[0]) {
                throw new ParseException('A YAML file cannot contain tabs as indentation.', $this->getRealCurrentLineNb() + 1, $this->currentLine, $this->filename);
            }

            Inline::initialize($flags, $this->getRealCurrentLineNb(), $this->filename);

            $isRef = $mergeNode = false;
            if ('-' === $this->currentLine[0] && self::preg_match('#^\-((?P<leadspaces>\s+)(?P<value>.+))?$#u', rtrim($this->currentLine), $values)) {
                if ($context && 'mapping' == $context) {
                    throw new ParseException('You cannot define a sequence item when in a mapping', $this->getRealCurrentLineNb() + 1, $this->currentLine, $this->filename);
                }
                $context = 'sequence';

                if (isset($values['value']) && '&' === $values['value'][0] && self::preg_match('#^&(?P<ref>[^ ]+) *(?P<value>.*)#u', $values['value'], $matches)) {
                    $isRef = $matches['ref'];
                    $this->refsBeingParsed[] = $isRef;
                    $values['value'] = $matches['value'];
                }

                if (isset($values['value'][1]) && '?' === $values['value'][0] && ' ' === $values['value'][1]) {
                    throw new ParseException('Complex mappings are not supported.', $this->getRealCurrentLineNb() + 1, $this->currentLine);
                }

                // array
                if (!isset($values['value']) || '' == trim($values['value'], ' ') || 0 === strpos(ltrim($values['value'], ' '), '#')) {
                    $data[] = $this->parseBlock($this->getRealCurrentLineNb() + 1, $this->getNextEmbedBlock(null, true) ?? '', $flags);
                } elseif (null !== $subTag = $this->getLineTag(ltrim($values['value'], ' '), $flags)) {
                    $data[] = new TaggedValue(
                        $subTag,
                        $this->parseBlock($this->getRealCurrentLineNb() + 1, $this->getNextEmbedBlock(null, true), $flags)
                    );
                } else {
                    if (isset($values['leadspaces'])
                        && self::preg_match('#^(?P<key>'.Inline::REGEX_QUOTED_STRING.'|[^ \'"\{\[].*?) *\:(\s+(?P<value>.+?))?\s*$#u', $this->trimTag($values['value']), $matches)
                    ) {
                        // this is a compact notation element, add to next block and parse
                        $block = $values['value'];
                        if ($this->isNextLineIndented()) {
                            $block .= "\n".$this->getNextEmbedBlock($this->getCurrentLineIndentation() + \strlen($values['leadspaces']) + 1);
                        }

                        $data[] = $this->parseBlock($this->getRealCurrentLineNb(), $block, $flags);
                    } else {
                        $data[] = $this->parseValue($values['value'], $flags, $context);
                    }
                }
                if ($isRef) {
                    $this->refs[$isRef] = end($data);
                    array_pop($this->refsBeingParsed);
                }
            } elseif (
                self::preg_match('#^(?P<key>(?:![^\s]++\s++)?(?:'.Inline::REGEX_QUOTED_STRING.'|(?:!?!php/const:)?[^ \'"\[\{!].*?)) *\:(\s++(?P<value>.+))?$#u', rtrim($this->currentLine), $values)
                && (false === strpos($values['key'], ' #') || \in_array($values['key'][0], ['"', "'"]))
            ) {
                if ($context && 'sequence' == $context) {
                    throw new ParseException('You cannot define a mapping item when in a sequence', $this->currentLineNb + 1, $this->currentLine, $this->filename);
                }
                $context = 'mapping';

                try {
                    $key = Inline::parseScalar($values['key']);
                } catch (ParseException $e) {
                    $e->setParsedLine($this->getRealCurrentLineNb() + 1);
                    $e->setSnippet($this->currentLine);

                    throw $e;
                }

                if (!\is_string($key) && !\is_int($key)) {
                    throw new ParseException(sprintf('%s keys are not supported. Quote your evaluable mapping keys instead.', is_numeric($key) ? 'Numeric' : 'Non-string'), $this->getRealCurrentLineNb() + 1, $this->currentLine);
                }

                // Convert float keys to strings, to avoid being converted to integers by PHP
                if (\is_float($key)) {
                    $key = (string) $key;
                }

                if ('<<' === $key && (!isset($values['value']) || '&' !== $values['value'][0] || !self::preg_match('#^&(?P<ref>[^ ]+)#u', $values['value'], $refMatches))) {
                    $mergeNode = true;
                    $allowOverwrite = true;
                    if (isset($values['value'][0]) && '*' === $values['value'][0]) {
                        $refName = substr(rtrim($values['value']), 1);
                        if (!array_key_exists($refName, $this->refs)) {
                            if (false !== $pos = array_search($refName, $this->refsBeingParsed, true)) {
                                throw new ParseException(sprintf('Circular reference [%s, %s] detected for reference "%s".', implode(', ', \array_slice($this->refsBeingParsed, $pos)), $refName, $refName), $this->currentLineNb + 1, $this->currentLine, $this->filename);
                            }

                            throw new ParseException(sprintf('Reference "%s" does not exist.', $refName), $this->getRealCurrentLineNb() + 1, $this->currentLine, $this->filename);
                        }

                        $refValue = $this->refs[$refName];

                        if (Yaml::PARSE_OBJECT_FOR_MAP & $flags && $refValue instanceof \stdClass) {
                            $refValue = (array) $refValue;
                        }

                        if (!\is_array($refValue)) {
                            throw new ParseException('YAML merge keys used with a scalar value instead of an array.', $this->getRealCurrentLineNb() + 1, $this->currentLine, $this->filename);
                        }

                        $data += $refValue; // array union
                    } else {
                        if (isset($values['value']) && '' !== $values['value']) {
                            $value = $values['value'];
                        } else {
                            $value = $this->getNextEmbedBlock();
                        }
                        $parsed = $this->parseBlock($this->getRealCurrentLineNb() + 1, $value, $flags);

                        if (Yaml::PARSE_OBJECT_FOR_MAP & $flags && $parsed instanceof \stdClass) {
                            $parsed = (array) $parsed;
                        }

                        if (!\is_array($parsed)) {
                            throw new ParseException('YAML merge keys used with a scalar value instead of an array.', $this->getRealCurrentLineNb() + 1, $this->currentLine, $this->filename);
                        }

                        if (isset($parsed[0])) {
                            // If the value associated with the merge key is a sequence, then this sequence is expected to contain mapping nodes
                            // and each of these nodes is merged in turn according to its order in the sequence. Keys in mapping nodes earlier
                            // in the sequence override keys specified in later mapping nodes.
                            foreach ($parsed as $parsedItem) {
                                if (Yaml::PARSE_OBJECT_FOR_MAP & $flags && $parsedItem instanceof \stdClass) {
                                    $parsedItem = (array) $parsedItem;
                                }

                                if (!\is_array($parsedItem)) {
                                    throw new ParseException('Merge items must be arrays.', $this->getRealCurrentLineNb() + 1, $parsedItem, $this->filename);
                                }

                                $data += $parsedItem; // array union
                            }
                        } else {
                            // If the value associated with the key is a single mapping node, each of its key/value pairs is inserted into the
                            // current mapping, unless the key already exists in it.
                            $data += $parsed; // array union
                        }
                    }
                } elseif ('<<' !== $key && isset($values['value']) && '&' === $values['value'][0] && self::preg_match('#^&(?P<ref>[^ ]++) *+(?P<value>.*)#u', $values['value'], $matches)) {
                    $isRef = $matches['ref'];
                    $this->refsBeingParsed[] = $isRef;
                    $values['value'] = $matches['value'];
                }

                $subTag = null;
                if ($mergeNode) {
                    // Merge keys
                } elseif (!isset($values['value']) || '' === $values['value'] || 0 === strpos($values['value'], '#') || (null !== $subTag = $this->getLineTag($values['value'], $flags)) || '<<' === $key) {
                    // hash
                    // if next line is less indented or equal, then it means that the current value is null
                    if (!$this->isNextLineIndented() && !$this->isNextLineUnIndentedCollection()) {
                        // Spec: Keys MUST be unique; first one wins.
                        // But overwriting is allowed when a merge node is used in current block.
                        if ($allowOverwrite || !isset($data[$key])) {
                            if (null !== $subTag) {
                                $data[$key] = new TaggedValue($subTag, '');
                            } else {
                                $data[$key] = null;
                            }
                        } else {
                            throw new ParseException(sprintf('Duplicate key "%s" detected.', $key), $this->getRealCurrentLineNb() + 1, $this->currentLine);
                        }
                    } else {
                        // remember the parsed line number here in case we need it to provide some contexts in error messages below
                        $realCurrentLineNbKey = $this->getRealCurrentLineNb();
                        $value = $this->parseBlock($this->getRealCurrentLineNb() + 1, $this->getNextEmbedBlock(), $flags);
                        if ('<<' === $key) {
                            $this->refs[$refMatches['ref']] = $value;

                            if (Yaml::PARSE_OBJECT_FOR_MAP & $flags && $value instanceof \stdClass) {
                                $value = (array) $value;
                            }

                            $data += $value;
                        } elseif ($allowOverwrite || !isset($data[$key])) {
                            // Spec: Keys MUST be unique; first one wins.
                            // But overwriting is allowed when a merge node is used in current block.
                            if (null !== $subTag) {
                                $data[$key] = new TaggedValue($subTag, $value);
                            } else {
                                $data[$key] = $value;
                            }
                        } else {
                            throw new ParseException(sprintf('Duplicate key "%s" detected.', $key), $realCurrentLineNbKey + 1, $this->currentLine);
                        }
                    }
                } else {
                    $value = $this->parseValue(rtrim($values['value']), $flags, $context);
                    // Spec: Keys MUST be unique; first one wins.
                    // But overwriting is allowed when a merge node is used in current block.
                    if ($allowOverwrite || !isset($data[$key])) {
                        $data[$key] = $value;
                    } else {
                        throw new ParseException(sprintf('Duplicate key "%s" detected.', $key), $this->getRealCurrentLineNb() + 1, $this->currentLine);
                    }
                }
                if ($isRef) {
                    $this->refs[$isRef] = $data[$key];
                    array_pop($this->refsBeingParsed);
                }
            } else {
                // multiple documents are not supported
                if ('---' === $this->currentLine) {
                    throw new ParseException('Multiple documents are not supported.', $this->currentLineNb + 1, $this->currentLine, $this->filename);
                }

                if ($deprecatedUsage = (isset($this->currentLine[1]) && '?' === $this->currentLine[0] && ' ' === $this->currentLine[1])) {
                    throw new ParseException('Complex mappings are not supported.', $this->getRealCurrentLineNb() + 1, $this->currentLine);
                }

                // 1-liner optionally followed by newline(s)
                if (\is_string($value) && $this->lines[0] === trim($value)) {
                    try {
                        $value = Inline::parse($this->lines[0], $flags, $this->refs);
                    } catch (ParseException $e) {
                        $e->setParsedLine($this->getRealCurrentLineNb() + 1);
                        $e->setSnippet($this->currentLine);

                        throw $e;
                    }

                    return $value;
                }

                // try to parse the value as a multi-line string as a last resort
                if (0 === $this->currentLineNb) {
                    $previousLineWasNewline = false;
                    $previousLineWasTerminatedWithBackslash = false;
                    $value = '';

                    foreach ($this->lines as $line) {
                        // If the indentation is not consistent at offset 0, it is to be considered as a ParseError
                        if (0 === $this->offset && !$deprecatedUsage && isset($line[0]) && ' ' === $line[0]) {
                            throw new ParseException('Unable to parse.', $this->getRealCurrentLineNb() + 1, $this->currentLine, $this->filename);
                        }
                        if ('' === trim($line)) {
                            $value .= "\n";
                        } elseif (!$previousLineWasNewline && !$previousLineWasTerminatedWithBackslash) {
                            $value .= ' ';
                        }

                        if ('' !== trim($line) && '\\' === substr($line, -1)) {
                            $value .= ltrim(substr($line, 0, -1));
                        } elseif ('' !== trim($line)) {
                            $value .= trim($line);
                        }

                        if ('' === trim($line)) {
                            $previousLineWasNewline = true;
                            $previousLineWasTerminatedWithBackslash = false;
                        } elseif ('\\' === substr($line, -1)) {
                            $previousLineWasNewline = false;
                            $previousLineWasTerminatedWithBackslash = true;
                        } else {
                            $previousLineWasNewline = false;
                            $previousLineWasTerminatedWithBackslash = false;
                        }
                    }

                    try {
                        return Inline::parse(trim($value));
                    } catch (ParseException $e) {
                        // fall-through to the ParseException thrown below
                    }
                }

                throw new ParseException('Unable to parse.', $this->getRealCurrentLineNb() + 1, $this->currentLine, $this->filename);
            }
        } while ($this->moveToNextLine());

        if (null !== $tag) {
            $data = new TaggedValue($tag, $data);
        }

        if (Yaml::PARSE_OBJECT_FOR_MAP & $flags && !\is_object($data) && 'mapping' === $context) {
            $object = new \stdClass();

            foreach ($data as $key => $value) {
                $object->$key = $value;
            }

            $data = $object;
        }

        return empty($data) ? null : $data;
    }

    private function parseBlock(int $offset, string $yaml, int $flags)
    {
        $skippedLineNumbers = $this->skippedLineNumbers;

        foreach ($this->locallySkippedLineNumbers as $lineNumber) {
            if ($lineNumber < $offset) {
                continue;
            }

            $skippedLineNumbers[] = $lineNumber;
        }

        $parser = new self();
        $parser->offset = $offset;
        $parser->totalNumberOfLines = $this->totalNumberOfLines;
        $parser->skippedLineNumbers = $skippedLineNumbers;
        $parser->refs = &$this->refs;
        $parser->refsBeingParsed = $this->refsBeingParsed;

        return $parser->doParse($yaml, $flags);
    }

    /**
     * Returns the current line number (takes the offset into account).
     *
     * @internal
     *
     * @return int The current line number
     */
    public function getRealCurrentLineNb(): int
    {
        $realCurrentLineNumber = $this->currentLineNb + $this->offset;

        foreach ($this->skippedLineNumbers as $skippedLineNumber) {
            if ($skippedLineNumber > $realCurrentLineNumber) {
                break;
            }

            ++$realCurrentLineNumber;
        }

        return $realCurrentLineNumber;
    }

    /**
     * Returns the current line indentation.
     *
     * @return int The current line indentation
     */
    private function getCurrentLineIndentation(): int
    {
        return \strlen($this->currentLine) - \strlen(ltrim($this->currentLine, ' '));
    }

    /**
     * Returns the next embed block of YAML.
     *
     * @param int|null $indentation The indent level at which the block is to be read, or null for default
     * @param bool     $inSequence  True if the enclosing data structure is a sequence
     *
     * @return string A YAML string
     *
     * @throws ParseException When indentation problem are detected
     */
    private function getNextEmbedBlock(int $indentation = null, bool $inSequence = false): ?string
    {
        $oldLineIndentation = $this->getCurrentLineIndentation();

        if (!$this->moveToNextLine()) {
            return null;
        }

        if (null === $indentation) {
            $newIndent = null;
            $movements = 0;

            do {
                $EOF = false;

                // empty and comment-like lines do not influence the indentation depth
                if ($this->isCurrentLineEmpty() || $this->isCurrentLineComment()) {
                    $EOF = !$this->moveToNextLine();

                    if (!$EOF) {
                        ++$movements;
                    }
                } else {
                    $newIndent = $this->getCurrentLineIndentation();
                }
            } while (!$EOF && null === $newIndent);

            for ($i = 0; $i < $movements; ++$i) {
                $this->moveToPreviousLine();
            }

            $unindentedEmbedBlock = $this->isStringUnIndentedCollectionItem();

            if (!$this->isCurrentLineEmpty() && 0 === $newIndent && !$unindentedEmbedBlock) {
                throw new ParseException('Indentation problem.', $this->getRealCurrentLineNb() + 1, $this->currentLine, $this->filename);
            }
        } else {
            $newIndent = $indentation;
        }

        $data = [];
        if ($this->getCurrentLineIndentation() >= $newIndent) {
            $data[] = substr($this->currentLine, $newIndent);
        } elseif ($this->isCurrentLineEmpty() || $this->isCurrentLineComment()) {
            $data[] = $this->currentLine;
        } else {
            $this->moveToPreviousLine();

            return null;
        }

        if ($inSequence && $oldLineIndentation === $newIndent && isset($data[0][0]) && '-' === $data[0][0]) {
            // the previous line contained a dash but no item content, this line is a sequence item with the same indentation
            // and therefore no nested list or mapping
            $this->moveToPreviousLine();

            return null;
        }

        $isItUnindentedCollection = $this->isStringUnIndentedCollectionItem();

        while ($this->moveToNextLine()) {
            $indent = $this->getCurrentLineIndentation();

            if ($isItUnindentedCollection && !$this->isCurrentLineEmpty() && !$this->isStringUnIndentedCollectionItem() && $newIndent === $indent) {
                $this->moveToPreviousLine();
                break;
            }

            if ($this->isCurrentLineBlank()) {
                $data[] = substr($this->currentLine, $newIndent);
                continue;
            }

            if ($indent >= $newIndent) {
                $data[] = substr($this->currentLine, $newIndent);
            } elseif ($this->isCurrentLineComment()) {
                $data[] = $this->currentLine;
            } elseif (0 == $indent) {
                $this->moveToPreviousLine();

                break;
            } else {
                throw new ParseException('Indentation problem.', $this->getRealCurrentLineNb() + 1, $this->currentLine, $this->filename);
            }
        }

        return implode("\n", $data);
    }

    /**
     * Moves the parser to the next line.
     *
     * @return bool
     */
    private function moveToNextLine(): bool
    {
        if ($this->currentLineNb >= \count($this->lines) - 1) {
            return false;
        }

        $this->currentLine = $this->lines[++$this->currentLineNb];

        return true;
    }

    /**
     * Moves the parser to the previous line.
     *
     * @return bool
     */
    private function moveToPreviousLine(): bool
    {
        if ($this->currentLineNb < 1) {
            return false;
        }

        $this->currentLine = $this->lines[--$this->currentLineNb];

        return true;
    }

    /**
     * Parses a YAML value.
     *
     * @param string $value   A YAML value
     * @param int    $flags   A bit field of PARSE_* constants to customize the YAML parser behavior
     * @param string $context The parser context (either sequence or mapping)
     *
     * @return mixed A PHP value
     *
     * @throws ParseException When reference does not exist
     */
    private function parseValue(string $value, int $flags, string $context)
    {
        if (0 === strpos($value, '*')) {
            if (false !== $pos = strpos($value, '#')) {
                $value = substr($value, 1, $pos - 2);
            } else {
                $value = substr($value, 1);
            }

            if (!array_key_exists($value, $this->refs)) {
                if (false !== $pos = array_search($value, $this->refsBeingParsed, true)) {
                    throw new ParseException(sprintf('Circular reference [%s, %s] detected for reference "%s".', implode(', ', \array_slice($this->refsBeingParsed, $pos)), $value, $value), $this->currentLineNb + 1, $this->currentLine, $this->filename);
                }

                throw new ParseException(sprintf('Reference "%s" does not exist.', $value), $this->currentLineNb + 1, $this->currentLine, $this->filename);
            }

            return $this->refs[$value];
        }

        if (\in_array($value[0], ['!', '|', '>'], true) && self::preg_match('/^(?:'.self::TAG_PATTERN.' +)?'.self::BLOCK_SCALAR_HEADER_PATTERN.'$/', $value, $matches)) {
            $modifiers = isset($matches['modifiers']) ? $matches['modifiers'] : '';

            $data = $this->parseBlockScalar($matches['separator'], preg_replace('#\d+#', '', $modifiers), (int) abs($modifiers));

            if ('' !== $matches['tag'] && '!' !== $matches['tag']) {
                if ('!!binary' === $matches['tag']) {
                    return Inline::evaluateBinaryScalar($data);
                }

                return new TaggedValue(substr($matches['tag'], 1), $data);
            }

            return $data;
        }

        try {
            $quotation = '' !== $value && ('"' === $value[0] || "'" === $value[0]) ? $value[0] : null;

            // do not take following lines into account when the current line is a quoted single line value
            if (null !== $quotation && self::preg_match('/^'.$quotation.'.*'.$quotation.'(\s*#.*)?$/', $value)) {
                return Inline::parse($value, $flags, $this->refs);
            }

            $lines = [];

            while ($this->moveToNextLine()) {
                // unquoted strings end before the first unindented line
                if (null === $quotation && 0 === $this->getCurrentLineIndentation()) {
                    $this->moveToPreviousLine();

                    break;
                }

                $lines[] = trim($this->currentLine);

                // quoted string values end with a line that is terminated with the quotation character
                if ('' !== $this->currentLine && substr($this->currentLine, -1) === $quotation) {
                    break;
                }
            }

            for ($i = 0, $linesCount = \count($lines), $previousLineBlank = false; $i < $linesCount; ++$i) {
                if ('' === $lines[$i]) {
                    $value .= "\n";
                    $previousLineBlank = true;
                } elseif ($previousLineBlank) {
                    $value .= $lines[$i];
                    $previousLineBlank = false;
                } else {
                    $value .= ' '.$lines[$i];
                    $previousLineBlank = false;
                }
            }

            Inline::$parsedLineNumber = $this->getRealCurrentLineNb();

            $parsedValue = Inline::parse($value, $flags, $this->refs);

            if ('mapping' === $context && \is_string($parsedValue) && '"' !== $value[0] && "'" !== $value[0] && '[' !== $value[0] && '{' !== $value[0] && '!' !== $value[0] && false !== strpos($parsedValue, ': ')) {
                throw new ParseException('A colon cannot be used in an unquoted mapping value.', $this->getRealCurrentLineNb() + 1, $value, $this->filename);
            }

            return $parsedValue;
        } catch (ParseException $e) {
            $e->setParsedLine($this->getRealCurrentLineNb() + 1);
            $e->setSnippet($this->currentLine);

            throw $e;
        }
    }

    /**
     * Parses a block scalar.
     *
     * @param string $style       The style indicator that was used to begin this block scalar (| or >)
     * @param string $chomping    The chomping indicator that was used to begin this block scalar (+ or -)
     * @param int    $indentation The indentation indicator that was used to begin this block scalar
     *
     * @return string The text value
     */
    private function parseBlockScalar(string $style, string $chomping = '', int $indentation = 0): string
    {
        $notEOF = $this->moveToNextLine();
        if (!$notEOF) {
            return '';
        }

        $isCurrentLineBlank = $this->isCurrentLineBlank();
        $blockLines = [];

        // leading blank lines are consumed before determining indentation
        while ($notEOF && $isCurrentLineBlank) {
            // newline only if not EOF
            if ($notEOF = $this->moveToNextLine()) {
                $blockLines[] = '';
                $isCurrentLineBlank = $this->isCurrentLineBlank();
            }
        }

        // determine indentation if not specified
        if (0 === $indentation) {
            $currentLineLength = \strlen($this->currentLine);

            for ($i = 0; $i < $currentLineLength && ' ' === $this->currentLine[$i]; ++$i) {
                ++$indentation;
            }
        }

        if ($indentation > 0) {
            $pattern = sprintf('/^ {%d}(.*)$/', $indentation);

            while (
                $notEOF && (
                    $isCurrentLineBlank ||
                    self::preg_match($pattern, $this->currentLine, $matches)
                )
            ) {
                if ($isCurrentLineBlank && \strlen($this->currentLine) > $indentation) {
                    $blockLines[] = substr($this->currentLine, $indentation);
                } elseif ($isCurrentLineBlank) {
                    $blockLines[] = '';
                } else {
                    $blockLines[] = $matches[1];
                }

                // newline only if not EOF
                if ($notEOF = $this->moveToNextLine()) {
                    $isCurrentLineBlank = $this->isCurrentLineBlank();
                }
            }
        } elseif ($notEOF) {
            $blockLines[] = '';
        }

        if ($notEOF) {
            $blockLines[] = '';
            $this->moveToPreviousLine();
        } elseif (!$notEOF && !$this->isCurrentLineLastLineInDocument()) {
            $blockLines[] = '';
        }

        // folded style
        if ('>' === $style) {
            $text = '';
            $previousLineIndented = false;
            $previousLineBlank = false;

            for ($i = 0, $blockLinesCount = \count($blockLines); $i < $blockLinesCount; ++$i) {
                if ('' === $blockLines[$i]) {
                    $text .= "\n";
                    $previousLineIndented = false;
                    $previousLineBlank = true;
                } elseif (' ' === $blockLines[$i][0]) {
                    $text .= "\n".$blockLines[$i];
                    $previousLineIndented = true;
                    $previousLineBlank = false;
                } elseif ($previousLineIndented) {
                    $text .= "\n".$blockLines[$i];
                    $previousLineIndented = false;
                    $previousLineBlank = false;
                } elseif ($previousLineBlank || 0 === $i) {
                    $text .= $blockLines[$i];
                    $previousLineIndented = false;
                    $previousLineBlank = false;
                } else {
                    $text .= ' '.$blockLines[$i];
                    $previousLineIndented = false;
                    $previousLineBlank = false;
                }
            }
        } else {
            $text = implode("\n", $blockLines);
        }

        // deal with trailing newlines
        if ('' === $chomping) {
            $text = preg_replace('/\n+$/', "\n", $text);
        } elseif ('-' === $chomping) {
            $text = preg_replace('/\n+$/', '', $text);
        }

        return $text;
    }

    /**
     * Returns true if the next line is indented.
     *
     * @return bool Returns true if the next line is indented, false otherwise
     */
    private function isNextLineIndented(): bool
    {
        $currentIndentation = $this->getCurrentLineIndentation();
        $movements = 0;

        do {
            $EOF = !$this->moveToNextLine();

            if (!$EOF) {
                ++$movements;
            }
        } while (!$EOF && ($this->isCurrentLineEmpty() || $this->isCurrentLineComment()));

        if ($EOF) {
            return false;
        }

        $ret = $this->getCurrentLineIndentation() > $currentIndentation;

        for ($i = 0; $i < $movements; ++$i) {
            $this->moveToPreviousLine();
        }

        return $ret;
    }

    /**
     * Returns true if the current line is blank or if it is a comment line.
     *
     * @return bool Returns true if the current line is empty or if it is a comment line, false otherwise
     */
    private function isCurrentLineEmpty(): bool
    {
        return $this->isCurrentLineBlank() || $this->isCurrentLineComment();
    }

    /**
     * Returns true if the current line is blank.
     *
     * @return bool Returns true if the current line is blank, false otherwise
     */
    private function isCurrentLineBlank(): bool
    {
        return '' == trim($this->currentLine, ' ');
    }

    /**
     * Returns true if the current line is a comment line.
     *
     * @return bool Returns true if the current line is a comment line, false otherwise
     */
    private function isCurrentLineComment(): bool
    {
        //checking explicitly the first char of the trim is faster than loops or strpos
        $ltrimmedLine = ltrim($this->currentLine, ' ');

        return '' !== $ltrimmedLine && '#' === $ltrimmedLine[0];
    }

    private function isCurrentLineLastLineInDocument(): bool
    {
        return ($this->offset + $this->currentLineNb) >= ($this->totalNumberOfLines - 1);
    }

    /**
     * Cleanups a YAML string to be parsed.
     *
     * @param string $value The input YAML string
     *
     * @return string A cleaned up YAML string
     */
    private function cleanup(string $value): string
    {
        $value = str_replace(["\r\n", "\r"], "\n", $value);

        // strip YAML header
        $count = 0;
        $value = preg_replace('#^\%YAML[: ][\d\.]+.*\n#u', '', $value, -1, $count);
        $this->offset += $count;

        // remove leading comments
        $trimmedValue = preg_replace('#^(\#.*?\n)+#s', '', $value, -1, $count);
        if (1 === $count) {
            // items have been removed, update the offset
            $this->offset += substr_count($value, "\n") - substr_count($trimmedValue, "\n");
            $value = $trimmedValue;
        }

        // remove start of the document marker (---)
        $trimmedValue = preg_replace('#^\-\-\-.*?\n#s', '', $value, -1, $count);
        if (1 === $count) {
            // items have been removed, update the offset
            $this->offset += substr_count($value, "\n") - substr_count($trimmedValue, "\n");
            $value = $trimmedValue;

            // remove end of the document marker (...)
            $value = preg_replace('#\.\.\.\s*$#', '', $value);
        }

        return $value;
    }

    /**
     * Returns true if the next line starts unindented collection.
     *
     * @return bool Returns true if the next line starts unindented collection, false otherwise
     */
    private function isNextLineUnIndentedCollection(): bool
    {
        $currentIndentation = $this->getCurrentLineIndentation();
        $movements = 0;

        do {
            $EOF = !$this->moveToNextLine();

            if (!$EOF) {
                ++$movements;
            }
        } while (!$EOF && ($this->isCurrentLineEmpty() || $this->isCurrentLineComment()));

        if ($EOF) {
            return false;
        }

        $ret = $this->getCurrentLineIndentation() === $currentIndentation && $this->isStringUnIndentedCollectionItem();

        for ($i = 0; $i < $movements; ++$i) {
            $this->moveToPreviousLine();
        }

        return $ret;
    }

    /**
     * Returns true if the string is un-indented collection item.
     *
     * @return bool Returns true if the string is un-indented collection item, false otherwise
     */
    private function isStringUnIndentedCollectionItem(): bool
    {
        return '-' === rtrim($this->currentLine) || 0 === strpos($this->currentLine, '- ');
    }

    /**
     * A local wrapper for "preg_match" which will throw a ParseException if there
     * is an internal error in the PCRE engine.
     *
     * This avoids us needing to check for "false" every time PCRE is used
     * in the YAML engine
     *
     * @throws ParseException on a PCRE internal error
     *
     * @see preg_last_error()
     *
     * @internal
     */
    public static function preg_match(string $pattern, string $subject, array &$matches = null, int $flags = 0, int $offset = 0): int
    {
        if (false === $ret = preg_match($pattern, $subject, $matches, $flags, $offset)) {
            switch (preg_last_error()) {
                case PREG_INTERNAL_ERROR:
                    $error = 'Internal PCRE error.';
                    break;
                case PREG_BACKTRACK_LIMIT_ERROR:
                    $error = 'pcre.backtrack_limit reached.';
                    break;
                case PREG_RECURSION_LIMIT_ERROR:
                    $error = 'pcre.recursion_limit reached.';
                    break;
                case PREG_BAD_UTF8_ERROR:
                    $error = 'Malformed UTF-8 data.';
                    break;
                case PREG_BAD_UTF8_OFFSET_ERROR:
                    $error = 'Offset doesn\'t correspond to the begin of a valid UTF-8 code point.';
                    break;
                default:
                    $error = 'Error.';
            }

            throw new ParseException($error);
        }

        return $ret;
    }

    /**
     * Trim the tag on top of the value.
     *
     * Prevent values such as "!foo {quz: bar}" to be considered as
     * a mapping block.
     */
    private function trimTag(string $value): string
    {
        if ('!' === $value[0]) {
            return ltrim(substr($value, 1, strcspn($value, " \r\n", 1)), ' ');
        }

        return $value;
    }

    private function getLineTag(string $value, int $flags, bool $nextLineCheck = true): ?string
    {
        if ('' === $value || '!' !== $value[0] || 1 !== self::preg_match('/^'.self::TAG_PATTERN.' *( +#.*)?$/', $value, $matches)) {
            return null;
        }

        if ($nextLineCheck && !$this->isNextLineIndented()) {
            return null;
        }

        $tag = substr($matches['tag'], 1);

        // Built-in tags
        if ($tag && '!' === $tag[0]) {
            throw new ParseException(sprintf('The built-in tag "!%s" is not implemented.', $tag), $this->getRealCurrentLineNb() + 1, $value, $this->filename);
        }

        if (Yaml::PARSE_CUSTOM_TAGS & $flags) {
            return $tag;
        }

        throw new ParseException(sprintf('Tags support is not enabled. You must use the flag "Yaml::PARSE_CUSTOM_TAGS" to use "%s".', $matches['tag']), $this->getRealCurrentLineNb() + 1, $value, $this->filename);
    }
}
Yaml Component
==============

The Yaml component loads and dumps YAML files.

Resources
---------

  * [Documentation](https://symfony.com/doc/current/components/yaml/index.html)
  * [Contributing](https://symfony.com/doc/current/contributing/index.html)
  * [Report issues](https://github.com/symfony/symfony/issues) and
    [send Pull Requests](https://github.com/symfony/symfony/pulls)
    in the [main Symfony repository](https://github.com/symfony/symfony)
<?php

/*
 * This file is part of the Symfony package.
 *
 * (c) Fabien Potencier <fabien@symfony.com>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

namespace Symfony\Component\Yaml\Tag;

/**
 * @author Nicolas Grekas <p@tchwork.com>
 * @author Guilhem N. <egetick@gmail.com>
 */
final class TaggedValue
{
    private $tag;
    private $value;

    public function __construct(string $tag, $value)
    {
        $this->tag = $tag;
        $this->value = $value;
    }

    public function getTag(): string
    {
        return $this->tag;
    }

    public function getValue()
    {
        return $this->value;
    }
}
<?php

/*
 * This file is part of the Symfony package.
 *
 * (c) Fabien Potencier <fabien@symfony.com>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

namespace Symfony\Component\Yaml\Tests\Command;

use PHPUnit\Framework\TestCase;
use Symfony\Component\Console\Application;
use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Component\Console\Tester\CommandTester;
use Symfony\Component\Yaml\Command\LintCommand;

/**
 * Tests the YamlLintCommand.
 *
 * @author Robin Chalas <robin.chalas@gmail.com>
 */
class LintCommandTest extends TestCase
{
    private $files;

    public function testLintCorrectFile()
    {
        $tester = $this->createCommandTester();
        $filename = $this->createFile('foo: bar');

        $ret = $tester->execute(['filename' => $filename], ['verbosity' => OutputInterface::VERBOSITY_VERBOSE, 'decorated' => false]);

        $this->assertEquals(0, $ret, 'Returns 0 in case of success');
        $this->assertRegExp('/^\/\/ OK in /', trim($tester->getDisplay()));
    }

    public function testLintCorrectFiles()
    {
        $tester = $this->createCommandTester();
        $filename1 = $this->createFile('foo: bar');
        $filename2 = $this->createFile('bar: baz');

        $ret = $tester->execute(['filename' => [$filename1, $filename2]], ['verbosity' => OutputInterface::VERBOSITY_VERBOSE, 'decorated' => false]);

        $this->assertEquals(0, $ret, 'Returns 0 in case of success');
        $this->assertRegExp('/^\/\/ OK in /', trim($tester->getDisplay()));
    }

    public function testLintIncorrectFile()
    {
        $incorrectContent = '
foo:
bar';
        $tester = $this->createCommandTester();
        $filename = $this->createFile($incorrectContent);

        $ret = $tester->execute(['filename' => $filename], ['decorated' => false]);

        $this->assertEquals(1, $ret, 'Returns 1 in case of error');
        $this->assertContains('Unable to parse at line 3 (near "bar").', trim($tester->getDisplay()));
    }

    public function testConstantAsKey()
    {
        $yaml = <<<YAML
!php/const 'Symfony\Component\Yaml\Tests\Command\Foo::TEST': bar
YAML;
        $ret = $this->createCommandTester()->execute(['filename' => $this->createFile($yaml)], ['verbosity' => OutputInterface::VERBOSITY_VERBOSE, 'decorated' => false]);
        $this->assertSame(0, $ret, 'lint:yaml exits with code 0 in case of success');
    }

    public function testCustomTags()
    {
        $yaml = <<<YAML
foo: !my_tag {foo: bar}
YAML;
        $ret = $this->createCommandTester()->execute(['filename' => $this->createFile($yaml), '--parse-tags' => true], ['verbosity' => OutputInterface::VERBOSITY_VERBOSE, 'decorated' => false]);
        $this->assertSame(0, $ret, 'lint:yaml exits with code 0 in case of success');
    }

    public function testCustomTagsError()
    {
        $yaml = <<<YAML
foo: !my_tag {foo: bar}
YAML;
        $ret = $this->createCommandTester()->execute(['filename' => $this->createFile($yaml)], ['verbosity' => OutputInterface::VERBOSITY_VERBOSE, 'decorated' => false]);
        $this->assertSame(1, $ret, 'lint:yaml exits with code 1 in case of error');
    }

    /**
     * @expectedException \RuntimeException
     */
    public function testLintFileNotReadable()
    {
        $tester = $this->createCommandTester();
        $filename = $this->createFile('');
        unlink($filename);

        $ret = $tester->execute(['filename' => $filename], ['decorated' => false]);
    }

    /**
     * @return string Path to the new file
     */
    private function createFile($content)
    {
        $filename = tempnam(sys_get_temp_dir().'/framework-yml-lint-test', 'sf-');
        file_put_contents($filename, $content);

        $this->files[] = $filename;

        return $filename;
    }

    /**
     * @return CommandTester
     */
    protected function createCommandTester()
    {
        $application = new Application();
        $application->add(new LintCommand());
        $command = $application->find('lint:yaml');

        return new CommandTester($command);
    }

    protected function setUp()
    {
        $this->files = [];
        @mkdir(sys_get_temp_dir().'/framework-yml-lint-test');
    }

    protected function tearDown()
    {
        foreach ($this->files as $file) {
            if (file_exists($file)) {
                unlink($file);
            }
        }

        rmdir(sys_get_temp_dir().'/framework-yml-lint-test');
    }
}

class Foo
{
    const TEST = 'foo';
}
<?php

/*
 * This file is part of the Symfony package.
 *
 * (c) Fabien Potencier <fabien@symfony.com>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

namespace Symfony\Component\Yaml\Tests;

use PHPUnit\Framework\TestCase;
use Symfony\Component\Yaml\Dumper;
use Symfony\Component\Yaml\Parser;
use Symfony\Component\Yaml\Yaml;

class DumperTest extends TestCase
{
    protected $parser;
    protected $dumper;
    protected $path;

    protected $array = [
        '' => 'bar',
        'foo' => '#bar',
        'foo\'bar' => [],
        'bar' => [1, 'foo'],
        'foobar' => [
            'foo' => 'bar',
            'bar' => [1, 'foo'],
            'foobar' => [
                'foo' => 'bar',
                'bar' => [1, 'foo'],
            ],
        ],
    ];

    protected function setUp()
    {
        $this->parser = new Parser();
        $this->dumper = new Dumper();
        $this->path = __DIR__.'/Fixtures';
    }

    protected function tearDown()
    {
        $this->parser = null;
        $this->dumper = null;
        $this->path = null;
        $this->array = null;
    }

    public function testIndentationInConstructor()
    {
        $dumper = new Dumper(7);
        $expected = <<<'EOF'
'': bar
foo: '#bar'
'foo''bar': {  }
bar:
       - 1
       - foo
foobar:
       foo: bar
       bar:
              - 1
              - foo
       foobar:
              foo: bar
              bar:
                     - 1
                     - foo

EOF;
        $this->assertEquals($expected, $dumper->dump($this->array, 4, 0));
    }

    public function testSpecifications()
    {
        $files = $this->parser->parse(file_get_contents($this->path.'/index.yml'));
        foreach ($files as $file) {
            $yamls = file_get_contents($this->path.'/'.$file.'.yml');

            // split YAMLs documents
            foreach (preg_split('/^---( %YAML\:1\.0)?/m', $yamls) as $yaml) {
                if (!$yaml) {
                    continue;
                }

                $test = $this->parser->parse($yaml);
                if (isset($test['dump_skip']) && $test['dump_skip']) {
                    continue;
                } elseif (isset($test['todo']) && $test['todo']) {
                    // TODO
                } else {
                    eval('$expected = '.trim($test['php']).';');
                    $this->assertSame($expected, $this->parser->parse($this->dumper->dump($expected, 10)), $test['test']);
                }
            }
        }
    }

    public function testInlineLevel()
    {
        $expected = <<<'EOF'
{ '': bar, foo: '#bar', 'foo''bar': {  }, bar: [1, foo], foobar: { foo: bar, bar: [1, foo], foobar: { foo: bar, bar: [1, foo] } } }
EOF;
        $this->assertEquals($expected, $this->dumper->dump($this->array, -10), '->dump() takes an inline level argument');
        $this->assertEquals($expected, $this->dumper->dump($this->array, 0), '->dump() takes an inline level argument');

        $expected = <<<'EOF'
'': bar
foo: '#bar'
'foo''bar': {  }
bar: [1, foo]
foobar: { foo: bar, bar: [1, foo], foobar: { foo: bar, bar: [1, foo] } }

EOF;
        $this->assertEquals($expected, $this->dumper->dump($this->array, 1), '->dump() takes an inline level argument');

        $expected = <<<'EOF'
'': bar
foo: '#bar'
'foo''bar': {  }
bar:
    - 1
    - foo
foobar:
    foo: bar
    bar: [1, foo]
    foobar: { foo: bar, bar: [1, foo] }

EOF;
        $this->assertEquals($expected, $this->dumper->dump($this->array, 2), '->dump() takes an inline level argument');

        $expected = <<<'EOF'
'': bar
foo: '#bar'
'foo''bar': {  }
bar:
    - 1
    - foo
foobar:
    foo: bar
    bar:
        - 1
        - foo
    foobar:
        foo: bar
        bar: [1, foo]

EOF;
        $this->assertEquals($expected, $this->dumper->dump($this->array, 3), '->dump() takes an inline level argument');

        $expected = <<<'EOF'
'': bar
foo: '#bar'
'foo''bar': {  }
bar:
    - 1
    - foo
foobar:
    foo: bar
    bar:
        - 1
        - foo
    foobar:
        foo: bar
        bar:
            - 1
            - foo

EOF;
        $this->assertEquals($expected, $this->dumper->dump($this->array, 4), '->dump() takes an inline level argument');
        $this->assertEquals($expected, $this->dumper->dump($this->array, 10), '->dump() takes an inline level argument');
    }

    public function testObjectSupportEnabled()
    {
        $dump = $this->dumper->dump(['foo' => new A(), 'bar' => 1], 0, 0, Yaml::DUMP_OBJECT);

        $this->assertEquals('{ foo: !php/object \'O:30:"Symfony\Component\Yaml\Tests\A":1:{s:1:"a";s:3:"foo";}\', bar: 1 }', $dump, '->dump() is able to dump objects');
    }

    public function testObjectSupportDisabledButNoExceptions()
    {
        $dump = $this->dumper->dump(['foo' => new A(), 'bar' => 1]);

        $this->assertEquals('{ foo: null, bar: 1 }', $dump, '->dump() does not dump objects when disabled');
    }

    /**
     * @expectedException \Symfony\Component\Yaml\Exception\DumpException
     */
    public function testObjectSupportDisabledWithExceptions()
    {
        $this->dumper->dump(['foo' => new A(), 'bar' => 1], 0, 0, Yaml::DUMP_EXCEPTION_ON_INVALID_TYPE);
    }

    /**
     * @dataProvider getEscapeSequences
     */
    public function testEscapedEscapeSequencesInQuotedScalar($input, $expected)
    {
        $this->assertEquals($expected, $this->dumper->dump($input));
    }

    public function getEscapeSequences()
    {
        return [
            'empty string' => ['', "''"],
            'null' => ["\x0", '"\\0"'],
            'bell' => ["\x7", '"\\a"'],
            'backspace' => ["\x8", '"\\b"'],
            'horizontal-tab' => ["\t", '"\\t"'],
            'line-feed' => ["\n", '"\\n"'],
            'vertical-tab' => ["\v", '"\\v"'],
            'form-feed' => ["\xC", '"\\f"'],
            'carriage-return' => ["\r", '"\\r"'],
            'escape' => ["\x1B", '"\\e"'],
            'space' => [' ', "' '"],
            'double-quote' => ['"', "'\"'"],
            'slash' => ['/', '/'],
            'backslash' => ['\\', '\\'],
            'next-line' => ["\xC2\x85", '"\\N"'],
            'non-breaking-space' => ["\xc2\xa0", '"\\_"'],
            'line-separator' => ["\xE2\x80\xA8", '"\\L"'],
            'paragraph-separator' => ["\xE2\x80\xA9", '"\\P"'],
            'colon' => [':', "':'"],
        ];
    }

    public function testBinaryDataIsDumpedBase64Encoded()
    {
        $binaryData = file_get_contents(__DIR__.'/Fixtures/arrow.gif');
        $expected = '{ data: !!binary '.base64_encode($binaryData).' }';

        $this->assertSame($expected, $this->dumper->dump(['data' => $binaryData]));
    }

    public function testNonUtf8DataIsDumpedBase64Encoded()
    {
        // "für" (ISO-8859-1 encoded)
        $this->assertSame('!!binary ZsM/cg==', $this->dumper->dump("f\xc3\x3fr"));
    }

    /**
     * @dataProvider objectAsMapProvider
     */
    public function testDumpObjectAsMap($object, $expected)
    {
        $yaml = $this->dumper->dump($object, 0, 0, Yaml::DUMP_OBJECT_AS_MAP);

        $this->assertEquals($expected, Yaml::parse($yaml, Yaml::PARSE_OBJECT_FOR_MAP));
    }

    public function objectAsMapProvider()
    {
        $tests = [];

        $bar = new \stdClass();
        $bar->class = 'classBar';
        $bar->args = ['bar'];
        $zar = new \stdClass();
        $foo = new \stdClass();
        $foo->bar = $bar;
        $foo->zar = $zar;
        $object = new \stdClass();
        $object->foo = $foo;
        $tests['stdClass'] = [$object, $object];

        $arrayObject = new \ArrayObject();
        $arrayObject['foo'] = 'bar';
        $arrayObject['baz'] = 'foobar';
        $parsedArrayObject = new \stdClass();
        $parsedArrayObject->foo = 'bar';
        $parsedArrayObject->baz = 'foobar';
        $tests['ArrayObject'] = [$arrayObject, $parsedArrayObject];

        $a = new A();
        $tests['arbitrary-object'] = [$a, null];

        return $tests;
    }

    public function testDumpingArrayObjectInstancesRespectsInlineLevel()
    {
        $deep = new \ArrayObject(['deep1' => 'd', 'deep2' => 'e']);
        $inner = new \ArrayObject(['inner1' => 'b', 'inner2' => 'c', 'inner3' => $deep]);
        $outer = new \ArrayObject(['outer1' => 'a', 'outer2' => $inner]);

        $yaml = $this->dumper->dump($outer, 2, 0, Yaml::DUMP_OBJECT_AS_MAP);

        $expected = <<<YAML
outer1: a
outer2:
    inner1: b
    inner2: c
    inner3: { deep1: d, deep2: e }

YAML;
        $this->assertSame($expected, $yaml);
    }

    public function testDumpingArrayObjectInstancesWithNumericKeysInlined()
    {
        $deep = new \ArrayObject(['d', 'e']);
        $inner = new \ArrayObject(['b', 'c', $deep]);
        $outer = new \ArrayObject(['a', $inner]);

        $yaml = $this->dumper->dump($outer, 0, 0, Yaml::DUMP_OBJECT_AS_MAP);
        $expected = <<<YAML
{ 0: a, 1: { 0: b, 1: c, 2: { 0: d, 1: e } } }
YAML;
        $this->assertSame($expected, $yaml);
    }

    public function testDumpingArrayObjectInstancesWithNumericKeysRespectsInlineLevel()
    {
        $deep = new \ArrayObject(['d', 'e']);
        $inner = new \ArrayObject(['b', 'c', $deep]);
        $outer = new \ArrayObject(['a', $inner]);
        $yaml = $this->dumper->dump($outer, 2, 0, Yaml::DUMP_OBJECT_AS_MAP);
        $expected = <<<YAML
0: a
1:
    0: b
    1: c
    2: { 0: d, 1: e }

YAML;
        $this->assertEquals($expected, $yaml);
    }

    public function testDumpEmptyArrayObjectInstanceAsMap()
    {
        $this->assertSame('{  }', $this->dumper->dump(new \ArrayObject(), 2, 0, Yaml::DUMP_OBJECT_AS_MAP));
    }

    public function testDumpEmptyStdClassInstanceAsMap()
    {
        $this->assertSame('{  }', $this->dumper->dump(new \stdClass(), 2, 0, Yaml::DUMP_OBJECT_AS_MAP));
    }

    public function testDumpingStdClassInstancesRespectsInlineLevel()
    {
        $deep = new \stdClass();
        $deep->deep1 = 'd';
        $deep->deep2 = 'e';

        $inner = new \stdClass();
        $inner->inner1 = 'b';
        $inner->inner2 = 'c';
        $inner->inner3 = $deep;

        $outer = new \stdClass();
        $outer->outer1 = 'a';
        $outer->outer2 = $inner;

        $yaml = $this->dumper->dump($outer, 2, 0, Yaml::DUMP_OBJECT_AS_MAP);

        $expected = <<<YAML
outer1: a
outer2:
    inner1: b
    inner2: c
    inner3: { deep1: d, deep2: e }

YAML;
        $this->assertSame($expected, $yaml);
    }

    public function testDumpMultiLineStringAsScalarBlock()
    {
        $data = [
            'data' => [
                'single_line' => 'foo bar baz',
                'multi_line' => "foo\nline with trailing spaces:\n  \nbar\ninteger like line:\n123456789\nempty line:\n\nbaz",
                'multi_line_with_carriage_return' => "foo\nbar\r\nbaz",
                'nested_inlined_multi_line_string' => [
                    'inlined_multi_line' => "foo\nbar\r\nempty line:\n\nbaz",
                ],
            ],
        ];

        $this->assertSame(file_get_contents(__DIR__.'/Fixtures/multiple_lines_as_literal_block.yml'), $this->dumper->dump($data, 2, 0, Yaml::DUMP_MULTI_LINE_LITERAL_BLOCK));
    }

    public function testDumpMultiLineStringAsScalarBlockWhenFirstLineHasLeadingSpace()
    {
        $data = [
            'data' => [
                'multi_line' => "    the first line has leading spaces\nThe second line does not.",
            ],
        ];

        $this->assertSame(file_get_contents(__DIR__.'/Fixtures/multiple_lines_as_literal_block_leading_space_in_first_line.yml'), $this->dumper->dump($data, 2, 0, Yaml::DUMP_MULTI_LINE_LITERAL_BLOCK));
    }

    public function testCarriageReturnIsMaintainedWhenDumpingAsMultiLineLiteralBlock()
    {
        $this->assertSame("- \"a\\r\\nb\\nc\"\n", $this->dumper->dump(["a\r\nb\nc"], 2, 0, Yaml::DUMP_MULTI_LINE_LITERAL_BLOCK));
    }

    /**
     * @expectedException \InvalidArgumentException
     * @expectedExceptionMessage The indentation must be greater than zero
     */
    public function testZeroIndentationThrowsException()
    {
        new Dumper(0);
    }

    /**
     * @expectedException \InvalidArgumentException
     * @expectedExceptionMessage The indentation must be greater than zero
     */
    public function testNegativeIndentationThrowsException()
    {
        new Dumper(-4);
    }
}

class A
{
    public $a = 'foo';
}
--- %YAML:1.0
test: Simple Alias Example
brief: >
    If you need to refer to the same item of data twice,
    you can give that item an alias.  The alias is a plain
    string, starting with an ampersand.  The item may then
    be referred to by the alias throughout your document
    by using an asterisk before the name of the alias.
    This is called an anchor.
yaml: |
    - &showell Steve
    - Clark
    - Brian
    - Oren
    - *showell
php: |
    ['Steve', 'Clark', 'Brian', 'Oren', 'Steve']

---
test: Alias of a Mapping
brief: >
    An alias can be used on any item of data, including
    sequences, mappings, and other complex data types.
yaml: |
    - &hello
        Meat: pork
        Starch: potato
    - banana
    - *hello
php: |
    [['Meat'=>'pork', 'Starch'=>'potato'], 'banana', ['Meat'=>'pork', 'Starch'=>'potato']]
--- %YAML:1.0
test: Simple Sequence
brief: |
    You can specify a list in YAML by placing each
    member of the list on a new line with an opening
    dash. These lists are called sequences.
yaml: |
    - apple
    - banana
    - carrot
php: |
    ['apple', 'banana', 'carrot']
---
test: Sequence With Item Being Null In The Middle
brief: |
    You can specify a list in YAML by placing each
    member of the list on a new line with an opening
    dash. These lists are called sequences.
yaml: |
    - apple
    -
    - carrot
php: |
    ['apple', null, 'carrot']
---
test: Sequence With Last Item Being Null
brief: |
    You can specify a list in YAML by placing each
    member of the list on a new line with an opening
    dash. These lists are called sequences.
yaml: |
    - apple
    - banana
    -
php: |
    ['apple', 'banana', null]
---
test: Nested Sequences
brief: |
    You can include a sequence within another
    sequence by giving the sequence an empty
    dash, followed by an indented list.
yaml: |
    -
     - foo
     - bar
     - baz
php: |
    [['foo', 'bar', 'baz']]
---
test: Mixed Sequences
brief: |
    Sequences can contain any YAML data,
    including strings and other sequences.
yaml: |
    - apple
    -
     - foo
     - bar
     - x123
    - banana
    - carrot
php: |
    ['apple', ['foo', 'bar', 'x123'], 'banana', 'carrot']
---
test: Deeply Nested Sequences
brief: |
    Sequences can be nested even deeper, with each
    level of indentation representing a level of
    depth.
yaml: |
    -
     -
      - uno
      - dos
php: |
    [[['uno', 'dos']]]
---
test: Simple Mapping
brief: |
    You can add a keyed list (also known as a dictionary or
    hash) to your document by placing each member of the
    list on a new line, with a colon separating the key
    from its value.  In YAML, this type of list is called
    a mapping.
yaml: |
    foo: whatever
    bar: stuff
php: |
    ['foo' => 'whatever', 'bar' => 'stuff']
---
test: Sequence in a Mapping
brief: |
    A value in a mapping can be a sequence.
yaml: |
    foo: whatever
    bar:
     - uno
     - dos
php: |
    ['foo' => 'whatever', 'bar' => ['uno', 'dos']]
---
test: Nested Mappings
brief: |
    A value in a mapping can be another mapping.
yaml: |
    foo: whatever
    bar:
     fruit: apple
     name: steve
     sport: baseball
php: |
    [
      'foo' => 'whatever',
      'bar' => [
         'fruit' => 'apple',
         'name' => 'steve',
         'sport' => 'baseball'
      ]
    ]
---
test: Mixed Mapping
brief: |
    A mapping can contain any assortment
    of mappings and sequences as values.
yaml: |
    foo: whatever
    bar:
     -
       fruit: apple
       name: steve
       sport: baseball
     - more
     -
       python: rocks
       perl: papers
       ruby: scissorses
php: |
    [
      'foo' => 'whatever',
      'bar' => [
        [
            'fruit' => 'apple',
            'name' => 'steve',
            'sport' => 'baseball'
        ],
        'more',
        [
            'python' => 'rocks',
            'perl' => 'papers',
            'ruby' => 'scissorses'
        ]
      ]
    ]
---
test: Mapping-in-Sequence Shortcut
todo: true
brief: |
     If you are adding a mapping to a sequence, you
     can place the mapping on the same line as the
     dash as a shortcut.
yaml: |
     - work on YAML.py:
        - work on Store
php: |
    [['work on YAML.py' => ['work on Store']]]
---
test: Sequence-in-Mapping Shortcut
todo: true
brief: |
     The dash in a sequence counts as indentation, so
     you can add a sequence inside of a mapping without
     needing spaces as indentation.
yaml: |
     allow:
     - 'localhost'
     - '%.sourceforge.net'
     - '%.freepan.org'
php: |
     ['allow' => ['localhost', '%.sourceforge.net', '%.freepan.org']]
---
todo: true
test: Merge key
brief: |
     A merge key ('<<') can be used in a mapping to insert other mappings.  If
     the value associated with the merge key is a mapping, each of its key/value
     pairs is inserted into the current mapping.
yaml: |
     mapping:
       name: Joe
       job: Accountant
       <<:
         age: 38
php: |
     [
       'mapping' =>
       [
         'name' => 'Joe',
         'job' => 'Accountant',
         'age' => 38
       ]
     ]
---
test: One Element Mapping
brief: |
    A mapping with one key/value pair
yaml: |
    foo: bar
php: |
    ['foo' => 'bar']
---
test: Multi Element Mapping
brief: |
    More than one key/value pair
yaml: |
    red: baron
    white: walls
    blue: berries
php: |
    [
     'red' => 'baron',
     'white' => 'walls',
     'blue' => 'berries',
    ]
---
test: Values aligned
brief: |
    Often times human editors of documents will align the values even
    though YAML emitters generally don't.
yaml: |
    red:   baron
    white: walls
    blue:  berries
php: |
    [
     'red' => 'baron',
     'white' => 'walls',
     'blue' => 'berries',
    ]
---
test: Colons aligned
brief: |
    Spaces can come before the ': ' key/value separator.
yaml: |
    red   : baron
    white : walls
    blue  : berries
php: |
    [
     'red' => 'baron',
     'white' => 'walls',
     'blue' => 'berries',
    ]
--- %YAML:1.0
test: Trailing Document Separator
todo: true
brief: >
    You can separate YAML documents
    with a string of three dashes.
yaml: |
    - foo: 1
      bar: 2
    ---
    more: stuff
python: |
    [
        [ { 'foo': 1, 'bar': 2 } ],
        { 'more': 'stuff' }
    ]
ruby: |
    [ { 'foo' => 1, 'bar' => 2 } ]

---
test: Leading Document Separator
todo: true
brief: >
    You can explicitly give an opening
    document separator to your YAML stream.
yaml: |
    ---
    - foo: 1
      bar: 2
    ---
    more: stuff
python: |
    [
        [ {'foo': 1, 'bar': 2}],
        {'more': 'stuff'}
    ]
ruby: |
    [ { 'foo' => 1, 'bar' => 2 } ]

---
test: YAML Header
todo: true
brief: >
    The opening separator can contain directives
    to the YAML parser, such as the version
    number.
yaml: |
    --- %YAML:1.0
    foo: 1
    bar: 2
php: |
    ['foo' => 1, 'bar' => 2]
documents: 1

---
test: Red Herring Document Separator
brief: >
    Separators included in blocks or strings
    are treated as blocks or strings, as the
    document separator should have no indentation
    preceding it.
yaml: |
    foo: |
        ---
php: |
    ['foo' => "---\n"]

---
test: Multiple Document Separators in Block
brief: >
    This technique allows you to embed other YAML
    documents within literal blocks.
yaml: |
    foo: |
        ---
        foo: bar
        ---
        yo: baz
    bar: |
        fooness
php: |
    [
       'foo' => "---\nfoo: bar\n---\nyo: baz\n",
       'bar' => "fooness\n"
    ]
---
test: Missing value for hash item
todo: true
brief: |
    Third item in this hash doesn't have a value
yaml: |
    okay: value
    also okay: ~
    causes error because no value specified
    last key: value okay here too
python-error: causes error because no value specified

---
test: Not indenting enough
brief: |
    There was a bug in PyYaml where it was off by one
    in the indentation check.  It was allowing the YAML
    below.
# This is actually valid YAML now. Someone should tell showell.
yaml: |
    foo:
    firstline: 1
    secondline: 2
php: |
  ['foo' => null, 'firstline' => 1, 'secondline' => 2]
---
test: Simple Inline Array
brief: >
    Sequences can be contained on a
    single line, using the inline syntax.
    Separate each entry with commas and
    enclose in square brackets.
yaml: |
    seq: [ a, b, c ]
php: |
    ['seq' => ['a', 'b', 'c']]
---
test: Simple Inline Hash
brief: >
    Mapping can also be contained on
    a single line, using the inline
    syntax.  Each key-value pair is
    separated by a colon, with a comma
    between each entry in the mapping.
    Enclose with curly braces.
yaml: |
    hash: { name: Steve, foo: bar }
php: |
    ['hash' => ['name' => 'Steve', 'foo' => 'bar']]
---
test: Multi-line Inline Collections
todo: true
brief: >
    Both inline sequences and inline mappings
    can span multiple lines, provided that you
    indent the additional lines.
yaml: |
    languages: [ Ruby,
                 Perl,
                 Python ]
    websites: { YAML: yaml.org,
                Ruby: ruby-lang.org,
                Python: python.org,
                Perl: use.perl.org }
php: |
    [
      'languages' => ['Ruby', 'Perl', 'Python'],
      'websites' => [
        'YAML' => 'yaml.org',
        'Ruby' => 'ruby-lang.org',
        'Python' => 'python.org',
        'Perl' => 'use.perl.org'
      ]
    ]
---
test: Commas in Values (not in the spec!)
todo: true
brief: >
    List items in collections are delimited by commas, but
    there must be a space after each comma.  This allows you
    to add numbers without quoting.
yaml: |
    attendances: [ 45,123, 70,000, 17,222 ]
php: |
    ['attendances' => [45123, 70000, 17222]]
--- %YAML:1.0
test: Single ending newline
brief: >
    A pipe character, followed by an indented
    block of text is treated as a literal
    block, in which newlines are preserved
    throughout the block, including the final
    newline.
yaml: |
    ---
    this: |
        Foo
        Bar
php: |
    ['this' => "Foo\nBar\n"]
---
test: The '+' indicator
brief: >
    The '+' indicator says to keep newlines at the end of text
    blocks.
yaml: |
    normal: |
      extra new lines not kept

    preserving: |+
      extra new lines are kept


    dummy: value
php: |
    [
        'normal' => "extra new lines not kept\n",
        'preserving' => "extra new lines are kept\n\n\n",
        'dummy' => 'value'
    ]
---
test: Three trailing newlines in literals
brief: >
    To give you more control over how space
    is preserved in text blocks, YAML has
    the keep '+' and chomp '-' indicators.
    The keep indicator will preserve all
    ending newlines, while the chomp indicator
    will strip all ending newlines.
yaml: |
    clipped: |
        This has one newline.



    same as "clipped" above: "This has one newline.\n"

    stripped: |-
        This has no newline.



    same as "stripped" above: "This has no newline."

    kept: |+
        This has four newlines.



    same as "kept" above: "This has four newlines.\n\n\n\n"
php: |
    [
      'clipped' => "This has one newline.\n",
      'same as "clipped" above' => "This has one newline.\n",
      'stripped' => 'This has no newline.',
      'same as "stripped" above' => 'This has no newline.',
      'kept' => "This has four newlines.\n\n\n\n",
      'same as "kept" above' => "This has four newlines.\n\n\n\n"
    ]
---
test: Extra trailing newlines with spaces
todo: true
brief: >
    Normally, only a single newline is kept
    from the end of a literal block, unless the
    keep '+' character is used in combination
    with the pipe.  The following example
    will preserve all ending whitespace
    since the last line of both literal blocks
    contains spaces which extend past the indentation
    level.
yaml: |
    ---
    this: |
        Foo


    kept: |+
        Foo


php: |
    ['this' => "Foo\n\n  \n",
      'kept' => "Foo\n\n  \n"]

---
test: Folded Block in a Sequence
brief: >
    A greater-then character, followed by an indented
    block of text is treated as a folded block, in
    which lines of text separated by a single newline
    are concatenated as a single line.
yaml: |
    ---
    - apple
    - banana
    - >
        can't you see
        the beauty of yaml?
        hmm
    - dog
php: |
    [
        'apple',
        'banana',
        "can't you see the beauty of yaml? hmm\n",
        'dog'
    ]
---
test: Folded Block as a Mapping Value
brief: >
    Both literal and folded blocks can be
    used in collections, as values in a
    sequence or a mapping.
yaml: |
    ---
    quote: >
        Mark McGwire's
        year was crippled
        by a knee injury.
    source: espn
php: |
    [
        'quote' => "Mark McGwire's year was crippled by a knee injury.\n",
        'source' => 'espn'
    ]
---
test: Three trailing newlines in folded blocks
brief: >
    The keep and chomp indicators can also
    be applied to folded blocks.
yaml: |
    clipped: >
        This has one newline.



    same as "clipped" above: "This has one newline.\n"

    stripped: >-
        This has no newline.



    same as "stripped" above: "This has no newline."

    kept: >+
        This has four newlines.



    same as "kept" above: "This has four newlines.\n\n\n\n"
php: |
    [
      'clipped' => "This has one newline.\n",
      'same as "clipped" above' => "This has one newline.\n",
      'stripped' => 'This has no newline.',
      'same as "stripped" above' => 'This has no newline.',
      'kept' => "This has four newlines.\n\n\n\n",
      'same as "kept" above' => "This has four newlines.\n\n\n\n"
    ]
--- %YAML:1.0
test: Empty Sequence
brief: >
    You can represent the empty sequence
    with an empty inline sequence.
yaml: |
    empty: []
php: |
    ['empty' => []]
---
test: Empty Mapping
brief: >
    You can represent the empty mapping
    with an empty inline mapping.
yaml: |
    empty: {}
php: |
    ['empty' => []]
---
test: Empty Sequence as Entire Document
yaml: |
    []
php: |
    []
---
test: Empty Mapping as Entire Document
yaml: |
    {}
php: |
    []
---
test: Null as Document
yaml: |
    ~
php: |
    null
---
test: Empty String
brief: >
    You can represent an empty string
    with a pair of quotes.
yaml: |
    ''
php: |
    ''
--- %YAML:1.0
test: Sequence of scalars
spec: 2.1
yaml: |
  - Mark McGwire
  - Sammy Sosa
  - Ken Griffey
php: |
  ['Mark McGwire', 'Sammy Sosa', 'Ken Griffey']
---
test: Mapping of scalars to scalars
spec: 2.2
yaml: |
  hr:  65
  avg: 0.278
  rbi: 147
php: |
  ['hr' => 65, 'avg' => 0.278, 'rbi' => 147]
---
test: Mapping of scalars to sequences
spec: 2.3
yaml: |
    american:
       - Boston Red Sox
       - Detroit Tigers
       - New York Yankees
    national:
       - New York Mets
       - Chicago Cubs
       - Atlanta Braves
php: |
    ['american' =>
        [ 'Boston Red Sox', 'Detroit Tigers',
          'New York Yankees' ],
      'national' =>
        [ 'New York Mets', 'Chicago Cubs',
          'Atlanta Braves' ]
    ]
---
test: Sequence of mappings
spec: 2.4
yaml: |
    -
      name: Mark McGwire
      hr:   65
      avg:  0.278
    -
      name: Sammy Sosa
      hr:   63
      avg:  0.288
php: |
    [
      ['name' => 'Mark McGwire', 'hr' => 65, 'avg' => 0.278],
      ['name' => 'Sammy Sosa', 'hr' => 63, 'avg' => 0.288]
    ]
---
test: Legacy A5
todo: true
spec: legacy_A5
yaml: |
    ?
        - New York Yankees
        - Atlanta Braves
    :
      - 2001-07-02
      - 2001-08-12
      - 2001-08-14
    ?
        - Detroit Tigers
        - Chicago Cubs
    :
      - 2001-07-23
perl-busted: >
    YAML.pm will be able to emulate this behavior soon. In this regard
    it may be somewhat more correct than Python's native behaviour which
    can only use tuples as mapping keys. PyYAML will also need to figure
    out some clever way to roundtrip structured keys.
python: |
    [
    {
        ('New York Yankees', 'Atlanta Braves'):
            [yaml.timestamp('2001-07-02'),
             yaml.timestamp('2001-08-12'),
             yaml.timestamp('2001-08-14')],
        ('Detroit Tigers', 'Chicago Cubs'):
        [yaml.timestamp('2001-07-23')]
    }
    ]
ruby: |
    {
      [ 'New York Yankees', 'Atlanta Braves' ] =>
        [ Date.new( 2001, 7, 2 ), Date.new( 2001, 8, 12 ), Date.new( 2001, 8, 14 ) ],
      [ 'Detroit Tigers', 'Chicago Cubs' ] =>
        [ Date.new( 2001, 7, 23 ) ]
    }
syck: |
  struct test_node seq1[] = {
      { T_STR, 0, "New York Yankees" },
      { T_STR, 0, "Atlanta Braves" },
      end_node
  };
  struct test_node seq2[] = {
      { T_STR, 0, "2001-07-02" },
      { T_STR, 0, "2001-08-12" },
      { T_STR, 0, "2001-08-14" },
      end_node
  };
  struct test_node seq3[] = {
      { T_STR, 0, "Detroit Tigers" },
      { T_STR, 0, "Chicago Cubs" },
      end_node
  };
  struct test_node seq4[] = {
      { T_STR, 0, "2001-07-23" },
      end_node
  };
  struct test_node map[] = {
      { T_SEQ, 0, 0, seq1 },
      { T_SEQ, 0, 0, seq2 },
      { T_SEQ, 0, 0, seq3 },
      { T_SEQ, 0, 0, seq4 },
      end_node
  };
  struct test_node stream[] = {
      { T_MAP, 0, 0, map },
      end_node
  };

---
test: Sequence of sequences
spec: 2.5
yaml: |
  - [ name         , hr , avg   ]
  - [ Mark McGwire , 65 , 0.278 ]
  - [ Sammy Sosa   , 63 , 0.288 ]
php: |
  [
    [ 'name', 'hr', 'avg' ],
    [ 'Mark McGwire', 65, 0.278 ],
    [ 'Sammy Sosa', 63, 0.288 ]
  ]
---
test: Mapping of mappings
todo: true
spec: 2.6
yaml: |
  Mark McGwire: {hr: 65, avg: 0.278}
  Sammy Sosa: {
      hr: 63,
      avg: 0.288
    }
php: |
  [
    'Mark McGwire' =>
      [ 'hr' => 65, 'avg' => 0.278 ],
    'Sammy Sosa' =>
      [ 'hr' => 63, 'avg' => 0.288 ]
  ]
---
test: Two documents in a stream each with a leading comment
todo: true
spec: 2.7
yaml: |
  # Ranking of 1998 home runs
  ---
  - Mark McGwire
  - Sammy Sosa
  - Ken Griffey

  # Team ranking
  ---
  - Chicago Cubs
  - St Louis Cardinals
ruby: |
  y = YAML::Stream.new
  y.add( [ 'Mark McGwire', 'Sammy Sosa', 'Ken Griffey' ] )
  y.add( [ 'Chicago Cubs', 'St Louis Cardinals' ] )
documents: 2

---
test: Play by play feed from a game
todo: true
spec: 2.8
yaml: |
  ---
  time: 20:03:20
  player: Sammy Sosa
  action: strike (miss)
  ...
  ---
  time: 20:03:47
  player: Sammy Sosa
  action: grand slam
  ...
perl: |
  [ 'Mark McGwire', 'Sammy Sosa', 'Ken Griffey' ]
documents: 2

---
test: Single document with two comments
spec: 2.9
yaml: |
  hr: # 1998 hr ranking
    - Mark McGwire
    - Sammy Sosa
  rbi:
    # 1998 rbi ranking
    - Sammy Sosa
    - Ken Griffey
php: |
  [
    'hr' => [ 'Mark McGwire', 'Sammy Sosa' ],
    'rbi' => [ 'Sammy Sosa', 'Ken Griffey' ]
  ]
---
test: Node for Sammy Sosa appears twice in this document
spec: 2.10
yaml: |
   ---
   hr:
      - Mark McGwire
      # Following node labeled SS
      - &SS Sammy Sosa
   rbi:
      - *SS # Subsequent occurrence
      - Ken Griffey
php: |
   [
      'hr' =>
         ['Mark McGwire', 'Sammy Sosa'],
      'rbi' =>
         ['Sammy Sosa', 'Ken Griffey']
    ]
---
test: Mapping between sequences
todo: true
spec: 2.11
yaml: |
   ? # PLAY SCHEDULE
     - Detroit Tigers
     - Chicago Cubs
   :
     - 2001-07-23

   ? [ New York Yankees,
       Atlanta Braves ]
   : [ 2001-07-02, 2001-08-12,
       2001-08-14 ]
ruby: |
   {
      [ 'Detroit Tigers', 'Chicago Cubs' ] => [ Date.new( 2001, 7, 23 ) ],
      [ 'New York Yankees', 'Atlanta Braves' ] => [ Date.new( 2001, 7, 2 ), Date.new( 2001, 8, 12 ), Date.new( 2001, 8, 14 ) ]
   }
syck: |
  struct test_node seq1[] = {
      { T_STR, 0, "New York Yankees" },
      { T_STR, 0, "Atlanta Braves" },
      end_node
  };
  struct test_node seq2[] = {
      { T_STR, 0, "2001-07-02" },
      { T_STR, 0, "2001-08-12" },
      { T_STR, 0, "2001-08-14" },
      end_node
  };
  struct test_node seq3[] = {
      { T_STR, 0, "Detroit Tigers" },
      { T_STR, 0, "Chicago Cubs" },
      end_node
  };
  struct test_node seq4[] = {
      { T_STR, 0, "2001-07-23" },
      end_node
  };
  struct test_node map[] = {
      { T_SEQ, 0, 0, seq3 },
      { T_SEQ, 0, 0, seq4 },
      { T_SEQ, 0, 0, seq1 },
      { T_SEQ, 0, 0, seq2 },
      end_node
  };
  struct test_node stream[] = {
      { T_MAP, 0, 0, map },
      end_node
  };

---
test: Sequence key shortcut
spec: 2.12
yaml: |
  ---
  # products purchased
  - item    : Super Hoop
    quantity: 1
  - item    : Basketball
    quantity: 4
  - item    : Big Shoes
    quantity: 1
php: |
  [
    [
      'item' => 'Super Hoop',
      'quantity' => 1,
    ],
    [
      'item' => 'Basketball',
      'quantity' => 4,
    ],
    [
      'item' => 'Big Shoes',
      'quantity' => 1,
    ]
  ]
perl: |
  [
     { item => 'Super Hoop', quantity => 1 },
     { item => 'Basketball', quantity => 4 },
     { item => 'Big Shoes',  quantity => 1 }
  ]

ruby: |
  [
     { 'item' => 'Super Hoop', 'quantity' => 1 },
     { 'item' => 'Basketball', 'quantity' => 4 },
     { 'item' => 'Big Shoes', 'quantity' => 1 }
  ]
python: |
  [
       { 'item': 'Super Hoop', 'quantity': 1 },
       { 'item': 'Basketball', 'quantity': 4 },
       { 'item': 'Big Shoes',  'quantity': 1 }
  ]
syck: |
  struct test_node map1[] = {
      { T_STR, 0, "item" },
          { T_STR, 0, "Super Hoop" },
      { T_STR, 0, "quantity" },
          { T_STR, 0, "1" },
      end_node
  };
  struct test_node map2[] = {
      { T_STR, 0, "item" },
          { T_STR, 0, "Basketball" },
      { T_STR, 0, "quantity" },
          { T_STR, 0, "4" },
      end_node
  };
  struct test_node map3[] = {
      { T_STR, 0, "item" },
          { T_STR, 0, "Big Shoes" },
      { T_STR, 0, "quantity" },
          { T_STR, 0, "1" },
      end_node
  };
  struct test_node seq[] = {
      { T_MAP, 0, 0, map1 },
      { T_MAP, 0, 0, map2 },
      { T_MAP, 0, 0, map3 },
      end_node
  };
  struct test_node stream[] = {
      { T_SEQ, 0, 0, seq },
      end_node
  };


---
test: Literal perserves newlines
todo: true
spec: 2.13
yaml: |
  # ASCII Art
  --- |
    \//||\/||
    // ||  ||_
perl: |
  "\\//||\\/||\n// ||  ||_\n"
ruby: |
  "\\//||\\/||\n// ||  ||_\n"
python: |
    [
        flushLeft(
        """
        \//||\/||
        // ||  ||_
        """
        )
    ]
syck: |
  struct test_node stream[] = {
      { T_STR, 0, "\\//||\\/||\n// ||  ||_\n" },
      end_node
  };

---
test: Folded treats newlines as a space
todo: true
spec: 2.14
yaml: |
  ---
    Mark McGwire's
    year was crippled
    by a knee injury.
perl: |
  "Mark McGwire's year was crippled by a knee injury."
ruby: |
  "Mark McGwire's year was crippled by a knee injury."
python: |
    [ "Mark McGwire's year was crippled by a knee injury." ]
syck: |
  struct test_node stream[] = {
      { T_STR, 0, "Mark McGwire's year was crippled by a knee injury." },
      end_node
  };

---
test: Newlines preserved for indented and blank lines
todo: true
spec: 2.15
yaml: |
  --- >
   Sammy Sosa completed another
   fine season with great stats.

     63 Home Runs
     0.288 Batting Average

   What a year!
perl: |
  "Sammy Sosa completed another fine season with great stats.\n\n  63 Home Runs\n  0.288 Batting Average\n\nWhat a year!\n"
ruby: |
  "Sammy Sosa completed another fine season with great stats.\n\n  63 Home Runs\n  0.288 Batting Average\n\nWhat a year!\n"
python: |
    [
        flushLeft(
        """
        Sammy Sosa completed another fine season with great stats.

          63 Home Runs
          0.288 Batting Average

        What a year!
        """
        )
    ]
syck: |
  struct test_node stream[] = {
      { T_STR, 0, "Sammy Sosa completed another fine season with great stats.\n\n  63 Home Runs\n  0.288 Batting Average\n\nWhat a year!\n" },
      end_node
  };


---
test: Indentation determines scope
spec: 2.16
yaml: |
  name: Mark McGwire
  accomplishment: >
     Mark set a major league
     home run record in 1998.
  stats: |
     65 Home Runs
     0.278 Batting Average
php: |
  [
    'name' => 'Mark McGwire',
    'accomplishment' => "Mark set a major league home run record in 1998.\n",
    'stats' => "65 Home Runs\n0.278 Batting Average\n"
  ]
---
test: Quoted scalars
todo: true
spec: 2.17
yaml: |
  unicode: "Sosa did fine.\u263A"
  control: "\b1998\t1999\t2000\n"
  hexesc:  "\x0D\x0A is \r\n"

  single: '"Howdy!" he cried.'
  quoted: ' # not a ''comment''.'
  tie-fighter: '|\-*-/|'
ruby: |
  {
    "tie-fighter" => "|\\-*-/|",
    "control"=>"\0101998\t1999\t2000\n",
    "unicode"=>"Sosa did fine." + ["263A".hex ].pack('U*'),
    "quoted"=>" # not a 'comment'.",
    "single"=>"\"Howdy!\" he cried.",
    "hexesc"=>"\r\n is \r\n"
  }
---
test: Multiline flow scalars
todo: true
spec: 2.18
yaml: |
  plain:
    This unquoted scalar
    spans many lines.

  quoted: "So does this
    quoted scalar.\n"
ruby: |
  {
    'plain' => 'This unquoted scalar spans many lines.',
    'quoted' => "So does this quoted scalar.\n"
  }
---
test: Integers
spec: 2.19
yaml: |
  canonical: 12345
  octal: 014
  hexadecimal: 0xC
php: |
  [
    'canonical' => 12345,
    'octal' => 014,
    'hexadecimal' => 0xC
  ]
---
# FIX: spec shows parens around -inf and NaN
test: Floating point
spec: 2.20
yaml: |
  canonical: 1.23015e+3
  exponential: 12.3015e+02
  negative infinity: -.inf
  not a number: .NaN
  float as whole number: !!float 1
php: |
  [
    'canonical' => 1230.15,
    'exponential' => 1230.15,
    'negative infinity' => log(0),
    'not a number' => -log(0),
    'float as whole number' => (float) 1
  ]
---
test: Timestamps
todo: true
spec: 2.22
yaml: |
  canonical: 2001-12-15T02:59:43.1Z
  iso8601:  2001-12-14t21:59:43.10-05:00
  spaced:  2001-12-14 21:59:43.10 -05:00
  date:   2002-12-14 # Time is noon UTC
php: |
  [
    'canonical' => YAML::mktime( 2001, 12, 15, 2, 59, 43, 0.10 ),
    'iso8601' => YAML::mktime( 2001, 12, 14, 21, 59, 43, 0.10, "-05:00" ),
    'spaced' => YAML::mktime( 2001, 12, 14, 21, 59, 43, 0.10, "-05:00" ),
    'date' => Date.new( 2002, 12, 14 )
  ]
---
test: legacy Timestamps test
todo: true
spec: legacy D4
yaml: |
    canonical: 2001-12-15T02:59:43.00Z
    iso8601:  2001-02-28t21:59:43.00-05:00
    spaced:  2001-12-14 21:59:43.00 -05:00
    date:   2002-12-14
php: |
   [
     'canonical' => Time::utc( 2001, 12, 15, 2, 59, 43, 0 ),
     'iso8601' => YAML::mktime( 2001, 2, 28, 21, 59, 43, 0, "-05:00" ),
     'spaced' => YAML::mktime( 2001, 12, 14, 21, 59, 43, 0, "-05:00" ),
     'date' => Date.new( 2002, 12, 14 )
   ]
---
test: Various explicit families
todo: true
spec: 2.23
yaml: |
  not-date: !!str 2002-04-28
  picture: !binary |
   R0lGODlhDAAMAIQAAP//9/X
   17unp5WZmZgAAAOfn515eXv
   Pz7Y6OjuDg4J+fn5OTk6enp
   56enmleECcgggoBADs=

  application specific tag: !!something |
   The semantics of the tag
   above may be different for
   different documents.

ruby-setup: |
  YAML.add_private_type( "something" ) do |type, val|
    "SOMETHING: #{val}"
  end
ruby: |
  {
    'not-date' => '2002-04-28',
    'picture' => "GIF89a\f\000\f\000\204\000\000\377\377\367\365\365\356\351\351\345fff\000\000\000\347\347\347^^^\363\363\355\216\216\216\340\340\340\237\237\237\223\223\223\247\247\247\236\236\236i^\020' \202\n\001\000;",
    'application specific tag' => "SOMETHING: The semantics of the tag\nabove may be different for\ndifferent documents.\n"
  }
---
test: Application specific family
todo: true
spec: 2.24
yaml: |
  # Establish a tag prefix
  --- !clarkevans.com,2002/graph/^shape
    # Use the prefix: shorthand for
    # !clarkevans.com,2002/graph/circle
  - !^circle
    center: &ORIGIN {x: 73, 'y': 129}
    radius: 7
  - !^line # !clarkevans.com,2002/graph/line
    start: *ORIGIN
    finish: { x: 89, 'y': 102 }
  - !^label
    start: *ORIGIN
    color: 0xFFEEBB
    value: Pretty vector drawing.
ruby-setup: |
  YAML.add_domain_type( "clarkevans.com,2002", 'graph/shape' ) { |type, val|
    if Array === val
      val << "Shape Container"
      val
    else
      raise YAML::Error, "Invalid graph of class #{ val.class }: " + val.inspect
    end
  }
  one_shape_proc = Proc.new { |type, val|
    scheme, domain, type = type.split( /:/, 3 )
    if val.is_a? ::Hash
      val['TYPE'] = "Shape: #{type}"
      val
    else
      raise YAML::Error, "Invalid graph of class #{ val.class }: " + val.inspect
    end
  }
  YAML.add_domain_type( "clarkevans.com,2002", 'graph/circle', &one_shape_proc )
  YAML.add_domain_type( "clarkevans.com,2002", 'graph/line', &one_shape_proc )
  YAML.add_domain_type( "clarkevans.com,2002", 'graph/label', &one_shape_proc )
ruby: |
  [
    {
      "radius" => 7,
      "center"=>
      {
        "x" => 73,
        "y" => 129
      },
      "TYPE" => "Shape: graph/circle"
    }, {
      "finish" =>
      {
        "x" => 89,
        "y" => 102
      },
      "TYPE" => "Shape: graph/line",
      "start" =>
      {
        "x" => 73,
        "y" => 129
      }
    }, {
      "TYPE" => "Shape: graph/label",
      "value" => "Pretty vector drawing.",
      "start" =>
      {
        "x" => 73,
        "y" => 129
      },
      "color" => 16772795
    },
    "Shape Container"
  ]
# ---
# test: Unordered set
# spec: 2.25
# yaml: |
#   # sets are represented as a
#   # mapping where each key is
#   # associated with the empty string
#   --- !set
#   ? Mark McGwire
#   ? Sammy Sosa
#   ? Ken Griff
---
test: Ordered mappings
todo: true
spec: 2.26
yaml: |
  # ordered maps are represented as
  # a sequence of mappings, with
  # each mapping having one key
  --- !omap
  - Mark McGwire: 65
  - Sammy Sosa: 63
  - Ken Griffy: 58
ruby: |
  YAML::Omap[
    'Mark McGwire', 65,
    'Sammy Sosa', 63,
    'Ken Griffy', 58
  ]
---
test: Invoice
dump_skip: true
spec: 2.27
yaml: |
  --- !clarkevans.com,2002/^invoice
  invoice: 34843
  date   : 2001-01-23
  bill-to: &id001
      given  : Chris
      family : Dumars
      address:
          lines: |
              458 Walkman Dr.
              Suite #292
          city    : Royal Oak
          state   : MI
          postal  : 48046
  ship-to: *id001
  product:
      -
        sku         : BL394D
        quantity    : 4
        description : Basketball
        price       : 450.00
      -
        sku         : BL4438H
        quantity    : 1
        description : Super Hoop
        price       : 2392.00
  tax  : 251.42
  total: 4443.52
  comments: >
    Late afternoon is best.
    Backup contact is Nancy
    Billsmer @ 338-4338.
php: |
  [
     'invoice' => 34843, 'date' => gmmktime(0, 0, 0, 1, 23, 2001),
     'bill-to' =>
      [ 'given' => 'Chris', 'family' => 'Dumars', 'address' => [ 'lines' => "458 Walkman Dr.\nSuite #292\n", 'city' => 'Royal Oak', 'state' => 'MI', 'postal' => 48046 ]]
     , 'ship-to' =>
      [ 'given' => 'Chris', 'family' => 'Dumars', 'address' => [ 'lines' => "458 Walkman Dr.\nSuite #292\n", 'city' => 'Royal Oak', 'state' => 'MI', 'postal' => 48046 ]]
     , 'product' =>
       [
        [ 'sku' => 'BL394D', 'quantity' => 4, 'description' => 'Basketball', 'price' => 450.00 ],
        [ 'sku' => 'BL4438H', 'quantity' => 1, 'description' => 'Super Hoop', 'price' => 2392.00 ]
      ],
     'tax' => 251.42, 'total' => 4443.52,
     'comments' => "Late afternoon is best. Backup contact is Nancy Billsmer @ 338-4338.\n"
  ]
---
test: Log file
todo: true
spec: 2.28
yaml: |
  ---
  Time: 2001-11-23 15:01:42 -05:00
  User: ed
  Warning: >
    This is an error message
    for the log file
  ---
  Time: 2001-11-23 15:02:31 -05:00
  User: ed
  Warning: >
    A slightly different error
    message.
  ---
  Date: 2001-11-23 15:03:17 -05:00
  User: ed
  Fatal: >
    Unknown variable "bar"
  Stack:
    - file: TopClass.py
      line: 23
      code: |
        x = MoreObject("345\n")
    - file: MoreClass.py
      line: 58
      code: |-
        foo = bar
ruby: |
  y = YAML::Stream.new
  y.add( { 'Time' => YAML::mktime( 2001, 11, 23, 15, 01, 42, 00, "-05:00" ),
           'User' => 'ed', 'Warning' => "This is an error message for the log file\n" } )
  y.add( { 'Time' => YAML::mktime( 2001, 11, 23, 15, 02, 31, 00, "-05:00" ),
           'User' => 'ed', 'Warning' => "A slightly different error message.\n" } )
  y.add( { 'Date' => YAML::mktime( 2001, 11, 23, 15, 03, 17, 00, "-05:00" ),
           'User' => 'ed', 'Fatal' => "Unknown variable \"bar\"\n",
           'Stack' => [
           { 'file' => 'TopClass.py', 'line' => 23, 'code' => "x = MoreObject(\"345\\n\")\n" },
           { 'file' => 'MoreClass.py', 'line' => 58, 'code' => "foo = bar" } ] } )
documents: 3

---
test: Throwaway comments
yaml: |
   ### These are four throwaway comment  ###

   ### lines (the second line is empty). ###
   this: |   # Comments may trail lines.
      contains three lines of text.
      The third one starts with a
      # character. This isn't a comment.

   # These are three throwaway comment
   # lines (the first line is empty).
php: |
   [
     'this' => "contains three lines of text.\nThe third one starts with a\n# character. This isn't a comment.\n"
   ]
---
test: Document with a single value
todo: true
yaml: |
   --- >
   This YAML stream contains a single text value.
   The next stream is a log file - a sequence of
   log entries. Adding an entry to the log is a
   simple matter of appending it at the end.
ruby: |
   "This YAML stream contains a single text value. The next stream is a log file - a sequence of log entries. Adding an entry to the log is a simple matter of appending it at the end.\n"
---
test: Document stream
todo: true
yaml: |
   ---
   at: 2001-08-12 09:25:00.00 Z
   type: GET
   HTTP: '1.0'
   url: '/index.html'
   ---
   at: 2001-08-12 09:25:10.00 Z
   type: GET
   HTTP: '1.0'
   url: '/toc.html'
ruby: |
   y = YAML::Stream.new
   y.add( {
      'at' => Time::utc( 2001, 8, 12, 9, 25, 00 ),
      'type' => 'GET',
      'HTTP' => '1.0',
      'url' => '/index.html'
   } )
   y.add( {
      'at' => Time::utc( 2001, 8, 12, 9, 25, 10 ),
      'type' => 'GET',
      'HTTP' => '1.0',
      'url' => '/toc.html'
   } )
documents: 2

---
test: Top level mapping
yaml: |
   # This stream is an example of a top-level mapping.
   invoice : 34843
   date    : 2001-01-23
   total   : 4443.52
php: |
   [
      'invoice' => 34843,
      'date' => gmmktime(0, 0, 0, 1, 23, 2001),
      'total' => 4443.52
   ]
---
test: Single-line documents
todo: true
yaml: |
  # The following is a sequence of three documents.
  # The first contains an empty mapping, the second
  # an empty sequence, and the last an empty string.
  --- {}
  --- [ ]
  --- ''
ruby: |
  y = YAML::Stream.new
  y.add( {} )
  y.add( [] )
  y.add( '' )
documents: 3

---
test: Document with pause
todo: true
yaml: |
  # A communication channel based on a YAML stream.
  ---
  sent at: 2002-06-06 11:46:25.10 Z
  payload: Whatever
  # Receiver can process this as soon as the following is sent:
  ...
  # Even if the next message is sent long after:
  ---
  sent at: 2002-06-06 12:05:53.47 Z
  payload: Whatever
  ...
ruby: |
  y = YAML::Stream.new
  y.add(
    { 'sent at' => YAML::mktime( 2002, 6, 6, 11, 46, 25, 0.10 ),
      'payload' => 'Whatever' }
  )
  y.add(
    { "payload" => "Whatever", "sent at" => YAML::mktime( 2002, 6, 6, 12, 5, 53, 0.47 ) }
  )
documents: 2

---
test: Explicit typing
yaml: |
   integer: 12
   no int: ! 12
   string: !!str 12
php: |
   [ 'integer' => 12, 'no int' => '12', 'string' => '12' ]
---
test: Private types
todo: true
yaml: |
  # Both examples below make use of the 'x-private:ball'
  # type family URI, but with different semantics.
  ---
  pool: !!ball
    number: 8
    color: black
  ---
  bearing: !!ball
    material: steel
ruby: |
  y = YAML::Stream.new
  y.add( { 'pool' =>
    YAML::PrivateType.new( 'ball',
      { 'number' => 8, 'color' => 'black' } ) }
  )
  y.add( { 'bearing' =>
    YAML::PrivateType.new( 'ball',
      { 'material' => 'steel' } ) }
  )
documents: 2

---
test: Type family under yaml.org
yaml: |
  # The URI is 'tag:yaml.org,2002:str'
  - !!str a Unicode string
php: |
  [ 'a Unicode string' ]
---
test: Type family under perl.yaml.org
todo: true
yaml: |
  # The URI is 'tag:perl.yaml.org,2002:Text::Tabs'
  - !perl/Text::Tabs {}
ruby: |
  [ YAML::DomainType.new( 'perl.yaml.org,2002', 'Text::Tabs', {} ) ]
---
test: Type family under clarkevans.com
todo: true
yaml: |
  # The URI is 'tag:clarkevans.com,2003-02:timesheet'
  - !clarkevans.com,2003-02/timesheet {}
ruby: |
  [ YAML::DomainType.new( 'clarkevans.com,2003-02', 'timesheet', {} ) ]
---
test: URI Escaping
todo: true
yaml: |
  same:
    - !domain.tld,2002/type\x30 value
    - !domain.tld,2002/type0 value
  different: # As far as the YAML parser is concerned
    - !domain.tld,2002/type%30 value
    - !domain.tld,2002/type0 value
ruby-setup: |
  YAML.add_domain_type( "domain.tld,2002", "type0" ) { |type, val|
    "ONE: #{val}"
  }
  YAML.add_domain_type( "domain.tld,2002", "type%30" ) { |type, val|
    "TWO: #{val}"
  }
ruby: |
  { 'same' => [ 'ONE: value', 'ONE: value' ], 'different' => [ 'TWO: value', 'ONE: value' ] }
---
test: URI Prefixing
todo: true
yaml: |
  # 'tag:domain.tld,2002:invoice' is some type family.
  invoice: !domain.tld,2002/^invoice
    # 'seq' is shorthand for 'tag:yaml.org,2002:seq'.
    # This does not effect '^customer' below
    # because it is does not specify a prefix.
    customers: !seq
      # '^customer' is shorthand for the full
      # notation 'tag:domain.tld,2002:customer'.
      - !^customer
        given : Chris
        family : Dumars
ruby-setup: |
  YAML.add_domain_type( "domain.tld,2002", /(invoice|customer)/ ) { |type, val|
    if val.is_a? ::Hash
      scheme, domain, type = type.split( /:/, 3 )
      val['type'] = "domain #{type}"
      val
    else
      raise YAML::Error, "Not a Hash in domain.tld/invoice: " + val.inspect
    end
  }
ruby: |
  { "invoice"=> { "customers"=> [ { "given"=>"Chris", "type"=>"domain customer", "family"=>"Dumars" } ], "type"=>"domain invoice" } }

---
test: Overriding anchors
yaml: |
  anchor : &A001 This scalar has an anchor.
  override : &A001 >
   The alias node below is a
   repeated use of this value.
  alias : *A001
php: |
  [ 'anchor' => 'This scalar has an anchor.',
    'override' => "The alias node below is a repeated use of this value.\n",
    'alias' => "The alias node below is a repeated use of this value.\n" ]
---
test: Flow and block formatting
todo: true
yaml: |
  empty: []
  flow: [ one, two, three # May span lines,
           , four,           # indentation is
             five ]          # mostly ignored.
  block:
   - First item in top sequence
   -
    - Subordinate sequence entry
   - >
     A folded sequence entry
   - Sixth item in top sequence
ruby: |
  { 'empty' => [], 'flow' => [ 'one', 'two', 'three', 'four', 'five' ],
    'block' => [ 'First item in top sequence', [ 'Subordinate sequence entry' ],
    "A folded sequence entry\n", 'Sixth item in top sequence' ] }
---
test: Complete mapping test
todo: true
yaml: |
 empty: {}
 flow: { one: 1, two: 2 }
 spanning: { one: 1,
    two: 2 }
 block:
  first : First entry
  second:
   key: Subordinate mapping
  third:
   - Subordinate sequence
   - { }
   - Previous mapping is empty.
   - A key: value pair in a sequence.
     A second: key:value pair.
   - The previous entry is equal to the following one.
   -
     A key: value pair in a sequence.
     A second: key:value pair.
  !float 12 : This key is a float.
  ? >
   ?
  : This key had to be protected.
  "\a" : This key had to be escaped.
  ? >
   This is a
   multi-line
   folded key
  : Whose value is
    also multi-line.
  ? this also works as a key
  : with a value at the next line.
  ?
   - This key
   - is a sequence
  :
   - With a sequence value.
  ?
   This: key
   is a: mapping
  :
   with a: mapping value.
ruby: |
  { 'empty' => {}, 'flow' => { 'one' => 1, 'two' => 2 },
    'spanning' => { 'one' => 1, 'two' => 2 },
    'block' => { 'first' => 'First entry', 'second' =>
    { 'key' => 'Subordinate mapping' }, 'third' =>
      [ 'Subordinate sequence', {}, 'Previous mapping is empty.',
        { 'A key' => 'value pair in a sequence.', 'A second' => 'key:value pair.' },
        'The previous entry is equal to the following one.',
        { 'A key' => 'value pair in a sequence.', 'A second' => 'key:value pair.' } ],
    12.0 => 'This key is a float.', "?\n" => 'This key had to be protected.',
    "\a" => 'This key had to be escaped.',
    "This is a multi-line folded key\n" => "Whose value is also multi-line.",
    'this also works as a key' => 'with a value at the next line.',
    [ 'This key', 'is a sequence' ] => [ 'With a sequence value.' ] } }
  # Couldn't recreate map exactly, so we'll do a detailed check to be sure it's entact
  obj_y['block'].keys.each { |k|
    if Hash === k
      v = obj_y['block'][k]
      if k['This'] == 'key' and k['is a'] == 'mapping' and v['with a'] == 'mapping value.'
         obj_r['block'][k] = v
      end
    end
  }
---
test: Literal explicit indentation
yaml: |
   # Explicit indentation must
   # be given in all the three
   # following cases.
   leading spaces: |2
         This value starts with four spaces.

   leading line break: |2

     This value starts with a line break.

   leading comment indicator: |2
     # first line starts with a
     # character.

   # Explicit indentation may
   # also be given when it is
   # not required.
   redundant: |2
     This value is indented 2 spaces.
php: |
   [
      'leading spaces' => "    This value starts with four spaces.\n",
      'leading line break' => "\nThis value starts with a line break.\n",
      'leading comment indicator' => "# first line starts with a\n# character.\n",
      'redundant' => "This value is indented 2 spaces.\n"
   ]
---
test: Chomping and keep modifiers
yaml: |
    clipped: |
        This has one newline.

    same as "clipped" above: "This has one newline.\n"

    stripped: |-
        This has no newline.

    same as "stripped" above: "This has no newline."

    kept: |+
        This has two newlines.

    same as "kept" above: "This has two newlines.\n\n"
php: |
    [
      'clipped' => "This has one newline.\n",
      'same as "clipped" above' => "This has one newline.\n",
      'stripped' => 'This has no newline.',
      'same as "stripped" above' => 'This has no newline.',
      'kept' => "This has two newlines.\n\n",
      'same as "kept" above' => "This has two newlines.\n\n"
    ]
---
test: Literal combinations
todo: true
yaml: |
   empty: |

   literal: |
    The \ ' " characters may be
    freely used. Leading white
       space is significant.

    Line breaks are significant.
    Thus this value contains one
    empty line and ends with a
    single line break, but does
    not start with one.

   is equal to: "The \\ ' \" characters may \
    be\nfreely used. Leading white\n   space \
    is significant.\n\nLine breaks are \
    significant.\nThus this value contains \
    one\nempty line and ends with a\nsingle \
    line break, but does\nnot start with one.\n"

   # Comments may follow a block
   # scalar value. They must be
   # less indented.

   # Modifiers may be combined in any order.
   indented and chomped: |2-
       This has no newline.

   also written as: |-2
       This has no newline.

   both are equal to: "  This has no newline."
php: |
   [
     'empty' => '',
     'literal' => "The \\ ' \" characters may be\nfreely used. Leading white\n   space " +
       "is significant.\n\nLine breaks are significant.\nThus this value contains one\n" +
       "empty line and ends with a\nsingle line break, but does\nnot start with one.\n",
     'is equal to' => "The \\ ' \" characters may be\nfreely used. Leading white\n   space " +
       "is significant.\n\nLine breaks are significant.\nThus this value contains one\n" +
       "empty line and ends with a\nsingle line break, but does\nnot start with one.\n",
     'indented and chomped' => '  This has no newline.',
     'also written as' => '  This has no newline.',
     'both are equal to' => '  This has no newline.'
   ]
---
test: Folded combinations
todo: true
yaml: |
   empty: >

   one paragraph: >
    Line feeds are converted
    to spaces, so this value
    contains no line breaks
    except for the final one.

   multiple paragraphs: >2

     An empty line, either
     at the start or in
     the value:

     Is interpreted as a
     line break. Thus this
     value contains three
     line breaks.

   indented text: >
       This is a folded
       paragraph followed
       by a list:
        * first entry
        * second entry
       Followed by another
       folded paragraph,
       another list:

        * first entry

        * second entry

       And a final folded
       paragraph.

   above is equal to: |
       This is a folded paragraph followed by a list:
        * first entry
        * second entry
       Followed by another folded paragraph, another list:

        * first entry

        * second entry

       And a final folded paragraph.

   # Explicit comments may follow
   # but must be less indented.
php: |
   [
     'empty' => '',
     'one paragraph' => 'Line feeds are converted to spaces, so this value'.
       " contains no line breaks except for the final one.\n",
     'multiple paragraphs' => "\nAn empty line, either at the start or in the value:\n".
       "Is interpreted as a line break. Thus this value contains three line breaks.\n",
     'indented text' => "This is a folded paragraph followed by a list:\n".
       " * first entry\n * second entry\nFollowed by another folded paragraph, ".
       "another list:\n\n * first entry\n\n * second entry\n\nAnd a final folded paragraph.\n",
     'above is equal to' => "This is a folded paragraph followed by a list:\n".
       " * first entry\n * second entry\nFollowed by another folded paragraph, ".
       "another list:\n\n * first entry\n\n * second entry\n\nAnd a final folded paragraph.\n"
   ]
---
test: Single quotes
todo: true
yaml: |
   empty: ''
   second: '! : \ etc. can be used freely.'
   third: 'a single quote '' must be escaped.'
   span: 'this contains
         six spaces

         and one
         line break'
   is same as: "this contains six spaces\nand one line break"
php: |
   [
     'empty' => '',
     'second' => '! : \\ etc. can be used freely.',
     'third' => "a single quote ' must be escaped.",
     'span' => "this contains six spaces\nand one line break",
     'is same as' => "this contains six spaces\nand one line break"
   ]
---
test: Double quotes
todo: true
yaml: |
   empty: ""
   second: "! : etc. can be used freely."
   third: "a \" or a \\ must be escaped."
   fourth: "this value ends with an LF.\n"
   span: "this contains
     four  \
         spaces"
   is equal to: "this contains four  spaces"
php: |
   [
     'empty' => '',
     'second' => '! : etc. can be used freely.',
     'third' => 'a " or a \\ must be escaped.',
     'fourth' => "this value ends with an LF.\n",
     'span' => "this contains four  spaces",
     'is equal to' => "this contains four  spaces"
   ]
---
test: Unquoted strings
todo: true
yaml: |
   first: There is no unquoted empty string.

   second: 12          ## This is an integer.

   third: !!str 12      ## This is a string.

   span: this contains
         six spaces

         and one
         line break

   indicators: this has no comments.
               #:foo and bar# are
               both text.

   flow: [ can span
              lines, # comment
              like
              this ]

   note: { one-line keys: but multi-line values }

php: |
   [
     'first' => 'There is no unquoted empty string.',
     'second' => 12,
     'third' => '12',
     'span' => "this contains six spaces\nand one line break",
     'indicators' => "this has no comments. #:foo and bar# are both text.",
     'flow' => [ 'can span lines', 'like this' ],
     'note' => { 'one-line keys' => 'but multi-line values' }
   ]
---
test: Spanning sequences
todo: true
yaml: |
   # The following are equal seqs
   # with different identities.
   flow: [ one, two ]
   spanning: [ one,
        two ]
   block:
     - one
     - two
php: |
   [
     'flow' => [ 'one', 'two' ],
     'spanning' => [ 'one', 'two' ],
     'block' => [ 'one', 'two' ]
   ]
---
test: Flow mappings
yaml: |
   # The following are equal maps
   # with different identities.
   flow: { one: 1, two: 2 }
   block:
       one: 1
       two: 2
php: |
   [
     'flow' => [ 'one' => 1, 'two' => 2 ],
     'block' => [ 'one' => 1, 'two' => 2 ]
    ]
---
test: Representations of 12
todo: true
yaml: |
   - 12 # An integer
   # The following scalars
   # are loaded to the
   # string value '1' '2'.
   - !!str 12
   - '12'
   - "12"
   - "\
     1\
     2\
     "
   # Strings containing paths and regexps can be unquoted:
   - /foo/bar
   - d:/foo/bar
   - foo/bar
   - /a.*b/
php: |
   [ 12, '12', '12', '12', '12', '/foo/bar', 'd:/foo/bar', 'foo/bar', '/a.*b/' ]
---
test: "Null"
todo: true
yaml: |
   canonical: ~

   english: null

   # This sequence has five
   # entries, two with values.
   sparse:
     - ~
     - 2nd entry
     - Null
     - 4th entry
     -

   four: This mapping has five keys,
         only two with values.

php: |
   [
     'canonical' => null,
     'english' => null,
     'sparse' => [ null, '2nd entry', null, '4th entry', null ]],
     'four' => 'This mapping has five keys, only two with values.'
      ]
---
test: Omap
todo: true
yaml: |
   # Explicitly typed dictionary.
   Bestiary: !omap
     - aardvark: African pig-like ant eater. Ugly.
     - anteater: South-American ant eater. Two species.
     - anaconda: South-American constrictor snake. Scary.
     # Etc.
ruby: |
   {
     'Bestiary' => YAML::Omap[
       'aardvark', 'African pig-like ant eater. Ugly.',
       'anteater', 'South-American ant eater. Two species.',
       'anaconda', 'South-American constrictor snake. Scary.'
     ]
   }

---
test: Pairs
todo: true
yaml: |
  # Explicitly typed pairs.
  tasks: !pairs
    - meeting: with team.
    - meeting: with boss.
    - break: lunch.
    - meeting: with client.
ruby: |
  {
    'tasks' => YAML::Pairs[
      'meeting', 'with team.',
      'meeting', 'with boss.',
      'break', 'lunch.',
      'meeting', 'with client.'
    ]
  }

---
test: Set
todo: true
yaml: |
  # Explicitly typed set.
  baseball players: !set
    Mark McGwire:
    Sammy Sosa:
    Ken Griffey:
ruby: |
  {
    'baseball players' => YAML::Set[
      'Mark McGwire', nil,
      'Sammy Sosa', nil,
      'Ken Griffey', nil
    ]
  }

---
test: Integer
yaml: |
   canonical: 12345
   octal: 014
   hexadecimal: 0xC
php: |
   [
     'canonical' => 12345,
     'octal' => 12,
     'hexadecimal' => 12
   ]
---
test: Float
yaml: |
   canonical: 1.23015e+3
   exponential: 12.3015e+02
   negative infinity: -.inf
   not a number: .NaN
php: |
  [
    'canonical' => 1230.15,
    'exponential' => 1230.15,
    'negative infinity' => log(0),
    'not a number' => -log(0)
  ]
---
test: Timestamp
todo: true
yaml: |
   canonical:       2001-12-15T02:59:43.1Z
   valid iso8601:   2001-12-14t21:59:43.10-05:00
   space separated: 2001-12-14 21:59:43.10 -05:00
   date (noon UTC): 2002-12-14
ruby: |
   [
     'canonical' => YAML::mktime( 2001, 12, 15, 2, 59, 43, 0.10 ),
     'valid iso8601' => YAML::mktime( 2001, 12, 14, 21, 59, 43, 0.10, "-05:00" ),
     'space separated' => YAML::mktime( 2001, 12, 14, 21, 59, 43, 0.10, "-05:00" ),
     'date (noon UTC)' => Date.new( 2002, 12, 14 )
   ]
---
test: Binary
todo: true
yaml: |
   canonical: !binary "\
    R0lGODlhDAAMAIQAAP//9/X17unp5WZmZgAAAOfn515eXvPz7Y6OjuDg4J+fn5\
    OTk6enp56enmlpaWNjY6Ojo4SEhP/++f/++f/++f/++f/++f/++f/++f/++f/+\
    +f/++f/++f/++f/++f/++SH+Dk1hZGUgd2l0aCBHSU1QACwAAAAADAAMAAAFLC\
    AgjoEwnuNAFOhpEMTRiggcz4BNJHrv/zCFcLiwMWYNG84BwwEeECcgggoBADs="
   base64: !binary |
    R0lGODlhDAAMAIQAAP//9/X17unp5WZmZgAAAOfn515eXvPz7Y6OjuDg4J+fn5
    OTk6enp56enmlpaWNjY6Ojo4SEhP/++f/++f/++f/++f/++f/++f/++f/++f/+
    +f/++f/++f/++f/++f/++SH+Dk1hZGUgd2l0aCBHSU1QACwAAAAADAAMAAAFLC
    AgjoEwnuNAFOhpEMTRiggcz4BNJHrv/zCFcLiwMWYNG84BwwEeECcgggoBADs=
   description: >
    The binary value above is a tiny arrow
    encoded as a gif image.
ruby-setup: |
   arrow_gif = "GIF89a\f\000\f\000\204\000\000\377\377\367\365\365\356\351\351\345fff\000\000\000\347\347\347^^^\363\363\355\216\216\216\340\340\340\237\237\237\223\223\223\247\247\247\236\236\236iiiccc\243\243\243\204\204\204\377\376\371\377\376\371\377\376\371\377\376\371\377\376\371\377\376\371\377\376\371\377\376\371\377\376\371\377\376\371\377\376\371\377\376\371\377\376\371\377\376\371!\376\016Made with GIMP\000,\000\000\000\000\f\000\f\000\000\005,  \216\2010\236\343@\024\350i\020\304\321\212\010\034\317\200M$z\357\3770\205p\270\2601f\r\e\316\001\303\001\036\020' \202\n\001\000;"
ruby: |
   {
     'canonical' => arrow_gif,
     'base64' => arrow_gif,
     'description' => "The binary value above is a tiny arrow encoded as a gif image.\n"
   }

---
test: Merge key
todo: true
yaml: |
  ---
  - &CENTER { x: 1, y: 2 }
  - &LEFT { x: 0, y: 2 }
  - &BIG { r: 10 }
  - &SMALL { r: 1 }

  # All the following maps are equal:

  - # Explicit keys
    x: 1
    y: 2
    r: 10
    label: center/big

  - # Merge one map
    << : *CENTER
    r: 10
    label: center/big

  - # Merge multiple maps
    << : [ *CENTER, *BIG ]
    label: center/big

  - # Override
    << : [ *BIG, *LEFT, *SMALL ]
    x: 1
    label: center/big

ruby-setup: |
  center = { 'x' => 1, 'y' => 2 }
  left = { 'x' => 0, 'y' => 2 }
  big = { 'r' => 10 }
  small = { 'r' => 1 }
  node1 = { 'x' => 1, 'y' => 2, 'r' => 10, 'label' => 'center/big' }
  node2 = center.dup
  node2.update( { 'r' => 10, 'label' => 'center/big' } )
  node3 = big.dup
  node3.update( center )
  node3.update( { 'label' => 'center/big' } )
  node4 = small.dup
  node4.update( left )
  node4.update( big )
  node4.update( { 'x' => 1, 'label' => 'center/big' } )

ruby: |
  [
    center, left, big, small, node1, node2, node3, node4
  ]

---
test: Default key
todo: true
yaml: |
   ---     # Old schema
   link with:
     - library1.dll
     - library2.dll
   ---     # New schema
   link with:
     - = : library1.dll
       version: 1.2
     - = : library2.dll
       version: 2.3
ruby: |
   y = YAML::Stream.new
   y.add( { 'link with' => [ 'library1.dll', 'library2.dll' ] } )
   obj_h = Hash[ 'version' => 1.2 ]
   obj_h.default = 'library1.dll'
   obj_h2 = Hash[ 'version' => 2.3 ]
   obj_h2.default = 'library2.dll'
   y.add( { 'link with' => [ obj_h, obj_h2 ] } )
documents: 2

---
test: Special keys
todo: true
yaml: |
   "!": These three keys
   "&": had to be quoted
   "=": and are normal strings.
   # NOTE: the following node should NOT be serialized this way.
   encoded node :
    !special '!' : '!type'
    !special|canonical '&' : 12
    = : value
   # The proper way to serialize the above node is as follows:
   node : !!type &12 value
ruby: |
   { '!' => 'These three keys', '&' => 'had to be quoted',
     '=' => 'and are normal strings.',
     'encoded node' => YAML::PrivateType.new( 'type', 'value' ),
     'node' => YAML::PrivateType.new( 'type', 'value' ) }
--- %YAML:1.0
test: Strings
brief: >
    Any group of characters beginning with an
    alphabetic or numeric character is a string,
    unless it belongs to one of the groups below
    (such as an Integer or Time).
yaml: |
    String
php: |
    'String'
---
test: String characters
brief: >
    A string can contain any alphabetic or
    numeric character, along with many
    punctuation characters, including the
    period, dash, space, quotes, exclamation, and
    question mark.
yaml: |
    - What's Yaml?
    - It's for writing data structures in plain text.
    - And?
    - And what? That's not good enough for you?
    - No, I mean, "And what about Yaml?"
    - Oh, oh yeah. Uh.. Yaml for Ruby.
php: |
    [
      "What's Yaml?",
      "It's for writing data structures in plain text.",
      "And?",
      "And what? That's not good enough for you?",
      "No, I mean, \"And what about Yaml?\"",
      "Oh, oh yeah. Uh.. Yaml for Ruby."
    ]
---
test: Indicators in Strings
brief: >
    Be careful using indicators in strings.  In particular,
    the comma, colon, and pound sign must be used carefully.
yaml: |
    the colon followed by space is an indicator: but is a string:right here
    same for the pound sign: here we have it#in a string
    the comma can, honestly, be used in most cases: [ but not in, inline collections ]
php: |
    [
      'the colon followed by space is an indicator' => 'but is a string:right here',
      'same for the pound sign' => 'here we have it#in a string',
      'the comma can, honestly, be used in most cases' => ['but not in', 'inline collections']
    ]
---
test: Forcing Strings
brief: >
    Any YAML type can be forced into a string using the
    explicit !!str method.
yaml: |
    date string: !!str 2001-08-01
    number string: !!str 192
php: |
    [
      'date string' => '2001-08-01',
      'number string' => '192'
    ]
---
test: Single-quoted Strings
brief: >
    You can also enclose your strings within single quotes,
    which allows use of slashes, colons, and other indicators
    freely.  Inside single quotes, you can represent a single
    quote in your string by using two single quotes next to
    each other.
yaml: |
    all my favorite symbols: '#:!/%.)'
    a few i hate: '&(*'
    why do i hate them?: 'it''s very hard to explain'
    entities: '&pound; me'
php: |
    [
      'all my favorite symbols' => '#:!/%.)',
      'a few i hate' => '&(*',
      'why do i hate them?' => 'it\'s very hard to explain',
      'entities' => '&pound; me'
    ]
---
test: Double-quoted Strings
brief: >
    Enclosing strings in double quotes allows you
    to use escapings to represent ASCII and
    Unicode characters.
yaml: |
    i know where i want my line breaks: "one here\nand another here\n"
php: |
    [
      'i know where i want my line breaks' => "one here\nand another here\n"
    ]
---
test: Multi-line Quoted Strings
todo: true
brief: >
    Both single- and double-quoted strings may be
    carried on to new lines in your YAML document.
    They must be indented a step and indentation
    is interpreted as a single space.
yaml: |
    i want a long string: "so i'm going to
      let it go on and on to other lines
      until i end it with a quote."
php: |
    ['i want a long string' => "so i'm going to ".
         "let it go on and on to other lines ".
         "until i end it with a quote."
    ]

---
test: Plain scalars
todo: true
brief: >
    Unquoted strings may also span multiple lines, if they
    are free of YAML space indicators and indented.
yaml: |
    - My little toe is broken in two places;
    - I'm crazy to have skied this way;
    - I'm not the craziest he's seen, since there was always the German guy
      who skied for 3 hours on a broken shin bone (just below the kneecap);
    - Nevertheless, second place is respectable, and he doesn't
      recommend going for the record;
    - He's going to put my foot in plaster for a month;
    - This would impair my skiing ability somewhat for the
      duration, as can be imagined.
php: |
    [
      "My little toe is broken in two places;",
      "I'm crazy to have skied this way;",
      "I'm not the craziest he's seen, since there was always ".
         "the German guy who skied for 3 hours on a broken shin ".
         "bone (just below the kneecap);",
      "Nevertheless, second place is respectable, and he doesn't ".
         "recommend going for the record;",
      "He's going to put my foot in plaster for a month;",
      "This would impair my skiing ability somewhat for the duration, ".
         "as can be imagined."
    ]
---
test: 'Null'
brief: >
    You can use the tilde '~' character for a null value.
yaml: |
    name: Mr. Show
    hosted by: Bob and David
    date of next season: ~
php: |
    [
      'name' => 'Mr. Show',
      'hosted by' => 'Bob and David',
      'date of next season' => null
    ]
---
test: Boolean
brief: >
    You can use 'true' and 'false' for Boolean values.
yaml: |
    Is Gus a Liar?: true
    Do I rely on Gus for Sustenance?: false
php: |
    [
      'Is Gus a Liar?' => true,
      'Do I rely on Gus for Sustenance?' => false
    ]
---
test: Integers
dump_skip: true
brief: >
    An integer is a series of numbers, optionally
    starting with a positive or negative sign.  Integers
    may also contain commas for readability.
yaml: |
    zero: 0
    simple: 12
php: |
    [
      'zero' => 0,
      'simple' => 12,
    ]
---
test: Floats
dump_skip: true
brief: >
     Floats are represented by numbers with decimals,
     allowing for scientific notation, as well as
     positive and negative infinity and "not a number."
yaml: |
     a simple float: 2.00
     scientific notation: 1.00009e+3
php: |
     [
       'a simple float' => 2.0,
       'scientific notation' => 1000.09
     ]
---
test: Time
todo: true
brief: >
    You can represent timestamps by using
    ISO8601 format, or a variation which
    allows spaces between the date, time and
    time zone.
yaml: |
    iso8601: 2001-12-14t21:59:43.10-05:00
    space separated: 2001-12-14 21:59:43.10 -05:00
php: |
    [
      'iso8601' => mktime( 2001, 12, 14, 21, 59, 43, 0.10, "-05:00" ),
      'space separated' => mktime( 2001, 12, 14, 21, 59, 43, 0.10, "-05:00" )
    ]
---
test: Date
todo: true
brief: >
    A date can be represented by its year,
    month and day in ISO8601 order.
yaml: |
    1976-07-31
php: |
    date( 1976, 7, 31 )
GIF89a    fff   ^^^펎iiiccc!Made with GIMP ,       ,  0@iъπM$z0p1f' 
 ;--- %YAML:1.0
test: Miscellaneous
spec: 2.21
yaml: |
  true: true
  false: false
php: |
  [
    'true' => true,
    'false' => false,
  ]
value: <?php echo 1 + 2 + 3 ?>
test: outside double quotes
yaml: |
    \0 \ \a \b \n
php: |
    "\\0 \\ \\a \\b \\n"
---
test: 'null'
yaml: |
    "\0"
php: |
    "\x00"
---
test: bell
yaml: |
    "\a"
php: |
    "\x07"
---
test: backspace
yaml: |
    "\b"
php: |
    "\x08"
---
test: horizontal tab (1)
yaml: |
    "\t"
php: |
    "\x09"
---
test: horizontal tab (2)
yaml: |
    "\	"
php: |
    "\x09"
---
test: line feed
yaml: |
    "\n"
php: |
    "\x0a"
---
test: vertical tab
yaml: |
    "\v"
php: |
    "\x0b"
---
test: form feed
yaml: |
    "\f"
php: |
    "\x0c"
---
test: carriage return
yaml: |
    "\r"
php: |
    "\x0d"
---
test: escape
yaml: |
    "\e"
php: |
   "\x1b"
---
test: space
yaml: |
    "\ "
php: |
    "\x20"
---
test: slash
yaml: |
    "\/"
php: |
    "\x2f"
---
test: backslash
yaml: |
    "\\"
php: |
    "\\"
---
test: Unicode next line
yaml: |
    "\N"
php: |
    "\xc2\x85"
---
test: Unicode non-breaking space
yaml: |
    "\_"
php: |
    "\xc2\xa0"
---
test: Unicode line separator
yaml: |
    "\L"
php: |
    "\xe2\x80\xa8"
---
test: Unicode paragraph separator
yaml: |
    "\P"
php: |
    "\xe2\x80\xa9"
---
test: Escaped 8-bit Unicode
yaml: |
    "\x42"
php: |
    "B"
---
test: Escaped 16-bit Unicode
yaml: |
    "\u20ac"
php: |
    "\xe2\x82\xac"
---
test: Escaped 32-bit Unicode
yaml: |
    "\U00000043"
php: |
    "C"
---
test: Example 5.13 Escaped Characters
note: |
    Currently throws an error parsing first line. Maybe Symfony Yaml doesn't support
    continuation of string across multiple lines? Keeping test here but disabled.
todo: true
yaml: |
    "Fun with \\
    \" \a \b \e \f \
    \n \r \t \v \0 \
    \  \_ \N \L \P \
    \x41 \u0041 \U00000041"
php: |
    "Fun with \x5C\n\x22 \x07 \x08 \x1B \x0C\n\x0A \x0D \x09 \x0B \x00\n\x20 \xA0 \x85 \xe2\x80\xa8 \xe2\x80\xa9\nA A A"
---
test: Double quotes with a line feed
yaml: |
   { double: "some value\n \"some quoted string\" and 'some single quotes one'" }
php: |
    [
        'double' => "some value\n \"some quoted string\" and 'some single quotes one'"
    ]
---
test: Backslashes
yaml: |
    { single: 'foo\Var', no-quotes: foo\Var, double: "foo\\Var" }
php: |
    [
        'single' => 'foo\Var', 'no-quotes' => 'foo\Var', 'double' => 'foo\Var'
    ]
- escapedCharacters
- sfComments
- sfCompact
- sfTests
- sfObjects
- sfMergeKey
- sfQuotes
- YtsAnchorAlias
- YtsBasicTests
- YtsBlockMapping
- YtsDocumentSeparator
- YtsErrorTests
- YtsFlowCollections
- YtsFoldedScalars
- YtsNullsAndEmpties
- YtsSpecificationExamples
- YtsTypeTransfers
- unindentedCollections
data:
    single_line: 'foo bar baz'
    multi_line: |
        foo
        line with trailing spaces:
          
        bar
        integer like line:
        123456789
        empty line:
        
        baz
    multi_line_with_carriage_return: "foo\nbar\r\nbaz"
    nested_inlined_multi_line_string: { inlined_multi_line: "foo\nbar\r\nempty line:\n\nbaz" }
data:
    multi_line: |4
            the first line has leading spaces
        The second line does not.
- booleanMappingKeys
- numericMappingKeys
- nullMappingKey
- escapedCharacters
- sfComments
- sfCompact
- sfTests
- sfObjects
- sfMergeKey
- sfQuotes
- YtsAnchorAlias
- YtsBasicTests
- YtsBlockMapping
- YtsDocumentSeparator
- YtsErrorTests
- YtsFlowCollections
- YtsFoldedScalars
- YtsNullsAndEmpties
- YtsSpecificationExamples
- YtsTypeTransfers
- unindentedCollections
--- %YAML:1.0
test: Miscellaneous
spec: 2.21
yaml: |
  null: ~
php: |
  [
    'null' => null,
  ]
--- %YAML:1.0
test: A sequence with an unordered array
brief: >
  A sequence with an unordered array
yaml: |
  1: foo
  0: bar
php: |
  [1 => 'foo', 0 => 'bar']
---
test: Integers as Map Keys
brief: >
    An integer can be used as dictionary key.
yaml: |
    1: one
    2: two
    3: three
php: |
    [
        1 => 'one',
        2 => 'two',
        3 => 'three'
    ]
--- %YAML:1.0
test: Comments at the end of a line
brief: >
    Comments at the end of a line
yaml: |
    ex1: "foo # bar"
    ex2: "foo # bar" # comment
    ex3: 'foo # bar' # comment
    ex4: foo # comment
    ex5: foo	#	comment with tab before  
    ex6: foo#foo # comment here
    ex7: foo 	# ignore me # and me
php: |
    ['ex1' => 'foo # bar', 'ex2' => 'foo # bar', 'ex3' => 'foo # bar', 'ex4' => 'foo', 'ex5' => 'foo', 'ex6' => 'foo#foo', 'ex7' => 'foo']
---
test: Comments in the middle
brief: >
  Comments in the middle
yaml: |
    foo:
    # some comment
    # some comment
      bar: foo
    # some comment
    # some comment
php: |
    ['foo' => ['bar' => 'foo']]
---
test: Comments on a hash line
brief: >
  Comments on a hash line
yaml: |
    foo:   # a comment
      foo: bar # a comment
php: |
    ['foo' => ['foo' => 'bar']]
---
test: 'Value starting with a #'
brief: >
  'Value starting with a #'
yaml: |
    foo:   '#bar'
php: |
    ['foo' => '#bar']
---
test: Document starting with a comment and a separator
brief: >
  Commenting before document start is allowed
yaml: |
    # document comment
    ---
    foo: bar # a comment
php: |
    ['foo' => 'bar']
---
test: Comment containing a colon on a hash line
brief: >
    Comment containing a colon on a scalar line
yaml: 'foo # comment: this is also part of the comment'
php: |
    'foo'
---
test: 'Hash key containing a #'
brief: >
    'Hash key containing a #'
yaml: 'foo#bar: baz'
php: |
    ['foo#bar' => 'baz']
---
test: 'Hash key ending with a space and a #'
brief: >
    'Hash key ending with a space and a #'
yaml: |
    'foo #': baz
php: |
    ['foo #' => 'baz']
--- %YAML:1.0
test: Compact notation
brief: |
    Compact notation for sets of mappings with single element
yaml: |
  ---
  # products purchased
  - item    : Super Hoop
  - item    : Basketball
    quantity: 1
  - item:
      name: Big Shoes
      nick: Biggies
    quantity: 1
php: |
  [
    [
      'item' => 'Super Hoop',
    ],
    [
      'item' => 'Basketball',
      'quantity' => 1,
    ],
    [
      'item' => [
        'name' => 'Big Shoes',
        'nick' => 'Biggies'
      ],
      'quantity' => 1
    ]
  ]
---
test: Compact notation combined with inline notation
brief: |
    Combinations of compact and inline notation are allowed
yaml: |
  ---
  items:
    - { item: Super Hoop, quantity: 1 }
    - [ Basketball, Big Shoes ]
php: |
  [
    'items' => [
      [
        'item' => 'Super Hoop',
        'quantity' => 1,
      ],
      [
        'Basketball',
        'Big Shoes'
      ]
      ]
    ]
--- %YAML:1.0
test: Compact notation
brief: |
    Compact notation for sets of mappings with single element
yaml: |
  ---
  # products purchased
  - item    : Super Hoop
  - item    : Basketball
    quantity: 1
  - item:
      name: Big Shoes
      nick: Biggies
    quantity: 1
php: |
  [
    [
      'item' => 'Super Hoop',
    ],
    [
      'item' => 'Basketball',
      'quantity' => 1,
    ],
    [
      'item' => [
        'name' => 'Big Shoes',
        'nick' => 'Biggies'
      ],
      'quantity' => 1
    ]
  ]
---
test: Compact notation combined with inline notation
brief: |
    Combinations of compact and inline notation are allowed
yaml: |
  ---
  items:
    - { item: Super Hoop, quantity: 1 }
    - [ Basketball, Big Shoes ]
php: |
  [
    'items' => [
      [
        'item' => 'Super Hoop',
        'quantity' => 1,
      ],
      [
        'Basketball',
        'Big Shoes'
      ]
    ]
  ]
--- %YAML:1.0
test: Compact notation
brief: |
    Compact notation for sets of mappings with single element
yaml: |
  ---
  # products purchased
  - item    : Super Hoop
  - item    : Basketball
    quantity: 1
  - item:
      name: Big Shoes
      nick: Biggies
    quantity: 1
php: |
  [
    [
      'item' => 'Super Hoop',
    ],
    [
      'item' => 'Basketball',
      'quantity' => 1,
    ],
    [
      'item' => [
        'name' => 'Big Shoes',
        'nick' => 'Biggies'
      ],
      'quantity' => 1
    ]
  ]
---
test: Compact notation combined with inline notation
brief: |
    Combinations of compact and inline notation are allowed
yaml: |
  ---
  items:
    - { item: Super Hoop, quantity: 1 }
    - [ Basketball, Big Shoes ]
php: |
  [
    'items' => [
      [
        'item' => 'Super Hoop',
        'quantity' => 1,
      ],
      [
        'Basketball',
        'Big Shoes'
      ]
    ]
  ]
--- %YAML:1.0
test: Simple In Place Substitution
brief: >
    If you want to reuse an entire alias, only overwriting what is different
    you can use a << in place substitution. This is not part of the official
    YAML spec, but a widely implemented extension. See the following URL for
    details: http://yaml.org/type/merge.html
yaml: |
    foo: &foo
        a: Steve
        b: Clark
        c: Brian
        e: notnull
    bar:
        a: before
        d: other
        e: ~
        <<: *foo
        b: new
        x: Oren
        c:
            foo: bar
            bar: foo
    bar_inline: {a: before, d: other, <<: *foo, b: new, x: Oren, c: { foo: bar, bar: foo}}
    foo2: &foo2
        a: Ballmer
    ding: &dong [ fi, fei, fo, fam]
    check:
        <<:
            - *foo
            - *dong
        isit: tested
    head:
        <<: [ *foo , *dong , *foo2 ]
    taz: &taz
        a: Steve
        w:
            p: 1234
    nested:
        <<: *taz
        d: Doug
        w: &nestedref
            p: 12345
        z:
            <<: *nestedref
    head_inline: &head_inline { <<: [ *foo , *dong , *foo2 ] }
    recursive_inline: { <<: *head_inline, c: { <<: *foo2 } }
php: |
    [
        'foo' => ['a' => 'Steve', 'b' => 'Clark', 'c' => 'Brian', 'e' => 'notnull'],
        'bar' => ['a' => 'before', 'd' => 'other', 'e' => null, 'b' => 'new', 'c' => ['foo' => 'bar', 'bar' => 'foo'], 'x' => 'Oren'],
        'bar_inline' => ['a' => 'before', 'd' => 'other', 'b' => 'new', 'c' => ['foo' => 'bar', 'bar' => 'foo'], 'e' => 'notnull', 'x' => 'Oren'],
        'foo2' => ['a' => 'Ballmer'],
        'ding' => ['fi', 'fei', 'fo', 'fam'],
        'check' => ['a' => 'Steve', 'b' => 'Clark', 'c' => 'Brian', 'e' => 'notnull', 'fi', 'fei', 'fo', 'fam', 'isit' => 'tested'],
        'head' => ['a' => 'Steve', 'b' => 'Clark', 'c' => 'Brian', 'e' => 'notnull', 'fi', 'fei', 'fo', 'fam'],
        'taz' => ['a' => 'Steve', 'w' => ['p' => 1234]],
        'nested' => ['a' => 'Steve', 'w' => ['p' => 12345], 'd' => 'Doug', 'z' => ['p' => 12345]],
        'head_inline' => ['a' => 'Steve', 'b' => 'Clark', 'c' => 'Brian', 'e' => 'notnull', 'fi', 'fei', 'fo', 'fam'],
        'recursive_inline' => ['a' => 'Steve', 'b' => 'Clark', 'c' => ['a' => 'Ballmer'], 'e' => 'notnull', 'fi', 'fei', 'fo', 'fam'],
    ]
--- %YAML:1.0
test: Objects
brief: >
    Comments at the end of a line
yaml: |
    ex1: "foo # bar"
    ex2: "foo # bar" # comment
    ex3: 'foo # bar' # comment
    ex4: foo # comment
php: |
    ['ex1' => 'foo # bar', 'ex2' => 'foo # bar', 'ex3' => 'foo # bar', 'ex4' => 'foo']
--- %YAML:1.0
test: Some characters at the beginning of a string must be escaped
brief: >
    Some characters at the beginning of a string must be escaped
yaml: |
    foo: '| bar'
php: |
    ['foo' => '| bar']
---
test: A key can be a quoted string
brief: >
  A key can be a quoted string
yaml: |
    "foo1": bar
    'foo2': bar
    "foo \" bar": bar
    'foo '' bar': bar
    'foo3: ': bar
    "foo4: ": bar
    foo5: { "foo \" bar: ": bar, 'foo '' bar: ': bar }
php: |
    [
      'foo1' => 'bar',
      'foo2' => 'bar',
      'foo " bar' => 'bar',
      'foo \' bar' => 'bar',
      'foo3: ' => 'bar',
      'foo4: ' => 'bar',
      'foo5' => [
        'foo " bar: ' => 'bar',
        'foo \' bar: ' => 'bar',
      ],
    ]
--- %YAML:1.0
test: Multiple quoted string on one line
brief: >
    Multiple quoted string on one line
yaml: |
    stripped_title: { name: "foo bar", help: "bar foo" }
php: |
    ['stripped_title' => ['name' => 'foo bar', 'help' => 'bar foo']]
---
test: Empty sequence
yaml: |
    foo: [ ]
php: |
    ['foo' => []]
---
test: Empty value
yaml: |
    foo:
php: |
    ['foo' => null]
---
test: Inline string parsing
brief: >
    Inline string parsing
yaml: |
    test: ['complex: string', 'another [string]']
php: |
    ['test' => ['complex: string', 'another [string]']]
---
test: Boolean
brief: >
    Boolean
yaml: |
    - false
    - true
    - null
    - ~
    - 'false'
    - 'true'
    - 'null'
    - '~'
php: |
    [
      false,
      true,
      null,
      null,
      'false',
      'true',
      'null',
      '~',
    ]
---
test: Empty lines in literal blocks
brief: >
  Empty lines in literal blocks
yaml: |
  foo:
    bar: |
      foo


        
      bar
php: |
  ['foo' => ['bar' => "foo\n\n\n  \nbar\n"]]
---
test: Empty lines in folded blocks
brief: >
  Empty lines in folded blocks
yaml: |
  foo:
    bar: >

      foo

      
      bar
php: |
  ['foo' => ['bar' => "\nfoo\n\nbar\n"]]
---
test: IP addresses
brief: >
  IP addresses
yaml: |
  foo: 10.0.0.2
php: |
  ['foo' => '10.0.0.2']
---
test: A sequence with an embedded mapping
brief: >
  A sequence with an embedded mapping
yaml: |
  - foo
  - bar: { bar: foo }
php: |
  ['foo', ['bar' => ['bar' => 'foo']]]
---
test: Octal
brief: as in spec example 2.19, octal value is converted
yaml: |
  foo: 0123
php: |
  ['foo' => 83]
---
test: Octal strings
brief: Octal notation in a string must remain a string
yaml: |
  foo: "0123"
php: |
  ['foo' => '0123']
---
test: Octal strings
brief: Octal notation in a string must remain a string
yaml: |
  foo: '0123'
php: |
  ['foo' => '0123']
---
test: Octal strings
brief: Octal notation in a string must remain a string
yaml: |
  foo: |
    0123
php: |
  ['foo' => "0123\n"]
---
test: Document as a simple hash
brief: Document as a simple hash
yaml: |
  { foo: bar }
php: |
  ['foo' => 'bar']
---
test: Document as a simple array
brief: Document as a simple array
yaml: |
  [ foo, bar ]
php: |
  ['foo', 'bar']
--- %YAML:1.0
test: Unindented collection
brief: >
    Unindented collection
yaml: |
    collection:
    - item1
    - item2
    - item3
php: |
    ['collection' => ['item1', 'item2', 'item3']]
---
test: Nested unindented collection (two levels)
brief: >
    Nested unindented collection
yaml: |
    collection:
        key:
        - a
        - b
        - c
php: |
    ['collection' => ['key' => ['a', 'b', 'c']]]
---
test: Nested unindented collection (three levels)
brief: >
    Nested unindented collection
yaml: |
    collection:
        key:
            subkey:
            - one
            - two
            - three
php: |
    ['collection' => ['key' => ['subkey' => ['one', 'two', 'three']]]]
---
test: Key/value after unindented collection (1)
brief: >
    Key/value after unindented collection (1)
yaml: |
    collection:
        key:
        - a
        - b
        - c
    foo: bar
php: |
    ['collection' => ['key' => ['a', 'b', 'c']], 'foo' => 'bar']
---
test: Key/value after unindented collection (at the same level)
brief: >
    Key/value after unindented collection
yaml: |
    collection:
        key:
        - a
        - b
        - c
        foo: bar
php: |
    ['collection' => ['key' => ['a', 'b', 'c'], 'foo' => 'bar']]
---
test: Shortcut Key after unindented collection
brief: >
    Key/value after unindented collection
yaml: |
    collection:
    - key: foo
      foo: bar
php: |
    ['collection' => [['key' => 'foo', 'foo' => 'bar']]]
---
test: Shortcut Key after unindented collection with custom spaces
brief: >
    Key/value after unindented collection
yaml: |
    collection:
    -  key: foo
       foo: bar
php: |
    ['collection' => [['key' => 'foo', 'foo' => 'bar']]]
<?php

/*
 * This file is part of the Symfony package.
 *
 * (c) Fabien Potencier <fabien@symfony.com>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

namespace Symfony\Component\Yaml\Tests;

use PHPUnit\Framework\TestCase;
use Symfony\Component\Yaml\Exception\ParseException;
use Symfony\Component\Yaml\Inline;
use Symfony\Component\Yaml\Tag\TaggedValue;
use Symfony\Component\Yaml\Yaml;

class InlineTest extends TestCase
{
    protected function setUp()
    {
        Inline::initialize(0, 0);
    }

    /**
     * @dataProvider getTestsForParse
     */
    public function testParse($yaml, $value, $flags = 0)
    {
        $this->assertSame($value, Inline::parse($yaml, $flags), sprintf('::parse() converts an inline YAML to a PHP structure (%s)', $yaml));
    }

    /**
     * @dataProvider getTestsForParseWithMapObjects
     */
    public function testParseWithMapObjects($yaml, $value, $flags = Yaml::PARSE_OBJECT_FOR_MAP)
    {
        $actual = Inline::parse($yaml, $flags);

        $this->assertSame(serialize($value), serialize($actual));
    }

    /**
     * @dataProvider getTestsForParsePhpConstants
     */
    public function testParsePhpConstants($yaml, $value)
    {
        $actual = Inline::parse($yaml, Yaml::PARSE_CONSTANT);

        $this->assertSame($value, $actual);
    }

    public function getTestsForParsePhpConstants()
    {
        return [
            ['!php/const Symfony\Component\Yaml\Yaml::PARSE_CONSTANT', Yaml::PARSE_CONSTANT],
            ['!php/const PHP_INT_MAX', PHP_INT_MAX],
            ['[!php/const PHP_INT_MAX]', [PHP_INT_MAX]],
            ['{ foo: !php/const PHP_INT_MAX }', ['foo' => PHP_INT_MAX]],
            ['!php/const NULL', null],
        ];
    }

    /**
     * @expectedException \Symfony\Component\Yaml\Exception\ParseException
     * @expectedExceptionMessage The constant "WRONG_CONSTANT" is not defined
     */
    public function testParsePhpConstantThrowsExceptionWhenUndefined()
    {
        Inline::parse('!php/const WRONG_CONSTANT', Yaml::PARSE_CONSTANT);
    }

    /**
     * @expectedException \Symfony\Component\Yaml\Exception\ParseException
     * @expectedExceptionMessageRegExp #The string "!php/const PHP_INT_MAX" could not be parsed as a constant.*#
     */
    public function testParsePhpConstantThrowsExceptionOnInvalidType()
    {
        Inline::parse('!php/const PHP_INT_MAX', Yaml::PARSE_EXCEPTION_ON_INVALID_TYPE);
    }

    /**
     * @dataProvider getTestsForDump
     */
    public function testDump($yaml, $value, $parseFlags = 0)
    {
        $this->assertEquals($yaml, Inline::dump($value), sprintf('::dump() converts a PHP structure to an inline YAML (%s)', $yaml));

        $this->assertSame($value, Inline::parse(Inline::dump($value), $parseFlags), 'check consistency');
    }

    public function testDumpNumericValueWithLocale()
    {
        $locale = setlocale(LC_NUMERIC, 0);
        if (false === $locale) {
            $this->markTestSkipped('Your platform does not support locales.');
        }

        try {
            $requiredLocales = ['fr_FR.UTF-8', 'fr_FR.UTF8', 'fr_FR.utf-8', 'fr_FR.utf8', 'French_France.1252'];
            if (false === setlocale(LC_NUMERIC, $requiredLocales)) {
                $this->markTestSkipped('Could not set any of required locales: '.implode(', ', $requiredLocales));
            }

            $this->assertEquals('1.2', Inline::dump(1.2));
            $this->assertContains('fr', strtolower(setlocale(LC_NUMERIC, 0)));
        } finally {
            setlocale(LC_NUMERIC, $locale);
        }
    }

    public function testHashStringsResemblingExponentialNumericsShouldNotBeChangedToINF()
    {
        $value = '686e444';

        $this->assertSame($value, Inline::parse(Inline::dump($value)));
    }

    /**
     * @expectedException        \Symfony\Component\Yaml\Exception\ParseException
     * @expectedExceptionMessage Found unknown escape character "\V".
     */
    public function testParseScalarWithNonEscapedBlackslashShouldThrowException()
    {
        Inline::parse('"Foo\Var"');
    }

    /**
     * @expectedException \Symfony\Component\Yaml\Exception\ParseException
     */
    public function testParseScalarWithNonEscapedBlackslashAtTheEndShouldThrowException()
    {
        Inline::parse('"Foo\\"');
    }

    /**
     * @expectedException \Symfony\Component\Yaml\Exception\ParseException
     */
    public function testParseScalarWithIncorrectlyQuotedStringShouldThrowException()
    {
        $value = "'don't do somthin' like that'";
        Inline::parse($value);
    }

    /**
     * @expectedException \Symfony\Component\Yaml\Exception\ParseException
     */
    public function testParseScalarWithIncorrectlyDoubleQuotedStringShouldThrowException()
    {
        $value = '"don"t do somthin" like that"';
        Inline::parse($value);
    }

    /**
     * @expectedException \Symfony\Component\Yaml\Exception\ParseException
     */
    public function testParseInvalidMappingKeyShouldThrowException()
    {
        $value = '{ "foo " bar": "bar" }';
        Inline::parse($value);
    }

    /**
     * @expectedException \Symfony\Component\Yaml\Exception\ParseException
     * @expectedExceptionMessage Colons must be followed by a space or an indication character (i.e. " ", ",", "[", "]", "{", "}")
     */
    public function testParseMappingKeyWithColonNotFollowedBySpace()
    {
        Inline::parse('{foo:""}');
    }

    /**
     * @expectedException \Symfony\Component\Yaml\Exception\ParseException
     */
    public function testParseInvalidMappingShouldThrowException()
    {
        Inline::parse('[foo] bar');
    }

    /**
     * @expectedException \Symfony\Component\Yaml\Exception\ParseException
     */
    public function testParseInvalidSequenceShouldThrowException()
    {
        Inline::parse('{ foo: bar } bar');
    }

    public function testParseScalarWithCorrectlyQuotedStringShouldReturnString()
    {
        $value = "'don''t do somthin'' like that'";
        $expect = "don't do somthin' like that";

        $this->assertSame($expect, Inline::parseScalar($value));
    }

    /**
     * @dataProvider getDataForParseReferences
     */
    public function testParseReferences($yaml, $expected)
    {
        $this->assertSame($expected, Inline::parse($yaml, 0, ['var' => 'var-value']));
    }

    public function getDataForParseReferences()
    {
        return [
            'scalar' => ['*var', 'var-value'],
            'list' => ['[ *var ]', ['var-value']],
            'list-in-list' => ['[[ *var ]]', [['var-value']]],
            'map-in-list' => ['[ { key: *var } ]', [['key' => 'var-value']]],
            'embedded-mapping-in-list' => ['[ key: *var ]', [['key' => 'var-value']]],
            'map' => ['{ key: *var }', ['key' => 'var-value']],
            'list-in-map' => ['{ key: [*var] }', ['key' => ['var-value']]],
            'map-in-map' => ['{ foo: { bar: *var } }', ['foo' => ['bar' => 'var-value']]],
        ];
    }

    public function testParseMapReferenceInSequence()
    {
        $foo = [
            'a' => 'Steve',
            'b' => 'Clark',
            'c' => 'Brian',
        ];
        $this->assertSame([$foo], Inline::parse('[*foo]', 0, ['foo' => $foo]));
    }

    /**
     * @expectedException \Symfony\Component\Yaml\Exception\ParseException
     * @expectedExceptionMessage A reference must contain at least one character at line 1.
     */
    public function testParseUnquotedAsterisk()
    {
        Inline::parse('{ foo: * }');
    }

    /**
     * @expectedException \Symfony\Component\Yaml\Exception\ParseException
     * @expectedExceptionMessage A reference must contain at least one character at line 1.
     */
    public function testParseUnquotedAsteriskFollowedByAComment()
    {
        Inline::parse('{ foo: * #foo }');
    }

    /**
     * @dataProvider getReservedIndicators
     */
    public function testParseUnquotedScalarStartingWithReservedIndicator($indicator)
    {
        if (method_exists($this, 'expectExceptionMessage')) {
            $this->expectException(ParseException::class);
            $this->expectExceptionMessage(sprintf('cannot start a plain scalar; you need to quote the scalar at line 1 (near "%sfoo").', $indicator));
        } else {
            $this->setExpectedException(ParseException::class, sprintf('cannot start a plain scalar; you need to quote the scalar at line 1 (near "%sfoo").', $indicator));
        }

        Inline::parse(sprintf('{ foo: %sfoo }', $indicator));
    }

    public function getReservedIndicators()
    {
        return [['@'], ['`']];
    }

    /**
     * @dataProvider getScalarIndicators
     */
    public function testParseUnquotedScalarStartingWithScalarIndicator($indicator)
    {
        if (method_exists($this, 'expectExceptionMessage')) {
            $this->expectException(ParseException::class);
            $this->expectExceptionMessage(sprintf('cannot start a plain scalar; you need to quote the scalar at line 1 (near "%sfoo").', $indicator));
        } else {
            $this->setExpectedException(ParseException::class, sprintf('cannot start a plain scalar; you need to quote the scalar at line 1 (near "%sfoo").', $indicator));
        }

        Inline::parse(sprintf('{ foo: %sfoo }', $indicator));
    }

    public function getScalarIndicators()
    {
        return [['|'], ['>'], ['%']];
    }

    /**
     * @dataProvider getDataForIsHash
     */
    public function testIsHash($array, $expected)
    {
        $this->assertSame($expected, Inline::isHash($array));
    }

    public function getDataForIsHash()
    {
        return [
            [[], false],
            [[1, 2, 3], false],
            [[2 => 1, 1 => 2, 0 => 3], true],
            [['foo' => 1, 'bar' => 2], true],
        ];
    }

    public function getTestsForParse()
    {
        return [
            ['', ''],
            ['null', null],
            ['false', false],
            ['true', true],
            ['12', 12],
            ['-12', -12],
            ['1_2', 12],
            ['_12', '_12'],
            ['12_', 12],
            ['"quoted string"', 'quoted string'],
            ["'quoted string'", 'quoted string'],
            ['12.30e+02', 12.30e+02],
            ['123.45_67', 123.4567],
            ['0x4D2', 0x4D2],
            ['0x_4_D_2_', 0x4D2],
            ['02333', 02333],
            ['0_2_3_3_3', 02333],
            ['.Inf', -log(0)],
            ['-.Inf', log(0)],
            ["'686e444'", '686e444'],
            ['686e444', 646e444],
            ['123456789123456789123456789123456789', '123456789123456789123456789123456789'],
            ['"foo\r\nbar"', "foo\r\nbar"],
            ["'foo#bar'", 'foo#bar'],
            ["'foo # bar'", 'foo # bar'],
            ["'#cfcfcf'", '#cfcfcf'],
            ['::form_base.html.twig', '::form_base.html.twig'],

            // Pre-YAML-1.2 booleans
            ["'y'", 'y'],
            ["'n'", 'n'],
            ["'yes'", 'yes'],
            ["'no'", 'no'],
            ["'on'", 'on'],
            ["'off'", 'off'],

            ['2007-10-30', gmmktime(0, 0, 0, 10, 30, 2007)],
            ['2007-10-30T02:59:43Z', gmmktime(2, 59, 43, 10, 30, 2007)],
            ['2007-10-30 02:59:43 Z', gmmktime(2, 59, 43, 10, 30, 2007)],
            ['1960-10-30 02:59:43 Z', gmmktime(2, 59, 43, 10, 30, 1960)],
            ['1730-10-30T02:59:43Z', gmmktime(2, 59, 43, 10, 30, 1730)],

            ['"a \\"string\\" with \'quoted strings inside\'"', 'a "string" with \'quoted strings inside\''],
            ["'a \"string\" with ''quoted strings inside'''", 'a "string" with \'quoted strings inside\''],

            // sequences
            // urls are no key value mapping. see #3609. Valid yaml "key: value" mappings require a space after the colon
            ['[foo, http://urls.are/no/mappings, false, null, 12]', ['foo', 'http://urls.are/no/mappings', false, null, 12]],
            ['[  foo  ,   bar , false  ,  null     ,  12  ]', ['foo', 'bar', false, null, 12]],
            ['[\'foo,bar\', \'foo bar\']', ['foo,bar', 'foo bar']],

            // mappings
            ['{foo: bar,bar: foo,"false": false, "null": null,integer: 12}', ['foo' => 'bar', 'bar' => 'foo', 'false' => false, 'null' => null, 'integer' => 12]],
            ['{ foo  : bar, bar : foo, "false"  :   false,  "null"  :   null,  integer :  12  }', ['foo' => 'bar', 'bar' => 'foo', 'false' => false, 'null' => null, 'integer' => 12]],
            ['{foo: \'bar\', bar: \'foo: bar\'}', ['foo' => 'bar', 'bar' => 'foo: bar']],
            ['{\'foo\': \'bar\', "bar": \'foo: bar\'}', ['foo' => 'bar', 'bar' => 'foo: bar']],
            ['{\'foo\'\'\': \'bar\', "bar\"": \'foo: bar\'}', ['foo\'' => 'bar', 'bar"' => 'foo: bar']],
            ['{\'foo: \': \'bar\', "bar: ": \'foo: bar\'}', ['foo: ' => 'bar', 'bar: ' => 'foo: bar']],
            ['{"foo:bar": "baz"}', ['foo:bar' => 'baz']],
            ['{"foo":"bar"}', ['foo' => 'bar']],

            // nested sequences and mappings
            ['[foo, [bar, foo]]', ['foo', ['bar', 'foo']]],
            ['[foo, {bar: foo}]', ['foo', ['bar' => 'foo']]],
            ['{ foo: {bar: foo} }', ['foo' => ['bar' => 'foo']]],
            ['{ foo: [bar, foo] }', ['foo' => ['bar', 'foo']]],
            ['{ foo:{bar: foo} }', ['foo' => ['bar' => 'foo']]],
            ['{ foo:[bar, foo] }', ['foo' => ['bar', 'foo']]],

            ['[  foo, [  bar, foo  ]  ]', ['foo', ['bar', 'foo']]],

            ['[{ foo: {bar: foo} }]', [['foo' => ['bar' => 'foo']]]],

            ['[foo, [bar, [foo, [bar, foo]], foo]]', ['foo', ['bar', ['foo', ['bar', 'foo']], 'foo']]],

            ['[foo, {bar: foo, foo: [foo, {bar: foo}]}, [foo, {bar: foo}]]', ['foo', ['bar' => 'foo', 'foo' => ['foo', ['bar' => 'foo']]], ['foo', ['bar' => 'foo']]]],

            ['[foo, bar: { foo: bar }]', ['foo', '1' => ['bar' => ['foo' => 'bar']]]],
            ['[foo, \'@foo.baz\', { \'%foo%\': \'foo is %foo%\', bar: \'%foo%\' }, true, \'@service_container\']', ['foo', '@foo.baz', ['%foo%' => 'foo is %foo%', 'bar' => '%foo%'], true, '@service_container']],
        ];
    }

    public function getTestsForParseWithMapObjects()
    {
        return [
            ['', ''],
            ['null', null],
            ['false', false],
            ['true', true],
            ['12', 12],
            ['-12', -12],
            ['"quoted string"', 'quoted string'],
            ["'quoted string'", 'quoted string'],
            ['12.30e+02', 12.30e+02],
            ['0x4D2', 0x4D2],
            ['02333', 02333],
            ['.Inf', -log(0)],
            ['-.Inf', log(0)],
            ["'686e444'", '686e444'],
            ['686e444', 646e444],
            ['123456789123456789123456789123456789', '123456789123456789123456789123456789'],
            ['"foo\r\nbar"', "foo\r\nbar"],
            ["'foo#bar'", 'foo#bar'],
            ["'foo # bar'", 'foo # bar'],
            ["'#cfcfcf'", '#cfcfcf'],
            ['::form_base.html.twig', '::form_base.html.twig'],

            ['2007-10-30', gmmktime(0, 0, 0, 10, 30, 2007)],
            ['2007-10-30T02:59:43Z', gmmktime(2, 59, 43, 10, 30, 2007)],
            ['2007-10-30 02:59:43 Z', gmmktime(2, 59, 43, 10, 30, 2007)],
            ['1960-10-30 02:59:43 Z', gmmktime(2, 59, 43, 10, 30, 1960)],
            ['1730-10-30T02:59:43Z', gmmktime(2, 59, 43, 10, 30, 1730)],

            ['"a \\"string\\" with \'quoted strings inside\'"', 'a "string" with \'quoted strings inside\''],
            ["'a \"string\" with ''quoted strings inside'''", 'a "string" with \'quoted strings inside\''],

            // sequences
            // urls are no key value mapping. see #3609. Valid yaml "key: value" mappings require a space after the colon
            ['[foo, http://urls.are/no/mappings, false, null, 12]', ['foo', 'http://urls.are/no/mappings', false, null, 12]],
            ['[  foo  ,   bar , false  ,  null     ,  12  ]', ['foo', 'bar', false, null, 12]],
            ['[\'foo,bar\', \'foo bar\']', ['foo,bar', 'foo bar']],

            // mappings
            ['{foo: bar,bar: foo,"false": false,"null": null,integer: 12}', (object) ['foo' => 'bar', 'bar' => 'foo', 'false' => false, 'null' => null, 'integer' => 12], Yaml::PARSE_OBJECT_FOR_MAP],
            ['{ foo  : bar, bar : foo,  "false"  :   false,  "null"  :   null,  integer :  12  }', (object) ['foo' => 'bar', 'bar' => 'foo', 'false' => false, 'null' => null, 'integer' => 12], Yaml::PARSE_OBJECT_FOR_MAP],
            ['{foo: \'bar\', bar: \'foo: bar\'}', (object) ['foo' => 'bar', 'bar' => 'foo: bar']],
            ['{\'foo\': \'bar\', "bar": \'foo: bar\'}', (object) ['foo' => 'bar', 'bar' => 'foo: bar']],
            ['{\'foo\'\'\': \'bar\', "bar\"": \'foo: bar\'}', (object) ['foo\'' => 'bar', 'bar"' => 'foo: bar']],
            ['{\'foo: \': \'bar\', "bar: ": \'foo: bar\'}', (object) ['foo: ' => 'bar', 'bar: ' => 'foo: bar']],
            ['{"foo:bar": "baz"}', (object) ['foo:bar' => 'baz']],
            ['{"foo":"bar"}', (object) ['foo' => 'bar']],

            // nested sequences and mappings
            ['[foo, [bar, foo]]', ['foo', ['bar', 'foo']]],
            ['[foo, {bar: foo}]', ['foo', (object) ['bar' => 'foo']]],
            ['{ foo: {bar: foo} }', (object) ['foo' => (object) ['bar' => 'foo']]],
            ['{ foo: [bar, foo] }', (object) ['foo' => ['bar', 'foo']]],

            ['[  foo, [  bar, foo  ]  ]', ['foo', ['bar', 'foo']]],

            ['[{ foo: {bar: foo} }]', [(object) ['foo' => (object) ['bar' => 'foo']]]],

            ['[foo, [bar, [foo, [bar, foo]], foo]]', ['foo', ['bar', ['foo', ['bar', 'foo']], 'foo']]],

            ['[foo, {bar: foo, foo: [foo, {bar: foo}]}, [foo, {bar: foo}]]', ['foo', (object) ['bar' => 'foo', 'foo' => ['foo', (object) ['bar' => 'foo']]], ['foo', (object) ['bar' => 'foo']]]],

            ['[foo, bar: { foo: bar }]', ['foo', '1' => (object) ['bar' => (object) ['foo' => 'bar']]]],
            ['[foo, \'@foo.baz\', { \'%foo%\': \'foo is %foo%\', bar: \'%foo%\' }, true, \'@service_container\']', ['foo', '@foo.baz', (object) ['%foo%' => 'foo is %foo%', 'bar' => '%foo%'], true, '@service_container']],

            ['{}', new \stdClass()],
            ['{ foo  : bar, bar : {}  }', (object) ['foo' => 'bar', 'bar' => new \stdClass()]],
            ['{ foo  : [], bar : {}  }', (object) ['foo' => [], 'bar' => new \stdClass()]],
            ['{foo: \'bar\', bar: {} }', (object) ['foo' => 'bar', 'bar' => new \stdClass()]],
            ['{\'foo\': \'bar\', "bar": {}}', (object) ['foo' => 'bar', 'bar' => new \stdClass()]],
            ['{\'foo\': \'bar\', "bar": \'{}\'}', (object) ['foo' => 'bar', 'bar' => '{}']],

            ['[foo, [{}, {}]]', ['foo', [new \stdClass(), new \stdClass()]]],
            ['[foo, [[], {}]]', ['foo', [[], new \stdClass()]]],
            ['[foo, [[{}, {}], {}]]', ['foo', [[new \stdClass(), new \stdClass()], new \stdClass()]]],
            ['[foo, {bar: {}}]', ['foo', '1' => (object) ['bar' => new \stdClass()]]],
        ];
    }

    public function getTestsForDump()
    {
        return [
            ['null', null],
            ['false', false],
            ['true', true],
            ['12', 12],
            ["'1_2'", '1_2'],
            ['_12', '_12'],
            ["'12_'", '12_'],
            ["'quoted string'", 'quoted string'],
            ['!!float 1230', 12.30e+02],
            ['1234', 0x4D2],
            ['1243', 02333],
            ["'0x_4_D_2_'", '0x_4_D_2_'],
            ["'0_2_3_3_3'", '0_2_3_3_3'],
            ['.Inf', -log(0)],
            ['-.Inf', log(0)],
            ["'686e444'", '686e444'],
            ['"foo\r\nbar"', "foo\r\nbar"],
            ["'foo#bar'", 'foo#bar'],
            ["'foo # bar'", 'foo # bar'],
            ["'#cfcfcf'", '#cfcfcf'],

            ["'a \"string\" with ''quoted strings inside'''", 'a "string" with \'quoted strings inside\''],

            ["'-dash'", '-dash'],
            ["'-'", '-'],

            // Pre-YAML-1.2 booleans
            ["'y'", 'y'],
            ["'n'", 'n'],
            ["'yes'", 'yes'],
            ["'no'", 'no'],
            ["'on'", 'on'],
            ["'off'", 'off'],

            // sequences
            ['[foo, bar, false, null, 12]', ['foo', 'bar', false, null, 12]],
            ['[\'foo,bar\', \'foo bar\']', ['foo,bar', 'foo bar']],

            // mappings
            ['{ foo: bar, bar: foo, \'false\': false, \'null\': null, integer: 12 }', ['foo' => 'bar', 'bar' => 'foo', 'false' => false, 'null' => null, 'integer' => 12]],
            ['{ foo: bar, bar: \'foo: bar\' }', ['foo' => 'bar', 'bar' => 'foo: bar']],

            // nested sequences and mappings
            ['[foo, [bar, foo]]', ['foo', ['bar', 'foo']]],

            ['[foo, [bar, [foo, [bar, foo]], foo]]', ['foo', ['bar', ['foo', ['bar', 'foo']], 'foo']]],

            ['{ foo: { bar: foo } }', ['foo' => ['bar' => 'foo']]],

            ['[foo, { bar: foo }]', ['foo', ['bar' => 'foo']]],

            ['[foo, { bar: foo, foo: [foo, { bar: foo }] }, [foo, { bar: foo }]]', ['foo', ['bar' => 'foo', 'foo' => ['foo', ['bar' => 'foo']]], ['foo', ['bar' => 'foo']]]],

            ['[foo, \'@foo.baz\', { \'%foo%\': \'foo is %foo%\', bar: \'%foo%\' }, true, \'@service_container\']', ['foo', '@foo.baz', ['%foo%' => 'foo is %foo%', 'bar' => '%foo%'], true, '@service_container']],

            ['{ foo: { bar: { 1: 2, baz: 3 } } }', ['foo' => ['bar' => [1 => 2, 'baz' => 3]]]],
        ];
    }

    /**
     * @dataProvider getTimestampTests
     */
    public function testParseTimestampAsUnixTimestampByDefault($yaml, $year, $month, $day, $hour, $minute, $second)
    {
        $this->assertSame(gmmktime($hour, $minute, $second, $month, $day, $year), Inline::parse($yaml));
    }

    /**
     * @dataProvider getTimestampTests
     */
    public function testParseTimestampAsDateTimeObject($yaml, $year, $month, $day, $hour, $minute, $second, $timezone)
    {
        $expected = new \DateTime($yaml);
        $expected->setTimeZone(new \DateTimeZone('UTC'));
        $expected->setDate($year, $month, $day);
        $expected->setTime($hour, $minute, $second, 1000000 * ($second - (int) $second));

        $date = Inline::parse($yaml, Yaml::PARSE_DATETIME);
        $this->assertEquals($expected, $date);
        $this->assertSame($timezone, $date->format('O'));
    }

    public function getTimestampTests()
    {
        return [
            'canonical' => ['2001-12-15T02:59:43.1Z', 2001, 12, 15, 2, 59, 43.1, '+0000'],
            'ISO-8601' => ['2001-12-15t21:59:43.10-05:00', 2001, 12, 16, 2, 59, 43.1, '-0500'],
            'spaced' => ['2001-12-15 21:59:43.10 -5', 2001, 12, 16, 2, 59, 43.1, '-0500'],
            'date' => ['2001-12-15', 2001, 12, 15, 0, 0, 0, '+0000'],
        ];
    }

    /**
     * @dataProvider getTimestampTests
     */
    public function testParseNestedTimestampListAsDateTimeObject($yaml, $year, $month, $day, $hour, $minute, $second)
    {
        $expected = new \DateTime($yaml);
        $expected->setTimeZone(new \DateTimeZone('UTC'));
        $expected->setDate($year, $month, $day);
        $expected->setTime($hour, $minute, $second, 1000000 * ($second - (int) $second));

        $expectedNested = ['nested' => [$expected]];
        $yamlNested = "{nested: [$yaml]}";

        $this->assertEquals($expectedNested, Inline::parse($yamlNested, Yaml::PARSE_DATETIME));
    }

    /**
     * @dataProvider getDateTimeDumpTests
     */
    public function testDumpDateTime($dateTime, $expected)
    {
        $this->assertSame($expected, Inline::dump($dateTime));
    }

    public function getDateTimeDumpTests()
    {
        $tests = [];

        $dateTime = new \DateTime('2001-12-15 21:59:43', new \DateTimeZone('UTC'));
        $tests['date-time-utc'] = [$dateTime, '2001-12-15T21:59:43+00:00'];

        $dateTime = new \DateTimeImmutable('2001-07-15 21:59:43', new \DateTimeZone('Europe/Berlin'));
        $tests['immutable-date-time-europe-berlin'] = [$dateTime, '2001-07-15T21:59:43+02:00'];

        return $tests;
    }

    /**
     * @dataProvider getBinaryData
     */
    public function testParseBinaryData($data)
    {
        $this->assertSame('Hello world', Inline::parse($data));
    }

    public function getBinaryData()
    {
        return [
            'enclosed with double quotes' => ['!!binary "SGVsbG8gd29ybGQ="'],
            'enclosed with single quotes' => ["!!binary 'SGVsbG8gd29ybGQ='"],
            'containing spaces' => ['!!binary  "SGVs bG8gd 29ybGQ="'],
        ];
    }

    /**
     * @dataProvider getInvalidBinaryData
     * @expectedException \Symfony\Component\Yaml\Exception\ParseException
     */
    public function testParseInvalidBinaryData($data, $expectedMessage)
    {
        if (method_exists($this, 'expectException')) {
            $this->expectExceptionMessageRegExp($expectedMessage);
        } else {
            $this->setExpectedExceptionRegExp(ParseException::class, $expectedMessage);
        }

        Inline::parse($data);
    }

    public function getInvalidBinaryData()
    {
        return [
            'length not a multiple of four' => ['!!binary "SGVsbG8d29ybGQ="', '/The normalized base64 encoded data \(data without whitespace characters\) length must be a multiple of four \(\d+ bytes given\)/'],
            'invalid characters' => ['!!binary "SGVsbG8#d29ybGQ="', '/The base64 encoded data \(.*\) contains invalid characters/'],
            'too many equals characters' => ['!!binary "SGVsbG8gd29yb==="', '/The base64 encoded data \(.*\) contains invalid characters/'],
            'misplaced equals character' => ['!!binary "SGVsbG8gd29ybG=Q"', '/The base64 encoded data \(.*\) contains invalid characters/'],
        ];
    }

    /**
     * @expectedException \Symfony\Component\Yaml\Exception\ParseException
     * @expectedExceptionMessage Malformed inline YAML string: {this, is not, supported} at line 1.
     */
    public function testNotSupportedMissingValue()
    {
        Inline::parse('{this, is not, supported}');
    }

    public function testVeryLongQuotedStrings()
    {
        $longStringWithQuotes = str_repeat("x\r\n\\\"x\"x", 1000);

        $yamlString = Inline::dump(['longStringWithQuotes' => $longStringWithQuotes]);
        $arrayFromYaml = Inline::parse($yamlString);

        $this->assertEquals($longStringWithQuotes, $arrayFromYaml['longStringWithQuotes']);
    }

    /**
     * @expectedException \Symfony\Component\Yaml\Exception\ParseException
     * @expectedExceptionMessage Missing mapping key
     */
    public function testMappingKeysCannotBeOmitted()
    {
        Inline::parse('{: foo}');
    }

    /**
     * @dataProvider getTestsForNullValues
     */
    public function testParseMissingMappingValueAsNull($yaml, $expected)
    {
        $this->assertSame($expected, Inline::parse($yaml));
    }

    public function getTestsForNullValues()
    {
        return [
            'null before closing curly brace' => ['{foo:}', ['foo' => null]],
            'null before comma' => ['{foo:, bar: baz}', ['foo' => null, 'bar' => 'baz']],
        ];
    }

    public function testTheEmptyStringIsAValidMappingKey()
    {
        $this->assertSame(['' => 'foo'], Inline::parse('{ "": foo }'));
    }

    /**
     * @expectedException \Symfony\Component\Yaml\Exception\ParseException
     * @expectedExceptionMessage Implicit casting of incompatible mapping keys to strings is not supported. Quote your evaluable mapping keys instead
     *
     * @dataProvider getNotPhpCompatibleMappingKeyData
     */
    public function testImplicitStringCastingOfMappingKeysIsDeprecated($yaml, $expected)
    {
        $this->assertSame($expected, Inline::parse($yaml));
    }

    public function getNotPhpCompatibleMappingKeyData()
    {
        return [
            'boolean-true' => ['{true: "foo"}', ['true' => 'foo']],
            'boolean-false' => ['{false: "foo"}', ['false' => 'foo']],
            'null' => ['{null: "foo"}', ['null' => 'foo']],
            'float' => ['{0.25: "foo"}', ['0.25' => 'foo']],
        ];
    }

    public function testTagWithoutValueInSequence()
    {
        $value = Inline::parse('[!foo]', Yaml::PARSE_CUSTOM_TAGS);

        $this->assertInstanceOf(TaggedValue::class, $value[0]);
        $this->assertSame('foo', $value[0]->getTag());
        $this->assertSame('', $value[0]->getValue());
    }

    public function testTagWithEmptyValueInSequence()
    {
        $value = Inline::parse('[!foo ""]', Yaml::PARSE_CUSTOM_TAGS);

        $this->assertInstanceOf(TaggedValue::class, $value[0]);
        $this->assertSame('foo', $value[0]->getTag());
        $this->assertSame('', $value[0]->getValue());
    }

    public function testTagWithoutValueInMapping()
    {
        $value = Inline::parse('{foo: !bar}', Yaml::PARSE_CUSTOM_TAGS);

        $this->assertInstanceOf(TaggedValue::class, $value['foo']);
        $this->assertSame('bar', $value['foo']->getTag());
        $this->assertSame('', $value['foo']->getValue());
    }

    public function testTagWithEmptyValueInMapping()
    {
        $value = Inline::parse('{foo: !bar ""}', Yaml::PARSE_CUSTOM_TAGS);

        $this->assertInstanceOf(TaggedValue::class, $value['foo']);
        $this->assertSame('bar', $value['foo']->getTag());
        $this->assertSame('', $value['foo']->getValue());
    }

    /**
     * @expectedException \Symfony\Component\Yaml\Exception\ParseException
     * @expectedExceptionMessage Unexpected end of line, expected one of ",}" at line 1 (near "{abc: 'def'").
     */
    public function testUnfinishedInlineMap()
    {
        Inline::parse("{abc: 'def'");
    }
}
<?php

/*
 * This file is part of the Symfony package.
 *
 * (c) Fabien Potencier <fabien@symfony.com>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

namespace Symfony\Component\Yaml\Tests;

use PHPUnit\Framework\TestCase;
use Symfony\Component\Yaml\Exception\ParseException;

class ParseExceptionTest extends TestCase
{
    public function testGetMessage()
    {
        $exception = new ParseException('Error message', 42, 'foo: bar', '/var/www/app/config.yml');
        $message = 'Error message in "/var/www/app/config.yml" at line 42 (near "foo: bar")';

        $this->assertEquals($message, $exception->getMessage());
    }

    public function testGetMessageWithUnicodeInFilename()
    {
        $exception = new ParseException('Error message', 42, 'foo: bar', 'äöü.yml');
        $message = 'Error message in "äöü.yml" at line 42 (near "foo: bar")';

        $this->assertEquals($message, $exception->getMessage());
    }
}
<?php

/*
 * This file is part of the Symfony package.
 *
 * (c) Fabien Potencier <fabien@symfony.com>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

namespace Symfony\Component\Yaml\Tests;

use PHPUnit\Framework\TestCase;
use Symfony\Component\Yaml\Exception\ParseException;
use Symfony\Component\Yaml\Parser;
use Symfony\Component\Yaml\Tag\TaggedValue;
use Symfony\Component\Yaml\Yaml;

class ParserTest extends TestCase
{
    /** @var Parser */
    protected $parser;

    protected function setUp()
    {
        $this->parser = new Parser();
    }

    protected function tearDown()
    {
        $this->parser = null;

        chmod(__DIR__.'/Fixtures/not_readable.yml', 0644);
    }

    /**
     * @dataProvider getDataFormSpecifications
     */
    public function testSpecifications($expected, $yaml, $comment)
    {
        $this->assertEquals($expected, var_export($this->parser->parse($yaml), true), $comment);
    }

    public function getDataFormSpecifications()
    {
        return $this->loadTestsFromFixtureFiles('index.yml');
    }

    public function getNonStringMappingKeysData()
    {
        return $this->loadTestsFromFixtureFiles('nonStringKeys.yml');
    }

    public function testTabsInYaml()
    {
        // test tabs in YAML
        $yamls = [
            "foo:\n	bar",
            "foo:\n 	bar",
            "foo:\n	 bar",
            "foo:\n 	 bar",
        ];

        foreach ($yamls as $yaml) {
            try {
                $content = $this->parser->parse($yaml);

                $this->fail('YAML files must not contain tabs');
            } catch (\Exception $e) {
                $this->assertInstanceOf('\Exception', $e, 'YAML files must not contain tabs');
                $this->assertEquals('A YAML file cannot contain tabs as indentation at line 2 (near "'.strpbrk($yaml, "\t").'").', $e->getMessage(), 'YAML files must not contain tabs');
            }
        }
    }

    public function testEndOfTheDocumentMarker()
    {
        $yaml = <<<'EOF'
--- %YAML:1.0
foo
...
EOF;

        $this->assertEquals('foo', $this->parser->parse($yaml));
    }

    public function getBlockChompingTests()
    {
        $tests = [];

        $yaml = <<<'EOF'
foo: |-
    one
    two
bar: |-
    one
    two

EOF;
        $expected = [
            'foo' => "one\ntwo",
            'bar' => "one\ntwo",
        ];
        $tests['Literal block chomping strip with single trailing newline'] = [$expected, $yaml];

        $yaml = <<<'EOF'
foo: |-
    one
    two

bar: |-
    one
    two


EOF;
        $expected = [
            'foo' => "one\ntwo",
            'bar' => "one\ntwo",
        ];
        $tests['Literal block chomping strip with multiple trailing newlines'] = [$expected, $yaml];

        $yaml = <<<'EOF'
{}


EOF;
        $expected = [];
        $tests['Literal block chomping strip with multiple trailing newlines after a 1-liner'] = [$expected, $yaml];

        $yaml = <<<'EOF'
foo: |-
    one
    two
bar: |-
    one
    two
EOF;
        $expected = [
            'foo' => "one\ntwo",
            'bar' => "one\ntwo",
        ];
        $tests['Literal block chomping strip without trailing newline'] = [$expected, $yaml];

        $yaml = <<<'EOF'
foo: |
    one
    two
bar: |
    one
    two

EOF;
        $expected = [
            'foo' => "one\ntwo\n",
            'bar' => "one\ntwo\n",
        ];
        $tests['Literal block chomping clip with single trailing newline'] = [$expected, $yaml];

        $yaml = <<<'EOF'
foo: |
    one
    two

bar: |
    one
    two


EOF;
        $expected = [
            'foo' => "one\ntwo\n",
            'bar' => "one\ntwo\n",
        ];
        $tests['Literal block chomping clip with multiple trailing newlines'] = [$expected, $yaml];

        $yaml = <<<'EOF'
foo:
- bar: |
    one

    two
EOF;
        $expected = [
            'foo' => [
                [
                    'bar' => "one\n\ntwo",
                ],
            ],
        ];
        $tests['Literal block chomping clip with embedded blank line inside unindented collection'] = [$expected, $yaml];

        $yaml = <<<'EOF'
foo: |
    one
    two
bar: |
    one
    two
EOF;
        $expected = [
            'foo' => "one\ntwo\n",
            'bar' => "one\ntwo",
        ];
        $tests['Literal block chomping clip without trailing newline'] = [$expected, $yaml];

        $yaml = <<<'EOF'
foo: |+
    one
    two
bar: |+
    one
    two

EOF;
        $expected = [
            'foo' => "one\ntwo\n",
            'bar' => "one\ntwo\n",
        ];
        $tests['Literal block chomping keep with single trailing newline'] = [$expected, $yaml];

        $yaml = <<<'EOF'
foo: |+
    one
    two

bar: |+
    one
    two


EOF;
        $expected = [
            'foo' => "one\ntwo\n\n",
            'bar' => "one\ntwo\n\n",
        ];
        $tests['Literal block chomping keep with multiple trailing newlines'] = [$expected, $yaml];

        $yaml = <<<'EOF'
foo: |+
    one
    two
bar: |+
    one
    two
EOF;
        $expected = [
            'foo' => "one\ntwo\n",
            'bar' => "one\ntwo",
        ];
        $tests['Literal block chomping keep without trailing newline'] = [$expected, $yaml];

        $yaml = <<<'EOF'
foo: >-
    one
    two
bar: >-
    one
    two

EOF;
        $expected = [
            'foo' => 'one two',
            'bar' => 'one two',
        ];
        $tests['Folded block chomping strip with single trailing newline'] = [$expected, $yaml];

        $yaml = <<<'EOF'
foo: >-
    one
    two

bar: >-
    one
    two


EOF;
        $expected = [
            'foo' => 'one two',
            'bar' => 'one two',
        ];
        $tests['Folded block chomping strip with multiple trailing newlines'] = [$expected, $yaml];

        $yaml = <<<'EOF'
foo: >-
    one
    two
bar: >-
    one
    two
EOF;
        $expected = [
            'foo' => 'one two',
            'bar' => 'one two',
        ];
        $tests['Folded block chomping strip without trailing newline'] = [$expected, $yaml];

        $yaml = <<<'EOF'
foo: >
    one
    two
bar: >
    one
    two

EOF;
        $expected = [
            'foo' => "one two\n",
            'bar' => "one two\n",
        ];
        $tests['Folded block chomping clip with single trailing newline'] = [$expected, $yaml];

        $yaml = <<<'EOF'
foo: >
    one
    two

bar: >
    one
    two


EOF;
        $expected = [
            'foo' => "one two\n",
            'bar' => "one two\n",
        ];
        $tests['Folded block chomping clip with multiple trailing newlines'] = [$expected, $yaml];

        $yaml = <<<'EOF'
foo: >
    one
    two
bar: >
    one
    two
EOF;
        $expected = [
            'foo' => "one two\n",
            'bar' => 'one two',
        ];
        $tests['Folded block chomping clip without trailing newline'] = [$expected, $yaml];

        $yaml = <<<'EOF'
foo: >+
    one
    two
bar: >+
    one
    two

EOF;
        $expected = [
            'foo' => "one two\n",
            'bar' => "one two\n",
        ];
        $tests['Folded block chomping keep with single trailing newline'] = [$expected, $yaml];

        $yaml = <<<'EOF'
foo: >+
    one
    two

bar: >+
    one
    two


EOF;
        $expected = [
            'foo' => "one two\n\n",
            'bar' => "one two\n\n",
        ];
        $tests['Folded block chomping keep with multiple trailing newlines'] = [$expected, $yaml];

        $yaml = <<<'EOF'
foo: >+
    one
    two
bar: >+
    one
    two
EOF;
        $expected = [
            'foo' => "one two\n",
            'bar' => 'one two',
        ];
        $tests['Folded block chomping keep without trailing newline'] = [$expected, $yaml];

        return $tests;
    }

    /**
     * @dataProvider getBlockChompingTests
     */
    public function testBlockChomping($expected, $yaml)
    {
        $this->assertSame($expected, $this->parser->parse($yaml));
    }

    /**
     * Regression test for issue #7989.
     *
     * @see https://github.com/symfony/symfony/issues/7989
     */
    public function testBlockLiteralWithLeadingNewlines()
    {
        $yaml = <<<'EOF'
foo: |-


    bar

EOF;
        $expected = [
            'foo' => "\n\nbar",
        ];

        $this->assertSame($expected, $this->parser->parse($yaml));
    }

    public function testObjectSupportEnabled()
    {
        $input = <<<'EOF'
foo: !php/object O:30:"Symfony\Component\Yaml\Tests\B":1:{s:1:"b";s:3:"foo";}
bar: 1
EOF;
        $this->assertEquals(['foo' => new B(), 'bar' => 1], $this->parser->parse($input, Yaml::PARSE_OBJECT), '->parse() is able to parse objects');
    }

    public function testObjectSupportDisabledButNoExceptions()
    {
        $input = <<<'EOF'
foo: !php/object O:30:"Symfony\Tests\Component\Yaml\B":1:{s:1:"b";s:3:"foo";}
bar: 1
EOF;
        $this->assertEquals(['foo' => null, 'bar' => 1], $this->parser->parse($input), '->parse() does not parse objects');
    }

    /**
     * @dataProvider getObjectForMapTests
     */
    public function testObjectForMap($yaml, $expected)
    {
        $flags = Yaml::PARSE_OBJECT_FOR_MAP;

        $this->assertEquals($expected, $this->parser->parse($yaml, $flags));
    }

    public function getObjectForMapTests()
    {
        $tests = [];

        $yaml = <<<'EOF'
foo:
    fiz: [cat]
EOF;
        $expected = new \stdClass();
        $expected->foo = new \stdClass();
        $expected->foo->fiz = ['cat'];
        $tests['mapping'] = [$yaml, $expected];

        $yaml = '{ "foo": "bar", "fiz": "cat" }';
        $expected = new \stdClass();
        $expected->foo = 'bar';
        $expected->fiz = 'cat';
        $tests['inline-mapping'] = [$yaml, $expected];

        $yaml = "foo: bar\nbaz: foobar";
        $expected = new \stdClass();
        $expected->foo = 'bar';
        $expected->baz = 'foobar';
        $tests['object-for-map-is-applied-after-parsing'] = [$yaml, $expected];

        $yaml = <<<'EOT'
array:
  - key: one
  - key: two
EOT;
        $expected = new \stdClass();
        $expected->array = [];
        $expected->array[0] = new \stdClass();
        $expected->array[0]->key = 'one';
        $expected->array[1] = new \stdClass();
        $expected->array[1]->key = 'two';
        $tests['nest-map-and-sequence'] = [$yaml, $expected];

        $yaml = <<<'YAML'
map:
  1: one
  2: two
YAML;
        $expected = new \stdClass();
        $expected->map = new \stdClass();
        $expected->map->{1} = 'one';
        $expected->map->{2} = 'two';
        $tests['numeric-keys'] = [$yaml, $expected];

        $yaml = <<<'YAML'
map:
  '0': one
  '1': two
YAML;
        $expected = new \stdClass();
        $expected->map = new \stdClass();
        $expected->map->{0} = 'one';
        $expected->map->{1} = 'two';
        $tests['zero-indexed-numeric-keys'] = [$yaml, $expected];

        return $tests;
    }

    /**
     * @expectedException \Symfony\Component\Yaml\Exception\ParseException
     */
    public function testObjectsSupportDisabledWithExceptions()
    {
        $yaml = <<<'EOF'
foo: !php/object:O:30:"Symfony\Tests\Component\Yaml\B":1:{s:1:"b";s:3:"foo";}
bar: 1
EOF;

        $this->parser->parse($yaml, Yaml::PARSE_EXCEPTION_ON_INVALID_TYPE);
    }

    public function testCanParseContentWithTrailingSpaces()
    {
        $yaml = "items:  \n  foo: bar";

        $expected = [
            'items' => ['foo' => 'bar'],
        ];

        $this->assertSame($expected, $this->parser->parse($yaml));
    }

    /**
     * @requires extension iconv
     */
    public function testNonUtf8Exception()
    {
        $yamls = [
            iconv('UTF-8', 'ISO-8859-1', "foo: 'äöüß'"),
            iconv('UTF-8', 'ISO-8859-15', "euro: '€'"),
            iconv('UTF-8', 'CP1252', "cp1252: '©ÉÇáñ'"),
        ];

        foreach ($yamls as $yaml) {
            try {
                $this->parser->parse($yaml);

                $this->fail('charsets other than UTF-8 are rejected.');
            } catch (\Exception $e) {
                $this->assertInstanceOf('Symfony\Component\Yaml\Exception\ParseException', $e, 'charsets other than UTF-8 are rejected.');
            }
        }
    }

    /**
     * @expectedException \Symfony\Component\Yaml\Exception\ParseException
     */
    public function testUnindentedCollectionException()
    {
        $yaml = <<<'EOF'

collection:
-item1
-item2
-item3

EOF;

        $this->parser->parse($yaml);
    }

    /**
     * @expectedException \Symfony\Component\Yaml\Exception\ParseException
     */
    public function testShortcutKeyUnindentedCollectionException()
    {
        $yaml = <<<'EOF'

collection:
-  key: foo
  foo: bar

EOF;

        $this->parser->parse($yaml);
    }

    /**
     * @expectedException \Symfony\Component\Yaml\Exception\ParseException
     * @expectedExceptionMessageRegExp /^Multiple documents are not supported.+/
     */
    public function testMultipleDocumentsNotSupportedException()
    {
        Yaml::parse(<<<'EOL'
# Ranking of 1998 home runs
---
- Mark McGwire
- Sammy Sosa
- Ken Griffey

# Team ranking
---
- Chicago Cubs
- St Louis Cardinals
EOL
        );
    }

    /**
     * @expectedException \Symfony\Component\Yaml\Exception\ParseException
     */
    public function testSequenceInAMapping()
    {
        Yaml::parse(<<<'EOF'
yaml:
  hash: me
  - array stuff
EOF
        );
    }

    public function testSequenceInMappingStartedBySingleDashLine()
    {
        $yaml = <<<'EOT'
a:
-
  b:
  -
    bar: baz
- foo
d: e
EOT;
        $expected = [
            'a' => [
                [
                    'b' => [
                        [
                            'bar' => 'baz',
                        ],
                    ],
                ],
                'foo',
            ],
            'd' => 'e',
        ];

        $this->assertSame($expected, $this->parser->parse($yaml));
    }

    public function testSequenceFollowedByCommentEmbeddedInMapping()
    {
        $yaml = <<<'EOT'
a:
    b:
        - c
# comment
    d: e
EOT;
        $expected = [
            'a' => [
                'b' => ['c'],
                'd' => 'e',
            ],
        ];

        $this->assertSame($expected, $this->parser->parse($yaml));
    }

    public function testNonStringFollowedByCommentEmbeddedInMapping()
    {
        $yaml = <<<'EOT'
a:
    b:
        {}
# comment
    d:
        1.1
# another comment
EOT;
        $expected = [
            'a' => [
                'b' => [],
                'd' => 1.1,
            ],
        ];

        $this->assertSame($expected, $this->parser->parse($yaml));
    }

    public function getParseExceptionNotAffectedMultiLineStringLastResortParsing()
    {
        $tests = [];

        $yaml = <<<'EOT'
a
    b:
EOT;
        $tests['parse error on first line'] = [$yaml];

        $yaml = <<<'EOT'
a

b
    c:
EOT;
        $tests['parse error due to inconsistent indentation'] = [$yaml];

        $yaml = <<<'EOT'
 &  *  !  |  >  '  "  %  @  ` #, { asd a;sdasd }-@^qw3
EOT;
        $tests['symfony/symfony/issues/22967#issuecomment-322067742'] = [$yaml];

        return $tests;
    }

    /**
     * @dataProvider getParseExceptionNotAffectedMultiLineStringLastResortParsing
     * @expectedException \Symfony\Component\Yaml\Exception\ParseException
     */
    public function testParseExceptionNotAffectedByMultiLineStringLastResortParsing($yaml)
    {
        $this->parser->parse($yaml);
    }

    public function testMultiLineStringLastResortParsing()
    {
        $yaml = <<<'EOT'
test:
  You can have things that don't look like strings here
  true
  yes you can
EOT;
        $expected = [
            'test' => 'You can have things that don\'t look like strings here true yes you can',
        ];

        $this->assertSame($expected, $this->parser->parse($yaml));

        $yaml = <<<'EOT'
a:
    b
       c
EOT;
        $expected = [
            'a' => 'b c',
        ];

        $this->assertSame($expected, $this->parser->parse($yaml));
    }

    /**
     * @expectedException \Symfony\Component\Yaml\Exception\ParseException
     */
    public function testMappingInASequence()
    {
        Yaml::parse(<<<'EOF'
yaml:
  - array stuff
  hash: me
EOF
        );
    }

    /**
     * @expectedException \Symfony\Component\Yaml\Exception\ParseException
     * @expectedExceptionMessage missing colon
     */
    public function testScalarInSequence()
    {
        Yaml::parse(<<<'EOF'
foo:
    - bar
"missing colon"
    foo: bar
EOF
        );
    }

    /**
     * @expectedException \Symfony\Component\Yaml\Exception\ParseException
     * @expectedExceptionMessage Duplicate key "child" detected
     *
     * > It is an error for two equal keys to appear in the same mapping node.
     * > In such a case the YAML processor may continue, ignoring the second
     * > "key: value" pair and issuing an appropriate warning. This strategy
     * > preserves a consistent information model for one-pass and random access
     * > applications.
     *
     * @see http://yaml.org/spec/1.2/spec.html#id2759572
     * @see http://yaml.org/spec/1.1/#id932806
     */
    public function testMappingDuplicateKeyBlock()
    {
        $input = <<<'EOD'
parent:
    child: first
    child: duplicate
parent:
    child: duplicate
    child: duplicate
EOD;
        $expected = [
            'parent' => [
                'child' => 'first',
            ],
        ];
        $this->assertSame($expected, Yaml::parse($input));
    }

    /**
     * @expectedException \Symfony\Component\Yaml\Exception\ParseException
     * @expectedExceptionMessage Duplicate key "child" detected
     */
    public function testMappingDuplicateKeyFlow()
    {
        $input = <<<'EOD'
parent: { child: first, child: duplicate }
parent: { child: duplicate, child: duplicate }
EOD;
        $expected = [
            'parent' => [
                'child' => 'first',
            ],
        ];
        $this->assertSame($expected, Yaml::parse($input));
    }

    /**
     * @expectedException \Symfony\Component\Yaml\Exception\ParseException
     * @dataProvider getParseExceptionOnDuplicateData
     */
    public function testParseExceptionOnDuplicate($input, $duplicateKey, $lineNumber)
    {
        $this->expectExceptionMessage(sprintf('Duplicate key "%s" detected at line %d', $duplicateKey, $lineNumber));

        Yaml::parse($input);
    }

    public function getParseExceptionOnDuplicateData()
    {
        $tests = [];

        $yaml = <<<EOD
parent: { child: first, child: duplicate }
EOD;
        $tests[] = [$yaml, 'child', 1];

        $yaml = <<<EOD
parent:
  child: first,
  child: duplicate
EOD;
        $tests[] = [$yaml, 'child', 3];

        $yaml = <<<EOD
parent: { child: foo }
parent: { child: bar }
EOD;
        $tests[] = [$yaml, 'parent', 2];

        $yaml = <<<EOD
parent: { child_mapping: { value: bar},  child_mapping: { value: bar} }
EOD;
        $tests[] = [$yaml, 'child_mapping', 1];

        $yaml = <<<EOD
parent:
  child_mapping:
    value: bar
  child_mapping:
    value: bar
EOD;
        $tests[] = [$yaml, 'child_mapping', 4];

        $yaml = <<<EOD
parent: { child_sequence: ['key1', 'key2', 'key3'],  child_sequence: ['key1', 'key2', 'key3'] }
EOD;
        $tests[] = [$yaml, 'child_sequence', 1];

        $yaml = <<<EOD
parent:
  child_sequence:
    - key1
    - key2
    - key3
  child_sequence:
    - key1
    - key2
    - key3
EOD;
        $tests[] = [$yaml, 'child_sequence', 6];

        return $tests;
    }

    public function testEmptyValue()
    {
        $input = <<<'EOF'
hash:
EOF;

        $this->assertEquals(['hash' => null], Yaml::parse($input));
    }

    public function testCommentAtTheRootIndent()
    {
        $this->assertEquals([
            'services' => [
                'app.foo_service' => [
                    'class' => 'Foo',
                ],
                'app/bar_service' => [
                    'class' => 'Bar',
                ],
            ],
        ], Yaml::parse(<<<'EOF'
# comment 1
services:
# comment 2
    # comment 3
    app.foo_service:
        class: Foo
# comment 4
    # comment 5
    app/bar_service:
        class: Bar
EOF
        ));
    }

    public function testStringBlockWithComments()
    {
        $this->assertEquals(['content' => <<<'EOT'
# comment 1
header

    # comment 2
    <body>
        <h1>title</h1>
    </body>

footer # comment3
EOT
        ], Yaml::parse(<<<'EOF'
content: |
    # comment 1
    header

        # comment 2
        <body>
            <h1>title</h1>
        </body>

    footer # comment3
EOF
        ));
    }

    public function testFoldedStringBlockWithComments()
    {
        $this->assertEquals([['content' => <<<'EOT'
# comment 1
header

    # comment 2
    <body>
        <h1>title</h1>
    </body>

footer # comment3
EOT
        ]], Yaml::parse(<<<'EOF'
-
    content: |
        # comment 1
        header

            # comment 2
            <body>
                <h1>title</h1>
            </body>

        footer # comment3
EOF
        ));
    }

    public function testNestedFoldedStringBlockWithComments()
    {
        $this->assertEquals([[
            'title' => 'some title',
            'content' => <<<'EOT'
# comment 1
header

    # comment 2
    <body>
        <h1>title</h1>
    </body>

footer # comment3
EOT
        ]], Yaml::parse(<<<'EOF'
-
    title: some title
    content: |
        # comment 1
        header

            # comment 2
            <body>
                <h1>title</h1>
            </body>

        footer # comment3
EOF
        ));
    }

    public function testReferenceResolvingInInlineStrings()
    {
        $this->assertEquals([
            'var' => 'var-value',
            'scalar' => 'var-value',
            'list' => ['var-value'],
            'list_in_list' => [['var-value']],
            'map_in_list' => [['key' => 'var-value']],
            'embedded_mapping' => [['key' => 'var-value']],
            'map' => ['key' => 'var-value'],
            'list_in_map' => ['key' => ['var-value']],
            'map_in_map' => ['foo' => ['bar' => 'var-value']],
        ], Yaml::parse(<<<'EOF'
var:  &var var-value
scalar: *var
list: [ *var ]
list_in_list: [[ *var ]]
map_in_list: [ { key: *var } ]
embedded_mapping: [ key: *var ]
map: { key: *var }
list_in_map: { key: [*var] }
map_in_map: { foo: { bar: *var } }
EOF
        ));
    }

    public function testYamlDirective()
    {
        $yaml = <<<'EOF'
%YAML 1.2
---
foo: 1
bar: 2
EOF;
        $this->assertEquals(['foo' => 1, 'bar' => 2], $this->parser->parse($yaml));
    }

    /**
     * @expectedException \Symfony\Component\Yaml\Exception\ParseException
     * @expectedExceptionMessage Numeric keys are not supported. Quote your evaluable mapping keys instead
     */
    public function testFloatKeys()
    {
        $yaml = <<<'EOF'
foo:
    1.2: "bar"
    1.3: "baz"
EOF;

        $this->parser->parse($yaml);
    }

    /**
     * @expectedException \Symfony\Component\Yaml\Exception\ParseException
     * @expectedExceptionMessage Non-string keys are not supported. Quote your evaluable mapping keys instead
     */
    public function testBooleanKeys()
    {
        $yaml = <<<'EOF'
true: foo
false: bar
EOF;

        $this->parser->parse($yaml);
    }

    public function testExplicitStringCasting()
    {
        $yaml = <<<'EOF'
'1.2': "bar"
!!str 1.3: "baz"

'true': foo
!!str false: bar

!!str null: 'null'
'~': 'null'
EOF;

        $expected = [
            '1.2' => 'bar',
            '1.3' => 'baz',
            'true' => 'foo',
            'false' => 'bar',
            'null' => 'null',
            '~' => 'null',
        ];

        $this->assertEquals($expected, $this->parser->parse($yaml));
    }

    /**
     * @expectedException \Symfony\Component\Yaml\Exception\ParseException
     * @expectedExceptionMessage A colon cannot be used in an unquoted mapping value
     */
    public function testColonInMappingValueException()
    {
        $yaml = <<<'EOF'
foo: bar: baz
EOF;

        $this->parser->parse($yaml);
    }

    public function testColonInMappingValueExceptionNotTriggeredByColonInComment()
    {
        $yaml = <<<'EOT'
foo:
    bar: foobar # Note: a comment after a colon
EOT;

        $this->assertSame(['foo' => ['bar' => 'foobar']], $this->parser->parse($yaml));
    }

    /**
     * @dataProvider getCommentLikeStringInScalarBlockData
     */
    public function testCommentLikeStringsAreNotStrippedInBlockScalars($yaml, $expectedParserResult)
    {
        $this->assertSame($expectedParserResult, $this->parser->parse($yaml));
    }

    public function getCommentLikeStringInScalarBlockData()
    {
        $tests = [];

        $yaml = <<<'EOT'
pages:
    -
        title: some title
        content: |
            # comment 1
            header

                # comment 2
                <body>
                    <h1>title</h1>
                </body>

            footer # comment3
EOT;
        $expected = [
            'pages' => [
                [
                    'title' => 'some title',
                    'content' => <<<'EOT'
# comment 1
header

    # comment 2
    <body>
        <h1>title</h1>
    </body>

footer # comment3
EOT
                    ,
                ],
            ],
        ];
        $tests[] = [$yaml, $expected];

        $yaml = <<<'EOT'
test: |
    foo
    # bar
    baz
collection:
    - one: |
        foo
        # bar
        baz
    - two: |
        foo
        # bar
        baz
EOT;
        $expected = [
            'test' => <<<'EOT'
foo
# bar
baz

EOT
            ,
            'collection' => [
                [
                    'one' => <<<'EOT'
foo
# bar
baz

EOT
                    ,
                ],
                [
                    'two' => <<<'EOT'
foo
# bar
baz
EOT
                    ,
                ],
            ],
        ];
        $tests[] = [$yaml, $expected];

        $yaml = <<<'EOT'
foo:
  bar:
    scalar-block: >
      line1
      line2>
  baz:
# comment
    foobar: ~
EOT;
        $expected = [
            'foo' => [
                'bar' => [
                    'scalar-block' => "line1 line2>\n",
                ],
                'baz' => [
                    'foobar' => null,
                ],
            ],
        ];
        $tests[] = [$yaml, $expected];

        $yaml = <<<'EOT'
a:
    b: hello
#    c: |
#        first row
#        second row
    d: hello
EOT;
        $expected = [
            'a' => [
                'b' => 'hello',
                'd' => 'hello',
            ],
        ];
        $tests[] = [$yaml, $expected];

        return $tests;
    }

    public function testBlankLinesAreParsedAsNewLinesInFoldedBlocks()
    {
        $yaml = <<<'EOT'
test: >
    <h2>A heading</h2>

    <ul>
    <li>a list</li>
    <li>may be a good example</li>
    </ul>
EOT;

        $this->assertSame(
            [
                'test' => <<<'EOT'
<h2>A heading</h2>
<ul> <li>a list</li> <li>may be a good example</li> </ul>
EOT
                ,
            ],
            $this->parser->parse($yaml)
        );
    }

    public function testAdditionallyIndentedLinesAreParsedAsNewLinesInFoldedBlocks()
    {
        $yaml = <<<'EOT'
test: >
    <h2>A heading</h2>

    <ul>
      <li>a list</li>
      <li>may be a good example</li>
    </ul>
EOT;

        $this->assertSame(
            [
                'test' => <<<'EOT'
<h2>A heading</h2>
<ul>
  <li>a list</li>
  <li>may be a good example</li>
</ul>
EOT
                ,
            ],
            $this->parser->parse($yaml)
        );
    }

    /**
     * @dataProvider getBinaryData
     */
    public function testParseBinaryData($data)
    {
        $this->assertSame(['data' => 'Hello world'], $this->parser->parse($data));
    }

    public function getBinaryData()
    {
        return [
            'enclosed with double quotes' => ['data: !!binary "SGVsbG8gd29ybGQ="'],
            'enclosed with single quotes' => ["data: !!binary 'SGVsbG8gd29ybGQ='"],
            'containing spaces' => ['data: !!binary  "SGVs bG8gd 29ybGQ="'],
            'in block scalar' => [
                <<<'EOT'
data: !!binary |
    SGVsbG8gd29ybGQ=
EOT
    ],
            'containing spaces in block scalar' => [
                <<<'EOT'
data: !!binary |
    SGVs bG8gd 29ybGQ=
EOT
    ],
        ];
    }

    /**
     * @dataProvider getInvalidBinaryData
     * @expectedException \Symfony\Component\Yaml\Exception\ParseException
     */
    public function testParseInvalidBinaryData($data, $expectedMessage)
    {
        if (method_exists($this, 'expectException')) {
            $this->expectExceptionMessageRegExp($expectedMessage);
        } else {
            $this->setExpectedExceptionRegExp(ParseException::class, $expectedMessage);
        }

        $this->parser->parse($data);
    }

    public function getInvalidBinaryData()
    {
        return [
            'length not a multiple of four' => ['data: !!binary "SGVsbG8d29ybGQ="', '/The normalized base64 encoded data \(data without whitespace characters\) length must be a multiple of four \(\d+ bytes given\)/'],
            'invalid characters' => ['!!binary "SGVsbG8#d29ybGQ="', '/The base64 encoded data \(.*\) contains invalid characters/'],
            'too many equals characters' => ['data: !!binary "SGVsbG8gd29yb==="', '/The base64 encoded data \(.*\) contains invalid characters/'],
            'misplaced equals character' => ['data: !!binary "SGVsbG8gd29ybG=Q"', '/The base64 encoded data \(.*\) contains invalid characters/'],
            'length not a multiple of four in block scalar' => [
                <<<'EOT'
data: !!binary |
    SGVsbG8d29ybGQ=
EOT
                ,
                '/The normalized base64 encoded data \(data without whitespace characters\) length must be a multiple of four \(\d+ bytes given\)/',
            ],
            'invalid characters in block scalar' => [
                <<<'EOT'
data: !!binary |
    SGVsbG8#d29ybGQ=
EOT
                ,
                '/The base64 encoded data \(.*\) contains invalid characters/',
            ],
            'too many equals characters in block scalar' => [
                <<<'EOT'
data: !!binary |
    SGVsbG8gd29yb===
EOT
                ,
                '/The base64 encoded data \(.*\) contains invalid characters/',
            ],
            'misplaced equals character in block scalar' => [
                <<<'EOT'
data: !!binary |
    SGVsbG8gd29ybG=Q
EOT
                ,
                '/The base64 encoded data \(.*\) contains invalid characters/',
            ],
        ];
    }

    public function testParseDateAsMappingValue()
    {
        $yaml = <<<'EOT'
date: 2002-12-14
EOT;
        $expectedDate = new \DateTime();
        $expectedDate->setTimeZone(new \DateTimeZone('UTC'));
        $expectedDate->setDate(2002, 12, 14);
        $expectedDate->setTime(0, 0, 0);

        $this->assertEquals(['date' => $expectedDate], $this->parser->parse($yaml, Yaml::PARSE_DATETIME));
    }

    /**
     * @param $lineNumber
     * @param $yaml
     * @dataProvider parserThrowsExceptionWithCorrectLineNumberProvider
     */
    public function testParserThrowsExceptionWithCorrectLineNumber($lineNumber, $yaml)
    {
        if (method_exists($this, 'expectException')) {
            $this->expectException('\Symfony\Component\Yaml\Exception\ParseException');
            $this->expectExceptionMessage(sprintf('Unexpected characters near "," at line %d (near "bar: "123",").', $lineNumber));
        } else {
            $this->setExpectedException('\Symfony\Component\Yaml\Exception\ParseException', sprintf('Unexpected characters near "," at line %d (near "bar: "123",").', $lineNumber));
        }

        $this->parser->parse($yaml);
    }

    public function parserThrowsExceptionWithCorrectLineNumberProvider()
    {
        return [
            [
                4,
                <<<'YAML'
foo:
    -
        # bar
        bar: "123",
YAML
            ],
            [
                5,
                <<<'YAML'
foo:
    -
        # bar
        # bar
        bar: "123",
YAML
            ],
            [
                8,
                <<<'YAML'
foo:
    -
        # foobar
        baz: 123
bar:
    -
        # bar
        bar: "123",
YAML
            ],
            [
                10,
                <<<'YAML'
foo:
    -
        # foobar
        # foobar
        baz: 123
bar:
    -
        # bar
        # bar
        bar: "123",
YAML
            ],
        ];
    }

    public function testParseMultiLineQuotedString()
    {
        $yaml = <<<EOT
foo: "bar
  baz
   foobar
foo"
bar: baz
EOT;

        $this->assertSame(['foo' => 'bar baz foobar foo', 'bar' => 'baz'], $this->parser->parse($yaml));
    }

    public function testMultiLineQuotedStringWithTrailingBackslash()
    {
        $yaml = <<<YAML
foobar:
    "foo\
    bar"
YAML;

        $this->assertSame(['foobar' => 'foobar'], $this->parser->parse($yaml));
    }

    public function testCommentCharactersInMultiLineQuotedStrings()
    {
        $yaml = <<<YAML
foo:
    foobar: 'foo
      #bar'
    bar: baz
YAML;
        $expected = [
            'foo' => [
                'foobar' => 'foo #bar',
                'bar' => 'baz',
            ],
        ];

        $this->assertSame($expected, $this->parser->parse($yaml));
    }

    public function testBlankLinesInQuotedMultiLineString()
    {
        $yaml = <<<YAML
foobar: 'foo

    bar'
YAML;
        $expected = [
            'foobar' => "foo\nbar",
        ];

        $this->assertSame($expected, $this->parser->parse($yaml));
    }

    public function testParseMultiLineUnquotedString()
    {
        $yaml = <<<EOT
foo: bar
  baz
   foobar
  foo
bar: baz
EOT;

        $this->assertSame(['foo' => 'bar baz foobar foo', 'bar' => 'baz'], $this->parser->parse($yaml));
    }

    public function testParseMultiLineString()
    {
        $this->assertEquals("foo bar\nbaz", $this->parser->parse("foo\nbar\n\nbaz"));
    }

    /**
     * @dataProvider multiLineDataProvider
     */
    public function testParseMultiLineMappingValue($yaml, $expected, $parseError)
    {
        $this->assertEquals($expected, $this->parser->parse($yaml));
    }

    public function multiLineDataProvider()
    {
        $tests = [];

        $yaml = <<<'EOF'
foo:
- bar:
    one

    two
    three
EOF;
        $expected = [
            'foo' => [
                [
                    'bar' => "one\ntwo three",
                ],
            ],
        ];

        $tests[] = [$yaml, $expected, false];

        $yaml = <<<'EOF'
bar
"foo"
EOF;
        $expected = 'bar "foo"';

        $tests[] = [$yaml, $expected, false];

        $yaml = <<<'EOF'
bar
"foo
EOF;
        $expected = 'bar "foo';

        $tests[] = [$yaml, $expected, false];

        $yaml = <<<'EOF'
bar

'foo'
EOF;
        $expected = "bar\n'foo'";

        $tests[] = [$yaml, $expected, false];

        $yaml = <<<'EOF'
bar

foo'
EOF;
        $expected = "bar\nfoo'";

        $tests[] = [$yaml, $expected, false];

        return $tests;
    }

    public function testTaggedInlineMapping()
    {
        $this->assertEquals(new TaggedValue('foo', ['foo' => 'bar']), $this->parser->parse('!foo {foo: bar}', Yaml::PARSE_CUSTOM_TAGS));
    }

    /**
     * @dataProvider taggedValuesProvider
     */
    public function testCustomTagSupport($expected, $yaml)
    {
        $this->assertEquals($expected, $this->parser->parse($yaml, Yaml::PARSE_CUSTOM_TAGS));
    }

    public function taggedValuesProvider()
    {
        return [
            'scalars' => [
                [
                    'foo' => new TaggedValue('inline', 'bar'),
                    'quz' => new TaggedValue('long', 'this is a long text'),
                ],
                <<<YAML
foo: !inline bar
quz: !long >
  this is a long
  text
YAML
            ],
            'sequences' => [
                [new TaggedValue('foo', ['yaml']), new TaggedValue('quz', ['bar'])],
                <<<YAML
- !foo
    - yaml
- !quz [bar]
YAML
            ],
            'mappings' => [
                new TaggedValue('foo', ['foo' => new TaggedValue('quz', ['bar']), 'quz' => new TaggedValue('foo', ['quz' => 'bar'])]),
                <<<YAML
!foo
foo: !quz [bar]
quz: !foo
   quz: bar
YAML
            ],
            'inline' => [
                [new TaggedValue('foo', ['foo', 'bar']), new TaggedValue('quz', ['foo' => 'bar', 'quz' => new TaggedValue('bar', ['one' => 'bar'])])],
                <<<YAML
- !foo [foo, bar]
- !quz {foo: bar, quz: !bar {one: bar}}
YAML
            ],
            'spaces-around-tag-value-in-sequence' => [
                [new TaggedValue('foo', 'bar')],
                '[ !foo bar ]',
            ],
        ];
    }

    public function testNonSpecificTagSupport()
    {
        $this->assertSame('12', $this->parser->parse('! 12'));
    }

    /**
     * @expectedException \Symfony\Component\Yaml\Exception\ParseException
     * @expectedExceptionMessage Tags support is not enabled. Enable the "Yaml::PARSE_CUSTOM_TAGS" flag to use "!iterator" at line 1 (near "!iterator [foo]").
     */
    public function testCustomTagsDisabled()
    {
        $this->parser->parse('!iterator [foo]');
    }

    /**
     * @expectedException \Symfony\Component\Yaml\Exception\ParseException
     * @expectedExceptionMessage Tags support is not enabled. Enable the "Yaml::PARSE_CUSTOM_TAGS" flag to use "!iterator" at line 1 (near "!iterator foo").
     */
    public function testUnsupportedTagWithScalar()
    {
        $this->parser->parse('!iterator foo');
    }

    /**
     * @expectedException \Symfony\Component\Yaml\Exception\ParseException
     * @expectedExceptionMessage The string "!!iterator foo" could not be parsed as it uses an unsupported built-in tag at line 1 (near "!!iterator foo").
     */
    public function testUnsupportedBuiltInTagWithScalar()
    {
        $this->parser->parse('!!iterator foo');
    }

    /**
     * @expectedException \Symfony\Component\Yaml\Exception\ParseException
     * @expectedExceptionMessage The built-in tag "!!foo" is not implemented at line 1 (near "!!foo").
     */
    public function testExceptionWhenUsingUnsuportedBuiltInTags()
    {
        $this->parser->parse('!!foo');
    }

    /**
     * @expectedException \Symfony\Component\Yaml\Exception\ParseException
     * @expectedExceptionMessage Complex mappings are not supported at line 1 (near "? "1"").
     */
    public function testComplexMappingThrowsParseException()
    {
        $yaml = <<<YAML
? "1"
:
  name: végétalien
YAML;

        $this->parser->parse($yaml);
    }

    /**
     * @expectedException \Symfony\Component\Yaml\Exception\ParseException
     * @expectedExceptionMessage Complex mappings are not supported at line 2 (near "? "1"").
     */
    public function testComplexMappingNestedInMappingThrowsParseException()
    {
        $yaml = <<<YAML
diet:
  ? "1"
  :
    name: végétalien
YAML;

        $this->parser->parse($yaml);
    }

    /**
     * @expectedException \Symfony\Component\Yaml\Exception\ParseException
     * @expectedExceptionMessage Complex mappings are not supported at line 1 (near "- ? "1"").
     */
    public function testComplexMappingNestedInSequenceThrowsParseException()
    {
        $yaml = <<<YAML
- ? "1"
  :
    name: végétalien
YAML;

        $this->parser->parse($yaml);
    }

    /**
     * @expectedException        \Symfony\Component\Yaml\Exception\ParseException
     * @expectedExceptionMessage Unable to parse at line 1 (near "[parameters]").
     */
    public function testParsingIniThrowsException()
    {
        $ini = <<<INI
[parameters]
  foo = bar
  bar = %foo%
INI;

        $this->parser->parse($ini);
    }

    private function loadTestsFromFixtureFiles($testsFile)
    {
        $parser = new Parser();

        $tests = [];
        $files = $parser->parseFile(__DIR__.'/Fixtures/'.$testsFile);
        foreach ($files as $file) {
            $yamls = file_get_contents(__DIR__.'/Fixtures/'.$file.'.yml');

            // split YAMLs documents
            foreach (preg_split('/^---( %YAML\:1\.0)?/m', $yamls) as $yaml) {
                if (!$yaml) {
                    continue;
                }

                $test = $parser->parse($yaml);
                if (isset($test['todo']) && $test['todo']) {
                    // TODO
                } else {
                    eval('$expected = '.trim($test['php']).';');

                    $tests[] = [var_export($expected, true), $test['yaml'], $test['test']];
                }
            }
        }

        return $tests;
    }

    public function testCanParseVeryLongValue()
    {
        $longStringWithSpaces = str_repeat('xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ', 20000);
        $trickyVal = ['x' => $longStringWithSpaces];

        $yamlString = Yaml::dump($trickyVal);
        $arrayFromYaml = $this->parser->parse($yamlString);

        $this->assertEquals($trickyVal, $arrayFromYaml);
    }

    /**
     * @expectedException \Symfony\Component\Yaml\Exception\ParseException
     * @expectedExceptionMessage Reference "foo" does not exist at line 2
     */
    public function testParserCleansUpReferencesBetweenRuns()
    {
        $yaml = <<<YAML
foo: &foo
    baz: foobar
bar:
    <<: *foo
YAML;
        $this->parser->parse($yaml);

        $yaml = <<<YAML
bar:
    <<: *foo
YAML;
        $this->parser->parse($yaml);
    }

    public function testPhpConstantTagMappingKey()
    {
        $yaml = <<<YAML
transitions:
    !php/const 'Symfony\Component\Yaml\Tests\B::FOO':
        from:
            - !php/const 'Symfony\Component\Yaml\Tests\B::BAR'
        to: !php/const 'Symfony\Component\Yaml\Tests\B::BAZ'
YAML;
        $expected = [
            'transitions' => [
                'foo' => [
                    'from' => [
                        'bar',
                    ],
                    'to' => 'baz',
                ],
            ],
        ];

        $this->assertSame($expected, $this->parser->parse($yaml, Yaml::PARSE_CONSTANT));
    }

    public function testMergeKeysWhenMappingsAreParsedAsObjects()
    {
        $yaml = <<<YAML
foo: &FOO
    bar: 1
bar: &BAR
    baz: 2
    <<: *FOO
baz:
    baz_foo: 3
    <<:
        baz_bar: 4
foobar:
    bar: ~
    <<: [*FOO, *BAR]
YAML;
        $expected = (object) [
            'foo' => (object) [
                'bar' => 1,
            ],
            'bar' => (object) [
                'baz' => 2,
                'bar' => 1,
            ],
            'baz' => (object) [
                'baz_foo' => 3,
                'baz_bar' => 4,
            ],
            'foobar' => (object) [
                'bar' => null,
                'baz' => 2,
            ],
        ];

        $this->assertEquals($expected, $this->parser->parse($yaml, Yaml::PARSE_OBJECT_FOR_MAP));
    }

    public function testFilenamesAreParsedAsStringsWithoutFlag()
    {
        $file = __DIR__.'/Fixtures/index.yml';

        $this->assertSame($file, $this->parser->parse($file));
    }

    public function testParseFile()
    {
        $this->assertInternalType('array', $this->parser->parseFile(__DIR__.'/Fixtures/index.yml'));
    }

    /**
     * @expectedException \Symfony\Component\Yaml\Exception\ParseException
     * @expectedExceptionMessageRegExp #^File ".+/Fixtures/nonexistent.yml" does not exist\.$#
     */
    public function testParsingNonExistentFilesThrowsException()
    {
        $this->parser->parseFile(__DIR__.'/Fixtures/nonexistent.yml');
    }

    /**
     * @expectedException \Symfony\Component\Yaml\Exception\ParseException
     * @expectedExceptionMessageRegExp #^File ".+/Fixtures/not_readable.yml" cannot be read\.$#
     */
    public function testParsingNotReadableFilesThrowsException()
    {
        if ('\\' === \DIRECTORY_SEPARATOR) {
            $this->markTestSkipped('chmod is not supported on Windows');
        }

        if (!getenv('USER') || 'root' === getenv('USER')) {
            $this->markTestSkipped('This test will fail if run under superuser');
        }

        $file = __DIR__.'/Fixtures/not_readable.yml';
        chmod($file, 0200);

        $this->parser->parseFile($file);
    }

    public function testParseReferencesOnMergeKeys()
    {
        $yaml = <<<YAML
mergekeyrefdef:
    a: foo
    <<: &quux
        b: bar
        c: baz
mergekeyderef:
    d: quux
    <<: *quux
YAML;
        $expected = [
            'mergekeyrefdef' => [
                'a' => 'foo',
                'b' => 'bar',
                'c' => 'baz',
            ],
            'mergekeyderef' => [
                'd' => 'quux',
                'b' => 'bar',
                'c' => 'baz',
            ],
        ];

        $this->assertSame($expected, $this->parser->parse($yaml));
    }

    public function testParseReferencesOnMergeKeysWithMappingsParsedAsObjects()
    {
        $yaml = <<<YAML
mergekeyrefdef:
    a: foo
    <<: &quux
        b: bar
        c: baz
mergekeyderef:
    d: quux
    <<: *quux
YAML;
        $expected = (object) [
            'mergekeyrefdef' => (object) [
                'a' => 'foo',
                'b' => 'bar',
                'c' => 'baz',
            ],
            'mergekeyderef' => (object) [
                'd' => 'quux',
                'b' => 'bar',
                'c' => 'baz',
            ],
        ];

        $this->assertEquals($expected, $this->parser->parse($yaml, Yaml::PARSE_OBJECT_FOR_MAP));
    }

    /**
     * @expectedException \Symfony\Component\Yaml\Exception\ParseException
     * @expectedExceptionMessage Reference "foo" does not exist
     */
    public function testEvalRefException()
    {
        $yaml = <<<EOE
foo: { &foo { a: Steve, <<: *foo} }
EOE;
        $this->parser->parse($yaml);
    }

    /**
     * @dataProvider circularReferenceProvider
     * @expectedException \Symfony\Component\Yaml\Exception\ParseException
     * @expectedExceptionMessage Circular reference [foo, bar, foo] detected
     */
    public function testDetectCircularReferences($yaml)
    {
        $this->parser->parse($yaml, Yaml::PARSE_CUSTOM_TAGS);
    }

    public function circularReferenceProvider()
    {
        $tests = [];

        $yaml = <<<YAML
foo:
    - &foo
      - &bar
        bar: foobar
        baz: *foo
YAML;
        $tests['sequence'] = [$yaml];

        $yaml = <<<YAML
foo: &foo
    bar: &bar
        foobar: baz
        baz: *foo
YAML;
        $tests['mapping'] = [$yaml];

        $yaml = <<<YAML
foo: &foo
    bar: &bar
        foobar: baz
        <<: *foo
YAML;
        $tests['mapping with merge key'] = [$yaml];

        return $tests;
    }

    /**
     * @dataProvider indentedMappingData
     */
    public function testParseIndentedMappings($yaml, $expected)
    {
        $this->assertSame($expected, $this->parser->parse($yaml));
    }

    public function indentedMappingData()
    {
        $tests = [];

        $yaml = <<<YAML
foo:
  - bar: "foobar"
    # A comment
    baz: "foobaz"
YAML;
        $expected = [
            'foo' => [
                [
                    'bar' => 'foobar',
                    'baz' => 'foobaz',
                ],
            ],
        ];
        $tests['comment line is first line in indented block'] = [$yaml, $expected];

        $yaml = <<<YAML
foo:
    - bar:
        # comment
        baz: [1, 2, 3]
YAML;
        $expected = [
            'foo' => [
                [
                    'bar' => [
                        'baz' => [1, 2, 3],
                    ],
                ],
            ],
        ];
        $tests['mapping value on new line starting with a comment line'] = [$yaml, $expected];

        $yaml = <<<YAML
foo:
  -
    bar: foobar
YAML;
        $expected = [
            'foo' => [
                [
                    'bar' => 'foobar',
                ],
            ],
        ];
        $tests['mapping in sequence starting on a new line'] = [$yaml, $expected];

        $yaml = <<<YAML
foo:

    bar: baz
YAML;
        $expected = [
            'foo' => [
                'bar' => 'baz',
            ],
        ];
        $tests['blank line at the beginning of an indented mapping value'] = [$yaml, $expected];

        return $tests;
    }
}

class B
{
    public $b = 'foo';

    const FOO = 'foo';
    const BAR = 'bar';
    const BAZ = 'baz';
}
<?php

/*
 * This file is part of the Symfony package.
 *
 * (c) Fabien Potencier <fabien@symfony.com>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

namespace Symfony\Component\Yaml\Tests;

use PHPUnit\Framework\TestCase;
use Symfony\Component\Yaml\Yaml;

class YamlTest extends TestCase
{
    public function testParseAndDump()
    {
        $data = ['lorem' => 'ipsum', 'dolor' => 'sit'];
        $yml = Yaml::dump($data);
        $parsed = Yaml::parse($yml);
        $this->assertEquals($data, $parsed);
    }

    /**
     * @expectedException \InvalidArgumentException
     * @expectedExceptionMessage The indentation must be greater than zero
     */
    public function testZeroIndentationThrowsException()
    {
        Yaml::dump(['lorem' => 'ipsum', 'dolor' => 'sit'], 2, 0);
    }

    /**
     * @expectedException \InvalidArgumentException
     * @expectedExceptionMessage The indentation must be greater than zero
     */
    public function testNegativeIndentationThrowsException()
    {
        Yaml::dump(['lorem' => 'ipsum', 'dolor' => 'sit'], 2, -4);
    }
}
<?php

/*
 * This file is part of the Symfony package.
 *
 * (c) Fabien Potencier <fabien@symfony.com>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

namespace Symfony\Component\Yaml;

use Symfony\Component\Yaml\Exception\ParseException;

/**
 * Unescaper encapsulates unescaping rules for single and double-quoted
 * YAML strings.
 *
 * @author Matthew Lewinski <matthew@lewinski.org>
 *
 * @internal
 */
class Unescaper
{
    /**
     * Regex fragment that matches an escaped character in a double quoted string.
     */
    const REGEX_ESCAPED_CHARACTER = '\\\\(x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|U[0-9a-fA-F]{8}|.)';

    /**
     * Unescapes a single quoted string.
     *
     * @param string $value A single quoted string
     *
     * @return string The unescaped string
     */
    public function unescapeSingleQuotedString(string $value): string
    {
        return str_replace('\'\'', '\'', $value);
    }

    /**
     * Unescapes a double quoted string.
     *
     * @param string $value A double quoted string
     *
     * @return string The unescaped string
     */
    public function unescapeDoubleQuotedString(string $value): string
    {
        $callback = function ($match) {
            return $this->unescapeCharacter($match[0]);
        };

        // evaluate the string
        return preg_replace_callback('/'.self::REGEX_ESCAPED_CHARACTER.'/u', $callback, $value);
    }

    /**
     * Unescapes a character that was found in a double-quoted string.
     *
     * @param string $value An escaped character
     *
     * @return string The unescaped character
     */
    private function unescapeCharacter(string $value): string
    {
        switch ($value[1]) {
            case '0':
                return "\x0";
            case 'a':
                return "\x7";
            case 'b':
                return "\x8";
            case 't':
                return "\t";
            case "\t":
                return "\t";
            case 'n':
                return "\n";
            case 'v':
                return "\xB";
            case 'f':
                return "\xC";
            case 'r':
                return "\r";
            case 'e':
                return "\x1B";
            case ' ':
                return ' ';
            case '"':
                return '"';
            case '/':
                return '/';
            case '\\':
                return '\\';
            case 'N':
                // U+0085 NEXT LINE
                return "\xC2\x85";
            case '_':
                // U+00A0 NO-BREAK SPACE
                return "\xC2\xA0";
            case 'L':
                // U+2028 LINE SEPARATOR
                return "\xE2\x80\xA8";
            case 'P':
                // U+2029 PARAGRAPH SEPARATOR
                return "\xE2\x80\xA9";
            case 'x':
                return self::utf8chr(hexdec(substr($value, 2, 2)));
            case 'u':
                return self::utf8chr(hexdec(substr($value, 2, 4)));
            case 'U':
                return self::utf8chr(hexdec(substr($value, 2, 8)));
            default:
                throw new ParseException(sprintf('Found unknown escape character "%s".', $value));
        }
    }

    /**
     * Get the UTF-8 character for the given code point.
     */
    private static function utf8chr(int $c): string
    {
        if (0x80 > $c %= 0x200000) {
            return \chr($c);
        }
        if (0x800 > $c) {
            return \chr(0xC0 | $c >> 6).\chr(0x80 | $c & 0x3F);
        }
        if (0x10000 > $c) {
            return \chr(0xE0 | $c >> 12).\chr(0x80 | $c >> 6 & 0x3F).\chr(0x80 | $c & 0x3F);
        }

        return \chr(0xF0 | $c >> 18).\chr(0x80 | $c >> 12 & 0x3F).\chr(0x80 | $c >> 6 & 0x3F).\chr(0x80 | $c & 0x3F);
    }
}
<?php

/*
 * This file is part of the Symfony package.
 *
 * (c) Fabien Potencier <fabien@symfony.com>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

namespace Symfony\Component\Yaml;

use Symfony\Component\Yaml\Exception\ParseException;

/**
 * Yaml offers convenience methods to load and dump YAML.
 *
 * @author Fabien Potencier <fabien@symfony.com>
 *
 * @final
 */
class Yaml
{
    const DUMP_OBJECT = 1;
    const PARSE_EXCEPTION_ON_INVALID_TYPE = 2;
    const PARSE_OBJECT = 4;
    const PARSE_OBJECT_FOR_MAP = 8;
    const DUMP_EXCEPTION_ON_INVALID_TYPE = 16;
    const PARSE_DATETIME = 32;
    const DUMP_OBJECT_AS_MAP = 64;
    const DUMP_MULTI_LINE_LITERAL_BLOCK = 128;
    const PARSE_CONSTANT = 256;
    const PARSE_CUSTOM_TAGS = 512;
    const DUMP_EMPTY_ARRAY_AS_SEQUENCE = 1024;

    /**
     * Parses a YAML file into a PHP value.
     *
     * Usage:
     *
     *     $array = Yaml::parseFile('config.yml');
     *     print_r($array);
     *
     * @param string $filename The path to the YAML file to be parsed
     * @param int    $flags    A bit field of PARSE_* constants to customize the YAML parser behavior
     *
     * @return mixed The YAML converted to a PHP value
     *
     * @throws ParseException If the file could not be read or the YAML is not valid
     */
    public static function parseFile(string $filename, int $flags = 0)
    {
        $yaml = new Parser();

        return $yaml->parseFile($filename, $flags);
    }

    /**
     * Parses YAML into a PHP value.
     *
     *  Usage:
     *  <code>
     *   $array = Yaml::parse(file_get_contents('config.yml'));
     *   print_r($array);
     *  </code>
     *
     * @param string $input A string containing YAML
     * @param int    $flags A bit field of PARSE_* constants to customize the YAML parser behavior
     *
     * @return mixed The YAML converted to a PHP value
     *
     * @throws ParseException If the YAML is not valid
     */
    public static function parse(string $input, int $flags = 0)
    {
        $yaml = new Parser();

        return $yaml->parse($input, $flags);
    }

    /**
     * Dumps a PHP value to a YAML string.
     *
     * The dump method, when supplied with an array, will do its best
     * to convert the array into friendly YAML.
     *
     * @param mixed $input  The PHP value
     * @param int   $inline The level where you switch to inline YAML
     * @param int   $indent The amount of spaces to use for indentation of nested nodes
     * @param int   $flags  A bit field of DUMP_* constants to customize the dumped YAML string
     *
     * @return string A YAML string representing the original PHP value
     */
    public static function dump($input, int $inline = 2, int $indent = 4, int $flags = 0): string
    {
        $yaml = new Dumper($indent);

        return $yaml->dump($input, $inline, 0, $flags);
    }
}
{
    "name": "symfony/yaml",
    "type": "library",
    "description": "Symfony Yaml Component",
    "keywords": [],
    "homepage": "https://symfony.com",
    "license": "MIT",
    "authors": [
        {
            "name": "Fabien Potencier",
            "email": "fabien@symfony.com"
        },
        {
            "name": "Symfony Community",
            "homepage": "https://symfony.com/contributors"
        }
    ],
    "require": {
        "php": "^7.1.3",
        "symfony/polyfill-ctype": "~1.8"
    },
    "require-dev": {
        "symfony/console": "~3.4|~4.0"
    },
    "conflict": {
        "symfony/console": "<3.4"
    },
    "suggest": {
        "symfony/console": "For validating YAML files using the lint command"
    },
    "autoload": {
        "psr-4": { "Symfony\\Component\\Yaml\\": "" },
        "exclude-from-classmap": [
            "/Tests/"
        ]
    },
    "minimum-stability": "dev",
    "extra": {
        "branch-alias": {
            "dev-master": "4.2-dev"
        }
    }
}
<?xml version="1.0" encoding="UTF-8"?>

<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:noNamespaceSchemaLocation="http://schema.phpunit.de/5.2/phpunit.xsd"
         backupGlobals="false"
         colors="true"
         bootstrap="vendor/autoload.php"
         failOnRisky="true"
         failOnWarning="true"
>
    <php>
        <ini name="error_reporting" value="-1" />
    </php>

    <testsuites>
        <testsuite name="Symfony Yaml Component Test Suite">
            <directory>./Tests/</directory>
        </testsuite>
    </testsuites>

    <filter>
        <whitelist>
            <directory>./</directory>
            <exclude>
                <directory>./Tests</directory>
                <directory>./vendor</directory>
            </exclude>
        </whitelist>
    </filter>
</phpunit>
The MIT License (MIT)

Copyright (c) 2015 Paragon Initiative Enterprises

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

#!/usr/bin/env bash

basedir=$( dirname $( readlink -f ${BASH_SOURCE[0]} ) )

php -dphar.readonly=0 "$basedir/other/build_phar.php" $*{
  "name":         "paragonie/random_compat",
  "description":  "PHP 5.x polyfill for random_bytes() and random_int() from PHP 7",
  "keywords": [
    "csprng",
    "random",
    "polyfill",
    "pseudorandom"
  ],
  "license":      "MIT",
  "type":         "library",
  "authors": [
    {
      "name":     "Paragon Initiative Enterprises",
      "email":    "security@paragonie.com",
      "homepage": "https://paragonie.com"
    }
  ],
  "support": {
    "issues":     "https://github.com/paragonie/random_compat/issues",
    "email":      "info@paragonie.com",
    "source":     "https://github.com/paragonie/random_compat"
  },
  "require": {
    "php": ">= 7"
  },
  "require-dev": {
    "vimeo/psalm": "^1",
    "phpunit/phpunit": "4.*|5.*"
  },
  "suggest": {
    "ext-libsodium": "Provides a modern crypto API that can be used to generate random bytes."
  }
}
-----BEGIN PUBLIC KEY-----
MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEEd+wCqJDrx5B4OldM0dQE0ZMX+lx1ZWm
pui0SUqD4G29L3NGsz9UhJ/0HjBdbnkhIK5xviT0X5vtjacF6ajgcCArbTB+ds+p
+h7Q084NuSuIpNb6YPfoUFgC/CL9kAoc
-----END PUBLIC KEY-----
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.0.22 (MingW32)

iQEcBAABAgAGBQJWtW1hAAoJEGuXocKCZATaJf0H+wbZGgskK1dcRTsuVJl9IWip
QwGw/qIKI280SD6/ckoUMxKDCJiFuPR14zmqnS36k7N5UNPnpdTJTS8T11jttSpg
1LCmgpbEIpgaTah+cELDqFCav99fS+bEiAL5lWDAHBTE/XPjGVCqeehyPYref4IW
NDBIEsvnHPHPLsn6X5jq4+Yj5oUixgxaMPiR+bcO4Sh+RzOVB6i2D0upWfRXBFXA
NNnsg9/zjvoC7ZW73y9uSH+dPJTt/Vgfeiv52/v41XliyzbUyLalf02GNPY+9goV
JHG1ulEEBJOCiUD9cE1PUIJwHA/HqyhHIvV350YoEFiHl8iSwm7SiZu5kPjaq74=
=B6+8
-----END PGP SIGNATURE-----
<?php
/**
 * Random_* Compatibility Library
 * for using the new PHP 7 random_* API in PHP 5 projects
 *
 * @version 2.99.99
 * @released 2018-06-06
 *
 * The MIT License (MIT)
 *
 * Copyright (c) 2015 - 2018 Paragon Initiative Enterprises
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to deal
 * in the Software without restriction, including without limitation the rights
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 * copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in
 * all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 * SOFTWARE.
 */

// NOP
<?php
$dist = dirname(__DIR__).'/dist';
if (!is_dir($dist)) {
    mkdir($dist, 0755);
}
if (file_exists($dist.'/random_compat.phar')) {
    unlink($dist.'/random_compat.phar');
}
$phar = new Phar(
    $dist.'/random_compat.phar',
    FilesystemIterator::CURRENT_AS_FILEINFO | \FilesystemIterator::KEY_AS_FILENAME,
    'random_compat.phar'
);
rename(
    dirname(__DIR__).'/lib/random.php', 
    dirname(__DIR__).'/lib/index.php'
);
$phar->buildFromDirectory(dirname(__DIR__).'/lib');
rename(
    dirname(__DIR__).'/lib/index.php', 
    dirname(__DIR__).'/lib/random.php'
);

/**
 * If we pass an (optional) path to a private key as a second argument, we will
 * sign the Phar with OpenSSL.
 * 
 * If you leave this out, it will produce an unsigned .phar!
 */
if ($argc > 1) {
    if (!@is_readable($argv[1])) {
        echo 'Could not read the private key file:', $argv[1], "\n";
        exit(255);
    }
    $pkeyFile = file_get_contents($argv[1]);
    
    $private = openssl_get_privatekey($pkeyFile);
    if ($private !== false) {
        $pkey = '';
        openssl_pkey_export($private, $pkey);
        $phar->setSignatureAlgorithm(Phar::OPENSSL, $pkey);
        
        /**
         * Save the corresponding public key to the file
         */
        if (!@is_readable($dist.'/random_compat.phar.pubkey')) {
            $details = openssl_pkey_get_details($private);
            file_put_contents(
                $dist.'/random_compat.phar.pubkey',
                $details['key']
            );
        }
    } else {
        echo 'An error occurred reading the private key from OpenSSL.', "\n";
        exit(255);
    }
}
<?php

require_once 'lib/byte_safe_strings.php';
require_once 'lib/cast_to_int.php';
require_once 'lib/error_polyfill.php';
require_once 'other/ide_stubs/libsodium.php';
require_once 'lib/random.php';

$int = random_int(0, 65536);
<?xml version="1.0"?>
<psalm
    autoloader="psalm-autoload.php"
    stopOnFirstError="false"
    useDocblockTypes="true"
>
    <projectFiles>
        <directory name="lib" />
    </projectFiles>
    <issueHandlers>
        <RedundantConditionGivenDocblockType errorLevel="info" />
        <UnresolvableInclude errorLevel="info" />
        <DuplicateClass errorLevel="info" />
        <InvalidOperand errorLevel="info" />
        <UndefinedConstant errorLevel="info" />
        <MissingReturnType errorLevel="info" />
        <InvalidReturnType errorLevel="info" />
    </issueHandlers>
</psalm>
The MIT License (MIT)

Copyright (c) 2016 - 2022 Paragon Initiative Enterprises

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

------------------------------------------------------------------------------
This library was based on the work of Steve "Sc00bz" Thomas.
------------------------------------------------------------------------------

The MIT License (MIT)

Copyright (c) 2014 Steve Thomas

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

# Constant-Time Encoding

[![Build Status](https://github.com/paragonie/constant_time_encoding/actions/workflows/ci.yml/badge.svg)](https://github.com/paragonie/constant_time_encoding/actions)
[![Latest Stable Version](https://poser.pugx.org/paragonie/constant_time_encoding/v/stable)](https://packagist.org/packages/paragonie/constant_time_encoding)
[![Latest Unstable Version](https://poser.pugx.org/paragonie/constant_time_encoding/v/unstable)](https://packagist.org/packages/paragonie/constant_time_encoding)
[![License](https://poser.pugx.org/paragonie/constant_time_encoding/license)](https://packagist.org/packages/paragonie/constant_time_encoding)
[![Downloads](https://img.shields.io/packagist/dt/paragonie/constant_time_encoding.svg)](https://packagist.org/packages/paragonie/constant_time_encoding)

Based on the [constant-time base64 implementation made by Steve "Sc00bz" Thomas](https://github.com/Sc00bz/ConstTimeEncoding),
this library aims to offer character encoding functions that do not leak
information about what you are encoding/decoding via processor cache 
misses. Further reading on [cache-timing attacks](http://blog.ircmaxell.com/2014/11/its-all-about-time.html).

Our fork offers the following enhancements:

* `mbstring.func_overload` resistance
* Unit tests
* Composer- and Packagist-ready
* Base16 encoding
* Base32 encoding
* Uses `pack()` and `unpack()` instead of `chr()` and `ord()`

## PHP Version Requirements

Version 2 of this library should work on **PHP 7** or newer. For PHP 5
support, see [the v1.x branch](https://github.com/paragonie/constant_time_encoding/tree/v1.x).

If you are adding this as a dependency to a project intended to work on both PHP 5 and PHP 7, please set the required version to `^1|^2` instead of just `^1` or `^2`.

## How to Install

```sh
composer require paragonie/constant_time_encoding
```

## How to Use

```php
use ParagonIE\ConstantTime\Encoding;

// possibly (if applicable): 
// require 'vendor/autoload.php';

$data = random_bytes(32);
echo Encoding::base64Encode($data), "\n";
echo Encoding::base32EncodeUpper($data), "\n";
echo Encoding::base32Encode($data), "\n";
echo Encoding::hexEncode($data), "\n";
echo Encoding::hexEncodeUpper($data), "\n";
```

Example output:
 
```
1VilPkeVqirlPifk5scbzcTTbMT2clp+Zkyv9VFFasE=
2VMKKPSHSWVCVZJ6E7SONRY3ZXCNG3GE6ZZFU7TGJSX7KUKFNLAQ====
2vmkkpshswvcvzj6e7sonry3zxcng3ge6zzfu7tgjsx7kukfnlaq====
d558a53e4795aa2ae53e27e4e6c71bcdc4d36cc4f6725a7e664caff551456ac1
D558A53E4795AA2AE53E27E4E6C71BDCC4D36CC4F6725A7E664CAFF551456AC1
```

If you only need a particular variant, you can just reference the 
required class like so:

```php
use ParagonIE\ConstantTime\Base64;
use ParagonIE\ConstantTime\Base32;

$data = random_bytes(32);
echo Base64::encode($data), "\n";
echo Base32::encode($data), "\n";
```

Example output:

```
1VilPkeVqirlPifk5scbzcTTbMT2clp+Zkyv9VFFasE=
2vmkkpshswvcvzj6e7sonry3zxcng3ge6zzfu7tgjsx7kukfnlaq====
```

## Support Contracts

If your company uses this library in their products or services, you may be
interested in [purchasing a support contract from Paragon Initiative Enterprises](https://paragonie.com/enterprise).
{
  "name": "paragonie/constant_time_encoding",
  "description": "Constant-time Implementations of RFC 4648 Encoding (Base-64, Base-32, Base-16)",
  "keywords": [
    "base64",
    "encoding",
    "rfc4648",
    "base32",
    "base16",
    "hex",
    "bin2hex",
    "hex2bin",
    "base64_encode",
    "base64_decode",
    "base32_encode",
    "base32_decode"
  ],
  "license": "MIT",
  "type": "library",
  "authors": [
      {
        "name":     "Paragon Initiative Enterprises",
        "email":    "security@paragonie.com",
        "homepage": "https://paragonie.com",
        "role":     "Maintainer"
      },
      {
        "name":     "Steve 'Sc00bz' Thomas",
        "email":    "steve@tobtu.com",
        "homepage": "https://www.tobtu.com",
        "role":     "Original Developer"
      }
  ],
  "support": {
    "issues":   "https://github.com/paragonie/constant_time_encoding/issues",
    "email":    "info@paragonie.com",
    "source":   "https://github.com/paragonie/constant_time_encoding"
  },
  "require": {
    "php": "^7|^8"
  },
  "require-dev": {
    "phpunit/phpunit": "^6|^7|^8|^9",
    "vimeo/psalm": "^1|^2|^3|^4"
  },
  "autoload": {
    "psr-4": {
      "ParagonIE\\ConstantTime\\": "src/"
    }
  },
  "autoload-dev": {
    "psr-4": {
      "ParagonIE\\ConstantTime\\Tests\\": "tests/"
    }
  }
}
<?php
declare(strict_types=1);
namespace ParagonIE\ConstantTime;

use InvalidArgumentException;
use RangeException;
use SensitiveParameter;
use TypeError;
use function pack;
use function unpack;

/**
 *  Copyright (c) 2016 - 2022 Paragon Initiative Enterprises.
 *  Copyright (c) 2014 Steve "Sc00bz" Thomas (steve at tobtu dot com)
 *
 *  Permission is hereby granted, free of charge, to any person obtaining a copy
 *  of this software and associated documentation files (the "Software"), to deal
 *  in the Software without restriction, including without limitation the rights
 *  to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 *  copies of the Software, and to permit persons to whom the Software is
 *  furnished to do so, subject to the following conditions:
 *
 *  The above copyright notice and this permission notice shall be included in all
 *  copies or substantial portions of the Software.
 *
 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 *  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 *  SOFTWARE.
 */

/**
 * Class Base32
 * [A-Z][2-7]
 *
 * @package ParagonIE\ConstantTime
 */
abstract class Base32 implements EncoderInterface
{
    /**
     * Decode a Base32-encoded string into raw binary
     *
     * @param string $encodedString
     * @param bool $strictPadding
     * @return string
     */
    public static function decode(
        #[SensitiveParameter]
        string $encodedString,
        bool $strictPadding = false
    ): string {
        return static::doDecode($encodedString, false, $strictPadding);
    }

    /**
     * Decode an uppercase Base32-encoded string into raw binary
     *
     * @param string $src
     * @param bool $strictPadding
     * @return string
     */
    public static function decodeUpper(
        #[SensitiveParameter]
        string $src,
        bool $strictPadding = false
    ): string {
        return static::doDecode($src, true, $strictPadding);
    }

    /**
     * Encode into Base32 (RFC 4648)
     *
     * @param string $binString
     * @return string
     * @throws TypeError
     */
    public static function encode(
        #[SensitiveParameter]
        string $binString
    ): string {
        return static::doEncode($binString, false, true);
    }

    /**
     * Encode into Base32 (RFC 4648)
     *
     * @param string $src
     * @return string
     * @throws TypeError
     */
    public static function encodeUnpadded(
        #[SensitiveParameter]
        string $src
    ): string {
        return static::doEncode($src, false, false);
    }

    /**
     * Encode into uppercase Base32 (RFC 4648)
     *
     * @param string $src
     * @return string
     * @throws TypeError
     */
    public static function encodeUpper(
        #[SensitiveParameter]
        string $src
    ): string {
        return static::doEncode($src, true, true);
    }

    /**
     * Encode into uppercase Base32 (RFC 4648)
     *
     * @param string $src
     * @return string
     * @throws TypeError
     */
    public static function encodeUpperUnpadded(
        #[SensitiveParameter]
        string $src
    ): string {
        return static::doEncode($src, true, false);
    }

    /**
     * Uses bitwise operators instead of table-lookups to turn 5-bit integers
     * into 8-bit integers.
     *
     * @param int $src
     * @return int
     */
    protected static function decode5Bits(int $src): int
    {
        $ret = -1;

        // if ($src > 96 && $src < 123) $ret += $src - 97 + 1; // -64
        $ret += (((0x60 - $src) & ($src - 0x7b)) >> 8) & ($src - 96);

        // if ($src > 0x31 && $src < 0x38) $ret += $src - 24 + 1; // -23
        $ret += (((0x31 - $src) & ($src - 0x38)) >> 8) & ($src - 23);

        return $ret;
    }

    /**
     * Uses bitwise operators instead of table-lookups to turn 5-bit integers
     * into 8-bit integers.
     *
     * Uppercase variant.
     *
     * @param int $src
     * @return int
     */
    protected static function decode5BitsUpper(int $src): int
    {
        $ret = -1;

        // if ($src > 64 && $src < 91) $ret += $src - 65 + 1; // -64
        $ret += (((0x40 - $src) & ($src - 0x5b)) >> 8) & ($src - 64);

        // if ($src > 0x31 && $src < 0x38) $ret += $src - 24 + 1; // -23
        $ret += (((0x31 - $src) & ($src - 0x38)) >> 8) & ($src - 23);

        return $ret;
    }

    /**
     * Uses bitwise operators instead of table-lookups to turn 8-bit integers
     * into 5-bit integers.
     *
     * @param int $src
     * @return string
     */
    protected static function encode5Bits(int $src): string
    {
        $diff = 0x61;

        // if ($src > 25) $ret -= 72;
        $diff -= ((25 - $src) >> 8) & 73;

        return pack('C', $src + $diff);
    }

    /**
     * Uses bitwise operators instead of table-lookups to turn 8-bit integers
     * into 5-bit integers.
     *
     * Uppercase variant.
     *
     * @param int $src
     * @return string
     */
    protected static function encode5BitsUpper(int $src): string
    {
        $diff = 0x41;

        // if ($src > 25) $ret -= 40;
        $diff -= ((25 - $src) >> 8) & 41;

        return pack('C', $src + $diff);
    }

    /**
     * @param string $encodedString
     * @param bool $upper
     * @return string
     */
    public static function decodeNoPadding(
        #[SensitiveParameter]
        string $encodedString,
        bool $upper = false
    ): string {
        $srcLen = Binary::safeStrlen($encodedString);
        if ($srcLen === 0) {
            return '';
        }
        if (($srcLen & 7) === 0) {
            for ($j = 0; $j < 7 && $j < $srcLen; ++$j) {
                if ($encodedString[$srcLen - $j - 1] === '=') {
                    throw new InvalidArgumentException(
                        "decodeNoPadding() doesn't tolerate padding"
                    );
                }
            }
        }
        return static::doDecode(
            $encodedString,
            $upper,
            true
        );
    }

    /**
     * Base32 decoding
     *
     * @param string $src
     * @param bool $upper
     * @param bool $strictPadding
     * @return string
     *
     * @throws TypeError
     */
    protected static function doDecode(
        #[SensitiveParameter]
        string $src,
        bool $upper = false,
        bool $strictPadding = false
    ): string {
        // We do this to reduce code duplication:
        $method = $upper
            ? 'decode5BitsUpper'
            : 'decode5Bits';

        // Remove padding
        $srcLen = Binary::safeStrlen($src);
        if ($srcLen === 0) {
            return '';
        }
        if ($strictPadding) {
            if (($srcLen & 7) === 0) {
                for ($j = 0; $j < 7; ++$j) {
                    if ($src[$srcLen - 1] === '=') {
                        $srcLen--;
                    } else {
                        break;
                    }
                }
            }
            if (($srcLen & 7) === 1) {
                throw new RangeException(
                    'Incorrect padding'
                );
            }
        } else {
            $src = \rtrim($src, '=');
            $srcLen = Binary::safeStrlen($src);
        }

        $err = 0;
        $dest = '';
        // Main loop (no padding):
        for ($i = 0; $i + 8 <= $srcLen; $i += 8) {
            /** @var array<int, int> $chunk */
            $chunk = unpack('C*', Binary::safeSubstr($src, $i, 8));
            /** @var int $c0 */
            $c0 = static::$method($chunk[1]);
            /** @var int $c1 */
            $c1 = static::$method($chunk[2]);
            /** @var int $c2 */
            $c2 = static::$method($chunk[3]);
            /** @var int $c3 */
            $c3 = static::$method($chunk[4]);
            /** @var int $c4 */
            $c4 = static::$method($chunk[5]);
            /** @var int $c5 */
            $c5 = static::$method($chunk[6]);
            /** @var int $c6 */
            $c6 = static::$method($chunk[7]);
            /** @var int $c7 */
            $c7 = static::$method($chunk[8]);

            $dest .= pack(
                'CCCCC',
                (($c0 << 3) | ($c1 >> 2)             ) & 0xff,
                (($c1 << 6) | ($c2 << 1) | ($c3 >> 4)) & 0xff,
                (($c3 << 4) | ($c4 >> 1)             ) & 0xff,
                (($c4 << 7) | ($c5 << 2) | ($c6 >> 3)) & 0xff,
                (($c6 << 5) | ($c7     )             ) & 0xff
            );
            $err |= ($c0 | $c1 | $c2 | $c3 | $c4 | $c5 | $c6 | $c7) >> 8;
        }
        // The last chunk, which may have padding:
        if ($i < $srcLen) {
            /** @var array<int, int> $chunk */
            $chunk = unpack('C*', Binary::safeSubstr($src, $i, $srcLen - $i));
            /** @var int $c0 */
            $c0 = static::$method($chunk[1]);

            if ($i + 6 < $srcLen) {
                /** @var int $c1 */
                $c1 = static::$method($chunk[2]);
                /** @var int $c2 */
                $c2 = static::$method($chunk[3]);
                /** @var int $c3 */
                $c3 = static::$method($chunk[4]);
                /** @var int $c4 */
                $c4 = static::$method($chunk[5]);
                /** @var int $c5 */
                $c5 = static::$method($chunk[6]);
                /** @var int $c6 */
                $c6 = static::$method($chunk[7]);

                $dest .= pack(
                    'CCCC',
                    (($c0 << 3) | ($c1 >> 2)             ) & 0xff,
                    (($c1 << 6) | ($c2 << 1) | ($c3 >> 4)) & 0xff,
                    (($c3 << 4) | ($c4 >> 1)             ) & 0xff,
                    (($c4 << 7) | ($c5 << 2) | ($c6 >> 3)) & 0xff
                );
                $err |= ($c0 | $c1 | $c2 | $c3 | $c4 | $c5 | $c6) >> 8;
                if ($strictPadding) {
                    $err |= ($c6 << 5) & 0xff;
                }
            } elseif ($i + 5 < $srcLen) {
                /** @var int $c1 */
                $c1 = static::$method($chunk[2]);
                /** @var int $c2 */
                $c2 = static::$method($chunk[3]);
                /** @var int $c3 */
                $c3 = static::$method($chunk[4]);
                /** @var int $c4 */
                $c4 = static::$method($chunk[5]);
                /** @var int $c5 */
                $c5 = static::$method($chunk[6]);

                $dest .= pack(
                    'CCCC',
                    (($c0 << 3) | ($c1 >> 2)             ) & 0xff,
                    (($c1 << 6) | ($c2 << 1) | ($c3 >> 4)) & 0xff,
                    (($c3 << 4) | ($c4 >> 1)             ) & 0xff,
                    (($c4 << 7) | ($c5 << 2)             ) & 0xff
                );
                $err |= ($c0 | $c1 | $c2 | $c3 | $c4 | $c5) >> 8;
            } elseif ($i + 4 < $srcLen) {
                /** @var int $c1 */
                $c1 = static::$method($chunk[2]);
                /** @var int $c2 */
                $c2 = static::$method($chunk[3]);
                /** @var int $c3 */
                $c3 = static::$method($chunk[4]);
                /** @var int $c4 */
                $c4 = static::$method($chunk[5]);

                $dest .= pack(
                    'CCC',
                    (($c0 << 3) | ($c1 >> 2)             ) & 0xff,
                    (($c1 << 6) | ($c2 << 1) | ($c3 >> 4)) & 0xff,
                    (($c3 << 4) | ($c4 >> 1)             ) & 0xff
                );
                $err |= ($c0 | $c1 | $c2 | $c3 | $c4) >> 8;
                if ($strictPadding) {
                    $err |= ($c4 << 7) & 0xff;
                }
            } elseif ($i + 3 < $srcLen) {
                /** @var int $c1 */
                $c1 = static::$method($chunk[2]);
                /** @var int $c2 */
                $c2 = static::$method($chunk[3]);
                /** @var int $c3 */
                $c3 = static::$method($chunk[4]);

                $dest .= pack(
                    'CC',
                    (($c0 << 3) | ($c1 >> 2)             ) & 0xff,
                    (($c1 << 6) | ($c2 << 1) | ($c3 >> 4)) & 0xff
                );
                $err |= ($c0 | $c1 | $c2 | $c3) >> 8;
                if ($strictPadding) {
                    $err |= ($c3 << 4) & 0xff;
                }
            } elseif ($i + 2 < $srcLen) {
                /** @var int $c1 */
                $c1 = static::$method($chunk[2]);
                /** @var int $c2 */
                $c2 = static::$method($chunk[3]);

                $dest .= pack(
                    'CC',
                    (($c0 << 3) | ($c1 >> 2)             ) & 0xff,
                    (($c1 << 6) | ($c2 << 1)             ) & 0xff
                );
                $err |= ($c0 | $c1 | $c2) >> 8;
                if ($strictPadding) {
                    $err |= ($c2 << 6) & 0xff;
                }
            } elseif ($i + 1 < $srcLen) {
                /** @var int $c1 */
                $c1 = static::$method($chunk[2]);

                $dest .= pack(
                    'C',
                    (($c0 << 3) | ($c1 >> 2)             ) & 0xff
                );
                $err |= ($c0 | $c1) >> 8;
                if ($strictPadding) {
                    $err |= ($c1 << 6) & 0xff;
                }
            } else {
                $dest .= pack(
                    'C',
                    (($c0 << 3)                          ) & 0xff
                );
                $err |= ($c0) >> 8;
            }
        }
        $check = ($err === 0);
        if (!$check) {
            throw new RangeException(
                'Base32::doDecode() only expects characters in the correct base32 alphabet'
            );
        }
        return $dest;
    }

    /**
     * Base32 Encoding
     *
     * @param string $src
     * @param bool $upper
     * @param bool $pad
     * @return string
     * @throws TypeError
     */
    protected static function doEncode(
        #[SensitiveParameter]
        string $src,
        bool $upper = false,
        $pad = true
    ): string {
        // We do this to reduce code duplication:
        $method = $upper
            ? 'encode5BitsUpper'
            : 'encode5Bits';
        
        $dest = '';
        $srcLen = Binary::safeStrlen($src);

        // Main loop (no padding):
        for ($i = 0; $i + 5 <= $srcLen; $i += 5) {
            /** @var array<int, int> $chunk */
            $chunk = unpack('C*', Binary::safeSubstr($src, $i, 5));
            $b0 = $chunk[1];
            $b1 = $chunk[2];
            $b2 = $chunk[3];
            $b3 = $chunk[4];
            $b4 = $chunk[5];
            $dest .=
                static::$method(              ($b0 >> 3)  & 31) .
                static::$method((($b0 << 2) | ($b1 >> 6)) & 31) .
                static::$method((($b1 >> 1)             ) & 31) .
                static::$method((($b1 << 4) | ($b2 >> 4)) & 31) .
                static::$method((($b2 << 1) | ($b3 >> 7)) & 31) .
                static::$method((($b3 >> 2)             ) & 31) .
                static::$method((($b3 << 3) | ($b4 >> 5)) & 31) .
                static::$method(  $b4                     & 31);
        }
        // The last chunk, which may have padding:
        if ($i < $srcLen) {
            /** @var array<int, int> $chunk */
            $chunk = unpack('C*', Binary::safeSubstr($src, $i, $srcLen - $i));
            $b0 = $chunk[1];
            if ($i + 3 < $srcLen) {
                $b1 = $chunk[2];
                $b2 = $chunk[3];
                $b3 = $chunk[4];
                $dest .=
                    static::$method(              ($b0 >> 3)  & 31) .
                    static::$method((($b0 << 2) | ($b1 >> 6)) & 31) .
                    static::$method((($b1 >> 1)             ) & 31) .
                    static::$method((($b1 << 4) | ($b2 >> 4)) & 31) .
                    static::$method((($b2 << 1) | ($b3 >> 7)) & 31) .
                    static::$method((($b3 >> 2)             ) & 31) .
                    static::$method((($b3 << 3)             ) & 31);
                if ($pad) {
                    $dest .= '=';
                }
            } elseif ($i + 2 < $srcLen) {
                $b1 = $chunk[2];
                $b2 = $chunk[3];
                $dest .=
                    static::$method(              ($b0 >> 3)  & 31) .
                    static::$method((($b0 << 2) | ($b1 >> 6)) & 31) .
                    static::$method((($b1 >> 1)             ) & 31) .
                    static::$method((($b1 << 4) | ($b2 >> 4)) & 31) .
                    static::$method((($b2 << 1)             ) & 31);
                if ($pad) {
                    $dest .= '===';
                }
            } elseif ($i + 1 < $srcLen) {
                $b1 = $chunk[2];
                $dest .=
                    static::$method(              ($b0 >> 3)  & 31) .
                    static::$method((($b0 << 2) | ($b1 >> 6)) & 31) .
                    static::$method((($b1 >> 1)             ) & 31) .
                    static::$method((($b1 << 4)             ) & 31);
                if ($pad) {
                    $dest .= '====';
                }
            } else {
                $dest .=
                    static::$method(              ($b0 >> 3)  & 31) .
                    static::$method( ($b0 << 2)               & 31);
                if ($pad) {
                    $dest .= '======';
                }
            }
        }
        return $dest;
    }
}
<?php
declare(strict_types=1);
namespace ParagonIE\ConstantTime;

use function pack;

/**
 *  Copyright (c) 2016 - 2022 Paragon Initiative Enterprises.
 *  Copyright (c) 2014 Steve "Sc00bz" Thomas (steve at tobtu dot com)
 *
 *  Permission is hereby granted, free of charge, to any person obtaining a copy
 *  of this software and associated documentation files (the "Software"), to deal
 *  in the Software without restriction, including without limitation the rights
 *  to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 *  copies of the Software, and to permit persons to whom the Software is
 *  furnished to do so, subject to the following conditions:
 *
 *  The above copyright notice and this permission notice shall be included in all
 *  copies or substantial portions of the Software.
 *
 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 *  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 *  SOFTWARE.
 */

/**
 * Class Base32Hex
 * [0-9][A-V]
 *
 * @package ParagonIE\ConstantTime
 */
abstract class Base32Hex extends Base32
{
    /**
     * Uses bitwise operators instead of table-lookups to turn 5-bit integers
     * into 8-bit integers.
     *
     * @param int $src
     * @return int
     */
    protected static function decode5Bits(int $src): int
    {
        $ret = -1;

        // if ($src > 0x30 && $src < 0x3a) ret += $src - 0x2e + 1; // -47
        $ret += (((0x2f - $src) & ($src - 0x3a)) >> 8) & ($src - 47);

        // if ($src > 0x60 && $src < 0x77) ret += $src - 0x61 + 10 + 1; // -86
        $ret += (((0x60 - $src) & ($src - 0x77)) >> 8) & ($src - 86);

        return $ret;
    }

    /**
     * Uses bitwise operators instead of table-lookups to turn 5-bit integers
     * into 8-bit integers.
     *
     * @param int $src
     * @return int
     */
    protected static function decode5BitsUpper(int $src): int
    {
        $ret = -1;

        // if ($src > 0x30 && $src < 0x3a) ret += $src - 0x2e + 1; // -47
        $ret += (((0x2f - $src) & ($src - 0x3a)) >> 8) & ($src - 47);

        // if ($src > 0x40 && $src < 0x57) ret += $src - 0x41 + 10 + 1; // -54
        $ret += (((0x40 - $src) & ($src - 0x57)) >> 8) & ($src - 54);

        return $ret;
    }

    /**
     * Uses bitwise operators instead of table-lookups to turn 8-bit integers
     * into 5-bit integers.
     *
     * @param int $src
     * @return string
     */
    protected static function encode5Bits(int $src): string
    {
        $src += 0x30;

        // if ($src > 0x39) $src += 0x61 - 0x3a; // 39
        $src += ((0x39 - $src) >> 8) & 39;

        return pack('C', $src);
    }

    /**
     * Uses bitwise operators instead of table-lookups to turn 8-bit integers
     * into 5-bit integers.
     *
     * Uppercase variant.
     *
     * @param int $src
     * @return string
     */
    protected static function encode5BitsUpper(int $src): string
    {
        $src += 0x30;

        // if ($src > 0x39) $src += 0x41 - 0x3a; // 7
        $src += ((0x39 - $src) >> 8) & 7;

        return pack('C', $src);
    }
}<?php
declare(strict_types=1);
namespace ParagonIE\ConstantTime;

use InvalidArgumentException;
use RangeException;
use SensitiveParameter;
use SodiumException;
use TypeError;
use function extension_loaded;
use function pack;
use function rtrim;
use function sodium_base642bin;
use function sodium_bin2base64;
use function unpack;
use const SODIUM_BASE64_VARIANT_ORIGINAL;
use const SODIUM_BASE64_VARIANT_ORIGINAL_NO_PADDING;
use const SODIUM_BASE64_VARIANT_URLSAFE;
use const SODIUM_BASE64_VARIANT_URLSAFE_NO_PADDING;

/**
 *  Copyright (c) 2016 - 2022 Paragon Initiative Enterprises.
 *  Copyright (c) 2014 Steve "Sc00bz" Thomas (steve at tobtu dot com)
 *
 *  Permission is hereby granted, free of charge, to any person obtaining a copy
 *  of this software and associated documentation files (the "Software"), to deal
 *  in the Software without restriction, including without limitation the rights
 *  to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 *  copies of the Software, and to permit persons to whom the Software is
 *  furnished to do so, subject to the following conditions:
 *
 *  The above copyright notice and this permission notice shall be included in all
 *  copies or substantial portions of the Software.
 *
 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 *  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 *  SOFTWARE.
 */

/**
 * Class Base64
 * [A-Z][a-z][0-9]+/
 *
 * @package ParagonIE\ConstantTime
 */
abstract class Base64 implements EncoderInterface
{
    /**
     * Encode into Base64
     *
     * Base64 character set "[A-Z][a-z][0-9]+/"
     *
     * @param string $binString
     * @return string
     *
     * @throws TypeError
     */
    public static function encode(
        #[SensitiveParameter]
        string $binString
    ): string {
        if (extension_loaded('sodium')) {
            switch (static::class) {
                case Base64::class:
                    $variant = SODIUM_BASE64_VARIANT_ORIGINAL;
                    break;
                case Base64UrlSafe::class:
                    $variant = SODIUM_BASE64_VARIANT_URLSAFE;
                    break;
                default:
                    $variant = 0;
            }
            if ($variant > 0) {
                try {
                    return sodium_bin2base64($binString, $variant);
                } catch (SodiumException $ex) {
                    throw new RangeException($ex->getMessage(), $ex->getCode(), $ex);
                }
            }
        }
        return static::doEncode($binString, true);
    }

    /**
     * Encode into Base64, no = padding
     *
     * Base64 character set "[A-Z][a-z][0-9]+/"
     *
     * @param string $src
     * @return string
     *
     * @throws TypeError
     */
    public static function encodeUnpadded(
        #[SensitiveParameter]
        string $src
    ): string {
        if (extension_loaded('sodium')) {
            switch (static::class) {
                case Base64::class:
                    $variant = SODIUM_BASE64_VARIANT_ORIGINAL_NO_PADDING;
                    break;
                case Base64UrlSafe::class:
                    $variant = SODIUM_BASE64_VARIANT_URLSAFE_NO_PADDING;
                    break;
                default:
                    $variant = 0;
            }
            if ($variant > 0) {
                try {
                    return sodium_bin2base64($src, $variant);
                } catch (SodiumException $ex) {
                    throw new RangeException($ex->getMessage(), $ex->getCode(), $ex);
                }
            }
        }
        return static::doEncode($src, false);
    }

    /**
     * @param string $src
     * @param bool $pad   Include = padding?
     * @return string
     *
     * @throws TypeError
     */
    protected static function doEncode(
        #[SensitiveParameter]
        string $src,
        bool $pad = true
    ): string {
        $dest = '';
        $srcLen = Binary::safeStrlen($src);
        // Main loop (no padding):
        for ($i = 0; $i + 3 <= $srcLen; $i += 3) {
            /** @var array<int, int> $chunk */
            $chunk = unpack('C*', Binary::safeSubstr($src, $i, 3));
            $b0 = $chunk[1];
            $b1 = $chunk[2];
            $b2 = $chunk[3];

            $dest .=
                static::encode6Bits(               $b0 >> 2       ) .
                static::encode6Bits((($b0 << 4) | ($b1 >> 4)) & 63) .
                static::encode6Bits((($b1 << 2) | ($b2 >> 6)) & 63) .
                static::encode6Bits(  $b2                     & 63);
        }
        // The last chunk, which may have padding:
        if ($i < $srcLen) {
            /** @var array<int, int> $chunk */
            $chunk = unpack('C*', Binary::safeSubstr($src, $i, $srcLen - $i));
            $b0 = $chunk[1];
            if ($i + 1 < $srcLen) {
                $b1 = $chunk[2];
                $dest .=
                    static::encode6Bits($b0 >> 2) .
                    static::encode6Bits((($b0 << 4) | ($b1 >> 4)) & 63) .
                    static::encode6Bits(($b1 << 2) & 63);
                if ($pad) {
                    $dest .= '=';
                }
            } else {
                $dest .=
                    static::encode6Bits( $b0 >> 2) .
                    static::encode6Bits(($b0 << 4) & 63);
                if ($pad) {
                    $dest .= '==';
                }
            }
        }
        return $dest;
    }

    /**
     * decode from base64 into binary
     *
     * Base64 character set "./[A-Z][a-z][0-9]"
     *
     * @param string $encodedString
     * @param bool $strictPadding
     * @return string
     *
     * @throws RangeException
     * @throws TypeError
     */
    public static function decode(
        #[SensitiveParameter]
        string $encodedString,
        bool $strictPadding = false
    ): string {
        // Remove padding
        $srcLen = Binary::safeStrlen($encodedString);
        if ($srcLen === 0) {
            return '';
        }

        if ($strictPadding) {
            if (($srcLen & 3) === 0) {
                if ($encodedString[$srcLen - 1] === '=') {
                    $srcLen--;
                    if ($encodedString[$srcLen - 1] === '=') {
                        $srcLen--;
                    }
                }
            }
            if (($srcLen & 3) === 1) {
                throw new RangeException(
                    'Incorrect padding'
                );
            }
            if ($encodedString[$srcLen - 1] === '=') {
                throw new RangeException(
                    'Incorrect padding'
                );
            }
            if (extension_loaded('sodium')) {
                switch (static::class) {
                    case Base64::class:
                        $variant = SODIUM_BASE64_VARIANT_ORIGINAL_NO_PADDING;
                        break;
                    case Base64UrlSafe::class:
                        $variant = SODIUM_BASE64_VARIANT_URLSAFE_NO_PADDING;
                        break;
                    default:
                        $variant = 0;
                }
                if ($variant > 0) {
                    try {
                        return sodium_base642bin(Binary::safeSubstr($encodedString, 0, $srcLen), $variant);
                    } catch (SodiumException $ex) {
                        throw new RangeException($ex->getMessage(), $ex->getCode(), $ex);
                    }
                }
            }
        } else {
            $encodedString = rtrim($encodedString, '=');
            $srcLen = Binary::safeStrlen($encodedString);
        }

        $err = 0;
        $dest = '';
        // Main loop (no padding):
        for ($i = 0; $i + 4 <= $srcLen; $i += 4) {
            /** @var array<int, int> $chunk */
            $chunk = unpack('C*', Binary::safeSubstr($encodedString, $i, 4));
            $c0 = static::decode6Bits($chunk[1]);
            $c1 = static::decode6Bits($chunk[2]);
            $c2 = static::decode6Bits($chunk[3]);
            $c3 = static::decode6Bits($chunk[4]);

            $dest .= pack(
                'CCC',
                ((($c0 << 2) | ($c1 >> 4)) & 0xff),
                ((($c1 << 4) | ($c2 >> 2)) & 0xff),
                ((($c2 << 6) |  $c3      ) & 0xff)
            );
            $err |= ($c0 | $c1 | $c2 | $c3) >> 8;
        }
        // The last chunk, which may have padding:
        if ($i < $srcLen) {
            /** @var array<int, int> $chunk */
            $chunk = unpack('C*', Binary::safeSubstr($encodedString, $i, $srcLen - $i));
            $c0 = static::decode6Bits($chunk[1]);

            if ($i + 2 < $srcLen) {
                $c1 = static::decode6Bits($chunk[2]);
                $c2 = static::decode6Bits($chunk[3]);
                $dest .= pack(
                    'CC',
                    ((($c0 << 2) | ($c1 >> 4)) & 0xff),
                    ((($c1 << 4) | ($c2 >> 2)) & 0xff)
                );
                $err |= ($c0 | $c1 | $c2) >> 8;
                if ($strictPadding) {
                    $err |= ($c2 << 6) & 0xff;
                }
            } elseif ($i + 1 < $srcLen) {
                $c1 = static::decode6Bits($chunk[2]);
                $dest .= pack(
                    'C',
                    ((($c0 << 2) | ($c1 >> 4)) & 0xff)
                );
                $err |= ($c0 | $c1) >> 8;
                if ($strictPadding) {
                    $err |= ($c1 << 4) & 0xff;
                }
            } elseif ($strictPadding) {
                $err |= 1;
            }
        }
        $check = ($err === 0);
        if (!$check) {
            throw new RangeException(
                'Base64::decode() only expects characters in the correct base64 alphabet'
            );
        }
        return $dest;
    }

    /**
     * @param string $encodedString
     * @return string
     */
    public static function decodeNoPadding(
        #[SensitiveParameter]
        string $encodedString
    ): string {
        $srcLen = Binary::safeStrlen($encodedString);
        if ($srcLen === 0) {
            return '';
        }
        if (($srcLen & 3) === 0) {
            // If $strLen is not zero, and it is divisible by 4, then it's at least 4.
            if ($encodedString[$srcLen - 1] === '=' || $encodedString[$srcLen - 2] === '=') {
                throw new InvalidArgumentException(
                    "decodeNoPadding() doesn't tolerate padding"
                );
            }
        }
        return static::decode(
            $encodedString,
            true
        );
    }

    /**
     * Uses bitwise operators instead of table-lookups to turn 6-bit integers
     * into 8-bit integers.
     *
     * Base64 character set:
     * [A-Z]      [a-z]      [0-9]      +     /
     * 0x41-0x5a, 0x61-0x7a, 0x30-0x39, 0x2b, 0x2f
     *
     * @param int $src
     * @return int
     */
    protected static function decode6Bits(int $src): int
    {
        $ret = -1;

        // if ($src > 0x40 && $src < 0x5b) $ret += $src - 0x41 + 1; // -64
        $ret += (((0x40 - $src) & ($src - 0x5b)) >> 8) & ($src - 64);

        // if ($src > 0x60 && $src < 0x7b) $ret += $src - 0x61 + 26 + 1; // -70
        $ret += (((0x60 - $src) & ($src - 0x7b)) >> 8) & ($src - 70);

        // if ($src > 0x2f && $src < 0x3a) $ret += $src - 0x30 + 52 + 1; // 5
        $ret += (((0x2f - $src) & ($src - 0x3a)) >> 8) & ($src + 5);

        // if ($src == 0x2b) $ret += 62 + 1;
        $ret += (((0x2a - $src) & ($src - 0x2c)) >> 8) & 63;

        // if ($src == 0x2f) ret += 63 + 1;
        $ret += (((0x2e - $src) & ($src - 0x30)) >> 8) & 64;

        return $ret;
    }

    /**
     * Uses bitwise operators instead of table-lookups to turn 8-bit integers
     * into 6-bit integers.
     *
     * @param int $src
     * @return string
     */
    protected static function encode6Bits(int $src): string
    {
        $diff = 0x41;

        // if ($src > 25) $diff += 0x61 - 0x41 - 26; // 6
        $diff += ((25 - $src) >> 8) & 6;

        // if ($src > 51) $diff += 0x30 - 0x61 - 26; // -75
        $diff -= ((51 - $src) >> 8) & 75;

        // if ($src > 61) $diff += 0x2b - 0x30 - 10; // -15
        $diff -= ((61 - $src) >> 8) & 15;

        // if ($src > 62) $diff += 0x2f - 0x2b - 1; // 3
        $diff += ((62 - $src) >> 8) & 3;

        return pack('C', $src + $diff);
    }
}
<?php
declare(strict_types=1);
namespace ParagonIE\ConstantTime;

use function pack;

/**
 *  Copyright (c) 2016 - 2022 Paragon Initiative Enterprises.
 *  Copyright (c) 2014 Steve "Sc00bz" Thomas (steve at tobtu dot com)
 *
 *  Permission is hereby granted, free of charge, to any person obtaining a copy
 *  of this software and associated documentation files (the "Software"), to deal
 *  in the Software without restriction, including without limitation the rights
 *  to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 *  copies of the Software, and to permit persons to whom the Software is
 *  furnished to do so, subject to the following conditions:
 *
 *  The above copyright notice and this permission notice shall be included in all
 *  copies or substantial portions of the Software.
 *
 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 *  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 *  SOFTWARE.
 */

/**
 * Class Base64DotSlash
 * ./[A-Z][a-z][0-9]
 *
 * @package ParagonIE\ConstantTime
 */
abstract class Base64DotSlash extends Base64
{
    /**
     * Uses bitwise operators instead of table-lookups to turn 6-bit integers
     * into 8-bit integers.
     *
     * Base64 character set:
     * ./         [A-Z]      [a-z]     [0-9]
     * 0x2e-0x2f, 0x41-0x5a, 0x61-0x7a, 0x30-0x39
     *
     * @param int $src
     * @return int
     */
    protected static function decode6Bits(int $src): int
    {
        $ret = -1;

        // if ($src > 0x2d && $src < 0x30) ret += $src - 0x2e + 1; // -45
        $ret += (((0x2d - $src) & ($src - 0x30)) >> 8) & ($src - 45);

        // if ($src > 0x40 && $src < 0x5b) ret += $src - 0x41 + 2 + 1; // -62
        $ret += (((0x40 - $src) & ($src - 0x5b)) >> 8) & ($src - 62);

        // if ($src > 0x60 && $src < 0x7b) ret += $src - 0x61 + 28 + 1; // -68
        $ret += (((0x60 - $src) & ($src - 0x7b)) >> 8) & ($src - 68);

        // if ($src > 0x2f && $src < 0x3a) ret += $src - 0x30 + 54 + 1; // 7
        $ret += (((0x2f - $src) & ($src - 0x3a)) >> 8) & ($src + 7);

        return $ret;
    }

    /**
     * Uses bitwise operators instead of table-lookups to turn 8-bit integers
     * into 6-bit integers.
     *
     * @param int $src
     * @return string
     */
    protected static function encode6Bits(int $src): string
    {
        $src += 0x2e;

        // if ($src > 0x2f) $src += 0x41 - 0x30; // 17
        $src += ((0x2f - $src) >> 8) & 17;

        // if ($src > 0x5a) $src += 0x61 - 0x5b; // 6
        $src += ((0x5a - $src) >> 8) & 6;

        // if ($src > 0x7a) $src += 0x30 - 0x7b; // -75
        $src -= ((0x7a - $src) >> 8) & 75;

        return pack('C', $src);
    }
}
<?php
declare(strict_types=1);
namespace ParagonIE\ConstantTime;

use function pack;

/**
 *  Copyright (c) 2016 - 2022 Paragon Initiative Enterprises.
 *  Copyright (c) 2014 Steve "Sc00bz" Thomas (steve at tobtu dot com)
 *
 *  Permission is hereby granted, free of charge, to any person obtaining a copy
 *  of this software and associated documentation files (the "Software"), to deal
 *  in the Software without restriction, including without limitation the rights
 *  to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 *  copies of the Software, and to permit persons to whom the Software is
 *  furnished to do so, subject to the following conditions:
 *
 *  The above copyright notice and this permission notice shall be included in all
 *  copies or substantial portions of the Software.
 *
 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 *  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 *  SOFTWARE.
 */

/**
 * Class Base64DotSlashOrdered
 * ./[0-9][A-Z][a-z]
 *
 * @package ParagonIE\ConstantTime
 */
abstract class Base64DotSlashOrdered extends Base64
{
    /**
     * Uses bitwise operators instead of table-lookups to turn 6-bit integers
     * into 8-bit integers.
     *
     * Base64 character set:
     * [.-9]      [A-Z]      [a-z]
     * 0x2e-0x39, 0x41-0x5a, 0x61-0x7a
     *
     * @param int $src
     * @return int
     */
    protected static function decode6Bits(int $src): int
    {
        $ret = -1;

        // if ($src > 0x2d && $src < 0x3a) ret += $src - 0x2e + 1; // -45
        $ret += (((0x2d - $src) & ($src - 0x3a)) >> 8) & ($src - 45);

        // if ($src > 0x40 && $src < 0x5b) ret += $src - 0x41 + 12 + 1; // -52
        $ret += (((0x40 - $src) & ($src - 0x5b)) >> 8) & ($src - 52);

        // if ($src > 0x60 && $src < 0x7b) ret += $src - 0x61 + 38 + 1; // -58
        $ret += (((0x60 - $src) & ($src - 0x7b)) >> 8) & ($src - 58);

        return $ret;
    }

    /**
     * Uses bitwise operators instead of table-lookups to turn 8-bit integers
     * into 6-bit integers.
     *
     * @param int $src
     * @return string
     */
    protected static function encode6Bits(int $src): string
    {
        $src += 0x2e;

        // if ($src > 0x39) $src += 0x41 - 0x3a; // 7
        $src += ((0x39 - $src) >> 8) & 7;

        // if ($src > 0x5a) $src += 0x61 - 0x5b; // 6
        $src += ((0x5a - $src) >> 8) & 6;

        return pack('C', $src);
    }
}
<?php
declare(strict_types=1);
namespace ParagonIE\ConstantTime;

use function pack;

/**
 *  Copyright (c) 2016 - 2022 Paragon Initiative Enterprises.
 *  Copyright (c) 2014 Steve "Sc00bz" Thomas (steve at tobtu dot com)
 *
 *  Permission is hereby granted, free of charge, to any person obtaining a copy
 *  of this software and associated documentation files (the "Software"), to deal
 *  in the Software without restriction, including without limitation the rights
 *  to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 *  copies of the Software, and to permit persons to whom the Software is
 *  furnished to do so, subject to the following conditions:
 *
 *  The above copyright notice and this permission notice shall be included in all
 *  copies or substantial portions of the Software.
 *
 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 *  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 *  SOFTWARE.
 */

/**
 * Class Base64UrlSafe
 * [A-Z][a-z][0-9]\-_
 *
 * @package ParagonIE\ConstantTime
 */
abstract class Base64UrlSafe extends Base64
{

    /**
     * Uses bitwise operators instead of table-lookups to turn 6-bit integers
     * into 8-bit integers.
     *
     * Base64 character set:
     * [A-Z]      [a-z]      [0-9]      -     _
     * 0x41-0x5a, 0x61-0x7a, 0x30-0x39, 0x2d, 0x5f
     *
     * @param int $src
     * @return int
     */
    protected static function decode6Bits(int $src): int
    {
        $ret = -1;

        // if ($src > 0x40 && $src < 0x5b) $ret += $src - 0x41 + 1; // -64
        $ret += (((0x40 - $src) & ($src - 0x5b)) >> 8) & ($src - 64);

        // if ($src > 0x60 && $src < 0x7b) $ret += $src - 0x61 + 26 + 1; // -70
        $ret += (((0x60 - $src) & ($src - 0x7b)) >> 8) & ($src - 70);

        // if ($src > 0x2f && $src < 0x3a) $ret += $src - 0x30 + 52 + 1; // 5
        $ret += (((0x2f - $src) & ($src - 0x3a)) >> 8) & ($src + 5);

        // if ($src == 0x2c) $ret += 62 + 1;
        $ret += (((0x2c - $src) & ($src - 0x2e)) >> 8) & 63;

        // if ($src == 0x5f) ret += 63 + 1;
        $ret += (((0x5e - $src) & ($src - 0x60)) >> 8) & 64;

        return $ret;
    }

    /**
     * Uses bitwise operators instead of table-lookups to turn 8-bit integers
     * into 6-bit integers.
     *
     * @param int $src
     * @return string
     */
    protected static function encode6Bits(int $src): string
    {
        $diff = 0x41;

        // if ($src > 25) $diff += 0x61 - 0x41 - 26; // 6
        $diff += ((25 - $src) >> 8) & 6;

        // if ($src > 51) $diff += 0x30 - 0x61 - 26; // -75
        $diff -= ((51 - $src) >> 8) & 75;

        // if ($src > 61) $diff += 0x2d - 0x30 - 10; // -13
        $diff -= ((61 - $src) >> 8) & 13;

        // if ($src > 62) $diff += 0x5f - 0x2b - 1; // 3
        $diff += ((62 - $src) >> 8) & 49;

        return pack('C', $src + $diff);
    }
}
<?php
declare(strict_types=1);
namespace ParagonIE\ConstantTime;

use TypeError;
use function function_exists;
use function mb_strlen;
use function mb_substr;
use function strlen;
use function substr;

/**
 *  Copyright (c) 2016 - 2022 Paragon Initiative Enterprises.
 *  Copyright (c) 2014 Steve "Sc00bz" Thomas (steve at tobtu dot com)
 *
 *  Permission is hereby granted, free of charge, to any person obtaining a copy
 *  of this software and associated documentation files (the "Software"), to deal
 *  in the Software without restriction, including without limitation the rights
 *  to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 *  copies of the Software, and to permit persons to whom the Software is
 *  furnished to do so, subject to the following conditions:
 *
 *  The above copyright notice and this permission notice shall be included in all
 *  copies or substantial portions of the Software.
 *
 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 *  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 *  SOFTWARE.
 */

/**
 * Class Binary
 *
 * Binary string operators that don't choke on
 * mbstring.func_overload
 *
 * @package ParagonIE\ConstantTime
 */
abstract class Binary
{
    /**
     * Safe string length
     *
     * @ref mbstring.func_overload
     *
     * @param string $str
     * @return int
     */
    public static function safeStrlen(
        #[\SensitiveParameter]
        string $str
    ): int {
        if (function_exists('mb_strlen')) {
            // mb_strlen in PHP 7.x can return false.
            /** @psalm-suppress RedundantCast */
            return (int) mb_strlen($str, '8bit');
        } else {
            return strlen($str);
        }
    }

    /**
     * Safe substring
     *
     * @ref mbstring.func_overload
     *
     * @staticvar boolean $exists
     * @param string $str
     * @param int $start
     * @param ?int $length
     * @return string
     *
     * @throws TypeError
     */
    public static function safeSubstr(
        #[\SensitiveParameter]
        string $str,
        int $start = 0,
        $length = null
    ): string {
        if ($length === 0) {
            return '';
        }
        if (function_exists('mb_substr')) {
            return mb_substr($str, $start, $length, '8bit');
        }
        // Unlike mb_substr(), substr() doesn't accept NULL for length
        if ($length !== null) {
            return substr($str, $start, $length);
        } else {
            return substr($str, $start);
        }
    }
}
<?php
declare(strict_types=1);
namespace ParagonIE\ConstantTime;

/**
 *  Copyright (c) 2016 - 2022 Paragon Initiative Enterprises.
 *  Copyright (c) 2014 Steve "Sc00bz" Thomas (steve at tobtu dot com)
 *
 *  Permission is hereby granted, free of charge, to any person obtaining a copy
 *  of this software and associated documentation files (the "Software"), to deal
 *  in the Software without restriction, including without limitation the rights
 *  to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 *  copies of the Software, and to permit persons to whom the Software is
 *  furnished to do so, subject to the following conditions:
 *
 *  The above copyright notice and this permission notice shall be included in all
 *  copies or substantial portions of the Software.
 *
 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 *  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 *  SOFTWARE.
 */

/**
 * Interface EncoderInterface
 * @package ParagonIE\ConstantTime
 */
interface EncoderInterface
{
    /**
     * Convert a binary string into a hexadecimal string without cache-timing
     * leaks
     *
     * @param string $binString (raw binary)
     * @return string
     */
    public static function encode(string $binString): string;

    /**
     * Convert a binary string into a hexadecimal string without cache-timing
     * leaks
     *
     * @param string $encodedString
     * @param bool $strictPadding Error on invalid padding
     * @return string (raw binary)
     */
    public static function decode(string $encodedString, bool $strictPadding = false): string;
}
<?php
declare(strict_types=1);
namespace ParagonIE\ConstantTime;

use SensitiveParameter;
use TypeError;

/**
 *  Copyright (c) 2016 - 2022 Paragon Initiative Enterprises.
 *  Copyright (c) 2014 Steve "Sc00bz" Thomas (steve at tobtu dot com)
 *
 *  Permission is hereby granted, free of charge, to any person obtaining a copy
 *  of this software and associated documentation files (the "Software"), to deal
 *  in the Software without restriction, including without limitation the rights
 *  to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 *  copies of the Software, and to permit persons to whom the Software is
 *  furnished to do so, subject to the following conditions:
 *
 *  The above copyright notice and this permission notice shall be included in all
 *  copies or substantial portions of the Software.
 *
 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 *  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 *  SOFTWARE.
 */

/**
 * Class Encoding
 * @package ParagonIE\ConstantTime
 */
abstract class Encoding
{
    /**
     * RFC 4648 Base32 encoding
     *
     * @param string $str
     * @return string
     * @throws TypeError
     */
    public static function base32Encode(
        #[SensitiveParameter]
        string $str
    ): string {
        return Base32::encode($str);
    }

    /**
     * RFC 4648 Base32 encoding
     *
     * @param string $str
     * @return string
     * @throws TypeError
     */
    public static function base32EncodeUpper(
        #[SensitiveParameter]
        string $str
    ): string {
        return Base32::encodeUpper($str);
    }

    /**
     * RFC 4648 Base32 decoding
     *
     * @param string $str
     * @return string
     * @throws TypeError
     */
    public static function base32Decode(
        #[SensitiveParameter]
        string $str
    ): string {
        return Base32::decode($str);
    }

    /**
     * RFC 4648 Base32 decoding
     *
     * @param string $str
     * @return string
     * @throws TypeError
     */
    public static function base32DecodeUpper(
        #[SensitiveParameter]
        string $str
    ): string {
        return Base32::decodeUpper($str);
    }

    /**
     * RFC 4648 Base32 encoding
     *
     * @param string $str
     * @return string
     * @throws TypeError
     */
    public static function base32HexEncode(
        #[SensitiveParameter]
        string $str
    ): string {
        return Base32Hex::encode($str);
    }

    /**
     * RFC 4648 Base32Hex encoding
     *
     * @param string $str
     * @return string
     * @throws TypeError
     */
    public static function base32HexEncodeUpper(
        #[SensitiveParameter]
        string $str
    ): string {
        return Base32Hex::encodeUpper($str);
    }

    /**
     * RFC 4648 Base32Hex decoding
     *
     * @param string $str
     * @return string
     * @throws TypeError
     */
    public static function base32HexDecode(
        #[SensitiveParameter]
        string $str
    ): string {
        return Base32Hex::decode($str);
    }

    /**
     * RFC 4648 Base32Hex decoding
     *
     * @param string $str
     * @return string
     * @throws TypeError
     */
    public static function base32HexDecodeUpper(
        #[SensitiveParameter]
        string $str
    ): string {
        return Base32Hex::decodeUpper($str);
    }

    /**
     * RFC 4648 Base64 encoding
     *
     * @param string $str
     * @return string
     * @throws TypeError
     */
    public static function base64Encode(
        #[SensitiveParameter]
        string $str
    ): string {
        return Base64::encode($str);
    }

    /**
     * RFC 4648 Base64 decoding
     *
     * @param string $str
     * @return string
     * @throws TypeError
     */
    public static function base64Decode(
        #[SensitiveParameter]
        string $str
    ): string {
        return Base64::decode($str);
    }

    /**
     * Encode into Base64
     *
     * Base64 character set "./[A-Z][a-z][0-9]"
     * @param string $str
     * @return string
     * @throws TypeError
     */
    public static function base64EncodeDotSlash(
        #[SensitiveParameter]
        string $str
    ): string {
        return Base64DotSlash::encode($str);
    }

    /**
     * Decode from base64 to raw binary
     *
     * Base64 character set "./[A-Z][a-z][0-9]"
     *
     * @param string $str
     * @return string
     * @throws \RangeException
     * @throws TypeError
     */
    public static function base64DecodeDotSlash(
        #[SensitiveParameter]
        string $str
    ): string {
        return Base64DotSlash::decode($str);
    }

    /**
     * Encode into Base64
     *
     * Base64 character set "[.-9][A-Z][a-z]" or "./[0-9][A-Z][a-z]"
     * @param string $str
     * @return string
     * @throws TypeError
     */
    public static function base64EncodeDotSlashOrdered(
        #[SensitiveParameter]
        string $str
    ): string {
        return Base64DotSlashOrdered::encode($str);
    }

    /**
     * Decode from base64 to raw binary
     *
     * Base64 character set "[.-9][A-Z][a-z]" or "./[0-9][A-Z][a-z]"
     *
     * @param string $str
     * @return string
     * @throws \RangeException
     * @throws TypeError
     */
    public static function base64DecodeDotSlashOrdered(
        #[SensitiveParameter]
        string $str
    ): string {
        return Base64DotSlashOrdered::decode($str);
    }

    /**
     * Convert a binary string into a hexadecimal string without cache-timing
     * leaks
     *
     * @param string $bin_string (raw binary)
     * @return string
     * @throws TypeError
     */
    public static function hexEncode(
        #[SensitiveParameter]
        string $bin_string
    ): string {
        return Hex::encode($bin_string);
    }

    /**
     * Convert a hexadecimal string into a binary string without cache-timing
     * leaks
     *
     * @param string $hex_string
     * @return string (raw binary)
     * @throws \RangeException
     */
    public static function hexDecode(
        #[SensitiveParameter]
        string $hex_string
    ): string {
        return Hex::decode($hex_string);
    }

    /**
     * Convert a binary string into a hexadecimal string without cache-timing
     * leaks
     *
     * @param string $bin_string (raw binary)
     * @return string
     * @throws TypeError
     */
    public static function hexEncodeUpper(
        #[SensitiveParameter]
        string $bin_string
    ): string {
        return Hex::encodeUpper($bin_string);
    }

    /**
     * Convert a binary string into a hexadecimal string without cache-timing
     * leaks
     *
     * @param string $bin_string (raw binary)
     * @return string
     */
    public static function hexDecodeUpper(
        #[SensitiveParameter]
        string $bin_string
    ): string {
        return Hex::decode($bin_string);
    }
}
<?php
declare(strict_types=1);
namespace ParagonIE\ConstantTime;

use RangeException;
use SensitiveParameter;
use SodiumException;
use TypeError;
use function extension_loaded;
use function pack;
use function sodium_bin2hex;
use function sodium_hex2bin;
use function unpack;

/**
 *  Copyright (c) 2016 - 2022 Paragon Initiative Enterprises.
 *  Copyright (c) 2014 Steve "Sc00bz" Thomas (steve at tobtu dot com)
 *
 *  Permission is hereby granted, free of charge, to any person obtaining a copy
 *  of this software and associated documentation files (the "Software"), to deal
 *  in the Software without restriction, including without limitation the rights
 *  to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 *  copies of the Software, and to permit persons to whom the Software is
 *  furnished to do so, subject to the following conditions:
 *
 *  The above copyright notice and this permission notice shall be included in all
 *  copies or substantial portions of the Software.
 *
 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 *  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 *  SOFTWARE.
 */

/**
 * Class Hex
 * @package ParagonIE\ConstantTime
 */
abstract class Hex implements EncoderInterface
{
    /**
     * Convert a binary string into a hexadecimal string without cache-timing
     * leaks
     *
     * @param string $binString (raw binary)
     * @return string
     * @throws TypeError
     */
    public static function encode(
        #[SensitiveParameter]
        string $binString
    ): string {
        if (extension_loaded('sodium')) {
            try {
                return sodium_bin2hex($binString);
            } catch (SodiumException $ex) {
                throw new RangeException($ex->getMessage(), $ex->getCode(), $ex);
            }
        }
        $hex = '';
        $len = Binary::safeStrlen($binString);
        for ($i = 0; $i < $len; ++$i) {
            /** @var array<int, int> $chunk */
            $chunk = unpack('C', $binString[$i]);
            $c = $chunk[1] & 0xf;
            $b = $chunk[1] >> 4;

            $hex .= pack(
                'CC',
                (87 + $b + ((($b - 10) >> 8) & ~38)),
                (87 + $c + ((($c - 10) >> 8) & ~38))
            );
        }
        return $hex;
    }

    /**
     * Convert a binary string into a hexadecimal string without cache-timing
     * leaks, returning uppercase letters (as per RFC 4648)
     *
     * @param string $binString (raw binary)
     * @return string
     * @throws TypeError
     */
    public static function encodeUpper(
        #[SensitiveParameter]
        string $binString
    ): string {
        $hex = '';
        $len = Binary::safeStrlen($binString);

        for ($i = 0; $i < $len; ++$i) {
            /** @var array<int, int> $chunk */
            $chunk = unpack('C', $binString[$i]);
            $c = $chunk[1] & 0xf;
            $b = $chunk[1] >> 4;

            $hex .= pack(
                'CC',
                (55 + $b + ((($b - 10) >> 8) & ~6)),
                (55 + $c + ((($c - 10) >> 8) & ~6))
            );
        }
        return $hex;
    }

    /**
     * Convert a hexadecimal string into a binary string without cache-timing
     * leaks
     *
     * @param string $encodedString
     * @param bool $strictPadding
     * @return string (raw binary)
     * @throws RangeException
     */
    public static function decode(
        #[SensitiveParameter]
        string $encodedString,
        bool $strictPadding = false
    ): string {
        if (extension_loaded('sodium') && $strictPadding) {
            try {
                return sodium_hex2bin($encodedString);
            } catch (SodiumException $ex) {
                throw new RangeException($ex->getMessage(), $ex->getCode(), $ex);
            }
        }
        $hex_pos = 0;
        $bin = '';
        $c_acc = 0;
        $hex_len = Binary::safeStrlen($encodedString);
        $state = 0;
        if (($hex_len & 1) !== 0) {
            if ($strictPadding) {
                throw new RangeException(
                    'Expected an even number of hexadecimal characters'
                );
            } else {
                $encodedString = '0' . $encodedString;
                ++$hex_len;
            }
        }

        /** @var array<int, int> $chunk */
        $chunk = unpack('C*', $encodedString);
        while ($hex_pos < $hex_len) {
            ++$hex_pos;
            $c = $chunk[$hex_pos];
            $c_num = $c ^ 48;
            $c_num0 = ($c_num - 10) >> 8;
            $c_alpha = ($c & ~32) - 55;
            $c_alpha0 = (($c_alpha - 10) ^ ($c_alpha - 16)) >> 8;

            if (($c_num0 | $c_alpha0) === 0) {
                throw new RangeException(
                    'Expected hexadecimal character'
                );
            }
            $c_val = ($c_num0 & $c_num) | ($c_alpha & $c_alpha0);
            if ($state === 0) {
                $c_acc = $c_val * 16;
            } else {
                $bin .= pack('C', $c_acc | $c_val);
            }
            $state ^= 1;
        }
        return $bin;
    }
}
<?php
declare(strict_types=1);
namespace ParagonIE\ConstantTime;

use TypeError;

/**
 *  Copyright (c) 2016 - 2022 Paragon Initiative Enterprises.
 *  Copyright (c) 2014 Steve "Sc00bz" Thomas (steve at tobtu dot com)
 *
 *  Permission is hereby granted, free of charge, to any person obtaining a copy
 *  of this software and associated documentation files (the "Software"), to deal
 *  in the Software without restriction, including without limitation the rights
 *  to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 *  copies of the Software, and to permit persons to whom the Software is
 *  furnished to do so, subject to the following conditions:
 *
 *  The above copyright notice and this permission notice shall be included in all
 *  copies or substantial portions of the Software.
 *
 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 *  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 *  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 *  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 *  SOFTWARE.
 */

/**
 * Class RFC4648
 *
 * This class conforms strictly to the RFC
 *
 * @package ParagonIE\ConstantTime
 */
abstract class RFC4648
{
    /**
     * RFC 4648 Base64 encoding
     *
     * "foo" -> "Zm9v"
     *
     * @param string $str
     * @return string
     *
     * @throws TypeError
     */
    public static function base64Encode(
        #[\SensitiveParameter]
        string $str
    ): string {
        return Base64::encode($str);
    }

    /**
     * RFC 4648 Base64 decoding
     *
     * "Zm9v" -> "foo"
     *
     * @param string $str
     * @return string
     *
     * @throws TypeError
     */
    public static function base64Decode(
        #[\SensitiveParameter]
        string $str
    ): string {
        return Base64::decode($str, true);
    }

    /**
     * RFC 4648 Base64 (URL Safe) encoding
     *
     * "foo" -> "Zm9v"
     *
     * @param string $str
     * @return string
     *
     * @throws TypeError
     */
    public static function base64UrlSafeEncode(
        #[\SensitiveParameter]
        string $str
    ): string {
        return Base64UrlSafe::encode($str);
    }

    /**
     * RFC 4648 Base64 (URL Safe) decoding
     *
     * "Zm9v" -> "foo"
     *
     * @param string $str
     * @return string
     *
     * @throws TypeError
     */
    public static function base64UrlSafeDecode(
        #[\SensitiveParameter]
        string $str
    ): string {
        return Base64UrlSafe::decode($str, true);
    }

    /**
     * RFC 4648 Base32 encoding
     *
     * "foo" -> "MZXW6==="
     *
     * @param string $str
     * @return string
     *
     * @throws TypeError
     */
    public static function base32Encode(
        #[\SensitiveParameter]
        string $str
    ): string {
        return Base32::encodeUpper($str);
    }

    /**
     * RFC 4648 Base32 encoding
     *
     * "MZXW6===" -> "foo"
     *
     * @param string $str
     * @return string
     *
     * @throws TypeError
     */
    public static function base32Decode(
        #[\SensitiveParameter]
        string $str
    ): string {
        return Base32::decodeUpper($str, true);
    }

    /**
     * RFC 4648 Base32-Hex encoding
     *
     * "foo" -> "CPNMU==="
     *
     * @param string $str
     * @return string
     *
     * @throws TypeError
     */
    public static function base32HexEncode(
        #[\SensitiveParameter]
        string $str
    ): string {
        return Base32::encodeUpper($str);
    }

    /**
     * RFC 4648 Base32-Hex decoding
     *
     * "CPNMU===" -> "foo"
     *
     * @param string $str
     * @return string
     *
     * @throws TypeError
     */
    public static function base32HexDecode(
        #[\SensitiveParameter]
        string $str
    ): string {
        return Base32::decodeUpper($str, true);
    }

    /**
     * RFC 4648 Base16 decoding
     *
     * "foo" -> "666F6F"
     *
     * @param string $str
     * @return string
     *
     * @throws TypeError
     */
    public static function base16Encode(
        #[\SensitiveParameter]
        string $str
    ): string {
        return Hex::encodeUpper($str);
    }

    /**
     * RFC 4648 Base16 decoding
     *
     * "666F6F" -> "foo"
     *
     * @param string $str
     * @return string
     */
    public static function base16Decode(
        #[\SensitiveParameter]
        string $str
    ): string {
        return Hex::decode($str, true);
    }
}
phpseclib Lead Developer:  TerraFrost (Jim Wigginton)

phpseclib Developers:      monnerat (Patrick Monnerat)
                           bantu (Andreas Fischer)
                           petrich (Hans-Jürgen Petrich)
                           GrahamCampbell (Graham Campbell)
                           hc-jworman# Backers

phpseclib ongoing development is made possible by [Tidelift](https://tidelift.com/subscription/pkg/packagist-phpseclib-phpseclib?utm_source=packagist-phpseclib-phpseclib&utm_medium=referral&utm_campaign=readme) and by contributions by users like you. Thank you.

## Backers

- Allan Simon
- [ChargeOver](https://chargeover.com/)
- Raghu Veer Dendukuri
- Zane Hooper
- [Setasign](https://www.setasign.com/)
- [Charles Severance](https://github.com/csev)
- [Rachel Fish](https://github.com/itsrachelfish)
- Tharyrok
- [cjhaas](https://github.com/cjhaas)
- [istiak-tridip](https://github.com/istiak-tridip)
- [Anna Filina](https://github.com/afilina)
- [blakemckeeby](https://github.com/blakemckeeby)
- [ssddanbrown](https://github.com/ssddanbrown)Copyright (c) 2011-2019 TerraFrost and other contributors

Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
"Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:

The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.# phpseclib - PHP Secure Communications Library

[![CI Status](https://github.com/phpseclib/phpseclib/actions/workflows/ci.yml/badge.svg?branch=3.0&event=push "CI Status")](https://github.com/phpseclib/phpseclib)

## Supporting phpseclib

- [Become a backer or sponsor on Patreon](https://www.patreon.com/phpseclib)
- [One-time donation via PayPal or crypto-currencies](http://sourceforge.net/donate/index.php?group_id=198487)
- [Subscribe to Tidelift](https://tidelift.com/subscription/pkg/packagist-phpseclib-phpseclib?utm_source=packagist-phpseclib-phpseclib&utm_medium=referral&utm_campaign=readme)

## Introduction

MIT-licensed pure-PHP implementations of the following:

SSH-2, SFTP, X.509, an arbitrary-precision integer arithmetic library, Ed25519 / Ed449 / Curve25519 / Curve449, ECDSA / ECDH (with support for 66 curves), RSA (PKCS#1 v2.2 compliant), DSA / DH, DES / 3DES / RC4 / Rijndael / AES / Blowfish / Twofish / Salsa20 / ChaCha20, GCM / Poly1305

* [Browse Git](https://github.com/phpseclib/phpseclib)

## Documentation

* [Documentation / Manual](https://phpseclib.com/)
* [API Documentation](https://api.phpseclib.com/3.0/) (generated by Doctum)

## Branches

### master

* Development Branch
* Unstable API
* Do not use in production

### 3.0

* Long term support (LTS) release
* Major expansion of cryptographic primitives
* Minimum PHP version: 5.6.1
* PSR-4 autoloading with namespace rooted at `\phpseclib3`
* Install via Composer: `composer require phpseclib/phpseclib:~3.0`

### 2.0

* Long term support (LTS) release
* Modernized version of 1.0
* Minimum PHP version: 5.3.3
* PSR-4 autoloading with namespace rooted at `\phpseclib`
* Install via Composer: `composer require phpseclib/phpseclib:~2.0`

### 1.0

* Long term support (LTS) release
* PHP4 compatible
* Composer compatible (PSR-0 autoloading)
* Install using Composer: `composer require phpseclib/phpseclib:~1.0`
* [Download 1.0.24 as ZIP](http://sourceforge.net/projects/phpseclib/files/phpseclib1.0.24.zip/download)

## Security contact information

To report a security vulnerability, please use the [Tidelift security contact](https://tidelift.com/security). Tidelift will coordinate the fix and disclosure.

## Support

Need Support?

* [Checkout Questions and Answers on Stack Overflow](http://stackoverflow.com/questions/tagged/phpseclib)
* [Create a Support Ticket on GitHub](https://github.com/phpseclib/phpseclib/issues/new)

## Special Thanks

<p align="left">
    <a target="_blank" href="https://www.sovereign.tech/tech/phpseclib">
        <img src="https://phpseclib.com/img/sponsors/sovereign-tech-agency.webp" alt="Sovereign Tech Agency" style="width: 200px">
    </a>
</p>

## Additional Thanks

- Allan Simon
- [ChargeOver](https://chargeover.com/)
- <a href="https://jb.gg/OpenSource"><img src="https://resources.jetbrains.com/storage/products/company/brand/logos/jetbrains.svg" height="20px"></a>

## Contributing

1. Fork the Project

2. Ensure you have Composer installed (see [Composer Download Instructions](https://getcomposer.org/download/))

3. Install Development Dependencies
    ```sh
    composer install
    ```

4. Create a Feature Branch

5. Run continuous integration checks:
   ```sh
   composer global require php:^8.1 squizlabs/php_codesniffer friendsofphp/php-cs-fixer vimeo/psalm
   phpcs --standard=build/php_codesniffer.xml
   php-cs-fixer fix --config=build/php-cs-fixer.php --diff --dry-run --using-cache=no
   psalm --config=build/psalm.xml --no-cache --long-progress --report-show-info=false --output-format=text
   vendor/bin/phpunit --verbose --configuration tests/phpunit.xml
   ```
   
6. Send us a Pull Request
{
    "name": "phpseclib/phpseclib",
    "type": "library",
    "description": "PHP Secure Communications Library - Pure-PHP implementations of RSA, AES, SSH2, SFTP, X.509 etc.",
    "keywords": [
        "security",
        "crypto",
        "cryptography",
        "encryption",
        "signature",
        "signing",
        "rsa",
        "aes",
        "blowfish",
        "twofish",
        "ssh",
        "sftp",
        "x509",
        "x.509",
        "asn1",
        "asn.1",
        "BigInteger"
        ],
    "homepage": "http://phpseclib.sourceforge.net",
    "license": "MIT",
    "authors": [
        {
            "name": "Jim Wigginton",
            "email": "terrafrost@php.net",
            "role": "Lead Developer"
        },
        {
            "name": "Patrick Monnerat",
            "email": "pm@datasphere.ch",
            "role": "Developer"
        },
        {
            "name": "Andreas Fischer",
            "email": "bantu@phpbb.com",
            "role": "Developer"
        },
        {
            "name": "Hans-Jürgen Petrich",
            "email": "petrich@tronic-media.com",
            "role": "Developer"
        },
        {
            "name": "Graham Campbell",
            "email": "graham@alt-three.com",
            "role": "Developer"
        }
    ],
    "require": {
        "php": ">=5.6.1",
        "paragonie/constant_time_encoding": "^1|^2|^3",
        "paragonie/random_compat": "^1.4|^2.0|^9.99.99"
    },
    "require-dev": {
        "phpunit/phpunit": "*"
    },
    "suggest": {
        "ext-libsodium": "SSH2/SFTP can make use of some algorithms provided by the libsodium-php extension.",
        "ext-openssl": "Install the OpenSSL extension in order to speed up a wide variety of cryptographic operations.",
        "ext-mcrypt": "Install the Mcrypt extension in order to speed up a few other cryptographic operations.",
        "ext-gmp": "Install the GMP (GNU Multiple Precision) extension in order to speed up arbitrary precision integer arithmetic operations.",
        "ext-dom": "Install the DOM extension to load XML formatted public keys."
    },
    "autoload": {
        "files": [
            "phpseclib/bootstrap.php"
        ],
        "psr-4": {
            "phpseclib3\\": "phpseclib/"
        }
    },
    "autoload-dev": {
        "psr-4": {
            "phpseclib3\\Tests\\": "tests/"
        }
    },
    "config": {
        "sort-packages": true
    }
}
<?php

/**
 * Common String Functions
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2016 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\Common\Functions;

use ParagonIE\ConstantTime\Base64;
use ParagonIE\ConstantTime\Base64UrlSafe;
use ParagonIE\ConstantTime\Hex;
use phpseclib3\Math\BigInteger;
use phpseclib3\Math\Common\FiniteField;

/**
 * Common String Functions
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class Strings
{
    /**
     * String Shift
     *
     * Inspired by array_shift
     *
     * @param string $string
     * @param int $index
     * @return string
     */
    public static function shift(&$string, $index = 1)
    {
        $substr = substr($string, 0, $index);
        $string = substr($string, $index);
        return $substr;
    }

    /**
     * String Pop
     *
     * Inspired by array_pop
     *
     * @param string $string
     * @param int $index
     * @return string
     */
    public static function pop(&$string, $index = 1)
    {
        $substr = substr($string, -$index);
        $string = substr($string, 0, -$index);
        return $substr;
    }

    /**
     * Parse SSH2-style string
     *
     * Returns either an array or a boolean if $data is malformed.
     *
     * Valid characters for $format are as follows:
     *
     * C = byte
     * b = boolean (true/false)
     * N = uint32
     * Q = uint64
     * s = string
     * i = mpint
     * L = name-list
     *
     * uint64 is not supported.
     *
     * @param string $format
     * @param string $data
     * @return mixed
     */
    public static function unpackSSH2($format, &$data)
    {
        $format = self::formatPack($format);
        $result = [];
        for ($i = 0; $i < strlen($format); $i++) {
            switch ($format[$i]) {
                case 'C':
                case 'b':
                    if (!strlen($data)) {
                        throw new \LengthException('At least one byte needs to be present for successful C / b decodes');
                    }
                    break;
                case 'N':
                case 'i':
                case 's':
                case 'L':
                    if (strlen($data) < 4) {
                        throw new \LengthException('At least four byte needs to be present for successful N / i / s / L decodes');
                    }
                    break;
                case 'Q':
                    if (strlen($data) < 8) {
                        throw new \LengthException('At least eight byte needs to be present for successful N / i / s / L decodes');
                    }
                    break;

                default:
                    throw new \InvalidArgumentException('$format contains an invalid character');
            }
            switch ($format[$i]) {
                case 'C':
                    $result[] = ord(self::shift($data));
                    continue 2;
                case 'b':
                    $result[] = ord(self::shift($data)) != 0;
                    continue 2;
                case 'N':
                    list(, $temp) = unpack('N', self::shift($data, 4));
                    $result[] = $temp;
                    continue 2;
                case 'Q':
                    // pack() added support for Q in PHP 5.6.3 and PHP 5.6 is phpseclib 3's minimum version
                    // so in theory we could support this BUT, "64-bit format codes are not available for
                    // 32-bit versions" and phpseclib works on 32-bit installs. on 32-bit installs
                    // 64-bit floats can be used to get larger numbers then 32-bit signed ints would allow
                    // for. sure, you're not gonna get the full precision of 64-bit numbers but just because
                    // you need > 32-bit precision doesn't mean you need the full 64-bit precision
                    $unpacked = unpack('Nupper/Nlower', self::shift($data, 8));
                    $upper = $unpacked['upper'];
                    $lower = $unpacked['lower'];
                    $temp = $upper ? 4294967296 * $upper : 0;
                    $temp += $lower < 0 ? ($lower & 0x7FFFFFFFF) + 0x80000000 : $lower;
                    // $temp = hexdec(bin2hex(self::shift($data, 8)));
                    $result[] = $temp;
                    continue 2;
            }
            list(, $length) = unpack('N', self::shift($data, 4));
            if (strlen($data) < $length) {
                throw new \LengthException("$length bytes needed; " . strlen($data) . ' bytes available');
            }
            $temp = self::shift($data, $length);
            switch ($format[$i]) {
                case 'i':
                    $result[] = new BigInteger($temp, -256);
                    break;
                case 's':
                    $result[] = $temp;
                    break;
                case 'L':
                    $result[] = explode(',', $temp);
            }
        }

        return $result;
    }

    /**
     * Create SSH2-style string
     *
     * @param string $format
     * @param string|int|float|array|bool ...$elements
     * @return string
     */
    public static function packSSH2($format, ...$elements)
    {
        $format = self::formatPack($format);
        if (strlen($format) != count($elements)) {
            throw new \InvalidArgumentException('There must be as many arguments as there are characters in the $format string');
        }
        $result = '';
        for ($i = 0; $i < strlen($format); $i++) {
            $element = $elements[$i];
            switch ($format[$i]) {
                case 'C':
                    if (!is_int($element)) {
                        throw new \InvalidArgumentException('Bytes must be represented as an integer between 0 and 255, inclusive.');
                    }
                    $result .= pack('C', $element);
                    break;
                case 'b':
                    if (!is_bool($element)) {
                        throw new \InvalidArgumentException('A boolean parameter was expected.');
                    }
                    $result .= $element ? "\1" : "\0";
                    break;
                case 'Q':
                    if (!is_int($element) && !is_float($element)) {
                        throw new \InvalidArgumentException('An integer was expected.');
                    }
                    // 4294967296 == 1 << 32
                    $result .= pack('NN', $element / 4294967296, $element);
                    break;
                case 'N':
                    if (is_float($element)) {
                        $element = (int) $element;
                    }
                    if (!is_int($element)) {
                        throw new \InvalidArgumentException('An integer was expected.');
                    }
                    $result .= pack('N', $element);
                    break;
                case 's':
                    if (!self::is_stringable($element)) {
                        throw new \InvalidArgumentException('A string was expected.');
                    }
                    $result .= pack('Na*', strlen($element), $element);
                    break;
                case 'i':
                    if (!$element instanceof BigInteger && !$element instanceof FiniteField\Integer) {
                        throw new \InvalidArgumentException('A phpseclib3\Math\BigInteger or phpseclib3\Math\Common\FiniteField\Integer object was expected.');
                    }
                    $element = $element->toBytes(true);
                    $result .= pack('Na*', strlen($element), $element);
                    break;
                case 'L':
                    if (!is_array($element)) {
                        throw new \InvalidArgumentException('An array was expected.');
                    }
                    $element = implode(',', $element);
                    $result .= pack('Na*', strlen($element), $element);
                    break;
                default:
                    throw new \InvalidArgumentException('$format contains an invalid character');
            }
        }
        return $result;
    }

    /**
     * Expand a pack string
     *
     * Converts C5 to CCCCC, for example.
     *
     * @param string $format
     * @return string
     */
    private static function formatPack($format)
    {
        $parts = preg_split('#(\d+)#', $format, -1, PREG_SPLIT_DELIM_CAPTURE);
        $format = '';
        for ($i = 1; $i < count($parts); $i += 2) {
            $format .= substr($parts[$i - 1], 0, -1) . str_repeat(substr($parts[$i - 1], -1), $parts[$i]);
        }
        $format .= $parts[$i - 1];

        return $format;
    }

    /**
     * Convert binary data into bits
     *
     * bin2hex / hex2bin refer to base-256 encoded data as binary, whilst
     * decbin / bindec refer to base-2 encoded data as binary. For the purposes
     * of this function, bin refers to base-256 encoded data whilst bits refers
     * to base-2 encoded data
     *
     * @param string $x
     * @return string
     */
    public static function bits2bin($x)
    {
        /*
        // the pure-PHP approach is faster than the GMP approach
        if (function_exists('gmp_export')) {
             return strlen($x) ? gmp_export(gmp_init($x, 2)) : gmp_init(0);
        }
        */

        if (preg_match('#[^01]#', $x)) {
            throw new \RuntimeException('The only valid characters are 0 and 1');
        }

        if (!defined('PHP_INT_MIN')) {
            define('PHP_INT_MIN', ~PHP_INT_MAX);
        }

        $length = strlen($x);
        if (!$length) {
            return '';
        }
        $block_size = PHP_INT_SIZE << 3;
        $pad = $block_size - ($length % $block_size);
        if ($pad != $block_size) {
            $x = str_repeat('0', $pad) . $x;
        }

        $parts = str_split($x, $block_size);
        $str = '';
        foreach ($parts as $part) {
            $xor = $part[0] == '1' ? PHP_INT_MIN : 0;
            $part[0] = '0';
            $str .= pack(
                PHP_INT_SIZE == 4 ? 'N' : 'J',
                $xor ^ eval('return 0b' . $part . ';')
            );
        }
        return ltrim($str, "\0");
    }

    /**
     * Convert bits to binary data
     *
     * @param string $x
     * @return string
     */
    public static function bin2bits($x, $trim = true)
    {
        /*
        // the pure-PHP approach is slower than the GMP approach BUT
        // i want to the pure-PHP version to be easily unit tested as well
        if (function_exists('gmp_import')) {
            return gmp_strval(gmp_import($x), 2);
        }
        */

        $len = strlen($x);
        $mod = $len % PHP_INT_SIZE;
        if ($mod) {
            $x = str_pad($x, $len + PHP_INT_SIZE - $mod, "\0", STR_PAD_LEFT);
        }

        $bits = '';
        if (PHP_INT_SIZE == 4) {
            $digits = unpack('N*', $x);
            foreach ($digits as $digit) {
                $bits .= sprintf('%032b', $digit);
            }
        } else {
            $digits = unpack('J*', $x);
            foreach ($digits as $digit) {
                $bits .= sprintf('%064b', $digit);
            }
        }

        return $trim ? ltrim($bits, '0') : $bits;
    }

    /**
     * Switch Endianness Bit Order
     *
     * @param string $x
     * @return string
     */
    public static function switchEndianness($x)
    {
        $r = '';
        for ($i = strlen($x) - 1; $i >= 0; $i--) {
            $b = ord($x[$i]);
            if (PHP_INT_SIZE === 8) {
                // 3 operations
                // from http://graphics.stanford.edu/~seander/bithacks.html#ReverseByteWith64BitsDiv
                $r .= chr((($b * 0x0202020202) & 0x010884422010) % 1023);
            } else {
                // 7 operations
                // from http://graphics.stanford.edu/~seander/bithacks.html#ReverseByteWith32Bits
                $p1 = ($b * 0x0802) & 0x22110;
                $p2 = ($b * 0x8020) & 0x88440;
                $r .= chr(
                    (($p1 | $p2) * 0x10101) >> 16
                );
            }
        }
        return $r;
    }

    /**
     * Increment the current string
     *
     * @param string $var
     * @return string
     */
    public static function increment_str(&$var)
    {
        if (function_exists('sodium_increment')) {
            $var = strrev($var);
            sodium_increment($var);
            $var = strrev($var);
            return $var;
        }

        for ($i = 4; $i <= strlen($var); $i += 4) {
            $temp = substr($var, -$i, 4);
            switch ($temp) {
                case "\xFF\xFF\xFF\xFF":
                    $var = substr_replace($var, "\x00\x00\x00\x00", -$i, 4);
                    break;
                case "\x7F\xFF\xFF\xFF":
                    $var = substr_replace($var, "\x80\x00\x00\x00", -$i, 4);
                    return $var;
                default:
                    $temp = unpack('Nnum', $temp);
                    $var = substr_replace($var, pack('N', $temp['num'] + 1), -$i, 4);
                    return $var;
            }
        }

        $remainder = strlen($var) % 4;

        if ($remainder == 0) {
            return $var;
        }

        $temp = unpack('Nnum', str_pad(substr($var, 0, $remainder), 4, "\0", STR_PAD_LEFT));
        $temp = substr(pack('N', $temp['num'] + 1), -$remainder);
        $var = substr_replace($var, $temp, 0, $remainder);

        return $var;
    }

    /**
     * Find whether the type of a variable is string (or could be converted to one)
     *
     * @param mixed $var
     * @return bool
     * @psalm-assert-if-true string|\Stringable $var
     */
    public static function is_stringable($var)
    {
        return is_string($var) || (is_object($var) && method_exists($var, '__toString'));
    }

    /**
     * Constant Time Base64-decoding
     *
     * ParagoneIE\ConstantTime doesn't use libsodium if it's available so we'll do so
     * ourselves. see https://github.com/paragonie/constant_time_encoding/issues/39
     *
     * @param string $data
     * @return string
     */
    public static function base64_decode($data)
    {
        return function_exists('sodium_base642bin') ?
            sodium_base642bin($data, SODIUM_BASE64_VARIANT_ORIGINAL_NO_PADDING, '=') :
            Base64::decode($data);
    }

    /**
     * Constant Time Base64-decoding (URL safe)
     *
     * @param string $data
     * @return string
     */
    public static function base64url_decode($data)
    {
        // return self::base64_decode(str_replace(['-', '_'], ['+', '/'], $data));

        return function_exists('sodium_base642bin') ?
            sodium_base642bin($data, SODIUM_BASE64_VARIANT_URLSAFE_NO_PADDING, '=') :
            Base64UrlSafe::decode($data);
    }

    /**
     * Constant Time Base64-encoding
     *
     * @param string $data
     * @return string
     */
    public static function base64_encode($data)
    {
        return function_exists('sodium_bin2base64') ?
            sodium_bin2base64($data, SODIUM_BASE64_VARIANT_ORIGINAL) :
            Base64::encode($data);
    }

    /**
     * Constant Time Base64-encoding (URL safe)
     *
     * @param string $data
     * @return string
     */
    public static function base64url_encode($data)
    {
        // return str_replace(['+', '/'], ['-', '_'], self::base64_encode($data));

        return function_exists('sodium_bin2base64') ?
            sodium_bin2base64($data, SODIUM_BASE64_VARIANT_URLSAFE_NO_PADDING) :
            Base64UrlSafe::encode($data);
    }

    /**
     * Constant Time Hex Decoder
     *
     * @param string $data
     * @return string
     */
    public static function hex2bin($data)
    {
        return function_exists('sodium_hex2bin') ?
            sodium_hex2bin($data) :
            Hex::decode($data);
    }

    /**
     * Constant Time Hex Encoder
     *
     * @param string $data
     * @return string
     */
    public static function bin2hex($data)
    {
        return function_exists('sodium_bin2hex') ?
            sodium_bin2hex($data) :
            Hex::encode($data);
    }
}
<?php

/**
 * Pure-PHP implementation of AES.
 *
 * Uses mcrypt, if available/possible, and an internal implementation, otherwise.
 *
 * PHP version 5
 *
 * NOTE: Since AES.php is (for compatibility and phpseclib-historical reasons) virtually
 * just a wrapper to Rijndael.php you may consider using Rijndael.php instead of
 * to save one include_once().
 *
 * If {@link self::setKeyLength() setKeyLength()} isn't called, it'll be calculated from
 * {@link self::setKey() setKey()}.  ie. if the key is 128-bits, the key length will be 128-bits.  If it's 136-bits
 * it'll be null-padded to 192-bits and 192 bits will be the key length until {@link self::setKey() setKey()}
 * is called, again, at which point, it'll be recalculated.
 *
 * Since \phpseclib3\Crypt\AES extends \phpseclib3\Crypt\Rijndael, some functions are available to be called that, in the context of AES, don't
 * make a whole lot of sense.  {@link self::setBlockLength() setBlockLength()}, for instance.  Calling that function,
 * however possible, won't do anything (AES has a fixed block length whereas Rijndael has a variable one).
 *
 * Here's a short example of how to use this library:
 * <code>
 * <?php
 *    include 'vendor/autoload.php';
 *
 *    $aes = new \phpseclib3\Crypt\AES('ctr');
 *
 *    $aes->setKey('abcdefghijklmnop');
 *
 *    $size = 10 * 1024;
 *    $plaintext = '';
 *    for ($i = 0; $i < $size; $i++) {
 *        $plaintext.= 'a';
 *    }
 *
 *    echo $aes->decrypt($aes->encrypt($plaintext));
 * ?>
 * </code>
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2008 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\Crypt;

/**
 * Pure-PHP implementation of AES.
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
class AES extends Rijndael
{
    /**
     * Dummy function
     *
     * Since \phpseclib3\Crypt\AES extends \phpseclib3\Crypt\Rijndael, this function is, technically, available, but it doesn't do anything.
     *
     * @see \phpseclib3\Crypt\Rijndael::setBlockLength()
     * @param int $length
     * @throws \BadMethodCallException anytime it's called
     */
    public function setBlockLength($length)
    {
        throw new \BadMethodCallException('The block length cannot be set for AES.');
    }

    /**
     * Sets the key length
     *
     * Valid key lengths are 128, 192, and 256.  Set the link to bool(false) to disable a fixed key length
     *
     * @see \phpseclib3\Crypt\Rijndael:setKeyLength()
     * @param int $length
     * @throws \LengthException if the key length isn't supported
     */
    public function setKeyLength($length)
    {
        switch ($length) {
            case 128:
            case 192:
            case 256:
                break;
            default:
                throw new \LengthException('Key of size ' . $length . ' not supported by this algorithm. Only keys of sizes 128, 192 or 256 supported');
        }
        parent::setKeyLength($length);
    }

    /**
     * Sets the key.
     *
     * Rijndael supports five different key lengths, AES only supports three.
     *
     * @see \phpseclib3\Crypt\Rijndael:setKey()
     * @see setKeyLength()
     * @param string $key
     * @throws \LengthException if the key length isn't supported
     */
    public function setKey($key)
    {
        switch (strlen($key)) {
            case 16:
            case 24:
            case 32:
                break;
            default:
                throw new \LengthException('Key of size ' . strlen($key) . ' not supported by this algorithm. Only keys of sizes 16, 24 or 32 supported');
        }

        parent::setKey($key);
    }
}
<?php

/**
 * Pure-PHP implementation of Blowfish.
 *
 * Uses mcrypt, if available, and an internal implementation, otherwise.
 *
 * PHP version 5
 *
 * Useful resources are as follows:
 *
 *  - {@link http://en.wikipedia.org/wiki/Blowfish_(cipher) Wikipedia description of Blowfish}
 *
 * # An overview of bcrypt vs Blowfish
 *
 * OpenSSH private keys use a customized version of bcrypt. Specifically, instead of
 * encrypting OrpheanBeholderScryDoubt 64 times OpenSSH's bcrypt variant encrypts
 * OxychromaticBlowfishSwatDynamite 64 times. so we can't use crypt().
 *
 * bcrypt is basically Blowfish but instead of performing the key expansion once it performs
 * the expansion 129 times for each round, with the first key expansion interleaving the salt
 * and password. This renders OpenSSL unusable and forces us to use a pure-PHP implementation
 * of blowfish.
 *
 * # phpseclib's four different _encryptBlock() implementations
 *
 * When using Blowfish as an encryption algorithm, _encryptBlock() is called 9 + 512 +
 * (the number of blocks in the plaintext) times.
 *
 * Each of the first 9 calls to _encryptBlock() modify the P-array. Each of the next 512
 * calls modify the S-boxes. The remaining _encryptBlock() calls operate on the plaintext to
 * produce the ciphertext. In the pure-PHP implementation of Blowfish these remaining
 * _encryptBlock() calls are highly optimized through the use of eval(). Among other things,
 * P-array lookups are eliminated by hard-coding the key-dependent P-array values, and thus we
 * have explained 2 of the 4 different _encryptBlock() implementations.
 *
 * With bcrypt things are a bit different. _encryptBlock() is called 1,079,296 times,
 * assuming 16 rounds (which is what OpenSSH's bcrypt defaults to). The eval()-optimized
 * _encryptBlock() isn't as beneficial because the P-array values are not constant. Well, they
 * are constant, but only for, at most, 777 _encryptBlock() calls, which is equivalent to ~6KB
 * of data. The average length of back to back _encryptBlock() calls with a fixed P-array is
 * 514.12, which is ~4KB of data. Creating an eval()-optimized _encryptBlock() has an upfront
 * cost, which is CPU dependent and is probably not going to be worth it for just ~4KB of
 * data. Conseqeuently, bcrypt does not benefit from the eval()-optimized _encryptBlock().
 *
 * The regular _encryptBlock() does unpack() and pack() on every call, as well, and that can
 * begin to add up after one million function calls.
 *
 * In theory, one might think that it might be beneficial to rewrite all block ciphers so
 * that, instead of passing strings to _encryptBlock(), you convert the string to an array of
 * integers and then pass successive subarrays of that array to _encryptBlock. This, however,
 * kills PHP's memory use. Like let's say you have a 1MB long string. After doing
 * $in = str_repeat('a', 1024 * 1024); PHP's memory utilization jumps up by ~1MB. After doing
 * $blocks = str_split($in, 4); it jumps up by an additional ~16MB. After
 * $blocks = array_map(fn($x) => unpack('N*', $x), $blocks); it jumps up by an additional
 * ~90MB, yielding a 106x increase in memory usage. Consequently, it bcrypt calls a different
 * _encryptBlock() then the regular Blowfish does. That said, the Blowfish _encryptBlock() is
 * basically just a thin wrapper around the bcrypt _encryptBlock(), so there's that.
 *
 * This explains 3 of the 4 _encryptBlock() implementations. the last _encryptBlock()
 * implementation can best be understood by doing Ctrl + F and searching for where
 * self::$use_reg_intval is defined.
 *
 * # phpseclib's three different _setupKey() implementations
 *
 * Every bcrypt round is the equivalent of encrypting 512KB of data. Since OpenSSH uses 16
 * rounds by default that's ~8MB of data that's essentially being encrypted whenever
 * you use bcrypt. That's a lot of data, however, bcrypt operates within tighter constraints
 * than regular Blowfish, so we can use that to our advantage. In particular, whereas Blowfish
 * supports variable length keys, in bcrypt, the initial "key" is the sha512 hash of the
 * password. sha512 hashes are 512 bits or 64 bytes long and thus the bcrypt keys are of a
 * fixed length whereas Blowfish keys are not of a fixed length.
 *
 * bcrypt actually has two different key expansion steps. The first one (expandstate) is
 * constantly XOR'ing every _encryptBlock() parameter against the salt prior _encryptBlock()'s
 * being called. The second one (expand0state) is more similar to Blowfish's _setupKey()
 * but it can still use the fixed length key optimization discussed above and can do away with
 * the pack() / unpack() calls.
 *
 * I suppose _setupKey() could be made to be a thin wrapper around expandstate() but idk it's
 * just a lot of work for very marginal benefits as _setupKey() is only called once for
 * regular Blowfish vs the 128 times it's called --per round-- with bcrypt.
 *
 * # blowfish + bcrypt in the same class
 *
 * Altho there's a lot of Blowfish code that bcrypt doesn't re-use, bcrypt does re-use the
 * initial S-boxes, the initial P-array and the int-only _encryptBlock() implementation.
 *
 * # Credit
 *
 * phpseclib's bcrypt implementation is based losely off of OpenSSH's implementation:
 *
 * https://github.com/openssh/openssh-portable/blob/master/openbsd-compat/bcrypt_pbkdf.c
 *
 * Here's a short example of how to use this library:
 * <code>
 * <?php
 *    include 'vendor/autoload.php';
 *
 *    $blowfish = new \phpseclib3\Crypt\Blowfish('ctr');
 *
 *    $blowfish->setKey('12345678901234567890123456789012');
 *
 *    $plaintext = str_repeat('a', 1024);
 *
 *    echo $blowfish->decrypt($blowfish->encrypt($plaintext));
 * ?>
 * </code>
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @author    Hans-Juergen Petrich <petrich@tronic-media.com>
 * @copyright 2007 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\Crypt;

use phpseclib3\Crypt\Common\BlockCipher;

/**
 * Pure-PHP implementation of Blowfish.
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 * @author  Hans-Juergen Petrich <petrich@tronic-media.com>
 */
class Blowfish extends BlockCipher
{
    /**
     * Block Length of the cipher
     *
     * @see Common\SymmetricKey::block_size
     * @var int
     */
    protected $block_size = 8;

    /**
     * The mcrypt specific name of the cipher
     *
     * @see Common\SymmetricKey::cipher_name_mcrypt
     * @var string
     */
    protected $cipher_name_mcrypt = 'blowfish';

    /**
     * Optimizing value while CFB-encrypting
     *
     * @see Common\SymmetricKey::cfb_init_len
     * @var int
     */
    protected $cfb_init_len = 500;

    /**
     * The fixed subkeys boxes
     *
     * S-Box
     *
     * @var    array
     */
    private static $sbox = [
        0xd1310ba6, 0x98dfb5ac, 0x2ffd72db, 0xd01adfb7, 0xb8e1afed, 0x6a267e96, 0xba7c9045, 0xf12c7f99,
        0x24a19947, 0xb3916cf7, 0x0801f2e2, 0x858efc16, 0x636920d8, 0x71574e69, 0xa458fea3, 0xf4933d7e,
        0x0d95748f, 0x728eb658, 0x718bcd58, 0x82154aee, 0x7b54a41d, 0xc25a59b5, 0x9c30d539, 0x2af26013,
        0xc5d1b023, 0x286085f0, 0xca417918, 0xb8db38ef, 0x8e79dcb0, 0x603a180e, 0x6c9e0e8b, 0xb01e8a3e,
        0xd71577c1, 0xbd314b27, 0x78af2fda, 0x55605c60, 0xe65525f3, 0xaa55ab94, 0x57489862, 0x63e81440,
        0x55ca396a, 0x2aab10b6, 0xb4cc5c34, 0x1141e8ce, 0xa15486af, 0x7c72e993, 0xb3ee1411, 0x636fbc2a,
        0x2ba9c55d, 0x741831f6, 0xce5c3e16, 0x9b87931e, 0xafd6ba33, 0x6c24cf5c, 0x7a325381, 0x28958677,
        0x3b8f4898, 0x6b4bb9af, 0xc4bfe81b, 0x66282193, 0x61d809cc, 0xfb21a991, 0x487cac60, 0x5dec8032,
        0xef845d5d, 0xe98575b1, 0xdc262302, 0xeb651b88, 0x23893e81, 0xd396acc5, 0x0f6d6ff3, 0x83f44239,
        0x2e0b4482, 0xa4842004, 0x69c8f04a, 0x9e1f9b5e, 0x21c66842, 0xf6e96c9a, 0x670c9c61, 0xabd388f0,
        0x6a51a0d2, 0xd8542f68, 0x960fa728, 0xab5133a3, 0x6eef0b6c, 0x137a3be4, 0xba3bf050, 0x7efb2a98,
        0xa1f1651d, 0x39af0176, 0x66ca593e, 0x82430e88, 0x8cee8619, 0x456f9fb4, 0x7d84a5c3, 0x3b8b5ebe,
        0xe06f75d8, 0x85c12073, 0x401a449f, 0x56c16aa6, 0x4ed3aa62, 0x363f7706, 0x1bfedf72, 0x429b023d,
        0x37d0d724, 0xd00a1248, 0xdb0fead3, 0x49f1c09b, 0x075372c9, 0x80991b7b, 0x25d479d8, 0xf6e8def7,
        0xe3fe501a, 0xb6794c3b, 0x976ce0bd, 0x04c006ba, 0xc1a94fb6, 0x409f60c4, 0x5e5c9ec2, 0x196a2463,
        0x68fb6faf, 0x3e6c53b5, 0x1339b2eb, 0x3b52ec6f, 0x6dfc511f, 0x9b30952c, 0xcc814544, 0xaf5ebd09,
        0xbee3d004, 0xde334afd, 0x660f2807, 0x192e4bb3, 0xc0cba857, 0x45c8740f, 0xd20b5f39, 0xb9d3fbdb,
        0x5579c0bd, 0x1a60320a, 0xd6a100c6, 0x402c7279, 0x679f25fe, 0xfb1fa3cc, 0x8ea5e9f8, 0xdb3222f8,
        0x3c7516df, 0xfd616b15, 0x2f501ec8, 0xad0552ab, 0x323db5fa, 0xfd238760, 0x53317b48, 0x3e00df82,
        0x9e5c57bb, 0xca6f8ca0, 0x1a87562e, 0xdf1769db, 0xd542a8f6, 0x287effc3, 0xac6732c6, 0x8c4f5573,
        0x695b27b0, 0xbbca58c8, 0xe1ffa35d, 0xb8f011a0, 0x10fa3d98, 0xfd2183b8, 0x4afcb56c, 0x2dd1d35b,
        0x9a53e479, 0xb6f84565, 0xd28e49bc, 0x4bfb9790, 0xe1ddf2da, 0xa4cb7e33, 0x62fb1341, 0xcee4c6e8,
        0xef20cada, 0x36774c01, 0xd07e9efe, 0x2bf11fb4, 0x95dbda4d, 0xae909198, 0xeaad8e71, 0x6b93d5a0,
        0xd08ed1d0, 0xafc725e0, 0x8e3c5b2f, 0x8e7594b7, 0x8ff6e2fb, 0xf2122b64, 0x8888b812, 0x900df01c,
        0x4fad5ea0, 0x688fc31c, 0xd1cff191, 0xb3a8c1ad, 0x2f2f2218, 0xbe0e1777, 0xea752dfe, 0x8b021fa1,
        0xe5a0cc0f, 0xb56f74e8, 0x18acf3d6, 0xce89e299, 0xb4a84fe0, 0xfd13e0b7, 0x7cc43b81, 0xd2ada8d9,
        0x165fa266, 0x80957705, 0x93cc7314, 0x211a1477, 0xe6ad2065, 0x77b5fa86, 0xc75442f5, 0xfb9d35cf,
        0xebcdaf0c, 0x7b3e89a0, 0xd6411bd3, 0xae1e7e49, 0x00250e2d, 0x2071b35e, 0x226800bb, 0x57b8e0af,
        0x2464369b, 0xf009b91e, 0x5563911d, 0x59dfa6aa, 0x78c14389, 0xd95a537f, 0x207d5ba2, 0x02e5b9c5,
        0x83260376, 0x6295cfa9, 0x11c81968, 0x4e734a41, 0xb3472dca, 0x7b14a94a, 0x1b510052, 0x9a532915,
        0xd60f573f, 0xbc9bc6e4, 0x2b60a476, 0x81e67400, 0x08ba6fb5, 0x571be91f, 0xf296ec6b, 0x2a0dd915,
        0xb6636521, 0xe7b9f9b6, 0xff34052e, 0xc5855664, 0x53b02d5d, 0xa99f8fa1, 0x08ba4799, 0x6e85076a,

        0x4b7a70e9, 0xb5b32944, 0xdb75092e, 0xc4192623, 0xad6ea6b0, 0x49a7df7d, 0x9cee60b8, 0x8fedb266,
        0xecaa8c71, 0x699a17ff, 0x5664526c, 0xc2b19ee1, 0x193602a5, 0x75094c29, 0xa0591340, 0xe4183a3e,
        0x3f54989a, 0x5b429d65, 0x6b8fe4d6, 0x99f73fd6, 0xa1d29c07, 0xefe830f5, 0x4d2d38e6, 0xf0255dc1,
        0x4cdd2086, 0x8470eb26, 0x6382e9c6, 0x021ecc5e, 0x09686b3f, 0x3ebaefc9, 0x3c971814, 0x6b6a70a1,
        0x687f3584, 0x52a0e286, 0xb79c5305, 0xaa500737, 0x3e07841c, 0x7fdeae5c, 0x8e7d44ec, 0x5716f2b8,
        0xb03ada37, 0xf0500c0d, 0xf01c1f04, 0x0200b3ff, 0xae0cf51a, 0x3cb574b2, 0x25837a58, 0xdc0921bd,
        0xd19113f9, 0x7ca92ff6, 0x94324773, 0x22f54701, 0x3ae5e581, 0x37c2dadc, 0xc8b57634, 0x9af3dda7,
        0xa9446146, 0x0fd0030e, 0xecc8c73e, 0xa4751e41, 0xe238cd99, 0x3bea0e2f, 0x3280bba1, 0x183eb331,
        0x4e548b38, 0x4f6db908, 0x6f420d03, 0xf60a04bf, 0x2cb81290, 0x24977c79, 0x5679b072, 0xbcaf89af,
        0xde9a771f, 0xd9930810, 0xb38bae12, 0xdccf3f2e, 0x5512721f, 0x2e6b7124, 0x501adde6, 0x9f84cd87,
        0x7a584718, 0x7408da17, 0xbc9f9abc, 0xe94b7d8c, 0xec7aec3a, 0xdb851dfa, 0x63094366, 0xc464c3d2,
        0xef1c1847, 0x3215d908, 0xdd433b37, 0x24c2ba16, 0x12a14d43, 0x2a65c451, 0x50940002, 0x133ae4dd,
        0x71dff89e, 0x10314e55, 0x81ac77d6, 0x5f11199b, 0x043556f1, 0xd7a3c76b, 0x3c11183b, 0x5924a509,
        0xf28fe6ed, 0x97f1fbfa, 0x9ebabf2c, 0x1e153c6e, 0x86e34570, 0xeae96fb1, 0x860e5e0a, 0x5a3e2ab3,
        0x771fe71c, 0x4e3d06fa, 0x2965dcb9, 0x99e71d0f, 0x803e89d6, 0x5266c825, 0x2e4cc978, 0x9c10b36a,
        0xc6150eba, 0x94e2ea78, 0xa5fc3c53, 0x1e0a2df4, 0xf2f74ea7, 0x361d2b3d, 0x1939260f, 0x19c27960,
        0x5223a708, 0xf71312b6, 0xebadfe6e, 0xeac31f66, 0xe3bc4595, 0xa67bc883, 0xb17f37d1, 0x018cff28,
        0xc332ddef, 0xbe6c5aa5, 0x65582185, 0x68ab9802, 0xeecea50f, 0xdb2f953b, 0x2aef7dad, 0x5b6e2f84,
        0x1521b628, 0x29076170, 0xecdd4775, 0x619f1510, 0x13cca830, 0xeb61bd96, 0x0334fe1e, 0xaa0363cf,
        0xb5735c90, 0x4c70a239, 0xd59e9e0b, 0xcbaade14, 0xeecc86bc, 0x60622ca7, 0x9cab5cab, 0xb2f3846e,
        0x648b1eaf, 0x19bdf0ca, 0xa02369b9, 0x655abb50, 0x40685a32, 0x3c2ab4b3, 0x319ee9d5, 0xc021b8f7,
        0x9b540b19, 0x875fa099, 0x95f7997e, 0x623d7da8, 0xf837889a, 0x97e32d77, 0x11ed935f, 0x16681281,
        0x0e358829, 0xc7e61fd6, 0x96dedfa1, 0x7858ba99, 0x57f584a5, 0x1b227263, 0x9b83c3ff, 0x1ac24696,
        0xcdb30aeb, 0x532e3054, 0x8fd948e4, 0x6dbc3128, 0x58ebf2ef, 0x34c6ffea, 0xfe28ed61, 0xee7c3c73,
        0x5d4a14d9, 0xe864b7e3, 0x42105d14, 0x203e13e0, 0x45eee2b6, 0xa3aaabea, 0xdb6c4f15, 0xfacb4fd0,
        0xc742f442, 0xef6abbb5, 0x654f3b1d, 0x41cd2105, 0xd81e799e, 0x86854dc7, 0xe44b476a, 0x3d816250,
        0xcf62a1f2, 0x5b8d2646, 0xfc8883a0, 0xc1c7b6a3, 0x7f1524c3, 0x69cb7492, 0x47848a0b, 0x5692b285,
        0x095bbf00, 0xad19489d, 0x1462b174, 0x23820e00, 0x58428d2a, 0x0c55f5ea, 0x1dadf43e, 0x233f7061,
        0x3372f092, 0x8d937e41, 0xd65fecf1, 0x6c223bdb, 0x7cde3759, 0xcbee7460, 0x4085f2a7, 0xce77326e,
        0xa6078084, 0x19f8509e, 0xe8efd855, 0x61d99735, 0xa969a7aa, 0xc50c06c2, 0x5a04abfc, 0x800bcadc,
        0x9e447a2e, 0xc3453484, 0xfdd56705, 0x0e1e9ec9, 0xdb73dbd3, 0x105588cd, 0x675fda79, 0xe3674340,
        0xc5c43465, 0x713e38d8, 0x3d28f89e, 0xf16dff20, 0x153e21e7, 0x8fb03d4a, 0xe6e39f2b, 0xdb83adf7,

        0xe93d5a68, 0x948140f7, 0xf64c261c, 0x94692934, 0x411520f7, 0x7602d4f7, 0xbcf46b2e, 0xd4a20068,
        0xd4082471, 0x3320f46a, 0x43b7d4b7, 0x500061af, 0x1e39f62e, 0x97244546, 0x14214f74, 0xbf8b8840,
        0x4d95fc1d, 0x96b591af, 0x70f4ddd3, 0x66a02f45, 0xbfbc09ec, 0x03bd9785, 0x7fac6dd0, 0x31cb8504,
        0x96eb27b3, 0x55fd3941, 0xda2547e6, 0xabca0a9a, 0x28507825, 0x530429f4, 0x0a2c86da, 0xe9b66dfb,
        0x68dc1462, 0xd7486900, 0x680ec0a4, 0x27a18dee, 0x4f3ffea2, 0xe887ad8c, 0xb58ce006, 0x7af4d6b6,
        0xaace1e7c, 0xd3375fec, 0xce78a399, 0x406b2a42, 0x20fe9e35, 0xd9f385b9, 0xee39d7ab, 0x3b124e8b,
        0x1dc9faf7, 0x4b6d1856, 0x26a36631, 0xeae397b2, 0x3a6efa74, 0xdd5b4332, 0x6841e7f7, 0xca7820fb,
        0xfb0af54e, 0xd8feb397, 0x454056ac, 0xba489527, 0x55533a3a, 0x20838d87, 0xfe6ba9b7, 0xd096954b,
        0x55a867bc, 0xa1159a58, 0xcca92963, 0x99e1db33, 0xa62a4a56, 0x3f3125f9, 0x5ef47e1c, 0x9029317c,
        0xfdf8e802, 0x04272f70, 0x80bb155c, 0x05282ce3, 0x95c11548, 0xe4c66d22, 0x48c1133f, 0xc70f86dc,
        0x07f9c9ee, 0x41041f0f, 0x404779a4, 0x5d886e17, 0x325f51eb, 0xd59bc0d1, 0xf2bcc18f, 0x41113564,
        0x257b7834, 0x602a9c60, 0xdff8e8a3, 0x1f636c1b, 0x0e12b4c2, 0x02e1329e, 0xaf664fd1, 0xcad18115,
        0x6b2395e0, 0x333e92e1, 0x3b240b62, 0xeebeb922, 0x85b2a20e, 0xe6ba0d99, 0xde720c8c, 0x2da2f728,
        0xd0127845, 0x95b794fd, 0x647d0862, 0xe7ccf5f0, 0x5449a36f, 0x877d48fa, 0xc39dfd27, 0xf33e8d1e,
        0x0a476341, 0x992eff74, 0x3a6f6eab, 0xf4f8fd37, 0xa812dc60, 0xa1ebddf8, 0x991be14c, 0xdb6e6b0d,
        0xc67b5510, 0x6d672c37, 0x2765d43b, 0xdcd0e804, 0xf1290dc7, 0xcc00ffa3, 0xb5390f92, 0x690fed0b,
        0x667b9ffb, 0xcedb7d9c, 0xa091cf0b, 0xd9155ea3, 0xbb132f88, 0x515bad24, 0x7b9479bf, 0x763bd6eb,
        0x37392eb3, 0xcc115979, 0x8026e297, 0xf42e312d, 0x6842ada7, 0xc66a2b3b, 0x12754ccc, 0x782ef11c,
        0x6a124237, 0xb79251e7, 0x06a1bbe6, 0x4bfb6350, 0x1a6b1018, 0x11caedfa, 0x3d25bdd8, 0xe2e1c3c9,
        0x44421659, 0x0a121386, 0xd90cec6e, 0xd5abea2a, 0x64af674e, 0xda86a85f, 0xbebfe988, 0x64e4c3fe,
        0x9dbc8057, 0xf0f7c086, 0x60787bf8, 0x6003604d, 0xd1fd8346, 0xf6381fb0, 0x7745ae04, 0xd736fccc,
        0x83426b33, 0xf01eab71, 0xb0804187, 0x3c005e5f, 0x77a057be, 0xbde8ae24, 0x55464299, 0xbf582e61,
        0x4e58f48f, 0xf2ddfda2, 0xf474ef38, 0x8789bdc2, 0x5366f9c3, 0xc8b38e74, 0xb475f255, 0x46fcd9b9,
        0x7aeb2661, 0x8b1ddf84, 0x846a0e79, 0x915f95e2, 0x466e598e, 0x20b45770, 0x8cd55591, 0xc902de4c,
        0xb90bace1, 0xbb8205d0, 0x11a86248, 0x7574a99e, 0xb77f19b6, 0xe0a9dc09, 0x662d09a1, 0xc4324633,
        0xe85a1f02, 0x09f0be8c, 0x4a99a025, 0x1d6efe10, 0x1ab93d1d, 0x0ba5a4df, 0xa186f20f, 0x2868f169,
        0xdcb7da83, 0x573906fe, 0xa1e2ce9b, 0x4fcd7f52, 0x50115e01, 0xa70683fa, 0xa002b5c4, 0x0de6d027,
        0x9af88c27, 0x773f8641, 0xc3604c06, 0x61a806b5, 0xf0177a28, 0xc0f586e0, 0x006058aa, 0x30dc7d62,
        0x11e69ed7, 0x2338ea63, 0x53c2dd94, 0xc2c21634, 0xbbcbee56, 0x90bcb6de, 0xebfc7da1, 0xce591d76,
        0x6f05e409, 0x4b7c0188, 0x39720a3d, 0x7c927c24, 0x86e3725f, 0x724d9db9, 0x1ac15bb4, 0xd39eb8fc,
        0xed545578, 0x08fca5b5, 0xd83d7cd3, 0x4dad0fc4, 0x1e50ef5e, 0xb161e6f8, 0xa28514d9, 0x6c51133c,
        0x6fd5c7e7, 0x56e14ec4, 0x362abfce, 0xddc6c837, 0xd79a3234, 0x92638212, 0x670efa8e, 0x406000e0,

        0x3a39ce37, 0xd3faf5cf, 0xabc27737, 0x5ac52d1b, 0x5cb0679e, 0x4fa33742, 0xd3822740, 0x99bc9bbe,
        0xd5118e9d, 0xbf0f7315, 0xd62d1c7e, 0xc700c47b, 0xb78c1b6b, 0x21a19045, 0xb26eb1be, 0x6a366eb4,
        0x5748ab2f, 0xbc946e79, 0xc6a376d2, 0x6549c2c8, 0x530ff8ee, 0x468dde7d, 0xd5730a1d, 0x4cd04dc6,
        0x2939bbdb, 0xa9ba4650, 0xac9526e8, 0xbe5ee304, 0xa1fad5f0, 0x6a2d519a, 0x63ef8ce2, 0x9a86ee22,
        0xc089c2b8, 0x43242ef6, 0xa51e03aa, 0x9cf2d0a4, 0x83c061ba, 0x9be96a4d, 0x8fe51550, 0xba645bd6,
        0x2826a2f9, 0xa73a3ae1, 0x4ba99586, 0xef5562e9, 0xc72fefd3, 0xf752f7da, 0x3f046f69, 0x77fa0a59,
        0x80e4a915, 0x87b08601, 0x9b09e6ad, 0x3b3ee593, 0xe990fd5a, 0x9e34d797, 0x2cf0b7d9, 0x022b8b51,
        0x96d5ac3a, 0x017da67d, 0xd1cf3ed6, 0x7c7d2d28, 0x1f9f25cf, 0xadf2b89b, 0x5ad6b472, 0x5a88f54c,
        0xe029ac71, 0xe019a5e6, 0x47b0acfd, 0xed93fa9b, 0xe8d3c48d, 0x283b57cc, 0xf8d56629, 0x79132e28,
        0x785f0191, 0xed756055, 0xf7960e44, 0xe3d35e8c, 0x15056dd4, 0x88f46dba, 0x03a16125, 0x0564f0bd,
        0xc3eb9e15, 0x3c9057a2, 0x97271aec, 0xa93a072a, 0x1b3f6d9b, 0x1e6321f5, 0xf59c66fb, 0x26dcf319,
        0x7533d928, 0xb155fdf5, 0x03563482, 0x8aba3cbb, 0x28517711, 0xc20ad9f8, 0xabcc5167, 0xccad925f,
        0x4de81751, 0x3830dc8e, 0x379d5862, 0x9320f991, 0xea7a90c2, 0xfb3e7bce, 0x5121ce64, 0x774fbe32,
        0xa8b6e37e, 0xc3293d46, 0x48de5369, 0x6413e680, 0xa2ae0810, 0xdd6db224, 0x69852dfd, 0x09072166,
        0xb39a460a, 0x6445c0dd, 0x586cdecf, 0x1c20c8ae, 0x5bbef7dd, 0x1b588d40, 0xccd2017f, 0x6bb4e3bb,
        0xdda26a7e, 0x3a59ff45, 0x3e350a44, 0xbcb4cdd5, 0x72eacea8, 0xfa6484bb, 0x8d6612ae, 0xbf3c6f47,
        0xd29be463, 0x542f5d9e, 0xaec2771b, 0xf64e6370, 0x740e0d8d, 0xe75b1357, 0xf8721671, 0xaf537d5d,
        0x4040cb08, 0x4eb4e2cc, 0x34d2466a, 0x0115af84, 0xe1b00428, 0x95983a1d, 0x06b89fb4, 0xce6ea048,
        0x6f3f3b82, 0x3520ab82, 0x011a1d4b, 0x277227f8, 0x611560b1, 0xe7933fdc, 0xbb3a792b, 0x344525bd,
        0xa08839e1, 0x51ce794b, 0x2f32c9b7, 0xa01fbac9, 0xe01cc87e, 0xbcc7d1f6, 0xcf0111c3, 0xa1e8aac7,
        0x1a908749, 0xd44fbd9a, 0xd0dadecb, 0xd50ada38, 0x0339c32a, 0xc6913667, 0x8df9317c, 0xe0b12b4f,
        0xf79e59b7, 0x43f5bb3a, 0xf2d519ff, 0x27d9459c, 0xbf97222c, 0x15e6fc2a, 0x0f91fc71, 0x9b941525,
        0xfae59361, 0xceb69ceb, 0xc2a86459, 0x12baa8d1, 0xb6c1075e, 0xe3056a0c, 0x10d25065, 0xcb03a442,
        0xe0ec6e0e, 0x1698db3b, 0x4c98a0be, 0x3278e964, 0x9f1f9532, 0xe0d392df, 0xd3a0342b, 0x8971f21e,
        0x1b0a7441, 0x4ba3348c, 0xc5be7120, 0xc37632d8, 0xdf359f8d, 0x9b992f2e, 0xe60b6f47, 0x0fe3f11d,
        0xe54cda54, 0x1edad891, 0xce6279cf, 0xcd3e7e6f, 0x1618b166, 0xfd2c1d05, 0x848fd2c5, 0xf6fb2299,
        0xf523f357, 0xa6327623, 0x93a83531, 0x56cccd02, 0xacf08162, 0x5a75ebb5, 0x6e163697, 0x88d273cc,
        0xde966292, 0x81b949d0, 0x4c50901b, 0x71c65614, 0xe6c6c7bd, 0x327a140a, 0x45e1d006, 0xc3f27b9a,
        0xc9aa53fd, 0x62a80f00, 0xbb25bfe2, 0x35bdd2f6, 0x71126905, 0xb2040222, 0xb6cbcf7c, 0xcd769c2b,
        0x53113ec0, 0x1640e3d3, 0x38abbd60, 0x2547adf0, 0xba38209c, 0xf746ce76, 0x77afa1c5, 0x20756060,
        0x85cbfe4e, 0x8ae88dd8, 0x7aaaf9b0, 0x4cf9aa7e, 0x1948c25c, 0x02fb8a8c, 0x01c36ae4, 0xd6ebe1f9,
        0x90d4f869, 0xa65cdea0, 0x3f09252d, 0xc208e69f, 0xb74e6132, 0xce77e25b, 0x578fdfe3, 0x3ac372e6
    ];

    /**
     * P-Array consists of 18 32-bit subkeys
     *
     * @var array
     */
    private static $parray = [
        0x243f6a88, 0x85a308d3, 0x13198a2e, 0x03707344, 0xa4093822, 0x299f31d0,
        0x082efa98, 0xec4e6c89, 0x452821e6, 0x38d01377, 0xbe5466cf, 0x34e90c6c,
        0xc0ac29b7, 0xc97c50dd, 0x3f84d5b5, 0xb5470917, 0x9216d5d9, 0x8979fb1b
    ];

    /**
     * The BCTX-working Array
     *
     * Holds the expanded key [p] and the key-depended s-boxes [sb]
     *
     * @var array
     */
    private $bctx;

    /**
     * Holds the last used key
     *
     * @var array
     */
    private $kl;

    /**
     * The Key Length (in bytes)
     * {@internal The max value is 256 / 8 = 32, the min value is 128 / 8 = 16.  Exists in conjunction with $Nk
     *    because the encryption / decryption / key schedule creation requires this number and not $key_length.  We could
     *    derive this from $key_length or vice versa, but that'd mean we'd have to do multiple shift operations, so in lieu
     *    of that, we'll just precompute it once.}
     *
     * @see Common\SymmetricKey::setKeyLength()
     * @var int
     */
    protected $key_length = 16;

    /**
     * Default Constructor.
     *
     * @param string $mode
     * @throws \InvalidArgumentException if an invalid / unsupported mode is provided
     */
    public function __construct($mode)
    {
        parent::__construct($mode);

        if ($this->mode == self::MODE_STREAM) {
            throw new \InvalidArgumentException('Block ciphers cannot be ran in stream mode');
        }
    }

    /**
     * Sets the key length.
     *
     * Key lengths can be between 32 and 448 bits.
     *
     * @param int $length
     */
    public function setKeyLength($length)
    {
        if ($length < 32 || $length > 448) {
                throw new \LengthException('Key size of ' . $length . ' bits is not supported by this algorithm. Only keys of sizes between 32 and 448 bits are supported');
        }

        $this->key_length = $length >> 3;

        parent::setKeyLength($length);
    }

    /**
     * Test for engine validity
     *
     * This is mainly just a wrapper to set things up for \phpseclib3\Crypt\Common\SymmetricKey::isValidEngine()
     *
     * @see Common\SymmetricKey::isValidEngine()
     * @param int $engine
     * @return bool
     */
    protected function isValidEngineHelper($engine)
    {
        if ($engine == self::ENGINE_OPENSSL) {
            if ($this->key_length < 16) {
                return false;
            }
            // quoting https://www.openssl.org/news/openssl-3.0-notes.html, OpenSSL 3.0.1
            // "Moved all variations of the EVP ciphers CAST5, BF, IDEA, SEED, RC2, RC4, RC5, and DES to the legacy provider"
            // in theory openssl_get_cipher_methods() should catch this but, on GitHub Actions, at least, it does not
            if (defined('OPENSSL_VERSION_TEXT') && version_compare(preg_replace('#OpenSSL (\d+\.\d+\.\d+) .*#', '$1', OPENSSL_VERSION_TEXT), '3.0.1', '>=')) {
                return false;
            }
            $this->cipher_name_openssl_ecb = 'bf-ecb';
            $this->cipher_name_openssl = 'bf-' . $this->openssl_translate_mode();
        }

        return parent::isValidEngineHelper($engine);
    }

    /**
     * Setup the key (expansion)
     *
     * @see Common\SymmetricKey::_setupKey()
     */
    protected function setupKey()
    {
        if (isset($this->kl['key']) && $this->key === $this->kl['key']) {
            // already expanded
            return;
        }
        $this->kl = ['key' => $this->key];

        /* key-expanding p[] and S-Box building sb[] */
        $this->bctx = [
            'p'  => [],
            'sb' => self::$sbox
        ];

        // unpack binary string in unsigned chars
        $key  = array_values(unpack('C*', $this->key));
        $keyl = count($key);
        // with bcrypt $keyl will always be 16 (because the key is the sha512 of the key you provide)
        for ($j = 0, $i = 0; $i < 18; ++$i) {
            // xor P1 with the first 32-bits of the key, xor P2 with the second 32-bits ...
            for ($data = 0, $k = 0; $k < 4; ++$k) {
                $data = ($data << 8) | $key[$j];
                if (++$j >= $keyl) {
                    $j = 0;
                }
            }
            $this->bctx['p'][] = self::$parray[$i] ^ intval($data);
        }

        // encrypt the zero-string, replace P1 and P2 with the encrypted data,
        // encrypt P3 and P4 with the new P1 and P2, do it with all P-array and subkeys
        $data = "\0\0\0\0\0\0\0\0";
        for ($i = 0; $i < 18; $i += 2) {
            list($l, $r) = array_values(unpack('N*', $data = $this->encryptBlock($data)));
            $this->bctx['p'][$i    ] = $l;
            $this->bctx['p'][$i + 1] = $r;
        }
        for ($i = 0; $i < 0x400; $i += 0x100) {
            for ($j = 0; $j < 256; $j += 2) {
                list($l, $r) = array_values(unpack('N*', $data = $this->encryptBlock($data)));
                $this->bctx['sb'][$i | $j] = $l;
                $this->bctx['sb'][$i | ($j + 1)] = $r;
            }
        }
    }

    /**
     * Initialize Static Variables
     */
    protected static function initialize_static_variables()
    {
        if (is_float(self::$sbox[0x200])) {
            self::$sbox = array_map('intval', self::$sbox);
            self::$parray = array_map('intval', self::$parray);
        }

        parent::initialize_static_variables();
    }

    /**
     * bcrypt
     *
     * @param string $sha2pass
     * @param string $sha2salt
     * @access private
     * @return string
     */
    private static function bcrypt_hash($sha2pass, $sha2salt)
    {
        $p = self::$parray;
        $sbox = self::$sbox;

        $cdata = array_values(unpack('N*', 'OxychromaticBlowfishSwatDynamite'));
        $sha2pass = array_values(unpack('N*', $sha2pass));
        $sha2salt = array_values(unpack('N*', $sha2salt));

        self::expandstate($sha2salt, $sha2pass, $sbox, $p);
        for ($i = 0; $i < 64; $i++) {
            self::expand0state($sha2salt, $sbox, $p);
            self::expand0state($sha2pass, $sbox, $p);
        }

        for ($i = 0; $i < 64; $i++) {
            for ($j = 0; $j < 8; $j += 2) { // count($cdata) == 8
                list($cdata[$j], $cdata[$j + 1]) = self::encryptBlockHelperFast($cdata[$j], $cdata[$j + 1], $sbox, $p);
            }
        }

        return pack('V*', ...$cdata);
    }

    /**
     * Performs OpenSSH-style bcrypt
     *
     * @param string $pass
     * @param string $salt
     * @param int $keylen
     * @param int $rounds
     * @access public
     * @return string
     */
    public static function bcrypt_pbkdf($pass, $salt, $keylen, $rounds)
    {
        self::initialize_static_variables();

        if (PHP_INT_SIZE == 4) {
            throw new \RuntimeException('bcrypt is far too slow to be practical on 32-bit versions of PHP');
        }

        $sha2pass = hash('sha512', $pass, true);
        $results = [];
        $count = 1;
        while (32 * count($results) < $keylen) {
            $countsalt = $salt . pack('N', $count++);
            $sha2salt = hash('sha512', $countsalt, true);
            $out = $tmpout = self::bcrypt_hash($sha2pass, $sha2salt);
            for ($i = 1; $i < $rounds; $i++) {
                $sha2salt = hash('sha512', $tmpout, true);
                $tmpout = self::bcrypt_hash($sha2pass, $sha2salt);
                $out ^= $tmpout;
            }
            $results[] = $out;
        }
        $output = '';
        for ($i = 0; $i < 32; $i++) {
            foreach ($results as $result) {
                $output .= $result[$i];
            }
        }
        return substr($output, 0, $keylen);
    }

    /**
     * Key expansion without salt
     *
     * @access private
     * @param int[] $key
     * @param int[] $sbox
     * @param int[] $p
     * @see self::_bcrypt_hash()
     */
    private static function expand0state(array $key, array &$sbox, array &$p)
    {
        // expand0state is basically the same thing as this:
        //return self::expandstate(array_fill(0, 16, 0), $key);
        // but this separate function eliminates a bunch of XORs and array lookups

        $p = [
            $p[0] ^ $key[0],
            $p[1] ^ $key[1],
            $p[2] ^ $key[2],
            $p[3] ^ $key[3],
            $p[4] ^ $key[4],
            $p[5] ^ $key[5],
            $p[6] ^ $key[6],
            $p[7] ^ $key[7],
            $p[8] ^ $key[8],
            $p[9] ^ $key[9],
            $p[10] ^ $key[10],
            $p[11] ^ $key[11],
            $p[12] ^ $key[12],
            $p[13] ^ $key[13],
            $p[14] ^ $key[14],
            $p[15] ^ $key[15],
            $p[16] ^ $key[0],
            $p[17] ^ $key[1]
        ];

        // @codingStandardsIgnoreStart
        list( $p[0],  $p[1]) = self::encryptBlockHelperFast(     0,      0, $sbox, $p);
        list( $p[2],  $p[3]) = self::encryptBlockHelperFast($p[ 0], $p[ 1], $sbox, $p);
        list( $p[4],  $p[5]) = self::encryptBlockHelperFast($p[ 2], $p[ 3], $sbox, $p);
        list( $p[6],  $p[7]) = self::encryptBlockHelperFast($p[ 4], $p[ 5], $sbox, $p);
        list( $p[8],  $p[9]) = self::encryptBlockHelperFast($p[ 6], $p[ 7], $sbox, $p);
        list($p[10], $p[11]) = self::encryptBlockHelperFast($p[ 8], $p[ 9], $sbox, $p);
        list($p[12], $p[13]) = self::encryptBlockHelperFast($p[10], $p[11], $sbox, $p);
        list($p[14], $p[15]) = self::encryptBlockHelperFast($p[12], $p[13], $sbox, $p);
        list($p[16], $p[17]) = self::encryptBlockHelperFast($p[14], $p[15], $sbox, $p);
        // @codingStandardsIgnoreEnd

        list($sbox[0], $sbox[1]) = self::encryptBlockHelperFast($p[16], $p[17], $sbox, $p);
        for ($i = 2; $i < 1024; $i += 2) {
            list($sbox[$i], $sbox[$i + 1]) = self::encryptBlockHelperFast($sbox[$i - 2], $sbox[$i - 1], $sbox, $p);
        }
    }

    /**
     * Key expansion with salt
     *
     * @access private
     * @param int[] $data
     * @param int[] $key
     * @param int[] $sbox
     * @param int[] $p
     * @see self::_bcrypt_hash()
     */
    private static function expandstate(array $data, array $key, array &$sbox, array &$p)
    {
        $p = [
            $p[0] ^ $key[0],
            $p[1] ^ $key[1],
            $p[2] ^ $key[2],
            $p[3] ^ $key[3],
            $p[4] ^ $key[4],
            $p[5] ^ $key[5],
            $p[6] ^ $key[6],
            $p[7] ^ $key[7],
            $p[8] ^ $key[8],
            $p[9] ^ $key[9],
            $p[10] ^ $key[10],
            $p[11] ^ $key[11],
            $p[12] ^ $key[12],
            $p[13] ^ $key[13],
            $p[14] ^ $key[14],
            $p[15] ^ $key[15],
            $p[16] ^ $key[0],
            $p[17] ^ $key[1]
        ];

        // @codingStandardsIgnoreStart
        list( $p[0],  $p[1]) = self::encryptBlockHelperFast($data[ 0]         , $data[ 1]         , $sbox, $p);
        list( $p[2],  $p[3]) = self::encryptBlockHelperFast($data[ 2] ^ $p[ 0], $data[ 3] ^ $p[ 1], $sbox, $p);
        list( $p[4],  $p[5]) = self::encryptBlockHelperFast($data[ 4] ^ $p[ 2], $data[ 5] ^ $p[ 3], $sbox, $p);
        list( $p[6],  $p[7]) = self::encryptBlockHelperFast($data[ 6] ^ $p[ 4], $data[ 7] ^ $p[ 5], $sbox, $p);
        list( $p[8],  $p[9]) = self::encryptBlockHelperFast($data[ 8] ^ $p[ 6], $data[ 9] ^ $p[ 7], $sbox, $p);
        list($p[10], $p[11]) = self::encryptBlockHelperFast($data[10] ^ $p[ 8], $data[11] ^ $p[ 9], $sbox, $p);
        list($p[12], $p[13]) = self::encryptBlockHelperFast($data[12] ^ $p[10], $data[13] ^ $p[11], $sbox, $p);
        list($p[14], $p[15]) = self::encryptBlockHelperFast($data[14] ^ $p[12], $data[15] ^ $p[13], $sbox, $p);
        list($p[16], $p[17]) = self::encryptBlockHelperFast($data[ 0] ^ $p[14], $data[ 1] ^ $p[15], $sbox, $p);
        // @codingStandardsIgnoreEnd

        list($sbox[0], $sbox[1]) = self::encryptBlockHelperFast($data[2] ^ $p[16], $data[3] ^ $p[17], $sbox, $p);
        for ($i = 2, $j = 4; $i < 1024; $i += 2, $j = ($j + 2) % 16) { // instead of 16 maybe count($data) would be better?
            list($sbox[$i], $sbox[$i + 1]) = self::encryptBlockHelperFast($data[$j] ^ $sbox[$i - 2], $data[$j + 1] ^ $sbox[$i - 1], $sbox, $p);
        }
    }

    /**
     * Encrypts a block
     *
     * @param string $in
     * @return string
     */
    protected function encryptBlock($in)
    {
        $p = $this->bctx['p'];
        // extract($this->bctx['sb'], EXTR_PREFIX_ALL, 'sb'); // slower
        $sb = $this->bctx['sb'];

        $in = unpack('N*', $in);
        $l = $in[1];
        $r = $in[2];

        list($r, $l) = PHP_INT_SIZE == 4 ?
            self::encryptBlockHelperSlow($l, $r, $sb, $p) :
            self::encryptBlockHelperFast($l, $r, $sb, $p);

        return pack("N*", $r, $l);
    }

    /**
     * Fast helper function for block encryption
     *
     * @access private
     * @param int $x0
     * @param int $x1
     * @param int[] $sbox
     * @param int[] $p
     * @return int[]
     */
    private static function encryptBlockHelperFast($x0, $x1, array $sbox, array $p)
    {
        $x0 ^= $p[0];
        $x1 ^= ((($sbox[($x0 & 0xFF000000) >> 24] + $sbox[0x100 | (($x0 & 0xFF0000) >> 16)]) ^ $sbox[0x200 | (($x0 & 0xFF00) >> 8)]) + $sbox[0x300 | ($x0 & 0xFF)]) ^ $p[1];
        $x0 ^= ((($sbox[($x1 & 0xFF000000) >> 24] + $sbox[0x100 | (($x1 & 0xFF0000) >> 16)]) ^ $sbox[0x200 | (($x1 & 0xFF00) >> 8)]) + $sbox[0x300 | ($x1 & 0xFF)]) ^ $p[2];
        $x1 ^= ((($sbox[($x0 & 0xFF000000) >> 24] + $sbox[0x100 | (($x0 & 0xFF0000) >> 16)]) ^ $sbox[0x200 | (($x0 & 0xFF00) >> 8)]) + $sbox[0x300 | ($x0 & 0xFF)]) ^ $p[3];
        $x0 ^= ((($sbox[($x1 & 0xFF000000) >> 24] + $sbox[0x100 | (($x1 & 0xFF0000) >> 16)]) ^ $sbox[0x200 | (($x1 & 0xFF00) >> 8)]) + $sbox[0x300 | ($x1 & 0xFF)]) ^ $p[4];
        $x1 ^= ((($sbox[($x0 & 0xFF000000) >> 24] + $sbox[0x100 | (($x0 & 0xFF0000) >> 16)]) ^ $sbox[0x200 | (($x0 & 0xFF00) >> 8)]) + $sbox[0x300 | ($x0 & 0xFF)]) ^ $p[5];
        $x0 ^= ((($sbox[($x1 & 0xFF000000) >> 24] + $sbox[0x100 | (($x1 & 0xFF0000) >> 16)]) ^ $sbox[0x200 | (($x1 & 0xFF00) >> 8)]) + $sbox[0x300 | ($x1 & 0xFF)]) ^ $p[6];
        $x1 ^= ((($sbox[($x0 & 0xFF000000) >> 24] + $sbox[0x100 | (($x0 & 0xFF0000) >> 16)]) ^ $sbox[0x200 | (($x0 & 0xFF00) >> 8)]) + $sbox[0x300 | ($x0 & 0xFF)]) ^ $p[7];
        $x0 ^= ((($sbox[($x1 & 0xFF000000) >> 24] + $sbox[0x100 | (($x1 & 0xFF0000) >> 16)]) ^ $sbox[0x200 | (($x1 & 0xFF00) >> 8)]) + $sbox[0x300 | ($x1 & 0xFF)]) ^ $p[8];
        $x1 ^= ((($sbox[($x0 & 0xFF000000) >> 24] + $sbox[0x100 | (($x0 & 0xFF0000) >> 16)]) ^ $sbox[0x200 | (($x0 & 0xFF00) >> 8)]) + $sbox[0x300 | ($x0 & 0xFF)]) ^ $p[9];
        $x0 ^= ((($sbox[($x1 & 0xFF000000) >> 24] + $sbox[0x100 | (($x1 & 0xFF0000) >> 16)]) ^ $sbox[0x200 | (($x1 & 0xFF00) >> 8)]) + $sbox[0x300 | ($x1 & 0xFF)]) ^ $p[10];
        $x1 ^= ((($sbox[($x0 & 0xFF000000) >> 24] + $sbox[0x100 | (($x0 & 0xFF0000) >> 16)]) ^ $sbox[0x200 | (($x0 & 0xFF00) >> 8)]) + $sbox[0x300 | ($x0 & 0xFF)]) ^ $p[11];
        $x0 ^= ((($sbox[($x1 & 0xFF000000) >> 24] + $sbox[0x100 | (($x1 & 0xFF0000) >> 16)]) ^ $sbox[0x200 | (($x1 & 0xFF00) >> 8)]) + $sbox[0x300 | ($x1 & 0xFF)]) ^ $p[12];
        $x1 ^= ((($sbox[($x0 & 0xFF000000) >> 24] + $sbox[0x100 | (($x0 & 0xFF0000) >> 16)]) ^ $sbox[0x200 | (($x0 & 0xFF00) >> 8)]) + $sbox[0x300 | ($x0 & 0xFF)]) ^ $p[13];
        $x0 ^= ((($sbox[($x1 & 0xFF000000) >> 24] + $sbox[0x100 | (($x1 & 0xFF0000) >> 16)]) ^ $sbox[0x200 | (($x1 & 0xFF00) >> 8)]) + $sbox[0x300 | ($x1 & 0xFF)]) ^ $p[14];
        $x1 ^= ((($sbox[($x0 & 0xFF000000) >> 24] + $sbox[0x100 | (($x0 & 0xFF0000) >> 16)]) ^ $sbox[0x200 | (($x0 & 0xFF00) >> 8)]) + $sbox[0x300 | ($x0 & 0xFF)]) ^ $p[15];
        $x0 ^= ((($sbox[($x1 & 0xFF000000) >> 24] + $sbox[0x100 | (($x1 & 0xFF0000) >> 16)]) ^ $sbox[0x200 | (($x1 & 0xFF00) >> 8)]) + $sbox[0x300 | ($x1 & 0xFF)]) ^ $p[16];

        return [$x1 & 0xFFFFFFFF ^ $p[17], $x0 & 0xFFFFFFFF];
    }

    /**
     * Slow helper function for block encryption
     *
     * @access private
     * @param int $x0
     * @param int $x1
     * @param int[] $sbox
     * @param int[] $p
     * @return int[]
     */
    private static function encryptBlockHelperSlow($x0, $x1, array $sbox, array $p)
    {
        // -16777216 == intval(0xFF000000) on 32-bit PHP installs
        $x0 ^= $p[0];
        $x1 ^= self::safe_intval((self::safe_intval($sbox[(($x0 & -16777216) >> 24) & 0xFF] + $sbox[0x100 | (($x0 & 0xFF0000) >> 16)]) ^ $sbox[0x200 | (($x0 & 0xFF00) >> 8)]) + $sbox[0x300 | ($x0 & 0xFF)]) ^ $p[1];
        $x0 ^= self::safe_intval((self::safe_intval($sbox[(($x1 & -16777216) >> 24) & 0xFF] + $sbox[0x100 | (($x1 & 0xFF0000) >> 16)]) ^ $sbox[0x200 | (($x1 & 0xFF00) >> 8)]) + $sbox[0x300 | ($x1 & 0xFF)]) ^ $p[2];
        $x1 ^= self::safe_intval((self::safe_intval($sbox[(($x0 & -16777216) >> 24) & 0xFF] + $sbox[0x100 | (($x0 & 0xFF0000) >> 16)]) ^ $sbox[0x200 | (($x0 & 0xFF00) >> 8)]) + $sbox[0x300 | ($x0 & 0xFF)]) ^ $p[3];
        $x0 ^= self::safe_intval((self::safe_intval($sbox[(($x1 & -16777216) >> 24) & 0xFF] + $sbox[0x100 | (($x1 & 0xFF0000) >> 16)]) ^ $sbox[0x200 | (($x1 & 0xFF00) >> 8)]) + $sbox[0x300 | ($x1 & 0xFF)]) ^ $p[4];
        $x1 ^= self::safe_intval((self::safe_intval($sbox[(($x0 & -16777216) >> 24) & 0xFF] + $sbox[0x100 | (($x0 & 0xFF0000) >> 16)]) ^ $sbox[0x200 | (($x0 & 0xFF00) >> 8)]) + $sbox[0x300 | ($x0 & 0xFF)]) ^ $p[5];
        $x0 ^= self::safe_intval((self::safe_intval($sbox[(($x1 & -16777216) >> 24) & 0xFF] + $sbox[0x100 | (($x1 & 0xFF0000) >> 16)]) ^ $sbox[0x200 | (($x1 & 0xFF00) >> 8)]) + $sbox[0x300 | ($x1 & 0xFF)]) ^ $p[6];
        $x1 ^= self::safe_intval((self::safe_intval($sbox[(($x0 & -16777216) >> 24) & 0xFF] + $sbox[0x100 | (($x0 & 0xFF0000) >> 16)]) ^ $sbox[0x200 | (($x0 & 0xFF00) >> 8)]) + $sbox[0x300 | ($x0 & 0xFF)]) ^ $p[7];
        $x0 ^= self::safe_intval((self::safe_intval($sbox[(($x1 & -16777216) >> 24) & 0xFF] + $sbox[0x100 | (($x1 & 0xFF0000) >> 16)]) ^ $sbox[0x200 | (($x1 & 0xFF00) >> 8)]) + $sbox[0x300 | ($x1 & 0xFF)]) ^ $p[8];
        $x1 ^= self::safe_intval((self::safe_intval($sbox[(($x0 & -16777216) >> 24) & 0xFF] + $sbox[0x100 | (($x0 & 0xFF0000) >> 16)]) ^ $sbox[0x200 | (($x0 & 0xFF00) >> 8)]) + $sbox[0x300 | ($x0 & 0xFF)]) ^ $p[9];
        $x0 ^= self::safe_intval((self::safe_intval($sbox[(($x1 & -16777216) >> 24) & 0xFF] + $sbox[0x100 | (($x1 & 0xFF0000) >> 16)]) ^ $sbox[0x200 | (($x1 & 0xFF00) >> 8)]) + $sbox[0x300 | ($x1 & 0xFF)]) ^ $p[10];
        $x1 ^= self::safe_intval((self::safe_intval($sbox[(($x0 & -16777216) >> 24) & 0xFF] + $sbox[0x100 | (($x0 & 0xFF0000) >> 16)]) ^ $sbox[0x200 | (($x0 & 0xFF00) >> 8)]) + $sbox[0x300 | ($x0 & 0xFF)]) ^ $p[11];
        $x0 ^= self::safe_intval((self::safe_intval($sbox[(($x1 & -16777216) >> 24) & 0xFF] + $sbox[0x100 | (($x1 & 0xFF0000) >> 16)]) ^ $sbox[0x200 | (($x1 & 0xFF00) >> 8)]) + $sbox[0x300 | ($x1 & 0xFF)]) ^ $p[12];
        $x1 ^= self::safe_intval((self::safe_intval($sbox[(($x0 & -16777216) >> 24) & 0xFF] + $sbox[0x100 | (($x0 & 0xFF0000) >> 16)]) ^ $sbox[0x200 | (($x0 & 0xFF00) >> 8)]) + $sbox[0x300 | ($x0 & 0xFF)]) ^ $p[13];
        $x0 ^= self::safe_intval((self::safe_intval($sbox[(($x1 & -16777216) >> 24) & 0xFF] + $sbox[0x100 | (($x1 & 0xFF0000) >> 16)]) ^ $sbox[0x200 | (($x1 & 0xFF00) >> 8)]) + $sbox[0x300 | ($x1 & 0xFF)]) ^ $p[14];
        $x1 ^= self::safe_intval((self::safe_intval($sbox[(($x0 & -16777216) >> 24) & 0xFF] + $sbox[0x100 | (($x0 & 0xFF0000) >> 16)]) ^ $sbox[0x200 | (($x0 & 0xFF00) >> 8)]) + $sbox[0x300 | ($x0 & 0xFF)]) ^ $p[15];
        $x0 ^= self::safe_intval((self::safe_intval($sbox[(($x1 & -16777216) >> 24) & 0xFF] + $sbox[0x100 | (($x1 & 0xFF0000) >> 16)]) ^ $sbox[0x200 | (($x1 & 0xFF00) >> 8)]) + $sbox[0x300 | ($x1 & 0xFF)]) ^ $p[16];

        return [$x1 ^ $p[17], $x0];
    }

    /**
     * Decrypts a block
     *
     * @param string $in
     * @return string
     */
    protected function decryptBlock($in)
    {
        $p = $this->bctx['p'];
        $sb = $this->bctx['sb'];

        $in = unpack('N*', $in);
        $l = $in[1];
        $r = $in[2];

        for ($i = 17; $i > 2; $i -= 2) {
            $l ^= $p[$i];
            $r ^= self::safe_intval((self::safe_intval($sb[$l >> 24 & 0xff] + $sb[0x100 + ($l >> 16 & 0xff)]) ^
                  $sb[0x200 + ($l >>  8 & 0xff)]) +
                  $sb[0x300 + ($l       & 0xff)]);

            $r ^= $p[$i - 1];
            $l ^= self::safe_intval((self::safe_intval($sb[$r >> 24 & 0xff] + $sb[0x100 + ($r >> 16 & 0xff)]) ^
                  $sb[0x200 + ($r >>  8 & 0xff)]) +
                  $sb[0x300 + ($r       & 0xff)]);
        }
        return pack('N*', $r ^ $p[0], $l ^ $p[1]);
    }

    /**
     * Setup the performance-optimized function for de/encrypt()
     *
     * @see Common\SymmetricKey::_setupInlineCrypt()
     */
    protected function setupInlineCrypt()
    {
        $p = $this->bctx['p'];
        $init_crypt = '
            static $sb;
            if (!$sb) {
                $sb = $this->bctx["sb"];
            }
        ';

        $safeint = self::safe_intval_inline();

        // Generating encrypt code:
        $encrypt_block = '
            $in = unpack("N*", $in);
            $l = $in[1];
            $r = $in[2];
        ';
        for ($i = 0; $i < 16; $i += 2) {
            $encrypt_block .= '
                $l^= ' . $p[$i] . ';
                $r^= ' . sprintf($safeint, '(' . sprintf($safeint, '$sb[$l >> 24 & 0xff] + $sb[0x100 + ($l >> 16 & 0xff)]') . ' ^
                      $sb[0x200 + ($l >>  8 & 0xff)]) +
                      $sb[0x300 + ($l       & 0xff)]') . ';

                $r^= ' . $p[$i + 1] . ';
                $l^= ' . sprintf($safeint, '(' . sprintf($safeint, '$sb[$r >> 24 & 0xff] + $sb[0x100 + ($r >> 16 & 0xff)]') . '  ^
                      $sb[0x200 + ($r >>  8 & 0xff)]) +
                      $sb[0x300 + ($r       & 0xff)]') . ';
            ';
        }
        $encrypt_block .= '
            $in = pack("N*",
                $r ^ ' . $p[17] . ',
                $l ^ ' . $p[16] . '
            );
        ';
         // Generating decrypt code:
        $decrypt_block = '
            $in = unpack("N*", $in);
            $l = $in[1];
            $r = $in[2];
        ';

        for ($i = 17; $i > 2; $i -= 2) {
            $decrypt_block .= '
                $l^= ' . $p[$i] . ';
                $r^= ' . sprintf($safeint, '(' . sprintf($safeint, '$sb[$l >> 24 & 0xff] + $sb[0x100 + ($l >> 16 & 0xff)]') . ' ^
                      $sb[0x200 + ($l >>  8 & 0xff)]) +
                      $sb[0x300 + ($l       & 0xff)]') . ';

                $r^= ' . $p[$i - 1] . ';
                $l^= ' . sprintf($safeint, '(' . sprintf($safeint, '$sb[$r >> 24 & 0xff] + $sb[0x100 + ($r >> 16 & 0xff)]') . ' ^
                      $sb[0x200 + ($r >>  8 & 0xff)]) +
                      $sb[0x300 + ($r       & 0xff)]') . ';
            ';
        }

        $decrypt_block .= '
            $in = pack("N*",
                $r ^ ' . $p[0] . ',
                $l ^ ' . $p[1] . '
            );
        ';

        $this->inline_crypt = $this->createInlineCryptFunction(
            [
               'init_crypt'    => $init_crypt,
               'init_encrypt'  => '',
               'init_decrypt'  => '',
               'encrypt_block' => $encrypt_block,
               'decrypt_block' => $decrypt_block
            ]
        );
    }
}
<?php

/**
 * Pure-PHP implementation of ChaCha20.
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2019 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\Crypt;

use phpseclib3\Exception\BadDecryptionException;
use phpseclib3\Exception\InsufficientSetupException;

/**
 * Pure-PHP implementation of ChaCha20.
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
class ChaCha20 extends Salsa20
{
    /**
     * The OpenSSL specific name of the cipher
     *
     * @var string
     */
    protected $cipher_name_openssl = 'chacha20';

    /**
     * Test for engine validity
     *
     * This is mainly just a wrapper to set things up for \phpseclib3\Crypt\Common\SymmetricKey::isValidEngine()
     *
     * @see \phpseclib3\Crypt\Common\SymmetricKey::__construct()
     * @param int $engine
     * @return bool
     */
    protected function isValidEngineHelper($engine)
    {
        switch ($engine) {
            case self::ENGINE_LIBSODIUM:
                // PHP 7.2.0 (30 Nov 2017) added support for libsodium

                // we could probably make it so that if $this->counter == 0 then the first block would be done with either OpenSSL
                // or PHP and then subsequent blocks would then be done with libsodium but idk - it's not a high priority atm

                // we could also make it so that if $this->counter == 0 and $this->continuousBuffer then do the first string
                // with libsodium and subsequent strings with openssl or pure-PHP but again not a high priority
                return function_exists('sodium_crypto_aead_chacha20poly1305_ietf_encrypt') &&
                       $this->key_length == 32 &&
                       (($this->usePoly1305 && !isset($this->poly1305Key) && $this->counter == 0) || $this->counter == 1) &&
                       !$this->continuousBuffer;
            case self::ENGINE_OPENSSL:
                // OpenSSL 1.1.0 (released 25 Aug 2016) added support for chacha20.
                // PHP didn't support OpenSSL 1.1.0 until 7.0.19 (11 May 2017)

                // if you attempt to provide openssl with a 128 bit key (as opposed to a 256 bit key) openssl will null
                // pad the key to 256 bits and still use the expansion constant for 256-bit keys. the fact that
                // openssl treats the IV as both the counter and nonce, however, let's us use openssl in continuous mode
                // whereas libsodium does not
                if ($this->key_length != 32) {
                    return false;
                }
        }

        return parent::isValidEngineHelper($engine);
    }

    /**
     * Encrypts a message.
     *
     * @see \phpseclib3\Crypt\Common\SymmetricKey::decrypt()
     * @see self::crypt()
     * @param string $plaintext
     * @return string $ciphertext
     */
    public function encrypt($plaintext)
    {
        $this->setup();

        if ($this->engine == self::ENGINE_LIBSODIUM) {
            return $this->encrypt_with_libsodium($plaintext);
        }

        return parent::encrypt($plaintext);
    }

    /**
     * Decrypts a message.
     *
     * $this->decrypt($this->encrypt($plaintext)) == $this->encrypt($this->encrypt($plaintext)).
     * At least if the continuous buffer is disabled.
     *
     * @see \phpseclib3\Crypt\Common\SymmetricKey::encrypt()
     * @see self::crypt()
     * @param string $ciphertext
     * @return string $plaintext
     */
    public function decrypt($ciphertext)
    {
        $this->setup();

        if ($this->engine == self::ENGINE_LIBSODIUM) {
            return $this->decrypt_with_libsodium($ciphertext);
        }

        return parent::decrypt($ciphertext);
    }

    /**
     * Encrypts a message with libsodium
     *
     * @see self::encrypt()
     * @param string $plaintext
     * @return string $text
     */
    private function encrypt_with_libsodium($plaintext)
    {
        $params = [$plaintext, $this->aad, $this->nonce, $this->key];
        $ciphertext = strlen($this->nonce) == 8 ?
            sodium_crypto_aead_chacha20poly1305_encrypt(...$params) :
            sodium_crypto_aead_chacha20poly1305_ietf_encrypt(...$params);
        if (!$this->usePoly1305) {
            return substr($ciphertext, 0, strlen($plaintext));
        }

        $newciphertext = substr($ciphertext, 0, strlen($plaintext));

        $this->newtag = $this->usingGeneratedPoly1305Key && strlen($this->nonce) == 12 ?
            substr($ciphertext, strlen($plaintext)) :
            $this->poly1305($newciphertext);

        return $newciphertext;
    }

    /**
     * Decrypts a message with libsodium
     *
     * @see self::decrypt()
     * @param string $ciphertext
     * @return string $text
     */
    private function decrypt_with_libsodium($ciphertext)
    {
        $params = [$ciphertext, $this->aad, $this->nonce, $this->key];

        if (isset($this->poly1305Key)) {
            if ($this->oldtag === false) {
                throw new InsufficientSetupException('Authentication Tag has not been set');
            }
            if ($this->usingGeneratedPoly1305Key && strlen($this->nonce) == 12) {
                $plaintext = sodium_crypto_aead_chacha20poly1305_ietf_decrypt(...$params);
                $this->oldtag = false;
                if ($plaintext === false) {
                    throw new BadDecryptionException('Derived authentication tag and supplied authentication tag do not match');
                }
                return $plaintext;
            }
            $newtag = $this->poly1305($ciphertext);
            if ($this->oldtag != substr($newtag, 0, strlen($this->oldtag))) {
                $this->oldtag = false;
                throw new BadDecryptionException('Derived authentication tag and supplied authentication tag do not match');
            }
            $this->oldtag = false;
        }

        $plaintext = strlen($this->nonce) == 8 ?
            sodium_crypto_aead_chacha20poly1305_encrypt(...$params) :
            sodium_crypto_aead_chacha20poly1305_ietf_encrypt(...$params);

        return substr($plaintext, 0, strlen($ciphertext));
    }

    /**
     * Sets the nonce.
     *
     * @param string $nonce
     */
    public function setNonce($nonce)
    {
        if (!is_string($nonce)) {
            throw new \UnexpectedValueException('The nonce should be a string');
        }

        /*
          from https://tools.ietf.org/html/rfc7539#page-7

          "Note also that the original ChaCha had a 64-bit nonce and 64-bit
           block count.  We have modified this here to be more consistent with
           recommendations in Section 3.2 of [RFC5116]."
         */
        switch (strlen($nonce)) {
            case 8:  // 64 bits
            case 12: // 96 bits
                break;
            default:
                throw new \LengthException('Nonce of size ' . strlen($nonce) . ' not supported by this algorithm. Only 64-bit nonces or 96-bit nonces are supported');
        }

        $this->nonce = $nonce;
        $this->changed = true;
        $this->setEngine();
    }

    /**
     * Setup the self::ENGINE_INTERNAL $engine
     *
     * (re)init, if necessary, the internal cipher $engine
     *
     * _setup() will be called each time if $changed === true
     * typically this happens when using one or more of following public methods:
     *
     * - setKey()
     *
     * - setNonce()
     *
     * - First run of encrypt() / decrypt() with no init-settings
     *
     * @see self::setKey()
     * @see self::setNonce()
     * @see self::disableContinuousBuffer()
     */
    protected function setup()
    {
        if (!$this->changed) {
            return;
        }

        $this->enbuffer = $this->debuffer = ['ciphertext' => '', 'counter' => $this->counter];

        $this->changed = $this->nonIVChanged = false;

        if ($this->nonce === false) {
            throw new InsufficientSetupException('No nonce has been defined');
        }

        if ($this->key === false) {
            throw new InsufficientSetupException('No key has been defined');
        }

        if ($this->usePoly1305 && !isset($this->poly1305Key)) {
            $this->usingGeneratedPoly1305Key = true;
            if ($this->engine == self::ENGINE_LIBSODIUM) {
                return;
            }
            $this->createPoly1305Key();
        }

        $key = $this->key;
        if (strlen($key) == 16) {
            $constant = 'expand 16-byte k';
            $key .= $key;
        } else {
            $constant = 'expand 32-byte k';
        }

        $this->p1 = $constant . $key;
        $this->p2 = $this->nonce;
        if (strlen($this->nonce) == 8) {
            $this->p2 = "\0\0\0\0" . $this->p2;
        }
    }

    /**
     * The quarterround function
     *
     * @param int $a
     * @param int $b
     * @param int $c
     * @param int $d
     */
    protected static function quarterRound(&$a, &$b, &$c, &$d)
    {
        // in https://datatracker.ietf.org/doc/html/rfc7539#section-2.1 the addition,
        // xor'ing and rotation are all on the same line so i'm keeping it on the same
        // line here as well
        // @codingStandardsIgnoreStart
        $a+= $b; $d = self::leftRotate(intval($d) ^ intval($a), 16);
        $c+= $d; $b = self::leftRotate(intval($b) ^ intval($c), 12);
        $a+= $b; $d = self::leftRotate(intval($d) ^ intval($a), 8);
        $c+= $d; $b = self::leftRotate(intval($b) ^ intval($c), 7);
        // @codingStandardsIgnoreEnd
    }

    /**
     * The doubleround function
     *
     * @param int $x0 (by reference)
     * @param int $x1 (by reference)
     * @param int $x2 (by reference)
     * @param int $x3 (by reference)
     * @param int $x4 (by reference)
     * @param int $x5 (by reference)
     * @param int $x6 (by reference)
     * @param int $x7 (by reference)
     * @param int $x8 (by reference)
     * @param int $x9 (by reference)
     * @param int $x10 (by reference)
     * @param int $x11 (by reference)
     * @param int $x12 (by reference)
     * @param int $x13 (by reference)
     * @param int $x14 (by reference)
     * @param int $x15 (by reference)
     */
    protected static function doubleRound(&$x0, &$x1, &$x2, &$x3, &$x4, &$x5, &$x6, &$x7, &$x8, &$x9, &$x10, &$x11, &$x12, &$x13, &$x14, &$x15)
    {
        // columnRound
        static::quarterRound($x0, $x4, $x8, $x12);
        static::quarterRound($x1, $x5, $x9, $x13);
        static::quarterRound($x2, $x6, $x10, $x14);
        static::quarterRound($x3, $x7, $x11, $x15);
        // rowRound
        static::quarterRound($x0, $x5, $x10, $x15);
        static::quarterRound($x1, $x6, $x11, $x12);
        static::quarterRound($x2, $x7, $x8, $x13);
        static::quarterRound($x3, $x4, $x9, $x14);
    }

    /**
     * The Salsa20 hash function function
     *
     * On my laptop this loop unrolled / function dereferenced version of parent::salsa20 encrypts 1mb of text in
     * 0.65s vs the 0.85s that it takes with the parent method.
     *
     * If we were free to assume that the host OS would always be 64-bits then the if condition in leftRotate could
     * be eliminated and we could knock this done to 0.60s.
     *
     * For comparison purposes, RC4 takes 0.16s and AES in CTR mode with the Eval engine takes 0.48s.
     * AES in CTR mode with the PHP engine takes 1.19s. Salsa20 / ChaCha20 do not benefit as much from the Eval
     * approach due to the fact that there are a lot less variables to de-reference, fewer loops to unroll, etc
     *
     * @param string $x
     */
    protected static function salsa20($x)
    {
        list(, $x0, $x1, $x2, $x3, $x4, $x5, $x6, $x7, $x8, $x9, $x10, $x11, $x12, $x13, $x14, $x15) = unpack('V*', $x);
        $z0 = $x0;
        $z1 = $x1;
        $z2 = $x2;
        $z3 = $x3;
        $z4 = $x4;
        $z5 = $x5;
        $z6 = $x6;
        $z7 = $x7;
        $z8 = $x8;
        $z9 = $x9;
        $z10 = $x10;
        $z11 = $x11;
        $z12 = $x12;
        $z13 = $x13;
        $z14 = $x14;
        $z15 = $x15;

        // @codingStandardsIgnoreStart
        // columnRound
        $x0+= $x4; $x12 = self::leftRotate(intval($x12) ^ intval($x0), 16);
        $x8+= $x12; $x4 = self::leftRotate(intval($x4) ^ intval($x8), 12);
        $x0+= $x4; $x12 = self::leftRotate(intval($x12) ^ intval($x0), 8);
        $x8+= $x12; $x4 = self::leftRotate(intval($x4) ^ intval($x8), 7);

        $x1+= $x5; $x13 = self::leftRotate(intval($x13) ^ intval($x1), 16);
        $x9+= $x13; $x5 = self::leftRotate(intval($x5) ^ intval($x9), 12);
        $x1+= $x5; $x13 = self::leftRotate(intval($x13) ^ intval($x1), 8);
        $x9+= $x13; $x5 = self::leftRotate(intval($x5) ^ intval($x9), 7);

        $x2+= $x6; $x14 = self::leftRotate(intval($x14) ^ intval($x2), 16);
        $x10+= $x14; $x6 = self::leftRotate(intval($x6) ^ intval($x10), 12);
        $x2+= $x6; $x14 = self::leftRotate(intval($x14) ^ intval($x2), 8);
        $x10+= $x14; $x6 = self::leftRotate(intval($x6) ^ intval($x10), 7);

        $x3+= $x7; $x15 = self::leftRotate(intval($x15) ^ intval($x3), 16);
        $x11+= $x15; $x7 = self::leftRotate(intval($x7) ^ intval($x11), 12);
        $x3+= $x7; $x15 = self::leftRotate(intval($x15) ^ intval($x3), 8);
        $x11+= $x15; $x7 = self::leftRotate(intval($x7) ^ intval($x11), 7);

        // rowRound
        $x0+= $x5; $x15 = self::leftRotate(intval($x15) ^ intval($x0), 16);
        $x10+= $x15; $x5 = self::leftRotate(intval($x5) ^ intval($x10), 12);
        $x0+= $x5; $x15 = self::leftRotate(intval($x15) ^ intval($x0), 8);
        $x10+= $x15; $x5 = self::leftRotate(intval($x5) ^ intval($x10), 7);

        $x1+= $x6; $x12 = self::leftRotate(intval($x12) ^ intval($x1), 16);
        $x11+= $x12; $x6 = self::leftRotate(intval($x6) ^ intval($x11), 12);
        $x1+= $x6; $x12 = self::leftRotate(intval($x12) ^ intval($x1), 8);
        $x11+= $x12; $x6 = self::leftRotate(intval($x6) ^ intval($x11), 7);

        $x2+= $x7; $x13 = self::leftRotate(intval($x13) ^ intval($x2), 16);
        $x8+= $x13; $x7 = self::leftRotate(intval($x7) ^ intval($x8), 12);
        $x2+= $x7; $x13 = self::leftRotate(intval($x13) ^ intval($x2), 8);
        $x8+= $x13; $x7 = self::leftRotate(intval($x7) ^ intval($x8), 7);

        $x3+= $x4; $x14 = self::leftRotate(intval($x14) ^ intval($x3), 16);
        $x9+= $x14; $x4 = self::leftRotate(intval($x4) ^ intval($x9), 12);
        $x3+= $x4; $x14 = self::leftRotate(intval($x14) ^ intval($x3), 8);
        $x9+= $x14; $x4 = self::leftRotate(intval($x4) ^ intval($x9), 7);

        // columnRound
        $x0+= $x4; $x12 = self::leftRotate(intval($x12) ^ intval($x0), 16);
        $x8+= $x12; $x4 = self::leftRotate(intval($x4) ^ intval($x8), 12);
        $x0+= $x4; $x12 = self::leftRotate(intval($x12) ^ intval($x0), 8);
        $x8+= $x12; $x4 = self::leftRotate(intval($x4) ^ intval($x8), 7);

        $x1+= $x5; $x13 = self::leftRotate(intval($x13) ^ intval($x1), 16);
        $x9+= $x13; $x5 = self::leftRotate(intval($x5) ^ intval($x9), 12);
        $x1+= $x5; $x13 = self::leftRotate(intval($x13) ^ intval($x1), 8);
        $x9+= $x13; $x5 = self::leftRotate(intval($x5) ^ intval($x9), 7);

        $x2+= $x6; $x14 = self::leftRotate(intval($x14) ^ intval($x2), 16);
        $x10+= $x14; $x6 = self::leftRotate(intval($x6) ^ intval($x10), 12);
        $x2+= $x6; $x14 = self::leftRotate(intval($x14) ^ intval($x2), 8);
        $x10+= $x14; $x6 = self::leftRotate(intval($x6) ^ intval($x10), 7);

        $x3+= $x7; $x15 = self::leftRotate(intval($x15) ^ intval($x3), 16);
        $x11+= $x15; $x7 = self::leftRotate(intval($x7) ^ intval($x11), 12);
        $x3+= $x7; $x15 = self::leftRotate(intval($x15) ^ intval($x3), 8);
        $x11+= $x15; $x7 = self::leftRotate(intval($x7) ^ intval($x11), 7);

        // rowRound
        $x0+= $x5; $x15 = self::leftRotate(intval($x15) ^ intval($x0), 16);
        $x10+= $x15; $x5 = self::leftRotate(intval($x5) ^ intval($x10), 12);
        $x0+= $x5; $x15 = self::leftRotate(intval($x15) ^ intval($x0), 8);
        $x10+= $x15; $x5 = self::leftRotate(intval($x5) ^ intval($x10), 7);

        $x1+= $x6; $x12 = self::leftRotate(intval($x12) ^ intval($x1), 16);
        $x11+= $x12; $x6 = self::leftRotate(intval($x6) ^ intval($x11), 12);
        $x1+= $x6; $x12 = self::leftRotate(intval($x12) ^ intval($x1), 8);
        $x11+= $x12; $x6 = self::leftRotate(intval($x6) ^ intval($x11), 7);

        $x2+= $x7; $x13 = self::leftRotate(intval($x13) ^ intval($x2), 16);
        $x8+= $x13; $x7 = self::leftRotate(intval($x7) ^ intval($x8), 12);
        $x2+= $x7; $x13 = self::leftRotate(intval($x13) ^ intval($x2), 8);
        $x8+= $x13; $x7 = self::leftRotate(intval($x7) ^ intval($x8), 7);

        $x3+= $x4; $x14 = self::leftRotate(intval($x14) ^ intval($x3), 16);
        $x9+= $x14; $x4 = self::leftRotate(intval($x4) ^ intval($x9), 12);
        $x3+= $x4; $x14 = self::leftRotate(intval($x14) ^ intval($x3), 8);
        $x9+= $x14; $x4 = self::leftRotate(intval($x4) ^ intval($x9), 7);

        // columnRound
        $x0+= $x4; $x12 = self::leftRotate(intval($x12) ^ intval($x0), 16);
        $x8+= $x12; $x4 = self::leftRotate(intval($x4) ^ intval($x8), 12);
        $x0+= $x4; $x12 = self::leftRotate(intval($x12) ^ intval($x0), 8);
        $x8+= $x12; $x4 = self::leftRotate(intval($x4) ^ intval($x8), 7);

        $x1+= $x5; $x13 = self::leftRotate(intval($x13) ^ intval($x1), 16);
        $x9+= $x13; $x5 = self::leftRotate(intval($x5) ^ intval($x9), 12);
        $x1+= $x5; $x13 = self::leftRotate(intval($x13) ^ intval($x1), 8);
        $x9+= $x13; $x5 = self::leftRotate(intval($x5) ^ intval($x9), 7);

        $x2+= $x6; $x14 = self::leftRotate(intval($x14) ^ intval($x2), 16);
        $x10+= $x14; $x6 = self::leftRotate(intval($x6) ^ intval($x10), 12);
        $x2+= $x6; $x14 = self::leftRotate(intval($x14) ^ intval($x2), 8);
        $x10+= $x14; $x6 = self::leftRotate(intval($x6) ^ intval($x10), 7);

        $x3+= $x7; $x15 = self::leftRotate(intval($x15) ^ intval($x3), 16);
        $x11+= $x15; $x7 = self::leftRotate(intval($x7) ^ intval($x11), 12);
        $x3+= $x7; $x15 = self::leftRotate(intval($x15) ^ intval($x3), 8);
        $x11+= $x15; $x7 = self::leftRotate(intval($x7) ^ intval($x11), 7);

        // rowRound
        $x0+= $x5; $x15 = self::leftRotate(intval($x15) ^ intval($x0), 16);
        $x10+= $x15; $x5 = self::leftRotate(intval($x5) ^ intval($x10), 12);
        $x0+= $x5; $x15 = self::leftRotate(intval($x15) ^ intval($x0), 8);
        $x10+= $x15; $x5 = self::leftRotate(intval($x5) ^ intval($x10), 7);

        $x1+= $x6; $x12 = self::leftRotate(intval($x12) ^ intval($x1), 16);
        $x11+= $x12; $x6 = self::leftRotate(intval($x6) ^ intval($x11), 12);
        $x1+= $x6; $x12 = self::leftRotate(intval($x12) ^ intval($x1), 8);
        $x11+= $x12; $x6 = self::leftRotate(intval($x6) ^ intval($x11), 7);

        $x2+= $x7; $x13 = self::leftRotate(intval($x13) ^ intval($x2), 16);
        $x8+= $x13; $x7 = self::leftRotate(intval($x7) ^ intval($x8), 12);
        $x2+= $x7; $x13 = self::leftRotate(intval($x13) ^ intval($x2), 8);
        $x8+= $x13; $x7 = self::leftRotate(intval($x7) ^ intval($x8), 7);

        $x3+= $x4; $x14 = self::leftRotate(intval($x14) ^ intval($x3), 16);
        $x9+= $x14; $x4 = self::leftRotate(intval($x4) ^ intval($x9), 12);
        $x3+= $x4; $x14 = self::leftRotate(intval($x14) ^ intval($x3), 8);
        $x9+= $x14; $x4 = self::leftRotate(intval($x4) ^ intval($x9), 7);

        // columnRound
        $x0+= $x4; $x12 = self::leftRotate(intval($x12) ^ intval($x0), 16);
        $x8+= $x12; $x4 = self::leftRotate(intval($x4) ^ intval($x8), 12);
        $x0+= $x4; $x12 = self::leftRotate(intval($x12) ^ intval($x0), 8);
        $x8+= $x12; $x4 = self::leftRotate(intval($x4) ^ intval($x8), 7);

        $x1+= $x5; $x13 = self::leftRotate(intval($x13) ^ intval($x1), 16);
        $x9+= $x13; $x5 = self::leftRotate(intval($x5) ^ intval($x9), 12);
        $x1+= $x5; $x13 = self::leftRotate(intval($x13) ^ intval($x1), 8);
        $x9+= $x13; $x5 = self::leftRotate(intval($x5) ^ intval($x9), 7);

        $x2+= $x6; $x14 = self::leftRotate(intval($x14) ^ intval($x2), 16);
        $x10+= $x14; $x6 = self::leftRotate(intval($x6) ^ intval($x10), 12);
        $x2+= $x6; $x14 = self::leftRotate(intval($x14) ^ intval($x2), 8);
        $x10+= $x14; $x6 = self::leftRotate(intval($x6) ^ intval($x10), 7);

        $x3+= $x7; $x15 = self::leftRotate(intval($x15) ^ intval($x3), 16);
        $x11+= $x15; $x7 = self::leftRotate(intval($x7) ^ intval($x11), 12);
        $x3+= $x7; $x15 = self::leftRotate(intval($x15) ^ intval($x3), 8);
        $x11+= $x15; $x7 = self::leftRotate(intval($x7) ^ intval($x11), 7);

        // rowRound
        $x0+= $x5; $x15 = self::leftRotate(intval($x15) ^ intval($x0), 16);
        $x10+= $x15; $x5 = self::leftRotate(intval($x5) ^ intval($x10), 12);
        $x0+= $x5; $x15 = self::leftRotate(intval($x15) ^ intval($x0), 8);
        $x10+= $x15; $x5 = self::leftRotate(intval($x5) ^ intval($x10), 7);

        $x1+= $x6; $x12 = self::leftRotate(intval($x12) ^ intval($x1), 16);
        $x11+= $x12; $x6 = self::leftRotate(intval($x6) ^ intval($x11), 12);
        $x1+= $x6; $x12 = self::leftRotate(intval($x12) ^ intval($x1), 8);
        $x11+= $x12; $x6 = self::leftRotate(intval($x6) ^ intval($x11), 7);

        $x2+= $x7; $x13 = self::leftRotate(intval($x13) ^ intval($x2), 16);
        $x8+= $x13; $x7 = self::leftRotate(intval($x7) ^ intval($x8), 12);
        $x2+= $x7; $x13 = self::leftRotate(intval($x13) ^ intval($x2), 8);
        $x8+= $x13; $x7 = self::leftRotate(intval($x7) ^ intval($x8), 7);

        $x3+= $x4; $x14 = self::leftRotate(intval($x14) ^ intval($x3), 16);
        $x9+= $x14; $x4 = self::leftRotate(intval($x4) ^ intval($x9), 12);
        $x3+= $x4; $x14 = self::leftRotate(intval($x14) ^ intval($x3), 8);
        $x9+= $x14; $x4 = self::leftRotate(intval($x4) ^ intval($x9), 7);

        // columnRound
        $x0+= $x4; $x12 = self::leftRotate(intval($x12) ^ intval($x0), 16);
        $x8+= $x12; $x4 = self::leftRotate(intval($x4) ^ intval($x8), 12);
        $x0+= $x4; $x12 = self::leftRotate(intval($x12) ^ intval($x0), 8);
        $x8+= $x12; $x4 = self::leftRotate(intval($x4) ^ intval($x8), 7);

        $x1+= $x5; $x13 = self::leftRotate(intval($x13) ^ intval($x1), 16);
        $x9+= $x13; $x5 = self::leftRotate(intval($x5) ^ intval($x9), 12);
        $x1+= $x5; $x13 = self::leftRotate(intval($x13) ^ intval($x1), 8);
        $x9+= $x13; $x5 = self::leftRotate(intval($x5) ^ intval($x9), 7);

        $x2+= $x6; $x14 = self::leftRotate(intval($x14) ^ intval($x2), 16);
        $x10+= $x14; $x6 = self::leftRotate(intval($x6) ^ intval($x10), 12);
        $x2+= $x6; $x14 = self::leftRotate(intval($x14) ^ intval($x2), 8);
        $x10+= $x14; $x6 = self::leftRotate(intval($x6) ^ intval($x10), 7);

        $x3+= $x7; $x15 = self::leftRotate(intval($x15) ^ intval($x3), 16);
        $x11+= $x15; $x7 = self::leftRotate(intval($x7) ^ intval($x11), 12);
        $x3+= $x7; $x15 = self::leftRotate(intval($x15) ^ intval($x3), 8);
        $x11+= $x15; $x7 = self::leftRotate(intval($x7) ^ intval($x11), 7);

        // rowRound
        $x0+= $x5; $x15 = self::leftRotate(intval($x15) ^ intval($x0), 16);
        $x10+= $x15; $x5 = self::leftRotate(intval($x5) ^ intval($x10), 12);
        $x0+= $x5; $x15 = self::leftRotate(intval($x15) ^ intval($x0), 8);
        $x10+= $x15; $x5 = self::leftRotate(intval($x5) ^ intval($x10), 7);

        $x1+= $x6; $x12 = self::leftRotate(intval($x12) ^ intval($x1), 16);
        $x11+= $x12; $x6 = self::leftRotate(intval($x6) ^ intval($x11), 12);
        $x1+= $x6; $x12 = self::leftRotate(intval($x12) ^ intval($x1), 8);
        $x11+= $x12; $x6 = self::leftRotate(intval($x6) ^ intval($x11), 7);

        $x2+= $x7; $x13 = self::leftRotate(intval($x13) ^ intval($x2), 16);
        $x8+= $x13; $x7 = self::leftRotate(intval($x7) ^ intval($x8), 12);
        $x2+= $x7; $x13 = self::leftRotate(intval($x13) ^ intval($x2), 8);
        $x8+= $x13; $x7 = self::leftRotate(intval($x7) ^ intval($x8), 7);

        $x3+= $x4; $x14 = self::leftRotate(intval($x14) ^ intval($x3), 16);
        $x9+= $x14; $x4 = self::leftRotate(intval($x4) ^ intval($x9), 12);
        $x3+= $x4; $x14 = self::leftRotate(intval($x14) ^ intval($x3), 8);
        $x9+= $x14; $x4 = self::leftRotate(intval($x4) ^ intval($x9), 7);

        // columnRound
        $x0+= $x4; $x12 = self::leftRotate(intval($x12) ^ intval($x0), 16);
        $x8+= $x12; $x4 = self::leftRotate(intval($x4) ^ intval($x8), 12);
        $x0+= $x4; $x12 = self::leftRotate(intval($x12) ^ intval($x0), 8);
        $x8+= $x12; $x4 = self::leftRotate(intval($x4) ^ intval($x8), 7);

        $x1+= $x5; $x13 = self::leftRotate(intval($x13) ^ intval($x1), 16);
        $x9+= $x13; $x5 = self::leftRotate(intval($x5) ^ intval($x9), 12);
        $x1+= $x5; $x13 = self::leftRotate(intval($x13) ^ intval($x1), 8);
        $x9+= $x13; $x5 = self::leftRotate(intval($x5) ^ intval($x9), 7);

        $x2+= $x6; $x14 = self::leftRotate(intval($x14) ^ intval($x2), 16);
        $x10+= $x14; $x6 = self::leftRotate(intval($x6) ^ intval($x10), 12);
        $x2+= $x6; $x14 = self::leftRotate(intval($x14) ^ intval($x2), 8);
        $x10+= $x14; $x6 = self::leftRotate(intval($x6) ^ intval($x10), 7);

        $x3+= $x7; $x15 = self::leftRotate(intval($x15) ^ intval($x3), 16);
        $x11+= $x15; $x7 = self::leftRotate(intval($x7) ^ intval($x11), 12);
        $x3+= $x7; $x15 = self::leftRotate(intval($x15) ^ intval($x3), 8);
        $x11+= $x15; $x7 = self::leftRotate(intval($x7) ^ intval($x11), 7);

        // rowRound
        $x0+= $x5; $x15 = self::leftRotate(intval($x15) ^ intval($x0), 16);
        $x10+= $x15; $x5 = self::leftRotate(intval($x5) ^ intval($x10), 12);
        $x0+= $x5; $x15 = self::leftRotate(intval($x15) ^ intval($x0), 8);
        $x10+= $x15; $x5 = self::leftRotate(intval($x5) ^ intval($x10), 7);

        $x1+= $x6; $x12 = self::leftRotate(intval($x12) ^ intval($x1), 16);
        $x11+= $x12; $x6 = self::leftRotate(intval($x6) ^ intval($x11), 12);
        $x1+= $x6; $x12 = self::leftRotate(intval($x12) ^ intval($x1), 8);
        $x11+= $x12; $x6 = self::leftRotate(intval($x6) ^ intval($x11), 7);

        $x2+= $x7; $x13 = self::leftRotate(intval($x13) ^ intval($x2), 16);
        $x8+= $x13; $x7 = self::leftRotate(intval($x7) ^ intval($x8), 12);
        $x2+= $x7; $x13 = self::leftRotate(intval($x13) ^ intval($x2), 8);
        $x8+= $x13; $x7 = self::leftRotate(intval($x7) ^ intval($x8), 7);

        $x3+= $x4; $x14 = self::leftRotate(intval($x14) ^ intval($x3), 16);
        $x9+= $x14; $x4 = self::leftRotate(intval($x4) ^ intval($x9), 12);
        $x3+= $x4; $x14 = self::leftRotate(intval($x14) ^ intval($x3), 8);
        $x9+= $x14; $x4 = self::leftRotate(intval($x4) ^ intval($x9), 7);

        // columnRound
        $x0+= $x4; $x12 = self::leftRotate(intval($x12) ^ intval($x0), 16);
        $x8+= $x12; $x4 = self::leftRotate(intval($x4) ^ intval($x8), 12);
        $x0+= $x4; $x12 = self::leftRotate(intval($x12) ^ intval($x0), 8);
        $x8+= $x12; $x4 = self::leftRotate(intval($x4) ^ intval($x8), 7);

        $x1+= $x5; $x13 = self::leftRotate(intval($x13) ^ intval($x1), 16);
        $x9+= $x13; $x5 = self::leftRotate(intval($x5) ^ intval($x9), 12);
        $x1+= $x5; $x13 = self::leftRotate(intval($x13) ^ intval($x1), 8);
        $x9+= $x13; $x5 = self::leftRotate(intval($x5) ^ intval($x9), 7);

        $x2+= $x6; $x14 = self::leftRotate(intval($x14) ^ intval($x2), 16);
        $x10+= $x14; $x6 = self::leftRotate(intval($x6) ^ intval($x10), 12);
        $x2+= $x6; $x14 = self::leftRotate(intval($x14) ^ intval($x2), 8);
        $x10+= $x14; $x6 = self::leftRotate(intval($x6) ^ intval($x10), 7);

        $x3+= $x7; $x15 = self::leftRotate(intval($x15) ^ intval($x3), 16);
        $x11+= $x15; $x7 = self::leftRotate(intval($x7) ^ intval($x11), 12);
        $x3+= $x7; $x15 = self::leftRotate(intval($x15) ^ intval($x3), 8);
        $x11+= $x15; $x7 = self::leftRotate(intval($x7) ^ intval($x11), 7);

        // rowRound
        $x0+= $x5; $x15 = self::leftRotate(intval($x15) ^ intval($x0), 16);
        $x10+= $x15; $x5 = self::leftRotate(intval($x5) ^ intval($x10), 12);
        $x0+= $x5; $x15 = self::leftRotate(intval($x15) ^ intval($x0), 8);
        $x10+= $x15; $x5 = self::leftRotate(intval($x5) ^ intval($x10), 7);

        $x1+= $x6; $x12 = self::leftRotate(intval($x12) ^ intval($x1), 16);
        $x11+= $x12; $x6 = self::leftRotate(intval($x6) ^ intval($x11), 12);
        $x1+= $x6; $x12 = self::leftRotate(intval($x12) ^ intval($x1), 8);
        $x11+= $x12; $x6 = self::leftRotate(intval($x6) ^ intval($x11), 7);

        $x2+= $x7; $x13 = self::leftRotate(intval($x13) ^ intval($x2), 16);
        $x8+= $x13; $x7 = self::leftRotate(intval($x7) ^ intval($x8), 12);
        $x2+= $x7; $x13 = self::leftRotate(intval($x13) ^ intval($x2), 8);
        $x8+= $x13; $x7 = self::leftRotate(intval($x7) ^ intval($x8), 7);

        $x3+= $x4; $x14 = self::leftRotate(intval($x14) ^ intval($x3), 16);
        $x9+= $x14; $x4 = self::leftRotate(intval($x4) ^ intval($x9), 12);
        $x3+= $x4; $x14 = self::leftRotate(intval($x14) ^ intval($x3), 8);
        $x9+= $x14; $x4 = self::leftRotate(intval($x4) ^ intval($x9), 7);

        // columnRound
        $x0+= $x4; $x12 = self::leftRotate(intval($x12) ^ intval($x0), 16);
        $x8+= $x12; $x4 = self::leftRotate(intval($x4) ^ intval($x8), 12);
        $x0+= $x4; $x12 = self::leftRotate(intval($x12) ^ intval($x0), 8);
        $x8+= $x12; $x4 = self::leftRotate(intval($x4) ^ intval($x8), 7);

        $x1+= $x5; $x13 = self::leftRotate(intval($x13) ^ intval($x1), 16);
        $x9+= $x13; $x5 = self::leftRotate(intval($x5) ^ intval($x9), 12);
        $x1+= $x5; $x13 = self::leftRotate(intval($x13) ^ intval($x1), 8);
        $x9+= $x13; $x5 = self::leftRotate(intval($x5) ^ intval($x9), 7);

        $x2+= $x6; $x14 = self::leftRotate(intval($x14) ^ intval($x2), 16);
        $x10+= $x14; $x6 = self::leftRotate(intval($x6) ^ intval($x10), 12);
        $x2+= $x6; $x14 = self::leftRotate(intval($x14) ^ intval($x2), 8);
        $x10+= $x14; $x6 = self::leftRotate(intval($x6) ^ intval($x10), 7);

        $x3+= $x7; $x15 = self::leftRotate(intval($x15) ^ intval($x3), 16);
        $x11+= $x15; $x7 = self::leftRotate(intval($x7) ^ intval($x11), 12);
        $x3+= $x7; $x15 = self::leftRotate(intval($x15) ^ intval($x3), 8);
        $x11+= $x15; $x7 = self::leftRotate(intval($x7) ^ intval($x11), 7);

        // rowRound
        $x0+= $x5; $x15 = self::leftRotate(intval($x15) ^ intval($x0), 16);
        $x10+= $x15; $x5 = self::leftRotate(intval($x5) ^ intval($x10), 12);
        $x0+= $x5; $x15 = self::leftRotate(intval($x15) ^ intval($x0), 8);
        $x10+= $x15; $x5 = self::leftRotate(intval($x5) ^ intval($x10), 7);

        $x1+= $x6; $x12 = self::leftRotate(intval($x12) ^ intval($x1), 16);
        $x11+= $x12; $x6 = self::leftRotate(intval($x6) ^ intval($x11), 12);
        $x1+= $x6; $x12 = self::leftRotate(intval($x12) ^ intval($x1), 8);
        $x11+= $x12; $x6 = self::leftRotate(intval($x6) ^ intval($x11), 7);

        $x2+= $x7; $x13 = self::leftRotate(intval($x13) ^ intval($x2), 16);
        $x8+= $x13; $x7 = self::leftRotate(intval($x7) ^ intval($x8), 12);
        $x2+= $x7; $x13 = self::leftRotate(intval($x13) ^ intval($x2), 8);
        $x8+= $x13; $x7 = self::leftRotate(intval($x7) ^ intval($x8), 7);

        $x3+= $x4; $x14 = self::leftRotate(intval($x14) ^ intval($x3), 16);
        $x9+= $x14; $x4 = self::leftRotate(intval($x4) ^ intval($x9), 12);
        $x3+= $x4; $x14 = self::leftRotate(intval($x14) ^ intval($x3), 8);
        $x9+= $x14; $x4 = self::leftRotate(intval($x4) ^ intval($x9), 7);

        // columnRound
        $x0+= $x4; $x12 = self::leftRotate(intval($x12) ^ intval($x0), 16);
        $x8+= $x12; $x4 = self::leftRotate(intval($x4) ^ intval($x8), 12);
        $x0+= $x4; $x12 = self::leftRotate(intval($x12) ^ intval($x0), 8);
        $x8+= $x12; $x4 = self::leftRotate(intval($x4) ^ intval($x8), 7);

        $x1+= $x5; $x13 = self::leftRotate(intval($x13) ^ intval($x1), 16);
        $x9+= $x13; $x5 = self::leftRotate(intval($x5) ^ intval($x9), 12);
        $x1+= $x5; $x13 = self::leftRotate(intval($x13) ^ intval($x1), 8);
        $x9+= $x13; $x5 = self::leftRotate(intval($x5) ^ intval($x9), 7);

        $x2+= $x6; $x14 = self::leftRotate(intval($x14) ^ intval($x2), 16);
        $x10+= $x14; $x6 = self::leftRotate(intval($x6) ^ intval($x10), 12);
        $x2+= $x6; $x14 = self::leftRotate(intval($x14) ^ intval($x2), 8);
        $x10+= $x14; $x6 = self::leftRotate(intval($x6) ^ intval($x10), 7);

        $x3+= $x7; $x15 = self::leftRotate(intval($x15) ^ intval($x3), 16);
        $x11+= $x15; $x7 = self::leftRotate(intval($x7) ^ intval($x11), 12);
        $x3+= $x7; $x15 = self::leftRotate(intval($x15) ^ intval($x3), 8);
        $x11+= $x15; $x7 = self::leftRotate(intval($x7) ^ intval($x11), 7);

        // rowRound
        $x0+= $x5; $x15 = self::leftRotate(intval($x15) ^ intval($x0), 16);
        $x10+= $x15; $x5 = self::leftRotate(intval($x5) ^ intval($x10), 12);
        $x0+= $x5; $x15 = self::leftRotate(intval($x15) ^ intval($x0), 8);
        $x10+= $x15; $x5 = self::leftRotate(intval($x5) ^ intval($x10), 7);

        $x1+= $x6; $x12 = self::leftRotate(intval($x12) ^ intval($x1), 16);
        $x11+= $x12; $x6 = self::leftRotate(intval($x6) ^ intval($x11), 12);
        $x1+= $x6; $x12 = self::leftRotate(intval($x12) ^ intval($x1), 8);
        $x11+= $x12; $x6 = self::leftRotate(intval($x6) ^ intval($x11), 7);

        $x2+= $x7; $x13 = self::leftRotate(intval($x13) ^ intval($x2), 16);
        $x8+= $x13; $x7 = self::leftRotate(intval($x7) ^ intval($x8), 12);
        $x2+= $x7; $x13 = self::leftRotate(intval($x13) ^ intval($x2), 8);
        $x8+= $x13; $x7 = self::leftRotate(intval($x7) ^ intval($x8), 7);

        $x3+= $x4; $x14 = self::leftRotate(intval($x14) ^ intval($x3), 16);
        $x9+= $x14; $x4 = self::leftRotate(intval($x4) ^ intval($x9), 12);
        $x3+= $x4; $x14 = self::leftRotate(intval($x14) ^ intval($x3), 8);
        $x9+= $x14; $x4 = self::leftRotate(intval($x4) ^ intval($x9), 7);

        // columnRound
        $x0+= $x4; $x12 = self::leftRotate(intval($x12) ^ intval($x0), 16);
        $x8+= $x12; $x4 = self::leftRotate(intval($x4) ^ intval($x8), 12);
        $x0+= $x4; $x12 = self::leftRotate(intval($x12) ^ intval($x0), 8);
        $x8+= $x12; $x4 = self::leftRotate(intval($x4) ^ intval($x8), 7);

        $x1+= $x5; $x13 = self::leftRotate(intval($x13) ^ intval($x1), 16);
        $x9+= $x13; $x5 = self::leftRotate(intval($x5) ^ intval($x9), 12);
        $x1+= $x5; $x13 = self::leftRotate(intval($x13) ^ intval($x1), 8);
        $x9+= $x13; $x5 = self::leftRotate(intval($x5) ^ intval($x9), 7);

        $x2+= $x6; $x14 = self::leftRotate(intval($x14) ^ intval($x2), 16);
        $x10+= $x14; $x6 = self::leftRotate(intval($x6) ^ intval($x10), 12);
        $x2+= $x6; $x14 = self::leftRotate(intval($x14) ^ intval($x2), 8);
        $x10+= $x14; $x6 = self::leftRotate(intval($x6) ^ intval($x10), 7);

        $x3+= $x7; $x15 = self::leftRotate(intval($x15) ^ intval($x3), 16);
        $x11+= $x15; $x7 = self::leftRotate(intval($x7) ^ intval($x11), 12);
        $x3+= $x7; $x15 = self::leftRotate(intval($x15) ^ intval($x3), 8);
        $x11+= $x15; $x7 = self::leftRotate(intval($x7) ^ intval($x11), 7);

        // rowRound
        $x0+= $x5; $x15 = self::leftRotate(intval($x15) ^ intval($x0), 16);
        $x10+= $x15; $x5 = self::leftRotate(intval($x5) ^ intval($x10), 12);
        $x0+= $x5; $x15 = self::leftRotate(intval($x15) ^ intval($x0), 8);
        $x10+= $x15; $x5 = self::leftRotate(intval($x5) ^ intval($x10), 7);

        $x1+= $x6; $x12 = self::leftRotate(intval($x12) ^ intval($x1), 16);
        $x11+= $x12; $x6 = self::leftRotate(intval($x6) ^ intval($x11), 12);
        $x1+= $x6; $x12 = self::leftRotate(intval($x12) ^ intval($x1), 8);
        $x11+= $x12; $x6 = self::leftRotate(intval($x6) ^ intval($x11), 7);

        $x2+= $x7; $x13 = self::leftRotate(intval($x13) ^ intval($x2), 16);
        $x8+= $x13; $x7 = self::leftRotate(intval($x7) ^ intval($x8), 12);
        $x2+= $x7; $x13 = self::leftRotate(intval($x13) ^ intval($x2), 8);
        $x8+= $x13; $x7 = self::leftRotate(intval($x7) ^ intval($x8), 7);

        $x3+= $x4; $x14 = self::leftRotate(intval($x14) ^ intval($x3), 16);
        $x9+= $x14; $x4 = self::leftRotate(intval($x4) ^ intval($x9), 12);
        $x3+= $x4; $x14 = self::leftRotate(intval($x14) ^ intval($x3), 8);
        $x9+= $x14; $x4 = self::leftRotate(intval($x4) ^ intval($x9), 7);
        // @codingStandardsIgnoreEnd

        $x0 += $z0;
        $x1 += $z1;
        $x2 += $z2;
        $x3 += $z3;
        $x4 += $z4;
        $x5 += $z5;
        $x6 += $z6;
        $x7 += $z7;
        $x8 += $z8;
        $x9 += $z9;
        $x10 += $z10;
        $x11 += $z11;
        $x12 += $z12;
        $x13 += $z13;
        $x14 += $z14;
        $x15 += $z15;

        return pack('V*', $x0, $x1, $x2, $x3, $x4, $x5, $x6, $x7, $x8, $x9, $x10, $x11, $x12, $x13, $x14, $x15);
    }
}
<?php

/**
 * Base Class for all asymmetric key ciphers
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2016 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\Crypt\Common;

use phpseclib3\Crypt\DSA;
use phpseclib3\Crypt\Hash;
use phpseclib3\Crypt\RSA;
use phpseclib3\Exception\NoKeyLoadedException;
use phpseclib3\Exception\UnsupportedFormatException;
use phpseclib3\Math\BigInteger;

/**
 * Base Class for all asymmetric cipher classes
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class AsymmetricKey
{
    /**
     * Precomputed Zero
     *
     * @var BigInteger
     */
    protected static $zero;

    /**
     * Precomputed One
     *
     * @var BigInteger
     */
    protected static $one;

    /**
     * Format of the loaded key
     *
     * @var string
     */
    protected $format;

    /**
     * Hash function
     *
     * @var Hash
     */
    protected $hash;

    /**
     * HMAC function
     *
     * @var Hash
     */
    private $hmac;

    /**
     * Supported plugins (lower case)
     *
     * @see self::initialize_static_variables()
     * @var array
     */
    private static $plugins = [];

    /**
     * Invisible plugins
     *
     * @see self::initialize_static_variables()
     * @var array
     */
    private static $invisiblePlugins = [];

    /**
     * Available Engines
     *
     * @var boolean[]
     */
    protected static $engines = [];

    /**
     * Key Comment
     *
     * @var null|string
     */
    private $comment;

    /**
     * @param string $type
     * @return array|string
     */
    abstract public function toString($type, array $options = []);

    /**
     * The constructor
     */
    protected function __construct()
    {
        self::initialize_static_variables();

        $this->hash = new Hash('sha256');
        $this->hmac = new Hash('sha256');
    }

    /**
     * Initialize static variables
     */
    protected static function initialize_static_variables()
    {
        if (!isset(self::$zero)) {
            self::$zero = new BigInteger(0);
            self::$one = new BigInteger(1);
        }

        self::loadPlugins('Keys');
        if (static::ALGORITHM != 'RSA' && static::ALGORITHM != 'DH') {
            self::loadPlugins('Signature');
        }
    }

    /**
     * Load the key
     *
     * @param string $key
     * @param string $password optional
     * @return PublicKey|PrivateKey
     */
    public static function load($key, $password = false)
    {
        self::initialize_static_variables();

        $class = new \ReflectionClass(static::class);
        if ($class->isFinal()) {
            throw new \RuntimeException('load() should not be called from final classes (' . static::class . ')');
        }

        $components = false;
        foreach (self::$plugins[static::ALGORITHM]['Keys'] as $format) {
            if (isset(self::$invisiblePlugins[static::ALGORITHM]) && in_array($format, self::$invisiblePlugins[static::ALGORITHM])) {
                continue;
            }
            try {
                $components = $format::load($key, $password);
            } catch (\Exception $e) {
                $components = false;
            }
            if ($components !== false) {
                break;
            }
        }

        if ($components === false) {
            throw new NoKeyLoadedException('Unable to read key');
        }

        $components['format'] = $format;
        $components['secret'] = isset($components['secret']) ? $components['secret'] : '';
        $comment = isset($components['comment']) ? $components['comment'] : null;
        $new = static::onLoad($components);
        $new->format = $format;
        $new->comment = $comment;
        return $new instanceof PrivateKey ?
            $new->withPassword($password) :
            $new;
    }

    /**
     * Loads a private key
     *
     * @return PrivateKey
     * @param string|array $key
     * @param string $password optional
     */
    public static function loadPrivateKey($key, $password = '')
    {
        $key = self::load($key, $password);
        if (!$key instanceof PrivateKey) {
            throw new NoKeyLoadedException('The key that was loaded was not a private key');
        }
        return $key;
    }

    /**
     * Loads a public key
     *
     * @return PublicKey
     * @param string|array $key
     */
    public static function loadPublicKey($key)
    {
        $key = self::load($key);
        if (!$key instanceof PublicKey) {
            throw new NoKeyLoadedException('The key that was loaded was not a public key');
        }
        return $key;
    }

    /**
     * Loads parameters
     *
     * @return AsymmetricKey
     * @param string|array $key
     */
    public static function loadParameters($key)
    {
        $key = self::load($key);
        if (!$key instanceof PrivateKey && !$key instanceof PublicKey) {
            throw new NoKeyLoadedException('The key that was loaded was not a parameter');
        }
        return $key;
    }

    /**
     * Load the key, assuming a specific format
     *
     * @param string $type
     * @param string $key
     * @param string $password optional
     * @return static
     */
    public static function loadFormat($type, $key, $password = false)
    {
        self::initialize_static_variables();

        $components = false;
        $format = strtolower($type);
        if (isset(self::$plugins[static::ALGORITHM]['Keys'][$format])) {
            $format = self::$plugins[static::ALGORITHM]['Keys'][$format];
            $components = $format::load($key, $password);
        }

        if ($components === false) {
            throw new NoKeyLoadedException('Unable to read key');
        }

        $components['format'] = $format;
        $components['secret'] = isset($components['secret']) ? $components['secret'] : '';

        $new = static::onLoad($components);
        $new->format = $format;
        return $new instanceof PrivateKey ?
            $new->withPassword($password) :
            $new;
    }

    /**
     * Loads a private key
     *
     * @return PrivateKey
     * @param string $type
     * @param string $key
     * @param string $password optional
     */
    public static function loadPrivateKeyFormat($type, $key, $password = false)
    {
        $key = self::loadFormat($type, $key, $password);
        if (!$key instanceof PrivateKey) {
            throw new NoKeyLoadedException('The key that was loaded was not a private key');
        }
        return $key;
    }

    /**
     * Loads a public key
     *
     * @return PublicKey
     * @param string $type
     * @param string $key
     */
    public static function loadPublicKeyFormat($type, $key)
    {
        $key = self::loadFormat($type, $key);
        if (!$key instanceof PublicKey) {
            throw new NoKeyLoadedException('The key that was loaded was not a public key');
        }
        return $key;
    }

    /**
     * Loads parameters
     *
     * @return AsymmetricKey
     * @param string $type
     * @param string|array $key
     */
    public static function loadParametersFormat($type, $key)
    {
        $key = self::loadFormat($type, $key);
        if (!$key instanceof PrivateKey && !$key instanceof PublicKey) {
            throw new NoKeyLoadedException('The key that was loaded was not a parameter');
        }
        return $key;
    }

    /**
     * Validate Plugin
     *
     * @param string $format
     * @param string $type
     * @param string $method optional
     * @return mixed
     */
    protected static function validatePlugin($format, $type, $method = null)
    {
        $type = strtolower($type);
        if (!isset(self::$plugins[static::ALGORITHM][$format][$type])) {
            throw new UnsupportedFormatException("$type is not a supported format");
        }
        $type = self::$plugins[static::ALGORITHM][$format][$type];
        if (isset($method) && !method_exists($type, $method)) {
            throw new UnsupportedFormatException("$type does not implement $method");
        }

        return $type;
    }

    /**
     * Load Plugins
     *
     * @param string $format
     */
    private static function loadPlugins($format)
    {
        if (!isset(self::$plugins[static::ALGORITHM][$format])) {
            self::$plugins[static::ALGORITHM][$format] = [];
            foreach (new \DirectoryIterator(__DIR__ . '/../' . static::ALGORITHM . '/Formats/' . $format . '/') as $file) {
                if ($file->getExtension() != 'php') {
                    continue;
                }
                $name = $file->getBasename('.php');
                if ($name[0] == '.') {
                    continue;
                }
                $type = 'phpseclib3\Crypt\\' . static::ALGORITHM . '\\Formats\\' . $format . '\\' . $name;
                $reflect = new \ReflectionClass($type);
                if ($reflect->isTrait()) {
                    continue;
                }
                self::$plugins[static::ALGORITHM][$format][strtolower($name)] = $type;
                if ($reflect->hasConstant('IS_INVISIBLE')) {
                    self::$invisiblePlugins[static::ALGORITHM][] = $type;
                }
            }
        }
    }

    /**
     * Returns a list of supported formats.
     *
     * @return array
     */
    public static function getSupportedKeyFormats()
    {
        self::initialize_static_variables();

        return self::$plugins[static::ALGORITHM]['Keys'];
    }

    /**
     * Add a fileformat plugin
     *
     * The plugin needs to either already be loaded or be auto-loadable.
     * Loading a plugin whose shortname overwrite an existing shortname will overwrite the old plugin.
     *
     * @see self::load()
     * @param string $fullname
     * @return bool
     */
    public static function addFileFormat($fullname)
    {
        self::initialize_static_variables();

        if (class_exists($fullname)) {
            $meta = new \ReflectionClass($fullname);
            $shortname = $meta->getShortName();
            self::$plugins[static::ALGORITHM]['Keys'][strtolower($shortname)] = $fullname;
            if ($meta->hasConstant('IS_INVISIBLE')) {
                self::$invisiblePlugins[static::ALGORITHM][] = strtolower($shortname);
            }
        }
    }

    /**
     * Returns the format of the loaded key.
     *
     * If the key that was loaded wasn't in a valid or if the key was auto-generated
     * with RSA::createKey() then this will throw an exception.
     *
     * @see self::load()
     * @return mixed
     */
    public function getLoadedFormat()
    {
        if (empty($this->format)) {
            throw new NoKeyLoadedException('This key was created with createKey - it was not loaded with load. Therefore there is no "loaded format"');
        }

        $meta = new \ReflectionClass($this->format);
        return $meta->getShortName();
    }

    /**
     * Returns the key's comment
     *
     * Not all key formats support comments. If you want to set a comment use toString()
     *
     * @return null|string
     */
    public function getComment()
    {
        return $this->comment;
    }

    /**
     * Tests engine validity
     *
     */
    public static function useBestEngine()
    {
        static::$engines = [
            'PHP' => true,
            'OpenSSL' => extension_loaded('openssl'),
            // this test can be satisfied by either of the following:
            // http://php.net/manual/en/book.sodium.php
            // https://github.com/paragonie/sodium_compat
            'libsodium' => function_exists('sodium_crypto_sign_keypair')
        ];

        return static::$engines;
    }

    /**
     * Flag to use internal engine only (useful for unit testing)
     *
     */
    public static function useInternalEngine()
    {
        static::$engines = [
            'PHP' => true,
            'OpenSSL' => false,
            'libsodium' => false
        ];
    }

    /**
     * __toString() magic method
     *
     * @return string
     */
    public function __toString()
    {
        return $this->toString('PKCS8');
    }

    /**
     * Determines which hashing function should be used
     *
     * @param string $hash
     */
    public function withHash($hash)
    {
        $new = clone $this;

        $new->hash = new Hash($hash);
        $new->hmac = new Hash($hash);

        return $new;
    }

    /**
     * Returns the hash algorithm currently being used
     *
     */
    public function getHash()
    {
        return clone $this->hash;
    }

    /**
     * Compute the pseudorandom k for signature generation,
     * using the process specified for deterministic DSA.
     *
     * @param string $h1
     * @return string
     */
    protected function computek($h1)
    {
        $v = str_repeat("\1", strlen($h1));

        $k = str_repeat("\0", strlen($h1));

        $x = $this->int2octets($this->x);
        $h1 = $this->bits2octets($h1);

        $this->hmac->setKey($k);
        $k = $this->hmac->hash($v . "\0" . $x . $h1);
        $this->hmac->setKey($k);
        $v = $this->hmac->hash($v);
        $k = $this->hmac->hash($v . "\1" . $x . $h1);
        $this->hmac->setKey($k);
        $v = $this->hmac->hash($v);

        $qlen = $this->q->getLengthInBytes();

        while (true) {
            $t = '';
            while (strlen($t) < $qlen) {
                $v = $this->hmac->hash($v);
                $t = $t . $v;
            }
            $k = $this->bits2int($t);

            if (!$k->equals(self::$zero) && $k->compare($this->q) < 0) {
                break;
            }
            $k = $this->hmac->hash($v . "\0");
            $this->hmac->setKey($k);
            $v = $this->hmac->hash($v);
        }

        return $k;
    }

    /**
     * Integer to Octet String
     *
     * @param BigInteger $v
     * @return string
     */
    private function int2octets($v)
    {
        $out = $v->toBytes();
        $rolen = $this->q->getLengthInBytes();
        if (strlen($out) < $rolen) {
            return str_pad($out, $rolen, "\0", STR_PAD_LEFT);
        } elseif (strlen($out) > $rolen) {
            return substr($out, -$rolen);
        } else {
            return $out;
        }
    }

    /**
     * Bit String to Integer
     *
     * @param string $in
     * @return BigInteger
     */
    protected function bits2int($in)
    {
        $v = new BigInteger($in, 256);
        $vlen = strlen($in) << 3;
        $qlen = $this->q->getLength();
        if ($vlen > $qlen) {
            return $v->bitwise_rightShift($vlen - $qlen);
        }
        return $v;
    }

    /**
     * Bit String to Octet String
     *
     * @param string $in
     * @return string
     */
    private function bits2octets($in)
    {
        $z1 = $this->bits2int($in);
        $z2 = $z1->subtract($this->q);
        return $z2->compare(self::$zero) < 0 ?
            $this->int2octets($z1) :
            $this->int2octets($z2);
    }
}
<?php

/**
 * Base Class for all block ciphers
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @author    Hans-Juergen Petrich <petrich@tronic-media.com>
 * @copyright 2007 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\Crypt\Common;

/**
 * Base Class for all block cipher classes
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class BlockCipher extends SymmetricKey
{
}
<?php

/**
 * JSON Web Key (RFC7517) Handler
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2015 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\Crypt\Common\Formats\Keys;

use phpseclib3\Common\Functions\Strings;

/**
 * JSON Web Key Formatted Key Handler
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class JWK
{
    /**
     * Break a public or private key down into its constituent components
     *
     * @param string $key
     * @param string $password
     * @return array
     */
    public static function load($key, $password = '')
    {
        if (!Strings::is_stringable($key)) {
            throw new \UnexpectedValueException('Key should be a string - not a ' . gettype($key));
        }

        $key = preg_replace('#\s#', '', $key); // remove whitespace

        if (PHP_VERSION_ID >= 73000) {
            $key = json_decode($key, null, 512, JSON_THROW_ON_ERROR);
        } else {
            $key = json_decode($key);
            if (!$key) {
                throw new \RuntimeException('Unable to decode JSON');
            }
        }

        if (isset($key->kty)) {
            return $key;
        }

        if (!is_object($key)) {
            throw new \RuntimeException('invalid JWK: not an object');
        }

        if (!isset($key->keys)) {
            throw new \RuntimeException('invalid JWK: object has no property "keys"');
        }

        if (count($key->keys) != 1) {
            throw new \RuntimeException('Although the JWK key format supports multiple keys phpseclib does not');
        }

        return $key->keys[0];
    }

    /**
     * Wrap a key appropriately
     *
     * @return string
     */
    protected static function wrapKey(array $key, array $options)
    {
        return json_encode(['keys' => [$key + $options]]);
    }
}
<?php

/**
 * OpenSSH Key Handler
 *
 * PHP version 5
 *
 * Place in $HOME/.ssh/authorized_keys
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2015 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\Crypt\Common\Formats\Keys;

use phpseclib3\Common\Functions\Strings;
use phpseclib3\Crypt\AES;
use phpseclib3\Crypt\Random;
use phpseclib3\Exception\BadDecryptionException;

/**
 * OpenSSH Formatted RSA Key Handler
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class OpenSSH
{
    /**
     * Default comment
     *
     * @var string
     */
    protected static $comment = 'phpseclib-generated-key';

    /**
     * Binary key flag
     *
     * @var bool
     */
    protected static $binary = false;

    /**
     * Sets the default comment
     *
     * @param string $comment
     */
    public static function setComment($comment)
    {
        self::$comment = str_replace(["\r", "\n"], '', $comment);
    }

    /**
     * Break a public or private key down into its constituent components
     *
     * $type can be either ssh-dss or ssh-rsa
     *
     * @param string $key
     * @param string $password
     * @return array
     */
    public static function load($key, $password = '')
    {
        if (!Strings::is_stringable($key)) {
            throw new \UnexpectedValueException('Key should be a string - not a ' . gettype($key));
        }

        // key format is described here:
        // https://cvsweb.openbsd.org/cgi-bin/cvsweb/src/usr.bin/ssh/PROTOCOL.key?annotate=HEAD

        if (strpos($key, 'BEGIN OPENSSH PRIVATE KEY') !== false) {
            $key = preg_replace('#(?:^-.*?-[\r\n]*$)|\s#ms', '', $key);
            $key = Strings::base64_decode($key);
            $magic = Strings::shift($key, 15);
            if ($magic != "openssh-key-v1\0") {
                throw new \RuntimeException('Expected openssh-key-v1');
            }
            list($ciphername, $kdfname, $kdfoptions, $numKeys) = Strings::unpackSSH2('sssN', $key);
            if ($numKeys != 1) {
                // if we wanted to support multiple keys we could update PublicKeyLoader to preview what the # of keys
                // would be; it'd then call Common\Keys\OpenSSH.php::load() and get the paddedKey. it'd then pass
                // that to the appropriate key loading parser $numKey times or something
                throw new \RuntimeException('Although the OpenSSH private key format supports multiple keys phpseclib does not');
            }
            switch ($ciphername) {
                case 'none':
                    break;
                case 'aes256-ctr':
                    if ($kdfname != 'bcrypt') {
                        throw new \RuntimeException('Only the bcrypt kdf is supported (' . $kdfname . ' encountered)');
                    }
                    list($salt, $rounds) = Strings::unpackSSH2('sN', $kdfoptions);
                    $crypto = new AES('ctr');
                    //$crypto->setKeyLength(256);
                    //$crypto->disablePadding();
                    $crypto->setPassword($password, 'bcrypt', $salt, $rounds, 32);
                    break;
                default:
                    throw new \RuntimeException('The only supported ciphers are: none, aes256-ctr (' . $ciphername . ' is being used)');
            }

            list($publicKey, $paddedKey) = Strings::unpackSSH2('ss', $key);
            list($type) = Strings::unpackSSH2('s', $publicKey);
            if (isset($crypto)) {
                $paddedKey = $crypto->decrypt($paddedKey);
            }
            list($checkint1, $checkint2) = Strings::unpackSSH2('NN', $paddedKey);
            // any leftover bytes in $paddedKey are for padding? but they should be sequential bytes. eg. 1, 2, 3, etc.
            if ($checkint1 != $checkint2) {
                if (isset($crypto)) {
                    throw new BadDecryptionException('Unable to decrypt key - please verify the password you are using');
                }
                throw new \RuntimeException("The two checkints do not match ($checkint1 vs. $checkint2)");
            }
            self::checkType($type);

            return compact('type', 'publicKey', 'paddedKey');
        }

        $parts = explode(' ', $key, 3);

        if (!isset($parts[1])) {
            $key = base64_decode($parts[0]);
            $comment = false;
        } else {
            $asciiType = $parts[0];
            self::checkType($parts[0]);
            $key = base64_decode($parts[1]);
            $comment = isset($parts[2]) ? $parts[2] : false;
        }
        if ($key === false) {
            throw new \UnexpectedValueException('Key should be a string - not a ' . gettype($key));
        }

        list($type) = Strings::unpackSSH2('s', $key);
        self::checkType($type);
        if (isset($asciiType) && $asciiType != $type) {
            throw new \RuntimeException('Two different types of keys are claimed: ' . $asciiType . ' and ' . $type);
        }
        if (strlen($key) <= 4) {
            throw new \UnexpectedValueException('Key appears to be malformed');
        }

        $publicKey = $key;

        return compact('type', 'publicKey', 'comment');
    }

    /**
     * Toggle between binary and printable keys
     *
     * Printable keys are what are generated by default. These are the ones that go in
     * $HOME/.ssh/authorized_key.
     *
     * @param bool $enabled
     */
    public static function setBinaryOutput($enabled)
    {
        self::$binary = $enabled;
    }

    /**
     * Checks to see if the type is valid
     *
     * @param string $candidate
     */
    private static function checkType($candidate)
    {
        if (!in_array($candidate, static::$types)) {
            throw new \RuntimeException("The key type ($candidate) is not equal to: " . implode(',', static::$types));
        }
    }

    /**
     * Wrap a private key appropriately
     *
     * @param string $publicKey
     * @param string $privateKey
     * @param string $password
     * @param array $options
     * @return string
     */
    protected static function wrapPrivateKey($publicKey, $privateKey, $password, $options)
    {
        list(, $checkint) = unpack('N', Random::string(4));

        $comment = isset($options['comment']) ? $options['comment'] : self::$comment;
        $paddedKey = Strings::packSSH2('NN', $checkint, $checkint) .
                     $privateKey .
                     Strings::packSSH2('s', $comment);

        $usesEncryption = !empty($password) && is_string($password);

        /*
           from http://tools.ietf.org/html/rfc4253#section-6 :

           Note that the length of the concatenation of 'packet_length',
           'padding_length', 'payload', and 'random padding' MUST be a multiple
           of the cipher block size or 8, whichever is larger.
         */
        $blockSize = $usesEncryption ? 16 : 8;
        $paddingLength = (($blockSize - 1) * strlen($paddedKey)) % $blockSize;
        for ($i = 1; $i <= $paddingLength; $i++) {
            $paddedKey .= chr($i);
        }
        if (!$usesEncryption) {
            $key = Strings::packSSH2('sssNss', 'none', 'none', '', 1, $publicKey, $paddedKey);
        } else {
            $rounds = isset($options['rounds']) ? $options['rounds'] : 16;
            $salt = Random::string(16);
            $kdfoptions = Strings::packSSH2('sN', $salt, $rounds);
            $crypto = new AES('ctr');
            $crypto->setPassword($password, 'bcrypt', $salt, $rounds, 32);
            $paddedKey = $crypto->encrypt($paddedKey);
            $key = Strings::packSSH2('sssNss', 'aes256-ctr', 'bcrypt', $kdfoptions, 1, $publicKey, $paddedKey);
        }
        $key = "openssh-key-v1\0$key";

        return "-----BEGIN OPENSSH PRIVATE KEY-----\n" .
               chunk_split(Strings::base64_encode($key), 70, "\n") .
               "-----END OPENSSH PRIVATE KEY-----\n";
    }
}
<?php

/**
 * PKCS Formatted Key Handler
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2015 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\Crypt\Common\Formats\Keys;

/**
 * PKCS1 Formatted Key Handler
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class PKCS
{
    /**
     * Auto-detect the format
     */
    const MODE_ANY = 0;
    /**
     * Require base64-encoded PEM's be supplied
     */
    const MODE_PEM = 1;
    /**
     * Require raw DER's be supplied
     */
    const MODE_DER = 2;
    /**#@-*/

    /**
     * Is the key a base-64 encoded PEM, DER or should it be auto-detected?
     *
     * @var int
     */
    protected static $format = self::MODE_ANY;

    /**
     * Require base64-encoded PEM's be supplied
     *
     */
    public static function requirePEM()
    {
        self::$format = self::MODE_PEM;
    }

    /**
     * Require raw DER's be supplied
     *
     */
    public static function requireDER()
    {
        self::$format = self::MODE_DER;
    }

    /**
     * Accept any format and auto detect the format
     *
     * This is the default setting
     *
     */
    public static function requireAny()
    {
        self::$format = self::MODE_ANY;
    }
}
<?php

/**
 * PKCS1 Formatted Key Handler
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2015 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\Crypt\Common\Formats\Keys;

use phpseclib3\Common\Functions\Strings;
use phpseclib3\Crypt\AES;
use phpseclib3\Crypt\DES;
use phpseclib3\Crypt\Random;
use phpseclib3\Crypt\TripleDES;
use phpseclib3\Exception\UnsupportedAlgorithmException;
use phpseclib3\File\ASN1;

/**
 * PKCS1 Formatted Key Handler
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class PKCS1 extends PKCS
{
    /**
     * Default encryption algorithm
     *
     * @var string
     */
    private static $defaultEncryptionAlgorithm = 'AES-128-CBC';

    /**
     * Sets the default encryption algorithm
     *
     * @param string $algo
     */
    public static function setEncryptionAlgorithm($algo)
    {
        self::$defaultEncryptionAlgorithm = $algo;
    }

    /**
     * Returns the mode constant corresponding to the mode string
     *
     * @param string $mode
     * @return int
     * @throws \UnexpectedValueException if the block cipher mode is unsupported
     */
    private static function getEncryptionMode($mode)
    {
        switch ($mode) {
            case 'CBC':
            case 'ECB':
            case 'CFB':
            case 'OFB':
            case 'CTR':
                return $mode;
        }
        throw new \UnexpectedValueException('Unsupported block cipher mode of operation');
    }

    /**
     * Returns a cipher object corresponding to a string
     *
     * @param string $algo
     * @return string
     * @throws \UnexpectedValueException if the encryption algorithm is unsupported
     */
    private static function getEncryptionObject($algo)
    {
        $modes = '(CBC|ECB|CFB|OFB|CTR)';
        switch (true) {
            case preg_match("#^AES-(128|192|256)-$modes$#", $algo, $matches):
                $cipher = new AES(self::getEncryptionMode($matches[2]));
                $cipher->setKeyLength($matches[1]);
                return $cipher;
            case preg_match("#^DES-EDE3-$modes$#", $algo, $matches):
                return new TripleDES(self::getEncryptionMode($matches[1]));
            case preg_match("#^DES-$modes$#", $algo, $matches):
                return new DES(self::getEncryptionMode($matches[1]));
            default:
                throw new UnsupportedAlgorithmException($algo . ' is not a supported algorithm');
        }
    }

    /**
     * Generate a symmetric key for PKCS#1 keys
     *
     * @param string $password
     * @param string $iv
     * @param int $length
     * @return string
     */
    private static function generateSymmetricKey($password, $iv, $length)
    {
        $symkey = '';
        $iv = substr($iv, 0, 8);
        while (strlen($symkey) < $length) {
            $symkey .= md5($symkey . $password . $iv, true);
        }
        return substr($symkey, 0, $length);
    }

    /**
     * Break a public or private key down into its constituent components
     *
     * @param string $key
     * @param string $password optional
     * @return array
     */
    protected static function load($key, $password)
    {
        if (!Strings::is_stringable($key)) {
            throw new \UnexpectedValueException('Key should be a string - not a ' . gettype($key));
        }

        /* Although PKCS#1 proposes a format that public and private keys can use, encrypting them is
           "outside the scope" of PKCS#1.  PKCS#1 then refers you to PKCS#12 and PKCS#15 if you're wanting to
           protect private keys, however, that's not what OpenSSL* does.  OpenSSL protects private keys by adding
           two new "fields" to the key - DEK-Info and Proc-Type.  These fields are discussed here:

           http://tools.ietf.org/html/rfc1421#section-4.6.1.1
           http://tools.ietf.org/html/rfc1421#section-4.6.1.3

           DES-EDE3-CBC as an algorithm, however, is not discussed anywhere, near as I can tell.
           DES-CBC and DES-EDE are discussed in RFC1423, however, DES-EDE3-CBC isn't, nor is its key derivation
           function.  As is, the definitive authority on this encoding scheme isn't the IETF but rather OpenSSL's
           own implementation.  ie. the implementation *is* the standard and any bugs that may exist in that
           implementation are part of the standard, as well.

           * OpenSSL is the de facto standard.  It's utilized by OpenSSH and other projects */
        if (preg_match('#DEK-Info: (.+),(.+)#', $key, $matches)) {
            $iv = Strings::hex2bin(trim($matches[2]));
            // remove the Proc-Type / DEK-Info sections as they're no longer needed
            $key = preg_replace('#^(?:Proc-Type|DEK-Info): .*#m', '', $key);
            $ciphertext = ASN1::extractBER($key);
            if ($ciphertext === false) {
                $ciphertext = $key;
            }
            $crypto = self::getEncryptionObject($matches[1]);
            $crypto->setKey(self::generateSymmetricKey($password, $iv, $crypto->getKeyLength() >> 3));
            $crypto->setIV($iv);
            $key = $crypto->decrypt($ciphertext);
        } else {
            if (self::$format != self::MODE_DER) {
                $decoded = ASN1::extractBER($key);
                if ($decoded !== false) {
                    $key = $decoded;
                } elseif (self::$format == self::MODE_PEM) {
                    throw new \UnexpectedValueException('Expected base64-encoded PEM format but was unable to decode base64 text');
                }
            }
        }

        return $key;
    }

    /**
     * Wrap a private key appropriately
     *
     * @param string $key
     * @param string $type
     * @param string $password
     * @param array $options optional
     * @return string
     */
    protected static function wrapPrivateKey($key, $type, $password, array $options = [])
    {
        if (empty($password) || !is_string($password)) {
            return "-----BEGIN $type PRIVATE KEY-----\r\n" .
                   chunk_split(Strings::base64_encode($key), 64) .
                   "-----END $type PRIVATE KEY-----";
        }

        $encryptionAlgorithm = isset($options['encryptionAlgorithm']) ? $options['encryptionAlgorithm'] : self::$defaultEncryptionAlgorithm;

        $cipher = self::getEncryptionObject($encryptionAlgorithm);
        $iv = Random::string($cipher->getBlockLength() >> 3);
        $cipher->setKey(self::generateSymmetricKey($password, $iv, $cipher->getKeyLength() >> 3));
        $cipher->setIV($iv);
        $iv = strtoupper(Strings::bin2hex($iv));
        return "-----BEGIN $type PRIVATE KEY-----\r\n" .
               "Proc-Type: 4,ENCRYPTED\r\n" .
               "DEK-Info: " . $encryptionAlgorithm . ",$iv\r\n" .
               "\r\n" .
               chunk_split(Strings::base64_encode($cipher->encrypt($key)), 64) .
               "-----END $type PRIVATE KEY-----";
    }

    /**
     * Wrap a public key appropriately
     *
     * @param string $key
     * @param string $type
     * @return string
     */
    protected static function wrapPublicKey($key, $type)
    {
        return "-----BEGIN $type PUBLIC KEY-----\r\n" .
               chunk_split(Strings::base64_encode($key), 64) .
               "-----END $type PUBLIC KEY-----";
    }
}
<?php

/**
 * PKCS#8 Formatted Key Handler
 *
 * PHP version 5
 *
 * Used by PHP's openssl_public_encrypt() and openssl's rsautl (when -pubin is set)
 *
 * Processes keys with the following headers:
 *
 * -----BEGIN ENCRYPTED PRIVATE KEY-----
 * -----BEGIN PRIVATE KEY-----
 * -----BEGIN PUBLIC KEY-----
 *
 * Analogous to ssh-keygen's pkcs8 format (as specified by -m). Although PKCS8
 * is specific to private keys it's basically creating a DER-encoded wrapper
 * for keys. This just extends that same concept to public keys (much like ssh-keygen)
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2015 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\Crypt\Common\Formats\Keys;

use phpseclib3\Common\Functions\Strings;
use phpseclib3\Crypt\AES;
use phpseclib3\Crypt\DES;
use phpseclib3\Crypt\Random;
use phpseclib3\Crypt\RC2;
use phpseclib3\Crypt\RC4;
use phpseclib3\Crypt\TripleDES;
use phpseclib3\Exception\InsufficientSetupException;
use phpseclib3\Exception\UnsupportedAlgorithmException;
use phpseclib3\File\ASN1;
use phpseclib3\File\ASN1\Maps;

/**
 * PKCS#8 Formatted Key Handler
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class PKCS8 extends PKCS
{
    /**
     * Default encryption algorithm
     *
     * @var string
     */
    private static $defaultEncryptionAlgorithm = 'id-PBES2';

    /**
     * Default encryption scheme
     *
     * Only used when defaultEncryptionAlgorithm is id-PBES2
     *
     * @var string
     */
    private static $defaultEncryptionScheme = 'aes128-CBC-PAD';

    /**
     * Default PRF
     *
     * Only used when defaultEncryptionAlgorithm is id-PBES2
     *
     * @var string
     */
    private static $defaultPRF = 'id-hmacWithSHA256';

    /**
     * Default Iteration Count
     *
     * @var int
     */
    private static $defaultIterationCount = 2048;

    /**
     * OIDs loaded
     *
     * @var bool
     */
    private static $oidsLoaded = false;

    /**
     * Binary key flag
     *
     * @var bool
     */
    private static $binary = false;

    /**
     * Sets the default encryption algorithm
     *
     * @param string $algo
     */
    public static function setEncryptionAlgorithm($algo)
    {
        self::$defaultEncryptionAlgorithm = $algo;
    }

    /**
     * Sets the default encryption algorithm for PBES2
     *
     * @param string $algo
     */
    public static function setEncryptionScheme($algo)
    {
        self::$defaultEncryptionScheme = $algo;
    }

    /**
     * Sets the iteration count
     *
     * @param int $count
     */
    public static function setIterationCount($count)
    {
        self::$defaultIterationCount = $count;
    }

    /**
     * Sets the PRF for PBES2
     *
     * @param string $algo
     */
    public static function setPRF($algo)
    {
        self::$defaultPRF = $algo;
    }

    /**
     * Returns a SymmetricKey object based on a PBES1 $algo
     *
     * @return \phpseclib3\Crypt\Common\SymmetricKey
     * @param string $algo
     */
    private static function getPBES1EncryptionObject($algo)
    {
        $algo = preg_match('#^pbeWith(?:MD2|MD5|SHA1|SHA)And(.*?)-CBC$#', $algo, $matches) ?
            $matches[1] :
            substr($algo, 13); // strlen('pbeWithSHAAnd') == 13

        switch ($algo) {
            case 'DES':
                $cipher = new DES('cbc');
                break;
            case 'RC2':
                $cipher = new RC2('cbc');
                $cipher->setKeyLength(64);
                break;
            case '3-KeyTripleDES':
                $cipher = new TripleDES('cbc');
                break;
            case '2-KeyTripleDES':
                $cipher = new TripleDES('cbc');
                $cipher->setKeyLength(128);
                break;
            case '128BitRC2':
                $cipher = new RC2('cbc');
                $cipher->setKeyLength(128);
                break;
            case '40BitRC2':
                $cipher = new RC2('cbc');
                $cipher->setKeyLength(40);
                break;
            case '128BitRC4':
                $cipher = new RC4();
                $cipher->setKeyLength(128);
                break;
            case '40BitRC4':
                $cipher = new RC4();
                $cipher->setKeyLength(40);
                break;
            default:
                throw new UnsupportedAlgorithmException("$algo is not a supported algorithm");
        }

        return $cipher;
    }

    /**
     * Returns a hash based on a PBES1 $algo
     *
     * @return string
     * @param string $algo
     */
    private static function getPBES1Hash($algo)
    {
        if (preg_match('#^pbeWith(MD2|MD5|SHA1|SHA)And.*?-CBC$#', $algo, $matches)) {
            return $matches[1] == 'SHA' ? 'sha1' : $matches[1];
        }

        return 'sha1';
    }

    /**
     * Returns a KDF baesd on a PBES1 $algo
     *
     * @return string
     * @param string $algo
     */
    private static function getPBES1KDF($algo)
    {
        switch ($algo) {
            case 'pbeWithMD2AndDES-CBC':
            case 'pbeWithMD2AndRC2-CBC':
            case 'pbeWithMD5AndDES-CBC':
            case 'pbeWithMD5AndRC2-CBC':
            case 'pbeWithSHA1AndDES-CBC':
            case 'pbeWithSHA1AndRC2-CBC':
                return 'pbkdf1';
        }

        return 'pkcs12';
    }

    /**
     * Returns a SymmetricKey object baesd on a PBES2 $algo
     *
     * @return SymmetricKey
     * @param string $algo
     */
    private static function getPBES2EncryptionObject($algo)
    {
        switch ($algo) {
            case 'desCBC':
                $cipher = new DES('cbc');
                break;
            case 'des-EDE3-CBC':
                $cipher = new TripleDES('cbc');
                break;
            case 'rc2CBC':
                $cipher = new RC2('cbc');
                // in theory this can be changed
                $cipher->setKeyLength(128);
                break;
            case 'rc5-CBC-PAD':
                throw new UnsupportedAlgorithmException('rc5-CBC-PAD is not supported for PBES2 PKCS#8 keys');
            case 'aes128-CBC-PAD':
            case 'aes192-CBC-PAD':
            case 'aes256-CBC-PAD':
                $cipher = new AES('cbc');
                $cipher->setKeyLength(substr($algo, 3, 3));
                break;
            default:
                throw new UnsupportedAlgorithmException("$algo is not supported");
        }

        return $cipher;
    }

    /**
     * Initialize static variables
     *
     */
    private static function initialize_static_variables()
    {
        if (!isset(static::$childOIDsLoaded)) {
            throw new InsufficientSetupException('This class should not be called directly');
        }

        if (!static::$childOIDsLoaded) {
            ASN1::loadOIDs(is_array(static::OID_NAME) ?
                array_combine(static::OID_NAME, static::OID_VALUE) :
                [static::OID_NAME => static::OID_VALUE]);
            static::$childOIDsLoaded = true;
        }
        if (!self::$oidsLoaded) {
            // from https://tools.ietf.org/html/rfc2898
            ASN1::loadOIDs([
               // PBES1 encryption schemes
               'pbeWithMD2AndDES-CBC' => '1.2.840.113549.1.5.1',
               'pbeWithMD2AndRC2-CBC' => '1.2.840.113549.1.5.4',
               'pbeWithMD5AndDES-CBC' => '1.2.840.113549.1.5.3',
               'pbeWithMD5AndRC2-CBC' => '1.2.840.113549.1.5.6',
               'pbeWithSHA1AndDES-CBC' => '1.2.840.113549.1.5.10',
               'pbeWithSHA1AndRC2-CBC' => '1.2.840.113549.1.5.11',

               // from PKCS#12:
               // https://tools.ietf.org/html/rfc7292
               'pbeWithSHAAnd128BitRC4' => '1.2.840.113549.1.12.1.1',
               'pbeWithSHAAnd40BitRC4' => '1.2.840.113549.1.12.1.2',
               'pbeWithSHAAnd3-KeyTripleDES-CBC' => '1.2.840.113549.1.12.1.3',
               'pbeWithSHAAnd2-KeyTripleDES-CBC' => '1.2.840.113549.1.12.1.4',
               'pbeWithSHAAnd128BitRC2-CBC' => '1.2.840.113549.1.12.1.5',
               'pbeWithSHAAnd40BitRC2-CBC' => '1.2.840.113549.1.12.1.6',

               'id-PBKDF2' => '1.2.840.113549.1.5.12',
               'id-PBES2' => '1.2.840.113549.1.5.13',
               'id-PBMAC1' => '1.2.840.113549.1.5.14',

               // from PKCS#5 v2.1:
               // http://www.rsa.com/rsalabs/pkcs/files/h11302-wp-pkcs5v2-1-password-based-cryptography-standard.pdf
               'id-hmacWithSHA1' => '1.2.840.113549.2.7',
               'id-hmacWithSHA224' => '1.2.840.113549.2.8',
               'id-hmacWithSHA256' => '1.2.840.113549.2.9',
               'id-hmacWithSHA384' => '1.2.840.113549.2.10',
               'id-hmacWithSHA512' => '1.2.840.113549.2.11',
               'id-hmacWithSHA512-224' => '1.2.840.113549.2.12',
               'id-hmacWithSHA512-256' => '1.2.840.113549.2.13',

               'desCBC'       => '1.3.14.3.2.7',
               'des-EDE3-CBC' => '1.2.840.113549.3.7',
               'rc2CBC' => '1.2.840.113549.3.2',
               'rc5-CBC-PAD' => '1.2.840.113549.3.9',

               'aes128-CBC-PAD' => '2.16.840.1.101.3.4.1.2',
               'aes192-CBC-PAD' => '2.16.840.1.101.3.4.1.22',
               'aes256-CBC-PAD' => '2.16.840.1.101.3.4.1.42'
            ]);
            self::$oidsLoaded = true;
        }
    }

    /**
     * Break a public or private key down into its constituent components
     *
     * @param string $key
     * @param string $password optional
     * @return array
     */
    protected static function load($key, $password = '')
    {
        if (!Strings::is_stringable($key)) {
            throw new \UnexpectedValueException('Key should be a string - not a ' . gettype($key));
        }

        $isPublic = strpos($key, 'PUBLIC') !== false;
        $isPrivate = strpos($key, 'PRIVATE') !== false;

        $decoded = self::preParse($key);

        $meta = [];

        $decrypted = ASN1::asn1map($decoded[0], Maps\EncryptedPrivateKeyInfo::MAP);
        if (strlen($password) && is_array($decrypted)) {
            $algorithm = $decrypted['encryptionAlgorithm']['algorithm'];
            switch ($algorithm) {
                // PBES1
                case 'pbeWithMD2AndDES-CBC':
                case 'pbeWithMD2AndRC2-CBC':
                case 'pbeWithMD5AndDES-CBC':
                case 'pbeWithMD5AndRC2-CBC':
                case 'pbeWithSHA1AndDES-CBC':
                case 'pbeWithSHA1AndRC2-CBC':
                case 'pbeWithSHAAnd3-KeyTripleDES-CBC':
                case 'pbeWithSHAAnd2-KeyTripleDES-CBC':
                case 'pbeWithSHAAnd128BitRC2-CBC':
                case 'pbeWithSHAAnd40BitRC2-CBC':
                case 'pbeWithSHAAnd128BitRC4':
                case 'pbeWithSHAAnd40BitRC4':
                    $cipher = self::getPBES1EncryptionObject($algorithm);
                    $hash = self::getPBES1Hash($algorithm);
                    $kdf = self::getPBES1KDF($algorithm);

                    $meta['meta']['algorithm'] = $algorithm;

                    $temp = ASN1::decodeBER($decrypted['encryptionAlgorithm']['parameters']);
                    if (!$temp) {
                        throw new \RuntimeException('Unable to decode BER');
                    }
                    $map = ASN1::asn1map($temp[0], Maps\PBEParameter::MAP);
                    $salt = $map['salt'];
                    $iterationCount = $map['iterationCount'];
                    $iterationCount = (int) $iterationCount->toString();
                    $cipher->setPassword($password, $kdf, $hash, $salt, $iterationCount);
                    $key = $cipher->decrypt($decrypted['encryptedData']);
                    $decoded = ASN1::decodeBER($key);
                    if (!$decoded) {
                        throw new \RuntimeException('Unable to decode BER 2');
                    }

                    break;
                case 'id-PBES2':
                    $meta['meta']['algorithm'] = $algorithm;

                    $temp = ASN1::decodeBER($decrypted['encryptionAlgorithm']['parameters']);
                    if (!$temp) {
                        throw new \RuntimeException('Unable to decode BER');
                    }
                    $temp = ASN1::asn1map($temp[0], Maps\PBES2params::MAP);
                    $keyDerivationFunc = $temp['keyDerivationFunc'];
                    $encryptionScheme = $temp['encryptionScheme'];

                    $cipher = self::getPBES2EncryptionObject($encryptionScheme['algorithm']);
                    $meta['meta']['cipher'] = $encryptionScheme['algorithm'];

                    $temp = ASN1::decodeBER($decrypted['encryptionAlgorithm']['parameters']);
                    if (!$temp) {
                        throw new \RuntimeException('Unable to decode BER');
                    }
                    $temp = ASN1::asn1map($temp[0], Maps\PBES2params::MAP);
                    $keyDerivationFunc = $temp['keyDerivationFunc'];
                    $encryptionScheme = $temp['encryptionScheme'];

                    if (!$cipher instanceof RC2) {
                        $cipher->setIV($encryptionScheme['parameters']['octetString']);
                    } else {
                        $temp = ASN1::decodeBER($encryptionScheme['parameters']);
                        if (!$temp) {
                            throw new \RuntimeException('Unable to decode BER');
                        }
                        $map = ASN1::asn1map($temp[0], Maps\RC2CBCParameter::MAP);
                        $rc2ParametersVersion = $map['rc2ParametersVersion'];
                        $iv = $map['iv'];
                        $effectiveKeyLength = (int) $rc2ParametersVersion->toString();
                        switch ($effectiveKeyLength) {
                            case 160:
                                $effectiveKeyLength = 40;
                                break;
                            case 120:
                                $effectiveKeyLength = 64;
                                break;
                            case 58:
                                $effectiveKeyLength = 128;
                                break;
                            //default: // should be >= 256
                        }
                        $cipher->setIV($iv);
                        $cipher->setKeyLength($effectiveKeyLength);
                    }

                    $meta['meta']['keyDerivationFunc'] = $keyDerivationFunc['algorithm'];
                    switch ($keyDerivationFunc['algorithm']) {
                        case 'id-PBKDF2':
                            $temp = ASN1::decodeBER($keyDerivationFunc['parameters']);
                            if (!$temp) {
                                throw new \RuntimeException('Unable to decode BER');
                            }
                            $params = ASN1::asn1map($temp[0], Maps\PBKDF2params::MAP);
                            if (empty($params['prf'])) {
                                $params['prf'] = ['algorithm' => 'id-hmacWithSHA1'];
                            }
                            $salt = $params['salt'];
                            $iterationCount = $params['iterationCount'];
                            $prf = $params['prf'];
                            $meta['meta']['prf'] = $prf['algorithm'];
                            $hash = str_replace('-', '/', substr($prf['algorithm'], 11));
                            $params = [
                                $password,
                                'pbkdf2',
                                $hash,
                                $salt,
                                (int) $iterationCount->toString()
                            ];
                            if (isset($keyLength)) {
                                $params[] = (int) $keyLength->toString();
                            }
                            $cipher->setPassword(...$params);
                            $key = $cipher->decrypt($decrypted['encryptedData']);
                            $decoded = ASN1::decodeBER($key);
                            if (!$decoded) {
                                throw new \RuntimeException('Unable to decode BER 3');
                            }
                            break;
                        default:
                            throw new UnsupportedAlgorithmException('Only PBKDF2 is supported for PBES2 PKCS#8 keys');
                    }
                    break;
                case 'id-PBMAC1':
                    //$temp = ASN1::decodeBER($decrypted['encryptionAlgorithm']['parameters']);
                    //$value = ASN1::asn1map($temp[0], Maps\PBMAC1params::MAP);
                    // since i can't find any implementation that does PBMAC1 it is unsupported
                    throw new UnsupportedAlgorithmException('Only PBES1 and PBES2 PKCS#8 keys are supported.');
                // at this point we'll assume that the key conforms to PublicKeyInfo
            }
        }

        $private = ASN1::asn1map($decoded[0], Maps\OneAsymmetricKey::MAP);
        if (is_array($private)) {
            if ($isPublic) {
                throw new \UnexpectedValueException('Human readable string claims public key but DER encoded string claims private key');
            }

            if (isset($private['privateKeyAlgorithm']['parameters']) && !$private['privateKeyAlgorithm']['parameters'] instanceof ASN1\Element && isset($decoded[0]['content'][1]['content'][1])) {
                $temp = $decoded[0]['content'][1]['content'][1];
                $private['privateKeyAlgorithm']['parameters'] = new ASN1\Element(substr($key, $temp['start'], $temp['length']));
            }
            if (is_array(static::OID_NAME)) {
                if (!in_array($private['privateKeyAlgorithm']['algorithm'], static::OID_NAME)) {
                    throw new UnsupportedAlgorithmException($private['privateKeyAlgorithm']['algorithm'] . ' is not a supported key type');
                }
            } else {
                if ($private['privateKeyAlgorithm']['algorithm'] != static::OID_NAME) {
                    throw new UnsupportedAlgorithmException('Only ' . static::OID_NAME . ' keys are supported; this is a ' . $private['privateKeyAlgorithm']['algorithm'] . ' key');
                }
            }
            if (isset($private['publicKey'])) {
                if ($private['publicKey'][0] != "\0") {
                    throw new \UnexpectedValueException('The first byte of the public key should be null - not ' . bin2hex($private['publicKey'][0]));
                }
                $private['publicKey'] = substr($private['publicKey'], 1);
            }
            return $private + $meta;
        }

        // EncryptedPrivateKeyInfo and PublicKeyInfo have largely identical "signatures". the only difference
        // is that the former has an octet string and the later has a bit string. the first byte of a bit
        // string represents the number of bits in the last byte that are to be ignored but, currently,
        // bit strings wanting a non-zero amount of bits trimmed are not supported
        $public = ASN1::asn1map($decoded[0], Maps\PublicKeyInfo::MAP);

        if (is_array($public)) {
            if ($isPrivate) {
                throw new \UnexpectedValueException('Human readable string claims private key but DER encoded string claims public key');
            }

            if ($public['publicKey'][0] != "\0") {
                throw new \UnexpectedValueException('The first byte of the public key should be null - not ' . bin2hex($public['publicKey'][0]));
            }
            if (is_array(static::OID_NAME)) {
                if (!in_array($public['publicKeyAlgorithm']['algorithm'], static::OID_NAME)) {
                    throw new UnsupportedAlgorithmException($public['publicKeyAlgorithm']['algorithm'] . ' is not a supported key type');
                }
            } else {
                if ($public['publicKeyAlgorithm']['algorithm'] != static::OID_NAME) {
                    throw new UnsupportedAlgorithmException('Only ' . static::OID_NAME . ' keys are supported; this is a ' . $public['publicKeyAlgorithm']['algorithm'] . ' key');
                }
            }
            if (isset($public['publicKeyAlgorithm']['parameters']) && !$public['publicKeyAlgorithm']['parameters'] instanceof ASN1\Element && isset($decoded[0]['content'][0]['content'][1])) {
                $temp = $decoded[0]['content'][0]['content'][1];
                $public['publicKeyAlgorithm']['parameters'] = new ASN1\Element(substr($key, $temp['start'], $temp['length']));
            }
            $public['publicKey'] = substr($public['publicKey'], 1);
            return $public;
        }

        throw new \RuntimeException('Unable to parse using either OneAsymmetricKey or PublicKeyInfo ASN1 maps');
    }

    /**
     * Toggle between binary (DER) and printable (PEM) keys
     *
     * Printable keys are what are generated by default.
     *
     * @param bool $enabled
     */
    public static function setBinaryOutput($enabled)
    {
        self::$binary = $enabled;
    }

    /**
     * Wrap a private key appropriately
     *
     * @param string $key
     * @param string $attr
     * @param mixed $params
     * @param string $password
     * @param string $oid optional
     * @param string $publicKey optional
     * @param array $options optional
     * @return string
     */
    protected static function wrapPrivateKey($key, $attr, $params, $password, $oid = null, $publicKey = '', array $options = [])
    {
        self::initialize_static_variables();

        $key = [
            'version' => 'v1',
            'privateKeyAlgorithm' => [
                'algorithm' => is_string(static::OID_NAME) ? static::OID_NAME : $oid
             ],
            'privateKey' => $key
        ];
        if ($oid != 'id-Ed25519' && $oid != 'id-Ed448') {
            $key['privateKeyAlgorithm']['parameters'] = $params;
        }
        if (!empty($attr)) {
            $key['attributes'] = $attr;
        }
        if (!empty($publicKey)) {
            $key['version'] = 'v2';
            $key['publicKey'] = $publicKey;
        }
        $key = ASN1::encodeDER($key, Maps\OneAsymmetricKey::MAP);
        if (!empty($password) && is_string($password)) {
            $salt = Random::string(8);

            $iterationCount = isset($options['iterationCount']) ? $options['iterationCount'] : self::$defaultIterationCount;
            $encryptionAlgorithm = isset($options['encryptionAlgorithm']) ? $options['encryptionAlgorithm'] : self::$defaultEncryptionAlgorithm;
            $encryptionScheme = isset($options['encryptionScheme']) ? $options['encryptionScheme'] : self::$defaultEncryptionScheme;
            $prf = isset($options['PRF']) ? $options['PRF'] : self::$defaultPRF;

            if ($encryptionAlgorithm == 'id-PBES2') {
                $crypto = self::getPBES2EncryptionObject($encryptionScheme);
                $hash = str_replace('-', '/', substr($prf, 11));
                $kdf = 'pbkdf2';
                $iv = Random::string($crypto->getBlockLength() >> 3);

                $PBKDF2params = [
                    'salt' => $salt,
                    'iterationCount' => $iterationCount,
                    'prf' => ['algorithm' => $prf, 'parameters' => null]
                ];
                $PBKDF2params = ASN1::encodeDER($PBKDF2params, Maps\PBKDF2params::MAP);

                if (!$crypto instanceof RC2) {
                    $params = ['octetString' => $iv];
                } else {
                    $params = [
                        'rc2ParametersVersion' => 58,
                        'iv' => $iv
                    ];
                    $params = ASN1::encodeDER($params, Maps\RC2CBCParameter::MAP);
                    $params = new ASN1\Element($params);
                }

                $params = [
                    'keyDerivationFunc' => [
                        'algorithm' => 'id-PBKDF2',
                        'parameters' => new ASN1\Element($PBKDF2params)
                    ],
                    'encryptionScheme' => [
                        'algorithm' => $encryptionScheme,
                        'parameters' => $params
                    ]
                ];
                $params = ASN1::encodeDER($params, Maps\PBES2params::MAP);

                $crypto->setIV($iv);
            } else {
                $crypto = self::getPBES1EncryptionObject($encryptionAlgorithm);
                $hash = self::getPBES1Hash($encryptionAlgorithm);
                $kdf = self::getPBES1KDF($encryptionAlgorithm);

                $params = [
                    'salt' => $salt,
                    'iterationCount' => $iterationCount
                ];
                $params = ASN1::encodeDER($params, Maps\PBEParameter::MAP);
            }
            $crypto->setPassword($password, $kdf, $hash, $salt, $iterationCount);
            $key = $crypto->encrypt($key);

            $key = [
                'encryptionAlgorithm' => [
                    'algorithm' => $encryptionAlgorithm,
                    'parameters' => new ASN1\Element($params)
                ],
                'encryptedData' => $key
            ];

            $key = ASN1::encodeDER($key, Maps\EncryptedPrivateKeyInfo::MAP);

            if (isset($options['binary']) ? $options['binary'] : self::$binary) {
                return $key;
            }

            return "-----BEGIN ENCRYPTED PRIVATE KEY-----\r\n" .
                   chunk_split(Strings::base64_encode($key), 64) .
                   "-----END ENCRYPTED PRIVATE KEY-----";
        }

        if (isset($options['binary']) ? $options['binary'] : self::$binary) {
            return $key;
        }

        return "-----BEGIN PRIVATE KEY-----\r\n" .
               chunk_split(Strings::base64_encode($key), 64) .
               "-----END PRIVATE KEY-----";
    }

    /**
     * Wrap a public key appropriately
     *
     * @param string $key
     * @param mixed $params
     * @param string $oid
     * @return string
     */
    protected static function wrapPublicKey($key, $params, $oid = null, array $options = [])
    {
        self::initialize_static_variables();

        $key = [
            'publicKeyAlgorithm' => [
                'algorithm' => is_string(static::OID_NAME) ? static::OID_NAME : $oid
            ],
            'publicKey' => "\0" . $key
        ];

        if ($oid != 'id-Ed25519' && $oid != 'id-Ed448') {
            $key['publicKeyAlgorithm']['parameters'] = $params;
        }

        $key = ASN1::encodeDER($key, Maps\PublicKeyInfo::MAP);

        if (isset($options['binary']) ? $options['binary'] : self::$binary) {
            return $key;
        }

        return "-----BEGIN PUBLIC KEY-----\r\n" .
               chunk_split(Strings::base64_encode($key), 64) .
               "-----END PUBLIC KEY-----";
    }

    /**
     * Perform some preliminary parsing of the key
     *
     * @param string $key
     * @return array
     */
    private static function preParse(&$key)
    {
        self::initialize_static_variables();

        if (self::$format != self::MODE_DER) {
            $decoded = ASN1::extractBER($key);
            if ($decoded !== false) {
                $key = $decoded;
            } elseif (self::$format == self::MODE_PEM) {
                throw new \UnexpectedValueException('Expected base64-encoded PEM format but was unable to decode base64 text');
            }
        }

        $decoded = ASN1::decodeBER($key);
        if (!$decoded) {
            throw new \RuntimeException('Unable to decode BER');
        }

        return $decoded;
    }

    /**
     * Returns the encryption parameters used by the key
     *
     * @param string $key
     * @return array
     */
    public static function extractEncryptionAlgorithm($key)
    {
        if (!Strings::is_stringable($key)) {
            throw new \UnexpectedValueException('Key should be a string - not a ' . gettype($key));
        }

        $decoded = self::preParse($key);

        $r = ASN1::asn1map($decoded[0], Maps\EncryptedPrivateKeyInfo::MAP);
        if (!is_array($r)) {
            throw new \RuntimeException('Unable to parse using EncryptedPrivateKeyInfo map');
        }

        if ($r['encryptionAlgorithm']['algorithm'] == 'id-PBES2') {
            $decoded = ASN1::decodeBER($r['encryptionAlgorithm']['parameters']->element);
            if (!$decoded) {
                throw new \RuntimeException('Unable to decode BER');
            }
            $r['encryptionAlgorithm']['parameters'] = ASN1::asn1map($decoded[0], Maps\PBES2params::MAP);

            $kdf = &$r['encryptionAlgorithm']['parameters']['keyDerivationFunc'];
            switch ($kdf['algorithm']) {
                case 'id-PBKDF2':
                    $decoded = ASN1::decodeBER($kdf['parameters']->element);
                    if (!$decoded) {
                        throw new \RuntimeException('Unable to decode BER');
                    }
                    $kdf['parameters'] = ASN1::asn1map($decoded[0], Maps\PBKDF2params::MAP);
            }
        }

        return $r['encryptionAlgorithm'];
    }
}
<?php

/**
 * PuTTY Formatted Key Handler
 *
 * See PuTTY's SSHPUBK.C and https://tartarus.org/~simon/putty-snapshots/htmldoc/AppendixC.html
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2016 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\Crypt\Common\Formats\Keys;

use phpseclib3\Common\Functions\Strings;
use phpseclib3\Crypt\AES;
use phpseclib3\Crypt\Hash;
use phpseclib3\Crypt\Random;
use phpseclib3\Exception\UnsupportedAlgorithmException;

/**
 * PuTTY Formatted Key Handler
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class PuTTY
{
    /**
     * Default comment
     *
     * @var string
     */
    private static $comment = 'phpseclib-generated-key';

    /**
     * Default version
     *
     * @var int
     */
    private static $version = 2;

    /**
     * Sets the default comment
     *
     * @param string $comment
     */
    public static function setComment($comment)
    {
        self::$comment = str_replace(["\r", "\n"], '', $comment);
    }

    /**
     * Sets the default version
     *
     * @param int $version
     */
    public static function setVersion($version)
    {
        if ($version != 2 && $version != 3) {
            throw new \RuntimeException('Only supported versions are 2 and 3');
        }
        self::$version = $version;
    }

    /**
     * Generate a symmetric key for PuTTY v2 keys
     *
     * @param string $password
     * @param int $length
     * @return string
     */
    private static function generateV2Key($password, $length)
    {
        $symkey = '';
        $sequence = 0;
        while (strlen($symkey) < $length) {
            $temp = pack('Na*', $sequence++, $password);
            $symkey .= Strings::hex2bin(sha1($temp));
        }
        return substr($symkey, 0, $length);
    }

    /**
     * Generate a symmetric key for PuTTY v3 keys
     *
     * @param string $password
     * @param string $flavour
     * @param int $memory
     * @param int $passes
     * @param string $salt
     * @return array
     */
    private static function generateV3Key($password, $flavour, $memory, $passes, $salt)
    {
        if (!function_exists('sodium_crypto_pwhash')) {
            throw new \RuntimeException('sodium_crypto_pwhash needs to exist for Argon2 password hasing');
        }

        switch ($flavour) {
            case 'Argon2i':
                $flavour = SODIUM_CRYPTO_PWHASH_ALG_ARGON2I13;
                break;
            case 'Argon2id':
                $flavour = SODIUM_CRYPTO_PWHASH_ALG_ARGON2ID13;
                break;
            default:
                throw new UnsupportedAlgorithmException('Only Argon2i and Argon2id are supported');
        }

        $length = 80; // keylen + ivlen + mac_keylen
        $temp = sodium_crypto_pwhash($length, $password, $salt, $passes, $memory << 10, $flavour);

        $symkey = substr($temp, 0, 32);
        $symiv = substr($temp, 32, 16);
        $hashkey = substr($temp, -32);

        return compact('symkey', 'symiv', 'hashkey');
    }

    /**
     * Break a public or private key down into its constituent components
     *
     * @param string $key
     * @param string $password
     * @return array
     */
    public static function load($key, $password)
    {
        if (!Strings::is_stringable($key)) {
            throw new \UnexpectedValueException('Key should be a string - not a ' . gettype($key));
        }

        if (strpos($key, 'BEGIN SSH2 PUBLIC KEY') !== false) {
            $lines = preg_split('#[\r\n]+#', $key);
            switch (true) {
                case $lines[0] != '---- BEGIN SSH2 PUBLIC KEY ----':
                    throw new \UnexpectedValueException('Key doesn\'t start with ---- BEGIN SSH2 PUBLIC KEY ----');
                case $lines[count($lines) - 1] != '---- END SSH2 PUBLIC KEY ----':
                    throw new \UnexpectedValueException('Key doesn\'t end with ---- END SSH2 PUBLIC KEY ----');
            }
            $lines = array_splice($lines, 1, -1);
            $lines = array_map(function ($line) {
                return rtrim($line, "\r\n");
            }, $lines);
            $data = $current = '';
            $values = [];
            $in_value = false;
            foreach ($lines as $line) {
                switch (true) {
                    case preg_match('#^(.*?): (.*)#', $line, $match):
                        $in_value = $line[strlen($line) - 1] == '\\';
                        $current = strtolower($match[1]);
                        $values[$current] = $in_value ? substr($match[2], 0, -1) : $match[2];
                        break;
                    case $in_value:
                        $in_value = $line[strlen($line) - 1] == '\\';
                        $values[$current] .= $in_value ? substr($line, 0, -1) : $line;
                        break;
                    default:
                        $data .= $line;
                }
            }

            $components = call_user_func([static::PUBLIC_HANDLER, 'load'], $data);
            if ($components === false) {
                throw new \UnexpectedValueException('Unable to decode public key');
            }
            $components += $values;
            $components['comment'] = str_replace(['\\\\', '\"'], ['\\', '"'], $values['comment']);

            return $components;
        }

        $components = [];

        $key = preg_split('#\r\n|\r|\n#', trim($key));
        if (Strings::shift($key[0], strlen('PuTTY-User-Key-File-')) != 'PuTTY-User-Key-File-') {
            return false;
        }
        $version = (int) Strings::shift($key[0], 3); // should be either "2: " or "3: 0" prior to int casting
        if ($version != 2 && $version != 3) {
            throw new \RuntimeException('Only v2 and v3 PuTTY private keys are supported');
        }
        $components['type'] = $type = rtrim($key[0]);
        if (!in_array($type, static::$types)) {
            $error = count(static::$types) == 1 ?
                'Only ' . static::$types[0] . ' keys are supported. ' :
                '';
            throw new UnsupportedAlgorithmException($error . 'This is an unsupported ' . $type . ' key');
        }
        $encryption = trim(preg_replace('#Encryption: (.+)#', '$1', $key[1]));
        $components['comment'] = trim(preg_replace('#Comment: (.+)#', '$1', $key[2]));

        $publicLength = trim(preg_replace('#Public-Lines: (\d+)#', '$1', $key[3]));
        $public = Strings::base64_decode(implode('', array_map('trim', array_slice($key, 4, $publicLength))));

        $source = Strings::packSSH2('ssss', $type, $encryption, $components['comment'], $public);

        $length = unpack('Nlength', Strings::shift($public, 4))['length'];
        $newtype = Strings::shift($public, $length);
        if ($newtype != $type) {
            throw new \RuntimeException('The binary type does not match the human readable type field');
        }

        $components['public'] = $public;

        switch ($version) {
            case 3:
                $hashkey = '';
                break;
            case 2:
                $hashkey = 'putty-private-key-file-mac-key';
        }

        $offset = $publicLength + 4;
        switch ($encryption) {
            case 'aes256-cbc':
                $crypto = new AES('cbc');
                switch ($version) {
                    case 3:
                        $flavour = trim(preg_replace('#Key-Derivation: (.*)#', '$1', $key[$offset++]));
                        $memory = trim(preg_replace('#Argon2-Memory: (\d+)#', '$1', $key[$offset++]));
                        $passes = trim(preg_replace('#Argon2-Passes: (\d+)#', '$1', $key[$offset++]));
                        $parallelism = trim(preg_replace('#Argon2-Parallelism: (\d+)#', '$1', $key[$offset++]));
                        $salt = Strings::hex2bin(trim(preg_replace('#Argon2-Salt: ([0-9a-f]+)#', '$1', $key[$offset++])));

                        $v3key = self::generateV3Key($password, $flavour, $memory, $passes, $salt);
                        $symkey = $v3key['symkey'];
                        $symiv = $v3key['symiv'];
                        $hashkey = $v3key['hashkey'];

                        break;
                    case 2:
                        $symkey = self::generateV2Key($password, 32);
                        $symiv = str_repeat("\0", $crypto->getBlockLength() >> 3);
                        $hashkey .= $password;
                }
        }

        switch ($version) {
            case 3:
                $hash = new Hash('sha256');
                $hash->setKey($hashkey);
                break;
            case 2:
                $hash = new Hash('sha1');
                $hash->setKey(sha1($hashkey, true));
        }

        $privateLength = trim(preg_replace('#Private-Lines: (\d+)#', '$1', $key[$offset++]));
        $private = Strings::base64_decode(implode('', array_map('trim', array_slice($key, $offset, $privateLength))));

        if ($encryption != 'none') {
            $crypto->setKey($symkey);
            $crypto->setIV($symiv);
            $crypto->disablePadding();
            $private = $crypto->decrypt($private);
        }

        $source .= Strings::packSSH2('s', $private);

        $hmac = trim(preg_replace('#Private-MAC: (.+)#', '$1', $key[$offset + $privateLength]));
        $hmac = Strings::hex2bin($hmac);

        if (!hash_equals($hash->hash($source), $hmac)) {
            throw new \UnexpectedValueException('MAC validation error');
        }

        $components['private'] = $private;

        return $components;
    }

    /**
     * Wrap a private key appropriately
     *
     * @param string $public
     * @param string $private
     * @param string $type
     * @param string $password
     * @param array $options optional
     * @return string
     */
    protected static function wrapPrivateKey($public, $private, $type, $password, array $options = [])
    {
        $encryption = (!empty($password) || is_string($password)) ? 'aes256-cbc' : 'none';
        $comment = isset($options['comment']) ? $options['comment'] : self::$comment;
        $version = isset($options['version']) ? $options['version'] : self::$version;

        $key = "PuTTY-User-Key-File-$version: $type\r\n";
        $key .= "Encryption: $encryption\r\n";
        $key .= "Comment: $comment\r\n";

        $public = Strings::packSSH2('s', $type) . $public;

        $source = Strings::packSSH2('ssss', $type, $encryption, $comment, $public);

        $public = Strings::base64_encode($public);
        $key .= "Public-Lines: " . ((strlen($public) + 63) >> 6) . "\r\n";
        $key .= chunk_split($public, 64);

        if (empty($password) && !is_string($password)) {
            $source .= Strings::packSSH2('s', $private);
            switch ($version) {
                case 3:
                    $hash = new Hash('sha256');
                    $hash->setKey('');
                    break;
                case 2:
                    $hash = new Hash('sha1');
                    $hash->setKey(sha1('putty-private-key-file-mac-key', true));
            }
        } else {
            $private .= Random::string(16 - (strlen($private) & 15));
            $source .= Strings::packSSH2('s', $private);
            $crypto = new AES('cbc');

            switch ($version) {
                case 3:
                    $salt = Random::string(16);
                    $key .= "Key-Derivation: Argon2id\r\n";
                    $key .= "Argon2-Memory: 8192\r\n";
                    $key .= "Argon2-Passes: 13\r\n";
                    $key .= "Argon2-Parallelism: 1\r\n";
                    $key .= "Argon2-Salt: " . Strings::bin2hex($salt) . "\r\n";
                    $v3key = self::generateV3Key($password, 'Argon2id', 8192, 13, $salt);
                    $symkey = $v3key['symkey'];
                    $symiv = $v3key['symiv'];
                    $hashkey = $v3key['hashkey'];

                    $hash = new Hash('sha256');
                    $hash->setKey($hashkey);

                    break;
                case 2:
                    $symkey = self::generateV2Key($password, 32);
                    $symiv = str_repeat("\0", $crypto->getBlockLength() >> 3);
                    $hashkey = 'putty-private-key-file-mac-key' . $password;

                    $hash = new Hash('sha1');
                    $hash->setKey(sha1($hashkey, true));
            }

            $crypto->setKey($symkey);
            $crypto->setIV($symiv);
            $crypto->disablePadding();
            $private = $crypto->encrypt($private);
            $mac = $hash->hash($source);
        }

        $private = Strings::base64_encode($private);
        $key .= 'Private-Lines: ' . ((strlen($private) + 63) >> 6) . "\r\n";
        $key .= chunk_split($private, 64);
        $key .= 'Private-MAC: ' . Strings::bin2hex($hash->hash($source)) . "\r\n";

        return $key;
    }

    /**
     * Wrap a public key appropriately
     *
     * This is basically the format described in RFC 4716 (https://tools.ietf.org/html/rfc4716)
     *
     * @param string $key
     * @param string $type
     * @return string
     */
    protected static function wrapPublicKey($key, $type)
    {
        $key = pack('Na*a*', strlen($type), $type, $key);
        $key = "---- BEGIN SSH2 PUBLIC KEY ----\r\n" .
               'Comment: "' . str_replace(['\\', '"'], ['\\\\', '\"'], self::$comment) . "\"\r\n" .
               chunk_split(Strings::base64_encode($key), 64) .
               '---- END SSH2 PUBLIC KEY ----';
        return $key;
    }
}
<?php

/**
 * Raw Signature Handler
 *
 * PHP version 5
 *
 * Handles signatures as arrays
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2016 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\Crypt\Common\Formats\Signature;

use phpseclib3\Math\BigInteger;

/**
 * Raw Signature Handler
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class Raw
{
    /**
     * Loads a signature
     *
     * @param array $sig
     * @return array|bool
     */
    public static function load($sig)
    {
        switch (true) {
            case !is_array($sig):
            case !isset($sig['r']) || !isset($sig['s']):
            case !$sig['r'] instanceof BigInteger:
            case !$sig['s'] instanceof BigInteger:
                return false;
        }

        return [
            'r' => $sig['r'],
            's' => $sig['s']
        ];
    }

    /**
     * Returns a signature in the appropriate format
     *
     * @param BigInteger $r
     * @param BigInteger $s
     * @return string
     */
    public static function save(BigInteger $r, BigInteger $s)
    {
        return compact('r', 's');
    }
}
<?php

/**
 * PrivateKey interface
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2009 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\Crypt\Common;

/**
 * PrivateKey interface
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
interface PrivateKey
{
    public function sign($message);
    //public function decrypt($ciphertext);
    public function getPublicKey();
    public function toString($type, array $options = []);

    /**
     * @param string|false $password
     * @return mixed
     */
    public function withPassword($password = false);
}
<?php

/**
 * PublicKey interface
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2009 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\Crypt\Common;

/**
 * PublicKey interface
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
interface PublicKey
{
    public function verify($message, $signature);
    //public function encrypt($plaintext);
    public function toString($type, array $options = []);
    public function getFingerprint($algorithm);
}
<?php

/**
 * Base Class for all stream ciphers
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @author    Hans-Juergen Petrich <petrich@tronic-media.com>
 * @copyright 2007 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\Crypt\Common;

/**
 * Base Class for all stream cipher classes
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class StreamCipher extends SymmetricKey
{
    /**
     * Block Length of the cipher
     *
     * Stream ciphers do not have a block size
     *
     * @see SymmetricKey::block_size
     * @var int
     */
    protected $block_size = 0;

    /**
     * Default Constructor.
     *
     * @see \phpseclib3\Crypt\Common\SymmetricKey::__construct()
     * @return StreamCipher
     */
    public function __construct()
    {
        parent::__construct('stream');
    }

    /**
     * Stream ciphers not use an IV
     *
     * @return bool
     */
    public function usesIV()
    {
        return false;
    }
}
<?php

/**
 * Base Class for all \phpseclib3\Crypt\* cipher classes
 *
 * PHP version 5
 *
 * Internally for phpseclib developers:
 *  If you plan to add a new cipher class, please note following rules:
 *
 *  - The new \phpseclib3\Crypt\* cipher class should extend \phpseclib3\Crypt\Common\SymmetricKey
 *
 *  - Following methods are then required to be overridden/overloaded:
 *
 *    - encryptBlock()
 *
 *    - decryptBlock()
 *
 *    - setupKey()
 *
 *  - All other methods are optional to be overridden/overloaded
 *
 *  - Look at the source code of the current ciphers how they extend \phpseclib3\Crypt\Common\SymmetricKey
 *    and take one of them as a start up for the new cipher class.
 *
 *  - Please read all the other comments/notes/hints here also for each class var/method
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @author    Hans-Juergen Petrich <petrich@tronic-media.com>
 * @copyright 2007 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\Crypt\Common;

use phpseclib3\Common\Functions\Strings;
use phpseclib3\Crypt\Blowfish;
use phpseclib3\Crypt\Hash;
use phpseclib3\Exception\BadDecryptionException;
use phpseclib3\Exception\BadModeException;
use phpseclib3\Exception\InconsistentSetupException;
use phpseclib3\Exception\InsufficientSetupException;
use phpseclib3\Exception\UnsupportedAlgorithmException;
use phpseclib3\Math\BigInteger;
use phpseclib3\Math\BinaryField;
use phpseclib3\Math\PrimeField;

/**
 * Base Class for all \phpseclib3\Crypt\* cipher classes
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 * @author  Hans-Juergen Petrich <petrich@tronic-media.com>
 */
abstract class SymmetricKey
{
    /**
     * Encrypt / decrypt using the Counter mode.
     *
     * Set to -1 since that's what Crypt/Random.php uses to index the CTR mode.
     *
     * @link http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Counter_.28CTR.29
     * @see \phpseclib3\Crypt\Common\SymmetricKey::encrypt()
     * @see \phpseclib3\Crypt\Common\SymmetricKey::decrypt()
     */
    const MODE_CTR = -1;
    /**
     * Encrypt / decrypt using the Electronic Code Book mode.
     *
     * @link http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Electronic_codebook_.28ECB.29
     * @see \phpseclib3\Crypt\Common\SymmetricKey::encrypt()
     * @see \phpseclib3\Crypt\Common\SymmetricKey::decrypt()
     */
    const MODE_ECB = 1;
    /**
     * Encrypt / decrypt using the Code Book Chaining mode.
     *
     * @link http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Cipher-block_chaining_.28CBC.29
     * @see \phpseclib3\Crypt\Common\SymmetricKey::encrypt()
     * @see \phpseclib3\Crypt\Common\SymmetricKey::decrypt()
     */
    const MODE_CBC = 2;
    /**
     * Encrypt / decrypt using the Cipher Feedback mode.
     *
     * @link http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Cipher_feedback_.28CFB.29
     * @see \phpseclib3\Crypt\Common\SymmetricKey::encrypt()
     * @see \phpseclib3\Crypt\Common\SymmetricKey::decrypt()
     */
    const MODE_CFB = 3;
    /**
     * Encrypt / decrypt using the Cipher Feedback mode (8bit)
     *
     * @see \phpseclib3\Crypt\Common\SymmetricKey::encrypt()
     * @see \phpseclib3\Crypt\Common\SymmetricKey::decrypt()
     */
    const MODE_CFB8 = 7;
    /**
     * Encrypt / decrypt using the Output Feedback mode (8bit)
     *
     * @see \phpseclib3\Crypt\Common\SymmetricKey::encrypt()
     * @see \phpseclib3\Crypt\Common\SymmetricKey::decrypt()
     */
    const MODE_OFB8 = 8;
    /**
     * Encrypt / decrypt using the Output Feedback mode.
     *
     * @link http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Output_feedback_.28OFB.29
     * @see \phpseclib3\Crypt\Common\SymmetricKey::encrypt()
     * @see \phpseclib3\Crypt\Common\SymmetricKey::decrypt()
     */
    const MODE_OFB = 4;
    /**
     * Encrypt / decrypt using Galois/Counter mode.
     *
     * @link https://en.wikipedia.org/wiki/Galois/Counter_Mode
     * @see \phpseclib3\Crypt\Common\SymmetricKey::encrypt()
     * @see \phpseclib3\Crypt\Common\SymmetricKey::decrypt()
     */
    const MODE_GCM = 5;
    /**
     * Encrypt / decrypt using streaming mode.
     *
     * @see \phpseclib3\Crypt\Common\SymmetricKey::encrypt()
     * @see \phpseclib3\Crypt\Common\SymmetricKey::decrypt()
     */
    const MODE_STREAM = 6;

    /**
     * Mode Map
     *
     * @see \phpseclib3\Crypt\Common\SymmetricKey::__construct()
     */
    const MODE_MAP = [
        'ctr'    => self::MODE_CTR,
        'ecb'    => self::MODE_ECB,
        'cbc'    => self::MODE_CBC,
        'cfb'    => self::MODE_CFB,
        'cfb8'   => self::MODE_CFB8,
        'ofb'    => self::MODE_OFB,
        'ofb8'   => self::MODE_OFB8,
        'gcm'    => self::MODE_GCM,
        'stream' => self::MODE_STREAM
    ];

    /**
     * Base value for the internal implementation $engine switch
     *
     * @see \phpseclib3\Crypt\Common\SymmetricKey::__construct()
     */
    const ENGINE_INTERNAL = 1;
    /**
     * Base value for the eval() implementation $engine switch
     *
     * @see \phpseclib3\Crypt\Common\SymmetricKey::__construct()
     */
    const ENGINE_EVAL = 2;
    /**
     * Base value for the mcrypt implementation $engine switch
     *
     * @see \phpseclib3\Crypt\Common\SymmetricKey::__construct()
     */
    const ENGINE_MCRYPT = 3;
    /**
     * Base value for the openssl implementation $engine switch
     *
     * @see \phpseclib3\Crypt\Common\SymmetricKey::__construct()
     */
    const ENGINE_OPENSSL = 4;
    /**
     * Base value for the libsodium implementation $engine switch
     *
     * @see \phpseclib3\Crypt\Common\SymmetricKey::__construct()
     */
    const ENGINE_LIBSODIUM = 5;
    /**
     * Base value for the openssl / gcm implementation $engine switch
     *
     * @see \phpseclib3\Crypt\Common\SymmetricKey::__construct()
     */
    const ENGINE_OPENSSL_GCM = 6;

    /**
     * Engine Reverse Map
     *
     * @see \phpseclib3\Crypt\Common\SymmetricKey::getEngine()
     */
    const ENGINE_MAP = [
        self::ENGINE_INTERNAL    => 'PHP',
        self::ENGINE_EVAL        => 'Eval',
        self::ENGINE_MCRYPT      => 'mcrypt',
        self::ENGINE_OPENSSL     => 'OpenSSL',
        self::ENGINE_LIBSODIUM   => 'libsodium',
        self::ENGINE_OPENSSL_GCM => 'OpenSSL (GCM)'
    ];

    /**
     * The Encryption Mode
     *
     * @see self::__construct()
     * @var int
     */
    protected $mode;

    /**
     * The Block Length of the block cipher
     *
     * @var int
     */
    protected $block_size = 16;

    /**
     * The Key
     *
     * @see self::setKey()
     * @var string
     */
    protected $key = false;

    /**
     * HMAC Key
     *
     * @see self::setupGCM()
     * @var ?string
     */
    protected $hKey = false;

    /**
     * The Initialization Vector
     *
     * @see self::setIV()
     * @var string
     */
    protected $iv = false;

    /**
     * A "sliding" Initialization Vector
     *
     * @see self::enableContinuousBuffer()
     * @see self::clearBuffers()
     * @var string
     */
    protected $encryptIV;

    /**
     * A "sliding" Initialization Vector
     *
     * @see self::enableContinuousBuffer()
     * @see self::clearBuffers()
     * @var string
     */
    protected $decryptIV;

    /**
     * Continuous Buffer status
     *
     * @see self::enableContinuousBuffer()
     * @var bool
     */
    protected $continuousBuffer = false;

    /**
     * Encryption buffer for CTR, OFB and CFB modes
     *
     * @see self::encrypt()
     * @see self::clearBuffers()
     * @var array
     */
    protected $enbuffer;

    /**
     * Decryption buffer for CTR, OFB and CFB modes
     *
     * @see self::decrypt()
     * @see self::clearBuffers()
     * @var array
     */
    protected $debuffer;

    /**
     * mcrypt resource for encryption
     *
     * The mcrypt resource can be recreated every time something needs to be created or it can be created just once.
     * Since mcrypt operates in continuous mode, by default, it'll need to be recreated when in non-continuous mode.
     *
     * @see self::encrypt()
     * @var resource
     */
    private $enmcrypt;

    /**
     * mcrypt resource for decryption
     *
     * The mcrypt resource can be recreated every time something needs to be created or it can be created just once.
     * Since mcrypt operates in continuous mode, by default, it'll need to be recreated when in non-continuous mode.
     *
     * @see self::decrypt()
     * @var resource
     */
    private $demcrypt;

    /**
     * Does the enmcrypt resource need to be (re)initialized?
     *
     * @see \phpseclib3\Crypt\Twofish::setKey()
     * @see \phpseclib3\Crypt\Twofish::setIV()
     * @var bool
     */
    private $enchanged = true;

    /**
     * Does the demcrypt resource need to be (re)initialized?
     *
     * @see \phpseclib3\Crypt\Twofish::setKey()
     * @see \phpseclib3\Crypt\Twofish::setIV()
     * @var bool
     */
    private $dechanged = true;

    /**
     * mcrypt resource for CFB mode
     *
     * mcrypt's CFB mode, in (and only in) buffered context,
     * is broken, so phpseclib implements the CFB mode by it self,
     * even when the mcrypt php extension is available.
     *
     * In order to do the CFB-mode work (fast) phpseclib
     * use a separate ECB-mode mcrypt resource.
     *
     * @link http://phpseclib.sourceforge.net/cfb-demo.phps
     * @see self::encrypt()
     * @see self::decrypt()
     * @see self::setupMcrypt()
     * @var resource
     */
    private $ecb;

    /**
     * Optimizing value while CFB-encrypting
     *
     * Only relevant if $continuousBuffer enabled
     * and $engine == self::ENGINE_MCRYPT
     *
     * It's faster to re-init $enmcrypt if
     * $buffer bytes > $cfb_init_len than
     * using the $ecb resource furthermore.
     *
     * This value depends of the chosen cipher
     * and the time it would be needed for it's
     * initialization [by mcrypt_generic_init()]
     * which, typically, depends on the complexity
     * on its internaly Key-expanding algorithm.
     *
     * @see self::encrypt()
     * @var int
     */
    protected $cfb_init_len = 600;

    /**
     * Does internal cipher state need to be (re)initialized?
     *
     * @see self::setKey()
     * @see self::setIV()
     * @see self::disableContinuousBuffer()
     * @var bool
     */
    protected $changed = true;

    /**
     * Does Eval engie need to be (re)initialized?
     *
     * @see self::setup()
     * @var bool
     */
    protected $nonIVChanged = true;

    /**
     * Padding status
     *
     * @see self::enablePadding()
     * @var bool
     */
    private $padding = true;

    /**
     * Is the mode one that is paddable?
     *
     * @see self::__construct()
     * @var bool
     */
    private $paddable = false;

    /**
     * Holds which crypt engine internaly should be use,
     * which will be determined automatically on __construct()
     *
     * Currently available $engines are:
     * - self::ENGINE_LIBSODIUM   (very fast, php-extension: libsodium, extension_loaded('libsodium') required)
     * - self::ENGINE_OPENSSL_GCM (very fast, php-extension: openssl, extension_loaded('openssl') required)
     * - self::ENGINE_OPENSSL     (very fast, php-extension: openssl, extension_loaded('openssl') required)
     * - self::ENGINE_MCRYPT      (fast, php-extension: mcrypt, extension_loaded('mcrypt') required)
     * - self::ENGINE_EVAL        (medium, pure php-engine, no php-extension required)
     * - self::ENGINE_INTERNAL    (slower, pure php-engine, no php-extension required)
     *
     * @see self::setEngine()
     * @see self::encrypt()
     * @see self::decrypt()
     * @var int
     */
    protected $engine;

    /**
     * Holds the preferred crypt engine
     *
     * @see self::setEngine()
     * @see self::setPreferredEngine()
     * @var int
     */
    private $preferredEngine;

    /**
     * The mcrypt specific name of the cipher
     *
     * Only used if $engine == self::ENGINE_MCRYPT
     *
     * @link http://www.php.net/mcrypt_module_open
     * @link http://www.php.net/mcrypt_list_algorithms
     * @see self::setupMcrypt()
     * @var string
     */
    protected $cipher_name_mcrypt;

    /**
     * The openssl specific name of the cipher
     *
     * Only used if $engine == self::ENGINE_OPENSSL
     *
     * @link http://www.php.net/openssl-get-cipher-methods
     * @var string
     */
    protected $cipher_name_openssl;

    /**
     * The openssl specific name of the cipher in ECB mode
     *
     * If OpenSSL does not support the mode we're trying to use (CTR)
     * it can still be emulated with ECB mode.
     *
     * @link http://www.php.net/openssl-get-cipher-methods
     * @var string
     */
    protected $cipher_name_openssl_ecb;

    /**
     * The default salt used by setPassword()
     *
     * @see self::setPassword()
     * @var string
     */
    private $password_default_salt = 'phpseclib/salt';

    /**
     * The name of the performance-optimized callback function
     *
     * Used by encrypt() / decrypt()
     * only if $engine == self::ENGINE_INTERNAL
     *
     * @see self::encrypt()
     * @see self::decrypt()
     * @see self::setupInlineCrypt()
     * @var Callback
     */
    protected $inline_crypt;

    /**
     * If OpenSSL can be used in ECB but not in CTR we can emulate CTR
     *
     * @see self::openssl_ctr_process()
     * @var bool
     */
    private $openssl_emulate_ctr = false;

    /**
     * Don't truncate / null pad key
     *
     * @see self::clearBuffers()
     * @var bool
     */
    private $skip_key_adjustment = false;

    /**
     * Has the key length explicitly been set or should it be derived from the key, itself?
     *
     * @see self::setKeyLength()
     * @var bool
     */
    protected $explicit_key_length = false;

    /**
     * Hash subkey for GHASH
     *
     * @see self::setupGCM()
     * @see self::ghash()
     * @var BinaryField\Integer
     */
    private $h;

    /**
     * Additional authenticated data
     *
     * @var string
     */
    protected $aad = '';

    /**
     * Authentication Tag produced after a round of encryption
     *
     * @var string
     */
    protected $newtag = false;

    /**
     * Authentication Tag to be verified during decryption
     *
     * @var string
     */
    protected $oldtag = false;

    /**
     * GCM Binary Field
     *
     * @see self::__construct()
     * @see self::ghash()
     * @var BinaryField
     */
    private static $gcmField;

    /**
     * Poly1305 Prime Field
     *
     * @see self::enablePoly1305()
     * @see self::poly1305()
     * @var PrimeField
     */
    private static $poly1305Field;

    /**
     * Flag for using regular vs "safe" intval
     *
     * @see self::initialize_static_variables()
     * @var boolean
     */
    protected static $use_reg_intval;

    /**
     * Poly1305 Key
     *
     * @see self::setPoly1305Key()
     * @see self::poly1305()
     * @var string
     */
    protected $poly1305Key;

    /**
     * Poly1305 Flag
     *
     * @see self::setPoly1305Key()
     * @see self::enablePoly1305()
     * @var boolean
     */
    protected $usePoly1305 = false;

    /**
     * The Original Initialization Vector
     *
     * GCM uses the nonce to build the IV but we want to be able to distinguish between nonce-derived
     * IV's and user-set IV's
     *
     * @see self::setIV()
     * @var string
     */
    private $origIV = false;

    /**
     * Nonce
     *
     * Only used with GCM. We could re-use setIV() but nonce's can be of a different length and
     * toggling between GCM and other modes could be more complicated if we re-used setIV()
     *
     * @see self::setNonce()
     * @var string
     */
    protected $nonce = false;

    /**
     * Default Constructor.
     *
     * $mode could be:
     *
     * - ecb
     *
     * - cbc
     *
     * - ctr
     *
     * - cfb
     *
     * - cfb8
     *
     * - ofb
     *
     * - ofb8
     *
     * - gcm
     *
     * @param string $mode
     * @throws BadModeException if an invalid / unsupported mode is provided
     */
    public function __construct($mode)
    {
        $mode = strtolower($mode);
        // necessary because of 5.6 compatibility; we can't do isset(self::MODE_MAP[$mode]) in 5.6
        $map = self::MODE_MAP;
        if (!isset($map[$mode])) {
            throw new BadModeException('No valid mode has been specified');
        }

        $mode = self::MODE_MAP[$mode];

        // $mode dependent settings
        switch ($mode) {
            case self::MODE_ECB:
            case self::MODE_CBC:
                $this->paddable = true;
                break;
            case self::MODE_CTR:
            case self::MODE_CFB:
            case self::MODE_CFB8:
            case self::MODE_OFB:
            case self::MODE_OFB8:
            case self::MODE_STREAM:
                $this->paddable = false;
                break;
            case self::MODE_GCM:
                if ($this->block_size != 16) {
                    throw new BadModeException('GCM is only valid for block ciphers with a block size of 128 bits');
                }
                if (!isset(self::$gcmField)) {
                    self::$gcmField = new BinaryField(128, 7, 2, 1, 0);
                }
                $this->paddable = false;
                break;
            default:
                throw new BadModeException('No valid mode has been specified');
        }

        $this->mode = $mode;

        static::initialize_static_variables();
    }

    /**
     * Initialize static variables
     */
    protected static function initialize_static_variables()
    {
        if (!isset(self::$use_reg_intval)) {
            switch (true) {
                // PHP_OS & "\xDF\xDF\xDF" == strtoupper(substr(PHP_OS, 0, 3)), but a lot faster
                case (PHP_OS & "\xDF\xDF\xDF") === 'WIN':
                case !function_exists('php_uname'):
                case !is_string(php_uname('m')):
                case (php_uname('m') & "\xDF\xDF\xDF") != 'ARM':
                case defined('PHP_INT_SIZE') && PHP_INT_SIZE == 8:
                    self::$use_reg_intval = true;
                    break;
                case (php_uname('m') & "\xDF\xDF\xDF") == 'ARM':
                    switch (true) {
                        /* PHP 7.0.0 introduced a bug that affected 32-bit ARM processors:

                           https://github.com/php/php-src/commit/716da71446ebbd40fa6cf2cea8a4b70f504cc3cd

                           altho the changelogs make no mention of it, this bug was fixed with this commit:

                           https://github.com/php/php-src/commit/c1729272b17a1fe893d1a54e423d3b71470f3ee8

                           affected versions of PHP are: 7.0.x, 7.1.0 - 7.1.23 and 7.2.0 - 7.2.11 */
                        case PHP_VERSION_ID >= 70000 && PHP_VERSION_ID <= 70123:
                        case PHP_VERSION_ID >= 70200 && PHP_VERSION_ID <= 70211:
                            self::$use_reg_intval = false;
                            break;
                        default:
                            self::$use_reg_intval = true;
                    }
            }
        }
    }

    /**
     * Sets the initialization vector.
     *
     * setIV() is not required when ecb or gcm modes are being used.
     *
     * {@internal Can be overwritten by a sub class, but does not have to be}
     *
     * @param string $iv
     * @throws \LengthException if the IV length isn't equal to the block size
     * @throws \BadMethodCallException if an IV is provided when one shouldn't be
     */
    public function setIV($iv)
    {
        if ($this->mode == self::MODE_ECB) {
            throw new \BadMethodCallException('This mode does not require an IV.');
        }

        if ($this->mode == self::MODE_GCM) {
            throw new \BadMethodCallException('Use setNonce instead');
        }

        if (!$this->usesIV()) {
            throw new \BadMethodCallException('This algorithm does not use an IV.');
        }

        if (strlen($iv) != $this->block_size) {
            throw new \LengthException('Received initialization vector of size ' . strlen($iv) . ', but size ' . $this->block_size . ' is required');
        }

        $this->iv = $this->origIV = $iv;
        $this->changed = true;
    }

    /**
     * Enables Poly1305 mode.
     *
     * Once enabled Poly1305 cannot be disabled.
     *
     * @throws \BadMethodCallException if Poly1305 is enabled whilst in GCM mode
     */
    public function enablePoly1305()
    {
        if ($this->mode == self::MODE_GCM) {
            throw new \BadMethodCallException('Poly1305 cannot be used in GCM mode');
        }

        $this->usePoly1305 = true;
    }

    /**
     * Enables Poly1305 mode.
     *
     * Once enabled Poly1305 cannot be disabled. If $key is not passed then an attempt to call createPoly1305Key
     * will be made.
     *
     * @param string $key optional
     * @throws \LengthException if the key isn't long enough
     * @throws \BadMethodCallException if Poly1305 is enabled whilst in GCM mode
     */
    public function setPoly1305Key($key = null)
    {
        if ($this->mode == self::MODE_GCM) {
            throw new \BadMethodCallException('Poly1305 cannot be used in GCM mode');
        }

        if (!is_string($key) || strlen($key) != 32) {
            throw new \LengthException('The Poly1305 key must be 32 bytes long (256 bits)');
        }

        if (!isset(self::$poly1305Field)) {
            // 2^130-5
            self::$poly1305Field = new PrimeField(new BigInteger('3fffffffffffffffffffffffffffffffb', 16));
        }

        $this->poly1305Key = $key;
        $this->usePoly1305 = true;
    }

    /**
     * Sets the nonce.
     *
     * setNonce() is only required when gcm is used
     *
     * @param string $nonce
     * @throws \BadMethodCallException if an nonce is provided when one shouldn't be
     */
    public function setNonce($nonce)
    {
        if ($this->mode != self::MODE_GCM) {
            throw new \BadMethodCallException('Nonces are only used in GCM mode.');
        }

        $this->nonce = $nonce;
        $this->setEngine();
    }

    /**
     * Sets additional authenticated data
     *
     * setAAD() is only used by gcm or in poly1305 mode
     *
     * @param string $aad
     * @throws \BadMethodCallException if mode isn't GCM or if poly1305 isn't being utilized
     */
    public function setAAD($aad)
    {
        if ($this->mode != self::MODE_GCM && !$this->usePoly1305) {
            throw new \BadMethodCallException('Additional authenticated data is only utilized in GCM mode or with Poly1305');
        }

        $this->aad = $aad;
    }

    /**
     * Returns whether or not the algorithm uses an IV
     *
     * @return bool
     */
    public function usesIV()
    {
        return $this->mode != self::MODE_GCM && $this->mode != self::MODE_ECB;
    }

    /**
     * Returns whether or not the algorithm uses a nonce
     *
     * @return bool
     */
    public function usesNonce()
    {
        return $this->mode == self::MODE_GCM;
    }

    /**
     * Returns the current key length in bits
     *
     * @return int
     */
    public function getKeyLength()
    {
        return $this->key_length << 3;
    }

    /**
     * Returns the current block length in bits
     *
     * @return int
     */
    public function getBlockLength()
    {
        return $this->block_size << 3;
    }

    /**
     * Returns the current block length in bytes
     *
     * @return int
     */
    public function getBlockLengthInBytes()
    {
        return $this->block_size;
    }

    /**
     * Sets the key length.
     *
     * Keys with explicitly set lengths need to be treated accordingly
     *
     * @param int $length
     */
    public function setKeyLength($length)
    {
        $this->explicit_key_length = $length >> 3;

        if (is_string($this->key) && strlen($this->key) != $this->explicit_key_length) {
            $this->key = false;
            throw new InconsistentSetupException('Key has already been set and is not ' . $this->explicit_key_length . ' bytes long');
        }
    }

    /**
     * Sets the key.
     *
     * The min/max length(s) of the key depends on the cipher which is used.
     * If the key not fits the length(s) of the cipher it will paded with null bytes
     * up to the closest valid key length.  If the key is more than max length,
     * we trim the excess bits.
     *
     * If the key is not explicitly set, it'll be assumed to be all null bytes.
     *
     * {@internal Could, but not must, extend by the child Crypt_* class}
     *
     * @param string $key
     */
    public function setKey($key)
    {
        if ($this->explicit_key_length !== false && strlen($key) != $this->explicit_key_length) {
            throw new InconsistentSetupException('Key length has already been set to ' . $this->explicit_key_length . ' bytes and this key is ' . strlen($key) . ' bytes');
        }

        $this->key = $key;
        $this->key_length = strlen($key);
        $this->setEngine();
    }

    /**
     * Sets the password.
     *
     * Depending on what $method is set to, setPassword()'s (optional) parameters are as follows:
     *     {@link http://en.wikipedia.org/wiki/PBKDF2 pbkdf2} or pbkdf1:
     *         $hash, $salt, $count, $dkLen
     *
     *         Where $hash (default = sha1) currently supports the following hashes: see: Crypt/Hash.php
     *     {@link https://en.wikipedia.org/wiki/Bcrypt bcypt}:
     *         $salt, $rounds, $keylen
     *
     *         This is a modified version of bcrypt used by OpenSSH.
     *
     * {@internal Could, but not must, extend by the child Crypt_* class}
     *
     * @see Crypt/Hash.php
     * @param string $password
     * @param string $method
     * @param int|string ...$func_args
     * @throws \LengthException if pbkdf1 is being used and the derived key length exceeds the hash length
     * @throws \RuntimeException if bcrypt is being used and a salt isn't provided
     * @return bool
     */
    public function setPassword($password, $method = 'pbkdf2', ...$func_args)
    {
        $key = '';

        $method = strtolower($method);
        switch ($method) {
            case 'bcrypt':
                if (!isset($func_args[2])) {
                    throw new \RuntimeException('A salt must be provided for bcrypt to work');
                }

                $salt = $func_args[0];

                $rounds = isset($func_args[1]) ? $func_args[1] : 16;
                $keylen = isset($func_args[2]) ? $func_args[2] : $this->key_length;

                $key = Blowfish::bcrypt_pbkdf($password, $salt, $keylen + $this->block_size, $rounds);

                $this->setKey(substr($key, 0, $keylen));
                $this->setIV(substr($key, $keylen));

                return true;
            case 'pkcs12': // from https://tools.ietf.org/html/rfc7292#appendix-B.2
            case 'pbkdf1':
            case 'pbkdf2':
                // Hash function
                $hash = isset($func_args[0]) ? strtolower($func_args[0]) : 'sha1';
                $hashObj = new Hash();
                $hashObj->setHash($hash);

                // WPA and WPA2 use the SSID as the salt
                $salt = isset($func_args[1]) ? $func_args[1] : $this->password_default_salt;

                // RFC2898#section-4.2 uses 1,000 iterations by default
                // WPA and WPA2 use 4,096.
                $count = isset($func_args[2]) ? $func_args[2] : 1000;

                // Keylength
                if (isset($func_args[3])) {
                    if ($func_args[3] <= 0) {
                        throw new \LengthException('Derived key length cannot be longer 0 or less');
                    }
                    $dkLen = $func_args[3];
                } else {
                    $key_length = $this->explicit_key_length !== false ? $this->explicit_key_length : $this->key_length;
                    $dkLen = $method == 'pbkdf1' ? 2 * $key_length : $key_length;
                }

                switch (true) {
                    case $method == 'pkcs12':
                        /*
                         In this specification, however, all passwords are created from
                         BMPStrings with a NULL terminator.  This means that each character in
                         the original BMPString is encoded in 2 bytes in big-endian format
                         (most-significant byte first).  There are no Unicode byte order
                         marks.  The 2 bytes produced from the last character in the BMPString
                         are followed by 2 additional bytes with the value 0x00.

                         -- https://tools.ietf.org/html/rfc7292#appendix-B.1
                         */
                        $password = "\0" . chunk_split($password, 1, "\0") . "\0";

                        /*
                         This standard specifies 3 different values for the ID byte mentioned
                         above:

                         1.  If ID=1, then the pseudorandom bits being produced are to be used
                             as key material for performing encryption or decryption.

                         2.  If ID=2, then the pseudorandom bits being produced are to be used
                             as an IV (Initial Value) for encryption or decryption.

                         3.  If ID=3, then the pseudorandom bits being produced are to be used
                             as an integrity key for MACing.
                         */
                        // Construct a string, D (the "diversifier"), by concatenating v/8
                        // copies of ID.
                        $blockLength = $hashObj->getBlockLengthInBytes();
                        $d1 = str_repeat(chr(1), $blockLength);
                        $d2 = str_repeat(chr(2), $blockLength);
                        $s = '';
                        if (strlen($salt)) {
                            while (strlen($s) < $blockLength) {
                                $s .= $salt;
                            }
                        }
                        $s = substr($s, 0, $blockLength);

                        $p = '';
                        if (strlen($password)) {
                            while (strlen($p) < $blockLength) {
                                $p .= $password;
                            }
                        }
                        $p = substr($p, 0, $blockLength);

                        $i = $s . $p;

                        $this->setKey(self::pkcs12helper($dkLen, $hashObj, $i, $d1, $count));
                        if ($this->usesIV()) {
                            $this->setIV(self::pkcs12helper($this->block_size, $hashObj, $i, $d2, $count));
                        }

                        return true;
                    case $method == 'pbkdf1':
                        if ($dkLen > $hashObj->getLengthInBytes()) {
                            throw new \LengthException('Derived key length cannot be longer than the hash length');
                        }
                        $t = $password . $salt;
                        for ($i = 0; $i < $count; ++$i) {
                            $t = $hashObj->hash($t);
                        }
                        $key = substr($t, 0, $dkLen);

                        $this->setKey(substr($key, 0, $dkLen >> 1));
                        if ($this->usesIV()) {
                            $this->setIV(substr($key, $dkLen >> 1));
                        }

                        return true;
                    case !in_array($hash, hash_algos()):
                        $i = 1;
                        $hashObj->setKey($password);
                        while (strlen($key) < $dkLen) {
                            $f = $u = $hashObj->hash($salt . pack('N', $i++));
                            for ($j = 2; $j <= $count; ++$j) {
                                $u = $hashObj->hash($u);
                                $f ^= $u;
                            }
                            $key .= $f;
                        }
                        $key = substr($key, 0, $dkLen);
                        break;
                    default:
                        $key = hash_pbkdf2($hash, $password, $salt, $count, $dkLen, true);
                }
                break;
            default:
                throw new UnsupportedAlgorithmException($method . ' is not a supported password hashing method');
        }

        $this->setKey($key);

        return true;
    }

    /**
     * PKCS#12 KDF Helper Function
     *
     * As discussed here:
     *
     * {@link https://tools.ietf.org/html/rfc7292#appendix-B}
     *
     * @see self::setPassword()
     * @param int $n
     * @param Hash $hashObj
     * @param string $i
     * @param string $d
     * @param int $count
     * @return string $a
     */
    private static function pkcs12helper($n, $hashObj, $i, $d, $count)
    {
        static $one;
        if (!isset($one)) {
            $one = new BigInteger(1);
        }

        $blockLength = $hashObj->getBlockLength() >> 3;

        $c = ceil($n / $hashObj->getLengthInBytes());
        $a = '';
        for ($j = 1; $j <= $c; $j++) {
            $ai = $d . $i;
            for ($k = 0; $k < $count; $k++) {
                $ai = $hashObj->hash($ai);
            }
            $b = '';
            while (strlen($b) < $blockLength) {
                $b .= $ai;
            }
            $b = substr($b, 0, $blockLength);
            $b = new BigInteger($b, 256);
            $newi = '';
            for ($k = 0; $k < strlen($i); $k += $blockLength) {
                $temp = substr($i, $k, $blockLength);
                $temp = new BigInteger($temp, 256);
                $temp->setPrecision($blockLength << 3);
                $temp = $temp->add($b);
                $temp = $temp->add($one);
                $newi .= $temp->toBytes(false);
            }
            $i = $newi;
            $a .= $ai;
        }

        return substr($a, 0, $n);
    }

    /**
     * Encrypts a message.
     *
     * $plaintext will be padded with additional bytes such that it's length is a multiple of the block size. Other cipher
     * implementations may or may not pad in the same manner.  Other common approaches to padding and the reasons why it's
     * necessary are discussed in the following
     * URL:
     *
     * {@link http://www.di-mgt.com.au/cryptopad.html http://www.di-mgt.com.au/cryptopad.html}
     *
     * An alternative to padding is to, separately, send the length of the file.  This is what SSH, in fact, does.
     * strlen($plaintext) will still need to be a multiple of the block size, however, arbitrary values can be added to make it that
     * length.
     *
     * {@internal Could, but not must, extend by the child Crypt_* class}
     *
     * @see self::decrypt()
     * @param string $plaintext
     * @return string $ciphertext
     */
    public function encrypt($plaintext)
    {
        if ($this->paddable) {
            $plaintext = $this->pad($plaintext);
        }

        $this->setup();

        if ($this->mode == self::MODE_GCM) {
            $oldIV = $this->iv;
            Strings::increment_str($this->iv);
            $cipher = new static('ctr');
            $cipher->setKey($this->key);
            $cipher->setIV($this->iv);
            $ciphertext = $cipher->encrypt($plaintext);

            $s = $this->ghash(
                self::nullPad128($this->aad) .
                self::nullPad128($ciphertext) .
                self::len64($this->aad) .
                self::len64($ciphertext)
            );
            $cipher->encryptIV = $this->iv = $this->encryptIV = $this->decryptIV = $oldIV;
            $this->newtag = $cipher->encrypt($s);
            return $ciphertext;
        }

        if (isset($this->poly1305Key)) {
            $cipher = clone $this;
            unset($cipher->poly1305Key);
            $this->usePoly1305 = false;
            $ciphertext = $cipher->encrypt($plaintext);
            $this->newtag = $this->poly1305($ciphertext);
            return $ciphertext;
        }

        if ($this->engine === self::ENGINE_OPENSSL) {
            switch ($this->mode) {
                case self::MODE_STREAM:
                    return openssl_encrypt($plaintext, $this->cipher_name_openssl, $this->key, OPENSSL_RAW_DATA | OPENSSL_ZERO_PADDING);
                case self::MODE_ECB:
                    return openssl_encrypt($plaintext, $this->cipher_name_openssl, $this->key, OPENSSL_RAW_DATA | OPENSSL_ZERO_PADDING);
                case self::MODE_CBC:
                    $result = openssl_encrypt($plaintext, $this->cipher_name_openssl, $this->key, OPENSSL_RAW_DATA | OPENSSL_ZERO_PADDING, $this->encryptIV);
                    if ($this->continuousBuffer) {
                        $this->encryptIV = substr($result, -$this->block_size);
                    }
                    return $result;
                case self::MODE_CTR:
                    return $this->openssl_ctr_process($plaintext, $this->encryptIV, $this->enbuffer);
                case self::MODE_CFB:
                    // cfb loosely routines inspired by openssl's:
                    // {@link http://cvs.openssl.org/fileview?f=openssl/crypto/modes/cfb128.c&v=1.3.2.2.2.1}
                    $ciphertext = '';
                    if ($this->continuousBuffer) {
                        $iv = &$this->encryptIV;
                        $pos = &$this->enbuffer['pos'];
                    } else {
                        $iv = $this->encryptIV;
                        $pos = 0;
                    }
                    $len = strlen($plaintext);
                    $i = 0;
                    if ($pos) {
                        $orig_pos = $pos;
                        $max = $this->block_size - $pos;
                        if ($len >= $max) {
                            $i = $max;
                            $len -= $max;
                            $pos = 0;
                        } else {
                            $i = $len;
                            $pos += $len;
                            $len = 0;
                        }
                        // ie. $i = min($max, $len), $len-= $i, $pos+= $i, $pos%= $blocksize
                        $ciphertext = substr($iv, $orig_pos) ^ $plaintext;
                        $iv = substr_replace($iv, $ciphertext, $orig_pos, $i);
                        $plaintext = substr($plaintext, $i);
                    }

                    $overflow = $len % $this->block_size;

                    if ($overflow) {
                        $ciphertext .= openssl_encrypt(substr($plaintext, 0, -$overflow) . str_repeat("\0", $this->block_size), $this->cipher_name_openssl, $this->key, OPENSSL_RAW_DATA | OPENSSL_ZERO_PADDING, $iv);
                        $iv = Strings::pop($ciphertext, $this->block_size);

                        $size = $len - $overflow;
                        $block = $iv ^ substr($plaintext, -$overflow);
                        $iv = substr_replace($iv, $block, 0, $overflow);
                        $ciphertext .= $block;
                        $pos = $overflow;
                    } elseif ($len) {
                        $ciphertext = openssl_encrypt($plaintext, $this->cipher_name_openssl, $this->key, OPENSSL_RAW_DATA | OPENSSL_ZERO_PADDING, $iv);
                        $iv = substr($ciphertext, -$this->block_size);
                    }

                    return $ciphertext;
                case self::MODE_CFB8:
                    $ciphertext = openssl_encrypt($plaintext, $this->cipher_name_openssl, $this->key, OPENSSL_RAW_DATA | OPENSSL_ZERO_PADDING, $this->encryptIV);
                    if ($this->continuousBuffer) {
                        if (($len = strlen($ciphertext)) >= $this->block_size) {
                            $this->encryptIV = substr($ciphertext, -$this->block_size);
                        } else {
                            $this->encryptIV = substr($this->encryptIV, $len - $this->block_size) . substr($ciphertext, -$len);
                        }
                    }
                    return $ciphertext;
                case self::MODE_OFB8:
                    $ciphertext = '';
                    $len = strlen($plaintext);
                    $iv = $this->encryptIV;

                    for ($i = 0; $i < $len; ++$i) {
                        $xor = openssl_encrypt($iv, $this->cipher_name_openssl_ecb, $this->key, $this->openssl_options, $this->decryptIV);
                        $ciphertext .= $plaintext[$i] ^ $xor;
                        $iv = substr($iv, 1) . $xor[0];
                    }

                    if ($this->continuousBuffer) {
                        $this->encryptIV = $iv;
                    }
                    break;
                case self::MODE_OFB:
                    return $this->openssl_ofb_process($plaintext, $this->encryptIV, $this->enbuffer);
            }
        }

        if ($this->engine === self::ENGINE_MCRYPT) {
            set_error_handler(function () {
            });
            if ($this->enchanged) {
                mcrypt_generic_init($this->enmcrypt, $this->key, $this->getIV($this->encryptIV));
                $this->enchanged = false;
            }

            // re: {@link http://phpseclib.sourceforge.net/cfb-demo.phps}
            // using mcrypt's default handing of CFB the above would output two different things.  using phpseclib's
            // rewritten CFB implementation the above outputs the same thing twice.
            if ($this->mode == self::MODE_CFB && $this->continuousBuffer) {
                $block_size = $this->block_size;
                $iv = &$this->encryptIV;
                $pos = &$this->enbuffer['pos'];
                $len = strlen($plaintext);
                $ciphertext = '';
                $i = 0;
                if ($pos) {
                    $orig_pos = $pos;
                    $max = $block_size - $pos;
                    if ($len >= $max) {
                        $i = $max;
                        $len -= $max;
                        $pos = 0;
                    } else {
                        $i = $len;
                        $pos += $len;
                        $len = 0;
                    }
                    $ciphertext = substr($iv, $orig_pos) ^ $plaintext;
                    $iv = substr_replace($iv, $ciphertext, $orig_pos, $i);
                    $this->enbuffer['enmcrypt_init'] = true;
                }
                if ($len >= $block_size) {
                    if ($this->enbuffer['enmcrypt_init'] === false || $len > $this->cfb_init_len) {
                        if ($this->enbuffer['enmcrypt_init'] === true) {
                            mcrypt_generic_init($this->enmcrypt, $this->key, $iv);
                            $this->enbuffer['enmcrypt_init'] = false;
                        }
                        $ciphertext .= mcrypt_generic($this->enmcrypt, substr($plaintext, $i, $len - $len % $block_size));
                        $iv = substr($ciphertext, -$block_size);
                        $len %= $block_size;
                    } else {
                        while ($len >= $block_size) {
                            $iv = mcrypt_generic($this->ecb, $iv) ^ substr($plaintext, $i, $block_size);
                            $ciphertext .= $iv;
                            $len -= $block_size;
                            $i += $block_size;
                        }
                    }
                }

                if ($len) {
                    $iv = mcrypt_generic($this->ecb, $iv);
                    $block = $iv ^ substr($plaintext, -$len);
                    $iv = substr_replace($iv, $block, 0, $len);
                    $ciphertext .= $block;
                    $pos = $len;
                }

                restore_error_handler();

                return $ciphertext;
            }

            $ciphertext = mcrypt_generic($this->enmcrypt, $plaintext);

            if (!$this->continuousBuffer) {
                mcrypt_generic_init($this->enmcrypt, $this->key, $this->getIV($this->encryptIV));
            }

            restore_error_handler();

            return $ciphertext;
        }

        if ($this->engine === self::ENGINE_EVAL) {
            $inline = $this->inline_crypt;
            return $inline('encrypt', $plaintext);
        }

        $buffer = &$this->enbuffer;
        $block_size = $this->block_size;
        $ciphertext = '';
        switch ($this->mode) {
            case self::MODE_ECB:
                for ($i = 0; $i < strlen($plaintext); $i += $block_size) {
                    $ciphertext .= $this->encryptBlock(substr($plaintext, $i, $block_size));
                }
                break;
            case self::MODE_CBC:
                $xor = $this->encryptIV;
                for ($i = 0; $i < strlen($plaintext); $i += $block_size) {
                    $block = substr($plaintext, $i, $block_size);
                    $block = $this->encryptBlock($block ^ $xor);
                    $xor = $block;
                    $ciphertext .= $block;
                }
                if ($this->continuousBuffer) {
                    $this->encryptIV = $xor;
                }
                break;
            case self::MODE_CTR:
                $xor = $this->encryptIV;
                if (strlen($buffer['ciphertext'])) {
                    for ($i = 0; $i < strlen($plaintext); $i += $block_size) {
                        $block = substr($plaintext, $i, $block_size);
                        if (strlen($block) > strlen($buffer['ciphertext'])) {
                            $buffer['ciphertext'] .= $this->encryptBlock($xor);
                            Strings::increment_str($xor);
                        }
                        $key = Strings::shift($buffer['ciphertext'], $block_size);
                        $ciphertext .= $block ^ $key;
                    }
                } else {
                    for ($i = 0; $i < strlen($plaintext); $i += $block_size) {
                        $block = substr($plaintext, $i, $block_size);
                        $key = $this->encryptBlock($xor);
                        Strings::increment_str($xor);
                        $ciphertext .= $block ^ $key;
                    }
                }
                if ($this->continuousBuffer) {
                    $this->encryptIV = $xor;
                    if ($start = strlen($plaintext) % $block_size) {
                        $buffer['ciphertext'] = substr($key, $start) . $buffer['ciphertext'];
                    }
                }
                break;
            case self::MODE_CFB:
                // cfb loosely routines inspired by openssl's:
                // {@link http://cvs.openssl.org/fileview?f=openssl/crypto/modes/cfb128.c&v=1.3.2.2.2.1}
                if ($this->continuousBuffer) {
                    $iv = &$this->encryptIV;
                    $pos = &$buffer['pos'];
                } else {
                    $iv = $this->encryptIV;
                    $pos = 0;
                }
                $len = strlen($plaintext);
                $i = 0;
                if ($pos) {
                    $orig_pos = $pos;
                    $max = $block_size - $pos;
                    if ($len >= $max) {
                        $i = $max;
                        $len -= $max;
                        $pos = 0;
                    } else {
                        $i = $len;
                        $pos += $len;
                        $len = 0;
                    }
                    // ie. $i = min($max, $len), $len-= $i, $pos+= $i, $pos%= $blocksize
                    $ciphertext = substr($iv, $orig_pos) ^ $plaintext;
                    $iv = substr_replace($iv, $ciphertext, $orig_pos, $i);
                }
                while ($len >= $block_size) {
                    $iv = $this->encryptBlock($iv) ^ substr($plaintext, $i, $block_size);
                    $ciphertext .= $iv;
                    $len -= $block_size;
                    $i += $block_size;
                }
                if ($len) {
                    $iv = $this->encryptBlock($iv);
                    $block = $iv ^ substr($plaintext, $i);
                    $iv = substr_replace($iv, $block, 0, $len);
                    $ciphertext .= $block;
                    $pos = $len;
                }
                break;
            case self::MODE_CFB8:
                $ciphertext = '';
                $len = strlen($plaintext);
                $iv = $this->encryptIV;

                for ($i = 0; $i < $len; ++$i) {
                    $ciphertext .= ($c = $plaintext[$i] ^ $this->encryptBlock($iv));
                    $iv = substr($iv, 1) . $c;
                }

                if ($this->continuousBuffer) {
                    if ($len >= $block_size) {
                        $this->encryptIV = substr($ciphertext, -$block_size);
                    } else {
                        $this->encryptIV = substr($this->encryptIV, $len - $block_size) . substr($ciphertext, -$len);
                    }
                }
                break;
            case self::MODE_OFB8:
                $ciphertext = '';
                $len = strlen($plaintext);
                $iv = $this->encryptIV;

                for ($i = 0; $i < $len; ++$i) {
                    $xor = $this->encryptBlock($iv);
                    $ciphertext .= $plaintext[$i] ^ $xor;
                    $iv = substr($iv, 1) . $xor[0];
                }

                if ($this->continuousBuffer) {
                    $this->encryptIV = $iv;
                }
                break;
            case self::MODE_OFB:
                $xor = $this->encryptIV;
                if (strlen($buffer['xor'])) {
                    for ($i = 0; $i < strlen($plaintext); $i += $block_size) {
                        $block = substr($plaintext, $i, $block_size);
                        if (strlen($block) > strlen($buffer['xor'])) {
                            $xor = $this->encryptBlock($xor);
                            $buffer['xor'] .= $xor;
                        }
                        $key = Strings::shift($buffer['xor'], $block_size);
                        $ciphertext .= $block ^ $key;
                    }
                } else {
                    for ($i = 0; $i < strlen($plaintext); $i += $block_size) {
                        $xor = $this->encryptBlock($xor);
                        $ciphertext .= substr($plaintext, $i, $block_size) ^ $xor;
                    }
                    $key = $xor;
                }
                if ($this->continuousBuffer) {
                    $this->encryptIV = $xor;
                    if ($start = strlen($plaintext) % $block_size) {
                        $buffer['xor'] = substr($key, $start) . $buffer['xor'];
                    }
                }
                break;
            case self::MODE_STREAM:
                $ciphertext = $this->encryptBlock($plaintext);
                break;
        }

        return $ciphertext;
    }

    /**
     * Decrypts a message.
     *
     * If strlen($ciphertext) is not a multiple of the block size, null bytes will be added to the end of the string until
     * it is.
     *
     * {@internal Could, but not must, extend by the child Crypt_* class}
     *
     * @see self::encrypt()
     * @param string $ciphertext
     * @return string $plaintext
     * @throws \LengthException if we're inside a block cipher and the ciphertext length is not a multiple of the block size
     */
    public function decrypt($ciphertext)
    {
        if ($this->paddable && strlen($ciphertext) % $this->block_size) {
            throw new \LengthException('The ciphertext length (' . strlen($ciphertext) . ') needs to be a multiple of the block size (' . $this->block_size . ')');
        }
        $this->setup();

        if ($this->mode == self::MODE_GCM || isset($this->poly1305Key)) {
            if ($this->oldtag === false) {
                throw new InsufficientSetupException('Authentication Tag has not been set');
            }

            if (isset($this->poly1305Key)) {
                $newtag = $this->poly1305($ciphertext);
            } else {
                $oldIV = $this->iv;
                Strings::increment_str($this->iv);
                $cipher = new static('ctr');
                $cipher->setKey($this->key);
                $cipher->setIV($this->iv);
                $plaintext = $cipher->decrypt($ciphertext);

                $s = $this->ghash(
                    self::nullPad128($this->aad) .
                    self::nullPad128($ciphertext) .
                    self::len64($this->aad) .
                    self::len64($ciphertext)
                );
                $cipher->encryptIV = $this->iv = $this->encryptIV = $this->decryptIV = $oldIV;
                $newtag = $cipher->encrypt($s);
            }
            if ($this->oldtag != substr($newtag, 0, strlen($newtag))) {
                $cipher = clone $this;
                unset($cipher->poly1305Key);
                $this->usePoly1305 = false;
                $plaintext = $cipher->decrypt($ciphertext);
                $this->oldtag = false;
                throw new BadDecryptionException('Derived authentication tag and supplied authentication tag do not match');
            }
            $this->oldtag = false;
            return $plaintext;
        }

        if ($this->engine === self::ENGINE_OPENSSL) {
            switch ($this->mode) {
                case self::MODE_STREAM:
                    $plaintext = openssl_decrypt($ciphertext, $this->cipher_name_openssl, $this->key, OPENSSL_RAW_DATA | OPENSSL_ZERO_PADDING);
                    break;
                case self::MODE_ECB:
                    $plaintext = openssl_decrypt($ciphertext, $this->cipher_name_openssl, $this->key, OPENSSL_RAW_DATA | OPENSSL_ZERO_PADDING);
                    break;
                case self::MODE_CBC:
                    $offset = $this->block_size;
                    $plaintext = openssl_decrypt($ciphertext, $this->cipher_name_openssl, $this->key, OPENSSL_RAW_DATA | OPENSSL_ZERO_PADDING, $this->decryptIV);
                    if ($this->continuousBuffer) {
                        $this->decryptIV = substr($ciphertext, -$offset, $this->block_size);
                    }
                    break;
                case self::MODE_CTR:
                    $plaintext = $this->openssl_ctr_process($ciphertext, $this->decryptIV, $this->debuffer);
                    break;
                case self::MODE_CFB:
                    // cfb loosely routines inspired by openssl's:
                    // {@link http://cvs.openssl.org/fileview?f=openssl/crypto/modes/cfb128.c&v=1.3.2.2.2.1}
                    $plaintext = '';
                    if ($this->continuousBuffer) {
                        $iv = &$this->decryptIV;
                        $pos = &$this->debuffer['pos'];
                    } else {
                        $iv = $this->decryptIV;
                        $pos = 0;
                    }
                    $len = strlen($ciphertext);
                    $i = 0;
                    if ($pos) {
                        $orig_pos = $pos;
                        $max = $this->block_size - $pos;
                        if ($len >= $max) {
                            $i = $max;
                            $len -= $max;
                            $pos = 0;
                        } else {
                            $i = $len;
                            $pos += $len;
                            $len = 0;
                        }
                        // ie. $i = min($max, $len), $len-= $i, $pos+= $i, $pos%= $this->blocksize
                        $plaintext = substr($iv, $orig_pos) ^ $ciphertext;
                        $iv = substr_replace($iv, substr($ciphertext, 0, $i), $orig_pos, $i);
                        $ciphertext = substr($ciphertext, $i);
                    }
                    $overflow = $len % $this->block_size;
                    if ($overflow) {
                        $plaintext .= openssl_decrypt(substr($ciphertext, 0, -$overflow), $this->cipher_name_openssl, $this->key, OPENSSL_RAW_DATA | OPENSSL_ZERO_PADDING, $iv);
                        if ($len - $overflow) {
                            $iv = substr($ciphertext, -$overflow - $this->block_size, -$overflow);
                        }
                        $iv = openssl_encrypt(str_repeat("\0", $this->block_size), $this->cipher_name_openssl, $this->key, OPENSSL_RAW_DATA | OPENSSL_ZERO_PADDING, $iv);
                        $plaintext .= $iv ^ substr($ciphertext, -$overflow);
                        $iv = substr_replace($iv, substr($ciphertext, -$overflow), 0, $overflow);
                        $pos = $overflow;
                    } elseif ($len) {
                        $plaintext .= openssl_decrypt($ciphertext, $this->cipher_name_openssl, $this->key, OPENSSL_RAW_DATA | OPENSSL_ZERO_PADDING, $iv);
                        $iv = substr($ciphertext, -$this->block_size);
                    }
                    break;
                case self::MODE_CFB8:
                    $plaintext = openssl_decrypt($ciphertext, $this->cipher_name_openssl, $this->key, OPENSSL_RAW_DATA | OPENSSL_ZERO_PADDING, $this->decryptIV);
                    if ($this->continuousBuffer) {
                        if (($len = strlen($ciphertext)) >= $this->block_size) {
                            $this->decryptIV = substr($ciphertext, -$this->block_size);
                        } else {
                            $this->decryptIV = substr($this->decryptIV, $len - $this->block_size) . substr($ciphertext, -$len);
                        }
                    }
                    break;
                case self::MODE_OFB8:
                    $plaintext = '';
                    $len = strlen($ciphertext);
                    $iv = $this->decryptIV;

                    for ($i = 0; $i < $len; ++$i) {
                        $xor = openssl_encrypt($iv, $this->cipher_name_openssl_ecb, $this->key, $this->openssl_options, $this->decryptIV);
                        $plaintext .= $ciphertext[$i] ^ $xor;
                        $iv = substr($iv, 1) . $xor[0];
                    }

                    if ($this->continuousBuffer) {
                        $this->decryptIV = $iv;
                    }
                    break;
                case self::MODE_OFB:
                    $plaintext = $this->openssl_ofb_process($ciphertext, $this->decryptIV, $this->debuffer);
            }

            return $this->paddable ? $this->unpad($plaintext) : $plaintext;
        }

        if ($this->engine === self::ENGINE_MCRYPT) {
            set_error_handler(function () {
            });
            $block_size = $this->block_size;
            if ($this->dechanged) {
                mcrypt_generic_init($this->demcrypt, $this->key, $this->getIV($this->decryptIV));
                $this->dechanged = false;
            }

            if ($this->mode == self::MODE_CFB && $this->continuousBuffer) {
                $iv = &$this->decryptIV;
                $pos = &$this->debuffer['pos'];
                $len = strlen($ciphertext);
                $plaintext = '';
                $i = 0;
                if ($pos) {
                    $orig_pos = $pos;
                    $max = $block_size - $pos;
                    if ($len >= $max) {
                        $i = $max;
                        $len -= $max;
                        $pos = 0;
                    } else {
                        $i = $len;
                        $pos += $len;
                        $len = 0;
                    }
                    // ie. $i = min($max, $len), $len-= $i, $pos+= $i, $pos%= $blocksize
                    $plaintext = substr($iv, $orig_pos) ^ $ciphertext;
                    $iv = substr_replace($iv, substr($ciphertext, 0, $i), $orig_pos, $i);
                }
                if ($len >= $block_size) {
                    $cb = substr($ciphertext, $i, $len - $len % $block_size);
                    $plaintext .= mcrypt_generic($this->ecb, $iv . $cb) ^ $cb;
                    $iv = substr($cb, -$block_size);
                    $len %= $block_size;
                }
                if ($len) {
                    $iv = mcrypt_generic($this->ecb, $iv);
                    $plaintext .= $iv ^ substr($ciphertext, -$len);
                    $iv = substr_replace($iv, substr($ciphertext, -$len), 0, $len);
                    $pos = $len;
                }

                restore_error_handler();

                return $plaintext;
            }

            $plaintext = mdecrypt_generic($this->demcrypt, $ciphertext);

            if (!$this->continuousBuffer) {
                mcrypt_generic_init($this->demcrypt, $this->key, $this->getIV($this->decryptIV));
            }

            restore_error_handler();

            return $this->paddable ? $this->unpad($plaintext) : $plaintext;
        }

        if ($this->engine === self::ENGINE_EVAL) {
            $inline = $this->inline_crypt;
            return $inline('decrypt', $ciphertext);
        }

        $block_size = $this->block_size;

        $buffer = &$this->debuffer;
        $plaintext = '';
        switch ($this->mode) {
            case self::MODE_ECB:
                for ($i = 0; $i < strlen($ciphertext); $i += $block_size) {
                    $plaintext .= $this->decryptBlock(substr($ciphertext, $i, $block_size));
                }
                break;
            case self::MODE_CBC:
                $xor = $this->decryptIV;
                for ($i = 0; $i < strlen($ciphertext); $i += $block_size) {
                    $block = substr($ciphertext, $i, $block_size);
                    $plaintext .= $this->decryptBlock($block) ^ $xor;
                    $xor = $block;
                }
                if ($this->continuousBuffer) {
                    $this->decryptIV = $xor;
                }
                break;
            case self::MODE_CTR:
                $xor = $this->decryptIV;
                if (strlen($buffer['ciphertext'])) {
                    for ($i = 0; $i < strlen($ciphertext); $i += $block_size) {
                        $block = substr($ciphertext, $i, $block_size);
                        if (strlen($block) > strlen($buffer['ciphertext'])) {
                            $buffer['ciphertext'] .= $this->encryptBlock($xor);
                            Strings::increment_str($xor);
                        }
                        $key = Strings::shift($buffer['ciphertext'], $block_size);
                        $plaintext .= $block ^ $key;
                    }
                } else {
                    for ($i = 0; $i < strlen($ciphertext); $i += $block_size) {
                        $block = substr($ciphertext, $i, $block_size);
                        $key = $this->encryptBlock($xor);
                        Strings::increment_str($xor);
                        $plaintext .= $block ^ $key;
                    }
                }
                if ($this->continuousBuffer) {
                    $this->decryptIV = $xor;
                    if ($start = strlen($ciphertext) % $block_size) {
                        $buffer['ciphertext'] = substr($key, $start) . $buffer['ciphertext'];
                    }
                }
                break;
            case self::MODE_CFB:
                if ($this->continuousBuffer) {
                    $iv = &$this->decryptIV;
                    $pos = &$buffer['pos'];
                } else {
                    $iv = $this->decryptIV;
                    $pos = 0;
                }
                $len = strlen($ciphertext);
                $i = 0;
                if ($pos) {
                    $orig_pos = $pos;
                    $max = $block_size - $pos;
                    if ($len >= $max) {
                        $i = $max;
                        $len -= $max;
                        $pos = 0;
                    } else {
                        $i = $len;
                        $pos += $len;
                        $len = 0;
                    }
                    // ie. $i = min($max, $len), $len-= $i, $pos+= $i, $pos%= $blocksize
                    $plaintext = substr($iv, $orig_pos) ^ $ciphertext;
                    $iv = substr_replace($iv, substr($ciphertext, 0, $i), $orig_pos, $i);
                }
                while ($len >= $block_size) {
                    $iv = $this->encryptBlock($iv);
                    $cb = substr($ciphertext, $i, $block_size);
                    $plaintext .= $iv ^ $cb;
                    $iv = $cb;
                    $len -= $block_size;
                    $i += $block_size;
                }
                if ($len) {
                    $iv = $this->encryptBlock($iv);
                    $plaintext .= $iv ^ substr($ciphertext, $i);
                    $iv = substr_replace($iv, substr($ciphertext, $i), 0, $len);
                    $pos = $len;
                }
                break;
            case self::MODE_CFB8:
                $plaintext = '';
                $len = strlen($ciphertext);
                $iv = $this->decryptIV;

                for ($i = 0; $i < $len; ++$i) {
                    $plaintext .= $ciphertext[$i] ^ $this->encryptBlock($iv);
                    $iv = substr($iv, 1) . $ciphertext[$i];
                }

                if ($this->continuousBuffer) {
                    if ($len >= $block_size) {
                        $this->decryptIV = substr($ciphertext, -$block_size);
                    } else {
                        $this->decryptIV = substr($this->decryptIV, $len - $block_size) . substr($ciphertext, -$len);
                    }
                }
                break;
            case self::MODE_OFB8:
                $plaintext = '';
                $len = strlen($ciphertext);
                $iv = $this->decryptIV;

                for ($i = 0; $i < $len; ++$i) {
                    $xor = $this->encryptBlock($iv);
                    $plaintext .= $ciphertext[$i] ^ $xor;
                    $iv = substr($iv, 1) . $xor[0];
                }

                if ($this->continuousBuffer) {
                    $this->decryptIV = $iv;
                }
                break;
            case self::MODE_OFB:
                $xor = $this->decryptIV;
                if (strlen($buffer['xor'])) {
                    for ($i = 0; $i < strlen($ciphertext); $i += $block_size) {
                        $block = substr($ciphertext, $i, $block_size);
                        if (strlen($block) > strlen($buffer['xor'])) {
                            $xor = $this->encryptBlock($xor);
                            $buffer['xor'] .= $xor;
                        }
                        $key = Strings::shift($buffer['xor'], $block_size);
                        $plaintext .= $block ^ $key;
                    }
                } else {
                    for ($i = 0; $i < strlen($ciphertext); $i += $block_size) {
                        $xor = $this->encryptBlock($xor);
                        $plaintext .= substr($ciphertext, $i, $block_size) ^ $xor;
                    }
                    $key = $xor;
                }
                if ($this->continuousBuffer) {
                    $this->decryptIV = $xor;
                    if ($start = strlen($ciphertext) % $block_size) {
                        $buffer['xor'] = substr($key, $start) . $buffer['xor'];
                    }
                }
                break;
            case self::MODE_STREAM:
                $plaintext = $this->decryptBlock($ciphertext);
                break;
        }
        return $this->paddable ? $this->unpad($plaintext) : $plaintext;
    }

    /**
     * Get the authentication tag
     *
     * Only used in GCM or Poly1305 mode
     *
     * @see self::encrypt()
     * @param int $length optional
     * @return string
     * @throws \LengthException if $length isn't of a sufficient length
     * @throws \RuntimeException if GCM mode isn't being used
     */
    public function getTag($length = 16)
    {
        if ($this->mode != self::MODE_GCM && !$this->usePoly1305) {
            throw new \BadMethodCallException('Authentication tags are only utilized in GCM mode or with Poly1305');
        }

        if ($this->newtag === false) {
            throw new \BadMethodCallException('A tag can only be returned after a round of encryption has been performed');
        }

        // the tag is 128-bits. it can't be greater than 16 bytes because that's bigger than the tag is. if it
        // were 0 you might as well be doing CTR and less than 4 provides minimal security that could be trivially
        // easily brute forced.
        // see https://nvlpubs.nist.gov/nistpubs/Legacy/SP/nistspecialpublication800-38d.pdf#page=36
        // for more info
        if ($length < 4 || $length > 16) {
            throw new \LengthException('The authentication tag must be between 4 and 16 bytes long');
        }

        return $length == 16 ?
            $this->newtag :
            substr($this->newtag, 0, $length);
    }

    /**
     * Sets the authentication tag
     *
     * Only used in GCM mode
     *
     * @see self::decrypt()
     * @param string $tag
     * @throws \LengthException if $length isn't of a sufficient length
     * @throws \RuntimeException if GCM mode isn't being used
     */
    public function setTag($tag)
    {
        if ($this->usePoly1305 && !isset($this->poly1305Key) && method_exists($this, 'createPoly1305Key')) {
            $this->createPoly1305Key();
        }

        if ($this->mode != self::MODE_GCM && !$this->usePoly1305) {
            throw new \BadMethodCallException('Authentication tags are only utilized in GCM mode or with Poly1305');
        }

        $length = strlen($tag);
        if ($length < 4 || $length > 16) {
            throw new \LengthException('The authentication tag must be between 4 and 16 bytes long');
        }
        $this->oldtag = $tag;
    }

    /**
     * Get the IV
     *
     * mcrypt requires an IV even if ECB is used
     *
     * @see self::encrypt()
     * @see self::decrypt()
     * @param string $iv
     * @return string
     */
    protected function getIV($iv)
    {
        return $this->mode == self::MODE_ECB ? str_repeat("\0", $this->block_size) : $iv;
    }

    /**
     * OpenSSL CTR Processor
     *
     * PHP's OpenSSL bindings do not operate in continuous mode so we'll wrap around it. Since the keystream
     * for CTR is the same for both encrypting and decrypting this function is re-used by both SymmetricKey::encrypt()
     * and SymmetricKey::decrypt(). Also, OpenSSL doesn't implement CTR for all of it's symmetric ciphers so this
     * function will emulate CTR with ECB when necessary.
     *
     * @see self::encrypt()
     * @see self::decrypt()
     * @param string $plaintext
     * @param string $encryptIV
     * @param array $buffer
     * @return string
     */
    private function openssl_ctr_process($plaintext, &$encryptIV, &$buffer)
    {
        $ciphertext = '';

        $block_size = $this->block_size;
        $key = $this->key;

        if ($this->openssl_emulate_ctr) {
            $xor = $encryptIV;
            if (strlen($buffer['ciphertext'])) {
                for ($i = 0; $i < strlen($plaintext); $i += $block_size) {
                    $block = substr($plaintext, $i, $block_size);
                    if (strlen($block) > strlen($buffer['ciphertext'])) {
                        $buffer['ciphertext'] .= openssl_encrypt($xor, $this->cipher_name_openssl_ecb, $key, OPENSSL_RAW_DATA | OPENSSL_ZERO_PADDING);
                    }
                    Strings::increment_str($xor);
                    $otp = Strings::shift($buffer['ciphertext'], $block_size);
                    $ciphertext .= $block ^ $otp;
                }
            } else {
                for ($i = 0; $i < strlen($plaintext); $i += $block_size) {
                    $block = substr($plaintext, $i, $block_size);
                    $otp = openssl_encrypt($xor, $this->cipher_name_openssl_ecb, $key, OPENSSL_RAW_DATA | OPENSSL_ZERO_PADDING);
                    Strings::increment_str($xor);
                    $ciphertext .= $block ^ $otp;
                }
            }
            if ($this->continuousBuffer) {
                $encryptIV = $xor;
                if ($start = strlen($plaintext) % $block_size) {
                    $buffer['ciphertext'] = substr($key, $start) . $buffer['ciphertext'];
                }
            }

            return $ciphertext;
        }

        if (strlen($buffer['ciphertext'])) {
            $ciphertext = $plaintext ^ Strings::shift($buffer['ciphertext'], strlen($plaintext));
            $plaintext = substr($plaintext, strlen($ciphertext));

            if (!strlen($plaintext)) {
                return $ciphertext;
            }
        }

        $overflow = strlen($plaintext) % $block_size;
        if ($overflow) {
            $plaintext2 = Strings::pop($plaintext, $overflow); // ie. trim $plaintext to a multiple of $block_size and put rest of $plaintext in $plaintext2
            $encrypted = openssl_encrypt($plaintext . str_repeat("\0", $block_size), $this->cipher_name_openssl, $key, OPENSSL_RAW_DATA | OPENSSL_ZERO_PADDING, $encryptIV);
            $temp = Strings::pop($encrypted, $block_size);
            $ciphertext .= $encrypted . ($plaintext2 ^ $temp);
            if ($this->continuousBuffer) {
                $buffer['ciphertext'] = substr($temp, $overflow);
                $encryptIV = $temp;
            }
        } elseif (!strlen($buffer['ciphertext'])) {
            $ciphertext .= openssl_encrypt($plaintext . str_repeat("\0", $block_size), $this->cipher_name_openssl, $key, OPENSSL_RAW_DATA | OPENSSL_ZERO_PADDING, $encryptIV);
            $temp = Strings::pop($ciphertext, $block_size);
            if ($this->continuousBuffer) {
                $encryptIV = $temp;
            }
        }
        if ($this->continuousBuffer) {
            $encryptIV = openssl_decrypt($encryptIV, $this->cipher_name_openssl_ecb, $key, OPENSSL_RAW_DATA | OPENSSL_ZERO_PADDING);
            if ($overflow) {
                Strings::increment_str($encryptIV);
            }
        }

        return $ciphertext;
    }

    /**
     * OpenSSL OFB Processor
     *
     * PHP's OpenSSL bindings do not operate in continuous mode so we'll wrap around it. Since the keystream
     * for OFB is the same for both encrypting and decrypting this function is re-used by both SymmetricKey::encrypt()
     * and SymmetricKey::decrypt().
     *
     * @see self::encrypt()
     * @see self::decrypt()
     * @param string $plaintext
     * @param string $encryptIV
     * @param array $buffer
     * @return string
     */
    private function openssl_ofb_process($plaintext, &$encryptIV, &$buffer)
    {
        if (strlen($buffer['xor'])) {
            $ciphertext = $plaintext ^ $buffer['xor'];
            $buffer['xor'] = substr($buffer['xor'], strlen($ciphertext));
            $plaintext = substr($plaintext, strlen($ciphertext));
        } else {
            $ciphertext = '';
        }

        $block_size = $this->block_size;

        $len = strlen($plaintext);
        $key = $this->key;
        $overflow = $len % $block_size;

        if (strlen($plaintext)) {
            if ($overflow) {
                $ciphertext .= openssl_encrypt(substr($plaintext, 0, -$overflow) . str_repeat("\0", $block_size), $this->cipher_name_openssl, $key, OPENSSL_RAW_DATA | OPENSSL_ZERO_PADDING, $encryptIV);
                $xor = Strings::pop($ciphertext, $block_size);
                if ($this->continuousBuffer) {
                    $encryptIV = $xor;
                }
                $ciphertext .= Strings::shift($xor, $overflow) ^ substr($plaintext, -$overflow);
                if ($this->continuousBuffer) {
                    $buffer['xor'] = $xor;
                }
            } else {
                $ciphertext = openssl_encrypt($plaintext, $this->cipher_name_openssl, $key, OPENSSL_RAW_DATA | OPENSSL_ZERO_PADDING, $encryptIV);
                if ($this->continuousBuffer) {
                    $encryptIV = substr($ciphertext, -$block_size) ^ substr($plaintext, -$block_size);
                }
            }
        }

        return $ciphertext;
    }

    /**
     * phpseclib <-> OpenSSL Mode Mapper
     *
     * May need to be overwritten by classes extending this one in some cases
     *
     * @return string
     */
    protected function openssl_translate_mode()
    {
        switch ($this->mode) {
            case self::MODE_ECB:
                return 'ecb';
            case self::MODE_CBC:
                return 'cbc';
            case self::MODE_CTR:
            case self::MODE_GCM:
                return 'ctr';
            case self::MODE_CFB:
                return 'cfb';
            case self::MODE_CFB8:
                return 'cfb8';
            case self::MODE_OFB:
                return 'ofb';
        }
    }

    /**
     * Pad "packets".
     *
     * Block ciphers working by encrypting between their specified [$this->]block_size at a time
     * If you ever need to encrypt or decrypt something that isn't of the proper length, it becomes necessary to
     * pad the input so that it is of the proper length.
     *
     * Padding is enabled by default.  Sometimes, however, it is undesirable to pad strings.  Such is the case in SSH,
     * where "packets" are padded with random bytes before being encrypted.  Unpad these packets and you risk stripping
     * away characters that shouldn't be stripped away. (SSH knows how many bytes are added because the length is
     * transmitted separately)
     *
     * @see self::disablePadding()
     */
    public function enablePadding()
    {
        $this->padding = true;
    }

    /**
     * Do not pad packets.
     *
     * @see self::enablePadding()
     */
    public function disablePadding()
    {
        $this->padding = false;
    }

    /**
     * Treat consecutive "packets" as if they are a continuous buffer.
     *
     * Say you have a 32-byte plaintext $plaintext.  Using the default behavior, the two following code snippets
     * will yield different outputs:
     *
     * <code>
     *    echo $rijndael->encrypt(substr($plaintext,  0, 16));
     *    echo $rijndael->encrypt(substr($plaintext, 16, 16));
     * </code>
     * <code>
     *    echo $rijndael->encrypt($plaintext);
     * </code>
     *
     * The solution is to enable the continuous buffer.  Although this will resolve the above discrepancy, it creates
     * another, as demonstrated with the following:
     *
     * <code>
     *    $rijndael->encrypt(substr($plaintext, 0, 16));
     *    echo $rijndael->decrypt($rijndael->encrypt(substr($plaintext, 16, 16)));
     * </code>
     * <code>
     *    echo $rijndael->decrypt($rijndael->encrypt(substr($plaintext, 16, 16)));
     * </code>
     *
     * With the continuous buffer disabled, these would yield the same output.  With it enabled, they yield different
     * outputs.  The reason is due to the fact that the initialization vector's change after every encryption /
     * decryption round when the continuous buffer is enabled.  When it's disabled, they remain constant.
     *
     * Put another way, when the continuous buffer is enabled, the state of the \phpseclib3\Crypt\*() object changes after each
     * encryption / decryption round, whereas otherwise, it'd remain constant.  For this reason, it's recommended that
     * continuous buffers not be used.  They do offer better security and are, in fact, sometimes required (SSH uses them),
     * however, they are also less intuitive and more likely to cause you problems.
     *
     * {@internal Could, but not must, extend by the child Crypt_* class}
     *
     * @see self::disableContinuousBuffer()
     */
    public function enableContinuousBuffer()
    {
        if ($this->mode == self::MODE_ECB) {
            return;
        }

        if ($this->mode == self::MODE_GCM) {
            throw new \BadMethodCallException('This mode does not run in continuous mode');
        }

        $this->continuousBuffer = true;

        $this->setEngine();
    }

    /**
     * Treat consecutive packets as if they are a discontinuous buffer.
     *
     * The default behavior.
     *
     * {@internal Could, but not must, extend by the child Crypt_* class}
     *
     * @see self::enableContinuousBuffer()
     */
    public function disableContinuousBuffer()
    {
        if ($this->mode == self::MODE_ECB) {
            return;
        }
        if (!$this->continuousBuffer) {
            return;
        }

        $this->continuousBuffer = false;

        $this->setEngine();
    }

    /**
     * Test for engine validity
     *
     * @see self::__construct()
     * @param int $engine
     * @return bool
     */
    protected function isValidEngineHelper($engine)
    {
        switch ($engine) {
            case self::ENGINE_OPENSSL:
                $this->openssl_emulate_ctr = false;
                $result = $this->cipher_name_openssl &&
                          extension_loaded('openssl');
                if (!$result) {
                    return false;
                }

                $methods = openssl_get_cipher_methods();
                if (in_array($this->cipher_name_openssl, $methods)) {
                    return true;
                }
                // not all of openssl's symmetric cipher's support ctr. for those
                // that don't we'll emulate it
                switch ($this->mode) {
                    case self::MODE_CTR:
                        if (in_array($this->cipher_name_openssl_ecb, $methods)) {
                            $this->openssl_emulate_ctr = true;
                            return true;
                        }
                }
                return false;
            case self::ENGINE_MCRYPT:
                set_error_handler(function () {
                });
                $result = $this->cipher_name_mcrypt &&
                          extension_loaded('mcrypt') &&
                          in_array($this->cipher_name_mcrypt, mcrypt_list_algorithms());
                restore_error_handler();
                return $result;
            case self::ENGINE_EVAL:
                return method_exists($this, 'setupInlineCrypt');
            case self::ENGINE_INTERNAL:
                return true;
        }

        return false;
    }

    /**
     * Test for engine validity
     *
     * @see self::__construct()
     * @param string $engine
     * @return bool
     */
    public function isValidEngine($engine)
    {
        static $reverseMap;
        if (!isset($reverseMap)) {
            $reverseMap = array_map('strtolower', self::ENGINE_MAP);
            $reverseMap = array_flip($reverseMap);
        }
        $engine = strtolower($engine);
        if (!isset($reverseMap[$engine])) {
            return false;
        }

        return $this->isValidEngineHelper($reverseMap[$engine]);
    }

    /**
     * Sets the preferred crypt engine
     *
     * Currently, $engine could be:
     *
     * - libsodium[very fast]
     *
     * - OpenSSL  [very fast]
     *
     * - mcrypt   [fast]
     *
     * - Eval     [slow]
     *
     * - PHP      [slowest]
     *
     * If the preferred crypt engine is not available the fastest available one will be used
     *
     * @see self::__construct()
     * @param string $engine
     */
    public function setPreferredEngine($engine)
    {
        static $reverseMap;
        if (!isset($reverseMap)) {
            $reverseMap = array_map('strtolower', self::ENGINE_MAP);
            $reverseMap = array_flip($reverseMap);
        }
        $engine = is_string($engine) ? strtolower($engine) : '';
        $this->preferredEngine = isset($reverseMap[$engine]) ? $reverseMap[$engine] : self::ENGINE_LIBSODIUM;

        $this->setEngine();
    }

    /**
     * Returns the engine currently being utilized
     *
     * @see self::setEngine()
     */
    public function getEngine()
    {
        return self::ENGINE_MAP[$this->engine];
    }

    /**
     * Sets the engine as appropriate
     *
     * @see self::__construct()
     */
    protected function setEngine()
    {
        $this->engine = null;

        $candidateEngines = [
            self::ENGINE_LIBSODIUM,
            self::ENGINE_OPENSSL_GCM,
            self::ENGINE_OPENSSL,
            self::ENGINE_MCRYPT,
            self::ENGINE_EVAL
        ];
        if (isset($this->preferredEngine)) {
            $temp = [$this->preferredEngine];
            $candidateEngines = array_merge(
                $temp,
                array_diff($candidateEngines, $temp)
            );
        }
        foreach ($candidateEngines as $engine) {
            if ($this->isValidEngineHelper($engine)) {
                $this->engine = $engine;
                break;
            }
        }
        if (!$this->engine) {
            $this->engine = self::ENGINE_INTERNAL;
        }

        if ($this->engine != self::ENGINE_MCRYPT && $this->enmcrypt) {
            set_error_handler(function () {
            });
            // Closing the current mcrypt resource(s). _mcryptSetup() will, if needed,
            // (re)open them with the module named in $this->cipher_name_mcrypt
            mcrypt_module_close($this->enmcrypt);
            mcrypt_module_close($this->demcrypt);
            $this->enmcrypt = null;
            $this->demcrypt = null;

            if ($this->ecb) {
                mcrypt_module_close($this->ecb);
                $this->ecb = null;
            }
            restore_error_handler();
        }

        $this->changed = $this->nonIVChanged = true;
    }

    /**
     * Encrypts a block
     *
     * Note: Must be extended by the child \phpseclib3\Crypt\* class
     *
     * @param string $in
     * @return string
     */
    abstract protected function encryptBlock($in);

    /**
     * Decrypts a block
     *
     * Note: Must be extended by the child \phpseclib3\Crypt\* class
     *
     * @param string $in
     * @return string
     */
    abstract protected function decryptBlock($in);

    /**
     * Setup the key (expansion)
     *
     * Only used if $engine == self::ENGINE_INTERNAL
     *
     * Note: Must extend by the child \phpseclib3\Crypt\* class
     *
     * @see self::setup()
     */
    abstract protected function setupKey();

    /**
     * Setup the self::ENGINE_INTERNAL $engine
     *
     * (re)init, if necessary, the internal cipher $engine and flush all $buffers
     * Used (only) if $engine == self::ENGINE_INTERNAL
     *
     * _setup() will be called each time if $changed === true
     * typically this happens when using one or more of following public methods:
     *
     * - setKey()
     *
     * - setIV()
     *
     * - disableContinuousBuffer()
     *
     * - First run of encrypt() / decrypt() with no init-settings
     *
     * {@internal setup() is always called before en/decryption.}
     *
     * {@internal Could, but not must, extend by the child Crypt_* class}
     *
     * @see self::setKey()
     * @see self::setIV()
     * @see self::disableContinuousBuffer()
     */
    protected function setup()
    {
        if (!$this->changed) {
            return;
        }

        $this->changed = false;

        if ($this->usePoly1305 && !isset($this->poly1305Key) && method_exists($this, 'createPoly1305Key')) {
            $this->createPoly1305Key();
        }

        $this->enbuffer = $this->debuffer = ['ciphertext' => '', 'xor' => '', 'pos' => 0, 'enmcrypt_init' => true];
        //$this->newtag = $this->oldtag = false;

        if ($this->usesNonce()) {
            if ($this->nonce === false) {
                throw new InsufficientSetupException('No nonce has been defined');
            }
            if ($this->mode == self::MODE_GCM && !in_array($this->engine, [self::ENGINE_LIBSODIUM, self::ENGINE_OPENSSL_GCM])) {
                $this->setupGCM();
            }
        } else {
            $this->iv = $this->origIV;
        }

        if ($this->iv === false && !in_array($this->mode, [self::MODE_STREAM, self::MODE_ECB])) {
            if ($this->mode != self::MODE_GCM || !in_array($this->engine, [self::ENGINE_LIBSODIUM, self::ENGINE_OPENSSL_GCM])) {
                throw new InsufficientSetupException('No IV has been defined');
            }
        }

        if ($this->key === false) {
            throw new InsufficientSetupException('No key has been defined');
        }

        $this->encryptIV = $this->decryptIV = $this->iv;

        switch ($this->engine) {
            case self::ENGINE_MCRYPT:
                $this->enchanged = $this->dechanged = true;

                set_error_handler(function () {
                });

                if (!isset($this->enmcrypt)) {
                    static $mcrypt_modes = [
                        self::MODE_CTR    => 'ctr',
                        self::MODE_ECB    => MCRYPT_MODE_ECB,
                        self::MODE_CBC    => MCRYPT_MODE_CBC,
                        self::MODE_CFB    => 'ncfb',
                        self::MODE_CFB8   => MCRYPT_MODE_CFB,
                        self::MODE_OFB    => MCRYPT_MODE_NOFB,
                        self::MODE_OFB8   => MCRYPT_MODE_OFB,
                        self::MODE_STREAM => MCRYPT_MODE_STREAM,
                    ];

                    $this->demcrypt = mcrypt_module_open($this->cipher_name_mcrypt, '', $mcrypt_modes[$this->mode], '');
                    $this->enmcrypt = mcrypt_module_open($this->cipher_name_mcrypt, '', $mcrypt_modes[$this->mode], '');

                    // we need the $ecb mcrypt resource (only) in MODE_CFB with enableContinuousBuffer()
                    // to workaround mcrypt's broken ncfb implementation in buffered mode
                    // see: {@link http://phpseclib.sourceforge.net/cfb-demo.phps}
                    if ($this->mode == self::MODE_CFB) {
                        $this->ecb = mcrypt_module_open($this->cipher_name_mcrypt, '', MCRYPT_MODE_ECB, '');
                    }
                } // else should mcrypt_generic_deinit be called?

                if ($this->mode == self::MODE_CFB) {
                    mcrypt_generic_init($this->ecb, $this->key, str_repeat("\0", $this->block_size));
                }

                restore_error_handler();

                break;
            case self::ENGINE_INTERNAL:
                $this->setupKey();
                break;
            case self::ENGINE_EVAL:
                if ($this->nonIVChanged) {
                    $this->setupKey();
                    $this->setupInlineCrypt();
                }
        }

        $this->nonIVChanged = false;
    }

    /**
     * Pads a string
     *
     * Pads a string using the RSA PKCS padding standards so that its length is a multiple of the blocksize.
     * $this->block_size - (strlen($text) % $this->block_size) bytes are added, each of which is equal to
     * chr($this->block_size - (strlen($text) % $this->block_size)
     *
     * If padding is disabled and $text is not a multiple of the blocksize, the string will be padded regardless
     * and padding will, hence forth, be enabled.
     *
     * @see self::unpad()
     * @param string $text
     * @throws \LengthException if padding is disabled and the plaintext's length is not a multiple of the block size
     * @return string
     */
    protected function pad($text)
    {
        $length = strlen($text);

        if (!$this->padding) {
            if ($length % $this->block_size == 0) {
                return $text;
            } else {
                throw new \LengthException("The plaintext's length ($length) is not a multiple of the block size ({$this->block_size}). Try enabling padding.");
            }
        }

        $pad = $this->block_size - ($length % $this->block_size);

        return str_pad($text, $length + $pad, chr($pad));
    }

    /**
     * Unpads a string.
     *
     * If padding is enabled and the reported padding length is invalid the encryption key will be assumed to be wrong
     * and false will be returned.
     *
     * @see self::pad()
     * @param string $text
     * @throws \LengthException if the ciphertext's length is not a multiple of the block size
     * @return string
     */
    protected function unpad($text)
    {
        if (!$this->padding) {
            return $text;
        }

        $length = ord($text[strlen($text) - 1]);

        if (!$length || $length > $this->block_size) {
            throw new BadDecryptionException("The ciphertext has an invalid padding length ($length) compared to the block size ({$this->block_size})");
        }

        return substr($text, 0, -$length);
    }

    /**
     * Setup the performance-optimized function for de/encrypt()
     *
     * Stores the created (or existing) callback function-name
     * in $this->inline_crypt
     *
     * Internally for phpseclib developers:
     *
     *     _setupInlineCrypt() would be called only if:
     *
     *     - $this->engine === self::ENGINE_EVAL
     *
     *     - each time on _setup(), after(!) _setupKey()
     *
     *
     *     This ensures that _setupInlineCrypt() has always a
     *     full ready2go initializated internal cipher $engine state
     *     where, for example, the keys already expanded,
     *     keys/block_size calculated and such.
     *
     *     It is, each time if called, the responsibility of _setupInlineCrypt():
     *
     *     - to set $this->inline_crypt to a valid and fully working callback function
     *       as a (faster) replacement for encrypt() / decrypt()
     *
     *     - NOT to create unlimited callback functions (for memory reasons!)
     *       no matter how often _setupInlineCrypt() would be called. At some
     *       point of amount they must be generic re-useable.
     *
     *     - the code of _setupInlineCrypt() it self,
     *       and the generated callback code,
     *       must be, in following order:
     *       - 100% safe
     *       - 100% compatible to encrypt()/decrypt()
     *       - using only php5+ features/lang-constructs/php-extensions if
     *         compatibility (down to php4) or fallback is provided
     *       - readable/maintainable/understandable/commented and... not-cryptic-styled-code :-)
     *       - >= 10% faster than encrypt()/decrypt() [which is, by the way,
     *         the reason for the existence of _setupInlineCrypt() :-)]
     *       - memory-nice
     *       - short (as good as possible)
     *
     * Note: - _setupInlineCrypt() is using _createInlineCryptFunction() to create the full callback function code.
     *       - In case of using inline crypting, _setupInlineCrypt() must extend by the child \phpseclib3\Crypt\* class.
     *       - The following variable names are reserved:
     *         - $_*  (all variable names prefixed with an underscore)
     *         - $self (object reference to it self. Do not use $this, but $self instead)
     *         - $in (the content of $in has to en/decrypt by the generated code)
     *       - The callback function should not use the 'return' statement, but en/decrypt'ing the content of $in only
     *
     * {@internal If a Crypt_* class providing inline crypting it must extend _setupInlineCrypt()}
     *
     * @see self::setup()
     * @see self::createInlineCryptFunction()
     * @see self::encrypt()
     * @see self::decrypt()
     */
    //protected function setupInlineCrypt();

    /**
     * Creates the performance-optimized function for en/decrypt()
     *
     * Internally for phpseclib developers:
     *
     *    _createInlineCryptFunction():
     *
     *    - merge the $cipher_code [setup'ed by _setupInlineCrypt()]
     *      with the current [$this->]mode of operation code
     *
     *    - create the $inline function, which called by encrypt() / decrypt()
     *      as its replacement to speed up the en/decryption operations.
     *
     *    - return the name of the created $inline callback function
     *
     *    - used to speed up en/decryption
     *
     *
     *
     *    The main reason why can speed up things [up to 50%] this way are:
     *
     *    - using variables more effective then regular.
     *      (ie no use of expensive arrays but integers $k_0, $k_1 ...
     *      or even, for example, the pure $key[] values hardcoded)
     *
     *    - avoiding 1000's of function calls of ie _encryptBlock()
     *      but inlining the crypt operations.
     *      in the mode of operation for() loop.
     *
     *    - full loop unroll the (sometimes key-dependent) rounds
     *      avoiding this way ++$i counters and runtime-if's etc...
     *
     *    The basic code architectur of the generated $inline en/decrypt()
     *    lambda function, in pseudo php, is:
     *
     *    <code>
     *    +----------------------------------------------------------------------------------------------+
     *    | callback $inline = create_function:                                                          |
     *    | lambda_function_0001_crypt_ECB($action, $text)                                               |
     *    | {                                                                                            |
     *    |     INSERT PHP CODE OF:                                                                      |
     *    |     $cipher_code['init_crypt'];                  // general init code.                       |
     *    |                                                  // ie: $sbox'es declarations used for       |
     *    |                                                  //     encrypt and decrypt'ing.             |
     *    |                                                                                              |
     *    |     switch ($action) {                                                                       |
     *    |         case 'encrypt':                                                                      |
     *    |             INSERT PHP CODE OF:                                                              |
     *    |             $cipher_code['init_encrypt'];       // encrypt sepcific init code.               |
     *    |                                                    ie: specified $key or $box                |
     *    |                                                        declarations for encrypt'ing.         |
     *    |                                                                                              |
     *    |             foreach ($ciphertext) {                                                          |
     *    |                 $in = $block_size of $ciphertext;                                            |
     *    |                                                                                              |
     *    |                 INSERT PHP CODE OF:                                                          |
     *    |                 $cipher_code['encrypt_block'];  // encrypt's (string) $in, which is always:  |
     *    |                                                 // strlen($in) == $this->block_size          |
     *    |                                                 // here comes the cipher algorithm in action |
     *    |                                                 // for encryption.                           |
     *    |                                                 // $cipher_code['encrypt_block'] has to      |
     *    |                                                 // encrypt the content of the $in variable   |
     *    |                                                                                              |
     *    |                 $plaintext .= $in;                                                           |
     *    |             }                                                                                |
     *    |             return $plaintext;                                                               |
     *    |                                                                                              |
     *    |         case 'decrypt':                                                                      |
     *    |             INSERT PHP CODE OF:                                                              |
     *    |             $cipher_code['init_decrypt'];       // decrypt sepcific init code                |
     *    |                                                    ie: specified $key or $box                |
     *    |                                                        declarations for decrypt'ing.         |
     *    |             foreach ($plaintext) {                                                           |
     *    |                 $in = $block_size of $plaintext;                                             |
     *    |                                                                                              |
     *    |                 INSERT PHP CODE OF:                                                          |
     *    |                 $cipher_code['decrypt_block'];  // decrypt's (string) $in, which is always   |
     *    |                                                 // strlen($in) == $this->block_size          |
     *    |                                                 // here comes the cipher algorithm in action |
     *    |                                                 // for decryption.                           |
     *    |                                                 // $cipher_code['decrypt_block'] has to      |
     *    |                                                 // decrypt the content of the $in variable   |
     *    |                 $ciphertext .= $in;                                                          |
     *    |             }                                                                                |
     *    |             return $ciphertext;                                                              |
     *    |     }                                                                                        |
     *    | }                                                                                            |
     *    +----------------------------------------------------------------------------------------------+
     *    </code>
     *
     *    See also the \phpseclib3\Crypt\*::_setupInlineCrypt()'s for
     *    productive inline $cipher_code's how they works.
     *
     *    Structure of:
     *    <code>
     *    $cipher_code = [
     *        'init_crypt'    => (string) '', // optional
     *        'init_encrypt'  => (string) '', // optional
     *        'init_decrypt'  => (string) '', // optional
     *        'encrypt_block' => (string) '', // required
     *        'decrypt_block' => (string) ''  // required
     *    ];
     *    </code>
     *
     * @see self::setupInlineCrypt()
     * @see self::encrypt()
     * @see self::decrypt()
     * @param array $cipher_code
     * @return string (the name of the created callback function)
     */
    protected function createInlineCryptFunction($cipher_code)
    {
        $block_size = $this->block_size;

        // optional
        $init_crypt    = isset($cipher_code['init_crypt'])    ? $cipher_code['init_crypt']    : '';
        $init_encrypt  = isset($cipher_code['init_encrypt'])  ? $cipher_code['init_encrypt']  : '';
        $init_decrypt  = isset($cipher_code['init_decrypt'])  ? $cipher_code['init_decrypt']  : '';
        // required
        $encrypt_block = $cipher_code['encrypt_block'];
        $decrypt_block = $cipher_code['decrypt_block'];

        // Generating mode of operation inline code,
        // merged with the $cipher_code algorithm
        // for encrypt- and decryption.
        switch ($this->mode) {
            case self::MODE_ECB:
                $encrypt = $init_encrypt . '
                    $_ciphertext = "";
                    $_plaintext_len = strlen($_text);

                    for ($_i = 0; $_i < $_plaintext_len; $_i+= ' . $block_size . ') {
                        $in = substr($_text, $_i, ' . $block_size . ');
                        ' . $encrypt_block . '
                        $_ciphertext.= $in;
                    }

                    return $_ciphertext;
                    ';

                $decrypt = $init_decrypt . '
                    $_plaintext = "";
                    $_text = str_pad($_text, strlen($_text) + (' . $block_size . ' - strlen($_text) % ' . $block_size . ') % ' . $block_size . ', chr(0));
                    $_ciphertext_len = strlen($_text);

                    for ($_i = 0; $_i < $_ciphertext_len; $_i+= ' . $block_size . ') {
                        $in = substr($_text, $_i, ' . $block_size . ');
                        ' . $decrypt_block . '
                        $_plaintext.= $in;
                    }

                    return $this->unpad($_plaintext);
                    ';
                break;
            case self::MODE_CTR:
                $encrypt = $init_encrypt . '
                    $_ciphertext = "";
                    $_plaintext_len = strlen($_text);
                    $_xor = $this->encryptIV;
                    $_buffer = &$this->enbuffer;
                    if (strlen($_buffer["ciphertext"])) {
                        for ($_i = 0; $_i < $_plaintext_len; $_i+= ' . $block_size . ') {
                            $_block = substr($_text, $_i, ' . $block_size . ');
                            if (strlen($_block) > strlen($_buffer["ciphertext"])) {
                                $in = $_xor;
                                ' . $encrypt_block . '
                                \phpseclib3\Common\Functions\Strings::increment_str($_xor);
                                $_buffer["ciphertext"].= $in;
                            }
                            $_key = \phpseclib3\Common\Functions\Strings::shift($_buffer["ciphertext"], ' . $block_size . ');
                            $_ciphertext.= $_block ^ $_key;
                        }
                    } else {
                        for ($_i = 0; $_i < $_plaintext_len; $_i+= ' . $block_size . ') {
                            $_block = substr($_text, $_i, ' . $block_size . ');
                            $in = $_xor;
                            ' . $encrypt_block . '
                            \phpseclib3\Common\Functions\Strings::increment_str($_xor);
                            $_key = $in;
                            $_ciphertext.= $_block ^ $_key;
                        }
                    }
                    if ($this->continuousBuffer) {
                        $this->encryptIV = $_xor;
                        if ($_start = $_plaintext_len % ' . $block_size . ') {
                            $_buffer["ciphertext"] = substr($_key, $_start) . $_buffer["ciphertext"];
                        }
                    }

                    return $_ciphertext;
                ';

                $decrypt = $init_encrypt . '
                    $_plaintext = "";
                    $_ciphertext_len = strlen($_text);
                    $_xor = $this->decryptIV;
                    $_buffer = &$this->debuffer;

                    if (strlen($_buffer["ciphertext"])) {
                        for ($_i = 0; $_i < $_ciphertext_len; $_i+= ' . $block_size . ') {
                            $_block = substr($_text, $_i, ' . $block_size . ');
                            if (strlen($_block) > strlen($_buffer["ciphertext"])) {
                                $in = $_xor;
                                ' . $encrypt_block . '
                                \phpseclib3\Common\Functions\Strings::increment_str($_xor);
                                $_buffer["ciphertext"].= $in;
                            }
                            $_key = \phpseclib3\Common\Functions\Strings::shift($_buffer["ciphertext"], ' . $block_size . ');
                            $_plaintext.= $_block ^ $_key;
                        }
                    } else {
                        for ($_i = 0; $_i < $_ciphertext_len; $_i+= ' . $block_size . ') {
                            $_block = substr($_text, $_i, ' . $block_size . ');
                            $in = $_xor;
                            ' . $encrypt_block . '
                            \phpseclib3\Common\Functions\Strings::increment_str($_xor);
                            $_key = $in;
                            $_plaintext.= $_block ^ $_key;
                        }
                    }
                    if ($this->continuousBuffer) {
                        $this->decryptIV = $_xor;
                        if ($_start = $_ciphertext_len % ' . $block_size . ') {
                            $_buffer["ciphertext"] = substr($_key, $_start) . $_buffer["ciphertext"];
                        }
                    }

                    return $_plaintext;
                    ';
                break;
            case self::MODE_CFB:
                $encrypt = $init_encrypt . '
                    $_ciphertext = "";
                    $_buffer = &$this->enbuffer;

                    if ($this->continuousBuffer) {
                        $_iv = &$this->encryptIV;
                        $_pos = &$_buffer["pos"];
                    } else {
                        $_iv = $this->encryptIV;
                        $_pos = 0;
                    }
                    $_len = strlen($_text);
                    $_i = 0;
                    if ($_pos) {
                        $_orig_pos = $_pos;
                        $_max = ' . $block_size . ' - $_pos;
                        if ($_len >= $_max) {
                            $_i = $_max;
                            $_len-= $_max;
                            $_pos = 0;
                        } else {
                            $_i = $_len;
                            $_pos+= $_len;
                            $_len = 0;
                        }
                        $_ciphertext = substr($_iv, $_orig_pos) ^ $_text;
                        $_iv = substr_replace($_iv, $_ciphertext, $_orig_pos, $_i);
                    }
                    while ($_len >= ' . $block_size . ') {
                        $in = $_iv;
                        ' . $encrypt_block . ';
                        $_iv = $in ^ substr($_text, $_i, ' . $block_size . ');
                        $_ciphertext.= $_iv;
                        $_len-= ' . $block_size . ';
                        $_i+= ' . $block_size . ';
                    }
                    if ($_len) {
                        $in = $_iv;
                        ' . $encrypt_block . '
                        $_iv = $in;
                        $_block = $_iv ^ substr($_text, $_i);
                        $_iv = substr_replace($_iv, $_block, 0, $_len);
                        $_ciphertext.= $_block;
                        $_pos = $_len;
                    }
                    return $_ciphertext;
                ';

                $decrypt = $init_encrypt . '
                    $_plaintext = "";
                    $_buffer = &$this->debuffer;

                    if ($this->continuousBuffer) {
                        $_iv = &$this->decryptIV;
                        $_pos = &$_buffer["pos"];
                    } else {
                        $_iv = $this->decryptIV;
                        $_pos = 0;
                    }
                    $_len = strlen($_text);
                    $_i = 0;
                    if ($_pos) {
                        $_orig_pos = $_pos;
                        $_max = ' . $block_size . ' - $_pos;
                        if ($_len >= $_max) {
                            $_i = $_max;
                            $_len-= $_max;
                            $_pos = 0;
                        } else {
                            $_i = $_len;
                            $_pos+= $_len;
                            $_len = 0;
                        }
                        $_plaintext = substr($_iv, $_orig_pos) ^ $_text;
                        $_iv = substr_replace($_iv, substr($_text, 0, $_i), $_orig_pos, $_i);
                    }
                    while ($_len >= ' . $block_size . ') {
                        $in = $_iv;
                        ' . $encrypt_block . '
                        $_iv = $in;
                        $cb = substr($_text, $_i, ' . $block_size . ');
                        $_plaintext.= $_iv ^ $cb;
                        $_iv = $cb;
                        $_len-= ' . $block_size . ';
                        $_i+= ' . $block_size . ';
                    }
                    if ($_len) {
                        $in = $_iv;
                        ' . $encrypt_block . '
                        $_iv = $in;
                        $_plaintext.= $_iv ^ substr($_text, $_i);
                        $_iv = substr_replace($_iv, substr($_text, $_i), 0, $_len);
                        $_pos = $_len;
                    }

                    return $_plaintext;
                    ';
                break;
            case self::MODE_CFB8:
                $encrypt = $init_encrypt . '
                    $_ciphertext = "";
                    $_len = strlen($_text);
                    $_iv = $this->encryptIV;

                    for ($_i = 0; $_i < $_len; ++$_i) {
                        $in = $_iv;
                        ' . $encrypt_block . '
                        $_ciphertext .= ($_c = $_text[$_i] ^ $in);
                        $_iv = substr($_iv, 1) . $_c;
                    }

                    if ($this->continuousBuffer) {
                        if ($_len >= ' . $block_size . ') {
                            $this->encryptIV = substr($_ciphertext, -' . $block_size . ');
                        } else {
                            $this->encryptIV = substr($this->encryptIV, $_len - ' . $block_size . ') . substr($_ciphertext, -$_len);
                        }
                    }

                    return $_ciphertext;
                    ';
                $decrypt = $init_encrypt . '
                    $_plaintext = "";
                    $_len = strlen($_text);
                    $_iv = $this->decryptIV;

                    for ($_i = 0; $_i < $_len; ++$_i) {
                        $in = $_iv;
                        ' . $encrypt_block . '
                        $_plaintext .= $_text[$_i] ^ $in;
                        $_iv = substr($_iv, 1) . $_text[$_i];
                    }

                    if ($this->continuousBuffer) {
                        if ($_len >= ' . $block_size . ') {
                            $this->decryptIV = substr($_text, -' . $block_size . ');
                        } else {
                            $this->decryptIV = substr($this->decryptIV, $_len - ' . $block_size . ') . substr($_text, -$_len);
                        }
                    }

                    return $_plaintext;
                    ';
                break;
            case self::MODE_OFB8:
                $encrypt = $init_encrypt . '
                    $_ciphertext = "";
                    $_len = strlen($_text);
                    $_iv = $this->encryptIV;

                    for ($_i = 0; $_i < $_len; ++$_i) {
                        $in = $_iv;
                        ' . $encrypt_block . '
                        $_ciphertext.= $_text[$_i] ^ $in;
                        $_iv = substr($_iv, 1) . $in[0];
                    }

                    if ($this->continuousBuffer) {
                        $this->encryptIV = $_iv;
                    }

                    return $_ciphertext;
                    ';
                $decrypt = $init_encrypt . '
                    $_plaintext = "";
                    $_len = strlen($_text);
                    $_iv = $this->decryptIV;

                    for ($_i = 0; $_i < $_len; ++$_i) {
                        $in = $_iv;
                        ' . $encrypt_block . '
                        $_plaintext.= $_text[$_i] ^ $in;
                        $_iv = substr($_iv, 1) . $in[0];
                    }

                    if ($this->continuousBuffer) {
                        $this->decryptIV = $_iv;
                    }

                    return $_plaintext;
                    ';
                break;
            case self::MODE_OFB:
                $encrypt = $init_encrypt . '
                    $_ciphertext = "";
                    $_plaintext_len = strlen($_text);
                    $_xor = $this->encryptIV;
                    $_buffer = &$this->enbuffer;

                    if (strlen($_buffer["xor"])) {
                        for ($_i = 0; $_i < $_plaintext_len; $_i+= ' . $block_size . ') {
                            $_block = substr($_text, $_i, ' . $block_size . ');
                            if (strlen($_block) > strlen($_buffer["xor"])) {
                                $in = $_xor;
                                ' . $encrypt_block . '
                                $_xor = $in;
                                $_buffer["xor"].= $_xor;
                            }
                            $_key = \phpseclib3\Common\Functions\Strings::shift($_buffer["xor"], ' . $block_size . ');
                            $_ciphertext.= $_block ^ $_key;
                        }
                    } else {
                        for ($_i = 0; $_i < $_plaintext_len; $_i+= ' . $block_size . ') {
                            $in = $_xor;
                            ' . $encrypt_block . '
                            $_xor = $in;
                            $_ciphertext.= substr($_text, $_i, ' . $block_size . ') ^ $_xor;
                        }
                        $_key = $_xor;
                    }
                    if ($this->continuousBuffer) {
                        $this->encryptIV = $_xor;
                        if ($_start = $_plaintext_len % ' . $block_size . ') {
                             $_buffer["xor"] = substr($_key, $_start) . $_buffer["xor"];
                        }
                    }
                    return $_ciphertext;
                    ';

                $decrypt = $init_encrypt . '
                    $_plaintext = "";
                    $_ciphertext_len = strlen($_text);
                    $_xor = $this->decryptIV;
                    $_buffer = &$this->debuffer;

                    if (strlen($_buffer["xor"])) {
                        for ($_i = 0; $_i < $_ciphertext_len; $_i+= ' . $block_size . ') {
                            $_block = substr($_text, $_i, ' . $block_size . ');
                            if (strlen($_block) > strlen($_buffer["xor"])) {
                                $in = $_xor;
                                ' . $encrypt_block . '
                                $_xor = $in;
                                $_buffer["xor"].= $_xor;
                            }
                            $_key = \phpseclib3\Common\Functions\Strings::shift($_buffer["xor"], ' . $block_size . ');
                            $_plaintext.= $_block ^ $_key;
                        }
                    } else {
                        for ($_i = 0; $_i < $_ciphertext_len; $_i+= ' . $block_size . ') {
                            $in = $_xor;
                            ' . $encrypt_block . '
                            $_xor = $in;
                            $_plaintext.= substr($_text, $_i, ' . $block_size . ') ^ $_xor;
                        }
                        $_key = $_xor;
                    }
                    if ($this->continuousBuffer) {
                        $this->decryptIV = $_xor;
                        if ($_start = $_ciphertext_len % ' . $block_size . ') {
                             $_buffer["xor"] = substr($_key, $_start) . $_buffer["xor"];
                        }
                    }
                    return $_plaintext;
                    ';
                break;
            case self::MODE_STREAM:
                $encrypt = $init_encrypt . '
                    $_ciphertext = "";
                    ' . $encrypt_block . '
                    return $_ciphertext;
                    ';
                $decrypt = $init_decrypt . '
                    $_plaintext = "";
                    ' . $decrypt_block . '
                    return $_plaintext;
                    ';
                break;
            // case self::MODE_CBC:
            default:
                $encrypt = $init_encrypt . '
                    $_ciphertext = "";
                    $_plaintext_len = strlen($_text);

                    $in = $this->encryptIV;

                    for ($_i = 0; $_i < $_plaintext_len; $_i+= ' . $block_size . ') {
                        $in = substr($_text, $_i, ' . $block_size . ') ^ $in;
                        ' . $encrypt_block . '
                        $_ciphertext.= $in;
                    }

                    if ($this->continuousBuffer) {
                        $this->encryptIV = $in;
                    }

                    return $_ciphertext;
                    ';

                $decrypt = $init_decrypt . '
                    $_plaintext = "";
                    $_text = str_pad($_text, strlen($_text) + (' . $block_size . ' - strlen($_text) % ' . $block_size . ') % ' . $block_size . ', chr(0));
                    $_ciphertext_len = strlen($_text);

                    $_iv = $this->decryptIV;

                    for ($_i = 0; $_i < $_ciphertext_len; $_i+= ' . $block_size . ') {
                        $in = $_block = substr($_text, $_i, ' . $block_size . ');
                        ' . $decrypt_block . '
                        $_plaintext.= $in ^ $_iv;
                        $_iv = $_block;
                    }

                    if ($this->continuousBuffer) {
                        $this->decryptIV = $_iv;
                    }

                    return $this->unpad($_plaintext);
                    ';
                break;
        }

        // Before discrediting this, please read the following:
        // @see https://github.com/phpseclib/phpseclib/issues/1293
        // @see https://github.com/phpseclib/phpseclib/pull/1143
        eval('$func = function ($_action, $_text) { ' . $init_crypt . 'if ($_action == "encrypt") { ' . $encrypt . ' } else { ' . $decrypt . ' }};');

        return \Closure::bind($func, $this, static::class);
    }

    /**
     * Convert float to int
     *
     * On ARM CPUs converting floats to ints doesn't always work
     *
     * @param string $x
     * @return int
     */
    protected static function safe_intval($x)
    {
        if (is_int($x)) {
            return $x;
        }

        if (self::$use_reg_intval) {
            return PHP_INT_SIZE == 4 && PHP_VERSION_ID >= 80100 ? intval($x) : $x;
        }

        return (fmod($x, 0x80000000) & 0x7FFFFFFF) |
            ((fmod(floor($x / 0x80000000), 2) & 1) << 31);
    }

    /**
     * eval()'able string for in-line float to int
     *
     * @return string
     */
    protected static function safe_intval_inline()
    {
        if (self::$use_reg_intval) {
            return PHP_INT_SIZE == 4 && PHP_VERSION_ID >= 80100 ? 'intval(%s)' : '%s';
        }

        $safeint = '(is_int($temp = %s) ? $temp : (fmod($temp, 0x80000000) & 0x7FFFFFFF) | ';
        return $safeint . '((fmod(floor($temp / 0x80000000), 2) & 1) << 31))';
    }

    /**
     * Sets up GCM parameters
     *
     * See steps 1-2 of https://nvlpubs.nist.gov/nistpubs/Legacy/SP/nistspecialpublication800-38d.pdf#page=23
     * for more info
     *
     */
    private function setupGCM()
    {
        // don't keep on re-calculating $this->h
        if (!$this->h || $this->hKey != $this->key) {
            $cipher = new static('ecb');
            $cipher->setKey($this->key);
            $cipher->disablePadding();

            $this->h = self::$gcmField->newInteger(
                Strings::switchEndianness($cipher->encrypt("\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"))
            );
            $this->hKey = $this->key;
        }

        if (strlen($this->nonce) == 12) {
            $this->iv = $this->nonce . "\0\0\0\1";
        } else {
            $this->iv = $this->ghash(
                self::nullPad128($this->nonce) . str_repeat("\0", 8) . self::len64($this->nonce)
            );
        }
    }

    /**
     * Performs GHASH operation
     *
     * See https://nvlpubs.nist.gov/nistpubs/Legacy/SP/nistspecialpublication800-38d.pdf#page=20
     * for more info
     *
     * @see self::decrypt()
     * @see self::encrypt()
     * @param string $x
     * @return string
     */
    private function ghash($x)
    {
        $h = $this->h;
        $y = ["\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"];
        $x = str_split($x, 16);
        $n = 0;
        // the switchEndianness calls are necessary because the multiplication algorithm in BinaryField/Integer
        // interprets strings as polynomials in big endian order whereas in GCM they're interpreted in little
        // endian order per https://nvlpubs.nist.gov/nistpubs/Legacy/SP/nistspecialpublication800-38d.pdf#page=19.
        // big endian order is what binary field elliptic curves use per http://www.secg.org/sec1-v2.pdf#page=18.

        // we could switchEndianness here instead of in the while loop but doing so in the while loop seems like it
        // might be slightly more performant
        //$x = Strings::switchEndianness($x);
        foreach ($x as $xn) {
            $xn = Strings::switchEndianness($xn);
            $t = $y[$n] ^ $xn;
            $temp = self::$gcmField->newInteger($t);
            $y[++$n] = $temp->multiply($h)->toBytes();
            $y[$n] = substr($y[$n], 1);
        }
        $y[$n] = Strings::switchEndianness($y[$n]);
        return $y[$n];
    }

    /**
     * Returns the bit length of a string in a packed format
     *
     * @see self::decrypt()
     * @see self::encrypt()
     * @see self::setupGCM()
     * @param string $str
     * @return string
     */
    private static function len64($str)
    {
        return "\0\0\0\0" . pack('N', 8 * strlen($str));
    }

    /**
     * NULL pads a string to be a multiple of 128
     *
     * @see self::decrypt()
     * @see self::encrypt()
     * @see self::setupGCM()
     * @param string $str
     * @return string
     */
    protected static function nullPad128($str)
    {
        $len = strlen($str);
        return $str . str_repeat("\0", 16 * ceil($len / 16) - $len);
    }

    /**
     * Calculates Poly1305 MAC
     *
     * On my system ChaCha20, with libsodium, takes 0.5s. With this custom Poly1305 implementation
     * it takes 1.2s.
     *
     * @see self::decrypt()
     * @see self::encrypt()
     * @param string $text
     * @return string
     */
    protected function poly1305($text)
    {
        $s = $this->poly1305Key; // strlen($this->poly1305Key) == 32
        $r = Strings::shift($s, 16);
        $r = strrev($r);
        $r &= "\x0f\xff\xff\xfc\x0f\xff\xff\xfc\x0f\xff\xff\xfc\x0f\xff\xff\xff";
        $s = strrev($s);

        $r = self::$poly1305Field->newInteger(new BigInteger($r, 256));
        $s = self::$poly1305Field->newInteger(new BigInteger($s, 256));
        $a = self::$poly1305Field->newInteger(new BigInteger());

        $blocks = str_split($text, 16);
        foreach ($blocks as $block) {
            $n = strrev($block . chr(1));
            $n = self::$poly1305Field->newInteger(new BigInteger($n, 256));
            $a = $a->add($n);
            $a = $a->multiply($r);
        }
        $r = $a->toBigInteger()->add($s->toBigInteger());
        $mask = "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF";
        return strrev($r->toBytes()) & $mask;
    }

    /**
     * Return the mode
     *
     * You can do $obj instanceof AES or whatever to get the cipher but you can't do that to get the mode
     *
     * @return string
     */
    public function getMode()
    {
        return array_flip(self::MODE_MAP)[$this->mode];
    }

    /**
     * Is the continuous buffer enabled?
     *
     * @return boolean
     */
    public function continuousBufferEnabled()
    {
        return $this->continuousBuffer;
    }
}
<?php

/**
 * Fingerprint Trait for Public Keys
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2015 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\Crypt\Common\Traits;

use phpseclib3\Crypt\Hash;

/**
 * Fingerprint Trait for Private Keys
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
trait Fingerprint
{
    /**
     * Returns the public key's fingerprint
     *
     * The public key's fingerprint is returned, which is equivalent to running `ssh-keygen -lf rsa.pub`. If there is
     * no public key currently loaded, false is returned.
     * Example output (md5): "c1:b1:30:29:d7:b8:de:6c:97:77:10:d7:46:41:63:87" (as specified by RFC 4716)
     *
     * @param string $algorithm The hashing algorithm to be used. Valid options are 'md5' and 'sha256'. False is returned
     * for invalid values.
     * @return mixed
     */
    public function getFingerprint($algorithm = 'md5')
    {
        $type = self::validatePlugin('Keys', 'OpenSSH', 'savePublicKey');
        if ($type === false) {
            return false;
        }
        $key = $this->toString('OpenSSH', ['binary' => true]);
        if ($key === false) {
            return false;
        }
        switch ($algorithm) {
            case 'sha256':
                $hash = new Hash('sha256');
                $base = base64_encode($hash->hash($key));
                return substr($base, 0, strlen($base) - 1);
            case 'md5':
                return substr(chunk_split(md5($key), 2, ':'), 0, -1);
            default:
                return false;
        }
    }
}
<?php

/**
 * Password Protected Trait for Private Keys
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2015 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\Crypt\Common\Traits;

/**
 * Password Protected Trait for Private Keys
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
trait PasswordProtected
{
    /**
     * Password
     *
     * @var string|bool
     */
    private $password = false;

    /**
     * Sets the password
     *
     * Private keys can be encrypted with a password.  To unset the password, pass in the empty string or false.
     * Or rather, pass in $password such that empty($password) && !is_string($password) is true.
     *
     * @see self::createKey()
     * @see self::load()
     * @param string|bool $password
     */
    public function withPassword($password = false)
    {
        $new = clone $this;
        $new->password = $password;
        return $new;
    }
}
<?php

/**
 * Pure-PHP implementation of DES.
 *
 * Uses mcrypt, if available, and an internal implementation, otherwise.
 *
 * PHP version 5
 *
 * Useful resources are as follows:
 *
 *  - {@link http://en.wikipedia.org/wiki/DES_supplementary_material Wikipedia: DES supplementary material}
 *  - {@link http://www.itl.nist.gov/fipspubs/fip46-2.htm FIPS 46-2 - (DES), Data Encryption Standard}
 *  - {@link http://www.cs.eku.edu/faculty/styer/460/Encrypt/JS-DES.html JavaScript DES Example}
 *
 * Here's a short example of how to use this library:
 * <code>
 * <?php
 *    include 'vendor/autoload.php';
 *
 *    $des = new \phpseclib3\Crypt\DES('ctr');
 *
 *    $des->setKey('abcdefgh');
 *
 *    $size = 10 * 1024;
 *    $plaintext = '';
 *    for ($i = 0; $i < $size; $i++) {
 *        $plaintext.= 'a';
 *    }
 *
 *    echo $des->decrypt($des->encrypt($plaintext));
 * ?>
 * </code>
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2007 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\Crypt;

use phpseclib3\Crypt\Common\BlockCipher;
use phpseclib3\Exception\BadModeException;

/**
 * Pure-PHP implementation of DES.
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
class DES extends BlockCipher
{
    /**
     * Contains $keys[self::ENCRYPT]
     *
     * @see \phpseclib3\Crypt\DES::setupKey()
     * @see \phpseclib3\Crypt\DES::processBlock()
     */
    const ENCRYPT = 0;
    /**
     * Contains $keys[self::DECRYPT]
     *
     * @see \phpseclib3\Crypt\DES::setupKey()
     * @see \phpseclib3\Crypt\DES::processBlock()
     */
    const DECRYPT = 1;

    /**
     * Block Length of the cipher
     *
     * @see Common\SymmetricKey::block_size
     * @var int
     */
    protected $block_size = 8;

    /**
     * Key Length (in bytes)
     *
     * @see Common\SymmetricKey::setKeyLength()
     * @var int
     */
    protected $key_length = 8;

    /**
     * The mcrypt specific name of the cipher
     *
     * @see Common\SymmetricKey::cipher_name_mcrypt
     * @var string
     */
    protected $cipher_name_mcrypt = 'des';

    /**
     * The OpenSSL names of the cipher / modes
     *
     * @see Common\SymmetricKey::openssl_mode_names
     * @var array
     */
    protected $openssl_mode_names = [
        self::MODE_ECB => 'des-ecb',
        self::MODE_CBC => 'des-cbc',
        self::MODE_CFB => 'des-cfb',
        self::MODE_OFB => 'des-ofb'
        // self::MODE_CTR is undefined for DES
    ];

    /**
     * Optimizing value while CFB-encrypting
     *
     * @see Common\SymmetricKey::cfb_init_len
     * @var int
     */
    protected $cfb_init_len = 500;

    /**
     * Switch for DES/3DES encryption
     *
     * Used only if $engine == self::ENGINE_INTERNAL
     *
     * @see self::setupKey()
     * @see self::processBlock()
     * @var int
     */
    protected $des_rounds = 1;

    /**
     * max possible size of $key
     *
     * @see self::setKey()
     * @var string
     */
    protected $key_length_max = 8;

    /**
     * The Key Schedule
     *
     * @see self::setupKey()
     * @var array
     */
    private $keys;

    /**
     * Key Cache "key"
     *
     * @see self::setupKey()
     * @var array
     */
    private $kl;

    /**
     * Shuffle table.
     *
     * For each byte value index, the entry holds an 8-byte string
     * with each byte containing all bits in the same state as the
     * corresponding bit in the index value.
     *
     * @see self::processBlock()
     * @see self::setupKey()
     * @var array
     */
    protected static $shuffle = [
        "\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\xFF",
        "\x00\x00\x00\x00\x00\x00\xFF\x00", "\x00\x00\x00\x00\x00\x00\xFF\xFF",
        "\x00\x00\x00\x00\x00\xFF\x00\x00", "\x00\x00\x00\x00\x00\xFF\x00\xFF",
        "\x00\x00\x00\x00\x00\xFF\xFF\x00", "\x00\x00\x00\x00\x00\xFF\xFF\xFF",
        "\x00\x00\x00\x00\xFF\x00\x00\x00", "\x00\x00\x00\x00\xFF\x00\x00\xFF",
        "\x00\x00\x00\x00\xFF\x00\xFF\x00", "\x00\x00\x00\x00\xFF\x00\xFF\xFF",
        "\x00\x00\x00\x00\xFF\xFF\x00\x00", "\x00\x00\x00\x00\xFF\xFF\x00\xFF",
        "\x00\x00\x00\x00\xFF\xFF\xFF\x00", "\x00\x00\x00\x00\xFF\xFF\xFF\xFF",
        "\x00\x00\x00\xFF\x00\x00\x00\x00", "\x00\x00\x00\xFF\x00\x00\x00\xFF",
        "\x00\x00\x00\xFF\x00\x00\xFF\x00", "\x00\x00\x00\xFF\x00\x00\xFF\xFF",
        "\x00\x00\x00\xFF\x00\xFF\x00\x00", "\x00\x00\x00\xFF\x00\xFF\x00\xFF",
        "\x00\x00\x00\xFF\x00\xFF\xFF\x00", "\x00\x00\x00\xFF\x00\xFF\xFF\xFF",
        "\x00\x00\x00\xFF\xFF\x00\x00\x00", "\x00\x00\x00\xFF\xFF\x00\x00\xFF",
        "\x00\x00\x00\xFF\xFF\x00\xFF\x00", "\x00\x00\x00\xFF\xFF\x00\xFF\xFF",
        "\x00\x00\x00\xFF\xFF\xFF\x00\x00", "\x00\x00\x00\xFF\xFF\xFF\x00\xFF",
        "\x00\x00\x00\xFF\xFF\xFF\xFF\x00", "\x00\x00\x00\xFF\xFF\xFF\xFF\xFF",
        "\x00\x00\xFF\x00\x00\x00\x00\x00", "\x00\x00\xFF\x00\x00\x00\x00\xFF",
        "\x00\x00\xFF\x00\x00\x00\xFF\x00", "\x00\x00\xFF\x00\x00\x00\xFF\xFF",
        "\x00\x00\xFF\x00\x00\xFF\x00\x00", "\x00\x00\xFF\x00\x00\xFF\x00\xFF",
        "\x00\x00\xFF\x00\x00\xFF\xFF\x00", "\x00\x00\xFF\x00\x00\xFF\xFF\xFF",
        "\x00\x00\xFF\x00\xFF\x00\x00\x00", "\x00\x00\xFF\x00\xFF\x00\x00\xFF",
        "\x00\x00\xFF\x00\xFF\x00\xFF\x00", "\x00\x00\xFF\x00\xFF\x00\xFF\xFF",
        "\x00\x00\xFF\x00\xFF\xFF\x00\x00", "\x00\x00\xFF\x00\xFF\xFF\x00\xFF",
        "\x00\x00\xFF\x00\xFF\xFF\xFF\x00", "\x00\x00\xFF\x00\xFF\xFF\xFF\xFF",
        "\x00\x00\xFF\xFF\x00\x00\x00\x00", "\x00\x00\xFF\xFF\x00\x00\x00\xFF",
        "\x00\x00\xFF\xFF\x00\x00\xFF\x00", "\x00\x00\xFF\xFF\x00\x00\xFF\xFF",
        "\x00\x00\xFF\xFF\x00\xFF\x00\x00", "\x00\x00\xFF\xFF\x00\xFF\x00\xFF",
        "\x00\x00\xFF\xFF\x00\xFF\xFF\x00", "\x00\x00\xFF\xFF\x00\xFF\xFF\xFF",
        "\x00\x00\xFF\xFF\xFF\x00\x00\x00", "\x00\x00\xFF\xFF\xFF\x00\x00\xFF",
        "\x00\x00\xFF\xFF\xFF\x00\xFF\x00", "\x00\x00\xFF\xFF\xFF\x00\xFF\xFF",
        "\x00\x00\xFF\xFF\xFF\xFF\x00\x00", "\x00\x00\xFF\xFF\xFF\xFF\x00\xFF",
        "\x00\x00\xFF\xFF\xFF\xFF\xFF\x00", "\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF",
        "\x00\xFF\x00\x00\x00\x00\x00\x00", "\x00\xFF\x00\x00\x00\x00\x00\xFF",
        "\x00\xFF\x00\x00\x00\x00\xFF\x00", "\x00\xFF\x00\x00\x00\x00\xFF\xFF",
        "\x00\xFF\x00\x00\x00\xFF\x00\x00", "\x00\xFF\x00\x00\x00\xFF\x00\xFF",
        "\x00\xFF\x00\x00\x00\xFF\xFF\x00", "\x00\xFF\x00\x00\x00\xFF\xFF\xFF",
        "\x00\xFF\x00\x00\xFF\x00\x00\x00", "\x00\xFF\x00\x00\xFF\x00\x00\xFF",
        "\x00\xFF\x00\x00\xFF\x00\xFF\x00", "\x00\xFF\x00\x00\xFF\x00\xFF\xFF",
        "\x00\xFF\x00\x00\xFF\xFF\x00\x00", "\x00\xFF\x00\x00\xFF\xFF\x00\xFF",
        "\x00\xFF\x00\x00\xFF\xFF\xFF\x00", "\x00\xFF\x00\x00\xFF\xFF\xFF\xFF",
        "\x00\xFF\x00\xFF\x00\x00\x00\x00", "\x00\xFF\x00\xFF\x00\x00\x00\xFF",
        "\x00\xFF\x00\xFF\x00\x00\xFF\x00", "\x00\xFF\x00\xFF\x00\x00\xFF\xFF",
        "\x00\xFF\x00\xFF\x00\xFF\x00\x00", "\x00\xFF\x00\xFF\x00\xFF\x00\xFF",
        "\x00\xFF\x00\xFF\x00\xFF\xFF\x00", "\x00\xFF\x00\xFF\x00\xFF\xFF\xFF",
        "\x00\xFF\x00\xFF\xFF\x00\x00\x00", "\x00\xFF\x00\xFF\xFF\x00\x00\xFF",
        "\x00\xFF\x00\xFF\xFF\x00\xFF\x00", "\x00\xFF\x00\xFF\xFF\x00\xFF\xFF",
        "\x00\xFF\x00\xFF\xFF\xFF\x00\x00", "\x00\xFF\x00\xFF\xFF\xFF\x00\xFF",
        "\x00\xFF\x00\xFF\xFF\xFF\xFF\x00", "\x00\xFF\x00\xFF\xFF\xFF\xFF\xFF",
        "\x00\xFF\xFF\x00\x00\x00\x00\x00", "\x00\xFF\xFF\x00\x00\x00\x00\xFF",
        "\x00\xFF\xFF\x00\x00\x00\xFF\x00", "\x00\xFF\xFF\x00\x00\x00\xFF\xFF",
        "\x00\xFF\xFF\x00\x00\xFF\x00\x00", "\x00\xFF\xFF\x00\x00\xFF\x00\xFF",
        "\x00\xFF\xFF\x00\x00\xFF\xFF\x00", "\x00\xFF\xFF\x00\x00\xFF\xFF\xFF",
        "\x00\xFF\xFF\x00\xFF\x00\x00\x00", "\x00\xFF\xFF\x00\xFF\x00\x00\xFF",
        "\x00\xFF\xFF\x00\xFF\x00\xFF\x00", "\x00\xFF\xFF\x00\xFF\x00\xFF\xFF",
        "\x00\xFF\xFF\x00\xFF\xFF\x00\x00", "\x00\xFF\xFF\x00\xFF\xFF\x00\xFF",
        "\x00\xFF\xFF\x00\xFF\xFF\xFF\x00", "\x00\xFF\xFF\x00\xFF\xFF\xFF\xFF",
        "\x00\xFF\xFF\xFF\x00\x00\x00\x00", "\x00\xFF\xFF\xFF\x00\x00\x00\xFF",
        "\x00\xFF\xFF\xFF\x00\x00\xFF\x00", "\x00\xFF\xFF\xFF\x00\x00\xFF\xFF",
        "\x00\xFF\xFF\xFF\x00\xFF\x00\x00", "\x00\xFF\xFF\xFF\x00\xFF\x00\xFF",
        "\x00\xFF\xFF\xFF\x00\xFF\xFF\x00", "\x00\xFF\xFF\xFF\x00\xFF\xFF\xFF",
        "\x00\xFF\xFF\xFF\xFF\x00\x00\x00", "\x00\xFF\xFF\xFF\xFF\x00\x00\xFF",
        "\x00\xFF\xFF\xFF\xFF\x00\xFF\x00", "\x00\xFF\xFF\xFF\xFF\x00\xFF\xFF",
        "\x00\xFF\xFF\xFF\xFF\xFF\x00\x00", "\x00\xFF\xFF\xFF\xFF\xFF\x00\xFF",
        "\x00\xFF\xFF\xFF\xFF\xFF\xFF\x00", "\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF",
        "\xFF\x00\x00\x00\x00\x00\x00\x00", "\xFF\x00\x00\x00\x00\x00\x00\xFF",
        "\xFF\x00\x00\x00\x00\x00\xFF\x00", "\xFF\x00\x00\x00\x00\x00\xFF\xFF",
        "\xFF\x00\x00\x00\x00\xFF\x00\x00", "\xFF\x00\x00\x00\x00\xFF\x00\xFF",
        "\xFF\x00\x00\x00\x00\xFF\xFF\x00", "\xFF\x00\x00\x00\x00\xFF\xFF\xFF",
        "\xFF\x00\x00\x00\xFF\x00\x00\x00", "\xFF\x00\x00\x00\xFF\x00\x00\xFF",
        "\xFF\x00\x00\x00\xFF\x00\xFF\x00", "\xFF\x00\x00\x00\xFF\x00\xFF\xFF",
        "\xFF\x00\x00\x00\xFF\xFF\x00\x00", "\xFF\x00\x00\x00\xFF\xFF\x00\xFF",
        "\xFF\x00\x00\x00\xFF\xFF\xFF\x00", "\xFF\x00\x00\x00\xFF\xFF\xFF\xFF",
        "\xFF\x00\x00\xFF\x00\x00\x00\x00", "\xFF\x00\x00\xFF\x00\x00\x00\xFF",
        "\xFF\x00\x00\xFF\x00\x00\xFF\x00", "\xFF\x00\x00\xFF\x00\x00\xFF\xFF",
        "\xFF\x00\x00\xFF\x00\xFF\x00\x00", "\xFF\x00\x00\xFF\x00\xFF\x00\xFF",
        "\xFF\x00\x00\xFF\x00\xFF\xFF\x00", "\xFF\x00\x00\xFF\x00\xFF\xFF\xFF",
        "\xFF\x00\x00\xFF\xFF\x00\x00\x00", "\xFF\x00\x00\xFF\xFF\x00\x00\xFF",
        "\xFF\x00\x00\xFF\xFF\x00\xFF\x00", "\xFF\x00\x00\xFF\xFF\x00\xFF\xFF",
        "\xFF\x00\x00\xFF\xFF\xFF\x00\x00", "\xFF\x00\x00\xFF\xFF\xFF\x00\xFF",
        "\xFF\x00\x00\xFF\xFF\xFF\xFF\x00", "\xFF\x00\x00\xFF\xFF\xFF\xFF\xFF",
        "\xFF\x00\xFF\x00\x00\x00\x00\x00", "\xFF\x00\xFF\x00\x00\x00\x00\xFF",
        "\xFF\x00\xFF\x00\x00\x00\xFF\x00", "\xFF\x00\xFF\x00\x00\x00\xFF\xFF",
        "\xFF\x00\xFF\x00\x00\xFF\x00\x00", "\xFF\x00\xFF\x00\x00\xFF\x00\xFF",
        "\xFF\x00\xFF\x00\x00\xFF\xFF\x00", "\xFF\x00\xFF\x00\x00\xFF\xFF\xFF",
        "\xFF\x00\xFF\x00\xFF\x00\x00\x00", "\xFF\x00\xFF\x00\xFF\x00\x00\xFF",
        "\xFF\x00\xFF\x00\xFF\x00\xFF\x00", "\xFF\x00\xFF\x00\xFF\x00\xFF\xFF",
        "\xFF\x00\xFF\x00\xFF\xFF\x00\x00", "\xFF\x00\xFF\x00\xFF\xFF\x00\xFF",
        "\xFF\x00\xFF\x00\xFF\xFF\xFF\x00", "\xFF\x00\xFF\x00\xFF\xFF\xFF\xFF",
        "\xFF\x00\xFF\xFF\x00\x00\x00\x00", "\xFF\x00\xFF\xFF\x00\x00\x00\xFF",
        "\xFF\x00\xFF\xFF\x00\x00\xFF\x00", "\xFF\x00\xFF\xFF\x00\x00\xFF\xFF",
        "\xFF\x00\xFF\xFF\x00\xFF\x00\x00", "\xFF\x00\xFF\xFF\x00\xFF\x00\xFF",
        "\xFF\x00\xFF\xFF\x00\xFF\xFF\x00", "\xFF\x00\xFF\xFF\x00\xFF\xFF\xFF",
        "\xFF\x00\xFF\xFF\xFF\x00\x00\x00", "\xFF\x00\xFF\xFF\xFF\x00\x00\xFF",
        "\xFF\x00\xFF\xFF\xFF\x00\xFF\x00", "\xFF\x00\xFF\xFF\xFF\x00\xFF\xFF",
        "\xFF\x00\xFF\xFF\xFF\xFF\x00\x00", "\xFF\x00\xFF\xFF\xFF\xFF\x00\xFF",
        "\xFF\x00\xFF\xFF\xFF\xFF\xFF\x00", "\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF",
        "\xFF\xFF\x00\x00\x00\x00\x00\x00", "\xFF\xFF\x00\x00\x00\x00\x00\xFF",
        "\xFF\xFF\x00\x00\x00\x00\xFF\x00", "\xFF\xFF\x00\x00\x00\x00\xFF\xFF",
        "\xFF\xFF\x00\x00\x00\xFF\x00\x00", "\xFF\xFF\x00\x00\x00\xFF\x00\xFF",
        "\xFF\xFF\x00\x00\x00\xFF\xFF\x00", "\xFF\xFF\x00\x00\x00\xFF\xFF\xFF",
        "\xFF\xFF\x00\x00\xFF\x00\x00\x00", "\xFF\xFF\x00\x00\xFF\x00\x00\xFF",
        "\xFF\xFF\x00\x00\xFF\x00\xFF\x00", "\xFF\xFF\x00\x00\xFF\x00\xFF\xFF",
        "\xFF\xFF\x00\x00\xFF\xFF\x00\x00", "\xFF\xFF\x00\x00\xFF\xFF\x00\xFF",
        "\xFF\xFF\x00\x00\xFF\xFF\xFF\x00", "\xFF\xFF\x00\x00\xFF\xFF\xFF\xFF",
        "\xFF\xFF\x00\xFF\x00\x00\x00\x00", "\xFF\xFF\x00\xFF\x00\x00\x00\xFF",
        "\xFF\xFF\x00\xFF\x00\x00\xFF\x00", "\xFF\xFF\x00\xFF\x00\x00\xFF\xFF",
        "\xFF\xFF\x00\xFF\x00\xFF\x00\x00", "\xFF\xFF\x00\xFF\x00\xFF\x00\xFF",
        "\xFF\xFF\x00\xFF\x00\xFF\xFF\x00", "\xFF\xFF\x00\xFF\x00\xFF\xFF\xFF",
        "\xFF\xFF\x00\xFF\xFF\x00\x00\x00", "\xFF\xFF\x00\xFF\xFF\x00\x00\xFF",
        "\xFF\xFF\x00\xFF\xFF\x00\xFF\x00", "\xFF\xFF\x00\xFF\xFF\x00\xFF\xFF",
        "\xFF\xFF\x00\xFF\xFF\xFF\x00\x00", "\xFF\xFF\x00\xFF\xFF\xFF\x00\xFF",
        "\xFF\xFF\x00\xFF\xFF\xFF\xFF\x00", "\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF",
        "\xFF\xFF\xFF\x00\x00\x00\x00\x00", "\xFF\xFF\xFF\x00\x00\x00\x00\xFF",
        "\xFF\xFF\xFF\x00\x00\x00\xFF\x00", "\xFF\xFF\xFF\x00\x00\x00\xFF\xFF",
        "\xFF\xFF\xFF\x00\x00\xFF\x00\x00", "\xFF\xFF\xFF\x00\x00\xFF\x00\xFF",
        "\xFF\xFF\xFF\x00\x00\xFF\xFF\x00", "\xFF\xFF\xFF\x00\x00\xFF\xFF\xFF",
        "\xFF\xFF\xFF\x00\xFF\x00\x00\x00", "\xFF\xFF\xFF\x00\xFF\x00\x00\xFF",
        "\xFF\xFF\xFF\x00\xFF\x00\xFF\x00", "\xFF\xFF\xFF\x00\xFF\x00\xFF\xFF",
        "\xFF\xFF\xFF\x00\xFF\xFF\x00\x00", "\xFF\xFF\xFF\x00\xFF\xFF\x00\xFF",
        "\xFF\xFF\xFF\x00\xFF\xFF\xFF\x00", "\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF",
        "\xFF\xFF\xFF\xFF\x00\x00\x00\x00", "\xFF\xFF\xFF\xFF\x00\x00\x00\xFF",
        "\xFF\xFF\xFF\xFF\x00\x00\xFF\x00", "\xFF\xFF\xFF\xFF\x00\x00\xFF\xFF",
        "\xFF\xFF\xFF\xFF\x00\xFF\x00\x00", "\xFF\xFF\xFF\xFF\x00\xFF\x00\xFF",
        "\xFF\xFF\xFF\xFF\x00\xFF\xFF\x00", "\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF",
        "\xFF\xFF\xFF\xFF\xFF\x00\x00\x00", "\xFF\xFF\xFF\xFF\xFF\x00\x00\xFF",
        "\xFF\xFF\xFF\xFF\xFF\x00\xFF\x00", "\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF",
        "\xFF\xFF\xFF\xFF\xFF\xFF\x00\x00", "\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF",
        "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00", "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
    ];

    /**
     * IP mapping helper table.
     *
     * Indexing this table with each source byte performs the initial bit permutation.
     *
     * @var array
     */
    protected static $ipmap = [
        0x00, 0x10, 0x01, 0x11, 0x20, 0x30, 0x21, 0x31,
        0x02, 0x12, 0x03, 0x13, 0x22, 0x32, 0x23, 0x33,
        0x40, 0x50, 0x41, 0x51, 0x60, 0x70, 0x61, 0x71,
        0x42, 0x52, 0x43, 0x53, 0x62, 0x72, 0x63, 0x73,
        0x04, 0x14, 0x05, 0x15, 0x24, 0x34, 0x25, 0x35,
        0x06, 0x16, 0x07, 0x17, 0x26, 0x36, 0x27, 0x37,
        0x44, 0x54, 0x45, 0x55, 0x64, 0x74, 0x65, 0x75,
        0x46, 0x56, 0x47, 0x57, 0x66, 0x76, 0x67, 0x77,
        0x80, 0x90, 0x81, 0x91, 0xA0, 0xB0, 0xA1, 0xB1,
        0x82, 0x92, 0x83, 0x93, 0xA2, 0xB2, 0xA3, 0xB3,
        0xC0, 0xD0, 0xC1, 0xD1, 0xE0, 0xF0, 0xE1, 0xF1,
        0xC2, 0xD2, 0xC3, 0xD3, 0xE2, 0xF2, 0xE3, 0xF3,
        0x84, 0x94, 0x85, 0x95, 0xA4, 0xB4, 0xA5, 0xB5,
        0x86, 0x96, 0x87, 0x97, 0xA6, 0xB6, 0xA7, 0xB7,
        0xC4, 0xD4, 0xC5, 0xD5, 0xE4, 0xF4, 0xE5, 0xF5,
        0xC6, 0xD6, 0xC7, 0xD7, 0xE6, 0xF6, 0xE7, 0xF7,
        0x08, 0x18, 0x09, 0x19, 0x28, 0x38, 0x29, 0x39,
        0x0A, 0x1A, 0x0B, 0x1B, 0x2A, 0x3A, 0x2B, 0x3B,
        0x48, 0x58, 0x49, 0x59, 0x68, 0x78, 0x69, 0x79,
        0x4A, 0x5A, 0x4B, 0x5B, 0x6A, 0x7A, 0x6B, 0x7B,
        0x0C, 0x1C, 0x0D, 0x1D, 0x2C, 0x3C, 0x2D, 0x3D,
        0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F,
        0x4C, 0x5C, 0x4D, 0x5D, 0x6C, 0x7C, 0x6D, 0x7D,
        0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F,
        0x88, 0x98, 0x89, 0x99, 0xA8, 0xB8, 0xA9, 0xB9,
        0x8A, 0x9A, 0x8B, 0x9B, 0xAA, 0xBA, 0xAB, 0xBB,
        0xC8, 0xD8, 0xC9, 0xD9, 0xE8, 0xF8, 0xE9, 0xF9,
        0xCA, 0xDA, 0xCB, 0xDB, 0xEA, 0xFA, 0xEB, 0xFB,
        0x8C, 0x9C, 0x8D, 0x9D, 0xAC, 0xBC, 0xAD, 0xBD,
        0x8E, 0x9E, 0x8F, 0x9F, 0xAE, 0xBE, 0xAF, 0xBF,
        0xCC, 0xDC, 0xCD, 0xDD, 0xEC, 0xFC, 0xED, 0xFD,
        0xCE, 0xDE, 0xCF, 0xDF, 0xEE, 0xFE, 0xEF, 0xFF
    ];

    /**
     * Inverse IP mapping helper table.
     * Indexing this table with a byte value reverses the bit order.
     *
     * @var array
     */
    protected static $invipmap = [
        0x00, 0x80, 0x40, 0xC0, 0x20, 0xA0, 0x60, 0xE0,
        0x10, 0x90, 0x50, 0xD0, 0x30, 0xB0, 0x70, 0xF0,
        0x08, 0x88, 0x48, 0xC8, 0x28, 0xA8, 0x68, 0xE8,
        0x18, 0x98, 0x58, 0xD8, 0x38, 0xB8, 0x78, 0xF8,
        0x04, 0x84, 0x44, 0xC4, 0x24, 0xA4, 0x64, 0xE4,
        0x14, 0x94, 0x54, 0xD4, 0x34, 0xB4, 0x74, 0xF4,
        0x0C, 0x8C, 0x4C, 0xCC, 0x2C, 0xAC, 0x6C, 0xEC,
        0x1C, 0x9C, 0x5C, 0xDC, 0x3C, 0xBC, 0x7C, 0xFC,
        0x02, 0x82, 0x42, 0xC2, 0x22, 0xA2, 0x62, 0xE2,
        0x12, 0x92, 0x52, 0xD2, 0x32, 0xB2, 0x72, 0xF2,
        0x0A, 0x8A, 0x4A, 0xCA, 0x2A, 0xAA, 0x6A, 0xEA,
        0x1A, 0x9A, 0x5A, 0xDA, 0x3A, 0xBA, 0x7A, 0xFA,
        0x06, 0x86, 0x46, 0xC6, 0x26, 0xA6, 0x66, 0xE6,
        0x16, 0x96, 0x56, 0xD6, 0x36, 0xB6, 0x76, 0xF6,
        0x0E, 0x8E, 0x4E, 0xCE, 0x2E, 0xAE, 0x6E, 0xEE,
        0x1E, 0x9E, 0x5E, 0xDE, 0x3E, 0xBE, 0x7E, 0xFE,
        0x01, 0x81, 0x41, 0xC1, 0x21, 0xA1, 0x61, 0xE1,
        0x11, 0x91, 0x51, 0xD1, 0x31, 0xB1, 0x71, 0xF1,
        0x09, 0x89, 0x49, 0xC9, 0x29, 0xA9, 0x69, 0xE9,
        0x19, 0x99, 0x59, 0xD9, 0x39, 0xB9, 0x79, 0xF9,
        0x05, 0x85, 0x45, 0xC5, 0x25, 0xA5, 0x65, 0xE5,
        0x15, 0x95, 0x55, 0xD5, 0x35, 0xB5, 0x75, 0xF5,
        0x0D, 0x8D, 0x4D, 0xCD, 0x2D, 0xAD, 0x6D, 0xED,
        0x1D, 0x9D, 0x5D, 0xDD, 0x3D, 0xBD, 0x7D, 0xFD,
        0x03, 0x83, 0x43, 0xC3, 0x23, 0xA3, 0x63, 0xE3,
        0x13, 0x93, 0x53, 0xD3, 0x33, 0xB3, 0x73, 0xF3,
        0x0B, 0x8B, 0x4B, 0xCB, 0x2B, 0xAB, 0x6B, 0xEB,
        0x1B, 0x9B, 0x5B, 0xDB, 0x3B, 0xBB, 0x7B, 0xFB,
        0x07, 0x87, 0x47, 0xC7, 0x27, 0xA7, 0x67, 0xE7,
        0x17, 0x97, 0x57, 0xD7, 0x37, 0xB7, 0x77, 0xF7,
        0x0F, 0x8F, 0x4F, 0xCF, 0x2F, 0xAF, 0x6F, 0xEF,
        0x1F, 0x9F, 0x5F, 0xDF, 0x3F, 0xBF, 0x7F, 0xFF
    ];

    /**
     * Pre-permuted S-box1
     *
     * Each box ($sbox1-$sbox8) has been vectorized, then each value pre-permuted using the
     * P table: concatenation can then be replaced by exclusive ORs.
     *
     * @var array
     */
    protected static $sbox1 = [
        0x00808200, 0x00000000, 0x00008000, 0x00808202,
        0x00808002, 0x00008202, 0x00000002, 0x00008000,
        0x00000200, 0x00808200, 0x00808202, 0x00000200,
        0x00800202, 0x00808002, 0x00800000, 0x00000002,
        0x00000202, 0x00800200, 0x00800200, 0x00008200,
        0x00008200, 0x00808000, 0x00808000, 0x00800202,
        0x00008002, 0x00800002, 0x00800002, 0x00008002,
        0x00000000, 0x00000202, 0x00008202, 0x00800000,
        0x00008000, 0x00808202, 0x00000002, 0x00808000,
        0x00808200, 0x00800000, 0x00800000, 0x00000200,
        0x00808002, 0x00008000, 0x00008200, 0x00800002,
        0x00000200, 0x00000002, 0x00800202, 0x00008202,
        0x00808202, 0x00008002, 0x00808000, 0x00800202,
        0x00800002, 0x00000202, 0x00008202, 0x00808200,
        0x00000202, 0x00800200, 0x00800200, 0x00000000,
        0x00008002, 0x00008200, 0x00000000, 0x00808002
    ];

    /**
     * Pre-permuted S-box2
     *
     * @var array
     */
    protected static $sbox2 = [
        0x40084010, 0x40004000, 0x00004000, 0x00084010,
        0x00080000, 0x00000010, 0x40080010, 0x40004010,
        0x40000010, 0x40084010, 0x40084000, 0x40000000,
        0x40004000, 0x00080000, 0x00000010, 0x40080010,
        0x00084000, 0x00080010, 0x40004010, 0x00000000,
        0x40000000, 0x00004000, 0x00084010, 0x40080000,
        0x00080010, 0x40000010, 0x00000000, 0x00084000,
        0x00004010, 0x40084000, 0x40080000, 0x00004010,
        0x00000000, 0x00084010, 0x40080010, 0x00080000,
        0x40004010, 0x40080000, 0x40084000, 0x00004000,
        0x40080000, 0x40004000, 0x00000010, 0x40084010,
        0x00084010, 0x00000010, 0x00004000, 0x40000000,
        0x00004010, 0x40084000, 0x00080000, 0x40000010,
        0x00080010, 0x40004010, 0x40000010, 0x00080010,
        0x00084000, 0x00000000, 0x40004000, 0x00004010,
        0x40000000, 0x40080010, 0x40084010, 0x00084000
    ];

    /**
     * Pre-permuted S-box3
     *
     * @var array
     */
    protected static $sbox3 = [
        0x00000104, 0x04010100, 0x00000000, 0x04010004,
        0x04000100, 0x00000000, 0x00010104, 0x04000100,
        0x00010004, 0x04000004, 0x04000004, 0x00010000,
        0x04010104, 0x00010004, 0x04010000, 0x00000104,
        0x04000000, 0x00000004, 0x04010100, 0x00000100,
        0x00010100, 0x04010000, 0x04010004, 0x00010104,
        0x04000104, 0x00010100, 0x00010000, 0x04000104,
        0x00000004, 0x04010104, 0x00000100, 0x04000000,
        0x04010100, 0x04000000, 0x00010004, 0x00000104,
        0x00010000, 0x04010100, 0x04000100, 0x00000000,
        0x00000100, 0x00010004, 0x04010104, 0x04000100,
        0x04000004, 0x00000100, 0x00000000, 0x04010004,
        0x04000104, 0x00010000, 0x04000000, 0x04010104,
        0x00000004, 0x00010104, 0x00010100, 0x04000004,
        0x04010000, 0x04000104, 0x00000104, 0x04010000,
        0x00010104, 0x00000004, 0x04010004, 0x00010100
    ];

    /**
     * Pre-permuted S-box4
     *
     * @var array
     */
    protected static $sbox4 = [
        0x80401000, 0x80001040, 0x80001040, 0x00000040,
        0x00401040, 0x80400040, 0x80400000, 0x80001000,
        0x00000000, 0x00401000, 0x00401000, 0x80401040,
        0x80000040, 0x00000000, 0x00400040, 0x80400000,
        0x80000000, 0x00001000, 0x00400000, 0x80401000,
        0x00000040, 0x00400000, 0x80001000, 0x00001040,
        0x80400040, 0x80000000, 0x00001040, 0x00400040,
        0x00001000, 0x00401040, 0x80401040, 0x80000040,
        0x00400040, 0x80400000, 0x00401000, 0x80401040,
        0x80000040, 0x00000000, 0x00000000, 0x00401000,
        0x00001040, 0x00400040, 0x80400040, 0x80000000,
        0x80401000, 0x80001040, 0x80001040, 0x00000040,
        0x80401040, 0x80000040, 0x80000000, 0x00001000,
        0x80400000, 0x80001000, 0x00401040, 0x80400040,
        0x80001000, 0x00001040, 0x00400000, 0x80401000,
        0x00000040, 0x00400000, 0x00001000, 0x00401040
    ];

    /**
     * Pre-permuted S-box5
     *
     * @var array
     */
    protected static $sbox5 = [
        0x00000080, 0x01040080, 0x01040000, 0x21000080,
        0x00040000, 0x00000080, 0x20000000, 0x01040000,
        0x20040080, 0x00040000, 0x01000080, 0x20040080,
        0x21000080, 0x21040000, 0x00040080, 0x20000000,
        0x01000000, 0x20040000, 0x20040000, 0x00000000,
        0x20000080, 0x21040080, 0x21040080, 0x01000080,
        0x21040000, 0x20000080, 0x00000000, 0x21000000,
        0x01040080, 0x01000000, 0x21000000, 0x00040080,
        0x00040000, 0x21000080, 0x00000080, 0x01000000,
        0x20000000, 0x01040000, 0x21000080, 0x20040080,
        0x01000080, 0x20000000, 0x21040000, 0x01040080,
        0x20040080, 0x00000080, 0x01000000, 0x21040000,
        0x21040080, 0x00040080, 0x21000000, 0x21040080,
        0x01040000, 0x00000000, 0x20040000, 0x21000000,
        0x00040080, 0x01000080, 0x20000080, 0x00040000,
        0x00000000, 0x20040000, 0x01040080, 0x20000080
    ];

    /**
     * Pre-permuted S-box6
     *
     * @var array
     */
    protected static $sbox6 = [
        0x10000008, 0x10200000, 0x00002000, 0x10202008,
        0x10200000, 0x00000008, 0x10202008, 0x00200000,
        0x10002000, 0x00202008, 0x00200000, 0x10000008,
        0x00200008, 0x10002000, 0x10000000, 0x00002008,
        0x00000000, 0x00200008, 0x10002008, 0x00002000,
        0x00202000, 0x10002008, 0x00000008, 0x10200008,
        0x10200008, 0x00000000, 0x00202008, 0x10202000,
        0x00002008, 0x00202000, 0x10202000, 0x10000000,
        0x10002000, 0x00000008, 0x10200008, 0x00202000,
        0x10202008, 0x00200000, 0x00002008, 0x10000008,
        0x00200000, 0x10002000, 0x10000000, 0x00002008,
        0x10000008, 0x10202008, 0x00202000, 0x10200000,
        0x00202008, 0x10202000, 0x00000000, 0x10200008,
        0x00000008, 0x00002000, 0x10200000, 0x00202008,
        0x00002000, 0x00200008, 0x10002008, 0x00000000,
        0x10202000, 0x10000000, 0x00200008, 0x10002008
    ];

    /**
     * Pre-permuted S-box7
     *
     * @var array
     */
    protected static $sbox7 = [
        0x00100000, 0x02100001, 0x02000401, 0x00000000,
        0x00000400, 0x02000401, 0x00100401, 0x02100400,
        0x02100401, 0x00100000, 0x00000000, 0x02000001,
        0x00000001, 0x02000000, 0x02100001, 0x00000401,
        0x02000400, 0x00100401, 0x00100001, 0x02000400,
        0x02000001, 0x02100000, 0x02100400, 0x00100001,
        0x02100000, 0x00000400, 0x00000401, 0x02100401,
        0x00100400, 0x00000001, 0x02000000, 0x00100400,
        0x02000000, 0x00100400, 0x00100000, 0x02000401,
        0x02000401, 0x02100001, 0x02100001, 0x00000001,
        0x00100001, 0x02000000, 0x02000400, 0x00100000,
        0x02100400, 0x00000401, 0x00100401, 0x02100400,
        0x00000401, 0x02000001, 0x02100401, 0x02100000,
        0x00100400, 0x00000000, 0x00000001, 0x02100401,
        0x00000000, 0x00100401, 0x02100000, 0x00000400,
        0x02000001, 0x02000400, 0x00000400, 0x00100001
    ];

    /**
     * Pre-permuted S-box8
     *
     * @var array
     */
    protected static $sbox8 = [
        0x08000820, 0x00000800, 0x00020000, 0x08020820,
        0x08000000, 0x08000820, 0x00000020, 0x08000000,
        0x00020020, 0x08020000, 0x08020820, 0x00020800,
        0x08020800, 0x00020820, 0x00000800, 0x00000020,
        0x08020000, 0x08000020, 0x08000800, 0x00000820,
        0x00020800, 0x00020020, 0x08020020, 0x08020800,
        0x00000820, 0x00000000, 0x00000000, 0x08020020,
        0x08000020, 0x08000800, 0x00020820, 0x00020000,
        0x00020820, 0x00020000, 0x08020800, 0x00000800,
        0x00000020, 0x08020020, 0x00000800, 0x00020820,
        0x08000800, 0x00000020, 0x08000020, 0x08020000,
        0x08020020, 0x08000000, 0x00020000, 0x08000820,
        0x00000000, 0x08020820, 0x00020020, 0x08000020,
        0x08020000, 0x08000800, 0x08000820, 0x00000000,
        0x08020820, 0x00020800, 0x00020800, 0x00000820,
        0x00000820, 0x00020020, 0x08000000, 0x08020800
    ];

    /**
     * Default Constructor.
     *
     * @param string $mode
     * @throws BadModeException if an invalid / unsupported mode is provided
     */
    public function __construct($mode)
    {
        parent::__construct($mode);

        if ($this->mode == self::MODE_STREAM) {
            throw new BadModeException('Block ciphers cannot be ran in stream mode');
        }
    }

    /**
     * Test for engine validity
     *
     * This is mainly just a wrapper to set things up for \phpseclib3\Crypt\Common\SymmetricKey::isValidEngine()
     *
     * @see Common\SymmetricKey::isValidEngine()
     * @param int $engine
     * @return bool
     */
    protected function isValidEngineHelper($engine)
    {
        if ($this->key_length_max == 8) {
            if ($engine == self::ENGINE_OPENSSL) {
                // quoting https://www.openssl.org/news/openssl-3.0-notes.html, OpenSSL 3.0.1
                // "Moved all variations of the EVP ciphers CAST5, BF, IDEA, SEED, RC2, RC4, RC5, and DES to the legacy provider"
                // in theory openssl_get_cipher_methods() should catch this but, on GitHub Actions, at least, it does not
                if (defined('OPENSSL_VERSION_TEXT') && version_compare(preg_replace('#OpenSSL (\d+\.\d+\.\d+) .*#', '$1', OPENSSL_VERSION_TEXT), '3.0.1', '>=')) {
                    return false;
                }
                $this->cipher_name_openssl_ecb = 'des-ecb';
                $this->cipher_name_openssl = 'des-' . $this->openssl_translate_mode();
            }
        }

        return parent::isValidEngineHelper($engine);
    }

    /**
     * Sets the key.
     *
     * Keys must be 64-bits long or 8 bytes long.
     *
     * DES also requires that every eighth bit be a parity bit, however, we'll ignore that.
     *
     * @see Common\SymmetricKey::setKey()
     * @param string $key
     */
    public function setKey($key)
    {
        if (!($this instanceof TripleDES) && strlen($key) != 8) {
            throw new \LengthException('Key of size ' . strlen($key) . ' not supported by this algorithm. Only keys of size 8 are supported');
        }

        // Sets the key
        parent::setKey($key);
    }

    /**
     * Encrypts a block
     *
     * @see Common\SymmetricKey::encryptBlock()
     * @see Common\SymmetricKey::encrypt()
     * @see self::encrypt()
     * @param string $in
     * @return string
     */
    protected function encryptBlock($in)
    {
        return $this->processBlock($in, self::ENCRYPT);
    }

    /**
     * Decrypts a block
     *
     * @see Common\SymmetricKey::decryptBlock()
     * @see Common\SymmetricKey::decrypt()
     * @see self::decrypt()
     * @param string $in
     * @return string
     */
    protected function decryptBlock($in)
    {
        return $this->processBlock($in, self::DECRYPT);
    }

    /**
     * Encrypts or decrypts a 64-bit block
     *
     * $mode should be either self::ENCRYPT or self::DECRYPT.  See
     * {@link http://en.wikipedia.org/wiki/Image:Feistel.png Feistel.png} to get a general
     * idea of what this function does.
     *
     * @see self::encryptBlock()
     * @see self::decryptBlock()
     * @param string $block
     * @param int $mode
     * @return string
     */
    private function processBlock($block, $mode)
    {
        static $sbox1, $sbox2, $sbox3, $sbox4, $sbox5, $sbox6, $sbox7, $sbox8, $shuffleip, $shuffleinvip;
        if (!$sbox1) {
            $sbox1 = array_map('intval', self::$sbox1);
            $sbox2 = array_map('intval', self::$sbox2);
            $sbox3 = array_map('intval', self::$sbox3);
            $sbox4 = array_map('intval', self::$sbox4);
            $sbox5 = array_map('intval', self::$sbox5);
            $sbox6 = array_map('intval', self::$sbox6);
            $sbox7 = array_map('intval', self::$sbox7);
            $sbox8 = array_map('intval', self::$sbox8);
            /* Merge $shuffle with $[inv]ipmap */
            for ($i = 0; $i < 256; ++$i) {
                $shuffleip[]    =  self::$shuffle[self::$ipmap[$i]];
                $shuffleinvip[] =  self::$shuffle[self::$invipmap[$i]];
            }
        }

        $keys  = $this->keys[$mode];
        $ki    = -1;

        // Do the initial IP permutation.
        $t = unpack('Nl/Nr', $block);
        list($l, $r) = [$t['l'], $t['r']];
        $block = ($shuffleip[ $r        & 0xFF] & "\x80\x80\x80\x80\x80\x80\x80\x80") |
                 ($shuffleip[($r >>  8) & 0xFF] & "\x40\x40\x40\x40\x40\x40\x40\x40") |
                 ($shuffleip[($r >> 16) & 0xFF] & "\x20\x20\x20\x20\x20\x20\x20\x20") |
                 ($shuffleip[($r >> 24) & 0xFF] & "\x10\x10\x10\x10\x10\x10\x10\x10") |
                 ($shuffleip[ $l        & 0xFF] & "\x08\x08\x08\x08\x08\x08\x08\x08") |
                 ($shuffleip[($l >>  8) & 0xFF] & "\x04\x04\x04\x04\x04\x04\x04\x04") |
                 ($shuffleip[($l >> 16) & 0xFF] & "\x02\x02\x02\x02\x02\x02\x02\x02") |
                 ($shuffleip[($l >> 24) & 0xFF] & "\x01\x01\x01\x01\x01\x01\x01\x01");

        // Extract L0 and R0.
        $t = unpack('Nl/Nr', $block);
        list($l, $r) = [$t['l'], $t['r']];

        for ($des_round = 0; $des_round < $this->des_rounds; ++$des_round) {
            // Perform the 16 steps.
            for ($i = 0; $i < 16; $i++) {
                // start of "the Feistel (F) function" - see the following URL:
                // http://en.wikipedia.org/wiki/Image:Data_Encryption_Standard_InfoBox_Diagram.png
                // Merge key schedule.
                $b1 = (($r >>  3) & 0x1FFFFFFF) ^ ($r << 29) ^ $keys[++$ki];
                $b2 = (($r >> 31) & 0x00000001) ^ ($r <<  1) ^ $keys[++$ki];

                // S-box indexing.
                $t = $sbox1[($b1 >> 24) & 0x3F] ^ $sbox2[($b2 >> 24) & 0x3F] ^
                     $sbox3[($b1 >> 16) & 0x3F] ^ $sbox4[($b2 >> 16) & 0x3F] ^
                     $sbox5[($b1 >>  8) & 0x3F] ^ $sbox6[($b2 >>  8) & 0x3F] ^
                     $sbox7[ $b1        & 0x3F] ^ $sbox8[ $b2        & 0x3F] ^ $l;
                // end of "the Feistel (F) function"

                $l = $r;
                $r = $t;
            }

            // Last step should not permute L & R.
            $t = $l;
            $l = $r;
            $r = $t;
        }

        // Perform the inverse IP permutation.
        return ($shuffleinvip[($r >> 24) & 0xFF] & "\x80\x80\x80\x80\x80\x80\x80\x80") |
               ($shuffleinvip[($l >> 24) & 0xFF] & "\x40\x40\x40\x40\x40\x40\x40\x40") |
               ($shuffleinvip[($r >> 16) & 0xFF] & "\x20\x20\x20\x20\x20\x20\x20\x20") |
               ($shuffleinvip[($l >> 16) & 0xFF] & "\x10\x10\x10\x10\x10\x10\x10\x10") |
               ($shuffleinvip[($r >>  8) & 0xFF] & "\x08\x08\x08\x08\x08\x08\x08\x08") |
               ($shuffleinvip[($l >>  8) & 0xFF] & "\x04\x04\x04\x04\x04\x04\x04\x04") |
               ($shuffleinvip[ $r        & 0xFF] & "\x02\x02\x02\x02\x02\x02\x02\x02") |
               ($shuffleinvip[ $l        & 0xFF] & "\x01\x01\x01\x01\x01\x01\x01\x01");
    }

    /**
     * Creates the key schedule
     *
     * @see Common\SymmetricKey::setupKey()
     */
    protected function setupKey()
    {
        if (isset($this->kl['key']) && $this->key === $this->kl['key'] && $this->des_rounds === $this->kl['des_rounds']) {
            // already expanded
            return;
        }
        $this->kl = ['key' => $this->key, 'des_rounds' => $this->des_rounds];

        static $shifts = [ // number of key bits shifted per round
            1, 1, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 1
        ];

        static $pc1map = [
            0x00, 0x00, 0x08, 0x08, 0x04, 0x04, 0x0C, 0x0C,
            0x02, 0x02, 0x0A, 0x0A, 0x06, 0x06, 0x0E, 0x0E,
            0x10, 0x10, 0x18, 0x18, 0x14, 0x14, 0x1C, 0x1C,
            0x12, 0x12, 0x1A, 0x1A, 0x16, 0x16, 0x1E, 0x1E,
            0x20, 0x20, 0x28, 0x28, 0x24, 0x24, 0x2C, 0x2C,
            0x22, 0x22, 0x2A, 0x2A, 0x26, 0x26, 0x2E, 0x2E,
            0x30, 0x30, 0x38, 0x38, 0x34, 0x34, 0x3C, 0x3C,
            0x32, 0x32, 0x3A, 0x3A, 0x36, 0x36, 0x3E, 0x3E,
            0x40, 0x40, 0x48, 0x48, 0x44, 0x44, 0x4C, 0x4C,
            0x42, 0x42, 0x4A, 0x4A, 0x46, 0x46, 0x4E, 0x4E,
            0x50, 0x50, 0x58, 0x58, 0x54, 0x54, 0x5C, 0x5C,
            0x52, 0x52, 0x5A, 0x5A, 0x56, 0x56, 0x5E, 0x5E,
            0x60, 0x60, 0x68, 0x68, 0x64, 0x64, 0x6C, 0x6C,
            0x62, 0x62, 0x6A, 0x6A, 0x66, 0x66, 0x6E, 0x6E,
            0x70, 0x70, 0x78, 0x78, 0x74, 0x74, 0x7C, 0x7C,
            0x72, 0x72, 0x7A, 0x7A, 0x76, 0x76, 0x7E, 0x7E,
            0x80, 0x80, 0x88, 0x88, 0x84, 0x84, 0x8C, 0x8C,
            0x82, 0x82, 0x8A, 0x8A, 0x86, 0x86, 0x8E, 0x8E,
            0x90, 0x90, 0x98, 0x98, 0x94, 0x94, 0x9C, 0x9C,
            0x92, 0x92, 0x9A, 0x9A, 0x96, 0x96, 0x9E, 0x9E,
            0xA0, 0xA0, 0xA8, 0xA8, 0xA4, 0xA4, 0xAC, 0xAC,
            0xA2, 0xA2, 0xAA, 0xAA, 0xA6, 0xA6, 0xAE, 0xAE,
            0xB0, 0xB0, 0xB8, 0xB8, 0xB4, 0xB4, 0xBC, 0xBC,
            0xB2, 0xB2, 0xBA, 0xBA, 0xB6, 0xB6, 0xBE, 0xBE,
            0xC0, 0xC0, 0xC8, 0xC8, 0xC4, 0xC4, 0xCC, 0xCC,
            0xC2, 0xC2, 0xCA, 0xCA, 0xC6, 0xC6, 0xCE, 0xCE,
            0xD0, 0xD0, 0xD8, 0xD8, 0xD4, 0xD4, 0xDC, 0xDC,
            0xD2, 0xD2, 0xDA, 0xDA, 0xD6, 0xD6, 0xDE, 0xDE,
            0xE0, 0xE0, 0xE8, 0xE8, 0xE4, 0xE4, 0xEC, 0xEC,
            0xE2, 0xE2, 0xEA, 0xEA, 0xE6, 0xE6, 0xEE, 0xEE,
            0xF0, 0xF0, 0xF8, 0xF8, 0xF4, 0xF4, 0xFC, 0xFC,
            0xF2, 0xF2, 0xFA, 0xFA, 0xF6, 0xF6, 0xFE, 0xFE
        ];

        // Mapping tables for the PC-2 transformation.
        static $pc2mapc1 = [
            0x00000000, 0x00000400, 0x00200000, 0x00200400,
            0x00000001, 0x00000401, 0x00200001, 0x00200401,
            0x02000000, 0x02000400, 0x02200000, 0x02200400,
            0x02000001, 0x02000401, 0x02200001, 0x02200401
        ];
        static $pc2mapc2 = [
            0x00000000, 0x00000800, 0x08000000, 0x08000800,
            0x00010000, 0x00010800, 0x08010000, 0x08010800,
            0x00000000, 0x00000800, 0x08000000, 0x08000800,
            0x00010000, 0x00010800, 0x08010000, 0x08010800,
            0x00000100, 0x00000900, 0x08000100, 0x08000900,
            0x00010100, 0x00010900, 0x08010100, 0x08010900,
            0x00000100, 0x00000900, 0x08000100, 0x08000900,
            0x00010100, 0x00010900, 0x08010100, 0x08010900,
            0x00000010, 0x00000810, 0x08000010, 0x08000810,
            0x00010010, 0x00010810, 0x08010010, 0x08010810,
            0x00000010, 0x00000810, 0x08000010, 0x08000810,
            0x00010010, 0x00010810, 0x08010010, 0x08010810,
            0x00000110, 0x00000910, 0x08000110, 0x08000910,
            0x00010110, 0x00010910, 0x08010110, 0x08010910,
            0x00000110, 0x00000910, 0x08000110, 0x08000910,
            0x00010110, 0x00010910, 0x08010110, 0x08010910,
            0x00040000, 0x00040800, 0x08040000, 0x08040800,
            0x00050000, 0x00050800, 0x08050000, 0x08050800,
            0x00040000, 0x00040800, 0x08040000, 0x08040800,
            0x00050000, 0x00050800, 0x08050000, 0x08050800,
            0x00040100, 0x00040900, 0x08040100, 0x08040900,
            0x00050100, 0x00050900, 0x08050100, 0x08050900,
            0x00040100, 0x00040900, 0x08040100, 0x08040900,
            0x00050100, 0x00050900, 0x08050100, 0x08050900,
            0x00040010, 0x00040810, 0x08040010, 0x08040810,
            0x00050010, 0x00050810, 0x08050010, 0x08050810,
            0x00040010, 0x00040810, 0x08040010, 0x08040810,
            0x00050010, 0x00050810, 0x08050010, 0x08050810,
            0x00040110, 0x00040910, 0x08040110, 0x08040910,
            0x00050110, 0x00050910, 0x08050110, 0x08050910,
            0x00040110, 0x00040910, 0x08040110, 0x08040910,
            0x00050110, 0x00050910, 0x08050110, 0x08050910,
            0x01000000, 0x01000800, 0x09000000, 0x09000800,
            0x01010000, 0x01010800, 0x09010000, 0x09010800,
            0x01000000, 0x01000800, 0x09000000, 0x09000800,
            0x01010000, 0x01010800, 0x09010000, 0x09010800,
            0x01000100, 0x01000900, 0x09000100, 0x09000900,
            0x01010100, 0x01010900, 0x09010100, 0x09010900,
            0x01000100, 0x01000900, 0x09000100, 0x09000900,
            0x01010100, 0x01010900, 0x09010100, 0x09010900,
            0x01000010, 0x01000810, 0x09000010, 0x09000810,
            0x01010010, 0x01010810, 0x09010010, 0x09010810,
            0x01000010, 0x01000810, 0x09000010, 0x09000810,
            0x01010010, 0x01010810, 0x09010010, 0x09010810,
            0x01000110, 0x01000910, 0x09000110, 0x09000910,
            0x01010110, 0x01010910, 0x09010110, 0x09010910,
            0x01000110, 0x01000910, 0x09000110, 0x09000910,
            0x01010110, 0x01010910, 0x09010110, 0x09010910,
            0x01040000, 0x01040800, 0x09040000, 0x09040800,
            0x01050000, 0x01050800, 0x09050000, 0x09050800,
            0x01040000, 0x01040800, 0x09040000, 0x09040800,
            0x01050000, 0x01050800, 0x09050000, 0x09050800,
            0x01040100, 0x01040900, 0x09040100, 0x09040900,
            0x01050100, 0x01050900, 0x09050100, 0x09050900,
            0x01040100, 0x01040900, 0x09040100, 0x09040900,
            0x01050100, 0x01050900, 0x09050100, 0x09050900,
            0x01040010, 0x01040810, 0x09040010, 0x09040810,
            0x01050010, 0x01050810, 0x09050010, 0x09050810,
            0x01040010, 0x01040810, 0x09040010, 0x09040810,
            0x01050010, 0x01050810, 0x09050010, 0x09050810,
            0x01040110, 0x01040910, 0x09040110, 0x09040910,
            0x01050110, 0x01050910, 0x09050110, 0x09050910,
            0x01040110, 0x01040910, 0x09040110, 0x09040910,
            0x01050110, 0x01050910, 0x09050110, 0x09050910
        ];
        static $pc2mapc3 = [
            0x00000000, 0x00000004, 0x00001000, 0x00001004,
            0x00000000, 0x00000004, 0x00001000, 0x00001004,
            0x10000000, 0x10000004, 0x10001000, 0x10001004,
            0x10000000, 0x10000004, 0x10001000, 0x10001004,
            0x00000020, 0x00000024, 0x00001020, 0x00001024,
            0x00000020, 0x00000024, 0x00001020, 0x00001024,
            0x10000020, 0x10000024, 0x10001020, 0x10001024,
            0x10000020, 0x10000024, 0x10001020, 0x10001024,
            0x00080000, 0x00080004, 0x00081000, 0x00081004,
            0x00080000, 0x00080004, 0x00081000, 0x00081004,
            0x10080000, 0x10080004, 0x10081000, 0x10081004,
            0x10080000, 0x10080004, 0x10081000, 0x10081004,
            0x00080020, 0x00080024, 0x00081020, 0x00081024,
            0x00080020, 0x00080024, 0x00081020, 0x00081024,
            0x10080020, 0x10080024, 0x10081020, 0x10081024,
            0x10080020, 0x10080024, 0x10081020, 0x10081024,
            0x20000000, 0x20000004, 0x20001000, 0x20001004,
            0x20000000, 0x20000004, 0x20001000, 0x20001004,
            0x30000000, 0x30000004, 0x30001000, 0x30001004,
            0x30000000, 0x30000004, 0x30001000, 0x30001004,
            0x20000020, 0x20000024, 0x20001020, 0x20001024,
            0x20000020, 0x20000024, 0x20001020, 0x20001024,
            0x30000020, 0x30000024, 0x30001020, 0x30001024,
            0x30000020, 0x30000024, 0x30001020, 0x30001024,
            0x20080000, 0x20080004, 0x20081000, 0x20081004,
            0x20080000, 0x20080004, 0x20081000, 0x20081004,
            0x30080000, 0x30080004, 0x30081000, 0x30081004,
            0x30080000, 0x30080004, 0x30081000, 0x30081004,
            0x20080020, 0x20080024, 0x20081020, 0x20081024,
            0x20080020, 0x20080024, 0x20081020, 0x20081024,
            0x30080020, 0x30080024, 0x30081020, 0x30081024,
            0x30080020, 0x30080024, 0x30081020, 0x30081024,
            0x00000002, 0x00000006, 0x00001002, 0x00001006,
            0x00000002, 0x00000006, 0x00001002, 0x00001006,
            0x10000002, 0x10000006, 0x10001002, 0x10001006,
            0x10000002, 0x10000006, 0x10001002, 0x10001006,
            0x00000022, 0x00000026, 0x00001022, 0x00001026,
            0x00000022, 0x00000026, 0x00001022, 0x00001026,
            0x10000022, 0x10000026, 0x10001022, 0x10001026,
            0x10000022, 0x10000026, 0x10001022, 0x10001026,
            0x00080002, 0x00080006, 0x00081002, 0x00081006,
            0x00080002, 0x00080006, 0x00081002, 0x00081006,
            0x10080002, 0x10080006, 0x10081002, 0x10081006,
            0x10080002, 0x10080006, 0x10081002, 0x10081006,
            0x00080022, 0x00080026, 0x00081022, 0x00081026,
            0x00080022, 0x00080026, 0x00081022, 0x00081026,
            0x10080022, 0x10080026, 0x10081022, 0x10081026,
            0x10080022, 0x10080026, 0x10081022, 0x10081026,
            0x20000002, 0x20000006, 0x20001002, 0x20001006,
            0x20000002, 0x20000006, 0x20001002, 0x20001006,
            0x30000002, 0x30000006, 0x30001002, 0x30001006,
            0x30000002, 0x30000006, 0x30001002, 0x30001006,
            0x20000022, 0x20000026, 0x20001022, 0x20001026,
            0x20000022, 0x20000026, 0x20001022, 0x20001026,
            0x30000022, 0x30000026, 0x30001022, 0x30001026,
            0x30000022, 0x30000026, 0x30001022, 0x30001026,
            0x20080002, 0x20080006, 0x20081002, 0x20081006,
            0x20080002, 0x20080006, 0x20081002, 0x20081006,
            0x30080002, 0x30080006, 0x30081002, 0x30081006,
            0x30080002, 0x30080006, 0x30081002, 0x30081006,
            0x20080022, 0x20080026, 0x20081022, 0x20081026,
            0x20080022, 0x20080026, 0x20081022, 0x20081026,
            0x30080022, 0x30080026, 0x30081022, 0x30081026,
            0x30080022, 0x30080026, 0x30081022, 0x30081026
        ];
        static $pc2mapc4 = [
            0x00000000, 0x00100000, 0x00000008, 0x00100008,
            0x00000200, 0x00100200, 0x00000208, 0x00100208,
            0x00000000, 0x00100000, 0x00000008, 0x00100008,
            0x00000200, 0x00100200, 0x00000208, 0x00100208,
            0x04000000, 0x04100000, 0x04000008, 0x04100008,
            0x04000200, 0x04100200, 0x04000208, 0x04100208,
            0x04000000, 0x04100000, 0x04000008, 0x04100008,
            0x04000200, 0x04100200, 0x04000208, 0x04100208,
            0x00002000, 0x00102000, 0x00002008, 0x00102008,
            0x00002200, 0x00102200, 0x00002208, 0x00102208,
            0x00002000, 0x00102000, 0x00002008, 0x00102008,
            0x00002200, 0x00102200, 0x00002208, 0x00102208,
            0x04002000, 0x04102000, 0x04002008, 0x04102008,
            0x04002200, 0x04102200, 0x04002208, 0x04102208,
            0x04002000, 0x04102000, 0x04002008, 0x04102008,
            0x04002200, 0x04102200, 0x04002208, 0x04102208,
            0x00000000, 0x00100000, 0x00000008, 0x00100008,
            0x00000200, 0x00100200, 0x00000208, 0x00100208,
            0x00000000, 0x00100000, 0x00000008, 0x00100008,
            0x00000200, 0x00100200, 0x00000208, 0x00100208,
            0x04000000, 0x04100000, 0x04000008, 0x04100008,
            0x04000200, 0x04100200, 0x04000208, 0x04100208,
            0x04000000, 0x04100000, 0x04000008, 0x04100008,
            0x04000200, 0x04100200, 0x04000208, 0x04100208,
            0x00002000, 0x00102000, 0x00002008, 0x00102008,
            0x00002200, 0x00102200, 0x00002208, 0x00102208,
            0x00002000, 0x00102000, 0x00002008, 0x00102008,
            0x00002200, 0x00102200, 0x00002208, 0x00102208,
            0x04002000, 0x04102000, 0x04002008, 0x04102008,
            0x04002200, 0x04102200, 0x04002208, 0x04102208,
            0x04002000, 0x04102000, 0x04002008, 0x04102008,
            0x04002200, 0x04102200, 0x04002208, 0x04102208,
            0x00020000, 0x00120000, 0x00020008, 0x00120008,
            0x00020200, 0x00120200, 0x00020208, 0x00120208,
            0x00020000, 0x00120000, 0x00020008, 0x00120008,
            0x00020200, 0x00120200, 0x00020208, 0x00120208,
            0x04020000, 0x04120000, 0x04020008, 0x04120008,
            0x04020200, 0x04120200, 0x04020208, 0x04120208,
            0x04020000, 0x04120000, 0x04020008, 0x04120008,
            0x04020200, 0x04120200, 0x04020208, 0x04120208,
            0x00022000, 0x00122000, 0x00022008, 0x00122008,
            0x00022200, 0x00122200, 0x00022208, 0x00122208,
            0x00022000, 0x00122000, 0x00022008, 0x00122008,
            0x00022200, 0x00122200, 0x00022208, 0x00122208,
            0x04022000, 0x04122000, 0x04022008, 0x04122008,
            0x04022200, 0x04122200, 0x04022208, 0x04122208,
            0x04022000, 0x04122000, 0x04022008, 0x04122008,
            0x04022200, 0x04122200, 0x04022208, 0x04122208,
            0x00020000, 0x00120000, 0x00020008, 0x00120008,
            0x00020200, 0x00120200, 0x00020208, 0x00120208,
            0x00020000, 0x00120000, 0x00020008, 0x00120008,
            0x00020200, 0x00120200, 0x00020208, 0x00120208,
            0x04020000, 0x04120000, 0x04020008, 0x04120008,
            0x04020200, 0x04120200, 0x04020208, 0x04120208,
            0x04020000, 0x04120000, 0x04020008, 0x04120008,
            0x04020200, 0x04120200, 0x04020208, 0x04120208,
            0x00022000, 0x00122000, 0x00022008, 0x00122008,
            0x00022200, 0x00122200, 0x00022208, 0x00122208,
            0x00022000, 0x00122000, 0x00022008, 0x00122008,
            0x00022200, 0x00122200, 0x00022208, 0x00122208,
            0x04022000, 0x04122000, 0x04022008, 0x04122008,
            0x04022200, 0x04122200, 0x04022208, 0x04122208,
            0x04022000, 0x04122000, 0x04022008, 0x04122008,
            0x04022200, 0x04122200, 0x04022208, 0x04122208
        ];
        static $pc2mapd1 = [
            0x00000000, 0x00000001, 0x08000000, 0x08000001,
            0x00200000, 0x00200001, 0x08200000, 0x08200001,
            0x00000002, 0x00000003, 0x08000002, 0x08000003,
            0x00200002, 0x00200003, 0x08200002, 0x08200003
        ];
        static $pc2mapd2 = [
            0x00000000, 0x00100000, 0x00000800, 0x00100800,
            0x00000000, 0x00100000, 0x00000800, 0x00100800,
            0x04000000, 0x04100000, 0x04000800, 0x04100800,
            0x04000000, 0x04100000, 0x04000800, 0x04100800,
            0x00000004, 0x00100004, 0x00000804, 0x00100804,
            0x00000004, 0x00100004, 0x00000804, 0x00100804,
            0x04000004, 0x04100004, 0x04000804, 0x04100804,
            0x04000004, 0x04100004, 0x04000804, 0x04100804,
            0x00000000, 0x00100000, 0x00000800, 0x00100800,
            0x00000000, 0x00100000, 0x00000800, 0x00100800,
            0x04000000, 0x04100000, 0x04000800, 0x04100800,
            0x04000000, 0x04100000, 0x04000800, 0x04100800,
            0x00000004, 0x00100004, 0x00000804, 0x00100804,
            0x00000004, 0x00100004, 0x00000804, 0x00100804,
            0x04000004, 0x04100004, 0x04000804, 0x04100804,
            0x04000004, 0x04100004, 0x04000804, 0x04100804,
            0x00000200, 0x00100200, 0x00000A00, 0x00100A00,
            0x00000200, 0x00100200, 0x00000A00, 0x00100A00,
            0x04000200, 0x04100200, 0x04000A00, 0x04100A00,
            0x04000200, 0x04100200, 0x04000A00, 0x04100A00,
            0x00000204, 0x00100204, 0x00000A04, 0x00100A04,
            0x00000204, 0x00100204, 0x00000A04, 0x00100A04,
            0x04000204, 0x04100204, 0x04000A04, 0x04100A04,
            0x04000204, 0x04100204, 0x04000A04, 0x04100A04,
            0x00000200, 0x00100200, 0x00000A00, 0x00100A00,
            0x00000200, 0x00100200, 0x00000A00, 0x00100A00,
            0x04000200, 0x04100200, 0x04000A00, 0x04100A00,
            0x04000200, 0x04100200, 0x04000A00, 0x04100A00,
            0x00000204, 0x00100204, 0x00000A04, 0x00100A04,
            0x00000204, 0x00100204, 0x00000A04, 0x00100A04,
            0x04000204, 0x04100204, 0x04000A04, 0x04100A04,
            0x04000204, 0x04100204, 0x04000A04, 0x04100A04,
            0x00020000, 0x00120000, 0x00020800, 0x00120800,
            0x00020000, 0x00120000, 0x00020800, 0x00120800,
            0x04020000, 0x04120000, 0x04020800, 0x04120800,
            0x04020000, 0x04120000, 0x04020800, 0x04120800,
            0x00020004, 0x00120004, 0x00020804, 0x00120804,
            0x00020004, 0x00120004, 0x00020804, 0x00120804,
            0x04020004, 0x04120004, 0x04020804, 0x04120804,
            0x04020004, 0x04120004, 0x04020804, 0x04120804,
            0x00020000, 0x00120000, 0x00020800, 0x00120800,
            0x00020000, 0x00120000, 0x00020800, 0x00120800,
            0x04020000, 0x04120000, 0x04020800, 0x04120800,
            0x04020000, 0x04120000, 0x04020800, 0x04120800,
            0x00020004, 0x00120004, 0x00020804, 0x00120804,
            0x00020004, 0x00120004, 0x00020804, 0x00120804,
            0x04020004, 0x04120004, 0x04020804, 0x04120804,
            0x04020004, 0x04120004, 0x04020804, 0x04120804,
            0x00020200, 0x00120200, 0x00020A00, 0x00120A00,
            0x00020200, 0x00120200, 0x00020A00, 0x00120A00,
            0x04020200, 0x04120200, 0x04020A00, 0x04120A00,
            0x04020200, 0x04120200, 0x04020A00, 0x04120A00,
            0x00020204, 0x00120204, 0x00020A04, 0x00120A04,
            0x00020204, 0x00120204, 0x00020A04, 0x00120A04,
            0x04020204, 0x04120204, 0x04020A04, 0x04120A04,
            0x04020204, 0x04120204, 0x04020A04, 0x04120A04,
            0x00020200, 0x00120200, 0x00020A00, 0x00120A00,
            0x00020200, 0x00120200, 0x00020A00, 0x00120A00,
            0x04020200, 0x04120200, 0x04020A00, 0x04120A00,
            0x04020200, 0x04120200, 0x04020A00, 0x04120A00,
            0x00020204, 0x00120204, 0x00020A04, 0x00120A04,
            0x00020204, 0x00120204, 0x00020A04, 0x00120A04,
            0x04020204, 0x04120204, 0x04020A04, 0x04120A04,
            0x04020204, 0x04120204, 0x04020A04, 0x04120A04
        ];
        static $pc2mapd3 = [
            0x00000000, 0x00010000, 0x02000000, 0x02010000,
            0x00000020, 0x00010020, 0x02000020, 0x02010020,
            0x00040000, 0x00050000, 0x02040000, 0x02050000,
            0x00040020, 0x00050020, 0x02040020, 0x02050020,
            0x00002000, 0x00012000, 0x02002000, 0x02012000,
            0x00002020, 0x00012020, 0x02002020, 0x02012020,
            0x00042000, 0x00052000, 0x02042000, 0x02052000,
            0x00042020, 0x00052020, 0x02042020, 0x02052020,
            0x00000000, 0x00010000, 0x02000000, 0x02010000,
            0x00000020, 0x00010020, 0x02000020, 0x02010020,
            0x00040000, 0x00050000, 0x02040000, 0x02050000,
            0x00040020, 0x00050020, 0x02040020, 0x02050020,
            0x00002000, 0x00012000, 0x02002000, 0x02012000,
            0x00002020, 0x00012020, 0x02002020, 0x02012020,
            0x00042000, 0x00052000, 0x02042000, 0x02052000,
            0x00042020, 0x00052020, 0x02042020, 0x02052020,
            0x00000010, 0x00010010, 0x02000010, 0x02010010,
            0x00000030, 0x00010030, 0x02000030, 0x02010030,
            0x00040010, 0x00050010, 0x02040010, 0x02050010,
            0x00040030, 0x00050030, 0x02040030, 0x02050030,
            0x00002010, 0x00012010, 0x02002010, 0x02012010,
            0x00002030, 0x00012030, 0x02002030, 0x02012030,
            0x00042010, 0x00052010, 0x02042010, 0x02052010,
            0x00042030, 0x00052030, 0x02042030, 0x02052030,
            0x00000010, 0x00010010, 0x02000010, 0x02010010,
            0x00000030, 0x00010030, 0x02000030, 0x02010030,
            0x00040010, 0x00050010, 0x02040010, 0x02050010,
            0x00040030, 0x00050030, 0x02040030, 0x02050030,
            0x00002010, 0x00012010, 0x02002010, 0x02012010,
            0x00002030, 0x00012030, 0x02002030, 0x02012030,
            0x00042010, 0x00052010, 0x02042010, 0x02052010,
            0x00042030, 0x00052030, 0x02042030, 0x02052030,
            0x20000000, 0x20010000, 0x22000000, 0x22010000,
            0x20000020, 0x20010020, 0x22000020, 0x22010020,
            0x20040000, 0x20050000, 0x22040000, 0x22050000,
            0x20040020, 0x20050020, 0x22040020, 0x22050020,
            0x20002000, 0x20012000, 0x22002000, 0x22012000,
            0x20002020, 0x20012020, 0x22002020, 0x22012020,
            0x20042000, 0x20052000, 0x22042000, 0x22052000,
            0x20042020, 0x20052020, 0x22042020, 0x22052020,
            0x20000000, 0x20010000, 0x22000000, 0x22010000,
            0x20000020, 0x20010020, 0x22000020, 0x22010020,
            0x20040000, 0x20050000, 0x22040000, 0x22050000,
            0x20040020, 0x20050020, 0x22040020, 0x22050020,
            0x20002000, 0x20012000, 0x22002000, 0x22012000,
            0x20002020, 0x20012020, 0x22002020, 0x22012020,
            0x20042000, 0x20052000, 0x22042000, 0x22052000,
            0x20042020, 0x20052020, 0x22042020, 0x22052020,
            0x20000010, 0x20010010, 0x22000010, 0x22010010,
            0x20000030, 0x20010030, 0x22000030, 0x22010030,
            0x20040010, 0x20050010, 0x22040010, 0x22050010,
            0x20040030, 0x20050030, 0x22040030, 0x22050030,
            0x20002010, 0x20012010, 0x22002010, 0x22012010,
            0x20002030, 0x20012030, 0x22002030, 0x22012030,
            0x20042010, 0x20052010, 0x22042010, 0x22052010,
            0x20042030, 0x20052030, 0x22042030, 0x22052030,
            0x20000010, 0x20010010, 0x22000010, 0x22010010,
            0x20000030, 0x20010030, 0x22000030, 0x22010030,
            0x20040010, 0x20050010, 0x22040010, 0x22050010,
            0x20040030, 0x20050030, 0x22040030, 0x22050030,
            0x20002010, 0x20012010, 0x22002010, 0x22012010,
            0x20002030, 0x20012030, 0x22002030, 0x22012030,
            0x20042010, 0x20052010, 0x22042010, 0x22052010,
            0x20042030, 0x20052030, 0x22042030, 0x22052030
        ];
        static $pc2mapd4 = [
            0x00000000, 0x00000400, 0x01000000, 0x01000400,
            0x00000000, 0x00000400, 0x01000000, 0x01000400,
            0x00000100, 0x00000500, 0x01000100, 0x01000500,
            0x00000100, 0x00000500, 0x01000100, 0x01000500,
            0x10000000, 0x10000400, 0x11000000, 0x11000400,
            0x10000000, 0x10000400, 0x11000000, 0x11000400,
            0x10000100, 0x10000500, 0x11000100, 0x11000500,
            0x10000100, 0x10000500, 0x11000100, 0x11000500,
            0x00080000, 0x00080400, 0x01080000, 0x01080400,
            0x00080000, 0x00080400, 0x01080000, 0x01080400,
            0x00080100, 0x00080500, 0x01080100, 0x01080500,
            0x00080100, 0x00080500, 0x01080100, 0x01080500,
            0x10080000, 0x10080400, 0x11080000, 0x11080400,
            0x10080000, 0x10080400, 0x11080000, 0x11080400,
            0x10080100, 0x10080500, 0x11080100, 0x11080500,
            0x10080100, 0x10080500, 0x11080100, 0x11080500,
            0x00000008, 0x00000408, 0x01000008, 0x01000408,
            0x00000008, 0x00000408, 0x01000008, 0x01000408,
            0x00000108, 0x00000508, 0x01000108, 0x01000508,
            0x00000108, 0x00000508, 0x01000108, 0x01000508,
            0x10000008, 0x10000408, 0x11000008, 0x11000408,
            0x10000008, 0x10000408, 0x11000008, 0x11000408,
            0x10000108, 0x10000508, 0x11000108, 0x11000508,
            0x10000108, 0x10000508, 0x11000108, 0x11000508,
            0x00080008, 0x00080408, 0x01080008, 0x01080408,
            0x00080008, 0x00080408, 0x01080008, 0x01080408,
            0x00080108, 0x00080508, 0x01080108, 0x01080508,
            0x00080108, 0x00080508, 0x01080108, 0x01080508,
            0x10080008, 0x10080408, 0x11080008, 0x11080408,
            0x10080008, 0x10080408, 0x11080008, 0x11080408,
            0x10080108, 0x10080508, 0x11080108, 0x11080508,
            0x10080108, 0x10080508, 0x11080108, 0x11080508,
            0x00001000, 0x00001400, 0x01001000, 0x01001400,
            0x00001000, 0x00001400, 0x01001000, 0x01001400,
            0x00001100, 0x00001500, 0x01001100, 0x01001500,
            0x00001100, 0x00001500, 0x01001100, 0x01001500,
            0x10001000, 0x10001400, 0x11001000, 0x11001400,
            0x10001000, 0x10001400, 0x11001000, 0x11001400,
            0x10001100, 0x10001500, 0x11001100, 0x11001500,
            0x10001100, 0x10001500, 0x11001100, 0x11001500,
            0x00081000, 0x00081400, 0x01081000, 0x01081400,
            0x00081000, 0x00081400, 0x01081000, 0x01081400,
            0x00081100, 0x00081500, 0x01081100, 0x01081500,
            0x00081100, 0x00081500, 0x01081100, 0x01081500,
            0x10081000, 0x10081400, 0x11081000, 0x11081400,
            0x10081000, 0x10081400, 0x11081000, 0x11081400,
            0x10081100, 0x10081500, 0x11081100, 0x11081500,
            0x10081100, 0x10081500, 0x11081100, 0x11081500,
            0x00001008, 0x00001408, 0x01001008, 0x01001408,
            0x00001008, 0x00001408, 0x01001008, 0x01001408,
            0x00001108, 0x00001508, 0x01001108, 0x01001508,
            0x00001108, 0x00001508, 0x01001108, 0x01001508,
            0x10001008, 0x10001408, 0x11001008, 0x11001408,
            0x10001008, 0x10001408, 0x11001008, 0x11001408,
            0x10001108, 0x10001508, 0x11001108, 0x11001508,
            0x10001108, 0x10001508, 0x11001108, 0x11001508,
            0x00081008, 0x00081408, 0x01081008, 0x01081408,
            0x00081008, 0x00081408, 0x01081008, 0x01081408,
            0x00081108, 0x00081508, 0x01081108, 0x01081508,
            0x00081108, 0x00081508, 0x01081108, 0x01081508,
            0x10081008, 0x10081408, 0x11081008, 0x11081408,
            0x10081008, 0x10081408, 0x11081008, 0x11081408,
            0x10081108, 0x10081508, 0x11081108, 0x11081508,
            0x10081108, 0x10081508, 0x11081108, 0x11081508
        ];

        $keys = [];
        for ($des_round = 0; $des_round < $this->des_rounds; ++$des_round) {
            // pad the key and remove extra characters as appropriate.
            $key = str_pad(substr($this->key, $des_round * 8, 8), 8, "\0");

            // Perform the PC/1 transformation and compute C and D.
            $t = unpack('Nl/Nr', $key);
            list($l, $r) = [$t['l'], $t['r']];
            $key = (self::$shuffle[$pc1map[ $r        & 0xFF]] & "\x80\x80\x80\x80\x80\x80\x80\x00") |
                   (self::$shuffle[$pc1map[($r >>  8) & 0xFF]] & "\x40\x40\x40\x40\x40\x40\x40\x00") |
                   (self::$shuffle[$pc1map[($r >> 16) & 0xFF]] & "\x20\x20\x20\x20\x20\x20\x20\x00") |
                   (self::$shuffle[$pc1map[($r >> 24) & 0xFF]] & "\x10\x10\x10\x10\x10\x10\x10\x00") |
                   (self::$shuffle[$pc1map[ $l        & 0xFF]] & "\x08\x08\x08\x08\x08\x08\x08\x00") |
                   (self::$shuffle[$pc1map[($l >>  8) & 0xFF]] & "\x04\x04\x04\x04\x04\x04\x04\x00") |
                   (self::$shuffle[$pc1map[($l >> 16) & 0xFF]] & "\x02\x02\x02\x02\x02\x02\x02\x00") |
                   (self::$shuffle[$pc1map[($l >> 24) & 0xFF]] & "\x01\x01\x01\x01\x01\x01\x01\x00");
            $key = unpack('Nc/Nd', $key);
            $c = ( $key['c'] >> 4) & 0x0FFFFFFF;
            $d = (($key['d'] >> 4) & 0x0FFFFFF0) | ($key['c'] & 0x0F);

            $keys[$des_round] = [
                self::ENCRYPT => [],
                self::DECRYPT => array_fill(0, 32, 0)
            ];
            for ($i = 0, $ki = 31; $i < 16; ++$i, $ki -= 2) {
                $c <<= $shifts[$i];
                $c = ($c | ($c >> 28)) & 0x0FFFFFFF;
                $d <<= $shifts[$i];
                $d = ($d | ($d >> 28)) & 0x0FFFFFFF;

                // Perform the PC-2 transformation.
                $cp = $pc2mapc1[ $c >> 24        ] | $pc2mapc2[($c >> 16) & 0xFF] |
                      $pc2mapc3[($c >>  8) & 0xFF] | $pc2mapc4[ $c        & 0xFF];
                $dp = $pc2mapd1[ $d >> 24        ] | $pc2mapd2[($d >> 16) & 0xFF] |
                      $pc2mapd3[($d >>  8) & 0xFF] | $pc2mapd4[ $d        & 0xFF];

                // Reorder: odd bytes/even bytes. Push the result in key schedule.
                $val1 = ( $cp        & intval(0xFF000000)) | (($cp <<  8) & 0x00FF0000) |
                        (($dp >> 16) & 0x0000FF00) | (($dp >>  8) & 0x000000FF);
                $val2 = (($cp <<  8) & intval(0xFF000000)) | (($cp << 16) & 0x00FF0000) |
                        (($dp >>  8) & 0x0000FF00) | ( $dp        & 0x000000FF);
                $keys[$des_round][self::ENCRYPT][       ] = $val1;
                $keys[$des_round][self::DECRYPT][$ki - 1] = $val1;
                $keys[$des_round][self::ENCRYPT][       ] = $val2;
                $keys[$des_round][self::DECRYPT][$ki    ] = $val2;
            }
        }

        switch ($this->des_rounds) {
            case 3: // 3DES keys
                $this->keys = [
                    self::ENCRYPT => array_merge(
                        $keys[0][self::ENCRYPT],
                        $keys[1][self::DECRYPT],
                        $keys[2][self::ENCRYPT]
                    ),
                    self::DECRYPT => array_merge(
                        $keys[2][self::DECRYPT],
                        $keys[1][self::ENCRYPT],
                        $keys[0][self::DECRYPT]
                    )
                ];
                break;
            // case 1: // DES keys
            default:
                $this->keys = [
                    self::ENCRYPT => $keys[0][self::ENCRYPT],
                    self::DECRYPT => $keys[0][self::DECRYPT]
                ];
        }
    }

    /**
     * Setup the performance-optimized function for de/encrypt()
     *
     * @see Common\SymmetricKey::setupInlineCrypt()
     */
    protected function setupInlineCrypt()
    {
        // Engine configuration for:
        // -  DES ($des_rounds == 1) or
        // - 3DES ($des_rounds == 3)
        $des_rounds = $this->des_rounds;

        $init_crypt = 'static $sbox1, $sbox2, $sbox3, $sbox4, $sbox5, $sbox6, $sbox7, $sbox8, $shuffleip, $shuffleinvip;
            if (!$sbox1) {
                $sbox1 = array_map("intval", self::$sbox1);
                $sbox2 = array_map("intval", self::$sbox2);
                $sbox3 = array_map("intval", self::$sbox3);
                $sbox4 = array_map("intval", self::$sbox4);
                $sbox5 = array_map("intval", self::$sbox5);
                $sbox6 = array_map("intval", self::$sbox6);
                $sbox7 = array_map("intval", self::$sbox7);
                $sbox8 = array_map("intval", self::$sbox8);'
                /* Merge $shuffle with $[inv]ipmap */ . '
                for ($i = 0; $i < 256; ++$i) {
                    $shuffleip[]    =  self::$shuffle[self::$ipmap[$i]];
                    $shuffleinvip[] =  self::$shuffle[self::$invipmap[$i]];
                }
            }
        ';

        $k = [
            self::ENCRYPT => $this->keys[self::ENCRYPT],
            self::DECRYPT => $this->keys[self::DECRYPT]
        ];
        $init_encrypt = '';
        $init_decrypt = '';

        // Creating code for en- and decryption.
        $crypt_block = [];
        foreach ([self::ENCRYPT, self::DECRYPT] as $c) {
            /* Do the initial IP permutation. */
            $crypt_block[$c] = '
                $in = unpack("N*", $in);
                $l  = $in[1];
                $r  = $in[2];
                $in = unpack("N*",
                    ($shuffleip[ $r        & 0xFF] & "\x80\x80\x80\x80\x80\x80\x80\x80") |
                    ($shuffleip[($r >>  8) & 0xFF] & "\x40\x40\x40\x40\x40\x40\x40\x40") |
                    ($shuffleip[($r >> 16) & 0xFF] & "\x20\x20\x20\x20\x20\x20\x20\x20") |
                    ($shuffleip[($r >> 24) & 0xFF] & "\x10\x10\x10\x10\x10\x10\x10\x10") |
                    ($shuffleip[ $l        & 0xFF] & "\x08\x08\x08\x08\x08\x08\x08\x08") |
                    ($shuffleip[($l >>  8) & 0xFF] & "\x04\x04\x04\x04\x04\x04\x04\x04") |
                    ($shuffleip[($l >> 16) & 0xFF] & "\x02\x02\x02\x02\x02\x02\x02\x02") |
                    ($shuffleip[($l >> 24) & 0xFF] & "\x01\x01\x01\x01\x01\x01\x01\x01")
                );
                ' . /* Extract L0 and R0 */ '
                $l = $in[1];
                $r = $in[2];
            ';

            $l = '$l';
            $r = '$r';

            // Perform DES or 3DES.
            for ($ki = -1, $des_round = 0; $des_round < $des_rounds; ++$des_round) {
                // Perform the 16 steps.
                for ($i = 0; $i < 16; ++$i) {
                    // start of "the Feistel (F) function" - see the following URL:
                    // http://en.wikipedia.org/wiki/Image:Data_Encryption_Standard_InfoBox_Diagram.png
                    // Merge key schedule.
                    $crypt_block[$c] .= '
                        $b1 = ((' . $r . ' >>  3) & 0x1FFFFFFF)  ^ (' . $r . ' << 29) ^ ' . $k[$c][++$ki] . ';
                        $b2 = ((' . $r . ' >> 31) & 0x00000001)  ^ (' . $r . ' <<  1) ^ ' . $k[$c][++$ki] . ';' .
                        /* S-box indexing. */
                        $l . ' = $sbox1[($b1 >> 24) & 0x3F] ^ $sbox2[($b2 >> 24) & 0x3F] ^
                                 $sbox3[($b1 >> 16) & 0x3F] ^ $sbox4[($b2 >> 16) & 0x3F] ^
                                 $sbox5[($b1 >>  8) & 0x3F] ^ $sbox6[($b2 >>  8) & 0x3F] ^
                                 $sbox7[ $b1        & 0x3F] ^ $sbox8[ $b2        & 0x3F] ^ ' . $l . ';
                    ';
                    // end of "the Feistel (F) function"

                    // swap L & R
                    list($l, $r) = [$r, $l];
                }
                list($l, $r) = [$r, $l];
            }

            // Perform the inverse IP permutation.
            $crypt_block[$c] .= '$in =
                ($shuffleinvip[($l >> 24) & 0xFF] & "\x80\x80\x80\x80\x80\x80\x80\x80") |
                ($shuffleinvip[($r >> 24) & 0xFF] & "\x40\x40\x40\x40\x40\x40\x40\x40") |
                ($shuffleinvip[($l >> 16) & 0xFF] & "\x20\x20\x20\x20\x20\x20\x20\x20") |
                ($shuffleinvip[($r >> 16) & 0xFF] & "\x10\x10\x10\x10\x10\x10\x10\x10") |
                ($shuffleinvip[($l >>  8) & 0xFF] & "\x08\x08\x08\x08\x08\x08\x08\x08") |
                ($shuffleinvip[($r >>  8) & 0xFF] & "\x04\x04\x04\x04\x04\x04\x04\x04") |
                ($shuffleinvip[ $l        & 0xFF] & "\x02\x02\x02\x02\x02\x02\x02\x02") |
                ($shuffleinvip[ $r        & 0xFF] & "\x01\x01\x01\x01\x01\x01\x01\x01");
            ';
        }

        // Creates the inline-crypt function
        $this->inline_crypt = $this->createInlineCryptFunction(
            [
               'init_crypt'    => $init_crypt,
               'init_encrypt'  => $init_encrypt,
               'init_decrypt'  => $init_decrypt,
               'encrypt_block' => $crypt_block[self::ENCRYPT],
               'decrypt_block' => $crypt_block[self::DECRYPT]
            ]
        );
    }
}
<?php

/**
 * Pure-PHP (EC)DH implementation
 *
 * PHP version 5
 *
 * Here's an example of how to compute a shared secret with this library:
 * <code>
 * <?php
 * include 'vendor/autoload.php';
 *
 * $ourPrivate = \phpseclib3\Crypt\DH::createKey();
 * $secret = DH::computeSecret($ourPrivate, $theirPublic);
 *
 * ?>
 * </code>
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2016 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\Crypt;

use phpseclib3\Crypt\Common\AsymmetricKey;
use phpseclib3\Crypt\DH\Parameters;
use phpseclib3\Crypt\DH\PrivateKey;
use phpseclib3\Crypt\DH\PublicKey;
use phpseclib3\Exception\NoKeyLoadedException;
use phpseclib3\Exception\UnsupportedOperationException;
use phpseclib3\Math\BigInteger;

/**
 * Pure-PHP (EC)DH implementation
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class DH extends AsymmetricKey
{
    /**
     * Algorithm Name
     *
     * @var string
     */
    const ALGORITHM = 'DH';

    /**
     * DH prime
     *
     * @var BigInteger
     */
    protected $prime;

    /**
     * DH Base
     *
     * Prime divisor of p-1
     *
     * @var BigInteger
     */
    protected $base;

    /**
     * Public Key
     *
     * @var BigInteger
     */
    protected $publicKey;

    /**
     * Create DH parameters
     *
     * This method is a bit polymorphic. It can take any of the following:
     *  - two BigInteger's (prime and base)
     *  - an integer representing the size of the prime in bits (the base is assumed to be 2)
     *  - a string (eg. diffie-hellman-group14-sha1)
     *
     * @return Parameters
     */
    public static function createParameters(...$args)
    {
        $class = new \ReflectionClass(static::class);
        if ($class->isFinal()) {
            throw new \RuntimeException('createParameters() should not be called from final classes (' . static::class . ')');
        }

        $params = new Parameters();
        if (count($args) == 2 && $args[0] instanceof BigInteger && $args[1] instanceof BigInteger) {
            //if (!$args[0]->isPrime()) {
            //    throw new \InvalidArgumentException('The first parameter should be a prime number');
            //}
            $params->prime = $args[0];
            $params->base = $args[1];
            return $params;
        } elseif (count($args) == 1 && is_numeric($args[0])) {
            $params->prime = BigInteger::randomPrime($args[0]);
            $params->base = new BigInteger(2);
            return $params;
        } elseif (count($args) != 1 || !is_string($args[0])) {
            throw new \InvalidArgumentException('Valid parameters are either: two BigInteger\'s (prime and base), a single integer (the length of the prime; base is assumed to be 2) or a string');
        }
        switch ($args[0]) {
            // see http://tools.ietf.org/html/rfc2409#section-6.2 and
            // http://tools.ietf.org/html/rfc2412, appendex E
            case 'diffie-hellman-group1-sha1':
                $prime = 'FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD129024E088A67CC74' .
                         '020BBEA63B139B22514A08798E3404DDEF9519B3CD3A431B302B0A6DF25F1437' .
                         '4FE1356D6D51C245E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7ED' .
                         'EE386BFB5A899FA5AE9F24117C4B1FE649286651ECE65381FFFFFFFFFFFFFFFF';
                break;
            // see http://tools.ietf.org/html/rfc3526#section-3
            case 'diffie-hellman-group14-sha1': // 2048-bit MODP Group
            case 'diffie-hellman-group14-sha256':
                $prime = 'FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD129024E088A67CC74' .
                         '020BBEA63B139B22514A08798E3404DDEF9519B3CD3A431B302B0A6DF25F1437' .
                         '4FE1356D6D51C245E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7ED' .
                         'EE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3DC2007CB8A163BF05' .
                         '98DA48361C55D39A69163FA8FD24CF5F83655D23DCA3AD961C62F356208552BB' .
                         '9ED529077096966D670C354E4ABC9804F1746C08CA18217C32905E462E36CE3B' .
                         'E39E772C180E86039B2783A2EC07A28FB5C55DF06F4C52C9DE2BCBF695581718' .
                         '3995497CEA956AE515D2261898FA051015728E5A8AACAA68FFFFFFFFFFFFFFFF';
                break;
            // see https://tools.ietf.org/html/rfc3526#section-4
            case 'diffie-hellman-group15-sha512': // 3072-bit MODP Group
                $prime = 'FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD129024E088A67CC74' .
                         '020BBEA63B139B22514A08798E3404DDEF9519B3CD3A431B302B0A6DF25F1437' .
                         '4FE1356D6D51C245E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7ED' .
                         'EE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3DC2007CB8A163BF05' .
                         '98DA48361C55D39A69163FA8FD24CF5F83655D23DCA3AD961C62F356208552BB' .
                         '9ED529077096966D670C354E4ABC9804F1746C08CA18217C32905E462E36CE3B' .
                         'E39E772C180E86039B2783A2EC07A28FB5C55DF06F4C52C9DE2BCBF695581718' .
                         '3995497CEA956AE515D2261898FA051015728E5A8AAAC42DAD33170D04507A33' .
                         'A85521ABDF1CBA64ECFB850458DBEF0A8AEA71575D060C7DB3970F85A6E1E4C7' .
                         'ABF5AE8CDB0933D71E8C94E04A25619DCEE3D2261AD2EE6BF12FFA06D98A0864' .
                         'D87602733EC86A64521F2B18177B200CBBE117577A615D6C770988C0BAD946E2' .
                         '08E24FA074E5AB3143DB5BFCE0FD108E4B82D120A93AD2CAFFFFFFFFFFFFFFFF';
                break;
            // see https://tools.ietf.org/html/rfc3526#section-5
            case 'diffie-hellman-group16-sha512': // 4096-bit MODP Group
                $prime = 'FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD129024E088A67CC74' .
                         '020BBEA63B139B22514A08798E3404DDEF9519B3CD3A431B302B0A6DF25F1437' .
                         '4FE1356D6D51C245E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7ED' .
                         'EE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3DC2007CB8A163BF05' .
                         '98DA48361C55D39A69163FA8FD24CF5F83655D23DCA3AD961C62F356208552BB' .
                         '9ED529077096966D670C354E4ABC9804F1746C08CA18217C32905E462E36CE3B' .
                         'E39E772C180E86039B2783A2EC07A28FB5C55DF06F4C52C9DE2BCBF695581718' .
                         '3995497CEA956AE515D2261898FA051015728E5A8AAAC42DAD33170D04507A33' .
                         'A85521ABDF1CBA64ECFB850458DBEF0A8AEA71575D060C7DB3970F85A6E1E4C7' .
                         'ABF5AE8CDB0933D71E8C94E04A25619DCEE3D2261AD2EE6BF12FFA06D98A0864' .
                         'D87602733EC86A64521F2B18177B200CBBE117577A615D6C770988C0BAD946E2' .
                         '08E24FA074E5AB3143DB5BFCE0FD108E4B82D120A92108011A723C12A787E6D7' .
                         '88719A10BDBA5B2699C327186AF4E23C1A946834B6150BDA2583E9CA2AD44CE8' .
                         'DBBBC2DB04DE8EF92E8EFC141FBECAA6287C59474E6BC05D99B2964FA090C3A2' .
                         '233BA186515BE7ED1F612970CEE2D7AFB81BDD762170481CD0069127D5B05AA9' .
                         '93B4EA988D8FDDC186FFB7DC90A6C08F4DF435C934063199FFFFFFFFFFFFFFFF';
                break;
            // see https://tools.ietf.org/html/rfc3526#section-6
            case 'diffie-hellman-group17-sha512': // 6144-bit MODP Group
                $prime = 'FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD129024E088A67CC74' .
                         '020BBEA63B139B22514A08798E3404DDEF9519B3CD3A431B302B0A6DF25F1437' .
                         '4FE1356D6D51C245E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7ED' .
                         'EE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3DC2007CB8A163BF05' .
                         '98DA48361C55D39A69163FA8FD24CF5F83655D23DCA3AD961C62F356208552BB' .
                         '9ED529077096966D670C354E4ABC9804F1746C08CA18217C32905E462E36CE3B' .
                         'E39E772C180E86039B2783A2EC07A28FB5C55DF06F4C52C9DE2BCBF695581718' .
                         '3995497CEA956AE515D2261898FA051015728E5A8AAAC42DAD33170D04507A33' .
                         'A85521ABDF1CBA64ECFB850458DBEF0A8AEA71575D060C7DB3970F85A6E1E4C7' .
                         'ABF5AE8CDB0933D71E8C94E04A25619DCEE3D2261AD2EE6BF12FFA06D98A0864' .
                         'D87602733EC86A64521F2B18177B200CBBE117577A615D6C770988C0BAD946E2' .
                         '08E24FA074E5AB3143DB5BFCE0FD108E4B82D120A92108011A723C12A787E6D7' .
                         '88719A10BDBA5B2699C327186AF4E23C1A946834B6150BDA2583E9CA2AD44CE8' .
                         'DBBBC2DB04DE8EF92E8EFC141FBECAA6287C59474E6BC05D99B2964FA090C3A2' .
                         '233BA186515BE7ED1F612970CEE2D7AFB81BDD762170481CD0069127D5B05AA9' .
                         '93B4EA988D8FDDC186FFB7DC90A6C08F4DF435C93402849236C3FAB4D27C7026' .
                         'C1D4DCB2602646DEC9751E763DBA37BDF8FF9406AD9E530EE5DB382F413001AE' .
                         'B06A53ED9027D831179727B0865A8918DA3EDBEBCF9B14ED44CE6CBACED4BB1B' .
                         'DB7F1447E6CC254B332051512BD7AF426FB8F401378CD2BF5983CA01C64B92EC' .
                         'F032EA15D1721D03F482D7CE6E74FEF6D55E702F46980C82B5A84031900B1C9E' .
                         '59E7C97FBEC7E8F323A97A7E36CC88BE0F1D45B7FF585AC54BD407B22B4154AA' .
                         'CC8F6D7EBF48E1D814CC5ED20F8037E0A79715EEF29BE32806A1D58BB7C5DA76' .
                         'F550AA3D8A1FBFF0EB19CCB1A313D55CDA56C9EC2EF29632387FE8D76E3C0468' .
                         '043E8F663F4860EE12BF2D5B0B7474D6E694F91E6DCC4024FFFFFFFFFFFFFFFF';
                break;
            // see https://tools.ietf.org/html/rfc3526#section-7
            case 'diffie-hellman-group18-sha512': // 8192-bit MODP Group
                $prime = 'FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD129024E088A67CC74' .
                         '020BBEA63B139B22514A08798E3404DDEF9519B3CD3A431B302B0A6DF25F1437' .
                         '4FE1356D6D51C245E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7ED' .
                         'EE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3DC2007CB8A163BF05' .
                         '98DA48361C55D39A69163FA8FD24CF5F83655D23DCA3AD961C62F356208552BB' .
                         '9ED529077096966D670C354E4ABC9804F1746C08CA18217C32905E462E36CE3B' .
                         'E39E772C180E86039B2783A2EC07A28FB5C55DF06F4C52C9DE2BCBF695581718' .
                         '3995497CEA956AE515D2261898FA051015728E5A8AAAC42DAD33170D04507A33' .
                         'A85521ABDF1CBA64ECFB850458DBEF0A8AEA71575D060C7DB3970F85A6E1E4C7' .
                         'ABF5AE8CDB0933D71E8C94E04A25619DCEE3D2261AD2EE6BF12FFA06D98A0864' .
                         'D87602733EC86A64521F2B18177B200CBBE117577A615D6C770988C0BAD946E2' .
                         '08E24FA074E5AB3143DB5BFCE0FD108E4B82D120A92108011A723C12A787E6D7' .
                         '88719A10BDBA5B2699C327186AF4E23C1A946834B6150BDA2583E9CA2AD44CE8' .
                         'DBBBC2DB04DE8EF92E8EFC141FBECAA6287C59474E6BC05D99B2964FA090C3A2' .
                         '233BA186515BE7ED1F612970CEE2D7AFB81BDD762170481CD0069127D5B05AA9' .
                         '93B4EA988D8FDDC186FFB7DC90A6C08F4DF435C93402849236C3FAB4D27C7026' .
                         'C1D4DCB2602646DEC9751E763DBA37BDF8FF9406AD9E530EE5DB382F413001AE' .
                         'B06A53ED9027D831179727B0865A8918DA3EDBEBCF9B14ED44CE6CBACED4BB1B' .
                         'DB7F1447E6CC254B332051512BD7AF426FB8F401378CD2BF5983CA01C64B92EC' .
                         'F032EA15D1721D03F482D7CE6E74FEF6D55E702F46980C82B5A84031900B1C9E' .
                         '59E7C97FBEC7E8F323A97A7E36CC88BE0F1D45B7FF585AC54BD407B22B4154AA' .
                         'CC8F6D7EBF48E1D814CC5ED20F8037E0A79715EEF29BE32806A1D58BB7C5DA76' .
                         'F550AA3D8A1FBFF0EB19CCB1A313D55CDA56C9EC2EF29632387FE8D76E3C0468' .
                         '043E8F663F4860EE12BF2D5B0B7474D6E694F91E6DBE115974A3926F12FEE5E4' .
                         '38777CB6A932DF8CD8BEC4D073B931BA3BC832B68D9DD300741FA7BF8AFC47ED' .
                         '2576F6936BA424663AAB639C5AE4F5683423B4742BF1C978238F16CBE39D652D' .
                         'E3FDB8BEFC848AD922222E04A4037C0713EB57A81A23F0C73473FC646CEA306B' .
                         '4BCBC8862F8385DDFA9D4B7FA2C087E879683303ED5BDD3A062B3CF5B3A278A6' .
                         '6D2A13F83F44F82DDF310EE074AB6A364597E899A0255DC164F31CC50846851D' .
                         'F9AB48195DED7EA1B1D510BD7EE74D73FAF36BC31ECFA268359046F4EB879F92' .
                         '4009438B481C6CD7889A002ED5EE382BC9190DA6FC026E479558E4475677E9AA' .
                         '9E3050E2765694DFC81F56E880B96E7160C980DD98EDD3DFFFFFFFFFFFFFFFFF';
                break;
            default:
                throw new \InvalidArgumentException('Invalid named prime provided');
        }

        $params->prime = new BigInteger($prime, 16);
        $params->base = new BigInteger(2);

        return $params;
    }

    /**
     * Create public / private key pair.
     *
     * The rationale for the second parameter is described in http://tools.ietf.org/html/rfc4419#section-6.2 :
     *
     * "To increase the speed of the key exchange, both client and server may
     *  reduce the size of their private exponents.  It should be at least
     *  twice as long as the key material that is generated from the shared
     *  secret.  For more details, see the paper by van Oorschot and Wiener
     *  [VAN-OORSCHOT]."
     *
     * $length is in bits
     *
     * @param Parameters $params
     * @param int $length optional
     * @return PrivateKey
     */
    public static function createKey(Parameters $params, $length = 0)
    {
        $class = new \ReflectionClass(static::class);
        if ($class->isFinal()) {
            throw new \RuntimeException('createKey() should not be called from final classes (' . static::class . ')');
        }

        $one = new BigInteger(1);
        if ($length) {
            $max = $one->bitwise_leftShift($length);
            $max = $max->subtract($one);
        } else {
            $max = $params->prime->subtract($one);
        }

        $key = new PrivateKey();
        $key->prime = $params->prime;
        $key->base = $params->base;
        $key->privateKey = BigInteger::randomRange($one, $max);
        $key->publicKey = $key->base->powMod($key->privateKey, $key->prime);
        return $key;
    }

    /**
     * Compute Shared Secret
     *
     * @param PrivateKey|EC $private
     * @param PublicKey|BigInteger|string $public
     * @return mixed
     */
    public static function computeSecret($private, $public)
    {
        if ($private instanceof PrivateKey) { // DH\PrivateKey
            switch (true) {
                case $public instanceof PublicKey:
                    if (!$private->prime->equals($public->prime) || !$private->base->equals($public->base)) {
                        throw new \InvalidArgumentException('The public and private key do not share the same prime and / or base numbers');
                    }
                    return $public->publicKey->powMod($private->privateKey, $private->prime)->toBytes(true);
                case is_string($public):
                    $public = new BigInteger($public, -256);
                    // fall-through
                case $public instanceof BigInteger:
                    return $public->powMod($private->privateKey, $private->prime)->toBytes(true);
                default:
                    throw new \InvalidArgumentException('$public needs to be an instance of DH\PublicKey, a BigInteger or a string');
            }
        }

        if ($private instanceof EC\PrivateKey) {
            switch (true) {
                case $public instanceof EC\PublicKey:
                    $public = $public->getEncodedCoordinates();
                    // fall-through
                case is_string($public):
                    $point = $private->multiply($public);
                    switch ($private->getCurve()) {
                        case 'Curve25519':
                        case 'Curve448':
                            $secret = $point;
                            break;
                        default:
                            // according to https://www.secg.org/sec1-v2.pdf#page=33 only X is returned
                            $secret = substr($point, 1, (strlen($point) - 1) >> 1);
                    }
                    /*
                    if (($secret[0] & "\x80") === "\x80") {
                        $secret = "\0$secret";
                    }
                    */
                    return $secret;
                default:
                    throw new \InvalidArgumentException('$public needs to be an instance of EC\PublicKey or a string (an encoded coordinate)');
            }
        }
    }

    /**
     * Load the key
     *
     * @param string $key
     * @param string $password optional
     * @return AsymmetricKey
     */
    public static function load($key, $password = false)
    {
        try {
            return EC::load($key, $password);
        } catch (NoKeyLoadedException $e) {
        }

        return parent::load($key, $password);
    }

    /**
     * OnLoad Handler
     *
     * @return bool
     */
    protected static function onLoad(array $components)
    {
        if (!isset($components['privateKey']) && !isset($components['publicKey'])) {
            $new = new Parameters();
        } else {
            $new = isset($components['privateKey']) ?
                new PrivateKey() :
                new PublicKey();
        }

        $new->prime = $components['prime'];
        $new->base = $components['base'];

        if (isset($components['privateKey'])) {
            $new->privateKey = $components['privateKey'];
        }
        if (isset($components['publicKey'])) {
            $new->publicKey = $components['publicKey'];
        }

        return $new;
    }

    /**
     * Determines which hashing function should be used
     *
     * @param string $hash
     */
    public function withHash($hash)
    {
        throw new UnsupportedOperationException('DH does not use a hash algorithm');
    }

    /**
     * Returns the hash algorithm currently being used
     *
     */
    public function getHash()
    {
        throw new UnsupportedOperationException('DH does not use a hash algorithm');
    }

    /**
     * Returns the parameters
     *
     * A public / private key is only returned if the currently loaded "key" contains an x or y
     * value.
     *
     * @see self::getPublicKey()
     * @return mixed
     */
    public function getParameters()
    {
        $type = DH::validatePlugin('Keys', 'PKCS1', 'saveParameters');

        $key = $type::saveParameters($this->prime, $this->base);
        return DH::load($key, 'PKCS1');
    }
}
<?php

/**
 * "PKCS1" Formatted EC Key Handler
 *
 * PHP version 5
 *
 * Processes keys with the following headers:
 *
 * -----BEGIN DH PARAMETERS-----
 *
 * Technically, PKCS1 is for RSA keys, only, but we're using PKCS1 to describe
 * DSA, whose format isn't really formally described anywhere, so might as well
 * use it to describe this, too.
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2015 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\Crypt\DH\Formats\Keys;

use phpseclib3\Crypt\Common\Formats\Keys\PKCS1 as Progenitor;
use phpseclib3\File\ASN1;
use phpseclib3\File\ASN1\Maps;
use phpseclib3\Math\BigInteger;

/**
 * "PKCS1" Formatted DH Key Handler
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class PKCS1 extends Progenitor
{
    /**
     * Break a public or private key down into its constituent components
     *
     * @param string $key
     * @param string $password optional
     * @return array
     */
    public static function load($key, $password = '')
    {
        $key = parent::load($key, $password);

        $decoded = ASN1::decodeBER($key);
        if (!$decoded) {
            throw new \RuntimeException('Unable to decode BER');
        }

        $components = ASN1::asn1map($decoded[0], Maps\DHParameter::MAP);
        if (!is_array($components)) {
            throw new \RuntimeException('Unable to perform ASN1 mapping on parameters');
        }

        return $components;
    }

    /**
     * Convert EC parameters to the appropriate format
     *
     * @return string
     */
    public static function saveParameters(BigInteger $prime, BigInteger $base, array $options = [])
    {
        $params = [
            'prime' => $prime,
            'base' => $base
        ];
        $params = ASN1::encodeDER($params, Maps\DHParameter::MAP);

        return "-----BEGIN DH PARAMETERS-----\r\n" .
               chunk_split(base64_encode($params), 64) .
               "-----END DH PARAMETERS-----\r\n";
    }
}
<?php

/**
 * PKCS#8 Formatted DH Key Handler
 *
 * PHP version 5
 *
 * Processes keys with the following headers:
 *
 * -----BEGIN ENCRYPTED PRIVATE KEY-----
 * -----BEGIN PRIVATE KEY-----
 * -----BEGIN PUBLIC KEY-----
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2015 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\Crypt\DH\Formats\Keys;

use phpseclib3\Crypt\Common\Formats\Keys\PKCS8 as Progenitor;
use phpseclib3\File\ASN1;
use phpseclib3\File\ASN1\Maps;
use phpseclib3\Math\BigInteger;

/**
 * PKCS#8 Formatted DH Key Handler
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class PKCS8 extends Progenitor
{
    /**
     * OID Name
     *
     * @var string
     */
    const OID_NAME = 'dhKeyAgreement';

    /**
     * OID Value
     *
     * @var string
     */
    const OID_VALUE = '1.2.840.113549.1.3.1';

    /**
     * Child OIDs loaded
     *
     * @var bool
     */
    protected static $childOIDsLoaded = false;

    /**
     * Break a public or private key down into its constituent components
     *
     * @param string $key
     * @param string $password optional
     * @return array
     */
    public static function load($key, $password = '')
    {
        $key = parent::load($key, $password);

        $type = isset($key['privateKey']) ? 'privateKey' : 'publicKey';

        $decoded = ASN1::decodeBER($key[$type . 'Algorithm']['parameters']->element);
        if (empty($decoded)) {
            throw new \RuntimeException('Unable to decode BER of parameters');
        }
        $components = ASN1::asn1map($decoded[0], Maps\DHParameter::MAP);
        if (!is_array($components)) {
            throw new \RuntimeException('Unable to perform ASN1 mapping on parameters');
        }

        $decoded = ASN1::decodeBER($key[$type]);
        switch (true) {
            case !isset($decoded):
            case !isset($decoded[0]['content']):
            case !$decoded[0]['content'] instanceof BigInteger:
                throw new \RuntimeException('Unable to decode BER of parameters');
        }
        $components[$type] = $decoded[0]['content'];

        return $components;
    }

    /**
     * Convert a private key to the appropriate format.
     *
     * @param BigInteger $prime
     * @param BigInteger $base
     * @param BigInteger $privateKey
     * @param BigInteger $publicKey
     * @param string $password optional
     * @param array $options optional
     * @return string
     */
    public static function savePrivateKey(BigInteger $prime, BigInteger $base, BigInteger $privateKey, BigInteger $publicKey, $password = '', array $options = [])
    {
        $params = [
            'prime' => $prime,
            'base' => $base
        ];
        $params = ASN1::encodeDER($params, Maps\DHParameter::MAP);
        $params = new ASN1\Element($params);
        $key = ASN1::encodeDER($privateKey, ['type' => ASN1::TYPE_INTEGER]);
        return self::wrapPrivateKey($key, [], $params, $password, null, '', $options);
    }

    /**
     * Convert a public key to the appropriate format
     *
     * @param BigInteger $prime
     * @param BigInteger $base
     * @param BigInteger $publicKey
     * @param array $options optional
     * @return string
     */
    public static function savePublicKey(BigInteger $prime, BigInteger $base, BigInteger $publicKey, array $options = [])
    {
        $params = [
            'prime' => $prime,
            'base' => $base
        ];
        $params = ASN1::encodeDER($params, Maps\DHParameter::MAP);
        $params = new ASN1\Element($params);
        $key = ASN1::encodeDER($publicKey, ['type' => ASN1::TYPE_INTEGER]);
        return self::wrapPublicKey($key, $params, null, $options);
    }
}
<?php

/**
 * DH Parameters
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2015 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\Crypt\DH;

use phpseclib3\Crypt\DH;

/**
 * DH Parameters
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
final class Parameters extends DH
{
    /**
     * Returns the parameters
     *
     * @param string $type
     * @param array $options optional
     * @return string
     */
    public function toString($type = 'PKCS1', array $options = [])
    {
        $type = self::validatePlugin('Keys', 'PKCS1', 'saveParameters');

        return $type::saveParameters($this->prime, $this->base, $options);
    }
}
<?php

/**
 * DH Private Key
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2015 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\Crypt\DH;

use phpseclib3\Crypt\Common;
use phpseclib3\Crypt\DH;

/**
 * DH Private Key
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
final class PrivateKey extends DH
{
    use Common\Traits\PasswordProtected;

    /**
     * Private Key
     *
     * @var \phpseclib3\Math\BigInteger
     */
    protected $privateKey;

    /**
     * Public Key
     *
     * @var \phpseclib3\Math\BigInteger
     */
    protected $publicKey;

    /**
     * Returns the public key
     *
     * @return PublicKey
     */
    public function getPublicKey()
    {
        $type = self::validatePlugin('Keys', 'PKCS8', 'savePublicKey');

        if (!isset($this->publicKey)) {
            $this->publicKey = $this->base->powMod($this->privateKey, $this->prime);
        }

        $key = $type::savePublicKey($this->prime, $this->base, $this->publicKey);

        return DH::loadFormat('PKCS8', $key);
    }

    /**
     * Returns the private key
     *
     * @param string $type
     * @param array $options optional
     * @return string
     */
    public function toString($type, array $options = [])
    {
        $type = self::validatePlugin('Keys', $type, 'savePrivateKey');

        if (!isset($this->publicKey)) {
            $this->publicKey = $this->base->powMod($this->privateKey, $this->prime);
        }

        return $type::savePrivateKey($this->prime, $this->base, $this->privateKey, $this->publicKey, $this->password, $options);
    }
}
<?php

/**
 * DH Public Key
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2015 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\Crypt\DH;

use phpseclib3\Crypt\Common;
use phpseclib3\Crypt\DH;

/**
 * DH Public Key
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
final class PublicKey extends DH
{
    use Common\Traits\Fingerprint;

    /**
     * Returns the public key
     *
     * @param string $type
     * @param array $options optional
     * @return string
     */
    public function toString($type, array $options = [])
    {
        $type = self::validatePlugin('Keys', $type, 'savePublicKey');

        return $type::savePublicKey($this->prime, $this->base, $this->publicKey, $options);
    }

    /**
     * Returns the public key as a BigInteger
     *
     * @return \phpseclib3\Math\BigInteger
     */
    public function toBigInteger()
    {
        return $this->publicKey;
    }
}
<?php

/**
 * Pure-PHP FIPS 186-4 compliant implementation of DSA.
 *
 * PHP version 5
 *
 * Here's an example of how to create signatures and verify signatures with this library:
 * <code>
 * <?php
 * include 'vendor/autoload.php';
 *
 * $private = \phpseclib3\Crypt\DSA::createKey();
 * $public = $private->getPublicKey();
 *
 * $plaintext = 'terrafrost';
 *
 * $signature = $private->sign($plaintext);
 *
 * echo $public->verify($plaintext, $signature) ? 'verified' : 'unverified';
 * ?>
 * </code>
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2016 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\Crypt;

use phpseclib3\Crypt\Common\AsymmetricKey;
use phpseclib3\Crypt\DSA\Parameters;
use phpseclib3\Crypt\DSA\PrivateKey;
use phpseclib3\Crypt\DSA\PublicKey;
use phpseclib3\Exception\InsufficientSetupException;
use phpseclib3\Math\BigInteger;

/**
 * Pure-PHP FIPS 186-4 compliant implementation of DSA.
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class DSA extends AsymmetricKey
{
    /**
     * Algorithm Name
     *
     * @var string
     */
    const ALGORITHM = 'DSA';

    /**
     * DSA Prime P
     *
     * @var BigInteger
     */
    protected $p;

    /**
     * DSA Group Order q
     *
     * Prime divisor of p-1
     *
     * @var BigInteger
     */
    protected $q;

    /**
     * DSA Group Generator G
     *
     * @var BigInteger
     */
    protected $g;

    /**
     * DSA public key value y
     *
     * @var BigInteger
     */
    protected $y;

    /**
     * Signature Format
     *
     * @var string
     */
    protected $sigFormat;

    /**
     * Signature Format (Short)
     *
     * @var string
     */
    protected $shortFormat;

    /**
     * Create DSA parameters
     *
     * @param int $L
     * @param int $N
     * @return DSA|bool
     */
    public static function createParameters($L = 2048, $N = 224)
    {
        self::initialize_static_variables();

        $class = new \ReflectionClass(static::class);
        if ($class->isFinal()) {
            throw new \RuntimeException('createParameters() should not be called from final classes (' . static::class . ')');
        }

        if (!isset(self::$engines['PHP'])) {
            self::useBestEngine();
        }

        switch (true) {
            case $N == 160:
            /*
              in FIPS 186-1 and 186-2 N was fixed at 160 whereas K had an upper bound of 1024.
              RFC 4253 (SSH Transport Layer Protocol) references FIPS 186-2 and as such most
              SSH DSA implementations only support keys with an N of 160.
              puttygen let's you set the size of L (but not the size of N) and uses 2048 as the
              default L value. that's not really compliant with any of the FIPS standards, however,
              for the purposes of maintaining compatibility with puttygen, we'll support it
            */
            //case ($L >= 512 || $L <= 1024) && (($L & 0x3F) == 0) && $N == 160:
            // FIPS 186-3 changed this as follows:
            //case $L == 1024 && $N == 160:
            case $L == 2048 && $N == 224:
            case $L == 2048 && $N == 256:
            case $L == 3072 && $N == 256:
                break;
            default:
                throw new \InvalidArgumentException('Invalid values for N and L');
        }

        $two = new BigInteger(2);

        $q = BigInteger::randomPrime($N);
        $divisor = $q->multiply($two);

        do {
            $x = BigInteger::random($L);
            list(, $c) = $x->divide($divisor);
            $p = $x->subtract($c->subtract(self::$one));
        } while ($p->getLength() != $L || !$p->isPrime());

        $p_1 = $p->subtract(self::$one);
        list($e) = $p_1->divide($q);

        // quoting http://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.186-4.pdf#page=50 ,
        // "h could be obtained from a random number generator or from a counter that
        //  changes after each use". PuTTY (sshdssg.c) starts h off at 1 and increments
        // it on each loop. wikipedia says "commonly h = 2 is used" so we'll just do that
        $h = clone $two;
        while (true) {
            $g = $h->powMod($e, $p);
            if (!$g->equals(self::$one)) {
                break;
            }
            $h = $h->add(self::$one);
        }

        $dsa = new Parameters();
        $dsa->p = $p;
        $dsa->q = $q;
        $dsa->g = $g;

        return $dsa;
    }

    /**
     * Create public / private key pair.
     *
     * This method is a bit polymorphic. It can take a DSA/Parameters object, L / N as two distinct parameters or
     * no parameters (at which point L and N will be generated with this method)
     *
     * Returns the private key, from which the publickey can be extracted
     *
     * @param int[] ...$args
     * @return PrivateKey
     */
    public static function createKey(...$args)
    {
        self::initialize_static_variables();

        $class = new \ReflectionClass(static::class);
        if ($class->isFinal()) {
            throw new \RuntimeException('createKey() should not be called from final classes (' . static::class . ')');
        }

        if (!isset(self::$engines['PHP'])) {
            self::useBestEngine();
        }

        if (count($args) == 2 && is_int($args[0]) && is_int($args[1])) {
            $params = self::createParameters($args[0], $args[1]);
        } elseif (count($args) == 1 && $args[0] instanceof Parameters) {
            $params = $args[0];
        } elseif (!count($args)) {
            $params = self::createParameters();
        } else {
            throw new InsufficientSetupException('Valid parameters are either two integers (L and N), a single DSA object or no parameters at all.');
        }

        $private = new PrivateKey();
        $private->p = $params->p;
        $private->q = $params->q;
        $private->g = $params->g;

        $private->x = BigInteger::randomRange(self::$one, $private->q->subtract(self::$one));
        $private->y = $private->g->powMod($private->x, $private->p);

        //$public = clone $private;
        //unset($public->x);

        return $private
            ->withHash($params->hash->getHash())
            ->withSignatureFormat($params->shortFormat);
    }

    /**
     * OnLoad Handler
     *
     * @return bool
     */
    protected static function onLoad(array $components)
    {
        if (!isset(self::$engines['PHP'])) {
            self::useBestEngine();
        }

        if (!isset($components['x']) && !isset($components['y'])) {
            $new = new Parameters();
        } elseif (isset($components['x'])) {
            $new = new PrivateKey();
            $new->x = $components['x'];
        } else {
            $new = new PublicKey();
        }

        $new->p = $components['p'];
        $new->q = $components['q'];
        $new->g = $components['g'];

        if (isset($components['y'])) {
            $new->y = $components['y'];
        }

        return $new;
    }

    /**
     * Constructor
     *
     * PublicKey and PrivateKey objects can only be created from abstract RSA class
     */
    protected function __construct()
    {
        $this->sigFormat = self::validatePlugin('Signature', 'ASN1');
        $this->shortFormat = 'ASN1';

        parent::__construct();
    }

    /**
     * Returns the key size
     *
     * More specifically, this L (the length of DSA Prime P) and N (the length of DSA Group Order q)
     *
     * @return array
     */
    public function getLength()
    {
        return ['L' => $this->p->getLength(), 'N' => $this->q->getLength()];
    }

    /**
     * Returns the current engine being used
     *
     * @see self::useInternalEngine()
     * @see self::useBestEngine()
     * @return string
     */
    public function getEngine()
    {
        if (!isset(self::$engines['PHP'])) {
            self::useBestEngine();
        }
        return self::$engines['OpenSSL'] && in_array($this->hash->getHash(), openssl_get_md_methods()) ?
            'OpenSSL' : 'PHP';
    }

    /**
     * Returns the parameters
     *
     * A public / private key is only returned if the currently loaded "key" contains an x or y
     * value.
     *
     * @see self::getPublicKey()
     * @return mixed
     */
    public function getParameters()
    {
        $type = self::validatePlugin('Keys', 'PKCS1', 'saveParameters');

        $key = $type::saveParameters($this->p, $this->q, $this->g);
        return DSA::load($key, 'PKCS1')
            ->withHash($this->hash->getHash())
            ->withSignatureFormat($this->shortFormat);
    }

    /**
     * Determines the signature padding mode
     *
     * Valid values are: ASN1, SSH2, Raw
     *
     * @param string $format
     */
    public function withSignatureFormat($format)
    {
        $new = clone $this;
        $new->shortFormat = $format;
        $new->sigFormat = self::validatePlugin('Signature', $format);
        return $new;
    }

    /**
     * Returns the signature format currently being used
     *
     */
    public function getSignatureFormat()
    {
        return $this->shortFormat;
    }
}
<?php

/**
 * OpenSSH Formatted DSA Key Handler
 *
 * PHP version 5
 *
 * Place in $HOME/.ssh/authorized_keys
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2015 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\Crypt\DSA\Formats\Keys;

use phpseclib3\Common\Functions\Strings;
use phpseclib3\Crypt\Common\Formats\Keys\OpenSSH as Progenitor;
use phpseclib3\Math\BigInteger;

/**
 * OpenSSH Formatted DSA Key Handler
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class OpenSSH extends Progenitor
{
    /**
     * Supported Key Types
     *
     * @var array
     */
    protected static $types = ['ssh-dss'];

    /**
     * Break a public or private key down into its constituent components
     *
     * @param string $key
     * @param string $password optional
     * @return array
     */
    public static function load($key, $password = '')
    {
        $parsed = parent::load($key, $password);

        if (isset($parsed['paddedKey'])) {
            list($type) = Strings::unpackSSH2('s', $parsed['paddedKey']);
            if ($type != $parsed['type']) {
                throw new \RuntimeException("The public and private keys are not of the same type ($type vs $parsed[type])");
            }

            list($p, $q, $g, $y, $x, $comment) = Strings::unpackSSH2('i5s', $parsed['paddedKey']);

            return compact('p', 'q', 'g', 'y', 'x', 'comment');
        }

        list($p, $q, $g, $y) = Strings::unpackSSH2('iiii', $parsed['publicKey']);

        $comment = $parsed['comment'];

        return compact('p', 'q', 'g', 'y', 'comment');
    }

    /**
     * Convert a public key to the appropriate format
     *
     * @param BigInteger $p
     * @param BigInteger $q
     * @param BigInteger $g
     * @param BigInteger $y
     * @param array $options optional
     * @return string
     */
    public static function savePublicKey(BigInteger $p, BigInteger $q, BigInteger $g, BigInteger $y, array $options = [])
    {
        if ($q->getLength() != 160) {
            throw new \InvalidArgumentException('SSH only supports keys with an N (length of Group Order q) of 160');
        }

        // from <http://tools.ietf.org/html/rfc4253#page-15>:
        // string    "ssh-dss"
        // mpint     p
        // mpint     q
        // mpint     g
        // mpint     y
        $DSAPublicKey = Strings::packSSH2('siiii', 'ssh-dss', $p, $q, $g, $y);

        if (isset($options['binary']) ? $options['binary'] : self::$binary) {
            return $DSAPublicKey;
        }

        $comment = isset($options['comment']) ? $options['comment'] : self::$comment;
        $DSAPublicKey = 'ssh-dss ' . base64_encode($DSAPublicKey) . ' ' . $comment;

        return $DSAPublicKey;
    }

    /**
     * Convert a private key to the appropriate format.
     *
     * @param BigInteger $p
     * @param BigInteger $q
     * @param BigInteger $g
     * @param BigInteger $y
     * @param BigInteger $x
     * @param string $password optional
     * @param array $options optional
     * @return string
     */
    public static function savePrivateKey(BigInteger $p, BigInteger $q, BigInteger $g, BigInteger $y, BigInteger $x, $password = '', array $options = [])
    {
        $publicKey = self::savePublicKey($p, $q, $g, $y, ['binary' => true]);
        $privateKey = Strings::packSSH2('si5', 'ssh-dss', $p, $q, $g, $y, $x);

        return self::wrapPrivateKey($publicKey, $privateKey, $password, $options);
    }
}
<?php

/**
 * PKCS#1 Formatted DSA Key Handler
 *
 * PHP version 5
 *
 * Used by File/X509.php
 *
 * Processes keys with the following headers:
 *
 * -----BEGIN DSA PRIVATE KEY-----
 * -----BEGIN DSA PUBLIC KEY-----
 * -----BEGIN DSA PARAMETERS-----
 *
 * Analogous to ssh-keygen's pem format (as specified by -m)
 *
 * Also, technically, PKCS1 decribes RSA but I am not aware of a formal specification for DSA.
 * The DSA private key format seems to have been adapted from the RSA private key format so
 * we're just re-using that as the name.
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2015 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\Crypt\DSA\Formats\Keys;

use phpseclib3\Common\Functions\Strings;
use phpseclib3\Crypt\Common\Formats\Keys\PKCS1 as Progenitor;
use phpseclib3\File\ASN1;
use phpseclib3\File\ASN1\Maps;
use phpseclib3\Math\BigInteger;

/**
 * PKCS#1 Formatted DSA Key Handler
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class PKCS1 extends Progenitor
{
    /**
     * Break a public or private key down into its constituent components
     *
     * @param string $key
     * @param string $password optional
     * @return array
     */
    public static function load($key, $password = '')
    {
        $key = parent::load($key, $password);

        $decoded = ASN1::decodeBER($key);
        if (!$decoded) {
            throw new \RuntimeException('Unable to decode BER');
        }

        $key = ASN1::asn1map($decoded[0], Maps\DSAParams::MAP);
        if (is_array($key)) {
            return $key;
        }

        $key = ASN1::asn1map($decoded[0], Maps\DSAPrivateKey::MAP);
        if (is_array($key)) {
            return $key;
        }

        $key = ASN1::asn1map($decoded[0], Maps\DSAPublicKey::MAP);
        if (is_array($key)) {
            return $key;
        }

        throw new \RuntimeException('Unable to perform ASN1 mapping');
    }

    /**
     * Convert DSA parameters to the appropriate format
     *
     * @param BigInteger $p
     * @param BigInteger $q
     * @param BigInteger $g
     * @return string
     */
    public static function saveParameters(BigInteger $p, BigInteger $q, BigInteger $g)
    {
        $key = [
            'p' => $p,
            'q' => $q,
            'g' => $g
        ];

        $key = ASN1::encodeDER($key, Maps\DSAParams::MAP);

        return "-----BEGIN DSA PARAMETERS-----\r\n" .
               chunk_split(Strings::base64_encode($key), 64) .
               "-----END DSA PARAMETERS-----\r\n";
    }

    /**
     * Convert a private key to the appropriate format.
     *
     * @param BigInteger $p
     * @param BigInteger $q
     * @param BigInteger $g
     * @param BigInteger $y
     * @param BigInteger $x
     * @param string $password optional
     * @param array $options optional
     * @return string
     */
    public static function savePrivateKey(BigInteger $p, BigInteger $q, BigInteger $g, BigInteger $y, BigInteger $x, $password = '', array $options = [])
    {
        $key = [
            'version' => 0,
            'p' => $p,
            'q' => $q,
            'g' => $g,
            'y' => $y,
            'x' => $x
        ];

        $key = ASN1::encodeDER($key, Maps\DSAPrivateKey::MAP);

        return self::wrapPrivateKey($key, 'DSA', $password, $options);
    }

    /**
     * Convert a public key to the appropriate format
     *
     * @param BigInteger $p
     * @param BigInteger $q
     * @param BigInteger $g
     * @param BigInteger $y
     * @return string
     */
    public static function savePublicKey(BigInteger $p, BigInteger $q, BigInteger $g, BigInteger $y)
    {
        $key = ASN1::encodeDER($y, Maps\DSAPublicKey::MAP);

        return self::wrapPublicKey($key, 'DSA');
    }
}
<?php

/**
 * PKCS#8 Formatted DSA Key Handler
 *
 * PHP version 5
 *
 * Processes keys with the following headers:
 *
 * -----BEGIN ENCRYPTED PRIVATE KEY-----
 * -----BEGIN PRIVATE KEY-----
 * -----BEGIN PUBLIC KEY-----
 *
 * Analogous to ssh-keygen's pkcs8 format (as specified by -m). Although PKCS8
 * is specific to private keys it's basically creating a DER-encoded wrapper
 * for keys. This just extends that same concept to public keys (much like ssh-keygen)
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2015 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\Crypt\DSA\Formats\Keys;

use phpseclib3\Crypt\Common\Formats\Keys\PKCS8 as Progenitor;
use phpseclib3\File\ASN1;
use phpseclib3\File\ASN1\Maps;
use phpseclib3\Math\BigInteger;

/**
 * PKCS#8 Formatted DSA Key Handler
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class PKCS8 extends Progenitor
{
    /**
     * OID Name
     *
     * @var string
     */
    const OID_NAME = 'id-dsa';

    /**
     * OID Value
     *
     * @var string
     */
    const OID_VALUE = '1.2.840.10040.4.1';

    /**
     * Child OIDs loaded
     *
     * @var bool
     */
    protected static $childOIDsLoaded = false;

    /**
     * Break a public or private key down into its constituent components
     *
     * @param string $key
     * @param string $password optional
     * @return array
     */
    public static function load($key, $password = '')
    {
        $key = parent::load($key, $password);

        $type = isset($key['privateKey']) ? 'privateKey' : 'publicKey';

        $decoded = ASN1::decodeBER($key[$type . 'Algorithm']['parameters']->element);
        if (!$decoded) {
            throw new \RuntimeException('Unable to decode BER of parameters');
        }
        $components = ASN1::asn1map($decoded[0], Maps\DSAParams::MAP);
        if (!is_array($components)) {
            throw new \RuntimeException('Unable to perform ASN1 mapping on parameters');
        }

        $decoded = ASN1::decodeBER($key[$type]);
        if (empty($decoded)) {
            throw new \RuntimeException('Unable to decode BER');
        }

        $var = $type == 'privateKey' ? 'x' : 'y';
        $components[$var] = ASN1::asn1map($decoded[0], Maps\DSAPublicKey::MAP);
        if (!$components[$var] instanceof BigInteger) {
            throw new \RuntimeException('Unable to perform ASN1 mapping');
        }

        if (isset($key['meta'])) {
            $components['meta'] = $key['meta'];
        }

        return $components;
    }

    /**
     * Convert a private key to the appropriate format.
     *
     * @param BigInteger $p
     * @param BigInteger $q
     * @param BigInteger $g
     * @param BigInteger $y
     * @param BigInteger $x
     * @param string $password optional
     * @param array $options optional
     * @return string
     */
    public static function savePrivateKey(BigInteger $p, BigInteger $q, BigInteger $g, BigInteger $y, BigInteger $x, $password = '', array $options = [])
    {
        $params = [
            'p' => $p,
            'q' => $q,
            'g' => $g
        ];
        $params = ASN1::encodeDER($params, Maps\DSAParams::MAP);
        $params = new ASN1\Element($params);
        $key = ASN1::encodeDER($x, Maps\DSAPublicKey::MAP);
        return self::wrapPrivateKey($key, [], $params, $password, null, '', $options);
    }

    /**
     * Convert a public key to the appropriate format
     *
     * @param BigInteger $p
     * @param BigInteger $q
     * @param BigInteger $g
     * @param BigInteger $y
     * @param array $options optional
     * @return string
     */
    public static function savePublicKey(BigInteger $p, BigInteger $q, BigInteger $g, BigInteger $y, array $options = [])
    {
        $params = [
            'p' => $p,
            'q' => $q,
            'g' => $g
        ];
        $params = ASN1::encodeDER($params, Maps\DSAParams::MAP);
        $params = new ASN1\Element($params);
        $key = ASN1::encodeDER($y, Maps\DSAPublicKey::MAP);
        return self::wrapPublicKey($key, $params, null, $options);
    }
}
<?php

/**
 * PuTTY Formatted DSA Key Handler
 *
 * puttygen does not generate DSA keys with an N of anything other than 160, however,
 * it can still load them and convert them. PuTTY will load them, too, but SSH servers
 * won't accept them. Since PuTTY formatted keys are primarily used with SSH this makes
 * keys with N > 160 kinda useless, hence this handlers not supporting such keys.
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2015 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\Crypt\DSA\Formats\Keys;

use phpseclib3\Common\Functions\Strings;
use phpseclib3\Crypt\Common\Formats\Keys\PuTTY as Progenitor;
use phpseclib3\Math\BigInteger;

/**
 * PuTTY Formatted DSA Key Handler
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class PuTTY extends Progenitor
{
    /**
     * Public Handler
     *
     * @var string
     */
    const PUBLIC_HANDLER = 'phpseclib3\Crypt\DSA\Formats\Keys\OpenSSH';

    /**
     * Algorithm Identifier
     *
     * @var array
     */
    protected static $types = ['ssh-dss'];

    /**
     * Break a public or private key down into its constituent components
     *
     * @param string $key
     * @param string $password optional
     * @return array
     */
    public static function load($key, $password = '')
    {
        $components = parent::load($key, $password);
        if (!isset($components['private'])) {
            return $components;
        }
        $type = $components['type'];
        $comment = $components['comment'];
        $public = $components['public'];
        $private = $components['private'];
        unset($components['public'], $components['private']);

        list($p, $q, $g, $y) = Strings::unpackSSH2('iiii', $public);
        list($x) = Strings::unpackSSH2('i', $private);

        return compact('p', 'q', 'g', 'y', 'x', 'comment');
    }

    /**
     * Convert a private key to the appropriate format.
     *
     * @param BigInteger $p
     * @param BigInteger $q
     * @param BigInteger $g
     * @param BigInteger $y
     * @param BigInteger $x
     * @param string $password optional
     * @param array $options optional
     * @return string
     */
    public static function savePrivateKey(BigInteger $p, BigInteger $q, BigInteger $g, BigInteger $y, BigInteger $x, $password = false, array $options = [])
    {
        if ($q->getLength() != 160) {
            throw new \InvalidArgumentException('SSH only supports keys with an N (length of Group Order q) of 160');
        }

        $public = Strings::packSSH2('iiii', $p, $q, $g, $y);
        $private = Strings::packSSH2('i', $x);

        return self::wrapPrivateKey($public, $private, 'ssh-dss', $password, $options);
    }

    /**
     * Convert a public key to the appropriate format
     *
     * @param BigInteger $p
     * @param BigInteger $q
     * @param BigInteger $g
     * @param BigInteger $y
     * @return string
     */
    public static function savePublicKey(BigInteger $p, BigInteger $q, BigInteger $g, BigInteger $y)
    {
        if ($q->getLength() != 160) {
            throw new \InvalidArgumentException('SSH only supports keys with an N (length of Group Order q) of 160');
        }

        return self::wrapPublicKey(Strings::packSSH2('iiii', $p, $q, $g, $y), 'ssh-dss');
    }
}
<?php

/**
 * Raw DSA Key Handler
 *
 * PHP version 5
 *
 * Reads and creates arrays as DSA keys
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2015 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\Crypt\DSA\Formats\Keys;

use phpseclib3\Math\BigInteger;

/**
 * Raw DSA Key Handler
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class Raw
{
    /**
     * Break a public or private key down into its constituent components
     *
     * @param array $key
     * @param string $password optional
     * @return array
     */
    public static function load($key, $password = '')
    {
        if (!is_array($key)) {
            throw new \UnexpectedValueException('Key should be a array - not a ' . gettype($key));
        }

        switch (true) {
            case !isset($key['p']) || !isset($key['q']) || !isset($key['g']):
            case !$key['p'] instanceof BigInteger:
            case !$key['q'] instanceof BigInteger:
            case !$key['g'] instanceof BigInteger:
            case !isset($key['x']) && !isset($key['y']):
            case isset($key['x']) && !$key['x'] instanceof BigInteger:
            case isset($key['y']) && !$key['y'] instanceof BigInteger:
                throw new \UnexpectedValueException('Key appears to be malformed');
        }

        $options = ['p' => 1, 'q' => 1, 'g' => 1, 'x' => 1, 'y' => 1];

        return array_intersect_key($key, $options);
    }

    /**
     * Convert a private key to the appropriate format.
     *
     * @param BigInteger $p
     * @param BigInteger $q
     * @param BigInteger $g
     * @param BigInteger $y
     * @param BigInteger $x
     * @param string $password optional
     * @return string
     */
    public static function savePrivateKey(BigInteger $p, BigInteger $q, BigInteger $g, BigInteger $y, BigInteger $x, $password = '')
    {
        return compact('p', 'q', 'g', 'y', 'x');
    }

    /**
     * Convert a public key to the appropriate format
     *
     * @param BigInteger $p
     * @param BigInteger $q
     * @param BigInteger $g
     * @param BigInteger $y
     * @return string
     */
    public static function savePublicKey(BigInteger $p, BigInteger $q, BigInteger $g, BigInteger $y)
    {
        return compact('p', 'q', 'g', 'y');
    }
}
<?php

/**
 * XML Formatted DSA Key Handler
 *
 * While XKMS defines a private key format for RSA it does not do so for DSA. Quoting that standard:
 *
 * "[XKMS] does not specify private key parameters for the DSA signature algorithm since the algorithm only
 *  supports signature modes and so the application of server generated keys and key recovery is of limited
 *  value"
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2015 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\Crypt\DSA\Formats\Keys;

use phpseclib3\Common\Functions\Strings;
use phpseclib3\Exception\BadConfigurationException;
use phpseclib3\Math\BigInteger;

/**
 * XML Formatted DSA Key Handler
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class XML
{
    /**
     * Break a public or private key down into its constituent components
     *
     * @param string $key
     * @param string $password optional
     * @return array
     */
    public static function load($key, $password = '')
    {
        if (!Strings::is_stringable($key)) {
            throw new \UnexpectedValueException('Key should be a string - not a ' . gettype($key));
        }

        if (!class_exists('DOMDocument')) {
            throw new BadConfigurationException('The dom extension is not setup correctly on this system');
        }

        $use_errors = libxml_use_internal_errors(true);

        $dom = new \DOMDocument();
        if (substr($key, 0, 5) != '<?xml') {
            $key = '<xml>' . $key . '</xml>';
        }
        if (!$dom->loadXML($key)) {
            libxml_use_internal_errors($use_errors);
            throw new \UnexpectedValueException('Key does not appear to contain XML');
        }
        $xpath = new \DOMXPath($dom);
        $keys = ['p', 'q', 'g', 'y', 'j', 'seed', 'pgencounter'];
        foreach ($keys as $key) {
            // $dom->getElementsByTagName($key) is case-sensitive
            $temp = $xpath->query("//*[translate(local-name(), 'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz')='$key']");
            if (!$temp->length) {
                continue;
            }
            $value = new BigInteger(Strings::base64_decode($temp->item(0)->nodeValue), 256);
            switch ($key) {
                case 'p': // a prime modulus meeting the [DSS] requirements
                    // Parameters P, Q, and G can be public and common to a group of users. They might be known
                    // from application context. As such, they are optional but P and Q must either both appear
                    // or both be absent
                    $components['p'] = $value;
                    break;
                case 'q': // an integer in the range 2**159 < Q < 2**160 which is a prime divisor of P-1
                    $components['q'] = $value;
                    break;
                case 'g': // an integer with certain properties with respect to P and Q
                    $components['g'] = $value;
                    break;
                case 'y': // G**X mod P (where X is part of the private key and not made public)
                    $components['y'] = $value;
                    // the remaining options do not do anything
                case 'j': // (P - 1) / Q
                    // Parameter J is available for inclusion solely for efficiency as it is calculatable from
                    // P and Q
                case 'seed': // a DSA prime generation seed
                    // Parameters seed and pgenCounter are used in the DSA prime number generation algorithm
                    // specified in [DSS]. As such, they are optional but must either both be present or both
                    // be absent
                case 'pgencounter': // a DSA prime generation counter
            }
        }

        libxml_use_internal_errors($use_errors);

        if (!isset($components['y'])) {
            throw new \UnexpectedValueException('Key is missing y component');
        }

        switch (true) {
            case !isset($components['p']):
            case !isset($components['q']):
            case !isset($components['g']):
                return ['y' => $components['y']];
        }

        return $components;
    }

    /**
     * Convert a public key to the appropriate format
     *
     * See https://www.w3.org/TR/xmldsig-core/#sec-DSAKeyValue
     *
     * @param BigInteger $p
     * @param BigInteger $q
     * @param BigInteger $g
     * @param BigInteger $y
     * @return string
     */
    public static function savePublicKey(BigInteger $p, BigInteger $q, BigInteger $g, BigInteger $y)
    {
        return "<DSAKeyValue>\r\n" .
               '  <P>' . Strings::base64_encode($p->toBytes()) . "</P>\r\n" .
               '  <Q>' . Strings::base64_encode($q->toBytes()) . "</Q>\r\n" .
               '  <G>' . Strings::base64_encode($g->toBytes()) . "</G>\r\n" .
               '  <Y>' . Strings::base64_encode($y->toBytes()) . "</Y>\r\n" .
               '</DSAKeyValue>';
    }
}
<?php

/**
 * ASN1 Signature Handler
 *
 * PHP version 5
 *
 * Handles signatures in the format described in
 * https://tools.ietf.org/html/rfc3279#section-2.2.2
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2016 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\Crypt\DSA\Formats\Signature;

use phpseclib3\File\ASN1 as Encoder;
use phpseclib3\File\ASN1\Maps;
use phpseclib3\Math\BigInteger;

/**
 * ASN1 Signature Handler
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class ASN1
{
    /**
     * Loads a signature
     *
     * @param string $sig
     * @return array|bool
     */
    public static function load($sig)
    {
        if (!is_string($sig)) {
            return false;
        }

        $decoded = Encoder::decodeBER($sig);
        if (empty($decoded)) {
            return false;
        }
        $components = Encoder::asn1map($decoded[0], Maps\DssSigValue::MAP);

        return $components;
    }

    /**
     * Returns a signature in the appropriate format
     *
     * @param BigInteger $r
     * @param BigInteger $s
     * @return string
     */
    public static function save(BigInteger $r, BigInteger $s)
    {
        return Encoder::encodeDER(compact('r', 's'), Maps\DssSigValue::MAP);
    }
}
<?php

/**
 * Raw DSA Signature Handler
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2016 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\Crypt\DSA\Formats\Signature;

use phpseclib3\Crypt\Common\Formats\Signature\Raw as Progenitor;

/**
 * Raw DSA Signature Handler
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class Raw extends Progenitor
{
}
<?php

/**
 * SSH2 Signature Handler
 *
 * PHP version 5
 *
 * Handles signatures in the format used by SSH2
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2016 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\Crypt\DSA\Formats\Signature;

use phpseclib3\Common\Functions\Strings;
use phpseclib3\Math\BigInteger;

/**
 * SSH2 Signature Handler
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class SSH2
{
    /**
     * Loads a signature
     *
     * @param string $sig
     * @return mixed
     */
    public static function load($sig)
    {
        if (!is_string($sig)) {
            return false;
        }

        $result = Strings::unpackSSH2('ss', $sig);
        if ($result === false) {
            return false;
        }
        list($type, $blob) = $result;
        if ($type != 'ssh-dss' || strlen($blob) != 40) {
            return false;
        }

        return [
            'r' => new BigInteger(substr($blob, 0, 20), 256),
            's' => new BigInteger(substr($blob, 20), 256)
        ];
    }

    /**
     * Returns a signature in the appropriate format
     *
     * @param BigInteger $r
     * @param BigInteger $s
     * @return string
     */
    public static function save(BigInteger $r, BigInteger $s)
    {
        if ($r->getLength() > 160 || $s->getLength() > 160) {
            return false;
        }
        return Strings::packSSH2(
            'ss',
            'ssh-dss',
            str_pad($r->toBytes(), 20, "\0", STR_PAD_LEFT) .
            str_pad($s->toBytes(), 20, "\0", STR_PAD_LEFT)
        );
    }
}
<?php

/**
 * DSA Parameters
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2015 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\Crypt\DSA;

use phpseclib3\Crypt\DSA;

/**
 * DSA Parameters
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
final class Parameters extends DSA
{
    /**
     * Returns the parameters
     *
     * @param string $type
     * @param array $options optional
     * @return string
     */
    public function toString($type = 'PKCS1', array $options = [])
    {
        $type = self::validatePlugin('Keys', 'PKCS1', 'saveParameters');

        return $type::saveParameters($this->p, $this->q, $this->g, $options);
    }
}
<?php

/**
 * DSA Private Key
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2015 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\Crypt\DSA;

use phpseclib3\Crypt\Common;
use phpseclib3\Crypt\DSA;
use phpseclib3\Crypt\DSA\Formats\Signature\ASN1 as ASN1Signature;
use phpseclib3\Math\BigInteger;

/**
 * DSA Private Key
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
final class PrivateKey extends DSA implements Common\PrivateKey
{
    use Common\Traits\PasswordProtected;

    /**
     * DSA secret exponent x
     *
     * @var BigInteger
     */
    protected $x;

    /**
     * Returns the public key
     *
     * If you do "openssl rsa -in private.rsa -pubout -outform PEM" you get a PKCS8 formatted key
     * that contains a publicKeyAlgorithm AlgorithmIdentifier and a publicKey BIT STRING.
     * An AlgorithmIdentifier contains an OID and a parameters field. With RSA public keys this
     * parameters field is NULL. With DSA PKCS8 public keys it is not - it contains the p, q and g
     * variables. The publicKey BIT STRING contains, simply, the y variable. This can be verified
     * by getting a DSA PKCS8 public key:
     *
     * "openssl dsa -in private.dsa -pubout -outform PEM"
     *
     * ie. just swap out rsa with dsa in the rsa command above.
     *
     * A PKCS1 public key corresponds to the publicKey portion of the PKCS8 key. In the case of RSA
     * the publicKey portion /is/ the key. In the case of DSA it is not. You cannot verify a signature
     * without the parameters and the PKCS1 DSA public key format does not include the parameters.
     *
     * @see self::getPrivateKey()
     * @return mixed
     */
    public function getPublicKey()
    {
        $type = self::validatePlugin('Keys', 'PKCS8', 'savePublicKey');

        if (!isset($this->y)) {
            $this->y = $this->g->powMod($this->x, $this->p);
        }

        $key = $type::savePublicKey($this->p, $this->q, $this->g, $this->y);

        return DSA::loadFormat('PKCS8', $key)
            ->withHash($this->hash->getHash())
            ->withSignatureFormat($this->shortFormat);
    }

    /**
     * Create a signature
     *
     * @see self::verify()
     * @param string $message
     * @return mixed
     */
    public function sign($message)
    {
        $format = $this->sigFormat;

        if (self::$engines['OpenSSL'] && in_array($this->hash->getHash(), openssl_get_md_methods())) {
            $signature = '';
            $result = openssl_sign($message, $signature, $this->toString('PKCS8'), $this->hash->getHash());

            if ($result) {
                if ($this->shortFormat == 'ASN1') {
                    return $signature;
                }

                $loaded = ASN1Signature::load($signature);
                $r = $loaded['r'];
                $s = $loaded['s'];

                return $format::save($r, $s);
            }
        }

        $h = $this->hash->hash($message);
        $h = $this->bits2int($h);

        while (true) {
            $k = BigInteger::randomRange(self::$one, $this->q->subtract(self::$one));
            $r = $this->g->powMod($k, $this->p);
            list(, $r) = $r->divide($this->q);
            if ($r->equals(self::$zero)) {
                continue;
            }
            $kinv = $k->modInverse($this->q);
            $temp = $h->add($this->x->multiply($r));
            $temp = $kinv->multiply($temp);
            list(, $s) = $temp->divide($this->q);
            if (!$s->equals(self::$zero)) {
                break;
            }
        }

        // the following is an RFC6979 compliant implementation of deterministic DSA
        // it's unused because it's mainly intended for use when a good CSPRNG isn't
        // available. if phpseclib's CSPRNG isn't good then even key generation is
        // suspect
        /*
        $h1 = $this->hash->hash($message);
        $k = $this->computek($h1);
        $r = $this->g->powMod($k, $this->p);
        list(, $r) = $r->divide($this->q);
        $kinv = $k->modInverse($this->q);
        $h1 = $this->bits2int($h1);
        $temp = $h1->add($this->x->multiply($r));
        $temp = $kinv->multiply($temp);
        list(, $s) = $temp->divide($this->q);
        */

        return $format::save($r, $s);
    }

    /**
     * Returns the private key
     *
     * @param string $type
     * @param array $options optional
     * @return string
     */
    public function toString($type, array $options = [])
    {
        $type = self::validatePlugin('Keys', $type, 'savePrivateKey');

        if (!isset($this->y)) {
            $this->y = $this->g->powMod($this->x, $this->p);
        }

        return $type::savePrivateKey($this->p, $this->q, $this->g, $this->y, $this->x, $this->password, $options);
    }
}
<?php

/**
 * DSA Public Key
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2015 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\Crypt\DSA;

use phpseclib3\Crypt\Common;
use phpseclib3\Crypt\DSA;
use phpseclib3\Crypt\DSA\Formats\Signature\ASN1 as ASN1Signature;

/**
 * DSA Public Key
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
final class PublicKey extends DSA implements Common\PublicKey
{
    use Common\Traits\Fingerprint;

    /**
     * Verify a signature
     *
     * @see self::verify()
     * @param string $message
     * @param string $signature
     * @return mixed
     */
    public function verify($message, $signature)
    {
        $format = $this->sigFormat;

        $params = $format::load($signature);
        if ($params === false || count($params) != 2) {
            return false;
        }
        $r = $params['r'];
        $s = $params['s'];

        if (self::$engines['OpenSSL'] && in_array($this->hash->getHash(), openssl_get_md_methods())) {
            $sig = $format != 'ASN1' ? ASN1Signature::save($r, $s) : $signature;

            $result = openssl_verify($message, $sig, $this->toString('PKCS8'), $this->hash->getHash());

            if ($result != -1) {
                return (bool) $result;
            }
        }

        $q_1 = $this->q->subtract(self::$one);
        if (!$r->between(self::$one, $q_1) || !$s->between(self::$one, $q_1)) {
            return false;
        }

        $w = $s->modInverse($this->q);
        $h = $this->hash->hash($message);
        $h = $this->bits2int($h);
        list(, $u1) = $h->multiply($w)->divide($this->q);
        list(, $u2) = $r->multiply($w)->divide($this->q);
        $v1 = $this->g->powMod($u1, $this->p);
        $v2 = $this->y->powMod($u2, $this->p);
        list(, $v) = $v1->multiply($v2)->divide($this->p);
        list(, $v) = $v->divide($this->q);

        return $v->equals($r);
    }

    /**
     * Returns the public key
     *
     * @param string $type
     * @param array $options optional
     * @return string
     */
    public function toString($type, array $options = [])
    {
        $type = self::validatePlugin('Keys', $type, 'savePublicKey');

        return $type::savePublicKey($this->p, $this->q, $this->g, $this->y, $options);
    }
}
<?php

/**
 * Pure-PHP implementation of EC.
 *
 * PHP version 5
 *
 * Here's an example of how to create signatures and verify signatures with this library:
 * <code>
 * <?php
 * include 'vendor/autoload.php';
 *
 * $private = \phpseclib3\Crypt\EC::createKey('secp256k1');
 * $public = $private->getPublicKey();
 *
 * $plaintext = 'terrafrost';
 *
 * $signature = $private->sign($plaintext);
 *
 * echo $public->verify($plaintext, $signature) ? 'verified' : 'unverified';
 * ?>
 * </code>
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2016 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\Crypt;

use phpseclib3\Crypt\Common\AsymmetricKey;
use phpseclib3\Crypt\EC\BaseCurves\Montgomery as MontgomeryCurve;
use phpseclib3\Crypt\EC\BaseCurves\TwistedEdwards as TwistedEdwardsCurve;
use phpseclib3\Crypt\EC\Curves\Curve25519;
use phpseclib3\Crypt\EC\Curves\Ed25519;
use phpseclib3\Crypt\EC\Curves\Ed448;
use phpseclib3\Crypt\EC\Formats\Keys\PKCS1;
use phpseclib3\Crypt\EC\Parameters;
use phpseclib3\Crypt\EC\PrivateKey;
use phpseclib3\Crypt\EC\PublicKey;
use phpseclib3\Exception\UnsupportedAlgorithmException;
use phpseclib3\Exception\UnsupportedCurveException;
use phpseclib3\Exception\UnsupportedOperationException;
use phpseclib3\File\ASN1;
use phpseclib3\File\ASN1\Maps\ECParameters;
use phpseclib3\Math\BigInteger;

/**
 * Pure-PHP implementation of EC.
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class EC extends AsymmetricKey
{
    /**
     * Algorithm Name
     *
     * @var string
     */
    const ALGORITHM = 'EC';

    /**
     * Public Key QA
     *
     * @var object[]
     */
    protected $QA;

    /**
     * Curve
     *
     * @var EC\BaseCurves\Base
     */
    protected $curve;

    /**
     * Signature Format
     *
     * @var string
     */
    protected $format;

    /**
     * Signature Format (Short)
     *
     * @var string
     */
    protected $shortFormat;

    /**
     * Curve Name
     *
     * @var string
     */
    private $curveName;

    /**
     * Curve Order
     *
     * Used for deterministic ECDSA
     *
     * @var BigInteger
     */
    protected $q;

    /**
     * Alias for the private key
     *
     * Used for deterministic ECDSA. AsymmetricKey expects $x. I don't like x because
     * with x you have x * the base point yielding an (x, y)-coordinate that is the
     * public key. But the x is different depending on which side of the equal sign
     * you're on. It's less ambiguous if you do dA * base point = (x, y)-coordinate.
     *
     * @var BigInteger
     */
    protected $x;

    /**
     * Context
     *
     * @var string
     */
    protected $context;

    /**
     * Signature Format
     *
     * @var string
     */
    protected $sigFormat;

    /**
     * Create public / private key pair.
     *
     * @param string $curve
     * @return PrivateKey
     */
    public static function createKey($curve)
    {
        self::initialize_static_variables();

        $class = new \ReflectionClass(static::class);
        if ($class->isFinal()) {
            throw new \RuntimeException('createKey() should not be called from final classes (' . static::class . ')');
        }

        if (!isset(self::$engines['PHP'])) {
            self::useBestEngine();
        }

        $curve = strtolower($curve);
        if (self::$engines['libsodium'] && $curve == 'ed25519' && function_exists('sodium_crypto_sign_keypair')) {
            $kp = sodium_crypto_sign_keypair();

            $privatekey = EC::loadFormat('libsodium', sodium_crypto_sign_secretkey($kp));
            //$publickey = EC::loadFormat('libsodium', sodium_crypto_sign_publickey($kp));

            $privatekey->curveName = 'Ed25519';
            //$publickey->curveName = $curve;

            return $privatekey;
        }

        $privatekey = new PrivateKey();

        $curveName = $curve;
        if (preg_match('#(?:^curve|^ed)\d+$#', $curveName)) {
            $curveName = ucfirst($curveName);
        } elseif (substr($curveName, 0, 10) == 'brainpoolp') {
            $curveName = 'brainpoolP' . substr($curveName, 10);
        }
        $curve = '\phpseclib3\Crypt\EC\Curves\\' . $curveName;

        if (!class_exists($curve)) {
            throw new UnsupportedCurveException('Named Curve of ' . $curveName . ' is not supported');
        }

        $reflect = new \ReflectionClass($curve);
        $curveName = $reflect->isFinal() ?
            $reflect->getParentClass()->getShortName() :
            $reflect->getShortName();

        $curve = new $curve();
        if ($curve instanceof TwistedEdwardsCurve) {
            $arr = $curve->extractSecret(Random::string($curve instanceof Ed448 ? 57 : 32));
            $privatekey->dA = $dA = $arr['dA'];
            $privatekey->secret = $arr['secret'];
        } else {
            $privatekey->dA = $dA = $curve->createRandomMultiplier();
        }
        if ($curve instanceof Curve25519 && self::$engines['libsodium']) {
            //$r = pack('H*', '0900000000000000000000000000000000000000000000000000000000000000');
            //$QA = sodium_crypto_scalarmult($dA->toBytes(), $r);
            $QA = sodium_crypto_box_publickey_from_secretkey($dA->toBytes());
            $privatekey->QA = [$curve->convertInteger(new BigInteger(strrev($QA), 256))];
        } else {
            $privatekey->QA = $curve->multiplyPoint($curve->getBasePoint(), $dA);
        }
        $privatekey->curve = $curve;

        //$publickey = clone $privatekey;
        //unset($publickey->dA);
        //unset($publickey->x);

        $privatekey->curveName = $curveName;
        //$publickey->curveName = $curveName;

        if ($privatekey->curve instanceof TwistedEdwardsCurve) {
            return $privatekey->withHash($curve::HASH);
        }

        return $privatekey;
    }

    /**
     * OnLoad Handler
     *
     * @return bool
     */
    protected static function onLoad(array $components)
    {
        if (!isset(self::$engines['PHP'])) {
            self::useBestEngine();
        }

        if (!isset($components['dA']) && !isset($components['QA'])) {
            $new = new Parameters();
            $new->curve = $components['curve'];
            return $new;
        }

        $new = isset($components['dA']) ?
            new PrivateKey() :
            new PublicKey();
        $new->curve = $components['curve'];
        $new->QA = $components['QA'];

        if (isset($components['dA'])) {
            $new->dA = $components['dA'];
            $new->secret = $components['secret'];
        }

        if ($new->curve instanceof TwistedEdwardsCurve) {
            return $new->withHash($components['curve']::HASH);
        }

        return $new;
    }

    /**
     * Constructor
     *
     * PublicKey and PrivateKey objects can only be created from abstract RSA class
     */
    protected function __construct()
    {
        $this->sigFormat = self::validatePlugin('Signature', 'ASN1');
        $this->shortFormat = 'ASN1';

        parent::__construct();
    }

    /**
     * Returns the curve
     *
     * Returns a string if it's a named curve, an array if not
     *
     * @return string|array
     */
    public function getCurve()
    {
        if ($this->curveName) {
            return $this->curveName;
        }

        if ($this->curve instanceof MontgomeryCurve) {
            $this->curveName = $this->curve instanceof Curve25519 ? 'Curve25519' : 'Curve448';
            return $this->curveName;
        }

        if ($this->curve instanceof TwistedEdwardsCurve) {
            $this->curveName = $this->curve instanceof Ed25519 ? 'Ed25519' : 'Ed448';
            return $this->curveName;
        }

        $params = $this->getParameters()->toString('PKCS8', ['namedCurve' => true]);
        $decoded = ASN1::extractBER($params);
        $decoded = ASN1::decodeBER($decoded);
        $decoded = ASN1::asn1map($decoded[0], ECParameters::MAP);
        if (isset($decoded['namedCurve'])) {
            $this->curveName = $decoded['namedCurve'];
            return $decoded['namedCurve'];
        }

        if (!$namedCurves) {
            PKCS1::useSpecifiedCurve();
        }

        return $decoded;
    }

    /**
     * Returns the key size
     *
     * Quoting https://tools.ietf.org/html/rfc5656#section-2,
     *
     * "The size of a set of elliptic curve domain parameters on a prime
     *  curve is defined as the number of bits in the binary representation
     *  of the field order, commonly denoted by p.  Size on a
     *  characteristic-2 curve is defined as the number of bits in the binary
     *  representation of the field, commonly denoted by m.  A set of
     *  elliptic curve domain parameters defines a group of order n generated
     *  by a base point P"
     *
     * @return int
     */
    public function getLength()
    {
        return $this->curve->getLength();
    }

    /**
     * Returns the current engine being used
     *
     * @see self::useInternalEngine()
     * @see self::useBestEngine()
     * @return string
     */
    public function getEngine()
    {
        if (!isset(self::$engines['PHP'])) {
            self::useBestEngine();
        }
        if ($this->curve instanceof TwistedEdwardsCurve) {
            return $this->curve instanceof Ed25519 && self::$engines['libsodium'] && !isset($this->context) ?
                'libsodium' : 'PHP';
        }

        return self::$engines['OpenSSL'] && in_array($this->hash->getHash(), openssl_get_md_methods()) ?
            'OpenSSL' : 'PHP';
    }

    /**
     * Returns the public key coordinates as a string
     *
     * Used by ECDH
     *
     * @return string
     */
    public function getEncodedCoordinates()
    {
        if ($this->curve instanceof MontgomeryCurve) {
            return strrev($this->QA[0]->toBytes(true));
        }
        if ($this->curve instanceof TwistedEdwardsCurve) {
            return $this->curve->encodePoint($this->QA);
        }
        return "\4" . $this->QA[0]->toBytes(true) . $this->QA[1]->toBytes(true);
    }

    /**
     * Returns the parameters
     *
     * @see self::getPublicKey()
     * @param string $type optional
     * @return mixed
     */
    public function getParameters($type = 'PKCS1')
    {
        $type = self::validatePlugin('Keys', $type, 'saveParameters');

        $key = $type::saveParameters($this->curve);

        return EC::load($key, 'PKCS1')
            ->withHash($this->hash->getHash())
            ->withSignatureFormat($this->shortFormat);
    }

    /**
     * Determines the signature padding mode
     *
     * Valid values are: ASN1, SSH2, Raw
     *
     * @param string $format
     */
    public function withSignatureFormat($format)
    {
        if ($this->curve instanceof MontgomeryCurve) {
            throw new UnsupportedOperationException('Montgomery Curves cannot be used to create signatures');
        }

        $new = clone $this;
        $new->shortFormat = $format;
        $new->sigFormat = self::validatePlugin('Signature', $format);
        return $new;
    }

    /**
     * Returns the signature format currently being used
     *
     */
    public function getSignatureFormat()
    {
        return $this->shortFormat;
    }

    /**
     * Sets the context
     *
     * Used by Ed25519 / Ed448.
     *
     * @see self::sign()
     * @see self::verify()
     * @param string $context optional
     */
    public function withContext($context = null)
    {
        if (!$this->curve instanceof TwistedEdwardsCurve) {
            throw new UnsupportedCurveException('Only Ed25519 and Ed448 support contexts');
        }

        $new = clone $this;
        if (!isset($context)) {
            $new->context = null;
            return $new;
        }
        if (!is_string($context)) {
            throw new \InvalidArgumentException('setContext expects a string');
        }
        if (strlen($context) > 255) {
            throw new \LengthException('The context is supposed to be, at most, 255 bytes long');
        }
        $new->context = $context;
        return $new;
    }

    /**
     * Returns the signature format currently being used
     *
     */
    public function getContext()
    {
        return $this->context;
    }

    /**
     * Determines which hashing function should be used
     *
     * @param string $hash
     */
    public function withHash($hash)
    {
        if ($this->curve instanceof MontgomeryCurve) {
            throw new UnsupportedOperationException('Montgomery Curves cannot be used to create signatures');
        }
        if ($this->curve instanceof Ed25519 && $hash != 'sha512') {
            throw new UnsupportedAlgorithmException('Ed25519 only supports sha512 as a hash');
        }
        if ($this->curve instanceof Ed448 && $hash != 'shake256-912') {
            throw new UnsupportedAlgorithmException('Ed448 only supports shake256 with a length of 114 bytes');
        }

        return parent::withHash($hash);
    }

    /**
     * __toString() magic method
     *
     * @return string
     */
    public function __toString()
    {
        if ($this->curve instanceof MontgomeryCurve) {
            return '';
        }

        return parent::__toString();
    }
}
<?php

/**
 * Curve methods common to all curves
 *
 * PHP version 5 and 7
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2017 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://pear.php.net/package/Math_BigInteger
 */

namespace phpseclib3\Crypt\EC\BaseCurves;

use phpseclib3\Math\BigInteger;

/**
 * Base
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class Base
{
    /**
     * The Order
     *
     * @var BigInteger
     */
    protected $order;

    /**
     * Finite Field Integer factory
     *
     * @var FiniteField\Integer
     */
    protected $factory;

    /**
     * Returns a random integer
     *
     * @return object
     */
    public function randomInteger()
    {
        return $this->factory->randomInteger();
    }

    /**
     * Converts a BigInteger to a FiniteField\Integer integer
     *
     * @return object
     */
    public function convertInteger(BigInteger $x)
    {
        return $this->factory->newInteger($x);
    }

    /**
     * Returns the length, in bytes, of the modulo
     *
     * @return integer
     */
    public function getLengthInBytes()
    {
        return $this->factory->getLengthInBytes();
    }

    /**
     * Returns the length, in bits, of the modulo
     *
     * @return integer
     */
    public function getLength()
    {
        return $this->factory->getLength();
    }

    /**
     * Multiply a point on the curve by a scalar
     *
     * Uses the montgomery ladder technique as described here:
     *
     * https://en.wikipedia.org/wiki/Elliptic_curve_point_multiplication#Montgomery_ladder
     * https://github.com/phpecc/phpecc/issues/16#issuecomment-59176772
     *
     * @return array
     */
    public function multiplyPoint(array $p, BigInteger $d)
    {
        $alreadyInternal = isset($p[2]);
        $r = $alreadyInternal ?
            [[], $p] :
            [[], $this->convertToInternal($p)];

        $d = $d->toBits();
        for ($i = 0; $i < strlen($d); $i++) {
            $d_i = (int) $d[$i];
            $r[1 - $d_i] = $this->addPoint($r[0], $r[1]);
            $r[$d_i] = $this->doublePoint($r[$d_i]);
        }

        return $alreadyInternal ? $r[0] : $this->convertToAffine($r[0]);
    }

    /**
     * Creates a random scalar multiplier
     *
     * @return BigInteger
     */
    public function createRandomMultiplier()
    {
        static $one;
        if (!isset($one)) {
            $one = new BigInteger(1);
        }

        return BigInteger::randomRange($one, $this->order->subtract($one));
    }

    /**
     * Performs range check
     */
    public function rangeCheck(BigInteger $x)
    {
        static $zero;
        if (!isset($zero)) {
            $zero = new BigInteger();
        }

        if (!isset($this->order)) {
            throw new \RuntimeException('setOrder needs to be called before this method');
        }
        if ($x->compare($this->order) > 0 || $x->compare($zero) <= 0) {
            throw new \RangeException('x must be between 1 and the order of the curve');
        }
    }

    /**
     * Sets the Order
     */
    public function setOrder(BigInteger $order)
    {
        $this->order = $order;
    }

    /**
     * Returns the Order
     *
     * @return BigInteger
     */
    public function getOrder()
    {
        return $this->order;
    }

    /**
     * Use a custom defined modular reduction function
     *
     * @return object
     */
    public function setReduction(callable $func)
    {
        $this->factory->setReduction($func);
    }

    /**
     * Returns the affine point
     *
     * @return object[]
     */
    public function convertToAffine(array $p)
    {
        return $p;
    }

    /**
     * Converts an affine point to a jacobian coordinate
     *
     * @return object[]
     */
    public function convertToInternal(array $p)
    {
        return $p;
    }

    /**
     * Negates a point
     *
     * @return object[]
     */
    public function negatePoint(array $p)
    {
        $temp = [
            $p[0],
            $p[1]->negate()
        ];
        if (isset($p[2])) {
            $temp[] = $p[2];
        }
        return $temp;
    }

    /**
     * Multiply and Add Points
     *
     * @return int[]
     */
    public function multiplyAddPoints(array $points, array $scalars)
    {
        $p1 = $this->convertToInternal($points[0]);
        $p2 = $this->convertToInternal($points[1]);
        $p1 = $this->multiplyPoint($p1, $scalars[0]);
        $p2 = $this->multiplyPoint($p2, $scalars[1]);
        $r = $this->addPoint($p1, $p2);
        return $this->convertToAffine($r);
    }
}
<?php

/**
 * Curves over y^2 + x*y = x^3 + a*x^2 + b
 *
 * These are curves used in SEC 2 over prime fields: http://www.secg.org/SEC2-Ver-1.0.pdf
 * The curve is a weierstrass curve with a[3] and a[2] set to 0.
 *
 * Uses Jacobian Coordinates for speed if able:
 *
 * https://en.wikipedia.org/wiki/Jacobian_curve
 * https://en.wikibooks.org/wiki/Cryptography/Prime_Curve/Jacobian_Coordinates
 *
 * PHP version 5 and 7
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2017 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://pear.php.net/package/Math_BigInteger
 */

namespace phpseclib3\Crypt\EC\BaseCurves;

use phpseclib3\Math\BigInteger;
use phpseclib3\Math\BinaryField;
use phpseclib3\Math\BinaryField\Integer as BinaryInteger;

/**
 * Curves over y^2 + x*y = x^3 + a*x^2 + b
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
class Binary extends Base
{
    /**
     * Binary Field Integer factory
     *
     * @var BinaryField
     */
    protected $factory;

    /**
     * Cofficient for x^1
     *
     * @var object
     */
    protected $a;

    /**
     * Cofficient for x^0
     *
     * @var object
     */
    protected $b;

    /**
     * Base Point
     *
     * @var object
     */
    protected $p;

    /**
     * The number one over the specified finite field
     *
     * @var object
     */
    protected $one;

    /**
     * The modulo
     *
     * @var BigInteger
     */
    protected $modulo;

    /**
     * The Order
     *
     * @var BigInteger
     */
    protected $order;

    /**
     * Sets the modulo
     */
    public function setModulo(...$modulo)
    {
        $this->modulo = $modulo;
        $this->factory = new BinaryField(...$modulo);

        $this->one = $this->factory->newInteger("\1");
    }

    /**
     * Set coefficients a and b
     *
     * @param string $a
     * @param string $b
     */
    public function setCoefficients($a, $b)
    {
        if (!isset($this->factory)) {
            throw new \RuntimeException('setModulo needs to be called before this method');
        }
        $this->a = $this->factory->newInteger(pack('H*', $a));
        $this->b = $this->factory->newInteger(pack('H*', $b));
    }

    /**
     * Set x and y coordinates for the base point
     *
     * @param string|BinaryInteger $x
     * @param string|BinaryInteger $y
     */
    public function setBasePoint($x, $y)
    {
        switch (true) {
            case !is_string($x) && !$x instanceof BinaryInteger:
                throw new \UnexpectedValueException('Argument 1 passed to Binary::setBasePoint() must be a string or an instance of BinaryField\Integer');
            case !is_string($y) && !$y instanceof BinaryInteger:
                throw new \UnexpectedValueException('Argument 2 passed to Binary::setBasePoint() must be a string or an instance of BinaryField\Integer');
        }
        if (!isset($this->factory)) {
            throw new \RuntimeException('setModulo needs to be called before this method');
        }
        $this->p = [
            is_string($x) ? $this->factory->newInteger(pack('H*', $x)) : $x,
            is_string($y) ? $this->factory->newInteger(pack('H*', $y)) : $y
        ];
    }

    /**
     * Retrieve the base point as an array
     *
     * @return array
     */
    public function getBasePoint()
    {
        if (!isset($this->factory)) {
            throw new \RuntimeException('setModulo needs to be called before this method');
        }
        /*
        if (!isset($this->p)) {
            throw new \RuntimeException('setBasePoint needs to be called before this method');
        }
        */
        return $this->p;
    }

    /**
     * Adds two points on the curve
     *
     * @return FiniteField[]
     */
    public function addPoint(array $p, array $q)
    {
        if (!isset($this->factory)) {
            throw new \RuntimeException('setModulo needs to be called before this method');
        }

        if (!count($p) || !count($q)) {
            if (count($q)) {
                return $q;
            }
            if (count($p)) {
                return $p;
            }
            return [];
        }

        if (!isset($p[2]) || !isset($q[2])) {
            throw new \RuntimeException('Affine coordinates need to be manually converted to "Jacobi" coordinates or vice versa');
        }

        if ($p[0]->equals($q[0])) {
            return !$p[1]->equals($q[1]) ? [] : $this->doublePoint($p);
        }

        // formulas from http://hyperelliptic.org/EFD/g12o/auto-shortw-jacobian.html

        list($x1, $y1, $z1) = $p;
        list($x2, $y2, $z2) = $q;

        $o1 = $z1->multiply($z1);
        $b = $x2->multiply($o1);

        if ($z2->equals($this->one)) {
            $d = $y2->multiply($o1)->multiply($z1);
            $e = $x1->add($b);
            $f = $y1->add($d);
            $z3 = $e->multiply($z1);
            $h = $f->multiply($x2)->add($z3->multiply($y2));
            $i = $f->add($z3);
            $g = $z3->multiply($z3);
            $p1 = $this->a->multiply($g);
            $p2 = $f->multiply($i);
            $p3 = $e->multiply($e)->multiply($e);
            $x3 = $p1->add($p2)->add($p3);
            $y3 = $i->multiply($x3)->add($g->multiply($h));

            return [$x3, $y3, $z3];
        }

        $o2 = $z2->multiply($z2);
        $a = $x1->multiply($o2);
        $c = $y1->multiply($o2)->multiply($z2);
        $d = $y2->multiply($o1)->multiply($z1);
        $e = $a->add($b);
        $f = $c->add($d);
        $g = $e->multiply($z1);
        $h = $f->multiply($x2)->add($g->multiply($y2));
        $z3 = $g->multiply($z2);
        $i = $f->add($z3);
        $p1 = $this->a->multiply($z3->multiply($z3));
        $p2 = $f->multiply($i);
        $p3 = $e->multiply($e)->multiply($e);
        $x3 = $p1->add($p2)->add($p3);
        $y3 = $i->multiply($x3)->add($g->multiply($g)->multiply($h));

        return [$x3, $y3, $z3];
    }

    /**
     * Doubles a point on a curve
     *
     * @return FiniteField[]
     */
    public function doublePoint(array $p)
    {
        if (!isset($this->factory)) {
            throw new \RuntimeException('setModulo needs to be called before this method');
        }

        if (!count($p)) {
            return [];
        }

        if (!isset($p[2])) {
            throw new \RuntimeException('Affine coordinates need to be manually converted to "Jacobi" coordinates or vice versa');
        }

        // formulas from http://hyperelliptic.org/EFD/g12o/auto-shortw-jacobian.html

        list($x1, $y1, $z1) = $p;

        $a = $x1->multiply($x1);
        $b = $a->multiply($a);

        if ($z1->equals($this->one)) {
            $x3 = $b->add($this->b);
            $z3 = clone $x1;
            $p1 = $a->add($y1)->add($z3)->multiply($this->b);
            $p2 = $a->add($y1)->multiply($b);
            $y3 = $p1->add($p2);

            return [$x3, $y3, $z3];
        }

        $c = $z1->multiply($z1);
        $d = $c->multiply($c);
        $x3 = $b->add($this->b->multiply($d->multiply($d)));
        $z3 = $x1->multiply($c);
        $p1 = $b->multiply($z3);
        $p2 = $a->add($y1->multiply($z1))->add($z3)->multiply($x3);
        $y3 = $p1->add($p2);

        return [$x3, $y3, $z3];
    }

    /**
     * Returns the X coordinate and the derived Y coordinate
     *
     * Not supported because it is covered by patents.
     * Quoting https://www.openssl.org/docs/man1.1.0/apps/ecparam.html ,
     *
     * "Due to patent issues the compressed option is disabled by default for binary curves
     *  and can be enabled by defining the preprocessor macro OPENSSL_EC_BIN_PT_COMP at
     *  compile time."
     *
     * @return array
     */
    public function derivePoint($m)
    {
        throw new \RuntimeException('Point compression on binary finite field elliptic curves is not supported');
    }

    /**
     * Tests whether or not the x / y values satisfy the equation
     *
     * @return boolean
     */
    public function verifyPoint(array $p)
    {
        list($x, $y) = $p;
        $lhs = $y->multiply($y);
        $lhs = $lhs->add($x->multiply($y));
        $x2 = $x->multiply($x);
        $x3 = $x2->multiply($x);
        $rhs = $x3->add($this->a->multiply($x2))->add($this->b);

        return $lhs->equals($rhs);
    }

    /**
     * Returns the modulo
     *
     * @return BigInteger
     */
    public function getModulo()
    {
        return $this->modulo;
    }

    /**
     * Returns the a coefficient
     *
     * @return \phpseclib3\Math\PrimeField\Integer
     */
    public function getA()
    {
        return $this->a;
    }

    /**
     * Returns the a coefficient
     *
     * @return \phpseclib3\Math\PrimeField\Integer
     */
    public function getB()
    {
        return $this->b;
    }

    /**
     * Returns the affine point
     *
     * A Jacobian Coordinate is of the form (x, y, z).
     * To convert a Jacobian Coordinate to an Affine Point
     * you do (x / z^2, y / z^3)
     *
     * @return \phpseclib3\Math\PrimeField\Integer[]
     */
    public function convertToAffine(array $p)
    {
        if (!isset($p[2])) {
            return $p;
        }
        list($x, $y, $z) = $p;
        $z = $this->one->divide($z);
        $z2 = $z->multiply($z);
        return [
            $x->multiply($z2),
            $y->multiply($z2)->multiply($z)
        ];
    }

    /**
     * Converts an affine point to a jacobian coordinate
     *
     * @return \phpseclib3\Math\PrimeField\Integer[]
     */
    public function convertToInternal(array $p)
    {
        if (isset($p[2])) {
            return $p;
        }

        $p[2] = clone $this->one;
        $p['fresh'] = true;
        return $p;
    }
}
<?php

/**
 * Generalized Koblitz Curves over y^2 = x^3 + b.
 *
 * According to http://www.secg.org/SEC2-Ver-1.0.pdf Koblitz curves are over the GF(2**m)
 * finite field. Both the $a$ and $b$ coefficients are either 0 or 1. However, SEC2
 * generalizes the definition to include curves over GF(P) "which possess an efficiently
 * computable endomorphism".
 *
 * For these generalized Koblitz curves $b$ doesn't have to be 0 or 1. Whether or not $a$
 * has any restrictions on it is unclear, however, for all the GF(P) Koblitz curves defined
 * in SEC2 v1.0 $a$ is $0$ so all of the methods defined herein will assume that it is.
 *
 * I suppose we could rename the $b$ coefficient to $a$, however, the documentation refers
 * to $b$ so we'll just keep it.
 *
 * If a later version of SEC2 comes out wherein some $a$ values are non-zero we can create a
 * new method for those. eg. KoblitzA1Prime.php or something.
 *
 * PHP version 5 and 7
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2017 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://pear.php.net/package/Math_BigInteger
 */

namespace phpseclib3\Crypt\EC\BaseCurves;

use phpseclib3\Math\BigInteger;
use phpseclib3\Math\PrimeField;

/**
 * Curves over y^2 = x^3 + b
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
class KoblitzPrime extends Prime
{
    /**
     * Basis
     *
     * @var list<array{a: BigInteger, b: BigInteger}>
     */
    protected $basis;

    /**
     * Beta
     *
     * @var PrimeField\Integer
     */
    protected $beta;

    // don't overwrite setCoefficients() with one that only accepts one parameter so that
    // one might be able to switch between KoblitzPrime and Prime more easily (for benchmarking
    // purposes).

    /**
     * Multiply and Add Points
     *
     * Uses a efficiently computable endomorphism to achieve a slight speedup
     *
     * Adapted from:
     * https://github.com/indutny/elliptic/blob/725bd91/lib/elliptic/curve/short.js#L219
     *
     * @return int[]
     */
    public function multiplyAddPoints(array $points, array $scalars)
    {
        static $zero, $one, $two;
        if (!isset($two)) {
            $two = new BigInteger(2);
            $one = new BigInteger(1);
        }

        if (!isset($this->beta)) {
            // get roots
            $inv = $this->one->divide($this->two)->negate();
            $s = $this->three->negate()->squareRoot()->multiply($inv);
            $betas = [
                $inv->add($s),
                $inv->subtract($s)
            ];
            $this->beta = $betas[0]->compare($betas[1]) < 0 ? $betas[0] : $betas[1];
            //echo strtoupper($this->beta->toHex(true)) . "\n"; exit;
        }

        if (!isset($this->basis)) {
            $factory = new PrimeField($this->order);
            $tempOne = $factory->newInteger($one);
            $tempTwo = $factory->newInteger($two);
            $tempThree = $factory->newInteger(new BigInteger(3));

            $inv = $tempOne->divide($tempTwo)->negate();
            $s = $tempThree->negate()->squareRoot()->multiply($inv);

            $lambdas = [
                $inv->add($s),
                $inv->subtract($s)
            ];

            $lhs = $this->multiplyPoint($this->p, $lambdas[0])[0];
            $rhs = $this->p[0]->multiply($this->beta);
            $lambda = $lhs->equals($rhs) ? $lambdas[0] : $lambdas[1];

            $this->basis = static::extendedGCD($lambda->toBigInteger(), $this->order);
            ///*
            foreach ($this->basis as $basis) {
                echo strtoupper($basis['a']->toHex(true)) . "\n";
                echo strtoupper($basis['b']->toHex(true)) . "\n\n";
            }
            exit;
            //*/
        }

        $npoints = $nscalars = [];
        for ($i = 0; $i < count($points); $i++) {
            $p = $points[$i];
            $k = $scalars[$i]->toBigInteger();

            // begin split
            list($v1, $v2) = $this->basis;

            $c1 = $v2['b']->multiply($k);
            list($c1, $r) = $c1->divide($this->order);
            if ($this->order->compare($r->multiply($two)) <= 0) {
                $c1 = $c1->add($one);
            }

            $c2 = $v1['b']->negate()->multiply($k);
            list($c2, $r) = $c2->divide($this->order);
            if ($this->order->compare($r->multiply($two)) <= 0) {
                $c2 = $c2->add($one);
            }

            $p1 = $c1->multiply($v1['a']);
            $p2 = $c2->multiply($v2['a']);
            $q1 = $c1->multiply($v1['b']);
            $q2 = $c2->multiply($v2['b']);

            $k1 = $k->subtract($p1)->subtract($p2);
            $k2 = $q1->add($q2)->negate();
            // end split

            $beta = [
                $p[0]->multiply($this->beta),
                $p[1],
                clone $this->one
            ];

            if (isset($p['naf'])) {
                $beta['naf'] = array_map(function ($p) {
                    return [
                        $p[0]->multiply($this->beta),
                        $p[1],
                        clone $this->one
                    ];
                }, $p['naf']);
                $beta['nafwidth'] = $p['nafwidth'];
            }

            if ($k1->isNegative()) {
                $k1 = $k1->negate();
                $p = $this->negatePoint($p);
            }

            if ($k2->isNegative()) {
                $k2 = $k2->negate();
                $beta = $this->negatePoint($beta);
            }

            $pos = 2 * $i;
            $npoints[$pos] = $p;
            $nscalars[$pos] = $this->factory->newInteger($k1);

            $pos++;
            $npoints[$pos] = $beta;
            $nscalars[$pos] = $this->factory->newInteger($k2);
        }

        return parent::multiplyAddPoints($npoints, $nscalars);
    }

    /**
     * Returns the numerator and denominator of the slope
     *
     * @return FiniteField[]
     */
    protected function doublePointHelper(array $p)
    {
        $numerator = $this->three->multiply($p[0])->multiply($p[0]);
        $denominator = $this->two->multiply($p[1]);
        return [$numerator, $denominator];
    }

    /**
     * Doubles a jacobian coordinate on the curve
     *
     * See http://hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#doubling-dbl-2009-l
     *
     * @return FiniteField[]
     */
    protected function jacobianDoublePoint(array $p)
    {
        list($x1, $y1, $z1) = $p;
        $a = $x1->multiply($x1);
        $b = $y1->multiply($y1);
        $c = $b->multiply($b);
        $d = $x1->add($b);
        $d = $d->multiply($d)->subtract($a)->subtract($c)->multiply($this->two);
        $e = $this->three->multiply($a);
        $f = $e->multiply($e);
        $x3 = $f->subtract($this->two->multiply($d));
        $y3 = $e->multiply($d->subtract($x3))->subtract(
            $this->eight->multiply($c)
        );
        $z3 = $this->two->multiply($y1)->multiply($z1);
        return [$x3, $y3, $z3];
    }

    /**
     * Doubles a "fresh" jacobian coordinate on the curve
     *
     * See http://hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#doubling-mdbl-2007-bl
     *
     * @return FiniteField[]
     */
    protected function jacobianDoublePointMixed(array $p)
    {
        list($x1, $y1) = $p;
        $xx = $x1->multiply($x1);
        $yy = $y1->multiply($y1);
        $yyyy = $yy->multiply($yy);
        $s = $x1->add($yy);
        $s = $s->multiply($s)->subtract($xx)->subtract($yyyy)->multiply($this->two);
        $m = $this->three->multiply($xx);
        $t = $m->multiply($m)->subtract($this->two->multiply($s));
        $x3 = $t;
        $y3 = $s->subtract($t);
        $y3 = $m->multiply($y3)->subtract($this->eight->multiply($yyyy));
        $z3 = $this->two->multiply($y1);
        return [$x3, $y3, $z3];
    }

    /**
     * Tests whether or not the x / y values satisfy the equation
     *
     * @return boolean
     */
    public function verifyPoint(array $p)
    {
        list($x, $y) = $p;
        $lhs = $y->multiply($y);
        $temp = $x->multiply($x)->multiply($x);
        $rhs = $temp->add($this->b);

        return $lhs->equals($rhs);
    }

    /**
     * Calculates the parameters needed from the Euclidean algorithm as discussed at
     * http://diamond.boisestate.edu/~liljanab/MATH308/GuideToECC.pdf#page=148
     *
     * @param BigInteger $u
     * @param BigInteger $v
     * @return BigInteger[]
     */
    protected static function extendedGCD(BigInteger $u, BigInteger $v)
    {
        $one = new BigInteger(1);
        $zero = new BigInteger();

        $a = clone $one;
        $b = clone $zero;
        $c = clone $zero;
        $d = clone $one;

        $stop = $v->bitwise_rightShift($v->getLength() >> 1);

        $a1 = clone $zero;
        $b1 = clone $zero;
        $a2 = clone $zero;
        $b2 = clone $zero;

        $postGreatestIndex = 0;

        while (!$v->equals($zero)) {
            list($q) = $u->divide($v);

            $temp = $u;
            $u = $v;
            $v = $temp->subtract($v->multiply($q));

            $temp = $a;
            $a = $c;
            $c = $temp->subtract($a->multiply($q));

            $temp = $b;
            $b = $d;
            $d = $temp->subtract($b->multiply($q));

            if ($v->compare($stop) > 0) {
                $a0 = $v;
                $b0 = $c;
            } else {
                $postGreatestIndex++;
            }

            if ($postGreatestIndex == 1) {
                $a1 = $v;
                $b1 = $c->negate();
            }

            if ($postGreatestIndex == 2) {
                $rhs = $a0->multiply($a0)->add($b0->multiply($b0));
                $lhs = $v->multiply($v)->add($b->multiply($b));
                if ($lhs->compare($rhs) <= 0) {
                    $a2 = $a0;
                    $b2 = $b0->negate();
                } else {
                    $a2 = $v;
                    $b2 = $c->negate();
                }

                break;
            }
        }

        return [
            ['a' => $a1, 'b' => $b1],
            ['a' => $a2, 'b' => $b2]
        ];
    }
}
<?php

/**
 * Curves over y^2 = x^3 + a*x + x
 *
 * Technically, a Montgomery curve has a coefficient for y^2 but for Curve25519 and Curve448 that
 * coefficient is 1.
 *
 * Curve25519 and Curve448 do not make use of the y coordinate, which makes it unsuitable for use
 * with ECDSA / EdDSA. A few other differences between Curve25519 and Ed25519 are discussed at
 * https://crypto.stackexchange.com/a/43058/4520
 *
 * More info:
 *
 * https://en.wikipedia.org/wiki/Montgomery_curve
 *
 * PHP version 5 and 7
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2019 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://pear.php.net/package/Math_BigInteger
 */

namespace phpseclib3\Crypt\EC\BaseCurves;

use phpseclib3\Crypt\EC\Curves\Curve25519;
use phpseclib3\Math\BigInteger;
use phpseclib3\Math\PrimeField;
use phpseclib3\Math\PrimeField\Integer as PrimeInteger;

/**
 * Curves over y^2 = x^3 + a*x + x
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
class Montgomery extends Base
{
    /**
     * Prime Field Integer factory
     *
     * @var PrimeField
     */
    protected $factory;

    /**
     * Cofficient for x
     *
     * @var object
     */
    protected $a;

    /**
     * Constant used for point doubling
     *
     * @var object
     */
    protected $a24;

    /**
     * The Number Zero
     *
     * @var object
     */
    protected $zero;

    /**
     * The Number One
     *
     * @var object
     */
    protected $one;

    /**
     * Base Point
     *
     * @var object
     */
    protected $p;

    /**
     * The modulo
     *
     * @var BigInteger
     */
    protected $modulo;

    /**
     * The Order
     *
     * @var BigInteger
     */
    protected $order;

    /**
     * Sets the modulo
     */
    public function setModulo(BigInteger $modulo)
    {
        $this->modulo = $modulo;
        $this->factory = new PrimeField($modulo);
        $this->zero = $this->factory->newInteger(new BigInteger());
        $this->one = $this->factory->newInteger(new BigInteger(1));
    }

    /**
     * Set coefficients a
     */
    public function setCoefficients(BigInteger $a)
    {
        if (!isset($this->factory)) {
            throw new \RuntimeException('setModulo needs to be called before this method');
        }
        $this->a = $this->factory->newInteger($a);
        $two = $this->factory->newInteger(new BigInteger(2));
        $four = $this->factory->newInteger(new BigInteger(4));
        $this->a24 = $this->a->subtract($two)->divide($four);
    }

    /**
     * Set x and y coordinates for the base point
     *
     * @param BigInteger|PrimeInteger $x
     * @param BigInteger|PrimeInteger $y
     * @return PrimeInteger[]
     */
    public function setBasePoint($x, $y)
    {
        switch (true) {
            case !$x instanceof BigInteger && !$x instanceof PrimeInteger:
                throw new \UnexpectedValueException('Argument 1 passed to Prime::setBasePoint() must be an instance of either BigInteger or PrimeField\Integer');
            case !$y instanceof BigInteger && !$y instanceof PrimeInteger:
                throw new \UnexpectedValueException('Argument 2 passed to Prime::setBasePoint() must be an instance of either BigInteger or PrimeField\Integer');
        }
        if (!isset($this->factory)) {
            throw new \RuntimeException('setModulo needs to be called before this method');
        }
        $this->p = [
            $x instanceof BigInteger ? $this->factory->newInteger($x) : $x,
            $y instanceof BigInteger ? $this->factory->newInteger($y) : $y
        ];
    }

    /**
     * Retrieve the base point as an array
     *
     * @return array
     */
    public function getBasePoint()
    {
        if (!isset($this->factory)) {
            throw new \RuntimeException('setModulo needs to be called before this method');
        }
        /*
        if (!isset($this->p)) {
            throw new \RuntimeException('setBasePoint needs to be called before this method');
        }
        */
        return $this->p;
    }

    /**
     * Doubles and adds a point on a curve
     *
     * See https://tools.ietf.org/html/draft-ietf-tls-curve25519-01#appendix-A.1.3
     *
     * @return FiniteField[][]
     */
    private function doubleAndAddPoint(array $p, array $q, PrimeInteger $x1)
    {
        if (!isset($this->factory)) {
            throw new \RuntimeException('setModulo needs to be called before this method');
        }

        if (!count($p) || !count($q)) {
            return [];
        }

        if (!isset($p[1])) {
            throw new \RuntimeException('Affine coordinates need to be manually converted to XZ coordinates');
        }

        list($x2, $z2) = $p;
        list($x3, $z3) = $q;

        $a = $x2->add($z2);
        $aa = $a->multiply($a);
        $b = $x2->subtract($z2);
        $bb = $b->multiply($b);
        $e = $aa->subtract($bb);
        $c = $x3->add($z3);
        $d = $x3->subtract($z3);
        $da = $d->multiply($a);
        $cb = $c->multiply($b);
        $temp = $da->add($cb);
        $x5 = $temp->multiply($temp);
        $temp = $da->subtract($cb);
        $z5 = $x1->multiply($temp->multiply($temp));
        $x4 = $aa->multiply($bb);
        $temp = static::class == Curve25519::class ? $bb : $aa;
        $z4 = $e->multiply($temp->add($this->a24->multiply($e)));

        return [
            [$x4, $z4],
            [$x5, $z5]
        ];
    }

    /**
     * Multiply a point on the curve by a scalar
     *
     * Uses the montgomery ladder technique as described here:
     *
     * https://en.wikipedia.org/wiki/Elliptic_curve_point_multiplication#Montgomery_ladder
     * https://github.com/phpecc/phpecc/issues/16#issuecomment-59176772
     *
     * @return array
     */
    public function multiplyPoint(array $p, BigInteger $d)
    {
        $p1 = [$this->one, $this->zero];
        $alreadyInternal = isset($p[1]);
        $p2 = $this->convertToInternal($p);
        $x = $p[0];

        $b = $d->toBits();
        $b = str_pad($b, 256, '0', STR_PAD_LEFT);
        for ($i = 0; $i < strlen($b); $i++) {
            $b_i = (int) $b[$i];
            if ($b_i) {
                list($p2, $p1) = $this->doubleAndAddPoint($p2, $p1, $x);
            } else {
                list($p1, $p2) = $this->doubleAndAddPoint($p1, $p2, $x);
            }
        }

        return $alreadyInternal ? $p1 : $this->convertToAffine($p1);
    }

    /**
     * Converts an affine point to an XZ coordinate
     *
     * From https://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html
     *
     * XZ coordinates represent x y as X Z satsfying the following equations:
     *
     *   x=X/Z
     *
     * @return PrimeInteger[]
     */
    public function convertToInternal(array $p)
    {
        if (empty($p)) {
            return [clone $this->zero, clone $this->one];
        }

        if (isset($p[1])) {
            return $p;
        }

        $p[1] = clone $this->one;

        return $p;
    }

    /**
     * Returns the affine point
     *
     * @return PrimeInteger[]
     */
    public function convertToAffine(array $p)
    {
        if (!isset($p[1])) {
            return $p;
        }
        list($x, $z) = $p;
        return [$x->divide($z)];
    }
}
<?php

/**
 * Curves over y^2 = x^3 + a*x + b
 *
 * These are curves used in SEC 2 over prime fields: http://www.secg.org/SEC2-Ver-1.0.pdf
 * The curve is a weierstrass curve with a[1], a[3] and a[2] set to 0.
 *
 * Uses Jacobian Coordinates for speed if able:
 *
 * https://en.wikipedia.org/wiki/Jacobian_curve
 * https://en.wikibooks.org/wiki/Cryptography/Prime_Curve/Jacobian_Coordinates
 *
 * PHP version 5 and 7
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2017 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://pear.php.net/package/Math_BigInteger
 */

namespace phpseclib3\Crypt\EC\BaseCurves;

use phpseclib3\Common\Functions\Strings;
use phpseclib3\Math\BigInteger;
use phpseclib3\Math\Common\FiniteField\Integer;
use phpseclib3\Math\PrimeField;
use phpseclib3\Math\PrimeField\Integer as PrimeInteger;

/**
 * Curves over y^2 = x^3 + a*x + b
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
class Prime extends Base
{
    /**
     * Prime Field Integer factory
     *
     * @var \phpseclib3\Math\PrimeFields
     */
    protected $factory;

    /**
     * Cofficient for x^1
     *
     * @var object
     */
    protected $a;

    /**
     * Cofficient for x^0
     *
     * @var object
     */
    protected $b;

    /**
     * Base Point
     *
     * @var object
     */
    protected $p;

    /**
     * The number one over the specified finite field
     *
     * @var object
     */
    protected $one;

    /**
     * The number two over the specified finite field
     *
     * @var object
     */
    protected $two;

    /**
     * The number three over the specified finite field
     *
     * @var object
     */
    protected $three;

    /**
     * The number four over the specified finite field
     *
     * @var object
     */
    protected $four;

    /**
     * The number eight over the specified finite field
     *
     * @var object
     */
    protected $eight;

    /**
     * The modulo
     *
     * @var BigInteger
     */
    protected $modulo;

    /**
     * The Order
     *
     * @var BigInteger
     */
    protected $order;

    /**
     * Sets the modulo
     */
    public function setModulo(BigInteger $modulo)
    {
        $this->modulo = $modulo;
        $this->factory = new PrimeField($modulo);
        $this->two = $this->factory->newInteger(new BigInteger(2));
        $this->three = $this->factory->newInteger(new BigInteger(3));
        // used by jacobian coordinates
        $this->one = $this->factory->newInteger(new BigInteger(1));
        $this->four = $this->factory->newInteger(new BigInteger(4));
        $this->eight = $this->factory->newInteger(new BigInteger(8));
    }

    /**
     * Set coefficients a and b
     */
    public function setCoefficients(BigInteger $a, BigInteger $b)
    {
        if (!isset($this->factory)) {
            throw new \RuntimeException('setModulo needs to be called before this method');
        }
        $this->a = $this->factory->newInteger($a);
        $this->b = $this->factory->newInteger($b);
    }

    /**
     * Set x and y coordinates for the base point
     *
     * @param BigInteger|PrimeInteger $x
     * @param BigInteger|PrimeInteger $y
     * @return PrimeInteger[]
     */
    public function setBasePoint($x, $y)
    {
        switch (true) {
            case !$x instanceof BigInteger && !$x instanceof PrimeInteger:
                throw new \UnexpectedValueException('Argument 1 passed to Prime::setBasePoint() must be an instance of either BigInteger or PrimeField\Integer');
            case !$y instanceof BigInteger && !$y instanceof PrimeInteger:
                throw new \UnexpectedValueException('Argument 2 passed to Prime::setBasePoint() must be an instance of either BigInteger or PrimeField\Integer');
        }
        if (!isset($this->factory)) {
            throw new \RuntimeException('setModulo needs to be called before this method');
        }
        $this->p = [
            $x instanceof BigInteger ? $this->factory->newInteger($x) : $x,
            $y instanceof BigInteger ? $this->factory->newInteger($y) : $y
        ];
    }

    /**
     * Retrieve the base point as an array
     *
     * @return array
     */
    public function getBasePoint()
    {
        if (!isset($this->factory)) {
            throw new \RuntimeException('setModulo needs to be called before this method');
        }
        /*
        if (!isset($this->p)) {
            throw new \RuntimeException('setBasePoint needs to be called before this method');
        }
        */
        return $this->p;
    }

    /**
     * Adds two "fresh" jacobian form on the curve
     *
     * @return FiniteField[]
     */
    protected function jacobianAddPointMixedXY(array $p, array $q)
    {
        list($u1, $s1) = $p;
        list($u2, $s2) = $q;
        if ($u1->equals($u2)) {
            if (!$s1->equals($s2)) {
                return [];
            } else {
                return $this->doublePoint($p);
            }
        }
        $h = $u2->subtract($u1);
        $r = $s2->subtract($s1);
        $h2 = $h->multiply($h);
        $h3 = $h2->multiply($h);
        $v = $u1->multiply($h2);
        $x3 = $r->multiply($r)->subtract($h3)->subtract($v->multiply($this->two));
        $y3 = $r->multiply(
            $v->subtract($x3)
        )->subtract(
            $s1->multiply($h3)
        );
        return [$x3, $y3, $h];
    }

    /**
     * Adds one "fresh" jacobian form on the curve
     *
     * The second parameter should be the "fresh" one
     *
     * @return FiniteField[]
     */
    protected function jacobianAddPointMixedX(array $p, array $q)
    {
        list($u1, $s1, $z1) = $p;
        list($x2, $y2) = $q;

        $z12 = $z1->multiply($z1);

        $u2 = $x2->multiply($z12);
        $s2 = $y2->multiply($z12->multiply($z1));
        if ($u1->equals($u2)) {
            if (!$s1->equals($s2)) {
                return [];
            } else {
                return $this->doublePoint($p);
            }
        }
        $h = $u2->subtract($u1);
        $r = $s2->subtract($s1);
        $h2 = $h->multiply($h);
        $h3 = $h2->multiply($h);
        $v = $u1->multiply($h2);
        $x3 = $r->multiply($r)->subtract($h3)->subtract($v->multiply($this->two));
        $y3 = $r->multiply(
            $v->subtract($x3)
        )->subtract(
            $s1->multiply($h3)
        );
        $z3 = $h->multiply($z1);
        return [$x3, $y3, $z3];
    }

    /**
     * Adds two jacobian coordinates on the curve
     *
     * @return FiniteField[]
     */
    protected function jacobianAddPoint(array $p, array $q)
    {
        list($x1, $y1, $z1) = $p;
        list($x2, $y2, $z2) = $q;

        $z12 = $z1->multiply($z1);
        $z22 = $z2->multiply($z2);

        $u1 = $x1->multiply($z22);
        $u2 = $x2->multiply($z12);
        $s1 = $y1->multiply($z22->multiply($z2));
        $s2 = $y2->multiply($z12->multiply($z1));
        if ($u1->equals($u2)) {
            if (!$s1->equals($s2)) {
                return [];
            } else {
                return $this->doublePoint($p);
            }
        }
        $h = $u2->subtract($u1);
        $r = $s2->subtract($s1);
        $h2 = $h->multiply($h);
        $h3 = $h2->multiply($h);
        $v = $u1->multiply($h2);
        $x3 = $r->multiply($r)->subtract($h3)->subtract($v->multiply($this->two));
        $y3 = $r->multiply(
            $v->subtract($x3)
        )->subtract(
            $s1->multiply($h3)
        );
        $z3 = $h->multiply($z1)->multiply($z2);
        return [$x3, $y3, $z3];
    }

    /**
     * Adds two points on the curve
     *
     * @return FiniteField[]
     */
    public function addPoint(array $p, array $q)
    {
        if (!isset($this->factory)) {
            throw new \RuntimeException('setModulo needs to be called before this method');
        }

        if (!count($p) || !count($q)) {
            if (count($q)) {
                return $q;
            }
            if (count($p)) {
                return $p;
            }
            return [];
        }

        // use jacobian coordinates
        if (isset($p[2]) && isset($q[2])) {
            if (isset($p['fresh']) && isset($q['fresh'])) {
                return $this->jacobianAddPointMixedXY($p, $q);
            }
            if (isset($p['fresh'])) {
                return $this->jacobianAddPointMixedX($q, $p);
            }
            if (isset($q['fresh'])) {
                return $this->jacobianAddPointMixedX($p, $q);
            }
            return $this->jacobianAddPoint($p, $q);
        }

        if (isset($p[2]) || isset($q[2])) {
            throw new \RuntimeException('Affine coordinates need to be manually converted to Jacobi coordinates or vice versa');
        }

        if ($p[0]->equals($q[0])) {
            if (!$p[1]->equals($q[1])) {
                return [];
            } else { // eg. doublePoint
                list($numerator, $denominator) = $this->doublePointHelper($p);
            }
        } else {
            $numerator = $q[1]->subtract($p[1]);
            $denominator = $q[0]->subtract($p[0]);
        }
        $slope = $numerator->divide($denominator);
        $x = $slope->multiply($slope)->subtract($p[0])->subtract($q[0]);
        $y = $slope->multiply($p[0]->subtract($x))->subtract($p[1]);

        return [$x, $y];
    }

    /**
     * Returns the numerator and denominator of the slope
     *
     * @return FiniteField[]
     */
    protected function doublePointHelper(array $p)
    {
        $numerator = $this->three->multiply($p[0])->multiply($p[0])->add($this->a);
        $denominator = $this->two->multiply($p[1]);
        return [$numerator, $denominator];
    }

    /**
     * Doubles a jacobian coordinate on the curve
     *
     * @return FiniteField[]
     */
    protected function jacobianDoublePoint(array $p)
    {
        list($x, $y, $z) = $p;
        $x2 = $x->multiply($x);
        $y2 = $y->multiply($y);
        $z2 = $z->multiply($z);
        $s = $this->four->multiply($x)->multiply($y2);
        $m1 = $this->three->multiply($x2);
        $m2 = $this->a->multiply($z2->multiply($z2));
        $m = $m1->add($m2);
        $x1 = $m->multiply($m)->subtract($this->two->multiply($s));
        $y1 = $m->multiply($s->subtract($x1))->subtract(
            $this->eight->multiply($y2->multiply($y2))
        );
        $z1 = $this->two->multiply($y)->multiply($z);
        return [$x1, $y1, $z1];
    }

    /**
     * Doubles a "fresh" jacobian coordinate on the curve
     *
     * @return FiniteField[]
     */
    protected function jacobianDoublePointMixed(array $p)
    {
        list($x, $y) = $p;
        $x2 = $x->multiply($x);
        $y2 = $y->multiply($y);
        $s = $this->four->multiply($x)->multiply($y2);
        $m1 = $this->three->multiply($x2);
        $m = $m1->add($this->a);
        $x1 = $m->multiply($m)->subtract($this->two->multiply($s));
        $y1 = $m->multiply($s->subtract($x1))->subtract(
            $this->eight->multiply($y2->multiply($y2))
        );
        $z1 = $this->two->multiply($y);
        return [$x1, $y1, $z1];
    }

    /**
     * Doubles a point on a curve
     *
     * @return FiniteField[]
     */
    public function doublePoint(array $p)
    {
        if (!isset($this->factory)) {
            throw new \RuntimeException('setModulo needs to be called before this method');
        }

        if (!count($p)) {
            return [];
        }

        // use jacobian coordinates
        if (isset($p[2])) {
            if (isset($p['fresh'])) {
                return $this->jacobianDoublePointMixed($p);
            }
            return $this->jacobianDoublePoint($p);
        }

        list($numerator, $denominator) = $this->doublePointHelper($p);

        $slope = $numerator->divide($denominator);

        $x = $slope->multiply($slope)->subtract($p[0])->subtract($p[0]);
        $y = $slope->multiply($p[0]->subtract($x))->subtract($p[1]);

        return [$x, $y];
    }

    /**
     * Returns the X coordinate and the derived Y coordinate
     *
     * @return array
     */
    public function derivePoint($m)
    {
        $y = ord(Strings::shift($m));
        $x = new BigInteger($m, 256);
        $xp = $this->convertInteger($x);
        switch ($y) {
            case 2:
                $ypn = false;
                break;
            case 3:
                $ypn = true;
                break;
            default:
                throw new \RuntimeException('Coordinate not in recognized format');
        }
        $temp = $xp->multiply($this->a);
        $temp = $xp->multiply($xp)->multiply($xp)->add($temp);
        $temp = $temp->add($this->b);
        $b = $temp->squareRoot();
        if (!$b) {
            throw new \RuntimeException('Unable to derive Y coordinate');
        }
        $bn = $b->isOdd();
        $yp = $ypn == $bn ? $b : $b->negate();
        return [$xp, $yp];
    }

    /**
     * Tests whether or not the x / y values satisfy the equation
     *
     * @return boolean
     */
    public function verifyPoint(array $p)
    {
        list($x, $y) = $p;
        $lhs = $y->multiply($y);
        $temp = $x->multiply($this->a);
        $temp = $x->multiply($x)->multiply($x)->add($temp);
        $rhs = $temp->add($this->b);

        return $lhs->equals($rhs);
    }

    /**
     * Returns the modulo
     *
     * @return BigInteger
     */
    public function getModulo()
    {
        return $this->modulo;
    }

    /**
     * Returns the a coefficient
     *
     * @return PrimeInteger
     */
    public function getA()
    {
        return $this->a;
    }

    /**
     * Returns the a coefficient
     *
     * @return PrimeInteger
     */
    public function getB()
    {
        return $this->b;
    }

    /**
     * Multiply and Add Points
     *
     * Adapted from:
     * https://github.com/indutny/elliptic/blob/725bd91/lib/elliptic/curve/base.js#L125
     *
     * @return int[]
     */
    public function multiplyAddPoints(array $points, array $scalars)
    {
        $length = count($points);

        foreach ($points as &$point) {
            $point = $this->convertToInternal($point);
        }

        $wnd = [$this->getNAFPoints($points[0], 7)];
        $wndWidth = [isset($points[0]['nafwidth']) ? $points[0]['nafwidth'] : 7];
        for ($i = 1; $i < $length; $i++) {
            $wnd[] = $this->getNAFPoints($points[$i], 1);
            $wndWidth[] = isset($points[$i]['nafwidth']) ? $points[$i]['nafwidth'] : 1;
        }

        $naf = [];

        // comb all window NAFs

        $max = 0;
        for ($i = $length - 1; $i >= 1; $i -= 2) {
            $a = $i - 1;
            $b = $i;
            if ($wndWidth[$a] != 1 || $wndWidth[$b] != 1) {
                $naf[$a] = $scalars[$a]->getNAF($wndWidth[$a]);
                $naf[$b] = $scalars[$b]->getNAF($wndWidth[$b]);
                $max = max(count($naf[$a]), count($naf[$b]), $max);
                continue;
            }

            $comb = [
                $points[$a], // 1
                null,        // 3
                null,        // 5
                $points[$b]  // 7
            ];

            $comb[1] = $this->addPoint($points[$a], $points[$b]);
            $comb[2] = $this->addPoint($points[$a], $this->negatePoint($points[$b]));

            $index = [
                -3, /* -1 -1 */
                -1, /* -1  0 */
                -5, /* -1  1 */
                -7, /*  0 -1 */
                 0, /*  0 -1 */
                 7, /*  0  1 */
                 5, /*  1 -1 */
                 1, /*  1  0 */
                 3  /*  1  1 */
            ];

            $jsf = self::getJSFPoints($scalars[$a], $scalars[$b]);

            $max = max(count($jsf[0]), $max);
            if ($max > 0) {
                $naf[$a] = array_fill(0, $max, 0);
                $naf[$b] = array_fill(0, $max, 0);
            } else {
                $naf[$a] = [];
                $naf[$b] = [];
            }

            for ($j = 0; $j < $max; $j++) {
                $ja = isset($jsf[0][$j]) ? $jsf[0][$j] : 0;
                $jb = isset($jsf[1][$j]) ? $jsf[1][$j] : 0;

                $naf[$a][$j] = $index[3 * ($ja + 1) + $jb + 1];
                $naf[$b][$j] = 0;
                $wnd[$a] = $comb;
            }
        }

        $acc = [];
        $temp = [0, 0, 0, 0];
        for ($i = $max; $i >= 0; $i--) {
            $k = 0;
            while ($i >= 0) {
                $zero = true;
                for ($j = 0; $j < $length; $j++) {
                    $temp[$j] = isset($naf[$j][$i]) ? $naf[$j][$i] : 0;
                    if ($temp[$j] != 0) {
                        $zero = false;
                    }
                }
                if (!$zero) {
                    break;
                }
                $k++;
                $i--;
            }

            if ($i >= 0) {
                $k++;
            }
            while ($k--) {
                $acc = $this->doublePoint($acc);
            }

            if ($i < 0) {
                break;
            }

            for ($j = 0; $j < $length; $j++) {
                $z = $temp[$j];
                $p = null;
                if ($z == 0) {
                    continue;
                }
                $p = $z > 0 ?
                    $wnd[$j][($z - 1) >> 1] :
                    $this->negatePoint($wnd[$j][(-$z - 1) >> 1]);
                $acc = $this->addPoint($acc, $p);
            }
        }

        return $this->convertToAffine($acc);
    }

    /**
     * Precomputes NAF points
     *
     * Adapted from:
     * https://github.com/indutny/elliptic/blob/725bd91/lib/elliptic/curve/base.js#L351
     *
     * @return int[]
     */
    private function getNAFPoints(array $point, $wnd)
    {
        if (isset($point['naf'])) {
            return $point['naf'];
        }

        $res = [$point];
        $max = (1 << $wnd) - 1;
        $dbl = $max == 1 ? null : $this->doublePoint($point);
        for ($i = 1; $i < $max; $i++) {
            $res[] = $this->addPoint($res[$i - 1], $dbl);
        }

        $point['naf'] = $res;

        /*
        $str = '';
        foreach ($res as $re) {
            $re[0] = bin2hex($re[0]->toBytes());
            $re[1] = bin2hex($re[1]->toBytes());
            $str.= "            ['$re[0]', '$re[1]'],\r\n";
        }
        file_put_contents('temp.txt', $str);
        exit;
        */

        return $res;
    }

    /**
     * Precomputes points in Joint Sparse Form
     *
     * Adapted from:
     * https://github.com/indutny/elliptic/blob/725bd91/lib/elliptic/utils.js#L96
     *
     * @return int[]
     */
    private static function getJSFPoints(Integer $k1, Integer $k2)
    {
        static $three;
        if (!isset($three)) {
            $three = new BigInteger(3);
        }

        $jsf = [[], []];
        $k1 = $k1->toBigInteger();
        $k2 = $k2->toBigInteger();
        $d1 = 0;
        $d2 = 0;

        while ($k1->compare(new BigInteger(-$d1)) > 0 || $k2->compare(new BigInteger(-$d2)) > 0) {
            // first phase
            $m14 = $k1->testBit(0) + 2 * $k1->testBit(1);
            $m14 += $d1;
            $m14 &= 3;

            $m24 = $k2->testBit(0) + 2 * $k2->testBit(1);
            $m24 += $d2;
            $m24 &= 3;

            if ($m14 == 3) {
                $m14 = -1;
            }
            if ($m24 == 3) {
                $m24 = -1;
            }

            $u1 = 0;
            if ($m14 & 1) { // if $m14 is odd
                $m8 = $k1->testBit(0) + 2 * $k1->testBit(1) + 4 * $k1->testBit(2);
                $m8 += $d1;
                $m8 &= 7;
                $u1 = ($m8 == 3 || $m8 == 5) && $m24 == 2 ? -$m14 : $m14;
            }
            $jsf[0][] = $u1;

            $u2 = 0;
            if ($m24 & 1) { // if $m24 is odd
                $m8 = $k2->testBit(0) + 2 * $k2->testBit(1) + 4 * $k2->testBit(2);
                $m8 += $d2;
                $m8 &= 7;
                $u2 = ($m8 == 3 || $m8 == 5) && $m14 == 2 ? -$m24 : $m24;
            }
            $jsf[1][] = $u2;

            // second phase
            if (2 * $d1 == $u1 + 1) {
                $d1 = 1 - $d1;
            }
            if (2 * $d2 == $u2 + 1) {
                $d2 = 1 - $d2;
            }
            $k1 = $k1->bitwise_rightShift(1);
            $k2 = $k2->bitwise_rightShift(1);
        }

        return $jsf;
    }

    /**
     * Returns the affine point
     *
     * A Jacobian Coordinate is of the form (x, y, z).
     * To convert a Jacobian Coordinate to an Affine Point
     * you do (x / z^2, y / z^3)
     *
     * @return PrimeInteger[]
     */
    public function convertToAffine(array $p)
    {
        if (!isset($p[2])) {
            return $p;
        }
        list($x, $y, $z) = $p;
        $z = $this->one->divide($z);
        $z2 = $z->multiply($z);
        return [
            $x->multiply($z2),
            $y->multiply($z2)->multiply($z)
        ];
    }

    /**
     * Converts an affine point to a jacobian coordinate
     *
     * @return PrimeInteger[]
     */
    public function convertToInternal(array $p)
    {
        if (isset($p[2])) {
            return $p;
        }

        $p[2] = clone $this->one;
        $p['fresh'] = true;
        return $p;
    }
}
<?php

/**
 * Curves over a*x^2 + y^2 = 1 + d*x^2*y^2
 *
 * http://www.secg.org/SEC2-Ver-1.0.pdf provides for curves with custom parameters.
 * ie. the coefficients can be arbitrary set through specially formatted keys, etc.
 * As such, Prime.php is built very generically and it's not able to take full
 * advantage of curves with 0 coefficients to produce simplified point doubling,
 * point addition. Twisted Edwards curves, in contrast, do not have a way, currently,
 * to customize them. As such, we can omit the super generic stuff from this class
 * and let the named curves (Ed25519 and Ed448) define their own custom tailored
 * point addition and point doubling methods.
 *
 * More info:
 *
 * https://en.wikipedia.org/wiki/Twisted_Edwards_curve
 *
 * PHP version 5 and 7
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2017 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://pear.php.net/package/Math_BigInteger
 */

namespace phpseclib3\Crypt\EC\BaseCurves;

use phpseclib3\Math\BigInteger;
use phpseclib3\Math\PrimeField;
use phpseclib3\Math\PrimeField\Integer as PrimeInteger;

/**
 * Curves over a*x^2 + y^2 = 1 + d*x^2*y^2
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
class TwistedEdwards extends Base
{
    /**
     * The modulo
     *
     * @var BigInteger
     */
    protected $modulo;

    /**
     * Cofficient for x^2
     *
     * @var object
     */
    protected $a;

    /**
     * Cofficient for x^2*y^2
     *
     * @var object
     */
    protected $d;

    /**
     * Base Point
     *
     * @var object[]
     */
    protected $p;

    /**
     * The number zero over the specified finite field
     *
     * @var object
     */
    protected $zero;

    /**
     * The number one over the specified finite field
     *
     * @var object
     */
    protected $one;

    /**
     * The number two over the specified finite field
     *
     * @var object
     */
    protected $two;

    /**
     * Sets the modulo
     */
    public function setModulo(BigInteger $modulo)
    {
        $this->modulo = $modulo;
        $this->factory = new PrimeField($modulo);
        $this->zero = $this->factory->newInteger(new BigInteger(0));
        $this->one = $this->factory->newInteger(new BigInteger(1));
        $this->two = $this->factory->newInteger(new BigInteger(2));
    }

    /**
     * Set coefficients a and b
     */
    public function setCoefficients(BigInteger $a, BigInteger $d)
    {
        if (!isset($this->factory)) {
            throw new \RuntimeException('setModulo needs to be called before this method');
        }
        $this->a = $this->factory->newInteger($a);
        $this->d = $this->factory->newInteger($d);
    }

    /**
     * Set x and y coordinates for the base point
     */
    public function setBasePoint($x, $y)
    {
        switch (true) {
            case !$x instanceof BigInteger && !$x instanceof PrimeInteger:
                throw new \UnexpectedValueException('Argument 1 passed to Prime::setBasePoint() must be an instance of either BigInteger or PrimeField\Integer');
            case !$y instanceof BigInteger && !$y instanceof PrimeInteger:
                throw new \UnexpectedValueException('Argument 2 passed to Prime::setBasePoint() must be an instance of either BigInteger or PrimeField\Integer');
        }
        if (!isset($this->factory)) {
            throw new \RuntimeException('setModulo needs to be called before this method');
        }
        $this->p = [
            $x instanceof BigInteger ? $this->factory->newInteger($x) : $x,
            $y instanceof BigInteger ? $this->factory->newInteger($y) : $y
        ];
    }

    /**
     * Returns the a coefficient
     *
     * @return PrimeInteger
     */
    public function getA()
    {
        return $this->a;
    }

    /**
     * Returns the a coefficient
     *
     * @return PrimeInteger
     */
    public function getD()
    {
        return $this->d;
    }

    /**
     * Retrieve the base point as an array
     *
     * @return array
     */
    public function getBasePoint()
    {
        if (!isset($this->factory)) {
            throw new \RuntimeException('setModulo needs to be called before this method');
        }
        /*
        if (!isset($this->p)) {
            throw new \RuntimeException('setBasePoint needs to be called before this method');
        }
        */
        return $this->p;
    }

    /**
     * Returns the affine point
     *
     * @return PrimeInteger[]
     */
    public function convertToAffine(array $p)
    {
        if (!isset($p[2])) {
            return $p;
        }
        list($x, $y, $z) = $p;
        $z = $this->one->divide($z);
        return [
            $x->multiply($z),
            $y->multiply($z)
        ];
    }

    /**
     * Returns the modulo
     *
     * @return BigInteger
     */
    public function getModulo()
    {
        return $this->modulo;
    }

    /**
     * Tests whether or not the x / y values satisfy the equation
     *
     * @return boolean
     */
    public function verifyPoint(array $p)
    {
        list($x, $y) = $p;
        $x2 = $x->multiply($x);
        $y2 = $y->multiply($y);

        $lhs = $this->a->multiply($x2)->add($y2);
        $rhs = $this->d->multiply($x2)->multiply($y2)->add($this->one);

        return $lhs->equals($rhs);
    }
}
<?php

/**
 * Curve25519
 *
 * PHP version 5 and 7
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2019 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://pear.php.net/package/Math_BigInteger
 */

namespace phpseclib3\Crypt\EC\Curves;

use phpseclib3\Crypt\EC\BaseCurves\Montgomery;
use phpseclib3\Math\BigInteger;

class Curve25519 extends Montgomery
{
    public function __construct()
    {
        // 2^255 - 19
        $this->setModulo(new BigInteger('7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFED', 16));
        $this->a24 = $this->factory->newInteger(new BigInteger('121666'));
        $this->p = [$this->factory->newInteger(new BigInteger(9))];
        // 2^252 + 0x14def9dea2f79cd65812631a5cf5d3ed
        $this->setOrder(new BigInteger('1000000000000000000000000000000014DEF9DEA2F79CD65812631A5CF5D3ED', 16));

        /*
        $this->setCoefficients(
            new BigInteger('486662'), // a
        );
        $this->setBasePoint(
            new BigInteger(9),
            new BigInteger('14781619447589544791020593568409986887264606134616475288964881837755586237401')
        );
        */
    }

    /**
     * Multiply a point on the curve by a scalar
     *
     * Modifies the scalar as described at https://tools.ietf.org/html/rfc7748#page-8
     *
     * @return array
     */
    public function multiplyPoint(array $p, BigInteger $d)
    {
        //$r = strrev(sodium_crypto_scalarmult($d->toBytes(), strrev($p[0]->toBytes())));
        //return [$this->factory->newInteger(new BigInteger($r, 256))];

        $d = $d->toBytes();
        $d &= "\xF8" . str_repeat("\xFF", 30) . "\x7F";
        $d = strrev($d);
        $d |= "\x40";
        $d = new BigInteger($d, -256);

        return parent::multiplyPoint($p, $d);
    }

    /**
     * Creates a random scalar multiplier
     *
     * @return BigInteger
     */
    public function createRandomMultiplier()
    {
        return BigInteger::random(256);
    }

    /**
     * Performs range check
     */
    public function rangeCheck(BigInteger $x)
    {
        if ($x->getLength() > 256 || $x->isNegative()) {
            throw new \RangeException('x must be a positive integer less than 256 bytes in length');
        }
    }
}
<?php

/**
 * Curve448
 *
 * PHP version 5 and 7
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2019 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://pear.php.net/package/Math_BigInteger
 */

namespace phpseclib3\Crypt\EC\Curves;

use phpseclib3\Crypt\EC\BaseCurves\Montgomery;
use phpseclib3\Math\BigInteger;

class Curve448 extends Montgomery
{
    public function __construct()
    {
        // 2^448 - 2^224 - 1
        $this->setModulo(new BigInteger(
            'FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE' .
            'FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF',
            16
        ));
        $this->a24 = $this->factory->newInteger(new BigInteger('39081'));
        $this->p = [$this->factory->newInteger(new BigInteger(5))];
        // 2^446 - 0x8335dc163bb124b65129c96fde933d8d723a70aadc873d6d54a7bb0d
        $this->setOrder(new BigInteger(
            '3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF' .
            '7CCA23E9C44EDB49AED63690216CC2728DC58F552378C292AB5844F3',
            16
        ));

        /*
        $this->setCoefficients(
            new BigInteger('156326'), // a
        );
        $this->setBasePoint(
            new BigInteger(5),
            new BigInteger(
                '355293926785568175264127502063783334808976399387714271831880898' .
                '435169088786967410002932673765864550910142774147268105838985595290' .
                '606362')
        );
        */
    }

    /**
     * Multiply a point on the curve by a scalar
     *
     * Modifies the scalar as described at https://tools.ietf.org/html/rfc7748#page-8
     *
     * @return array
     */
    public function multiplyPoint(array $p, BigInteger $d)
    {
        //$r = strrev(sodium_crypto_scalarmult($d->toBytes(), strrev($p[0]->toBytes())));
        //return [$this->factory->newInteger(new BigInteger($r, 256))];

        $d = $d->toBytes();
        $d[0] = $d[0] & "\xFC";
        $d = strrev($d);
        $d |= "\x80";
        $d = new BigInteger($d, 256);

        return parent::multiplyPoint($p, $d);
    }

    /**
     * Creates a random scalar multiplier
     *
     * @return BigInteger
     */
    public function createRandomMultiplier()
    {
        return BigInteger::random(446);
    }

    /**
     * Performs range check
     */
    public function rangeCheck(BigInteger $x)
    {
        if ($x->getLength() > 448 || $x->isNegative()) {
            throw new \RangeException('x must be a positive integer less than 446 bytes in length');
        }
    }
}
<?php

/**
 * Ed25519
 *
 * PHP version 5 and 7
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2017 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 */

namespace phpseclib3\Crypt\EC\Curves;

use phpseclib3\Crypt\EC\BaseCurves\TwistedEdwards;
use phpseclib3\Crypt\Hash;
use phpseclib3\Crypt\Random;
use phpseclib3\Math\BigInteger;

class Ed25519 extends TwistedEdwards
{
    const HASH = 'sha512';
    /*
      Per https://tools.ietf.org/html/rfc8032#page-6 EdDSA has several parameters, one of which is b:

      2.   An integer b with 2^(b-1) > p.  EdDSA public keys have exactly b
           bits, and EdDSA signatures have exactly 2*b bits.  b is
           recommended to be a multiple of 8, so public key and signature
           lengths are an integral number of octets.

      SIZE corresponds to b
    */
    const SIZE = 32;

    public function __construct()
    {
        // 2^255 - 19
        $this->setModulo(new BigInteger('7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFED', 16));
        $this->setCoefficients(
            // -1
            new BigInteger('7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEC', 16), // a
            // -121665/121666
            new BigInteger('52036CEE2B6FFE738CC740797779E89800700A4D4141D8AB75EB4DCA135978A3', 16)  // d
        );
        $this->setBasePoint(
            new BigInteger('216936D3CD6E53FEC0A4E231FDD6DC5C692CC7609525A7B2C9562D608F25D51A', 16),
            new BigInteger('6666666666666666666666666666666666666666666666666666666666666658', 16)
        );
        $this->setOrder(new BigInteger('1000000000000000000000000000000014DEF9DEA2F79CD65812631A5CF5D3ED', 16));
        // algorithm 14.47 from http://cacr.uwaterloo.ca/hac/about/chap14.pdf#page=16
        /*
        $this->setReduction(function($x) {
            $parts = $x->bitwise_split(255);
            $className = $this->className;

            if (count($parts) > 2) {
                list(, $r) = $x->divide($className::$modulo);
                return $r;
            }

            $zero = new BigInteger();
            $c = new BigInteger(19);

            switch (count($parts)) {
                case 2:
                    list($qi, $ri) = $parts;
                    break;
                case 1:
                    $qi = $zero;
                    list($ri) = $parts;
                    break;
                case 0:
                    return $zero;
            }
            $r = $ri;

            while ($qi->compare($zero) > 0) {
                $temp = $qi->multiply($c)->bitwise_split(255);
                if (count($temp) == 2) {
                    list($qi, $ri) = $temp;
                } else {
                    $qi = $zero;
                    list($ri) = $temp;
                }
                $r = $r->add($ri);
            }

            while ($r->compare($className::$modulo) > 0) {
                $r = $r->subtract($className::$modulo);
            }
            return $r;
        });
        */
    }

    /**
     * Recover X from Y
     *
     * Implements steps 2-4 at https://tools.ietf.org/html/rfc8032#section-5.1.3
     *
     * Used by EC\Keys\Common.php
     *
     * @param BigInteger $y
     * @param boolean $sign
     * @return object[]
     */
    public function recoverX(BigInteger $y, $sign)
    {
        $y = $this->factory->newInteger($y);

        $y2 = $y->multiply($y);
        $u = $y2->subtract($this->one);
        $v = $this->d->multiply($y2)->add($this->one);
        $x2 = $u->divide($v);
        if ($x2->equals($this->zero)) {
            if ($sign) {
                throw new \RuntimeException('Unable to recover X coordinate (x2 = 0)');
            }
            return clone $this->zero;
        }
        // find the square root
        /* we don't do $x2->squareRoot() because, quoting from
           https://tools.ietf.org/html/rfc8032#section-5.1.1:

           "For point decoding or "decompression", square roots modulo p are
            needed.  They can be computed using the Tonelli-Shanks algorithm or
            the special case for p = 5 (mod 8).  To find a square root of a,
            first compute the candidate root x = a^((p+3)/8) (mod p)."
         */
        $exp = $this->getModulo()->add(new BigInteger(3));
        $exp = $exp->bitwise_rightShift(3);
        $x = $x2->pow($exp);

        // If v x^2 = -u (mod p), set x <-- x * 2^((p-1)/4), which is a square root.
        if (!$x->multiply($x)->subtract($x2)->equals($this->zero)) {
            $temp = $this->getModulo()->subtract(new BigInteger(1));
            $temp = $temp->bitwise_rightShift(2);
            $temp = $this->two->pow($temp);
            $x = $x->multiply($temp);
            if (!$x->multiply($x)->subtract($x2)->equals($this->zero)) {
                throw new \RuntimeException('Unable to recover X coordinate');
            }
        }
        if ($x->isOdd() != $sign) {
            $x = $x->negate();
        }

        return [$x, $y];
    }

    /**
     * Extract Secret Scalar
     *
     * Implements steps 1-3 at https://tools.ietf.org/html/rfc8032#section-5.1.5
     *
     * Used by the various key handlers
     *
     * @param string $str
     * @return array
     */
    public function extractSecret($str)
    {
        if (strlen($str) != 32) {
            throw new \LengthException('Private Key should be 32-bytes long');
        }
        // 1.  Hash the 32-byte private key using SHA-512, storing the digest in
        //     a 64-octet large buffer, denoted h.  Only the lower 32 bytes are
        //     used for generating the public key.
        $hash = new Hash('sha512');
        $h = $hash->hash($str);
        $h = substr($h, 0, 32);
        // 2.  Prune the buffer: The lowest three bits of the first octet are
        //     cleared, the highest bit of the last octet is cleared, and the
        //     second highest bit of the last octet is set.
        $h[0] = $h[0] & chr(0xF8);
        $h = strrev($h);
        $h[0] = ($h[0] & chr(0x3F)) | chr(0x40);
        // 3.  Interpret the buffer as the little-endian integer, forming a
        //     secret scalar s.
        $dA = new BigInteger($h, 256);

        return [
            'dA' => $dA,
            'secret' => $str
        ];
    }

    /**
     * Encode a point as a string
     *
     * @param array $point
     * @return string
     */
    public function encodePoint($point)
    {
        list($x, $y) = $point;
        $y = $y->toBytes();
        $y[0] = $y[0] & chr(0x7F);
        if ($x->isOdd()) {
            $y[0] = $y[0] | chr(0x80);
        }
        $y = strrev($y);

        return $y;
    }

    /**
     * Creates a random scalar multiplier
     *
     * @return \phpseclib3\Math\PrimeField\Integer
     */
    public function createRandomMultiplier()
    {
        return $this->extractSecret(Random::string(32))['dA'];
    }

    /**
     * Converts an affine point to an extended homogeneous coordinate
     *
     * From https://tools.ietf.org/html/rfc8032#section-5.1.4 :
     *
     * A point (x,y) is represented in extended homogeneous coordinates (X, Y, Z, T),
     * with x = X/Z, y = Y/Z, x * y = T/Z.
     *
     * @return \phpseclib3\Math\PrimeField\Integer[]
     */
    public function convertToInternal(array $p)
    {
        if (empty($p)) {
            return [clone $this->zero, clone $this->one, clone $this->one, clone $this->zero];
        }

        if (isset($p[2])) {
            return $p;
        }

        $p[2] = clone $this->one;
        $p[3] = $p[0]->multiply($p[1]);

        return $p;
    }

    /**
     * Doubles a point on a curve
     *
     * @return FiniteField[]
     */
    public function doublePoint(array $p)
    {
        if (!isset($this->factory)) {
            throw new \RuntimeException('setModulo needs to be called before this method');
        }

        if (!count($p)) {
            return [];
        }

        if (!isset($p[2])) {
            throw new \RuntimeException('Affine coordinates need to be manually converted to "Jacobi" coordinates or vice versa');
        }

        // from https://tools.ietf.org/html/rfc8032#page-12

        list($x1, $y1, $z1, $t1) = $p;

        $a = $x1->multiply($x1);
        $b = $y1->multiply($y1);
        $c = $this->two->multiply($z1)->multiply($z1);
        $h = $a->add($b);
        $temp = $x1->add($y1);
        $e = $h->subtract($temp->multiply($temp));
        $g = $a->subtract($b);
        $f = $c->add($g);

        $x3 = $e->multiply($f);
        $y3 = $g->multiply($h);
        $t3 = $e->multiply($h);
        $z3 = $f->multiply($g);

        return [$x3, $y3, $z3, $t3];
    }

    /**
     * Adds two points on the curve
     *
     * @return FiniteField[]
     */
    public function addPoint(array $p, array $q)
    {
        if (!isset($this->factory)) {
            throw new \RuntimeException('setModulo needs to be called before this method');
        }

        if (!count($p) || !count($q)) {
            if (count($q)) {
                return $q;
            }
            if (count($p)) {
                return $p;
            }
            return [];
        }

        if (!isset($p[2]) || !isset($q[2])) {
            throw new \RuntimeException('Affine coordinates need to be manually converted to "Jacobi" coordinates or vice versa');
        }

        if ($p[0]->equals($q[0])) {
            return !$p[1]->equals($q[1]) ? [] : $this->doublePoint($p);
        }

        // from https://tools.ietf.org/html/rfc8032#page-12

        list($x1, $y1, $z1, $t1) = $p;
        list($x2, $y2, $z2, $t2) = $q;

        $a = $y1->subtract($x1)->multiply($y2->subtract($x2));
        $b = $y1->add($x1)->multiply($y2->add($x2));
        $c = $t1->multiply($this->two)->multiply($this->d)->multiply($t2);
        $d = $z1->multiply($this->two)->multiply($z2);
        $e = $b->subtract($a);
        $f = $d->subtract($c);
        $g = $d->add($c);
        $h = $b->add($a);

        $x3 = $e->multiply($f);
        $y3 = $g->multiply($h);
        $t3 = $e->multiply($h);
        $z3 = $f->multiply($g);

        return [$x3, $y3, $z3, $t3];
    }
}
<?php

/**
 * Ed448
 *
 * PHP version 5 and 7
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2017 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 */

namespace phpseclib3\Crypt\EC\Curves;

use phpseclib3\Crypt\EC\BaseCurves\TwistedEdwards;
use phpseclib3\Crypt\Hash;
use phpseclib3\Crypt\Random;
use phpseclib3\Math\BigInteger;

class Ed448 extends TwistedEdwards
{
    const HASH = 'shake256-912';
    const SIZE = 57;

    public function __construct()
    {
        // 2^448 - 2^224 - 1
        $this->setModulo(new BigInteger(
            'FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE' .
            'FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF',
            16
        ));
        $this->setCoefficients(
            new BigInteger(1),
            // -39081
            new BigInteger('FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE' .
                           'FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6756', 16)
        );
        $this->setBasePoint(
            new BigInteger('4F1970C66BED0DED221D15A622BF36DA9E146570470F1767EA6DE324' .
                           'A3D3A46412AE1AF72AB66511433B80E18B00938E2626A82BC70CC05E', 16),
            new BigInteger('693F46716EB6BC248876203756C9C7624BEA73736CA3984087789C1E' .
                           '05A0C2D73AD3FF1CE67C39C4FDBD132C4ED7C8AD9808795BF230FA14', 16)
        );
        $this->setOrder(new BigInteger(
            '3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF' .
            '7CCA23E9C44EDB49AED63690216CC2728DC58F552378C292AB5844F3',
            16
        ));
    }

    /**
     * Recover X from Y
     *
     * Implements steps 2-4 at https://tools.ietf.org/html/rfc8032#section-5.2.3
     *
     * Used by EC\Keys\Common.php
     *
     * @param BigInteger $y
     * @param boolean $sign
     * @return object[]
     */
    public function recoverX(BigInteger $y, $sign)
    {
        $y = $this->factory->newInteger($y);

        $y2 = $y->multiply($y);
        $u = $y2->subtract($this->one);
        $v = $this->d->multiply($y2)->subtract($this->one);
        $x2 = $u->divide($v);
        if ($x2->equals($this->zero)) {
            if ($sign) {
                throw new \RuntimeException('Unable to recover X coordinate (x2 = 0)');
            }
            return clone $this->zero;
        }
        // find the square root
        $exp = $this->getModulo()->add(new BigInteger(1));
        $exp = $exp->bitwise_rightShift(2);
        $x = $x2->pow($exp);

        if (!$x->multiply($x)->subtract($x2)->equals($this->zero)) {
            throw new \RuntimeException('Unable to recover X coordinate');
        }
        if ($x->isOdd() != $sign) {
            $x = $x->negate();
        }

        return [$x, $y];
    }

    /**
     * Extract Secret Scalar
     *
     * Implements steps 1-3 at https://tools.ietf.org/html/rfc8032#section-5.2.5
     *
     * Used by the various key handlers
     *
     * @param string $str
     * @return array
     */
    public function extractSecret($str)
    {
        if (strlen($str) != 57) {
            throw new \LengthException('Private Key should be 57-bytes long');
        }
        // 1.  Hash the 57-byte private key using SHAKE256(x, 114), storing the
        //     digest in a 114-octet large buffer, denoted h.  Only the lower 57
        //     bytes are used for generating the public key.
        $hash = new Hash('shake256-912');
        $h = $hash->hash($str);
        $h = substr($h, 0, 57);
        // 2.  Prune the buffer: The two least significant bits of the first
        //     octet are cleared, all eight bits the last octet are cleared, and
        //     the highest bit of the second to last octet is set.
        $h[0] = $h[0] & chr(0xFC);
        $h = strrev($h);
        $h[0] = "\0";
        $h[1] = $h[1] | chr(0x80);
        // 3.  Interpret the buffer as the little-endian integer, forming a
        //     secret scalar s.
        $dA = new BigInteger($h, 256);

        return [
            'dA' => $dA,
            'secret' => $str
        ];

        $dA->secret = $str;
        return $dA;
    }

    /**
     * Encode a point as a string
     *
     * @param array $point
     * @return string
     */
    public function encodePoint($point)
    {
        list($x, $y) = $point;
        $y = "\0" . $y->toBytes();
        if ($x->isOdd()) {
            $y[0] = $y[0] | chr(0x80);
        }
        $y = strrev($y);

        return $y;
    }

    /**
     * Creates a random scalar multiplier
     *
     * @return \phpseclib3\Math\PrimeField\Integer
     */
    public function createRandomMultiplier()
    {
        return $this->extractSecret(Random::string(57))['dA'];
    }

    /**
     * Converts an affine point to an extended homogeneous coordinate
     *
     * From https://tools.ietf.org/html/rfc8032#section-5.2.4 :
     *
     * A point (x,y) is represented in extended homogeneous coordinates (X, Y, Z, T),
     * with x = X/Z, y = Y/Z, x * y = T/Z.
     *
     * @return \phpseclib3\Math\PrimeField\Integer[]
     */
    public function convertToInternal(array $p)
    {
        if (empty($p)) {
            return [clone $this->zero, clone $this->one, clone $this->one];
        }

        if (isset($p[2])) {
            return $p;
        }

        $p[2] = clone $this->one;

        return $p;
    }

    /**
     * Doubles a point on a curve
     *
     * @return FiniteField[]
     */
    public function doublePoint(array $p)
    {
        if (!isset($this->factory)) {
            throw new \RuntimeException('setModulo needs to be called before this method');
        }

        if (!count($p)) {
            return [];
        }

        if (!isset($p[2])) {
            throw new \RuntimeException('Affine coordinates need to be manually converted to "Jacobi" coordinates or vice versa');
        }

        // from https://tools.ietf.org/html/rfc8032#page-18

        list($x1, $y1, $z1) = $p;

        $b = $x1->add($y1);
        $b = $b->multiply($b);
        $c = $x1->multiply($x1);
        $d = $y1->multiply($y1);
        $e = $c->add($d);
        $h = $z1->multiply($z1);
        $j = $e->subtract($this->two->multiply($h));

        $x3 = $b->subtract($e)->multiply($j);
        $y3 = $c->subtract($d)->multiply($e);
        $z3 = $e->multiply($j);

        return [$x3, $y3, $z3];
    }

    /**
     * Adds two points on the curve
     *
     * @return FiniteField[]
     */
    public function addPoint(array $p, array $q)
    {
        if (!isset($this->factory)) {
            throw new \RuntimeException('setModulo needs to be called before this method');
        }

        if (!count($p) || !count($q)) {
            if (count($q)) {
                return $q;
            }
            if (count($p)) {
                return $p;
            }
            return [];
        }

        if (!isset($p[2]) || !isset($q[2])) {
            throw new \RuntimeException('Affine coordinates need to be manually converted to "Jacobi" coordinates or vice versa');
        }

        if ($p[0]->equals($q[0])) {
            return !$p[1]->equals($q[1]) ? [] : $this->doublePoint($p);
        }

        // from https://tools.ietf.org/html/rfc8032#page-17

        list($x1, $y1, $z1) = $p;
        list($x2, $y2, $z2) = $q;

        $a = $z1->multiply($z2);
        $b = $a->multiply($a);
        $c = $x1->multiply($x2);
        $d = $y1->multiply($y2);
        $e = $this->d->multiply($c)->multiply($d);
        $f = $b->subtract($e);
        $g = $b->add($e);
        $h = $x1->add($y1)->multiply($x2->add($y2));

        $x3 = $a->multiply($f)->multiply($h->subtract($c)->subtract($d));
        $y3 = $a->multiply($g)->multiply($d->subtract($c));
        $z3 = $f->multiply($g);

        return [$x3, $y3, $z3];
    }
}
<?php

/**
 * brainpoolP160r1
 *
 * PHP version 5 and 7
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2017 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://pear.php.net/package/Math_BigInteger
 */

namespace phpseclib3\Crypt\EC\Curves;

use phpseclib3\Crypt\EC\BaseCurves\Prime;
use phpseclib3\Math\BigInteger;

class brainpoolP160r1 extends Prime
{
    public function __construct()
    {
        $this->setModulo(new BigInteger('E95E4A5F737059DC60DFC7AD95B3D8139515620F', 16));
        $this->setCoefficients(
            new BigInteger('340E7BE2A280EB74E2BE61BADA745D97E8F7C300', 16),
            new BigInteger('1E589A8595423412134FAA2DBDEC95C8D8675E58', 16)
        );
        $this->setBasePoint(
            new BigInteger('BED5AF16EA3F6A4F62938C4631EB5AF7BDBCDBC3', 16),
            new BigInteger('1667CB477A1A8EC338F94741669C976316DA6321', 16)
        );
        $this->setOrder(new BigInteger('E95E4A5F737059DC60DF5991D45029409E60FC09', 16));
    }
}
<?php

/**
 * brainpoolP160t1
 *
 * This curve is a twisted version of brainpoolP160r1 with A = -3. With brainpool,
 * the curves ending in r1 are the "regular" curves and the curves ending in "t1"
 * are the twisted version of the r1 curves. Per https://tools.ietf.org/html/rfc5639#page-7
 * you can convert a point on an r1 curve to a point on a t1 curve thusly:
 *
 *     F(x,y) := (x*Z^2, y*Z^3)
 *
 * The advantage of A = -3 is that some of the point doubling and point addition can be
 * slightly optimized. See http://hyperelliptic.org/EFD/g1p/auto-shortw-projective-3.html
 * vs http://hyperelliptic.org/EFD/g1p/auto-shortw-projective.html for example.
 *
 * phpseclib does not currently take advantage of this optimization opportunity
 *
 * PHP version 5 and 7
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2017 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://pear.php.net/package/Math_BigInteger
 */

namespace phpseclib3\Crypt\EC\Curves;

use phpseclib3\Crypt\EC\BaseCurves\Prime;
use phpseclib3\Math\BigInteger;

class brainpoolP160t1 extends Prime
{
    public function __construct()
    {
        $this->setModulo(new BigInteger('E95E4A5F737059DC60DFC7AD95B3D8139515620F', 16));
        $this->setCoefficients(
            new BigInteger('E95E4A5F737059DC60DFC7AD95B3D8139515620C', 16), // eg. -3
            new BigInteger('7A556B6DAE535B7B51ED2C4D7DAA7A0B5C55F380', 16)
        );
        $this->setBasePoint(
            new BigInteger('B199B13B9B34EFC1397E64BAEB05ACC265FF2378', 16),
            new BigInteger('ADD6718B7C7C1961F0991B842443772152C9E0AD', 16)
        );
        $this->setOrder(new BigInteger('E95E4A5F737059DC60DF5991D45029409E60FC09', 16));
    }
}
<?php

/**
 * brainpoolP192r1
 *
 * PHP version 5 and 7
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2017 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://pear.php.net/package/Math_BigInteger
 */

namespace phpseclib3\Crypt\EC\Curves;

use phpseclib3\Crypt\EC\BaseCurves\Prime;
use phpseclib3\Math\BigInteger;

class brainpoolP192r1 extends Prime
{
    public function __construct()
    {
        $this->setModulo(new BigInteger('C302F41D932A36CDA7A3463093D18DB78FCE476DE1A86297', 16));
        $this->setCoefficients(
            new BigInteger('6A91174076B1E0E19C39C031FE8685C1CAE040E5C69A28EF', 16),
            new BigInteger('469A28EF7C28CCA3DC721D044F4496BCCA7EF4146FBF25C9', 16)
        );
        $this->setBasePoint(
            new BigInteger('C0A0647EAAB6A48753B033C56CB0F0900A2F5C4853375FD6', 16),
            new BigInteger('14B690866ABD5BB88B5F4828C1490002E6773FA2FA299B8F', 16)
        );
        $this->setOrder(new BigInteger('C302F41D932A36CDA7A3462F9E9E916B5BE8F1029AC4ACC1', 16));
    }
}
<?php

/**
 * brainpoolP192t1
 *
 * PHP version 5 and 7
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2017 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://pear.php.net/package/Math_BigInteger
 */

namespace phpseclib3\Crypt\EC\Curves;

use phpseclib3\Crypt\EC\BaseCurves\Prime;
use phpseclib3\Math\BigInteger;

class brainpoolP192t1 extends Prime
{
    public function __construct()
    {
        $this->setModulo(new BigInteger('C302F41D932A36CDA7A3463093D18DB78FCE476DE1A86297', 16));
        $this->setCoefficients(
            new BigInteger('C302F41D932A36CDA7A3463093D18DB78FCE476DE1A86294', 16), // eg. -3
            new BigInteger('13D56FFAEC78681E68F9DEB43B35BEC2FB68542E27897B79', 16)
        );
        $this->setBasePoint(
            new BigInteger('3AE9E58C82F63C30282E1FE7BBF43FA72C446AF6F4618129', 16),
            new BigInteger('097E2C5667C2223A902AB5CA449D0084B7E5B3DE7CCC01C9', 16)
        );
        $this->setOrder(new BigInteger('C302F41D932A36CDA7A3462F9E9E916B5BE8F1029AC4ACC1', 16));
    }
}
<?php

/**
 * brainpoolP224r1
 *
 * PHP version 5 and 7
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2017 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://pear.php.net/package/Math_BigInteger
 */

namespace phpseclib3\Crypt\EC\Curves;

use phpseclib3\Crypt\EC\BaseCurves\Prime;
use phpseclib3\Math\BigInteger;

class brainpoolP224r1 extends Prime
{
    public function __construct()
    {
        $this->setModulo(new BigInteger('D7C134AA264366862A18302575D1D787B09F075797DA89F57EC8C0FF', 16));
        $this->setCoefficients(
            new BigInteger('68A5E62CA9CE6C1C299803A6C1530B514E182AD8B0042A59CAD29F43', 16),
            new BigInteger('2580F63CCFE44138870713B1A92369E33E2135D266DBB372386C400B', 16)
        );
        $this->setBasePoint(
            new BigInteger('0D9029AD2C7E5CF4340823B2A87DC68C9E4CE3174C1E6EFDEE12C07D', 16),
            new BigInteger('58AA56F772C0726F24C6B89E4ECDAC24354B9E99CAA3F6D3761402CD', 16)
        );
        $this->setOrder(new BigInteger('D7C134AA264366862A18302575D0FB98D116BC4B6DDEBCA3A5A7939F', 16));
    }
}
<?php

/**
 * brainpoolP224t1
 *
 * PHP version 5 and 7
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2017 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://pear.php.net/package/Math_BigInteger
 */

namespace phpseclib3\Crypt\EC\Curves;

use phpseclib3\Crypt\EC\BaseCurves\Prime;
use phpseclib3\Math\BigInteger;

class brainpoolP224t1 extends Prime
{
    public function __construct()
    {
        $this->setModulo(new BigInteger('D7C134AA264366862A18302575D1D787B09F075797DA89F57EC8C0FF', 16));
        $this->setCoefficients(
            new BigInteger('D7C134AA264366862A18302575D1D787B09F075797DA89F57EC8C0FC', 16), // eg. -3
            new BigInteger('4B337D934104CD7BEF271BF60CED1ED20DA14C08B3BB64F18A60888D', 16)
        );
        $this->setBasePoint(
            new BigInteger('6AB1E344CE25FF3896424E7FFE14762ECB49F8928AC0C76029B4D580', 16),
            new BigInteger('0374E9F5143E568CD23F3F4D7C0D4B1E41C8CC0D1C6ABD5F1A46DB4C', 16)
        );
        $this->setOrder(new BigInteger('D7C134AA264366862A18302575D0FB98D116BC4B6DDEBCA3A5A7939F', 16));
    }
}
<?php

/**
 * brainpoolP256r1
 *
 * PHP version 5 and 7
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2017 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://pear.php.net/package/Math_BigInteger
 */

namespace phpseclib3\Crypt\EC\Curves;

use phpseclib3\Crypt\EC\BaseCurves\Prime;
use phpseclib3\Math\BigInteger;

class brainpoolP256r1 extends Prime
{
    public function __construct()
    {
        $this->setModulo(new BigInteger('A9FB57DBA1EEA9BC3E660A909D838D726E3BF623D52620282013481D1F6E5377', 16));
        $this->setCoefficients(
            new BigInteger('7D5A0975FC2C3057EEF67530417AFFE7FB8055C126DC5C6CE94A4B44F330B5D9', 16),
            new BigInteger('26DC5C6CE94A4B44F330B5D9BBD77CBF958416295CF7E1CE6BCCDC18FF8C07B6', 16)
        );
        $this->setBasePoint(
            new BigInteger('8BD2AEB9CB7E57CB2C4B482FFC81B7AFB9DE27E1E3BD23C23A4453BD9ACE3262', 16),
            new BigInteger('547EF835C3DAC4FD97F8461A14611DC9C27745132DED8E545C1D54C72F046997', 16)
        );
        $this->setOrder(new BigInteger('A9FB57DBA1EEA9BC3E660A909D838D718C397AA3B561A6F7901E0E82974856A7', 16));
    }
}
<?php

/**
 * brainpoolP256t1
 *
 * PHP version 5 and 7
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2017 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://pear.php.net/package/Math_BigInteger
 */

namespace phpseclib3\Crypt\EC\Curves;

use phpseclib3\Crypt\EC\BaseCurves\Prime;
use phpseclib3\Math\BigInteger;

class brainpoolP256t1 extends Prime
{
    public function __construct()
    {
        $this->setModulo(new BigInteger('A9FB57DBA1EEA9BC3E660A909D838D726E3BF623D52620282013481D1F6E5377', 16));
        $this->setCoefficients(
            new BigInteger('A9FB57DBA1EEA9BC3E660A909D838D726E3BF623D52620282013481D1F6E5374', 16), // eg. -3
            new BigInteger('662C61C430D84EA4FE66A7733D0B76B7BF93EBC4AF2F49256AE58101FEE92B04', 16)
        );
        $this->setBasePoint(
            new BigInteger('A3E8EB3CC1CFE7B7732213B23A656149AFA142C47AAFBC2B79A191562E1305F4', 16),
            new BigInteger('2D996C823439C56D7F7B22E14644417E69BCB6DE39D027001DABE8F35B25C9BE', 16)
        );
        $this->setOrder(new BigInteger('A9FB57DBA1EEA9BC3E660A909D838D718C397AA3B561A6F7901E0E82974856A7', 16));
    }
}
<?php

/**
 * brainpoolP320r1
 *
 * PHP version 5 and 7
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2017 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://pear.php.net/package/Math_BigInteger
 */

namespace phpseclib3\Crypt\EC\Curves;

use phpseclib3\Crypt\EC\BaseCurves\Prime;
use phpseclib3\Math\BigInteger;

class brainpoolP320r1 extends Prime
{
    public function __construct()
    {
        $this->setModulo(new BigInteger('D35E472036BC4FB7E13C785ED201E065F98FCFA6F6F40DEF4F9' .
                                        '2B9EC7893EC28FCD412B1F1B32E27', 16));
        $this->setCoefficients(
            new BigInteger('3EE30B568FBAB0F883CCEBD46D3F3BB8A2A73513F5EB79DA66190EB085FFA9F4' .
                           '92F375A97D860EB4', 16),
            new BigInteger('520883949DFDBC42D3AD198640688A6FE13F41349554B49ACC31DCCD88453981' .
                           '6F5EB4AC8FB1F1A6', 16)
        );
        $this->setBasePoint(
            new BigInteger('43BD7E9AFB53D8B85289BCC48EE5BFE6F20137D10A087EB6E7871E2A10A599C7' .
                           '10AF8D0D39E20611', 16),
            new BigInteger('14FDD05545EC1CC8AB4093247F77275E0743FFED117182EAA9C77877AAAC6AC7' .
                           'D35245D1692E8EE1', 16)
        );
        $this->setOrder(new BigInteger('D35E472036BC4FB7E13C785ED201E065F98FCFA5B68F12A32D4' .
                                       '82EC7EE8658E98691555B44C59311', 16));
    }
}
<?php

/**
 * brainpoolP320t1
 *
 * PHP version 5 and 7
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2017 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://pear.php.net/package/Math_BigInteger
 */

namespace phpseclib3\Crypt\EC\Curves;

use phpseclib3\Crypt\EC\BaseCurves\Prime;
use phpseclib3\Math\BigInteger;

class brainpoolP320t1 extends Prime
{
    public function __construct()
    {
        $this->setModulo(new BigInteger('D35E472036BC4FB7E13C785ED201E065F98FCFA6F6F40DEF4F9' .
                                        '2B9EC7893EC28FCD412B1F1B32E27', 16));
        $this->setCoefficients(
            new BigInteger('D35E472036BC4FB7E13C785ED201E065F98FCFA6F6F40DEF4F92B9EC7893EC28' .
                           'FCD412B1F1B32E24', 16), // eg. -3
            new BigInteger('A7F561E038EB1ED560B3D147DB782013064C19F27ED27C6780AAF77FB8A547CE' .
                           'B5B4FEF422340353', 16)
        );
        $this->setBasePoint(
            new BigInteger('925BE9FB01AFC6FB4D3E7D4990010F813408AB106C4F09CB7EE07868CC136FFF' .
                           '3357F624A21BED52', 16),
            new BigInteger('63BA3A7A27483EBF6671DBEF7ABB30EBEE084E58A0B077AD42A5A0989D1EE71B' .
                           '1B9BC0455FB0D2C3', 16)
        );
        $this->setOrder(new BigInteger('D35E472036BC4FB7E13C785ED201E065F98FCFA5B68F12A32D4' .
                                       '82EC7EE8658E98691555B44C59311', 16));
    }
}
<?php

/**
 * brainpoolP384r1
 *
 * PHP version 5 and 7
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2017 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://pear.php.net/package/Math_BigInteger
 */

namespace phpseclib3\Crypt\EC\Curves;

use phpseclib3\Crypt\EC\BaseCurves\Prime;
use phpseclib3\Math\BigInteger;

class brainpoolP384r1 extends Prime
{
    public function __construct()
    {
        $this->setModulo(new BigInteger(
            '8CB91E82A3386D280F5D6F7E50E641DF152F7109ED5456B412B1DA197FB71123ACD3A729901D1A7' .
            '1874700133107EC53',
            16
        ));
        $this->setCoefficients(
            new BigInteger(
                '7BC382C63D8C150C3C72080ACE05AFA0C2BEA28E4FB22787139165EFBA91F90F8AA5814A503' .
                'AD4EB04A8C7DD22CE2826',
                16
            ),
            new BigInteger(
                '4A8C7DD22CE28268B39B55416F0447C2FB77DE107DCD2A62E880EA53EEB62D57CB4390295DB' .
                'C9943AB78696FA504C11',
                16
            )
        );
        $this->setBasePoint(
            new BigInteger(
                '1D1C64F068CF45FFA2A63A81B7C13F6B8847A3E77EF14FE3DB7FCAFE0CBD10E8E826E03436D' .
                '646AAEF87B2E247D4AF1E',
                16
            ),
            new BigInteger(
                '8ABE1D7520F9C2A45CB1EB8E95CFD55262B70B29FEEC5864E19C054FF99129280E464621779' .
                '1811142820341263C5315',
                16
            )
        );
        $this->setOrder(new BigInteger(
            '8CB91E82A3386D280F5D6F7E50E641DF152F7109ED5456B31F166E6CAC0425A7CF3AB6AF6B7FC31' .
            '03B883202E9046565',
            16
        ));
    }
}
<?php

/**
 * brainpoolP384t1
 *
 * PHP version 5 and 7
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2017 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://pear.php.net/package/Math_BigInteger
 */

namespace phpseclib3\Crypt\EC\Curves;

use phpseclib3\Crypt\EC\BaseCurves\Prime;
use phpseclib3\Math\BigInteger;

class brainpoolP384t1 extends Prime
{
    public function __construct()
    {
        $this->setModulo(new BigInteger(
            '8CB91E82A3386D280F5D6F7E50E641DF152F7109ED5456B412B1DA197FB71123ACD3A729901D1A7' .
            '1874700133107EC53',
            16
        ));
        $this->setCoefficients(
            new BigInteger(
                '8CB91E82A3386D280F5D6F7E50E641DF152F7109ED5456B412B1DA197FB71123ACD3A729901' .
                'D1A71874700133107EC50',
                16
            ), // eg. -3
            new BigInteger(
                '7F519EADA7BDA81BD826DBA647910F8C4B9346ED8CCDC64E4B1ABD11756DCE1D2074AA263B8' .
                '8805CED70355A33B471EE',
                16
            )
        );
        $this->setBasePoint(
            new BigInteger(
                '18DE98B02DB9A306F2AFCD7235F72A819B80AB12EBD653172476FECD462AABFFC4FF191B946' .
                'A5F54D8D0AA2F418808CC',
                16
            ),
            new BigInteger(
                '25AB056962D30651A114AFD2755AD336747F93475B7A1FCA3B88F2B6A208CCFE469408584DC' .
                '2B2912675BF5B9E582928',
                16
            )
        );
        $this->setOrder(new BigInteger(
            '8CB91E82A3386D280F5D6F7E50E641DF152F7109ED5456B31F166E6CAC0425A7CF3AB6AF6B7FC31' .
            '03B883202E9046565',
            16
        ));
    }
}
<?php

/**
 * brainpoolP512r1
 *
 * PHP version 5 and 7
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2017 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://pear.php.net/package/Math_BigInteger
 */

namespace phpseclib3\Crypt\EC\Curves;

use phpseclib3\Crypt\EC\BaseCurves\Prime;
use phpseclib3\Math\BigInteger;

class brainpoolP512r1 extends Prime
{
    public function __construct()
    {
        $this->setModulo(new BigInteger(
            'AADD9DB8DBE9C48B3FD4E6AE33C9FC07CB308DB3B3C9D20ED6639CCA703308717D4D9B009BC' .
            '66842AECDA12AE6A380E62881FF2F2D82C68528AA6056583A48F3',
            16
        ));
        $this->setCoefficients(
            new BigInteger(
                '7830A3318B603B89E2327145AC234CC594CBDD8D3DF91610A83441CAEA9863BC2DED5D5AA82' .
                '53AA10A2EF1C98B9AC8B57F1117A72BF2C7B9E7C1AC4D77FC94CA',
                16
            ),
            new BigInteger(
                '3DF91610A83441CAEA9863BC2DED5D5AA8253AA10A2EF1C98B9AC8B57F1117A72BF2C7B9E7C' .
                '1AC4D77FC94CADC083E67984050B75EBAE5DD2809BD638016F723',
                16
            )
        );
        $this->setBasePoint(
            new BigInteger(
                '81AEE4BDD82ED9645A21322E9C4C6A9385ED9F70B5D916C1B43B62EEF4D0098EFF3B1F78E2D' .
                '0D48D50D1687B93B97D5F7C6D5047406A5E688B352209BCB9F822',
                16
            ),
            new BigInteger(
                '7DDE385D566332ECC0EABFA9CF7822FDF209F70024A57B1AA000C55B881F8111B2DCDE494A5' .
                'F485E5BCA4BD88A2763AED1CA2B2FA8F0540678CD1E0F3AD80892',
                16
            )
        );
        $this->setOrder(new BigInteger(
            'AADD9DB8DBE9C48B3FD4E6AE33C9FC07CB308DB3B3C9D20ED6639CCA70330870553E5C414CA' .
            '92619418661197FAC10471DB1D381085DDADDB58796829CA90069',
            16
        ));
    }
}
<?php

/**
 * brainpoolP512t1
 *
 * PHP version 5 and 7
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2017 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://pear.php.net/package/Math_BigInteger
 */

namespace phpseclib3\Crypt\EC\Curves;

use phpseclib3\Crypt\EC\BaseCurves\Prime;
use phpseclib3\Math\BigInteger;

class brainpoolP512t1 extends Prime
{
    public function __construct()
    {
        $this->setModulo(new BigInteger(
            'AADD9DB8DBE9C48B3FD4E6AE33C9FC07CB308DB3B3C9D20ED6639CCA703308717D4D9B009BC' .
            '66842AECDA12AE6A380E62881FF2F2D82C68528AA6056583A48F3',
            16
        ));
        $this->setCoefficients(
            new BigInteger(
                'AADD9DB8DBE9C48B3FD4E6AE33C9FC07CB308DB3B3C9D20ED6639CCA703308717D4D9B009BC' .
                '66842AECDA12AE6A380E62881FF2F2D82C68528AA6056583A48F0',
                16
            ), // eg. -3
            new BigInteger(
                '7CBBBCF9441CFAB76E1890E46884EAE321F70C0BCB4981527897504BEC3E36A62BCDFA23049' .
                '76540F6450085F2DAE145C22553B465763689180EA2571867423E',
                16
            )
        );
        $this->setBasePoint(
            new BigInteger(
                '640ECE5C12788717B9C1BA06CBC2A6FEBA85842458C56DDE9DB1758D39C0313D82BA51735CD' .
                'B3EA499AA77A7D6943A64F7A3F25FE26F06B51BAA2696FA9035DA',
                16
            ),
            new BigInteger(
                '5B534BD595F5AF0FA2C892376C84ACE1BB4E3019B71634C01131159CAE03CEE9D9932184BEE' .
                'F216BD71DF2DADF86A627306ECFF96DBB8BACE198B61E00F8B332',
                16
            )
        );
        $this->setOrder(new BigInteger(
            'AADD9DB8DBE9C48B3FD4E6AE33C9FC07CB308DB3B3C9D20ED6639CCA70330870553E5C414CA' .
            '92619418661197FAC10471DB1D381085DDADDB58796829CA90069',
            16
        ));
    }
}
<?php

/**
 * nistb233
 *
 * PHP version 5 and 7
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2017 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://pear.php.net/package/Math_BigInteger
 */

namespace phpseclib3\Crypt\EC\Curves;

final class nistb233 extends sect233r1
{
}
<?php

/**
 * nistb409
 *
 * PHP version 5 and 7
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2017 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://pear.php.net/package/Math_BigInteger
 */

namespace phpseclib3\Crypt\EC\Curves;

final class nistb409 extends sect409r1
{
}
<?php

/**
 * nistk163
 *
 * PHP version 5 and 7
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2017 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://pear.php.net/package/Math_BigInteger
 */

namespace phpseclib3\Crypt\EC\Curves;

final class nistk163 extends sect163k1
{
}
<?php

/**
 * nistk233
 *
 * PHP version 5 and 7
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2017 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://pear.php.net/package/Math_BigInteger
 */

namespace phpseclib3\Crypt\EC\Curves;

final class nistk233 extends sect233k1
{
}
<?php

/**
 * sect283k1
 *
 * PHP version 5 and 7
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2017 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://pear.php.net/package/Math_BigInteger
 */

namespace phpseclib3\Crypt\EC\Curves;

final class nistk283 extends sect283k1
{
}
<?php

/**
 * nistk409
 *
 * PHP version 5 and 7
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2017 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://pear.php.net/package/Math_BigInteger
 */

namespace phpseclib3\Crypt\EC\Curves;

final class nistk409 extends sect409k1
{
}
<?php

/**
 * nistp192
 *
 * PHP version 5 and 7
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2017 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://pear.php.net/package/Math_BigInteger
 */

namespace phpseclib3\Crypt\EC\Curves;

final class nistp192 extends secp192r1
{
}
<?php

/**
 * nistp224
 *
 * PHP version 5 and 7
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2017 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://pear.php.net/package/Math_BigInteger
 */

namespace phpseclib3\Crypt\EC\Curves;

final class nistp224 extends secp224r1
{
}
<?php

/**
 * nistp256
 *
 * PHP version 5 and 7
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2017 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://pear.php.net/package/Math_BigInteger
 */

namespace phpseclib3\Crypt\EC\Curves;

final class nistp256 extends secp256r1
{
}
<?php

/**
 * nistp384
 *
 * PHP version 5 and 7
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2017 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://pear.php.net/package/Math_BigInteger
 */

namespace phpseclib3\Crypt\EC\Curves;

final class nistp384 extends secp384r1
{
}
<?php

/**
 * nistp521
 *
 * PHP version 5 and 7
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2017 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://pear.php.net/package/Math_BigInteger
 */

namespace phpseclib3\Crypt\EC\Curves;

final class nistp521 extends secp521r1
{
}
<?php

/**
 * nistt571
 *
 * PHP version 5 and 7
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2017 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://pear.php.net/package/Math_BigInteger
 */

namespace phpseclib3\Crypt\EC\Curves;

final class nistt571 extends sect571k1
{
}
<?php

/**
 * prime192v1
 *
 * PHP version 5 and 7
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2017 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://pear.php.net/package/Math_BigInteger
 */

namespace phpseclib3\Crypt\EC\Curves;

final class prime192v1 extends secp192r1
{
}
<?php

/**
 * prime192v2
 *
 * PHP version 5 and 7
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2017 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://pear.php.net/package/Math_BigInteger
 */

namespace phpseclib3\Crypt\EC\Curves;

use phpseclib3\Crypt\EC\BaseCurves\Prime;
use phpseclib3\Math\BigInteger;

class prime192v2 extends Prime
{
    public function __construct()
    {
        $this->setModulo(new BigInteger('FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFF', 16));
        $this->setCoefficients(
            new BigInteger('FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFC', 16),
            new BigInteger('CC22D6DFB95C6B25E49C0D6364A4E5980C393AA21668D953', 16)
        );
        $this->setBasePoint(
            new BigInteger('EEA2BAE7E1497842F2DE7769CFE9C989C072AD696F48034A', 16),
            new BigInteger('6574D11D69B6EC7A672BB82A083DF2F2B0847DE970B2DE15', 16)
        );
        $this->setOrder(new BigInteger('FFFFFFFFFFFFFFFFFFFFFFFE5FB1A724DC80418648D8DD31', 16));
    }
}
<?php

/**
 * prime192v3
 *
 * PHP version 5 and 7
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2017 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://pear.php.net/package/Math_BigInteger
 */

namespace phpseclib3\Crypt\EC\Curves;

use phpseclib3\Crypt\EC\BaseCurves\Prime;
use phpseclib3\Math\BigInteger;

class prime192v3 extends Prime
{
    public function __construct()
    {
        $this->setModulo(new BigInteger('FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFF', 16));
        $this->setCoefficients(
            new BigInteger('FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFC', 16),
            new BigInteger('22123DC2395A05CAA7423DAECCC94760A7D462256BD56916', 16)
        );
        $this->setBasePoint(
            new BigInteger('7D29778100C65A1DA1783716588DCE2B8B4AEE8E228F1896', 16),
            new BigInteger('38A90F22637337334B49DCB66A6DC8F9978ACA7648A943B0', 16)
        );
        $this->setOrder(new BigInteger('FFFFFFFFFFFFFFFFFFFFFFFF7A62D031C83F4294F640EC13', 16));
    }
}
<?php

/**
 * prime239v1
 *
 * PHP version 5 and 7
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2017 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://pear.php.net/package/Math_BigInteger
 */

namespace phpseclib3\Crypt\EC\Curves;

use phpseclib3\Crypt\EC\BaseCurves\Prime;
use phpseclib3\Math\BigInteger;

class prime239v1 extends Prime
{
    public function __construct()
    {
        $this->setModulo(new BigInteger('7FFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFF8000000000007FFFFFFFFFFF', 16));
        $this->setCoefficients(
            new BigInteger('7FFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFF8000000000007FFFFFFFFFFC', 16),
            new BigInteger('6B016C3BDCF18941D0D654921475CA71A9DB2FB27D1D37796185C2942C0A', 16)
        );
        $this->setBasePoint(
            new BigInteger('0FFA963CDCA8816CCC33B8642BEDF905C3D358573D3F27FBBD3B3CB9AAAF', 16),
            new BigInteger('7DEBE8E4E90A5DAE6E4054CA530BA04654B36818CE226B39FCCB7B02F1AE', 16)
        );
        $this->setOrder(new BigInteger('7FFFFFFFFFFFFFFFFFFFFFFF7FFFFF9E5E9A9F5D9071FBD1522688909D0B', 16));
    }
}
<?php

/**
 * prime239v2
 *
 * PHP version 5 and 7
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2017 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://pear.php.net/package/Math_BigInteger
 */

namespace phpseclib3\Crypt\EC\Curves;

use phpseclib3\Crypt\EC\BaseCurves\Prime;
use phpseclib3\Math\BigInteger;

class prime239v2 extends Prime
{
    public function __construct()
    {
        $this->setModulo(new BigInteger('7FFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFF8000000000007FFFFFFFFFFF', 16));
        $this->setCoefficients(
            new BigInteger('7FFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFF8000000000007FFFFFFFFFFC', 16),
            new BigInteger('617FAB6832576CBBFED50D99F0249C3FEE58B94BA0038C7AE84C8C832F2C', 16)
        );
        $this->setBasePoint(
            new BigInteger('38AF09D98727705120C921BB5E9E26296A3CDCF2F35757A0EAFD87B830E7', 16),
            new BigInteger('5B0125E4DBEA0EC7206DA0FC01D9B081329FB555DE6EF460237DFF8BE4BA', 16)
        );
        $this->setOrder(new BigInteger('7FFFFFFFFFFFFFFFFFFFFFFF800000CFA7E8594377D414C03821BC582063', 16));
    }
}
<?php

/**
 * prime239v3
 *
 * PHP version 5 and 7
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2017 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://pear.php.net/package/Math_BigInteger
 */

namespace phpseclib3\Crypt\EC\Curves;

use phpseclib3\Crypt\EC\BaseCurves\Prime;
use phpseclib3\Math\BigInteger;

class prime239v3 extends Prime
{
    public function __construct()
    {
        $this->setModulo(new BigInteger('7FFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFF8000000000007FFFFFFFFFFF', 16));
        $this->setCoefficients(
            new BigInteger('7FFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFF8000000000007FFFFFFFFFFC', 16),
            new BigInteger('255705FA2A306654B1F4CB03D6A750A30C250102D4988717D9BA15AB6D3E', 16)
        );
        $this->setBasePoint(
            new BigInteger('6768AE8E18BB92CFCF005C949AA2C6D94853D0E660BBF854B1C9505FE95A', 16),
            new BigInteger('1607E6898F390C06BC1D552BAD226F3B6FCFE48B6E818499AF18E3ED6CF3', 16)
        );
        $this->setOrder(new BigInteger('7FFFFFFFFFFFFFFFFFFFFFFF7FFFFF975DEB41B3A6057C3C432146526551', 16));
    }
}
<?php

/**
 * prime256v1
 *
 * PHP version 5 and 7
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2017 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://pear.php.net/package/Math_BigInteger
 */

namespace phpseclib3\Crypt\EC\Curves;

final class prime256v1 extends secp256r1
{
}
<?php

/**
 * secp112r1
 *
 * PHP version 5 and 7
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2017 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://pear.php.net/package/Math_BigInteger
 */

namespace phpseclib3\Crypt\EC\Curves;

use phpseclib3\Crypt\EC\BaseCurves\Prime;
use phpseclib3\Math\BigInteger;

class secp112r1 extends Prime
{
    public function __construct()
    {
        $this->setModulo(new BigInteger('DB7C2ABF62E35E668076BEAD208B', 16));
        $this->setCoefficients(
            new BigInteger('DB7C2ABF62E35E668076BEAD2088', 16),
            new BigInteger('659EF8BA043916EEDE8911702B22', 16)
        );
        $this->setBasePoint(
            new BigInteger('09487239995A5EE76B55F9C2F098', 16),
            new BigInteger('A89CE5AF8724C0A23E0E0FF77500', 16)
        );
        $this->setOrder(new BigInteger('DB7C2ABF62E35E7628DFAC6561C5', 16));
    }
}
<?php

/**
 * secp112r2
 *
 * PHP version 5 and 7
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2017 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://pear.php.net/package/Math_BigInteger
 */

namespace phpseclib3\Crypt\EC\Curves;

use phpseclib3\Crypt\EC\BaseCurves\Prime;
use phpseclib3\Math\BigInteger;

class secp112r2 extends Prime
{
    public function __construct()
    {
        // same modulo as secp112r1
        $this->setModulo(new BigInteger('DB7C2ABF62E35E668076BEAD208B', 16));
        $this->setCoefficients(
            new BigInteger('6127C24C05F38A0AAAF65C0EF02C', 16),
            new BigInteger('51DEF1815DB5ED74FCC34C85D709', 16)
        );
        $this->setBasePoint(
            new BigInteger('4BA30AB5E892B4E1649DD0928643', 16),
            new BigInteger('ADCD46F5882E3747DEF36E956E97', 16)
        );
        $this->setOrder(new BigInteger('36DF0AAFD8B8D7597CA10520D04B', 16));
    }
}
<?php

/**
 * secp128r1
 *
 * PHP version 5 and 7
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2017 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://pear.php.net/package/Math_BigInteger
 */

namespace phpseclib3\Crypt\EC\Curves;

use phpseclib3\Crypt\EC\BaseCurves\Prime;
use phpseclib3\Math\BigInteger;

class secp128r1 extends Prime
{
    public function __construct()
    {
        $this->setModulo(new BigInteger('FFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFF', 16));
        $this->setCoefficients(
            new BigInteger('FFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFC', 16),
            new BigInteger('E87579C11079F43DD824993C2CEE5ED3', 16)
        );
        $this->setBasePoint(
            new BigInteger('161FF7528B899B2D0C28607CA52C5B86', 16),
            new BigInteger('CF5AC8395BAFEB13C02DA292DDED7A83', 16)
        );
        $this->setOrder(new BigInteger('FFFFFFFE0000000075A30D1B9038A115', 16));
    }
}
<?php

/**
 * secp128r2
 *
 * PHP version 5 and 7
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2017 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://pear.php.net/package/Math_BigInteger
 */

namespace phpseclib3\Crypt\EC\Curves;

use phpseclib3\Crypt\EC\BaseCurves\Prime;
use phpseclib3\Math\BigInteger;

class secp128r2 extends Prime
{
    public function __construct()
    {
        // same as secp128r1
        $this->setModulo(new BigInteger('FFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFF', 16));
        $this->setCoefficients(
            new BigInteger('D6031998D1B3BBFEBF59CC9BBFF9AEE1', 16),
            new BigInteger('5EEEFCA380D02919DC2C6558BB6D8A5D', 16)
        );
        $this->setBasePoint(
            new BigInteger('7B6AA5D85E572983E6FB32A7CDEBC140', 16),
            new BigInteger('27B6916A894D3AEE7106FE805FC34B44', 16)
        );
        $this->setOrder(new BigInteger('3FFFFFFF7FFFFFFFBE0024720613B5A3', 16));
    }
}
<?php

/**
 * secp160k1
 *
 * PHP version 5 and 7
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2017 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://pear.php.net/package/Math_BigInteger
 */

namespace phpseclib3\Crypt\EC\Curves;

use phpseclib3\Crypt\EC\BaseCurves\KoblitzPrime;
use phpseclib3\Math\BigInteger;

class secp160k1 extends KoblitzPrime
{
    public function __construct()
    {
        // same as secp160r2
        $this->setModulo(new BigInteger('FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFAC73', 16));
        $this->setCoefficients(
            new BigInteger('0000000000000000000000000000000000000000', 16),
            new BigInteger('0000000000000000000000000000000000000007', 16)
        );
        $this->setBasePoint(
            new BigInteger('3B4C382CE37AA192A4019E763036F4F5DD4D7EBB', 16),
            new BigInteger('938CF935318FDCED6BC28286531733C3F03C4FEE', 16)
        );
        $this->setOrder(new BigInteger('0100000000000000000001B8FA16DFAB9ACA16B6B3', 16));

        $this->basis = [];
        $this->basis[] = [
            'a' => new BigInteger('0096341F1138933BC2F505', -16),
            'b' => new BigInteger('FF6E9D0418C67BB8D5F562', -16)
        ];
        $this->basis[] = [
            'a' => new BigInteger('01BDCB3A09AAAABEAFF4A8', -16),
            'b' => new BigInteger('04D12329FF0EF498EA67', -16)
        ];
        $this->beta = $this->factory->newInteger(new BigInteger('645B7345A143464942CC46D7CF4D5D1E1E6CBB68', -16));
    }
}
<?php

/**
 * secp160r1
 *
 * PHP version 5 and 7
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2017 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://pear.php.net/package/Math_BigInteger
 */

namespace phpseclib3\Crypt\EC\Curves;

use phpseclib3\Crypt\EC\BaseCurves\Prime;
use phpseclib3\Math\BigInteger;

class secp160r1 extends Prime
{
    public function __construct()
    {
        $this->setModulo(new BigInteger('FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFF', 16));
        $this->setCoefficients(
            new BigInteger('FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFC', 16),
            new BigInteger('1C97BEFC54BD7A8B65ACF89F81D4D4ADC565FA45', 16)
        );
        $this->setBasePoint(
            new BigInteger('4A96B5688EF573284664698968C38BB913CBFC82', 16),
            new BigInteger('23A628553168947D59DCC912042351377AC5FB32', 16)
        );
        $this->setOrder(new BigInteger('0100000000000000000001F4C8F927AED3CA752257', 16));
    }
}
<?php

/**
 * secp160r2
 *
 * PHP version 5 and 7
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2017 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://pear.php.net/package/Math_BigInteger
 */

namespace phpseclib3\Crypt\EC\Curves;

use phpseclib3\Crypt\EC\BaseCurves\Prime;
use phpseclib3\Math\BigInteger;

class secp160r2 extends Prime
{
    public function __construct()
    {
        // same as secp160k1
        $this->setModulo(new BigInteger('FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFAC73', 16));
        $this->setCoefficients(
            new BigInteger('FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFAC70', 16),
            new BigInteger('B4E134D3FB59EB8BAB57274904664D5AF50388BA', 16)
        );
        $this->setBasePoint(
            new BigInteger('52DCB034293A117E1F4FF11B30F7199D3144CE6D', 16),
            new BigInteger('FEAFFEF2E331F296E071FA0DF9982CFEA7D43F2E', 16)
        );
        $this->setOrder(new BigInteger('0100000000000000000000351EE786A818F3A1A16B', 16));
    }
}
<?php

/**
 * secp192k1
 *
 * PHP version 5 and 7
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2017 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://pear.php.net/package/Math_BigInteger
 */

namespace phpseclib3\Crypt\EC\Curves;

use phpseclib3\Crypt\EC\BaseCurves\KoblitzPrime;
use phpseclib3\Math\BigInteger;

class secp192k1 extends KoblitzPrime
{
    public function __construct()
    {
        $this->setModulo(new BigInteger('FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFEE37', 16));
        $this->setCoefficients(
            new BigInteger('000000000000000000000000000000000000000000000000', 16),
            new BigInteger('000000000000000000000000000000000000000000000003', 16)
        );
        $this->setBasePoint(
            new BigInteger('DB4FF10EC057E9AE26B07D0280B7F4341DA5D1B1EAE06C7D', 16),
            new BigInteger('9B2F2F6D9C5628A7844163D015BE86344082AA88D95E2F9D', 16)
        );
        $this->setOrder(new BigInteger('FFFFFFFFFFFFFFFFFFFFFFFE26F2FC170F69466A74DEFD8D', 16));

        $this->basis = [];
        $this->basis[] = [
            'a' => new BigInteger('00B3FB3400DEC5C4ADCEB8655C', -16),
            'b' => new BigInteger('8EE96418CCF4CFC7124FDA0F', -16)
        ];
        $this->basis[] = [
            'a' => new BigInteger('01D90D03E8F096B9948B20F0A9', -16),
            'b' => new BigInteger('42E49819ABBA9474E1083F6B', -16)
        ];
        $this->beta = $this->factory->newInteger(new BigInteger('447A96E6C647963E2F7809FEAAB46947F34B0AA3CA0BBA74', -16));
    }
}
<?php

/**
 * secp192r1
 *
 * This is the NIST P-192 curve
 *
 * PHP version 5 and 7
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2017 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://pear.php.net/package/Math_BigInteger
 */

namespace phpseclib3\Crypt\EC\Curves;

use phpseclib3\Crypt\EC\BaseCurves\Prime;
use phpseclib3\Math\BigInteger;

class secp192r1 extends Prime
{
    public function __construct()
    {
        $modulo = new BigInteger('FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFF', 16);
        $this->setModulo($modulo);

        // algorithm 2.27 from http://diamond.boisestate.edu/~liljanab/MATH308/GuideToECC.pdf#page=66
        /* in theory this should be faster than regular modular reductions save for one small issue.
           to convert to / from base-2**8 with BCMath you have to call bcmul() and bcdiv() a lot.
           to convert to / from base-2**8 with PHP64 you have to call base256_rshift() a lot.
           in short, converting to / from base-2**8 is pretty expensive and that expense is
           enough to offset whatever else might be gained by a simplified reduction algorithm.
           now, if PHP supported unsigned integers things might be different. no bit-shifting
           would be required for the PHP engine and it'd be a lot faster. but as is, BigInteger
           uses base-2**31 or base-2**26 depending on whether or not the system is has a 32-bit
           or a 64-bit OS.
        */
        /*
        $m_length = $this->getLengthInBytes();
        $this->setReduction(function($c) use ($m_length) {
            $cBytes = $c->toBytes();
            $className = $this->className;

            if (strlen($cBytes) > 2 * $m_length) {
                list(, $r) = $c->divide($className::$modulo);
                return $r;
            }

            $c = str_pad($cBytes, 48, "\0", STR_PAD_LEFT);
            $c = array_reverse(str_split($c, 8));

            $null = "\0\0\0\0\0\0\0\0";
            $s1 = new BigInteger($c[2] . $c[1] . $c[0], 256);
            $s2 = new BigInteger($null . $c[3] . $c[3], 256);
            $s3 = new BigInteger($c[4] . $c[4] . $null, 256);
            $s4 = new BigInteger($c[5] . $c[5] . $c[5], 256);

            $r = $s1->add($s2)->add($s3)->add($s4);
            while ($r->compare($className::$modulo) >= 0) {
                $r = $r->subtract($className::$modulo);
            }

            return $r;
        });
        */

        $this->setCoefficients(
            new BigInteger('FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFC', 16),
            new BigInteger('64210519E59C80E70FA7E9AB72243049FEB8DEECC146B9B1', 16)
        );
        $this->setBasePoint(
            new BigInteger('188DA80EB03090F67CBF20EB43A18800F4FF0AFD82FF1012', 16),
            new BigInteger('07192B95FFC8DA78631011ED6B24CDD573F977A11E794811', 16)
        );
        $this->setOrder(new BigInteger('FFFFFFFFFFFFFFFFFFFFFFFF99DEF836146BC9B1B4D22831', 16));
    }
}
<?php

/**
 * secp224k1
 *
 * PHP version 5 and 7
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2017 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://pear.php.net/package/Math_BigInteger
 */

namespace phpseclib3\Crypt\EC\Curves;

use phpseclib3\Crypt\EC\BaseCurves\KoblitzPrime;
use phpseclib3\Math\BigInteger;

class secp224k1 extends KoblitzPrime
{
    public function __construct()
    {
        $this->setModulo(new BigInteger('FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFE56D', 16));
        $this->setCoefficients(
            new BigInteger('00000000000000000000000000000000000000000000000000000000', 16),
            new BigInteger('00000000000000000000000000000000000000000000000000000005', 16)
        );
        $this->setBasePoint(
            new BigInteger('A1455B334DF099DF30FC28A169A467E9E47075A90F7E650EB6B7A45C', 16),
            new BigInteger('7E089FED7FBA344282CAFBD6F7E319F7C0B0BD59E2CA4BDB556D61A5', 16)
        );
        $this->setOrder(new BigInteger('010000000000000000000000000001DCE8D2EC6184CAF0A971769FB1F7', 16));

        $this->basis = [];
        $this->basis[] = [
            'a' => new BigInteger('00B8ADF1378A6EB73409FA6C9C637D', -16),
            'b' => new BigInteger('94730F82B358A3776A826298FA6F', -16)
        ];
        $this->basis[] = [
            'a' => new BigInteger('01DCE8D2EC6184CAF0A972769FCC8B', -16),
            'b' => new BigInteger('4D2100BA3DC75AAB747CCF355DEC', -16)
        ];
        $this->beta = $this->factory->newInteger(new BigInteger('01F178FFA4B17C89E6F73AECE2AAD57AF4C0A748B63C830947B27E04', -16));
    }
}
<?php

/**
 * secp224r1
 *
 * PHP version 5 and 7
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2017 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://pear.php.net/package/Math_BigInteger
 */

namespace phpseclib3\Crypt\EC\Curves;

use phpseclib3\Crypt\EC\BaseCurves\Prime;
use phpseclib3\Math\BigInteger;

class secp224r1 extends Prime
{
    public function __construct()
    {
        $this->setModulo(new BigInteger('FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000001', 16));
        $this->setCoefficients(
            new BigInteger('FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFE', 16),
            new BigInteger('B4050A850C04B3ABF54132565044B0B7D7BFD8BA270B39432355FFB4', 16)
        );
        $this->setBasePoint(
            new BigInteger('B70E0CBD6BB4BF7F321390B94A03C1D356C21122343280D6115C1D21', 16),
            new BigInteger('BD376388B5F723FB4C22DFE6CD4375A05A07476444D5819985007E34', 16)
        );
        $this->setOrder(new BigInteger('FFFFFFFFFFFFFFFFFFFFFFFFFFFF16A2E0B8F03E13DD29455C5C2A3D', 16));
    }
}
<?php

/**
 * secp256k1
 *
 * This is the curve used in Bitcoin
 *
 * PHP version 5 and 7
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2017 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://pear.php.net/package/Math_BigInteger
 */

namespace phpseclib3\Crypt\EC\Curves;

//use phpseclib3\Crypt\EC\BaseCurves\Prime;
use phpseclib3\Crypt\EC\BaseCurves\KoblitzPrime;
use phpseclib3\Math\BigInteger;

//class secp256k1 extends Prime
class secp256k1 extends KoblitzPrime
{
    public function __construct()
    {
        $this->setModulo(new BigInteger('FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFC2F', 16));
        $this->setCoefficients(
            new BigInteger('0000000000000000000000000000000000000000000000000000000000000000', 16),
            new BigInteger('0000000000000000000000000000000000000000000000000000000000000007', 16)
        );
        $this->setOrder(new BigInteger('FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141', 16));
        $this->setBasePoint(
            new BigInteger('79BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798', 16),
            new BigInteger('483ADA7726A3C4655DA4FBFC0E1108A8FD17B448A68554199C47D08FFB10D4B8', 16)
        );

        $this->basis = [];
        $this->basis[] = [
            'a' => new BigInteger('3086D221A7D46BCDE86C90E49284EB15', -16),
            'b' => new BigInteger('FF1BBC8129FEF177D790AB8056F5401B3D', -16)
        ];
        $this->basis[] = [
            'a' => new BigInteger('114CA50F7A8E2F3F657C1108D9D44CFD8', -16),
            'b' => new BigInteger('3086D221A7D46BCDE86C90E49284EB15', -16)
        ];
        $this->beta = $this->factory->newInteger(new BigInteger('7AE96A2B657C07106E64479EAC3434E99CF0497512F58995C1396C28719501EE', -16));
    }
}
<?php

/**
 * secp256r1
 *
 * PHP version 5 and 7
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2017 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://pear.php.net/package/Math_BigInteger
 */

namespace phpseclib3\Crypt\EC\Curves;

use phpseclib3\Crypt\EC\BaseCurves\Prime;
use phpseclib3\Math\BigInteger;

class secp256r1 extends Prime
{
    public function __construct()
    {
        $this->setModulo(new BigInteger('FFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF', 16));
        $this->setCoefficients(
            new BigInteger('FFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFC', 16),
            new BigInteger('5AC635D8AA3A93E7B3EBBD55769886BC651D06B0CC53B0F63BCE3C3E27D2604B', 16)
        );
        $this->setBasePoint(
            new BigInteger('6B17D1F2E12C4247F8BCE6E563A440F277037D812DEB33A0F4A13945D898C296', 16),
            new BigInteger('4FE342E2FE1A7F9B8EE7EB4A7C0F9E162BCE33576B315ECECBB6406837BF51F5', 16)
        );
        $this->setOrder(new BigInteger('FFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC632551', 16));
    }
}
<?php

/**
 * secp384r1
 *
 * PHP version 5 and 7
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2017 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://pear.php.net/package/Math_BigInteger
 */

namespace phpseclib3\Crypt\EC\Curves;

use phpseclib3\Crypt\EC\BaseCurves\Prime;
use phpseclib3\Math\BigInteger;

class secp384r1 extends Prime
{
    public function __construct()
    {
        $this->setModulo(new BigInteger(
            'FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFF0000000000000000FFFFFFFF',
            16
        ));
        $this->setCoefficients(
            new BigInteger(
                'FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFF0000000000000000FFFFFFFC',
                16
            ),
            new BigInteger(
                'B3312FA7E23EE7E4988E056BE3F82D19181D9C6EFE8141120314088F5013875AC656398D8A2ED19D2A85C8EDD3EC2AEF',
                16
            )
        );
        $this->setBasePoint(
            new BigInteger(
                'AA87CA22BE8B05378EB1C71EF320AD746E1D3B628BA79B9859F741E082542A385502F25DBF55296C3A545E3872760AB7',
                16
            ),
            new BigInteger(
                '3617DE4A96262C6F5D9E98BF9292DC29F8F41DBD289A147CE9DA3113B5F0B8C00A60B1CE1D7E819D7A431D7C90EA0E5F',
                16
            )
        );
        $this->setOrder(new BigInteger(
            'FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC7634D81F4372DDF581A0DB248B0A77AECEC196ACCC52973',
            16
        ));
    }
}
<?php

/**
 * secp521r1
 *
 * PHP version 5 and 7
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2017 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://pear.php.net/package/Math_BigInteger
 */

namespace phpseclib3\Crypt\EC\Curves;

use phpseclib3\Crypt\EC\BaseCurves\Prime;
use phpseclib3\Math\BigInteger;

class secp521r1 extends Prime
{
    public function __construct()
    {
        $this->setModulo(new BigInteger('01FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF' .
                                        'FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF' .
                                        'FFFF', 16));
        $this->setCoefficients(
            new BigInteger('01FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF' .
                           'FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF' .
                           'FFFC', 16),
            new BigInteger('0051953EB9618E1C9A1F929A21A0B68540EEA2DA725B99B315F3B8B489918EF1' .
                           '09E156193951EC7E937B1652C0BD3BB1BF073573DF883D2C34F1EF451FD46B50' .
                           '3F00', 16)
        );
        $this->setBasePoint(
            new BigInteger('00C6858E06B70404E9CD9E3ECB662395B4429C648139053FB521F828AF606B4D' .
                           '3DBAA14B5E77EFE75928FE1DC127A2FFA8DE3348B3C1856A429BF97E7E31C2E5' .
                           'BD66', 16),
            new BigInteger('011839296A789A3BC0045C8A5FB42C7D1BD998F54449579B446817AFBD17273E' .
                           '662C97EE72995EF42640C550B9013FAD0761353C7086A272C24088BE94769FD1' .
                           '6650', 16)
        );
        $this->setOrder(new BigInteger('01FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF' .
                                       'FFFA51868783BF2F966B7FCC0148F709A5D03BB5C9B8899C47AEBB6FB71E9138' .
                                       '6409', 16));
    }
}
<?php

/**
 * sect113r1
 *
 * PHP version 5 and 7
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2017 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://pear.php.net/package/Math_BigInteger
 */

namespace phpseclib3\Crypt\EC\Curves;

use phpseclib3\Crypt\EC\BaseCurves\Binary;
use phpseclib3\Math\BigInteger;

class sect113r1 extends Binary
{
    public function __construct()
    {
        $this->setModulo(113, 9, 0);
        $this->setCoefficients(
            '003088250CA6E7C7FE649CE85820F7',
            '00E8BEE4D3E2260744188BE0E9C723'
        );
        $this->setBasePoint(
            '009D73616F35F4AB1407D73562C10F',
            '00A52830277958EE84D1315ED31886'
        );
        $this->setOrder(new BigInteger('0100000000000000D9CCEC8A39E56F', 16));
    }
}
<?php

/**
 * sect113r2
 *
 * PHP version 5 and 7
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2017 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://pear.php.net/package/Math_BigInteger
 */

namespace phpseclib3\Crypt\EC\Curves;

use phpseclib3\Crypt\EC\BaseCurves\Binary;
use phpseclib3\Math\BigInteger;

class sect113r2 extends Binary
{
    public function __construct()
    {
        $this->setModulo(113, 9, 0);
        $this->setCoefficients(
            '00689918DBEC7E5A0DD6DFC0AA55C7',
            '0095E9A9EC9B297BD4BF36E059184F'
        );
        $this->setBasePoint(
            '01A57A6A7B26CA5EF52FCDB8164797',
            '00B3ADC94ED1FE674C06E695BABA1D'
        );
        $this->setOrder(new BigInteger('010000000000000108789B2496AF93', 16));
    }
}
<?php

/**
 * sect131r1
 *
 * PHP version 5 and 7
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2017 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://pear.php.net/package/Math_BigInteger
 */

namespace phpseclib3\Crypt\EC\Curves;

use phpseclib3\Crypt\EC\BaseCurves\Binary;
use phpseclib3\Math\BigInteger;

class sect131r1 extends Binary
{
    public function __construct()
    {
        $this->setModulo(131, 8, 3, 2, 0);
        $this->setCoefficients(
            '07A11B09A76B562144418FF3FF8C2570B8',
            '0217C05610884B63B9C6C7291678F9D341'
        );
        $this->setBasePoint(
            '0081BAF91FDF9833C40F9C181343638399',
            '078C6E7EA38C001F73C8134B1B4EF9E150'
        );
        $this->setOrder(new BigInteger('0400000000000000023123953A9464B54D', 16));
    }
}
<?php

/**
 * sect131r2
 *
 * PHP version 5 and 7
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2017 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://pear.php.net/package/Math_BigInteger
 */

namespace phpseclib3\Crypt\EC\Curves;

use phpseclib3\Crypt\EC\BaseCurves\Binary;
use phpseclib3\Math\BigInteger;

class sect131r2 extends Binary
{
    public function __construct()
    {
        $this->setModulo(131, 8, 3, 2, 0);
        $this->setCoefficients(
            '03E5A88919D7CAFCBF415F07C2176573B2',
            '04B8266A46C55657AC734CE38F018F2192'
        );
        $this->setBasePoint(
            '0356DCD8F2F95031AD652D23951BB366A8',
            '0648F06D867940A5366D9E265DE9EB240F'
        );
        $this->setOrder(new BigInteger('0400000000000000016954A233049BA98F', 16));
    }
}
<?php

/**
 * sect163k1
 *
 * PHP version 5 and 7
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2017 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://pear.php.net/package/Math_BigInteger
 */

namespace phpseclib3\Crypt\EC\Curves;

use phpseclib3\Crypt\EC\BaseCurves\Binary;
use phpseclib3\Math\BigInteger;

class sect163k1 extends Binary
{
    public function __construct()
    {
        $this->setModulo(163, 7, 6, 3, 0);
        $this->setCoefficients(
            '000000000000000000000000000000000000000001',
            '000000000000000000000000000000000000000001'
        );
        $this->setBasePoint(
            '02FE13C0537BBC11ACAA07D793DE4E6D5E5C94EEE8',
            '0289070FB05D38FF58321F2E800536D538CCDAA3D9'
        );
        $this->setOrder(new BigInteger('04000000000000000000020108A2E0CC0D99F8A5EF', 16));
    }
}
<?php

/**
 * sect163r1
 *
 * PHP version 5 and 7
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2017 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://pear.php.net/package/Math_BigInteger
 */

namespace phpseclib3\Crypt\EC\Curves;

use phpseclib3\Crypt\EC\BaseCurves\Binary;
use phpseclib3\Math\BigInteger;

class sect163r1 extends Binary
{
    public function __construct()
    {
        $this->setModulo(163, 7, 6, 3, 0);
        $this->setCoefficients(
            '07B6882CAAEFA84F9554FF8428BD88E246D2782AE2',
            '0713612DCDDCB40AAB946BDA29CA91F73AF958AFD9'
        );
        $this->setBasePoint(
            '0369979697AB43897789566789567F787A7876A654',
            '00435EDB42EFAFB2989D51FEFCE3C80988F41FF883'
        );
        $this->setOrder(new BigInteger('03FFFFFFFFFFFFFFFFFFFF48AAB689C29CA710279B', 16));
    }
}
<?php

/**
 * sect163r2
 *
 * PHP version 5 and 7
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2017 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://pear.php.net/package/Math_BigInteger
 */

namespace phpseclib3\Crypt\EC\Curves;

use phpseclib3\Crypt\EC\BaseCurves\Binary;
use phpseclib3\Math\BigInteger;

class sect163r2 extends Binary
{
    public function __construct()
    {
        $this->setModulo(163, 7, 6, 3, 0);
        $this->setCoefficients(
            '000000000000000000000000000000000000000001',
            '020A601907B8C953CA1481EB10512F78744A3205FD'
        );
        $this->setBasePoint(
            '03F0EBA16286A2D57EA0991168D4994637E8343E36',
            '00D51FBC6C71A0094FA2CDD545B11C5C0C797324F1'
        );
        $this->setOrder(new BigInteger('040000000000000000000292FE77E70C12A4234C33', 16));
    }
}
<?php

/**
 * sect193r1
 *
 * PHP version 5 and 7
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2017 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://pear.php.net/package/Math_BigInteger
 */

namespace phpseclib3\Crypt\EC\Curves;

use phpseclib3\Crypt\EC\BaseCurves\Binary;
use phpseclib3\Math\BigInteger;

class sect193r1 extends Binary
{
    public function __construct()
    {
        $this->setModulo(193, 15, 0);
        $this->setCoefficients(
            '0017858FEB7A98975169E171F77B4087DE098AC8A911DF7B01',
            '00FDFB49BFE6C3A89FACADAA7A1E5BBC7CC1C2E5D831478814'
        );
        $this->setBasePoint(
            '01F481BC5F0FF84A74AD6CDF6FDEF4BF6179625372D8C0C5E1',
            '0025E399F2903712CCF3EA9E3A1AD17FB0B3201B6AF7CE1B05'
        );
        $this->setOrder(new BigInteger('01000000000000000000000000C7F34A778F443ACC920EBA49', 16));
    }
}
<?php

/**
 * sect193r2
 *
 * PHP version 5 and 7
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2017 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://pear.php.net/package/Math_BigInteger
 */

namespace phpseclib3\Crypt\EC\Curves;

use phpseclib3\Crypt\EC\BaseCurves\Binary;
use phpseclib3\Math\BigInteger;

class sect193r2 extends Binary
{
    public function __construct()
    {
        $this->setModulo(193, 15, 0);
        $this->setCoefficients(
            '0163F35A5137C2CE3EA6ED8667190B0BC43ECD69977702709B',
            '00C9BB9E8927D4D64C377E2AB2856A5B16E3EFB7F61D4316AE'
        );
        $this->setBasePoint(
            '00D9B67D192E0367C803F39E1A7E82CA14A651350AAE617E8F',
            '01CE94335607C304AC29E7DEFBD9CA01F596F927224CDECF6C'
        );
        $this->setOrder(new BigInteger('010000000000000000000000015AAB561B005413CCD4EE99D5', 16));
    }
}
<?php

/**
 * sect233k1
 *
 * PHP version 5 and 7
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2017 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://pear.php.net/package/Math_BigInteger
 */

namespace phpseclib3\Crypt\EC\Curves;

use phpseclib3\Crypt\EC\BaseCurves\Binary;
use phpseclib3\Math\BigInteger;

class sect233k1 extends Binary
{
    public function __construct()
    {
        $this->setModulo(233, 74, 0);
        $this->setCoefficients(
            '000000000000000000000000000000000000000000000000000000000000',
            '000000000000000000000000000000000000000000000000000000000001'
        );
        $this->setBasePoint(
            '017232BA853A7E731AF129F22FF4149563A419C26BF50A4C9D6EEFAD6126',
            '01DB537DECE819B7F70F555A67C427A8CD9BF18AEB9B56E0C11056FAE6A3'
        );
        $this->setOrder(new BigInteger('8000000000000000000000000000069D5BB915BCD46EFB1AD5F173ABDF', 16));
    }
}
<?php

/**
 * sect233r1
 *
 * PHP version 5 and 7
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2017 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://pear.php.net/package/Math_BigInteger
 */

namespace phpseclib3\Crypt\EC\Curves;

use phpseclib3\Crypt\EC\BaseCurves\Binary;
use phpseclib3\Math\BigInteger;

class sect233r1 extends Binary
{
    public function __construct()
    {
        $this->setModulo(233, 74, 0);
        $this->setCoefficients(
            '000000000000000000000000000000000000000000000000000000000001',
            '0066647EDE6C332C7F8C0923BB58213B333B20E9CE4281FE115F7D8F90AD'
        );
        $this->setBasePoint(
            '00FAC9DFCBAC8313BB2139F1BB755FEF65BC391F8B36F8F8EB7371FD558B',
            '01006A08A41903350678E58528BEBF8A0BEFF867A7CA36716F7E01F81052'
        );
        $this->setOrder(new BigInteger('01000000000000000000000000000013E974E72F8A6922031D2603CFE0D7', 16));
    }
}
<?php

/**
 * sect239k1
 *
 * PHP version 5 and 7
 *
 * @author    Jim Wiggint  on <terrafrost@php.net>
 * @copyright 2017 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://pear.php.net/package/Math_BigInteger
 */

namespace phpseclib3\Crypt\EC\Curves;

use phpseclib3\Crypt\EC\BaseCurves\Binary;
use phpseclib3\Math\BigInteger;

class sect239k1 extends Binary
{
    public function __construct()
    {
        $this->setModulo(239, 158, 0);
        $this->setCoefficients(
            '000000000000000000000000000000000000000000000000000000000000',
            '000000000000000000000000000000000000000000000000000000000001'
        );
        $this->setBasePoint(
            '29A0B6A887A983E9730988A68727A8B2D126C44CC2CC7B2A6555193035DC',
            '76310804F12E549BDB011C103089E73510ACB275FC312A5DC6B76553F0CA'
        );
        $this->setOrder(new BigInteger('2000000000000000000000000000005A79FEC67CB6E91F1C1DA800E478A5', 16));
    }
}
<?php

/**
 * sect283k1
 *
 * PHP version 5 and 7
 *
 * @author    Jim Wiggint  on <terrafrost@php.net>
 * @copyright 2017 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://pear.php.net/package/Math_BigInteger
 */

namespace phpseclib3\Crypt\EC\Curves;

use phpseclib3\Crypt\EC\BaseCurves\Binary;
use phpseclib3\Math\BigInteger;

class sect283k1 extends Binary
{
    public function __construct()
    {
        $this->setModulo(283, 12, 7, 5, 0);
        $this->setCoefficients(
            '000000000000000000000000000000000000000000000000000000000000000000000000',
            '000000000000000000000000000000000000000000000000000000000000000000000001'
        );
        $this->setBasePoint(
            '0503213F78CA44883F1A3B8162F188E553CD265F23C1567A16876913B0C2AC2458492836',
            '01CCDA380F1C9E318D90F95D07E5426FE87E45C0E8184698E45962364E34116177DD2259'
        );
        $this->setOrder(new BigInteger('01FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE9AE2ED07577265DFF7F94451E061E163C61', 16));
    }
}
<?php

/**
 * sect283r1
 *
 * PHP version 5 and 7
 *
 * @author    Jim Wiggint  on <terrafrost@php.net>
 * @copyright 2017 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://pear.php.net/package/Math_BigInteger
 */

namespace phpseclib3\Crypt\EC\Curves;

use phpseclib3\Crypt\EC\BaseCurves\Binary;
use phpseclib3\Math\BigInteger;

class sect283r1 extends Binary
{
    public function __construct()
    {
        $this->setModulo(283, 12, 7, 5, 0);
        $this->setCoefficients(
            '000000000000000000000000000000000000000000000000000000000000000000000001',
            '027B680AC8B8596DA5A4AF8A19A0303FCA97FD7645309FA2A581485AF6263E313B79A2F5'
        );
        $this->setBasePoint(
            '05F939258DB7DD90E1934F8C70B0DFEC2EED25B8557EAC9C80E2E198F8CDBECD86B12053',
            '03676854FE24141CB98FE6D4B20D02B4516FF702350EDDB0826779C813F0DF45BE8112F4'
        );
        $this->setOrder(new BigInteger('03FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF90399660FC938A90165B042A7CEFADB307', 16));
    }
}
<?php

/**
 * sect409k1
 *
 * PHP version 5 and 7
 *
 * @author    Jim Wiggint  on <terrafrost@php.net>
 * @copyright 2017 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://pear.php.net/package/Math_BigInteger
 */

namespace phpseclib3\Crypt\EC\Curves;

use phpseclib3\Crypt\EC\BaseCurves\Binary;
use phpseclib3\Math\BigInteger;

class sect409k1 extends Binary
{
    public function __construct()
    {
        $this->setModulo(409, 87, 0);
        $this->setCoefficients(
            '00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000',
            '00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001'
        );
        $this->setBasePoint(
            '0060F05F658F49C1AD3AB1890F7184210EFD0987E307C84C27ACCFB8F9F67CC2C460189EB5AAAA62EE222EB1B35540CFE9023746',
            '01E369050B7C4E42ACBA1DACBF04299C3460782F918EA427E6325165E9EA10E3DA5F6C42E9C55215AA9CA27A5863EC48D8E0286B'
        );
        $this->setOrder(new BigInteger(
            '7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE5F' .
            '83B2D4EA20400EC4557D5ED3E3E7CA5B4B5C83B8E01E5FCF',
            16
        ));
    }
}
<?php

/**
 * sect409r1
 *
 * PHP version 5 and 7
 *
 * @author    Jim Wiggint  on <terrafrost@php.net>
 * @copyright 2017 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://pear.php.net/package/Math_BigInteger
 */

namespace phpseclib3\Crypt\EC\Curves;

use phpseclib3\Crypt\EC\BaseCurves\Binary;
use phpseclib3\Math\BigInteger;

class sect409r1 extends Binary
{
    public function __construct()
    {
        $this->setModulo(409, 87, 0);
        $this->setCoefficients(
            '00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001',
            '0021A5C2C8EE9FEB5C4B9A753B7B476B7FD6422EF1F3DD674761FA99D6AC27C8A9A197B272822F6CD57A55AA4F50AE317B13545F'
        );
        $this->setBasePoint(
            '015D4860D088DDB3496B0C6064756260441CDE4AF1771D4DB01FFE5B34E59703DC255A868A1180515603AEAB60794E54BB7996A7',
            '0061B1CFAB6BE5F32BBFA78324ED106A7636B9C5A7BD198D0158AA4F5488D08F38514F1FDF4B4F40D2181B3681C364BA0273C706'
        );
        $this->setOrder(new BigInteger(
            '010000000000000000000000000000000000000000000000000001E2' .
            'AAD6A612F33307BE5FA47C3C9E052F838164CD37D9A21173',
            16
        ));
    }
}
<?php

/**
 * sect571k1
 *
 * PHP version 5 and 7
 *
 * @author    Jim Wiggint  on <terrafrost@php.net>
 * @copyright 2017 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://pear.php.net/package/Math_BigInteger
 */

namespace phpseclib3\Crypt\EC\Curves;

use phpseclib3\Crypt\EC\BaseCurves\Binary;
use phpseclib3\Math\BigInteger;

class sect571k1 extends Binary
{
    public function __construct()
    {
        $this->setModulo(571, 10, 5, 2, 0);
        $this->setCoefficients(
            '000000000000000000000000000000000000000000000000000000000000000000000000' .
            '000000000000000000000000000000000000000000000000000000000000000000000000',
            '000000000000000000000000000000000000000000000000000000000000000000000000' .
            '000000000000000000000000000000000000000000000000000000000000000000000001'
        );
        $this->setBasePoint(
            '026EB7A859923FBC82189631F8103FE4AC9CA2970012D5D46024804801841CA443709584' .
            '93B205E647DA304DB4CEB08CBBD1BA39494776FB988B47174DCA88C7E2945283A01C8972',
            '0349DC807F4FBF374F4AEADE3BCA95314DD58CEC9F307A54FFC61EFC006D8A2C9D4979C0' .
            'AC44AEA74FBEBBB9F772AEDCB620B01A7BA7AF1B320430C8591984F601CD4C143EF1C7A3'
        );
        $this->setOrder(new BigInteger(
            '020000000000000000000000000000000000000000000000000000000000000000000000' .
            '131850E1F19A63E4B391A8DB917F4138B630D84BE5D639381E91DEB45CFE778F637C1001',
            16
        ));
    }
}
<?php

/**
 * sect571r1
 *
 * PHP version 5 and 7
 *
 * @author    Jim Wiggint  on <terrafrost@php.net>
 * @copyright 2017 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://pear.php.net/package/Math_BigInteger
 */

namespace phpseclib3\Crypt\EC\Curves;

use phpseclib3\Crypt\EC\BaseCurves\Binary;
use phpseclib3\Math\BigInteger;

class sect571r1 extends Binary
{
    public function __construct()
    {
        $this->setModulo(571, 10, 5, 2, 0);
        $this->setCoefficients(
            '000000000000000000000000000000000000000000000000000000000000000000000000' .
            '000000000000000000000000000000000000000000000000000000000000000000000001',
            '02F40E7E2221F295DE297117B7F3D62F5C6A97FFCB8CEFF1CD6BA8CE4A9A18AD84FFABBD' .
            '8EFA59332BE7AD6756A66E294AFD185A78FF12AA520E4DE739BACA0C7FFEFF7F2955727A'
        );
        $this->setBasePoint(
            '0303001D34B856296C16C0D40D3CD7750A93D1D2955FA80AA5F40FC8DB7B2ABDBDE53950' .
            'F4C0D293CDD711A35B67FB1499AE60038614F1394ABFA3B4C850D927E1E7769C8EEC2D19',
            '037BF27342DA639B6DCCFFFEB73D69D78C6C27A6009CBBCA1980F8533921E8A684423E43' .
            'BAB08A576291AF8F461BB2A8B3531D2F0485C19B16E2F1516E23DD3C1A4827AF1B8AC15B'
        );
        $this->setOrder(new BigInteger(
            '03FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF' .
            'E661CE18FF55987308059B186823851EC7DD9CA1161DE93D5174D66E8382E9BB2FE84E47',
            16
        ));
    }
}
<?php

/**
 * Generic EC Key Parsing Helper functions
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2015 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\Crypt\EC\Formats\Keys;

use phpseclib3\Common\Functions\Strings;
use phpseclib3\Crypt\EC\BaseCurves\Base as BaseCurve;
use phpseclib3\Crypt\EC\BaseCurves\Binary as BinaryCurve;
use phpseclib3\Crypt\EC\BaseCurves\Prime as PrimeCurve;
use phpseclib3\Crypt\EC\BaseCurves\TwistedEdwards as TwistedEdwardsCurve;
use phpseclib3\Exception\UnsupportedCurveException;
use phpseclib3\File\ASN1;
use phpseclib3\File\ASN1\Maps;
use phpseclib3\Math\BigInteger;

/**
 * Generic EC Key Parsing Helper functions
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
trait Common
{
    /**
     * Curve OIDs
     *
     * @var array
     */
    private static $curveOIDs = [];

    /**
     * Child OIDs loaded
     *
     * @var bool
     */
    protected static $childOIDsLoaded = false;

    /**
     * Use Named Curves
     *
     * @var bool
     */
    private static $useNamedCurves = true;

    /**
     * Initialize static variables
     */
    private static function initialize_static_variables()
    {
        if (empty(self::$curveOIDs)) {
            // the sec* curves are from the standards for efficient cryptography group
            // sect* curves are curves over binary finite fields
            // secp* curves are curves over prime finite fields
            // sec*r* curves are regular curves; sec*k* curves are koblitz curves
            // brainpool*r* curves are regular prime finite field curves
            // brainpool*t* curves are twisted versions of the brainpool*r* curves
            self::$curveOIDs = [
                'prime192v1' => '1.2.840.10045.3.1.1', // J.5.1, example 1 (aka secp192r1)
                'prime192v2' => '1.2.840.10045.3.1.2', // J.5.1, example 2
                'prime192v3' => '1.2.840.10045.3.1.3', // J.5.1, example 3
                'prime239v1' => '1.2.840.10045.3.1.4', // J.5.2, example 1
                'prime239v2' => '1.2.840.10045.3.1.5', // J.5.2, example 2
                'prime239v3' => '1.2.840.10045.3.1.6', // J.5.2, example 3
                'prime256v1' => '1.2.840.10045.3.1.7', // J.5.3, example 1 (aka secp256r1)

                // https://tools.ietf.org/html/rfc5656#section-10
                'nistp256' => '1.2.840.10045.3.1.7', // aka secp256r1
                'nistp384' => '1.3.132.0.34', // aka secp384r1
                'nistp521' => '1.3.132.0.35', // aka secp521r1

                'nistk163' => '1.3.132.0.1', // aka sect163k1
                'nistp192' => '1.2.840.10045.3.1.1', // aka secp192r1
                'nistp224' => '1.3.132.0.33', // aka secp224r1
                'nistk233' => '1.3.132.0.26', // aka sect233k1
                'nistb233' => '1.3.132.0.27', // aka sect233r1
                'nistk283' => '1.3.132.0.16', // aka sect283k1
                'nistk409' => '1.3.132.0.36', // aka sect409k1
                'nistb409' => '1.3.132.0.37', // aka sect409r1
                'nistt571' => '1.3.132.0.38', // aka sect571k1

                // from https://tools.ietf.org/html/rfc5915
                'secp192r1' => '1.2.840.10045.3.1.1', // aka prime192v1
                'sect163k1' => '1.3.132.0.1',
                'sect163r2' => '1.3.132.0.15',
                'secp224r1' => '1.3.132.0.33',
                'sect233k1' => '1.3.132.0.26',
                'sect233r1' => '1.3.132.0.27',
                'secp256r1' => '1.2.840.10045.3.1.7', // aka prime256v1
                'sect283k1' => '1.3.132.0.16',
                'sect283r1' => '1.3.132.0.17',
                'secp384r1' => '1.3.132.0.34',
                'sect409k1' => '1.3.132.0.36',
                'sect409r1' => '1.3.132.0.37',
                'secp521r1' => '1.3.132.0.35',
                'sect571k1' => '1.3.132.0.38',
                'sect571r1' => '1.3.132.0.39',
                // from http://www.secg.org/SEC2-Ver-1.0.pdf
                'secp112r1' => '1.3.132.0.6',
                'secp112r2' => '1.3.132.0.7',
                'secp128r1' => '1.3.132.0.28',
                'secp128r2' => '1.3.132.0.29',
                'secp160k1' => '1.3.132.0.9',
                'secp160r1' => '1.3.132.0.8',
                'secp160r2' => '1.3.132.0.30',
                'secp192k1' => '1.3.132.0.31',
                'secp224k1' => '1.3.132.0.32',
                'secp256k1' => '1.3.132.0.10',

                'sect113r1' => '1.3.132.0.4',
                'sect113r2' => '1.3.132.0.5',
                'sect131r1' => '1.3.132.0.22',
                'sect131r2' => '1.3.132.0.23',
                'sect163r1' => '1.3.132.0.2',
                'sect193r1' => '1.3.132.0.24',
                'sect193r2' => '1.3.132.0.25',
                'sect239k1' => '1.3.132.0.3',

                // from http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.202.2977&rep=rep1&type=pdf#page=36
                /*
                'c2pnb163v1' => '1.2.840.10045.3.0.1', // J.4.1, example 1
                'c2pnb163v2' => '1.2.840.10045.3.0.2', // J.4.1, example 2
                'c2pnb163v3' => '1.2.840.10045.3.0.3', // J.4.1, example 3
                'c2pnb172w1' => '1.2.840.10045.3.0.4', // J.4.2, example 1
                'c2tnb191v1' => '1.2.840.10045.3.0.5', // J.4.3, example 1
                'c2tnb191v2' => '1.2.840.10045.3.0.6', // J.4.3, example 2
                'c2tnb191v3' => '1.2.840.10045.3.0.7', // J.4.3, example 3
                'c2onb191v4' => '1.2.840.10045.3.0.8', // J.4.3, example 4
                'c2onb191v5' => '1.2.840.10045.3.0.9', // J.4.3, example 5
                'c2pnb208w1' => '1.2.840.10045.3.0.10', // J.4.4, example 1
                'c2tnb239v1' => '1.2.840.10045.3.0.11', // J.4.5, example 1
                'c2tnb239v2' => '1.2.840.10045.3.0.12', // J.4.5, example 2
                'c2tnb239v3' => '1.2.840.10045.3.0.13', // J.4.5, example 3
                'c2onb239v4' => '1.2.840.10045.3.0.14', // J.4.5, example 4
                'c2onb239v5' => '1.2.840.10045.3.0.15', // J.4.5, example 5
                'c2pnb272w1' => '1.2.840.10045.3.0.16', // J.4.6, example 1
                'c2pnb304w1' => '1.2.840.10045.3.0.17', // J.4.7, example 1
                'c2tnb359v1' => '1.2.840.10045.3.0.18', // J.4.8, example 1
                'c2pnb368w1' => '1.2.840.10045.3.0.19', // J.4.9, example 1
                'c2tnb431r1' => '1.2.840.10045.3.0.20', // J.4.10, example 1
                */

                // http://www.ecc-brainpool.org/download/Domain-parameters.pdf
                // https://tools.ietf.org/html/rfc5639
                'brainpoolP160r1' => '1.3.36.3.3.2.8.1.1.1',
                'brainpoolP160t1' => '1.3.36.3.3.2.8.1.1.2',
                'brainpoolP192r1' => '1.3.36.3.3.2.8.1.1.3',
                'brainpoolP192t1' => '1.3.36.3.3.2.8.1.1.4',
                'brainpoolP224r1' => '1.3.36.3.3.2.8.1.1.5',
                'brainpoolP224t1' => '1.3.36.3.3.2.8.1.1.6',
                'brainpoolP256r1' => '1.3.36.3.3.2.8.1.1.7',
                'brainpoolP256t1' => '1.3.36.3.3.2.8.1.1.8',
                'brainpoolP320r1' => '1.3.36.3.3.2.8.1.1.9',
                'brainpoolP320t1' => '1.3.36.3.3.2.8.1.1.10',
                'brainpoolP384r1' => '1.3.36.3.3.2.8.1.1.11',
                'brainpoolP384t1' => '1.3.36.3.3.2.8.1.1.12',
                'brainpoolP512r1' => '1.3.36.3.3.2.8.1.1.13',
                'brainpoolP512t1' => '1.3.36.3.3.2.8.1.1.14'
            ];
            ASN1::loadOIDs([
                'prime-field' => '1.2.840.10045.1.1',
                'characteristic-two-field' => '1.2.840.10045.1.2',
                'characteristic-two-basis' => '1.2.840.10045.1.2.3',
                // per http://www.secg.org/SEC1-Ver-1.0.pdf#page=84, gnBasis "not used here"
                'gnBasis' => '1.2.840.10045.1.2.3.1', // NULL
                'tpBasis' => '1.2.840.10045.1.2.3.2', // Trinomial
                'ppBasis' => '1.2.840.10045.1.2.3.3'  // Pentanomial
            ] + self::$curveOIDs);
        }
    }

    /**
     * Explicitly set the curve
     *
     * If the key contains an implicit curve phpseclib needs the curve
     * to be explicitly provided
     *
     * @param BaseCurve $curve
     */
    public static function setImplicitCurve(BaseCurve $curve)
    {
        self::$implicitCurve = $curve;
    }

    /**
     * Returns an instance of \phpseclib3\Crypt\EC\BaseCurves\Base based
     * on the curve parameters
     *
     * @param array $params
     * @return BaseCurve|false
     */
    protected static function loadCurveByParam(array $params)
    {
        if (count($params) > 1) {
            throw new \RuntimeException('No parameters are present');
        }
        if (isset($params['namedCurve'])) {
            $curve = '\phpseclib3\Crypt\EC\Curves\\' . $params['namedCurve'];
            if (!class_exists($curve)) {
                throw new UnsupportedCurveException('Named Curve of ' . $params['namedCurve'] . ' is not supported');
            }
            return new $curve();
        }
        if (isset($params['implicitCurve'])) {
            if (!isset(self::$implicitCurve)) {
                throw new \RuntimeException('Implicit curves can be provided by calling setImplicitCurve');
            }
            return self::$implicitCurve;
        }
        if (isset($params['specifiedCurve'])) {
            $data = $params['specifiedCurve'];
            switch ($data['fieldID']['fieldType']) {
                case 'prime-field':
                    $curve = new PrimeCurve();
                    $curve->setModulo($data['fieldID']['parameters']);
                    $curve->setCoefficients(
                        new BigInteger($data['curve']['a'], 256),
                        new BigInteger($data['curve']['b'], 256)
                    );
                    $point = self::extractPoint("\0" . $data['base'], $curve);
                    $curve->setBasePoint(...$point);
                    $curve->setOrder($data['order']);
                    return $curve;
                case 'characteristic-two-field':
                    $curve = new BinaryCurve();
                    $params = ASN1::decodeBER($data['fieldID']['parameters']);
                    $params = ASN1::asn1map($params[0], Maps\Characteristic_two::MAP);
                    $modulo = [(int) $params['m']->toString()];
                    switch ($params['basis']) {
                        case 'tpBasis':
                            $modulo[] = (int) $params['parameters']->toString();
                            break;
                        case 'ppBasis':
                            $temp = ASN1::decodeBER($params['parameters']);
                            $temp = ASN1::asn1map($temp[0], Maps\Pentanomial::MAP);
                            $modulo[] = (int) $temp['k3']->toString();
                            $modulo[] = (int) $temp['k2']->toString();
                            $modulo[] = (int) $temp['k1']->toString();
                    }
                    $modulo[] = 0;
                    $curve->setModulo(...$modulo);
                    $len = ceil($modulo[0] / 8);
                    $curve->setCoefficients(
                        Strings::bin2hex($data['curve']['a']),
                        Strings::bin2hex($data['curve']['b'])
                    );
                    $point = self::extractPoint("\0" . $data['base'], $curve);
                    $curve->setBasePoint(...$point);
                    $curve->setOrder($data['order']);
                    return $curve;
                default:
                    throw new UnsupportedCurveException('Field Type of ' . $data['fieldID']['fieldType'] . ' is not supported');
            }
        }
        throw new \RuntimeException('No valid parameters are present');
    }

    /**
     * Extract points from a string
     *
     * Supports both compressed and uncompressed points
     *
     * @param string $str
     * @param BaseCurve $curve
     * @return object[]
     */
    public static function extractPoint($str, BaseCurve $curve)
    {
        if ($curve instanceof TwistedEdwardsCurve) {
            // first step of point deciding as discussed at the following URL's:
            // https://tools.ietf.org/html/rfc8032#section-5.1.3
            // https://tools.ietf.org/html/rfc8032#section-5.2.3
            $y = $str;
            $y = strrev($y);
            $sign = (bool) (ord($y[0]) & 0x80);
            $y[0] = $y[0] & chr(0x7F);
            $y = new BigInteger($y, 256);
            if ($y->compare($curve->getModulo()) >= 0) {
                throw new \RuntimeException('The Y coordinate should not be >= the modulo');
            }
            $point = $curve->recoverX($y, $sign);
            if (!$curve->verifyPoint($point)) {
                throw new \RuntimeException('Unable to verify that point exists on curve');
            }
            return $point;
        }

        // the first byte of a bit string represents the number of bits in the last byte that are to be ignored but,
        // currently, bit strings wanting a non-zero amount of bits trimmed are not supported
        if (($val = Strings::shift($str)) != "\0") {
            throw new \UnexpectedValueException('extractPoint expects the first byte to be null - not ' . Strings::bin2hex($val));
        }
        if ($str == "\0") {
            return [];
        }

        $keylen = strlen($str);
        $order = $curve->getLengthInBytes();
        // point compression is being used
        if ($keylen == $order + 1) {
            return $curve->derivePoint($str);
        }

        // point compression is not being used
        if ($keylen == 2 * $order + 1) {
            preg_match("#(.)(.{{$order}})(.{{$order}})#s", $str, $matches);
            list(, $w, $x, $y) = $matches;
            if ($w != "\4") {
                throw new \UnexpectedValueException('The first byte of an uncompressed point should be 04 - not ' . Strings::bin2hex($val));
            }
            $point = [
                $curve->convertInteger(new BigInteger($x, 256)),
                $curve->convertInteger(new BigInteger($y, 256))
            ];

            if (!$curve->verifyPoint($point)) {
                throw new \RuntimeException('Unable to verify that point exists on curve');
            }

            return $point;
        }

        throw new \UnexpectedValueException('The string representation of the points is not of an appropriate length');
    }

    /**
     * Encode Parameters
     *
     * @todo Maybe at some point this could be moved to __toString() for each of the curves?
     * @param BaseCurve $curve
     * @param bool $returnArray optional
     * @param array $options optional
     * @return string|false
     */
    private static function encodeParameters(BaseCurve $curve, $returnArray = false, array $options = [])
    {
        $useNamedCurves = isset($options['namedCurve']) ? $options['namedCurve'] : self::$useNamedCurves;

        $reflect = new \ReflectionClass($curve);
        $name = $reflect->getShortName();
        if ($useNamedCurves) {
            if (isset(self::$curveOIDs[$name])) {
                if ($reflect->isFinal()) {
                    $reflect = $reflect->getParentClass();
                    $name = $reflect->getShortName();
                }
                return $returnArray ?
                    ['namedCurve' => $name] :
                    ASN1::encodeDER(['namedCurve' => $name], Maps\ECParameters::MAP);
            }
            foreach (new \DirectoryIterator(__DIR__ . '/../../Curves/') as $file) {
                if ($file->getExtension() != 'php') {
                    continue;
                }
                $testName = $file->getBasename('.php');
                $class = 'phpseclib3\Crypt\EC\Curves\\' . $testName;
                $reflect = new \ReflectionClass($class);
                if ($reflect->isFinal()) {
                    continue;
                }
                $candidate = new $class();
                switch ($name) {
                    case 'Prime':
                        if (!$candidate instanceof PrimeCurve) {
                            break;
                        }
                        if (!$candidate->getModulo()->equals($curve->getModulo())) {
                            break;
                        }
                        if ($candidate->getA()->toBytes() != $curve->getA()->toBytes()) {
                            break;
                        }
                        if ($candidate->getB()->toBytes() != $curve->getB()->toBytes()) {
                            break;
                        }

                        list($candidateX, $candidateY) = $candidate->getBasePoint();
                        list($curveX, $curveY) = $curve->getBasePoint();
                        if ($candidateX->toBytes() != $curveX->toBytes()) {
                            break;
                        }
                        if ($candidateY->toBytes() != $curveY->toBytes()) {
                            break;
                        }

                        return $returnArray ?
                            ['namedCurve' => $testName] :
                            ASN1::encodeDER(['namedCurve' => $testName], Maps\ECParameters::MAP);
                    case 'Binary':
                        if (!$candidate instanceof BinaryCurve) {
                            break;
                        }
                        if ($candidate->getModulo() != $curve->getModulo()) {
                            break;
                        }
                        if ($candidate->getA()->toBytes() != $curve->getA()->toBytes()) {
                            break;
                        }
                        if ($candidate->getB()->toBytes() != $curve->getB()->toBytes()) {
                            break;
                        }

                        list($candidateX, $candidateY) = $candidate->getBasePoint();
                        list($curveX, $curveY) = $curve->getBasePoint();
                        if ($candidateX->toBytes() != $curveX->toBytes()) {
                            break;
                        }
                        if ($candidateY->toBytes() != $curveY->toBytes()) {
                            break;
                        }

                        return $returnArray ?
                            ['namedCurve' => $testName] :
                            ASN1::encodeDER(['namedCurve' => $testName], Maps\ECParameters::MAP);
                }
            }
        }

        $order = $curve->getOrder();
        // we could try to calculate the order thusly:
        // https://crypto.stackexchange.com/a/27914/4520
        // https://en.wikipedia.org/wiki/Schoof%E2%80%93Elkies%E2%80%93Atkin_algorithm
        if (!$order) {
            throw new \RuntimeException('Specified Curves need the order to be specified');
        }
        $point = $curve->getBasePoint();
        $x = $point[0]->toBytes();
        $y = $point[1]->toBytes();

        if ($curve instanceof PrimeCurve) {
            /*
             * valid versions are:
             *
             * ecdpVer1:
             *   - neither the curve or the base point are generated verifiably randomly.
             * ecdpVer2:
             *   - curve and base point are generated verifiably at random and curve.seed is present
             * ecdpVer3:
             *   - base point is generated verifiably at random but curve is not. curve.seed is present
             */
            // other (optional) parameters can be calculated using the methods discused at
            // https://crypto.stackexchange.com/q/28947/4520
            $data = [
                'version' => 'ecdpVer1',
                'fieldID' => [
                    'fieldType' => 'prime-field',
                    'parameters' => $curve->getModulo()
                ],
                'curve' => [
                    'a' => $curve->getA()->toBytes(),
                    'b' => $curve->getB()->toBytes()
                ],
                'base' => "\4" . $x . $y,
                'order' => $order
            ];

            return $returnArray ?
                ['specifiedCurve' => $data] :
                ASN1::encodeDER(['specifiedCurve' => $data], Maps\ECParameters::MAP);
        }
        if ($curve instanceof BinaryCurve) {
            $modulo = $curve->getModulo();
            $basis = count($modulo);
            $m = array_shift($modulo);
            array_pop($modulo); // the last parameter should always be 0
            //rsort($modulo);
            switch ($basis) {
                case 3:
                    $basis = 'tpBasis';
                    $modulo = new BigInteger($modulo[0]);
                    break;
                case 5:
                    $basis = 'ppBasis';
                    // these should be in strictly ascending order (hence the commented out rsort above)
                    $modulo = [
                        'k1' => new BigInteger($modulo[2]),
                        'k2' => new BigInteger($modulo[1]),
                        'k3' => new BigInteger($modulo[0])
                    ];
                    $modulo = ASN1::encodeDER($modulo, Maps\Pentanomial::MAP);
                    $modulo = new ASN1\Element($modulo);
            }
            $params = ASN1::encodeDER([
                'm' => new BigInteger($m),
                'basis' => $basis,
                'parameters' => $modulo
            ], Maps\Characteristic_two::MAP);
            $params = new ASN1\Element($params);
            $a = ltrim($curve->getA()->toBytes(), "\0");
            if (!strlen($a)) {
                $a = "\0";
            }
            $b = ltrim($curve->getB()->toBytes(), "\0");
            if (!strlen($b)) {
                $b = "\0";
            }
            $data = [
                'version' => 'ecdpVer1',
                'fieldID' => [
                    'fieldType' => 'characteristic-two-field',
                    'parameters' => $params
                ],
                'curve' => [
                    'a' => $a,
                    'b' => $b
                ],
                'base' => "\4" . $x . $y,
                'order' => $order
            ];

            return $returnArray ?
                ['specifiedCurve' => $data] :
                ASN1::encodeDER(['specifiedCurve' => $data], Maps\ECParameters::MAP);
        }

        throw new UnsupportedCurveException('Curve cannot be serialized');
    }

    /**
     * Use Specified Curve
     *
     * A specified curve has all the coefficients, the base points, etc, explicitely included.
     * A specified curve is a more verbose way of representing a curve
     */
    public static function useSpecifiedCurve()
    {
        self::$useNamedCurves = false;
    }

    /**
     * Use Named Curve
     *
     * A named curve does not include any parameters. It is up to the EC parameters to
     * know what the coefficients, the base points, etc, are from the name of the curve.
     * A named curve is a more concise way of representing a curve
     */
    public static function useNamedCurve()
    {
        self::$useNamedCurves = true;
    }
}
<?php

/**
 * JSON Web Key (RFC7517 / RFC8037) Formatted EC Handler
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2015 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\Crypt\EC\Formats\Keys;

use phpseclib3\Common\Functions\Strings;
use phpseclib3\Crypt\Common\Formats\Keys\JWK as Progenitor;
use phpseclib3\Crypt\EC\BaseCurves\Base as BaseCurve;
use phpseclib3\Crypt\EC\BaseCurves\TwistedEdwards as TwistedEdwardsCurve;
use phpseclib3\Crypt\EC\Curves\Ed25519;
use phpseclib3\Crypt\EC\Curves\secp256k1;
use phpseclib3\Crypt\EC\Curves\secp256r1;
use phpseclib3\Crypt\EC\Curves\secp384r1;
use phpseclib3\Crypt\EC\Curves\secp521r1;
use phpseclib3\Exception\UnsupportedCurveException;
use phpseclib3\Math\BigInteger;

/**
 * JWK Formatted EC Handler
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class JWK extends Progenitor
{
    use Common;

    /**
     * Break a public or private key down into its constituent components
     *
     * @param string $key
     * @param string $password optional
     * @return array
     */
    public static function load($key, $password = '')
    {
        $key = parent::load($key, $password);

        switch ($key->kty) {
            case 'EC':
                switch ($key->crv) {
                    case 'P-256':
                    case 'P-384':
                    case 'P-521':
                    case 'secp256k1':
                        break;
                    default:
                        throw new UnsupportedCurveException('Only P-256, P-384, P-521 and secp256k1 curves are accepted (' . $key->crv . ' provided)');
                }
                break;
            case 'OKP':
                switch ($key->crv) {
                    case 'Ed25519':
                    case 'Ed448':
                        break;
                    default:
                        throw new UnsupportedCurveException('Only Ed25519 and Ed448 curves are accepted (' . $key->crv . ' provided)');
                }
                break;
            default:
                throw new \Exception('Only EC and OKP JWK keys are supported');
        }

        $curve = '\phpseclib3\Crypt\EC\Curves\\' . str_replace('P-', 'nistp', $key->crv);
        $curve = new $curve();

        if ($curve instanceof TwistedEdwardsCurve) {
            $QA = self::extractPoint(Strings::base64url_decode($key->x), $curve);
            if (!isset($key->d)) {
                return compact('curve', 'QA');
            }
            $arr = $curve->extractSecret(Strings::base64url_decode($key->d));
            return compact('curve', 'QA') + $arr;
        }

        $QA = [
            $curve->convertInteger(new BigInteger(Strings::base64url_decode($key->x), 256)),
            $curve->convertInteger(new BigInteger(Strings::base64url_decode($key->y), 256))
        ];

        if (!$curve->verifyPoint($QA)) {
            throw new \RuntimeException('Unable to verify that point exists on curve');
        }

        if (!isset($key->d)) {
            return compact('curve', 'QA');
        }

        $dA = new BigInteger(Strings::base64url_decode($key->d), 256);

        $curve->rangeCheck($dA);

        return compact('curve', 'dA', 'QA');
    }

    /**
     * Returns the alias that corresponds to a curve
     *
     * @return string
     */
    private static function getAlias(BaseCurve $curve)
    {
        switch (true) {
            case $curve instanceof secp256r1:
                return 'P-256';
            case $curve instanceof secp384r1:
                return 'P-384';
            case $curve instanceof secp521r1:
                return 'P-521';
            case $curve instanceof secp256k1:
                return 'secp256k1';
        }

        $reflect = new \ReflectionClass($curve);
        $curveName = $reflect->isFinal() ?
            $reflect->getParentClass()->getShortName() :
            $reflect->getShortName();
        throw new UnsupportedCurveException("$curveName is not a supported curve");
    }

    /**
     * Return the array superstructure for an EC public key
     *
     * @param BaseCurve $curve
     * @param \phpseclib3\Math\Common\FiniteField\Integer[] $publicKey
     * @return array
     */
    private static function savePublicKeyHelper(BaseCurve $curve, array $publicKey)
    {
        if ($curve instanceof TwistedEdwardsCurve) {
            return [
                'kty' => 'OKP',
                'crv' => $curve instanceof Ed25519 ? 'Ed25519' : 'Ed448',
                'x' => Strings::base64url_encode($curve->encodePoint($publicKey))
            ];
        }

        return [
            'kty' => 'EC',
            'crv' => self::getAlias($curve),
            'x' => Strings::base64url_encode($publicKey[0]->toBytes()),
            'y' => Strings::base64url_encode($publicKey[1]->toBytes())
        ];
    }

    /**
     * Convert an EC public key to the appropriate format
     *
     * @param BaseCurve $curve
     * @param \phpseclib3\Math\Common\FiniteField\Integer[] $publicKey
     * @param array $options optional
     * @return string
     */
    public static function savePublicKey(BaseCurve $curve, array $publicKey, array $options = [])
    {
        $key = self::savePublicKeyHelper($curve, $publicKey);

        return self::wrapKey($key, $options);
    }

    /**
     * Convert a private key to the appropriate format.
     *
     * @param BigInteger $privateKey
     * @param Ed25519 $curve
     * @param \phpseclib3\Math\Common\FiniteField\Integer[] $publicKey
     * @param string $secret optional
     * @param string $password optional
     * @param array $options optional
     * @return string
     */
    public static function savePrivateKey(BigInteger $privateKey, BaseCurve $curve, array $publicKey, $secret = null, $password = '', array $options = [])
    {
        $key = self::savePublicKeyHelper($curve, $publicKey);
        $key['d'] = $curve instanceof TwistedEdwardsCurve ? $secret : $privateKey->toBytes();
        $key['d'] = Strings::base64url_encode($key['d']);

        return self::wrapKey($key, $options);
    }
}
<?php

/**
 * Montgomery Private Key Handler
 *
 * "Naked" Curve25519 private keys can pretty much be any sequence of random 32x bytes so unless
 * we have a "hidden" key handler pretty much every 32 byte string will be loaded as a curve25519
 * private key even if it probably isn't one by PublicKeyLoader.
 *
 * "Naked" Curve25519 public keys also a string of 32 bytes so distinguishing between a "naked"
 * curve25519 private key and a public key is nigh impossible, hence separate plugins for each
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2015 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\Crypt\EC\Formats\Keys;

use phpseclib3\Crypt\EC\BaseCurves\Montgomery as MontgomeryCurve;
use phpseclib3\Crypt\EC\Curves\Curve25519;
use phpseclib3\Crypt\EC\Curves\Curve448;
use phpseclib3\Exception\UnsupportedFormatException;
use phpseclib3\Math\BigInteger;

/**
 * Montgomery Curve Private Key Handler
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class MontgomeryPrivate
{
    /**
     * Is invisible flag
     *
     */
    const IS_INVISIBLE = true;

    /**
     * Break a public or private key down into its constituent components
     *
     * @param string $key
     * @param string $password optional
     * @return array
     */
    public static function load($key, $password = '')
    {
        switch (strlen($key)) {
            case 32:
                $curve = new Curve25519();
                break;
            case 56:
                $curve = new Curve448();
                break;
            default:
                throw new \LengthException('The only supported lengths are 32 and 56');
        }

        $components = ['curve' => $curve];
        $components['dA'] = new BigInteger($key, 256);
        $curve->rangeCheck($components['dA']);
        // note that EC::getEncodedCoordinates does some additional "magic" (it does strrev on the result)
        $components['QA'] = $components['curve']->multiplyPoint($components['curve']->getBasePoint(), $components['dA']);

        return $components;
    }

    /**
     * Convert an EC public key to the appropriate format
     *
     * @param MontgomeryCurve $curve
     * @param \phpseclib3\Math\Common\FiniteField\Integer[] $publicKey
     * @return string
     */
    public static function savePublicKey(MontgomeryCurve $curve, array $publicKey)
    {
        return strrev($publicKey[0]->toBytes());
    }

    /**
     * Convert a private key to the appropriate format.
     *
     * @param BigInteger $privateKey
     * @param MontgomeryCurve $curve
     * @param \phpseclib3\Math\Common\FiniteField\Integer[] $publicKey
     * @param string $secret optional
     * @param string $password optional
     * @return string
     */
    public static function savePrivateKey(BigInteger $privateKey, MontgomeryCurve $curve, array $publicKey, $secret = null, $password = '')
    {
        if (!empty($password) && is_string($password)) {
            throw new UnsupportedFormatException('MontgomeryPrivate private keys do not support encryption');
        }

        return $privateKey->toBytes();
    }
}
<?php

/**
 * Montgomery Public Key Handler
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2015 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\Crypt\EC\Formats\Keys;

use phpseclib3\Crypt\EC\BaseCurves\Montgomery as MontgomeryCurve;
use phpseclib3\Crypt\EC\Curves\Curve25519;
use phpseclib3\Crypt\EC\Curves\Curve448;
use phpseclib3\Math\BigInteger;

/**
 * Montgomery Public Key Handler
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class MontgomeryPublic
{
    /**
     * Is invisible flag
     *
     */
    const IS_INVISIBLE = true;

    /**
     * Break a public or private key down into its constituent components
     *
     * @param string $key
     * @param string $password optional
     * @return array
     */
    public static function load($key, $password = '')
    {
        switch (strlen($key)) {
            case 32:
                $curve = new Curve25519();
                break;
            case 56:
                $curve = new Curve448();
                break;
            default:
                throw new \LengthException('The only supported lengths are 32 and 56');
        }

        $components = ['curve' => $curve];
        $components['QA'] = [$components['curve']->convertInteger(new BigInteger(strrev($key), 256))];

        return $components;
    }

    /**
     * Convert an EC public key to the appropriate format
     *
     * @param MontgomeryCurve $curve
     * @param \phpseclib3\Math\Common\FiniteField\Integer[] $publicKey
     * @return string
     */
    public static function savePublicKey(MontgomeryCurve $curve, array $publicKey)
    {
        return strrev($publicKey[0]->toBytes());
    }
}
<?php

/**
 * OpenSSH Formatted EC Key Handler
 *
 * PHP version 5
 *
 * Place in $HOME/.ssh/authorized_keys
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2015 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\Crypt\EC\Formats\Keys;

use phpseclib3\Common\Functions\Strings;
use phpseclib3\Crypt\Common\Formats\Keys\OpenSSH as Progenitor;
use phpseclib3\Crypt\EC\BaseCurves\Base as BaseCurve;
use phpseclib3\Crypt\EC\Curves\Ed25519;
use phpseclib3\Exception\UnsupportedCurveException;
use phpseclib3\Math\BigInteger;

/**
 * OpenSSH Formatted EC Key Handler
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class OpenSSH extends Progenitor
{
    use Common;

    /**
     * Supported Key Types
     *
     * @var array
     */
    protected static $types = [
        'ecdsa-sha2-nistp256',
        'ecdsa-sha2-nistp384',
        'ecdsa-sha2-nistp521',
        'ssh-ed25519'
    ];

    /**
     * Break a public or private key down into its constituent components
     *
     * @param string $key
     * @param string $password optional
     * @return array
     */
    public static function load($key, $password = '')
    {
        $parsed = parent::load($key, $password);

        if (isset($parsed['paddedKey'])) {
            $paddedKey = $parsed['paddedKey'];
            list($type) = Strings::unpackSSH2('s', $paddedKey);
            if ($type != $parsed['type']) {
                throw new \RuntimeException("The public and private keys are not of the same type ($type vs $parsed[type])");
            }
            if ($type == 'ssh-ed25519') {
                list(, $key, $comment) = Strings::unpackSSH2('sss', $paddedKey);
                $key = libsodium::load($key);
                $key['comment'] = $comment;
                return $key;
            }
            list($curveName, $publicKey, $privateKey, $comment) = Strings::unpackSSH2('ssis', $paddedKey);
            $curve = self::loadCurveByParam(['namedCurve' => $curveName]);
            $curve->rangeCheck($privateKey);
            return [
                'curve' => $curve,
                'dA' => $privateKey,
                'QA' => self::extractPoint("\0$publicKey", $curve),
                'comment' => $comment
            ];
        }

        if ($parsed['type'] == 'ssh-ed25519') {
            if (Strings::shift($parsed['publicKey'], 4) != "\0\0\0\x20") {
                throw new \RuntimeException('Length of ssh-ed25519 key should be 32');
            }

            $curve = new Ed25519();
            $qa = self::extractPoint($parsed['publicKey'], $curve);
        } else {
            list($curveName, $publicKey) = Strings::unpackSSH2('ss', $parsed['publicKey']);
            $curveName = '\phpseclib3\Crypt\EC\Curves\\' . $curveName;
            $curve = new $curveName();

            $qa = self::extractPoint("\0" . $publicKey, $curve);
        }

        return [
            'curve' => $curve,
            'QA' => $qa,
            'comment' => $parsed['comment']
        ];
    }

    /**
     * Returns the alias that corresponds to a curve
     *
     * @return string
     */
    private static function getAlias(BaseCurve $curve)
    {
        self::initialize_static_variables();

        $reflect = new \ReflectionClass($curve);
        $name = $reflect->getShortName();

        $oid = self::$curveOIDs[$name];
        $aliases = array_filter(self::$curveOIDs, function ($v) use ($oid) {
            return $v == $oid;
        });
        $aliases = array_keys($aliases);

        for ($i = 0; $i < count($aliases); $i++) {
            if (in_array('ecdsa-sha2-' . $aliases[$i], self::$types)) {
                $alias = $aliases[$i];
                break;
            }
        }

        if (!isset($alias)) {
            throw new UnsupportedCurveException($name . ' is not a curve that the OpenSSH plugin supports');
        }

        return $alias;
    }

    /**
     * Convert an EC public key to the appropriate format
     *
     * @param BaseCurve $curve
     * @param \phpseclib3\Math\Common\FiniteField\Integer[] $publicKey
     * @param array $options optional
     * @return string
     */
    public static function savePublicKey(BaseCurve $curve, array $publicKey, array $options = [])
    {
        $comment = isset($options['comment']) ? $options['comment'] : self::$comment;

        if ($curve instanceof Ed25519) {
            $key = Strings::packSSH2('ss', 'ssh-ed25519', $curve->encodePoint($publicKey));

            if (isset($options['binary']) ? $options['binary'] : self::$binary) {
                return $key;
            }

            $key = 'ssh-ed25519 ' . base64_encode($key) . ' ' . $comment;
            return $key;
        }

        $alias = self::getAlias($curve);

        $points = "\4" . $publicKey[0]->toBytes() . $publicKey[1]->toBytes();
        $key = Strings::packSSH2('sss', 'ecdsa-sha2-' . $alias, $alias, $points);

        if (isset($options['binary']) ? $options['binary'] : self::$binary) {
            return $key;
        }

        $key = 'ecdsa-sha2-' . $alias . ' ' . base64_encode($key) . ' ' . $comment;

        return $key;
    }

    /**
     * Convert a private key to the appropriate format.
     *
     * @param BigInteger $privateKey
     * @param Ed25519 $curve
     * @param \phpseclib3\Math\Common\FiniteField\Integer[] $publicKey
     * @param string $secret optional
     * @param string $password optional
     * @param array $options optional
     * @return string
     */
    public static function savePrivateKey(BigInteger $privateKey, BaseCurve $curve, array $publicKey, $secret = null, $password = '', array $options = [])
    {
        if ($curve instanceof Ed25519) {
            if (!isset($secret)) {
                throw new \RuntimeException('Private Key does not have a secret set');
            }
            if (strlen($secret) != 32) {
                throw new \RuntimeException('Private Key secret is not of the correct length');
            }

            $pubKey = $curve->encodePoint($publicKey);

            $publicKey = Strings::packSSH2('ss', 'ssh-ed25519', $pubKey);
            $privateKey = Strings::packSSH2('sss', 'ssh-ed25519', $pubKey, $secret . $pubKey);

            return self::wrapPrivateKey($publicKey, $privateKey, $password, $options);
        }

        $alias = self::getAlias($curve);

        $points = "\4" . $publicKey[0]->toBytes() . $publicKey[1]->toBytes();
        $publicKey = self::savePublicKey($curve, $publicKey, ['binary' => true]);

        $privateKey = Strings::packSSH2('sssi', 'ecdsa-sha2-' . $alias, $alias, $points, $privateKey);

        return self::wrapPrivateKey($publicKey, $privateKey, $password, $options);
    }
}
<?php

/**
 * "PKCS1" (RFC5915) Formatted EC Key Handler
 *
 * PHP version 5
 *
 * Used by File/X509.php
 *
 * Processes keys with the following headers:
 *
 * -----BEGIN EC PRIVATE KEY-----
 * -----BEGIN EC PARAMETERS-----
 *
 * Technically, PKCS1 is for RSA keys, only, but we're using PKCS1 to describe
 * DSA, whose format isn't really formally described anywhere, so might as well
 * use it to describe this, too. PKCS1 is easier to remember than RFC5915, after
 * all. I suppose this could also be named IETF but idk
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2015 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\Crypt\EC\Formats\Keys;

use phpseclib3\Common\Functions\Strings;
use phpseclib3\Crypt\Common\Formats\Keys\PKCS1 as Progenitor;
use phpseclib3\Crypt\EC\BaseCurves\Base as BaseCurve;
use phpseclib3\Crypt\EC\BaseCurves\Montgomery as MontgomeryCurve;
use phpseclib3\Crypt\EC\BaseCurves\TwistedEdwards as TwistedEdwardsCurve;
use phpseclib3\Exception\UnsupportedCurveException;
use phpseclib3\File\ASN1;
use phpseclib3\File\ASN1\Maps;
use phpseclib3\Math\BigInteger;

/**
 * "PKCS1" (RFC5915) Formatted EC Key Handler
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class PKCS1 extends Progenitor
{
    use Common;

    /**
     * Break a public or private key down into its constituent components
     *
     * @param string $key
     * @param string $password optional
     * @return array
     */
    public static function load($key, $password = '')
    {
        self::initialize_static_variables();

        if (!Strings::is_stringable($key)) {
            throw new \UnexpectedValueException('Key should be a string - not a ' . gettype($key));
        }

        if (strpos($key, 'BEGIN EC PARAMETERS') && strpos($key, 'BEGIN EC PRIVATE KEY')) {
            $components = [];

            preg_match('#-*BEGIN EC PRIVATE KEY-*[^-]*-*END EC PRIVATE KEY-*#s', $key, $matches);
            $decoded = parent::load($matches[0], $password);
            $decoded = ASN1::decodeBER($decoded);
            if (!$decoded) {
                throw new \RuntimeException('Unable to decode BER');
            }

            $ecPrivate = ASN1::asn1map($decoded[0], Maps\ECPrivateKey::MAP);
            if (!is_array($ecPrivate)) {
                throw new \RuntimeException('Unable to perform ASN1 mapping');
            }

            if (isset($ecPrivate['parameters'])) {
                $components['curve'] = self::loadCurveByParam($ecPrivate['parameters']);
            }

            preg_match('#-*BEGIN EC PARAMETERS-*[^-]*-*END EC PARAMETERS-*#s', $key, $matches);
            $decoded = parent::load($matches[0], '');
            $decoded = ASN1::decodeBER($decoded);
            if (!$decoded) {
                throw new \RuntimeException('Unable to decode BER');
            }
            $ecParams = ASN1::asn1map($decoded[0], Maps\ECParameters::MAP);
            if (!is_array($ecParams)) {
                throw new \RuntimeException('Unable to perform ASN1 mapping');
            }
            $ecParams = self::loadCurveByParam($ecParams);

            // comparing $ecParams and $components['curve'] directly won't work because they'll have different Math\Common\FiniteField classes
            // even if the modulo is the same
            if (isset($components['curve']) && self::encodeParameters($ecParams, false, []) != self::encodeParameters($components['curve'], false, [])) {
                throw new \RuntimeException('EC PARAMETERS does not correspond to EC PRIVATE KEY');
            }

            if (!isset($components['curve'])) {
                $components['curve'] = $ecParams;
            }

            $components['dA'] = new BigInteger($ecPrivate['privateKey'], 256);
            $components['curve']->rangeCheck($components['dA']);
            $components['QA'] = isset($ecPrivate['publicKey']) ?
                self::extractPoint($ecPrivate['publicKey'], $components['curve']) :
                $components['curve']->multiplyPoint($components['curve']->getBasePoint(), $components['dA']);

            return $components;
        }

        $key = parent::load($key, $password);

        $decoded = ASN1::decodeBER($key);
        if (!$decoded) {
            throw new \RuntimeException('Unable to decode BER');
        }

        $key = ASN1::asn1map($decoded[0], Maps\ECParameters::MAP);
        if (is_array($key)) {
            return ['curve' => self::loadCurveByParam($key)];
        }

        $key = ASN1::asn1map($decoded[0], Maps\ECPrivateKey::MAP);
        if (!is_array($key)) {
            throw new \RuntimeException('Unable to perform ASN1 mapping');
        }
        if (!isset($key['parameters'])) {
            throw new \RuntimeException('Key cannot be loaded without parameters');
        }

        $components = [];
        $components['curve'] = self::loadCurveByParam($key['parameters']);
        $components['dA'] = new BigInteger($key['privateKey'], 256);
        $components['QA'] = isset($ecPrivate['publicKey']) ?
            self::extractPoint($ecPrivate['publicKey'], $components['curve']) :
            $components['curve']->multiplyPoint($components['curve']->getBasePoint(), $components['dA']);

        return $components;
    }

    /**
     * Convert EC parameters to the appropriate format
     *
     * @return string
     */
    public static function saveParameters(BaseCurve $curve, array $options = [])
    {
        self::initialize_static_variables();

        if ($curve instanceof TwistedEdwardsCurve || $curve instanceof MontgomeryCurve) {
            throw new UnsupportedCurveException('TwistedEdwards and Montgomery Curves are not supported');
        }

        $key = self::encodeParameters($curve, false, $options);

        return "-----BEGIN EC PARAMETERS-----\r\n" .
               chunk_split(Strings::base64_encode($key), 64) .
               "-----END EC PARAMETERS-----\r\n";
    }

    /**
     * Convert a private key to the appropriate format.
     *
     * @param BigInteger $privateKey
     * @param BaseCurve $curve
     * @param \phpseclib3\Math\Common\FiniteField\Integer[] $publicKey
     * @param string $secret optional
     * @param string $password optional
     * @param array $options optional
     * @return string
     */
    public static function savePrivateKey(BigInteger $privateKey, BaseCurve $curve, array $publicKey, $secret = null, $password = '', array $options = [])
    {
        self::initialize_static_variables();

        if ($curve instanceof TwistedEdwardsCurve  || $curve instanceof MontgomeryCurve) {
            throw new UnsupportedCurveException('TwistedEdwards Curves are not supported');
        }

        $publicKey = "\4" . $publicKey[0]->toBytes() . $publicKey[1]->toBytes();

        $key = [
            'version' => 'ecPrivkeyVer1',
            'privateKey' => $privateKey->toBytes(),
            'parameters' => new ASN1\Element(self::encodeParameters($curve)),
            'publicKey' => "\0" . $publicKey
        ];

        $key = ASN1::encodeDER($key, Maps\ECPrivateKey::MAP);

        return self::wrapPrivateKey($key, 'EC', $password, $options);
    }
}
<?php

/**
 * PKCS#8 Formatted EC Key Handler
 *
 * PHP version 5
 *
 * Processes keys with the following headers:
 *
 * -----BEGIN ENCRYPTED PRIVATE KEY-----
 * -----BEGIN PRIVATE KEY-----
 * -----BEGIN PUBLIC KEY-----
 *
 * Analogous to ssh-keygen's pkcs8 format (as specified by -m). Although PKCS8
 * is specific to private keys it's basically creating a DER-encoded wrapper
 * for keys. This just extends that same concept to public keys (much like ssh-keygen)
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2015 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\Crypt\EC\Formats\Keys;

use phpseclib3\Crypt\Common\Formats\Keys\PKCS8 as Progenitor;
use phpseclib3\Crypt\EC\BaseCurves\Base as BaseCurve;
use phpseclib3\Crypt\EC\BaseCurves\Montgomery as MontgomeryCurve;
use phpseclib3\Crypt\EC\BaseCurves\TwistedEdwards as TwistedEdwardsCurve;
use phpseclib3\Crypt\EC\Curves\Ed25519;
use phpseclib3\Crypt\EC\Curves\Ed448;
use phpseclib3\Exception\UnsupportedCurveException;
use phpseclib3\File\ASN1;
use phpseclib3\File\ASN1\Maps;
use phpseclib3\Math\BigInteger;

/**
 * PKCS#8 Formatted EC Key Handler
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class PKCS8 extends Progenitor
{
    use Common;

    /**
     * OID Name
     *
     * @var array
     */
    const OID_NAME = ['id-ecPublicKey', 'id-Ed25519', 'id-Ed448'];

    /**
     * OID Value
     *
     * @var string
     */
    const OID_VALUE = ['1.2.840.10045.2.1', '1.3.101.112', '1.3.101.113'];

    /**
     * Break a public or private key down into its constituent components
     *
     * @param string $key
     * @param string $password optional
     * @return array
     */
    public static function load($key, $password = '')
    {
        // initialize_static_variables() is defined in both the trait and the parent class
        // when it's defined in two places it's the traits one that's called
        // the parent one is needed, as well, but the parent one is called by other methods
        // in the parent class as needed and in the context of the parent it's the parent
        // one that's called
        self::initialize_static_variables();

        $key = parent::load($key, $password);

        $type = isset($key['privateKey']) ? 'privateKey' : 'publicKey';

        switch ($key[$type . 'Algorithm']['algorithm']) {
            case 'id-Ed25519':
            case 'id-Ed448':
                return self::loadEdDSA($key);
        }

        $decoded = ASN1::decodeBER($key[$type . 'Algorithm']['parameters']->element);
        if (!$decoded) {
            throw new \RuntimeException('Unable to decode BER');
        }
        $params = ASN1::asn1map($decoded[0], Maps\ECParameters::MAP);
        if (!$params) {
            throw new \RuntimeException('Unable to decode the parameters using Maps\ECParameters');
        }

        $components = [];
        $components['curve'] = self::loadCurveByParam($params);

        if ($type == 'publicKey') {
            $components['QA'] = self::extractPoint("\0" . $key['publicKey'], $components['curve']);

            return $components;
        }

        $decoded = ASN1::decodeBER($key['privateKey']);
        if (!$decoded) {
            throw new \RuntimeException('Unable to decode BER');
        }
        $key = ASN1::asn1map($decoded[0], Maps\ECPrivateKey::MAP);
        if (isset($key['parameters']) && $params != $key['parameters']) {
            throw new \RuntimeException('The PKCS8 parameter field does not match the private key parameter field');
        }

        $components['dA'] = new BigInteger($key['privateKey'], 256);
        $components['curve']->rangeCheck($components['dA']);
        $components['QA'] = isset($key['publicKey']) ?
            self::extractPoint($key['publicKey'], $components['curve']) :
            $components['curve']->multiplyPoint($components['curve']->getBasePoint(), $components['dA']);

        return $components;
    }

    /**
     * Break a public or private EdDSA key down into its constituent components
     *
     * @return array
     */
    private static function loadEdDSA(array $key)
    {
        $components = [];

        if (isset($key['privateKey'])) {
            $components['curve'] = $key['privateKeyAlgorithm']['algorithm'] == 'id-Ed25519' ? new Ed25519() : new Ed448();
            $expected = chr(ASN1::TYPE_OCTET_STRING) . ASN1::encodeLength($components['curve']::SIZE);
            if (substr($key['privateKey'], 0, 2) != $expected) {
                throw new \RuntimeException(
                    'The first two bytes of the ' .
                    $key['privateKeyAlgorithm']['algorithm'] .
                    ' private key field should be 0x' . bin2hex($expected)
                );
            }
            $arr = $components['curve']->extractSecret(substr($key['privateKey'], 2));
            $components['dA'] = $arr['dA'];
            $components['secret'] = $arr['secret'];
        }

        if (isset($key['publicKey'])) {
            if (!isset($components['curve'])) {
                $components['curve'] = $key['publicKeyAlgorithm']['algorithm'] == 'id-Ed25519' ? new Ed25519() : new Ed448();
            }

            $components['QA'] = self::extractPoint($key['publicKey'], $components['curve']);
        }

        if (isset($key['privateKey']) && !isset($components['QA'])) {
            $components['QA'] = $components['curve']->multiplyPoint($components['curve']->getBasePoint(), $components['dA']);
        }

        return $components;
    }

    /**
     * Convert an EC public key to the appropriate format
     *
     * @param BaseCurve $curve
     * @param \phpseclib3\Math\Common\FiniteField\Integer[] $publicKey
     * @param array $options optional
     * @return string
     */
    public static function savePublicKey(BaseCurve $curve, array $publicKey, array $options = [])
    {
        self::initialize_static_variables();

        if ($curve instanceof MontgomeryCurve) {
            throw new UnsupportedCurveException('Montgomery Curves are not supported');
        }

        if ($curve instanceof TwistedEdwardsCurve) {
            return self::wrapPublicKey(
                $curve->encodePoint($publicKey),
                null,
                $curve instanceof Ed25519 ? 'id-Ed25519' : 'id-Ed448',
                $options
            );
        }

        $params = new ASN1\Element(self::encodeParameters($curve, false, $options));

        $key = "\4" . $publicKey[0]->toBytes() . $publicKey[1]->toBytes();

        return self::wrapPublicKey($key, $params, 'id-ecPublicKey', $options);
    }

    /**
     * Convert a private key to the appropriate format.
     *
     * @param BigInteger $privateKey
     * @param BaseCurve $curve
     * @param \phpseclib3\Math\Common\FiniteField\Integer[] $publicKey
     * @param string $secret optional
     * @param string $password optional
     * @param array $options optional
     * @return string
     */
    public static function savePrivateKey(BigInteger $privateKey, BaseCurve $curve, array $publicKey, $secret = null, $password = '', array $options = [])
    {
        self::initialize_static_variables();

        if ($curve instanceof MontgomeryCurve) {
            throw new UnsupportedCurveException('Montgomery Curves are not supported');
        }

        if ($curve instanceof TwistedEdwardsCurve) {
            return self::wrapPrivateKey(
                chr(ASN1::TYPE_OCTET_STRING) . ASN1::encodeLength($curve::SIZE) . $secret,
                [],
                null,
                $password,
                $curve instanceof Ed25519 ? 'id-Ed25519' : 'id-Ed448'
            );
        }

        $publicKey = "\4" . $publicKey[0]->toBytes() . $publicKey[1]->toBytes();

        $params = new ASN1\Element(self::encodeParameters($curve, false, $options));

        $key = [
            'version' => 'ecPrivkeyVer1',
            'privateKey' => $privateKey->toBytes(),
            //'parameters' => $params,
            'publicKey' => "\0" . $publicKey
        ];

        $key = ASN1::encodeDER($key, Maps\ECPrivateKey::MAP);

        return self::wrapPrivateKey($key, [], $params, $password, 'id-ecPublicKey', '', $options);
    }
}
<?php

/**
 * PuTTY Formatted EC Key Handler
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2015 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\Crypt\EC\Formats\Keys;

use phpseclib3\Common\Functions\Strings;
use phpseclib3\Crypt\Common\Formats\Keys\PuTTY as Progenitor;
use phpseclib3\Crypt\EC\BaseCurves\Base as BaseCurve;
use phpseclib3\Crypt\EC\BaseCurves\TwistedEdwards as TwistedEdwardsCurve;
use phpseclib3\Math\BigInteger;

/**
 * PuTTY Formatted EC Key Handler
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class PuTTY extends Progenitor
{
    use Common;

    /**
     * Public Handler
     *
     * @var string
     */
    const PUBLIC_HANDLER = 'phpseclib3\Crypt\EC\Formats\Keys\OpenSSH';

    /**
     * Supported Key Types
     *
     * @var array
     */
    protected static $types = [
        'ecdsa-sha2-nistp256',
        'ecdsa-sha2-nistp384',
        'ecdsa-sha2-nistp521',
        'ssh-ed25519'
    ];

    /**
     * Break a public or private key down into its constituent components
     *
     * @param string $key
     * @param string $password optional
     * @return array
     */
    public static function load($key, $password = '')
    {
        $components = parent::load($key, $password);
        if (!isset($components['private'])) {
            return $components;
        }

        $private = $components['private'];

        $temp = Strings::base64_encode(Strings::packSSH2('s', $components['type']) . $components['public']);
        $components = OpenSSH::load($components['type'] . ' ' . $temp . ' ' . $components['comment']);

        if ($components['curve'] instanceof TwistedEdwardsCurve) {
            if (Strings::shift($private, 4) != "\0\0\0\x20") {
                throw new \RuntimeException('Length of ssh-ed25519 key should be 32');
            }
            $arr = $components['curve']->extractSecret($private);
            $components['dA'] = $arr['dA'];
            $components['secret'] = $arr['secret'];
        } else {
            list($components['dA']) = Strings::unpackSSH2('i', $private);
            $components['curve']->rangeCheck($components['dA']);
        }

        return $components;
    }

    /**
     * Convert a private key to the appropriate format.
     *
     * @param BigInteger $privateKey
     * @param BaseCurve $curve
     * @param \phpseclib3\Math\Common\FiniteField\Integer[] $publicKey
     * @param string $secret optional
     * @param string $password optional
     * @param array $options optional
     * @return string
     */
    public static function savePrivateKey(BigInteger $privateKey, BaseCurve $curve, array $publicKey, $secret = null, $password = false, array $options = [])
    {
        self::initialize_static_variables();

        $public = explode(' ', OpenSSH::savePublicKey($curve, $publicKey));
        $name = $public[0];
        $public = Strings::base64_decode($public[1]);
        list(, $length) = unpack('N', Strings::shift($public, 4));
        Strings::shift($public, $length);

        // PuTTY pads private keys with a null byte per the following:
        // https://github.com/github/putty/blob/a3d14d77f566a41fc61dfdc5c2e0e384c9e6ae8b/sshecc.c#L1926
        if (!$curve instanceof TwistedEdwardsCurve) {
            $private = $privateKey->toBytes();
            if (!(strlen($privateKey->toBits()) & 7)) {
                $private = "\0$private";
            }
        }

        $private = $curve instanceof TwistedEdwardsCurve ?
            Strings::packSSH2('s', $secret) :
            Strings::packSSH2('s', $private);

        return self::wrapPrivateKey($public, $private, $name, $password, $options);
    }

    /**
     * Convert an EC public key to the appropriate format
     *
     * @param BaseCurve $curve
     * @param \phpseclib3\Math\Common\FiniteField[] $publicKey
     * @return string
     */
    public static function savePublicKey(BaseCurve $curve, array $publicKey)
    {
        $public = explode(' ', OpenSSH::savePublicKey($curve, $publicKey));
        $type = $public[0];
        $public = Strings::base64_decode($public[1]);
        list(, $length) = unpack('N', Strings::shift($public, 4));
        Strings::shift($public, $length);

        return self::wrapPublicKey($public, $type);
    }
}
<?php

/**
 * XML Formatted EC Key Handler
 *
 * More info:
 *
 * https://www.w3.org/TR/xmldsig-core/#sec-ECKeyValue
 * http://en.wikipedia.org/wiki/XML_Signature
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2015 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\Crypt\EC\Formats\Keys;

use phpseclib3\Common\Functions\Strings;
use phpseclib3\Crypt\EC\BaseCurves\Base as BaseCurve;
use phpseclib3\Crypt\EC\BaseCurves\Montgomery as MontgomeryCurve;
use phpseclib3\Crypt\EC\BaseCurves\Prime as PrimeCurve;
use phpseclib3\Crypt\EC\BaseCurves\TwistedEdwards as TwistedEdwardsCurve;
use phpseclib3\Exception\BadConfigurationException;
use phpseclib3\Exception\UnsupportedCurveException;
use phpseclib3\Math\BigInteger;

/**
 * XML Formatted EC Key Handler
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class XML
{
    use Common;

    /**
     * Default namespace
     *
     * @var string
     */
    private static $namespace;

    /**
     * Flag for using RFC4050 syntax
     *
     * @var bool
     */
    private static $rfc4050 = false;

    /**
     * Break a public or private key down into its constituent components
     *
     * @param string $key
     * @param string $password optional
     * @return array
     */
    public static function load($key, $password = '')
    {
        self::initialize_static_variables();

        if (!Strings::is_stringable($key)) {
            throw new \UnexpectedValueException('Key should be a string - not a ' . gettype($key));
        }

        if (!class_exists('DOMDocument')) {
            throw new BadConfigurationException('The dom extension is not setup correctly on this system');
        }

        $use_errors = libxml_use_internal_errors(true);

        if (substr($key, 0, 5) != '<?xml') {
            $key = '<xml>' . $key . '</xml>';
        }

        $temp = self::isolateNamespace($key, 'http://www.w3.org/2009/xmldsig11#');
        if ($temp) {
            $key = $temp;
        }

        $temp = self::isolateNamespace($key, 'http://www.w3.org/2001/04/xmldsig-more#');
        if ($temp) {
            $key = $temp;
        }

        $dom = new \DOMDocument();

        if (!$dom->loadXML($key)) {
            libxml_use_internal_errors($use_errors);
            throw new \UnexpectedValueException('Key does not appear to contain XML');
        }
        $xpath = new \DOMXPath($dom);
        libxml_use_internal_errors($use_errors);
        $curve = self::loadCurveByParam($xpath);

        $pubkey = self::query($xpath, 'publickey', 'Public Key is not present');

        $QA = self::query($xpath, 'ecdsakeyvalue')->length ?
            self::extractPointRFC4050($xpath, $curve) :
            self::extractPoint("\0" . $pubkey, $curve);

        libxml_use_internal_errors($use_errors);

        return compact('curve', 'QA');
    }

    /**
     * Case-insensitive xpath query
     *
     * @param \DOMXPath $xpath
     * @param string $name
     * @param string $error optional
     * @param bool $decode optional
     * @return \DOMNodeList
     */
    private static function query(\DOMXPath $xpath, $name, $error = null, $decode = true)
    {
        $query = '/';
        $names = explode('/', $name);
        foreach ($names as $name) {
            $query .= "/*[translate(local-name(), 'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz')='$name']";
        }
        $result = $xpath->query($query);
        if (!isset($error)) {
            return $result;
        }

        if (!$result->length) {
            throw new \RuntimeException($error);
        }
        return $decode ? self::decodeValue($result->item(0)->textContent) : $result->item(0)->textContent;
    }

    /**
     * Finds the first element in the relevant namespace, strips the namespacing and returns the XML for that element.
     *
     * @param string $xml
     * @param string $ns
     */
    private static function isolateNamespace($xml, $ns)
    {
        $dom = new \DOMDocument();
        if (!$dom->loadXML($xml)) {
            return false;
        }
        $xpath = new \DOMXPath($dom);
        $nodes = $xpath->query("//*[namespace::*[.='$ns'] and not(../namespace::*[.='$ns'])]");
        if (!$nodes->length) {
            return false;
        }
        $node = $nodes->item(0);
        $ns_name = $node->lookupPrefix($ns);
        if ($ns_name) {
            $node->removeAttributeNS($ns, $ns_name);
        }
        return $dom->saveXML($node);
    }

    /**
     * Decodes the value
     *
     * @param string $value
     */
    private static function decodeValue($value)
    {
        return Strings::base64_decode(str_replace(["\r", "\n", ' ', "\t"], '', $value));
    }

    /**
     * Extract points from an XML document
     *
     * @param \DOMXPath $xpath
     * @param BaseCurve $curve
     * @return object[]
     */
    private static function extractPointRFC4050(\DOMXPath $xpath, BaseCurve $curve)
    {
        $x = self::query($xpath, 'publickey/x');
        $y = self::query($xpath, 'publickey/y');
        if (!$x->length || !$x->item(0)->hasAttribute('Value')) {
            throw new \RuntimeException('Public Key / X coordinate not found');
        }
        if (!$y->length || !$y->item(0)->hasAttribute('Value')) {
            throw new \RuntimeException('Public Key / Y coordinate not found');
        }
        $point = [
            $curve->convertInteger(new BigInteger($x->item(0)->getAttribute('Value'))),
            $curve->convertInteger(new BigInteger($y->item(0)->getAttribute('Value')))
        ];
        if (!$curve->verifyPoint($point)) {
            throw new \RuntimeException('Unable to verify that point exists on curve');
        }
        return $point;
    }

    /**
     * Returns an instance of \phpseclib3\Crypt\EC\BaseCurves\Base based
     * on the curve parameters
     *
     * @param \DomXPath $xpath
     * @return BaseCurve|false
     */
    private static function loadCurveByParam(\DOMXPath $xpath)
    {
        $namedCurve = self::query($xpath, 'namedcurve');
        if ($namedCurve->length == 1) {
            $oid = $namedCurve->item(0)->getAttribute('URN');
            $oid = preg_replace('#[^\d.]#', '', $oid);
            $name = array_search($oid, self::$curveOIDs);
            if ($name === false) {
                throw new UnsupportedCurveException('Curve with OID of ' . $oid . ' is not supported');
            }

            $curve = '\phpseclib3\Crypt\EC\Curves\\' . $name;
            if (!class_exists($curve)) {
                throw new UnsupportedCurveException('Named Curve of ' . $name . ' is not supported');
            }
            return new $curve();
        }

        $params = self::query($xpath, 'explicitparams');
        if ($params->length) {
            return self::loadCurveByParamRFC4050($xpath);
        }

        $params = self::query($xpath, 'ecparameters');
        if (!$params->length) {
            throw new \RuntimeException('No parameters are present');
        }

        $fieldTypes = [
            'prime-field' => ['fieldid/prime/p'],
            'gnb' => ['fieldid/gnb/m'],
            'tnb' => ['fieldid/tnb/k'],
            'pnb' => ['fieldid/pnb/k1', 'fieldid/pnb/k2', 'fieldid/pnb/k3'],
            'unknown' => []
        ];

        foreach ($fieldTypes as $type => $queries) {
            foreach ($queries as $query) {
                $result = self::query($xpath, $query);
                if (!$result->length) {
                    continue 2;
                }
                $param = preg_replace('#.*/#', '', $query);
                $$param = self::decodeValue($result->item(0)->textContent);
            }
            break;
        }

        $a = self::query($xpath, 'curve/a', 'A coefficient is not present');
        $b = self::query($xpath, 'curve/b', 'B coefficient is not present');
        $base = self::query($xpath, 'base', 'Base point is not present');
        $order = self::query($xpath, 'order', 'Order is not present');

        switch ($type) {
            case 'prime-field':
                $curve = new PrimeCurve();
                $curve->setModulo(new BigInteger($p, 256));
                $curve->setCoefficients(
                    new BigInteger($a, 256),
                    new BigInteger($b, 256)
                );
                $point = self::extractPoint("\0" . $base, $curve);
                $curve->setBasePoint(...$point);
                $curve->setOrder(new BigInteger($order, 256));
                return $curve;
            case 'gnb':
            case 'tnb':
            case 'pnb':
            default:
                throw new UnsupportedCurveException('Field Type of ' . $type . ' is not supported');
        }
    }

    /**
     * Returns an instance of \phpseclib3\Crypt\EC\BaseCurves\Base based
     * on the curve parameters
     *
     * @param \DomXPath $xpath
     * @return BaseCurve|false
     */
    private static function loadCurveByParamRFC4050(\DOMXPath $xpath)
    {
        $fieldTypes = [
            'prime-field' => ['primefieldparamstype/p'],
            'unknown' => []
        ];

        foreach ($fieldTypes as $type => $queries) {
            foreach ($queries as $query) {
                $result = self::query($xpath, $query);
                if (!$result->length) {
                    continue 2;
                }
                $param = preg_replace('#.*/#', '', $query);
                $$param = $result->item(0)->textContent;
            }
            break;
        }

        $a = self::query($xpath, 'curveparamstype/a', 'A coefficient is not present', false);
        $b = self::query($xpath, 'curveparamstype/b', 'B coefficient is not present', false);
        $x = self::query($xpath, 'basepointparams/basepoint/ecpointtype/x', 'Base Point X is not present', false);
        $y = self::query($xpath, 'basepointparams/basepoint/ecpointtype/y', 'Base Point Y is not present', false);
        $order = self::query($xpath, 'order', 'Order is not present', false);

        switch ($type) {
            case 'prime-field':
                $curve = new PrimeCurve();

                $p = str_replace(["\r", "\n", ' ', "\t"], '', $p);
                $curve->setModulo(new BigInteger($p));

                $a = str_replace(["\r", "\n", ' ', "\t"], '', $a);
                $b = str_replace(["\r", "\n", ' ', "\t"], '', $b);
                $curve->setCoefficients(
                    new BigInteger($a),
                    new BigInteger($b)
                );

                $x = str_replace(["\r", "\n", ' ', "\t"], '', $x);
                $y = str_replace(["\r", "\n", ' ', "\t"], '', $y);
                $curve->setBasePoint(
                    new BigInteger($x),
                    new BigInteger($y)
                );

                $order = str_replace(["\r", "\n", ' ', "\t"], '', $order);
                $curve->setOrder(new BigInteger($order));
                return $curve;
            default:
                throw new UnsupportedCurveException('Field Type of ' . $type . ' is not supported');
        }
    }

    /**
     * Sets the namespace. dsig11 is the most common one.
     *
     * Set to null to unset. Used only for creating public keys.
     *
     * @param string $namespace
     */
    public static function setNamespace($namespace)
    {
        self::$namespace = $namespace;
    }

    /**
     * Uses the XML syntax specified in https://tools.ietf.org/html/rfc4050
     */
    public static function enableRFC4050Syntax()
    {
        self::$rfc4050 = true;
    }

    /**
     * Uses the XML syntax specified in https://www.w3.org/TR/xmldsig-core/#sec-ECParameters
     */
    public static function disableRFC4050Syntax()
    {
        self::$rfc4050 = false;
    }

    /**
     * Convert a public key to the appropriate format
     *
     * @param BaseCurve $curve
     * @param \phpseclib3\Math\Common\FiniteField\Integer[] $publicKey
     * @param array $options optional
     * @return string
     */
    public static function savePublicKey(BaseCurve $curve, array $publicKey, array $options = [])
    {
        self::initialize_static_variables();

        if ($curve instanceof TwistedEdwardsCurve || $curve instanceof MontgomeryCurve) {
            throw new UnsupportedCurveException('TwistedEdwards and Montgomery Curves are not supported');
        }

        if (empty(static::$namespace)) {
            $pre = $post = '';
        } else {
            $pre = static::$namespace . ':';
            $post = ':' . static::$namespace;
        }

        if (self::$rfc4050) {
            return '<' . $pre . 'ECDSAKeyValue xmlns' . $post . '="http://www.w3.org/2001/04/xmldsig-more#">' . "\r\n" .
                   self::encodeXMLParameters($curve, $pre, $options) . "\r\n" .
                   '<' . $pre . 'PublicKey>' . "\r\n" .
                   '<' . $pre . 'X Value="' . $publicKey[0] . '" />' . "\r\n" .
                   '<' . $pre . 'Y Value="' . $publicKey[1] . '" />' . "\r\n" .
                   '</' . $pre . 'PublicKey>' . "\r\n" .
                   '</' . $pre . 'ECDSAKeyValue>';
        }

        $publicKey = "\4" . $publicKey[0]->toBytes() . $publicKey[1]->toBytes();

        return '<' . $pre . 'ECDSAKeyValue xmlns' . $post . '="http://www.w3.org/2009/xmldsig11#">' . "\r\n" .
               self::encodeXMLParameters($curve, $pre, $options) . "\r\n" .
               '<' . $pre . 'PublicKey>' . Strings::base64_encode($publicKey) . '</' . $pre . 'PublicKey>' . "\r\n" .
               '</' . $pre . 'ECDSAKeyValue>';
    }

    /**
     * Encode Parameters
     *
     * @param BaseCurve $curve
     * @param string $pre
     * @param array $options optional
     * @return string|false
     */
    private static function encodeXMLParameters(BaseCurve $curve, $pre, array $options = [])
    {
        $result = self::encodeParameters($curve, true, $options);

        if (isset($result['namedCurve'])) {
            $namedCurve = '<' . $pre . 'NamedCurve URI="urn:oid:' . self::$curveOIDs[$result['namedCurve']] . '" />';
            return self::$rfc4050 ?
                '<DomainParameters>' . str_replace('URI', 'URN', $namedCurve) . '</DomainParameters>' :
                $namedCurve;
        }

        if (self::$rfc4050) {
            $xml = '<' . $pre . 'ExplicitParams>' . "\r\n" .
                  '<' . $pre . 'FieldParams>' . "\r\n";
            $temp = $result['specifiedCurve'];
            switch ($temp['fieldID']['fieldType']) {
                case 'prime-field':
                    $xml .= '<' . $pre . 'PrimeFieldParamsType>' . "\r\n" .
                           '<' . $pre . 'P>' . $temp['fieldID']['parameters'] . '</' . $pre . 'P>' . "\r\n" .
                           '</' . $pre . 'PrimeFieldParamsType>' . "\r\n";
                    $a = $curve->getA();
                    $b = $curve->getB();
                    list($x, $y) = $curve->getBasePoint();
                    break;
                default:
                    throw new UnsupportedCurveException('Field Type of ' . $temp['fieldID']['fieldType'] . ' is not supported');
            }
            $xml .= '</' . $pre . 'FieldParams>' . "\r\n" .
                   '<' . $pre . 'CurveParamsType>' . "\r\n" .
                   '<' . $pre . 'A>' . $a . '</' . $pre . 'A>' . "\r\n" .
                   '<' . $pre . 'B>' . $b . '</' . $pre . 'B>' . "\r\n" .
                   '</' . $pre . 'CurveParamsType>' . "\r\n" .
                   '<' . $pre . 'BasePointParams>' . "\r\n" .
                   '<' . $pre . 'BasePoint>' . "\r\n" .
                   '<' . $pre . 'ECPointType>' . "\r\n" .
                   '<' . $pre . 'X>' . $x . '</' . $pre . 'X>' . "\r\n" .
                   '<' . $pre . 'Y>' . $y . '</' . $pre . 'Y>' . "\r\n" .
                   '</' . $pre . 'ECPointType>' . "\r\n" .
                   '</' . $pre . 'BasePoint>' . "\r\n" .
                   '<' . $pre . 'Order>' . $curve->getOrder() . '</' . $pre . 'Order>' . "\r\n" .
                   '</' . $pre . 'BasePointParams>' . "\r\n" .
                   '</' . $pre . 'ExplicitParams>' . "\r\n";

            return $xml;
        }

        if (isset($result['specifiedCurve'])) {
            $xml = '<' . $pre . 'ECParameters>' . "\r\n" .
                   '<' . $pre . 'FieldID>' . "\r\n";
            $temp = $result['specifiedCurve'];
            switch ($temp['fieldID']['fieldType']) {
                case 'prime-field':
                    $xml .= '<' . $pre . 'Prime>' . "\r\n" .
                           '<' . $pre . 'P>' . Strings::base64_encode($temp['fieldID']['parameters']->toBytes()) . '</' . $pre . 'P>' . "\r\n" .
                           '</' . $pre . 'Prime>' . "\r\n" ;
                    break;
                default:
                    throw new UnsupportedCurveException('Field Type of ' . $temp['fieldID']['fieldType'] . ' is not supported');
            }
            $xml .= '</' . $pre . 'FieldID>' . "\r\n" .
                   '<' . $pre . 'Curve>' . "\r\n" .
                   '<' . $pre . 'A>' . Strings::base64_encode($temp['curve']['a']) . '</' . $pre . 'A>' . "\r\n" .
                   '<' . $pre . 'B>' . Strings::base64_encode($temp['curve']['b']) . '</' . $pre . 'B>' . "\r\n" .
                   '</' . $pre . 'Curve>' . "\r\n" .
                   '<' . $pre . 'Base>' . Strings::base64_encode($temp['base']) . '</' . $pre . 'Base>' . "\r\n" .
                   '<' . $pre . 'Order>' . Strings::base64_encode($temp['order']) . '</' . $pre . 'Order>' . "\r\n" .
                   '</' . $pre . 'ECParameters>';
            return $xml;
        }
    }
}
<?php

/**
 * libsodium Key Handler
 *
 * Different NaCl implementations store the key differently.
 * https://blog.mozilla.org/warner/2011/11/29/ed25519-keys/ elaborates.
 * libsodium appears to use the same format as SUPERCOP.
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2015 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\Crypt\EC\Formats\Keys;

use phpseclib3\Crypt\EC\Curves\Ed25519;
use phpseclib3\Exception\UnsupportedFormatException;
use phpseclib3\Math\BigInteger;

/**
 * libsodium Key Handler
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class libsodium
{
    use Common;

    /**
     * Is invisible flag
     *
     */
    const IS_INVISIBLE = true;

    /**
     * Break a public or private key down into its constituent components
     *
     * @param string $key
     * @param string $password optional
     * @return array
     */
    public static function load($key, $password = '')
    {
        switch (strlen($key)) {
            case 32:
                $public = $key;
                break;
            case 64:
                $private = substr($key, 0, 32);
                $public = substr($key, -32);
                break;
            case 96:
                $public = substr($key, -32);
                if (substr($key, 32, 32) != $public) {
                    throw new \RuntimeException('Keys with 96 bytes should have the 2nd and 3rd set of 32 bytes match');
                }
                $private = substr($key, 0, 32);
                break;
            default:
                throw new \RuntimeException('libsodium keys need to either be 32 bytes long, 64 bytes long or 96 bytes long');
        }

        $curve = new Ed25519();
        $components = ['curve' => $curve];
        if (isset($private)) {
            $arr = $curve->extractSecret($private);
            $components['dA'] = $arr['dA'];
            $components['secret'] = $arr['secret'];
        }
        $components['QA'] = isset($public) ?
            self::extractPoint($public, $curve) :
            $curve->multiplyPoint($curve->getBasePoint(), $components['dA']);

        return $components;
    }

    /**
     * Convert an EC public key to the appropriate format
     *
     * @param Ed25519 $curve
     * @param \phpseclib3\Math\Common\FiniteField\Integer[] $publicKey
     * @return string
     */
    public static function savePublicKey(Ed25519 $curve, array $publicKey)
    {
        return $curve->encodePoint($publicKey);
    }

    /**
     * Convert a private key to the appropriate format.
     *
     * @param BigInteger $privateKey
     * @param Ed25519 $curve
     * @param \phpseclib3\Math\Common\FiniteField\Integer[] $publicKey
     * @param string $secret optional
     * @param string $password optional
     * @return string
     */
    public static function savePrivateKey(BigInteger $privateKey, Ed25519 $curve, array $publicKey, $secret = null, $password = '')
    {
        if (!isset($secret)) {
            throw new \RuntimeException('Private Key does not have a secret set');
        }
        if (strlen($secret) != 32) {
            throw new \RuntimeException('Private Key secret is not of the correct length');
        }
        if (!empty($password) && is_string($password)) {
            throw new UnsupportedFormatException('libsodium private keys do not support encryption');
        }
        return $secret . $curve->encodePoint($publicKey);
    }
}
<?php

/**
 * ASN1 Signature Handler
 *
 * PHP version 5
 *
 * Handles signatures in the format described in
 * https://tools.ietf.org/html/rfc3279#section-2.2.3
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2016 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\Crypt\EC\Formats\Signature;

use phpseclib3\File\ASN1 as Encoder;
use phpseclib3\File\ASN1\Maps\EcdsaSigValue;
use phpseclib3\Math\BigInteger;

/**
 * ASN1 Signature Handler
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class ASN1
{
    /**
     * Loads a signature
     *
     * @param string $sig
     * @return array
     */
    public static function load($sig)
    {
        if (!is_string($sig)) {
            return false;
        }

        $decoded = Encoder::decodeBER($sig);
        if (empty($decoded)) {
            return false;
        }
        $components = Encoder::asn1map($decoded[0], EcdsaSigValue::MAP);

        return $components;
    }

    /**
     * Returns a signature in the appropriate format
     *
     * @param BigInteger $r
     * @param BigInteger $s
     * @return string
     */
    public static function save(BigInteger $r, BigInteger $s)
    {
        return Encoder::encodeDER(compact('r', 's'), EcdsaSigValue::MAP);
    }
}
<?php

/**
 * IEEE P1363 Signature Handler
 *
 * PHP version 5
 *
 * Handles signatures in the format described in
 * https://standards.ieee.org/ieee/1363/2049/ and
 * https://developer.mozilla.org/en-US/docs/Web/API/SubtleCrypto/sign#ecdsa
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2016 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\Crypt\EC\Formats\Signature;

use phpseclib3\Math\BigInteger;

/**
 * ASN1 Signature Handler
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class IEEE
{
    /**
     * Loads a signature
     *
     * @param string $sig
     * @return array
     */
    public static function load($sig)
    {
        if (!is_string($sig)) {
            return false;
        }

        $len = strlen($sig);
        if ($len & 1) {
            return false;
        }

        $r = new BigInteger(substr($sig, 0, $len >> 1), 256);
        $s = new BigInteger(substr($sig, $len >> 1), 256);

        return compact('r', 's');
    }

    /**
     * Returns a signature in the appropriate format
     *
     * @param BigInteger $r
     * @param BigInteger $s
     * @param string $curve
     * @param int $length
     * @return string
     */
    public static function save(BigInteger $r, BigInteger $s, $curve, $length)
    {
        $r = $r->toBytes();
        $s = $s->toBytes();
        $length = (int) ceil($length / 8);
        return str_pad($r, $length, "\0", STR_PAD_LEFT) . str_pad($s, $length, "\0", STR_PAD_LEFT);
    }
}
<?php

/**
 * Raw EC Signature Handler
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2016 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\Crypt\EC\Formats\Signature;

use phpseclib3\Crypt\Common\Formats\Signature\Raw as Progenitor;

/**
 * Raw DSA Signature Handler
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class Raw extends Progenitor
{
}
<?php

/**
 * SSH2 Signature Handler
 *
 * PHP version 5
 *
 * Handles signatures in the format used by SSH2
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2016 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\Crypt\EC\Formats\Signature;

use phpseclib3\Common\Functions\Strings;
use phpseclib3\Math\BigInteger;

/**
 * SSH2 Signature Handler
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class SSH2
{
    /**
     * Loads a signature
     *
     * @param string $sig
     * @return mixed
     */
    public static function load($sig)
    {
        if (!is_string($sig)) {
            return false;
        }

        $result = Strings::unpackSSH2('ss', $sig);
        if ($result === false) {
            return false;
        }
        list($type, $blob) = $result;
        switch ($type) {
            // see https://tools.ietf.org/html/rfc5656#section-3.1.2
            case 'ecdsa-sha2-nistp256':
            case 'ecdsa-sha2-nistp384':
            case 'ecdsa-sha2-nistp521':
                break;
            default:
                return false;
        }

        $result = Strings::unpackSSH2('ii', $blob);
        if ($result === false) {
            return false;
        }

        return [
            'r' => $result[0],
            's' => $result[1]
        ];
    }

    /**
     * Returns a signature in the appropriate format
     *
     * @param BigInteger $r
     * @param BigInteger $s
     * @param string $curve
     * @return string
     */
    public static function save(BigInteger $r, BigInteger $s, $curve)
    {
        switch ($curve) {
            case 'secp256r1':
                $curve = 'nistp256';
                break;
            case 'secp384r1':
                $curve = 'nistp384';
                break;
            case 'secp521r1':
                $curve = 'nistp521';
                break;
            default:
                return false;
        }

        $blob = Strings::packSSH2('ii', $r, $s);

        return Strings::packSSH2('ss', 'ecdsa-sha2-' . $curve, $blob);
    }
}
<?php

/**
 * EC Parameters
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2015 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\Crypt\EC;

use phpseclib3\Crypt\EC;

/**
 * EC Parameters
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
final class Parameters extends EC
{
    /**
     * Returns the parameters
     *
     * @param string $type
     * @param array $options optional
     * @return string
     */
    public function toString($type = 'PKCS1', array $options = [])
    {
        $type = self::validatePlugin('Keys', 'PKCS1', 'saveParameters');

        return $type::saveParameters($this->curve, $options);
    }
}
<?php

/**
 * EC Private Key
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2015 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\Crypt\EC;

use phpseclib3\Common\Functions\Strings;
use phpseclib3\Crypt\Common;
use phpseclib3\Crypt\EC;
use phpseclib3\Crypt\EC\BaseCurves\Montgomery as MontgomeryCurve;
use phpseclib3\Crypt\EC\BaseCurves\TwistedEdwards as TwistedEdwardsCurve;
use phpseclib3\Crypt\EC\Curves\Curve25519;
use phpseclib3\Crypt\EC\Curves\Ed25519;
use phpseclib3\Crypt\EC\Formats\Keys\PKCS1;
use phpseclib3\Crypt\EC\Formats\Signature\ASN1 as ASN1Signature;
use phpseclib3\Crypt\Hash;
use phpseclib3\Exception\UnsupportedOperationException;
use phpseclib3\Math\BigInteger;

/**
 * EC Private Key
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
final class PrivateKey extends EC implements Common\PrivateKey
{
    use Common\Traits\PasswordProtected;

    /**
     * Private Key dA
     *
     * sign() converts this to a BigInteger so one might wonder why this is a FiniteFieldInteger instead of
     * a BigInteger. That's because a FiniteFieldInteger, when converted to a byte string, is null padded by
     * a certain amount whereas a BigInteger isn't.
     *
     * @var object
     */
    protected $dA;

    /**
     * @var string
     */
    protected $secret;

    /**
     * Multiplies an encoded point by the private key
     *
     * Used by ECDH
     *
     * @param string $coordinates
     * @return string
     */
    public function multiply($coordinates)
    {
        if ($this->curve instanceof MontgomeryCurve) {
            if ($this->curve instanceof Curve25519 && self::$engines['libsodium']) {
                return sodium_crypto_scalarmult($this->dA->toBytes(), $coordinates);
            }

            $point = [$this->curve->convertInteger(new BigInteger(strrev($coordinates), 256))];
            $point = $this->curve->multiplyPoint($point, $this->dA);
            return strrev($point[0]->toBytes(true));
        }
        if (!$this->curve instanceof TwistedEdwardsCurve) {
            $coordinates = "\0$coordinates";
        }
        $point = PKCS1::extractPoint($coordinates, $this->curve);
        $point = $this->curve->multiplyPoint($point, $this->dA);
        if ($this->curve instanceof TwistedEdwardsCurve) {
            return $this->curve->encodePoint($point);
        }
        if (empty($point)) {
            throw new \RuntimeException('The infinity point is invalid');
        }
        return "\4" . $point[0]->toBytes(true) . $point[1]->toBytes(true);
    }

    /**
     * Create a signature
     *
     * @see self::verify()
     * @param string $message
     * @return mixed
     */
    public function sign($message)
    {
        if ($this->curve instanceof MontgomeryCurve) {
            throw new UnsupportedOperationException('Montgomery Curves cannot be used to create signatures');
        }

        $dA = $this->dA;
        $order = $this->curve->getOrder();

        $shortFormat = $this->shortFormat;
        $format = $this->sigFormat;
        if ($format === false) {
            return false;
        }

        if ($this->curve instanceof TwistedEdwardsCurve) {
            if ($this->curve instanceof Ed25519 && self::$engines['libsodium'] && !isset($this->context)) {
                $result = sodium_crypto_sign_detached($message, $this->withPassword()->toString('libsodium'));
                return $shortFormat == 'SSH2' ? Strings::packSSH2('ss', 'ssh-' . strtolower($this->getCurve()), $result) : $result;
            }

            // contexts (Ed25519ctx) are supported but prehashing (Ed25519ph) is not.
            // quoting https://tools.ietf.org/html/rfc8032#section-8.5 ,
            // "The Ed25519ph and Ed448ph variants ... SHOULD NOT be used"
            $A = $this->curve->encodePoint($this->QA);
            $curve = $this->curve;
            $hash = new Hash($curve::HASH);

            $secret = substr($hash->hash($this->secret), $curve::SIZE);

            if ($curve instanceof Ed25519) {
                $dom = !isset($this->context) ? '' :
                    'SigEd25519 no Ed25519 collisions' . "\0" . chr(strlen($this->context)) . $this->context;
            } else {
                $context = isset($this->context) ? $this->context : '';
                $dom = 'SigEd448' . "\0" . chr(strlen($context)) . $context;
            }
            // SHA-512(dom2(F, C) || prefix || PH(M))
            $r = $hash->hash($dom . $secret . $message);
            $r = strrev($r);
            $r = new BigInteger($r, 256);
            list(, $r) = $r->divide($order);
            $R = $curve->multiplyPoint($curve->getBasePoint(), $r);
            $R = $curve->encodePoint($R);
            $k = $hash->hash($dom . $R . $A . $message);
            $k = strrev($k);
            $k = new BigInteger($k, 256);
            list(, $k) = $k->divide($order);
            $S = $k->multiply($dA)->add($r);
            list(, $S) = $S->divide($order);
            $S = str_pad(strrev($S->toBytes()), $curve::SIZE, "\0");
            return $shortFormat == 'SSH2' ? Strings::packSSH2('ss', 'ssh-' . strtolower($this->getCurve()), $R . $S) : $R . $S;
        }

        if (self::$engines['OpenSSL'] && in_array($this->hash->getHash(), openssl_get_md_methods())) {
            $signature = '';
            // altho PHP's OpenSSL bindings only supported EC key creation in PHP 7.1 they've long
            // supported signing / verification
            // we use specified curves to avoid issues with OpenSSL possibly not supporting a given named curve;
            // doing this may mean some curve-specific optimizations can't be used but idk if OpenSSL even
            // has curve-specific optimizations
            $result = openssl_sign($message, $signature, $this->withPassword()->toString('PKCS8', ['namedCurve' => false]), $this->hash->getHash());

            if ($result) {
                if ($shortFormat == 'ASN1') {
                    return $signature;
                }

                $loaded = ASN1Signature::load($signature);
                $r = $loaded['r'];
                $s = $loaded['s'];


                return $this->formatSignature($r, $s);
            }
        }

        $e = $this->hash->hash($message);
        $e = new BigInteger($e, 256);

        $Ln = $this->hash->getLength() - $order->getLength();
        $z = $Ln > 0 ? $e->bitwise_rightShift($Ln) : $e;

        while (true) {
            $k = BigInteger::randomRange(self::$one, $order->subtract(self::$one));
            list($x, $y) = $this->curve->multiplyPoint($this->curve->getBasePoint(), $k);
            $x = $x->toBigInteger();
            list(, $r) = $x->divide($order);
            if ($r->equals(self::$zero)) {
                continue;
            }
            $kinv = $k->modInverse($order);
            $temp = $z->add($dA->multiply($r));
            $temp = $kinv->multiply($temp);
            list(, $s) = $temp->divide($order);
            if (!$s->equals(self::$zero)) {
                break;
            }
        }

        // the following is an RFC6979 compliant implementation of deterministic ECDSA
        // it's unused because it's mainly intended for use when a good CSPRNG isn't
        // available. if phpseclib's CSPRNG isn't good then even key generation is
        // suspect
        /*
        // if this were actually being used it'd probably be better if this lived in load() and createKey()
        $this->q = $this->curve->getOrder();
        $dA = $this->dA->toBigInteger();
        $this->x = $dA;

        $h1 = $this->hash->hash($message);
        $k = $this->computek($h1);
        list($x, $y) = $this->curve->multiplyPoint($this->curve->getBasePoint(), $k);
        $x = $x->toBigInteger();
        list(, $r) = $x->divide($this->q);
        $kinv = $k->modInverse($this->q);
        $h1 = $this->bits2int($h1);
        $temp = $h1->add($dA->multiply($r));
        $temp = $kinv->multiply($temp);
        list(, $s) = $temp->divide($this->q);
        */

        return $this->formatSignature($r, $s);
    }

    /**
     * Returns the private key
     *
     * @param string $type
     * @param array $options optional
     * @return string
     */
    public function toString($type, array $options = [])
    {
        $type = self::validatePlugin('Keys', $type, 'savePrivateKey');

        return $type::savePrivateKey($this->dA, $this->curve, $this->QA, $this->secret, $this->password, $options);
    }

    /**
     * Returns the public key
     *
     * @see self::getPrivateKey()
     * @return mixed
     */
    public function getPublicKey()
    {
        $format = 'PKCS8';
        if ($this->curve instanceof MontgomeryCurve) {
            $format = 'MontgomeryPublic';
        }

        $type = self::validatePlugin('Keys', $format, 'savePublicKey');

        $key = $type::savePublicKey($this->curve, $this->QA);
        $key = EC::loadFormat($format, $key);
        if ($this->curve instanceof MontgomeryCurve) {
            return $key;
        }
        $key = $key
            ->withHash($this->hash->getHash())
            ->withSignatureFormat($this->shortFormat);
        if ($this->curve instanceof TwistedEdwardsCurve) {
            $key = $key->withContext($this->context);
        }
        return $key;
    }

    /**
     * Returns a signature in the appropriate format
     *
     * @return string
     */
    private function formatSignature(BigInteger $r, BigInteger $s)
    {
        $format = $this->sigFormat;

        $temp = new \ReflectionMethod($format, 'save');
        $paramCount = $temp->getNumberOfRequiredParameters();

        // @codingStandardsIgnoreStart
        switch ($paramCount) {
            case 2: return $format::save($r, $s);
            case 3: return $format::save($r, $s, $this->getCurve());
            case 4: return $format::save($r, $s, $this->getCurve(), $this->getLength());
        }
        // @codingStandardsIgnoreEnd

        // presumably the only way you could get to this is if you were using a custom plugin
        throw new UnsupportedOperationException("$format::save() has $paramCount parameters - the only valid parameter counts are 2 or 3");
    }
}
<?php

/**
 * EC Public Key
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2015 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\Crypt\EC;

use phpseclib3\Common\Functions\Strings;
use phpseclib3\Crypt\Common;
use phpseclib3\Crypt\EC;
use phpseclib3\Crypt\EC\BaseCurves\Montgomery as MontgomeryCurve;
use phpseclib3\Crypt\EC\BaseCurves\TwistedEdwards as TwistedEdwardsCurve;
use phpseclib3\Crypt\EC\Curves\Ed25519;
use phpseclib3\Crypt\EC\Formats\Keys\PKCS1;
use phpseclib3\Crypt\EC\Formats\Signature\ASN1 as ASN1Signature;
use phpseclib3\Crypt\Hash;
use phpseclib3\Exception\UnsupportedOperationException;
use phpseclib3\Math\BigInteger;

/**
 * EC Public Key
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
final class PublicKey extends EC implements Common\PublicKey
{
    use Common\Traits\Fingerprint;

    /**
     * Verify a signature
     *
     * @see self::verify()
     * @param string $message
     * @param string $signature
     * @return mixed
     */
    public function verify($message, $signature)
    {
        if ($this->curve instanceof MontgomeryCurve) {
            throw new UnsupportedOperationException('Montgomery Curves cannot be used to create signatures');
        }

        $shortFormat = $this->shortFormat;
        $format = $this->sigFormat;
        if ($format === false) {
            return false;
        }

        $order = $this->curve->getOrder();

        if ($this->curve instanceof TwistedEdwardsCurve) {
            if ($shortFormat == 'SSH2') {
                list(, $signature) = Strings::unpackSSH2('ss', $signature);
            }

            if ($this->curve instanceof Ed25519 && self::$engines['libsodium'] && !isset($this->context)) {
                return sodium_crypto_sign_verify_detached($signature, $message, $this->toString('libsodium'));
            }

            $curve = $this->curve;
            if (strlen($signature) != 2 * $curve::SIZE) {
                return false;
            }

            $R = substr($signature, 0, $curve::SIZE);
            $S = substr($signature, $curve::SIZE);

            try {
                $R = PKCS1::extractPoint($R, $curve);
                $R = $this->curve->convertToInternal($R);
            } catch (\Exception $e) {
                return false;
            }

            $S = strrev($S);
            $S = new BigInteger($S, 256);

            if ($S->compare($order) >= 0) {
                return false;
            }

            $A = $curve->encodePoint($this->QA);

            if ($curve instanceof Ed25519) {
                $dom2 = !isset($this->context) ? '' :
                    'SigEd25519 no Ed25519 collisions' . "\0" . chr(strlen($this->context)) . $this->context;
            } else {
                $context = isset($this->context) ? $this->context : '';
                $dom2 = 'SigEd448' . "\0" . chr(strlen($context)) . $context;
            }

            $hash = new Hash($curve::HASH);
            $k = $hash->hash($dom2 . substr($signature, 0, $curve::SIZE) . $A . $message);
            $k = strrev($k);
            $k = new BigInteger($k, 256);
            list(, $k) = $k->divide($order);

            $qa = $curve->convertToInternal($this->QA);

            $lhs = $curve->multiplyPoint($curve->getBasePoint(), $S);
            $rhs = $curve->multiplyPoint($qa, $k);
            $rhs = $curve->addPoint($rhs, $R);
            $rhs = $curve->convertToAffine($rhs);

            return $lhs[0]->equals($rhs[0]) && $lhs[1]->equals($rhs[1]);
        }

        $params = $format::load($signature);
        if ($params === false || count($params) != 2) {
            return false;
        }
        $r = $params['r'];
        $s = $params['s'];

        if (self::$engines['OpenSSL'] && in_array($this->hash->getHash(), openssl_get_md_methods())) {
            $sig = $format != 'ASN1' ? ASN1Signature::save($r, $s) : $signature;

            $result = openssl_verify($message, $sig, $this->toString('PKCS8', ['namedCurve' => false]), $this->hash->getHash());

            if ($result != -1) {
                return (bool) $result;
            }
        }

        $n_1 = $order->subtract(self::$one);
        if (!$r->between(self::$one, $n_1) || !$s->between(self::$one, $n_1)) {
            return false;
        }

        $e = $this->hash->hash($message);
        $e = new BigInteger($e, 256);

        $Ln = $this->hash->getLength() - $order->getLength();
        $z = $Ln > 0 ? $e->bitwise_rightShift($Ln) : $e;

        $w = $s->modInverse($order);
        list(, $u1) = $z->multiply($w)->divide($order);
        list(, $u2) = $r->multiply($w)->divide($order);

        $u1 = $this->curve->convertInteger($u1);
        $u2 = $this->curve->convertInteger($u2);

        list($x1, $y1) = $this->curve->multiplyAddPoints(
            [$this->curve->getBasePoint(), $this->QA],
            [$u1, $u2]
        );

        $x1 = $x1->toBigInteger();
        list(, $x1) = $x1->divide($order);

        return $x1->equals($r);
    }

    /**
     * Returns the public key
     *
     * @param string $type
     * @param array $options optional
     * @return string
     */
    public function toString($type, array $options = [])
    {
        $type = self::validatePlugin('Keys', $type, 'savePublicKey');

        return $type::savePublicKey($this->curve, $this->QA, $options);
    }
}
<?php

/**
 * Wrapper around hash() and hash_hmac() functions supporting truncated hashes
 * such as sha256-96.  Any hash algorithm returned by hash_algos() (and
 * truncated versions thereof) are supported.
 *
 * If {@link self::setKey() setKey()} is called, {@link self::hash() hash()} will
 * return the HMAC as opposed to the hash.
 *
 * Here's a short example of how to use this library:
 * <code>
 * <?php
 *    include 'vendor/autoload.php';
 *
 *    $hash = new \phpseclib3\Crypt\Hash('sha512');
 *
 *    $hash->setKey('abcdefg');
 *
 *    echo base64_encode($hash->hash('abcdefg'));
 * ?>
 * </code>
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2015 Jim Wigginton
 * @author    Andreas Fischer <bantu@phpbb.com>
 * @copyright 2015 Andreas Fischer
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\Crypt;

use phpseclib3\Common\Functions\Strings;
use phpseclib3\Exception\InsufficientSetupException;
use phpseclib3\Exception\UnsupportedAlgorithmException;
use phpseclib3\Math\BigInteger;
use phpseclib3\Math\PrimeField;

/**
 * @author  Jim Wigginton <terrafrost@php.net>
 * @author  Andreas Fischer <bantu@phpbb.com>
 */
class Hash
{
    /**
     * Padding Types
     *
     */
    const PADDING_KECCAK = 1;

    /**
     * Padding Types
     *
     */
    const PADDING_SHA3 = 2;

    /**
     * Padding Types
     *
     */
    const PADDING_SHAKE = 3;

    /**
     * Padding Type
     *
     * Only used by SHA3
     *
     * @var int
     */
    private $paddingType = 0;

    /**
     * Hash Parameter
     *
     * @see self::setHash()
     * @var int
     */
    private $hashParam;

    /**
     * Byte-length of hash output (Internal HMAC)
     *
     * @see self::setHash()
     * @var int
     */
    private $length;

    /**
     * Hash Algorithm
     *
     * @see self::setHash()
     * @var string
     */
    private $algo;

    /**
     * Key
     *
     * @see self::setKey()
     * @var string
     */
    private $key = false;

    /**
     * Nonce
     *
     * @see self::setNonce()
     * @var string
     */
    private $nonce = false;

    /**
     * Hash Parameters
     *
     * @var array
     */
    private $parameters = [];

    /**
     * Computed Key
     *
     * @see self::_computeKey()
     * @var string
     */
    private $computedKey = false;

    /**
     * Outer XOR (Internal HMAC)
     *
     * Used only for sha512
     *
     * @see self::hash()
     * @var string
     */
    private $opad;

    /**
     * Inner XOR (Internal HMAC)
     *
     * Used only for sha512
     *
     * @see self::hash()
     * @var string
     */
    private $ipad;

    /**
     * Recompute AES Key
     *
     * Used only for umac
     *
     * @see self::hash()
     * @var boolean
     */
    private $recomputeAESKey;

    /**
     * umac cipher object
     *
     * @see self::hash()
     * @var AES
     */
    private $c;

    /**
     * umac pad
     *
     * @see self::hash()
     * @var string
     */
    private $pad;

    /**
     * Block Size
     *
     * @var int
     */
    private $blockSize;

    /**#@+
     * UMAC variables
     *
     * @var PrimeField
     */
    private static $factory36;
    private static $factory64;
    private static $factory128;
    private static $offset64;
    private static $offset128;
    private static $marker64;
    private static $marker128;
    private static $maxwordrange64;
    private static $maxwordrange128;
    /**#@-*/

    /**#@+
     * AES_CMAC variables
     *
     * @var string
     */
    private $k1;
    private $k2;
    /**#@-*/

    /**
     * Default Constructor.
     *
     * @param string $hash
     */
    public function __construct($hash = 'sha256')
    {
        $this->setHash($hash);
    }

    /**
     * Sets the key for HMACs
     *
     * Keys can be of any length.
     *
     * @param string $key
     */
    public function setKey($key = false)
    {
        $this->key = $key;
        $this->computeKey();
        $this->recomputeAESKey = true;
    }

    /**
     * Sets the nonce for UMACs
     *
     * Keys can be of any length.
     *
     * @param string $nonce
     */
    public function setNonce($nonce = false)
    {
        switch (true) {
            case !is_string($nonce):
            case strlen($nonce) > 0 && strlen($nonce) <= 16:
                $this->recomputeAESKey = true;
                $this->nonce = $nonce;
                return;
        }

        throw new \LengthException('The nonce length must be between 1 and 16 bytes, inclusive');
    }

    /**
     * Pre-compute the key used by the HMAC
     *
     * Quoting http://tools.ietf.org/html/rfc2104#section-2, "Applications that use keys longer than B bytes
     * will first hash the key using H and then use the resultant L byte string as the actual key to HMAC."
     *
     * As documented in https://www.reddit.com/r/PHP/comments/9nct2l/symfonypolyfill_hash_pbkdf2_correct_fix_for/
     * when doing an HMAC multiple times it's faster to compute the hash once instead of computing it during
     * every call
     *
     */
    private function computeKey()
    {
        if ($this->key === false) {
            $this->computedKey = false;
            return;
        }

        if (strlen($this->key) <= $this->getBlockLengthInBytes()) {
            $this->computedKey = $this->key;
            return;
        }

        $this->computedKey = is_array($this->algo) ?
            call_user_func($this->algo, $this->key) :
            hash($this->algo, $this->key, true);
    }

    /**
     * Gets the hash function.
     *
     * As set by the constructor or by the setHash() method.
     *
     * @return string
     */
    public function getHash()
    {
        return $this->hashParam;
    }

    /**
     * Sets the hash function.
     *
     * @param string $hash
     */
    public function setHash($hash)
    {
        $oldHash = $this->hashParam;
        $this->hashParam = $hash = strtolower($hash);
        switch ($hash) {
            case 'umac-32':
            case 'umac-64':
            case 'umac-96':
            case 'umac-128':
                if ($oldHash != $this->hashParam) {
                    $this->recomputeAESKey = true;
                }
                $this->blockSize = 128;
                $this->length = abs(substr($hash, -3)) >> 3;
                $this->algo = 'umac';
                return;
            case 'aes_cmac':
                if ($oldHash != $this->hashParam) {
                    $this->recomputeAESKey = true;
                }
                $this->blockSize = 128;
                $this->length = 16;
                $this->algo = 'aes_cmac';
                return;
            case 'md2-96':
            case 'md5-96':
            case 'sha1-96':
            case 'sha224-96':
            case 'sha256-96':
            case 'sha384-96':
            case 'sha512-96':
            case 'sha512/224-96':
            case 'sha512/256-96':
                $hash = substr($hash, 0, -3);
                $this->length = 12; // 96 / 8 = 12
                break;
            case 'md2':
            case 'md5':
                $this->length = 16;
                break;
            case 'sha1':
                $this->length = 20;
                break;
            case 'sha224':
            case 'sha512/224':
            case 'sha3-224':
                $this->length = 28;
                break;
            case 'keccak256':
                $this->paddingType = self::PADDING_KECCAK;
                // fall-through
            case 'sha256':
            case 'sha512/256':
            case 'sha3-256':
                $this->length = 32;
                break;
            case 'sha384':
            case 'sha3-384':
                $this->length = 48;
                break;
            case 'sha512':
            case 'sha3-512':
                $this->length = 64;
                break;
            default:
                if (preg_match('#^(shake(?:128|256))-(\d+)$#', $hash, $matches)) {
                    $this->paddingType = self::PADDING_SHAKE;
                    $hash = $matches[1];
                    $this->length = $matches[2] >> 3;
                } else {
                    throw new UnsupportedAlgorithmException(
                        "$hash is not a supported algorithm"
                    );
                }
        }

        switch ($hash) {
            case 'md2':
            case 'md2-96':
                $this->blockSize = 128;
                break;
            case 'md5-96':
            case 'sha1-96':
            case 'sha224-96':
            case 'sha256-96':
            case 'md5':
            case 'sha1':
            case 'sha224':
            case 'sha256':
                $this->blockSize = 512;
                break;
            case 'sha3-224':
                $this->blockSize = 1152; // 1600 - 2*224
                break;
            case 'sha3-256':
            case 'shake256':
            case 'keccak256':
                $this->blockSize = 1088; // 1600 - 2*256
                break;
            case 'sha3-384':
                $this->blockSize = 832; // 1600 - 2*384
                break;
            case 'sha3-512':
                $this->blockSize = 576; // 1600 - 2*512
                break;
            case 'shake128':
                $this->blockSize = 1344; // 1600 - 2*128
                break;
            default:
                $this->blockSize = 1024;
        }

        if (in_array(substr($hash, 0, 5), ['sha3-', 'shake', 'kecca'])) {
            // PHP 7.1.0 introduced support for "SHA3 fixed mode algorithms":
            // http://php.net/ChangeLog-7.php#7.1.0
            if (version_compare(PHP_VERSION, '7.1.0') < 0 || substr($hash, 0, 5) != 'sha3-') {
                //preg_match('#(\d+)$#', $hash, $matches);
                //$this->parameters['capacity'] = 2 * $matches[1]; // 1600 - $this->blockSize
                //$this->parameters['rate'] = 1600 - $this->parameters['capacity']; // == $this->blockSize
                if (!$this->paddingType) {
                    $this->paddingType = self::PADDING_SHA3;
                }
                $this->parameters = [
                    'capacity' => 1600 - $this->blockSize,
                    'rate' => $this->blockSize,
                    'length' => $this->length,
                    'padding' => $this->paddingType
                ];
                $hash = ['phpseclib3\Crypt\Hash', PHP_INT_SIZE == 8 ? 'sha3_64' : 'sha3_32'];
            }
        }

        if ($hash == 'sha512/224' || $hash == 'sha512/256') {
            // PHP 7.1.0 introduced sha512/224 and sha512/256 support:
            // http://php.net/ChangeLog-7.php#7.1.0
            if (version_compare(PHP_VERSION, '7.1.0') < 0) {
                // from http://csrc.nist.gov/publications/fips/fips180-4/fips-180-4.pdf#page=24
                $initial = $hash == 'sha512/256' ?
                    [
                        '22312194FC2BF72C', '9F555FA3C84C64C2', '2393B86B6F53B151', '963877195940EABD',
                        '96283EE2A88EFFE3', 'BE5E1E2553863992', '2B0199FC2C85B8AA', '0EB72DDC81C52CA2'
                    ] :
                    [
                        '8C3D37C819544DA2', '73E1996689DCD4D6', '1DFAB7AE32FF9C82', '679DD514582F9FCF',
                        '0F6D2B697BD44DA8', '77E36F7304C48942', '3F9D85A86A1D36C8', '1112E6AD91D692A1'
                    ];
                for ($i = 0; $i < 8; $i++) {
                    if (PHP_INT_SIZE == 8) {
                        list(, $initial[$i]) = unpack('J', pack('H*', $initial[$i]));
                    } else {
                        $initial[$i] = new BigInteger($initial[$i], 16);
                        $initial[$i]->setPrecision(64);
                    }
                }

                $this->parameters = compact('initial');

                $hash = ['phpseclib3\Crypt\Hash', PHP_INT_SIZE == 8 ? 'sha512_64' : 'sha512'];
            }
        }

        if (is_array($hash)) {
            $b = $this->blockSize >> 3;
            $this->ipad = str_repeat(chr(0x36), $b);
            $this->opad = str_repeat(chr(0x5C), $b);
        }

        $this->algo = $hash;

        $this->computeKey();
    }

    /**
     * KDF: Key-Derivation Function
     *
     * The key-derivation function generates pseudorandom bits used to key the hash functions.
     *
     * @param int $index a non-negative integer less than 2^64
     * @param int $numbytes a non-negative integer less than 2^64
     * @return string string of length numbytes bytes
     */
    private function kdf($index, $numbytes)
    {
        $this->c->setIV(pack('N4', 0, $index, 0, 1));

        return $this->c->encrypt(str_repeat("\0", $numbytes));
    }

    /**
     * PDF Algorithm
     *
     * @return string string of length taglen bytes.
     */
    private function pdf()
    {
        $k = $this->key;
        $nonce = $this->nonce;
        $taglen = $this->length;

        //
        // Extract and zero low bit(s) of Nonce if needed
        //
        if ($taglen <= 8) {
            $last = strlen($nonce) - 1;
            $mask = $taglen == 4 ? "\3" : "\1";
            $index = $nonce[$last] & $mask;
            $nonce[$last] = $nonce[$last] ^ $index;
        }

        //
        // Make Nonce BLOCKLEN bytes by appending zeroes if needed
        //
        $nonce = str_pad($nonce, 16, "\0");

        //
        // Generate subkey, encipher and extract indexed substring
        //
        $kp = $this->kdf(0, 16);
        $c = new AES('ctr');
        $c->disablePadding();
        $c->setKey($kp);
        $c->setIV($nonce);
        $t = $c->encrypt("\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0");

        // we could use ord() but per https://paragonie.com/blog/2016/06/constant-time-encoding-boring-cryptography-rfc-4648-and-you
        // unpack() doesn't leak timing info
        return $taglen <= 8 ?
            substr($t, unpack('C', $index)[1] * $taglen, $taglen) :
            substr($t, 0, $taglen);
    }

    /**
     * UHASH Algorithm
     *
     * @param string $m string of length less than 2^67 bits.
     * @param int $taglen the integer 4, 8, 12 or 16.
     * @return string string of length taglen bytes.
     */
    private function uhash($m, $taglen)
    {
        //
        // One internal iteration per 4 bytes of output
        //
        $iters = $taglen >> 2;

        //
        // Define total key needed for all iterations using KDF.
        // L1Key reuses most key material between iterations.
        //
        //$L1Key  = $this->kdf(1, 1024 + ($iters - 1) * 16);
        $L1Key  = $this->kdf(1, (1024 + ($iters - 1)) * 16);
        $L2Key  = $this->kdf(2, $iters * 24);
        $L3Key1 = $this->kdf(3, $iters * 64);
        $L3Key2 = $this->kdf(4, $iters * 4);

        //
        // For each iteration, extract key and do three-layer hash.
        // If bytelength(M) <= 1024, then skip L2-HASH.
        //
        $y = '';
        for ($i = 0; $i < $iters; $i++) {
            $L1Key_i  = substr($L1Key, $i * 16, 1024);
            $L2Key_i  = substr($L2Key, $i * 24, 24);
            $L3Key1_i = substr($L3Key1, $i * 64, 64);
            $L3Key2_i = substr($L3Key2, $i * 4, 4);

            $a = self::L1Hash($L1Key_i, $m);
            $b = strlen($m) <= 1024 ? "\0\0\0\0\0\0\0\0$a" : self::L2Hash($L2Key_i, $a);
            $c = self::L3Hash($L3Key1_i, $L3Key2_i, $b);
            $y .= $c;
        }

        return $y;
    }

    /**
     * L1-HASH Algorithm
     *
     * The first-layer hash breaks the message into 1024-byte chunks and
     * hashes each with a function called NH.  Concatenating the results
     * forms a string, which is up to 128 times shorter than the original.
     *
     * @param string $k string of length 1024 bytes.
     * @param string $m string of length less than 2^67 bits.
     * @return string string of length (8 * ceil(bitlength(M)/8192)) bytes.
     */
    private static function L1Hash($k, $m)
    {
        //
        // Break M into 1024 byte chunks (final chunk may be shorter)
        //
        $m = str_split($m, 1024);

        //
        // For each chunk, except the last: endian-adjust, NH hash
        // and add bit-length.  Use results to build Y.
        //
        $length = 1024 * 8;
        $y = '';

        for ($i = 0; $i < count($m) - 1; $i++) {
            $m[$i] = pack('N*', ...unpack('V*', $m[$i])); // ENDIAN-SWAP
            $y .= PHP_INT_SIZE == 8 ?
                static::nh64($k, $m[$i], $length) :
                static::nh32($k, $m[$i], $length);
        }

        //
        // For the last chunk: pad to 32-byte boundary, endian-adjust,
        // NH hash and add bit-length.  Concatenate the result to Y.
        //
        $length = count($m) ? strlen($m[$i]) : 0;
        $pad = 32 - ($length % 32);
        $pad = max(32, $length + $pad % 32);
        $m[$i] = str_pad(isset($m[$i]) ? $m[$i] : '', $pad, "\0"); // zeropad
        $m[$i] = pack('N*', ...unpack('V*', $m[$i])); // ENDIAN-SWAP

        $y .= PHP_INT_SIZE == 8 ?
            static::nh64($k, $m[$i], $length * 8) :
            static::nh32($k, $m[$i], $length * 8);

        return $y;
    }

    /**
     * 32-bit safe 64-bit Multiply with 2x 32-bit ints
     *
     * @param int $x
     * @param int $y
     * @return string $x * $y
     */
    private static function mul32_64($x, $y)
    {
        // see mul64() for a more detailed explanation of how this works

        $x1 = ($x >> 16) & 0xFFFF;
        $x0 = $x & 0xFFFF;

        $y1 = ($y >> 16) & 0xFFFF;
        $y0 = $y & 0xFFFF;

        // the following 3x lines will possibly yield floats
        $z2 = $x1 * $y1;
        $z0 = $x0 * $y0;
        $z1 = $x1 * $y0 + $x0 * $y1;

        $a = intval(fmod($z0, 65536));
        $b = intval($z0 / 65536) + intval(fmod($z1, 65536));
        $c = intval($z1 / 65536) + intval(fmod($z2, 65536)) + intval($b / 65536);
        $b = intval(fmod($b, 65536));
        $d = intval($z2 / 65536) + intval($c / 65536);
        $c = intval(fmod($c, 65536));
        $d = intval(fmod($d, 65536));

        return pack('n4', $d, $c, $b, $a);
    }

    /**
     * 32-bit safe 64-bit Addition with 2x 64-bit strings
     *
     * @param int $x
     * @param int $y
     * @return int $x * $y
     */
    private static function add32_64($x, $y)
    {
        list(, $x1, $x2, $x3, $x4) = unpack('n4', $x);
        list(, $y1, $y2, $y3, $y4) = unpack('n4', $y);
        $a = $x4 + $y4;
        $b = $x3 + $y3 + ($a >> 16);
        $c = $x2 + $y2 + ($b >> 16);
        $d = $x1 + $y1 + ($c >> 16);
        return pack('n4', $d, $c, $b, $a);
    }

    /**
     * 32-bit safe 32-bit Addition with 2x 32-bit strings
     *
     * @param int $x
     * @param int $y
     * @return int $x * $y
     */
    private static function add32($x, $y)
    {
        // see add64() for a more detailed explanation of how this works

        $x1 = $x & 0xFFFF;
        $x2 = ($x >> 16) & 0xFFFF;
        $y1 = $y & 0xFFFF;
        $y2 = ($y >> 16) & 0xFFFF;

        $a = $x1 + $y1;
        $b = ($x2 + $y2 + ($a >> 16)) << 16;
        $a &= 0xFFFF;

        return $a | $b;
    }

    /**
     * NH Algorithm / 32-bit safe
     *
     * @param string $k string of length 1024 bytes.
     * @param string $m string with length divisible by 32 bytes.
     * @return string string of length 8 bytes.
     */
    private static function nh32($k, $m, $length)
    {
        //
        // Break M and K into 4-byte chunks
        //
        $k = unpack('N*', $k);
        $m = unpack('N*', $m);
        $t = count($m);

        //
        // Perform NH hash on the chunks, pairing words for multiplication
        // which are 4 apart to accommodate vector-parallelism.
        //
        $i = 1;
        $y = "\0\0\0\0\0\0\0\0";
        while ($i <= $t) {
            $temp  = self::add32($m[$i], $k[$i]);
            $temp2 = self::add32($m[$i + 4], $k[$i + 4]);
            $y = self::add32_64($y, self::mul32_64($temp, $temp2));

            $temp  = self::add32($m[$i + 1], $k[$i + 1]);
            $temp2 = self::add32($m[$i + 5], $k[$i + 5]);
            $y = self::add32_64($y, self::mul32_64($temp, $temp2));

            $temp  = self::add32($m[$i + 2], $k[$i + 2]);
            $temp2 = self::add32($m[$i + 6], $k[$i + 6]);
            $y = self::add32_64($y, self::mul32_64($temp, $temp2));

            $temp  = self::add32($m[$i + 3], $k[$i + 3]);
            $temp2 = self::add32($m[$i + 7], $k[$i + 7]);
            $y = self::add32_64($y, self::mul32_64($temp, $temp2));

            $i += 8;
        }

        return self::add32_64($y, pack('N2', 0, $length));
    }

    /**
     * 64-bit Multiply with 2x 32-bit ints
     *
     * @param int $x
     * @param int $y
     * @return int $x * $y
     */
    private static function mul64($x, $y)
    {
        // since PHP doesn't implement unsigned integers we'll implement them with signed integers
        // to do this we'll use karatsuba multiplication

        $x1 = $x >> 16;
        $x0 = $x & 0xFFFF;

        $y1 = $y >> 16;
        $y0 = $y & 0xFFFF;

        $z2 = $x1 * $y1; // up to 32 bits long
        $z0 = $x0 * $y0; // up to 32 bits long
        $z1 = $x1 * $y0 + $x0 * $y1; // up to 33 bit long
        // normally karatsuba multiplication calculates $z1 thusly:
        //$z1 = ($x1 + $x0) * ($y0 + $y1) - $z2 - $z0;
        // the idea being to eliminate one extra multiplication. for arbitrary precision math that makes sense
        // but not for this purpose

        // at this point karatsuba would normally return this:
        //return ($z2 << 64) + ($z1 << 32) + $z0;
        // the problem is that the output could be out of range for signed 64-bit ints,
        // which would cause PHP to switch to floats, which would risk losing the lower few bits
        // as such we'll OR 4x 16-bit blocks together like so:
        /*
          ........  |  ........  |  ........  |  ........
          upper $z2 |  lower $z2 |  lower $z1 |  lower $z0
                    | +upper $z1 | +upper $z0 |
         +   $carry | +   $carry |            |
        */
        // technically upper $z1 is 17 bit - not 16 - but the most significant digit of that will
        // just get added to $carry

        $a = $z0 & 0xFFFF;
        $b = ($z0 >> 16) + ($z1 & 0xFFFF);
        $c = ($z1 >> 16) + ($z2 & 0xFFFF) + ($b >> 16);
        $b = ($b & 0xFFFF) << 16;
        $d = ($z2 >> 16) + ($c >> 16);
        $c = ($c & 0xFFFF) << 32;
        $d = ($d & 0xFFFF) << 48;

        return $a | $b | $c | $d;
    }

    /**
     * 64-bit Addition with 2x 64-bit ints
     *
     * @param int $x
     * @param int $y
     * @return int $x + $y
     */
    private static function add64($x, $y)
    {
        // doing $x + $y risks returning a result that's out of range for signed 64-bit ints
        // in that event PHP would convert the result to a float and precision would be lost
        // so we'll just add 2x 32-bit ints together like so:
        /*
           ........ | ........
           upper $x | lower $x
          +upper $y |+lower $y
          +  $carry |
        */
        $x1 = $x & 0xFFFFFFFF;
        $x2 = ($x >> 32) & 0xFFFFFFFF;
        $y1 = $y & 0xFFFFFFFF;
        $y2 = ($y >> 32) & 0xFFFFFFFF;

        $a = $x1 + $y1;
        $b = ($x2 + $y2 + ($a >> 32)) << 32;
        $a &= 0xFFFFFFFF;

        return $a | $b;
    }

    /**
     * NH Algorithm / 64-bit safe
     *
     * @param string $k string of length 1024 bytes.
     * @param string $m string with length divisible by 32 bytes.
     * @return string string of length 8 bytes.
     */
    private static function nh64($k, $m, $length)
    {
        //
        // Break M and K into 4-byte chunks
        //
        $k = unpack('N*', $k);
        $m = unpack('N*', $m);
        $t = count($m);

        //
        // Perform NH hash on the chunks, pairing words for multiplication
        // which are 4 apart to accommodate vector-parallelism.
        //
        $i = 1;
        $y = 0;
        while ($i <= $t) {
            $temp  = ($m[$i] + $k[$i]) & 0xFFFFFFFF;
            $temp2 = ($m[$i + 4] + $k[$i + 4]) & 0xFFFFFFFF;
            $y = self::add64($y, self::mul64($temp, $temp2));

            $temp  = ($m[$i + 1] + $k[$i + 1]) & 0xFFFFFFFF;
            $temp2 = ($m[$i + 5] + $k[$i + 5]) & 0xFFFFFFFF;
            $y = self::add64($y, self::mul64($temp, $temp2));

            $temp  = ($m[$i + 2] + $k[$i + 2]) & 0xFFFFFFFF;
            $temp2 = ($m[$i + 6] + $k[$i + 6]) & 0xFFFFFFFF;
            $y = self::add64($y, self::mul64($temp, $temp2));

            $temp  = ($m[$i + 3] + $k[$i + 3]) & 0xFFFFFFFF;
            $temp2 = ($m[$i + 7] + $k[$i + 7]) & 0xFFFFFFFF;
            $y = self::add64($y, self::mul64($temp, $temp2));

            $i += 8;
        }

        return pack('J', self::add64($y, $length));
    }

    /**
     * L2-HASH: Second-Layer Hash
     *
     * The second-layer rehashes the L1-HASH output using a polynomial hash
     * called POLY.  If the L1-HASH output is long, then POLY is called once
     * on a prefix of the L1-HASH output and called using different settings
     * on the remainder.  (This two-step hashing of the L1-HASH output is
     * needed only if the message length is greater than 16 megabytes.)
     * Careful implementation of POLY is necessary to avoid a possible
     * timing attack (see Section 6.6 for more information).
     *
     * @param string $k string of length 24 bytes.
     * @param string $m string of length less than 2^64 bytes.
     * @return string string of length 16 bytes.
     */
    private static function L2Hash($k, $m)
    {
        //
        //  Extract keys and restrict to special key-sets
        //
        $k64 = $k & "\x01\xFF\xFF\xFF\x01\xFF\xFF\xFF";
        $k64 = new BigInteger($k64, 256);
        $k128 = substr($k, 8) & "\x01\xFF\xFF\xFF\x01\xFF\xFF\xFF\x01\xFF\xFF\xFF\x01\xFF\xFF\xFF";
        $k128 = new BigInteger($k128, 256);

        //
        // If M is no more than 2^17 bytes, hash under 64-bit prime,
        // otherwise, hash first 2^17 bytes under 64-bit prime and
        // remainder under 128-bit prime.
        //
        if (strlen($m) <= 0x20000) { // 2^14 64-bit words
            $y = self::poly(64, self::$maxwordrange64, $k64, $m);
        } else {
            $m_1 = substr($m, 0, 0x20000); // 1 << 17
            $m_2 = substr($m, 0x20000) . "\x80";
            $length = strlen($m_2);
            $pad = 16 - ($length % 16);
            $pad %= 16;
            $m_2 = str_pad($m_2, $length + $pad, "\0"); // zeropad
            $y = self::poly(64, self::$maxwordrange64, $k64, $m_1);
            $y = str_pad($y, 16, "\0", STR_PAD_LEFT);
            $y = self::poly(128, self::$maxwordrange128, $k128, $y . $m_2);
        }

        return str_pad($y, 16, "\0", STR_PAD_LEFT);
    }

    /**
     * POLY Algorithm
     *
     * @param int $wordbits the integer 64 or 128.
     * @param BigInteger $maxwordrange positive integer less than 2^wordbits.
     * @param BigInteger $k integer in the range 0 ... prime(wordbits) - 1.
     * @param string $m string with length divisible by (wordbits / 8) bytes.
     * @return integer in the range 0 ... prime(wordbits) - 1.
     */
    private static function poly($wordbits, $maxwordrange, $k, $m)
    {
        //
        // Define constants used for fixing out-of-range words
        //
        $wordbytes = $wordbits >> 3;
        if ($wordbits == 128) {
            $factory = self::$factory128;
            $offset = self::$offset128;
            $marker = self::$marker128;
        } else {
            $factory = self::$factory64;
            $offset = self::$offset64;
            $marker = self::$marker64;
        }

        $k = $factory->newInteger($k);

        //
        // Break M into chunks of length wordbytes bytes
        //
        $m_i = str_split($m, $wordbytes);

        //
        // Each input word m is compared with maxwordrange.  If not smaller
        // then 'marker' and (m - offset), both in range, are hashed.
        //
        $y = $factory->newInteger(new BigInteger(1));
        foreach ($m_i as $m) {
            $m = $factory->newInteger(new BigInteger($m, 256));
            if ($m->compare($maxwordrange) >= 0) {
                $y = $k->multiply($y)->add($marker);
                $y = $k->multiply($y)->add($m->subtract($offset));
            } else {
                $y = $k->multiply($y)->add($m);
            }
        }

        return $y->toBytes();
    }

    /**
     * L3-HASH: Third-Layer Hash
     *
     * The output from L2-HASH is 16 bytes long.  This final hash function
     * hashes the 16-byte string to a fixed length of 4 bytes.
     *
     * @param string $k1 string of length 64 bytes.
     * @param string $k2 string of length 4 bytes.
     * @param string $m string of length 16 bytes.
     * @return string string of length 4 bytes.
     */
    private static function L3Hash($k1, $k2, $m)
    {
        $factory = self::$factory36;

        $y = $factory->newInteger(new BigInteger());
        for ($i = 0; $i < 8; $i++) {
            $m_i = $factory->newInteger(new BigInteger(substr($m, 2 * $i, 2), 256));
            $k_i = $factory->newInteger(new BigInteger(substr($k1, 8 * $i, 8), 256));
            $y = $y->add($m_i->multiply($k_i));
        }
        $y = str_pad(substr($y->toBytes(), -4), 4, "\0", STR_PAD_LEFT);
        $y = $y ^ $k2;

        return $y;
    }

    /**
     * Compute the Hash / HMAC / UMAC.
     *
     * @param string $text
     * @return string
     */
    public function hash($text)
    {
        $algo = $this->algo;
        // https://www.rfc-editor.org/rfc/rfc4493.html
        // https://en.wikipedia.org/wiki/One-key_MAC
        if ($algo == 'aes_cmac') {
            $constZero = "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0";
            if ($this->recomputeAESKey) {
                if (!is_string($this->key)) {
                    throw new InsufficientSetupException('No key has been set');
                }
                if (strlen($this->key) != 16) {
                    throw new \LengthException('Key must be 16 bytes long');
                }
                // Algorithm Generate_Subkey
                $constRb = "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x87";
                $this->c = new AES('ecb');
                $this->c->setKey($this->key);
                $this->c->disablePadding();
                $l = $this->c->encrypt($constZero);
                $msb = ($l & "\x80") == "\x80";
                $l = new BigInteger($l, 256);
                $l->setPrecision(128);
                $l = $l->bitwise_leftShift(1)->toBytes();
                // make it constant time
                $k1 = $msb ? $l ^ $constRb : $l | $constZero;

                $msb = ($k1 & "\x80") == "\x80";
                $k2 = new BigInteger($k1, 256);
                $k2->setPrecision(128);
                $k2 = $k2->bitwise_leftShift(1)->toBytes();
                // make it constant time
                $k2 = $msb ? $k2 ^ $constRb : $k2 | $constZero;

                $this->k1 = $k1;
                $this->k2 = $k2;
            }

            $len = strlen($text);
            $const_Bsize = 16;
            $M = strlen($text) ? str_split($text, $const_Bsize) : [''];

            // Step 2
            $n = ceil($len / $const_Bsize);
            // Step 3
            if ($n == 0) {
                $n = 1;
                $flag = false;
            } else {
                $flag = $len % $const_Bsize == 0;
            }
            // Step 4
            $M_last = $flag ?
                $M[$n - 1] ^ $k1 :
                self::OMAC_padding($M[$n - 1], $const_Bsize) ^ $k2;
            // Step 5
            $x = $constZero;
            // Step 6
            $c = &$this->c;
            for ($i = 0; $i < $n - 1; $i++) {
                $y = $x ^ $M[$i];
                $x = $c->encrypt($y);
            }
            $y = $M_last ^ $x;
            return $c->encrypt($y);
        }
        if ($algo == 'umac') {
            if ($this->recomputeAESKey) {
                if (!is_string($this->nonce)) {
                    throw new InsufficientSetupException('No nonce has been set');
                }
                if (!is_string($this->key)) {
                    throw new InsufficientSetupException('No key has been set');
                }
                if (strlen($this->key) != 16) {
                    throw new \LengthException('Key must be 16 bytes long');
                }

                if (!isset(self::$maxwordrange64)) {
                    $one = new BigInteger(1);

                    $prime36 = new BigInteger("\x00\x00\x00\x0F\xFF\xFF\xFF\xFB", 256);
                    self::$factory36 = new PrimeField($prime36);

                    $prime64 = new BigInteger("\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xC5", 256);
                    self::$factory64 = new PrimeField($prime64);

                    $prime128 = new BigInteger("\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x61", 256);
                    self::$factory128 = new PrimeField($prime128);

                    self::$offset64 = new BigInteger("\1\0\0\0\0\0\0\0\0", 256);
                    self::$offset64 = self::$factory64->newInteger(self::$offset64->subtract($prime64));
                    self::$offset128 = new BigInteger("\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0", 256);
                    self::$offset128 = self::$factory128->newInteger(self::$offset128->subtract($prime128));

                    self::$marker64 = self::$factory64->newInteger($prime64->subtract($one));
                    self::$marker128 = self::$factory128->newInteger($prime128->subtract($one));

                    $maxwordrange64 = $one->bitwise_leftShift(64)->subtract($one->bitwise_leftShift(32));
                    self::$maxwordrange64 = self::$factory64->newInteger($maxwordrange64);

                    $maxwordrange128 = $one->bitwise_leftShift(128)->subtract($one->bitwise_leftShift(96));
                    self::$maxwordrange128 = self::$factory128->newInteger($maxwordrange128);
                }

                $this->c = new AES('ctr');
                $this->c->disablePadding();
                $this->c->setKey($this->key);

                $this->pad = $this->pdf();

                $this->recomputeAESKey = false;
            }

            $hashedmessage = $this->uhash($text, $this->length);
            return $hashedmessage ^ $this->pad;
        }

        if (is_array($algo)) {
            if (empty($this->key) || !is_string($this->key)) {
                return substr($algo($text, ...array_values($this->parameters)), 0, $this->length);
            }

            // SHA3 HMACs are discussed at https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.202.pdf#page=30

            $key    = str_pad($this->computedKey, $b, chr(0));
            $temp   = $this->ipad ^ $key;
            $temp  .= $text;
            $temp   = substr($algo($temp, ...array_values($this->parameters)), 0, $this->length);
            $output = $this->opad ^ $key;
            $output .= $temp;
            $output = $algo($output, ...array_values($this->parameters));

            return substr($output, 0, $this->length);
        }

        $output = !empty($this->key) || is_string($this->key) ?
            hash_hmac($algo, $text, $this->computedKey, true) :
            hash($algo, $text, true);

        return strlen($output) > $this->length
            ? substr($output, 0, $this->length)
            : $output;
    }

    /**
     * Returns the hash length (in bits)
     *
     * @return int
     */
    public function getLength()
    {
        return $this->length << 3;
    }

    /**
     * Returns the hash length (in bytes)
     *
     * @return int
     */
    public function getLengthInBytes()
    {
        return $this->length;
    }

    /**
     * Returns the block length (in bits)
     *
     * @return int
     */
    public function getBlockLength()
    {
        return $this->blockSize;
    }

    /**
     * Returns the block length (in bytes)
     *
     * @return int
     */
    public function getBlockLengthInBytes()
    {
        return $this->blockSize >> 3;
    }

    /**
     * Pads SHA3 based on the mode
     *
     * @param int $padLength
     * @param int $padType
     * @return string
     */
    private static function sha3_pad($padLength, $padType)
    {
        switch ($padType) {
            case self::PADDING_KECCAK:
                $temp = chr(0x01) . str_repeat("\0", $padLength - 1);
                $temp[$padLength - 1] = $temp[$padLength - 1] | chr(0x80);
                return $temp;
            case self::PADDING_SHAKE:
                $temp = chr(0x1F) . str_repeat("\0", $padLength - 1);
                $temp[$padLength - 1] = $temp[$padLength - 1] | chr(0x80);
                return $temp;
            //case self::PADDING_SHA3:
            default:
                // from https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.202.pdf#page=36
                return $padLength == 1 ? chr(0x86) : chr(0x06) . str_repeat("\0", $padLength - 2) . chr(0x80);
        }
    }

    /**
     * Pure-PHP 32-bit implementation of SHA3
     *
     * Whereas BigInteger.php's 32-bit engine works on PHP 64-bit this 32-bit implementation
     * of SHA3 will *not* work on PHP 64-bit. This is because this implementation
     * employees bitwise NOTs and bitwise left shifts. And the round constants only work
     * on 32-bit PHP. eg. dechex(-2147483648) returns 80000000 on 32-bit PHP and
     * FFFFFFFF80000000 on 64-bit PHP. Sure, we could do bitwise ANDs but that would slow
     * things down.
     *
     * SHA512 requires BigInteger to simulate 64-bit unsigned integers because SHA2 employees
     * addition whereas SHA3 just employees bitwise operators. PHP64 only supports signed
     * 64-bit integers, which complicates addition, whereas that limitation isn't an issue
     * for SHA3.
     *
     * In https://ws680.nist.gov/publication/get_pdf.cfm?pub_id=919061#page=16 KECCAK[C] is
     * defined as "the KECCAK instance with KECCAK-f[1600] as the underlying permutation and
     * capacity c". This is relevant because, altho the KECCAK standard defines a mode
     * (KECCAK-f[800]) designed for 32-bit machines that mode is incompatible with SHA3
     *
     * @param string $p
     * @param int $c
     * @param int $r
     * @param int $d
     * @param int $padType
     */
    private static function sha3_32($p, $c, $r, $d, $padType)
    {
        $block_size = $r >> 3;
        $padLength = $block_size - (strlen($p) % $block_size);
        $num_ints = $block_size >> 2;

        $p .= static::sha3_pad($padLength, $padType);

        $n = strlen($p) / $r; // number of blocks

        $s = [
            [[0, 0], [0, 0], [0, 0], [0, 0], [0, 0]],
            [[0, 0], [0, 0], [0, 0], [0, 0], [0, 0]],
            [[0, 0], [0, 0], [0, 0], [0, 0], [0, 0]],
            [[0, 0], [0, 0], [0, 0], [0, 0], [0, 0]],
            [[0, 0], [0, 0], [0, 0], [0, 0], [0, 0]]
        ];

        $p = str_split($p, $block_size);

        foreach ($p as $pi) {
            $pi = unpack('V*', $pi);
            $x = $y = 0;
            for ($i = 1; $i <= $num_ints; $i += 2) {
                $s[$x][$y][0] ^= $pi[$i + 1];
                $s[$x][$y][1] ^= $pi[$i];
                if (++$y == 5) {
                    $y = 0;
                    $x++;
                }
            }
            static::processSHA3Block32($s);
        }

        $z = '';
        $i = $j = 0;
        while (strlen($z) < $d) {
            $z .= pack('V2', $s[$i][$j][1], $s[$i][$j++][0]);
            if ($j == 5) {
                $j = 0;
                $i++;
                if ($i == 5) {
                    $i = 0;
                    static::processSHA3Block32($s);
                }
            }
        }

        return $z;
    }

    /**
     * 32-bit block processing method for SHA3
     *
     * @param array $s
     */
    private static function processSHA3Block32(&$s)
    {
        static $rotationOffsets = [
            [ 0,  1, 62, 28, 27],
            [36, 44,  6, 55, 20],
            [ 3, 10, 43, 25, 39],
            [41, 45, 15, 21,  8],
            [18,  2, 61, 56, 14]
        ];

        // the standards give these constants in hexadecimal notation. it's tempting to want to use
        // that same notation, here, however, we can't, because 0x80000000, on PHP32, is a positive
        // float - not the negative int that we need to be in PHP32. so we use -2147483648 instead
        static $roundConstants = [
            [0, 1],
            [0, 32898],
            [-2147483648, 32906],
            [-2147483648, -2147450880],
            [0, 32907],
            [0, -2147483647],
            [-2147483648, -2147450751],
            [-2147483648, 32777],
            [0, 138],
            [0, 136],
            [0, -2147450871],
            [0, -2147483638],
            [0, -2147450741],
            [-2147483648, 139],
            [-2147483648, 32905],
            [-2147483648, 32771],
            [-2147483648, 32770],
            [-2147483648, 128],
            [0, 32778],
            [-2147483648, -2147483638],
            [-2147483648, -2147450751],
            [-2147483648, 32896],
            [0, -2147483647],
            [-2147483648, -2147450872]
        ];

        for ($round = 0; $round < 24; $round++) {
            // theta step
            $parity = $rotated = [];
            for ($i = 0; $i < 5; $i++) {
                $parity[] = [
                    $s[0][$i][0] ^ $s[1][$i][0] ^ $s[2][$i][0] ^ $s[3][$i][0] ^ $s[4][$i][0],
                    $s[0][$i][1] ^ $s[1][$i][1] ^ $s[2][$i][1] ^ $s[3][$i][1] ^ $s[4][$i][1]
                ];
                $rotated[] = static::rotateLeft32($parity[$i], 1);
            }

            $temp = [
                [$parity[4][0] ^ $rotated[1][0], $parity[4][1] ^ $rotated[1][1]],
                [$parity[0][0] ^ $rotated[2][0], $parity[0][1] ^ $rotated[2][1]],
                [$parity[1][0] ^ $rotated[3][0], $parity[1][1] ^ $rotated[3][1]],
                [$parity[2][0] ^ $rotated[4][0], $parity[2][1] ^ $rotated[4][1]],
                [$parity[3][0] ^ $rotated[0][0], $parity[3][1] ^ $rotated[0][1]]
            ];
            for ($i = 0; $i < 5; $i++) {
                for ($j = 0; $j < 5; $j++) {
                    $s[$i][$j][0] ^= $temp[$j][0];
                    $s[$i][$j][1] ^= $temp[$j][1];
                }
            }

            $st = $s;

            // rho and pi steps
            for ($i = 0; $i < 5; $i++) {
                for ($j = 0; $j < 5; $j++) {
                    $st[(2 * $i + 3 * $j) % 5][$j] = static::rotateLeft32($s[$j][$i], $rotationOffsets[$j][$i]);
                }
            }

            // chi step
            for ($i = 0; $i < 5; $i++) {
                $s[$i][0] = [
                    $st[$i][0][0] ^ (~$st[$i][1][0] & $st[$i][2][0]),
                    $st[$i][0][1] ^ (~$st[$i][1][1] & $st[$i][2][1])
                ];
                $s[$i][1] = [
                    $st[$i][1][0] ^ (~$st[$i][2][0] & $st[$i][3][0]),
                    $st[$i][1][1] ^ (~$st[$i][2][1] & $st[$i][3][1])
                ];
                $s[$i][2] = [
                    $st[$i][2][0] ^ (~$st[$i][3][0] & $st[$i][4][0]),
                    $st[$i][2][1] ^ (~$st[$i][3][1] & $st[$i][4][1])
                ];
                $s[$i][3] = [
                    $st[$i][3][0] ^ (~$st[$i][4][0] & $st[$i][0][0]),
                    $st[$i][3][1] ^ (~$st[$i][4][1] & $st[$i][0][1])
                ];
                $s[$i][4] = [
                    $st[$i][4][0] ^ (~$st[$i][0][0] & $st[$i][1][0]),
                    $st[$i][4][1] ^ (~$st[$i][0][1] & $st[$i][1][1])
                ];
            }

            // iota step
            $s[0][0][0] ^= $roundConstants[$round][0];
            $s[0][0][1] ^= $roundConstants[$round][1];
        }
    }

    /**
     * Rotate 32-bit int
     *
     * @param array $x
     * @param int $shift
     */
    private static function rotateLeft32($x, $shift)
    {
        if ($shift < 32) {
            list($hi, $lo) = $x;
        } else {
            $shift -= 32;
            list($lo, $hi) = $x;
        }

        $mask = -1 ^ (-1 << $shift);
        return [
            ($hi << $shift) | (($lo >> (32 - $shift)) & $mask),
            ($lo << $shift) | (($hi >> (32 - $shift)) & $mask)
        ];
    }

    /**
     * Pure-PHP 64-bit implementation of SHA3
     *
     * @param string $p
     * @param int $c
     * @param int $r
     * @param int $d
     * @param int $padType
     */
    private static function sha3_64($p, $c, $r, $d, $padType)
    {
        $block_size = $r >> 3;
        $padLength = $block_size - (strlen($p) % $block_size);
        $num_ints = $block_size >> 2;

        $p .= static::sha3_pad($padLength, $padType);

        $n = strlen($p) / $r; // number of blocks

        $s = [
            [0, 0, 0, 0, 0],
            [0, 0, 0, 0, 0],
            [0, 0, 0, 0, 0],
            [0, 0, 0, 0, 0],
            [0, 0, 0, 0, 0]
        ];

        $p = str_split($p, $block_size);

        foreach ($p as $pi) {
            $pi = unpack('P*', $pi);
            $x = $y = 0;
            foreach ($pi as $subpi) {
                $s[$x][$y++] ^= $subpi;
                if ($y == 5) {
                    $y = 0;
                    $x++;
                }
            }
            static::processSHA3Block64($s);
        }

        $z = '';
        $i = $j = 0;
        while (strlen($z) < $d) {
            $z .= pack('P', $s[$i][$j++]);
            if ($j == 5) {
                $j = 0;
                $i++;
                if ($i == 5) {
                    $i = 0;
                    static::processSHA3Block64($s);
                }
            }
        }

        return $z;
    }

    /**
     * 64-bit block processing method for SHA3
     *
     * @param array $s
     */
    private static function processSHA3Block64(&$s)
    {
        static $rotationOffsets = [
            [ 0,  1, 62, 28, 27],
            [36, 44,  6, 55, 20],
            [ 3, 10, 43, 25, 39],
            [41, 45, 15, 21,  8],
            [18,  2, 61, 56, 14]
        ];

        static $roundConstants = [
            1,
            32898,
            -9223372036854742902,
            -9223372034707259392,
            32907,
            2147483649,
            -9223372034707259263,
            -9223372036854743031,
            138,
            136,
            2147516425,
            2147483658,
            2147516555,
            -9223372036854775669,
            -9223372036854742903,
            -9223372036854743037,
            -9223372036854743038,
            -9223372036854775680,
            32778,
            -9223372034707292150,
            -9223372034707259263,
            -9223372036854742912,
            2147483649,
            -9223372034707259384
        ];

        for ($round = 0; $round < 24; $round++) {
            // theta step
            $parity = [];
            for ($i = 0; $i < 5; $i++) {
                $parity[] = $s[0][$i] ^ $s[1][$i] ^ $s[2][$i] ^ $s[3][$i] ^ $s[4][$i];
            }
            $temp = [
                $parity[4] ^ static::rotateLeft64($parity[1], 1),
                $parity[0] ^ static::rotateLeft64($parity[2], 1),
                $parity[1] ^ static::rotateLeft64($parity[3], 1),
                $parity[2] ^ static::rotateLeft64($parity[4], 1),
                $parity[3] ^ static::rotateLeft64($parity[0], 1)
            ];
            for ($i = 0; $i < 5; $i++) {
                for ($j = 0; $j < 5; $j++) {
                    $s[$i][$j] ^= $temp[$j];
                }
            }

            $st = $s;

            // rho and pi steps
            for ($i = 0; $i < 5; $i++) {
                for ($j = 0; $j < 5; $j++) {
                    $st[(2 * $i + 3 * $j) % 5][$j] = static::rotateLeft64($s[$j][$i], $rotationOffsets[$j][$i]);
                }
            }

            // chi step
            for ($i = 0; $i < 5; $i++) {
                $s[$i] = [
                    $st[$i][0] ^ (~$st[$i][1] & $st[$i][2]),
                    $st[$i][1] ^ (~$st[$i][2] & $st[$i][3]),
                    $st[$i][2] ^ (~$st[$i][3] & $st[$i][4]),
                    $st[$i][3] ^ (~$st[$i][4] & $st[$i][0]),
                    $st[$i][4] ^ (~$st[$i][0] & $st[$i][1])
                ];
            }

            // iota step
            $s[0][0] ^= $roundConstants[$round];
        }
    }

    /**
     * Left rotate 64-bit int
     *
     * @param int $x
     * @param int $shift
     */
    private static function rotateLeft64($x, $shift)
    {
        $mask = -1 ^ (-1 << $shift);
        return ($x << $shift) | (($x >> (64 - $shift)) & $mask);
    }

    /**
     * Right rotate 64-bit int
     *
     * @param int $x
     * @param int $shift
     */
    private static function rotateRight64($x, $shift)
    {
        $mask = -1 ^ (-1 << (64 - $shift));
        return (($x >> $shift) & $mask) | ($x << (64 - $shift));
    }

    /**
     * Pure-PHP implementation of SHA512
     *
     * @param string $m
     * @param array $hash
     * @return string
     */
    private static function sha512($m, $hash)
    {
        static $k;

        if (!isset($k)) {
            // Initialize table of round constants
            // (first 64 bits of the fractional parts of the cube roots of the first 80 primes 2..409)
            $k = [
                '428a2f98d728ae22', '7137449123ef65cd', 'b5c0fbcfec4d3b2f', 'e9b5dba58189dbbc',
                '3956c25bf348b538', '59f111f1b605d019', '923f82a4af194f9b', 'ab1c5ed5da6d8118',
                'd807aa98a3030242', '12835b0145706fbe', '243185be4ee4b28c', '550c7dc3d5ffb4e2',
                '72be5d74f27b896f', '80deb1fe3b1696b1', '9bdc06a725c71235', 'c19bf174cf692694',
                'e49b69c19ef14ad2', 'efbe4786384f25e3', '0fc19dc68b8cd5b5', '240ca1cc77ac9c65',
                '2de92c6f592b0275', '4a7484aa6ea6e483', '5cb0a9dcbd41fbd4', '76f988da831153b5',
                '983e5152ee66dfab', 'a831c66d2db43210', 'b00327c898fb213f', 'bf597fc7beef0ee4',
                'c6e00bf33da88fc2', 'd5a79147930aa725', '06ca6351e003826f', '142929670a0e6e70',
                '27b70a8546d22ffc', '2e1b21385c26c926', '4d2c6dfc5ac42aed', '53380d139d95b3df',
                '650a73548baf63de', '766a0abb3c77b2a8', '81c2c92e47edaee6', '92722c851482353b',
                'a2bfe8a14cf10364', 'a81a664bbc423001', 'c24b8b70d0f89791', 'c76c51a30654be30',
                'd192e819d6ef5218', 'd69906245565a910', 'f40e35855771202a', '106aa07032bbd1b8',
                '19a4c116b8d2d0c8', '1e376c085141ab53', '2748774cdf8eeb99', '34b0bcb5e19b48a8',
                '391c0cb3c5c95a63', '4ed8aa4ae3418acb', '5b9cca4f7763e373', '682e6ff3d6b2b8a3',
                '748f82ee5defb2fc', '78a5636f43172f60', '84c87814a1f0ab72', '8cc702081a6439ec',
                '90befffa23631e28', 'a4506cebde82bde9', 'bef9a3f7b2c67915', 'c67178f2e372532b',
                'ca273eceea26619c', 'd186b8c721c0c207', 'eada7dd6cde0eb1e', 'f57d4f7fee6ed178',
                '06f067aa72176fba', '0a637dc5a2c898a6', '113f9804bef90dae', '1b710b35131c471b',
                '28db77f523047d84', '32caab7b40c72493', '3c9ebe0a15c9bebc', '431d67c49c100d4c',
                '4cc5d4becb3e42b6', '597f299cfc657e2a', '5fcb6fab3ad6faec', '6c44198c4a475817'
            ];

            for ($i = 0; $i < 80; $i++) {
                $k[$i] = new BigInteger($k[$i], 16);
            }
        }

        // Pre-processing
        $length = strlen($m);
        // to round to nearest 112 mod 128, we'll add 128 - (length + (128 - 112)) % 128
        $m .= str_repeat(chr(0), 128 - (($length + 16) & 0x7F));
        $m[$length] = chr(0x80);
        // we don't support hashing strings 512MB long
        $m .= pack('N4', 0, 0, 0, $length << 3);

        // Process the message in successive 1024-bit chunks
        $chunks = str_split($m, 128);
        foreach ($chunks as $chunk) {
            $w = [];
            for ($i = 0; $i < 16; $i++) {
                $temp = new BigInteger(Strings::shift($chunk, 8), 256);
                $temp->setPrecision(64);
                $w[] = $temp;
            }

            // Extend the sixteen 32-bit words into eighty 32-bit words
            for ($i = 16; $i < 80; $i++) {
                $temp = [
                          $w[$i - 15]->bitwise_rightRotate(1),
                          $w[$i - 15]->bitwise_rightRotate(8),
                          $w[$i - 15]->bitwise_rightShift(7)
                ];
                $s0 = $temp[0]->bitwise_xor($temp[1]);
                $s0 = $s0->bitwise_xor($temp[2]);
                $temp = [
                          $w[$i - 2]->bitwise_rightRotate(19),
                          $w[$i - 2]->bitwise_rightRotate(61),
                          $w[$i - 2]->bitwise_rightShift(6)
                ];
                $s1 = $temp[0]->bitwise_xor($temp[1]);
                $s1 = $s1->bitwise_xor($temp[2]);
                $w[$i] = clone $w[$i - 16];
                $w[$i] = $w[$i]->add($s0);
                $w[$i] = $w[$i]->add($w[$i - 7]);
                $w[$i] = $w[$i]->add($s1);
            }

            // Initialize hash value for this chunk
            $a = clone $hash[0];
            $b = clone $hash[1];
            $c = clone $hash[2];
            $d = clone $hash[3];
            $e = clone $hash[4];
            $f = clone $hash[5];
            $g = clone $hash[6];
            $h = clone $hash[7];

            // Main loop
            for ($i = 0; $i < 80; $i++) {
                $temp = [
                    $a->bitwise_rightRotate(28),
                    $a->bitwise_rightRotate(34),
                    $a->bitwise_rightRotate(39)
                ];
                $s0 = $temp[0]->bitwise_xor($temp[1]);
                $s0 = $s0->bitwise_xor($temp[2]);
                $temp = [
                    $a->bitwise_and($b),
                    $a->bitwise_and($c),
                    $b->bitwise_and($c)
                ];
                $maj = $temp[0]->bitwise_xor($temp[1]);
                $maj = $maj->bitwise_xor($temp[2]);
                $t2 = $s0->add($maj);

                $temp = [
                    $e->bitwise_rightRotate(14),
                    $e->bitwise_rightRotate(18),
                    $e->bitwise_rightRotate(41)
                ];
                $s1 = $temp[0]->bitwise_xor($temp[1]);
                $s1 = $s1->bitwise_xor($temp[2]);
                $temp = [
                    $e->bitwise_and($f),
                    $g->bitwise_and($e->bitwise_not())
                ];
                $ch = $temp[0]->bitwise_xor($temp[1]);
                $t1 = $h->add($s1);
                $t1 = $t1->add($ch);
                $t1 = $t1->add($k[$i]);
                $t1 = $t1->add($w[$i]);

                $h = clone $g;
                $g = clone $f;
                $f = clone $e;
                $e = $d->add($t1);
                $d = clone $c;
                $c = clone $b;
                $b = clone $a;
                $a = $t1->add($t2);
            }

            // Add this chunk's hash to result so far
            $hash = [
                $hash[0]->add($a),
                $hash[1]->add($b),
                $hash[2]->add($c),
                $hash[3]->add($d),
                $hash[4]->add($e),
                $hash[5]->add($f),
                $hash[6]->add($g),
                $hash[7]->add($h)
            ];
        }

        // Produce the final hash value (big-endian)
        // (\phpseclib3\Crypt\Hash::hash() trims the output for hashes but not for HMACs.  as such, we trim the output here)
        $temp = $hash[0]->toBytes() . $hash[1]->toBytes() . $hash[2]->toBytes() . $hash[3]->toBytes() .
                $hash[4]->toBytes() . $hash[5]->toBytes() . $hash[6]->toBytes() . $hash[7]->toBytes();

        return $temp;
    }

    /**
     * Pure-PHP implementation of SHA512
     *
     * @param string $m
     * @param array $hash
     * @return string
     */
    private static function sha512_64($m, $hash)
    {
        static $k;

        if (!isset($k)) {
            // Initialize table of round constants
            // (first 64 bits of the fractional parts of the cube roots of the first 80 primes 2..409)
            $k = [
                '428a2f98d728ae22', '7137449123ef65cd', 'b5c0fbcfec4d3b2f', 'e9b5dba58189dbbc',
                '3956c25bf348b538', '59f111f1b605d019', '923f82a4af194f9b', 'ab1c5ed5da6d8118',
                'd807aa98a3030242', '12835b0145706fbe', '243185be4ee4b28c', '550c7dc3d5ffb4e2',
                '72be5d74f27b896f', '80deb1fe3b1696b1', '9bdc06a725c71235', 'c19bf174cf692694',
                'e49b69c19ef14ad2', 'efbe4786384f25e3', '0fc19dc68b8cd5b5', '240ca1cc77ac9c65',
                '2de92c6f592b0275', '4a7484aa6ea6e483', '5cb0a9dcbd41fbd4', '76f988da831153b5',
                '983e5152ee66dfab', 'a831c66d2db43210', 'b00327c898fb213f', 'bf597fc7beef0ee4',
                'c6e00bf33da88fc2', 'd5a79147930aa725', '06ca6351e003826f', '142929670a0e6e70',
                '27b70a8546d22ffc', '2e1b21385c26c926', '4d2c6dfc5ac42aed', '53380d139d95b3df',
                '650a73548baf63de', '766a0abb3c77b2a8', '81c2c92e47edaee6', '92722c851482353b',
                'a2bfe8a14cf10364', 'a81a664bbc423001', 'c24b8b70d0f89791', 'c76c51a30654be30',
                'd192e819d6ef5218', 'd69906245565a910', 'f40e35855771202a', '106aa07032bbd1b8',
                '19a4c116b8d2d0c8', '1e376c085141ab53', '2748774cdf8eeb99', '34b0bcb5e19b48a8',
                '391c0cb3c5c95a63', '4ed8aa4ae3418acb', '5b9cca4f7763e373', '682e6ff3d6b2b8a3',
                '748f82ee5defb2fc', '78a5636f43172f60', '84c87814a1f0ab72', '8cc702081a6439ec',
                '90befffa23631e28', 'a4506cebde82bde9', 'bef9a3f7b2c67915', 'c67178f2e372532b',
                'ca273eceea26619c', 'd186b8c721c0c207', 'eada7dd6cde0eb1e', 'f57d4f7fee6ed178',
                '06f067aa72176fba', '0a637dc5a2c898a6', '113f9804bef90dae', '1b710b35131c471b',
                '28db77f523047d84', '32caab7b40c72493', '3c9ebe0a15c9bebc', '431d67c49c100d4c',
                '4cc5d4becb3e42b6', '597f299cfc657e2a', '5fcb6fab3ad6faec', '6c44198c4a475817'
            ];

            for ($i = 0; $i < 80; $i++) {
                list(, $k[$i]) = unpack('J', pack('H*', $k[$i]));
            }
        }

        // Pre-processing
        $length = strlen($m);
        // to round to nearest 112 mod 128, we'll add 128 - (length + (128 - 112)) % 128
        $m .= str_repeat(chr(0), 128 - (($length + 16) & 0x7F));
        $m[$length] = chr(0x80);
        // we don't support hashing strings 512MB long
        $m .= pack('N4', 0, 0, 0, $length << 3);

        // Process the message in successive 1024-bit chunks
        $chunks = str_split($m, 128);
        foreach ($chunks as $chunk) {
            $w = [];
            for ($i = 0; $i < 16; $i++) {
                list(, $w[]) = unpack('J', Strings::shift($chunk, 8));
            }

            // Extend the sixteen 32-bit words into eighty 32-bit words
            for ($i = 16; $i < 80; $i++) {
                $temp = [
                    self::rotateRight64($w[$i - 15], 1),
                    self::rotateRight64($w[$i - 15], 8),
                    ($w[$i - 15] >> 7) & 0x01FFFFFFFFFFFFFF,
                ];
                $s0 = $temp[0] ^ $temp[1] ^ $temp[2];
                $temp = [
                    self::rotateRight64($w[$i - 2], 19),
                    self::rotateRight64($w[$i - 2], 61),
                    ($w[$i - 2] >> 6) & 0x03FFFFFFFFFFFFFF,
                ];
                $s1 = $temp[0] ^ $temp[1] ^ $temp[2];

                $w[$i] = $w[$i - 16];
                $w[$i] = self::add64($w[$i], $s0);
                $w[$i] = self::add64($w[$i], $w[$i - 7]);
                $w[$i] = self::add64($w[$i], $s1);
            }

            // Initialize hash value for this chunk
            list($a, $b, $c, $d, $e, $f, $g, $h) = $hash;

            // Main loop
            for ($i = 0; $i < 80; $i++) {
                $temp = [
                    self::rotateRight64($a, 28),
                    self::rotateRight64($a, 34),
                    self::rotateRight64($a, 39),
                ];
                $s0 = $temp[0] ^ $temp[1] ^ $temp[2];
                $temp = [$a & $b, $a & $c, $b & $c];
                $maj = $temp[0] ^ $temp[1] ^ $temp[2];
                $t2 = self::add64($s0, $maj);

                $temp = [
                    self::rotateRight64($e, 14),
                    self::rotateRight64($e, 18),
                    self::rotateRight64($e, 41),
                ];
                $s1 = $temp[0] ^ $temp[1] ^ $temp[2];
                $ch = ($e & $f) ^ ($g & ~$e);
                $t1 = self::add64($h, $s1);
                $t1 = self::add64($t1, $ch);
                $t1 = self::add64($t1, $k[$i]);
                $t1 = self::add64($t1, $w[$i]);

                $h = $g;
                $g = $f;
                $f = $e;
                $e = self::add64($d, $t1);
                $d = $c;
                $c = $b;
                $b = $a;
                $a = self::add64($t1, $t2);
            }

            // Add this chunk's hash to result so far
            $hash = [
                self::add64($hash[0], $a),
                self::add64($hash[1], $b),
                self::add64($hash[2], $c),
                self::add64($hash[3], $d),
                self::add64($hash[4], $e),
                self::add64($hash[5], $f),
                self::add64($hash[6], $g),
                self::add64($hash[7], $h),
            ];
        }

        // Produce the final hash value (big-endian)
        // (\phpseclib3\Crypt\Hash::hash() trims the output for hashes but not for HMACs.  as such, we trim the output here)
        return pack('J*', ...$hash);
    }

    /**
     *  OMAC Padding
     *
     * @link https://www.rfc-editor.org/rfc/rfc4493.html#section-2.4
     */
    private static function OMAC_padding($m, $length)
    {
        $count = $length - strlen($m) - 1;
        return "$m\x80" . str_repeat("\0", $count);
    }

    /**
     *  __toString() magic method
     */
    public function __toString()
    {
        return $this->getHash();
    }
}
<?php

/**
 * PublicKeyLoader
 *
 * Returns a PublicKey or PrivateKey object.
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2009 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\Crypt;

use phpseclib3\Crypt\Common\AsymmetricKey;
use phpseclib3\Crypt\Common\PrivateKey;
use phpseclib3\Crypt\Common\PublicKey;
use phpseclib3\Exception\NoKeyLoadedException;
use phpseclib3\File\X509;

/**
 * PublicKeyLoader
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class PublicKeyLoader
{
    /**
     * Loads a public or private key
     *
     * @return AsymmetricKey
     * @param string|array $key
     * @param string $password optional
     * @throws NoKeyLoadedException if key is not valid
     */
    public static function load($key, $password = false)
    {
        try {
            return EC::load($key, $password);
        } catch (NoKeyLoadedException $e) {
        }

        try {
            return RSA::load($key, $password);
        } catch (NoKeyLoadedException $e) {
        }

        try {
            return DSA::load($key, $password);
        } catch (NoKeyLoadedException $e) {
        }

        try {
            $x509 = new X509();
            $x509->loadX509($key);
            $key = $x509->getPublicKey();
            if ($key) {
                return $key;
            }
        } catch (\Exception $e) {
        }

        throw new NoKeyLoadedException('Unable to read key');
    }

    /**
     * Loads a private key
     *
     * @return PrivateKey
     * @param string|array $key
     * @param string $password optional
     */
    public static function loadPrivateKey($key, $password = false)
    {
        $key = self::load($key, $password);
        if (!$key instanceof PrivateKey) {
            throw new NoKeyLoadedException('The key that was loaded was not a private key');
        }
        return $key;
    }

    /**
     * Loads a public key
     *
     * @return PublicKey
     * @param string|array $key
     */
    public static function loadPublicKey($key)
    {
        $key = self::load($key);
        if (!$key instanceof PublicKey) {
            throw new NoKeyLoadedException('The key that was loaded was not a public key');
        }
        return $key;
    }

    /**
     * Loads parameters
     *
     * @return AsymmetricKey
     * @param string|array $key
     */
    public static function loadParameters($key)
    {
        $key = self::load($key);
        if (!$key instanceof PrivateKey && !$key instanceof PublicKey) {
            throw new NoKeyLoadedException('The key that was loaded was not a parameter');
        }
        return $key;
    }
}
<?php

/**
 * Pure-PHP implementation of RC2.
 *
 * Uses mcrypt, if available, and an internal implementation, otherwise.
 *
 * PHP version 5
 *
 * Useful resources are as follows:
 *
 *  - {@link http://tools.ietf.org/html/rfc2268}
 *
 * Here's a short example of how to use this library:
 * <code>
 * <?php
 *    include 'vendor/autoload.php';
 *
 *    $rc2 = new \phpseclib3\Crypt\RC2('ctr');
 *
 *    $rc2->setKey('abcdefgh');
 *
 *    $plaintext = str_repeat('a', 1024);
 *
 *    echo $rc2->decrypt($rc2->encrypt($plaintext));
 * ?>
 * </code>
 *
 * @author   Patrick Monnerat <pm@datasphere.ch>
 * @license  http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link     http://phpseclib.sourceforge.net
 */

namespace phpseclib3\Crypt;

use phpseclib3\Crypt\Common\BlockCipher;
use phpseclib3\Exception\BadModeException;

/**
 * Pure-PHP implementation of RC2.
 *
 */
class RC2 extends BlockCipher
{
    /**
     * Block Length of the cipher
     *
     * @see Common\SymmetricKey::block_size
     * @var int
     */
    protected $block_size = 8;

    /**
     * The Key
     *
     * @see Common\SymmetricKey::key
     * @see self::setKey()
     * @var string
     */
    protected $key;

    /**
     * The Original (unpadded) Key
     *
     * @see Common\SymmetricKey::key
     * @see self::setKey()
     * @see self::encrypt()
     * @see self::decrypt()
     * @var string
     */
    private $orig_key;

    /**
     * Key Length (in bytes)
     *
     * @see \phpseclib3\Crypt\RC2::setKeyLength()
     * @var int
     */
    protected $key_length = 16; // = 128 bits

    /**
     * The mcrypt specific name of the cipher
     *
     * @see Common\SymmetricKey::cipher_name_mcrypt
     * @var string
     */
    protected $cipher_name_mcrypt = 'rc2';

    /**
     * Optimizing value while CFB-encrypting
     *
     * @see Common\SymmetricKey::cfb_init_len
     * @var int
     */
    protected $cfb_init_len = 500;

    /**
     * The key length in bits.
     *
     * {@internal Should be in range [1..1024].}
     *
     * {@internal Changing this value after setting the key has no effect.}
     *
     * @see self::setKeyLength()
     * @see self::setKey()
     * @var int
     */
    private $default_key_length = 1024;

    /**
     * The key length in bits.
     *
     * {@internal Should be in range [1..1024].}
     *
     * @see self::isValidEnine()
     * @see self::setKey()
     * @var int
     */
    private $current_key_length;

    /**
     * The Key Schedule
     *
     * @see self::setupKey()
     * @var array
     */
    private $keys;

    /**
     * Key expansion randomization table.
     * Twice the same 256-value sequence to save a modulus in key expansion.
     *
     * @see self::setKey()
     * @var array
     */
    private static $pitable = [
        0xD9, 0x78, 0xF9, 0xC4, 0x19, 0xDD, 0xB5, 0xED,
        0x28, 0xE9, 0xFD, 0x79, 0x4A, 0xA0, 0xD8, 0x9D,
        0xC6, 0x7E, 0x37, 0x83, 0x2B, 0x76, 0x53, 0x8E,
        0x62, 0x4C, 0x64, 0x88, 0x44, 0x8B, 0xFB, 0xA2,
        0x17, 0x9A, 0x59, 0xF5, 0x87, 0xB3, 0x4F, 0x13,
        0x61, 0x45, 0x6D, 0x8D, 0x09, 0x81, 0x7D, 0x32,
        0xBD, 0x8F, 0x40, 0xEB, 0x86, 0xB7, 0x7B, 0x0B,
        0xF0, 0x95, 0x21, 0x22, 0x5C, 0x6B, 0x4E, 0x82,
        0x54, 0xD6, 0x65, 0x93, 0xCE, 0x60, 0xB2, 0x1C,
        0x73, 0x56, 0xC0, 0x14, 0xA7, 0x8C, 0xF1, 0xDC,
        0x12, 0x75, 0xCA, 0x1F, 0x3B, 0xBE, 0xE4, 0xD1,
        0x42, 0x3D, 0xD4, 0x30, 0xA3, 0x3C, 0xB6, 0x26,
        0x6F, 0xBF, 0x0E, 0xDA, 0x46, 0x69, 0x07, 0x57,
        0x27, 0xF2, 0x1D, 0x9B, 0xBC, 0x94, 0x43, 0x03,
        0xF8, 0x11, 0xC7, 0xF6, 0x90, 0xEF, 0x3E, 0xE7,
        0x06, 0xC3, 0xD5, 0x2F, 0xC8, 0x66, 0x1E, 0xD7,
        0x08, 0xE8, 0xEA, 0xDE, 0x80, 0x52, 0xEE, 0xF7,
        0x84, 0xAA, 0x72, 0xAC, 0x35, 0x4D, 0x6A, 0x2A,
        0x96, 0x1A, 0xD2, 0x71, 0x5A, 0x15, 0x49, 0x74,
        0x4B, 0x9F, 0xD0, 0x5E, 0x04, 0x18, 0xA4, 0xEC,
        0xC2, 0xE0, 0x41, 0x6E, 0x0F, 0x51, 0xCB, 0xCC,
        0x24, 0x91, 0xAF, 0x50, 0xA1, 0xF4, 0x70, 0x39,
        0x99, 0x7C, 0x3A, 0x85, 0x23, 0xB8, 0xB4, 0x7A,
        0xFC, 0x02, 0x36, 0x5B, 0x25, 0x55, 0x97, 0x31,
        0x2D, 0x5D, 0xFA, 0x98, 0xE3, 0x8A, 0x92, 0xAE,
        0x05, 0xDF, 0x29, 0x10, 0x67, 0x6C, 0xBA, 0xC9,
        0xD3, 0x00, 0xE6, 0xCF, 0xE1, 0x9E, 0xA8, 0x2C,
        0x63, 0x16, 0x01, 0x3F, 0x58, 0xE2, 0x89, 0xA9,
        0x0D, 0x38, 0x34, 0x1B, 0xAB, 0x33, 0xFF, 0xB0,
        0xBB, 0x48, 0x0C, 0x5F, 0xB9, 0xB1, 0xCD, 0x2E,
        0xC5, 0xF3, 0xDB, 0x47, 0xE5, 0xA5, 0x9C, 0x77,
        0x0A, 0xA6, 0x20, 0x68, 0xFE, 0x7F, 0xC1, 0xAD,
        0xD9, 0x78, 0xF9, 0xC4, 0x19, 0xDD, 0xB5, 0xED,
        0x28, 0xE9, 0xFD, 0x79, 0x4A, 0xA0, 0xD8, 0x9D,
        0xC6, 0x7E, 0x37, 0x83, 0x2B, 0x76, 0x53, 0x8E,
        0x62, 0x4C, 0x64, 0x88, 0x44, 0x8B, 0xFB, 0xA2,
        0x17, 0x9A, 0x59, 0xF5, 0x87, 0xB3, 0x4F, 0x13,
        0x61, 0x45, 0x6D, 0x8D, 0x09, 0x81, 0x7D, 0x32,
        0xBD, 0x8F, 0x40, 0xEB, 0x86, 0xB7, 0x7B, 0x0B,
        0xF0, 0x95, 0x21, 0x22, 0x5C, 0x6B, 0x4E, 0x82,
        0x54, 0xD6, 0x65, 0x93, 0xCE, 0x60, 0xB2, 0x1C,
        0x73, 0x56, 0xC0, 0x14, 0xA7, 0x8C, 0xF1, 0xDC,
        0x12, 0x75, 0xCA, 0x1F, 0x3B, 0xBE, 0xE4, 0xD1,
        0x42, 0x3D, 0xD4, 0x30, 0xA3, 0x3C, 0xB6, 0x26,
        0x6F, 0xBF, 0x0E, 0xDA, 0x46, 0x69, 0x07, 0x57,
        0x27, 0xF2, 0x1D, 0x9B, 0xBC, 0x94, 0x43, 0x03,
        0xF8, 0x11, 0xC7, 0xF6, 0x90, 0xEF, 0x3E, 0xE7,
        0x06, 0xC3, 0xD5, 0x2F, 0xC8, 0x66, 0x1E, 0xD7,
        0x08, 0xE8, 0xEA, 0xDE, 0x80, 0x52, 0xEE, 0xF7,
        0x84, 0xAA, 0x72, 0xAC, 0x35, 0x4D, 0x6A, 0x2A,
        0x96, 0x1A, 0xD2, 0x71, 0x5A, 0x15, 0x49, 0x74,
        0x4B, 0x9F, 0xD0, 0x5E, 0x04, 0x18, 0xA4, 0xEC,
        0xC2, 0xE0, 0x41, 0x6E, 0x0F, 0x51, 0xCB, 0xCC,
        0x24, 0x91, 0xAF, 0x50, 0xA1, 0xF4, 0x70, 0x39,
        0x99, 0x7C, 0x3A, 0x85, 0x23, 0xB8, 0xB4, 0x7A,
        0xFC, 0x02, 0x36, 0x5B, 0x25, 0x55, 0x97, 0x31,
        0x2D, 0x5D, 0xFA, 0x98, 0xE3, 0x8A, 0x92, 0xAE,
        0x05, 0xDF, 0x29, 0x10, 0x67, 0x6C, 0xBA, 0xC9,
        0xD3, 0x00, 0xE6, 0xCF, 0xE1, 0x9E, 0xA8, 0x2C,
        0x63, 0x16, 0x01, 0x3F, 0x58, 0xE2, 0x89, 0xA9,
        0x0D, 0x38, 0x34, 0x1B, 0xAB, 0x33, 0xFF, 0xB0,
        0xBB, 0x48, 0x0C, 0x5F, 0xB9, 0xB1, 0xCD, 0x2E,
        0xC5, 0xF3, 0xDB, 0x47, 0xE5, 0xA5, 0x9C, 0x77,
        0x0A, 0xA6, 0x20, 0x68, 0xFE, 0x7F, 0xC1, 0xAD
    ];

    /**
     * Inverse key expansion randomization table.
     *
     * @see self::setKey()
     * @var array
     */
    private static $invpitable = [
        0xD1, 0xDA, 0xB9, 0x6F, 0x9C, 0xC8, 0x78, 0x66,
        0x80, 0x2C, 0xF8, 0x37, 0xEA, 0xE0, 0x62, 0xA4,
        0xCB, 0x71, 0x50, 0x27, 0x4B, 0x95, 0xD9, 0x20,
        0x9D, 0x04, 0x91, 0xE3, 0x47, 0x6A, 0x7E, 0x53,
        0xFA, 0x3A, 0x3B, 0xB4, 0xA8, 0xBC, 0x5F, 0x68,
        0x08, 0xCA, 0x8F, 0x14, 0xD7, 0xC0, 0xEF, 0x7B,
        0x5B, 0xBF, 0x2F, 0xE5, 0xE2, 0x8C, 0xBA, 0x12,
        0xE1, 0xAF, 0xB2, 0x54, 0x5D, 0x59, 0x76, 0xDB,
        0x32, 0xA2, 0x58, 0x6E, 0x1C, 0x29, 0x64, 0xF3,
        0xE9, 0x96, 0x0C, 0x98, 0x19, 0x8D, 0x3E, 0x26,
        0xAB, 0xA5, 0x85, 0x16, 0x40, 0xBD, 0x49, 0x67,
        0xDC, 0x22, 0x94, 0xBB, 0x3C, 0xC1, 0x9B, 0xEB,
        0x45, 0x28, 0x18, 0xD8, 0x1A, 0x42, 0x7D, 0xCC,
        0xFB, 0x65, 0x8E, 0x3D, 0xCD, 0x2A, 0xA3, 0x60,
        0xAE, 0x93, 0x8A, 0x48, 0x97, 0x51, 0x15, 0xF7,
        0x01, 0x0B, 0xB7, 0x36, 0xB1, 0x2E, 0x11, 0xFD,
        0x84, 0x2D, 0x3F, 0x13, 0x88, 0xB3, 0x34, 0x24,
        0x1B, 0xDE, 0xC5, 0x1D, 0x4D, 0x2B, 0x17, 0x31,
        0x74, 0xA9, 0xC6, 0x43, 0x6D, 0x39, 0x90, 0xBE,
        0xC3, 0xB0, 0x21, 0x6B, 0xF6, 0x0F, 0xD5, 0x99,
        0x0D, 0xAC, 0x1F, 0x5C, 0x9E, 0xF5, 0xF9, 0x4C,
        0xD6, 0xDF, 0x89, 0xE4, 0x8B, 0xFF, 0xC7, 0xAA,
        0xE7, 0xED, 0x46, 0x25, 0xB6, 0x06, 0x5E, 0x35,
        0xB5, 0xEC, 0xCE, 0xE8, 0x6C, 0x30, 0x55, 0x61,
        0x4A, 0xFE, 0xA0, 0x79, 0x03, 0xF0, 0x10, 0x72,
        0x7C, 0xCF, 0x52, 0xA6, 0xA7, 0xEE, 0x44, 0xD3,
        0x9A, 0x57, 0x92, 0xD0, 0x5A, 0x7A, 0x41, 0x7F,
        0x0E, 0x00, 0x63, 0xF2, 0x4F, 0x05, 0x83, 0xC9,
        0xA1, 0xD4, 0xDD, 0xC4, 0x56, 0xF4, 0xD2, 0x77,
        0x81, 0x09, 0x82, 0x33, 0x9F, 0x07, 0x86, 0x75,
        0x38, 0x4E, 0x69, 0xF1, 0xAD, 0x23, 0x73, 0x87,
        0x70, 0x02, 0xC2, 0x1E, 0xB8, 0x0A, 0xFC, 0xE6
    ];

    /**
     * Default Constructor.
     *
     * @param string $mode
     * @throws \InvalidArgumentException if an invalid / unsupported mode is provided
     */
    public function __construct($mode)
    {
        parent::__construct($mode);

        if ($this->mode == self::MODE_STREAM) {
            throw new BadModeException('Block ciphers cannot be ran in stream mode');
        }
    }

    /**
     * Test for engine validity
     *
     * This is mainly just a wrapper to set things up for \phpseclib3\Crypt\Common\SymmetricKey::isValidEngine()
     *
     * @see Common\SymmetricKey::__construct()
     * @param int $engine
     * @return bool
     */
    protected function isValidEngineHelper($engine)
    {
        switch ($engine) {
            case self::ENGINE_OPENSSL:
                if ($this->current_key_length != 128 || strlen($this->orig_key) < 16) {
                    return false;
                }
                // quoting https://www.openssl.org/news/openssl-3.0-notes.html, OpenSSL 3.0.1
                // "Moved all variations of the EVP ciphers CAST5, BF, IDEA, SEED, RC2, RC4, RC5, and DES to the legacy provider"
                // in theory openssl_get_cipher_methods() should catch this but, on GitHub Actions, at least, it does not
                if (defined('OPENSSL_VERSION_TEXT') && version_compare(preg_replace('#OpenSSL (\d+\.\d+\.\d+) .*#', '$1', OPENSSL_VERSION_TEXT), '3.0.1', '>=')) {
                    return false;
                }
                $this->cipher_name_openssl_ecb = 'rc2-ecb';
                $this->cipher_name_openssl = 'rc2-' . $this->openssl_translate_mode();
        }

        return parent::isValidEngineHelper($engine);
    }

    /**
     * Sets the key length.
     *
     * Valid key lengths are 8 to 1024.
     * Calling this function after setting the key has no effect until the next
     *  \phpseclib3\Crypt\RC2::setKey() call.
     *
     * @param int $length in bits
     * @throws \LengthException if the key length isn't supported
     */
    public function setKeyLength($length)
    {
        if ($length < 8 || $length > 1024) {
            throw new \LengthException('Key size of ' . $length . ' bits is not supported by this algorithm. Only keys between 1 and 1024 bits, inclusive, are supported');
        }

        $this->default_key_length = $this->current_key_length = $length;
        $this->explicit_key_length = $length >> 3;
    }

    /**
     * Returns the current key length
     *
     * @return int
     */
    public function getKeyLength()
    {
        return $this->current_key_length;
    }

    /**
     * Sets the key.
     *
     * Keys can be of any length. RC2, itself, uses 8 to 1024 bit keys (eg.
     * strlen($key) <= 128), however, we only use the first 128 bytes if $key
     * has more then 128 bytes in it, and set $key to a single null byte if
     * it is empty.
     *
     * @see Common\SymmetricKey::setKey()
     * @param string $key
     * @param int|boolean $t1 optional Effective key length in bits.
     * @throws \LengthException if the key length isn't supported
     */
    public function setKey($key, $t1 = false)
    {
        $this->orig_key = $key;

        if ($t1 === false) {
            $t1 = $this->default_key_length;
        }

        if ($t1 < 1 || $t1 > 1024) {
            throw new \LengthException('Key size of ' . $length . ' bits is not supported by this algorithm. Only keys between 1 and 1024 bits, inclusive, are supported');
        }

        $this->current_key_length = $t1;
        if (strlen($key) < 1 || strlen($key) > 128) {
            throw new \LengthException('Key of size ' . strlen($key) . ' not supported by this algorithm. Only keys of sizes between 8 and 1024 bits, inclusive, are supported');
        }

        $t = strlen($key);

        // The mcrypt RC2 implementation only supports effective key length
        // of 1024 bits. It is however possible to handle effective key
        // lengths in range 1..1024 by expanding the key and applying
        // inverse pitable mapping to the first byte before submitting it
        // to mcrypt.

        // Key expansion.
        $l = array_values(unpack('C*', $key));
        $t8 = ($t1 + 7) >> 3;
        $tm = 0xFF >> (8 * $t8 - $t1);

        // Expand key.
        $pitable = self::$pitable;
        for ($i = $t; $i < 128; $i++) {
            $l[$i] = $pitable[$l[$i - 1] + $l[$i - $t]];
        }
        $i = 128 - $t8;
        $l[$i] = $pitable[$l[$i] & $tm];
        while ($i--) {
            $l[$i] = $pitable[$l[$i + 1] ^ $l[$i + $t8]];
        }

        // Prepare the key for mcrypt.
        $l[0] = self::$invpitable[$l[0]];
        array_unshift($l, 'C*');

        $this->key = pack(...$l);
        $this->key_length = strlen($this->key);
        $this->changed = $this->nonIVChanged = true;
        $this->setEngine();
    }

    /**
     * Encrypts a message.
     *
     * Mostly a wrapper for \phpseclib3\Crypt\Common\SymmetricKey::encrypt, with some additional OpenSSL handling code
     *
     * @see self::decrypt()
     * @param string $plaintext
     * @return string $ciphertext
     */
    public function encrypt($plaintext)
    {
        if ($this->engine == self::ENGINE_OPENSSL) {
            $temp = $this->key;
            $this->key = $this->orig_key;
            $result = parent::encrypt($plaintext);
            $this->key = $temp;
            return $result;
        }

        return parent::encrypt($plaintext);
    }

    /**
     * Decrypts a message.
     *
     * Mostly a wrapper for \phpseclib3\Crypt\Common\SymmetricKey::decrypt, with some additional OpenSSL handling code
     *
     * @see self::encrypt()
     * @param string $ciphertext
     * @return string $plaintext
     */
    public function decrypt($ciphertext)
    {
        if ($this->engine == self::ENGINE_OPENSSL) {
            $temp = $this->key;
            $this->key = $this->orig_key;
            $result = parent::decrypt($ciphertext);
            $this->key = $temp;
            return $result;
        }

        return parent::decrypt($ciphertext);
    }

    /**
     * Encrypts a block
     *
     * @see Common\SymmetricKey::encryptBlock()
     * @see Common\SymmetricKey::encrypt()
     * @param string $in
     * @return string
     */
    protected function encryptBlock($in)
    {
        list($r0, $r1, $r2, $r3) = array_values(unpack('v*', $in));
        $keys = $this->keys;
        $limit = 20;
        $actions = [$limit => 44, 44 => 64];
        $j = 0;

        for (;;) {
            // Mixing round.
            $r0 = (($r0 + $keys[$j++] + ((($r1 ^ $r2) & $r3) ^ $r1)) & 0xFFFF) << 1;
            $r0 |= $r0 >> 16;
            $r1 = (($r1 + $keys[$j++] + ((($r2 ^ $r3) & $r0) ^ $r2)) & 0xFFFF) << 2;
            $r1 |= $r1 >> 16;
            $r2 = (($r2 + $keys[$j++] + ((($r3 ^ $r0) & $r1) ^ $r3)) & 0xFFFF) << 3;
            $r2 |= $r2 >> 16;
            $r3 = (($r3 + $keys[$j++] + ((($r0 ^ $r1) & $r2) ^ $r0)) & 0xFFFF) << 5;
            $r3 |= $r3 >> 16;

            if ($j === $limit) {
                if ($limit === 64) {
                    break;
                }

                // Mashing round.
                $r0 += $keys[$r3 & 0x3F];
                $r1 += $keys[$r0 & 0x3F];
                $r2 += $keys[$r1 & 0x3F];
                $r3 += $keys[$r2 & 0x3F];
                $limit = $actions[$limit];
            }
        }

        return pack('vvvv', $r0, $r1, $r2, $r3);
    }

    /**
     * Decrypts a block
     *
     * @see Common\SymmetricKey::decryptBlock()
     * @see Common\SymmetricKey::decrypt()
     * @param string $in
     * @return string
     */
    protected function decryptBlock($in)
    {
        list($r0, $r1, $r2, $r3) = array_values(unpack('v*', $in));
        $keys = $this->keys;
        $limit = 44;
        $actions = [$limit => 20, 20 => 0];
        $j = 64;

        for (;;) {
            // R-mixing round.
            $r3 = ($r3 | ($r3 << 16)) >> 5;
            $r3 = ($r3 - $keys[--$j] - ((($r0 ^ $r1) & $r2) ^ $r0)) & 0xFFFF;
            $r2 = ($r2 | ($r2 << 16)) >> 3;
            $r2 = ($r2 - $keys[--$j] - ((($r3 ^ $r0) & $r1) ^ $r3)) & 0xFFFF;
            $r1 = ($r1 | ($r1 << 16)) >> 2;
            $r1 = ($r1 - $keys[--$j] - ((($r2 ^ $r3) & $r0) ^ $r2)) & 0xFFFF;
            $r0 = ($r0 | ($r0 << 16)) >> 1;
            $r0 = ($r0 - $keys[--$j] - ((($r1 ^ $r2) & $r3) ^ $r1)) & 0xFFFF;

            if ($j === $limit) {
                if ($limit === 0) {
                    break;
                }

                // R-mashing round.
                $r3 = ($r3 - $keys[$r2 & 0x3F]) & 0xFFFF;
                $r2 = ($r2 - $keys[$r1 & 0x3F]) & 0xFFFF;
                $r1 = ($r1 - $keys[$r0 & 0x3F]) & 0xFFFF;
                $r0 = ($r0 - $keys[$r3 & 0x3F]) & 0xFFFF;
                $limit = $actions[$limit];
            }
        }

        return pack('vvvv', $r0, $r1, $r2, $r3);
    }

    /**
     * Creates the key schedule
     *
     * @see Common\SymmetricKey::setupKey()
     */
    protected function setupKey()
    {
        if (!isset($this->key)) {
            $this->setKey('');
        }

        // Key has already been expanded in \phpseclib3\Crypt\RC2::setKey():
        // Only the first value must be altered.
        $l = unpack('Ca/Cb/v*', $this->key);
        array_unshift($l, self::$pitable[$l['a']] | ($l['b'] << 8));
        unset($l['a']);
        unset($l['b']);
        $this->keys = $l;
    }

    /**
     * Setup the performance-optimized function for de/encrypt()
     *
     * @see Common\SymmetricKey::setupInlineCrypt()
     */
    protected function setupInlineCrypt()
    {
        // Init code for both, encrypt and decrypt.
        $init_crypt = '$keys = $this->keys;';

        $keys = $this->keys;

        // $in is the current 8 bytes block which has to be en/decrypt
        $encrypt_block = $decrypt_block = '
            $in = unpack("v4", $in);
            $r0 = $in[1];
            $r1 = $in[2];
            $r2 = $in[3];
            $r3 = $in[4];
        ';

        // Create code for encryption.
        $limit = 20;
        $actions = [$limit => 44, 44 => 64];
        $j = 0;

        for (;;) {
            // Mixing round.
            $encrypt_block .= '
                $r0 = (($r0 + ' . $keys[$j++] . ' +
                       ((($r1 ^ $r2) & $r3) ^ $r1)) & 0xFFFF) << 1;
                $r0 |= $r0 >> 16;
                $r1 = (($r1 + ' . $keys[$j++] . ' +
                       ((($r2 ^ $r3) & $r0) ^ $r2)) & 0xFFFF) << 2;
                $r1 |= $r1 >> 16;
                $r2 = (($r2 + ' . $keys[$j++] . ' +
                       ((($r3 ^ $r0) & $r1) ^ $r3)) & 0xFFFF) << 3;
                $r2 |= $r2 >> 16;
                $r3 = (($r3 + ' . $keys[$j++] . ' +
                       ((($r0 ^ $r1) & $r2) ^ $r0)) & 0xFFFF) << 5;
                $r3 |= $r3 >> 16;';

            if ($j === $limit) {
                if ($limit === 64) {
                    break;
                }

                // Mashing round.
                $encrypt_block .= '
                    $r0 += $keys[$r3 & 0x3F];
                    $r1 += $keys[$r0 & 0x3F];
                    $r2 += $keys[$r1 & 0x3F];
                    $r3 += $keys[$r2 & 0x3F];';
                $limit = $actions[$limit];
            }
        }

        $encrypt_block .= '$in = pack("v4", $r0, $r1, $r2, $r3);';

        // Create code for decryption.
        $limit = 44;
        $actions = [$limit => 20, 20 => 0];
        $j = 64;

        for (;;) {
            // R-mixing round.
            $decrypt_block .= '
                $r3 = ($r3 | ($r3 << 16)) >> 5;
                $r3 = ($r3 - ' . $keys[--$j] . ' -
                       ((($r0 ^ $r1) & $r2) ^ $r0)) & 0xFFFF;
                $r2 = ($r2 | ($r2 << 16)) >> 3;
                $r2 = ($r2 - ' . $keys[--$j] . ' -
                       ((($r3 ^ $r0) & $r1) ^ $r3)) & 0xFFFF;
                $r1 = ($r1 | ($r1 << 16)) >> 2;
                $r1 = ($r1 - ' . $keys[--$j] . ' -
                       ((($r2 ^ $r3) & $r0) ^ $r2)) & 0xFFFF;
                $r0 = ($r0 | ($r0 << 16)) >> 1;
                $r0 = ($r0 - ' . $keys[--$j] . ' -
                       ((($r1 ^ $r2) & $r3) ^ $r1)) & 0xFFFF;';

            if ($j === $limit) {
                if ($limit === 0) {
                    break;
                }

                // R-mashing round.
                $decrypt_block .= '
                    $r3 = ($r3 - $keys[$r2 & 0x3F]) & 0xFFFF;
                    $r2 = ($r2 - $keys[$r1 & 0x3F]) & 0xFFFF;
                    $r1 = ($r1 - $keys[$r0 & 0x3F]) & 0xFFFF;
                    $r0 = ($r0 - $keys[$r3 & 0x3F]) & 0xFFFF;';
                $limit = $actions[$limit];
            }
        }

        $decrypt_block .= '$in = pack("v4", $r0, $r1, $r2, $r3);';

        // Creates the inline-crypt function
        $this->inline_crypt = $this->createInlineCryptFunction(
            [
               'init_crypt'    => $init_crypt,
               'encrypt_block' => $encrypt_block,
               'decrypt_block' => $decrypt_block
            ]
        );
    }
}
<?php

/**
 * Pure-PHP implementation of RC4.
 *
 * Uses mcrypt, if available, and an internal implementation, otherwise.
 *
 * PHP version 5
 *
 * Useful resources are as follows:
 *
 *  - {@link http://www.mozilla.org/projects/security/pki/nss/draft-kaukonen-cipher-arcfour-03.txt ARCFOUR Algorithm}
 *  - {@link http://en.wikipedia.org/wiki/RC4 - Wikipedia: RC4}
 *
 * RC4 is also known as ARCFOUR or ARC4.  The reason is elaborated upon at Wikipedia.  This class is named RC4 and not
 * ARCFOUR or ARC4 because RC4 is how it is referred to in the SSH1 specification.
 *
 * Here's a short example of how to use this library:
 * <code>
 * <?php
 *    include 'vendor/autoload.php';
 *
 *    $rc4 = new \phpseclib3\Crypt\RC4();
 *
 *    $rc4->setKey('abcdefgh');
 *
 *    $size = 10 * 1024;
 *    $plaintext = '';
 *    for ($i = 0; $i < $size; $i++) {
 *        $plaintext.= 'a';
 *    }
 *
 *    echo $rc4->decrypt($rc4->encrypt($plaintext));
 * ?>
 * </code>
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2007 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\Crypt;

use phpseclib3\Crypt\Common\StreamCipher;

/**
 * Pure-PHP implementation of RC4.
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
class RC4 extends StreamCipher
{
    /**
     * @see \phpseclib3\Crypt\RC4::_crypt()
     */
    const ENCRYPT = 0;

    /**
     * @see \phpseclib3\Crypt\RC4::_crypt()
     */
    const DECRYPT = 1;

    /**
     * Key Length (in bytes)
     *
     * @see \phpseclib3\Crypt\RC4::setKeyLength()
     * @var int
     */
    protected $key_length = 128; // = 1024 bits

    /**
     * The mcrypt specific name of the cipher
     *
     * @see Common\SymmetricKey::cipher_name_mcrypt
     * @var string
     */
    protected $cipher_name_mcrypt = 'arcfour';

    /**
     * The Key
     *
     * @see self::setKey()
     * @var string
     */
    protected $key;

    /**
     * The Key Stream for decryption and encryption
     *
     * @see self::setKey()
     * @var array
     */
    private $stream;

    /**
     * Test for engine validity
     *
     * This is mainly just a wrapper to set things up for \phpseclib3\Crypt\Common\SymmetricKey::isValidEngine()
     *
     * @see Common\SymmetricKey::__construct()
     * @param int $engine
     * @return bool
     */
    protected function isValidEngineHelper($engine)
    {
        if ($engine == self::ENGINE_OPENSSL) {
            if ($this->continuousBuffer) {
                return false;
            }
            // quoting https://www.openssl.org/news/openssl-3.0-notes.html, OpenSSL 3.0.1
            // "Moved all variations of the EVP ciphers CAST5, BF, IDEA, SEED, RC2, RC4, RC5, and DES to the legacy provider"
            // in theory openssl_get_cipher_methods() should catch this but, on GitHub Actions, at least, it does not
            if (defined('OPENSSL_VERSION_TEXT') && version_compare(preg_replace('#OpenSSL (\d+\.\d+\.\d+) .*#', '$1', OPENSSL_VERSION_TEXT), '3.0.1', '>=')) {
                return false;
            }
            $this->cipher_name_openssl = 'rc4-40';
        }

        return parent::isValidEngineHelper($engine);
    }

    /**
     * Sets the key length
     *
     * Keys can be between 1 and 256 bytes long.
     *
     * @param int $length
     * @throws \LengthException if the key length is invalid
     */
    public function setKeyLength($length)
    {
        if ($length < 8 || $length > 2048) {
            throw new \LengthException('Key size of ' . $length . ' bits is not supported by this algorithm. Only keys between 1 and 256 bytes are supported');
        }

        $this->key_length = $length >> 3;

        parent::setKeyLength($length);
    }

    /**
     * Sets the key length
     *
     * Keys can be between 1 and 256 bytes long.
     *
     * @param string $key
     */
    public function setKey($key)
    {
        $length = strlen($key);
        if ($length < 1 || $length > 256) {
            throw new \LengthException('Key size of ' . $length . ' bytes is not supported by RC4. Keys must be between 1 and 256 bytes long');
        }

        parent::setKey($key);
    }

    /**
     * Encrypts a message.
     *
     * @see Common\SymmetricKey::decrypt()
     * @see self::crypt()
     * @param string $plaintext
     * @return string $ciphertext
     */
    public function encrypt($plaintext)
    {
        if ($this->engine != self::ENGINE_INTERNAL) {
            return parent::encrypt($plaintext);
        }
        return $this->crypt($plaintext, self::ENCRYPT);
    }

    /**
     * Decrypts a message.
     *
     * $this->decrypt($this->encrypt($plaintext)) == $this->encrypt($this->encrypt($plaintext)).
     * At least if the continuous buffer is disabled.
     *
     * @see Common\SymmetricKey::encrypt()
     * @see self::crypt()
     * @param string $ciphertext
     * @return string $plaintext
     */
    public function decrypt($ciphertext)
    {
        if ($this->engine != self::ENGINE_INTERNAL) {
            return parent::decrypt($ciphertext);
        }
        return $this->crypt($ciphertext, self::DECRYPT);
    }

    /**
     * Encrypts a block
     *
     * @param string $in
     */
    protected function encryptBlock($in)
    {
        // RC4 does not utilize this method
    }

    /**
     * Decrypts a block
     *
     * @param string $in
     */
    protected function decryptBlock($in)
    {
        // RC4 does not utilize this method
    }

    /**
     * Setup the key (expansion)
     *
     * @see Common\SymmetricKey::_setupKey()
     */
    protected function setupKey()
    {
        $key = $this->key;
        $keyLength = strlen($key);
        $keyStream = range(0, 255);
        $j = 0;
        for ($i = 0; $i < 256; $i++) {
            $j = ($j + $keyStream[$i] + ord($key[$i % $keyLength])) & 255;
            $temp = $keyStream[$i];
            $keyStream[$i] = $keyStream[$j];
            $keyStream[$j] = $temp;
        }

        $this->stream = [];
        $this->stream[self::DECRYPT] = $this->stream[self::ENCRYPT] = [
            0, // index $i
            0, // index $j
            $keyStream
        ];
    }

    /**
     * Encrypts or decrypts a message.
     *
     * @see self::encrypt()
     * @see self::decrypt()
     * @param string $text
     * @param int $mode
     * @return string $text
     */
    private function crypt($text, $mode)
    {
        if ($this->changed) {
            $this->setup();
        }

        $stream = &$this->stream[$mode];
        if ($this->continuousBuffer) {
            $i = &$stream[0];
            $j = &$stream[1];
            $keyStream = &$stream[2];
        } else {
            $i = $stream[0];
            $j = $stream[1];
            $keyStream = $stream[2];
        }

        $len = strlen($text);
        for ($k = 0; $k < $len; ++$k) {
            $i = ($i + 1) & 255;
            $ksi = $keyStream[$i];
            $j = ($j + $ksi) & 255;
            $ksj = $keyStream[$j];

            $keyStream[$i] = $ksj;
            $keyStream[$j] = $ksi;
            $text[$k] = $text[$k] ^ chr($keyStream[($ksj + $ksi) & 255]);
        }

        return $text;
    }
}
<?php

/**
 * Pure-PHP PKCS#1 (v2.1) compliant implementation of RSA.
 *
 * PHP version 5
 *
 * Here's an example of how to encrypt and decrypt text with this library:
 * <code>
 * <?php
 * include 'vendor/autoload.php';
 *
 * $private = Crypt\RSA::createKey();
 * $public = $private->getPublicKey();
 *
 * $plaintext = 'terrafrost';
 *
 * $ciphertext = $public->encrypt($plaintext);
 *
 * echo $private->decrypt($ciphertext);
 * ?>
 * </code>
 *
 * Here's an example of how to create signatures and verify signatures with this library:
 * <code>
 * <?php
 * include 'vendor/autoload.php';
 *
 * $private = Crypt\RSA::createKey();
 * $public = $private->getPublicKey();
 *
 * $plaintext = 'terrafrost';
 *
 * $signature = $private->sign($plaintext);
 *
 * echo $public->verify($plaintext, $signature) ? 'verified' : 'unverified';
 * ?>
 * </code>
 *
 * One thing to consider when using this: so phpseclib uses PSS mode by default.
 * Technically, id-RSASSA-PSS has a different key format than rsaEncryption. So
 * should phpseclib save to the id-RSASSA-PSS format by default or the
 * rsaEncryption format? For stand-alone keys I figure rsaEncryption is better
 * because SSH doesn't use PSS and idk how many SSH servers would be able to
 * decode an id-RSASSA-PSS key. For X.509 certificates the id-RSASSA-PSS
 * format is used by default (unless you change it up to use PKCS1 instead)
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2009 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\Crypt;

use phpseclib3\Crypt\Common\AsymmetricKey;
use phpseclib3\Crypt\RSA\Formats\Keys\PSS;
use phpseclib3\Crypt\RSA\PrivateKey;
use phpseclib3\Crypt\RSA\PublicKey;
use phpseclib3\Exception\InconsistentSetupException;
use phpseclib3\Exception\UnsupportedAlgorithmException;
use phpseclib3\Math\BigInteger;

/**
 * Pure-PHP PKCS#1 compliant implementation of RSA.
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class RSA extends AsymmetricKey
{
    /**
     * Algorithm Name
     *
     * @var string
     */
    const ALGORITHM = 'RSA';

    /**
     * Use {@link http://en.wikipedia.org/wiki/Optimal_Asymmetric_Encryption_Padding Optimal Asymmetric Encryption Padding}
     * (OAEP) for encryption / decryption.
     *
     * Uses sha256 by default
     *
     * @see self::setHash()
     * @see self::setMGFHash()
     * @see self::encrypt()
     * @see self::decrypt()
     */
    const ENCRYPTION_OAEP = 1;

    /**
     * Use PKCS#1 padding.
     *
     * Although self::PADDING_OAEP / self::PADDING_PSS  offers more security, including PKCS#1 padding is necessary for purposes of backwards
     * compatibility with protocols (like SSH-1) written before OAEP's introduction.
     *
     * @see self::encrypt()
     * @see self::decrypt()
     */
    const ENCRYPTION_PKCS1 = 2;

    /**
     * Do not use any padding
     *
     * Although this method is not recommended it can none-the-less sometimes be useful if you're trying to decrypt some legacy
     * stuff, if you're trying to diagnose why an encrypted message isn't decrypting, etc.
     *
     * @see self::encrypt()
     * @see self::decrypt()
     */
    const ENCRYPTION_NONE = 4;

    /**
     * Use the Probabilistic Signature Scheme for signing
     *
     * Uses sha256 and 0 as the salt length
     *
     * @see self::setSaltLength()
     * @see self::setMGFHash()
     * @see self::setHash()
     * @see self::sign()
     * @see self::verify()
     * @see self::setHash()
     */
    const SIGNATURE_PSS = 16;

    /**
     * Use a relaxed version of PKCS#1 padding for signature verification
     *
     * @see self::sign()
     * @see self::verify()
     * @see self::setHash()
     */
    const SIGNATURE_RELAXED_PKCS1 = 32;

    /**
     * Use PKCS#1 padding for signature verification
     *
     * @see self::sign()
     * @see self::verify()
     * @see self::setHash()
     */
    const SIGNATURE_PKCS1 = 64;

    /**
     * Encryption padding mode
     *
     * @var int
     */
    protected $encryptionPadding = self::ENCRYPTION_OAEP;

    /**
     * Signature padding mode
     *
     * @var int
     */
    protected $signaturePadding = self::SIGNATURE_PSS;

    /**
     * Length of hash function output
     *
     * @var int
     */
    protected $hLen;

    /**
     * Length of salt
     *
     * @var int
     */
    protected $sLen;

    /**
     * Label
     *
     * @var string
     */
    protected $label = '';

    /**
     * Hash function for the Mask Generation Function
     *
     * @var Hash
     */
    protected $mgfHash;

    /**
     * Length of MGF hash function output
     *
     * @var int
     */
    protected $mgfHLen;

    /**
     * Modulus (ie. n)
     *
     * @var Math\BigInteger
     */
    protected $modulus;

    /**
     * Modulus length
     *
     * @var Math\BigInteger
     */
    protected $k;

    /**
     * Exponent (ie. e or d)
     *
     * @var Math\BigInteger
     */
    protected $exponent;

    /**
     * Default public exponent
     *
     * @var int
     * @link http://en.wikipedia.org/wiki/65537_%28number%29
     */
    private static $defaultExponent = 65537;

    /**
     * Enable Blinding?
     *
     * @var bool
     */
    protected static $enableBlinding = true;

    /**
     * OpenSSL configuration file name.
     *
     * @see self::createKey()
     * @var ?string
     */
    protected static $configFile;

    /**
     * Smallest Prime
     *
     * Per <http://cseweb.ucsd.edu/~hovav/dist/survey.pdf#page=5>, this number ought not result in primes smaller
     * than 256 bits. As a consequence if the key you're trying to create is 1024 bits and you've set smallestPrime
     * to 384 bits then you're going to get a 384 bit prime and a 640 bit prime (384 + 1024 % 384). At least if
     * engine is set to self::ENGINE_INTERNAL. If Engine is set to self::ENGINE_OPENSSL then smallest Prime is
     * ignored (ie. multi-prime RSA support is more intended as a way to speed up RSA key generation when there's
     * a chance neither gmp nor OpenSSL are installed)
     *
     * @var int
     */
    private static $smallestPrime = 4096;

    /**
     * Public Exponent
     *
     * @var Math\BigInteger
     */
    protected $publicExponent;

    /**
     * Sets the public exponent for key generation
     *
     * This will be 65537 unless changed.
     *
     * @param int $val
     */
    public static function setExponent($val)
    {
        self::$defaultExponent = $val;
    }

    /**
     * Sets the smallest prime number in bits. Used for key generation
     *
     * This will be 4096 unless changed.
     *
     * @param int $val
     */
    public static function setSmallestPrime($val)
    {
        self::$smallestPrime = $val;
    }

    /**
     * Sets the OpenSSL config file path
     *
     * Set to the empty string to use the default config file
     *
     * @param string $val
     */
    public static function setOpenSSLConfigPath($val)
    {
        self::$configFile = $val;
    }

    /**
     * Create a private key
     *
     * The public key can be extracted from the private key
     *
     * @return PrivateKey
     * @param int $bits
     */
    public static function createKey($bits = 2048)
    {
        self::initialize_static_variables();

        $class = new \ReflectionClass(static::class);
        if ($class->isFinal()) {
            throw new \RuntimeException('createKey() should not be called from final classes (' . static::class . ')');
        }

        $regSize = $bits >> 1; // divide by two to see how many bits P and Q would be
        if ($regSize > self::$smallestPrime) {
            $num_primes = floor($bits / self::$smallestPrime);
            $regSize = self::$smallestPrime;
        } else {
            $num_primes = 2;
        }

        if ($num_primes == 2 && $bits >= 384 && self::$defaultExponent == 65537) {
            if (!isset(self::$engines['PHP'])) {
                self::useBestEngine();
            }

            // OpenSSL uses 65537 as the exponent and requires RSA keys be 384 bits minimum
            if (self::$engines['OpenSSL']) {
                $config = [];
                if (self::$configFile) {
                    $config['config'] = self::$configFile;
                }
                $rsa = openssl_pkey_new(['private_key_bits' => $bits] + $config);
                openssl_pkey_export($rsa, $privatekeystr, null, $config);

                // clear the buffer of error strings stemming from a minimalistic openssl.cnf
                // https://github.com/php/php-src/issues/11054 talks about other errors this'll pick up
                while (openssl_error_string() !== false) {
                }

                return RSA::load($privatekeystr);
            }
        }

        static $e;
        if (!isset($e)) {
            $e = new BigInteger(self::$defaultExponent);
        }

        $n = clone self::$one;
        $exponents = $coefficients = $primes = [];
        $lcm = [
            'top' => clone self::$one,
            'bottom' => false
        ];

        do {
            for ($i = 1; $i <= $num_primes; $i++) {
                if ($i != $num_primes) {
                    $primes[$i] = BigInteger::randomPrime($regSize);
                } else {
                    $minMax = BigInteger::minMaxBits($bits);
                    $min = $minMax['min'];
                    $max = $minMax['max'];
                    list($min) = $min->divide($n);
                    $min = $min->add(self::$one);
                    list($max) = $max->divide($n);
                    $primes[$i] = BigInteger::randomRangePrime($min, $max);
                }

                // the first coefficient is calculated differently from the rest
                // ie. instead of being $primes[1]->modInverse($primes[2]), it's $primes[2]->modInverse($primes[1])
                if ($i > 2) {
                    $coefficients[$i] = $n->modInverse($primes[$i]);
                }

                $n = $n->multiply($primes[$i]);

                $temp = $primes[$i]->subtract(self::$one);

                // textbook RSA implementations use Euler's totient function instead of the least common multiple.
                // see http://en.wikipedia.org/wiki/Euler%27s_totient_function
                $lcm['top'] = $lcm['top']->multiply($temp);
                $lcm['bottom'] = $lcm['bottom'] === false ? $temp : $lcm['bottom']->gcd($temp);
            }

            list($temp) = $lcm['top']->divide($lcm['bottom']);
            $gcd = $temp->gcd($e);
            $i0 = 1;
        } while (!$gcd->equals(self::$one));

        $coefficients[2] = $primes[2]->modInverse($primes[1]);

        $d = $e->modInverse($temp);

        foreach ($primes as $i => $prime) {
            $temp = $prime->subtract(self::$one);
            $exponents[$i] = $e->modInverse($temp);
        }

        // from <http://tools.ietf.org/html/rfc3447#appendix-A.1.2>:
        // RSAPrivateKey ::= SEQUENCE {
        //     version           Version,
        //     modulus           INTEGER,  -- n
        //     publicExponent    INTEGER,  -- e
        //     privateExponent   INTEGER,  -- d
        //     prime1            INTEGER,  -- p
        //     prime2            INTEGER,  -- q
        //     exponent1         INTEGER,  -- d mod (p-1)
        //     exponent2         INTEGER,  -- d mod (q-1)
        //     coefficient       INTEGER,  -- (inverse of q) mod p
        //     otherPrimeInfos   OtherPrimeInfos OPTIONAL
        // }
        $privatekey = new PrivateKey();
        $privatekey->modulus = $n;
        $privatekey->k = $bits >> 3;
        $privatekey->publicExponent = $e;
        $privatekey->exponent = $d;
        $privatekey->primes = $primes;
        $privatekey->exponents = $exponents;
        $privatekey->coefficients = $coefficients;

        /*
        $publickey = new PublicKey;
        $publickey->modulus = $n;
        $publickey->k = $bits >> 3;
        $publickey->exponent = $e;
        $publickey->publicExponent = $e;
        $publickey->isPublic = true;
        */

        return $privatekey;
    }

    /**
     * OnLoad Handler
     *
     * @return bool
     */
    protected static function onLoad(array $components)
    {
        $key = $components['isPublicKey'] ?
            new PublicKey() :
            new PrivateKey();

        $key->modulus = $components['modulus'];
        $key->publicExponent = $components['publicExponent'];
        $key->k = $key->modulus->getLengthInBytes();

        if ($components['isPublicKey'] || !isset($components['privateExponent'])) {
            $key->exponent = $key->publicExponent;
        } else {
            $key->privateExponent = $components['privateExponent'];
            $key->exponent = $key->privateExponent;
            $key->primes = $components['primes'];
            $key->exponents = $components['exponents'];
            $key->coefficients = $components['coefficients'];
        }

        if ($components['format'] == PSS::class) {
            // in the X509 world RSA keys are assumed to use PKCS1 padding by default. only if the key is
            // explicitly a PSS key is the use of PSS assumed. phpseclib does not work like this. phpseclib
            // uses PSS padding by default. it assumes the more secure method by default and altho it provides
            // for the less secure PKCS1 method you have to go out of your way to use it. this is consistent
            // with the latest trends in crypto. libsodium (NaCl) is actually a little more extreme in that
            // not only does it defaults to the most secure methods - it doesn't even let you choose less
            // secure methods
            //$key = $key->withPadding(self::SIGNATURE_PSS);
            if (isset($components['hash'])) {
                $key = $key->withHash($components['hash']);
            }
            if (isset($components['MGFHash'])) {
                $key = $key->withMGFHash($components['MGFHash']);
            }
            if (isset($components['saltLength'])) {
                $key = $key->withSaltLength($components['saltLength']);
            }
        }

        return $key;
    }

    /**
     * Initialize static variables
     */
    protected static function initialize_static_variables()
    {
        if (!isset(self::$configFile)) {
            self::$configFile = dirname(__FILE__) . '/../openssl.cnf';
        }

        parent::initialize_static_variables();
    }

    /**
     * Constructor
     *
     * PublicKey and PrivateKey objects can only be created from abstract RSA class
     */
    protected function __construct()
    {
        parent::__construct();

        $this->hLen = $this->hash->getLengthInBytes();
        $this->mgfHash = new Hash('sha256');
        $this->mgfHLen = $this->mgfHash->getLengthInBytes();
    }

    /**
     * Integer-to-Octet-String primitive
     *
     * See {@link http://tools.ietf.org/html/rfc3447#section-4.1 RFC3447#section-4.1}.
     *
     * @param bool|Math\BigInteger $x
     * @param int $xLen
     * @return bool|string
     */
    protected function i2osp($x, $xLen)
    {
        if ($x === false) {
            return false;
        }
        $x = $x->toBytes();
        if (strlen($x) > $xLen) {
            throw new \OutOfRangeException('Resultant string length out of range');
        }
        return str_pad($x, $xLen, chr(0), STR_PAD_LEFT);
    }

    /**
     * Octet-String-to-Integer primitive
     *
     * See {@link http://tools.ietf.org/html/rfc3447#section-4.2 RFC3447#section-4.2}.
     *
     * @param string $x
     * @return Math\BigInteger
     */
    protected function os2ip($x)
    {
        return new BigInteger($x, 256);
    }

    /**
     * EMSA-PKCS1-V1_5-ENCODE
     *
     * See {@link http://tools.ietf.org/html/rfc3447#section-9.2 RFC3447#section-9.2}.
     *
     * @param string $m
     * @param int $emLen
     * @throws \LengthException if the intended encoded message length is too short
     * @return string
     */
    protected function emsa_pkcs1_v1_5_encode($m, $emLen)
    {
        $h = $this->hash->hash($m);

        // see http://tools.ietf.org/html/rfc3447#page-43
        switch ($this->hash->getHash()) {
            case 'md2':
                $t = "\x30\x20\x30\x0c\x06\x08\x2a\x86\x48\x86\xf7\x0d\x02\x02\x05\x00\x04\x10";
                break;
            case 'md5':
                $t = "\x30\x20\x30\x0c\x06\x08\x2a\x86\x48\x86\xf7\x0d\x02\x05\x05\x00\x04\x10";
                break;
            case 'sha1':
                $t = "\x30\x21\x30\x09\x06\x05\x2b\x0e\x03\x02\x1a\x05\x00\x04\x14";
                break;
            case 'sha256':
                $t = "\x30\x31\x30\x0d\x06\x09\x60\x86\x48\x01\x65\x03\x04\x02\x01\x05\x00\x04\x20";
                break;
            case 'sha384':
                $t = "\x30\x41\x30\x0d\x06\x09\x60\x86\x48\x01\x65\x03\x04\x02\x02\x05\x00\x04\x30";
                break;
            case 'sha512':
                $t = "\x30\x51\x30\x0d\x06\x09\x60\x86\x48\x01\x65\x03\x04\x02\x03\x05\x00\x04\x40";
                break;
            // from https://www.emc.com/collateral/white-papers/h11300-pkcs-1v2-2-rsa-cryptography-standard-wp.pdf#page=40
            case 'sha224':
                $t = "\x30\x2d\x30\x0d\x06\x09\x60\x86\x48\x01\x65\x03\x04\x02\x04\x05\x00\x04\x1c";
                break;
            case 'sha512/224':
                $t = "\x30\x2d\x30\x0d\x06\x09\x60\x86\x48\x01\x65\x03\x04\x02\x05\x05\x00\x04\x1c";
                break;
            case 'sha512/256':
                $t = "\x30\x31\x30\x0d\x06\x09\x60\x86\x48\x01\x65\x03\x04\x02\x06\x05\x00\x04\x20";
        }
        $t .= $h;
        $tLen = strlen($t);

        if ($emLen < $tLen + 11) {
            throw new \LengthException('Intended encoded message length too short');
        }

        $ps = str_repeat(chr(0xFF), $emLen - $tLen - 3);

        $em = "\0\1$ps\0$t";

        return $em;
    }

    /**
     * EMSA-PKCS1-V1_5-ENCODE (without NULL)
     *
     * Quoting https://tools.ietf.org/html/rfc8017#page-65,
     *
     * "The parameters field associated with id-sha1, id-sha224, id-sha256,
     *  id-sha384, id-sha512, id-sha512/224, and id-sha512/256 should
     *  generally be omitted, but if present, it shall have a value of type
     *  NULL"
     *
     * @param string $m
     * @param int $emLen
     * @return string
     */
    protected function emsa_pkcs1_v1_5_encode_without_null($m, $emLen)
    {
        $h = $this->hash->hash($m);

        // see http://tools.ietf.org/html/rfc3447#page-43
        switch ($this->hash->getHash()) {
            case 'sha1':
                $t = "\x30\x1f\x30\x07\x06\x05\x2b\x0e\x03\x02\x1a\x04\x14";
                break;
            case 'sha256':
                $t = "\x30\x2f\x30\x0b\x06\x09\x60\x86\x48\x01\x65\x03\x04\x02\x01\x04\x20";
                break;
            case 'sha384':
                $t = "\x30\x3f\x30\x0b\x06\x09\x60\x86\x48\x01\x65\x03\x04\x02\x02\x04\x30";
                break;
            case 'sha512':
                $t = "\x30\x4f\x30\x0b\x06\x09\x60\x86\x48\x01\x65\x03\x04\x02\x03\x04\x40";
                break;
            // from https://www.emc.com/collateral/white-papers/h11300-pkcs-1v2-2-rsa-cryptography-standard-wp.pdf#page=40
            case 'sha224':
                $t = "\x30\x2b\x30\x0b\x06\x09\x60\x86\x48\x01\x65\x03\x04\x02\x04\x04\x1c";
                break;
            case 'sha512/224':
                $t = "\x30\x2b\x30\x0b\x06\x09\x60\x86\x48\x01\x65\x03\x04\x02\x05\x04\x1c";
                break;
            case 'sha512/256':
                $t = "\x30\x2f\x30\x0b\x06\x09\x60\x86\x48\x01\x65\x03\x04\x02\x06\x04\x20";
                break;
            default:
                throw new UnsupportedAlgorithmException('md2 and md5 require NULLs');
        }
        $t .= $h;
        $tLen = strlen($t);

        if ($emLen < $tLen + 11) {
            throw new \LengthException('Intended encoded message length too short');
        }

        $ps = str_repeat(chr(0xFF), $emLen - $tLen - 3);

        $em = "\0\1$ps\0$t";

        return $em;
    }

    /**
     * MGF1
     *
     * See {@link http://tools.ietf.org/html/rfc3447#appendix-B.2.1 RFC3447#appendix-B.2.1}.
     *
     * @param string $mgfSeed
     * @param int $maskLen
     * @return string
     */
    protected function mgf1($mgfSeed, $maskLen)
    {
        // if $maskLen would yield strings larger than 4GB, PKCS#1 suggests a "Mask too long" error be output.

        $t = '';
        $count = ceil($maskLen / $this->mgfHLen);
        for ($i = 0; $i < $count; $i++) {
            $c = pack('N', $i);
            $t .= $this->mgfHash->hash($mgfSeed . $c);
        }

        return substr($t, 0, $maskLen);
    }

    /**
     * Returns the key size
     *
     * More specifically, this returns the size of the modulo in bits.
     *
     * @return int
     */
    public function getLength()
    {
        return !isset($this->modulus) ? 0 : $this->modulus->getLength();
    }

    /**
     * Determines which hashing function should be used
     *
     * Used with signature production / verification and (if the encryption mode is self::PADDING_OAEP) encryption and
     * decryption.
     *
     * @param string $hash
     */
    public function withHash($hash)
    {
        $new = clone $this;

        // Crypt\Hash supports algorithms that PKCS#1 doesn't support.  md5-96 and sha1-96, for example.
        switch (strtolower($hash)) {
            case 'md2':
            case 'md5':
            case 'sha1':
            case 'sha256':
            case 'sha384':
            case 'sha512':
            case 'sha224':
            case 'sha512/224':
            case 'sha512/256':
                $new->hash = new Hash($hash);
                break;
            default:
                throw new UnsupportedAlgorithmException(
                    'The only supported hash algorithms are: md2, md5, sha1, sha256, sha384, sha512, sha224, sha512/224, sha512/256'
                );
        }
        $new->hLen = $new->hash->getLengthInBytes();

        return $new;
    }

    /**
     * Determines which hashing function should be used for the mask generation function
     *
     * The mask generation function is used by self::PADDING_OAEP and self::PADDING_PSS and although it's
     * best if Hash and MGFHash are set to the same thing this is not a requirement.
     *
     * @param string $hash
     */
    public function withMGFHash($hash)
    {
        $new = clone $this;

        // Crypt\Hash supports algorithms that PKCS#1 doesn't support.  md5-96 and sha1-96, for example.
        switch (strtolower($hash)) {
            case 'md2':
            case 'md5':
            case 'sha1':
            case 'sha256':
            case 'sha384':
            case 'sha512':
            case 'sha224':
            case 'sha512/224':
            case 'sha512/256':
                $new->mgfHash = new Hash($hash);
                break;
            default:
                throw new UnsupportedAlgorithmException(
                    'The only supported hash algorithms are: md2, md5, sha1, sha256, sha384, sha512, sha224, sha512/224, sha512/256'
                );
        }
        $new->mgfHLen = $new->mgfHash->getLengthInBytes();

        return $new;
    }

    /**
     * Returns the MGF hash algorithm currently being used
     *
     */
    public function getMGFHash()
    {
        return clone $this->mgfHash;
    }

    /**
     * Determines the salt length
     *
     * Used by RSA::PADDING_PSS
     *
     * To quote from {@link http://tools.ietf.org/html/rfc3447#page-38 RFC3447#page-38}:
     *
     *    Typical salt lengths in octets are hLen (the length of the output
     *    of the hash function Hash) and 0.
     *
     * @param int $sLen
     */
    public function withSaltLength($sLen)
    {
        $new = clone $this;
        $new->sLen = $sLen;
        return $new;
    }

    /**
     * Returns the salt length currently being used
     *
     */
    public function getSaltLength()
    {
        return $this->sLen !== null ? $this->sLen : $this->hLen;
    }

    /**
     * Determines the label
     *
     * Used by RSA::PADDING_OAEP
     *
     * To quote from {@link http://tools.ietf.org/html/rfc3447#page-17 RFC3447#page-17}:
     *
     *    Both the encryption and the decryption operations of RSAES-OAEP take
     *    the value of a label L as input.  In this version of PKCS #1, L is
     *    the empty string; other uses of the label are outside the scope of
     *    this document.
     *
     * @param string $label
     */
    public function withLabel($label)
    {
        $new = clone $this;
        $new->label = $label;
        return $new;
    }

    /**
     * Returns the label currently being used
     *
     */
    public function getLabel()
    {
        return $this->label;
    }

    /**
     * Determines the padding modes
     *
     * Example: $key->withPadding(RSA::ENCRYPTION_PKCS1 | RSA::SIGNATURE_PKCS1);
     *
     * @param int $padding
     */
    public function withPadding($padding)
    {
        $masks = [
            self::ENCRYPTION_OAEP,
            self::ENCRYPTION_PKCS1,
            self::ENCRYPTION_NONE
        ];
        $encryptedCount = 0;
        $selected = 0;
        foreach ($masks as $mask) {
            if ($padding & $mask) {
                $selected = $mask;
                $encryptedCount++;
            }
        }
        if ($encryptedCount > 1) {
            throw new InconsistentSetupException('Multiple encryption padding modes have been selected; at most only one should be selected');
        }
        $encryptionPadding = $selected;

        $masks = [
            self::SIGNATURE_PSS,
            self::SIGNATURE_RELAXED_PKCS1,
            self::SIGNATURE_PKCS1
        ];
        $signatureCount = 0;
        $selected = 0;
        foreach ($masks as $mask) {
            if ($padding & $mask) {
                $selected = $mask;
                $signatureCount++;
            }
        }
        if ($signatureCount > 1) {
            throw new InconsistentSetupException('Multiple signature padding modes have been selected; at most only one should be selected');
        }
        $signaturePadding = $selected;

        $new = clone $this;
        if ($encryptedCount) {
            $new->encryptionPadding = $encryptionPadding;
        }
        if ($signatureCount) {
            $new->signaturePadding = $signaturePadding;
        }
        return $new;
    }

    /**
     * Returns the padding currently being used
     *
     */
    public function getPadding()
    {
        return $this->signaturePadding | $this->encryptionPadding;
    }

    /**
     * Returns the current engine being used
     *
     * OpenSSL is only used in this class (and it's subclasses) for key generation
     * Even then it depends on the parameters you're using. It's not used for
     * multi-prime RSA nor is it used if the key length is outside of the range
     * supported by OpenSSL
     *
     * @see self::useInternalEngine()
     * @see self::useBestEngine()
     * @return string
     */
    public function getEngine()
    {
        if (!isset(self::$engines['PHP'])) {
            self::useBestEngine();
        }
        return self::$engines['OpenSSL'] && self::$defaultExponent == 65537 ?
            'OpenSSL' :
            'PHP';
    }

    /**
     * Enable RSA Blinding
     *
     */
    public static function enableBlinding()
    {
        static::$enableBlinding = true;
    }

    /**
     * Disable RSA Blinding
     *
     */
    public static function disableBlinding()
    {
        static::$enableBlinding = false;
    }
}
<?php

/**
 * JSON Web Key (RFC7517) Formatted RSA Handler
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2015 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\Crypt\RSA\Formats\Keys;

use phpseclib3\Common\Functions\Strings;
use phpseclib3\Crypt\Common\Formats\Keys\JWK as Progenitor;
use phpseclib3\Math\BigInteger;

/**
 * JWK Formatted RSA Handler
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class JWK extends Progenitor
{
    /**
     * Break a public or private key down into its constituent components
     *
     * @param string $key
     * @param string $password optional
     * @return array
     */
    public static function load($key, $password = '')
    {
        $key = parent::load($key, $password);

        if ($key->kty != 'RSA') {
            throw new \RuntimeException('Only RSA JWK keys are supported');
        }

        $count = $publicCount = 0;
        $vars = ['n', 'e', 'd', 'p', 'q', 'dp', 'dq', 'qi'];
        foreach ($vars as $var) {
            if (!isset($key->$var) || !is_string($key->$var)) {
                continue;
            }
            $count++;
            $value = new BigInteger(Strings::base64url_decode($key->$var), 256);
            switch ($var) {
                case 'n':
                    $publicCount++;
                    $components['modulus'] = $value;
                    break;
                case 'e':
                    $publicCount++;
                    $components['publicExponent'] = $value;
                    break;
                case 'd':
                    $components['privateExponent'] = $value;
                    break;
                case 'p':
                    $components['primes'][1] = $value;
                    break;
                case 'q':
                    $components['primes'][2] = $value;
                    break;
                case 'dp':
                    $components['exponents'][1] = $value;
                    break;
                case 'dq':
                    $components['exponents'][2] = $value;
                    break;
                case 'qi':
                    $components['coefficients'][2] = $value;
            }
        }

        if ($count == count($vars)) {
            return $components + ['isPublicKey' => false];
        }

        if ($count == 2 && $publicCount == 2) {
            return $components + ['isPublicKey' => true];
        }

        throw new \UnexpectedValueException('Key does not have an appropriate number of RSA parameters');
    }

    /**
     * Convert a private key to the appropriate format.
     *
     * @param BigInteger $n
     * @param BigInteger $e
     * @param BigInteger $d
     * @param array $primes
     * @param array $exponents
     * @param array $coefficients
     * @param string $password optional
     * @param array $options optional
     * @return string
     */
    public static function savePrivateKey(BigInteger $n, BigInteger $e, BigInteger $d, array $primes, array $exponents, array $coefficients, $password = '', array $options = [])
    {
        if (count($primes) != 2) {
            throw new \InvalidArgumentException('JWK does not support multi-prime RSA keys');
        }

        $key = [
            'kty' => 'RSA',
            'n' => Strings::base64url_encode($n->toBytes()),
            'e' => Strings::base64url_encode($e->toBytes()),
            'd' => Strings::base64url_encode($d->toBytes()),
            'p' => Strings::base64url_encode($primes[1]->toBytes()),
            'q' => Strings::base64url_encode($primes[2]->toBytes()),
            'dp' => Strings::base64url_encode($exponents[1]->toBytes()),
            'dq' => Strings::base64url_encode($exponents[2]->toBytes()),
            'qi' => Strings::base64url_encode($coefficients[2]->toBytes())
        ];

        return self::wrapKey($key, $options);
    }

    /**
     * Convert a public key to the appropriate format
     *
     * @param BigInteger $n
     * @param BigInteger $e
     * @param array $options optional
     * @return string
     */
    public static function savePublicKey(BigInteger $n, BigInteger $e, array $options = [])
    {
        $key = [
            'kty' => 'RSA',
            'n' => Strings::base64url_encode($n->toBytes()),
            'e' => Strings::base64url_encode($e->toBytes())
        ];

        return self::wrapKey($key, $options);
    }
}
<?php

/**
 * Miccrosoft BLOB Formatted RSA Key Handler
 *
 * More info:
 *
 * https://msdn.microsoft.com/en-us/library/windows/desktop/aa375601(v=vs.85).aspx
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2015 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\Crypt\RSA\Formats\Keys;

use phpseclib3\Common\Functions\Strings;
use phpseclib3\Exception\UnsupportedFormatException;
use phpseclib3\Math\BigInteger;

/**
 * Microsoft BLOB Formatted RSA Key Handler
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class MSBLOB
{
    /**
     * Public/Private Key Pair
     *
     */
    const PRIVATEKEYBLOB = 0x7;
    /**
     * Public Key
     *
     */
    const PUBLICKEYBLOB = 0x6;
    /**
     * Public Key
     *
     */
    const PUBLICKEYBLOBEX = 0xA;
    /**
     * RSA public key exchange algorithm
     *
     */
    const CALG_RSA_KEYX = 0x0000A400;
    /**
     * RSA public key exchange algorithm
     *
     */
    const CALG_RSA_SIGN = 0x00002400;
    /**
     * Public Key
     *
     */
    const RSA1 = 0x31415352;
    /**
     * Private Key
     *
     */
    const RSA2 = 0x32415352;

    /**
     * Break a public or private key down into its constituent components
     *
     * @param string $key
     * @param string $password optional
     * @return array
     */
    public static function load($key, $password = '')
    {
        if (!Strings::is_stringable($key)) {
            throw new \UnexpectedValueException('Key should be a string - not a ' . gettype($key));
        }

        $key = Strings::base64_decode($key);

        if (!is_string($key)) {
            throw new \UnexpectedValueException('Base64 decoding produced an error');
        }
        if (strlen($key) < 20) {
            throw new \UnexpectedValueException('Key appears to be malformed');
        }

        // PUBLICKEYSTRUC  publickeystruc
        // https://msdn.microsoft.com/en-us/library/windows/desktop/aa387453(v=vs.85).aspx
        $unpacked = unpack('atype/aversion/vreserved/Valgo', Strings::shift($key, 8));
        $type = $unpacked['type'];
        $version = $unpacked['version'];
        $reserved = $unpacked['reserved'];
        $algo = $unpacked['algo'];
        switch (ord($type)) {
            case self::PUBLICKEYBLOB:
            case self::PUBLICKEYBLOBEX:
                $publickey = true;
                break;
            case self::PRIVATEKEYBLOB:
                $publickey = false;
                break;
            default:
                throw new \UnexpectedValueException('Key appears to be malformed');
        }

        $components = ['isPublicKey' => $publickey];

        // https://msdn.microsoft.com/en-us/library/windows/desktop/aa375549(v=vs.85).aspx
        switch ($algo) {
            case self::CALG_RSA_KEYX:
            case self::CALG_RSA_SIGN:
                break;
            default:
                throw new \UnexpectedValueException('Key appears to be malformed');
        }

        // RSAPUBKEY rsapubkey
        // https://msdn.microsoft.com/en-us/library/windows/desktop/aa387685(v=vs.85).aspx
        // could do V for pubexp but that's unsigned 32-bit whereas some PHP installs only do signed 32-bit
        $unpacked = unpack('Vmagic/Vbitlen/a4pubexp', Strings::shift($key, 12));
        $magic = $unpacked['magic'];
        $bitlen = $unpacked['bitlen'];
        $pubexp = $unpacked['pubexp'];
        switch ($magic) {
            case self::RSA2:
                $components['isPublicKey'] = false;
                // fall-through
            case self::RSA1:
                break;
            default:
                throw new \UnexpectedValueException('Key appears to be malformed');
        }

        $baseLength = $bitlen / 16;
        if (strlen($key) != 2 * $baseLength && strlen($key) != 9 * $baseLength) {
            throw new \UnexpectedValueException('Key appears to be malformed');
        }

        $components[$components['isPublicKey'] ? 'publicExponent' : 'privateExponent'] = new BigInteger(strrev($pubexp), 256);
        // BYTE modulus[rsapubkey.bitlen/8]
        $components['modulus'] = new BigInteger(strrev(Strings::shift($key, $bitlen / 8)), 256);

        if ($publickey) {
            return $components;
        }

        $components['isPublicKey'] = false;

        // BYTE prime1[rsapubkey.bitlen/16]
        $components['primes'] = [1 => new BigInteger(strrev(Strings::shift($key, $bitlen / 16)), 256)];
        // BYTE prime2[rsapubkey.bitlen/16]
        $components['primes'][] = new BigInteger(strrev(Strings::shift($key, $bitlen / 16)), 256);
        // BYTE exponent1[rsapubkey.bitlen/16]
        $components['exponents'] = [1 => new BigInteger(strrev(Strings::shift($key, $bitlen / 16)), 256)];
        // BYTE exponent2[rsapubkey.bitlen/16]
        $components['exponents'][] = new BigInteger(strrev(Strings::shift($key, $bitlen / 16)), 256);
        // BYTE coefficient[rsapubkey.bitlen/16]
        $components['coefficients'] = [2 => new BigInteger(strrev(Strings::shift($key, $bitlen / 16)), 256)];
        if (isset($components['privateExponent'])) {
            $components['publicExponent'] = $components['privateExponent'];
        }
        // BYTE privateExponent[rsapubkey.bitlen/8]
        $components['privateExponent'] = new BigInteger(strrev(Strings::shift($key, $bitlen / 8)), 256);

        return $components;
    }

    /**
     * Convert a private key to the appropriate format.
     *
     * @param BigInteger $n
     * @param BigInteger $e
     * @param BigInteger $d
     * @param array $primes
     * @param array $exponents
     * @param array $coefficients
     * @param string $password optional
     * @return string
     */
    public static function savePrivateKey(BigInteger $n, BigInteger $e, BigInteger $d, array $primes, array $exponents, array $coefficients, $password = '')
    {
        if (count($primes) != 2) {
            throw new \InvalidArgumentException('MSBLOB does not support multi-prime RSA keys');
        }

        if (!empty($password) && is_string($password)) {
            throw new UnsupportedFormatException('MSBLOB private keys do not support encryption');
        }

        $n = strrev($n->toBytes());
        $e = str_pad(strrev($e->toBytes()), 4, "\0");
        $key = pack('aavV', chr(self::PRIVATEKEYBLOB), chr(2), 0, self::CALG_RSA_KEYX);
        $key .= pack('VVa*', self::RSA2, 8 * strlen($n), $e);
        $key .= $n;
        $key .= strrev($primes[1]->toBytes());
        $key .= strrev($primes[2]->toBytes());
        $key .= strrev($exponents[1]->toBytes());
        $key .= strrev($exponents[2]->toBytes());
        $key .= strrev($coefficients[2]->toBytes());
        $key .= strrev($d->toBytes());

        return Strings::base64_encode($key);
    }

    /**
     * Convert a public key to the appropriate format
     *
     * @param BigInteger $n
     * @param BigInteger $e
     * @return string
     */
    public static function savePublicKey(BigInteger $n, BigInteger $e)
    {
        $n = strrev($n->toBytes());
        $e = str_pad(strrev($e->toBytes()), 4, "\0");
        $key = pack('aavV', chr(self::PUBLICKEYBLOB), chr(2), 0, self::CALG_RSA_KEYX);
        $key .= pack('VVa*', self::RSA1, 8 * strlen($n), $e);
        $key .= $n;

        return Strings::base64_encode($key);
    }
}
<?php

/**
 * OpenSSH Formatted RSA Key Handler
 *
 * PHP version 5
 *
 * Place in $HOME/.ssh/authorized_keys
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2015 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\Crypt\RSA\Formats\Keys;

use phpseclib3\Common\Functions\Strings;
use phpseclib3\Crypt\Common\Formats\Keys\OpenSSH as Progenitor;
use phpseclib3\Math\BigInteger;

/**
 * OpenSSH Formatted RSA Key Handler
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class OpenSSH extends Progenitor
{
    /**
     * Supported Key Types
     *
     * @var array
     */
    protected static $types = ['ssh-rsa'];

    /**
     * Break a public or private key down into its constituent components
     *
     * @param string $key
     * @param string $password optional
     * @return array
     */
    public static function load($key, $password = '')
    {
        static $one;
        if (!isset($one)) {
            $one = new BigInteger(1);
        }

        $parsed = parent::load($key, $password);

        if (isset($parsed['paddedKey'])) {
            list($type) = Strings::unpackSSH2('s', $parsed['paddedKey']);
            if ($type != $parsed['type']) {
                throw new \RuntimeException("The public and private keys are not of the same type ($type vs $parsed[type])");
            }

            $primes = $coefficients = [];

            list(
                $modulus,
                $publicExponent,
                $privateExponent,
                $coefficients[2],
                $primes[1],
                $primes[2],
                $comment,
            ) = Strings::unpackSSH2('i6s', $parsed['paddedKey']);

            $temp = $primes[1]->subtract($one);
            $exponents = [1 => $publicExponent->modInverse($temp)];
            $temp = $primes[2]->subtract($one);
            $exponents[] = $publicExponent->modInverse($temp);

            $isPublicKey = false;

            return compact('publicExponent', 'modulus', 'privateExponent', 'primes', 'coefficients', 'exponents', 'comment', 'isPublicKey');
        }

        list($publicExponent, $modulus) = Strings::unpackSSH2('ii', $parsed['publicKey']);

        return [
            'isPublicKey' => true,
            'modulus' => $modulus,
            'publicExponent' => $publicExponent,
            'comment' => $parsed['comment']
        ];
    }

    /**
     * Convert a public key to the appropriate format
     *
     * @param BigInteger $n
     * @param BigInteger $e
     * @param array $options optional
     * @return string
     */
    public static function savePublicKey(BigInteger $n, BigInteger $e, array $options = [])
    {
        $RSAPublicKey = Strings::packSSH2('sii', 'ssh-rsa', $e, $n);

        if (isset($options['binary']) ? $options['binary'] : self::$binary) {
            return $RSAPublicKey;
        }

        $comment = isset($options['comment']) ? $options['comment'] : self::$comment;
        $RSAPublicKey = 'ssh-rsa ' . base64_encode($RSAPublicKey) . ' ' . $comment;

        return $RSAPublicKey;
    }

    /**
     * Convert a private key to the appropriate format.
     *
     * @param BigInteger $n
     * @param BigInteger $e
     * @param BigInteger $d
     * @param array $primes
     * @param array $exponents
     * @param array $coefficients
     * @param string $password optional
     * @param array $options optional
     * @return string
     */
    public static function savePrivateKey(BigInteger $n, BigInteger $e, BigInteger $d, array $primes, array $exponents, array $coefficients, $password = '', array $options = [])
    {
        $publicKey = self::savePublicKey($n, $e, ['binary' => true]);
        $privateKey = Strings::packSSH2('si6', 'ssh-rsa', $n, $e, $d, $coefficients[2], $primes[1], $primes[2]);

        return self::wrapPrivateKey($publicKey, $privateKey, $password, $options);
    }
}
<?php

/**
 * PKCS#1 Formatted RSA Key Handler
 *
 * PHP version 5
 *
 * Used by File/X509.php
 *
 * Processes keys with the following headers:
 *
 * -----BEGIN RSA PRIVATE KEY-----
 * -----BEGIN RSA PUBLIC KEY-----
 *
 * Analogous to ssh-keygen's pem format (as specified by -m)
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2015 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\Crypt\RSA\Formats\Keys;

use phpseclib3\Common\Functions\Strings;
use phpseclib3\Crypt\Common\Formats\Keys\PKCS1 as Progenitor;
use phpseclib3\File\ASN1;
use phpseclib3\File\ASN1\Maps;
use phpseclib3\Math\BigInteger;

/**
 * PKCS#1 Formatted RSA Key Handler
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class PKCS1 extends Progenitor
{
    /**
     * Break a public or private key down into its constituent components
     *
     * @param string $key
     * @param string $password optional
     * @return array
     */
    public static function load($key, $password = '')
    {
        if (!Strings::is_stringable($key)) {
            throw new \UnexpectedValueException('Key should be a string - not a ' . gettype($key));
        }

        if (strpos($key, 'PUBLIC') !== false) {
            $components = ['isPublicKey' => true];
        } elseif (strpos($key, 'PRIVATE') !== false) {
            $components = ['isPublicKey' => false];
        } else {
            $components = [];
        }

        $key = parent::load($key, $password);

        $decoded = ASN1::decodeBER($key);
        if (!$decoded) {
            throw new \RuntimeException('Unable to decode BER');
        }

        $key = ASN1::asn1map($decoded[0], Maps\RSAPrivateKey::MAP);
        if (is_array($key)) {
            $components += [
                'modulus' => $key['modulus'],
                'publicExponent' => $key['publicExponent'],
                'privateExponent' => $key['privateExponent'],
                'primes' => [1 => $key['prime1'], $key['prime2']],
                'exponents' => [1 => $key['exponent1'], $key['exponent2']],
                'coefficients' => [2 => $key['coefficient']]
            ];
            if ($key['version'] == 'multi') {
                foreach ($key['otherPrimeInfos'] as $primeInfo) {
                    $components['primes'][] = $primeInfo['prime'];
                    $components['exponents'][] = $primeInfo['exponent'];
                    $components['coefficients'][] = $primeInfo['coefficient'];
                }
            }
            if (!isset($components['isPublicKey'])) {
                $components['isPublicKey'] = false;
            }
            return $components;
        }

        $key = ASN1::asn1map($decoded[0], Maps\RSAPublicKey::MAP);

        if (!is_array($key)) {
            throw new \RuntimeException('Unable to perform ASN1 mapping');
        }

        if (!isset($components['isPublicKey'])) {
            $components['isPublicKey'] = true;
        }

        $components = $components + $key;
        foreach ($components as &$val) {
            if ($val instanceof BigInteger) {
                $val = self::makePositive($val);
            }
            if (is_array($val)) {
                foreach ($val as &$subval) {
                    if ($subval instanceof BigInteger) {
                        $subval = self::makePositive($subval);
                    }
                }
            }
        }

        return $components + $key;
    }

    /**
     * Convert a private key to the appropriate format.
     *
     * @param BigInteger $n
     * @param BigInteger $e
     * @param BigInteger $d
     * @param array $primes
     * @param array $exponents
     * @param array $coefficients
     * @param string $password optional
     * @param array $options optional
     * @return string
     */
    public static function savePrivateKey(BigInteger $n, BigInteger $e, BigInteger $d, array $primes, array $exponents, array $coefficients, $password = '', array $options = [])
    {
        $num_primes = count($primes);
        $key = [
            'version' => $num_primes == 2 ? 'two-prime' : 'multi',
            'modulus' => $n,
            'publicExponent' => $e,
            'privateExponent' => $d,
            'prime1' => $primes[1],
            'prime2' => $primes[2],
            'exponent1' => $exponents[1],
            'exponent2' => $exponents[2],
            'coefficient' => $coefficients[2]
        ];
        for ($i = 3; $i <= $num_primes; $i++) {
            $key['otherPrimeInfos'][] = [
                'prime' => $primes[$i],
                'exponent' => $exponents[$i],
                'coefficient' => $coefficients[$i]
            ];
        }

        $key = ASN1::encodeDER($key, Maps\RSAPrivateKey::MAP);

        return self::wrapPrivateKey($key, 'RSA', $password, $options);
    }

    /**
     * Convert a public key to the appropriate format
     *
     * @param BigInteger $n
     * @param BigInteger $e
     * @return string
     */
    public static function savePublicKey(BigInteger $n, BigInteger $e)
    {
        $key = [
            'modulus' => $n,
            'publicExponent' => $e
        ];

        $key = ASN1::encodeDER($key, Maps\RSAPublicKey::MAP);

        return self::wrapPublicKey($key, 'RSA');
    }

    /**
     * Negative numbers make no sense in RSA so convert them to positive
     *
     * @param BigInteger $x
     * @return string
     */
    private static function makePositive(BigInteger $x)
    {
        return $x->isNegative() ?
            new BigInteger($x->toBytes(true), 256) :
            $x;
    }
}
<?php

/**
 * PKCS#8 Formatted RSA Key Handler
 *
 * PHP version 5
 *
 * Used by PHP's openssl_public_encrypt() and openssl's rsautl (when -pubin is set)
 *
 * Processes keys with the following headers:
 *
 * -----BEGIN ENCRYPTED PRIVATE KEY-----
 * -----BEGIN PRIVATE KEY-----
 * -----BEGIN PUBLIC KEY-----
 *
 * Analogous to ssh-keygen's pkcs8 format (as specified by -m). Although PKCS8
 * is specific to private keys it's basically creating a DER-encoded wrapper
 * for keys. This just extends that same concept to public keys (much like ssh-keygen)
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2015 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\Crypt\RSA\Formats\Keys;

use phpseclib3\Crypt\Common\Formats\Keys\PKCS8 as Progenitor;
use phpseclib3\File\ASN1;
use phpseclib3\Math\BigInteger;

/**
 * PKCS#8 Formatted RSA Key Handler
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class PKCS8 extends Progenitor
{
    /**
     * OID Name
     *
     * @var string
     */
    const OID_NAME = 'rsaEncryption';

    /**
     * OID Value
     *
     * @var string
     */
    const OID_VALUE = '1.2.840.113549.1.1.1';

    /**
     * Child OIDs loaded
     *
     * @var bool
     */
    protected static $childOIDsLoaded = false;

    /**
     * Break a public or private key down into its constituent components
     *
     * @param string $key
     * @param string $password optional
     * @return array
     */
    public static function load($key, $password = '')
    {
        $key = parent::load($key, $password);

        if (isset($key['privateKey'])) {
            $components['isPublicKey'] = false;
            $type = 'private';
        } else {
            $components['isPublicKey'] = true;
            $type = 'public';
        }

        $result = $components + PKCS1::load($key[$type . 'Key']);

        if (isset($key['meta'])) {
            $result['meta'] = $key['meta'];
        }

        return $result;
    }

    /**
     * Convert a private key to the appropriate format.
     *
     * @param BigInteger $n
     * @param BigInteger $e
     * @param BigInteger $d
     * @param array $primes
     * @param array $exponents
     * @param array $coefficients
     * @param string $password optional
     * @param array $options optional
     * @return string
     */
    public static function savePrivateKey(BigInteger $n, BigInteger $e, BigInteger $d, array $primes, array $exponents, array $coefficients, $password = '', array $options = [])
    {
        $key = PKCS1::savePrivateKey($n, $e, $d, $primes, $exponents, $coefficients);
        $key = ASN1::extractBER($key);
        return self::wrapPrivateKey($key, [], null, $password, null, '', $options);
    }

    /**
     * Convert a public key to the appropriate format
     *
     * @param BigInteger $n
     * @param BigInteger $e
     * @param array $options optional
     * @return string
     */
    public static function savePublicKey(BigInteger $n, BigInteger $e, array $options = [])
    {
        $key = PKCS1::savePublicKey($n, $e);
        $key = ASN1::extractBER($key);
        return self::wrapPublicKey($key, null, null, $options);
    }
}
<?php

/**
 * PKCS#8 Formatted RSA-PSS Key Handler
 *
 * PHP version 5
 *
 * Used by PHP's openssl_public_encrypt() and openssl's rsautl (when -pubin is set)
 *
 * Processes keys with the following headers:
 *
 * -----BEGIN ENCRYPTED PRIVATE KEY-----
 * -----BEGIN PRIVATE KEY-----
 * -----BEGIN PUBLIC KEY-----
 *
 * Analogous to "openssl genpkey -algorithm rsa-pss".
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2015 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\Crypt\RSA\Formats\Keys;

use phpseclib3\Common\Functions\Strings;
use phpseclib3\Crypt\Common\Formats\Keys\PKCS8 as Progenitor;
use phpseclib3\File\ASN1;
use phpseclib3\File\ASN1\Maps;
use phpseclib3\Math\BigInteger;

/**
 * PKCS#8 Formatted RSA-PSS Key Handler
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class PSS extends Progenitor
{
    /**
     * OID Name
     *
     * @var string
     */
    const OID_NAME = 'id-RSASSA-PSS';

    /**
     * OID Value
     *
     * @var string
     */
    const OID_VALUE = '1.2.840.113549.1.1.10';

    /**
     * OIDs loaded
     *
     * @var bool
     */
    private static $oidsLoaded = false;

    /**
     * Child OIDs loaded
     *
     * @var bool
     */
    protected static $childOIDsLoaded = false;

    /**
     * Initialize static variables
     */
    private static function initialize_static_variables()
    {
        if (!self::$oidsLoaded) {
            ASN1::loadOIDs([
                'md2' => '1.2.840.113549.2.2',
                'md4' => '1.2.840.113549.2.4',
                'md5' => '1.2.840.113549.2.5',
                'id-sha1' => '1.3.14.3.2.26',
                'id-sha256' => '2.16.840.1.101.3.4.2.1',
                'id-sha384' => '2.16.840.1.101.3.4.2.2',
                'id-sha512' => '2.16.840.1.101.3.4.2.3',
                'id-sha224' => '2.16.840.1.101.3.4.2.4',
                'id-sha512/224' => '2.16.840.1.101.3.4.2.5',
                'id-sha512/256' => '2.16.840.1.101.3.4.2.6',

                'id-mgf1' => '1.2.840.113549.1.1.8'
            ]);
            self::$oidsLoaded = true;
        }
    }

    /**
     * Break a public or private key down into its constituent components
     *
     * @param string $key
     * @param string $password optional
     * @return array
     */
    public static function load($key, $password = '')
    {
        self::initialize_static_variables();

        if (!Strings::is_stringable($key)) {
            throw new \UnexpectedValueException('Key should be a string - not a ' . gettype($key));
        }

        $components = ['isPublicKey' => strpos($key, 'PUBLIC') !== false];

        $key = parent::load($key, $password);

        $type = isset($key['privateKey']) ? 'private' : 'public';

        $result = $components + PKCS1::load($key[$type . 'Key']);

        if (isset($key[$type . 'KeyAlgorithm']['parameters'])) {
            $decoded = ASN1::decodeBER($key[$type . 'KeyAlgorithm']['parameters']);
            if ($decoded === false) {
                throw new \UnexpectedValueException('Unable to decode parameters');
            }
            $params = ASN1::asn1map($decoded[0], Maps\RSASSA_PSS_params::MAP);
        } else {
            $params = [];
        }

        if (isset($params['maskGenAlgorithm']['parameters'])) {
            $decoded = ASN1::decodeBER($params['maskGenAlgorithm']['parameters']);
            if ($decoded === false) {
                throw new \UnexpectedValueException('Unable to decode parameters');
            }
            $params['maskGenAlgorithm']['parameters'] = ASN1::asn1map($decoded[0], Maps\HashAlgorithm::MAP);
        } else {
            $params['maskGenAlgorithm'] = [
                'algorithm' => 'id-mgf1',
                'parameters' => ['algorithm' => 'id-sha1']
            ];
        }

        if (!isset($params['hashAlgorithm']['algorithm'])) {
            $params['hashAlgorithm']['algorithm'] = 'id-sha1';
        }

        $result['hash'] = str_replace('id-', '', $params['hashAlgorithm']['algorithm']);
        $result['MGFHash'] = str_replace('id-', '', $params['maskGenAlgorithm']['parameters']['algorithm']);
        if (isset($params['saltLength'])) {
            $result['saltLength'] = (int) $params['saltLength']->toString();
        }

        if (isset($key['meta'])) {
            $result['meta'] = $key['meta'];
        }

        return $result;
    }

    /**
     * Convert a private key to the appropriate format.
     *
     * @param BigInteger $n
     * @param BigInteger $e
     * @param BigInteger $d
     * @param array $primes
     * @param array $exponents
     * @param array $coefficients
     * @param string $password optional
     * @param array $options optional
     * @return string
     */
    public static function savePrivateKey(BigInteger $n, BigInteger $e, BigInteger $d, array $primes, array $exponents, array $coefficients, $password = '', array $options = [])
    {
        self::initialize_static_variables();

        $key = PKCS1::savePrivateKey($n, $e, $d, $primes, $exponents, $coefficients);
        $key = ASN1::extractBER($key);
        $params = self::savePSSParams($options);
        return self::wrapPrivateKey($key, [], $params, $password, null, '', $options);
    }

    /**
     * Convert a public key to the appropriate format
     *
     * @param BigInteger $n
     * @param BigInteger $e
     * @param array $options optional
     * @return string
     */
    public static function savePublicKey(BigInteger $n, BigInteger $e, array $options = [])
    {
        self::initialize_static_variables();

        $key = PKCS1::savePublicKey($n, $e);
        $key = ASN1::extractBER($key);
        $params = self::savePSSParams($options);
        return self::wrapPublicKey($key, $params);
    }

    /**
     * Encodes PSS parameters
     *
     * @param array $options
     * @return string
     */
    public static function savePSSParams(array $options)
    {
        /*
         The trailerField field is an integer.  It provides
         compatibility with IEEE Std 1363a-2004 [P1363A].  The value
         MUST be 1, which represents the trailer field with hexadecimal
         value 0xBC.  Other trailer fields, including the trailer field
         composed of HashID concatenated with 0xCC that is specified in
         IEEE Std 1363a, are not supported.  Implementations that
         perform signature generation MUST omit the trailerField field,
         indicating that the default trailer field value was used.
         Implementations that perform signature validation MUST
         recognize both a present trailerField field with value 1 and an
         absent trailerField field.

         source: https://tools.ietf.org/html/rfc4055#page-9
        */
        $params = [
            'trailerField' => new BigInteger(1)
        ];
        if (isset($options['hash'])) {
            $params['hashAlgorithm']['algorithm'] = 'id-' . $options['hash'];
        }
        if (isset($options['MGFHash'])) {
            $temp = ['algorithm' => 'id-' . $options['MGFHash']];
            $temp = ASN1::encodeDER($temp, Maps\HashAlgorithm::MAP);
            $params['maskGenAlgorithm'] = [
                'algorithm' => 'id-mgf1',
                'parameters' => new ASN1\Element($temp)
            ];
        }
        if (isset($options['saltLength'])) {
            $params['saltLength'] = new BigInteger($options['saltLength']);
        }

        return new ASN1\Element(ASN1::encodeDER($params, Maps\RSASSA_PSS_params::MAP));
    }
}
<?php

/**
 * PuTTY Formatted RSA Key Handler
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2015 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\Crypt\RSA\Formats\Keys;

use phpseclib3\Common\Functions\Strings;
use phpseclib3\Crypt\Common\Formats\Keys\PuTTY as Progenitor;
use phpseclib3\Math\BigInteger;

/**
 * PuTTY Formatted RSA Key Handler
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class PuTTY extends Progenitor
{
    /**
     * Public Handler
     *
     * @var string
     */
    const PUBLIC_HANDLER = 'phpseclib3\Crypt\RSA\Formats\Keys\OpenSSH';

    /**
     * Algorithm Identifier
     *
     * @var array
     */
    protected static $types = ['ssh-rsa'];

    /**
     * Break a public or private key down into its constituent components
     *
     * @param string $key
     * @param string $password optional
     * @return array
     */
    public static function load($key, $password = '')
    {
        static $one;
        if (!isset($one)) {
            $one = new BigInteger(1);
        }

        $components = parent::load($key, $password);
        if (!isset($components['private'])) {
            return $components;
        }
        $type = $components['type'];
        $comment = $components['comment'];
        $public = $components['public'];
        $private = $components['private'];
        unset($components['public'], $components['private']);

        $isPublicKey = false;

        $result = Strings::unpackSSH2('ii', $public);
        if ($result === false) {
            throw new \UnexpectedValueException('Key appears to be malformed');
        }
        list($publicExponent, $modulus) = $result;

        $result = Strings::unpackSSH2('iiii', $private);
        if ($result === false) {
            throw new \UnexpectedValueException('Key appears to be malformed');
        }
        $primes = $coefficients = [];
        list($privateExponent, $primes[1], $primes[2], $coefficients[2]) = $result;

        $temp = $primes[1]->subtract($one);
        $exponents = [1 => $publicExponent->modInverse($temp)];
        $temp = $primes[2]->subtract($one);
        $exponents[] = $publicExponent->modInverse($temp);

        return compact('publicExponent', 'modulus', 'privateExponent', 'primes', 'coefficients', 'exponents', 'comment', 'isPublicKey');
    }

    /**
     * Convert a private key to the appropriate format.
     *
     * @param BigInteger $n
     * @param BigInteger $e
     * @param BigInteger $d
     * @param array $primes
     * @param array $exponents
     * @param array $coefficients
     * @param string $password optional
     * @param array $options optional
     * @return string
     */
    public static function savePrivateKey(BigInteger $n, BigInteger $e, BigInteger $d, array $primes, array $exponents, array $coefficients, $password = '', array $options = [])
    {
        if (count($primes) != 2) {
            throw new \InvalidArgumentException('PuTTY does not support multi-prime RSA keys');
        }

        $public =  Strings::packSSH2('ii', $e, $n);
        $private = Strings::packSSH2('iiii', $d, $primes[1], $primes[2], $coefficients[2]);

        return self::wrapPrivateKey($public, $private, 'ssh-rsa', $password, $options);
    }

    /**
     * Convert a public key to the appropriate format
     *
     * @param BigInteger $n
     * @param BigInteger $e
     * @return string
     */
    public static function savePublicKey(BigInteger $n, BigInteger $e)
    {
        return self::wrapPublicKey(Strings::packSSH2('ii', $e, $n), 'ssh-rsa');
    }
}
<?php

/**
 * Raw RSA Key Handler
 *
 * PHP version 5
 *
 * An array containing two \phpseclib3\Math\BigInteger objects.
 *
 * The exponent can be indexed with any of the following:
 *
 * 0, e, exponent, publicExponent
 *
 * The modulus can be indexed with any of the following:
 *
 * 1, n, modulo, modulus
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2015 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\Crypt\RSA\Formats\Keys;

use phpseclib3\Math\BigInteger;

/**
 * Raw RSA Key Handler
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class Raw
{
    /**
     * Break a public or private key down into its constituent components
     *
     * @param string $key
     * @param string $password optional
     * @return array
     */
    public static function load($key, $password = '')
    {
        if (!is_array($key)) {
            throw new \UnexpectedValueException('Key should be a array - not a ' . gettype($key));
        }

        $key = array_change_key_case($key, CASE_LOWER);

        $components = ['isPublicKey' => false];

        foreach (['e', 'exponent', 'publicexponent', 0, 'privateexponent', 'd'] as $index) {
            if (isset($key[$index])) {
                $components['publicExponent'] = $key[$index];
                break;
            }
        }

        foreach (['n', 'modulo', 'modulus', 1] as $index) {
            if (isset($key[$index])) {
                $components['modulus'] = $key[$index];
                break;
            }
        }

        if (!isset($components['publicExponent']) || !isset($components['modulus'])) {
            throw new \UnexpectedValueException('Modulus / exponent not present');
        }

        if (isset($key['primes'])) {
            $components['primes'] = $key['primes'];
        } elseif (isset($key['p']) && isset($key['q'])) {
            $indices = [
                ['p', 'q'],
                ['prime1', 'prime2']
            ];
            foreach ($indices as $index) {
                list($i0, $i1) = $index;
                if (isset($key[$i0]) && isset($key[$i1])) {
                    $components['primes'] = [1 => $key[$i0], $key[$i1]];
                }
            }
        }

        if (isset($key['exponents'])) {
            $components['exponents'] = $key['exponents'];
        } else {
            $indices = [
                ['dp', 'dq'],
                ['exponent1', 'exponent2']
            ];
            foreach ($indices as $index) {
                list($i0, $i1) = $index;
                if (isset($key[$i0]) && isset($key[$i1])) {
                    $components['exponents'] = [1 => $key[$i0], $key[$i1]];
                }
            }
        }

        if (isset($key['coefficients'])) {
            $components['coefficients'] = $key['coefficients'];
        } else {
            foreach (['inverseq', 'q\'', 'coefficient'] as $index) {
                if (isset($key[$index])) {
                    $components['coefficients'] = [2 => $key[$index]];
                }
            }
        }

        if (!isset($components['primes'])) {
            $components['isPublicKey'] = true;
            return $components;
        }

        if (!isset($components['exponents'])) {
            $one = new BigInteger(1);
            $temp = $components['primes'][1]->subtract($one);
            $exponents = [1 => $components['publicExponent']->modInverse($temp)];
            $temp = $components['primes'][2]->subtract($one);
            $exponents[] = $components['publicExponent']->modInverse($temp);
            $components['exponents'] = $exponents;
        }

        if (!isset($components['coefficients'])) {
            $components['coefficients'] = [2 => $components['primes'][2]->modInverse($components['primes'][1])];
        }

        foreach (['privateexponent', 'd'] as $index) {
            if (isset($key[$index])) {
                $components['privateExponent'] = $key[$index];
                break;
            }
        }

        return $components;
    }

    /**
     * Convert a private key to the appropriate format.
     *
     * @param BigInteger $n
     * @param BigInteger $e
     * @param BigInteger $d
     * @param array $primes
     * @param array $exponents
     * @param array $coefficients
     * @param string $password optional
     * @param array $options optional
     * @return array
     */
    public static function savePrivateKey(BigInteger $n, BigInteger $e, BigInteger $d, array $primes, array $exponents, array $coefficients, $password = '', array $options = [])
    {
        if (!empty($password) && is_string($password)) {
            throw new UnsupportedFormatException('Raw private keys do not support encryption');
        }

        return [
            'e' => clone $e,
            'n' => clone $n,
            'd' => clone $d,
            'primes' => array_map(function ($var) {
                return clone $var;
            }, $primes),
            'exponents' => array_map(function ($var) {
                return clone $var;
            }, $exponents),
            'coefficients' => array_map(function ($var) {
                return clone $var;
            }, $coefficients)
        ];
    }

    /**
     * Convert a public key to the appropriate format
     *
     * @param BigInteger $n
     * @param BigInteger $e
     * @return array
     */
    public static function savePublicKey(BigInteger $n, BigInteger $e)
    {
        return ['e' => clone $e, 'n' => clone $n];
    }
}
<?php

/**
 * XML Formatted RSA Key Handler
 *
 * More info:
 *
 * http://www.w3.org/TR/xmldsig-core/#sec-RSAKeyValue
 * http://www.w3.org/TR/xkms2/#XKMS_2_0_Paragraph_269
 * http://en.wikipedia.org/wiki/XML_Signature
 * http://en.wikipedia.org/wiki/XKMS
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2015 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\Crypt\RSA\Formats\Keys;

use phpseclib3\Common\Functions\Strings;
use phpseclib3\Exception\BadConfigurationException;
use phpseclib3\Exception\UnsupportedFormatException;
use phpseclib3\Math\BigInteger;

/**
 * XML Formatted RSA Key Handler
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class XML
{
    /**
     * Break a public or private key down into its constituent components
     *
     * @param string $key
     * @param string $password optional
     * @return array
     */
    public static function load($key, $password = '')
    {
        if (!Strings::is_stringable($key)) {
            throw new \UnexpectedValueException('Key should be a string - not a ' . gettype($key));
        }

        if (!class_exists('DOMDocument')) {
            throw new BadConfigurationException('The dom extension is not setup correctly on this system');
        }

        $components = [
            'isPublicKey' => false,
            'primes' => [],
            'exponents' => [],
            'coefficients' => []
        ];

        $use_errors = libxml_use_internal_errors(true);

        $dom = new \DOMDocument();
        if (substr($key, 0, 5) != '<?xml') {
            $key = '<xml>' . $key . '</xml>';
        }
        if (!$dom->loadXML($key)) {
            libxml_use_internal_errors($use_errors);
            throw new \UnexpectedValueException('Key does not appear to contain XML');
        }
        $xpath = new \DOMXPath($dom);
        $keys = ['modulus', 'exponent', 'p', 'q', 'dp', 'dq', 'inverseq', 'd'];
        foreach ($keys as $key) {
            // $dom->getElementsByTagName($key) is case-sensitive
            $temp = $xpath->query("//*[translate(local-name(), 'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz')='$key']");
            if (!$temp->length) {
                continue;
            }
            $value = new BigInteger(Strings::base64_decode($temp->item(0)->nodeValue), 256);
            switch ($key) {
                case 'modulus':
                    $components['modulus'] = $value;
                    break;
                case 'exponent':
                    $components['publicExponent'] = $value;
                    break;
                case 'p':
                    $components['primes'][1] = $value;
                    break;
                case 'q':
                    $components['primes'][2] = $value;
                    break;
                case 'dp':
                    $components['exponents'][1] = $value;
                    break;
                case 'dq':
                    $components['exponents'][2] = $value;
                    break;
                case 'inverseq':
                    $components['coefficients'][2] = $value;
                    break;
                case 'd':
                    $components['privateExponent'] = $value;
            }
        }

        libxml_use_internal_errors($use_errors);

        foreach ($components as $key => $value) {
            if (is_array($value) && !count($value)) {
                unset($components[$key]);
            }
        }

        if (isset($components['modulus']) && isset($components['publicExponent'])) {
            if (count($components) == 3) {
                $components['isPublicKey'] = true;
            }
            return $components;
        }

        throw new \UnexpectedValueException('Modulus / exponent not present');
    }

    /**
     * Convert a private key to the appropriate format.
     *
     * @param BigInteger $n
     * @param BigInteger $e
     * @param BigInteger $d
     * @param array $primes
     * @param array $exponents
     * @param array $coefficients
     * @param string $password optional
     * @return string
     */
    public static function savePrivateKey(BigInteger $n, BigInteger $e, BigInteger $d, array $primes, array $exponents, array $coefficients, $password = '')
    {
        if (count($primes) != 2) {
            throw new \InvalidArgumentException('XML does not support multi-prime RSA keys');
        }

        if (!empty($password) && is_string($password)) {
            throw new UnsupportedFormatException('XML private keys do not support encryption');
        }

        return "<RSAKeyPair>\r\n" .
               '  <Modulus>' . Strings::base64_encode($n->toBytes()) . "</Modulus>\r\n" .
               '  <Exponent>' . Strings::base64_encode($e->toBytes()) . "</Exponent>\r\n" .
               '  <P>' . Strings::base64_encode($primes[1]->toBytes()) . "</P>\r\n" .
               '  <Q>' . Strings::base64_encode($primes[2]->toBytes()) . "</Q>\r\n" .
               '  <DP>' . Strings::base64_encode($exponents[1]->toBytes()) . "</DP>\r\n" .
               '  <DQ>' . Strings::base64_encode($exponents[2]->toBytes()) . "</DQ>\r\n" .
               '  <InverseQ>' . Strings::base64_encode($coefficients[2]->toBytes()) . "</InverseQ>\r\n" .
               '  <D>' . Strings::base64_encode($d->toBytes()) . "</D>\r\n" .
               '</RSAKeyPair>';
    }

    /**
     * Convert a public key to the appropriate format
     *
     * @param BigInteger $n
     * @param BigInteger $e
     * @return string
     */
    public static function savePublicKey(BigInteger $n, BigInteger $e)
    {
        return "<RSAKeyValue>\r\n" .
               '  <Modulus>' . Strings::base64_encode($n->toBytes()) . "</Modulus>\r\n" .
               '  <Exponent>' . Strings::base64_encode($e->toBytes()) . "</Exponent>\r\n" .
               '</RSAKeyValue>';
    }
}
<?php

/**
 * RSA Private Key
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2015 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\Crypt\RSA;

use phpseclib3\Crypt\Common;
use phpseclib3\Crypt\Random;
use phpseclib3\Crypt\RSA;
use phpseclib3\Crypt\RSA\Formats\Keys\PSS;
use phpseclib3\Exception\UnsupportedFormatException;
use phpseclib3\Math\BigInteger;

/**
 * Raw RSA Key Handler
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
final class PrivateKey extends RSA implements Common\PrivateKey
{
    use Common\Traits\PasswordProtected;

    /**
     * Primes for Chinese Remainder Theorem (ie. p and q)
     *
     * @var array
     */
    protected $primes;

    /**
     * Exponents for Chinese Remainder Theorem (ie. dP and dQ)
     *
     * @var array
     */
    protected $exponents;

    /**
     * Coefficients for Chinese Remainder Theorem (ie. qInv)
     *
     * @var array
     */
    protected $coefficients;

    /**
     * Private Exponent
     *
     * @var BigInteger
     */
    protected $privateExponent;

    /**
     * RSADP
     *
     * See {@link http://tools.ietf.org/html/rfc3447#section-5.1.2 RFC3447#section-5.1.2}.
     *
     * @return bool|BigInteger
     */
    private function rsadp(BigInteger $c)
    {
        if ($c->compare(self::$zero) < 0 || $c->compare($this->modulus) > 0) {
            throw new \OutOfRangeException('Ciphertext representative out of range');
        }
        return $this->exponentiate($c);
    }

    /**
     * RSASP1
     *
     * See {@link http://tools.ietf.org/html/rfc3447#section-5.2.1 RFC3447#section-5.2.1}.
     *
     * @return bool|BigInteger
     */
    private function rsasp1(BigInteger $m)
    {
        if ($m->compare(self::$zero) < 0 || $m->compare($this->modulus) > 0) {
            throw new \OutOfRangeException('Signature representative out of range');
        }
        return $this->exponentiate($m);
    }

    /**
     * Exponentiate
     *
     * @param BigInteger $x
     * @return BigInteger
     */
    protected function exponentiate(BigInteger $x)
    {
        switch (true) {
            case empty($this->primes):
            case $this->primes[1]->equals(self::$zero):
            case empty($this->coefficients):
            case $this->coefficients[2]->equals(self::$zero):
            case empty($this->exponents):
            case $this->exponents[1]->equals(self::$zero):
                return $x->modPow($this->exponent, $this->modulus);
        }

        $num_primes = count($this->primes);

        if (!static::$enableBlinding) {
            $m_i = [
                1 => $x->modPow($this->exponents[1], $this->primes[1]),
                2 => $x->modPow($this->exponents[2], $this->primes[2])
            ];
            $h = $m_i[1]->subtract($m_i[2]);
            $h = $h->multiply($this->coefficients[2]);
            list(, $h) = $h->divide($this->primes[1]);
            $m = $m_i[2]->add($h->multiply($this->primes[2]));

            $r = $this->primes[1];
            for ($i = 3; $i <= $num_primes; $i++) {
                $m_i = $x->modPow($this->exponents[$i], $this->primes[$i]);

                $r = $r->multiply($this->primes[$i - 1]);

                $h = $m_i->subtract($m);
                $h = $h->multiply($this->coefficients[$i]);
                list(, $h) = $h->divide($this->primes[$i]);

                $m = $m->add($r->multiply($h));
            }
        } else {
            $smallest = $this->primes[1];
            for ($i = 2; $i <= $num_primes; $i++) {
                if ($smallest->compare($this->primes[$i]) > 0) {
                    $smallest = $this->primes[$i];
                }
            }

            $r = BigInteger::randomRange(self::$one, $smallest->subtract(self::$one));

            $m_i = [
                1 => $this->blind($x, $r, 1),
                2 => $this->blind($x, $r, 2)
            ];
            $h = $m_i[1]->subtract($m_i[2]);
            $h = $h->multiply($this->coefficients[2]);
            list(, $h) = $h->divide($this->primes[1]);
            $m = $m_i[2]->add($h->multiply($this->primes[2]));

            $r = $this->primes[1];
            for ($i = 3; $i <= $num_primes; $i++) {
                $m_i = $this->blind($x, $r, $i);

                $r = $r->multiply($this->primes[$i - 1]);

                $h = $m_i->subtract($m);
                $h = $h->multiply($this->coefficients[$i]);
                list(, $h) = $h->divide($this->primes[$i]);

                $m = $m->add($r->multiply($h));
            }
        }

        return $m;
    }

    /**
     * Performs RSA Blinding
     *
     * Protects against timing attacks by employing RSA Blinding.
     * Returns $x->modPow($this->exponents[$i], $this->primes[$i])
     *
     * @param BigInteger $x
     * @param BigInteger $r
     * @param int $i
     * @return BigInteger
     */
    private function blind(BigInteger $x, BigInteger $r, $i)
    {
        $x = $x->multiply($r->modPow($this->publicExponent, $this->primes[$i]));
        $x = $x->modPow($this->exponents[$i], $this->primes[$i]);

        $r = $r->modInverse($this->primes[$i]);
        $x = $x->multiply($r);
        list(, $x) = $x->divide($this->primes[$i]);

        return $x;
    }

    /**
     * EMSA-PSS-ENCODE
     *
     * See {@link http://tools.ietf.org/html/rfc3447#section-9.1.1 RFC3447#section-9.1.1}.
     *
     * @return string
     * @param string $m
     * @throws \RuntimeException on encoding error
     * @param int $emBits
     */
    private function emsa_pss_encode($m, $emBits)
    {
        // if $m is larger than two million terrabytes and you're using sha1, PKCS#1 suggests a "Label too long" error
        // be output.

        $emLen = ($emBits + 1) >> 3; // ie. ceil($emBits / 8)
        $sLen = $this->sLen !== null ? $this->sLen : $this->hLen;

        $mHash = $this->hash->hash($m);
        if ($emLen < $this->hLen + $sLen + 2) {
            throw new \LengthException('RSA modulus too short');
        }

        $salt = Random::string($sLen);
        $m2 = "\0\0\0\0\0\0\0\0" . $mHash . $salt;
        $h = $this->hash->hash($m2);
        $ps = str_repeat(chr(0), $emLen - $sLen - $this->hLen - 2);
        $db = $ps . chr(1) . $salt;
        $dbMask = $this->mgf1($h, $emLen - $this->hLen - 1); // ie. stlren($db)
        $maskedDB = $db ^ $dbMask;
        $maskedDB[0] = ~chr(0xFF << ($emBits & 7)) & $maskedDB[0];
        $em = $maskedDB . $h . chr(0xBC);

        return $em;
    }

    /**
     * RSASSA-PSS-SIGN
     *
     * See {@link http://tools.ietf.org/html/rfc3447#section-8.1.1 RFC3447#section-8.1.1}.
     *
     * @param string $m
     * @return bool|string
     */
    private function rsassa_pss_sign($m)
    {
        // EMSA-PSS encoding

        $em = $this->emsa_pss_encode($m, 8 * $this->k - 1);

        // RSA signature

        $m = $this->os2ip($em);
        $s = $this->rsasp1($m);
        $s = $this->i2osp($s, $this->k);

        // Output the signature S

        return $s;
    }

    /**
     * RSASSA-PKCS1-V1_5-SIGN
     *
     * See {@link http://tools.ietf.org/html/rfc3447#section-8.2.1 RFC3447#section-8.2.1}.
     *
     * @param string $m
     * @throws \LengthException if the RSA modulus is too short
     * @return bool|string
     */
    private function rsassa_pkcs1_v1_5_sign($m)
    {
        // EMSA-PKCS1-v1_5 encoding

        // If the encoding operation outputs "intended encoded message length too short," output "RSA modulus
        // too short" and stop.
        try {
            $em = $this->emsa_pkcs1_v1_5_encode($m, $this->k);
        } catch (\LengthException $e) {
            throw new \LengthException('RSA modulus too short');
        }

        // RSA signature

        $m = $this->os2ip($em);
        $s = $this->rsasp1($m);
        $s = $this->i2osp($s, $this->k);

        // Output the signature S

        return $s;
    }

    /**
     * Create a signature
     *
     * @see self::verify()
     * @param string $message
     * @return string
     */
    public function sign($message)
    {
        switch ($this->signaturePadding) {
            case self::SIGNATURE_PKCS1:
            case self::SIGNATURE_RELAXED_PKCS1:
                return $this->rsassa_pkcs1_v1_5_sign($message);
            //case self::SIGNATURE_PSS:
            default:
                return $this->rsassa_pss_sign($message);
        }
    }

    /**
     * RSAES-PKCS1-V1_5-DECRYPT
     *
     * See {@link http://tools.ietf.org/html/rfc3447#section-7.2.2 RFC3447#section-7.2.2}.
     *
     * @param string $c
     * @return bool|string
     */
    private function rsaes_pkcs1_v1_5_decrypt($c)
    {
        // Length checking

        if (strlen($c) != $this->k) { // or if k < 11
            throw new \LengthException('Ciphertext representative too long');
        }

        // RSA decryption

        $c = $this->os2ip($c);
        $m = $this->rsadp($c);
        $em = $this->i2osp($m, $this->k);

        // EME-PKCS1-v1_5 decoding

        if (ord($em[0]) != 0 || ord($em[1]) > 2) {
            throw new \RuntimeException('Decryption error');
        }

        $ps = substr($em, 2, strpos($em, chr(0), 2) - 2);
        $m = substr($em, strlen($ps) + 3);

        if (strlen($ps) < 8) {
            throw new \RuntimeException('Decryption error');
        }

        // Output M

        return $m;
    }

    /**
     * RSAES-OAEP-DECRYPT
     *
     * See {@link http://tools.ietf.org/html/rfc3447#section-7.1.2 RFC3447#section-7.1.2}.  The fact that the error
     * messages aren't distinguishable from one another hinders debugging, but, to quote from RFC3447#section-7.1.2:
     *
     *    Note.  Care must be taken to ensure that an opponent cannot
     *    distinguish the different error conditions in Step 3.g, whether by
     *    error message or timing, or, more generally, learn partial
     *    information about the encoded message EM.  Otherwise an opponent may
     *    be able to obtain useful information about the decryption of the
     *    ciphertext C, leading to a chosen-ciphertext attack such as the one
     *    observed by Manger [36].
     *
     * @param string $c
     * @return bool|string
     */
    private function rsaes_oaep_decrypt($c)
    {
        // Length checking

        // if $l is larger than two million terrabytes and you're using sha1, PKCS#1 suggests a "Label too long" error
        // be output.

        if (strlen($c) != $this->k || $this->k < 2 * $this->hLen + 2) {
            throw new \LengthException('Ciphertext representative too long');
        }

        // RSA decryption

        $c = $this->os2ip($c);
        $m = $this->rsadp($c);
        $em = $this->i2osp($m, $this->k);

        // EME-OAEP decoding

        $lHash = $this->hash->hash($this->label);
        $y = ord($em[0]);
        $maskedSeed = substr($em, 1, $this->hLen);
        $maskedDB = substr($em, $this->hLen + 1);
        $seedMask = $this->mgf1($maskedDB, $this->hLen);
        $seed = $maskedSeed ^ $seedMask;
        $dbMask = $this->mgf1($seed, $this->k - $this->hLen - 1);
        $db = $maskedDB ^ $dbMask;
        $lHash2 = substr($db, 0, $this->hLen);
        $m = substr($db, $this->hLen);
        $hashesMatch = hash_equals($lHash, $lHash2);
        $leadingZeros = 1;
        $patternMatch = 0;
        $offset = 0;
        for ($i = 0; $i < strlen($m); $i++) {
            $patternMatch |= $leadingZeros & ($m[$i] === "\1");
            $leadingZeros &= $m[$i] === "\0";
            $offset += $patternMatch ? 0 : 1;
        }

        // we do | instead of || to avoid https://en.wikipedia.org/wiki/Short-circuit_evaluation
        // to protect against timing attacks
        if (!$hashesMatch | !$patternMatch) {
            throw new \RuntimeException('Decryption error');
        }

        // Output the message M

        return substr($m, $offset + 1);
    }

    /**
     * Raw Encryption / Decryption
     *
     * Doesn't use padding and is not recommended.
     *
     * @param string $m
     * @return bool|string
     * @throws \LengthException if strlen($m) > $this->k
     */
    private function raw_encrypt($m)
    {
        if (strlen($m) > $this->k) {
            throw new \LengthException('Ciphertext representative too long');
        }

        $temp = $this->os2ip($m);
        $temp = $this->rsadp($temp);
        return  $this->i2osp($temp, $this->k);
    }

    /**
     * Decryption
     *
     * @see self::encrypt()
     * @param string $ciphertext
     * @return bool|string
     */
    public function decrypt($ciphertext)
    {
        switch ($this->encryptionPadding) {
            case self::ENCRYPTION_NONE:
                return $this->raw_encrypt($ciphertext);
            case self::ENCRYPTION_PKCS1:
                return $this->rsaes_pkcs1_v1_5_decrypt($ciphertext);
            //case self::ENCRYPTION_OAEP:
            default:
                return $this->rsaes_oaep_decrypt($ciphertext);
        }
    }

    /**
     * Returns the public key
     *
     * @return mixed
     */
    public function getPublicKey()
    {
        $type = self::validatePlugin('Keys', 'PKCS8', 'savePublicKey');
        if (empty($this->modulus) || empty($this->publicExponent)) {
            throw new \RuntimeException('Public key components not found');
        }

        $key = $type::savePublicKey($this->modulus, $this->publicExponent);
        return RSA::loadFormat('PKCS8', $key)
            ->withHash($this->hash->getHash())
            ->withMGFHash($this->mgfHash->getHash())
            ->withSaltLength($this->sLen)
            ->withLabel($this->label)
            ->withPadding($this->signaturePadding | $this->encryptionPadding);
    }

    /**
     * Returns the private key
     *
     * @param string $type
     * @param array $options optional
     * @return string
     */
    public function toString($type, array $options = [])
    {
        $type = self::validatePlugin(
            'Keys',
            $type,
            empty($this->primes) ? 'savePublicKey' : 'savePrivateKey'
        );

        if ($type == PSS::class) {
            if ($this->signaturePadding == self::SIGNATURE_PSS) {
                $options += [
                    'hash' => $this->hash->getHash(),
                    'MGFHash' => $this->mgfHash->getHash(),
                    'saltLength' => $this->getSaltLength()
                ];
            } else {
                throw new UnsupportedFormatException('The PSS format can only be used when the signature method has been explicitly set to PSS');
            }
        }

        if (empty($this->primes)) {
            return $type::savePublicKey($this->modulus, $this->exponent, $options);
        }

        return $type::savePrivateKey($this->modulus, $this->publicExponent, $this->exponent, $this->primes, $this->exponents, $this->coefficients, $this->password, $options);

        /*
        $key = $type::savePrivateKey($this->modulus, $this->publicExponent, $this->exponent, $this->primes, $this->exponents, $this->coefficients, $this->password, $options);
        if ($key !== false || count($this->primes) == 2) {
            return $key;
        }

        $nSize = $this->getSize() >> 1;

        $primes = [1 => clone self::$one, clone self::$one];
        $i = 1;
        foreach ($this->primes as $prime) {
            $primes[$i] = $primes[$i]->multiply($prime);
            if ($primes[$i]->getLength() >= $nSize) {
                $i++;
            }
        }

        $exponents = [];
        $coefficients = [2 => $primes[2]->modInverse($primes[1])];

        foreach ($primes as $i => $prime) {
            $temp = $prime->subtract(self::$one);
            $exponents[$i] = $this->modulus->modInverse($temp);
        }

        return $type::savePrivateKey($this->modulus, $this->publicExponent, $this->exponent, $primes, $exponents, $coefficients, $this->password, $options);
        */
    }
}
<?php

/**
 * RSA Public Key
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2015 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\Crypt\RSA;

use phpseclib3\Common\Functions\Strings;
use phpseclib3\Crypt\Common;
use phpseclib3\Crypt\Hash;
use phpseclib3\Crypt\Random;
use phpseclib3\Crypt\RSA;
use phpseclib3\Crypt\RSA\Formats\Keys\PSS;
use phpseclib3\Exception\UnsupportedAlgorithmException;
use phpseclib3\Exception\UnsupportedFormatException;
use phpseclib3\File\ASN1;
use phpseclib3\File\ASN1\Maps\DigestInfo;
use phpseclib3\Math\BigInteger;

/**
 * Raw RSA Key Handler
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
final class PublicKey extends RSA implements Common\PublicKey
{
    use Common\Traits\Fingerprint;

    /**
     * Exponentiate
     *
     * @param BigInteger $x
     * @return BigInteger
     */
    private function exponentiate(BigInteger $x)
    {
        return $x->modPow($this->exponent, $this->modulus);
    }

    /**
     * RSAVP1
     *
     * See {@link http://tools.ietf.org/html/rfc3447#section-5.2.2 RFC3447#section-5.2.2}.
     *
     * @param BigInteger $s
     * @return bool|BigInteger
     */
    private function rsavp1($s)
    {
        if ($s->compare(self::$zero) < 0 || $s->compare($this->modulus) > 0) {
            return false;
        }
        return $this->exponentiate($s);
    }

    /**
     * RSASSA-PKCS1-V1_5-VERIFY
     *
     * See {@link http://tools.ietf.org/html/rfc3447#section-8.2.2 RFC3447#section-8.2.2}.
     *
     * @param string $m
     * @param string $s
     * @throws \LengthException if the RSA modulus is too short
     * @return bool
     */
    private function rsassa_pkcs1_v1_5_verify($m, $s)
    {
        // Length checking

        if (strlen($s) != $this->k) {
            return false;
        }

        // RSA verification

        $s = $this->os2ip($s);
        $m2 = $this->rsavp1($s);
        if ($m2 === false) {
            return false;
        }
        $em = $this->i2osp($m2, $this->k);
        if ($em === false) {
            return false;
        }

        // EMSA-PKCS1-v1_5 encoding

        $exception = false;

        // If the encoding operation outputs "intended encoded message length too short," output "RSA modulus
        // too short" and stop.
        try {
            $em2 = $this->emsa_pkcs1_v1_5_encode($m, $this->k);
            $r1 = hash_equals($em, $em2);
        } catch (\LengthException $e) {
            $exception = true;
        }

        try {
            $em3 = $this->emsa_pkcs1_v1_5_encode_without_null($m, $this->k);
            $r2 = hash_equals($em, $em3);
        } catch (\LengthException $e) {
            $exception = true;
        } catch (UnsupportedAlgorithmException $e) {
            $r2 = false;
        }

        if ($exception) {
            throw new \LengthException('RSA modulus too short');
        }

        // Compare
        return $r1 || $r2;
    }

    /**
     * RSASSA-PKCS1-V1_5-VERIFY (relaxed matching)
     *
     * Per {@link http://tools.ietf.org/html/rfc3447#page-43 RFC3447#page-43} PKCS1 v1.5
     * specified the use BER encoding rather than DER encoding that PKCS1 v2.0 specified.
     * This means that under rare conditions you can have a perfectly valid v1.5 signature
     * that fails to validate with _rsassa_pkcs1_v1_5_verify(). PKCS1 v2.1 also recommends
     * that if you're going to validate these types of signatures you "should indicate
     * whether the underlying BER encoding is a DER encoding and hence whether the signature
     * is valid with respect to the specification given in [PKCS1 v2.0+]". so if you do
     * $rsa->getLastPadding() and get RSA::PADDING_RELAXED_PKCS1 back instead of
     * RSA::PADDING_PKCS1... that means BER encoding was used.
     *
     * @param string $m
     * @param string $s
     * @return bool
     */
    private function rsassa_pkcs1_v1_5_relaxed_verify($m, $s)
    {
        // Length checking

        if (strlen($s) != $this->k) {
            return false;
        }

        // RSA verification

        $s = $this->os2ip($s);
        $m2 = $this->rsavp1($s);
        if ($m2 === false) {
            return false;
        }
        $em = $this->i2osp($m2, $this->k);
        if ($em === false) {
            return false;
        }

        if (Strings::shift($em, 2) != "\0\1") {
            return false;
        }

        $em = ltrim($em, "\xFF");
        if (Strings::shift($em) != "\0") {
            return false;
        }

        $decoded = ASN1::decodeBER($em);
        if (!is_array($decoded) || empty($decoded[0]) || strlen($em) > $decoded[0]['length']) {
            return false;
        }

        static $oids;
        if (!isset($oids)) {
            $oids = [
                'md2' => '1.2.840.113549.2.2',
                'md4' => '1.2.840.113549.2.4', // from PKCS1 v1.5
                'md5' => '1.2.840.113549.2.5',
                'id-sha1' => '1.3.14.3.2.26',
                'id-sha256' => '2.16.840.1.101.3.4.2.1',
                'id-sha384' => '2.16.840.1.101.3.4.2.2',
                'id-sha512' => '2.16.840.1.101.3.4.2.3',
                // from PKCS1 v2.2
                'id-sha224' => '2.16.840.1.101.3.4.2.4',
                'id-sha512/224' => '2.16.840.1.101.3.4.2.5',
                'id-sha512/256' => '2.16.840.1.101.3.4.2.6',
            ];
            ASN1::loadOIDs($oids);
        }

        $decoded = ASN1::asn1map($decoded[0], DigestInfo::MAP);
        if (!isset($decoded) || $decoded === false) {
            return false;
        }

        if (!isset($oids[$decoded['digestAlgorithm']['algorithm']])) {
            return false;
        }

        if (isset($decoded['digestAlgorithm']['parameters']) && $decoded['digestAlgorithm']['parameters'] !== ['null' => '']) {
            return false;
        }

        $hash = $decoded['digestAlgorithm']['algorithm'];
        $hash = substr($hash, 0, 3) == 'id-' ?
            substr($hash, 3) :
            $hash;
        $hash = new Hash($hash);
        $em = $hash->hash($m);
        $em2 = $decoded['digest'];

        return hash_equals($em, $em2);
    }

    /**
     * EMSA-PSS-VERIFY
     *
     * See {@link http://tools.ietf.org/html/rfc3447#section-9.1.2 RFC3447#section-9.1.2}.
     *
     * @param string $m
     * @param string $em
     * @param int $emBits
     * @return string
     */
    private function emsa_pss_verify($m, $em, $emBits)
    {
        // if $m is larger than two million terrabytes and you're using sha1, PKCS#1 suggests a "Label too long" error
        // be output.

        $emLen = ($emBits + 7) >> 3; // ie. ceil($emBits / 8);
        $sLen = $this->sLen !== null ? $this->sLen : $this->hLen;

        $mHash = $this->hash->hash($m);
        if ($emLen < $this->hLen + $sLen + 2) {
            return false;
        }

        if ($em[strlen($em) - 1] != chr(0xBC)) {
            return false;
        }

        $maskedDB = substr($em, 0, -$this->hLen - 1);
        $h = substr($em, -$this->hLen - 1, $this->hLen);
        $temp = chr(0xFF << ($emBits & 7));
        if ((~$maskedDB[0] & $temp) != $temp) {
            return false;
        }
        $dbMask = $this->mgf1($h, $emLen - $this->hLen - 1);
        $db = $maskedDB ^ $dbMask;
        $db[0] = ~chr(0xFF << ($emBits & 7)) & $db[0];
        $temp = $emLen - $this->hLen - $sLen - 2;
        if (substr($db, 0, $temp) != str_repeat(chr(0), $temp) || ord($db[$temp]) != 1) {
            return false;
        }
        $salt = substr($db, $temp + 1); // should be $sLen long
        $m2 = "\0\0\0\0\0\0\0\0" . $mHash . $salt;
        $h2 = $this->hash->hash($m2);
        return hash_equals($h, $h2);
    }

    /**
     * RSASSA-PSS-VERIFY
     *
     * See {@link http://tools.ietf.org/html/rfc3447#section-8.1.2 RFC3447#section-8.1.2}.
     *
     * @param string $m
     * @param string $s
     * @return bool|string
     */
    private function rsassa_pss_verify($m, $s)
    {
        // Length checking

        if (strlen($s) != $this->k) {
            return false;
        }

        // RSA verification

        $modBits = strlen($this->modulus->toBits());

        $s2 = $this->os2ip($s);
        $m2 = $this->rsavp1($s2);
        $em = $this->i2osp($m2, $this->k);
        if ($em === false) {
            return false;
        }

        // EMSA-PSS verification

        return $this->emsa_pss_verify($m, $em, $modBits - 1);
    }

    /**
     * Verifies a signature
     *
     * @see self::sign()
     * @param string $message
     * @param string $signature
     * @return bool
     */
    public function verify($message, $signature)
    {
        switch ($this->signaturePadding) {
            case self::SIGNATURE_RELAXED_PKCS1:
                return $this->rsassa_pkcs1_v1_5_relaxed_verify($message, $signature);
            case self::SIGNATURE_PKCS1:
                return $this->rsassa_pkcs1_v1_5_verify($message, $signature);
            //case self::SIGNATURE_PSS:
            default:
                return $this->rsassa_pss_verify($message, $signature);
        }
    }

    /**
     * RSAES-PKCS1-V1_5-ENCRYPT
     *
     * See {@link http://tools.ietf.org/html/rfc3447#section-7.2.1 RFC3447#section-7.2.1}.
     *
     * @param string $m
     * @param bool $pkcs15_compat optional
     * @throws \LengthException if strlen($m) > $this->k - 11
     * @return bool|string
     */
    private function rsaes_pkcs1_v1_5_encrypt($m, $pkcs15_compat = false)
    {
        $mLen = strlen($m);

        // Length checking

        if ($mLen > $this->k - 11) {
            throw new \LengthException('Message too long');
        }

        // EME-PKCS1-v1_5 encoding

        $psLen = $this->k - $mLen - 3;
        $ps = '';
        while (strlen($ps) != $psLen) {
            $temp = Random::string($psLen - strlen($ps));
            $temp = str_replace("\x00", '', $temp);
            $ps .= $temp;
        }
        $type = 2;
        $em = chr(0) . chr($type) . $ps . chr(0) . $m;

        // RSA encryption
        $m = $this->os2ip($em);
        $c = $this->rsaep($m);
        $c = $this->i2osp($c, $this->k);

        // Output the ciphertext C

        return $c;
    }

    /**
     * RSAES-OAEP-ENCRYPT
     *
     * See {@link http://tools.ietf.org/html/rfc3447#section-7.1.1 RFC3447#section-7.1.1} and
     * {http://en.wikipedia.org/wiki/Optimal_Asymmetric_Encryption_Padding OAES}.
     *
     * @param string $m
     * @throws \LengthException if strlen($m) > $this->k - 2 * $this->hLen - 2
     * @return string
     */
    private function rsaes_oaep_encrypt($m)
    {
        $mLen = strlen($m);

        // Length checking

        // if $l is larger than two million terrabytes and you're using sha1, PKCS#1 suggests a "Label too long" error
        // be output.

        if ($mLen > $this->k - 2 * $this->hLen - 2) {
            throw new \LengthException('Message too long');
        }

        // EME-OAEP encoding

        $lHash = $this->hash->hash($this->label);
        $ps = str_repeat(chr(0), $this->k - $mLen - 2 * $this->hLen - 2);
        $db = $lHash . $ps . chr(1) . $m;
        $seed = Random::string($this->hLen);
        $dbMask = $this->mgf1($seed, $this->k - $this->hLen - 1);
        $maskedDB = $db ^ $dbMask;
        $seedMask = $this->mgf1($maskedDB, $this->hLen);
        $maskedSeed = $seed ^ $seedMask;
        $em = chr(0) . $maskedSeed . $maskedDB;

        // RSA encryption

        $m = $this->os2ip($em);
        $c = $this->rsaep($m);
        $c = $this->i2osp($c, $this->k);

        // Output the ciphertext C

        return $c;
    }

    /**
     * RSAEP
     *
     * See {@link http://tools.ietf.org/html/rfc3447#section-5.1.1 RFC3447#section-5.1.1}.
     *
     * @param BigInteger $m
     * @return bool|BigInteger
     */
    private function rsaep($m)
    {
        if ($m->compare(self::$zero) < 0 || $m->compare($this->modulus) > 0) {
            throw new \OutOfRangeException('Message representative out of range');
        }
        return $this->exponentiate($m);
    }

    /**
     * Raw Encryption / Decryption
     *
     * Doesn't use padding and is not recommended.
     *
     * @param string $m
     * @return bool|string
     * @throws \LengthException if strlen($m) > $this->k
     */
    private function raw_encrypt($m)
    {
        if (strlen($m) > $this->k) {
            throw new \LengthException('Message too long');
        }

        $temp = $this->os2ip($m);
        $temp = $this->rsaep($temp);
        return  $this->i2osp($temp, $this->k);
    }

    /**
     * Encryption
     *
     * Both self::PADDING_OAEP and self::PADDING_PKCS1 both place limits on how long $plaintext can be.
     * If $plaintext exceeds those limits it will be broken up so that it does and the resultant ciphertext's will
     * be concatenated together.
     *
     * @see self::decrypt()
     * @param string $plaintext
     * @return bool|string
     * @throws \LengthException if the RSA modulus is too short
     */
    public function encrypt($plaintext)
    {
        switch ($this->encryptionPadding) {
            case self::ENCRYPTION_NONE:
                return $this->raw_encrypt($plaintext);
            case self::ENCRYPTION_PKCS1:
                return $this->rsaes_pkcs1_v1_5_encrypt($plaintext);
            //case self::ENCRYPTION_OAEP:
            default:
                return $this->rsaes_oaep_encrypt($plaintext);
        }
    }

    /**
     * Returns the public key
     *
     * The public key is only returned under two circumstances - if the private key had the public key embedded within it
     * or if the public key was set via setPublicKey().  If the currently loaded key is supposed to be the public key this
     * function won't return it since this library, for the most part, doesn't distinguish between public and private keys.
     *
     * @param string $type
     * @param array $options optional
     * @return mixed
     */
    public function toString($type, array $options = [])
    {
        $type = self::validatePlugin('Keys', $type, 'savePublicKey');

        if ($type == PSS::class) {
            if ($this->signaturePadding == self::SIGNATURE_PSS) {
                $options += [
                    'hash' => $this->hash->getHash(),
                    'MGFHash' => $this->mgfHash->getHash(),
                    'saltLength' => $this->getSaltLength()
                ];
            } else {
                throw new UnsupportedFormatException('The PSS format can only be used when the signature method has been explicitly set to PSS');
            }
        }

        return $type::savePublicKey($this->modulus, $this->publicExponent, $options);
    }

    /**
     * Converts a public key to a private key
     *
     * @return RSA
     */
    public function asPrivateKey()
    {
        $new = new PrivateKey();
        $new->exponent = $this->exponent;
        $new->modulus = $this->modulus;
        $new->k = $this->k;
        $new->format = $this->format;
        return $new
            ->withHash($this->hash->getHash())
            ->withMGFHash($this->mgfHash->getHash())
            ->withSaltLength($this->sLen)
            ->withLabel($this->label)
            ->withPadding($this->signaturePadding | $this->encryptionPadding);
    }
}
<?php

/**
 * Random Number Generator
 *
 * PHP version 5
 *
 * Here's a short example of how to use this library:
 * <code>
 * <?php
 *    include 'vendor/autoload.php';
 *
 *    echo bin2hex(\phpseclib3\Crypt\Random::string(8));
 * ?>
 * </code>
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2007 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\Crypt;

/**
 * Pure-PHP Random Number Generator
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class Random
{
    /**
     * Generate a random string.
     *
     * Although microoptimizations are generally discouraged as they impair readability this function is ripe with
     * microoptimizations because this function has the potential of being called a huge number of times.
     * eg. for RSA key generation.
     *
     * @param int $length
     * @throws \RuntimeException if a symmetric cipher is needed but not loaded
     * @return string
     */
    public static function string($length)
    {
        if (!$length) {
            return '';
        }

        try {
            return random_bytes($length);
        } catch (\Exception $e) {
            // random_compat will throw an Exception, which in PHP 5 does not implement Throwable
        } catch (\Throwable $e) {
            // If a sufficient source of randomness is unavailable, random_bytes() will throw an
            // object that implements the Throwable interface (Exception, TypeError, Error).
            // We don't actually need to do anything here. The string() method should just continue
            // as normal. Note, however, that if we don't have a sufficient source of randomness for
            // random_bytes(), most of the other calls here will fail too, so we'll end up using
            // the PHP implementation.
        }
        // at this point we have no choice but to use a pure-PHP CSPRNG

        // cascade entropy across multiple PHP instances by fixing the session and collecting all
        // environmental variables, including the previous session data and the current session
        // data.
        //
        // mt_rand seeds itself by looking at the PID and the time, both of which are (relatively)
        // easy to guess at. linux uses mouse clicks, keyboard timings, etc, as entropy sources, but
        // PHP isn't low level to be able to use those as sources and on a web server there's not likely
        // going to be a ton of keyboard or mouse action. web servers do have one thing that we can use
        // however, a ton of people visiting the website. obviously you don't want to base your seeding
        // solely on parameters a potential attacker sends but (1) not everything in $_SERVER is controlled
        // by the user and (2) this isn't just looking at the data sent by the current user - it's based
        // on the data sent by all users. one user requests the page and a hash of their info is saved.
        // another user visits the page and the serialization of their data is utilized along with the
        // server environment stuff and a hash of the previous http request data (which itself utilizes
        // a hash of the session data before that). certainly an attacker should be assumed to have
        // full control over his own http requests. he, however, is not going to have control over
        // everyone's http requests.
        static $crypto = false, $v;
        if ($crypto === false) {
            // save old session data
            $old_session_id = session_id();
            $old_use_cookies = ini_get('session.use_cookies');
            $old_session_cache_limiter = session_cache_limiter();
            $_OLD_SESSION = isset($_SESSION) ? $_SESSION : false;
            if ($old_session_id != '') {
                session_write_close();
            }

            session_id(1);
            ini_set('session.use_cookies', 0);
            session_cache_limiter('');
            session_start();

            $v = (isset($_SERVER) ? self::safe_serialize($_SERVER) : '') .
                 (isset($_POST) ? self::safe_serialize($_POST) : '') .
                 (isset($_GET) ? self::safe_serialize($_GET) : '') .
                 (isset($_COOKIE) ? self::safe_serialize($_COOKIE) : '') .
                 // as of PHP 8.1 $GLOBALS can't be accessed by reference, which eliminates
                 // the need for phpseclib_safe_serialize. see https://wiki.php.net/rfc/restrict_globals_usage
                 // for more info
                 (version_compare(PHP_VERSION, '8.1.0', '>=') ? serialize($GLOBALS) : self::safe_serialize($GLOBALS)) .
                 self::safe_serialize($_SESSION) .
                 self::safe_serialize($_OLD_SESSION);
            $v = $seed = $_SESSION['seed'] = sha1($v, true);
            if (!isset($_SESSION['count'])) {
                $_SESSION['count'] = 0;
            }
            $_SESSION['count']++;

            session_write_close();

            // restore old session data
            if ($old_session_id != '') {
                session_id($old_session_id);
                session_start();
                ini_set('session.use_cookies', $old_use_cookies);
                session_cache_limiter($old_session_cache_limiter);
            } else {
                if ($_OLD_SESSION !== false) {
                    $_SESSION = $_OLD_SESSION;
                    unset($_OLD_SESSION);
                } else {
                    unset($_SESSION);
                }
            }

            // in SSH2 a shared secret and an exchange hash are generated through the key exchange process.
            // the IV client to server is the hash of that "nonce" with the letter A and for the encryption key it's the letter C.
            // if the hash doesn't produce enough a key or an IV that's long enough concat successive hashes of the
            // original hash and the current hash. we'll be emulating that. for more info see the following URL:
            //
            // http://tools.ietf.org/html/rfc4253#section-7.2
            //
            // see the is_string($crypto) part for an example of how to expand the keys
            $key = sha1($seed . 'A', true);
            $iv = sha1($seed . 'C', true);

            // ciphers are used as per the nist.gov link below. also, see this link:
            //
            // http://en.wikipedia.org/wiki/Cryptographically_secure_pseudorandom_number_generator#Designs_based_on_cryptographic_primitives
            switch (true) {
                case class_exists('\phpseclib3\Crypt\AES'):
                    $crypto = new AES('ctr');
                    break;
                case class_exists('\phpseclib3\Crypt\Twofish'):
                    $crypto = new Twofish('ctr');
                    break;
                case class_exists('\phpseclib3\Crypt\Blowfish'):
                    $crypto = new Blowfish('ctr');
                    break;
                case class_exists('\phpseclib3\Crypt\TripleDES'):
                    $crypto = new TripleDES('ctr');
                    break;
                case class_exists('\phpseclib3\Crypt\DES'):
                    $crypto = new DES('ctr');
                    break;
                case class_exists('\phpseclib3\Crypt\RC4'):
                    $crypto = new RC4();
                    break;
                default:
                    throw new \RuntimeException(__CLASS__ . ' requires at least one symmetric cipher be loaded');
            }

            $crypto->setKey(substr($key, 0, $crypto->getKeyLength() >> 3));
            $crypto->setIV(substr($iv, 0, $crypto->getBlockLength() >> 3));
            $crypto->enableContinuousBuffer();
        }

        //return $crypto->encrypt(str_repeat("\0", $length));

        // the following is based off of ANSI X9.31:
        //
        // http://csrc.nist.gov/groups/STM/cavp/documents/rng/931rngext.pdf
        //
        // OpenSSL uses that same standard for it's random numbers:
        //
        // http://www.opensource.apple.com/source/OpenSSL/OpenSSL-38/openssl/fips-1.0/rand/fips_rand.c
        // (do a search for "ANS X9.31 A.2.4")
        $result = '';
        while (strlen($result) < $length) {
            $i = $crypto->encrypt(microtime()); // strlen(microtime()) == 21
            $r = $crypto->encrypt($i ^ $v); // strlen($v) == 20
            $v = $crypto->encrypt($r ^ $i); // strlen($r) == 20
            $result .= $r;
        }

        return substr($result, 0, $length);
    }

    /**
     * Safely serialize variables
     *
     * If a class has a private __sleep() it'll emit a warning
     * @return mixed
     * @param mixed $arr
     */
    private static function safe_serialize(&$arr)
    {
        if (is_object($arr)) {
            return '';
        }
        if (!is_array($arr)) {
            return serialize($arr);
        }
        // prevent circular array recursion
        if (isset($arr['__phpseclib_marker'])) {
            return '';
        }
        $safearr = [];
        $arr['__phpseclib_marker'] = true;
        foreach (array_keys($arr) as $key) {
            // do not recurse on the '__phpseclib_marker' key itself, for smaller memory usage
            if ($key !== '__phpseclib_marker') {
                $safearr[$key] = self::safe_serialize($arr[$key]);
            }
        }
        unset($arr['__phpseclib_marker']);
        return serialize($safearr);
    }
}
<?php

/**
 * Pure-PHP implementation of Rijndael.
 *
 * Uses mcrypt, if available/possible, and an internal implementation, otherwise.
 *
 * PHP version 5
 *
 * If {@link self::setBlockLength() setBlockLength()} isn't called, it'll be assumed to be 128 bits.  If
 * {@link self::setKeyLength() setKeyLength()} isn't called, it'll be calculated from
 * {@link self::setKey() setKey()}.  ie. if the key is 128-bits, the key length will be 128-bits.  If it's
 * 136-bits it'll be null-padded to 192-bits and 192 bits will be the key length until
 * {@link self::setKey() setKey()} is called, again, at which point, it'll be recalculated.
 *
 * Not all Rijndael implementations may support 160-bits or 224-bits as the block length / key length.  mcrypt, for example,
 * does not.  AES, itself, only supports block lengths of 128 and key lengths of 128, 192, and 256.
 * {@link http://csrc.nist.gov/archive/aes/rijndael/Rijndael-ammended.pdf#page=10 Rijndael-ammended.pdf#page=10} defines the
 * algorithm for block lengths of 192 and 256 but not for block lengths / key lengths of 160 and 224.  Indeed, 160 and 224
 * are first defined as valid key / block lengths in
 * {@link http://csrc.nist.gov/archive/aes/rijndael/Rijndael-ammended.pdf#page=44 Rijndael-ammended.pdf#page=44}:
 * Extensions: Other block and Cipher Key lengths.
 * Note: Use of 160/224-bit Keys must be explicitly set by setKeyLength(160) respectively setKeyLength(224).
 *
 * {@internal The variable names are the same as those in
 * {@link http://www.csrc.nist.gov/publications/fips/fips197/fips-197.pdf#page=10 fips-197.pdf#page=10}.}}
 *
 * Here's a short example of how to use this library:
 * <code>
 * <?php
 *    include 'vendor/autoload.php';
 *
 *    $rijndael = new \phpseclib3\Crypt\Rijndael('ctr');
 *
 *    $rijndael->setKey('abcdefghijklmnop');
 *
 *    $size = 10 * 1024;
 *    $plaintext = '';
 *    for ($i = 0; $i < $size; $i++) {
 *        $plaintext.= 'a';
 *    }
 *
 *    echo $rijndael->decrypt($rijndael->encrypt($plaintext));
 * ?>
 * </code>
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2008 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\Crypt;

use phpseclib3\Common\Functions\Strings;
use phpseclib3\Crypt\Common\BlockCipher;
use phpseclib3\Exception\BadDecryptionException;
use phpseclib3\Exception\BadModeException;
use phpseclib3\Exception\InconsistentSetupException;
use phpseclib3\Exception\InsufficientSetupException;

/**
 * Pure-PHP implementation of Rijndael.
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
class Rijndael extends BlockCipher
{
    /**
     * The mcrypt specific name of the cipher
     *
     * Mcrypt is useable for 128/192/256-bit $block_size/$key_length. For 160/224 not.
     * \phpseclib3\Crypt\Rijndael determines automatically whether mcrypt is useable
     * or not for the current $block_size/$key_length.
     * In case of, $cipher_name_mcrypt will be set dynamically at run time accordingly.
     *
     * @see Common\SymmetricKey::cipher_name_mcrypt
     * @see Common\SymmetricKey::engine
     * @see self::isValidEngine()
     * @var string
     */
    protected $cipher_name_mcrypt = 'rijndael-128';

    /**
     * The Key Schedule
     *
     * @see self::setup()
     * @var array
     */
    private $w;

    /**
     * The Inverse Key Schedule
     *
     * @see self::setup()
     * @var array
     */
    private $dw;

    /**
     * The Block Length divided by 32
     *
     * {@internal The max value is 256 / 32 = 8, the min value is 128 / 32 = 4.  Exists in conjunction with $block_size
     *    because the encryption / decryption / key schedule creation requires this number and not $block_size.  We could
     *    derive this from $block_size or vice versa, but that'd mean we'd have to do multiple shift operations, so in lieu
     *    of that, we'll just precompute it once.}
     *
     * @see self::setBlockLength()
     * @var int
     */
    private $Nb = 4;

    /**
     * The Key Length (in bytes)
     *
     * {@internal The max value is 256 / 8 = 32, the min value is 128 / 8 = 16.  Exists in conjunction with $Nk
     *    because the encryption / decryption / key schedule creation requires this number and not $key_length.  We could
     *    derive this from $key_length or vice versa, but that'd mean we'd have to do multiple shift operations, so in lieu
     *    of that, we'll just precompute it once.}
     *
     * @see self::setKeyLength()
     * @var int
     */
    protected $key_length = 16;

    /**
     * The Key Length divided by 32
     *
     * @see self::setKeyLength()
     * @var int
     * @internal The max value is 256 / 32 = 8, the min value is 128 / 32 = 4
     */
    private $Nk = 4;

    /**
     * The Number of Rounds
     *
     * {@internal The max value is 14, the min value is 10.}
     *
     * @var int
     */
    private $Nr;

    /**
     * Shift offsets
     *
     * @var array
     */
    private $c;

    /**
     * Holds the last used key- and block_size information
     *
     * @var array
     */
    private $kl;

    /**
     * Default Constructor.
     *
     * @param string $mode
     * @throws \InvalidArgumentException if an invalid / unsupported mode is provided
     */
    public function __construct($mode)
    {
        parent::__construct($mode);

        if ($this->mode == self::MODE_STREAM) {
            throw new BadModeException('Block ciphers cannot be ran in stream mode');
        }
    }

    /**
     * Sets the key length.
     *
     * Valid key lengths are 128, 160, 192, 224, and 256.
     *
     * Note: phpseclib extends Rijndael (and AES) for using 160- and 224-bit keys but they are officially not defined
     *       and the most (if not all) implementations are not able using 160/224-bit keys but round/pad them up to
     *       192/256 bits as, for example, mcrypt will do.
     *
     *       That said, if you want be compatible with other Rijndael and AES implementations,
     *       you should not setKeyLength(160) or setKeyLength(224).
     *
     * Additional: In case of 160- and 224-bit keys, phpseclib will/can, for that reason, not use
     *             the mcrypt php extension, even if available.
     *             This results then in slower encryption.
     *
     * @throws \LengthException if the key length is invalid
     * @param int $length
     */
    public function setKeyLength($length)
    {
        switch ($length) {
            case 128:
            case 160:
            case 192:
            case 224:
            case 256:
                $this->key_length = $length >> 3;
                break;
            default:
                throw new \LengthException('Key size of ' . $length . ' bits is not supported by this algorithm. Only keys of sizes 128, 160, 192, 224 or 256 bits are supported');
        }

        parent::setKeyLength($length);
    }

    /**
     * Sets the key.
     *
     * Rijndael supports five different key lengths
     *
     * @see setKeyLength()
     * @param string $key
     * @throws \LengthException if the key length isn't supported
     */
    public function setKey($key)
    {
        switch (strlen($key)) {
            case 16:
            case 20:
            case 24:
            case 28:
            case 32:
                break;
            default:
                throw new \LengthException('Key of size ' . strlen($key) . ' not supported by this algorithm. Only keys of sizes 16, 20, 24, 28 or 32 are supported');
        }

        parent::setKey($key);
    }

    /**
     * Sets the block length
     *
     * Valid block lengths are 128, 160, 192, 224, and 256.
     *
     * @param int $length
     */
    public function setBlockLength($length)
    {
        switch ($length) {
            case 128:
            case 160:
            case 192:
            case 224:
            case 256:
                break;
            default:
                throw new \LengthException('Key size of ' . $length . ' bits is not supported by this algorithm. Only keys of sizes 128, 160, 192, 224 or 256 bits are supported');
        }

        $this->Nb = $length >> 5;
        $this->block_size = $length >> 3;
        $this->changed = $this->nonIVChanged = true;
        $this->setEngine();
    }

    /**
     * Test for engine validity
     *
     * This is mainly just a wrapper to set things up for \phpseclib3\Crypt\Common\SymmetricKey::isValidEngine()
     *
     * @see \phpseclib3\Crypt\Common\SymmetricKey::__construct()
     * @param int $engine
     * @return bool
     */
    protected function isValidEngineHelper($engine)
    {
        switch ($engine) {
            case self::ENGINE_LIBSODIUM:
                return function_exists('sodium_crypto_aead_aes256gcm_is_available') &&
                       sodium_crypto_aead_aes256gcm_is_available() &&
                       $this->mode == self::MODE_GCM &&
                       $this->key_length == 32 &&
                       $this->nonce && strlen($this->nonce) == 12 &&
                       $this->block_size == 16;
            case self::ENGINE_OPENSSL_GCM:
                if (!extension_loaded('openssl')) {
                    return false;
                }
                $methods = openssl_get_cipher_methods();
                return $this->mode == self::MODE_GCM &&
                       version_compare(PHP_VERSION, '7.1.0', '>=') &&
                       in_array('aes-' . $this->getKeyLength() . '-gcm', $methods) &&
                       $this->block_size == 16;
            case self::ENGINE_OPENSSL:
                if ($this->block_size != 16) {
                    return false;
                }
                $this->cipher_name_openssl_ecb = 'aes-' . ($this->key_length << 3) . '-ecb';
                $this->cipher_name_openssl = 'aes-' . ($this->key_length << 3) . '-' . $this->openssl_translate_mode();
                break;
            case self::ENGINE_MCRYPT:
                $this->cipher_name_mcrypt = 'rijndael-' . ($this->block_size << 3);
                if ($this->key_length % 8) { // is it a 160/224-bit key?
                    // mcrypt is not usable for them, only for 128/192/256-bit keys
                    return false;
                }
        }

        return parent::isValidEngineHelper($engine);
    }

    /**
     * Encrypts a block
     *
     * @param string $in
     * @return string
     */
    protected function encryptBlock($in)
    {
        static $tables;
        if (empty($tables)) {
            $tables = &$this->getTables();
        }
        $t0   = $tables[0];
        $t1   = $tables[1];
        $t2   = $tables[2];
        $t3   = $tables[3];
        $sbox = $tables[4];

        $state = [];
        $words = unpack('N*', $in);

        $c = $this->c;
        $w = $this->w;
        $Nb = $this->Nb;
        $Nr = $this->Nr;

        // addRoundKey
        $wc = $Nb - 1;
        foreach ($words as $word) {
            $state[] = $word ^ $w[++$wc];
        }

        // fips-197.pdf#page=19, "Figure 5. Pseudo Code for the Cipher", states that this loop has four components -
        // subBytes, shiftRows, mixColumns, and addRoundKey. fips-197.pdf#page=30, "Implementation Suggestions Regarding
        // Various Platforms" suggests that performs enhanced implementations are described in Rijndael-ammended.pdf.
        // Rijndael-ammended.pdf#page=20, "Implementation aspects / 32-bit processor", discusses such an optimization.
        // Unfortunately, the description given there is not quite correct.  Per aes.spec.v316.pdf#page=19 [1],
        // equation (7.4.7) is supposed to use addition instead of subtraction, so we'll do that here, as well.

        // [1] http://fp.gladman.plus.com/cryptography_technology/rijndael/aes.spec.v316.pdf
        $temp = [];
        for ($round = 1; $round < $Nr; ++$round) {
            $i = 0; // $c[0] == 0
            $j = $c[1];
            $k = $c[2];
            $l = $c[3];

            while ($i < $Nb) {
                $temp[$i] = $t0[$state[$i] >> 24 & 0x000000FF] ^
                            $t1[$state[$j] >> 16 & 0x000000FF] ^
                            $t2[$state[$k] >>  8 & 0x000000FF] ^
                            $t3[$state[$l]       & 0x000000FF] ^
                            $w[++$wc];
                ++$i;
                $j = ($j + 1) % $Nb;
                $k = ($k + 1) % $Nb;
                $l = ($l + 1) % $Nb;
            }
            $state = $temp;
        }

        // subWord
        for ($i = 0; $i < $Nb; ++$i) {
            $state[$i] =   $sbox[$state[$i]       & 0x000000FF]        |
                          ($sbox[$state[$i] >>  8 & 0x000000FF] <<  8) |
                          ($sbox[$state[$i] >> 16 & 0x000000FF] << 16) |
                          ($sbox[$state[$i] >> 24 & 0x000000FF] << 24);
        }

        // shiftRows + addRoundKey
        $i = 0; // $c[0] == 0
        $j = $c[1];
        $k = $c[2];
        $l = $c[3];
        while ($i < $Nb) {
            $temp[$i] = ($state[$i] & intval(0xFF000000)) ^
                        ($state[$j] & 0x00FF0000) ^
                        ($state[$k] & 0x0000FF00) ^
                        ($state[$l] & 0x000000FF) ^
                         $w[$i];
            ++$i;
            $j = ($j + 1) % $Nb;
            $k = ($k + 1) % $Nb;
            $l = ($l + 1) % $Nb;
        }

        return pack('N*', ...$temp);
    }

    /**
     * Decrypts a block
     *
     * @param string $in
     * @return string
     */
    protected function decryptBlock($in)
    {
        static $invtables;
        if (empty($invtables)) {
            $invtables = &$this->getInvTables();
        }
        $dt0   = $invtables[0];
        $dt1   = $invtables[1];
        $dt2   = $invtables[2];
        $dt3   = $invtables[3];
        $isbox = $invtables[4];

        $state = [];
        $words = unpack('N*', $in);

        $c  = $this->c;
        $dw = $this->dw;
        $Nb = $this->Nb;
        $Nr = $this->Nr;

        // addRoundKey
        $wc = $Nb - 1;
        foreach ($words as $word) {
            $state[] = $word ^ $dw[++$wc];
        }

        $temp = [];
        for ($round = $Nr - 1; $round > 0; --$round) {
            $i = 0; // $c[0] == 0
            $j = $Nb - $c[1];
            $k = $Nb - $c[2];
            $l = $Nb - $c[3];

            while ($i < $Nb) {
                $temp[$i] = $dt0[$state[$i] >> 24 & 0x000000FF] ^
                            $dt1[$state[$j] >> 16 & 0x000000FF] ^
                            $dt2[$state[$k] >>  8 & 0x000000FF] ^
                            $dt3[$state[$l]       & 0x000000FF] ^
                            $dw[++$wc];
                ++$i;
                $j = ($j + 1) % $Nb;
                $k = ($k + 1) % $Nb;
                $l = ($l + 1) % $Nb;
            }
            $state = $temp;
        }

        // invShiftRows + invSubWord + addRoundKey
        $i = 0; // $c[0] == 0
        $j = $Nb - $c[1];
        $k = $Nb - $c[2];
        $l = $Nb - $c[3];

        while ($i < $Nb) {
            $word = ($state[$i] & intval(0xFF000000)) |
                    ($state[$j] & 0x00FF0000) |
                    ($state[$k] & 0x0000FF00) |
                    ($state[$l] & 0x000000FF);

            $temp[$i] = $dw[$i] ^ ($isbox[$word       & 0x000000FF]        |
                                  ($isbox[$word >>  8 & 0x000000FF] <<  8) |
                                  ($isbox[$word >> 16 & 0x000000FF] << 16) |
                                  ($isbox[$word >> 24 & 0x000000FF] << 24));
            ++$i;
            $j = ($j + 1) % $Nb;
            $k = ($k + 1) % $Nb;
            $l = ($l + 1) % $Nb;
        }

        return pack('N*', ...$temp);
    }

    /**
     * Setup the self::ENGINE_INTERNAL $engine
     *
     * (re)init, if necessary, the internal cipher $engine and flush all $buffers
     * Used (only) if $engine == self::ENGINE_INTERNAL
     *
     * _setup() will be called each time if $changed === true
     * typically this happens when using one or more of following public methods:
     *
     * - setKey()
     *
     * - setIV()
     *
     * - disableContinuousBuffer()
     *
     * - First run of encrypt() / decrypt() with no init-settings
     *
     * {@internal setup() is always called before en/decryption.}
     *
     * {@internal Could, but not must, extend by the child Crypt_* class}
     *
     * @see self::setKey()
     * @see self::setIV()
     * @see self::disableContinuousBuffer()
     */
    protected function setup()
    {
        if (!$this->changed) {
            return;
        }

        parent::setup();

        if (is_string($this->iv) && strlen($this->iv) != $this->block_size) {
            throw new InconsistentSetupException('The IV length (' . strlen($this->iv) . ') does not match the block size (' . $this->block_size . ')');
        }
    }

    /**
     * Setup the key (expansion)
     *
     * @see \phpseclib3\Crypt\Common\SymmetricKey::setupKey()
     */
    protected function setupKey()
    {
        // Each number in $rcon is equal to the previous number multiplied by two in Rijndael's finite field.
        // See http://en.wikipedia.org/wiki/Finite_field_arithmetic#Multiplicative_inverse
        static $rcon;

        if (!isset($rcon)) {
            $rcon = [0,
                0x01000000, 0x02000000, 0x04000000, 0x08000000, 0x10000000,
                0x20000000, 0x40000000, 0x80000000, 0x1B000000, 0x36000000,
                0x6C000000, 0xD8000000, 0xAB000000, 0x4D000000, 0x9A000000,
                0x2F000000, 0x5E000000, 0xBC000000, 0x63000000, 0xC6000000,
                0x97000000, 0x35000000, 0x6A000000, 0xD4000000, 0xB3000000,
                0x7D000000, 0xFA000000, 0xEF000000, 0xC5000000, 0x91000000
            ];
            $rcon = array_map('intval', $rcon);
        }

        if (isset($this->kl['key']) && $this->key === $this->kl['key'] && $this->key_length === $this->kl['key_length'] && $this->block_size === $this->kl['block_size']) {
            // already expanded
            return;
        }
        $this->kl = ['key' => $this->key, 'key_length' => $this->key_length, 'block_size' => $this->block_size];

        $this->Nk = $this->key_length >> 2;
        // see Rijndael-ammended.pdf#page=44
        $this->Nr = max($this->Nk, $this->Nb) + 6;

        // shift offsets for Nb = 5, 7 are defined in Rijndael-ammended.pdf#page=44,
        //     "Table 8: Shift offsets in Shiftrow for the alternative block lengths"
        // shift offsets for Nb = 4, 6, 8 are defined in Rijndael-ammended.pdf#page=14,
        //     "Table 2: Shift offsets for different block lengths"
        switch ($this->Nb) {
            case 4:
            case 5:
            case 6:
                $this->c = [0, 1, 2, 3];
                break;
            case 7:
                $this->c = [0, 1, 2, 4];
                break;
            case 8:
                $this->c = [0, 1, 3, 4];
        }

        $w = array_values(unpack('N*words', $this->key));

        $length = $this->Nb * ($this->Nr + 1);
        for ($i = $this->Nk; $i < $length; $i++) {
            $temp = $w[$i - 1];
            if ($i % $this->Nk == 0) {
                // according to <http://php.net/language.types.integer>, "the size of an integer is platform-dependent".
                // on a 32-bit machine, it's 32-bits, and on a 64-bit machine, it's 64-bits. on a 32-bit machine,
                // 0xFFFFFFFF << 8 == 0xFFFFFF00, but on a 64-bit machine, it equals 0xFFFFFFFF00. as such, doing 'and'
                // with 0xFFFFFFFF (or 0xFFFFFF00) on a 32-bit machine is unnecessary, but on a 64-bit machine, it is.
                $temp = (($temp << 8) & intval(0xFFFFFF00)) | (($temp >> 24) & 0x000000FF); // rotWord
                $temp = $this->subWord($temp) ^ $rcon[$i / $this->Nk];
            } elseif ($this->Nk > 6 && $i % $this->Nk == 4) {
                $temp = $this->subWord($temp);
            }
            $w[$i] = $w[$i - $this->Nk] ^ $temp;
        }

        // convert the key schedule from a vector of $Nb * ($Nr + 1) length to a matrix with $Nr + 1 rows and $Nb columns
        // and generate the inverse key schedule.  more specifically,
        // according to <http://csrc.nist.gov/archive/aes/rijndael/Rijndael-ammended.pdf#page=23> (section 5.3.3),
        // "The key expansion for the Inverse Cipher is defined as follows:
        //        1. Apply the Key Expansion.
        //        2. Apply InvMixColumn to all Round Keys except the first and the last one."
        // also, see fips-197.pdf#page=27, "5.3.5 Equivalent Inverse Cipher"
        list($dt0, $dt1, $dt2, $dt3) = $this->getInvTables();
        $temp = $this->w = $this->dw = [];
        for ($i = $row = $col = 0; $i < $length; $i++, $col++) {
            if ($col == $this->Nb) {
                if ($row == 0) {
                    $this->dw[0] = $this->w[0];
                } else {
                    // subWord + invMixColumn + invSubWord = invMixColumn
                    $j = 0;
                    while ($j < $this->Nb) {
                        $dw = $this->subWord($this->w[$row][$j]);
                        $temp[$j] = $dt0[$dw >> 24 & 0x000000FF] ^
                                    $dt1[$dw >> 16 & 0x000000FF] ^
                                    $dt2[$dw >>  8 & 0x000000FF] ^
                                    $dt3[$dw       & 0x000000FF];
                        $j++;
                    }
                    $this->dw[$row] = $temp;
                }

                $col = 0;
                $row++;
            }
            $this->w[$row][$col] = $w[$i];
        }

        $this->dw[$row] = $this->w[$row];

        // Converting to 1-dim key arrays (both ascending)
        $this->dw = array_reverse($this->dw);
        $w  = array_pop($this->w);
        $dw = array_pop($this->dw);
        foreach ($this->w as $r => $wr) {
            foreach ($wr as $c => $wc) {
                $w[]  = $wc;
                $dw[] = $this->dw[$r][$c];
            }
        }
        $this->w  = $w;
        $this->dw = $dw;
    }

    /**
     * Performs S-Box substitutions
     *
     * @return array
     * @param int $word
     */
    private function subWord($word)
    {
        static $sbox;
        if (empty($sbox)) {
            list(, , , , $sbox) = self::getTables();
        }

        return  $sbox[$word       & 0x000000FF]        |
               ($sbox[$word >>  8 & 0x000000FF] <<  8) |
               ($sbox[$word >> 16 & 0x000000FF] << 16) |
               ($sbox[$word >> 24 & 0x000000FF] << 24);
    }

    /**
     * Provides the mixColumns and sboxes tables
     *
     * @see self::encryptBlock()
     * @see self::setupInlineCrypt()
     * @see self::subWord()
     * @return array &$tables
     */
    protected function &getTables()
    {
        static $tables;
        if (empty($tables)) {
            // according to <http://csrc.nist.gov/archive/aes/rijndael/Rijndael-ammended.pdf#page=19> (section 5.2.1),
            // precomputed tables can be used in the mixColumns phase. in that example, they're assigned t0...t3, so
            // those are the names we'll use.
            $t3 = array_map('intval', [
                // with array_map('intval', ...) we ensure we have only int's and not
                // some slower floats converted by php automatically on high values
                0x6363A5C6, 0x7C7C84F8, 0x777799EE, 0x7B7B8DF6, 0xF2F20DFF, 0x6B6BBDD6, 0x6F6FB1DE, 0xC5C55491,
                0x30305060, 0x01010302, 0x6767A9CE, 0x2B2B7D56, 0xFEFE19E7, 0xD7D762B5, 0xABABE64D, 0x76769AEC,
                0xCACA458F, 0x82829D1F, 0xC9C94089, 0x7D7D87FA, 0xFAFA15EF, 0x5959EBB2, 0x4747C98E, 0xF0F00BFB,
                0xADADEC41, 0xD4D467B3, 0xA2A2FD5F, 0xAFAFEA45, 0x9C9CBF23, 0xA4A4F753, 0x727296E4, 0xC0C05B9B,
                0xB7B7C275, 0xFDFD1CE1, 0x9393AE3D, 0x26266A4C, 0x36365A6C, 0x3F3F417E, 0xF7F702F5, 0xCCCC4F83,
                0x34345C68, 0xA5A5F451, 0xE5E534D1, 0xF1F108F9, 0x717193E2, 0xD8D873AB, 0x31315362, 0x15153F2A,
                0x04040C08, 0xC7C75295, 0x23236546, 0xC3C35E9D, 0x18182830, 0x9696A137, 0x05050F0A, 0x9A9AB52F,
                0x0707090E, 0x12123624, 0x80809B1B, 0xE2E23DDF, 0xEBEB26CD, 0x2727694E, 0xB2B2CD7F, 0x75759FEA,
                0x09091B12, 0x83839E1D, 0x2C2C7458, 0x1A1A2E34, 0x1B1B2D36, 0x6E6EB2DC, 0x5A5AEEB4, 0xA0A0FB5B,
                0x5252F6A4, 0x3B3B4D76, 0xD6D661B7, 0xB3B3CE7D, 0x29297B52, 0xE3E33EDD, 0x2F2F715E, 0x84849713,
                0x5353F5A6, 0xD1D168B9, 0x00000000, 0xEDED2CC1, 0x20206040, 0xFCFC1FE3, 0xB1B1C879, 0x5B5BEDB6,
                0x6A6ABED4, 0xCBCB468D, 0xBEBED967, 0x39394B72, 0x4A4ADE94, 0x4C4CD498, 0x5858E8B0, 0xCFCF4A85,
                0xD0D06BBB, 0xEFEF2AC5, 0xAAAAE54F, 0xFBFB16ED, 0x4343C586, 0x4D4DD79A, 0x33335566, 0x85859411,
                0x4545CF8A, 0xF9F910E9, 0x02020604, 0x7F7F81FE, 0x5050F0A0, 0x3C3C4478, 0x9F9FBA25, 0xA8A8E34B,
                0x5151F3A2, 0xA3A3FE5D, 0x4040C080, 0x8F8F8A05, 0x9292AD3F, 0x9D9DBC21, 0x38384870, 0xF5F504F1,
                0xBCBCDF63, 0xB6B6C177, 0xDADA75AF, 0x21216342, 0x10103020, 0xFFFF1AE5, 0xF3F30EFD, 0xD2D26DBF,
                0xCDCD4C81, 0x0C0C1418, 0x13133526, 0xECEC2FC3, 0x5F5FE1BE, 0x9797A235, 0x4444CC88, 0x1717392E,
                0xC4C45793, 0xA7A7F255, 0x7E7E82FC, 0x3D3D477A, 0x6464ACC8, 0x5D5DE7BA, 0x19192B32, 0x737395E6,
                0x6060A0C0, 0x81819819, 0x4F4FD19E, 0xDCDC7FA3, 0x22226644, 0x2A2A7E54, 0x9090AB3B, 0x8888830B,
                0x4646CA8C, 0xEEEE29C7, 0xB8B8D36B, 0x14143C28, 0xDEDE79A7, 0x5E5EE2BC, 0x0B0B1D16, 0xDBDB76AD,
                0xE0E03BDB, 0x32325664, 0x3A3A4E74, 0x0A0A1E14, 0x4949DB92, 0x06060A0C, 0x24246C48, 0x5C5CE4B8,
                0xC2C25D9F, 0xD3D36EBD, 0xACACEF43, 0x6262A6C4, 0x9191A839, 0x9595A431, 0xE4E437D3, 0x79798BF2,
                0xE7E732D5, 0xC8C8438B, 0x3737596E, 0x6D6DB7DA, 0x8D8D8C01, 0xD5D564B1, 0x4E4ED29C, 0xA9A9E049,
                0x6C6CB4D8, 0x5656FAAC, 0xF4F407F3, 0xEAEA25CF, 0x6565AFCA, 0x7A7A8EF4, 0xAEAEE947, 0x08081810,
                0xBABAD56F, 0x787888F0, 0x25256F4A, 0x2E2E725C, 0x1C1C2438, 0xA6A6F157, 0xB4B4C773, 0xC6C65197,
                0xE8E823CB, 0xDDDD7CA1, 0x74749CE8, 0x1F1F213E, 0x4B4BDD96, 0xBDBDDC61, 0x8B8B860D, 0x8A8A850F,
                0x707090E0, 0x3E3E427C, 0xB5B5C471, 0x6666AACC, 0x4848D890, 0x03030506, 0xF6F601F7, 0x0E0E121C,
                0x6161A3C2, 0x35355F6A, 0x5757F9AE, 0xB9B9D069, 0x86869117, 0xC1C15899, 0x1D1D273A, 0x9E9EB927,
                0xE1E138D9, 0xF8F813EB, 0x9898B32B, 0x11113322, 0x6969BBD2, 0xD9D970A9, 0x8E8E8907, 0x9494A733,
                0x9B9BB62D, 0x1E1E223C, 0x87879215, 0xE9E920C9, 0xCECE4987, 0x5555FFAA, 0x28287850, 0xDFDF7AA5,
                0x8C8C8F03, 0xA1A1F859, 0x89898009, 0x0D0D171A, 0xBFBFDA65, 0xE6E631D7, 0x4242C684, 0x6868B8D0,
                0x4141C382, 0x9999B029, 0x2D2D775A, 0x0F0F111E, 0xB0B0CB7B, 0x5454FCA8, 0xBBBBD66D, 0x16163A2C
            ]);

            foreach ($t3 as $t3i) {
                $t0[] = (($t3i << 24) & intval(0xFF000000)) | (($t3i >>  8) & 0x00FFFFFF);
                $t1[] = (($t3i << 16) & intval(0xFFFF0000)) | (($t3i >> 16) & 0x0000FFFF);
                $t2[] = (($t3i <<  8) & intval(0xFFFFFF00)) | (($t3i >> 24) & 0x000000FF);
            }

            $tables = [
                // The Precomputed mixColumns tables t0 - t3
                $t0,
                $t1,
                $t2,
                $t3,
                // The SubByte S-Box
                [
                    0x63, 0x7C, 0x77, 0x7B, 0xF2, 0x6B, 0x6F, 0xC5, 0x30, 0x01, 0x67, 0x2B, 0xFE, 0xD7, 0xAB, 0x76,
                    0xCA, 0x82, 0xC9, 0x7D, 0xFA, 0x59, 0x47, 0xF0, 0xAD, 0xD4, 0xA2, 0xAF, 0x9C, 0xA4, 0x72, 0xC0,
                    0xB7, 0xFD, 0x93, 0x26, 0x36, 0x3F, 0xF7, 0xCC, 0x34, 0xA5, 0xE5, 0xF1, 0x71, 0xD8, 0x31, 0x15,
                    0x04, 0xC7, 0x23, 0xC3, 0x18, 0x96, 0x05, 0x9A, 0x07, 0x12, 0x80, 0xE2, 0xEB, 0x27, 0xB2, 0x75,
                    0x09, 0x83, 0x2C, 0x1A, 0x1B, 0x6E, 0x5A, 0xA0, 0x52, 0x3B, 0xD6, 0xB3, 0x29, 0xE3, 0x2F, 0x84,
                    0x53, 0xD1, 0x00, 0xED, 0x20, 0xFC, 0xB1, 0x5B, 0x6A, 0xCB, 0xBE, 0x39, 0x4A, 0x4C, 0x58, 0xCF,
                    0xD0, 0xEF, 0xAA, 0xFB, 0x43, 0x4D, 0x33, 0x85, 0x45, 0xF9, 0x02, 0x7F, 0x50, 0x3C, 0x9F, 0xA8,
                    0x51, 0xA3, 0x40, 0x8F, 0x92, 0x9D, 0x38, 0xF5, 0xBC, 0xB6, 0xDA, 0x21, 0x10, 0xFF, 0xF3, 0xD2,
                    0xCD, 0x0C, 0x13, 0xEC, 0x5F, 0x97, 0x44, 0x17, 0xC4, 0xA7, 0x7E, 0x3D, 0x64, 0x5D, 0x19, 0x73,
                    0x60, 0x81, 0x4F, 0xDC, 0x22, 0x2A, 0x90, 0x88, 0x46, 0xEE, 0xB8, 0x14, 0xDE, 0x5E, 0x0B, 0xDB,
                    0xE0, 0x32, 0x3A, 0x0A, 0x49, 0x06, 0x24, 0x5C, 0xC2, 0xD3, 0xAC, 0x62, 0x91, 0x95, 0xE4, 0x79,
                    0xE7, 0xC8, 0x37, 0x6D, 0x8D, 0xD5, 0x4E, 0xA9, 0x6C, 0x56, 0xF4, 0xEA, 0x65, 0x7A, 0xAE, 0x08,
                    0xBA, 0x78, 0x25, 0x2E, 0x1C, 0xA6, 0xB4, 0xC6, 0xE8, 0xDD, 0x74, 0x1F, 0x4B, 0xBD, 0x8B, 0x8A,
                    0x70, 0x3E, 0xB5, 0x66, 0x48, 0x03, 0xF6, 0x0E, 0x61, 0x35, 0x57, 0xB9, 0x86, 0xC1, 0x1D, 0x9E,
                    0xE1, 0xF8, 0x98, 0x11, 0x69, 0xD9, 0x8E, 0x94, 0x9B, 0x1E, 0x87, 0xE9, 0xCE, 0x55, 0x28, 0xDF,
                    0x8C, 0xA1, 0x89, 0x0D, 0xBF, 0xE6, 0x42, 0x68, 0x41, 0x99, 0x2D, 0x0F, 0xB0, 0x54, 0xBB, 0x16
                ]
            ];
        }
        return $tables;
    }

    /**
     * Provides the inverse mixColumns and inverse sboxes tables
     *
     * @see self::decryptBlock()
     * @see self::setupInlineCrypt()
     * @see self::setupKey()
     * @return array &$tables
     */
    protected function &getInvTables()
    {
        static $tables;
        if (empty($tables)) {
            $dt3 = array_map('intval', [
                0xF4A75051, 0x4165537E, 0x17A4C31A, 0x275E963A, 0xAB6BCB3B, 0x9D45F11F, 0xFA58ABAC, 0xE303934B,
                0x30FA5520, 0x766DF6AD, 0xCC769188, 0x024C25F5, 0xE5D7FC4F, 0x2ACBD7C5, 0x35448026, 0x62A38FB5,
                0xB15A49DE, 0xBA1B6725, 0xEA0E9845, 0xFEC0E15D, 0x2F7502C3, 0x4CF01281, 0x4697A38D, 0xD3F9C66B,
                0x8F5FE703, 0x929C9515, 0x6D7AEBBF, 0x5259DA95, 0xBE832DD4, 0x7421D358, 0xE0692949, 0xC9C8448E,
                0xC2896A75, 0x8E7978F4, 0x583E6B99, 0xB971DD27, 0xE14FB6BE, 0x88AD17F0, 0x20AC66C9, 0xCE3AB47D,
                0xDF4A1863, 0x1A3182E5, 0x51336097, 0x537F4562, 0x6477E0B1, 0x6BAE84BB, 0x81A01CFE, 0x082B94F9,
                0x48685870, 0x45FD198F, 0xDE6C8794, 0x7BF8B752, 0x73D323AB, 0x4B02E272, 0x1F8F57E3, 0x55AB2A66,
                0xEB2807B2, 0xB5C2032F, 0xC57B9A86, 0x3708A5D3, 0x2887F230, 0xBFA5B223, 0x036ABA02, 0x16825CED,
                0xCF1C2B8A, 0x79B492A7, 0x07F2F0F3, 0x69E2A14E, 0xDAF4CD65, 0x05BED506, 0x34621FD1, 0xA6FE8AC4,
                0x2E539D34, 0xF355A0A2, 0x8AE13205, 0xF6EB75A4, 0x83EC390B, 0x60EFAA40, 0x719F065E, 0x6E1051BD,
                0x218AF93E, 0xDD063D96, 0x3E05AEDD, 0xE6BD464D, 0x548DB591, 0xC45D0571, 0x06D46F04, 0x5015FF60,
                0x98FB2419, 0xBDE997D6, 0x4043CC89, 0xD99E7767, 0xE842BDB0, 0x898B8807, 0x195B38E7, 0xC8EEDB79,
                0x7C0A47A1, 0x420FE97C, 0x841EC9F8, 0x00000000, 0x80868309, 0x2BED4832, 0x1170AC1E, 0x5A724E6C,
                0x0EFFFBFD, 0x8538560F, 0xAED51E3D, 0x2D392736, 0x0FD9640A, 0x5CA62168, 0x5B54D19B, 0x362E3A24,
                0x0A67B10C, 0x57E70F93, 0xEE96D2B4, 0x9B919E1B, 0xC0C54F80, 0xDC20A261, 0x774B695A, 0x121A161C,
                0x93BA0AE2, 0xA02AE5C0, 0x22E0433C, 0x1B171D12, 0x090D0B0E, 0x8BC7ADF2, 0xB6A8B92D, 0x1EA9C814,
                0xF1198557, 0x75074CAF, 0x99DDBBEE, 0x7F60FDA3, 0x01269FF7, 0x72F5BC5C, 0x663BC544, 0xFB7E345B,
                0x4329768B, 0x23C6DCCB, 0xEDFC68B6, 0xE4F163B8, 0x31DCCAD7, 0x63851042, 0x97224013, 0xC6112084,
                0x4A247D85, 0xBB3DF8D2, 0xF93211AE, 0x29A16DC7, 0x9E2F4B1D, 0xB230F3DC, 0x8652EC0D, 0xC1E3D077,
                0xB3166C2B, 0x70B999A9, 0x9448FA11, 0xE9642247, 0xFC8CC4A8, 0xF03F1AA0, 0x7D2CD856, 0x3390EF22,
                0x494EC787, 0x38D1C1D9, 0xCAA2FE8C, 0xD40B3698, 0xF581CFA6, 0x7ADE28A5, 0xB78E26DA, 0xADBFA43F,
                0x3A9DE42C, 0x78920D50, 0x5FCC9B6A, 0x7E466254, 0x8D13C2F6, 0xD8B8E890, 0x39F75E2E, 0xC3AFF582,
                0x5D80BE9F, 0xD0937C69, 0xD52DA96F, 0x2512B3CF, 0xAC993BC8, 0x187DA710, 0x9C636EE8, 0x3BBB7BDB,
                0x267809CD, 0x5918F46E, 0x9AB701EC, 0x4F9AA883, 0x956E65E6, 0xFFE67EAA, 0xBCCF0821, 0x15E8E6EF,
                0xE79BD9BA, 0x6F36CE4A, 0x9F09D4EA, 0xB07CD629, 0xA4B2AF31, 0x3F23312A, 0xA59430C6, 0xA266C035,
                0x4EBC3774, 0x82CAA6FC, 0x90D0B0E0, 0xA7D81533, 0x04984AF1, 0xECDAF741, 0xCD500E7F, 0x91F62F17,
                0x4DD68D76, 0xEFB04D43, 0xAA4D54CC, 0x9604DFE4, 0xD1B5E39E, 0x6A881B4C, 0x2C1FB8C1, 0x65517F46,
                0x5EEA049D, 0x8C355D01, 0x877473FA, 0x0B412EFB, 0x671D5AB3, 0xDBD25292, 0x105633E9, 0xD647136D,
                0xD7618C9A, 0xA10C7A37, 0xF8148E59, 0x133C89EB, 0xA927EECE, 0x61C935B7, 0x1CE5EDE1, 0x47B13C7A,
                0xD2DF599C, 0xF2733F55, 0x14CE7918, 0xC737BF73, 0xF7CDEA53, 0xFDAA5B5F, 0x3D6F14DF, 0x44DB8678,
                0xAFF381CA, 0x68C43EB9, 0x24342C38, 0xA3405FC2, 0x1DC37216, 0xE2250CBC, 0x3C498B28, 0x0D9541FF,
                0xA8017139, 0x0CB3DE08, 0xB4E49CD8, 0x56C19064, 0xCB84617B, 0x32B670D5, 0x6C5C7448, 0xB85742D0
            ]);

            foreach ($dt3 as $dt3i) {
                $dt0[] = (($dt3i << 24) & intval(0xFF000000)) | (($dt3i >>  8) & 0x00FFFFFF);
                $dt1[] = (($dt3i << 16) & intval(0xFFFF0000)) | (($dt3i >> 16) & 0x0000FFFF);
                $dt2[] = (($dt3i <<  8) & intval(0xFFFFFF00)) | (($dt3i >> 24) & 0x000000FF);
            };

            $tables = [
                // The Precomputed inverse mixColumns tables dt0 - dt3
                $dt0,
                $dt1,
                $dt2,
                $dt3,
                // The inverse SubByte S-Box
                [
                    0x52, 0x09, 0x6A, 0xD5, 0x30, 0x36, 0xA5, 0x38, 0xBF, 0x40, 0xA3, 0x9E, 0x81, 0xF3, 0xD7, 0xFB,
                    0x7C, 0xE3, 0x39, 0x82, 0x9B, 0x2F, 0xFF, 0x87, 0x34, 0x8E, 0x43, 0x44, 0xC4, 0xDE, 0xE9, 0xCB,
                    0x54, 0x7B, 0x94, 0x32, 0xA6, 0xC2, 0x23, 0x3D, 0xEE, 0x4C, 0x95, 0x0B, 0x42, 0xFA, 0xC3, 0x4E,
                    0x08, 0x2E, 0xA1, 0x66, 0x28, 0xD9, 0x24, 0xB2, 0x76, 0x5B, 0xA2, 0x49, 0x6D, 0x8B, 0xD1, 0x25,
                    0x72, 0xF8, 0xF6, 0x64, 0x86, 0x68, 0x98, 0x16, 0xD4, 0xA4, 0x5C, 0xCC, 0x5D, 0x65, 0xB6, 0x92,
                    0x6C, 0x70, 0x48, 0x50, 0xFD, 0xED, 0xB9, 0xDA, 0x5E, 0x15, 0x46, 0x57, 0xA7, 0x8D, 0x9D, 0x84,
                    0x90, 0xD8, 0xAB, 0x00, 0x8C, 0xBC, 0xD3, 0x0A, 0xF7, 0xE4, 0x58, 0x05, 0xB8, 0xB3, 0x45, 0x06,
                    0xD0, 0x2C, 0x1E, 0x8F, 0xCA, 0x3F, 0x0F, 0x02, 0xC1, 0xAF, 0xBD, 0x03, 0x01, 0x13, 0x8A, 0x6B,
                    0x3A, 0x91, 0x11, 0x41, 0x4F, 0x67, 0xDC, 0xEA, 0x97, 0xF2, 0xCF, 0xCE, 0xF0, 0xB4, 0xE6, 0x73,
                    0x96, 0xAC, 0x74, 0x22, 0xE7, 0xAD, 0x35, 0x85, 0xE2, 0xF9, 0x37, 0xE8, 0x1C, 0x75, 0xDF, 0x6E,
                    0x47, 0xF1, 0x1A, 0x71, 0x1D, 0x29, 0xC5, 0x89, 0x6F, 0xB7, 0x62, 0x0E, 0xAA, 0x18, 0xBE, 0x1B,
                    0xFC, 0x56, 0x3E, 0x4B, 0xC6, 0xD2, 0x79, 0x20, 0x9A, 0xDB, 0xC0, 0xFE, 0x78, 0xCD, 0x5A, 0xF4,
                    0x1F, 0xDD, 0xA8, 0x33, 0x88, 0x07, 0xC7, 0x31, 0xB1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xEC, 0x5F,
                    0x60, 0x51, 0x7F, 0xA9, 0x19, 0xB5, 0x4A, 0x0D, 0x2D, 0xE5, 0x7A, 0x9F, 0x93, 0xC9, 0x9C, 0xEF,
                    0xA0, 0xE0, 0x3B, 0x4D, 0xAE, 0x2A, 0xF5, 0xB0, 0xC8, 0xEB, 0xBB, 0x3C, 0x83, 0x53, 0x99, 0x61,
                    0x17, 0x2B, 0x04, 0x7E, 0xBA, 0x77, 0xD6, 0x26, 0xE1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0C, 0x7D
                ]
            ];
        }
        return $tables;
    }

    /**
     * Setup the performance-optimized function for de/encrypt()
     *
     * @see \phpseclib3\Crypt\Common\SymmetricKey::setupInlineCrypt()
     */
    protected function setupInlineCrypt()
    {
        $w  = $this->w;
        $dw = $this->dw;
        $init_encrypt = '';
        $init_decrypt = '';

        $Nr = $this->Nr;
        $Nb = $this->Nb;
        $c  = $this->c;

        // Generating encrypt code:
        $init_encrypt .= '
            if (empty($tables)) {
                $tables = &$this->getTables();
            }
            $t0   = $tables[0];
            $t1   = $tables[1];
            $t2   = $tables[2];
            $t3   = $tables[3];
            $sbox = $tables[4];
        ';

        $s  = 'e';
        $e  = 's';
        $wc = $Nb - 1;

        // Preround: addRoundKey
        $encrypt_block = '$in = unpack("N*", $in);' . "\n";
        for ($i = 0; $i < $Nb; ++$i) {
            $encrypt_block .= '$s' . $i . ' = $in[' . ($i + 1) . '] ^ ' . $w[++$wc] . ";\n";
        }

        // Mainrounds: shiftRows + subWord + mixColumns + addRoundKey
        for ($round = 1; $round < $Nr; ++$round) {
            list($s, $e) = [$e, $s];
            for ($i = 0; $i < $Nb; ++$i) {
                $encrypt_block .=
                    '$' . $e . $i . ' =
                    $t0[($' . $s . $i                  . ' >> 24) & 0xff] ^
                    $t1[($' . $s . (($i + $c[1]) % $Nb) . ' >> 16) & 0xff] ^
                    $t2[($' . $s . (($i + $c[2]) % $Nb) . ' >>  8) & 0xff] ^
                    $t3[ $' . $s . (($i + $c[3]) % $Nb) . '        & 0xff] ^
                    ' . $w[++$wc] . ";\n";
            }
        }

        // Finalround: subWord + shiftRows + addRoundKey
        for ($i = 0; $i < $Nb; ++$i) {
            $encrypt_block .=
                '$' . $e . $i . ' =
                 $sbox[ $' . $e . $i . '        & 0xff]        |
                ($sbox[($' . $e . $i . ' >>  8) & 0xff] <<  8) |
                ($sbox[($' . $e . $i . ' >> 16) & 0xff] << 16) |
                ($sbox[($' . $e . $i . ' >> 24) & 0xff] << 24);' . "\n";
        }
        $encrypt_block .= '$in = pack("N*"' . "\n";
        for ($i = 0; $i < $Nb; ++$i) {
            $encrypt_block .= ',
                ($' . $e . $i                  . ' & ' . ((int)0xFF000000) . ') ^
                ($' . $e . (($i + $c[1]) % $Nb) . ' &         0x00FF0000   ) ^
                ($' . $e . (($i + $c[2]) % $Nb) . ' &         0x0000FF00   ) ^
                ($' . $e . (($i + $c[3]) % $Nb) . ' &         0x000000FF   ) ^
                ' . $w[$i] . "\n";
        }
        $encrypt_block .= ');';

        // Generating decrypt code:
        $init_decrypt .= '
            if (empty($invtables)) {
                $invtables = &$this->getInvTables();
            }
            $dt0   = $invtables[0];
            $dt1   = $invtables[1];
            $dt2   = $invtables[2];
            $dt3   = $invtables[3];
            $isbox = $invtables[4];
        ';

        $s  = 'e';
        $e  = 's';
        $wc = $Nb - 1;

        // Preround: addRoundKey
        $decrypt_block = '$in = unpack("N*", $in);' . "\n";
        for ($i = 0; $i < $Nb; ++$i) {
            $decrypt_block .= '$s' . $i . ' = $in[' . ($i + 1) . '] ^ ' . $dw[++$wc] . ';' . "\n";
        }

        // Mainrounds: shiftRows + subWord + mixColumns + addRoundKey
        for ($round = 1; $round < $Nr; ++$round) {
            list($s, $e) = [$e, $s];
            for ($i = 0; $i < $Nb; ++$i) {
                $decrypt_block .=
                    '$' . $e . $i . ' =
                    $dt0[($' . $s . $i                        . ' >> 24) & 0xff] ^
                    $dt1[($' . $s . (($Nb + $i - $c[1]) % $Nb) . ' >> 16) & 0xff] ^
                    $dt2[($' . $s . (($Nb + $i - $c[2]) % $Nb) . ' >>  8) & 0xff] ^
                    $dt3[ $' . $s . (($Nb + $i - $c[3]) % $Nb) . '        & 0xff] ^
                    ' . $dw[++$wc] . ";\n";
            }
        }

        // Finalround: subWord + shiftRows + addRoundKey
        for ($i = 0; $i < $Nb; ++$i) {
            $decrypt_block .=
                '$' . $e . $i . ' =
                 $isbox[ $' . $e . $i . '        & 0xff]        |
                ($isbox[($' . $e . $i . ' >>  8) & 0xff] <<  8) |
                ($isbox[($' . $e . $i . ' >> 16) & 0xff] << 16) |
                ($isbox[($' . $e . $i . ' >> 24) & 0xff] << 24);' . "\n";
        }
        $decrypt_block .= '$in = pack("N*"' . "\n";
        for ($i = 0; $i < $Nb; ++$i) {
            $decrypt_block .= ',
                ($' . $e . $i .                        ' & ' . ((int)0xFF000000) . ') ^
                ($' . $e . (($Nb + $i - $c[1]) % $Nb) . ' &         0x00FF0000   ) ^
                ($' . $e . (($Nb + $i - $c[2]) % $Nb) . ' &         0x0000FF00   ) ^
                ($' . $e . (($Nb + $i - $c[3]) % $Nb) . ' &         0x000000FF   ) ^
                ' . $dw[$i] . "\n";
        }
        $decrypt_block .= ');';

        $this->inline_crypt = $this->createInlineCryptFunction(
            [
               'init_crypt'    => 'static $tables; static $invtables;',
               'init_encrypt'  => $init_encrypt,
               'init_decrypt'  => $init_decrypt,
               'encrypt_block' => $encrypt_block,
               'decrypt_block' => $decrypt_block
            ]
        );
    }

    /**
     * Encrypts a message.
     *
     * @see self::decrypt()
     * @see parent::encrypt()
     * @param string $plaintext
     * @return string
     */
    public function encrypt($plaintext)
    {
        $this->setup();

        switch ($this->engine) {
            case self::ENGINE_LIBSODIUM:
                $this->newtag = sodium_crypto_aead_aes256gcm_encrypt($plaintext, $this->aad, $this->nonce, $this->key);
                return Strings::shift($this->newtag, strlen($plaintext));
            case self::ENGINE_OPENSSL_GCM:
                return openssl_encrypt(
                    $plaintext,
                    'aes-' . $this->getKeyLength() . '-gcm',
                    $this->key,
                    OPENSSL_RAW_DATA,
                    $this->nonce,
                    $this->newtag,
                    $this->aad
                );
        }

        return parent::encrypt($plaintext);
    }

    /**
     * Decrypts a message.
     *
     * @see self::encrypt()
     * @see parent::decrypt()
     * @param string $ciphertext
     * @return string
     */
    public function decrypt($ciphertext)
    {
        $this->setup();

        switch ($this->engine) {
            case self::ENGINE_LIBSODIUM:
                if ($this->oldtag === false) {
                    throw new InsufficientSetupException('Authentication Tag has not been set');
                }
                if (strlen($this->oldtag) != 16) {
                    break;
                }
                $plaintext = sodium_crypto_aead_aes256gcm_decrypt($ciphertext . $this->oldtag, $this->aad, $this->nonce, $this->key);
                if ($plaintext === false) {
                    $this->oldtag = false;
                    throw new BadDecryptionException('Error decrypting ciphertext with libsodium');
                }
                return $plaintext;
            case self::ENGINE_OPENSSL_GCM:
                if ($this->oldtag === false) {
                    throw new InsufficientSetupException('Authentication Tag has not been set');
                }
                $plaintext = openssl_decrypt(
                    $ciphertext,
                    'aes-' . $this->getKeyLength() . '-gcm',
                    $this->key,
                    OPENSSL_RAW_DATA,
                    $this->nonce,
                    $this->oldtag,
                    $this->aad
                );
                if ($plaintext === false) {
                    $this->oldtag = false;
                    throw new BadDecryptionException('Error decrypting ciphertext with OpenSSL');
                }
                return $plaintext;
        }

        return parent::decrypt($ciphertext);
    }
}
<?php

/**
 * Pure-PHP implementation of Salsa20.
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2019 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\Crypt;

use phpseclib3\Common\Functions\Strings;
use phpseclib3\Crypt\Common\StreamCipher;
use phpseclib3\Exception\BadDecryptionException;
use phpseclib3\Exception\InsufficientSetupException;

/**
 * Pure-PHP implementation of Salsa20.
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
class Salsa20 extends StreamCipher
{
    /**
     * Part 1 of the state
     *
     * @var string|false
     */
    protected $p1 = false;

    /**
     * Part 2 of the state
     *
     * @var string|false
     */
    protected $p2 = false;

    /**
     * Key Length (in bytes)
     *
     * @var int
     */
    protected $key_length = 32; // = 256 bits

    /**
     * @see \phpseclib3\Crypt\Salsa20::crypt()
     */
    const ENCRYPT = 0;

    /**
     * @see \phpseclib3\Crypt\Salsa20::crypt()
     */
    const DECRYPT = 1;

    /**
     * Encryption buffer for continuous mode
     *
     * @var array
     */
    protected $enbuffer;

    /**
     * Decryption buffer for continuous mode
     *
     * @var array
     */
    protected $debuffer;

    /**
     * Counter
     *
     * @var int
     */
    protected $counter = 0;

    /**
     * Using Generated Poly1305 Key
     *
     * @var boolean
     */
    protected $usingGeneratedPoly1305Key = false;

    /**
     * Salsa20 uses a nonce
     *
     * @return bool
     */
    public function usesNonce()
    {
        return true;
    }

    /**
     * Sets the key.
     *
     * @param string $key
     * @throws \LengthException if the key length isn't supported
     */
    public function setKey($key)
    {
        switch (strlen($key)) {
            case 16:
            case 32:
                break;
            default:
                throw new \LengthException('Key of size ' . strlen($key) . ' not supported by this algorithm. Only keys of sizes 16 or 32 are supported');
        }

        parent::setKey($key);
    }

    /**
     * Sets the nonce.
     *
     * @param string $nonce
     */
    public function setNonce($nonce)
    {
        if (strlen($nonce) != 8) {
            throw new \LengthException('Nonce of size ' . strlen($key) . ' not supported by this algorithm. Only an 64-bit nonce is supported');
        }

        $this->nonce = $nonce;
        $this->changed = true;
        $this->setEngine();
    }

    /**
     * Sets the counter.
     *
     * @param int $counter
     */
    public function setCounter($counter)
    {
        $this->counter = $counter;
        $this->setEngine();
    }

    /**
     * Creates a Poly1305 key using the method discussed in RFC8439
     *
     * See https://tools.ietf.org/html/rfc8439#section-2.6.1
     */
    protected function createPoly1305Key()
    {
        if ($this->nonce === false) {
            throw new InsufficientSetupException('No nonce has been defined');
        }

        if ($this->key === false) {
            throw new InsufficientSetupException('No key has been defined');
        }

        $c = clone $this;
        $c->setCounter(0);
        $c->usePoly1305 = false;
        $block = $c->encrypt(str_repeat("\0", 256));
        $this->setPoly1305Key(substr($block, 0, 32));

        if ($this->counter == 0) {
            $this->counter++;
        }
    }

    /**
     * Setup the self::ENGINE_INTERNAL $engine
     *
     * (re)init, if necessary, the internal cipher $engine
     *
     * _setup() will be called each time if $changed === true
     * typically this happens when using one or more of following public methods:
     *
     * - setKey()
     *
     * - setNonce()
     *
     * - First run of encrypt() / decrypt() with no init-settings
     *
     * @see self::setKey()
     * @see self::setNonce()
     * @see self::disableContinuousBuffer()
     */
    protected function setup()
    {
        if (!$this->changed) {
            return;
        }

        $this->enbuffer = $this->debuffer = ['ciphertext' => '', 'counter' => $this->counter];

        $this->changed = $this->nonIVChanged = false;

        if ($this->nonce === false) {
            throw new InsufficientSetupException('No nonce has been defined');
        }

        if ($this->key === false) {
            throw new InsufficientSetupException('No key has been defined');
        }

        if ($this->usePoly1305 && !isset($this->poly1305Key)) {
            $this->usingGeneratedPoly1305Key = true;
            $this->createPoly1305Key();
        }

        $key = $this->key;
        if (strlen($key) == 16) {
            $constant = 'expand 16-byte k';
            $key .= $key;
        } else {
            $constant = 'expand 32-byte k';
        }

        $this->p1 = substr($constant, 0, 4) .
                    substr($key, 0, 16) .
                    substr($constant, 4, 4) .
                    $this->nonce .
                    "\0\0\0\0";
        $this->p2 = substr($constant, 8, 4) .
                    substr($key, 16, 16) .
                    substr($constant, 12, 4);
    }

    /**
     * Setup the key (expansion)
     */
    protected function setupKey()
    {
        // Salsa20 does not utilize this method
    }

    /**
     * Encrypts a message.
     *
     * @see \phpseclib3\Crypt\Common\SymmetricKey::decrypt()
     * @see self::crypt()
     * @param string $plaintext
     * @return string $ciphertext
     */
    public function encrypt($plaintext)
    {
        $ciphertext = $this->crypt($plaintext, self::ENCRYPT);
        if (isset($this->poly1305Key)) {
            $this->newtag = $this->poly1305($ciphertext);
        }
        return $ciphertext;
    }

    /**
     * Decrypts a message.
     *
     * $this->decrypt($this->encrypt($plaintext)) == $this->encrypt($this->encrypt($plaintext)).
     * At least if the continuous buffer is disabled.
     *
     * @see \phpseclib3\Crypt\Common\SymmetricKey::encrypt()
     * @see self::crypt()
     * @param string $ciphertext
     * @return string $plaintext
     */
    public function decrypt($ciphertext)
    {
        if (isset($this->poly1305Key)) {
            if ($this->oldtag === false) {
                throw new InsufficientSetupException('Authentication Tag has not been set');
            }
            $newtag = $this->poly1305($ciphertext);
            if ($this->oldtag != substr($newtag, 0, strlen($this->oldtag))) {
                $this->oldtag = false;
                throw new BadDecryptionException('Derived authentication tag and supplied authentication tag do not match');
            }
            $this->oldtag = false;
        }

        return $this->crypt($ciphertext, self::DECRYPT);
    }

    /**
     * Encrypts a block
     *
     * @param string $in
     */
    protected function encryptBlock($in)
    {
        // Salsa20 does not utilize this method
    }

    /**
     * Decrypts a block
     *
     * @param string $in
     */
    protected function decryptBlock($in)
    {
        // Salsa20 does not utilize this method
    }

    /**
     * Encrypts or decrypts a message.
     *
     * @see self::encrypt()
     * @see self::decrypt()
     * @param string $text
     * @param int $mode
     * @return string $text
     */
    private function crypt($text, $mode)
    {
        $this->setup();
        if (!$this->continuousBuffer) {
            if ($this->engine == self::ENGINE_OPENSSL) {
                $iv = pack('V', $this->counter) . $this->p2;
                return openssl_encrypt(
                    $text,
                    $this->cipher_name_openssl,
                    $this->key,
                    OPENSSL_RAW_DATA,
                    $iv
                );
            }
            $i = $this->counter;
            $blocks = str_split($text, 64);
            foreach ($blocks as &$block) {
                $block ^= static::salsa20($this->p1 . pack('V', $i++) . $this->p2);
            }
            unset($block);
            return implode('', $blocks);
        }

        if ($mode == self::ENCRYPT) {
            $buffer = &$this->enbuffer;
        } else {
            $buffer = &$this->debuffer;
        }
        if (!strlen($buffer['ciphertext'])) {
            $ciphertext = '';
        } else {
            $ciphertext = $text ^ Strings::shift($buffer['ciphertext'], strlen($text));
            $text = substr($text, strlen($ciphertext));
            if (!strlen($text)) {
                return $ciphertext;
            }
        }

        $overflow = strlen($text) % 64; // & 0x3F
        if ($overflow) {
            $text2 = Strings::pop($text, $overflow);
            if ($this->engine == self::ENGINE_OPENSSL) {
                $iv = pack('V', $buffer['counter']) . $this->p2;
                // at this point $text should be a multiple of 64
                $buffer['counter'] += (strlen($text) >> 6) + 1; // ie. divide by 64
                $encrypted = openssl_encrypt(
                    $text . str_repeat("\0", 64),
                    $this->cipher_name_openssl,
                    $this->key,
                    OPENSSL_RAW_DATA,
                    $iv
                );
                $temp = Strings::pop($encrypted, 64);
            } else {
                $blocks = str_split($text, 64);
                if (strlen($text)) {
                    foreach ($blocks as &$block) {
                        $block ^= static::salsa20($this->p1 . pack('V', $buffer['counter']++) . $this->p2);
                    }
                    unset($block);
                }
                $encrypted = implode('', $blocks);
                $temp = static::salsa20($this->p1 . pack('V', $buffer['counter']++) . $this->p2);
            }
            $ciphertext .= $encrypted . ($text2 ^ $temp);
            $buffer['ciphertext'] = substr($temp, $overflow);
        } elseif (!strlen($buffer['ciphertext'])) {
            if ($this->engine == self::ENGINE_OPENSSL) {
                $iv = pack('V', $buffer['counter']) . $this->p2;
                $buffer['counter'] += (strlen($text) >> 6);
                $ciphertext .= openssl_encrypt(
                    $text,
                    $this->cipher_name_openssl,
                    $this->key,
                    OPENSSL_RAW_DATA,
                    $iv
                );
            } else {
                $blocks = str_split($text, 64);
                foreach ($blocks as &$block) {
                    $block ^= static::salsa20($this->p1 . pack('V', $buffer['counter']++) . $this->p2);
                }
                unset($block);
                $ciphertext .= implode('', $blocks);
            }
        }

        return $ciphertext;
    }

    /**
     * Left Rotate
     *
     * @param int $x
     * @param int $n
     * @return int
     */
    protected static function leftRotate($x, $n)
    {
        if (PHP_INT_SIZE == 8) {
            $r1 = $x << $n;
            $r1 &= 0xFFFFFFFF;
            $r2 = ($x & 0xFFFFFFFF) >> (32 - $n);
        } else {
            $x = (int) $x;
            $r1 = $x << $n;
            $r2 = $x >> (32 - $n);
            $r2 &= (1 << $n) - 1;
        }
        return $r1 | $r2;
    }

    /**
     * The quarterround function
     *
     * @param int $a
     * @param int $b
     * @param int $c
     * @param int $d
     */
    protected static function quarterRound(&$a, &$b, &$c, &$d)
    {
        $b ^= self::leftRotate($a + $d, 7);
        $c ^= self::leftRotate($b + $a, 9);
        $d ^= self::leftRotate($c + $b, 13);
        $a ^= self::leftRotate($d + $c, 18);
    }

    /**
     * The doubleround function
     *
     * @param int $x0 (by reference)
     * @param int $x1 (by reference)
     * @param int $x2 (by reference)
     * @param int $x3 (by reference)
     * @param int $x4 (by reference)
     * @param int $x5 (by reference)
     * @param int $x6 (by reference)
     * @param int $x7 (by reference)
     * @param int $x8 (by reference)
     * @param int $x9 (by reference)
     * @param int $x10 (by reference)
     * @param int $x11 (by reference)
     * @param int $x12 (by reference)
     * @param int $x13 (by reference)
     * @param int $x14 (by reference)
     * @param int $x15 (by reference)
     */
    protected static function doubleRound(&$x0, &$x1, &$x2, &$x3, &$x4, &$x5, &$x6, &$x7, &$x8, &$x9, &$x10, &$x11, &$x12, &$x13, &$x14, &$x15)
    {
        // columnRound
        static::quarterRound($x0, $x4, $x8, $x12);
        static::quarterRound($x5, $x9, $x13, $x1);
        static::quarterRound($x10, $x14, $x2, $x6);
        static::quarterRound($x15, $x3, $x7, $x11);
        // rowRound
        static::quarterRound($x0, $x1, $x2, $x3);
        static::quarterRound($x5, $x6, $x7, $x4);
        static::quarterRound($x10, $x11, $x8, $x9);
        static::quarterRound($x15, $x12, $x13, $x14);
    }

    /**
     * The Salsa20 hash function function
     *
     * @param string $x
     */
    protected static function salsa20($x)
    {
        $z = $x = unpack('V*', $x);
        for ($i = 0; $i < 10; $i++) {
            static::doubleRound($z[1], $z[2], $z[3], $z[4], $z[5], $z[6], $z[7], $z[8], $z[9], $z[10], $z[11], $z[12], $z[13], $z[14], $z[15], $z[16]);
        }

        for ($i = 1; $i <= 16; $i++) {
            $x[$i] += $z[$i];
        }

        return pack('V*', ...$x);
    }

    /**
     * Calculates Poly1305 MAC
     *
     * @see self::decrypt()
     * @see self::encrypt()
     * @param string $ciphertext
     * @return string
     */
    protected function poly1305($ciphertext)
    {
        if (!$this->usingGeneratedPoly1305Key) {
            return parent::poly1305($this->aad . $ciphertext);
        } else {
            /*
            sodium_crypto_aead_chacha20poly1305_encrypt does not calculate the poly1305 tag
            the same way sodium_crypto_aead_chacha20poly1305_ietf_encrypt does. you can see
            how the latter encrypts it in Salsa20::encrypt(). here's how the former encrypts
            it:

            $this->newtag = $this->poly1305(
                $this->aad .
                pack('V', strlen($this->aad)) . "\0\0\0\0" .
                $ciphertext .
                pack('V', strlen($ciphertext)) . "\0\0\0\0"
            );

            phpseclib opts to use the IETF construction, even when the nonce is 64-bits
            instead of 96-bits
            */
            return parent::poly1305(
                self::nullPad128($this->aad) .
                self::nullPad128($ciphertext) .
                pack('V', strlen($this->aad)) . "\0\0\0\0" .
                pack('V', strlen($ciphertext)) . "\0\0\0\0"
            );
        }
    }
}
<?php

/**
 * Pure-PHP implementation of Triple DES.
 *
 * Uses mcrypt, if available, and an internal implementation, otherwise.  Operates in the EDE3 mode (encrypt-decrypt-encrypt).
 *
 * PHP version 5
 *
 * Here's a short example of how to use this library:
 * <code>
 * <?php
 *    include 'vendor/autoload.php';
 *
 *    $des = new \phpseclib3\Crypt\TripleDES('ctr');
 *
 *    $des->setKey('abcdefghijklmnopqrstuvwx');
 *
 *    $size = 10 * 1024;
 *    $plaintext = '';
 *    for ($i = 0; $i < $size; $i++) {
 *        $plaintext.= 'a';
 *    }
 *
 *    echo $des->decrypt($des->encrypt($plaintext));
 * ?>
 * </code>
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2007 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\Crypt;

/**
 * Pure-PHP implementation of Triple DES.
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
class TripleDES extends DES
{
    /**
     * Encrypt / decrypt using inner chaining
     *
     * Inner chaining is used by SSH-1 and is generally considered to be less secure then outer chaining (self::MODE_CBC3).
     */
    const MODE_3CBC = -2;

    /**
     * Encrypt / decrypt using outer chaining
     *
     * Outer chaining is used by SSH-2 and when the mode is set to \phpseclib3\Crypt\Common\BlockCipher::MODE_CBC.
     */
    const MODE_CBC3 = self::MODE_CBC;

    /**
     * Key Length (in bytes)
     *
     * @see \phpseclib3\Crypt\TripleDES::setKeyLength()
     * @var int
     */
    protected $key_length = 24;

    /**
     * The mcrypt specific name of the cipher
     *
     * @see DES::cipher_name_mcrypt
     * @see Common\SymmetricKey::cipher_name_mcrypt
     * @var string
     */
    protected $cipher_name_mcrypt = 'tripledes';

    /**
     * Optimizing value while CFB-encrypting
     *
     * @see Common\SymmetricKey::cfb_init_len
     * @var int
     */
    protected $cfb_init_len = 750;

    /**
     * max possible size of $key
     *
     * @see self::setKey()
     * @see DES::setKey()
     * @var string
     */
    protected $key_length_max = 24;

    /**
     * Internal flag whether using self::MODE_3CBC or not
     *
     * @var bool
     */
    private $mode_3cbc;

    /**
     * The \phpseclib3\Crypt\DES objects
     *
     * Used only if $mode_3cbc === true
     *
     * @var array
     */
    private $des;

    /**
     * Default Constructor.
     *
     * Determines whether or not the mcrypt or OpenSSL extensions should be used.
     *
     * $mode could be:
     *
     * - ecb
     *
     * - cbc
     *
     * - ctr
     *
     * - cfb
     *
     * - ofb
     *
     * - 3cbc
     *
     * - cbc3 (same as cbc)
     *
     * @see Crypt\DES::__construct()
     * @see Common\SymmetricKey::__construct()
     * @param string $mode
     */
    public function __construct($mode)
    {
        switch (strtolower($mode)) {
            // In case of self::MODE_3CBC, we init as CRYPT_DES_MODE_CBC
            // and additional flag us internally as 3CBC
            case '3cbc':
                parent::__construct('cbc');
                $this->mode_3cbc = true;

                // This three $des'es will do the 3CBC work (if $key > 64bits)
                $this->des = [
                    new DES('cbc'),
                    new DES('cbc'),
                    new DES('cbc'),
                ];

                // we're going to be doing the padding, ourselves, so disable it in the \phpseclib3\Crypt\DES objects
                $this->des[0]->disablePadding();
                $this->des[1]->disablePadding();
                $this->des[2]->disablePadding();
                break;
            case 'cbc3':
                $mode = 'cbc';
                // fall-through
            // If not 3CBC, we init as usual
            default:
                parent::__construct($mode);

                if ($this->mode == self::MODE_STREAM) {
                    throw new BadModeException('Block ciphers cannot be ran in stream mode');
                }
        }
    }

    /**
     * Test for engine validity
     *
     * This is mainly just a wrapper to set things up for \phpseclib3\Crypt\Common\SymmetricKey::isValidEngine()
     *
     * @see Common\SymmetricKey::__construct()
     * @param int $engine
     * @return bool
     */
    protected function isValidEngineHelper($engine)
    {
        if ($engine == self::ENGINE_OPENSSL) {
            $this->cipher_name_openssl_ecb = 'des-ede3';
            $mode = $this->openssl_translate_mode();
            $this->cipher_name_openssl = $mode == 'ecb' ? 'des-ede3' : 'des-ede3-' . $mode;
        }

        return parent::isValidEngineHelper($engine);
    }

    /**
     * Sets the initialization vector.
     *
     * SetIV is not required when \phpseclib3\Crypt\Common\SymmetricKey::MODE_ECB is being used.
     *
     * @see Common\SymmetricKey::setIV()
     * @param string $iv
     */
    public function setIV($iv)
    {
        parent::setIV($iv);
        if ($this->mode_3cbc) {
            $this->des[0]->setIV($iv);
            $this->des[1]->setIV($iv);
            $this->des[2]->setIV($iv);
        }
    }

    /**
     * Sets the key length.
     *
     * Valid key lengths are 128 and 192 bits.
     *
     * If you want to use a 64-bit key use DES.php
     *
     * @see Common\SymmetricKey:setKeyLength()
     * @throws \LengthException if the key length is invalid
     * @param int $length
     */
    public function setKeyLength($length)
    {
        switch ($length) {
            case 128:
            case 192:
                break;
            default:
                throw new \LengthException('Key size of ' . $length . ' bits is not supported by this algorithm. Only keys of sizes 128 or 192 bits are supported');
        }

        parent::setKeyLength($length);
    }

    /**
     * Sets the key.
     *
     * Triple DES can use 128-bit (eg. strlen($key) == 16) or 192-bit (eg. strlen($key) == 24) keys.
     *
     * DES also requires that every eighth bit be a parity bit, however, we'll ignore that.
     *
     * @see DES::setKey()
     * @see Common\SymmetricKey::setKey()
     * @throws \LengthException if the key length is invalid
     * @param string $key
     */
    public function setKey($key)
    {
        if ($this->explicit_key_length !== false && strlen($key) != $this->explicit_key_length) {
            throw new \LengthException('Key length has already been set to ' . $this->explicit_key_length . ' bytes and this key is ' . strlen($key) . ' bytes');
        }

        switch (strlen($key)) {
            case 16:
                $key .= substr($key, 0, 8);
                break;
            case 24:
                break;
            default:
                throw new \LengthException('Key of size ' . strlen($key) . ' not supported by this algorithm. Only keys of sizes 16 or 24 are supported');
        }

        // copied from self::setKey()
        $this->key = $key;
        $this->key_length = strlen($key);
        $this->changed = $this->nonIVChanged = true;
        $this->setEngine();

        if ($this->mode_3cbc) {
            $this->des[0]->setKey(substr($key, 0, 8));
            $this->des[1]->setKey(substr($key, 8, 8));
            $this->des[2]->setKey(substr($key, 16, 8));
        }
    }

    /**
     * Encrypts a message.
     *
     * @see Common\SymmetricKey::encrypt()
     * @param string $plaintext
     * @return string $cipertext
     */
    public function encrypt($plaintext)
    {
        // parent::en/decrypt() is able to do all the work for all modes and keylengths,
        // except for: self::MODE_3CBC (inner chaining CBC) with a key > 64bits

        // if the key is smaller then 8, do what we'd normally do
        if ($this->mode_3cbc && strlen($this->key) > 8) {
            return $this->des[2]->encrypt(
                $this->des[1]->decrypt(
                    $this->des[0]->encrypt(
                        $this->pad($plaintext)
                    )
                )
            );
        }

        return parent::encrypt($plaintext);
    }

    /**
     * Decrypts a message.
     *
     * @see Common\SymmetricKey::decrypt()
     * @param string $ciphertext
     * @return string $plaintext
     */
    public function decrypt($ciphertext)
    {
        if ($this->mode_3cbc && strlen($this->key) > 8) {
            return $this->unpad(
                $this->des[0]->decrypt(
                    $this->des[1]->encrypt(
                        $this->des[2]->decrypt(
                            str_pad($ciphertext, (strlen($ciphertext) + 7) & 0xFFFFFFF8, "\0")
                        )
                    )
                )
            );
        }

        return parent::decrypt($ciphertext);
    }

    /**
     * Treat consecutive "packets" as if they are a continuous buffer.
     *
     * Say you have a 16-byte plaintext $plaintext.  Using the default behavior, the two following code snippets
     * will yield different outputs:
     *
     * <code>
     *    echo $des->encrypt(substr($plaintext, 0, 8));
     *    echo $des->encrypt(substr($plaintext, 8, 8));
     * </code>
     * <code>
     *    echo $des->encrypt($plaintext);
     * </code>
     *
     * The solution is to enable the continuous buffer.  Although this will resolve the above discrepancy, it creates
     * another, as demonstrated with the following:
     *
     * <code>
     *    $des->encrypt(substr($plaintext, 0, 8));
     *    echo $des->decrypt($des->encrypt(substr($plaintext, 8, 8)));
     * </code>
     * <code>
     *    echo $des->decrypt($des->encrypt(substr($plaintext, 8, 8)));
     * </code>
     *
     * With the continuous buffer disabled, these would yield the same output.  With it enabled, they yield different
     * outputs.  The reason is due to the fact that the initialization vector's change after every encryption /
     * decryption round when the continuous buffer is enabled.  When it's disabled, they remain constant.
     *
     * Put another way, when the continuous buffer is enabled, the state of the \phpseclib3\Crypt\DES() object changes after each
     * encryption / decryption round, whereas otherwise, it'd remain constant.  For this reason, it's recommended that
     * continuous buffers not be used.  They do offer better security and are, in fact, sometimes required (SSH uses them),
     * however, they are also less intuitive and more likely to cause you problems.
     *
     * @see Common\SymmetricKey::enableContinuousBuffer()
     * @see self::disableContinuousBuffer()
     */
    public function enableContinuousBuffer()
    {
        parent::enableContinuousBuffer();
        if ($this->mode_3cbc) {
            $this->des[0]->enableContinuousBuffer();
            $this->des[1]->enableContinuousBuffer();
            $this->des[2]->enableContinuousBuffer();
        }
    }

    /**
     * Treat consecutive packets as if they are a discontinuous buffer.
     *
     * The default behavior.
     *
     * @see Common\SymmetricKey::disableContinuousBuffer()
     * @see self::enableContinuousBuffer()
     */
    public function disableContinuousBuffer()
    {
        parent::disableContinuousBuffer();
        if ($this->mode_3cbc) {
            $this->des[0]->disableContinuousBuffer();
            $this->des[1]->disableContinuousBuffer();
            $this->des[2]->disableContinuousBuffer();
        }
    }

    /**
     * Creates the key schedule
     *
     * @see DES::setupKey()
     * @see Common\SymmetricKey::setupKey()
     */
    protected function setupKey()
    {
        switch (true) {
            // if $key <= 64bits we configure our internal pure-php cipher engine
            // to act as regular [1]DES, not as 3DES. mcrypt.so::tripledes does the same.
            case strlen($this->key) <= 8:
                $this->des_rounds = 1;
                break;

            // otherwise, if $key > 64bits, we configure our engine to work as 3DES.
            default:
                $this->des_rounds = 3;

                // (only) if 3CBC is used we have, of course, to setup the $des[0-2] keys also separately.
                if ($this->mode_3cbc) {
                    $this->des[0]->setupKey();
                    $this->des[1]->setupKey();
                    $this->des[2]->setupKey();

                    // because $des[0-2] will, now, do all the work we can return here
                    // not need unnecessary stress parent::setupKey() with our, now unused, $key.
                    return;
                }
        }
        // setup our key
        parent::setupKey();
    }

    /**
     * Sets the internal crypt engine
     *
     * @see Common\SymmetricKey::__construct()
     * @see Common\SymmetricKey::setPreferredEngine()
     * @param int $engine
     */
    public function setPreferredEngine($engine)
    {
        if ($this->mode_3cbc) {
            $this->des[0]->setPreferredEngine($engine);
            $this->des[1]->setPreferredEngine($engine);
            $this->des[2]->setPreferredEngine($engine);
        }

        parent::setPreferredEngine($engine);
    }
}
<?php

/**
 * Pure-PHP implementation of Twofish.
 *
 * Uses mcrypt, if available, and an internal implementation, otherwise.
 *
 * PHP version 5
 *
 * Useful resources are as follows:
 *
 *  - {@link http://en.wikipedia.org/wiki/Twofish Wikipedia description of Twofish}
 *
 * Here's a short example of how to use this library:
 * <code>
 * <?php
 *    include 'vendor/autoload.php';
 *
 *    $twofish = new \phpseclib3\Crypt\Twofish('ctr');
 *
 *    $twofish->setKey('12345678901234567890123456789012');
 *
 *    $plaintext = str_repeat('a', 1024);
 *
 *    echo $twofish->decrypt($twofish->encrypt($plaintext));
 * ?>
 * </code>
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @author    Hans-Juergen Petrich <petrich@tronic-media.com>
 * @copyright 2007 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\Crypt;

use phpseclib3\Crypt\Common\BlockCipher;
use phpseclib3\Exception\BadModeException;

/**
 * Pure-PHP implementation of Twofish.
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 * @author  Hans-Juergen Petrich <petrich@tronic-media.com>
 */
class Twofish extends BlockCipher
{
    /**
     * The mcrypt specific name of the cipher
     *
     * @see Common\SymmetricKey::cipher_name_mcrypt
     * @var string
     */
    protected $cipher_name_mcrypt = 'twofish';

    /**
     * Optimizing value while CFB-encrypting
     *
     * @see Common\SymmetricKey::cfb_init_len
     * @var int
     */
    protected $cfb_init_len = 800;

    /**
     * Q-Table
     *
     * @var array
     */
    private static $q0 = [
        0xA9, 0x67, 0xB3, 0xE8, 0x04, 0xFD, 0xA3, 0x76,
        0x9A, 0x92, 0x80, 0x78, 0xE4, 0xDD, 0xD1, 0x38,
        0x0D, 0xC6, 0x35, 0x98, 0x18, 0xF7, 0xEC, 0x6C,
        0x43, 0x75, 0x37, 0x26, 0xFA, 0x13, 0x94, 0x48,
        0xF2, 0xD0, 0x8B, 0x30, 0x84, 0x54, 0xDF, 0x23,
        0x19, 0x5B, 0x3D, 0x59, 0xF3, 0xAE, 0xA2, 0x82,
        0x63, 0x01, 0x83, 0x2E, 0xD9, 0x51, 0x9B, 0x7C,
        0xA6, 0xEB, 0xA5, 0xBE, 0x16, 0x0C, 0xE3, 0x61,
        0xC0, 0x8C, 0x3A, 0xF5, 0x73, 0x2C, 0x25, 0x0B,
        0xBB, 0x4E, 0x89, 0x6B, 0x53, 0x6A, 0xB4, 0xF1,
        0xE1, 0xE6, 0xBD, 0x45, 0xE2, 0xF4, 0xB6, 0x66,
        0xCC, 0x95, 0x03, 0x56, 0xD4, 0x1C, 0x1E, 0xD7,
        0xFB, 0xC3, 0x8E, 0xB5, 0xE9, 0xCF, 0xBF, 0xBA,
        0xEA, 0x77, 0x39, 0xAF, 0x33, 0xC9, 0x62, 0x71,
        0x81, 0x79, 0x09, 0xAD, 0x24, 0xCD, 0xF9, 0xD8,
        0xE5, 0xC5, 0xB9, 0x4D, 0x44, 0x08, 0x86, 0xE7,
        0xA1, 0x1D, 0xAA, 0xED, 0x06, 0x70, 0xB2, 0xD2,
        0x41, 0x7B, 0xA0, 0x11, 0x31, 0xC2, 0x27, 0x90,
        0x20, 0xF6, 0x60, 0xFF, 0x96, 0x5C, 0xB1, 0xAB,
        0x9E, 0x9C, 0x52, 0x1B, 0x5F, 0x93, 0x0A, 0xEF,
        0x91, 0x85, 0x49, 0xEE, 0x2D, 0x4F, 0x8F, 0x3B,
        0x47, 0x87, 0x6D, 0x46, 0xD6, 0x3E, 0x69, 0x64,
        0x2A, 0xCE, 0xCB, 0x2F, 0xFC, 0x97, 0x05, 0x7A,
        0xAC, 0x7F, 0xD5, 0x1A, 0x4B, 0x0E, 0xA7, 0x5A,
        0x28, 0x14, 0x3F, 0x29, 0x88, 0x3C, 0x4C, 0x02,
        0xB8, 0xDA, 0xB0, 0x17, 0x55, 0x1F, 0x8A, 0x7D,
        0x57, 0xC7, 0x8D, 0x74, 0xB7, 0xC4, 0x9F, 0x72,
        0x7E, 0x15, 0x22, 0x12, 0x58, 0x07, 0x99, 0x34,
        0x6E, 0x50, 0xDE, 0x68, 0x65, 0xBC, 0xDB, 0xF8,
        0xC8, 0xA8, 0x2B, 0x40, 0xDC, 0xFE, 0x32, 0xA4,
        0xCA, 0x10, 0x21, 0xF0, 0xD3, 0x5D, 0x0F, 0x00,
        0x6F, 0x9D, 0x36, 0x42, 0x4A, 0x5E, 0xC1, 0xE0
    ];

    /**
     * Q-Table
     *
     * @var array
     */
    private static $q1 = [
        0x75, 0xF3, 0xC6, 0xF4, 0xDB, 0x7B, 0xFB, 0xC8,
        0x4A, 0xD3, 0xE6, 0x6B, 0x45, 0x7D, 0xE8, 0x4B,
        0xD6, 0x32, 0xD8, 0xFD, 0x37, 0x71, 0xF1, 0xE1,
        0x30, 0x0F, 0xF8, 0x1B, 0x87, 0xFA, 0x06, 0x3F,
        0x5E, 0xBA, 0xAE, 0x5B, 0x8A, 0x00, 0xBC, 0x9D,
        0x6D, 0xC1, 0xB1, 0x0E, 0x80, 0x5D, 0xD2, 0xD5,
        0xA0, 0x84, 0x07, 0x14, 0xB5, 0x90, 0x2C, 0xA3,
        0xB2, 0x73, 0x4C, 0x54, 0x92, 0x74, 0x36, 0x51,
        0x38, 0xB0, 0xBD, 0x5A, 0xFC, 0x60, 0x62, 0x96,
        0x6C, 0x42, 0xF7, 0x10, 0x7C, 0x28, 0x27, 0x8C,
        0x13, 0x95, 0x9C, 0xC7, 0x24, 0x46, 0x3B, 0x70,
        0xCA, 0xE3, 0x85, 0xCB, 0x11, 0xD0, 0x93, 0xB8,
        0xA6, 0x83, 0x20, 0xFF, 0x9F, 0x77, 0xC3, 0xCC,
        0x03, 0x6F, 0x08, 0xBF, 0x40, 0xE7, 0x2B, 0xE2,
        0x79, 0x0C, 0xAA, 0x82, 0x41, 0x3A, 0xEA, 0xB9,
        0xE4, 0x9A, 0xA4, 0x97, 0x7E, 0xDA, 0x7A, 0x17,
        0x66, 0x94, 0xA1, 0x1D, 0x3D, 0xF0, 0xDE, 0xB3,
        0x0B, 0x72, 0xA7, 0x1C, 0xEF, 0xD1, 0x53, 0x3E,
        0x8F, 0x33, 0x26, 0x5F, 0xEC, 0x76, 0x2A, 0x49,
        0x81, 0x88, 0xEE, 0x21, 0xC4, 0x1A, 0xEB, 0xD9,
        0xC5, 0x39, 0x99, 0xCD, 0xAD, 0x31, 0x8B, 0x01,
        0x18, 0x23, 0xDD, 0x1F, 0x4E, 0x2D, 0xF9, 0x48,
        0x4F, 0xF2, 0x65, 0x8E, 0x78, 0x5C, 0x58, 0x19,
        0x8D, 0xE5, 0x98, 0x57, 0x67, 0x7F, 0x05, 0x64,
        0xAF, 0x63, 0xB6, 0xFE, 0xF5, 0xB7, 0x3C, 0xA5,
        0xCE, 0xE9, 0x68, 0x44, 0xE0, 0x4D, 0x43, 0x69,
        0x29, 0x2E, 0xAC, 0x15, 0x59, 0xA8, 0x0A, 0x9E,
        0x6E, 0x47, 0xDF, 0x34, 0x35, 0x6A, 0xCF, 0xDC,
        0x22, 0xC9, 0xC0, 0x9B, 0x89, 0xD4, 0xED, 0xAB,
        0x12, 0xA2, 0x0D, 0x52, 0xBB, 0x02, 0x2F, 0xA9,
        0xD7, 0x61, 0x1E, 0xB4, 0x50, 0x04, 0xF6, 0xC2,
        0x16, 0x25, 0x86, 0x56, 0x55, 0x09, 0xBE, 0x91
    ];

    /**
     * M-Table
     *
     * @var array
     */
    private static $m0 = [
        0xBCBC3275, 0xECEC21F3, 0x202043C6, 0xB3B3C9F4, 0xDADA03DB, 0x02028B7B, 0xE2E22BFB, 0x9E9EFAC8,
        0xC9C9EC4A, 0xD4D409D3, 0x18186BE6, 0x1E1E9F6B, 0x98980E45, 0xB2B2387D, 0xA6A6D2E8, 0x2626B74B,
        0x3C3C57D6, 0x93938A32, 0x8282EED8, 0x525298FD, 0x7B7BD437, 0xBBBB3771, 0x5B5B97F1, 0x474783E1,
        0x24243C30, 0x5151E20F, 0xBABAC6F8, 0x4A4AF31B, 0xBFBF4887, 0x0D0D70FA, 0xB0B0B306, 0x7575DE3F,
        0xD2D2FD5E, 0x7D7D20BA, 0x666631AE, 0x3A3AA35B, 0x59591C8A, 0x00000000, 0xCDCD93BC, 0x1A1AE09D,
        0xAEAE2C6D, 0x7F7FABC1, 0x2B2BC7B1, 0xBEBEB90E, 0xE0E0A080, 0x8A8A105D, 0x3B3B52D2, 0x6464BAD5,
        0xD8D888A0, 0xE7E7A584, 0x5F5FE807, 0x1B1B1114, 0x2C2CC2B5, 0xFCFCB490, 0x3131272C, 0x808065A3,
        0x73732AB2, 0x0C0C8173, 0x79795F4C, 0x6B6B4154, 0x4B4B0292, 0x53536974, 0x94948F36, 0x83831F51,
        0x2A2A3638, 0xC4C49CB0, 0x2222C8BD, 0xD5D5F85A, 0xBDBDC3FC, 0x48487860, 0xFFFFCE62, 0x4C4C0796,
        0x4141776C, 0xC7C7E642, 0xEBEB24F7, 0x1C1C1410, 0x5D5D637C, 0x36362228, 0x6767C027, 0xE9E9AF8C,
        0x4444F913, 0x1414EA95, 0xF5F5BB9C, 0xCFCF18C7, 0x3F3F2D24, 0xC0C0E346, 0x7272DB3B, 0x54546C70,
        0x29294CCA, 0xF0F035E3, 0x0808FE85, 0xC6C617CB, 0xF3F34F11, 0x8C8CE4D0, 0xA4A45993, 0xCACA96B8,
        0x68683BA6, 0xB8B84D83, 0x38382820, 0xE5E52EFF, 0xADAD569F, 0x0B0B8477, 0xC8C81DC3, 0x9999FFCC,
        0x5858ED03, 0x19199A6F, 0x0E0E0A08, 0x95957EBF, 0x70705040, 0xF7F730E7, 0x6E6ECF2B, 0x1F1F6EE2,
        0xB5B53D79, 0x09090F0C, 0x616134AA, 0x57571682, 0x9F9F0B41, 0x9D9D803A, 0x111164EA, 0x2525CDB9,
        0xAFAFDDE4, 0x4545089A, 0xDFDF8DA4, 0xA3A35C97, 0xEAEAD57E, 0x353558DA, 0xEDEDD07A, 0x4343FC17,
        0xF8F8CB66, 0xFBFBB194, 0x3737D3A1, 0xFAFA401D, 0xC2C2683D, 0xB4B4CCF0, 0x32325DDE, 0x9C9C71B3,
        0x5656E70B, 0xE3E3DA72, 0x878760A7, 0x15151B1C, 0xF9F93AEF, 0x6363BFD1, 0x3434A953, 0x9A9A853E,
        0xB1B1428F, 0x7C7CD133, 0x88889B26, 0x3D3DA65F, 0xA1A1D7EC, 0xE4E4DF76, 0x8181942A, 0x91910149,
        0x0F0FFB81, 0xEEEEAA88, 0x161661EE, 0xD7D77321, 0x9797F5C4, 0xA5A5A81A, 0xFEFE3FEB, 0x6D6DB5D9,
        0x7878AEC5, 0xC5C56D39, 0x1D1DE599, 0x7676A4CD, 0x3E3EDCAD, 0xCBCB6731, 0xB6B6478B, 0xEFEF5B01,
        0x12121E18, 0x6060C523, 0x6A6AB0DD, 0x4D4DF61F, 0xCECEE94E, 0xDEDE7C2D, 0x55559DF9, 0x7E7E5A48,
        0x2121B24F, 0x03037AF2, 0xA0A02665, 0x5E5E198E, 0x5A5A6678, 0x65654B5C, 0x62624E58, 0xFDFD4519,
        0x0606F48D, 0x404086E5, 0xF2F2BE98, 0x3333AC57, 0x17179067, 0x05058E7F, 0xE8E85E05, 0x4F4F7D64,
        0x89896AAF, 0x10109563, 0x74742FB6, 0x0A0A75FE, 0x5C5C92F5, 0x9B9B74B7, 0x2D2D333C, 0x3030D6A5,
        0x2E2E49CE, 0x494989E9, 0x46467268, 0x77775544, 0xA8A8D8E0, 0x9696044D, 0x2828BD43, 0xA9A92969,
        0xD9D97929, 0x8686912E, 0xD1D187AC, 0xF4F44A15, 0x8D8D1559, 0xD6D682A8, 0xB9B9BC0A, 0x42420D9E,
        0xF6F6C16E, 0x2F2FB847, 0xDDDD06DF, 0x23233934, 0xCCCC6235, 0xF1F1C46A, 0xC1C112CF, 0x8585EBDC,
        0x8F8F9E22, 0x7171A1C9, 0x9090F0C0, 0xAAAA539B, 0x0101F189, 0x8B8BE1D4, 0x4E4E8CED, 0x8E8E6FAB,
        0xABABA212, 0x6F6F3EA2, 0xE6E6540D, 0xDBDBF252, 0x92927BBB, 0xB7B7B602, 0x6969CA2F, 0x3939D9A9,
        0xD3D30CD7, 0xA7A72361, 0xA2A2AD1E, 0xC3C399B4, 0x6C6C4450, 0x07070504, 0x04047FF6, 0x272746C2,
        0xACACA716, 0xD0D07625, 0x50501386, 0xDCDCF756, 0x84841A55, 0xE1E15109, 0x7A7A25BE, 0x1313EF91
    ];

    /**
     * M-Table
     *
     * @var array
     */
    private static $m1 = [
        0xA9D93939, 0x67901717, 0xB3719C9C, 0xE8D2A6A6, 0x04050707, 0xFD985252, 0xA3658080, 0x76DFE4E4,
        0x9A084545, 0x92024B4B, 0x80A0E0E0, 0x78665A5A, 0xE4DDAFAF, 0xDDB06A6A, 0xD1BF6363, 0x38362A2A,
        0x0D54E6E6, 0xC6432020, 0x3562CCCC, 0x98BEF2F2, 0x181E1212, 0xF724EBEB, 0xECD7A1A1, 0x6C774141,
        0x43BD2828, 0x7532BCBC, 0x37D47B7B, 0x269B8888, 0xFA700D0D, 0x13F94444, 0x94B1FBFB, 0x485A7E7E,
        0xF27A0303, 0xD0E48C8C, 0x8B47B6B6, 0x303C2424, 0x84A5E7E7, 0x54416B6B, 0xDF06DDDD, 0x23C56060,
        0x1945FDFD, 0x5BA33A3A, 0x3D68C2C2, 0x59158D8D, 0xF321ECEC, 0xAE316666, 0xA23E6F6F, 0x82165757,
        0x63951010, 0x015BEFEF, 0x834DB8B8, 0x2E918686, 0xD9B56D6D, 0x511F8383, 0x9B53AAAA, 0x7C635D5D,
        0xA63B6868, 0xEB3FFEFE, 0xA5D63030, 0xBE257A7A, 0x16A7ACAC, 0x0C0F0909, 0xE335F0F0, 0x6123A7A7,
        0xC0F09090, 0x8CAFE9E9, 0x3A809D9D, 0xF5925C5C, 0x73810C0C, 0x2C273131, 0x2576D0D0, 0x0BE75656,
        0xBB7B9292, 0x4EE9CECE, 0x89F10101, 0x6B9F1E1E, 0x53A93434, 0x6AC4F1F1, 0xB499C3C3, 0xF1975B5B,
        0xE1834747, 0xE66B1818, 0xBDC82222, 0x450E9898, 0xE26E1F1F, 0xF4C9B3B3, 0xB62F7474, 0x66CBF8F8,
        0xCCFF9999, 0x95EA1414, 0x03ED5858, 0x56F7DCDC, 0xD4E18B8B, 0x1C1B1515, 0x1EADA2A2, 0xD70CD3D3,
        0xFB2BE2E2, 0xC31DC8C8, 0x8E195E5E, 0xB5C22C2C, 0xE9894949, 0xCF12C1C1, 0xBF7E9595, 0xBA207D7D,
        0xEA641111, 0x77840B0B, 0x396DC5C5, 0xAF6A8989, 0x33D17C7C, 0xC9A17171, 0x62CEFFFF, 0x7137BBBB,
        0x81FB0F0F, 0x793DB5B5, 0x0951E1E1, 0xADDC3E3E, 0x242D3F3F, 0xCDA47676, 0xF99D5555, 0xD8EE8282,
        0xE5864040, 0xC5AE7878, 0xB9CD2525, 0x4D049696, 0x44557777, 0x080A0E0E, 0x86135050, 0xE730F7F7,
        0xA1D33737, 0x1D40FAFA, 0xAA346161, 0xED8C4E4E, 0x06B3B0B0, 0x706C5454, 0xB22A7373, 0xD2523B3B,
        0x410B9F9F, 0x7B8B0202, 0xA088D8D8, 0x114FF3F3, 0x3167CBCB, 0xC2462727, 0x27C06767, 0x90B4FCFC,
        0x20283838, 0xF67F0404, 0x60784848, 0xFF2EE5E5, 0x96074C4C, 0x5C4B6565, 0xB1C72B2B, 0xAB6F8E8E,
        0x9E0D4242, 0x9CBBF5F5, 0x52F2DBDB, 0x1BF34A4A, 0x5FA63D3D, 0x9359A4A4, 0x0ABCB9B9, 0xEF3AF9F9,
        0x91EF1313, 0x85FE0808, 0x49019191, 0xEE611616, 0x2D7CDEDE, 0x4FB22121, 0x8F42B1B1, 0x3BDB7272,
        0x47B82F2F, 0x8748BFBF, 0x6D2CAEAE, 0x46E3C0C0, 0xD6573C3C, 0x3E859A9A, 0x6929A9A9, 0x647D4F4F,
        0x2A948181, 0xCE492E2E, 0xCB17C6C6, 0x2FCA6969, 0xFCC3BDBD, 0x975CA3A3, 0x055EE8E8, 0x7AD0EDED,
        0xAC87D1D1, 0x7F8E0505, 0xD5BA6464, 0x1AA8A5A5, 0x4BB72626, 0x0EB9BEBE, 0xA7608787, 0x5AF8D5D5,
        0x28223636, 0x14111B1B, 0x3FDE7575, 0x2979D9D9, 0x88AAEEEE, 0x3C332D2D, 0x4C5F7979, 0x02B6B7B7,
        0xB896CACA, 0xDA583535, 0xB09CC4C4, 0x17FC4343, 0x551A8484, 0x1FF64D4D, 0x8A1C5959, 0x7D38B2B2,
        0x57AC3333, 0xC718CFCF, 0x8DF40606, 0x74695353, 0xB7749B9B, 0xC4F59797, 0x9F56ADAD, 0x72DAE3E3,
        0x7ED5EAEA, 0x154AF4F4, 0x229E8F8F, 0x12A2ABAB, 0x584E6262, 0x07E85F5F, 0x99E51D1D, 0x34392323,
        0x6EC1F6F6, 0x50446C6C, 0xDE5D3232, 0x68724646, 0x6526A0A0, 0xBC93CDCD, 0xDB03DADA, 0xF8C6BABA,
        0xC8FA9E9E, 0xA882D6D6, 0x2BCF6E6E, 0x40507070, 0xDCEB8585, 0xFE750A0A, 0x328A9393, 0xA48DDFDF,
        0xCA4C2929, 0x10141C1C, 0x2173D7D7, 0xF0CCB4B4, 0xD309D4D4, 0x5D108A8A, 0x0FE25151, 0x00000000,
        0x6F9A1919, 0x9DE01A1A, 0x368F9494, 0x42E6C7C7, 0x4AECC9C9, 0x5EFDD2D2, 0xC1AB7F7F, 0xE0D8A8A8
    ];

    /**
     * M-Table
     *
     * @var array
     */
    private static $m2 = [
        0xBC75BC32, 0xECF3EC21, 0x20C62043, 0xB3F4B3C9, 0xDADBDA03, 0x027B028B, 0xE2FBE22B, 0x9EC89EFA,
        0xC94AC9EC, 0xD4D3D409, 0x18E6186B, 0x1E6B1E9F, 0x9845980E, 0xB27DB238, 0xA6E8A6D2, 0x264B26B7,
        0x3CD63C57, 0x9332938A, 0x82D882EE, 0x52FD5298, 0x7B377BD4, 0xBB71BB37, 0x5BF15B97, 0x47E14783,
        0x2430243C, 0x510F51E2, 0xBAF8BAC6, 0x4A1B4AF3, 0xBF87BF48, 0x0DFA0D70, 0xB006B0B3, 0x753F75DE,
        0xD25ED2FD, 0x7DBA7D20, 0x66AE6631, 0x3A5B3AA3, 0x598A591C, 0x00000000, 0xCDBCCD93, 0x1A9D1AE0,
        0xAE6DAE2C, 0x7FC17FAB, 0x2BB12BC7, 0xBE0EBEB9, 0xE080E0A0, 0x8A5D8A10, 0x3BD23B52, 0x64D564BA,
        0xD8A0D888, 0xE784E7A5, 0x5F075FE8, 0x1B141B11, 0x2CB52CC2, 0xFC90FCB4, 0x312C3127, 0x80A38065,
        0x73B2732A, 0x0C730C81, 0x794C795F, 0x6B546B41, 0x4B924B02, 0x53745369, 0x9436948F, 0x8351831F,
        0x2A382A36, 0xC4B0C49C, 0x22BD22C8, 0xD55AD5F8, 0xBDFCBDC3, 0x48604878, 0xFF62FFCE, 0x4C964C07,
        0x416C4177, 0xC742C7E6, 0xEBF7EB24, 0x1C101C14, 0x5D7C5D63, 0x36283622, 0x672767C0, 0xE98CE9AF,
        0x441344F9, 0x149514EA, 0xF59CF5BB, 0xCFC7CF18, 0x3F243F2D, 0xC046C0E3, 0x723B72DB, 0x5470546C,
        0x29CA294C, 0xF0E3F035, 0x088508FE, 0xC6CBC617, 0xF311F34F, 0x8CD08CE4, 0xA493A459, 0xCAB8CA96,
        0x68A6683B, 0xB883B84D, 0x38203828, 0xE5FFE52E, 0xAD9FAD56, 0x0B770B84, 0xC8C3C81D, 0x99CC99FF,
        0x580358ED, 0x196F199A, 0x0E080E0A, 0x95BF957E, 0x70407050, 0xF7E7F730, 0x6E2B6ECF, 0x1FE21F6E,
        0xB579B53D, 0x090C090F, 0x61AA6134, 0x57825716, 0x9F419F0B, 0x9D3A9D80, 0x11EA1164, 0x25B925CD,
        0xAFE4AFDD, 0x459A4508, 0xDFA4DF8D, 0xA397A35C, 0xEA7EEAD5, 0x35DA3558, 0xED7AEDD0, 0x431743FC,
        0xF866F8CB, 0xFB94FBB1, 0x37A137D3, 0xFA1DFA40, 0xC23DC268, 0xB4F0B4CC, 0x32DE325D, 0x9CB39C71,
        0x560B56E7, 0xE372E3DA, 0x87A78760, 0x151C151B, 0xF9EFF93A, 0x63D163BF, 0x345334A9, 0x9A3E9A85,
        0xB18FB142, 0x7C337CD1, 0x8826889B, 0x3D5F3DA6, 0xA1ECA1D7, 0xE476E4DF, 0x812A8194, 0x91499101,
        0x0F810FFB, 0xEE88EEAA, 0x16EE1661, 0xD721D773, 0x97C497F5, 0xA51AA5A8, 0xFEEBFE3F, 0x6DD96DB5,
        0x78C578AE, 0xC539C56D, 0x1D991DE5, 0x76CD76A4, 0x3EAD3EDC, 0xCB31CB67, 0xB68BB647, 0xEF01EF5B,
        0x1218121E, 0x602360C5, 0x6ADD6AB0, 0x4D1F4DF6, 0xCE4ECEE9, 0xDE2DDE7C, 0x55F9559D, 0x7E487E5A,
        0x214F21B2, 0x03F2037A, 0xA065A026, 0x5E8E5E19, 0x5A785A66, 0x655C654B, 0x6258624E, 0xFD19FD45,
        0x068D06F4, 0x40E54086, 0xF298F2BE, 0x335733AC, 0x17671790, 0x057F058E, 0xE805E85E, 0x4F644F7D,
        0x89AF896A, 0x10631095, 0x74B6742F, 0x0AFE0A75, 0x5CF55C92, 0x9BB79B74, 0x2D3C2D33, 0x30A530D6,
        0x2ECE2E49, 0x49E94989, 0x46684672, 0x77447755, 0xA8E0A8D8, 0x964D9604, 0x284328BD, 0xA969A929,
        0xD929D979, 0x862E8691, 0xD1ACD187, 0xF415F44A, 0x8D598D15, 0xD6A8D682, 0xB90AB9BC, 0x429E420D,
        0xF66EF6C1, 0x2F472FB8, 0xDDDFDD06, 0x23342339, 0xCC35CC62, 0xF16AF1C4, 0xC1CFC112, 0x85DC85EB,
        0x8F228F9E, 0x71C971A1, 0x90C090F0, 0xAA9BAA53, 0x018901F1, 0x8BD48BE1, 0x4EED4E8C, 0x8EAB8E6F,
        0xAB12ABA2, 0x6FA26F3E, 0xE60DE654, 0xDB52DBF2, 0x92BB927B, 0xB702B7B6, 0x692F69CA, 0x39A939D9,
        0xD3D7D30C, 0xA761A723, 0xA21EA2AD, 0xC3B4C399, 0x6C506C44, 0x07040705, 0x04F6047F, 0x27C22746,
        0xAC16ACA7, 0xD025D076, 0x50865013, 0xDC56DCF7, 0x8455841A, 0xE109E151, 0x7ABE7A25, 0x139113EF
    ];

    /**
     * M-Table
     *
     * @var array
     */
    private static $m3 = [
        0xD939A9D9, 0x90176790, 0x719CB371, 0xD2A6E8D2, 0x05070405, 0x9852FD98, 0x6580A365, 0xDFE476DF,
        0x08459A08, 0x024B9202, 0xA0E080A0, 0x665A7866, 0xDDAFE4DD, 0xB06ADDB0, 0xBF63D1BF, 0x362A3836,
        0x54E60D54, 0x4320C643, 0x62CC3562, 0xBEF298BE, 0x1E12181E, 0x24EBF724, 0xD7A1ECD7, 0x77416C77,
        0xBD2843BD, 0x32BC7532, 0xD47B37D4, 0x9B88269B, 0x700DFA70, 0xF94413F9, 0xB1FB94B1, 0x5A7E485A,
        0x7A03F27A, 0xE48CD0E4, 0x47B68B47, 0x3C24303C, 0xA5E784A5, 0x416B5441, 0x06DDDF06, 0xC56023C5,
        0x45FD1945, 0xA33A5BA3, 0x68C23D68, 0x158D5915, 0x21ECF321, 0x3166AE31, 0x3E6FA23E, 0x16578216,
        0x95106395, 0x5BEF015B, 0x4DB8834D, 0x91862E91, 0xB56DD9B5, 0x1F83511F, 0x53AA9B53, 0x635D7C63,
        0x3B68A63B, 0x3FFEEB3F, 0xD630A5D6, 0x257ABE25, 0xA7AC16A7, 0x0F090C0F, 0x35F0E335, 0x23A76123,
        0xF090C0F0, 0xAFE98CAF, 0x809D3A80, 0x925CF592, 0x810C7381, 0x27312C27, 0x76D02576, 0xE7560BE7,
        0x7B92BB7B, 0xE9CE4EE9, 0xF10189F1, 0x9F1E6B9F, 0xA93453A9, 0xC4F16AC4, 0x99C3B499, 0x975BF197,
        0x8347E183, 0x6B18E66B, 0xC822BDC8, 0x0E98450E, 0x6E1FE26E, 0xC9B3F4C9, 0x2F74B62F, 0xCBF866CB,
        0xFF99CCFF, 0xEA1495EA, 0xED5803ED, 0xF7DC56F7, 0xE18BD4E1, 0x1B151C1B, 0xADA21EAD, 0x0CD3D70C,
        0x2BE2FB2B, 0x1DC8C31D, 0x195E8E19, 0xC22CB5C2, 0x8949E989, 0x12C1CF12, 0x7E95BF7E, 0x207DBA20,
        0x6411EA64, 0x840B7784, 0x6DC5396D, 0x6A89AF6A, 0xD17C33D1, 0xA171C9A1, 0xCEFF62CE, 0x37BB7137,
        0xFB0F81FB, 0x3DB5793D, 0x51E10951, 0xDC3EADDC, 0x2D3F242D, 0xA476CDA4, 0x9D55F99D, 0xEE82D8EE,
        0x8640E586, 0xAE78C5AE, 0xCD25B9CD, 0x04964D04, 0x55774455, 0x0A0E080A, 0x13508613, 0x30F7E730,
        0xD337A1D3, 0x40FA1D40, 0x3461AA34, 0x8C4EED8C, 0xB3B006B3, 0x6C54706C, 0x2A73B22A, 0x523BD252,
        0x0B9F410B, 0x8B027B8B, 0x88D8A088, 0x4FF3114F, 0x67CB3167, 0x4627C246, 0xC06727C0, 0xB4FC90B4,
        0x28382028, 0x7F04F67F, 0x78486078, 0x2EE5FF2E, 0x074C9607, 0x4B655C4B, 0xC72BB1C7, 0x6F8EAB6F,
        0x0D429E0D, 0xBBF59CBB, 0xF2DB52F2, 0xF34A1BF3, 0xA63D5FA6, 0x59A49359, 0xBCB90ABC, 0x3AF9EF3A,
        0xEF1391EF, 0xFE0885FE, 0x01914901, 0x6116EE61, 0x7CDE2D7C, 0xB2214FB2, 0x42B18F42, 0xDB723BDB,
        0xB82F47B8, 0x48BF8748, 0x2CAE6D2C, 0xE3C046E3, 0x573CD657, 0x859A3E85, 0x29A96929, 0x7D4F647D,
        0x94812A94, 0x492ECE49, 0x17C6CB17, 0xCA692FCA, 0xC3BDFCC3, 0x5CA3975C, 0x5EE8055E, 0xD0ED7AD0,
        0x87D1AC87, 0x8E057F8E, 0xBA64D5BA, 0xA8A51AA8, 0xB7264BB7, 0xB9BE0EB9, 0x6087A760, 0xF8D55AF8,
        0x22362822, 0x111B1411, 0xDE753FDE, 0x79D92979, 0xAAEE88AA, 0x332D3C33, 0x5F794C5F, 0xB6B702B6,
        0x96CAB896, 0x5835DA58, 0x9CC4B09C, 0xFC4317FC, 0x1A84551A, 0xF64D1FF6, 0x1C598A1C, 0x38B27D38,
        0xAC3357AC, 0x18CFC718, 0xF4068DF4, 0x69537469, 0x749BB774, 0xF597C4F5, 0x56AD9F56, 0xDAE372DA,
        0xD5EA7ED5, 0x4AF4154A, 0x9E8F229E, 0xA2AB12A2, 0x4E62584E, 0xE85F07E8, 0xE51D99E5, 0x39233439,
        0xC1F66EC1, 0x446C5044, 0x5D32DE5D, 0x72466872, 0x26A06526, 0x93CDBC93, 0x03DADB03, 0xC6BAF8C6,
        0xFA9EC8FA, 0x82D6A882, 0xCF6E2BCF, 0x50704050, 0xEB85DCEB, 0x750AFE75, 0x8A93328A, 0x8DDFA48D,
        0x4C29CA4C, 0x141C1014, 0x73D72173, 0xCCB4F0CC, 0x09D4D309, 0x108A5D10, 0xE2510FE2, 0x00000000,
        0x9A196F9A, 0xE01A9DE0, 0x8F94368F, 0xE6C742E6, 0xECC94AEC, 0xFDD25EFD, 0xAB7FC1AB, 0xD8A8E0D8
    ];

    /**
     * The Key Schedule Array
     *
     * @var array
     */
    private $K = [];

    /**
     * The Key depended S-Table 0
     *
     * @var array
     */
    private $S0 = [];

    /**
     * The Key depended S-Table 1
     *
     * @var array
     */
    private $S1 = [];

    /**
     * The Key depended S-Table 2
     *
     * @var array
     */
    private $S2 = [];

    /**
     * The Key depended S-Table 3
     *
     * @var array
     */
    private $S3 = [];

    /**
     * Holds the last used key
     *
     * @var array
     */
    private $kl;

    /**
     * The Key Length (in bytes)
     *
     * @see Crypt_Twofish::setKeyLength()
     * @var int
     */
    protected $key_length = 16;

    /**
     * Default Constructor.
     *
     * @param string $mode
     * @throws BadModeException if an invalid / unsupported mode is provided
     */
    public function __construct($mode)
    {
        parent::__construct($mode);

        if ($this->mode == self::MODE_STREAM) {
            throw new BadModeException('Block ciphers cannot be ran in stream mode');
        }
    }

    /**
     * Initialize Static Variables
     */
    protected static function initialize_static_variables()
    {
        if (is_float(self::$m3[0])) {
            self::$m0 = array_map('intval', self::$m0);
            self::$m1 = array_map('intval', self::$m1);
            self::$m2 = array_map('intval', self::$m2);
            self::$m3 = array_map('intval', self::$m3);
            self::$q0 = array_map('intval', self::$q0);
            self::$q1 = array_map('intval', self::$q1);
        }

        parent::initialize_static_variables();
    }

    /**
     * Sets the key length.
     *
     * Valid key lengths are 128, 192 or 256 bits
     *
     * @param int $length
     */
    public function setKeyLength($length)
    {
        switch ($length) {
            case 128:
            case 192:
            case 256:
                break;
            default:
                throw new \LengthException('Key of size ' . $length . ' not supported by this algorithm. Only keys of sizes 16, 24 or 32 supported');
        }

        parent::setKeyLength($length);
    }

    /**
     * Sets the key.
     *
     * Rijndael supports five different key lengths
     *
     * @see setKeyLength()
     * @param string $key
     * @throws \LengthException if the key length isn't supported
     */
    public function setKey($key)
    {
        switch (strlen($key)) {
            case 16:
            case 24:
            case 32:
                break;
            default:
                throw new \LengthException('Key of size ' . strlen($key) . ' not supported by this algorithm. Only keys of sizes 16, 24 or 32 supported');
        }

        parent::setKey($key);
    }

    /**
     * Setup the key (expansion)
     *
     * @see Common\SymmetricKey::_setupKey()
     */
    protected function setupKey()
    {
        if (isset($this->kl['key']) && $this->key === $this->kl['key']) {
            // already expanded
            return;
        }
        $this->kl = ['key' => $this->key];

        /* Key expanding and generating the key-depended s-boxes */
        $le_longs = unpack('V*', $this->key);
        $key = unpack('C*', $this->key);
        $m0 = self::$m0;
        $m1 = self::$m1;
        $m2 = self::$m2;
        $m3 = self::$m3;
        $q0 = self::$q0;
        $q1 = self::$q1;

        $K = $S0 = $S1 = $S2 = $S3 = [];

        switch (strlen($this->key)) {
            case 16:
                list($s7, $s6, $s5, $s4) = $this->mdsrem($le_longs[1], $le_longs[2]);
                list($s3, $s2, $s1, $s0) = $this->mdsrem($le_longs[3], $le_longs[4]);
                for ($i = 0, $j = 1; $i < 40; $i += 2, $j += 2) {
                    $A = $m0[$q0[$q0[$i] ^ $key[ 9]] ^ $key[1]] ^
                         $m1[$q0[$q1[$i] ^ $key[10]] ^ $key[2]] ^
                         $m2[$q1[$q0[$i] ^ $key[11]] ^ $key[3]] ^
                         $m3[$q1[$q1[$i] ^ $key[12]] ^ $key[4]];
                    $B = $m0[$q0[$q0[$j] ^ $key[13]] ^ $key[5]] ^
                         $m1[$q0[$q1[$j] ^ $key[14]] ^ $key[6]] ^
                         $m2[$q1[$q0[$j] ^ $key[15]] ^ $key[7]] ^
                         $m3[$q1[$q1[$j] ^ $key[16]] ^ $key[8]];
                    $B = ($B << 8) | ($B >> 24 & 0xff);
                    $A = self::safe_intval($A + $B);
                    $K[] = $A;
                    $A = self::safe_intval($A + $B);
                    $K[] = ($A << 9 | $A >> 23 & 0x1ff);
                }
                for ($i = 0; $i < 256; ++$i) {
                    $S0[$i] = $m0[$q0[$q0[$i] ^ $s4] ^ $s0];
                    $S1[$i] = $m1[$q0[$q1[$i] ^ $s5] ^ $s1];
                    $S2[$i] = $m2[$q1[$q0[$i] ^ $s6] ^ $s2];
                    $S3[$i] = $m3[$q1[$q1[$i] ^ $s7] ^ $s3];
                }
                break;
            case 24:
                list($sb, $sa, $s9, $s8) = $this->mdsrem($le_longs[1], $le_longs[2]);
                list($s7, $s6, $s5, $s4) = $this->mdsrem($le_longs[3], $le_longs[4]);
                list($s3, $s2, $s1, $s0) = $this->mdsrem($le_longs[5], $le_longs[6]);
                for ($i = 0, $j = 1; $i < 40; $i += 2, $j += 2) {
                    $A = $m0[$q0[$q0[$q1[$i] ^ $key[17]] ^ $key[ 9]] ^ $key[1]] ^
                         $m1[$q0[$q1[$q1[$i] ^ $key[18]] ^ $key[10]] ^ $key[2]] ^
                         $m2[$q1[$q0[$q0[$i] ^ $key[19]] ^ $key[11]] ^ $key[3]] ^
                         $m3[$q1[$q1[$q0[$i] ^ $key[20]] ^ $key[12]] ^ $key[4]];
                    $B = $m0[$q0[$q0[$q1[$j] ^ $key[21]] ^ $key[13]] ^ $key[5]] ^
                         $m1[$q0[$q1[$q1[$j] ^ $key[22]] ^ $key[14]] ^ $key[6]] ^
                         $m2[$q1[$q0[$q0[$j] ^ $key[23]] ^ $key[15]] ^ $key[7]] ^
                         $m3[$q1[$q1[$q0[$j] ^ $key[24]] ^ $key[16]] ^ $key[8]];
                    $B = ($B << 8) | ($B >> 24 & 0xff);
                    $A = self::safe_intval($A + $B);
                    $K[] = $A;
                    $A = self::safe_intval($A + $B);
                    $K[] = ($A << 9 | $A >> 23 & 0x1ff);
                }
                for ($i = 0; $i < 256; ++$i) {
                    $S0[$i] = $m0[$q0[$q0[$q1[$i] ^ $s8] ^ $s4] ^ $s0];
                    $S1[$i] = $m1[$q0[$q1[$q1[$i] ^ $s9] ^ $s5] ^ $s1];
                    $S2[$i] = $m2[$q1[$q0[$q0[$i] ^ $sa] ^ $s6] ^ $s2];
                    $S3[$i] = $m3[$q1[$q1[$q0[$i] ^ $sb] ^ $s7] ^ $s3];
                }
                break;
            default: // 32
                list($sf, $se, $sd, $sc) = $this->mdsrem($le_longs[1], $le_longs[2]);
                list($sb, $sa, $s9, $s8) = $this->mdsrem($le_longs[3], $le_longs[4]);
                list($s7, $s6, $s5, $s4) = $this->mdsrem($le_longs[5], $le_longs[6]);
                list($s3, $s2, $s1, $s0) = $this->mdsrem($le_longs[7], $le_longs[8]);
                for ($i = 0, $j = 1; $i < 40; $i += 2, $j += 2) {
                    $A = $m0[$q0[$q0[$q1[$q1[$i] ^ $key[25]] ^ $key[17]] ^ $key[ 9]] ^ $key[1]] ^
                         $m1[$q0[$q1[$q1[$q0[$i] ^ $key[26]] ^ $key[18]] ^ $key[10]] ^ $key[2]] ^
                         $m2[$q1[$q0[$q0[$q0[$i] ^ $key[27]] ^ $key[19]] ^ $key[11]] ^ $key[3]] ^
                         $m3[$q1[$q1[$q0[$q1[$i] ^ $key[28]] ^ $key[20]] ^ $key[12]] ^ $key[4]];
                    $B = $m0[$q0[$q0[$q1[$q1[$j] ^ $key[29]] ^ $key[21]] ^ $key[13]] ^ $key[5]] ^
                         $m1[$q0[$q1[$q1[$q0[$j] ^ $key[30]] ^ $key[22]] ^ $key[14]] ^ $key[6]] ^
                         $m2[$q1[$q0[$q0[$q0[$j] ^ $key[31]] ^ $key[23]] ^ $key[15]] ^ $key[7]] ^
                         $m3[$q1[$q1[$q0[$q1[$j] ^ $key[32]] ^ $key[24]] ^ $key[16]] ^ $key[8]];
                    $B = ($B << 8) | ($B >> 24 & 0xff);
                    $A = self::safe_intval($A + $B);
                    $K[] = $A;
                    $A = self::safe_intval($A + $B);
                    $K[] = ($A << 9 | $A >> 23 & 0x1ff);
                }
                for ($i = 0; $i < 256; ++$i) {
                    $S0[$i] = $m0[$q0[$q0[$q1[$q1[$i] ^ $sc] ^ $s8] ^ $s4] ^ $s0];
                    $S1[$i] = $m1[$q0[$q1[$q1[$q0[$i] ^ $sd] ^ $s9] ^ $s5] ^ $s1];
                    $S2[$i] = $m2[$q1[$q0[$q0[$q0[$i] ^ $se] ^ $sa] ^ $s6] ^ $s2];
                    $S3[$i] = $m3[$q1[$q1[$q0[$q1[$i] ^ $sf] ^ $sb] ^ $s7] ^ $s3];
                }
        }

        $this->K  = $K;
        $this->S0 = $S0;
        $this->S1 = $S1;
        $this->S2 = $S2;
        $this->S3 = $S3;
    }

    /**
     * _mdsrem function using by the twofish cipher algorithm
     *
     * @param string $A
     * @param string $B
     * @return array
     */
    private function mdsrem($A, $B)
    {
        // No gain by unrolling this loop.
        for ($i = 0; $i < 8; ++$i) {
            // Get most significant coefficient.
            $t = 0xff & ($B >> 24);

            // Shift the others up.
            $B = ($B << 8) | (0xff & ($A >> 24));
            $A <<= 8;

            $u = $t << 1;

            // Subtract the modular polynomial on overflow.
            if ($t & 0x80) {
                $u ^= 0x14d;
            }

            // Remove t * (a * x^2 + 1).
            $B ^= $t ^ ($u << 16);

            // Form u = a*t + t/a = t*(a + 1/a).
            $u ^= 0x7fffffff & ($t >> 1);

            // Add the modular polynomial on underflow.
            if ($t & 0x01) {
                $u ^= 0xa6 ;
            }

            // Remove t * (a + 1/a) * (x^3 + x).
            $B ^= ($u << 24) | ($u << 8);
        }

        return [
            0xff & $B >> 24,
            0xff & $B >> 16,
            0xff & $B >>  8,
            0xff & $B];
    }

    /**
     * Encrypts a block
     *
     * @param string $in
     * @return string
     */
    protected function encryptBlock($in)
    {
        $S0 = $this->S0;
        $S1 = $this->S1;
        $S2 = $this->S2;
        $S3 = $this->S3;
        $K  = $this->K;

        $in = unpack("V4", $in);
        $R0 = $K[0] ^ $in[1];
        $R1 = $K[1] ^ $in[2];
        $R2 = $K[2] ^ $in[3];
        $R3 = $K[3] ^ $in[4];

        $ki = 7;
        while ($ki < 39) {
            $t0 = $S0[ $R0        & 0xff] ^
                  $S1[($R0 >>  8) & 0xff] ^
                  $S2[($R0 >> 16) & 0xff] ^
                  $S3[($R0 >> 24) & 0xff];
            $t1 = $S0[($R1 >> 24) & 0xff] ^
                  $S1[ $R1        & 0xff] ^
                  $S2[($R1 >>  8) & 0xff] ^
                  $S3[($R1 >> 16) & 0xff];
            $R2 ^= self::safe_intval($t0 + $t1 + $K[++$ki]);
            $R2 = ($R2 >> 1 & 0x7fffffff) | ($R2 << 31);
            $R3 = ((($R3 >> 31) & 1) | ($R3 << 1)) ^ self::safe_intval($t0 + ($t1 << 1) + $K[++$ki]);

            $t0 = $S0[ $R2        & 0xff] ^
                  $S1[($R2 >>  8) & 0xff] ^
                  $S2[($R2 >> 16) & 0xff] ^
                  $S3[($R2 >> 24) & 0xff];
            $t1 = $S0[($R3 >> 24) & 0xff] ^
                  $S1[ $R3        & 0xff] ^
                  $S2[($R3 >>  8) & 0xff] ^
                  $S3[($R3 >> 16) & 0xff];
            $R0 ^= self::safe_intval($t0 + $t1 + $K[++$ki]);
            $R0 = ($R0 >> 1 & 0x7fffffff) | ($R0 << 31);
            $R1 = ((($R1 >> 31) & 1) | ($R1 << 1)) ^ self::safe_intval($t0 + ($t1 << 1) + $K[++$ki]);
        }

        // @codingStandardsIgnoreStart
        return pack("V4", $K[4] ^ $R2,
                          $K[5] ^ $R3,
                          $K[6] ^ $R0,
                          $K[7] ^ $R1);
        // @codingStandardsIgnoreEnd
    }

    /**
     * Decrypts a block
     *
     * @param string $in
     * @return string
     */
    protected function decryptBlock($in)
    {
        $S0 = $this->S0;
        $S1 = $this->S1;
        $S2 = $this->S2;
        $S3 = $this->S3;
        $K  = $this->K;

        $in = unpack("V4", $in);
        $R0 = $K[4] ^ $in[1];
        $R1 = $K[5] ^ $in[2];
        $R2 = $K[6] ^ $in[3];
        $R3 = $K[7] ^ $in[4];

        $ki = 40;
        while ($ki > 8) {
            $t0 = $S0[$R0       & 0xff] ^
                  $S1[$R0 >>  8 & 0xff] ^
                  $S2[$R0 >> 16 & 0xff] ^
                  $S3[$R0 >> 24 & 0xff];
            $t1 = $S0[$R1 >> 24 & 0xff] ^
                  $S1[$R1       & 0xff] ^
                  $S2[$R1 >>  8 & 0xff] ^
                  $S3[$R1 >> 16 & 0xff];
            $R3 ^= self::safe_intval($t0 + ($t1 << 1) + $K[--$ki]);
            $R3 = $R3 >> 1 & 0x7fffffff | $R3 << 31;
            $R2 = ($R2 >> 31 & 0x1 | $R2 << 1) ^ self::safe_intval($t0 + $t1 + $K[--$ki]);

            $t0 = $S0[$R2       & 0xff] ^
                  $S1[$R2 >>  8 & 0xff] ^
                  $S2[$R2 >> 16 & 0xff] ^
                  $S3[$R2 >> 24 & 0xff];
            $t1 = $S0[$R3 >> 24 & 0xff] ^
                  $S1[$R3       & 0xff] ^
                  $S2[$R3 >>  8 & 0xff] ^
                  $S3[$R3 >> 16 & 0xff];
            $R1 ^= self::safe_intval($t0 + ($t1 << 1) + $K[--$ki]);
            $R1 = $R1 >> 1 & 0x7fffffff | $R1 << 31;
            $R0 = ($R0 >> 31 & 0x1 | $R0 << 1) ^ self::safe_intval($t0 + $t1 + $K[--$ki]);
        }

        // @codingStandardsIgnoreStart
        return pack("V4", $K[0] ^ $R2,
                          $K[1] ^ $R3,
                          $K[2] ^ $R0,
                          $K[3] ^ $R1);
        // @codingStandardsIgnoreEnd
    }

    /**
     * Setup the performance-optimized function for de/encrypt()
     *
     * @see Common\SymmetricKey::_setupInlineCrypt()
     */
    protected function setupInlineCrypt()
    {
        $K = $this->K;
        $init_crypt = '
            static $S0, $S1, $S2, $S3;
            if (!$S0) {
                for ($i = 0; $i < 256; ++$i) {
                    $S0[] = (int)$this->S0[$i];
                    $S1[] = (int)$this->S1[$i];
                    $S2[] = (int)$this->S2[$i];
                    $S3[] = (int)$this->S3[$i];
                }
            }
        ';

        $safeint = self::safe_intval_inline();

        // Generating encrypt code:
        $encrypt_block = '
            $in = unpack("V4", $in);
            $R0 = ' . $K[0] . ' ^ $in[1];
            $R1 = ' . $K[1] . ' ^ $in[2];
            $R2 = ' . $K[2] . ' ^ $in[3];
            $R3 = ' . $K[3] . ' ^ $in[4];
        ';
        for ($ki = 7, $i = 0; $i < 8; ++$i) {
            $encrypt_block .= '
                $t0 = $S0[ $R0        & 0xff] ^
                      $S1[($R0 >>  8) & 0xff] ^
                      $S2[($R0 >> 16) & 0xff] ^
                      $S3[($R0 >> 24) & 0xff];
                $t1 = $S0[($R1 >> 24) & 0xff] ^
                      $S1[ $R1        & 0xff] ^
                      $S2[($R1 >>  8) & 0xff] ^
                      $S3[($R1 >> 16) & 0xff];
                    $R2^= ' . sprintf($safeint, '$t0 + $t1 + ' . $K[++$ki]) . ';
                $R2 = ($R2 >> 1 & 0x7fffffff) | ($R2 << 31);
                $R3 = ((($R3 >> 31) & 1) | ($R3 << 1)) ^ ' . sprintf($safeint, '($t0 + ($t1 << 1) + ' . $K[++$ki] . ')') . ';

                $t0 = $S0[ $R2        & 0xff] ^
                      $S1[($R2 >>  8) & 0xff] ^
                      $S2[($R2 >> 16) & 0xff] ^
                      $S3[($R2 >> 24) & 0xff];
                $t1 = $S0[($R3 >> 24) & 0xff] ^
                      $S1[ $R3        & 0xff] ^
                      $S2[($R3 >>  8) & 0xff] ^
                      $S3[($R3 >> 16) & 0xff];
                $R0^= ' . sprintf($safeint, '($t0 + $t1 + ' . $K[++$ki] . ')') . ';
                $R0 = ($R0 >> 1 & 0x7fffffff) | ($R0 << 31);
                $R1 = ((($R1 >> 31) & 1) | ($R1 << 1)) ^ ' . sprintf($safeint, '($t0 + ($t1 << 1) + ' . $K[++$ki] . ')') . ';
            ';
        }
        $encrypt_block .= '
            $in = pack("V4", ' . $K[4] . ' ^ $R2,
                             ' . $K[5] . ' ^ $R3,
                             ' . $K[6] . ' ^ $R0,
                             ' . $K[7] . ' ^ $R1);
        ';

        // Generating decrypt code:
        $decrypt_block = '
            $in = unpack("V4", $in);
            $R0 = ' . $K[4] . ' ^ $in[1];
            $R1 = ' . $K[5] . ' ^ $in[2];
            $R2 = ' . $K[6] . ' ^ $in[3];
            $R3 = ' . $K[7] . ' ^ $in[4];
        ';
        for ($ki = 40, $i = 0; $i < 8; ++$i) {
            $decrypt_block .= '
                $t0 = $S0[$R0       & 0xff] ^
                      $S1[$R0 >>  8 & 0xff] ^
                      $S2[$R0 >> 16 & 0xff] ^
                      $S3[$R0 >> 24 & 0xff];
                $t1 = $S0[$R1 >> 24 & 0xff] ^
                      $S1[$R1       & 0xff] ^
                      $S2[$R1 >>  8 & 0xff] ^
                      $S3[$R1 >> 16 & 0xff];
                $R3^= ' . sprintf($safeint, '$t0 + ($t1 << 1) + ' . $K[--$ki]) . ';
                $R3 = $R3 >> 1 & 0x7fffffff | $R3 << 31;
                $R2 = ($R2 >> 31 & 0x1 | $R2 << 1) ^ ' . sprintf($safeint, '($t0 + $t1 + ' . $K[--$ki] . ')') . ';

                $t0 = $S0[$R2       & 0xff] ^
                      $S1[$R2 >>  8 & 0xff] ^
                      $S2[$R2 >> 16 & 0xff] ^
                      $S3[$R2 >> 24 & 0xff];
                $t1 = $S0[$R3 >> 24 & 0xff] ^
                      $S1[$R3       & 0xff] ^
                      $S2[$R3 >>  8 & 0xff] ^
                      $S3[$R3 >> 16 & 0xff];
                $R1^= ' . sprintf($safeint, '$t0 + ($t1 << 1) + ' . $K[--$ki]) . ';
                $R1 = $R1 >> 1 & 0x7fffffff | $R1 << 31;
                $R0 = ($R0 >> 31 & 0x1 | $R0 << 1) ^ ' . sprintf($safeint, '($t0 + $t1 + ' . $K[--$ki] . ')') . ';
            ';
        }
        $decrypt_block .= '
            $in = pack("V4", ' . $K[0] . ' ^ $R2,
                             ' . $K[1] . ' ^ $R3,
                             ' . $K[2] . ' ^ $R0,
                             ' . $K[3] . ' ^ $R1);
        ';

        $this->inline_crypt = $this->createInlineCryptFunction(
            [
               'init_crypt'    => $init_crypt,
               'init_encrypt'  => '',
               'init_decrypt'  => '',
               'encrypt_block' => $encrypt_block,
               'decrypt_block' => $decrypt_block
            ]
        );
    }
}
<?php

/**
 * BadConfigurationException
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2015 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\Exception;

/**
 * BadConfigurationException
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
class BadConfigurationException extends \RuntimeException
{
}
<?php

/**
 * BadDecryptionException
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2015 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\Exception;

/**
 * BadDecryptionException
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
class BadDecryptionException extends \RuntimeException
{
}
<?php

/**
 * BadModeException
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2015 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\Exception;

/**
 * BadModeException
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
class BadModeException extends \RuntimeException
{
}
<?php

/**
 * ConnectionClosedException
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2015 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\Exception;

/**
 * ConnectionClosedException
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
class ConnectionClosedException extends \RuntimeException
{
}
<?php

/**
 * FileNotFoundException
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2015 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\Exception;

/**
 * FileNotFoundException
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
class FileNotFoundException extends \RuntimeException
{
}
<?php

/**
 * InconsistentSetupException
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2015 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\Exception;

/**
 * InconsistentSetupException
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
class InconsistentSetupException extends \RuntimeException
{
}
<?php

/**
 * InsufficientSetupException
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2015 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\Exception;

/**
 * InsufficientSetupException
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
class InsufficientSetupException extends \RuntimeException
{
}
<?php

namespace phpseclib3\Exception;

/**
 * Indicates an absent or malformed packet length header
 */
class InvalidPacketLengthException extends ConnectionClosedException
{
}
<?php

/**
 * NoKeyLoadedException
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2015 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\Exception;

/**
 * NoKeyLoadedException
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
class NoKeyLoadedException extends \RuntimeException
{
}
<?php

/**
 * NoSupportedAlgorithmsException
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2015 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\Exception;

/**
 * NoSupportedAlgorithmsException
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
class NoSupportedAlgorithmsException extends \RuntimeException
{
}
<?php

namespace phpseclib3\Exception;

/**
 * Indicates a timeout awaiting server response
 */
class TimeoutException extends \RuntimeException
{
}
<?php

/**
 * UnableToConnectException
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2015 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\Exception;

/**
 * UnableToConnectException
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
class UnableToConnectException extends \RuntimeException
{
}
<?php

/**
 * UnsupportedAlgorithmException
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2015 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\Exception;

/**
 * UnsupportedAlgorithmException
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
class UnsupportedAlgorithmException extends \RuntimeException
{
}
<?php

/**
 * UnsupportedCurveException
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2015 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\Exception;

/**
 * UnsupportedCurveException
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
class UnsupportedCurveException extends \RuntimeException
{
}
<?php

/**
 * UnsupportedFormatException
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2015 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\Exception;

/**
 * UnsupportedFormatException
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
class UnsupportedFormatException extends \RuntimeException
{
}
<?php

/**
 * UnsupportedOperationException
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2015 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\Exception;

/**
 * UnsupportedOperationException
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
class UnsupportedOperationException extends \RuntimeException
{
}
<?php

/**
 * Pure-PHP ANSI Decoder
 *
 * PHP version 5
 *
 * If you call read() in \phpseclib3\Net\SSH2 you may get {@link http://en.wikipedia.org/wiki/ANSI_escape_code ANSI escape codes} back.
 * They'd look like chr(0x1B) . '[00m' or whatever (0x1B = ESC).  They tell a
 * {@link http://en.wikipedia.org/wiki/Terminal_emulator terminal emulator} how to format the characters, what
 * color to display them in, etc. \phpseclib3\File\ANSI is a {@link http://en.wikipedia.org/wiki/VT100 VT100} terminal emulator.
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2012 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\File;

/**
 * Pure-PHP ANSI Decoder
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
class ANSI
{
    /**
     * Max Width
     *
     * @var int
     */
    private $max_x;

    /**
     * Max Height
     *
     * @var int
     */
    private $max_y;

    /**
     * Max History
     *
     * @var int
     */
    private $max_history;

    /**
     * History
     *
     * @var array
     */
    private $history;

    /**
     * History Attributes
     *
     * @var array
     */
    private $history_attrs;

    /**
     * Current Column
     *
     * @var int
     */
    private $x;

    /**
     * Current Row
     *
     * @var int
     */
    private $y;

    /**
     * Old Column
     *
     * @var int
     */
    private $old_x;

    /**
     * Old Row
     *
     * @var int
     */
    private $old_y;

    /**
     * An empty attribute cell
     *
     * @var object
     */
    private $base_attr_cell;

    /**
     * The current attribute cell
     *
     * @var object
     */
    private $attr_cell;

    /**
     * An empty attribute row
     *
     * @var array
     */
    private $attr_row;

    /**
     * The current screen text
     *
     * @var list<string>
     */
    private $screen;

    /**
     * The current screen attributes
     *
     * @var array
     */
    private $attrs;

    /**
     * Current ANSI code
     *
     * @var string
     */
    private $ansi;

    /**
     * Tokenization
     *
     * @var array
     */
    private $tokenization;

    /**
     * Default Constructor.
     *
     * @return ANSI
     */
    public function __construct()
    {
        $attr_cell = new \stdClass();
        $attr_cell->bold = false;
        $attr_cell->underline = false;
        $attr_cell->blink = false;
        $attr_cell->background = 'black';
        $attr_cell->foreground = 'white';
        $attr_cell->reverse = false;
        $this->base_attr_cell = clone $attr_cell;
        $this->attr_cell = clone $attr_cell;

        $this->setHistory(200);
        $this->setDimensions(80, 24);
    }

    /**
     * Set terminal width and height
     *
     * Resets the screen as well
     *
     * @param int $x
     * @param int $y
     */
    public function setDimensions($x, $y)
    {
        $this->max_x = $x - 1;
        $this->max_y = $y - 1;
        $this->x = $this->y = 0;
        $this->history = $this->history_attrs = [];
        $this->attr_row = array_fill(0, $this->max_x + 2, $this->base_attr_cell);
        $this->screen = array_fill(0, $this->max_y + 1, '');
        $this->attrs = array_fill(0, $this->max_y + 1, $this->attr_row);
        $this->ansi = '';
    }

    /**
     * Set the number of lines that should be logged past the terminal height
     *
     * @param int $history
     */
    public function setHistory($history)
    {
        $this->max_history = $history;
    }

    /**
     * Load a string
     *
     * @param string $source
     */
    public function loadString($source)
    {
        $this->setDimensions($this->max_x + 1, $this->max_y + 1);
        $this->appendString($source);
    }

    /**
     * Appdend a string
     *
     * @param string $source
     */
    public function appendString($source)
    {
        $this->tokenization = [''];
        for ($i = 0; $i < strlen($source); $i++) {
            if (strlen($this->ansi)) {
                $this->ansi .= $source[$i];
                $chr = ord($source[$i]);
                // http://en.wikipedia.org/wiki/ANSI_escape_code#Sequence_elements
                // single character CSI's not currently supported
                switch (true) {
                    case $this->ansi == "\x1B=":
                        $this->ansi = '';
                        continue 2;
                    case strlen($this->ansi) == 2 && $chr >= 64 && $chr <= 95 && $chr != ord('['):
                    case strlen($this->ansi) > 2 && $chr >= 64 && $chr <= 126:
                        break;
                    default:
                        continue 2;
                }
                $this->tokenization[] = $this->ansi;
                $this->tokenization[] = '';
                // http://ascii-table.com/ansi-escape-sequences-vt-100.php
                switch ($this->ansi) {
                    case "\x1B[H": // Move cursor to upper left corner
                        $this->old_x = $this->x;
                        $this->old_y = $this->y;
                        $this->x = $this->y = 0;
                        break;
                    case "\x1B[J": // Clear screen from cursor down
                        $this->history = array_merge($this->history, array_slice(array_splice($this->screen, $this->y + 1), 0, $this->old_y));
                        $this->screen = array_merge($this->screen, array_fill($this->y, $this->max_y, ''));

                        $this->history_attrs = array_merge($this->history_attrs, array_slice(array_splice($this->attrs, $this->y + 1), 0, $this->old_y));
                        $this->attrs = array_merge($this->attrs, array_fill($this->y, $this->max_y, $this->attr_row));

                        if (count($this->history) == $this->max_history) {
                            array_shift($this->history);
                            array_shift($this->history_attrs);
                        }
                        // fall-through
                    case "\x1B[K": // Clear screen from cursor right
                        $this->screen[$this->y] = substr($this->screen[$this->y], 0, $this->x);

                        array_splice($this->attrs[$this->y], $this->x + 1, $this->max_x - $this->x, array_fill($this->x, $this->max_x - ($this->x - 1), $this->base_attr_cell));
                        break;
                    case "\x1B[2K": // Clear entire line
                        $this->screen[$this->y] = str_repeat(' ', $this->x);
                        $this->attrs[$this->y] = $this->attr_row;
                        break;
                    case "\x1B[?1h": // set cursor key to application
                    case "\x1B[?25h": // show the cursor
                    case "\x1B(B": // set united states g0 character set
                        break;
                    case "\x1BE": // Move to next line
                        $this->newLine();
                        $this->x = 0;
                        break;
                    default:
                        switch (true) {
                            case preg_match('#\x1B\[(\d+)B#', $this->ansi, $match): // Move cursor down n lines
                                $this->old_y = $this->y;
                                $this->y += (int) $match[1];
                                break;
                            case preg_match('#\x1B\[(\d+);(\d+)H#', $this->ansi, $match): // Move cursor to screen location v,h
                                $this->old_x = $this->x;
                                $this->old_y = $this->y;
                                $this->x = $match[2] - 1;
                                $this->y = (int) $match[1] - 1;
                                break;
                            case preg_match('#\x1B\[(\d+)C#', $this->ansi, $match): // Move cursor right n lines
                                $this->old_x = $this->x;
                                $this->x += $match[1];
                                break;
                            case preg_match('#\x1B\[(\d+)D#', $this->ansi, $match): // Move cursor left n lines
                                $this->old_x = $this->x;
                                $this->x -= $match[1];
                                if ($this->x < 0) {
                                    $this->x = 0;
                                }
                                break;
                            case preg_match('#\x1B\[(\d+);(\d+)r#', $this->ansi, $match): // Set top and bottom lines of a window
                                break;
                            case preg_match('#\x1B\[(\d*(?:;\d*)*)m#', $this->ansi, $match): // character attributes
                                $attr_cell = &$this->attr_cell;
                                $mods = explode(';', $match[1]);
                                foreach ($mods as $mod) {
                                    switch ($mod) {
                                        case '':
                                        case '0': // Turn off character attributes
                                            $attr_cell = clone $this->base_attr_cell;
                                            break;
                                        case '1': // Turn bold mode on
                                            $attr_cell->bold = true;
                                            break;
                                        case '4': // Turn underline mode on
                                            $attr_cell->underline = true;
                                            break;
                                        case '5': // Turn blinking mode on
                                            $attr_cell->blink = true;
                                            break;
                                        case '7': // Turn reverse video on
                                            $attr_cell->reverse = !$attr_cell->reverse;
                                            $temp = $attr_cell->background;
                                            $attr_cell->background = $attr_cell->foreground;
                                            $attr_cell->foreground = $temp;
                                            break;
                                        default: // set colors
                                            //$front = $attr_cell->reverse ? &$attr_cell->background : &$attr_cell->foreground;
                                            $front = &$attr_cell->{ $attr_cell->reverse ? 'background' : 'foreground' };
                                            //$back = $attr_cell->reverse ? &$attr_cell->foreground : &$attr_cell->background;
                                            $back = &$attr_cell->{ $attr_cell->reverse ? 'foreground' : 'background' };
                                            switch ($mod) {
                                                // @codingStandardsIgnoreStart
                                                case '30': $front = 'black'; break;
                                                case '31': $front = 'red'; break;
                                                case '32': $front = 'green'; break;
                                                case '33': $front = 'yellow'; break;
                                                case '34': $front = 'blue'; break;
                                                case '35': $front = 'magenta'; break;
                                                case '36': $front = 'cyan'; break;
                                                case '37': $front = 'white'; break;

                                                case '40': $back = 'black'; break;
                                                case '41': $back = 'red'; break;
                                                case '42': $back = 'green'; break;
                                                case '43': $back = 'yellow'; break;
                                                case '44': $back = 'blue'; break;
                                                case '45': $back = 'magenta'; break;
                                                case '46': $back = 'cyan'; break;
                                                case '47': $back = 'white'; break;
                                                // @codingStandardsIgnoreEnd

                                                default:
                                                    //user_error('Unsupported attribute: ' . $mod);
                                                    $this->ansi = '';
                                                    break 2;
                                            }
                                    }
                                }
                                break;
                            default:
                                //user_error("{$this->ansi} is unsupported\r\n");
                        }
                }
                $this->ansi = '';
                continue;
            }

            $this->tokenization[count($this->tokenization) - 1] .= $source[$i];
            switch ($source[$i]) {
                case "\r":
                    $this->x = 0;
                    break;
                case "\n":
                    $this->newLine();
                    break;
                case "\x08": // backspace
                    if ($this->x) {
                        $this->x--;
                        $this->attrs[$this->y][$this->x] = clone $this->base_attr_cell;
                        $this->screen[$this->y] = substr_replace(
                            $this->screen[$this->y],
                            $source[$i],
                            $this->x,
                            1
                        );
                    }
                    break;
                case "\x0F": // shift
                    break;
                case "\x1B": // start ANSI escape code
                    $this->tokenization[count($this->tokenization) - 1] = substr($this->tokenization[count($this->tokenization) - 1], 0, -1);
                    //if (!strlen($this->tokenization[count($this->tokenization) - 1])) {
                    //    array_pop($this->tokenization);
                    //}
                    $this->ansi .= "\x1B";
                    break;
                default:
                    $this->attrs[$this->y][$this->x] = clone $this->attr_cell;
                    if ($this->x > strlen($this->screen[$this->y])) {
                        $this->screen[$this->y] = str_repeat(' ', $this->x);
                    }
                    $this->screen[$this->y] = substr_replace(
                        $this->screen[$this->y],
                        $source[$i],
                        $this->x,
                        1
                    );

                    if ($this->x > $this->max_x) {
                        $this->x = 0;
                        $this->newLine();
                    } else {
                        $this->x++;
                    }
            }
        }
    }

    /**
     * Add a new line
     *
     * Also update the $this->screen and $this->history buffers
     *
     */
    private function newLine()
    {
        //if ($this->y < $this->max_y) {
        //    $this->y++;
        //}

        while ($this->y >= $this->max_y) {
            $this->history = array_merge($this->history, [array_shift($this->screen)]);
            $this->screen[] = '';

            $this->history_attrs = array_merge($this->history_attrs, [array_shift($this->attrs)]);
            $this->attrs[] = $this->attr_row;

            if (count($this->history) >= $this->max_history) {
                array_shift($this->history);
                array_shift($this->history_attrs);
            }

            $this->y--;
        }
        $this->y++;
    }

    /**
     * Returns the current coordinate without preformating
     *
     * @param \stdClass $last_attr
     * @param \stdClass $cur_attr
     * @param string $char
     * @return string
     */
    private function processCoordinate(\stdClass $last_attr, \stdClass $cur_attr, $char)
    {
        $output = '';

        if ($last_attr != $cur_attr) {
            $close = $open = '';
            if ($last_attr->foreground != $cur_attr->foreground) {
                if ($cur_attr->foreground != 'white') {
                    $open .= '<span style="color: ' . $cur_attr->foreground . '">';
                }
                if ($last_attr->foreground != 'white') {
                    $close = '</span>' . $close;
                }
            }
            if ($last_attr->background != $cur_attr->background) {
                if ($cur_attr->background != 'black') {
                    $open .= '<span style="background: ' . $cur_attr->background . '">';
                }
                if ($last_attr->background != 'black') {
                    $close = '</span>' . $close;
                }
            }
            if ($last_attr->bold != $cur_attr->bold) {
                if ($cur_attr->bold) {
                    $open .= '<b>';
                } else {
                    $close = '</b>' . $close;
                }
            }
            if ($last_attr->underline != $cur_attr->underline) {
                if ($cur_attr->underline) {
                    $open .= '<u>';
                } else {
                    $close = '</u>' . $close;
                }
            }
            if ($last_attr->blink != $cur_attr->blink) {
                if ($cur_attr->blink) {
                    $open .= '<blink>';
                } else {
                    $close = '</blink>' . $close;
                }
            }
            $output .= $close . $open;
        }

        $output .= htmlspecialchars($char);

        return $output;
    }

    /**
     * Returns the current screen without preformating
     *
     * @return string
     */
    private function getScreenHelper()
    {
        $output = '';
        $last_attr = $this->base_attr_cell;
        for ($i = 0; $i <= $this->max_y; $i++) {
            for ($j = 0; $j <= $this->max_x; $j++) {
                $cur_attr = $this->attrs[$i][$j];
                $output .= $this->processCoordinate($last_attr, $cur_attr, isset($this->screen[$i][$j]) ? $this->screen[$i][$j] : '');
                $last_attr = $this->attrs[$i][$j];
            }
            $output .= "\r\n";
        }
        $output = substr($output, 0, -2);
        // close any remaining open tags
        $output .= $this->processCoordinate($last_attr, $this->base_attr_cell, '');
        return rtrim($output);
    }

    /**
     * Returns the current screen
     *
     * @return string
     */
    public function getScreen()
    {
        return '<pre width="' . ($this->max_x + 1) . '" style="color: white; background: black">' . $this->getScreenHelper() . '</pre>';
    }

    /**
     * Returns the current screen and the x previous lines
     *
     * @return string
     */
    public function getHistory()
    {
        $scrollback = '';
        $last_attr = $this->base_attr_cell;
        for ($i = 0; $i < count($this->history); $i++) {
            for ($j = 0; $j <= $this->max_x + 1; $j++) {
                $cur_attr = $this->history_attrs[$i][$j];
                $scrollback .= $this->processCoordinate($last_attr, $cur_attr, isset($this->history[$i][$j]) ? $this->history[$i][$j] : '');
                $last_attr = $this->history_attrs[$i][$j];
            }
            $scrollback .= "\r\n";
        }
        $base_attr_cell = $this->base_attr_cell;
        $this->base_attr_cell = $last_attr;
        $scrollback .= $this->getScreen();
        $this->base_attr_cell = $base_attr_cell;

        return '<pre width="' . ($this->max_x + 1) . '" style="color: white; background: black">' . $scrollback . '</span></pre>';
    }
}
<?php

/**
 * Pure-PHP ASN.1 Parser
 *
 * PHP version 5
 *
 * ASN.1 provides the semantics for data encoded using various schemes.  The most commonly
 * utilized scheme is DER or the "Distinguished Encoding Rules".  PEM's are base64 encoded
 * DER blobs.
 *
 * \phpseclib3\File\ASN1 decodes and encodes DER formatted messages and places them in a semantic context.
 *
 * Uses the 1988 ASN.1 syntax.
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2012 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\File;

use phpseclib3\Common\Functions\Strings;
use phpseclib3\File\ASN1\Element;
use phpseclib3\Math\BigInteger;

/**
 * Pure-PHP ASN.1 Parser
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class ASN1
{
    // Tag Classes
    // http://www.itu.int/ITU-T/studygroups/com17/languages/X.690-0207.pdf#page=12
    const CLASS_UNIVERSAL        = 0;
    const CLASS_APPLICATION      = 1;
    const CLASS_CONTEXT_SPECIFIC = 2;
    const CLASS_PRIVATE          = 3;

    // Tag Classes
    // http://www.obj-sys.com/asn1tutorial/node124.html
    const TYPE_BOOLEAN           = 1;
    const TYPE_INTEGER           = 2;
    const TYPE_BIT_STRING        = 3;
    const TYPE_OCTET_STRING      = 4;
    const TYPE_NULL              = 5;
    const TYPE_OBJECT_IDENTIFIER = 6;
    //const TYPE_OBJECT_DESCRIPTOR = 7;
    //const TYPE_INSTANCE_OF       = 8; // EXTERNAL
    const TYPE_REAL              = 9;
    const TYPE_ENUMERATED        = 10;
    //const TYPE_EMBEDDED          = 11;
    const TYPE_UTF8_STRING       = 12;
    //const TYPE_RELATIVE_OID      = 13;
    const TYPE_SEQUENCE          = 16; // SEQUENCE OF
    const TYPE_SET               = 17; // SET OF

    // More Tag Classes
    // http://www.obj-sys.com/asn1tutorial/node10.html
    const TYPE_NUMERIC_STRING   = 18;
    const TYPE_PRINTABLE_STRING = 19;
    const TYPE_TELETEX_STRING   = 20; // T61String
    const TYPE_VIDEOTEX_STRING  = 21;
    const TYPE_IA5_STRING       = 22;
    const TYPE_UTC_TIME         = 23;
    const TYPE_GENERALIZED_TIME = 24;
    const TYPE_GRAPHIC_STRING   = 25;
    const TYPE_VISIBLE_STRING   = 26; // ISO646String
    const TYPE_GENERAL_STRING   = 27;
    const TYPE_UNIVERSAL_STRING = 28;
    //const TYPE_CHARACTER_STRING = 29;
    const TYPE_BMP_STRING       = 30;

    // Tag Aliases
    // These tags are kinda place holders for other tags.
    const TYPE_CHOICE = -1;
    const TYPE_ANY    = -2;

    /**
     * ASN.1 object identifiers
     *
     * @var array
     * @link http://en.wikipedia.org/wiki/Object_identifier
     */
    private static $oids = [];

    /**
     * ASN.1 object identifier reverse mapping
     *
     * @var array
     */
    private static $reverseOIDs = [];

    /**
     * Default date format
     *
     * @var string
     * @link http://php.net/class.datetime
     */
    private static $format = 'D, d M Y H:i:s O';

    /**
     * Filters
     *
     * If the mapping type is self::TYPE_ANY what do we actually encode it as?
     *
     * @var array
     * @see self::encode_der()
     */
    private static $filters;

    /**
     * Current Location of most recent ASN.1 encode process
     *
     * Useful for debug purposes
     *
     * @var array
     * @see self::encode_der()
     */
    private static $location;

    /**
     * DER Encoded String
     *
     * In case we need to create ASN1\Element object's..
     *
     * @var string
     * @see self::decodeDER()
     */
    private static $encoded;

    /**
     * Type mapping table for the ANY type.
     *
     * Structured or unknown types are mapped to a \phpseclib3\File\ASN1\Element.
     * Unambiguous types get the direct mapping (int/real/bool).
     * Others are mapped as a choice, with an extra indexing level.
     *
     * @var array
     */
    const ANY_MAP = [
        self::TYPE_BOOLEAN              => true,
        self::TYPE_INTEGER              => true,
        self::TYPE_BIT_STRING           => 'bitString',
        self::TYPE_OCTET_STRING         => 'octetString',
        self::TYPE_NULL                 => 'null',
        self::TYPE_OBJECT_IDENTIFIER    => 'objectIdentifier',
        self::TYPE_REAL                 => true,
        self::TYPE_ENUMERATED           => 'enumerated',
        self::TYPE_UTF8_STRING          => 'utf8String',
        self::TYPE_NUMERIC_STRING       => 'numericString',
        self::TYPE_PRINTABLE_STRING     => 'printableString',
        self::TYPE_TELETEX_STRING       => 'teletexString',
        self::TYPE_VIDEOTEX_STRING      => 'videotexString',
        self::TYPE_IA5_STRING           => 'ia5String',
        self::TYPE_UTC_TIME             => 'utcTime',
        self::TYPE_GENERALIZED_TIME     => 'generalTime',
        self::TYPE_GRAPHIC_STRING       => 'graphicString',
        self::TYPE_VISIBLE_STRING       => 'visibleString',
        self::TYPE_GENERAL_STRING       => 'generalString',
        self::TYPE_UNIVERSAL_STRING     => 'universalString',
        //self::TYPE_CHARACTER_STRING     => 'characterString',
        self::TYPE_BMP_STRING           => 'bmpString'
    ];

    /**
     * String type to character size mapping table.
     *
     * Non-convertable types are absent from this table.
     * size == 0 indicates variable length encoding.
     *
     * @var array
     */
    const STRING_TYPE_SIZE = [
        self::TYPE_UTF8_STRING      => 0,
        self::TYPE_BMP_STRING       => 2,
        self::TYPE_UNIVERSAL_STRING => 4,
        self::TYPE_PRINTABLE_STRING => 1,
        self::TYPE_TELETEX_STRING   => 1,
        self::TYPE_IA5_STRING       => 1,
        self::TYPE_VISIBLE_STRING   => 1,
    ];

    /**
     * Parse BER-encoding
     *
     * Serves a similar purpose to openssl's asn1parse
     *
     * @param Element|string $encoded
     * @return ?array
     */
    public static function decodeBER($encoded)
    {
        if ($encoded instanceof Element) {
            $encoded = $encoded->element;
        }

        self::$encoded = $encoded;

        $decoded = self::decode_ber($encoded);
        if ($decoded === false) {
            return null;
        }

        return [$decoded];
    }

    /**
     * Parse BER-encoding (Helper function)
     *
     * Sometimes we want to get the BER encoding of a particular tag.  $start lets us do that without having to reencode.
     * $encoded is passed by reference for the recursive calls done for self::TYPE_BIT_STRING and
     * self::TYPE_OCTET_STRING. In those cases, the indefinite length is used.
     *
     * @param string $encoded
     * @param int $start
     * @param int $encoded_pos
     * @return array|bool
     */
    private static function decode_ber($encoded, $start = 0, $encoded_pos = 0)
    {
        $current = ['start' => $start];

        if (!isset($encoded[$encoded_pos])) {
            return false;
        }
        $type = ord($encoded[$encoded_pos++]);
        $startOffset = 1;

        $constructed = ($type >> 5) & 1;

        $tag = $type & 0x1F;
        if ($tag == 0x1F) {
            $tag = 0;
            // process septets (since the eighth bit is ignored, it's not an octet)
            do {
                if (!isset($encoded[$encoded_pos])) {
                    return false;
                }
                $temp = ord($encoded[$encoded_pos++]);
                $startOffset++;
                $loop = $temp >> 7;
                $tag <<= 7;
                $temp &= 0x7F;
                // "bits 7 to 1 of the first subsequent octet shall not all be zero"
                if ($startOffset == 2 && $temp == 0) {
                    return false;
                }
                $tag |= $temp;
            } while ($loop);
        }

        $start += $startOffset;

        // Length, as discussed in paragraph 8.1.3 of X.690-0207.pdf#page=13
        if (!isset($encoded[$encoded_pos])) {
            return false;
        }
        $length = ord($encoded[$encoded_pos++]);
        $start++;
        if ($length == 0x80) { // indefinite length
            // "[A sender shall] use the indefinite form (see 8.1.3.6) if the encoding is constructed and is not all
            //  immediately available." -- paragraph 8.1.3.2.c
            $length = strlen($encoded) - $encoded_pos;
        } elseif ($length & 0x80) { // definite length, long form
            // technically, the long form of the length can be represented by up to 126 octets (bytes), but we'll only
            // support it up to four.
            $length &= 0x7F;
            $temp = substr($encoded, $encoded_pos, $length);
            $encoded_pos += $length;
            // tags of indefinte length don't really have a header length; this length includes the tag
            $current += ['headerlength' => $length + 2];
            $start += $length;
            $length = unpack('Nlength', substr(str_pad($temp, 4, chr(0), STR_PAD_LEFT), -4))['length'];
        } else {
            $current += ['headerlength' => 2];
        }

        if ($length > (strlen($encoded) - $encoded_pos)) {
            return false;
        }

        $content = substr($encoded, $encoded_pos, $length);
        $content_pos = 0;

        // at this point $length can be overwritten. it's only accurate for definite length things as is

        /* Class is UNIVERSAL, APPLICATION, PRIVATE, or CONTEXT-SPECIFIC. The UNIVERSAL class is restricted to the ASN.1
           built-in types. It defines an application-independent data type that must be distinguishable from all other
           data types. The other three classes are user defined. The APPLICATION class distinguishes data types that
           have a wide, scattered use within a particular presentation context. PRIVATE distinguishes data types within
           a particular organization or country. CONTEXT-SPECIFIC distinguishes members of a sequence or set, the
           alternatives of a CHOICE, or universally tagged set members. Only the class number appears in braces for this
           data type; the term CONTEXT-SPECIFIC does not appear.

             -- http://www.obj-sys.com/asn1tutorial/node12.html */
        $class = ($type >> 6) & 3;
        switch ($class) {
            case self::CLASS_APPLICATION:
            case self::CLASS_PRIVATE:
            case self::CLASS_CONTEXT_SPECIFIC:
                if (!$constructed) {
                    return [
                        'type'     => $class,
                        'constant' => $tag,
                        'content'  => $content,
                        'length'   => $length + $start - $current['start']
                    ] + $current;
                }

                $newcontent = [];
                $remainingLength = $length;
                while ($remainingLength > 0) {
                    $temp = self::decode_ber($content, $start, $content_pos);
                    if ($temp === false) {
                        break;
                    }
                    $length = $temp['length'];
                    // end-of-content octets - see paragraph 8.1.5
                    if (substr($content, $content_pos + $length, 2) == "\0\0") {
                        $length += 2;
                        $start += $length;
                        $newcontent[] = $temp;
                        break;
                    }
                    $start += $length;
                    $remainingLength -= $length;
                    $newcontent[] = $temp;
                    $content_pos += $length;
                }

                return [
                    'type'     => $class,
                    'constant' => $tag,
                    // the array encapsulation is for BC with the old format
                    'content'  => $newcontent,
                    // the only time when $content['headerlength'] isn't defined is when the length is indefinite.
                    // the absence of $content['headerlength'] is how we know if something is indefinite or not.
                    // technically, it could be defined to be 2 and then another indicator could be used but whatever.
                    'length'   => $start - $current['start']
                ] + $current;
        }

        $current += ['type' => $tag];

        // decode UNIVERSAL tags
        switch ($tag) {
            case self::TYPE_BOOLEAN:
                // "The contents octets shall consist of a single octet." -- paragraph 8.2.1
                if ($constructed || strlen($content) != 1) {
                    return false;
                }
                $current['content'] = (bool) ord($content[$content_pos]);
                break;
            case self::TYPE_INTEGER:
            case self::TYPE_ENUMERATED:
                if ($constructed) {
                    return false;
                }
                $current['content'] = new BigInteger(substr($content, $content_pos), -256);
                break;
            case self::TYPE_REAL: // not currently supported
                return false;
            case self::TYPE_BIT_STRING:
                // The initial octet shall encode, as an unsigned binary integer with bit 1 as the least significant bit,
                // the number of unused bits in the final subsequent octet. The number shall be in the range zero to
                // seven.
                if (!$constructed) {
                    $current['content'] = substr($content, $content_pos);
                } else {
                    $temp = self::decode_ber($content, $start, $content_pos);
                    if ($temp === false) {
                        return false;
                    }
                    $length -= (strlen($content) - $content_pos);
                    $last = count($temp) - 1;
                    for ($i = 0; $i < $last; $i++) {
                        // all subtags should be bit strings
                        if ($temp[$i]['type'] != self::TYPE_BIT_STRING) {
                            return false;
                        }
                        $current['content'] .= substr($temp[$i]['content'], 1);
                    }
                    // all subtags should be bit strings
                    if ($temp[$last]['type'] != self::TYPE_BIT_STRING) {
                        return false;
                    }
                    $current['content'] = $temp[$last]['content'][0] . $current['content'] . substr($temp[$i]['content'], 1);
                }
                break;
            case self::TYPE_OCTET_STRING:
                if (!$constructed) {
                    $current['content'] = substr($content, $content_pos);
                } else {
                    $current['content'] = '';
                    $length = 0;
                    while (substr($content, $content_pos, 2) != "\0\0") {
                        $temp = self::decode_ber($content, $length + $start, $content_pos);
                        if ($temp === false) {
                            return false;
                        }
                        $content_pos += $temp['length'];
                        // all subtags should be octet strings
                        if ($temp['type'] != self::TYPE_OCTET_STRING) {
                            return false;
                        }
                        $current['content'] .= $temp['content'];
                        $length += $temp['length'];
                    }
                    if (substr($content, $content_pos, 2) == "\0\0") {
                        $length += 2; // +2 for the EOC
                    }
                }
                break;
            case self::TYPE_NULL:
                // "The contents octets shall not contain any octets." -- paragraph 8.8.2
                if ($constructed || strlen($content)) {
                    return false;
                }
                break;
            case self::TYPE_SEQUENCE:
            case self::TYPE_SET:
                if (!$constructed) {
                    return false;
                }
                $offset = 0;
                $current['content'] = [];
                $content_len = strlen($content);
                while ($content_pos < $content_len) {
                    // if indefinite length construction was used and we have an end-of-content string next
                    // see paragraphs 8.1.1.3, 8.1.3.2, 8.1.3.6, 8.1.5, and (for an example) 8.6.4.2
                    if (!isset($current['headerlength']) && substr($content, $content_pos, 2) == "\0\0") {
                        $length = $offset + 2; // +2 for the EOC
                        break 2;
                    }
                    $temp = self::decode_ber($content, $start + $offset, $content_pos);
                    if ($temp === false) {
                        return false;
                    }
                    $content_pos += $temp['length'];
                    $current['content'][] = $temp;
                    $offset += $temp['length'];
                }
                break;
            case self::TYPE_OBJECT_IDENTIFIER:
                if ($constructed) {
                    return false;
                }
                $current['content'] = self::decodeOID(substr($content, $content_pos));
                if ($current['content'] === false) {
                    return false;
                }
                break;
            /* Each character string type shall be encoded as if it had been declared:
               [UNIVERSAL x] IMPLICIT OCTET STRING

                 -- X.690-0207.pdf#page=23 (paragraph 8.21.3)

               Per that, we're not going to do any validation.  If there are any illegal characters in the string,
               we don't really care */
            case self::TYPE_NUMERIC_STRING:
                // 0,1,2,3,4,5,6,7,8,9, and space
            case self::TYPE_PRINTABLE_STRING:
                // Upper and lower case letters, digits, space, apostrophe, left/right parenthesis, plus sign, comma,
                // hyphen, full stop, solidus, colon, equal sign, question mark
            case self::TYPE_TELETEX_STRING:
                // The Teletex character set in CCITT's T61, space, and delete
                // see http://en.wikipedia.org/wiki/Teletex#Character_sets
            case self::TYPE_VIDEOTEX_STRING:
                // The Videotex character set in CCITT's T.100 and T.101, space, and delete
            case self::TYPE_VISIBLE_STRING:
                // Printing character sets of international ASCII, and space
            case self::TYPE_IA5_STRING:
                // International Alphabet 5 (International ASCII)
            case self::TYPE_GRAPHIC_STRING:
                // All registered G sets, and space
            case self::TYPE_GENERAL_STRING:
                // All registered C and G sets, space and delete
            case self::TYPE_UTF8_STRING:
                // ????
            case self::TYPE_BMP_STRING:
                if ($constructed) {
                    return false;
                }
                $current['content'] = substr($content, $content_pos);
                break;
            case self::TYPE_UTC_TIME:
            case self::TYPE_GENERALIZED_TIME:
                if ($constructed) {
                    return false;
                }
                $current['content'] = self::decodeTime(substr($content, $content_pos), $tag);
                break;
            default:
                return false;
        }

        $start += $length;

        // ie. length is the length of the full TLV encoding - it's not just the length of the value
        return $current + ['length' => $start - $current['start']];
    }

    /**
     * ASN.1 Map
     *
     * Provides an ASN.1 semantic mapping ($mapping) from a parsed BER-encoding to a human readable format.
     *
     * "Special" mappings may be applied on a per tag-name basis via $special.
     *
     * @param array $decoded
     * @param array $mapping
     * @param array $special
     * @return array|bool|Element|string|null
     */
    public static function asn1map(array $decoded, $mapping, $special = [])
    {
        if (isset($mapping['explicit']) && is_array($decoded['content'])) {
            $decoded = $decoded['content'][0];
        }

        switch (true) {
            case $mapping['type'] == self::TYPE_ANY:
                $intype = $decoded['type'];
                // !isset(self::ANY_MAP[$intype]) produces a fatal error on PHP 5.6
                if (isset($decoded['constant']) || !array_key_exists($intype, self::ANY_MAP) || (ord(self::$encoded[$decoded['start']]) & 0x20)) {
                    return new Element(substr(self::$encoded, $decoded['start'], $decoded['length']));
                }
                $inmap = self::ANY_MAP[$intype];
                if (is_string($inmap)) {
                    return [$inmap => self::asn1map($decoded, ['type' => $intype] + $mapping, $special)];
                }
                break;
            case $mapping['type'] == self::TYPE_CHOICE:
                foreach ($mapping['children'] as $key => $option) {
                    switch (true) {
                        case isset($option['constant']) && $option['constant'] == $decoded['constant']:
                        case !isset($option['constant']) && $option['type'] == $decoded['type']:
                            $value = self::asn1map($decoded, $option, $special);
                            break;
                        case !isset($option['constant']) && $option['type'] == self::TYPE_CHOICE:
                            $v = self::asn1map($decoded, $option, $special);
                            if (isset($v)) {
                                $value = $v;
                            }
                    }
                    if (isset($value)) {
                        if (isset($special[$key])) {
                            $value = $special[$key]($value);
                        }
                        return [$key => $value];
                    }
                }
                return null;
            case isset($mapping['implicit']):
            case isset($mapping['explicit']):
            case $decoded['type'] == $mapping['type']:
                break;
            default:
                // if $decoded['type'] and $mapping['type'] are both strings, but different types of strings,
                // let it through
                switch (true) {
                    case $decoded['type'] < 18: // self::TYPE_NUMERIC_STRING == 18
                    case $decoded['type'] > 30: // self::TYPE_BMP_STRING == 30
                    case $mapping['type'] < 18:
                    case $mapping['type'] > 30:
                        return null;
                }
        }

        if (isset($mapping['implicit'])) {
            $decoded['type'] = $mapping['type'];
        }

        switch ($decoded['type']) {
            case self::TYPE_SEQUENCE:
                $map = [];

                // ignore the min and max
                if (isset($mapping['min']) && isset($mapping['max'])) {
                    $child = $mapping['children'];
                    foreach ($decoded['content'] as $content) {
                        if (($map[] = self::asn1map($content, $child, $special)) === null) {
                            return null;
                        }
                    }

                    return $map;
                }

                $n = count($decoded['content']);
                $i = 0;

                foreach ($mapping['children'] as $key => $child) {
                    $maymatch = $i < $n; // Match only existing input.
                    if ($maymatch) {
                        $temp = $decoded['content'][$i];

                        if ($child['type'] != self::TYPE_CHOICE) {
                            // Get the mapping and input class & constant.
                            $childClass = $tempClass = self::CLASS_UNIVERSAL;
                            $constant = null;
                            if (isset($temp['constant'])) {
                                $tempClass = $temp['type'];
                            }
                            if (isset($child['class'])) {
                                $childClass = $child['class'];
                                $constant = $child['cast'];
                            } elseif (isset($child['constant'])) {
                                $childClass = self::CLASS_CONTEXT_SPECIFIC;
                                $constant = $child['constant'];
                            }

                            if (isset($constant) && isset($temp['constant'])) {
                                // Can only match if constants and class match.
                                $maymatch = $constant == $temp['constant'] && $childClass == $tempClass;
                            } else {
                                // Can only match if no constant expected and type matches or is generic.
                                $maymatch = !isset($child['constant']) && array_search($child['type'], [$temp['type'], self::TYPE_ANY, self::TYPE_CHOICE]) !== false;
                            }
                        }
                    }

                    if ($maymatch) {
                        // Attempt submapping.
                        $candidate = self::asn1map($temp, $child, $special);
                        $maymatch = $candidate !== null;
                    }

                    if ($maymatch) {
                        // Got the match: use it.
                        if (isset($special[$key])) {
                            $candidate = $special[$key]($candidate);
                        }
                        $map[$key] = $candidate;
                        $i++;
                    } elseif (isset($child['default'])) {
                        $map[$key] = $child['default'];
                    } elseif (!isset($child['optional'])) {
                        return null; // Syntax error.
                    }
                }

                // Fail mapping if all input items have not been consumed.
                return $i < $n ? null : $map;

            // the main diff between sets and sequences is the encapsulation of the foreach in another for loop
            case self::TYPE_SET:
                $map = [];

                // ignore the min and max
                if (isset($mapping['min']) && isset($mapping['max'])) {
                    $child = $mapping['children'];
                    foreach ($decoded['content'] as $content) {
                        if (($map[] = self::asn1map($content, $child, $special)) === null) {
                            return null;
                        }
                    }

                    return $map;
                }

                for ($i = 0; $i < count($decoded['content']); $i++) {
                    $temp = $decoded['content'][$i];
                    $tempClass = self::CLASS_UNIVERSAL;
                    if (isset($temp['constant'])) {
                        $tempClass = $temp['type'];
                    }

                    foreach ($mapping['children'] as $key => $child) {
                        if (isset($map[$key])) {
                            continue;
                        }
                        $maymatch = true;
                        if ($child['type'] != self::TYPE_CHOICE) {
                            $childClass = self::CLASS_UNIVERSAL;
                            $constant = null;
                            if (isset($child['class'])) {
                                $childClass = $child['class'];
                                $constant = $child['cast'];
                            } elseif (isset($child['constant'])) {
                                $childClass = self::CLASS_CONTEXT_SPECIFIC;
                                $constant = $child['constant'];
                            }

                            if (isset($constant) && isset($temp['constant'])) {
                                // Can only match if constants and class match.
                                $maymatch = $constant == $temp['constant'] && $childClass == $tempClass;
                            } else {
                                // Can only match if no constant expected and type matches or is generic.
                                $maymatch = !isset($child['constant']) && array_search($child['type'], [$temp['type'], self::TYPE_ANY, self::TYPE_CHOICE]) !== false;
                            }
                        }

                        if ($maymatch) {
                            // Attempt submapping.
                            $candidate = self::asn1map($temp, $child, $special);
                            $maymatch = $candidate !== null;
                        }

                        if (!$maymatch) {
                            break;
                        }

                        // Got the match: use it.
                        if (isset($special[$key])) {
                            $candidate = $special[$key]($candidate);
                        }
                        $map[$key] = $candidate;
                        break;
                    }
                }

                foreach ($mapping['children'] as $key => $child) {
                    if (!isset($map[$key])) {
                        if (isset($child['default'])) {
                            $map[$key] = $child['default'];
                        } elseif (!isset($child['optional'])) {
                            return null;
                        }
                    }
                }
                return $map;
            case self::TYPE_OBJECT_IDENTIFIER:
                return isset(self::$oids[$decoded['content']]) ? self::$oids[$decoded['content']] : $decoded['content'];
            case self::TYPE_UTC_TIME:
            case self::TYPE_GENERALIZED_TIME:
                // for explicitly tagged optional stuff
                if (is_array($decoded['content'])) {
                    $decoded['content'] = $decoded['content'][0]['content'];
                }
                // for implicitly tagged optional stuff
                // in theory, doing isset($mapping['implicit']) would work but malformed certs do exist
                // in the wild that OpenSSL decodes without issue so we'll support them as well
                if (!is_object($decoded['content'])) {
                    $decoded['content'] = self::decodeTime($decoded['content'], $decoded['type']);
                }
                return $decoded['content'] ? $decoded['content']->format(self::$format) : false;
            case self::TYPE_BIT_STRING:
                if (isset($mapping['mapping'])) {
                    $offset = ord($decoded['content'][0]);
                    $size = (strlen($decoded['content']) - 1) * 8 - $offset;
                    /*
                       From X.680-0207.pdf#page=46 (21.7):

                       "When a "NamedBitList" is used in defining a bitstring type ASN.1 encoding rules are free to add (or remove)
                        arbitrarily any trailing 0 bits to (or from) values that are being encoded or decoded. Application designers should
                        therefore ensure that different semantics are not associated with such values which differ only in the number of trailing
                        0 bits."
                    */
                    $bits = count($mapping['mapping']) == $size ? [] : array_fill(0, count($mapping['mapping']) - $size, false);
                    for ($i = strlen($decoded['content']) - 1; $i > 0; $i--) {
                        $current = ord($decoded['content'][$i]);
                        for ($j = $offset; $j < 8; $j++) {
                            $bits[] = (bool) ($current & (1 << $j));
                        }
                        $offset = 0;
                    }
                    $values = [];
                    $map = array_reverse($mapping['mapping']);
                    foreach ($map as $i => $value) {
                        if ($bits[$i]) {
                            $values[] = $value;
                        }
                    }
                    return $values;
                }
                // fall-through
            case self::TYPE_OCTET_STRING:
                return $decoded['content'];
            case self::TYPE_NULL:
                return '';
            case self::TYPE_BOOLEAN:
            case self::TYPE_NUMERIC_STRING:
            case self::TYPE_PRINTABLE_STRING:
            case self::TYPE_TELETEX_STRING:
            case self::TYPE_VIDEOTEX_STRING:
            case self::TYPE_IA5_STRING:
            case self::TYPE_GRAPHIC_STRING:
            case self::TYPE_VISIBLE_STRING:
            case self::TYPE_GENERAL_STRING:
            case self::TYPE_UNIVERSAL_STRING:
            case self::TYPE_UTF8_STRING:
            case self::TYPE_BMP_STRING:
                return $decoded['content'];
            case self::TYPE_INTEGER:
            case self::TYPE_ENUMERATED:
                $temp = $decoded['content'];
                if (isset($mapping['implicit'])) {
                    $temp = new BigInteger($decoded['content'], -256);
                }
                if (isset($mapping['mapping'])) {
                    $temp = $temp->toString();
                    if (strlen($temp) > 1) {
                        return false;
                    }
                    $temp = (int) $temp;
                    return isset($mapping['mapping'][$temp]) ?
                        $mapping['mapping'][$temp] :
                        false;
                }
                return $temp;
        }
    }

    /**
     * DER-decode the length
     *
     * DER supports lengths up to (2**8)**127, however, we'll only support lengths up to (2**8)**4.  See
     * {@link http://itu.int/ITU-T/studygroups/com17/languages/X.690-0207.pdf#p=13 X.690 paragraph 8.1.3} for more information.
     *
     * @param string $string
     * @return int
     */
    public static function decodeLength(&$string)
    {
        $length = ord(Strings::shift($string));
        if ($length & 0x80) { // definite length, long form
            $length &= 0x7F;
            $temp = Strings::shift($string, $length);
            list(, $length) = unpack('N', substr(str_pad($temp, 4, chr(0), STR_PAD_LEFT), -4));
        }
        return $length;
    }

    /**
     * ASN.1 Encode
     *
     * DER-encodes an ASN.1 semantic mapping ($mapping).  Some libraries would probably call this function
     * an ASN.1 compiler.
     *
     * "Special" mappings can be applied via $special.
     *
     * @param Element|string|array $source
     * @param array $mapping
     * @param array $special
     * @return string
     */
    public static function encodeDER($source, $mapping, $special = [])
    {
        self::$location = [];
        return self::encode_der($source, $mapping, null, $special);
    }

    /**
     * ASN.1 Encode (Helper function)
     *
     * @param Element|string|array|null $source
     * @param array $mapping
     * @param int $idx
     * @param array $special
     * @return string
     */
    private static function encode_der($source, array $mapping, $idx = null, array $special = [])
    {
        if ($source instanceof Element) {
            return $source->element;
        }

        // do not encode (implicitly optional) fields with value set to default
        if (isset($mapping['default']) && $source === $mapping['default']) {
            return '';
        }

        if (isset($idx)) {
            if (isset($special[$idx])) {
                $source = $special[$idx]($source);
            }
            self::$location[] = $idx;
        }

        $tag = $mapping['type'];

        switch ($tag) {
            case self::TYPE_SET:    // Children order is not important, thus process in sequence.
            case self::TYPE_SEQUENCE:
                $tag |= 0x20; // set the constructed bit

                // ignore the min and max
                if (isset($mapping['min']) && isset($mapping['max'])) {
                    $value = [];
                    $child = $mapping['children'];

                    foreach ($source as $content) {
                        $temp = self::encode_der($content, $child, null, $special);
                        if ($temp === false) {
                            return false;
                        }
                        $value[] = $temp;
                    }
                    /* "The encodings of the component values of a set-of value shall appear in ascending order, the encodings being compared
                        as octet strings with the shorter components being padded at their trailing end with 0-octets.
                        NOTE - The padding octets are for comparison purposes only and do not appear in the encodings."

                       -- sec 11.6 of http://www.itu.int/ITU-T/studygroups/com17/languages/X.690-0207.pdf  */
                    if ($mapping['type'] == self::TYPE_SET) {
                        sort($value);
                    }
                    $value = implode('', $value);
                    break;
                }

                $value = '';
                foreach ($mapping['children'] as $key => $child) {
                    if (!array_key_exists($key, $source)) {
                        if (!isset($child['optional'])) {
                            return false;
                        }
                        continue;
                    }

                    $temp = self::encode_der($source[$key], $child, $key, $special);
                    if ($temp === false) {
                        return false;
                    }

                    // An empty child encoding means it has been optimized out.
                    // Else we should have at least one tag byte.
                    if ($temp === '') {
                        continue;
                    }

                    // if isset($child['constant']) is true then isset($child['optional']) should be true as well
                    if (isset($child['constant'])) {
                        /*
                           From X.680-0207.pdf#page=58 (30.6):

                           "The tagging construction specifies explicit tagging if any of the following holds:
                            ...
                            c) the "Tag Type" alternative is used and the value of "TagDefault" for the module is IMPLICIT TAGS or
                            AUTOMATIC TAGS, but the type defined by "Type" is an untagged choice type, an untagged open type, or
                            an untagged "DummyReference" (see ITU-T Rec. X.683 | ISO/IEC 8824-4, 8.3)."
                         */
                        if (isset($child['explicit']) || $child['type'] == self::TYPE_CHOICE) {
                            if ($child['constant'] <= 30) {
                                $subtag = chr((self::CLASS_CONTEXT_SPECIFIC << 6) | 0x20 | $child['constant']);
                            } else {
                                $constant = $child['constant'];
                                $subtag = '';
                                while ($constant > 0) {
                                    $subtagvalue = $constant & 0x7F;
                                    $subtag = (chr(0x80 | $subtagvalue)) . $subtag;
                                    $constant = $constant >> 7;
                                }
                                $subtag[strlen($subtag) - 1] = $subtag[strlen($subtag) - 1] & chr(0x7F);
                                $subtag = chr((self::CLASS_CONTEXT_SPECIFIC << 6) | 0x20 | 0x1f) . $subtag;
                            }
                            $temp = $subtag . self::encodeLength(strlen($temp)) . $temp;
                        } else {
                            $subtag = chr((self::CLASS_CONTEXT_SPECIFIC << 6) | (ord($temp[0]) & 0x20) | $child['constant']);
                            $temp = $subtag . substr($temp, 1);
                        }
                    }
                    $value .= $temp;
                }
                break;
            case self::TYPE_CHOICE:
                $temp = false;

                foreach ($mapping['children'] as $key => $child) {
                    if (!isset($source[$key])) {
                        continue;
                    }

                    $temp = self::encode_der($source[$key], $child, $key, $special);
                    if ($temp === false) {
                        return false;
                    }

                    // An empty child encoding means it has been optimized out.
                    // Else we should have at least one tag byte.
                    if ($temp === '') {
                        continue;
                    }

                    $tag = ord($temp[0]);

                    // if isset($child['constant']) is true then isset($child['optional']) should be true as well
                    if (isset($child['constant'])) {
                        if (isset($child['explicit']) || $child['type'] == self::TYPE_CHOICE) {
                            $subtag = chr((self::CLASS_CONTEXT_SPECIFIC << 6) | 0x20 | $child['constant']);
                            $temp = $subtag . self::encodeLength(strlen($temp)) . $temp;
                        } else {
                            $subtag = chr((self::CLASS_CONTEXT_SPECIFIC << 6) | (ord($temp[0]) & 0x20) | $child['constant']);
                            $temp = $subtag . substr($temp, 1);
                        }
                    }
                }

                if (isset($idx)) {
                    array_pop(self::$location);
                }

                if ($temp && isset($mapping['cast'])) {
                    $temp[0] = chr(($mapping['class'] << 6) | ($tag & 0x20) | $mapping['cast']);
                }

                return $temp;
            case self::TYPE_INTEGER:
            case self::TYPE_ENUMERATED:
                if (!isset($mapping['mapping'])) {
                    if (is_numeric($source)) {
                        $source = new BigInteger($source);
                    }
                    $value = $source->toBytes(true);
                } else {
                    $value = array_search($source, $mapping['mapping']);
                    if ($value === false) {
                        return false;
                    }
                    $value = new BigInteger($value);
                    $value = $value->toBytes(true);
                }
                if (!strlen($value)) {
                    $value = chr(0);
                }
                break;
            case self::TYPE_UTC_TIME:
            case self::TYPE_GENERALIZED_TIME:
                $format = $mapping['type'] == self::TYPE_UTC_TIME ? 'y' : 'Y';
                $format .= 'mdHis';
                // if $source does _not_ include timezone information within it then assume that the timezone is GMT
                $date = new \DateTime($source, new \DateTimeZone('GMT'));
                // if $source _does_ include timezone information within it then convert the time to GMT
                $date->setTimezone(new \DateTimeZone('GMT'));
                $value = $date->format($format) . 'Z';
                break;
            case self::TYPE_BIT_STRING:
                if (isset($mapping['mapping'])) {
                    $bits = array_fill(0, count($mapping['mapping']), 0);
                    $size = 0;
                    for ($i = 0; $i < count($mapping['mapping']); $i++) {
                        if (in_array($mapping['mapping'][$i], $source)) {
                            $bits[$i] = 1;
                            $size = $i;
                        }
                    }

                    if (isset($mapping['min']) && $mapping['min'] >= 1 && $size < $mapping['min']) {
                        $size = $mapping['min'] - 1;
                    }

                    $offset = 8 - (($size + 1) & 7);
                    $offset = $offset !== 8 ? $offset : 0;

                    $value = chr($offset);

                    for ($i = $size + 1; $i < count($mapping['mapping']); $i++) {
                        unset($bits[$i]);
                    }

                    $bits = implode('', array_pad($bits, $size + $offset + 1, 0));
                    $bytes = explode(' ', rtrim(chunk_split($bits, 8, ' ')));
                    foreach ($bytes as $byte) {
                        $value .= chr(bindec($byte));
                    }

                    break;
                }
                // fall-through
            case self::TYPE_OCTET_STRING:
                /* The initial octet shall encode, as an unsigned binary integer with bit 1 as the least significant bit,
                   the number of unused bits in the final subsequent octet. The number shall be in the range zero to seven.

                   -- http://www.itu.int/ITU-T/studygroups/com17/languages/X.690-0207.pdf#page=16 */
                $value = $source;
                break;
            case self::TYPE_OBJECT_IDENTIFIER:
                $value = self::encodeOID($source);
                break;
            case self::TYPE_ANY:
                $loc = self::$location;
                if (isset($idx)) {
                    array_pop(self::$location);
                }

                switch (true) {
                    case !isset($source):
                        return self::encode_der(null, ['type' => self::TYPE_NULL] + $mapping, null, $special);
                    case is_int($source):
                    case $source instanceof BigInteger:
                        return self::encode_der($source, ['type' => self::TYPE_INTEGER] + $mapping, null, $special);
                    case is_float($source):
                        return self::encode_der($source, ['type' => self::TYPE_REAL] + $mapping, null, $special);
                    case is_bool($source):
                        return self::encode_der($source, ['type' => self::TYPE_BOOLEAN] + $mapping, null, $special);
                    case is_array($source) && count($source) == 1:
                        $typename = implode('', array_keys($source));
                        $outtype = array_search($typename, self::ANY_MAP, true);
                        if ($outtype !== false) {
                            return self::encode_der($source[$typename], ['type' => $outtype] + $mapping, null, $special);
                        }
                }

                $filters = self::$filters;
                foreach ($loc as $part) {
                    if (!isset($filters[$part])) {
                        $filters = false;
                        break;
                    }
                    $filters = $filters[$part];
                }
                if ($filters === false) {
                    throw new \RuntimeException('No filters defined for ' . implode('/', $loc));
                }
                return self::encode_der($source, $filters + $mapping, null, $special);
            case self::TYPE_NULL:
                $value = '';
                break;
            case self::TYPE_NUMERIC_STRING:
            case self::TYPE_TELETEX_STRING:
            case self::TYPE_PRINTABLE_STRING:
            case self::TYPE_UNIVERSAL_STRING:
            case self::TYPE_UTF8_STRING:
            case self::TYPE_BMP_STRING:
            case self::TYPE_IA5_STRING:
            case self::TYPE_VISIBLE_STRING:
            case self::TYPE_VIDEOTEX_STRING:
            case self::TYPE_GRAPHIC_STRING:
            case self::TYPE_GENERAL_STRING:
                $value = $source;
                break;
            case self::TYPE_BOOLEAN:
                $value = $source ? "\xFF" : "\x00";
                break;
            default:
                throw new \RuntimeException('Mapping provides no type definition for ' . implode('/', self::$location));
        }

        if (isset($idx)) {
            array_pop(self::$location);
        }

        if (isset($mapping['cast'])) {
            if (isset($mapping['explicit']) || $mapping['type'] == self::TYPE_CHOICE) {
                $value = chr($tag) . self::encodeLength(strlen($value)) . $value;
                $tag = ($mapping['class'] << 6) | 0x20 | $mapping['cast'];
            } else {
                $tag = ($mapping['class'] << 6) | (ord($temp[0]) & 0x20) | $mapping['cast'];
            }
        }

        return chr($tag) . self::encodeLength(strlen($value)) . $value;
    }

    /**
     * BER-decode the OID
     *
     * Called by _decode_ber()
     *
     * @param string $content
     * @return string
     */
    public static function decodeOID($content)
    {
        // BigInteger's are used because of OIDs like 2.25.329800735698586629295641978511506172918
        // https://healthcaresecprivacy.blogspot.com/2011/02/creating-and-using-unique-id-uuid-oid.html elaborates.
        static $eighty;
        if (!$eighty) {
            $eighty = new BigInteger(80);
        }

        $oid = [];
        $pos = 0;
        $len = strlen($content);
        // see https://github.com/openjdk/jdk/blob/2deb318c9f047ec5a4b160d66a4b52f93688ec42/src/java.base/share/classes/sun/security/util/ObjectIdentifier.java#L55
        if ($len > 4096) {
            //throw new \RuntimeException("Object identifier size is limited to 4096 bytes ($len bytes present)");
            return false;
        }

        if (ord($content[$len - 1]) & 0x80) {
            return false;
        }

        $n = new BigInteger();
        while ($pos < $len) {
            $temp = ord($content[$pos++]);
            $n = $n->bitwise_leftShift(7);
            $n = $n->bitwise_or(new BigInteger($temp & 0x7F));
            if (~$temp & 0x80) {
                $oid[] = $n;
                $n = new BigInteger();
            }
        }
        $part1 = array_shift($oid);
        $first = floor(ord($content[0]) / 40);
        /*
          "This packing of the first two object identifier components recognizes that only three values are allocated from the root
           node, and at most 39 subsequent values from nodes reached by X = 0 and X = 1."

          -- https://www.itu.int/ITU-T/studygroups/com17/languages/X.690-0207.pdf#page=22
        */
        if ($first <= 2) { // ie. 0 <= ord($content[0]) < 120 (0x78)
            array_unshift($oid, ord($content[0]) % 40);
            array_unshift($oid, $first);
        } else {
            array_unshift($oid, $part1->subtract($eighty));
            array_unshift($oid, 2);
        }

        return implode('.', $oid);
    }

    /**
     * DER-encode the OID
     *
     * Called by _encode_der()
     *
     * @param string $source
     * @return string
     */
    public static function encodeOID($source)
    {
        static $mask, $zero, $forty;
        if (!$mask) {
            $mask = new BigInteger(0x7F);
            $zero = new BigInteger();
            $forty = new BigInteger(40);
        }

        if (!preg_match('#(?:\d+\.)+#', $source)) {
            $oid = isset(self::$reverseOIDs[$source]) ? self::$reverseOIDs[$source] : false;
        } else {
            $oid = $source;
        }
        if ($oid === false) {
            throw new \RuntimeException('Invalid OID');
        }

        $parts = explode('.', $oid);
        $part1 = array_shift($parts);
        $part2 = array_shift($parts);

        $first = new BigInteger($part1);
        $first = $first->multiply($forty);
        $first = $first->add(new BigInteger($part2));

        array_unshift($parts, $first->toString());

        $value = '';
        foreach ($parts as $part) {
            if (!$part) {
                $temp = "\0";
            } else {
                $temp = '';
                $part = new BigInteger($part);
                while (!$part->equals($zero)) {
                    $submask = $part->bitwise_and($mask);
                    $submask->setPrecision(8);
                    $temp = (chr(0x80) | $submask->toBytes()) . $temp;
                    $part = $part->bitwise_rightShift(7);
                }
                $temp[strlen($temp) - 1] = $temp[strlen($temp) - 1] & chr(0x7F);
            }
            $value .= $temp;
        }

        return $value;
    }

    /**
     * BER-decode the time
     *
     * Called by _decode_ber() and in the case of implicit tags asn1map().
     *
     * @param string $content
     * @param int $tag
     * @return \DateTime|false
     */
    private static function decodeTime($content, $tag)
    {
        /* UTCTime:
           http://tools.ietf.org/html/rfc5280#section-4.1.2.5.1
           http://www.obj-sys.com/asn1tutorial/node15.html

           GeneralizedTime:
           http://tools.ietf.org/html/rfc5280#section-4.1.2.5.2
           http://www.obj-sys.com/asn1tutorial/node14.html */

        $format = 'YmdHis';

        if ($tag == self::TYPE_UTC_TIME) {
            // https://www.itu.int/ITU-T/studygroups/com17/languages/X.690-0207.pdf#page=28 says "the seconds
            // element shall always be present" but none-the-less I've seen X509 certs where it isn't and if the
            // browsers parse it phpseclib ought to too
            if (preg_match('#^(\d{10})(Z|[+-]\d{4})$#', $content, $matches)) {
                $content = $matches[1] . '00' . $matches[2];
            }
            $prefix = substr($content, 0, 2) >= 50 ? '19' : '20';
            $content = $prefix . $content;
        } elseif (strpos($content, '.') !== false) {
            $format .= '.u';
        }

        if ($content[strlen($content) - 1] == 'Z') {
            $content = substr($content, 0, -1) . '+0000';
        }

        if (strpos($content, '-') !== false || strpos($content, '+') !== false) {
            $format .= 'O';
        }

        // error supression isn't necessary as of PHP 7.0:
        // http://php.net/manual/en/migration70.other-changes.php
        return @\DateTime::createFromFormat($format, $content);
    }

    /**
     * Set the time format
     *
     * Sets the time / date format for asn1map().
     *
     * @param string $format
     */
    public static function setTimeFormat($format)
    {
        self::$format = $format;
    }

    /**
     * Load OIDs
     *
     * Load the relevant OIDs for a particular ASN.1 semantic mapping.
     * Previously loaded OIDs are retained.
     *
     * @param array $oids
     */
    public static function loadOIDs(array $oids)
    {
        self::$reverseOIDs += $oids;
        self::$oids = array_flip(self::$reverseOIDs);
    }

    /**
     * Set filters
     *
     * See \phpseclib3\File\X509, etc, for an example.
     * Previously loaded filters are not retained.
     *
     * @param array $filters
     */
    public static function setFilters(array $filters)
    {
        self::$filters = $filters;
    }

    /**
     * String type conversion
     *
     * This is a lazy conversion, dealing only with character size.
     * No real conversion table is used.
     *
     * @param string $in
     * @param int $from
     * @param int $to
     * @return string
     */
    public static function convert($in, $from = self::TYPE_UTF8_STRING, $to = self::TYPE_UTF8_STRING)
    {
        // isset(self::STRING_TYPE_SIZE[$from] returns a fatal error on PHP 5.6
        if (!array_key_exists($from, self::STRING_TYPE_SIZE) || !array_key_exists($to, self::STRING_TYPE_SIZE)) {
            return false;
        }
        $insize = self::STRING_TYPE_SIZE[$from];
        $outsize = self::STRING_TYPE_SIZE[$to];
        $inlength = strlen($in);
        $out = '';

        for ($i = 0; $i < $inlength;) {
            if ($inlength - $i < $insize) {
                return false;
            }

            // Get an input character as a 32-bit value.
            $c = ord($in[$i++]);
            switch (true) {
                case $insize == 4:
                    $c = ($c << 8) | ord($in[$i++]);
                    $c = ($c << 8) | ord($in[$i++]);
                    // fall-through
                case $insize == 2:
                    $c = ($c << 8) | ord($in[$i++]);
                    // fall-through
                case $insize == 1:
                    break;
                case ($c & 0x80) == 0x00:
                    break;
                case ($c & 0x40) == 0x00:
                    return false;
                default:
                    $bit = 6;
                    do {
                        if ($bit > 25 || $i >= $inlength || (ord($in[$i]) & 0xC0) != 0x80) {
                            return false;
                        }
                        $c = ($c << 6) | (ord($in[$i++]) & 0x3F);
                        $bit += 5;
                        $mask = 1 << $bit;
                    } while ($c & $bit);
                    $c &= $mask - 1;
                    break;
            }

            // Convert and append the character to output string.
            $v = '';
            switch (true) {
                case $outsize == 4:
                    $v .= chr($c & 0xFF);
                    $c >>= 8;
                    $v .= chr($c & 0xFF);
                    $c >>= 8;
                    // fall-through
                case $outsize == 2:
                    $v .= chr($c & 0xFF);
                    $c >>= 8;
                    // fall-through
                case $outsize == 1:
                    $v .= chr($c & 0xFF);
                    $c >>= 8;
                    if ($c) {
                        return false;
                    }
                    break;
                case ($c & (PHP_INT_SIZE == 8 ? 0x80000000 : (1 << 31))) != 0:
                    return false;
                case $c >= 0x04000000:
                    $v .= chr(0x80 | ($c & 0x3F));
                    $c = ($c >> 6) | 0x04000000;
                    // fall-through
                case $c >= 0x00200000:
                    $v .= chr(0x80 | ($c & 0x3F));
                    $c = ($c >> 6) | 0x00200000;
                    // fall-through
                case $c >= 0x00010000:
                    $v .= chr(0x80 | ($c & 0x3F));
                    $c = ($c >> 6) | 0x00010000;
                    // fall-through
                case $c >= 0x00000800:
                    $v .= chr(0x80 | ($c & 0x3F));
                    $c = ($c >> 6) | 0x00000800;
                    // fall-through
                case $c >= 0x00000080:
                    $v .= chr(0x80 | ($c & 0x3F));
                    $c = ($c >> 6) | 0x000000C0;
                    // fall-through
                default:
                    $v .= chr($c);
                    break;
            }
            $out .= strrev($v);
        }
        return $out;
    }

    /**
     * Extract raw BER from Base64 encoding
     *
     * @param string $str
     * @return string
     */
    public static function extractBER($str)
    {
        /* X.509 certs are assumed to be base64 encoded but sometimes they'll have additional things in them
         * above and beyond the ceritificate.
         * ie. some may have the following preceding the -----BEGIN CERTIFICATE----- line:
         *
         * Bag Attributes
         *     localKeyID: 01 00 00 00
         * subject=/O=organization/OU=org unit/CN=common name
         * issuer=/O=organization/CN=common name
         */
        if (strlen($str) > ini_get('pcre.backtrack_limit')) {
            $temp = $str;
        } else {
            $temp = preg_replace('#.*?^-+[^-]+-+[\r\n ]*$#ms', '', $str, 1);
            $temp = preg_replace('#-+END.*[\r\n ]*.*#ms', '', $temp, 1);
        }
        // remove new lines
        $temp = str_replace(["\r", "\n", ' '], '', $temp);
        // remove the -----BEGIN CERTIFICATE----- and -----END CERTIFICATE----- stuff
        $temp = preg_replace('#^-+[^-]+-+|-+[^-]+-+$#', '', $temp);
        $temp = preg_match('#^[a-zA-Z\d/+]*={0,2}$#', $temp) ? Strings::base64_decode($temp) : false;
        return $temp != false ? $temp : $str;
    }

    /**
     * DER-encode the length
     *
     * DER supports lengths up to (2**8)**127, however, we'll only support lengths up to (2**8)**4.  See
     * {@link http://itu.int/ITU-T/studygroups/com17/languages/X.690-0207.pdf#p=13 X.690 paragraph 8.1.3} for more information.
     *
     * @param int $length
     * @return string
     */
    public static function encodeLength($length)
    {
        if ($length <= 0x7F) {
            return chr($length);
        }

        $temp = ltrim(pack('N', $length), chr(0));
        return pack('Ca*', 0x80 | strlen($temp), $temp);
    }

    /**
     * Returns the OID corresponding to a name
     *
     * What's returned in the associative array returned by loadX509() (or load*()) is either a name or an OID if
     * no OID to name mapping is available. The problem with this is that what may be an unmapped OID in one version
     * of phpseclib may not be unmapped in the next version, so apps that are looking at this OID may not be able
     * to work from version to version.
     *
     * This method will return the OID if a name is passed to it and if no mapping is avialable it'll assume that
     * what's being passed to it already is an OID and return that instead. A few examples.
     *
     * getOID('2.16.840.1.101.3.4.2.1') == '2.16.840.1.101.3.4.2.1'
     * getOID('id-sha256') == '2.16.840.1.101.3.4.2.1'
     * getOID('zzz') == 'zzz'
     *
     * @param string $name
     * @return string
     */
    public static function getOID($name)
    {
        return isset(self::$reverseOIDs[$name]) ? self::$reverseOIDs[$name] : $name;
    }
}
<?php

/**
 * ASN.1 Raw Element
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2012 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\File\ASN1;

/**
 * ASN.1 Raw Element
 *
 * An ASN.1 ANY mapping will return an ASN1\Element object. Use of this object
 * will also bypass the normal encoding rules in ASN1::encodeDER()
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
class Element
{
    /**
     * Raw element value
     *
     * @var string
     */
    public $element;

    /**
     * Constructor
     *
     * @param string $encoded
     * @return Element
     */
    public function __construct($encoded)
    {
        $this->element = $encoded;
    }
}
<?php

/**
 * AccessDescription
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2016 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\File\ASN1\Maps;

use phpseclib3\File\ASN1;

/**
 * AccessDescription
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class AccessDescription
{
    const MAP = [
        'type' => ASN1::TYPE_SEQUENCE,
        'children' => [
            'accessMethod' => ['type' => ASN1::TYPE_OBJECT_IDENTIFIER],
            'accessLocation' => GeneralName::MAP
        ]
    ];
}
<?php

/**
 * AdministrationDomainName
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2016 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\File\ASN1\Maps;

use phpseclib3\File\ASN1;

/**
 * AdministrationDomainName
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class AdministrationDomainName
{
    const MAP = [
        'type' => ASN1::TYPE_CHOICE,
        // if class isn't present it's assumed to be \phpseclib3\File\ASN1::CLASS_UNIVERSAL or
        // (if constant is present) \phpseclib3\File\ASN1::CLASS_CONTEXT_SPECIFIC
        'class' => ASN1::CLASS_APPLICATION,
        'cast' => 2,
        'children' => [
            'numeric' => ['type' => ASN1::TYPE_NUMERIC_STRING],
            'printable' => ['type' => ASN1::TYPE_PRINTABLE_STRING]
        ]
    ];
}
<?php

/**
 * AlgorithmIdentifier
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2016 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\File\ASN1\Maps;

use phpseclib3\File\ASN1;

/**
 * AlgorithmIdentifier
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class AlgorithmIdentifier
{
    const MAP = [
        'type' => ASN1::TYPE_SEQUENCE,
        'children' => [
            'algorithm' => ['type' => ASN1::TYPE_OBJECT_IDENTIFIER],
            'parameters' => [
                'type' => ASN1::TYPE_ANY,
                'optional' => true
            ]
        ]
    ];
}
<?php

/**
 * AnotherName
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2016 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\File\ASN1\Maps;

use phpseclib3\File\ASN1;

/**
 * AnotherName
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class AnotherName
{
    const MAP = [
        'type' => ASN1::TYPE_SEQUENCE,
        'children' => [
            'type-id' => ['type' => ASN1::TYPE_OBJECT_IDENTIFIER],
            'value' => [
                'type' => ASN1::TYPE_ANY,
                'constant' => 0,
                'optional' => true,
                'explicit' => true
            ]
        ]
    ];
}
<?php

/**
 * Attribute
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2016 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\File\ASN1\Maps;

use phpseclib3\File\ASN1;

/**
 * Attribute
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class Attribute
{
    const MAP = [
        'type' => ASN1::TYPE_SEQUENCE,
        'children' => [
            'type' => AttributeType::MAP,
            'value' => [
                'type' => ASN1::TYPE_SET,
                'min' => 1,
                'max' => -1,
                'children' => AttributeValue::MAP
            ]
        ]
    ];
}
<?php

/**
 * AttributeType
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2016 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\File\ASN1\Maps;

use phpseclib3\File\ASN1;

/**
 * AttributeType
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class AttributeType
{
    const MAP = ['type' => ASN1::TYPE_OBJECT_IDENTIFIER];
}
<?php

/**
 * AttributeTypeAndValue
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2016 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\File\ASN1\Maps;

use phpseclib3\File\ASN1;

/**
 * AttributeTypeAndValue
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class AttributeTypeAndValue
{
    const MAP = [
        'type' => ASN1::TYPE_SEQUENCE,
        'children' => [
            'type' => AttributeType::MAP,
            'value' => AttributeValue::MAP
        ]
    ];
}
<?php

/**
 * AttributeValue
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2016 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\File\ASN1\Maps;

use phpseclib3\File\ASN1;

/**
 * AttributeValue
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class AttributeValue
{
    const MAP = ['type' => ASN1::TYPE_ANY];
}
<?php

/**
 * Attributes
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2016 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\File\ASN1\Maps;

use phpseclib3\File\ASN1;

/**
 * Attributes
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class Attributes
{
    const MAP = [
        'type' => ASN1::TYPE_SET,
        'min' => 1,
        'max' => -1,
        'children' => Attribute::MAP
    ];
}
<?php

/**
 * AuthorityInfoAccessSyntax
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2016 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\File\ASN1\Maps;

use phpseclib3\File\ASN1;

/**
 * AuthorityInfoAccessSyntax
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class AuthorityInfoAccessSyntax
{
    const MAP = [
        'type' => ASN1::TYPE_SEQUENCE,
        'min' => 1,
        'max' => -1,
        'children' => AccessDescription::MAP
    ];
}
<?php

/**
 * AuthorityKeyIdentifier
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2016 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\File\ASN1\Maps;

use phpseclib3\File\ASN1;

/**
 * AuthorityKeyIdentifier
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class AuthorityKeyIdentifier
{
    const MAP = [
        'type' => ASN1::TYPE_SEQUENCE,
        'children' => [
            'keyIdentifier' => [
                'constant' => 0,
                'optional' => true,
                'implicit' => true
            ] + KeyIdentifier::MAP,
            'authorityCertIssuer' => [
                'constant' => 1,
                'optional' => true,
                'implicit' => true
            ] + GeneralNames::MAP,
            'authorityCertSerialNumber' => [
                'constant' => 2,
                'optional' => true,
                'implicit' => true
            ] + CertificateSerialNumber::MAP
        ]
    ];
}
<?php

/**
 * BaseDistance
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2016 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\File\ASN1\Maps;

use phpseclib3\File\ASN1;

/**
 * BaseDistance
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class BaseDistance
{
    const MAP = ['type' => ASN1::TYPE_INTEGER];
}
<?php

/**
 * BasicConstraints
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2016 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\File\ASN1\Maps;

use phpseclib3\File\ASN1;

/**
 * BasicConstraints
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class BasicConstraints
{
    const MAP = [
        'type' => ASN1::TYPE_SEQUENCE,
        'children' => [
            'cA' => [
                'type' => ASN1::TYPE_BOOLEAN,
                'optional' => true,
                'default' => false
            ],
            'pathLenConstraint' => [
                'type' => ASN1::TYPE_INTEGER,
                'optional' => true
            ]
        ]
    ];
}
<?php

/**
 * BuiltInDomainDefinedAttribute
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2016 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\File\ASN1\Maps;

use phpseclib3\File\ASN1;

/**
 * BuiltInDomainDefinedAttribute
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class BuiltInDomainDefinedAttribute
{
    const MAP = [
        'type' => ASN1::TYPE_SEQUENCE,
        'children' => [
            'type' => ['type' => ASN1::TYPE_PRINTABLE_STRING],
            'value' => ['type' => ASN1::TYPE_PRINTABLE_STRING]
        ]
    ];
}
<?php

/**
 * BuiltInDomainDefinedAttributes
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2016 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\File\ASN1\Maps;

use phpseclib3\File\ASN1;

/**
 * BuiltInDomainDefinedAttributes
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class BuiltInDomainDefinedAttributes
{
    const MAP = [
        'type' => ASN1::TYPE_SEQUENCE,
        'min' => 1,
        'max' => 4, // ub-domain-defined-attributes
        'children' => BuiltInDomainDefinedAttribute::MAP
    ];
}
<?php

/**
 * BuiltInStandardAttributes
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2016 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\File\ASN1\Maps;

use phpseclib3\File\ASN1;

/**
 * BuiltInStandardAttributes
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class BuiltInStandardAttributes
{
    const MAP = [
        'type' => ASN1::TYPE_SEQUENCE,
        'children' => [
            'country-name' => ['optional' => true] + CountryName::MAP,
            'administration-domain-name' => ['optional' => true] + AdministrationDomainName::MAP,
            'network-address' => [
                'constant' => 0,
                'optional' => true,
                'implicit' => true
            ] + NetworkAddress::MAP,
            'terminal-identifier' => [
                'constant' => 1,
                'optional' => true,
                'implicit' => true
            ] + TerminalIdentifier::MAP,
            'private-domain-name' => [
                'constant' => 2,
                'optional' => true,
                'explicit' => true
            ] + PrivateDomainName::MAP,
            'organization-name' => [
                'constant' => 3,
                'optional' => true,
                'implicit' => true
            ] + OrganizationName::MAP,
            'numeric-user-identifier' => [
                'constant' => 4,
                'optional' => true,
                'implicit' => true
            ] + NumericUserIdentifier::MAP,
            'personal-name' => [
                'constant' => 5,
                'optional' => true,
                'implicit' => true
            ] + PersonalName::MAP,
            'organizational-unit-names' => [
                'constant' => 6,
                'optional' => true,
                'implicit' => true
            ] + OrganizationalUnitNames::MAP
        ]
    ];
}
<?php

/**
 * CPSuri
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2016 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\File\ASN1\Maps;

use phpseclib3\File\ASN1;

/**
 * CPSuri
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class CPSuri
{
    const MAP = ['type' => ASN1::TYPE_IA5_STRING];
}
<?php

/**
 * CRLDistributionPoints
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2016 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\File\ASN1\Maps;

use phpseclib3\File\ASN1;

/**
 * CRLDistributionPoints
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class CRLDistributionPoints
{
    const MAP = [
        'type' => ASN1::TYPE_SEQUENCE,
        'min' => 1,
        'max' => -1,
        'children' => DistributionPoint::MAP
    ];
}
<?php

/**
 * CRLNumber
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2016 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\File\ASN1\Maps;

use phpseclib3\File\ASN1;

/**
 * CRLNumber
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class CRLNumber
{
    const MAP = ['type' => ASN1::TYPE_INTEGER];
}
<?php

/**
 * CRLReason
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2016 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\File\ASN1\Maps;

use phpseclib3\File\ASN1;

/**
 * CRLReason
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class CRLReason
{
    const MAP = [
        'type' => ASN1::TYPE_ENUMERATED,
        'mapping' => [
            'unspecified',
            'keyCompromise',
            'cACompromise',
            'affiliationChanged',
            'superseded',
            'cessationOfOperation',
            'certificateHold',
            // Value 7 is not used.
            8 => 'removeFromCRL',
            'privilegeWithdrawn',
            'aACompromise'
        ]
    ];
}
<?php

/**
 * CertPolicyId
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2016 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\File\ASN1\Maps;

use phpseclib3\File\ASN1;

/**
 * CertPolicyId
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class CertPolicyId
{
    const MAP = ['type' => ASN1::TYPE_OBJECT_IDENTIFIER];
}
<?php

/**
 * Certificate
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2016 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\File\ASN1\Maps;

use phpseclib3\File\ASN1;

/**
 * Certificate
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class Certificate
{
    const MAP = [
        'type' => ASN1::TYPE_SEQUENCE,
        'children' => [
            'tbsCertificate' => TBSCertificate::MAP,
            'signatureAlgorithm' => AlgorithmIdentifier::MAP,
            'signature' => ['type' => ASN1::TYPE_BIT_STRING]
        ]
    ];
}
<?php

/**
 * CertificateIssuer
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2016 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\File\ASN1\Maps;

/**
 * CertificateIssuer
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class CertificateIssuer
{
    const MAP = GeneralNames::MAP;
}
<?php

/**
 * CertificateList
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2016 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\File\ASN1\Maps;

use phpseclib3\File\ASN1;

/**
 * CertificateList
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class CertificateList
{
    const MAP = [
        'type' => ASN1::TYPE_SEQUENCE,
        'children' => [
            'tbsCertList' => TBSCertList::MAP,
            'signatureAlgorithm' => AlgorithmIdentifier::MAP,
            'signature' => ['type' => ASN1::TYPE_BIT_STRING]
        ]
    ];
}
<?php

/**
 * CertificatePolicies
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2016 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\File\ASN1\Maps;

use phpseclib3\File\ASN1;

/**
 * CertificatePolicies
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class CertificatePolicies
{
    const MAP = [
        'type' => ASN1::TYPE_SEQUENCE,
        'min' => 1,
        'max' => -1,
        'children' => PolicyInformation::MAP
    ];
}
<?php

/**
 * CertificateSerialNumber
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2016 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\File\ASN1\Maps;

use phpseclib3\File\ASN1;

/**
 * CertificateSerialNumber
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class CertificateSerialNumber
{
    const MAP = ['type' => ASN1::TYPE_INTEGER];
}
<?php

/**
 * CertificationRequest
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2016 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\File\ASN1\Maps;

use phpseclib3\File\ASN1;

/**
 * CertificationRequest
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class CertificationRequest
{
    const MAP = [
        'type' => ASN1::TYPE_SEQUENCE,
        'children' => [
            'certificationRequestInfo' => CertificationRequestInfo::MAP,
            'signatureAlgorithm' => AlgorithmIdentifier::MAP,
            'signature' => ['type' => ASN1::TYPE_BIT_STRING]
        ]
    ];
}
<?php

/**
 * CertificationRequestInfo
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2016 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\File\ASN1\Maps;

use phpseclib3\File\ASN1;

/**
 * CertificationRequestInfo
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class CertificationRequestInfo
{
    const MAP = [
        'type' => ASN1::TYPE_SEQUENCE,
        'children' => [
            'version' => [
                'type' => ASN1::TYPE_INTEGER,
                'mapping' => ['v1']
            ],
            'subject' => Name::MAP,
            'subjectPKInfo' => SubjectPublicKeyInfo::MAP,
            'attributes' => [
                'constant' => 0,
                'optional' => true,
                'implicit' => true
            ] + Attributes::MAP,
        ]
    ];
}
<?php

/**
 * Characteristic_two
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2016 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\File\ASN1\Maps;

use phpseclib3\File\ASN1;

/**
 * Characteristic_two
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class Characteristic_two
{
    const MAP = [
        'type' => ASN1::TYPE_SEQUENCE,
        'children' => [
            'm' => ['type' => ASN1::TYPE_INTEGER], // field size 2**m
            'basis' => ['type' => ASN1::TYPE_OBJECT_IDENTIFIER],
            'parameters' => [
                'type' => ASN1::TYPE_ANY,
                'optional' => true
            ]
        ]
    ];
}
<?php

/**
 * CountryName
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2016 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\File\ASN1\Maps;

use phpseclib3\File\ASN1;

/**
 * CountryName
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class CountryName
{
    const MAP = [
        'type' => ASN1::TYPE_CHOICE,
        // if class isn't present it's assumed to be \phpseclib3\File\ASN1::CLASS_UNIVERSAL or
        // (if constant is present) \phpseclib3\File\ASN1::CLASS_CONTEXT_SPECIFIC
        'class' => ASN1::CLASS_APPLICATION,
        'cast' => 1,
        'children' => [
            'x121-dcc-code' => ['type' => ASN1::TYPE_NUMERIC_STRING],
            'iso-3166-alpha2-code' => ['type' => ASN1::TYPE_PRINTABLE_STRING]
        ]
    ];
}
<?php

/**
 * Curve
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2016 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\File\ASN1\Maps;

use phpseclib3\File\ASN1;

/**
 * Curve
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class Curve
{
    const MAP = [
        'type' => ASN1::TYPE_SEQUENCE,
        'children' => [
            'a' => FieldElement::MAP,
            'b' => FieldElement::MAP,
            'seed' => [
                'type' => ASN1::TYPE_BIT_STRING,
                'optional' => true
            ]
        ]
    ];
}
<?php

/**
 * DHParameter
 *
 * From: https://www.teletrust.de/fileadmin/files/oid/oid_pkcs-3v1-4.pdf#page=6
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2016 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\File\ASN1\Maps;

use phpseclib3\File\ASN1;

/**
 * DHParameter
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class DHParameter
{
    const MAP = [
        'type' => ASN1::TYPE_SEQUENCE,
        'children' => [
            'prime' => ['type' => ASN1::TYPE_INTEGER],
            'base' => ['type' => ASN1::TYPE_INTEGER],
            'privateValueLength' => [
                'type' => ASN1::TYPE_INTEGER,
                'optional' => true
            ]
        ]
    ];
}
<?php

/**
 * DSAParams
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2016 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\File\ASN1\Maps;

use phpseclib3\File\ASN1;

/**
 * DSAParams
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class DSAParams
{
    const MAP = [
        'type' => ASN1::TYPE_SEQUENCE,
        'children' => [
            'p' => ['type' => ASN1::TYPE_INTEGER],
            'q' => ['type' => ASN1::TYPE_INTEGER],
            'g' => ['type' => ASN1::TYPE_INTEGER]
        ]
    ];
}
<?php

/**
 * DSAPrivateKey
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2016 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\File\ASN1\Maps;

use phpseclib3\File\ASN1;

/**
 * DSAPrivateKey
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class DSAPrivateKey
{
    const MAP = [
        'type' => ASN1::TYPE_SEQUENCE,
        'children' => [
            'version' => ['type' => ASN1::TYPE_INTEGER],
            'p' => ['type' => ASN1::TYPE_INTEGER],
            'q' => ['type' => ASN1::TYPE_INTEGER],
            'g' => ['type' => ASN1::TYPE_INTEGER],
            'y' => ['type' => ASN1::TYPE_INTEGER],
            'x' => ['type' => ASN1::TYPE_INTEGER]
        ]
    ];
}
<?php

/**
 * DSAPublicKey
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2016 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\File\ASN1\Maps;

use phpseclib3\File\ASN1;

/**
 * DSAPublicKey
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class DSAPublicKey
{
    const MAP = ['type' => ASN1::TYPE_INTEGER];
}
<?php

/**
 * DigestInfo
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2016 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\File\ASN1\Maps;

use phpseclib3\File\ASN1;

/**
 * DigestInfo
 *
 * from https://tools.ietf.org/html/rfc2898#appendix-A.3
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class DigestInfo
{
    const MAP = [
        'type' => ASN1::TYPE_SEQUENCE,
        'children' => [
            'digestAlgorithm' => AlgorithmIdentifier::MAP,
            'digest' => ['type' => ASN1::TYPE_OCTET_STRING]
        ]
    ];
}
<?php

/**
 * DirectoryString
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2016 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\File\ASN1\Maps;

use phpseclib3\File\ASN1;

/**
 * DirectoryString
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class DirectoryString
{
    const MAP = [
        'type' => ASN1::TYPE_CHOICE,
        'children' => [
            'teletexString' => ['type' => ASN1::TYPE_TELETEX_STRING],
            'printableString' => ['type' => ASN1::TYPE_PRINTABLE_STRING],
            'universalString' => ['type' => ASN1::TYPE_UNIVERSAL_STRING],
            'utf8String' => ['type' => ASN1::TYPE_UTF8_STRING],
            'bmpString' => ['type' => ASN1::TYPE_BMP_STRING]
        ]
    ];
}
<?php

/**
 * DisplayText
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2016 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\File\ASN1\Maps;

use phpseclib3\File\ASN1;

/**
 * DisplayText
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class DisplayText
{
    const MAP = [
        'type' => ASN1::TYPE_CHOICE,
        'children' => [
            'ia5String' => ['type' => ASN1::TYPE_IA5_STRING],
            'visibleString' => ['type' => ASN1::TYPE_VISIBLE_STRING],
            'bmpString' => ['type' => ASN1::TYPE_BMP_STRING],
            'utf8String' => ['type' => ASN1::TYPE_UTF8_STRING]
        ]
    ];
}
<?php

/**
 * DistributionPoint
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2016 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\File\ASN1\Maps;

use phpseclib3\File\ASN1;

/**
 * DistributionPoint
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class DistributionPoint
{
    const MAP = [
        'type' => ASN1::TYPE_SEQUENCE,
        'children' => [
            'distributionPoint' => [
                'constant' => 0,
                'optional' => true,
                'explicit' => true
            ] + DistributionPointName::MAP,
            'reasons' => [
                'constant' => 1,
                'optional' => true,
                'implicit' => true
            ] + ReasonFlags::MAP,
            'cRLIssuer' => [
                'constant' => 2,
                'optional' => true,
                'implicit' => true
            ] + GeneralNames::MAP
        ]
    ];
}
<?php

/**
 * DistributionPointName
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2016 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\File\ASN1\Maps;

use phpseclib3\File\ASN1;

/**
 * DistributionPointName
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class DistributionPointName
{
    const MAP = [
        'type' => ASN1::TYPE_CHOICE,
        'children' => [
            'fullName' => [
                'constant' => 0,
                'optional' => true,
                'implicit' => true
            ] + GeneralNames::MAP,
            'nameRelativeToCRLIssuer' => [
                'constant' => 1,
                'optional' => true,
                'implicit' => true
            ] + RelativeDistinguishedName::MAP
        ]
    ];
}
<?php

/**
 * DssSigValue
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2016 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\File\ASN1\Maps;

use phpseclib3\File\ASN1;

/**
 * DssSigValue
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class DssSigValue
{
    const MAP = [
        'type' => ASN1::TYPE_SEQUENCE,
        'children' => [
            'r' => ['type' => ASN1::TYPE_INTEGER],
            's' => ['type' => ASN1::TYPE_INTEGER]
        ]
    ];
}
<?php

/**
 * ECParameters
 *
 * From: https://tools.ietf.org/html/rfc5915
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2016 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\File\ASN1\Maps;

use phpseclib3\File\ASN1;

/**
 * ECParameters
 *
 *  ECParameters ::= CHOICE {
 *    namedCurve         OBJECT IDENTIFIER
 *    -- implicitCurve   NULL
 *    -- specifiedCurve  SpecifiedECDomain
 *  }
 *    -- implicitCurve and specifiedCurve MUST NOT be used in PKIX.
 *    -- Details for SpecifiedECDomain can be found in [X9.62].
 *    -- Any future additions to this CHOICE should be coordinated
 *    -- with ANSI X9.
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class ECParameters
{
    const MAP = [
        'type' => ASN1::TYPE_CHOICE,
        'children' => [
            'namedCurve' => ['type' => ASN1::TYPE_OBJECT_IDENTIFIER],
            'implicitCurve' => ['type' => ASN1::TYPE_NULL],
            'specifiedCurve' => SpecifiedECDomain::MAP
        ]
    ];
}
<?php

/**
 * ECPoint
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2016 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\File\ASN1\Maps;

use phpseclib3\File\ASN1;

/**
 * ECPoint
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class ECPoint
{
    const MAP = ['type' => ASN1::TYPE_OCTET_STRING];
}
<?php

/**
 * ECPrivateKey
 *
 * From: https://tools.ietf.org/html/rfc5915
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2016 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\File\ASN1\Maps;

use phpseclib3\File\ASN1;

/**
 * ECPrivateKey
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class ECPrivateKey
{
    const MAP = [
        'type' => ASN1::TYPE_SEQUENCE,
        'children' => [
            'version' => [
                'type' => ASN1::TYPE_INTEGER,
                'mapping' => [1 => 'ecPrivkeyVer1']
            ],
            'privateKey' => ['type' => ASN1::TYPE_OCTET_STRING],
            'parameters' => [
                'constant' => 0,
                'optional' => true,
                'explicit' => true
            ] + ECParameters::MAP,
            'publicKey' => [
                'type' => ASN1::TYPE_BIT_STRING,
                'constant' => 1,
                'optional' => true,
                'explicit' => true
            ]
        ]
    ];
}
<?php

/**
 * EDIPartyName
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2016 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\File\ASN1\Maps;

use phpseclib3\File\ASN1;

/**
 * EDIPartyName
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class EDIPartyName
{
    const MAP = [
        'type' => ASN1::TYPE_SEQUENCE,
        'children' => [
            'nameAssigner' => [
                'constant' => 0,
                'optional' => true,
                'implicit' => true
            ] + DirectoryString::MAP,
            // partyName is technically required but \phpseclib3\File\ASN1 doesn't currently support non-optional constants and
            // setting it to optional gets the job done in any event.
            'partyName' => [
                'constant' => 1,
                'optional' => true,
                'implicit' => true
            ] + DirectoryString::MAP
        ]
    ];
}
<?php

/**
 * EcdsaSigValue
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2016 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\File\ASN1\Maps;

use phpseclib3\File\ASN1;

/**
 * EcdsaSigValue
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class EcdsaSigValue
{
    const MAP = [
        'type' => ASN1::TYPE_SEQUENCE,
        'children' => [
            'r' => ['type' => ASN1::TYPE_INTEGER],
            's' => ['type' => ASN1::TYPE_INTEGER]
        ]
    ];
}
<?php

/**
 * EncryptedData
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2016 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\File\ASN1\Maps;

use phpseclib3\File\ASN1;

/**
 * EncryptedData
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class EncryptedData
{
    const MAP = ['type' => ASN1::TYPE_OCTET_STRING];
}
<?php

/**
 * EncryptedPrivateKeyInfo
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2016 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\File\ASN1\Maps;

use phpseclib3\File\ASN1;

/**
 * EncryptedPrivateKeyInfo
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class EncryptedPrivateKeyInfo
{
    const MAP = [
        'type' => ASN1::TYPE_SEQUENCE,
        'children' => [
            'encryptionAlgorithm' => AlgorithmIdentifier::MAP,
            'encryptedData' => EncryptedData::MAP
        ]
    ];
}
<?php

/**
 * ExtKeyUsageSyntax
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2016 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\File\ASN1\Maps;

use phpseclib3\File\ASN1;

/**
 * ExtKeyUsageSyntax
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class ExtKeyUsageSyntax
{
    const MAP = [
        'type' => ASN1::TYPE_SEQUENCE,
        'min' => 1,
        'max' => -1,
        'children' => KeyPurposeId::MAP
    ];
}
<?php

/**
 * Extension
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2016 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\File\ASN1\Maps;

use phpseclib3\File\ASN1;

/**
 * Extension
 *
 * A certificate using system MUST reject the certificate if it encounters
 * a critical extension it does not recognize; however, a non-critical
 * extension may be ignored if it is not recognized.
 *
 * http://tools.ietf.org/html/rfc5280#section-4.2
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class Extension
{
    const MAP = [
        'type' => ASN1::TYPE_SEQUENCE,
        'children' => [
            'extnId' => ['type' => ASN1::TYPE_OBJECT_IDENTIFIER],
            'critical' => [
                'type' => ASN1::TYPE_BOOLEAN,
                'optional' => true,
                'default' => false
            ],
            'extnValue' => ['type' => ASN1::TYPE_OCTET_STRING]
        ]
    ];
}
<?php

/**
 * ExtensionAttribute
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2016 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\File\ASN1\Maps;

use phpseclib3\File\ASN1;

/**
 * ExtensionAttribute
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class ExtensionAttribute
{
    const MAP = [
        'type' => ASN1::TYPE_SEQUENCE,
        'children' => [
            'extension-attribute-type' => [
                'type' => ASN1::TYPE_PRINTABLE_STRING,
                'constant' => 0,
                'optional' => true,
                'implicit' => true
            ],
            'extension-attribute-value' => [
                'type' => ASN1::TYPE_ANY,
                'constant' => 1,
                'optional' => true,
                'explicit' => true
            ]
        ]
    ];
}
<?php

/**
 * ExtensionAttributes
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2016 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\File\ASN1\Maps;

use phpseclib3\File\ASN1;

/**
 * ExtensionAttributes
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class ExtensionAttributes
{
    const MAP = [
        'type' => ASN1::TYPE_SET,
        'min' => 1,
        'max' => 256, // ub-extension-attributes
        'children' => ExtensionAttribute::MAP
    ];
}
<?php

/**
 * Extensions
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2016 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\File\ASN1\Maps;

use phpseclib3\File\ASN1;

/**
 * Extensions
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class Extensions
{
    const MAP = [
        'type' => ASN1::TYPE_SEQUENCE,
        'min' => 1,
        // technically, it's MAX, but we'll assume anything < 0 is MAX
        'max' => -1,
        // if 'children' isn't an array then 'min' and 'max' must be defined
        'children' => Extension::MAP
    ];
}
<?php

/**
 * FieldElement
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2016 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\File\ASN1\Maps;

use phpseclib3\File\ASN1;

/**
 * FieldElement
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class FieldElement
{
    const MAP = ['type' => ASN1::TYPE_OCTET_STRING];
}
<?php

/**
 * FieldID
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2016 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\File\ASN1\Maps;

use phpseclib3\File\ASN1;

/**
 * FieldID
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class FieldID
{
    const MAP = [
        'type' => ASN1::TYPE_SEQUENCE,
        'children' => [
            'fieldType' => ['type' => ASN1::TYPE_OBJECT_IDENTIFIER],
            'parameters' => [
                'type' => ASN1::TYPE_ANY,
                'optional' => true
            ]
        ]
    ];
}
<?php

/**
 * GeneralName
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2016 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\File\ASN1\Maps;

use phpseclib3\File\ASN1;

/**
 * GeneralName
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class GeneralName
{
    const MAP = [
        'type' => ASN1::TYPE_CHOICE,
        'children' => [
            'otherName' => [
                'constant' => 0,
                'optional' => true,
                'implicit' => true
            ] + AnotherName::MAP,
            'rfc822Name' => [
                'type' => ASN1::TYPE_IA5_STRING,
                'constant' => 1,
                'optional' => true,
                'implicit' => true
            ],
            'dNSName' => [
                'type' => ASN1::TYPE_IA5_STRING,
                'constant' => 2,
                'optional' => true,
                'implicit' => true
            ],
            'x400Address' => [
                'constant' => 3,
                'optional' => true,
                'implicit' => true
            ] + ORAddress::MAP,
            'directoryName' => [
                'constant' => 4,
                'optional' => true,
                'explicit' => true
            ] + Name::MAP,
            'ediPartyName' => [
                'constant' => 5,
                'optional' => true,
                'implicit' => true
            ] + EDIPartyName::MAP,
            'uniformResourceIdentifier' => [
                'type' => ASN1::TYPE_IA5_STRING,
                'constant' => 6,
                'optional' => true,
                'implicit' => true
            ],
            'iPAddress' => [
                'type' => ASN1::TYPE_OCTET_STRING,
                'constant' => 7,
                'optional' => true,
                'implicit' => true
            ],
            'registeredID' => [
                'type' => ASN1::TYPE_OBJECT_IDENTIFIER,
                'constant' => 8,
                'optional' => true,
                'implicit' => true
            ]
        ]
    ];
}
<?php

/**
 * GeneralNames
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2016 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\File\ASN1\Maps;

use phpseclib3\File\ASN1;

/**
 * GeneralNames
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class GeneralNames
{
    const MAP = [
        'type' => ASN1::TYPE_SEQUENCE,
        'min' => 1,
        'max' => -1,
        'children' => GeneralName::MAP
    ];
}
<?php

/**
 * GeneralSubtree
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2016 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\File\ASN1\Maps;

use phpseclib3\File\ASN1;

/**
 * GeneralSubtree
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class GeneralSubtree
{
    const MAP = [
        'type' => ASN1::TYPE_SEQUENCE,
        'children' => [
            'base' => GeneralName::MAP,
            'minimum' => [
                'constant' => 0,
                'optional' => true,
                'implicit' => true,
                'default' => '0'
            ] + BaseDistance::MAP,
            'maximum' => [
                'constant' => 1,
                'optional' => true,
                'implicit' => true,
            ] + BaseDistance::MAP
        ]
    ];
}
<?php

/**
 * GeneralSubtrees
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2016 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\File\ASN1\Maps;

use phpseclib3\File\ASN1;

/**
 * GeneralSubtrees
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class GeneralSubtrees
{
    const MAP = [
        'type' => ASN1::TYPE_SEQUENCE,
        'min' => 1,
        'max' => -1,
        'children' => GeneralSubtree::MAP
    ];
}
<?php

/**
 * HashAglorithm
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2016 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\File\ASN1\Maps;

/**
 * HashAglorithm
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class HashAlgorithm
{
    const MAP = AlgorithmIdentifier::MAP;
}
<?php

/**
 * HoldInstructionCode
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2016 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\File\ASN1\Maps;

use phpseclib3\File\ASN1;

/**
 * HoldInstructionCode
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class HoldInstructionCode
{
    const MAP = ['type' => ASN1::TYPE_OBJECT_IDENTIFIER];
}
<?php

/**
 * InvalidityDate
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2016 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\File\ASN1\Maps;

use phpseclib3\File\ASN1;

/**
 * InvalidityDate
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class InvalidityDate
{
    const MAP = ['type' => ASN1::TYPE_GENERALIZED_TIME];
}
<?php

/**
 * IssuerAltName
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2016 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\File\ASN1\Maps;

/**
 * IssuerAltName
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class IssuerAltName
{
    const MAP = GeneralNames::MAP;
}
<?php

/**
 * IssuingDistributionPoint
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2016 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\File\ASN1\Maps;

use phpseclib3\File\ASN1;

/**
 * IssuingDistributionPoint
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class IssuingDistributionPoint
{
    const MAP = [
        'type' => ASN1::TYPE_SEQUENCE,
        'children' => [
            'distributionPoint' => [
                'constant' => 0,
                'optional' => true,
                'explicit' => true
            ] + DistributionPointName::MAP,
            'onlyContainsUserCerts' => [
                'type' => ASN1::TYPE_BOOLEAN,
                'constant' => 1,
                'optional' => true,
                'default' => false,
                'implicit' => true
            ],
            'onlyContainsCACerts' => [
                'type' => ASN1::TYPE_BOOLEAN,
                'constant' => 2,
                'optional' => true,
                'default' => false,
                'implicit' => true
            ],
            'onlySomeReasons' => [
                'constant' => 3,
                'optional' => true,
                'implicit' => true
            ] + ReasonFlags::MAP,
            'indirectCRL' => [
                'type' => ASN1::TYPE_BOOLEAN,
                'constant' => 4,
                'optional' => true,
                'default' => false,
                'implicit' => true
            ],
            'onlyContainsAttributeCerts' => [
                'type' => ASN1::TYPE_BOOLEAN,
                'constant' => 5,
                'optional' => true,
                'default' => false,
                'implicit' => true
            ]
        ]
    ];
}
<?php

/**
 * KeyIdentifier
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2016 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\File\ASN1\Maps;

use phpseclib3\File\ASN1;

/**
 * KeyIdentifier
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class KeyIdentifier
{
    const MAP = ['type' => ASN1::TYPE_OCTET_STRING];
}
<?php

/**
 * KeyPurposeId
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2016 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\File\ASN1\Maps;

use phpseclib3\File\ASN1;

/**
 * KeyPurposeId
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class KeyPurposeId
{
    const MAP = ['type' => ASN1::TYPE_OBJECT_IDENTIFIER];
}
<?php

/**
 * KeyUsage
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2016 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\File\ASN1\Maps;

use phpseclib3\File\ASN1;

/**
 * KeyUsage
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class KeyUsage
{
    const MAP = [
        'type' => ASN1::TYPE_BIT_STRING,
        'mapping' => [
            'digitalSignature',
            'nonRepudiation',
            'keyEncipherment',
            'dataEncipherment',
            'keyAgreement',
            'keyCertSign',
            'cRLSign',
            'encipherOnly',
            'decipherOnly'
        ]
    ];
}
<?php

/**
 * MaskGenAglorithm
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2016 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\File\ASN1\Maps;

/**
 * MaskGenAglorithm
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class MaskGenAlgorithm
{
    const MAP = AlgorithmIdentifier::MAP;
}
<?php

/**
 * Name
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2016 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\File\ASN1\Maps;

use phpseclib3\File\ASN1;

/**
 * Name
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class Name
{
    const MAP = [
        'type' => ASN1::TYPE_CHOICE,
        'children' => [
            'rdnSequence' => RDNSequence::MAP
        ]
    ];
}
<?php

/**
 * NameConstraints
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2016 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\File\ASN1\Maps;

use phpseclib3\File\ASN1;

/**
 * NameConstraints
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class NameConstraints
{
    const MAP = [
        'type' => ASN1::TYPE_SEQUENCE,
        'children' => [
            'permittedSubtrees' => [
                'constant' => 0,
                'optional' => true,
                'implicit' => true
            ] + GeneralSubtrees::MAP,
            'excludedSubtrees' => [
                'constant' => 1,
                'optional' => true,
                'implicit' => true
            ] + GeneralSubtrees::MAP
        ]
    ];
}
<?php

/**
 * NetworkAddress
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2016 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\File\ASN1\Maps;

use phpseclib3\File\ASN1;

/**
 * NetworkAddress
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class NetworkAddress
{
    const MAP = ['type' => ASN1::TYPE_NUMERIC_STRING];
}
<?php

/**
 * NoticeReference
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2016 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\File\ASN1\Maps;

use phpseclib3\File\ASN1;

/**
 * NoticeReference
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class NoticeReference
{
    const MAP = [
        'type' => ASN1::TYPE_SEQUENCE,
        'children' => [
            'organization' => DisplayText::MAP,
            'noticeNumbers' => [
                'type' => ASN1::TYPE_SEQUENCE,
                'min' => 1,
                'max' => 200,
                'children' => ['type' => ASN1::TYPE_INTEGER]
            ]
        ]
    ];
}
<?php

/**
 * NumericUserIdentifier
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2016 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\File\ASN1\Maps;

use phpseclib3\File\ASN1;

/**
 * NumericUserIdentifier
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class NumericUserIdentifier
{
    const MAP = ['type' => ASN1::TYPE_NUMERIC_STRING];
}
<?php

/**
 * ORAddress
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2016 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\File\ASN1\Maps;

use phpseclib3\File\ASN1;

/**
 * ORAddress
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class ORAddress
{
    const MAP = [
        'type' => ASN1::TYPE_SEQUENCE,
        'children' => [
            'built-in-standard-attributes' => BuiltInStandardAttributes::MAP,
            'built-in-domain-defined-attributes' => ['optional' => true] + BuiltInDomainDefinedAttributes::MAP,
            'extension-attributes' => ['optional' => true] + ExtensionAttributes::MAP
        ]
    ];
}
<?php

/**
 * OneAsymmetricKey
 *
 * See https://tools.ietf.org/html/rfc5958
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2016 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\File\ASN1\Maps;

use phpseclib3\File\ASN1;

/**
 * OneAsymmetricKey
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class OneAsymmetricKey
{
    const MAP = [
        'type' => ASN1::TYPE_SEQUENCE,
        'children' => [
            'version' => [
                'type' => ASN1::TYPE_INTEGER,
                'mapping' => ['v1', 'v2']
            ],
            'privateKeyAlgorithm' => AlgorithmIdentifier::MAP,
            'privateKey' => PrivateKey::MAP,
            'attributes' => [
                'constant' => 0,
                'optional' => true,
                'implicit' => true
            ] + Attributes::MAP,
            'publicKey' => [
                'constant' => 1,
                'optional' => true,
                'implicit' => true
            ] + PublicKey::MAP
        ]
    ];
}
<?php

/**
 * OrganizationName
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2016 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\File\ASN1\Maps;

use phpseclib3\File\ASN1;

/**
 * OrganizationName
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class OrganizationName
{
    const MAP = ['type' => ASN1::TYPE_PRINTABLE_STRING];
}
<?php

/**
 * OrganizationalUnitNames
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2016 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\File\ASN1\Maps;

use phpseclib3\File\ASN1;

/**
 * OrganizationalUnitNames
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class OrganizationalUnitNames
{
    const MAP = [
        'type' => ASN1::TYPE_SEQUENCE,
        'min' => 1,
        'max' => 4, // ub-organizational-units
        'children' => ['type' => ASN1::TYPE_PRINTABLE_STRING]
    ];
}
<?php

/**
 * OtherPrimeInfo
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2016 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\File\ASN1\Maps;

use phpseclib3\File\ASN1;

/**
 * OtherPrimeInfo
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class OtherPrimeInfo
{
    // version must be multi if otherPrimeInfos present
    const MAP = [
        'type' => ASN1::TYPE_SEQUENCE,
        'children' => [
            'prime' => ['type' => ASN1::TYPE_INTEGER],      // ri
            'exponent' => ['type' => ASN1::TYPE_INTEGER],   // di
            'coefficient' => ['type' => ASN1::TYPE_INTEGER] // ti
        ]
    ];
}
<?php

/**
 * OtherPrimeInfos
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2016 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\File\ASN1\Maps;

use phpseclib3\File\ASN1;

/**
 * OtherPrimeInfos
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class OtherPrimeInfos
{
    // version must be multi if otherPrimeInfos present
    const MAP = [
        'type' => ASN1::TYPE_SEQUENCE,
        'min' => 1,
        'max' => -1,
        'children' => OtherPrimeInfo::MAP
    ];
}
<?php

/**
 * PBEParameter
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2016 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\File\ASN1\Maps;

use phpseclib3\File\ASN1;

/**
 * PBEParameter
 *
 * from https://tools.ietf.org/html/rfc2898#appendix-A.3
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class PBEParameter
{
    const MAP = [
        'type' => ASN1::TYPE_SEQUENCE,
        'children' => [
            'salt' => ['type' => ASN1::TYPE_OCTET_STRING],
            'iterationCount' => ['type' => ASN1::TYPE_INTEGER]
        ]
    ];
}
<?php

/**
 * PBES2params
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2016 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\File\ASN1\Maps;

use phpseclib3\File\ASN1;

/**
 * PBES2params
 *
 * from https://tools.ietf.org/html/rfc2898#appendix-A.3
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class PBES2params
{
    const MAP = [
        'type' => ASN1::TYPE_SEQUENCE,
        'children' => [
            'keyDerivationFunc' => AlgorithmIdentifier::MAP,
            'encryptionScheme' => AlgorithmIdentifier::MAP
        ]
    ];
}
<?php

/**
 * PBKDF2params
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2016 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\File\ASN1\Maps;

use phpseclib3\File\ASN1;

/**
 * PBKDF2params
 *
 * from https://tools.ietf.org/html/rfc2898#appendix-A.3
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class PBKDF2params
{
    const MAP = [
        'type' => ASN1::TYPE_SEQUENCE,
        'children' => [
            // technically, this is a CHOICE in RFC2898 but the other "choice" is, currently, more of a placeholder
            // in the RFC
            'salt' => ['type' => ASN1::TYPE_OCTET_STRING],
            'iterationCount' => ['type' => ASN1::TYPE_INTEGER],
            'keyLength' => [
                'type' => ASN1::TYPE_INTEGER,
                'optional' => true
            ],
            'prf' => AlgorithmIdentifier::MAP + ['optional' => true]
        ]
    ];
}
<?php

/**
 * PBMAC1params
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2016 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\File\ASN1\Maps;

use phpseclib3\File\ASN1;

/**
 * PBMAC1params
 *
 * from https://tools.ietf.org/html/rfc2898#appendix-A.3
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class PBMAC1params
{
    const MAP = [
        'type' => ASN1::TYPE_SEQUENCE,
        'children' => [
            'keyDerivationFunc' => AlgorithmIdentifier::MAP,
            'messageAuthScheme' => AlgorithmIdentifier::MAP
        ]
    ];
}
<?php

/**
 * PKCS9String
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2016 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\File\ASN1\Maps;

use phpseclib3\File\ASN1;

/**
 * PKCS9String
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class PKCS9String
{
    const MAP = [
        'type' => ASN1::TYPE_CHOICE,
        'children' => [
            'ia5String' => ['type' => ASN1::TYPE_IA5_STRING],
            'directoryString' => DirectoryString::MAP
        ]
    ];
}
<?php

/**
 * Pentanomial
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2016 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\File\ASN1\Maps;

use phpseclib3\File\ASN1;

/**
 * Pentanomial
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class Pentanomial
{
    const MAP = [
        'type' => ASN1::TYPE_SEQUENCE,
        'children' => [
            'k1' => ['type' => ASN1::TYPE_INTEGER], // k1 > 0
            'k2' => ['type' => ASN1::TYPE_INTEGER], // k2 > k1
            'k3' => ['type' => ASN1::TYPE_INTEGER], // k3 > h2
        ]
    ];
}
<?php

/**
 * PersonalName
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2016 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\File\ASN1\Maps;

use phpseclib3\File\ASN1;

/**
 * PersonalName
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class PersonalName
{
    const MAP = [
        'type' => ASN1::TYPE_SET,
        'children' => [
            'surname' => [
                'type' => ASN1::TYPE_PRINTABLE_STRING,
                'constant' => 0,
                'optional' => true,
                'implicit' => true
            ],
            'given-name' => [
                'type' => ASN1::TYPE_PRINTABLE_STRING,
                'constant' => 1,
                'optional' => true,
                'implicit' => true
            ],
            'initials' => [
                'type' => ASN1::TYPE_PRINTABLE_STRING,
                'constant' => 2,
                'optional' => true,
                'implicit' => true
            ],
            'generation-qualifier' => [
                'type' => ASN1::TYPE_PRINTABLE_STRING,
                'constant' => 3,
                'optional' => true,
                'implicit' => true
            ]
        ]
    ];
}
<?php

/**
 * PolicyInformation
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2016 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\File\ASN1\Maps;

use phpseclib3\File\ASN1;

/**
 * PolicyInformation
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class PolicyInformation
{
    const MAP = [
        'type' => ASN1::TYPE_SEQUENCE,
        'children' => [
            'policyIdentifier' => CertPolicyId::MAP,
            'policyQualifiers' => [
                'type' => ASN1::TYPE_SEQUENCE,
                'min' => 0,
                'max' => -1,
                'optional' => true,
                'children' => PolicyQualifierInfo::MAP
            ]
        ]
    ];
}
<?php

/**
 * PolicyMappings
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2016 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\File\ASN1\Maps;

use phpseclib3\File\ASN1;

/**
 * PolicyMappings
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class PolicyMappings
{
    const MAP = [
        'type' => ASN1::TYPE_SEQUENCE,
        'min' => 1,
        'max' => -1,
        'children' => [
            'type' => ASN1::TYPE_SEQUENCE,
            'children' => [
                'issuerDomainPolicy' => CertPolicyId::MAP,
                'subjectDomainPolicy' => CertPolicyId::MAP
            ]
        ]
    ];
}
<?php

/**
 * PolicyQualifierId
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2016 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\File\ASN1\Maps;

use phpseclib3\File\ASN1;

/**
 * PolicyQualifierId
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class PolicyQualifierId
{
    const MAP = ['type' => ASN1::TYPE_OBJECT_IDENTIFIER];
}
<?php

/**
 * PolicyQualifierInfo
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2016 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\File\ASN1\Maps;

use phpseclib3\File\ASN1;

/**
 * PolicyQualifierInfo
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class PolicyQualifierInfo
{
    const MAP = [
        'type' => ASN1::TYPE_SEQUENCE,
        'children' => [
            'policyQualifierId' => PolicyQualifierId::MAP,
            'qualifier' => ['type' => ASN1::TYPE_ANY]
        ]
    ];
}
<?php

/**
 * PostalAddress
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2016 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\File\ASN1\Maps;

use phpseclib3\File\ASN1;

/**
 * PostalAddress
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class PostalAddress
{
    const MAP = [
        'type' => ASN1::TYPE_SEQUENCE,
        'optional' => true,
        'min' => 1,
        'max' => -1,
        'children' => DirectoryString::MAP
    ];
}
<?php

/**
 * Prime_p
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2016 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\File\ASN1\Maps;

use phpseclib3\File\ASN1;

/**
 * Prime_p
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class Prime_p
{
    const MAP = ['type' => ASN1::TYPE_INTEGER];
}
<?php

/**
 * PrivateDomainName
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2016 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\File\ASN1\Maps;

use phpseclib3\File\ASN1;

/**
 * PrivateDomainName
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class PrivateDomainName
{
    const MAP = [
        'type' => ASN1::TYPE_CHOICE,
        'children' => [
            'numeric' => ['type' => ASN1::TYPE_NUMERIC_STRING],
            'printable' => ['type' => ASN1::TYPE_PRINTABLE_STRING]
        ]
    ];
}
<?php

/**
 * PrivateKey
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2016 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\File\ASN1\Maps;

use phpseclib3\File\ASN1;

/**
 * PrivateKey
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class PrivateKey
{
    const MAP = ['type' => ASN1::TYPE_OCTET_STRING];
}
<?php

/**
 * PrivateKeyInfo
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2016 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\File\ASN1\Maps;

use phpseclib3\File\ASN1;

/**
 * PrivateKeyInfo
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class PrivateKeyInfo
{
    const MAP = [
        'type' => ASN1::TYPE_SEQUENCE,
        'children' => [
            'version' => [
                'type' => ASN1::TYPE_INTEGER,
                'mapping' => ['v1']
            ],
            'privateKeyAlgorithm' => AlgorithmIdentifier::MAP,
            'privateKey' => PrivateKey::MAP,
            'attributes' => [
                'constant' => 0,
                'optional' => true,
                'implicit' => true
            ] + Attributes::MAP
        ]
    ];
}
<?php

/**
 * PrivateKeyUsagePeriod
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2016 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\File\ASN1\Maps;

use phpseclib3\File\ASN1;

/**
 * PrivateKeyUsagePeriod
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class PrivateKeyUsagePeriod
{
    const MAP = [
        'type' => ASN1::TYPE_SEQUENCE,
        'children' => [
            'notBefore' => [
                'constant' => 0,
                'optional' => true,
                'implicit' => true,
                'type' => ASN1::TYPE_GENERALIZED_TIME],
            'notAfter' => [
                'constant' => 1,
                'optional' => true,
                'implicit' => true,
                'type' => ASN1::TYPE_GENERALIZED_TIME]
        ]
    ];
}
<?php

/**
 * PublicKey
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2016 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\File\ASN1\Maps;

use phpseclib3\File\ASN1;

/**
 * PublicKey
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class PublicKey
{
    const MAP = ['type' => ASN1::TYPE_BIT_STRING];
}
<?php

/**
 * PublicKeyAndChallenge
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2016 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\File\ASN1\Maps;

use phpseclib3\File\ASN1;

/**
 * PublicKeyAndChallenge
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class PublicKeyAndChallenge
{
    const MAP = [
        'type' => ASN1::TYPE_SEQUENCE,
        'children' => [
            'spki' => SubjectPublicKeyInfo::MAP,
            'challenge' => ['type' => ASN1::TYPE_IA5_STRING]
        ]
    ];
}
<?php

/**
 * PublicKeyInfo
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2016 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\File\ASN1\Maps;

use phpseclib3\File\ASN1;

/**
 * PublicKeyInfo
 *
 * this format is not formally defined anywhere but is none-the-less the form you
 * get when you do "openssl rsa -in private.pem -outform PEM -pubout"
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class PublicKeyInfo
{
    const MAP = [
        'type' => ASN1::TYPE_SEQUENCE,
        'children' => [
            'publicKeyAlgorithm' => AlgorithmIdentifier::MAP,
            'publicKey' => ['type' => ASN1::TYPE_BIT_STRING]
        ]
    ];
}
<?php

/**
 * RC2CBCParameter
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2016 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\File\ASN1\Maps;

use phpseclib3\File\ASN1;

/**
 * RC2CBCParameter
 *
 * from https://tools.ietf.org/html/rfc2898#appendix-A.3
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class RC2CBCParameter
{
    const MAP = [
        'type' => ASN1::TYPE_SEQUENCE,
        'children' => [
            'rc2ParametersVersion' => [
                'type' => ASN1::TYPE_INTEGER,
                'optional' => true
            ],
            'iv' => ['type' => ASN1::TYPE_OCTET_STRING]
        ]
    ];
}
<?php

/**
 * RDNSequence
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2016 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\File\ASN1\Maps;

use phpseclib3\File\ASN1;

/**
 * RDNSequence
 *
 * In practice, RDNs containing multiple name-value pairs (called "multivalued RDNs") are rare,
 * but they can be useful at times when either there is no unique attribute in the entry or you
 * want to ensure that the entry's DN contains some useful identifying information.
 *
 * - https://www.opends.org/wiki/page/DefinitionRelativeDistinguishedName
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class RDNSequence
{
    const MAP = [
        'type' => ASN1::TYPE_SEQUENCE,
        // RDNSequence does not define a min or a max, which means it doesn't have one
        'min' => 0,
        'max' => -1,
        'children' => RelativeDistinguishedName::MAP
    ];
}
<?php

/**
 * RSAPrivateKey
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2016 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\File\ASN1\Maps;

use phpseclib3\File\ASN1;

/**
 * RSAPrivateKey
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class RSAPrivateKey
{
    // version must be multi if otherPrimeInfos present
    const MAP = [
        'type' => ASN1::TYPE_SEQUENCE,
        'children' => [
            'version' => [
                'type' => ASN1::TYPE_INTEGER,
                'mapping' => ['two-prime', 'multi']
            ],
            'modulus' => ['type' => ASN1::TYPE_INTEGER],         // n
            'publicExponent' => ['type' => ASN1::TYPE_INTEGER],  // e
            'privateExponent' => ['type' => ASN1::TYPE_INTEGER], // d
            'prime1' => ['type' => ASN1::TYPE_INTEGER],          // p
            'prime2' => ['type' => ASN1::TYPE_INTEGER],          // q
            'exponent1' => ['type' => ASN1::TYPE_INTEGER],       // d mod (p-1)
            'exponent2' => ['type' => ASN1::TYPE_INTEGER],       // d mod (q-1)
            'coefficient' => ['type' => ASN1::TYPE_INTEGER],     // (inverse of q) mod p
            'otherPrimeInfos' => OtherPrimeInfos::MAP + ['optional' => true]
        ]
    ];
}
<?php

/**
 * RSAPublicKey
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2016 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\File\ASN1\Maps;

use phpseclib3\File\ASN1;

/**
 * RSAPublicKey
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class RSAPublicKey
{
    const MAP = [
        'type' => ASN1::TYPE_SEQUENCE,
        'children' => [
            'modulus' => ['type' => ASN1::TYPE_INTEGER],
            'publicExponent' => ['type' => ASN1::TYPE_INTEGER]
        ]
    ];
}
<?php

/**
 * RSASSA_PSS_params
 *
 * As defined in https://tools.ietf.org/html/rfc4055#section-3.1
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2016 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\File\ASN1\Maps;

use phpseclib3\File\ASN1;

/**
 * RSASSA_PSS_params
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class RSASSA_PSS_params
{
    const MAP = [
        'type' => ASN1::TYPE_SEQUENCE,
        'children' => [
            'hashAlgorithm' => [
                'constant' => 0,
                'optional' => true,
                'explicit' => true,
                //'default'  => 'sha1Identifier'
            ] + HashAlgorithm::MAP,
            'maskGenAlgorithm' => [
                'constant' => 1,
                'optional' => true,
                'explicit' => true,
                //'default'  => 'mgf1SHA1Identifier'
            ] + MaskGenAlgorithm::MAP,
            'saltLength' => [
                'type' => ASN1::TYPE_INTEGER,
                'constant' => 2,
                'optional' => true,
                'explicit' => true,
                'default' => 20
            ],
            'trailerField' => [
                'type' => ASN1::TYPE_INTEGER,
                'constant' => 3,
                'optional' => true,
                'explicit' => true,
                'default' => 1
            ]
        ]
    ];
}
<?php

/**
 * ReasonFlags
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2016 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\File\ASN1\Maps;

use phpseclib3\File\ASN1;

/**
 * ReasonFlags
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class ReasonFlags
{
    const MAP = [
        'type' => ASN1::TYPE_BIT_STRING,
        'mapping' => [
            'unused',
            'keyCompromise',
            'cACompromise',
            'affiliationChanged',
            'superseded',
            'cessationOfOperation',
            'certificateHold',
            'privilegeWithdrawn',
            'aACompromise'
        ]
    ];
}
<?php

/**
 * RelativeDistinguishedName
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2016 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\File\ASN1\Maps;

use phpseclib3\File\ASN1;

/**
 * RelativeDistinguishedName
 *
 * In practice, RDNs containing multiple name-value pairs (called "multivalued RDNs") are rare,
 * but they can be useful at times when either there is no unique attribute in the entry or you
 * want to ensure that the entry's DN contains some useful identifying information.
 *
 * - https://www.opends.org/wiki/page/DefinitionRelativeDistinguishedName
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class RelativeDistinguishedName
{
    const MAP = [
        'type' => ASN1::TYPE_SET,
        'min' => 1,
        'max' => -1,
        'children' => AttributeTypeAndValue::MAP
    ];
}
<?php

/**
 * RevokedCertificate
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2016 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\File\ASN1\Maps;

use phpseclib3\File\ASN1;

/**
 * RevokedCertificate
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class RevokedCertificate
{
    const MAP = [
        'type' => ASN1::TYPE_SEQUENCE,
        'children' => [
            'userCertificate' => CertificateSerialNumber::MAP,
            'revocationDate' => Time::MAP,
            'crlEntryExtensions' => [
                'optional' => true
            ] + Extensions::MAP
        ]
    ];
}
<?php

/**
 * SignedPublicKeyAndChallenge
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2016 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\File\ASN1\Maps;

use phpseclib3\File\ASN1;

/**
 * SignedPublicKeyAndChallenge
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class SignedPublicKeyAndChallenge
{
    const MAP = [
        'type' => ASN1::TYPE_SEQUENCE,
        'children' => [
            'publicKeyAndChallenge' => PublicKeyAndChallenge::MAP,
            'signatureAlgorithm' => AlgorithmIdentifier::MAP,
            'signature' => ['type' => ASN1::TYPE_BIT_STRING]
        ]
    ];
}
<?php

/**
 * SpecifiedECDomain
 *
 * From: http://www.secg.org/sec1-v2.pdf#page=109
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2016 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\File\ASN1\Maps;

use phpseclib3\File\ASN1;

/**
 * SpecifiedECDomain
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class SpecifiedECDomain
{
    const MAP = [
        'type' => ASN1::TYPE_SEQUENCE,
        'children' => [
            'version' => [
                'type' => ASN1::TYPE_INTEGER,
                'mapping' => [1 => 'ecdpVer1', 'ecdpVer2', 'ecdpVer3']
            ],
            'fieldID' => FieldID::MAP,
            'curve' => Curve::MAP,
            'base' => ECPoint::MAP,
            'order' => ['type' => ASN1::TYPE_INTEGER],
            'cofactor' => [
                'type' => ASN1::TYPE_INTEGER,
                'optional' => true
            ],
            'hash' => ['optional' => true] + HashAlgorithm::MAP
        ]
    ];
}
<?php

/**
 * SubjectAltName
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2016 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\File\ASN1\Maps;

/**
 * SubjectAltName
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class SubjectAltName
{
    const MAP = GeneralNames::MAP;
}
<?php

/**
 * SubjectDirectoryAttributes
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2016 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\File\ASN1\Maps;

use phpseclib3\File\ASN1;

/**
 * SubjectDirectoryAttributes
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class SubjectDirectoryAttributes
{
    const MAP = [
        'type' => ASN1::TYPE_SEQUENCE,
        'min' => 1,
        'max' => -1,
        'children' => Attribute::MAP
    ];
}
<?php

/**
 * SubjectInfoAccessSyntax
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2016 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\File\ASN1\Maps;

use phpseclib3\File\ASN1;

/**
 * SubjectInfoAccessSyntax
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class SubjectInfoAccessSyntax
{
    const MAP = [
        'type' => ASN1::TYPE_SEQUENCE,
        'min' => 1,
        'max' => -1,
        'children' => AccessDescription::MAP
    ];
}
<?php

/**
 * SubjectPublicKeyInfo
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2016 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\File\ASN1\Maps;

use phpseclib3\File\ASN1;

/**
 * SubjectPublicKeyInfo
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class SubjectPublicKeyInfo
{
    const MAP = [
        'type' => ASN1::TYPE_SEQUENCE,
        'children' => [
            'algorithm' => AlgorithmIdentifier::MAP,
            'subjectPublicKey' => ['type' => ASN1::TYPE_BIT_STRING]
        ]
    ];
}
<?php

/**
 * TBSCertList
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2016 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\File\ASN1\Maps;

use phpseclib3\File\ASN1;

/**
 * TBSCertList
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class TBSCertList
{
    const MAP = [
        'type' => ASN1::TYPE_SEQUENCE,
        'children' => [
            'version' => [
                'type' => ASN1::TYPE_INTEGER,
                'mapping' => ['v1', 'v2'],
                'optional' => true,
                'default' => 'v1'
            ],
            'signature' => AlgorithmIdentifier::MAP,
            'issuer' => Name::MAP,
            'thisUpdate' => Time::MAP,
            'nextUpdate' => [
                'optional' => true
            ] + Time::MAP,
            'revokedCertificates' => [
                'type' => ASN1::TYPE_SEQUENCE,
                'optional' => true,
                'min' => 0,
                'max' => -1,
                'children' => RevokedCertificate::MAP
            ],
            'crlExtensions' => [
                'constant' => 0,
                'optional' => true,
                'explicit' => true
            ] + Extensions::MAP
        ]
    ];
}
<?php

/**
 * TBSCertificate
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2016 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\File\ASN1\Maps;

use phpseclib3\File\ASN1;

/**
 * TBSCertificate
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class TBSCertificate
{
    // assert($TBSCertificate['children']['signature'] == $Certificate['children']['signatureAlgorithm'])
    const MAP = [
        'type' => ASN1::TYPE_SEQUENCE,
        'children' => [
            // technically, default implies optional, but we'll define it as being optional, none-the-less, just to
            // reenforce that fact
            'version' => [
                'type' => ASN1::TYPE_INTEGER,
                'constant' => 0,
                'optional' => true,
                'explicit' => true,
                'mapping' => ['v1', 'v2', 'v3'],
                'default' => 'v1'
            ],
            'serialNumber' => CertificateSerialNumber::MAP,
            'signature' => AlgorithmIdentifier::MAP,
            'issuer' => Name::MAP,
            'validity' => Validity::MAP,
            'subject' => Name::MAP,
            'subjectPublicKeyInfo' => SubjectPublicKeyInfo::MAP,
            // implicit means that the T in the TLV structure is to be rewritten, regardless of the type
            'issuerUniqueID' => [
                'constant' => 1,
                'optional' => true,
                'implicit' => true
            ] + UniqueIdentifier::MAP,
            'subjectUniqueID' => [
                'constant' => 2,
                'optional' => true,
                'implicit' => true
            ] + UniqueIdentifier::MAP,
            // <http://tools.ietf.org/html/rfc2459#page-74> doesn't use the EXPLICIT keyword but if
            // it's not IMPLICIT, it's EXPLICIT
            'extensions' => [
                'constant' => 3,
                'optional' => true,
                'explicit' => true
            ] + Extensions::MAP
        ]
    ];
}
<?php

/**
 * TerminalIdentifier
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2016 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\File\ASN1\Maps;

use phpseclib3\File\ASN1;

/**
 * TerminalIdentifier
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class TerminalIdentifier
{
    const MAP = ['type' => ASN1::TYPE_PRINTABLE_STRING];
}
<?php

/**
 * Time
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2016 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\File\ASN1\Maps;

use phpseclib3\File\ASN1;

/**
 * Time
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class Time
{
    const MAP = [
        'type' => ASN1::TYPE_CHOICE,
        'children' => [
            'utcTime' => ['type' => ASN1::TYPE_UTC_TIME],
            'generalTime' => ['type' => ASN1::TYPE_GENERALIZED_TIME]
        ]
    ];
}
<?php

/**
 * Trinomial
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2016 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\File\ASN1\Maps;

use phpseclib3\File\ASN1;

/**
 * Trinomial
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class Trinomial
{
    const MAP = ['type' => ASN1::TYPE_INTEGER];
}
<?php

/**
 * UniqueIdentifier
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2016 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\File\ASN1\Maps;

use phpseclib3\File\ASN1;

/**
 * UniqueIdentifier
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class UniqueIdentifier
{
    const MAP = ['type' => ASN1::TYPE_BIT_STRING];
}
<?php

/**
 * UserNotice
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2016 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\File\ASN1\Maps;

use phpseclib3\File\ASN1;

/**
 * UserNotice
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class UserNotice
{
    const MAP = [
        'type' => ASN1::TYPE_SEQUENCE,
        'children' => [
            'noticeRef' => [
                'optional' => true,
                'implicit' => true
            ] + NoticeReference::MAP,
            'explicitText' => [
                'optional' => true,
                'implicit' => true
            ] + DisplayText::MAP
        ]
    ];
}
<?php

/**
 * Validity
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2016 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\File\ASN1\Maps;

use phpseclib3\File\ASN1;

/**
 * Validity
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class Validity
{
    const MAP = [
        'type' => ASN1::TYPE_SEQUENCE,
        'children' => [
            'notBefore' => Time::MAP,
            'notAfter' => Time::MAP
        ]
    ];
}
<?php

/**
 * netscape_ca_policy_url
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2016 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\File\ASN1\Maps;

use phpseclib3\File\ASN1;

/**
 * netscape_ca_policy_url
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class netscape_ca_policy_url
{
    const MAP = ['type' => ASN1::TYPE_IA5_STRING];
}
<?php

/**
 * netscape_cert_type
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2016 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\File\ASN1\Maps;

use phpseclib3\File\ASN1;

/**
 * netscape_cert_type
 *
 * mapping is from <http://www.mozilla.org/projects/security/pki/nss/tech-notes/tn3.html>
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class netscape_cert_type
{
    const MAP = [
        'type' => ASN1::TYPE_BIT_STRING,
        'mapping' => [
            'SSLClient',
            'SSLServer',
            'Email',
            'ObjectSigning',
            'Reserved',
            'SSLCA',
            'EmailCA',
            'ObjectSigningCA'
        ]
    ];
}
<?php

/**
 * netscape_comment
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2016 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\File\ASN1\Maps;

use phpseclib3\File\ASN1;

/**
 * netscape_comment
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class netscape_comment
{
    const MAP = ['type' => ASN1::TYPE_IA5_STRING];
}
<?php

/**
 * Pure-PHP X.509 Parser
 *
 * PHP version 5
 *
 * Encode and decode X.509 certificates.
 *
 * The extensions are from {@link http://tools.ietf.org/html/rfc5280 RFC5280} and
 * {@link http://web.archive.org/web/19961027104704/http://www3.netscape.com/eng/security/cert-exts.html Netscape Certificate Extensions}.
 *
 * Note that loading an X.509 certificate and resaving it may invalidate the signature.  The reason being that the signature is based on a
 * portion of the certificate that contains optional parameters with default values.  ie. if the parameter isn't there the default value is
 * used.  Problem is, if the parameter is there and it just so happens to have the default value there are two ways that that parameter can
 * be encoded.  It can be encoded explicitly or left out all together.  This would effect the signature value and thus may invalidate the
 * the certificate all together unless the certificate is re-signed.
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2012 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\File;

use phpseclib3\Common\Functions\Strings;
use phpseclib3\Crypt\Common\PrivateKey;
use phpseclib3\Crypt\Common\PublicKey;
use phpseclib3\Crypt\DSA;
use phpseclib3\Crypt\EC;
use phpseclib3\Crypt\Hash;
use phpseclib3\Crypt\PublicKeyLoader;
use phpseclib3\Crypt\Random;
use phpseclib3\Crypt\RSA;
use phpseclib3\Crypt\RSA\Formats\Keys\PSS;
use phpseclib3\Exception\UnsupportedAlgorithmException;
use phpseclib3\File\ASN1\Element;
use phpseclib3\File\ASN1\Maps;
use phpseclib3\Math\BigInteger;

/**
 * Pure-PHP X.509 Parser
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
class X509
{
    /**
     * Flag to only accept signatures signed by certificate authorities
     *
     * Not really used anymore but retained all the same to suppress E_NOTICEs from old installs
     *
     */
    const VALIDATE_SIGNATURE_BY_CA = 1;

    /**
     * Return internal array representation
     *
     * @see \phpseclib3\File\X509::getDN()
     */
    const DN_ARRAY = 0;
    /**
     * Return string
     *
     * @see \phpseclib3\File\X509::getDN()
     */
    const DN_STRING = 1;
    /**
     * Return ASN.1 name string
     *
     * @see \phpseclib3\File\X509::getDN()
     */
    const DN_ASN1 = 2;
    /**
     * Return OpenSSL compatible array
     *
     * @see \phpseclib3\File\X509::getDN()
     */
    const DN_OPENSSL = 3;
    /**
     * Return canonical ASN.1 RDNs string
     *
     * @see \phpseclib3\File\X509::getDN()
     */
    const DN_CANON = 4;
    /**
     * Return name hash for file indexing
     *
     * @see \phpseclib3\File\X509::getDN()
     */
    const DN_HASH = 5;

    /**
     * Save as PEM
     *
     * ie. a base64-encoded PEM with a header and a footer
     *
     * @see \phpseclib3\File\X509::saveX509()
     * @see \phpseclib3\File\X509::saveCSR()
     * @see \phpseclib3\File\X509::saveCRL()
     */
    const FORMAT_PEM = 0;
    /**
     * Save as DER
     *
     * @see \phpseclib3\File\X509::saveX509()
     * @see \phpseclib3\File\X509::saveCSR()
     * @see \phpseclib3\File\X509::saveCRL()
     */
    const FORMAT_DER = 1;
    /**
     * Save as a SPKAC
     *
     * @see \phpseclib3\File\X509::saveX509()
     * @see \phpseclib3\File\X509::saveCSR()
     * @see \phpseclib3\File\X509::saveCRL()
     *
     * Only works on CSRs. Not currently supported.
     */
    const FORMAT_SPKAC = 2;
    /**
     * Auto-detect the format
     *
     * Used only by the load*() functions
     *
     * @see \phpseclib3\File\X509::saveX509()
     * @see \phpseclib3\File\X509::saveCSR()
     * @see \phpseclib3\File\X509::saveCRL()
     */
    const FORMAT_AUTO_DETECT = 3;

    /**
     * Attribute value disposition.
     * If disposition is >= 0, this is the index of the target value.
     */
    const ATTR_ALL = -1; // All attribute values (array).
    const ATTR_APPEND = -2; // Add a value.
    const ATTR_REPLACE = -3; // Clear first, then add a value.

    /**
     * Distinguished Name
     *
     * @var array
     */
    private $dn;

    /**
     * Public key
     *
     * @var string|PublicKey
     */
    private $publicKey;

    /**
     * Private key
     *
     * @var string|PrivateKey
     */
    private $privateKey;

    /**
     * The certificate authorities
     *
     * @var array
     */
    private $CAs = [];

    /**
     * The currently loaded certificate
     *
     * @var array
     */
    private $currentCert;

    /**
     * The signature subject
     *
     * There's no guarantee \phpseclib3\File\X509 is going to re-encode an X.509 cert in the same way it was originally
     * encoded so we take save the portion of the original cert that the signature would have made for.
     *
     * @var string
     */
    private $signatureSubject;

    /**
     * Certificate Start Date
     *
     * @var string
     */
    private $startDate;

    /**
     * Certificate End Date
     *
     * @var string|Element
     */
    private $endDate;

    /**
     * Serial Number
     *
     * @var string
     */
    private $serialNumber;

    /**
     * Key Identifier
     *
     * See {@link http://tools.ietf.org/html/rfc5280#section-4.2.1.1 RFC5280#section-4.2.1.1} and
     * {@link http://tools.ietf.org/html/rfc5280#section-4.2.1.2 RFC5280#section-4.2.1.2}.
     *
     * @var string
     */
    private $currentKeyIdentifier;

    /**
     * CA Flag
     *
     * @var bool
     */
    private $caFlag = false;

    /**
     * SPKAC Challenge
     *
     * @var string
     */
    private $challenge;

    /**
     * @var array
     */
    private $extensionValues = [];

    /**
     * OIDs loaded
     *
     * @var bool
     */
    private static $oidsLoaded = false;

    /**
     * Recursion Limit
     *
     * @var int
     */
    private static $recur_limit = 5;

    /**
     * URL fetch flag
     *
     * @var bool
     */
    private static $disable_url_fetch = false;

    /**
     * @var array
     */
    private static $extensions = [];

    /**
     * @var ?array
     */
    private $ipAddresses = null;

    /**
     * @var ?array
     */
    private $domains = null;

    /**
     * Default Constructor.
     *
     * @return X509
     */
    public function __construct()
    {
        // Explicitly Tagged Module, 1988 Syntax
        // http://tools.ietf.org/html/rfc5280#appendix-A.1

        if (!self::$oidsLoaded) {
            // OIDs from RFC5280 and those RFCs mentioned in RFC5280#section-4.1.1.2
            ASN1::loadOIDs([
                //'id-pkix' => '1.3.6.1.5.5.7',
                //'id-pe' => '1.3.6.1.5.5.7.1',
                //'id-qt' => '1.3.6.1.5.5.7.2',
                //'id-kp' => '1.3.6.1.5.5.7.3',
                //'id-ad' => '1.3.6.1.5.5.7.48',
                'id-qt-cps' => '1.3.6.1.5.5.7.2.1',
                'id-qt-unotice' => '1.3.6.1.5.5.7.2.2',
                'id-ad-ocsp' => '1.3.6.1.5.5.7.48.1',
                'id-ad-caIssuers' => '1.3.6.1.5.5.7.48.2',
                'id-ad-timeStamping' => '1.3.6.1.5.5.7.48.3',
                'id-ad-caRepository' => '1.3.6.1.5.5.7.48.5',
                //'id-at' => '2.5.4',
                'id-at-name' => '2.5.4.41',
                'id-at-surname' => '2.5.4.4',
                'id-at-givenName' => '2.5.4.42',
                'id-at-initials' => '2.5.4.43',
                'id-at-generationQualifier' => '2.5.4.44',
                'id-at-commonName' => '2.5.4.3',
                'id-at-localityName' => '2.5.4.7',
                'id-at-stateOrProvinceName' => '2.5.4.8',
                'id-at-organizationName' => '2.5.4.10',
                'id-at-organizationalUnitName' => '2.5.4.11',
                'id-at-title' => '2.5.4.12',
                'id-at-description' => '2.5.4.13',
                'id-at-dnQualifier' => '2.5.4.46',
                'id-at-countryName' => '2.5.4.6',
                'id-at-serialNumber' => '2.5.4.5',
                'id-at-pseudonym' => '2.5.4.65',
                'id-at-postalCode' => '2.5.4.17',
                'id-at-streetAddress' => '2.5.4.9',
                'id-at-uniqueIdentifier' => '2.5.4.45',
                'id-at-role' => '2.5.4.72',
                'id-at-postalAddress' => '2.5.4.16',
                'jurisdictionOfIncorporationCountryName' => '1.3.6.1.4.1.311.60.2.1.3',
                'jurisdictionOfIncorporationStateOrProvinceName' => '1.3.6.1.4.1.311.60.2.1.2',
                'jurisdictionLocalityName' => '1.3.6.1.4.1.311.60.2.1.1',
                'id-at-businessCategory' => '2.5.4.15',

                //'id-domainComponent' => '0.9.2342.19200300.100.1.25',
                //'pkcs-9' => '1.2.840.113549.1.9',
                'pkcs-9-at-emailAddress' => '1.2.840.113549.1.9.1',
                //'id-ce' => '2.5.29',
                'id-ce-authorityKeyIdentifier' => '2.5.29.35',
                'id-ce-subjectKeyIdentifier' => '2.5.29.14',
                'id-ce-keyUsage' => '2.5.29.15',
                'id-ce-privateKeyUsagePeriod' => '2.5.29.16',
                'id-ce-certificatePolicies' => '2.5.29.32',
                //'anyPolicy' => '2.5.29.32.0',

                'id-ce-policyMappings' => '2.5.29.33',

                'id-ce-subjectAltName' => '2.5.29.17',
                'id-ce-issuerAltName' => '2.5.29.18',
                'id-ce-subjectDirectoryAttributes' => '2.5.29.9',
                'id-ce-basicConstraints' => '2.5.29.19',
                'id-ce-nameConstraints' => '2.5.29.30',
                'id-ce-policyConstraints' => '2.5.29.36',
                'id-ce-cRLDistributionPoints' => '2.5.29.31',
                'id-ce-extKeyUsage' => '2.5.29.37',
                //'anyExtendedKeyUsage' => '2.5.29.37.0',
                'id-kp-serverAuth' => '1.3.6.1.5.5.7.3.1',
                'id-kp-clientAuth' => '1.3.6.1.5.5.7.3.2',
                'id-kp-codeSigning' => '1.3.6.1.5.5.7.3.3',
                'id-kp-emailProtection' => '1.3.6.1.5.5.7.3.4',
                'id-kp-timeStamping' => '1.3.6.1.5.5.7.3.8',
                'id-kp-OCSPSigning' => '1.3.6.1.5.5.7.3.9',
                'id-ce-inhibitAnyPolicy' => '2.5.29.54',
                'id-ce-freshestCRL' => '2.5.29.46',
                'id-pe-authorityInfoAccess' => '1.3.6.1.5.5.7.1.1',
                'id-pe-subjectInfoAccess' => '1.3.6.1.5.5.7.1.11',
                'id-ce-cRLNumber' => '2.5.29.20',
                'id-ce-issuingDistributionPoint' => '2.5.29.28',
                'id-ce-deltaCRLIndicator' => '2.5.29.27',
                'id-ce-cRLReasons' => '2.5.29.21',
                'id-ce-certificateIssuer' => '2.5.29.29',
                'id-ce-holdInstructionCode' => '2.5.29.23',
                //'holdInstruction' => '1.2.840.10040.2',
                'id-holdinstruction-none' => '1.2.840.10040.2.1',
                'id-holdinstruction-callissuer' => '1.2.840.10040.2.2',
                'id-holdinstruction-reject' => '1.2.840.10040.2.3',
                'id-ce-invalidityDate' => '2.5.29.24',

                'rsaEncryption' => '1.2.840.113549.1.1.1',
                'md2WithRSAEncryption' => '1.2.840.113549.1.1.2',
                'md5WithRSAEncryption' => '1.2.840.113549.1.1.4',
                'sha1WithRSAEncryption' => '1.2.840.113549.1.1.5',
                'sha224WithRSAEncryption' => '1.2.840.113549.1.1.14',
                'sha256WithRSAEncryption' => '1.2.840.113549.1.1.11',
                'sha384WithRSAEncryption' => '1.2.840.113549.1.1.12',
                'sha512WithRSAEncryption' => '1.2.840.113549.1.1.13',

                'id-ecPublicKey' => '1.2.840.10045.2.1',
                'ecdsa-with-SHA1' => '1.2.840.10045.4.1',
                // from https://tools.ietf.org/html/rfc5758#section-3.2
                'ecdsa-with-SHA224' => '1.2.840.10045.4.3.1',
                'ecdsa-with-SHA256' => '1.2.840.10045.4.3.2',
                'ecdsa-with-SHA384' => '1.2.840.10045.4.3.3',
                'ecdsa-with-SHA512' => '1.2.840.10045.4.3.4',

                'id-dsa' => '1.2.840.10040.4.1',
                'id-dsa-with-sha1' => '1.2.840.10040.4.3',
                // from https://tools.ietf.org/html/rfc5758#section-3.1
                'id-dsa-with-sha224' => '2.16.840.1.101.3.4.3.1',
                'id-dsa-with-sha256' => '2.16.840.1.101.3.4.3.2',

                // from https://tools.ietf.org/html/rfc8410:
                'id-Ed25519' => '1.3.101.112',
                'id-Ed448' => '1.3.101.113',

                'id-RSASSA-PSS' => '1.2.840.113549.1.1.10',

                //'id-sha224' => '2.16.840.1.101.3.4.2.4',
                //'id-sha256' => '2.16.840.1.101.3.4.2.1',
                //'id-sha384' => '2.16.840.1.101.3.4.2.2',
                //'id-sha512' => '2.16.840.1.101.3.4.2.3',
                //'id-GostR3411-94-with-GostR3410-94' => '1.2.643.2.2.4',
                //'id-GostR3411-94-with-GostR3410-2001' => '1.2.643.2.2.3',
                //'id-GostR3410-2001' => '1.2.643.2.2.20',
                //'id-GostR3410-94' => '1.2.643.2.2.19',
                // Netscape Object Identifiers from "Netscape Certificate Extensions"
                'netscape' => '2.16.840.1.113730',
                'netscape-cert-extension' => '2.16.840.1.113730.1',
                'netscape-cert-type' => '2.16.840.1.113730.1.1',
                'netscape-comment' => '2.16.840.1.113730.1.13',
                'netscape-ca-policy-url' => '2.16.840.1.113730.1.8',
                // the following are X.509 extensions not supported by phpseclib
                'id-pe-logotype' => '1.3.6.1.5.5.7.1.12',
                'entrustVersInfo' => '1.2.840.113533.7.65.0',
                'verisignPrivate' => '2.16.840.1.113733.1.6.9',
                // for Certificate Signing Requests
                // see http://tools.ietf.org/html/rfc2985
                'pkcs-9-at-unstructuredName' => '1.2.840.113549.1.9.2', // PKCS #9 unstructured name
                'pkcs-9-at-challengePassword' => '1.2.840.113549.1.9.7', // Challenge password for certificate revocations
                'pkcs-9-at-extensionRequest' => '1.2.840.113549.1.9.14' // Certificate extension request
            ]);
        }
    }

    /**
     * Load X.509 certificate
     *
     * Returns an associative array describing the X.509 cert or a false if the cert failed to load
     *
     * @param array|string $cert
     * @param int $mode
     * @return mixed
     */
    public function loadX509($cert, $mode = self::FORMAT_AUTO_DETECT)
    {
        if (is_array($cert) && isset($cert['tbsCertificate'])) {
            unset($this->currentCert);
            unset($this->currentKeyIdentifier);
            $this->dn = $cert['tbsCertificate']['subject'];
            if (!isset($this->dn)) {
                return false;
            }
            $this->currentCert = $cert;

            $currentKeyIdentifier = $this->getExtension('id-ce-subjectKeyIdentifier');
            $this->currentKeyIdentifier = is_string($currentKeyIdentifier) ? $currentKeyIdentifier : null;

            unset($this->signatureSubject);

            return $cert;
        }

        if ($mode != self::FORMAT_DER) {
            $newcert = ASN1::extractBER($cert);
            if ($mode == self::FORMAT_PEM && $cert == $newcert) {
                return false;
            }
            $cert = $newcert;
        }

        if ($cert === false) {
            $this->currentCert = false;
            return false;
        }

        $decoded = ASN1::decodeBER($cert);

        if ($decoded) {
            $x509 = ASN1::asn1map($decoded[0], Maps\Certificate::MAP);
        }
        if (!isset($x509) || $x509 === false) {
            $this->currentCert = false;
            return false;
        }

        $this->signatureSubject = substr($cert, $decoded[0]['content'][0]['start'], $decoded[0]['content'][0]['length']);

        if ($this->isSubArrayValid($x509, 'tbsCertificate/extensions')) {
            $this->mapInExtensions($x509, 'tbsCertificate/extensions');
        }
        $this->mapInDNs($x509, 'tbsCertificate/issuer/rdnSequence');
        $this->mapInDNs($x509, 'tbsCertificate/subject/rdnSequence');

        $key = $x509['tbsCertificate']['subjectPublicKeyInfo'];
        $key = ASN1::encodeDER($key, Maps\SubjectPublicKeyInfo::MAP);
        $x509['tbsCertificate']['subjectPublicKeyInfo']['subjectPublicKey'] =
            "-----BEGIN PUBLIC KEY-----\r\n" .
            chunk_split(base64_encode($key), 64) .
            "-----END PUBLIC KEY-----";

        $this->currentCert = $x509;
        $this->dn = $x509['tbsCertificate']['subject'];

        $currentKeyIdentifier = $this->getExtension('id-ce-subjectKeyIdentifier');
        $this->currentKeyIdentifier = is_string($currentKeyIdentifier) ? $currentKeyIdentifier : null;

        return $x509;
    }

    /**
     * Save X.509 certificate
     *
     * @param array $cert
     * @param int $format optional
     * @return string
     */
    public function saveX509(array $cert, $format = self::FORMAT_PEM)
    {
        if (!is_array($cert) || !isset($cert['tbsCertificate'])) {
            return false;
        }

        switch (true) {
            // "case !$a: case !$b: break; default: whatever();" is the same thing as "if ($a && $b) whatever()"
            case !($algorithm = $this->subArray($cert, 'tbsCertificate/subjectPublicKeyInfo/algorithm/algorithm')):
            case is_object($cert['tbsCertificate']['subjectPublicKeyInfo']['subjectPublicKey']):
                break;
            default:
                $cert['tbsCertificate']['subjectPublicKeyInfo'] = new Element(
                    base64_decode(preg_replace('#-.+-|[\r\n]#', '', $cert['tbsCertificate']['subjectPublicKeyInfo']['subjectPublicKey']))
                );
        }

        $filters = [];
        $type_utf8_string = ['type' => ASN1::TYPE_UTF8_STRING];
        $filters['tbsCertificate']['signature']['parameters'] = $type_utf8_string;
        $filters['tbsCertificate']['signature']['issuer']['rdnSequence']['value'] = $type_utf8_string;
        $filters['tbsCertificate']['issuer']['rdnSequence']['value'] = $type_utf8_string;
        $filters['tbsCertificate']['subject']['rdnSequence']['value'] = $type_utf8_string;
        $filters['tbsCertificate']['subjectPublicKeyInfo']['algorithm']['parameters'] = $type_utf8_string;
        $filters['signatureAlgorithm']['parameters'] = $type_utf8_string;
        $filters['authorityCertIssuer']['directoryName']['rdnSequence']['value'] = $type_utf8_string;
        //$filters['policyQualifiers']['qualifier'] = $type_utf8_string;
        $filters['distributionPoint']['fullName']['directoryName']['rdnSequence']['value'] = $type_utf8_string;
        $filters['directoryName']['rdnSequence']['value'] = $type_utf8_string;

        foreach (self::$extensions as $extension) {
            $filters['tbsCertificate']['extensions'][] = $extension;
        }

        /* in the case of policyQualifiers/qualifier, the type has to be \phpseclib3\File\ASN1::TYPE_IA5_STRING.
           \phpseclib3\File\ASN1::TYPE_PRINTABLE_STRING will cause OpenSSL's X.509 parser to spit out random
           characters.
         */
        $filters['policyQualifiers']['qualifier']
            = ['type' => ASN1::TYPE_IA5_STRING];

        ASN1::setFilters($filters);

        $this->mapOutExtensions($cert, 'tbsCertificate/extensions');
        $this->mapOutDNs($cert, 'tbsCertificate/issuer/rdnSequence');
        $this->mapOutDNs($cert, 'tbsCertificate/subject/rdnSequence');

        $cert = ASN1::encodeDER($cert, Maps\Certificate::MAP);

        switch ($format) {
            case self::FORMAT_DER:
                return $cert;
            // case self::FORMAT_PEM:
            default:
                return "-----BEGIN CERTIFICATE-----\r\n" . chunk_split(Strings::base64_encode($cert), 64) . '-----END CERTIFICATE-----';
        }
    }

    /**
     * Map extension values from octet string to extension-specific internal
     *   format.
     *
     * @param array $root (by reference)
     * @param string $path
     */
    private function mapInExtensions(array &$root, $path)
    {
        $extensions = &$this->subArrayUnchecked($root, $path);

        if ($extensions) {
            for ($i = 0; $i < count($extensions); $i++) {
                $id = $extensions[$i]['extnId'];
                $value = &$extensions[$i]['extnValue'];
                /* [extnValue] contains the DER encoding of an ASN.1 value
                   corresponding to the extension type identified by extnID */
                $map = $this->getMapping($id);
                if (!is_bool($map)) {
                    $decoder = $id == 'id-ce-nameConstraints' ?
                        [static::class, 'decodeNameConstraintIP'] :
                        [static::class, 'decodeIP'];
                    $decoded = ASN1::decodeBER($value);
                    if (!$decoded) {
                        continue;
                    }
                    $mapped = ASN1::asn1map($decoded[0], $map, ['iPAddress' => $decoder]);
                    $value = $mapped === false ? $decoded[0] : $mapped;

                    if ($id == 'id-ce-certificatePolicies') {
                        for ($j = 0; $j < count($value); $j++) {
                            if (!isset($value[$j]['policyQualifiers'])) {
                                continue;
                            }
                            for ($k = 0; $k < count($value[$j]['policyQualifiers']); $k++) {
                                $subid = $value[$j]['policyQualifiers'][$k]['policyQualifierId'];
                                $map = $this->getMapping($subid);
                                $subvalue = &$value[$j]['policyQualifiers'][$k]['qualifier'];
                                if ($map !== false) {
                                    $decoded = ASN1::decodeBER($subvalue);
                                    if (!$decoded) {
                                        continue;
                                    }
                                    $mapped = ASN1::asn1map($decoded[0], $map);
                                    $subvalue = $mapped === false ? $decoded[0] : $mapped;
                                }
                            }
                        }
                    }
                }
            }
        }
    }

    /**
     * Map extension values from extension-specific internal format to
     *   octet string.
     *
     * @param array $root (by reference)
     * @param string $path
     */
    private function mapOutExtensions(array &$root, $path)
    {
        $extensions = &$this->subArray($root, $path, !empty($this->extensionValues));

        foreach ($this->extensionValues as $id => $data) {
            $critical = $data['critical'];
            $replace = $data['replace'];
            $value = $data['value'];
            $newext = [
                'extnId' => $id,
                'extnValue' => $value,
                'critical' => $critical
            ];
            if ($replace) {
                foreach ($extensions as $key => $value) {
                    if ($value['extnId'] == $id) {
                        $extensions[$key] = $newext;
                        continue 2;
                    }
                }
            }
            $extensions[] = $newext;
        }

        if (is_array($extensions)) {
            $size = count($extensions);
            for ($i = 0; $i < $size; $i++) {
                if ($extensions[$i] instanceof Element) {
                    continue;
                }

                $id = $extensions[$i]['extnId'];
                $value = &$extensions[$i]['extnValue'];

                switch ($id) {
                    case 'id-ce-certificatePolicies':
                        for ($j = 0; $j < count($value); $j++) {
                            if (!isset($value[$j]['policyQualifiers'])) {
                                continue;
                            }
                            for ($k = 0; $k < count($value[$j]['policyQualifiers']); $k++) {
                                $subid = $value[$j]['policyQualifiers'][$k]['policyQualifierId'];
                                $map = $this->getMapping($subid);
                                $subvalue = &$value[$j]['policyQualifiers'][$k]['qualifier'];
                                if ($map !== false) {
                                    // by default \phpseclib3\File\ASN1 will try to render qualifier as a \phpseclib3\File\ASN1::TYPE_IA5_STRING since it's
                                    // actual type is \phpseclib3\File\ASN1::TYPE_ANY
                                    $subvalue = new Element(ASN1::encodeDER($subvalue, $map));
                                }
                            }
                        }
                        break;
                    case 'id-ce-authorityKeyIdentifier': // use 00 as the serial number instead of an empty string
                        if (isset($value['authorityCertSerialNumber'])) {
                            if ($value['authorityCertSerialNumber']->toBytes() == '') {
                                $temp = chr((ASN1::CLASS_CONTEXT_SPECIFIC << 6) | 2) . "\1\0";
                                $value['authorityCertSerialNumber'] = new Element($temp);
                            }
                        }
                }

                /* [extnValue] contains the DER encoding of an ASN.1 value
                   corresponding to the extension type identified by extnID */
                $map = $this->getMapping($id);
                if (is_bool($map)) {
                    if (!$map) {
                        //user_error($id . ' is not a currently supported extension');
                        unset($extensions[$i]);
                    }
                } else {
                    $value = ASN1::encodeDER($value, $map, ['iPAddress' => [static::class, 'encodeIP']]);
                }
            }
        }
    }

    /**
     * Map attribute values from ANY type to attribute-specific internal
     *   format.
     *
     * @param array $root (by reference)
     * @param string $path
     */
    private function mapInAttributes(&$root, $path)
    {
        $attributes = &$this->subArray($root, $path);

        if (is_array($attributes)) {
            for ($i = 0; $i < count($attributes); $i++) {
                $id = $attributes[$i]['type'];
                /* $value contains the DER encoding of an ASN.1 value
                   corresponding to the attribute type identified by type */
                $map = $this->getMapping($id);
                if (is_array($attributes[$i]['value'])) {
                    $values = &$attributes[$i]['value'];
                    for ($j = 0; $j < count($values); $j++) {
                        $value = ASN1::encodeDER($values[$j], Maps\AttributeValue::MAP);
                        $decoded = ASN1::decodeBER($value);
                        if (!is_bool($map)) {
                            if (!$decoded) {
                                continue;
                            }
                            $mapped = ASN1::asn1map($decoded[0], $map);
                            if ($mapped !== false) {
                                $values[$j] = $mapped;
                            }
                            if ($id == 'pkcs-9-at-extensionRequest' && $this->isSubArrayValid($values, $j)) {
                                $this->mapInExtensions($values, $j);
                            }
                        } elseif ($map) {
                            $values[$j] = $value;
                        }
                    }
                }
            }
        }
    }

    /**
     * Map attribute values from attribute-specific internal format to
     *   ANY type.
     *
     * @param array $root (by reference)
     * @param string $path
     */
    private function mapOutAttributes(&$root, $path)
    {
        $attributes = &$this->subArray($root, $path);

        if (is_array($attributes)) {
            $size = count($attributes);
            for ($i = 0; $i < $size; $i++) {
                /* [value] contains the DER encoding of an ASN.1 value
                   corresponding to the attribute type identified by type */
                $id = $attributes[$i]['type'];
                $map = $this->getMapping($id);
                if ($map === false) {
                    //user_error($id . ' is not a currently supported attribute', E_USER_NOTICE);
                    unset($attributes[$i]);
                } elseif (is_array($attributes[$i]['value'])) {
                    $values = &$attributes[$i]['value'];
                    for ($j = 0; $j < count($values); $j++) {
                        switch ($id) {
                            case 'pkcs-9-at-extensionRequest':
                                $this->mapOutExtensions($values, $j);
                                break;
                        }

                        if (!is_bool($map)) {
                            $temp = ASN1::encodeDER($values[$j], $map);
                            $decoded = ASN1::decodeBER($temp);
                            if (!$decoded) {
                                continue;
                            }
                            $values[$j] = ASN1::asn1map($decoded[0], Maps\AttributeValue::MAP);
                        }
                    }
                }
            }
        }
    }

    /**
     * Map DN values from ANY type to DN-specific internal
     *   format.
     *
     * @param array $root (by reference)
     * @param string $path
     */
    private function mapInDNs(array &$root, $path)
    {
        $dns = &$this->subArray($root, $path);

        if (is_array($dns)) {
            for ($i = 0; $i < count($dns); $i++) {
                for ($j = 0; $j < count($dns[$i]); $j++) {
                    $type = $dns[$i][$j]['type'];
                    $value = &$dns[$i][$j]['value'];
                    if (is_object($value) && $value instanceof Element) {
                        $map = $this->getMapping($type);
                        if (!is_bool($map)) {
                            $decoded = ASN1::decodeBER($value);
                            if (!$decoded) {
                                continue;
                            }
                            $value = ASN1::asn1map($decoded[0], $map);
                        }
                    }
                }
            }
        }
    }

    /**
     * Map DN values from DN-specific internal format to
     *   ANY type.
     *
     * @param array $root (by reference)
     * @param string $path
     */
    private function mapOutDNs(array &$root, $path)
    {
        $dns = &$this->subArray($root, $path);

        if (is_array($dns)) {
            $size = count($dns);
            for ($i = 0; $i < $size; $i++) {
                for ($j = 0; $j < count($dns[$i]); $j++) {
                    $type = $dns[$i][$j]['type'];
                    $value = &$dns[$i][$j]['value'];
                    if (is_object($value) && $value instanceof Element) {
                        continue;
                    }

                    $map = $this->getMapping($type);
                    if (!is_bool($map)) {
                        $value = new Element(ASN1::encodeDER($value, $map));
                    }
                }
            }
        }
    }

    /**
     * Associate an extension ID to an extension mapping
     *
     * @param string $extnId
     * @return mixed
     */
    private function getMapping($extnId)
    {
        if (!is_string($extnId)) { // eg. if it's a \phpseclib3\File\ASN1\Element object
            return true;
        }

        if (isset(self::$extensions[$extnId])) {
            return self::$extensions[$extnId];
        }

        switch ($extnId) {
            case 'id-ce-keyUsage':
                return Maps\KeyUsage::MAP;
            case 'id-ce-basicConstraints':
                return Maps\BasicConstraints::MAP;
            case 'id-ce-subjectKeyIdentifier':
                return Maps\KeyIdentifier::MAP;
            case 'id-ce-cRLDistributionPoints':
                return Maps\CRLDistributionPoints::MAP;
            case 'id-ce-authorityKeyIdentifier':
                return Maps\AuthorityKeyIdentifier::MAP;
            case 'id-ce-certificatePolicies':
                return Maps\CertificatePolicies::MAP;
            case 'id-ce-extKeyUsage':
                return Maps\ExtKeyUsageSyntax::MAP;
            case 'id-pe-authorityInfoAccess':
                return Maps\AuthorityInfoAccessSyntax::MAP;
            case 'id-ce-subjectAltName':
                return Maps\SubjectAltName::MAP;
            case 'id-ce-subjectDirectoryAttributes':
                return Maps\SubjectDirectoryAttributes::MAP;
            case 'id-ce-privateKeyUsagePeriod':
                return Maps\PrivateKeyUsagePeriod::MAP;
            case 'id-ce-issuerAltName':
                return Maps\IssuerAltName::MAP;
            case 'id-ce-policyMappings':
                return Maps\PolicyMappings::MAP;
            case 'id-ce-nameConstraints':
                return Maps\NameConstraints::MAP;

            case 'netscape-cert-type':
                return Maps\netscape_cert_type::MAP;
            case 'netscape-comment':
                return Maps\netscape_comment::MAP;
            case 'netscape-ca-policy-url':
                return Maps\netscape_ca_policy_url::MAP;

            // since id-qt-cps isn't a constructed type it will have already been decoded as a string by the time it gets
            // back around to asn1map() and we don't want it decoded again.
            //case 'id-qt-cps':
            //    return Maps\CPSuri::MAP;
            case 'id-qt-unotice':
                return Maps\UserNotice::MAP;

            // the following OIDs are unsupported but we don't want them to give notices when calling saveX509().
            case 'id-pe-logotype': // http://www.ietf.org/rfc/rfc3709.txt
            case 'entrustVersInfo':
            // http://support.microsoft.com/kb/287547
            case '1.3.6.1.4.1.311.20.2': // szOID_ENROLL_CERTTYPE_EXTENSION
            case '1.3.6.1.4.1.311.21.1': // szOID_CERTSRV_CA_VERSION
            // "SET Secure Electronic Transaction Specification"
            // http://www.maithean.com/docs/set_bk3.pdf
            case '2.23.42.7.0': // id-set-hashedRootKey
            // "Certificate Transparency"
            // https://tools.ietf.org/html/rfc6962
            case '1.3.6.1.4.1.11129.2.4.2':
            // "Qualified Certificate statements"
            // https://tools.ietf.org/html/rfc3739#section-3.2.6
            case '1.3.6.1.5.5.7.1.3':
                return true;

            // CSR attributes
            case 'pkcs-9-at-unstructuredName':
                return Maps\PKCS9String::MAP;
            case 'pkcs-9-at-challengePassword':
                return Maps\DirectoryString::MAP;
            case 'pkcs-9-at-extensionRequest':
                return Maps\Extensions::MAP;

            // CRL extensions.
            case 'id-ce-cRLNumber':
                return Maps\CRLNumber::MAP;
            case 'id-ce-deltaCRLIndicator':
                return Maps\CRLNumber::MAP;
            case 'id-ce-issuingDistributionPoint':
                return Maps\IssuingDistributionPoint::MAP;
            case 'id-ce-freshestCRL':
                return Maps\CRLDistributionPoints::MAP;
            case 'id-ce-cRLReasons':
                return Maps\CRLReason::MAP;
            case 'id-ce-invalidityDate':
                return Maps\InvalidityDate::MAP;
            case 'id-ce-certificateIssuer':
                return Maps\CertificateIssuer::MAP;
            case 'id-ce-holdInstructionCode':
                return Maps\HoldInstructionCode::MAP;
            case 'id-at-postalAddress':
                return Maps\PostalAddress::MAP;
        }

        return false;
    }

    /**
     * Load an X.509 certificate as a certificate authority
     *
     * @param string $cert
     * @return bool
     */
    public function loadCA($cert)
    {
        $olddn = $this->dn;
        $oldcert = $this->currentCert;
        $oldsigsubj = $this->signatureSubject;
        $oldkeyid = $this->currentKeyIdentifier;

        $cert = $this->loadX509($cert);
        if (!$cert) {
            $this->dn = $olddn;
            $this->currentCert = $oldcert;
            $this->signatureSubject = $oldsigsubj;
            $this->currentKeyIdentifier = $oldkeyid;

            return false;
        }

        /* From RFC5280 "PKIX Certificate and CRL Profile":

           If the keyUsage extension is present, then the subject public key
           MUST NOT be used to verify signatures on certificates or CRLs unless
           the corresponding keyCertSign or cRLSign bit is set. */
        //$keyUsage = $this->getExtension('id-ce-keyUsage');
        //if ($keyUsage && !in_array('keyCertSign', $keyUsage)) {
        //    return false;
        //}

        /* From RFC5280 "PKIX Certificate and CRL Profile":

           The cA boolean indicates whether the certified public key may be used
           to verify certificate signatures.  If the cA boolean is not asserted,
           then the keyCertSign bit in the key usage extension MUST NOT be
           asserted.  If the basic constraints extension is not present in a
           version 3 certificate, or the extension is present but the cA boolean
           is not asserted, then the certified public key MUST NOT be used to
           verify certificate signatures. */
        //$basicConstraints = $this->getExtension('id-ce-basicConstraints');
        //if (!$basicConstraints || !$basicConstraints['cA']) {
        //    return false;
        //}

        $this->CAs[] = $cert;

        $this->dn = $olddn;
        $this->currentCert = $oldcert;
        $this->signatureSubject = $oldsigsubj;

        return true;
    }

    /**
     * Validate an X.509 certificate against a URL
     *
     * From RFC2818 "HTTP over TLS":
     *
     * Matching is performed using the matching rules specified by
     * [RFC2459].  If more than one identity of a given type is present in
     * the certificate (e.g., more than one dNSName name, a match in any one
     * of the set is considered acceptable.) Names may contain the wildcard
     * character * which is considered to match any single domain name
     * component or component fragment. E.g., *.a.com matches foo.a.com but
     * not bar.foo.a.com. f*.com matches foo.com but not bar.com.
     *
     * @param string $url
     * @return bool
     */
    public function validateURL($url)
    {
        if (!is_array($this->currentCert) || !isset($this->currentCert['tbsCertificate'])) {
            return false;
        }

        $components = parse_url($url);
        if (!isset($components['host'])) {
            return false;
        }

        if ($names = $this->getExtension('id-ce-subjectAltName')) {
            foreach ($names as $name) {
                foreach ($name as $key => $value) {
                    $value = preg_quote($value);
                    $value = str_replace('\*', '[^.]*', $value);
                    switch ($key) {
                        case 'dNSName':
                            /* From RFC2818 "HTTP over TLS":

                               If a subjectAltName extension of type dNSName is present, that MUST
                               be used as the identity. Otherwise, the (most specific) Common Name
                               field in the Subject field of the certificate MUST be used. Although
                               the use of the Common Name is existing practice, it is deprecated and
                               Certification Authorities are encouraged to use the dNSName instead. */
                            if (preg_match('#^' . $value . '$#', $components['host'])) {
                                return true;
                            }
                            break;
                        case 'iPAddress':
                            /* From RFC2818 "HTTP over TLS":

                               In some cases, the URI is specified as an IP address rather than a
                               hostname. In this case, the iPAddress subjectAltName must be present
                               in the certificate and must exactly match the IP in the URI. */
                            if (preg_match('#(?:\d{1-3}\.){4}#', $components['host'] . '.') && preg_match('#^' . $value . '$#', $components['host'])) {
                                return true;
                            }
                    }
                }
            }
            return false;
        }

        if ($value = $this->getDNProp('id-at-commonName')) {
            $value = str_replace(['.', '*'], ['\.', '[^.]*'], $value[0]);
            return preg_match('#^' . $value . '$#', $components['host']) === 1;
        }

        return false;
    }

    /**
     * Validate a date
     *
     * If $date isn't defined it is assumed to be the current date.
     *
     * @param \DateTimeInterface|string $date optional
     * @return bool
     */
    public function validateDate($date = null)
    {
        if (!is_array($this->currentCert) || !isset($this->currentCert['tbsCertificate'])) {
            return false;
        }

        if (!isset($date)) {
            $date = new \DateTimeImmutable('now', new \DateTimeZone(@date_default_timezone_get()));
        }

        $notBefore = $this->currentCert['tbsCertificate']['validity']['notBefore'];
        $notBefore = isset($notBefore['generalTime']) ? $notBefore['generalTime'] : $notBefore['utcTime'];

        $notAfter = $this->currentCert['tbsCertificate']['validity']['notAfter'];
        $notAfter = isset($notAfter['generalTime']) ? $notAfter['generalTime'] : $notAfter['utcTime'];

        if (is_string($date)) {
            $date = new \DateTimeImmutable($date, new \DateTimeZone(@date_default_timezone_get()));
        }

        $notBefore = new \DateTimeImmutable($notBefore, new \DateTimeZone(@date_default_timezone_get()));
        $notAfter = new \DateTimeImmutable($notAfter, new \DateTimeZone(@date_default_timezone_get()));

        return $date >= $notBefore && $date <= $notAfter;
    }

    /**
     * Fetches a URL
     *
     * @param string $url
     * @return bool|string
     */
    private static function fetchURL($url)
    {
        if (self::$disable_url_fetch) {
            return false;
        }

        $parts = parse_url($url);
        $data = '';
        switch ($parts['scheme']) {
            case 'http':
                $fsock = @fsockopen($parts['host'], isset($parts['port']) ? $parts['port'] : 80);
                if (!$fsock) {
                    return false;
                }
                $path = $parts['path'];
                if (isset($parts['query'])) {
                    $path .= '?' . $parts['query'];
                }
                fputs($fsock, "GET $path HTTP/1.0\r\n");
                fputs($fsock, "Host: $parts[host]\r\n\r\n");
                $line = fgets($fsock, 1024);
                if (strlen($line) < 3) {
                    return false;
                }
                preg_match('#HTTP/1.\d (\d{3})#', $line, $temp);
                if ($temp[1] != '200') {
                    return false;
                }

                // skip the rest of the headers in the http response
                while (!feof($fsock) && fgets($fsock, 1024) != "\r\n") {
                }

                while (!feof($fsock)) {
                    $temp = fread($fsock, 1024);
                    if ($temp === false) {
                        return false;
                    }
                    $data .= $temp;
                }

                break;
            //case 'ftp':
            //case 'ldap':
            //default:
        }

        return $data;
    }

    /**
     * Validates an intermediate cert as identified via authority info access extension
     *
     * See https://tools.ietf.org/html/rfc4325 for more info
     *
     * @param bool $caonly
     * @param int $count
     * @return bool
     */
    private function testForIntermediate($caonly, $count)
    {
        $opts = $this->getExtension('id-pe-authorityInfoAccess');
        if (!is_array($opts)) {
            return false;
        }
        foreach ($opts as $opt) {
            if ($opt['accessMethod'] == 'id-ad-caIssuers') {
                // accessLocation is a GeneralName. GeneralName fields support stuff like email addresses, IP addresses, LDAP,
                // etc, but we're only supporting URI's. URI's and LDAP are the only thing https://tools.ietf.org/html/rfc4325
                // discusses
                if (isset($opt['accessLocation']['uniformResourceIdentifier'])) {
                    $url = $opt['accessLocation']['uniformResourceIdentifier'];
                    break;
                }
            }
        }

        if (!isset($url)) {
            return false;
        }

        $cert = static::fetchURL($url);
        if (!is_string($cert)) {
            return false;
        }

        $parent = new static();
        $parent->CAs = $this->CAs;
        /*
         "Conforming applications that support HTTP or FTP for accessing
          certificates MUST be able to accept .cer files and SHOULD be able
          to accept .p7c files." -- https://tools.ietf.org/html/rfc4325

         A .p7c file is 'a "certs-only" CMS message as specified in RFC 2797"

         These are currently unsupported
        */
        if (!is_array($parent->loadX509($cert))) {
            return false;
        }

        if (!$parent->validateSignatureCountable($caonly, ++$count)) {
            return false;
        }

        $this->CAs[] = $parent->currentCert;
        //$this->loadCA($cert);

        return true;
    }

    /**
     * Validate a signature
     *
     * Works on X.509 certs, CSR's and CRL's.
     * Returns true if the signature is verified, false if it is not correct or null on error
     *
     * By default returns false for self-signed certs. Call validateSignature(false) to make this support
     * self-signed.
     *
     * The behavior of this function is inspired by {@link http://php.net/openssl-verify openssl_verify}.
     *
     * @param bool $caonly optional
     * @return mixed
     */
    public function validateSignature($caonly = true)
    {
        return $this->validateSignatureCountable($caonly, 0);
    }

    /**
     * Validate a signature
     *
     * Performs said validation whilst keeping track of how many times validation method is called
     *
     * @param bool $caonly
     * @param int $count
     * @return mixed
     */
    private function validateSignatureCountable($caonly, $count)
    {
        if (!is_array($this->currentCert) || !isset($this->signatureSubject)) {
            return null;
        }

        if ($count == self::$recur_limit) {
            return false;
        }

        /* TODO:
           "emailAddress attribute values are not case-sensitive (e.g., "subscriber@example.com" is the same as "SUBSCRIBER@EXAMPLE.COM")."
            -- http://tools.ietf.org/html/rfc5280#section-4.1.2.6

           implement pathLenConstraint in the id-ce-basicConstraints extension */

        switch (true) {
            case isset($this->currentCert['tbsCertificate']):
                // self-signed cert
                switch (true) {
                    case !defined('FILE_X509_IGNORE_TYPE') && $this->currentCert['tbsCertificate']['issuer'] === $this->currentCert['tbsCertificate']['subject']:
                    case defined('FILE_X509_IGNORE_TYPE') && $this->getIssuerDN(self::DN_STRING) === $this->getDN(self::DN_STRING):
                        $authorityKey = $this->getExtension('id-ce-authorityKeyIdentifier');
                        $subjectKeyID = $this->getExtension('id-ce-subjectKeyIdentifier');
                        switch (true) {
                            case !is_array($authorityKey):
                            case !$subjectKeyID:
                            case isset($authorityKey['keyIdentifier']) && $authorityKey['keyIdentifier'] === $subjectKeyID:
                                $signingCert = $this->currentCert; // working cert
                        }
                }

                if (!empty($this->CAs)) {
                    for ($i = 0; $i < count($this->CAs); $i++) {
                        // even if the cert is a self-signed one we still want to see if it's a CA;
                        // if not, we'll conditionally return an error
                        $ca = $this->CAs[$i];
                        switch (true) {
                            case !defined('FILE_X509_IGNORE_TYPE') && $this->currentCert['tbsCertificate']['issuer'] === $ca['tbsCertificate']['subject']:
                            case defined('FILE_X509_IGNORE_TYPE') && $this->getDN(self::DN_STRING, $this->currentCert['tbsCertificate']['issuer']) === $this->getDN(self::DN_STRING, $ca['tbsCertificate']['subject']):
                                $authorityKey = $this->getExtension('id-ce-authorityKeyIdentifier');
                                $subjectKeyID = $this->getExtension('id-ce-subjectKeyIdentifier', $ca);
                                switch (true) {
                                    case !is_array($authorityKey):
                                    case !$subjectKeyID:
                                    case isset($authorityKey['keyIdentifier']) && $authorityKey['keyIdentifier'] === $subjectKeyID:
                                        if (is_array($authorityKey) && isset($authorityKey['authorityCertSerialNumber']) && !$authorityKey['authorityCertSerialNumber']->equals($ca['tbsCertificate']['serialNumber'])) {
                                            break 2; // serial mismatch - check other ca
                                        }
                                        $signingCert = $ca; // working cert
                                        break 3;
                                }
                        }
                    }
                    if (count($this->CAs) == $i && $caonly) {
                        return $this->testForIntermediate($caonly, $count) && $this->validateSignature($caonly);
                    }
                } elseif (!isset($signingCert) || $caonly) {
                    return $this->testForIntermediate($caonly, $count) && $this->validateSignature($caonly);
                }
                return $this->validateSignatureHelper(
                    $signingCert['tbsCertificate']['subjectPublicKeyInfo']['algorithm']['algorithm'],
                    $signingCert['tbsCertificate']['subjectPublicKeyInfo']['subjectPublicKey'],
                    $this->currentCert['signatureAlgorithm']['algorithm'],
                    substr($this->currentCert['signature'], 1),
                    $this->signatureSubject
                );
            case isset($this->currentCert['certificationRequestInfo']):
                return $this->validateSignatureHelper(
                    $this->currentCert['certificationRequestInfo']['subjectPKInfo']['algorithm']['algorithm'],
                    $this->currentCert['certificationRequestInfo']['subjectPKInfo']['subjectPublicKey'],
                    $this->currentCert['signatureAlgorithm']['algorithm'],
                    substr($this->currentCert['signature'], 1),
                    $this->signatureSubject
                );
            case isset($this->currentCert['publicKeyAndChallenge']):
                return $this->validateSignatureHelper(
                    $this->currentCert['publicKeyAndChallenge']['spki']['algorithm']['algorithm'],
                    $this->currentCert['publicKeyAndChallenge']['spki']['subjectPublicKey'],
                    $this->currentCert['signatureAlgorithm']['algorithm'],
                    substr($this->currentCert['signature'], 1),
                    $this->signatureSubject
                );
            case isset($this->currentCert['tbsCertList']):
                if (!empty($this->CAs)) {
                    for ($i = 0; $i < count($this->CAs); $i++) {
                        $ca = $this->CAs[$i];
                        switch (true) {
                            case !defined('FILE_X509_IGNORE_TYPE') && $this->currentCert['tbsCertList']['issuer'] === $ca['tbsCertificate']['subject']:
                            case defined('FILE_X509_IGNORE_TYPE') && $this->getDN(self::DN_STRING, $this->currentCert['tbsCertList']['issuer']) === $this->getDN(self::DN_STRING, $ca['tbsCertificate']['subject']):
                                $authorityKey = $this->getExtension('id-ce-authorityKeyIdentifier');
                                $subjectKeyID = $this->getExtension('id-ce-subjectKeyIdentifier', $ca);
                                switch (true) {
                                    case !is_array($authorityKey):
                                    case !$subjectKeyID:
                                    case isset($authorityKey['keyIdentifier']) && $authorityKey['keyIdentifier'] === $subjectKeyID:
                                        if (is_array($authorityKey) && isset($authorityKey['authorityCertSerialNumber']) && !$authorityKey['authorityCertSerialNumber']->equals($ca['tbsCertificate']['serialNumber'])) {
                                            break 2; // serial mismatch - check other ca
                                        }
                                        $signingCert = $ca; // working cert
                                        break 3;
                                }
                        }
                    }
                }
                if (!isset($signingCert)) {
                    return false;
                }
                return $this->validateSignatureHelper(
                    $signingCert['tbsCertificate']['subjectPublicKeyInfo']['algorithm']['algorithm'],
                    $signingCert['tbsCertificate']['subjectPublicKeyInfo']['subjectPublicKey'],
                    $this->currentCert['signatureAlgorithm']['algorithm'],
                    substr($this->currentCert['signature'], 1),
                    $this->signatureSubject
                );
            default:
                return false;
        }
    }

    /**
     * Validates a signature
     *
     * Returns true if the signature is verified and false if it is not correct.
     * If the algorithms are unsupposed an exception is thrown.
     *
     * @param string $publicKeyAlgorithm
     * @param string $publicKey
     * @param string $signatureAlgorithm
     * @param string $signature
     * @param string $signatureSubject
     * @throws UnsupportedAlgorithmException if the algorithm is unsupported
     * @return bool
     */
    private function validateSignatureHelper($publicKeyAlgorithm, $publicKey, $signatureAlgorithm, $signature, $signatureSubject)
    {
        switch ($publicKeyAlgorithm) {
            case 'id-RSASSA-PSS':
                $key = RSA::loadFormat('PSS', $publicKey);
                break;
            case 'rsaEncryption':
                $key = RSA::loadFormat('PKCS8', $publicKey);
                switch ($signatureAlgorithm) {
                    case 'id-RSASSA-PSS':
                        break;
                    case 'md2WithRSAEncryption':
                    case 'md5WithRSAEncryption':
                    case 'sha1WithRSAEncryption':
                    case 'sha224WithRSAEncryption':
                    case 'sha256WithRSAEncryption':
                    case 'sha384WithRSAEncryption':
                    case 'sha512WithRSAEncryption':
                        $key = $key
                            ->withHash(preg_replace('#WithRSAEncryption$#', '', $signatureAlgorithm))
                            ->withPadding(RSA::SIGNATURE_PKCS1);
                        break;
                    default:
                        throw new UnsupportedAlgorithmException('Signature algorithm unsupported');
                }
                break;
            case 'id-Ed25519':
            case 'id-Ed448':
                $key = EC::loadFormat('PKCS8', $publicKey);
                break;
            case 'id-ecPublicKey':
                $key = EC::loadFormat('PKCS8', $publicKey);
                switch ($signatureAlgorithm) {
                    case 'ecdsa-with-SHA1':
                    case 'ecdsa-with-SHA224':
                    case 'ecdsa-with-SHA256':
                    case 'ecdsa-with-SHA384':
                    case 'ecdsa-with-SHA512':
                        $key = $key
                            ->withHash(preg_replace('#^ecdsa-with-#', '', strtolower($signatureAlgorithm)));
                        break;
                    default:
                        throw new UnsupportedAlgorithmException('Signature algorithm unsupported');
                }
                break;
            case 'id-dsa':
                $key = DSA::loadFormat('PKCS8', $publicKey);
                switch ($signatureAlgorithm) {
                    case 'id-dsa-with-sha1':
                    case 'id-dsa-with-sha224':
                    case 'id-dsa-with-sha256':
                        $key = $key
                            ->withHash(preg_replace('#^id-dsa-with-#', '', strtolower($signatureAlgorithm)));
                        break;
                    default:
                        throw new UnsupportedAlgorithmException('Signature algorithm unsupported');
                }
                break;
            default:
                throw new UnsupportedAlgorithmException('Public key algorithm unsupported');
        }

        return $key->verify($signatureSubject, $signature);
    }

    /**
     * Sets the recursion limit
     *
     * When validating a signature it may be necessary to download intermediate certs from URI's.
     * An intermediate cert that linked to itself would result in an infinite loop so to prevent
     * that we set a recursion limit. A negative number means that there is no recursion limit.
     *
     * @param int $count
     */
    public static function setRecurLimit($count)
    {
        self::$recur_limit = $count;
    }

    /**
     * Prevents URIs from being automatically retrieved
     *
     */
    public static function disableURLFetch()
    {
        self::$disable_url_fetch = true;
    }

    /**
     * Allows URIs to be automatically retrieved
     *
     */
    public static function enableURLFetch()
    {
        self::$disable_url_fetch = false;
    }

    /**
     * Decodes an IP address
     *
     * Takes in a base64 encoded "blob" and returns a human readable IP address
     *
     * @param string $ip
     * @return string
     */
    public static function decodeIP($ip)
    {
        return inet_ntop($ip);
    }

    /**
     * Decodes an IP address in a name constraints extension
     *
     * Takes in a base64 encoded "blob" and returns a human readable IP address / mask
     *
     * @param string $ip
     * @return array
     */
    public static function decodeNameConstraintIP($ip)
    {
        $size = strlen($ip) >> 1;
        $mask = substr($ip, $size);
        $ip = substr($ip, 0, $size);
        return [inet_ntop($ip), inet_ntop($mask)];
    }

    /**
     * Encodes an IP address
     *
     * Takes a human readable IP address into a base64-encoded "blob"
     *
     * @param string|array $ip
     * @return string
     */
    public static function encodeIP($ip)
    {
        return is_string($ip) ?
            inet_pton($ip) :
            inet_pton($ip[0]) . inet_pton($ip[1]);
    }

    /**
     * "Normalizes" a Distinguished Name property
     *
     * @param string $propName
     * @return mixed
     */
    private function translateDNProp($propName)
    {
        switch (strtolower($propName)) {
            case 'jurisdictionofincorporationcountryname':
            case 'jurisdictioncountryname':
            case 'jurisdictionc':
                return 'jurisdictionOfIncorporationCountryName';
            case 'jurisdictionofincorporationstateorprovincename':
            case 'jurisdictionstateorprovincename':
            case 'jurisdictionst':
                return 'jurisdictionOfIncorporationStateOrProvinceName';
            case 'jurisdictionlocalityname':
            case 'jurisdictionl':
                return 'jurisdictionLocalityName';
            case 'id-at-businesscategory':
            case 'businesscategory':
                return 'id-at-businessCategory';
            case 'id-at-countryname':
            case 'countryname':
            case 'c':
                return 'id-at-countryName';
            case 'id-at-organizationname':
            case 'organizationname':
            case 'o':
                return 'id-at-organizationName';
            case 'id-at-dnqualifier':
            case 'dnqualifier':
                return 'id-at-dnQualifier';
            case 'id-at-commonname':
            case 'commonname':
            case 'cn':
                return 'id-at-commonName';
            case 'id-at-stateorprovincename':
            case 'stateorprovincename':
            case 'state':
            case 'province':
            case 'provincename':
            case 'st':
                return 'id-at-stateOrProvinceName';
            case 'id-at-localityname':
            case 'localityname':
            case 'l':
                return 'id-at-localityName';
            case 'id-emailaddress':
            case 'emailaddress':
                return 'pkcs-9-at-emailAddress';
            case 'id-at-serialnumber':
            case 'serialnumber':
                return 'id-at-serialNumber';
            case 'id-at-postalcode':
            case 'postalcode':
                return 'id-at-postalCode';
            case 'id-at-streetaddress':
            case 'streetaddress':
                return 'id-at-streetAddress';
            case 'id-at-name':
            case 'name':
                return 'id-at-name';
            case 'id-at-givenname':
            case 'givenname':
                return 'id-at-givenName';
            case 'id-at-surname':
            case 'surname':
            case 'sn':
                return 'id-at-surname';
            case 'id-at-initials':
            case 'initials':
                return 'id-at-initials';
            case 'id-at-generationqualifier':
            case 'generationqualifier':
                return 'id-at-generationQualifier';
            case 'id-at-organizationalunitname':
            case 'organizationalunitname':
            case 'ou':
                return 'id-at-organizationalUnitName';
            case 'id-at-pseudonym':
            case 'pseudonym':
                return 'id-at-pseudonym';
            case 'id-at-title':
            case 'title':
                return 'id-at-title';
            case 'id-at-description':
            case 'description':
                return 'id-at-description';
            case 'id-at-role':
            case 'role':
                return 'id-at-role';
            case 'id-at-uniqueidentifier':
            case 'uniqueidentifier':
            case 'x500uniqueidentifier':
                return 'id-at-uniqueIdentifier';
            case 'postaladdress':
            case 'id-at-postaladdress':
                return 'id-at-postalAddress';
            default:
                return false;
        }
    }

    /**
     * Set a Distinguished Name property
     *
     * @param string $propName
     * @param mixed $propValue
     * @param string $type optional
     * @return bool
     */
    public function setDNProp($propName, $propValue, $type = 'utf8String')
    {
        if (empty($this->dn)) {
            $this->dn = ['rdnSequence' => []];
        }

        if (($propName = $this->translateDNProp($propName)) === false) {
            return false;
        }

        foreach ((array) $propValue as $v) {
            if (!is_array($v) && isset($type)) {
                $v = [$type => $v];
            }
            $this->dn['rdnSequence'][] = [
                [
                    'type' => $propName,
                    'value' => $v
                ]
            ];
        }

        return true;
    }

    /**
     * Remove Distinguished Name properties
     *
     * @param string $propName
     */
    public function removeDNProp($propName)
    {
        if (empty($this->dn)) {
            return;
        }

        if (($propName = $this->translateDNProp($propName)) === false) {
            return;
        }

        $dn = &$this->dn['rdnSequence'];
        $size = count($dn);
        for ($i = 0; $i < $size; $i++) {
            if ($dn[$i][0]['type'] == $propName) {
                unset($dn[$i]);
            }
        }

        $dn = array_values($dn);
        // fix for https://bugs.php.net/75433 affecting PHP 7.2
        if (!isset($dn[0])) {
            $dn = array_splice($dn, 0, 0);
        }
    }

    /**
     * Get Distinguished Name properties
     *
     * @param string $propName
     * @param array $dn optional
     * @param bool $withType optional
     * @return mixed
     */
    public function getDNProp($propName, $dn = null, $withType = false)
    {
        if (!isset($dn)) {
            $dn = $this->dn;
        }

        if (empty($dn)) {
            return false;
        }

        if (($propName = $this->translateDNProp($propName)) === false) {
            return false;
        }

        $filters = [];
        $filters['value'] = ['type' => ASN1::TYPE_UTF8_STRING];
        ASN1::setFilters($filters);
        $this->mapOutDNs($dn, 'rdnSequence');
        $dn = $dn['rdnSequence'];
        $result = [];
        for ($i = 0; $i < count($dn); $i++) {
            if ($dn[$i][0]['type'] == $propName) {
                $v = $dn[$i][0]['value'];
                if (!$withType) {
                    if (is_array($v)) {
                        foreach ($v as $type => $s) {
                            $type = array_search($type, ASN1::ANY_MAP);
                            if ($type !== false && array_key_exists($type, ASN1::STRING_TYPE_SIZE)) {
                                $s = ASN1::convert($s, $type);
                                if ($s !== false) {
                                    $v = $s;
                                    break;
                                }
                            }
                        }
                        if (is_array($v)) {
                            $v = array_pop($v); // Always strip data type.
                        }
                    } elseif (is_object($v) && $v instanceof Element) {
                        $map = $this->getMapping($propName);
                        if (!is_bool($map)) {
                            $decoded = ASN1::decodeBER($v);
                            if (!$decoded) {
                                return false;
                            }
                            $v = ASN1::asn1map($decoded[0], $map);
                        }
                    }
                }
                $result[] = $v;
            }
        }

        return $result;
    }

    /**
     * Set a Distinguished Name
     *
     * @param mixed $dn
     * @param bool $merge optional
     * @param string $type optional
     * @return bool
     */
    public function setDN($dn, $merge = false, $type = 'utf8String')
    {
        if (!$merge) {
            $this->dn = null;
        }

        if (is_array($dn)) {
            if (isset($dn['rdnSequence'])) {
                $this->dn = $dn; // No merge here.
                return true;
            }

            // handles stuff generated by openssl_x509_parse()
            foreach ($dn as $prop => $value) {
                if (!$this->setDNProp($prop, $value, $type)) {
                    return false;
                }
            }
            return true;
        }

        // handles everything else
        $results = preg_split('#((?:^|, *|/)(?:C=|O=|OU=|CN=|L=|ST=|SN=|postalCode=|streetAddress=|emailAddress=|serialNumber=|organizationalUnitName=|title=|description=|role=|x500UniqueIdentifier=|postalAddress=))#', $dn, -1, PREG_SPLIT_DELIM_CAPTURE);
        for ($i = 1; $i < count($results); $i += 2) {
            $prop = trim($results[$i], ', =/');
            $value = $results[$i + 1];
            if (!$this->setDNProp($prop, $value, $type)) {
                return false;
            }
        }

        return true;
    }

    /**
     * Get the Distinguished Name for a certificates subject
     *
     * @param mixed $format optional
     * @param array $dn optional
     * @return array|bool|string
     */
    public function getDN($format = self::DN_ARRAY, $dn = null)
    {
        if (!isset($dn)) {
            $dn = isset($this->currentCert['tbsCertList']) ? $this->currentCert['tbsCertList']['issuer'] : $this->dn;
        }

        switch ((int) $format) {
            case self::DN_ARRAY:
                return $dn;
            case self::DN_ASN1:
                $filters = [];
                $filters['rdnSequence']['value'] = ['type' => ASN1::TYPE_UTF8_STRING];
                ASN1::setFilters($filters);
                $this->mapOutDNs($dn, 'rdnSequence');
                return ASN1::encodeDER($dn, Maps\Name::MAP);
            case self::DN_CANON:
                //  No SEQUENCE around RDNs and all string values normalized as
                // trimmed lowercase UTF-8 with all spacing as one blank.
                // constructed RDNs will not be canonicalized
                $filters = [];
                $filters['value'] = ['type' => ASN1::TYPE_UTF8_STRING];
                ASN1::setFilters($filters);
                $result = '';
                $this->mapOutDNs($dn, 'rdnSequence');
                foreach ($dn['rdnSequence'] as $rdn) {
                    foreach ($rdn as $i => $attr) {
                        $attr = &$rdn[$i];
                        if (is_array($attr['value'])) {
                            foreach ($attr['value'] as $type => $v) {
                                $type = array_search($type, ASN1::ANY_MAP, true);
                                if ($type !== false && array_key_exists($type, ASN1::STRING_TYPE_SIZE)) {
                                    $v = ASN1::convert($v, $type);
                                    if ($v !== false) {
                                        $v = preg_replace('/\s+/', ' ', $v);
                                        $attr['value'] = strtolower(trim($v));
                                        break;
                                    }
                                }
                            }
                        }
                    }
                    $result .= ASN1::encodeDER($rdn, Maps\RelativeDistinguishedName::MAP);
                }
                return $result;
            case self::DN_HASH:
                $dn = $this->getDN(self::DN_CANON, $dn);
                $hash = new Hash('sha1');
                $hash = $hash->hash($dn);
                $hash = unpack('Vhash', $hash)['hash'];
                return strtolower(Strings::bin2hex(pack('N', $hash)));
        }

        // Default is to return a string.
        $start = true;
        $output = '';

        $result = [];
        $filters = [];
        $filters['rdnSequence']['value'] = ['type' => ASN1::TYPE_UTF8_STRING];
        ASN1::setFilters($filters);
        $this->mapOutDNs($dn, 'rdnSequence');

        foreach ($dn['rdnSequence'] as $field) {
            $prop = $field[0]['type'];
            $value = $field[0]['value'];

            $delim = ', ';
            switch ($prop) {
                case 'id-at-countryName':
                    $desc = 'C';
                    break;
                case 'id-at-stateOrProvinceName':
                    $desc = 'ST';
                    break;
                case 'id-at-organizationName':
                    $desc = 'O';
                    break;
                case 'id-at-organizationalUnitName':
                    $desc = 'OU';
                    break;
                case 'id-at-commonName':
                    $desc = 'CN';
                    break;
                case 'id-at-localityName':
                    $desc = 'L';
                    break;
                case 'id-at-surname':
                    $desc = 'SN';
                    break;
                case 'id-at-uniqueIdentifier':
                    $delim = '/';
                    $desc = 'x500UniqueIdentifier';
                    break;
                case 'id-at-postalAddress':
                    $delim = '/';
                    $desc = 'postalAddress';
                    break;
                default:
                    $delim = '/';
                    $desc = preg_replace('#.+-([^-]+)$#', '$1', $prop);
            }

            if (!$start) {
                $output .= $delim;
            }
            if (is_array($value)) {
                foreach ($value as $type => $v) {
                    $type = array_search($type, ASN1::ANY_MAP, true);
                    if ($type !== false && array_key_exists($type, ASN1::STRING_TYPE_SIZE)) {
                        $v = ASN1::convert($v, $type);
                        if ($v !== false) {
                            $value = $v;
                            break;
                        }
                    }
                }
                if (is_array($value)) {
                    $value = array_pop($value); // Always strip data type.
                }
            } elseif (is_object($value) && $value instanceof Element) {
                $callback = function ($x) {
                    return '\x' . bin2hex($x[0]);
                };
                $value = strtoupper(preg_replace_callback('#[^\x20-\x7E]#', $callback, $value->element));
            }
            $output .= $desc . '=' . $value;
            $result[$desc] = isset($result[$desc]) ?
                array_merge((array) $result[$desc], [$value]) :
                $value;
            $start = false;
        }

        return $format == self::DN_OPENSSL ? $result : $output;
    }

    /**
     * Get the Distinguished Name for a certificate/crl issuer
     *
     * @param int $format optional
     * @return mixed
     */
    public function getIssuerDN($format = self::DN_ARRAY)
    {
        switch (true) {
            case !isset($this->currentCert) || !is_array($this->currentCert):
                break;
            case isset($this->currentCert['tbsCertificate']):
                return $this->getDN($format, $this->currentCert['tbsCertificate']['issuer']);
            case isset($this->currentCert['tbsCertList']):
                return $this->getDN($format, $this->currentCert['tbsCertList']['issuer']);
        }

        return false;
    }

    /**
     * Get the Distinguished Name for a certificate/csr subject
     * Alias of getDN()
     *
     * @param int $format optional
     * @return mixed
     */
    public function getSubjectDN($format = self::DN_ARRAY)
    {
        switch (true) {
            case !empty($this->dn):
                return $this->getDN($format);
            case !isset($this->currentCert) || !is_array($this->currentCert):
                break;
            case isset($this->currentCert['tbsCertificate']):
                return $this->getDN($format, $this->currentCert['tbsCertificate']['subject']);
            case isset($this->currentCert['certificationRequestInfo']):
                return $this->getDN($format, $this->currentCert['certificationRequestInfo']['subject']);
        }

        return false;
    }

    /**
     * Get an individual Distinguished Name property for a certificate/crl issuer
     *
     * @param string $propName
     * @param bool $withType optional
     * @return mixed
     */
    public function getIssuerDNProp($propName, $withType = false)
    {
        switch (true) {
            case !isset($this->currentCert) || !is_array($this->currentCert):
                break;
            case isset($this->currentCert['tbsCertificate']):
                return $this->getDNProp($propName, $this->currentCert['tbsCertificate']['issuer'], $withType);
            case isset($this->currentCert['tbsCertList']):
                return $this->getDNProp($propName, $this->currentCert['tbsCertList']['issuer'], $withType);
        }

        return false;
    }

    /**
     * Get an individual Distinguished Name property for a certificate/csr subject
     *
     * @param string $propName
     * @param bool $withType optional
     * @return mixed
     */
    public function getSubjectDNProp($propName, $withType = false)
    {
        switch (true) {
            case !empty($this->dn):
                return $this->getDNProp($propName, null, $withType);
            case !isset($this->currentCert) || !is_array($this->currentCert):
                break;
            case isset($this->currentCert['tbsCertificate']):
                return $this->getDNProp($propName, $this->currentCert['tbsCertificate']['subject'], $withType);
            case isset($this->currentCert['certificationRequestInfo']):
                return $this->getDNProp($propName, $this->currentCert['certificationRequestInfo']['subject'], $withType);
        }

        return false;
    }

    /**
     * Get the certificate chain for the current cert
     *
     * @return mixed
     */
    public function getChain()
    {
        $chain = [$this->currentCert];

        if (!is_array($this->currentCert) || !isset($this->currentCert['tbsCertificate'])) {
            return false;
        }
        while (true) {
            $currentCert = $chain[count($chain) - 1];
            for ($i = 0; $i < count($this->CAs); $i++) {
                $ca = $this->CAs[$i];
                if ($currentCert['tbsCertificate']['issuer'] === $ca['tbsCertificate']['subject']) {
                    $authorityKey = $this->getExtension('id-ce-authorityKeyIdentifier', $currentCert);
                    $subjectKeyID = $this->getExtension('id-ce-subjectKeyIdentifier', $ca);
                    switch (true) {
                        case !is_array($authorityKey):
                        case is_array($authorityKey) && isset($authorityKey['keyIdentifier']) && $authorityKey['keyIdentifier'] === $subjectKeyID:
                            if ($currentCert === $ca) {
                                break 3;
                            }
                            $chain[] = $ca;
                            break 2;
                    }
                }
            }
            if ($i == count($this->CAs)) {
                break;
            }
        }
        foreach ($chain as $key => $value) {
            $chain[$key] = new X509();
            $chain[$key]->loadX509($value);
        }
        return $chain;
    }

    /**
     * Returns the current cert
     *
     * @return array|bool
     */
    public function &getCurrentCert()
    {
        return $this->currentCert;
    }

    /**
     * Set public key
     *
     * Key needs to be a \phpseclib3\Crypt\RSA object
     *
     * @param PublicKey $key
     * @return void
     */
    public function setPublicKey(PublicKey $key)
    {
        $this->publicKey = $key;
    }

    /**
     * Set private key
     *
     * Key needs to be a \phpseclib3\Crypt\RSA object
     *
     * @param PrivateKey $key
     */
    public function setPrivateKey(PrivateKey $key)
    {
        $this->privateKey = $key;
    }

    /**
     * Set challenge
     *
     * Used for SPKAC CSR's
     *
     * @param string $challenge
     */
    public function setChallenge($challenge)
    {
        $this->challenge = $challenge;
    }

    /**
     * Gets the public key
     *
     * Returns a \phpseclib3\Crypt\RSA object or a false.
     *
     * @return mixed
     */
    public function getPublicKey()
    {
        if (isset($this->publicKey)) {
            return $this->publicKey;
        }

        if (isset($this->currentCert) && is_array($this->currentCert)) {
            $paths = [
                'tbsCertificate/subjectPublicKeyInfo',
                'certificationRequestInfo/subjectPKInfo',
                'publicKeyAndChallenge/spki'
            ];
            foreach ($paths as $path) {
                $keyinfo = $this->subArray($this->currentCert, $path);
                if (!empty($keyinfo)) {
                    break;
                }
            }
        }
        if (empty($keyinfo)) {
            return false;
        }

        $key = $keyinfo['subjectPublicKey'];

        switch ($keyinfo['algorithm']['algorithm']) {
            case 'id-RSASSA-PSS':
                return RSA::loadFormat('PSS', $key);
            case 'rsaEncryption':
                return RSA::loadFormat('PKCS8', $key)->withPadding(RSA::SIGNATURE_PKCS1);
            case 'id-ecPublicKey':
            case 'id-Ed25519':
            case 'id-Ed448':
                return EC::loadFormat('PKCS8', $key);
            case 'id-dsa':
                return DSA::loadFormat('PKCS8', $key);
        }

        return false;
    }

    /**
     * Load a Certificate Signing Request
     *
     * @param string $csr
     * @param int $mode
     * @return mixed
     */
    public function loadCSR($csr, $mode = self::FORMAT_AUTO_DETECT)
    {
        if (is_array($csr) && isset($csr['certificationRequestInfo'])) {
            unset($this->currentCert);
            unset($this->currentKeyIdentifier);
            unset($this->signatureSubject);
            $this->dn = $csr['certificationRequestInfo']['subject'];
            if (!isset($this->dn)) {
                return false;
            }

            $this->currentCert = $csr;
            return $csr;
        }

        // see http://tools.ietf.org/html/rfc2986

        if ($mode != self::FORMAT_DER) {
            $newcsr = ASN1::extractBER($csr);
            if ($mode == self::FORMAT_PEM && $csr == $newcsr) {
                return false;
            }
            $csr = $newcsr;
        }
        $orig = $csr;

        if ($csr === false) {
            $this->currentCert = false;
            return false;
        }

        $decoded = ASN1::decodeBER($csr);

        if (!$decoded) {
            $this->currentCert = false;
            return false;
        }

        $csr = ASN1::asn1map($decoded[0], Maps\CertificationRequest::MAP);
        if (!isset($csr) || $csr === false) {
            $this->currentCert = false;
            return false;
        }

        $this->mapInAttributes($csr, 'certificationRequestInfo/attributes');
        $this->mapInDNs($csr, 'certificationRequestInfo/subject/rdnSequence');

        $this->dn = $csr['certificationRequestInfo']['subject'];

        $this->signatureSubject = substr($orig, $decoded[0]['content'][0]['start'], $decoded[0]['content'][0]['length']);

        $key = $csr['certificationRequestInfo']['subjectPKInfo'];
        $key = ASN1::encodeDER($key, Maps\SubjectPublicKeyInfo::MAP);
        $csr['certificationRequestInfo']['subjectPKInfo']['subjectPublicKey'] =
            "-----BEGIN PUBLIC KEY-----\r\n" .
            chunk_split(base64_encode($key), 64) .
            "-----END PUBLIC KEY-----";

        $this->currentKeyIdentifier = null;
        $this->currentCert = $csr;

        $this->publicKey = null;
        $this->publicKey = $this->getPublicKey();

        return $csr;
    }

    /**
     * Save CSR request
     *
     * @param array $csr
     * @param int $format optional
     * @return string
     */
    public function saveCSR(array $csr, $format = self::FORMAT_PEM)
    {
        if (!is_array($csr) || !isset($csr['certificationRequestInfo'])) {
            return false;
        }

        switch (true) {
            case !($algorithm = $this->subArray($csr, 'certificationRequestInfo/subjectPKInfo/algorithm/algorithm')):
            case is_object($csr['certificationRequestInfo']['subjectPKInfo']['subjectPublicKey']):
                break;
            default:
                $csr['certificationRequestInfo']['subjectPKInfo'] = new Element(
                    base64_decode(preg_replace('#-.+-|[\r\n]#', '', $csr['certificationRequestInfo']['subjectPKInfo']['subjectPublicKey']))
                );
        }

        $filters = [];
        $filters['certificationRequestInfo']['subject']['rdnSequence']['value']
            = ['type' => ASN1::TYPE_UTF8_STRING];

        ASN1::setFilters($filters);

        $this->mapOutDNs($csr, 'certificationRequestInfo/subject/rdnSequence');
        $this->mapOutAttributes($csr, 'certificationRequestInfo/attributes');
        $csr = ASN1::encodeDER($csr, Maps\CertificationRequest::MAP);

        switch ($format) {
            case self::FORMAT_DER:
                return $csr;
            // case self::FORMAT_PEM:
            default:
                return "-----BEGIN CERTIFICATE REQUEST-----\r\n" . chunk_split(Strings::base64_encode($csr), 64) . '-----END CERTIFICATE REQUEST-----';
        }
    }

    /**
     * Load a SPKAC CSR
     *
     * SPKAC's are produced by the HTML5 keygen element:
     *
     * https://developer.mozilla.org/en-US/docs/HTML/Element/keygen
     *
     * @param string $spkac
     * @return mixed
     */
    public function loadSPKAC($spkac)
    {
        if (is_array($spkac) && isset($spkac['publicKeyAndChallenge'])) {
            unset($this->currentCert);
            unset($this->currentKeyIdentifier);
            unset($this->signatureSubject);
            $this->currentCert = $spkac;
            return $spkac;
        }

        // see http://www.w3.org/html/wg/drafts/html/master/forms.html#signedpublickeyandchallenge

        // OpenSSL produces SPKAC's that are preceded by the string SPKAC=
        $temp = preg_replace('#(?:SPKAC=)|[ \r\n\\\]#', '', $spkac);
        $temp = preg_match('#^[a-zA-Z\d/+]*={0,2}$#', $temp) ? Strings::base64_decode($temp) : false;
        if ($temp != false) {
            $spkac = $temp;
        }
        $orig = $spkac;

        if ($spkac === false) {
            $this->currentCert = false;
            return false;
        }

        $decoded = ASN1::decodeBER($spkac);

        if (!$decoded) {
            $this->currentCert = false;
            return false;
        }

        $spkac = ASN1::asn1map($decoded[0], Maps\SignedPublicKeyAndChallenge::MAP);

        if (!isset($spkac) || !is_array($spkac)) {
            $this->currentCert = false;
            return false;
        }

        $this->signatureSubject = substr($orig, $decoded[0]['content'][0]['start'], $decoded[0]['content'][0]['length']);

        $key = $spkac['publicKeyAndChallenge']['spki'];
        $key = ASN1::encodeDER($key, Maps\SubjectPublicKeyInfo::MAP);
        $spkac['publicKeyAndChallenge']['spki']['subjectPublicKey'] =
            "-----BEGIN PUBLIC KEY-----\r\n" .
            chunk_split(base64_encode($key), 64) .
            "-----END PUBLIC KEY-----";

        $this->currentKeyIdentifier = null;
        $this->currentCert = $spkac;

        $this->publicKey = null;
        $this->publicKey = $this->getPublicKey();

        return $spkac;
    }

    /**
     * Save a SPKAC CSR request
     *
     * @param array $spkac
     * @param int $format optional
     * @return string
     */
    public function saveSPKAC(array $spkac, $format = self::FORMAT_PEM)
    {
        if (!is_array($spkac) || !isset($spkac['publicKeyAndChallenge'])) {
            return false;
        }

        $algorithm = $this->subArray($spkac, 'publicKeyAndChallenge/spki/algorithm/algorithm');
        switch (true) {
            case !$algorithm:
            case is_object($spkac['publicKeyAndChallenge']['spki']['subjectPublicKey']):
                break;
            default:
                $spkac['publicKeyAndChallenge']['spki'] = new Element(
                    base64_decode(preg_replace('#-.+-|[\r\n]#', '', $spkac['publicKeyAndChallenge']['spki']['subjectPublicKey']))
                );
        }

        $spkac = ASN1::encodeDER($spkac, Maps\SignedPublicKeyAndChallenge::MAP);

        switch ($format) {
            case self::FORMAT_DER:
                return $spkac;
            // case self::FORMAT_PEM:
            default:
                // OpenSSL's implementation of SPKAC requires the SPKAC be preceded by SPKAC= and since there are pretty much
                // no other SPKAC decoders phpseclib will use that same format
                return 'SPKAC=' . Strings::base64_encode($spkac);
        }
    }

    /**
     * Load a Certificate Revocation List
     *
     * @param string $crl
     * @param int $mode
     * @return mixed
     */
    public function loadCRL($crl, $mode = self::FORMAT_AUTO_DETECT)
    {
        if (is_array($crl) && isset($crl['tbsCertList'])) {
            $this->currentCert = $crl;
            unset($this->signatureSubject);
            return $crl;
        }

        if ($mode != self::FORMAT_DER) {
            $newcrl = ASN1::extractBER($crl);
            if ($mode == self::FORMAT_PEM && $crl == $newcrl) {
                return false;
            }
            $crl = $newcrl;
        }
        $orig = $crl;

        if ($crl === false) {
            $this->currentCert = false;
            return false;
        }

        $decoded = ASN1::decodeBER($crl);

        if (!$decoded) {
            $this->currentCert = false;
            return false;
        }

        $crl = ASN1::asn1map($decoded[0], Maps\CertificateList::MAP);
        if (!isset($crl) || $crl === false) {
            $this->currentCert = false;
            return false;
        }

        $this->signatureSubject = substr($orig, $decoded[0]['content'][0]['start'], $decoded[0]['content'][0]['length']);

        $this->mapInDNs($crl, 'tbsCertList/issuer/rdnSequence');
        if ($this->isSubArrayValid($crl, 'tbsCertList/crlExtensions')) {
            $this->mapInExtensions($crl, 'tbsCertList/crlExtensions');
        }
        if ($this->isSubArrayValid($crl, 'tbsCertList/revokedCertificates')) {
            $rclist_ref = &$this->subArrayUnchecked($crl, 'tbsCertList/revokedCertificates');
            if ($rclist_ref) {
                $rclist = $crl['tbsCertList']['revokedCertificates'];
                foreach ($rclist as $i => $extension) {
                    if ($this->isSubArrayValid($rclist, "$i/crlEntryExtensions")) {
                        $this->mapInExtensions($rclist_ref, "$i/crlEntryExtensions");
                    }
                }
            }
        }

        $this->currentKeyIdentifier = null;
        $this->currentCert = $crl;

        return $crl;
    }

    /**
     * Save Certificate Revocation List.
     *
     * @param array $crl
     * @param int $format optional
     * @return string
     */
    public function saveCRL(array $crl, $format = self::FORMAT_PEM)
    {
        if (!is_array($crl) || !isset($crl['tbsCertList'])) {
            return false;
        }

        $filters = [];
        $filters['tbsCertList']['issuer']['rdnSequence']['value']
            = ['type' => ASN1::TYPE_UTF8_STRING];
        $filters['tbsCertList']['signature']['parameters']
            = ['type' => ASN1::TYPE_UTF8_STRING];
        $filters['signatureAlgorithm']['parameters']
            = ['type' => ASN1::TYPE_UTF8_STRING];

        if (empty($crl['tbsCertList']['signature']['parameters'])) {
            $filters['tbsCertList']['signature']['parameters']
                = ['type' => ASN1::TYPE_NULL];
        }

        if (empty($crl['signatureAlgorithm']['parameters'])) {
            $filters['signatureAlgorithm']['parameters']
                = ['type' => ASN1::TYPE_NULL];
        }

        ASN1::setFilters($filters);

        $this->mapOutDNs($crl, 'tbsCertList/issuer/rdnSequence');
        $this->mapOutExtensions($crl, 'tbsCertList/crlExtensions');
        $rclist = &$this->subArray($crl, 'tbsCertList/revokedCertificates');
        if (is_array($rclist)) {
            foreach ($rclist as $i => $extension) {
                $this->mapOutExtensions($rclist, "$i/crlEntryExtensions");
            }
        }

        $crl = ASN1::encodeDER($crl, Maps\CertificateList::MAP);

        switch ($format) {
            case self::FORMAT_DER:
                return $crl;
            // case self::FORMAT_PEM:
            default:
                return "-----BEGIN X509 CRL-----\r\n" . chunk_split(Strings::base64_encode($crl), 64) . '-----END X509 CRL-----';
        }
    }

    /**
     * Helper function to build a time field according to RFC 3280 section
     *  - 4.1.2.5 Validity
     *  - 5.1.2.4 This Update
     *  - 5.1.2.5 Next Update
     *  - 5.1.2.6 Revoked Certificates
     * by choosing utcTime iff year of date given is before 2050 and generalTime else.
     *
     * @param string $date in format date('D, d M Y H:i:s O')
     * @return array|Element
     */
    private function timeField($date)
    {
        if ($date instanceof Element) {
            return $date;
        }
        $dateObj = new \DateTimeImmutable($date, new \DateTimeZone('GMT'));
        $year = $dateObj->format('Y'); // the same way ASN1.php parses this
        if ($year < 2050) {
            return ['utcTime' => $date];
        } else {
            return ['generalTime' => $date];
        }
    }

    /**
     * Sign an X.509 certificate
     *
     * $issuer's private key needs to be loaded.
     * $subject can be either an existing X.509 cert (if you want to resign it),
     * a CSR or something with the DN and public key explicitly set.
     *
     * @return mixed
     */
    public function sign(X509 $issuer, X509 $subject)
    {
        if (!is_object($issuer->privateKey) || empty($issuer->dn)) {
            return false;
        }

        if (isset($subject->publicKey) && !($subjectPublicKey = $subject->formatSubjectPublicKey())) {
            return false;
        }

        $currentCert = isset($this->currentCert) ? $this->currentCert : null;
        $signatureSubject = isset($this->signatureSubject) ? $this->signatureSubject : null;
        $signatureAlgorithm = self::identifySignatureAlgorithm($issuer->privateKey);

        if (isset($subject->currentCert) && is_array($subject->currentCert) && isset($subject->currentCert['tbsCertificate'])) {
            $this->currentCert = $subject->currentCert;
            $this->currentCert['tbsCertificate']['signature'] = $signatureAlgorithm;
            $this->currentCert['signatureAlgorithm'] = $signatureAlgorithm;

            if (!empty($this->startDate)) {
                $this->currentCert['tbsCertificate']['validity']['notBefore'] = $this->timeField($this->startDate);
            }
            if (!empty($this->endDate)) {
                $this->currentCert['tbsCertificate']['validity']['notAfter'] = $this->timeField($this->endDate);
            }
            if (!empty($this->serialNumber)) {
                $this->currentCert['tbsCertificate']['serialNumber'] = $this->serialNumber;
            }
            if (!empty($subject->dn)) {
                $this->currentCert['tbsCertificate']['subject'] = $subject->dn;
            }
            if (!empty($subject->publicKey)) {
                $this->currentCert['tbsCertificate']['subjectPublicKeyInfo'] = $subjectPublicKey;
            }
            $this->removeExtension('id-ce-authorityKeyIdentifier');
            if (isset($subject->domains)) {
                $this->removeExtension('id-ce-subjectAltName');
            }
        } elseif (isset($subject->currentCert) && is_array($subject->currentCert) && isset($subject->currentCert['tbsCertList'])) {
            return false;
        } else {
            if (!isset($subject->publicKey)) {
                return false;
            }

            $startDate = new \DateTimeImmutable('now', new \DateTimeZone(@date_default_timezone_get()));
            $startDate = !empty($this->startDate) ? $this->startDate : $startDate->format('D, d M Y H:i:s O');

            $endDate = new \DateTimeImmutable('+1 year', new \DateTimeZone(@date_default_timezone_get()));
            $endDate = !empty($this->endDate) ? $this->endDate : $endDate->format('D, d M Y H:i:s O');

            /* "The serial number MUST be a positive integer"
               "Conforming CAs MUST NOT use serialNumber values longer than 20 octets."
                -- https://tools.ietf.org/html/rfc5280#section-4.1.2.2

               for the integer to be positive the leading bit needs to be 0 hence the
               application of a bitmap
            */
            $serialNumber = !empty($this->serialNumber) ?
                $this->serialNumber :
                new BigInteger(Random::string(20) & ("\x7F" . str_repeat("\xFF", 19)), 256);

            $this->currentCert = [
                'tbsCertificate' =>
                    [
                        'version' => 'v3',
                        'serialNumber' => $serialNumber, // $this->setSerialNumber()
                        'signature' => $signatureAlgorithm,
                        'issuer' => false, // this is going to be overwritten later
                        'validity' => [
                            'notBefore' => $this->timeField($startDate), // $this->setStartDate()
                            'notAfter' => $this->timeField($endDate)   // $this->setEndDate()
                        ],
                        'subject' => $subject->dn,
                        'subjectPublicKeyInfo' => $subjectPublicKey
                    ],
                    'signatureAlgorithm' => $signatureAlgorithm,
                    'signature'          => false // this is going to be overwritten later
            ];

            // Copy extensions from CSR.
            $csrexts = $subject->getAttribute('pkcs-9-at-extensionRequest', 0);

            if (!empty($csrexts)) {
                $this->currentCert['tbsCertificate']['extensions'] = $csrexts;
            }
        }

        $this->currentCert['tbsCertificate']['issuer'] = $issuer->dn;

        if (isset($issuer->currentKeyIdentifier)) {
            $this->setExtension('id-ce-authorityKeyIdentifier', [
                    //'authorityCertIssuer' => array(
                    //    array(
                    //        'directoryName' => $issuer->dn
                    //    )
                    //),
                    'keyIdentifier' => $issuer->currentKeyIdentifier
                ]);
            //$extensions = &$this->currentCert['tbsCertificate']['extensions'];
            //if (isset($issuer->serialNumber)) {
            //    $extensions[count($extensions) - 1]['authorityCertSerialNumber'] = $issuer->serialNumber;
            //}
            //unset($extensions);
        }

        if (isset($subject->currentKeyIdentifier)) {
            $this->setExtension('id-ce-subjectKeyIdentifier', $subject->currentKeyIdentifier);
        }

        $altName = [];

        if (isset($subject->domains) && count($subject->domains)) {
            $altName = array_map(['\phpseclib3\File\X509', 'dnsName'], $subject->domains);
        }

        if (isset($subject->ipAddresses) && count($subject->ipAddresses)) {
            // should an IP address appear as the CN if no domain name is specified? idk
            //$ips = count($subject->domains) ? $subject->ipAddresses : array_slice($subject->ipAddresses, 1);
            $ipAddresses = [];
            foreach ($subject->ipAddresses as $ipAddress) {
                $encoded = $subject->ipAddress($ipAddress);
                if ($encoded !== false) {
                    $ipAddresses[] = $encoded;
                }
            }
            if (count($ipAddresses)) {
                $altName = array_merge($altName, $ipAddresses);
            }
        }

        if (!empty($altName)) {
            $this->setExtension('id-ce-subjectAltName', $altName);
        }

        if ($this->caFlag) {
            $keyUsage = $this->getExtension('id-ce-keyUsage');
            if (!$keyUsage) {
                $keyUsage = [];
            }

            $this->setExtension(
                'id-ce-keyUsage',
                array_values(array_unique(array_merge($keyUsage, ['cRLSign', 'keyCertSign'])))
            );

            $basicConstraints = $this->getExtension('id-ce-basicConstraints');
            if (!$basicConstraints) {
                $basicConstraints = [];
            }

            $this->setExtension(
                'id-ce-basicConstraints',
                array_merge(['cA' => true], $basicConstraints),
                true
            );

            if (!isset($subject->currentKeyIdentifier)) {
                $this->setExtension('id-ce-subjectKeyIdentifier', $this->computeKeyIdentifier($this->currentCert), false, false);
            }
        }

        // resync $this->signatureSubject
        // save $tbsCertificate in case there are any \phpseclib3\File\ASN1\Element objects in it
        $tbsCertificate = $this->currentCert['tbsCertificate'];
        $this->loadX509($this->saveX509($this->currentCert));

        $result = $this->currentCert;
        $this->currentCert['signature'] = $result['signature'] = "\0" . $issuer->privateKey->sign($this->signatureSubject);
        $result['tbsCertificate'] = $tbsCertificate;

        $this->currentCert = $currentCert;
        $this->signatureSubject = $signatureSubject;

        return $result;
    }

    /**
     * Sign a CSR
     *
     * @return mixed
     */
    public function signCSR()
    {
        if (!is_object($this->privateKey) || empty($this->dn)) {
            return false;
        }

        $origPublicKey = $this->publicKey;
        $this->publicKey = $this->privateKey->getPublicKey();
        $publicKey = $this->formatSubjectPublicKey();
        $this->publicKey = $origPublicKey;

        $currentCert = isset($this->currentCert) ? $this->currentCert : null;
        $signatureSubject = isset($this->signatureSubject) ? $this->signatureSubject : null;
        $signatureAlgorithm = self::identifySignatureAlgorithm($this->privateKey);

        if (isset($this->currentCert) && is_array($this->currentCert) && isset($this->currentCert['certificationRequestInfo'])) {
            $this->currentCert['signatureAlgorithm'] = $signatureAlgorithm;
            if (!empty($this->dn)) {
                $this->currentCert['certificationRequestInfo']['subject'] = $this->dn;
            }
            $this->currentCert['certificationRequestInfo']['subjectPKInfo'] = $publicKey;
        } else {
            $this->currentCert = [
                'certificationRequestInfo' =>
                    [
                        'version' => 'v1',
                        'subject' => $this->dn,
                        'subjectPKInfo' => $publicKey,
                        'attributes' => []
                    ],
                    'signatureAlgorithm' => $signatureAlgorithm,
                    'signature'          => false // this is going to be overwritten later
            ];
        }

        // resync $this->signatureSubject
        // save $certificationRequestInfo in case there are any \phpseclib3\File\ASN1\Element objects in it
        $certificationRequestInfo = $this->currentCert['certificationRequestInfo'];
        $this->loadCSR($this->saveCSR($this->currentCert));

        $result = $this->currentCert;
        $this->currentCert['signature'] = $result['signature'] = "\0" . $this->privateKey->sign($this->signatureSubject);
        $result['certificationRequestInfo'] = $certificationRequestInfo;

        $this->currentCert = $currentCert;
        $this->signatureSubject = $signatureSubject;

        return $result;
    }

    /**
     * Sign a SPKAC
     *
     * @return mixed
     */
    public function signSPKAC()
    {
        if (!is_object($this->privateKey)) {
            return false;
        }

        $origPublicKey = $this->publicKey;
        $this->publicKey = $this->privateKey->getPublicKey();
        $publicKey = $this->formatSubjectPublicKey();
        $this->publicKey = $origPublicKey;

        $currentCert = isset($this->currentCert) ? $this->currentCert : null;
        $signatureSubject = isset($this->signatureSubject) ? $this->signatureSubject : null;
        $signatureAlgorithm = self::identifySignatureAlgorithm($this->privateKey);

        // re-signing a SPKAC seems silly but since everything else supports re-signing why not?
        if (isset($this->currentCert) && is_array($this->currentCert) && isset($this->currentCert['publicKeyAndChallenge'])) {
            $this->currentCert['signatureAlgorithm'] = $signatureAlgorithm;
            $this->currentCert['publicKeyAndChallenge']['spki'] = $publicKey;
            if (!empty($this->challenge)) {
                // the bitwise AND ensures that the output is a valid IA5String
                $this->currentCert['publicKeyAndChallenge']['challenge'] = $this->challenge & str_repeat("\x7F", strlen($this->challenge));
            }
        } else {
            $this->currentCert = [
                'publicKeyAndChallenge' =>
                    [
                        'spki' => $publicKey,
                        // quoting <https://developer.mozilla.org/en-US/docs/Web/HTML/Element/keygen>,
                        // "A challenge string that is submitted along with the public key. Defaults to an empty string if not specified."
                        // both Firefox and OpenSSL ("openssl spkac -key private.key") behave this way
                        // we could alternatively do this instead if we ignored the specs:
                        // Random::string(8) & str_repeat("\x7F", 8)
                        'challenge' => !empty($this->challenge) ? $this->challenge : ''
                    ],
                    'signatureAlgorithm' => $signatureAlgorithm,
                    'signature'          => false // this is going to be overwritten later
            ];
        }

        // resync $this->signatureSubject
        // save $publicKeyAndChallenge in case there are any \phpseclib3\File\ASN1\Element objects in it
        $publicKeyAndChallenge = $this->currentCert['publicKeyAndChallenge'];
        $this->loadSPKAC($this->saveSPKAC($this->currentCert));

        $result = $this->currentCert;
        $this->currentCert['signature'] = $result['signature'] = "\0" . $this->privateKey->sign($this->signatureSubject);
        $result['publicKeyAndChallenge'] = $publicKeyAndChallenge;

        $this->currentCert = $currentCert;
        $this->signatureSubject = $signatureSubject;

        return $result;
    }

    /**
     * Sign a CRL
     *
     * $issuer's private key needs to be loaded.
     *
     * @return mixed
     */
    public function signCRL(X509 $issuer, X509 $crl)
    {
        if (!is_object($issuer->privateKey) || empty($issuer->dn)) {
            return false;
        }

        $currentCert = isset($this->currentCert) ? $this->currentCert : null;
        $signatureSubject = isset($this->signatureSubject) ? $this->signatureSubject : null;
        $signatureAlgorithm = self::identifySignatureAlgorithm($issuer->privateKey);

        $thisUpdate = new \DateTimeImmutable('now', new \DateTimeZone(@date_default_timezone_get()));
        $thisUpdate = !empty($this->startDate) ? $this->startDate : $thisUpdate->format('D, d M Y H:i:s O');

        if (isset($crl->currentCert) && is_array($crl->currentCert) && isset($crl->currentCert['tbsCertList'])) {
            $this->currentCert = $crl->currentCert;
            $this->currentCert['tbsCertList']['signature'] = $signatureAlgorithm;
            $this->currentCert['signatureAlgorithm'] = $signatureAlgorithm;
        } else {
            $this->currentCert = [
                'tbsCertList' =>
                    [
                        'version' => 'v2',
                        'signature' => $signatureAlgorithm,
                        'issuer' => false, // this is going to be overwritten later
                        'thisUpdate' => $this->timeField($thisUpdate) // $this->setStartDate()
                    ],
                    'signatureAlgorithm' => $signatureAlgorithm,
                    'signature'          => false // this is going to be overwritten later
            ];
        }

        $tbsCertList = &$this->currentCert['tbsCertList'];
        $tbsCertList['issuer'] = $issuer->dn;
        $tbsCertList['thisUpdate'] = $this->timeField($thisUpdate);

        if (!empty($this->endDate)) {
            $tbsCertList['nextUpdate'] = $this->timeField($this->endDate); // $this->setEndDate()
        } else {
            unset($tbsCertList['nextUpdate']);
        }

        if (!empty($this->serialNumber)) {
            $crlNumber = $this->serialNumber;
        } else {
            $crlNumber = $this->getExtension('id-ce-cRLNumber');
            // "The CRL number is a non-critical CRL extension that conveys a
            //  monotonically increasing sequence number for a given CRL scope and
            //  CRL issuer.  This extension allows users to easily determine when a
            //  particular CRL supersedes another CRL."
            // -- https://tools.ietf.org/html/rfc5280#section-5.2.3
            $crlNumber = $crlNumber !== false ? $crlNumber->add(new BigInteger(1)) : null;
        }

        $this->removeExtension('id-ce-authorityKeyIdentifier');
        $this->removeExtension('id-ce-issuerAltName');

        // Be sure version >= v2 if some extension found.
        $version = isset($tbsCertList['version']) ? $tbsCertList['version'] : 0;
        if (!$version) {
            if (!empty($tbsCertList['crlExtensions'])) {
                $version = 'v2'; // v2.
            } elseif (!empty($tbsCertList['revokedCertificates'])) {
                foreach ($tbsCertList['revokedCertificates'] as $cert) {
                    if (!empty($cert['crlEntryExtensions'])) {
                        $version = 'v2'; // v2.
                    }
                }
            }

            if ($version) {
                $tbsCertList['version'] = $version;
            }
        }

        // Store additional extensions.
        if (!empty($tbsCertList['version'])) { // At least v2.
            if (!empty($crlNumber)) {
                $this->setExtension('id-ce-cRLNumber', $crlNumber);
            }

            if (isset($issuer->currentKeyIdentifier)) {
                $this->setExtension('id-ce-authorityKeyIdentifier', [
                        //'authorityCertIssuer' => array(
                        //    ]
                        //        'directoryName' => $issuer->dn
                        //    ]
                        //),
                        'keyIdentifier' => $issuer->currentKeyIdentifier
                    ]);
                //$extensions = &$tbsCertList['crlExtensions'];
                //if (isset($issuer->serialNumber)) {
                //    $extensions[count($extensions) - 1]['authorityCertSerialNumber'] = $issuer->serialNumber;
                //}
                //unset($extensions);
            }

            $issuerAltName = $this->getExtension('id-ce-subjectAltName', $issuer->currentCert);

            if ($issuerAltName !== false) {
                $this->setExtension('id-ce-issuerAltName', $issuerAltName);
            }
        }

        if (empty($tbsCertList['revokedCertificates'])) {
            unset($tbsCertList['revokedCertificates']);
        }

        unset($tbsCertList);

        // resync $this->signatureSubject
        // save $tbsCertList in case there are any \phpseclib3\File\ASN1\Element objects in it
        $tbsCertList = $this->currentCert['tbsCertList'];
        $this->loadCRL($this->saveCRL($this->currentCert));

        $result = $this->currentCert;
        $this->currentCert['signature'] = $result['signature'] = "\0" . $issuer->privateKey->sign($this->signatureSubject);
        $result['tbsCertList'] = $tbsCertList;

        $this->currentCert = $currentCert;
        $this->signatureSubject = $signatureSubject;

        return $result;
    }

    /**
     * Identify signature algorithm from key settings
     *
     * @param PrivateKey $key
     * @throws UnsupportedAlgorithmException if the algorithm is unsupported
     * @return array
     */
    private static function identifySignatureAlgorithm(PrivateKey $key)
    {
        if ($key instanceof RSA) {
            if ($key->getPadding() & RSA::SIGNATURE_PSS) {
                $r = PSS::load($key->withPassword()->toString('PSS'));
                return [
                    'algorithm' => 'id-RSASSA-PSS',
                    'parameters' => PSS::savePSSParams($r)
                ];
            }
            switch ($key->getHash()) {
                case 'md2':
                case 'md5':
                case 'sha1':
                case 'sha224':
                case 'sha256':
                case 'sha384':
                case 'sha512':
                    return [
                        'algorithm' => $key->getHash() . 'WithRSAEncryption',
                        'parameters' => null
                    ];
            }
            throw new UnsupportedAlgorithmException('The only supported hash algorithms for RSA are: md2, md5, sha1, sha224, sha256, sha384, sha512');
        }

        if ($key instanceof DSA) {
            switch ($key->getHash()) {
                case 'sha1':
                case 'sha224':
                case 'sha256':
                    return ['algorithm' => 'id-dsa-with-' . $key->getHash()];
            }
            throw new UnsupportedAlgorithmException('The only supported hash algorithms for DSA are: sha1, sha224, sha256');
        }

        if ($key instanceof EC) {
            switch ($key->getCurve()) {
                case 'Ed25519':
                case 'Ed448':
                    return ['algorithm' => 'id-' . $key->getCurve()];
            }
            switch ($key->getHash()) {
                case 'sha1':
                case 'sha224':
                case 'sha256':
                case 'sha384':
                case 'sha512':
                    return ['algorithm' => 'ecdsa-with-' . strtoupper($key->getHash())];
            }
            throw new UnsupportedAlgorithmException('The only supported hash algorithms for EC are: sha1, sha224, sha256, sha384, sha512');
        }

        throw new UnsupportedAlgorithmException('The only supported public key classes are: RSA, DSA, EC');
    }

    /**
     * Set certificate start date
     *
     * @param \DateTimeInterface|string $date
     */
    public function setStartDate($date)
    {
        if (!is_object($date) || !($date instanceof \DateTimeInterface)) {
            $date = new \DateTimeImmutable($date, new \DateTimeZone(@date_default_timezone_get()));
        }

        $this->startDate = $date->format('D, d M Y H:i:s O');
    }

    /**
     * Set certificate end date
     *
     * @param \DateTimeInterface|string $date
     */
    public function setEndDate($date)
    {
        /*
          To indicate that a certificate has no well-defined expiration date,
          the notAfter SHOULD be assigned the GeneralizedTime value of
          99991231235959Z.

          -- http://tools.ietf.org/html/rfc5280#section-4.1.2.5
        */
        if (is_string($date) && strtolower($date) === 'lifetime') {
            $temp = '99991231235959Z';
            $temp = chr(ASN1::TYPE_GENERALIZED_TIME) . ASN1::encodeLength(strlen($temp)) . $temp;
            $this->endDate = new Element($temp);
        } else {
            if (!is_object($date) || !($date instanceof \DateTimeInterface)) {
                $date = new \DateTimeImmutable($date, new \DateTimeZone(@date_default_timezone_get()));
            }

            $this->endDate = $date->format('D, d M Y H:i:s O');
        }
    }

    /**
     * Set Serial Number
     *
     * @param string $serial
     * @param int $base optional
     */
    public function setSerialNumber($serial, $base = -256)
    {
        $this->serialNumber = new BigInteger($serial, $base);
    }

    /**
     * Turns the certificate into a certificate authority
     *
     */
    public function makeCA()
    {
        $this->caFlag = true;
    }

    /**
     * Check for validity of subarray
     *
     * This is intended for use in conjunction with _subArrayUnchecked(),
     * implementing the checks included in _subArray() but without copying
     * a potentially large array by passing its reference by-value to is_array().
     *
     * @param array $root
     * @param string $path
     * @return boolean
     */
    private function isSubArrayValid(array $root, $path)
    {
        if (!is_array($root)) {
            return false;
        }

        foreach (explode('/', $path) as $i) {
            if (!is_array($root)) {
                return false;
            }

            if (!isset($root[$i])) {
                return true;
            }

            $root = $root[$i];
        }

        return true;
    }

    /**
     * Get a reference to a subarray
     *
     * This variant of _subArray() does no is_array() checking,
     * so $root should be checked with _isSubArrayValid() first.
     *
     * This is here for performance reasons:
     * Passing a reference (i.e. $root) by-value (i.e. to is_array())
     * creates a copy. If $root is an especially large array, this is expensive.
     *
     * @param array $root
     * @param string $path  absolute path with / as component separator
     * @param bool $create optional
     * @return array|false
     */
    private function &subArrayUnchecked(array &$root, $path, $create = false)
    {
        $false = false;

        foreach (explode('/', $path) as $i) {
            if (!isset($root[$i])) {
                if (!$create) {
                    return $false;
                }

                $root[$i] = [];
            }

            $root = &$root[$i];
        }

        return $root;
    }

    /**
     * Get a reference to a subarray
     *
     * @param array $root
     * @param string $path  absolute path with / as component separator
     * @param bool $create optional
     * @return array|false
     */
    private function &subArray(&$root, $path, $create = false)
    {
        $false = false;

        if (!is_array($root)) {
            return $false;
        }

        foreach (explode('/', $path) as $i) {
            if (!is_array($root)) {
                return $false;
            }

            if (!isset($root[$i])) {
                if (!$create) {
                    return $false;
                }

                $root[$i] = [];
            }

            $root = &$root[$i];
        }

        return $root;
    }

    /**
     * Get a reference to an extension subarray
     *
     * @param array $root
     * @param string $path optional absolute path with / as component separator
     * @param bool $create optional
     * @return array|false
     */
    private function &extensions(&$root, $path = null, $create = false)
    {
        if (!isset($root)) {
            $root = $this->currentCert;
        }

        switch (true) {
            case !empty($path):
            case !is_array($root):
                break;
            case isset($root['tbsCertificate']):
                $path = 'tbsCertificate/extensions';
                break;
            case isset($root['tbsCertList']):
                $path = 'tbsCertList/crlExtensions';
                break;
            case isset($root['certificationRequestInfo']):
                $pth = 'certificationRequestInfo/attributes';
                $attributes = &$this->subArray($root, $pth, $create);

                if (is_array($attributes)) {
                    foreach ($attributes as $key => $value) {
                        if ($value['type'] == 'pkcs-9-at-extensionRequest') {
                            $path = "$pth/$key/value/0";
                            break 2;
                        }
                    }
                    if ($create) {
                        $key = count($attributes);
                        $attributes[] = ['type' => 'pkcs-9-at-extensionRequest', 'value' => []];
                        $path = "$pth/$key/value/0";
                    }
                }
                break;
        }

        $extensions = &$this->subArray($root, $path, $create);

        if (!is_array($extensions)) {
            $false = false;
            return $false;
        }

        return $extensions;
    }

    /**
     * Remove an Extension
     *
     * @param string $id
     * @param string $path optional
     * @return bool
     */
    private function removeExtensionHelper($id, $path = null)
    {
        $extensions = &$this->extensions($this->currentCert, $path);

        if (!is_array($extensions)) {
            return false;
        }

        $result = false;
        foreach ($extensions as $key => $value) {
            if ($value['extnId'] == $id) {
                unset($extensions[$key]);
                $result = true;
            }
        }

        $extensions = array_values($extensions);
        // fix for https://bugs.php.net/75433 affecting PHP 7.2
        if (!isset($extensions[0])) {
            $extensions = array_splice($extensions, 0, 0);
        }
        return $result;
    }

    /**
     * Get an Extension
     *
     * Returns the extension if it exists and false if not
     *
     * @param string $id
     * @param array $cert optional
     * @param string $path optional
     * @return mixed
     */
    private function getExtensionHelper($id, $cert = null, $path = null)
    {
        $extensions = $this->extensions($cert, $path);

        if (!is_array($extensions)) {
            return false;
        }

        foreach ($extensions as $key => $value) {
            if ($value['extnId'] == $id) {
                return $value['extnValue'];
            }
        }

        return false;
    }

    /**
     * Returns a list of all extensions in use
     *
     * @param array $cert optional
     * @param string $path optional
     * @return array
     */
    private function getExtensionsHelper($cert = null, $path = null)
    {
        $exts = $this->extensions($cert, $path);
        $extensions = [];

        if (is_array($exts)) {
            foreach ($exts as $extension) {
                $extensions[] = $extension['extnId'];
            }
        }

        return $extensions;
    }

    /**
     * Set an Extension
     *
     * @param string $id
     * @param mixed $value
     * @param bool $critical optional
     * @param bool $replace optional
     * @param string $path optional
     * @return bool
     */
    private function setExtensionHelper($id, $value, $critical = false, $replace = true, $path = null)
    {
        $extensions = &$this->extensions($this->currentCert, $path, true);

        if (!is_array($extensions)) {
            return false;
        }

        $newext = ['extnId'  => $id, 'critical' => $critical, 'extnValue' => $value];

        foreach ($extensions as $key => $value) {
            if ($value['extnId'] == $id) {
                if (!$replace) {
                    return false;
                }

                $extensions[$key] = $newext;
                return true;
            }
        }

        $extensions[] = $newext;
        return true;
    }

    /**
     * Remove a certificate, CSR or CRL Extension
     *
     * @param string $id
     * @return bool
     */
    public function removeExtension($id)
    {
        return $this->removeExtensionHelper($id);
    }

    /**
     * Get a certificate, CSR or CRL Extension
     *
     * Returns the extension if it exists and false if not
     *
     * @param string $id
     * @param array $cert optional
     * @param string $path
     * @return mixed
     */
    public function getExtension($id, $cert = null, $path = null)
    {
        return $this->getExtensionHelper($id, $cert, $path);
    }

    /**
     * Returns a list of all extensions in use in certificate, CSR or CRL
     *
     * @param array $cert optional
     * @param string $path optional
     * @return array
     */
    public function getExtensions($cert = null, $path = null)
    {
        return $this->getExtensionsHelper($cert, $path);
    }

    /**
     * Set a certificate, CSR or CRL Extension
     *
     * @param string $id
     * @param mixed $value
     * @param bool $critical optional
     * @param bool $replace optional
     * @return bool
     */
    public function setExtension($id, $value, $critical = false, $replace = true)
    {
        return $this->setExtensionHelper($id, $value, $critical, $replace);
    }

    /**
     * Remove a CSR attribute.
     *
     * @param string $id
     * @param int $disposition optional
     * @return bool
     */
    public function removeAttribute($id, $disposition = self::ATTR_ALL)
    {
        $attributes = &$this->subArray($this->currentCert, 'certificationRequestInfo/attributes');

        if (!is_array($attributes)) {
            return false;
        }

        $result = false;
        foreach ($attributes as $key => $attribute) {
            if ($attribute['type'] == $id) {
                $n = count($attribute['value']);
                switch (true) {
                    case $disposition == self::ATTR_APPEND:
                    case $disposition == self::ATTR_REPLACE:
                        return false;
                    case $disposition >= $n:
                        $disposition -= $n;
                        break;
                    case $disposition == self::ATTR_ALL:
                    case $n == 1:
                        unset($attributes[$key]);
                        $result = true;
                        break;
                    default:
                        unset($attributes[$key]['value'][$disposition]);
                        $attributes[$key]['value'] = array_values($attributes[$key]['value']);
                        $result = true;
                        break;
                }
                if ($result && $disposition != self::ATTR_ALL) {
                    break;
                }
            }
        }

        $attributes = array_values($attributes);
        return $result;
    }

    /**
     * Get a CSR attribute
     *
     * Returns the attribute if it exists and false if not
     *
     * @param string $id
     * @param int $disposition optional
     * @param array $csr optional
     * @return mixed
     */
    public function getAttribute($id, $disposition = self::ATTR_ALL, $csr = null)
    {
        if (empty($csr)) {
            $csr = $this->currentCert;
        }

        $attributes = $this->subArray($csr, 'certificationRequestInfo/attributes');

        if (!is_array($attributes)) {
            return false;
        }

        foreach ($attributes as $key => $attribute) {
            if ($attribute['type'] == $id) {
                $n = count($attribute['value']);
                switch (true) {
                    case $disposition == self::ATTR_APPEND:
                    case $disposition == self::ATTR_REPLACE:
                        return false;
                    case $disposition == self::ATTR_ALL:
                        return $attribute['value'];
                    case $disposition >= $n:
                        $disposition -= $n;
                        break;
                    default:
                        return $attribute['value'][$disposition];
                }
            }
        }

        return false;
    }

    /**
     * Get all requested CSR extensions
     *
     * Returns the list of extensions if there are any and false if not
     *
     * @param array $csr optional
     * @return mixed
     */
    public function getRequestedCertificateExtensions($csr = null)
    {
        if (empty($csr)) {
            $csr = $this->currentCert;
        }

        $requestedExtensions = $this->getAttribute('pkcs-9-at-extensionRequest');
        if ($requestedExtensions === false) {
            return false;
        }

        return $this->getAttribute('pkcs-9-at-extensionRequest')[0];
    }

    /**
     * Returns a list of all CSR attributes in use
     *
     * @param array $csr optional
     * @return array
     */
    public function getAttributes($csr = null)
    {
        if (empty($csr)) {
            $csr = $this->currentCert;
        }

        $attributes = $this->subArray($csr, 'certificationRequestInfo/attributes');
        $attrs = [];

        if (is_array($attributes)) {
            foreach ($attributes as $attribute) {
                $attrs[] = $attribute['type'];
            }
        }

        return $attrs;
    }

    /**
     * Set a CSR attribute
     *
     * @param string $id
     * @param mixed $value
     * @param int $disposition optional
     * @return bool
     */
    public function setAttribute($id, $value, $disposition = self::ATTR_ALL)
    {
        $attributes = &$this->subArray($this->currentCert, 'certificationRequestInfo/attributes', true);

        if (!is_array($attributes)) {
            return false;
        }

        switch ($disposition) {
            case self::ATTR_REPLACE:
                $disposition = self::ATTR_APPEND;
                // fall-through
            case self::ATTR_ALL:
                $this->removeAttribute($id);
                break;
        }

        foreach ($attributes as $key => $attribute) {
            if ($attribute['type'] == $id) {
                $n = count($attribute['value']);
                switch (true) {
                    case $disposition == self::ATTR_APPEND:
                        $last = $key;
                        break;
                    case $disposition >= $n:
                        $disposition -= $n;
                        break;
                    default:
                        $attributes[$key]['value'][$disposition] = $value;
                        return true;
                }
            }
        }

        switch (true) {
            case $disposition >= 0:
                return false;
            case isset($last):
                $attributes[$last]['value'][] = $value;
                break;
            default:
                $attributes[] = ['type' => $id, 'value' => $disposition == self::ATTR_ALL ? $value : [$value]];
                break;
        }

        return true;
    }

    /**
     * Sets the subject key identifier
     *
     * This is used by the id-ce-authorityKeyIdentifier and the id-ce-subjectKeyIdentifier extensions.
     *
     * @param string $value
     */
    public function setKeyIdentifier($value)
    {
        if (empty($value)) {
            unset($this->currentKeyIdentifier);
        } else {
            $this->currentKeyIdentifier = $value;
        }
    }

    /**
     * Compute a public key identifier.
     *
     * Although key identifiers may be set to any unique value, this function
     * computes key identifiers from public key according to the two
     * recommended methods (4.2.1.2 RFC 3280).
     * Highly polymorphic: try to accept all possible forms of key:
     * - Key object
     * - \phpseclib3\File\X509 object with public or private key defined
     * - Certificate or CSR array
     * - \phpseclib3\File\ASN1\Element object
     * - PEM or DER string
     *
     * @param mixed $key optional
     * @param int $method optional
     * @return string binary key identifier
     */
    public function computeKeyIdentifier($key = null, $method = 1)
    {
        if (is_null($key)) {
            $key = $this;
        }

        switch (true) {
            case is_string($key):
                break;
            case is_array($key) && isset($key['tbsCertificate']['subjectPublicKeyInfo']['subjectPublicKey']):
                return $this->computeKeyIdentifier($key['tbsCertificate']['subjectPublicKeyInfo']['subjectPublicKey'], $method);
            case is_array($key) && isset($key['certificationRequestInfo']['subjectPKInfo']['subjectPublicKey']):
                return $this->computeKeyIdentifier($key['certificationRequestInfo']['subjectPKInfo']['subjectPublicKey'], $method);
            case !is_object($key):
                return false;
            case $key instanceof Element:
                // Assume the element is a bitstring-packed key.
                $decoded = ASN1::decodeBER($key->element);
                if (!$decoded) {
                    return false;
                }
                $raw = ASN1::asn1map($decoded[0], ['type' => ASN1::TYPE_BIT_STRING]);
                if (empty($raw)) {
                    return false;
                }
                // If the key is private, compute identifier from its corresponding public key.
                $key = PublicKeyLoader::load($raw);
                if ($key instanceof PrivateKey) {  // If private.
                    return $this->computeKeyIdentifier($key, $method);
                }
                $key = $raw; // Is a public key.
                break;
            case $key instanceof X509:
                if (isset($key->publicKey)) {
                    return $this->computeKeyIdentifier($key->publicKey, $method);
                }
                if (isset($key->privateKey)) {
                    return $this->computeKeyIdentifier($key->privateKey, $method);
                }
                if (isset($key->currentCert['tbsCertificate']) || isset($key->currentCert['certificationRequestInfo'])) {
                    return $this->computeKeyIdentifier($key->currentCert, $method);
                }
                return false;
            default: // Should be a key object (i.e.: \phpseclib3\Crypt\RSA).
                $key = $key->getPublicKey();
                break;
        }

        // If in PEM format, convert to binary.
        $key = ASN1::extractBER($key);

        // Now we have the key string: compute its sha-1 sum.
        $hash = new Hash('sha1');
        $hash = $hash->hash($key);

        if ($method == 2) {
            $hash = substr($hash, -8);
            $hash[0] = chr((ord($hash[0]) & 0x0F) | 0x40);
        }

        return $hash;
    }

    /**
     * Format a public key as appropriate
     *
     * @return array|false
     */
    private function formatSubjectPublicKey()
    {
        $format = $this->publicKey instanceof RSA && ($this->publicKey->getPadding() & RSA::SIGNATURE_PSS) ?
            'PSS' :
            'PKCS8';

        $publicKey = base64_decode(preg_replace('#-.+-|[\r\n]#', '', $this->publicKey->toString($format)));

        $decoded = ASN1::decodeBER($publicKey);
        if (!$decoded) {
            return false;
        }
        $mapped = ASN1::asn1map($decoded[0], Maps\SubjectPublicKeyInfo::MAP);
        if (!is_array($mapped)) {
            return false;
        }

        $mapped['subjectPublicKey'] = $this->publicKey->toString($format);

        return $mapped;
    }

    /**
     * Set the domain name's which the cert is to be valid for
     *
     * @param mixed ...$domains
     * @return void
     */
    public function setDomain(...$domains)
    {
        $this->domains = $domains;
        $this->removeDNProp('id-at-commonName');
        $this->setDNProp('id-at-commonName', $this->domains[0]);
    }

    /**
     * Set the IP Addresses's which the cert is to be valid for
     *
     * @param mixed[] ...$ipAddresses
     */
    public function setIPAddress(...$ipAddresses)
    {
        $this->ipAddresses = $ipAddresses;
        /*
        if (!isset($this->domains)) {
            $this->removeDNProp('id-at-commonName');
            $this->setDNProp('id-at-commonName', $this->ipAddresses[0]);
        }
        */
    }

    /**
     * Helper function to build domain array
     *
     * @param string $domain
     * @return array
     */
    private static function dnsName($domain)
    {
        return ['dNSName' => $domain];
    }

    /**
     * Helper function to build IP Address array
     *
     * (IPv6 is not currently supported)
     *
     * @param string $address
     * @return array
     */
    private function iPAddress($address)
    {
        return ['iPAddress' => $address];
    }

    /**
     * Get the index of a revoked certificate.
     *
     * @param array $rclist
     * @param string $serial
     * @param bool $create optional
     * @return int|false
     */
    private function revokedCertificate(array &$rclist, $serial, $create = false)
    {
        $serial = new BigInteger($serial);

        foreach ($rclist as $i => $rc) {
            if (!($serial->compare($rc['userCertificate']))) {
                return $i;
            }
        }

        if (!$create) {
            return false;
        }

        $i = count($rclist);
        $revocationDate = new \DateTimeImmutable('now', new \DateTimeZone(@date_default_timezone_get()));
        $rclist[] = ['userCertificate' => $serial,
                          'revocationDate'  => $this->timeField($revocationDate->format('D, d M Y H:i:s O'))];
        return $i;
    }

    /**
     * Revoke a certificate.
     *
     * @param string $serial
     * @param string $date optional
     * @return bool
     */
    public function revoke($serial, $date = null)
    {
        if (isset($this->currentCert['tbsCertList'])) {
            if (is_array($rclist = &$this->subArray($this->currentCert, 'tbsCertList/revokedCertificates', true))) {
                if ($this->revokedCertificate($rclist, $serial) === false) { // If not yet revoked
                    if (($i = $this->revokedCertificate($rclist, $serial, true)) !== false) {
                        if (!empty($date)) {
                            $rclist[$i]['revocationDate'] = $this->timeField($date);
                        }

                        return true;
                    }
                }
            }
        }

        return false;
    }

    /**
     * Unrevoke a certificate.
     *
     * @param string $serial
     * @return bool
     */
    public function unrevoke($serial)
    {
        if (is_array($rclist = &$this->subArray($this->currentCert, 'tbsCertList/revokedCertificates'))) {
            if (($i = $this->revokedCertificate($rclist, $serial)) !== false) {
                unset($rclist[$i]);
                $rclist = array_values($rclist);
                return true;
            }
        }

        return false;
    }

    /**
     * Get a revoked certificate.
     *
     * @param string $serial
     * @return mixed
     */
    public function getRevoked($serial)
    {
        if (is_array($rclist = $this->subArray($this->currentCert, 'tbsCertList/revokedCertificates'))) {
            if (($i = $this->revokedCertificate($rclist, $serial)) !== false) {
                return $rclist[$i];
            }
        }

        return false;
    }

    /**
     * List revoked certificates
     *
     * @param array $crl optional
     * @return array|bool
     */
    public function listRevoked($crl = null)
    {
        if (!isset($crl)) {
            $crl = $this->currentCert;
        }

        if (!isset($crl['tbsCertList'])) {
            return false;
        }

        $result = [];

        if (is_array($rclist = $this->subArray($crl, 'tbsCertList/revokedCertificates'))) {
            foreach ($rclist as $rc) {
                $result[] = $rc['userCertificate']->toString();
            }
        }

        return $result;
    }

    /**
     * Remove a Revoked Certificate Extension
     *
     * @param string $serial
     * @param string $id
     * @return bool
     */
    public function removeRevokedCertificateExtension($serial, $id)
    {
        if (is_array($rclist = &$this->subArray($this->currentCert, 'tbsCertList/revokedCertificates'))) {
            if (($i = $this->revokedCertificate($rclist, $serial)) !== false) {
                return $this->removeExtensionHelper($id, "tbsCertList/revokedCertificates/$i/crlEntryExtensions");
            }
        }

        return false;
    }

    /**
     * Get a Revoked Certificate Extension
     *
     * Returns the extension if it exists and false if not
     *
     * @param string $serial
     * @param string $id
     * @param array $crl optional
     * @return mixed
     */
    public function getRevokedCertificateExtension($serial, $id, $crl = null)
    {
        if (!isset($crl)) {
            $crl = $this->currentCert;
        }

        if (is_array($rclist = $this->subArray($crl, 'tbsCertList/revokedCertificates'))) {
            if (($i = $this->revokedCertificate($rclist, $serial)) !== false) {
                return $this->getExtension($id, $crl, "tbsCertList/revokedCertificates/$i/crlEntryExtensions");
            }
        }

        return false;
    }

    /**
     * Returns a list of all extensions in use for a given revoked certificate
     *
     * @param string $serial
     * @param array $crl optional
     * @return array|bool
     */
    public function getRevokedCertificateExtensions($serial, $crl = null)
    {
        if (!isset($crl)) {
            $crl = $this->currentCert;
        }

        if (is_array($rclist = $this->subArray($crl, 'tbsCertList/revokedCertificates'))) {
            if (($i = $this->revokedCertificate($rclist, $serial)) !== false) {
                return $this->getExtensions($crl, "tbsCertList/revokedCertificates/$i/crlEntryExtensions");
            }
        }

        return false;
    }

    /**
     * Set a Revoked Certificate Extension
     *
     * @param string $serial
     * @param string $id
     * @param mixed $value
     * @param bool $critical optional
     * @param bool $replace optional
     * @return bool
     */
    public function setRevokedCertificateExtension($serial, $id, $value, $critical = false, $replace = true)
    {
        if (isset($this->currentCert['tbsCertList'])) {
            if (is_array($rclist = &$this->subArray($this->currentCert, 'tbsCertList/revokedCertificates', true))) {
                if (($i = $this->revokedCertificate($rclist, $serial, true)) !== false) {
                    return $this->setExtensionHelper($id, $value, $critical, $replace, "tbsCertList/revokedCertificates/$i/crlEntryExtensions");
                }
            }
        }

        return false;
    }

    /**
     * Register the mapping for a custom/unsupported extension.
     *
     * @param string $id
     * @param array $mapping
     */
    public static function registerExtension($id, array $mapping)
    {
        if (isset(self::$extensions[$id]) && self::$extensions[$id] !== $mapping) {
            throw new \RuntimeException(
                'Extension ' . $id . ' has already been defined with a different mapping.'
            );
        }

        self::$extensions[$id] = $mapping;
    }

    /**
     * Register the mapping for a custom/unsupported extension.
     *
     * @param string $id
     *
     * @return array|null
     */
    public static function getRegisteredExtension($id)
    {
        return isset(self::$extensions[$id]) ? self::$extensions[$id] : null;
    }

    /**
     * Register the mapping for a custom/unsupported extension.
     *
     * @param string $id
     * @param mixed $value
     * @param bool $critical
     * @param bool $replace
     */
    public function setExtensionValue($id, $value, $critical = false, $replace = false)
    {
        $this->extensionValues[$id] = compact('critical', 'replace', 'value');
    }
}
<?php

/**
 * Pure-PHP arbitrary precision integer arithmetic library.
 *
 * Supports base-2, base-10, base-16, and base-256 numbers.  Uses the GMP or BCMath extensions, if available,
 * and an internal implementation, otherwise.
 *
 * PHP version 5 and 7
 *
 * Here's an example of how to use this library:
 * <code>
 * <?php
 *    $a = new \phpseclib3\Math\BigInteger(2);
 *    $b = new \phpseclib3\Math\BigInteger(3);
 *
 *    $c = $a->add($b);
 *
 *    echo $c->toString(); // outputs 5
 * ?>
 * </code>
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2017 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 */

namespace phpseclib3\Math;

use phpseclib3\Exception\BadConfigurationException;
use phpseclib3\Math\BigInteger\Engines\Engine;

/**
 * Pure-PHP arbitrary precision integer arithmetic library. Supports base-2, base-10, base-16, and base-256
 * numbers.
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
class BigInteger implements \JsonSerializable
{
    /**
     * Main Engine
     *
     * @var class-string<Engine>
     */
    private static $mainEngine;

    /**
     * Selected Engines
     *
     * @var list<string>
     */
    private static $engines;

    /**
     * The actual BigInteger object
     *
     * @var object
     */
    private $value;

    /**
     * Mode independent value used for serialization.
     *
     * @see self::__sleep()
     * @see self::__wakeup()
     * @var string
     */
    private $hex;

    /**
     * Precision (used only for serialization)
     *
     * @see self::__sleep()
     * @see self::__wakeup()
     * @var int
     */
    private $precision;

    /**
     * Sets engine type.
     *
     * Throws an exception if the type is invalid
     *
     * @param string $main
     * @param list<string> $modexps optional
     * @return void
     */
    public static function setEngine($main, array $modexps = ['DefaultEngine'])
    {
        self::$engines = [];

        $fqmain = 'phpseclib3\\Math\\BigInteger\\Engines\\' . $main;
        if (!class_exists($fqmain) || !method_exists($fqmain, 'isValidEngine')) {
            throw new \InvalidArgumentException("$main is not a valid engine");
        }
        if (!$fqmain::isValidEngine()) {
            throw new BadConfigurationException("$main is not setup correctly on this system");
        }
        /** @var class-string<Engine> $fqmain */
        self::$mainEngine = $fqmain;

        $found = false;
        foreach ($modexps as $modexp) {
            try {
                $fqmain::setModExpEngine($modexp);
                $found = true;
                break;
            } catch (\Exception $e) {
            }
        }

        if (!$found) {
            throw new BadConfigurationException("No valid modular exponentiation engine found for $main");
        }

        self::$engines = [$main, $modexp];
    }

    /**
     * Returns the engine type
     *
     * @return string[]
     */
    public static function getEngine()
    {
        self::initialize_static_variables();

        return self::$engines;
    }

    /**
     * Initialize static variables
     */
    private static function initialize_static_variables()
    {
        if (!isset(self::$mainEngine)) {
            $engines = [
                ['GMP', ['DefaultEngine']],
                ['PHP64', ['OpenSSL']],
                ['BCMath', ['OpenSSL']],
                ['PHP32', ['OpenSSL']],
                ['PHP64', ['DefaultEngine']],
                ['PHP32', ['DefaultEngine']]
            ];
            // per https://phpseclib.com/docs/speed PHP 8.4.0+ _significantly_ sped up BCMath
            if (version_compare(PHP_VERSION, '8.4.0') >= 0) {
                $engines[1][0] = 'BCMath';
                $engines[2][0] = 'PHP64';
            }

            foreach ($engines as $engine) {
                try {
                    self::setEngine($engine[0], $engine[1]);
                    return;
                } catch (\Exception $e) {
                }
            }

            throw new \UnexpectedValueException('No valid BigInteger found. This is only possible when JIT is enabled on Windows and neither the GMP or BCMath extensions are available so either disable JIT or install GMP / BCMath');
        }
    }

    /**
     * Converts base-2, base-10, base-16, and binary strings (base-256) to BigIntegers.
     *
     * If the second parameter - $base - is negative, then it will be assumed that the number's are encoded using
     * two's compliment.  The sole exception to this is -10, which is treated the same as 10 is.
     *
     * @param string|int|Engine $x Base-10 number or base-$base number if $base set.
     * @param int $base
     */
    public function __construct($x = 0, $base = 10)
    {
        self::initialize_static_variables();

        if ($x instanceof self::$mainEngine) {
            $this->value = clone $x;
        } elseif ($x instanceof Engine) {
            $this->value = new static("$x");
            $this->value->setPrecision($x->getPrecision());
        } else {
            $this->value = new self::$mainEngine($x, $base);
        }
    }

    /**
     * Converts a BigInteger to a base-10 number.
     *
     * @return string
     */
    public function toString()
    {
        return $this->value->toString();
    }

    /**
     *  __toString() magic method
     */
    public function __toString()
    {
        return (string)$this->value;
    }

    /**
     *  __debugInfo() magic method
     *
     * Will be called, automatically, when print_r() or var_dump() are called
     */
    public function __debugInfo()
    {
        return $this->value->__debugInfo();
    }

    /**
     * Converts a BigInteger to a byte string (eg. base-256).
     *
     * @param bool $twos_compliment
     * @return string
     */
    public function toBytes($twos_compliment = false)
    {
        return $this->value->toBytes($twos_compliment);
    }

    /**
     * Converts a BigInteger to a hex string (eg. base-16).
     *
     * @param bool $twos_compliment
     * @return string
     */
    public function toHex($twos_compliment = false)
    {
        return $this->value->toHex($twos_compliment);
    }

    /**
     * Converts a BigInteger to a bit string (eg. base-2).
     *
     * Negative numbers are saved as positive numbers, unless $twos_compliment is set to true, at which point, they're
     * saved as two's compliment.
     *
     * @param bool $twos_compliment
     * @return string
     */
    public function toBits($twos_compliment = false)
    {
        return $this->value->toBits($twos_compliment);
    }

    /**
     * Adds two BigIntegers.
     *
     * @param BigInteger $y
     * @return BigInteger
     */
    public function add(BigInteger $y)
    {
        return new static($this->value->add($y->value));
    }

    /**
     * Subtracts two BigIntegers.
     *
     * @param BigInteger $y
     * @return BigInteger
     */
    public function subtract(BigInteger $y)
    {
        return new static($this->value->subtract($y->value));
    }

    /**
     * Multiplies two BigIntegers
     *
     * @param BigInteger $x
     * @return BigInteger
     */
    public function multiply(BigInteger $x)
    {
        return new static($this->value->multiply($x->value));
    }

    /**
     * Divides two BigIntegers.
     *
     * Returns an array whose first element contains the quotient and whose second element contains the
     * "common residue".  If the remainder would be positive, the "common residue" and the remainder are the
     * same.  If the remainder would be negative, the "common residue" is equal to the sum of the remainder
     * and the divisor (basically, the "common residue" is the first positive modulo).
     *
     * Here's an example:
     * <code>
     * <?php
     *    $a = new \phpseclib3\Math\BigInteger('10');
     *    $b = new \phpseclib3\Math\BigInteger('20');
     *
     *    list($quotient, $remainder) = $a->divide($b);
     *
     *    echo $quotient->toString(); // outputs 0
     *    echo "\r\n";
     *    echo $remainder->toString(); // outputs 10
     * ?>
     * </code>
     *
     * @param BigInteger $y
     * @return BigInteger[]
     */
    public function divide(BigInteger $y)
    {
        list($q, $r) = $this->value->divide($y->value);
        return [
            new static($q),
            new static($r)
        ];
    }

    /**
     * Calculates modular inverses.
     *
     * Say you have (30 mod 17 * x mod 17) mod 17 == 1.  x can be found using modular inverses.
     *
     * @param BigInteger $n
     * @return BigInteger
     */
    public function modInverse(BigInteger $n)
    {
        return new static($this->value->modInverse($n->value));
    }

    /**
     * Calculates modular inverses.
     *
     * Say you have (30 mod 17 * x mod 17) mod 17 == 1.  x can be found using modular inverses.
     *
     * @param BigInteger $n
     * @return BigInteger[]
     */
    public function extendedGCD(BigInteger $n)
    {
        $extended = $this->value->extendedGCD($n->value);
        $gcd = $extended['gcd'];
        $x = $extended['x'];
        $y = $extended['y'];
        return [
            'gcd' => new static($gcd),
            'x' => new static($x),
            'y' => new static($y)
        ];
    }

    /**
     * Calculates the greatest common divisor
     *
     * Say you have 693 and 609.  The GCD is 21.
     *
     * @param BigInteger $n
     * @return BigInteger
     */
    public function gcd(BigInteger $n)
    {
        return new static($this->value->gcd($n->value));
    }

    /**
     * Absolute value.
     *
     * @return BigInteger
     */
    public function abs()
    {
        return new static($this->value->abs());
    }

    /**
     * Set Precision
     *
     * Some bitwise operations give different results depending on the precision being used.  Examples include left
     * shift, not, and rotates.
     *
     * @param int $bits
     */
    public function setPrecision($bits)
    {
        $this->value->setPrecision($bits);
    }

    /**
     * Get Precision
     *
     * Returns the precision if it exists, false if it doesn't
     *
     * @return int|bool
     */
    public function getPrecision()
    {
        return $this->value->getPrecision();
    }

    /**
     * Serialize
     *
     * Will be called, automatically, when serialize() is called on a BigInteger object.
     *
     * __sleep() / __wakeup() have been around since PHP 4.0 but were deprecated in PHP 8.5
     *
     * \Serializable was introduced in PHP 5.1 and deprecated in PHP 8.1:
     * https://wiki.php.net/rfc/phase_out_serializable
     *
     * __serialize() / __unserialize() were introduced in PHP 7.4:
     * https://wiki.php.net/rfc/custom_object_serialization
     *
     * @return array
     */
    public function __sleep()
    {
        $this->hex = $this->toHex(true);
        $vars = ['hex'];
        if ($this->getPrecision() > 0) {
            $vars[] = 'precision';
        }
        return $vars;
    }

    /**
     * Serialize
     *
     * Will be called, automatically, when unserialize() is called on a BigInteger object.
     */
    public function __wakeup()
    {
        $temp = new static($this->hex, -16);
        $this->value = $temp->value;
        if ($this->precision > 0) {
            // recalculate $this->bitmask
            $this->setPrecision($this->precision);
        }
    }

    /**
     *  __serialize() magic method
     *
     * @see self::__unserialize()
     * @return array
     * @access public
     */
    public function __serialize()
    {
        $result = ['hex' => $this->toHex(true)];
        if ($this->getPrecision() > 0) {
            $result['precision'] = $this->getPrecision();
        }
        return $result;
    }

    /**
     *  __unserialize() magic method
     *
     * @see self::__serialize()
     * @access public
     */
    public function __unserialize(array $data)
    {
        $temp = new static($data['hex'], -16);
        $this->value = $temp->value;
        if (isset($data['precision']) && $data['precision'] > 0) {
            // recalculate $this->bitmask
            $this->setPrecision($data['precision']);
        }
    }

    /**
     * JSON Serialize
     *
     * Will be called, automatically, when json_encode() is called on a BigInteger object.
     *
     * @return array{hex: string, precision?: int]
     */
    #[\ReturnTypeWillChange]
    public function jsonSerialize()
    {
        $result = ['hex' => $this->toHex(true)];
        if ($this->precision > 0) {
            $result['precision'] = $this->getPrecision();
        }
        return $result;
    }

    /**
     * Performs modular exponentiation.
     *
     * @param BigInteger $e
     * @param BigInteger $n
     * @return BigInteger
     */
    public function powMod(BigInteger $e, BigInteger $n)
    {
        return new static($this->value->powMod($e->value, $n->value));
    }

    /**
     * Performs modular exponentiation.
     *
     * @param BigInteger $e
     * @param BigInteger $n
     * @return BigInteger
     */
    public function modPow(BigInteger $e, BigInteger $n)
    {
        return new static($this->value->modPow($e->value, $n->value));
    }

    /**
     * Compares two numbers.
     *
     * Although one might think !$x->compare($y) means $x != $y, it, in fact, means the opposite.  The reason for this
     * is demonstrated thusly:
     *
     * $x  > $y: $x->compare($y)  > 0
     * $x  < $y: $x->compare($y)  < 0
     * $x == $y: $x->compare($y) == 0
     *
     * Note how the same comparison operator is used.  If you want to test for equality, use $x->equals($y).
     *
     * {@internal Could return $this->subtract($x), but that's not as fast as what we do do.}
     *
     * @param BigInteger $y
     * @return int in case < 0 if $this is less than $y; > 0 if $this is greater than $y, and 0 if they are equal.
     * @see self::equals()
     */
    public function compare(BigInteger $y)
    {
        return $this->value->compare($y->value);
    }

    /**
     * Tests the equality of two numbers.
     *
     * If you need to see if one number is greater than or less than another number, use BigInteger::compare()
     *
     * @param BigInteger $x
     * @return bool
     */
    public function equals(BigInteger $x)
    {
        return $this->value->equals($x->value);
    }

    /**
     * Logical Not
     *
     * @return BigInteger
     */
    public function bitwise_not()
    {
        return new static($this->value->bitwise_not());
    }

    /**
     * Logical And
     *
     * @param BigInteger $x
     * @return BigInteger
     */
    public function bitwise_and(BigInteger $x)
    {
        return new static($this->value->bitwise_and($x->value));
    }

    /**
     * Logical Or
     *
     * @param BigInteger $x
     * @return BigInteger
     */
    public function bitwise_or(BigInteger $x)
    {
        return new static($this->value->bitwise_or($x->value));
    }

    /**
     * Logical Exclusive Or
     *
     * @param BigInteger $x
     * @return BigInteger
     */
    public function bitwise_xor(BigInteger $x)
    {
        return new static($this->value->bitwise_xor($x->value));
    }

    /**
     * Logical Right Shift
     *
     * Shifts BigInteger's by $shift bits, effectively dividing by 2**$shift.
     *
     * @param int $shift
     * @return BigInteger
     */
    public function bitwise_rightShift($shift)
    {
        return new static($this->value->bitwise_rightShift($shift));
    }

    /**
     * Logical Left Shift
     *
     * Shifts BigInteger's by $shift bits, effectively multiplying by 2**$shift.
     *
     * @param int $shift
     * @return BigInteger
     */
    public function bitwise_leftShift($shift)
    {
        return new static($this->value->bitwise_leftShift($shift));
    }

    /**
     * Logical Left Rotate
     *
     * Instead of the top x bits being dropped they're appended to the shifted bit string.
     *
     * @param int $shift
     * @return BigInteger
     */
    public function bitwise_leftRotate($shift)
    {
        return new static($this->value->bitwise_leftRotate($shift));
    }

    /**
     * Logical Right Rotate
     *
     * Instead of the bottom x bits being dropped they're prepended to the shifted bit string.
     *
     * @param int $shift
     * @return BigInteger
     */
    public function bitwise_rightRotate($shift)
    {
        return new static($this->value->bitwise_rightRotate($shift));
    }

    /**
     * Returns the smallest and largest n-bit number
     *
     * @param int $bits
     * @return BigInteger[]
     */
    public static function minMaxBits($bits)
    {
        self::initialize_static_variables();

        $class = self::$mainEngine;
        $minMax = $class::minMaxBits($bits);
        $min = $minMax['min'];
        $max = $minMax['max'];
        return [
            'min' => new static($min),
            'max' => new static($max)
        ];
    }

    /**
     * Return the size of a BigInteger in bits
     *
     * @return int
     */
    public function getLength()
    {
        return $this->value->getLength();
    }

    /**
     * Return the size of a BigInteger in bytes
     *
     * @return int
     */
    public function getLengthInBytes()
    {
        return $this->value->getLengthInBytes();
    }

    /**
     * Generates a random number of a certain size
     *
     * Bit length is equal to $size
     *
     * @param int $size
     * @return BigInteger
     */
    public static function random($size)
    {
        self::initialize_static_variables();

        $class = self::$mainEngine;
        return new static($class::random($size));
    }

    /**
     * Generates a random prime number of a certain size
     *
     * Bit length is equal to $size
     *
     * @param int $size
     * @return BigInteger
     */
    public static function randomPrime($size)
    {
        self::initialize_static_variables();

        $class = self::$mainEngine;
        return new static($class::randomPrime($size));
    }

    /**
     * Generate a random prime number between a range
     *
     * If there's not a prime within the given range, false will be returned.
     *
     * @param BigInteger $min
     * @param BigInteger $max
     * @return false|BigInteger
     */
    public static function randomRangePrime(BigInteger $min, BigInteger $max)
    {
        $class = self::$mainEngine;
        return new static($class::randomRangePrime($min->value, $max->value));
    }

    /**
     * Generate a random number between a range
     *
     * Returns a random number between $min and $max where $min and $max
     * can be defined using one of the two methods:
     *
     * BigInteger::randomRange($min, $max)
     * BigInteger::randomRange($max, $min)
     *
     * @param BigInteger $min
     * @param BigInteger $max
     * @return BigInteger
     */
    public static function randomRange(BigInteger $min, BigInteger $max)
    {
        $class = self::$mainEngine;
        return new static($class::randomRange($min->value, $max->value));
    }

    /**
     * Checks a numer to see if it's prime
     *
     * Assuming the $t parameter is not set, this function has an error rate of 2**-80.  The main motivation for the
     * $t parameter is distributability.  BigInteger::randomPrime() can be distributed across multiple pageloads
     * on a website instead of just one.
     *
     * @param int|bool $t
     * @return bool
     */
    public function isPrime($t = false)
    {
        return $this->value->isPrime($t);
    }

    /**
     * Calculates the nth root of a biginteger.
     *
     * Returns the nth root of a positive biginteger, where n defaults to 2
     *
     * @param int $n optional
     * @return BigInteger
     */
    public function root($n = 2)
    {
        return new static($this->value->root($n));
    }

    /**
     * Performs exponentiation.
     *
     * @param BigInteger $n
     * @return BigInteger
     */
    public function pow(BigInteger $n)
    {
        return new static($this->value->pow($n->value));
    }

    /**
     * Return the minimum BigInteger between an arbitrary number of BigIntegers.
     *
     * @param BigInteger ...$nums
     * @return BigInteger
     */
    public static function min(BigInteger ...$nums)
    {
        $class = self::$mainEngine;
        $nums = array_map(function ($num) {
            return $num->value;
        }, $nums);
        return new static($class::min(...$nums));
    }

    /**
     * Return the maximum BigInteger between an arbitrary number of BigIntegers.
     *
     * @param BigInteger ...$nums
     * @return BigInteger
     */
    public static function max(BigInteger ...$nums)
    {
        $class = self::$mainEngine;
        $nums = array_map(function ($num) {
            return $num->value;
        }, $nums);
        return new static($class::max(...$nums));
    }

    /**
     * Tests BigInteger to see if it is between two integers, inclusive
     *
     * @param BigInteger $min
     * @param BigInteger $max
     * @return bool
     */
    public function between(BigInteger $min, BigInteger $max)
    {
        return $this->value->between($min->value, $max->value);
    }

    /**
     * Clone
     */
    public function __clone()
    {
        $this->value = clone $this->value;
    }

    /**
     * Is Odd?
     *
     * @return bool
     */
    public function isOdd()
    {
        return $this->value->isOdd();
    }

    /**
     * Tests if a bit is set
     *
     * @param int $x
     * @return bool
     */
    public function testBit($x)
    {
        return $this->value->testBit($x);
    }

    /**
     * Is Negative?
     *
     * @return bool
     */
    public function isNegative()
    {
        return $this->value->isNegative();
    }

    /**
     * Negate
     *
     * Given $k, returns -$k
     *
     * @return BigInteger
     */
    public function negate()
    {
        return new static($this->value->negate());
    }

    /**
     * Scan for 1 and right shift by that amount
     *
     * ie. $s = gmp_scan1($n, 0) and $r = gmp_div_q($n, gmp_pow(gmp_init('2'), $s));
     *
     * @param BigInteger $r
     * @return int
     */
    public static function scan1divide(BigInteger $r)
    {
        $class = self::$mainEngine;
        return $class::scan1divide($r->value);
    }

    /**
     * Create Recurring Modulo Function
     *
     * Sometimes it may be desirable to do repeated modulos with the same number outside of
     * modular exponentiation
     *
     * @return callable
     */
    public function createRecurringModuloFunction()
    {
        $func = $this->value->createRecurringModuloFunction();
        return function (BigInteger $x) use ($func) {
            return new static($func($x->value));
        };
    }

    /**
     * Bitwise Split
     *
     * Splits BigInteger's into chunks of $split bits
     *
     * @param int $split
     * @return BigInteger[]
     */
    public function bitwise_split($split)
    {
        return array_map(function ($val) {
            return new static($val);
        }, $this->value->bitwise_split($split));
    }
}
<?php

/**
 * BCMath BigInteger Engine
 *
 * PHP version 5 and 7
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2017 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://pear.php.net/package/Math_BigInteger
 */

namespace phpseclib3\Math\BigInteger\Engines;

use phpseclib3\Common\Functions\Strings;
use phpseclib3\Exception\BadConfigurationException;

/**
 * BCMath Engine.
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
class BCMath extends Engine
{
    /**
     * Can Bitwise operations be done fast?
     *
     * @see parent::bitwise_leftRotate()
     * @see parent::bitwise_rightRotate()
     */
    const FAST_BITWISE = false;

    /**
     * Engine Directory
     *
     * @see parent::setModExpEngine
     */
    const ENGINE_DIR = 'BCMath';

    /**
     * Test to see if bcmod() accepts 2 or 3 parameters
     */
    const BCMOD_THREE_PARAMS = PHP_VERSION_ID >= 72000;

    /**
     * Test for engine validity
     *
     * @return bool
     * @see parent::__construct()
     */
    public static function isValidEngine()
    {
        return extension_loaded('bcmath');
    }

    /**
     * Default constructor
     *
     * @param mixed $x integer Base-10 number or base-$base number if $base set.
     * @param int $base
     * @see parent::__construct()
     */
    public function __construct($x = 0, $base = 10)
    {
        if (!isset(static::$isValidEngine[static::class])) {
            static::$isValidEngine[static::class] = self::isValidEngine();
        }
        if (!static::$isValidEngine[static::class]) {
            throw new BadConfigurationException('BCMath is not setup correctly on this system');
        }

        $this->value = '0';

        parent::__construct($x, $base);
    }

    /**
     * Initialize a BCMath BigInteger Engine instance
     *
     * @param int $base
     * @see parent::__construct()
     */
    protected function initialize($base)
    {
        switch (abs($base)) {
            case 256:
                // round $len to the nearest 4
                $len = (strlen($this->value) + 3) & ~3;

                $x = str_pad($this->value, $len, chr(0), STR_PAD_LEFT);

                $this->value = '0';
                for ($i = 0; $i < $len; $i += 4) {
                    $this->value = bcmul($this->value, '4294967296', 0); // 4294967296 == 2**32
                    $this->value = bcadd(
                        $this->value,
                        0x1000000 * ord($x[$i]) + ((ord($x[$i + 1]) << 16) | (ord(
                            $x[$i + 2]
                        ) << 8) | ord($x[$i + 3])),
                        0
                    );
                }

                if ($this->is_negative) {
                    $this->value = '-' . $this->value;
                }
                break;
            case 16:
                $x = (strlen($this->value) & 1) ? '0' . $this->value : $this->value;
                $temp = new self(Strings::hex2bin($x), 256);
                $this->value = $this->is_negative ? '-' . $temp->value : $temp->value;
                $this->is_negative = false;
                break;
            case 10:
                // explicitly casting $x to a string is necessary, here, since doing $x[0] on -1 yields different
                // results then doing it on '-1' does (modInverse does $x[0])
                $this->value = $this->value === '-' ? '0' : (string)$this->value;
        }
    }

    /**
     * Converts a BigInteger to a base-10 number.
     *
     * @return string
     */
    public function toString()
    {
        if ($this->value === '0') {
            return '0';
        }

        return ltrim($this->value, '0');
    }

    /**
     * Converts a BigInteger to a byte string (eg. base-256).
     *
     * @param bool $twos_compliment
     * @return string
     */
    public function toBytes($twos_compliment = false)
    {
        if ($twos_compliment) {
            return $this->toBytesHelper();
        }

        $value = '';
        $current = $this->value;

        if ($current[0] == '-') {
            $current = substr($current, 1);
        }

        while (bccomp($current, '0', 0) > 0) {
            $temp = self::BCMOD_THREE_PARAMS ? bcmod($current, '16777216', 0) : bcmod($current, '16777216');
            $value = chr($temp >> 16) . chr($temp >> 8) . chr($temp) . $value;
            $current = bcdiv($current, '16777216', 0);
        }

        return $this->precision > 0 ?
            substr(str_pad($value, $this->precision >> 3, chr(0), STR_PAD_LEFT), -($this->precision >> 3)) :
            ltrim($value, chr(0));
    }

    /**
     * Adds two BigIntegers.
     *
     * @param BCMath $y
     * @return BCMath
     */
    public function add(BCMath $y)
    {
        $temp = new self();
        $temp->value = bcadd($this->value, $y->value, 0);

        return $this->normalize($temp);
    }

    /**
     * Subtracts two BigIntegers.
     *
     * @param BCMath $y
     * @return BCMath
     */
    public function subtract(BCMath $y)
    {
        $temp = new self();
        $temp->value = bcsub($this->value, $y->value, 0);

        return $this->normalize($temp);
    }

    /**
     * Multiplies two BigIntegers.
     *
     * @param BCMath $x
     * @return BCMath
     */
    public function multiply(BCMath $x)
    {
        $temp = new self();
        $temp->value = bcmul($this->value, $x->value, 0);

        return $this->normalize($temp);
    }

    /**
     * Divides two BigIntegers.
     *
     * Returns an array whose first element contains the quotient and whose second element contains the
     * "common residue".  If the remainder would be positive, the "common residue" and the remainder are the
     * same.  If the remainder would be negative, the "common residue" is equal to the sum of the remainder
     * and the divisor (basically, the "common residue" is the first positive modulo).
     *
     * @param BCMath $y
     * @return array{static, static}
     */
    public function divide(BCMath $y)
    {
        $quotient = new self();
        $remainder = new self();

        $quotient->value = bcdiv($this->value, $y->value, 0);
        $remainder->value = self::BCMOD_THREE_PARAMS ? bcmod($this->value, $y->value, 0) : bcmod($this->value, $y->value);

        if ($remainder->value[0] == '-') {
            $remainder->value = bcadd($remainder->value, $y->value[0] == '-' ? substr($y->value, 1) : $y->value, 0);
        }

        return [$this->normalize($quotient), $this->normalize($remainder)];
    }

    /**
     * Calculates modular inverses.
     *
     * Say you have (30 mod 17 * x mod 17) mod 17 == 1.  x can be found using modular inverses.
     *
     * @param BCMath $n
     * @return false|BCMath
     */
    public function modInverse(BCMath $n)
    {
        return $this->modInverseHelper($n);
    }

    /**
     * Calculates the greatest common divisor and Bezout's identity.
     *
     * Say you have 693 and 609.  The GCD is 21.  Bezout's identity states that there exist integers x and y such that
     * 693*x + 609*y == 21.  In point of fact, there are actually an infinite number of x and y combinations and which
     * combination is returned is dependent upon which mode is in use.  See
     * {@link http://en.wikipedia.org/wiki/B%C3%A9zout%27s_identity Bezout's identity - Wikipedia} for more information.
     *
     * @param BCMath $n
     * @return array{gcd: static, x: static, y: static}
     */
    public function extendedGCD(BCMath $n)
    {
        // it might be faster to use the binary xGCD algorithim here, as well, but (1) that algorithim works
        // best when the base is a power of 2 and (2) i don't think it'd make much difference, anyway.  as is,
        // the basic extended euclidean algorithim is what we're using.

        $u = $this->value;
        $v = $n->value;

        $a = '1';
        $b = '0';
        $c = '0';
        $d = '1';

        while (bccomp($v, '0', 0) != 0) {
            $q = bcdiv($u, $v, 0);

            $temp = $u;
            $u = $v;
            $v = bcsub($temp, bcmul($v, $q, 0), 0);

            $temp = $a;
            $a = $c;
            $c = bcsub($temp, bcmul($a, $q, 0), 0);

            $temp = $b;
            $b = $d;
            $d = bcsub($temp, bcmul($b, $q, 0), 0);
        }

        return [
            'gcd' => $this->normalize(new static($u)),
            'x' => $this->normalize(new static($a)),
            'y' => $this->normalize(new static($b))
        ];
    }

    /**
     * Calculates the greatest common divisor
     *
     * Say you have 693 and 609.  The GCD is 21.
     *
     * @param BCMath $n
     * @return BCMath
     */
    public function gcd(BCMath $n)
    {
        $gcd = $this->extendedGCD($n)['gcd'];
        return $gcd;
    }

    /**
     * Absolute value.
     *
     * @return BCMath
     */
    public function abs()
    {
        $temp = new static();
        $temp->value = strlen($this->value) && $this->value[0] == '-' ?
            substr($this->value, 1) :
            $this->value;

        return $temp;
    }

    /**
     * Logical And
     *
     * @param BCMath $x
     * @return BCMath
     */
    public function bitwise_and(BCMath $x)
    {
        return $this->bitwiseAndHelper($x);
    }

    /**
     * Logical Or
     *
     * @param BCMath $x
     * @return BCMath
     */
    public function bitwise_or(BCMath $x)
    {
        return $this->bitwiseOrHelper($x);
    }

    /**
     * Logical Exclusive Or
     *
     * @param BCMath $x
     * @return BCMath
     */
    public function bitwise_xor(BCMath $x)
    {
        return $this->bitwiseXorHelper($x);
    }

    /**
     * Logical Right Shift
     *
     * Shifts BigInteger's by $shift bits, effectively dividing by 2**$shift.
     *
     * @param int $shift
     * @return BCMath
     */
    public function bitwise_rightShift($shift)
    {
        $temp = new static();
        $temp->value = bcdiv($this->value, bcpow('2', $shift, 0), 0);

        return $this->normalize($temp);
    }

    /**
     * Logical Left Shift
     *
     * Shifts BigInteger's by $shift bits, effectively multiplying by 2**$shift.
     *
     * @param int $shift
     * @return BCMath
     */
    public function bitwise_leftShift($shift)
    {
        $temp = new static();
        $temp->value = bcmul($this->value, bcpow('2', $shift, 0), 0);

        return $this->normalize($temp);
    }

    /**
     * Compares two numbers.
     *
     * Although one might think !$x->compare($y) means $x != $y, it, in fact, means the opposite.  The reason for this
     * is demonstrated thusly:
     *
     * $x  > $y: $x->compare($y)  > 0
     * $x  < $y: $x->compare($y)  < 0
     * $x == $y: $x->compare($y) == 0
     *
     * Note how the same comparison operator is used.  If you want to test for equality, use $x->equals($y).
     *
     * {@internal Could return $this->subtract($x), but that's not as fast as what we do do.}
     *
     * @param BCMath $y
     * @return int in case < 0 if $this is less than $y; > 0 if $this is greater than $y, and 0 if they are equal.
     * @see self::equals()
     */
    public function compare(BCMath $y)
    {
        return bccomp($this->value, $y->value, 0);
    }

    /**
     * Tests the equality of two numbers.
     *
     * If you need to see if one number is greater than or less than another number, use BigInteger::compare()
     *
     * @param BCMath $x
     * @return bool
     */
    public function equals(BCMath $x)
    {
        return $this->value == $x->value;
    }

    /**
     * Performs modular exponentiation.
     *
     * @param BCMath $e
     * @param BCMath $n
     * @return BCMath
     */
    public function modPow(BCMath $e, BCMath $n)
    {
        return $this->powModOuter($e, $n);
    }

    /**
     * Performs modular exponentiation.
     *
     * Alias for modPow().
     *
     * @param BCMath $e
     * @param BCMath $n
     * @return BCMath
     */
    public function powMod(BCMath $e, BCMath $n)
    {
        return $this->powModOuter($e, $n);
    }

    /**
     * Performs modular exponentiation.
     *
     * @param BCMath $e
     * @param BCMath $n
     * @return BCMath
     */
    protected function powModInner(BCMath $e, BCMath $n)
    {
        try {
            $class = static::$modexpEngine[static::class];
            return $class::powModHelper($this, $e, $n, static::class);
        } catch (\Exception $err) {
            return BCMath\DefaultEngine::powModHelper($this, $e, $n, static::class);
        }
    }

    /**
     * Normalize
     *
     * Removes leading zeros and truncates (if necessary) to maintain the appropriate precision
     *
     * @param BCMath $result
     * @return BCMath
     */
    protected function normalize(BCMath $result)
    {
        $result->precision = $this->precision;
        $result->bitmask = $this->bitmask;

        if ($result->bitmask !== false) {
            $result->value = self::BCMOD_THREE_PARAMS ? bcmod($result->value, $result->bitmask->value, 0) : bcmod($result->value, $result->bitmask->value);
        }

        return $result;
    }

    /**
     * Generate a random prime number between a range
     *
     * If there's not a prime within the given range, false will be returned.
     *
     * @param BCMath $min
     * @param BCMath $max
     * @return false|BCMath
     */
    public static function randomRangePrime(BCMath $min, BCMath $max)
    {
        return self::randomRangePrimeOuter($min, $max);
    }

    /**
     * Generate a random number between a range
     *
     * Returns a random number between $min and $max where $min and $max
     * can be defined using one of the two methods:
     *
     * BigInteger::randomRange($min, $max)
     * BigInteger::randomRange($max, $min)
     *
     * @param BCMath $min
     * @param BCMath $max
     * @return BCMath
     */
    public static function randomRange(BCMath $min, BCMath $max)
    {
        return self::randomRangeHelper($min, $max);
    }

    /**
     * Make the current number odd
     *
     * If the current number is odd it'll be unchanged.  If it's even, one will be added to it.
     *
     * @see self::randomPrime()
     */
    protected function make_odd()
    {
        if (!$this->isOdd()) {
            $this->value = bcadd($this->value, '1', 0);
        }
    }

    /**
     * Test the number against small primes.
     *
     * @see self::isPrime()
     */
    protected function testSmallPrimes()
    {
        if ($this->value === '1') {
            return false;
        }
        if ($this->value === '2') {
            return true;
        }
        if ($this->value[strlen($this->value) - 1] % 2 == 0) {
            return false;
        }

        $value = $this->value;

        foreach (self::PRIMES as $prime) {
            $r = self::BCMOD_THREE_PARAMS ? bcmod($this->value, $prime, 0) : bcmod($this->value, $prime);
            if ($r == '0') {
                return $this->value == $prime;
            }
        }

        return true;
    }

    /**
     * Scan for 1 and right shift by that amount
     *
     * ie. $s = gmp_scan1($n, 0) and $r = gmp_div_q($n, gmp_pow(gmp_init('2'), $s));
     *
     * @param BCMath $r
     * @return int
     * @see self::isPrime()
     */
    public static function scan1divide(BCMath $r)
    {
        $r_value = &$r->value;
        $s = 0;
        // if $n was 1, $r would be 0 and this would be an infinite loop, hence our $this->equals(static::$one[static::class]) check earlier
        while ($r_value[strlen($r_value) - 1] % 2 == 0) {
            $r_value = bcdiv($r_value, '2', 0);
            ++$s;
        }

        return $s;
    }

    /**
     * Performs exponentiation.
     *
     * @param BCMath $n
     * @return BCMath
     */
    public function pow(BCMath $n)
    {
        $temp = new self();
        $temp->value = bcpow($this->value, $n->value, 0);

        return $this->normalize($temp);
    }

    /**
     * Return the minimum BigInteger between an arbitrary number of BigIntegers.
     *
     * @param BCMath ...$nums
     * @return BCMath
     */
    public static function min(BCMath ...$nums)
    {
        return self::minHelper($nums);
    }

    /**
     * Return the maximum BigInteger between an arbitrary number of BigIntegers.
     *
     * @param BCMath ...$nums
     * @return BCMath
     */
    public static function max(BCMath ...$nums)
    {
        return self::maxHelper($nums);
    }

    /**
     * Tests BigInteger to see if it is between two integers, inclusive
     *
     * @param BCMath $min
     * @param BCMath $max
     * @return bool
     */
    public function between(BCMath $min, BCMath $max)
    {
        return $this->compare($min) >= 0 && $this->compare($max) <= 0;
    }

    /**
     * Set Bitmask
     *
     * @param int $bits
     * @return Engine
     * @see self::setPrecision()
     */
    protected static function setBitmask($bits)
    {
        $temp = parent::setBitmask($bits);
        return $temp->add(static::$one[static::class]);
    }

    /**
     * Is Odd?
     *
     * @return bool
     */
    public function isOdd()
    {
        return $this->value[strlen($this->value) - 1] % 2 == 1;
    }

    /**
     * Tests if a bit is set
     *
     * @return bool
     */
    public function testBit($x)
    {
        $divisor = bcpow('2', $x + 1, 0);
        return bccomp(
            self::BCMOD_THREE_PARAMS ? bcmod($this->value, $divisor, 0) : bcmod($this->value, $divisor),
            bcpow('2', $x, 0),
            0
        ) >= 0;
    }

    /**
     * Is Negative?
     *
     * @return bool
     */
    public function isNegative()
    {
        return strlen($this->value) && $this->value[0] == '-';
    }

    /**
     * Negate
     *
     * Given $k, returns -$k
     *
     * @return BCMath
     */
    public function negate()
    {
        $temp = clone $this;

        if (!strlen($temp->value)) {
            return $temp;
        }

        $temp->value = $temp->value[0] == '-' ?
            substr($this->value, 1) :
            '-' . $this->value;

        return $temp;
    }
}
<?php

/**
 * Modular Exponentiation Engine
 *
 * PHP version 5 and 7
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2017 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://pear.php.net/package/Math_BigInteger
 */

namespace phpseclib3\Math\BigInteger\Engines\BCMath;

use phpseclib3\Math\BigInteger\Engines\BCMath;

/**
 * Sliding Window Exponentiation Engine
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class Base extends BCMath
{
    /**
     * Cache constants
     *
     * $cache[self::VARIABLE] tells us whether or not the cached data is still valid.
     *
     */
    const VARIABLE = 0;
    /**
     * $cache[self::DATA] contains the cached data.
     *
     */
    const DATA = 1;

    /**
     * Test for engine validity
     *
     * @return bool
     */
    public static function isValidEngine()
    {
        return static::class != __CLASS__;
    }

    /**
     * Performs modular exponentiation.
     *
     * @param BCMath $x
     * @param BCMath $e
     * @param BCMath $n
     * @param string $class
     * @return BCMath
     */
    protected static function powModHelper(BCMath $x, BCMath $e, BCMath $n, $class)
    {
        if (empty($e->value)) {
            $temp = new $class();
            $temp->value = '1';
            return $x->normalize($temp);
        }

        return $x->normalize(static::slidingWindow($x, $e, $n, $class));
    }

    /**
     * Modular reduction preparation
     *
     * @param string $x
     * @param string $n
     * @param string $class
     * @see self::slidingWindow()
     * @return string
     */
    protected static function prepareReduce($x, $n, $class)
    {
        return static::reduce($x, $n);
    }

    /**
     * Modular multiply
     *
     * @param string $x
     * @param string $y
     * @param string $n
     * @param string $class
     * @see self::slidingWindow()
     * @return string
     */
    protected static function multiplyReduce($x, $y, $n, $class)
    {
        return static::reduce(bcmul($x, $y, 0), $n);
    }

    /**
     * Modular square
     *
     * @param string $x
     * @param string $n
     * @param string $class
     * @see self::slidingWindow()
     * @return string
     */
    protected static function squareReduce($x, $n, $class)
    {
        return static::reduce(bcmul($x, $x, 0), $n);
    }
}
<?php

/**
 * Built-In BCMath Modular Exponentiation Engine
 *
 * PHP version 5 and 7
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2017 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://pear.php.net/package/Math_BigInteger
 */

namespace phpseclib3\Math\BigInteger\Engines\BCMath;

use phpseclib3\Math\BigInteger\Engines\BCMath;

/**
 * Built-In BCMath Modular Exponentiation Engine
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class BuiltIn extends BCMath
{
    /**
     * Performs modular exponentiation.
     *
     * @param BCMath $x
     * @param BCMath $e
     * @param BCMath $n
     * @return BCMath
     */
    protected static function powModHelper(BCMath $x, BCMath $e, BCMath $n)
    {
        $temp = new BCMath();
        $temp->value = bcpowmod($x->value, $e->value, $n->value, 0);

        return $x->normalize($temp);
    }
}
<?php

/**
 * BCMath Default Modular Exponentiation Engine
 *
 * PHP version 5 and 7
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2017 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://pear.php.net/package/Math_BigInteger
 */

namespace phpseclib3\Math\BigInteger\Engines\BCMath;

use phpseclib3\Math\BigInteger\Engines\BCMath\Reductions\Barrett;

/**
 * PHP Default Modular Exponentiation Engine
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class DefaultEngine extends Barrett
{
}
<?php

/**
 * OpenSSL Modular Exponentiation Engine
 *
 * PHP version 5 and 7
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2017 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://pear.php.net/package/Math_BigInteger
 */

namespace phpseclib3\Math\BigInteger\Engines\BCMath;

use phpseclib3\Math\BigInteger\Engines\OpenSSL as Progenitor;

/**
 * OpenSSL Modular Exponentiation Engine
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class OpenSSL extends Progenitor
{
}
<?php

/**
 * BCMath Barrett Modular Exponentiation Engine
 *
 * PHP version 5 and 7
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2017 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://pear.php.net/package/Math_BigInteger
 */

namespace phpseclib3\Math\BigInteger\Engines\BCMath\Reductions;

use phpseclib3\Math\BigInteger\Engines\BCMath\Base;

/**
 * PHP Barrett Modular Exponentiation Engine
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class Barrett extends Base
{
    /**
     * Cache constants
     *
     * $cache[self::VARIABLE] tells us whether or not the cached data is still valid.
     *
     */
    const VARIABLE = 0;
    /**
     * $cache[self::DATA] contains the cached data.
     *
     */
    const DATA = 1;

    /**
     * Barrett Modular Reduction
     *
     * See {@link http://www.cacr.math.uwaterloo.ca/hac/about/chap14.pdf#page=14 HAC 14.3.3} /
     * {@link http://math.libtomcrypt.com/files/tommath.pdf#page=165 MPM 6.2.5} for more information.  Modified slightly,
     * so as not to require negative numbers (initially, this script didn't support negative numbers).
     *
     * Employs "folding", as described at
     * {@link http://www.cosic.esat.kuleuven.be/publications/thesis-149.pdf#page=66 thesis-149.pdf#page=66}.  To quote from
     * it, "the idea [behind folding] is to find a value x' such that x (mod m) = x' (mod m), with x' being smaller than x."
     *
     * Unfortunately, the "Barrett Reduction with Folding" algorithm described in thesis-149.pdf is not, as written, all that
     * usable on account of (1) its not using reasonable radix points as discussed in
     * {@link http://math.libtomcrypt.com/files/tommath.pdf#page=162 MPM 6.2.2} and (2) the fact that, even with reasonable
     * radix points, it only works when there are an even number of digits in the denominator.  The reason for (2) is that
     * (x >> 1) + (x >> 1) != x / 2 + x / 2.  If x is even, they're the same, but if x is odd, they're not.  See the in-line
     * comments for details.
     *
     * @param string $n
     * @param string $m
     * @return string
     */
    protected static function reduce($n, $m)
    {
        static $cache = [
            self::VARIABLE => [],
            self::DATA => []
        ];

        $m_length = strlen($m);

        if (strlen($n) > 2 * $m_length) {
            return self::BCMOD_THREE_PARAMS ? bcmod($n, $m, 0) : bcmod($n, $m);
        }

        // if (m.length >> 1) + 2 <= m.length then m is too small and n can't be reduced
        if ($m_length < 5) {
            return self::regularBarrett($n, $m);
        }
        // n = 2 * m.length
        $correctionNeeded = false;
        if ($m_length & 1) {
            $correctionNeeded = true;
            $n .= '0';
            $m .= '0';
            $m_length++;
        }

        if (($key = array_search($m, $cache[self::VARIABLE])) === false) {
            $key = count($cache[self::VARIABLE]);
            $cache[self::VARIABLE][] = $m;

            $lhs = '1' . str_repeat('0', $m_length + ($m_length >> 1));
            $u = bcdiv($lhs, $m, 0);
            $m1 = bcsub($lhs, bcmul($u, $m, 0), 0);

            $cache[self::DATA][] = [
                'u' => $u, // m.length >> 1 (technically (m.length >> 1) + 1)
                'm1' => $m1 // m.length
            ];
        } else {
            $cacheValues = $cache[self::DATA][$key];
            $u = $cacheValues['u'];
            $m1 = $cacheValues['m1'];
        }

        $cutoff = $m_length + ($m_length >> 1);

        $lsd = substr($n, -$cutoff);
        $msd = substr($n, 0, -$cutoff);

        $temp = bcmul($msd, $m1, 0); // m.length + (m.length >> 1)
        $n = bcadd($lsd, $temp, 0); // m.length + (m.length >> 1) + 1 (so basically we're adding two same length numbers)
        //if ($m_length & 1) {
        //    return self::regularBarrett($n, $m);
        //}

        // (m.length + (m.length >> 1) + 1) - (m.length - 1) == (m.length >> 1) + 2
        $temp = substr($n, 0, -$m_length + 1);
        // if even: ((m.length >> 1) + 2) + (m.length >> 1) == m.length + 2
        // if odd:  ((m.length >> 1) + 2) + (m.length >> 1) == (m.length - 1) + 2 == m.length + 1
        $temp = bcmul($temp, $u, 0);
        // if even: (m.length + 2) - ((m.length >> 1) + 1) = m.length - (m.length >> 1) + 1
        // if odd:  (m.length + 1) - ((m.length >> 1) + 1) = m.length - (m.length >> 1)
        $temp = substr($temp, 0, -($m_length >> 1) - 1);
        // if even: (m.length - (m.length >> 1) + 1) + m.length = 2 * m.length - (m.length >> 1) + 1
        // if odd:  (m.length - (m.length >> 1)) + m.length     = 2 * m.length - (m.length >> 1)
        $temp = bcmul($temp, $m, 0);

        // at this point, if m had an odd number of digits, we'd be subtracting a 2 * m.length - (m.length >> 1) digit
        // number from a m.length + (m.length >> 1) + 1 digit number.  ie. there'd be an extra digit and the while loop
        // following this comment would loop a lot (hence our calling _regularBarrett() in that situation).

        $result = bcsub($n, $temp, 0);

        //if (bccomp($result, '0') < 0) {
        if ($result[0] == '-') {
            $temp = '1' . str_repeat('0', $m_length + 1);
            $result = bcadd($result, $temp, 0);
        }

        while (bccomp($result, $m, 0) >= 0) {
            $result = bcsub($result, $m, 0);
        }

        return $correctionNeeded && $result != '0' ? substr($result, 0, -1) : $result;
    }

    /**
     * (Regular) Barrett Modular Reduction
     *
     * For numbers with more than four digits BigInteger::_barrett() is faster.  The difference between that and this
     * is that this function does not fold the denominator into a smaller form.
     *
     * @param string $x
     * @param string $n
     * @return string
     */
    private static function regularBarrett($x, $n)
    {
        static $cache = [
            self::VARIABLE => [],
            self::DATA => []
        ];

        $n_length = strlen($n);

        if (strlen($x) > 2 * $n_length) {
            return self::BCMOD_THREE_PARAMS ? bcmod($x, $n, 0) : bcmod($x, $n);
        }

        if (($key = array_search($n, $cache[self::VARIABLE])) === false) {
            $key = count($cache[self::VARIABLE]);
            $cache[self::VARIABLE][] = $n;
            $lhs = '1' . str_repeat('0', 2 * $n_length);
            $cache[self::DATA][] = bcdiv($lhs, $n, 0);
        }

        $temp = substr($x, 0, -$n_length + 1);
        $temp = bcmul($temp, $cache[self::DATA][$key], 0);
        $temp = substr($temp, 0, -$n_length - 1);

        $r1 = substr($x, -$n_length - 1);
        $r2 = substr(bcmul($temp, $n, 0), -$n_length - 1);
        $result = bcsub($r1, $r2);

        //if (bccomp($result, '0') < 0) {
        if ($result[0] == '-') {
            $q = '1' . str_repeat('0', $n_length + 1);
            $result = bcadd($result, $q, 0);
        }

        while (bccomp($result, $n, 0) >= 0) {
            $result = bcsub($result, $n, 0);
        }

        return $result;
    }
}
<?php

/**
 * BCMath Dynamic Barrett Modular Exponentiation Engine
 *
 * PHP version 5 and 7
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2017 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://pear.php.net/package/Math_BigInteger
 */

namespace phpseclib3\Math\BigInteger\Engines\BCMath\Reductions;

use phpseclib3\Math\BigInteger\Engines\BCMath;
use phpseclib3\Math\BigInteger\Engines\BCMath\Base;

/**
 * PHP Barrett Modular Exponentiation Engine
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class EvalBarrett extends Base
{
    /**
     * Custom Reduction Function
     *
     * @see self::generateCustomReduction
     */
    private static $custom_reduction;

    /**
     * Barrett Modular Reduction
     *
     * This calls a dynamically generated loop unrolled function that's specific to a given modulo.
     * Array lookups are avoided as are if statements testing for how many bits the host OS supports, etc.
     *
     * @param string $n
     * @param string $m
     * @return string
     */
    protected static function reduce($n, $m)
    {
        $inline = self::$custom_reduction;
        return $inline($n);
    }

    /**
     * Generate Custom Reduction
     *
     * @param BCMath $m
     * @param string $class
     * @return callable|void
     */
    protected static function generateCustomReduction(BCMath $m, $class)
    {
        $m_length = strlen($m);

        if ($m_length < 5) {
            $code = 'return self::BCMOD_THREE_PARAMS ? bcmod($x, $n, 0) : bcmod($x, $n);';
            eval('$func = function ($n) { ' . $code . '};');
            self::$custom_reduction = $func;
            return;
        }

        $lhs = '1' . str_repeat('0', $m_length + ($m_length >> 1));
        $u = bcdiv($lhs, $m, 0);
        $m1 = bcsub($lhs, bcmul($u, $m, 0), 0);

        $cutoff = $m_length + ($m_length >> 1);

        $m = "'$m'";
        $u = "'$u'";
        $m1 = "'$m1'";

        $code = '
            $lsd = substr($n, -' . $cutoff . ');
            $msd = substr($n, 0, -' . $cutoff . ');

            $temp = bcmul($msd, ' . $m1 . ', 0);
            $n = bcadd($lsd, $temp, 0);

            $temp = substr($n, 0, ' . (-$m_length + 1) . ');
            $temp = bcmul($temp, ' . $u . ', 0);
            $temp = substr($temp, 0, ' . (-($m_length >> 1) - 1) . ');
            $temp = bcmul($temp, ' . $m . ', 0);

            $result = bcsub($n, $temp, 0);

            if ($result[0] == \'-\') {
                $temp = \'1' . str_repeat('0', $m_length + 1) . '\';
                $result = bcadd($result, $temp, 0);
            }

            while (bccomp($result, ' . $m . ') >= 0) {
                $result = bcsub($result, ' . $m . ', 0);
            }

            return $result;';

        eval('$func = function ($n) { ' . $code . '};');

        self::$custom_reduction = $func;

        return $func;
    }
}
<?php

/**
 * Base BigInteger Engine
 *
 * PHP version 5 and 7
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2017 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://pear.php.net/package/Math_BigInteger
 */

namespace phpseclib3\Math\BigInteger\Engines;

use phpseclib3\Common\Functions\Strings;
use phpseclib3\Crypt\Random;
use phpseclib3\Exception\BadConfigurationException;
use phpseclib3\Math\BigInteger;

/**
 * Base Engine.
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class Engine implements \JsonSerializable
{
    /* final protected */ const PRIMES = [
        3,   5,   7,   11,  13,  17,  19,  23,  29,  31,  37,  41,  43,  47,  53,  59,
        61,  67,  71,  73,  79,  83,  89,  97,  101, 103, 107, 109, 113, 127, 131, 137,
        139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227,
        229, 233, 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313,
        317, 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419,
        421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503, 509,
        521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607, 613, 617,
        619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701, 709, 719, 727,
        733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811, 821, 823, 827, 829,
        839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911, 919, 929, 937, 941, 947,
        953, 967, 971, 977, 983, 991, 997,
    ];

    /**
     * BigInteger(0)
     *
     * @var array<class-string<static>, static>
     */
    protected static $zero = [];

    /**
     * BigInteger(1)
     *
     * @var array<class-string<static>, static>
     */
    protected static $one  = [];

    /**
     * BigInteger(2)
     *
     * @var array<class-string<static>, static>
     */
    protected static $two = [];

    /**
     * Modular Exponentiation Engine
     *
     * @var array<class-string<static>, class-string<static>>
     */
    protected static $modexpEngine;

    /**
     * Engine Validity Flag
     *
     * @var array<class-string<static>, bool>
     */
    protected static $isValidEngine;

    /**
     * Holds the BigInteger's value
     *
     * @var \GMP|string|array|int
     */
    protected $value;

    /**
     * Holds the BigInteger's sign
     *
     * @var bool
     */
    protected $is_negative;

    /**
     * Precision
     *
     * @see static::setPrecision()
     * @var int
     */
    protected $precision = -1;

    /**
     * Precision Bitmask
     *
     * @see static::setPrecision()
     * @var static|false
     */
    protected $bitmask = false;

    /**
     * Recurring Modulo Function
     *
     * @var callable
     */
    protected $reduce;

    /**
     * Mode independent value used for serialization.
     *
     * @see self::__sleep()
     * @see self::__wakeup()
     * @var string
     */
    protected $hex;

    /**
     * Default constructor
     *
     * @param int|numeric-string $x integer Base-10 number or base-$base number if $base set.
     * @param int $base
     */
    public function __construct($x = 0, $base = 10)
    {
        if (!array_key_exists(static::class, static::$zero)) {
            static::$zero[static::class] = null; // Placeholder to prevent infinite loop.
            static::$zero[static::class] = new static(0);
            static::$one[static::class] = new static(1);
            static::$two[static::class] = new static(2);
        }

        // '0' counts as empty() but when the base is 256 '0' is equal to ord('0') or 48
        // '0' is the only value like this per http://php.net/empty
        if (empty($x) && (abs($base) != 256 || $x !== '0')) {
            return;
        }

        switch ($base) {
            case -256:
            case 256:
                if ($base == -256 && (ord($x[0]) & 0x80)) {
                    $this->value = ~$x;
                    $this->is_negative = true;
                } else {
                    $this->value = $x;
                    $this->is_negative = false;
                }

                $this->initialize($base);

                if ($this->is_negative) {
                    $temp = $this->add(new static('-1'));
                    $this->value = $temp->value;
                }
                break;
            case -16:
            case 16:
                if ($base > 0 && $x[0] == '-') {
                    $this->is_negative = true;
                    $x = substr($x, 1);
                }

                $x = preg_replace('#^(?:0x)?([A-Fa-f0-9]*).*#s', '$1', $x);

                $is_negative = false;
                if ($base < 0 && hexdec($x[0]) >= 8) {
                    $this->is_negative = $is_negative = true;
                    $x = Strings::bin2hex(~Strings::hex2bin($x));
                }

                $this->value = $x;
                $this->initialize($base);

                if ($is_negative) {
                    $temp = $this->add(new static('-1'));
                    $this->value = $temp->value;
                }
                break;
            case -10:
            case 10:
                // (?<!^)(?:-).*: find any -'s that aren't at the beginning and then any characters that follow that
                // (?<=^|-)0*: find any 0's that are preceded by the start of the string or by a - (ie. octals)
                // [^-0-9].*: find any non-numeric characters and then any characters that follow that
                $this->value = preg_replace('#(?<!^)(?:-).*|(?<=^|-)0*|[^-0-9].*#s', '', $x);
                if (!strlen($this->value) || $this->value == '-') {
                    $this->value = '0';
                }
                $this->initialize($base);
                break;
            case -2:
            case 2:
                if ($base > 0 && $x[0] == '-') {
                    $this->is_negative = true;
                    $x = substr($x, 1);
                }

                $x = preg_replace('#^([01]*).*#s', '$1', $x);

                $temp = new static(Strings::bits2bin($x), 128 * $base); // ie. either -16 or +16
                $this->value = $temp->value;
                if ($temp->is_negative) {
                    $this->is_negative = true;
                }

                break;
            default:
                // base not supported, so we'll let $this == 0
        }
    }

    /**
     * Sets engine type.
     *
     * Throws an exception if the type is invalid
     *
     * @param class-string<Engine> $engine
     */
    public static function setModExpEngine($engine)
    {
        $fqengine = '\\phpseclib3\\Math\\BigInteger\\Engines\\' . static::ENGINE_DIR . '\\' . $engine;
        if (!class_exists($fqengine) || !method_exists($fqengine, 'isValidEngine')) {
            throw new \InvalidArgumentException("$engine is not a valid engine");
        }
        if (!$fqengine::isValidEngine()) {
            throw new BadConfigurationException("$engine is not setup correctly on this system");
        }
        static::$modexpEngine[static::class] = $fqengine;
    }

    /**
     * Converts a BigInteger to a byte string (eg. base-256).
     *
     * Negative numbers are saved as positive numbers, unless $twos_compliment is set to true, at which point, they're
     * saved as two's compliment.
     * @return string
     */
    protected function toBytesHelper()
    {
        $comparison = $this->compare(new static());
        if ($comparison == 0) {
            return $this->precision > 0 ? str_repeat(chr(0), ($this->precision + 1) >> 3) : '';
        }

        $temp = $comparison < 0 ? $this->add(new static(1)) : $this;
        $bytes = $temp->toBytes();

        if (!strlen($bytes)) { // eg. if the number we're trying to convert is -1
            $bytes = chr(0);
        }

        if (ord($bytes[0]) & 0x80) {
            $bytes = chr(0) . $bytes;
        }

        return $comparison < 0 ? ~$bytes : $bytes;
    }

    /**
     * Converts a BigInteger to a hex string (eg. base-16).
     *
     * @param bool $twos_compliment
     * @return string
     */
    public function toHex($twos_compliment = false)
    {
        return Strings::bin2hex($this->toBytes($twos_compliment));
    }

    /**
     * Converts a BigInteger to a bit string (eg. base-2).
     *
     * Negative numbers are saved as positive numbers, unless $twos_compliment is set to true, at which point, they're
     * saved as two's compliment.
     *
     * @param bool $twos_compliment
     * @return string
     */
    public function toBits($twos_compliment = false)
    {
        $hex = $this->toBytes($twos_compliment);
        $bits = Strings::bin2bits($hex);

        $result = $this->precision > 0 ? substr($bits, -$this->precision) : ltrim($bits, '0');

        if ($twos_compliment && $this->compare(new static()) > 0 && $this->precision <= 0) {
            return '0' . $result;
        }

        return $result;
    }

    /**
     * Calculates modular inverses.
     *
     * Say you have (30 mod 17 * x mod 17) mod 17 == 1.  x can be found using modular inverses.
     *
     * {@internal See {@link http://www.cacr.math.uwaterloo.ca/hac/about/chap14.pdf#page=21 HAC 14.64} for more information.}
     *
     * @param Engine $n
     * @return static|false
     */
    protected function modInverseHelper(Engine $n)
    {
        // $x mod -$n == $x mod $n.
        $n = $n->abs();

        if ($this->compare(static::$zero[static::class]) < 0) {
            $temp = $this->abs();
            $temp = $temp->modInverse($n);
            return $this->normalize($n->subtract($temp));
        }

        $extended = $this->extendedGCD($n);
        $gcd = $extended['gcd'];
        $x = $extended['x'];

        if (!$gcd->equals(static::$one[static::class])) {
            return false;
        }

        $x = $x->compare(static::$zero[static::class]) < 0 ? $x->add($n) : $x;

        return $this->compare(static::$zero[static::class]) < 0 ? $this->normalize($n->subtract($x)) : $this->normalize($x);
    }

    /**
     * Serialize
     *
     * Will be called, automatically, when serialize() is called on a BigInteger object.
     *
     * @return array
     */
    public function __sleep()
    {
        $this->hex = $this->toHex(true);
        $vars = ['hex'];
        if ($this->precision > 0) {
            $vars[] = 'precision';
        }
        return $vars;
    }

    /**
     * Serialize
     *
     * Will be called, automatically, when unserialize() is called on a BigInteger object.
     *
     * @return void
     */
    public function __wakeup()
    {
        $temp = new static($this->hex, -16);
        $this->value = $temp->value;
        $this->is_negative = $temp->is_negative;
        if ($this->precision > 0) {
            // recalculate $this->bitmask
            $this->setPrecision($this->precision);
        }
    }

    /**
     *  __serialize() magic method
     *
     * __sleep / __wakeup were depreciated in PHP 8.5
     * Will be called, automatically, when serialize() is called on a Math_BigInteger object.
     *
     * @see self::__unserialize()
     * @access public
     */
    public function __serialize()
    {
        $result = ['hex' => $this->toHex(true)];
        if ($this->precision > 0) {
            $result['precision'] = $this->precision;
        }
        return $result;
    }

    /**
     *  __unserialize() magic method
     *
     * __sleep / __wakeup were depreciated in PHP 8.5
     * Will be called, automatically, when unserialize() is called on a Math_BigInteger object.
     *
     * @see self::__serialize()
     * @access public
     */
    public function __unserialize(array $data)
    {
        $temp = new static($data['hex'], -16);
        $this->value = $temp->value;
        $this->is_negative = $temp->is_negative;
        if (isset($data['precision']) && $data['precision'] > 0) {
            // recalculate $this->bitmask
            $this->setPrecision($data['precision']);
        }
    }

    /**
     * JSON Serialize
     *
     * Will be called, automatically, when json_encode() is called on a BigInteger object.
     *
     * @return array{hex: string, precision?: int]
     */
    #[\ReturnTypeWillChange]
    public function jsonSerialize()
    {
        $result = ['hex' => $this->toHex(true)];
        if ($this->precision > 0) {
            $result['precision'] = $this->precision;
        }
        return $result;
    }

    /**
     * Converts a BigInteger to a base-10 number.
     *
     * @return string
     */
    public function __toString()
    {
        return $this->toString();
    }

    /**
     *  __debugInfo() magic method
     *
     * Will be called, automatically, when print_r() or var_dump() are called
     *
     * @return array
     */
    public function __debugInfo()
    {
        $result = [
            'value' => '0x' . $this->toHex(true),
            'engine' => basename(static::class)
        ];
        return $this->precision > 0 ? $result + ['precision' => $this->precision] : $result;
    }

    /**
     * Set Precision
     *
     * Some bitwise operations give different results depending on the precision being used.  Examples include left
     * shift, not, and rotates.
     *
     * @param int $bits
     */
    public function setPrecision($bits)
    {
        if ($bits < 1) {
            $this->precision = -1;
            $this->bitmask = false;

            return;
        }
        $this->precision = $bits;
        $this->bitmask = static::setBitmask($bits);

        $temp = $this->normalize($this);
        $this->value = $temp->value;
    }

    /**
     * Get Precision
     *
     * Returns the precision if it exists, -1 if it doesn't
     *
     * @return int
     */
    public function getPrecision()
    {
        return $this->precision;
    }

    /**
     * Set Bitmask
     * @return static
     * @param int $bits
     * @see self::setPrecision()
     */
    protected static function setBitmask($bits)
    {
        return new static(chr((1 << ($bits & 0x7)) - 1) . str_repeat(chr(0xFF), $bits >> 3), 256);
    }

    /**
     * Logical Not
     *
     * @return Engine|string
     */
    public function bitwise_not()
    {
        // calculuate "not" without regard to $this->precision
        // (will always result in a smaller number.  ie. ~1 isn't 1111 1110 - it's 0)
        $temp = $this->toBytes();
        if ($temp == '') {
            return $this->normalize(static::$zero[static::class]);
        }
        $pre_msb = decbin(ord($temp[0]));
        $temp = ~$temp;
        $msb = decbin(ord($temp[0]));
        if (strlen($msb) == 8) {
            $msb = substr($msb, strpos($msb, '0'));
        }
        $temp[0] = chr(bindec($msb));

        // see if we need to add extra leading 1's
        $current_bits = strlen($pre_msb) + 8 * strlen($temp) - 8;
        $new_bits = $this->precision - $current_bits;
        if ($new_bits <= 0) {
            return $this->normalize(new static($temp, 256));
        }

        // generate as many leading 1's as we need to.
        $leading_ones = chr((1 << ($new_bits & 0x7)) - 1) . str_repeat(chr(0xFF), $new_bits >> 3);

        self::base256_lshift($leading_ones, $current_bits);

        $temp = str_pad($temp, strlen($leading_ones), chr(0), STR_PAD_LEFT);

        return $this->normalize(new static($leading_ones | $temp, 256));
    }

    /**
     * Logical Left Shift
     *
     * Shifts binary strings $shift bits, essentially multiplying by 2**$shift.
     *
     * @param string $x
     * @param int $shift
     * @return void
     */
    protected static function base256_lshift(&$x, $shift)
    {
        if ($shift == 0) {
            return;
        }

        $num_bytes = $shift >> 3; // eg. floor($shift/8)
        $shift &= 7; // eg. $shift % 8

        $carry = 0;
        for ($i = strlen($x) - 1; $i >= 0; --$i) {
            $temp = ord($x[$i]) << $shift | $carry;
            $x[$i] = chr($temp);
            $carry = $temp >> 8;
        }
        $carry = ($carry != 0) ? chr($carry) : '';
        $x = $carry . $x . str_repeat(chr(0), $num_bytes);
    }

    /**
     * Logical Left Rotate
     *
     * Instead of the top x bits being dropped they're appended to the shifted bit string.
     *
     * @param int $shift
     * @return Engine
     */
    public function bitwise_leftRotate($shift)
    {
        $bits = $this->toBytes();

        if ($this->precision > 0) {
            $precision = $this->precision;
            if (static::FAST_BITWISE) {
                $mask = $this->bitmask->toBytes();
            } else {
                $mask = $this->bitmask->subtract(new static(1));
                $mask = $mask->toBytes();
            }
        } else {
            $temp = ord($bits[0]);
            for ($i = 0; $temp >> $i; ++$i) {
            }
            $precision = 8 * strlen($bits) - 8 + $i;
            $mask = chr((1 << ($precision & 0x7)) - 1) . str_repeat(chr(0xFF), $precision >> 3);
        }

        if ($shift < 0) {
            $shift += $precision;
        }
        $shift %= $precision;

        if (!$shift) {
            return clone $this;
        }

        $left = $this->bitwise_leftShift($shift);
        $left = $left->bitwise_and(new static($mask, 256));
        $right = $this->bitwise_rightShift($precision - $shift);
        $result = static::FAST_BITWISE ? $left->bitwise_or($right) : $left->add($right);
        return $this->normalize($result);
    }

    /**
     * Logical Right Rotate
     *
     * Instead of the bottom x bits being dropped they're prepended to the shifted bit string.
     *
     * @param int $shift
     * @return Engine
     */
    public function bitwise_rightRotate($shift)
    {
        return $this->bitwise_leftRotate(-$shift);
    }

    /**
     * Returns the smallest and largest n-bit number
     *
     * @param int $bits
     * @return array{min: static, max: static}
     */
    public static function minMaxBits($bits)
    {
        $bytes = $bits >> 3;
        $min = str_repeat(chr(0), $bytes);
        $max = str_repeat(chr(0xFF), $bytes);
        $msb = $bits & 7;
        if ($msb) {
            $min = chr(1 << ($msb - 1)) . $min;
            $max = chr((1 << $msb) - 1) . $max;
        } else {
            $min[0] = chr(0x80);
        }
        return [
            'min' => new static($min, 256),
            'max' => new static($max, 256)
        ];
    }

    /**
     * Return the size of a BigInteger in bits
     *
     * @return int
     */
    public function getLength()
    {
        return strlen($this->toBits());
    }

    /**
     * Return the size of a BigInteger in bytes
     *
     * @return int
     */
    public function getLengthInBytes()
    {
        return (int) ceil($this->getLength() / 8);
    }

    /**
     * Performs some pre-processing for powMod
     *
     * @param Engine $e
     * @param Engine $n
     * @return static|false
     */
    protected function powModOuter(Engine $e, Engine $n)
    {
        $n = $this->bitmask !== false && $this->bitmask->compare($n) < 0 ? $this->bitmask : $n->abs();

        if ($e->compare(new static()) < 0) {
            $e = $e->abs();

            $temp = $this->modInverse($n);
            if ($temp === false) {
                return false;
            }

            return $this->normalize($temp->powModInner($e, $n));
        }

        if ($this->compare($n) > 0 || $this->isNegative()) {
            list(, $temp) = $this->divide($n);
            return $temp->powModInner($e, $n);
        }

        return $this->powModInner($e, $n);
    }

    /**
     * Sliding Window k-ary Modular Exponentiation
     *
     * Based on {@link http://www.cacr.math.uwaterloo.ca/hac/about/chap14.pdf#page=27 HAC 14.85} /
     * {@link http://math.libtomcrypt.com/files/tommath.pdf#page=210 MPM 7.7}.  In a departure from those algorithims,
     * however, this function performs a modular reduction after every multiplication and squaring operation.
     * As such, this function has the same preconditions that the reductions being used do.
     *
     * @template T of Engine
     * @param Engine $x
     * @param Engine $e
     * @param Engine $n
     * @param class-string<T> $class
     * @return T
     */
    protected static function slidingWindow(Engine $x, Engine $e, Engine $n, $class)
    {
        static $window_ranges = [7, 25, 81, 241, 673, 1793]; // from BigInteger.java's oddModPow function
        //static $window_ranges = [0, 7, 36, 140, 450, 1303, 3529]; // from MPM 7.3.1

        $e_bits = $e->toBits();
        $e_length = strlen($e_bits);

        // calculate the appropriate window size.
        // $window_size == 3 if $window_ranges is between 25 and 81, for example.
        for ($i = 0, $window_size = 1; $i < count($window_ranges) && $e_length > $window_ranges[$i]; ++$window_size, ++$i) {
        }

        $n_value = $n->value;

        if (method_exists(static::class, 'generateCustomReduction')) {
            static::generateCustomReduction($n, $class);
        }

        // precompute $this^0 through $this^$window_size
        $powers = [];
        $powers[1] = static::prepareReduce($x->value, $n_value, $class);
        $powers[2] = static::squareReduce($powers[1], $n_value, $class);

        // we do every other number since substr($e_bits, $i, $j+1) (see below) is supposed to end
        // in a 1.  ie. it's supposed to be odd.
        $temp = 1 << ($window_size - 1);
        for ($i = 1; $i < $temp; ++$i) {
            $i2 = $i << 1;
            $powers[$i2 + 1] = static::multiplyReduce($powers[$i2 - 1], $powers[2], $n_value, $class);
        }

        $result = new $class(1);
        $result = static::prepareReduce($result->value, $n_value, $class);

        for ($i = 0; $i < $e_length;) {
            if (!$e_bits[$i]) {
                $result = static::squareReduce($result, $n_value, $class);
                ++$i;
            } else {
                for ($j = $window_size - 1; $j > 0; --$j) {
                    if (!empty($e_bits[$i + $j])) {
                        break;
                    }
                }

                // eg. the length of substr($e_bits, $i, $j + 1)
                for ($k = 0; $k <= $j; ++$k) {
                    $result = static::squareReduce($result, $n_value, $class);
                }

                $result = static::multiplyReduce($result, $powers[bindec(substr($e_bits, $i, $j + 1))], $n_value, $class);

                $i += $j + 1;
            }
        }

        $temp = new $class();
        $temp->value = static::reduce($result, $n_value, $class);

        return $temp;
    }

    /**
     * Generates a random number of a certain size
     *
     * Bit length is equal to $size
     *
     * @param int $size
     * @return Engine
     */
    public static function random($size)
    {
        $minMax = static::minMaxBits($size);
        $min = $minMax['min'];
        $max = $minMax['max'];
        return static::randomRange($min, $max);
    }

    /**
     * Generates a random prime number of a certain size
     *
     * Bit length is equal to $size
     *
     * @param int $size
     * @return Engine
     */
    public static function randomPrime($size)
    {
        $minMax = static::minMaxBits($size);
        $min = $minMax['min'];
        $max = $minMax['max'];
        return static::randomRangePrime($min, $max);
    }

    /**
     * Performs some pre-processing for randomRangePrime
     *
     * @param Engine $min
     * @param Engine $max
     * @return static|false
     */
    protected static function randomRangePrimeOuter(Engine $min, Engine $max)
    {
        $compare = $max->compare($min);

        if (!$compare) {
            return $min->isPrime() ? $min : false;
        } elseif ($compare < 0) {
            // if $min is bigger then $max, swap $min and $max
            $temp = $max;
            $max = $min;
            $min = $temp;
        }

        $length = $max->getLength();
        if ($length > 8196) {
            throw new \RuntimeException("Generation of random prime numbers larger than 8196 has been disabled ($length)");
        }

        $x = static::randomRange($min, $max);

        return static::randomRangePrimeInner($x, $min, $max);
    }

    /**
     * Generate a random number between a range
     *
     * Returns a random number between $min and $max where $min and $max
     * can be defined using one of the two methods:
     *
     * BigInteger::randomRange($min, $max)
     * BigInteger::randomRange($max, $min)
     *
     * @param Engine $min
     * @param Engine $max
     * @return Engine
     */
    protected static function randomRangeHelper(Engine $min, Engine $max)
    {
        $compare = $max->compare($min);

        if (!$compare) {
            return $min;
        } elseif ($compare < 0) {
            // if $min is bigger then $max, swap $min and $max
            $temp = $max;
            $max = $min;
            $min = $temp;
        }

        if (!isset(static::$one[static::class])) {
            static::$one[static::class] = new static(1);
        }

        $max = $max->subtract($min->subtract(static::$one[static::class]));

        $size = strlen(ltrim($max->toBytes(), chr(0)));

        /*
            doing $random % $max doesn't work because some numbers will be more likely to occur than others.
            eg. if $max is 140 and $random's max is 255 then that'd mean both $random = 5 and $random = 145
            would produce 5 whereas the only value of random that could produce 139 would be 139. ie.
            not all numbers would be equally likely. some would be more likely than others.

            creating a whole new random number until you find one that is within the range doesn't work
            because, for sufficiently small ranges, the likelihood that you'd get a number within that range
            would be pretty small. eg. with $random's max being 255 and if your $max being 1 the probability
            would be pretty high that $random would be greater than $max.

            phpseclib works around this using the technique described here:

            http://crypto.stackexchange.com/questions/5708/creating-a-small-number-from-a-cryptographically-secure-random-string
        */
        $random_max = new static(chr(1) . str_repeat("\0", $size), 256);
        $random = new static(Random::string($size), 256);

        list($max_multiple) = $random_max->divide($max);
        $max_multiple = $max_multiple->multiply($max);

        while ($random->compare($max_multiple) >= 0) {
            $random = $random->subtract($max_multiple);
            $random_max = $random_max->subtract($max_multiple);
            $random = $random->bitwise_leftShift(8);
            $random = $random->add(new static(Random::string(1), 256));
            $random_max = $random_max->bitwise_leftShift(8);
            list($max_multiple) = $random_max->divide($max);
            $max_multiple = $max_multiple->multiply($max);
        }
        list(, $random) = $random->divide($max);

        return $random->add($min);
    }

    /**
     * Performs some post-processing for randomRangePrime
     *
     * @param Engine $x
     * @param Engine $min
     * @param Engine $max
     * @return static|false
     */
    protected static function randomRangePrimeInner(Engine $x, Engine $min, Engine $max)
    {
        if (!isset(static::$two[static::class])) {
            static::$two[static::class] = new static('2');
        }

        $x->make_odd();
        if ($x->compare($max) > 0) {
            // if $x > $max then $max is even and if $min == $max then no prime number exists between the specified range
            if ($min->equals($max)) {
                return false;
            }
            $x = clone $min;
            $x->make_odd();
        }

        $initial_x = clone $x;

        while (true) {
            if ($x->isPrime()) {
                return $x;
            }

            $x = $x->add(static::$two[static::class]);

            if ($x->compare($max) > 0) {
                $x = clone $min;
                if ($x->equals(static::$two[static::class])) {
                    return $x;
                }
                $x->make_odd();
            }

            if ($x->equals($initial_x)) {
                return false;
            }
        }
    }

    /**
     * Sets the $t parameter for primality testing
     *
     * @return int
     */
    protected function setupIsPrime()
    {
        $length = $this->getLengthInBytes();

        // see HAC 4.49 "Note (controlling the error probability)"
        // @codingStandardsIgnoreStart
             if ($length >= 163) { $t =  2; } // floor(1300 / 8)
        else if ($length >= 106) { $t =  3; } // floor( 850 / 8)
        else if ($length >= 81 ) { $t =  4; } // floor( 650 / 8)
        else if ($length >= 68 ) { $t =  5; } // floor( 550 / 8)
        else if ($length >= 56 ) { $t =  6; } // floor( 450 / 8)
        else if ($length >= 50 ) { $t =  7; } // floor( 400 / 8)
        else if ($length >= 43 ) { $t =  8; } // floor( 350 / 8)
        else if ($length >= 37 ) { $t =  9; } // floor( 300 / 8)
        else if ($length >= 31 ) { $t = 12; } // floor( 250 / 8)
        else if ($length >= 25 ) { $t = 15; } // floor( 200 / 8)
        else if ($length >= 18 ) { $t = 18; } // floor( 150 / 8)
        else                     { $t = 27; }
        // @codingStandardsIgnoreEnd

        return $t;
    }

    /**
     * Tests Primality
     *
     * Uses the {@link http://en.wikipedia.org/wiki/Miller%E2%80%93Rabin_primality_test Miller-Rabin primality test}.
     * See {@link http://www.cacr.math.uwaterloo.ca/hac/about/chap4.pdf#page=8 HAC 4.24} for more info.
     *
     * @param int $t
     * @return bool
     */
    protected function testPrimality($t)
    {
        if (!$this->testSmallPrimes()) {
            return false;
        }

        $n   = clone $this;
        $n_1 = $n->subtract(static::$one[static::class]);
        $n_2 = $n->subtract(static::$two[static::class]);

        $r = clone $n_1;
        $s = static::scan1divide($r);

        for ($i = 0; $i < $t; ++$i) {
            $a = static::randomRange(static::$two[static::class], $n_2);
            $y = $a->modPow($r, $n);

            if (!$y->equals(static::$one[static::class]) && !$y->equals($n_1)) {
                for ($j = 1; $j < $s && !$y->equals($n_1); ++$j) {
                    $y = $y->modPow(static::$two[static::class], $n);
                    if ($y->equals(static::$one[static::class])) {
                        return false;
                    }
                }

                if (!$y->equals($n_1)) {
                    return false;
                }
            }
        }

        return true;
    }

    /**
     * Checks a numer to see if it's prime
     *
     * Assuming the $t parameter is not set, this function has an error rate of 2**-80.  The main motivation for the
     * $t parameter is distributability.  BigInteger::randomPrime() can be distributed across multiple pageloads
     * on a website instead of just one.
     *
     * @param int|bool $t
     * @return bool
     */
    public function isPrime($t = false)
    {
        // OpenSSL limits RSA keys to 16384 bits. The length of an RSA key is equal to the length of the modulo, which is
        // produced by multiplying the primes p and q by one another. The largest number two 8196 bit primes can produce is
        // a 16384 bit number so, basically, 8196 bit primes are the largest OpenSSL will generate and if that's the largest
        // that it'll generate it also stands to reason that that's the largest you'll be able to test primality on
        $length = $this->getLength();
        if ($length > 8196) {
            throw new \RuntimeException("Primality testing is not supported for numbers larger than 8196 bits ($length)");
        }

        if (!$t) {
            $t = $this->setupIsPrime();
        }
        return $this->testPrimality($t);
    }

    /**
     * Performs a few preliminary checks on root
     *
     * @param int $n
     * @return Engine
     */
    protected function rootHelper($n)
    {
        if ($n < 1) {
            return clone static::$zero[static::class];
        } // we want positive exponents
        if ($this->compare(static::$one[static::class]) < 0) {
            return clone static::$zero[static::class];
        } // we want positive numbers
        if ($this->compare(static::$two[static::class]) < 0) {
            return clone static::$one[static::class];
        } // n-th root of 1 or 2 is 1

        return $this->rootInner($n);
    }

    /**
     * Calculates the nth root of a biginteger.
     *
     * Returns the nth root of a positive biginteger, where n defaults to 2
     *
     * {@internal This function is based off of {@link http://mathforum.org/library/drmath/view/52605.html this page} and {@link http://stackoverflow.com/questions/11242920/calculating-nth-root-with-bcmath-in-php this stackoverflow question}.}
     *
     * @param int $n
     * @return Engine
     */
    protected function rootInner($n)
    {
        $n = new static($n);

        // g is our guess number
        $g = static::$two[static::class];
        // while (g^n < num) g=g*2
        while ($g->pow($n)->compare($this) < 0) {
            $g = $g->multiply(static::$two[static::class]);
        }
        // if (g^n==num) num is a power of 2, we're lucky, end of job
        // == 0 bccomp(bcpow($g, $n), $n->value)==0
        if ($g->pow($n)->equals($this) > 0) {
            $root = $g;
            return $this->normalize($root);
        }

        // if we're here num wasn't a power of 2 :(
        $og = $g; // og means original guess and here is our upper bound
        $g = $g->divide(static::$two[static::class])[0]; // g is set to be our lower bound
        $step = $og->subtract($g)->divide(static::$two[static::class])[0]; // step is the half of upper bound - lower bound
        $g = $g->add($step); // we start at lower bound + step , basically in the middle of our interval

        // while step>1

        while ($step->compare(static::$one[static::class]) == 1) {
            $guess = $g->pow($n);
            $step = $step->divide(static::$two[static::class])[0];
            $comp = $guess->compare($this); // compare our guess with real number
            switch ($comp) {
                case -1: // if guess is lower we add the new step
                    $g = $g->add($step);
                    break;
                case 1: // if guess is higher we sub the new step
                    $g = $g->subtract($step);
                    break;
                case 0: // if guess is exactly the num we're done, we return the value
                    $root = $g;
                    break 2;
            }
        }

        if ($comp == 1) {
            $g = $g->subtract($step);
        }

        // whatever happened, g is the closest guess we can make so return it
        $root = $g;

        return $this->normalize($root);
    }

    /**
     * Calculates the nth root of a biginteger.
     *
     * @param int $n
     * @return Engine
     */
    public function root($n = 2)
    {
        return $this->rootHelper($n);
    }

    /**
     * Return the minimum BigInteger between an arbitrary number of BigIntegers.
     *
     * @param array $nums
     * @return Engine
     */
    protected static function minHelper(array $nums)
    {
        if (count($nums) == 1) {
            return $nums[0];
        }
        $min = $nums[0];
        for ($i = 1; $i < count($nums); $i++) {
            $min = $min->compare($nums[$i]) > 0 ? $nums[$i] : $min;
        }
        return $min;
    }

    /**
     * Return the minimum BigInteger between an arbitrary number of BigIntegers.
     *
     * @param array $nums
     * @return Engine
     */
    protected static function maxHelper(array $nums)
    {
        if (count($nums) == 1) {
            return $nums[0];
        }
        $max = $nums[0];
        for ($i = 1; $i < count($nums); $i++) {
            $max = $max->compare($nums[$i]) < 0 ? $nums[$i] : $max;
        }
        return $max;
    }

    /**
     * Create Recurring Modulo Function
     *
     * Sometimes it may be desirable to do repeated modulos with the same number outside of
     * modular exponentiation
     *
     * @return callable
     */
    public function createRecurringModuloFunction()
    {
        $class = static::class;

        $fqengine = !method_exists(static::$modexpEngine[static::class], 'reduce') ?
            '\\phpseclib3\\Math\\BigInteger\\Engines\\' . static::ENGINE_DIR . '\\DefaultEngine' :
            static::$modexpEngine[static::class];
        if (method_exists($fqengine, 'generateCustomReduction')) {
            $func = $fqengine::generateCustomReduction($this, static::class);
            return eval('return function(' . static::class . ' $x) use ($func, $class) {
                $r = new $class();
                $r->value = $func($x->value);
                return $r;
            };');
        }
        $n = $this->value;
        return eval('return function(' . static::class . ' $x) use ($n, $fqengine, $class) {
            $r = new $class();
            $r->value = $fqengine::reduce($x->value, $n, $class);
            return $r;
        };');
    }

    /**
     * Calculates the greatest common divisor and Bezout's identity.
     *
     * @param Engine $n
     * @return array{gcd: Engine, x: Engine, y: Engine}
     */
    protected function extendedGCDHelper(Engine $n)
    {
        $u = clone $this;
        $v = clone $n;

        $one = new static(1);
        $zero = new static();

        $a = clone $one;
        $b = clone $zero;
        $c = clone $zero;
        $d = clone $one;

        while (!$v->equals($zero)) {
            list($q) = $u->divide($v);

            $temp = $u;
            $u = $v;
            $v = $temp->subtract($v->multiply($q));

            $temp = $a;
            $a = $c;
            $c = $temp->subtract($a->multiply($q));

            $temp = $b;
            $b = $d;
            $d = $temp->subtract($b->multiply($q));
        }

        return [
            'gcd' => $u,
            'x' => $a,
            'y' => $b
        ];
    }

    /**
     * Bitwise Split
     *
     * Splits BigInteger's into chunks of $split bits
     *
     * @param int $split
     * @return Engine[]
     */
    public function bitwise_split($split)
    {
        if ($split < 1) {
            throw new \RuntimeException('Offset must be greater than 1');
        }

        $mask = static::$one[static::class]->bitwise_leftShift($split)->subtract(static::$one[static::class]);

        $num = clone $this;

        $vals = [];
        while (!$num->equals(static::$zero[static::class])) {
            $vals[] = $num->bitwise_and($mask);
            $num = $num->bitwise_rightShift($split);
        }

        return array_reverse($vals);
    }

    /**
     * Logical And
     *
     * @param Engine $x
     * @return Engine
     */
    protected function bitwiseAndHelper(Engine $x)
    {
        $left = $this->toBytes(true);
        $right = $x->toBytes(true);

        $length = max(strlen($left), strlen($right));

        $left = str_pad($left, $length, chr(0), STR_PAD_LEFT);
        $right = str_pad($right, $length, chr(0), STR_PAD_LEFT);

        return $this->normalize(new static($left & $right, -256));
    }

    /**
     * Logical Or
     *
     * @param Engine $x
     * @return Engine
     */
    protected function bitwiseOrHelper(Engine $x)
    {
        $left = $this->toBytes(true);
        $right = $x->toBytes(true);

        $length = max(strlen($left), strlen($right));

        $left = str_pad($left, $length, chr(0), STR_PAD_LEFT);
        $right = str_pad($right, $length, chr(0), STR_PAD_LEFT);

        return $this->normalize(new static($left | $right, -256));
    }

    /**
     * Logical Exclusive Or
     *
     * @param Engine $x
     * @return Engine
     */
    protected function bitwiseXorHelper(Engine $x)
    {
        $left = $this->toBytes(true);
        $right = $x->toBytes(true);

        $length = max(strlen($left), strlen($right));


        $left = str_pad($left, $length, chr(0), STR_PAD_LEFT);
        $right = str_pad($right, $length, chr(0), STR_PAD_LEFT);
        return $this->normalize(new static($left ^ $right, -256));
    }
}
<?php

/**
 * GMP BigInteger Engine
 *
 * PHP version 5 and 7
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2017 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://pear.php.net/package/Math_BigInteger
 */

namespace phpseclib3\Math\BigInteger\Engines;

use phpseclib3\Exception\BadConfigurationException;

/**
 * GMP Engine.
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
class GMP extends Engine
{
    /**
     * Can Bitwise operations be done fast?
     *
     * @see parent::bitwise_leftRotate()
     * @see parent::bitwise_rightRotate()
     */
    const FAST_BITWISE = true;

    /**
     * Engine Directory
     *
     * @see parent::setModExpEngine
     */
    const ENGINE_DIR = 'GMP';

    /**
     * Test for engine validity
     *
     * @return bool
     * @see parent::__construct()
     */
    public static function isValidEngine()
    {
        return extension_loaded('gmp');
    }

    /**
     * Default constructor
     *
     * @param mixed $x integer Base-10 number or base-$base number if $base set.
     * @param int $base
     * @see parent::__construct()
     */
    public function __construct($x = 0, $base = 10)
    {
        if (!isset(static::$isValidEngine[static::class])) {
            static::$isValidEngine[static::class] = self::isValidEngine();
        }
        if (!static::$isValidEngine[static::class]) {
            throw new BadConfigurationException('GMP is not setup correctly on this system');
        }

        if ($x instanceof \GMP) {
            $this->value = $x;
            return;
        }

        $this->value = gmp_init(0);

        parent::__construct($x, $base);
    }

    /**
     * Initialize a GMP BigInteger Engine instance
     *
     * @param int $base
     * @see parent::__construct()
     */
    protected function initialize($base)
    {
        switch (abs($base)) {
            case 256:
                $this->value = gmp_import($this->value);
                if ($this->is_negative) {
                    $this->value = -$this->value;
                }
                break;
            case 16:
                $temp = $this->is_negative ? '-0x' . $this->value : '0x' . $this->value;
                $this->value = gmp_init($temp);
                break;
            case 10:
                $this->value = gmp_init(isset($this->value) ? $this->value : '0');
        }
    }

    /**
     * Converts a BigInteger to a base-10 number.
     *
     * @return string
     */
    public function toString()
    {
        return (string)$this->value;
    }

    /**
     * Converts a BigInteger to a bit string (eg. base-2).
     *
     * Negative numbers are saved as positive numbers, unless $twos_compliment is set to true, at which point, they're
     * saved as two's compliment.
     *
     * @param bool $twos_compliment
     * @return string
     */
    public function toBits($twos_compliment = false)
    {
        $hex = $this->toHex($twos_compliment);

        $bits = gmp_strval(gmp_init($hex, 16), 2);

        if ($this->precision > 0) {
            $bits = substr($bits, -$this->precision);
        }

        if ($twos_compliment && $this->compare(new static()) > 0 && $this->precision <= 0) {
            return '0' . $bits;
        }

        return $bits;
    }

    /**
     * Converts a BigInteger to a byte string (eg. base-256).
     *
     * @param bool $twos_compliment
     * @return string
     */
    public function toBytes($twos_compliment = false)
    {
        if ($twos_compliment) {
            return $this->toBytesHelper();
        }

        if (gmp_cmp($this->value, gmp_init(0)) == 0) {
            return $this->precision > 0 ? str_repeat(chr(0), ($this->precision + 1) >> 3) : '';
        }

        $temp = gmp_export($this->value);

        return $this->precision > 0 ?
            substr(str_pad($temp, $this->precision >> 3, chr(0), STR_PAD_LEFT), -($this->precision >> 3)) :
            ltrim($temp, chr(0));
    }

    /**
     * Adds two BigIntegers.
     *
     * @param GMP $y
     * @return GMP
     */
    public function add(GMP $y)
    {
        $temp = new self();
        $temp->value = $this->value + $y->value;

        return $this->normalize($temp);
    }

    /**
     * Subtracts two BigIntegers.
     *
     * @param GMP $y
     * @return GMP
     */
    public function subtract(GMP $y)
    {
        $temp = new self();
        $temp->value = $this->value - $y->value;

        return $this->normalize($temp);
    }

    /**
     * Multiplies two BigIntegers.
     *
     * @param GMP $x
     * @return GMP
     */
    public function multiply(GMP $x)
    {
        $temp = new self();
        $temp->value = $this->value * $x->value;

        return $this->normalize($temp);
    }

    /**
     * Divides two BigIntegers.
     *
     * Returns an array whose first element contains the quotient and whose second element contains the
     * "common residue".  If the remainder would be positive, the "common residue" and the remainder are the
     * same.  If the remainder would be negative, the "common residue" is equal to the sum of the remainder
     * and the divisor (basically, the "common residue" is the first positive modulo).
     *
     * @param GMP $y
     * @return array{GMP, GMP}
     */
    public function divide(GMP $y)
    {
        $quotient = new self();
        $remainder = new self();

        list($quotient->value, $remainder->value) = gmp_div_qr($this->value, $y->value);

        if (gmp_sign($remainder->value) < 0) {
            $remainder->value = $remainder->value + gmp_abs($y->value);
        }

        return [$this->normalize($quotient), $this->normalize($remainder)];
    }

    /**
     * Compares two numbers.
     *
     * Although one might think !$x->compare($y) means $x != $y, it, in fact, means the opposite.  The reason for this
     * is demonstrated thusly:
     *
     * $x  > $y: $x->compare($y)  > 0
     * $x  < $y: $x->compare($y)  < 0
     * $x == $y: $x->compare($y) == 0
     *
     * Note how the same comparison operator is used.  If you want to test for equality, use $x->equals($y).
     *
     * {@internal Could return $this->subtract($x), but that's not as fast as what we do do.}
     *
     * @param GMP $y
     * @return int in case < 0 if $this is less than $y; > 0 if $this is greater than $y, and 0 if they are equal.
     * @see self::equals()
     */
    public function compare(GMP $y)
    {
        $r = gmp_cmp($this->value, $y->value);
        if ($r < -1) {
            $r = -1;
        }
        if ($r > 1) {
            $r = 1;
        }
        return $r;
    }

    /**
     * Tests the equality of two numbers.
     *
     * If you need to see if one number is greater than or less than another number, use BigInteger::compare()
     *
     * @param GMP $x
     * @return bool
     */
    public function equals(GMP $x)
    {
        return $this->value == $x->value;
    }

    /**
     * Calculates modular inverses.
     *
     * Say you have (30 mod 17 * x mod 17) mod 17 == 1.  x can be found using modular inverses.
     *
     * @param GMP $n
     * @return false|GMP
     */
    public function modInverse(GMP $n)
    {
        $temp = new self();
        $temp->value = gmp_invert($this->value, $n->value);

        return $temp->value === false ? false : $this->normalize($temp);
    }

    /**
     * Calculates the greatest common divisor and Bezout's identity.
     *
     * Say you have 693 and 609.  The GCD is 21.  Bezout's identity states that there exist integers x and y such that
     * 693*x + 609*y == 21.  In point of fact, there are actually an infinite number of x and y combinations and which
     * combination is returned is dependent upon which mode is in use.  See
     * {@link http://en.wikipedia.org/wiki/B%C3%A9zout%27s_identity Bezout's identity - Wikipedia} for more information.
     *
     * @param GMP $n
     * @return GMP[]
     */
    public function extendedGCD(GMP $n)
    {
        $extended = gmp_gcdext($this->value, $n->value);
        $g = $extended['g'];
        $s = $extended['s'];
        $t = $extended['t'];

        return [
            'gcd' => $this->normalize(new self($g)),
            'x' => $this->normalize(new self($s)),
            'y' => $this->normalize(new self($t))
        ];
    }

    /**
     * Calculates the greatest common divisor
     *
     * Say you have 693 and 609.  The GCD is 21.
     *
     * @param GMP $n
     * @return GMP
     */
    public function gcd(GMP $n)
    {
        $r = gmp_gcd($this->value, $n->value);
        return $this->normalize(new self($r));
    }

    /**
     * Absolute value.
     *
     * @return GMP
     */
    public function abs()
    {
        $temp = new self();
        $temp->value = gmp_abs($this->value);

        return $temp;
    }

    /**
     * Logical And
     *
     * @param GMP $x
     * @return GMP
     */
    public function bitwise_and(GMP $x)
    {
        $temp = new self();
        $temp->value = $this->value & $x->value;

        return $this->normalize($temp);
    }

    /**
     * Logical Or
     *
     * @param GMP $x
     * @return GMP
     */
    public function bitwise_or(GMP $x)
    {
        $temp = new self();
        $temp->value = $this->value | $x->value;

        return $this->normalize($temp);
    }

    /**
     * Logical Exclusive Or
     *
     * @param GMP $x
     * @return GMP
     */
    public function bitwise_xor(GMP $x)
    {
        $temp = new self();
        $temp->value = $this->value ^ $x->value;

        return $this->normalize($temp);
    }

    /**
     * Logical Right Shift
     *
     * Shifts BigInteger's by $shift bits, effectively dividing by 2**$shift.
     *
     * @param int $shift
     * @return GMP
     */
    public function bitwise_rightShift($shift)
    {
        // 0xFFFFFFFF >> 2 == -1 (on 32-bit systems)
        // gmp_init('0xFFFFFFFF') >> 2 == gmp_init('0x3FFFFFFF')

        $temp = new self();
        $temp->value = $this->value >> $shift;

        return $this->normalize($temp);
    }

    /**
     * Logical Left Shift
     *
     * Shifts BigInteger's by $shift bits, effectively multiplying by 2**$shift.
     *
     * @param int $shift
     * @return GMP
     */
    public function bitwise_leftShift($shift)
    {
        $temp = new self();
        $temp->value = $this->value << $shift;

        return $this->normalize($temp);
    }

    /**
     * Performs modular exponentiation.
     *
     * @param GMP $e
     * @param GMP $n
     * @return GMP
     */
    public function modPow(GMP $e, GMP $n)
    {
        return $this->powModOuter($e, $n);
    }

    /**
     * Performs modular exponentiation.
     *
     * Alias for modPow().
     *
     * @param GMP $e
     * @param GMP $n
     * @return GMP
     */
    public function powMod(GMP $e, GMP $n)
    {
        return $this->powModOuter($e, $n);
    }

    /**
     * Performs modular exponentiation.
     *
     * @param GMP $e
     * @param GMP $n
     * @return GMP
     */
    protected function powModInner(GMP $e, GMP $n)
    {
        $class = static::$modexpEngine[static::class];
        return $class::powModHelper($this, $e, $n);
    }

    /**
     * Normalize
     *
     * Removes leading zeros and truncates (if necessary) to maintain the appropriate precision
     *
     * @param GMP $result
     * @return GMP
     */
    protected function normalize(GMP $result)
    {
        $result->precision = $this->precision;
        $result->bitmask = $this->bitmask;

        if ($result->bitmask !== false) {
            $flip = $result->value < 0;
            if ($flip) {
                $result->value = -$result->value;
            }
            $result->value = $result->value & $result->bitmask->value;
            if ($flip) {
                $result->value = -$result->value;
            }
        }

        return $result;
    }

    /**
     * Performs some post-processing for randomRangePrime
     *
     * @param Engine $x
     * @param Engine $min
     * @param Engine $max
     * @return GMP
     */
    protected static function randomRangePrimeInner(Engine $x, Engine $min, Engine $max)
    {
        $p = gmp_nextprime($x->value);

        if ($p <= $max->value) {
            return new self($p);
        }

        if ($min->value != $x->value) {
            $x = new self($x->value - 1);
        }

        return self::randomRangePrime($min, $x);
    }

    /**
     * Generate a random prime number between a range
     *
     * If there's not a prime within the given range, false will be returned.
     *
     * @param GMP $min
     * @param GMP $max
     * @return false|GMP
     */
    public static function randomRangePrime(GMP $min, GMP $max)
    {
        return self::randomRangePrimeOuter($min, $max);
    }

    /**
     * Generate a random number between a range
     *
     * Returns a random number between $min and $max where $min and $max
     * can be defined using one of the two methods:
     *
     * BigInteger::randomRange($min, $max)
     * BigInteger::randomRange($max, $min)
     *
     * @param GMP $min
     * @param GMP $max
     * @return GMP
     */
    public static function randomRange(GMP $min, GMP $max)
    {
        return self::randomRangeHelper($min, $max);
    }

    /**
     * Make the current number odd
     *
     * If the current number is odd it'll be unchanged.  If it's even, one will be added to it.
     *
     * @see self::randomPrime()
     */
    protected function make_odd()
    {
        gmp_setbit($this->value, 0);
    }

    /**
     * Tests Primality
     *
     * @param int $t
     * @return bool
     */
    protected function testPrimality($t)
    {
        return gmp_prob_prime($this->value, $t) != 0;
    }

    /**
     * Calculates the nth root of a biginteger.
     *
     * Returns the nth root of a positive biginteger, where n defaults to 2
     *
     * @param int $n
     * @return GMP
     */
    protected function rootInner($n)
    {
        $root = new self();
        $root->value = gmp_root($this->value, $n);
        return $this->normalize($root);
    }

    /**
     * Performs exponentiation.
     *
     * @param GMP $n
     * @return GMP
     */
    public function pow(GMP $n)
    {
        $temp = new self();
        $temp->value = $this->value ** $n->value;

        return $this->normalize($temp);
    }

    /**
     * Return the minimum BigInteger between an arbitrary number of BigIntegers.
     *
     * @param GMP ...$nums
     * @return GMP
     */
    public static function min(GMP ...$nums)
    {
        return self::minHelper($nums);
    }

    /**
     * Return the maximum BigInteger between an arbitrary number of BigIntegers.
     *
     * @param GMP ...$nums
     * @return GMP
     */
    public static function max(GMP ...$nums)
    {
        return self::maxHelper($nums);
    }

    /**
     * Tests BigInteger to see if it is between two integers, inclusive
     *
     * @param GMP $min
     * @param GMP $max
     * @return bool
     */
    public function between(GMP $min, GMP $max)
    {
        return $this->compare($min) >= 0 && $this->compare($max) <= 0;
    }

    /**
     * Create Recurring Modulo Function
     *
     * Sometimes it may be desirable to do repeated modulos with the same number outside of
     * modular exponentiation
     *
     * @return callable
     */
    public function createRecurringModuloFunction()
    {
        $temp = $this->value;
        return function (GMP $x) use ($temp) {
            return new GMP($x->value % $temp);
        };
    }

    /**
     * Scan for 1 and right shift by that amount
     *
     * ie. $s = gmp_scan1($n, 0) and $r = gmp_div_q($n, gmp_pow(gmp_init('2'), $s));
     *
     * @param GMP $r
     * @return int
     */
    public static function scan1divide(GMP $r)
    {
        $s = gmp_scan1($r->value, 0);
        $r->value >>= $s;
        return $s;
    }

    /**
     * Is Odd?
     *
     * @return bool
     */
    public function isOdd()
    {
        return gmp_testbit($this->value, 0);
    }

    /**
     * Tests if a bit is set
     *
     * @return bool
     */
    public function testBit($x)
    {
        return gmp_testbit($this->value, $x);
    }

    /**
     * Is Negative?
     *
     * @return bool
     */
    public function isNegative()
    {
        return gmp_sign($this->value) == -1;
    }

    /**
     * Negate
     *
     * Given $k, returns -$k
     *
     * @return GMP
     */
    public function negate()
    {
        $temp = clone $this;
        $temp->value = -$this->value;

        return $temp;
    }
}
<?php

/**
 * GMP Modular Exponentiation Engine
 *
 * PHP version 5 and 7
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2017 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://pear.php.net/package/Math_BigInteger
 */

namespace phpseclib3\Math\BigInteger\Engines\GMP;

use phpseclib3\Math\BigInteger\Engines\GMP;

/**
 * GMP Modular Exponentiation Engine
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class DefaultEngine extends GMP
{
    /**
     * Performs modular exponentiation.
     *
     * @param GMP $x
     * @param GMP $e
     * @param GMP $n
     * @return GMP
     */
    protected static function powModHelper(GMP $x, GMP $e, GMP $n)
    {
        $temp = new GMP();
        $temp->value = gmp_powm($x->value, $e->value, $n->value);

        return $x->normalize($temp);
    }
}
<?php

/**
 * OpenSSL Modular Exponentiation Engine
 *
 * PHP version 5 and 7
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2017 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://pear.php.net/package/Math_BigInteger
 */

namespace phpseclib3\Math\BigInteger\Engines;

use phpseclib3\Crypt\RSA\Formats\Keys\PKCS8;
use phpseclib3\Math\BigInteger;

/**
 * OpenSSL Modular Exponentiation Engine
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class OpenSSL
{
    /**
     * Test for engine validity
     *
     * @return bool
     */
    public static function isValidEngine()
    {
        return extension_loaded('openssl') && static::class != __CLASS__;
    }

    /**
     * Performs modular exponentiation.
     *
     * @param Engine $x
     * @param Engine $e
     * @param Engine $n
     * @return Engine
     */
    public static function powModHelper(Engine $x, Engine $e, Engine $n)
    {
        if ($n->getLengthInBytes() < 31 || $n->getLengthInBytes() > 16384) {
            throw new \OutOfRangeException('Only modulo between 31 and 16384 bits are accepted');
        }

        $key = PKCS8::savePublicKey(
            new BigInteger($n),
            new BigInteger($e)
        );

        $plaintext = str_pad($x->toBytes(), $n->getLengthInBytes(), "\0", STR_PAD_LEFT);

        // this is easily prone to failure. if the modulo is a multiple of 2 or 3 or whatever it
        // won't work and you'll get a "failure: error:0906D06C:PEM routines:PEM_read_bio:no start line"
        // error. i suppose, for even numbers, we could do what PHP\Montgomery.php does, but then what
        // about odd numbers divisible by 3, by 5, etc?
        if (!openssl_public_encrypt($plaintext, $result, $key, OPENSSL_NO_PADDING)) {
            throw new \UnexpectedValueException(openssl_error_string());
        }

        $class = get_class($x);
        return new $class($result, 256);
    }
}
<?php

/**
 * Pure-PHP BigInteger Engine
 *
 * PHP version 5 and 7
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2017 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://pear.php.net/package/Math_BigInteger
 */

namespace phpseclib3\Math\BigInteger\Engines;

use phpseclib3\Common\Functions\Strings;
use phpseclib3\Exception\BadConfigurationException;

/**
 * Pure-PHP Engine.
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class PHP extends Engine
{
    /**#@+
     * Array constants
     *
     * Rather than create a thousands and thousands of new BigInteger objects in repeated function calls to add() and
     * multiply() or whatever, we'll just work directly on arrays, taking them in as parameters and returning them.
     *
     */
    /**
     * $result[self::VALUE] contains the value.
     */
    const VALUE = 0;
    /**
     * $result[self::SIGN] contains the sign.
     */
    const SIGN = 1;
    /**#@-*/

    /**
     * Karatsuba Cutoff
     *
     * At what point do we switch between Karatsuba multiplication and schoolbook long multiplication?
     *
     */
    const KARATSUBA_CUTOFF = 25;

    /**
     * Can Bitwise operations be done fast?
     *
     * @see parent::bitwise_leftRotate()
     * @see parent::bitwise_rightRotate()
     */
    const FAST_BITWISE = true;

    /**
     * Engine Directory
     *
     * @see parent::setModExpEngine
     */
    const ENGINE_DIR = 'PHP';

    /**
     * Default constructor
     *
     * @param mixed $x integer Base-10 number or base-$base number if $base set.
     * @param int $base
     * @return PHP
     * @see parent::__construct()
     */
    public function __construct($x = 0, $base = 10)
    {
        if (!isset(static::$isValidEngine[static::class])) {
            static::$isValidEngine[static::class] = static::isValidEngine();
        }
        if (!static::$isValidEngine[static::class]) {
            throw new BadConfigurationException(static::class . ' is not setup correctly on this system');
        }

        $this->value = [];
        parent::__construct($x, $base);
    }

    /**
     * Initialize a PHP BigInteger Engine instance
     *
     * @param int $base
     * @see parent::__construct()
     */
    protected function initialize($base)
    {
        switch (abs($base)) {
            case 16:
                $x = (strlen($this->value) & 1) ? '0' . $this->value : $this->value;
                $temp = new static(Strings::hex2bin($x), 256);
                $this->value = $temp->value;
                break;
            case 10:
                $temp = new static();

                $multiplier = new static();
                $multiplier->value = [static::MAX10];

                $x = $this->value;

                if ($x[0] == '-') {
                    $this->is_negative = true;
                    $x = substr($x, 1);
                }

                $x = str_pad(
                    $x,
                    strlen($x) + ((static::MAX10LEN - 1) * strlen($x)) % static::MAX10LEN,
                    0,
                    STR_PAD_LEFT
                );
                while (strlen($x)) {
                    $temp = $temp->multiply($multiplier);
                    $temp = $temp->add(new static($this->int2bytes(substr($x, 0, static::MAX10LEN)), 256));
                    $x = substr($x, static::MAX10LEN);
                }

                $this->value = $temp->value;
        }
    }

    /**
     * Pads strings so that unpack may be used on them
     *
     * @param string $str
     * @return string
     */
    protected function pad($str)
    {
        $length = strlen($str);

        $pad = 4 - (strlen($str) % 4);

        return str_pad($str, $length + $pad, "\0", STR_PAD_LEFT);
    }

    /**
     * Converts a BigInteger to a base-10 number.
     *
     * @return string
     */
    public function toString()
    {
        if (!count($this->value)) {
            return '0';
        }

        $temp = clone $this;
        $temp->bitmask = false;
        $temp->is_negative = false;

        $divisor = new static();
        $divisor->value = [static::MAX10];
        $result = '';
        while (count($temp->value)) {
            list($temp, $mod) = $temp->divide($divisor);
            $result = str_pad(
                isset($mod->value[0]) ? $mod->value[0] : '',
                static::MAX10LEN,
                '0',
                STR_PAD_LEFT
            ) . $result;
        }
        $result = ltrim($result, '0');
        if (empty($result)) {
            $result = '0';
        }

        if ($this->is_negative) {
            $result = '-' . $result;
        }

        return $result;
    }

    /**
     * Converts a BigInteger to a byte string (eg. base-256).
     *
     * @param bool $twos_compliment
     * @return string
     */
    public function toBytes($twos_compliment = false)
    {
        if ($twos_compliment) {
            return $this->toBytesHelper();
        }

        if (!count($this->value)) {
            return $this->precision > 0 ? str_repeat(chr(0), ($this->precision + 1) >> 3) : '';
        }

        $result = $this->bitwise_small_split(8);
        $result = implode('', array_map('chr', $result));

        return $this->precision > 0 ?
            str_pad(
                substr($result, -(($this->precision + 7) >> 3)),
                ($this->precision + 7) >> 3,
                chr(0),
                STR_PAD_LEFT
            ) :
            $result;
    }

    /**
     * Performs addition.
     *
     * @param array $x_value
     * @param bool $x_negative
     * @param array $y_value
     * @param bool $y_negative
     * @return array
     */
    protected static function addHelper(array $x_value, $x_negative, array $y_value, $y_negative)
    {
        $x_size = count($x_value);
        $y_size = count($y_value);

        if ($x_size == 0) {
            return [
                self::VALUE => $y_value,
                self::SIGN => $y_negative
            ];
        } elseif ($y_size == 0) {
            return [
                self::VALUE => $x_value,
                self::SIGN => $x_negative
            ];
        }

        // subtract, if appropriate
        if ($x_negative != $y_negative) {
            if ($x_value == $y_value) {
                return [
                    self::VALUE => [],
                    self::SIGN => false
                ];
            }

            $temp = self::subtractHelper($x_value, false, $y_value, false);
            $temp[self::SIGN] = self::compareHelper($x_value, false, $y_value, false) > 0 ?
                $x_negative : $y_negative;

            return $temp;
        }

        if ($x_size < $y_size) {
            $size = $x_size;
            $value = $y_value;
        } else {
            $size = $y_size;
            $value = $x_value;
        }

        $value[count($value)] = 0; // just in case the carry adds an extra digit

        $carry = 0;
        for ($i = 0, $j = 1; $j < $size; $i += 2, $j += 2) {
            //$sum = $x_value[$j] * static::BASE_FULL + $x_value[$i] + $y_value[$j] * static::BASE_FULL + $y_value[$i] + $carry;
            $sum = ($x_value[$j] + $y_value[$j]) * static::BASE_FULL + $x_value[$i] + $y_value[$i] + $carry;
            $carry = $sum >= static::MAX_DIGIT2; // eg. floor($sum / 2**52); only possible values (in any base) are 0 and 1
            $sum = $carry ? $sum - static::MAX_DIGIT2 : $sum;

            $temp = static::BASE === 26 ? intval($sum / 0x4000000) : ($sum >> 31);

            $value[$i] = (int)($sum - static::BASE_FULL * $temp); // eg. a faster alternative to fmod($sum, 0x4000000)
            $value[$j] = $temp;
        }

        if ($j == $size) { // ie. if $y_size is odd
            $sum = $x_value[$i] + $y_value[$i] + $carry;
            $carry = $sum >= static::BASE_FULL;
            $value[$i] = $carry ? $sum - static::BASE_FULL : $sum;
            ++$i; // ie. let $i = $j since we've just done $value[$i]
        }

        if ($carry) {
            for (; $value[$i] == static::MAX_DIGIT; ++$i) {
                $value[$i] = 0;
            }
            ++$value[$i];
        }

        return [
            self::VALUE => self::trim($value),
            self::SIGN => $x_negative
        ];
    }

    /**
     * Performs subtraction.
     *
     * @param array $x_value
     * @param bool $x_negative
     * @param array $y_value
     * @param bool $y_negative
     * @return array
     */
    public static function subtractHelper(array $x_value, $x_negative, array $y_value, $y_negative)
    {
        $x_size = count($x_value);
        $y_size = count($y_value);

        if ($x_size == 0) {
            return [
                self::VALUE => $y_value,
                self::SIGN => !$y_negative
            ];
        } elseif ($y_size == 0) {
            return [
                self::VALUE => $x_value,
                self::SIGN => $x_negative
            ];
        }

        // add, if appropriate (ie. -$x - +$y or +$x - -$y)
        if ($x_negative != $y_negative) {
            $temp = self::addHelper($x_value, false, $y_value, false);
            $temp[self::SIGN] = $x_negative;

            return $temp;
        }

        $diff = self::compareHelper($x_value, $x_negative, $y_value, $y_negative);

        if (!$diff) {
            return [
                self::VALUE => [],
                self::SIGN => false
            ];
        }

        // switch $x and $y around, if appropriate.
        if ((!$x_negative && $diff < 0) || ($x_negative && $diff > 0)) {
            $temp = $x_value;
            $x_value = $y_value;
            $y_value = $temp;

            $x_negative = !$x_negative;

            $x_size = count($x_value);
            $y_size = count($y_value);
        }

        // at this point, $x_value should be at least as big as - if not bigger than - $y_value

        $carry = 0;
        for ($i = 0, $j = 1; $j < $y_size; $i += 2, $j += 2) {
            $sum = ($x_value[$j] - $y_value[$j]) * static::BASE_FULL + $x_value[$i] - $y_value[$i] - $carry;

            $carry = $sum < 0; // eg. floor($sum / 2**52); only possible values (in any base) are 0 and 1
            $sum = $carry ? $sum + static::MAX_DIGIT2 : $sum;

            $temp = static::BASE === 26 ? intval($sum / 0x4000000) : ($sum >> 31);

            $x_value[$i] = (int)($sum - static::BASE_FULL * $temp);
            $x_value[$j] = $temp;
        }

        if ($j == $y_size) { // ie. if $y_size is odd
            $sum = $x_value[$i] - $y_value[$i] - $carry;
            $carry = $sum < 0;
            $x_value[$i] = $carry ? $sum + static::BASE_FULL : $sum;
            ++$i;
        }

        if ($carry) {
            for (; !$x_value[$i]; ++$i) {
                $x_value[$i] = static::MAX_DIGIT;
            }
            --$x_value[$i];
        }

        return [
            self::VALUE => self::trim($x_value),
            self::SIGN => $x_negative
        ];
    }

    /**
     * Performs multiplication.
     *
     * @param array $x_value
     * @param bool $x_negative
     * @param array $y_value
     * @param bool $y_negative
     * @return array
     */
    protected static function multiplyHelper(array $x_value, $x_negative, array $y_value, $y_negative)
    {
        //if ( $x_value == $y_value ) {
        //    return [
        //        self::VALUE => self::square($x_value),
        //        self::SIGN => $x_sign != $y_value
        //    ];
        //}

        $x_length = count($x_value);
        $y_length = count($y_value);

        if (!$x_length || !$y_length) { // a 0 is being multiplied
            return [
                self::VALUE => [],
                self::SIGN => false
            ];
        }

        return [
            self::VALUE => min($x_length, $y_length) < 2 * self::KARATSUBA_CUTOFF ?
                self::trim(self::regularMultiply($x_value, $y_value)) :
                self::trim(self::karatsuba($x_value, $y_value)),
            self::SIGN => $x_negative != $y_negative
        ];
    }

    /**
     * Performs Karatsuba multiplication on two BigIntegers
     *
     * See {@link http://en.wikipedia.org/wiki/Karatsuba_algorithm Karatsuba algorithm} and
     * {@link http://math.libtomcrypt.com/files/tommath.pdf#page=120 MPM 5.2.3}.
     *
     * @param array $x_value
     * @param array $y_value
     * @return array
     */
    private static function karatsuba(array $x_value, array $y_value)
    {
        $m = min(count($x_value) >> 1, count($y_value) >> 1);

        if ($m < self::KARATSUBA_CUTOFF) {
            return self::regularMultiply($x_value, $y_value);
        }

        $x1 = array_slice($x_value, $m);
        $x0 = array_slice($x_value, 0, $m);
        $y1 = array_slice($y_value, $m);
        $y0 = array_slice($y_value, 0, $m);

        $z2 = self::karatsuba($x1, $y1);
        $z0 = self::karatsuba($x0, $y0);

        $z1 = self::addHelper($x1, false, $x0, false);
        $temp = self::addHelper($y1, false, $y0, false);
        $z1 = self::karatsuba($z1[self::VALUE], $temp[self::VALUE]);
        $temp = self::addHelper($z2, false, $z0, false);
        $z1 = self::subtractHelper($z1, false, $temp[self::VALUE], false);

        $z2 = array_merge(array_fill(0, 2 * $m, 0), $z2);
        $z1[self::VALUE] = array_merge(array_fill(0, $m, 0), $z1[self::VALUE]);

        $xy = self::addHelper($z2, false, $z1[self::VALUE], $z1[self::SIGN]);
        $xy = self::addHelper($xy[self::VALUE], $xy[self::SIGN], $z0, false);

        return $xy[self::VALUE];
    }

    /**
     * Performs long multiplication on two BigIntegers
     *
     * Modeled after 'multiply' in MutableBigInteger.java.
     *
     * @param array $x_value
     * @param array $y_value
     * @return array
     */
    protected static function regularMultiply(array $x_value, array $y_value)
    {
        $x_length = count($x_value);
        $y_length = count($y_value);

        if (!$x_length || !$y_length) { // a 0 is being multiplied
            return [];
        }

        $product_value = self::array_repeat(0, $x_length + $y_length);

        // the following for loop could be removed if the for loop following it
        // (the one with nested for loops) initially set $i to 0, but
        // doing so would also make the result in one set of unnecessary adds,
        // since on the outermost loops first pass, $product->value[$k] is going
        // to always be 0

        $carry = 0;
        for ($j = 0; $j < $x_length; ++$j) { // ie. $i = 0
            $temp = $x_value[$j] * $y_value[0] + $carry; // $product_value[$k] == 0
            $carry = static::BASE === 26 ? intval($temp / 0x4000000) : ($temp >> 31);
            $product_value[$j] = (int)($temp - static::BASE_FULL * $carry);
        }

        $product_value[$j] = $carry;

        // the above for loop is what the previous comment was talking about.  the
        // following for loop is the "one with nested for loops"
        for ($i = 1; $i < $y_length; ++$i) {
            $carry = 0;

            for ($j = 0, $k = $i; $j < $x_length; ++$j, ++$k) {
                $temp = $product_value[$k] + $x_value[$j] * $y_value[$i] + $carry;
                $carry = static::BASE === 26 ? intval($temp / 0x4000000) : ($temp >> 31);
                $product_value[$k] = (int)($temp - static::BASE_FULL * $carry);
            }

            $product_value[$k] = $carry;
        }

        return $product_value;
    }

    /**
     * Divides two BigIntegers.
     *
     * Returns an array whose first element contains the quotient and whose second element contains the
     * "common residue".  If the remainder would be positive, the "common residue" and the remainder are the
     * same.  If the remainder would be negative, the "common residue" is equal to the sum of the remainder
     * and the divisor (basically, the "common residue" is the first positive modulo).
     *
     * @return array{static, static}
     * @internal This function is based off of
     *     {@link http://www.cacr.math.uwaterloo.ca/hac/about/chap14.pdf#page=9 HAC 14.20}.
     */
    protected function divideHelper(PHP $y)
    {
        if (count($y->value) == 1) {
            list($q, $r) = $this->divide_digit($this->value, $y->value[0]);
            $quotient = new static();
            $remainder = new static();
            $quotient->value = $q;
            if ($this->is_negative) {
                $r = $y->value[0] - $r;
            }
            $remainder->value = [$r];
            $quotient->is_negative = $this->is_negative != $y->is_negative;
            return [$this->normalize($quotient), $this->normalize($remainder)];
        }

        $x = clone $this;
        $y = clone $y;

        $x_sign = $x->is_negative;
        $y_sign = $y->is_negative;

        $x->is_negative = $y->is_negative = false;

        $diff = $x->compare($y);

        if (!$diff) {
            $temp = new static();
            $temp->value = [1];
            $temp->is_negative = $x_sign != $y_sign;
            return [$this->normalize($temp), $this->normalize(static::$zero[static::class])];
        }

        if ($diff < 0) {
            // if $x is negative, "add" $y.
            if ($x_sign) {
                $x = $y->subtract($x);
            }
            return [$this->normalize(static::$zero[static::class]), $this->normalize($x)];
        }

        // normalize $x and $y as described in HAC 14.23 / 14.24
        $msb = $y->value[count($y->value) - 1];
        for ($shift = 0; !($msb & static::MSB); ++$shift) {
            $msb <<= 1;
        }
        $x->lshift($shift);
        $y->lshift($shift);
        $y_value = &$y->value;

        $x_max = count($x->value) - 1;
        $y_max = count($y->value) - 1;

        $quotient = new static();
        $quotient_value = &$quotient->value;
        $quotient_value = self::array_repeat(0, $x_max - $y_max + 1);

        static $temp, $lhs, $rhs;
        if (!isset($temp)) {
            $temp = new static();
            $lhs = new static();
            $rhs = new static();
        }
        if (static::class != get_class($temp)) {
            $temp = new static();
            $lhs = new static();
            $rhs = new static();
        }
        $temp_value = &$temp->value;
        $rhs_value =  &$rhs->value;

        // $temp = $y << ($x_max - $y_max-1) in base 2**26
        $temp_value = array_merge(self::array_repeat(0, $x_max - $y_max), $y_value);

        while ($x->compare($temp) >= 0) {
            // calculate the "common residue"
            ++$quotient_value[$x_max - $y_max];
            $x = $x->subtract($temp);
            $x_max = count($x->value) - 1;
        }

        for ($i = $x_max; $i >= $y_max + 1; --$i) {
            $x_value = &$x->value;
            $x_window = [
                isset($x_value[$i]) ? $x_value[$i] : 0,
                isset($x_value[$i - 1]) ? $x_value[$i - 1] : 0,
                isset($x_value[$i - 2]) ? $x_value[$i - 2] : 0
            ];
            $y_window = [
                $y_value[$y_max],
                ($y_max > 0) ? $y_value[$y_max - 1] : 0
            ];

            $q_index = $i - $y_max - 1;
            if ($x_window[0] == $y_window[0]) {
                $quotient_value[$q_index] = static::MAX_DIGIT;
            } else {
                $quotient_value[$q_index] = self::safe_divide(
                    $x_window[0] * static::BASE_FULL + $x_window[1],
                    $y_window[0]
                );
            }

            $temp_value = [$y_window[1], $y_window[0]];

            $lhs->value = [$quotient_value[$q_index]];
            $lhs = $lhs->multiply($temp);

            $rhs_value = [$x_window[2], $x_window[1], $x_window[0]];

            while ($lhs->compare($rhs) > 0) {
                --$quotient_value[$q_index];

                $lhs->value = [$quotient_value[$q_index]];
                $lhs = $lhs->multiply($temp);
            }

            $adjust = self::array_repeat(0, $q_index);
            $temp_value = [$quotient_value[$q_index]];
            $temp = $temp->multiply($y);
            $temp_value = &$temp->value;
            if (count($temp_value)) {
                $temp_value = array_merge($adjust, $temp_value);
            }

            $x = $x->subtract($temp);

            if ($x->compare(static::$zero[static::class]) < 0) {
                $temp_value = array_merge($adjust, $y_value);
                $x = $x->add($temp);

                --$quotient_value[$q_index];
            }

            $x_max = count($x_value) - 1;
        }

        // unnormalize the remainder
        $x->rshift($shift);

        $quotient->is_negative = $x_sign != $y_sign;

        // calculate the "common residue", if appropriate
        if ($x_sign) {
            $y->rshift($shift);
            $x = $y->subtract($x);
        }

        return [$this->normalize($quotient), $this->normalize($x)];
    }

    /**
     * Divides a BigInteger by a regular integer
     *
     * abc / x = a00 / x + b0 / x + c / x
     *
     * @param array $dividend
     * @param int $divisor
     * @return array
     */
    private static function divide_digit(array $dividend, $divisor)
    {
        $carry = 0;
        $result = [];

        for ($i = count($dividend) - 1; $i >= 0; --$i) {
            $temp = static::BASE_FULL * $carry + $dividend[$i];
            $result[$i] = self::safe_divide($temp, $divisor);
            $carry = (int)($temp - $divisor * $result[$i]);
        }

        return [$result, $carry];
    }

    /**
     * Single digit division
     *
     * Even if int64 is being used the division operator will return a float64 value
     * if the dividend is not evenly divisible by the divisor. Since a float64 doesn't
     * have the precision of int64 this is a problem so, when int64 is being used,
     * we'll guarantee that the dividend is divisible by first subtracting the remainder.
     *
     * @param int $x
     * @param int $y
     * @return int
     */
    private static function safe_divide($x, $y)
    {
        if (static::BASE === 26) {
            return (int)($x / $y);
        }

        // static::BASE === 31
        /** @var int */
        return ($x - ($x % $y)) / $y;
    }

    /**
     * Convert an array / boolean to a PHP BigInteger object
     *
     * @param array $arr
     * @return static
     */
    protected function convertToObj(array $arr)
    {
        $result = new static();
        $result->value = $arr[self::VALUE];
        $result->is_negative = $arr[self::SIGN];

        return $this->normalize($result);
    }

    /**
     * Normalize
     *
     * Removes leading zeros and truncates (if necessary) to maintain the appropriate precision
     *
     * @param PHP $result
     * @return static
     */
    protected function normalize(PHP $result)
    {
        $result->precision = $this->precision;
        $result->bitmask = $this->bitmask;

        $value = &$result->value;

        if (!count($value)) {
            $result->is_negative = false;
            return $result;
        }

        $value = static::trim($value);

        if (!empty($result->bitmask->value)) {
            $length = min(count($value), count($result->bitmask->value));
            $value = array_slice($value, 0, $length);

            for ($i = 0; $i < $length; ++$i) {
                $value[$i] = $value[$i] & $result->bitmask->value[$i];
            }

            $value = static::trim($value);
        }

        return $result;
    }

    /**
     * Compares two numbers.
     *
     * @param array $x_value
     * @param bool $x_negative
     * @param array $y_value
     * @param bool $y_negative
     * @return int
     * @see static::compare()
     */
    protected static function compareHelper(array $x_value, $x_negative, array $y_value, $y_negative)
    {
        if ($x_negative != $y_negative) {
            return (!$x_negative && $y_negative) ? 1 : -1;
        }

        $result = $x_negative ? -1 : 1;

        if (count($x_value) != count($y_value)) {
            return (count($x_value) > count($y_value)) ? $result : -$result;
        }
        $size = max(count($x_value), count($y_value));

        $x_value = array_pad($x_value, $size, 0);
        $y_value = array_pad($y_value, $size, 0);

        for ($i = count($x_value) - 1; $i >= 0; --$i) {
            if ($x_value[$i] != $y_value[$i]) {
                return ($x_value[$i] > $y_value[$i]) ? $result : -$result;
            }
        }

        return 0;
    }

    /**
     * Absolute value.
     *
     * @return PHP
     */
    public function abs()
    {
        $temp = new static();
        $temp->value = $this->value;

        return $temp;
    }

    /**
     * Trim
     *
     * Removes leading zeros
     *
     * @param list<static> $value
     * @return list<static>
     */
    protected static function trim(array $value)
    {
        for ($i = count($value) - 1; $i >= 0; --$i) {
            if ($value[$i]) {
                break;
            }
            unset($value[$i]);
        }

        return $value;
    }

    /**
     * Logical Right Shift
     *
     * Shifts BigInteger's by $shift bits, effectively dividing by 2**$shift.
     *
     * @param int $shift
     * @return PHP
     */
    public function bitwise_rightShift($shift)
    {
        $temp = new static();

        // could just replace lshift with this, but then all lshift() calls would need to be rewritten
        // and I don't want to do that...
        $temp->value = $this->value;
        $temp->rshift($shift);

        return $this->normalize($temp);
    }

    /**
     * Logical Left Shift
     *
     * Shifts BigInteger's by $shift bits, effectively multiplying by 2**$shift.
     *
     * @param int $shift
     * @return PHP
     */
    public function bitwise_leftShift($shift)
    {
        $temp = new static();
        // could just replace _rshift with this, but then all _lshift() calls would need to be rewritten
        // and I don't want to do that...
        $temp->value = $this->value;
        $temp->lshift($shift);

        return $this->normalize($temp);
    }

    /**
     * Converts 32-bit integers to bytes.
     *
     * @param int $x
     * @return string
     */
    private static function int2bytes($x)
    {
        return ltrim(pack('N', $x), chr(0));
    }

    /**
     * Array Repeat
     *
     * @param int $input
     * @param int $multiplier
     * @return array
     */
    protected static function array_repeat($input, $multiplier)
    {
        return $multiplier ? array_fill(0, $multiplier, $input) : [];
    }

    /**
     * Logical Left Shift
     *
     * Shifts BigInteger's by $shift bits.
     *
     * @param int $shift
     */
    protected function lshift($shift)
    {
        if ($shift == 0) {
            return;
        }

        $num_digits = (int)($shift / static::BASE);
        $shift %= static::BASE;
        $shift = 1 << $shift;

        $carry = 0;

        for ($i = 0; $i < count($this->value); ++$i) {
            $temp = $this->value[$i] * $shift + $carry;
            $carry = static::BASE === 26 ? intval($temp / 0x4000000) : ($temp >> 31);
            $this->value[$i] = (int)($temp - $carry * static::BASE_FULL);
        }

        if ($carry) {
            $this->value[count($this->value)] = $carry;
        }

        while ($num_digits--) {
            array_unshift($this->value, 0);
        }
    }

    /**
     * Logical Right Shift
     *
     * Shifts BigInteger's by $shift bits.
     *
     * @param int $shift
     */
    protected function rshift($shift)
    {
        if ($shift == 0) {
            return;
        }

        $num_digits = (int)($shift / static::BASE);
        $shift %= static::BASE;
        $carry_shift = static::BASE - $shift;
        $carry_mask = (1 << $shift) - 1;

        if ($num_digits) {
            $this->value = array_slice($this->value, $num_digits);
        }

        $carry = 0;

        for ($i = count($this->value) - 1; $i >= 0; --$i) {
            $temp = $this->value[$i] >> $shift | $carry;
            $carry = ($this->value[$i] & $carry_mask) << $carry_shift;
            $this->value[$i] = $temp;
        }

        $this->value = static::trim($this->value);
    }

    /**
     * Performs modular exponentiation.
     *
     * @param PHP $e
     * @param PHP $n
     * @return PHP
     */
    protected function powModInner(PHP $e, PHP $n)
    {
        try {
            $class = static::$modexpEngine[static::class];
            return $class::powModHelper($this, $e, $n, static::class);
        } catch (\Exception $err) {
            return PHP\DefaultEngine::powModHelper($this, $e, $n, static::class);
        }
    }

    /**
     * Performs squaring
     *
     * @param list<static> $x
     * @return list<static>
     */
    protected static function square(array $x)
    {
        return count($x) < 2 * self::KARATSUBA_CUTOFF ?
            self::trim(self::baseSquare($x)) :
            self::trim(self::karatsubaSquare($x));
    }

    /**
     * Performs traditional squaring on two BigIntegers
     *
     * Squaring can be done faster than multiplying a number by itself can be.  See
     * {@link http://www.cacr.math.uwaterloo.ca/hac/about/chap14.pdf#page=7 HAC 14.2.4} /
     * {@link http://math.libtomcrypt.com/files/tommath.pdf#page=141 MPM 5.3} for more information.
     *
     * @param array $value
     * @return array
     */
    protected static function baseSquare(array $value)
    {
        if (empty($value)) {
            return [];
        }
        $square_value = self::array_repeat(0, 2 * count($value));

        for ($i = 0, $max_index = count($value) - 1; $i <= $max_index; ++$i) {
            $i2 = $i << 1;

            $temp = $square_value[$i2] + $value[$i] * $value[$i];
            $carry = static::BASE === 26 ? intval($temp / 0x4000000) : ($temp >> 31);
            $square_value[$i2] = (int)($temp - static::BASE_FULL * $carry);

            // note how we start from $i+1 instead of 0 as we do in multiplication.
            for ($j = $i + 1, $k = $i2 + 1; $j <= $max_index; ++$j, ++$k) {
                $temp = $square_value[$k] + 2 * $value[$j] * $value[$i] + $carry;
                $carry = static::BASE === 26 ? intval($temp / 0x4000000) : ($temp >> 31);
                $square_value[$k] = (int)($temp - static::BASE_FULL * $carry);
            }

            // the following line can yield values larger 2**15.  at this point, PHP should switch
            // over to floats.
            $square_value[$i + $max_index + 1] = $carry;
        }

        return $square_value;
    }

    /**
     * Performs Karatsuba "squaring" on two BigIntegers
     *
     * See {@link http://en.wikipedia.org/wiki/Karatsuba_algorithm Karatsuba algorithm} and
     * {@link http://math.libtomcrypt.com/files/tommath.pdf#page=151 MPM 5.3.4}.
     *
     * @param array $value
     * @return array
     */
    protected static function karatsubaSquare(array $value)
    {
        $m = count($value) >> 1;

        if ($m < self::KARATSUBA_CUTOFF) {
            return self::baseSquare($value);
        }

        $x1 = array_slice($value, $m);
        $x0 = array_slice($value, 0, $m);

        $z2 = self::karatsubaSquare($x1);
        $z0 = self::karatsubaSquare($x0);

        $z1 = self::addHelper($x1, false, $x0, false);
        $z1 = self::karatsubaSquare($z1[self::VALUE]);
        $temp = self::addHelper($z2, false, $z0, false);
        $z1 = self::subtractHelper($z1, false, $temp[self::VALUE], false);

        $z2 = array_merge(array_fill(0, 2 * $m, 0), $z2);
        $z1[self::VALUE] = array_merge(array_fill(0, $m, 0), $z1[self::VALUE]);

        $xx = self::addHelper($z2, false, $z1[self::VALUE], $z1[self::SIGN]);
        $xx = self::addHelper($xx[self::VALUE], $xx[self::SIGN], $z0, false);

        return $xx[self::VALUE];
    }

    /**
     * Make the current number odd
     *
     * If the current number is odd it'll be unchanged.  If it's even, one will be added to it.
     *
     * @see self::randomPrime()
     */
    protected function make_odd()
    {
        $this->value[0] |= 1;
    }

    /**
     * Test the number against small primes.
     *
     * @see self::isPrime()
     */
    protected function testSmallPrimes()
    {
        if ($this->value == [1]) {
            return false;
        }
        if ($this->value == [2]) {
            return true;
        }
        if (~$this->value[0] & 1) {
            return false;
        }

        $value = $this->value;
        foreach (static::PRIMES as $prime) {
            list(, $r) = self::divide_digit($value, $prime);
            if (!$r) {
                return count($value) == 1 && $value[0] == $prime;
            }
        }

        return true;
    }

    /**
     * Scan for 1 and right shift by that amount
     *
     * ie. $s = gmp_scan1($n, 0) and $r = gmp_div_q($n, gmp_pow(gmp_init('2'), $s));
     *
     * @param PHP $r
     * @return int
     * @see self::isPrime()
     */
    public static function scan1divide(PHP $r)
    {
        $r_value = &$r->value;
        for ($i = 0, $r_length = count($r_value); $i < $r_length; ++$i) {
            $temp = ~$r_value[$i] & static::MAX_DIGIT;
            for ($j = 1; ($temp >> $j) & 1; ++$j) {
            }
            if ($j <= static::BASE) {
                break;
            }
        }
        $s = static::BASE * $i + $j;
        $r->rshift($s);
        return $s;
    }

    /**
     * Performs exponentiation.
     *
     * @param PHP $n
     * @return PHP
     */
    protected function powHelper(PHP $n)
    {
        if ($n->compare(static::$zero[static::class]) == 0) {
            return new static(1);
        } // n^0 = 1

        $temp = clone $this;
        while (!$n->equals(static::$one[static::class])) {
            $temp = $temp->multiply($this);
            $n = $n->subtract(static::$one[static::class]);
        }

        return $temp;
    }

    /**
     * Is Odd?
     *
     * @return bool
     */
    public function isOdd()
    {
        return (bool)($this->value[0] & 1);
    }

    /**
     * Tests if a bit is set
     *
     * @return bool
     */
    public function testBit($x)
    {
        $digit = (int) floor($x / static::BASE);
        $bit = $x % static::BASE;

        if (!isset($this->value[$digit])) {
            return false;
        }

        return (bool)($this->value[$digit] & (1 << $bit));
    }

    /**
     * Is Negative?
     *
     * @return bool
     */
    public function isNegative()
    {
        return $this->is_negative;
    }

    /**
     * Negate
     *
     * Given $k, returns -$k
     *
     * @return static
     */
    public function negate()
    {
        $temp = clone $this;
        $temp->is_negative = !$temp->is_negative;

        return $temp;
    }

    /**
     * Bitwise Split
     *
     * Splits BigInteger's into chunks of $split bits
     *
     * @param int $split
     * @return list<static>
     */
    public function bitwise_split($split)
    {
        if ($split < 1) {
            throw new \RuntimeException('Offset must be greater than 1');
        }

        $width = (int)($split / static::BASE);
        if (!$width) {
            $arr = $this->bitwise_small_split($split);
            return array_map(function ($digit) {
                $temp = new static();
                $temp->value = $digit != 0 ? [$digit] : [];
                return $temp;
            }, $arr);
        }

        $vals = [];
        $val = $this->value;

        $i = $overflow = 0;
        $len = count($val);
        while ($i < $len) {
            $digit = [];
            if (!$overflow) {
                $digit = array_slice($val, $i, $width);
                $i += $width;
                $overflow = $split % static::BASE;
                if ($overflow) {
                    $mask = (1 << $overflow) - 1;
                    $temp = isset($val[$i]) ? $val[$i] : 0;
                    $digit[] = $temp & $mask;
                }
            } else {
                $remaining = static::BASE - $overflow;
                $tempsplit = $split - $remaining;
                $tempwidth = (int)($tempsplit / static::BASE + 1);
                $digit = array_slice($val, $i, $tempwidth);
                $i += $tempwidth;
                $tempoverflow = $tempsplit % static::BASE;
                if ($tempoverflow) {
                    $tempmask = (1 << $tempoverflow) - 1;
                    $temp = isset($val[$i]) ? $val[$i] : 0;
                    $digit[] = $temp & $tempmask;
                }
                $newbits = 0;
                for ($j = count($digit) - 1; $j >= 0; $j--) {
                    $temp = $digit[$j] & $mask;
                    $digit[$j] = ($digit[$j] >> $overflow) | ($newbits << $remaining);
                    $newbits = $temp;
                }
                $overflow = $tempoverflow;
                $mask = $tempmask;
            }
            $temp = new static();
            $temp->value = static::trim($digit);
            $vals[] = $temp;
        }

        return array_reverse($vals);
    }

    /**
     * Bitwise Split where $split < static::BASE
     *
     * @param int $split
     * @return list<int>
     */
    private function bitwise_small_split($split)
    {
        $vals = [];
        $val = $this->value;

        $mask = (1 << $split) - 1;

        $i = $overflow = 0;
        $len = count($val);
        $val[] = 0;
        $remaining = static::BASE;
        while ($i != $len) {
            $digit = $val[$i] & $mask;
            $val[$i] >>= $split;
            if (!$overflow) {
                $remaining -= $split;
                $overflow = $split <= $remaining ? 0 : $split - $remaining;

                if (!$remaining) {
                    $i++;
                    $remaining = static::BASE;
                    $overflow = 0;
                }
            } elseif (++$i != $len) {
                $tempmask = (1 << $overflow) - 1;
                $digit |= ($val[$i] & $tempmask) << $remaining;
                $val[$i] >>= $overflow;
                $remaining = static::BASE - $overflow;
                $overflow = $split <= $remaining ? 0 : $split - $remaining;
            }

            $vals[] = $digit;
        }

        while ($vals[count($vals) - 1] == 0) {
            unset($vals[count($vals) - 1]);
        }

        return array_reverse($vals);
    }

    /**
     * @return bool
     */
    protected static function testJITOnWindows()
    {
        // see https://github.com/php/php-src/issues/11917
        if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN' && function_exists('opcache_get_status') && PHP_VERSION_ID < 80213 && !defined('PHPSECLIB_ALLOW_JIT')) {
            $status = opcache_get_status();
            if ($status && isset($status['jit']) && $status['jit']['enabled'] && $status['jit']['on']) {
                return true;
            }
        }
        return false;
    }

    /**
     * Return the size of a BigInteger in bits
     *
     * @return int
     */
    public function getLength()
    {
        $max = count($this->value) - 1;
        return $max != -1 ?
            $max * static::BASE + intval(ceil(log($this->value[$max] + 1, 2))) :
            0;
    }
}
<?php

/**
 * PHP Modular Exponentiation Engine
 *
 * PHP version 5 and 7
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2017 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://pear.php.net/package/Math_BigInteger
 */

namespace phpseclib3\Math\BigInteger\Engines\PHP;

use phpseclib3\Math\BigInteger\Engines\PHP;

/**
 * PHP Modular Exponentiation Engine
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class Base extends PHP
{
    /**
     * Cache constants
     *
     * $cache[self::VARIABLE] tells us whether or not the cached data is still valid.
     *
     */
    const VARIABLE = 0;
    /**
     * $cache[self::DATA] contains the cached data.
     *
     */
    const DATA = 1;

    /**
     * Test for engine validity
     *
     * @return bool
     */
    public static function isValidEngine()
    {
        return static::class != __CLASS__;
    }

    /**
     * Performs modular exponentiation.
     *
     * The most naive approach to modular exponentiation has very unreasonable requirements, and
     * and although the approach involving repeated squaring does vastly better, it, too, is impractical
     * for our purposes.  The reason being that division - by far the most complicated and time-consuming
     * of the basic operations (eg. +,-,*,/) - occurs multiple times within it.
     *
     * Modular reductions resolve this issue.  Although an individual modular reduction takes more time
     * then an individual division, when performed in succession (with the same modulo), they're a lot faster.
     *
     * The two most commonly used modular reductions are Barrett and Montgomery reduction.  Montgomery reduction,
     * although faster, only works when the gcd of the modulo and of the base being used is 1.  In RSA, when the
     * base is a power of two, the modulo - a product of two primes - is always going to have a gcd of 1 (because
     * the product of two odd numbers is odd), but what about when RSA isn't used?
     *
     * In contrast, Barrett reduction has no such constraint.  As such, some bigint implementations perform a
     * Barrett reduction after every operation in the modpow function.  Others perform Barrett reductions when the
     * modulo is even and Montgomery reductions when the modulo is odd.  BigInteger.java's modPow method, however,
     * uses a trick involving the Chinese Remainder Theorem to factor the even modulo into two numbers - one odd and
     * the other, a power of two - and recombine them, later.  This is the method that this modPow function uses.
     * {@link http://islab.oregonstate.edu/papers/j34monex.pdf Montgomery Reduction with Even Modulus} elaborates.
     *
     * @param PHP $x
     * @param PHP $e
     * @param PHP $n
     * @param string $class
     * @return PHP
     */
    protected static function powModHelper(PHP $x, PHP $e, PHP $n, $class)
    {
        if (empty($e->value)) {
            $temp = new $class();
            $temp->value = [1];
            return $x->normalize($temp);
        }

        if ($e->value == [1]) {
            list(, $temp) = $x->divide($n);
            return $x->normalize($temp);
        }

        if ($e->value == [2]) {
            $temp = new $class();
            $temp->value = $class::square($x->value);
            list(, $temp) = $temp->divide($n);
            return $x->normalize($temp);
        }

        return $x->normalize(static::slidingWindow($x, $e, $n, $class));
    }

    /**
     * Modular reduction preparation
     *
     * @param array $x
     * @param array $n
     * @param string $class
     * @see self::slidingWindow()
     * @return array
     */
    protected static function prepareReduce(array $x, array $n, $class)
    {
        return static::reduce($x, $n, $class);
    }

    /**
     * Modular multiply
     *
     * @param array $x
     * @param array $y
     * @param array $n
     * @param string $class
     * @see self::slidingWindow()
     * @return array
     */
    protected static function multiplyReduce(array $x, array $y, array $n, $class)
    {
        $temp = $class::multiplyHelper($x, false, $y, false);
        return static::reduce($temp[self::VALUE], $n, $class);
    }

    /**
     * Modular square
     *
     * @param array $x
     * @param array $n
     * @param string $class
     * @see self::slidingWindow()
     * @return array
     */
    protected static function squareReduce(array $x, array $n, $class)
    {
        return static::reduce($class::square($x), $n, $class);
    }
}
<?php

/**
 * PHP Default Modular Exponentiation Engine
 *
 * PHP version 5 and 7
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2017 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://pear.php.net/package/Math_BigInteger
 */

namespace phpseclib3\Math\BigInteger\Engines\PHP;

use phpseclib3\Math\BigInteger\Engines\PHP\Reductions\EvalBarrett;

/**
 * PHP Default Modular Exponentiation Engine
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class DefaultEngine extends EvalBarrett
{
}
<?php

/**
 * PHP Montgomery Modular Exponentiation Engine
 *
 * PHP version 5 and 7
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2017 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://pear.php.net/package/Math_BigInteger
 */

namespace phpseclib3\Math\BigInteger\Engines\PHP;

use phpseclib3\Math\BigInteger\Engines\Engine;
use phpseclib3\Math\BigInteger\Engines\PHP;
use phpseclib3\Math\BigInteger\Engines\PHP\Reductions\PowerOfTwo;

/**
 * PHP Montgomery Modular Exponentiation Engine
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class Montgomery extends Base
{
    /**
     * Test for engine validity
     *
     * @return bool
     */
    public static function isValidEngine()
    {
        return static::class != __CLASS__;
    }

    /**
     * Performs modular exponentiation.
     *
     * @template T of Engine
     * @param Engine $x
     * @param Engine $e
     * @param Engine $n
     * @param class-string<T> $class
     * @return T
     */
    protected static function slidingWindow(Engine $x, Engine $e, Engine $n, $class)
    {
        // is the modulo odd?
        if ($n->value[0] & 1) {
            return parent::slidingWindow($x, $e, $n, $class);
        }
        // if it's not, it's even

        // find the lowest set bit (eg. the max pow of 2 that divides $n)
        for ($i = 0; $i < count($n->value); ++$i) {
            if ($n->value[$i]) {
                $temp = decbin($n->value[$i]);
                $j = strlen($temp) - strrpos($temp, '1') - 1;
                $j += $class::BASE * $i;
                break;
            }
        }
        // at this point, 2^$j * $n/(2^$j) == $n

        $mod1 = clone $n;
        $mod1->rshift($j);
        $mod2 = new $class();
        $mod2->value = [1];
        $mod2->lshift($j);

        $part1 = $mod1->value != [1] ? parent::slidingWindow($x, $e, $mod1, $class) : new $class();
        $part2 = PowerOfTwo::slidingWindow($x, $e, $mod2, $class);

        $y1 = $mod2->modInverse($mod1);
        $y2 = $mod1->modInverse($mod2);

        $result = $part1->multiply($mod2);
        $result = $result->multiply($y1);

        $temp = $part2->multiply($mod1);
        $temp = $temp->multiply($y2);

        $result = $result->add($temp);
        list(, $result) = $result->divide($n);

        return $result;
    }
}
<?php

/**
 * OpenSSL Modular Exponentiation Engine
 *
 * PHP version 5 and 7
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2017 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://pear.php.net/package/Math_BigInteger
 */

namespace phpseclib3\Math\BigInteger\Engines\PHP;

use phpseclib3\Math\BigInteger\Engines\OpenSSL as Progenitor;

/**
 * OpenSSL Modular Exponentiation Engine
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class OpenSSL extends Progenitor
{
}
<?php

/**
 * PHP Barrett Modular Exponentiation Engine
 *
 * PHP version 5 and 7
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2017 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://pear.php.net/package/Math_BigInteger
 */

namespace phpseclib3\Math\BigInteger\Engines\PHP\Reductions;

use phpseclib3\Math\BigInteger\Engines\PHP;
use phpseclib3\Math\BigInteger\Engines\PHP\Base;

/**
 * PHP Barrett Modular Exponentiation Engine
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class Barrett extends Base
{
    /**
     * Barrett Modular Reduction
     *
     * See {@link http://www.cacr.math.uwaterloo.ca/hac/about/chap14.pdf#page=14 HAC 14.3.3} /
     * {@link http://math.libtomcrypt.com/files/tommath.pdf#page=165 MPM 6.2.5} for more information.  Modified slightly,
     * so as not to require negative numbers (initially, this script didn't support negative numbers).
     *
     * Employs "folding", as described at
     * {@link http://www.cosic.esat.kuleuven.be/publications/thesis-149.pdf#page=66 thesis-149.pdf#page=66}.  To quote from
     * it, "the idea [behind folding] is to find a value x' such that x (mod m) = x' (mod m), with x' being smaller than x."
     *
     * Unfortunately, the "Barrett Reduction with Folding" algorithm described in thesis-149.pdf is not, as written, all that
     * usable on account of (1) its not using reasonable radix points as discussed in
     * {@link http://math.libtomcrypt.com/files/tommath.pdf#page=162 MPM 6.2.2} and (2) the fact that, even with reasonable
     * radix points, it only works when there are an even number of digits in the denominator.  The reason for (2) is that
     * (x >> 1) + (x >> 1) != x / 2 + x / 2.  If x is even, they're the same, but if x is odd, they're not.  See the in-line
     * comments for details.
     *
     * @param array $n
     * @param array $m
     * @param class-string<PHP> $class
     * @return array
     */
    protected static function reduce(array $n, array $m, $class)
    {
        static $cache = [
            self::VARIABLE => [],
            self::DATA => []
        ];

        $m_length = count($m);

        // if (self::compareHelper($n, $static::square($m)) >= 0) {
        if (count($n) > 2 * $m_length) {
            $lhs = new $class();
            $rhs = new $class();
            $lhs->value = $n;
            $rhs->value = $m;
            list(, $temp) = $lhs->divide($rhs);
            return $temp->value;
        }

        // if (m.length >> 1) + 2 <= m.length then m is too small and n can't be reduced
        if ($m_length < 5) {
            return self::regularBarrett($n, $m, $class);
        }
        // n = 2 * m.length
        $correctionNeeded = false;
        if ($m_length & 1) {
            $correctionNeeded = true;
            array_unshift($n, 0);
            array_unshift($m, 0);
            $m_length++;
        }

        if (($key = array_search($m, $cache[self::VARIABLE])) === false) {
            $key = count($cache[self::VARIABLE]);
            $cache[self::VARIABLE][] = $m;

            $lhs = new $class();
            $lhs_value = &$lhs->value;
            $lhs_value = self::array_repeat(0, $m_length + ($m_length >> 1));
            $lhs_value[] = 1;
            $rhs = new $class();
            $rhs->value = $m;

            list($u, $m1) = $lhs->divide($rhs);
            $u = $u->value;
            $m1 = $m1->value;

            $cache[self::DATA][] = [
                'u' => $u, // m.length >> 1 (technically (m.length >> 1) + 1)
                'm1' => $m1 // m.length
            ];
        } else {
            $cacheValues = $cache[self::DATA][$key];
            $u = $cacheValues['u'];
            $m1 = $cacheValues['m1'];
        }

        $cutoff = $m_length + ($m_length >> 1);
        $lsd = array_slice($n, 0, $cutoff); // m.length + (m.length >> 1)
        $msd = array_slice($n, $cutoff);    // m.length >> 1

        $lsd = self::trim($lsd);
        $temp = $class::multiplyHelper($msd, false, $m1, false); // m.length + (m.length >> 1)
        $n = $class::addHelper($lsd, false, $temp[self::VALUE], false); // m.length + (m.length >> 1) + 1 (so basically we're adding two same length numbers)
        //if ($m_length & 1) {
        //    return self::regularBarrett($n[self::VALUE], $m, $class);
        //}

        // (m.length + (m.length >> 1) + 1) - (m.length - 1) == (m.length >> 1) + 2
        $temp = array_slice($n[self::VALUE], $m_length - 1);
        // if even: ((m.length >> 1) + 2) + (m.length >> 1) == m.length + 2
        // if odd:  ((m.length >> 1) + 2) + (m.length >> 1) == (m.length - 1) + 2 == m.length + 1
        // note that these are upper bounds. let's say m.length is 2. then you'd be multiplying a
        // 3 digit number by a 1 digit number. if you're doing 999 * 9 (in base 10) the result will
        // be a 4 digit number. but if you're multiplying 111 * 1 then the result will be a 3 digit
        // number.
        $temp = $class::multiplyHelper($temp, false, $u, false);
        // if even: (m.length + 2) - ((m.length >> 1) + 1) = m.length - (m.length >> 1) + 1
        // if odd:  (m.length + 1) - ((m.length >> 1) + 1) = m.length - (m.length >> 1)
        $temp = array_slice($temp[self::VALUE], ($m_length >> 1) + 1);
        // if even: (m.length - (m.length >> 1) + 1) + m.length = 2 * m.length - (m.length >> 1) + 1
        // if odd:  (m.length - (m.length >> 1)) + m.length     = 2 * m.length - (m.length >> 1)
        $temp = $class::multiplyHelper($temp, false, $m, false);
        // at this point, if m had an odd number of digits, we'd (probably) be subtracting a 2 * m.length - (m.length >> 1)
        // digit number from a m.length + (m.length >> 1) + 1 digit number.  ie. there'd be an extra digit and the while loop
        // following this comment would loop a lot (hence our calling _regularBarrett() in that situation).
        $result = $class::subtractHelper($n[self::VALUE], false, $temp[self::VALUE], false);

        while (self::compareHelper($result[self::VALUE], $result[self::SIGN], $m, false) >= 0) {
            $result = $class::subtractHelper($result[self::VALUE], $result[self::SIGN], $m, false);
        }

        if ($correctionNeeded) {
            array_shift($result[self::VALUE]);
        }

        return $result[self::VALUE];
    }

    /**
     * (Regular) Barrett Modular Reduction
     *
     * For numbers with more than four digits BigInteger::_barrett() is faster.  The difference between that and this
     * is that this function does not fold the denominator into a smaller form.
     *
     * @param array $x
     * @param array $n
     * @param string $class
     * @return array
     */
    private static function regularBarrett(array $x, array $n, $class)
    {
        static $cache = [
            self::VARIABLE => [],
            self::DATA => []
        ];

        $n_length = count($n);

        if (count($x) > 2 * $n_length) {
            $lhs = new $class();
            $rhs = new $class();
            $lhs->value = $x;
            $rhs->value = $n;
            list(, $temp) = $lhs->divide($rhs);
            return $temp->value;
        }

        if (($key = array_search($n, $cache[self::VARIABLE])) === false) {
            $key = count($cache[self::VARIABLE]);
            $cache[self::VARIABLE][] = $n;
            $lhs = new $class();
            $lhs_value = &$lhs->value;
            $lhs_value = self::array_repeat(0, 2 * $n_length);
            $lhs_value[] = 1;
            $rhs = new $class();
            $rhs->value = $n;
            list($temp, ) = $lhs->divide($rhs); // m.length
            $cache[self::DATA][] = $temp->value;
        }

        // 2 * m.length - (m.length - 1) = m.length + 1
        $temp = array_slice($x, $n_length - 1);
        // (m.length + 1) + m.length = 2 * m.length + 1
        $temp = $class::multiplyHelper($temp, false, $cache[self::DATA][$key], false);
        // (2 * m.length + 1) - (m.length - 1) = m.length + 2
        $temp = array_slice($temp[self::VALUE], $n_length + 1);

        // m.length + 1
        $result = array_slice($x, 0, $n_length + 1);
        // m.length + 1
        $temp = self::multiplyLower($temp, false, $n, false, $n_length + 1, $class);
        // $temp == array_slice($class::regularMultiply($temp, false, $n, false)->value, 0, $n_length + 1)

        if (self::compareHelper($result, false, $temp[self::VALUE], $temp[self::SIGN]) < 0) {
            $corrector_value = self::array_repeat(0, $n_length + 1);
            $corrector_value[count($corrector_value)] = 1;
            $result = $class::addHelper($result, false, $corrector_value, false);
            $result = $result[self::VALUE];
        }

        // at this point, we're subtracting a number with m.length + 1 digits from another number with m.length + 1 digits
        $result = $class::subtractHelper($result, false, $temp[self::VALUE], $temp[self::SIGN]);
        while (self::compareHelper($result[self::VALUE], $result[self::SIGN], $n, false) > 0) {
            $result = $class::subtractHelper($result[self::VALUE], $result[self::SIGN], $n, false);
        }

        return $result[self::VALUE];
    }

    /**
     * Performs long multiplication up to $stop digits
     *
     * If you're going to be doing array_slice($product->value, 0, $stop), some cycles can be saved.
     *
     * @see self::regularBarrett()
     * @param array $x_value
     * @param bool $x_negative
     * @param array $y_value
     * @param bool $y_negative
     * @param int $stop
     * @param string $class
     * @return array
     */
    private static function multiplyLower(array $x_value, $x_negative, array $y_value, $y_negative, $stop, $class)
    {
        $x_length = count($x_value);
        $y_length = count($y_value);

        if (!$x_length || !$y_length) { // a 0 is being multiplied
            return [
                self::VALUE => [],
                self::SIGN => false
            ];
        }

        if ($x_length < $y_length) {
            $temp = $x_value;
            $x_value = $y_value;
            $y_value = $temp;

            $x_length = count($x_value);
            $y_length = count($y_value);
        }

        $product_value = self::array_repeat(0, $x_length + $y_length);

        // the following for loop could be removed if the for loop following it
        // (the one with nested for loops) initially set $i to 0, but
        // doing so would also make the result in one set of unnecessary adds,
        // since on the outermost loops first pass, $product->value[$k] is going
        // to always be 0

        $carry = 0;

        for ($j = 0; $j < $x_length; ++$j) { // ie. $i = 0, $k = $i
            $temp = $x_value[$j] * $y_value[0] + $carry; // $product_value[$k] == 0
            $carry = $class::BASE === 26 ? intval($temp / 0x4000000) : ($temp >> 31);
            $product_value[$j] = (int) ($temp - $class::BASE_FULL * $carry);
        }

        if ($j < $stop) {
            $product_value[$j] = $carry;
        }

        // the above for loop is what the previous comment was talking about.  the
        // following for loop is the "one with nested for loops"

        for ($i = 1; $i < $y_length; ++$i) {
            $carry = 0;

            for ($j = 0, $k = $i; $j < $x_length && $k < $stop; ++$j, ++$k) {
                $temp = $product_value[$k] + $x_value[$j] * $y_value[$i] + $carry;
                $carry = $class::BASE === 26 ? intval($temp / 0x4000000) : ($temp >> 31);
                $product_value[$k] = (int) ($temp - $class::BASE_FULL * $carry);
            }

            if ($k < $stop) {
                $product_value[$k] = $carry;
            }
        }

        return [
            self::VALUE => self::trim($product_value),
            self::SIGN => $x_negative != $y_negative
        ];
    }
}
<?php

/**
 * PHP Classic Modular Exponentiation Engine
 *
 * PHP version 5 and 7
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2017 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://pear.php.net/package/Math_BigInteger
 */

namespace phpseclib3\Math\BigInteger\Engines\PHP\Reductions;

use phpseclib3\Math\BigInteger\Engines\PHP\Base;

/**
 * PHP Classic Modular Exponentiation Engine
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class Classic extends Base
{
    /**
     * Regular Division
     *
     * @param array $x
     * @param array $n
     * @param string $class
     * @return array
     */
    protected static function reduce(array $x, array $n, $class)
    {
        $lhs = new $class();
        $lhs->value = $x;
        $rhs = new $class();
        $rhs->value = $n;
        list(, $temp) = $lhs->divide($rhs);
        return $temp->value;
    }
}
<?php

/**
 * PHP Dynamic Barrett Modular Exponentiation Engine
 *
 * PHP version 5 and 7
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2017 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://pear.php.net/package/Math_BigInteger
 */

namespace phpseclib3\Math\BigInteger\Engines\PHP\Reductions;

use phpseclib3\Math\BigInteger\Engines\PHP;
use phpseclib3\Math\BigInteger\Engines\PHP\Base;

/**
 * PHP Dynamic Barrett Modular Exponentiation Engine
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class EvalBarrett extends Base
{
    /**
     * Custom Reduction Function
     *
     * @see self::generateCustomReduction
     */
    private static $custom_reduction;

    /**
     * Barrett Modular Reduction
     *
     * This calls a dynamically generated loop unrolled function that's specific to a given modulo.
     * Array lookups are avoided as are if statements testing for how many bits the host OS supports, etc.
     *
     * @param array $n
     * @param array $m
     * @param string $class
     * @return array
     */
    protected static function reduce(array $n, array $m, $class)
    {
        $inline = self::$custom_reduction;
        return $inline($n);
    }

    /**
     * Generate Custom Reduction
     *
     * @param PHP $m
     * @param string $class
     * @return callable
     */
    protected static function generateCustomReduction(PHP $m, $class)
    {
        $m_length = count($m->value);

        if ($m_length < 5) {
            $code = '
                $lhs = new ' . $class . '();
                $lhs->value = $x;
                $rhs = new ' . $class . '();
                $rhs->value = [' .
                implode(',', array_map(self::class . '::float2string', $m->value)) . '];
                list(, $temp) = $lhs->divide($rhs);
                return $temp->value;
            ';
            eval('$func = function ($x) { ' . $code . '};');
            self::$custom_reduction = $func;
            //self::$custom_reduction = \Closure::bind($func, $m, $class);
            return $func;
        }

        $correctionNeeded = false;
        if ($m_length & 1) {
            $correctionNeeded = true;
            $m = clone $m;
            array_unshift($m->value, 0);
            $m_length++;
        }

        $lhs = new $class();
        $lhs_value = &$lhs->value;

        $lhs_value = self::array_repeat(0, $m_length + ($m_length >> 1));
        $lhs_value[] = 1;
        $rhs = new $class();

        list($u, $m1) = $lhs->divide($m);

        if ($class::BASE != 26) {
            $u = $u->value;
        } else {
            $lhs_value = self::array_repeat(0, 2 * $m_length);
            $lhs_value[] = 1;
            $rhs = new $class();

            list($u) = $lhs->divide($m);
            $u = $u->value;
        }

        $m = $m->value;
        $m1 = $m1->value;

        $cutoff = count($m) + (count($m) >> 1);

        $code = $correctionNeeded ?
            'array_unshift($n, 0);' :
            '';

        $code .= '
            if (count($n) > ' . (2 * count($m)) . ') {
                $lhs = new ' . $class . '();
                $rhs = new ' . $class . '();
                $lhs->value = $n;
                $rhs->value = [' .
                implode(',', array_map(self::class . '::float2string', $m)) . '];
                list(, $temp) = $lhs->divide($rhs);
                return $temp->value;
            }

            $lsd = array_slice($n, 0, ' . $cutoff . ');
            $msd = array_slice($n, ' . $cutoff . ');';

        $code .= self::generateInlineTrim('msd');
        $code .= self::generateInlineMultiply('msd', $m1, 'temp', $class);
        $code .= self::generateInlineAdd('lsd', 'temp', 'n', $class);

        $code .= '$temp = array_slice($n, ' . (count($m) - 1) . ');';
        $code .= self::generateInlineMultiply('temp', $u, 'temp2', $class);
        $code .= self::generateInlineTrim('temp2');

        $code .= $class::BASE == 26 ?
            '$temp = array_slice($temp2, ' . (count($m) + 1) . ');' :
            '$temp = array_slice($temp2, ' . ((count($m) >> 1) + 1) . ');';
        $code .= self::generateInlineMultiply('temp', $m, 'temp2', $class);
        $code .= self::generateInlineTrim('temp2');

        /*
        if ($class::BASE == 26) {
            $code.= '$n = array_slice($n, 0, ' . (count($m) + 1) . ');
                     $temp2 = array_slice($temp2, 0, ' . (count($m) + 1) . ');';
        }
        */

        $code .= self::generateInlineSubtract2('n', 'temp2', 'temp', $class);

        $subcode = self::generateInlineSubtract1('temp', $m, 'temp2', $class);
        $subcode .= '$temp = $temp2;';

        $code .= self::generateInlineCompare($m, 'temp', $subcode);

        if ($correctionNeeded) {
            $code .= 'array_shift($temp);';
        }

        $code .= 'return $temp;';

        eval('$func = function ($n) { ' . $code . '};');

        self::$custom_reduction = $func;

        return $func;

        //self::$custom_reduction = \Closure::bind($func, $m, $class);
    }

    /**
     * Inline Trim
     *
     * Removes leading zeros
     *
     * @param string $name
     * @return string
     */
    private static function generateInlineTrim($name)
    {
        return '
            for ($i = count($' . $name . ') - 1; $i >= 0; --$i) {
                if ($' . $name . '[$i]) {
                    break;
                }
                unset($' . $name . '[$i]);
            }';
    }

    /**
     * Inline Multiply (unknown, known)
     *
     * @param string $input
     * @param array $arr
     * @param string $output
     * @param string $class
     * @return string
     */
    private static function generateInlineMultiply($input, array $arr, $output, $class)
    {
        if (!count($arr)) {
            return 'return [];';
        }

        $regular = '
            $length = count($' . $input . ');
            if (!$length) {
                $' . $output . ' = [];
            }else{
            $' . $output . ' = array_fill(0, $length + ' . count($arr) . ', 0);
            $carry = 0;';

        for ($i = 0; $i < count($arr); $i++) {
            $regular .= '
                $subtemp = $' . $input . '[0] * ' . $arr[$i];
            $regular .= $i ? ' + $carry;' : ';';

            $regular .= '$carry = ';
            $regular .= $class::BASE === 26 ?
            'intval($subtemp / 0x4000000);' :
            '$subtemp >> 31;';
            $regular .=
            '$' . $output . '[' . $i . '] = ';
            if ($class::BASE === 26) {
                $regular .= '(int) (';
            }
            $regular .= '$subtemp - ' . $class::BASE_FULL . ' * $carry';
            $regular .= $class::BASE === 26 ? ');' : ';';
        }

        $regular .= '$' . $output . '[' . count($arr) . '] = $carry;';

        $regular .= '
            for ($i = 1; $i < $length; ++$i) {';

        for ($j = 0; $j < count($arr); $j++) {
            $regular .= $j ? '$k++;' : '$k = $i;';
            $regular .= '
                $subtemp = $' . $output . '[$k] + $' . $input . '[$i] * ' . $arr[$j];
            $regular .= $j ? ' + $carry;' : ';';

            $regular .= '$carry = ';
            $regular .= $class::BASE === 26 ?
                'intval($subtemp / 0x4000000);' :
                '$subtemp >> 31;';
            $regular .=
                '$' . $output . '[$k] = ';
            if ($class::BASE === 26) {
                $regular .= '(int) (';
            }
            $regular .= '$subtemp - ' . $class::BASE_FULL . ' * $carry';
            $regular .= $class::BASE === 26 ? ');' : ';';
        }

        $regular .= '$' . $output . '[++$k] = $carry; $carry = 0;';

        $regular .= '}}';

        //if (count($arr) < 2 * self::KARATSUBA_CUTOFF) {
        //}

        return $regular;
    }

    /**
     * Inline Addition
     *
     * @param string $x
     * @param string $y
     * @param string $result
     * @param string $class
     * @return string
     */
    private static function generateInlineAdd($x, $y, $result, $class)
    {
        $code = '
            $length = max(count($' . $x . '), count($' . $y . '));
            $' . $result . ' = array_pad($' . $x . ', $length + 1, 0);
            $_' . $y . ' = array_pad($' . $y . ', $length, 0);
            $carry = 0;
            for ($i = 0, $j = 1; $j < $length; $i+=2, $j+=2) {
                $sum = ($' . $result . '[$j] + $_' . $y . '[$j]) * ' . $class::BASE_FULL . '
                           + $' . $result . '[$i] + $_' . $y . '[$i] +
                           $carry;
                $carry = $sum >= ' . self::float2string($class::MAX_DIGIT2) . ';
                $sum = $carry ? $sum - ' . self::float2string($class::MAX_DIGIT2) . ' : $sum;';

            $code .= $class::BASE === 26 ?
                '$upper = intval($sum / 0x4000000); $' . $result . '[$i] = (int) ($sum - ' . $class::BASE_FULL . ' * $upper);' :
                '$upper = $sum >> 31; $' . $result . '[$i] = $sum - ' . $class::BASE_FULL . ' * $upper;';
            $code .= '
                $' . $result . '[$j] = $upper;
            }
            if ($j == $length) {
                $sum = $' . $result . '[$i] + $_' . $y . '[$i] + $carry;
                $carry = $sum >= ' . self::float2string($class::BASE_FULL) . ';
                $' . $result . '[$i] = $carry ? $sum - ' . self::float2string($class::BASE_FULL) . ' : $sum;
                ++$i;
            }
            if ($carry) {
                for (; $' . $result . '[$i] == ' . $class::MAX_DIGIT . '; ++$i) {
                    $' . $result . '[$i] = 0;
                }
                ++$' . $result . '[$i];
            }';
            $code .= self::generateInlineTrim($result);

            return $code;
    }

    /**
     * Inline Subtraction 2
     *
     * For when $known is more digits than $unknown. This is the harder use case to optimize for.
     *
     * @param string $known
     * @param string $unknown
     * @param string $result
     * @param string $class
     * @return string
     */
    private static function generateInlineSubtract2($known, $unknown, $result, $class)
    {
        $code = '
            $' . $result . ' = $' . $known . ';
            $carry = 0;
            $size = count($' . $unknown . ');
            for ($i = 0, $j = 1; $j < $size; $i+= 2, $j+= 2) {
                $sum = ($' . $known . '[$j] - $' . $unknown . '[$j]) * ' . $class::BASE_FULL . ' + $' . $known . '[$i]
                    - $' . $unknown . '[$i]
                    - $carry;
                $carry = $sum < 0;
                if ($carry) {
                    $sum+= ' . self::float2string($class::MAX_DIGIT2) . ';
                }
                $subtemp = ';
        $code .= $class::BASE === 26 ?
            'intval($sum / 0x4000000);' :
            '$sum >> 31;';
        $code .= '$' . $result . '[$i] = ';
        if ($class::BASE === 26) {
            $code .= '(int) (';
        }
        $code .= '$sum - ' . $class::BASE_FULL . ' * $subtemp';
        if ($class::BASE === 26) {
            $code .= ')';
        }
        $code .= ';
                $' . $result . '[$j] = $subtemp;
            }
            if ($j == $size) {
                $sum = $' . $known . '[$i] - $' . $unknown . '[$i] - $carry;
                $carry = $sum < 0;
                $' . $result . '[$i] = $carry ? $sum + ' . $class::BASE_FULL . ' : $sum;
                ++$i;
            }

            if ($carry) {
                for (; !$' . $result . '[$i]; ++$i) {
                    $' . $result . '[$i] = ' . $class::MAX_DIGIT . ';
                }
                --$' . $result . '[$i];
            }';

        $code .= self::generateInlineTrim($result);

        return $code;
    }

    /**
     * Inline Subtraction 1
     *
     * For when $unknown is more digits than $known. This is the easier use case to optimize for.
     *
     * @param string $unknown
     * @param array $known
     * @param string $result
     * @param string $class
     * @return string
     */
    private static function generateInlineSubtract1($unknown, array $known, $result, $class)
    {
        $code = '$' . $result . ' = $' . $unknown . ';';
        for ($i = 0, $j = 1; $j < count($known); $i += 2, $j += 2) {
            $code .= '$sum = $' . $unknown . '[' . $j . '] * ' . $class::BASE_FULL . ' + $' . $unknown . '[' . $i . '] - ';
            $code .= self::float2string($known[$j] * $class::BASE_FULL + $known[$i]);
            if ($i != 0) {
                $code .= ' - $carry';
            }

            $code .= ';
                if ($carry = $sum < 0) {
                    $sum+= ' . self::float2string($class::MAX_DIGIT2) . ';
                }
                $subtemp = ';
            $code .= $class::BASE === 26 ?
                'intval($sum / 0x4000000);' :
                '$sum >> 31;';
            $code .= '
                $' . $result . '[' . $i . '] = ';
            if ($class::BASE === 26) {
                $code .= ' (int) (';
            }
            $code .= '$sum - ' . $class::BASE_FULL . ' * $subtemp';
            if ($class::BASE === 26) {
                $code .= ')';
            }
            $code .= ';
                $' . $result . '[' . $j . '] = $subtemp;';
        }

        $code .= '$i = ' . $i . ';';

        if ($j == count($known)) {
            $code .= '
                $sum = $' . $unknown . '[' . $i . '] - ' . $known[$i] . ' - $carry;
                $carry = $sum < 0;
                $' . $result . '[' . $i . '] = $carry ? $sum + ' . $class::BASE_FULL . ' : $sum;
                ++$i;';
        }

        $code .= '
            if ($carry) {
                for (; !$' . $result . '[$i]; ++$i) {
                    $' . $result . '[$i] = ' . $class::MAX_DIGIT . ';
                }
                --$' . $result . '[$i];
            }';
        $code .= self::generateInlineTrim($result);

        return $code;
    }

    /**
     * Inline Comparison
     *
     * If $unknown >= $known then loop
     *
     * @param array $known
     * @param string $unknown
     * @param string $subcode
     * @return string
     */
    private static function generateInlineCompare(array $known, $unknown, $subcode)
    {
        $uniqid = uniqid();
        $code = 'loop_' . $uniqid . ':
            $clength = count($' . $unknown . ');
            switch (true) {
                case $clength < ' . count($known) . ':
                    goto end_' . $uniqid . ';
                case $clength > ' . count($known) . ':';
        for ($i = count($known) - 1; $i >= 0; $i--) {
            $code .= '
                case $' . $unknown . '[' . $i . '] > ' . $known[$i] . ':
                    goto subcode_' . $uniqid . ';
                case $' . $unknown . '[' . $i . '] < ' . $known[$i] . ':
                    goto end_' . $uniqid . ';';
        }
        $code .= '
                default:
                    // do subcode
            }

            subcode_' . $uniqid . ':' . $subcode . '
            goto loop_' . $uniqid . ';

            end_' . $uniqid . ':';

        return $code;
    }

    /**
     * Convert a float to a string
     *
     * If you do echo floatval(pow(2, 52)) you'll get 4.6116860184274E+18. It /can/ be displayed without a loss of
     * precision but displayed in this way there will be precision loss, hence the need for this method.
     *
     * @param int|float $num
     * @return string
     */
    private static function float2string($num)
    {
        if (!is_float($num)) {
            return (string) $num;
        }

        if ($num < 0) {
            return '-' . self::float2string(abs($num));
        }

        $temp = '';
        while ($num) {
            $temp = fmod($num, 10) . $temp;
            $num = floor($num / 10);
        }

        return $temp;
    }
}
<?php

/**
 * PHP Montgomery Modular Exponentiation Engine
 *
 * PHP version 5 and 7
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2017 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://pear.php.net/package/Math_BigInteger
 */

namespace phpseclib3\Math\BigInteger\Engines\PHP\Reductions;

use phpseclib3\Math\BigInteger\Engines\PHP\Montgomery as Progenitor;

/**
 * PHP Montgomery Modular Exponentiation Engine
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class Montgomery extends Progenitor
{
    /**
     * Prepare a number for use in Montgomery Modular Reductions
     *
     * @param array $x
     * @param array $n
     * @param string $class
     * @return array
     */
    protected static function prepareReduce(array $x, array $n, $class)
    {
        $lhs = new $class();
        $lhs->value = array_merge(self::array_repeat(0, count($n)), $x);
        $rhs = new $class();
        $rhs->value = $n;

        list(, $temp) = $lhs->divide($rhs);
        return $temp->value;
    }

    /**
     * Montgomery Multiply
     *
     * Interleaves the montgomery reduction and long multiplication algorithms together as described in
     * {@link http://www.cacr.math.uwaterloo.ca/hac/about/chap14.pdf#page=13 HAC 14.36}
     *
     * @param array $x
     * @param array $n
     * @param string $class
     * @return array
     */
    protected static function reduce(array $x, array $n, $class)
    {
        static $cache = [
            self::VARIABLE => [],
            self::DATA => []
        ];

        if (($key = array_search($n, $cache[self::VARIABLE])) === false) {
            $key = count($cache[self::VARIABLE]);
            $cache[self::VARIABLE][] = $x;
            $cache[self::DATA][] = self::modInverse67108864($n, $class);
        }

        $k = count($n);

        $result = [self::VALUE => $x];

        for ($i = 0; $i < $k; ++$i) {
            $temp = $result[self::VALUE][$i] * $cache[self::DATA][$key];
            $temp = $temp - $class::BASE_FULL * ($class::BASE === 26 ? intval($temp / 0x4000000) : ($temp >> 31));
            $temp = $class::regularMultiply([$temp], $n);
            $temp = array_merge(self::array_repeat(0, $i), $temp);
            $result = $class::addHelper($result[self::VALUE], false, $temp, false);
        }

        $result[self::VALUE] = array_slice($result[self::VALUE], $k);

        if (self::compareHelper($result, false, $n, false) >= 0) {
            $result = $class::subtractHelper($result[self::VALUE], false, $n, false);
        }

        return $result[self::VALUE];
    }

    /**
     * Modular Inverse of a number mod 2**26 (eg. 67108864)
     *
     * Based off of the bnpInvDigit function implemented and justified in the following URL:
     *
     * {@link http://www-cs-students.stanford.edu/~tjw/jsbn/jsbn.js}
     *
     * The following URL provides more info:
     *
     * {@link http://groups.google.com/group/sci.crypt/msg/7a137205c1be7d85}
     *
     * As for why we do all the bitmasking...  strange things can happen when converting from floats to ints. For
     * instance, on some computers, var_dump((int) -4294967297) yields int(-1) and on others, it yields
     * int(-2147483648).  To avoid problems stemming from this, we use bitmasks to guarantee that ints aren't
     * auto-converted to floats.  The outermost bitmask is present because without it, there's no guarantee that
     * the "residue" returned would be the so-called "common residue".  We use fmod, in the last step, because the
     * maximum possible $x is 26 bits and the maximum $result is 16 bits.  Thus, we have to be able to handle up to
     * 40 bits, which only 64-bit floating points will support.
     *
     * Thanks to Pedro Gimeno Fortea for input!
     *
     * @param array $x
     * @param string $class
     * @return int
     */
    protected static function modInverse67108864(array $x, $class) // 2**26 == 67,108,864
    {
        $x = -$x[0];
        $result = $x & 0x3; // x**-1 mod 2**2
        $result = ($result * (2 - $x * $result)) & 0xF; // x**-1 mod 2**4
        $result = ($result * (2 - ($x & 0xFF) * $result))  & 0xFF; // x**-1 mod 2**8
        $result = ($result * ((2 - ($x & 0xFFFF) * $result) & 0xFFFF)) & 0xFFFF; // x**-1 mod 2**16
        $result = $class::BASE == 26 ?
            fmod($result * (2 - fmod($x * $result, $class::BASE_FULL)), $class::BASE_FULL) : // x**-1 mod 2**26
            ($result * (2 - ($x * $result) % $class::BASE_FULL)) % $class::BASE_FULL;
        return $result & $class::MAX_DIGIT;
    }
}
<?php

/**
 * PHP Montgomery Modular Exponentiation Engine with interleaved multiplication
 *
 * PHP version 5 and 7
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2017 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://pear.php.net/package/Math_BigInteger
 */

namespace phpseclib3\Math\BigInteger\Engines\PHP\Reductions;

use phpseclib3\Math\BigInteger\Engines\PHP;

/**
 * PHP Montgomery Modular Exponentiation Engine with interleaved multiplication
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class MontgomeryMult extends Montgomery
{
    /**
     * Montgomery Multiply
     *
     * Interleaves the montgomery reduction and long multiplication algorithms together as described in
     * {@link http://www.cacr.math.uwaterloo.ca/hac/about/chap14.pdf#page=13 HAC 14.36}
     *
     * @see self::_prepMontgomery()
     * @see self::_montgomery()
     * @param array $x
     * @param array $y
     * @param array $m
     * @param class-string<PHP> $class
     * @return array
     */
    public static function multiplyReduce(array $x, array $y, array $m, $class)
    {
        // the following code, although not callable, can be run independently of the above code
        // although the above code performed better in my benchmarks the following could might
        // perform better under different circumstances. in lieu of deleting it it's just been
        // made uncallable

        static $cache = [
            self::VARIABLE => [],
            self::DATA => []
        ];

        if (($key = array_search($m, $cache[self::VARIABLE])) === false) {
            $key = count($cache[self::VARIABLE]);
            $cache[self::VARIABLE][] = $m;
            $cache[self::DATA][] = self::modInverse67108864($m, $class);
        }

        $n = max(count($x), count($y), count($m));
        $x = array_pad($x, $n, 0);
        $y = array_pad($y, $n, 0);
        $m = array_pad($m, $n, 0);
        $a = [self::VALUE => self::array_repeat(0, $n + 1)];
        for ($i = 0; $i < $n; ++$i) {
            $temp = $a[self::VALUE][0] + $x[$i] * $y[0];
            $temp = $temp - $class::BASE_FULL * ($class::BASE === 26 ? intval($temp / 0x4000000) : ($temp >> 31));
            $temp = $temp * $cache[self::DATA][$key];
            $temp = $temp - $class::BASE_FULL * ($class::BASE === 26 ? intval($temp / 0x4000000) : ($temp >> 31));
            $temp = $class::addHelper($class::regularMultiply([$x[$i]], $y), false, $class::regularMultiply([$temp], $m), false);
            $a = $class::addHelper($a[self::VALUE], false, $temp[self::VALUE], false);
            $a[self::VALUE] = array_slice($a[self::VALUE], 1);
        }
        if (self::compareHelper($a[self::VALUE], false, $m, false) >= 0) {
            $a = $class::subtractHelper($a[self::VALUE], false, $m, false);
        }
        return $a[self::VALUE];
    }
}
<?php

/**
 * PHP Power of Two Modular Exponentiation Engine
 *
 * PHP version 5 and 7
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2017 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://pear.php.net/package/Math_BigInteger
 */

namespace phpseclib3\Math\BigInteger\Engines\PHP\Reductions;

use phpseclib3\Math\BigInteger\Engines\PHP\Base;

/**
 * PHP Power Of Two Modular Exponentiation Engine
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class PowerOfTwo extends Base
{
    /**
     * Prepare a number for use in Montgomery Modular Reductions
     *
     * @param array $x
     * @param array $n
     * @param string $class
     * @return array
     */
    protected static function prepareReduce(array $x, array $n, $class)
    {
        return self::reduce($x, $n, $class);
    }

    /**
     * Power Of Two Reduction
     *
     * @param array $x
     * @param array $n
     * @param string $class
     * @return array
     */
    protected static function reduce(array $x, array $n, $class)
    {
        $lhs = new $class();
        $lhs->value = $x;
        $rhs = new $class();
        $rhs->value = $n;

        $temp = new $class();
        $temp->value = [1];

        $result = $lhs->bitwise_and($rhs->subtract($temp));
        return $result->value;
    }
}
<?php

/**
 * Pure-PHP 32-bit BigInteger Engine
 *
 * PHP version 5 and 7
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2017 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://pear.php.net/package/Math_BigInteger
 */

namespace phpseclib3\Math\BigInteger\Engines;

/**
 * Pure-PHP 32-bit Engine.
 *
 * Uses 64-bit floats if int size is 4 bits
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
class PHP32 extends PHP
{
    // Constants used by PHP.php
    const BASE = 26;
    const BASE_FULL = 0x4000000;
    const MAX_DIGIT = 0x3FFFFFF;
    const MSB = 0x2000000;

    /**
     * MAX10 in greatest MAX10LEN satisfying
     * MAX10 = 10**MAX10LEN <= 2**BASE.
     */
    const MAX10 = 10000000;

    /**
     * MAX10LEN in greatest MAX10LEN satisfying
     * MAX10 = 10**MAX10LEN <= 2**BASE.
     */
    const MAX10LEN = 7;
    const MAX_DIGIT2 = 4503599627370496;

    /**
     * Initialize a PHP32 BigInteger Engine instance
     *
     * @param int $base
     * @see parent::initialize()
     */
    protected function initialize($base)
    {
        if ($base != 256 && $base != -256) {
            return parent::initialize($base);
        }

        $val = $this->value;
        $this->value = [];
        $vals = &$this->value;
        $i = strlen($val);
        if (!$i) {
            return;
        }

        while (true) {
            $i -= 4;
            if ($i < 0) {
                if ($i == -4) {
                    break;
                }
                $val = substr($val, 0, 4 + $i);
                $val = str_pad($val, 4, "\0", STR_PAD_LEFT);
                if ($val == "\0\0\0\0") {
                    break;
                }
                $i = 0;
            }
            list(, $digit) = unpack('N', substr($val, $i, 4));
            if ($digit < 0) {
                $digit += 0xFFFFFFFF + 1;
            }
            $step = count($vals) & 3;
            if ($step) {
                $digit = (int) floor($digit / pow(2, 2 * $step));
            }
            if ($step != 3) {
                $digit = (int) fmod($digit, static::BASE_FULL);
                $i++;
            }
            $vals[] = $digit;
        }
        while (end($vals) === 0) {
            array_pop($vals);
        }
        reset($vals);
    }

    /**
     * Test for engine validity
     *
     * @see parent::__construct()
     * @return bool
     */
    public static function isValidEngine()
    {
        return PHP_INT_SIZE >= 4 && !self::testJITOnWindows();
    }

    /**
     * Adds two BigIntegers.
     *
     * @param PHP32 $y
     * @return PHP32
     */
    public function add(PHP32 $y)
    {
        $temp = self::addHelper($this->value, $this->is_negative, $y->value, $y->is_negative);

        return $this->convertToObj($temp);
    }

    /**
     * Subtracts two BigIntegers.
     *
     * @param PHP32 $y
     * @return PHP32
     */
    public function subtract(PHP32 $y)
    {
        $temp = self::subtractHelper($this->value, $this->is_negative, $y->value, $y->is_negative);

        return $this->convertToObj($temp);
    }

    /**
     * Multiplies two BigIntegers.
     *
     * @param PHP32 $y
     * @return PHP32
     */
    public function multiply(PHP32 $y)
    {
        $temp = self::multiplyHelper($this->value, $this->is_negative, $y->value, $y->is_negative);

        return $this->convertToObj($temp);
    }

    /**
     * Divides two BigIntegers.
     *
     * Returns an array whose first element contains the quotient and whose second element contains the
     * "common residue".  If the remainder would be positive, the "common residue" and the remainder are the
     * same.  If the remainder would be negative, the "common residue" is equal to the sum of the remainder
     * and the divisor (basically, the "common residue" is the first positive modulo).
     *
     * @param PHP32 $y
     * @return array{PHP32, PHP32}
     */
    public function divide(PHP32 $y)
    {
        return $this->divideHelper($y);
    }

    /**
     * Calculates modular inverses.
     *
     * Say you have (30 mod 17 * x mod 17) mod 17 == 1.  x can be found using modular inverses.
     * @param PHP32 $n
     * @return false|PHP32
     */
    public function modInverse(PHP32 $n)
    {
        return $this->modInverseHelper($n);
    }

    /**
     * Calculates modular inverses.
     *
     * Say you have (30 mod 17 * x mod 17) mod 17 == 1.  x can be found using modular inverses.
     * @param PHP32 $n
     * @return PHP32[]
     */
    public function extendedGCD(PHP32 $n)
    {
        return $this->extendedGCDHelper($n);
    }

    /**
     * Calculates the greatest common divisor
     *
     * Say you have 693 and 609.  The GCD is 21.
     *
     * @param PHP32 $n
     * @return PHP32
     */
    public function gcd(PHP32 $n)
    {
        return $this->extendedGCD($n)['gcd'];
    }

    /**
     * Logical And
     *
     * @param PHP32 $x
     * @return PHP32
     */
    public function bitwise_and(PHP32 $x)
    {
        return $this->bitwiseAndHelper($x);
    }

    /**
     * Logical Or
     *
     * @param PHP32 $x
     * @return PHP32
     */
    public function bitwise_or(PHP32 $x)
    {
        return $this->bitwiseOrHelper($x);
    }

    /**
     * Logical Exclusive Or
     *
     * @param PHP32 $x
     * @return PHP32
     */
    public function bitwise_xor(PHP32 $x)
    {
        return $this->bitwiseXorHelper($x);
    }

    /**
     * Compares two numbers.
     *
     * Although one might think !$x->compare($y) means $x != $y, it, in fact, means the opposite.  The reason for this is
     * demonstrated thusly:
     *
     * $x  > $y: $x->compare($y)  > 0
     * $x  < $y: $x->compare($y)  < 0
     * $x == $y: $x->compare($y) == 0
     *
     * Note how the same comparison operator is used.  If you want to test for equality, use $x->equals($y).
     *
     * {@internal Could return $this->subtract($x), but that's not as fast as what we do do.}
     *
     * @param PHP32 $y
     * @return int in case < 0 if $this is less than $y; > 0 if $this is greater than $y, and 0 if they are equal.
     * @see self::equals()
     */
    public function compare(PHP32 $y)
    {
        return $this->compareHelper($this->value, $this->is_negative, $y->value, $y->is_negative);
    }

    /**
     * Tests the equality of two numbers.
     *
     * If you need to see if one number is greater than or less than another number, use BigInteger::compare()
     *
     * @param PHP32 $x
     * @return bool
     */
    public function equals(PHP32 $x)
    {
        return $this->value === $x->value && $this->is_negative == $x->is_negative;
    }

    /**
     * Performs modular exponentiation.
     *
     * @param PHP32 $e
     * @param PHP32 $n
     * @return PHP32
     */
    public function modPow(PHP32 $e, PHP32 $n)
    {
        return $this->powModOuter($e, $n);
    }

    /**
     * Performs modular exponentiation.
     *
     * Alias for modPow().
     *
     * @param PHP32 $e
     * @param PHP32 $n
     * @return PHP32
     */
    public function powMod(PHP32 $e, PHP32 $n)
    {
        return $this->powModOuter($e, $n);
    }

    /**
     * Generate a random prime number between a range
     *
     * If there's not a prime within the given range, false will be returned.
     *
     * @param PHP32 $min
     * @param PHP32 $max
     * @return false|PHP32
     */
    public static function randomRangePrime(PHP32 $min, PHP32 $max)
    {
        return self::randomRangePrimeOuter($min, $max);
    }

    /**
     * Generate a random number between a range
     *
     * Returns a random number between $min and $max where $min and $max
     * can be defined using one of the two methods:
     *
     * BigInteger::randomRange($min, $max)
     * BigInteger::randomRange($max, $min)
     *
     * @param PHP32 $min
     * @param PHP32 $max
     * @return PHP32
     */
    public static function randomRange(PHP32 $min, PHP32 $max)
    {
        return self::randomRangeHelper($min, $max);
    }

    /**
     * Performs exponentiation.
     *
     * @param PHP32 $n
     * @return PHP32
     */
    public function pow(PHP32 $n)
    {
        return $this->powHelper($n);
    }

    /**
     * Return the minimum BigInteger between an arbitrary number of BigIntegers.
     *
     * @param PHP32 ...$nums
     * @return PHP32
     */
    public static function min(PHP32 ...$nums)
    {
        return self::minHelper($nums);
    }

    /**
     * Return the maximum BigInteger between an arbitrary number of BigIntegers.
     *
     * @param PHP32 ...$nums
     * @return PHP32
     */
    public static function max(PHP32 ...$nums)
    {
        return self::maxHelper($nums);
    }

    /**
     * Tests BigInteger to see if it is between two integers, inclusive
     *
     * @param PHP32 $min
     * @param PHP32 $max
     * @return bool
     */
    public function between(PHP32 $min, PHP32 $max)
    {
        return $this->compare($min) >= 0 && $this->compare($max) <= 0;
    }
}
<?php

/**
 * Pure-PHP 64-bit BigInteger Engine
 *
 * PHP version 5 and 7
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2017 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://pear.php.net/package/Math_BigInteger
 */

namespace phpseclib3\Math\BigInteger\Engines;

/**
 * Pure-PHP 64-bit Engine.
 *
 * Uses 64-bit integers if int size is 8 bits
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
class PHP64 extends PHP
{
    // Constants used by PHP.php
    const BASE = 31;
    const BASE_FULL = 0x80000000;
    const MAX_DIGIT = 0x7FFFFFFF;
    const MSB = 0x40000000;

    /**
     * MAX10 in greatest MAX10LEN satisfying
     * MAX10 = 10**MAX10LEN <= 2**BASE.
     */
    const MAX10 = 1000000000;

    /**
     * MAX10LEN in greatest MAX10LEN satisfying
     * MAX10 = 10**MAX10LEN <= 2**BASE.
     */
    const MAX10LEN = 9;
    const MAX_DIGIT2 = 4611686018427387904;

    /**
     * Initialize a PHP64 BigInteger Engine instance
     *
     * @param int $base
     * @see parent::initialize()
     */
    protected function initialize($base)
    {
        if ($base != 256 && $base != -256) {
            return parent::initialize($base);
        }

        $val = $this->value;
        $this->value = [];
        $vals = &$this->value;
        $i = strlen($val);
        if (!$i) {
            return;
        }

        while (true) {
            $i -= 4;
            if ($i < 0) {
                if ($i == -4) {
                    break;
                }
                $val = substr($val, 0, 4 + $i);
                $val = str_pad($val, 4, "\0", STR_PAD_LEFT);
                if ($val == "\0\0\0\0") {
                    break;
                }
                $i = 0;
            }
            list(, $digit) = unpack('N', substr($val, $i, 4));
            $step = count($vals) & 7;
            if (!$step) {
                $digit &= static::MAX_DIGIT;
                $i++;
            } else {
                $shift = 8 - $step;
                $digit >>= $shift;
                $shift = 32 - $shift;
                $digit &= (1 << $shift) - 1;
                $temp = $i > 0 ? ord($val[$i - 1]) : 0;
                $digit |= ($temp << $shift) & 0x7F000000;
            }
            $vals[] = $digit;
        }
        while (end($vals) === 0) {
            array_pop($vals);
        }
        reset($vals);
    }

    /**
     * Test for engine validity
     *
     * @see parent::__construct()
     * @return bool
     */
    public static function isValidEngine()
    {
        return PHP_INT_SIZE >= 8 && !self::testJITOnWindows();
    }

    /**
     * Adds two BigIntegers.
     *
     * @param PHP64 $y
     * @return PHP64
     */
    public function add(PHP64 $y)
    {
        $temp = self::addHelper($this->value, $this->is_negative, $y->value, $y->is_negative);

        return $this->convertToObj($temp);
    }

    /**
     * Subtracts two BigIntegers.
     *
     * @param PHP64 $y
     * @return PHP64
     */
    public function subtract(PHP64 $y)
    {
        $temp = self::subtractHelper($this->value, $this->is_negative, $y->value, $y->is_negative);

        return $this->convertToObj($temp);
    }

    /**
     * Multiplies two BigIntegers.
     *
     * @param PHP64 $y
     * @return PHP64
     */
    public function multiply(PHP64 $y)
    {
        $temp = self::multiplyHelper($this->value, $this->is_negative, $y->value, $y->is_negative);

        return $this->convertToObj($temp);
    }

    /**
     * Divides two BigIntegers.
     *
     * Returns an array whose first element contains the quotient and whose second element contains the
     * "common residue".  If the remainder would be positive, the "common residue" and the remainder are the
     * same.  If the remainder would be negative, the "common residue" is equal to the sum of the remainder
     * and the divisor (basically, the "common residue" is the first positive modulo).
     *
     * @param PHP64 $y
     * @return array{PHP64, PHP64}
     */
    public function divide(PHP64 $y)
    {
        return $this->divideHelper($y);
    }

    /**
     * Calculates modular inverses.
     *
     * Say you have (30 mod 17 * x mod 17) mod 17 == 1.  x can be found using modular inverses.
     * @param PHP64 $n
     * @return false|PHP64
     */
    public function modInverse(PHP64 $n)
    {
        return $this->modInverseHelper($n);
    }

    /**
     * Calculates modular inverses.
     *
     * Say you have (30 mod 17 * x mod 17) mod 17 == 1.  x can be found using modular inverses.
     * @param PHP64 $n
     * @return PHP64[]
     */
    public function extendedGCD(PHP64 $n)
    {
        return $this->extendedGCDHelper($n);
    }

    /**
     * Calculates the greatest common divisor
     *
     * Say you have 693 and 609.  The GCD is 21.
     *
     * @param PHP64 $n
     * @return PHP64
     */
    public function gcd(PHP64 $n)
    {
        return $this->extendedGCD($n)['gcd'];
    }

    /**
     * Logical And
     *
     * @param PHP64 $x
     * @return PHP64
     */
    public function bitwise_and(PHP64 $x)
    {
        return $this->bitwiseAndHelper($x);
    }

    /**
     * Logical Or
     *
     * @param PHP64 $x
     * @return PHP64
     */
    public function bitwise_or(PHP64 $x)
    {
        return $this->bitwiseOrHelper($x);
    }

    /**
     * Logical Exclusive Or
     *
     * @param PHP64 $x
     * @return PHP64
     */
    public function bitwise_xor(PHP64 $x)
    {
        return $this->bitwiseXorHelper($x);
    }

    /**
     * Compares two numbers.
     *
     * Although one might think !$x->compare($y) means $x != $y, it, in fact, means the opposite.  The reason for this is
     * demonstrated thusly:
     *
     * $x  > $y: $x->compare($y)  > 0
     * $x  < $y: $x->compare($y)  < 0
     * $x == $y: $x->compare($y) == 0
     *
     * Note how the same comparison operator is used.  If you want to test for equality, use $x->equals($y).
     *
     * {@internal Could return $this->subtract($x), but that's not as fast as what we do do.}
     *
     * @param PHP64 $y
     * @return int in case < 0 if $this is less than $y; > 0 if $this is greater than $y, and 0 if they are equal.
     * @see self::equals()
     */
    public function compare(PHP64 $y)
    {
        return parent::compareHelper($this->value, $this->is_negative, $y->value, $y->is_negative);
    }

    /**
     * Tests the equality of two numbers.
     *
     * If you need to see if one number is greater than or less than another number, use BigInteger::compare()
     *
     * @param PHP64 $x
     * @return bool
     */
    public function equals(PHP64 $x)
    {
        return $this->value === $x->value && $this->is_negative == $x->is_negative;
    }

    /**
     * Performs modular exponentiation.
     *
     * @param PHP64 $e
     * @param PHP64 $n
     * @return PHP64
     */
    public function modPow(PHP64 $e, PHP64 $n)
    {
        return $this->powModOuter($e, $n);
    }

    /**
     * Performs modular exponentiation.
     *
     * Alias for modPow().
     *
     * @param PHP64 $e
     * @param PHP64 $n
     * @return PHP64|false
     */
    public function powMod(PHP64 $e, PHP64 $n)
    {
        return $this->powModOuter($e, $n);
    }

    /**
     * Generate a random prime number between a range
     *
     * If there's not a prime within the given range, false will be returned.
     *
     * @param PHP64 $min
     * @param PHP64 $max
     * @return false|PHP64
     */
    public static function randomRangePrime(PHP64 $min, PHP64 $max)
    {
        return self::randomRangePrimeOuter($min, $max);
    }

    /**
     * Generate a random number between a range
     *
     * Returns a random number between $min and $max where $min and $max
     * can be defined using one of the two methods:
     *
     * BigInteger::randomRange($min, $max)
     * BigInteger::randomRange($max, $min)
     *
     * @param PHP64 $min
     * @param PHP64 $max
     * @return PHP64
     */
    public static function randomRange(PHP64 $min, PHP64 $max)
    {
        return self::randomRangeHelper($min, $max);
    }

    /**
     * Performs exponentiation.
     *
     * @param PHP64 $n
     * @return PHP64
     */
    public function pow(PHP64 $n)
    {
        return $this->powHelper($n);
    }

    /**
     * Return the minimum BigInteger between an arbitrary number of BigIntegers.
     *
     * @param PHP64 ...$nums
     * @return PHP64
     */
    public static function min(PHP64 ...$nums)
    {
        return self::minHelper($nums);
    }

    /**
     * Return the maximum BigInteger between an arbitrary number of BigIntegers.
     *
     * @param PHP64 ...$nums
     * @return PHP64
     */
    public static function max(PHP64 ...$nums)
    {
        return self::maxHelper($nums);
    }

    /**
     * Tests BigInteger to see if it is between two integers, inclusive
     *
     * @param PHP64 $min
     * @param PHP64 $max
     * @return bool
     */
    public function between(PHP64 $min, PHP64 $max)
    {
        return $this->compare($min) >= 0 && $this->compare($max) <= 0;
    }
}
<?php

/**
 * Binary Finite Fields
 *
 * Utilizes the factory design pattern
 *
 * PHP version 5 and 7
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2017 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 */

namespace phpseclib3\Math;

use phpseclib3\Common\Functions\Strings;
use phpseclib3\Math\BinaryField\Integer;
use phpseclib3\Math\Common\FiniteField;

/**
 * Binary Finite Fields
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
class BinaryField extends FiniteField
{
    /**
     * Instance Counter
     *
     * @var int
     */
    private static $instanceCounter = 0;

    /**
     * Keeps track of current instance
     *
     * @var int
     */
    protected $instanceID;

    /** @var BigInteger */
    private $randomMax;

    /**
     * Default constructor
     */
    public function __construct(...$indices)
    {
        $m = array_shift($indices);
        if ($m > 571) {
            /* sect571r1 and sect571k1 are the largest binary curves that https://www.secg.org/sec2-v2.pdf defines
               altho theoretically there may be legit reasons to use binary finite fields with larger degrees
               imposing a limit on the maximum size is both reasonable and precedented. in particular,
               http://tools.ietf.org/html/rfc4253#section-6.1 (The Secure Shell (SSH) Transport Layer Protocol) says
               "implementations SHOULD check that the packet length is reasonable in order for the implementation to
                avoid denial of service and/or buffer overflow attacks" */
            throw new \OutOfBoundsException('Degrees larger than 571 are not supported');
        }
        $val = str_repeat('0', $m) . '1';
        foreach ($indices as $index) {
            $val[$index] = '1';
        }
        $modulo = static::base2ToBase256(strrev($val));

        $mStart = 2 * $m - 2;
        $t = ceil($m / 8);
        $finalMask = chr((1 << ($m % 8)) - 1);
        if ($finalMask == "\0") {
            $finalMask = "\xFF";
        }
        $bitLen = $mStart + 1;
        $pad = ceil($bitLen / 8);
        $h = $bitLen & 7;
        $h = $h ? 8 - $h : 0;

        $r = rtrim(substr($val, 0, -1), '0');
        $u = [static::base2ToBase256(strrev($r))];
        for ($i = 1; $i < 8; $i++) {
            $u[] = static::base2ToBase256(strrev(str_repeat('0', $i) . $r));
        }

        // implements algorithm 2.40 (in section 2.3.5) in "Guide to Elliptic Curve Cryptography"
        // with W = 8
        $reduce = function ($c) use ($u, $mStart, $m, $t, $finalMask, $pad, $h) {
            $c = str_pad($c, $pad, "\0", STR_PAD_LEFT);
            for ($i = $mStart; $i >= $m;) {
                $g = $h >> 3;
                $mask = $h & 7;
                $mask = $mask ? 1 << (7 - $mask) : 0x80;
                for (; $mask > 0; $mask >>= 1, $i--, $h++) {
                    if (ord($c[$g]) & $mask) {
                        $temp = $i - $m;
                        $j = $temp >> 3;
                        $k = $temp & 7;
                        $t1 = $j ? substr($c, 0, -$j) : $c;
                        $length = strlen($t1);
                        if ($length) {
                            $t2 = str_pad($u[$k], $length, "\0", STR_PAD_LEFT);
                            $temp = $t1 ^ $t2;
                            $c = $j ? substr_replace($c, $temp, 0, $length) : $temp;
                        }
                    }
                }
            }
            $c = substr($c, -$t);
            if (strlen($c) == $t) {
                $c[0] = $c[0] & $finalMask;
            }
            return ltrim($c, "\0");
        };

        $this->instanceID = self::$instanceCounter++;
        Integer::setModulo($this->instanceID, $modulo);
        Integer::setRecurringModuloFunction($this->instanceID, $reduce);

        $this->randomMax = new BigInteger($modulo, 2);
    }

    /**
     * Returns an instance of a dynamically generated PrimeFieldInteger class
     *
     * @param string $num
     * @return Integer
     */
    public function newInteger($num)
    {
        return new Integer($this->instanceID, $num instanceof BigInteger ? $num->toBytes() : $num);
    }

    /**
     * Returns an integer on the finite field between one and the prime modulo
     *
     * @return Integer
     */
    public function randomInteger()
    {
        static $one;
        if (!isset($one)) {
            $one = new BigInteger(1);
        }

        return new Integer($this->instanceID, BigInteger::randomRange($one, $this->randomMax)->toBytes());
    }

    /**
     * Returns the length of the modulo in bytes
     *
     * @return int
     */
    public function getLengthInBytes()
    {
        return strlen(Integer::getModulo($this->instanceID));
    }

    /**
     * Returns the length of the modulo in bits
     *
     * @return int
     */
    public function getLength()
    {
        return strlen(Integer::getModulo($this->instanceID)) << 3;
    }

    /**
     * Converts a base-2 string to a base-256 string
     *
     * @param string $x
     * @param int|null $size
     * @return string
     */
    public static function base2ToBase256($x, $size = null)
    {
        $str = Strings::bits2bin($x);

        $pad = strlen($x) >> 3;
        if (strlen($x) & 3) {
            $pad++;
        }
        $str = str_pad($str, $pad, "\0", STR_PAD_LEFT);
        if (isset($size)) {
            $str = str_pad($str, $size, "\0", STR_PAD_LEFT);
        }

        return $str;
    }

    /**
     * Converts a base-256 string to a base-2 string
     *
     * @param string $x
     * @return string
     */
    public static function base256ToBase2($x)
    {
        if (function_exists('gmp_import')) {
            return gmp_strval(gmp_import($x), 2);
        }

        return Strings::bin2bits($x);
    }
}
<?php

/**
 * Binary Finite Fields
 *
 * In a binary finite field numbers are actually polynomial equations. If you
 * represent the number as a sequence of bits you get a sequence of 1's or 0's.
 * These 1's or 0's represent the coefficients of the x**n, where n is the
 * location of the given bit. When you add numbers over a binary finite field
 * the result should have a coefficient of 1 or 0 as well. Hence addition
 * and subtraction become the same operation as XOR.
 * eg. 1 + 1 + 1 == 3 % 2 == 1 or 0 - 1 == -1 % 2 == 1
 *
 * PHP version 5 and 7
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2017 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 */

namespace phpseclib3\Math\BinaryField;

use phpseclib3\Common\Functions\Strings;
use phpseclib3\Math\BigInteger;
use phpseclib3\Math\BinaryField;
use phpseclib3\Math\Common\FiniteField\Integer as Base;

/**
 * Binary Finite Fields
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
class Integer extends Base
{
    /**
     * Holds the BinaryField's value
     *
     * @var string
     */
    protected $value;

    /**
     * Keeps track of current instance
     *
     * @var int
     */
    protected $instanceID;

    /**
     * Holds the PrimeField's modulo
     *
     * @var array<int, string>
     */
    protected static $modulo;

    /**
     * Holds a pre-generated function to perform modulo reductions
     *
     * @var callable[]
     */
    protected static $reduce;

    /**
     * Default constructor
     */
    public function __construct($instanceID, $num = '')
    {
        $this->instanceID = $instanceID;
        if (!strlen($num)) {
            $this->value = '';
        } else {
            $reduce = static::$reduce[$instanceID];
            $this->value = $reduce($num);
        }
    }

    /**
     * Set the modulo for a given instance
     * @param int $instanceID
     * @param string $modulo
     */
    public static function setModulo($instanceID, $modulo)
    {
        static::$modulo[$instanceID] = $modulo;
    }

    /**
     * Set the modulo for a given instance
     */
    public static function setRecurringModuloFunction($instanceID, callable $function)
    {
        static::$reduce[$instanceID] = $function;
    }

    /**
     * Tests a parameter to see if it's of the right instance
     *
     * Throws an exception if the incorrect class is being utilized
     */
    private static function checkInstance(self $x, self $y)
    {
        if ($x->instanceID != $y->instanceID) {
            throw new \UnexpectedValueException('The instances of the two BinaryField\Integer objects do not match');
        }
    }

    /**
     * Tests the equality of two numbers.
     *
     * @return bool
     */
    public function equals(self $x)
    {
        static::checkInstance($this, $x);

        return $this->value == $x->value;
    }

    /**
     * Compares two numbers.
     *
     * @return int
     */
    public function compare(self $x)
    {
        static::checkInstance($this, $x);

        $a = $this->value;
        $b = $x->value;

        $length = max(strlen($a), strlen($b));

        $a = str_pad($a, $length, "\0", STR_PAD_LEFT);
        $b = str_pad($b, $length, "\0", STR_PAD_LEFT);

        return strcmp($a, $b);
    }

    /**
     * Returns the degree of the polynomial
     *
     * @param string $x
     * @return int
     */
    private static function deg($x)
    {
        $x = ltrim($x, "\0");
        $xbit = decbin(ord($x[0]));
        $xlen = $xbit == '0' ? 0 : strlen($xbit);
        $len = strlen($x);
        if (!$len) {
            return -1;
        }
        return 8 * strlen($x) - 9 + $xlen;
    }

    /**
     * Perform polynomial division
     *
     * @return string[]
     * @link https://en.wikipedia.org/wiki/Polynomial_greatest_common_divisor#Euclidean_division
     */
    private static function polynomialDivide($x, $y)
    {
        // in wikipedia's description of the algorithm, lc() is the leading coefficient. over a binary field that's
        // always going to be 1.

        $q = chr(0);
        $d = static::deg($y);
        $r = $x;
        while (($degr = static::deg($r)) >= $d) {
            $s = '1' . str_repeat('0', $degr - $d);
            $s = BinaryField::base2ToBase256($s);
            $length = max(strlen($s), strlen($q));
            $q = !isset($q) ? $s :
                str_pad($q, $length, "\0", STR_PAD_LEFT) ^
                str_pad($s, $length, "\0", STR_PAD_LEFT);
            $s = static::polynomialMultiply($s, $y);
            $length = max(strlen($r), strlen($s));
            $r = str_pad($r, $length, "\0", STR_PAD_LEFT) ^
                 str_pad($s, $length, "\0", STR_PAD_LEFT);
        }

        return [ltrim($q, "\0"), ltrim($r, "\0")];
    }

    /**
     * Perform polynomial multiplation in the traditional way
     *
     * @return string
     * @link https://en.wikipedia.org/wiki/Finite_field_arithmetic#Multiplication
     */
    private static function regularPolynomialMultiply($x, $y)
    {
        $precomputed = [ltrim($x, "\0")];
        $x = strrev(BinaryField::base256ToBase2($x));
        $y = strrev(BinaryField::base256ToBase2($y));
        if (strlen($x) == strlen($y)) {
            $length = strlen($x);
        } else {
            $length = max(strlen($x), strlen($y));
            $x = str_pad($x, $length, '0');
            $y = str_pad($y, $length, '0');
        }
        $result = str_repeat('0', 2 * $length - 1);
        $result = BinaryField::base2ToBase256($result);
        $size = strlen($result);
        $x = strrev($x);

        // precompute left shift 1 through 7
        for ($i = 1; $i < 8; $i++) {
            $precomputed[$i] = BinaryField::base2ToBase256($x . str_repeat('0', $i));
        }
        for ($i = 0; $i < strlen($y); $i++) {
            if ($y[$i] == '1') {
                $temp = $precomputed[$i & 7] . str_repeat("\0", $i >> 3);
                $result ^= str_pad($temp, $size, "\0", STR_PAD_LEFT);
            }
        }

        return $result;
    }

    /**
     * Perform polynomial multiplation
     *
     * Uses karatsuba multiplication to reduce x-bit multiplications to a series of 32-bit multiplications
     *
     * @return string
     * @link https://en.wikipedia.org/wiki/Karatsuba_algorithm
     */
    private static function polynomialMultiply($x, $y)
    {
        if (strlen($x) == strlen($y)) {
            $length = strlen($x);
        } else {
            $length = max(strlen($x), strlen($y));
            $x = str_pad($x, $length, "\0", STR_PAD_LEFT);
            $y = str_pad($y, $length, "\0", STR_PAD_LEFT);
        }

        switch (true) {
            case PHP_INT_SIZE == 8 && $length <= 4:
                return $length != 4 ?
                    self::subMultiply(str_pad($x, 4, "\0", STR_PAD_LEFT), str_pad($y, 4, "\0", STR_PAD_LEFT)) :
                    self::subMultiply($x, $y);
            case PHP_INT_SIZE == 4 || $length > 32:
                return self::regularPolynomialMultiply($x, $y);
        }

        $m = $length >> 1;

        $x1 = substr($x, 0, -$m);
        $x0 = substr($x, -$m);
        $y1 = substr($y, 0, -$m);
        $y0 = substr($y, -$m);

        $z2 = self::polynomialMultiply($x1, $y1);
        $z0 = self::polynomialMultiply($x0, $y0);
        $z1 = self::polynomialMultiply(
            self::subAdd2($x1, $x0),
            self::subAdd2($y1, $y0)
        );

        $z1 = self::subAdd3($z1, $z2, $z0);

        $xy = self::subAdd3(
            $z2 . str_repeat("\0", 2 * $m),
            $z1 . str_repeat("\0", $m),
            $z0
        );

        return ltrim($xy, "\0");
    }

    /**
     * Perform polynomial multiplication on 2x 32-bit numbers, returning
     * a 64-bit number
     *
     * @param string $x
     * @param string $y
     * @return string
     * @link https://www.bearssl.org/constanttime.html#ghash-for-gcm
     */
    private static function subMultiply($x, $y)
    {
        $x = unpack('N', $x)[1];
        $y = unpack('N', $y)[1];

        $x0 = $x & 0x11111111;
        $x1 = $x & 0x22222222;
        $x2 = $x & 0x44444444;
        $x3 = $x & 0x88888888;

        $y0 = $y & 0x11111111;
        $y1 = $y & 0x22222222;
        $y2 = $y & 0x44444444;
        $y3 = $y & 0x88888888;

        $z0 = ($x0 * $y0) ^ ($x1 * $y3) ^ ($x2 * $y2) ^ ($x3 * $y1);
        $z1 = ($x0 * $y1) ^ ($x1 * $y0) ^ ($x2 * $y3) ^ ($x3 * $y2);
        $z2 = ($x0 * $y2) ^ ($x1 * $y1) ^ ($x2 * $y0) ^ ($x3 * $y3);
        $z3 = ($x0 * $y3) ^ ($x1 * $y2) ^ ($x2 * $y1) ^ ($x3 * $y0);

        $z0 &= 0x1111111111111111;
        $z1 &= 0x2222222222222222;
        $z2 &= 0x4444444444444444;
        $z3 &= -8608480567731124088; // 0x8888888888888888 gets interpreted as a float

        $z = $z0 | $z1 | $z2 | $z3;

        return pack('J', $z);
    }

    /**
     * Adds two numbers
     *
     * @param string $x
     * @param string $y
     * @return string
     */
    private static function subAdd2($x, $y)
    {
        $length = max(strlen($x), strlen($y));
        $x = str_pad($x, $length, "\0", STR_PAD_LEFT);
        $y = str_pad($y, $length, "\0", STR_PAD_LEFT);
        return $x ^ $y;
    }

    /**
     * Adds three numbers
     *
     * @param string $x
     * @param string $y
     * @return string
     */
    private static function subAdd3($x, $y, $z)
    {
        $length = max(strlen($x), strlen($y), strlen($z));
        $x = str_pad($x, $length, "\0", STR_PAD_LEFT);
        $y = str_pad($y, $length, "\0", STR_PAD_LEFT);
        $z = str_pad($z, $length, "\0", STR_PAD_LEFT);
        return $x ^ $y ^ $z;
    }

    /**
     * Adds two BinaryFieldIntegers.
     *
     * @return static
     */
    public function add(self $y)
    {
        static::checkInstance($this, $y);

        $length = strlen(static::$modulo[$this->instanceID]);

        $x = str_pad($this->value, $length, "\0", STR_PAD_LEFT);
        $y = str_pad($y->value, $length, "\0", STR_PAD_LEFT);

        return new static($this->instanceID, $x ^ $y);
    }

    /**
     * Subtracts two BinaryFieldIntegers.
     *
     * @return static
     */
    public function subtract(self $x)
    {
        return $this->add($x);
    }

    /**
     * Multiplies two BinaryFieldIntegers.
     *
     * @return static
     */
    public function multiply(self $y)
    {
        static::checkInstance($this, $y);

        return new static($this->instanceID, static::polynomialMultiply($this->value, $y->value));
    }

    /**
     * Returns the modular inverse of a BinaryFieldInteger
     *
     * @return static
     */
    public function modInverse()
    {
        $remainder0 = static::$modulo[$this->instanceID];
        $remainder1 = $this->value;

        if ($remainder1 == '') {
            return new static($this->instanceID);
        }

        $aux0 = "\0";
        $aux1 = "\1";
        while ($remainder1 != "\1") {
            list($q, $r) = static::polynomialDivide($remainder0, $remainder1);
            $remainder0 = $remainder1;
            $remainder1 = $r;
            // the auxiliary in row n is given by the sum of the auxiliary in
            // row n-2 and the product of the quotient and the auxiliary in row
            // n-1
            $temp = static::polynomialMultiply($aux1, $q);
            $aux = str_pad($aux0, strlen($temp), "\0", STR_PAD_LEFT) ^
                   str_pad($temp, strlen($aux0), "\0", STR_PAD_LEFT);
            $aux0 = $aux1;
            $aux1 = $aux;
        }

        $temp = new static($this->instanceID);
        $temp->value = ltrim($aux1, "\0");
        return $temp;
    }

    /**
     * Divides two PrimeFieldIntegers.
     *
     * @return static
     */
    public function divide(self $x)
    {
        static::checkInstance($this, $x);

        $x = $x->modInverse();
        return $this->multiply($x);
    }

    /**
     * Negate
     *
     * A negative number can be written as 0-12. With modulos, 0 is the same thing as the modulo
     * so 0-12 is the same thing as modulo-12
     *
     * @return object
     */
    public function negate()
    {
        $x = str_pad($this->value, strlen(static::$modulo[$this->instanceID]), "\0", STR_PAD_LEFT);

        return new static($this->instanceID, $x ^ static::$modulo[$this->instanceID]);
    }

    /**
     * Returns the modulo
     *
     * @return string
     */
    public static function getModulo($instanceID)
    {
        return static::$modulo[$instanceID];
    }

    /**
     * Converts an Integer to a byte string (eg. base-256).
     *
     * @return string
     */
    public function toBytes()
    {
        return str_pad($this->value, strlen(static::$modulo[$this->instanceID]), "\0", STR_PAD_LEFT);
    }

    /**
     * Converts an Integer to a hex string (eg. base-16).
     *
     * @return string
     */
    public function toHex()
    {
        return Strings::bin2hex($this->toBytes());
    }

    /**
     * Converts an Integer to a bit string (eg. base-2).
     *
     * @return string
     */
    public function toBits()
    {
        //return str_pad(BinaryField::base256ToBase2($this->value), strlen(static::$modulo[$this->instanceID]), '0', STR_PAD_LEFT);
        return BinaryField::base256ToBase2($this->value);
    }

    /**
     * Converts an Integer to a BigInteger
     *
     * @return string
     */
    public function toBigInteger()
    {
        return new BigInteger($this->value, 256);
    }

    /**
     *  __toString() magic method
     *
     */
    public function __toString()
    {
        return (string) $this->toBigInteger();
    }

    /**
     *  __debugInfo() magic method
     *
     */
    public function __debugInfo()
    {
        return ['value' => $this->toHex()];
    }
}
<?php

/**
 * Finite Fields Base Class
 *
 * PHP version 5 and 7
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2017 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 */

namespace phpseclib3\Math\Common;

/**
 * Finite Fields
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class FiniteField
{
}
<?php

/**
 * Finite Field Integer Base Class
 *
 * PHP version 5 and 7
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2017 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 */

namespace phpseclib3\Math\Common\FiniteField;

/**
 * Finite Field Integer
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
abstract class Integer implements \JsonSerializable
{
    /**
     * JSON Serialize
     *
     * Will be called, automatically, when json_encode() is called on a BigInteger object.
     *
     * PHP Serialize isn't supported because unserializing would require the factory be
     * serialized as well and that just sounds like too much
     *
     * @return array{hex: string}
     */
    #[\ReturnTypeWillChange]
    public function jsonSerialize()
    {
        return ['hex' => $this->toHex(true)];
    }

    /**
     * Converts an Integer to a hex string (eg. base-16).
     *
     * @return string
     */
    abstract public function toHex();
}
<?php

/**
 * Prime Finite Fields
 *
 * Utilizes the factory design pattern
 *
 * PHP version 5 and 7
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2017 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://pear.php.net/package/Math_BigInteger
 */

namespace phpseclib3\Math;

use phpseclib3\Math\Common\FiniteField;
use phpseclib3\Math\PrimeField\Integer;

/**
 * Prime Finite Fields
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
class PrimeField extends FiniteField
{
    /**
     * Instance Counter
     *
     * @var int
     */
    private static $instanceCounter = 0;

    /**
     * Keeps track of current instance
     *
     * @var int
     */
    protected $instanceID;

    /**
     * Default constructor
     */
    public function __construct(BigInteger $modulo)
    {
        if (!$modulo->isPrime()) {
            throw new \UnexpectedValueException('PrimeField requires a prime number be passed to the constructor');
        }

        $this->instanceID = self::$instanceCounter++;
        Integer::setModulo($this->instanceID, $modulo);
        Integer::setRecurringModuloFunction($this->instanceID, $modulo->createRecurringModuloFunction());
    }

    /**
     * Use a custom defined modular reduction function
     *
     * @return void
     */
    public function setReduction(\Closure $func)
    {
        $this->reduce = $func->bindTo($this, $this);
    }

    /**
     * Returns an instance of a dynamically generated PrimeFieldInteger class
     *
     * @return Integer
     */
    public function newInteger(BigInteger $num)
    {
        return new Integer($this->instanceID, $num);
    }

    /**
     * Returns an integer on the finite field between one and the prime modulo
     *
     * @return Integer
     */
    public function randomInteger()
    {
        static $one;
        if (!isset($one)) {
            $one = new BigInteger(1);
        }

        return new Integer($this->instanceID, BigInteger::randomRange($one, Integer::getModulo($this->instanceID)));
    }

    /**
     * Returns the length of the modulo in bytes
     *
     * @return int
     */
    public function getLengthInBytes()
    {
        return Integer::getModulo($this->instanceID)->getLengthInBytes();
    }

    /**
     * Returns the length of the modulo in bits
     *
     * @return int
     */
    public function getLength()
    {
        return Integer::getModulo($this->instanceID)->getLength();
    }

    /**
     *  Destructor
     */
    public function __destruct()
    {
        Integer::cleanupCache($this->instanceID);
    }
}
<?php

/**
 * Prime Finite Fields
 *
 * PHP version 5 and 7
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2017 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 */

namespace phpseclib3\Math\PrimeField;

use phpseclib3\Common\Functions\Strings;
use phpseclib3\Math\BigInteger;
use phpseclib3\Math\Common\FiniteField\Integer as Base;

/**
 * Prime Finite Fields
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
class Integer extends Base
{
    /**
     * Holds the PrimeField's value
     *
     * @var BigInteger
     */
    protected $value;

    /**
     * Keeps track of current instance
     *
     * @var int
     */
    protected $instanceID;

    /**
     * Holds the PrimeField's modulo
     *
     * @var array<int, BigInteger>
     */
    protected static $modulo;

    /**
     * Holds a pre-generated function to perform modulo reductions
     *
     * @var array<int, callable(BigInteger):BigInteger>
     */
    protected static $reduce;

    /**
     * Zero
     *
     * @var BigInteger[]
     */
    protected static $zero;

    /**
     * One
     *
     * @var BigInteger[]
     */
    protected static $one;

    /**
     * Two
     *
     * @var BigInteger[]
     */
    protected static $two;

    /**
     * Default constructor
     *
     * @param int $instanceID
     * @param BigInteger $num
     */
    public function __construct($instanceID, $num = null)
    {
        $this->instanceID = $instanceID;
        if (!isset($num)) {
            $this->value = clone static::$zero[$instanceID];
        } else {
            $reduce = static::$reduce[$instanceID];
            $this->value = $reduce($num);
        }
    }

    /**
     * Set the modulo for a given instance
     *
     * @param int $instanceID
     * @return void
     */
    public static function setModulo($instanceID, BigInteger $modulo)
    {
        static::$modulo[$instanceID] = $modulo;
    }

    /**
     * Set the modulo for a given instance
     *
     * @param int $instanceID
     * @return void
     */
    public static function setRecurringModuloFunction($instanceID, callable $function)
    {
        static::$reduce[$instanceID] = $function;
        if (!isset(static::$zero[$instanceID])) {
            static::$zero[$instanceID] = new BigInteger();
        }
    }

    /**
     * Delete the modulo for a given instance
     */
    public static function cleanupCache($instanceID)
    {
        unset(static::$modulo[$instanceID]);
        unset(static::$reduce[$instanceID]);
        unset(static::$zero[$instanceID]);
        unset(static::$one[$instanceID]);
        unset(static::$two[$instanceID]);
    }

    /**
     * Returns the modulo
     *
     * @param int $instanceID
     * @return BigInteger
     */
    public static function getModulo($instanceID)
    {
        return static::$modulo[$instanceID];
    }

    /**
     * Tests a parameter to see if it's of the right instance
     *
     * Throws an exception if the incorrect class is being utilized
     *
     * @return void
     */
    public static function checkInstance(self $x, self $y)
    {
        if ($x->instanceID != $y->instanceID) {
            throw new \UnexpectedValueException('The instances of the two PrimeField\Integer objects do not match');
        }
    }

    /**
     * Tests the equality of two numbers.
     *
     * @return bool
     */
    public function equals(self $x)
    {
        static::checkInstance($this, $x);

        return $this->value->equals($x->value);
    }

    /**
     * Compares two numbers.
     *
     * @return int
     */
    public function compare(self $x)
    {
        static::checkInstance($this, $x);

        return $this->value->compare($x->value);
    }

    /**
     * Adds two PrimeFieldIntegers.
     *
     * @return static
     */
    public function add(self $x)
    {
        static::checkInstance($this, $x);

        $temp = new static($this->instanceID);
        $temp->value = $this->value->add($x->value);
        if ($temp->value->compare(static::$modulo[$this->instanceID]) >= 0) {
            $temp->value = $temp->value->subtract(static::$modulo[$this->instanceID]);
        }

        return $temp;
    }

    /**
     * Subtracts two PrimeFieldIntegers.
     *
     * @return static
     */
    public function subtract(self $x)
    {
        static::checkInstance($this, $x);

        $temp = new static($this->instanceID);
        $temp->value = $this->value->subtract($x->value);
        if ($temp->value->isNegative()) {
            $temp->value = $temp->value->add(static::$modulo[$this->instanceID]);
        }

        return $temp;
    }

    /**
     * Multiplies two PrimeFieldIntegers.
     *
     * @return static
     */
    public function multiply(self $x)
    {
        static::checkInstance($this, $x);

        return new static($this->instanceID, $this->value->multiply($x->value));
    }

    /**
     * Divides two PrimeFieldIntegers.
     *
     * @return static
     */
    public function divide(self $x)
    {
        static::checkInstance($this, $x);

        $denominator = $x->value->modInverse(static::$modulo[$this->instanceID]);
        return new static($this->instanceID, $this->value->multiply($denominator));
    }

    /**
     * Performs power operation on a PrimeFieldInteger.
     *
     * @return static
     */
    public function pow(BigInteger $x)
    {
        $temp = new static($this->instanceID);
        $temp->value = $this->value->powMod($x, static::$modulo[$this->instanceID]);

        return $temp;
    }

    /**
     * Calculates the square root
     *
     * @link https://en.wikipedia.org/wiki/Tonelli%E2%80%93Shanks_algorithm
     * @return static|false
     */
    public function squareRoot()
    {
        if (!isset(static::$one[$this->instanceID])) {
            static::$one[$this->instanceID] = new BigInteger(1);
            static::$two[$this->instanceID] = new BigInteger(2);
        }
        $one = &static::$one[$this->instanceID];
        $two = &static::$two[$this->instanceID];
        $modulo = &static::$modulo[$this->instanceID];
        $reduce = &static::$reduce[$this->instanceID];

        $p_1 = $modulo->subtract($one);
        $q = clone $p_1;
        $s = BigInteger::scan1divide($q);
        list($pow) = $p_1->divide($two);
        for ($z = $one; !$z->equals($modulo); $z = $z->add($one)) {
            $temp = $z->powMod($pow, $modulo);
            if ($temp->equals($p_1)) {
                break;
            }
        }

        $m = new BigInteger($s);
        $c = $z->powMod($q, $modulo);
        $t = $this->value->powMod($q, $modulo);
        list($temp) = $q->add($one)->divide($two);
        $r = $this->value->powMod($temp, $modulo);

        while (!$t->equals($one)) {
            for ($i = clone $one; $i->compare($m) < 0; $i = $i->add($one)) {
                if ($t->powMod($two->pow($i), $modulo)->equals($one)) {
                    break;
                }
            }

            if ($i->compare($m) == 0) {
                return false;
            }
            $b = $c->powMod($two->pow($m->subtract($i)->subtract($one)), $modulo);
            $m = $i;
            $c = $reduce($b->multiply($b));
            $t = $reduce($t->multiply($c));
            $r = $reduce($r->multiply($b));
        }

        return new static($this->instanceID, $r);
    }

    /**
     * Is Odd?
     *
     * @return bool
     */
    public function isOdd()
    {
        return $this->value->isOdd();
    }

    /**
     * Negate
     *
     * A negative number can be written as 0-12. With modulos, 0 is the same thing as the modulo
     * so 0-12 is the same thing as modulo-12
     *
     * @return static
     */
    public function negate()
    {
        return new static($this->instanceID, static::$modulo[$this->instanceID]->subtract($this->value));
    }

    /**
     * Converts an Integer to a byte string (eg. base-256).
     *
     * @return string
     */
    public function toBytes()
    {
        if (isset(static::$modulo[$this->instanceID])) {
            $length = static::$modulo[$this->instanceID]->getLengthInBytes();
            return str_pad($this->value->toBytes(), $length, "\0", STR_PAD_LEFT);
        }
        return $this->value->toBytes();
    }

    /**
     * Converts an Integer to a hex string (eg. base-16).
     *
     * @return string
     */
    public function toHex()
    {
        return Strings::bin2hex($this->toBytes());
    }

    /**
     * Converts an Integer to a bit string (eg. base-2).
     *
     * @return string
     */
    public function toBits()
    {
        // return $this->value->toBits();
        static $length;
        if (!isset($length)) {
            $length = static::$modulo[$this->instanceID]->getLength();
        }

        return str_pad($this->value->toBits(), $length, '0', STR_PAD_LEFT);
    }

    /**
     * Returns the w-ary non-adjacent form (wNAF)
     *
     * @param int $w optional
     * @return array<int, int>
     */
    public function getNAF($w = 1)
    {
        $w++;

        $zero = &static::$zero[$this->instanceID];

        $mask = new BigInteger((1 << $w) - 1);
        $sub = new BigInteger(1 << $w);
        //$sub = new BigInteger(1 << ($w - 1));
        $d = $this->toBigInteger();
        $d_i = [];

        $i = 0;
        while ($d->compare($zero) > 0) {
            if ($d->isOdd()) {
                // start mods

                $bigInteger = $d->testBit($w - 1) ?
                    $d->bitwise_and($mask)->subtract($sub) :
                    //$sub->subtract($d->bitwise_and($mask)) :
                    $d->bitwise_and($mask);
                // end mods
                $d = $d->subtract($bigInteger);
                $d_i[$i] = (int) $bigInteger->toString();
            } else {
                $d_i[$i] = 0;
            }
            $shift = !$d->equals($zero) && $d->bitwise_and($mask)->equals($zero) ? $w : 1; // $w or $w + 1?
            $d = $d->bitwise_rightShift($shift);
            while (--$shift > 0) {
                $d_i[++$i] = 0;
            }
            $i++;
        }

        return $d_i;
    }

    /**
     * Converts an Integer to a BigInteger
     *
     * @return BigInteger
     */
    public function toBigInteger()
    {
        return clone $this->value;
    }

    /**
     *  __toString() magic method
     *
     * @return string
     */
    public function __toString()
    {
        return (string) $this->value;
    }

    /**
     *  __debugInfo() magic method
     *
     * @return array
     */
    public function __debugInfo()
    {
        return ['value' => $this->toHex()];
    }
}
<?php

/**
 * Pure-PHP implementation of SFTP.
 *
 * PHP version 5
 *
 * Supports SFTPv2/3/4/5/6. Defaults to v3.
 *
 * The API for this library is modeled after the API from PHP's {@link http://php.net/book.ftp FTP extension}.
 *
 * Here's a short example of how to use this library:
 * <code>
 * <?php
 *    include 'vendor/autoload.php';
 *
 *    $sftp = new \phpseclib3\Net\SFTP('www.domain.tld');
 *    if (!$sftp->login('username', 'password')) {
 *        exit('Login Failed');
 *    }
 *
 *    echo $sftp->pwd() . "\r\n";
 *    $sftp->put('filename.ext', 'hello, world!');
 *    print_r($sftp->nlist());
 * ?>
 * </code>
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2009 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\Net;

use phpseclib3\Common\Functions\Strings;
use phpseclib3\Exception\FileNotFoundException;

/**
 * Pure-PHP implementations of SFTP.
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
class SFTP extends SSH2
{
    /**
     * SFTP channel constant
     *
     * \phpseclib3\Net\SSH2::exec() uses 0 and \phpseclib3\Net\SSH2::read() / \phpseclib3\Net\SSH2::write() use 1.
     *
     * @see \phpseclib3\Net\SSH2::send_channel_packet()
     * @see \phpseclib3\Net\SSH2::get_channel_packet()
     */
    const CHANNEL = 0x100;

    /**
     * Reads data from a local file.
     *
     * @see \phpseclib3\Net\SFTP::put()
     */
    const SOURCE_LOCAL_FILE = 1;
    /**
     * Reads data from a string.
     *
     * @see \phpseclib3\Net\SFTP::put()
     */
    // this value isn't really used anymore but i'm keeping it reserved for historical reasons
    const SOURCE_STRING = 2;
    /**
     * Reads data from callback:
     * function callback($length) returns string to proceed, null for EOF
     *
     * @see \phpseclib3\Net\SFTP::put()
     */
    const SOURCE_CALLBACK = 16;
    /**
     * Resumes an upload
     *
     * @see \phpseclib3\Net\SFTP::put()
     */
    const RESUME = 4;
    /**
     * Append a local file to an already existing remote file
     *
     * @see \phpseclib3\Net\SFTP::put()
     */
    const RESUME_START = 8;

    /**
     * Packet Types
     *
     * @see self::__construct()
     * @var array
     * @access private
     */
    private static $packet_types = [];

    /**
     * Status Codes
     *
     * @see self::__construct()
     * @var array
     * @access private
     */
    private static $status_codes = [];

    /** @var array<int, string> */
    private static $attributes;

    /** @var array<int, string> */
    private static $open_flags;

    /** @var array<int, string> */
    private static $open_flags5;

    /** @var array<int, string> */
    private static $file_types;

    /**
     * The Request ID
     *
     * The request ID exists in the off chance that a packet is sent out-of-order.  Of course, this library doesn't support
     * concurrent actions, so it's somewhat academic, here.
     *
     * @var boolean
     * @see self::_send_sftp_packet()
     */
    private $use_request_id = false;

    /**
     * The Packet Type
     *
     * The request ID exists in the off chance that a packet is sent out-of-order.  Of course, this library doesn't support
     * concurrent actions, so it's somewhat academic, here.
     *
     * @var int
     * @see self::_get_sftp_packet()
     */
    private $packet_type = -1;

    /**
     * Packet Buffer
     *
     * @var string
     * @see self::_get_sftp_packet()
     */
    private $packet_buffer = '';

    /**
     * Extensions supported by the server
     *
     * @var array
     * @see self::_initChannel()
     */
    private $extensions = [];

    /**
     * Server SFTP version
     *
     * @var int
     * @see self::_initChannel()
     */
    private $version;

    /**
     * Default Server SFTP version
     *
     * @var int
     * @see self::_initChannel()
     */
    private $defaultVersion;

    /**
     * Preferred SFTP version
     *
     * @var int
     * @see self::_initChannel()
     */
    private $preferredVersion = 3;

    /**
     * Current working directory
     *
     * @var string|bool
     * @see self::realpath()
     * @see self::chdir()
     */
    private $pwd = false;

    /**
     * Packet Type Log
     *
     * @see self::getLog()
     * @var array
     */
    private $packet_type_log = [];

    /**
     * Packet Log
     *
     * @see self::getLog()
     * @var array
     */
    private $packet_log = [];

    /**
     * Real-time log file pointer
     *
     * @see self::_append_log()
     * @var resource|closed-resource
     */
    private $realtime_log_file;

    /**
     * Real-time log file size
     *
     * @see self::_append_log()
     * @var int
     */
    private $realtime_log_size;

    /**
     * Real-time log file wrap boolean
     *
     * @see self::_append_log()
     * @var bool
     */
    private $realtime_log_wrap;

    /**
     * Current log size
     *
     * Should never exceed self::LOG_MAX_SIZE
     *
     * @var int
     */
    private $log_size;

    /**
     * Error information
     *
     * @see self::getSFTPErrors()
     * @see self::getLastSFTPError()
     * @var array
     */
    private $sftp_errors = [];

    /**
     * Stat Cache
     *
     * Rather than always having to open a directory and close it immediately there after to see if a file is a directory
     * we'll cache the results.
     *
     * @see self::_update_stat_cache()
     * @see self::_remove_from_stat_cache()
     * @see self::_query_stat_cache()
     * @var array
     */
    private $stat_cache = [];

    /**
     * Max SFTP Packet Size
     *
     * @see self::__construct()
     * @see self::get()
     * @var int
     */
    private $max_sftp_packet;

    /**
     * Stat Cache Flag
     *
     * @see self::disableStatCache()
     * @see self::enableStatCache()
     * @var bool
     */
    private $use_stat_cache = true;

    /**
     * Sort Options
     *
     * @see self::_comparator()
     * @see self::setListOrder()
     * @var array
     */
    protected $sortOptions = [];

    /**
     * Canonicalization Flag
     *
     * Determines whether or not paths should be canonicalized before being
     * passed on to the remote server.
     *
     * @see self::enablePathCanonicalization()
     * @see self::disablePathCanonicalization()
     * @see self::realpath()
     * @var bool
     */
    private $canonicalize_paths = true;

    /**
     * Request Buffers
     *
     * @see self::_get_sftp_packet()
     * @var array
     */
    private $requestBuffer = [];

    /**
     * Preserve timestamps on file downloads / uploads
     *
     * @see self::get()
     * @see self::put()
     * @var bool
     */
    private $preserveTime = false;

    /**
     * Arbitrary Length Packets Flag
     *
     * Determines whether or not packets of any length should be allowed,
     * in cases where the server chooses the packet length (such as
     * directory listings). By default, packets are only allowed to be
     * 256 * 1024 bytes (SFTP_MAX_MSG_LENGTH from OpenSSH's sftp-common.h)
     *
     * @see self::enableArbitraryLengthPackets()
     * @see self::_get_sftp_packet()
     * @var bool
     */
    private $allow_arbitrary_length_packets = false;

    /**
     * Was the last packet due to the channels being closed or not?
     *
     * @see self::get()
     * @see self::get_sftp_packet()
     * @var bool
     */
    private $channel_close = false;

    /**
     * Has the SFTP channel been partially negotiated?
     *
     * @var bool
     */
    private $partial_init = false;

    /**
     * Default Constructor.
     *
     * Connects to an SFTP server
     *
     * $host can either be a string, representing the host, or a stream resource.
     *
     * @param mixed $host
     * @param int $port
     * @param int $timeout
     */
    public function __construct($host, $port = 22, $timeout = 10)
    {
        parent::__construct($host, $port, $timeout);

        $this->max_sftp_packet = 1 << 15;

        if (empty(self::$packet_types)) {
            self::$packet_types = [
                1  => 'NET_SFTP_INIT',
                2  => 'NET_SFTP_VERSION',
                3  => 'NET_SFTP_OPEN',
                4  => 'NET_SFTP_CLOSE',
                5  => 'NET_SFTP_READ',
                6  => 'NET_SFTP_WRITE',
                7  => 'NET_SFTP_LSTAT',
                9  => 'NET_SFTP_SETSTAT',
                10 => 'NET_SFTP_FSETSTAT',
                11 => 'NET_SFTP_OPENDIR',
                12 => 'NET_SFTP_READDIR',
                13 => 'NET_SFTP_REMOVE',
                14 => 'NET_SFTP_MKDIR',
                15 => 'NET_SFTP_RMDIR',
                16 => 'NET_SFTP_REALPATH',
                17 => 'NET_SFTP_STAT',
                18 => 'NET_SFTP_RENAME',
                19 => 'NET_SFTP_READLINK',
                20 => 'NET_SFTP_SYMLINK',
                21 => 'NET_SFTP_LINK',

                101 => 'NET_SFTP_STATUS',
                102 => 'NET_SFTP_HANDLE',
                103 => 'NET_SFTP_DATA',
                104 => 'NET_SFTP_NAME',
                105 => 'NET_SFTP_ATTRS',

                200 => 'NET_SFTP_EXTENDED',
                201 => 'NET_SFTP_EXTENDED_REPLY'
            ];
            self::$status_codes = [
                0 => 'NET_SFTP_STATUS_OK',
                1 => 'NET_SFTP_STATUS_EOF',
                2 => 'NET_SFTP_STATUS_NO_SUCH_FILE',
                3 => 'NET_SFTP_STATUS_PERMISSION_DENIED',
                4 => 'NET_SFTP_STATUS_FAILURE',
                5 => 'NET_SFTP_STATUS_BAD_MESSAGE',
                6 => 'NET_SFTP_STATUS_NO_CONNECTION',
                7 => 'NET_SFTP_STATUS_CONNECTION_LOST',
                8 => 'NET_SFTP_STATUS_OP_UNSUPPORTED',
                9 => 'NET_SFTP_STATUS_INVALID_HANDLE',
                10 => 'NET_SFTP_STATUS_NO_SUCH_PATH',
                11 => 'NET_SFTP_STATUS_FILE_ALREADY_EXISTS',
                12 => 'NET_SFTP_STATUS_WRITE_PROTECT',
                13 => 'NET_SFTP_STATUS_NO_MEDIA',
                14 => 'NET_SFTP_STATUS_NO_SPACE_ON_FILESYSTEM',
                15 => 'NET_SFTP_STATUS_QUOTA_EXCEEDED',
                16 => 'NET_SFTP_STATUS_UNKNOWN_PRINCIPAL',
                17 => 'NET_SFTP_STATUS_LOCK_CONFLICT',
                18 => 'NET_SFTP_STATUS_DIR_NOT_EMPTY',
                19 => 'NET_SFTP_STATUS_NOT_A_DIRECTORY',
                20 => 'NET_SFTP_STATUS_INVALID_FILENAME',
                21 => 'NET_SFTP_STATUS_LINK_LOOP',
                22 => 'NET_SFTP_STATUS_CANNOT_DELETE',
                23 => 'NET_SFTP_STATUS_INVALID_PARAMETER',
                24 => 'NET_SFTP_STATUS_FILE_IS_A_DIRECTORY',
                25 => 'NET_SFTP_STATUS_BYTE_RANGE_LOCK_CONFLICT',
                26 => 'NET_SFTP_STATUS_BYTE_RANGE_LOCK_REFUSED',
                27 => 'NET_SFTP_STATUS_DELETE_PENDING',
                28 => 'NET_SFTP_STATUS_FILE_CORRUPT',
                29 => 'NET_SFTP_STATUS_OWNER_INVALID',
                30 => 'NET_SFTP_STATUS_GROUP_INVALID',
                31 => 'NET_SFTP_STATUS_NO_MATCHING_BYTE_RANGE_LOCK'
            ];
            // http://tools.ietf.org/html/draft-ietf-secsh-filexfer-13#section-7.1
            // the order, in this case, matters quite a lot - see \phpseclib3\Net\SFTP::_parseAttributes() to understand why
            self::$attributes = [
                0x00000001 => 'NET_SFTP_ATTR_SIZE',
                0x00000002 => 'NET_SFTP_ATTR_UIDGID',          // defined in SFTPv3, removed in SFTPv4+
                0x00000080 => 'NET_SFTP_ATTR_OWNERGROUP',      // defined in SFTPv4+
                0x00000004 => 'NET_SFTP_ATTR_PERMISSIONS',
                0x00000008 => 'NET_SFTP_ATTR_ACCESSTIME',
                0x00000010 => 'NET_SFTP_ATTR_CREATETIME',      // SFTPv4+
                0x00000020 => 'NET_SFTP_ATTR_MODIFYTIME',
                0x00000040 => 'NET_SFTP_ATTR_ACL',
                0x00000100 => 'NET_SFTP_ATTR_SUBSECOND_TIMES',
                0x00000200 => 'NET_SFTP_ATTR_BITS',            // SFTPv5+
                0x00000400 => 'NET_SFTP_ATTR_ALLOCATION_SIZE', // SFTPv6+
                0x00000800 => 'NET_SFTP_ATTR_TEXT_HINT',
                0x00001000 => 'NET_SFTP_ATTR_MIME_TYPE',
                0x00002000 => 'NET_SFTP_ATTR_LINK_COUNT',
                0x00004000 => 'NET_SFTP_ATTR_UNTRANSLATED_NAME',
                0x00008000 => 'NET_SFTP_ATTR_CTIME',
                // 0x80000000 will yield a floating point on 32-bit systems and converting floating points to integers
                // yields inconsistent behavior depending on how php is compiled.  so we left shift -1 (which, in
                // two's compliment, consists of all 1 bits) by 31.  on 64-bit systems this'll yield 0xFFFFFFFF80000000.
                // that's not a problem, however, and 'anded' and a 32-bit number, as all the leading 1 bits are ignored.
                (PHP_INT_SIZE == 4 ? (-1 << 31) : 0x80000000) => 'NET_SFTP_ATTR_EXTENDED'
            ];
            // http://tools.ietf.org/html/draft-ietf-secsh-filexfer-04#section-6.3
            // the flag definitions change somewhat in SFTPv5+.  if SFTPv5+ support is added to this library, maybe name
            // the array for that $this->open5_flags and similarly alter the constant names.
            self::$open_flags = [
                0x00000001 => 'NET_SFTP_OPEN_READ',
                0x00000002 => 'NET_SFTP_OPEN_WRITE',
                0x00000004 => 'NET_SFTP_OPEN_APPEND',
                0x00000008 => 'NET_SFTP_OPEN_CREATE',
                0x00000010 => 'NET_SFTP_OPEN_TRUNCATE',
                0x00000020 => 'NET_SFTP_OPEN_EXCL',
                0x00000040 => 'NET_SFTP_OPEN_TEXT' // defined in SFTPv4
            ];
            // SFTPv5+ changed the flags up:
            // https://datatracker.ietf.org/doc/html/draft-ietf-secsh-filexfer-13#section-8.1.1.3
            self::$open_flags5 = [
                // when SSH_FXF_ACCESS_DISPOSITION is a 3 bit field that controls how the file is opened
                0x00000000 => 'NET_SFTP_OPEN_CREATE_NEW',
                0x00000001 => 'NET_SFTP_OPEN_CREATE_TRUNCATE',
                0x00000002 => 'NET_SFTP_OPEN_OPEN_EXISTING',
                0x00000003 => 'NET_SFTP_OPEN_OPEN_OR_CREATE',
                0x00000004 => 'NET_SFTP_OPEN_TRUNCATE_EXISTING',
                // the rest of the flags are not supported
                0x00000008 => 'NET_SFTP_OPEN_APPEND_DATA', // "the offset field of SS_FXP_WRITE requests is ignored"
                0x00000010 => 'NET_SFTP_OPEN_APPEND_DATA_ATOMIC',
                0x00000020 => 'NET_SFTP_OPEN_TEXT_MODE',
                0x00000040 => 'NET_SFTP_OPEN_BLOCK_READ',
                0x00000080 => 'NET_SFTP_OPEN_BLOCK_WRITE',
                0x00000100 => 'NET_SFTP_OPEN_BLOCK_DELETE',
                0x00000200 => 'NET_SFTP_OPEN_BLOCK_ADVISORY',
                0x00000400 => 'NET_SFTP_OPEN_NOFOLLOW',
                0x00000800 => 'NET_SFTP_OPEN_DELETE_ON_CLOSE',
                0x00001000 => 'NET_SFTP_OPEN_ACCESS_AUDIT_ALARM_INFO',
                0x00002000 => 'NET_SFTP_OPEN_ACCESS_BACKUP',
                0x00004000 => 'NET_SFTP_OPEN_BACKUP_STREAM',
                0x00008000 => 'NET_SFTP_OPEN_OVERRIDE_OWNER',
            ];
            // http://tools.ietf.org/html/draft-ietf-secsh-filexfer-04#section-5.2
            // see \phpseclib3\Net\SFTP::_parseLongname() for an explanation
            self::$file_types = [
                1 => 'NET_SFTP_TYPE_REGULAR',
                2 => 'NET_SFTP_TYPE_DIRECTORY',
                3 => 'NET_SFTP_TYPE_SYMLINK',
                4 => 'NET_SFTP_TYPE_SPECIAL',
                5 => 'NET_SFTP_TYPE_UNKNOWN',
                // the following types were first defined for use in SFTPv5+
                // http://tools.ietf.org/html/draft-ietf-secsh-filexfer-05#section-5.2
                6 => 'NET_SFTP_TYPE_SOCKET',
                7 => 'NET_SFTP_TYPE_CHAR_DEVICE',
                8 => 'NET_SFTP_TYPE_BLOCK_DEVICE',
                9 => 'NET_SFTP_TYPE_FIFO'
            ];
            self::define_array(
                self::$packet_types,
                self::$status_codes,
                self::$attributes,
                self::$open_flags,
                self::$open_flags5,
                self::$file_types
            );
        }

        if (!defined('NET_SFTP_QUEUE_SIZE')) {
            define('NET_SFTP_QUEUE_SIZE', 32);
        }
        if (!defined('NET_SFTP_UPLOAD_QUEUE_SIZE')) {
            define('NET_SFTP_UPLOAD_QUEUE_SIZE', 1024);
        }
    }

    /**
     * Check a few things before SFTP functions are called
     *
     * @return bool
     */
    private function precheck()
    {
        if (!($this->bitmap & SSH2::MASK_LOGIN)) {
            return false;
        }

        if ($this->pwd === false) {
            return $this->init_sftp_connection();
        }

        return true;
    }

    /**
     * Partially initialize an SFTP connection
     *
     * @throws \UnexpectedValueException on receipt of unexpected packets
     * @return bool
     */
    private function partial_init_sftp_connection()
    {
        $response = $this->open_channel(self::CHANNEL, true);
        if ($response === true && $this->isTimeout()) {
            return false;
        }

        $packet = Strings::packSSH2(
            'CNsbs',
            NET_SSH2_MSG_CHANNEL_REQUEST,
            $this->server_channels[self::CHANNEL],
            'subsystem',
            true,
            'sftp'
        );
        $this->send_binary_packet($packet);

        $this->channel_status[self::CHANNEL] = NET_SSH2_MSG_CHANNEL_REQUEST;

        $response = $this->get_channel_packet(self::CHANNEL, true);
        if ($response === false) {
            // from PuTTY's psftp.exe
            $command = "test -x /usr/lib/sftp-server && exec /usr/lib/sftp-server\n" .
                       "test -x /usr/local/lib/sftp-server && exec /usr/local/lib/sftp-server\n" .
                       "exec sftp-server";
            // we don't do $this->exec($command, false) because exec() operates on a different channel and plus the SSH_MSG_CHANNEL_OPEN that exec() does
            // is redundant
            $packet = Strings::packSSH2(
                'CNsCs',
                NET_SSH2_MSG_CHANNEL_REQUEST,
                $this->server_channels[self::CHANNEL],
                'exec',
                1,
                $command
            );
            $this->send_binary_packet($packet);

            $this->channel_status[self::CHANNEL] = NET_SSH2_MSG_CHANNEL_REQUEST;

            $response = $this->get_channel_packet(self::CHANNEL, true);
            if ($response === false) {
                return false;
            }
        } elseif ($response === true && $this->isTimeout()) {
            return false;
        }

        $this->channel_status[self::CHANNEL] = NET_SSH2_MSG_CHANNEL_DATA;
        $this->send_sftp_packet(NET_SFTP_INIT, "\0\0\0\3");

        $response = $this->get_sftp_packet();
        if ($this->packet_type != NET_SFTP_VERSION) {
            throw new \UnexpectedValueException('Expected NET_SFTP_VERSION. '
                                              . 'Got packet type: ' . $this->packet_type);
        }

        $this->use_request_id = true;

        list($this->defaultVersion) = Strings::unpackSSH2('N', $response);
        while (!empty($response)) {
            list($key, $value) = Strings::unpackSSH2('ss', $response);
            $this->extensions[$key] = $value;
        }

        $this->partial_init = true;

        return true;
    }

    /**
     * (Re)initializes the SFTP channel
     *
     * @return bool
     */
    private function init_sftp_connection()
    {
        if (!$this->partial_init && !$this->partial_init_sftp_connection()) {
            return false;
        }

        /*
         A Note on SFTPv4/5/6 support:
         <http://tools.ietf.org/html/draft-ietf-secsh-filexfer-13#section-5.1> states the following:

         "If the client wishes to interoperate with servers that support noncontiguous version
          numbers it SHOULD send '3'"

         Given that the server only sends its version number after the client has already done so, the above
         seems to be suggesting that v3 should be the default version.  This makes sense given that v3 is the
         most popular.

         <http://tools.ietf.org/html/draft-ietf-secsh-filexfer-13#section-5.5> states the following;

         "If the server did not send the "versions" extension, or the version-from-list was not included, the
          server MAY send a status response describing the failure, but MUST then close the channel without
          processing any further requests."

         So what do you do if you have a client whose initial SSH_FXP_INIT packet says it implements v3 and
         a server whose initial SSH_FXP_VERSION reply says it implements v4 and only v4?  If it only implements
         v4, the "versions" extension is likely not going to have been sent so version re-negotiation as discussed
         in draft-ietf-secsh-filexfer-13 would be quite impossible.  As such, what \phpseclib3\Net\SFTP would do is close the
         channel and reopen it with a new and updated SSH_FXP_INIT packet.
        */
        $this->version = $this->defaultVersion;
        if (isset($this->extensions['versions']) && (!$this->preferredVersion || $this->preferredVersion != $this->version)) {
            $versions = explode(',', $this->extensions['versions']);
            $supported = [6, 5, 4];
            if ($this->preferredVersion) {
                $supported = array_diff($supported, [$this->preferredVersion]);
                array_unshift($supported, $this->preferredVersion);
            }
            foreach ($supported as $ver) {
                if (in_array($ver, $versions)) {
                    if ($ver === $this->version) {
                        break;
                    }
                    $this->version = (int) $ver;
                    $packet = Strings::packSSH2('ss', 'version-select', "$ver");
                    $this->send_sftp_packet(NET_SFTP_EXTENDED, $packet);
                    $response = $this->get_sftp_packet();
                    if ($this->packet_type != NET_SFTP_STATUS) {
                        throw new \UnexpectedValueException('Expected NET_SFTP_STATUS. '
                            . 'Got packet type: ' . $this->packet_type);
                    }
                    list($status) = Strings::unpackSSH2('N', $response);
                    if ($status != NET_SFTP_STATUS_OK) {
                        $this->logError($response, $status);
                        throw new \UnexpectedValueException('Expected NET_SFTP_STATUS_OK. '
                            . ' Got ' . $status);
                    }
                    break;
                }
            }
        }

        /*
         SFTPv4+ defines a 'newline' extension.  SFTPv3 seems to have unofficial support for it via 'newline@vandyke.com',
         however, I'm not sure what 'newline@vandyke.com' is supposed to do (the fact that it's unofficial means that it's
         not in the official SFTPv3 specs) and 'newline@vandyke.com' / 'newline' are likely not drop-in substitutes for
         one another due to the fact that 'newline' comes with a SSH_FXF_TEXT bitmask whereas it seems unlikely that
         'newline@vandyke.com' would.
        */
        /*
        if (isset($this->extensions['newline@vandyke.com'])) {
            $this->extensions['newline'] = $this->extensions['newline@vandyke.com'];
            unset($this->extensions['newline@vandyke.com']);
        }
        */
        if ($this->version < 2 || $this->version > 6) {
            return false;
        }

        $this->pwd = true;
        try {
            $this->pwd = $this->realpath('.');
        } catch (\UnexpectedValueException $e) {
            if (!$this->canonicalize_paths) {
                throw $e;
            }
            $this->canonicalize_paths = false;
            $this->reset_sftp();
            return $this->init_sftp_connection();
        }

        $this->update_stat_cache($this->pwd, []);

        return true;
    }

    /**
     * Disable the stat cache
     *
     */
    public function disableStatCache()
    {
        $this->use_stat_cache = false;
    }

    /**
     * Enable the stat cache
     *
     */
    public function enableStatCache()
    {
        $this->use_stat_cache = true;
    }

    /**
     * Clear the stat cache
     *
     */
    public function clearStatCache()
    {
        $this->stat_cache = [];
    }

    /**
     * Enable path canonicalization
     *
     */
    public function enablePathCanonicalization()
    {
        $this->canonicalize_paths = true;
    }

    /**
     * Disable path canonicalization
     *
     * If this is enabled then $sftp->pwd() will not return the canonicalized absolute path
     *
     */
    public function disablePathCanonicalization()
    {
        $this->canonicalize_paths = false;
    }

    /**
     * Enable arbitrary length packets
     *
     */
    public function enableArbitraryLengthPackets()
    {
        $this->allow_arbitrary_length_packets = true;
    }

    /**
     * Disable arbitrary length packets
     *
     */
    public function disableArbitraryLengthPackets()
    {
        $this->allow_arbitrary_length_packets = false;
    }

    /**
     * Returns the current directory name
     *
     * @return string|bool
     */
    public function pwd()
    {
        if (!$this->precheck()) {
            return false;
        }

        return $this->pwd;
    }

    /**
     * Logs errors
     *
     * @param string $response
     * @param int $status
     */
    private function logError($response, $status = -1)
    {
        if ($status == -1) {
            list($status) = Strings::unpackSSH2('N', $response);
        }

        $error = self::$status_codes[$status];

        if ($this->version > 2) {
            list($message) = Strings::unpackSSH2('s', $response);
            $this->sftp_errors[] = "$error: $message";
        } else {
            $this->sftp_errors[] = $error;
        }
    }

    /**
     * Canonicalize the Server-Side Path Name
     *
     * SFTP doesn't provide a mechanism by which the current working directory can be changed, so we'll emulate it.  Returns
     * the absolute (canonicalized) path.
     *
     * If canonicalize_paths has been disabled using disablePathCanonicalization(), $path is returned as-is.
     *
     * @see self::chdir()
     * @see self::disablePathCanonicalization()
     * @param string $path
     * @throws \UnexpectedValueException on receipt of unexpected packets
     * @return mixed
     */
    public function realpath($path)
    {
        if ($this->precheck() === false) {
            return false;
        }

        $path = (string) $path;

        if (!$this->canonicalize_paths) {
            if ($this->pwd === true) {
                return '.';
            }
            if (!strlen($path) || $path[0] != '/') {
                $path = $this->pwd . '/' . $path;
            }
            $parts = explode('/', $path);
            $afterPWD = $beforePWD = [];
            foreach ($parts as $part) {
                switch ($part) {
                    //case '': // some SFTP servers /require/ double /'s. see https://github.com/phpseclib/phpseclib/pull/1137
                    case '.':
                        break;
                    case '..':
                        if (!empty($afterPWD)) {
                            array_pop($afterPWD);
                        } else {
                            $beforePWD[] = '..';
                        }
                        break;
                    default:
                        $afterPWD[] = $part;
                }
            }
            $beforePWD = count($beforePWD) ? implode('/', $beforePWD) : '.';
            return $beforePWD . '/' . implode('/', $afterPWD);
        }

        if ($this->pwd === true) {
            // http://tools.ietf.org/html/draft-ietf-secsh-filexfer-13#section-8.9
            $this->send_sftp_packet(NET_SFTP_REALPATH, Strings::packSSH2('s', $path));

            $response = $this->get_sftp_packet();
            switch ($this->packet_type) {
                case NET_SFTP_NAME:
                    // although SSH_FXP_NAME is implemented differently in SFTPv3 than it is in SFTPv4+, the following
                    // should work on all SFTP versions since the only part of the SSH_FXP_NAME packet the following looks
                    // at is the first part and that part is defined the same in SFTP versions 3 through 6.
                    list(, $filename) = Strings::unpackSSH2('Ns', $response);
                    return $filename;
                case NET_SFTP_STATUS:
                    $this->logError($response);
                    return false;
                default:
                    throw new \UnexpectedValueException('Expected NET_SFTP_NAME or NET_SFTP_STATUS. '
                                                      . 'Got packet type: ' . $this->packet_type);
            }
        }

        if (!strlen($path) || $path[0] != '/') {
            $path = $this->pwd . '/' . $path;
        }

        $path = explode('/', $path);
        $new = [];
        foreach ($path as $dir) {
            if (!strlen($dir)) {
                continue;
            }
            switch ($dir) {
                case '..':
                    array_pop($new);
                    // fall-through
                case '.':
                    break;
                default:
                    $new[] = $dir;
            }
        }

        return '/' . implode('/', $new);
    }

    /**
     * Changes the current directory
     *
     * @param string $dir
     * @throws \UnexpectedValueException on receipt of unexpected packets
     * @return bool
     */
    public function chdir($dir)
    {
        if (!$this->precheck()) {
            return false;
        }

        $dir = (string) $dir;

        // assume current dir if $dir is empty
        if ($dir === '') {
            $dir = './';
        // suffix a slash if needed
        } elseif ($dir[strlen($dir) - 1] != '/') {
            $dir .= '/';
        }

        $dir = $this->realpath($dir);
        if ($dir === false) {
            return false;
        }

        // confirm that $dir is, in fact, a valid directory
        if ($this->use_stat_cache && is_array($this->query_stat_cache($dir))) {
            $this->pwd = $dir;
            return true;
        }

        // we could do a stat on the alleged $dir to see if it's a directory but that doesn't tell us
        // the currently logged in user has the appropriate permissions or not. maybe you could see if
        // the file's uid / gid match the currently logged in user's uid / gid but how there's no easy
        // way to get those with SFTP

        $this->send_sftp_packet(NET_SFTP_OPENDIR, Strings::packSSH2('s', $dir));

        // see \phpseclib3\Net\SFTP::nlist() for a more thorough explanation of the following
        $response = $this->get_sftp_packet();
        switch ($this->packet_type) {
            case NET_SFTP_HANDLE:
                $handle = substr($response, 4);
                break;
            case NET_SFTP_STATUS:
                $this->logError($response);
                return false;
            default:
                throw new \UnexpectedValueException('Expected NET_SFTP_HANDLE or NET_SFTP_STATUS' .
                                                    'Got packet type: ' . $this->packet_type);
        }

        if (!$this->close_handle($handle)) {
            return false;
        }

        $this->update_stat_cache($dir, []);

        $this->pwd = $dir;
        return true;
    }

    /**
     * Returns a list of files in the given directory
     *
     * @param string $dir
     * @param bool $recursive
     * @return array|false
     */
    public function nlist($dir = '.', $recursive = false)
    {
        return $this->nlist_helper($dir, $recursive, '');
    }

    /**
     * Helper method for nlist
     *
     * @param string $dir
     * @param bool $recursive
     * @param string $relativeDir
     * @return array|false
     */
    private function nlist_helper($dir, $recursive, $relativeDir)
    {
        $files = $this->readlist($dir, false);

        // If we get an int back, then that is an "unexpected" status.
        // We do not have a file list, so return false.
        if (is_int($files)) {
            return false;
        }

        if (!$recursive || $files === false) {
            return $files;
        }

        $result = [];
        foreach ($files as $value) {
            if ($value == '.' || $value == '..') {
                $result[] = $relativeDir . $value;
                continue;
            }
            if (is_array($this->query_stat_cache($this->realpath($dir . '/' . $value)))) {
                $temp = $this->nlist_helper($dir . '/' . $value, true, $relativeDir . $value . '/');
                $temp = is_array($temp) ? $temp : [];
                $result = array_merge($result, $temp);
            } else {
                $result[] = $relativeDir . $value;
            }
        }

        return $result;
    }

    /**
     * Returns a detailed list of files in the given directory
     *
     * @param string $dir
     * @param bool $recursive
     * @return array|false
     */
    public function rawlist($dir = '.', $recursive = false)
    {
        $files = $this->readlist($dir, true);

        // If we get an int back, then that is an "unexpected" status.
        // We do not have a file list, so return false.
        if (is_int($files)) {
            return false;
        }

        if (!$recursive || $files === false) {
            return $files;
        }

        static $depth = 0;

        foreach ($files as $key => $value) {
            if ($depth != 0 && $key == '..') {
                unset($files[$key]);
                continue;
            }
            $is_directory = false;
            if ($key != '.' && $key != '..') {
                if ($this->use_stat_cache) {
                    $is_directory = is_array($this->query_stat_cache($this->realpath($dir . '/' . $key)));
                } else {
                    $stat = $this->lstat($dir . '/' . $key);
                    $is_directory = $stat && $stat['type'] === NET_SFTP_TYPE_DIRECTORY;
                }
            }

            if ($is_directory) {
                $depth++;
                $files[$key] = $this->rawlist($dir . '/' . $key, true);
                $depth--;
            } else {
                $files[$key] = (object) $value;
            }
        }

        return $files;
    }

    /**
     * Reads a list, be it detailed or not, of files in the given directory
     *
     * @param string $dir
     * @param bool $raw
     * @return array|false
     * @throws \UnexpectedValueException on receipt of unexpected packets
     */
    private function readlist($dir, $raw = true)
    {
        if (!$this->precheck()) {
            return false;
        }

        $dir = $this->realpath($dir . '/');
        if ($dir === false) {
            return false;
        }

        // http://tools.ietf.org/html/draft-ietf-secsh-filexfer-13#section-8.1.2
        $this->send_sftp_packet(NET_SFTP_OPENDIR, Strings::packSSH2('s', $dir));

        $response = $this->get_sftp_packet();
        switch ($this->packet_type) {
            case NET_SFTP_HANDLE:
                // http://tools.ietf.org/html/draft-ietf-secsh-filexfer-13#section-9.2
                // since 'handle' is the last field in the SSH_FXP_HANDLE packet, we'll just remove the first four bytes that
                // represent the length of the string and leave it at that
                $handle = substr($response, 4);
                break;
            case NET_SFTP_STATUS:
                // presumably SSH_FX_NO_SUCH_FILE or SSH_FX_PERMISSION_DENIED
                list($status) = Strings::unpackSSH2('N', $response);
                $this->logError($response, $status);
                return $status;
            default:
                throw new \UnexpectedValueException('Expected NET_SFTP_HANDLE or NET_SFTP_STATUS. '
                                                  . 'Got packet type: ' . $this->packet_type);
        }

        $this->update_stat_cache($dir, []);

        $contents = [];
        while (true) {
            // http://tools.ietf.org/html/draft-ietf-secsh-filexfer-13#section-8.2.2
            // why multiple SSH_FXP_READDIR packets would be sent when the response to a single one can span arbitrarily many
            // SSH_MSG_CHANNEL_DATA messages is not known to me.
            $this->send_sftp_packet(NET_SFTP_READDIR, Strings::packSSH2('s', $handle));

            $response = $this->get_sftp_packet();
            switch ($this->packet_type) {
                case NET_SFTP_NAME:
                    list($count) = Strings::unpackSSH2('N', $response);
                    for ($i = 0; $i < $count; $i++) {
                        list($shortname) = Strings::unpackSSH2('s', $response);
                        // SFTPv4 "removed the long filename from the names structure-- it can now be
                        //         built from information available in the attrs structure."
                        if ($this->version < 4) {
                            list($longname) = Strings::unpackSSH2('s', $response);
                        }
                        $attributes = $this->parseAttributes($response);
                        if (!isset($attributes['type']) && $this->version < 4) {
                            $fileType = $this->parseLongname($longname);
                            if ($fileType) {
                                $attributes['type'] = $fileType;
                            }
                        }
                        $contents[$shortname] = $attributes + ['filename' => $shortname];

                        if (isset($attributes['type']) && $attributes['type'] == NET_SFTP_TYPE_DIRECTORY && ($shortname != '.' && $shortname != '..')) {
                            $this->update_stat_cache($dir . '/' . $shortname, []);
                        } else {
                            if ($shortname == '..') {
                                $temp = $this->realpath($dir . '/..') . '/.';
                            } else {
                                $temp = $dir . '/' . $shortname;
                            }
                            $this->update_stat_cache($temp, (object) ['lstat' => $attributes]);
                        }
                        // SFTPv6 has an optional boolean end-of-list field, but we'll ignore that, since the
                        // final SSH_FXP_STATUS packet should tell us that, already.
                    }
                    break;
                case NET_SFTP_STATUS:
                    list($status) = Strings::unpackSSH2('N', $response);
                    if ($status != NET_SFTP_STATUS_EOF) {
                        $this->logError($response, $status);
                        return $status;
                    }
                    break 2;
                default:
                    throw new \UnexpectedValueException('Expected NET_SFTP_NAME or NET_SFTP_STATUS. '
                                                      . 'Got packet type: ' . $this->packet_type);
            }
        }

        if (!$this->close_handle($handle)) {
            return false;
        }

        if (count($this->sortOptions)) {
            uasort($contents, [&$this, 'comparator']);
        }

        return $raw ? $contents : array_map('strval', array_keys($contents));
    }

    /**
     * Compares two rawlist entries using parameters set by setListOrder()
     *
     * Intended for use with uasort()
     *
     * @param array $a
     * @param array $b
     * @return int
     */
    private function comparator(array $a, array $b)
    {
        switch (true) {
            case $a['filename'] === '.' || $b['filename'] === '.':
                if ($a['filename'] === $b['filename']) {
                    return 0;
                }
                return $a['filename'] === '.' ? -1 : 1;
            case $a['filename'] === '..' || $b['filename'] === '..':
                if ($a['filename'] === $b['filename']) {
                    return 0;
                }
                return $a['filename'] === '..' ? -1 : 1;
            case isset($a['type']) && $a['type'] === NET_SFTP_TYPE_DIRECTORY:
                if (!isset($b['type'])) {
                    return 1;
                }
                if ($b['type'] !== $a['type']) {
                    return -1;
                }
                break;
            case isset($b['type']) && $b['type'] === NET_SFTP_TYPE_DIRECTORY:
                return 1;
        }
        foreach ($this->sortOptions as $sort => $order) {
            if (!isset($a[$sort]) || !isset($b[$sort])) {
                if (isset($a[$sort])) {
                    return -1;
                }
                if (isset($b[$sort])) {
                    return 1;
                }
                return 0;
            }
            switch ($sort) {
                case 'filename':
                    $result = strcasecmp($a['filename'], $b['filename']);
                    if ($result) {
                        return $order === SORT_DESC ? -$result : $result;
                    }
                    break;
                case 'mode':
                    $a[$sort] &= 07777;
                    $b[$sort] &= 07777;
                    // fall-through
                default:
                    if ($a[$sort] === $b[$sort]) {
                        break;
                    }
                    return $order === SORT_ASC ? $a[$sort] - $b[$sort] : $b[$sort] - $a[$sort];
            }
        }
    }

    /**
     * Defines how nlist() and rawlist() will be sorted - if at all.
     *
     * If sorting is enabled directories and files will be sorted independently with
     * directories appearing before files in the resultant array that is returned.
     *
     * Any parameter returned by stat is a valid sort parameter for this function.
     * Filename comparisons are case insensitive.
     *
     * Examples:
     *
     * $sftp->setListOrder('filename', SORT_ASC);
     * $sftp->setListOrder('size', SORT_DESC, 'filename', SORT_ASC);
     * $sftp->setListOrder(true);
     *    Separates directories from files but doesn't do any sorting beyond that
     * $sftp->setListOrder();
     *    Don't do any sort of sorting
     *
     * @param string ...$args
     */
    public function setListOrder(...$args)
    {
        $this->sortOptions = [];
        if (empty($args)) {
            return;
        }
        $len = count($args) & 0x7FFFFFFE;
        for ($i = 0; $i < $len; $i += 2) {
            $this->sortOptions[$args[$i]] = $args[$i + 1];
        }
        if (!count($this->sortOptions)) {
            $this->sortOptions = ['bogus' => true];
        }
    }

    /**
     * Save files / directories to cache
     *
     * @param string $path
     * @param mixed $value
     */
    private function update_stat_cache($path, $value)
    {
        if ($this->use_stat_cache === false) {
            return;
        }

        // preg_replace('#^/|/(?=/)|/$#', '', $dir) == str_replace('//', '/', trim($path, '/'))
        $dirs = explode('/', preg_replace('#^/|/(?=/)|/$#', '', $path));

        $temp = &$this->stat_cache;
        $max = count($dirs) - 1;
        foreach ($dirs as $i => $dir) {
            // if $temp is an object that means one of two things.
            //  1. a file was deleted and changed to a directory behind phpseclib's back
            //  2. it's a symlink. when lstat is done it's unclear what it's a symlink to
            if (is_object($temp)) {
                $temp = [];
            }
            if (!isset($temp[$dir])) {
                $temp[$dir] = [];
            }
            if ($i === $max) {
                if (is_object($temp[$dir]) && is_object($value)) {
                    if (!isset($value->stat) && isset($temp[$dir]->stat)) {
                        $value->stat = $temp[$dir]->stat;
                    }
                    if (!isset($value->lstat) && isset($temp[$dir]->lstat)) {
                        $value->lstat = $temp[$dir]->lstat;
                    }
                }
                $temp[$dir] = $value;
                break;
            }
            $temp = &$temp[$dir];
        }
    }

    /**
     * Remove files / directories from cache
     *
     * @param string $path
     * @return bool
     */
    private function remove_from_stat_cache($path)
    {
        $dirs = explode('/', preg_replace('#^/|/(?=/)|/$#', '', $path));

        $temp = &$this->stat_cache;
        $max = count($dirs) - 1;
        foreach ($dirs as $i => $dir) {
            if (!is_array($temp)) {
                return false;
            }
            if ($i === $max) {
                unset($temp[$dir]);
                return true;
            }
            if (!isset($temp[$dir])) {
                return false;
            }
            $temp = &$temp[$dir];
        }
    }

    /**
     * Checks cache for path
     *
     * Mainly used by file_exists
     *
     * @param string $path
     * @return mixed
     */
    private function query_stat_cache($path)
    {
        $dirs = explode('/', preg_replace('#^/|/(?=/)|/$#', '', $path));

        $temp = &$this->stat_cache;
        foreach ($dirs as $dir) {
            if (!is_array($temp)) {
                return null;
            }
            if (!isset($temp[$dir])) {
                return null;
            }
            $temp = &$temp[$dir];
        }
        return $temp;
    }

    /**
     * Returns general information about a file.
     *
     * Returns an array on success and false otherwise.
     *
     * @param string $filename
     * @return array|false
     */
    public function stat($filename)
    {
        if (!$this->precheck()) {
            return false;
        }

        $filename = $this->realpath($filename);
        if ($filename === false) {
            return false;
        }

        if ($this->use_stat_cache) {
            $result = $this->query_stat_cache($filename);
            if (is_array($result) && isset($result['.']) && isset($result['.']->stat)) {
                return $result['.']->stat;
            }
            if (is_object($result) && isset($result->stat)) {
                return $result->stat;
            }
        }

        $stat = $this->stat_helper($filename, NET_SFTP_STAT);
        if ($stat === false) {
            $this->remove_from_stat_cache($filename);
            return false;
        }
        if (isset($stat['type'])) {
            if ($stat['type'] == NET_SFTP_TYPE_DIRECTORY) {
                $filename .= '/.';
            }
            $this->update_stat_cache($filename, (object) ['stat' => $stat]);
            return $stat;
        }

        $pwd = $this->pwd;
        $stat['type'] = $this->chdir($filename) ?
            NET_SFTP_TYPE_DIRECTORY :
            NET_SFTP_TYPE_REGULAR;
        $this->pwd = $pwd;

        if ($stat['type'] == NET_SFTP_TYPE_DIRECTORY) {
            $filename .= '/.';
        }
        $this->update_stat_cache($filename, (object) ['stat' => $stat]);

        return $stat;
    }

    /**
     * Returns general information about a file or symbolic link.
     *
     * Returns an array on success and false otherwise.
     *
     * @param string $filename
     * @return array|false
     */
    public function lstat($filename)
    {
        if (!$this->precheck()) {
            return false;
        }

        $filename = $this->realpath($filename);
        if ($filename === false) {
            return false;
        }

        if ($this->use_stat_cache) {
            $result = $this->query_stat_cache($filename);
            if (is_array($result) && isset($result['.']) && isset($result['.']->lstat)) {
                return $result['.']->lstat;
            }
            if (is_object($result) && isset($result->lstat)) {
                return $result->lstat;
            }
        }

        $lstat = $this->stat_helper($filename, NET_SFTP_LSTAT);
        if ($lstat === false) {
            $this->remove_from_stat_cache($filename);
            return false;
        }
        if (isset($lstat['type'])) {
            if ($lstat['type'] == NET_SFTP_TYPE_DIRECTORY) {
                $filename .= '/.';
            }
            $this->update_stat_cache($filename, (object) ['lstat' => $lstat]);
            return $lstat;
        }

        $stat = $this->stat_helper($filename, NET_SFTP_STAT);

        if ($lstat != $stat) {
            $lstat = array_merge($lstat, ['type' => NET_SFTP_TYPE_SYMLINK]);
            $this->update_stat_cache($filename, (object) ['lstat' => $lstat]);
            return $stat;
        }

        $pwd = $this->pwd;
        $lstat['type'] = $this->chdir($filename) ?
            NET_SFTP_TYPE_DIRECTORY :
            NET_SFTP_TYPE_REGULAR;
        $this->pwd = $pwd;

        if ($lstat['type'] == NET_SFTP_TYPE_DIRECTORY) {
            $filename .= '/.';
        }
        $this->update_stat_cache($filename, (object) ['lstat' => $lstat]);

        return $lstat;
    }

    /**
     * Returns general information about a file or symbolic link
     *
     * Determines information without calling \phpseclib3\Net\SFTP::realpath().
     * The second parameter can be either NET_SFTP_STAT or NET_SFTP_LSTAT.
     *
     * @param string $filename
     * @param int $type
     * @throws \UnexpectedValueException on receipt of unexpected packets
     * @return array|false
     */
    private function stat_helper($filename, $type)
    {
        // SFTPv4+ adds an additional 32-bit integer field - flags - to the following:
        $packet = Strings::packSSH2('s', $filename);
        $this->send_sftp_packet($type, $packet);

        $response = $this->get_sftp_packet();
        switch ($this->packet_type) {
            case NET_SFTP_ATTRS:
                return $this->parseAttributes($response);
            case NET_SFTP_STATUS:
                $this->logError($response);
                return false;
        }

        throw new \UnexpectedValueException('Expected NET_SFTP_ATTRS or NET_SFTP_STATUS. '
                                          . 'Got packet type: ' . $this->packet_type);
    }

    /**
     * Truncates a file to a given length
     *
     * @param string $filename
     * @param int $new_size
     * @return bool
     */
    public function truncate($filename, $new_size)
    {
        $attr = Strings::packSSH2('NQ', NET_SFTP_ATTR_SIZE, $new_size);

        return $this->setstat($filename, $attr, false);
    }

    /**
     * Sets access and modification time of file.
     *
     * If the file does not exist, it will be created.
     *
     * @param string $filename
     * @param int $time
     * @param int $atime
     * @throws \UnexpectedValueException on receipt of unexpected packets
     * @return bool
     */
    public function touch($filename, $time = null, $atime = null)
    {
        if (!$this->precheck()) {
            return false;
        }

        $filename = $this->realpath($filename);
        if ($filename === false) {
            return false;
        }

        if (!isset($time)) {
            $time = time();
        }
        if (!isset($atime)) {
            $atime = $time;
        }

        $attr = $this->version < 4 ?
            pack('N3', NET_SFTP_ATTR_ACCESSTIME, $atime, $time) :
            Strings::packSSH2('NQ2', NET_SFTP_ATTR_ACCESSTIME | NET_SFTP_ATTR_MODIFYTIME, $atime, $time);

        $packet = Strings::packSSH2('s', $filename);
        $packet .= $this->version >= 5 ?
            pack('N2', 0, NET_SFTP_OPEN_OPEN_EXISTING) :
            pack('N', NET_SFTP_OPEN_WRITE | NET_SFTP_OPEN_CREATE | NET_SFTP_OPEN_EXCL);
        $packet .= $attr;

        $this->send_sftp_packet(NET_SFTP_OPEN, $packet);

        $response = $this->get_sftp_packet();
        switch ($this->packet_type) {
            case NET_SFTP_HANDLE:
                return $this->close_handle(substr($response, 4));
            case NET_SFTP_STATUS:
                $this->logError($response);
                break;
            default:
                throw new \UnexpectedValueException('Expected NET_SFTP_HANDLE or NET_SFTP_STATUS. '
                                                  . 'Got packet type: ' . $this->packet_type);
        }

        return $this->setstat($filename, $attr, false);
    }

    /**
     * Changes file or directory owner
     *
     * $uid should be an int for SFTPv3 and a string for SFTPv4+. Ideally the string
     * would be of the form "user@dns_domain" but it does not need to be.
     * `$sftp->getSupportedVersions()['version']` will return the specific version
     * that's being used.
     *
     * Returns true on success or false on error.
     *
     * @param string $filename
     * @param int|string $uid
     * @param bool $recursive
     * @return bool
     */
    public function chown($filename, $uid, $recursive = false)
    {
        /*
         quoting <https://datatracker.ietf.org/doc/html/draft-ietf-secsh-filexfer-13#section-7.5>,

         "To avoid a representation that is tied to a particular underlying
          implementation at the client or server, the use of UTF-8 strings has
          been chosen.  The string should be of the form "user@dns_domain".
          This will allow for a client and server that do not use the same
          local representation the ability to translate to a common syntax that
          can be interpreted by both.  In the case where there is no
          translation available to the client or server, the attribute value
          must be constructed without the "@"."

         phpseclib _could_ auto append the dns_domain to $uid BUT what if it shouldn't
         have one? phpseclib would have no way of knowing so rather than guess phpseclib
         will just use whatever value the user provided
       */

        $attr = $this->version < 4 ?
            // quoting <http://www.kernel.org/doc/man-pages/online/pages/man2/chown.2.html>,
            // "if the owner or group is specified as -1, then that ID is not changed"
            pack('N3', NET_SFTP_ATTR_UIDGID, $uid, -1) :
            // quoting <https://datatracker.ietf.org/doc/html/draft-ietf-secsh-filexfer-13#section-7.5>,
            // "If either the owner or group field is zero length, the field should be
            //  considered absent, and no change should be made to that specific field
            //  during a modification operation"
            Strings::packSSH2('Nss', NET_SFTP_ATTR_OWNERGROUP, $uid, '');

        return $this->setstat($filename, $attr, $recursive);
    }

    /**
     * Changes file or directory group
     *
     * $gid should be an int for SFTPv3 and a string for SFTPv4+. Ideally the string
     * would be of the form "user@dns_domain" but it does not need to be.
     * `$sftp->getSupportedVersions()['version']` will return the specific version
     * that's being used.
     *
     * Returns true on success or false on error.
     *
     * @param string $filename
     * @param int|string $gid
     * @param bool $recursive
     * @return bool
     */
    public function chgrp($filename, $gid, $recursive = false)
    {
        $attr = $this->version < 4 ?
            pack('N3', NET_SFTP_ATTR_UIDGID, -1, $gid) :
            Strings::packSSH2('Nss', NET_SFTP_ATTR_OWNERGROUP, '', $gid);

        return $this->setstat($filename, $attr, $recursive);
    }

    /**
     * Set permissions on a file.
     *
     * Returns the new file permissions on success or false on error.
     * If $recursive is true than this just returns true or false.
     *
     * @param int $mode
     * @param string $filename
     * @param bool $recursive
     * @throws \UnexpectedValueException on receipt of unexpected packets
     * @return mixed
     */
    public function chmod($mode, $filename, $recursive = false)
    {
        if (is_string($mode) && is_int($filename)) {
            $temp = $mode;
            $mode = $filename;
            $filename = $temp;
        }

        $attr = pack('N2', NET_SFTP_ATTR_PERMISSIONS, $mode & 07777);
        if (!$this->setstat($filename, $attr, $recursive)) {
            return false;
        }
        if ($recursive) {
            return true;
        }

        $filename = $this->realpath($filename);
        // rather than return what the permissions *should* be, we'll return what they actually are.  this will also
        // tell us if the file actually exists.
        // incidentally, SFTPv4+ adds an additional 32-bit integer field - flags - to the following:
        $packet = pack('Na*', strlen($filename), $filename);
        $this->send_sftp_packet(NET_SFTP_STAT, $packet);

        $response = $this->get_sftp_packet();
        switch ($this->packet_type) {
            case NET_SFTP_ATTRS:
                $attrs = $this->parseAttributes($response);
                return $attrs['mode'];
            case NET_SFTP_STATUS:
                $this->logError($response);
                return false;
        }

        throw new \UnexpectedValueException('Expected NET_SFTP_ATTRS or NET_SFTP_STATUS. '
                                          . 'Got packet type: ' . $this->packet_type);
    }

    /**
     * Sets information about a file
     *
     * @param string $filename
     * @param string $attr
     * @param bool $recursive
     * @throws \UnexpectedValueException on receipt of unexpected packets
     * @return bool
     */
    private function setstat($filename, $attr, $recursive)
    {
        if (!$this->precheck()) {
            return false;
        }

        $filename = $this->realpath($filename);
        if ($filename === false) {
            return false;
        }

        $this->remove_from_stat_cache($filename);

        if ($recursive) {
            $i = 0;
            $result = $this->setstat_recursive($filename, $attr, $i);
            $this->read_put_responses($i);
            return $result;
        }

        $packet = Strings::packSSH2('s', $filename);
        $packet .= $this->version >= 4 ?
            pack('a*Ca*', substr($attr, 0, 4), NET_SFTP_TYPE_UNKNOWN, substr($attr, 4)) :
            $attr;
        $this->send_sftp_packet(NET_SFTP_SETSTAT, $packet);

        /*
         "Because some systems must use separate system calls to set various attributes, it is possible that a failure
          response will be returned, but yet some of the attributes may be have been successfully modified.  If possible,
          servers SHOULD avoid this situation; however, clients MUST be aware that this is possible."

          -- http://tools.ietf.org/html/draft-ietf-secsh-filexfer-13#section-8.6
        */
        $response = $this->get_sftp_packet();
        if ($this->packet_type != NET_SFTP_STATUS) {
            throw new \UnexpectedValueException('Expected NET_SFTP_STATUS. '
                                              . 'Got packet type: ' . $this->packet_type);
        }

        list($status) = Strings::unpackSSH2('N', $response);
        if ($status != NET_SFTP_STATUS_OK) {
            $this->logError($response, $status);
            return false;
        }

        return true;
    }

    /**
     * Recursively sets information on directories on the SFTP server
     *
     * Minimizes directory lookups and SSH_FXP_STATUS requests for speed.
     *
     * @param string $path
     * @param string $attr
     * @param int $i
     * @return bool
     */
    private function setstat_recursive($path, $attr, &$i)
    {
        if (!$this->read_put_responses($i)) {
            return false;
        }
        $i = 0;
        $entries = $this->readlist($path, true);

        if ($entries === false || is_int($entries)) {
            return $this->setstat($path, $attr, false);
        }

        // normally $entries would have at least . and .. but it might not if the directories
        // permissions didn't allow reading
        if (empty($entries)) {
            return false;
        }

        unset($entries['.'], $entries['..']);
        foreach ($entries as $filename => $props) {
            if (!isset($props['type'])) {
                return false;
            }

            $temp = $path . '/' . $filename;
            if ($props['type'] == NET_SFTP_TYPE_DIRECTORY) {
                if (!$this->setstat_recursive($temp, $attr, $i)) {
                    return false;
                }
            } else {
                $packet = Strings::packSSH2('s', $temp);
                $packet .= $this->version >= 4 ?
                    pack('Ca*', NET_SFTP_TYPE_UNKNOWN, $attr) :
                    $attr;
                $this->send_sftp_packet(NET_SFTP_SETSTAT, $packet);

                $i++;

                if ($i >= NET_SFTP_QUEUE_SIZE) {
                    if (!$this->read_put_responses($i)) {
                        return false;
                    }
                    $i = 0;
                }
            }
        }

        $packet = Strings::packSSH2('s', $path);
        $packet .= $this->version >= 4 ?
            pack('Ca*', NET_SFTP_TYPE_UNKNOWN, $attr) :
            $attr;
        $this->send_sftp_packet(NET_SFTP_SETSTAT, $packet);

        $i++;

        if ($i >= NET_SFTP_QUEUE_SIZE) {
            if (!$this->read_put_responses($i)) {
                return false;
            }
            $i = 0;
        }

        return true;
    }

    /**
     * Return the target of a symbolic link
     *
     * @param string $link
     * @throws \UnexpectedValueException on receipt of unexpected packets
     * @return mixed
     */
    public function readlink($link)
    {
        if (!$this->precheck()) {
            return false;
        }

        $link = $this->realpath($link);

        $this->send_sftp_packet(NET_SFTP_READLINK, Strings::packSSH2('s', $link));

        $response = $this->get_sftp_packet();
        switch ($this->packet_type) {
            case NET_SFTP_NAME:
                break;
            case NET_SFTP_STATUS:
                $this->logError($response);
                return false;
            default:
                throw new \UnexpectedValueException('Expected NET_SFTP_NAME or NET_SFTP_STATUS. '
                                                  . 'Got packet type: ' . $this->packet_type);
        }

        list($count) = Strings::unpackSSH2('N', $response);
        // the file isn't a symlink
        if (!$count) {
            return false;
        }

        list($filename) = Strings::unpackSSH2('s', $response);

        return $filename;
    }

    /**
     * Create a symlink
     *
     * symlink() creates a symbolic link to the existing target with the specified name link.
     *
     * @param string $target
     * @param string $link
     * @throws \UnexpectedValueException on receipt of unexpected packets
     * @return bool
     */
    public function symlink($target, $link)
    {
        if (!$this->precheck()) {
            return false;
        }

        //$target = $this->realpath($target);
        $link = $this->realpath($link);

        /* quoting https://datatracker.ietf.org/doc/html/draft-ietf-secsh-filexfer-09#section-12.1 :

           Changed the SYMLINK packet to be LINK and give it the ability to
           create hard links.  Also change it's packet number because many
           implementation implemented SYMLINK with the arguments reversed.
           Hopefully the new argument names make it clear which way is which.
        */
        if ($this->version == 6) {
            $type = NET_SFTP_LINK;
            $packet = Strings::packSSH2('ssC', $link, $target, 1);
        } else {
            $type = NET_SFTP_SYMLINK;
            /* quoting http://bxr.su/OpenBSD/usr.bin/ssh/PROTOCOL#347 :

               3.1. sftp: Reversal of arguments to SSH_FXP_SYMLINK

               When OpenSSH's sftp-server was implemented, the order of the arguments
               to the SSH_FXP_SYMLINK method was inadvertently reversed. Unfortunately,
               the reversal was not noticed until the server was widely deployed. Since
               fixing this to follow the specification would cause incompatibility, the
               current order was retained. For correct operation, clients should send
               SSH_FXP_SYMLINK as follows:

                   uint32      id
                   string      targetpath
                   string      linkpath */
            $packet = substr($this->server_identifier, 0, 15) == 'SSH-2.0-OpenSSH' ?
                Strings::packSSH2('ss', $target, $link) :
                Strings::packSSH2('ss', $link, $target);
        }
        $this->send_sftp_packet($type, $packet);

        $response = $this->get_sftp_packet();
        if ($this->packet_type != NET_SFTP_STATUS) {
            throw new \UnexpectedValueException('Expected NET_SFTP_STATUS. '
                                              . 'Got packet type: ' . $this->packet_type);
        }

        list($status) = Strings::unpackSSH2('N', $response);
        if ($status != NET_SFTP_STATUS_OK) {
            $this->logError($response, $status);
            return false;
        }

        return true;
    }

    /**
     * Creates a directory.
     *
     * @param string $dir
     * @param int $mode
     * @param bool $recursive
     * @return bool
     */
    public function mkdir($dir, $mode = -1, $recursive = false)
    {
        if (!$this->precheck()) {
            return false;
        }

        $dir = $this->realpath($dir);

        if ($recursive) {
            $dirs = explode('/', preg_replace('#/(?=/)|/$#', '', $dir));
            if (empty($dirs[0])) {
                array_shift($dirs);
                $dirs[0] = '/' . $dirs[0];
            }
            for ($i = 0; $i < count($dirs); $i++) {
                $temp = array_slice($dirs, 0, $i + 1);
                $temp = implode('/', $temp);
                $result = $this->mkdir_helper($temp, $mode);
            }
            return $result;
        }

        return $this->mkdir_helper($dir, $mode);
    }

    /**
     * Helper function for directory creation
     *
     * @param string $dir
     * @param int $mode
     * @return bool
     */
    private function mkdir_helper($dir, $mode)
    {
        // send SSH_FXP_MKDIR without any attributes (that's what the \0\0\0\0 is doing)
        $this->send_sftp_packet(NET_SFTP_MKDIR, Strings::packSSH2('s', $dir) . "\0\0\0\0");

        $response = $this->get_sftp_packet();
        if ($this->packet_type != NET_SFTP_STATUS) {
            throw new \UnexpectedValueException('Expected NET_SFTP_STATUS. '
                                              . 'Got packet type: ' . $this->packet_type);
        }

        list($status) = Strings::unpackSSH2('N', $response);
        if ($status != NET_SFTP_STATUS_OK) {
            $this->logError($response, $status);
            return false;
        }

        if ($mode !== -1) {
            $this->chmod($mode, $dir);
        }

        return true;
    }

    /**
     * Removes a directory.
     *
     * @param string $dir
     * @throws \UnexpectedValueException on receipt of unexpected packets
     * @return bool
     */
    public function rmdir($dir)
    {
        if (!$this->precheck()) {
            return false;
        }

        $dir = $this->realpath($dir);
        if ($dir === false) {
            return false;
        }

        $this->send_sftp_packet(NET_SFTP_RMDIR, Strings::packSSH2('s', $dir));

        $response = $this->get_sftp_packet();
        if ($this->packet_type != NET_SFTP_STATUS) {
            throw new \UnexpectedValueException('Expected NET_SFTP_STATUS. '
                                              . 'Got packet type: ' . $this->packet_type);
        }

        list($status) = Strings::unpackSSH2('N', $response);
        if ($status != NET_SFTP_STATUS_OK) {
            // presumably SSH_FX_NO_SUCH_FILE or SSH_FX_PERMISSION_DENIED?
            $this->logError($response, $status);
            return false;
        }

        $this->remove_from_stat_cache($dir);
        // the following will do a soft delete, which would be useful if you deleted a file
        // and then tried to do a stat on the deleted file. the above, in contrast, does
        // a hard delete
        //$this->update_stat_cache($dir, false);

        return true;
    }

    /**
     * Uploads a file to the SFTP server.
     *
     * By default, \phpseclib3\Net\SFTP::put() does not read from the local filesystem.  $data is dumped directly into $remote_file.
     * So, for example, if you set $data to 'filename.ext' and then do \phpseclib3\Net\SFTP::get(), you will get a file, twelve bytes
     * long, containing 'filename.ext' as its contents.
     *
     * Setting $mode to self::SOURCE_LOCAL_FILE will change the above behavior.  With self::SOURCE_LOCAL_FILE, $remote_file will
     * contain as many bytes as filename.ext does on your local filesystem.  If your filename.ext is 1MB then that is how
     * large $remote_file will be, as well.
     *
     * Setting $mode to self::SOURCE_CALLBACK will use $data as callback function, which gets only one parameter -- number
     * of bytes to return, and returns a string if there is some data or null if there is no more data
     *
     * If $data is a resource then it'll be used as a resource instead.
     *
     * Currently, only binary mode is supported.  As such, if the line endings need to be adjusted, you will need to take
     * care of that, yourself.
     *
     * $mode can take an additional two parameters - self::RESUME and self::RESUME_START. These are bitwise AND'd with
     * $mode. So if you want to resume upload of a 300mb file on the local file system you'd set $mode to the following:
     *
     * self::SOURCE_LOCAL_FILE | self::RESUME
     *
     * If you wanted to simply append the full contents of a local file to the full contents of a remote file you'd replace
     * self::RESUME with self::RESUME_START.
     *
     * If $mode & (self::RESUME | self::RESUME_START) then self::RESUME_START will be assumed.
     *
     * $start and $local_start give you more fine grained control over this process and take precident over self::RESUME
     * when they're non-negative. ie. $start could let you write at the end of a file (like self::RESUME) or in the middle
     * of one. $local_start could let you start your reading from the end of a file (like self::RESUME_START) or in the
     * middle of one.
     *
     * Setting $local_start to > 0 or $mode | self::RESUME_START doesn't do anything unless $mode | self::SOURCE_LOCAL_FILE.
     *
     * {@internal ASCII mode for SFTPv4/5/6 can be supported by adding a new function - \phpseclib3\Net\SFTP::setMode().}
     *
     * @param string $remote_file
     * @param string|resource $data
     * @param int $mode
     * @param int $start
     * @param int $local_start
     * @param callable|null $progressCallback
     * @throws \UnexpectedValueException on receipt of unexpected packets
     * @throws \BadFunctionCallException if you're uploading via a callback and the callback function is invalid
     * @throws FileNotFoundException if you're uploading via a file and the file doesn't exist
     * @return bool
     */
    public function put($remote_file, $data, $mode = self::SOURCE_STRING, $start = -1, $local_start = -1, $progressCallback = null)
    {
        if (!$this->precheck()) {
            return false;
        }

        $remote_file = $this->realpath($remote_file);
        if ($remote_file === false) {
            return false;
        }

        $this->remove_from_stat_cache($remote_file);

        if ($this->version >= 5) {
            $flags = NET_SFTP_OPEN_OPEN_OR_CREATE;
        } else {
            $flags = NET_SFTP_OPEN_WRITE | NET_SFTP_OPEN_CREATE;
            // according to the SFTP specs, NET_SFTP_OPEN_APPEND should "force all writes to append data at the end of the file."
            // in practice, it doesn't seem to do that.
            //$flags|= ($mode & self::RESUME) ? NET_SFTP_OPEN_APPEND : NET_SFTP_OPEN_TRUNCATE;
        }

        if ($start >= 0) {
            $offset = $start;
        } elseif ($mode & (self::RESUME | self::RESUME_START)) {
            // if NET_SFTP_OPEN_APPEND worked as it should _size() wouldn't need to be called
            $stat = $this->stat($remote_file);
            $offset = $stat !== false && $stat['size'] ? $stat['size'] : 0;
        } else {
            $offset = 0;
            if ($this->version >= 5) {
                $flags = NET_SFTP_OPEN_CREATE_TRUNCATE;
            } else {
                $flags |= NET_SFTP_OPEN_TRUNCATE;
            }
        }

        $this->remove_from_stat_cache($remote_file);

        $packet = Strings::packSSH2('s', $remote_file);
        $packet .= $this->version >= 5 ?
            pack('N3', 0, $flags, 0) :
            pack('N2', $flags, 0);
        $this->send_sftp_packet(NET_SFTP_OPEN, $packet);

        $response = $this->get_sftp_packet();
        switch ($this->packet_type) {
            case NET_SFTP_HANDLE:
                $handle = substr($response, 4);
                break;
            case NET_SFTP_STATUS:
                $this->logError($response);
                return false;
            default:
                throw new \UnexpectedValueException('Expected NET_SFTP_HANDLE or NET_SFTP_STATUS. '
                                                  . 'Got packet type: ' . $this->packet_type);
        }

        // http://tools.ietf.org/html/draft-ietf-secsh-filexfer-13#section-8.2.3
        $dataCallback = false;
        switch (true) {
            case $mode & self::SOURCE_CALLBACK:
                if (!is_callable($data)) {
                    throw new \BadFunctionCallException("\$data should be is_callable() if you specify SOURCE_CALLBACK flag");
                }
                $dataCallback = $data;
                // do nothing
                break;
            case is_resource($data):
                $mode = $mode & ~self::SOURCE_LOCAL_FILE;
                $info = stream_get_meta_data($data);
                if (isset($info['wrapper_type']) && $info['wrapper_type'] == 'PHP' && $info['stream_type'] == 'Input') {
                    $fp = fopen('php://memory', 'w+');
                    stream_copy_to_stream($data, $fp);
                    rewind($fp);
                } else {
                    $fp = $data;
                }
                break;
            case $mode & self::SOURCE_LOCAL_FILE:
                if (!is_file($data)) {
                    throw new FileNotFoundException("$data is not a valid file");
                }
                $fp = @fopen($data, 'rb');
                if (!$fp) {
                    return false;
                }
        }

        if (isset($fp)) {
            $stat = fstat($fp);
            $size = !empty($stat) ? $stat['size'] : 0;

            if ($local_start >= 0) {
                fseek($fp, $local_start);
                $size -= $local_start;
            } elseif ($mode & self::RESUME) {
                fseek($fp, $offset);
                $size -= $offset;
            }
        } elseif ($dataCallback) {
            $size = 0;
        } else {
            $size = strlen($data);
        }

        $sent = 0;
        $size = $size < 0 ? ($size & 0x7FFFFFFF) + 0x80000000 : $size;

        $sftp_packet_size = $this->max_sftp_packet;
        // make the SFTP packet be exactly the SFTP packet size by including the bytes in the NET_SFTP_WRITE packets "header"
        $sftp_packet_size -= strlen($handle) + 25;
        $i = $j = 0;
        while ($dataCallback || ($size === 0 || $sent < $size)) {
            if ($dataCallback) {
                $temp = $dataCallback($sftp_packet_size);
                if (is_null($temp)) {
                    break;
                }
            } else {
                $temp = isset($fp) ? fread($fp, $sftp_packet_size) : substr($data, $sent, $sftp_packet_size);
                if ($temp === false || $temp === '') {
                    break;
                }
            }

            $subtemp = $offset + $sent;
            $packet = pack('Na*N3a*', strlen($handle), $handle, $subtemp / 4294967296, $subtemp, strlen($temp), $temp);
            try {
                $this->send_sftp_packet(NET_SFTP_WRITE, $packet, $j);
            } catch (\Exception $e) {
                if ($mode & self::SOURCE_LOCAL_FILE) {
                    fclose($fp);
                }
                throw $e;
            }
            $sent += strlen($temp);
            if (is_callable($progressCallback)) {
                $progressCallback($sent);
            }

            $i++;
            $j++;
            if ($i == NET_SFTP_UPLOAD_QUEUE_SIZE) {
                if (!$this->read_put_responses($i)) {
                    $i = 0;
                    break;
                }
                $i = 0;
            }
        }

        $result = $this->close_handle($handle);

        if (!$this->read_put_responses($i)) {
            if ($mode & self::SOURCE_LOCAL_FILE) {
                fclose($fp);
            }
            $this->close_handle($handle);
            return false;
        }

        if ($mode & SFTP::SOURCE_LOCAL_FILE) {
            if (isset($fp) && is_resource($fp)) {
                fclose($fp);
            }

            if ($this->preserveTime) {
                $stat = stat($data);
                $attr = $this->version < 4 ?
                    pack('N3', NET_SFTP_ATTR_ACCESSTIME, $stat['atime'], $stat['mtime']) :
                    Strings::packSSH2('NQ2', NET_SFTP_ATTR_ACCESSTIME | NET_SFTP_ATTR_MODIFYTIME, $stat['atime'], $stat['mtime']);
                if (!$this->setstat($remote_file, $attr, false)) {
                    throw new \RuntimeException('Error setting file time');
                }
            }
        }

        return $result;
    }

    /**
     * Reads multiple successive SSH_FXP_WRITE responses
     *
     * Sending an SSH_FXP_WRITE packet and immediately reading its response isn't as efficient as blindly sending out $i
     * SSH_FXP_WRITEs, in succession, and then reading $i responses.
     *
     * @param int $i
     * @return bool
     * @throws \UnexpectedValueException on receipt of unexpected packets
     */
    private function read_put_responses($i)
    {
        while ($i--) {
            $response = $this->get_sftp_packet();
            if ($this->packet_type != NET_SFTP_STATUS) {
                throw new \UnexpectedValueException('Expected NET_SFTP_STATUS. '
                                                  . 'Got packet type: ' . $this->packet_type);
            }

            list($status) = Strings::unpackSSH2('N', $response);
            if ($status != NET_SFTP_STATUS_OK) {
                $this->logError($response, $status);
                break;
            }
        }

        return $i < 0;
    }

    /**
     * Close handle
     *
     * @param string $handle
     * @return bool
     * @throws \UnexpectedValueException on receipt of unexpected packets
     */
    private function close_handle($handle)
    {
        $this->send_sftp_packet(NET_SFTP_CLOSE, pack('Na*', strlen($handle), $handle));

        // "The client MUST release all resources associated with the handle regardless of the status."
        //  -- http://tools.ietf.org/html/draft-ietf-secsh-filexfer-13#section-8.1.3
        $response = $this->get_sftp_packet();
        if ($this->packet_type != NET_SFTP_STATUS) {
            throw new \UnexpectedValueException('Expected NET_SFTP_STATUS. '
                                              . 'Got packet type: ' . $this->packet_type);
        }

        list($status) = Strings::unpackSSH2('N', $response);
        if ($status != NET_SFTP_STATUS_OK) {
            $this->logError($response, $status);
            return false;
        }

        return true;
    }

    /**
     * Downloads a file from the SFTP server.
     *
     * Returns a string containing the contents of $remote_file if $local_file is left undefined or a boolean false if
     * the operation was unsuccessful.  If $local_file is defined, returns true or false depending on the success of the
     * operation.
     *
     * $offset and $length can be used to download files in chunks.
     *
     * @param string $remote_file
     * @param string|bool|resource|callable $local_file
     * @param int $offset
     * @param int $length
     * @param callable|null $progressCallback
     * @throws \UnexpectedValueException on receipt of unexpected packets
     * @return string|bool
     */
    public function get($remote_file, $local_file = false, $offset = 0, $length = -1, $progressCallback = null)
    {
        if (!$this->precheck()) {
            return false;
        }

        $remote_file = $this->realpath($remote_file);
        if ($remote_file === false) {
            return false;
        }

        $packet = Strings::packSSH2('s', $remote_file);
        $packet .= $this->version >= 5 ?
            pack('N3', 0, NET_SFTP_OPEN_OPEN_EXISTING, 0) :
            pack('N2', NET_SFTP_OPEN_READ, 0);
        $this->send_sftp_packet(NET_SFTP_OPEN, $packet);

        $response = $this->get_sftp_packet();
        switch ($this->packet_type) {
            case NET_SFTP_HANDLE:
                $handle = substr($response, 4);
                break;
            case NET_SFTP_STATUS: // presumably SSH_FX_NO_SUCH_FILE or SSH_FX_PERMISSION_DENIED
                $this->logError($response);
                return false;
            default:
                throw new \UnexpectedValueException('Expected NET_SFTP_HANDLE or NET_SFTP_STATUS. '
                                                  . 'Got packet type: ' . $this->packet_type);
        }

        if (is_resource($local_file)) {
            $fp = $local_file;
            $stat = fstat($fp);
            $res_offset = $stat['size'];
        } else {
            $res_offset = 0;
            if ($local_file !== false && !is_callable($local_file)) {
                $fp = fopen($local_file, 'wb');
                if (!$fp) {
                    return false;
                }
            } else {
                $content = '';
            }
        }

        $fclose_check = $local_file !== false && !is_callable($local_file) && !is_resource($local_file);

        $start = $offset;
        $read = 0;
        while (true) {
            $i = 0;

            while ($i < NET_SFTP_QUEUE_SIZE && ($length < 0 || $read < $length)) {
                $tempoffset = $start + $read;

                $packet_size = $length > 0 ? min($this->max_sftp_packet, $length - $read) : $this->max_sftp_packet;

                $packet = Strings::packSSH2('sN3', $handle, $tempoffset / 4294967296, $tempoffset, $packet_size);
                try {
                    $this->send_sftp_packet(NET_SFTP_READ, $packet, $i);
                } catch (\Exception $e) {
                    if ($fclose_check) {
                        fclose($fp);
                    }
                    throw $e;
                }
                $packet = null;
                $read += $packet_size;
                $i++;
            }

            if (!$i) {
                break;
            }

            $packets_sent = $i - 1;

            $clear_responses = false;
            while ($i > 0) {
                $i--;

                if ($clear_responses) {
                    $this->get_sftp_packet($packets_sent - $i);
                    continue;
                } else {
                    $response = $this->get_sftp_packet($packets_sent - $i);
                }

                switch ($this->packet_type) {
                    case NET_SFTP_DATA:
                        $temp = substr($response, 4);
                        $offset += strlen($temp);
                        if ($local_file === false) {
                            $content .= $temp;
                        } elseif (is_callable($local_file)) {
                            $local_file($temp);
                        } else {
                            fputs($fp, $temp);
                        }
                        if (is_callable($progressCallback)) {
                            call_user_func($progressCallback, $offset);
                        }
                        $temp = null;
                        break;
                    case NET_SFTP_STATUS:
                        // could, in theory, return false if !strlen($content) but we'll hold off for the time being
                        $this->logError($response);
                        $clear_responses = true; // don't break out of the loop yet, so we can read the remaining responses
                        break;
                    default:
                        if ($fclose_check) {
                            fclose($fp);
                        }
                        if ($this->channel_close) {
                            $this->partial_init = false;
                            $this->init_sftp_connection();
                            return false;
                        } else {
                            throw new \UnexpectedValueException('Expected NET_SFTP_DATA or NET_SFTP_STATUS. '
                                                              . 'Got packet type: ' . $this->packet_type);
                        }
                }
                $response = null;
            }

            if ($clear_responses) {
                break;
            }
        }

        if ($fclose_check) {
            fclose($fp);

            if ($this->preserveTime) {
                $stat = $this->stat($remote_file);
                touch($local_file, $stat['mtime'], $stat['atime']);
            }
        }

        if (!$this->close_handle($handle)) {
            return false;
        }

        // if $content isn't set that means a file was written to
        return isset($content) ? $content : true;
    }

    /**
     * Deletes a file on the SFTP server.
     *
     * @param string $path
     * @param bool $recursive
     * @return bool
     * @throws \UnexpectedValueException on receipt of unexpected packets
     */
    public function delete($path, $recursive = true)
    {
        if (!$this->precheck()) {
            return false;
        }

        if (is_object($path)) {
            // It's an object. Cast it as string before we check anything else.
            $path = (string) $path;
        }

        if (!is_string($path) || $path == '') {
            return false;
        }

        $path = $this->realpath($path);
        if ($path === false) {
            return false;
        }

        // http://tools.ietf.org/html/draft-ietf-secsh-filexfer-13#section-8.3
        $this->send_sftp_packet(NET_SFTP_REMOVE, pack('Na*', strlen($path), $path));

        $response = $this->get_sftp_packet();
        if ($this->packet_type != NET_SFTP_STATUS) {
            throw new \UnexpectedValueException('Expected NET_SFTP_STATUS. '
                                              . 'Got packet type: ' . $this->packet_type);
        }

        // if $status isn't SSH_FX_OK it's probably SSH_FX_NO_SUCH_FILE or SSH_FX_PERMISSION_DENIED
        list($status) = Strings::unpackSSH2('N', $response);
        if ($status != NET_SFTP_STATUS_OK) {
            $this->logError($response, $status);
            if (!$recursive) {
                return false;
            }

            $i = 0;
            $result = $this->delete_recursive($path, $i);
            $this->read_put_responses($i);
            return $result;
        }

        $this->remove_from_stat_cache($path);

        return true;
    }

    /**
     * Recursively deletes directories on the SFTP server
     *
     * Minimizes directory lookups and SSH_FXP_STATUS requests for speed.
     *
     * @param string $path
     * @param int $i
     * @return bool
     */
    private function delete_recursive($path, &$i)
    {
        if (!$this->read_put_responses($i)) {
            return false;
        }
        $i = 0;
        $entries = $this->readlist($path, true);

        // The folder does not exist at all, so we cannot delete it.
        if ($entries === NET_SFTP_STATUS_NO_SUCH_FILE) {
            return false;
        }

        // Normally $entries would have at least . and .. but it might not if the directories
        // permissions didn't allow reading. If this happens then default to an empty list of files.
        if ($entries === false || is_int($entries)) {
            $entries = [];
        }

        unset($entries['.'], $entries['..']);
        foreach ($entries as $filename => $props) {
            if (!isset($props['type'])) {
                return false;
            }

            $temp = $path . '/' . $filename;
            if ($props['type'] == NET_SFTP_TYPE_DIRECTORY) {
                if (!$this->delete_recursive($temp, $i)) {
                    return false;
                }
            } else {
                $this->send_sftp_packet(NET_SFTP_REMOVE, Strings::packSSH2('s', $temp));
                $this->remove_from_stat_cache($temp);

                $i++;

                if ($i >= NET_SFTP_QUEUE_SIZE) {
                    if (!$this->read_put_responses($i)) {
                        return false;
                    }
                    $i = 0;
                }
            }
        }

        $this->send_sftp_packet(NET_SFTP_RMDIR, Strings::packSSH2('s', $path));
        $this->remove_from_stat_cache($path);

        $i++;

        if ($i >= NET_SFTP_QUEUE_SIZE) {
            if (!$this->read_put_responses($i)) {
                return false;
            }
            $i = 0;
        }

        return true;
    }

    /**
     * Checks whether a file or directory exists
     *
     * @param string $path
     * @return bool
     */
    public function file_exists($path)
    {
        if ($this->use_stat_cache) {
            if (!$this->precheck()) {
                return false;
            }

            $path = $this->realpath($path);

            $result = $this->query_stat_cache($path);

            if (isset($result)) {
                // return true if $result is an array or if it's an stdClass object
                return $result !== false;
            }
        }

        return $this->stat($path) !== false;
    }

    /**
     * Tells whether the filename is a directory
     *
     * @param string $path
     * @return bool
     */
    public function is_dir($path)
    {
        $result = $this->get_stat_cache_prop($path, 'type');
        if ($result === false) {
            return false;
        }
        return $result === NET_SFTP_TYPE_DIRECTORY;
    }

    /**
     * Tells whether the filename is a regular file
     *
     * @param string $path
     * @return bool
     */
    public function is_file($path)
    {
        $result = $this->get_stat_cache_prop($path, 'type');
        if ($result === false) {
            return false;
        }
        return $result === NET_SFTP_TYPE_REGULAR;
    }

    /**
     * Tells whether the filename is a symbolic link
     *
     * @param string $path
     * @return bool
     */
    public function is_link($path)
    {
        $result = $this->get_lstat_cache_prop($path, 'type');
        if ($result === false) {
            return false;
        }
        return $result === NET_SFTP_TYPE_SYMLINK;
    }

    /**
     * Tells whether a file exists and is readable
     *
     * @param string $path
     * @return bool
     */
    public function is_readable($path)
    {
        if (!$this->precheck()) {
            return false;
        }

        $packet = Strings::packSSH2('sNN', $this->realpath($path), NET_SFTP_OPEN_READ, 0);
        $this->send_sftp_packet(NET_SFTP_OPEN, $packet);

        $response = $this->get_sftp_packet();
        switch ($this->packet_type) {
            case NET_SFTP_HANDLE:
                return true;
            case NET_SFTP_STATUS: // presumably SSH_FX_NO_SUCH_FILE or SSH_FX_PERMISSION_DENIED
                return false;
            default:
                throw new \UnexpectedValueException('Expected NET_SFTP_HANDLE or NET_SFTP_STATUS. '
                                                  . 'Got packet type: ' . $this->packet_type);
        }
    }

    /**
     * Tells whether the filename is writable
     *
     * @param string $path
     * @return bool
     */
    public function is_writable($path)
    {
        if (!$this->precheck()) {
            return false;
        }

        $packet = Strings::packSSH2('sNN', $this->realpath($path), NET_SFTP_OPEN_WRITE, 0);
        $this->send_sftp_packet(NET_SFTP_OPEN, $packet);

        $response = $this->get_sftp_packet();
        switch ($this->packet_type) {
            case NET_SFTP_HANDLE:
                return true;
            case NET_SFTP_STATUS: // presumably SSH_FX_NO_SUCH_FILE or SSH_FX_PERMISSION_DENIED
                return false;
            default:
                throw new \UnexpectedValueException('Expected SSH_FXP_HANDLE or SSH_FXP_STATUS. '
                                                  . 'Got packet type: ' . $this->packet_type);
        }
    }

    /**
     * Tells whether the filename is writeable
     *
     * Alias of is_writable
     *
     * @param string $path
     * @return bool
     */
    public function is_writeable($path)
    {
        return $this->is_writable($path);
    }

    /**
     * Gets last access time of file
     *
     * @param string $path
     * @return mixed
     */
    public function fileatime($path)
    {
        return $this->get_stat_cache_prop($path, 'atime');
    }

    /**
     * Gets file modification time
     *
     * @param string $path
     * @return mixed
     */
    public function filemtime($path)
    {
        return $this->get_stat_cache_prop($path, 'mtime');
    }

    /**
     * Gets file permissions
     *
     * @param string $path
     * @return mixed
     */
    public function fileperms($path)
    {
        return $this->get_stat_cache_prop($path, 'mode');
    }

    /**
     * Gets file owner
     *
     * @param string $path
     * @return mixed
     */
    public function fileowner($path)
    {
        return $this->get_stat_cache_prop($path, 'uid');
    }

    /**
     * Gets file group
     *
     * @param string $path
     * @return mixed
     */
    public function filegroup($path)
    {
        return $this->get_stat_cache_prop($path, 'gid');
    }

    /**
     * Recursively go through rawlist() output to get the total filesize
     *
     * @return int
     */
    private static function recursiveFilesize(array $files)
    {
        $size = 0;
        foreach ($files as $name => $file) {
            if ($name == '.' || $name == '..') {
                continue;
            }
            $size += is_array($file) ?
                self::recursiveFilesize($file) :
                $file->size;
        }
        return $size;
    }

    /**
     * Gets file size
     *
     * @param string $path
     * @param bool $recursive
     * @return mixed
     */
    public function filesize($path, $recursive = false)
    {
        return !$recursive || $this->filetype($path) != 'dir' ?
            $this->get_stat_cache_prop($path, 'size') :
            self::recursiveFilesize($this->rawlist($path, true));
    }

    /**
     * Gets file type
     *
     * @param string $path
     * @return string|false
     */
    public function filetype($path)
    {
        $type = $this->get_stat_cache_prop($path, 'type');
        if ($type === false) {
            return false;
        }

        switch ($type) {
            case NET_SFTP_TYPE_BLOCK_DEVICE:
                return 'block';
            case NET_SFTP_TYPE_CHAR_DEVICE:
                return 'char';
            case NET_SFTP_TYPE_DIRECTORY:
                return 'dir';
            case NET_SFTP_TYPE_FIFO:
                return 'fifo';
            case NET_SFTP_TYPE_REGULAR:
                return 'file';
            case NET_SFTP_TYPE_SYMLINK:
                return 'link';
            default:
                return false;
        }
    }

    /**
     * Return a stat properity
     *
     * Uses cache if appropriate.
     *
     * @param string $path
     * @param string $prop
     * @return mixed
     */
    private function get_stat_cache_prop($path, $prop)
    {
        return $this->get_xstat_cache_prop($path, $prop, 'stat');
    }

    /**
     * Return an lstat properity
     *
     * Uses cache if appropriate.
     *
     * @param string $path
     * @param string $prop
     * @return mixed
     */
    private function get_lstat_cache_prop($path, $prop)
    {
        return $this->get_xstat_cache_prop($path, $prop, 'lstat');
    }

    /**
     * Return a stat or lstat properity
     *
     * Uses cache if appropriate.
     *
     * @param string $path
     * @param string $prop
     * @param string $type
     * @return mixed
     */
    private function get_xstat_cache_prop($path, $prop, $type)
    {
        if (!$this->precheck()) {
            return false;
        }

        if ($this->use_stat_cache) {
            $path = $this->realpath($path);

            $result = $this->query_stat_cache($path);

            if (is_object($result) && isset($result->$type)) {
                return $result->{$type}[$prop];
            }
        }

        $result = $this->$type($path);

        if ($result === false || !isset($result[$prop])) {
            return false;
        }

        return $result[$prop];
    }

    /**
     * Renames a file or a directory on the SFTP server.
     *
     * If the file already exists this will return false
     *
     * @param string $oldname
     * @param string $newname
     * @return bool
     * @throws \UnexpectedValueException on receipt of unexpected packets
     */
    public function rename($oldname, $newname)
    {
        if (!$this->precheck()) {
            return false;
        }

        $oldname = $this->realpath($oldname);
        $newname = $this->realpath($newname);
        if ($oldname === false || $newname === false) {
            return false;
        }

        // http://tools.ietf.org/html/draft-ietf-secsh-filexfer-13#section-8.3
        $packet = Strings::packSSH2('ss', $oldname, $newname);
        if ($this->version >= 5) {
            /* quoting https://datatracker.ietf.org/doc/html/draft-ietf-secsh-filexfer-05#section-6.5 ,

               'flags' is 0 or a combination of:

                   SSH_FXP_RENAME_OVERWRITE  0x00000001
                   SSH_FXP_RENAME_ATOMIC     0x00000002
                   SSH_FXP_RENAME_NATIVE     0x00000004

               (none of these are currently supported) */
            $packet .= "\0\0\0\0";
        }
        $this->send_sftp_packet(NET_SFTP_RENAME, $packet);

        $response = $this->get_sftp_packet();
        if ($this->packet_type != NET_SFTP_STATUS) {
            throw new \UnexpectedValueException('Expected NET_SFTP_STATUS. '
                                              . 'Got packet type: ' . $this->packet_type);
        }

        // if $status isn't SSH_FX_OK it's probably SSH_FX_NO_SUCH_FILE or SSH_FX_PERMISSION_DENIED
        list($status) = Strings::unpackSSH2('N', $response);
        if ($status != NET_SFTP_STATUS_OK) {
            $this->logError($response, $status);
            return false;
        }

        // don't move the stat cache entry over since this operation could very well change the
        // atime and mtime attributes
        //$this->update_stat_cache($newname, $this->query_stat_cache($oldname));
        $this->remove_from_stat_cache($oldname);
        $this->remove_from_stat_cache($newname);

        return true;
    }

    /**
     * Parse Time
     *
     * See '7.7.  Times' of draft-ietf-secsh-filexfer-13 for more info.
     *
     * @param string $key
     * @param int $flags
     * @param string $response
     * @return array
     */
    private function parseTime($key, $flags, &$response)
    {
        $attr = [];
        list($attr[$key]) = Strings::unpackSSH2('Q', $response);
        if ($flags & NET_SFTP_ATTR_SUBSECOND_TIMES) {
            list($attr[$key . '-nseconds']) = Strings::unpackSSH2('N', $response);
        }
        return $attr;
    }

    /**
     * Parse Attributes
     *
     * See '7.  File Attributes' of draft-ietf-secsh-filexfer-13 for more info.
     *
     * @param string $response
     * @return array
     */
    protected function parseAttributes(&$response)
    {
        $attr = [];

        if ($this->version >= 4) {
            list($flags, $attr['type']) = Strings::unpackSSH2('NC', $response);
        } else {
            list($flags) = Strings::unpackSSH2('N', $response);
        }

        foreach (self::$attributes as $key => $value) {
            switch ($flags & $key) {
                case NET_SFTP_ATTR_UIDGID:
                    if ($this->version > 3) {
                        continue 2;
                    }
                    break;
                case NET_SFTP_ATTR_CREATETIME:
                case NET_SFTP_ATTR_MODIFYTIME:
                case NET_SFTP_ATTR_ACL:
                case NET_SFTP_ATTR_OWNERGROUP:
                case NET_SFTP_ATTR_SUBSECOND_TIMES:
                    if ($this->version < 4) {
                        continue 2;
                    }
                    break;
                case NET_SFTP_ATTR_BITS:
                    if ($this->version < 5) {
                        continue 2;
                    }
                    break;
                case NET_SFTP_ATTR_ALLOCATION_SIZE:
                case NET_SFTP_ATTR_TEXT_HINT:
                case NET_SFTP_ATTR_MIME_TYPE:
                case NET_SFTP_ATTR_LINK_COUNT:
                case NET_SFTP_ATTR_UNTRANSLATED_NAME:
                case NET_SFTP_ATTR_CTIME:
                    if ($this->version < 6) {
                        continue 2;
                    }
            }
            switch ($flags & $key) {
                case NET_SFTP_ATTR_SIZE:             // 0x00000001
                    // The size attribute is defined as an unsigned 64-bit integer.
                    // The following will use floats on 32-bit platforms, if necessary.
                    // As can be seen in the BigInteger class, floats are generally
                    // IEEE 754 binary64 "double precision" on such platforms and
                    // as such can represent integers of at least 2^50 without loss
                    // of precision. Interpreted in filesize, 2^50 bytes = 1024 TiB.
                    list($attr['size']) = Strings::unpackSSH2('Q', $response);
                    break;
                case NET_SFTP_ATTR_UIDGID: // 0x00000002 (SFTPv3 only)
                    list($attr['uid'], $attr['gid']) = Strings::unpackSSH2('NN', $response);
                    break;
                case NET_SFTP_ATTR_PERMISSIONS: // 0x00000004
                    list($attr['mode']) = Strings::unpackSSH2('N', $response);
                    $fileType = $this->parseMode($attr['mode']);
                    if ($this->version < 4 && $fileType !== false) {
                        $attr += ['type' => $fileType];
                    }
                    break;
                case NET_SFTP_ATTR_ACCESSTIME: // 0x00000008
                    if ($this->version >= 4) {
                        $attr += $this->parseTime('atime', $flags, $response);
                        break;
                    }
                    list($attr['atime'], $attr['mtime']) = Strings::unpackSSH2('NN', $response);
                    break;
                case NET_SFTP_ATTR_CREATETIME:       // 0x00000010 (SFTPv4+)
                    $attr += $this->parseTime('createtime', $flags, $response);
                    break;
                case NET_SFTP_ATTR_MODIFYTIME:       // 0x00000020
                    $attr += $this->parseTime('mtime', $flags, $response);
                    break;
                case NET_SFTP_ATTR_ACL:              // 0x00000040
                    // access control list
                    // see https://datatracker.ietf.org/doc/html/draft-ietf-secsh-filexfer-04#section-5.7
                    // currently unsupported
                    list($count) = Strings::unpackSSH2('N', $response);
                    for ($i = 0; $i < $count; $i++) {
                        list($type, $flag, $mask, $who) = Strings::unpackSSH2('N3s', $result);
                    }
                    break;
                case NET_SFTP_ATTR_OWNERGROUP:       // 0x00000080
                    list($attr['owner'], $attr['$group']) = Strings::unpackSSH2('ss', $response);
                    break;
                case NET_SFTP_ATTR_SUBSECOND_TIMES:  // 0x00000100
                    break;
                case NET_SFTP_ATTR_BITS:             // 0x00000200 (SFTPv5+)
                    // see https://datatracker.ietf.org/doc/html/draft-ietf-secsh-filexfer-05#section-5.8
                    // currently unsupported
                    // tells if you file is:
                    // readonly, system, hidden, case inensitive, archive, encrypted, compressed, sparse
                    // append only, immutable, sync
                    list($attrib_bits, $attrib_bits_valid) = Strings::unpackSSH2('N2', $response);
                    // if we were actually gonna implement the above it ought to be
                    // $attr['attrib-bits'] and $attr['attrib-bits-valid']
                    // eg. - instead of _
                    break;
                case NET_SFTP_ATTR_ALLOCATION_SIZE:  // 0x00000400 (SFTPv6+)
                    // see https://datatracker.ietf.org/doc/html/draft-ietf-secsh-filexfer-13#section-7.4
                    // represents the number of bytes that the file consumes on the disk. will
                    // usually be larger than the 'size' field
                    list($attr['allocation-size']) = Strings::unpackSSH2('Q', $response);
                    break;
                case NET_SFTP_ATTR_TEXT_HINT:        // 0x00000800
                    // https://datatracker.ietf.org/doc/html/draft-ietf-secsh-filexfer-13#section-7.10
                    // currently unsupported
                    // tells if file is "known text", "guessed text", "known binary", "guessed binary"
                    list($text_hint) = Strings::unpackSSH2('C', $response);
                    // the above should be $attr['text-hint']
                    break;
                case NET_SFTP_ATTR_MIME_TYPE:        // 0x00001000
                    // see https://datatracker.ietf.org/doc/html/draft-ietf-secsh-filexfer-13#section-7.11
                    list($attr['mime-type']) = Strings::unpackSSH2('s', $response);
                    break;
                case NET_SFTP_ATTR_LINK_COUNT:       // 0x00002000
                    // see https://datatracker.ietf.org/doc/html/draft-ietf-secsh-filexfer-13#section-7.12
                    list($attr['link-count']) = Strings::unpackSSH2('N', $response);
                    break;
                case NET_SFTP_ATTR_UNTRANSLATED_NAME:// 0x00004000
                    // see https://datatracker.ietf.org/doc/html/draft-ietf-secsh-filexfer-13#section-7.13
                    list($attr['untranslated-name']) = Strings::unpackSSH2('s', $response);
                    break;
                case NET_SFTP_ATTR_CTIME:            // 0x00008000
                    // 'ctime' contains the last time the file attributes were changed.  The
                    // exact meaning of this field depends on the server.
                    $attr += $this->parseTime('ctime', $flags, $response);
                    break;
                case NET_SFTP_ATTR_EXTENDED: // 0x80000000
                    list($count) = Strings::unpackSSH2('N', $response);
                    for ($i = 0; $i < $count; $i++) {
                        list($key, $value) = Strings::unpackSSH2('ss', $response);
                        $attr[$key] = $value;
                    }
            }
        }
        return $attr;
    }

    /**
     * Attempt to identify the file type
     *
     * Quoting the SFTP RFC, "Implementations MUST NOT send bits that are not defined" but they seem to anyway
     *
     * @param int $mode
     * @return int
     */
    private function parseMode($mode)
    {
        // values come from http://lxr.free-electrons.com/source/include/uapi/linux/stat.h#L12
        // see, also, http://linux.die.net/man/2/stat
        switch ($mode & 0170000) {// ie. 1111 0000 0000 0000
            case 0000000: // no file type specified - figure out the file type using alternative means
                return false;
            case 0040000:
                return NET_SFTP_TYPE_DIRECTORY;
            case 0100000:
                return NET_SFTP_TYPE_REGULAR;
            case 0120000:
                return NET_SFTP_TYPE_SYMLINK;
            // new types introduced in SFTPv5+
            // http://tools.ietf.org/html/draft-ietf-secsh-filexfer-05#section-5.2
            case 0010000: // named pipe (fifo)
                return NET_SFTP_TYPE_FIFO;
            case 0020000: // character special
                return NET_SFTP_TYPE_CHAR_DEVICE;
            case 0060000: // block special
                return NET_SFTP_TYPE_BLOCK_DEVICE;
            case 0140000: // socket
                return NET_SFTP_TYPE_SOCKET;
            case 0160000: // whiteout
                // "SPECIAL should be used for files that are of
                //  a known type which cannot be expressed in the protocol"
                return NET_SFTP_TYPE_SPECIAL;
            default:
                return NET_SFTP_TYPE_UNKNOWN;
        }
    }

    /**
     * Parse Longname
     *
     * SFTPv3 doesn't provide any easy way of identifying a file type.  You could try to open
     * a file as a directory and see if an error is returned or you could try to parse the
     * SFTPv3-specific longname field of the SSH_FXP_NAME packet.  That's what this function does.
     * The result is returned using the
     * {@link http://tools.ietf.org/html/draft-ietf-secsh-filexfer-04#section-5.2 SFTPv4 type constants}.
     *
     * If the longname is in an unrecognized format bool(false) is returned.
     *
     * @param string $longname
     * @return mixed
     */
    private function parseLongname($longname)
    {
        // http://en.wikipedia.org/wiki/Unix_file_types
        // http://en.wikipedia.org/wiki/Filesystem_permissions#Notation_of_traditional_Unix_permissions
        if (preg_match('#^[^/]([r-][w-][xstST-]){3}#', $longname)) {
            switch ($longname[0]) {
                case '-':
                    return NET_SFTP_TYPE_REGULAR;
                case 'd':
                    return NET_SFTP_TYPE_DIRECTORY;
                case 'l':
                    return NET_SFTP_TYPE_SYMLINK;
                default:
                    return NET_SFTP_TYPE_SPECIAL;
            }
        }

        return false;
    }

    /**
     * Sends SFTP Packets
     *
     * See '6. General Packet Format' of draft-ietf-secsh-filexfer-13 for more info.
     *
     * @param int $type
     * @param string $data
     * @param int $request_id
     * @see self::_get_sftp_packet()
     * @see self::send_channel_packet()
     * @return void
     */
    private function send_sftp_packet($type, $data, $request_id = 1)
    {
        // in SSH2.php the timeout is cumulative per function call. eg. exec() will
        // timeout after 10s. but for SFTP.php it's cumulative per packet
        $this->curTimeout = $this->timeout;
        $this->is_timeout = false;

        $packet = $this->use_request_id ?
            pack('NCNa*', strlen($data) + 5, $type, $request_id, $data) :
            pack('NCa*', strlen($data) + 1, $type, $data);

        $start = microtime(true);
        $this->send_channel_packet(self::CHANNEL, $packet);
        $stop = microtime(true);

        if (defined('NET_SFTP_LOGGING')) {
            $packet_type = '-> ' . self::$packet_types[$type] .
                           ' (' . round($stop - $start, 4) . 's)';
            $this->append_log($packet_type, $data);
        }
    }

    /**
     * Resets the SFTP channel for re-use
     */
    private function reset_sftp()
    {
        $this->use_request_id = false;
        $this->pwd = false;
        $this->requestBuffer = [];
        $this->partial_init = false;
    }

    /**
     * Resets a connection for re-use
     */
    protected function reset_connection()
    {
        parent::reset_connection();
        $this->reset_sftp();
    }

    /**
     * Receives SFTP Packets
     *
     * See '6. General Packet Format' of draft-ietf-secsh-filexfer-13 for more info.
     *
     * Incidentally, the number of SSH_MSG_CHANNEL_DATA messages has no bearing on the number of SFTP packets present.
     * There can be one SSH_MSG_CHANNEL_DATA messages containing two SFTP packets or there can be two SSH_MSG_CHANNEL_DATA
     * messages containing one SFTP packet.
     *
     * @see self::_send_sftp_packet()
     * @return string
     */
    private function get_sftp_packet($request_id = null)
    {
        $this->channel_close = false;

        if (isset($request_id) && isset($this->requestBuffer[$request_id])) {
            $this->packet_type = $this->requestBuffer[$request_id]['packet_type'];
            $temp = $this->requestBuffer[$request_id]['packet'];
            unset($this->requestBuffer[$request_id]);
            return $temp;
        }

        // in SSH2.php the timeout is cumulative per function call. eg. exec() will
        // timeout after 10s. but for SFTP.php it's cumulative per packet
        $this->curTimeout = $this->timeout;
        $this->is_timeout = false;

        $start = microtime(true);

        // SFTP packet length
        while (strlen($this->packet_buffer) < 4) {
            $temp = $this->get_channel_packet(self::CHANNEL, true);
            if ($temp === true) {
                if ($this->channel_status[self::CHANNEL] === NET_SSH2_MSG_CHANNEL_CLOSE) {
                    $this->channel_close = true;
                }
                $this->packet_type = false;
                $this->packet_buffer = '';
                return false;
            }
            $this->packet_buffer .= $temp;
        }
        if (strlen($this->packet_buffer) < 4) {
            throw new \RuntimeException('Packet is too small');
        }
        $length = unpack('Nlength', Strings::shift($this->packet_buffer, 4))['length'];

        $tempLength = $length;
        $tempLength -= strlen($this->packet_buffer);

        // 256 * 1024 is what SFTP_MAX_MSG_LENGTH is set to in OpenSSH's sftp-common.h
        if (!$this->allow_arbitrary_length_packets && !$this->use_request_id && $tempLength > 256 * 1024) {
            throw new \RuntimeException('Invalid Size');
        }

        // SFTP packet type and data payload
        while ($tempLength > 0) {
            $temp = $this->get_channel_packet(self::CHANNEL, true);
            if ($temp === true) {
                if ($this->channel_status[self::CHANNEL] === NET_SSH2_MSG_CHANNEL_CLOSE) {
                    $this->channel_close = true;
                }
                $this->packet_type = false;
                $this->packet_buffer = '';
                return false;
            }
            $this->packet_buffer .= $temp;
            $tempLength -= strlen($temp);
        }

        $stop = microtime(true);

        $this->packet_type = ord(Strings::shift($this->packet_buffer));

        if ($this->use_request_id) {
            $packet_id = unpack('Npacket_id', Strings::shift($this->packet_buffer, 4))['packet_id']; // remove the request id
            $length -= 5; // account for the request id and the packet type
        } else {
            $length -= 1; // account for the packet type
        }

        $packet = Strings::shift($this->packet_buffer, $length);

        if (defined('NET_SFTP_LOGGING')) {
            $packet_type = '<- ' . self::$packet_types[$this->packet_type] .
                           ' (' . round($stop - $start, 4) . 's)';
            $this->append_log($packet_type, $packet);
        }

        if (isset($request_id) && $this->use_request_id && $packet_id != $request_id) {
            $this->requestBuffer[$packet_id] = [
                'packet_type' => $this->packet_type,
                'packet' => $packet
            ];
            return $this->get_sftp_packet($request_id);
        }

        return $packet;
    }

    /**
     * Logs data packets
     *
     * Makes sure that only the last 1MB worth of packets will be logged
     *
     * @param string $message_number
     * @param string $message
     */
    private function append_log($message_number, $message)
    {
        $this->append_log_helper(
            NET_SFTP_LOGGING,
            $message_number,
            $message,
            $this->packet_type_log,
            $this->packet_log,
            $this->log_size,
            $this->realtime_log_file,
            $this->realtime_log_wrap,
            $this->realtime_log_size
        );
    }

    /**
     * Returns a log of the packets that have been sent and received.
     *
     * Returns a string if NET_SFTP_LOGGING == self::LOG_COMPLEX, an array if NET_SFTP_LOGGING == self::LOG_SIMPLE and false if !defined('NET_SFTP_LOGGING')
     *
     * @return array|string|false
     */
    public function getSFTPLog()
    {
        if (!defined('NET_SFTP_LOGGING')) {
            return false;
        }

        switch (NET_SFTP_LOGGING) {
            case self::LOG_COMPLEX:
                return $this->format_log($this->packet_log, $this->packet_type_log);
                break;
            //case self::LOG_SIMPLE:
            default:
                return $this->packet_type_log;
        }
    }

    /**
     * Returns all errors on the SFTP layer
     *
     * @return array
     */
    public function getSFTPErrors()
    {
        return $this->sftp_errors;
    }

    /**
     * Returns the last error on the SFTP layer
     *
     * @return string
     */
    public function getLastSFTPError()
    {
        return count($this->sftp_errors) ? $this->sftp_errors[count($this->sftp_errors) - 1] : '';
    }

    /**
     * Get supported SFTP versions
     *
     * @return array
     */
    public function getSupportedVersions()
    {
        if (!($this->bitmap & SSH2::MASK_LOGIN)) {
            return false;
        }

        if (!$this->partial_init) {
            $this->partial_init_sftp_connection();
        }

        $temp = ['version' => $this->defaultVersion];
        if (isset($this->extensions['versions'])) {
            $temp['extensions'] = $this->extensions['versions'];
        }
        return $temp;
    }

    /**
     * Get supported SFTP extensions
     *
     * @return array
     */
    public function getSupportedExtensions()
    {
        if (!($this->bitmap & SSH2::MASK_LOGIN)) {
            return false;
        }

        if (!$this->partial_init) {
            $this->partial_init_sftp_connection();
        }

        return $this->extensions;
    }

    /**
     * Get supported SFTP versions
     *
     * @return int|false
     */
    public function getNegotiatedVersion()
    {
        if (!$this->precheck()) {
            return false;
        }

        return $this->version;
    }

    /**
     * Set preferred version
     *
     * If you're preferred version isn't supported then the highest supported
     * version of SFTP will be utilized. Set to null or false or int(0) to
     * unset the preferred version
     *
     * @param int $version
     */
    public function setPreferredVersion($version)
    {
        $this->preferredVersion = $version;
    }

    /**
     * Disconnect
     *
     * @param int $reason
     * @return false
     */
    protected function disconnect_helper($reason)
    {
        $this->pwd = false;
        return parent::disconnect_helper($reason);
    }

    /**
     * Enable Date Preservation
     */
    public function enableDatePreservation()
    {
        $this->preserveTime = true;
    }

    /**
     * Disable Date Preservation
     */
    public function disableDatePreservation()
    {
        $this->preserveTime = false;
    }

    /**
     * Copy
     *
     * This method (currently) only works if the copy-data extension is available
     *
     * @param string $oldname
     * @param string $newname
     * @return bool
     */
    public function copy($oldname, $newname)
    {
        if (!$this->precheck()) {
            return false;
        }

        $oldname = $this->realpath($oldname);
        $newname = $this->realpath($newname);
        if ($oldname === false || $newname === false) {
            return false;
        }

        if (!isset($this->extensions['copy-data']) || $this->extensions['copy-data'] !== '1') {
            throw new \RuntimeException(
                "Extension 'copy-data' is not supported by the server. " .
                "Call getSupportedVersions() to see a list of supported extension"
            );
        }

        $size = $this->filesize($oldname);

        $packet = Strings::packSSH2('s', $oldname);
        $packet .= $this->version >= 5 ?
            pack('N3', 0, NET_SFTP_OPEN_OPEN_EXISTING, 0) :
            pack('N2', NET_SFTP_OPEN_READ, 0);
        $this->send_sftp_packet(NET_SFTP_OPEN, $packet);

        $response = $this->get_sftp_packet();
        switch ($this->packet_type) {
            case NET_SFTP_HANDLE:
                $oldhandle = substr($response, 4);
                break;
            case NET_SFTP_STATUS: // presumably SSH_FX_NO_SUCH_FILE or SSH_FX_PERMISSION_DENIED
                $this->logError($response);
                return false;
            default:
                throw new \UnexpectedValueException('Expected NET_SFTP_HANDLE or NET_SFTP_STATUS. '
                                                  . 'Got packet type: ' . $this->packet_type);
        }

        if ($this->version >= 5) {
            $flags = NET_SFTP_OPEN_OPEN_OR_CREATE;
        } else {
            $flags = NET_SFTP_OPEN_WRITE | NET_SFTP_OPEN_CREATE;
        }

        $packet = Strings::packSSH2('s', $newname);
        $packet .= $this->version >= 5 ?
            pack('N3', 0, $flags, 0) :
            pack('N2', $flags, 0);
        $this->send_sftp_packet(NET_SFTP_OPEN, $packet);

        $response = $this->get_sftp_packet();
        switch ($this->packet_type) {
            case NET_SFTP_HANDLE:
                $newhandle = substr($response, 4);
                break;
            case NET_SFTP_STATUS:
                $this->logError($response);
                return false;
            default:
                throw new \UnexpectedValueException('Expected NET_SFTP_HANDLE or NET_SFTP_STATUS. '
                                                  . 'Got packet type: ' . $this->packet_type);
        }

        $packet = Strings::packSSH2('ssQQsQ', 'copy-data', $oldhandle, 0, $size, $newhandle, 0);
        $this->send_sftp_packet(NET_SFTP_EXTENDED, $packet);

        $response = $this->get_sftp_packet();
        if ($this->packet_type != NET_SFTP_STATUS) {
            throw new \UnexpectedValueException('Expected NET_SFTP_STATUS. '
                                              . 'Got packet type: ' . $this->packet_type);
        }

        $this->close_handle($oldhandle);
        $this->close_handle($newhandle);

        return true;
    }

    /**
     * POSIX Rename
     *
     * Where rename() fails "if there already exists a file with the name specified by newpath"
     * (draft-ietf-secsh-filexfer-02#section-6.5), posix_rename() overwrites the existing file in an atomic fashion.
     * ie. "there is no observable instant in time where the name does not refer to either the old or the new file"
     * (draft-ietf-secsh-filexfer-13#page-39).
     *
     * @param string $oldname
     * @param string $newname
     * @return bool
     */
    public function posix_rename($oldname, $newname)
    {
        if (!$this->precheck()) {
            return false;
        }

        $oldname = $this->realpath($oldname);
        $newname = $this->realpath($newname);
        if ($oldname === false || $newname === false) {
            return false;
        }

        if ($this->version >= 5) {
            $packet = Strings::packSSH2('ssN', $oldname, $newname, 2); // 2 = SSH_FXP_RENAME_ATOMIC
            $this->send_sftp_packet(NET_SFTP_RENAME, $packet);
        } elseif (isset($this->extensions['posix-rename@openssh.com']) && $this->extensions['posix-rename@openssh.com'] === '1') {
            $packet = Strings::packSSH2('sss', 'posix-rename@openssh.com', $oldname, $newname);
            $this->send_sftp_packet(NET_SFTP_EXTENDED, $packet);
        } else {
            throw new \RuntimeException(
                "Extension 'posix-rename@openssh.com' is not supported by the server. " .
                "Call getSupportedVersions() to see a list of supported extension"
            );
        }

        $response = $this->get_sftp_packet();
        if ($this->packet_type != NET_SFTP_STATUS) {
            throw new \UnexpectedValueException('Expected NET_SFTP_STATUS. '
                                              . 'Got packet type: ' . $this->packet_type);
        }

        // if $status isn't SSH_FX_OK it's probably SSH_FX_NO_SUCH_FILE or SSH_FX_PERMISSION_DENIED
        list($status) = Strings::unpackSSH2('N', $response);
        if ($status != NET_SFTP_STATUS_OK) {
            $this->logError($response, $status);
            return false;
        }

        // don't move the stat cache entry over since this operation could very well change the
        // atime and mtime attributes
        //$this->update_stat_cache($newname, $this->query_stat_cache($oldname));
        $this->remove_from_stat_cache($oldname);
        $this->remove_from_stat_cache($newname);

        return true;
    }

    /**
     * Returns general information about a file system.
     *
     * The function statvfs() returns information about a mounted filesystem.
     * @see https://man7.org/linux/man-pages/man3/statvfs.3.html
     *
     * @param string $path
     * @return false|array{bsize: int, frsize: int, blocks: int, bfree: int, bavail: int, files: int, ffree: int, favail: int, fsid: int, flag: int, namemax: int}
     */
    public function statvfs($path)
    {
        if (!$this->precheck()) {
            return false;
        }

        if (!isset($this->extensions['statvfs@openssh.com']) || $this->extensions['statvfs@openssh.com'] !== '2') {
            throw new \RuntimeException(
                "Extension 'statvfs@openssh.com' is not supported by the server. " .
                "Call getSupportedVersions() to see a list of supported extension"
            );
        }

        $realpath = $this->realpath($path);
        if ($realpath === false) {
            return false;
        }

        $packet = Strings::packSSH2('ss', 'statvfs@openssh.com', $realpath);
        $this->send_sftp_packet(NET_SFTP_EXTENDED, $packet);

        $response = $this->get_sftp_packet();
        if ($this->packet_type !== NET_SFTP_EXTENDED_REPLY) {
            throw new \UnexpectedValueException(
                'Expected SSH_FXP_EXTENDED_REPLY. '
                . 'Got packet type: ' . $this->packet_type
            );
        }

        /**
         * These requests return a SSH_FXP_STATUS reply on failure. On success they
         * return the following SSH_FXP_EXTENDED_REPLY reply:
         *
         * uint32        id
         * uint64        f_bsize     file system block size
         * uint64        f_frsize     fundamental fs block size
         * uint64        f_blocks     number of blocks (unit f_frsize)
         * uint64        f_bfree      free blocks in file system
         * uint64        f_bavail     free blocks for non-root
         * uint64        f_files      total file inodes
         * uint64        f_ffree      free file inodes
         * uint64        f_favail     free file inodes for to non-root
         * uint64        f_fsid       file system id
         * uint64        f_flag       bit mask of f_flag values
         * uint64        f_namemax    maximum filename length
         */
        return array_combine(
            ['bsize', 'frsize', 'blocks', 'bfree', 'bavail', 'files', 'ffree', 'favail', 'fsid', 'flag', 'namemax'],
            Strings::unpackSSH2('QQQQQQQQQQQ', $response)
        );
    }
}
<?php

/**
 * SFTP Stream Wrapper
 *
 * Creates an sftp:// protocol handler that can be used with, for example, fopen(), dir(), etc.
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2013 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\Net\SFTP;

use phpseclib3\Crypt\Common\PrivateKey;
use phpseclib3\Net\SFTP;
use phpseclib3\Net\SSH2;

/**
 * SFTP Stream Wrapper
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
class Stream
{
    /**
     * SFTP instances
     *
     * Rather than re-create the connection we re-use instances if possible
     *
     * @var array
     */
    public static $instances;

    /**
     * SFTP instance
     *
     * @var object
     */
    private $sftp;

    /**
     * Path
     *
     * @var string
     */
    private $path;

    /**
     * Mode
     *
     * @var string
     */
    private $mode;

    /**
     * Position
     *
     * @var int
     */
    private $pos;

    /**
     * Size
     *
     * @var int
     */
    private $size;

    /**
     * Directory entries
     *
     * @var array
     */
    private $entries;

    /**
     * EOF flag
     *
     * @var bool
     */
    private $eof;

    /**
     * Context resource
     *
     * Technically this needs to be publicly accessible so PHP can set it directly
     *
     * @var resource
     */
    public $context;

    /**
     * Notification callback function
     *
     * @var callable
     */
    private $notification;

    /**
     * Registers this class as a URL wrapper.
     *
     * @param string $protocol The wrapper name to be registered.
     * @return bool True on success, false otherwise.
     */
    public static function register($protocol = 'sftp')
    {
        if (in_array($protocol, stream_get_wrappers(), true)) {
            return false;
        }
        return stream_wrapper_register($protocol, get_called_class());
    }

    /**
     * The Constructor
     *
     */
    public function __construct()
    {
        if (defined('NET_SFTP_STREAM_LOGGING')) {
            echo "__construct()\r\n";
        }
    }

    /**
     * Path Parser
     *
     * Extract a path from a URI and actually connect to an SSH server if appropriate
     *
     * If "notification" is set as a context parameter the message code for successful login is
     * NET_SSH2_MSG_USERAUTH_SUCCESS. For a failed login it's NET_SSH2_MSG_USERAUTH_FAILURE.
     *
     * @param string $path
     * @return string
     */
    protected function parse_path($path)
    {
        $orig = $path;
        $url = parse_url($path) + ['port' => 22];

        $keys = ['scheme', 'host', 'port', 'user', 'pass', 'path', 'query', 'fragment'];
        foreach ($keys as $key) {
            if (isset($url[$key])) {
                $$key = $url[$key];
            }
        }

        if (isset($query)) {
            $path .= '?' . $query;
        } elseif (preg_match('/(\?|\?#)$/', $orig)) {
            $path .= '?';
        }
        if (isset($fragment)) {
            $path .= '#' . $fragment;
        } elseif ($orig[strlen($orig) - 1] == '#') {
            $path .= '#';
        }

        if (!isset($host)) {
            return false;
        }

        if (isset($this->context)) {
            $context = stream_context_get_params($this->context);
            if (isset($context['notification'])) {
                $this->notification = $context['notification'];
            }
        }

        if (preg_match('/^{[a-z0-9]+}$/i', $host)) {
            $host = SSH2::getConnectionByResourceId($host);
            if ($host === false) {
                return false;
            }
            $this->sftp = $host;
        } else {
            if (isset($this->context)) {
                $context = stream_context_get_options($this->context);
            }
            if (isset($context[$scheme]['session'])) {
                $sftp = $context[$scheme]['session'];
            }
            if (isset($context[$scheme]['sftp'])) {
                $sftp = $context[$scheme]['sftp'];
            }
            if (isset($sftp) && $sftp instanceof SFTP) {
                $this->sftp = $sftp;
                return $path;
            }
            if (isset($context[$scheme]['username'])) {
                $user = $context[$scheme]['username'];
            }
            if (isset($context[$scheme]['password'])) {
                $pass = $context[$scheme]['password'];
            }
            if (isset($context[$scheme]['privkey']) && $context[$scheme]['privkey'] instanceof PrivateKey) {
                $pass = $context[$scheme]['privkey'];
            }

            if (!isset($user) || !isset($pass)) {
                return false;
            }

            // casting $pass to a string is necessary in the event that it's a \phpseclib3\Crypt\RSA object
            if (isset(self::$instances[$host][$port][$user][(string) $pass])) {
                $this->sftp = self::$instances[$host][$port][$user][(string) $pass];
            } else {
                $this->sftp = new SFTP($host, $port);
                $this->sftp->disableStatCache();
                if (isset($this->notification) && is_callable($this->notification)) {
                    /* if !is_callable($this->notification) we could do this:

                       user_error('fopen(): failed to call user notifier', E_USER_WARNING);

                       the ftp wrapper gives errors like that when the notifier isn't callable.
                       i've opted not to do that, however, since the ftp wrapper gives the line
                       on which the fopen occurred as the line number - not the line that the
                       user_error is on.
                    */
                    call_user_func($this->notification, STREAM_NOTIFY_CONNECT, STREAM_NOTIFY_SEVERITY_INFO, '', 0, 0, 0);
                    call_user_func($this->notification, STREAM_NOTIFY_AUTH_REQUIRED, STREAM_NOTIFY_SEVERITY_INFO, '', 0, 0, 0);
                    if (!$this->sftp->login($user, $pass)) {
                        call_user_func($this->notification, STREAM_NOTIFY_AUTH_RESULT, STREAM_NOTIFY_SEVERITY_ERR, 'Login Failure', NET_SSH2_MSG_USERAUTH_FAILURE, 0, 0);
                        return false;
                    }
                    call_user_func($this->notification, STREAM_NOTIFY_AUTH_RESULT, STREAM_NOTIFY_SEVERITY_INFO, 'Login Success', NET_SSH2_MSG_USERAUTH_SUCCESS, 0, 0);
                } else {
                    if (!$this->sftp->login($user, $pass)) {
                        return false;
                    }
                }
                self::$instances[$host][$port][$user][(string) $pass] = $this->sftp;
            }
        }

        return $path;
    }

    /**
     * Opens file or URL
     *
     * @param string $path
     * @param string $mode
     * @param int $options
     * @param string $opened_path
     * @return bool
     */
    private function _stream_open($path, $mode, $options, &$opened_path)
    {
        $path = $this->parse_path($path);

        if ($path === false) {
            return false;
        }
        $this->path = $path;

        $this->size = $this->sftp->filesize($path);
        $this->mode = preg_replace('#[bt]$#', '', $mode);
        $this->eof = false;

        if ($this->size === false) {
            if ($this->mode[0] == 'r') {
                return false;
            } else {
                $this->sftp->touch($path);
                $this->size = 0;
            }
        } else {
            switch ($this->mode[0]) {
                case 'x':
                    return false;
                case 'w':
                    $this->sftp->truncate($path, 0);
                    $this->size = 0;
            }
        }

        $this->pos = $this->mode[0] != 'a' ? 0 : $this->size;

        return true;
    }

    /**
     * Read from stream
     *
     * @param int $count
     * @return mixed
     */
    private function _stream_read($count)
    {
        switch ($this->mode) {
            case 'w':
            case 'a':
            case 'x':
            case 'c':
                return false;
        }

        // commented out because some files - eg. /dev/urandom - will say their size is 0 when in fact it's kinda infinite
        //if ($this->pos >= $this->size) {
        //    $this->eof = true;
        //    return false;
        //}

        $result = $this->sftp->get($this->path, false, $this->pos, $count);
        if (isset($this->notification) && is_callable($this->notification)) {
            if ($result === false) {
                call_user_func($this->notification, STREAM_NOTIFY_FAILURE, STREAM_NOTIFY_SEVERITY_ERR, $this->sftp->getLastSFTPError(), NET_SFTP_OPEN, 0, 0);
                return 0;
            }
            // seems that PHP calls stream_read in 8k chunks
            call_user_func($this->notification, STREAM_NOTIFY_PROGRESS, STREAM_NOTIFY_SEVERITY_INFO, '', 0, strlen($result), $this->size);
        }

        if (empty($result)) { // ie. false or empty string
            $this->eof = true;
            return false;
        }
        $this->pos += strlen($result);

        return $result;
    }

    /**
     * Write to stream
     *
     * @param string $data
     * @return int|false
     */
    private function _stream_write($data)
    {
        switch ($this->mode) {
            case 'r':
                return false;
        }

        $result = $this->sftp->put($this->path, $data, SFTP::SOURCE_STRING, $this->pos);
        if (isset($this->notification) && is_callable($this->notification)) {
            if (!$result) {
                call_user_func($this->notification, STREAM_NOTIFY_FAILURE, STREAM_NOTIFY_SEVERITY_ERR, $this->sftp->getLastSFTPError(), NET_SFTP_OPEN, 0, 0);
                return 0;
            }
            // seems that PHP splits up strings into 8k blocks before calling stream_write
            call_user_func($this->notification, STREAM_NOTIFY_PROGRESS, STREAM_NOTIFY_SEVERITY_INFO, '', 0, strlen($data), strlen($data));
        }

        if ($result === false) {
            return false;
        }
        $this->pos += strlen($data);
        if ($this->pos > $this->size) {
            $this->size = $this->pos;
        }
        $this->eof = false;
        return strlen($data);
    }

    /**
     * Retrieve the current position of a stream
     *
     * @return int
     */
    private function _stream_tell()
    {
        return $this->pos;
    }

    /**
     * Tests for end-of-file on a file pointer
     *
     * In my testing there are four classes functions that normally effect the pointer:
     * fseek, fputs  / fwrite, fgets / fread and ftruncate.
     *
     * Only fgets / fread, however, results in feof() returning true. do fputs($fp, 'aaa') on a blank file and feof()
     * will return false. do fread($fp, 1) and feof() will then return true. do fseek($fp, 10) on ablank file and feof()
     * will return false. do fread($fp, 1) and feof() will then return true.
     *
     * @return bool
     */
    private function _stream_eof()
    {
        return $this->eof;
    }

    /**
     * Seeks to specific location in a stream
     *
     * @param int $offset
     * @param int $whence
     * @return bool
     */
    private function _stream_seek($offset, $whence)
    {
        switch ($whence) {
            case SEEK_SET:
                if ($offset < 0) {
                    return false;
                }
                break;
            case SEEK_CUR:
                $offset += $this->pos;
                break;
            case SEEK_END:
                $offset += $this->size;
        }

        $this->pos = $offset;
        $this->eof = false;
        return true;
    }

    /**
     * Change stream options
     *
     * @param string $path
     * @param int $option
     * @param mixed $var
     * @return bool
     */
    private function _stream_metadata($path, $option, $var)
    {
        $path = $this->parse_path($path);
        if ($path === false) {
            return false;
        }

        // stream_metadata was introduced in PHP 5.4.0 but as of 5.4.11 the constants haven't been defined
        // see http://www.php.net/streamwrapper.stream-metadata and https://bugs.php.net/64246
        //     and https://github.com/php/php-src/blob/master/main/php_streams.h#L592
        switch ($option) {
            case 1: // PHP_STREAM_META_TOUCH
                $time = isset($var[0]) ? $var[0] : null;
                $atime = isset($var[1]) ? $var[1] : null;
                return $this->sftp->touch($path, $time, $atime);
            case 2: // PHP_STREAM_OWNER_NAME
            case 3: // PHP_STREAM_GROUP_NAME
                return false;
            case 4: // PHP_STREAM_META_OWNER
                return $this->sftp->chown($path, $var);
            case 5: // PHP_STREAM_META_GROUP
                return $this->sftp->chgrp($path, $var);
            case 6: // PHP_STREAM_META_ACCESS
                return $this->sftp->chmod($path, $var) !== false;
        }
    }

    /**
     * Retrieve the underlaying resource
     *
     * @param int $cast_as
     * @return resource
     */
    private function _stream_cast($cast_as)
    {
        return $this->sftp->fsock;
    }

    /**
     * Advisory file locking
     *
     * @param int $operation
     * @return bool
     */
    private function _stream_lock($operation)
    {
        return false;
    }

    /**
     * Renames a file or directory
     *
     * Attempts to rename oldname to newname, moving it between directories if necessary.
     * If newname exists, it will be overwritten.  This is a departure from what \phpseclib3\Net\SFTP
     * does.
     *
     * @param string $path_from
     * @param string $path_to
     * @return bool
     */
    private function _rename($path_from, $path_to)
    {
        $path1 = parse_url($path_from);
        $path2 = parse_url($path_to);
        unset($path1['path'], $path2['path']);
        if ($path1 != $path2) {
            return false;
        }

        $path_from = $this->parse_path($path_from);
        $path_to = parse_url($path_to);
        if ($path_from === false) {
            return false;
        }

        $path_to = $path_to['path']; // the $component part of parse_url() was added in PHP 5.1.2
        // "It is an error if there already exists a file with the name specified by newpath."
        //  -- http://tools.ietf.org/html/draft-ietf-secsh-filexfer-02#section-6.5
        if (!$this->sftp->rename($path_from, $path_to)) {
            if ($this->sftp->stat($path_to)) {
                return $this->sftp->delete($path_to, true) && $this->sftp->rename($path_from, $path_to);
            }
            return false;
        }

        return true;
    }

    /**
     * Open directory handle
     *
     * The only $options is "whether or not to enforce safe_mode (0x04)". Since safe mode was deprecated in 5.3 and
     * removed in 5.4 I'm just going to ignore it.
     *
     * Also, nlist() is the best that this function is realistically going to be able to do. When an SFTP client
     * sends a SSH_FXP_READDIR packet you don't generally get info on just one file but on multiple files. Quoting
     * the SFTP specs:
     *
     *    The SSH_FXP_NAME response has the following format:
     *
     *        uint32     id
     *        uint32     count
     *        repeats count times:
     *                string     filename
     *                string     longname
     *                ATTRS      attrs
     *
     * @param string $path
     * @param int $options
     * @return bool
     */
    private function _dir_opendir($path, $options)
    {
        $path = $this->parse_path($path);
        if ($path === false) {
            return false;
        }
        $this->pos = 0;
        $this->entries = $this->sftp->nlist($path);
        return $this->entries !== false;
    }

    /**
     * Read entry from directory handle
     *
     * @return mixed
     */
    private function _dir_readdir()
    {
        if (isset($this->entries[$this->pos])) {
            return $this->entries[$this->pos++];
        }
        return false;
    }

    /**
     * Rewind directory handle
     *
     * @return bool
     */
    private function _dir_rewinddir()
    {
        $this->pos = 0;
        return true;
    }

    /**
     * Close directory handle
     *
     * @return bool
     */
    private function _dir_closedir()
    {
        return true;
    }

    /**
     * Create a directory
     *
     * Only valid $options is STREAM_MKDIR_RECURSIVE
     *
     * @param string $path
     * @param int $mode
     * @param int $options
     * @return bool
     */
    private function _mkdir($path, $mode, $options)
    {
        $path = $this->parse_path($path);
        if ($path === false) {
            return false;
        }

        return $this->sftp->mkdir($path, $mode, $options & STREAM_MKDIR_RECURSIVE);
    }

    /**
     * Removes a directory
     *
     * Only valid $options is STREAM_MKDIR_RECURSIVE per <http://php.net/streamwrapper.rmdir>, however,
     * <http://php.net/rmdir>  does not have a $recursive parameter as mkdir() does so I don't know how
     * STREAM_MKDIR_RECURSIVE is supposed to be set. Also, when I try it out with rmdir() I get 8 as
     * $options. What does 8 correspond to?
     *
     * @param string $path
     * @param int $options
     * @return bool
     */
    private function _rmdir($path, $options)
    {
        $path = $this->parse_path($path);
        if ($path === false) {
            return false;
        }

        return $this->sftp->rmdir($path);
    }

    /**
     * Flushes the output
     *
     * See <http://php.net/fflush>. Always returns true because \phpseclib3\Net\SFTP doesn't cache stuff before writing
     *
     * @return bool
     */
    private function _stream_flush()
    {
        return true;
    }

    /**
     * Retrieve information about a file resource
     *
     * @return mixed
     */
    private function _stream_stat()
    {
        $results = $this->sftp->stat($this->path);
        if ($results === false) {
            return false;
        }
        return $results;
    }

    /**
     * Delete a file
     *
     * @param string $path
     * @return bool
     */
    private function _unlink($path)
    {
        $path = $this->parse_path($path);
        if ($path === false) {
            return false;
        }

        return $this->sftp->delete($path, false);
    }

    /**
     * Retrieve information about a file
     *
     * Ignores the STREAM_URL_STAT_QUIET flag because the entirety of \phpseclib3\Net\SFTP\Stream is quiet by default
     * might be worthwhile to reconstruct bits 12-16 (ie. the file type) if mode doesn't have them but we'll
     * cross that bridge when and if it's reached
     *
     * @param string $path
     * @param int $flags
     * @return mixed
     */
    private function _url_stat($path, $flags)
    {
        $path = $this->parse_path($path);
        if ($path === false) {
            return false;
        }

        $results = $flags & STREAM_URL_STAT_LINK ? $this->sftp->lstat($path) : $this->sftp->stat($path);
        if ($results === false) {
            return false;
        }

        return $results;
    }

    /**
     * Truncate stream
     *
     * @param int $new_size
     * @return bool
     */
    private function _stream_truncate($new_size)
    {
        if (!$this->sftp->truncate($this->path, $new_size)) {
            return false;
        }

        $this->eof = false;
        $this->size = $new_size;

        return true;
    }

    /**
     * Change stream options
     *
     * STREAM_OPTION_WRITE_BUFFER isn't supported for the same reason stream_flush isn't.
     * The other two aren't supported because of limitations in \phpseclib3\Net\SFTP.
     *
     * @param int $option
     * @param int $arg1
     * @param int $arg2
     * @return bool
     */
    private function _stream_set_option($option, $arg1, $arg2)
    {
        return false;
    }

    /**
     * Close an resource
     *
     */
    private function _stream_close()
    {
    }

    /**
     * __call Magic Method
     *
     * When you're utilizing an SFTP stream you're not calling the methods in this class directly - PHP is calling them for you.
     * Which kinda begs the question... what methods is PHP calling and what parameters is it passing to them? This function
     * lets you figure that out.
     *
     * If NET_SFTP_STREAM_LOGGING is defined all calls will be output on the screen and then (regardless of whether or not
     * NET_SFTP_STREAM_LOGGING is enabled) the parameters will be passed through to the appropriate method.
     *
     * @param string $name
     * @param array $arguments
     * @return mixed
     */
    public function __call($name, array $arguments)
    {
        if (defined('NET_SFTP_STREAM_LOGGING')) {
            echo $name . '(';
            $last = count($arguments) - 1;
            foreach ($arguments as $i => $argument) {
                var_export($argument);
                if ($i != $last) {
                    echo ',';
                }
            }
            echo ")\r\n";
        }
        $name = '_' . $name;
        if (!method_exists($this, $name)) {
            return false;
        }
        return $this->$name(...$arguments);
    }
}
<?php

/**
 * Pure-PHP implementation of SSHv2.
 *
 * PHP version 5
 *
 * Here are some examples of how to use this library:
 * <code>
 * <?php
 *    include 'vendor/autoload.php';
 *
 *    $ssh = new \phpseclib3\Net\SSH2('www.domain.tld');
 *    if (!$ssh->login('username', 'password')) {
 *        exit('Login Failed');
 *    }
 *
 *    echo $ssh->exec('pwd');
 *    echo $ssh->exec('ls -la');
 * ?>
 * </code>
 *
 * <code>
 * <?php
 *    include 'vendor/autoload.php';
 *
 *    $key = \phpseclib3\Crypt\PublicKeyLoader::load('...', '(optional) password');
 *
 *    $ssh = new \phpseclib3\Net\SSH2('www.domain.tld');
 *    if (!$ssh->login('username', $key)) {
 *        exit('Login Failed');
 *    }
 *
 *    echo $ssh->read('username@username:~$');
 *    $ssh->write("ls -la\n");
 *    echo $ssh->read('username@username:~$');
 * ?>
 * </code>
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2007 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\Net;

use phpseclib3\Common\Functions\Strings;
use phpseclib3\Crypt\Blowfish;
use phpseclib3\Crypt\ChaCha20;
use phpseclib3\Crypt\Common\AsymmetricKey;
use phpseclib3\Crypt\Common\PrivateKey;
use phpseclib3\Crypt\Common\PublicKey;
use phpseclib3\Crypt\Common\SymmetricKey;
use phpseclib3\Crypt\DH;
use phpseclib3\Crypt\DSA;
use phpseclib3\Crypt\EC;
use phpseclib3\Crypt\Hash;
use phpseclib3\Crypt\Random;
use phpseclib3\Crypt\RC4;
use phpseclib3\Crypt\Rijndael;
use phpseclib3\Crypt\RSA;
use phpseclib3\Crypt\TripleDES; // Used to do Diffie-Hellman key exchange and DSA/RSA signature verification.
use phpseclib3\Crypt\Twofish;
use phpseclib3\Exception\ConnectionClosedException;
use phpseclib3\Exception\InsufficientSetupException;
use phpseclib3\Exception\InvalidPacketLengthException;
use phpseclib3\Exception\NoSupportedAlgorithmsException;
use phpseclib3\Exception\TimeoutException;
use phpseclib3\Exception\UnableToConnectException;
use phpseclib3\Exception\UnsupportedAlgorithmException;
use phpseclib3\Exception\UnsupportedCurveException;
use phpseclib3\Math\BigInteger;
use phpseclib3\System\SSH\Agent;

/**
 * Pure-PHP implementation of SSHv2.
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
class SSH2
{
    /**#@+
     * Compression Types
     *
     */
    /**
     * No compression
     */
    const NET_SSH2_COMPRESSION_NONE = 1;
    /**
     * zlib compression
     */
    const NET_SSH2_COMPRESSION_ZLIB = 2;
    /**
     * zlib@openssh.com
     */
    const NET_SSH2_COMPRESSION_ZLIB_AT_OPENSSH = 3;
    /**#@-*/

    // Execution Bitmap Masks
    const MASK_CONSTRUCTOR   = 0x00000001;
    const MASK_CONNECTED     = 0x00000002;
    const MASK_LOGIN_REQ     = 0x00000004;
    const MASK_LOGIN         = 0x00000008;
    const MASK_SHELL         = 0x00000010;
    const MASK_DISCONNECT    = 0x00000020;

    /*
     * Channel constants
     *
     * RFC4254 refers not to client and server channels but rather to sender and recipient channels.  we don't refer
     * to them in that way because RFC4254 toggles the meaning. the client sends a SSH_MSG_CHANNEL_OPEN message with
     * a sender channel and the server sends a SSH_MSG_CHANNEL_OPEN_CONFIRMATION in response, with a sender and a
     * recipient channel.  at first glance, you might conclude that SSH_MSG_CHANNEL_OPEN_CONFIRMATION's sender channel
     * would be the same thing as SSH_MSG_CHANNEL_OPEN's sender channel, but it's not, per this snippet:
     *     The 'recipient channel' is the channel number given in the original
     *     open request, and 'sender channel' is the channel number allocated by
     *     the other side.
     *
     * @see \phpseclib3\Net\SSH2::send_channel_packet()
     * @see \phpseclib3\Net\SSH2::get_channel_packet()
     */
    const CHANNEL_EXEC          = 1; // PuTTy uses 0x100
    const CHANNEL_SHELL         = 2;
    const CHANNEL_SUBSYSTEM     = 3;
    const CHANNEL_AGENT_FORWARD = 4;
    const CHANNEL_KEEP_ALIVE    = 5;

    /**
     * Returns the message numbers
     *
     * @see \phpseclib3\Net\SSH2::getLog()
     */
    const LOG_SIMPLE = 1;
    /**
     * Returns the message content
     *
     * @see \phpseclib3\Net\SSH2::getLog()
     */
    const LOG_COMPLEX = 2;
    /**
     * Outputs the content real-time
     */
    const LOG_REALTIME = 3;
    /**
     * Dumps the content real-time to a file
     */
    const LOG_REALTIME_FILE = 4;
    /**
     * Outputs the message numbers real-time
     */
    const LOG_SIMPLE_REALTIME = 5;
    /*
     * Dumps the message numbers real-time
     */
    const LOG_REALTIME_SIMPLE = 5;
    /**
     * Make sure that the log never gets larger than this
     *
     * @see \phpseclib3\Net\SSH2::getLog()
     */
    const LOG_MAX_SIZE = 1048576; // 1024 * 1024

    /**
     * Returns when a string matching $expect exactly is found
     *
     * @see \phpseclib3\Net\SSH2::read()
     */
    const READ_SIMPLE = 1;
    /**
     * Returns when a string matching the regular expression $expect is found
     *
     * @see \phpseclib3\Net\SSH2::read()
     */
    const READ_REGEX = 2;
    /**
     * Returns whenever a data packet is received.
     *
     * Some data packets may only contain a single character so it may be necessary
     * to call read() multiple times when using this option
     *
     * @see \phpseclib3\Net\SSH2::read()
     */
    const READ_NEXT = 3;

    /**
     * The SSH identifier
     *
     * @var string
     */
    private $identifier;

    /**
     * The Socket Object
     *
     * @var resource|closed-resource|null
     */
    public $fsock;

    /**
     * Execution Bitmap
     *
     * The bits that are set represent functions that have been called already.  This is used to determine
     * if a requisite function has been successfully executed.  If not, an error should be thrown.
     *
     * @var int
     */
    protected $bitmap = 0;

    /**
     * Error information
     *
     * @see self::getErrors()
     * @see self::getLastError()
     * @var array
     */
    private $errors = [];

    /**
     * Server Identifier
     *
     * @see self::getServerIdentification()
     * @var string|false
     */
    protected $server_identifier = false;

    /**
     * Key Exchange Algorithms
     *
     * @see self::getKexAlgorithims()
     * @var array|false
     */
    private $kex_algorithms = false;

    /**
     * Key Exchange Algorithm
     *
     * @see self::getMethodsNegotiated()
     * @var string|false
     */
    private $kex_algorithm = false;

    /**
     * Minimum Diffie-Hellman Group Bit Size in RFC 4419 Key Exchange Methods
     *
     * @see self::_key_exchange()
     * @var int
     */
    private $kex_dh_group_size_min = 1536;

    /**
     * Preferred Diffie-Hellman Group Bit Size in RFC 4419 Key Exchange Methods
     *
     * @see self::_key_exchange()
     * @var int
     */
    private $kex_dh_group_size_preferred = 2048;

    /**
     * Maximum Diffie-Hellman Group Bit Size in RFC 4419 Key Exchange Methods
     *
     * @see self::_key_exchange()
     * @var int
     */
    private $kex_dh_group_size_max = 4096;

    /**
     * Server Host Key Algorithms
     *
     * @see self::getServerHostKeyAlgorithms()
     * @var array|false
     */
    private $server_host_key_algorithms = false;

    /**
     * Supported Private Key Algorithms
     *
     * In theory this should be the same as the Server Host Key Algorithms but, in practice,
     * some servers (eg. Azure) will support rsa-sha2-512 as a server host key algorithm but
     * not a private key algorithm
     *
     * @see self::privatekey_login()
     * @var array|false
     */
    private $supported_private_key_algorithms = false;

    /**
     * Encryption Algorithms: Client to Server
     *
     * @see self::getEncryptionAlgorithmsClient2Server()
     * @var array|false
     */
    private $encryption_algorithms_client_to_server = false;

    /**
     * Encryption Algorithms: Server to Client
     *
     * @see self::getEncryptionAlgorithmsServer2Client()
     * @var array|false
     */
    private $encryption_algorithms_server_to_client = false;

    /**
     * MAC Algorithms: Client to Server
     *
     * @see self::getMACAlgorithmsClient2Server()
     * @var array|false
     */
    private $mac_algorithms_client_to_server = false;

    /**
     * MAC Algorithms: Server to Client
     *
     * @see self::getMACAlgorithmsServer2Client()
     * @var array|false
     */
    private $mac_algorithms_server_to_client = false;

    /**
     * Compression Algorithms: Client to Server
     *
     * @see self::getCompressionAlgorithmsClient2Server()
     * @var array|false
     */
    private $compression_algorithms_client_to_server = false;

    /**
     * Compression Algorithms: Server to Client
     *
     * @see self::getCompressionAlgorithmsServer2Client()
     * @var array|false
     */
    private $compression_algorithms_server_to_client = false;

    /**
     * Languages: Server to Client
     *
     * @see self::getLanguagesServer2Client()
     * @var array|false
     */
    private $languages_server_to_client = false;

    /**
     * Languages: Client to Server
     *
     * @see self::getLanguagesClient2Server()
     * @var array|false
     */
    private $languages_client_to_server = false;

    /**
     * Preferred Algorithms
     *
     * @see self::setPreferredAlgorithms()
     * @var array
     */
    private $preferred = [];

    /**
     * Block Size for Server to Client Encryption
     *
     * "Note that the length of the concatenation of 'packet_length',
     *  'padding_length', 'payload', and 'random padding' MUST be a multiple
     *  of the cipher block size or 8, whichever is larger.  This constraint
     *  MUST be enforced, even when using stream ciphers."
     *
     *  -- http://tools.ietf.org/html/rfc4253#section-6
     *
     * @see self::__construct()
     * @see self::_send_binary_packet()
     * @var int
     */
    private $encrypt_block_size = 8;

    /**
     * Block Size for Client to Server Encryption
     *
     * @see self::__construct()
     * @see self::_get_binary_packet()
     * @var int
     */
    private $decrypt_block_size = 8;

    /**
     * Server to Client Encryption Object
     *
     * @see self::_get_binary_packet()
     * @var SymmetricKey|false
     */
    private $decrypt = false;

    /**
     * Decryption Algorithm Name
     *
     * @var string|null
     */
    private $decryptName;

    /**
     * Decryption Invocation Counter
     *
     * Used by GCM
     *
     * @var string|null
     */
    private $decryptInvocationCounter;

    /**
     * Fixed Part of Nonce
     *
     * Used by GCM
     *
     * @var string|null
     */
    private $decryptFixedPart;

    /**
     * Server to Client Length Encryption Object
     *
     * @see self::_get_binary_packet()
     * @var object
     */
    private $lengthDecrypt = false;

    /**
     * Client to Server Encryption Object
     *
     * @see self::_send_binary_packet()
     * @var SymmetricKey|false
     */
    private $encrypt = false;

    /**
     * Encryption Algorithm Name
     *
     * @var string|null
     */
    private $encryptName;

    /**
     * Encryption Invocation Counter
     *
     * Used by GCM
     *
     * @var string|null
     */
    private $encryptInvocationCounter;

    /**
     * Fixed Part of Nonce
     *
     * Used by GCM
     *
     * @var string|null
     */
    private $encryptFixedPart;

    /**
     * Client to Server Length Encryption Object
     *
     * @see self::_send_binary_packet()
     * @var object
     */
    private $lengthEncrypt = false;

    /**
     * Client to Server HMAC Object
     *
     * @see self::_send_binary_packet()
     * @var object
     */
    private $hmac_create = false;

    /**
     * Client to Server HMAC Name
     *
     * @var string|false
     */
    private $hmac_create_name;

    /**
     * Client to Server ETM
     *
     * @var int|false
     */
    private $hmac_create_etm;

    /**
     * Server to Client HMAC Object
     *
     * @see self::_get_binary_packet()
     * @var object
     */
    private $hmac_check = false;

    /**
     * Server to Client HMAC Name
     *
     * @var string|false
     */
    private $hmac_check_name;

    /**
     * Server to Client ETM
     *
     * @var int|false
     */
    private $hmac_check_etm;

    /**
     * Size of server to client HMAC
     *
     * We need to know how big the HMAC will be for the server to client direction so that we know how many bytes to read.
     * For the client to server side, the HMAC object will make the HMAC as long as it needs to be.  All we need to do is
     * append it.
     *
     * @see self::_get_binary_packet()
     * @var int
     */
    private $hmac_size = false;

    /**
     * Server Public Host Key
     *
     * @see self::getServerPublicHostKey()
     * @var string
     */
    private $server_public_host_key;

    /**
     * Session identifier
     *
     * "The exchange hash H from the first key exchange is additionally
     *  used as the session identifier, which is a unique identifier for
     *  this connection."
     *
     *  -- http://tools.ietf.org/html/rfc4253#section-7.2
     *
     * @see self::_key_exchange()
     * @var string
     */
    private $session_id = false;

    /**
     * Exchange hash
     *
     * The current exchange hash
     *
     * @see self::_key_exchange()
     * @var string
     */
    private $exchange_hash = false;

    /**
     * Message Numbers
     *
     * @see self::__construct()
     * @var array
     * @access private
     */
    private static $message_numbers = [];

    /**
     * Disconnection Message 'reason codes' defined in RFC4253
     *
     * @see self::__construct()
     * @var array
     * @access private
     */
    private static $disconnect_reasons = [];

    /**
     * SSH_MSG_CHANNEL_OPEN_FAILURE 'reason codes', defined in RFC4254
     *
     * @see self::__construct()
     * @var array
     * @access private
     */
    private static $channel_open_failure_reasons = [];

    /**
     * Terminal Modes
     *
     * @link http://tools.ietf.org/html/rfc4254#section-8
     * @see self::__construct()
     * @var array
     * @access private
     */
    private static $terminal_modes = [];

    /**
     * SSH_MSG_CHANNEL_EXTENDED_DATA's data_type_codes
     *
     * @link http://tools.ietf.org/html/rfc4254#section-5.2
     * @see self::__construct()
     * @var array
     * @access private
     */
    private static $channel_extended_data_type_codes = [];

    /**
     * Send Sequence Number
     *
     * See 'Section 6.4.  Data Integrity' of rfc4253 for more info.
     *
     * @see self::_send_binary_packet()
     * @var int
     */
    private $send_seq_no = 0;

    /**
     * Get Sequence Number
     *
     * See 'Section 6.4.  Data Integrity' of rfc4253 for more info.
     *
     * @see self::_get_binary_packet()
     * @var int
     */
    private $get_seq_no = 0;

    /**
     * Server Channels
     *
     * Maps client channels to server channels
     *
     * @see self::get_channel_packet()
     * @see self::exec()
     * @var array
     */
    protected $server_channels = [];

    /**
     * Channel Read Buffers
     *
     * If a client requests a packet from one channel but receives two packets from another those packets should
     * be placed in a buffer
     *
     * @see self::get_channel_packet()
     * @see self::exec()
     * @var array
     */
    private $channel_buffers = [];

    /**
     * Channel Write Buffers
     *
     * If a client sends a packet and receives a timeout error mid-transmission, buffer the data written so it
     * can be de-duplicated upon resuming write
     *
     * @see self::send_channel_packet()
     * @var array
     */
    private $channel_buffers_write = [];

    /**
     * Channel Status
     *
     * Contains the type of the last sent message
     *
     * @see self::get_channel_packet()
     * @var array
     */
    protected $channel_status = [];

    /**
     * The identifier of the interactive channel which was opened most recently
     *
     * @see self::getInteractiveChannelId()
     * @var int
     */
    private $channel_id_last_interactive = 0;

    /**
     * Packet Size
     *
     * Maximum packet size indexed by channel
     *
     * @see self::send_channel_packet()
     * @var array
     */
    private $packet_size_client_to_server = [];

    /**
     * Message Number Log
     *
     * @see self::getLog()
     * @var array
     */
    private $message_number_log = [];

    /**
     * Message Log
     *
     * @see self::getLog()
     * @var array
     */
    private $message_log = [];

    /**
     * The Window Size
     *
     * Bytes the other party can send before it must wait for the window to be adjusted (0x7FFFFFFF = 2GB)
     *
     * @var int
     * @see self::send_channel_packet()
     * @see self::exec()
     */
    protected $window_size = 0x7FFFFFFF;

    /**
     * What we resize the window to
     *
     * When PuTTY resizes the window it doesn't add an additional 0x7FFFFFFF bytes - it adds 0x40000000 bytes.
     * Some SFTP clients (GoAnywhere) don't support adding 0x7FFFFFFF to the window size after the fact so
     * we'll just do what PuTTY does
     *
     * @var int
     * @see self::_send_channel_packet()
     * @see self::exec()
     */
    private $window_resize = 0x40000000;

    /**
     * Window size, server to client
     *
     * Window size indexed by channel
     *
     * @see self::send_channel_packet()
     * @var array
     */
    protected $window_size_server_to_client = [];

    /**
     * Window size, client to server
     *
     * Window size indexed by channel
     *
     * @see self::get_channel_packet()
     * @var array
     */
    private $window_size_client_to_server = [];

    /**
     * Server signature
     *
     * Verified against $this->session_id
     *
     * @see self::getServerPublicHostKey()
     * @var string
     */
    private $signature = '';

    /**
     * Server signature format
     *
     * ssh-rsa or ssh-dss.
     *
     * @see self::getServerPublicHostKey()
     * @var string
     */
    private $signature_format = '';

    /**
     * Interactive Buffer
     *
     * @see self::read()
     * @var string
     */
    private $interactiveBuffer = '';

    /**
     * Current log size
     *
     * Should never exceed self::LOG_MAX_SIZE
     *
     * @see self::_send_binary_packet()
     * @see self::_get_binary_packet()
     * @var int
     */
    private $log_size;

    /**
     * Timeout
     *
     * @see self::setTimeout()
     */
    protected $timeout;

    /**
     * Current Timeout
     *
     * @see self::get_channel_packet()
     */
    protected $curTimeout;

    /**
     * Keep Alive Interval
     *
     * @see self::setKeepAlive()
     */
    private $keepAlive;

    /**
     * Real-time log file pointer
     *
     * @see self::_append_log()
     * @var resource|closed-resource
     */
    private $realtime_log_file;

    /**
     * Real-time log file size
     *
     * @see self::_append_log()
     * @var int
     */
    private $realtime_log_size;

    /**
     * Has the signature been validated?
     *
     * @see self::getServerPublicHostKey()
     * @var bool
     */
    private $signature_validated = false;

    /**
     * Real-time log file wrap boolean
     *
     * @see self::_append_log()
     * @var bool
     */
    private $realtime_log_wrap;

    /**
     * Flag to suppress stderr from output
     *
     * @see self::enableQuietMode()
     */
    private $quiet_mode = false;

    /**
     * Time of last read/write network activity
     *
     * @var float
     */
    private $last_packet = null;

    /**
     * Exit status returned from ssh if any
     *
     * @var int
     */
    private $exit_status;

    /**
     * Flag to request a PTY when using exec()
     *
     * @var bool
     * @see self::enablePTY()
     */
    private $request_pty = false;

    /**
     * Contents of stdError
     *
     * @var string
     */
    private $stdErrorLog;

    /**
     * The Last Interactive Response
     *
     * @see self::_keyboard_interactive_process()
     * @var string
     */
    private $last_interactive_response = '';

    /**
     * Keyboard Interactive Request / Responses
     *
     * @see self::_keyboard_interactive_process()
     * @var array
     */
    private $keyboard_requests_responses = [];

    /**
     * Banner Message
     *
     * Quoting from the RFC, "in some jurisdictions, sending a warning message before
     * authentication may be relevant for getting legal protection."
     *
     * @see self::_filter()
     * @see self::getBannerMessage()
     * @var string
     */
    private $banner_message = '';

    /**
     * Did read() timeout or return normally?
     *
     * @see self::isTimeout()
     * @var bool
     */
    protected $is_timeout = false;

    /**
     * Log Boundary
     *
     * @see self::_format_log()
     * @var string
     */
    private $log_boundary = ':';

    /**
     * Log Long Width
     *
     * @see self::_format_log()
     * @var int
     */
    private $log_long_width = 65;

    /**
     * Log Short Width
     *
     * @see self::_format_log()
     * @var int
     */
    private $log_short_width = 16;

    /**
     * Hostname
     *
     * @see self::__construct()
     * @see self::_connect()
     * @var string
     */
    private $host;

    /**
     * Port Number
     *
     * @see self::__construct()
     * @see self::_connect()
     * @var int
     */
    private $port;

    /**
     * Number of columns for terminal window size
     *
     * @see self::getWindowColumns()
     * @see self::setWindowColumns()
     * @see self::setWindowSize()
     * @var int
     */
    private $windowColumns = 80;

    /**
     * Number of columns for terminal window size
     *
     * @see self::getWindowRows()
     * @see self::setWindowRows()
     * @see self::setWindowSize()
     * @var int
     */
    private $windowRows = 24;

    /**
     * Crypto Engine
     *
     * @see self::setCryptoEngine()
     * @see self::_key_exchange()
     * @var int
     */
    private static $crypto_engine = false;

    /**
     * A System_SSH_Agent for use in the SSH2 Agent Forwarding scenario
     *
     * @var Agent
     */
    private $agent;

    /**
     * Connection storage to replicates ssh2 extension functionality:
     * {@link http://php.net/manual/en/wrappers.ssh2.php#refsect1-wrappers.ssh2-examples}
     *
     * @var array<string, SSH2|\WeakReference<SSH2>>
     */
    private static $connections;

    /**
     * Send the identification string first?
     *
     * @var bool
     */
    private $send_id_string_first = true;

    /**
     * Send the key exchange initiation packet first?
     *
     * @var bool
     */
    private $send_kex_first = true;

    /**
     * Some versions of OpenSSH incorrectly calculate the key size
     *
     * @var bool
     */
    private $bad_key_size_fix = false;

    /**
     * Should we try to re-connect to re-establish keys?
     *
     * @var bool
     */
    private $login_credentials_finalized = false;

    /**
     * Binary Packet Buffer
     *
     * @var object|null
     */
    private $binary_packet_buffer = null;

    /**
     * Preferred Signature Format
     *
     * @var string|false
     */
    protected $preferred_signature_format = false;

    /**
     * Authentication Credentials
     *
     * @var array
     */
    protected $auth = [];

    /**
     * Terminal
     *
     * @var string
     */
    private $term = 'vt100';

    /**
     * The authentication methods that may productively continue authentication.
     *
     * @see https://tools.ietf.org/html/rfc4252#section-5.1
     * @var array|null
     */
    private $auth_methods_to_continue = null;

    /**
     * Compression method
     *
     * @var int
     */
    private $compress = self::NET_SSH2_COMPRESSION_NONE;

    /**
     * Decompression method
     *
     * @var int
     */
    private $decompress = self::NET_SSH2_COMPRESSION_NONE;

    /**
     * Compression context
     *
     * @var resource|false|null
     */
    private $compress_context;

    /**
     * Decompression context
     *
     * @var resource|object
     */
    private $decompress_context;

    /**
     * Regenerate Compression Context
     *
     * @var bool
     */
    private $regenerate_compression_context = false;

    /**
     * Regenerate Decompression Context
     *
     * @var bool
     */
    private $regenerate_decompression_context = false;

    /**
     * Smart multi-factor authentication flag
     *
     * @var bool
     */
    private $smartMFA = true;

    /**
     * How many channels are currently opened
     *
     * @var int
     */
    private $channelCount = 0;

    /**
     * Does the server support multiple channels? If not then error out
     * when multiple channels are attempted to be opened
     *
     * @var bool
     */
    private $errorOnMultipleChannels;

    /**
     * Bytes Transferred Since Last Key Exchange
     *
     * Includes outbound and inbound totals
     *
     * @var int
     */
    private $bytesTransferredSinceLastKEX = 0;

    /**
     * After how many transferred byte should phpseclib initiate a key re-exchange?
     *
     * @var int
     */
    private $doKeyReexchangeAfterXBytes = 1024 * 1024 * 1024;

    /**
     * Has a key re-exchange been initialized?
     *
     * @var bool
     * @access private
     */
    private $keyExchangeInProgress = false;

    /**
     * KEX Buffer
     *
     * If we're in the middle of a key exchange we want to buffer any additional packets we get until
     * the key exchange is over
     *
     * @see self::_get_binary_packet()
     * @see self::_key_exchange()
     * @see self::exec()
     * @var array
     * @access private
     */
    private $kex_buffer = [];

    /**
     * Strict KEX Flag
     *
     * If kex-strict-s-v00@openssh.com is present in the first KEX packet it need not
     * be present in subsequent packet
     *
     * @see self::_key_exchange()
     * @see self::exec()
     * @var array
     * @access private
     */
    private $strict_kex_flag = false;

    /**
     * Default Constructor.
     *
     * $host can either be a string, representing the host, or a stream resource.
     * If $host is a stream resource then $port doesn't do anything, altho $timeout
     * still will be used
     *
     * @param mixed $host
     * @param int $port
     * @param int $timeout
     * @see self::login()
     */
    public function __construct($host, $port = 22, $timeout = 10)
    {
        if (empty(self::$message_numbers)) {
            self::$message_numbers = [
                1 => 'NET_SSH2_MSG_DISCONNECT',
                2 => 'NET_SSH2_MSG_IGNORE',
                3 => 'NET_SSH2_MSG_UNIMPLEMENTED',
                4 => 'NET_SSH2_MSG_DEBUG',
                5 => 'NET_SSH2_MSG_SERVICE_REQUEST',
                6 => 'NET_SSH2_MSG_SERVICE_ACCEPT',
                7 => 'NET_SSH2_MSG_EXT_INFO', // RFC 8308
                20 => 'NET_SSH2_MSG_KEXINIT',
                21 => 'NET_SSH2_MSG_NEWKEYS',
                30 => 'NET_SSH2_MSG_KEXDH_INIT',
                31 => 'NET_SSH2_MSG_KEXDH_REPLY',
                50 => 'NET_SSH2_MSG_USERAUTH_REQUEST',
                51 => 'NET_SSH2_MSG_USERAUTH_FAILURE',
                52 => 'NET_SSH2_MSG_USERAUTH_SUCCESS',
                53 => 'NET_SSH2_MSG_USERAUTH_BANNER',

                80 => 'NET_SSH2_MSG_GLOBAL_REQUEST',
                81 => 'NET_SSH2_MSG_REQUEST_SUCCESS',
                82 => 'NET_SSH2_MSG_REQUEST_FAILURE',
                90 => 'NET_SSH2_MSG_CHANNEL_OPEN',
                91 => 'NET_SSH2_MSG_CHANNEL_OPEN_CONFIRMATION',
                92 => 'NET_SSH2_MSG_CHANNEL_OPEN_FAILURE',
                93 => 'NET_SSH2_MSG_CHANNEL_WINDOW_ADJUST',
                94 => 'NET_SSH2_MSG_CHANNEL_DATA',
                95 => 'NET_SSH2_MSG_CHANNEL_EXTENDED_DATA',
                96 => 'NET_SSH2_MSG_CHANNEL_EOF',
                97 => 'NET_SSH2_MSG_CHANNEL_CLOSE',
                98 => 'NET_SSH2_MSG_CHANNEL_REQUEST',
                99 => 'NET_SSH2_MSG_CHANNEL_SUCCESS',
                100 => 'NET_SSH2_MSG_CHANNEL_FAILURE'
            ];
            self::$disconnect_reasons = [
                1 => 'NET_SSH2_DISCONNECT_HOST_NOT_ALLOWED_TO_CONNECT',
                2 => 'NET_SSH2_DISCONNECT_PROTOCOL_ERROR',
                3 => 'NET_SSH2_DISCONNECT_KEY_EXCHANGE_FAILED',
                4 => 'NET_SSH2_DISCONNECT_RESERVED',
                5 => 'NET_SSH2_DISCONNECT_MAC_ERROR',
                6 => 'NET_SSH2_DISCONNECT_COMPRESSION_ERROR',
                7 => 'NET_SSH2_DISCONNECT_SERVICE_NOT_AVAILABLE',
                8 => 'NET_SSH2_DISCONNECT_PROTOCOL_VERSION_NOT_SUPPORTED',
                9 => 'NET_SSH2_DISCONNECT_HOST_KEY_NOT_VERIFIABLE',
                10 => 'NET_SSH2_DISCONNECT_CONNECTION_LOST',
                11 => 'NET_SSH2_DISCONNECT_BY_APPLICATION',
                12 => 'NET_SSH2_DISCONNECT_TOO_MANY_CONNECTIONS',
                13 => 'NET_SSH2_DISCONNECT_AUTH_CANCELLED_BY_USER',
                14 => 'NET_SSH2_DISCONNECT_NO_MORE_AUTH_METHODS_AVAILABLE',
                15 => 'NET_SSH2_DISCONNECT_ILLEGAL_USER_NAME'
            ];
            self::$channel_open_failure_reasons = [
                1 => 'NET_SSH2_OPEN_ADMINISTRATIVELY_PROHIBITED'
            ];
            self::$terminal_modes = [
                0 => 'NET_SSH2_TTY_OP_END'
            ];
            self::$channel_extended_data_type_codes = [
                1 => 'NET_SSH2_EXTENDED_DATA_STDERR'
            ];

            self::define_array(
                self::$message_numbers,
                self::$disconnect_reasons,
                self::$channel_open_failure_reasons,
                self::$terminal_modes,
                self::$channel_extended_data_type_codes,
                [60 => 'NET_SSH2_MSG_USERAUTH_PASSWD_CHANGEREQ'],
                [60 => 'NET_SSH2_MSG_USERAUTH_PK_OK'],
                [60 => 'NET_SSH2_MSG_USERAUTH_INFO_REQUEST',
                      61 => 'NET_SSH2_MSG_USERAUTH_INFO_RESPONSE'],
                // RFC 4419 - diffie-hellman-group-exchange-sha{1,256}
                [30 => 'NET_SSH2_MSG_KEXDH_GEX_REQUEST_OLD',
                      31 => 'NET_SSH2_MSG_KEXDH_GEX_GROUP',
                      32 => 'NET_SSH2_MSG_KEXDH_GEX_INIT',
                      33 => 'NET_SSH2_MSG_KEXDH_GEX_REPLY',
                      34 => 'NET_SSH2_MSG_KEXDH_GEX_REQUEST'],
                // RFC 5656 - Elliptic Curves (for curve25519-sha256@libssh.org)
                [30 => 'NET_SSH2_MSG_KEX_ECDH_INIT',
                      31 => 'NET_SSH2_MSG_KEX_ECDH_REPLY']
            );
        }

        /**
         * Typehint is required due to a bug in Psalm: https://github.com/vimeo/psalm/issues/7508
         * @var \WeakReference<SSH2>|SSH2
         */
        self::$connections[$this->getResourceId()] = class_exists('WeakReference')
            ? \WeakReference::create($this)
            : $this;

        $this->timeout = $timeout;

        if (is_resource($host)) {
            $this->fsock = $host;
            return;
        }

        if (Strings::is_stringable($host)) {
            $this->host = $host;
            $this->port = $port;
        }
    }

    /**
     * Set Crypto Engine Mode
     *
     * Possible $engine values:
     * OpenSSL, mcrypt, Eval, PHP
     *
     * @param int $engine
     */
    public static function setCryptoEngine($engine)
    {
        self::$crypto_engine = $engine;
    }

    /**
     * Send Identification String First
     *
     * https://tools.ietf.org/html/rfc4253#section-4.2 says "when the connection has been established,
     * both sides MUST send an identification string". It does not say which side sends it first. In
     * theory it shouldn't matter but it is a fact of life that some SSH servers are simply buggy
     *
     */
    public function sendIdentificationStringFirst()
    {
        $this->send_id_string_first = true;
    }

    /**
     * Send Identification String Last
     *
     * https://tools.ietf.org/html/rfc4253#section-4.2 says "when the connection has been established,
     * both sides MUST send an identification string". It does not say which side sends it first. In
     * theory it shouldn't matter but it is a fact of life that some SSH servers are simply buggy
     *
     */
    public function sendIdentificationStringLast()
    {
        $this->send_id_string_first = false;
    }

    /**
     * Send SSH_MSG_KEXINIT First
     *
     * https://tools.ietf.org/html/rfc4253#section-7.1 says "key exchange begins by each sending
     * sending the [SSH_MSG_KEXINIT] packet". It does not say which side sends it first. In theory
     * it shouldn't matter but it is a fact of life that some SSH servers are simply buggy
     *
     */
    public function sendKEXINITFirst()
    {
        $this->send_kex_first = true;
    }

    /**
     * Send SSH_MSG_KEXINIT Last
     *
     * https://tools.ietf.org/html/rfc4253#section-7.1 says "key exchange begins by each sending
     * sending the [SSH_MSG_KEXINIT] packet". It does not say which side sends it first. In theory
     * it shouldn't matter but it is a fact of life that some SSH servers are simply buggy
     *
     */
    public function sendKEXINITLast()
    {
        $this->send_kex_first = false;
    }

    /**
     * stream_select wrapper
     *
     * Quoting https://stackoverflow.com/a/14262151/569976,
     * "The general approach to `EINTR` is to simply handle the error and retry the operation again"
     *
     * This wrapper does that loop
     */
    private static function stream_select(&$read, &$write, &$except, $seconds, $microseconds = null)
    {
        $remaining = $seconds + $microseconds / 1000000;
        $start = microtime(true);
        while (true) {
            $result = @stream_select($read, $write, $except, $seconds, $microseconds);
            if ($result !== false) {
                return $result;
            }
            $elapsed = microtime(true) - $start;
            $seconds = (int) ($remaining - floor($elapsed));
            $microseconds = (int) (1000000 * ($remaining - $seconds));
            if ($elapsed >= $remaining) {
                return false;
            }
        }
    }

    /**
     * Connect to an SSHv2 server
     *
     * @throws \UnexpectedValueException on receipt of unexpected packets
     * @throws \RuntimeException on other errors
     */
    private function connect()
    {
        if ($this->bitmap & self::MASK_CONSTRUCTOR) {
            return;
        }

        $this->bitmap |= self::MASK_CONSTRUCTOR;

        $this->curTimeout = $this->timeout;

        if (!is_resource($this->fsock)) {
            $start = microtime(true);
            // with stream_select a timeout of 0 means that no timeout takes place;
            // with fsockopen a timeout of 0 means that you instantly timeout
            // to resolve this incompatibility a timeout of 100,000 will be used for fsockopen if timeout is 0
            $this->fsock = @fsockopen($this->host, $this->port, $errno, $errstr, $this->curTimeout == 0 ? 100000 : $this->curTimeout);
            if (!$this->fsock) {
                $host = $this->host . ':' . $this->port;
                throw new UnableToConnectException(rtrim("Cannot connect to $host. Error $errno. $errstr"));
            }
            $elapsed = microtime(true) - $start;

            if ($this->curTimeout) {
                $this->curTimeout -= $elapsed;
                if ($this->curTimeout < 0) {
                    throw new \RuntimeException('Connection timed out whilst attempting to open socket connection');
                }
            }

            if (defined('NET_SSH2_LOGGING')) {
                $this->append_log('(fsockopen took ' . round($elapsed, 4) . 's)', '');
            }
        }

        $this->identifier = $this->generate_identifier();

        if ($this->send_id_string_first) {
            $start = microtime(true);
            fputs($this->fsock, $this->identifier . "\r\n");
            $elapsed = round(microtime(true) - $start, 4);
            if (defined('NET_SSH2_LOGGING')) {
                $this->append_log("-> (network: $elapsed)", $this->identifier . "\r\n");
            }
        }

        /* According to the SSH2 specs,

          "The server MAY send other lines of data before sending the version
           string.  Each line SHOULD be terminated by a Carriage Return and Line
           Feed.  Such lines MUST NOT begin with "SSH-", and SHOULD be encoded
           in ISO-10646 UTF-8 [RFC3629] (language is not specified).  Clients
           MUST be able to process such lines." */
        $data = '';
        $totalElapsed = 0;
        while (!feof($this->fsock) && !preg_match('#(.*)^(SSH-(\d\.\d+).*)#ms', $data, $matches)) {
            $line = '';
            while (true) {
                if ($this->curTimeout) {
                    if ($this->curTimeout < 0) {
                        throw new \RuntimeException('Connection timed out whilst receiving server identification string');
                    }
                    $read = [$this->fsock];
                    $write = $except = null;
                    $start = microtime(true);
                    $sec = (int) floor($this->curTimeout);
                    $usec = (int) (1000000 * ($this->curTimeout - $sec));
                    if (static::stream_select($read, $write, $except, $sec, $usec) === false) {
                        throw new \RuntimeException('Connection timed out whilst receiving server identification string');
                    }
                    $elapsed = microtime(true) - $start;
                    $totalElapsed += $elapsed;
                    $this->curTimeout -= $elapsed;
                }

                $temp = stream_get_line($this->fsock, 255, "\n");
                if ($temp === false) {
                    throw new \RuntimeException('Error reading SSH identification string; are you sure you\'re connecting to an SSH server?');
                }

                $line .= $temp;
                if (strlen($temp) == 255) {
                    continue;
                }

                $line .= "\n";

                break;
            }

            $data .= $line;
        }

        if (defined('NET_SSH2_LOGGING')) {
            $this->append_log('<- (network: ' . round($totalElapsed, 4) . ')', $data);
        }

        if (feof($this->fsock)) {
            $this->bitmap = 0;
            throw new ConnectionClosedException('Connection closed by server; are you sure you\'re connected to an SSH server?');
        }

        $extra = $matches[1];

        // earlier the SSH specs were quoted.
        // "The server MAY send other lines of data before sending the version string." they said.
        // the implication of this is that the lines of data before the server string are *not* a part of it
        // getting this right is important because the correct server identifier needs to be fed into the
        // exchange hash for the shared keys to be calculated correctly
        $data = explode("\r\n", trim($data, "\r\n"));
        $this->server_identifier = $data[count($data) - 1];
        if (strlen($extra)) {
            $this->errors[] = $data;
        }

        if (version_compare($matches[3], '1.99', '<')) {
            $this->bitmap = 0;
            throw new UnableToConnectException("Cannot connect to SSH $matches[3] servers");
        }

        // Ubuntu's OpenSSH from 5.8 to 6.9 didn't work with multiple channels. see
        // https://bugs.launchpad.net/ubuntu/+source/openssh/+bug/1334916 for more info.
        // https://lists.ubuntu.com/archives/oneiric-changes/2011-July/005772.html discusses
        // when consolekit was incorporated.
        // https://marc.info/?l=openssh-unix-dev&m=163409903417589&w=2 discusses some of the
        // issues with how Ubuntu incorporated consolekit
        $pattern = '#^SSH-2\.0-OpenSSH_([\d.]+)[^ ]* Ubuntu-.*$#';
        $match = preg_match($pattern, $this->server_identifier, $matches);
        $match = $match && version_compare('5.8', $matches[1], '<=');
        $match = $match && version_compare('6.9', $matches[1], '>=');
        $this->errorOnMultipleChannels = $match;

        if (!$this->send_id_string_first) {
            $start = microtime(true);
            fputs($this->fsock, $this->identifier . "\r\n");
            $elapsed = round(microtime(true) - $start, 4);
            if (defined('NET_SSH2_LOGGING')) {
                $this->append_log("-> (network: $elapsed)", $this->identifier . "\r\n");
            }
        }

        $this->last_packet = microtime(true);

        if (!$this->send_kex_first) {
            $response = $this->get_binary_packet_or_close(NET_SSH2_MSG_KEXINIT);
            $this->key_exchange($response);
        }

        if ($this->send_kex_first) {
            $this->key_exchange();
        }

        $this->bitmap |= self::MASK_CONNECTED;

        return true;
    }

    /**
     * Generates the SSH identifier
     *
     * You should overwrite this method in your own class if you want to use another identifier
     *
     * @return string
     */
    private function generate_identifier()
    {
        $identifier = 'SSH-2.0-phpseclib_3.0';

        $ext = [];
        if (extension_loaded('sodium')) {
            $ext[] = 'libsodium';
        }

        if (extension_loaded('openssl')) {
            $ext[] = 'openssl';
        } elseif (extension_loaded('mcrypt')) {
            $ext[] = 'mcrypt';
        }

        if (extension_loaded('gmp')) {
            $ext[] = 'gmp';
        } elseif (extension_loaded('bcmath')) {
            $ext[] = 'bcmath';
        }

        if (!empty($ext)) {
            $identifier .= ' (' . implode(', ', $ext) . ')';
        }

        return $identifier;
    }

    /**
     * Key Exchange
     *
     * @return bool
     * @param string|bool $kexinit_payload_server optional
     * @throws \UnexpectedValueException on receipt of unexpected packets
     * @throws \RuntimeException on other errors
     * @throws NoSupportedAlgorithmsException when none of the algorithms phpseclib has loaded are compatible
     */
    private function key_exchange($kexinit_payload_server = false)
    {
        $this->bytesTransferredSinceLastKEX = 0;

        $preferred = $this->preferred;
        // for the initial key exchange $send_kex is true (no key re-exchange has been started)
        // for phpseclib initiated key exchanges $send_kex is false
        $send_kex = !$this->keyExchangeInProgress;
        $this->keyExchangeInProgress = true;

        $kex_algorithms = isset($preferred['kex']) ?
            $preferred['kex'] :
            SSH2::getSupportedKEXAlgorithms();
        $server_host_key_algorithms = isset($preferred['hostkey']) ?
            $preferred['hostkey'] :
            SSH2::getSupportedHostKeyAlgorithms();
        $s2c_encryption_algorithms = isset($preferred['server_to_client']['crypt']) ?
            $preferred['server_to_client']['crypt'] :
            SSH2::getSupportedEncryptionAlgorithms();
        $c2s_encryption_algorithms = isset($preferred['client_to_server']['crypt']) ?
            $preferred['client_to_server']['crypt'] :
            SSH2::getSupportedEncryptionAlgorithms();
        $s2c_mac_algorithms = isset($preferred['server_to_client']['mac']) ?
            $preferred['server_to_client']['mac'] :
            SSH2::getSupportedMACAlgorithms();
        $c2s_mac_algorithms = isset($preferred['client_to_server']['mac']) ?
            $preferred['client_to_server']['mac'] :
            SSH2::getSupportedMACAlgorithms();
        $s2c_compression_algorithms = isset($preferred['server_to_client']['comp']) ?
            $preferred['server_to_client']['comp'] :
            SSH2::getSupportedCompressionAlgorithms();
        $c2s_compression_algorithms = isset($preferred['client_to_server']['comp']) ?
            $preferred['client_to_server']['comp'] :
            SSH2::getSupportedCompressionAlgorithms();

        $kex_algorithms = array_merge($kex_algorithms, ['ext-info-c', 'kex-strict-c-v00@openssh.com']);

        // some SSH servers have buggy implementations of some of the above algorithms
        switch (true) {
            case $this->server_identifier == 'SSH-2.0-SSHD':
            case substr($this->server_identifier, 0, 13) == 'SSH-2.0-DLINK':
                if (!isset($preferred['server_to_client']['mac'])) {
                    $s2c_mac_algorithms = array_values(array_diff(
                        $s2c_mac_algorithms,
                        ['hmac-sha1-96', 'hmac-md5-96']
                    ));
                }
                if (!isset($preferred['client_to_server']['mac'])) {
                    $c2s_mac_algorithms = array_values(array_diff(
                        $c2s_mac_algorithms,
                        ['hmac-sha1-96', 'hmac-md5-96']
                    ));
                }
                break;
            case substr($this->server_identifier, 0, 24) == 'SSH-2.0-TurboFTP_SERVER_':
                if (!isset($preferred['server_to_client']['crypt'])) {
                    $s2c_encryption_algorithms = array_values(array_diff(
                        $s2c_encryption_algorithms,
                        ['aes128-gcm@openssh.com', 'aes256-gcm@openssh.com']
                    ));
                }
                if (!isset($preferred['client_to_server']['crypt'])) {
                    $c2s_encryption_algorithms = array_values(array_diff(
                        $c2s_encryption_algorithms,
                        ['aes128-gcm@openssh.com', 'aes256-gcm@openssh.com']
                    ));
                }
        }

        $client_cookie = Random::string(16);

        $kexinit_payload_client = pack('Ca*', NET_SSH2_MSG_KEXINIT, $client_cookie);
        $kexinit_payload_client .= Strings::packSSH2(
            'L10bN',
            $kex_algorithms,
            $server_host_key_algorithms,
            $c2s_encryption_algorithms,
            $s2c_encryption_algorithms,
            $c2s_mac_algorithms,
            $s2c_mac_algorithms,
            $c2s_compression_algorithms,
            $s2c_compression_algorithms,
            [], // language, client to server
            [], // language, server to client
            false, // first_kex_packet_follows
            0 // reserved for future extension
        );

        if ($kexinit_payload_server === false && $send_kex) {
            $this->send_binary_packet($kexinit_payload_client);

            while (true) {
                $kexinit_payload_server = $this->get_binary_packet();
                switch (ord($kexinit_payload_server[0])) {
                    case NET_SSH2_MSG_KEXINIT:
                        break 2;
                    case NET_SSH2_MSG_DISCONNECT:
                        return $this->handleDisconnect($kexinit_payload_server);
                }
                $this->kex_buffer[] = $kexinit_payload_server;
            }

            $send_kex = false;
        }

        $response = $kexinit_payload_server;
        Strings::shift($response, 1); // skip past the message number (it should be SSH_MSG_KEXINIT)
        $server_cookie = Strings::shift($response, 16);

        list(
            $this->kex_algorithms,
            $this->server_host_key_algorithms,
            $this->encryption_algorithms_client_to_server,
            $this->encryption_algorithms_server_to_client,
            $this->mac_algorithms_client_to_server,
            $this->mac_algorithms_server_to_client,
            $this->compression_algorithms_client_to_server,
            $this->compression_algorithms_server_to_client,
            $this->languages_client_to_server,
            $this->languages_server_to_client,
            $first_kex_packet_follows
        ) = Strings::unpackSSH2('L10C', $response);
        if (in_array('kex-strict-s-v00@openssh.com', $this->kex_algorithms)) {
            if ($this->session_id === false) {
                // [kex-strict-s-v00@openssh.com is] only valid in the initial SSH2_MSG_KEXINIT and MUST be ignored
                // if [it is] present in subsequent SSH2_MSG_KEXINIT packets
                $this->strict_kex_flag = true;
                if (count($this->kex_buffer)) {
                    throw new \UnexpectedValueException('Possible Terrapin Attack detected');
                }
            }
        }

        $this->supported_private_key_algorithms = $this->server_host_key_algorithms;

        if ($send_kex) {
            $this->send_binary_packet($kexinit_payload_client);
        }

        // we need to decide upon the symmetric encryption algorithms before we do the diffie-hellman key exchange

        // we don't initialize any crypto-objects, yet - we do that, later. for now, we need the lengths to make the
        // diffie-hellman key exchange as fast as possible
        $decrypt = self::array_intersect_first($s2c_encryption_algorithms, $this->encryption_algorithms_server_to_client);
        if (!$decrypt || ($decryptKeyLength = $this->encryption_algorithm_to_key_size($decrypt)) === null) {
            $this->disconnect_helper(NET_SSH2_DISCONNECT_KEY_EXCHANGE_FAILED);
            throw new NoSupportedAlgorithmsException('No compatible server to client encryption algorithms found');
        }

        $encrypt = self::array_intersect_first($c2s_encryption_algorithms, $this->encryption_algorithms_client_to_server);
        if (!$encrypt || ($encryptKeyLength = $this->encryption_algorithm_to_key_size($encrypt)) === null) {
            $this->disconnect_helper(NET_SSH2_DISCONNECT_KEY_EXCHANGE_FAILED);
            throw new NoSupportedAlgorithmsException('No compatible client to server encryption algorithms found');
        }

        // through diffie-hellman key exchange a symmetric key is obtained
        $this->kex_algorithm = self::array_intersect_first($kex_algorithms, $this->kex_algorithms);
        if ($this->kex_algorithm === false) {
            $this->disconnect_helper(NET_SSH2_DISCONNECT_KEY_EXCHANGE_FAILED);
            throw new NoSupportedAlgorithmsException('No compatible key exchange algorithms found');
        }

        $server_host_key_algorithm = self::array_intersect_first($server_host_key_algorithms, $this->server_host_key_algorithms);
        if ($server_host_key_algorithm === false) {
            $this->disconnect_helper(NET_SSH2_DISCONNECT_KEY_EXCHANGE_FAILED);
            throw new NoSupportedAlgorithmsException('No compatible server host key algorithms found');
        }

        $mac_algorithm_out = self::array_intersect_first($c2s_mac_algorithms, $this->mac_algorithms_client_to_server);
        if ($mac_algorithm_out === false) {
            $this->disconnect_helper(NET_SSH2_DISCONNECT_KEY_EXCHANGE_FAILED);
            throw new NoSupportedAlgorithmsException('No compatible client to server message authentication algorithms found');
        }

        $mac_algorithm_in = self::array_intersect_first($s2c_mac_algorithms, $this->mac_algorithms_server_to_client);
        if ($mac_algorithm_in === false) {
            $this->disconnect_helper(NET_SSH2_DISCONNECT_KEY_EXCHANGE_FAILED);
            throw new NoSupportedAlgorithmsException('No compatible server to client message authentication algorithms found');
        }

        $compression_map = [
            'none' => self::NET_SSH2_COMPRESSION_NONE,
            'zlib' => self::NET_SSH2_COMPRESSION_ZLIB,
            'zlib@openssh.com' => self::NET_SSH2_COMPRESSION_ZLIB_AT_OPENSSH
        ];

        $compression_algorithm_in = self::array_intersect_first($s2c_compression_algorithms, $this->compression_algorithms_server_to_client);
        if ($compression_algorithm_in === false) {
            $this->disconnect_helper(NET_SSH2_DISCONNECT_KEY_EXCHANGE_FAILED);
            throw new NoSupportedAlgorithmsException('No compatible server to client compression algorithms found');
        }
        $this->decompress = $compression_map[$compression_algorithm_in];

        $compression_algorithm_out = self::array_intersect_first($c2s_compression_algorithms, $this->compression_algorithms_client_to_server);
        if ($compression_algorithm_out === false) {
            $this->disconnect_helper(NET_SSH2_DISCONNECT_KEY_EXCHANGE_FAILED);
            throw new NoSupportedAlgorithmsException('No compatible client to server compression algorithms found');
        }
        $this->compress = $compression_map[$compression_algorithm_out];

        switch ($this->kex_algorithm) {
            case 'diffie-hellman-group15-sha512':
            case 'diffie-hellman-group16-sha512':
            case 'diffie-hellman-group17-sha512':
            case 'diffie-hellman-group18-sha512':
            case 'ecdh-sha2-nistp521':
                $kexHash = new Hash('sha512');
                break;
            case 'ecdh-sha2-nistp384':
                $kexHash = new Hash('sha384');
                break;
            case 'diffie-hellman-group-exchange-sha256':
            case 'diffie-hellman-group14-sha256':
            case 'ecdh-sha2-nistp256':
            case 'curve25519-sha256@libssh.org':
            case 'curve25519-sha256':
                $kexHash = new Hash('sha256');
                break;
            default:
                $kexHash = new Hash('sha1');
        }

        // Only relevant in diffie-hellman-group-exchange-sha{1,256}, otherwise empty.

        $exchange_hash_rfc4419 = '';

        if (strpos($this->kex_algorithm, 'curve25519-sha256') === 0 || strpos($this->kex_algorithm, 'ecdh-sha2-nistp') === 0) {
            $curve = strpos($this->kex_algorithm, 'curve25519-sha256') === 0 ?
                'Curve25519' :
                substr($this->kex_algorithm, 10);
            $ourPrivate = EC::createKey($curve);
            $ourPublicBytes = $ourPrivate->getPublicKey()->getEncodedCoordinates();
            $clientKexInitMessage = 'NET_SSH2_MSG_KEX_ECDH_INIT';
            $serverKexReplyMessage = 'NET_SSH2_MSG_KEX_ECDH_REPLY';
        } else {
            if (strpos($this->kex_algorithm, 'diffie-hellman-group-exchange') === 0) {
                $dh_group_sizes_packed = pack(
                    'NNN',
                    $this->kex_dh_group_size_min,
                    $this->kex_dh_group_size_preferred,
                    $this->kex_dh_group_size_max
                );
                $packet = pack(
                    'Ca*',
                    NET_SSH2_MSG_KEXDH_GEX_REQUEST,
                    $dh_group_sizes_packed
                );
                $this->send_binary_packet($packet);
                $this->updateLogHistory('UNKNOWN (34)', 'NET_SSH2_MSG_KEXDH_GEX_REQUEST');

                $response = $this->get_binary_packet_or_close(NET_SSH2_MSG_KEXDH_GEX_GROUP);
                list($type, $primeBytes, $gBytes) = Strings::unpackSSH2('Css', $response);
                $this->updateLogHistory('NET_SSH2_MSG_KEXDH_REPLY', 'NET_SSH2_MSG_KEXDH_GEX_GROUP');
                $prime = new BigInteger($primeBytes, -256);
                $g = new BigInteger($gBytes, -256);

                $exchange_hash_rfc4419 = $dh_group_sizes_packed . Strings::packSSH2(
                    'ss',
                    $primeBytes,
                    $gBytes
                );

                $params = DH::createParameters($prime, $g);
                $clientKexInitMessage = 'NET_SSH2_MSG_KEXDH_GEX_INIT';
                $serverKexReplyMessage = 'NET_SSH2_MSG_KEXDH_GEX_REPLY';
            } else {
                $params = DH::createParameters($this->kex_algorithm);
                $clientKexInitMessage = 'NET_SSH2_MSG_KEXDH_INIT';
                $serverKexReplyMessage = 'NET_SSH2_MSG_KEXDH_REPLY';
            }

            $keyLength = min($kexHash->getLengthInBytes(), max($encryptKeyLength, $decryptKeyLength));

            $ourPrivate = DH::createKey($params, 16 * $keyLength); // 2 * 8 * $keyLength
            $ourPublic = $ourPrivate->getPublicKey()->toBigInteger();
            $ourPublicBytes = $ourPublic->toBytes(true);
        }

        $data = pack('CNa*', constant($clientKexInitMessage), strlen($ourPublicBytes), $ourPublicBytes);

        $this->send_binary_packet($data);

        switch ($clientKexInitMessage) {
            case 'NET_SSH2_MSG_KEX_ECDH_INIT':
                $this->updateLogHistory('NET_SSH2_MSG_KEXDH_INIT', 'NET_SSH2_MSG_KEX_ECDH_INIT');
                break;
            case 'NET_SSH2_MSG_KEXDH_GEX_INIT':
                $this->updateLogHistory('UNKNOWN (32)', 'NET_SSH2_MSG_KEXDH_GEX_INIT');
        }

        $response = $this->get_binary_packet_or_close(constant($serverKexReplyMessage));

        list(
            $type,
            $server_public_host_key,
            $theirPublicBytes,
            $this->signature
        ) = Strings::unpackSSH2('Csss', $response);

        switch ($serverKexReplyMessage) {
            case 'NET_SSH2_MSG_KEX_ECDH_REPLY':
                $this->updateLogHistory('NET_SSH2_MSG_KEXDH_REPLY', 'NET_SSH2_MSG_KEX_ECDH_REPLY');
                break;
            case 'NET_SSH2_MSG_KEXDH_GEX_REPLY':
                $this->updateLogHistory('UNKNOWN (33)', 'NET_SSH2_MSG_KEXDH_GEX_REPLY');
        }

        $this->server_public_host_key = $server_public_host_key;
        list($public_key_format) = Strings::unpackSSH2('s', $server_public_host_key);
        if (strlen($this->signature) < 4) {
            throw new \LengthException('The signature needs at least four bytes');
        }
        $temp = unpack('Nlength', substr($this->signature, 0, 4));
        $this->signature_format = substr($this->signature, 4, $temp['length']);

        $keyBytes = DH::computeSecret($ourPrivate, $theirPublicBytes);
        if (($keyBytes & "\xFF\x80") === "\x00\x00") {
            $keyBytes = substr($keyBytes, 1);
        } elseif (($keyBytes[0] & "\x80") === "\x80") {
            $keyBytes = "\0$keyBytes";
        }

        $this->exchange_hash = Strings::packSSH2(
            's5',
            $this->identifier,
            $this->server_identifier,
            $kexinit_payload_client,
            $kexinit_payload_server,
            $this->server_public_host_key
        );
        $this->exchange_hash .= $exchange_hash_rfc4419;
        $this->exchange_hash .= Strings::packSSH2(
            's3',
            $ourPublicBytes,
            $theirPublicBytes,
            $keyBytes
        );

        $this->exchange_hash = $kexHash->hash($this->exchange_hash);

        if ($this->session_id === false) {
            $this->session_id = $this->exchange_hash;
        }

        switch ($server_host_key_algorithm) {
            case 'rsa-sha2-256':
            case 'rsa-sha2-512':
            //case 'ssh-rsa':
                $expected_key_format = 'ssh-rsa';
                break;
            default:
                $expected_key_format = $server_host_key_algorithm;
        }
        if ($public_key_format != $expected_key_format || $this->signature_format != $server_host_key_algorithm) {
            switch (true) {
                case $this->signature_format == $server_host_key_algorithm:
                case $server_host_key_algorithm != 'rsa-sha2-256' && $server_host_key_algorithm != 'rsa-sha2-512':
                case $this->signature_format != 'ssh-rsa':
                    $this->disconnect_helper(NET_SSH2_DISCONNECT_HOST_KEY_NOT_VERIFIABLE);
                    throw new \RuntimeException('Server Host Key Algorithm Mismatch (' . $this->signature_format . ' vs ' . $server_host_key_algorithm . ')');
            }
        }

        $packet = pack('C', NET_SSH2_MSG_NEWKEYS);
        $this->send_binary_packet($packet);
        $this->get_binary_packet_or_close(NET_SSH2_MSG_NEWKEYS);

        $this->keyExchangeInProgress = false;

        if ($this->strict_kex_flag) {
            $this->get_seq_no = $this->send_seq_no = 0;
        }

        $keyBytes = pack('Na*', strlen($keyBytes), $keyBytes);

        $this->encrypt = self::encryption_algorithm_to_crypt_instance($encrypt);
        if ($this->encrypt) {
            if (self::$crypto_engine) {
                $this->encrypt->setPreferredEngine(self::$crypto_engine);
            }
            if ($this->encrypt->getBlockLengthInBytes()) {
                $this->encrypt_block_size = $this->encrypt->getBlockLengthInBytes();
            }
            $this->encrypt->disablePadding();

            if ($this->encrypt->usesIV()) {
                $iv = $kexHash->hash($keyBytes . $this->exchange_hash . 'A' . $this->session_id);
                while ($this->encrypt_block_size > strlen($iv)) {
                    $iv .= $kexHash->hash($keyBytes . $this->exchange_hash . $iv);
                }
                $this->encrypt->setIV(substr($iv, 0, $this->encrypt_block_size));
            }

            switch ($encrypt) {
                case 'aes128-gcm@openssh.com':
                case 'aes256-gcm@openssh.com':
                    $nonce = $kexHash->hash($keyBytes . $this->exchange_hash . 'A' . $this->session_id);
                    $this->encryptFixedPart = substr($nonce, 0, 4);
                    $this->encryptInvocationCounter = substr($nonce, 4, 8);
                    // fall-through
                case 'chacha20-poly1305@openssh.com':
                    break;
                default:
                    $this->encrypt->enableContinuousBuffer();
            }

            $key = $kexHash->hash($keyBytes . $this->exchange_hash . 'C' . $this->session_id);
            while ($encryptKeyLength > strlen($key)) {
                $key .= $kexHash->hash($keyBytes . $this->exchange_hash . $key);
            }
            switch ($encrypt) {
                case 'chacha20-poly1305@openssh.com':
                    $encryptKeyLength = 32;
                    $this->lengthEncrypt = self::encryption_algorithm_to_crypt_instance($encrypt);
                    $this->lengthEncrypt->setKey(substr($key, 32, 32));
            }
            $this->encrypt->setKey(substr($key, 0, $encryptKeyLength));
            $this->encryptName = $encrypt;
        }

        $this->decrypt = self::encryption_algorithm_to_crypt_instance($decrypt);
        if ($this->decrypt) {
            if (self::$crypto_engine) {
                $this->decrypt->setPreferredEngine(self::$crypto_engine);
            }
            if ($this->decrypt->getBlockLengthInBytes()) {
                $this->decrypt_block_size = $this->decrypt->getBlockLengthInBytes();
            }
            $this->decrypt->disablePadding();

            if ($this->decrypt->usesIV()) {
                $iv = $kexHash->hash($keyBytes . $this->exchange_hash . 'B' . $this->session_id);
                while ($this->decrypt_block_size > strlen($iv)) {
                    $iv .= $kexHash->hash($keyBytes . $this->exchange_hash . $iv);
                }
                $this->decrypt->setIV(substr($iv, 0, $this->decrypt_block_size));
            }

            switch ($decrypt) {
                case 'aes128-gcm@openssh.com':
                case 'aes256-gcm@openssh.com':
                    // see https://tools.ietf.org/html/rfc5647#section-7.1
                    $nonce = $kexHash->hash($keyBytes . $this->exchange_hash . 'B' . $this->session_id);
                    $this->decryptFixedPart = substr($nonce, 0, 4);
                    $this->decryptInvocationCounter = substr($nonce, 4, 8);
                    // fall-through
                case 'chacha20-poly1305@openssh.com':
                    break;
                default:
                    $this->decrypt->enableContinuousBuffer();
            }

            $key = $kexHash->hash($keyBytes . $this->exchange_hash . 'D' . $this->session_id);
            while ($decryptKeyLength > strlen($key)) {
                $key .= $kexHash->hash($keyBytes . $this->exchange_hash . $key);
            }
            switch ($decrypt) {
                case 'chacha20-poly1305@openssh.com':
                    $decryptKeyLength = 32;
                    $this->lengthDecrypt = self::encryption_algorithm_to_crypt_instance($decrypt);
                    $this->lengthDecrypt->setKey(substr($key, 32, 32));
            }
            $this->decrypt->setKey(substr($key, 0, $decryptKeyLength));
            $this->decryptName = $decrypt;
        }

        /* The "arcfour128" algorithm is the RC4 cipher, as described in
           [SCHNEIER], using a 128-bit key.  The first 1536 bytes of keystream
           generated by the cipher MUST be discarded, and the first byte of the
           first encrypted packet MUST be encrypted using the 1537th byte of
           keystream.

           -- http://tools.ietf.org/html/rfc4345#section-4 */
        if ($encrypt == 'arcfour128' || $encrypt == 'arcfour256') {
            $this->encrypt->encrypt(str_repeat("\0", 1536));
        }
        if ($decrypt == 'arcfour128' || $decrypt == 'arcfour256') {
            $this->decrypt->decrypt(str_repeat("\0", 1536));
        }

        if (!$this->encrypt->usesNonce()) {
            list($this->hmac_create, $createKeyLength) = self::mac_algorithm_to_hash_instance($mac_algorithm_out);
        } else {
            $this->hmac_create = new \stdClass();
            $this->hmac_create_name = $mac_algorithm_out;
            //$mac_algorithm_out = 'none';
            $createKeyLength = 0;
        }

        if ($this->hmac_create instanceof Hash) {
            $key = $kexHash->hash($keyBytes . $this->exchange_hash . 'E' . $this->session_id);
            while ($createKeyLength > strlen($key)) {
                $key .= $kexHash->hash($keyBytes . $this->exchange_hash . $key);
            }
            $this->hmac_create->setKey(substr($key, 0, $createKeyLength));
            $this->hmac_create_name = $mac_algorithm_out;
            $this->hmac_create_etm = preg_match('#-etm@openssh\.com$#', $mac_algorithm_out);
        }

        if (!$this->decrypt->usesNonce()) {
            list($this->hmac_check, $checkKeyLength) = self::mac_algorithm_to_hash_instance($mac_algorithm_in);
            $this->hmac_size = $this->hmac_check->getLengthInBytes();
        } else {
            $this->hmac_check = new \stdClass();
            $this->hmac_check_name = $mac_algorithm_in;
            //$mac_algorithm_in = 'none';
            $checkKeyLength = 0;
            $this->hmac_size = 0;
        }

        if ($this->hmac_check instanceof Hash) {
            $key = $kexHash->hash($keyBytes . $this->exchange_hash . 'F' . $this->session_id);
            while ($checkKeyLength > strlen($key)) {
                $key .= $kexHash->hash($keyBytes . $this->exchange_hash . $key);
            }
            $this->hmac_check->setKey(substr($key, 0, $checkKeyLength));
            $this->hmac_check_name = $mac_algorithm_in;
            $this->hmac_check_etm = preg_match('#-etm@openssh\.com$#', $mac_algorithm_in);
        }

        $this->regenerate_compression_context = $this->regenerate_decompression_context = true;

        return true;
    }

    /**
     * Maps an encryption algorithm name to the number of key bytes.
     *
     * @param string $algorithm Name of the encryption algorithm
     * @return int|null Number of bytes as an integer or null for unknown
     */
    private function encryption_algorithm_to_key_size($algorithm)
    {
        if ($this->bad_key_size_fix && self::bad_algorithm_candidate($algorithm)) {
            return 16;
        }

        switch ($algorithm) {
            case 'none':
                return 0;
            case 'aes128-gcm@openssh.com':
            case 'aes128-cbc':
            case 'aes128-ctr':
            case 'arcfour':
            case 'arcfour128':
            case 'blowfish-cbc':
            case 'blowfish-ctr':
            case 'twofish128-cbc':
            case 'twofish128-ctr':
                return 16;
            case '3des-cbc':
            case '3des-ctr':
            case 'aes192-cbc':
            case 'aes192-ctr':
            case 'twofish192-cbc':
            case 'twofish192-ctr':
                return 24;
            case 'aes256-gcm@openssh.com':
            case 'aes256-cbc':
            case 'aes256-ctr':
            case 'arcfour256':
            case 'twofish-cbc':
            case 'twofish256-cbc':
            case 'twofish256-ctr':
                return 32;
            case 'chacha20-poly1305@openssh.com':
                return 64;
        }
        return null;
    }

    /**
     * Maps an encryption algorithm name to an instance of a subclass of
     * \phpseclib3\Crypt\Common\SymmetricKey.
     *
     * @param string $algorithm Name of the encryption algorithm
     * @return SymmetricKey|null
     */
    private static function encryption_algorithm_to_crypt_instance($algorithm)
    {
        switch ($algorithm) {
            case '3des-cbc':
                return new TripleDES('cbc');
            case '3des-ctr':
                return new TripleDES('ctr');
            case 'aes256-cbc':
            case 'aes192-cbc':
            case 'aes128-cbc':
                return new Rijndael('cbc');
            case 'aes256-ctr':
            case 'aes192-ctr':
            case 'aes128-ctr':
                return new Rijndael('ctr');
            case 'blowfish-cbc':
                return new Blowfish('cbc');
            case 'blowfish-ctr':
                return new Blowfish('ctr');
            case 'twofish128-cbc':
            case 'twofish192-cbc':
            case 'twofish256-cbc':
            case 'twofish-cbc':
                return new Twofish('cbc');
            case 'twofish128-ctr':
            case 'twofish192-ctr':
            case 'twofish256-ctr':
                return new Twofish('ctr');
            case 'arcfour':
            case 'arcfour128':
            case 'arcfour256':
                return new RC4();
            case 'aes128-gcm@openssh.com':
            case 'aes256-gcm@openssh.com':
                return new Rijndael('gcm');
            case 'chacha20-poly1305@openssh.com':
                return new ChaCha20();
        }
        return null;
    }

    /**
     * Maps an encryption algorithm name to an instance of a subclass of
     * \phpseclib3\Crypt\Hash.
     *
     * @param string $algorithm Name of the encryption algorithm
     * @return array{Hash, int}|null
     */
    private static function mac_algorithm_to_hash_instance($algorithm)
    {
        switch ($algorithm) {
            case 'umac-64@openssh.com':
            case 'umac-64-etm@openssh.com':
                return [new Hash('umac-64'), 16];
            case 'umac-128@openssh.com':
            case 'umac-128-etm@openssh.com':
                return [new Hash('umac-128'), 16];
            case 'hmac-sha2-512':
            case 'hmac-sha2-512-etm@openssh.com':
                return [new Hash('sha512'), 64];
            case 'hmac-sha2-256':
            case 'hmac-sha2-256-etm@openssh.com':
                return [new Hash('sha256'), 32];
            case 'hmac-sha1':
            case 'hmac-sha1-etm@openssh.com':
                return [new Hash('sha1'), 20];
            case 'hmac-sha1-96':
                return [new Hash('sha1-96'), 20];
            case 'hmac-md5':
                return [new Hash('md5'), 16];
            case 'hmac-md5-96':
                return [new Hash('md5-96'), 16];
        }
    }

    /**
     * Tests whether or not proposed algorithm has a potential for issues
     *
     * @link https://www.chiark.greenend.org.uk/~sgtatham/putty/wishlist/ssh2-aesctr-openssh.html
     * @link https://bugzilla.mindrot.org/show_bug.cgi?id=1291
     * @param string $algorithm Name of the encryption algorithm
     * @return bool
     */
    private static function bad_algorithm_candidate($algorithm)
    {
        switch ($algorithm) {
            case 'arcfour256':
            case 'aes192-ctr':
            case 'aes256-ctr':
                return true;
        }

        return false;
    }

    /**
     * Login
     *
     * The $password parameter can be a plaintext password, a \phpseclib3\Crypt\RSA|EC|DSA object, a \phpseclib3\System\SSH\Agent object or an array
     *
     * @param string $username
     * @param string|PrivateKey|array[]|Agent|null ...$args
     * @return bool
     * @see self::_login()
     */
    public function login($username, ...$args)
    {
        if (!$this->login_credentials_finalized) {
            $this->auth[] = func_get_args();
        }

        // try logging with 'none' as an authentication method first since that's what
        // PuTTY does
        if (substr($this->server_identifier, 0, 15) != 'SSH-2.0-CoreFTP' && $this->auth_methods_to_continue === null) {
            if ($this->sublogin($username)) {
                return true;
            }
            if (!count($args)) {
                return false;
            }
        }
        return $this->sublogin($username, ...$args);
    }

    /**
     * Login Helper
     *
     * @param string $username
     * @param string|PrivateKey|array[]|Agent|null ...$args
     * @return bool
     * @see self::_login_helper()
     */
    protected function sublogin($username, ...$args)
    {
        if (!($this->bitmap & self::MASK_CONSTRUCTOR)) {
            $this->connect();
        }

        if (empty($args)) {
            return $this->login_helper($username);
        }

        foreach ($args as $arg) {
            switch (true) {
                case $arg instanceof PublicKey:
                    throw new \UnexpectedValueException('A PublicKey object was passed to the login method instead of a PrivateKey object');
                case $arg instanceof PrivateKey:
                case $arg instanceof Agent:
                case is_array($arg):
                case Strings::is_stringable($arg):
                    break;
                default:
                    throw new \UnexpectedValueException('$password needs to either be an instance of \phpseclib3\Crypt\Common\PrivateKey, \System\SSH\Agent, an array or a string');
            }
        }

        while (count($args)) {
            if (!$this->auth_methods_to_continue || !$this->smartMFA) {
                $newargs = $args;
                $args = [];
            } else {
                $newargs = [];
                foreach ($this->auth_methods_to_continue as $method) {
                    switch ($method) {
                        case 'publickey':
                            foreach ($args as $key => $arg) {
                                if ($arg instanceof PrivateKey || $arg instanceof Agent) {
                                    $newargs[] = $arg;
                                    unset($args[$key]);
                                    break;
                                }
                            }
                            break;
                        case 'keyboard-interactive':
                            $hasArray = $hasString = false;
                            foreach ($args as $arg) {
                                if ($hasArray || is_array($arg)) {
                                    $hasArray = true;
                                    break;
                                }
                                if ($hasString || Strings::is_stringable($arg)) {
                                    $hasString = true;
                                    break;
                                }
                            }
                            if ($hasArray && $hasString) {
                                foreach ($args as $key => $arg) {
                                    if (is_array($arg)) {
                                        $newargs[] = $arg;
                                        break 2;
                                    }
                                }
                            }
                            // fall-through
                        case 'password':
                            foreach ($args as $key => $arg) {
                                $newargs[] = $arg;
                                unset($args[$key]);
                                break;
                            }
                    }
                }
            }

            if (!count($newargs)) {
                return false;
            }

            foreach ($newargs as $arg) {
                if ($this->login_helper($username, $arg)) {
                    $this->login_credentials_finalized = true;
                    return true;
                }
            }
        }
        return false;
    }

    /**
     * Login Helper
     *
     * {@internal It might be worthwhile, at some point, to protect against {@link http://tools.ietf.org/html/rfc4251#section-9.3.9 traffic analysis}
     *           by sending dummy SSH_MSG_IGNORE messages.}
     *
     * @param string $username
     * @param string|AsymmetricKey|array[]|Agent|null ...$args
     * @return bool
     * @throws \UnexpectedValueException on receipt of unexpected packets
     * @throws \RuntimeException on other errors
     */
    private function login_helper($username, $password = null)
    {
        if (!($this->bitmap & self::MASK_CONNECTED)) {
            return false;
        }

        if (!($this->bitmap & self::MASK_LOGIN_REQ)) {
            $packet = Strings::packSSH2('Cs', NET_SSH2_MSG_SERVICE_REQUEST, 'ssh-userauth');
            $this->send_binary_packet($packet);

            try {
                $response = $this->get_binary_packet_or_close(NET_SSH2_MSG_SERVICE_ACCEPT);
            } catch (InvalidPacketLengthException $e) {
                // the first opportunity to encounter the "bad key size" error
                if (!$this->bad_key_size_fix && $this->decryptName != null && self::bad_algorithm_candidate($this->decryptName)) {
                    // bad_key_size_fix is only ever re-assigned to true here
                    // retry the connection with that new setting but we'll
                    // only try it once.
                    $this->bad_key_size_fix = true;
                    return $this->reconnect();
                }
                throw $e;
            }

            list($type) = Strings::unpackSSH2('C', $response);
            list($service) = Strings::unpackSSH2('s', $response);

            if ($service != 'ssh-userauth') {
                $this->disconnect_helper(NET_SSH2_DISCONNECT_PROTOCOL_ERROR);
                throw new \UnexpectedValueException('Expected SSH_MSG_SERVICE_ACCEPT');
            }
            $this->bitmap |= self::MASK_LOGIN_REQ;
        }

        if (strlen($this->last_interactive_response)) {
            return !Strings::is_stringable($password) && !is_array($password) ? false : $this->keyboard_interactive_process($password);
        }

        if ($password instanceof PrivateKey) {
            return $this->privatekey_login($username, $password);
        }

        if ($password instanceof Agent) {
            return $this->ssh_agent_login($username, $password);
        }

        if (is_array($password)) {
            if ($this->keyboard_interactive_login($username, $password)) {
                $this->bitmap |= self::MASK_LOGIN;
                return true;
            }
            return false;
        }

        if (!isset($password)) {
            $packet = Strings::packSSH2(
                'Cs3',
                NET_SSH2_MSG_USERAUTH_REQUEST,
                $username,
                'ssh-connection',
                'none'
            );

            $this->send_binary_packet($packet);

            $response = $this->get_binary_packet_or_close();

            list($type) = Strings::unpackSSH2('C', $response);
            switch ($type) {
                case NET_SSH2_MSG_USERAUTH_SUCCESS:
                    $this->bitmap |= self::MASK_LOGIN;
                    return true;
                case NET_SSH2_MSG_USERAUTH_FAILURE:
                    list($auth_methods) = Strings::unpackSSH2('L', $response);
                    $this->auth_methods_to_continue = $auth_methods;
                    // fall-through
                default:
                    return false;
            }
        }

        $packet = Strings::packSSH2(
            'Cs3bs',
            NET_SSH2_MSG_USERAUTH_REQUEST,
            $username,
            'ssh-connection',
            'password',
            false,
            $password
        );

        // remove the username and password from the logged packet
        if (!defined('NET_SSH2_LOGGING')) {
            $logged = null;
        } else {
            $logged = Strings::packSSH2(
                'Cs3bs',
                NET_SSH2_MSG_USERAUTH_REQUEST,
                $username,
                'ssh-connection',
                'password',
                false,
                'password'
            );
        }

        $this->send_binary_packet($packet, $logged);

        $response = $this->get_binary_packet_or_close();
        list($type) = Strings::unpackSSH2('C', $response);
        switch ($type) {
            case NET_SSH2_MSG_USERAUTH_PASSWD_CHANGEREQ: // in theory, the password can be changed
                $this->updateLogHistory('UNKNOWN (60)', 'NET_SSH2_MSG_USERAUTH_PASSWD_CHANGEREQ');

                list($message) = Strings::unpackSSH2('s', $response);
                $this->errors[] = 'SSH_MSG_USERAUTH_PASSWD_CHANGEREQ: ' . $message;

                return $this->disconnect_helper(NET_SSH2_DISCONNECT_AUTH_CANCELLED_BY_USER);
            case NET_SSH2_MSG_USERAUTH_FAILURE:
                // can we use keyboard-interactive authentication?  if not then either the login is bad or the server employees
                // multi-factor authentication
                list($auth_methods, $partial_success) = Strings::unpackSSH2('Lb', $response);
                $this->auth_methods_to_continue = $auth_methods;
                if (!$partial_success && in_array('keyboard-interactive', $auth_methods)) {
                    if ($this->keyboard_interactive_login($username, $password)) {
                        $this->bitmap |= self::MASK_LOGIN;
                        return true;
                    }
                    return false;
                }
                return false;
            case NET_SSH2_MSG_USERAUTH_SUCCESS:
                $this->bitmap |= self::MASK_LOGIN;
                return true;
        }

        return false;
    }

    /**
     * Login via keyboard-interactive authentication
     *
     * See {@link http://tools.ietf.org/html/rfc4256 RFC4256} for details.  This is not a full-featured keyboard-interactive authenticator.
     *
     * @param string $username
     * @param string|array $password
     * @return bool
     */
    private function keyboard_interactive_login($username, $password)
    {
        $packet = Strings::packSSH2(
            'Cs5',
            NET_SSH2_MSG_USERAUTH_REQUEST,
            $username,
            'ssh-connection',
            'keyboard-interactive',
            '', // language tag
            '' // submethods
        );
        $this->send_binary_packet($packet);

        return $this->keyboard_interactive_process($password);
    }

    /**
     * Handle the keyboard-interactive requests / responses.
     *
     * @param string|array ...$responses
     * @return bool
     * @throws \RuntimeException on connection error
     */
    private function keyboard_interactive_process(...$responses)
    {
        if (strlen($this->last_interactive_response)) {
            $response = $this->last_interactive_response;
        } else {
            $orig = $response = $this->get_binary_packet_or_close();
        }

        list($type) = Strings::unpackSSH2('C', $response);
        switch ($type) {
            case NET_SSH2_MSG_USERAUTH_INFO_REQUEST:
                list(
                    , // name; may be empty
                    , // instruction; may be empty
                    , // language tag; may be empty
                    $num_prompts
                ) = Strings::unpackSSH2('s3N', $response);

                for ($i = 0; $i < count($responses); $i++) {
                    if (is_array($responses[$i])) {
                        foreach ($responses[$i] as $key => $value) {
                            $this->keyboard_requests_responses[$key] = $value;
                        }
                        unset($responses[$i]);
                    }
                }
                $responses = array_values($responses);

                if (isset($this->keyboard_requests_responses)) {
                    for ($i = 0; $i < $num_prompts; $i++) {
                        list(
                            $prompt, // prompt - ie. "Password: "; must not be empty
                            // echo
                        ) = Strings::unpackSSH2('sC', $response);
                        foreach ($this->keyboard_requests_responses as $key => $value) {
                            if (substr($prompt, 0, strlen($key)) == $key) {
                                $responses[] = $value;
                                break;
                            }
                        }
                    }
                }

                // see http://tools.ietf.org/html/rfc4256#section-3.2
                if (strlen($this->last_interactive_response)) {
                    $this->last_interactive_response = '';
                } else {
                    $this->updateLogHistory('UNKNOWN (60)', 'NET_SSH2_MSG_USERAUTH_INFO_REQUEST');
                }

                if (!count($responses) && $num_prompts) {
                    $this->last_interactive_response = $orig;
                    return false;
                }

                /*
                   After obtaining the requested information from the user, the client
                   MUST respond with an SSH_MSG_USERAUTH_INFO_RESPONSE message.
                */
                // see http://tools.ietf.org/html/rfc4256#section-3.4
                $packet = $logged = pack('CN', NET_SSH2_MSG_USERAUTH_INFO_RESPONSE, count($responses));
                for ($i = 0; $i < count($responses); $i++) {
                    $packet .= Strings::packSSH2('s', $responses[$i]);
                    $logged .= Strings::packSSH2('s', 'dummy-answer');
                }

                $this->send_binary_packet($packet, $logged);

                $this->updateLogHistory('UNKNOWN (61)', 'NET_SSH2_MSG_USERAUTH_INFO_RESPONSE');

                /*
                   After receiving the response, the server MUST send either an
                   SSH_MSG_USERAUTH_SUCCESS, SSH_MSG_USERAUTH_FAILURE, or another
                   SSH_MSG_USERAUTH_INFO_REQUEST message.
                */
                // maybe phpseclib should force close the connection after x request / responses?  unless something like that is done
                // there could be an infinite loop of request / responses.
                return $this->keyboard_interactive_process();
            case NET_SSH2_MSG_USERAUTH_SUCCESS:
                return true;
            case NET_SSH2_MSG_USERAUTH_FAILURE:
                list($auth_methods) = Strings::unpackSSH2('L', $response);
                $this->auth_methods_to_continue = $auth_methods;
                return false;
        }

        return false;
    }

    /**
     * Login with an ssh-agent provided key
     *
     * @param string $username
     * @param Agent $agent
     * @return bool
     */
    private function ssh_agent_login($username, Agent $agent)
    {
        $this->agent = $agent;
        $keys = $agent->requestIdentities();
        $orig_algorithms = $this->supported_private_key_algorithms;
        foreach ($keys as $key) {
            if ($this->privatekey_login($username, $key)) {
                return true;
            }
            $this->supported_private_key_algorithms = $orig_algorithms;
        }

        return false;
    }

    /**
     * Login with an RSA private key
     *
     * {@internal It might be worthwhile, at some point, to protect against {@link http://tools.ietf.org/html/rfc4251#section-9.3.9 traffic analysis}
     *           by sending dummy SSH_MSG_IGNORE messages.}
     *
     * @param string $username
     * @param PrivateKey $privatekey
     * @return bool
     * @throws \RuntimeException on connection error
     */
    private function privatekey_login($username, PrivateKey $privatekey)
    {
        $publickey = $privatekey->getPublicKey();

        if ($publickey instanceof RSA) {
            $privatekey = $privatekey->withPadding(RSA::SIGNATURE_PKCS1);
            $algos = ['rsa-sha2-256', 'rsa-sha2-512', 'ssh-rsa'];
            if (isset($this->preferred['hostkey'])) {
                $algos = array_intersect($algos, $this->preferred['hostkey']);
            }
            $algo = self::array_intersect_first($algos, $this->supported_private_key_algorithms);
            switch ($algo) {
                case 'rsa-sha2-512':
                    $hash = 'sha512';
                    $signatureType = 'rsa-sha2-512';
                    break;
                case 'rsa-sha2-256':
                    $hash = 'sha256';
                    $signatureType = 'rsa-sha2-256';
                    break;
                //case 'ssh-rsa':
                default:
                    $hash = 'sha1';
                    $signatureType = 'ssh-rsa';
            }
        } elseif ($publickey instanceof EC) {
            $privatekey = $privatekey->withSignatureFormat('SSH2');
            $curveName = $privatekey->getCurve();
            switch ($curveName) {
                case 'Ed25519':
                    $hash = 'sha512';
                    $signatureType = 'ssh-ed25519';
                    break;
                case 'secp256r1': // nistp256
                    $hash = 'sha256';
                    $signatureType = 'ecdsa-sha2-nistp256';
                    break;
                case 'secp384r1': // nistp384
                    $hash = 'sha384';
                    $signatureType = 'ecdsa-sha2-nistp384';
                    break;
                case 'secp521r1': // nistp521
                    $hash = 'sha512';
                    $signatureType = 'ecdsa-sha2-nistp521';
                    break;
                default:
                    if (is_array($curveName)) {
                        throw new UnsupportedCurveException('Specified Curves are not supported by SSH2');
                    }
                    throw new UnsupportedCurveException('Named Curve of ' . $curveName . ' is not supported by phpseclib3\'s SSH2 implementation');
            }
        } elseif ($publickey instanceof DSA) {
            $privatekey = $privatekey->withSignatureFormat('SSH2');
            $hash = 'sha1';
            $signatureType = 'ssh-dss';
        } else {
            throw new UnsupportedAlgorithmException('Please use either an RSA key, an EC one or a DSA key');
        }

        $publickeyStr = $publickey->toString('OpenSSH', ['binary' => true]);

        $part1 = Strings::packSSH2(
            'Csss',
            NET_SSH2_MSG_USERAUTH_REQUEST,
            $username,
            'ssh-connection',
            'publickey'
        );
        $part2 = Strings::packSSH2('ss', $signatureType, $publickeyStr);

        $packet = $part1 . chr(0) . $part2;
        $this->send_binary_packet($packet);

        $response = $this->get_binary_packet_or_close(
            NET_SSH2_MSG_USERAUTH_SUCCESS,
            NET_SSH2_MSG_USERAUTH_FAILURE,
            NET_SSH2_MSG_USERAUTH_PK_OK
        );

        list($type) = Strings::unpackSSH2('C', $response);
        switch ($type) {
            case NET_SSH2_MSG_USERAUTH_FAILURE:
                list($auth_methods) = Strings::unpackSSH2('L', $response);
                if (in_array('publickey', $auth_methods) && substr($signatureType, 0, 9) == 'rsa-sha2-') {
                    $this->supported_private_key_algorithms = array_diff($this->supported_private_key_algorithms, ['rsa-sha2-256', 'rsa-sha2-512']);
                    return $this->privatekey_login($username, $privatekey);
                }
                $this->auth_methods_to_continue = $auth_methods;
                $this->errors[] = 'SSH_MSG_USERAUTH_FAILURE';
                return false;
            case NET_SSH2_MSG_USERAUTH_PK_OK:
                // we'll just take it on faith that the public key blob and the public key algorithm name are as
                // they should be
                $this->updateLogHistory('UNKNOWN (60)', 'NET_SSH2_MSG_USERAUTH_PK_OK');
                break;
            case NET_SSH2_MSG_USERAUTH_SUCCESS:
                $this->bitmap |= self::MASK_LOGIN;
                return true;
        }

        $packet = $part1 . chr(1) . $part2;
        $privatekey = $privatekey->withHash($hash);
        $signature = $privatekey->sign(Strings::packSSH2('s', $this->session_id) . $packet);
        if ($publickey instanceof RSA) {
            $signature = Strings::packSSH2('ss', $signatureType, $signature);
        }
        $packet .= Strings::packSSH2('s', $signature);

        $this->send_binary_packet($packet);

        $response = $this->get_binary_packet_or_close(
            NET_SSH2_MSG_USERAUTH_SUCCESS,
            NET_SSH2_MSG_USERAUTH_FAILURE
        );

        list($type) = Strings::unpackSSH2('C', $response);
        switch ($type) {
            case NET_SSH2_MSG_USERAUTH_FAILURE:
                // either the login is bad or the server employs multi-factor authentication
                list($auth_methods) = Strings::unpackSSH2('L', $response);
                $this->auth_methods_to_continue = $auth_methods;
                return false;
            case NET_SSH2_MSG_USERAUTH_SUCCESS:
                $this->bitmap |= self::MASK_LOGIN;
                return true;
        }
    }

    /**
     * Return the currently configured timeout
     *
     * @return int
     */
    public function getTimeout()
    {
        return $this->timeout;
    }

    /**
     * Set Timeout
     *
     * $ssh->exec('ping 127.0.0.1'); on a Linux host will never return and will run indefinitely.  setTimeout() makes it so it'll timeout.
     * Setting $timeout to false or 0 will revert to the default socket timeout.
     *
     * @param mixed $timeout
     */
    public function setTimeout($timeout)
    {
        $this->timeout = $this->curTimeout = $timeout;
    }

    /**
     * Set Keep Alive
     *
     * Sends an SSH2_MSG_IGNORE message every x seconds, if x is a positive non-zero number.
     *
     * @param int $interval
     */
    public function setKeepAlive($interval)
    {
        $this->keepAlive = $interval;
    }

    /**
     * Get the output from stdError
     *
     */
    public function getStdError()
    {
        return $this->stdErrorLog;
    }

    /**
     * Execute Command
     *
     * If $callback is set to false then \phpseclib3\Net\SSH2::get_channel_packet(self::CHANNEL_EXEC) will need to be called manually.
     * In all likelihood, this is not a feature you want to be taking advantage of.
     *
     * @param string $command
     * @param callable $callback
     * @return string|bool
     * @psalm-return ($callback is callable ? bool : string|bool)
     * @throws \RuntimeException on connection error
     */
    public function exec($command, $callback = null)
    {
        $this->curTimeout = $this->timeout;
        $this->is_timeout = false;
        $this->stdErrorLog = '';

        if (!$this->isAuthenticated()) {
            return false;
        }

        //if ($this->isPTYOpen()) {
        //    throw new \RuntimeException('If you want to run multiple exec()\'s you will need to disable (and re-enable if appropriate) a PTY for each one.');
        //}

        $this->open_channel(self::CHANNEL_EXEC);

        if ($this->request_pty === true) {
            $terminal_modes = pack('C', NET_SSH2_TTY_OP_END);
            $packet = Strings::packSSH2(
                'CNsCsN4s',
                NET_SSH2_MSG_CHANNEL_REQUEST,
                $this->server_channels[self::CHANNEL_EXEC],
                'pty-req',
                1,
                $this->term,
                $this->windowColumns,
                $this->windowRows,
                0,
                0,
                $terminal_modes
            );

            $this->send_binary_packet($packet);

            $this->channel_status[self::CHANNEL_EXEC] = NET_SSH2_MSG_CHANNEL_REQUEST;
            if (!$this->get_channel_packet(self::CHANNEL_EXEC)) {
                $this->disconnect_helper(NET_SSH2_DISCONNECT_BY_APPLICATION);
                throw new \RuntimeException('Unable to request pseudo-terminal');
            }
        }

        // sending a pty-req SSH_MSG_CHANNEL_REQUEST message is unnecessary and, in fact, in most cases, slows things
        // down.  the one place where it might be desirable is if you're doing something like \phpseclib3\Net\SSH2::exec('ping localhost &').
        // with a pty-req SSH_MSG_CHANNEL_REQUEST, exec() will return immediately and the ping process will then
        // then immediately terminate.  without such a request exec() will loop indefinitely.  the ping process won't end but
        // neither will your script.

        // although, in theory, the size of SSH_MSG_CHANNEL_REQUEST could exceed the maximum packet size established by
        // SSH_MSG_CHANNEL_OPEN_CONFIRMATION, RFC4254#section-5.1 states that the "maximum packet size" refers to the
        // "maximum size of an individual data packet". ie. SSH_MSG_CHANNEL_DATA.  RFC4254#section-5.2 corroborates.
        $packet = Strings::packSSH2(
            'CNsCs',
            NET_SSH2_MSG_CHANNEL_REQUEST,
            $this->server_channels[self::CHANNEL_EXEC],
            'exec',
            1,
            $command
        );
        $this->send_binary_packet($packet);

        $this->channel_status[self::CHANNEL_EXEC] = NET_SSH2_MSG_CHANNEL_REQUEST;

        if (!$this->get_channel_packet(self::CHANNEL_EXEC)) {
            return false;
        }

        $this->channel_status[self::CHANNEL_EXEC] = NET_SSH2_MSG_CHANNEL_DATA;

        if ($this->request_pty === true) {
            $this->channel_id_last_interactive = self::CHANNEL_EXEC;
            return true;
        }

        $output = '';
        while (true) {
            $temp = $this->get_channel_packet(self::CHANNEL_EXEC);
            switch (true) {
                case $temp === true:
                    return is_callable($callback) ? true : $output;
                case $temp === false:
                    return false;
                default:
                    if (is_callable($callback)) {
                        if ($callback($temp) === true) {
                            $this->close_channel(self::CHANNEL_EXEC);
                            return true;
                        }
                    } else {
                        $output .= $temp;
                    }
            }
        }
    }

    /**
     * How many channels are currently open?
     *
     * @return int
     */
    public function getOpenChannelCount()
    {
        return $this->channelCount;
    }

    /**
     * Opens a channel
     *
     * @param string $channel
     * @param bool $skip_extended
     * @return bool
     */
    protected function open_channel($channel, $skip_extended = false)
    {
        if (isset($this->channel_status[$channel])) {
            throw new \RuntimeException('Please close the channel (' . $channel . ') before trying to open it again');
        }

        $this->channelCount++;

        if ($this->channelCount > 1 && $this->errorOnMultipleChannels) {
            throw new \RuntimeException("Ubuntu's OpenSSH from 5.8 to 6.9 doesn't work with multiple channels");
        }

        // RFC4254 defines the (client) window size as "bytes the other party can send before it must wait for the window to
        // be adjusted".  0x7FFFFFFF is, at 2GB, the max size.  technically, it should probably be decremented, but,
        // honestly, if you're transferring more than 2GB, you probably shouldn't be using phpseclib, anyway.
        // see http://tools.ietf.org/html/rfc4254#section-5.2 for more info
        $this->window_size_server_to_client[$channel] = $this->window_size;
        // 0x8000 is the maximum max packet size, per http://tools.ietf.org/html/rfc4253#section-6.1, although since PuTTy
        // uses 0x4000, that's what will be used here, as well.
        $packet_size = 0x4000;

        $packet = Strings::packSSH2(
            'CsN3',
            NET_SSH2_MSG_CHANNEL_OPEN,
            'session',
            $channel,
            $this->window_size_server_to_client[$channel],
            $packet_size
        );

        $this->send_binary_packet($packet);

        $this->channel_status[$channel] = NET_SSH2_MSG_CHANNEL_OPEN;

        return $this->get_channel_packet($channel, $skip_extended);
    }

    /**
     * Creates an interactive shell
     *
     * Returns bool(true) if the shell was opened.
     * Returns bool(false) if the shell was already open.
     *
     * @see self::isShellOpen()
     * @see self::read()
     * @see self::write()
     * @return bool
     * @throws InsufficientSetupException if not authenticated
     * @throws \UnexpectedValueException on receipt of unexpected packets
     * @throws \RuntimeException on other errors
     */
    public function openShell()
    {
        if (!$this->isAuthenticated()) {
            throw new InsufficientSetupException('Operation disallowed prior to login()');
        }

        $this->open_channel(self::CHANNEL_SHELL);

        $terminal_modes = pack('C', NET_SSH2_TTY_OP_END);
        $packet = Strings::packSSH2(
            'CNsbsN4s',
            NET_SSH2_MSG_CHANNEL_REQUEST,
            $this->server_channels[self::CHANNEL_SHELL],
            'pty-req',
            true, // want reply
            $this->term,
            $this->windowColumns,
            $this->windowRows,
            0,
            0,
            $terminal_modes
        );

        $this->send_binary_packet($packet);

        $this->channel_status[self::CHANNEL_SHELL] = NET_SSH2_MSG_CHANNEL_REQUEST;

        if (!$this->get_channel_packet(self::CHANNEL_SHELL)) {
            throw new \RuntimeException('Unable to request pty');
        }

        $packet = Strings::packSSH2(
            'CNsb',
            NET_SSH2_MSG_CHANNEL_REQUEST,
            $this->server_channels[self::CHANNEL_SHELL],
            'shell',
            true // want reply
        );
        $this->send_binary_packet($packet);

        $response = $this->get_channel_packet(self::CHANNEL_SHELL);
        if ($response === false) {
            throw new \RuntimeException('Unable to request shell');
        }

        $this->channel_status[self::CHANNEL_SHELL] = NET_SSH2_MSG_CHANNEL_DATA;

        $this->channel_id_last_interactive = self::CHANNEL_SHELL;

        $this->bitmap |= self::MASK_SHELL;

        return true;
    }

    /**
     * Return the channel to be used with read(), write(), and reset(), if none were specified
     * @deprecated for lack of transparency in intended channel target, to be potentially replaced
     *             with method which guarantees open-ness of all yielded channels and throws
     *             error for multiple open channels
     * @see self::read()
     * @see self::write()
     * @return int
     */
    private function get_interactive_channel()
    {
        switch (true) {
            case $this->is_channel_status_data(self::CHANNEL_SUBSYSTEM):
                return self::CHANNEL_SUBSYSTEM;
            case $this->is_channel_status_data(self::CHANNEL_EXEC):
                return self::CHANNEL_EXEC;
            default:
                return self::CHANNEL_SHELL;
        }
    }

    /**
     * Indicates the DATA status on the given channel
     *
     * @param int $channel The channel number to evaluate
     * @return bool
     */
    private function is_channel_status_data($channel)
    {
        return isset($this->channel_status[$channel]) && $this->channel_status[$channel] == NET_SSH2_MSG_CHANNEL_DATA;
    }

    /**
     * Return an available open channel
     *
     * @return int
     */
    private function get_open_channel()
    {
        $channel = self::CHANNEL_EXEC;
        do {
            if (isset($this->channel_status[$channel]) && $this->channel_status[$channel] == NET_SSH2_MSG_CHANNEL_OPEN) {
                return $channel;
            }
        } while ($channel++ < self::CHANNEL_SUBSYSTEM);

        return false;
    }

    /**
     * Request agent forwarding of remote server
     *
     * @return bool
     */
    public function requestAgentForwarding()
    {
        $request_channel = $this->get_open_channel();
        if ($request_channel === false) {
            return false;
        }

        $packet = Strings::packSSH2(
            'CNsC',
            NET_SSH2_MSG_CHANNEL_REQUEST,
            $this->server_channels[$request_channel],
            'auth-agent-req@openssh.com',
            1
        );

        $this->channel_status[$request_channel] = NET_SSH2_MSG_CHANNEL_REQUEST;

        $this->send_binary_packet($packet);

        if (!$this->get_channel_packet($request_channel)) {
            return false;
        }

        $this->channel_status[$request_channel] = NET_SSH2_MSG_CHANNEL_OPEN;

        return true;
    }

    /**
     * Returns the output of an interactive shell
     *
     * Returns when there's a match for $expect, which can take the form of a string literal or,
     * if $mode == self::READ_REGEX, a regular expression.
     *
     * If not specifying a channel, an open interactive channel will be selected, or, if there are
     * no open channels, an interactive shell will be created. If there are multiple open
     * interactive channels, a legacy behavior will apply in which channel selection prioritizes
     * an active subsystem, the exec pty, and, lastly, the shell. If using multiple interactive
     * channels, callers are discouraged from relying on this legacy behavior and should specify
     * the intended channel.
     *
     * @see self::write()
     * @param string $expect
     * @param int $mode One of the self::READ_* constants
     * @param int|null $channel Channel id returned by self::getInteractiveChannelId()
     * @return string|bool|null
     * @throws \RuntimeException on connection error
     * @throws InsufficientSetupException on unexpected channel status, possibly due to closure
     */
    public function read($expect = '', $mode = self::READ_SIMPLE, $channel = null)
    {
        if (!$this->isAuthenticated()) {
            throw new InsufficientSetupException('Operation disallowed prior to login()');
        }

        $this->curTimeout = $this->timeout;
        $this->is_timeout = false;

        if ($channel === null) {
            $channel = $this->get_interactive_channel();
        }

        if (!$this->is_channel_status_data($channel) && empty($this->channel_buffers[$channel])) {
            if ($channel != self::CHANNEL_SHELL) {
                throw new InsufficientSetupException('Data is not available on channel');
            } elseif (!$this->openShell()) {
                throw new \RuntimeException('Unable to initiate an interactive shell session');
            }
        }

        if ($mode == self::READ_NEXT) {
            return $this->get_channel_packet($channel);
        }

        $match = $expect;
        while (true) {
            if ($mode == self::READ_REGEX) {
                preg_match($expect, substr($this->interactiveBuffer, -1024), $matches);
                $match = isset($matches[0]) ? $matches[0] : '';
            }
            $pos = strlen($match) ? strpos($this->interactiveBuffer, $match) : false;
            if ($pos !== false) {
                return Strings::shift($this->interactiveBuffer, $pos + strlen($match));
            }
            $response = $this->get_channel_packet($channel);
            if ($response === true) {
                return Strings::shift($this->interactiveBuffer, strlen($this->interactiveBuffer));
            }

            $this->interactiveBuffer .= $response;
        }
    }

    /**
     * Inputs a command into an interactive shell.
     *
     * If not specifying a channel, an open interactive channel will be selected, or, if there are
     * no open channels, an interactive shell will be created. If there are multiple open
     * interactive channels, a legacy behavior will apply in which channel selection prioritizes
     * an active subsystem, the exec pty, and, lastly, the shell. If using multiple interactive
     * channels, callers are discouraged from relying on this legacy behavior and should specify
     * the intended channel.
     *
     * @see SSH2::read()
     * @param string $cmd
     * @param int|null $channel Channel id returned by self::getInteractiveChannelId()
     * @return void
     * @throws \RuntimeException on connection error
     * @throws InsufficientSetupException on unexpected channel status, possibly due to closure
     * @throws TimeoutException if the write could not be completed within the requested self::setTimeout()
     */
    public function write($cmd, $channel = null)
    {
        if (!$this->isAuthenticated()) {
            throw new InsufficientSetupException('Operation disallowed prior to login()');
        }

        if ($channel === null) {
            $channel = $this->get_interactive_channel();
        }

        if (!$this->is_channel_status_data($channel)) {
            if ($channel != self::CHANNEL_SHELL) {
                throw new InsufficientSetupException('Data is not available on channel');
            } elseif (!$this->openShell()) {
                throw new \RuntimeException('Unable to initiate an interactive shell session');
            }
        }

        $this->curTimeout = $this->timeout;
        $this->is_timeout = false;
        $this->send_channel_packet($channel, $cmd);
    }

    /**
     * Start a subsystem.
     *
     * Right now only one subsystem at a time is supported. To support multiple subsystem's stopSubsystem() could accept
     * a string that contained the name of the subsystem, but at that point, only one subsystem of each type could be opened.
     * To support multiple subsystem's of the same name maybe it'd be best if startSubsystem() generated a new channel id and
     * returns that and then that that was passed into stopSubsystem() but that'll be saved for a future date and implemented
     * if there's sufficient demand for such a feature.
     *
     * @see self::stopSubsystem()
     * @param string $subsystem
     * @return bool
     */
    public function startSubsystem($subsystem)
    {
        $this->open_channel(self::CHANNEL_SUBSYSTEM);

        $packet = Strings::packSSH2(
            'CNsCs',
            NET_SSH2_MSG_CHANNEL_REQUEST,
            $this->server_channels[self::CHANNEL_SUBSYSTEM],
            'subsystem',
            1,
            $subsystem
        );
        $this->send_binary_packet($packet);

        $this->channel_status[self::CHANNEL_SUBSYSTEM] = NET_SSH2_MSG_CHANNEL_REQUEST;

        if (!$this->get_channel_packet(self::CHANNEL_SUBSYSTEM)) {
            return false;
        }

        $this->channel_status[self::CHANNEL_SUBSYSTEM] = NET_SSH2_MSG_CHANNEL_DATA;

        $this->channel_id_last_interactive = self::CHANNEL_SUBSYSTEM;

        return true;
    }

    /**
     * Stops a subsystem.
     *
     * @see self::startSubsystem()
     * @return bool
     */
    public function stopSubsystem()
    {
        if ($this->isInteractiveChannelOpen(self::CHANNEL_SUBSYSTEM)) {
            $this->close_channel(self::CHANNEL_SUBSYSTEM);
        }
        return true;
    }

    /**
     * Closes a channel
     *
     * If read() timed out you might want to just close the channel and have it auto-restart on the next read() call
     *
     * If not specifying a channel, an open interactive channel will be selected. If there are
     * multiple open interactive channels, a legacy behavior will apply in which channel selection
     * prioritizes an active subsystem, the exec pty, and, lastly, the shell. If using multiple
     * interactive channels, callers are discouraged from relying on this legacy behavior and
     * should specify the intended channel.
     *
     * @param int|null $channel Channel id returned by self::getInteractiveChannelId()
     * @return void
     */
    public function reset($channel = null)
    {
        if ($channel === null) {
            $channel = $this->get_interactive_channel();
        }
        if ($this->isInteractiveChannelOpen($channel)) {
            $this->close_channel($channel);
        }
    }

    /**
     * Send EOF on a channel
     *
     * Sends an EOF to the stream; this is typically used to close standard
     * input, while keeping output and error alive.
     *
     * @param int|null $channel Channel id returned by self::getInteractiveChannelId()
     * @return void
     */
    public function sendEOF($channel = null)
    {
        if ($channel === null) {
            $channel = $this->get_interactive_channel();
        }

        $excludeStatuses = [NET_SSH2_MSG_CHANNEL_EOF, NET_SSH2_MSG_CHANNEL_CLOSE];
        if (isset($this->channel_status[$channel]) && !in_array($this->channel_status[$channel], $excludeStatuses)) {
            $this->send_binary_packet(pack('CN', NET_SSH2_MSG_CHANNEL_EOF, $this->server_channels[$channel]));
        }
    }

    /**
     * Is timeout?
     *
     * Did exec() or read() return because they timed out or because they encountered the end?
     *
     */
    public function isTimeout()
    {
        return $this->is_timeout;
    }

    /**
     * Disconnect
     *
     */
    public function disconnect()
    {
        $this->disconnect_helper(NET_SSH2_DISCONNECT_BY_APPLICATION);
        if (isset($this->realtime_log_file) && is_resource($this->realtime_log_file)) {
            fclose($this->realtime_log_file);
        }
        unset(self::$connections[$this->getResourceId()]);
    }

    /**
     * Destructor.
     *
     * Will be called, automatically, if you're supporting just PHP5.  If you're supporting PHP4, you'll need to call
     * disconnect().
     *
     */
    public function __destruct()
    {
        $this->disconnect();
    }

    /**
     * Is the connection still active?
     *
     * $level has 3x possible values:
     * 0 (default): phpseclib takes a passive approach to see if the connection is still active by calling feof()
     *    on the socket
     * 1: phpseclib takes an active approach to see if the connection is still active by sending an SSH_MSG_IGNORE
     *    packet that doesn't require a response
     * 2: phpseclib takes an active approach to see if the connection is still active by sending an SSH_MSG_CHANNEL_OPEN
     *    packet and imediately trying to close that channel. some routers, in particular, however, will only let you
     *    open one channel, so this approach could yield false positives
     *
     * @param int $level
     * @return bool
     */
    public function isConnected($level = 0)
    {
        if (!is_int($level) || $level < 0 || $level > 2) {
            throw new \InvalidArgumentException('$level must be 0, 1 or 2');
        }

        if ($level == 0) {
            return ($this->bitmap & self::MASK_CONNECTED) && is_resource($this->fsock) && !feof($this->fsock);
        }
        try {
            if ($level == 1) {
                $this->send_binary_packet(pack('CN', NET_SSH2_MSG_IGNORE, 0));
            } else {
                $this->open_channel(self::CHANNEL_KEEP_ALIVE);
                $this->close_channel(self::CHANNEL_KEEP_ALIVE);
            }
            return true;
        } catch (\Exception $e) {
            return false;
        }
    }

    /**
     * Have you successfully been logged in?
     *
     * @return bool
     */
    public function isAuthenticated()
    {
        return (bool) ($this->bitmap & self::MASK_LOGIN);
    }

    /**
     * Is the interactive shell active?
     *
     * @return bool
     */
    public function isShellOpen()
    {
        return $this->isInteractiveChannelOpen(self::CHANNEL_SHELL);
    }

    /**
     * Is the exec pty active?
     *
     * @return bool
     */
    public function isPTYOpen()
    {
        return $this->isInteractiveChannelOpen(self::CHANNEL_EXEC);
    }

    /**
     * Is the given interactive channel active?
     *
     * @param int $channel Channel id returned by self::getInteractiveChannelId()
     * @return bool
     */
    public function isInteractiveChannelOpen($channel)
    {
        return $this->isAuthenticated() && $this->is_channel_status_data($channel);
    }

    /**
     * Returns a channel identifier, presently of the last interactive channel opened, regardless of current status.
     * Returns 0 if no interactive channel has been opened.
     *
     * @see self::isInteractiveChannelOpen()
     * @return int
     */
    public function getInteractiveChannelId()
    {
        return $this->channel_id_last_interactive;
    }

    /**
     * Pings a server connection, or tries to reconnect if the connection has gone down
     *
     * Inspired by http://php.net/manual/en/mysqli.ping.php
     *
     * @return bool
     */
    public function ping()
    {
        if (!$this->isAuthenticated()) {
            if (!empty($this->auth)) {
                return $this->reconnect();
            }
            return false;
        }

        try {
            $this->open_channel(self::CHANNEL_KEEP_ALIVE);
        } catch (\RuntimeException $e) {
            return $this->reconnect();
        }

        $this->close_channel(self::CHANNEL_KEEP_ALIVE);
        return true;
    }

    /**
     * In situ reconnect method
     *
     * @return boolean
     */
    private function reconnect()
    {
        $this->disconnect_helper(NET_SSH2_DISCONNECT_BY_APPLICATION);
        $this->connect();
        foreach ($this->auth as $auth) {
            $result = $this->login(...$auth);
        }
        return $result;
    }

    /**
     * Resets a connection for re-use
     */
    protected function reset_connection()
    {
        if (is_resource($this->fsock) && get_resource_type($this->fsock) === 'stream') {
            fclose($this->fsock);
        }
        $this->fsock = null;
        $this->bitmap = 0;
        $this->binary_packet_buffer = null;
        $this->decrypt = $this->encrypt = false;
        $this->decrypt_block_size = $this->encrypt_block_size = 8;
        $this->hmac_check = $this->hmac_create = false;
        $this->hmac_size = false;
        $this->session_id = false;
        $this->last_packet = null;
        $this->get_seq_no = $this->send_seq_no = 0;
        $this->channel_status = [];
        $this->channel_id_last_interactive = 0;
        $this->channel_buffers = [];
        $this->channel_buffers_write = [];
    }

    /**
     * @return int[] second and microsecond stream timeout options based on user-requested timeout and keep-alive, or the default socket timeout by default, which mirrors PHP socket streams.
     */
    private function get_stream_timeout()
    {
        $sec = ini_get('default_socket_timeout');
        $usec = 0;
        if ($this->curTimeout > 0) {
            $sec = (int) floor($this->curTimeout);
            $usec = (int) (1000000 * ($this->curTimeout - $sec));
        }
        if ($this->keepAlive > 0) {
            $elapsed = microtime(true) - $this->last_packet;
            $timeout = max($this->keepAlive - $elapsed, 0);
            if (!$this->curTimeout || $timeout < $this->curTimeout) {
                $sec = (int) floor($timeout);
                $usec = (int) (1000000 * ($timeout - $sec));
            }
        }
        return [$sec, $usec];
    }

    /**
     * Retrieves the next packet with added timeout and type handling
     *
     * @param string $message_types Message types to enforce in response, closing if not met
     * @return string
     * @throws ConnectionClosedException If an error has occurred preventing read of the next packet
     */
    private function get_binary_packet_or_close(...$message_types)
    {
        try {
            $packet = $this->get_binary_packet();
            if (count($message_types) > 0 && !in_array(ord($packet[0]), $message_types)) {
                $this->disconnect_helper(NET_SSH2_DISCONNECT_PROTOCOL_ERROR);
                throw new ConnectionClosedException('Bad message type. Expected: #'
                    . implode(', #', $message_types) . '. Got: #' . ord($packet[0]));
            }
            return $packet;
        } catch (TimeoutException $e) {
            $this->disconnect_helper(NET_SSH2_DISCONNECT_BY_APPLICATION);
            throw new ConnectionClosedException('Connection closed due to timeout');
        }
    }

    /**
     * Gets Binary Packets
     *
     * See '6. Binary Packet Protocol' of rfc4253 for more info.
     *
     * @see self::_send_binary_packet()
     * @return string
     * @throws TimeoutException If user requested timeout was reached while waiting for next packet
     * @throws ConnectionClosedException If an error has occurred preventing read of the next packet
     */
    private function get_binary_packet()
    {
        if (!is_resource($this->fsock)) {
            throw new \InvalidArgumentException('fsock is not a resource.');
        }
        if (!$this->keyExchangeInProgress && count($this->kex_buffer)) {
            return $this->filter(array_shift($this->kex_buffer));
        }
        if ($this->binary_packet_buffer == null) {
            // buffer the packet to permit continued reads across timeouts
            $this->binary_packet_buffer = (object) [
                'read_time' => 0, // the time to read the packet from the socket
                'raw' => '', // the raw payload read from the socket
                'plain' => '', // the packet in plain text, excluding packet_length header
                'packet_length' => null, // the packet_length value pulled from the payload
                'size' => $this->decrypt_block_size, // the total size of this packet to be read from the socket
                                                     // initialize to read single block until packet_length is available
            ];
        }
        $packet = $this->binary_packet_buffer;
        while (strlen($packet->raw) < $packet->size) {
            if (feof($this->fsock)) {
                $this->disconnect_helper(NET_SSH2_DISCONNECT_CONNECTION_LOST);
                throw new ConnectionClosedException('Connection closed by server');
            }
            if ($this->curTimeout < 0) {
                $this->is_timeout = true;
                throw new TimeoutException('Timed out waiting for server');
            }
            $this->send_keep_alive();

            list($sec, $usec) = $this->get_stream_timeout();
            stream_set_timeout($this->fsock, $sec, $usec);
            $start = microtime(true);
            $raw = stream_get_contents($this->fsock, $packet->size - strlen($packet->raw));
            $elapsed = microtime(true) - $start;
            $packet->read_time += $elapsed;
            if ($this->curTimeout > 0) {
                $this->curTimeout -= $elapsed;
            }
            if ($raw === false) {
                $this->disconnect_helper(NET_SSH2_DISCONNECT_CONNECTION_LOST);
                throw new ConnectionClosedException('Connection closed by server');
            } elseif (!strlen($raw)) {
                continue;
            }
            $packet->raw .= $raw;
            if (!$packet->packet_length) {
                $this->get_binary_packet_size($packet);
            }
        }

        if (strlen($packet->raw) != $packet->size) {
            throw new \RuntimeException('Size of packet was not expected length');
        }
        // destroy buffer as packet represents the entire payload and should be processed in full
        $this->binary_packet_buffer = null;
        // copy the raw payload, so as not to destroy original
        $raw = $packet->raw;
        if ($this->hmac_check instanceof Hash) {
            $hmac = Strings::pop($raw, $this->hmac_size);
        }
        $packet_length_header_size = 4;
        if ($this->decrypt) {
            switch ($this->decryptName) {
                case 'aes128-gcm@openssh.com':
                case 'aes256-gcm@openssh.com':
                    $this->decrypt->setNonce(
                        $this->decryptFixedPart .
                        $this->decryptInvocationCounter
                    );
                    Strings::increment_str($this->decryptInvocationCounter);
                    $this->decrypt->setAAD(Strings::shift($raw, $packet_length_header_size));
                    $this->decrypt->setTag(Strings::pop($raw, $this->decrypt_block_size));
                    $packet->plain = $this->decrypt->decrypt($raw);
                    break;
                case 'chacha20-poly1305@openssh.com':
                    // This should be impossible, but we are checking anyway to narrow the type for Psalm.
                    if (!($this->decrypt instanceof ChaCha20)) {
                        throw new \LogicException('$this->decrypt is not a ' . ChaCha20::class);
                    }
                    $this->decrypt->setNonce(pack('N2', 0, $this->get_seq_no));
                    $this->decrypt->setCounter(0);
                    // this is the same approach that's implemented in Salsa20::createPoly1305Key()
                    // but we don't want to use the same AEAD construction that RFC8439 describes
                    // for ChaCha20-Poly1305 so we won't rely on it (see Salsa20::poly1305())
                    $this->decrypt->setPoly1305Key(
                        $this->decrypt->encrypt(str_repeat("\0", 32))
                    );
                    $this->decrypt->setAAD(Strings::shift($raw, $packet_length_header_size));
                    $this->decrypt->setCounter(1);
                    $this->decrypt->setTag(Strings::pop($raw, 16));
                    $packet->plain = $this->decrypt->decrypt($raw);
                    break;
                default:
                    if (!$this->hmac_check instanceof Hash || !$this->hmac_check_etm) {
                        // first block was already decrypted for contained packet_length header
                        Strings::shift($raw, $this->decrypt_block_size);
                        if (strlen($raw) > 0) {
                            $packet->plain .= $this->decrypt->decrypt($raw);
                        }
                    } else {
                        Strings::shift($raw, $packet_length_header_size);
                        $packet->plain = $this->decrypt->decrypt($raw);
                    }
                    break;
            }
        } else {
            Strings::shift($raw, $packet_length_header_size);
            $packet->plain = $raw;
        }
        if ($this->hmac_check instanceof Hash) {
            $reconstructed = !$this->hmac_check_etm ?
                pack('Na*', $packet->packet_length, $packet->plain) :
                substr($packet->raw, 0, -$this->hmac_size);
            if (($this->hmac_check->getHash() & "\xFF\xFF\xFF\xFF") == 'umac') {
                $this->hmac_check->setNonce("\0\0\0\0" . pack('N', $this->get_seq_no));
                if ($hmac != $this->hmac_check->hash($reconstructed)) {
                    $this->disconnect_helper(NET_SSH2_DISCONNECT_MAC_ERROR);
                    throw new ConnectionClosedException('Invalid UMAC');
                }
            } else {
                if ($hmac != $this->hmac_check->hash(pack('Na*', $this->get_seq_no, $reconstructed))) {
                    $this->disconnect_helper(NET_SSH2_DISCONNECT_MAC_ERROR);
                    throw new ConnectionClosedException('Invalid HMAC');
                }
            }
        }
        $padding_length = 0;
        $payload = $packet->plain;
        $padding_length = unpack('Cpadding_length', Strings::shift($payload, 1))['padding_length'];
        if ($padding_length > 0) {
            Strings::pop($payload, $padding_length);
        }

        if (!$this->keyExchangeInProgress) {
            $this->bytesTransferredSinceLastKEX += $packet->packet_length + $padding_length + 5;
        }

        if (empty($payload)) {
            $this->disconnect_helper(NET_SSH2_DISCONNECT_PROTOCOL_ERROR);
            throw new ConnectionClosedException('Plaintext is too short');
        }

        switch ($this->decompress) {
            case self::NET_SSH2_COMPRESSION_ZLIB_AT_OPENSSH:
                if (!$this->isAuthenticated()) {
                    break;
                }
                // fall-through
            case self::NET_SSH2_COMPRESSION_ZLIB:
                if ($this->regenerate_decompression_context) {
                    $this->regenerate_decompression_context = false;

                    $cmf = ord($payload[0]);
                    $cm = $cmf & 0x0F;
                    if ($cm != 8) { // deflate
                        throw new UnsupportedAlgorithmException("Only CM = 8 ('deflate') is supported ($cm)");
                    }
                    $cinfo = ($cmf & 0xF0) >> 4;
                    if ($cinfo > 7) {
                        throw new \RuntimeException("CINFO above 7 is not allowed ($cinfo)");
                    }
                    $windowSize = 1 << ($cinfo + 8);

                    $flg = ord($payload[1]);
                    //$fcheck = $flg && 0x0F;
                    if ((($cmf << 8) | $flg) % 31) {
                        throw new \RuntimeException('fcheck failed');
                    }
                    $fdict = boolval($flg & 0x20);
                    $flevel = ($flg & 0xC0) >> 6;

                    $this->decompress_context = inflate_init(ZLIB_ENCODING_RAW, ['window' => $cinfo + 8]);
                    $payload = substr($payload, 2);
                }
                if ($this->decompress_context) {
                    $payload = inflate_add($this->decompress_context, $payload, ZLIB_PARTIAL_FLUSH);
                }
        }

        $this->get_seq_no++;

        if (defined('NET_SSH2_LOGGING')) {
            $current = microtime(true);
            $message_number = isset(self::$message_numbers[ord($payload[0])]) ? self::$message_numbers[ord($payload[0])] : 'UNKNOWN (' . ord($payload[0]) . ')';
            $message_number = '<- ' . $message_number .
                              ' (since last: ' . round($current - $this->last_packet, 4) . ', network: ' . round($packet->read_time, 4) . 's)';
            $this->append_log($message_number, $payload);
        }
        $this->last_packet = microtime(true);

        if ($this->bytesTransferredSinceLastKEX > $this->doKeyReexchangeAfterXBytes) {
            $this->key_exchange();
        }

        return $this->filter($payload);
    }

    /**
     * @param object $packet The packet object being constructed, passed by reference
     *        The size, packet_length, and plain properties of this object may be modified in processing
     * @throws InvalidPacketLengthException if the packet length header is invalid
     */
    private function get_binary_packet_size(&$packet)
    {
        $packet_length_header_size = 4;
        if (strlen($packet->raw) < $packet_length_header_size) {
            return;
        }
        $packet_length = 0;
        $added_validation_length = 0; // indicates when the packet length header is included when validating packet length against block size
        if ($this->decrypt) {
            switch ($this->decryptName) {
                case 'aes128-gcm@openssh.com':
                case 'aes256-gcm@openssh.com':
                    $packet_length = unpack('Npacket_length', substr($packet->raw, 0, $packet_length_header_size))['packet_length'];
                    $packet->size = $packet_length_header_size + $packet_length + $this->decrypt_block_size; // expect tag
                    break;
                case 'chacha20-poly1305@openssh.com':
                    $this->lengthDecrypt->setNonce(pack('N2', 0, $this->get_seq_no));
                    $packet_length_header = $this->lengthDecrypt->decrypt(substr($packet->raw, 0, $packet_length_header_size));
                    $packet_length = unpack('Npacket_length', $packet_length_header)['packet_length'];
                    $packet->size = $packet_length_header_size + $packet_length + 16; // expect tag
                    break;
                default:
                    if (!$this->hmac_check instanceof Hash || !$this->hmac_check_etm) {
                        if (strlen($packet->raw) < $this->decrypt_block_size) {
                            return;
                        }
                        $packet->plain = $this->decrypt->decrypt(substr($packet->raw, 0, $this->decrypt_block_size));
                        $packet_length = unpack('Npacket_length', Strings::shift($packet->plain, $packet_length_header_size))['packet_length'];
                        $packet->size = $packet_length_header_size + $packet_length;
                        $added_validation_length = $packet_length_header_size;
                    } else {
                        $packet_length = unpack('Npacket_length', substr($packet->raw, 0, $packet_length_header_size))['packet_length'];
                        $packet->size = $packet_length_header_size + $packet_length;
                    }
                    break;
            }
        } else {
            $packet_length = unpack('Npacket_length', substr($packet->raw, 0, $packet_length_header_size))['packet_length'];
            $packet->size = $packet_length_header_size + $packet_length;
            $added_validation_length = $packet_length_header_size;
        }
        // quoting <http://tools.ietf.org/html/rfc4253#section-6.1>,
        // "implementations SHOULD check that the packet length is reasonable"
        // PuTTY uses 0x9000 as the actual max packet size and so to shall we
        if (
            $packet_length <= 0 || $packet_length > 0x9000
            || ($packet_length + $added_validation_length) % $this->decrypt_block_size != 0
        ) {
            $this->disconnect_helper(NET_SSH2_DISCONNECT_PROTOCOL_ERROR);
            throw new InvalidPacketLengthException('Invalid packet length');
        }
        if ($this->hmac_check instanceof Hash) {
            $packet->size += $this->hmac_size;
        }
        $packet->packet_length = $packet_length;
    }

    /**
     * Handle Disconnect
     *
     * Because some binary packets need to be ignored...
     *
     * @see self::filter()
     * @see self::key_exchange()
     * @return boolean
     * @access private
     */
    private function handleDisconnect($payload)
    {
        Strings::shift($payload, 1);
        list($reason_code, $message) = Strings::unpackSSH2('Ns', $payload);
        $this->errors[] = 'SSH_MSG_DISCONNECT: ' . self::$disconnect_reasons[$reason_code] . "\r\n$message";
        $this->disconnect_helper(NET_SSH2_DISCONNECT_CONNECTION_LOST);
        throw new ConnectionClosedException('Connection closed by server');
    }

    /**
     * Filter Binary Packets
     *
     * Because some binary packets need to be ignored...
     *
     * @see self::_get_binary_packet()
     * @param string $payload
     * @return string
     */
    private function filter($payload)
    {
        if (ord($payload[0]) == NET_SSH2_MSG_DISCONNECT) {
            return $this->handleDisconnect($payload);
        }

        if ($this->session_id === false && $this->keyExchangeInProgress) {
            return $payload;
        }

        switch (ord($payload[0])) {
            case NET_SSH2_MSG_IGNORE:
                $payload = $this->get_binary_packet();
                break;
            case NET_SSH2_MSG_DEBUG:
                Strings::shift($payload, 2); // second byte is "always_display"
                list($message) = Strings::unpackSSH2('s', $payload);
                $this->errors[] = "SSH_MSG_DEBUG: $message";
                $payload = $this->get_binary_packet();
                break;
            case NET_SSH2_MSG_UNIMPLEMENTED:
                break; // return payload
            case NET_SSH2_MSG_KEXINIT:
                // this is here for server initiated key re-exchanges after the initial key exchange
                if (!$this->keyExchangeInProgress && $this->session_id !== false) {
                    if (!$this->key_exchange($payload)) {
                        $this->disconnect_helper(NET_SSH2_DISCONNECT_KEY_EXCHANGE_FAILED);
                        throw new ConnectionClosedException('Key exchange failed');
                    }
                    $payload = $this->get_binary_packet();
                }
                break;
            case NET_SSH2_MSG_EXT_INFO:
                Strings::shift($payload, 1);
                list($nr_extensions) = Strings::unpackSSH2('N', $payload);
                for ($i = 0; $i < $nr_extensions; $i++) {
                    list($extension_name, $extension_value) = Strings::unpackSSH2('ss', $payload);
                    if ($extension_name == 'server-sig-algs') {
                        $this->supported_private_key_algorithms = explode(',', $extension_value);
                    }
                }
                $payload = $this->get_binary_packet();
        }

        /*
           Once a party has sent a SSH_MSG_KEXINIT message for key exchange or
           re-exchange, until it has sent a SSH_MSG_NEWKEYS message (Section
           7.3), it MUST NOT send any messages other than:

           o  Transport layer generic messages (1 to 19) (but
              SSH_MSG_SERVICE_REQUEST and SSH_MSG_SERVICE_ACCEPT MUST NOT be
              sent);

           o  Algorithm negotiation messages (20 to 29) (but further
              SSH_MSG_KEXINIT messages MUST NOT be sent);

           o  Specific key exchange method messages (30 to 49).

           -- https://www.rfc-editor.org/rfc/rfc4253#section-7.1
        */
        if ($this->keyExchangeInProgress) {
            return $payload;
        }

        // see http://tools.ietf.org/html/rfc4252#section-5.4; only called when the encryption has been activated and when we haven't already logged in
        if (($this->bitmap & self::MASK_CONNECTED) && !$this->isAuthenticated() && ord($payload[0]) == NET_SSH2_MSG_USERAUTH_BANNER) {
            Strings::shift($payload, 1);
            list($this->banner_message) = Strings::unpackSSH2('s', $payload);
            $payload = $this->get_binary_packet();
        }

        // only called when we've already logged in
        if (($this->bitmap & self::MASK_CONNECTED) && $this->isAuthenticated()) {
            switch (ord($payload[0])) {
                case NET_SSH2_MSG_CHANNEL_REQUEST:
                    if (strlen($payload) == 31) {
                        $unpacked = unpack('cpacket_type/Nchannel/Nlength', $payload);
                        $packet_type = $unpacked['packet_type'];
                        $channel = $unpacked['channel'];
                        $length = $unpacked['length'];
                        if (substr($payload, 9, $length) == 'keepalive@openssh.com' && isset($this->server_channels[$channel])) {
                            if (ord(substr($payload, 9 + $length))) { // want reply
                                $this->send_binary_packet(pack('CN', NET_SSH2_MSG_CHANNEL_SUCCESS, $this->server_channels[$channel]));
                            }
                            $payload = $this->get_binary_packet();
                        }
                    }
                    break;
                case NET_SSH2_MSG_GLOBAL_REQUEST: // see http://tools.ietf.org/html/rfc4254#section-4
                    Strings::shift($payload, 1);
                    list($request_name) = Strings::unpackSSH2('s', $payload);
                    $this->errors[] = "SSH_MSG_GLOBAL_REQUEST: $request_name";
                    $this->send_binary_packet(pack('C', NET_SSH2_MSG_REQUEST_FAILURE));
                    $payload = $this->get_binary_packet();
                    break;
                case NET_SSH2_MSG_CHANNEL_OPEN: // see http://tools.ietf.org/html/rfc4254#section-5.1
                    Strings::shift($payload, 1);
                    list($data, $server_channel) = Strings::unpackSSH2('sN', $payload);
                    switch ($data) {
                        case 'auth-agent':
                        case 'auth-agent@openssh.com':
                            if (isset($this->agent)) {
                                $new_channel = self::CHANNEL_AGENT_FORWARD;

                                list(
                                    $remote_window_size,
                                    $remote_maximum_packet_size
                                ) = Strings::unpackSSH2('NN', $payload);

                                $this->packet_size_client_to_server[$new_channel] = $remote_window_size;
                                $this->window_size_server_to_client[$new_channel] = $remote_maximum_packet_size;
                                $this->window_size_client_to_server[$new_channel] = $this->window_size;

                                $packet_size = 0x4000;

                                $packet = pack(
                                    'CN4',
                                    NET_SSH2_MSG_CHANNEL_OPEN_CONFIRMATION,
                                    $server_channel,
                                    $new_channel,
                                    $packet_size,
                                    $packet_size
                                );

                                $this->server_channels[$new_channel] = $server_channel;
                                $this->channel_status[$new_channel] = NET_SSH2_MSG_CHANNEL_OPEN_CONFIRMATION;
                                $this->send_binary_packet($packet);
                            }
                            break;
                        default:
                            $packet = Strings::packSSH2(
                                'CN2ss',
                                NET_SSH2_MSG_CHANNEL_OPEN_FAILURE,
                                $server_channel,
                                NET_SSH2_OPEN_ADMINISTRATIVELY_PROHIBITED,
                                '', // description
                                '' // language tag
                            );
                            $this->send_binary_packet($packet);
                    }

                    $payload = $this->get_binary_packet();
                    break;
            }
        }

        return $payload;
    }

    /**
     * Enable Quiet Mode
     *
     * Suppress stderr from output
     *
     */
    public function enableQuietMode()
    {
        $this->quiet_mode = true;
    }

    /**
     * Disable Quiet Mode
     *
     * Show stderr in output
     *
     */
    public function disableQuietMode()
    {
        $this->quiet_mode = false;
    }

    /**
     * Returns whether Quiet Mode is enabled or not
     *
     * @see self::enableQuietMode()
     * @see self::disableQuietMode()
     * @return bool
     */
    public function isQuietModeEnabled()
    {
        return $this->quiet_mode;
    }

    /**
     * Enable request-pty when using exec()
     *
     */
    public function enablePTY()
    {
        $this->request_pty = true;
    }

    /**
     * Disable request-pty when using exec()
     *
     */
    public function disablePTY()
    {
        if ($this->isPTYOpen()) {
            $this->close_channel(self::CHANNEL_EXEC);
        }
        $this->request_pty = false;
    }

    /**
     * Returns whether request-pty is enabled or not
     *
     * @see self::enablePTY()
     * @see self::disablePTY()
     * @return bool
     */
    public function isPTYEnabled()
    {
        return $this->request_pty;
    }

    /**
     * Gets channel data
     *
     * Returns the data as a string. bool(true) is returned if:
     *
     * - the server closes the channel
     * - if the connection times out
     * - if a window adjust packet is received on the given negated client channel
     * - if the channel status is CHANNEL_OPEN and the response was CHANNEL_OPEN_CONFIRMATION
     * - if the channel status is CHANNEL_REQUEST and the response was CHANNEL_SUCCESS
     * - if the channel status is CHANNEL_CLOSE and the response was CHANNEL_CLOSE
     *
     * bool(false) is returned if:
     *
     * - if the channel status is CHANNEL_REQUEST and the response was CHANNEL_FAILURE
     *
     * @param int $client_channel Specifies the channel to return data for, and data received
     *        on other channels is buffered. The respective negative value of a channel is
     *        also supported for the case that the caller is awaiting adjustment of the data
     *        window, and where data received on that respective channel is also buffered.
     * @param bool $skip_extended
     * @return mixed
     * @throws \RuntimeException on connection error
     */
    protected function get_channel_packet($client_channel, $skip_extended = false)
    {
        if (!empty($this->channel_buffers[$client_channel])) {
            // in phpseclib 4.0 this should be changed to $this->channel_status[$client_channel] ?? null
            switch (isset($this->channel_status[$client_channel]) ? $this->channel_status[$client_channel] : null) {
                case NET_SSH2_MSG_CHANNEL_REQUEST:
                    foreach ($this->channel_buffers[$client_channel] as $i => $packet) {
                        switch (ord($packet[0])) {
                            case NET_SSH2_MSG_CHANNEL_SUCCESS:
                            case NET_SSH2_MSG_CHANNEL_FAILURE:
                                unset($this->channel_buffers[$client_channel][$i]);
                                return substr($packet, 1);
                        }
                    }
                    break;
                default:
                    return substr(array_shift($this->channel_buffers[$client_channel]), 1);
            }
        }

        while (true) {
            try {
                $response = $this->get_binary_packet();
            } catch (TimeoutException $e) {
                return true;
            }
            list($type) = Strings::unpackSSH2('C', $response);
            if (strlen($response) >= 4) {
                list($channel) = Strings::unpackSSH2('N', $response);
            }

            // will not be setup yet on incoming channel open request
            if (isset($channel) && isset($this->channel_status[$channel]) && isset($this->window_size_server_to_client[$channel])) {
                $this->window_size_server_to_client[$channel] -= strlen($response);

                // resize the window, if appropriate
                if ($this->window_size_server_to_client[$channel] < 0) {
                // PuTTY does something more analogous to the following:
                //if ($this->window_size_server_to_client[$channel] < 0x3FFFFFFF) {
                    $packet = pack('CNN', NET_SSH2_MSG_CHANNEL_WINDOW_ADJUST, $this->server_channels[$channel], $this->window_resize);
                    $this->send_binary_packet($packet);
                    $this->window_size_server_to_client[$channel] += $this->window_resize;
                }

                switch ($type) {
                    case NET_SSH2_MSG_CHANNEL_WINDOW_ADJUST:
                        list($window_size) = Strings::unpackSSH2('N', $response);
                        $this->window_size_client_to_server[$channel] += $window_size;
                        if ($channel == -$client_channel) {
                            return true;
                        }

                        continue 2;
                    case NET_SSH2_MSG_CHANNEL_EXTENDED_DATA:
                        /*
                        if ($client_channel == self::CHANNEL_EXEC) {
                            $this->send_channel_packet($client_channel, chr(0));
                        }
                        */
                        // currently, there's only one possible value for $data_type_code: NET_SSH2_EXTENDED_DATA_STDERR
                        list($data_type_code, $data) = Strings::unpackSSH2('Ns', $response);
                        $this->stdErrorLog .= $data;
                        if ($skip_extended || $this->quiet_mode) {
                            continue 2;
                        }
                        if ($client_channel == $channel && $this->channel_status[$channel] == NET_SSH2_MSG_CHANNEL_DATA) {
                            return $data;
                        }
                        $this->channel_buffers[$channel][] = chr($type) . $data;

                        continue 2;
                    case NET_SSH2_MSG_CHANNEL_REQUEST:
                        if (!isset($this->channel_status[$channel])) {
                            continue 2;
                        }
                        list($value) = Strings::unpackSSH2('s', $response);
                        switch ($value) {
                            case 'exit-signal':
                                list(
                                    , // FALSE
                                    $signal_name,
                                    , // core dumped
                                    $error_message
                                ) = Strings::unpackSSH2('bsbs', $response);

                                $this->errors[] = "SSH_MSG_CHANNEL_REQUEST (exit-signal): $signal_name";
                                if (strlen($error_message)) {
                                    $this->errors[count($this->errors) - 1] .= "\r\n$error_message";
                                }

                                if (isset($this->channel_status[$channel]) && $this->channel_status[$channel] != NET_SSH2_MSG_CHANNEL_CLOSE) {
                                    if ($this->channel_status[$channel] != NET_SSH2_MSG_CHANNEL_EOF) {
                                        $this->send_binary_packet(pack('CN', NET_SSH2_MSG_CHANNEL_EOF, $this->server_channels[$channel]));
                                    }
                                    $this->send_binary_packet(pack('CN', NET_SSH2_MSG_CHANNEL_CLOSE, $this->server_channels[$channel]));

                                    $this->channel_status[$channel] = NET_SSH2_MSG_CHANNEL_CLOSE;
                                }

                                continue 3;
                            case 'exit-status':
                                list(, $this->exit_status) = Strings::unpackSSH2('CN', $response);

                                // "The client MAY ignore these messages."
                                // -- http://tools.ietf.org/html/rfc4254#section-6.10

                                continue 3;
                            default:
                                // "Some systems may not implement signals, in which case they SHOULD ignore this message."
                                //  -- http://tools.ietf.org/html/rfc4254#section-6.9
                                continue 3;
                        }
                }

                switch ($this->channel_status[$channel]) {
                    case NET_SSH2_MSG_CHANNEL_OPEN:
                        switch ($type) {
                            case NET_SSH2_MSG_CHANNEL_OPEN_CONFIRMATION:
                                list(
                                    $this->server_channels[$channel],
                                    $window_size,
                                    $this->packet_size_client_to_server[$channel]
                                ) = Strings::unpackSSH2('NNN', $response);

                                if ($window_size < 0) {
                                    $window_size &= 0x7FFFFFFF;
                                    $window_size += 0x80000000;
                                }
                                $this->window_size_client_to_server[$channel] = $window_size;
                                $result = $client_channel == $channel ? true : $this->get_channel_packet($client_channel, $skip_extended);
                                $this->on_channel_open();
                                return $result;
                            case NET_SSH2_MSG_CHANNEL_OPEN_FAILURE:
                                $this->disconnect_helper(NET_SSH2_DISCONNECT_BY_APPLICATION);
                                throw new \RuntimeException('Unable to open channel');
                            default:
                                if ($client_channel == $channel) {
                                    $this->disconnect_helper(NET_SSH2_DISCONNECT_BY_APPLICATION);
                                    throw new \RuntimeException('Unexpected response to open request');
                                }
                                return $this->get_channel_packet($client_channel, $skip_extended);
                        }
                        break;
                    case NET_SSH2_MSG_CHANNEL_REQUEST:
                        switch ($type) {
                            case NET_SSH2_MSG_CHANNEL_SUCCESS:
                                return true;
                            case NET_SSH2_MSG_CHANNEL_FAILURE:
                                return false;
                            case NET_SSH2_MSG_CHANNEL_DATA:
                                list($data) = Strings::unpackSSH2('s', $response);
                                $this->channel_buffers[$channel][] = chr($type) . $data;
                                return $this->get_channel_packet($client_channel, $skip_extended);
                            default:
                                $this->disconnect_helper(NET_SSH2_DISCONNECT_BY_APPLICATION);
                                throw new \RuntimeException('Unable to fulfill channel request');
                        }
                    case NET_SSH2_MSG_CHANNEL_CLOSE:
                        if ($client_channel == $channel && $type == NET_SSH2_MSG_CHANNEL_CLOSE) {
                            return true;
                        }
                        return $this->get_channel_packet($client_channel, $skip_extended);
                }
            }

            // ie. $this->channel_status[$channel] == NET_SSH2_MSG_CHANNEL_DATA

            switch ($type) {
                case NET_SSH2_MSG_CHANNEL_DATA:
                    /*
                    if ($channel == self::CHANNEL_EXEC) {
                        // SCP requires null packets, such as this, be sent.  further, in the case of the ssh.com SSH server
                        // this actually seems to make things twice as fast.  more to the point, the message right after
                        // SSH_MSG_CHANNEL_DATA (usually SSH_MSG_IGNORE) won't block for as long as it would have otherwise.
                        // in OpenSSH it slows things down but only by a couple thousandths of a second.
                        $this->send_channel_packet($channel, chr(0));
                    }
                    */
                    list($data) = Strings::unpackSSH2('s', $response);

                    if ($channel == self::CHANNEL_AGENT_FORWARD) {
                        $agent_response = $this->agent->forwardData($data);
                        if (!is_bool($agent_response)) {
                            $this->send_channel_packet($channel, $agent_response);
                        }
                        break;
                    }

                    if ($client_channel == $channel) {
                        return $data;
                    }
                    $this->channel_buffers[$channel][] = chr($type) . $data;
                    break;
                case NET_SSH2_MSG_CHANNEL_CLOSE:
                    $this->curTimeout = 5;

                    $this->close_channel_bitmap($channel);

                    if ($this->channel_status[$channel] != NET_SSH2_MSG_CHANNEL_CLOSE) {
                        $this->send_binary_packet(pack('CN', NET_SSH2_MSG_CHANNEL_CLOSE, $this->server_channels[$channel]));
                    }

                    unset($this->channel_status[$channel]);
                    $this->channelCount--;

                    if ($client_channel == $channel) {
                        return true;
                    }
                    // fall-through
                case NET_SSH2_MSG_CHANNEL_EOF:
                    break;
                default:
                    $this->disconnect_helper(NET_SSH2_DISCONNECT_BY_APPLICATION);
                    throw new \RuntimeException("Error reading channel data ($type)");
            }
        }
    }

    /**
     * Sends Binary Packets
     *
     * See '6. Binary Packet Protocol' of rfc4253 for more info.
     *
     * @param string $data
     * @param string $logged
     * @see self::_get_binary_packet()
     * @return void
     */
    protected function send_binary_packet($data, $logged = null)
    {
        if (!is_resource($this->fsock) || feof($this->fsock)) {
            $this->disconnect_helper(NET_SSH2_DISCONNECT_CONNECTION_LOST);
            throw new ConnectionClosedException('Connection closed prematurely');
        }

        if (!isset($logged)) {
            $logged = $data;
        }

        switch ($this->compress) {
            case self::NET_SSH2_COMPRESSION_ZLIB_AT_OPENSSH:
                if (!$this->isAuthenticated()) {
                    break;
                }
                // fall-through
            case self::NET_SSH2_COMPRESSION_ZLIB:
                if (!$this->regenerate_compression_context) {
                    $header = '';
                } else {
                    $this->regenerate_compression_context = false;
                    $this->compress_context = deflate_init(ZLIB_ENCODING_RAW, ['window' => 15]);
                    $header = "\x78\x9C";
                }
                if ($this->compress_context) {
                    $data = $header . deflate_add($this->compress_context, $data, ZLIB_PARTIAL_FLUSH);
                }
        }

        // 4 (packet length) + 1 (padding length) + 4 (minimal padding amount) == 9
        $packet_length = strlen($data) + 9;
        if ($this->encrypt && $this->encrypt->usesNonce()) {
            $packet_length -= 4;
        }
        // round up to the nearest $this->encrypt_block_size
        $packet_length += (($this->encrypt_block_size - 1) * $packet_length) % $this->encrypt_block_size;
        // subtracting strlen($data) is obvious - subtracting 5 is necessary because of packet_length and padding_length
        $padding_length = $packet_length - strlen($data) - 5;
        switch (true) {
            case $this->encrypt && $this->encrypt->usesNonce():
            case $this->hmac_create instanceof Hash && $this->hmac_create_etm:
                $padding_length += 4;
                $packet_length += 4;
        }

        $padding = Random::string($padding_length);

        // we subtract 4 from packet_length because the packet_length field isn't supposed to include itself
        $packet = pack('NCa*', $packet_length - 4, $padding_length, $data . $padding);

        $hmac = '';
        if ($this->hmac_create instanceof Hash && !$this->hmac_create_etm) {
            if (($this->hmac_create->getHash() & "\xFF\xFF\xFF\xFF") == 'umac') {
                $this->hmac_create->setNonce("\0\0\0\0" . pack('N', $this->send_seq_no));
                $hmac = $this->hmac_create->hash($packet);
            } else {
                $hmac = $this->hmac_create->hash(pack('Na*', $this->send_seq_no, $packet));
            }
        }

        if ($this->encrypt) {
            switch ($this->encryptName) {
                case 'aes128-gcm@openssh.com':
                case 'aes256-gcm@openssh.com':
                    $this->encrypt->setNonce(
                        $this->encryptFixedPart .
                        $this->encryptInvocationCounter
                    );
                    Strings::increment_str($this->encryptInvocationCounter);
                    $this->encrypt->setAAD($temp = ($packet & "\xFF\xFF\xFF\xFF"));
                    $packet = $temp . $this->encrypt->encrypt(substr($packet, 4));
                    break;
                case 'chacha20-poly1305@openssh.com':
                    // This should be impossible, but we are checking anyway to narrow the type for Psalm.
                    if (!($this->encrypt instanceof ChaCha20)) {
                        throw new \LogicException('$this->encrypt is not a ' . ChaCha20::class);
                    }

                    $nonce = pack('N2', 0, $this->send_seq_no);

                    $this->encrypt->setNonce($nonce);
                    $this->lengthEncrypt->setNonce($nonce);

                    $length = $this->lengthEncrypt->encrypt($packet & "\xFF\xFF\xFF\xFF");

                    $this->encrypt->setCounter(0);
                    // this is the same approach that's implemented in Salsa20::createPoly1305Key()
                    // but we don't want to use the same AEAD construction that RFC8439 describes
                    // for ChaCha20-Poly1305 so we won't rely on it (see Salsa20::poly1305())
                    $this->encrypt->setPoly1305Key(
                        $this->encrypt->encrypt(str_repeat("\0", 32))
                    );
                    $this->encrypt->setAAD($length);
                    $this->encrypt->setCounter(1);
                    $packet = $length . $this->encrypt->encrypt(substr($packet, 4));
                    break;
                default:
                    $packet = $this->hmac_create instanceof Hash && $this->hmac_create_etm ?
                        ($packet & "\xFF\xFF\xFF\xFF") . $this->encrypt->encrypt(substr($packet, 4)) :
                        $this->encrypt->encrypt($packet);
            }
        }

        if ($this->hmac_create instanceof Hash && $this->hmac_create_etm) {
            if (($this->hmac_create->getHash() & "\xFF\xFF\xFF\xFF") == 'umac') {
                $this->hmac_create->setNonce("\0\0\0\0" . pack('N', $this->send_seq_no));
                $hmac = $this->hmac_create->hash($packet);
            } else {
                $hmac = $this->hmac_create->hash(pack('Na*', $this->send_seq_no, $packet));
            }
        }

        $this->send_seq_no++;

        $packet .= $this->encrypt && $this->encrypt->usesNonce() ? $this->encrypt->getTag() : $hmac;

        if (!$this->keyExchangeInProgress) {
            $this->bytesTransferredSinceLastKEX += strlen($packet);
        }

        $start = microtime(true);
        $sent = @fputs($this->fsock, $packet);
        $stop = microtime(true);

        if (defined('NET_SSH2_LOGGING')) {
            $current = microtime(true);
            $message_number = isset(self::$message_numbers[ord($logged[0])]) ? self::$message_numbers[ord($logged[0])] : 'UNKNOWN (' . ord($logged[0]) . ')';
            $message_number = '-> ' . $message_number .
                              ' (since last: ' . round($current - $this->last_packet, 4) . ', network: ' . round($stop - $start, 4) . 's)';
            $this->append_log($message_number, $logged);
        }
        $this->last_packet = microtime(true);

        if (strlen($packet) != $sent) {
            $this->disconnect_helper(NET_SSH2_DISCONNECT_BY_APPLICATION);
            $message = $sent === false ?
                'Unable to write ' . strlen($packet) . ' bytes' :
                "Only $sent of " . strlen($packet) . " bytes were sent";
            throw new \RuntimeException($message);
        }

        if ($this->bytesTransferredSinceLastKEX > $this->doKeyReexchangeAfterXBytes) {
            $this->key_exchange();
        }
    }

    /**
     * Sends a keep-alive message, if keep-alive is enabled and interval is met
     */
    private function send_keep_alive()
    {
        if ($this->bitmap & self::MASK_CONNECTED) {
            $elapsed = microtime(true) - $this->last_packet;
            if ($this->keepAlive > 0 && $elapsed >= $this->keepAlive) {
                $this->send_binary_packet(pack('CN', NET_SSH2_MSG_IGNORE, 0));
            }
        }
    }

    /**
     * Logs data packets
     *
     * Makes sure that only the last 1MB worth of packets will be logged
     *
     * @param string $message_number
     * @param string $message
     */
    private function append_log($message_number, $message)
    {
        $this->append_log_helper(
            NET_SSH2_LOGGING,
            $message_number,
            $message,
            $this->message_number_log,
            $this->message_log,
            $this->log_size,
            $this->realtime_log_file,
            $this->realtime_log_wrap,
            $this->realtime_log_size
        );
    }

    /**
     * Logs data packet helper
     *
     * @param int $constant
     * @param string $message_number
     * @param string $message
     * @param array &$message_number_log
     * @param array &$message_log
     * @param int &$log_size
     * @param resource &$realtime_log_file
     * @param bool &$realtime_log_wrap
     * @param int &$realtime_log_size
     */
    protected function append_log_helper($constant, $message_number, $message, array &$message_number_log, array &$message_log, &$log_size, &$realtime_log_file, &$realtime_log_wrap, &$realtime_log_size)
    {
        // remove the byte identifying the message type from all but the first two messages (ie. the identification strings)
        if (!in_array(substr($message_number, 0, 4), ['<- (', '-> (']) && strlen($message_number) > 2) {
            Strings::shift($message);
        }

        switch ($constant) {
            // useful for benchmarks
            case self::LOG_SIMPLE:
                $message_number_log[] = $message_number;
                break;
            case self::LOG_SIMPLE_REALTIME:
                echo $message_number;
                echo PHP_SAPI == 'cli' ? "\r\n" : '<br>';
                @flush();
                @ob_flush();
                break;
            // the most useful log for SSH2
            case self::LOG_COMPLEX:
                $message_number_log[] = $message_number;
                $log_size += strlen($message);
                $message_log[] = $message;
                while ($log_size > self::LOG_MAX_SIZE) {
                    $log_size -= strlen(array_shift($message_log));
                    array_shift($message_number_log);
                }
                break;
            // dump the output out realtime; packets may be interspersed with non packets,
            // passwords won't be filtered out and select other packets may not be correctly
            // identified
            case self::LOG_REALTIME:
                switch (PHP_SAPI) {
                    case 'cli':
                        $start = $stop = "\r\n";
                        break;
                    default:
                        $start = '<pre>';
                        $stop = '</pre>';
                }
                echo $start . $this->format_log([$message], [$message_number]) . $stop;
                @flush();
                @ob_flush();
                break;
            // basically the same thing as self::LOG_REALTIME with the caveat that NET_SSH2_LOG_REALTIME_FILENAME
            // needs to be defined and that the resultant log file will be capped out at self::LOG_MAX_SIZE.
            // the earliest part of the log file is denoted by the first <<< START >>> and is not going to necessarily
            // at the beginning of the file
            case self::LOG_REALTIME_FILE:
                if (!isset($realtime_log_file)) {
                    // PHP doesn't seem to like using constants in fopen()
                    $filename = NET_SSH2_LOG_REALTIME_FILENAME;
                    $fp = fopen($filename, 'w');
                    $realtime_log_file = $fp;
                }
                if (!is_resource($realtime_log_file)) {
                    break;
                }
                $entry = $this->format_log([$message], [$message_number]);
                if ($realtime_log_wrap) {
                    $temp = "<<< START >>>\r\n";
                    $entry .= $temp;
                    fseek($realtime_log_file, ftell($realtime_log_file) - strlen($temp));
                }
                $realtime_log_size += strlen($entry);
                if ($realtime_log_size > self::LOG_MAX_SIZE) {
                    fseek($realtime_log_file, 0);
                    $realtime_log_size = strlen($entry);
                    $realtime_log_wrap = true;
                }
                fputs($realtime_log_file, $entry);
                break;
            case self::LOG_REALTIME_SIMPLE:
                echo $message_number;
                echo PHP_SAPI == 'cli' ? "\r\n" : '<br>';
        }
    }

    /**
     * Sends channel data
     *
     * Spans multiple SSH_MSG_CHANNEL_DATAs if appropriate
     *
     * @param int $client_channel
     * @param string $data
     * @return void
     */
    protected function send_channel_packet($client_channel, $data)
    {
        if (
            isset($this->channel_buffers_write[$client_channel])
            && strpos($data, $this->channel_buffers_write[$client_channel]) === 0
        ) {
            // if buffer holds identical initial data content, resume send from the unmatched data portion
            $data = substr($data, strlen($this->channel_buffers_write[$client_channel]));
        } else {
            $this->channel_buffers_write[$client_channel] = '';
        }
        while (strlen($data)) {
            if (!$this->window_size_client_to_server[$client_channel]) {
                // using an invalid channel will let the buffers be built up for the valid channels
                $this->get_channel_packet(-$client_channel);
                if ($this->isTimeout()) {
                    throw new TimeoutException('Timed out waiting for server');
                } elseif (!$this->window_size_client_to_server[$client_channel]) {
                    throw new \RuntimeException('Data window was not adjusted');
                }
            }

            /* The maximum amount of data allowed is determined by the maximum
               packet size for the channel, and the current window size, whichever
               is smaller.
                 -- http://tools.ietf.org/html/rfc4254#section-5.2 */
            $max_size = min(
                $this->packet_size_client_to_server[$client_channel],
                $this->window_size_client_to_server[$client_channel]
            );

            $temp = Strings::shift($data, $max_size);
            $packet = Strings::packSSH2(
                'CNs',
                NET_SSH2_MSG_CHANNEL_DATA,
                $this->server_channels[$client_channel],
                $temp
            );
            $this->window_size_client_to_server[$client_channel] -= strlen($temp);
            $this->send_binary_packet($packet);
            $this->channel_buffers_write[$client_channel] .= $temp;
        }
        unset($this->channel_buffers_write[$client_channel]);
    }

    /**
     * Closes and flushes a channel
     *
     * \phpseclib3\Net\SSH2 doesn't properly close most channels.  For exec() channels are normally closed by the server
     * and for SFTP channels are presumably closed when the client disconnects.  This functions is intended
     * for SCP more than anything.
     *
     * @param int $client_channel
     * @param bool $want_reply
     * @return void
     */
    private function close_channel($client_channel)
    {
        // see http://tools.ietf.org/html/rfc4254#section-5.3

        if ($this->channel_status[$client_channel] != NET_SSH2_MSG_CHANNEL_EOF) {
            $this->send_binary_packet(pack('CN', NET_SSH2_MSG_CHANNEL_EOF, $this->server_channels[$client_channel]));
        }
        $this->send_binary_packet(pack('CN', NET_SSH2_MSG_CHANNEL_CLOSE, $this->server_channels[$client_channel]));

        $this->channel_status[$client_channel] = NET_SSH2_MSG_CHANNEL_CLOSE;

        $this->channelCount--;

        $this->curTimeout = 5;
        while (!is_bool($this->get_channel_packet($client_channel))) {
        }

        unset($this->channel_status[$client_channel]);

        $this->close_channel_bitmap($client_channel);
    }

    /**
     * Maintains execution state bitmap in response to channel closure
     *
     * @param int $client_channel The channel number to maintain closure status of
     * @return void
     */
    private function close_channel_bitmap($client_channel)
    {
        switch ($client_channel) {
            case self::CHANNEL_SHELL:
                // Shell status has been maintained in the bitmap for backwards
                //  compatibility sake, but can be removed going forward
                if ($this->bitmap & self::MASK_SHELL) {
                    $this->bitmap &= ~self::MASK_SHELL;
                }
                break;
        }
    }

    /**
     * Disconnect
     *
     * @param int $reason
     * @return false
     */
    protected function disconnect_helper($reason)
    {
        if ($this->bitmap & self::MASK_DISCONNECT) {
            // Disregard subsequent disconnect requests
            return false;
        }
        $this->bitmap |= self::MASK_DISCONNECT;
        if ($this->isConnected()) {
            $data = Strings::packSSH2('CNss', NET_SSH2_MSG_DISCONNECT, $reason, '', '');
            try {
                $this->send_binary_packet($data);
            } catch (\Exception $e) {
            }
        }

        $this->reset_connection();

        return false;
    }

    /**
     * Define Array
     *
     * Takes any number of arrays whose indices are integers and whose values are strings and defines a bunch of
     * named constants from it, using the value as the name of the constant and the index as the value of the constant.
     * If any of the constants that would be defined already exists, none of the constants will be defined.
     *
     * @param mixed[] ...$args
     * @access protected
     */
    protected static function define_array(...$args)
    {
        foreach ($args as $arg) {
            foreach ($arg as $key => $value) {
                if (!defined($value)) {
                    define($value, $key);
                } else {
                    break 2;
                }
            }
        }
    }

    /**
     * Returns a log of the packets that have been sent and received.
     *
     * Returns a string if NET_SSH2_LOGGING == self::LOG_COMPLEX, an array if NET_SSH2_LOGGING == self::LOG_SIMPLE and false if !defined('NET_SSH2_LOGGING')
     *
     * @return array|false|string
     */
    public function getLog()
    {
        if (!defined('NET_SSH2_LOGGING')) {
            return false;
        }

        switch (NET_SSH2_LOGGING) {
            case self::LOG_SIMPLE:
                return $this->message_number_log;
            case self::LOG_COMPLEX:
                $log = $this->format_log($this->message_log, $this->message_number_log);
                return PHP_SAPI == 'cli' ? $log : '<pre>' . $log . '</pre>';
            default:
                return false;
        }
    }

    /**
     * Formats a log for printing
     *
     * @param array $message_log
     * @param array $message_number_log
     * @return string
     */
    protected function format_log(array $message_log, array $message_number_log)
    {
        $output = '';
        for ($i = 0; $i < count($message_log); $i++) {
            $output .= $message_number_log[$i];
            $current_log = $message_log[$i];
            $j = 0;
            if (strlen($current_log)) {
                $output .= "\r\n";
            }
            do {
                if (strlen($current_log)) {
                    $output .= str_pad(dechex($j), 7, '0', STR_PAD_LEFT) . '0  ';
                }
                $fragment = Strings::shift($current_log, $this->log_short_width);
                $hex = substr(preg_replace_callback('#.#s', function ($matches) {
                    return $this->log_boundary . str_pad(dechex(ord($matches[0])), 2, '0', STR_PAD_LEFT);
                }, $fragment), strlen($this->log_boundary));
                // replace non ASCII printable characters with dots
                // http://en.wikipedia.org/wiki/ASCII#ASCII_printable_characters
                // also replace < with a . since < messes up the output on web browsers
                $raw = preg_replace('#[^\x20-\x7E]|<#', '.', $fragment);
                $output .= str_pad($hex, $this->log_long_width - $this->log_short_width, ' ') . $raw . "\r\n";
                $j++;
            } while (strlen($current_log));
            $output .= "\r\n";
        }

        return $output;
    }

    /**
     * Helper function for agent->on_channel_open()
     *
     * Used when channels are created to inform agent
     * of said channel opening. Must be called after
     * channel open confirmation received
     *
     */
    private function on_channel_open()
    {
        if (isset($this->agent)) {
            $this->agent->registerChannelOpen($this);
        }
    }

    /**
     * Returns the first value of the intersection of two arrays or false if
     * the intersection is empty. The order is defined by the first parameter.
     *
     * @param array $array1
     * @param array $array2
     * @return mixed False if intersection is empty, else intersected value.
     */
    private static function array_intersect_first(array $array1, array $array2)
    {
        foreach ($array1 as $value) {
            if (in_array($value, $array2)) {
                return $value;
            }
        }
        return false;
    }

    /**
     * Returns all errors / debug messages on the SSH layer
     *
     * If you are looking for messages from the SFTP layer, please see SFTP::getSFTPErrors()
     *
     * @return string[]
     */
    public function getErrors()
    {
        return $this->errors;
    }

    /**
     * Returns the last error received on the SSH layer
     *
     * If you are looking for messages from the SFTP layer, please see SFTP::getLastSFTPError()
     *
     * @return string
     */
    public function getLastError()
    {
        $count = count($this->errors);

        if ($count > 0) {
            return $this->errors[$count - 1];
        }
    }

    /**
     * Return the server identification.
     *
     * @return string|false
     */
    public function getServerIdentification()
    {
        $this->connect();

        return $this->server_identifier;
    }

    /**
     * Returns a list of algorithms the server supports
     *
     * @return array
     */
    public function getServerAlgorithms()
    {
        $this->connect();

        return [
            'kex' => $this->kex_algorithms,
            'hostkey' => $this->server_host_key_algorithms,
            'client_to_server' => [
                'crypt' => $this->encryption_algorithms_client_to_server,
                'mac' => $this->mac_algorithms_client_to_server,
                'comp' => $this->compression_algorithms_client_to_server,
                'lang' => $this->languages_client_to_server
            ],
            'server_to_client' => [
                'crypt' => $this->encryption_algorithms_server_to_client,
                'mac' => $this->mac_algorithms_server_to_client,
                'comp' => $this->compression_algorithms_server_to_client,
                'lang' => $this->languages_server_to_client
            ]
        ];
    }

    /**
     * Returns a list of KEX algorithms that phpseclib supports
     *
     * @return array
     */
    public static function getSupportedKEXAlgorithms()
    {
        $kex_algorithms = [
            // Elliptic Curve Diffie-Hellman Key Agreement (ECDH) using
            // Curve25519. See doc/curve25519-sha256@libssh.org.txt in the
            // libssh repository for more information.
            'curve25519-sha256',
            'curve25519-sha256@libssh.org',

            'ecdh-sha2-nistp256', // RFC 5656
            'ecdh-sha2-nistp384', // RFC 5656
            'ecdh-sha2-nistp521', // RFC 5656

            'diffie-hellman-group-exchange-sha256',// RFC 4419
            'diffie-hellman-group-exchange-sha1',  // RFC 4419

            // Diffie-Hellman Key Agreement (DH) using integer modulo prime
            // groups.
            'diffie-hellman-group14-sha256',
            'diffie-hellman-group14-sha1', // REQUIRED
            'diffie-hellman-group15-sha512',
            'diffie-hellman-group16-sha512',
            'diffie-hellman-group17-sha512',
            'diffie-hellman-group18-sha512',

            'diffie-hellman-group1-sha1', // REQUIRED
        ];

        return $kex_algorithms;
    }

    /**
     * Returns a list of host key algorithms that phpseclib supports
     *
     * @return array
     */
    public static function getSupportedHostKeyAlgorithms()
    {
        return [
            'ssh-ed25519', // https://tools.ietf.org/html/draft-ietf-curdle-ssh-ed25519-02
            'ecdsa-sha2-nistp256', // RFC 5656
            'ecdsa-sha2-nistp384', // RFC 5656
            'ecdsa-sha2-nistp521', // RFC 5656
            'rsa-sha2-256', // RFC 8332
            'rsa-sha2-512', // RFC 8332
            'ssh-rsa', // RECOMMENDED  sign   Raw RSA Key
            'ssh-dss'  // REQUIRED     sign   Raw DSS Key
        ];
    }

    /**
     * Returns a list of symmetric key algorithms that phpseclib supports
     *
     * @return array
     */
    public static function getSupportedEncryptionAlgorithms()
    {
        $algos = [
            // from <https://tools.ietf.org/html/rfc5647>:
            'aes128-gcm@openssh.com',
            'aes256-gcm@openssh.com',

            // from <http://tools.ietf.org/html/rfc4345#section-4>:
            'arcfour256',
            'arcfour128',

            //'arcfour',      // OPTIONAL          the ARCFOUR stream cipher with a 128-bit key

            // CTR modes from <http://tools.ietf.org/html/rfc4344#section-4>:
            'aes128-ctr',     // RECOMMENDED       AES (Rijndael) in SDCTR mode, with 128-bit key
            'aes192-ctr',     // RECOMMENDED       AES with 192-bit key
            'aes256-ctr',     // RECOMMENDED       AES with 256-bit key

            // from <https://github.com/openssh/openssh-portable/blob/001aa55/PROTOCOL.chacha20poly1305>:
            // one of the big benefits of chacha20-poly1305 is speed. the problem is...
            // libsodium doesn't generate the poly1305 keys in the way ssh does and openssl's PHP bindings don't even
            // seem to support poly1305 currently. so even if libsodium or openssl are being used for the chacha20
            // part, pure-PHP has to be used for the poly1305 part and that's gonna cause a big slow down.
            // speed-wise it winds up being faster to use AES (when openssl or mcrypt are available) and some HMAC
            // (which is always gonna be super fast to compute thanks to the hash extension, which
            // "is bundled and compiled into PHP by default")
            'chacha20-poly1305@openssh.com',

            'twofish128-ctr', // OPTIONAL          Twofish in SDCTR mode, with 128-bit key
            'twofish192-ctr', // OPTIONAL          Twofish with 192-bit key
            'twofish256-ctr', // OPTIONAL          Twofish with 256-bit key

            'aes128-cbc',     // RECOMMENDED       AES with a 128-bit key
            'aes192-cbc',     // OPTIONAL          AES with a 192-bit key
            'aes256-cbc',     // OPTIONAL          AES in CBC mode, with a 256-bit key

            'twofish128-cbc', // OPTIONAL          Twofish with a 128-bit key
            'twofish192-cbc', // OPTIONAL          Twofish with a 192-bit key
            'twofish256-cbc',
            'twofish-cbc',    // OPTIONAL          alias for "twofish256-cbc"
                              //                   (this is being retained for historical reasons)

            'blowfish-ctr',   // OPTIONAL          Blowfish in SDCTR mode

            'blowfish-cbc',   // OPTIONAL          Blowfish in CBC mode

            '3des-ctr',       // RECOMMENDED       Three-key 3DES in SDCTR mode

            '3des-cbc',       // REQUIRED          three-key 3DES in CBC mode

             //'none'           // OPTIONAL          no encryption; NOT RECOMMENDED
        ];

        if (self::$crypto_engine) {
            $engines = [self::$crypto_engine];
        } else {
            $engines = [
                'libsodium',
                'OpenSSL (GCM)',
                'OpenSSL',
                'mcrypt',
                'Eval',
                'PHP'
            ];
        }

        $ciphers = [];

        foreach ($engines as $engine) {
            foreach ($algos as $algo) {
                $obj = self::encryption_algorithm_to_crypt_instance($algo);
                if ($obj instanceof Rijndael) {
                    $obj->setKeyLength(preg_replace('#[^\d]#', '', $algo));
                }
                switch ($algo) {
                    // Eval engines do not exist for ChaCha20 or RC4 because they would not benefit from one.
                    // to benefit from an Eval engine they'd need to loop a variable amount of times, they'd
                    // need to do table lookups (eg. sbox subsitutions). ChaCha20 doesn't do either because
                    // it's a so-called ARX cipher, meaning that the only operations it does are add (A), rotate (R)
                    // and XOR (X). RC4 does do table lookups but being a stream cipher it works differently than
                    // block ciphers. with RC4 you XOR the plaintext against a keystream and the keystream changes
                    // as you encrypt stuff. the only table lookups are made against this keystream and thus table
                    // lookups are kinda unavoidable. with AES and DES, however, the table lookups that are done
                    // are done against substitution boxes (sboxes), which are invariant.

                    // OpenSSL can't be used as an engine, either, because OpenSSL doesn't support continuous buffers
                    // as SSH2 uses and altho you can emulate a continuous buffer with block ciphers you can't do so
                    // with stream ciphers. As for ChaCha20...  for the ChaCha20 part OpenSSL could prob be used but
                    // the big slow down isn't with ChaCha20 - it's with Poly1305. SSH constructs the key for that
                    // differently than how OpenSSL does it (OpenSSL does it as the RFC describes, SSH doesn't).

                    // libsodium can't be used because it doesn't support RC4 and it doesn't construct the Poly1305
                    // keys in the same way that SSH does

                    // mcrypt could prob be used for RC4 but mcrypt hasn't been included in PHP core for yearss
                    case 'chacha20-poly1305@openssh.com':
                    case 'arcfour128':
                    case 'arcfour256':
                        if ($engine != 'PHP') {
                            continue 2;
                        }
                        break;
                    case 'aes128-gcm@openssh.com':
                    case 'aes256-gcm@openssh.com':
                        if ($engine == 'OpenSSL') {
                            continue 2;
                        }
                        $obj->setNonce('dummydummydu');
                }
                if ($obj->isValidEngine($engine)) {
                    $algos = array_diff($algos, [$algo]);
                    $ciphers[] = $algo;
                }
            }
        }

        return $ciphers;
    }

    /**
     * Returns a list of MAC algorithms that phpseclib supports
     *
     * @return array
     */
    public static function getSupportedMACAlgorithms()
    {
        return [
            'hmac-sha2-256-etm@openssh.com',
            'hmac-sha2-512-etm@openssh.com',
            'hmac-sha1-etm@openssh.com',

            // from <http://www.ietf.org/rfc/rfc6668.txt>:
            'hmac-sha2-256',// RECOMMENDED     HMAC-SHA256 (digest length = key length = 32)
            'hmac-sha2-512',// OPTIONAL        HMAC-SHA512 (digest length = key length = 64)

            'hmac-sha1-96', // RECOMMENDED     first 96 bits of HMAC-SHA1 (digest length = 12, key length = 20)
            'hmac-sha1',    // REQUIRED        HMAC-SHA1 (digest length = key length = 20)
            'hmac-md5-96',  // OPTIONAL        first 96 bits of HMAC-MD5 (digest length = 12, key length = 16)
            'hmac-md5',     // OPTIONAL        HMAC-MD5 (digest length = key length = 16)

            'umac-64-etm@openssh.com',
            'umac-128-etm@openssh.com',

            // from <https://tools.ietf.org/html/draft-miller-secsh-umac-01>:
            'umac-64@openssh.com',
            'umac-128@openssh.com',

            //'none'          // OPTIONAL        no MAC; NOT RECOMMENDED
        ];
    }

    /**
     * Returns a list of compression algorithms that phpseclib supports
     *
     * @return array
     */
    public static function getSupportedCompressionAlgorithms()
    {
        $algos = ['none']; // REQUIRED        no compression
        if (function_exists('deflate_init')) {
            $algos[] = 'zlib@openssh.com'; // https://datatracker.ietf.org/doc/html/draft-miller-secsh-compression-delayed
            $algos[] = 'zlib';
        }
        return $algos;
    }

    /**
     * Return list of negotiated algorithms
     *
     * Uses the same format as https://www.php.net/ssh2-methods-negotiated
     *
     * @return array
     */
    public function getAlgorithmsNegotiated()
    {
        $this->connect();

        $compression_map = [
            self::NET_SSH2_COMPRESSION_NONE => 'none',
            self::NET_SSH2_COMPRESSION_ZLIB => 'zlib',
            self::NET_SSH2_COMPRESSION_ZLIB_AT_OPENSSH => 'zlib@openssh.com'
        ];

        return [
            'kex' => $this->kex_algorithm,
            'hostkey' => $this->signature_format,
            'client_to_server' => [
                'crypt' => $this->encryptName,
                'mac' => $this->hmac_create_name,
                'comp' => $compression_map[$this->compress],
            ],
            'server_to_client' => [
                'crypt' => $this->decryptName,
                'mac' => $this->hmac_check_name,
                'comp' => $compression_map[$this->decompress],
            ]
        ];
    }

    /**
     * Force multiple channels (even if phpseclib has decided to disable them)
     */
    public function forceMultipleChannels()
    {
        $this->errorOnMultipleChannels = false;
    }

    /**
     * Allows you to set the terminal
     *
     * @param string $term
     */
    public function setTerminal($term)
    {
        $this->term = $term;
    }

    /**
     * Accepts an associative array with up to four parameters as described at
     * <https://www.php.net/manual/en/function.ssh2-connect.php>
     *
     * @param array $methods
     */
    public function setPreferredAlgorithms(array $methods)
    {
        $keys = ['client_to_server', 'server_to_client'];

        if (isset($methods['kex']) && is_string($methods['kex'])) {
            $methods['kex'] = explode(',', $methods['kex']);
        }

        if (isset($methods['hostkey']) && is_string($methods['hostkey'])) {
            $methods['hostkey'] = explode(',', $methods['hostkey']);
        }

        foreach ($keys as $key) {
            if (isset($methods[$key])) {
                $a = &$methods[$key];
                if (isset($a['crypt']) && is_string($a['crypt'])) {
                    $a['crypt'] = explode(',', $a['crypt']);
                }
                if (isset($a['comp']) && is_string($a['comp'])) {
                    $a['comp'] = explode(',', $a['comp']);
                }
                if (isset($a['mac']) && is_string($a['mac'])) {
                    $a['mac'] = explode(',', $a['mac']);
                }
            }
        }

        $preferred = $methods;

        if (isset($preferred['kex'])) {
            $preferred['kex'] = array_intersect(
                $preferred['kex'],
                static::getSupportedKEXAlgorithms()
            );
        }

        if (isset($preferred['hostkey'])) {
            $preferred['hostkey'] = array_intersect(
                $preferred['hostkey'],
                static::getSupportedHostKeyAlgorithms()
            );
        }

        foreach ($keys as $key) {
            if (isset($preferred[$key])) {
                $a = &$preferred[$key];
                if (isset($a['crypt'])) {
                    $a['crypt'] = array_intersect(
                        $a['crypt'],
                        static::getSupportedEncryptionAlgorithms()
                    );
                }
                if (isset($a['comp'])) {
                    $a['comp'] = array_intersect(
                        $a['comp'],
                        static::getSupportedCompressionAlgorithms()
                    );
                }
                if (isset($a['mac'])) {
                    $a['mac'] = array_intersect(
                        $a['mac'],
                        static::getSupportedMACAlgorithms()
                    );
                }
            }
        }

        $keys = [
            'kex',
            'hostkey',
            'client_to_server/crypt',
            'client_to_server/comp',
            'client_to_server/mac',
            'server_to_client/crypt',
            'server_to_client/comp',
            'server_to_client/mac',
        ];
        foreach ($keys as $key) {
            $p = $preferred;
            $m = $methods;

            $subkeys = explode('/', $key);
            foreach ($subkeys as $subkey) {
                if (!isset($p[$subkey])) {
                    continue 2;
                }
                $p = $p[$subkey];
                $m = $m[$subkey];
            }

            if (count($p) != count($m)) {
                $diff = array_diff($m, $p);
                $msg = count($diff) == 1 ?
                    ' is not a supported algorithm' :
                    ' are not supported algorithms';
                throw new UnsupportedAlgorithmException(implode(', ', $diff) . $msg);
            }
        }

        $this->preferred = $preferred;
    }

    /**
     * Returns the banner message.
     *
     * Quoting from the RFC, "in some jurisdictions, sending a warning message before
     * authentication may be relevant for getting legal protection."
     *
     * @return string
     */
    public function getBannerMessage()
    {
        return $this->banner_message;
    }

    /**
     * Returns the server public host key.
     *
     * Caching this the first time you connect to a server and checking the result on subsequent connections
     * is recommended.  Returns false if the server signature is not signed correctly with the public host key.
     *
     * @return string|false
     * @throws \RuntimeException on badly formatted keys
     * @throws NoSupportedAlgorithmsException when the key isn't in a supported format
     */
    public function getServerPublicHostKey()
    {
        if (!($this->bitmap & self::MASK_CONSTRUCTOR)) {
            $this->connect();
        }

        $signature = $this->signature;
        $server_public_host_key = base64_encode($this->server_public_host_key);

        if ($this->signature_validated) {
            return $this->bitmap ?
                $this->signature_format . ' ' . $server_public_host_key :
                false;
        }

        $this->signature_validated = true;

        switch ($this->signature_format) {
            case 'ssh-ed25519':
            case 'ecdsa-sha2-nistp256':
            case 'ecdsa-sha2-nistp384':
            case 'ecdsa-sha2-nistp521':
                $key = EC::loadFormat('OpenSSH', $server_public_host_key)
                    ->withSignatureFormat('SSH2');
                switch ($this->signature_format) {
                    case 'ssh-ed25519':
                        $hash = 'sha512';
                        break;
                    case 'ecdsa-sha2-nistp256':
                        $hash = 'sha256';
                        break;
                    case 'ecdsa-sha2-nistp384':
                        $hash = 'sha384';
                        break;
                    case 'ecdsa-sha2-nistp521':
                        $hash = 'sha512';
                }
                $key = $key->withHash($hash);
                break;
            case 'ssh-dss':
                $key = DSA::loadFormat('OpenSSH', $server_public_host_key)
                    ->withSignatureFormat('SSH2')
                    ->withHash('sha1');
                break;
            case 'ssh-rsa':
            case 'rsa-sha2-256':
            case 'rsa-sha2-512':
                // could be ssh-rsa, rsa-sha2-256, rsa-sha2-512
                // we don't check here because we already checked in key_exchange
                // some signatures have the type embedded within the message and some don't
                list(, $signature) = Strings::unpackSSH2('ss', $signature);

                $key = RSA::loadFormat('OpenSSH', $server_public_host_key)
                    ->withPadding(RSA::SIGNATURE_PKCS1);
                switch ($this->signature_format) {
                    case 'rsa-sha2-512':
                        $hash = 'sha512';
                        break;
                    case 'rsa-sha2-256':
                        $hash = 'sha256';
                        break;
                    //case 'ssh-rsa':
                    default:
                        $hash = 'sha1';
                }
                $key = $key->withHash($hash);
                break;
            default:
                $this->disconnect_helper(NET_SSH2_DISCONNECT_HOST_KEY_NOT_VERIFIABLE);
                throw new NoSupportedAlgorithmsException('Unsupported signature format');
        }

        if (!$key->verify($this->exchange_hash, $signature)) {
            return $this->disconnect_helper(NET_SSH2_DISCONNECT_HOST_KEY_NOT_VERIFIABLE);
        };

        return $this->signature_format . ' ' . $server_public_host_key;
    }

    /**
     * Returns the exit status of an SSH command or false.
     *
     * @return false|int
     */
    public function getExitStatus()
    {
        if (is_null($this->exit_status)) {
            return false;
        }
        return $this->exit_status;
    }

    /**
     * Returns the number of columns for the terminal window size.
     *
     * @return int
     */
    public function getWindowColumns()
    {
        return $this->windowColumns;
    }

    /**
     * Returns the number of rows for the terminal window size.
     *
     * @return int
     */
    public function getWindowRows()
    {
        return $this->windowRows;
    }

    /**
     * Sets the number of columns for the terminal window size.
     *
     * @param int $value
     */
    public function setWindowColumns($value)
    {
        $this->windowColumns = $value;
    }

    /**
     * Sets the number of rows for the terminal window size.
     *
     * @param int $value
     */
    public function setWindowRows($value)
    {
        $this->windowRows = $value;
    }

    /**
     * Sets the number of columns and rows for the terminal window size.
     *
     * @param int $columns
     * @param int $rows
     */
    public function setWindowSize($columns = 80, $rows = 24)
    {
        $this->windowColumns = $columns;
        $this->windowRows = $rows;
    }

    /**
     * To String Magic Method
     *
     * @return string
     */
    #[\ReturnTypeWillChange]
    public function __toString()
    {
        return $this->getResourceId();
    }

    /**
     * Get Resource ID
     *
     * We use {} because that symbols should not be in URL according to
     * {@link http://tools.ietf.org/html/rfc3986#section-2 RFC}.
     * It will safe us from any conflicts, because otherwise regexp will
     * match all alphanumeric domains.
     *
     * @return string
     */
    public function getResourceId()
    {
        return '{' . spl_object_hash($this) . '}';
    }

    /**
     * Return existing connection
     *
     * @param string $id
     *
     * @return bool|SSH2 will return false if no such connection
     */
    public static function getConnectionByResourceId($id)
    {
        if (isset(self::$connections[$id])) {
            return self::$connections[$id] instanceof \WeakReference ? self::$connections[$id]->get() : self::$connections[$id];
        }
        return false;
    }

    /**
     * Return all excising connections
     *
     * @return array<string, SSH2>
     */
    public static function getConnections()
    {
        if (!class_exists('WeakReference')) {
            /** @var array<string, SSH2> */
            return self::$connections;
        }
        $temp = [];
        foreach (self::$connections as $key => $ref) {
            $temp[$key] = $ref->get();
        }
        return $temp;
    }

    /*
     * Update packet types in log history
     *
     * @param string $old
     * @param string $new
     */
    private function updateLogHistory($old, $new)
    {
        if (defined('NET_SSH2_LOGGING') && NET_SSH2_LOGGING == self::LOG_COMPLEX) {
            $this->message_number_log[count($this->message_number_log) - 1] = str_replace(
                $old,
                $new,
                $this->message_number_log[count($this->message_number_log) - 1]
            );
        }
    }

    /**
     * Return the list of authentication methods that may productively continue authentication.
     *
     * @see https://tools.ietf.org/html/rfc4252#section-5.1
     * @return array|null
     */
    public function getAuthMethodsToContinue()
    {
        return $this->auth_methods_to_continue;
    }

    /**
     * Enables "smart" multi-factor authentication (MFA)
     */
    public function enableSmartMFA()
    {
        $this->smartMFA = true;
    }

    /**
     * Disables "smart" multi-factor authentication (MFA)
     */
    public function disableSmartMFA()
    {
        $this->smartMFA = false;
    }

    /**
     * How many bytes until the next key re-exchange?
     *
     * @param int $bytes
     */
    public function bytesUntilKeyReexchange($bytes)
    {
        $this->doKeyReexchangeAfterXBytes = $bytes;
    }
}
<?php

/**
 * Pure-PHP ssh-agent client.
 *
 * {@internal See http://api.libssh.org/rfc/PROTOCOL.agent}
 *
 * PHP version 5
 *
 * Here are some examples of how to use this library:
 * <code>
 * <?php
 *    include 'vendor/autoload.php';
 *
 *    $agent = new \phpseclib3\System\SSH\Agent();
 *
 *    $ssh = new \phpseclib3\Net\SSH2('www.domain.tld');
 *    if (!$ssh->login('username', $agent)) {
 *        exit('Login Failed');
 *    }
 *
 *    echo $ssh->exec('pwd');
 *    echo $ssh->exec('ls -la');
 * ?>
 * </code>
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2014 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\System\SSH;

use phpseclib3\Common\Functions\Strings;
use phpseclib3\Crypt\Common\PublicKey;
use phpseclib3\Crypt\PublicKeyLoader;
use phpseclib3\Crypt\RSA;
use phpseclib3\Exception\BadConfigurationException;
use phpseclib3\Net\SSH2;
use phpseclib3\System\SSH\Agent\Identity;

/**
 * Pure-PHP ssh-agent client identity factory
 *
 * requestIdentities() method pumps out \phpseclib3\System\SSH\Agent\Identity objects
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
class Agent
{
    use Common\Traits\ReadBytes;

    // Message numbers

    // to request SSH1 keys you have to use SSH_AGENTC_REQUEST_RSA_IDENTITIES (1)
    const SSH_AGENTC_REQUEST_IDENTITIES = 11;
    // this is the SSH2 response; the SSH1 response is SSH_AGENT_RSA_IDENTITIES_ANSWER (2).
    const SSH_AGENT_IDENTITIES_ANSWER = 12;
    // the SSH1 request is SSH_AGENTC_RSA_CHALLENGE (3)
    const SSH_AGENTC_SIGN_REQUEST = 13;
    // the SSH1 response is SSH_AGENT_RSA_RESPONSE (4)
    const SSH_AGENT_SIGN_RESPONSE = 14;

    // Agent forwarding status

    // no forwarding requested and not active
    const FORWARD_NONE = 0;
    // request agent forwarding when opportune
    const FORWARD_REQUEST = 1;
    // forwarding has been request and is active
    const FORWARD_ACTIVE = 2;

    /**
     * Unused
     */
    const SSH_AGENT_FAILURE = 5;

    /**
     * Socket Resource
     *
     * @var resource
     */
    private $fsock;

    /**
     * Agent forwarding status
     *
     * @var int
     */
    private $forward_status = self::FORWARD_NONE;

    /**
     * Buffer for accumulating forwarded authentication
     * agent data arriving on SSH data channel destined
     * for agent unix socket
     *
     * @var string
     */
    private $socket_buffer = '';

    /**
     * Tracking the number of bytes we are expecting
     * to arrive for the agent socket on the SSH data
     * channel
     *
     * @var int
     */
    private $expected_bytes = 0;

    /**
     * Default Constructor
     *
     * @return Agent
     * @throws BadConfigurationException if SSH_AUTH_SOCK cannot be found
     * @throws \RuntimeException on connection errors
     */
    public function __construct($address = null)
    {
        if (!$address) {
            switch (true) {
                case isset($_SERVER['SSH_AUTH_SOCK']):
                    $address = $_SERVER['SSH_AUTH_SOCK'];
                    break;
                case isset($_ENV['SSH_AUTH_SOCK']):
                    $address = $_ENV['SSH_AUTH_SOCK'];
                    break;
                default:
                    throw new BadConfigurationException('SSH_AUTH_SOCK not found');
            }
        }

        if (in_array('unix', stream_get_transports())) {
            $this->fsock = fsockopen('unix://' . $address, 0, $errno, $errstr);
            if (!$this->fsock) {
                throw new \RuntimeException("Unable to connect to ssh-agent (Error $errno: $errstr)");
            }
        } else {
            if (substr($address, 0, 9) != '\\\\.\\pipe\\' || strpos(substr($address, 9), '\\') !== false) {
                throw new \RuntimeException('Address is not formatted as a named pipe should be');
            }

            $this->fsock = fopen($address, 'r+b');
            if (!$this->fsock) {
                throw new \RuntimeException('Unable to open address');
            }
        }
    }

    /**
     * Request Identities
     *
     * See "2.5.2 Requesting a list of protocol 2 keys"
     * Returns an array containing zero or more \phpseclib3\System\SSH\Agent\Identity objects
     *
     * @return array
     * @throws \RuntimeException on receipt of unexpected packets
     */
    public function requestIdentities()
    {
        if (!$this->fsock) {
            return [];
        }

        $packet = pack('NC', 1, self::SSH_AGENTC_REQUEST_IDENTITIES);
        if (strlen($packet) != fputs($this->fsock, $packet)) {
            throw new \RuntimeException('Connection closed while requesting identities');
        }

        $length = current(unpack('N', $this->readBytes(4)));
        $packet = $this->readBytes($length);

        list($type, $keyCount) = Strings::unpackSSH2('CN', $packet);
        if ($type != self::SSH_AGENT_IDENTITIES_ANSWER) {
            throw new \RuntimeException('Unable to request identities');
        }

        $identities = [];
        for ($i = 0; $i < $keyCount; $i++) {
            list($key_blob, $comment) = Strings::unpackSSH2('ss', $packet);
            $temp = $key_blob;
            list($key_type) = Strings::unpackSSH2('s', $temp);
            switch ($key_type) {
                case 'ssh-rsa':
                case 'ssh-dss':
                case 'ssh-ed25519':
                case 'ecdsa-sha2-nistp256':
                case 'ecdsa-sha2-nistp384':
                case 'ecdsa-sha2-nistp521':
                    $key = PublicKeyLoader::load($key_type . ' ' . base64_encode($key_blob));
            }
            // resources are passed by reference by default
            if (isset($key)) {
                $identity = (new Identity($this->fsock))
                    ->withPublicKey($key)
                    ->withPublicKeyBlob($key_blob)
                    ->withComment($comment);
                $identities[] = $identity;
                unset($key);
            }
        }

        return $identities;
    }

    /**
     * Returns the SSH Agent identity matching a given public key or null if no identity is found
     *
     * @return ?Identity
     */
    public function findIdentityByPublicKey(PublicKey $key)
    {
        $identities = $this->requestIdentities();
        $key = (string) $key;
        foreach ($identities as $identity) {
            if (((string) $identity->getPublicKey()) == $key) {
                return $identity;
            }
        }

        return null;
    }

    /**
     * Signal that agent forwarding should
     * be requested when a channel is opened
     *
     * @return void
     */
    public function startSSHForwarding()
    {
        if ($this->forward_status == self::FORWARD_NONE) {
            $this->forward_status = self::FORWARD_REQUEST;
        }
    }

    /**
     * Request agent forwarding of remote server
     *
     * @param SSH2 $ssh
     * @return bool
     */
    private function request_forwarding(SSH2 $ssh)
    {
        if (!$ssh->requestAgentForwarding()) {
            return false;
        }

        $this->forward_status = self::FORWARD_ACTIVE;

        return true;
    }

    /**
     * On successful channel open
     *
     * This method is called upon successful channel
     * open to give the SSH Agent an opportunity
     * to take further action. i.e. request agent forwarding
     *
     * @param SSH2 $ssh
     */
    public function registerChannelOpen(SSH2 $ssh)
    {
        if ($this->forward_status == self::FORWARD_REQUEST) {
            $this->request_forwarding($ssh);
        }
    }

    /**
     * Forward data to SSH Agent and return data reply
     *
     * @param string $data
     * @return string Data from SSH Agent
     * @throws \RuntimeException on connection errors
     */
    public function forwardData($data)
    {
        if ($this->expected_bytes > 0) {
            $this->socket_buffer .= $data;
            $this->expected_bytes -= strlen($data);
        } else {
            $agent_data_bytes = current(unpack('N', $data));
            $current_data_bytes = strlen($data);
            $this->socket_buffer = $data;
            if ($current_data_bytes != $agent_data_bytes + 4) {
                $this->expected_bytes = ($agent_data_bytes + 4) - $current_data_bytes;
                return false;
            }
        }

        if (strlen($this->socket_buffer) != fwrite($this->fsock, $this->socket_buffer)) {
            throw new \RuntimeException('Connection closed attempting to forward data to SSH agent');
        }

        $this->socket_buffer = '';
        $this->expected_bytes = 0;

        $agent_reply_bytes = current(unpack('N', $this->readBytes(4)));

        $agent_reply_data = $this->readBytes($agent_reply_bytes);
        $agent_reply_data = current(unpack('a*', $agent_reply_data));

        return pack('Na*', $agent_reply_bytes, $agent_reply_data);
    }
}
<?php

/**
 * Pure-PHP ssh-agent client.
 *
 * {@internal See http://api.libssh.org/rfc/PROTOCOL.agent}
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2009 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\System\SSH\Agent;

use phpseclib3\Common\Functions\Strings;
use phpseclib3\Crypt\Common\PrivateKey;
use phpseclib3\Crypt\Common\PublicKey;
use phpseclib3\Crypt\DSA;
use phpseclib3\Crypt\EC;
use phpseclib3\Crypt\RSA;
use phpseclib3\Exception\UnsupportedAlgorithmException;
use phpseclib3\System\SSH\Agent;
use phpseclib3\System\SSH\Common\Traits\ReadBytes;

/**
 * Pure-PHP ssh-agent client identity object
 *
 * Instantiation should only be performed by \phpseclib3\System\SSH\Agent class.
 * This could be thought of as implementing an interface that phpseclib3\Crypt\RSA
 * implements. ie. maybe a Net_SSH_Auth_PublicKey interface or something.
 * The methods in this interface would be getPublicKey and sign since those are the
 * methods phpseclib looks for to perform public key authentication.
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 * @internal
 */
class Identity implements PrivateKey
{
    use ReadBytes;

    // Signature Flags
    // See https://tools.ietf.org/html/draft-miller-ssh-agent-00#section-5.3
    const SSH_AGENT_RSA2_256 = 2;
    const SSH_AGENT_RSA2_512 = 4;

    /**
     * Key Object
     *
     * @var PublicKey
     * @see self::getPublicKey()
     */
    private $key;

    /**
     * Key Blob
     *
     * @var string
     * @see self::sign()
     */
    private $key_blob;

    /**
     * Socket Resource
     *
     * @var resource
     * @see self::sign()
     */
    private $fsock;

    /**
     * Signature flags
     *
     * @var int
     * @see self::sign()
     * @see self::setHash()
     */
    private $flags = 0;

    /**
     * Comment
     *
     * @var null|string
     */
    private $comment;

    /**
     * Curve Aliases
     *
     * @var array
     */
    private static $curveAliases = [
        'secp256r1' => 'nistp256',
        'secp384r1' => 'nistp384',
        'secp521r1' => 'nistp521',
        'Ed25519' => 'Ed25519'
    ];

    /**
     * Default Constructor.
     *
     * @param resource $fsock
     */
    public function __construct($fsock)
    {
        $this->fsock = $fsock;
    }

    /**
     * Set Public Key
     *
     * Called by \phpseclib3\System\SSH\Agent::requestIdentities()
     *
     * @param PublicKey $key
     */
    public function withPublicKey(PublicKey $key)
    {
        if ($key instanceof EC) {
            if (is_array($key->getCurve()) || !isset(self::$curveAliases[$key->getCurve()])) {
                throw new UnsupportedAlgorithmException('The only supported curves are nistp256, nistp384, nistp512 and Ed25519');
            }
        }

        $new = clone $this;
        $new->key = $key;
        return $new;
    }

    /**
     * Set Public Key
     *
     * Called by \phpseclib3\System\SSH\Agent::requestIdentities(). The key blob could be extracted from $this->key
     * but this saves a small amount of computation.
     *
     * @param string $key_blob
     */
    public function withPublicKeyBlob($key_blob)
    {
        $new = clone $this;
        $new->key_blob = $key_blob;
        return $new;
    }

    /**
     * Get Public Key
     *
     * Wrapper for $this->key->getPublicKey()
     *
     * @return mixed
     */
    public function getPublicKey()
    {
        return $this->key;
    }

    /**
     * Sets the hash
     *
     * @param string $hash
     */
    public function withHash($hash)
    {
        $new = clone $this;

        $hash = strtolower($hash);

        if ($this->key instanceof RSA) {
            $new->flags = 0;
            switch ($hash) {
                case 'sha1':
                    break;
                case 'sha256':
                    $new->flags = self::SSH_AGENT_RSA2_256;
                    break;
                case 'sha512':
                    $new->flags = self::SSH_AGENT_RSA2_512;
                    break;
                default:
                    throw new UnsupportedAlgorithmException('The only supported hashes for RSA are sha1, sha256 and sha512');
            }
        }
        if ($this->key instanceof EC) {
            switch ($this->key->getCurve()) {
                case 'secp256r1':
                    $expectedHash = 'sha256';
                    break;
                case 'secp384r1':
                    $expectedHash = 'sha384';
                    break;
                //case 'secp521r1':
                //case 'Ed25519':
                default:
                    $expectedHash = 'sha512';
            }
            if ($hash != $expectedHash) {
                throw new UnsupportedAlgorithmException('The only supported hash for ' . self::$curveAliases[$this->key->getCurve()] . ' is ' . $expectedHash);
            }
        }
        if ($this->key instanceof DSA) {
            if ($hash != 'sha1') {
                throw new UnsupportedAlgorithmException('The only supported hash for DSA is sha1');
            }
        }
        return $new;
    }

    /**
     * Sets the padding
     *
     * Only PKCS1 padding is supported
     *
     * @param string $padding
     */
    public function withPadding($padding)
    {
        if (!$this->key instanceof RSA) {
            throw new UnsupportedAlgorithmException('Only RSA keys support padding');
        }
        if ($padding != RSA::SIGNATURE_PKCS1 && $padding != RSA::SIGNATURE_RELAXED_PKCS1) {
            throw new UnsupportedAlgorithmException('ssh-agent can only create PKCS1 signatures');
        }
        return $this;
    }

    /**
     * Determines the signature padding mode
     *
     * Valid values are: ASN1, SSH2, Raw
     *
     * @param string $format
     */
    public function withSignatureFormat($format)
    {
        if ($this->key instanceof RSA) {
            throw new UnsupportedAlgorithmException('Only DSA and EC keys support signature format setting');
        }
        if ($format != 'SSH2') {
            throw new UnsupportedAlgorithmException('Only SSH2-formatted signatures are currently supported');
        }

        return $this;
    }

    /**
     * Returns the curve
     *
     * Returns a string if it's a named curve, an array if not
     *
     * @return string|array
     */
    public function getCurve()
    {
        if (!$this->key instanceof EC) {
            throw new UnsupportedAlgorithmException('Only EC keys have curves');
        }

        return $this->key->getCurve();
    }

    /**
     * Create a signature
     *
     * See "2.6.2 Protocol 2 private key signature request"
     *
     * @param string $message
     * @return string
     * @throws \RuntimeException on connection errors
     * @throws UnsupportedAlgorithmException if the algorithm is unsupported
     */
    public function sign($message)
    {
        // the last parameter (currently 0) is for flags and ssh-agent only defines one flag (for ssh-dss): SSH_AGENT_OLD_SIGNATURE
        $packet = Strings::packSSH2(
            'CssN',
            Agent::SSH_AGENTC_SIGN_REQUEST,
            $this->key_blob,
            $message,
            $this->flags
        );
        $packet = Strings::packSSH2('s', $packet);
        if (strlen($packet) != fputs($this->fsock, $packet)) {
            throw new \RuntimeException('Connection closed during signing');
        }

        $length = current(unpack('N', $this->readBytes(4)));
        $packet = $this->readBytes($length);

        list($type, $signature_blob) = Strings::unpackSSH2('Cs', $packet);
        if ($type != Agent::SSH_AGENT_SIGN_RESPONSE) {
            throw new \RuntimeException('Unable to retrieve signature');
        }

        if (!$this->key instanceof RSA) {
            return $signature_blob;
        }

        list($type, $signature_blob) = Strings::unpackSSH2('ss', $signature_blob);

        return $signature_blob;
    }

    /**
     * Returns the private key
     *
     * @param string $type
     * @param array $options optional
     * @return string
     */
    public function toString($type, array $options = [])
    {
        throw new \RuntimeException('ssh-agent does not provide a mechanism to get the private key');
    }

    /**
     * Sets the password
     *
     * @param string|bool $password
     * @return never
     */
    public function withPassword($password = false)
    {
        throw new \RuntimeException('ssh-agent does not provide a mechanism to get the private key');
    }

    /**
     * Sets the comment
     */
    public function withComment($comment = null)
    {
        $new = clone $this;
        $new->comment = $comment;
        return $new;
    }

    /**
     * Returns the comment
     *
     * @return null|string
     */
    public function getComment()
    {
        return $this->comment;
    }
}
<?php

/**
 * ReadBytes trait
 *
 * PHP version 5
 *
 * @author    Jim Wigginton <terrafrost@php.net>
 * @copyright 2015 Jim Wigginton
 * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
 * @link      http://phpseclib.sourceforge.net
 */

namespace phpseclib3\System\SSH\Common\Traits;

/**
 * ReadBytes trait
 *
 * @author  Jim Wigginton <terrafrost@php.net>
 */
trait ReadBytes
{
    /**
     * Read data
     *
     * @param int $length
     * @throws \RuntimeException on connection errors
     */
    public function readBytes($length)
    {
        $temp = fread($this->fsock, $length);
        if (strlen($temp) != $length) {
            throw new \RuntimeException("Expected $length bytes; got " . strlen($temp));
        }
        return $temp;
    }
}
<?php

/**
 * Bootstrapping File for phpseclib
 *
 * composer isn't a requirement for phpseclib 2.0 but this file isn't really required
 * either. it's a bonus for those using composer but if you're not phpseclib will
 * still work
 *
 * @license http://www.opensource.org/licenses/mit-license.html MIT License
 */

if (extension_loaded('mbstring')) {
    // 2 - MB_OVERLOAD_STRING
    // mbstring.func_overload is deprecated in php 7.2 and removed in php 8.0.
    if (version_compare(PHP_VERSION, '8.0.0') < 0 && ini_get('mbstring.func_overload') & 2) {
        throw new UnexpectedValueException(
            'Overloading of string functions using mbstring.func_overload ' .
            'is not supported by phpseclib.'
        );
    }
}
# minimalist openssl.cnf file for use with phpseclib

HOME			= .
RANDFILE		= $ENV::HOME/.rnd

[ v3_ca ]
#!/bin/sh
#
# An example hook script to check the commit log message taken by
# applypatch from an e-mail message.
#
# The hook should exit with non-zero status after issuing an
# appropriate message if it wants to stop the commit.  The hook is
# allowed to edit the commit message file.
#
# To enable this hook, rename this file to "applypatch-msg".

. git-sh-setup
commitmsg="$(git rev-parse --git-path hooks/commit-msg)"
test -x "$commitmsg" && exec "$commitmsg" ${1+"$@"}
:
#!/bin/sh
#
# An example hook script to check the commit log message.
# Called by "git commit" with one argument, the name of the file
# that has the commit message.  The hook should exit with non-zero
# status after issuing an appropriate message if it wants to stop the
# commit.  The hook is allowed to edit the commit message file.
#
# To enable this hook, rename this file to "commit-msg".

# Uncomment the below to add a Signed-off-by line to the message.
# Doing this in a hook is a bad idea in general, but the prepare-commit-msg
# hook is more suited to it.
#
# SOB=$(git var GIT_AUTHOR_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p')
# grep -qs "^$SOB" "$1" || echo "$SOB" >> "$1"

# This example catches duplicate Signed-off-by lines.

test "" = "$(grep '^Signed-off-by: ' "$1" |
	 sort | uniq -c | sed -e '/^[ 	]*1[ 	]/d')" || {
	echo >&2 Duplicate Signed-off-by lines.
	exit 1
}
#!/usr/bin/perl

use strict;
use warnings;
use IPC::Open2;

# An example hook script to integrate Watchman
# (https://facebook.github.io/watchman/) with git to speed up detecting
# new and modified files.
#
# The hook is passed a version (currently 2) and last update token
# formatted as a string and outputs to stdout a new update token and
# all files that have been modified since the update token. Paths must
# be relative to the root of the working tree and separated by a single NUL.
#
# To enable this hook, rename this file to "query-watchman" and set
# 'git config core.fsmonitor .git/hooks/query-watchman'
#
my ($version, $last_update_token) = @ARGV;

# Uncomment for debugging
# print STDERR "$0 $version $last_update_token\n";

# Check the hook interface version
if ($version ne 2) {
	die "Unsupported query-fsmonitor hook version '$version'.\n" .
	    "Falling back to scanning...\n";
}

my $git_work_tree = get_working_dir();

my $retry = 1;

my $json_pkg;
eval {
	require JSON::XS;
	$json_pkg = "JSON::XS";
	1;
} or do {
	require JSON::PP;
	$json_pkg = "JSON::PP";
};

launch_watchman();

sub launch_watchman {
	my $o = watchman_query();
	if (is_work_tree_watched($o)) {
		output_result($o->{clock}, @{$o->{files}});
	}
}

sub output_result {
	my ($clockid, @files) = @_;

	# Uncomment for debugging watchman output
	# open (my $fh, ">", ".git/watchman-output.out");
	# binmode $fh, ":utf8";
	# print $fh "$clockid\n@files\n";
	# close $fh;

	binmode STDOUT, ":utf8";
	print $clockid;
	print "\0";
	local $, = "\0";
	print @files;
}

sub watchman_clock {
	my $response = qx/watchman clock "$git_work_tree"/;
	die "Failed to get clock id on '$git_work_tree'.\n" .
		"Falling back to scanning...\n" if $? != 0;

	return $json_pkg->new->utf8->decode($response);
}

sub watchman_query {
	my $pid = open2(\*CHLD_OUT, \*CHLD_IN, 'watchman -j --no-pretty')
	or die "open2() failed: $!\n" .
	"Falling back to scanning...\n";

	# In the query expression below we're asking for names of files that
	# changed since $last_update_token but not from the .git folder.
	#
	# To accomplish this, we're using the "since" generator to use the
	# recency index to select candidate nodes and "fields" to limit the
	# output to file names only. Then we're using the "expression" term to
	# further constrain the results.
	if (substr($last_update_token, 0, 1) eq "c") {
		$last_update_token = "\"$last_update_token\"";
	}
	my $query = <<"	END";
		["query", "$git_work_tree", {
			"since": $last_update_token,
			"fields": ["name"],
			"expression": ["not", ["dirname", ".git"]]
		}]
	END

	# Uncomment for debugging the watchman query
	# open (my $fh, ">", ".git/watchman-query.json");
	# print $fh $query;
	# close $fh;

	print CHLD_IN $query;
	close CHLD_IN;
	my $response = do {local $/; <CHLD_OUT>};

	# Uncomment for debugging the watch response
	# open ($fh, ">", ".git/watchman-response.json");
	# print $fh $response;
	# close $fh;

	die "Watchman: command returned no output.\n" .
	"Falling back to scanning...\n" if $response eq "";
	die "Watchman: command returned invalid output: $response\n" .
	"Falling back to scanning...\n" unless $response =~ /^\{/;

	return $json_pkg->new->utf8->decode($response);
}

sub is_work_tree_watched {
	my ($output) = @_;
	my $error = $output->{error};
	if ($retry > 0 and $error and $error =~ m/unable to resolve root .* directory (.*) is not watched/) {
		$retry--;
		my $response = qx/watchman watch "$git_work_tree"/;
		die "Failed to make watchman watch '$git_work_tree'.\n" .
		    "Falling back to scanning...\n" if $? != 0;
		$output = $json_pkg->new->utf8->decode($response);
		$error = $output->{error};
		die "Watchman: $error.\n" .
		"Falling back to scanning...\n" if $error;

		# Uncomment for debugging watchman output
		# open (my $fh, ">", ".git/watchman-output.out");
		# close $fh;

		# Watchman will always return all files on the first query so
		# return the fast "everything is dirty" flag to git and do the
		# Watchman query just to get it over with now so we won't pay
		# the cost in git to look up each individual file.
		my $o = watchman_clock();
		$error = $output->{error};

		die "Watchman: $error.\n" .
		"Falling back to scanning...\n" if $error;

		output_result($o->{clock}, ("/"));
		$last_update_token = $o->{clock};

		eval { launch_watchman() };
		return 0;
	}

	die "Watchman: $error.\n" .
	"Falling back to scanning...\n" if $error;

	return 1;
}

sub get_working_dir {
	my $working_dir;
	if ($^O =~ 'msys' || $^O =~ 'cygwin') {
		$working_dir = Win32::GetCwd();
		$working_dir =~ tr/\\/\//;
	} else {
		require Cwd;
		$working_dir = Cwd::cwd();
	}

	return $working_dir;
}
#!/bin/sh
#
# An example hook script to prepare a packed repository for use over
# dumb transports.
#
# To enable this hook, rename this file to "post-update".

exec git update-server-info
#!/bin/sh
#
# An example hook script to verify what is about to be committed
# by applypatch from an e-mail message.
#
# The hook should exit with non-zero status after issuing an
# appropriate message if it wants to stop the commit.
#
# To enable this hook, rename this file to "pre-applypatch".

. git-sh-setup
precommit="$(git rev-parse --git-path hooks/pre-commit)"
test -x "$precommit" && exec "$precommit" ${1+"$@"}
:
#!/bin/sh
#
# An example hook script to verify what is about to be committed.
# Called by "git commit" with no arguments.  The hook should
# exit with non-zero status after issuing an appropriate message if
# it wants to stop the commit.
#
# To enable this hook, rename this file to "pre-commit".

if git rev-parse --verify HEAD >/dev/null 2>&1
then
	against=HEAD
else
	# Initial commit: diff against an empty tree object
	against=$(git hash-object -t tree /dev/null)
fi

# If you want to allow non-ASCII filenames set this variable to true.
allownonascii=$(git config --type=bool hooks.allownonascii)

# Redirect output to stderr.
exec 1>&2

# Cross platform projects tend to avoid non-ASCII filenames; prevent
# them from being added to the repository. We exploit the fact that the
# printable range starts at the space character and ends with tilde.
if [ "$allownonascii" != "true" ] &&
	# Note that the use of brackets around a tr range is ok here, (it's
	# even required, for portability to Solaris 10's /usr/bin/tr), since
	# the square bracket bytes happen to fall in the designated range.
	test $(git diff --cached --name-only --diff-filter=A -z $against |
	  LC_ALL=C tr -d '[ -~]\0' | wc -c) != 0
then
	cat <<\EOF
Error: Attempt to add a non-ASCII file name.

This can cause problems if you want to work with people on other platforms.

To be portable it is advisable to rename the file.

If you know what you are doing you can disable this check using:

  git config hooks.allownonascii true
EOF
	exit 1
fi

# If there are whitespace errors, print the offending file names and fail.
exec git diff-index --check --cached $against --
#!/bin/sh
#
# An example hook script to verify what is about to be committed.
# Called by "git merge" with no arguments.  The hook should
# exit with non-zero status after issuing an appropriate message to
# stderr if it wants to stop the merge commit.
#
# To enable this hook, rename this file to "pre-merge-commit".

. git-sh-setup
test -x "$GIT_DIR/hooks/pre-commit" &&
        exec "$GIT_DIR/hooks/pre-commit"
:
#!/bin/sh

# An example hook script to verify what is about to be pushed.  Called by "git
# push" after it has checked the remote status, but before anything has been
# pushed.  If this script exits with a non-zero status nothing will be pushed.
#
# This hook is called with the following parameters:
#
# $1 -- Name of the remote to which the push is being done
# $2 -- URL to which the push is being done
#
# If pushing without using a named remote those arguments will be equal.
#
# Information about the commits which are being pushed is supplied as lines to
# the standard input in the form:
#
#   <local ref> <local oid> <remote ref> <remote oid>
#
# This sample shows how to prevent push of commits where the log message starts
# with "WIP" (work in progress).

remote="$1"
url="$2"

zero=$(git hash-object --stdin </dev/null | tr '[0-9a-f]' '0')

while read local_ref local_oid remote_ref remote_oid
do
	if test "$local_oid" = "$zero"
	then
		# Handle delete
		:
	else
		if test "$remote_oid" = "$zero"
		then
			# New branch, examine all commits
			range="$local_oid"
		else
			# Update to existing branch, examine new commits
			range="$remote_oid..$local_oid"
		fi

		# Check for WIP commit
		commit=$(git rev-list -n 1 --grep '^WIP' "$range")
		if test -n "$commit"
		then
			echo >&2 "Found WIP commit in $local_ref, not pushing"
			exit 1
		fi
	fi
done

exit 0
#!/bin/sh
#
# Copyright (c) 2006, 2008 Junio C Hamano
#
# The "pre-rebase" hook is run just before "git rebase" starts doing
# its job, and can prevent the command from running by exiting with
# non-zero status.
#
# The hook is called with the following parameters:
#
# $1 -- the upstream the series was forked from.
# $2 -- the branch being rebased (or empty when rebasing the current branch).
#
# This sample shows how to prevent topic branches that are already
# merged to 'next' branch from getting rebased, because allowing it
# would result in rebasing already published history.

publish=next
basebranch="$1"
if test "$#" = 2
then
	topic="refs/heads/$2"
else
	topic=`git symbolic-ref HEAD` ||
	exit 0 ;# we do not interrupt rebasing detached HEAD
fi

case "$topic" in
refs/heads/??/*)
	;;
*)
	exit 0 ;# we do not interrupt others.
	;;
esac

# Now we are dealing with a topic branch being rebased
# on top of master.  Is it OK to rebase it?

# Does the topic really exist?
git show-ref -q "$topic" || {
	echo >&2 "No such branch $topic"
	exit 1
}

# Is topic fully merged to master?
not_in_master=`git rev-list --pretty=oneline ^master "$topic"`
if test -z "$not_in_master"
then
	echo >&2 "$topic is fully merged to master; better remove it."
	exit 1 ;# we could allow it, but there is no point.
fi

# Is topic ever merged to next?  If so you should not be rebasing it.
only_next_1=`git rev-list ^master "^$topic" ${publish} | sort`
only_next_2=`git rev-list ^master           ${publish} | sort`
if test "$only_next_1" = "$only_next_2"
then
	not_in_topic=`git rev-list "^$topic" master`
	if test -z "$not_in_topic"
	then
		echo >&2 "$topic is already up to date with master"
		exit 1 ;# we could allow it, but there is no point.
	else
		exit 0
	fi
else
	not_in_next=`git rev-list --pretty=oneline ^${publish} "$topic"`
	/usr/bin/perl -e '
		my $topic = $ARGV[0];
		my $msg = "* $topic has commits already merged to public branch:\n";
		my (%not_in_next) = map {
			/^([0-9a-f]+) /;
			($1 => 1);
		} split(/\n/, $ARGV[1]);
		for my $elem (map {
				/^([0-9a-f]+) (.*)$/;
				[$1 => $2];
			} split(/\n/, $ARGV[2])) {
			if (!exists $not_in_next{$elem->[0]}) {
				if ($msg) {
					print STDERR $msg;
					undef $msg;
				}
				print STDERR " $elem->[1]\n";
			}
		}
	' "$topic" "$not_in_next" "$not_in_master"
	exit 1
fi

<<\DOC_END

This sample hook safeguards topic branches that have been
published from being rewound.

The workflow assumed here is:

 * Once a topic branch forks from "master", "master" is never
   merged into it again (either directly or indirectly).

 * Once a topic branch is fully cooked and merged into "master",
   it is deleted.  If you need to build on top of it to correct
   earlier mistakes, a new topic branch is created by forking at
   the tip of the "master".  This is not strictly necessary, but
   it makes it easier to keep your history simple.

 * Whenever you need to test or publish your changes to topic
   branches, merge them into "next" branch.

The script, being an example, hardcodes the publish branch name
to be "next", but it is trivial to make it configurable via
$GIT_DIR/config mechanism.

With this workflow, you would want to know:

(1) ... if a topic branch has ever been merged to "next".  Young
    topic branches can have stupid mistakes you would rather
    clean up before publishing, and things that have not been
    merged into other branches can be easily rebased without
    affecting other people.  But once it is published, you would
    not want to rewind it.

(2) ... if a topic branch has been fully merged to "master".
    Then you can delete it.  More importantly, you should not
    build on top of it -- other people may already want to
    change things related to the topic as patches against your
    "master", so if you need further changes, it is better to
    fork the topic (perhaps with the same name) afresh from the
    tip of "master".

Let's look at this example:

		   o---o---o---o---o---o---o---o---o---o "next"
		  /       /           /           /
		 /   a---a---b A     /           /
		/   /               /           /
	       /   /   c---c---c---c B         /
	      /   /   /             \         /
	     /   /   /   b---b C     \       /
	    /   /   /   /             \     /
    ---o---o---o---o---o---o---o---o---o---o---o "master"


A, B and C are topic branches.

 * A has one fix since it was merged up to "next".

 * B has finished.  It has been fully merged up to "master" and "next",
   and is ready to be deleted.

 * C has not merged to "next" at all.

We would want to allow C to be rebased, refuse A, and encourage
B to be deleted.

To compute (1):

	git rev-list ^master ^topic next
	git rev-list ^master        next

	if these match, topic has not merged in next at all.

To compute (2):

	git rev-list master..topic

	if this is empty, it is fully merged to "master".

DOC_END
#!/bin/sh
#
# An example hook script to make use of push options.
# The example simply echoes all push options that start with 'echoback='
# and rejects all pushes when the "reject" push option is used.
#
# To enable this hook, rename this file to "pre-receive".

if test -n "$GIT_PUSH_OPTION_COUNT"
then
	i=0
	while test "$i" -lt "$GIT_PUSH_OPTION_COUNT"
	do
		eval "value=\$GIT_PUSH_OPTION_$i"
		case "$value" in
		echoback=*)
			echo "echo from the pre-receive-hook: ${value#*=}" >&2
			;;
		reject)
			exit 1
		esac
		i=$((i + 1))
	done
fi
#!/bin/sh
#
# An example hook script to prepare the commit log message.
# Called by "git commit" with the name of the file that has the
# commit message, followed by the description of the commit
# message's source.  The hook's purpose is to edit the commit
# message file.  If the hook fails with a non-zero status,
# the commit is aborted.
#
# To enable this hook, rename this file to "prepare-commit-msg".

# This hook includes three examples. The first one removes the
# "# Please enter the commit message..." help message.
#
# The second includes the output of "git diff --name-status -r"
# into the message, just before the "git status" output.  It is
# commented because it doesn't cope with --amend or with squashed
# commits.
#
# The third example adds a Signed-off-by line to the message, that can
# still be edited.  This is rarely a good idea.

COMMIT_MSG_FILE=$1
COMMIT_SOURCE=$2
SHA1=$3

/usr/bin/perl -i.bak -ne 'print unless(m/^. Please enter the commit message/..m/^#$/)' "$COMMIT_MSG_FILE"

# case "$COMMIT_SOURCE,$SHA1" in
#  ,|template,)
#    /usr/bin/perl -i.bak -pe '
#       print "\n" . `git diff --cached --name-status -r`
# 	 if /^#/ && $first++ == 0' "$COMMIT_MSG_FILE" ;;
#  *) ;;
# esac

# SOB=$(git var GIT_COMMITTER_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p')
# git interpret-trailers --in-place --trailer "$SOB" "$COMMIT_MSG_FILE"
# if test -z "$COMMIT_SOURCE"
# then
#   /usr/bin/perl -i.bak -pe 'print "\n" if !$first_line++' "$COMMIT_MSG_FILE"
# fi
#!/bin/sh

# An example hook script to update a checked-out tree on a git push.
#
# This hook is invoked by git-receive-pack(1) when it reacts to git
# push and updates reference(s) in its repository, and when the push
# tries to update the branch that is currently checked out and the
# receive.denyCurrentBranch configuration variable is set to
# updateInstead.
#
# By default, such a push is refused if the working tree and the index
# of the remote repository has any difference from the currently
# checked out commit; when both the working tree and the index match
# the current commit, they are updated to match the newly pushed tip
# of the branch. This hook is to be used to override the default
# behaviour; however the code below reimplements the default behaviour
# as a starting point for convenient modification.
#
# The hook receives the commit with which the tip of the current
# branch is going to be updated:
commit=$1

# It can exit with a non-zero status to refuse the push (when it does
# so, it must not modify the index or the working tree).
die () {
	echo >&2 "$*"
	exit 1
}

# Or it can make any necessary changes to the working tree and to the
# index to bring them to the desired state when the tip of the current
# branch is updated to the new commit, and exit with a zero status.
#
# For example, the hook can simply run git read-tree -u -m HEAD "$1"
# in order to emulate git fetch that is run in the reverse direction
# with git push, as the two-tree form of git read-tree -u -m is
# essentially the same as git switch or git checkout that switches
# branches while keeping the local changes in the working tree that do
# not interfere with the difference between the branches.

# The below is a more-or-less exact translation to shell of the C code
# for the default behaviour for git's push-to-checkout hook defined in
# the push_to_deploy() function in builtin/receive-pack.c.
#
# Note that the hook will be executed from the repository directory,
# not from the working tree, so if you want to perform operations on
# the working tree, you will have to adapt your code accordingly, e.g.
# by adding "cd .." or using relative paths.

if ! git update-index -q --ignore-submodules --refresh
then
	die "Up-to-date check failed"
fi

if ! git diff-files --quiet --ignore-submodules --
then
	die "Working directory has unstaged changes"
fi

# This is a rough translation of:
#
#   head_has_history() ? "HEAD" : EMPTY_TREE_SHA1_HEX
if git cat-file -e HEAD 2>/dev/null
then
	head=HEAD
else
	head=$(git hash-object -t tree --stdin </dev/null)
fi

if ! git diff-index --quiet --cached --ignore-submodules $head --
then
	die "Working directory has staged changes"
fi

if ! git read-tree -u -m "$commit"
then
	die "Could not update working tree to new HEAD"
fi
#!/bin/sh
#
# An example hook script to block unannotated tags from entering.
# Called by "git receive-pack" with arguments: refname sha1-old sha1-new
#
# To enable this hook, rename this file to "update".
#
# Config
# ------
# hooks.allowunannotated
#   This boolean sets whether unannotated tags will be allowed into the
#   repository.  By default they won't be.
# hooks.allowdeletetag
#   This boolean sets whether deleting tags will be allowed in the
#   repository.  By default they won't be.
# hooks.allowmodifytag
#   This boolean sets whether a tag may be modified after creation. By default
#   it won't be.
# hooks.allowdeletebranch
#   This boolean sets whether deleting branches will be allowed in the
#   repository.  By default they won't be.
# hooks.denycreatebranch
#   This boolean sets whether remotely creating branches will be denied
#   in the repository.  By default this is allowed.
#

# --- Command line
refname="$1"
oldrev="$2"
newrev="$3"

# --- Safety check
if [ -z "$GIT_DIR" ]; then
	echo "Don't run this script from the command line." >&2
	echo " (if you want, you could supply GIT_DIR then run" >&2
	echo "  $0 <ref> <oldrev> <newrev>)" >&2
	exit 1
fi

if [ -z "$refname" -o -z "$oldrev" -o -z "$newrev" ]; then
	echo "usage: $0 <ref> <oldrev> <newrev>" >&2
	exit 1
fi

# --- Config
allowunannotated=$(git config --type=bool hooks.allowunannotated)
allowdeletebranch=$(git config --type=bool hooks.allowdeletebranch)
denycreatebranch=$(git config --type=bool hooks.denycreatebranch)
allowdeletetag=$(git config --type=bool hooks.allowdeletetag)
allowmodifytag=$(git config --type=bool hooks.allowmodifytag)

# check for no description
projectdesc=$(sed -e '1q' "$GIT_DIR/description")
case "$projectdesc" in
"Unnamed repository"* | "")
	echo "*** Project description file hasn't been set" >&2
	exit 1
	;;
esac

# --- Check types
# if $newrev is 0000...0000, it's a commit to delete a ref.
zero=$(git hash-object --stdin </dev/null | tr '[0-9a-f]' '0')
if [ "$newrev" = "$zero" ]; then
	newrev_type=delete
else
	newrev_type=$(git cat-file -t $newrev)
fi

case "$refname","$newrev_type" in
	refs/tags/*,commit)
		# un-annotated tag
		short_refname=${refname##refs/tags/}
		if [ "$allowunannotated" != "true" ]; then
			echo "*** The un-annotated tag, $short_refname, is not allowed in this repository" >&2
			echo "*** Use 'git tag [ -a | -s ]' for tags you want to propagate." >&2
			exit 1
		fi
		;;
	refs/tags/*,delete)
		# delete tag
		if [ "$allowdeletetag" != "true" ]; then
			echo "*** Deleting a tag is not allowed in this repository" >&2
			exit 1
		fi
		;;
	refs/tags/*,tag)
		# annotated tag
		if [ "$allowmodifytag" != "true" ] && git rev-parse $refname > /dev/null 2>&1
		then
			echo "*** Tag '$refname' already exists." >&2
			echo "*** Modifying a tag is not allowed in this repository." >&2
			exit 1
		fi
		;;
	refs/heads/*,commit)
		# branch
		if [ "$oldrev" = "$zero" -a "$denycreatebranch" = "true" ]; then
			echo "*** Creating a branch is not allowed in this repository" >&2
			exit 1
		fi
		;;
	refs/heads/*,delete)
		# delete branch
		if [ "$allowdeletebranch" != "true" ]; then
			echo "*** Deleting a branch is not allowed in this repository" >&2
			exit 1
		fi
		;;
	refs/remotes/*,commit)
		# tracking branch
		;;
	refs/remotes/*,delete)
		# delete tracking branch
		if [ "$allowdeletebranch" != "true" ]; then
			echo "*** Deleting a tracking branch is not allowed in this repository" >&2
			exit 1
		fi
		;;
	*)
		# Anything else (is there anything else?)
		echo "*** Update hook: unknown type of update to ref $refname of type $newrev_type" >&2
		exit 1
		;;
esac

# --- Finished
exit 0
# git ls-files --others --exclude-from=.git/info/exclude
# Lines that start with '#' are comments.
# For a project mostly in C, the following would be a good set of
# exclude patterns (uncomment them if you want to use them):
# *.[oa]
# *~
0896ef7c7a0f0341ffaa53306d81d3d7c7d1694e	refs/remotes/origin/compatibility/php-7.2
7b5115dc0672fd0a873df34d5b079b7c4e270ddb	refs/remotes/origin/compatibility/php-7.4
6d51eb71d3fd19df3999ec0c8569870599a1d59b	refs/remotes/origin/dockerized-masking-feature
3f0821e6f24f59749fdc276b2323279b7117af24	refs/remotes/origin/main
f5caf6f7a284036e9cadd061433a2f31f8f77aa3	refs/remotes/origin/php83-dockerized-masking-feature
Unnamed repository; edit this file 'description' to name the repository.
7b5115dc0672fd0a873df34d5b079b7c4e270ddb
ref: refs/heads/compatibility/php-7.4
[core]
	repositoryformatversion = 0
	filemode = true
	bare = false
	logallrefupdates = true
[remote "origin"]
	url = https://gitlab.orangehrm.com/devops/internal-tools/common.git
	fetch = +refs/heads/*:refs/remotes/origin/*
[remote "composer"]
	url = https://gitlab.orangehrm.com/devops/internal-tools/common.git
	fetch = +refs/heads/*:refs/remotes/composer/*
[branch "compatibility/php-7.4"]
	remote = origin
	merge = refs/heads/compatibility/php-7.4
PACK     xj0 {} ɧ#E iLﵴ:%#q/H930܉1MQ%C 5>(6T7A།YDI{1$`G3	<xnnc@xo"K^ֿ:;}}mrVI'/<Ls[B&kcGzۨ,7dXk*GXJzS!r.~hwhxAj0E:E=Ph7CfQ$lKA{xz^"`ze7)01[/ȃsh)ԃG4q[ǖ9A:$0hoTFy&.%Sic\ֿTwu}se}3>piu5&^5=dV~R56|7dJxɻ0Br/#x
Asj{<ȥR`Ѣge1MJct?\zہ*A	!Xl5T!xOIj0}IbC$ô-[X2L@^[-TuW+0/(5TJm<ڑ'B3*)F<X85Xd:L*H(`IҀgr+vVLw->x[ٟ}/ :c<	3{lmx#zG.B1b;6bǴ~b|Ŷ?Qj xN0<H8-:D4omĎҽ=AH<4܈L.
\R;.JI
mP݊
C^A6Ku0>`S7<o}\kAG_smXFr
uy ar]e풙l;%||\^ZN9 Z`c\_suX"PFj!P_qeS?3u%hxű@ @<G >hfϗQ"^!y5]~̥ab]	5UQ8%0{#ǂ n%SlFlMWu Ĺo?"x1n  {^}$)]ue[K"qiZcY,d
fhyۀj*$ڊ7xQ|`y$n 3=R*\NRJ:-R)RS7ftz-:/ڢVMkk?715~XzPz܀e̒ZapNK{cx1n0 w{@%[ [.MӵH2d%כ*PN$#-/,H䣦a&kMKd}Njq=]p8SEԳg_ko}|gڸEj%Ga#Zsڼs3w3lEjk*[k;Yϒx;0D{=ROBlkc8=8bZeԧ`*`<:{2  ⍕&1JiEH4Y!8L08Ҹ.8?Q^Kp?p)5wg˃2ZSks.%/*VG|sWxKJ1Ef@ZTBU%M:=q=p@ilVc ^Y	Vqx$W&5IF+<LF8"^z$#w,}rA[~`1^h?žRnk/#ӒuNXCvDk^sqQ0w-0	y-o53yrݐ|w1x1n0E{NǹmKQ.b<3,F^S$MrWq4(c%h|š٩V#:=)H^G.}yahD+u#`N{Q\̍d>-d>sިAx[\h\+t8;yo9j57-w5x6Sک~]Lj6yђUڕKT:ulxN0}p=4O$4mJ=a |m9!J0㬢V%=TWpXŘjO3Bzeq?5f9;RL1p`cL~7X<ĸ@%
w1r1ͭ-aF2	Nid3ZutFbFRthfHmmkJ
90QHD}Q8=H׾_vz$o!䇭O㖉׸n"i1NƸ\qx!D~EAV6@~՞8$ϏS+JEBF:^-։;5:`JzINiLAk)AϞk|v%up(wm]8|YNVw5qva8oN}761֞c܉×[x1n0Ew{@m:u)z$m@޾B??cB/݌ڑe~jG!r35,tL;c-7ٹS\y;Lwv5>\0x`~O/oMS1\kdAmH[پq币f8=$= ,@
,I,B,!{~|xn {?N`l~.U<^	73i섊JGdtR.jAcżJoLQ&Oӎ*IZR΄$!j^hrάh?[q;w*8c%riVX[23:2c"T#Րs1큜 "#<./px10E;rҤM%ؘ8qlZ&(Ljd&oP'A9bT}^T$Up8)0{u2iT2hY"jͧι⼿)=	9'R;.Pz\#fa0.X=vmݖZ?EjY>!Biu_.XFx=n0wB<n$1P:e	(DR*zҹC$ւHļf
^ZB$(q]`	5Zj^4~b{wIp|VVjF5q{^\ܺoN@rNPp<k.\K|9dVhצ1Ԋ,HLJz)e@+zIH5anMyv{Pq5_C$85vNW_$&]xOKj0o_$J鮫Yz +>Z̇7"qEW3l#cpb>j'بt@B׈Fo}:h6#(*яxXn?GA>NG˗P(g>H1Ԝz+ b)yKe9D%O)[<ΞJ0Bc[<+,bax̽N0>O=c	jno9[Ilt'HP7BOZEjpAcc82κ@Yr=cg".XZ7I,^0m<"<Qbp_T*:S]vjNV5Iy_
R2!1n8}H$N+EGS_zu\%UTzL)Z$2+ְsܚ/'xKn!D}
#4 EQvQ9ӠӢr	*WN@l]3vVi{0ɥ[5_NT0PLU	$&<L؍Ҋ-uB;GkGLZֱ{VހJm\S-4YLe!ü=q$r?T'ʙHҦ@0?qAI/  -3'7ZoלmYyxA0zƣ,XB2ƎX
v!_5EWӣB3٤Ktƈt'BLhҵH)̊nB8cJ3"'&*LwF~ƵuxI[.K]3``He9辍ͪJ겭Zx֭G"T\xMj0@N1@Ȗ ^enm)"'M	1M1&d/9lbFVwjR:uF40ZLh6d
):\T>ڨdnۺ|9
fQ!I{տnK殈<a%C0SUk
C!{SXS
xAN0FO1{ʎ#!U&M Ra	=} ;ǉ%5 2KhS<`nP: !96ω]4!׼6:ɗ_&劵Rrq)qLc܍RzV).h7>8i~ )T*x=n F{n0U.b0e1}hzc`=z@a/J+5{GrvN6QKVĸnъ;o҃ a.Am0qzM(ד/S~>jΩe](U ([r?"mKR9^ř-j.20KXG礞C~= LnxJ1@f:&)J=	_0vDfSoO~"6]q}<	038E&6.%% L2%D@*?%CױtouEFcY/t^R;ˢS@1bۺ!s3fa{5k9uRi!^`Wx1N0Ebzc;-,Rd<l,b;rܞTP/Zc/zU-9Vqnp͊SIR=qoe4OM!bιaDx9aÂ<%(3C1Z :%P+ZsuAb?^r+?"$1%xeo+!崅r qx=n {Vh"Ti<lo	R|O^@ܚ1(Ld!&3HLMÎr	Gm5cF9RZ+Br79ɉ}->ѯφᣔ}5R1/tq%]aJcf`٦;mǴo1x?2n/rv{i9`p%E=6jcm'Ct~'ЏeXqx1N0Ebz׎XB.{XxQpޓ0f;41*Gv6UtVd*
ףY?8< 88)tR1,[VkAYXnp><Z3M5;ڜDlk=AN^I6. JR^0'?W>Q_!q-484/#~~ 9tx1j0 {b!IpN&볈%i*/H930RA>(&Mc4jrE{}c,Гa4jɰZ#gȱ-]Ri/R27<9R1?xJ՝6E[7b~@cc fSsC}JEq)y*#[0-6Kdux;n!~OA",At|bEn)щ؎bK]=$8Zε;#ΥȣN䴗J['N@ndLaȭz쳵G.ZSu3a
ƵlkG[n.Sr|ɵb/*&:GQqxAn Eb"QT*`IԞ^=}}^EY,(O8CE21z@AUrlx`D1֙SuE*zX*4ʟMpR)o~OOp~r: ig:=.u~lWHu,P(RA.^~+JR7z*2C88R%>3a4x;n0D{@ҥ!˕I.rINrf޼щt`>$ArT>95.PN`ʑv\j#p2Z:'=QXY".(MBLdZ5r)p|l퀑fֿu8{ݰw&Qa{FeAc[n0K4_X9Fcg>WB/*&:='ˣoxN0<H';ϝT Q_u>	CPf|vZ`5V-1E
UspȠe"ʸ*DBC2]:j4,yHkI>cc5xaUcof;trYk^0gطk*|D4Lm-m_pᧀp.anSߜzɗx9n0E{@qR3I.r0ErT1 HqGcآk-zb/=GAIEAXG:4{jCK߽Tȑ4qd`VR	=&@G0k+kƩeM(oۤVHk4Ғ{MWn78f{A|*ta1spVrQjz|k|sxn D{NIQ(E\5,6:|AfhiLRi3]Fkqi$h8K28E`<;Ɍf"Z^1>J֘p7x-y+"$Þn5O[5Ή*k=wŅWrb.\w>Q&W؃+}/8L'lawx;n0{@$`RKre1E>j|3:ppV2,MtP}Mt0iM2cl6^.ïj⪙ur>Jθ4M[Fy{=i"Nc+:ǵ~%.$Zp:DVtZM7w&.g">8c+B9)s(<~ 6ơxAN0E=HtҴTB [m4S%)h8=YqvKOs~h4LMǶ20CgK;skxB#fBau
n侯kgL	zȋ_QW<ei#՝3mZНqTn>g[UHx.#I"tЗ^ObHP$(ǰ՗b(J,5&)a.ED$۞o,x;n {n*Jj1xe>4	/}XA"G2.za*ٯi:хtm(ѫMJ!mIWVs U֠4D!čzEփ4̵q罕%. RMZ-;mqcwq)G-z.20\ 9O?׺px1N0Db{8GB*hhN,;Z;XbٙSPA+OFFv^JiE/ޚ5DXwZ:qTrգSUn2/ה"-XxNqMAm/ղmjzR֚7n'8B!0NLg2uK*}bK[\O"ϟWz߿[uǛxJ0}%?Mo
"
pdrlU[A|W|p+ENRA	-4!z?)B:"!nJ
'?HU! u҅QV'RziJk'K|ޕtd0nѢ;ֺg~#H0{d\Qi!CKnpZ{Eyrs,^磽7ZKm}sy	x=n!=hW(]* /YV}hOfr%B	b<H3䬅HZrP\NL eY\D+"#ptNYJ 9\Ίkt$([^n/d8oh{{ݨw&\kyxm-c-.|aM{V7!9qPe|/?wpxJ0EI(qk2)&Uފp.\a"c)ccKc{c([Y)G!dmnt:v7I*/8b <Q4n?p_/P;)\k=(gT$B<cgTr)6Hq~@
L?ǉpD"IHS>J ו -K=4<qxPj0+^zd]JhOɥB^KXĖZ.__/(sff`0CobܓΐeG׏&xN|$k#"v+	
],(HNZ+Du*}|'Ni&^O|YΠQy<^5wIuWafs2|sH^ύni~|P_6J4^mx;n!=h-~߀dERˠx¸C j%C@Q;L#NZںȞEY9h& s&ѨC^!!dx(h 9Nx7qC,'/}K}`W|=þ2,%kIFЦ[j$"N+|u812h$DGAq^xN0D|H'ǉN@%"a '_@744aNZو"E-Nc3<ͦ Ҡ	k=Fz''d-U²oT	k-ԖQxBʋ䓯=hp;e4ֺ*¾A#2Кh;(\6zMzarxu/ȅ2p__AlZxƱ0 @)tiY -̐!RD
C2 {wnl!u #*YeKDd78ϐ|ΓCZn`@8/۴T*T(`x=n0FwB[(Q@PtC,CQ޾Zt#?>1`X3HIY8mdT`t.lNj|t3h7	d1Mk6XΌF6aFM{mFi="YA}˵>j{+K]O4oh9lӍ۝:K0_D>z~~s)3`z^#<nFx ޺W&0zϐX0E2`|?{"ERIȡbN&O'R`I[7>ki@X DCɠS|xoRE/K-<[=?+]x=n0FwB[h@PtC	,CQ޾r$7f\9!*+sܴլu@Ӊ.44k0zΚ6M`J7oMi!"HN1xfWOz{õ_qk@JCؖ;mq$.|U霷[@R3GLrx=n!=hW(]*/YV}hOߌNĀSr*Ƞ$e,& 90N`^+CI*ἴB%dυU.'E	#Xw<d$q[g7L{y7|ǝ^;VsH޸|m-cؖ;0K4_X9Fc~nk^0UMuzN%G |px1N0Db:/;DBhA4 k{D?9=TѼb* Gq[
KiSFx)9ȫfGTA*55BE򤇎Q׏kKfxG5uY7<C+2cixq9>4ZQýJ4gZh&P;rlu5^2_p}OP30Ճ x
x R)84ؙ~s=e9s4?vx=N0b{MXBO@ +:r	'o)df	8L㍢N#9eVe麣Serk	F(SN~:v5%2ŅO)xeLj5*uIX
ZFC<(!yI}'rCIeaKHp)~nxx9n0E{@w F.1Sh&9A, (fW
8DDpI蜶I.>zo"PբA)qCP=&[))F^Q_O:H|zP󃆹6:l5^J'M:#;mqcR9^Ź3,f.20+(5I={pϛxj0E~hT(C)yƛ1&6,(.9p20cmkA{=YףiX;s8#
w`Q2GY-c;FW\dN>xRdx^KzqiZkkzRQI [>v|xM%ʍ$m	|Вǉ}KN(CJ$ǆKmx=j1@ާP!j̰49AoMUٽ֖s9EellBo:4iDQja$BO7`x):lx3\;[6y|1k>D݁jkhƢaB9ӆ{]RWxN0ySUXBNqڻI:QA	|-;59y:mzW+
]δ5ag]4hkpzGTEg)4_6gg:Ǆg<J<\}]m
,QVyĠR4m8n'NG^O	T`˚x$S;1SbFR/IA%qx[ BELao`&Z!1%u_}'x̽j0 Oq{!,(]ڡt	tI"]/	:i%Dh64j؏Zo:Gv;VbmKE3xLl'7䈜l>t
ǎ|Cxa5oxCx."ySr;x2Cg(dUJy!}ZPa]~+vPA\[ɒ#*μ@S,r]+a2`x˩&kxj@ 
J)S/ZĻ2/_cgn˞0U3;"tA]2*Wk17QIm/}|C8d9.xCxM]ĳ#IzSהeqeAR4H&
׉/ڙ3+ZOW0kMh?%"s%4 V-vwPNyeI܌Qx̱N0=Oq;UرHK{/%O?W"u'TdG-PBX){o74YRf0f {R*9
nІz/w;o/od <\*BMGWVik-<DJJ֜hBǥy&~q}3^|(O:ktxfm18.ʱ =Ĵr%کa)stˍ֜x̻N@@_1=R8&}ƳxC"|=ѕ1Ltvb/ά|SE@[o.E:g$KjeQE7k	j1k-([kXxD5R;VMTsN"?Ij|ЎuOeaTh
pTvV|ⷂWqGgzm=0 ִ'y  \b@4=NxN0ESUy9i% J׉cGϹG7@ΕuUPmT1wtB&Z*k1F5M:vn1
c<La(^e궧R5ea<? &G5y%JNΰ>x
U}\JYɴiy@ mh`' 2H2X.ٴɻ3}3Mqf[|vx1N0 b{N'Nb>@ub]썜(GPH%k(Ak[?tDC`4fJE`m4hFC@FnyEY袭e
Wa#19-xGx+ϞWۋx9Ԛw++E^+G*'ؤ&/bL?o,*^ȱv-uI񀅧+#֊Ǉee<Z)?	<1DbVxJ0@}b#I';Mmxm$S~\8RLF=M렽4CkV&c;g]@X(cj.xmЎP04xp\ʜQaO\0ϴy{RcNV5-h͕&J;yJ/|dABQh	(P0F5iMr"皪P'|&YRW8s_oGl}֝x;n0 ݧ %NYuEQK9@o߭'ה,HJqif@?Zur&xOk(p\CGo8.d#ђ(\0)R(֍3Iy~љ}qDjpݸ}3EjKn|\\v2 k "OpԀA$@\*O@;jn?8tvx=j1@^>`3ҥrQ8V͡
eX%.Q\촤_cAִha#Cۄ%Y
HI1Ͼ)_eUsΒcvܮrxއ/F=^1Y#`M^hSkhM?_MbYٙxJ0 {bʒ&"e{'iMJ2E_A<?xRA]k|gQfg\LʑSޏ'r!k4c5ۑ[Ujp90=2oOi⹬'3h{VtjxPN55l͕G$mxp-u ɰ,L8ս4n[[(HĵF(`
@9Xe	į	e85?xJ0@}MDmoi&ɭз7{g"ZqZ=Xt&7NNhRmoaV&auOh%mdGBoi%uzP})y+)E/xE8_K&[k)zMݵueRVɡa7^(?֔gB&;'M"?e< E!(aX1c]W*(>w;|nwXś`ÚI,==[xMK1@+.l>6"^<PI2.m2%;U{<D5ś`<9樴N7\SmGkuބ轏&S&x;b^n3sCYxDKuwJYe׺܆L'O	ϙ?[9ЕlG?:Bkvd};`ːm&}7|:wx̱j0 _q{!HePB;u*>.3ҥPt~0ؓsѴZlϦ]YɎs!<۳qƣ1܅*1&Qms)^K:3әoxg6UI~U\zC	T`"龣疸+qQ#$U"Ўe`@V3=N#3vx̽N0=WqvOSK!1 @XM`#YGz%d|̡G;w\[mQvV+gD!umQ(V0F7;tko2L짭p0=Y0v9wi#wJ54ݨQKD?ꄁL^HZ'	kR$Gʓ/!);PPl9\WxCmW܎8z8?z2>V	)}fx̱N0 =_q;U6SKbcBH{9.B	IO(u;cN}2tb2;]pQ["k[:9k@{SU㸭Xn1OxC8R{3:gL?qisVٚ'$ׁcŁӅ*^A+pIUaUɤ ;^&$\8w6^+Mhey^>7Luȴo~ }xMK@@s~$D$Thl) xie[GZr8B?r?āR|b\rQ`CĎBpv>ٱmTxF£HA3n󯸗S͛(3ot4QrUn͎F
_ۂG~(x^?@*#닼b!/O|W_zh
sTyg:	A<cu,Q2/%ŒxJ@,&̀I3NG\^TVA
@uTp=W}eak{(`}ݱWfRYuW9cMguQ3rs`=2tLBmxazJ)a'p0ʼwi󼴕5te4ASNijOXy'%M$<8z*M@ }Iy<;B8Ъ@7oAoJS¼Hzaѐ"Ͼ ێxMN0}N1{*?;BH,X)xl'`>zd\;әAFϰl+bI?f劬094LZGv G]Cs7WR2k__x-BvvFJJQskN,Z*/RS}[ٳI!RT{ͤbZnqSdI\8(m򫾣Mj,@gڴ3kGR.Q։x̿N0=Oq;JLL,{/uĎ.Bxz|O7*=TK(|\Q攚@iT"#v\kz]kp\1mrCxq/\)|u~3mZ&yEn͙R.gZ*ǊWz-8
/"$	#2^sk,K: pĚ~Sq*q?6?/|x=n0w{@-;:u	=DB-)!=}=A7{$"p-'cQ3
0݈+3ͭr憅|?GB4'wIZ׽bDx9!aCI.gcomO'e:g[snGŅ^no*Wr)FL^ewHrDv*w(z~"o8V0~eX"?H8")xAK0sIDO",dII7 <J&ugIh֚%;;1S,0T][M?0Bv줓5e@^_)E,X<q5o''heR Mu7_
ϷLmә^"۝%G)O߈v	bxŧ~ۃx\[79gg|l〞x1n! Wl:)*UK89@~ HK9G˂ǈR	(}5?d(SMd$Q+f"ztXlC\Iw79i;Fm._Vٯ`#|8lmOUͼ3g(s(Cm*wse^x=
1@>H/H~w2 bgefI/6Y*o4O&2!h0=y6!;uCF13!AhuN5gDcm](kkƺ=AT~:Յ^w'b+ehpeR[gT5x1n  Wl)SR#e[wtyAf3-8h}t`)А>aK5pc*Rvsպ%:Lh蚻_';j?xA[^Y\
#.amSg3JZ੏	rN<&}_ڴ[xKK0sр'/;I۰MfIO=D0q5!.`'hUUwJE{Yk&jGgv0{rAxe.(kW,gZk>Ώ0XܠGc9ܺ-+'rgz.> 
f9#naPFƜO|ȟRVdaÚX".-5nE3x̱j0Oq{CY v%='dX+!Zt?nD0^ބNdF;jM[Qar$A[a:mp$TO~R^y%:9a!ZcZp6,3Ŗg2FxS߹sbѺt\\/Zpy|QW;7tBc nɦ%\$w ϝ`&Xt|-uIK;T"G1T=v''x=nB1Eޫ>zKK".6rQHYS \hqCdaĚb8pVOL鋊sLcZ+9ZtF_wkA?D>!v$6%v9ڜTյ3:Zcm5<攼T;җzV&^ΔxJ0 wwY6m<ݗ$kVܿe0Õ',geA5ދ7S/&4)t'4[aV*CBCVMAJ+zk~=7GR27<"ܦ?q_*֚;Z#' :WRR;P@ǥBR^[H!f:2w-F@_1eGVrǶ~!pب ƕ0m1|^`+KtJN|J-I3cWx;N0 >I$Y~qb?4P?Ie;7~"Ѵ+덙SclX9]O]ͭ3{6%3zl[!kn=vR2">yᵦ+zIIjD_1[sc$[oR`iP#%_`ʘb_bY] +fb*Cb Qy{
x51
0`"i$(t77}wэ)rӲ1s$ʨumN͙Xh>ZuﳟnTuP\Br('8~|?1OxAN0@}N1{jq#U+@*؞4Vb;8Do'`Tfڵ;F;5jL׏5+UڮGK}f^`N-,#]R´ogR2	J|㩦/Zj<QR5Kp](k]A
lR3[+n3 O*S (Py<QB1}<x;n! ОSLɂ#EVT>,xWLD]%H&3xG[J9nkbšV hiX sD1'vgŖfQ=סnԎu_ xƝ/U\
%[EoMϵ?[Qc 	Udtn^XXx;n! ОSLEREM~[jXl'gl̔ͮ}ƽ6'NMȔڻ3U8HyǴ)|C&\Kd:7|qcI ]NMM+Z-M]0z20Tj?pNկ`x;N0 >	9k;%b+**8=Z S q'ј,lN
2Ƭʸd_p%bOn^$[
%M2YW76xE
GrCx1)smXv-?0lb֋\9M"h>8:ĲqﱖKtv#T0*,r=w7t쏔8ZbG> }axN0E|۩$X/uc5*ѿG0 ee0⭂j1SYhbaX>Ы㛬+8_^J,ktLTg5]I40iCV}JJQsIth|ƻ&ѵr")bn1zQ
N[ e+6Av q/+TEoW|Nx1n ݧx{TETS 4yHO߭'It"g'
1NƝO)J7wT!x:tn;>Øn]o\*˜W^^ChBzggzQQChd6\8Htcl{~#iZښ#豣?im(WiԱoWP-n55
*+fy_:CwxMJ1}NQ{A*+%1d@o~P_l
8$ ;Iob2w79V VbbB*0s*6:/LSclt9Φ/kluJ]t$S/AW	sx%;
@ Pb,e6w*:~f!ɦ!7l-|sޤNDL*Xx'ƁρQ(i;yM6@5b3ՀcsZ jE^ަ$ad햝`]{k{_ 5/ x;n! ОSLof,KC`X+w~[S\#:#,g{rh$δz&
dQ7KCGԻF$d1*c~q3y;åoRf;Ѿ@{v@;nh%+1%''4攴Yx;j1ss8shI-ؕz5>'pPβS:4265꜓Tu!x⢹1hZI)鍓J&˚LUxܰ7;'}5^wP(eL	^3RMc7O^Py]`5x;j1 ~O1} ~`)K#dKbst9AD+EQ΄`@!Vd&)&9=Qa.H&jV28޻g)sH	/et,wZnxGx^-- ;5FS9?t\!cC&<u`-pgSmv,1h"`0ݨMNKt<xMK0};i~DTq6iCwd_/
ݞp&;LvDѡۦQu*tYV}mPUmt;De9syLюpRDe)chakRU՝jKI!xfbO=i;Z8A0ғfg
ˌL;?`_V?f>,903L0`-S}?axJ0{bڤI@iv4a7&SзD|?|4fܢ-B.N{n	8)IihxE`
1aU_-[H/Nʬ֡pXޱ\j-(1]p}mX6-|Grƙh<D+.\</ s}	s?oz:"%V,eoW̽Ɛ¯:{*aTzGx;n! ~O1}$kHQ.1A8~ ޚ4!5"B"zO)]}]8*%4Χ3"]mF}ʘpTw1:RsL7-hG78ZklەC}LxqpTc6^vM~`mxAJ1@s4i&(I~LME/=F9d8`DRQHب0Ei
/tT.8'lR` \9ڱL/g?X7Jm<U#	dfWpk˙n+u~>=Oj
=/9L@3O n+k]3ov%XS}?|r\xJ0}!iI"*Pa&i.Ӌv{ÅTR@V)#YwvOC:E,X(1kAC9m{tH^bN7<׊sB'Dc;H6{}'cޚtR组APHp<7ˌLOma.!كyr7cxXS*Srۮx;n! ОSL)Y)ҥ!a֋qΟ.'H*D!p	RGPZv)`DS1BJI :,Ns,*6ïu	W.=Fuԓ~cw.a
ެwh+й)<z@Ɯ*n~7]xJ0@}iD"mrӆgLn	\ÅHzIVQ@g(jrzvRjnX(1tC/[kZѳ$ӂS,N5]iCx9!>pc.ZK<iAup'1zf[s!sBۥ>D%B>
x8)NPN倐oNi!887?~xJ0{b.K6M"avL۰ISo/^|ߏO
[kva<aS[jq4RFS`,`|kRiȵGX7n2s7b!3"_xy ݠjjU9N)ܪ\'gƸ^֧uS&;3oY !-m$
eGfr!-1;|nTv<w (GbX ͳD|xŻ@ P:e4)l.HY׼m{h3gWTUUvvymD &BOl	F'yAHAvJq^iwg#Zux+@ д$,;fV̯AR֟FXEI T#ZRb@: !n)sCYSXj:(Afb8@9ҟ7ȸ.އu_kufj'yxš0 tڮwWd?qk%!~dsX<g޷y72IPNS,RLP%Y3)Sy,-3rdPͣfa.;a}>ɝݼ]C%nx̱N0 =_q;UUqlK!1tbA| ˥1}Ź l|6f89Gp$G?néȦa㪀n!{{cbbw6Do	dw]+a"E*2^<Kzᵕ#Iy	!SGRJRٺ7^T|\XE1"{P-[N?iS@+ 8Y.uTnMSIPvexJ0 {b6ixكN'Id*{'t7M9k0Nw%F[57,G2nPf#7	1d<d/GŴ!sN(˺9L3/%('hsNwz1"ml߭p@\:3R_r+H*1kb<aJo%1N;U8-L[=5?ߑqOx;n! ОSL⻀ER0EM~[8V睭eTvI;Ky]'LtYF$̜c؍)|C&\Kd:7|qcK&SÛN"_[~7uJpJ'mȄ"ev\C:p_ߟxAN  }O101@)1q=2C0_Ze;'3,"FU&4cK1huYTזv=i-IWt=/"[.#?xeTm|3M
nժ=A?Ѹ8IR`+r{9e,Xi+v+$2$nx1n  Wl鄁 ER,Z_i`W_lTmT!xgbZk!.',&L@4!XD\VLm5wQ_O'H?t|?xȠh,0V,slj;Rv}>1VԜx̽J1 ~b+gs"zVzLe%#9|>D@:*ޢ_ݲX1s6vzP
69j@J'zN-VhN0M
xTn;QvŊ#G]ѭÝrFM[D9%Wv	bX!>zÅO#m{OwFR8MP l
xAJ0 }O1{ӴI|ԍ+L&&Sޝ'pIe_}osڢ~&xMQ>UX9=zHi"E8OvS`-ʰ7l#-
o8Gü!QָT7^kPIWPV{Wz3}${~)Xoض@3wlhe M*ccflP9t sx1n! {^%[8$+JU^.GI"qI&{leE&h!m¢Y4Y7؆qG;1Ŕlb}8?	zo4syНR_j7ɣc57oj{eNyOM}z<J*0 wAUF7i2h/`*xJ0{b$iM@DxA|Ifm2k.O/^|?|6*YgH:hSB5d ;?\q'`lL'FH=9Ph}oH˱c]^E*%o"<$뙗VGгNM{цN4x/r=>WnܠDl3v}+A.&WvCr?prx1n! ^}$(]*?bŇXy(H=!ѸTXlHؖ,hX"˃	ęݚHf%P=_}&{ִs:x_QS]@>Xg	Vg%ikuNF~Y&jI@xoPc4\^GT^xKJ1 }t>xJR餚L"y@DWQS2V6z[܆iMI mRՄCFqSͱK/Q|4+sWԾy)I}&x\^$^ٖ9CBCd(a]jw8}_Ax;n! ~O1}$"+]*b9X,d[󭠱d9vCaCDdKb2nO<oIX}M<RIhdBjkk:Jm4ߪA)Ɲ)r1 |VUmWj
6NC7ul[^x1n!E9H H*"J70`2h iqpш "Wk4h&Xi1ob^QX6*yFqx!M{ma?:GǞK^kE{Ͼhe%<ZӜƠ6)|ۙQ-f lk:DJNhiK.tltxMN0F=HN$+$ء4IIRӓl[K,NgcPҬYcjrNERT'ʲcΝ	Oft3>f-rTJWלeݨ/O/xɅҧ,%>YMt(<`׸&i~iÇ򭻽K	DJ^.^h]m{j*ߦ({@HGJV*7n ۚ?5taxKN0=EXu:S'MSKc5+N$.hf=4 ?.Y ұFT^*҂7N+5;eEdG~ '
FgíZQO@=*GЃiZŅr=(xN)RYJU<lS_yɥQ2}[(\8ntTr+B,IwIu@vП 
کP>wi^۷'"<8W$HkWRZ))x=N1"4LL"!DGE	$KYߧdD%	*Qpn|N\`j
8åe|0>H0X6qV[LN`Jtw<8ږ}k	ڶ_7OOxҊ[>gg"}3A@2سB
|CA	>+ݱڠaW_ğ3|%el9_{x=N0{b+$俵_$cp'q{RpHS qZ_ţh1Q#%$\.XOlla[!_&!Zs?Gu큗ٛ5;.۶9\ 2J}bl8
ycDv6wR
^x5ʻ0 P2w-c~%BQzZ)Q W}ڧǺBZMj@T;+k>)2kLr.ѫ*܄\
ajLs{><H.2YxQAN0Z6M&iOmMY' ͞ьǮ#;ǀJɅU1H+tbTaz=0V+1brF;:qҒAY?[]rr1]^rNXu<?9Lg^J|s|Qɶ{ѪkӸ֝|˚Lr{k6@akM!ÜSmcU{|ݏMKPsw)1!x5ʱ1@QQQ0Í8Nl8vЉtLBvƎT1Red,A"i1:m22ZH*kh*:hF
X$뉰(I1E/9`˱	(P̰s_jV`~~]ƕG.| P:3xA
0E9ILWNjIۅ'pyVE yd9Γm4qfVԓF%KއNk3Zz阑	QQѫMJF7.RT#&8,zD8h2&R,XdoH
Ts^e\r/mR#xN0>E:9I{I$ؘn	ġmRoOtxd"ɵB;=
n,qs2	Jz݆Re'-bң\ΐ"t^X0[@U'"/ը;9vF?_vLoȞsNX`kS.^i.q5NRL=tغ3WbfYL5~AbDhg3\+^<}m?6Ps^9Ie?tx5ʱ1 @SQ0Ï8q씴l8N**J305^}C5J2Uq ܡ4(W2͙sfSA1j%cF
(gqCE͙#@<)TYELs7:>6e?2ۖxAn Eb10*Ub5D&EOlBsv)(jDǮ`ZwE=K)]:	;OxgǓbR;az/|&K~֧\Rۮ09KF$lu\qPF.a87	RU
Bx5̽0@aADC|ž1%BQzJ*)^m6ܗ9bLźb%ZS+I)er ̖7㺌<Y^I}	v@^:7bg:USi'Q*ɨ q[ߗ_cT1֛xAN!E}
v04$xQTM+7~ot1-6%0YL0h"PީKE[2Ơ#@H"{攴Zd,nYփ'AsTw9?~mI:ѣSw-yg>HEu)m<:\wŷt=Sy!ѠZuZ/I:[ tDxKj1D:EAUZV<IF2Ʒ,|GC5)5icчbE*ZA1XҐ6!%SΕuIS5h-]66/59Eyvj?$zsԾ2.ܷ,.ڡVGsʛR69
CI~	<ʿR?xMN09EXu:t+!Ď+N44&)i:' 	V)w9k1X%p
A6ZNNq(#9afI+tN`E[5ʃf	m)_k)WS[
KMgʵ}dHa"u]6/tHw@cn۲tލ8;h]\ciC.o1_i8bɄ?zm?wֱJ~C OxN0>E:rI.qS	!6x;q]#!@b`oYYrA<Z@g4i&Rk]pbtZ܃eA9!`I9Jg	6$XVM$i.a:x9a]3>~`:RAXLFV]ƵVȂ/Xqt[¸a%nXS͢ob_?b=&~_U5_]c$<584\xMN0F=EXu$i~%ر'pgZMi	#	Ο,HB e@Z*0;NyʹQjA܈3:=R|JHǅc_^	@mt!Nq%3w?m)!,
䭔mY7s
KMO´a-y5pzA:2&ػy$knL=2iS,5c_,X3lS+eO?w7(ܜxJ0E%iDFx?`>_桟o@wuρ[*V(sNzYS
.*<l"La8QZ4*E4'KΉݸO<Cײ1O`0w`ZFV
_Ϝfn
_[]zcJa4Vx-1  4M\\1=MϤ77w꬀Qtr)l#x۠Ab$zۻBidk`[1zr4
`ZHuW7vi\%_~rb
iºOD%81xKj0:KFOBUF(q[KF}	ɣ<du;4a&VNF#6j\:cJIeBT$-m֡NzfiUT$ã6*O~wy5ƙ×ZK]<p>ލZ.?|Bcvn}"<Àc5Kَ. VxPKN0a*OP	!vf	ęV3I4@ lVUTf1G)pvv5xg,bܸ%'c©06ju?;ｊ(СR9ZFt am)1,mY/؇DKMg.4I@Xߦ57vz":/|pL|Gƴ1>tgZˍ_	{m-]}@r݆jJlsJS:XxKN0>EA bg$Jn'؎Έ=AJUzǃ\Ԓ5:$fAfT2ŎCJhdIdnO^'>lnNwPZrdl-Ϲ(uNUlKo	߼Fz=-mp6)2%Xs!~ {bxn <;0e%@iI;'04QtNۏUݞ`?] ;5 ^ZmaƠRhfJjJ'	&!Q4){JM23eѹQpNI)Z\r 圠.ZK.9>(5-XƵV7vr$<T#l5{ ؇\5̻&cwQ~C{o7BWڧ3_]ל疜-xPN0+©lM#!'N\@|$%IWZ,/7{3cHFlG)`J2ncqpmoQ	C8(Y/ VJ,v(4F^,(NJh.ki42D`cʼP[a9F)nx5fH5iBWis-zcnJ\MBqf!zQŔЕ%Ls}PI}\rr:)nX0UCq@W}3sxMB19E'xϤffH+
jQsL1'f5_a13!nbQwiS[B FDヷhxCUnS'm{/
fkS>U_&vҮz}4Ko[AM1xKJD1 9E224x6ݙ}I~Q;'pWRTs%刂2Ɛ^.X+ezF '\IƐ}m=h|НMqM޾j!?r@>?m-gnZw>rSILv:>۸ڍ.TxIj1 zEAbBWzV<A iVUktQq"d0{A`
[ZP&3$0l1Y^3q"\>`b'~KQ75s(.[;g\{o7XT+	jB#	Aƽ&{UZx;!E{VAob=cl80ߩ\9'qP&L )h%&Ad me𒽱Q\i3*K(d(ZUrEtnc0-[D~Xpʿp˃3Zyo?Ђ6c؝rP[>Sg_پVyxAN!ENL4PcL\re<@@	C/.{˟PZ\"h\yoepQI#n4M&MK`3)ل$A;L謠}>bԮ7lt'v<S]^h)Z˜?509r|e޶Y2籷b!x1!E{NAob``!$heee<e1ޭ</,-xZ.&D"JG:%N.sZҥH<8"AmcdmמkWqyԺ`ӌ88Ն˃s+TQjo:;5%6Z?oL$oާy/Ux;j1D9Eߌ$03GN|Q/Raoo9	Vգ'Emiں۪.%%h2.w|G
N:XKSrmQdٹ'1>~T޹cw&nA^j2y[o*p!2ߩܠSES&+4`)cs>^ oux1N0 b{cǎ-!@E6|{zRʙF;3,!2(K!OhSc98aM&oR1)EG̀wݤ'vaFi[/JvS<YF"<pZTn1a@;g-@Mڣ>.{+}iGcc&xN;n 9"̀(Jj1 +}&'Hzs]-ZY7Qά_(PHmB	)[2jg.`HɈ5kGYrpb,7/V>z}NHxIzΙgM3ʎl@^wcq:ZxMN!&jIĝ+Q@t |_"o8MKY(foFlcȨ<M#zwvi3iiMȊYwN{YO^}p;{dС&OYT˭?4 Scu7򻀼&	qP?"[xO;N0s#$Pl&Ď^Ќ43|P8ftCdc{i}lPɕ:wNhԧİɧlb:t7{)uy3^"_e1'ۍC˦mNukIk>M]"}.cyCm东MP|($c+"FH{Pi~ }nxMj!vBL9: PPWP5:L(ExE.(1vґeZa: QZ>r><N(RfxuaXᳵcMZֱi[yI..YrvҒƠYc_eIkzR1TW!OτT0@ĔN;si5xA D[෉1\y_l@e	\μeU@n0)fHΓf STb66rGPdG&Np#+Rmy$?D_JҖ)=K|R>tĖ&7۴T@NkBaM[-~P}uYx;N0E=)**Vp{X3#VO*V@qstGg߳D&% AYU3NKunѹ_AYamUH(U6{Lu	7GkcWR[gzy
\rOtؒyV"&V%J{u2_kt>?_8]*x;0{=ZHQ QQrzM|oFZeԑӄɪ3(2bk<z ցEl#N! wYކRӰpP>JYǸ,?q+7u9SYRuV8Mqf) Ux=n {N1}HQ.U`+sPy7*-.r"qh7"FK4[YnT,uzyrNl}-ڐຐ e	Zwosҽgi&il̶ç	Us:yQiiYxj!Fy
gU!]w"o)s hmTЪJ>'(
CJ<pPc3yBJ`v ޸`xzr!ncbF{Cʎxl_zpFjUIZ-LS[LI`<E>~J4JOtq9_.R`2xJ1yn2I,P$;qv3%֋O>~\9[̈vdN#OX*	͙:7Bi"7[BKrm),^ijG'F:/''S乯Ep1Xzwv㭹uQwVx;7勋^/i4K9rˉ _x;N1Ds9^?#!DDDڞf?v=?&JzYS`\D03-Su`b?uqiq#8@<+:&MҲwW"v/xFVWm0YPs?6/YKCnGa]a]6M.}ݗ~ D`xNKN0#L&$Vs7qiW6?Sfa<`2.1<PaBqN\R2q(-4fǞ=fsGw[EJeToo"l>OxΫYgDtCrq\}3it\ KN10?T>8J)g1oIjUǚjx;N0Ek
KSL!DA5xy~;r<[{NDȚ&'HHmP)7^jKzcB/8h]z@DtbzDo0T~ȟKЖB/Z*-ul/\IHeQ-X_]ވÅ78Sn>Qag洦؉ׄxbTǏdzPx;! {NAo᳀$YYz<K	,g&iQ1FVL{hsNQ*4nсAV#Gapgk媭?cB:>P_@U)a¥­u^ʕr#M2c)ȴ%``˖GjHUixLAj0R7PJ{꩏Pl,5iUU ~h:ioC2s3BnA"Dc~$緃L^srT*KLM[)YZZwx)U򇦺Bٞ<<2]O55F~=*;wQsr]kxAN0D9HmWB_b!ء$Ay荩7K\LSCpJq_fS3ca9$_iE$⣣ӶF1:ٶxJ]6me;Lɯ>xD\<mϚ{aU,v@M߻ޮ`xAN!E*LtCPMЌO/q	\ .c`zu.OҦ`bIֺ-3[b%Go8/1DCͣhS.Ǩ׋`GeN6,sɩ/I(L9UFouW?a(x;n0{b{8H,%8".[OafcѺx-il-I;Wبsm21(1*'Lt&H9OJcnV|WT<	c@%B8HRt]7~7RΕ~y#;Kh5:{xݣDUŖxAj0E:%EW iF;/W_HՀAlOqF\0yR2UÐ1Sօ#y4OS]~LSB뺖_B7.7m"N?۲?Tu|G㧯tj̔dۣ.X;T1}޹Xx;j1DssâHcىaW#{5>ΪHiȤ}aJ,HxɉjMkWVwn%$.Xױ\SS+c]i=no7<+J_Dbj6M}ޯ2?p~?cFtr[x;n!=}dER00.|{o),t6)a 5hmK ʨPsVVYc&
!e}DRekPb٣L"GZ1KB<}}Y>hr{iěD-muNrq$u]e?3NVS)3lxMj0F9I@jPh/HLt_wt%'T/#u3mK/k/YPfMc0K@(f7zћiy'7q,n1[<ǌ*6GVfQC?kԻZlݛO0$ionw ʙRՅ+r]PbFjLGDXnXq"jϗew|xJ1ETI:ADq&U=	ӝI|3~{﹜Vi$b»iA7jZpF,Z<lQq#(5J	D>Jo[>^1rNB\<ġl>o gw(1u؆.a@--ƕ?/\w^{>|`
眖xk7lxKj0D>EAaȗ	X%YsdY3I5[eHQ9fCd-K!DF8lظtctY)Ȳ789}ސZkpڰyi6|鴱J9F-;mx bjyN;N+GX~;?qA_C!
|nOVǵsxJ0Ey,A&M! A`LmI$.v˝Hy4ڃMD=q "88*KaHa-`o Tw^Zo}򥵊qWCXh6r/ՙrAkk8%3cJs^ؘ'5qGέ֍Fzʝ"~\]B$~DfxJ0y,Os2(\pNM#Eނ<;pɄ>R4M.ZOD^i7vZY`S:E:Р1J;y.OzׇՋ:UW*qZsΔkYcߘ'~>N#ߝdF?|`]x;n0D{}O`I\!6ܕdX
]\T3xщ2d6hN7 :Q sFA6dAdd\thC11XoC07um]h&(/_JkAcrq:>Via&uި_ QI^{xAN!D&fn`ctC4(0aoOப^Rsh^fu:v93jFQiJ[vhd)gF2>a7RH{YOS/}pI1[^;a!k?6dɏn߼]gȽ17[_pxJ1y$Q|I$do<yXG̐$a6e̂H\sؔy"9yNEc!"mzR;6i=_'O	'zf>Q/|Ӧ;a!dΕxMN!}
v0*cܹCaFOY`5y9m&&'O䝤3-DF|BPH	)2uo߁6
"J)2;'{ɓ8ZWqGA|V1Suԝ^^b+BmѤi$*sr徳\ogExK~ׂ<,?m xJ0F}M3
_arLIr].s+3CR#8iHaʥ	;sa29̀C1ؐEDZՇH)Xy1I~V&8o/V;=4Ԇ+jGR^#^eEɑoRzut~Qd@x1n0EwB{h[,%uH
9珧{ڀH1cկaN%-g^Gv3M<k	ȠDSb	$.58'H$ֺlwkv/|W^Nu`Ö?oGK{ؽcr5oUExn <;0uHӴviO`bDK=|~LĥA5X
Z*	+p4@NH] SI14hUc88b0zy+66dph9zF%T`s8'"yY55eg4EP0XnK?6v|&6ͼ.W:i&W:d\KǗX6(pۍwr}o7eJHt)&a=ԔrI⃴hޔxJ0EKdPd7&MzK~{VA"\x1Qby0hEz*PH6Ď'#
<ё5|GJwQ"x+%SJ{xJs/jzt%@w;M5ZkI9KZ,%C~qny[EBwJv+xJ0ENW~$3y6G
ϯ7\{,n-"@[l';KvFYp	#q>cݕ
.?fGKlirbfkutUNU5S]FҟxB"kI^ib-pgNښb?-]~	óf55R(BU.7
1`	ehvU-{s{@opx]
B!@wW{?W6"ft
!^~A;YY2MQ$P0(و)#9! e}I*3Q$m9STcc;'KmLg;Ѯ*A3J|յUd~by7Yk	W]| KAxQj1D}
m95ZKum_CoпP%%7T<hD ScFs}iRB.BYw6&|4/|ɏW(Ûwkw3XD.@]XS(\GbWi*r?T	xAn EJĐTUu50ęLEȴ/'7?۽1/hjm&Oira[fhuTX:Lyu#1!L6ZB~$7Z4Ko\yo9
f<4NI;j%ӦF	Aq
d:A
;S_w+pp{ćh*x9N1E>	joUBdDs]h<N@GQރo#&-f9%WvK|s:hYCo_'M"%	h7<iYH[1 h]]9;*)_:]^^R+
&ԓvF/-?*}ե!ϣsuWqҡ.Y_e6jx%x%Ž0P)JvIKOEY$+Ka
^cXP7Rqj)k97Xú#n۱Q$$sibTGChjLQ>SeG!ɑx;n0D{ ,tD$C-pVZ.*4tUDenQV;U+(4*7sD1-5XՊ/oӑ:jJq0ͳޛ8RJq=_djv..(ךBI^DoOpzc;V%niSxV`Lt0Pʙ[}@İfq;;=8vJ 
x͘x=j1{b@V?kAI*zX" D 6)X9f&JĜlL:DL@g&vibRxkmޮX>j-C6,gY[~N5a.xj5ܼ.CS"2myo[[p~Y^?/a`x1n! {^}ؽr*%wH])gFEf-.X%hbw$m@IՆ5YZ3"9"\4+>:|rڎZw~Gֹ~{lơ!Ve>M]Ip*Qc^ϡ?ZxAj1E>"GȁRzB@	;dywT,/nx"B6T1EN9-8֒0_*Oa=I4dsv!>Wmա^gگYQ(.(I| mNCje9е9m>`PLxAN0E=HȉK@,9i5m'+N{3uriGbH=2}Kҁ)()Y&L'
̃{_kz?k-m6)W[.&p<F{lئ!1ȵ5}zϲX;e.9o[~H^2xJ0E$KDtFk&!(~{"6R%Gi{2#BHփ$/.cXN{Jz vF!T>/-u	T0δޥ	H޵vغgɳ6щ!K^±~fttda?=&2hJ炞.)֒}Gvx=j0F{B} -K)R hm֖-r	_7fiρ'Қ*d7CvVlxj
ƥ)SCd%V 6FtG_jǉւ}Y7ڰxi3"U0*8b;OMIXxɣՃ[F~kn׭]ZaQ.xɻ0 P92h#;c4sPE"oP@ݼ."=Xz(\@|[<&CZ1D̜B#0%+l"m#f^~@iWunڷ:|B%ɟxN0 {H'b:QPQ{}.F*rfBf~8	: zcyIvjbT)фRׁM]A[k]@>~`!37JlLt:$'=8v[zR@o"9n ;I~,ƭMaϘx=N0Db{$BP}bccFfsN@9oFDU·$VEP:+lT^J-#]S6kBJ&85Zb@B#Â>S>!zoȥ8W<m2G^*	2Yl˔ A2%\zurr=zn_nSKOSjIx˱@ @)tLl~,@6vPEdF 阖m͜Hjb3Mo[ͥN]pE`u6ILڗۅX"=x̻0 лce--Фm\
Lq29ӺoKK+&d؇Zٲ
8 ޶k_RZ<@hZ4+;z	y_n"3xű@Pt;s۴Y ߔB,
L8)ypeM^Tݓ+5$j%Bj}w2
YφY4@_rc# 'x-Ʊ@ @	&S0cKi(]+dir=l1q.АA@.饲6BRG݌81xC!5ʵ=G*Y~TM#bx-ƹ@ @	UCFJ$!ˍq9@DsN[샩J%GÔƉHFi9v}V}A+m@= E*Xn<>$xʱ@ @tLow 7e!a4!5wװ{N)R[a̖{{v4m1@bV
J^E&d\wʇ"x-ƻ@ P)Sdul@D("Yi2#@9Ӳos$:Ȏ W íFq}}h<նb#vQ)	LB?:"#nxAN!D4 c/tFO3#A&|UTo"(6pR9t^`af OaQjRFY	~fliip\ASm8_T>I?Zmxʇo7Y}ށjziSO(}"E$߲'D[YV?c_ޗx=j1F=K)&Mn0K,ރ7JٻOw)&4qS6(:>c9nLI0cTAhlyM;l>WMLfcԖ `]x`(|I!.?v _KxMjD!eB :saY$lrVQ#	YUTQ܉d*qNΠG6(*/nةt ٸ8,zQ^E?[;~򭵊nWSXZ{yNJ8=ʴ|k@l?m3eI1]Ze[tQ?erc]|ccx=j0F{B}`YB ŦI-bi|	R~ H.ڤKV,aѸD9FA}1SdZll0htxy/,qk?FhM*)/`5:'OM\xnY>oM]:xA  ＂Y
ۖx,A<L22KmmFd7ѱGfCkxRd4>vV`:ATZm*U^)L乔Lm.¡TwjRzh >6ͭnyTJ}/<7hYxAJ0@9,A|DB&LIە'pރ3Jh8e94zb0P'cYmԸvphQ	t&aräWtYSH>/+P4<r<qVӓe	A8E*tϣ+U%+UGaFxAn  ＂{j1RT%K^ڪǧǙ7mB\8D1@Ϊ1!1F"Zv&;٤),ԦEB}Y7:­6*?5j-08@}NnD}fm޺ZTx=R1{T[0!vQ-gwur~TFꍈk(Ϊh9 MVyaflT:wwd#8bh!{h?<@.`d"i H{2306~ĸ\7,o_j-ؗy̿ڰhi!ĥߋQlL;;R;>k٭qZzSmN0:_i<ҭ^S+xZ[|'Tx=n!D{N}$̿YR!X}H <ޚD`,S	6:QTNi4'k<y.z1p+TA99yUƄOLq`!|qz^6&+Nq+rgnp-9mk$c,wy&\[W{_R?aR_.ATisxO;n09#E1H*]"3Xm1)rהLVjR^9XR
,Q2݉ġYMZWfmq'C-{L׌ }Pvw7'Ǆz-mU?ЋPRtӟ)>ِAyHg5q&k8ϱL;J5H,ȜooxMN09EXuoH!`5+NIiE48 og{[EB
 J-]*ΙSJxW`%BFVʰ1j896`BPhF&HoF@2"jǳ6JO}mc<
SM'ʍpV9g]w9a =wOt2/0+~69B[y1/C[vYUqk4൬۱/cͰZ)vkxJ1)]t!v3ID?M)/p'$C鍂>gw=S"Rp^*ih㜉Κ8[#$r0!Εv֡Zr3o,B7+{)c1-!>q3=b1[{atk4)Hu6ŴG:Ԙz\t
%oRWӼxƹ΄c8ْ"'~/	ϻ%7Ƿ%7!)!?>1mq!_vǆxKj0EZś@)-d,~E"ʠ]}
:7"p(l1	ch$ENN`aD2;C$9ɊG!F8(bxsmPR.xA|ڰL4j^YFqќzDىyŉ~
^+:TeZR=-~Vx=!F{NAobclDY߭<^,AKFa$0Т>0B/lvi(8z4t@I%M6;ϵy{@yu>/Oǩĥ6\'[9ZR{0ȃrN;&\ꇳL$S,ATx;nC!E{VA"J{HQ.10>r+Hy.H  XGdIu-hy%x/uC2ƼyBHeФg߹Cٹ#8\D=Ѻ;*)>3j.G/oOm29/fuFMcU.KiC^G|;ӜC_Z?Ë`kۓxA
  {kvJO7M)j7a`ftM6eBCHyl!djK]EfLLQ4{0IG멾d:rז\4b&0=#g˦vHV_D
nx5ʱ@@QE)(!#;2}9E3EIu}emd0Z&H˖\D@-2`LI'XX{gfV
7ʙ@])U3Ǚi؆|/xAN1 y塚8ۍ-U;uU)$ f3H!-+3ZP%F݇kV2/B5"1g*YJ$1}@j}Hu+ĉ'xwۜ՝˩x2[z);w0O;/4NxMj0:C%B	FQl"+=]	zMϦ9S4#rIr6V={EMj`\Ą#l$;{q1:QڠK\F)S[Ny]> v8he]1Uz	GOo@Ak<:6$aN%x1N0E{bz88RQq̘Dy߭8{OzBϫ%^"p1OAE6Ds9Q!b%N~h؏<k8lF~I>^X?7jJѴ1SxMN19EXNɟ.P83I$	 8X'Dja	S@&Q	#jZ$Lr!gv2ڑ0xA9D
qz3gk@IS)$piK.aTH@9'hz^ǿc.Nxs|Ls#`B۱ݸC#G,'B/xN5n%_1@2"n:e%~zP`[y돏Ԃ;Kw~nx;0{b{Bt n1mdI	hfFzf\7cc4/-YDf9R/-lBĞC?Rş6
yNJ|M,iGXitZ-5ͭWu:8G5?cפEHxPN x-PHl4*}~Y>sdf|S3"hdh*-dFNZct 8pY&-3FF1nil}Шp1N3Bj?
hK`sӼ@RPe6܇c8pRx|u0FoY+ҶaG0s3)t2.&(ʹ#O94Cs_
uի^u3~X*rlJ#Rc'x1n1 {b{뵽BRPkpl#ҍF3Bd$;C,	KxH3wZX4#28g$U8i"#ciT
l_ٺԳ.Vv0,l&<mXA"5+WY!/jHx D{bNl0T)kb@E}S̛Õ6A2LօMveXpY՝*0FFiΌrxKxp.0"sNqc7__+źּhUVsj3ϚyHɿ@Pp~wlM<hxMN0=w] P~bb5nfi	8{ka;a6C`;1@$g\w©B8V١`#[af37IW8
-z50:t>kep4z)	^rNTB\(-xr| Ԩi+FZܺ7,tkۍ{[H{+<~[iz'J|B!C>RGx1n!E{N1}YeH48-rl$_z cr410͒keoQ:iwJS9w̳^d/qnZ*]:EνR+'O-Njo:<1U}/
ļ>~w/H2#Sx1j0E{B}`,AXM`9XGfmEn!'Hއ_"FG0ZdFA`8ۛb"JCB 48t0yt>&pC27);;sAˊ'<o7,_v]0'=Xݝv[DjkJTs?X~6d]	w+o7.xfxn  {8(ʣHXq:Z+q/H93Ҍ.좍d>$ka_#㧝ҒfɲR!:c93K\%Rb&zv'Rm4m^_xN*L]YN[ocܦwfartn|CS}l/`xn!D{bH,IQdɅ|zY0&_rތfftp|pqLO[
8g`xǕ7uuLF1aĉxC^kb~=>nU8ig\ZK[e6FդCM]o FH)]hBy9B2}*NŻauxN;n!t.$0B$JʇfݕD?4	R]Diљ)<fg@L@SK?]P zu<^EK˯_ՑGyG1X48s쭫+|`j؏;Np.gX7{yV.^zl9Ɛi[7Q]J::J3F:~lG}/XmxOJ1)AbYdR,$7a'ɒolCG茗3hm}tXEj)M^evtr:H5kXm蘭E:,\ T&ySNXFi'w(ZW"59F^7 Z{_qpJ7ss+? zdExKN09Yuɣi	!vf	ڝV4ɐ=a ߖKfKݑЌ=MJ둸3-zZl/.9hI+o$ciC񕒾%r'y4( 84N#j3qǓc{SҼo^RXeŚ<s<0oTհ&NCghS<,ӕCqk`%Apk:/ƴǒ?k,\c*[IpsV.۱sJJvN/xK
0@9EL|@īLҩ-T{<]
Ws,B́Bagv%]۰@3y9\c] vga`6m[k[Хsͺpa	cZ%Ew*KCxAj0 zj.ЯlV4U>q/mBN3ޓgƚv>NK: I4PsdV	>$!ddI}CJn]^N'cpr-F'tXmTh=7]^Lx]jC!F]żPsW÷8tfBbcf
gW6t"PRNS됳KcMdy!E	NqMh`n;xi%H1nCVF_;<@mCȯYYU>xMN09EXui	!$f	֙V4II2s~ 8 {[Ahf>9
y&P05t\e(R+SlBYL"0iJZ3z%lda&B piK.r>眠-yw5Hg\J|r|p%VRǱӸFNXH}Ǧ?9ָ|o]StP{@ۍB>ͪk3^^}Kr7}L]ܐxK
0@9EL>3i@ī-TCVFl)!Bb3ye4b`ꙺ2b	Rx)	#Ac*cٺnkmv3oM0%}t[1Uvo7DxM
0F=$2I$%ooAO=0wf"$uxe7FKElFb
D'\(@{kBOoks)-*$A;^z{_/@	_E)q>Rx;N0bBtT{<hN@tUP)E^d1Llj(Ik1(+Al'r2/	9)e4L<IV\_Y`D.$FJJc?o/h{/ʻKրgy:rC.7u]K4:w<|~ oxAN!}&h!1ƍQ*t1m7sKj4fhqB.A{a[Ijjm cQZ<[-!$,tt3/<Ox6DJ׎ւ#m;S/apj1rQFy?|:ӼMh	^Khcl~p鶶!qfK{=ǎ[3 sx>C-onxQAn 
zʡ.@TUf5J}ٮԷ3f">N֒kOfFt.)VN& 
-zoF֧/_9\ohTJ; a=8boz`K"eݠ7xM♖\
/F	9GъnXkQc'vFsn)pJe,_cMPiX]c_"-9k|B7x^3}sR95]ʱiSjJ[97wxA @=`ob``UlPToO"\PDbC6#)`6-.mh\@Œς"ǉ[2I6wkvcZE[ hN`׺!K]ߒ>Ǝ䥾GxAn EJ1x zcgwݽMUV$KmY#cK֖=苐TĴ"qէS*
+-KReǧƄ?cLWUKBB*9x{}3\ݡ2n7aFʇuzw;7CRxNKN!)¨PP$Ƹs5(OF0e'potl@X⊁ 7pw|S:8R@p&ǁCL<k_rv~ nGH&$Lc+Sl8/	S%zh2r!Ӷ\6ytʷ*X>ԥs?k,?lIxJ0EIۀ<ts43yo'4ktcSǁr
086\N[;:MfrƐdBѬH7ر|"\E
%e<aRx}z48?*w;5}*_Lr*7O!RiU9e~߸bKRgq߻>uhxMN@&1Q3*3PMb/O=-@6R}ݵM?ֶs!4{,ՊE7:KiM:CxTwXS.4=gAҌy\\Px*Ð'h:XctI?Dq t8&-\SɲuEA3;$Jp岥,^4I,<Y\_:pT{}xAN0E9EXui:iJ!`5+ؙVL!IG kfւQf^23j#hb?j#.9Vq٢ad{G)O~3 [K5l4nO0ÄNVi
7)Ez&1e'^rs)<HxAmDۆV8r>-[%+ck]B;!oZ8?DH$Kk=|#3C.e #w5s'")xA
0E9E$$3x$3EhL.<<00FX9 B;<(I4L1#97xL@Ĩ6]Gԧ߸]s]Ђ3;v.v~vёYX}hIxMn O UU.UO`D3/J{[A0FiɅ FJɵ'f@
FrI0Ay7s0F(iܣ*+fõ:H9z#:d.mɅ ,
{	ڲnЛx^stƥ'ZHͬ4}dHƵ57rrF::tX^ctM-!B!o7eߎ7_2ۡop˔xAj0E>A8RzR.e1,]|fWu╣-EUVfT%WPfßkT3X0Nʉ.g*bJT }@M~>݇qJ2Όqj
Z5<K,xOMjD!ۿSEi!>5{upl_	!$!Nƨ	JwTTd
n/۝(r뢭baWsa$.(
H:GeIz&Ţ{2Y:e<e`ƟC6`q%o}p%*JmK-s-Rj.lޞzu]yl&5^xN;ND!*0;Yd_](F ZҚd
1#P
l7w!Zb#ґx֮^";IћH!kXFr^)h]\9;*	ʟ:G//w1ƑOd5--劾Ct6<:Ywg,}^lxMN!}M4݉ĸp2L.KF%IolY⚭(Vv wL3fb2@BFZZn7aA)#,jXRkӁ3<6,[~t5U(%)4򚯭ZtN>ґqZ`TXAiH'@d'%!Կ rd
%x5˽@@aE((!#ܟ犖5]"	(н{e6[w,Nc2@=B˕U˔8X-1(:glMFo{P$ T%лBY@1ۯix3xujC!н_1BoB)tUKaԱJc߯Ю:{/ftf}-Zo.iZ+m֝sB$S(FF`4n
]E3Gn#T x\zHT'~j;^#(\VT<yb%^(ەNU)c-4<V!Kow.]Vx=
1@>H/?2dWCZxo]Ԗ|+pbO-WDCF@bq#U	E9;p!\o@}me\~&Y$	վ)ux8mEsxAn ~#Ur5`QփAQ^[Z38L:;I;	j,Wkƣ	cEgDgj)_xdXh?7匚KQ"B7˱p:'kKEV)=$F
z~ D^\ՑxMJ0F=I& N]zI2iMRҩ|ǝza*(f#CLAR"ZNTOV_*9efR'L-޼ZE:֍^C+0ZWgqLLÖLS7Exo'#p\qG΅.rG`]/WcxAJ0E=I:IӀ;tɴ6II7+OҘAk2E<+dWDoDK=pR"0)Q㬢^'gh$##E0ظLe>(EB:<6*-?A;Y5<(j6'-~s}J:TH%wdg7p:^5Lb`xN0D{H8Bt	J>`ccC/7#vfmȎ"{瘦٢e<O~8͍:7vsrtStInB0$BCw-RԮ/"ԕҩ-\v=1xpf^[ON&ˇֵ7@Lʠar]jwhr1f3xMj0F9	EbX$i2t)='b&mICb㑵0&
WҒEU~!7َ<{P+eH{q!ҖP*\ļ!cx)CMgVJĨз)6|O&xņ<iZm 灎+pn u]x5}?@qsx=n!{NA)z EVHI
9]y>\)gFDS8JFf?G(pX {uCҵ'b8%GilBA+g}v<-P.k>i:gM[?7o>O8n»4M^CxKn1нOHRX q0#*'`YU]0
##'xa9l݂D|yR	ɖ42q1<YX2F"ECo][+~Q\Z~:՛}.m?lj,kFoDޥ*h3)]u*??\0x;j1E{8,zIF#{Q pwt"Ps\ uDFb!R
AENu@cRi4(o!
K:sl<.U[q|uӭ3˽Io|QM1hlBJs5ryq4E^ָSg?-Ff?xj1{=8<v>IF'4y431Kg3@EQً6.]RXy,8M9a1ʅ)@}M^Rk6,7Z>5vk2MUb9&F	K9oR~{W]ҋہ'vqOvnОdxKj0D:Eڶ~Bv!ňAr,r*7	Cj!#VAMJ(ēyѲM̛S^6b`EgOq:*7Zik+kr%t@txxfjؼ.>է00uLm/WC~J#lPZ'~ dxA  ＂BHѓ'/>`aC1xdZe#*Je-@%+'KĞ4H !w3gǨ!w.>;6*HsTʂm'nCx6y/SAk0%v[đI^p]_ҵVxAJ1E}Z*:d".DWIń$Cfѷ7n<><x2AaE
jp5'|r)BfSLFnZ{kx%Z>YoI>(ەڙFNs<տjߜG}>:hN6Ik-S@A2Or9^/㸻3!BOVv<K^X~ f
xJ!F>]A8DZ^Su0omzNvE:(q3AEiV8Se mU)Favq:ne,ʩuxÐ_UwOc˽o&'ip'g-Š%3Đ`\޾fqNs
 -K0{S th|Rx-Ʊ@ @	)M`ߖ]T!aa@iٷ#\-Չ PX}v!3*"*5epcy=|7"Hx5˱@P)SdUtL±}%BQ
,	5aٷqRJJXQɧl>6)#2JLZV՛;J?ۅ#xAJ1E9E-I:TDƍ\H*vӑL07+O|ѭa	3g4Φy^.:/~\!O!хlVWZHQ8Oz}H>Aq.pjg"&NPy$/eE~Hً/\x1N1=Kd**ǰ,'PfO$#eR< 5d&7}@(ere9]P"PI'>rY;o_/olK]SnbD"Op(鰭MOh>Ukhz-`~e7mVjE^xAJ1E9E-A*I%ADAtJ<@MRm;!S+OCRp)	)DZVgfs!B*1d<󃝼H01$'4|pY~{X1۟xoYFϽ=0F-ahڪOͼ"r?uH>[hr-*E}i]lD_^xJ0EY*d4iADAtJi25#oߛ_#s54b8zCfI{)Jw
X9FPMEΎ.F֝dThᵕP3W,ZxPQC%؆9Br\r wPG
y&\%oY`LxP;n0}

mEС@dhcJ޾J|ViL()ĺZdX\Y#cҁ\1)^Fiff턷grE`b^m-OgfĲӒMͱwi`VzL5!o(FXa< oOql=iO!c-M2~sx-ƽ@P)Sd-C|%BQ@
L4Oaݷyzxf3Ճ,%קo2vJPdQI $Xo5$	x;n0D{b{
"% ҥr,]E
[On<`7"(RV蔚씌LرQNld#NjxG6	|T\qIւ=}omXVJmb~@yhpl;ϚkÅ`OA'AvZ 5=a3XHdxAn E>*`HU]W9 CɢS=AGQ,ȉ9Hrh6%β FOw:>$X6Y|1ؘz/yhďQZWWNꣵGY|7MJ@nvet~byrʽU5cDgs:$}_*Xotxj!>ٗ#)X3*	o-Dz&8WBL\Ig"!u,cXaG]S*p$9aO,Z2SO~0 `_pH7>@'94p5JCck.B^)\C'Zr2֠k"]Bek=H%hx_dBpl'y|]/XbvxNKj0/Y$UWZԒ2Yz.i	mɑ.:.Dq0$љ+u
!!9Ŏa1ʊsn5t׽uкoT	>Z{>h'Z%{/+LcldU63JJ.UΕNJԩȘ~k_dzx;j1E{B]@x}LHp\dOKؒ&+:y`Xy>Do&Y"[S\dV)&EŁJZ%`:ŘOkGw<T^WXz|raJ-1إQzGn꒯{vNno-{ ,_8xj1 {}sXt]R" ƦƭKFgWd}o9֓zP:H-Ӛ5[dyEZOT	.U~|pnlVN`01zo:8^sUJp*YƠNc^OZx=n {NA)gxH*]-s|Vb0{	RΌ4s z),+.I9ddm$hSsIWC gl"|װ,!U\)-&s~䂷/!_sRLx.osn(2zh-o8/&Xx;n0D{b eHT9Ē\DDRXQ1|	ͼD庚J[/bM%jX᤹$NHm1U0V9rᢴ&ϑ;|~>{o8rp/;c5zx/BKLZ#%Js߉Gwb~K?Ѱ̑	 >(?fx1n! {^AJʍw,SXE/p93Ҍ&;'
S\"فԝ@p1aH
'pf9Djѹ?3Wm\~dk|[à5i>禮D}"_7]^PZxAn }*ʮ.{Vk0	iFƚ!%RQ2%ÓW;ԡ+.)=E"[
ϱZX?[YvImcfq֨n38YvYjZP/	X֔xJC1y셒&HQ]'8͙o
'p933: Bj0>`tYG}"wQq:L41RdEY EA	Һ|'^/oUK^i7<N]j(e-yM|oD25Uy)^k蓻/ad0xA!b&cy/XI7fXvi>2b`)7nu.$xRAc`(Wh*K)H픠wkr'ZANW\j1|87AE;& 2:`-SlU|4]zx=N1{H+!4_fWq3#"f1q:p[Ó&ڼAъ10Bvλhd$Uuz+	obwx,uԣr+Od<O1XAݖmz+޾)7*}׆[=~zz8HW]x;n0D{b gA:1+UH*|{MNrf޼D 
vhLHsFL;7:x#zd]]DJ4;h$q`FsmpoZ7]o?zuG
V18Ѯw:$ep2p0we.ҟP/YxAn!b"0RS1E^`Ny]-`h[DT>ZBGc+1I8G-N&FAmޣJab:dMYzν?ͽW/~v}7,ۼZEkcK@PK['Gi7(u^ZɖxKj1D: dV<-ih|~kdUT<Fg>!P.^&b0:svc2Ŏ6JOU>X Yr6
<ں"򷵊cݞ8g+[z絗KjK__@ ?3J̴lcϼGluKXnee;Xx=j1F{b@Y"HFbK2Z9g <4#)E=DʇunZiH$fq4ѣr_b"=f>)FJ{Y>]̽@\DT;?5QKY`mpF97̕"|Ul_ؑx1j1E{b@Ziؤ0.R lv%YkOrTD`plh}4dAac"KՍ2IXeo&O$N>_NBpP+m¡6*?25A0xajy]MՇ$GC>Z~l]x;n0{b{)r#E$.-&itU>73xcR>ILֱw^,2?-S93N] ]$\؛hd31b\>H)X[3|P|Viۍq,/:Ջ|,}>!4ZvZ1=o{Vq*ߤ}Z$xOKN!sڛLnh*1Ɲq!
(tf7&otfЈ)(ȉƲٌ
.huSw%ϨH"zQG- >rA1oT?	Z4~$xms/(΢O,RLcrE<ƽ^6`рfw?dqxK!Dob;Wag|UKD\Zd)l4@,"Lh4۱SbvсYY(rdr:2X[7\cݞ8T~ťuwZ{9V\ڠl ?ʹlcllJ#/[Ry}"XxKN09E?K@,8D&$?YqJ*=mhK*iΑ~t6򒌱iatre8qU`X4s,O%rKK>tߘGǺ!|T5^?&x&9^dE*Omxϙ3he:t峃
vUb%I&.bx=N0H(%訨8gy++i8H3:3Ix`sV&(,,wt3^Qf)SJNp:,"oJ-x:} ǅzob/zW֯5=F˴>msΉbAG_<uv{]R<(a kdgx1N0E{bz$d{v,!ڒL&ĳ2^$np"`͋MQh
HX+9\K .6ia%1fXÉzvaxWm<mx:ċvngYXx)Nm9T;Wy6/mosm~ \x=!{NAobY`_b7x(`Xn	&Mez#B%t <YQp Ң֚Q<E@+RX@SĐtBH=p6~øւ}Y_Sڰ<hij>siyт4lN~(QƶGhd_Vpxn!{#Y+EVEbN+!M |ь>)ȨJ0C؈ѲB/uf)]"$C1zP(ps|Q}|ViNS?u^{V ں$	blc-r\N03п!o;Cܙy ߵD{axMJ1}ғt:	8 Ra!х'p>xҘ!SP&2KTKZأU2E3fa"+Y6hcNѯ~l4{S,r6xøւ+OaTG8:;kn6zgt#0k2q( ؑ$[}-TQ0`3.?sBxKj1D:EAc@V>DKKjOe}xEN5)kD)l1Ʉ2kiRiW:1xVJ4;omx;1/7sÑ^#O&bw6M|ѵ>T8^`0Le]< 8` xAN0E9EL3&;ĂC38C
q{ʆIkg扽4c>)4{F좧HdYfD1c2C
9_<8p4];Һo(7	Z>OOrǥg}'?֢S3oѾ0v%CV:ty}d{+QcZx=N0{=o,!
9Gll-=8H3j*:M2:I[MlS-#QtSy.N2[#C,	*;7{k7|6P㲵E.~NeI9i}Nx#b׺>V?y\z:XUxAN!i~3Lb;Wnh?`1'pYUIͮj%'UٯEH8); duZ$AQv[B9F/V[Dаhݾ!@}mbTKz[yn	Zݖ?7}kguoVXxAj!E`mBeܠ2=dԠv ^	fރvȔb2y(>'DfG+SHA/w<Z'(v-of	1׫uP1~?U'Gh콼Vm^5Z\笩'	Z%!x|yJuJ*[oxAn Eb"TEuMo00`@Ro_r,{1WVq4-DaA2R3/Axb2/WQ["g67rE\lVxTܐѱ<k-8Ҷ9>K|ՆΩK
.(i&)N1=5ù2Q
G`a[- [;]3Jb3xA  ＂YHѓ=mwR҃'_qfiY* {FA9 4j}+^XyiR9|vDqL~㔎}Ԫs\[*UސRʂ-M3npȿp*cGz:mqrրlZęI^ަyj/TOxj0 {} BI"&z;-#sU n!1ǑSH^19lȚ`'ņ$IgvȖrpRs:I%"
J`=
op"bӌ7xXS^8z7hm;i)nvzCsavm߶R;|2dly:|O@8Mbdx;n0D{} E 0ܥJ`I,&נV7 =`a%S.昧0ES8{#Sd21$6q߸llGÍ;;m^
׫<%À7ju!!}pw*s;zq>E.zZݐx̽J1>O1 &  ڟNŻ'<ErjPIfԐf-[) O|K2'ǞzSfI.[gulvF6mC~=c';5g=14s"BK6Js#o\=x;N1D9_#!DFh36z8aUYȒQ!ehL@TBƒ2) h "S
1 P_saH.CA"CasQ7|̣q|<n(>{o8xGv>F}^߅rycA;$mgmY}H"ǹ}^l͖x;N1D9EH+Ɵ"#"q[0w=&TDJjXR)\Ixu!kPEĈHNoF*>$dSޤwvbBxu0O_AÓrV-3ݛm;1eJp
M@Az6	e^1\q2c0eZxNKN!)¨PP$Ƙvh1.Q8̉LPigJfL[,G|ѐm*R0hH9H.O - 3	4S^u*gqHWmkWymџ_y6i)sPmU|RU}mϝϱlhxjC! ~^/(P(t_?^O4j0%3s0NB$d%m*X(MJhp>8FI;cVk46FwٲfҺ?%4x{>]8z64Z2'?6'8uWcj	(CV&LϻBXZ
x1n! {^AZ)츈R|F߮3#"6N>TȾxc"/uiz;Ls]p.5B~!I	d1VSTm4F/xI;Y~(c9}0y:͜kj/6jAE}lZn	԰YϛxN0D|-?GBtTq9^SDO93GG*#\09`IxkUn&zVTʍ(iFMKwB E"
'R0M<LaINExT*AHG)ZZ7uKP՗	цkV|FcnTb1e/DZ;Ηq\ֶ^@85w:JZ$|x;NC1E{bz$dǿU1ș{L
Odŝ2Vx[6߬1a./>ir0NSql9X|9n#geT}NWZocR}2+!xoVC91:Ȁv܄.ܯ0<a__=x[ɴI(5U!8"$ 1)%1%9082508<9)tfKsˉ,5Pxj0@w}B8KII\XVPB>{zhFo<80QxSk&")ZS&LȊ>צ?A[+9/khC6o8j%.sSꏰ"r/Z6{GWO[$xn @w=Ru8EɒNݪgu~Azc֙E4?D S 	HQڵ$#N01Φ` o'L>צ(ۛZW/ks+6m.xje.9s7zn|] 6Vx1N0 {=nZB**$~E#S{3#誖Iye@>+ qZء[&N>j1lH;L	WB9ֺ}W9ľv.7xu9>u~m1!<eyNIoKK>^E^[Yex;j1{BeB豒%B$\_'k,qYvVb!I/QA)*&u'9'&w:Ƞ1Q{=Igtv~%oT?j-4Һ^_x]K묱{_т=l^Wn`kƉ}bk軖pAA㶝k~9`MxAj0E:a$[	J鮫b$kS[*rl>i"2%;OŇh#̩L^L査Ttg_(R$w!.Ŕ,,ỮÍz?1VYmq>n믬v|@St'4fFD!%*hSYC\xAn  ＂{h/Re(Լ>99Ό4h^D6+s!9k('ԍ#qSHc&a+ZnT.k>+jr׼ƣFis]sSD}=-Z
]`Yx;n0D{b ?FTird@Rr{	\<*.'7g-Mhy66Z+ꏫ"LaŅ`d8
e(>Z*p\]Jn;3Wot	%]5"|iui]cSC"9Kָù	νA(.o%'H,]xKj0:EAd} 첚C[-#	7_5%J1qƆ56V8	,h;e޸-l]X6qaB콡	o;|~ŘEVUfLR{кR	x\S;_M=qcjx1B!D{NAob@X;+1Q z~<I^fFgz1'2>jE K[1mVp;uHkp^sIgJl8XZ\ynb,WZG6r[EFuML	KȲֹ/	ky2/XxKn!}$_-Ew^xP0fd[YFѐQ)Pkl dY<ir_2QFN%9>G,ɛ7v%lq(1K>F׃>6&]ѮR_
'mu-8#,I'G9y[uthY:x=N0F{bz$ؖbabl"rp>ot"#\0ɲgNŹɖPjL{ڀ\.LXfqy5T&>!H7*p,'<Ëtl7ZXd3u9ÃN?o*ST,nq@m;*]k_4ܾc*cӓxKj1нN?0x1|H6=or@m
^cDi!zzc"̈n1>.+DxcmLv0*UJQ\#6b9B^w
mK;q9Td|HN(O]WeoGdzcW"{WT+mzc&8`E^xKj0:ǆGjLbikrՃl,i"b_k>Xk=T2r)50-.@3 5W<4CxwQn]lo1}N:O|^EgB*sOU=_GxJ1F<πV`3H;>ǙCI\!cq0V٫oijDxe>|Y5I:>za<wڧc,}&:聽eu6OM!PcH[o4;|BA+׆WDS\x10E{bz8GBjn0$qVۓP{qi		6$'469EՋv	i=
9hFb[k_ry0\k-8司.s?3hGT;K򝚺IlHuϥFQo[*xMn +U+UQ.!Pl WrO_gdV3ߌf4"j>h)&+^ꨅv$u^ب\DRKt|lvVNdj\ޱk-8R^۳˕RC.UJmRN15o+=0/,}5ȵ \;`kxbvxj1{=@8 
1u3$Orf`F!K.ưKfYĴ1 !SnfR&x1@	1`k2ޒY2vA=BV1	wx):l<V^ё'49ݖ?7YνJֻ{$t}8]oXxN!E{bz2,1Z~A׋_`y=3QBNsQbX#&+q)nR:@bUyə݆ZtJRbGn)J#&<u+jt\Qei4/{'~o05AZi?`xJC1y,A"b
.uszHL)7	\70HKtĠCmڃ@0ohT:Wq#`2X(pSp.s_j	{V%oA9sK㴚ßVS?mlH5|AFm9Re==ղk'3STf4xJC1E셒dyy +Qp~2JP޷s9JE~-ldI2Y@Wd흺(mj.
Z \G2`@YE?(o+x_xWF=pOb .L v[sySo2wObj|it~PY=xjB1 /$/P=IwmhI_'.Mv13ƜL րX#:S:4sDg {TtKzGyS=޴Vi,=᳼WTdeZYl,-1=7Sν]%m=%]tKW3DX6xAN1E9EHIDBwp=&.L7{_zҷ!	#JSB)e
0]2DX!'#2Q#2Tb(QxnFzAvEwYv`N~:X	R ۭ{1i֖N\ϒx=N0F{bz$dHAEabOƃll'XkJ`ʹ9m[\3rĘ
m	VG䥬YM.ɀO7H'ڙxM/\d)fޚݛ*?fA1h*pmk+tN
9^]xN1 {HYBT?k"g#\rfCЬy](#']Xvf%ٗB'v'i4EɡEg-xaoS	1]F}n}E{>6گ.C9npCx`vYKezkم^
x1n D{N},)J!ְ(:UNHoF:3s8̶ztծ>&Թ
&Yc}xG=F[q_T	>Z$G>i[+[khuƏ'EHKG(-'F׀ϱBmS$y0\edxJ1D}tAk;'cU=E M~6񺮆#8
}L+ui0r٠&+.#u(mb6#kwJyQ"86y+th)k}\<"<ٙp6OV]%1Mkr9&~<V04ZˁWM{fx=
1F" Vbwu&=[yx*$
00w֒2dGMFwt'4
 l;PAͥPJ6.I+TV*LZY+W`5ŦMӽ\Z"a%3hYuxA
!@}"j-_6Rjuf	ZFM&+]p֠qP!8uݱQ<X~	BZsѓW&2|6~0?Xsڰ\hnykr'eX=S;{/
\{cOjchZԖxANC! ǃiʸwxOZAj$&T!EPȬ
$rMP%W6q}I:S0C,|t96). ecRnkS~Po_$z;G8IٞhGO%յn],OcR:k/O\YxAj1E>0G?ime
E0,I#JyAAf)#gRAc򓬨>soV帷
_EqrUx3}v2)x>&
2E?'mL>dQ}V{~XݭR4Z"XxMN0>Yu8*Hc{Dv8DOޛ4q<Q(KGZ 8흲*+VʍkM&xZS;j@J	?L4	N69g#A]6}m^V%b\ӳ/ąڪ@G6-3q1?C­'[;5-}_m@_;N5JYOŒ7d|xjC!>B8\B)$Uwy4j1Yt|DO-
p6"A{;&HD6h#5ZEud~KKf5󓼵R/'+j6 _`1i>.{kuW9?]O'N]xAN! Ｂ&hh!1ƛ'@LVhòwNcU%bteBzKQɿԜ/aK}('89}dg)xÏu'1|N^_xKU8J!OF[f CյS'l	@Row9[qxN0E|-=FQGCؑ1Hw*3B	d轗Bq'4)E5X)7"%Ds0"GK*?<n)Hs0I5JH :8+&&;-qb#(%c[{xbi5	˥ڱ'nu_[73бˎg7_Xq㼶hLYs\s3nϭ<|@ZxxN! <wfY$~&xdY'.H 6$Q"+ܗ̖6
\H M@ pS|[~~f}?>AF{&',F @mkv+'>V-Ux_:_TY.xPn C1 UUzʩ_؊HR>fF
!Y9zpx)4kGkCԸ	PMh nQ+4NNhBp:-G/A(,(PSHapmK.\+eݠ/~xҙC|C4Qb}؉ʹaa+ZOg$ƽxeTG;Jݜ7Iȁxj1E{@x/XB`T4#ml"mn%7wrB숮k`4K nh8~~QwjR:"woWhz<eͮhX&8GqT~{mT$zΨyͩwip!Aej>j-Sn4SԹ@Vg&SOxMN19EXuu	!vq:#&IɤP ??YrRDD 
Qi\4IXP[IIԉ[lfJ?hshZ BvK<Kr}ǲn~r^c+UF:>Yde'ŅguЭ!c:~]q4wc~{mV{Lx1nC!ОSl)$+"\`?`bpi=HoA0Fhwvhă{$q#iIPy{P*ϑZ0%w>ΉG%uzy|":,֒ǈ.|r]WkuAΫR~.KnM(xAj0E>Avd+̢P"9	ͪ'^o6MP	bD3Ȭ|E8"Ӓٹi6`)AF'1EvHO fX{'^keź8"Bo `5oϼbߖVKږqjy|}f~[xKj1:#$lz-G2UN嫢̒J.+P#~
Ĭ⅝:ŐϤ3XsvӴG!YҺFZ7[kR'>Zz祯ֳ>ZȃrFe7I$ܯKe}8J_|q(N[Xx;0{b{$d	!*8ސFf)=8ݼyp'G*fO).ƔFk;UE+QBBmDin07O~a} \ZӼ68NS_GP.-vj)6"NVgZʍ;2?Zx;n E{VHRDJ)<a&it#ޘI-%BK0kcMҹmPK'=5	*=q00G[Tx6"mzoyǀOֆrϱRMF.R$g#x;OM(8\J%s;%ko`jxA
0E9EL3M Ѝd&mM$7+OkѮp|do<!t
֫7IUA6-8a<I!*ꔋ~Oۇҋ=DujpZ%JLe݇u90zAtk+-8[:y򖢾DDZGx;n0{} Q"ir]EX"T)07f&	"
xؑ'"QPl@C589(Γ]2ё%1Kmh9P^j-З9>?qʓ]RݮڎM?LFt˽ԝI?j<\7<H~\ٛxN0D|-ڏoĎ/ߏ)@i	2@$5kH
Õ)p`:?AҚdQE$7ґԈJ-Kn
:8YcEt=-qb#(%c[{xR1ϴƄFYĵCo5p:xv󅕉-8k0\D85w:JZxݔx;0D{='BtTblGq	fHOV$OL <hptQ :q@A(673q<8)(-˱c~-{p+󓖚αhV˓Dimc]Br/d,=iC<Yx=!{NAob,cge[(?aK	L&_oD&pnDލ,Ny+VQiV/
hȒFTxdxX`ǎ^JrI?p+bKg_ҕKRƚ?6;>p-eξeXNxn  |+E0HU՞ri>b؊
|}83Ҍ.qI$1Cq
FGI[?Rmb1{!C$z9"Ғr3'.yNcmnpmXOx/uwY{V>@`oӖmdX]8i4<
aU/%]x1n E{NARaj]9`a	R*`EpbhKp4΁(L8ÜRf++*aؑ=XK~F^m+~nKRm/<Ko;Dё[Ҡ\89/YהxA EaZ` 1Ɲ+16Ji(/yoY x9&tYHGU^dJ1Y+f\m.U>(N佔ڼK[>yJJN8j̨D_&^2PzZVˇs/SXx1n! {^},)b%w'mKvF&d[ŒV{l&uŸ(Zlк0vҐ~fE#hudH/D#%Ͽuz9V^ N"<IӒą"AhsUiЩqK9y%naxMN =\u@acL\C
5Hoc	|7*|)XABd<zu9"y/0S\*s	ĪSr	=QؿrJs0yq>*zfgWDV+'9G9:U(ϛ[QV
Ͽeߴh	Ƴ颭_޵o
]1atYou ^V&tgfxM =O1\y SZbCe	{/,4eJ8'tsQq}QqZ1 .ɋ1;NG_k'رkpkڰ,|5@RZ8;Gc!@5==}wYlx;N1|N9㟄+"BnG78U%=d0CC2L;ǘcZ1%֙7\I]6	վ-O!Fmy/|b*R;R>]Lv`IYCG[&@}&9zpA*u^:ʗ9|/Lax1n {N}(/RJ.o6q {љ!%bb4ac<9pFfGQ]7vnXJ	rN!Phr)L
QR=l»HQ^eoұݹ
f6DO[w_+Pw.cCTvܤ-[岩cFxN!ySjLwf7c2`_l|/hD`8JkNʄF*zj#ͅgFRƨL傳z!x|Lh"S(,xXGǲ#Zpt.oxˍbϮfJ+lmNcЖ	!@ȩL?ߐ
|Hľk-!ݎ#ү~>.~Q{x\~ <hxN0D{Kcg9NT@C>
ʙ,ը F0୏̓ę.Udh,Xd724ǈ¤;A[_j/BSV1QPIjpSNFͩw!,IT})[|֫|u2]Ke*L܊.^gxMj0:{ƆU9X3Ec)
W=Aw}*Da{t!n\C8;'UM퀍)NtAD2=8HCFE6Jg)ڜ7|J.s],Gma;{6ԉYXkʺ/
KHG[xAn E}c0HU]W9x<VDedM18M$L~ 4"'7-F Iܐp	 7@B~6{m\~Zŭ6.[HW;!1`fgF=63$jϚ棌R4CYxAj!E} 8
a"T#YY>D2!zz3RB4c^sIDڔ0ļ9VƥdҊp9(ߘβ?p^cS9rx ;Vbu&sm#J'cܸ~vB?`cڐx;n0{`	\J\`d
ȀU>AY`zc	{(z'?x:?d/.h5#	҉Ap0&7(;
UkAn6綽Kmqɋ2ݖjⓈISf:L?V˼<Բ2U^/xK
0@9ELQ\3Fbz]y=xH`=Q)!Oy3&?-M֮AG!ֳ)zgCёIdAKm\7OZW1/j.-\ 1QLpF}]sSgfa}{kr)'FTAxA! ＂ɦIY>FLfcU%5:`UB>ŉbЁ6D?#uCմh8N-@佟慌BcvI>rbޟT$U<~[zן֓,gy AZ9FmhV/r?</] \xJ@ 9*L^Dɂ~@wҳ6Y&9_౪1Ap }HĀS7qހ6.1tX:#b$bU;NurFZkA;<6,'8Ya18czn,s	+Y&XF~#%O˗%pb^I^'Gkx1n E{NAie<ERl2f"}\)_OhJɡƣsV$DJ[3ǨKRfчs^s'r~X隷Uy^xoMr/jM`_&:۲!cS@uMj\͝xKn!D}$g-EwYxF	`1!HOUh}tBa1oRf1 Q=KzCWe@[Wh	޺ﯓ7*i>qkC^.^|07nq5r!	}"uNkKGد[xMN!FiJх(B:Ӏaq	ܽ}ɛY2'㭶6٨(jt4H7=d)!ؔ3+)kj! T;ʏβxw˨ϩ׋T.h϶OՋ8m+|;n1qqnZ{t?_]xA  ＂a%1ƛ'>`nmۓ/83ɴ*[p%HxFoO#鈆h;3FRtm/D@08b3K6ӾQ~M,p+KSY|z'Ш.skzLMXy-qeY%4˦sXixN0 {HGbKqb]bMshghr5b˄p62b`ԥ*9i;hc^Щ[발Qk~7<J-gZz܎W)٢Ol<QT%sYYtJ:۾kix1dx|~PGC{j~L_[xA EBIqʥ%Zhx.O:&ǜ910pzjUt>%K BɳJgrQGٰP_[(sy'.cxˑr6.k38u)">NET[gr+XxMj!}όBvYCmO*'Ȧ+jf)9(~#x@䠨SK76Ya-6b)9}R/"g=qWuI{6~KٽQ+m?4 I1:viEˬkdyJ/"_jx1 E{N1J*J*Mkkc	=i9;jL58%ZC@jE`Νue0fQ٧4ŤSAi9*ZɲnQmX+hGkСAw[EjGbmTޟ|/QokZ,x;n0{}HL XKMrƢc#kiW9Ay󀱡
 e%g%QkB]C6Z=NaZ0$!	X0M䰵I]ޛغևo]~~SȔh"x)xw}33 01t7}wsdVhx
!> g ZzkRCoAo߬z8CkoƉSIC,+ZF/'4,ĝ6Q(#
"&kیʨ!x^4ϐWr~ MɿaWN-c[.8|% BLyclJ'(@>FBc \exM Ob;Wzq	̗z%NPT D{^VF-V9[+HiRѸILV 5ףa~!ێ\Js('m%;'Rw	VckJo%7X&Z$xn D{bH(UirMkX+N)U ̓FoFcdO (E0(Z".;Bqe (uTўÌ~qhl{*
zT\)GM^k֍[mTnZ>_V>xu5<\?ru${;Fs	_bx;n  {NAfYt[g%EiFgYoBH~YoR(zr!Ω%'vCf4)y)3'!`GV{i^XP>Z8^:֍~s;ޤ\z(1Q܌տ7y&9ٮy%>\/Q:r]Kx=n {bHl(Jj49AWW`,vΫʛ[=+N߼sF8}Jz%uA{0ÌDOxT*]ӣ!>J~`x/&P7Rvӆy[fzayy]6]S"e	(hM!G4*2LH6 }dxM
B!y׿BDF-⪷|YQ+hrF$@%hPnO@HAkh=۰S<&a!DɁJќ#Q #o{D~m9_qir/ʙ)`0
L:&xlSֲ2'VxK
1D9EtfkqCt3h&C߬<GUolz;S0BS`CLA)DF	#j4̐RQZ/$nԗIÜʯF۝VTv,Y FZ?41 ,cq%?V@x=
!{OaCRO}%QcCLQCɹ4Ңrlбꌵ-Z$DEh[ء[0i.WZ9rsNHcVĔ`deC#4)kz`v
WrxAj1zxF[N~H3],)/𥡫GWӪd3*k* % 1<1O9r&1 - a`"ɎHklzǶ,]^OՋ](9r~8g&룷_VxK1EYETȷ@\Dun4&Fo#sMDC80IANCD %",]cvGhbD`LG6}Mǝ+Z|mLs-GmB.XF[P-sY:&eֹ蹬>^{'YmxA EBIqg\x)(Pm\x'7"'1H6ZtBN;0DP#lT:,RyA)Q51z1mD~`Ow8_ԆA壯̥6ɑĠm{[^^3V_Xx;0{=#!DGE vP7YZcF	sB9LK0h ؠq=I<!&d3EгOk7CyZ8?pʓgC.<(oFЙ[GxB\p]|Y~xA19E$鞘|N\xt4!F*xz\XC!Kec 1ɻ4,j&K1S6`SFE ,IѳO|r#}u>wX6Z2Oi^ Fm̽oԹw)a*Y8xAj0~C`/Shd"?>9vuѴVgY0썱='Ky	&AUB%$Aa"N8z熎
gCp+%Ngx=R)/x;zGhZ7(N{hJڀ˾V2NIt~(G7\nܠʣT~&hxMJ19E!\b7N&/ ūWF'SR	-漄&Y($4jvTXtRhXD#)'$3s<~ Vqp-ֱ%bqKing3-Nc/7z0q<>)]~IP:mM58hxj1 {}cuA1B
ݕO
ҺǕ hT8Ir!˄%Pvj/>ft.9@R΁!yZO]yh?Zv:֫}?P߬r!c/.EgvTn,l?P$gT\pȉH$[ƗxK!D&_b;W(`7eU̠lägJ{1c={X\Xd$JL
m^ɴDő&p1tA[zR[4z-o8Nʹ}hqGNj%֖uMl;
!AXqxAN!E&;1w<D5Q`09TH9y(;sʇeT̉dh%I7@[mGD"2xTwio7^_ڇ->^`ys;a@'͢SfDAm.MB,CY;xn! {>)*?bar>73#"ZpE%!\rj3+Ѫ;uSA\<	$@*
P`=ֺoAwk/|NG~\J;>@rIF/fa:&"ݥOUn4\x;n0D{}` U\L")P*'to`)
H[jq" Ɋ)}@M9dNa`
QdXNlOβx?eO[*mN~ϛ1&g9ˆyoq?YxAj!EPVu7"&?r7o4U sg+.l|~FCW]ؐJ!Mˀ=kQuI1M.Aw#ϑjo9ҳKH]xGmRnZ~5=˲C3iښơP$kHWٻ]zn~\ߞxA EJib\ymz.{/Wfq`Fu[5i
 	Ň*.2s`'ˌe"A7!Z|RXFEQJno:%ĭT5璮RY:m@`@M[7qL-,7M|Ux;0{b{$ObBtT4`]G'|3*3hE=LI$cP6KHbsMhmt"LtpH|
4{n-
78?8M?q):cΠ swpC5ϛε1AK},
13vSZmxOj0]q$ے,8BRHV9Y2:͋aXQiƎ`ձ. VlTD3t.aTP:RD.fH9Ҿay"<j-ixgՆR[^|]^AQvvU^C]ff6qOg 'M?y>Z6nc6W@ie({y$K_`mu?l\x4T#4$" 51,4)<42,ub#E^J ZA؀1%%5E!<5)8?9;9'35 [x10{=\L$\.$"#s)=xVYĶ-:򝋡FᎽubV̲n{Cpbh@аMy޸^SZPqWS)CXvr*Y3fa{S]:N~]Vx=n!{NAoaWJC|+ }\)gFٙ[^5/>(۰ڜ]$Bt8tSZx
[9+9jS^2R Gt<򫵊ywQw>zVRU`67X%^s'$LȂq;.옼?ec[֓xj1E{}@ЎBITi_͌*Z&_=誖f	p%
Rdb_fw2:!D>;ELT!$I%X`KlWgدVtcտuG]z}V픲s9SE?5)boljܷ^;]Y,x;N1 {=#(4PQsz/EnO*N@93$EG5P6F{5WU.r&,%:[!\9Ɛ*)x6byS~1vmc~u2Iٹ(_J<mo?7H(?Fߏ_mlpiY0xj!F>RH B^~ơQc޿Y	< M|\m5%-R6IaĦ
>b\P9*/V:;$9Kũ<nLϲ?/|2)Aʺ`~7i/[9?7qc N$|ԸzO0/g\xMJ1F9E!ODąN*fN"o<=Lf[ŖVi9֔hRnkT4L)fGvhXl=	~'xN'<?:&/]h/g"DV<iZk1''RN(p%~~hW	\xKj0:%CYdC{lq+=W9A
d##Ji|(b
.e5?0Y昲!9K6J/)c|i	sv1A6YRS
ES3cNFeg:v9n,<A_e]xAn  ＂{Ez詏X//>9Ό4:5 %qwyf]309rv<9HԴ*uS`&(d[:Ph{ԭ=>@Yyna9ŅəMs3_}&b&듵mr(
]Yx.4^x;jC1 {b!lpXI+K
zUNrf`x頣Y{2)iQ+_R2RVj.5RjVe]5Z{lFV6Ons<p|#\m_ǝ<(ho)^?7qkQf* ?8``'.t;_"ZϟxAN0E>쑪8NXBʆCLfuDbWTc6?="#Fqdggcp0zrGYcB6w]`m}'r2ƞR9=k)5m;|/bIǉq{KvZ<L_MUf^צIM{WӎXS%@-vђ!ovixK0 =E&Kѕ+b[Re	\L2/{GHhD@6rRQp 6_C^?K'\/K<\S7t:a`MKk{ &ڻ^2TxA E)+ݘxqfRoWVE4Hs`=uA 8DD<Bt>VM'Ho}
KƬ6H ^҆RyXfԧR2a|Zvo8.CTyNotFt[#^ƺ?RdXx90 {=Jv}EB**I1TrfMDG&,'!bDvV&!ԓ1CD!` ]6Rrq!QsmJ<_T//jrTףջ6.n,?^K-S
xKN0D9E!qڎ4B v\c'`YFgiղJ/ nY:h/jDV,Ӄ:f9lB! ڹoF2<-ju$7{kFLp-kT{yvDcB<~O'-i{0"Ci$ʰ .>;|7}alxK  IçKb;W.={+OrfYNF@FepĈтbƥˠ8y#M@DyG9u`yZ\/jòjJΓq'O
ͩwM<RjcVx; {N}0YI*XK@1 qxHO*320m;ah4;7Gƚ^/CBB
GAxQB[{jn%MvM\:m"7 bDܡ@M}G>J`x340031QK,L/Jeyz?i'U.٩Ei9v8޹+YbeF:vCU%e1u,8훃j U6N^27aI-ZXdҩ6 19;1=blpov73δ.= k<}&yS_< C D$D75 %V|H*/Ҝy׏g}ߞs3Eb5wMaU+tCO xMA
 E9駢8yE}<蕦}76hi]4|`Z8ay}c+NC-x}j0s	KXUK!vBWQ%q+;ko,9wѼF:RQT>	;J0x->$bΚFPCЙ4'Q8떣V6aXT֐.w
.&;54T&ǔ|Y:k^
&X?w7+p3wiOKϭWxDŮ5 Ҕ܍ڄ*NMNgd&ᚸ<",9NM <)=Ԥ:.o?=3AyEgIy>~ɡ<G
{+&C1NsŲzQ|>To*F*YOl*xeR]K0}߯}ε0A(͉d魋ܶ&i
{	s=m3B$$1o97J\R	ȝ>b2<AHV$HugG/zP
#o$Lǅ׿HfM3=×9Y<b9ń>|Id]Zp8Ds:4poXti1d1:)jT5
).*|!~`bsŐ,}j }NUFwYTtAߚ~HCιcɶ_WEU3r8`vcx[:uFFf=['[0)ONdW(((,чJV
JzfzJ\

\\ .xQn0+yTT)rb\b;8&P
RgurWA LjeB hXA7? 6A8AB"9iLفm2~%h΍h+\)XQȥִЭtK)>I*7	~n~b^Reo#	l!IF=5ڀm3G;|~_k7~y}O4N,J4BVe,7adB"![n@d	Z6ehΌ0R][A3} I9UB[ꚒRPlSǙiBh.xuK e]`۸	"n*5QJy) 4Db`XSQK>:x Uܾ]bOh-c'̮-lJIQW>1t_qt^xOU.x31 ļT _RRL[L x31 2b0YE+ߧ7,~< Ӯx31 ĒD̼tU/?m%盀Ue1D~V?W?]\@Nz6DAiqbzjpIbI1FK۵5{>ݕktɉPE%9%+H}/o`0}{O3 =x340075UpI,IM,KHKI-+(`0<돩ޭٻ߻R=YىWW,ȫ_ڭfU_1PeyeEŉ98l?{goYm=I7 P(.)J,IMdRXtRK̬z3Y ~Md
x<ksȵWRlʵמ kx7Bj2BJb<tj0~%7UჍq^}/yg.h%n|ܥ_zA4<7ώw2RS7}K{3v{	80cqz{?NseN|?>#v5?	ڡ5wPl|h)"bbxͩ:1=ۥ!qK $MoVoS+6aLb_1-tjFosy]uRL7>+S=ىͩK#u]5"tnoi
%#v&F! Դ
flo(JFI r?~/j2R򏃨}P׎n ݌cӚbav|r:-=eIni,̨7D lƊŏ3#(q}';~(o4H<D;R@/MK#+MޞEYg&xSk~յ.@<Zhwj^2t{=UC[k(.@J$1;4c6ⶕHr}t"ԭ|$Q)u-2Z#FTSCRjlX<MhP#FSYj*PqA#h v;
k%Վe%MmPd41Njkee1/cW1nىw\ԑ=]C̩pF`gktF՜ <̨:{> Q;؍4*bjr(*
6
c1sakj66+"׏YR+Y$]WZY
6e\iU,VKt[,N/vH1NSYq<'v "ʆmؚS15#ghWL&aK46D%7ȴ>/b$³f!bh;4ΌΈkD!D,2~0p6ߐ?ǳ״AvɻJ!D 52A3ӑ֨}tfݜH_+/L-<˱ B@
ۈWj-cZJ{-AȸdތBv:$m{{ƨs2iN /`xDU(ӑ=I0\O.@ъ+
Xߝ91lWÒ,W	fI;*J"&_-JsJb6ːdc&Ze*<;ބt4KQ6%EAV<&8L#Um݀n\n`4$Z܌_3#Q"eg&'V/XɿTXxtm~L(H%B2>(*C%-^M)QRnTɗZs_=dRߓd6X6pC91*w,EE2lٖٚhX@Tɔ5}A8(tqdљ@$ kos(P2QkFF4C 
*Y^c^Zyju)WU1{c絹
,y!O}P~dJ5GX(Yg=
jBxKוgQ ߲#4Gjz*w%B*)<g</WEYC6D8xkfyS`T\;m! $gNf
8-0l`ir'?a?)]H%U92p}\VkajVLYxջ\}cL,YН`S웡/AE.dmTUY&R!QA Wrp&Ij8yoww
xRPT1.<~o0j
e6ɻPz^w6Mq2<|zq|zf4qm><;LAۭpx67AE^  L괁枼$3	`jN1/b&.¾sl-@aJ:-׏vlYz)#R:{PJtն.0Csb /;ԀMYf-C*/iSFOҦRm
x秎0Kkv]N.0#xDK4!pgP ӀFhZp`Hp\T@DCaaEĊd)rk>%ET
#BcD,6`D[UC)T"Ѵ؄u}3i%e6P_z=]Oj(zdb'=OΏ8T*is9Y"JLL<UB)ghm;xY|ae`+xI	DXyM!_m˦|p.üxLT 	zKdEb8(d]i1@*=ēmx󙃂o]	Aш03L̚h=ߌ[9&1Ψ7}24AB+^B/-`pj
[uC 3R(}zXf@,+ J[!ӯua~Փ#ا`f??de쏑+MTŒ2<SC2a<}<m=Y
Bz;	iq5O/Ak|z\>[];o~=|)i}n[Տ16Zh,S:7:o>el7/L޾xkT,}vF{dn{>jM:'Igde<3p0>L,MF/BK|,Kһ £W	YBe:)vg.Tx銋|B;d>Ks,$yΉ CA)pfmK05diafB:HlA%'h#JN>Z3M٭{Ė%83
c"Vzl@p
Vk-a*Yl%F˫'SN"^2{UKPJ"?ʐ㻗wFbdSTA4DJk,-XN}[+ہnݬta56aev }@+#`0v+ЎiN1/eh01^h֔<Muw!y~3=br>XOF+fʾW\MùyMⰆ*_zYɅ֘.H̟9x&>/Y?*HJ;1< #B>
kuG~0תwi@=zCzL8
j,1-f2ZcZ\CwtU<n53گoZVAŁݲW90t<:tk'յzݹS4Aӣ1l9=@,xQ|7:א[!ƯJ]x߁|(y:j(ע,kb-^Œtq_ރ@r@
bws*	Wl3UJ5Lɂ^vc4]Ý%w,}PSQ`'.[љA}9rܬxV^$\Z<yltӺImĲnCk{ڵ0WaVʈ3eƥt8cN~_8ZSx)x&֖bm1o.	1 }7dfآ/'z33N*HJʆ/Q7TD'\kbijr'ُ5-ɗI&K%SLu	56"J&hՔ@c44TVwL3*vAVBڎ9\`t6+PZ[-tmɨEQC}-.)˥uw_xEiE7Sj)#S/R15˥BI5^sLZ3J
NPpkzwQ~mY_m%$o⬵OڪZۯV(\E(^^|ނ]ӂ-wXT[7UtW)A~Z]T:ͪO]a̿ɺ7$aψSM&/&cHws	$K7sbPb>4G!d./;c8.,HNo <}zv90Ji?TE%";%-|v>zv}Inel?>
a_+$	u_kJnV[m&y"a\zNPj$5]wn=BJf'Y D8o{n%x<L
@PP_\`_\R)VUPW<Q|2 HTCJ~B6eV\
"	TݓosQl'59Ip=	&rL*a9Y_lR4K+8(@I"Ԋ̜ɷ%J22uSK<Q\tr,X^IE
R/sm^ 
YZI x8 #@'/,X+H7X3 
B}
jpGx{xq5L(Yɕm682d8oJM~m&8yꉓWLrl`nш&\,}6/<) >$dx8|Cf9%LũEꚵV*yiv%E%:
 %E)@J\LbqN-*LLN,I<,k'러_<j H ddYU_Ʌ6R8	$%V$t'TO(g[qeqIjuf神C GVL&h+1|Ac2dcdIe'ˊq#<0f]YovxUR|SS7*|aawJL.-` 4,G51`>_M`hvH
57N߬~ <2V _#.f|`8e:L.,7sY1NWEP#|fZ. Mx_>)ZԜԢX'b\SfG?7`,8م_hdycLfԜSvj\LnYΖ_WQV֎(P!(H7%$Q778;3/](4rl򳘙'hOd<[5byeɹƊ9U~3r嗖dofT[l4PMrrfܢ.@}!{$䤂,kz]K'䑑׵+(J-H,JPr	PpqqtrvUVIIU+;+-1 b%xy\qIsNbq5Wf^IjQZbrGb^JNjWdCNɽ`&naq&g$$jhBda,2`
5W- !4ִx<kSH+z\ڞ1$Kl\̦rRk%/tj	'3skkk٭	O|Woýg}eDƅ>ѫWqXrFm`|>bK_MG1-':3\ˡ{PGcG+#9Uo#ɵk? 4^.I _#Z!)~+?cޗ˓Awz:~w8cRrj@˶9{!&0\? ;<}D?NLCi}zr}>6{{{oftvoΛnfY7zk;ߛo;gl1vc`~72g󝽷}}@έ]؝w	~`?-;yߨ'G\~<slcD[%hh'
V$}_A!pwjFx+Za=F7摴Ξ7"g	Q9 GEX+פ]ϝQqRso47:V{ݮ"aN0M__3/d)cߕay^tB@Ta"	 jA54p7'+vɀ۶[K(8$ndN3(hnƿ{nJLfRR]Lnj*V#qd$I3inooߺnHx.Z3ilIMe(zK(T)FUf48C8i˄vd$.jH]eFJ
@Q]eQc9D7>~a}{AtۣZKUBDQ`6d2Ga"Qi[5/JC*.@eQq^UiQ `k0-ʭKɼߥ4A)V.-M Zw??""_r<d_N~|4GrBNh?&˂[H&",.8:zUr ʏ+5LDL#2!d659il$	Z$dogZ;GWoP;# ]	"@"ͲsD6"0j&,T	}s$/B~WJ[2f8(+r\[ڸ/t	?hJy+UYbiH`΁a8":ɒcLPU>>B&':$9h9q.i=K2V*8h|T2֖C3I+Suʻ
o
+۠
e)B12C^f+V~!1`0߾Ďܛc<f`!`t@6 {JBe<]Gf,kBq4ѕ&s;<o*ݲfaך91谣
&MhSp0-4|D#.dbxL+-KL9*mhQD(oXee!dFRgXk"v,&Jge r.P"Rnd;u/Ԗᤗxv<ӌ @#ęnC6~<*BEG
Ł8ܑah<J"LEyCKc`X GjF,E7=W3<+~i*'eY%KKY	,LT3ibei3n2 kC!qa
}jsٮ\165V'(_~FQ26}lKIT16xؓ!t2#pU	rMt<f]eyMdtZ&/ěK<M`jx6g9.h0#9I2tu.hP#|0B״v^Ա4M(sSh2GCY"7֠jVxyeS[W}fc#zd;5lnM/n豨3?<,;V-#ԒLZ?
t<N:9SⰕOayLYDVr2+}IiX&ltbK8<NM]v;P!Bhi\Gt'G鏦4Ǥ"Fr&w;#qcѸAF"5'e9QѸZ"%ݠDb0E0)5Y2"ʧ8-Hf[59ho[A؈.H5xWW1s6˘$^B}\cM,n="+FcҺ17:S0f_y|-P*r5>BcPblVoY[ʕ\Շ~->W?S40U%-H]*?,q$RTMߘ K>hwdQ,! S-w4WH7wGA,SBrHU9tf3"k0ޜ}FEBz/C蛝&?]*#ܡxi-z40RYa6aa9eτ2{SU6nTX^H2Nͫ_zc6`E"j
MrFrڿMחOXؔ%0ku5Iᆽbl!@.VBP9|?t-#1Rggn:Kh\1]o([:}Ev-a`ao(Oc<zRG
b2sRٔ##{AuVXiuKxlQ״"ah{)΄v%d0xFl0J=!H 9c&)8BsiHM:>}cBU'FQ\E4`s08|:;ndx:Fp)RCv*[!h=9?/;?zWxb׏-Pn1@k]v.Ll:;	o)v=iES^
iԿ{Sye@ kR/V2%Nx'{ֿ8%ڼ|#l/g@s (C\*pB.ϵDK(e+5XYųqw4}e47ҎH1W4îbڀǊ,_]u \>gO5 P*ZhKJAA	Nܿ+nVlA!S~mmsAQl+Q
tCF\޸^6|Wa!e,:ǹ-{	E:RBpqlmq(\/mj="x\AxSE͙eyahw¨qF[o@|m.!y.Q9GqWdbbʮ p3:_$xJ_]6bʊrө櫊HٖU.bƴ%]pOp|t3t	?↷W^$^
c>vh!A+e/}+l`[fնɉޯ[p@2%#'O% A$A50-rWGz{́Wv"̯^4iIг{TsH؃Ne){0)Ҫ~>9}F3mPS7`]/QWl!5ٕRv+ #(VO07M7_sI-7}Wz8D\TY!lI"U/ g0\8<(ۭcSijRlj+PaHOU7svkLw,G9Ia,&X
w~G#{v ˽`Ń.֐Gjj+zѿםp{;=t<戋`p@Ǟu"@(D4m_ʊ!vs:F)?rE؎ s`9g쎹xrЫHXxFUMā~̔z%Ap#?X=@C"Y3-|[mp36uFoc _B	
ʚ!S_6Hr4;)R\dWO8܈I+8,2V޶(!	sɴ`e/,Թ60sƗo+'l^N^Er\_\6:"?*}8|"9_a
 M4Qpwo訑dRd,\zσ^SC=(q0=]!ʮUCXfeq
_g9(ŷ/iG:NY 	K;zm$ÚIn!bz1OP< >O`K܈=qa֡uiE7G/H\Ag8ևuAgwjy_^1xx˸qC
v&ɶOɚ>26ɇم'}s_ɓu"'idd$&;U楤%gYOs5,$u)]m) 1
x[qV"ZjNҺ>yfd1 ϠRx340031QpϫͬJu,tK)+qLI	.)J,IM+(`p0YF:ru?jhh``nj05713SD/;/Ey%/z>tN>5-<<kis6ac`.ļԐļ\ǔ"4܂JLj`OK%v{Nש`5*$AgINӣ_5B3(,1o흌*\m4#ΠJ-uk2g.sk$ojfυiK,K_͕Ld]yjw.-.ԲoK*F/<kW ӥ( (3==EKyy|KZ"w־|-?_R__Ri׳YL;zR'TK8akE
?o_\ނsY׮k@#FqRӾ<.gu$&`|ca!chCё#O᲌'
%ъK:0?Z壯o-yX -6[78;3/Eyk-s7w\z`[>LʃRrS3K2\RKsY߸*{Ĳ'?5"8į4Ks#<shAL`zrJ$Օ72,Úo{mՊt7օ>̨!}L.3L1կ꧂~~jҼdJL;n.ö{&dG	 hexTmo0_qCHITXn_6F+67*Q oXPB/i}~|ϸa0@ɉMzsG("eGQ8]UÛ)ZXa>(S(}7|Q|	{ z
} B@$TaqyY4zYߕ?rl\rX틭g{j6yT9A25Osd<ESTҲD`	ZH7TJTVQͨ,p"t
mۆuz-ZR0(N+4Ƕu$*T]Jb;6ELrz9A~ʀ}_[%hW7r[g#TOWS}7
(;;tR8{vxdD^}7n΃E8K`ޚ%3)Lě OEݒ=̋yCϹsm־:ց7#;sn9eNڃf3zKݴau2rl(=Ay{0a#jl_ʎP4@Hx3gF9WW _jb]ĤT
L	+@Xu y'gFx3g"_fbfq|~RVjrd&+&+2)ph$%Vj*LegI ǢkxTMo@WL- m6&
9*jW߻llpBi/݃%̼k?#1JN dw7>D"QI%5T"S(0|[qFc%!/$g""%<DuL_(C W
Y(0@>E48HXh?*-5qaRK*;=E"unq5ϙWvM
T-_5-s+|mal5J/:\^uz
4DۈSYJ9(&g\u$Xa@$c7-c:g4w6$Zz=QzcdcY\k9`5LL)N`j[F֣lJXuw{߇LWgzSw)Oțw~ɯPlЅfV2Mt$Wg\B9jLa*%HbMKe2;`^u%kn	xgs^zDqݘ'2KNëbP\RΥ `RKJR2'+1Lf\(mXTX	R9QXV!:v2䙌<lѱ@r,RUN7ٕYٚͅ~ f)x{scD/y>ԜĒJn/3n̔49M yCcl9x;ıc#f^&S& 5xqeknbfDemj.. H+.QpuwR~

9zsq)DNƨ=qd)uu Pfeb5ؚZ.Z. s%~fx{s^zDqݘ'2KNëbP\RΥ `RKJR2'+1Lf\(mXTX	R9QXV!:v2䙌<lѱ@r,RUf)h&$ghy($-ӵK-H,,Ӝ&"(]Wjwl'0N7ٕYݓ%āXY$y֓Xɮ,ғ}%攦j*(!܅pڑEhT1 rqx{˹i?rѬ] :mx<1~Ģ'_fJW
pqqUV),ֵ+ILIKMUve@mC41%uL (\Zbe&UzVj*{**Mct"W3F<ٙ)a9똕55&gVp=$u%=܂T%uu%EQQRi=y?*AfZ. jñlxTs@_uM5MVc26UL$a's4xл#f{(Xl޽KAs|dbPdc1~l<E{p=f"e]̽+2,br#j[E>{3&=ž+8t"6yGxqme&S$L0[hѺiz{ԁS[]}']M/;McDXT^yM)I-/[UןrNdQ}&c&٘03KE (%P(|g+s4q.:CV:V.3 \@]E-p|1e\E+1̕]>EoIWjp\RF"#24F84C %c6p	2bqX*\#-GkwRHᮣ(9C#oz=y^j!JJa!869ISG<dh3q&fx$"ǰkjsSn99/ˣAWa:l|sJߠ2TU
0|&C1WQ"R,KXgo*vދ(VT-26{ʂ-~y}L2%NǮLn O7x;Ȼgs^zDq_ 7x[̳u/gcJJ@v
<V
%Ey\


<œ70Y%%Vd$)DNˤ-ld&fLqsvPSQprsTR025դPPSk+'Z.Z. =sx;3A9/=u뮌\eX)es)((L8CJ!(W ^`;LzMen,b˒ W$Hx;q}=sFb^zjH~XbNDwF9n%w(+Tdd$%榖e }8RKJc'_cRJL**{**YO6dLs-(TPS<QD8; *`kkPRTPn:f9u`?P 2SsR*(*Ogl͜V/T2Zll-W- @TKax;~y={pj_iND~>>J&1L\&0y6 HZɚKjj 9QAx;|y=sFb^zjH~TjQD7eFYŌ^3VR Z.Z. xU
@D-D0!4z&#'F0ofhĂDɡ.BnUԦ#k&2qڏaCIwIm^+MB>pւ	'qtW&AxaE$xQAn0+ U< U!)́%9k*k@(BHd/#3mV;
KlR*o֒ROcu$>&B?dFoVz)Ѯ=\OB@t!<r -Y.o`\qۡ$JB?(-eXd%ϐU]<%BU`\I3SG-5'#EȸBAis1$fx;ys^zDqM%?1Ʌk5e+⒢̼t.?&3q[)$%V&2ZL~Ũn2 p)Sx{yC(HJIFf]IQfzzj_bnj<J EٵxYmoH_YK;q$VQ⨧kΝX]rU.Uyf]\SE@x]ڢ~vo(㭭<_C#g6Ͻ`L/ع5gxZ{̳[[wxMOBñM2]۞9D{7W)*F/l&UC{>SAq:mN=≶8uM=#*sᑆJx5;@oVzfs#M(ԝNmE VҢ|lmzKATI'd-jZ
j
U}Fnȭ[.=1ˉTu#lF nar6&Pҹ>XeKTVO <\ijFQ^&!humi3`f`rƉ빏<kGN>"\tynPP@8\lF[}y`9n8<E!Lr
lc z.AWZm5:NCk)8_*LN: $*V<dcM}2U?%LѯG&$&Iل7}MYI&{BEED⡂3\ϊD>yƣ+b[mĥ3ȗEF XH#0	'{tt>:}7;/N[dgǄ:	{F(s6Dř1aωgSt 

lFl./J$hM?s=amAPIFw53,˘AB?G63&/  r})$-ex)])1!1}dezaB**'19E{Ȇk;Vf1BNV'[W[+g'WrGW9Ƴ_^3kHڲO?>C=:؇a zh{}h=z=ww:0Kv=mRjF;`o ݹյhwXW7"M*Qw녨ATd0n!nȥQi6G҃%vVsgE a<C;ㆎSpW"߅g^!!&xMC{	RXb`a r'Ok0%g&ڽm!AaRDA;)[!(FAG<wa3r];ڲ6JuT8=Xal.?T[px<V DvyA|r}
@:853D~\)؈{ZԽUԑUhuWC4Tm
 I#E!٭Szl[lA@YxWQvT#\Z*-j"nFzFqJT L^kMMvC}5է\wFd#ڸ/ADjCA!OȪ|)I=IϷ{%~@-ۻ	I=tufn;P{mXs|̝6^ҀgfGTjXMIx*ޟ|SSu#ؼi Nj$j҂9^<lmWO['LzElƀ+7'Cp
1^%PdWJ,/}/[=EwG1'rK#Mvoq̈́|)"H0puS^O:oaĨx).@a)$.'!T毾=(m<x{x~B#W.+.''n^ϸYAOar:d6?#҆k\6Nq`]YEYd{>oY'JM/J)D<#BIQi5i;801*LV@r4<.>&6JfJ,Tdi.Z鉓h;	O >ezTrR3\K5J}&|__A&1"D'$K3SsRsSclmTS+AjJN>.PTX69A@asgťIn@=S :6w)3fa`IԊ<#'
M yt	2L`7INS:Hm.(nF. 
x;ln-kErjAIf~Fe&[Oʫ9m|-F櫼&,%&IMQ$'Io˺ERv 1 ]lx;liDg	ԢTԜĒJԊԼL\MdS,3dyEXbx;ļy=knAID,(cćխ Y1x<ykHbRNDьJu&rqqqUpUV),ֵ+)KMVR ZZ. ,ux{<yZrNbqknAIeHbRNjpIQbIjzBjEIj^JXt<}:`u
% !jb];0/17VirdUF;LFՉ%]}\C\܂}쭕 *ݲ#xP0[P/5'tqm$q`8wsB9t[ؙrX{%*ߍ@ɸ2c	(TS'7/~[[Ph̰4d*r0T *`"[Z9o!0<'h84Nv1k%齦73GGa{}&Y>r&}o]<;cb$mxĲes^zDq5E>l%EyJBX
*i9)~\
@PP_\ ӦRX/I-*ΨY:y"doFvn$No]1*]x{qtf^IjQZbrobqvf^zpIQbIjzBdFɉ'2I},\\ 
gxV]oJ}DT}
r@Hn1l?@;k`R~z윳YL[p f*:kw
) 	WZ2rslz͏21Y?@,e%,F%0lɗ>fLϓ}'Ogee@%(&0_4v?̣Q<Qx5fR2S1EDq=`ȲH_kL[Vٲ!SZiG!% A ˩-C <&	mhm'/?N|~]f7L"x"X0
Lf4U$pcS<BLF *A#PSDGn>,+S\Rдw<a<Y|/ɒL<+͠"!ɉwYHg(E}P,)xjK_-99||TZ>NU7VhT|:\#Qg25<)Ws"=pצtT[El9&	Q9fu!Ir*2i?#jN{-!vP(z,K3 ŔP)8EFoV(蚫EyڝU\c{Lz̛RX4A7J}FC,/)Hm}k۵JX4]PWajDUU؍~ûwVhp.)~L]A`a,*gxg>8v\X95ZIPE!UyR%NxތR
|x BdB>s^zu-+T2sR]Klc4)'3YIAHeA#Ty?ccd)6+⒢̼Nl%jV-`3$,&)\XW	3b?M ^3wx{5587dĢv0[!qe>ɗ=@,14UVA)51DCQ]G=CZ$#X.-35'/17VSSɚ93Ma#afqh^faiB5\pg?gJXRsK34Ss3s֣[apNj^zI" [1/?27*dHcpIQbIjzO?DrB=7:y]/<t35uԕ0b%Ɋ⓵9aV+Mct55urdmn`؉Mbd Fɑx
@}-,	k,l4ar9n7H#+fYn5 xX$e;-ߓ iAJ{6lFdpf)MhJstr Pr^N!FÇnb0t/7jYfj=lNkA:G.~{hk4x4A9/=uRo⒢̼!,] ^-xke8%1)'ul`sS5@$#X׮&`qjj a<x<y=GHQi^rbID,{sStĳ
C4BBC\UJ22uJrRsSk x340075UpLO+qKL/-J,+H)H-+(`(5S;uim\+6o1hDуagy	'U{(%U7~߶gk*LWf49-3'Y$Ņ>zS<yJļ"d7MþBJ}cnU_3pm559̭\les4$37I,Vb]$&`h` U$$"Nv{g|ǧTo
vjthqjKjZf^j
.qlJ/,~w": 8HxSN0+Tb{ew9,q%2$1Jv*8I[>T͛7o<e!	tZRp.R'ՒZ#\	QDZQ+q띡tޤO!Zõp|-K\ۨ5ɖG 366̾ pa1r/SqÄYyp	gټJRtՖ^XRZ9^UVkq-ugpDl̝Q x(^&Shj%\麛O|
?L79]oyu֊2fML{.x;0vd|=?Q{eOϰ#K2klN|2lOUf?}QH1ӽ6U8ZI]a"R2*+;ѕEC7M.t%Bxk|1!+9'x鍫2 P|^j!x{̱c(N [wxkd͕WZ0QIzr655W- 	>RxSMk@؃`Z(-bk+(h饖&SͲcE|kB!y3oޛ+AgP9@_%KM_O
5_/@v	*| "num=g瀹@e֔q7g}L):>>2ȁBrGG)ĉ
ǗoxE/jə)r0o4b1u@OfmCPK
b9(c5P61ܶsn:Ō5kRJM=Et1en­ttQ+K3M H"?K7DmH+!|Ѕ	ҋX8h.nӟk8<~+|=NxuB()p"#E޲3j!bJek6'{)gX-Bv/$bVUl}]9q9Gr$XwxYQs8~W(-&5mzM;CL]H-,9[6mܜҷʫߢYj1a)994:&HJA<I,@r
z*Nֲ`{{,sQ^3JI<M(/f\wM4I$GȘ)<ĔQVMcOx{RRԠ0aDاqӔ bd^i/W
ĸDaw\_;C|1<efj=x>2x"DU!%AP"wsrg+`AHZ$kt2Xc1 jTj)Qma+jXZB$ĪTm' yHK*o.Nw$BA ]s_H|KXKNmUv^s못dm=>5ЋV{.ƽnW[Em|p㱫auO<&3yiZ_VŬ
c& ^ȖQ!10yιdH'Iָ'x;ұf)Kʄ#NofJU}Եu6xr:9bfC]gΆVI4cCgƠK001 .
O+Ļ@s{3c^~%wgMb(&q7sAb÷T43F$$oKMK<௃Ñ;{5-kYh5f6S3􂟛WвS56V8%@\g4; SϺRSEM2	<Kg)]?ߎTl]h @ΰՙZHkc%)hsTݎ~Mh=GpbuH}W)K\c&JE6YL4j45/9Bq~b5(FS'Tt{;2wcbKC=IەOv]P٘qM9$ Ո1HkSP~TKOYrˆ	P&4DC6.	U쿞oܷ8~)hbpqcLge~Y;cGezy+
ŁG(Ӫ"TSqE]ƽ4F^ʛ? g:APpNHه3{#ؙseӓ9<80c<c}I!7$9cl_債~(\ދz9i܂4LBp׼,yNR#j[ы
ϳ=68k\PBƝZ]?F8TS*&BDb!ӾRC^r%A9à`)lT#zxEXk7"鑊
MT"H`"(gr(\|lljYZof)N]Γ#&yPI/򻞢6/TouHu'ct'V+24(]\)ԳLȯ^1m~`K	!U3bǷmnauh'I6=:rS.6ɡG݌-
٢!GP^V6x;fl,vNtݔ٧	Ml\ ŖV[XQ\RRH,QH,*JTP)J%(d%dTkZ)gp) A5ɂ`S+5PLԄ_S)tk|zjI<'% 1WjjZm%+&M@E`U\\\ ʫ`UFxllCV"B5@\ +xRj0+`BJI='҃@XBKCWJ,!9x434͏[ˏ+~n5ڂsJ-M 1^IPwZxj8|Rb`Fh"1;,EEj."IPE)U4=rx74D=PU#r?vEYFOw&hǸ|2aO&&Tc4rU@kxq;QcD_Sчw<`qiv-sMWq#>fMvO~ lxTQ@~WLCޓ^r-qpЧ\VG֬^.ήƬIwo曙o+e"_^s%_s,*Kǩ%+J4#pXuTy'f\DRK%OYVHgYz*AXa2ZXVMps[@	"6I$<f;HEUe0<FֿbĴF	臥bR%bAzx_ܽ	T\kYM~+Y2U9#/m?|(i!#BiÜW o*hQ&FuBs<.jRs'{0tPZ
|S"i}-f(w&42vghVGi#5#p料VV{&U1&	f+1O[lYd9.+2^a9zJ|]4G?rb(=xXWETn**׫WG|`靄qLm,~"3}2	#ՙ\P䱬{
Ԡq.䢙JI;$V~+r3?/x]RKo0WEPAl.! NBUX,	ziIcH}ljCb:82uW(!!|;r4^hm.sp޶Y(0/ٍ}`jPSGDDB`Wp\*q|;,IDX<<6f/V+b̮y>)J҂#~zDYƁu{Zy&"%_IS3eܣu|5#ӢVMx̢
E#c3)tiDa"5D&c↼&y	׸i]FfxD?\aj(w>/zs'z4KHJG|i=MQd\)鹼xWmO0_JIh;lh
&	dHv)΋ ӄ&- q{/0z=F339 Nfr
v7@I1hZO<a&R!F+za{z%""$IX~1_hUsGyXJbI H
d0X8~]<Tw3X>:6׍:(<_ņ]pU0~Nr&#<!u0G
&9]:PEe׭ Veb=(VKXގh%|9;ݜxA:ȲrsFYhk#lu3Uا|$bвc~qUs4"=VT`+U(Wc|F{Q{?)NBAZkPW'Qz TRf-$ժeuePYlVi;
00MdZ	-1u:lJ[@I<SlXb8y*$tZ=HK?#|+azkڅU*VxTXˍѴjH9c!T/8bW#%GDlnZ})oK<ńʫVjg#Wdwq}2Vla+Ȝ|1'/yn{0$[Jk5j5$WNBOmb&^q>Gqh-C}l=ACDڅvÉ>S)Q1ݙߦv[NqN]m.pv,Ob5Cuj Qu%~eqH8yv Ѻr<U^bQuٚyXG2Duuש<\M/|htҙi}vk[>[{:Nvxk<5A_ֵ"9$3?Ϛ+9'X!8%5-3/5eĕh"&2+*DZs) AAiRNfBqIb	*KWP	p暜̨f䥌B|LΓJ'%VgVƧVdk&ܧ0YYUSAMMa27.=E%E4tJJS55!.Z.	 =4&a֕LSP,OI(NI;YSsr/s~^ZfziQ"r"ļTҼ%+Ngb&lePr &rx}yPwǱ
)-hGU<9䨠@D Hu,lv-xeFDDZQK T@E`A(`Ex FE&&x3]߷..#q$E@0%@ )2 'LR&/eDJp\[+rOlw8BA$	\Q|BS bUKs,},[Jl;:  !D@r@1Ppqsw1y$}&:\@bLqLHa9IL)0;A!u4EAL0*}q?Jw[<:W:}79i~J1q FRa1	N{/^hQnw7҅|8$7Tzzn=jO׼ -S!Xc&gZtm FWTV<{r}Na#R:f/<V$bc/w6w@m;i%VA$ dB$H
18wj͛փ]+[>R#)AMĢ Ytq]Hʦ^IIqGkNIEo'⫷׌>b1Fg4eQmЬ?ݴ766x	OMᮬ&Nu+) r==~-\5]4|閑lOߩQ:گO뾲% gqd`hvmW|sDj
[s G5!Ta!R}nNOfn <.
!N6zቒm+PDؤOWo`qٱyF3[1 J`T7#ľ	`%ߥc`$7 fvW׍2ޏBp"@Qt5H2_gWlz xSuD2D+KS(F $ೂ+zl;-22*u?Nn()zw"8^xۣ핎}[Yt̶G	|Yj55W&&4ܺƤ0 oRv۶[md5o&<<F\!xrO˦1%3=;~*Lew`V7=3	l%%_QQ1&an:noqkr釂$nk."6$r53TF2%`d(&W#@q7Z<o9;sl]^ȀŐ{(GK'|d7ٗmS"n%qVI],4oW*	p	FԻO-vNXkOrgz
E0	#jb`/oikQB0G_t6
*,ZǦuqױJbL덐S3풴;De~8}^yM%GϪ<t\,̾bO0]0g>ۣâɢW9D2 (zl~k$sA.pBk~*)VX;]EbVžKx>LK?
!r#dy;;Mw(aWPD׿Z'WM'kTqgꄖ;V\j)^yovsȥd nu7x*rUxeV4V3Ud{לuL)gN1it)w'kړqmEM\%}A3i[0sbɺCh9/<W-ddMF}
\E}\o۳s]D[t;xۗMCm2*hӻ*Qnuљi'bZ|Trˎ5M/W99)sK_516sRZn\nh``fb[_ꘗSYZWQ09ΫM~)`U8_U뤕Cv0DXgtdw<q%%uwɘ`!,J"orL3zWzjGȼOYEO5ϟ|)"-}q!Û3]rrJ灋ggNc&$Rs]-~#]$ZZ_WX+Kȶ=rMKcևp\",/'܏vϸu7MW|]IdZ4ܼOUrFO'r_h>gOV*\y680^fhSdt)B;( $815sp<YZ暛?M^!/vld:Ƶ_M̡vv[NKȶ%h[hjIHfnjpFjjI13Fml&"tEw`,Q/ːB@Qkɵ"t]f­ɱl.Oz٢
[iI7yj9(|3P>r5-6 oxoo0S$$Zc`Ґ@]jL1G8--ۡ~9qƼN/wjDbaHj2°Xf(I
sJa)#	c8e1hW=o8
37h5e>,Iܰq<c~K4 U9
k8<&	"Cd5Ǣ,s5T9riZKR.ciWУx+mrEze=rSd8%2*gD.?G~0!ۣ̫auA</	&Nq[kVd=t$R/mk,y;񲮦Ɏ麒N_N*#Qv-oQ+qxwǥF;=ճ;2Wmw?/μ۝7\Tc0ڙ-^1h;3BĶ2;~c ^P_>@GRiv7aԋ_^7On>E{~r_N<!*8(wDnDr'8u&VB{!E{͏I1hh:"Y2>%x!UpGĒDǼĜʪ"ϼԢTj.. ((/IM.IMQ +)Lv*Yz-&d  8HxZSH9>	N])0J9-䶭,itpl*%u qX~_pZqh;#_?N>aNc{;_Zi|v?A7_?Huo(~wVq"Xy$턏\B-ǳ	aH6HAo{w	g1z;b	 Ng̎"u$1	.V?1z/&vN`3QE."{#%XWy%-xrKI˾O$DOڀ=ɜ/|ϔKsxu`{,%#	˟=oL}kNőfVumH'^eµW&jRyl-GD%Y<qOm{)7}~*QGUP}A,t(1M,5@^GF]	c#,'*44J.LTww%~93;5\N1K;)#9 &353MksKjTN!chA̜Q2L̜aiƸ)8zڵiQ%LȴQdPjuv\%7+I=m74Rx4p'Y)"VܶtrChKGpQ&,D?
*k\0TvO%-.(mgcdr]K8ͣd@ED}]t,x,zjDkÔibS~` V#CdGBMw5%YgA6L{\4.ӊXыHBdV'I-ql_lR?]uL=lugϠ۫؊Qq%;*g1te`1n$|-{|koJ)0~ID_=Pw&G>ttñcwɝٵkn8M1Q7it+Xxql4۟5cwݸŸIl[m
6]qAz9=MLmǃ#=^L5i[X'(:lxxnĆT<B:AC\?$rgx&Y֨q%
c:?g2I`svzq|\b->ᚃ:gË'<m8QM]`<7"v'z0;[i\v\¼9BTak;bɀ"}ݭQ(&_cŘo^DrA*"!.kQhO؞9Ȩ9&=ND%bD,֔LpĎNG\zA ۚ5-W"XyY6ҕo>i}X~N$(YTXETCE)H`J^'GP`eMr0ceV#;kwAhNt ¸ŊhV2,"zxO)S{Y~Sj hJ~L/~:Aas-MM<))Kjr1RQ{:32/cVs>+]:6Xx. un;	F5X(҆Ak3hA옹p3giGI\jW4N%JqS[̰% 'fǬCW׶Wi걇a>C$d'GC\hd9=ISКX(N(miАa)3&S|wC$]T
qzZ`LÇ3Vs@6L7k?߃Ł3UDOixb/E3[0\iCN<n_/E(|ك[\^*Nc$L%i`Bb?"]|V\=%/<h5-<4;OSDm8Q'uhΪ4rm;	wE)H$_Ո D<4 p/˩i^V&KV_fCV7Kd!J:}9h4>rrA0<00`M}I-bXH~vyƋe i܇FiKŒh0y7<;khy"ڽnVIA?QfG^h5m rPA-hS3zєV\txx*TZ	8!$5sd@DQ	5wtMo#`APWj"v|A*XCݝ
]	L $R<>CYW(/BS0z/߀PY=a~(1aaFV+
AEj7'Kd3Pxs@G4Ok_y4FkD@/:iP(wÒS%]AlgwZ{ՃYC{^fgKQ/h`̴|6X%N!l+]iyQWVn"Ս\*"Ґҍ*,'^af'A;q[$֙"8ƦV߈oY'C|E<C@*nuץicBPFzkZ`6 T(+˙jS=G_f^Lⷸ!Y\dfeB/x/	@%@Y5>Ԓ0r6q[`(3:!'{fɒ_Qfq1M̷3
x;3f7<Lm&g
Oެ>yeM&hOS0^S|~!YzمA6g
u6׉q+VoYR2Na4f n(xx3!fJJbI[~{QbAFtX$(|A ?/xQM#3DScrEyB f"xi (852 8DCxS=O0+<d 4HL]XuwTU!|;=.aQbBSɧחm!uo9cB"0ODp~[Y e;3i%E)SL$B}=22ĳ9f"ʚ
|ѺS>(jwZ	oM/WG7T?qpQ>%IS1cԟpi#^{ň4Ke!M>88d#AY,|JSkҳQRPFstVq]Alx?A³ho1  ;]xVmo"7bN%ʅ\Vڄ(\fX+ƻޱv|`e{g"Sϓl:eX1«mꯙf+f2Fȁj	jd0LS#f-F\U@b_͵Q,2dr~*y;B}lN`Ȯ
=Lۯs}RAKet5/ay%\ОO&}Q1mp_}Q(Q
#prBp뾽aS 
D.KETӪ׌=\)Zͮ|T*Qw*IQ5^&SCK.T%XVkDI"
~\_6S[ӗ}-aBc1S	>ED97GgI~vqBta62Da-5lmcr~
EK&4Vz=x_pNQ5kk<M)9F̶HShkxIoӼÒQ1"=Rq:g+R|2BiFjႛM-a]JoC'l;4VDtPmsg`gmϫ>Ys3mZw$}LeGv
~NO]$h<﯎ZvEY?[?j-y§TkL{EiyvMS;ThS>ZI1="jCKtmH,3q݅eΓ{Nl^g;k(D!D:%۝#wzj_uG0j}';35``#uo,HAQ]KGz
GʻׇMx\TB/)ajeklN+	n$YJVtGk7L'i.!}gc7y_C^9+{nHA$JFMjYaro#iXfzdbg.Ч&Z؀&Po_8ecA5X=9:Qx2xV[o0~ϯ*4vo0(Qe{r$g;!7B~wzm=Ms	1.<=3)ǜ54gz<nNCe[|>]Ü6tjyܥwcc&Em1si\[u@~!x8ńw-q\hMCbUK%E%obhEU}=ߴ-־C  m8Ey*PEȁ~9nSܮ-+0KHV,sb?;Ԗ]MPAg);cTdbmB0tZ'۶mW'i*3N0)&}b6k6O&bJ5c]#Q>Bӳ{ZqXs7CF3eF̐&J.ktI/ŪifZ,+Eq4X3f,*I%Q$QKRGi
q}	j~&hk;GdVoPg<CeY4TZU)wՒ\q1!4DbGt?EpXF2FgԽa.xs3@p<{,#OIl\bITpu(hz̒-HhT/ }UL|(xm}RQt2b`uR'Vf/S}6MU$E_,!aFl61&Őߙ@'7KTM$!fuM$MN~֧7L8H=%VLWZ2gagx%cJX/J^qk<=2o6-XtzSzI:a)m"ԚٙEI-\:;lux#+y3/6fVl:,\ QhxkS8;BKq%OjmRX R@̸W$90߯[~lfVw3~ҕE\HxO/wףT^fMbJnd1a GTr_/n{wOq5	<$r'$決ĢP7Y۱KPS8'Ό{	S<%K%v6Oj+>H	R$K%yI.mH`
xB,'?yBf"[nN.G&Yrue*gYIBC~1gmb%[b32 _	0z)o{ 8fp͎H#q,aEtT*7]\?Hg7X[K.j9NL\a8 'b@d7M옩D{iprZO w('ـ@g`j~Gd/<EN7wyM'.)$}BmWDjhkqa6Ƃ?GwxL|9ݪZ䮑K!g`.OdO|w$j,VB Ox?]?>5Ǖ@Zw{+=v[{زKh?w/oq\Eca8ԇS6@/_/~em\y3>-[@%o8z膮3K'3i>?D 6fy.qbǥEkr!q,*5YU&En!+ц\ZNEOdZ14O`M;wĨv,ERL@ܥ@aUrX8>9ݻ>zΙa+.(WpI,//)syd\ӽw>9;98tn0ۓCrvmS_Pݐwg֪q({|0mm]T
~;IEsd1G)@j̃<Sh2ywڲO*´^Y0QNq*6UԮ	yեT8|.ٻ =;T>GEu30L[fu),wGn<Rols@XpRӼJZ*V [X.68IBk ~RpI>>ʥa6yvnNu(-j uRеy3HQҹe䗗/S3Š܊ lsqf<KMlUzYW5=VL㟗|&[Se)?9>kVzxfMzOx:'sG5oϜ'lsQ{ZdZ\% gR";^m?|
}K.h=64hWNZeՙ/P)jXHui[łȘ2!VI^//@~֬eh,vK4CG2z.㞳~1Ī+ߓW
Q@%)OH|Ih%܁JRK'v|n`eDEL+4,>\yg)Gw{G~jO	a(˳ dJm_1'\&av* 4ڔYZ<:7{h9Bנ|,*4 ȒcU]0ت#|Xq$2և*2 ġHJ6$_$8\l#ZflCW8Kdp}zb%-;)~эBo?BAV\м룉*:e^#MGZVz=l=S%kU&Y'gk+j
2 Β,b	g>vpsyhl!4u-al)A534;D%QTk.LR?!-bN{S{.a/IAN	ch`.+kC;mefkTIjя49~XIO6s`AP@~|rL.ܗ2秂O!V(8IWaǝ֩ZLO˿ڗi_;ܾ|5/Fѝu}kv[qn4VW.1K	%HW02=L>Ffd-ls]O":" q "wUi=w
"hg,L_6ǉPe1ĵLpOAYjVm{QwEbK? ]_`ʰ{h"G|eI6Bz-5q[Yw-=1#9K'cHm\oծlqʏ̟y$F/gԃGhxNÎkd(?Wb&`g$ReHV"ZFzvVYa1JDsI\"Fп_2x=8xAvҢԉg&0()䥖+8$khZs) A-W- SxVO0~_q5A  ['`/Bƽ'/n>;I?28}:I[-b)1~zÇTf;1ǭV=F2@IDgRGL+$%E7ǔD"th	3]Qk5)	xĴJM(>&	IUB	#H<ZLSElB;&_eL)66*KH@[4GWC+YN{B~:Xt0'ʖ\}#dXXgSU&֫@\yD\#WSD6rwoBK//\=7{2;	Se$j̤rv(4i$dɺW}(D}$82Y'*l)0wmަ{ԷYN߁4Qɣ4oGl( <jb5RPnl0'g+AgN zXdB`̍R$låI )A9'Ըq-qlEzh8|y4I'J8_ƣyv_Y5?y=d{%f'2's_0
N7m'(}uXr\!#4*((ò]sxmLEjӁ.Kb8͗JGu]d/.Nf1*^\{j`Ϋ{?u~۹+ f X}Xd]8:ޅ_crv3YˤB;78Z&b&KDu1T'83M;/Kl/e^es-9>Y/5x"NjB{jLbzj^<6^ ^!x{'Ujj&X4Ut> 
)xJAy9Pa)RPҐ]0Zݱ: mۧnM.+bh d0VP=(ҏ[aw4hx@8E$Vt~OM/C,d~85LS)x4=c|.bMsj`J.?u_[ϰ|>#_	Oz$xʱ@0#@b1X,9ՄsѫE?J6 ƃ%]Ȏk;	shTP$YZXbLJ{kVƑNG^ f#[@xRmk0_%p[nº-uE$bl'	Q;rw>:4/\ Wyvim+ȑFPZqn!J%9JxB!?5r%5G(M%5F("n KE[emzs\,zqdDq-`_^i\BE`JR8|\ޒ,M/|B0f ߃d?yUHv{]|t0'7,WYj7=(pz&. RCm!*K/pd`ɦyX;Tv߾$ b=C!hDN\>7KUqdhdI-ZɄqBdY w6 |;"NNv|}̴vv㶲o/>	6Ş8!g[w!qI=F2xXmS8_1~M \u9+Ɂ~z۱v/jgM#˲2CaHp##~sr޳#]\_ Op%cbYtpA wculE`sH͆Ӏ( :|a ,?7a.%>av/7y|{98].s*5=#};6X(?@&K{h,}TVa,={\Z\Z#_ Vu&adh2D'BOgTM%Xhfy%J~Y2O]#iO]āܣq5[c(bȰSʷ+e5^u:%`$D5`t5*BhHTa3踆573Sh5@\oolSLYWF2]Wj-URs3$^ՔTՅyH/{]CpՏNwv)ye7AN	17,[1'c%J< ХQ~EIB:<[@F`
dfz4Gt!t%J,üt@oyK=ZQ_U˦M9ςs#_* oe '\&7"W@Y
Kx;Y6I-|XuNkX tݘ1?TI_6W)ҿwᩍ:3\>?:β%aГᜆ189˟ux7-N^¾)<SrE_OzͨM[[[?$tf)2K"WɺyjU $n),E. TE -_ҏO*ewlxGꖦi۱U;¥0S8u˥kh2sײzq,8/{8>+T@=*oꅘÙE&]nfZeVM[Sy<T:Y>0UTB8cտ~H0۟zC]Z!zx۬ZeTlb75p 5(xQN@WL	S [FkMeM`@vjwAjk9a͛^]WY% YBՒROc|UfbĒ/DcB5,_dबɌE\cr#F)>6gN5IƸ<X [Uɵ!ź$H׍wyyai3Y=p'P
yVzQ2o
r(|o0M;/knzX<uױ%^H)gkc46ƁCM)hJĬÕQҊx#fX#X9:t@;Kh)	kht1]SH[߫n_ߋxYSF_q㡕X$I>@ЂLa:ۚȒ;A{wONۉ>onWYΗ;;]0F:uf}	,g	*Ύi}\H~m3{ɼ}kNW;)P{y}19Aǝ;;
6$[DX7X-ض&d;Ԓp&.*+w]1z.,$begLtmPKxl<f_X+<0Uxq;իC/-c_vvzY/zqǋxqLL&e3nWPaZ?1$2_L13&s	0抏fyZh|Nݽ#
jq)FJ%`Z6,Z: Y3.x_יO?~*@wKg׹aT{-s!+Td=TjˌF	lH9؞2ui\ڲPpHNAM\6N@ɓO\@i3̓ OWaYdI=J\xGu&S<&lKRȫxɼ	s\APF) $\/AԜ̹Q %f7pLT\؎r&%~.1=46M	s2^\<>"Y	V*,xXp/sݙ͈<y5)2bMI#`<栧5N$!!UR|$Vjt
?̕/ntCt|^C(iob<ib'eq)ϟQ!8֬g|º嵠so1}Y0d"0OepPa'ca5]	`pQdf>Il/5/.CZuz'o;vBxs\3ʉ?ou[`Z|&u788['ZhnC
	#ǭVMȅ75A,S&&/K_2QT!D#/wjPS^Yk?ijGJZm+qP.imU4i{ׯH]C|B T]3$ǟ0ЊdS{⦄< jZX}XN9ǍNY14PK\Ϣ;_vtxh6It-1o6X#52hJ_lΊnP apa)`AYWD$Qv%5ypV?Ҫ,ԓ'gYv\GCe^/<2Q(n
j]~Z#]Ե |	PVvz}l#k<"k8o	 -aGQ6ΧiYyT^UOn1`XDű/'iĶCg&j\ǆHH9P[C?d>[XÊJ4H!=U;<D|	.SڔP)w
mΙa+4srpy?2O P!6r vC|_ d;>|klќ&7I^sJJen3SܨiA$+jvEөJB0joH5r*̝(@x>_"5S9+W-48<0sKߛ1sDBڜ(j4='.	ň9J #H-)F[Qz>BzF:mP(^N"7H֢7%^MJ-sNM._fB皜H{p~^n:[W갔xEs	(:}I)גa$>?_N	@r?2.mT^[89kǼ
O!n/xVOlTW;N-mHrklIadiN7AxThTKj-PN\81}.p.hIô$7/TOߟ{WOwF6d|4U^|z5
ۨnȺخZ{otM.tewfJjv8'NZi`s]]%鶢Bbh].'T<cAOָ̒=EKޒIu4oO%h+c>"t@{i➂c1a}٠PܞU2uk.UddQhi`s}?3&T%䙶m:M+n+f	vsWPQv*J;*j{xVB<3%)ZC20XqSi;t	u-ȼ(`{IX:9gCU*s>8YlOS5iQaܬ(`Wk<54B
U=3-2Υ|h35`];Tт`*pGf4۴-.ۂPEkT@kƦ2 yvapt:׏%}
gN%ʩDٲ~ f-Z~7JЬ[%\yβG#֡9}~ #nłxSF|iG3JGshLU闥If6y:H)֤~]3vѮpZdl/ [?wa'ፘ+u:[j/Sjkڋ)O
`t9Rq.ym7DNx?[X9i K?X"*6qٓg+!a4=p=%@ˣ0>܋UOE>?6?"p;xu@K":%ҖR[g	8~Mo:vx;gs}8WrNbqK~rinj^IHjnANbI{ҒҢV
EE\
@P=ِYlOt=yi@=)

*%źv%~ixjhN6`wJ-)MQߠɳY&ag<)0avME8S- 7nMxO0W*$6ו*JtB 5ƽ$;/64@	X|/G'e^zbڒqa*óxz=ƻYi+2 FvyE9$r\2ka&D4j2{<povwʍc7f/[)8u2m%):ۭӜa+`gRk%P.31%> Wdٴ%Խn*^UYфpG7dނjvD'Sknh%	)hN
.tx2Vx6DX莎Ej!l$p>Nu0)XFSvT~;&7RVu$lV{d_TsGƴ]MS+|8_jd-/-TD;;jq6 ;7[5޻w?\xoJB<@w꾎xY[SF~aH%S2RvƘ0|lo%uw8{"a-n4E`yo_x
6weg_p1gZ m9Ma#SWv0cG%8;&ӦW9C$ye[(pmw79%1P
6h<*Tg3~|J̷'eBg%bE+
gvO^*gM59o^&S,odqEnي^KY>z3,Zmr3c+YȧO}֐0Q@ֈ5wfրzW5Բ'rXC!K"N
*^#yMRb(#>xY<E15VQ.Oir='!qJ0@_%`>xZDS@oąi-p%زBsp4Y~/ps/rVYHa&ytbb>&j_TPg<rX4q A:hfNgǌcMfc̗X0%$YZ=*{86< c~hpQ)[V f\Qî*o4m;!|+rzNh t>bU!lFQIa	[U\YO8vne<|B$y{)	-A$ HB(]Ԣ{Gs"NA_7!Sk4/_9>D`yDD<o RM :A401T2	=\B=.٩=AsZIsdQ#YB+fVSڸ=4yGVTPm8T{iQ¼W|B+6?K/:H7ܪthE:Fd8xkKerfބN{%̨'3TAOn[%K-Dd-N^AZBhxYR|[|=b3D/8j}hXCOܑH*]O(SUvy9qEv!d`"j9/iW1p^-}BzZ2]wj[lFm }9ޕ*:>Q6g`s h_l pİl_6 ,qWV]
tk:f<a~159nŕRϫ㧫a]d2e#l9}M=#/}N 1협n ;oտE>pqTχwOnl'e>q4	ᓦOXdF'I/feWT@PoSDm73=<v׊򮯯V}#G	\a^`N6% <X TJ+ׂ>߽ÐNwWDOлnbV5"Xa}l岍'K?Uֲ֩	~};|x[K{1PPr+g9:>4~EUG}2o8!Gxwq%)pA$\+T)w`84CxN0uԝ?n+?I)~n	9E-vS,~xWSeF-X%,ݭb@6[2LB6fc&8t={qgԣ/t~s7o6Sv|>x^QYT%-UvRc]Ŝ3Ep5;$M:s;dJ$g+1=x)t.6n] V(Yh1lk=nSbAM0L}u6uE,Mz
JQdbEM0{E6EMWb4ZZme*fH.ZPDRImIRI:usܪ<o;6-,݊ο%gTMHTYFIAs5b
|v2Uw<ŀ;_h3TJ)O=nu+6Uy@͑0L#"^2\YQR@Fc^O3(jyIGR@y>|yzoqM>+jߖq98𻷯@r{@pPC,2ă9e#{n{x|K2|5zV{ fq壘KF-r*±.ʩ4nhQoB-T|\%Gug?UR.ג>uVZZXW68D0Ch"8+Xkg2Ǽ"r$*iCg~+̦yk
Rw|B
kz1<f7Gc׵Ύ*y(gT%MPJi/Uϗ'P$RQqm%9w,VPOM I$o]@ϞyK(ܽ7 '%+Qk~6BT(o jn).P9Ĳ(NpM"!1T\#%?̹ޞ-YI.F{Ou!Sd.YZp.]	ZglkƷJb2`~?8@$<PJI]I4I9de^vɌ=U,<|ؾ<t@<zw.R\l1t"DʉfL.,(.yd0.Xb`+lQen6%+ݡ+-åD;DXNuQ)Ⱥ5{ΦV3*klJ_xVMlEVAi$mWf8P禭;ֱCPUeo쉽넨\pK%@9 p̉A$@'T8"%{|~|S<hvbDV6QJ6BsFC\o^Z7L#ۦR"UFoOCy3+$S~)k8zjImsw:˵NfKmkRHz?4M/?|#N
OC_-:ɂb)ty/i-B$ԢʔC5IZCaO';cG~7wsWn_dӔ;t!bևo$";֐]_mG&=k"N"/Qp3W#.z%lYQ2	/9}	\0&3WߔDׁяNP)/0̈́\뾡$J8xP<ͣb
[Wl.t,G xi}\ar'RMWJ)yhq" 3Rz	_[Bf\E'[ARlBh,ş+W}jELD[9>>a ^נ>yrbc`rmdjN&{,C*	/&Tq>ȅQ]E;!MYsL.\X-drnX,*QV|R*b[B:5j.׳D(f\1)WT'y#DۊJ+YMD&DQg$6U
cI#Qm`[p(*C#_FoqϳGjS$&I{&;#Ru(?l٤Ջ\K>\廬2\y3{rtj7R ȍb&ʢ!!(@9ꖬDp\"ŤJ@RѐSQ=tJvN;%]`cIRs[~=N}I6pQ(E;wtGRZ(]𗃀GŧIwhe$m:u)xIIkKu(Yd֓ʆY9DyZԼvI`a,9&ǻ3%ۣHUDeaTPym7L~%rqFȊ?rgv >YxVmo0ίUtI[҂@vueU$@h]X{{ףy8#b0#6#=KLDRkDp1(f7>zs݌9XfØKDm[ aٍЌBF8Ԟk5PLHzvc{߅o`REF!6uk͕
rz"L^v``;N=eK;e'?h<i°>>	ZR"3=vyPyXL+]56WRQVL0CW	Y3ǉL8[XXxyo<Krӈ!Zp8GO`j IItDna"#'Ӫ*1%c$I#VtqD}4C:3ò
^R'?)vz#u:)	1r; ؔqpz ; AժhX16&N0Y9l#J*?zŊ,t=DKmCƯ$+f-.^OAR:ޠ$}G]E#cUFVBai^2<Y[1?7}gMGcEy 0.WJYɽᓕvuC7}]mHR%mj^6ckג4{BV60e5=cSߛgn˃b=>(a=m.Iv
^)8)5ZxBշscдu|?Sd͹xX[OH~ϯEFvP*U [)^PPؓdzlB{<!e۪Rו9s߹,j4gib'7﯏m/)uc$Hidyÿ;wq]v_cx1'J>q$܄O?ԈA'%z7Q&B*t|^`7@h$3BC{<mձ{7|g{px
=8%zv8oy816u߉qbȄ; ETgr *H;	cEKHU뗒U"(8;VYj4<*CzF:cd`
_/m˲L]}m؞N4$Ӕx* 9Ka*cΈV.SE[\zSjub7eq|AR*
*PRj`۝9q",yq|<#
K+m)Udj*nn8^]jfR1B>f@67iskgOin:#:U:M^E!tnQ#@P Qyϫy}QR|֕\Yp.*ORqA	EN$sx"f61q Az}NէͰ͸Kh@̋І2AC'Zkqg AEg!2n_s(xm4`W :HZҕ{)+ʩ+kB7!֙qh#cͅC~t~ɜ5t1XT6v!J!PK\Q ґ#^0;`OeAT,s
Oi
._Y+ù*/7
bLȴ fcbJ/diC]53!TaQbQ=af$1Nq=Tej~綇^}l)\h'aմl&&7cVZT!1Ye8f{{=꣣Y"^#tr{FkFuWo]4ʀ7d&Ыn=C/Q8$w`ʖKv>8*COep3!=>)EHE q<BkDUgee̳ݎbHgno_o?Y.(޹8bpv?kRBkznNfZP$r.Ea([牞 ;kWե
,#9{G~=C`
I#?{ʥdg-YE$цe-<ҦQŀP
bT 
j(uC2VJQ'uN+X>dׁ$븬B:ŬEͬ;wI}o(	RGmsnle+&OrmBkegtVjw4?
AaxCbGhׅyB
V
8_p8R%8pA![Lc>eMuM]9[Eh]*D-YR#:s3Yq.9U>z7H=c5"/bȊqQfk
m(賩r :fBU
UMUvR/8m}ʮi϶8)}Kӣh'T>e̬0jB뺜a7#(+x;iXz1kErjAIf~Hsa}--.Rp((//V_?(4DCJ!(rjCƉ{'{Ldmvf̼&q{%&'%gO>.GJJbI[~{QbAFtBJvjFf^JYbN䉜OL5UK3SR}2R]FuN>ͭR	VW3YGE2ĜG9]&};y7,i
jOn9^@I hJRnnUrJ:
%E%%@	j|Zr4YAPjeAT
t|ѓ%c'ϔ)/vJT@5$c{k%kpN.e?G]G!(Vz('1y[ ?Y@I]dWs_"
q
e
`}\B=3ra.R*Ճ
g qnF\.oT 9,'x}kA1L XCKd(@h+PKKk^$?Pqmnvjw_O}>'(bR\vwv_O[*>dvc۱gEx	'.=؄2?"L{');ߤX_3M!؅Q8	lQgP5VVjӭTf=nܰ9\y{r+U`<_ƴ58)?K1:pbxb#.9ԋ0TM0Z6EPZ-PXs@Uyx6qujowf_5ڽ~CԢ#+}٥'.I&ʻp3<z1=sy$8Z|.ܭX<bI2)%Rhj^wİpNĕ26RzmMSX?rhKngy:Z#$n\*5<O-p8-	Bv$xuk0Wb}ثIg
j-1G{g4iHXߗTaw\/y	%bf+z{XRbwjKfYL,ľVз!Qh'j*R3a쑪6F1QBvTcY嬃Ja=ʦ,{70ۦ0Nym_?,A@ y"GM*SuE.R|܌6?8;ubw>ရ~]ON%˜E8Raa[q,Դά8]'%V3ceGt+Ty:ƾ_
0xZ[S~^)S\vN8ٰpʘMeyU+K:xS=Hi g{u1ƍFh%zӋԽg;<{8pVLi7s?WXnc>ߜY't4!.8%8_~hx޼~?4nSŁxdzY [Y__ӄaEZy6O;|_(̦)|4/Mw7Z	#!K..wP&Lځ/-%LjeS?uST#{ `c|x|nuJbK6][r bc>{GZR2Ӕ|^Y*] \"˸R ιiW7<	U:*[11Îĝ֐sRi WnJ;G<?[H+-|G</skeP2	/:ӧ؄,O08T)9F4Mo&EM2:fdrcfo187j'8.FΔylיƢqt"~Zt(W5KAKO&s5pM)fasB,B3g1zoЧ5%/x5*ɮw܅У1-d)ubro^s?-j$n@OD+>+99ȴ&L^ԉ`qG337x!PZ{+Be%lx{i|?$T<i
#'lp\-eA5rH?Z9~utd _.n=6ŃHΜ
PY&	48RA@A	~N `aS)Ps0BZqU䵹1^Iqp@ǟOlc;&?ri u)QSr9Sq:#7) }-r/,-=K"Ki!II^啞^ⱐXV1xP|R'*LdH>*y=Ag'Mِ60OW^ͬ>8:CaCn;!N;tѩ6	ƶ?Y2C&J_?wݥAɧk{J>h~m)AqME*yw&4?`N~\[֍6Wg7&`Mvw۲n+pK5+hM|xd)6H>|Ecy?ٴ σަN*dc pC[;xj	)G6֛y; 9~t(!nC_0-X欵B}y0JS1HV8,yL>cZ,/kY"~ <fRE%,t8M,&m?Ď5Ĭ0Ow 	d!7|Sι|C:hA+nL0<+`mm,x?T
;<:D~hyJ63"$W|xXQьU='hNY3lNb4tilJV-nqR[pѝ
pQ/1hȈ>j2嶶ڥfc{QF<gLepwcm+zBDF =I)|g87fرrƚ_R6kvZzĿ`cjbR۪є
w嚠x,n~sfθWHE\MI^LPغ\@1Psj%.k\K;(s	Y+zܵF:K/g6S0ǍR+C@KHW	u(^Nt@IxOdժVP}A"7@v6Q\urRQ]gf
rƝCzHd4yNі7Kƨ'QF=hQ~Q˥ӛ	Ï*+lrL?fY.0Yr=b}`Ɍu{ 7|KcQqm#y%ZX}Ee-*jTark[^կd"'<0oWvKbΡ]1n:7l7K̨FpH9񫀶a/'RuOcDu*`ibW pbVm,?4'ͤ&3>UsP13vEd^6ԩY(5}!V FV.ULĦ#!9v%Yf#c0
K4ux[AF(/bF:(@jh4`Γ];B"8F%"
a{3[)å-)t%µSc`K3[Zk1Ysn#`_?|K}o*o}x#f'鼼,ѱ
6{aV).I,*qI,IQPIKb7bfADe)vK(rPB1vj=Q WxVN0}WCEZha
Q"qS"J3)Mv
ՊqJOsfqTt:h
4s6y0asn5NiM3f_
%ip-8JLEmΟ|(gjDT
Я(3!-%w0G;ESf?i+d~]%tEF1(!0ٲ`/&;VnUXIR+#D-kC^6o7Ъ@m:k]$b21dJjV\^B^8%ox]ʖZ⪑YkަY/H9[Okj],>)Vޠqk>$`e/ ⥱*G}KGJx/E`ֆ%yNpZN$cs)xZds)<cZ"\؝(@;g8ݛ^~[xgd|fpKN=f~9s;7ZLi (~tL6.E
=aÓݨ̨QCVy릆3U@3*~i"tCT
 3>}*%a4DyMku5a+%DҕԾm9Fp8l*ܨZp`FgZ[8OF[jYzHX.-&
ɲfǳKSszPM7Sm%]h˻Ϸʊ[d0KL/('Uu]anvz4)~ uE |rYe!|`Z=|#gqKt_)64f'8Ps"sxY=ެyx[*El艏c7+1elͮdo8ys+# NxXmo6_$e}mdR8Ɋ5l:\dR%^#izs
lSGsIH;ASʀ\+*nxS1t7}d6 _gKo&2c뾈
X62s\Hm8Π!J`bB+]VuO }Qu쥠{L0,_z`zPez15И+ͤZRJ3i*5MzlŒ椋RH1MK$~Ǉ%5\l\,d&Lf¨U5x2M
bTP.r&
>ey)`*f	')'!F]p;`j,/,I{74<)*Quc\v@)]@{IU\AC,4N1Jj¨]<_B'>}ewdf:KL)RDU!0
o -J$tB{%Mҫkctz.pG \H;nVa,/XO }W{T199!v5a԰	p᨞TUeNqi^*S$*dJN| JBfȫmt';93"]Ԣ\G\,U$[)iBWm\e7k+q`*w>"4b6J+>#!(aeI/Q#f͝oC':+al8_]vJqF1кjg6H8tITȠ}1uQQȫ-\]݆{ߐeL%~񡬧=5M\v=dK𢦣tj
q9!1䍥XVU;M8	^jR%e#ǚ+EnU>ϱٱ].,.U0.&=eapG8:|1Į,EGty; h4ު&6M)-mRapH0զyxqu~rMui|W6~Յ86]}X'یo*/Q߰y/xՠ.|p`jUJvOHDIu!*ԴzJ>;iꛣ]㤤y5EM7;~Ezo޳0RK]d񽖻~%w*7W_=VȀk~kֻtO'O\*/)%9Ǔu؈?`_,1MvN
lϛ*k+܉LxY[sF~~RG%R)f<!-F.vw/HZVv˃sw.{$mwav v vxL?qC?d)1jF[`ckcIFo{v=^g?GI|0tzkq{K|/gG: vpLKp[ }$$ ?rfQͺ 2~C+xfb{ڮY4[hmpCjx"lL	8D{MyD~'ad]f]ڸ -Zn%<0ZڹG#aLܚE 5a]nonjm!d冠+31Vnzg;#%
hW?Szx2OZ]H5߭LH| /$p`Ufe܎㑡D8
hNUmb[
+&I72:3e&º(Hi8'=?@ύ|ߎfD%m?!*7E?&o4tڔg,V,2ze*M?_ǃ!0zTwAt,ΨKx.pKRm |$>v>:DT	()oFʟ֚ڔPqJd$ns_!n@J[#UhsӡIr)6{13B(ف31 wh)!+2,P&hKC^w,n vS,M)(ɷ>M,\zTSMXuo}X[bd|CDd9r@=@2,Y̮Y^F?vK"|#b:yCG%Jitżt}.//S;*'ǹ/`B].~wܟ	;c@-:ԧU|1gN	LCMr
~%+:[SƦkl<\5VyBMgNzf{VGr1	*3 yy0Emh=+ЋQaeJ^JXYSw=%L%%ψ.|"ɜ!:-k"SϬ@8&f훭eət\HgҼ4Ӊh^e.ÿ+pz.VkyE'/'QB0( nEq[zOL(K*'6}`U[kM"O*dS!A4jϞcmg@z;,Vt!OFqy!W<R]oꇤVhU:>D?߉9Jh$#xYV:%jȎY\JygxUHY%K~qge&=bcGPmoK_
rO
[?[*YiD`=UTI#*8m'yUGC	5XONTHԏIƦVX*',UWޒy0*Dj!rFOcFD*Wu-u#}KI&6ݧA%YeZ.:¶ LE,vZZaMLxSQo0~8UHW؊(	+Z'b+8TEUjpwww>qN4E֛tE0R4*^1Tm2GlJt1NFed1!O.2@;THLzNۂ%޴s5cƺ#ӬSԗPZ% Z%Ku
̰UdZSASi~?C:qbyNOVr ޡs( Qʥb	SzkG4b|4lG8#o0X & "ݢ41&ǑWTY,?,I	X@}[KkgTSK*p&Ї*a|g3r=fM^NI-jݾV&HO*]|/lxV`0+
sRJ*wK]oTE;nρ[ 7r^̆>9ܬ4 gkTg*j@xN@Cdx`/@+l]N;nqiIixrB9f>oC+bkRx/4ˏT+hAivA Ctj2ЗREHxn$d=1p"pBZaCC:ld;w5l N\T%E
S!	Sˁֳ1Uby^oeOhVSk)fնFӳ鳿rfu WGp9Shgvr_ƻ3HIlCI G}BHB 웮?xϹs&ԒҢ/1r* A-W- $	;xRQo0~8U)Tkb,Q-SpK`mEU']wwwЖ-!DКf"IEb}ԪMhjuOHAj$f>tj*,'ؼ)Ғ:f"WгvTHrP>p!ffaKFs¾o>&9[ܟT^ ӍVlDY2/UeZRHny8Bi*2f;`I,Y`I^l'QKt ڽYxKH^5Vabe2qrrۏ9u;Qqq	.%!hevI- mJYoU8&	|f)tQ>ϱiu[0B.C%0mkK,k,I[nt4G:@G-D'7%WhOakoeSjyߙg>. ~wi_+[(?nxTQo0~8U emEJBEjK6MhtI}}wy]ԄpZiJWxMku(Z	JL-S8VV\H_s_l
e$J|sC*%[1N56r#sj)4f&ˆg	_za-Xt%`wB=JSe\L)\GJ`2i%X9C`N̂q0M8H.hnY18Gw?1:
n pg4	>ő?0,OYr<~G@T0p>hfT6J@.p+zӎL2p4	)4')S?	b2.ORNxS-,۫ 
nofrn4GQQ8/_6 a4"}reGR5[EζHU[/w}gTu״lLK/-Q7 `:+t;K?ak*i<Zl hx{Ļs'oHfnjcrrjqqjfm,v3{NT4y$K@pzn~RfNn~Qb^zjFQ:X/V*l "eFxSj0}W\Jmh)^쮁:.M)Ȓ'ɡe'kiGò{=>GtlB$4DH5^gC1a.,fLH)1(iw`V\`!
zZi-ʵYbS+.u׹U\Z򃀫F+JFS|cdW|r3ThgX&K|%SX.}ĵƏX{je'LK&/- x-'oi8
xyfI9xg@ Zwf<"m7tIn:r	ho]YaΣŚfI){JgsBXt^,ݴ.Mfr -|?l@cr2~1q($uwȱYbz7^sRuoH/zl^h-mfѶZ ɿn܆BCgYma۞O[~fix]oP2!2
;(Mnd*g"Ni;zܪR4&&x魷"oݹky9{YI"nCWֱD5yݔ;
9cxX	>LK'b1ɬcQ|	\Ox<UCH;t;|miVuKݚ]P<lb>b?[\9hL7@GK-kG="t)[I([ѹP	=L&p*yPW	-۾U޸)V$}151wG2UEy)MGiװä$d	8{;XӻmMLs	.خqwRlR%^,5U
;?:IM`uD!sr=9p1hٶ":KrtHI8|.<FW9?]\hͦٸ!P;EҖ%n w
>ѓcZ45bߘc+Efa.(q<aI`)=G]AdxuQK@W,p*EڂBM'+6&˱){)Eۢ8+6<i9mòX\P( m͸c&'-MoQ re	
1PƦ2yn s+T qc$לȌ;n)7=ե~B@*ZM?δ.7
.f$OC}}WT(g.ɒ>RkRxuAO@+FB`8+!pЃ8iv(ΖH]Z0ӛo켻!ƚ`NX%=<mtHo[ƒVO=Wq<w@&@tDȔXU*<7J;)7U"i;E_\$x=˷l<|B*PD {EN(2@WvTrpN8cdICliO]:Ơź;<)</jS9cC~֔oR @xYms6ίPo2I!wZkI t8&#l51+$M{W!,[<GDk"#4ȗٌ#-xE
+kbI#h]R}w"yT֏EO w7!2f~VDMCCX5~)NQ`}YB_
]l,eA3zw:u>V1ď×Da%El60/%qX4U͈2tAċEYG!89AKB|z"5/Yyo7.{*!.TyD^)*RuݏJ;zHusm;$uaL$7GD(J$g*uɖ|BdCf^qvȴ:֊(
S+Pݭ*5sӦ,۽!Dn:^Vm.u
OFݺ3귵w|Ypl"̀p,AZ<_JX٭oO!j=ܡX}xk<B-*Jyf?_j)jJhg%zu*	<K :߄.Gw1°/LYku<ϗdKR   r2g*"nBh5DL!ͱSY&7ӿ;JƓp'$YzWY
gw*45yxo_0t<m%OZ}Ȭg9hw$ޚ~$3Pw@Y ]r(^ b	AWrd97ڀJr潣Hp(mWjՌP6%lz;sz\쩴sh_Þk G!7	!_L/X,
rQT^zϞńS/4kCvO4Snk薢1ϐ$$Zs"wNvR-l=G-#v/Hr;##]wtiKF	P}(كU';͌۟Ә33B/=[){GܬՍSs4Iꏊj}0h˃n[IP'LwYږIk[w78ܩҮd idk#*|nK4/pA)
t~R9/$XQ,H塏~Ti	rʕ%6F岳n^olHȣ5PoUYXȷXjU,E]ezF{9g!e$k xki,[(D41UetoS}X#ѧ8w#k4O^Pc]z|ەOX'<&jJWi8_p	Hߴ׷`[bh	Vʭ<9Y3\KFz+0!WI}0KUċ$^O1^!
/9tE#B};\TJLھRLUp|>qe%Tǝ9?+?{ 么xY]S8}ϯfhmѡĴBN	J,'.d Wؖ?pݼXW{tt}%|7k5g}^~mΜ|	+
)9|8FsjHL"g={Z';v !O]6 kb,#GI = looS} q#c>&vnY>=j\csb:%!)?[h1px+`We̷&	UhϡYhθG>CG`SG`hh >4Jqf	+!U1K	13eU`H6Nyq>YԪ$Z4j\l
+װ9 |+@.-Yڀ&vFt}(DMPt3^>3f=}<
Q׌Sbxj
s\i/G0PE<~&e<ȣȬHh={ΧVMV?S
X_"5y
O43}k)]P~r8y@A2 YV	LL9VOY4~ϔdA%8) )low SR(Fp6C3 /Yc>J]0QKn+һöj  6ic_l񨯈A؄ ObO4E~n"_z$}dF^,Tv_x^RDfVD?ׂP 55cD5.TM?ILTw͆\&oIB|(흦r+gO&C&/3,>R/L7S.I65u);u	yk>y~e\g=pֹnmw;`%`tpkh݂Swcm&fՏEWO\ǟ+"k0&KpQ-2;Yk*bsךEŉeց*),1/.\hLV6g#-&QDYAD/q\2k2:RHB$B)ks${XG&41jԦfȯad})ިyD73xT$lP'ƐhxG|5"QgcB=cx^6{j\ʫW3Ek.k,feDc؅}y\_=F'h{$Q@s;U3;r-5/8>,ecDC;LGDn;ݍMMaI((3K*,8Ech A?MlpeԗtMy=7FjK]]_g+ovJ$oAP._JqwQ	3qZW(Fqu`n8hu`{k횰^QN#ׯAPONuC7I>;hz0@SVlC?Z}٫7IÅ%$d$fs&ZZXMeeE*>V{/E'ۺ/ML&-}i-+$OeZ$"D,m^7]JHO#\=X-Y_4|y2}4x.xUOAM1HǶݖJ%6TF/~-k;hjz?nz61GɫWgEX48dy}of?V_GgCɖy]Su,zuobSDs~$4:>}]c:lR:eqzJ WjPY-iuFKJPbޠx~j۠A` a#`cXԌ:0ܭ	y뿚%-ĦBtNp4h(֋S$ƾ滭ބBE\}`@Rjb2NjQk%4/xYZZcì'Ug'Bc0KB**!E7$4<+NŢ2)	+ 6"tC*ҜmT5%Uh.jm(5%U2oc>fay޹!(8(d [oH	+9ބd2Naxj&*9bRY>y|yFAG8בcJɂ۹2ePˎSdӱLݢ,*HF' zL.QIzHp>I+	YV@drKuAOaB,<˾v7(W咆3bG)jQA:s4	i?'x\[WH~a@.0d1&xl$'pl!ȒWO&}[Ւ&1`"~m1[j2BQ1Z1g'?/meGDq{jݩxp3/
rA+zؚ\1TX,,؊0}sԠYZ!Y,uPq4NKwLm.ڙ,ka]0gfb;tRV̌gXLctyufwr̤u.YR!b@tǙ[~=ˉ/2V^odu)+6 DmygyOay-ЬEt4U]"<
[#qRZ;Y5tRd.kSI&^+jvT=@S7sRg/ޙ Os߮䲴B&Dֳ)e7|}31F%ĀHq6 (_qf"CaG! Iۋ.:.d% _/.ێ~|XR3/G\;4D@LkCnTBj_CZԄ.)A
_1	_eܲ$עYXowv{)UX4/G.fwNJ>vCWAs{}<Uh+yiW<5wTb9xHVGr>^񓬛dL|]E{doJÈl~*0JX*381mia:do,>=ͳvC*;{I'*_9XɈ>0	C gR01K@&bS|ny)lNHY.*5+|RGt]EqPE@k,(~bT
k%5-)Xkq朊#
|c:>|1Jc!!Y	5rbaɕ'XO.hA=
u(+0DvöZj0tRl26tEƸd U8$[OT|]`*QVGɽ|p>cJrŭ_Uw:pfTrbVcd[H//KGw-76'$0#ӼZqCU!o~8+1tF~=I	>9Gb~W-eL^nf2?HJ$*1_`E,n9-<)_8 #BN*`Hc<܍O093rizѱL15%慣ogNi Cyj14:FL;L5m}3YhA_ҭ_؜g&vG.ѯ^ӧg;ƔU(Ja.w_	\k*?\Ùg??<t9jswDa.v#7|!ĕR[U=Q
RlTF5ۉ{	E쑻mUo$#~{ΗMbcaEחuFUZ)9KZ*D|&RG>\*=y~,=xR)TU1zYgآkuj:i[n1͙5q{:`kK<.˧_悴{œ`4s&I)w^l1omBMiQѷV~CΉю&~}ojdn9/[=X0lv)~E>	]c$Gː;isxHݭ8CmpY8|M7 s UF7;rLّfޗN<A4=瀘:	0752Y8yj樍4:X3мd
=2]1H
_=U߄Q\[ۀ.MS_obbmFa	xTH7i8@5p!/%z"=}`uݼ*l1FmcSuIqK|K-=3NŖ[b!fՖ[6ac)[>VǗ[>>=ՑeNC?,!rFiLt\H;TuGlltxѾ5)Mw)F~եa(=u,t{Pݲ\Z@Pm,.6~7/E{뢇lc9;$H>Fzγ9OypߏiQof}Gwi!UU
1 pe{z8XEp?Dce2ayxdGz1gQct:߻٣5ލ/ZQ|5raR})#oM~rh+w5i??f9?΄K
țXeE~ 賫*5/5\1g$?%k[kxj$Gn5ݹ 7FnF H1-x,`)&,ų#0@'	jczHBۈ"JAйGRXB4f^?s^,UOvۆ$8p.kBq3Y?࿙<׹]wJgkOm/i6nbhhKJc-t!oN'=E{}"x{ʛk47Vq`dŭR\XRZyZ)+P
fk*&0kf%C$nE$2Uŭ"^x{ylg[n^!7YQ|W#_z~bN|qIbIi䍑b&V$$ɮ>O5^&RX5yd/FɆ
-,QAG?)

լ|<}=C5 'b1^z~
ĈXMk..(LSH/+P)J-.)Tl		ɂ>7o~Tj0Q/4192+)de+)LS0liLHpmNb.P~2uP|'ћ߇ ?Yx7zOvp`!X?%$UC=R7W7E]Ӛk|'i](WG$$37UCIZ%/?-<55VD)ijt3jMwdOOIP.>O/'iM9ywD /xv'6NftuMỎON,IM/̧&9!Fprk!# ɼn^X&7(O`(:yGK'e&d(gV攨(LPl1yC oͬ9'iNu
nAߩsOnF_
CXr]t=&^m0 IYNx" MGHhE?$O$F;P06W1x" PPN<Q_IG=D"OHR	0x{q+A:'y*Ln|,Dk 1>2<'7Y=U'Ov\ ̘ >V|_xTOQO,|Ʈ|4p ]mu쾊ƓWpM<z+G41F/^_K`˗	7˻;5QVHDM׎OWՕx@؋〜fvR6(TXFP[콊mge{Ky~P9^ڢJp^qBOM5cy-m\/#𹲵3Y>1T%
q"16DEKj֙$>唝]5-BvچDmY,/a&ZhTtCϝ"F
 W~|OxrUGV0&ӛ16.
(]'pC_8g氯(SI\&
>䞏"+T}g'z	M?ɓKʺ|v͂E`k:ĺ	WR-8\u]N{N{*Fd
j;+'4=!SZ՟J%Ϲ!i;bӱq]6g%3l!M6_AfK2,zةhNJs]Jb)(^?V88?\\O[G3`i&^Ǽ4-GPbĳTRjw=Jw<xSo{ykq&.9WݮɂhrvlstɎvpuV#)aut_nLh}6d4jhk70m}ہ>ϺўSn4"QI
Q(k7[rnJ4xZ[s6~ׯ@<JIy&q'}*xKYnxd,L(RKU@(m:[?$6	w.8ެVˇKDVA`B:Awx&RrjEVa
?]%:	c
Bzɉ}@!@.|yjb_"I&@xw;pȣv{( .hߠyXߡ>]!aׂR̙CA߁({"
0R3[n3\xGk`(.IpOk.0̬1I^EyP0t{f]1zN̤*JR>b9AC$ B[	8:`x mɛ^E^J8?sեaAq=Wn4yĸJ)`c16`>H{>s*>~濇~+W?t>t~lL_40Y ev{_Ce"[˩ZMl99#P@	M,`H 2BDEk(mCKXB˰f9ECaEhJ'0{8 %!4()4Oۓ\\"vs	 yExSw>^uM4/'Uhm\s\|_ Jg`XH֪y8cfj,9P 们(rkNrE׹ar#N
JQ7i!#V+Q]L7	"`BG]	{+)gb2HR-Q(
"bZ[֢R0#|ZھJ)&@n!-93
=RCB&0};p5GpYn(FMT{moGW߉:;O$]WS1A1HǠZES:3&Dչئ4?:A $_Z8R 4Jǎ`^^lӎU-1\g9]ܠbapwb)x.YH|t	f[l ?`:|27_k^\p9d]	w mScjؕ)xċ3>dM(ZZ`@x"39Sl犷eL;-!c,
H'd@dK|IYa"bunC[K(gDƅ}C!{и؃)vcQa"Ul ,n?T<ǺG϶=C6нaȲ;hh.J0v46knoQ\>dfeOL6>O]ek{ĸeQO4m<|Yn\FkƘͱ/T 3kzX:<~G{ ) y$/u[H;`0d/x<^c<&X)6z?e?4pq3Xi||)Eve\^SM:-٢K!7;,vcc!khT74bxt}j	֋_7E!&tRdልHR<-9Lzɥ~QxcZbGL}cinc]E4H@C&<P0O_U72
ц=JlK=1BrVؐ mH\JeDؕ;	Uli8ˁϗ5:or<Vm(G񆒾Y =`|UZ7ܴ~U+:J0+t-sh5|"Or4l\iNB_$&W.rII9A7;L5{k9;Fb=ﳶ'qHjRu3A4wd_jbфşs-{`^R*ʴ.Z^۹C%zj<Z7w})Zб3M[.oq>ۨ2MD3yz9\1/IJn(SVjʫNܬ)㫽$ZŔJRSM ԟCr	qIbIZsw5.giD̌rgR_Pv4oթ>l>uPf&g(EIl+Y0SJ1_ӄLe3|ӿ3fǁm[hzfx;I`%"S8+/߯c~aKReVd]{tjH=+|KSgmLѲ{~ۣR5ӀFc2**gχ&O&517aMưi],0K-:x<Y9x_`Cfe&W,3$4X)ͮFQl }'xZ[s8~Whtl28Ml%d@f24C/%NJ񍄤;::9>]dZ*yB,oO;/=_fsb\/fn^t@g
/]cX:ƠAL!,g 0蟥a槏+7Ɖ4[~<5;Q.V-z0s:Ivy/ˋ947dcH:o 061֜>O-LG&al5A{eG3>\D]Ħ2Ak~L6Scjｪ:>uhCb!ڟƘ%rnӂЧ1g1li3V=X.-tGsH4}9qa*THw;yhEjWR ѪyᏌ(d>yf]`q8<w!4gXөf:Z-mZWrM}rx)ꑇ
13܅=9"BۚNr2;t#

|9ol`R$Js	qK`4SHfៗۡ6L^.Ԣeڲ:kI7=e#42-TzFI`a!9˧IE`]'yF z
F@W{	GE;lY͏Q/Z]nx7u G'G3s==TQ
z3w >y"<R${ @klHed6&
O[\H	j1
,6quM%vR58)Z*h$O?x!{,b''>,'L%/~
eOZKw#6.A?ڵp<}@5&OX6a|vɎȨ(
n ^2\'5Tx=؁Q-eå/eP[&3"W얟Uߤ
h}ٽ48 18x*)kO_[rqYg=}'y4eQczhw/Nh/^Z*-^X''px`h۝c:|s d!yd "QtqB$ ;6$t=aDD#;Ү&nUTT[@}5E/IZ¶F/8l93BV;;Gz*
ƷѮ#jj҆
PՐ2r~úU,@5H%Qr%x^7C$(Sf~e|ʉnm XS&(oQ`pMXLUI,pB`e+E[cl@Ozh^UKk|]#^?څ_y[V2\(S exiXB'!UElPZ
3KKSt,6W
߇D_ĝBpYVĦ2B򸠒̘)~V4wcOOrJ&݈)AzRGHË
s8YjJ9E9("@O㿾J6Qad"%Sԯ.ØFDX;lWU0 TʈpYu$2}_/I&h}xTOAֶm-Pni-?EAL&hڎtM4&L8	lB?1\A&/٥]$ev~7߼7olLm0\ 2qqp0iB	XΡauNҡxm聈U6[K2Zexj1nJYxnrO㹣eN[̽5͐lWxE1u[CBCZXn7:a誤)*F԰l b-R!C\8H$**JPz=&w%6or*A		$ ONkfk,nm6A$Uzn|ͺ$/ёk@*Qe$	+L^ۺ:[[0a;~kz
	9ص)۔
pz&vf+;%,
hz}vSkbhaK87FXH	9@
`f{y(C&|m	A+T~ђV O/NI^cW0*$?#8U$4dLPnaI<nG3Y^,| U1ʯjRElE"`|'qY(Rtn+עTBe$gQI̪;^LB/FWϴݓIʔ{Pm$õi@: |g(oP?
KQ]uŮZo]ˬ/2'[tbFtpǬ͉6x^gϼfMy矕W_5q~Nx[WbBsd{ /bL-`ns4Ȓn{gFh4m٦,>~syn>Z3lb'?]ћ]̹gV+e&dqً;)c~Q7hQ<[x(.Y1quMDy0hvSp_"YoJτ&4ٽbIɞ\K|WZ>8JP4M;'ezND4+dNY8Jrӹ	yV!3'q[4Wi,%jIˈf϶U	Г[z!7l ny~+o ^2vt14Νd* VH_3:?xg2EQRQLW݅<KJS9MluNWr)e錒s (T^<Q<N j\~24[35O3]/KMlDJb?Fur[ryo=YUԇ}<?H}\Zn5}=smk{a~%+8{:nc.5MnlJxBg>c4'Sm5,&bYB
˿4IQ`ӜqyhJz<i<
|:@c֘SHWfD6L0_|F9i9Ab
UԿP5
!O=8&,a	gA#So?@}9na=ediNH(+J4>SZRYi"D#$5ӫSq:qS'<}Bн i}a&t)h⇐Ky=-f%Tx&os[IJ%>H	FؑӁ.NF	md<ihd=ط*S+?ϰM?X_>30HHn{#Bvr?'?sDI=?fR}t%\SOk|F`#amS&rp?ͮ$-R	`K̜+al{L EP(SbgrFޢ&%/jxae%jЭjK*֥UƨYl1tzv;8 8c{{Čf5\83ŻA Zgh<6+SX1u].v3Mӳhg$erk.,Pecoaiя K7+R?FQ |0;+OX[|9B,,QF-	G-v`e4`tPY0 Kā@114qof0@ق%t&wR_7p2^1ǨV8)MQ|"ΈebYG>7Tn/[	PFN3m)rGh­<Dp1쇋DA2̋.II3-VeUSCݻuzKJgsA[u	[ٱg\B1ǐvp)[Za(JwLkhi'mꚏ(M橒H	fou
wCg6A6yd= m[LۨF	-(\BGl)n[K."Bc,O$4|eJ6Mc[U>X,n^nKreL@FN(.4l]D^DzSl>.)Ks%ިhn:&m@n{޷qƣS@I?	(JN5eIO ];1%GSG4oۂzQzi*Od<蛏a@
!\TݓX;fwbT(BKG+<xZ} ~1V!MnD̆xb:PnZ?pҮ_mڿmaxfm#jV^hRV4QE2arkae^"HjRc^-q1ʰVc	ur{Ю	q+ωR޵X=sEPmNgBp3d\1ix=>@jWZCB2C<W%w4)_ՆjZۚU\rCrxu>F[i>NޞRL1ř!/M9E4ںj#kfky9hn DY	`I{QUZ<CW#[lXCV=ȸn?a=SiYt`99|	JR;QP ^$"AR7KS)k{ qͩkV\f.$ =/9	򛾹9vC6y)ެy-t TTW?ZxjIK#C*^~BpEAA%)䑀r!D=#cxՎc le	êS<h(끪E(Ξofslo0?3G92z\ՀV
وW]Tr^;ɨ0T9ˡ_) T(&?JXW0HE:+1=\>Uw~nR.{Obǔ8<JRw%)F@]#6J5zĪ֯c԰=bQ S5IÆ*^޹q KTW2%1E%SQ"Ḅ_ez5`O§쏄r7Ln)[ß,oF{D(T~[|4vAR( Y!D((\AZDZ	I]kk11|Z{XDitd͞G2v+Luy,Tz0*ޮX:xhP#▙:h:AsX)'%Vnnbf,NHM)IM+|~sJY vx|.xnAĒD"ĂXɢ<ݛbڼ@> g7x;|&xC<BD͓m _ 7XxXOGp1@b<鮅D)NH	)ZffKwסI8hKJ=Vm͡9RP%UO)U/HǮ!J&~oȷGY&%D9>	Mi㦝<;eP[QLGQ=
@y!wYe8snJlVn)E%k,Rq=821ޭ\2LXˬ(Ls<%p5Nb&rP^z@YϹ9~^r"Ɍdܝ
yX3)CŘ;rZj5n2R-W7OZr2BGNR7$YV2)bVEȮgM=uDZC"uhwY&tWaO-(Y0tH2^fn6
m"%ʋZ{YQdhOT@U0i"0*7{5iUjP^,<(yɁ0LPRT4 Dh!L/..q8kHhfVue&|UEy(dۥ	`e#x9SDn6#k2hE!*$ϐ	*^-cbdZ&{4%9f{7"}Tdi72_F22&23|#90} FT 
ɗ9ü(ay(!/9"-tҖT.-sE\N^l~:X`6bVd6%`!rQMCRg Qb+)"U9U12+/Rn}OVъN'J?ǖShXT[W%h{2-נ(ҁ;[JeOSE8,:Qu Ց pԜ{J|+	9ElP\4zZvsI/ 3#ؠ<vm#}0OcFaD
*4U`0/Fa&pt't䂰IPwVz	Ȁ{n)Gg1WA>\R	D@k(Y=`?K٭TjˉM2@ہd*'+mk]n'ۭ@dԹ:no7V`JiĎl fǹqUs 3;@9aM,*W Ё-+jSdR2n0N\E D}WQu׍}*q̢d2~8ރF:rao=~=M`2Ýk0Sn

+GQh<"̐ӀARiv=:Fsqqk)~Qvg9r^jN	}-aF;I=m{B	;em@PP8ٶcn%Yig#Ӆ1}De	sVE_%m2ܡ䬒uJ%.aٛCTLT$0JɤvsVXm4PzDg≙TM@P;5CV8ʷHPfT[BhuzF+f5˱VMNԨ	rҗfoGAEBT^U-[yaѯ]]{ٲ~!u2U*+K8RMF_Ú/*d6iQ9$Mt9`^I*p6A($	̆#	p965V@,
$GJ!I>~&cYd<OI8~I`Gi6x_zC"NX'_`33}iv~l8y']!0"'kfdCqEU&hOQRw'|OE6%1&uҜp*dq	|Wd^-ͥjHԷWzv]ӽD_[oq  Jatxkw:;B''=6]n&-ry怰jIiNlˆ!|h@͌fFRE
k]l/WzأǕO	ja_yx0o\p8QOoWFV@@ch4gh$-"=b5fsP ߾[[=M(uwLCCsZo@ozj(fCg >RqD:Q@W 0st1ERUӫE;.i%ڃSэZUtK-9-֭ZyY-R=8T;<8AIZΚ&99e3 SE380%zYv#qs>MC]GLIg.-Vq2!%$X0#T;!#e"d飌f1\	uQpliQE-le|ժHv@/\(G|	gܰ$3(`;Gt	
q9|b&Jɸ(lpEp&%9	Z"pLNx6[x9̴8scH#akܔ!S 	w4CR"R9ZbK5f>7dsjJ]83T~iCQDg3JYDCEH^Yt	#J"~{dWIOwLsxې* fm|g,xڟ|J$+ Kel.c0rh4ܰ%QO's(<u,301_Nu-09im]boVtm{]7E-&<Cث"LU7Lvw"Ǆ-cT-8ɚ*:EeqqP@<ܮ#[c'2ۍ[1lx,V'agWE!	>B!WG,1 VD%MU\϶F=N9,Ta#DUeI'KD'M@q̽1GFGsL߲#B:ǠOIIB:E~	)H;Aj*zik:Cw
:B;Eo
Lq}>BJ2E!X)y?$= `r#88
`|%|'lo)\\˜^e#TAJ4fj\dq-_(zWc[+1OsMZI~{,˝VA>W|lA8^߫$3*܄(`w؆zX_qk~5[14G'Rh\KtvZ~\ٓx`yj`8Tyve'#5i{HhK+zϩE!b>55agñ=JG7<2](vo0T=rGؾ!쳰ÉNu:Ep1[ y-\/wƭ0m&Du[3'ť%:2e,
c:t;je%@ZhUj1ro|*T^sEPss.
Hb2ԀC)uaGq%ϏY2<aN(䔣4 %6L)xaP%K
Q_>,pJRkybf˱d8q^%2lˍЉ<GwJ:@쫽@4{.2[8<W;jtVBABFzY[NVi>F:1cFf>@:MeVϋN4aަk.տDؾ"es_vGHng1Oh-˹Ƿwa}ɚ}c5κ!vh#rjiQT'ؼf7Wofa''\7R
)
I4}78)BId>*A=`)^fujUa?ovbZ L2$k?ߡ8F&MtDCMMh3Jc2׈"fSؠ:=d_nDF9:83]u<&Tǌv!#V(Y9G_aݐ^wAįWZ'pv3iPJ`Ǜ&CHNr
u<e39Nɲt\P2sP-pkGCᅿr,?~:g@)fDגъW#Gt8{or
s}o?9P"k{Tk'Ù<G*~R%Na\?+Zl~jgcIO߽^,
dʐ~zUҘ^+G:]q,	O%4Ud0y11?s}9/E؅G}oC$*ٗns/dԍNNNħY(1074#3tE4cnDbjfƯܷF(dtCdR@	8O*mR*?N)xo~qߏ适yMvdvkF
2ȰU~'
ʶŔ~Ar'yyGId$I	JlFtY{ͻ.Ut}i{=jZtiyGEuϿV7DH/b,
C]?ZuRRP^5v[s]F\O#ylKin1qF#ITvbHDk"ܽ|!kx_ ut"-{0	} months"-H6;76/-1:$y2
784# 
9%
99<#=$5$}
 xY[s8~Wh2d'd	6].]tH[gZr6GM11RltH]W ha{A>{m0p٭\sI3:Oq'u˄۞cHYXvbܳfKB]ݎic?WkP3IMMCdHG+ϕ
g2ܷa-S^	HUgdx`q]̸եgW<UONoz^S4;$c&آfGM(P8>ѨD7Բxx4]3TKgS_͈709]_xvұ6ҶO4)exmoMK!&yk}1}CnEP3iByyQVbe$t]@F$n~_GHHnBtgMo02O}@t8/"]+ kjoJK5!1# c?dnBya>	_0D?@t᳌%EG)=>{	d>~V#k0absd9΂d,Fܘ&#<S5G5MpQPWGdK Yќŉ\yinǻXy=wmTWvV;;% _RÇ@/=%Q8yicJI^O&NE#3{QYz#wʡZ9~R(5S¢rY\= 9۹x/~0.A嵀Vn>w~J?4:n:>:G~W>{95"ړ|
qfۆlFO606V?>-ՂUH礘S
-hb3[3ҮE/`9 GVa+ @@p<vdd1TUysYlDmH 7rVӖldNN+HTdO@FYDF8XYe6xe@E, 	Paqb,@aR'd BW:Ԝ|X/HzF쏻Z`$Iߩ86C1mÚ[DR2SBM#ғ~6fLc$BtnkEԾtW O9^J2 $ ډ򎽍TMTcbӥԦX,j[v0ʐOUvcse~s =ib?f#{7C[,,:==Uo;Q3B<icGQ8j,i|TRQhmsU]c+g\Ծ][#`.Hsg2YYԓ٣[٭9n.C!x!=c3E$BR-vnei9m7]%gcxĕWXTq#*oJ 4)T$\ךzD"ө՜	JxBzn9'|r;<%3QM(DJϾю{me1J;fK#ы7}RO''pGM[δz],>MīCRik~BPHo&_'턠HvHh0l7 lR ,xq~ z,A)~ m"x[d9Y|S&
KLȿP 	#x340075Up.s((J-.sIMOI-
-,+(`p[梇:SdL-740031QpI,.IE֠k)u#3kpfe̣ Y)TJ

WGI3$1/9%$1)819Dd+'=/%0_XP4d&ze% a47/m-^}~jO~:G*z1)=O)OAκ%/2 <(YyҤ_yaق]0@g8V_!ν^&j]WILIuI-N.,(GѠl2S$fx
oMH-O	K)ME5q?95q7{MMnlpZĒ"n?ˤ.} 9گxXmo6_F%yb&s`I1<4
Fcb%Sߑ-ˎ$w|9_Yj1`GK%\Z OIc~1p"/mZVX_ au0䬦D13tZ#RNh'rkZq?"4fKS.?C*%7&ni}2)L5'֬e.Okb4Bȿ*M۔|q;Ky1i>2x[[[HNp,gs|׽;v堗yFCŸcwT6dJtn+e].(g<~sűqއGӔJeX_!wЦ9IbaW@+zk~*S:EL}7OǁyBq۪)=#10@>Bx
|O0KSɼwV.YaGEI^`b9[^hzv Iv6;0!r!]%~gj*
DJBm8ph gP	:6G-`kI7'aZ7!:vJLi^3t]Up8R9W։˕2?e덮j[A	ޮtjZ+7+wlDmRdNoԜ[)gYc08AsFЇ|u/k7hZ~%  {h#f6y2哲bhWel OtA2װQfRfGA?:4'xԼٕy5m]2}S;n 印4:+nnM}+]w`NSuM6RyєQ	zL5IdA{UɶY@PF<2"iцkZ ˵+L~1=p&EOU\ RYoCjZhK^HQ^
E;ڊVme	36;e8
dQEa?Wa94*wXhMS6=Va^kF .BUG}p$;]γg1`	VS.%?&ʪx[\}B}c7/f<g/L ּxXmo6_F-gvÀ%u!I~HS[ZmߑKbчĤwǻ瞣M:C"#t+0[o#ƊTm;XtuHQ`XJdYήAxI^.M}6oXV'JXxc>YWǿR/ :E\V*s(Cy:hA!%1eґJPD
gxa!J⮟oW됧<0#Ӣ<߬ -	f *<t*gZU;k߭-7fa
LiْY2%y^bHḦp85\{9;?FvꎾDuL9z^6m5YHĒ8tn/>Ͽ *,ѾALc1ƹA?Y;>9:Nj%FL{qrlc~cg2V:Xzk!S+*GݏM2NfQ["%x:up8XQKHq=[jɂ*46ms"ZP"4/4YKvY M&c'ԒE4͒:h-fSB`h')B= h"S]M^`N-  1C[ hP=@Z*uxȯF.xL,#<5 ѯt $ x:j!c骑4Hm[E߾g;U5椭C"*`s2:Aݥ KGMTbw<VQ*߳A$ϡ~=ԁa~XXR3eF/t5

qD@j{݁:Sh^ZTmpxϋ冼I=RQ<)M6l%F7%1Ý]h4%DǅR#Q{_D-V+`5~o<KV 0GYG>'R4-Tǣ0^:_GXYS_SDF pc/=#PxĿV6Rݼ9]Qǁ{)"FR,5cI7fMvW.W7.Nc7cᑼc8fFLͱa#s`%,NV0YDprH=A
p~%2}Ԩ@T6 	oÖg*a AASMa_EOfKOǅ9XFʾ&I6kφK~o~AO<7aWgQoYOO6p3zsNziY`ixgW<[Tڛ:jМ󠒢PLdفS@I8;+"pcR	UPAp?6w	>n%q;l6x^LA8w'}/Q =Y`8f~;xWO0~_ᡊ	iMJҰ	QTyZIf;
a@(|z"={ww.g]xGls91D1<Jl'@h@gSܡ
uPI/r$0#- \EeʧW}>MٕIBżУ0k;8F!YTsVe"F}&0_O*BƳ8c[S7%?10 DL7ڒ%hznLsn{#eHu3L"B_խXZ=]Nnr[U`n0HBWp<qRE+pOSBԺ7ݩѱ+g:iv2̑,	#1=Ћ[wI>J|I0Y)3ٵsYz Jt(vU'}>h5a6AzbdλZ<8zcVmjJ̇ˆIbsҐ̆ LJQvY]F$Dν+dGq+ı+f@2 MrYoF\r5j"7/M_3$]6^į6d򠿸`hKAe4>^7Qv*P@VЅ5Uqxt!	M֑.ܛYg+ܒGΓ_)b^M$LW;ju+pP.h~FK,qJ.&i"7SHʒ&uL"_qsx+FnC%,6r'  @;xXs6P0Ї\	&G1iI20"xζ|w%`pI`ݕV{oJ.vIЈaO7=r?/,VsGx¢nK{v]tQ
; NƜvM1'$_KOcTS*?r9bwr\Se寎yög1XlK\1.#ҫ1F&mEھFt?--}הf NDO5=I}ʧ"V?>H@l
Mmg4Ed4Eetky:b @h,C0{r4gJC
R0.sE]D zP5VG(g&mc;1R-7AVvݔOJŦ%Ëڔ5p7t2')R3>GZ+3vaL,UHmsmdTߍ`.V>^.42_Tpu=qHL_1f  ,(QIƝLV;>0#Z 58>kz!!KZ*^;] B21+Z(	
ՎmAl*{>ƨF9$뿰-?44ٸӟ%:m~hXX.ښGm6MN+Z"E
= d=#IiuTr{*2hmܒ)QF}z
6ʵLB-wb
ixLMXXρ8hOFUtTL#ŵ쥊8zA\nau%ɝNIlUUXZb-nW{TU+PQˊ,\*d}̭6rtisbV+PX2eb*X@ Y6{ydDږ>#
y8]Rd@~)πe|ON6 D̢Rwh+]RMiLF_']$3wB J=\^?O:ÞLOѰ3r=[ao4H"+[KVO*
K&S.|̞ĥp>Y;v53>1J#i	ȌZPNHfDSEt1*!rTlJ롼qgbzwZkeF*
5AEo?[9&044h=cE>0	y"/D	eʓףWZCv޽C;vH<cNڨڊ8ÂDN^(1FFTߟ"+G #ZA&/%)9o@;sXS$kcs2-8=Hhd3pSL"RkxU]@}WvwQոmӦ6fċL2tfpu@Cy 9s?~08٠0q>$DQFn`Dp_|~<.>\ǃhJP5"R+\ .͂#
}	-u&BtY!0QBQkW$h@hVQ;tUHel=B=˲z,	+X3웢u<fW()Qj&ΉY־(q(6HCH<ip]:sp'!1%n	/3E"ξ<v;ѡwI;!nRн"Z1Ilϸw:Aօ:ɭ7t??ocodۅT~z3wd[QX~%6SN9ĺJfz͎~GZ&MvIʆ{	cp+27N/Wv	k+P%7*,dzy_/K<Ve*G
+gjr76NQl	edɴ,kERO[65 /slUxϻwCI  HLxSQk"1~_1'B{WZZؖ8%]gw1	Y{R7Yzj)2߯laH9:+RQ)tk\V$(JpM
EcKCQ)uL**<TJU:%i4$IjV)}J0ViS!]&@RK*\wM߲9v@j*_k܃FY?:3甾ތN~>dx4)ϩ=&iLj&B --zy(hH*璘[?p hQoM1]1\ ߫z wwޝmO<gAX88PCڼk\]@(!&3AZãÑ/<P8wᐩ m^;7j_QxSo0_q"UZU{WijS׮]J#oMHMg e| twGO<o*pLLbc2;+ԵєQz^̰Rpn_s!:>2CjxN$RK5&\ÀFpT$QUN)Ғf2<e$RDyDgʎ'&FS,M!TС	-`gCOJ-<f7JSyoN޾;}է_~+{eUXq2膊;THznXU&zTxMJ*V9o̬`mf5 phQ[r0=jwbax-PEmy]ߕd{*7ISF&6'\MYI%t4/BV'B[i}t6)#պXmPfjZd-vx]-Yj]Vg)m'xMj0z
FAY@N14RJ}NLFt_z:K !l?z|;?oY:@h(|SӅ{/ 0W/g&֜۷x3)W:F}3]zm~Zؠ:n6+i$S-A8X_%ESOf[T-a?~;{^iNx[ϴiBĔ n	%xAk06%za0S[먉GK)>'mVnߓ6BY"YN__w+<-jօf!*$lrr>˺Q1 Lx֕!x:u}(cmT$Q^Vۚp)zFWNN;/_>2IJ18hY?HfQ( 0ǑQLOތ>6Ͻosgv>%rp+ه074_K޳|+ŊxVO0_$!M{ ʆT4B&qGDC;p6|;)9	rǋ	y⺐4rq8N!:1I#Nj94\Ҍ@`!3pR xv?Fgs ?/`Cd19{%$RJDX>4XL~1bd^'5AcQү|AzdhT"=ߛ6~Tsl
7hvhp ^4ΐgKm16#H[Y,7NdenΚJ%!]TULd&l
YUL%t>	AFyISqn`W/r+N;vR~uzhk$9V^R9|"i'Hd%W%:ZPIOhC6WHGn缥!PҢof'UdJ~ec!U5I"ƼifvrVȼUNxTϖmf-&Ԉmh|hǪ	[3V^9B F;rwʛ MNUOE=&5WE[Nhg6	IJtӎ9$t8kMS	/Bں&WB;:D}*偎Zm|L1բa}QvU!")@^N38ȓXֺ&k2L˕:{F߁=nC[?`OmF,WT>Ywh!]ϝ?!vӻoNk*0X7f+*tlfx;%uHjC[ "봺xVyoFON)WvCIlJI`53ބ6cjdf{AB\#x`.Y
}y$bӫTBe)s9?\/D)]!l+ 9%\rr$?V/{ɱ'bۮw"bf4u.%(uZ˘#.uUN}ߣ5'paĴͤshZ.>g3<ϏߞtO3,^&uosVDA*/8o߽;iO;nbq_b.jwc%TȻ)kM$A.34IF9,C2W *#z.yD}r/0&W`#wm^gz!#ꥧQ%%+~Zߣ"WG)=ʻMPgW>k9`_jb纆5<-*V@B	 Sׄ>k2 &bEsOz	Zͤ|ms-FmΥQ}5|7if~2l
j%2$lWTcαղUTcYfNHz[veK}))u234S1%b ?;ViHDGlOec6юLIG9*%$DѴWDiƳ'n>P!@IG LM|3.F?6dD?!~OJF%1ƒj7CSE|DU^U%u^eVw3IW[)0N[#ɦB ,ֲT88{!."d䒺g3:^	LFOBA<dGD>dSO2/Yˆ;9)GC':pz,ZVA
^Az/~`5fO-i Qa^e1zmV)޸,i?c=x31000PHIb0kl%~3lV}Xf,/Meh4=w唲7K_:)_: J/x31000PHI,Idh4=w唲7K_:)_:g,#]_)*ټ:{̚C`5 4Lx340031QKII-IMex6M9{wk+qIOD 
x0x    x340031QKII-IMex6M9{wk+qIODCJ4;~[M/R60 xNL+/.547323320*-N--/*H,../Js5)	 8Dx31 ԢTKsWN){U|~~ 3Τx31 ļT _uXYj>/ Iկx31 V0q\eS Zx31 2b&yU1G_hV F!x31 Ғ̜̒JUuQɿKt 3٬x340031QMH-O	K)M-,I-.+(`u*ac.͟m	V_XRZ!@Q,TԜ*Q (fox_K0) _Sq+fiMnC&]DCKۜ{~fk7(>O0,7IB
oRϿ1.h/,7U9QS^ϙ~,[5,w( ]Ri+!^R1] Ws,/T"S r?ؠLE]k8&ܙT/?,uo*Hg>hُ x4~0/m	q{*_òçK[Cs,ZzkmA<ךo-ӵoZ,kȈ}@x
Y8d#jx{K5Z'jڅY~Yۈզe9'娬i~YF\}]K]л{It1N	gBR\#s[y%p`ir#xmo0SEa$֖Vmե*b5Y}N mJQx去ߣqdYOG8 tcw\`za"HHĲ^x	\x$3D/b1cK9,aTs>RRkstQ~g!b& 0Z;@j>%4Hqh(3Z2ϞC7DaQd+1$;^HO/	wG1\/jrA=OC^sΗuOON}&"myVa=qPOvfS>|m;Q8:\vw_<VoY~KKNqHd	fy>{ ~ʹŖv%,(By5)u+su1a#J[]T.au<%K9\9zFl3%0*(2:VG}.Z uPZ0^;Q1VѤ$vmTE)3E̓sQl+~EKFZ$O6	daHs֑ԻFgaho(kzPh'%.{q̒	}F\A/sη{vEgG9|.bfc"Y1J[Rg:̸@󭦤ID[Ҫ5A%6_KGG7经76W?@K:xti5ߣ9}.?~ں@l2 ̤x31 ļT _6=rLFں	+?Fo} x31 2b~^O;W7Kl[qK, x31 ĒD̼t3g> }ER	sԜ"
^Iφ((-NLO.I,)fhif§r.9u$3'a}viƶ o<;xθqޅֿTq+1ODV ?%xRL0rlVf|Myr\\¤&x 
U-~D-h*x31 ļT _51^U/<d 3x31 2b/:DOzt x31 ĒD̼tf$[}3˼"-L2Rs
Rg?+|{G.? '=81=5$AG{ښ=5^DA̜̒JO$Ҿ{0ٽ R>)xθqlK8WY]YaQ+ nxq'v7 Txti5$MFJ!7LhW Ux31 ļT _4Emyaݟ (yx31 2b#dվ;.+"}J  Wx31 ĒD̼tޠs.?uݛ̣f^Ԝ"
^Iφ((-NLO.I,)fhif§r.9u$3'a}viƶ >x ?α`Ɏ<=Аϑ2BnMx|E="8 44_x զpn">thx31 ļT _3Do>	m{kxMZt+ bx31 2b/'S'qwڦɨ 
:x31 ĒD̼t-ȱsv|	XUFjNAjCgxpHgC'$3ho][]K:UTYRɰDv>4cz f(;axθqH<׮ݸeq;Ѩ b!Kx\<L'2ovckY# 	%Ix 
ݣTe	մG9ؑhäx31 ļT _ΖxAS;<x31 2bG^wThj5aA͊5 [jxccP%^sW9B%u{3 xβeBǤ=YT7@(p I"x ?³s	$jh&ؤx31 ļT _yexJ\mw._* Ex31 2bC|/M>*<;I~ -CxccP%siu=]խ UoxβeBHPkfa	։{n1 DxWQo0~WxUS=v[W@n
y($ıF˦y ľ;|1[fFBoAf
@w|~Նa&rc7d	~JIJeL d"UGOnH@s$-q~g _pFPhc"O&@$SM#h~5@-|{Rdi΢<&w)sC6+6AA|RKKrȼ,♋P!	D*ZT]s9]^WsC1a5h^<"CO
tHPA<"65kXKRPK}*.ĵ	d4k5CL0`Crv1GI.y[G(îҝ^oObq4+*|A7p0xf=[]NntF~ALoYC^LkܾeKc +.pgwɤ?{o]Q.5~V7+7{&c}raǨfAQyWVNpVAi BbV2B$i)djK?)MǘuZ.Vڨ${W"=5>Z5VXyZo<S58ko*4ElI7M1޺T^+"\m0mÝn6SEIȖVuroy׏j4^4?~.c㪎nk"1kk?ND>OVY!ܻW6N'-G9uw߬P;"mXζZ-_>4Q<ɽ-N{O?16a?8lH8Z:x5 Tp^Kf2e/bzk0x6 apvF=Tf1ualFND>b`"̈́h7|x[źuCBAFAi^f>VRP3ӫPRP A0x[:uFFf=[Y&[1ɳONd 	Xx31 ļT _oE}Q_=Ȼƪ.6 +x31 2b59_|I|S/Mӭ E[x31 ĒD̼t:,қ7NJ\_	XUFjNAjCgxpHgC'$3ho][]K:UTYRɰsiu=]խ /:Dx340075UpI,IM,KHKI-+(`bp{6O=>Cde'B_u_ ~;kU-@e'Al>Evw]>na&@P\RX^nTY/f/( ?N)x a:|f#VA׀h`x31 ļT _ww=s
'98sZG gx31 2b"d'?,tË+lOGx31 ĒD̼tv9ᾧ3g<q{&`U9Eѳ>~#OQPZ\XR̠vmOw/]r"C TQIfNfI%ΥEVHw}8T
  <X0xθqb{$N,z~F }cx[kC;?oSf`.ѡ{sf 1x z]ƾ +/17 19U(1/=u|y]k.T м̒׊Ԃ<xrNbqsHiH~XbNdoFlV
%Ey铝J'KOnb3QRH,*JR j0	E%Ey
ѱ`2l%%y%0ڸ&cwĮĢt9p*M4f9B5 jZk%=\\\ Jx340031QK,L/Jeyz?i'&@WVP)Ʀ$"fyʒ5!'ge2|{箐fM,_U[_ZUз쯛-!i3&cS6N^27aI-ZXdҩ6 19;1=blpov73δ.=d_!%%yey/&/9dФuER|x0̻~4=æ3y8-BîSo
o:`^)zݶG ,*x340031QI,K*cP4x՞7sw?
T  hxV]o0}ﯰP'M24vҺV*U*2ؙv&Ec{Z=䞓v|H@gL8Cxs2.%R@X)A=~c&aL@PL$1	QUfr.#jDL}ĽK+/$Q/dMFjZ\9(vw;6`/e8C4/t0-j=4,ܐ_9He,L\@ƅA)0IBa.0Ega|$pj P]"&w)B DpO*,Ԡ *,8w kKNu`c]uZ{r|s:8vzcKSR>0wٝ2R焪PC$AhnS:tl[HUu*!	.^ŃpWu3)|8agIIG6{f@|O{w~NATՄ\vJďDk?f;p+u=/KQ]ZATzНv{yk{MFTKD;)Be5l)tDI6B`6D֚AAlQݜZPӛؘ(V92}c,(DwL4%~OaBhkѪEXah" S4IAӢx340031QK,L/Jeyz?i'U.٩Ei9哪xDN2{52cPUũEzYyZ^֧R<&~N+Ta
8]zuOf0Mlpw{o.HLNLO-[/ܛM3-mKpE<61 dWlU4
l9nD +D$D75 %V|H*/Ҝy׏g}ߞs3Eb[E߹CT9ve XpUxz-W \d#=#3ǸPtO 0߇ -o6x̺uL^C/bgx[ͺ	 
|x{u#fY# 2Hx{zuIrܜ78 Ux31 ļT _K9v}c{@Yw *Ox31 2blʯs&3(
iD ?x31 ĒD̼t_iaҜQ=d#'ot6*#5 !zgyozrҳ!
JSKKt7Zڮ\KNdh**,dRܹu	V e:exθqBȿ#7-TΛw*E䲉S߇ nxqC&6v>{ .	Tx31 ļT __՛R4%<-R	wz x31 1(wm,/)T*x Kx31 2bpɝ*gXok}¼1 x31 Ғ̜̒J5SWsߕ[x340031QMH-O	K)M-,I-.+(``k՟m7;<m	V_XRZ!@Q,TԜ*Q )goxû}{&ǰ-  8ex ?³s	$jh&Ux ?³s	$jh&xti5ՍώWǳHXtщ2 !x31 ļT _ʪb,.y^ ]x31 2bm9GOoR~;'xmD0 NVx31 ĒD̼tbWxQwٿUe1D~V?W?]\@Nz6DAiqbzjpIbI1FK۵5{>ݕktɉPE%9%{X;n_Y#aP* x =*x340075UpI,IM,KHKI-+(`𪜐.âR-<:!:}łjVUYZTO??.]R{ru[DM@($5KcөJ-1^_Pg Jw4x9q\L'2oVf`>fZ 	Wx b,&$9pw?ܕQh2x31 ļT _ª$+r&Iߙ I(x31 2biI93siaXx31 ĒD̼t]OTKJeenzXE	XUFjNAjCgxpHgC'$3ho][]K:UTYRɰsiu=]խ N<WxθqBH2Gw~b+l8E m3x{0mfs#N +.xti5UdM+.XOn x31 ļT _v]7' px31 2b|<t(T(k+ x31 ĒD̼tC:M=1CKGY+.y&`U9Eѳ>~#OQPZ\XR̠vmOw/]r"C TQIfNfI%ΥEVHw}8T
 <.-xθqBȃuw($ܓѽ8;-ue x[(mV"Zjl eCxti5PYgXjɹ2 i¤x31 ļT _.kr|O*}m@= ?Ux31 2bΝ<|cZgbq7aV z?x31 ĒD̼tFRm^W^z㥌nj	XUFjNAjCgxpHgC'$3ho][]K:UTYRɠrbӾ[m1z;O #;	x340075UpI,IM,KHKI-+(`xy$ӟ-99eBt +;yk^լj+,4/,81=0:Oؾ&@P\RX^qĉWYoz ]Mxθqb/uO*zx7C|A xqBZbNq5䉌\&WN|A`ɜu&rF6ok qUx8)}C
v&ɶOɚ>26ɇم'}s*a&[&ьũ9iVVU&aTج)ƫ䢮3WٔQawT2RSRl7V/b۪yrvL
JE@%y%yɩީ
%
%%
V
vvvJ\
PPPW_!$1)jB6И̜Tn%= q+I+*;Nt>l:ļ"Ԝ"Ҧ
RԢkZz9IyiE%@@B/?(W}mk':yK$灜n t42꡶v) :*{x>;uLitD'Nk& .x8 k}65V`;am531dU'310K?Հ~T&]8pdn1$xQN0+j{VlEmٛJ<"ٙۅ=X!<R!9><?nxZY)
j.*"w.+G{mŻ31霬`d;XoX.w)ؗZq4UT*ָOISS"-
fp25Ly0Si\aI4i%$5i_CchAGq󮣧pxl`!Nyue\dX]:c£gV8|Qx ¾o<CRgh^x31 ļT _MYo-?}fߡx31 2b{)'WIwvtU)oZ Dx XB٠;o槐l"cx! >_P}gYskӳJxhP#▙:h:AsX)'%Vnnh9Qn, 	nxO Z12ӣcnCqu-*lhGxKl3L%oejs֓h7&x31 ļT _[C"\sf'] ġx31 2bYW+N}(ꞎ'-ڮx31 ĒD̼t{)Ob
g-ȸSԜ"
^Iφ((-NLO.I,)fx!R9^#;'Z;$ϹCddT2شEyvN0qS  :x340075UpI,IM,KHKI-+(`0y*hmU_{!:}łjVUYZTÆ{3踜yZl!ͧt)cL P(.)J,IMdxʸO@«mM  \Hnnxx,4fhF[Ԝ4+݌*0*l֔aUqrQQPיܫlʨ0YKVn;\*)E
wlm<Neb{L{&:yK$)dVZ)(@ީjlnwe s/2ex*|Ux=VVEnqWWլғyلD:v	Y|9,/,:]]>XҏO旜<xZц7RHn)Yx{mn~8- e	:&xuQO0+n qug
$25cbB;pҥe1wK}Ҿޯ瞞Jw{4t"JDyoqg5kBjɍ|P{ $gN!k4g1p E+̕A(K^	bpTmŠ`Dބ/8Bǿ	3K|+˴E!	qu~"wٱ+zed2:fg7-)hlƾ4*.+G%y|{Mk/aWo_ZWqL4v$lYT]ڰ]g%߂ADhL-59sYmN\N}\[2?Wvo%V#ں\||佉~y#
qoAx{qeY0/x .18P ghsx31 ļT _j:ݸwZoW=  x31 2b~n}榚u Џ`x31 ĒD̼t'=ض4.ϱ<\1V䷂	XUFjNAjCgxpHgC'$3aO\J2s2K*TNlzˢ<FO;c'8)  :OxθqBȤnuBAkm$k[ne lx;2C&6v 'tx 7bYF/ Uhx31 ļT _CwzѢԵo ym }x31 2b9+.Uwc߾&ј Nܮx31 ĒD̼t6wo}oD?YjVSZ=Y<7\=Rtq9ŉ%%/D:gkd{~Sk9a̜̒J޲h#ӎ 	&~
 "=Vxθqb+KVXIj~H_\/ 
#x; 
	l#Q>oPo@v6VePrrX*!:ƙKxysCZE͜fۜ|0|љ vd`x! A?ZP#0vkx  ¸fg,p(Jhrx31 ļT _\l:'!i <x31 2b#bξ쫘a%E%G !x31 ĒD̼tןL{cŏ]o,1a	XUFjNAjCgxpHgC'$3aO\J2s2K*TNlzˢ<FO;c'8)  />@nxti5mKԶX(щ2 x31 ļT _ٞ	a?Vݔ, x31 2b"R|"j \`xcc!BsFvOG?vHs fx 0tŭt6j蕝nSOhx31 ļT _vN1mԝet`; ؀x31 2b:Cˏ}~x|7W  ʌ߮x31 ĒD̼tsSgZPMYԜ"
^Iφ((-NLO.I,)fx!R9^#;'Z;$ϹCddT2شEyvN0qS  J9xθqb'r%w< lKx[us"/̙ "Xpxti54yɻ|<\\rDf* ax31 ļT _𕋵?:v	gyLG, ݵyx31 2bFy'-ֻ,ߓ dx31 ĒD̼t+bT]{6C	XUFjNAjCgxpHgC'$3aO\J2s2K*TNlzˢ<FO;c'8)  Ó:axθqbE5&}<NZ|NV9 Ox! 
	[>{|" :	Vx;lndv	Il$4A	I9nf x 젇ωW_K9aũ
hx31 ļT _{Fxfq}i) wx31 2b͟
F^хOX Xx31 ĒD̼t#;ؕs~l\r*#5 !zgyozrҳ!
JSKK^uΰs.PE%9%*'6{eFAL 3;	x BV^1RI.<x[usC7BYЛyC͸cF?{gLVL xx WfV)T$OI^hx31 ļT _,w="m\ 4Px31 2bΕҽz'65 ˗ox31 ĒD̼t>O"90f:Ԝ"
^Iφ((-NLO.I,)fx!R9^#;'Z;$ϹCddT2شEyvN0qS  N;Ekx ƕKJP%(x! 
	$n;ع?+:8bx;l~©Y6ebܜ˦Ŷy.0 "	x [qp۞Poabh}x31 ļT _GNKo+MzoW	cr& x31 2bM&)'o/T2*-¨ nx31 ĒD̼tISs|8K[nW?lVSZ=Y<7\=Rtq9ŉ%%/D:gkd{~Sk9a̜̒J޲h#ӎ 	&~
 w9lx340075UpI,IM,KHKI-+(`xy$ӟ-99eBt +;yk^լj+,4/,81=0:Oؾ&@P\RX^^ٺӉV@&*/ PML=xti59NgL.,;U !x31 ļT _[M37Opg/b9ٳn x31 2bOUjţi|rմ{ ,x31 ĒD̼t!3;~w	w1H)H-blĒb"u35s~=?C0TQIfNfI%ʉM^oYiGzg? </x3 ~ 9 Ir^u;-Yf2qԥc :*MgiC{e-#"Bx ֤ɑG,ݟ2Ox 7L1~
ís/Dhx31 ļT _^[_^:m x31 2b8}˞<Zَҙ ku0xccP%z(orG_x༷ / x  tiɜԱb
*xaKgaB&LEE'UV),ֵKI
H,../JU|_PVdrbjJ:
peũE:
M{r3 [&zxti5ZZ"&0݈A{ ͋\x31 ļT _1dmyrݒx31 2bWog[dN:-{gg_ =xccP%z(orG_x༷ /7x --G8coC4"hx31 ļT _>K-*Eӏ^{ -x31 2bR^h[9}V>I¹3Z fhxcc!rtR~8)kw(]k11G	 onx*|UxLMlKH?9 ix K&^j lh@x31 ļT _>;-,_"b4wݹwk kx31 2bWL+x|,Eo85 %
xcc!rtR~8)kw(]k11G	 oDx `v!:6uڱ0ēhx31 ļT _!۪fx]
R૧ ׷ѡx31 2bӹ7ਏ7` y
%uxcc!Rt=i/MfyYdJr޽qb ,x! 쁏DƮf\U29('xXmo6_A$e}dR8Ɋ1l:\dR#^#iz݀@`:sw4]K)e@nsx?z8T?dP{Nh>b.ev\8Kb"`O>&Gmeӹp@!I4Ą*EWdoYQd59&#'m?Ar|BF]MAqw5`|5|YOz`Pe15؂fR-`4M&]bIsYCɥVą}	BXK.6&zP&3aԪ<_Vd`&rP*(j9qfq)`*f	7!'ϔ!F6\xp@
5.,hI{<)2Q5k\6Y@)]@GIU\ASE,4NJj¨]ʭ>J/f޶š12;23%&sW{I`yx)hc~,J&4B%MמY`^z1C03MOY뱆+@bL(
crzJF㭦5a԰	PqTaS{Rj2䫜e*P\	kh+0BA3R-mxב֚KcW(ב:'$yt~7vuЕ}G9^M׿r1c\KC)6ղ3rVL5|v6t3ԉ&b[HdƁd,L"b'7;2#ҿ%SƧL_(~g 3K<쪁L{Qzz\M?NۈwlgrdY`M^~@F'10/_o\3c޵JګŞ+fZa	f!-p9|&x1$=C7_ʢýeJNXFf)r+ʏ~{RZFmoBֺ	grHC4}j<9FoQ]bXtiax[4~o۪ztp}in43B_bwzvtF~8GK	xA.ďwK&	58Y?!M7yTi)||><'"+Dy6N6w~-3Ӡ={MwqSkK7g_>=f+΄KwNcq'P&2OBWkb="jji#ZK`x>U[|Bdl~xүa>  C$xti5}e-v-v}KW |x31 ļT _5kot)sk x31 2b·v29_)nd˽3F#xcc!Rt=i/MfyYdJr޽qb ,0xi
gȚCقb4qdd x31 ļT _ӵNO,"[&us x31 2bx'Vo2 (/xcc!r.i˷w'~819J a"x*|UxC	%햵BlS'w
yws/ $xVoTUY$͖4_ۣ)MBE	#m&S4P(8Ycǡi/Tby!
o8"{s9w J\ăW})33.\{+d
]BI:L1+n0(Vӡ ԳHʊZZ ^0c^T4AuzKK6jna̶zaɶdy!lؐkv\CiȼCB;諃|:4m9cM[Z;#
f.KbbϨIT"{E 5ITN{2ݮH">u/9_/	jTi/T6!n\gX>9\\TMtr+jt'<v.	eG`Z탳	%jI9K	*>>{B^$8$K+.|"8QiX=a="yc[V}!*4>|baCV~95ޭ4
ʖnln@&,ODzAeQa2_o)T|#}Dم=C1`dX0˻W,*'wxҹX!Zb2)]g.5@^oNd=Υ\*ؾ~r{~7I"6ERO^/#I6r%T`"gJBI'	'JB\|;&gzewEfJNP̔hS'35Wm"@𞿁aj%J@v8
en{ :mVlIeXy0Bn$ EDZ)XS@8KIdUZ+f{Its8w9ZUHDy~Lu"ƻwk[!|N友zy'L<>qB	X9'U^wqXnӒr*1uS^"]S18:a`Rվ"
_&ǧLi1Jgm:5gAF+w7ZPY0Jl	HC7xЌ44dZM']?VΟKQw4:XⶅRD#eBty\u2x_kPIR?6MSH޶If݆Pvv4sMGs:;L!ҏC+ٝIY]^{s<sq>?νKTtXL:_+Kꢄ(z>ri\	"YOEz6ӟb=US0dt2pѰ,FMvgs &Q2\}>G֞^y`XFh-_%|{(q貴oHB,>3"]!F[3$κ߳}(γ jd`vS]'\M05<5AvFY-v9{
 ٸ~<qaD/5|2>X.XZVn`z^wG(:PR%|ǖG]1XrV
#B{9; Q-!x ([J>XR7FNA>I0/-ܤխ,*COS`OEj7E>9[|']: Qxti5wg~53K	6#ifW x31 ļT _iZO33smd]q
 ׇx31 2bp۠CV]Xd;.b Oxcc!r.i˷w'~819J a~x VdZⷙw^./ƻNAhx31 ļT _|'JҖ{nʶ4  x31 2b:f=n@E"5 \~xcc!"|798_t?-;UOOQ ,x*|Ux.
n޲Cǯ	 &%x_`vĤ'T|׌}* 6z^BJbIBZ~i^bcL6U_$  =x 'N2^g=bԯLh>\x31 ļT _	wﯽ|K^qͽV Fx31 2b2c|f5C" kx31 ĒD̼tISs|8K[nW?lVSZ=Y<7\=Rtq9ŉ%%"g}#CE73زX4TQIfNfI%CŲb?8,:v53ML k8xO k}65V`;am531dU) VossJ?3[͑310K?Հ~T&]8pd'H!,xa0]{'sAeF,aBړ6	0N<[TSTZ$#X.%) <(Vi}@Ya,|))((`7WPz.~E ;*jqxݫ=sc( /xti5x^CZ[UW|bCW* Cx31 ļT _Vi~qA |Vx31 2b|^WvuD~Ͳ 
xccP%RX;9˳έ]yML Fxti5WaslwT[:uW ։ x31 ļT _	n-5svg]O 2ġx31 2b]r`rT͊ݲ +xcc!bfClLn sx: LiD gͷ+`C o[C#q@X"ABixWKoWVCkNB^vcbO1$(`'`!={=cfEj9ݶjmE.RTBMyٞNK*uVswܧ?/|x@l`,aGwl\x &u\2Rt<ɤte.\drB^ތ4BL^1F)g˸yBHI2i&?gi<*v4J:iỉ_V8#bGQ׮F50)XqCWVUJuӡ+0gSaordo;Y*f{j	%N""  g_wَ{t2ԓױZEs(H*Dϗ1Ivo6jcXZR
^^8L5pz4j.}j)LE)WŢmmTtڢ{$3l.
a'ROq 7Ì1y;iB%qI-?}ؿ6.8Kzהt
;y·-r9f130Wl&BE:cڠ	bI~#
XjT	<9.Io(/+w]GI؜|hӑT(:5 5}fgKLAE_+Z#ȣJje{`kWaG+U
:YVM9_Tq<԰c6c!Qx|1ٵ*F%K·9DQWd{
X0K\i765UV["w;۵X3mώT[Ovk/Y&@4*vJEv=RwChnL.M_Җc`)TRs
#ʆQ.*o5}q]B ãJJLäЂ1
_?	_t nu-X(m<+yU~?5&fዡa|8HcXkYӯ!FZoP<ňܹZI\$#osG"mcJn#KXOI{I~zH EK~((ĵwQ^ꗉ]nn[;emQ4]mHg{lм	ۣ15764&idՔDL|4rMiek]ipZ(uXSk{MY1<?~YUcs,D5G^_hCQ^H].Qh`C̎[ﬔ-mS Gߑ-=hɶt]RAp]w?ݯ+8&|eL|dyp(g䂅^(O|*}x4/|.|Rϣ/_1IJg>P'%pζBgGq_Px] QPI<
$date("Y-m-d G:i:s"));
O<1
-` 2Vp$]O=('9+!8lxkfV&֒JɊ"#x'(r+*ddڥdg$de&diL(#ūV\9YSt>)S,@M,HE6ũ2$5 '$ly:
d>$PTCSsҬ<<<\C]CC\}|C\!~W:$孹V!9$9CAõ"9 ]A%ur9&	;嗤&(%U+TG@%sS5+悻M4rrثgEg `0ّK{9I~hɉ?p *$$Ve$"b5TZRZ79OX
(z9vPC !%:ydc鸂fr|i#eܮ\U h+
xi2T8=`ӛWt2c 3Yx31 ļT _.N^s˶v$߹ `x31 2b~ωhH:Nv} xcc!rUfʒgfue<Z71G	 tYgx*|Uxȥ?J)iv\y9 jx[mw_W)(m!v"+Oc)KsrlJʂc5.XvAon0o;ΰx[LQ/~r|yozSrkO#+"{[[1ski{S^|hE{'ƾMD'زˏa0q	<O:v&~ty?J؞EatNk7Fwr/mm!?}~8̒s{<t؋a!
h{cƤ
YahD2CƢE}tq!xwfَ.1@||_oeϳ%fqIҧyGabj|r1}mC#MKxX2W5*HXU!0vX\B{k]-)ŏ%ݟrw	/wK>m$C%
Y$V28,ѯJQ%Ocn$s}]\NidNQ0tr,o.Jkǅ(4
̓t\UhӲ`дV83 Sih`{^,ioݶn]¤i@ϲ̩Wsi`A$T |Zq-\9>-fߚ~7ӼUcggaon6t˗@W>?X([ؒ-ƊVAnk~Mć
}5'y(UbxMP*jӢQi5,ʖrp'UB(%xTmwTc@49#1jԱX"yMWr,C/p
%Ms7" "zr4UA-.S` ];r}y"mM}Z!4䨅&"%}XQ38(#AEҒYٯ] Տɗ6ɫZ܍ON_cr!붷]rtHQ۶7Eљ5o|
h6,[	9\ύfz<#( Ho97	cQk~XxOY&h4C?	zђ}B\cRG4N;:3@PG:z#ۓ1"K)~sA SOdXQM>v:#Vž{:ΙfƗkg O,Y5r8A.ˬGԶ<+ԹeY5b'ZyKrqC&|O	W,:c`ۅn[g4ȥ[e,)r,d9/Ye׸YT3V>/"Hlٳna/=xƞDk2H.8XPiF)u7	nqaKḛah:eOt|}#hCg]t#gsb:tOwT&'iNhM 	4ż~GX/j3^NmK؊ړ[	z9t)_$CBn_nB7:lb>c)"{UJ~w\kf/x$W+$Y
tyg5
N:7c QFSNbo;Z9`Y&Il1IثWn3tm[S$R8UgƇް\R( BVV"%|TNuU
|4zn3$ETFAIYoCo([2fw>ݢ?Pd됤?;c8_Ҍћ		XaoE{meI|9'A8Jl4BQکPGn|4N,{o%KŮUL.ێ&ym\1Scr ]?+"mEX|^faUb(rh\UlH5	~y,}1П<
7* &- w8fKGض[*prD4< )D2b\Ɋe&) ,qη*Y|Nqx6e IΦq`WcS A!@@|_`fƤ)DЇ6;
K&\Xj ]B;y)B7eT+iVjOӈL]Pp3h6K9%lvx5CFSލa[FןQ	r'@,31Kd%??gw9gr}(05Yk˴vˤV7]aBg略VZ^dM8	tmE"͚[opP딟@yLʾ̳˳4^)GÛ^П|Y5וYڋ-`PؽJX־nxS3Ƚ})DU!VVm붼MaxxqB͟Y';ql`_1Mo&FVmy'Lp)|h;yv^bObǢJMt&/a|OcrNd6+!vu?}Guk^RqSDO+49Vb.'h#i[?W4|+R6H )\Ͽ@<vwN.9YEhqOvSS*Q[Ȅj+,:N19W1}r^P>P|K^dqrP+?N~o<v{8&/WћLaX&۫L~hl2}sId;
漛 h]Dx͕OlEedcu$vcxumJ9;4u'5N	JTdcn;nYpEBq@zd΄@!Uc%8!f׉kAEH]i7o|{~TwouAo~|V	m'?,=M{6:],!~tL2x"4'0k?Sw.l$7ߘJEd]b%mo(*(dRRXԤ9=jdZ¥zVUqM"N*p(ܕ/.وښVtR;@?[K%<qf!27oNK%Up]0"KvcI$V4I"ɯ#>z)bƀ]T%sWDF8m&>θ?VCq.gA$cX8ීCQ(D*c~$VeeexUwXF<܆I+u;ᕈ``'?CJ/d²HVt1p5ў&;g<HR*p#v4ܒGϟWL k!61p'<¶1OQv,yХ#iwVlb&a=qYk1B8jt	.̀!.xcc}lYep]jmw=|9;qٔn1{DSGD`o{[fM#ҹf:g̐׻9EU!T#.bE>oLq*hMׁܦПVd]UP_<SPŨdZmUQZj= 395nJ%	e<G8lO&Ѫ;]*x51&48@xkA&jƘMi}6]Mjg1mڠ=4+AJf'bwQxx {P<ԛ'AMMBԞĹ3<~6τuͥr2UĶbIyk_?2Qf#&K$>7CMպiʍ],|S0W&M"a{$Ѣ#=$Jg@qeV0|:z+?Y&h.Q\N)mn_~?cGe4zJDB;;}8x/M1.75@$MaçSE[WdUp4-BZHwT4c42@6u*<uG'9&צ:uB+Nvz+btCy?Oc'9,!|lQR2)C^JiU<,LMd\,еV5K ǴPZբXk*ލqr=ryX#T(Q
a;~mlg8>>z"~ݛqm:&t̢YԡϨv,lΫ,ÿ .HxW[lUN[^giv٥v{))r	(l`9#ۙufR!/Q1$`x3bxxK0>ilFCQ13;ݝ]-q:{
'Hdj U50ʊ6&fa/Re%M:jx_ȣڴv:&x v6BqHi|&g7ޕNSUB$.tx]k]l	'a,1c.~AYa.\=._MVqRNDL9I3[F1ijOSzZq\"kq+rtd˟EOyaeiDiAJ*`=`s6y޳E͋k*f\?9xiqli\k@mkB6/W҆^(9g%;a{*,&{S%nT3,&S|a:#z-0`Unbev?_xf}(
m~͔xde4*TV~,&I3YmtN2"P&mVEU4V6lp-#<,묤OD=:15 p,!U),W[5X_oЃ]6DGr1,%6iHz؃v_H~fCUCsbo؄ FjYEhZj'0nLx՘o֕(\AՀK̋XL>g}oM:2w}OڍZ|kCW4䃧A*"3ϣI\lx`'E h6ç鴜S]2`!`x *TUuec1W~DLf,i*Gд'<'?9YWͨceZ[;炦J|f{T<>;x6֦o{'
)clFz\խUSy|mD4jr,&y SDOf(dI=#Mq6چdȑg#c*H6cC^8Z_Uj=o0n;>NGM74r.j9E"B0Oc8yT3ٌxjcDILM&
riJr,/%*$#Y\3yrY;S}['lI"/]AnF"lg˞foOWw㽎0.q)TOq$:Gy긦Ts`;ש[wYK
-0s WX6۷:7fȜa^Q^95ϋ 9gyP6`r&7#Ŭh0kɞYQU3&ǥkC:F478]kXսWE4&Zݮ'ɶg_Dq5G}=.q?~a_L=g7\^sFC/o|kƥF|x^p`RECDYWxti5OKGig{2 (x31 ļT _KD츭X/h*W ҡx31 2bE6
ӟg[̼.qB r1;xcc!rUfʒgfue<Z71G	 tYbx ~aʟ"ڥ?zhx31 ļT _ڔ+zH*Y,  ex31 2b%wΛu{bǳ  `xcc!"xg_$W>o`X:+uͼ9J Zx*|UxANgك??;[~R ^x E6/Yh5x31 ļT _{wmҙit \x31 2bIǘ,FZt&+Excc!"xg_$W>o`X:+uͼ9J lxi[Nk	g<^0`y3 mx31 ļT _ǾV*Hlp[uߕ5x31 2bct_X+-o Chxcc!"2oϖegdt%Yȹݜ bx*|UxAN#wv}zK]xubnfxti5x5׭r2 x31 ļT _U5V{O|5Mxt fx31 2b/Sf+0V> Jxcc!"2oϖegdt%Yȹݜ (x X~jy3Ѫ̛h 1x31 ļT _#YNxos~ʏY_  y~x31 2boQ9m	 cdx31 ĒD̼tISs|8K[nW?lVSZ=Y<7\=Rtq9ŉ%%WcI>쾈u'BddT2T,+ÎsskW^: X5:-x*rUxeV4V3Ud{לuL)gN1it)w'kړqmEM\%}A3i[0sbɺCh9/<W-ddMF}
\E}\o۳s]D[t;xۗMCm2*hӻ*Qnuљi'bZ|Trˎ5M/W99)sK_516sRZn\nh``fb[_ꘗSYZWQ09ΫM~)`U8_U뤕Cv0DXgtdw<q%%uwɘ`!,J"orL3zWzjGȼOY4D<f}Ͽ%BR2Y}:am[7_}|ߴpGٕDT.id۝<SϛǉxDĽ:;{>|;9C}6̳?9]P'ҟZyѴBIz{ǈ<UC^Y!5z-I
G(9N/2sk˖Ql"B}_tw]&q*R}/\)/ ^IUm&ܚV
gx}.-5|z-N-OCqlxh.bOd=& F]xVMlEVJ4۴vƱ;vm^GBB5nqr6q(U{MwׄPw*Jz傄@8Qrj$03^b/y{{outC6.ڝEEַn+<'j*7޾8a<؋@)>x_O?0?hu-`J5SWD󛪰OMu7JWU,ܝSvdk)CObU!..hf|Q@5JU8$	51ǁВ) 2Xۖ:$db|\$(8f:,Y1NtG3!ZºzCEbm&2L=Wߖ]{o3׷Ӏ8HdQq70/Ff	9]P=59sck%@1Qᚠт,nH7qmA]b|uOIpg&ghS$+_Yp&r;Rg|9옦,Rq)[jl#*QSt!I?䓃(G|n^ku%|`*3,;KXo2cSh|Uvbu|afCc_=y> Op	Ch9eKm0_XcUx22%D2\y)Ť,|GqMX5ŕiV̲&90|KIZ +%۠lel82Gf7uE.zvZn)1GN
p;P!Z6Ә$,q[b|@ckMN@a}w/++fUBCB7HG{yy)$K|=}6haKl`41ChEWdmW64PNf,7(1L!,iuxemsYltVRq-z<>sMCݥ=>0(%+&c+qDT(eŮ3A})B"ȣ|n
vxӀ=cW`'wu5	f,N%/Zf.ߘv(#mxWCYqdep.Z)eY'^xbT5?|s}kd 1RS~ikVqhn($Ἁ/h(*;]|RX(}aF<t7+ıLvI<
#
̰A#nIWCDS-deHgTZQ!$Gvu3Z0,k6P:@Kl	1\uvBR̡v-:5Z*8?=CıTR=_1ڪt~4[BWoJ$,Jͤ.{po2\`8q<d@xxq7LfdV\ԃ,Us+T\0Xe&O.e݃Pg٬Ȯ'99N" L|Qxq>
D'L-\8-9"'qHl*	 Zx G61`-Ǒhx31 ļT _ƲwT^\2O:|" סx31 2bȞʋ9U/TY, ­ux31 ĒD̼t!3;~w	w1H)H-blĒb	B+N$v_ֺsJ2s2K**a9gyֹ+Wib =Ex Ԥ]1@61-2Vh
ޤx31 ļT _ϙU3>&~0uyvœG= x31 2bc~W?pZeI 6xcc!tQf}:KV^w}b rx*|UxC	&;l/Yos/ Llxjn$` "vMxiPҩ->/+ϳr2c Ťx31 ļT _剝Rt%
^5-txl  x31 2bi_#ޯe[6B 4!Ixcc!2s@?6ҷ)Ys8MQ aLex*|UxC	H믷:-.c>/Ocs/ T
xxjnBa̼MĒhҼx6'I  Uxti5Nki{=\|W Ͳx31 ļT _1{3_u	 ͡x31 2bפ7T{"6  ņxcc!2s@?6ҷ)Ys8MQ aLExti5'WiTeH^k%4yW P+x Nvg9P5ު>ۑhex31000P/JKOe|ubDEk*jIܼNx31000PpI-/(f`tKj>ֲͶ mqxcc!r]	犲]όY>斉9J |+xcc!~!6=;uAs yyx: tK~cߟޮ]V򙷨cSSys`u^/Ix*|Uxȥ?J)iv\y9 jTx: ?>(int)$data['count']K:9xnbS~yExti55VB>nQԟҨqy򤉯2 A>x31000P/JKOe^T^_-DlT  ^x31000PpI-/(fx1!򥄨d+Gxs zxcc!n7UlڜBNQ ?px*|UxO1C.]tLƿŒ8J$x +0ZC/{sɑhkx31000P/JKOe1tXC&!%f x31000PpI-/(f,U1#!Y[f77w {xcc!xsRowOz<1G	 DJx: tK~cߟޮ9Cɜ	p\ݑM`uFNx/)`5or d-nqZћc77q l6xi po(: intQ$=/	5&&Report schedule table does not exist')return (int)#7(QI)> $h
wx;5 Spw&"Դ̼ԔԂ13'+O\!:ydnAk]'/fRQkd}SlEsZ)dL9VC+199X!'?}BU* D(x+楨kNg[fD6(׊  ?97xG onCustomizϓ6calculateTimesReportAccessed _aVx=oCHPjA~QIhqbzSQjbvJ~y\e^ },xמ!K!94$( ع(5$53'$<55X#3DA%/?QH,*JTP)kL)֜@wd>*-l&Uq좤0YG\WNAA!5U!3EOAC '195#?'%Xsr:5f֓_+LWR@*IiE.:Kec5'#*9E7,	 eGRxk۟a*di=o4 =~Qx۟{%gUɝJқߪ}f@W/7?$CAOA]P]sV1g79 2C
8x%gĢJTĒDM+̼.j0	*y%

`m9yȺJuƨkZu)dh@RX`W	+Xm Т9^xMkqiƐ$wI|S+4Ҫ!;H+r\~wP8(YT8:8)"|Ӈ^<R	,ًch̷1L8ӁQ1̔b{d1!nP"9-?m%!ڋ3p{qpUl[g(ƾ>~`xO
!63+L+Ls,#ڪTTXA4|@%m;}#"n?8]Na	)?SxMn+&VpOYAt(
VbLlU8ЬG|ͬGćyݝD.Vdυfl*_=4N=[2xkYAQC=-(7ĩ(51;%<O#(RA%	& Gjf5'Ҕ|WSw2Fm	UhX"̼tMɓtAT馤eff-$?$09^Zlom. TS$x[9}CRv, B%x lGjZ*ix31000P/JKOeh`wYHYǷ Qx31000PpI-/(f((qEeuQ'zG  {xcc!op3swYXmܼ.xb J x*|Uxb_-'t۷=M-<$+ͱ9 %x x,ZoJ|#0ηQjh}¤x31000P/JKOexVC2a*S+WM x31000PpI-/(ft]q_OUe) \xcc!reY2R'ϻhr-ks {ax*|UxMr;#"=*DO؜Q cfxti5}<O0/ePUV2 aܤx31000P/JKOe8k;v-4:kY x31000PpI-/(fPd9z,5/л6| :xcc!bçz;ϸS05i% ڐ@?x! LT<m~'c5`u.xkϹdqɚoqHs)(((TIPIKLILIAJo|5,g'g椪(TPS`3)d!=}Idlm5N^g0y8z%`' L+WZd1hT`~TXo`P8$d5#憼
j&[N-*1V&f lsQ)xti54sџ^[(+i )x31000P/JKOePe}K	V~N( ҡx31000PpI-/(fpqoޢuEDs O~x X(xǚOП>aWl"ٹx*|UxF9',	-5xRF BDx}0{4>ҤB'.`N2M<ͿYO"e%>O<-YY+3Dd`BZi^rIf~}Uup  ӓ$mxti5ߧJR{[v3KsJ뉯2 x31000P/JKOe- iʽRw]o?kqNS $x31000PpI-/(fXdtt.GU9y]f Bxcc!Q`LWۂi+nK[61G	 Gx*|Uxg:1Ő5f4vnN(e fqLxti5М3,
̛k]b D5x31000P/JKOeHˊ+:Mգ<eg6 |סx31000PpI-/(f;3=Yn{ط'1  B!xcc!r!v=މ_٘xpSB%  &x! L5oCb"۱߳`utrx C@\<@hx31000P/JKOe(z=eBM/g:  Hx31000PpI-/(f,WTR}`׼Ƿ| #xcc!"jhG;Zzb E[	x*|Ux*oL{vM?]RF 3"xs1gU&SbA- o	axti5/|XkW *x31000P/JKOeH{͵tKf>9P5 x31000PpI-/(fhumHW+oxcc!|M	/8՟X]^ehhgb ֏x*|UxHoK5vmxHc@	 A`x a?[[RiϪ$/ՑhCӤx31000P/JKOeZ"}l]{k Ǚ͡x31000PpI-/(fHsp~oo64m82 4cxcc!rqŧ?Wosas /hx*|UxIquTW=z/ʓjsG)# @xtiuu-*G$*?+ބ2 ;x31000P/JKOew_ی-F3+$pk 1x31000PpI-/(f(ZTδ^L7* cAxcc!"ݣ4c/؋VDMQ XFx*|UxȽ=.,~s,7'p2 >Exkk`/;AHhsfI 8:x ]{jȭf܍2졑h*x31000P/JKOeXpM"Z-	Z[ +x31000PpI-/(fXAz۟Ry{. [;>xcc!pǬhLu~"'`% l4Cx*|UxHɉv1__ѦxzsG)# &xti56k	wBab,-5U Fx31000P/JKOe0-:e|VcoMϚ qx31000PpI-/(fxtEs?{9*{Bf ٸ"xcc!rFU6oZ?q|tn% ["x*|UxHH]QYE˧<ȿ9 V0zxti5;F0JHU~} x31000P/JKOeH~vƶuSd7fP̶ 8[x31000PpI-/(fz^ʛWgr q|xcc!c]*?"J?[z/?1G	 Qx! Lvn
ؒ}R:H`u}x>o"ԒTԂ x [C.b)|J/hB8x31000P/JKOeh^йǴl,Uhe x31000PpI-/(fp7f6ϔCmܙ& 
xcc!ݾÅgJʉ9J x*|Uxȉu#|Y[".u;gRF zgxti5ƚ*MSLpFvW ʭx31000P/JKOe_kNgɉBL2. ݊x31000PpI-/(fpn˟zbѮޗ  ixcc!r̭uw̅\^}% IVnx*|UxK#UvTy`sG)# 0&xۚ,o&˨LW*L{E /wx 6C6H?hx31000P/JKOe`tӿ5[?odǾ 
x31000PpI-/(f+pOq/?ؗ  
zxcc!R-p$fY3ݝ L!x*|UxY\-M+c^RF Z7x5 onINoOfStandarK#%D"w6+(O:#{ZSx 1{JXuh`2x31000P/JKOe`|ͬ?ݱ;Nh= wx31000PpI-/(f(\fiЭږTS*e|~m7 
xcc!rolu&;us9&''( C
#x*|Uxu
Rםc힃8J#{xti5נk~(h-pV*I+ݾ2 x31000P/JKOeb̦!dkWۙ׺^ .%x31000PpI-/(fXnvջ
_Sm7W (8}xcc!g2{:?\ȕ!.z6~b x! LNUp^x`uZx31 ļT _wN[dS 9.x31 2b,!"6z3 &x ~{]n$/ܑh0Ѥx31 ļT _FG׫z2*Iq Ux31 2bOQ>}߭: 'xcc!r_!*v$y9J x*|UxIYcd^ڰZ[';ϭ߹9 @Ix }&100644 .gitignore מXt<=zZ(&4~J32ZZy{737k:tjE
240000 test-env AѰD}!(Z)/EW7xiC9Yqb[f)f=_{2c 9,x fs+	mպq*x$,xiBH蓭O24)ٮuc# 8+xik˟MTsеnrs2c +xiCw*ZHmΙ{/+ (x6 Zwz&fgw
6ƑnC!Мl%;uůyDx: &H;1*JKsgT'Ȇ@܅aCBC?U#hHx }&100644 .gitignore 妍p˟K!&i';0eI37A3/VoFkm40000 test-env Ӆc0*(oLE#6x31000P/JKOeʹ%ϻLuv& x31000PpI-/(fP;?gλ&j~Eo  ^xcc!,:۬gc>?rg9J է,<x tn9D <T^\JfM$b=e(R
MqוO3y`uZSds@qeT_O"H7rBGٓ	#Ry&}G=	SE6ÌZc֟yi'100644 UserLoginAnalyzer.php ѹAqNdm!(jrx tK~cߟޮ^Uoay#,	R^̶\|gQJTh`C o[C#q@X"A_Z9Zݥ	#J'ܯM o!"
M=	SEMդqk~*2100644 UserLoginAnalyzer.php 5늁5X`8%،4Af_x;~CfMiaom6) hV$xT~?9y&KgN17jqO.YOfsFjr[jbqd=B*BI9KO>-iR\▙`YRXTX``n5FY[	23b&|T(rO"7;Mnn
 IC`?x{Y~l:B;ES&JNKLSH-(ԘQFQs9]|
V
ѱ\
PP5r5ExU2KRskUՕ&kMds)I-'=VO&SDRP,3_grk|6/tR 22'x{R?~CdI7bII,IPMQlce(dj(Vf*(%MMM6c#S#0t`ѥץkr.(f c{@{
xTnC?Gf^Bfrx:BwZO1Y\Zqfɂb'[O%v{ _Jr5%\\C\5RKRSK4\C]]\'GJk*Ysq)@AQjIiQ:$Y''N.QP,.IU՜Zw| ֦5B5x͐kqI&!&1wKJHI:%.Mszw-)fy7즓K$(<|{_,-R.x./^9kof꾩qön13LX7s}HxW k_>W1E踺k\ors[gАr%<NDq"H/8ƖEą=X#,R%]/)FSEL^>GQWyAN'ԥq%,>\opPg]&~&a#'aG ks\!}qJFi:Zb&^pde/Rʵ99kR˷#Bwk}7Nq:(W˼[d-)źMet|FqYئ[͢
G~t]=uZmj*e!SLΌwCn+Sw4x7 !Мl%;uV֨f%Θc/ P'EҷfxqW !Zx31000PHIb+֗GזQ}W$g,/Meh4=w唲7K_:)_: axk`l`7[J0ܕS,},ߦl| lRx/ &100644 .gitignore מXt<=zZ(&,g	x:L 
PQx AѰD}!(Z)E}x31 ݌TKsWN){U|~~ Zx ~NϖSiWe͑hޤx31000P/JKOeiLf{l ơx31000PpI-/(fq}qX9#;!L[
Kxcc!ҹ',ѿBƐs )@Yx*|UxK~M!{J%vcٜQ (Ox{RxRn{&0_oC/&hRWX&z1O0ve~D'3Y> `Xx bZ %hdex31000P/JKOe`<sٲ7Y5t8 ߢx31000PpI-/(f<;[&>'˯I>o 6 ./xxcc!,:#d;1G	 Ƽx*|UxȬi6+~y~eD-y8Jexti5G7)~f<ݖb-p鰉2 մ#x$ 40000 OrangeHRM c鷔ФCux31000PpI-/(fd`#&~ߌ8\fa ZpYxcc!*m~\o% )gx! Lu˨.{F[B`uB~xQwnC?BfB*{ Ofxti5'lnĝv3W Фx31000P/JKOex>=d6+7Ʈ\	 x31000PpI-/(fȾ&[jOӏ	<sA/ Xxcc!ǷZA0%-}b fx*|UxIUmrJU98J
ZExti5C"G}C@^`d2 Ȥx31000P/JKOe;HD_b-R S;x31000PpI-/(fy{[[zn˓: 7xcc!Zwʙ89
ǼQz%<1G	 ̳Ex*|UxH">rw9aMFuoN(e lj$xti53-wvb2tHey=n qx31000P/JKOepI٢]SrLv ܛx31000PpI-/(fp?}!|Eo'l?g޺ ոxcc!"18ԛb/_$k|s $x! L8>ηð?QԳ`u5x mITehex31000P/JKOe2R~4N  x31000PpI-/(fpra(2#5R+ 
xxcc!]cѷe[3L{EhLQ (x! L3,xAf
+`uDx5 ''&i	
&(H.8:++x ӠQץUaN/6;htƤx31000P/JKOeyO6u_K5ax x31000PpI-/(f_Yv5oEi@#% ~\xcc!Ĩٙkq@I}Y֛ &x*|UxANvomUkn=0啩>o Ex c_e"̽1	#fAhHx31000P/JKOepu?0H7jNG ux31000PpI-/(fHxHc_uu8.ql zxcc!VQ_9vK[}O x 	ѹAqNdmdxti5VU
_ڗy0ow2 ֣+x31000P/JKOe8Bo;>{nL= ?x31000PpI-/(f(I~|;kxy iVxcc!rpKVA9m˃ \x  )	^go.tE|ؓ=	Xbx- ttr	'1r	g?z	\/ixti5̂.^zs[a"'^r kFx31000P/JKOeX"shώi]r ٤x31000PpI-/(fXQ)bFh/wgn rxcc!|gNous ~xx9 )	^go.tE|ؓ=	S6ÌZc֟yi'	1uyx 
S<{=B8[ȔhȤx31000P/JKOe83+K{uy,γ x31000PpI-/(f^q?p)KIM;i mxcc!mz麥f51G	 d{x! F0Ao0<F]wXBlux7`fA;q (tx e[xCNuhx31000P/JKOe0ĸoW)_:X1  <x31000PpI-/(f嬓OװЫ-B[Ygxcc)$Ew)	<=01G	 tx! }Y^SB\lUx V\n/\bڐh\}x31000P/JKOexoTT@OL07  I*x31000PpI-/(f]7i;o?w3vm. 'Hxcc!px9.?OdޘTcb WVx*|UxC=YSWglwd'F ߩox/pyɶ"oh A\Qx 8\2>(lþhDx31000P/JKOex>9װ7BG};;'1  Jx31000PpI-/(fm2e>w><z μExcc!W-Iuw~뜘 r=Sx! [&fQqkӳ\ʢB4x DKFLѩv/M	mYh)x31000P/JKOe
q`_kPҢ}BܧW x31000PpI-/(f(ygFו{$zo ܷ'xcc!rI/r
M&yb {5x! ^Nܥ@dB<xx-pe!⛅H E4x ƶiFDyV)Yhnx31000P/JKOeUڕwkkǴ.A 3x31000PpI-/(fĜWe= (xcc!rz纨mm\6ؒ>g9J ο6x*|UxC=H%
?U
mC:+5l -~x3w9'l{# j7xti5/$21='kn_+2 "x31000P/JKOe`?'XLSi^Ji>x31000PpI-/(fس` 6Tk	 4(xcc!u>"/,oaԉ9J Ȫ6x*|UxC=HF(J8G\N t~xa2'JN!9%~%Ey
*%H8$&DMƥ=YA}fa7R bxti5	+=a;w|di2b*W x31000P/JKOeXᴍ'҅\Ζw) ۯޡx31000PpI-/(f_+Qѷ\kdRD Txcc!";H^Խr'YwF% ´bx*|UxC=ȣC+ڭVYRX@gN xl,xkZh!C" &xXxti5oٗg Pa_W x31000P/JKOeٓ5WZ =/x31000PpI-/(fvۑow'w iJxcc!vÁokB6阘 Xx*|UxC=H`-7#..a{d'F "xk{r\nw/8&t|H axti5mgLOd8=>ifoW Fۤx31000P/JKOeV)}{8/= [x31000PpI-/(f(zEWM/)  {eSxcc!޴˅9`:Yvb Iax*|UxC=Hͯi7ѣuFnd'F )x/p"s|fdwyJRsrKRArs"+) 	hN-d<5pL6樜|sZIpsSaF*!	Դ暼Wpk~2dX'5Al! B:Xx u^\GN|wM-ihKͤx31000P/JKOe m߭j#Ŵ]l x31000PpI-/(fy\xxRe7dN̴{x! plLxcc!Ly[T:ob GZx*|UxC=H`,?;gp/ιd'F yx*ptMv`]fnr cxti5-tr%k>`{`R7Yy (Ӥx31000P/JKOeZ뿔Gukks/;hn ߪơx31000PpI-/(fX?^E@	 *Uxcc!&k}-3E\҅>Y7klK'( cx*|UxC=Hc,ew<R=_pd'F 
	x/ QQ$Qed['26+ ed@*!J xti5K5#:>No_+e2U x31000P/JKOeb{s+s_&8 ٰx31000PpI-/(fpaY,uM9c  Yrxcc!⠣J8&( 
x! Wp-g励d Z"ax ÇpƴT@eWoh|x31000P/JKOej(T{ŇE\o= tx31000PpI-/(fe_u/:,??>/ iUxcc!m	WzuDab . x*|Ux3vRUdPmF JBxti5{$|Ｆ/a}Ɖ2 
x31000P/JKOex|ٮ?Y  )x31000PpI-/(f0qrE,"?{5 g4xcc!wIv]##ޮs B_x! 8㒱
[čL'r#x ^߰+=II	>hx31000P/JKOeoVFӑI~m x31000PpI-/(fշI[Ąm=r xcc!vҶlBߵ\¾jb :}Bx! nt9n/J@	x( ̷KMQ0yUxL6FUM'`>x xtZg蛲,&12hx31000P/JKOeQose[d	Vfm x31000PpI-/(f{cɵޥQB[2m5}  P2xcc!thU+fqW;ghWn Ë]x! spӬNPJXY̮ꆡEr!x 3syF{/qhx31000P/JKOe8[~ҹy_c~[)m0 `x31000PpI-/(f0{/{}4\_v xcc!Si5q);+8qvb O@x! QAL0'`;랳x wLQܗӑhx31000P/JKOeh\q<`wVO tx31000PpI-/(f(zմaM+5gnHL xxcc!zU,sC9J ל#x*|Ux3vZq6l_|Y
5x{ylg[n^v0Q/4192+)de+)LS0liLHpmNb.P~2uP|'ћ߇ @>|cx 7LŦؓa""<sch٤x31000P/JKOeiްeNTtKy= x31000PpI-/(f6T{IݿLd A$Vxcc!s5b\A)nW% cx*|Ux3v'1^i-;U&\M|Cw_9;Cx pĐ5Xj#q"0hUYx31000P/JKOeXճpNo%k\~zClV Ax31000PpI-/(fxpʁ&	9sK, b7xcc!1i)	fw&%;KMQ ax! t٪AxBJ_,M4xbv|ɿ'( hCHxti5a^+78U?ѯrW 
x31000P/JKOeQٕ79>4N* (x31000PpI-/(fp\+w͌2z> °:xcc!2-vz9J 
dx*|UxC	ȂsY,oeD\̤e;} /5x; >=Q ?`Jelse, rxti5x<.[Urc{vW T٤x31000P/JKOetg{EY&7u ߽qx31000PpI-/(fp<83dord5 mdxcc) {c魉r~'=1G	 Fx! tƴAp.~!OгME+x{mfj0M~;y&|6 xj|x 
&{A)61Ñhx$ 40000 OrangeHRM 5$]͒x31000PpI-/(f{h'ݐzo rxcc!9ez+Nctp9J _x! tǯo㖸ɞ'o=M0#Q
:x{m{vC6/wr~^ZfzHbRNybzWIL'$`k`Pť0Or!y~[⒢T%,Ii%955!'IN'2y9ba&WpO#(;9^qfr%6`wLN5l ӯ41&xbv?
6  FSx: &H;1*JKsgT'Ȇ@܅a3(0yדh߭x31000P/JKOek}t䷄!%&h~ x! 40000 DevOps ׽m@ԑ-6xcc!W3m99O*&f+ `_x*|UxC	HϞ&-dƎu;} ~x EI m;3.xҤ~Û<őh9x31000P/JKOeQsQZNI	*9 x31000PpI-/(fH,9%m3śEgNM8 xcc!bV$u}.Bi_&( @x! tn9D <TMaxti5?1۵ᩉ2 &x31000P/JKOehγi8}G  މܡx31000PpI-/(fKW\9qށWt5vxcc!b|Y;nJ}SsM31G	 6x& QQ?!D, 1&2%Gx ܏0tfth"x31000P/JKOeeksw&tM  x31000PpI-/(fEvjrJQ mcx31000PHI,IM,Kg-Rҽ#bqUmL2Rs
Rg?+|{G.? '=81=5$peHs$wܔ$3'bYvsg[|ՙ&& x:]xθqAeW?S_XdڌF $Gsx{q5䉌U\ _x31 ļT _Ssy.u8OYnJ 0ux31 2b{t=qȍH$M)% Ñx31 ĒD̼t<7?mr]uE&`U9Eѳ>~#OQPZ\XR`|Y;nJ}SsMUTYRPX;9˳έ]yML 5;Yx bՉvXDohlsx31 ļT _ϛ^}x6x@ewx31 2bY!_߾4I5 xcc!{Tnr:?^'C&MQ '
*x*|UxC=HٕE]^\<N =f/x{q nox31 ļT _R+U^bֱ0m}u# 7^x31 2b<zv߭Mf" v[x31 ĒD̼tg2/|Wqvs[Zw&Ue1D~V?W?]\@Nz6DAiqbzjpIbI1Ý'+3>eddT2T,+ÎsskW^: ;ixθqbN2Q>goUyq qOx! ٽ5s	Ee8&=x ri+#"]h"x31 ļT _mWo-? W&6'i3n 7x31 2bzz\YoYOxBxcc!rĳm|>9J bx b<l<|oœyEhx31 ļT _KxT?gj1ק  cx31 2b%Z%k9<ڹǿ  Щ.x31 ĒD̼tTQ͇}?lV	O*#5 !zgyozrҳ!
JSKK<YY_xA/s' UTYRPX;9˳έ]yML E)=Mx340075UpI,IM,KHKI-+(`S`YhpͳH~Rk]iNbA^Zwn5Z*,K-*Naߴ	NMxRD&@P\RX^p}{Nبwgi3n ܂K>x>!}CNͱ 9`xysC7hYQ5MB-dq3m|&+& 5x @C%4QgK3i͟h4x31 ļT _/*-  x31 2bWvoRޕήx䪬㙝 x31 ĒD̼t'w\y>y4/Ԝ"
^Iφ((-NLO.I,)fde}qc_]`TTQIfNfI%CŲb?8,:v53ML >$|x pC=Z~!5mxysCZE͜fۜ|0|љ vdLxi3)Ec^Jfzz+Z^s^61 ix31 ļT _жѺ9] λޡx31 2bݖL,8kUʭx31 ĒD̼tߌkM۪yw|&`U9Eѳ>~#OQPZ\XRpĳm|>̜̒JebqYunkUg 0e= fxθqB?ڔ"g4s7[) 4^x 03ڌcI\hx31 ļT _=&	KQړƒu  Ԩx31 2b7'&θ>e	 Ex31 ĒD̼t'%mK8bVSZ=Y<7\=Rtq9ŉ%%w/N<{̠˗J**,dXV,Y֮&_u	 g<?x pC=Z~!5Gx EbKֵy+)=hx31 ļT _7w쾰gr|:P áx31 2b){^`w[z2Qo (x31 ĒD̼t5[g޷U{yF͍*#5 !zgyozrҳ!
JSKK<YY_xA/s' UTYRPX;9˳έ]yML X<1x au쨥 b|u2#l4x>1}Ch]s6 #wxti5271)kX3:_:4m䉯2 ˮx31 ļT _*j:6U
 ֡x31 2b.ώv0
;x Vbx31 ĒD̼t=_,~yAhMSnDcVSZ=Y<7\=Rtq9ŉ%%w/N<{̠˗J**,dXV,Y֮&_u	 @Wx pC=Z~!53xti5OI<`]^lW ȋx31 ļT _VZ{yU3 &Nx31 2b.QtQ7	XyC ao<xcc!rus;ۖ>br% ϜXxS t-xF7$͓^ٽ5s	Ee8,_jpBh'	7z᳓B!'[xK JEpN@3j'F*var_dump($resulttmr[x;u%ɶbI\ĶyBB %(x5 QOO1!2!,&"gL6x ۤ
O8.\©h*x31 ļT _Ǵ'ۧuc|(c& Mx31 2b(ofN_tĲwO6~  ǝx31 ĒD̼tU%#:̜쟹⪟LUe1D~V?W?]\@Nz6DAiqbzjpIbI1Ý'+3>eJ2s2K**a9gyֹ+Wib /> pxθqBc;Tu65u) "x~;vP=L\ Q~mx fdT<k(F͑hx31 ļT _XX.tUnE x31 2b)M;ǋo?_m  x31 ĒD̼t1zޮm[~ǫ;L2Rs
Rg?+|{G.? '=81=5$ΓŉgT~2w}R	PE%9%ˊ㜳<ڕ41 e?ax pC=Z~!5x31 ļT _{Kk}f;mNux Rx31 2b{ey<B wx31 ҼĒ<.-cS՛z\7ե$$&gg3(/<c_\>I=pE2Ԝ"oδԷW4[y%yɩ@e+n.9Hi;ŉ%%g^W;m#6-7@ddT2HNq++6y.Ƨ3 [bQx340075UOM
ON-qL++(`P)NynA*S Bnjqqbz*2ueo=3ےUds  qxX}S6?9.]HPڮn[v8ǖIJCĲzAK7)/_Vބ	|`_oR~'ɔF'jSN'iُ=~JD#BEV|R ,#[zDOlR(¦ET@=MXJ=1>ܘȇpJ}5	dS_8VUTjԿqw_I813R$>DT%1N|/#"NaEk맳`qs݂%|>#32*ClJH%z|]`*?hь_ǶwEa02{:o?{ Xŭ!@ookmx#,3~epBe`	U!3wl:c	u**UR	"DkudI,q2E#~̇>~ܠ!_SOxh#dh{tt5k0
!T̝L4●(:3)"d*+FĔbD>)U1rb2l'II[K( B-os,*"Hq\K8-rŜ<1UFGN}|	I*{3n-sM-(zYJZ6yg%:ރX+Jj cX`=~r[H guմS|o:Umgk8DEI5&,2W4@N+HI4x 	D4{F;ӥt3V'rc;5~bRe4e~ k$KjyW<es;]ĒOXUe-uIV'8j	Fs/BgSRvv*1"e=t$7<UT)]7֪wguD׏-qrIS9f
/Q-lOEuK#`r,*+{ogx=S;*.I(*H?ւ
+Y֑ǥ%rqUZO{,v흔rMnAHG}4wC?Ƴ)%gf,o1j {4Z!eLm<NPfq+:u]zQ"7<#{(7Y^mF9:=s([^5C?7;Бֆ+;XhDM1?`H0@ 2ỊfAJA#jdREN켻g~ϬwWʮaN!yVpL\`!0݌u0+fW}i
K><'wǘ7J(&xL9ŗMPpgQ2Qc8GZpMKgEҚG\͵[8h&Bv(rq&i,&Y9f"o@$*B?aҫ:%(kjFgڿ3x31 <jwkn-`Ցiu (1%aEҟ^WmmQzo SI_x340075UpL/IMIOM+M-.NLO+(`x]X)~\jU'uBt9'$"+@(s3S\眓_o铯gz4x_keT$#k<-uc^viS	-KsrRV;&Tx2Eۨ2C_KmJ;MjZ\YX;*]M홢Aq)5'z4hN~QJf^bI>AEEEԞݽkgiS"!.!:.M?n6TޔܨpêC٩[>&(,y-13%B_}ǲCF*ӇFU훚\i]Ld'~,nP 7sǻo̷K~LyjWhUW0lĤs%TAjQ"9nɬBcٷ=F%><NkA_▚XUwL0-:PıyCͮZ@I%)1%ȕ,"-/z3J( WZLճm"xx)}J5n*xEs0.	]vdTiPjnf^JHsFjr[~(d[|We2jd<AVMq	T&t5[iAs|UQZ_|I}MV_\_?fNSP)H?U]/)MOqA~^1JܘξP㭭ͅOm97i*MNDV4!mwONV`Us~nANjIj
޷WRvv%=KwHz@UC'wp
|!k_1J$|{=ke1]fݶG9PH>ۗɏeUX|_SNiAE<	 ;`,"xuj0];F7X/®ųƬrwdٺ8Hwr[^O[GZF	5e?`Z`&
r}DJŃkk|_*&	G@#;yYruT
&	k(ZYF72BB[?"Ӥ,TUtK!^.|98]E%ʥ<K|/?0:1l;4G'fUJ{)}\.Qp6뉡-c-Jx[q`rNbqcrv^~yNjJzB"Ud}SSRS3RSԭ  xuPAj0{0$iCz%ګ!-%]5%lƔt/b=>&(tK4v5^uM΢]ikmJLbW͜!/sb;+hI|t@B0/ OHWpI3p>w,1> :FCђÂ7~r><
)JcɆլY&ID-E2;ܴlc.-jeɲ?@D)uS|p
~x;<yB_Pjaijq[~QHbqԢ"T<ϔ utK@:+*AQ 
*$*d+*UPUlh7Vk.  Q}9x¼yOiAzQbJ5WiD~}TbɠTBjEIj^J5F49IKAAan)EP}*R	*)d
KSKSJ*b)%EmEf+* )k
\\ *#A~kxμydk 0xiRr~nn~5WiqBqIsNbq1B'txOȜƨS(J-lŘ!`dͥ \\ E^[x{tiBGhrRhAJbD[҉9KtK"BTv"@5

*@ʚKjj HQx;tiB9F*I
\
PRYkWRY`>qėBI@Jr5X]-W- ۘxOkA9_PY襗TlTKwvWa)=4Gu k6XEcY݂?+5GM]g	Sh
mdc|~Ybqb]K(AvA>%32ɤS
>FKthF1hu!fj~?,ptLfh-MxQ>/ec<?~uZxǴis^zDqE Fo x[δi;s~^^jrIf~sN~Do)fjxKS=4&OM)}lЭVPVPX Rd2C ʓ(xej0z

t(롗RخZcplc)ݗ:M!}~M t,.p׶Yiu}pdЌkb\~cX7"=q
Lݕlͺ r7\ p#CpDsOo\KZh~!1aE LfRkZ.ӣag:YԌe+|93W+zXx[ri#rNbqs~^IQ~NNؘ'Mc4` 
x[iBs~~QJf^bI~s~^^jrIf~kQQ~ojqqbzBjEIj^JU=_Q(3/]A%%8( i5ydiptSAO(:Q44UV!:v8!\
@PU j:MLxT]O0}߯!$bFÛR4nmJmN>lY9{rR.epR"<*x|?G'TT8&Ib56uIvԿᖿ[8&~C 2wNpGY(\j_@߬$'R	`[roa:;fsXU͒lTC툃azMhzD+*&`E%ºT4'2WR?^3h2h]Of(((q+(KGnB7@03k̲!xJ[j%嵰-H.*gt[?*FM)$oi)[=jWr?gtP+NS5?C:up6x;<#9'X%ubTݴ̼Ĝ̪$GRs34krRXBIF\BiAzQbJB~B
D_d^F)OV*n6 [5-ax[δi;[bfNiQD⒢̼tӠ2xuͱ
@b"J
-lB:făr{߽fx0V¦H}Bz@qYxY4c<Պ儔A1x/3CN %'(yݞJ%/AI@x5
 {
ߣńfÎN#޽(k`$)!/4L,֥+{'&k7(ĳOn%#xuMj0:`q ҴM0]*-	?WMR-$ާy5{Ø\i[[a뼒;Udw8vZ3	\}rPxBaЎx+p; ?`Y ,_[)JDTЊe>Vֺ2^[?;<-G+MVMeIyn}$}+?%9HJ3ڀ; @?G@R(@SQ3I?iMƁ_|ox{ϴyBAjQbIf~_~[jbqfRD鉵0L$?o9ijZݼ4TgMK2K44*d+ 5*5NV`X`̚Kjj 	>])xiB<WP~NNjSbrtw$M. ,ΨULJN^(<9Q"PUPR`\\ d;x
@}-h hD¹zl(!%ZZ8;3_[zKyco,l{5TWUG6ZL4÷@T~Ɖ+Ĺkz*xtr;||g`5 t(XT&ROnQ;.3.0iC67Zk\40xa8A9/=u" >V'xqs^zDqE\ŉ\\(Je+'edir)((LVc  {Hxɸq;S@Dۉs
խ 	wDx;˼iTrNbqBPjnf^JHsFjr[~QHbqt%R% Iݴ";%"|PV$[VP_X_nͥ \\\ Z-0x{q;GpFiIJ~yT\ԔĒeaj`\
@PU jQxm
0}|)CLuq68w<[cٻB@lQuGǪszki!h%+1v4_N=2ţ\#ba^t[@^I;;Xl!b$);U4`okFoH&4#)~V@x<yLĒ3'>Pg+s&1B
Eyũ

%

z
)%ꑺ)
VVꚓSuXjj 8WZx|i\r~nn~5WiqBqIsNbq1&̘h<ى1 Exο
0A|!:(]Sz(n:8xC_=؜[bJ{aYf̫"ϣ8bB Q'g_4*fUqzG`9MT Pp"U ]N.;R|=酫,<=?}6v'sExqs^zDqE H9wx{tiBs~nANjIjĤ$d8猚HfZ\:Yя b
fx|y$ЂĔlSR2sSuTS3<S&>*M/-Ǩh5I(P QTPjp4F[E
H6Ys) A-W- j<	x<y$ЂĔT̜TԊԼbn$͉J!t:&k3*HCQ)BOgSUPR\
@PU Wi*lx|iRr~nn~5WiqBqIsNbq1B'txGȜĨ+`dͥ \\\ x340075UJK	wHMv/
-H/JLI-M-.NLO+(`J}Qۋtl:|~4Y:6I	k.29~TTs~nANjIj
6魚r+ckAAyTmn9z}Lg^)xʜ{uQ/Eg	J-.+Fq	I{z\7WBMy)KKJߦ3ﺢ^=y$:3* u@xJ1}C`sP˲m`Lq۔ew/!/}HS2&@ő^>I;JUFq=m)ohV[deT@'ge>LWX9Ry?yDSxD`iss]ɫ߉6mfsXn:DTx92Cá  O,.;/\2ux;4yOiAzQbJ5WiD~}T9܂ԒԔ!dq%I\L!bdEFV\\ &x340075UpI,IM,KHKI-+(`8{xˠ;Oqs{YىWW,ȫ_ڭfU_1PeyeEŉ98lxr^Qgb_&F BqIQbIjz%
/;\ޗjS I(x8zCf9&[?8ld rp{jxcBĽ3sNǌI_GIԲԢbļTĴ"<lL~nANjIjR qX&e߼Q>9qo.}8Hj|q33N 29IJ(@VA= 55(U]FA($5?)K./17(|gdCIRJ2nWb b`x[!rdG$X6K	\gN}}~ .xr!or_IQ SrOxɹc6;?oSf`.ѡ{rcd&̙͋ hYjYxļy쌧?Hx340075UpK+.IKNu+)qO+(`uw}u	C!T#ge9SG<w{vNZrԂԼLKׯ	s
z*@5攀U_6<_++g&cOM-.NLO10zp!nQ[^x ' (1׍]eH׋tX,x[o6+8 e)am%m.2T!u3)R
9OuźX!H1A7"e+O__)*eDrv:WL8OD˂9nS)'D^aD?ξf1IE
?W7%K
A<A@ߑ7:XP<;[|%+<>}9Ǽ&$g1$*KRu4U,lu%m(4˒5*Y<y]BÂ_8&KAJ1e'nH"d8xt]m |C9zwζ/;ѶZ\²RXbޭG?n=>ovorj}{,iMOK^BD+ɠxCA'sm("-/\dJ.Rj	6z"e[W	tE{~@:\S&yb[߉g	=6V!1}o\,nSv(l#@AN_ܷD@`
;_t#DX9rneɰƂVD]ZV0L'*%QGjMeކrr#ZnיmD%b\!0\ mI5KU
qTote/]
8{=:y7F7~w۱ٟqi({OJj@Nj#vsUb WƧ[8t]W}"lKa12g\!xNssmpڙZ2n߆qS2n0.j	۝m6ƍL8/0r&te4Vw/y/+?uWL.mqubd'eDiXo^[$e08Η^yT3jAݠ
qjº ~UOocLk׎ܸUzNkC論IǞ/ivxL?F7hZiLlԺ7fͤg7l&D{QU=#nPWDckRiRW)00LL"-qv"ܨT	`?a^ AROT/``5`&bIN
h'SfFJaN@* ҈G8pyvR^&뙄t!^4eptUOϜfZ)K7HSpRL&sr	 HLpv"G3o`P?[ۇ<G:L&4LiD7=2}8ល0aW4Hf%u@x{jFT%%)x`{Q~iBYE9=@ũE8$'j'(WZ(.)KWPɀklR@*\p`r!lȩ Pj2Dh$.l T9xVnHV%qh-$MLJںAOB-m)$.q	!p+``> +N1*Us9[ﮤڮ%PlRBu-j-MÃg'mCmo٭OB;]q%ն®jfa>BDėm^wn,b0?u.q6nmavkXŎxxAm}ǲwji6#Hˠ:2[-thuO>HiV#t-/q.w]P=,V7<7V|+M=y&Ξ9B'Zn}XQ0A^+ı-G}6
RfP0ml80e"8@͡!"Hv^Cutv\C_G-ҁHe˶49w%Z<{,P4\>f&fj)~B܄JtW!C*[?3ܓVj&|0P+K^.W~;̃J)iahǸ 'N4rYrE˃ N0Is7\VCW![PTILN#q2#`ITiD3k7_<Pg$k:QRyMVt61kt|D$MJq3.lb>IX=i	*oJF\ItkYל\ܐn0ǋ5 ىVoӏdm"]VP*g|kWTzÝKHMZБD*O=N%~;6C^A2]|"aLaيIN\}cu%aۀw'_Ad,\c9x}TNQNhM)KcnM$RЪpXذֳ[c/ [^/G70-o7sGev:>s'b3Y-YEæGtuc\n0tg5L@N{o22(^,0Y9kv ^M#R{}H1HBԧp8֑vFFCK5=<E24Roql'&1CJl:]Ad 综zc߶rH!UndkN$yz|e֑P[w*o*l;hybỬIMR8ܧYI9_JdVKE΃&Le"r0NX XoP8`	@G'F<NvޘH*Ƅ&jrs76KYMd+,ykpQ,dțۅ@M4 Ӥq+V+9JnYKۥ52W4N5%5kVüWnHE!P-vY\
ϙ[m!zkU
 A>7Nt|l?9R37O?Q&Ǡ	>_4l{h]Hx2❟Lma{1;?e:xV_oE8W;$mR7n4	5)⡢$NDPi#^8mk4B%|*`?+g$$fv97fvfw^5_݅':u|Ӷ)<tӷv_1⯿$|q٢6hO(zlqvz~)|17;ZO]@KCEI0:'Gw>kaZdgemu=Djl#YACx5X   "P;ޗ}daձzNdöáˣ1P<0u{@u5I(|r9
3MbޙCzCodͶC.a-5 \ۧOlfLGڀf̩U|wW5,S=Gsz2y!E=;ЎfP+Gl u2:NUL°-5xh2[-Ү:Nw|G޾{Gnڶ?!W
o@K9bQgX%9
EMiKMjoK)`oM-Mj^>~:KL-5'izSI(SySq()P_1wyyaƊ0S
BB
"`U_%`_þbE$7!tMNX֒yH~6~FEcP&P# )yh,U}dmzK(FAq2,	o.yC6,kC.6QJ|aq=ǏwU٫'Xډ jk(]({7*W])o$,$%X5pZE,Z2ɹ1*!xaVPR.'gi%^į	UO~nѧ-{?^/Sx`bWCx?:?̙y\K!zB4
Xu;[yDM={~y!$l`H0Pܐ褹 U	exԸvxȫ*1jXi5$*ikU%9@z0$yZ|Oz7}4Q.%'iՉȈx<0+4W9`E]?SB(q8Ҥ	JDa;9.!u䤗eWKI.LQطJ4.c-+	3
L<O<uxTn@U]ǦMQբHB(H GqJUҤ`@jqԵ##
3H\qpI:!xfqJ#~؞Xy1V[V=ӱW%ɰcf96ݰGl6mh|yeLZ5[!}!`@-pLqñ_Js)i0HA<zIaüqH# mUC~+`~Ngkj)iJW%ej(Vd}LO:y`Ҝ
-DèBo"`YT0]jx[!뒺fU1H2&ZͨCy:9&H/þx1S劂|HdinaQ/
yf7¯ލNj鍨:qm:OOG^k,~d0yWK%17Qob
X>'RK='N=>C*oO܅5_nuI%9OU®n=5=xVVRY/é8[s	̂c=dYEH1X&$ǂ0'ӽYFd{[bژr,ތPE:6DLނ|_snұxXmo"7ίp%@'mriH/!Uu!dvl]K{_lvR<3ϯ|{=߉#h"0ݐMP0ȄUmI~x_K	x%B~U{<]oӧa>G&F|`AOd!D&1_L4$k*<_tଊ1P^%;%wP(!}At$;"Ɓz"I'	V.))g4	(~&@#
Kg&Uu5J/M-3_1`·@}UkN1[2 43QbBd$\T'&>59d2DVdS159$̊`R5m @07ap"2J@~vhBX*Mbxmy~	"AQ͂{5:(KSxXq;s&pgS.s8>w"C
cѨx蒧 E4"?/.ҍ?rneX/6>Q}Z[c"ոTZyՋ1Ou\w cA0إةzmiv,tT\O	W[!P֖]Ȋ& ??c쎴(9Z"k"{Xwh*%"9
sg.$b׮MʝЍRaӸMo Mr%rg|}qqYX9O1NlZU<}ִ-=ڒVւϓ Рvw,oj
ƉPBdl^`(#ۢAT^_#;F)$.@Ja[T-*~ʌ(-=+󥆔,%1Fj~9i뻐myqe
j,	`1JӛfQăLsr>Sy:x5ׅVt {N'/Qf2Ӛo\8PډvR7|@#iqW,Ƒ*sSlЇYLY憯Pt
̨7_TP.cɫj)A`-ɼ;<xU]O0}߯HxHD0Đ:FVC[	瞶_,cq}&Ƅ
}K2m#,$$֧e!sFC::%9c
#LK;:|#rTAo:f0
:ͪ[NDGrB&BDٙQh@I!B_Yzz|.0E6d)h+^5pbg+0Hh 7/c匈楡Bk\V`Xk()I%{˔)j%9X?@9QWRveʽ},_ϊb_OFSSnZL0[Z!lНIrлP6!9Ъ0lvl=5ڣu*J*wk=o3vci}kxZοA(3/}}pIjAPjqiNO~ojqqbzJXDV!4'ǚK
Jr2+'2*Cccl,6LYv4L!
'0[Aad^9ٜY`2?+vLcc[e7EXXlYAd3sRSA!<$(.٭'rAR\XRZ[7RNQ 6xuPAn0>DJ)CD:"˻FBv`*؃ޙV$
et7<56QXth*! DѮcW#t(.BPZIbM'Mceq@GsBݨ&n+ss9ʡ_o˛Z$K:ckf?,tfYH>~m{<㗝`$i_G6z%ht?serxV_kV,Œ؊8]AMluZhn`iC,"$RVO0ϱ{Ku{T	|G4 ö6A3UϜ͕tC?x+,mhkX# }N?<	|NU]cdXy]آ</SdUuHmU;Hϱ7ў=@[ia^u]Țk[pD5,-.1pe OPrsm5uE>(b0sg)Pp{9?d("g Il*BJE@JUB~xJi[p`BS&7	t#!Cftޚ#;02WD}vLLZ$u/p"@xLb
͐H!nrzJz`]`P{i̼G/ Q{Zkx{։n:&tp^类cTMst$_FZW[M	|Xan~e}ATQGFcS>"e#@bj2l@UR=ߘobMh* :g\,gC^^Ma23|nqIͬvXFK o>--w2`֭<ɍXR!)[fu#1prms۴cZ'99")^hE]Yɫp}Hk~(VBZ_%$5PJl_|Hn_/J<TYM{xYʲ:rFz</nOABsn]HyEWɍPS3&5%5sD6hk-V/m8юaQt5G0I1QpDdɽ3mYBR'8]bviqӡoDDixti"F,n5 V1ݼХܒ
^4ksj[ 'PΡBlԣ[#M/Z4k	xͲq ?Qx $ڃ;Z]Aih=hbx31 ļT _Mm[xAgJٚ* xx31 2bZbMF.R~ jcxcc!rus;ۖ>br% Ϝxti5_g|.ȸ>cW CRx31 ļT _UF5

Hv# јx31 2bO&.on_fRj ɊJx31 ĒD̼t<Z7[Zrx	XUFjNAjCgxpHgC'$3y81s/_.O*$3'bYvsg[|ՙ&& }==ҧx340075UpI,IM,KHKI-+(`ؼjGNSqOkCde'B_u_ ~;kU-@e'cZr<NNq0N| KKR+
7Qvث Lixxq#FF71e3 	-x ZCL'nϕZX0ya(S- ysZx  P;憣".1ݬYPhUx31 ļT _sklWa4?f'G$y ?4x31 2bY;lf?D/^+7_ Fxcc!rus;ۖ>br% Ϝ@xti5E~4	j9\ǽ2 Xx31 ļT _KϸU,hsӌ cx31 2b+6]}0dشu^  x31 ĒD̼tuk{Qas&`U9Eѳ>~#OQPZ\XRpĳm|>̜̒JebqYunkUg >?xθqb^<8cx!R·W xysC7HD֋%u2O#󙬘 zjlxUKQ7"9`J#AJfD/p!"0"7*wZEZnZ];.7?T-}se#X;ӪNEvӎep⑝V.&2
/d`䘲שBPQ4\pKxT2Hk|U~|C~>ys]A#Mĳl>1$&!vǹ+OcN1g#qy٬<q\{nǫ==IĶ7}|iʆߍo옰	9cNڋ	wR_RI螡mh}b߅S\Y8`}W"L3Eo>$a'4y/-#\'!xti5^I	e'4.m x31 ļT _gUo`Yi]J'8 x31 2b޸PJMKo+ x31 ĒD̼t=&.ˇ59:wO&`U9EFiͩo+h9Oݷ2!
JSKK<YY_xA/s' UTYRPX;9˳έ]yML ->_xθqBy2Q[yO	ѹ?(%W2܏~mbd϶3K o(
xc_Lƛ13 <x aVP@@X=μCFh	x31 ļT _I[㭃v']XQ66O# |x31 2b7)j_	0Y| C /Z\xcc!rus;ۖ>br% ϜKxti5Is5)M<vLƩА2 x31 ļT _2:Q7|oxݝ9z 
ax31 2bei<yvFe3x31 ĒD̼t=xn嚶'T^r*#5 !zgyozrҳ!
JSKKμw.}gGl[n**,dXV,Y֮&_u	 ~?JxθqbcI&ɕK",dZײ #xysC7HhIQ`G?]rhż󙬘 	x[eSmC",f̲Ē͟YZ⛧1!O5R@r,*OM-(3y|y'gL,h1@mUA
B@yi(1%324X$PZSor䩲V`SM <Wx )!<q2O Mh'x31 ļT _c=5[?<ٱUExdE jx31 2b{ҩVpDUc
x31 ĒD̼t8s3i%$_	XUFjNAjQgZsۊ+GNydfLĒb3`ٶ|gJ2s2K**a9gyֹ+Wib 
4<\8xθqBH^櫛Tۏe=;?q2 ex !o{jX!/h{x31 ļT _oz^ݡ./}XpKK _x31 2be'T=[ Twxcc!rus;ۖ>br% ϜFx ޿nο\b2螑hx31 ļT _;(23C*V Qڡx31 2b}󎘊Dsʋܤ x31 ҼĒ<.-cS՛z\7ե$$&gg31yu9X>ѹ{~H)H-b6LkN}[qE=~쾕	QPZ\XRpus;ۖ>brTQIfNfI%CŲb?8,:v53ML UMxti5zv.1acqY2 x31 ļT _]5g,۔o#a-v Kڡx31 2boo}$ڻ?:X\8 Q7xƸq"-̽!?8bCC*L	 yxβeC'Hl?_.κ 4y乌 Xxti5^9dHI4><j᳉2 רMx31 ļT _7ȭvɤ?ʇ~ξ x31 2bcN\>gQ|W+ b<x gұԨZ:Ⱥxti5oY~_yȥs`xvE~2 Ҥx31 ļT _uX̌K"a';Ρx31 2bk,>y	_:F. |+x{qHyWCKޚz~S 5x [W%oNx
˽hT֤x31 ļT _[SdO5g©ff x31 2bKڶ\({A6 7x{qHӷUAze/70|^9o
 L4xθqbPsS)GF3S
Xe# 
x( 	-~%@h|HC_PA̱A037.xγ73MAC18>(rfƜ\ʓ2fM;9IaK, ^x /'+l4|nhsmx31 ļT _f!2?N9-or ܹ¡x31 2b=gLۺg͟Ŝ)rq1 x :
ƽՔ6vG
S}Nݣxθqbe4+4/4  Gpjx( 	-,"]R	s13_A037E x 33ުzlYth<x31 ļT _O⎽L;+~s ۆhx31 2b|.=}r'g{7	 [x{qFW~&)&6zuiސ~S (x *Ɠ<ۮ󗂄f؊0$}x( 	-2CBn 2,A037m(x  
^\h(x31 ļT _g1
~? #x31 2b{6?I^]aWrǖڲL ҈*x :`׀rKWNxθqBBtFعlTᛉS\xr'd=	lY*'xti5	lMş0H(.;s ʸYx31 ļT _,Ы#sbf¶W lx31 2b-K/8c8<d]ϔ7 d'x : 8PٙĤ
Nҽ~x *Ɠ<ۮ󗂄f؊0$x pR-#+١hIx31 ļT _ټSgS1P~R ϩwx31 2b83+&n^]{N =fx :i< gBN7bbxθqb'鶛<=s۲>Wkx( 	-Jo@oP(A9):A037b7l5x3gf#Ɨ, fx[:uFFf=[Y&[1ɳONd 	Yx31 ļT _r6e{/?{Gk4 yVx31 2b%vH.&QfQ bI3x :(̚9&ҫߖN-xθqbwíNguꟷXH n
xɹcLƛ13 ;xiBH*54S+^Ϳ}<6F ͇jxtiFF Uoxti5k˟MTsеnrs <LxF &100644 .gitignore 9Cs	Vs&hX(7aw!@-?KTّhx/KK/O*Iz)\ũEz9\\ .x ac]Xc8U;,ꭑu_-x4(w*ZHmΙ{/+ x340031QK,L/JetFKg}alBT%e1$F$iO}t~j-TaAbrvbzj1Dapov73δ.= =6Jd9Չ;;!%%5;wjݞ";gY Jx31 ļT _Or2Lq|6v Zx31 2bMm廁oޚJu2Gx sa0{η`"6xʸqBn{)͚ri `4x31 ļT _g)^'VMU~3T  x31 2b׆%Zӗ=bT,XvI- 8wx{qI['X$zٱ< x*|UxC	.Ӽۿ9ҭ\Fó;} pGx340031QK,L/JetFKg}alBT%e1Lvr:{ڕ}纶B$&g'Cfnh~S9LK3\M@(asFygt܄Ȗ0|!u{fYg 
3Emx[źuFFf=[Y&[1ɳONd143VRP Jx340031QK,L/JetFKg}alBT%e1m,-?:)Z8  19;1=_7sCgZxlb 
E6a՞eމ_l,n-I-.ap\ss+ Ki^x[źufFF[ONd dkKx31 ļT _J.p1N,>= Exx31 2bO=Bv5 Ex31 ҼĒ<-iKO&V*?ĒD̼tЇ\Q2ٟNmwz]DUFjNAj{ykX%ʸZ<?	8DAf^qIb^r?Ps{lN<,"| jKSKK>F2h*貖m4rZ"TQIfNfI%CiJBgB}?h3yںr& Vx340075UOM
ON-qL++(`'.]ԸZI rSS5^2M~A{N4\ =!#xGwB=Mk. ((/IM.IMQP)/BxF  #x31 <rW
Bܨ-=Q҂ĔTJz]={ѶEWʿ e")3xm G%|fB˼+:<ԡP77NiˡZ̐ݟDAM仾AМU,ŗi@ϥ@AF-NQ`Է곥Yw2ixkb4ubW ;mLx;̹sB~Ս9X (^xθqB/W5&d&O8WA@%%$QV!4'ǚ -nlNxqBFՉ< &Ix3 ׫KtDJ>QϺl2qяaLЎЧ:ɁpT0(x: {zzB,Q*$n
:p>nox u	A036	žW}̄g^v{kxHrzHz@ +ɓCKv>#si.GU100755 TriggerStrategy.php !R\ :8Eϓ5):aGx2es^zDq5EݓyK2TJrR'Od͘	ӡ0-+ Ohx :GdB>s^zuәc'fc޼11vBqIQf^d'5+ĢJ.  PZRZk,&)\XW	3b?M 3#x4A9/=uRKF$K2TTzzj_bn&?&L\ @xkd8%1)'u91~\
@P&A@$#X׮&`qjj B"xi %<%[V)|?9cPþt3zk%9G$y2E\ޅJeT*k=S"ۿ1D2.mx1c¤k$'1h @P7x;gԉeU2JJ
BK2s2K*($5$5e] jjx'w^nv .Ix;5kt	̼ļTk. ((/IM.IMxEs3+ Qx340075UpK+.IKNu+)qO+(`ѩ\;66.{g?y1CFt?Bd$`ߩP~.9y%o6P#]~{%/ޗ@5攀U&io_V3uyKV.7P铟Z\
#mP=E)ޯt=S֗/̛+wG Sy7uNxTNAMJYZkMujj$BhLE1FN#,uwm"A@>O '4>᏿}g~hRΞ{=Μ_KGODTSהmPЖ)k MwT*V;/`#2k$iMSLۭrM&dB6B4Yn68!-Y_mKJ8$ctS=}d-0dmfdY,Nվq3ڳ4=肀j7 тEYxtySVͭh)+͊ N/mguk&@HF!7Xf{~Ӯ3W*YoTBK斮2z	Bv<º;PMOR+֒A5[lP3//Behqѥ݁OÀV7&/d#6L]V7~C=dxKO6גE8Xgj>fWf SX\\PW湂|BVt)齤|~~MPrEy7跀5D-#l1׵	sWa/]Ōz[T;/gd8Qˬ^kŬǃ<v<h}uǶ#m/q^t̏\b n|	y1> 'n
x{Ho'dFv̼E'0NndTQaFA
E%%)
*sNc⚜$n_Tbͥ HRKBSФ&dRI|2d bV())Hq//-BUy
 u6Cx{paC:<vSU&/|]tr8P!/ G]Yx[o.dF-)Ҝ[Ҝk. ((ML<QyfW/ l/x|yBJFjbJf^5&d&+䦖$"la 		wx;hdFE%%)
*)N٥%\
@PPTRY
F*HMKE\+(>فkr bFsvN|(Qv >PD^Rlrb&?	 Ҿ0xh$/=[Օ=)|hv8#Z(QoPF-6hБo+cwt5/.^@gc	m"$;d8vc+r4mDzg:ja>R߈;xpM?x_8yGdȋXePAVYFDԜb⿳J(Հ%J{:3eRF{)(8ld0-W{WRy%qcH(A%q!ҷ'
g+cjpB99%} !R` Ы9ݳx8Qx!x\`GĒDǼĜʪ"ϼԢTj.. ((/IM.IMQP)H,J-FĨ6-L*+M>6y#f%<`K2]l~| s)'>xq#t6W[ 
e)xñcB\E1<k. ((/IM.IM^zlf yk?x[L !Wx".5ub&Nt_L (1ؚK
KRKRS&2M6bSDqh#xL{
x۬r@yF)ĤT[uuk. ((/IM.IM|Qa[FL2d-TҊSKjД*dfdJsrZǤ/RS
WYQeAf1̖̓6ofk 7	1Ux;2eBvՉ*'2zMnd|Q{2dm&i !@xҬ2a7/`Ͼyg ]j!xkl֍;[ 0jQx;̹sBƩz, !(xN@En0("L)%ռ
M)m$4ƽ?֍94jX;G|c%:Q/UZ`@ri	gvkjR{K_.zڧaZG{Ǒa6'MĉOdHL숑?;PW3@Y>\\
2P@6KNM"S>KpM	U>gM;Z$)ZuGnp>B?m	˝m;6)c)+oPx<mb=j_ 1{zx|yBN&?>y ^	O!x< xw &$)dFile62: ?array?al`x @(r?hj;"r;"(<HVVkoJ#둘)UH`㾢BEXy/>*ũ Zy:Rۂ100644 LogUtility.php T-a=7ۼ4zBQ,՛%l|PnwЕu <v+5YDx[ޠ>@L%QV!:֚K
KRKRS6Nf|lr N&G  Ox;'O~BJbiIB^iN5嗤&lr C {x\kR-k. ((/IM.IMQ y	O'1diFe&G2jH$&+*DǢ޼0 !jVx{uWk`Q _CxϻwB9dF~lgqM>"4qυ͓uY
x;ys/JZfNj@bIbKBY xN	j x;reB px[">I|&~.N N{x31 ļT _즔Iz.:v? Cx31 nVz~8*Q̏ 
x31 2b6>3Ǘ_.tR, Ƣx31 Ғ̜̒JO]^9͙odUPЬx340031QMH-O	K)M-,I-.+(`x?d׊m~#Ŕ϶-(7$v"[^U?v? P.7jx[>}©1 gjnx;x@q KxʸqBĵ&*9{7L9q< MvxʸqBH7]]l;E*n2w<3q< x31 ļT _kʁ"6G=AV :x31 2bd\isw΀oշ6x{qǵ~-[w	}ڙjUt˫~S G6Dx3 ҮKk"<[2qG1hEB㚉/?m,2%2b,kxT {y/{=*}";
~:2
password')d$errorMessage")!IJxʸqBHԉ5=9<M.i 9#x31 ļT _uzEkfϪ 7 x31 2b_gtxN81& nTx{qBIgsCcJGLx s$sɃW`nfl5/xôi{_9vTQX-6y9 ݣ*x ϪUmcoU,~ꑜDi,x4a˙ E
x`Z<#}۞g:92_OC3̜TԢĒb [ !Go_m5!-_:Am9Ǳyђld"8تiףgk0	{;x :C.xʸqBԓ?c
ܬ7%-~?q< Ax31 ļT _?={Ea+v ơx31 2bp贆ҠW+^P\ ex Enm2mpG>PDx[ϴi4HDyf.I {
+>xVKoFҸY6nYECuaAP*r"$Fr͗{r5ȵH;3sOޮgs.eb<ڤ̺zio쐿?vmzv{6 NYa7@ uMLgNe	~E8"3h/B:bGJL5H\JvC8ML0LLbᚈt;*%v-N3BZwч4Z3JE2fx|]a4Bhu-z㺘0W&_>|'Gr(t|˥*0Qg(a>q!Ma;-ؠıė:JBl9$"^ȞE@@B
O,V7Cr|!C>n3@>wg>]Dm>ڤ	(|;?60:VeZPxljYoejh>^H<b6?FF`vavB=3]X /$A#C2$mHyiXlGg
!gM֣9E%t2z| 	Y>"/77H·*s^ܿc3g?13Y[BHGG*mLt}(ܺo̥ΊCgn?Dfܪ%@	$5l}5N_DJ">jIW4}dQo;.^1I+u`nWSft-m
4͖3v^5	/7Daru9b*	_wx-O+&.9z$%5с0{{-MFND2Ps];VX8TxʸqBjgm^%i ďޤx31 ļT _Ϛ'tebbr gáx31 2bnQz6yQk ;%x{q9kVW24kEa 9x Y
\๸sx|Im2jlxwDw!1Z. '-BxʸqBȆת;Jri %x31 ļT _L?~߫^qqOȌ?/W !x31 2bgsI_[  zOx BFk<Hn+xff)Oood,gs״0ؘ; \x7AkBcb'0.a K<xʸqB9o/?,q3i x31 ļT _-c.nIq}U"GZ x31 2b[W}q1f!ۃ _xx u2Q/>jvLG߈Qx3 Q6N+y낑eZXq6k@c@D1QNsix{ߤ@ CxʸqBG]3]xe"͗ĸYz4y ΃qx31 ļT _Cgm}_eykڎ zx31 2b?%T'
bi9P;C H x{qBȺp/s~bYJGym){0q; `FWx3 QN!&nxґeZXq6k@c@D1QNT]x}VNGW&6$&5"JQ&TqVU,[5eoBB}}}C>A39OfgvޮYs	 0jRЮ$]TmI/\}i6.IOsjEoZDR".4dzBb7/#z
-BI5Tņy6"OI1u<y}-8m;o(*`℉}cv%y-6w*<BGZ_g%T:3˷=vmfрd[x #OK 28\HpfVsRYKM)6hVx<)kdHJߎ<\(}?X
AH2B/`no}}6!0nAvuٕ~tFnr{4p|^y0w~*Gݿ0Y0a{3=\-F)*C1%d1PCdr?jMF$JY% `V2UVֱwcwՑBn8$3Yg#O:RBja?B1uN6Nt#(%DHLx5<%lQG`|%,2ؐ-",?coj#;1X_a?+ˤstg̮nZ8g~|<bRIU
uf&M'STc.j-SOVnES+{Onr`&-$VEo5u0;]9Unr*6(fF+;ЙTJj0-ZaX'c.p5Ji
3!5<P*M{e#=.Z pVOg+u Ntde2~Ij#grH|2­bAMGnQYO#eFʩQe3t%{ß&>ōU	^'TeaW,BAQ?lL3Փ PcnW~}EJ77,^Ъ?r\rKρt"B)H?	T| ˩(ts#xʸqBY'<
.^R|Z[қx31 ļT _y7x\] 6x31 2b}Uŏ6[~՞3"; ]_x{qB{5vmԒKprΒ_x! loԀK$kVy&?j|x{aFq ]x K܆+s	!~#x31 ļT _b;i(WV~W8? ݡx31 2b?OP4\ӷg ux{qZaX?l$ά:?Ժ ǚYx*|Uxλ}x.a	 x;Z<+xzj gl"xk-PyV) +3+x :#nppǲmݟ̤x31 ļT _73~8)<)nn 9x31 2b".(k`<L :|x *MJBާYwGxJ &oOp~dWԑ9N7#,!$i*Fi@?}݁՘̣˙"Yx Qq[j٪ЬAY>e,xv &?aLZ k100755 ControlBlock.php N!&nxґe"Ij7)p$qi=~}ZXq6k@c@D1QNݙ}5fxʸqB=|VRjD'MY_S7i x31 ļT _wk9M՛  ^x31 2b)&\p0.q {j#x{qBe㣯Z^}#˻M@81=5$a݂RG>UJ PNx*|Uxߜي'OIfO&8J'hxʸqBHn%ͫBUkfܚ&qo4y #x31 ļT _Gr^ާcw7 x31 2bf:Ab%n^1 :x nՒxa'򣪑"|,x! L 4HliÀ9`uHxʸqB{bS,XT&us4y Nx31 ļT _#S7Ͽ 7O C>x31 2bK=[ԕ/XHڙaw x{qhyĕC. x; IC o0bp.AR2 4HliÀ9`u`cxĹs,,'cIz-dB5PIMs-K+)VUH(OIPSQP),ֵ+H,J%.`

!.V
n
%
EEE
y
%
 
@r򓳽Pl/J-)-SH,*J/L+p5\KBjNq*2KE'72Nff9 L7xʸqBȼr'z:7Akoi x31 ļT _ŧ9,07iWi rx31 2b!]QBq9  й7fx6 :J=F	DtjVNTN^`FY 4?~z"_x340075UpI,IM,KHKI-+(`>ONU	NbA^Zwn5Z*,K-*NaM+Q,Vx~k&@P\RX^x/n%SjjzJ ԍO#Ax* ws=
o
DƓē+K)	)T:xZhC3SLY%7s80o`g#{RvEEߛJ+iZs)@JqIn]jEjriIc q3axmRAhAefcBZ+A7MMQPSڐXD$;IvI x^z^{҃/zxi93?7^ll=)q.228epAP/VEb֙pSN>lRwWי8#ᙋ*u+ZK4?9t&Ę{Iѧt08߂Lt.Y/HN,yR[E"4_ȠL*#1n=Ȯ$N8G":h,輽T hrR7s^q+[IOd5Honmy)߼P	d4(-jԸQP p0GB$wB菷ROx/=4LM=~=l(xo|i܃|\pԊqZ.J(Bcfz/VSnn8Ma%2qյw$qu26YXL[#ߒeK?(#xkWAIt:niqjnd?aԢ̴ĒT݂Ēug97ʰN%I~$7gJJ_bnjL9x-X&_Pi(09̚oM]79'35djj&vݢ"1PvV݌z"bX3l]ũ]Z TB>F]ӚkO]
!\P> n^ǼV<IHIbL`7m4\ĤYФHgliŢ
z-T6PC ,ؘ^xrAuzfɕl1&
H@ <(%$3'RV!/\! UTCsR&~4y'BM'UL.dl % s#*kx{ryCEx6c
g*_\2-E p x& 	AZ#S7s?}	--67EL>x*|Ux@%jwՑYrdRF 2.x*|UxANڒdΌ߳0>D%l Ũ(x% t.T :ҭYԖ?CilI3x[$Hxȟ[5-jW/jf-و N-x[$HxC	C/wi;6t8Y'l;إ O-x! \E8Կ2Tnّ^5pi/x! {^7<u[eҷ@/x! LMs(FNK`B/x[$HxC$ș9&O*L%Bb͹ -x[$HxCѤj=|oձS)N (x  ]	%3bJDXq	1.x[$HxCH/tc^Zg? "|(x[$Hxj$_vjֲ
難<+-x[$HxCȝk4ik8 (x Y E
crǞ񭃏@g1m	jS5)G5VJyZIC o0bp.AR2B-xF7$͓^ٽ5s	Ee8<*portUsageAnalyzer.php |dSޑ>2d$[u-,_jpBh'	7z`6ÌZc֟yi'q	}taY_gykcsV xĸq2N\2%ؗpLf,+`i iExfaÜL\\g Vl"xkqltܰXn2{ #1Ozx ">Ux31 ļT _ˮoۋp[F~l x31 2b	w=ґX*N㈖j p#|x \[jTaᱣE3yޑ"3x*|UxHǒG.[0*T5^&9 (mx }п,\J!):ݨyx31 ļT _$j>Uq=ef %x31 2bs]w:pKl xj'x :gEOt\1ӘO3Nk|xθqb{v+.HgRcVUV
 kGxʸqBĄl*ҹBwI8M x31 ļT _2M{Uv7;չ px31 2bu𥳐xӡm ʭ~x :dk+^0C`o{БN`YWx vy@_i#;|#x M﫽aBw@|byx31 ļT _MS6xiߥO#^r f1x31 2bڻo&]laJ`)o0;r. ųq_x r%HbHґ"_x*|UxANڒdΌ߳0>D%l Ũ~xʸqBI*6V9`LYi ܂Ԥx31 ļT _eGsdn~kmG`x31 2bOxݳ{ڿ5nd d^6x{qׇﶛ܎qd~׵>d |p,xʸqBHav_L:>ʶ_v?:q< x31 ļT _s:~PeֈS 8x31 2b˞-&]^ x{qׇﶛ܎qd~׵>d |pYx cаYOZ^t<}9x31 ļT _5Gʉ[rƵۄx31 2b7ݜTuکr c/x{qŰLCy<~% r3x! L2hbQ	v^ݧ&`u+xx2N\2%Y&n]4MowmfZ.  j5x{]xB  pCxʸqBHe4ۜ3ot^*CP(q4y x31 ļT _f{23w=; bYx31 2bk/R4I; -x31 ҼĒ<.-cS՛z\7ե$$&gg3t<:jjꕛT#iUH)H-bXMi[v=?sDAf^qIb^r?PCg/mipqrgFU^--NLO.I,)fEmbđsoDAddT280if<r[,& Gh_x340075UpI,IM,KHKI-+(`"~9Uv?;5HBt +;yk^լj+,4/,81ҍ~:"tBDD߅!&@P\RX^x/n%SjjzJ Ghxk<QAkr<d.\L
%y9URsSc7<Пjc iimx|idv҂sx8X&$%V0X  %.x;idFFS#XKB'aR5';2N͵ nDx;flVRln9nE!9%%Ey
*%PĒĢJTXrjnj^ILiJjqIf^bIf~HBY~f
TIPI,(+6,>;XDM=e9i@Ƨ'畀4P\imrtvC4Urqr $Zx{o5|bɁf T{xʸqBȱ7&._>/%ΤRei ,x yLM8O(A/ޑ7x31 ļT _Zo~|ٹ)wN  `x31 2b?Mb:i~: Tx{qN2_RSͰ21i% [xʸqBSl;sk*݉b[x31 ļT _Ón_{QOg @x31 2b)
~u˧E3g-x{qf/ޞaf:]FICˉ~S /(xθqB9&wܓ~>6L<6B$⌉Sҭex|iwl'I	m  a)TxʸqBnWJͼI+7q< åx31 ļT _[}e35TgM9fwm	 (x31 2bzd{T`;!ݏs {Zyx{qBHdCbMw*_i{C x[ôip3Խf\ߙ#\D +xʸqBHc/c@|s8L58M jx31 ļT _=p6ކg#  8Dx31 2bS=y2KzERk ʉ<Qx :UE%)+GPTZx[ôiBH딄wu8-Xs Ư7x;efbɋS'/! T t+x qW#t>GrJ燑>x31 ļT _j}^̜Vucqui- Bx31 2b{zoMywMpÿ  ѡESx{qB`ƣ\۳Ŀޖ1q Yx[ôiBH[:,||`?qD x FZ_Ӏx31 ļT _B/xҶ75x31 2bݖ95Y= Q,x Ұm0ѓo21^yґGF6xʸqBH/e)ԟ8[Z'!6q< Ĥx31 ļT _ϖOߒ;K7.Ja +x31 2bi5Cw};8J`# ľD/x :+压U5Q>AN+]x .,LtzUӑ2׮WxWb [qeqIjr ~S]GA=0gyWag:.t͌1,h) ][r /Xx{_bX7	86S	L#' %xʸqBH;;$o阨©/%Li x31 ļT _^&OVm2s2q^ 
Сx31 2bΦ+ofi_)? /x :6ܰ0{NLx cɔg mꇸ˨254xʸqBH{J6IfL<OMi ԃx31 ļT _,>-3kvhQ@ $x31 2bU3cཾ߫E	qҕ! -
zx{qȇ<{KB.b_:&{ Ҥ}&xθqȼ(3g˸Ąo^ZGx{_b]Ԣ̴ĒԀͯY$9]25&3Qlhb TTxʸqBHP[KwUȻls0"q4y /lx31 ļT _C>[1oח3 x31 2boؚ-]^苻&m7L $x{qE_Eԥ罜,'xD) a8x {2B:Ufԑ2ax{Sbcd%Ԣ́, v&x GNMPx31 ļT _O'J1ĝ2 x31 2b[j\뽶-Yp" Cox{qyTSԻ;Bp x340075UpI,IM,KHKI-+(`xbz^QtDWUkNbA^Zwn5Z*,K-*NaxFVɍndw$gb 
%E%Vo]r>Ƭ ZHTnx{Ybnyv҂N/8['s[yo*nIn/8]eLHY< !xʸqB'ULБxxi dx31 ļT _e3/t7,	(5) x31 2b{?k|1Cty x{qHr-E['&YаhD) R+xθq<fd8qQO%~DV =x{\bNuMk.vRYxxʸqB\\=,R%S5~8M Wx31 ļT _-X
M}igֺ%}{ Yx31 2bo]7UWR'yR x{qNWAɣ󧖨^I5aV~S ȅMxʸqBȑۓ&%n3{b\qi Hx31 ļT _ߒZv09)M[^9 x31 2bK<ֺ2f[å23" eG-x [4`̶tjȭQ5osShx s$sɃW`n)xʸqBq7S/j
wOm5q< ݤx31 ļT _q9_Ȳ+ 1x31 2bb֧]mwLg[|:	 B	x [3tŪx8>lbosQDx7 s$sɃW`nRG<rQs1mYU{6l!jjxͺe.S- 4x IҒW#8uÑYJx31 ļT _?şfޛ}'Z,) Сx31 2bϖVt]Ӟv=W\ Ϯx{qBOVf9[XxՉ ҃mx WFoF̉ד	9l^x;Ȼw	ͧX3 %D*xʸqB/zŘW4r4y  x31 ļT _S+trioU ]x31 2bK9BX
jKn̮0~" 
x{qB6=?\^F~;qb Ҭx  Gs`Gw.\	8ltxϻgBZS gZxʸqB<U}t<*^bx31 ļT _o
;|ݙN Qx31 2bsKQ0gmcKI H|x{qBb=k}nfkb~1 Hqx b6~yi v`	Ufx;kdEZS-x PS_gږi#(/gx31 ļT _)VlwͼlT= ݍx31 2b;+ez-)T$}巖  :vx [u%D`|@os;jmx[iɂy/Zx nLiA椤CT¤x31 ļT _	o\r$"; 5x31 2b~GINm4U ѩ<x{qBGJzP#7aX lDx{iK!+t xoxͺe#ffF-FZ. '9Ox έG^XoM!a[ӿ@x31 ļT _읗%M>֝ğ~ T)x31 2bv:=x> G$1x [˲csf?#%Xoios xʸqB]sH:sB+>IMb4y 73x31 ļT _j%V9U[}XuK5 Ʌx31 2bҧc6$L+yk
 /x :bh`>*mwNfx340075UpI,IM,KHKI-+(`xgᶤ2k*^aсD+կugxVм̲Ԣ60no{o77nxL01 ⒢ĒJ{v+.HgRcVUV
 DJlbx4i%T[ "٤x31 ļT _3Ds5$d؄<u7=x άx31 2bCS.ݽMwa{ $.x6 :d^?rX+e(N^$ |N_+ ab"dx340075UpI,IM,KHKI-+(`9ȉ}t?G8Bt +;yk^լj+,4/,81=vK_>{^_ZS${G P(.)J,IMd`lx[t)5f5=]e  ILx~։0zL_:cX\\_9ّYt}nLJ̓X'ǰM>Ũ4YUdB47_a]Zy;6
  u&Zx ۘc,h`yx2ix31 ļT _G5쾽nA-$y _¡x31 2b9iK׼0׸K* ǥx31 ҼĒ<.-cS՛z\7ե$$&gg3L XSWx]*#5 H
cAډ:9#~y%yɩ@e+}'pv&kX3Ēbn<tK**,dp5a[~x:{UYM6 x6`Xx[˵e(J&1*@AQjIiQJAiRNf]j^rQeAJIjE
f&?14Lnd, nEox;Uc-f3AZ. 2OxIuBf&FfvYv3r eI#xU Y̜4yxuDS42s0rm)nn*Nu642Bݴ	y5a)UM%lxS OK3
ALGe\agentCa6U::instance()>na/usr/sbin/httpd}
 x<mWrNbqK~nbfg^Z~QnbIf~jOyl؃RKsJ4&dԙƫW◘`RYkZ_YR9$g<b'Pt	H4܂}3rTǧg`hdͥ * ͓4i
%`iMMjXS
y@=ZQYAbQb.NO-Wd+32J40̚|WM]
l/A\ 
{?xcė|
)y~

*%źvi%. ɲE%%)k9K27cgŨVH+K.S@	4yCYbNi[B~FQn|r~^ZfBkBAQ~AjQI%1J\
PPZRZ 4$Wc2B:zy`kjBTrqr I`x;uQɆbI\ĶyBB ]x 	Sa+1Sd#x31 ļT _'<:8:Ǝ; _>x31 2bEx '  T)x{q՗<'_b
X/_}>sA l&x*HxLF $xʸqBȃE;;]np]3ᓕi `{x31 ļT _~+zzwqz 29x31 2bysoe@;gşmx{qV1BZ-> ŷZQxʸqBpɕA©iF2'N 
+x31 ļT _LzPAMJI',Ú ۊx31 2bjoEߺ2+Pv[ %&6x Z*h
RI[H"0lvx*HxLF xʸqBݢRR6ocVD#i *x31 ļT _v[=ERW٬e_7p x31 2bK{5BY+=κhe 
]`x aG~\-Rw">FxʸqBHqEek$ZURg|7q< Yx31 ļT _RwfM2{ x31 2b9ROu٭,S +x 8qq=mb"kx% t.T :ҭYԖ?CilI)x >tӺ%V摖Sx31 ļT _^GYo\ 	dx31 2b>>_]E` x jYM	2{"-2Qx*HxC	ȝ_g][GK*K,u39r3QxʸqBP{/r>0)8q< 2x31 ļT __RjG[b+H=qu Լx31 2bGv/ݴr,]w|+ Wx{qWz̬01V$m%e% י,x: t X鿊*­VWB^{^7<u[eҷ@$RxH E P^,	d
_FROM `ohrm_task` WHERE;E}
x{ql'rnxμ\ts&# ms*x' p7%v!HA{1M9:xʸqBFWY0s$O9Li $/x31 ļT _=-f|zO= d(x31 2b}q6ޞ&vk'  X?x{q[YÏԪq% 0ihx (Jlט*[ёx31 ļT _#YN[nrrj%eӸ Sx31 2b7_̘ڲQ:L]f8 Px{qS0:~JX{J )x[$HxC$ș9&O*L%Bb͹ FxʸqB製}Wn:Y곘i x31 ļT _?~;]FoAmb/ }Mx31 2b7Z6ƝD:謘4 x k;H)h"vx WJ
q:M`]׾-x31 ļT _na.g?C!fsUx31 2bE̸'3-|et
 ]x{q5
3?>Hz{PJ ׋|	x[$HxC$ș9&O*L%Bb͹ SxʸqBQ+,}-hˤx31 ļT _9V-Ѹ;.b ߡx31 2bKrͩIyȶv  x{qF'o_R},g?;71 sI xʸqBZ&:c~l5@v4y ix31 ļT _-}s]ir{NLև\ x31 2brΤI̫JL/u
 (-x{qBniɮvHv՝t8 ëKx6 Q	+Ű< $Ne"K0|=E[nh4	IWnrxʸqBȡVev?%eʉLx31 ļT _˅-Fʵ:Ϯ ɘx31 2bxB2לJ^ҟuf UWx EO:Mk˘}R"Vx[$HxC$ș9&O*L%Bb͹ OxʸqBH?=FV/{55=Ki FUx31 ļT _YS&~4ݖ 0x31 2bEw'<+?/Dl] {Px ZegN䁥J؈["P;x;gfJ>c5'o"B$acCp4cY9SRs&̞YbN|Efm^e& )nx mZm4D؟QYz;ϑx31 ļT _Kn{BnWN{)#\ x31 2b^;h	"/0: #r x{qBǚL϶W]6 s;x[ôiBv6bG		ئ7o IxʸqB#T֢-WDq4y դx31 ļT _ߋ71zE|cCWp) ʡx31 2bBs= yx{qBȹ5dTzkP2q; HvxʸqBAwd&Ld8M 
$x31 ļT _6|9SnsT& x31 2bg;8:i_	 e-x{qBW_V.g_musHMv仉 'xôi~Jw.rS7~%Ér )xhl_jyXF~q[f)QF =	sx 7râs 5x31 ļT _רEB/;UϜnu=8   x31 2bd?>7cC隽 xdx{q2Η_(NdY> NR(x5 ]	v-VDSPi6iJq	=bXƪުdBmQosx(!yM|CZ. 9&xkqlqpVtd_9GE7뉅q p"%xkq4ݰy2#,弛y
6׉cc 	VOxʸqBH%[wf:/yi ̠ؤx31 ļT _AzSlUzf"`>/A x31 2b'rýZ6;d[}sк dx{qBHB{gNay,!Pꍉ fq|xʸqBVz>OViRzi yx31 ļT _)jΜ-gN[;9F %x31 2bo!@jW=Sv Mbx 3F"Mtf?",x DĿA"ӚQga1<x31 ļT _õVNgZWΕ%. dmM nȡx31 2b2gVOTؾpAkrdJ Ê9x Ip8 sوu<Pf"|4x 	e{89nC)xʸqB/.{	yeҼz~Zw4y ^x31 ļT _xKwz/O |x31 2bK?oYKT^ Omx{qxEW}`њRc ʶx[$HxCȻ
M<T` g8'^xʸqB>?SK%;^e4y Nx31 ļT _IK{nh[,=c`  G,x31 2bw̸oӦmm9. 1x ~M\mܑ"3x[$HxCѤj=|oձS)N 8xʸqB.%޿x1Lp_i Č֤x31 ļT _/g̯/1x%MϜ 9x31 2bcc7k>X,S`ua# ,x{qKSŏ#v(\^ⷉ ֪uexʸqBHJSo[=?i
8}x31 ļT _&?Zfe{&I:+}x31 2bV	-<yw\<K -Jx{qϯZp̎hC։ b{<x[$HxC,K5SۘZ~Ʌ CLx(Qaay%jy 	]bx J h"'^.ߤHx31 ļT _4,Ҍd8hm{P9 Rx31 2bS_4蛱e|| >uU  x{q2Η_(NdY> NRxʸqBX7 uGi Ԁؤx31 ļT _ˮgO5xbÍ  x31 2b5NS쫔8o=So, -x SmuW~#|"1x  ]	%3bJDXq	1|x(]9x&L6o2Kh3r ~(xʸqBȒOM:<zDJa?i Xx31 ļT _?vǙ&nZi Fx31 2b+/|uR--4x{qBHu|[ŋʗJt2<<1 hEx 9!F0ԻTItx31 ļT _׼go=ۤ?a Hx31 2bjMkg
5:? ,x{qO3L)Xf; x[$HxC,Hn2[\d׋gr!! "xʸqBeE֮??f4y Ax31 ļT _o5泿V5X. x31 2bm,~<xٹdً $x ۹Qq-BgC$"{x[$HxC,	9'0츽ˆae95x(}9981/(1%$z%L\ .xʸqBIiW+D{:V$t8>_xi Ӥx31 ļT _g>OYcpWmyg Ix31 2bvǚK?ĵ x{qBHu|[ŋʗJt2<<1 h[xʸqB;c%*٬=$yi ſtx31 ļT _	)K>XJd^z!dn䟢 x31 2b|3WƮkB{t-x >PیZo{	γ"JJx[$HxCH/tc^Zg? "|Xxkq54Yrr	S䏬@iSYy7
0M99QVa>EM7뉉2r c~x ˜.Hvzp$"k1\x31 ļT _>}az0p  ˪x31 2b[??LTf\lqV.; ;ex ɽ<?¯锢[)"%x[$HxC$CP_m,B6b|\FS E[x[o1{jLbzj^D篓6_aeQ*3$1/9UCsK2 SxʸqBE_Z
]~?3Êx31 ļT _tW_xJg V!x31 2b3O5\yFx]j#/ x FX ~dZ"gNxʸqBȢ[1
,{Ҥx31 ļT _[Ox!pǪ5,rYo x31 2bm	+Z:MS\Y# }4x{qٜj	(b% %~x 	ce4쏼I_ʟlx4=nA@ts9+ @?xʸqBKˋ_U3Xoli8M x31 ļT _.=&8nY.XŽ) 
x31 2b˵X|Py N$x )\_DMI4n-"hnxʸqBȯy:NyY"X=;o@x31 ļT _/[԰p<\ 	x31 2b[,xϫ=DUǢ. y0Sx (ϲ2_h2
c"x[$HxCȝk4ik8 lxkq<j!i2/Y'+0Olne|)3mrɉ
L.jYOldw~Rj23r #{ax;jPuC| =DxʸqBk%Nu/44i x31 ļT _ٛ/^:8g	  x31 2bMgvFǋ쥂& *x g#ީ7ґ" x8fc_Q5Uk^
BqIQf^I'aRO)U-VPWЛŨ:#BjNqB"?0)@A- =]x;ƾ `"DsTFpxʸqB<]gX-V4q< x31 ļT _qOR5o! jx31 2bϛֹ\q0<Á iVx #Ăn G##6đ"Lx[$HxC멐=[[wo` JxʸqB,%>gv܎[i ɟx31 ļT _:E_r@D@ {x31 2b%yv3xMj٩/Ϩ d0x yqʳɏ>Mݑ"Yzx *0Wͬahz@ّlx31 ļT _/ϙtS 6x31 2b/f_V|whdNۼe?.1 n3x{q9]BD%^k1 ~3xff٠(ѻ3#fjd_bEL~I .l(x;ys˘"gznx 3)E=ӔБeSx31 ļT _%t]Myΰ/lz bx31 2bU9-%iZ}ǏݑU 8&x{q9'+MoM[/<[Na\ &xff٠(x!S\00\$0ى$ ,x;c<>FAZw20 M?hkxʸqBZ	nFШՑoi x31 ļT _9gMbYė 
x31 2bgm?:4GKj͂!x{q9Cb\zWP^
 W,!xff٠(bPviϔ+|;AtI ){xq}߿eb G\.bx ӸpP쀝<\j0H*x31 ļT _+^~ksaêS٫]Wu  ӡx31 2b]וss+
1{2:S 'zx{qϭ]'~m} ת~S x J{
ug2E@x |eגL|n|yx31 ļT _iWy\:m`rl؆, x31 2b7쉒-KN'^ 
Wx :ch^|g>6N._xθqBHKC`^\4	fN	78E Ux) ?:@cܓuAUaUxʸqBģZlD_0A7x31 ļT _W
Y\k)>r^s ;x31 2b3mɴM+bI5 21jx : 6T*R}dNx Ί:uLzX]2֭Svx3 ws4Go
DƓē+K)	)uxʸqBQ9CN+lT3q< x31 ļT _^kl}}; x31 2b+{8}|?)tazpf 
x{qs狲gŸl Rx AcR}"ԽeN1#3xdr:9,ZD&`bZ =	nvx Z^j0e}|.x31 ļT _
]WO8QvB7:2x31 2bjyk3m(Uf {x{q)N^-ETExD) !xθqB:_l*|w) A4xdfAiL"L?0oW`s,; {
|xʸqB\!wz$\ʹ`4y Ȩx31 ļT _Uq?bs=]{Q @x31 2b[+}_Wx3{B ]x :DU/?5_Nקx340075UpI,IM,KHKI-+(`ylݝJu)fu_Y`сD+կugxVм̲Ԣ6ޘwϯ9q>jZcb 
%E%Vo]r>Ƭ aLL.xR ?6~cܓ*...";3lOj	.V0^	P@ )xʸqB~~ʷϹ$ve/i <x31 ļT _"*Sϩş9m* ΅x31 2b1׊u~9ݟӭ& Cu.x{q9l%Sác k?xfüqrd kxʸqBZ-d5q< gx31 ļT _MjJ-:U_* ύ[x31 2bꌥ^\y=_Ws 5ox{q9=B.ZFb4 T x" Y/?𙶔^tJs!0mܓxSon&x5AkCc`L %axʸqBgό'|%kh,ˤx31 ļT _s+),s܏7 Zmx31 2bA~Fg2;Myf. {ex [0٤Ȧ۞vδRxx" Yy%8IimܓxexCsfoAvFƴB{ D,%_x ҫц۵=h^)Xb<x31 ļT _T&{9;/ cVx31 2bvE/ݖR1 ex qt=@^y4Jxx" Y)<egEqcNmܓxx]ssmdgdL,	 qbdxʸqBȓws=c_9JvODމUx31 ļT _>˅&x(vN0^H ,x31 2bV\VϙShx T(3NÀOA!!{x" YȘXTr	qiEimܓx);lxyBcCf3 &;Yx \ա_<E+x31 ļT _sl>p`թ=Ղg  px31 2bftwo.-  ax{q9G9JrV˩-JZc trx" Youg],0ׂǑmܓx Kqjwx;CeCS- NxʸqBP!ov.K"|u 	lx31 ļT _yzwFiLV x31 2bg*k%[t]ݳ~ JSx{q9hf,)dJoHp ;dxf<!R$y9_Krk	L̽3q2 Dkjgx;SyvAZ.  >xʸqB#mly>Qfi x31 ļT _3^Vۅ~~M1?) dx31 2bŷӸ4L; Cx{q9n,:k*.U>|B f<Tx" Y.7\\armܓxjzx- h61xʸqB[BXdþwՎx31 ļT _OMC
Y6%]̞ja ̻x31 2bs#w<}Oҧj }5x{q9i-Ͽ4[˶{G FFxf<!R$\[Bq^K_:201
 H6jjx5Kj/S- !x wc'[eOx31 ļT _~[E-^+ x31 2bj7F,(:_\ rrx{q_rmOo:o
 %xθqB߂_Lʟ^:٧ /Bke փ4x;mvl\ĢbMkE%'+vgŧ&秤¤'NN|C eCxʸqBHJXNU'oߩ=wi  x31 ļT _[\.Nzs]ȗG?Lqm0] )x31 2b%Fk]Ր6:ߩ  *x :ȱ4 q'ّNaIxθqBOY1PP55;q2 ^x]Kpƙ9%	Ņ3_1ЉN![1o7(.<A@wtSD#}<t+=]ơ#k{+:B):q*q,`Ȯ%gk޶E?wjNF1ޤ2:Qu"gSPLb5m4Tdr7bS(˩W@?;FpOެ`sgʑ'I1pE]F+4}|TpVAtAaŋQx옱NZk=Pa%zhm#,^%Vl-G#R]m]N,47p'Dfxkkws>^!#N{{ҜBғd86+q x340031QK,L/JetFKg}alBT%e1m,-?:)Z8  19;1=_7sCgZxlb 
Eυsgm*9<e{lIjq	؆Zg؜ÿL.^yF Hx31 ļT _*O˰K}-r7Сx31 2bG$cO8oGg x31 ҼĒ<-iKO&V*?ĒD̼tYKYD-9jU9EOp[{X]cUE`N_b̼ļT2ZY<~<c{|G>Ēberb9Q)<jn**,dqIrhle}  Z%x3 pfr@E}{f%2q	4N`UǓ
^}[%x[\pCFFɳe&ai@&-ak. ((/IM.IM<Iei3 Dr"x ~6	žW}̄^v{kxHrzHz@ +ɓ&CKv>#si.GU100755 TriggerStrategy.php !R\ :8Eϓ565xK %<%[V)|?9}$y2E\ޅJeT*k=S"ۿ1D#P$x[ϴiO[7<^7]s~^IQ~SN~r^AFh5[X{W~|:CWT|i*y	,ѮB~m^|[ͽՊdmJOnqR2F S3zx{Wq JrN~^jHeA5&d&+@CrE'OgcT#	S9#䳬E6a n
$xq\eB9[AiRNfd~FEv̼E'0NndTQaFɇx($5$5e;|&qC4ipP~~IhqjΓL
?0OcN,../Jlٜe7?S- H3"xni!}r"gAQ~IjrIjl" ~Lx{]gB^eiT҂Ēk. ((MLxSzo)FɍE%%)"I"c&OgTQvC" xh$/=[Օ=)|hv8#Z(QoPF-6hБo+cwt5/.^@gc^޿6}t\<_DmDzg:ja>R߈;xpM?x_8yGdȋXePAVYFDԜb⿳J(Հ%J{:3eRF{)(8ld0-W{WRy%qcH(A%q!ҷ'
g+cjpB99%o} !R` Ы9ݳ~#x;7{·'KN+ȯ_Z\_QRRNt S- R[x @(r?hj;"r;"(<HVVkoJ#둘)UH`㾢BEXy/>*ũ Zy:Rۂ100644 LogUtility.php Uh ĎBِTʓB",՛%l|xPnwЕu <v+5UX<xq}/JZfNj@bIbK|'3o| wrxʸqpauUX]~Ɖi x[źuC$D&O 1Jx 6:&$a٢6
¤x31 ļT _MYS3'w&i9-;gO! cx31 2bSE_r=ɱ;. Ƃ;x{qBȖ?Hpi<qO%-x``!Pҕ&]dsb	8q{ Ѐ<x[˵ei

y
A\
PRTkZRPd"))J-)-ʃLK.,(P)I(\ԬgvqjI@bqqy~QL"-/,K,IQ$7U 9&*xʸqBHnlO;o^%i Ј<x31 ļT _]+/ͳկ IСx31 2bUYW.מ'kx b_x{qFzoXx6O9(~Bv醉 x[$Hx,Ob|V0JJE[aiۿq ìUxñcKfbz^~qIfrsFjrDǵ&%d)&fMdT<QxƬɊL%Ey
"ʋa5қ722N<%;s  V*pxȱmc^bNeIfKbIb@bQbnjIjs~NNjrIf~W5 RS&(&fYLg&d&O(?9Qv)fr?E'f	Oa	b-И<{jf,b2  :x[ǶcB(嗤&(eOLQrTRs3e($%&g	tY)s9`HlɁ(ՌY@fLgpi	n
/L|IL.`}& ?BY'x ɶ`1рي	x31 ļT _SWT)_匶6  Mx31 2bAZ}[KZYeuѾ ^x -tx<+gW"THx[$Hx!Q-i]	:6 
xk&Y($5$5E!-3/1G!4/$3?Oa}FͩƌhJ&/g)WwR(/WHHN-\x#HFĢJԂԼ̼Tu!aQU g<xʸqBHVNo^ٓ7=i x31 ļT _ٵJݻ'~5+ӾK x31 2b?*mҗb+Ŭӷ 
lx{qBپw
{ٱM;ob~1 Jx``*.j.zsiuh{}a'D ڎ Xx ;V[^mj֟7Ofՠkpx[eC
3W- CCx 8h.Z;͘Zx31 ļT _a?XXqu̅ x31 2b{#r/4E|I+d99 v7x{q_~hߪ~S 3~xθqmfюCq:nf4h
 
lx[\tpͷ=*v4xʸqBHȧb>/_u'i 2Zx31 ļT _7xF;*s	 x31 2b7:]E.٬3 px `ĲG.}ɛa6̍Xv'x d*pCs{	ZxʸqHuⱇaLӹ:eyL0? `K x[zeS*Lr2Zs)(rr aPxʸqBw$?X*дa4y Ô֤x31 ļT _dsSKZ#N x31 2bʿ/N=g}1OBN*x{qHZRѥ}G6d|ɛ2o
 TxθqbMJ2bWҼI-Sx[ƱcRFZ	5.3܊-<nɘ \`Tx |d),.kƛx31 ļT _9\W^x.
#ax31 2bpɐbϬmH  0x{qc샩_8{8.W}Km t xθqb[b}>2?<,eu3 kIx> 
A]v-^/HE
Zl-.ܱ4}u|xD~Fs8!7HQ-67"6x340031QK,L/JetFKg}alBT%e1`7Xk<rӹPى½ڭT8fWc P(.Jfj޷E=GyOweMD$Alq3_ls<# uH%x[̺a3#-U&?e lx31 ļT _	֝Wx
8Gъ x31 2b˒C1|y<cwKNZ x31 ҼĒ<-iKO&V*?ĒD̼t+,w-zEbVBUe1̐qX(ӥ=>L(+.IKN*XX5Xz3w샨--NLO.I,)fp~>ۍp޶WngU4**,d!kJW_< _x3 0~v+\*H]ba}>2qUJ[K˼gJ*ƌ.Ilx{XpC *evex[ƱcBHPrruXh(R=ef[1y;s M?x``!Pҕ&]dsb	8q{ ЀsxQ s#SMhy|19H;*Wwd 9f(Qz?Dɱ-Q?6SY| oMx[̱cC$?ʛk1 0Exf E!p^,	d
4task<8Lf>$n
    }


}
%6x|yAI%uZOܞat(kƫ hxʸqBs=	.ߡ*c1q< ǫ:x31 ļT _FŪb__` 0x31 2b_OLe-}͢pj/ :x Q 53uFq":x[$HxC	W=~ޗfZɾYhs &ExʸqBH2Ҽwk,& NʉƠUx31 ļT _M
AKb'L5P8 x31 2b-3\*}!Cv Qlox{qkLpAbJ V7x[$HxC	Hk4CZoЍ|zv)& 9Zx۬YqC[~QnbB~*6K. fOCxʸqBlAM\ms6,_!?/צg4y 8x31 ļT _N&aj<?yo3X9K_q ȇOx31 2b97ծ)ףg8?:m Ѿx31 ҼĒ<.-cS՛z\7ե$$&gg3h/aȋ!=VxuoDUFjNAjپw
{ٱM; 3$1/9b5dTzkPQ[Z\XR3zLU	aM**,d72)XcJZ}l 2ZxθqB:}KN]rWo0q2 lYxkaws !MxS [7S҂9FZVDo]12\o!@	r[	A¶Ho-]Mˬ_A%jZx[*@|艏c7+16s Fpx9 dժC)~#jC^x"DfuϿI.J3"x;ryBdNFuîb<uMTMA*%I9Hl'f E%Ey
J@` /#
\xeBI}t5&d&+%d)'&hh*TՀJIFf]f^&P,\5($5$5aDBY~fXI@&&X3L#
6l6F&Z Sv-x /_{,ϑ
ߤx31 ļT _W閟3̺`v^2Kx31 2bWKOz*cfIj3s M>Ax{qwf6Vvx0lo 8LSx! /FO"tpdҳ)yQYbxʸqBȯ5.0}֓N_Zi ~x31 ļT _;M	ѳg~߽_+6iA: x31 2bwm)852)/ kx k/!&W""_x[$HxBSRoSE|lJW_ysc1' =xʸqBLͫzȊht.Wx31 ļT _*yswSg|d 9x31 2bwɞGm#'. \x{qUKm5Uؤ;㚉~S oNxθq͍L~]ݬ{~DV jx[\pͷ3OnP>浊e DxʸqBÒ{xԲ;1U,2i ISx31 ļT _X. mׅm%M 	סx31 2b,Fsjfz+c  4x{q&zxVmW,Ή ̬?x [XIXsNN2l3oO!WRsL:+Hb StT?=w}v<8Q^YCnޓ^TsXcz$<2<Y-Z\ 4xv+ #UBb݂"Q
	ì^l@0ȘYɓ=	Q_WSl GNQ&Ic̐v kx1$,U!5 '25U!94D=VGA#3DS%%$1Z=4/4UHwr	J,xxXA:6ĖXTX1Y^HQs:5"3l:ȂJHvFɕR
]%@<ONnr`]}`k7YQE4Z%;26ZJ
Q<OAir.*uE&tY;Z. i
\xVOL#Uta,R)\bYJ[خВ2+Yk3<ڷv8
B_xOL=٘ٓL
=4[_>Y8{wwh?g7F'Ócj5_$M]/8(y߳^*c	 W''&RM3XprLp3Ѵ5Q]epEnIU򙋻:SD,HZ& "_S%ʰ#_3G'~BZreH+syGJj][ce̅XS_1ȷ+MS74|E<W ~n+He2]dT\; s՘UjPRAUg5NsN}U
EДqaprc?C58DnAZ\Hs(
!HDA8T`b0Ox#<s/</wn:iF(5ʼlfh";zjrP+CKT=Z52cyl" J2ܳ6ɰfgi+~f?Rkv`ܯ,	yXE6iɇCsvj
:?6њԓ$dz i_rqEΤBZ\7B^ѐ4j)0?*\%HdP*%dI:D$j>XĦ
FU<dM`с\ikH&'CcDN9YJl ,'σ=v(ՆjLp`JL>*k`Ƨ.<hd:]t,ilcRau5c~hL{g%8!mk^nXϼԐ%[tYL¢v]Jl^f]%:r-P2a5{f4}[2JJvx_t:{Fxyiq_.8 Q-]ɗ~z0^↦?FWɧөo񼏅dnig׍
Ab"dmL;ǚa®`lvm`6w	GD ,\䳷@~gyǶKM2GWc_9b3{AsPցvkPh}B~бV$8*[N]^g$*&XjG'_a x[?ISn̼X̼MĒhԌ̢&+hf%`KL.,Ku-ɯLMuy.3cdCf)Wׁ8@+E NNdd_sB3y0y%e[ /1@*txᫀXJqIbQKbIJj^
Y@3c"Ҍ /H[@R'W f0BxV]O#eJ:SKq:a>
-)qЙWzIt{/p^k?c/L֟;i;SJschs_EhF.,2F;S2~AA%Mmr^:w`<imhfVƄs%Oܲ$j%A倗}NYclC)׿6kG+V0墏yByv#}N&<!"bHe4jdm33,	 tRawIsge+(ϩeyYtAE6se4+sbaVؓ9+\ZG}mx~`܊q_[*6ըYnOټtÌө7כrp.mMѧgdbT(WJ椊}gc=h./d^׍F5:ޚv*k<>FհFs؋V4}ZUiS_z4kb"*Q%aLY\ɤj.L=+vنg.\W0 %8k31d-sŹ̺mGQJ[ziWɎ,RU11Ϻ:s;YVa|ռʶْw'c6
8mhyEKګF,5Ѡ܌EH<r΃=ބÒ^1gឧ{m)_G6λh-DT2@F*R<VCj܈*@:7`MÖ,:]S|v2!7<,kef$;9
x*ՠeqyjuj,FQf)X$Cj{puvvYj2;S~w+ff3^vu6I\∙S$kYMFw>ne.!VhhIטR/R-a2YQfq[%]ߪ	'qx	6j8fW<ip%Q)p$檃зwծmT	?-ڊ.Axz`OIA	"pi&)rW&a
5Niy;K6S!v8^G"(­N-l&WbKs)}n݈&b;HV͒ЦeSfji>zGIyOԻA/X*e<gj#OX1xO`e+83273@4Fb-!3vcam.sՃ?DN4ߖM>GWmiiP^{ nc>PZEuxmeF#r=tڕ
5p^ig:XacS)ə:EW&]Q: Ф~I7	uh7^ K8]]E~+Kl /,&ZNU2dL,͖y×5ءFKqd${.R-gEU5Ne4Փg(GOA΁%`^sYF;c>l΂c_	~)pdpLIeؒwfM曗ﱛ	U1+b2L<h><^|
%I }j:ZL(bTY%bwRz18zoMh>ECCx؜[KŢ(Bc1~KՆ(	]	j޺<J3Rzu%a3>	V\dW%U'1
v=8]3.==:%Sw6M/a/}x;Gq;cd_.)	[6pװE$$(楀X73 IxXMLGV @0	 !nQNRD,{ǰuvD4\zh**Rs/J!z豧6^r:럵׻vR5*|@{߼}3o~>}tl
+0&\(&1qdDԃc藱S[JfnCl?l*!ϰ~0E=9<
D$"1?ibEM"fbCO2u#C`3_QPln͊![IT;ʻHhhP//F 0d$"@\HgRPqXځå7&c,1ṉu{F詵:/U\}UL7w_0nqVv'\)AђE@j`'"9wH2߃	6+:vD6,"?*w .N%@iɬ({GY9z,1VMV;f*3wΪ
?}sԌ)4!U
n\TKSPR(#W(@пtB:ѯ=ŵaH$qheA6-ڬGWVtNJ&LM+J;K*#FIhv6[x!$|gJEýZklq\-]s~k >#xF-g}NR(T5&	fY4c63	Qd6]	H$pKÒzQ7upR㪝N3')p臖'vJٔ4lQz 2␗HE7NVZG2(NtJ!x
FzD&N*0-wU&'=DXu]-qR%[~-&Bj5^^ۙE.i֏3PZ~G1!m@j+SakÕ0`68Wa=44et~a~^QH\Tڱ7mdc)tlPd
m[!kӐX	luTA~\Ч9)n;w ]`Ժf0ރnā5!f}~.)EwӖ-.dyJF_EXk!]?<?~m?m\9-p]1hq!LYţ:y&M1vMxCae%Ӆ[V5A+Dp8aőp2rEec_iA_tǐz׏lOWjʷhP^%KRTTiͨ6Sg3Re͈rˡ,EYνvY2"h==uvɎjԉLOУH %b fp,\)n_s}"pVE[\FwNhKG,!Y!fmuGɓZl6Ml׆(D/<ѴϦ(
ɯC7{TcMp;Rc*}(E=ĉڃ16Td39 Zx}x1=ao@'/gQ@yWm +ty@9)Eig/ߕBzF>vr͟40=SCec<W*˺p_@(Ԗ"U	ά>bIpLSͤX>;g8(;ΞFM 3Hkxk+Rac"T57aB)d<W{K2lnBUYNYƙ젺~szz#)XMME&'oޫ"Tϴ~/}vs`1!g G@Y*xSO`cXsm1Y3XtvQ8xļDO%W_xj;ǯ}{y=߬gD.HV-k4M!IץU
YM2M!3H[dGArcNyãk`i\?n_MOWW˼Jz-w<uDa1bqyE5L&Kmc*1-;trlvo13%ŕUciY \t܀-}SÄpY:4]J[Q+Ut5zjv)+UA;LE"2l|}>nq̗.cbJ1wޫuv8?S#O@ךU*)-2{y,O JcYxx1ù [p>5	SY4YHgYD9: Gaa\TX5eѴn%dB%d:_cbھ_Z$zC 3CJ	Oef	zdV3s3Y6,o]V\+}}f｝ZhK|ةFl*mq8|&P|cz䠏eX
%e3ES 3fxXsDIZÉKTRkqZƉ`vZBp$RdJh808P\raʁ/8+Ɏ,<־}޾V$*|0n*L
y8sg$yATA (CS١Z!Z𢟎
L30!Qm%-<oSМ˺=ZĎMq{6EhrUJ-j~XmO4pd7n5ʇ=Q{"]IPyY٘D dAnC5Ja6$ F/|.#WGBWdi[{ҏ~v{9X*K=/nBjz=}/&]?	UQQp 㣧#cFt 9/C~7(]+F744fM^fvp[ϖ)O.QNSfy%j9|ffĂmaR$<LnC1%qk,,8k0c:C:=1}B[cP'u*%;0qJ#GDDcIHP(XǖD."+!/CW'UFN$Z͑@E8$/?a">pp׫SzFQo,La6ߣv3_|jXDIOJUw#4)Eg1fӿ|pqi]p%pm;HT>glwhŨ {,i(ɂQ(J\4J>z(b:JRdTcm1rm<srd%Պ,Q\wV7Ś
2\UC<g#+q&bE{\,r;	)1A 2-ܣX]ب4NOgpQ,1*y^ewW8ewv y#UiwH͠oZzwM^Cp_+.D`YPT+ rhby%VlAז'6n2E~8jԲ8i}',^7匽.>y>mkO?!?JGh@q3rG[gp|XAT9M:Aw[ruF)8۶n,ҘkK´~i,p73rh!	,8ٷE#ӪEa@3zd*N0J^Dc>v[_ !MiWzоJwEkNt6;|$Ue1;x9lip58r@WhxJffϡqḳ=}8ǷƄUM(Bk<)zc]~}8p_8;.x0cH nTiHM5}8*F{N>b:/2W^}5ti-"0_gO9ihi\(4k4V`8GrhD9St	pP<mHT5Y>V>(,ԆS,Q;QgZ(ԎY_R'aDﺗ5oǰ->ձ:m`)[]kA&Yj>w<]j}8LaS_̩S']{$JB=9,I$3Tf	i*`;
	(`9/Q:bQ\  eD2=ʈyZs1#k;'(eS+xRTa8cd=+)XMD&[Il~$.
~h$;Y^jsrD˘aU"s7j1F`.bRτrיWaJ <?ExVOW׆b`$6nlK>\i݀IQj[]wwM*
-TX%7&*UzTzɥV5ڷ6fr{3xkqb2rɃ[H,x9  CO_:>>r_R:""{]=5w{]}4e>䉩
#/(7Spd'E!{y<#X܆$WF51GYyowexdгls &yٓ0|Sm_j4g!RnxdС}@L*praπg=-E9$ⶖ9H2qxXQ*+C?RB	kqU.x@9sM$6/z^&j2Ih%p+j[<v8ʗ$,*W:6lɔ$qv^tqKu,;ç.x`:Gg>m,zIiٛL$& B+E_D9K}Y0E*O'8/(L# ʙ8](	~7W5	C\=o!75&mJE6FrF.)cWl3hq=I<֢lc;0}+8}CQYur<$tWxF82em?MU4R$gChUS9J9b(jopUՏJ`ym51Ҙ2GM#׃E Ѥk2xmU+dF<5Ct~^ڝ
vt&iMB|.BVʽ<<	{K]6#kO콦#9ohQ+`w-#t|ǌ&i'EU'ݝCK|}1ֽBYANG8Rw8l+E<Og=9sT:$etfט1<b"	4,)8{ok|[kUyy({]oLF*D {hYIacRGZ\Ю#T{zHf 5@"lK덡hsECSyuH[(~z=wZbF3 *5U|V6?'욺.|0YNְ[t	d\p2YA^7xyF5]+
OH2ӸkxVeF'N&XkJL(79Mrq/dbQQbe|AiqJJbI[~{QbAry%:
y%`.%y%9y걱p8O-!#+xd&7s	O|'iaYͱۙj6
h#)}~4'+H1r wNGx[Ju1kErjAIf~F=g6s|=мԢb<X̼MĒhdfs~i^l*ZZ\
 PQ_^ 7*?%vf[eURR]+uTJ2$N|G_r5iN0JzA}~t/,  bxʸqB\V_|^kX'3q< Hx31 ļT _ms9Tn}cu Gx31 2b^7flBs&mѷ; Kx{q9g|'x,}K+ Xx|yȥjjw_8xaތ60ex `w`#V~ň4]4x31 ļT _$IFqkct wx31 2bF?^_xQ1vfAHM0 {Xx{qBWo[;.o*{lw n
x[ôiW!$/Ky;)9]{ug w@l\x{x[aE,< (HMXx ++5ĲsIx31 ļT _/V4լug[h x31 2b;)ylJ-XuGFyR Asx{qԢwvZkv+,t]p Ejxθq/xyh¦ZrxZxpCu ~*қ߫	 Wx 5!}ۡrxlhx31 ļT _MZHQUL6L }x31 2buSN_ݮ繵{; p x{qBHτk}]V?m.^臨klw ڋfsx[qO 
2xʸqB%m#mP|)i ¤x31 ļT _3of
j{+˿xJ$ x31 2bٛ_?06/Z'xe7 >x{q*Ru~1ܮwo
D) ">xθqBQϞݭ'T4:yRw) $BpxʸqBvSJ$iDJi ԯx31 ļT _3ݼۮfAl~2 W̡x31 2bU7ω^Vᩥ] Ox :y><,ਿ4 V%KNix340075UpI,IM,KHKI-+(`h n[l_(]tYىWW,ȫ_ڭfU_1PeyeEŉ98l8dUг4-ZE3:gfb 
%E%|d~^yX/%g$!L1	x;Ux):7L26a Kixkk:6"/lvg¤i=9[b?<ނ "x b{1Dnrr֑x31 ļT _Kd[{h& x31 2bOyvqN)}&  x{q9+5l<tY< `Yx7 (x&w[&ڃK*@<u'TK=-Rx=UuCC,8xxRKJr3+RS&N/	*H,J̅+$eddTY +QxWeCdofɫ=dK crxʸqBHMUTйLxZ7=6q< x31 ļT _MT^_V$ +x31 2b/mLأ?_54 /bx{qBWgc~#&T78 dix[tqBE N3xʸqBH܆B;Q%i x31 ļT _m~]a&rnCl x31 2b4c;[Zoav& ǉ	Ax :vn߭UUN>CxθqY_Ւz?M״CF [x;U8ZԜԢ7bl u-H `lF@!2
EEE)%ٙyE%e'0g	 U%jx[?)ڍM|> ^O	UxʸqBHWw4[o2M<wzq4y ӡx31 ļT _ǿ-hM>t>TkGX|J Xx31 2b56۠mx]r_*cx{qBtL}ݞ2JrU/6_ |x`8!_T#5 H jU4%~wasr i;xxqBę kxʸqBȵO^opcGU܉7Ťx31 ļT _~y^ʳM~| x31 2b%͒fot+,` _x{qBt
^ֻZKY^ϳ,zb~1 7x'wSvoKbIjHfn5WiqWZT$ZbŕX\  NH)H-RH(IK)VX)7qćs'Mɨ29EvS[Lw+J34Tsr|J2u4TRڥ&hGkn4ىes;N-(((OGA8h#HTs?䫜p$I櫜Q%Ey隓ݔ7ъ7a$h-~ əwx){CvszjD >jx!EvƸ*> L(x"qDbRqIQbrBrNbqGjNAjW55UKRKRSJK2JK44Lrqr _`xøqGbRqIQbr|-FGl*m"xĸqs^zD ?xʸqB͸Iz?n2z#TeRQx31 ļT _	N!9o\qw<g¡x31 2b#i+4}T2h~Xo }zx31 ҼĒ<.-cS՛z\7ե$$&gg3dnWy~*H)H-b(XĶ"Ɍ?,ڞu 3$1/9bWgc~#&T7--NLO.I,)f`27WafyER{**,dRXvK-M| \=xθqmeqr*z.5Ѩ xDxq`-W'Fz8:rQ E?2x ~%8`yȊ;1f译x31 ļT _eozoLr[}zR x31 2beʯnk\u'o+l u3x{qB	{?kybEۏ%5x340075UpLO+qKL/-J,+H)H-+(`X|a֛xRElbrOC ZrU`G6Dɟy*$37%$I5eVukT'm\j3"Դ̼\.26Y6asr 5h\xk1aGjEIj^Jv< jx10F7tPTpС%qImx|YĽPyhN"}=jf,
뉒TX؞kb3WSa%^\o#+ĝZ^9?j*=x'wWnB=BjEIj^JJ6> 
Gxqc fOL)Eyn>
z
zzUPRTiͥ \\\ ĠNPxkkErjAIf~5WrNbqBhqjKjZf^jDG+ݹD+*DZs) AAiRNfBqIb	*KWP	p暬X{>Fɿ8USALf*N,*JNO,.)րK+L>$ʪ0y7.=%E0i(jjB\LkiA$&dԘYW*3MAC18>-3'U85'
ZMɶ*yiE @KRKRK@;y?fA]fuN- $tB_xʸqBȧg+w= y@qi ~rx31 ļT _D\|?an5!x31 2b}%(_y-Z] +x{q9X֞6e kPxüy<dO B x y>~fT
 Ƒx31 ļT _vmY?+ Nx31 2b?N7?^9 DEx :ኂ
2|>ɑN5x SyBP]$t2xtx[8COw*f@d^g 'x  elƘ<w|x31 ļT _N~6l';{eTȎex31 2bBۯJ~Ʊy\Q ')x ;똣
Kp#٠БG޸F:x;xqB|BmۣuɷT<ib	 ĝ xxA(3/}}pIjAPjqiNO~ojqqbzJXDV!4'ǚK
Jr2+'2*b:َMz!7BV
U12NfI`r=S\F敓͙&󳲉i`ud=v16M.`1%K;jVk2i9);[;<$*S=AFJ֓m9T<!QR\XRZ= qǡf&8
qx?F⒢̼&?bԁq"!LULH#.9Xk\Ykf¸,?xʸqBlC񆬲;ϟaTzj6q< Ťx31 ļT _e,ӟtx&F x31 2bU*_SJ% 3x i~	78gstᘑ"ЮV~x! >ھ8镓k8
jxZ.6jJjIbfNjnYfjnJbIzB4|I^PN!Z"8DțI'V2v2#䇌76K1ofNbM.KII-IMO,QV\SRZXRZ\XTմ\U N3*#x[.9Orm5L&b$`;ـICܚ(3$HC(4ı(2z<s(f_N jLx'\b@fENԢĢĒ\\\ D ?xʸqB}ߌh>fٛ&8p(0V;0>Fl x31 ļT _~1鈫H_-21x31 2b7Sg+^[Py߇UJM ox{q96U19z{K&Sds 5U	ux j(x&w[&ڃK*@<W+-n~21h:ȜPmTu'TK=-RJBDfuϿI100755 ValueFormatter.php GcTfhu#KeD%x:  .ableDescriptorUtility.php \ڑ0.`T(edj^Ix  :ժC)~#jC^Nd*x["GlK~nAJZD@jCZM ˨V>@V#=$V~o,&
՛g  Qx31 ļT _=t6eʛ}Qmw ܑox31 *v[Y Nx31 2bOt
^q5Kn9z 9x31 Ғ̜̒Je]KohF0
ruT O!xə!^YKZx<ڂ- &x;8uB$'2*MVT<EL{i0{
6SR ZZ. t x ŷ	@Ie;,Ѥx31 ļT _렧A00UD x31 2bQ~GNIx)iM Cx{qBȹC:)󯋼XNJ7 x340075UpK+.IKNu+)qO+(`蘵]ȭgo>\}f[KCFtUZlgmDCM/U\ZZ\SV)Pj]|v-U5wP铟Z\
c`BiNqS  Lpx{Pa>Ģʍ{7T  k	x{CuBd&ςEE
*%

ѱ$6K02N<+:L\ :x iVQsY
Ux31 ļT _Sγ5N8('!v <x31 2b:R'LLN8i }x6 :ui2ha88!N9(rʮDd4 cβGx340075UpI,IM,KHKI-+(`xEae+~)mo1Cde'B_u_ ~;kU-@e'uWn=Ƕ-U KKR+n_J'H L8x]KpIbcmjiEtl;Z/;௛~FMJe2-ǁ쾝LӎS-Nyf2~r[QFk(Mgt0<	~	ВI2?i87ᘈH,ptߋĊme.הov%s?_IXwdGPYvRsFWrB9Ѽ@+V^\RM'uT_*x&\9qWqH+I?wLrDh*|SwLq1"~-&4T<N9bW-+gEA;чꀟV$H>4ܕc͂6ZU{t~@k<sw")PVxQ\!To?]gx;8Ѳ 
xʸqBq?&
CÝtۇx31 ļT _|gl2û/ x31 2bZ	5
	)4 Wx{q96U19z{K&Sds 5UExʸqB_̅uvp4y :Фx31 ļT _Eq&~q!iYs75  `x31 2b_Mkމ?&py>)v &*x (rʮDd4 cβGtxʸqBHc??y1a%x31 ļT _]Mk`,X! ix31 2b=gj]ߧ;w9 S/x :bF<ӈ{ܬ*N;)ˑNxθqBz֏m/9{][Lg) NxʸqBȻ'u|*m!fnkݤx31 ļT _ufEs&_*Vk) [x31 2b'__^- Px{q96U19z{K&Sds 5U*xʸqB'ky4gʏ{Gx31 ļT _y*26=rgMU sx31 6sr8gsqFAɳ jDx31 2b}=o{*ߡ~ x31 Ғ̜̒J*[%Mk7yx> px340031QMH-O	K)M-,I-.+(`Ȼd[9#G9!!Xm:CNzĒ"ʚX
:hl +(x[>}BLF::xʸqB˧8bz쁚0 v+x31 ļT _G|2Y0Uj&ތ }[x31 ֯OdN.3M9~ x31 2bY./V?[{oeɎ@x31 Ғ̜̒Jϔe+=v{ۦ3s9 &d[x˱` qffx8q4 Ztx8qBHI,O-gZ'R<qLC :x31 ļT _R˭Jj/8 Q ]x31 2bz'oԛE]jM ux{qBHRFNHc41 EgMx KBQϤ<[0>Cx){IvKbIjHfn5WiqWZT	H-O]+SJ26ƈ2kiq)CIFQ~y1BTBsc'JbNo~^IFqtJ
`]\
̙L;Y]+7eeb/ VRXTX9 d;$7;p3Nz]<X%6È]-<L\ d,x8qB3k>{޴"~a	+} Ťx31 ļT _
	T~?Ѧj(TF8\ `x31 2bmI|hJrϭo= ڄ)x yqG3hڒӇr"[ix; >ھ8镓k8j"5-A;nMd:BRPlJ;x[fx%uX5/_7?m>GIjnANbIrw1]db l9yהFܱpM\ţȢ=ًOvr.*|LM (>9Neo (7)*x8qBA5Zl- x31 ļT _oiiس{_mx31 2b$d;	{m> S
&x{q)ugrNW_< Wdx; >ھ8镓k8jC퀣$DD=ѡ½#RPr26x[fdԢb[huCcbuu#3ʎRԴҜ ~Ҽ!EEIy*Pui99:
:
 B8%f$&夒k:XɁ\"K4Vgɺ8ULg4#1.˲Mb(I-I,I|Qn.lsZL v<'O2و;v<xYc'{N՘\#?Yir".>y7S+S+2K5K2SSu&𪊔'&&fj*؃$l0$Qyi@fe&'``09_i2\$VXβV'g,@Tdg~͑B ʀ"x[`a4uN˙'3);Oa227/f,;Yw%>?n ^ x8qB˥\6fMN`2M l
:x31 ļT _5̟"Le˔6 <ox31 2beԢ<MvܮN }x V#MG~?Řv"մYx[$HxBtVXlo6KrKƜ 3x7nC(məB7kOާb1AuY/L߼_irdv!͙B] u :QӴcƢ 7:x8qB$Vs	qIu- 	x31 ļT _ٯ90Tuzq} dx31 2bAªO ΂*6x emG đ"yx9 [,x86b]xMoLbbǒ<G#(zd:GRP6cSx[`2dvRx7_ NPx8qBȡnKOO-K, ax31 ļT _vۭl|7{ ax31 2bKUiNf/em-
ƫ xLx{qӚ{Zݫyߜu5 [&x9 [,x86b]xMo'c>x8aޯwRP5eCx8qBǇ;ڪٙ<WxO͋>F ߤx31 ļT _u_oN8䮞% "x31 2bc/7mN^ZUU @x Zjz^[;i"ix9 [,x86b]xMoKyݒrH8tMteaBRP7x[`2dC<ƙ1zL&- -yS8 cx8qBȎ'
.77EC a)x31 ļT _g$/KW{씵';
 x31 2bcJv29o(<g|6 `x q.g\Rhџx0"QG<x9 [,x86b]xMo;"&JMԆMTRP3I"9x[`Kkw'qqO(89]$3-39$3?X$$1G7,13'1)'U]N`r Ң2edeyiťIEIEuJRsrKRT ,*åb7뱼aaT,8ّ;//Ef@t\"xlЅx|х'3>C넩2q/͂jp**T8((O!zr 0klYU C0tu# )9fNp)"Z'I #~x8qBȤG붭5ADiU 9x31 ļT _F㇛-<ˬk.% ;x31 2bhF<\,`|qo x ];7s%U(,x340075UOM
ON-qL++(`P)NynA*S Bnjqqbz*wި/,a9-aFGI ՞!x31 <.+O2^8/K҂ĔTJz]={ѶEWʿ =iZJx{F٭ʧfV*+,c:T%u}F͇mX &xxqĀ{Xjj B+x8qBH)7OjrWps线1	 x31 ļT _!u?0hMQ lx31 2b`t-]rMWR[`, ¼MGx{qzc?wlrZ[Ti. ̡x340075UOM
ON-qL++(`P)NynA*S Bnjqqbz*󮉾륐:Q[   x31 <HW4֚ٸ(4]tO`VPZ^ʰpϢROg6ڶ(=J]7 	tx"Ik<]KB$/wi100755 AcknowlegementMessage.php 9@UC6ϭ*nE6Lu755 DeHe]4{ٜ_!ekpǠ'RѳdxQI2iIhUS-uF+W!ݬ43Πi@ϥ@AF-NQ`Է곥Eta2)pY47xyx 0"ms,F
	}%kX腱h.kuĐ5PP&n:p$t{kV` /
r37d>A4( JXU4<'),TpdPM]KEMx"xrw䛲n,\fwx8qBn6Z?KJ Jx31 ļT _׵O&MT-3{* ߒx31 2b}2
u"[/M!_ Lx j]KϾ:?"x[$Hxfcퟒs+Y9g+Xlx'\b@f_N ix8qBHá}V,%O  	x31 ļT _(cg63Hyջ. x31 2bCSH^SqzE 6q?x{qm>>j\
D_ݟ <x! 1R#_?Ȇr Ex8qBwBlGu6ӓ wx31 ļT _k|jenW áx31 2b粢̾֟eл 
x{qdyRtOT?7 `x! taYWAO[!76;x[.9Cr2dC&͑L~\ ,=x8qBȃ+Xn\{?o,[L#n Sʤx31 ļT _82F=aOk ՘zx31 2bAw%9׉}R[\?^ tx{qHĩJӛn?(x@	 Wx! Kq^NEb|rlѳx8qBHݑ&[ޢo8{EA Τx31 ļT _l7K};p2w3lK wx31 2boywۘ3-hեBX&  +fnx 	]۞v{4Uc"L5x[$Hxf3rSyU75Hx+X_fx[,VhJvx 6wsx8qBHգO_jYss9۵jx31 ļT _57N0K2T9| 8Ux31 2bۡﴺ_k"iWsL[ сgx g~↞D=ʰv&"c.x! dh2ǘaf<\ ox8qBR5ILgڲB Mx31 ļT _=)J_pQmշ x31 2b[ڝ1IiO wDx{qe[v,n^l-ÓOMxJ D+	x! tݺ`
^kԳ/Tx;in1kErjAIf~D$a}--.Rp((//V_?(4DCJ!(rj#v({]eĒD"ĂX[hJ̼MĜ9"k>sKfd 뎝|[$4'g8,e*Ź99`'rL:[wn'pMV=PR1v$)@jW	2}$wMIL^%̽\rd-+ kRx8qBH}xiy+: x31 ļT _V1|h*pI[ fBx31 2b)z"ƶ[o  k'x{qCҮRΆGgvg;a% lx; tݺ`
^kԳjՁ+)^mh.k:4xQ|RPD%nx  **Гof[8ȨYQ)Bvx8qBT-+Œ:a.P 	x31 ļT _^1sOuѶN; Xx31 2bٯp]uhr 8KKx{q}M_~.M6J \x; tݺ`
^kԳj,A5@tsE樳RPIBxu^m̲,簻l<q;́''0nbf̝<W~3@)JANbrjF~NJjQd[QFE KNVT  !Rx8qBIib?|,uv x31 ļT _L\dӤ"\*i\	 fx31 2bsOhnN*~ؿ )'x r^DЉ&"nx; tݺ`
^kԳj'g79\WqQBRP[^x;[mCvqIQ|QjAjbBr~i^Jn~JiNju"pk.  )x8qBH	ǲEwEjށJ ۤx31 ļT _ﯶuJ,sX]Us x31 2bjۦX',ߞ px{q]}scR緜Ojs`6J ܲ5x; tݺ`
^kԳj](Ë.RejaRPflGxۭvTvOg&y'x8qBH3/vݒѷ} x31 ļT _v&+JLx׭,S_ x31 2bc~r5rOY =[}x L&Ye ᷑"Dx; tݺ`
^kԳj?jYn퐈TiABU'|RP[HVxۭIj'ɱpޟUf[\?'P|DPpsLp W̔<[[
y4 <yVx$Qj \|~Z|bYbfNbRNj|^~IfZfrbIf~^z}ԘL/x8qBȽ|ZfTL꽲:, kvx31 ļT _V>zA"X@t wPx31 2b|kKR(]ۤKk+ x Mz.aKVKad"KXKx; tݺ`
^kԳjn73-$۴疗s7RPyu-x3 ;{S!aVqu
HO3A y5GFx31 ļT _5qmޝ91MkW x31 2b%˯Lyd{ex31 ҼĒ<*ؒ.j	X]JbIobqvf^:CLս%O0YLdPQSZĐXlAeC36;Ad$%AܾFS\N(l؛|n"ĒbCͷzd*y͗+J2s2K*,V=-Le3B D\2x: j}hF%1"5!Ȃ.a 1>@2̩=)f	Jx$NO]xt[&XO8#,x86b]xMo+\LP[O;Gg/FO"tpdҳ)Q,p@a]i><UD)nn*Nu64100644 EmployeeAnalyzer.php O!WRsL:+H^tݺ`
^kԓGT StT?=w}v^HXCt6d!=Dx\ַf7$1"Q^YCnޓ^TsXcz$<m2<YMs(FNK_Z\ 4xv+ F	#UBb݂"Q}	ì^l@0ȘYɓ	Q_WSl GNQ&IcO(|xmOKAqմt3%)J PFum&vg
CCСStC!
;t+<Ϗ}f~B7o{JvL053,Gn?
nx<R3$KQf޽cnp$YǦN*~8EYUY2ʺZ"lssaOLdI'.i>8[917럎QժZ\eli{濺ϛpU?  Yi:k/(<.{І0cqݑlQ|:b\VErvXwlR)o`MX')םԤtXayFVN)"egoN vsDTE!kLMk/[x8qBHT壳m.eϘ x31 ļT _IJZ; dŲna Jx31 2bՏzd_^ҟU{HU {'@x{qk32;:Yǧ(J үJx[$Hx\Ov_3_3k`,]ws{  sx-Zl;JQjqiNf-@8V3 wR~x8qBȬ%/6:6ZB Ppx31 ļT _xL21r_ x31 2b&<ȱheQ3MCs  x }v)}	ɳ"x[$HxC,/e,<Mwk/\i x]s6˜l^mmn^|g͍Ih
XS츝A \<(Dbzg'V\G1
Ί([ٺ|)<ٔP*IeBoQߣtޱ(QY^QYu	r5*(QTE셀*EJT7YuE>GyYDuU*JlO
Qfʯ(iNPt6`7<f]*ɫd-rG,QyӅ.M2tYt[ie1:\1y7Y<ΈKWe'{b[↗H9I>ܽx8ʊ$QV"~QU$6Jam{84\G%:JJgĂ
!@%ox}INLPIJ%fe@kEv	_}E
~E~W6axH^o$;ȷ`sTnj\AZ/F<a2)
A#MTR!zA(IOQcdA%2t'#""2YϴSQoMhD¤W(Ep59gM&d?O엀[@|p+ܖ(IgD%Di}.7%4W,y`eȤ%?)'>6_,r-$!V8,J\WAX&oZ%%b]a0KX \U%jNr5AxjCV[Ԭ06$
eL8](\aE_ja0!g5ڊ}"ʐއKnf]^% DSBgcVڲv⭇)Ek)gj{]	aYШF 2ӖX}T(F!]yޛDnd tMA{FK5*nTXB3EVkD\GQ\o87/iI8$${[̺8K$b߈n;$,(fi^%-^<[#DHJC%IJסtŻaE2'bVk7IfҀ~?pH3GI*זB^&ȆwWi>M&y:؀TRM[6p3,,(
Em%|e#b,\2>RoPK!N
9嘈O)qA*	b|dMƠ	5TFjHM\ZK6845CQ	&ڶJA^<T+,9U(ΣE<u[&Y'6[*aGڱ)F[eq%c2C`P2Uңk2sKG`dS<89hGyJ҃Fl=jרbyRPQ
bY^"h5yC0y9m<˼ka~2"`C9|p9uEӚ-TX>H<y-@KE3`huVᶝz_vLsnL)}0gsV,T4n)N9
WKTT@9*,Jfoj⌍q ޢ
NURBY.MudNhI]"zߵS؂E:,G3G8UO
Yf6_4BPOiM}JȤB~
/I(T?E.Kpj?%CNk)gغ%&ęc H"F&pdJd3Vm'ęYfPPu@z7Z$"nN9(?qU$	BTVQ߉O~'k <K% OI#~X͡nԶ`7X* [ųԩ۸6-tdw1ai۠bWm.XVĬ^jF~ݪdm)U7Mk6Z;/K7&.68z)_(P
_DxֶqN~5pC
=_
˯*lZUAoJ}hRZ>ڬݭm)-j°JCTmRxX(v㣷=4o.׶c|ԫbΚUmicE jӂYl.{-SuHq)Ún4B
؁[kHm[<`=|}^#$alA\Oi~'_fy1,;9NXd(rt>v=7?i_S&{3سLr3ؑ㿍@=uTIk;Lb1Da?0`&vixoxxF$`Xk.$oٶvf5jPZ=۶Bܨ[Ձֺ6$DO{I@bP=AXйeRu9ӺL*͋ddQzHH7S[5mMC~JfceQ<(=iVE;ﴽC%ˣ S@榍篿q[WA&cNm*D6j9Y2~MB#=/`co_v/^zy\N?NOX}%ď}Ly)89>=Jrf>\J(\sJ{*<ݬ)Hõ)$EkU'W<è4 먈VL v u7:eW.9٤K$__U/;R\*Q)nhpv+*'znM#vlnto^#<h&7sl>QTL-dG0=tEHK;	BiOJlBݗM"j~:(:|c?lOax{I 83N
\ZѠ@u	}p4WׁZ1
|<i/,71Y7muˁB-D4+FD#?۪BT#YKA,e 5$$myp(Z0;(]wqv0 j/4pK1K=':K5C:>FSUGSh,d,llR(ӈPOFlVV%sW}yt+KS;Tt3/yqƋРex6X
w:po4u]R՘tֵz64*јsCnݗgM>J|S"5
GdwkXGiAnHһu5N-N՚}1C[hK6kI~k=W&cK*l_MV.{K;Sg( nfMi_"mR l/\J02'Y=ENh$g^\BtxK{{:Wp"/ook_x@+z+4;<i[ƁB4If;~oYvC⠻ZvHSp;*okW'>ƧTf0t. ǆ$qR(ܕSD6	BE伊L+=SZ.	ܺ1rU/3bЦsf.&
֭@Av{{2NJY/NmsT[H]PXnmԉ_E5Svc-7NbQxbfz{̵ٜ!u-a[aA݉{-AzO^f%-BrRM;uaD$t-C廥h-~n=rRԣ{SogJ~XT]M:* _'i׼X;kth4Gwwm1M ޙCyO)Cc[JQ{JAMasi?''[=dbAMa-*	"1ެ-Z'zI/yNB{!yZCgf2O][c6׬0+[F2ƹh[D##.}gwv7,+ǋ>ЌKGwڹqGxevvkmL{Fk-8r:rsG-¼ELrleISSَf/6}_l*Au3+kyb:T]<rb>Nmst ʷގACpLvh)M5#brҵj	KX75dYUÇ䐨جIJJMEV9j3DM7RV>
`$eYfF3;3rWU\[.h0 t#4f@M	갉n2;%Z].s(fQA^фLr; .j5<De7Qv.'l\~m/Bp+Y5yE:~cv4E,PpҞyWEGUMBgyh"[ʝy /PP-n3A#ś57v'2=>J|vhUxti5͟X0Mv|]e8F Ofso&##Y6	3pPVnqaoFf gh'7J] }hL:/ڼSNy[EW Ơ73m׺n,L50m2mc<2q357\-'kqOU9-'d*{EsS=Ss3@6Tr N!fxXoEW+RD-#7ѮS'BT(IN];G(wll\V Hp	!	A3 By3׎8Tg{1ox~ċ'>{51j`mT@eR:V"1*fDTH+ij갌wE"/~gam0zZ$74EX_yk\)/ܳM%E%GB>ē&ۄPCT6,!xI٬,+|.(뉇rn(णT0FHBR-/[-TTt!+é<xT!`*ؕ\IrXxdMCD'=<#
0u96RLn@ElO1dQP,%
@%֓D&;TA|P|oKdX;BCH\]/:!Tɓ5.aE\Jh6~sx#d4OdA_C;QxM7o 7ǑAhȂ/%g-Vږхvd7S5dFW;󵇗HU'CuNQr1B!lYfM/.>}`jkKݤ<!ٚ}㷜QjG2/Ij6ѣ;WN`3#TzPTtpPmhBwJ(t(#:}f`.z;Jw_pe&'kR|4*mi	a7{(a65 #I'fGN	f]X@WcMZc
zipa3S@}^6gE&%v-vV2/ƏNSӽbݒE}7EGP#]W~x]xYOLG0c@x(%NɰVs;O-!iR.SK-B+Hwu#_2Ҙ.]'1MHkCCxmZY=66	|͙MkߟC-X"QqVB-Ø$dw⻳'4sw.?@J6UD')$aۊ`kڔxĽ(*|a*4]ڜ8aDy+1U723%a5Ah1;Z!_@+c	Z	o*]6lwBN`\MK<KcF#Ei$)KEp6*FGkE3w2aw񫎔h4%>U% fjX F?*=7#fVl{DLb[Be'#mdQ4Lʬ:zC,9ҴP=S$N
t+&}x` 	ie{'mA(t9נbqkSҤgVǤ- mE>`tzAOC&(4A(7q$YxH2ʑ
qTr/#
*n}"wjoC#=4/[nhV`V<1;ŧ+QtE~9~*:ty__R/?Lxؙ$
%b6V[4\|40HPF3§F1:K^x8qB)LY.mޞ\tFF x31 ļT _Nsּ?2vߘd `x31 2bcs56+HvO/tXl^o @Dx E5(e {{f¼">kx[$HxC,YMyi<Z| {r!! Ε8x8qBϧ<Y'J;Yc @ڤx31 ļT _)?X⎖S#}7f$  tx31 2b9}>zKlgZ.4 mx{qG2؛K-qsJ .^x: F'jZ@%4FM2+\	o]𐳄Uq	1	,x8qBƏO:)Z vx31 ļT _K&7{9?Gs* ux31 2b]b.<HR>QO: ʼ7tx{q9֎+X_BkϹ^ :vx8qB0SMUϽ_ 'x8qBH^狷N+̹ 
Τx31 ļT _\Ѭ?o½+= x31 2bOLYzp.QætGϮ Nx{q΋t3ݮvWJ O+x{q96U19z{K&Sds 5Uix[$HxȲӼ*Pҋuuls{  ڧ@xVQo0~WH@Ӥ벴c-U;5AJR"5Y>B
Mw/	}w;O0(Y!Oॄ>dp?d<Tqwc""FaDD>Q%/kt]4^d8!Ȩ b<	2(1xL=l#FE@Ҕlr#QIs
G-ʼc |03ƌ	m[fioXUTƩ2?úI=bzY޸T`UaݛX
ڣUȵ՞Cݚv[mU< yu=R6AKggmVYiOؽ|)C~q|Egzi kh$hjDk|DHl,w&ctX"]Ϋ;T{^»,&QhiÞsծ&Zpp^w3\,xܿr(]}[Y=V)Kַr4Kقix? ɔBޯsķI=њ7_ #U1諫mpT,)Nf/XUIqE);})9>ův$ -.Τx31 ļT _#y~\;ZkRUV%_ wx31 2bW=R;z] )mx8qB+K]RӿWd睉 .x31 ļT _IJw\&q  Ábx31 2bWvהo{ɬ3D.Rx{qƲ94*;yv'̣ JK2s2K*j_xp^ҞVZ K$x#NdB%'qN^x=(RCsrSd>fG_V*n٘BqIQ|QjANbrzP)ILIKM\&>mr{d'vnذ/ٕ&8VVA%)xkj*+*X)Zs) A- 5~*x{'2UdC2St,oVe~<y3
S4dCvɲ@qA쉓X47r$2 qx:X=5&1=5$$3'2fCF*L ПOx!uZ.̼Ԣԉ&ocvY;=$(4DCğ<{TQ&(.;9vIɩš%9%0P5,\\ $0_xۤUc_jyc^K~rinj^cQIfrN$EsRS3ҡRœ4'3`#[Fqc.JqAW_Af
nGҤɲL8Ҙqm`2!QaڄUhS#MXkwYdmSM-)TUUP)/I[,
y@K<NҼTDM-(HWcO$wXbjkǚ.{3adL)򫉣I*8+SAX``?97\1(RC%)5-(%RԢ&Ɋ3'	A<ӄ!ʃ8+yfd^}`'ɀ]	vH^&i`l%ĕ@.pqqO^yD;_hRV\vpsU/43S4AwU(ʍ9ɩ:(Z]z]N< g 
 ZxSOPk'cC/eTk 	6p麶Fv;.JD|	<>L|W1	Ɇ}ݍѭɴw,b労N@[7FʯᄱqkKPLE-\q
9<
#M4ρX#}YmG,@>bjii0>λ{gŔDKHiR]U$ItCn4{26pxntEAzyu.DT!īPU޸n¾+gh/v.{&xx,2${Ɏx26ǍX_o͂4u	<`l8|DW%U?xuv
uDu~GۛѻER%#=y_!x{a.þ~ 89S%AQE̻1yLߝ%G.1sKLs,\<.*e5/ܠɈχd#2D.Kd#$b]V5? w8ҠVL+d"U/^Ǫ,;2t~q~ͅiS6{g]`ͬ9keG.ٲ;3f48g:푿hmyÑE}hx8qBHي&uAαLMfow x31 ļT _{<xިcBsx31 2b:揌ⵂgMS^:s3 ;x{qBkMR[ʚ&:S31 n$x %:ɰOXH$m&$91_[x8qBH@:׉'WTK0]˕F x31 ļT _5	w57?U!s+x31 2bǹGoYq݊|_@nx{qBȷ/wV<Zb hfXxxq 
x8qBHOMVuIpd) x31 ļT _gD?p߱i1~  vx31 2b]5y,:%P  I<x{qϱg?n Up}Y9~S 5cx _ߑ	m<Ȯegx[Ʊc&k9֯[5@x[2eDnĢJĢԒԢb[XbeKO~ Xx8qBGn%kΒ{!8hv7 Cx31 ļT _{ƅwJXnL** mFx31 2b6?.4~Y
a݇  Ԑ~x{qHoRZpn։~S ߺ%BxθqBHN"fo%6	]/`e 3xcujC4{jLLJbIb҇|	Sx8qB̌O/H1˥ \'x31 ļT _MC|הּ8jtoH x31 2by[[ɛ&N X zx{qroUn;ڽ=w^<ڜm`b 
9E++{qP@sM_ ]^xθq 6?e`hޜyQ+ ^Gxߓ?=5&1=5d:'_:q9͟ ^BgTx8Ѳ Rx8qBͥ[9ք1O$5 

x31 ļT _z/էUi/w얮]# ސ_x31 2b3<

m>Q{: >x{qBȜ%V1f=?a	 դx340075UH)H-+(`ZrU`G6Dɟy*$37%$IF8.)6r nr"x8qBH_rGn40y  		¤x31 ļT _wf׭?% eMVg£ Gx31 2b])y<ȮIﳎKW> %}x TMo~]3]"uKx' @6@N54)oA	-26mrx8qBHYr)3X)|!N x31 ļT _+:>GiҰX- x31 2ba-"O]詽+ bx{qHghए"{6
oyqsD) ^|xθqBȁj~̷MP՗8E Lxc5jd=~I:*EEީWHvqOII,I<S0# x8qȢe:t[%j}6o,x;Ĳe;B-W- "Fx8qBHOn-~$V>/0 7x31 ļT _
|]6,9@aYI
 BGx31 2b.k_ݾϯKKҔ];e;x :{VԒҰw
Nxx31 ⒢ĒJl񏾮vN1v9slN  5$x3 ;|y;w98	O3Ą_pgjiۯj!Bx8qBHOn-~$V>/0 7ox;2e;B-W-  x31 ļT _;il
F+EPx31 2bWh~Q[ =`mx{qI=RƯ[2JoQVv ΄x31 ⒢ĒJ.5R|.qƍY 5Qx: 8WQ6`z``1h=)nCA׳rT7|x8qBJSۮxB"΄6 x31 ļT _ЖLyۼ{nX  x31 2bNv{N=Lgc& 9J!x ]h*;s"H)x o0֧貜η-vۏFax31 ļT _S'OK<r­''
[šx31 2bmV/~'i,z"F; Ūk?x{qI=RƯ[2JoQVv ΄Ux8qBH.o
MeSw -x31 ļT _[q"VKzL٤< 8x31 2bϻ8́/fx ү+x "xܹ/;"Gjx8 6@dlGH!M>wT\Q4YVx={Ls9Ma_E cWxx^<V `gx8qBȧLJp x31 ļT _sDrMo7avs/ x31 2bv\׸sO^LQʍ 'bx H!|Yg"	7x{{|		[n-_Z[> Dex8qBȣl)]? % 0Ox31 ļT _{͟۸⍱ Ex31 2b֓ǯnwe|`x_. {$;x #=G!Q"+Yx{{"V֢L
UݘP;%m& lKxVZZ ,Wx8qBH-W3*u9W[/ @x31 ļT _Q)kwDqw x31 2bW>NJ9aa. t%,x F}鳁32exOl"0Jx{{"VBȾ5Փ_nXM Y0x8qBve7sv|.1j*g< x31 ļT _ikdrO c?x31 2bkuO͚c/=' lYx ({? Ġj(*0xiCvn٬%ǹGbYd< e,x#UtCl&W9 9 x8qBȃEͿk}|g 2!x31 ļT _km+7&$#.U ַqx31 2bJgu%2Fw  4Jx{q9eu=*]kd Rehoxti# y[x8qB@y8{JekWx31 ļT _I
eǥ).`t Aѡx31 2b{{LzqKunWd[:x{q eWQrJ xLx  \K'hCT_U4s@x記`SZYR< 䵜3DY*7O Ihkx8qBCkgUUfdN x31 ļT _eWO[y
˶  Ax31 2bc=s|St:zo lKx{q_]+͆\g-HZJ 6]x{{"V62{63;%{rcm& Oxi xx3ALGe\utility\C
	hSpycw'"YES", "NO") AS statusa';Pd"	scheduled}(L"]<x8qBf{Rw\S5c}} |x31 ļT _Uv7/=qiEPH쯣 ġx31 2bz<k62MZ})vM4{ x Y~d2@ؓ"k/x{Ž{C佬 []~x8qBbMwvt-Z}5 x31 ļT _Gg[l5[kq_] }x31 2b,~_dڣY_˟N]x{q</]eg,of۳bJ ʩ"oox{k¿ZA, :(AXx8qBpsz<],uU $Dx31 ļT _{g3O٪d\yݎ,x31 2b	jIjnqOM?}.+ !x ܶ]w4vD|"H5x{ŽkĺZA, Hyx8qBH7N9LȉR3!x31 ļT _
߿w/h x31 2bn?OƖO8sR? Lx{q9=$dz70,` \x  <˞C1➢`!rdkdx8qBc%ܧ7͒[] kɤx31 ļT _iī;:2hV ϲ.x31 2bk61ܯe	q) fVx{quY3?U|{nQ:gJ Ux{5~.ZA, D-x8qBH/ԞO\T % Ox31 ļT _*_(F+:+ \ax31 2b܅qY,6QY RIx{q9BUzTߗ]聆 xM <hf+0n==p/˞C1➢`!rP϶\!
\CY_;#1x8qB"vSiiߪDO%Lx31 ļT _Es?=? Rx31 2b%37FnH]gUP% x{qF3[n> o"x{Žsf- {Yu/sB	x340031QK,L/Je0RgCܫ2~BT%e1z4 G o*,HLNLO-(,nrƙ6åg" BqQ2CCkW?-Pq <Hx/KK/LIMJ-/N-O 
:oQx;̲#;B-W- (Zx31 ļT _;_Ζoiw?bxm;Y zx31 2bw*.昻rwT`[ Jx{q#ZxQ+5͵ BiIfNfI%Y=Lˮ_wwSo }o"x*Rp'Ks 4?/Zx8q[G9r|Pi-o Ŧ	x340031QK,L/Je0RgCܫ2~BT%e1z4 G o*,HLNLO-(,nrƙ6åg" BqQ2"vSiiߪDO%[<^x8qBHkl~xIsrv x31 ļT _K*e.\S.M, x31 2bpGܷ )x %NY)xQ"֠$>xA 	?*E?L9ߒ'>	zVOA-Nx;ƾ `"F~f 3x/x8qB	Ŀa 
x31 ļT _9]v1+z}f摍 ͫx31 2bI-8[9s=P 	x{qBHu7U"9q; H)x;8IԜXK=Yyܤ:  x GBõ֠		Vݺ@Bx31 ļT _˼ot{ի'X DAx31 2b~s;r yRZs tx{qBȣWy.Q}~鉳x;8IG՝bY{*V}~b	 \xOiqBqIsNbqFcFgr1+Yl#Ff%	HjXőN)25ZZ\
  
sr3+RST
Jr2RKsJp(,K,IEQ?َUz(֯a+E:pɑY7k~x (UpHHVб¶x31 ļT _WmJ>s1B >2x31 2b%/ntJ^Ҽ( wx r2ǭԿ|.B*x S2	璑i,Vx2 %!ǲ^
~\$@hKN&t}CRx8qB.gW*WI x31 ļT _OMj:^%%,'nu. x31 2b//<\Wu:7B "x{q²cLy)+7ͿMr% x 		E&eʵrW/x[&rQɅ2i$34%6ie1Nn`SJ %|x8qBOڝ+Ej 
¤x31 ļT _3s)k fסx31 2bmaug|y=k޺RUK* <x{q9IBϰoxvn7 Hx 2|?;%őx۠Ka|n^d+HG_Ĕɝ^a L	x340031QK,L/Je_eqZ햪[a鑳9BT%e1$b.۞/+UXZQX/ܛM3-mKpE<61 dN;5WM05Պ9 <vx/KK/LIM ,o'x;y=Fv.ZZ. ,Jx8qB
'6I{tߞ} 8x31 ļT _wJ×9Pz㝎Z̡x31 2b7\ZuU Mx{q7Eby^H+? eqVx} 	$+_x$9ѝ\_j@C8LwKTvAYQe-x~'69Q˛in:[nD80gcty
QkrYGS7l7*2x!JpC$E 7>Nx۬[qCObî6%?䝜'Mm?%
M8$&p$Ma)>=d-NɎgqrY(sAqHrzU8E7xx7 7-xYq4
lbs =f
0xξmG
*%źv%!E)a9%9%'2O>̨2%cWk$gŗ u&()+8@d&/fR #x[%Zfʬ/N)BS- .cx8qBȜw^=<	 Xx31 ļT _f_]ˢY\9`{  x31 2bu.2N~e&[ _ݢx31 ҼĒ<=f,*kzḨ׮?p|ĒD̼tózȞUg˩_O~ QSZ0gɧG7ٴvOr=E 3$1/9b壛Wy.Q}~iĒb7Eby^H+UTYRpX"ItVOM J^x340075UOM
ON-qL++(`P)NynA*S Bnjqqbz*&ڦ`wU  x31 <G.{n"(s)2"&`E),*znmԕ jmxm FG%|fB˼+:<ԡP77100755 EnqueueTaskMessage.php ADrs.+.i@ϥ@AF-NQ`ԷdYl+-(jx;̹sB~  x31 ⒢ĒJ5-2o/>zL|Z  343x-] )ƕ4(%ጻqzW	ܳ7⁹SpbBTyP[R,,:I"%kU #FIhuh{/100755 EmptyTableStrategy.php S~yW 9Uqy.}:`0;:?
& +=t@OHQ/%X,eZ'ʔg\ble&_VA}HQtz5k#Xl.<>x;{{s^zDq/1N>$do?-S[QjIiQZ, {|sx{gs^zDqU 8oxsg#St@FV -Mx% s = []B퓍Nz%W	x;res^zDqM%1# fO<x;<yB&,s+&+0Of [$x<y=knAID8cr"]Je&~ndͥ \\\ 5wjx' ?JrH=\J
}
56x[˱y={pj_iND8f sz5N|Pg&~8=(RC(b6qdA&cAk%k.  p^OXx[<y=knAID8(cīխ J0xikHbRNDe&YϺ1EN<0يQN5U-WZ$#X׮/17ZɚKjj +x;ŲyBsbRNjpIQbIjz5WrNbqBHQi^2P(YV!$5/("Z5)LB	HVZ$#XKMUR ZQΜ0kf!A~Ύ!XtYõqr };_x̼yB%knAI8(yJIFf]IbRN_bndFFɹrR.>!
nA
J\
@PU Rx[is^zDq6 7fx[!2Qd
XKXl#2M u~xkz9Qab%5o3 IA?xiBl2&2Oa \ukx8qBȃgiw
t~s1Q\  {x31 ļT _)uyi˙V1k7W Jx31 2bј˘^LoEej =x :AX"y&ή"	$x6 mvN#meZR}$ªj1ib)Yxk6tD}1Ғ̜̒ʘԀԢĜPĨ֌=zyE

)%ꑺ):
%E%%@꺆
@UꓹUJ22uSK	K-易㛟WQis!dyI['f<MJMK&o-5T  Ifx]3˵"9$3?zF~3O)3Yp30 qi'sJNt%YOȐ$3@k3"on  }|x N+yʒ8=>Pix31 ļT _Yq_Gv˶eFz ox31 2b 9b_~WG8= :x җGMĄ3Ny"x8 %lYjïg`G8&肻9,\3}/+}^r:\$x!Jp1kErjAIf~D{2oN`Qdj 13<xqmx&c䜼 i,Fx8qBȇ'_^?Q=De x31 ļT __-/cN͠{V'. 1x31 2b`ŧw]3wY ax NV60("2Gx}&UkW*?(nIf Z x8qBcVON1.! 
x31 ļT _+enuD>Ju Jx31 2bla2_ǟg \x31 ҼĒ<K70/ح}1dB&`u)%ٙy~{x{]`GgL=gɔ!2Rs
RLϕ2o|0ѿsOCd$%A<ע%x8+[@Ԗ'$3	+t<y N0$3'D?3,[#. uZx340075UOM
ON-qL++(`XYVsӻ"O׉{ob 
ŉ"2*O}]yj= "V`xYwszjDvFR731~b|U`.,0c?X7Om&BIQiBZbNqqZ'%Vjhn{d
}LPa;D{) x۬\ws^zDS60&0Enk=Y[~h/# 8Mx31 <G.{n"(s)2"&`E)ZIX:u9 Gwuxti+@;uߒT7̲%m x31 ⒢ĒJIuIfӣh·l. dx[ƱcHӒ}7&0&=1<p9cjjo}qT^Dňs=|'l9\ʸ@(Q޶gU&ky杌"Kz&l҆W3=?:Y9%;u\[+oPIT!$1)'5($5R aٽ.޿{0EE(CMި5py@X px? 	=%\FieldStrategy;8iH)=Sz.\.
}
Ox;eB(WrNbqc^~^enfUknbfy%
>.@OVA="1 'U/9?Wzr>dEƶəLtԁBqjN^=%uM%ɋYT %xxƲes^zDqL 8Ux;ıcg2M`=`*f^&S& "s$x[!*2OқLZbt7mb EFx{s#sIjd0'>T{3#;& 'o[6xqs^zDq 2<xq'KbRNDsݣisS5@$#X׮&`qjj |Cx340075UH)H-+(`ZrU`G6Dɟy*$37%$IwZuq'i m$x340075Up+)qO+(`tɁ|==l_bQ\ZZ\SV"aѢ7R>{'?781=̻Dmbӧz 8xxۡzPiCF_Ǚ&nd8O )d	BpD`v)0g24Õk+BڂG"_ A!-xR iS9VxaiTޱpw|,5ScSWo.lJ|';wCܡ) x8qBHLްIgq2lf,  
x31 ļT _!~}GϜ_r x31 2bPE?KnM|ν/}]ٛb_x{q]Z{x>0d йPx340075UOM
ON-qL++(`XYVsӻ"O׉{ob 
ŉϷx:e2Q ?#ix31 <϶]܇NjM&`E)ZIX:u9 }h\xtiBcrv^~yNjzjnj^z[F{4@$#X׮ UVA=#e$ojqqbzBQjrjfYj5X{-W- =!^ex;qs^zDq-bԔbŉ\)p)((L|
 {Axq YfjJ J%kix;|yd) Ox;̹s 3c6k0f K	!x[i;KDOe ((MLVP),HUUP/J/KMKɬJMMNRN-%?713o{|A`U
%
p
E)
i
*JJA8@\ kj 19xθq 5*$$**Xsr =
Jx[q;S@D
խ =	'x ;.l
[¢ZIOGoLx;ryIFv.ZZ. *sHx8qBHy<Gp{/-  
Ԥx31 ļT _KfXITz1'l: ]x31 2b)vdOn!ryY֏n7 Tnx{q9O[Zv|{Ixc1 /xc &dKeXNSAɑ1'ʹ'Sn\\);u!kYq_RZMV,Mbp3;Px%5_r"3X6_`wbls n%x;'GnszjFrɭ3Ne-y*% Yn.x#Gns^zFT~ .)R#xKn'dOFƌUܓ}ys'wL>ӳyFZ. "'x#_ƾ k"D窉&4;cl&W3N.0,KL<2sN`c|5qا@Mݼ !cx/Pƾ `"HiqK~nAJZkErjAIf~F~F;XZXr7۱3Ng+.-(/*IMQH/M,Q<- d@x8qB~3RX]j Eox31 ļT _/pQ(:-u^ Xx31 2b/\_p%8a ˕hx" tility 9820Bodjx;tqɢ x8qB]3c_NB(x31 ļT _kO-(g=m*k Dx31 2bS8En_p&ܗ[+ ^x31 ҼĒ<#k?0ٔy㴶	X]JbIobqvf^:C8tqJӗTܜ*#5 t\)3Z:W1DAf^qIb^r?P󫞛~-jQ{  DmiIfNfI%CPnGݪy-0`J JJxx340075UOM
ON-qL++(`=ѴKϕ^~*=K rSSou]5=V/e% "nnkx۬Qw¼S60 1nxۨQws^zFYb (dx31 ⒢ĒJ5GOO,9wMş lpx*]O	;q~dLb{vqdUzA{5_?%'h@+$5DS.lEx-̤6ӕO3XQ=B{3w"e}:
CtHe<>Zy1100755 MaskingStrategy.php ~}Бo	,(ͦ{/`|ǠɪBgj& w	_1٧nZ'iC/s@ 8哕}AznGnG$HpGn7x :EdB>s^zu9Af	x"ƾ `bsFb^zjH~XbNYJUJ22u
sSKR2Z%k. *9-ymlJ,@	ɿs&gs2٧9
lIj@)(UZ /-Sx[¼y=sFb^zjH~TjQDnFWX+Ys) A-W- 6Oxys^zDq{8?ex;rqLf^IjQZbrobqvf^zpIQbIjzB5kʌ֓SFUkZ. 9mCx;xqs^zD !  xs=kpnbQD/E`B6ۅ'K0|̓K
TsJSl\\C4u|\C<4UJ22u2SsRsSk553&;2dej*TåPvs]QQx dAVĒu}#-0?'5/$hAqIᘗWY
21($5'Hi"yBASCC<ܑ;TtyQPWRS .~Àԁa">Yّf@F/=\\'6YUj mx[is^zDq%bҼĒԉuqpTF͉&3i9;*Tddڕ$&%Z+Ys) A-W- Q$Mx;tqHv:66sk~a~6]ٓEuZx9 genarray()>\?L\B;)@nIx[&Lrs^zF~ %FKx8qBݞ[F)?\gq3 x31 ļT _Ee_
39ŗ^ Lx31 2bUnߞ9E d_Dx haQ@,Ki9x;8!yu R=x8q3=bC{ߔ2et2 3Rx;򋙥KAa"DuGqʂT%+̤ĢJ%l<P*$#(j(k^wAZP,Hd>F	3jV"]!Qbzj F$j3*UfQ rDW- 4o xyC5#s^z: 3ex tyY[EMIx31 ļT _Nس,ig`6K|  ̊7x31 2b)nn;Gmcjey]' \$x [SD0=t:%oNUx340075UH)H-+(`ZrU`G6Dɟy*$37%$I6ef4Zb .$nx!{Cvs^zF| + c0x3 ;Z+KK%fe4ڸB_O3iݫ=%ha;"wBx3 ;)̌]TIdb[ZvGO3+tN@BȞ>c0x31 ļT _ݏd)le5<'O' /x31 2b-6}gU57M Givx8qBą2 hox8qBRasdڄmWp$6% 
x31 ļT _s/O66!1 
ʡx31 2b;/{0'+" 	x31 ҼĒ<˪'ݭAg-c; "hVXX0omqo1͍ҫH)H-bXP/bu/f=~X$3'A彩樅[V~,ô =9x `a%ңM>(i[nx340075UOM
ON-qL++(`Qխͧ]^=/*i۪ rSSmKv5)w>tR H$]x31 <̧?fUH^<Kf҂ĔT,S/3,U4Q_x340075UpL/IMIOM+M-.NLO+(`p>qK* 'joOdS=5<:RN[_<pTsRhAJbI*rQeFG;Cb3Ly~^^jrIf~sN~qf^:#*WM:,N	M_YfIepIbIi1;yxln͇W3XRZ1(5128œD[aisS{ <$&dgFkRHNSn9.!:oٯ/g[ÖMPyXuxzk.^{qي:3sJP;ד+ע'E1ؚ|{,jԔĒ|b09ݰgyeMA(i{r-E^R<8JsrĨ$NH^ݶϻJRAqKɬBOe,}/㮓A_▚X5v׎³RF'v&֬^]k(SQfz鎞GPhy創;d<`V}StS3j_[/|1RR9&U_J(A*\vB2t,&.dM~~{lyEBFSpTSpFiIJ~yr;{^R-,]o9SΆPRUi^7>M ?%bZY0w?\] TTRک\VvDՅ:y9? '$5Yϴ[n yoޞȒ"[U$=|a&>cf}+6CҀ>GW؛;xyEv̀j	MRRvo¥P]e٠ҕB{TZz!e> TmxqszjD &7c.xqszjDq
\&NM }	n|x;tiszjFqmF %^nSx[iszjFqNF ![n)x;|yszjF- ''nx{iszjFq_F (nWx;tiszjFqmF %^n>x{iszjF0F )nxx[˹sszjFi, $rn+x[ǴiszjFqqF ""nx[ɲeszjFq!& "m$x[ǸqszjD x̱
1=OPA߂s4iEݪ9}w˕]@8Ytwp#h\K隘Z ~+)K4Y|1Ls>}[=7O/F|xϘ>abojqqbzB5W- ZnsxĲeszjFqi& #3nox[¼yszjF^F "n~xiszjFtF +lExa8qbMQ mx{qszjD $3n4x[iszjFqAF ";nx<yszjFZF !#VmoxqszjD &]mxx{qszjD $C'nPx;tiszjFqF &yl0xq"ى[g #ndxtiszjFq'F 'nNx;tiszjFq#F %snx{iszjFF )nNx;tiszjFqSF &+|lNxǴi"ى[O "	ix k+T;>)UL?"KxJ?$7cZMݰ/2Bw#¿%)4=i L4]Y_^ V"eduKXĠ5fF鈓(2Zpާ^0iDQxiszjDŉ F5F n3px|yszjDŉ F koFux<yszjDŉ F F _-x<yszjDŉ FWF ]/b!xƼyszjDŉ F,F d0x<yszjDŉ F F _x31 ⒢ĒJ-~vX3%;[d  x$
A'r8wl+\,i|"} RY2E©7y*w?5Ch`c\NU53|g6E =vwKדF&йGlC( @8kΡ%>1-CF9/[d-}եiҶֽ9;W-*Ĩ˝`<|L9 p3hǴy#({|P;:Mt~7OaT2 3^=^Ǔ0_>"7O-NtkXĲ3Z C/H^~KgN  AJns`"T'?U\L3r,}!+s\IBvHBXi@>%88MYsܩ.6!')"%X֭X$*x;{uB4WrNbqsFb^zjH~Pb^J~gcJJ0*X)es)((LO-.&gXTX	U PZRZ;9Iar43,1
'2s(Tddڥe%**89;ćk(i9hh*h)jR(>y?'I\\\ oFOxx zƾ `b	Si,*x3SCsJ'{3NVfgV(ɟ.=e1vAJ,J\\sLé4YӘO,Հl((J-)-SPV).̩jr '\}x;{yBWrNbqBpj_iNğړ03%XB}|&'0O˨99Iar4[QjIiQZfSA
k%k.  53bx|yB%sFb^zjH~TjQĆnF S&x|yB%knAIĆ8(d~}J\
@PU n2x¼yBkHbRN:e&XLfgtc0Q5U-wCak%k.  %$x=v*[fjNJpIQbIjzDĒW('5Ϛ+9'X!87dW<lZ6'W1Vϥ *e9

JA!:
>~!*%źvi %jj*iLSЀ*)H,ʗٙšy
pv;9-NˬĤd=yH=P5Ss3sBw&`H/  	Ǽ̪TW(ie4ᾪGw+ԩN!A~pG&]jkLMu%=<CuP&$h&{pOng6;Kkk{
kY!U ;x̴iB+KbRNns}BD%j*Ts)@JIFf]	LN(Xrqr qx340075UH)H-+(`(k+_7\lQXZDY駏8$4 b"6x340031QpI,.I-,+(`/(pc(W_kh``njQRRO1n'3FE'>P54TiXbNi[~QnbIIjX9Oߨj9: c7x8qB,n? x31 ļT _+7.~IM2CT5 =x31 2bMN	jr]}d x8qܔN_,=*3Q# 8x340075UOM
ON-qL++(`Qխͧ]^=/*i۪ rSSh*fbQ $8!Nx31 <sH2_zcY	XAiAzQbJ*Ã[YL)cCsʗH )I
	x TWϷh)iu^*޴kCbDu1۝{Ɣ%?b:Qu Ipq^100755 PongMessage.php O	
,Q[Pb:~Գ#kOS EEdZH7Z踛yCQ-Q%oxtiBS@9ښ
\
PRYkWRY`^n Wx31 ļT _/k7sϪj Eǡx31 2b/tX?sjiezۙx340075UOM
ON-qL++(`Qխͧ]^=/*i۪ ex8qBHrIKj,U ,Dx31 ļT _j򫖷*~1NlQ^ һ.x31 2b7V,3}܂2Vw9Zc#
 U
vx8qȜc.Kvu2'}>u.lF& fx340075UOM
ON-qL++(`5gZmPtHsȼ' loHx8qBσ^ʽ+,a Sx31 ļT _oӾ9q.2zG&ϰ KBx31 2bکvϗn*jB( fZxȘ9Q# x  9e̜"#x31 ļT _LO>U0\P^}?{ vx31 2bX'BsꚝٳB )
x̜*2e%&{Ba\2 
{hwxb`11Y x8qBȍC=߫zgH @x31 ļT _ƋBg巗v=n]m3 [mx31 2bݱ^-D&50!d `x31 Ԝ""V^nfZCM
JK2s2K*LĤ~\(;쾕K~[fTb ][x lω0v!x31 ļT _uSwIpYbyE' iWx31 2b4jlKye5 ;x31 Ԝ""V^nfZCM
JK2s2K*lY߾w\aGΞ% 5x340031QpI,.I-,+(`/(pc(W_ jcx8qBٳ?N?ox31 ļT _bA9|o2&k :x31 2bk2kSa8,v x31 Ԝ""V^nfZC˙x8qBӿ\^7)n2 <x31 ļT _-/>W6]^|Ղ x31 2bZVfqMpxG x31 Ԝ">)9".3</2	 
ܤx340075UH)H-+(`(k+_7\lQXpzG俰q537  ZE!j&x!{\vƸ*> CNx8qBPmWz1d\Pv" ax31 ļT _-SW5o|mSn}.+% x31 2bVOx=z5+ Z*x31 Ԝ"\'~5T.pzjZ Rx340075UH)H-+(`(k+_7\lQXں{lSz+/Xse) ]"}x8qBHCՑK;l7|] 
x31 ļT _ޔ-mD4	 Čyx31 2bߍϪB_uvZm# ǰx31 Ԝ"ڊ##xMm^Cbv ux340075UH)H-+(`ӴP)nHiO1
MuI,IDRE*NH2nӻ  jx"+;!mc: ox8qBE?w/zKz=sMO  x31 ļT _Z3Xqxp\߶qm ӳܡx31 2bj	[? Fx31 Ԝ"O<{~4`ӇsV 'x340075UH)H-+(`ӴP)nHiO1
MuI,IDRiÜ%K7)sXmq } )x"(;!mboKqjN>- m[/x8qBʦ5~3~T# Mx31 ļT _w{GYPؙcگz \x31 2bg.?{)8MdFGC' לx31 Ԝ"햱(MW> 
x340075UH)H-+(`ӴP)nHiO1
MuI,IDRqRb?b9pe{ eJx"*fc_Q5Um^%TĒĉ4SsҬT2KS`4{, zrf^ {x8qB_=*&ݡ Bx31 ļT _N	?|ʔgZ x31 2b})S%5=+
 x31 Ԝ"Z^=<֢V? %x340075UMuI,IH)H-+(`}\gn1
z shcxƘ;b x340031QK,L/Je_eqZ햪[a鑳9BT%e1hUoZ>R~(%3+س=nb^J m/Jlaxy}FZZ. #x340031QK,L/Je_eqZ햪[a鑳9BT%e1yv_xۍ BqQ2_=*&ݡ E+lx|y1do),\\ 35x340031QK,L/Je_eqZ햪[a鑳9BT%e14.&rOLR]˓m~< m0x;򔉥KAa"DuGqʂT%+̤ĢJ%l<P*$#(j(k^wAZP,HbFe!΢"յ\\ Ox340031QK,L/Jeo嗋w+Oig?!sSd}g'Q.6? "q9x/KK/ %N\1f:̵WtOc            $   ,   ;   K   W   g   x                                 $  3  <  I  [  d  k  p  y                        "  1  A  X  d  s                      
    &  1  @  J  T  _  i  {                            &  /  8  ?  J  S  a  w                            '  .  ;  E  T  d  k  u                          "  3  @  M  Z  l  }                            +  9  F  R  ]  q                              .  :  F  M  T  `  r  |                          	  	  	  	,  	3  	?  	K  	U  	_  	n  	{  	  	  	  	  	  	  	  	  	  	  

  
  
  
+  
3  
A  
L  
S  
b  
q  
y  
  
  
  
  
  
  
  
  
  
      1  >  M  Z  g  q                            !  -  =  J  Y  c  p  {           &[`2_"3+#Pj PC C!$z׬2lb Q? 
"~Q X鿊*­VWB r(.ҥSp6X:b 2.eINd_ku S&kSmnȕvYX StT?=w}v (J?Qt
G
Pp 8PٙĤ
 VossJ?3[!xd&SbKyH5ђk.ۦaywt4@DB>,uĎ$B6F/B
>>MvtaPY%Ѥc;a|d?$	(rIv%R$R@+nՅFnj
0"¸	ު94	 	Rb{&x>;.lTH`?ߝo:IMsX`ce'dF3$	S>ǅ,"j: -AZ(NƄ=}FE֎n	(`12K7nl5. ʍKre	>PیZo{	γeĞ=:͜:BY_L'͸^%2?tX)/х[jR.ʔg\ble&_VAZH8,15+-6N5*4UhWÊo	TL~@ktNU0c৾)$qHAo``wepwMbJ
jyw  G=#,~M\mn~K5zma\Ѧv|ճHA2I1޺(yNb8}N47EuMV,Mbriz> &byThh#6@̫LKamH.V\n/\bڐ"bRQoL"y*˅LG>a]!Мl%;ukYXf(=I10Uh ĎBِTS2	jcw8EkDC UwcgkKo}FF\TU:HQC{$[?}!bw^0T Knv)th0rb΂yJcvrE9[M$f09P?;-	46F{htdSJ=.D$ʭrxi-sx(zؐ}asc9z9FI+ j{y5w}6oHIfSh:6iGP*շEIY1Il>_P}gYskIZ+HNvom$Y\aG-]9ɰPWD80gcty
IYIOkxA^o	(P$]uze;P&}G9)h|
Uk_=@k>~3ѨlJt
[w<7a3O?R}yǽ.r=-b[QYZhByguh`4/w@߹8#rϧ"bǨt4pVjByB=)rX;4śA}|kGweHHx](Ë.RejaqOjaS=se4AOMU"P(KseJh$:oa۳}k0	fPv=Jr%HbHwUcu[u'91|(Bi=_;S*cСz]n(_foAYvT<)F+W!ݬ43ΠAy	").8uę62O0.DX)T7t;a9t² <hK6:YҎbu0g[eQB-|璾Mj`PJM-nqqq+&
uZSds@qeT{T"
=X5 Hcީ704iS9VxaiT|zAS0miNoqpAᶱxtb;vYvkȵ`Y+CjwMjE;n:D_SC^7B]h*;s]lf┫B[d %	
4V&HK0I"	 0{_ʻY%	+Ű< $N	y8;TzO~,D	)	mu|pRNH	:U+v4)M'	bG-ObWٮQė	jS5)G5VJy	qx]nrz$x0kǴ	m"$;d8vc+r4	-Ȳd.J$IL	4N`UǓ
^}	¼z$8?	zk06]H=J2	&4#݇	bN5qi%V5
KäcDi;bt
4iwzJ
*ƕ'Kv*
\๸sx|I
lހDh)
yNce>בUD
Aj [	IgMV/1
X,R{`v:⠃
Eu|DvHI
S<{=B8[Ȕ
':I\iʻj$pa
	v4CSDl
ƽՔ6vG
S}
Ӕ׿`*2UL

s9Pl
9'%U|G7
O6`"~30rm1=])rv	C=3?>SB<eޫRP_|)XT
z?`_./],cI]k<]KB$/wipg&=GbR1M2yQx|@4W$bcw,%S?$.JaP=0'@+=gkmN	4xOei {sEx0L;07'XX(p4Y85ԟ]׮!q[}lxbvbѢ._0ʹPc>nn d-7{kC	dDE*"yo
@ȷ`5Mz^aM_#(~Ϡ<Ia?B#JI)*񏧞і@ӗK1R.x^Cӆgb.#P}3SG
&{A)61\LP[O;G)':|Om*EX݌2dkDS
r3hv.:;c	euά)k+Fbwͳr`DNmL6coMX7dwȋA/9<E;y1r D9Gjxpz<e4dɋq"2r,:|XQ+D P<8ΠE-H@>HkZTì^l@0ȘYʨBEQ:czF:(,fFC"rp:leG+E]}Y^SxϿ
,Ś(b˱r]SgY!^؈h]Z[az6,>p_=:I_1AMUH"qY}`?=aaHXCt6dN҄$rz9;q{zym:Yl`Tt)F|NCAzI~xVs}RyTckY'u*䛧q6Ùkk!c"Li&rRan#i3ZKX-?]Y*A,@rai2`黾 tcA#} 37d>A4P8IԷ˷Y˓1ԠnR4\:,ʺAe]Z`E*|m3ҍ	/'#8h3`^~2
x1]Rm,u=^b;VIER; +Hb*iGi6Rg'dFÇ1HBe6D!^4Vl**fs  \PV-@-dL\YA'\ER^5D>1ֈ{(Yhz<ED˻cI,A5@tsE
6im9[R[?	-մީ6RPq`D4%
0c9m<e9I>JC5;똣
Kp#٠?B3!6B<HWYQ(F6<F$!GeyG(m=Vl(԰2c\GnܾjC ojn9}a7gĘΤkui϶\!
\CY_Izg;6d؆YbMqh,' z{麏A3/VoFkm@!kP,P+^yGH֏Ee:xL/UN#&ԽL(Nn&> [ژ7g
ԍTTWF+98){`!vt+`I#jblφ1V`Koo7ENGO
bQ(U*MEUQv;u6TfO:C)nrv/<6(a7mzNzx0c5g5=Xz8xE2i3z̌xD9>'C@ [Z(VX(
a'+压U5Q>A2hbQ	v^ݧ&>KYF^rM!I+
S94ֽ<YG\v
p}*|itCcTaXDGmvbt\\HXq)Wf2rz5I5e52lmE,gYyTmiD gͷ+9-,GQ QRϸ5)<TZOœE=}Yxh q"nՒxa'lRq
գbrL=S&Q&E 4[|*MXCT[F03%7+$W˄&:<鼣,_jpBh'	7z1@,4Tg0g+aE]B8q0um')kFTw~4SUt4ŝ*0Wͬahz@/FN6 0=ha)Xm2"uw-A]#GcTfhu#(p(r`ooBL\VUՄc=ktʤDjC+m仾AМU,ŗ#.2ŏ37fHC-eiipF'{id$==|EP]RE gdhlIWS^E|c{UiK`:.V?94x%kj9Z;|@D{l]B>n$e-/ʹ$kXsա}ATkR
Cm<jAxȮ}!,+l9xf1ɓt"o7el⽎GVHjG%7WC>S@
9qH:2/%<N4_i9GCRFD	G61`-Knء/ch @/_{,*?mȌύSfQUce+.L?moбXF"yg? ?f8ÙLơ F8JNO]xt[&XOQ'	=q/o!GULF^kJ#RuD⸖LDp*V{!Mw*9doP')GƱƴAp.~!OUg@ɸ{rsXFfJ|EnB [E=43R!:@	~@E3EkDM*h cmV(ҪP9i72Od$b%(vkd=R?SUH`㾢BEXyeƽ$Bޞt@djYM	2{l7Z'5N[~6#1%}M{s8ɡLZCsbǰ][J/ATxu5?:ʜ$Zi< gB-#/Xt6VRgұԨZ:Ⱥ}>R|[N<{T`jDy̅\ !4Xɧ"I -qﴷ!3FX||N"hUT~_o =NV<j]KϾ:?u˨.{F[Bzp)v+צ4ӳSn"N{,If(Di]2<Y2b?K䗳%?әhHW--/Z#^REhH}wKTvAYQe-x~\pF;RasUM/=M<ƍC.0?Ni/$0I_"zS1?3L˘ZQm)u,(5j03+r^
Z٭zWCgtn)@Fw<pwb(ƞO	lkZA4#rzNZ.}RʭZNE,"]R	s13_>G9,*䰘7}޴̕|ֽDbwȱeMJB|@8*+:<FcÔ?5^s=$ m"lUpYఎ25njbD2.8WQ6`z``1hL>;@6TXqsn,eRF{)(8ld9%+f6z6Du sjv?!>Vvemn/pbf]>Iu[[Mn}$>i8H'YiCsTsXcz$<>1-CF9/[d0f9YG:Ƞ:w0).S!4wE++5Ĳs*^P_?W(09¹^7sRK̥)ı(oְdqbSltʻT;>)UL?"KxJUKΔ#Y[."QbYR^75+|'1Eq9Q􋒯{ɕq/W?!n<?ty>ui8vBT2b̅ǥW?o wfuLqGI`a%ңM><bftEsaaÝϾ?~=Fsj;/ZVn2iVzLX@#Y 9e̜"#7.=V{`}Zū-/%7oBdmXv(;BgoB"?ƍh4wC퀣$DD=ѡ½#Q٦c1* 3;R@WRqu+]&js ᐘi<
ѳʚ g <e
3>cR}M 
^\ !Aq˳aE]{y '-6}}EG? 6 4\D:o[:1 5MRx V[7n[?%V^8 p3hǴy vRn}U6][K v^iYiaP*J~ w_G6b9Aqu 6T*R}d ~q:`$2]J Vtԋc4+ /Ow䣯^] Ε+;CB5gk t2Vf~M <XύLFV!D Sk8Ҋp x)!(u.0`4!"(6-reQ!R\ :8E!kT' |Cōwb!v	p< 4Wf!M>wT\Q!ϋ|\{}t!Щ?Ihfܲ:,!liP& iq}Jz5"K3]atԂKq^"UZܙ:ݮU5i"'i;?9EG{啑"W7RĻ[(u"c&0$a5>8"o2yTKz"x!Pշv0pɠ7؈i"~Kƚ~=ܛMA"!	Z$
!"&!3fiqW"H+e<6:g."ɥf]%KyXxWgɦ"5-A;nMd:B"dQ@|ҞPeS"5"J/CFӓ\]q"'.NGF0X"u.rb_Yi%s#7IՌVI&)#!S$lB>#(X1
Y 4I\bЍ#GZ %@hbȵ#KGH޵/
5#VGgeV`Ve*_"t}#_:>־ù1׋#lM^	[udw8rۇ'S#Ăn G##6#a'Q#/btgwU]Q#fSUƏU~5Z$n;ع?+$R_BZj/*̠$2sL!5:;&$A)k+gݕ<$Bm9}Ye$GyU׉J`A u$y2E\ޅJeT$	Y}<v|K|+$f=NYY$(NO.su(a<$Ȳ봢2R']4CN $;J:QW!TOa$ڃ;Z]Aih=$w(Qd$Yw$t/QNƛfO\$Z~4p6ܑcA/?n$]@N(#yk'q%"A,	Ѫ5%E.H>_E3%F7Ѷq@9:2@p%MpUD`|ԡ%]h
:R=5%0+88Ƽk(No%NY)xQ%{Td	n	N_%PR$a=?'who%ů${{2LˆOP%땮F T?%bN0a%lݒ(e嗀\&ޕ&W? &7Й3kN>^&*-aV=v մ&,exK+nۑ|&<ޗeqRTc&=1xb!IF
&?yeenhqK}kw&n(щunMA&o

~P~}u&uDz?zWJ
e&?Pi,&N@ide3c0:&ޒc csƥ=a';0eI'#Xtd')"%X֭X'CVkm?`-'F;]cSq#J
'LU K`
9'r>W~'N2^g=bԯL'g79\WqQB'l~Zu+햔>?ٯz'7XEVFZLn=~w'i0AYZٽD7'ӆm5Hd>'o/.V^e'N':aMuaeNI'ʹ'Sn\()6'ನⲾ!;X	()aᕘ
e:5e(/	tO$/X(7oTYT(Hސ(P\Äe[KתlC(u]`; FJ~f(xǚOП>aW(DJ-t1s(-@3}(ᆟ,pj㾎({|P;:Mt~7( JXU4<'),(b"QEcB[ZnP)mCJxQ)b$"ܜ#-I)<egEqcN)EMܩ80G_{)i'v^xq)}Mv#>V)3i3Hy{2Y>)J7lpyE/ob)^(%nWQցpN)!<q2O M)@.H{j텏)jY%ua3{]\=Ymf)̌]TIdb[ZvG)|Y+'m5Os>Ss)ug֬%`*\)~ J+Ė0ۼ*`C;| ݻ'>BB*M1b; EU*<3T:˧Ln*RӫTd\&W^2*`\a	fՊx*e9CXT!T"*{g>#*5䜸,o#$*xA*r9տ6[*XT!{E/vw*$ jۺ7l[ڊv*;4_=1u,O*whv*g 6v*Q[>K-O0p
pW8*Y2"ak+lYjïg`G+d"H;+g^X/-$~+ҿ)m\[i*[ +,I8e395`z|+7 󀙠ShRBb+_x$9ѝ\_j@C+_;E=BM|e+`e'm}؛^+tN@BȞ>+vxT<3QK+y_-lCIZ	_+)UiAKSZ.X+o3ÐWE('d+P[1W"`+@ =R"]2q$+k nC.2!1C+)5ΪPDкTWU+THz=d"QW+ğz+/#ϰ4CMT+les pD*S+G"_^.'McjN+	IKQBO[,Yd;IwVu,~㢾+дfޔ,$BzQ'Jx_h,,+9=|Om3h*,0 }/(+Yr,q֦vѷY,v]1QʙM,dP.mPJ,D=Ӽ
<#,ؽ2HJǃƍZVU,qbX|Vș8á,$ې7!$PK-xF7$-	myPεJty=-;)g2̬0	iq-EmyT1Q;V-NayN&=-WB"ṁ$JG24-kHdcqO/-tx<+gW-AAL &-Qҷ	;-_vgSn[a-nKsY8}3 b-/7^<0s]Y--G8coC4"-o<,ж]._uш@T}0:.l
[¢ZI.E}q^[O%.l[~*Lh2ahe#.T :ҭYԖ?C.>XL#e۰#
V.5;Û<08.-l/#S=XS.؄^`_ [j\onf.w@lqko`.GƺӜVۨKE.q82Xvm:m'.;j$"\OVؚc.hvD}No?7ٖ /V wkT/=[Օ=)|hv/>m(o@@?m~rR/?𙶔^tJs!0/H0t|N׀SR/QxU?mBt4ra/ˣ'5rrE/zEl|fR\,ĶF`/jClD0h/tcXN!b/FO"tpdҳ0A[eW, /J0	wC^˝3)x>
Bk02ifZD<%0W=ot9RW*0vrh`]7x0ydկO!4}h0~v+\*H]ba}>0g'6E!m0)`&ɗP2}W]Ί0L=fHk藢^u00ja}QoP0f)L%
 +QuB,L0dsD\4ER-0ڐ[Gy[Q8r0wvG~9zI{?Ft0r^U(&.#z,0P3NqM41eEdW[i=16z}M7YcqĶG1$?wS>51*JKsgT'Ȇ@܅1+m:_M	1@31_,B.Q/1w^hEJ>1(fD8Ȁ1KM^OP+m$ 1Py6S_\٩}1sY/ΚC&E`\1[&6\6iy1BGߦG)Om$IC18q "\ّi]27̋LY:5ߦ{i|2AcH1`$,o֕e2CBn 2,2Jk(ۧcCWڋ2Zpާ^02e;At!T:qFL2oMA(wh#X\W=2sͨwF1S^PRS2y2z%3$Rȯߊ܌RXz20LGwN'h<v2!gR&}[D2U+ƱKT2Vu2uWra܈}Mm2.KJOBTD?JC392NcI.3|g6E =vwK3%[]8)n3+}y9Y?y(	310K?Հ~T&]8p32=lz1l/d33ުzlYt3QXF5:~|qme
3V|ߙ
l^Cy3]r
=wu43o6	AxoVFx_,$3syF{/q3z8~<^x1 i>3E͟+e3ev?9dm9*38_f0\|QQ3䐟بy`3C"#43Ș܋e)35.k`gF%η4`̶tjȭQ54z~Zc>!+ӄ44>n1Y:,UxR4?UVm1f[4GlKO/M4J&S4QN~|uºWs4S8'鬊bQFz4}3%cC}V}Ɉ4~J32ZZy{74?!]pTh<l4H $`oiYe4͐Q6fM47q^= &T4,<b.s.449MjdH87f,
5I[>1~B5KgrįȺ@eT5m?LFpp
5xPI6g<w|!5{MVe9;^_`58i\}Fy50o8S1hu#35!}ۡrxl5$]͒5o(JC kv?'j69Q˛in:[6!.JM"6⍣5K!9C6Cl^8,76Gt1=ŭ5!)-6QQ˻=8Z^R6VSO׬O!
6XnvHKC#=Tg6[7P `(6rNzh^򑞂;6p7dʕ6Xc`p%6zhk ÍxZH6:&$a٢6
6>9B⋑DNG27L1~
ís/D718v
Ļ784&kץO ̋57C	vhӚ\ErݏP]7H5jB~D=ɹ7LŦؓa""<sc7râs 7S҂9FZVD7M	Rae)J"7yb
i1m,Q{: 7+IXZ`T'r7dp7t~8G[2#jeJ*N8\2>(lþ8'T^5!e89a8P8FV3894Uan($BGqn-8@<,~Q'|8I`L!TNMEkrt8KsZگ\>Fpbe8h.Z;͘9u͛[R'[̵[Y9z0v0DG
0Q'91ulT~p}t؛x3K$9Cɜ	p\ݑM9R_ް,x@=[8ֆ9\	;'+wJ)qyτ9ovbxuP{<"%t359qi TuNl9Cʁ骆r810;9B|hһu_9Z>J=bŮE`91 4YhV9atCN5w>5W9͒_V^؀9!F0ԻTI9M?Jy%׭9~G̋YHc  :4Xy*ZEF:NZ-ZVk:QVfJ9j:dAo6z#:UE%)+:9QW(aoC:ɰOXH$m&$:5qÚ6S:vE~^Y}__<:BNpgٯϼ :Jmz<?d4;/=æP@rͷ/&;1vwrem@;RsR8mKTqeȌ;Va?[B{F;YX{wlEki:;u!kYq_RZ;zJ]+.UXԥ;?+>2|3~;(eL<>t-׉;h3gycUp8i;dbh.r',y#<f5`&G}< |𥳐۬\qv<%ÓP{f<l<+zs$REW<,yn}j}SG?CN<7ǟrR!";Hq@<?"JO4<n|I<hcTK&
RJB.d<#Ns)SRiΈ<asjGkz%u"<%[V)|?<ŊGI_Y-[,C<؈6~{l(]Ϫ<>HELpbO<>Ƌrx@F7=B{3w"e}:
=1}%|nΉIҤuA=/
i(%V>=eu%N"&g=j>
!K@uED=q
V͛=?{BeAs2H=Azg_l~UbEp<7=bXƪުdBm=>uTΚEo>%88MYsܩ.6>qmS9dfӆ>)-[[]*]bg>;&/NJ>?8GEgQQ>kr]MJיDfjVB>$`oJW3b$=>͚zޤ:)7>ھ8镓k8>@@f$]ˈ5?!OYt'k##'q$?,CdA\q6I?8[thtQ9bvJt?Nw8mЂXfq 	i?U\L3r,}!+s\I?WRN8e2͜Bm?^cB۲>O?jYn퐈TiABU'|?nt~6 ?P<~jHie?L9ߒ@m+8T@^h,:@#ivW"௳@,+)S8UFt* @Rl %< @(Z.G3vu@ͽDR3c]`@}.1B@	V'}$O9~Jk}ϧ@C%4QgK3i͟@GUs:z`IAVL*(KZA3Wr8Z-MAA-QR*Ƕ)ZA6W+.eȻq.MADi8"x 9ITAVYFDԜb⿳JA\y:l;d96!}AfW?f]l!Ao~"AϓB4#laAsWTs9hVA̭`Av2qtLg>lAqqo:bAůxE@DLD!OAѰD}!(Z)ADrs.+.AJns`"An3^bLQbt#Am£宅@?3BP@~5+]BslCܺqkaBw3 !5=?~BFk<B
;YM-CJmL&BSauLIgBWB&`knpe-Bn˸훻ٗCA_-<K9{:C(я SMow!&C o[C#q@X"ACL!^G@R"zcWCMOD\nzCp;;垠rOKF8;C1g G댞C[ߩ9HH~=CmFA#~"C˽AEz+RE{}ےCdHOSL؆ECGF^.jxdmRCK?"_;bsW.DU.[#YDhbn8D2D"KIyVGLHKD:qGGgʎD_Iߑ3uiqLDn,*JD;*uiTET$:SD3ǓEG.aͩq!DFiʋm](-~D׋<̙
?%oD	>]:
&A$5D֧ד4j>2ODXDf2{{9y;~z,nED (uԟX|H9(EI m;3.xҤ~Û<EK0hUkKEO:Mk˘}REZUWB{G:GgE}dycx %H@E*gK
!shF&`EcީtqOܑE8?=bǍa%v28KE@5hC.kI5&4PEmM+*~JLETzi񄏅05EѼd F&&<ቴ_ER흱Q81
;E$p?,~+1E\#}h֍HLɊF2!(P0Lo^Ft!VǈP#cU-F{o]Z=e?*pz-^FH-=ҮFJ$^B5#7F}鳁32exOlGO'=,A,G1hEB㚉/?m,2%2G6z6μܖnGG<rQs1mYU{GBõ֠		VGG.# ]GhO*@H삏^4GtY.Q%JysE-Gy;<f)c\]ՋGG}M}t&G6k~<")%G^{@vМ,b;y,GF}zEŴ뎘G[WHo`7ƸG%|fB˼+:<ԡP77H)4?%gSHCW֨>.N%"tHoOp~dWHaLZ kH-}! ٽzHg n.B@3aH7Z踛yCQH2Ĭ^-6w-08jH1N0nC?i|H!|YgI%єy
~I:T$nh7,6I.x<#UAWI\WMrѹKnTT_IdvaHHF̯mIboauD("VIL$:vd5)Cc$I Jq<[DIzhaX6AͽHNINǬagzIJVIso@A0dvzIDiC)=TI}BWkeWI>C7)ބ*8!I 1I2iIhUS-uIp8 sوu<PfIj7)p$qi=~I@*XxtLϩ$&b#JK\M܂|G ~5HJ7}:=>4o4jJ'8H"\ҍhwJ5N2k {ןJ6߂ܐ-O.G5v(JB,D@:"cI)JQ3:D~l٫|kYJqއwAuJyoh8qaQoPJ~"lσ:k٪0JoeM,zLu7Jg	nn\UDJ_zVJC0i7эjs}Jo@oP(A9):Jڱ_exL{üJΊ;9sp97_kJ]j̖,UH@uJ=F	DtjVNTJ,}Y̶&AK#oN" *	;FK0|=E[nh4	IWnK2fex(˼2<iK`+=ݨ
*Kd<@m`cb<јp[KD.fy[K~cߟޮK$xUL/4jl;Kv>#si.GUKyݒrH8tMteaBLf43HܵZKM>4Liy8H/ٮLztΨKo"<=0FL R	_Nu,=L%oejsL4]Y_^ VL\J/Y'8~w.BL^X"ɖGhP>LؘcB|1LŨL?63r&L&Ye M73Mdn5,)[AM!1#;C	M؞pM%CS@)I/8eJM);8 >~DQ7M-:)(oo
ajM<tM&ń]"eMh_*)ݜ3I_M}>dtܫ#Mx"xrw䛲Mz6UpME{&
Mh]~JX=@-!uNڧipopN5&忖~2)ON	<jx(׵!YxNUp^xNv5*wɎ$ )ax*NH
żNærL8jD&%]zNiˡZ̐ݟDAMOt9;O-
䚕mxh>O:gx?*ڴ*OERQ̸K/!$
:XLLOP!% pxtOVS0MsMLOfj
qnHO7ڜ/	RCJFX hOWҰ>{ZORXrSD\w. =OאF-'"xQlRNsO\.^=wHP7mcmNBH4PS>gM/Oj)ˁwoP5E`SόP'+}PREɪ&dcLL92Pgv@HM#GL1CsPkK4SwFoKPtOHzz!aNP[,9P>lWMʾG:ݞ0jQ*lMn~ F!QH*ZapIQo2 p-4*2dQHjN($o0llޮOQ,p@a]i>Q\$@S/]QAL0'`;Q7hI܀cQbqgU5R<M'[l/*R/ZٺAH;^Ru%/A"֠0R|x\DXaAR~<B%keRlCtf*aTxRR6Q[M#LSHD~5SW$pgS;@k:#=jJrSD0=t:%SE$ɾ;?5RSL49+Nig\!r&SmuW~#|S\S*H"
b
SB]t^>Sg]5+s'%-iSVM]`$[#qS&S,>T hG27-ӿ+FT
)ԑ%
1dnT|Tq'o>pV1T"Ya@8L)+T08j#arp]
ذpѸTT#|xoj/ T8hUQgPTu.>bGR3^*Tss$2nN_KZf8Uyac.۔?ZU!@ڕgvI`;U1$u):ߟWxNUlI];vK8Utw2Q`mfGnU\N)x3USs3ޠl8UL VgQJlFLhU"Nht1I*<!{UJ[K˼gJ*ƌ.UKS	HrЂ!ꔷoU:A,+(@ZR&rU5}Lq:{b
>gU'M+bdV [c!ۈH{v,V)8q}ܬ5Y5VVkoJ#VWck37rC "KV[^mj֟7VdZⷙw^./ƻNAVmUDOVv9'zSd}z02Vv62\\;wpvVӺtVݨ9rE3Vg/ϳ|RhVel;z)VԌNuOR}@VhG,i~k{JVC74tddrL_}V#MG~?ŘvV*Rv3!>VnEkxF2j]Vd@c.3=𝮯?F0VɴpT~ ^zV
@[XC_OW$e=;nU\WaWX:;wW [fuR-Gx>$!-W+-n~21h:ȜPW=RY:"7^X Wp-g励d Z"Wr`zGfYcX׷$Wwd 9f(Qz?DW|~侚&M)[ɊW-_Fs<N"IW{WRy%W+@U9:5WŤKҧ+1GQ/FW1nBڬot[X
4{>6F*0C-DX"#OjsNyX MwG@Vp2{~XIXsNN2l3XlP-.=#!-XrevS:ĠX~jy3Ѫ̛XׅtھcOIXt-E{52'9O*Xp"$\ɑu_>ߘlXIP8Ic2_p
jEY AbzjY8UȜ]MOYsg7e]4+u򷀉Ym14РGwbBYWOm(*VY0g\<)e% *LxYIC^Frf"nY	֣)`uB"5CS#Y F˻ൠYCcct~WZ2$s;(Z
T@ m}:8+Z;GG0;:G]duZ왗uȅHZXq6k@c@D1QNZpVh3>JZ#S7s?}	-Z+KK%fe4ڸB_Z3 :0d3ݦZD<l9k	~[Z[2GHEQhMLZjz^[;iZy͆rEhPZ~wV0@ztw%Zd*CgIk:uDZ(QoPF-6hZ<Y;Cy{J01ZAVIFLBf/!hZ^j0e}|[W%oNx
˽[8>=kCucΒ< [\(Aޞ,_s[]GKqK[W_6阍Oy[qK[]Mi_֥%nrN[8OV[)iK#660[G)kiW",J[/zR2k03Py[NĆ׬cczbf\܃	&x#\)$F5 pѰf\E8Կ2Tnّ^5pi\HtSHUuǹYb\Y+a0="Wa
}zPv\zU%]p[-ݮK~\ա_<E+\ڑ0.`T(e\SXGOB\EՆ$w阆20\z|:?6U`b0]{<7bXҟv]!_*S'l0J@]2~x.[$ǌIT]V򙷨cSSys][+Pn.T]]yP@1mf{rh]{1cC}U2ϓ|?@]꼤CAg>B;4]M?M7Zњ&P"]LaJC{I.]]8ւ}Fr"솱j6]ǪRQ)W\,xm]$u+ݒʫ~7])t
{"B]TMMx! TP]֏Bn6>r^ U^*vG2;nJ^1̨275K'+?^p\$aQc+L^}Jq2ga|z^Yu4+H*4xD^go.tE|^ȪqII0<ԯI5hG^޿6}t\<_D_5;8iJa%B_1Lp}=>nzM]T#1_wd7kl{vNx_3* rc\{e_;LS*fy_C\S"O:N!Qwm_j[M(a$|_=mv>%q_'/=1ra& ņ_Ī]ۦ,Vthrt_WSl GNQ&Ic`6ܳ+E#Wq`7w_faQ`9BP7q{ŏ)`>;npkgr#R`@M-u&v -I}Ȝ`Cv=TmI6k9x*F`KǸN,-~*%`^k
5"E\%\`v2PQ%e8d:>&`OJuK]9`Q`v!:6uڱ0`˒tNO瞣r$W`#-Q磴$MSw	`&pV'VY;`w`#V~ň4`[(抋tBNƢ`"=9c6,^b=:aϰbnQO$8a줌A*[7maVP@@X=μCFatk<KUrȭcxaǑR(sqJavot,8Kc&dau쨥 b|u2aqv(d'"-w~b,&$9pw?ܕQbWbC2l@~"b+v|m걳t~SKw7b8)6Q$"T</1cb:Qu Ipq^bF<ӈ{ܬ*N;)b[̣ƧCB3(Q@e-^bhlTtv"~#BBbI@L;6ъ b6~yi v`bN}ȻI'R0\Lbܘ/~}<j`bFE	͵\bȄtg:bWÍ=^Cbb<l<|oœyEbj!ˆX3Ucn8:?	o^͐yc
ADN^b<W|c[Im|ʨ[ .8c'@, ׊$c._z2<$ŀPcKgg[bZw>ԃc]Xc8U;,cҒRt&e\cN4o
bc鷔ФCucV6yb#8TEc\Hlw956)csU7=U7d(d=~a;cUd+2yh(}gy>)M&!d4;`+`ꫧ=-[d4ly>\'{d;{vE#f&A d=E<oC)
w=5dfu	 ~z|Ed)Az)NCdF؋`A?^%LdiL|3jeL\e؋	`f>e)<zS+SP_deT`U{]5eduKXĠ5fFexwl/UqO_wNReͬ0OseA^*XU[fvK7[Yk-Of*xС>Bf7J=NaH)f9c:LINDDrlJfGS9gP)X7RRwfis|9z䋅R9\ofj]mO}IfpmXe*P"	ǯf|"s2Ҿ%@kF|lnfMhuaUHKEfV*=\{8oKfQ2؟{lN>F
f[ICypڄg	S\ـƲg[}Yוtq3e<gab㒩Kvg{ {!\L2!g9-܆lpeXg̎}FYTDJ~=	gEOt\1ӘO3g1lǂ#	K8g+cjpB99%g9᳡ (
V,h 3֡;4Dtuhgfg:XCu#fhg
2J/0_7h%5<Ұzh$sbLo$d+h0YGwStVhacw쓳ahu耫p!CXΈhxC@Y|pR"\s6ľh粫Jw hR{y,o7LxWh$řh1s,z N<ܛh}df#'Qh.H|i=^5iGP_QA灩eqi?o
ߐ2Ttri߽'xA|-Ei"QT+:Ͽ՝S@i.bk7`6XE	E2i>+ER^~de@ mEi`>nXQz+	XqipEJ+.=4f?i~	78gstiA+h>wH( Li $>qC=T"i@ϥ@AF-NQ`Էi>J]w^wiЭN#i* y~7k3i_Gl7&xkLOjPX|IHmAljjV!:J(Nqlj5u-2ljo&\ќ~ƙӥI2j"3iGD@0:j,ȗGH%VDnEjR~ }\Q҂T<k}65V`;am531dUk7#lvV P!TXkUI?<%<)Gkf㰵kV.U44k;H)hk=S"ۿ1Dk~u.zXu:jOk'Tp;<7X
/kPǟØ^4 kڬkҋQ3Jl?}^^GCrD]Rel {*jhy#1al)*ҸB5g."|sol,9vhU t[!gul.l!<1+l8Mߐh!1kLۿl=[4W-Z]qЂ.מlW',+
aHeldK4t4T^'Pld,[& lFND>b`"̈́lk	&},rr8lv[PlsAc,{m:<*2ݮsNsޒwm6/d|ٿmN};+\<HldmQq9i՛mSݸ4Ŝ4/>me	(Iq"2,Dnmm(,5w@{$Sm5=M%^lSPsmZm4D؟QYz;mTA@16n{(P3<Dfgn*'*9֎nLt3n0Qɟ_6.anwЕu <v+5n{*ˁ}@nP{jkq{n+ܷ;F.n㾺eIzm0T vnl4	6cQ{Ün=uSf#`k@S.l@oA"3BSoEFH#>@wqPoHE2>,P!b<?Lo-TJeBdaFo0֧貜η-vۏFaov=4+;,ߟo, $tf@}34$w[oL*d5Z	oVCDT~Otp.|3V\oknB}<ړ]xoyNrzaA#|or{&)xypqzbD[AA4pܗplLC6D@`kdop"OGNBtpC=Z~!pPKiOOp}6&Bo
x@iWpoT5zùKgHeD$TvpR-#+١pfr@E}{f%pbBTyp==ߤrh8jp2&.Op1Qa+Fx^rgp݉~؍BG'oՀHHp(1GS<˰4R{dUo7qi1)0%b|u2KCϭq((!:a?*vfq=uO|A
Zq>k47/1!qV'q"gB8qk\g	!/ +%qu-*lhGxKlqv3\4m^OFqy.}:`0;:?
q[j٪ЬAY>q.g\Rhџx0qTu6<CqǉS+7[M
mqt=@^yqtsؐbT2ym hr^DЉ&r" >>}&r;cB]Yd_Pr@* MeEkh.rvuad`O${\bDr.1[c&rwgЃyr2?rkKMV6Wr8wl+\,irmPJ8kbCr?hj;"r;"(r"j9_~qѯRr]\f4;5tLp8r+xЛLAm9ZQ:rlRWԞA^Z2sOi;ȳ1
XsX]-nh,̺
/gAsnأ2e!$QWsuEqPH
Qsxͦa:x]hJ'	sy.M~
t4s}bCAq}M[sԻ#g'WQt<A̹s#SMhy|19H;sR授T#->
sKwb̖,DsĕolhAs቎#Ql3qmلysҋcR{ԬRu_ܸs6(xM?agTN^.]s$sɃW`ntoyj20?GtWXGKQ"t0..rhta2)pY47tNNB#ESx" t|W2ww!tѿҰB-ƛm8tk4ͼG*aNtyY[EMIti,D{#8k"htML'(MpYf+u|l^3xmGu2Xb?Vu.N%u2Q/>jvLu?_`5#jzUmu@9C$NL$uNB?#}RIuU5ex{Lvu^\GN|wM-iudn8UM( u%D`|@uܸ$	/f*-uܔ
5<;svfչ6ASOvdBvFB85Zuʖ+Hcvـ'deMuR;B|v-^/HE
Zl-.v-rx,)Ie@v-VDSPi6iJv;UVS`ũtQvPdm~qyeO>*vn
ؒ}R:Hv{kxHrzHz@ +v.Rb.?v^]r{3v#tc$nPvuY&	amcvԻrY'wRiCu^vՒcev_T~1vl]#Q?)%w,TΊH1w;Gɓ>d|w>)!7 ;GTZw?[SW_*0wF
d)jHwBkN\6wXʹ3Y0]1?w_xXүwvwaEmbO?Iwe(X^/ew]Ι>5aG*wz&fgw
6w Y%l4wp
QG DK\3BwޝabI0lI&x /`S !GXѻtoxfN
Ѥ?8	(xޥ[}M0Đfn4;W_xKn9I2B_	LGXxjZ6^t&[x$i
ϛ5=QDܹ/zxs>	jέẑxG.,>*"TFxՔ!5
S4ZXQx,ZoJ|#0ηQjxtZg蛲,&12x냂KOGjЌy"i$:i;$t(yLM8O(A/y1ղ$ j.]8>y>~fT
 y><,ਿ4 V%KyIUQXQ>Aly[|͙ڻ	ChO2ay__8?\ǽԘH}ycfLfar~c-)yqG3hڒӇry%8Iiyg^uyn>b]sAy؎5g)Jy/rp^U4bn&G?yqʳɏ>My!ǡKe=;DUzW	ܳ7⁹Sz岩@RrOq+zŏw
ٳd+z*#K<U5.C7LFzP58td2zf/a\uzg:ja>R߈zuemjuT&t84z|C`Dykti~
rPyzC)Qѻ[T>P7z=]xӇY֎${{z|Z* ȼdTzcWz:LFRNhA<U{%:	%/0vm;{[rpZ^2;{[_ΌŻ;{&}6g\1nu%F4{,l3@|;n):{K'0mz{Qr
=M[|N'{WcRAilS2{{^7<u[eҷ@{`Yp#	{yv{MMsw{yKډ(7GKL(=:{~&bFsB0m|/wid=Ԗ|&ڹD^rt$|8k6-R´];|[X3nqq]?t/|dSޑ>2d$[u|lw@lb?/H" |eגL|n||e#U]B4_|P./||d),.k|\_?"7|y;w98	|Ya#4
)jB*!~}:b
xv
}եiҶֽ9;W}u|xD~Fs8!7HQ}\J;Z^Bi,}񯷔GǷ͝pd˞(}% W,VJ*/&}CJX`=r^K}OGN2yJr)}taY_gyk}xYX^/J!h+v},4L`"#j}>EU	=ELD}b	DMtO;1>D}п,\J!):}ͻkO5a}wbф`pzЛY}eI;9(~wR}'"
b PX.~}41dO]'u~+cʿM]߹~~ 9 Ir^u;-Yf~%@h|HC_PA~,,Re-F&:z?~O.*:([Z;~SmE^r+r~e~m}GAΎ~ji4jh-1/(B ~tÕ0 x?OL(~}:̓9rH׶A+~}Бo	,(ͦ{~PnIFF>~ݲbQg9_~:t1O2P~aʟ"ڥ?z~)C+o";Y݀&x%ǰc0>>(z{*z@Mʨ)+Bob,zh]s;4$j3-vϾz#(yH|VvK?_}_T|\Bg#d2N-ukኂ
2|>,Q(Nf[\LZ4[̍	Ӗm8'J;E,JY'n$ʉ3NV$A>=?*/0Lu XE0O}Cְ2^+h\ӷDTo-o-{̧L;\̡y "Yt#Luv1|!m_Rǀ}s3aXER&UBb݂"Q3x򮳮wGu-er_C-Q"b]ZPƀD7r>kH0ޒ* 'e2Z8T-VvmBa.zQ&$p!z%Ucs"Z\?;Hn#.Ζ1 /ЅƬL5qrԜ~Z'[ إ藅aHmrܫb,2K"&i p0ҏdY0sqPwNaSk@=5Ka|z+?17ӁeKNcYE:.VA12ӣcui2ha88!ˍI-z"}MyӉ"+U$)hږHN*MJBާYwS+\ceρ3	$!Ɔ&w۹Qq-BgC$(U"i j#S~yW 9UfVkr(y'JI_kD=JQghoߗI~&qwPYJX:ʵDEQÞm@<-	,fN,ªd+j6a^ëB #Ft;c\|uM-O9rΠ߈O"H7rBGكa:|f#VA׀~?`FLd9Dq{^Xa9k$*kNV60(샤k=k27ŃW
8__җmvQCo#3NػGko^3;3*W|v3?7LzLVK?dR("cfQԓd6*?kX^ک1*B 	Ma_lZMXpd&* Ok΀?;vo}/Bsw{b궲<ډeVR	{|),lGjZ*AJ!AVr:mb($+iᤄǎG~n.
]fD4<4[̤ztl_'6Jb7,{Tcb8ŲD*[+K?6"m>VQ59VK5qPĴ-
^nJX61'35ʅMX4KT)_f&TZ]AD!aM`QS-_gZ*h
RI[H[	A¶Ho-]Mˬhf+0n==p|F[,V/BH/E^2r -xw.gjiWPfhlN,¢8o7n(Z1KvīMo2"9Vor~{]n$/܆mTVYV[i~o<Qegz ̈́$!Yl׫KtDJ>QϺl[ɅAhs"=Wn
MqוO3y6z$g өeL7cZMݰ/2B:wk;*ׇ}	B=ZL$އ
D Ԝ ƫP @0x0Ȧh̨q59@ׇ=_zҨUmpH=wl=jnԛ@:j9U%.Mcuܵpmkq!(w܄]
-jgl0FX ~dZ>TɭQ=9/:MPL",x2;`/|I/m% }遜6 9sq[x٘Yu
U$ 	6DnY8A8,YJQ5P,ⵉ$ |N_+ ab_d܏u!15VBnRT2K5F7MІ<z#2ww}HHCuGũ1h.)֏Mi/O[PEԽ-+ˉM﫽aBw@|b̗c&5?T;9AeTq'|dB4vVi3齙$a6]N}$,3yE74bu4-@ފA>stvV^׊^7ˉ! ÀuRoT9_!_m`. 劈B8٫.v㊋pf=:Zi4IՁخxDq htc9l*ZB]og?5NB*iѣ *|n1t}ce4쏼I_ɸ$3NYWh2=qjS	ъ%wVE&eʵrW2Do \Ǜ/\?䳪Gz#`|ǠɪBgjbKhف\s@yO,mmrI6rGb&%`mu;Ԯ	6(ίWai4:/_~b(ʋ^@{2Y{H+ϋUl LX_.y>Xˌ%QҾ)j&wbEɌ&{Jqgٌ7#,!$i*Fi@?>(.-/+r?AM`>	zVOA?α`Ɏ<=АόQmYCES39?Sx@U
Z啀BpXȌmhNPN`'YqVM?`vg]O^NqoSMD2GN&
Y-J㑆Č>;EE,4M，%z?q{W.TpdPM]K6J1{{2B:Ufԍ(4B^㵮%l<n/>*[`u$ d\[jTaᱣE3yލeCs_SC4몇w	bS"tR4#P
ʍzvVsE獃CEv!bӨą76-ąAPJō\K'hCT_Uzh?.v isU{7wU-jކ[}+-_0Wc_e"̽1	#fA<D}':6oM!?zcd#dl =/=؞~B	
M
O	;q~dLb{vX=2eP8XFf鲐nr`5Umg!,Ca1/?.-)Z.J(Y05*x\P ^a'hpvF=Tf1@a)a~aD~&<og((7,N~,-$%}72y͂FH+Q6(Ma2)cfO.s!As`Z*s{S!aVqu
H}^}*?zXm揇Ry&}GH}#QX:/YܷWN39(HACc'D"]\|,:`,+#JT:4?³s	$j]gd@DxH3u(ِBMT	zGeICQyGW4x[apuh:zpF02y'䙮ՌQU P;憣".1ݬYPiݫ=%ha␴k=J"Z,crU#}V7ڮod^?rX+e(%oH&3Q&>-mM|9-
a;E]3oC:V=VBrIzX4 rVyȆ%1uW'3(0yב>K>;ѽu׊-H^~KgNIJif)iu# s@WwEӳ]˨\!GiIkXbqb}PQ\+;XfRs+oɐE`k
~uzuU?>faLӍۢN*v1F>q?ł{-V֟١5~ۑ&"!~MfՕznJ{
ugqW#t>GrJ燑
^ٍ{7g54ͳ4儅Qcň |\Px8?-u"9^3	4B#C ^=_6ܰ0{6C6H??UF8(ס8C ^fIT0rNp)O8(bh`>*mwҗGMĄ3Ny24oA_M=ӴC`8SY8cSȱ4 q'ْt=QjDJWJ
q:M`]׾-E~Z)}iF~wR=@<+~χ $]`	._b_|(:Ny2gP.9.'rNzٓ"1'6޺xm`9]+0ZC/{sɓѹAqNdmè7| >"6୨*OX/ؘ` 4HliÀ9'&C	0͕~`M*ԛj1M& ;}e{89nCow8stu*_Ŷ'7kV:DoiZsʀeiӦj&IY/xӷ̕{IF4qN/HOK܆+s	!~#\mhdzVmXxu$j"z@$0V\orx>*_"FyDm}O%Q=m\RQ9ioN9(9䒚&]12\o!@	w6G2:(sʖ+20a'3]mZ.~8qq=mbYC3h,|p;B L ]9yYtr=$%Mj5\OʻLA y5GzH;p]h!X{^mF o!FM&&'c>x8aޯwn9Y0I!&n bN23_鎈-׵"hKk^m
88e//e&ށnC ,0zq+hvחDfuϿI׏}~i|`."< חj&Wl}>?>{tݺ`
^kԗ)dwAG9nyv!7\9!Ś= Gs`Gw.\զpn">tWs{:&m=,p4i㦾یF	N=-2l9u4_s82ڃ3i@ɯ  uwuH|N$n`[E{"Ϙ6P;oO M̘6AGK/OҠ;㞸 /2јDV,`/!˞EbugB *}՘\n#Flx-Iy%`FY 4?~zig򏜷I󹘤bng_w:d9${K.23P8hYO?ϊr|fY%I*&vrS)6@u{7^k:tjE
2t0JX4 𰥱CPL &dKeXNSAə@c=Qj8w@dƍ@MWCeO'DU/?5_Gpg)~OEЧ"_^~M?T3ץe.6-d*pCs0_>"7O-NtZ9Zݥߜ`ۅ1"vҊ5 &$zB,Vh;ޠr.E簼^ރΣv4p[kִ($\ake!-Ě
t[_(VS\w,G.ϪUmcoU,~J'ܯM o!"
MKDR{tJq1@&O6t0b$sRIT7/Nʎg|W/`Tnߠ9wA<ZS9Xs 6l
RPF[}AR=1zN8%}9@UC{2{M^cmh n$I(;;?1z& 3J.0/bRMs]nCLI`VPTo%f|6TQn86x0 .$UrXףPw>O;"A
Z5|p+:Zs-wFSǵ
a@+ǛN"@EhcY`N:Λڌ{Z2E^d5^6~:yJ 35Eugǵ8k?vKR0V@ y>Kt	ͽ
m*,a}v)}	ɳ!~-1b(HWmyye0KY_ќKEe	wwmȫHvl||I
2dӅKǠ'RѳdxQf3Rf<b@Z]ݽh=e"D$]bXjV6ǯo㖸ɞ'o=ݤv	M۞LS\`YO}K.ZoYX6"FPbE8)I,~A\%D۝H)yag +]6!~Pqae>Γ.k ELu?LK_ ^ѠzfP.lJ|';wCܡ/3?F?w=r_4֋ZuM2ۘc,h`yx2̷:Ry~riobV60vu_E=\wk%WWZe'JHe|~KrjǞKBQϤ<[0^߰+=II	>mUI1mΐjCgj^_lᗇt}4{·_X/ 
?;ņwMܟ=]AsmGHBZvfq``Nvg9P5ު>۟cwt5/.^@gciC/s@ 8r^(5vPFv6VePrrX*!,5~U)C'H,!!8gJ*~.<]CcUJHVdR޷vj/aB٠;o槐w	_1٧n 0p~G6g"
.vjh"BąНϠ@#\?$`Y$cߜBVkHW5z[!̠:6+̒vq:JL'f^/CYӋ&0XJm՘ b`S>+$נ<@7YY1ǷݠWSW͙-5GvuǠ{JÃ{G'(="яaLЎЧ:Ɂo6(ʡӘ{{څ*)3ɰ>fY];7s%U[ckh5r("W_ {d)P/%+O^Fӓtß0dڜʏ66da
=T܌~R|$&5Gg|/^-Rlc-Q¡ɶ`1рDїԫ~T<E5ru{2gQ~w46Nf(dUzA{5_׼ХVen=k23#,	-7EnϢ56r1K'q7:B1R8%"V\M0=Ѣb *kT6J1nqcZ1#nrLT=2tXR MŔ	҈,@>[侈[o=d=aX~NG/2T^qՆՑqRݑTpUn]PiӌJ=en 96ѣMz.aKVKad"D̚GPB8?jZQ@i-9}R.*B=$`7T(Jlט*[ѣ[ 0MYmԈQcXZegN䁥J؈[[_d/Z?,¼gfw}9]ChP}7B蓒;dt1W*i3b4&T!x2>n>e줋59#뤌TʉҰ!nťemG ĥ&t84*),qZ	4ft5/>F	kZG _QN,N;cjB杬TEIgc~GҘ$fE6RAN!UTV OVD	f℥[*]G:4\o!)2Ssʋ;$p3{[f(nH&GPL2$:$JjnlVMֆŦH[hKeʅQ`_Q*Bif2NuʺTYC~FyZI*c`sJ"#ZHk צa7s;a-CǄw/fJxO̸".ZD)*ƦЈ?Pq?BO tiɜԦaG~\-Rw+!Kgw{w׌ey
݌n->KFMO#IҒW#8uæ`׀rKWLbbǒ<G#(zd:Gm!<}2"4/Wcɔg mꇸ˨ᤙ@53݁՘̣˙<\V:bxMŕ<_yB2Ƿg
AMz	SE2Iw[?/1G}ҧK%G0zKSHŃk0 ǂs*xQΤR,`2ȫ}gz11?ܧ4.<1|3ܭ,՛%l|5ayE# ݨB^2gDwS"N^9rvKKcаYOZ^t<tVahi-"izw̫"8CȞNty8Y WӋiScP_*O=zÜKV~#R{{Ec؁aNJ8L`˜.Hvzp$"k 2Sppg{͈sjh	teK$7mg#ީ7ҩ(ϲ2_h2
c5'LADr<`=Dx\ַf7$1>~.hEDu AN@V7Avqq#.1)GR˩VqLrLP䆿~w侀˲csf?#%XoifwH 0hOx|fs?
v`mj6E+^{T"%kU <umKw!>1.=+K_b|>W2xnHTcŪhaQ@,K	K"
Dz^Nܥ@dg~↞D=ʰv&D|ҫURqe&P=F*i	sުiSw0 ׾`^yT#ԛY|$t
&&&Pu&J^7/IϣWof.j²UMԊBpq+}W'b09gy0yRh9ZSVKWCk3.-)ɉzZ9]kiKl g0gDX@$˻㧬KGTZ5w	oLmyܬBwcgLݬ|C0Z7+ŬuW.ZҬ`߻G&Ǭx1AX@Asi	fcgo5JH)5 tVfa5lu'TK=-R7/"6$D`c@
dYro2fBZ(~-SA{¼&5SXɭ:-20u'pYo:*ٻ2$8[z(ȶ$O41R#_?ȆrVlncy4EJӄ*CΑAc0 EPY6|;jv# elƘ<w
zr*#oNNQh<?REA/9	Ju7=m<LyQS
5茥7lWJONj"a=q>எBhr'/gQ	>֮uB݃OVsX$$38?̘8'VCQ"z:|J1UcKBF#)`왯
c-8080spӬNPJXY̮ꆡ#)p}BIRS9Ihuh{/Nk@(Bp5ו&i癧 #wLQܗӯk' ]/ 3COjp:RvF1%fO|L}=XLT%xaG2?Q 53uFqwsw&yh$~;+*|	Ls/r,uCwWѐ"Q|'U|p ¸fg,p(JS/i{A.k+e{Iڸb3ڰ]])sp<	ı:FT(*_-R< Fί'T`ĲG.}ɛa6̍XmvN#meZvfވ+t9-PcލXp*ު<nhؒ7׎vMEF!vyhG,52g	]ղ6ÌZc֟yi'Rj8Qoxj4htEj'cb+I5²oEߜ3 erȦ\{Zt0MnyNVs~R,5'̩S;O;68˲#ީhdkc0P6"th]cҞb$3\!XS"MƿE%3bJDXE7j9~ƀr:fF 'uH4Lzcl^qD}c":)dC&@fٓ]]hX(7aw!@-?KTٳ~\S{QՉ@{硳}WaB (ۮ9`J>sy<U3
͘%}3/a,m8.fX]חš@R:޳j!%z+f+%T]U~QUEe ٴihFbYDpwrz^)y^X4b,5i]#&yKn״H)Du*R-]:OpTG,\j_meu&[b+^sm/
5!tOV_:PQⴡyTn&Ә1
Ccm#[0٤Ȧ۞v>`B)9S<i-pĐ5Xj#q"0MRwi%y#smPTiv cxBY-ƛ[S=@2dsP9?epy3S` ?e}*Y!HՇB7flWiIR3I3ˌ3DsBT?MZ푨*(:iC}\!LLIvAJ(VȎ~V~A뚔~u+xZ9c_y`a>`%5e'c%yN(n}28OkI2Go.WFoF̉׶#Q#22νQV:AcR}"ԽeN1꧝9p),?2ڧ mf}lfdhQ<n|zqPUP"03ڌcI\p{["Tj}uɪFZUٶA4/$;L[uN3L#E{aFNur8b~%8`yȊ;1f请(j	Dɨ嘃3.1P%~5/DdD6,\
DD?qNVt!o{jX!/(rʮDd4 cβ,\XrKA)4$ #Y'/ٸDPw:q=2<WfV)T$OI^sǇX=D_~d8qnVe!1ٽ5s	Ee8AQ'b^h	mϞB끹^̶\|gQJTh$4+(n{JCN7U3lZ[e>pS?eDEşt%w%Y~*{_%RL*Ez'Ļ4ri+#"]S>N"g#?XOA$:kiHg{`)\_DMI4n-"ݬjۙR^d)a+&Umn@/NxU	m[K%M$Pe_N 3x9;,{ym(a&jY7?|X9#6D>m\dofU<bՉvXDo뺞\`L9g2xM'"H[>.,DVJQ^YCn޺|aoԦ9.>mz7y-U\Ce,&(s$;{3S,>00]DM"~S
@&F~dN"U龎Yr--"1]J8@P
1	@v@dt-Fvn߭UU⻧תٝHuypMJj,'rCuu뇮Yy?~%RvMksqVPBvHBXi@PLP"/r|֓om5\н`ʓA#v
a_P
<$ٽ<g?7pY[7X:4"eDȼ̖}u*׾/m`la!oy*w?5Ch`c\NUF'GHzF|Ɖ9ؙoFOo*ۑ_ܥĽW\2?V2e;=j5нXhmBqb	 bQ  :Df߱`ndk+^0C`o{нdٰݜ{%y- f¡_k*=~BĽ
fJ&y`T;sPbB%臉yM~q?>ekgjH8d큽ÇpƴT@eWo3tŪx8>lbBVUx0M#_n5Q13
 E
crǞ񭃏@g1'h@+$5DS.lEv#Ks94nEGDzsQv8]+"mD!< "puXS>}y9x/GjۣἾ:Z-S	FrafP߹jkR뛾`홹$7yFݓ0M71n瀦y9ɓāq>;$j֧ "_?7 yc"U
	ОmI.SK$nǡms?aC([kera5߉w4ENf0Y'\3yw0#<#{x]:9Yq8 J:@W~Z9sf}z VgY	Ϳ^k[ P{zFk俄(Vy(Ȓp𧜿7oBߔ^Y-tѿUz5.N_p\ῧGimʞ"]gybnW;a{>
軬?>L
Ht#z&n{ͳwȓ7bYF/ URZR2b]5)sn0RGyŰ=QGhxݚ]rHe(,EL.}`lv|NRo9}f$m/*ũ Zy:RۂйGlC( @8kΡN+yʒ8=>=NY#2	H[Jjh[_Ӆc0*(oLj[J֏j0~M.7\\ar0'nNg|I=X~8(b*p}|yI@Ys|&OD!]ExOO7F8.A>X|0BkyN]7<זU2ת.9q6ln#koN3,xAf
+!hGlg@AS.18P gߵZzhLtdA' !BEW%َt~NՆ	)g׺%mODv+0rA":ljO^!Qۆ;|+#OݢS+X"9Q0s˓gޯDh"eR0¨mQP*7[ Ұm0ѓo21^yje):@kWAJMғ%n?tl7ڮPd7TbTNXfΗO3#}RHL([%\^~]0EMD*a+?}:B̅~P_ʓ+Ûk[,ʨü
_ty:<E6/Y#Q>oPo@jCv1dI:AX"y&ή"LX^
n;-18+7ze.P7$@I~Igf/;V#M^! kg
T]k1sMW}dpT,f1陘_nNEB;(&] ЩXMĄ_pgjiۯą}#귵t}f]hımZRRoĲzoE'()؂4MS*AbΑ;kV` /
r!W}"Gzy;`5v^"g4Ӈ*v}CjXg$VHcN`09Cvrn%^O.r)Lw\S%iM=/ȩ$O{oXPT3մrO}ܑ{$Y~a3Ż|UŃl{zR͇:eQŖ^)˽U@w8ť3N f^ɁۗTyʥR~eA*R@0?
lWWMB3eR|p٣5BFC(*E
:M鲷SeF}6K$N?{GHytgT0쾑_]owd^4wy^XN!@7bmgNn6TV
ƌ|Z~:xX!ƌAFRg`1KƎC$鬀&*!pHl$Ɲ(!4gq@86.,ƮuDhΐB+Yf?ƶiFDyV)YWܢIIe1EFKD8yF'jZ@%4FMub4`R /1cz	Sa+1SdL7`v`"; 	GMs(FNK[>{|" v)v>k9X7ǌpCmqDsO:P<LGR3sȏ-'|8R5y7롁[IȨWwt;xpM?xE(KnJ-UzPS_gږi#(T(3NÀOA!TGnG1ڃ%9\W[1~XMXFɿzgHwp7!JȂ.a 1>@2̩=)fȘXTr	qiEiȶ+}1>ɠ7Rc0!"ަvlc$J)6DVQ}liyqo+MK_ߑ	m<
IAx`BE
35FFpZ|\ý:rDVw['d>|5hA]}C5n}XHRK3}CLBf`a^Qj$pl
c8{Fn<ɽ<?¯锢[)ɽk%1w`1q~	fݏ0J-º0Ya3cG3ïTKx}+5@0sh8>ηð?Qch^|g>6mJv1OG[w$Cʣ&+5eh #^Bʼk(^HBGc݆cgZj}hF%1"5n:0{d]H(A%q!ҷ'	jY3mޗ:r ].蜱a`rX腱h.kuĐ5Pg3n PXЧTeX hC:H-(cˌlCgL2I˞C1➢`!r˹ZDU>o&g	"~Cӄ~J[$֐4ǽ'	َ)e/Mդqk~*2XsOIIVo4]4}W%nʮ_OmgqqTC8T)Ԡ,eù7ʦ!]̀7.\֮Kc̆mi9C!
X4{̜4yxuDS42s0r̤6ӕO3Xܶ]w4vD|".>e{hHI[<9$tvx0q}b<I?׈l4Wb{1Dnrrw|,5ScSw΁n\fͶ\ebX8)s&_9RܐAn@;юFJ6'֞sGb1a-X\ј8IobcO=8[#x_ǯf/a~jșe<}Y6΂:p,*/r-n6Ί:uLzX]Η}.x;Y|Τ3 7]5MDqέ&@Xz=̀6έG^XoM!a[,dkGQd-d0ψ0т.a">c4mRҀI"c4+i"*#]6 } A64dTF	Ik㳚6Q/S0ҿ-@ZdS(FSmiVQsY
UsjT+Vϗ9l%-C@7Ϫ5r">	y7ϭ*nE6LϷh)iu^*޴~NϖSiWe!jUN>9zQ=4{vfdT<k(Fmz?ۭANq1:wpЉؼ{	?O!8ЛaHڌE9}Gк]xոS(K;CT-a=7ۼ4zX_Aej?:xfg-}JGlwR[P1|p_	xGkI59u){u%[ >tӺ%VI0wм
pxM
*95 ם4 [sfoaNBmu_0mob+n!,cQG&⺎{۽ђBJ}4/s١bї
OD`C2>ƧѠ
Cgze4 Ѩ"iݸn'l޾BD|F8va -g-F_UZRzztABl۠HQMЗ-mzfBꛥ M(-rW%w/rVcM|`x&w[&ڃK*@҇wM
^İI#Pҍ$<CV'ғ*[ST)v6brҕ\W&<!қwfhwx4C6?ҮKk"<[ҽ_(nU2x3IA:?F0Ao0<F]wX÷~x|	t|}"dfq>y.\&E?u|%9kn:p$t{oug],0ׂӷvK؉LK>犍.UO]ӸpP쀝<\j0HӽvkGHT	CM6v+%XF/,x86b]xMH,EiL[8B3,3(fE[֊u6t=8o!!kEx]Y Du)$Xya4>L)qq|J"{O<紂L_xExj@!vA.Ԥ]1@61-2Vԥc :*MgiC{e-Ժ'ea4jwԽBK	K/BUgqWʓ;'y03R ]*i/qMp$^ZΚ	9X>MX f؅Z\ 4xv+ vcmKIfg.)E6_i+};dbf6-R~1#%]osnAJa՗h̅I!Xs_v$@]..|OeՁ+)^mh.k:4xQ|Փ	N:|w*n՘+;͘r3-	շ[+4:X=`y PD@NENbʷSV=0oNq2Owigcz݇V7PDĿA"ӚQga1n9D <T֨f%Θc/ P'+v-bCmp{\O!WRsL:+Hʖ4EPz%>mߣ{SI9>m~$hg?oK6ѳ|~,Zkx3ܜ{S.!^H\1O^Zt9#4!3 ٴ,TDH559knskqf
2(|:LFZj(}mӓ׌Q90zה/6_l:}מXt<=zZ(ץmP p+TTC׽ԉ&s_`,<o IUBPĮ#=G!Q=P&yEXKLeMr[/p:0(Am3ؖ^!pT.%L$FpؙO]G"㵅q=K؜<j8@-Օ{%wwXYHyXfMH0tŭt6j蕝nSO4Ǔj@|wۿJt:GXZ9`ɲAoQϵo<B#KVSfH|:L|5^Gb.12%bmlt~<1V-!fwa-!pꂡ@xoC0&وvnp4pmْ3R>hU#%}٪AxBJ_,妍p˟K!7H7!{^7oFy|۵.ۅJunZɂ6 Jsѵc!;Q=˫2I#ko~xI]ϛH.B|Rq,PSOGL.wQ*pt󄕱 PLv:";ce<A)nF}B3
h(y&
J }eڥ94k+Z Ȏڰ*2^ sC]gLB>k/!&W8*{FnLiA椤C/'+l4|n7^@Jmnr	
Cp3нebPd"fjCy޺8LJQGU*րT>|\=bIFum*ԮDgpH6?{݁D)(wc'[eOۄ@U86P"8%55ۛ1f#]t+ۢ˹I;_j}VۦNj^I5P{?ۻL@tqkIJ;WBXM}u]HAֽhc_X1Uoay#,	-'`9e85cV Zl>.a\&<"F$Nϻ3%kMrV'陦lSN5Po#Qv,r"įQSH_ne:,\0É܏0tftܩiJt	4f{ڤ٬(.6(E+4?_sa0{η`T<m~'c5g^CIR3ywG1ֹ+7:el1PSR֧ԀK$kVy&ÚN֯(*rOZ.
ySQcc.DF6M*4rybZ %ŷ	@Ie;,$͜RΏAAjOQ/D9t<F@A{˶րU)crQTЮpgUZg}OyPa݇ސ<'G2ݤE?7GR&
V?Rݦuj+."ݨV<аksEݲT#'yo[sItQ XƱCՉlʽed:A(ث#Bo:&w?u	)w,'ioBS4ݡ<g5#T+u?J h"'^.[VoUx:ԫedOa_R\wNv|$3\zX xp	JGSFBxqq]cލKiJ?ŻƇyuޢ;k'>'7\Po4O;޼igQD0NIPSm&9޼Ēߊ(M󵇈'0 ޿nο\b2hӄȑ2gNHm¾o<CRg]R<豎ճ\!w'^j ]ԩwxbG3qX.Lm೾q}2U{3?kX(#7{4ʫiYvhT8yGdȋXePDKFLѩv/M	mYMh[ ODP2^~<3'W%t7U7yO߆,l ~rbZkߙmDo"3vA?K:]6l#Oتs">Uz%;V(({? Ġj(*0(ʟp~7H7=5)mi]JOr@G[	L>[%"O6UP9ٯ>G%8WU٫|@ՎS`<aA҃d!Xa(~_d fp.z,G
!C8n73-$۴疗s7Sk Нn\2আÆbv5m!˦h౴;Llq8)Y)i9~_ dc0-kfe7HZYR0o囐r7W(G-
H/ω+P'`wg	mt9sR"'s}eΉDEEM3)E=ӔhKaP; r?EF	2԰:IN )ƕ4(%ጻ>vIj}Fϓra?[[RiϪ$/)&Q?|coբIkJ0#E_}>Zv<.AFĚͫZFӿtozwqiYy:US++U}SW
ݣTe	մG96	žW}̄[K1̕CY~ٙAD${;ẂwR\|RRs8cPþt3zk%+XjlyÕ6.l:#nppǲmCBC?U#kdD_NZb ₕ'&J	~ytqtN'ITX⛲!*kkT:QV:mӾ-B03GF.e[xCNu©>#Nldy,*{NnP!_|%rߨa,SI,8!*gn"n ;ndI+d9
<-f.{1?ۙ,3wd9_=;o2|@b'f|Enm2mpI\MT/դEBzydYɅj0O]$o@>]h'ZQ9"!?;_\Iԩ s;|us,1~Yܰ:mӐ]RUxS&ޗG5늁5X`8%،4aAUBhŔظ%WJ.=t&j|Hq.қTs/55ڒs#_C/I@3\JfM$b=e(t9Hsw/r@~6]taYWAO[!76N!&nxHŉy3wl9(] 䛁Cwh`eP#þE\:sIzOƕKJP3F"Mtf?ȡՏMeFZ_5oCb"۱H?Faz7J===eF`|*M,Ge`/jds],Ԋ1jHIX-Mz28|qmEL6@.(.{_L4Fx|,PCa48o\bu:s\
zR`Şi3JN  
!xXpJ-O Oc|9r=iCQkt8JWJT4!E!.Xzo8pTDIIYBGtNH#*'$0yv⛲CK)wZS栔>8:
X=Wh3"xܹ/;ӠQץUaN/6;ժC)~#jC^q)JI
jşw,`H5X];HzJC:^oma2t/d,m|N4uc$xL^o0vmK/P1X#z⎹6畇Z}<v
|ky=絸E|:4 ZPoщe̬KPׂ_t=dMvC5fN@ݭ1 ;*Uhָx|LI~?(klD'A~OO>)u(8זaT2 3^=^肻9,\3}/+}^'ݬxEZ]QcXP^7(ՍҞo萀b#`Zc|%dK
詖L`V8`xwI1C!;p/
JT(ꈢ`뻤++]x9L\b`ENOP/9v=fiJG9-RgzG=
wdSTUαn;$AznGnG$HpGF~\c鸟̈1YiQ"c.REL[&fQqkӳ\ʢ_ʇCM7"-fX05*^tHe<>Zy1}$ªj1i~jSzytW8u2탒BF4tCמ
Po8|UJX*,R|L.ys{j5}飓zTn+xhf:
<6.gl4B6N+ycx8vEhի'F鸞( +x92S֤ɑG,ݟٌ8.R{رV<)-~GWTɁW	ڢAtsJWg9i>ɷ+J}(H)Wt-E(eY3͒p!AD!|"mC)nt9n/JDFkA/`1ZN[PfŔf17bt!-;h22jk N l0%+|Q'0"*+DlyExqçLsRҫц۵=h^)XbWr+{ʓPpYw}8&c%'~71L?E5(e {{f¼z܇ksH^|{aoˇ?nq;oBR#E]FL:[yJZ|<lzW5.c7iW c<`#WM]er
qLj|6=ums,F
	}%*\/Iddk">sIN"젇ωW_K9aũ
ۤ
O8.\©1{JXul9tV',p^-~1mՐǏ$ߢHJAz$?gwLun0^3Cw\wcB2Gޱ
b}bE*{Pkp{)ꄷQ5ص&qQkrYGSkOS EEdZ+=t@OHQ/%X,e3py*W<MĤ]X ǜ~P~l#goJR1ɏyJ,Ř?Ud3n={l/Z:$XjL5%u9u5\[Y;HLघQ37Q8㒱
[čL9"	$$'^u#
U-~D-0&+Eetϥa֌yɷ2rO;e%Q5T=k6 uPm bYBVeM}G;X(xD#vtFf#EEU+Ul*(?P?4`0
\tEaPuH9-ID ~KS}(AaҒ؈O~x&sd>ԎG'Ol} !R` Ы9g&͔wM%Z(Aۮ,3QiS䆩 /jt 7"azKT
;odh2ǘaf<\4p \xW%4(Z@틹TYAnMhgE'TU9<kfs+	mպq*r2ǭԿ|g֟- o#FaaiЉH6TbC]'+'q5z<M|,o"^[$n#ސa#9O8&*a6{Lk/@ڔ^/1WC@\<@GC\@J=וm/}yṭ=&c0)pL21.z*S%	]۞v{4UcEbKֵy+)=!'2`,<r&(̚9&ҫߖI*5UFqb	k7(;f:N*ziVl^;mCs=;	rPgl撞;J͙ߋM쁏DƮf\U29/gxE!UK 0! ¿%)4=i9% `ٰTW#VyЂsP\'06{MYQSfiDZ ) -v5$a%o|/z\30}Z])DՊ5P
ZOm?	*K!Ee1q#IKq^NEb|rlX/W?AV	_bj1!&edG3~Gf3R-)PE~v&[?
/ζWEB]=8E/W)(!es@an\zbDu1۝{Ɣ%ҿa[h϶Md3>I0R:y	3+Y*Ĩ˝`<|L9%x!BL-2FSWofYa5pPX3!uhy5!'ڨ)6G^AvPK\;i. EQ3V#Ť-#-8L	,^/[3ǯ7gL\	o]𐳄U׽m@ԑ0HE1z#AHnhˋ7r$#oK,rDq5(P!f7oLLK
pܣ-$ޔ`-Q?6SY>XQ(kz*Tn+Gݪc]ݜokXĲ3Z CBC-ƞ$!Od.G'>z)q->G[  ݱ-#L_);`b[`"(ndnaC:/1z/%ڞ9b_e(7ab29͡Հ%J{:a	tAdr=ZOnof&:U<9	T@He]4{ٜ_!ekpR#_z2O\Tm %@fEeEe5+} RY2E©@^>	5ߡē?v<bI&/;7=lIJ;F#]D|QWkxop[K[k3se!T6Tm"
R[Z_mȵcK#&xNm$^*w!$F)$/C*۔Kl:*Ɠ<ۮ󗂄f؊0O	
,Q[Pb:~[C.b)|J/;"&JMԆMTm(+<TG2ۓ3J	d6Z(UpHHVб^Z^c*w	q\'Vԍb6: &xc%?d+41M*ȍ)er"ߧζN\o(@ljE8=SqvM!PF#Kvv-6f=F?eol.,LtzUQ'q̸T0VKe'SyBP]$tUROMJʑhg`{g5UT #9hrzkn])2eU*է7P[:<?AYSsPBQ &/ܔlA$Ym7eovA^{aWRgl9uӵ6@dlGH-5B`|3zER{VԒҰw
@Kշu[M=-Pƞ,zY<56ݹ"A~dК~LRZ BV^1RI]{jȭf܍2vy@_iY~d2@ؓ$4mukܢ;N|5`nfKI;.ak?-ٵh'%Ғ
fV	ZCNB82Zz#ATZ Y͜KAzn9|௩_Cxh'QDq f]S.a׿JEAxI!].>K&^j luK ω:#pbQ"_/,ZA .B%$v#fEs/Npf'wΩdqs'IQp7'n]mITet2tCC
{QJL9.2|?;%Ub
"p0-=sؠzڵۆ?/u+F.Ɲ|piQY/K7BRք2&Ć<,<-~ED%`3͂%G$`]o"\>/<9Cs	Vs{ke\ )I^i>}:t?	|w۽VvGSw5"Z߁:RsTMo~]3]s0ޛELo4&j9820Bo)nn*Nu64?4\>Ŧaޝ8"Y-ĥ#\16R2P[qp۞Poab=)nCA>pVhuF@<HQtz5k#Xl.IC o0bp.AR\."^ NGd]4%WgDΰf`ʖP-rߑ(lWȆ=dGP_9ҕn[s0-5p-MڷXr%X9:@P-GNMDK1 SpBѿ&*2jܚ@\ІYFOuBS +
Je֗K>/yޒ_SP[R,,:I(y+Y#nAGcvݴ	y5a)U
i*Wjߴk.V];Cx1SB''IȦ,M4)lω0v:p?W6X(>K@Ƃj3_g
ʜ M#sp?ܸw #nҨ(?cPc8oXѸTv7u(rǲ+`=;jN;NP7(*iauکԻsjXpK6ik4̞C\z0{F %J	gھ&QDn'˫`XgLI,3+xm'̪f-P*q<5o?^Ǌk]UrM'xKr+ټ弢1a:5>ai Z87gDc?o,+38_X{T!Gq_-׍ʋ)רCpIE ƴ7˗zVA`D[Ҹ/a$+.4)6x~݌yxg?K4|*}s84kEy[CZQ/[!=[ѪFʒʷF́ZtEkAjU6 AhRV5 ͙UL8%#7 ptzOdq5
96LVpEdfKv"|vƁZ@P_VN3|Y)XXLu:'Ƴ1;u׼i8Yyb],?>zs+_Wtyg__+Sb*RBL,pT.N9)Ryp#]o7Gi*p]΅Q%aX*ӒS'`24 0S]/g&7Fohq>GH:c>"=I?t譜L@L^<cCU(0(Lۖ5==y"ao|[<*rjرUB|*klR5;r!yDY8W[hMfZ<GlKJg7a؃E\P#?ہ$eQɫ
6~{zq}]v׽}!6ϲG3)EvⲂAN Qe|a]Dg$f$I#(GARNPvs
Zo}7~~wb=Тs`Fb8)p_[Z}AZ4B~
md}k@2Uͤ#DVi/NcV
o"7Ϡ.|TI.u!dTЙ!vV${9 EuJalG@R}k|NuqP8>&Jh{?jdX3'ԒP*^
rlo)te(!"3o`dv9C{":Rsϻ`lB]E`[QusX tQ 	iJ<Dao))G̠y=LBmKb$4^Og:@zǚqk6?'guƙo}	zvZZA<n$ 2pp\b_ɤ $BbLg2@7:XxpJ(mBop݅E_!?&칥.aF4bT()5)^dD;zՏPgqwCt1:O%6Rp8-7!Q6զZD(O@;AD7l],;ԦlKqZ|b:vV^#/ٹY+L>lj2Y,nݎ	fC
:.o&j5#eųk!O	hFs2Z0g4tE8:rõŗ,.vbXY+V]AՐ#΂!N;21yŷ`*ҦSMbHHh
;tHFy	D'oJ?W2##LX?cCgPPrn^8Sh8,	nl:0<jsɎv&B9G-^x#X|q`!Iv4ZW,/1YV:qND..}5ſƢE^zD5i*$rwώ7-{xl]WT|	؜=g@_#)lko2<s[2HI*J}}c/W?{
k}UDUnOVw%_}Һ]T.@fuv~2~$sڌ	LCA"~ie'  +ӫc\HGwbʦ.9j[΀iwГ`"Û0HPC{=3"hUV_ͺКu>_׋'d:6@-:[kW?% G1	ʈL3$Ӱ!17f_ExgP50YE+5vJBgqLHW{[h@ߍ=Z>=@ַ~l(㄄QbyW,%K̫mhDau׾H\KbEOK=R~d=DpVL=8-'J}.C[~'<;4-e#4W_YmXpj*I[WKU@vx"f|[i׈[uY,s:;|`ݒ',zZ iq/!VMG_\|v=gR[Gʰ1/'RtM*GMh|5v.HRo\<8,(E@ϡh\
mBmG#8f@uM@<ucԧj`]4NWEa1;,
l6F_<ƕ/)OKȰAKXj,a~)x{~\0<S;ǐ~`	ʨURgf!0+q|,<enm ofVV:oovk2F]ܽWsƈ.h,*-4T/=|ɪwtMӹR	ax&ju6r,:^zXڽ]DmZIowi	#D+H|c6C|V.dyuCŇN"
{\sa?)+nmn7T|H".t>ToqL<?%I2[V̡9ta#S)+m"<P +-<N fhXR:0Z+OC->mNH ^(jJv!Ym!bo$cM^aNr
$d>^|>^oՈ%/sP4pxx6)Q7^z_^Te 9m&iExM'-Nc:_Xa8?)_vޒrGTކ
RH L02\s"Xӡ4@0Vc琪|#R;o|Jq5ysFxfΚ<3QOCWbMgdO5bt_
Mí&;i;o^@@QͺͲԟ=x!y,N2BQdFDX&g>umr
d-ѐڨ>WqHڷV5jOW˘)ul[	p_$K/G"1X (1 cd&#`h6*t1TTF5EaM)|zOrks3T\	RX9,9{$3-e~$LdGNte}Dṉ^!bґ^:H"3qz" è-i5Je-5uE1b/!KN)3Dv.\D;z<%F1W:(ɴ?m[`	3::x]G̩.Vˊ*[GuY drhU	sx$$0	9ɽ)֣_^:TS@>Tcru
A헌oBc2 41G6A4wt}ɕAܖ1@i}v lT$l^^5? 
ZD) QQ)MddHfMCoCn
/݅ACTŧkbmYC1vǣs ÷
K2]z2u)=PJ%x[I!F;yiTmUZ),h${CݢaCjCGKCCv$э7ӷp+pe5@O-caKa^zu#x#gl1@]L3va M?ULv3mBɏe=~ Ǣ}ʸC/N$E<|25Hz?6jÜ,.I\3{¤GD{oL3V/z6:4ư=XN^SjTq2ju3W?DM\#|@ўpIULW\#]e>;a2ѴL;~1qL=cYί% o˞8o>3@ϫ c )t1 3Cso:!&ا8EW̞g9
}$nLd{*?Ƴ)ɖylHvcgc|NL3K;>}8!ȁܲFGrw5͌HJ,AD;{<IYb랟ʨcb@GBנt:g{[5@\XBɎp@g;K/X0/ZO!NAYyO9G=nIdIސ3e0NJUTjmJՔW0)&C=obA>H&!f]E-m-]rbOaR"ne<_o!/W:_t#U-hɘ|jDG	A|) ̗8	",Ŗb	y*0`yH@F>;bJ7CrDEwj#dW̝CJNz8<vX/Bb)?Tǘ!P.	_m7W?s{	V÷WuwoH@2/m bA n]͛-#cZxx广áwzS7$9YFSf /Ҁ|B}_97u}=|3l҇va&.*x8AψW1/P]HL~*OnV}Q
TiP̅@>|:X
X/m$@3eu`P'c/]Ck-́%'>[mD"הnWaKTWך, [bQU)MCr3:.FPMdr*+9O0ds RGGO7OrfNRm}-?8B_ydJ΍h}zj`붘	NJa2Bl#+8 U21yJm㫁5:m<r9LU\gZ	w宰RvJ,cYhQZ0,y <AR!	΄cTU㜽ȶM/9l^@ܶ;QNݲ.w*
i8b.MlJ=Y\غ,2!B>c}YDCtMӯ\?%
f?`H($lˌ)čoFB5҇Xr<>T sY5Bb7(v<v}^L7A9[#9Uc$P-l!Ɲ*A!IF߸0U<_1R>3NJp!R>JVlTDlAĩp'7Rر ?x7Q;g=bJs~]5'lG_)}G#¡.LIm״YH? 
RfE|xW
s`>7h>xk)'Qh67.ȥt_-6ītxv6A*W7^e"HI9n2}^vk W^v==0 k_M=q"Pw_ďA1?|VU-$M:&dv9\Jv37pstNƞÉ%7BQ2WpB2"U݃ɲZoţ4Q2dQ#4yi}$.QEt.w	8l̃)˼f)mLSj*Εl|زU|H#Ta9bp-.ď4dwCaWui,ʍfةOsIp3nޘ+emd8v 5?V4KmTR[z+7-C(q>+}JbS<ގ] ^'[(ePGځ	t7OAY̫Cdy_j4UsܬLG7ȔO4w*
6)G?Lk>UGf@KbvY`_n3n6`q@0_|Q8/آ#L"EM+<g3/&T{WƎ)%=
(hNdy5#^KʆaS0@|^7h;T^/zp7t vq$9uH2!rƵyZ}
Dm^aƢNۇmuz*lӕ!\*<S߂ ǔL:7>TĘ\OI0)Q=@JG^s0YV
8锓-!YVdz9A/G[{hL	˹Fˑ\a{@p`#F]ϵWzܥs,K
</ӴȺ/C(̎ZI)RC5#zeAь6pՑU"Y/'7bk?qm})Br拐W.*n~s-੧Χ85
M3ӾvQ}<^{;@'^S'J%j.B-iDTs"uTzcшhAaH{X囡hp^n2Xu}Mbk]
vZUe*ZW7pTZj(vQ`bjwLqU8-ىX~m5QZ3Eݡ!Yv7xAd/ՁWA5,	#Q)m{"zp,?nFOlUW1Ua)/i H!;ЬwT?&Lf= F/?O6roųe?ٹ홴yL-rCg{yPܡۜ_WZ%ԕA=9MIgÊR֏e!k!\'o:Bvפ4}Uu!r:i`{"VTSC|!gc	c*$C>ُ`l}]~wSHkF辠b)]˹NkK&6R#YUDTe*+~S"I&Hz]`&ǯ (R[L[ea97}jWf|擋Ѻe_FA({eeOVcF[sjW:op9iif6drCzlUs@GB/9Y$\*w䅪Q͈Eރ^ˍ4ߗ" +QإAnjn8e-pu/+5%7D<r_{4	wPl@V|oeGosw;~g)yÂh#\YF	߸4kbVҚȾ]^U6[;*jAS"zOvL3om	3N+'4QQ :0p68I6s+wv+wrb]'.p sTcr-1BǮlzG{Fz:ưtg/}
[
!E0Ϋw]. ZU`z/<K
N)6؂׭v|7]=ktpSRX zvJ{SO3볭ZkV	ݶgTmJ˕_]&ކfǾO}2؆Rm4t2y9l%/շ^-	y|zO顖	lQVi\pM]ҩəXgPr9dخQN:>$&N;GU)/)4OAD:X<K\ﱍ֩PٝQ`	
͢O7`$ղv^qhh[`M^qf`ъy[ɑ_hy99Lel*;u~e96Ckʊ?MCTÜU-{F\T8rq`DRB7M"	'ꀎ'ݷ%<ʜj-
.P**	首?$Lsôset=U$֫^:N(pROo|Lټ3O9
O"A$jJ9^X&)~XltIn)%qt yk|QFnhw[39斯uV+SGqf:~Z^GG
Z僯,dBgpYX +5&lhҁt,|N=f@f$\lQq1V6d$iYz/\\BA*se~~+־l ;x^\`\ :e5!,1D>=y1OG"~ɯ|Ъ^CvHe;8XR(*9&=~E^/ԶM1A%<y݀'Ir{=WKcE[Fj)XzRwwm>!WcTKRxcL#柁g>OU/člU!ȡ3oCh3?:w }&V]h{L~-o[ȨLn{BqH ;>6ly=Fv~V-TQ4]ZYZ"fc+slp8_gJN.M6gT ĝǛJهZqXzM^׺u:^<y?]9U-^|$ό&Iʘ#tB">ϙT:GQç̳%h! kkwg*mŜ΁?3Dp2fO.'ͷŅTLM#n)MpkS B!h.Du,mp誠?%oSaw"|YHEA/Cloi%/LZ߂3vQ,l8:HV+S"u]4ޭ30׎BZlwfZx
#W?.&_n ꖼf_]Z^l>T񓣲.^;-YhVH/jЅKh	֩y#3THP+МZT^WD?%GBim߼~}vvI[.
Gr@NqT;-w';@mZQޏU';`۸K=uBa*$~Ԃ#<hƜ_j5+ _F3[ӯ =ߥ㰨@T$LG^zq[x밪@9lg	XxA-?@*X-dގyLO<ezo	LZ6;|\+bOE^s6a"e4'cxerk㮼}ˀX4U3xAI /ߜlvgЊ棐
0.48n'!!ѱ#z` *v%sƐJ	[wpex"P19hUH7>S%oSOme_7PAPOjY"}@}ł`]\qu2`nvwe#\;\IP@-{^'GIN`Aנ #uBl㭔UJ}Kp4ꪡpPw!ZܥsEDq@_D	#pFXYoݘڄ.߾ٕ>ʑ
t1ZUW_a_۞~sO7(͞âKIٿQ{xң(->f>gӺ?d`[gᨏRR8#[Ĵ;0<rg͢;K]-$<X+<I8m_YB|RMʅ4D=
[TIPHƵʨcx?؁S)`p`2C.&7j2[n
rF	>񱬦F`痵Zw'-fٿ+RcbF6VxEq 2$7zsb淠^HShejy|9epFr;b]h4tz'Y '㐑E:Y}1HwaKn:>\+:B(f0q#1jDQWfPcWp]Q"!4T@فxtKR3<zs,#AiUeVy`!7?!tD5my5cKԛDK|`Uk14W	e|^ow{2sNKȅԏEuij"W*\nޱWĄ]ѕ5e&iR'3DK_`PWPC]_}{j+ǉ<v7;>CsC$WմelRIVkwu:9d_+^fQrJu	#MdR{0XĪ8I?kyėdL{~0zr3Ǎ-_vO!\8,h+i.p쪟S-1&=qqwhM	`vs.O`im!ЏA13OCfZx@;N^c-u^PP]6	Tbwl0l^vTze*U'jB vhMYIqFw*v!o}Ŕ(g`!@i{C8
j,
Wnv ):c9jIVb[&YB9{L+ug>1` /)W0E%\kޞyOj~,d?AApxMS둑,ѩeqw9bRͬt]W­|#G>@d`lMY.Ox@cgF?Ɇt3̈OhS<)ٌ9Qn!zR=xn2 8ՑIOl麣Cf+Uh!(Ĉ8oXpJ,druZH^G9;XfܪP:G0pt%,$'c[$,ɝTFc[tHmQ"7pzYdHa/G47^9 O-(Oئ|a$it	㸅{ot\&t5
ȞAd,pQ6I2R}~2!\/laA'{&41^["t~1W9Ǚtڻ>86]^$oysxĚwGE`T\[;0aೲ(`f=+^2'֝e?ȸ[8t!J&3oJG _B
lɡQF@- (`hgO
mL K!,xOvQXbMʅPJgQv|Г|kA K6\P]g`y4{O'&{G,rVǺoEi0vA<t̾\,E3aVߚe(OxYP|ƨpb'͌XQ	H0?J{Ke\4Z ?Ոx$$˽|)CmC,VZ4.'Gj.jo`cFBqp,+*MNMuq+KJqy#r4oCmPcnCZd=$Ca$mK	vm1aCN}Qa.XG	b0N0K|Yσ/߆PQx>s'/ Ffx<-O?	HhP8+>ZUm*a3
Nm}m鰃V%epE8H5&EO6$AIglc;?Pp̡va<|PshE&Mo~aȚM~Բ/7ٸu , #    Ƣ 5 7 z  1& #  Il } aP |y  Z   {    Q( > Y e  v ۷  >^ ~ L   D\  Q cu r" b
 } $  BK T .   }- Oq T( F  E g t    5 g Y 3 6 ! |   { O  ' $    m        & |N  * L @ GC    F kt O  J `o /   b d T  | o     !   ܢ   <P     i@ Ɇ m > J /+ a H b  g M +  Ѕ  uo 4   O   ֥  , Ƃ DF , A   0  j      } x  q  <  ӓ D 3  Fa  b   Q  =7 L /     I   2A  u   W 
 G -  K F v  4 B 8  R   N ° WA    2<  PR E n     ) g  - Q 3C !  $   od M ?:   @ E D1  b  h  yI   o 9 j u TS   ֚ E   7 <= j x  [ }  v 0  `x   + T w" , lz c   2  * 	   p .  'J   V Q1 >   . t k g  X    A  v   )+ s  h    Q    4 	 ~2   V s? dd 1 a# @ u :" g t w z :  eP u  z  O n U, D 	5 |N H  9  ݿ    , x     S| 	  j@ 1     ;j   ) * a  M    >  D & xW °  <  >  ' Ը % 	 P < e : 6:  1  D y 8 w  Gn <  @   J  z : } O : S  m@ UT YN  j ؛  Uw  S   /  	 	  4 {     E     I    q  V ] {{ Sw    +e o? w | x  S  ÷   9  4 $x   GX 7q S D D +  d p   W8  f   ~p  Ȕ   W    Z   	  f	 +b 1 , L )_   , 
$  zX : M
  /  d b C  ݵ Y H  >) X ӡ 0    m W p ݟ 
X  r=   J  ~  Y &  /p E     | Q   E `  j ' c E s r E ?! t O / q     | l $      x F c  T t Z ' t  {  |Y  l 	  @ }T NJ  i  .  N T y   t 7  ek h lM l  c )9 S     G   L J N :   k 0 ( h x $ Z B  Z    ?X # # 6 P      @  3 z  } n_   H 7   lO z 4   {l M : j M   Y r  i Y s ш  %^  b5 =< J g  d s < B  r  7   @ (5     . g  g      e   w ެ     r  ,   ˩ ;   h ti bM y I      `  3  ?H v t  z 1 M W{ 7 F [ / j@ Y pK }  B r w  eO S 
    F    ڱ m   c5 = V Ce   zh  + ^ 8 #K  5 = v       EV B  8 a . kf E '   v nC , d7   M  w1 R ^   P    ^   ʫ S8 i    b   < D    ]  (   ^  ̠ Q " ˎ -    ,p  8 ,` xQ  p    Z h T| !    I ; 	 O   ـ d   j Pz   O    
M { ~ ў y & H; =N }7 W ʍ  u    Ռ           5   hi Ξ   y q  І -   J  Bn E
 8=  ' h   h  9 Y % k  8w  4   h   U Z    p y    : (      6 b S $S  g ; P "g \ ; <   E b  h '%  چ !2 { u3 v * &t  %    h  [ ^b  ( 2   w / }  /B = I s >  L )* l#   bd  
Q 
 &J ʧ 6 r d e?  . ( V  [  r8  <    = 1y  ; { ^  S   z ^   'z  f6 ۦ + 3 { - O   	g ̳ 6 " : Z G (  Ǐ  %L  z   Z  4   B   hZ  [ ^ ) s   r   o  ~>    K ( - i j yo _9 C }^     k H } z  % v ,c  m  	 K oR C<   ;    + V  J U R   U !  w 7 t ~ &S '1     ׾  % t1   b m  џ   "f 	   . 8   .I  6  q F Z i  H  /   B p m   ?K  - y  K O  b 6$ c  |? m  J  :  k V   0    i (  k  f    ? S  7 ?    <  6D 37 N   { 4{ ^      ri  l   ی %  ys >  Q p & >.   o   V\  A  J   |   #I  5  R \ ~ S  =   )   1  !m 1e 8   J  |   rc y     
. " =f  ] vC % = {  m     O %    u  k    1   &(  )  x  ~     o  1 6 0  $     _ &    c K' s " {D j   2    &  f r $   [V z a ^  r 6 Q  t`   y 2 Z`  s_ wN  s / ) N ^  7 \ 6 =   p   |  &  D  > n ٪      D X  W   g0 p   8z  )b " U  Bm  c ـ yG p [     o Z1 , {  W0  0  7  s   M4  _ > | Z M  &O w  4  x  ^     1  =  ~ [   P :    O aF (8   1  ^      [    L  =E 8  L    V q  M  <0 2 2 	 9 r > ۻ aq ,  k | 4W  %   EE  T G  < x, 
 h  8 uC  5  c    .   $~  p  X T Q   j s' e  F	  ֚  b  D z>  
 % 7 b F 	 y  c*  7 x me r    @    k  {B * x   / C )s   Lk +   Qq c  ^  D 		     t      v5 'R 0V  h ol   j f     cG P [ +    ;; " [ ͘ G } ?     4    ![ I  } z ~ ~  M h  
* x  az =   e J  C S \   c C G  ˄       g յ @ x  ] ^  A a  ^4 < `B <  x T w   yv L  "  G    / ) S & h Hu o' F] ʫ  BA    u e      d  C   
{  X    1   ӆ -  f   ik ` vn  ! ܸ P N u bw  c O   a   gE 5 nA    K {  E    q 
 A U    :h  n g :     ! K  - 1     
    ( c n .v  
 (X )  g `k m  K  ; > e  ; {  \a [   ; OF  b 2  Y|  N   g m  _ N   % g  R   ] y    t k    $
 ~  '  e p @ L ' F  z*  l$  > ft }/     )z  r M Ę 1 K  c p ^  ]     t k   L L %y w   G O  k 3 PE             1:  ) & ;   | G P   `   k  l - W |      T +H  = 	 u   F   _  ^   Y T jm M ~ c  ԰ m }  p @  {D   U   lf 8 5   V2 t> ) y g Z  Z k M i I^ \ s  V  C  +i L 6  M      -  
  $# &  r? I  c -f uI >  us r w\  | E A > X w    r    "E u  w  ; [ 4   {  u @ m  :   =n - A V/  o 0 Z    >   A@ . 1 =  \ ( `   x $ O _   < a r #   X1 }  ,   0  Pr  GN  FP  v  ~) f ר K t  s za   @  1  O [ 
 } " R t n  *"  SY  } C  }
  e 4  %"  0  ڧ  ?    Qb -  k N M  z9   O n8 * b  6q   d 6  u R Ȟ 2   _  *  @5 @  U @   2<   y) I" &      Š Z     a -o  ) 1-    E6    1  ]L Q u `  tl A&   q @ nf r  Y c   uv  1u d l     s  2 } x v  9    b  O E    3  @  > [i 2 4 M,  u }m = =  u w 0  I     @   K n   .}  u  {  !Q ?  / _  ;O } y c     /  g  n  : $    ׌  f  | ֎ + G % PS   v?  ! x+  ) ;N  u   ( % D  {  /  "  ;$  a  ̘   x k   9 n     # x F \      :x  &w   _c V ~ $) " , F O |g ޱ b  Ϗ  ԍ  Fm \   C  7S   m   ֺ v  <[ e   f  I& v& & e +  +s q 0 ( C a d  j  2 x  $  v - 	 @  5 3 kR  N  - gp  y dy     t [A  b 6 % Cn  F  m ~ M x(  e o  g^  ٪ 3  mg  ފ  E 
        S % 3   /   _  q sR c  $  t  CE  -)   %m L?   @K 9 &      H x 2 5 p& D   U\ ~ {  AU   0  w  < pz L  3 9   P \f b =  , X    ( #  +    s7 F7 + R  1 i d Nw F  ʸ  ] [    T : W  "Y  u $K  > q.  G h  z3  ȍ    s    q   m: p   D !~ D O | 3
 b {    {  kJ  %  
 B f 4*  	 s  u   z 7  ( 5= 2 xU  { i m   %B    z n 2g  b  C #   ' f  x ; C+     C z   S 7h  t ҕ e~ 1 '     c  s  M^ E + F    ~    ` ;e 
  -    M hH ? & - 	 G  w   z  *  N n L  !. {m  7 ~    c @  ,  F | 9 f  2 @ k  ^     5  e&     2    f  s Z   < .    R ] |      6 0    N   
 Z b7  o   7 H    y ;y u l : C  *  ( U  t  & y  d   ^ >   e _ W f  { 1 a  k " ; 7 , S # J k  1a X  % 8   cW   j ^(    Y /F UX     ) p :   c  wy y U  ]  ? K ;N    J <  #  U i y sb "  m o ߍ    8 \ x  | q  Ù  ! L Z @?  t  aT   +  {   B 6 )J (  O L   $ H &  kE    4 x j   H   z L   3  5 % L [    : u ]U    n 0  j    G = U- ˧   X     &u d  :P v q  Ā S. 5_ 9 n * yT R p , ( M    t  P e   z C  >8   j  l ?x  Z   xo  Y $   r H `   K 0 vt  =g GN  T % P Z  kG k. I  P Q ũ   0 q O 8     qp   o 5           ` q   o  % + R  Ղ   J      g d   : y     SM 2  )    z  j C /o FH  A    0  آ "   J   90    f " m    kw &  Ĕ w  E  X G ]    ~  ; \  } [ o }  ]     O < =  x  &~ K Lj u r  6  " M ;=  7 4  n  ,L  W ;7 - Y ^w n  S o W F   ZR w "r j u  X 2  ? o  !
  3 	   %+ Q ̐  k ' 2 z C     LX  	l # /  = r   b  aS  vj     S  P  ] Z   Ե Ҍ k  G H } 8     ^ @^ 6 #y z    y O@  7 
 W W ' P & W   / { 4 |$    ~ :   E[  ї    l R  0 x Է ~|  b  5  : Y ԥ c  λ  T  x Xx   0   O /   S   Ӱ  &f 	 qY T v !  X1 WP   ȧ   ^2 J0 b " EB    ( u   m   nn  { a  R[  t /   o ](   pS b  -  ^  @  @ z G q r   =  ʍ  R  N\1f:̵W`fdl%+pP pack-4e9bbeab5c0e3166c53acaccb5fa57889bb518f1.pack

# pack-refs with: peeled fully-peeled sorted 
0896ef7c7a0f0341ffaa53306d81d3d7c7d1694e refs/remotes/origin/compatibility/php-7.2
7b5115dc0672fd0a873df34d5b079b7c4e270ddb refs/remotes/origin/compatibility/php-7.4
6d51eb71d3fd19df3999ec0c8569870599a1d59b refs/remotes/origin/dockerized-masking-feature
3f0821e6f24f59749fdc276b2323279b7117af24 refs/remotes/origin/main
f5caf6f7a284036e9cadd061433a2f31f8f77aa3 refs/remotes/origin/php83-dockerized-masking-feature
DIRC      ihh   1             ^妍p˟K! 
.gitignore        hh   1            wz&fgw
6 
Dockerfile        hh   1            1*JKsgT'Ȇ@܅ composer.json     hh   Vܥ            ';0eI docker-compose.yml        hh   Vܪ            /sOi;ȳ1
X packages.json     hh              NVnEkxF2j] 7src/OrangeHRM/DevOps/dataMasking/DataMaskingHandler.php   hnhn              TGnG1ڃ%9\ ,src/OrangeHRM/DevOps/dataMasking/Handler.php      hnhn              AiWŤKҧ+1GQ/F @src/OrangeHRM/DevOps/dataMasking/UniversalDataMaskingHandler.php  hnhn  -w            E$p?,~+1 Osrc/OrangeHRM/DevOps/dataMasking/strategy/AnonymizeApiEndpointFieldStrategy.php   hIhI  -w,            Pl7Z'5N[ Isrc/OrangeHRM/DevOps/dataMasking/strategy/AnonymizeEmailFieldStrategy.php hIhI  -w-            B:5qÚ6S Dsrc/OrangeHRM/DevOps/dataMasking/strategy/AnonymizeFieldStrategy.php      hIhI  -w.            ߣ{SI9>m~$ Ysrc/OrangeHRM/DevOps/dataMasking/strategy/ChangeToRandomIpAddrIfNotEmptyFieldStrategy.php hIhI  -w/            .1P%~ Wsrc/OrangeHRM/DevOps/dataMasking/strategy/ChangeToRandomTextIfNotEmptyFieldStrategy.php   hIhI  -w0            ?B3!6B<HW Hsrc/OrangeHRM/DevOps/dataMasking/strategy/ChangeToValueFieldStrategy.php  hIhI  /            ;c	euά)k Gsrc/OrangeHRM/DevOps/dataMasking/strategy/ChangeToZeroFieldStrategy.php   hIhI  /            wޝabI0lI& Osrc/OrangeHRM/DevOps/dataMasking/strategy/ConditionalAnonymizeFieldStrategy.php   hIhI  /             < "puXS>} Asrc/OrangeHRM/DevOps/dataMasking/strategy/CustomFieldStrategy.php hIhI  /            `7w_faQ Asrc/OrangeHRM/DevOps/dataMasking/strategy/DropTriggerStrategy.php hIhI  /            YJ]j̖,UH@u Msrc/OrangeHRM/DevOps/dataMasking/strategy/DynamicFormRecordsFieldStrategy.php     hIhI  /            MxfN
Ѥ?8	( Usrc/OrangeHRM/DevOps/dataMasking/strategy/DynamicFormRecordsPreserveFieldStrategy.php     hIhI  /            ^~]0EMD*a+? @src/OrangeHRM/DevOps/dataMasking/strategy/EmptyFieldStrategy.php  h*Th*T  /            2U+ƱKT Esrc/OrangeHRM/DevOps/dataMasking/strategy/EmptyTableFieldStrategy.php     h*Th*T  /            l,9vhU t[!gu @src/OrangeHRM/DevOps/dataMasking/strategy/EmptyTableStrategy.php  h*Th*T  /            )ą}#귵t}f]h ;src/OrangeHRM/DevOps/dataMasking/strategy/FieldStrategy.php       h*Th*T  /             |F[, =src/OrangeHRM/DevOps/dataMasking/strategy/MaskingStrategy.php     h*Th*T  /            
( /Ow䣯^] Qsrc/OrangeHRM/DevOps/dataMasking/strategy/ReplaceWithDefaultFileFieldStrategy.php h*Th*T  /            lUpYఎ25nj Bsrc/OrangeHRM/DevOps/dataMasking/strategy/SetNullFieldStrategy.php        h*Th*T  /            yRh9ZSVKWCk3 Isrc/OrangeHRM/DevOps/dataMasking/strategy/SmartAnonymizeFieldStrategy.php h*Th*T  /             ,5~U)C'H,! ;src/OrangeHRM/DevOps/dataMasking/strategy/TableStrategy.php       h*Th*T  /            bN}ȻI'R0\L =src/OrangeHRM/DevOps/dataMasking/strategy/TriggerStrategy.php     h*Th*T  /             Vtԋc4+ Csrc/OrangeHRM/DevOps/dataMasking/strategy/TruncateTableStrategy.php       h*Th*T   Vܯ            8p}6&Bo
x@iW 9src/OrangeHRM/DevOps/helper/AgentConfigurationsHelper.php h9h9   _             1@31_,B.Q/ 3src/OrangeHRM/DevOps/helper/ConfigurationHelper.php       h9h9   a            -3C"#4 0src/OrangeHRM/DevOps/helper/EncryptionHelper.php  h9h9   }Y7            )0r^U(&.#z, 4src/OrangeHRM/DevOps/helper/FileOperationsHelper.php      h9h9   }Y            1Py6S_\٩} 0src/OrangeHRM/DevOps/helper/KeyHandlerHelper.php  h9h9   }Y            ü
_ty:< 9src/OrangeHRM/DevOps/helper/RemoteConfigurationHelper.php h9h9   }Y            
t[_(VS -src/OrangeHRM/DevOps/helper/RuntimeHelper.php     h9h9   }Y            ^dF؋`A?^%L .src/OrangeHRM/DevOps/helper/TimeDataHelper.php    h9h9   }Y            Ib;vYvkȵ`Y+C >src/OrangeHRM/DevOps/helper/UserDefinedConfigurationHelper.php    h9h9              NO]xt[&XO <src/OrangeHRM/DevOps/usageStats/AbstractDiagnosticsCheck.php      hEhE              .BwcgL ;src/OrangeHRM/DevOps/usageStats/ActiveUserCountAnalyzer.php       hEhE              <ʼk(^HBGc݆cgZ Csrc/OrangeHRM/DevOps/usageStats/AnalyticDataParameterCollection.php       hEhE  T            6(ίWai4 Bsrc/OrangeHRM/DevOps/usageStats/ApplicationConfigurationsCheck.php        hHQhHQ  T            
"; 	G Asrc/OrangeHRM/DevOps/usageStats/AttachmentUsageAnalyticsCheck.php hHQhHQ  T            ' E
crǞ񭃏@g1 Hsrc/OrangeHRM/DevOps/usageStats/BuildAndInstallationInformationCheck.php  hHQhHQ  T             7H7!{^7oFy| 0src/OrangeHRM/DevOps/usageStats/ClosureCheck.php  hHQhHQ  T            uQ,p@a]i> 0src/OrangeHRM/DevOps/usageStats/DataAnalyzer.php  hHQhHQ  T            Ȃ.a 1>@2̩=)f 9src/OrangeHRM/DevOps/usageStats/DataAnalyzerInterface.php hHQhHQ  T             i])t
{"B -src/OrangeHRM/DevOps/usageStats/DataPoint.php     hHQhHQ  T            		jS5)G5VJy ;src/OrangeHRM/DevOps/usageStats/DatabaseDiskUtilization.php       hHQhHQ  T            +tVahi-"iz ?src/OrangeHRM/DevOps/usageStats/DatabaseOriginatedDataPoint.php   hHQhHQ  T            *5䜸,o#$ 0src/OrangeHRM/DevOps/usageStats/DatabaseSize.php  hHQhHQ  T            C1g G댞 <src/OrangeHRM/DevOps/usageStats/DocumentTemplateAnalyzer.php      hHQhHQ  T            mN};+\<Hld =src/OrangeHRM/DevOps/usageStats/DomainInformationAnalyzer.php     hXhX  T            CQyGW4x[ap 4src/OrangeHRM/DevOps/usageStats/EmployeeAnalyzer.php      hXhX  T            	Of3R-)PE~ Dsrc/OrangeHRM/DevOps/usageStats/HelpAndTrainingPortalAccessCheck.php      hXhX  T            
z#ATZ Y͜KAzn9 6src/OrangeHRM/DevOps/usageStats/JobVacancyAnalyzer.php    hXhX  T            F[*]G:4 8src/OrangeHRM/DevOps/usageStats/LastLoginInformation.php  hXhX  T            .x?nt~6  8src/OrangeHRM/DevOps/usageStats/LeaveRequestAnalyzer.php  hXhX  T            tQ*Bif2NuʺT :src/OrangeHRM/DevOps/usageStats/LicenseParametersCheck.php        hg]hg]  T            7oBߔ^Y-t ?src/OrangeHRM/DevOps/usageStats/ModuleSettingsAndUsageCheck.php   hg]hg]  T            =OV_:PQ @src/OrangeHRM/DevOps/usageStats/MonthWiseActiveEmployeeCount.php  hg]hg]  T            Y'u*䛧q6Ùk Ksrc/OrangeHRM/DevOps/usageStats/MonthWiseFutureLeaveRequestDistribution.php       hg]hg]  T            tX)/х[jR. Esrc/OrangeHRM/DevOps/usageStats/MonthWiseLeaveRequestDistribution.php     hg]hg]  T            >͚zޤ:)7 >src/OrangeHRM/DevOps/usageStats/MonthWiseLoginDistribution.php    hg]hg]  T            ٙAD${;Ẃ Ksrc/OrangeHRM/DevOps/usageStats/MonthWiseMobileUsageBreakdownByUserRole.php       hg]hg]  T            ~+cʿM]߹~ Esrc/OrangeHRM/DevOps/usageStats/MonthWiseMobileUsageTimesAccessed.php     hg]hg]  T            jx]:9Yq8 J:@W Asrc/OrangeHRM/DevOps/usageStats/MonthWiseMobileUsageUserCount.php hg]hg]  T            aHXCt6d Bsrc/OrangeHRM/DevOps/usageStats/NewsAndDocumentArticleAnalyzer.php        hg]hg]  T            4͐Q6fM >src/OrangeHRM/DevOps/usageStats/NoOfCurrentActiveEmployees.php    hg]hg]  T            *`C;| ݻ'>BB :src/OrangeHRM/DevOps/usageStats/NoOfCurrentActiveUsers.php        hg]hg]  T            ^~<3'W% 8src/OrangeHRM/DevOps/usageStats/NotificationAnalyzer.php  hg]hg]  T             +&Umn@/NxU	m[ :src/OrangeHRM/DevOps/usageStats/OnBoardingTaskAnalyzer.php        hg]hg]  T            ,D=Ӽ
<# :src/OrangeHRM/DevOps/usageStats/OnlineTrainingAnalyzer.php        hvhv  T            ZUoay#,	 @src/OrangeHRM/DevOps/usageStats/PerformanceAppraisalAnalyzer.php  hvhv  T            E<@7YY1Ƿ 7src/OrangeHRM/DevOps/usageStats/PunchInTimeAnalyzer.php   hvhv  '            8:m6/d|ٿ 7src/OrangeHRM/DevOps/usageStats/ReportUsageAnalyzer.php   hvhv  '            &(y 7src/OrangeHRM/DevOps/usageStats/RequestDeskAnalyzer.php   hvhv  '            <Ͷ\ebX8)s Esrc/OrangeHRM/DevOps/usageStats/ScheduledTasksConfigurationsCheck.php     hvhv  ((            )̙Z9Zݥ 6src/OrangeHRM/DevOps/usageStats/TimeSheetsAnalyzer.php    hvhv  3H            =J'ܯM o!"
M ;src/OrangeHRM/DevOps/usageStats/TrainingSessionAnalyzer.php       hvhv  3J            (oknB}<ړ]x 7src/OrangeHRM/DevOps/usageStats/TravelClaimAnalyzer.php   hvhv  9            :TMդqk~*2 8src/OrangeHRM/DevOps/usageStats/UsageStatisticsCheck.php  hchc  9             ƎC$鬀&*!pHl$ 5src/OrangeHRM/DevOps/usageStats/UserLoginAnalyzer.php     hchc              /r,uCwW =src/OrangeHRM/DevOps/utility/CronExpressionDecoderUtility.php     hh              |-;)g2̬0	iq 2src/OrangeHRM/DevOps/utility/FileSystemUtility.php        hh              k}65V`;am531dU ,src/OrangeHRM/DevOps/utility/HttpUtility.php      hh              X&js ᐘi >src/OrangeHRM/DevOps/utility/InstanceDatabaseAccessUtility.php    hh              9R_ް,x@=[8ֆ Dsrc/OrangeHRM/DevOps/utility/InstanceLicenseInfoRetrievalUtility.php      hh              !*gn"n ;ndI +src/OrangeHRM/DevOps/utility/LogUtility.php       hh              bI@L;6ъ  0src/OrangeHRM/DevOps/utility/PasswordUtility.php  hh              (}% W,VJ*/& -src/OrangeHRM/DevOps/utility/ShellUtility.php     hh              RRE gdhlIW 7src/OrangeHRM/DevOps/utility/TableDescriptorUtility.php   hh              B
^ٍ{7g54ͳ4 7src/OrangeHRM/DevOps/utility/TimePeriodValueUtility.php   hh              aFNur8b /src/OrangeHRM/DevOps/utility/ValueFormatter.php   hfAhfA  9              ⛲CK)wZS test-env/db/data/.deleteme        hfAhfA                ⛲CK)wZS test-env/db/init/.deleteme        hfAhfA  /              ⛲CK)wZS test-env/db/root-home/.deleteme   hghg  /             ;N5Po#Qv, test-env/db/root-home/.my.cnf     hghg   }Y              ⛲CK)wZS test-env/db/sql/.deleteme hghg  9              ⛲CK)wZS test-env/root-home/.deleteme      hVhV  /              ⛲CK)wZS test-result/coverage/.deleteme    hUhU   }Y            |
Uk_=@k Atest/OrangeHRM/Test/DevOps/utility/TimePeriodValueUtilityTest.php hQThQT   }Y            ATxu5?:ʜ$Z 9test/OrangeHRM/Test/DevOps/utility/ValueFormatterTest.php TREE   105 4
-nKsY8}3 bsrc 91 1
?³s	$jOrangeHRM 91 1
0vu_E=\wk%WDevOps 91 4
kWAJMғ%n?thelper 9 0
[qKutility 11 0
rCuu뇮Yy?~usageStats 45 0
,+9=|Om3h*dataMasking 26 1
ϗ9l%-C@7strategy 23 0
J'8H"\ҍhwtest 2 1
)$/C*۔Kl:OrangeHRM 2 1
M%CS@)I/8eJTest 2 1
@(Z.G3vuDevOps 2 1
W$e=;nU\utility 2 0
)dwAG9nytest-env 6 2
Ӆc0*(oLdb 5 4
20LGwN'h<vsql 1 0
җmvQCo#3Ndata 1 0
җmvQCo#3Ninit 1 0
җmvQCo#3Nroot-home 2 0
I:T$nh7,6root-home 1 0
җmvQCo#3Ntest-result 1 1
gj^_lᗇtcoverage 1 0
җmvQCo#3N@#a{e#0000000000000000000000000000000000000000 7b5115dc0672fd0a873df34d5b079b7c4e270ddb root <root@3145d5f6fbab.(none)> 1761221284 +0000	branch: Created from refs/remotes/origin/compatibility/php-7.4
0000000000000000000000000000000000000000 7b5115dc0672fd0a873df34d5b079b7c4e270ddb root <root@3145d5f6fbab.(none)> 1761221284 +0000	checkout: moving from master to compatibility/php-7.4
7b5115dc0672fd0a873df34d5b079b7c4e270ddb 7b5115dc0672fd0a873df34d5b079b7c4e270ddb root <root@3145d5f6fbab.(none)> 1761221284 +0000	reset: moving to 7b5115dc0672fd0a873df34d5b079b7c4e270ddb
7b5115dc0672fd0a873df34d5b079b7c4e270ddb
/vendor/
/test-env/root-home/*
/test-env/db/*/*
/test-result/coverage/*
/.idea
composer.lock

FROM php:7.4-apache

RUN apt-get update -y \
    && apt-get install -y net-tools curl git libzip-dev libpng-dev default-mysql-client unzip cron \
    && curl -o ioncube.tar.gz https://downloads.ioncube.com/loader_downloads/ioncube_loaders_lin_x86-64.tar.gz \
    && tar -xvvzf ioncube.tar.gz \
    && mv ioncube/ioncube_loader_lin_7.4.so `php-config --extension-dir` \
    && rm -Rf ioncube.tar.gz ioncube \
    && docker-php-ext-install pdo pdo_mysql mysqli zip gd exif \
    && docker-php-ext-enable pdo_mysql mysqli zip gd exif ioncube_loader_lin_7.4 \
    && a2enmod rewrite

COPY --from=composer:latest /usr/bin/composer /usr/local/bin/composer

{
  "name": "orangehrm-devops/common",
  "description": "Common libraries for DevOps Internal Tools",
  "type": "library",
  "license": "OrangeHRM Commercial License",
  "authors": [
    {
      "name": "OrangeHRM Inc.",
      "email": "devops@orangehrm.com"
    }
  ],
  "version": "1.0.0",
  "autoload": {
    "psr-4": {
      "OrangeHRM\\": "src/OrangeHRM"
    }
  },
  "minimum-stability": "stable",
  "require": {
    "php": ">=7.4",
    "ext-pdo": "*",
    "ext-curl": "*",
    "ext-posix": "*",
    "ext-zip": "*",
    "ext-json": "*",
    "symfony/yaml": "v4.2.3",
    "phpseclib/phpseclib": ">=3.0.34"
  },
  "require-dev": {
    "phpunit/phpunit": "9.6.x"
  }
}
networks:
  dev-net:
    ipam:
      config:
        - subnet: 172.26.0.0/24
services:
  test:
    build: ./
    networks:
      dev-net:
        ipv4_address: 172.26.0.11
    volumes:
      - ./:/var/www/html
      - ./test-env/root-home:/root
  db:
    image: mariadb:10.4.22
    command: --max_allowed_packet=1073741824
    networks:
      dev-net:
        ipv4_address: 172.26.0.200
    environment:
      MYSQL_ROOT_PASSWORD: V8JNV@U4qLTJ
      MYSQL_DATABASE: test_orangehrm
      MYSQL_USER: test_orangehrm
      MYSQL_PASSWORD: WE6PFm@3QRU4
    volumes:
      - ./test-env/db/root-home:/root
      - ./test-env/db/data:/var/lib/mysql
      - ./test-env/db/init:/docker-entrypoint-initdb.d
      - ./test-env/db/sql:/sql

{
  "packages": {
    "orangehrm-devops/common": {
      "dev-master": {
        "name": "orangehrm-devops/common",
        "version": "dev-master",
        "dist": {
          "url": "https://gitlab.orangehrm.com/devops/internal-tools/common.git",
          "type": "git"
        }
      }
    }
  }
}
<?php

namespace OrangeHRM\DevOps\dataMasking;

use OrangeHRM\DevOps\helper\AgentConfigurationsHelper;
use OrangeHRM\DevOps\helper\ConfigurationHelper;
use OrangeHRM\DevOps\dataMasking\strategy\MaskingStrategy;
use OrangeHRM\DevOps\utility\HttpUtility;
use PDO;
use stdClass;
use ZipArchive;
use Exception;

abstract class DataMaskingHandler implements Handler
{

    protected string $keyFileContent;
    protected string $commonKeyFileContent;
    protected string $codebasePath;
    protected bool $useCommonKey = false;

    protected string $db;
    protected array $tables = [];
    protected array $triggers = [];
    protected stdClass $requestObject;
    protected $configurationHelper;
    protected string $lastError = '';
    protected array $batchProcessStrategy = [];
    protected PDO $dbhRoot;
    protected PDO $dbhMasking;

    protected string $maskingUser;
    protected stdClass $maskedFieldsConfig;
    protected array $attachmentTables;
    protected HttpUtility $httpUtility;

    public function getHttpUtility(): HttpUtility
    {
        if (!isset($this->httpUtility)) {

            $this->httpUtility = new HttpUtility();

            $config = AgentConfigurationsHelper::instance();
            $auth = "{$config->get('remote', 'ws-user')}:" . urlencode($config->get('remote', 'ws-user-password'));

            $this->httpUtility->setAuth($auth);
            $this->httpUtility->setCaCertificatePath($config->get('local', 'ca-certificate-path'));
        }
        return $this->httpUtility;
    }

    public function setHttpUtility(HttpUtility $httpUtility)
    {
        $this->httpUtility = $httpUtility;
    }

    public function getInstanceKeyFileContent(): string
    {
        return $this->keyFileContent;
    }

    public function setInstanceKeyFileContent(string $keyFileContent)
    {
        $this->keyFileContent = $keyFileContent;
    }

    public function getCommonKeyFileContent(): string
    {
        return $this->commonKeyFileContent;
    }

    public function setCommonKeyFileContent(string $commonKeyFileContent)
    {
        $this->commonKeyFileContent = $commonKeyFileContent;
    }

    public function getCodebasePath(): string
    {
        return $this->codebasePath;
    }

    public function setCodebasePath(string $codebasePath): void
    {
        $this->codebasePath = $codebasePath;
    }

    public function isUseDefaultCommonKey(): bool
    {
        return $this->useCommonKey;
    }

    public function setUseDefaultCommonKey(bool $useCommonKey): void
    {
        $this->useCommonKey = $useCommonKey;
    }

    public function getDb(): string
    {
        return $this->db;
    }

    public function setDb(string $db)
    {
        $this->db = $db;
    }

    public function getRequestObject(): stdClass
    {
        return $this->requestObject;
    }

    public function setRequestObject(stdClass $requestObject)
    {
        $this->requestObject = $requestObject;
    }

    public function getMaskedFieldsConfig(): stdClass
    {
        return $this->maskedFieldsConfig;
    }

    public function setMaskedFieldsConfig(stdClass $maskedFieldsConfig)
    {
        $this->maskedFieldsConfig = $maskedFieldsConfig;
    }

    public function getConfigurationHelper(): ConfigurationHelper
    {
        if (!isset($this->configurationHelper)) {
            $this->configurationHelper = AgentConfigurationsHelper::instance();
        }
        return $this->configurationHelper;
    }

    public function setConfigurationHelper(ConfigurationHelper $configurationHelper)
    {
        $this->configurationHelper = $configurationHelper;
    }

    public function getLastError(): string
    {
        return $this->lastError;
    }

    protected function reconnectRootDbh()
    {
        $this->initiateRootDbh();
    }

    public function checkFeasibility(int $maxDatabaseSize, int $requiredFreeDiskSpace, string $dbBackupPath, string $dbName, string $domName): bool
    {
        $this->initiateRootDbh();

        $sql = "SELECT table_schema AS 'database', 
                SUM(`data_length` + `index_length`) / 1024 / 1024 AS 'Size (MB)' 
                FROM information_schema.TABLES where table_schema = ?;";

        $stmt = $this->dbhRoot->prepare($sql);
        $stmt->execute([$dbName]);
        $dataBaseSize = (int)$stmt->fetchAll(PDO::FETCH_ASSOC)[0]['Size (MB)'];
        $rejectedList = $this->getConfigurationHelper()->get('data-masking', 'rejected-list');

        $sizeBelowLimit = true;
        if ($dataBaseSize > $maxDatabaseSize) {
            $sizeBelowLimit = false;
            $this->lastError = "Database size ($dataBaseSize) exceeds the max allowed limit {$maxDatabaseSize}\n";
        }

        $inRejectedList = false;
        if (in_array($domName, $rejectedList)) {
            $inRejectedList = true;
            $this->lastError = "This domain ({$domName}) is restricted for data masking\n";
        }

        $hasEnoughDiskSpace = true;
        $freeDiskSpace = disk_free_space($dbBackupPath);
        if ($freeDiskSpace < $requiredFreeDiskSpace) {
            $hasEnoughDiskSpace = false;
            $this->lastError = "Not enough disk space is available to perform the data masking operation. (Min. required: {$requiredFreeDiskSpace})\n";
        }

        echo $this->lastError;

        return ($sizeBelowLimit && !$inRejectedList && $hasEnoughDiskSpace);
    }

    public function runPreRequisiteChecks(): bool
    {
        $passed = true;

        $mysqldump = $this->getConfigurationHelper()->get('local', 'mysqldump-command');
        $mysql = $this->getConfigurationHelper()->get('local', 'mysql-client-command');
        $skipPathChecks = $this->getConfigurationHelper()->get('env', 'skip-path-checks');

        if (!$skipPathChecks) {
            if (!is_file($mysqldump) || !is_executable($mysqldump)) {
                echo "{$mysqldump} command doesn't exist or not executable.\n";
                $passed = false;
            }

            if (!is_file($mysql) || !is_executable($mysql)) {
                echo "{$mysql} command doesn't exist or not executable.\n";
                $passed = false;
            }
        }

        if ($passed) {

            $mysqlRootUser = $this->getConfigurationHelper()->get('local', 'mysql-root-user');
            $mysqlRootPassword = $this->getConfigurationHelper()->get('local', 'mysql-root-password');
            $mysqlHost = $this->getConfigurationHelper()->get('local', 'mysql-host');
            $mysqlPort = $this->getConfigurationHelper()->get('local', 'mysql-port');

            $output = [];
            $returnVar = null;

            $passwordOption = empty($mysqlRootPassword) ? '' : "-p{$mysqlRootPassword}";
            exec("{$mysql} -h {$mysqlHost} -P {$mysqlPort} -u{$mysqlRootUser} {$passwordOption} -e \"SELECT 1;\"", $output, $returnVar);

            if ($returnVar !== 0) {
                echo "Access denied for the MySQL root user for the given credentials.\n";
                $passed = false;
            }
        }

        return $passed;
    }

    /**
     *
     * @throws Exception
     */
    protected function uploadFile(string $localPath, string $remotePath): void
    {

        $config = AgentConfigurationsHelper::instance();

        $ch = curl_init();

        $fp = fopen($localPath, 'r');

        $urlEncodedPassword = urlencode($config->get('sftp', 'password'));

        curl_setopt($ch, CURLOPT_URL, "sftp://{$config->get('sftp', 'username')}:{$urlEncodedPassword}@{$config->get('sftp', 'host')}/" . $remotePath);
        curl_setopt($ch, CURLOPT_PORT, $config->get('sftp', 'port'));
        curl_setopt($ch, CURLOPT_UPLOAD, 1);
        curl_setopt($ch, CURLOPT_PROTOCOLS, CURLPROTO_SFTP);
        curl_setopt($ch, CURLOPT_INFILE, $fp);
        curl_setopt($ch, CURLOPT_INFILESIZE, filesize($localPath));

        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
        curl_setopt($ch, CURLOPT_CAINFO, $config->get('local', 'ca-certificate-path'));

        curl_exec($ch);

        $errorNo = curl_errno($ch);

        if ($errorNo != 0) {
            $errorMessage = curl_error($ch);
            curl_close($ch);
            throw new Exception("cURL Error {$errorNo}: {$errorMessage}");
        }

        curl_close($ch);
    }

    /**
     *
     * @param int $requestId
     * @param string $backupFileName
     * @throws Exception
     */
    public function notifyRequester($requestId, $backupFileName, $codebaseFileName)
    {
        $url = $this->getConfigurationHelper()->get('remote', 'url') . '/ws/notify-data-masking-requester?status=success';
        $notificationResponse = $this->getHttpUtility()->post($url, [
            'requestId' => $requestId,
            'backupFileName' => $backupFileName,
            'codebaseFileName' => $codebaseFileName,
        ]);
    }

    /**
     *
     * @param int $requestId
     * @param string $errorMessage
     * @throws Exception
     */
    public function notifyErrorToRequester($requestId, $errorMessage)
    {
        $url = $this->getConfigurationHelper()->get('remote', 'url') . '/ws/notify-data-masking-requester?status=error';
        $notificationResponse = $this->getHttpUtility()->post($url, [
            'requestId' => $requestId,
            'errorMessage' => $errorMessage,
        ]);
    }

    protected function cloneDatabase($db)
    {
        $clone = $db . '_' . md5(uniqid("{$db}_", true));

        $tempBackupPath = $this->getConfigurationHelper()->get('local', 'db-backup-path');
        $mysqlHost = $this->getConfigurationHelper()->get('local', 'mysql-host');
        $mysqlPort = $this->getConfigurationHelper()->get('local', 'mysql-port');
        $mysqlRootUser = $this->getConfigurationHelper()->get('local', 'mysql-root-user');
        $mysqlRootPassword = $this->getConfigurationHelper()->get('local', 'mysql-root-password');
        $mysqldump = $this->getConfigurationHelper()->get('local', 'mysqldump-command');
        $mysql = $this->getConfigurationHelper()->get('local', 'mysql-client-command');

        $passwordOption = empty($mysqlRootPassword) ? '' : "-p{$mysqlRootPassword}";

        $output = [];
        $returnVar = null;
        $command = "{$mysqldump} -h {$mysqlHost} -P {$mysqlPort} -u {$mysqlRootUser} {$passwordOption} --no-data --skip-triggers --routines {$db} | sed 's/`{$db}`\.//g' > {$tempBackupPath}" . DIRECTORY_SEPARATOR . "{$clone}-structure.sql ";
        $command .= "&& ";
        $attachmentTableSkipOptions = $this->generateSkippedTableList();
        $command .= "{$mysqldump} -h {$mysqlHost} -P {$mysqlPort} -u {$mysqlRootUser} {$passwordOption} {$attachmentTableSkipOptions} --no-create-info --skip-triggers --hex-blob --max-allowed-packet=268435456 {$db} > {$tempBackupPath}" . DIRECTORY_SEPARATOR . "{$clone}-data.sql ";
        $command .= "&& ";
        $command .= "{$mysqldump} -h {$mysqlHost} -P {$mysqlPort} -u {$mysqlRootUser} {$passwordOption} --no-data --no-create-info --triggers {$db} > {$tempBackupPath}" . DIRECTORY_SEPARATOR . "{$clone}-triggers.sql ";
        $command .= "&& ";
        $command .= "php -r \"file_put_contents('{$tempBackupPath}" . DIRECTORY_SEPARATOR . "{$clone}-structure.sql', preg_replace('/DEFINER=.\w{1,}.@.((([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])|\w{1,})./', 'DEFINER=\`{$mysqlRootUser}\`@\`{$mysqlHost}\`', file_get_contents('{$tempBackupPath}" . DIRECTORY_SEPARATOR . "{$clone}-structure.sql')));\" ";
        $command .= "&& ";
        $command .= "{$mysql} -h {$mysqlHost} -P {$mysqlPort} -u {$mysqlRootUser} {$passwordOption} -e \"CREATE DATABASE {$clone} CHARACTER SET utf8 COLLATE utf8_general_ci;\" ";
        $command .= "&& ";
        $command .= "{$mysql} -h {$mysqlHost} -P {$mysqlPort} -u {$mysqlRootUser} {$passwordOption} {$clone} < {$tempBackupPath}" . DIRECTORY_SEPARATOR . "{$clone}-structure.sql ";
        $command .= "&& ";
        $command .= "{$mysql} -h {$mysqlHost} -P {$mysqlPort} -u {$mysqlRootUser} {$passwordOption} --max-allowed-packet=268435456 {$clone} < {$tempBackupPath}" . DIRECTORY_SEPARATOR . "{$clone}-data.sql ";

        echo "Running steps to clonne {$db} into {$clone}\n";
        echo "Attachment Tables skip options: {$attachmentTableSkipOptions}\n";
        exec($command, $output, $returnVar);

        echo "Restoring attachment tables without attachment data\n";
        $this->restoreAttachmentTablesWithoutData($db, $clone);

        if ($returnVar === 0) {
            return $clone;
        } else {
            $commandWithoutPasswords = str_replace($passwordOption, '-pXXXXXX', $command);
            throw new Exception("DB cloning failed for {$db}\nCommand: {$commandWithoutPasswords}\nOutput:\n" . implode("\n", $output));
        }
    }

    protected function restoreTriggers($clone)
    {
        $tempBackupPath = $this->getConfigurationHelper()->get('local', 'db-backup-path');
        $mysqlHost = $this->getConfigurationHelper()->get('local', 'mysql-host');
        $mysqlPort = $this->getConfigurationHelper()->get('local', 'mysql-port');
        $mysqlRootPassword = $this->getConfigurationHelper()->get('local', 'mysql-root-password');
        $mysql = $this->getConfigurationHelper()->get('local', 'mysql-client-command');

        $output = [];
        $returnVar = null;
        $passwordOption = empty($mysqlRootPassword) ? '' : "-p{$mysqlRootPassword}";
        $command = "{$mysql} -h {$mysqlHost} -P {$mysqlPort} -u root {$passwordOption} {$clone} < {$tempBackupPath}" . DIRECTORY_SEPARATOR . "{$clone}-triggers.sql";
        exec($command, $output, $returnVar);

        if ($returnVar === 0) {
            return true;
        } else {
            throw new Exception("Restoring triggers failed for {$clone}");
        }
    }

    protected function restoreAttachmentTablesWithoutData($db, $clone)
    {
        $mysqlHost = $this->getConfigurationHelper()->get('local', 'mysql-host');
        $mysqlPort = $this->getConfigurationHelper()->get('local', 'mysql-port');
        $mysqlRootPassword = $this->getConfigurationHelper()->get('local', 'mysql-root-password');
        $mysql = $this->getConfigurationHelper()->get('local', 'mysql-client-command');

        $dbh = new PDO("mysql:host={$mysqlHost};port={$mysqlPort};charset=utf8", 'root', $mysqlRootPassword);
        $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        $stmt = $dbh->prepare("SELECT COLUMN_NAME, DATA_TYPE, TABLE_TYPE 
                FROM INFORMATION_SCHEMA.COLUMNS c
                    JOIN INFORMATION_SCHEMA.TABLES t ON t.TABLE_NAME = c.TABLE_NAME AND t.TABLE_SCHEMA = c.TABLE_SCHEMA 
                WHERE c.TABLE_SCHEMA = ? AND c.TABLE_NAME = ?");

        $this->attachmentTables = $this->sortTablesByDependencies($this->attachmentTables);

        foreach ($this->attachmentTables as $table) {
            $stmt->execute([$db, $table]);
            $columns = $stmt->fetchAll(PDO::FETCH_ASSOC);

            if ($columns[0]['TABLE_TYPE'] === 'VIEW') {
                echo "Skipping view {$table}\n";
                continue;
            }

            $restoreFields = [];
            $blobFields = [];

            foreach ($columns as ['COLUMN_NAME' => $column, 'DATA_TYPE' => $type]) {

                $maskingStrategy = $this->maskedFieldsConfig->tables[$table][$column]->name ?? null;
                if ($maskingStrategy === 'PRESERVE') {
                    $restoreFields[] = $column;
                    continue;
                }

                if (stripos($type, 'blob') !== false) {
                    $blobFields[] = $column;
                } else {
                    $restoreFields[] = $column;
                }
            }

            $allFields = array_merge($restoreFields, $blobFields);
            if (!empty($allFields)) {
                $fieldList = implode(', ', $allFields);
                $selectFields = array_merge($restoreFields, array_map(fn($field) => "'' AS `{$field}`", $blobFields));
                $selectList = implode(', ', $selectFields);
                $sql = "INSERT INTO `{$clone}`.`{$table}` ({$fieldList}) SELECT {$selectList} FROM `{$db}`.`{$table}`";
                echo "Restoring attachment table {$table} without data\n";
                $dbh->exec($sql);
            }

        }
    }

    /**
     * @param $db
     * @return string
     * @throws Exception
     */
    protected function backupDatabase($db)
    {
        $output = [];
        $returnVar = null;

        $dbBackupPath = $this->getConfigurationHelper()->get('local', 'db-backup-path');
        $mysqlHost = $this->getConfigurationHelper()->get('local', 'mysql-host');
        $mysqlPort = $this->getConfigurationHelper()->get('local', 'mysql-port');
        $mysqlRootPassword = $this->getConfigurationHelper()->get('local', 'mysql-root-password');
        $mysqldump = $this->getConfigurationHelper()->get('local', 'mysqldump-command');

        $timestamp = date('YmdHis');

        $passwordOption = empty($mysqlRootPassword) ? '' : "-p{$mysqlRootPassword}";
        $command = "{$mysqldump} -h {$mysqlHost} -P {$mysqlPort} -u root {$passwordOption} --routines --triggers --hex-blob --max-allowed-packet=268435456 {$db} | sed 's/`{$db}`\.//g' > {$dbBackupPath}" . DIRECTORY_SEPARATOR . "{$this->db}-backup_{$timestamp}.sql ";
        exec($command, $output, $returnVar);

        if ($returnVar === 0) {
            $backupPath = "{$dbBackupPath}/{$this->db}-backup_{$timestamp}.sql";

            $zip = new ZipArchive();
            $filename = $this->getConfigurationHelper()->get('local', 'temp-dir') . "/{$this->db}-backup_{$timestamp}.sql.zip";

            if ($zip->open($filename, ZipArchive::CREATE) !== TRUE) {
                throw new Exception("Cannot create file {$filename}");
            }

            $zip->addFile($backupPath, "./{$this->db}-backup_{$timestamp}.sql");

            // Add a new file from a string
            $zip->addFromString('key.ohrm', $this->getCommonKeyFileContent());

            $zip->close();

            unlink($backupPath);

            return $filename;
        } else {
            throw new Exception("DB backing up failed for {$db}");
        }
    }

    protected function cleanup($db, $path, $backupPath = null, $clonedDbName = null)
    {
        $mysqlClientIp = $this->getConfigurationHelper()->get('local', 'mysql-client-ip');
        $this->dbhRoot->exec("DROP DATABASE {$db};");
        $this->dbhRoot->exec("DROP USER '{$this->maskingUser}'@'{$mysqlClientIp}';");

        if (!empty($clonedDbName)) {
            $tmpFiles = glob("{$backupPath}/{$clonedDbName}*");
            foreach ($tmpFiles as $tmpFile) {
                unlink($tmpFile);
            }
        }

        unlink($path);
    }

    protected function executeStrategy(MaskingStrategy $strategy)
    {
        try {
            if ($strategy instanceof MaskingStrategy) {
                $stmt = $this->dbhMasking->prepare($strategy->getStatement());
                $result = $stmt->execute($strategy->getExecuteParameters());
                if ($result) {
                    echo "SUCCESS: {$strategy->getDescription()}\n";
                } else {
                    echo "FAILURE: {$strategy->getDescription()}\n";
                }
            }
        } catch (Exception $e) {
            echo "FAILURE: {$strategy->getDescription()}\n";
            echo "ERROR: {$e->getMessage()}\n";
        }
    }

    protected function initiateRootDbh(): void
    {
        $mysqlRootPassword = $this->getConfigurationHelper()->get('local', 'mysql-root-password');
        $mysqlRootUser = $this->getConfigurationHelper()->get('local', 'mysql-root-user');
        $mysqlHost = $this->getConfigurationHelper()->get('local', 'mysql-host');
        $this->dbhRoot = new PDO("mysql:host={$mysqlHost};port=3306;", $mysqlRootUser, $mysqlRootPassword);
    }

    protected function generateSkippedTableList()
    {
        $skippedTables = [];
        foreach ($this->attachmentTables as $table) {
            $skippedTables[] = "--ignore-table={$this->db}.{$table}";
        }
        return implode(' ', $skippedTables);
    }

}
<?php

namespace OrangeHRM\DevOps\dataMasking;

use stdClass;

interface Handler
{

    public function setDb(string $db);

    public function setRequestObject(stdClass $requestObject);

    public function setMaskedFieldsConfig(stdClass $maskedFieldsConfig);

    public function maskData();

    public function notifyRequester($requestId, $backupFileName, $codebaseFileName);

    public function notifyErrorToRequester($requestId, $errorMessage);

    public function getLastError();
}
<?php

namespace OrangeHRM\DevOps\dataMasking;

use OrangeHRM\DevOps\dataMasking\strategy\MaskingStrategy;
use Exception;
use OrangeHRM\DevOps\helper\KeyHandlerHelper;
use OrangeHRM\DevOps\utility\PasswordUtility;
use PDO;
use PDOException;
use stdClass;

class UniversalDataMaskingHandler extends DataMaskingHandler
{

    const OHRM_DYNAMIC_FORM_RECORD = 'ohrm_dynamic_form_record';
    const OHRM_DYNAMIC_FORM_RECORD_COLUMN_NAME = 'form_values';
    const DEFAULT_COMMON_KEY = 'af2822f955482be5e5b12452a84e004891a219b68e57ba9b4b3bd58b45ed6a178d559c3a916f109ba8b6b2d0a1aa1826b2caadcb5f026de38e61fd1da1f6de78';

    public function maskData()
    {
        try {

            $mysqlHost = $this->getConfigurationHelper()->get('local', 'mysql-host');
            $mysqlRootUser = $this->getConfigurationHelper()->get('local', 'mysql-root-user');
            $mysqlRootPassword = $this->getConfigurationHelper()->get('local', 'mysql-root-password');
            $mysqlClientIp = $this->getConfigurationHelper()->get('local', 'mysql-client-ip');

            echo "Starting the masking process...\n\n";

            echo "Cloning db {$this->db}...\n";
            $clonedDbName = $this->cloneDatabase($this->db);
            echo "Database cloned as {$clonedDbName}.\n";

            echo "Initializing database connection for database user creation...\n";
            $this->dbhRoot = new PDO("mysql:host={$mysqlHost};port=3306;", $mysqlRootUser, $mysqlRootPassword);
            $this->dbhRoot->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
            echo "Established database connection for user creation.\n";

            $this->maskingUser = $clonedDbName;
            $maskingUserPassword = (new PasswordUtility())->generateStrongPassword();

            $userCreationSql = "CREATE USER '{$this->maskingUser}'@'{$mysqlClientIp}' IDENTIFIED BY '{$maskingUserPassword}'; GRANT ALL PRIVILEGES ON {$clonedDbName}.* TO '{$this->maskingUser}'@'{$mysqlClientIp}';";

            echo "Creating the temporary user '{$this->maskingUser}'@'{$mysqlClientIp}' for data masking...";

            try {
                $this->dbhRoot->exec($userCreationSql);
            } catch (PDOException $e) {
                if ($e->getCode() === 2006) {
                    $this->reconnectRootDbh();
                    $this->dbhRoot->exec($userCreationSql);
                } else {
                    throw $e;
                }
            }

            echo "Temporary user created.\n";

            echo "Establishing connection with the cloned db with the temporary user...";
            $this->dbhMasking = new PDO("mysql:host={$mysqlHost};port=3306;dbname={$clonedDbName};", $this->maskingUser, $maskingUserPassword);
            $this->dbhMasking->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
            echo "Connection established.\n";

            echo "Retrieving tables and triggers list...\n";
            $this->tables = $this->dbhMasking->query('SHOW TABLES;')->fetchAll(PDO::FETCH_COLUMN);
            $this->triggers = $this->dbhMasking->query("SHOW TRIGGERS;")->fetchAll(PDO::FETCH_COLUMN);
            echo "Completed retrieving lists...\n";


            echo "Preparing Key files...\n";
            $this->prepareKeyFiles();
            echo "Completed Preparing Key files.\n";

            echo "Performing data masking...\n";
            $this->handleDataMasking();
            echo "Completed data masking.\n";

            echo "Restoring triggers...\n";
            $this->restoreTriggers($clonedDbName);
            echo "Completed restoring triggers.\n";

            echo "Starting to backup the file...\n";
            $backupFilePath = $this->backupDatabase($clonedDbName);
            $dbBackupPath = $this->getConfigurationHelper()->get('local', 'db-backup-path');
            $backupFileName = str_replace($dbBackupPath, '', $backupFilePath); // FIXME: Should take the proper filename
            echo "Completed backing  up the file as {$backupFilePath}\n";

            if (isset($this->requestObject->uploadTo)) {
                echo "Uploading the masked db backup to the SFTP...\n";
                try {
                    $this->uploadFile($backupFilePath, trim($this->requestObject->uploadTo) . '/' . trim($backupFileName));
                } catch (Exception $e) {
                    echo "Error occurred while uploading file. Cleaning up...";
                    $this->cleanup($clonedDbName, $backupFilePath, $dbBackupPath, $clonedDbName);
                    echo "Cleanup complete.\n";
                    throw $e;
                }

                echo "Completed uploading.\n";
            } elseif (isset($this->requestObject->savePath)) {
                echo "Start copying the backup file to the requested location\n";
                copy($backupFilePath, "{$this->requestObject->savePath}/{$backupFileName}");
                echo "Completed copying $backupFileName to {$this->requestObject->savePath}\n";
            } else {
                echo "The final operation to the masked data (to upload or to save to disk) is not specified in the request object.\n";
            }

            $skipCleanup = false;
            try {
                $skipCleanup = $this->getConfigurationHelper()->get('env', 'skip-cleanup');
            } catch (Exception $e) {
                // TODO: Warn
            }


            if (!$skipCleanup) {
                echo "Cleanup the cloned database and the backup file...\n";
                $this->cleanup($clonedDbName, $backupFilePath, $dbBackupPath, $clonedDbName);
                echo "Completed cleanup.\n";
            }
            echo "Completed data masking of {$this->db}.\n";

            return $backupFileName;
        } catch (Exception $e) {
            echo "{$e->getMessage()}\n";
            throw new Exception($e->getMessage());
        }
    }

    protected function handleDataMasking()
    {
        $this->handleFieldMasking();
        $this->handleDynamicFormRecordMasking();
    }

    protected function handleDynamicFormRecordMasking()
    {
        foreach ($this->maskedFieldsConfig->tables as $tableName => $maskingDefinition) {

            if (in_array($tableName, $this->tables) && $tableName == self::OHRM_DYNAMIC_FORM_RECORD) {
                $stmt = $this->dbhMasking->prepare("DESC $tableName;");
                $stmt->execute();
                $fields = $stmt->fetchAll(PDO::FETCH_COLUMN);

                foreach ($maskingDefinition as $fieldName => $strategyObj) {
                    if (in_array($fieldName, $fields) && $fieldName == self::OHRM_DYNAMIC_FORM_RECORD_COLUMN_NAME) {

                        $includingStrategyList = ['DYNAMIC_FORM_RECORDS'];
                        if (!in_array($strategyObj->name, $includingStrategyList)) {
                            continue;
                        }

                        $primaryKey = $this->maskedFieldsConfig->primaryKeys[$tableName] ?? null;

                        $strategy = $this->loadStrategy($tableName, $fieldName, $strategyObj, $primaryKey);
                        $strategyObj->parameters->dbhMasking = $this->dbhMasking;
                        $strategyObj->parameters->instanceKeyFileContent = $this->getInstanceKeyFileContent();
                        $strategyObj->parameters->commonKeyFileContent = $this->getCommonKeyFileContent();
                        $strategy->setParameters($strategyObj->parameters);
                        $strategy->executeCustomLogic();
                    } else {
                        echo "Field {$fieldName} doesn't exist in the table {$tableName}\n";
                    }
                }
            } else {
                echo "Table {$tableName} doesn't exist in database {$this->db}\n";
            }
        }
    }

    protected function handleFieldMasking()
    {
        foreach ($this->maskedFieldsConfig->tables as $tableName => $maskingDefinition) {

            if (in_array($tableName, $this->tables)) {
                $stmt = $this->dbhMasking->prepare("DESC $tableName;");
                $stmt->execute();
                $fields = $stmt->fetchAll(PDO::FETCH_COLUMN);

                foreach ($maskingDefinition as $fieldName => $strategyObj) {
                    if (in_array($fieldName, $fields)) {

                        $excludingStrategyList = ['PRESERVE', 'TBD', 'SKIP', 'DYNAMIC_FORM_RECORDS'];
                        if (in_array($strategyObj->name, $excludingStrategyList)) {
                            continue;
                        }
                        $primaryKey = $this->maskedFieldsConfig->primaryKeys[$tableName] ?? null;

                        $strategy = $this->loadStrategy($tableName, $fieldName, $strategyObj, $primaryKey);
                        $this->executeStrategy($strategy);
                    } else {
                        echo "Field {$fieldName} doesn't exist in the table {$tableName}\n";
                    }
                }
            } else {
                echo "Table {$tableName} doesn't exist in database {$this->db}\n";
            }
        }
    }

    public function loadMaskedFieldsConfig($maskingConfigurationsFile)
    {
        $maskedFieldsConfigData = new stdClass();
        $maskedFieldsConfigData->triggers = [];
        $maskedFieldsConfigData->tables = [];
        $maskedFieldsConfigData->primaryKeys = [];

        $fp = fopen($maskingConfigurationsFile, 'r');
        fgetcsv($fp);

        while (!feof($fp)) {
            $defs = fgetcsv($fp);

            if (!isset($defs[0]) || empty($defs[0])) {
                continue;
            }

            list($table, $field, , , $key, , , $strategy, $params) = $defs;

            if (empty($table) || empty($field)) {
                continue;
            }

            $params = json_decode(trim($params));

            $strategyObj = new stdClass();
            $strategyObj->name = $strategy;
            $strategyObj->parameters = empty($params) ? new stdClass() : $params;
            $strategyObj->parameters->isUnique = ($key === 'UNI');

            if (array_key_exists($table, $maskedFieldsConfigData->tables)) {
                $maskedFieldsConfigData->tables[$table][$field] = $strategyObj;
            } else {
                $maskedFieldsConfigData->tables[$table] = array($field => $strategyObj);
            }

            if ($key === 'PRI') {
                $maskedFieldsConfigData->primaryKeys[$table] = $field;
            }
        }
        fclose($fp);
        $this->setMaskedFieldsConfig($maskedFieldsConfigData);
    }

    public function loadAttachmentTables($attachmentTablesInfoFile): void
    {
        $this->attachmentTables = array_keys(json_decode(file_get_contents($attachmentTablesInfoFile), true));
    }

    /**
     * Sort tables by their foreign key dependencies to avoid constraint violations
     * Tables with no dependencies come first, tables that depend on others come after their dependencies
     */
    protected function sortTablesByDependencies(array $tables): array
    {
        $mysqlHost = $this->getConfigurationHelper()->get('local', 'mysql-host');
        $mysqlPort = $this->getConfigurationHelper()->get('local', 'mysql-port');
        $mysqlRootUser = $this->getConfigurationHelper()->get('local', 'mysql-root-user');
        $mysqlRootPassword = $this->getConfigurationHelper()->get('local', 'mysql-root-password');

        $dbh = new PDO("mysql:host={$mysqlHost};port={$mysqlPort};charset=utf8", $mysqlRootUser, $mysqlRootPassword);
        $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

        // Get all foreign key relationships for the tables we're interested in
        $wherePlaceholders = str_repeat('?,', count($tables) - 1) . '?';
        $stmt = $dbh->prepare("
        SELECT 
            kcu.TABLE_NAME as dependent_table,
            kcu.REFERENCED_TABLE_NAME as referenced_table
        FROM 
            INFORMATION_SCHEMA.KEY_COLUMN_USAGE kcu
        WHERE 
            kcu.TABLE_SCHEMA = ? 
            AND kcu.REFERENCED_TABLE_NAME IS NOT NULL
            AND kcu.TABLE_NAME IN ($wherePlaceholders)
            AND kcu.REFERENCED_TABLE_NAME IN ($wherePlaceholders)
    ");

        $params = array_merge([$this->db], $tables, $tables);
        $stmt->execute($params);
        $dependencies = $stmt->fetchAll(PDO::FETCH_ASSOC);

        // Build dependency map
        $dependsOn = [];
        $dependents = [];

        foreach ($tables as $table) {
            $dependsOn[$table] = [];
            $dependents[$table] = [];
        }

        foreach ($dependencies as $dep) {
            $dependentTable = $dep['dependent_table'];
            $referencedTable = $dep['referenced_table'];

            if (in_array($dependentTable, $tables) && in_array($referencedTable, $tables)) {
                $dependsOn[$dependentTable][] = $referencedTable;
                $dependents[$referencedTable][] = $dependentTable;
            }
        }

        // Topological sort using Kahn's algorithm
        $sorted = [];
        $inDegree = [];

        // Calculate in-degree for each table
        foreach ($tables as $table) {
            $inDegree[$table] = count($dependsOn[$table]);
        }

        // Find tables with no dependencies
        $queue = [];
        foreach ($tables as $table) {
            if ($inDegree[$table] === 0) {
                $queue[] = $table;
            }
        }

        // Process queue
        while (!empty($queue)) {
            $currentTable = array_shift($queue);
            $sorted[] = $currentTable;

            // For each table that depends on the current table
            foreach ($dependents[$currentTable] as $dependentTable) {
                $inDegree[$dependentTable]--;
                if ($inDegree[$dependentTable] === 0) {
                    $queue[] = $dependentTable;
                }
            }
        }

        // Check for circular dependencies
        if (count($sorted) !== count($tables)) {
            $remaining = array_diff($tables, $sorted);
            echo "Warning: Circular dependencies detected for tables: " . implode(', ', $remaining) . ". Adding them at the end.\n";
            $sorted = array_merge($sorted, $remaining);
        }

        echo "Tables sorted by dependencies: " . implode(', ', $sorted) . "\n";

        return $sorted;
    }

    /**
     *
     * @throws Exception
     */
    protected function loadStrategy(string $tableName, string $fieldName, stdClass $strategyObj, ?string $primaryKey = null): MaskingStrategy
    {
        $id = preg_replace_callback('/_([a-z])/', function ($matches) {
            return ucfirst($matches[1]);
        }, ucfirst(strtolower($strategyObj->name)));
        $strategyClass = "OrangeHRM\\DevOps\\dataMasking\\strategy\\{$id}FieldStrategy";

        if (class_exists($strategyClass)) {
            $strategy = new $strategyClass($tableName);
            $strategy->setFieldName($fieldName);

            $strategyObj->parameters->primaryKey = $primaryKey;
            $strategy->setParameters($strategyObj->parameters);
            return $strategy;
        } else {
            throw new Exception("{$strategyClass} doesn't exist");
        }
    }

    protected function prepareKeyFiles()
    {
        $installationDirectory = $this->getCodebasePath();

        $decryptTaskFile = "{$installationDirectory}/symfony/plugins/orangehrmCorePlugin/lib/task/InstanceKeyReadingTask.class.php";
        touch($decryptTaskFile);
        copy(__DIR__ . '/../../../../../../../code-templates/InstanceKeyReadingTask.class.php.tmpl', $decryptTaskFile);
        $this->runSymfonyCommands($installationDirectory);
        exec("cd {$installationDirectory}/symfony && php symfony orangehrm:readInstanceKey ", $output, $returnVar);
        unlink($decryptTaskFile);
        if ($returnVar === 0) {
            $keyFileContent = trim(implode('', $output));
        } else {
            throw new Exception("Couldn't get instance key file");
        }

        $keyHandlerHelper = new KeyHandlerHelper();
        $this->setInstanceKeyFileContent($keyFileContent);

        $commonKey = $this->isUseDefaultCommonKey() ? self::DEFAULT_COMMON_KEY : $keyHandlerHelper->generateKey();
        echo "Common Key: {$commonKey}\n";
        $this->setCommonKeyFileContent($commonKey);
    }

    protected function runSymfonyCommands($path): void
    {
        exec("cd \"{$path}\" && cd symfony && php symfony cc && php symfony orangehrm:publish-assets");
    }

    protected function setupOwnershipAndPermissions(string $path, string $httpdUser, string $httpdGroup): void
    {
        exec("chown -R {$httpdUser}:{$httpdGroup} \"{$path}\" && chmod -R 775 \"{$path}\"");
    }

}
<?php

namespace OrangeHRM\DevOps\dataMasking\strategy;

class AnonymizeApiEndpointFieldStrategy extends FieldStrategy
{
    protected array $preReplacements = [
        '/$' => '',
        '/[0-9]{4}-[0-9]{2}-[0-9]{2}' => '/[DATE]',
        '/[0-9]+(,[0-9]+)+' => '/[NUMLIST]',
    ];
    protected array $postReplacements = [
        '/[0-9]+' => '/[NUM]',
    ];

    public function getStatement(): string
    {

        if (!isset($this->parameters->replacements)) {
            return "DELETE FROM {$this->tableName};";
        }

        if (!is_object($this->parameters->replacements)) {
            return "DELETE FROM {$this->tableName};";
        }

        $endpointSpecificReplacements = (array) $this->parameters->replacements;

        if (empty($endpointSpecificReplacements)) {
            return "DELETE FROM {$this->tableName};";
        }

        $replacements = array_merge($this->preReplacements, $endpointSpecificReplacements, $this->postReplacements);

        $replacementValue = "SUBSTRING_INDEX(TRIM(api), '?', 1)";
        foreach ($replacements as $pattern => $replacement) {
            $replacementValue = "REGEXP_REPLACE($replacementValue, '$pattern', '$replacement')";
        }

        return "UPDATE {$this->tableName} SET {$this->fieldName} = {$replacementValue} WHERE api IS NOT NULL";
    }

    public function getExecuteParameters(): array
    {
        return [];
    }

    public function getDescription(): string
    {
        return "Anonymize API endpoints in {$this->tableName}.{$this->fieldName}";
    }
}
<?php

namespace OrangeHRM\DevOps\dataMasking\strategy;

class AnonymizeEmailFieldStrategy extends FieldStrategy
{

    const EMAIL_DOMAIN = 'example.com';

    public function getDescription(): string
    {
        return "Anonymize {$this->tableName}.{$this->fieldName}";
    }

    public function getExecuteParameters(): array
    {
        return [];
    }

    public function getStatement(): string
    {
        return "UPDATE {$this->tableName} SET {$this->fieldName} = CONCAT('{$this->fieldName}', '_', {$this->parameters->primaryKey}, '@', '" . self::EMAIL_DOMAIN . "')";
    }

}
<?php

namespace OrangeHRM\DevOps\dataMasking\strategy;

class AnonymizeFieldStrategy extends FieldStrategy
{

    public function getDescription(): string
    {
        return "Anonymize {$this->tableName}.{$this->fieldName}";
    }

    public function getExecuteParameters(): array
    {
        $executeParams = [];

        if (!empty($this->parameters->exclude)) {
            $executeParams[] = $this->parameters->exclude;
        }

        return $executeParams;
    }

    public function getStatement(): string
    {
        $statement = "UPDATE {$this->tableName} SET {$this->fieldName} = CONCAT('{$this->fieldName}', '_', {$this->parameters->primaryKey}) WHERE 1";

        if (!empty($this->parameters->exclude)) {
            $statement .= " AND ({$this->parameters->primaryKey} NOT IN (?))";
        }

        if (isset($this->parameters->skippedValues) && is_array($this->parameters->skippedValues)) {
            $statement .= " AND ({$this->fieldName} NOT IN ('" . implode("','", $this->parameters->skippedValues) . "'))";
        }

        return $statement;
    }

}
<?php

namespace OrangeHRM\DevOps\dataMasking\strategy;

class ChangeToRandomIpAddrIfNotEmptyFieldStrategy extends FieldStrategy {

    public function getDescription(): string
    {
        return "Change the {$this->tableName}.{$this->fieldName} to random IP address if it's not empty";
    }

    public function getExecuteParameters():array
    {
        return [];
    }

    public function getStatement(): string
    {
        return "UPDATE {$this->tableName} 
SET {$this->fieldName} = CONCAT_WS('.', FLOOR(RAND() * 255), FLOOR(RAND() * 255), FLOOR(RAND() * 255), FLOOR(RAND() * 255)) 
WHERE ({$this->fieldName} IS NOT NULL OR {$this->fieldName} != '')";
    }

}
<?php

namespace OrangeHRM\DevOps\dataMasking\strategy;

class ChangeToRandomTextIfNotEmptyFieldStrategy extends FieldStrategy
{

    const AVERAGE_WORD_LENGTH = 5;
    const MIN_WORD_LENGTH = 1;
    const CHARSET = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
    const CHARSET_LENGTH = 62;

    public function getDescription(): string
    {
        return "Change the {$this->tableName}.{$this->fieldName} to random text if it's not empty";
    }

    public function getExecuteParameters(): array
    {
        $length = $this->parameters->maxLength ?? 40;
        return array(':randomText' => $this->generateRandomText($length));
    }

    public function getStatement(): string
    {
        return "UPDATE {$this->tableName} SET {$this->fieldName} = :randomText WHERE ({$this->fieldName} IS NOT NULL OR {$this->fieldName} != '')";
    }

    protected function generateRandomText($length = 40)
    {
        $characters = self::CHARSET;

        $randomString = '';
        for ($i = 0; $i < $length; $i++) {
            $randomString .= $characters[rand(0, self::CHARSET_LENGTH - 1)];
        }

        $noOfSpaces = $length / self::AVERAGE_WORD_LENGTH;
        $offset = rand(self::MIN_WORD_LENGTH, ((self::AVERAGE_WORD_LENGTH * 2) - self::MIN_WORD_LENGTH));
        for ($i = 0; $i < $noOfSpaces; $i++) {
            $offset = rand($offset, $length - self::AVERAGE_WORD_LENGTH);
            $randomString = substr_replace($randomString, ' ', $offset, 1);
        }

        return $randomString;
    }

}
<?php

namespace OrangeHRM\DevOps\dataMasking\strategy;

class ChangeToValueFieldStrategy extends FieldStrategy
{

    public function getDescription(): string
    {
        return "Set {$this->tableName}.{$this->fieldName} to {$this->parameters->value}";
    }

    public function getExecuteParameters(): array
    {
        return [];
    }

    public function getStatement(): string
    {

        $sql = "UPDATE {$this->tableName} SET {$this->fieldName} = {$this->parameters->value} WHERE 1";

        if (isset($this->parameters->skipIfEmpty) && $this->parameters->skipIfEmpty === true) {
            $sql .= " AND ({$this->fieldName} IS NOT NULL OR {$this->fieldName} != '')";
        }

        if (isset($this->parameters->skippedValues) && is_array($this->parameters->skippedValues)) {
            $sql .= " AND ({$this->fieldName} NOT IN ('" . implode("','", $this->parameters->skippedValues) . "'))";
        }

        return "{$sql};";
    }

}
<?php

namespace OrangeHRM\DevOps\dataMasking\strategy;

class ChangeToZeroFieldStrategy extends FieldStrategy {

    public function getDescription(): string
    {
        return "Set {$this->tableName}.{$this->fieldName} to 0";
    }

    public function getExecuteParameters(): array
    {
        return [];
    }

    public function getStatement(): string
    {
        return "UPDATE {$this->tableName} SET {$this->fieldName} = 0;";
    }

}
<?php

namespace OrangeHRM\DevOps\dataMasking\strategy;

class ConditionalAnonymizeFieldStrategy extends AnonymizeFieldStrategy
{

    public function getDescription(): string
    {
        return "Conditional Anonymize {$this->tableName}.{$this->fieldName}";
    }

    public function getExecuteParameters(): array
    {
        $executeParams = [];

        if (!empty($this->parameters->exclude)) {
            $executeParams[] = $this->parameters->exclude;
        }

        if (isset($this->parameters->conditions) && is_array($this->parameters->conditions)) {
            foreach ($this->parameters->conditions as $condition) {
                if (preg_match('^IS', $condition->comparison)) {
                    continue;
                }

                $executeParams[] = $condition->value;
            }
        }

        return $executeParams;
    }

    public function getStatement(): string
    {
        $statement = parent::getStatement();

        if (isset($this->parameters->conditions) && is_array($this->parameters->conditions)) {
            foreach ($this->parameters->conditions as $condition) {
                if (preg_match('^IS', $condition->comparison)) {
                    $statement .= " AND ({$condition->determinant} {$condition->comparison} {$condition->value}) ";
                    continue;
                }

                $statement .= " AND ({$condition->determinant} {$condition->comparison} ?) ";
            }
        }

        return $statement;
    }
}
<?php

namespace OrangeHRM\DevOps\dataMasking\strategy;

abstract class CustomFieldStrategy extends FieldStrategy{

    abstract public function executeCustomLogic(); // Declare as abstract

}<?php

namespace OrangeHRM\DevOps\dataMasking\strategy;

use OrangeHRM\DevOps\dataMasking\strategy\TriggerStrategy;

class DropTriggerStrategy extends TriggerStrategy
{

    public function getStatement(): string
    {
        return "DROP TRIGGER IF EXISTS ?;";
    }

    public function getExecuteParameters(): array
    {
        return [$this->triggerName];
    }

    public function getDescription(): string
    {
        return "Drop trigger {$this->triggerName}";
    }

}
<?php

namespace OrangeHRM\DevOps\dataMasking\strategy;

use Exception;
use PDO;

class DynamicFormRecordsFieldStrategy extends CustomFieldStrategy
{

    private $dbhMasking;

    public function executeCustomLogic(): void
    {
        $this->dbhMasking = $this->parameters->dbhMasking;
        $keyFileContent = $this->parameters->instanceKeyFileContent;
        echo "Decrypting form records...\n";
        $this->decryptingFormRecords($keyFileContent);
        echo "Completed decrypting records.\n";

        echo "randomizing form records...\n";
        $this->randomizeFormRecords();
        echo "Completed randomizing records.\n";


        echo "Encrypting form records...\n";
        $commonKeyContent = $this->parameters->commonKeyFileContent;
        echo "params common-key value " . $commonKeyContent;
        $this->encryptingFormRecords($commonKeyContent);
        echo "Completed encrypting records.\n";

    }

    public function getStatement(): string
    {
        return '';
    }

    public function getExecuteParameters(): array
    {
        return [];
    }

    public function getDescription(): string
    {
        return "Anonymize {$this->tableName}.{$this->fieldName}";
    }

    public function decryptingFormRecords($keyFileContent): void
    {
        try {

            $query = "update ohrm_dynamic_form_record set form_values = aes_decrypt (unhex(form_values), '" . trim($keyFileContent) . "')";
            $stmt = $this->dbhMasking->prepare($query);
            $stmt->execute([]);
        } catch (Exception $e) {
            echo $e->getMessage();
        }
    }

    public function randomizeFormRecords(): void
    {
        try {

            $formVersionData = [];
            $formVersionQuery = 'SELECT id, meta_data FROM `ohrm_dynamic_form_version` ';
            $stmt = $this->dbhMasking->prepare($formVersionQuery);
            $stmt->execute([]);
            $result = $stmt->fetchAll(PDO::FETCH_ASSOC); // Fetch all rows as an associative array
            if ($result) {
                foreach ($result as $record) {
                    $formVersionData[$record['id']] = json_decode($record['meta_data'], true);
                }
            }

            $stmt = $this->dbhMasking->prepare("SELECT id,form_version_id, form_values FROM `ohrm_dynamic_form_record` ");
            $stmt->execute([]);
            $result = $stmt->fetchAll(PDO::FETCH_ASSOC); // Fetch all rows as an associative array

            $updateStmt = $this->dbhMasking->prepare('update ohrm_dynamic_form_record set form_values = ? where id = ?');
            if ($result) {
                foreach ($result as $record) {

                    $id = $record['id'];
                    $matchingFormVersionRecord = $formVersionData[$record['form_version_id']];
                    $formValues = json_decode($record['form_values'], true);
                    $output = $this->randomizeFormValues($formValues, $matchingFormVersionRecord, $formVersionData);
                    $updateStmt->execute([json_encode($output), $id]);
                }
            }
        } catch (Exception $e) {
            echo $e->getMessage();
        }
    }

    public function encryptingFormRecords($commonKeyContent): void
    {
        try {

            $query = "UPDATE ohrm_dynamic_form_record SET form_values = HEX(AES_ENCRYPT(form_values, '$commonKeyContent'))";
            $stmt = $this->dbhMasking->prepare($query);
            $stmt->execute([]);
        } catch (Exception $e) {
            echo $e->getMessage();
        }
    }

    public function randomizeFormValues($formValues, $metaData, $formVersionData)
    {
        $fields = $metaData['fields'];

        foreach ($formValues as $key => $formValue) {

            $maskedFormValue = $formValue;

            try {
                if ($formValue) {
                    $matchingField = null;
                    foreach ($fields as $field) {
                        if ($field['name'] == $key) {
                            $matchingField = $field;
                            break;
                        }
                    }

                    if ($matchingField) {
                        switch ($matchingField['widget']) {
                            case 'textbox':
                            case 'text':
                                $maskedFormValue = str_repeat('A', rand(3, 8));
                                break;
                            case 'oxd-url-input':
                                $maskedFormValue = 'https://example.com';
                                break;
                            case 'dropdown':
                            case 'radiogroup':
                            case 'checkbox':
                            case 'datepicker':
                                break;
                            case 'oxd-master-data-input':
                            case 'oxd-subform-widget':
                                $subFormId = null;
                                $validations = $matchingField['validations'];
                                foreach ($validations as $validation) {
                                    if (strpos($validation, '#childForm:') === 0) {
                                        $idsStr = substr($validation, strlen('#childForm:'));
                                        $ids = explode(',', $idsStr);
                                        $subFormId = $ids[0];
                                        break;
                                    }
                                }

                                if ($subFormId) {
                                    $randomizedSubFormValues = [];
                                    $matchingFormVersionRecord = $formVersionData[$subFormId];
                                    foreach ($maskedFormValue as $value) {
                                        $subformOutput = $this->randomizeFormValues($value, $matchingFormVersionRecord, $formVersionData);
                                        $randomizedSubFormValues[] = $subformOutput;
                                    }
                                    $maskedFormValue = $randomizedSubFormValues;
                                }

                                break;
                            case 'oxd-file-input':
                                foreach ($maskedFormValue as &$attachment) {
                                    $nameParts = explode('.', $attachment['name']);
                                    $extension = array_pop($nameParts);
                                    $attachment['name'] = str_repeat('A', rand(3, 8)) . '.' . $extension;
                                }
                                break;
                            default:
                                if (is_string($formValue)) {
                                    $maskedFormValue = str_repeat('A', rand(3, 8));
                                } elseif (is_array($formValue) && isset($formValue['label'])) {
                                    $formValue['label'] = str_repeat('A', rand(3, 8));
                                    $maskedFormValue = $formValue;
                                }
                                // else: leave as is
                                break;
                        }
                    } else {
                        echo "field not matched for key: " . $key . "\n";
                        if (is_string($formValue)) {
                            $maskedFormValue = str_repeat('A', rand(3, 8));
                        } elseif (is_array($formValue) && isset($formValue['label'])) {
                            $formValue['label'] = str_repeat('A', rand(3, 8));
                            $maskedFormValue = $formValue;
                        }
                    }
                }
            } catch (Exception $e) {
                echo $e->getMessage();
            }


            $formValues[$key] = $maskedFormValue;
        }

        return $formValues;
    }
}
<?php

namespace OrangeHRM\DevOps\dataMasking\strategy;

class DynamicFormRecordsPreserveFieldStrategy extends DynamicFormRecordsFieldStrategy
{

    public function randomizeFormRecords(): void
    {

    }

    public function randomizeFormValues($formValues, $metaData, $formVersionData)
    {
        return $formValues;
    }
}
<?php

namespace OrangeHRM\DevOps\dataMasking\strategy;

class EmptyFieldStrategy extends FieldStrategy
{

    public function getDescription(): string
    {
        return "Empty {$this->tableName}.{$this->fieldName}";
    }

    public function getExecuteParameters(): array
    {
        return [];
    }

    public function getStatement(): string
    {
        return "UPDATE {$this->tableName} SET {$this->fieldName} = '';";
    }

}
<?php

namespace OrangeHRM\DevOps\dataMasking\strategy;

class EmptyTableFieldStrategy extends FieldStrategy
{
    public function getDescription(): string
    {
        return "Empty {$this->tableName}";
    }

    public function getExecuteParameters(): array
    {
        return [];
    }

    public function getStatement(): string
    {
        return "DELETE FROM {$this->tableName};";
    }
}
<?php

namespace OrangeHRM\DevOps\dataMasking\strategy;

class EmptyTableStrategy extends TableStrategy
{

    public function getDescription(): string
    {
        return "Empty table {$this->tableName}";
    }

    public function getExecuteParameters(): array
    {
        return array($this->tableName);
    }

    public function getStatement(): string
    {
        return "DELETE FROM ?;";
    }

}
<?php

namespace OrangeHRM\DevOps\dataMasking\strategy;

use stdClass;

abstract class FieldStrategy implements MaskingStrategy
{

    protected string $tableName;
    protected string $fieldName;
    protected stdClass $parameters;

    public function __construct(string $tableName)
    {
        $this->tableName = $tableName;
    }

    public function setFieldName(string $fieldName)
    {
        $this->fieldName = $fieldName;
    }

    public function setParameters(stdClass $parameters)
    {
        $this->parameters = $parameters;
    }

}
<?php

namespace OrangeHRM\DevOps\dataMasking\strategy;

interface MaskingStrategy {

    public function getStatement(): string;
    public function getExecuteParameters(): array;
    public function getDescription(): string;
}
<?php
/**
 * Created by PhpStorm.
 * User: administrator
 * Date: 28/11/18
 * Time: 11:04 AM
 */

namespace OrangeHRM\DevOps\dataMasking\strategy;

class ReplaceWithDefaultFileFieldStrategy extends FieldStrategy
{

    protected static array $fileData = [];
    public array $fileTypeArray = [
        'image/gif' => 'gif',
        'image/jpeg' => 'jpeg',
        'image/pjpeg' => 'jpeg',
        'image/jpg' => 'jpg',
        'image/png' => 'png',
        'image/x-png' => 'png',
        'application/pdf' => 'pdf',
        'application/msword' => 'odt',
        'application/vnd.ms-excel' => 'ods',
        'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' => 'ods',
        'application/vnd.oasis.opendocument.spreadsheet' => 'ods',
        'text/plain' => 'txt',
        'application/vnd.oasis.opendocument.text' => 'txt',
        'text/rtf' => 'rtf',
        'application/rtf' => 'rtf',
        'application/vnd.oasis.opendocument.presentation' => 'odp',
        'application/vnd.ms-powerpoint' => 'odp',
        'application/vnd.openxmlformats-officedocument.presentationml.presentation' => 'odp',
        'application/vnd.openxmlformats-officedocument.presentationml.slideshow' => 'odp',
        'application/vnd.oasis.opendocument.presentation,application/vnd.ms-powerpoint' => 'odp',
        'application/vnd.openxmlformats-officedocument.wordprocessingml.document' => 'odt'

    ];


    public function getDescription(): string
    {
        return "Set {$this->tableName}.{$this->fieldName}";
    }

    public function getExecuteParameters(): array
    {
        return [];
    }

    public function getStatement(): string
    {


        $combinedSql = "UPDATE {$this->tableName} SET {$this->fieldName} = {$this->parameters->value} WHERE 1; ";

        foreach ($this->fileTypeArray as $fileType => $fileExtension) {
            $sql = "UPDATE {$this->tableName} SET {$this->fieldName} = LOAD_FILE(CONCAT('/var/www/html/alge.local/agent/default_files/default_file_for.','$fileExtension')) WHERE `eattach_type` = '$fileType'";
            if (isset($this->parameters->skipIfEmpty) && $this->parameters->skipIfEmpty === true) {
                $sql .= " AND ({$this->fieldName} IS NOT NULL OR {$this->fieldName} != '')";
            }

            if (isset($this->parameters->skippedValues) && is_array($this->parameters->skippedValues)) {
                $sql .= " AND ({$this->fieldName} NOT IN ('" . implode("','", $this->parameters->skippedValues) . "'))";
            }
            $combinedSql .= $sql . "; ";
        }
        return "{$combinedSql}";
    }

}
<?php

namespace OrangeHRM\DevOps\dataMasking\strategy;

class SetNullFieldStrategy extends FieldStrategy
{

    public function getDescription(): string
    {
        return "Set {$this->tableName}.{$this->fieldName} to NULL";
    }

    public function getExecuteParameters(): array
    {
        return [];
    }

    public function getStatement(): string
    {
        return "UPDATE {$this->tableName} SET {$this->fieldName} = NULL;";
    }

}
<?php

namespace OrangeHRM\DevOps\dataMasking\strategy;

class SmartAnonymizeFieldStrategy extends FieldStrategy
{

    public function getDescription(): string
    {
        return "Smart anonymize {$this->tableName}.{$this->fieldName}";
    }

    public function getExecuteParameters(): array
    {
        $executeParams = [];

        if (!empty($this->parameters->exclude)) {
            $executeParams[] = $this->parameters->exclude;
        }

        return $executeParams;
    }

    public function getStatement(): string
    {

        $value = "REPEAT('A', LENGTH({$this->fieldName}))";

        if ($this->parameters->isUnique) {
            $value = "CONCAT({$value}, {$this->parameters->primaryKey})";
        }

        if (preg_match('/email/', $this->fieldName)) {
            $length = strlen(AnonymizeEmailFieldStrategy::EMAIL_DOMAIN);

            $value = "CONCAT(SUBSTRING({$value}, LENGTH({$this->fieldName}) - {$length}, {$length}), '" . AnonymizeEmailFieldStrategy::EMAIL_DOMAIN . "')";
        }

        $statement = "UPDATE {$this->tableName} SET {$this->fieldName} = {$value}";

        if (!empty($this->parameters->exclude)) {
            $statement .= " WHERE {$this->parameters->primaryKey} NOT IN (?)";
        }

        return $statement;
    }

}
<?php

namespace OrangeHRM\DevOps\dataMasking\strategy;

abstract class TableStrategy implements MaskingStrategy {

    protected string $tableName;

    public function __construct(string $tableName) {
        $this->tableName = $tableName;
    }

}
<?php

namespace OrangeHRM\DevOps\dataMasking\strategy;

abstract class TriggerStrategy implements MaskingStrategy {

    protected string $triggerName;

    public function __construct(string $triggerName) {
        $this->triggerName = $triggerName;
    }

}
<?php

namespace OrangeHRM\DevOps\dataMasking\strategy;

class TruncateTableStrategy extends TableStrategy
{

    public function getDescription(): string
    {
        return "Truncate table {$this->tableName}";
    }

    public function getExecuteParameters(): array
    {
        return [];
    }

    public function getStatement(): string
    {
        return "TRUNCATE {$this->tableName};";
    }

}
<?php

namespace OrangeHRM\DevOps\helper;

use Exception;

class AgentConfigurationsHelper implements ConfigurationHelper
{

    protected static AgentConfigurationsHelper $instance;
    protected string $configFilePath = '../config.json';
    protected array $configurations;

    public static function instance(): AgentConfigurationsHelper
    {
        if (!isset(self::$instance)) {
            self::$instance = new AgentConfigurationsHelper();
        }
        return self::$instance;
    }

    /**
     * @throws Exception
     */
    public function get(string $section, string $property)
    {
        if (empty($this->configurations)) {
            $this->init();
        }

        if (isset($this->configurations[$section][$property])) {
            return $this->configurations[$section][$property];
        } else {
            throw new Exception("Property {$property} of {$section} is not defined");
        }
    }

    protected final function init()
    {
        $this->configurations = json_decode(file_get_contents($this->configFilePath), true);
    }

}
<?php

namespace OrangeHRM\DevOps\helper;

interface ConfigurationHelper {
    public function get(string $section, string $property);
}
<?php

namespace OrangeHRM\DevOps\helper;

use phpseclib3\Crypt\AES;
use phpseclib3\Crypt\PublicKeyLoader;
use phpseclib3\Crypt\Random;
use phpseclib3\Crypt\RSA;

class EncryptionHelper
{


    public function encrypt(string $text, string $publicKey): string
    {
        $rsaPublic = PublicKeyLoader::loadPublicKey($publicKey);

        $aes = new AES('ctr');
        $iv = Random::string(16);
        $key = Random::string(16);

        $aes->setIV($iv);
        $aes->setKey($key);

        return base64_encode($rsaPublic->encrypt($key)) . ':' . base64_encode($rsaPublic->encrypt($iv)) . ':'. base64_encode($aes->encrypt($text));
    }

    public function decrypt(string $encryptedText, string $privateKey, string $privateKeyPassword): string
    {
        [$encodedKey, $encodedIv, $encodedCiphertext] = explode(':', $encryptedText);
        $encryptedKey = base64_decode($encodedKey);
        $encryptedIv = base64_decode($encodedIv);
        $encryptedText = base64_decode($encodedCiphertext);

        $rsaPrivate = RSA::loadPrivateKey($privateKey, $privateKeyPassword);

        $key = $rsaPrivate->decrypt($encryptedKey);
        $iv = $rsaPrivate->decrypt($encryptedIv);

        $aes = new AES('ctr');
        $aes->setKey($key);
        $aes->setIV($iv);

        return $aes->decrypt($encryptedText);
    }
}
<?php

namespace OrangeHRM\DevOps\helper;

use Exception;

class FileOperationsHelper
{
    /**
     * @throws Exception
     */
    public function findVhostConfigurationFile(string $domain, string $vhostsConfigDirectory): string
    {
        if (empty($vhostsConfigDirectory) || !is_dir($vhostsConfigDirectory)) {
            throw new Exception("{$vhostsConfigDirectory} is not a directory.");
        }

        $command = "grep -Rlw {$domain} {$vhostsConfigDirectory}/*.conf";

        $output = [];
        $returnVar = null;
        exec($command, $output, $returnVar);

        if ($returnVar == 0) {
            $resultCount = count($output);
            if ($resultCount === 1) {
                list($vhostConfigurationFile) = $output;
                return $vhostConfigurationFile;
            } elseif ($resultCount === 0) {
                throw new Exception("No VirtualHost configuration containing {$domain} was found.");
            } else {
                $secondaryCommand = "grep -Rliw \"ServerName\\s{$domain}\" {$vhostsConfigDirectory}/*.conf";
                $secondaryOutput = [];
                $secondaryReturnVar = null;

                exec($secondaryCommand, $secondaryOutput, $secondaryReturnVar);

                if ($secondaryReturnVar === 0 && count($secondaryOutput) === 1) {
                    list($vhostConfigurationFile) = $secondaryOutput;
                    return $vhostConfigurationFile;
                } else {
                    throw new Exception("More than one configuration containing {$domain} was found.");
                }
            }
        } else {
            throw new Exception("Error while locating the VirtualHost configuration containing {$domain}.");
        }
    }

    /**
     * @throws Exception
     */
    public function findDocumentRoot(string $domain): ?string
    {

        $vhostsConfigDirectory = AgentConfigurationsHelper::instance()->get('local', 'vhosts-config-directory');
        $vhostConfigurationFile = $this->findVhostConfigurationFile($domain, $vhostsConfigDirectory);
        $vhostFileContent = trim(file_get_contents($vhostConfigurationFile));

        $vhosts = explode('<VirtualHost', $vhostFileContent);

        foreach ($vhosts as $vhost) {
            $configString = trim($vhost);

            if (preg_match('/ServerName\s+' . $domain . '/', $configString) === 1) {

                $matches = [];
                $result = preg_match('/DocumentRoot\s+([a-zA-Z0-9.\/\-_]+)/', $configString, $matches);
                if ($result === 1) {
                    if (count($matches) === 2) {
                        return $matches[1];
                    } else {
                        throw new Exception("Found more than one entry when locating the DocumentRoot");
                    }
                } else {
                    throw new Exception("Couldn't find the DocumentRoot definition in the given VirtualHost.");
                }
            }
        }

        return null;
    }

    /**
     * @throws Exception
     */
    public function findInstallationDirectoryPath(string $domain): string
    {
        $documentRoot = $this->findDocumentRoot($domain);
        return preg_replace('/\/{0,1}symfony\/web\/{0,1}/', '', $documentRoot);
    }

    /**
     * @throws Exception
     */
    public function backupFile(string $path)
    {
        if (!is_file($path)) {
            throw new Exception("File {$path} doesn't exist.");
        }
        copy($path, $path . '.bak-' . date('YmdHis'));
    }

    /**
     * @throws Exception
     */
    public function checkVhostConfigurationFileExists(string $domain, string $vhostsConfigDirectory): bool
    {
        if (empty($vhostsConfigDirectory) || !is_dir($vhostsConfigDirectory)) {
            throw new Exception("{$vhostsConfigDirectory} is not a directory.");
        }

        $command = "grep -Rlw {$domain} {$vhostsConfigDirectory}/*.conf";

        $output = [];
        $returnVar = null;
        exec($command, $output, $returnVar);
        //$returnVar 1 if no lines were selected check man grep
        if ($returnVar == 0 || $returnVar == 1) {
            $resultCount = count($output);
            if ($resultCount === 1) {
                return true;
            } elseif ($resultCount === 0) {
                return false;
            } else {
                throw new Exception("More than one configuration containing {$domain} was found.");
            }
        } else {
            throw new Exception("Error while locating the VirtualHost configuration containing {$domain}.");
        }
    }

    /**
     * @throws Exception
     */
    public function validPath(string $path): string
    {
        if (preg_match("#^(/[^/]+)+$#", $path)) {
            return $path;
        } else {
            throw new Exception("Directory {$path} is invalid");
        }
    }

    /**
     * @throws Exception
     */
    public function isDiskSpaceAvailable(string $instanceBasePath, int $minFreeDiskSpacePercentage): bool
    {
        $availableFreeDiskSpacePercentage = floor(100 * disk_free_space($instanceBasePath) / disk_total_space($instanceBasePath));
        if ($minFreeDiskSpacePercentage > $availableFreeDiskSpacePercentage) {
            throw new Exception("Available disk space {$availableFreeDiskSpacePercentage}% is lower than minimum required disk space {$minFreeDiskSpacePercentage}%.");
        }
        return true;
    }

    /**
     * @throws Exception
     */
    public function isFreeInodeAvailable(string $instanceBasePath, int $minFreeInodePercentageRequired): bool
    {
        $command = "/bin/df -iHP {$instanceBasePath} ";
        $output = [];
        $returnVar = null;
        exec($command, $output, $returnVar);
        if ($returnVar === 0) {
            $parts = preg_split('/\s+/', $output[1]);
            $usedInodePercentage = rtrim($parts[4], '%');
            if (is_numeric($usedInodePercentage)) {
                $availableFreeInodePercentage = (100 - $usedInodePercentage);
                if ($availableFreeInodePercentage < $minFreeInodePercentageRequired) {
                    throw new Exception("Available inodes {$availableFreeInodePercentage}% is lower than minimum required inodes perecentage {$minFreeInodePercentageRequired}%.");
                } else {
                    return true;
                }
            } else {
                throw new Exception("Error while getting the inode count in {$instanceBasePath}.");
            }
        } else {
            throw new Exception("Error while getting the inode count in {$instanceBasePath}.");
        }
    }

    public function createFileFromTemplate(string $templatePath, array $replacements, string $destinationPath): void
    {
            $content = str_replace(array_keys($replacements), array_values($replacements), file_get_contents($templatePath));
            file_put_contents($destinationPath, $content);

    }

}
<?php

namespace OrangeHRM\DevOps\helper;

class KeyHandlerHelper {
    
    public  function getKey($file) {
        if (function_exists('ioncube_read_file')) {
            if (ioncube_file_is_encoded()) {
                $result = ioncube_read_file($file);
            } else {
                $result = file_get_contents($file);
            }
        } else {
            $result = file_get_contents($file);
        }
        return $result;
    }

    public static function generateKey() {
        $cryptKey = '';
        for($i = 0; $i < 4; $i++) {
            $cryptKey .= md5(rand(10000000, 99999999));
        }
        $cryptKey = str_shuffle($cryptKey);

        return $cryptKey;
    }
}
<?php

namespace OrangeHRM\DevOps\helper;

use Exception;
use OrangeHRM\DevOps\utility\HttpUtility;

class RemoteConfigurationHelper
{
    protected AgentConfigurationsHelper $agentConfig;
    protected HttpUtility $httpUtility;
    protected array $configs = [];
    protected static RemoteConfigurationHelper $instance;


    public static function instance(): RemoteConfigurationHelper
    {
        if (!isset(self::$instance)) {
            self::$instance = new RemoteConfigurationHelper();
        }
        return self::$instance;
    }

    public function setHttpUtility(HttpUtility $httpUtility): void
    {
        $this->httpUtility = $httpUtility;
    }

    public function setAgentConfig(AgentConfigurationsHelper $agentConfig): void
    {
        $this->agentConfig = $agentConfig;
    }

    /**
     * @throws Exception
     */
    public function get(array $keys, array $defaults = []): array
    {
        $return = [];
        $missingKeys = [];
        foreach ($keys as $key) {
            if (array_key_exists($key, $this->configs)) {
                $return[$key] = $this->configs[$key];
                continue;
            }

            $return[$key] = $defaults[$key];
            $missingKeys[] = $key;
        }

        try {
            $url = "{$this->agentConfig->get('remote', 'url')}/ws/read-config";
            $response = $this->httpUtility->post($url, ['properties' => implode(',', $missingKeys)]);
            $remoteConfigs = json_decode($response, true);
            $return = array_merge($return, $remoteConfigs);
        } catch (Exception $e) {
            throw new Exception("Couldn't read remote configurations: {$e->getMessage()}");
        }

        return $return;
    }
}
<?php

namespace OrangeHRM\DevOps\helper;

use Exception;

class RuntimeHelper
{
    /**
     * @throws Exception
     */
    public function opIdToClassName(string $opId, string $suffix, string $namespace): string
    {
        if (preg_match('/[^A-Za-z0-9\-]/', $opId)) {
            throw new Exception("Operation IDs should contain only alphanumeric characters.");
        }

        return $namespace . '\\' . ucfirst(preg_replace_callback('/-([a-z])/', function ($m) {
                return strtoupper($m[1]);
            }, $opId)) . $suffix;
    }

    public function execShellCommandChain(array $commands): array
    {
        $command = implode(' && ', $commands);
        exec($command, $output, $return);
        return [$output, $return];

    }
}
<?php

namespace OrangeHRM\DevOps\helper;

use DateTime;
use DateInterval;
use DatePeriod;
use Exception;

class TimeDataHelper
{
    protected static TimeDataHelper $instance;

    public static function instance(): TimeDataHelper
    {
        if (!isset(self::$instance)) {
            self::$instance = new TimeDataHelper();
        }
        return self::$instance;
    }

    /**
     * @throws Exception
     */
    public function generateAllMonths($startDate, $endDate, bool $includeLastMonth = false): array
    {
        $startDate = new DateTime($startDate);
        $endDate = new DateTime($endDate);

        if ($includeLastMonth) {
            $endDate = $endDate->add(new DateInterval('P1M'));
        }

        $dateInterval = new DateInterval('P1M');
        $datePeriod = new DatePeriod($startDate, $dateInterval, $endDate);

        $monthCount = 0;
        $allMonths = [];
        foreach ($datePeriod as $date) {
            $allMonths[] = ($date->format('Ym'));
            $monthCount++;
        }
        return $allMonths;
    }

    public function getAllWeeks($startDate, $endDate): array
    {
        $startTime = strtotime($startDate);
        $endTime = strtotime($endDate);
        $weeks = [];

        while ($startTime < $endTime) {
            $weeks[] = (int)(date('Y', $startTime) . date('W', $startTime));
            $startTime += strtotime('+1 week', 0);

        }

        return $weeks;
    }

    public function fillArrayWithAllKeys($result, $allDates): array
    {

        $arrayDiff = array_diff($allDates, array_keys($result));
        $filledArray = array_fill_keys($arrayDiff, 0);
        $finalArray = $filledArray + $result;
        ksort($finalArray);
        return $finalArray;
    }

    public function getFormattedKeys($finalArray, $type): array
    {
        $arrayForReturn = [];
        if ($type == 'months') {
            foreach ($finalArray as $key => $val) {
                $smallArray = [];
                $date = strtotime((substr((string)$key, 0, 4) . "-" . substr((string)$key, 4, 6)));
                $smallArray['month'] = date('Y-M', $date);
                $smallArray['count'] = $val;
                $arrayForReturn[] = $smallArray;
            }
        } elseif ($type == 'days') {
            foreach ($finalArray as $key => $val) {
                $smallArray = [];
                $smallArray['month'] = $key;
                $smallArray['count'] = $val;
                $arrayForReturn[] = $smallArray;
            }
        } elseif ($type == 'weeks') {
            foreach ($finalArray as $key => $val) {
                $dateTime = new DateTime();
                $dateTime->setISODate(substr((string)$key, 0, 4), substr((string)$key, 4, 6));
                $firstDayOfWeek = $dateTime->format('Y-m-d');
                $dateTime = DateTime::createFromFormat('Y-m-d', $firstDayOfWeek);
                $dateTime->modify('next sunday');
                $sunday = $dateTime->format('Y-M-d');
                $smallArray['month'] = $sunday;
                $smallArray['count'] = $val;
                $arrayForReturn[] = $smallArray;
            }

        } elseif ($type == 'rearrange') {
            foreach ($finalArray as $key => $val) {
                $smallArray = [];
                $smallArray['month'] = $key;
                $smallArray['count'] = $val;
                $arrayForReturn[] = $smallArray;
            }
        }

        return $arrayForReturn;
    }

    public function getFormattedKeysForMonth($finalArray): array
    {
        $arrayForReturn = [];

        foreach ($finalArray as $key => $val) {
            $smallArray = [];
            $date = strtotime((substr((string)$key, 0, 4) . substr((string)$key, 4, 6)));
            $smallArray['month'] = date('Y-M', $date);
            $smallArray['count'] = $val;
            $arrayForReturn[] = $smallArray;
        }
        return $arrayForReturn;
    }
}
<?php

namespace OrangeHRM\DevOps\helper;

use Exception;

class UserDefinedConfigurationHelper implements ConfigurationHelper
{

    protected static UserDefinedConfigurationHelper $instance;
    protected array $configurations = [];
    public static string $PATH;


    public static function instance(): UserDefinedConfigurationHelper
    {
        if (!isset(self::$instance)) {
            self::$instance = new UserDefinedConfigurationHelper();
        }
        return self::$instance;
    }

    /**
     *
     * @throws Exception
     */
    public function get(string $section, string $property)
    {
        if (empty($this->configurations)) {
            $this->init();
        }

        if (array_key_exists($section, $this->configurations) && isset($this->configurations[$section][$property])) {
            return $this->configurations[$section][$property];
        } else {
            throw new Exception("Property {$property} of {$section} is not defined" . print_r($this->configurations, true));
        }
    }

    /**
     *
     * @throws Exception
     */
    protected final function init()
    {
        if (!is_file(self::$PATH)) {
            throw new Exception("Configuration file cannot be found at " . self::$PATH);
        }
        $this->configurations = json_decode(file_get_contents(self::$PATH), true);
    }
}
<?php

namespace OrangeHRM\DevOps\usageStats;

use OrangeHRM\DevOps\utility\InstanceDatabaseAccessUtility;
use OrangeHRM\DevOps\utility\InstanceLicenseInfoRetrievalUtility;
use Exception;

abstract class AbstractDiagnosticsCheck implements DataAnalyzerInterface
{

    protected AnalyticDataParameterCollection $params;
    protected array $errorProperties = [];
    protected InstanceDatabaseAccessUtility $instanceDatabaseAccessUtility;
    protected InstanceLicenseInfoRetrievalUtility $instanceLicenseInfoRetrievalUtility;
    protected array $moduleDisplayNames = [
        'admin' => 'Admin',
        'pim' => 'PIM',
        'leave' => 'Leave',
        'recruitment' => 'Recruitment',
        'time' => 'Time',
        'performance' => 'Performance',
        'training' => 'Training',
        'onboarding' => 'On-boarding',
        'LDAP' => 'LDAP',
        'orgChart' => 'Organization Chart',
        'discipline' => 'Discipline',
    ];

    public function __construct(AnalyticDataParameterCollection $params)
    {
        $this->params = $params;
    }

    /**
     * @throws Exception
     */
    public function getInstanceDatabaseAccessUtility(): InstanceDatabaseAccessUtility
    {
        if (!isset($this->instanceDatabaseAccessUtility)) {
            throw new Exception('Instance DB Access Utility is not set');
        }
        return $this->instanceDatabaseAccessUtility;
    }

    public function setInstanceDatabaseAccessUtility(InstanceDatabaseAccessUtility $instanceDatabaseAccessUtility)
    {
        $this->instanceDatabaseAccessUtility = $instanceDatabaseAccessUtility;
    }

    /**
     *
     * @throws Exception
     */
    public function getInstanceLicenseInfoRetrievalUtility(): InstanceLicenseInfoRetrievalUtility
    {
        if (!isset($this->instanceLicenseInfoRetrievalUtility)) {
            throw new Exception('Instance License Info Retrieval Utility is not set');
        }
        return $this->instanceLicenseInfoRetrievalUtility;
    }

    public function setInstanceLicenseInfoRetrievalUtility(InstanceLicenseInfoRetrievalUtility $instanceLicenseInfoRetrievalUtility)
    {
        $this->instanceLicenseInfoRetrievalUtility = $instanceLicenseInfoRetrievalUtility;
    }

}
<?php

namespace OrangeHRM\DevOps\usageStats;

use OrangeHRM\DevOps\usageStats\LastLoginInformation;
use OrangeHRM\DevOps\usageStats\NoOfCurrentActiveEmployees;
use OrangeHRM\DevOps\usageStats\NoOfCurrentActiveUsers;
use DateTime;
use Exception;

class ActiveUserCountAnalyzer extends DataAnalyzer
{

    protected array $omittedUsers = ['_ohrmSysAdmin_', 'ohrm_api_user', 'ohrm_upgrader_user'];

    public function getResult(): array
    {
        $resultArray = [];

        $activeUserCountUniqueArray = [
            '13-weeks' => $this->getActiveUserCountUnique(13),
            '26-weeks' => $this->getActiveUserCountUnique(26),
            '52-weeks' => $this->getActiveUserCountUnique(52),
        ];

        $totalLoginCountArray = [
            '13-weeks' => $this->getTotalLoginCount(13),
            '26-weeks' => $this->getTotalLoginCount(26),
            '52-weeks' => $this->getTotalLoginCount(52)
        ];

        $resultArray['no-of-current-active-employees'] = $this->fetchDataPointValue(new NoOfCurrentActiveEmployees());
        $resultArray['no-of-current-active-users'] = $this->fetchDataPointValue(new NoOfCurrentActiveUsers());
        $resultArray['last-login-date'] = $this->fetchDataPointValue(new LastLoginInformation())['timestamp'];

        $currentActiveUsers = (int)$resultArray['no-of-current-active-users'][0];
        if ($currentActiveUsers > 0) {
            $uniqueLoginPercentageArray = [
                '13-weeks' => round(((int)$activeUserCountUniqueArray['13-weeks'] / $currentActiveUsers) * 100, 2),
                '26-weeks' => round(((int)$activeUserCountUniqueArray['26-weeks'] / $currentActiveUsers) * 100, 2),
                '52-weeks' => round(((int)$activeUserCountUniqueArray['52-weeks'] / $currentActiveUsers) * 100, 2)
            ];
        } else {
            $uniqueLoginPercentageArray = [
                '13-weeks' => 'N/A',
                '26-weeks' => 'N/A',
                '52-weeks' => 'N/A'
            ];
        }
        $resultArray['unique-login-percentage'] = $uniqueLoginPercentageArray;
        $resultArray['total-login-count'] = $totalLoginCountArray;
        $resultArray['unique-login-count'] = $activeUserCountUniqueArray;
        $resultArray['Active-user-count-unique'] = $activeUserCountUniqueArray;
        $resultArray['Active-user-count-2'] = [
            '13-weeks' => $this->getActiveUserCount(13),
            '26-weeks' => $this->getActiveUserCount(26),
            '52-weeks' => $this->getActiveUserCount(52),
        ];
        $resultArray['Active-mobile-app-user-count'] = [
            '13-weeks' => $this->getMobileAppActiveUserCountUnique(13),
            '26-weeks' => $this->getMobileAppActiveUserCountUnique(26),
            '52-weeks' => $this->getMobileAppActiveUserCountUnique(52),
        ];

        $resultArray['total-terminated-employees'] = $this->getTerminatedEmployeeCount();
        $totalEmployeeCount = $this->getTotalEmployeeCount();
        $resultArray['total-employee-count'] = $totalEmployeeCount;
        $resultArray['no-of-unique-emps-mobile'] = $this->getTotalUniqueMobileAppUserCount(52);
        $resultArray['unique-emps-mobile-percentage'] = (is_numeric($resultArray['no-of-unique-emps-mobile']) && $totalEmployeeCount > 0) ?
            round((($resultArray['no-of-unique-emps-mobile'] / $totalEmployeeCount) * 100), 2) : '0';

        return $resultArray;
    }

    /**
     * @throws Exception
     */
    public function getActiveUserCount($noOfWeeks): string
    {
        if ($this->getInstanceDatabaseAccessUtility()->tableExists('ohrm_login')) {
            $triggeredDate = (date("Y-m-d G:i:s"));
            $d = strtotime("-" . $noOfWeeks . "Weeks");
            $beforeDay = (date("Y-m-d G:i:s", $d));

            $query = "SELECT 
                  COUNT(ohrm_login.user_id)
                  FROM ohrm_login LEFT OUTER JOIN ohrm_user 
                  ON ohrm_login.user_id = ohrm_user.id LEFT OUTER JOIN hs_hr_employee
                  ON ohrm_user.emp_number = hs_hr_employee.emp_number 
                  WHERE hs_hr_employee.termination_id IS NULL 
                  AND ohrm_login.login_time BETWEEN ? AND ? 
                  GROUP BY ohrm_login.user_id;";


            $result = $this->getInstanceDatabaseAccessUtility()->getRowCount($query, [$beforeDay, $triggeredDate]);
            return number_format($result);
        } else {
            return 'N/A';
        }
    }

    /**
     * @throws Exception
     */
    public function getActiveUserCountUnique($noOfWeeks): string
    {
        if ($this->getInstanceDatabaseAccessUtility()->tableExists('ohrm_login')) {
            $triggeredDate = (date("Y-m-d G:i:s"));
            $d = strtotime("-" . $noOfWeeks . "Weeks");
            $beforeDay = (date("Y-m-d G:i:s", $d));

            $query = "
SELECT 
       COUNT(DISTINCT u.user_name) 
FROM `ohrm_login` AS l
    LEFT JOIN `ohrm_user` AS u ON l.user_id = u.id 
WHERE (u.`user_name` NOT IN('_ohrmSysAdmin_', 'ohrm_api_user', 'ohrm_upgrader_user')) 
  AND (l.`login_time` BETWEEN ? AND ?);";

            $result = $this->getInstanceDatabaseAccessUtility()->fetchColumn($query, [$beforeDay, $triggeredDate]);
            return number_format($result);
        } else {
            return 'N/A';
        }
    }

    /**
     * @throws Exception
     */
    public function getMobileAppActiveUserCountUnique($noOfWeeks)
    {

        $triggeredDate = (date("Y-m-d G:i:s"));
        $timestamp = strtotime("-" . $noOfWeeks . "Weeks");
        $beforeDay = (date("Y-m-d G:i:s", $timestamp));

        if ($this->getInstanceDatabaseAccessUtility()->tableExists('ohrm_external_navigation_log')) {

            $query = "SELECT COUNT(DISTINCT user)  FROM `ohrm_external_navigation_log` WHERE (`time` BETWEEN ? AND ?) AND `app`= ?;";

            return $this->getInstanceDatabaseAccessUtility()->fetchColumn($query, [$beforeDay, $triggeredDate, 'mobile-orangehrm']);
        } elseif ($this->getInstanceDatabaseAccessUtility()->tableExists('ohrm_external_usage_log')) {
            $query = "SELECT COUNT(DISTINCT eul.user) 
FROM ohrm_external_usage_log AS eul 
    LEFT JOIN ohrm_external_app AS ea ON eul.app_id = ea.id 
WHERE (eul.time BETWEEN ? AND ?) AND ea.client_id = ?
;";
            return $this->getInstanceDatabaseAccessUtility()->fetchColumn($query, [$beforeDay, $triggeredDate, 'mobile_rest_api_client']);
        } else {
            return 'N/A';
        }
    }

    //Format data for represent in google charts
    public function convertToMultiArray($loginTrendDic): array
    {
        $dataForGraph = [];
        foreach ($loginTrendDic as $key => $val) {
            $dateTime = new DateTime();
            $dateTime->setISODate(substr((string)$key, 0, 4), substr((string)$key, 4, 6));
            $firstDayOfWeek = $dateTime->format('Y-m-d');
            $dateTime = DateTime::createFromFormat('Y-m-d', (string)$firstDayOfWeek);
            $dateTime->modify('next sunday');
            $dateString = "Date(" . $dateTime->format('Y') . "," . ((int)($dateTime->format('m')) - 1) . "," . $dateTime->format('d') . ")";
            $dataRow = ["c" => [["v" => $dateString], ["v" => (int)$val]]];
            $dataForGraph[] = $dataRow;
        }

        return $dataForGraph;
    }

    /**
     * @throws Exception
     */
    public function getLoginTrend($noOfWeeks): ?array
    {
        if ($this->getInstanceDatabaseAccessUtility()->tableExists('ohrm_login')) {
            $triggeredDate = (date("Y-m-d"));
            $d = strtotime("-" . $noOfWeeks . "Weeks");
            $beforeDay = (date("Y-m-d", $d));

            $md = strtotime("Last Monday", $d);
            $beforeMonday = (date("Y-m-d", $md));

            $startTime = strtotime($beforeMonday);
            $endTime = strtotime("Last Monday");
            $weeks = [];

            while ($startTime < $endTime) {
                $weeks[] = (int)(date('Y', $startTime) . date('W', $startTime));
                $startTime += strtotime('+1 week', 0);

            }
            $query = "SELECT
                  DATE_FORMAT(ohrm_login.login_time, '%x%v'),
                  COUNT(ohrm_login.user_id)
                  FROM ohrm_login LEFT OUTER JOIN ohrm_user
                  ON ohrm_login.user_id = ohrm_user.id LEFT OUTER JOIN hs_hr_employee
                  ON ohrm_user.emp_number = hs_hr_employee.emp_number
                  WHERE hs_hr_employee.termination_id IS NULL
                  AND ohrm_user.user_name IN (?, ?, ?) 
                  AND DATE(ohrm_login.login_time) Between ? AND ?
                  GROUP BY DATE_FORMAT(ohrm_login.login_time, '%x%v')";

            $result = $this->getInstanceDatabaseAccessUtility()->fetchKeyValuePairs($query,
                array_merge($this->omittedUsers, [$beforeDay, $triggeredDate]));

            $arrayDiff = array_diff($weeks, array_keys($result));
            $filledArea = array_fill_keys($arrayDiff, 0);
            $finalArray = $filledArea + $result;
            ksort($finalArray);

            return $finalArray;
        } else {
            return [];
        }

    }

    public function getTerminatedEmployeeCount()
    {
        if ($this->getInstanceDatabaseAccessUtility()->tableExists('hs_hr_employee')) {
            $query = "SELECT count(emp_number) 
                  FROM `hs_hr_employee` 
                  WHERE `termination_id` IS NOT NULL;";

            return $this->getInstanceDatabaseAccessUtility()->fetchColumn($query);
        } else {
            return 'N/A';
        }
    }

    public function getTotalEmployeeCount()
    {
        try {
            $activeEmpCount = $this->fetchDataPointValue(new NoOfCurrentActiveEmployees())[0];
            $terminatedEmpCount = $this->getTerminatedEmployeeCount();
            if (is_numeric($activeEmpCount) && is_numeric($terminatedEmpCount)) {
                return (int)$activeEmpCount + (int)$terminatedEmpCount;
            }

            return 'N/A';
        } catch (Exception $ex) {
            return 'N/A';
        }
    }

    /**
     * @throws Exception
     */
    public function getTotalLoginCount($noOfWeeks): string
    {
        if ($this->getInstanceDatabaseAccessUtility()->tableExists('ohrm_login')) {
            $triggeredDate = (date("Y-m-d G:i:s"));
            $d = strtotime("-" . $noOfWeeks . "Weeks");
            $beforeDay = (date("Y-m-d G:i:s", $d));

            $query = "
SELECT COUNT(*) 
FROM `ohrm_login` AS l 
    LEFT JOIN `ohrm_user` AS u ON l.user_id = u.id 
WHERE (u.`user_name` NOT IN('_ohrmSysAdmin_', 'ohrm_api_user', 'ohrm_upgrader_user')) 
  AND (l.`login_time` BETWEEN ? AND ? );";
            $result = $this->getInstanceDatabaseAccessUtility()->fetchColumn($query, [$beforeDay, $triggeredDate]);
            return number_format($result);
        } else {
            return 'N/A';
        }
    }

    /**
     * @throws Exception
     */
    public function getTotalUniqueMobileAppUserCount($noOfWeeks): string
    {
        if (
            $this->getInstanceDatabaseAccessUtility()->tableExists('ohrm_external_usage_log') &&
            $this->getInstanceDatabaseAccessUtility()->tableExists('ohrm_external_app')
        ) {
            $triggeredDate = (date("Y-m-d G:i:s"));
            $d = strtotime("-" . $noOfWeeks . "Weeks");
            $beforeDay = (date("Y-m-d G:i:s", $d));
            $query = "
SELECT COUNT(DISTINCT user) 
FROM ohrm_external_usage_log eul 
    LEFT JOIN ohrm_external_app ea ON eul.app_id = ea.id 
WHERE ea.name = 'Enterprise Mobile' AND eul.time between ? AND ? ;";
            $result = $this->getInstanceDatabaseAccessUtility()->fetchColumn($query, [$beforeDay, $triggeredDate]);
            return number_format($result);
        } else {
            return 'N/A';
        }
    }

}
<?php

namespace OrangeHRM\DevOps\usageStats;

class AnalyticDataParameterCollection
{

    protected string $installationPath;
    protected string $domain;
    protected int $backtrack;
    protected string $vhostsConfigDirectory;

    public function getInstallationPath(): string
    {
        return $this->installationPath;
    }

    public function getDomain(): ?string
    {
        return $this->domain;
    }

    public function getVhostsConfigDirectory(): string
    {
        return $this->vhostsConfigDirectory;
    }

    public function setInstallationPath($installationPath)
    {
        $this->installationPath = $installationPath;
    }

    public function setDomain($domain)
    {
        $this->domain = $domain;
    }

    public function getBacktrack(): int
    {
        return $this->backtrack;
    }

    public function setBacktrack(int $backtrack): void
    {
        $this->backtrack = $backtrack;
    }

    public function setVhostsConfigDirectory($vhostsConfigDirectory)
    {
        $this->vhostsConfigDirectory = $vhostsConfigDirectory;
    }

}
<?php

namespace OrangeHRM\DevOps\usageStats;

use Exception;
use stdClass;

class ApplicationConfigurationsCheck extends AbstractDiagnosticsCheck
{

    /**
     * @throws Exception
     */
    public function getResult(): stdClass
    {

        $result = new stdClass();

        $isDataEncryptionEnabled = $this->isDataEncryptionEnabled();

        $result->isDataEncryptionEnabled = ($isDataEncryptionEnabled) ? 'Yes' : 'No';
        $result->isDataEncryptionKeyCorrect = ($isDataEncryptionEnabled) ? ($this->isDataEncryptionKeyCorrect() ? 'Yes' : 'No') : 'N/A';
        $result->reportsEngineEdition = $this->reportsEngineEdition();
        $result->emailConfigurationDetails = $this->fetchEmailConfigurationDetails();

        $result->errorProperties = $this->errorProperties;

        return $result;
    }

    final protected function isDataEncryptionEnabled(): bool
    {
        $isDataEncryptionEnabled = file_exists($this->params->getInstallationPath() . '/lib/confs/cryptokeys/key.ohrm');

        if (!$isDataEncryptionEnabled) {
            $this->errorProperties[] = 'isDataEncryptionEnabled';
        }

        return $isDataEncryptionEnabled;
    }

    final protected function isDataEncryptionKeyCorrect(): bool
    {
        if (!$this->isDataEncryptionEnabled()) {
            return false;
            // TODO: Implement this check; It's skipped because the system won't function
        }

        return true;
    }

    /**
     * @throws Exception
     */
    final protected function reportsEngineEdition(): string
    {
        $configTable = $this->getInstanceDatabaseAccessUtility()->tableExists('ohrm_config') ? 'ohrm_config' : 'hs_hr_config';

        $query = "SELECT `value` FROM {$configTable} WHERE `property` = ?";
        $useNewReportsEngine = $this->getInstanceDatabaseAccessUtility()->fetchColumn($query, ['report.use_new_engine']);

        return ($useNewReportsEngine === 'Yes') ? 'New' : 'Old';
    }

    /**
     * @throws Exception
     */
    final protected function fetchEmailConfigurationDetails(): string
    {
        if ($this->getInstanceDatabaseAccessUtility()->tableExists('ohrm_email_configuration')) {
            $query = "
SELECT 
  `mail_type`,
  `sent_as`,
  `sender_name`,
  `smtp_host`,
  `smtp_port`,
  `smtp_username`,
  `smtp_auth_type`,
  `smtp_security_type`
FROM `ohrm_email_configuration`;
";
            $resultSet = $this->getInstanceDatabaseAccessUtility()->fetchAll($query);

            if (empty($resultSet)) {
                $this->errorProperties[] = 'emailConfigurationStatus';
                return 'Email configuration is not set';
            }


            list($config) = $resultSet;

            if ($config['mail_type'] === 'smtp') {
                $senderName = empty($config['sender_name']) ? '' : "{$config['sender_name']} ";
                return "SMTP (
    Host:          {$config['smtp_host']};
    Port:          {$config['smtp_port']};
    Sent As:       {$config['sent_as']};
    Sender Name:   {$senderName};
    Auth Type:     {$config['smtp_auth_type']};
    Security Type: {$config['smtp_security_type']};
)";
            } elseif ($config['mail_type'] === 'sendmail') {
                return 'Sendmail';
            } else {
                return 'Email type is incorrect';
            }
        } else {
            return "Couldn't find the email configurations, possibly since the settings are secured with data encryption.";
        }
    }
}
<?php

namespace OrangeHRM\DevOps\usageStats;

use Exception;
use OrangeHRM\DevOps\utility\ValueFormatter;
use OrangeHRM\DevOps\utility\TableDescriptorUtility;
use stdClass;

class AttachmentUsageAnalyticsCheck extends AbstractDiagnosticsCheck
{

    /**
     * @throws Exception
     */
    public function getResult(): stdClass
    {
        $result = new stdClass;
        $dataArray = $this->getData();

        $result->attachmentUsageAnalytics = $dataArray;
        return $result;
    }

    /**
     * @throws Exception
     */
    public function getData(): array
    {
        $totalSize = 0;
        $dataArray = [];
        $tables = $this->getInstanceDatabaseAccessUtility()->fetchAll("SHOW TABLES;");

        $tableDescriptor = new TableDescriptorUtility();

        foreach ($tables as $table) {
            $tableName = array_values($table)[0];
            $defs = $this->getInstanceDatabaseAccessUtility()->fetchAll("DESC {$tableName};");

            $sizeFields = [];
            foreach ($defs as $def) {
                if (preg_match('/blob$/', $def['Type'])) {
                    $sizeFields[] = $def['Field'];
                }
            }

            if (count($sizeFields) > 0) {

                $count = $this->getInstanceDatabaseAccessUtility()->fetchColumn("SELECT COUNT(*) FROM {$tableName};");
                if ($count > 0) {
                    $totalBlobSize = 0;
                    foreach ($sizeFields as $sizeField) {
                        $size = $this->getInstanceDatabaseAccessUtility()->fetchColumn("SELECT SUM(IF({$sizeField} IS NULL, 0, LENGTH({$sizeField}))) FROM {$tableName};");
                        $totalBlobSize += $size;
                    }

                    $totalSize += $totalBlobSize;

                    $tableName = $tableDescriptor->getTableDescription($tableName);

                    $dataArray[] = [
                        $tableName,
                        $count,
                        $totalBlobSize,
                    ];
                }
            }
        }

        usort($dataArray, "self::cmp");

        foreach ($dataArray as &$tArray) {
            if ($totalSize === 0) {
                $tArray[] = 0;
            } else {
                $percentage = number_format(($tArray[2] / $totalSize) * 100, 2);
                $formatter = new ValueFormatter();
                $tArray[2] = $formatter->sizeToHumanReadableFormat($tArray[2]);
                $tArray[3] = $percentage;
            }

        }
        return $dataArray;
    }

    public static function cmp($a, $b): int
    {
        if ($a[2] == $b[2]) {
            return 0;
        }
        return ($a[2] > $b[2]) ? -1 : 1;
    }

}
<?php

namespace OrangeHRM\DevOps\usageStats;

use OrangeHRM\DevOps\helper\FileOperationsHelper;
use Exception;
use stdClass;
use Symfony\Component\Yaml\Yaml;

class BuildAndInstallationInformationCheck extends AbstractDiagnosticsCheck
{
    protected array $permissionGroups = ['Owner', 'Group', 'Other'];

    /**
     * @throws Exception
     */
    public function getResult(): stdClass
    {

        $fileOperationsHelper = new FileOperationsHelper();

        $result = new stdClass;

        $result->organizationName = $this->fetchOrganizationName();
        $result->uuid = $this->fetchUuid();
        $result->url = 'https://' . $this->params->getDomain();
        $result->server = $this->fetchServerIdentifier();
        $result->installationDirectory = $this->params->getInstallationPath();
        $result->version = $this->fetchVersion();
        $result->timezone = date('e (T)');
        $result->hostedDate = $this->fetchHostedDate();
        $result->isBuildEncrypted = $this->isBuildEncrypted() ? 'Yes' : 'No';
        $result->vHostFilename = $fileOperationsHelper->findVhostConfigurationFile($this->params->getDomain(), $this->params->getVhostsConfigDirectory());
        $result->isDeployedWithMySQLRootAccount = $this->isDeployedWithMySQLRootAccount() ? 'Yes' : 'No';
        $result->isRabbitMQConfigured = $this->isRabbitMQConfigured() ? 'Yes' : 'No';
        $result->dbSize = $this->fetchDbSize();
        $result->dbDirectorySize = $this->fetDbDirectorySize();
        $result->phpVersion = phpversion();
        $result->httpdVersion = $this->fetchHttpdVersion();
        $result->mysqlVersion = $this->fetchMySQLVersion();
        $result->directoryPermissions = $this->fetchPermissions('d', array(
            'lib/confs' => 775,
            'symfony/cache/' => 775,
            'symfony/config/' => 775,
            'symfony/web/' => 775,
        ));

        $result->filePermissions = $this->fetchPermissions('-', array(
            'lib/confs/cryptokeys/key.ohrm' => 660,
            'symfony/config/databases.yml' => 775,
            'symfony/web/.htaccess' => 775,
        ));

        $result->errorProperties = $this->errorProperties;

        return $result;
    }

    protected final function fetchVersion(): string
    {
        $appConfig = Yaml::parseFile($this->params->getInstallationPath() . '/symfony/apps/orangehrm/config/app.yml', Yaml::PARSE_OBJECT);
        return $appConfig['all']['version'];
    }

    /**
     *
     * @throws Exception
     */
    public final function fetchOrganizationName(): string
    {
        $query = "SELECT TRIM(`name`) FROM `ohrm_organization_gen_info` LIMIT 1;";
        $name = $this->getInstanceDatabaseAccessUtility()->fetchColumn($query);
        if (empty($name)) {
            $domainComponents = explode('.', $this->params->getDomain());
            return array_shift($domainComponents);
        } else {
            return $name;
        }
    }

    /**
     * @throws Exception
     */
    protected final function fetchUuid(): string
    {
        $configTable = $this->getInstanceDatabaseAccessUtility()->tableExists('ohrm_config') ? 'ohrm_config' : 'hs_hr_config';
        $query = "SELECT `value` FROM `{$configTable}` WHERE `property` = 'beacon.uuid';";
        return $this->getInstanceDatabaseAccessUtility()->fetchColumn($query);
    }

    protected final function fetchServerIdentifier(): string
    {
        return trim(gethostname());
    }

    protected final function isBuildEncrypted(): bool
    {

        $fileContent = file_get_contents($this->params->getInstallationPath() . '/symfony/plugins/orangehrmCorePlugin/lib/service/ConfigService.php');
        $isBuildEncrypted = (preg_match('/getConfigDao\(\)/', $fileContent) !== 1);

        if (!$isBuildEncrypted) {
            $this->errorProperties[] = 'isBuildEncrypted';
        }

        return $isBuildEncrypted;
    }

    protected final function isDeployedWithMySQLRootAccount(): bool
    {
        $dbConfig = Yaml::parseFile($this->params->getInstallationPath() . '/symfony/config/databases.yml', Yaml::PARSE_OBJECT);
        $dbUser = trim($dbConfig['all']['doctrine']['param']['username']);

        if ($dbUser === 'root') {
            $this->errorProperties[] = 'isDeployedWithMySQLRootAccount';
            return true;
        }

        return false;
    }

    /**
     * @throws Exception
     */
    protected final function isRabbitMQConfigured(): bool
    {
        $query = "SELECT IF(COUNT(*) > 0, 'Y', 'N') FROM ohrm_secure_configuration WHERE configuration_name = ?";
        $result = $this->getInstanceDatabaseAccessUtility()->fetchColumn($query, ['rabbitmq_config']);

        if ($result !== 'Y') {
            $this->errorProperties[] = 'isRabbitMQConfigured';
            return false;
        }

        return true;
    }

    protected function fetchDbSize(): string
    {
        $check = new DatabaseSize();
        $check->setInstanceDatabaseAccessUtility($this->getInstanceDatabaseAccessUtility());
        return $check->getValue();
    }

    /**
     * @throws Exception
     */
    protected function fetDbDirectorySize(): ?string
    {
        $check = new DatabaseDiskUtilization();
        $check->setInstanceDatabaseAccessUtility($this->getInstanceDatabaseAccessUtility());
        return $check->getValue();
    }

    /**
     * @throws Exception
     */
    protected final function fetchHttpdVersion(): string
    {
        $output = [];
        $returnVar = null;
        exec("{$this->determineHttpdUtility()} -v | grep -i server\ version | cut -d':' -f2 | sed 's/\s//g'", $output, $returnVar);

        return ($returnVar === 0) ? implode('', $output) : 'Undetermined';
    }

    /**
     * @throws Exception
     */
    protected final function fetchMySQLVersion(): string
    {
        $query = "SHOW VARIABLES LIKE 'version';";
        $resultSet = $this->getInstanceDatabaseAccessUtility()->fetchAll($query);

        return count($resultSet) > 0 ? $resultSet[0]['Value'] : 'Undetermined';
    }

    protected final function fetchPermissions(string $type, array $nodes): array
    {
        $permissions = array();

        foreach ($nodes as $node => $expectedPermissions) {

            $path = $this->params->getInstallationPath() . '/' . $node;

            if (file_exists($path)) {
                $actualPermissions = substr(sprintf('%o', fileperms($path)), -3);
            } else {
                $actualPermissions = 0;
            }

            try {
                if (file_exists($path)) {
                    $ownerInfo = posix_getpwuid(fileowner($path));
                    $groupInfo = posix_getpwuid(filegroup($path));
                    $owner = $ownerInfo['name'];
                    $group = $groupInfo['name'];
                } else {
                    $owner = '-';
                    $group = '-';
                }
            } catch (Exception $e) {
                $owner = '-';
                $group = '-';
            }
            $expectedPermissionsString = $this->convertPermissionsToHumanReadableString($type, $expectedPermissions);
            $actualPermissionsString = $this->convertPermissionsToHumanReadableString($type, $actualPermissions);

            $identifier = ($type === 'd') ? 'directory' : 'file';

            $comments = $this->generatePermissionComparisonComment($expectedPermissionsString, $actualPermissionsString);

            if (!empty($comments)) {
                $this->errorProperties[] = [
                    'bindParam' => ($type === 'd') ? 'directoryPermissions' : 'filePermissions',
                    'node' => $node,
                ];
            }

            $permissions[] = [
                $identifier => $node,
                'owner' => $owner,
                'group' => $group,
                'expectedPermissions' => $expectedPermissionsString,
                'actualPermissions' => $actualPermissionsString,
                'comments' => $comments,
            ];
        }

        return $permissions;
    }

    protected final function convertPermissionsToHumanReadableString(string $prefix, int $permissions): string
    {
        return $prefix . preg_replace([
                '/0/',
                '/1/',
                '/2/',
                '/3/',
                '/4/',
                '/5/',
                '/6/',
                '/7/',
            ], [
                '---',
                '--x',
                '-w-',
                '-wx',
                'r--',
                'r-x',
                'rw-',
                'rwx',
            ], "{$permissions}");
    }

    protected final function generatePermissionComparisonComment(string $expectedPermissionsString, string $actualPermissionsString): string
    {
        if ($actualPermissionsString === '----') {
            return "File doesn't exist or not readable";
        }

        if ($expectedPermissionsString === $actualPermissionsString) {
            return '';
        }

        $message = '';

        $expectedPermissionsPortions = str_split(substr($expectedPermissionsString, -9), 3);
        $actualPermissionsPortions = str_split(substr($actualPermissionsString, -9), 3);

        foreach ($expectedPermissionsPortions as $index => $expectedPermissions) {
            $permissionGroup = $this->permissionGroups[$index];

            if ($expectedPermissions !== $actualPermissionsPortions[$index]) {
                $message .= "{$permissionGroup} permissions should be {$expectedPermissions}; ";
            }
        }


        return $message;
    }

    protected final function fetchHostedDate(): string
    {
        return date('Y-m-d', filemtime($this->params->getInstallationPath() . '/symfony/apps/orangehrm/config/security.yml'));
    }

    /**
     * @throws Exception
     */
    protected function determineHttpdUtility(): string
    {
        if (is_executable('/usr/sbin/httpd')) {
            return '/usr/sbin/httpd';
        }

        if (is_executable('/usr/sbin/apache2')) {
            return '/usr/sbin/apache2';
        }

        throw new Exception("Cannot determine httpd utility");
    }

}
<?php

namespace OrangeHRM\DevOps\usageStats;

use stdClass;

class ClosureCheck extends AbstractDiagnosticsCheck
{

    public function getResult(): stdClass
    {
        return new stdClass();
    }

}
<?php

namespace OrangeHRM\DevOps\usageStats;

use OrangeHRM\DevOps\utility\InstanceDatabaseAccessUtility;
use OrangeHRM\DevOps\utility\InstanceLicenseInfoRetrievalUtility;
use Exception;
use OrangeHRM\DevOps\usageStats\DataPoint;


abstract class DataAnalyzer implements DataAnalyzerInterface
{
    protected AnalyticDataParameterCollection $params;
    protected array $errorProperties = [];
    protected InstanceDatabaseAccessUtility $instanceDatabaseAccessUtility;
    protected InstanceLicenseInfoRetrievalUtility $instanceLicenseInfoRetrievalUtility;
    protected array $moduleDisplayNames = [
        'admin' => 'Admin',
        'pim' => 'PIM',
        'leave' => 'Leave',
        'recruitment' => 'Recruitment',
        'time' => 'Time',
        'performance' => 'Performance',
        'training' => 'Training',
        'onboarding' => 'On-boarding',
        'LDAP' => 'LDAP',
        'orgChart' => 'Organization Chart',
        'discipline' => 'Discipline',
    ];

    public function __construct(AnalyticDataParameterCollection $params)
    {
        $this->params = $params;
    }

    /**
     * @throws Exception
     */
    function getInstanceDatabaseAccessUtility(): InstanceDatabaseAccessUtility
    {
        if (!isset($this->instanceDatabaseAccessUtility)) {
            throw new Exception('Instance DB Access Utility is not set');
        }
        return $this->instanceDatabaseAccessUtility;
    }

    function setInstanceDatabaseAccessUtility(InstanceDatabaseAccessUtility $instanceDatabaseAccessUtility)
    {
        $this->instanceDatabaseAccessUtility = $instanceDatabaseAccessUtility;
    }

    /**
     * @throws Exception
     */
    public function getInstanceLicenseInfoRetrievalUtility(): InstanceLicenseInfoRetrievalUtility
    {
        if (!isset($this->instanceLicenseInfoRetrievalUtility)) {
            throw new Exception('Instance License Info Retrieval Utility is not set');
        }
        return $this->instanceLicenseInfoRetrievalUtility;
    }

    public function setInstanceLicenseInfoRetrievalUtility(InstanceLicenseInfoRetrievalUtility $instanceLicenseInfoRetrievalUtility)
    {
        $this->instanceLicenseInfoRetrievalUtility = $instanceLicenseInfoRetrievalUtility;
    }

    /**
     * @throws Exception
     */
    protected function fetchDataPointValue(DataPoint $dataPoint, array $params = [])
    {

        $dataPoint->setInstanceDatabaseAccessUtility($this->getInstanceDatabaseAccessUtility());
        return $dataPoint->getValue();
    }

    protected function createPercentageArray(array $dataArray, ActiveUserCountAnalyzer $activeUserCountAnalyzer): array
    {
        try {
            $totalEmpCount = $activeUserCountAnalyzer->getTotalEmployeeCount();
            if (is_numeric($totalEmpCount) && $totalEmpCount > 0) {
                return [
                    '13-weeks' => is_numeric($dataArray['13-weeks']) ? round((($dataArray['13-weeks'] / $totalEmpCount) * 100), 2) : '0',
                    '26-weeks' => is_numeric($dataArray['26-weeks']) ? round((($dataArray['26-weeks'] / $totalEmpCount) * 100), 2) : '0',
                    '52-weeks' => is_numeric($dataArray['52-weeks']) ? round((($dataArray['52-weeks'] / $totalEmpCount) * 100), 2) : '0'
                ];
            }
        } catch (Exception $ex) {
        }
        return [
            '13-weeks' => '0',
            '26-weeks' => '0',
            '52-weeks' => '0'
        ];
    }

}
<?php

namespace OrangeHRM\DevOps\usageStats;

use OrangeHRM\DevOps\utility\InstanceLicenseInfoRetrievalUtility;
use OrangeHRM\DevOps\utility\InstanceDatabaseAccessUtility;

interface DataAnalyzerInterface
{

    public function __construct(AnalyticDataParameterCollection $params);

    public function getInstanceDatabaseAccessUtility();

    public function setInstanceDatabaseAccessUtility(InstanceDatabaseAccessUtility $instanceDatabaseAccessUtility);

    public function getInstanceLicenseInfoRetrievalUtility();

    public function setInstanceLicenseInfoRetrievalUtility(InstanceLicenseInfoRetrievalUtility $instanceLicenseInfoRetrievalUtility);


}
<?php


namespace OrangeHRM\DevOps\usageStats;


interface DataPoint
{
    public function getValue();
}
<?php

namespace OrangeHRM\DevOps\usageStats;

class DatabaseDiskUtilization extends DatabaseOriginatedDataPoint
{

    public function getValue()
    {
        $dbName = $this->getInstanceDatabaseAccessUtility()->fetchColumn('SELECT DATABASE();');
        $dataDir = $this->getInstanceDatabaseAccessUtility()->fetchColumn('SELECT @@datadir;');

        $dbDir = $dataDir . DIRECTORY_SEPARATOR . $dbName;

        if (!is_dir($dbDir)) {
            return 'Undetermined';
        }

        $command = "du -s {$dbDir}";
        $returnVar = null;
        $output = [];
        exec($command, $output, $returnVar);

        if ($returnVar === 0) {
            $dbSize = (float)trim(str_replace($dataDir . DIRECTORY_SEPARATOR . $dbName, '', implode('', $output)));
            $dbSize /= 1024;
            $unit = 'MB';
            if ($dbSize > 1024) {
                $dbSize /= 1024;
                $unit = 'GB';
            }

            return round($dbSize, 2) . ' ' . $unit;
        }

        return 'Undetermined';

    }
}
<?php


namespace OrangeHRM\DevOps\usageStats;

use Exception;
use OrangeHRM\DevOps\utility\TimePeriodValueUtility;
use OrangeHRM\DevOps\utility\InstanceDatabaseAccessUtility;

abstract class DatabaseOriginatedDataPoint implements DataPoint
{
    const SCALAR = 'scalar';
    const H_VECTOR = 'h-vector';
    const V_VECTOR = 'v-vector';
    const MATRIX = 'matrix';
    const KEY_VALUE_PAIR = 'kvp';

    protected string $table = '';
    protected array $fields = ['1'];
    protected array $filters = [];
    protected array $params = [];
    protected array $orderBy = [];
    protected int $offset = 0;
    protected ?int $limit = null;

    protected InstanceDatabaseAccessUtility $instanceDatabaseAccessUtility;
    protected ?array $value = null;
    protected string $type = self::SCALAR;
    protected TimePeriodValueUtility $timePeriodValueUtility;

    public function getTimePeriodValueUtility(): TimePeriodValueUtility
    {
        return $this->timePeriodValueUtility;
    }

    public function setTimePeriodValueUtility(TimePeriodValueUtility $timePeriodValueUtility)
    {
        $this->timePeriodValueUtility = $timePeriodValueUtility;
    }

    public function getInstanceDatabaseAccessUtility(): InstanceDatabaseAccessUtility
    {
        return $this->instanceDatabaseAccessUtility;
    }

    public function setInstanceDatabaseAccessUtility(InstanceDatabaseAccessUtility $instanceDatabaseAccessUtility)
    {
        $this->instanceDatabaseAccessUtility = $instanceDatabaseAccessUtility;
    }

    public function setParams(array $params)
    {
        $this->params = $params;
    }

    /**
     * @throws Exception
     */
    public function getValue()
    {
        $this->read();
        return $this->value;
    }

    /**
     * @throws Exception
     */
    protected function read(): void
    {
        try {
            $query = $this->buildQuery();
            if ($this->type === self::SCALAR) {
                $this->value = $this->getInstanceDatabaseAccessUtility()->fetchScalar($query, $this->params);
            } elseif ($this->type === self::H_VECTOR) {
                $result = $this->getInstanceDatabaseAccessUtility()->fetchAll($query, $this->params);
                if (is_array($result) && count($result) > 0) {
                    $this->value = $result[0];
                } else {
                    echo "Query returned zero results when trying to fetch a single row.\n";
                }
            } elseif ($this->type === self::V_VECTOR) {
                $this->value = $this->getInstanceDatabaseAccessUtility()->fetchColumn($query, $this->params);
            } elseif ($this->type === self::MATRIX) {
                $this->value = $this->getInstanceDatabaseAccessUtility()->fetchAll($query, $this->params);
            } elseif ($this->type === self::KEY_VALUE_PAIR) {
                $this->value = $this->getInstanceDatabaseAccessUtility()->fetchKeyValuePairs($query, $this->params);
            } else {
                $this->value = $this->getInstanceDatabaseAccessUtility()->fetchAll($query, $this->params);
            }

        } catch (Exception $e) {
            throw new Exception("Error occurred while reading reading data point: {$e->getMessage()}", $e->getCode(), $e->getPrevious());
        }
    }

    /**
     * @throws Exception
     */
    protected function buildQuery(): string
    {
        if ($this->getInstanceDatabaseAccessUtility()->tableExists($this->table)) {

            $fieldList = implode(', ', $this->fields);

            $filters = [1];
            foreach ($this->filters as $filter => $field) {
                if ($this->getInstanceDatabaseAccessUtility()->columnExists($field, $this->table)) {
                    $filters[] = $filter;
                } else {
                    echo "The field {$field} doesn't exist in {$this->table}\n";
                }
            }
            $filterList = '(' . implode(') AND (', $filters) . ')';

            $orderFields = [];
            foreach ($this->orderBy as $field => $order) {
                if ($this->getInstanceDatabaseAccessUtility()->columnExists($field, $this->table)) {
                    $orderFields[] = "{$field} {$order}";
                }
            }
            $orderBy = empty($this->orderBy) ? '' : 'ORDER BY ' . implode(',', $orderFields);

            $limit = is_null($this->limit) ? '' : "LIMIT {$this->offset}, {$this->limit}";

            return "SELECT {$fieldList} FROM `{$this->table}` WHERE {$filterList} {$orderBy} {$limit};";
        } else {
            echo "Table {$this->table} doesn't exist.\n";
            return 'N/A';
        }
    }
}
<?php


namespace OrangeHRM\DevOps\usageStats;

use OrangeHRM\DevOps\utility\ValueFormatter;

class DatabaseSize extends DatabaseOriginatedDataPoint
{

    public function getValue()
    {
        $dbName = $this->getInstanceDatabaseAccessUtility()->fetchColumn('SELECT DATABASE();');

        $sql = "SELECT SUM(`data_length` + `index_length`) AS 'size_in_bytes' 
                FROM information_schema.TABLES where table_schema ='{$dbName}';";
        $dbSize = $this->getInstanceDatabaseAccessUtility()->fetchColumn($sql);
        $formatter = new ValueFormatter();
        return $formatter->sizeToHumanReadableFormat($dbSize);
    }
}
<?php

namespace OrangeHRM\DevOps\usageStats;

use Exception;

class DocumentTemplateAnalyzer extends DataAnalyzer
{
    public function getResult($futureDate, $beforeDay, $allMonths): array
    {

        $resultArray = [];
        $noOfDocumentTemplatesConfigured = $this->getNoOfDocumentTemplatesConfigured();

        $resultArray['no-of-document-templates-configured'] = $noOfDocumentTemplatesConfigured;

        return $resultArray;
    }

    /**
     * @throws Exception
     */
    public function getNoOfDocumentTemplatesConfigured(): string
    {
        $configTable = $this->getInstanceDatabaseAccessUtility()->tableExists('ohrm_document_template');
        if ($configTable == 1) {
            $query = 'SELECT COUNT(id) FROM `ohrm_document_template`;';
            $result = $this->getInstanceDatabaseAccessUtility()->fetchColumn($query);
            return number_format((int)$result);
        } else {
            return 'N/A';
        }
    }

}
<?php

namespace OrangeHRM\DevOps\usageStats;

use Exception;

class DomainInformationAnalyzer extends DataAnalyzer
{

    /**
     * @throws Exception
     */
    public function getResult()
    {
        $resultArray = [];
        $resultArray['clientName'] = $this->fetchOrganizationName();
        $resultArray['domainName'] = $this->fetchDomainName();
        return $resultArray;
    }

    /**
     * @throws Exception
     */
    protected function fetchOrganizationName(): string
    {
        $name = $this->getInstanceDatabaseAccessUtility()->fetchColumn("SELECT TRIM(`name`) FROM `ohrm_organization_gen_info` LIMIT 1;");
        if (empty($name)) {
            $name = $this->getInstanceDatabaseAccessUtility()->fetchColumn("SELECT TRIM(`value`) FROM `ohrm_config` WHERE `property` = ?;", ['domain.name']);
        }

        if (empty($name) || $name === 'localhost') {
            $name = 'Unspecified';
        }

        return $name;
    }

    /**
     * @throws Exception
     */
    protected function fetchDomainName(): string
    {
        $query = "SELECT value FROM ohrm_config WHERE property = ?";
        return trim($this->getInstanceDatabaseAccessUtility()->fetchColumn($query, ['domain.name']));
    }

}
<?php

namespace OrangeHRM\DevOps\usageStats;

use OrangeHRM\DevOps\usageStats\MonthWiseActiveEmployeeCount;
use Exception;
use OrangeHRM\DevOps\helper\TimeDataHelper;

class EmployeeAnalyzer extends DataAnalyzer
{
    /**
     * @throws Exception
     */
    public function getResult($beforeDay, $triggeredDate, $allMonths): array
    {
        $resultArray = [];
        $detailedViewData = [];

        $detailedViewData['pim-activity-distribution-monthly-breakdown-line-graph-converted'] = [
            'dataSet' => $this->convertPimActivityDataForGraph($this->fetchMonthWisePIMActivityDistribution($beforeDay, $triggeredDate, $allMonths)),
        ];

        $detailedViewData['pim-activity-distribution-monthly-breakdown-line-graph'] = [
            'dataSet' => $this->fetchMonthWisePIMActivityDistribution($beforeDay, $triggeredDate, $allMonths),
            'xAxis' => 'Month',
            'yAxis' => 'Count',
        ];

        $empCounts = $this->fetchMonthWiseActiveEmployeeCount($beforeDay, $triggeredDate, $allMonths);

        $detailedViewData['month-wise-active-employee-count-table-multigraph-converted'] = [
            'dataSet' => $this->convertEmployeeCountDataForGraph($empCounts[0]),
        ];

        $detailedViewData['month-wise-active-employee-count-table-multigraph'] = [
            'dataSet' => $empCounts[0],
            'xAxis' => 'Month',
            'yAxis' => 'Count',
        ];

        $activeEmpCount = array_slice($empCounts[1], -12);
        $uniqueEmpLogins = $this->getNumberOfUniqueEmployeeLoginsMonthlyBreakDown($triggeredDate, $beforeDay, $allMonths);

        $loginThreandDetailedData = [];


        foreach ($activeEmpCount as $key => $values) {
            if ($values['count'] != 0) {
                $loginThreandDetailedData[$values['month']] = round((int)$uniqueEmpLogins[$key]['count'] / (int)($values['count']) * 100, 2);
            } else {
                $loginThreandDetailedData[$values['month']] = 0;
            }
        }

        $detailedViewData['login-trend-detailed-line-graph'] = [
            'dataSet' => TimeDataHelper::instance()->getFormattedKeys($loginThreandDetailedData, 'rearrange'),
            'xAxis' => 'Month',
            'yAxis' => 'Percentage',
        ];

        $resultArray['detailed-view-data'] = $detailedViewData;

        return $resultArray;
    }

    //Format PIM activity data for represent in google charts
    public function convertPimActivityDataForGraph($dataList)
    {
        $dataForGraph = [];
        if (is_array($dataList)) {
            foreach ($dataList as $data) {
                $dataForGraph[] = [$data['month'], (int)$data['count']];
            }
        }
        return $dataForGraph;
    }

    //Format employee count data for represent in google charts
    public function convertEmployeeCountDataForGraph($dataList)
    {
        $dataForGraph = [];
        if (is_array($dataList)) {
            foreach ($dataList as $data) {
                $dataForGraph[] = [$data['Month'], (int)$data['joined'], (int)$data['rehired'],
                    (int)$data['terminated'], (int)$data['activeEmployeeCount']];
            }
        }
        return $dataForGraph;
    }

    /**
     * @throws Exception
     */
    public function getNumberOfUniqueEmployeeLoginsMonthlyBreakDown($triggeredDate, $beforeDay, $allMonths)
    {

        $query = "SELECT
                  DATE_FORMAT(ohrm_login.login_time,'%x%m'),
                  COUNT(DISTINCT (user_id))
                  FROM hs_hr_employee, ohrm_login LEFT OUTER JOIN ohrm_user
                  ON ohrm_login.user_id = ohrm_user.id 
                  WHERE hs_hr_employee.termination_id IS NULL 
                  AND ohrm_user.emp_number = hs_hr_employee.emp_number
                  AND  DATE_FORMAT(ohrm_login.login_time,'%x-%m') Between ? AND ?
                  GROUP BY DATE_FORMAT(ohrm_login.login_time,'%x%m');";

        $result = $this->getInstanceDatabaseAccessUtility()->fetchKeyValuePairs($query, [$beforeDay, $triggeredDate]);
        $finalArray = TimeDataHelper::instance()->fillArrayWithAllKeys($result, $allMonths);
        $arrayForReturn = TimeDataHelper::instance()->getFormattedKeys($finalArray, 'months');
        return ($arrayForReturn);


    }

    /**
     * @throws Exception
     */
    public function fetchMonthWisePIMActivityDistribution($startDate, $triggeredDate, $allMonths)
    {

        $viewName = $this->getInstanceDatabaseAccessUtility()->fetchColumn("SHOW TABLES LIKE 'ohrm_audittrail_all%'");

        $query = "SELECT 
                  DATE_FORMAT(`action_time`, '%Y%m') AS `month`, 
                  COUNT(*) AS `count` 
                  FROM  `{$viewName}`
                  WHERE DATE_FORMAT(`action_time`, '%Y-%m')  BETWEEN ? AND ?
                  GROUP BY DATE_FORMAT(`action_time`, '%Y%m') 
                  ORDER BY `action_time`;";

        $result = $this->getInstanceDatabaseAccessUtility()->fetchKeyValuePairs($query, [$startDate, $triggeredDate]);
        $finalArray = TimeDataHelper::instance()->fillArrayWithAllKeys($result, $allMonths);
        return TimeDataHelper::instance()->getFormattedKeys($finalArray, 'months');
    }

    /**
     * @throws Exception
     */
    public function fetchMonthWiseActiveEmployeeCount($beforeDay, $triggeredDate, $allMonths): array
    {

        $dataPoint = new MonthWiseActiveEmployeeCount();
        $dataPoint->setInstanceDatabaseAccessUtility($this->getInstanceDatabaseAccessUtility());
        $result = $dataPoint->getValue();

        $returnArray = [];
        foreach ($result[0] as $record) {
            $returnArray[] = [
                'Month' => $record['month'],
                'joined' => $record['joined'],
                'rehired' => $record['multipleTerminationAdjustment'],
                'terminated' => $record['terminated'],
                'activeEmployeeCount' => $record['activeEmployeeCount'],
            ];
        }

        $result[0] = $returnArray;

        return $result;
    }

}
<?php

namespace OrangeHRM\DevOps\usageStats;

use Exception;
use stdClass;

class HelpAndTrainingPortalAccessCheck extends AbstractDiagnosticsCheck
{

    const PORTAL_BASE_URL = 'https://help.orangehrm.com/hc';
    const FALLBACK_URL = 'https://orangehrm.zendesk.com/hc/en-us';
    const LOCALE_NAME_LENGTH = 5;

    /**
     * @throws Exception
     */
    public function getResult(): stdClass
    {
        $result = new stdClass();

        $result->helpArticleAccessStats = $this->getHelpArticleAccessStats();

        return $result;
    }

    /**
     * @throws Exception
     */
    protected final function getHelpArticleAccessStats(): ?array
    {
        if ($this->getInstanceDatabaseAccessUtility()->tableExists('ohrm_external_navigation_log')) {
            $query = "
                (SELECT
                  'Default Page' AS article,
                  RIGHT(to_url, " . self::LOCALE_NAME_LENGTH . ") AS locale,
                  COUNT(*) AS clickCount
                FROM ohrm_external_navigation_log 
                WHERE 
                  (to_url = '" . self::FALLBACK_URL . "' OR to_url RLIKE '^" . self::PORTAL_BASE_URL . "\/.{" . self::LOCALE_NAME_LENGTH . "}')
                )
         
                UNION
                
                (SELECT
                  s.article AS article, 
                  s.locale AS locale, 
                  s.click_count AS clickCount 
                FROM (SELECT 
                    TRIM(REPLACE(SUBSTR(r.url_segment, " . (strlen(self::PORTAL_BASE_URL) + 1) . "), '-', ' ')) AS article, 
                    SUBSTR(r.url_segment, 2, " . self::LOCALE_NAME_LENGTH . ") AS locale, 
                    click_count 
                    FROM (SELECT 
                      TRIM(REPLACE(to_url, '" . self::PORTAL_BASE_URL . "', '')) AS url_segment, 
                      COUNT(*) AS click_count 
                      FROM ohrm_external_navigation_log 
                      WHERE to_url LIKE '%" . self::PORTAL_BASE_URL . "%' 
                      GROUP BY to_url
                    ) AS r
                ) AS s 
                WHERE TRIM(s.article) != ''
                ORDER BY s.article
                )
                ;
                ";

            return $this->getInstanceDatabaseAccessUtility()->fetchAll($query);
        } else {
            return [['N/A', 'N/A', 'N/A']];
        }
    }

}
<?php

namespace OrangeHRM\DevOps\usageStats;

use Exception;

class JobVacancyAnalyzer extends DataAnalyzer
{
    /**
     * @throws Exception
     */
    public function getResult(): array
    {

        $resultArray = [];
        $noOfVacancies = [];
        $noOfVacancies['13-weeks'] = $this->getNoOfVacancies(13);
        $noOfVacancies['26-weeks'] = $this->getNoOfVacancies(26);
        $noOfVacancies['52-weeks'] = $this->getNoOfVacancies(52);

        $resultArray['no-of-job-vacancies'] = $noOfVacancies;
        $resultArray['no-of-open-vacancies'] = $this->getNoOfOpenVacancies();
        $resultArray['no-of-candidates-in-open-vacancies'] = $this->getCandidateCountInOpenVacancies();
        $resultArray['vacancy-utilization-breakdown'] = $this->getVacancyUtilizationBreakdown();

        return $resultArray;
    }

    /**
     * @throws Exception
     */
    public function getNoOfVacancies($noOfWeeks): string
    {
        if ($this->getInstanceDatabaseAccessUtility()->tableExists('ohrm_job_vacancy')) {

            $triggeredDate = date("Y-m-d H:i:s");
            $beforeDay = date("Y-m-d H:i:s", strtotime("-{$noOfWeeks} weeks"));

            $query = "SELECT COUNT(*) FROM ohrm_job_vacancy WHERE (defined_time BETWEEN ? AND ?);";
            $result = $this->getInstanceDatabaseAccessUtility()->fetchColumn($query, [$beforeDay, $triggeredDate]);
            return number_format((int)$result);
        } else {
            return 'N/A';
        }
    }

    /**
     * @throws Exception
     */
    public function getNoOfOpenVacancies(): string
    {
        if ($this->getInstanceDatabaseAccessUtility()->tableExists('ohrm_job_vacancy')) {
            $query = "SELECT COUNT(*) FROM ohrm_job_vacancy WHERE status = ?;";
            return $this->getInstanceDatabaseAccessUtility()->fetchColumn($query, [2]);
        } else {
            return 'N/A';
        }
    }

    /**
     * @throws Exception
     */
    public function getCandidateCountInOpenVacancies(): string
    {
        if ($this->getInstanceDatabaseAccessUtility()->tableExists('ohrm_job_candidate_vacancy')) {
            $query = "
SELECT COUNT(*) 
FROM ohrm_job_candidate_vacancy AS cv
    LEFT JOIN ohrm_job_vacancy AS j ON cv.vacancy_id = j.id
WHERE j.status = 2;
";
            return $this->getInstanceDatabaseAccessUtility()->fetchColumn($query);
        } else {
            return 'N/A';
        }
    }

    /**
     * @throws Exception
     */
    protected function getVacancyUtilizationBreakdown(): array
    {
        $triggeredDate = date('Y-m-d 00:00:00');
        $periodStartDate = date('Y-m-d 23:59:59', strtotime('-52 weeks'));
        $softDeletionFilter = $this->getInstanceDatabaseAccessUtility()->columnExists('deleted_at', 'ohrm_job_candidate_vacancy') ? 'cv.deleted_at IS NULL' : '1';
        $query = "SELECT
    s.name,
    COUNT(DISTINCT v.id) AS no_of_vacancies,
    COUNT(DISTINCT cv.candidate_id) AS no_of_candidates
FROM ohrm_job_vacancy AS v
         LEFT JOIN ohrm_job_vacancy_status AS s ON v.status = s.status
         LEFT JOIN ohrm_job_candidate_vacancy AS cv ON v.id = cv.vacancy_id
WHERE
    (v.defined_time BETWEEN ? AND ?) AND
    {$softDeletionFilter}
GROUP BY v.status ;
";

        return $this->getInstanceDatabaseAccessUtility()->fetchAll($query, [$periodStartDate, $triggeredDate]);
    }

}
<?php


namespace OrangeHRM\DevOps\usageStats;


class LastLoginInformation extends DatabaseOriginatedDataPoint
{
    protected string $table = 'ohrm_login';
    protected array $fields = ["DATE_FORMAT(`login_time`, '%Y-%m-%d %H:%i') AS `timestamp`", 'user_role_name AS `user_role`'];
    protected array $filters = ['`user_name` NOT IN (?, ?, ?)' => 'user_name'];
    protected array $params = ['_ohrmSysAdmin_', 'ohrm_api_user', 'ohrm_upgrader_user'];
    protected array $orderBy = ['id' => 'DESC'];
    protected ?int $limit = 1;
    protected string $type = self::H_VECTOR;

}
<?php

namespace OrangeHRM\DevOps\usageStats;

use Exception;
use OrangeHRM\DevOps\helper\TimeDataHelper;

class LeaveRequestAnalyzer extends DataAnalyzer
{

    /**
     * @throws Exception
     */
    public function getResult($triggeredDate, $futureDate, $beforeDay, $allMonths, $pastMonths): array
    {
        $resultArray = [];
        $noOfLeave = [];
        $noOfLeave['13-weeks'] = $this->getNoOfLeaveRequest(13);
        $noOfLeave['26-weeks'] = $this->getNoOfLeaveRequest(26);
        $noOfLeave['52-weeks'] = $this->getNoOfLeaveRequest(52);

        $noOfLeaveFuture = [];
        $noOfLeaveFuture['13-weeks'] = $this->getNoOfFutureLeaveRequest(13);
        $noOfLeaveFuture['26-weeks'] = $this->getNoOfFutureLeaveRequest(26);
        $noOfLeaveFuture['52-weeks'] = $this->getNoOfFutureLeaveRequest(52);

        $uniqueLeaveRequests = [
            '13-weeks' => $this->getUniqueLeaveRequestCount(13),
            '26-weeks' => $this->getUniqueLeaveRequestCount(26),
            '52-weeks' => $this->getUniqueLeaveRequestCount(52),
        ];

        $activeUserCountAnalyzer = new ActiveUserCountAnalyzer($this->params);
        $activeUserCountAnalyzer->setInstanceDatabaseAccessUtility($this->getInstanceDatabaseAccessUtility());
        $leaveRequestPercentage = $this->createPercentageArray($uniqueLeaveRequests, $activeUserCountAnalyzer);

        $detailedViewData = [];

        $detailedViewData['past-future-leave-distribution-bar-chart-converted'] = [
            'dataSet' => $this->convertDataForGraph($this->getLeaveRequestBreakDown($beforeDay, $futureDate, $allMonths)),
        ];

        $detailedViewData['past-future-leave-distribution-applied-bar-chart-converted'] = [
            'dataSet' => $this->convertDataForGraph($this->getLeaveRequestBreakDownByAppliedDate($triggeredDate, $beforeDay, $pastMonths)),
        ];

        $detailedViewData['past-future-leave-distribution-bar-chart'] = [
            'dataSet' => $this->getLeaveRequestBreakDown($beforeDay, $futureDate, $allMonths),
            'xAxis' => 'Month',
            'yAxis' => 'Count',
        ];

        $detailedViewData['future-leave-distribution-Advanced-bar-chart'] = [
            'dataSet' => $this->getFutureLeaveRequestBreakDownAdvanced($triggeredDate, $beforeDay, $pastMonths),
            'xAxis' => 'Month',
            'yAxis' => 'Count',
        ];

        $detailedViewData['leave-break-down-country-vise-pie-chart'] = [
            'dataSet' => $this->getLeaveBreakDownByCountry(),
            'legendTopic' => 'Country'
        ];

        $detailedViewData['leave-country-month-wise-break-down-table-only'] = ['dataSet' => $this->getLeaveBreakDownByMonthCountry($beforeDay, $triggeredDate)];

        $detailedViewData['past-future-leave-distribution-applied-bar-chart'] = [
            'dataSet' => $this->getLeaveRequestBreakDownByAppliedDate($triggeredDate, $beforeDay, $pastMonths),
            'xAxis' => 'Month',
            'yAxis' => 'Count',
        ];

        $resultArray['no-of-leave-requests'] = $noOfLeave;
        $resultArray['no-of-leave-requests-future'] = $noOfLeaveFuture;
        $resultArray['detailed-view-data'] = $detailedViewData;
        $resultArray['leave-request-percentage'] = $leaveRequestPercentage;

        return $resultArray;
    }

    /**
     * Format data for represent in google charts
     * @param $dataList
     * @return array
     */
    public function convertDataForGraph($dataList): array
    {
        $dataForGraph = [];
        if (is_array($dataList)) {
            foreach ($dataList as $data) {
                $dataForGraph[] = [$data['month'], (int)$data['count']];
            }
        }
        return $dataForGraph;
    }

    /**
     * @throws Exception
     */
    function getLeaveRequestBreakDown($startDate, $endDate, $allMonths)
    {

        $query = "SELECT DATE_FORMAT(ohrm_leave.date,'%Y%m'),count(DISTINCT(ohrm_leave.leave_request_id))
                  FROM ohrm_leave_request LEFT OUTER JOIN ohrm_leave 
                  ON ohrm_leave_request.id = ohrm_leave.leave_request_id 
                  WHERE DATE_FORMAT(ohrm_leave.date, '%Y-%m') BETWEEN ? AND ?
                  GROUP BY DATE_FORMAT(ohrm_leave.date,'%Y%m')
                  ";

        $result = $this->getInstanceDatabaseAccessUtility()->fetchKeyValuePairs($query, [$startDate, $endDate]);
        if (sizeof($result) == 0) {
            return "no data found";
        }
        $finalArray = TimeDataHelper::instance()->fillArrayWithAllKeys($result, $allMonths);
        return TimeDataHelper::instance()->getFormattedKeys($finalArray, 'months');
    }

    /**
     * @throws Exception
     */
    public function getFutureLeaveRequestBreakDownAdvanced($triggeredDate, $beforeDate, $allMonths)
    {

        $query = "SELECT DATE_FORMAT(ohrm_leave_request.date_applied,'%x%m'),COUNT(DISTINCT(ohrm_leave.leave_request_id))
		          FROM ohrm_leave_request LEFT OUTER JOIN ohrm_leave
		          ON ohrm_leave_request.id = ohrm_leave.leave_request_id
		          WHERE DATE_FORMAT(ohrm_leave_request.date_applied,'%x-%m') BETWEEN ? AND ? AND DATEDIFF(ohrm_leave.date,ohrm_leave_request.date_applied)>90
		          GROUP BY DATE_FORMAT(ohrm_leave_request.date_applied,'%x%m');";

        $result = $this->getInstanceDatabaseAccessUtility()->fetchKeyValuePairs($query, [$beforeDate, $triggeredDate]);
        if (sizeof($result) == 0) {
            return "no data found";
        }
        $finalArray = TimeDataHelper::instance()->fillArrayWithAllKeys($result, $allMonths);
        return TimeDataHelper::instance()->getFormattedKeys($finalArray, 'months');
    }

    /**
     * @throws Exception
     */
    public function getLeaveBreakDownByCountry(): ?array
    {
        $query = "
SELECT 
    IFNULL(hs_hr_country.cou_name, 'Unspecified'),COUNT(ohrm_leave_request.id)
FROM ohrm_leave_request 
    LEFT OUTER JOIN hs_hr_employee ON ohrm_leave_request.emp_number = hs_hr_employee.emp_number 
            {$this->getLocationJoin()} 
    LEFT OUTER JOIN hs_hr_country ON ohrm_location.country_code = hs_hr_country.cou_code
GROUP BY hs_hr_country.name
;";

        return $this->getInstanceDatabaseAccessUtility()->fetchKeyValuePairs($query);
    }

    /**
     * @throws Exception
     */
    public function getLeaveBreakDownByMonthCountry($beforeDay, $triggeredDate): ?array
    {
        $query = "
        SELECT 
            DATE_FORMAT(ohrm_leave_request.date_applied, '%x-%b') AS Date,
            IFNULL(hs_hr_country.cou_name, 'Unspecified') AS Country,
            COUNT(ohrm_leave_request.id) AS Count
        FROM ohrm_leave_request 
            LEFT OUTER JOIN hs_hr_employee ON ohrm_leave_request.emp_number = hs_hr_employee.emp_number 
            {$this->getLocationJoin()}
            LEFT OUTER JOIN hs_hr_country ON ohrm_location.country_code = hs_hr_country.cou_code
        WHERE DATE_FORMAT(ohrm_leave_request.date_applied, '%x-%m') BETWEEN ? AND ?
        GROUP BY hs_hr_country.name,DATE_FORMAT(ohrm_leave_request.date_applied, '%x%m')
        ORDER BY DATE_FORMAT(ohrm_leave_request.date_applied, '%x%m')
        ;";

        return $this->getInstanceDatabaseAccessUtility()->fetchAll($query, array($beforeDay, $triggeredDate));
    }

    /**
     * @throws Exception
     */
    public function getNoOfLeaveRequest($noOfWeeks): string
    {

        $configTable = $this->getInstanceDatabaseAccessUtility()->tableExists('ohrm_leave_request');
        if ($configTable == 1) {
            $triggeredDate = (date("Y-m-d"));
            $d = strtotime("-" . $noOfWeeks . "Weeks");
            $beforeDay = (date("Y-m-d", $d));

            $query = 'SELECT id 
                      FROM ohrm_leave_request 
                      WHERE `date_applied` BETWEEN ? AND ?;';

            $result = $this->getInstanceDatabaseAccessUtility()->getRowCount($query, array($beforeDay, $triggeredDate));
            return number_format($result);
        } else {
            return 'N/A';
        }
    }

    /**
     * @throws Exception
     */
    public function getNoOfFutureLeaveRequest($noOfWeeks): string
    {
        $configTable = $this->getInstanceDatabaseAccessUtility()->tableExists('ohrm_leave_request');
        if ($configTable == 1) {

            $triggeredDate = (date("Y-m-d"));
            $query = 'SELECT COUNT(ohrm_leave.leave_request_id)
                      FROM ohrm_leave_request LEFT OUTER JOIN ohrm_leave 
                      ON ohrm_leave_request.id = ohrm_leave.leave_request_id 
                      WHERE ohrm_leave.date > ?
                      GROUP BY ohrm_leave.leave_request_id';

            $result = $this->getInstanceDatabaseAccessUtility()->getRowCount($query, array($triggeredDate));
            return number_format($result);
        } else {
            return 'N/A';
        }
    }

    protected function getLocationJoin(): string
    {
        $hasMultipleLocations = $this->getInstanceDatabaseAccessUtility()->tableExists('hs_hr_emp_locations');

        if ($hasMultipleLocations) {
            $locationJoin = "LEFT JOIN hs_hr_emp_locations ON hs_hr_emp_locations.emp_number = hs_hr_employee.emp_number 
                LEFT JOIN ohrm_location ON hs_hr_emp_locations.location_id = ohrm_location.id";
        } else {
            $locationJoin = "LEFT JOIN ohrm_location ON ohrm_location.id = hs_hr_employee.location_id";
        }

        return $locationJoin;
    }

    /**
     * @throws Exception
     */
    function getLeaveRequestBreakDownByAppliedDate($startDate, $endDate, $allMonths)
    {

        $query = "SELECT DATE_FORMAT(ohrm_leave_request.`date_applied`,'%Y%m'),count(DISTINCT(ohrm_leave_request.id))
                  FROM ohrm_leave_request WHERE DATE_FORMAT(ohrm_leave_request.`date_applied`, '%Y-%m') 
                  BETWEEN ? AND ? GROUP BY DATE_FORMAT(ohrm_leave_request.`date_applied`,'%Y%m')

                  ";

        $result = $this->getInstanceDatabaseAccessUtility()->fetchKeyValuePairs($query, array($endDate, $startDate));
        if (sizeof($result) == 0) {
            return "no data found";
        }
        $finalArray = TimeDataHelper::instance()->fillArrayWithAllKeys($result, $allMonths);
        return TimeDataHelper::instance()->getFormattedKeys($finalArray, 'months');
    }

    /**
     * @throws Exception
     */
    public function getUniqueLeaveRequestCount($noOfWeeks): int
    {
        if ($this->getInstanceDatabaseAccessUtility()->tableExists('hs_hr_employee')
            && $this->getInstanceDatabaseAccessUtility()->tableExists('ohrm_leave_request')
            && $this->getInstanceDatabaseAccessUtility()->tableExists('ohrm_emp_termination')) {
            $triggeredDate = (date("Y-m-d"));
            $d = strtotime("-" . $noOfWeeks . "Weeks");
            $beforeDay = (date("Y-m-d", $d));

            $reactivationDatePart = '';

            if ($this->getInstanceDatabaseAccessUtility()->columnExists('reactivation_date', 'ohrm_emp_termination')) {
                $reactivationDatePart = 'OR (e.`termination_id` IS NOT NULL AND et.`reactivation_date` IS NOT NULL)';
            }

            $query = "SELECT 
                        COUNT(DISTINCT `emp_number`) 
                      FROM `ohrm_leave_request` 
                      WHERE `emp_number` IN 
                        (
                            SELECT e.`emp_number` 
                            FROM `hs_hr_employee` AS e 
                            LEFT JOIN `ohrm_emp_termination` AS et ON e.`emp_number` = et.`emp_number` 
                            WHERE e.`termination_id` IS NULL
                            $reactivationDatePart
                        ) 
                      AND `date_applied` BETWEEN ? AND ?;";

            return (int)$this->getInstanceDatabaseAccessUtility()->fetchColumn($query, [$beforeDay, $triggeredDate]);
        } else {
            return 0;
        }
    }
}
<?php

namespace OrangeHRM\DevOps\usageStats;

use stdClass;
use Exception;

class LicenseParametersCheck extends AbstractDiagnosticsCheck
{

    public function getResult(): stdClass
    {

        $onOffReplacements = [
            'Yes' => 'On',
            'No' => 'Off',
        ];

        $result = new stdClass();

        try {
            $licenseProperties = $this->getInstanceLicenseInfoRetrievalUtility()->getLicenseProperties();
            $result->licenseStatus = $this->determineLicenseStatus($licenseProperties['expireOn']);
        } catch (Exception $e) {
            $licenseProperties = [];
            $result->licenseStatus = $e->getMessage();
        }

        $this->addResultProperty($result, 'customerNameInLicenseFile', $licenseProperties, 'customer');
        $this->addResultProperty($result, 'licenseExpiryDate', $licenseProperties, 'expireOn');
        $this->addResultProperty($result, 'gracePeriod', $licenseProperties, 'graceperiod');
        $this->addResultProperty($result, 'employeeLimit', $licenseProperties, 'employeelimit');
        $this->addResultProperty($result, 'userLimit', $licenseProperties, 'userlimit');
        $this->addResultProperty($result, 'openVacancyLimit', $licenseProperties, 'openvacancylimit');
        $this->addResultProperty($result, 'interviewAssistantStatus', $licenseProperties, 'isInterviewAssistantEnabled', 'N/A', $onOffReplacements);
        $this->addResultProperty($result, 'recruitmentDecisionSupportStatus', $licenseProperties, 'isRecruitmentDecisionSupportEnabled', 'N/A', $onOffReplacements);

        if (isset($licenseProperties['enabledModules'])) {
            $result->modulesEnabledFromLicenseFile = [];

            foreach ($licenseProperties['enabledModules'] as $module) {
                $moduleDisplayName = $this->moduleDisplayNames[$module] ?? $module;
                $result->modulesEnabledFromLicenseFile[] = ['name' => $moduleDisplayName];
            }

            if (isset($licenseProperties['isDocumentTemplateEnable']) && $licenseProperties['isDocumentTemplateEnable'] === 'Yes') {
                $result->modulesEnabledFromLicenseFile[] = ['name' => 'Document Templates'];
            }
        } else {
            $result->modulesEnabledFromLicenseFile = [['name' => '-']];
        }

        return $result;
    }

    protected final function determineLicenseStatus(string $expireOn): string
    {
        if (empty($expireOn)) {
            return 'N/A';
        }

        return (strtotime($expireOn) > time()) ? 'Active' : 'Expired';
    }

    protected function addResultProperty(stdClass $subject, string $property, array $repo, string $index, $default = 'N/A', array $replacements = [])
    {
        if (isset($repo[$index])) {
            $value = $repo[$index];
            $subject->$property = $replacements[$value] ?? $value;
        } else {
            $subject->$property = $default;
        }
    }

}
<?php

namespace OrangeHRM\DevOps\usageStats;

use stdClass;
use Exception;

class ModuleSettingsAndUsageCheck extends AbstractDiagnosticsCheck
{

    protected array $moduleSettingsChecks = [
        'leave' => ['is-leave-period-set'],
        'time' => ['is-timesheet-start-date-set'],
        'performance' => ['is-appraisal-cycle-set'],
        'LDAP' => ['is-ldap-settings-working'],
    ];
    protected array $moduleUsageChecks = [
        'admin' => ['hs_hr_country'],
        'pim' => ['hs_hr_employee'],
        'leave' => ['ohrm_leave_request'],
        'recruitment' => ['ohrm_job_vacancy'],
        'time' => ['ohrm_timesheet', 'ohrm_attendance_record'],
        'performance' => ['ohrm_performance_appraisal'],
        'training' => ['ohrm_training_course'],
        'onboarding' => ['ohrm_task'],
        'discipline' => ['ohrm_disciplinary_cases'],
    ];

    /**
     * @throws Exception
     */
    public function getResult(): stdClass
    {
        $result = new stdClass();

        try {
            $licenseProperties = $this->getInstanceLicenseInfoRetrievalUtility()->getLicenseProperties();
            $enabledModules = $licenseProperties['enabledModules'] ?? [];
        } catch (Exception $e) {
            $enabledModules = [];
        }

        $result->moduleUsageAndSettings = $this->getModuleUsageAndSettings($enabledModules);

        return $result;
    }

    /**
     * @throws Exception
     */
    protected final function getModuleUsageAndSettings(array $enabledModules): array
    {
        $result = [];

        foreach ($enabledModules as $module) {

            $moduleName = $this->moduleDisplayNames[$module] ?? $module;

            $isBeingUsed = 'Not Applicable';
            if (isset($this->moduleUsageChecks[$module])) {

                $usageRecordCount = 0;
                foreach ($this->moduleUsageChecks[$module] as $table) {

                    if (!$this->getInstanceDatabaseAccessUtility()->tableExists($table)) {
                        continue;
                    }

                    $query = "SELECT COUNT(*) AS `record_count` FROM `{$table}`;";
                    $usageRecordCount += $this->getInstanceDatabaseAccessUtility()->fetchColumn($query);
                }

                $isBeingUsed = ($usageRecordCount > 0) ? 'Yes' : 'No';
            }

            $settingsValidationResult = '';
            if (isset($this->moduleSettingsChecks[$module])) {
                $validationResults = array();
                foreach ($this->moduleSettingsChecks[$module] as $check) {
                    $method = preg_replace_callback('/-([a-z])/', function ($m) {
                        return strtoupper($m[1]);
                    }, $check);
                    $validationResults[] = $this->$method();
                }
                $settingsValidationResult = implode('; ', $validationResults);
            }

            $result[] = [
                'name' => $moduleName,
                'isBeingUsed' => $isBeingUsed,
                'settingsValidationResult' => $settingsValidationResult,
            ];
        }

        return $result;
    }

    /**
     * @throws Exception
     */
    protected final function isLeavePeriodSet(): string
    {
        $configTable = $this->getInstanceDatabaseAccessUtility()->tableExists('ohrm_config') ? 'ohrm_config' : 'hs_hr_config';
        $query = "SELECT CONCAT('Leave period is ', IF(`value` = 'Yes', '', 'not'), ' set') FROM `{$configTable}` WHERE `property` = ?";
        return $this->getInstanceDatabaseAccessUtility()->fetchColumn($query, array('leave_period_defined'));
    }

    /**
     * @throws Exception
     */
    protected final function isTimesheetStartDateSet(): string
    {
        $configTable = $this->getInstanceDatabaseAccessUtility()->tableExists('ohrm_config') ? 'ohrm_config' : 'hs_hr_config';
        $query = "SELECT CONCAT('Timesheet period is ', IF(`value` = 'Yes', '', 'not'), ' set') FROM `{$configTable}` WHERE `property` = ?";
        return $this->getInstanceDatabaseAccessUtility()->fetchColumn($query, array('timesheet_period_set'));
    }

    /**
     *
     * @throws Exception
     */
    protected final function isAppraisalCycleSet(): string
    {
        $configTable = $this->getInstanceDatabaseAccessUtility()->tableExists('ohrm_config') ? 'ohrm_config' : 'hs_hr_config';
        $query = "SELECT CONCAT('Appraisal cycle is ', IF(`value` = 'on', '', 'not'), ' set') FROM `{$configTable}` WHERE `property` = ?";
        return $this->getInstanceDatabaseAccessUtility()->fetchColumn($query, array('performance.appraisal_cycle'));
    }

    /**
     *
     * @todo Implement this method
     */
    protected final function isLdapSettingsWorking(): string
    {
        return '';
    }

}
<?php


namespace OrangeHRM\DevOps\usageStats;

use OrangeHRM\DevOps\helper\TimeDataHelper;

class MonthWiseActiveEmployeeCount extends DatabaseOriginatedDataPoint
{

    protected int $backtrack = 12;

    public function setBacktrack(int $backtrack): void
    {
        $this->backtrack = $backtrack;
    }

    public function read(): void
    {

        $hasSoftDelete = $this->getInstanceDatabaseAccessUtility()->columnExists('deleted_at', 'hs_hr_employee');
        $softDeletionFilter = ($hasSoftDelete) ? "e.`deleted_at` IS NULL" : '1';

        $dateListQuery = "SELECT DISTINCT r.`month` FROM
(SELECT DISTINCT DATE_FORMAT(`joined_date`, '%Y-%b') AS `month`, DATE_FORMAT(`joined_date`, '%Y-%m') AS `month_numeric` FROM `hs_hr_employee`
UNION
SELECT DISTINCT DATE_FORMAT(`termination_date`, '%Y-%b') AS `month`, DATE_FORMAT(`termination_date`, '%Y-%m') AS `month_numeric` FROM `ohrm_emp_termination`) AS r
ORDER BY r.`month_numeric`
";

        $joinedCountQuery = "
SELECT 
  IFNULL(DATE_FORMAT(`joined_date`, '%Y-%b'), 'Initial') AS `name`, 
  IFNULL(COUNT(*), 0) AS `value`
FROM `hs_hr_employee` AS e
WHERE {$softDeletionFilter}
GROUP BY DATE_FORMAT(`joined_date`, '%Y-%b')
ORDER BY `joined_date`;
";
        $terminatedCountQuery = "
SELECT DATE_FORMAT(`termination_date`, '%Y-%b') AS `name`, 
  IFNULL(COUNT(*), 0) AS `value`
FROM `ohrm_emp_termination` t 
LEFT JOIN `hs_hr_employee` AS e ON e.`emp_number` = t.`emp_number` 
WHERE {$softDeletionFilter} AND e.`termination_id` IS NOT NULL
GROUP BY DATE_FORMAT(`termination_date`, '%Y-%b')
ORDER BY `termination_date`;            
";

        $multipleTerminationRecordsQuery = "
SELECT 
  et.`emp_number` AS `emp_number`, 
  DATE_FORMAT(et.`termination_date`, '%Y-%b') AS `month`
FROM `ohrm_emp_termination` AS et 
WHERE et.`emp_number` IN (
  SELECT 
    r.`emp_number` 
  FROM (
    SELECT 
      t.`emp_number`, 
      (COUNT(*) - 1) AS `count` 
	FROM `ohrm_emp_termination` AS t 
    LEFT JOIN `hs_hr_employee` AS e ON e.`emp_number` = t.`emp_number`
    WHERE e.`termination_id` IS NOT NULL
    group by t.emp_number
  ) AS r 
  WHERE r.`count` > 0
) ORDER BY et.`emp_number`, et.`termination_date`
;
";

        $months = $this->getInstanceDatabaseAccessUtility()->fetchScalar($dateListQuery);
        $joinedCounts = $this->getInstanceDatabaseAccessUtility()->fetchKeyValuePairs($joinedCountQuery);
        $terminatedCounts = $this->getInstanceDatabaseAccessUtility()->fetchKeyValuePairs($terminatedCountQuery);
        $multipleTerminationRecords = $this->getInstanceDatabaseAccessUtility()->fetchAll($multipleTerminationRecordsQuery);

        $ineffectiveTerminationRecords = [];
        foreach ($multipleTerminationRecords as $key => $record) {
            if (array_key_exists($key + 1, $multipleTerminationRecords)) {
                if ($multipleTerminationRecords[$key + 1]['emp_number'] === $record['emp_number']) {
                    $ineffectiveTerminationRecords[] = $record['month'];
                }
            }
        }

        $multipleTerminationAdjustments = @array_count_values($ineffectiveTerminationRecords);

        $monthWiseActiveEmployeeCount = [];
        $compactActiveEmployeeCounts = [];

        $cumulativeJoinCount = array_key_exists('Initial', $joinedCounts) ? $joinedCounts['Initial'] : 0;
        $cumulativeTerminationCount = 0;
        foreach ($months as $month) {

            $joined = array_key_exists($month, $joinedCounts) ? $joinedCounts[$month] : 0;
            $terminated = array_key_exists($month, $terminatedCounts) ? $terminatedCounts[$month] : 0;
            $multipleTerminationAdjustment = array_key_exists($month, $multipleTerminationAdjustments) ? $multipleTerminationAdjustments[$month] : 0;

            $cumulativeJoinCount += $joined;
            $cumulativeTerminationCount = ($cumulativeTerminationCount + $terminated) - $multipleTerminationAdjustment;
            $activeEmployeeCount = ($cumulativeJoinCount - $cumulativeTerminationCount);

            $monthIndex = empty($month) ? 0 : date("Ym", strtotime("{$month}-01"));
            $monthWiseActiveEmployeeCount[$monthIndex] = [
                'month' => $month,
                'joined' => $joined,
                'cumulativeJoinCount' => $cumulativeJoinCount,
                'terminated' => $terminated,
                'multipleTerminationAdjustment' => $multipleTerminationAdjustment,
                'cumulativeTerminationCount' => $cumulativeTerminationCount,
                'activeEmployeeCount' => $activeEmployeeCount,
            ];
            $compactActiveEmployeeCounts[] = [
                'month' => $monthIndex,
                'count' => $activeEmployeeCount,
            ];
        }

        $today = date('Y-m-d');
        $nextMonth = date('Y-m-d', strtotime('next month'));
        $backtrackTime = date('Y-m-d', strtotime("-{$this->backtrack} month"));

        $lastTwelveMonths = TimeDataHelper::instance()->generateAllMonths($backtrackTime, $nextMonth);

        $minMonthOfValues = empty($monthWiseActiveEmployeeCount) ? INF : min(array_keys($monthWiseActiveEmployeeCount));
        $minMonthOfMonths = min($lastTwelveMonths);

        if ($minMonthOfValues <= $minMonthOfMonths) {

            foreach ($monthWiseActiveEmployeeCount as $month => $record) {
                $startMonth = $month;
                if ($month >= $minMonthOfMonths) {
                    $lastFoundRecord = $record;
                    break;
                }
            }
        } else {
            $lastFoundRecord = [
                'month' => date("Y-M", strtotime("{$minMonthOfMonths}")),
                'joined' => 0,
                'cumulativeJoinCount' => 0,
                'terminated' => 0,
                'multipleTerminationAdjustment' => 0,
                'cumulativeTerminationCount' => 0,
                'activeEmployeeCount' => 0,
            ];
        }

        $returnArray = [];
        $lastFoundRecord = ['cumulativeJoinCount' => 0, 'cumulativeTerminationCount' => 0, 'activeEmployeeCount' => 0];
        foreach ($lastTwelveMonths as $month) {
            if (array_key_exists($month, $monthWiseActiveEmployeeCount)) {
                $returnArray[] = $monthWiseActiveEmployeeCount[$month];
                $lastFoundRecord = $monthWiseActiveEmployeeCount[$month];
            } else {
                $returnArray[] = [
                    'month' => date('Y-M', strtotime("{$month}01")),
                    'joined' => 0,
                    'cumulativeJoinCount' => $lastFoundRecord['cumulativeJoinCount'] ?? 0,
                    'terminated' => 0,
                    'multipleTerminationAdjustment' => 0,
                    'cumulativeTerminationCount' => $lastFoundRecord['cumulativeTerminationCount'] ?? 0,
                    'activeEmployeeCount' => $lastFoundRecord['activeEmployeeCount'] ?? 0,
                ];
            }
        }

        $this->value = [$returnArray, $compactActiveEmployeeCounts];
    }
}
<?php


namespace OrangeHRM\DevOps\usageStats;


class MonthWiseFutureLeaveRequestDistribution extends DatabaseOriginatedDataPoint
{

    protected string $type = self::MATRIX;

    protected function buildQuery(): string
    {
        $today = date('Y-m-d');
        $this->setParams([$today]);

        $hasMultipleEmpLocations = $this->getInstanceDatabaseAccessUtility()->tableExists('hs_hr_emp_locations');
        $join = ($hasMultipleEmpLocations) ? 'LEFT JOIN `hs_hr_emp_locations` AS el ON lr.`emp_number` = el.`emp_number` LEFT JOIN `ohrm_location` AS l ON l.`id` = el.`location_id` ' : 'LEFT JOIN `hs_hr_employee` AS e ON lr.`emp_number` = e.`emp_number` LEFT JOIN `ohrm_location` AS l ON l.`id` = e.`location_id` ';

        return "
SELECT    
  DATE_FORMAT(lr.`leave_start_date`, '%Y-%b') AS `month`,
  c.`cou_name` AS `country`,
  COUNT(*) AS `count`  
FROM `ohrm_leave_request` AS lr 
{$join}
LEFT JOIN `hs_hr_country` AS `c` ON l.`country_code` = c.`cou_code` 
WHERE lr.`id` IN (SELECT DISTINCT `leave_request_id` FROM `ohrm_leave` WHERE `date` > ?) 
GROUP BY c.`cou_name`, DATE_FORMAT(lr.`leave_start_date`, '%Y-%b') 
ORDER BY c.`cou_name`, `leave_start_date`
";
    }

}
<?php


namespace OrangeHRM\DevOps\usageStats;


class MonthWiseLeaveRequestDistribution extends DatabaseOriginatedDataPoint
{

    protected string $type = self::MATRIX;

    protected function buildQuery(): string
    {
        $today = date('Y-m-d');
        $mothWiseStatsStartDate = date('Y-m-d', strtotime('1 year ago'));

        $this->setParams([$mothWiseStatsStartDate, $today]);

        $hasMultipleEmpLocations = $this->getInstanceDatabaseAccessUtility()->tableExists('hs_hr_emp_locations');
        $join = ($hasMultipleEmpLocations) ? 'LEFT JOIN `hs_hr_emp_locations` AS el ON lr.`emp_number` = el.`emp_number` LEFT JOIN `ohrm_location` AS l ON l.`id` = el.`location_id` ' : 'LEFT JOIN `hs_hr_employee` AS e ON lr.`emp_number` = e.`emp_number` LEFT JOIN `ohrm_location` AS l ON l.`id` = e.`location_id` ';

        return "
SELECT 
    DATE_FORMAT(ohrm_leave.date,'%Y-%b') AS `month`,
    COUNT(DISTINCT(ohrm_leave.leave_request_id)) AS `count`
FROM ohrm_leave_request 
    LEFT OUTER JOIN ohrm_leave ON ohrm_leave_request.id = ohrm_leave.leave_request_id 
WHERE ohrm_leave.date  BETWEEN ? AND ?
GROUP BY DATE_FORMAT(ohrm_leave.date, '%Y-%b')
ORDER BY DATE_FORMAT(ohrm_leave.date, '%Y-%m')
;
";
    }

}
<?php


namespace OrangeHRM\DevOps\usageStats;

use OrangeHRM\DevOps\helper\TimeDataHelper;

class MonthWiseLoginDistribution extends DatabaseOriginatedDataPoint
{

    protected function read(): void
    {
        $today = date('Y-m-d');
        $anYearAgo = date('Y-m-d', strtotime('-1 year'));

        $allMonths = TimeDataHelper::instance()->generateAllMonths($anYearAgo, $today);

        $query = "
SELECT 
    DATE_FORMAT(l.`login_time`, '%Y-%b') AS `month`, 
    COUNT(DISTINCT l.`user_name`)  AS `uniqueUserCount`,
    COUNT(*) AS `totalLoginCount`
FROM `ohrm_login` AS l
    LEFT JOIN `ohrm_user` AS u ON l.user_id = u.id 
WHERE 
    l.`login_time` > ? AND 
    u.`user_name` NOT IN('_ohrmSysAdmin_', 'ohrm_api_user', 'ohrm_upgrader_user') 
GROUP BY DATE_FORMAT(`login_time`, '%Y-%m')
ORDER BY DATE_FORMAT(`login_time`, '%Y-%m');
";

        $this->value = $this->getInstanceDatabaseAccessUtility()->fetchAll($query, [$anYearAgo]);
    }
}
<?php

namespace OrangeHRM\DevOps\usageStats;

class MonthWiseMobileUsageBreakdownByUserRole extends DatabaseOriginatedDataPoint
{
    protected function read(): void
    {
        if ($this->getInstanceDatabaseAccessUtility()->tableExists('ohrm_external_usage_log')) {
            $query = "
SELECT 
    DATE_FORMAT(`time`, '%Y-%b') AS `month`, 
    REPLACE(JSON_EXTRACT(`user`, '$.roles'), '\"', '') AS `userRoleCombination`, 
    COUNT(DISTINCT `session`) AS `noOfTimes` 
FROM `ohrm_external_usage_log` AS `ul` 
    LEFT JOIN `ohrm_user` AS `u` ON u.`id` = REPLACE(JSON_EXTRACT(`user`, '$.id'), '\"', '') 
    LEFT JOIN `hs_hr_employee` AS `e` ON e.`emp_number` = u.`emp_number` 
WHERE 
    `time` > ? AND
    app_id = (SELECT `id` FROM `ohrm_external_app` WHERE `name` = 'Enterprise Mobile' LIMIT 1) 
GROUP BY DATE_FORMAT(`time`, '%Y-%m'), `userRoleCombination` 
ORDER BY `time`;
";
        } elseif ($this->getInstanceDatabaseAccessUtility()->tableExists('ohrm_external_navigation_log')) {
            $query = "
SELECT 
    DATE_FORMAT(`time`, '%Y-%b') AS `month`, 
    REPLACE(JSON_EXTRACT(`user`, '$.roles'), '\"', '') AS `userRoleCombination`, 
    COUNT(DISTINCT `session`) AS `noOfTimes` 
FROM `ohrm_external_navigation_log` AS `ul` 
    LEFT JOIN `ohrm_user` AS `u` ON u.`id` = REPLACE(JSON_EXTRACT(`user`, '$.id'), '\"', '') 
    LEFT JOIN `hs_hr_employee` AS `e` ON e.`emp_number` = u.`emp_number` 
WHERE 
    `time` > ? AND
    app = 'orangehrm-mobile' 
GROUP BY DATE_FORMAT(`time`, '%Y-%m'), `userRoleCombination` 
ORDER BY `time`;            
            ";
        } else {
            $this->value = [];
            return;
        }


        $this->value = $this->getInstanceDatabaseAccessUtility()->fetchAll($query, $this->params);
    }
}
<?php

namespace OrangeHRM\DevOps\usageStats;

class MonthWiseMobileUsageTimesAccessed extends DatabaseOriginatedDataPoint
{
    protected function read(): void
    {
        if ($this->getInstanceDatabaseAccessUtility()->tableExists('ohrm_external_usage_log')) {
            $query = "
SELECT 
    DATE_FORMAT(`time`, '%Y-%b') AS `month`, 
    COUNT(DISTINCT `session`) AS `noOfTimes` 
FROM `ohrm_external_usage_log` AS `ul` 
WHERE
    `time` > ? AND
    app_id = (SELECT `id` FROM `ohrm_external_app` WHERE `name` = 'Enterprise Mobile' LIMIT 1)
GROUP BY DATE_FORMAT(`time`, '%Y-%m')
ORDER BY `time`;
";
        } elseif ($this->getInstanceDatabaseAccessUtility()->tableExists('ohrm_external_navigation_log')) {
            $query = "
SELECT 
    DATE_FORMAT(`time`, '%Y-%b') AS `month`, 
    COUNT(DISTINCT `session`) AS `noOfTimes` 
FROM `ohrm_external_navigation_log` AS `ul` 
WHERE
    `time` > ? AND
    app = 'mobile-orangehrm'
GROUP BY DATE_FORMAT(`time`, '%Y-%m')
ORDER BY `time`;            
";
        } else {
            $this->value = [];
            return;
        }


        $this->value = $this->getInstanceDatabaseAccessUtility()->fetchAll($query, $this->params);
    }
}
<?php

namespace OrangeHRM\DevOps\usageStats;

class MonthWiseMobileUsageUserCount extends DatabaseOriginatedDataPoint
{
    protected function read(): void
    {
        if ($this->getInstanceDatabaseAccessUtility()->tableExists('ohrm_external_usage_log')) {
            $query = "
SELECT 
    DATE_FORMAT(`time`, '%Y-%b') AS `month`, 
    COUNT(DISTINCT `user`) AS `noOfUsers` 
FROM `ohrm_external_usage_log` AS `ul` 
WHERE
    `time` > ? AND
    `app_id` = (SELECT `id` FROM `ohrm_external_app` WHERE `name` = 'Enterprise Mobile' LIMIT 1) 
GROUP BY DATE_FORMAT(`time`, '%Y-%m');
";
        } elseif ($this->getInstanceDatabaseAccessUtility()->tableExists('ohrm_external_navigation_log')) {
            $query = "
SELECT
DATE_FORMAT(`time`, '%Y-%b') AS `month`,
COUNT(DISTINCT `user`) AS `noOfUsers`
FROM `ohrm_external_navigation_log` AS `ul`
WHERE
    `time` > ? AND
    `app` = 'mobile-orangehrm'
GROUP BY DATE_FORMAT(`time`, '%Y-%m');
";
        } else {
            $this->value = [];
            return;
        }

        $this->value = $this->getInstanceDatabaseAccessUtility()->fetchAll($query, $this->params);
    }
}
<?php

namespace OrangeHRM\DevOps\usageStats;

use Exception;

class NewsAndDocumentArticleAnalyzer extends DataAnalyzer
{
    public function getResult($futureDate, $beforeDay, $allMonths): array
    {

        $resultArray = [];

        $uniqueEmployeesAcknowledgingArticles = [
            '13-weeks' => $this->getUniqueEmployeesAcknowledgingArticles(13),
            '26-weeks' => $this->getUniqueEmployeesAcknowledgingArticles(26),
            '52-weeks' => $this->getUniqueEmployeesAcknowledgingArticles(52),
];
        $totalNewsDocumentAcknowledgements = [
            '13-weeks' => $this->getTotalNewsDocumentAcknowledgements(13),
            '26-weeks' => $this->getTotalNewsDocumentAcknowledgements(26),
            '52-weeks' => $this->getTotalNewsDocumentAcknowledgements(52),
];
        $totalDocumentArticlesPublished = [
            '13-weeks' => $this->getTotalDocumentArticlesPublished(13),
            '26-weeks' => $this->getTotalDocumentArticlesPublished(26),
            '52-weeks' => $this->getTotalDocumentArticlesPublished(52),
];
        $totalNewsArticlesPublished = [
            '13-weeks' => $this->getTotalNewsArticlesPublished(13),
            '26-weeks' => $this->getTotalNewsArticlesPublished(26),
            '52-weeks' => $this->getTotalNewsArticlesPublished(52),
];

        $resultArray['no-of-document-articles-published'] = $totalDocumentArticlesPublished;
        $resultArray['no-of-news-articles-published'] = $totalNewsArticlesPublished;
        $resultArray['no-of-unique-acknowledging-emps'] = $uniqueEmployeesAcknowledgingArticles;
        $resultArray['no-of-acknowledgements'] = $totalNewsDocumentAcknowledgements;

        return $resultArray;
    }

    /**
     * @throws Exception
     */
    public function getTotalDocumentArticlesPublished($noOfWeeks)
    {
        if ($this->getInstanceDatabaseAccessUtility()->tableExists('ohrm_document_article')) {
            $triggeredDate = (date("Y-m-d"));
            $d = strtotime("-" . $noOfWeeks . "Weeks");
            $beforeDay = (date("Y-m-d", $d));
            $query = "SELECT COUNT(oda.id) 
                      FROM ohrm_document_article AS oda
                      WHERE oda.published_date BETWEEN ? AND ?;";

            return $this->getInstanceDatabaseAccessUtility()->fetchColumn($query, [$beforeDay, $triggeredDate]);
        } else {
            return 'N/A';
        }
    }

    /**
     * @throws Exception
     */
    public function getTotalNewsArticlesPublished($noOfWeeks)
    {
        if ($this->getInstanceDatabaseAccessUtility()->tableExists('ohrm_news_article')) {
            $triggeredDate = (date("Y-m-d"));
            $d = strtotime("-" . $noOfWeeks . "Weeks");
            $beforeDay = (date("Y-m-d", $d));
            $query = "SELECT COUNT(ona.id) 
                      FROM ohrm_news_article AS ona
                      WHERE ona.published_date BETWEEN ? AND ?;";

            return $this->getInstanceDatabaseAccessUtility()->fetchColumn($query, [$beforeDay, $triggeredDate]);
        } else {
            return 'N/A';
        }
    }

    /**
     * @throws Exception
     */
    public function getTotalNewsDocumentAcknowledgements($noOfWeeks)
    {
        if ($this->getInstanceDatabaseAccessUtility()->tableExists('ohrm_acknowledgement')) {
            $triggeredDate = (date("Y-m-d"));
            $d = strtotime("-" . $noOfWeeks . "Weeks");
            $beforeDay = (date("Y-m-d", $d));
            $query = "SELECT COUNT(oa.id) 
                      FROM ohrm_acknowledgement AS oa
                      WHERE oa.is_acknowledge = 1
                      AND (DATE(oa.date) BETWEEN ? AND ?);";

            return $this->getInstanceDatabaseAccessUtility()->fetchColumn($query, [$beforeDay, $triggeredDate]);
        } else {
            return 'N/A';
        }
    }

    /**
     * @throws Exception
     */
    public function getUniqueEmployeesAcknowledgingArticles($noOfWeeks)
    {
        if ($this->getInstanceDatabaseAccessUtility()->tableExists('ohrm_acknowledgement')) {
            $triggeredDate = (date("Y-m-d"));
            $d = strtotime("-" . $noOfWeeks . "Weeks");
            $beforeDay = (date("Y-m-d", $d));
            $query = "SELECT COUNT(DISTINCT oa.employee_id)
                      FROM ohrm_acknowledgement AS oa
                      JOIN hs_hr_employee AS e ON e.emp_number = oa.employee_id
                      LEFT JOIN ohrm_emp_termination AS et ON e.emp_number = et.emp_number
                      WHERE oa.is_acknowledge = 1
                      AND (DATE(oa.date) BETWEEN ? AND ?)
                      ";
            if (
                $this->getInstanceDatabaseAccessUtility()->columnExists('purged_at', 'hs_hr_employee')
                && $this->getInstanceDatabaseAccessUtility()->columnExists('reactivation_date', 'ohrm_emp_termination')
            ) {
                $query = $query . "AND e.`purged_at` IS NULL AND (e.`termination_id` IS NULL OR et.`reactivation_date` IS NOT NULL)";
            }
            $query = $query . ";";

            return $this->getInstanceDatabaseAccessUtility()->fetchColumn($query, [$beforeDay, $triggeredDate]);
        } else {
            return 'N/A';
        }
    }


}
<?php


namespace OrangeHRM\DevOps\usageStats;


class NoOfCurrentActiveEmployees extends DatabaseOriginatedDataPoint
{
    protected string $table = 'hs_hr_employee';
    protected array $fields = ['COUNT(*)'];
    protected array $filters = [
        "`termination_id` IS NULL" => 'termination_id',
        "`purged_at` IS NULL" => 'purged_at',
        "`deleted_at` IS NULL" => 'deleted_at',
    ];
}
<?php


namespace OrangeHRM\DevOps\usageStats;


class NoOfCurrentActiveUsers extends DatabaseOriginatedDataPoint
{
    protected string $table = 'ohrm_user';
    protected array $fields = ['COUNT(*)'];
    protected array $filters = [
        "`deleted` = 0" => 'deleted',
        "`purged` != 1" => 'purged',
        "`status` = 1" => 'status',
        '`user_name` NOT IN(?, ?, ?)' => 'user_name',
    ];
    protected array $params = ['_ohrmSysAdmin_', 'ohrm_api_user', 'ohrm_upgrader_user'];

}
<?php

namespace OrangeHRM\DevOps\usageStats;

use Exception;

class NotificationAnalyzer extends DataAnalyzer
{
    /**
     * @throws Exception
     */
    public function getResult(): array
    {

        $returnArray = [
            'total-action-based-notifications' => 'N/A',
            'total-date-based-notifications' => 'N/A',
            'total-schedule-based-notifications' => 'N/A',
            'detailed-view-data' => [
                'total-available-notifications' => 'N/A',
                'total-configured-notifications' => 'N/A',
                'no-of-notification-subscribers' => 'N/A',
                'no-of-notification-templates' => 'N/A',
                'notifications-usage-breakdown' => [

                ],
            ],
        ];

        if ($this->getInstanceDatabaseAccessUtility()->tableExists('ohrm_notification')) {

            $licenseProperties = $this->getInstanceLicenseInfoRetrievalUtility()->getLicenseProperties();
            $modules = $this->getApplicationModuleList($licenseProperties['enabledModules']);

            $query = "SELECT
                     t.name AS type,
                     COUNT(DISTINCT n.id) AS no_of_notifications,
                     COUNT(DISTINCT subscriber.id) AS no_of_subscribers,
                     COUNT(DISTINCT template.id) AS no_of_templates
              FROM ohrm_notification_subscriber_subscription AS ss
                       LEFT JOIN ohrm_notification_subscription AS subscription
                                 ON (subscription.id = ss.subscription_id)
                       LEFT JOIN ohrm_notification_subscriber AS subscriber
                                 ON (ss.subscriber_id = subscriber.id)
                       LEFT JOIN ohrm_notification_subscriber_subscription_template AS template ON template.id = ss.template_id
                       LEFT JOIN ohrm_notification AS n ON (n.id = subscription.notification_id)
                       LEFT JOIN ohrm_notification_type AS t ON (t.id = n.type_id)
                       LEFT JOIN ohrm_module AS m ON m.id = n.module_id
              WHERE n.is_enable = 1
                AND m.name IN ({$this->getFilterPlaceholderString($modules)})
              GROUP BY n.type_id
              ORDER BY t.name;
";

            $configuredNotificationsStats = $this->getInstanceDatabaseAccessUtility()->fetchAll($query, $modules);

            $returnArray['detailed-view-data']['total-available-notifications'] = 0;
            $returnArray['detailed-view-data']['total-configured-notifications'] = 0;
            $returnArray['detailed-view-data']['no-of-notification-subscribers'] = 0;
            $returnArray['detailed-view-data']['no-of-notification-templates'] = 0;

            foreach ($configuredNotificationsStats as $row) {
                $returnArray['detailed-view-data']['total-configured-notifications'] += $row['no_of_notifications'];
                $returnArray['detailed-view-data']['no-of-notification-subscribers'] += $row['no_of_subscribers'];
                $returnArray['detailed-view-data']['no-of-notification-templates'] += $row['no_of_templates'];

                $returnArray['detailed-view-data']['notifications-usage-breakdown'][$row['type']] = $row;
            }

            $availableNotificationsStats = $this->fetAvailableNotifications($licenseProperties['enabledModules']);
            foreach ($availableNotificationsStats as $row) {
                $returnArray['detailed-view-data']['total-available-notifications'] += $row['count'];
                $returnArray['detailed-view-data']['notifications-usage-breakdown'][$row['type']]['no_of_available_notifications'] = $row['count'];
            }

            $returnArray['total-action-based-notifications'] = $this->extractNotificationCount($returnArray, 'Action Based');
            $returnArray['total-date-based-notifications'] = $this->extractNotificationCount($returnArray, 'Date Based');
            $returnArray['total-schedule-based-notifications'] = $this->extractNotificationCount($returnArray, 'Scheduled');

        }

        return $returnArray;
    }

    protected function extractNotificationCount(array $usageStatsArray, string $key)
    {
        if (array_key_exists($key, $usageStatsArray['detailed-view-data']['notifications-usage-breakdown'])) {
            if (array_key_exists('no_of_notifications', $usageStatsArray['detailed-view-data']['notifications-usage-breakdown'][$key])) {
                return $usageStatsArray['detailed-view-data']['notifications-usage-breakdown'][$key]['no_of_notifications'];
            } else {
                return 0;
            }
        } else {
            return 0;
        }
    }

    /**
     * @throws Exception
     */
    protected
    function fetAvailableNotifications(array $licencedModules): array
    {

        $modules = $this->getApplicationModuleList($licencedModules);

        $query = "SELECT t.name AS type, m.name AS module, COUNT(*) AS count 
FROM ohrm_notification AS n
LEFT JOIN ohrm_notification_type AS t ON n.type_id = t.id
LEFT JOIN ohrm_module AS m on n.module_id = m.id
WHERE hidden = 0 
  AND m.name IN ({$this->getFilterPlaceholderString($modules)})
GROUP BY n.type_id
ORDER BY t.name;
";
        return $this->getInstanceDatabaseAccessUtility()->fetchAll($query, array_values($modules));
    }

    protected
    function getApplicationModuleList(array $modules): array
    {
        $index = array_search('LDAP', $modules);
        if ($index !== false) {
            array_push($modules, 'ldapAuthentication', 'oauth');
            unset($modules[$index]);
        }

        $index = array_search('successionAndDevelopment', $modules);
        if ($index !== false) {
            $modules[$index] = 'succession & development';
        }

        if (in_array('training', $modules)) {
            $modules[] = 'onlinetraining';
        }

        if (in_array('performance', $modules)) {
            $modules[] = 'performanceTracker';
        }

        if (in_array('recruitment', $modules)) {
            $modules[] = 'recruitmentApply';
        }

        if (in_array('time', $modules)) {
            array_push($modules, 'attendance', 'attendanceBulk');
        }

        array_push($modules, 'asset', 'audittrail', 'bulkdata', 'buzz', 'communication', 'core',
            'dashboard', 'directory', 'digitalSigning', 'externalApps', 'help', 'license', 'Maintenance',
            'managementtool_notship', 'navigation', 'news', 'notification', 'questionnaire', 'report',
            'securityAuthentication');

        return array_values($modules);
    }

    /**
     * @todo Move this to a query helper
     */
    protected
    function getFilterPlaceholderString(array $modules): string
    {
        return implode(',', array_fill(0, count($modules), '?'));
    }

}
<?php

namespace OrangeHRM\DevOps\usageStats;

use Exception;
use OrangeHRM\DevOps\helper\TimeDataHelper;

class OnBoardingTaskAnalyzer extends DataAnalyzer
{

    /**
     * @throws Exception
     */
    public function getResult($futureDate, $beforeDay, $allMonths): array
    {

        $resultArray = [];
        $noOfOnBoardingTasks = [];
        $noOfOnBoardingTasks['13-weeks'] = $this->getNoOfOnBoardingTasks(13);
        $noOfOnBoardingTasks['26-weeks'] = $this->getNoOfOnBoardingTasks(26);
        $noOfOnBoardingTasks['52-weeks'] = $this->getNoOfOnBoardingTasks(52);

        $noOfOnBoardingEvents = [];
        $noOfOnBoardingEvents['13-weeks'] = $this->getNoOfEvents(13, 'ONBOARDING');
        $noOfOnBoardingEvents['26-weeks'] = $this->getNoOfEvents(26, 'ONBOARDING');
        $noOfOnBoardingEvents['52-weeks'] = $this->getNoOfEvents(52, 'ONBOARDING');

        $noOfOffBoardingEvents = [];
        $noOfOffBoardingEvents['13-weeks'] = $this->getNoOfEvents(13, 'OFFBOARDING');
        $noOfOffBoardingEvents['26-weeks'] = $this->getNoOfEvents(26, 'OFFBOARDING');
        $noOfOffBoardingEvents['52-weeks'] = $this->getNoOfEvents(52, 'OFFBOARDING');

        $noOfFutureOnBoardingTasks = [];
        $noOfFutureOnBoardingTasks['13-weeks'] = $this->getNoOfFutureOnBoardingTasks(13);
        $noOfFutureOnBoardingTasks['26-weeks'] = $this->getNoOfFutureOnBoardingTasks(26);
        $noOfFutureOnBoardingTasks['52-weeks'] = $this->getNoOfFutureOnBoardingTasks(52);

        $detailedViewData = [];
        $detailedViewData['on-boarding-distribution-monthly-breakdown-bar-chart'] = [
            'dataSet' => $this->getNoOfOnBoardingTasksBreakDown($beforeDay, $futureDate, $allMonths),
            'xAxis' => 'Month',
            'yAxis' => 'Count',
        ];

        $detailedViewData['on-boarding-distribution-monthly-breakdown-bar-chart-converted'] = [
            'dataSet' => $this->convertDataForGraph($this->getNoOfOnBoardingTasksBreakDown($beforeDay, $futureDate, $allMonths)),
        ];


        $detailedViewData['on-boarding-events-distribution-monthly-breakdown-bar-chart'] = [
            'dataSet' => $this->getNoOfOnOffBoardingEventsBreakDown($beforeDay, $futureDate, $allMonths),
            'xAxis' => 'Month',
            'yAxis' => 'Count',
        ];

        $detailedViewData['on-boarding-events-distribution-monthly-breakdown-bar-chart-converted'] = [
            'dataSet' => $this->convertDataForGraph($this->getNoOfOnOffBoardingEventsBreakDown($beforeDay, $futureDate, $allMonths)),
        ];

        $resultArray['no-of-on-boarding-tasks'] = $noOfOnBoardingTasks;
        $resultArray['no-of-on-boarding-events'] = $noOfOnBoardingEvents;
        $resultArray['no-of-off-boarding-events'] = $noOfOffBoardingEvents;
        $resultArray['no-of-future-on-boarding-tasks'] = $noOfFutureOnBoardingTasks;
        $resultArray['detailed-view-data'] = $detailedViewData;

        return $resultArray;
    }

    // Format onboarding monthly data for represent in google charts
    public function convertDataForGraph($dataList): array
    {
        $dataForGraph = [];
        if (is_array($dataList)) {
            foreach ($dataList as $data) {
                $dataForGraph[] = [$data['month'], isset($data['count']) ? (int)$data['count'] : 0];
            }
        }
        return $dataForGraph;
    }

    /**
     * @throws Exception
     */
    public function getNoOfOnBoardingTasks($noOfWeeks): string
    {
        $tableExists = $this->getInstanceDatabaseAccessUtility()->tableExists('ohrm_task');
        if (!$tableExists) {
            return 'N/A';
        }

        $triggeredDate = date('Y-m-d');
        $beforeDay = date('Y-m-d', strtotime(" -{$noOfWeeks} weeks"));

        $query = "SELECT COUNT(*) FROM ohrm_task WHERE `due_date` BETWEEN ? AND ?";
        return (string)$this->getInstanceDatabaseAccessUtility()->fetchColumn($query, [$beforeDay, $triggeredDate]);
    }

    /**
     * @throws Exception
     */
    public function getNoOfEvents(int $noOfWeeks, string $type): string
    {
        $tableExists = $this->getInstanceDatabaseAccessUtility()->tableExists('ohrm_job');
        if (!$tableExists) {
            return 'N/A';
        }

        $triggeredDate = date('Y-m-d');
        $beforeDay = date('Y-m-d', strtotime(" -{$noOfWeeks} weeks"));

        $query = "SELECT COUNT(*) FROM `ohrm_job` WHERE type = ? AND `due_date` BETWEEN ? AND ?";
        $result = $this->getInstanceDatabaseAccessUtility()->fetchColumn($query, [$type, $beforeDay, $triggeredDate]);

        return number_format((int)$result);
    }

    /**
     * @throws Exception
     */
    public function getNoOfFutureOnBoardingTasks($noOfWeeks): string
    {
        if ($this->getInstanceDatabaseAccessUtility()->tableExists('ohrm_task')) {
            $triggeredDate = (date("Y-m-d"));
            $d1 = strtotime("+" . $noOfWeeks . "Weeks");
            $futureDay = (date("Y-m-d", $d1));
            $query = 'SELECT COUNT(id)  FROM ohrm_task WHERE due_date BETWEEN ? AND ?';

            $result = $this->getInstanceDatabaseAccessUtility()->fetchColumn($query, array($triggeredDate, $futureDay));
            return number_format((int)$result);

        } else {
            return 'N/A';
        }
    }

    /**
     * @throws Exception
     */
    public function getNoOfOnBoardingTasksBreakDown($startDate, $endDate, $allMonths)
    {

        if (!$this->getInstanceDatabaseAccessUtility()->tableExists('ohrm_task')) {
            return 'no data found';
        }

        $query = "SELECT  DATE_FORMAT(`due_date`,'%x%m'),count(id)
                  FROM ohrm_task 
                  WHERE DATE_FORMAT(`due_date`,'%x-%m') BETWEEN ? AND ?
                  GROUP BY DATE_FORMAT(`due_date`,'%x%m')";

        $result = $this->getInstanceDatabaseAccessUtility()->fetchKeyValuePairs($query, [$startDate, $endDate]);

        if (sizeof($result) == 0) {
            return 'no data found';
        }

        $finalArray = TimeDataHelper::instance()->fillArrayWithAllKeys($result, $allMonths);
        return TimeDataHelper::instance()->getFormattedKeys($finalArray, 'months');

    }

    /**
     * @throws Exception
     */
    public function getNoOfOnOffBoardingEventsBreakDown($startDate, $endDate, $allMonths)
    {

        if (!$this->getInstanceDatabaseAccessUtility()->tableExists('ohrm_job')) {
            return 'no data found';
        }

        $query = "SELECT  DATE_FORMAT(`due_date`,'%x%m') as month, 
           SUM(CASE WHEN type = 'ONBOARDING' THEN 1 ELSE 0 END) as onBordingCount, 
           SUM(CASE WHEN type = 'OFFBOARDING' THEN 1 ELSE 0 END) as offBordingCount 
                  FROM ohrm_job 
                  WHERE DATE_FORMAT(`due_date`,'%x-%m') BETWEEN ? AND ? 
                  GROUP BY DATE_FORMAT(`due_date`,'%x%m')";

        $result = $this->getInstanceDatabaseAccessUtility()->fetchAll($query, [$startDate, $endDate]);

        if (sizeof($result) === 0) {
            return 'no data found';
        }

        if (!(is_array($result) && count($result) > 0)) {
            return 'no data found';
        }

        $newResult = [];
        if (array_key_exists('onBordingCount', $result[0]) && array_key_exists('month', $result[0])) {
            $newResult[$result[0]['month']]['onBordingCount'] = $result[0]['onBordingCount'];
        }

        if (array_key_exists('offBordingCount', $result[0]) && array_key_exists('month', $result[0])) {
            $newResult[$result[0]['month']]['offBordingCount'] = $result[0]['offBordingCount'];
        }

        if (empty($newResult)) {
            return 'no data found';
        }

        $finalArray = TimeDataHelper::instance()->fillArrayWithAllKeys($newResult, $allMonths);
        $formattedArray = TimeDataHelper::instance()->getFormattedKeys($finalArray, 'months');

        $newArray = [];

        foreach ($formattedArray as $item) {
            if (is_array($item['count'])) {
                $item['onBordingCount'] = $item['count']['onBordingCount'];
                $item['offBordingCount'] = $item['count']['offBordingCount'];
            } else {
                $item['onBordingCount'] = 0;
                $item['offBordingCount'] = 0;
            }

            unset($item['count']);

            $newArray[] = $item;
        }

        return $newArray;
    }

}
<?php

namespace OrangeHRM\DevOps\usageStats;

use Exception;

class OnlineTrainingAnalyzer extends DataAnalyzer
{
    public function getResult($futureDate, $beforeDay, $allMonths): array
    {

        $resultArray = [];
        $uniqueEmployeesUsingOnlineTraining = [
            '13-weeks' => $this->getUniqueEmployeesUsingOnlineTraining(13),
            '26-weeks' => $this->getUniqueEmployeesUsingOnlineTraining(26),
            '52-weeks' => $this->getUniqueEmployeesUsingOnlineTraining(52),
];
        $totalOnlineTrainingCoursesPassed = [
            '13-weeks' => $this->getTotalOnlineTrainingCoursesPassed(13),
            '26-weeks' => $this->getTotalOnlineTrainingCoursesPassed(26),
            '52-weeks' => $this->getTotalOnlineTrainingCoursesPassed(52),
];
        $totalOnlineTrainingCoursesFailed = [
            '13-weeks' => $this->getTotalOnlineTrainingCoursesFailed(13),
            '26-weeks' => $this->getTotalOnlineTrainingCoursesFailed(26),
            '52-weeks' => $this->getTotalOnlineTrainingCoursesFailed(52),
];


        $resultArray['no-of-unique-employees-online-training'] = $uniqueEmployeesUsingOnlineTraining;
        $resultArray['no-of-online-training-courses-passed'] = $totalOnlineTrainingCoursesPassed;
        $resultArray['no-of-online-training-courses-failed'] = $totalOnlineTrainingCoursesFailed;

        return $resultArray;
    }

    /**
     * @throws Exception
     */
    public function getUniqueEmployeesUsingOnlineTraining($noOfWeeks)
    {
        if ($this->getInstanceDatabaseAccessUtility()->tableExists('ohrm_online_course_employee')) {
            $triggeredDate = (date("Y-m-d"));
            $d = strtotime("-" . $noOfWeeks . "Weeks");
            $beforeDay = (date("Y-m-d", $d));
            $query = "SELECT COUNT(DISTINCT oce.emp_number) 
                      FROM ohrm_online_course_employee AS oce 
                      JOIN hs_hr_employee AS e ON e.emp_number = oce.emp_number 
                      LEFT JOIN ohrm_emp_termination AS et ON e.emp_number = et.emp_number 
                      WHERE oce.is_deleted = 0
                      AND ((oce.status=2) OR ({$this->getDurationFilterClause()}))
                      ";
            if (
                $this->getInstanceDatabaseAccessUtility()->columnExists('purged_at', 'hs_hr_employee')
                && $this->getInstanceDatabaseAccessUtility()->columnExists('reactivation_date', 'ohrm_emp_termination')
            ) {
                $query = $query . "AND e.`purged_at` IS NULL AND (e.`termination_id` IS NULL OR et.`reactivation_date` IS NOT NULL)";
            }
            $query = $query . ";";

            return $this->getInstanceDatabaseAccessUtility()->fetchColumn($query, ["{$beforeDay} 00:00:00", "{$triggeredDate} 23:59:59"]);
        } else {
            return 'N/A';
        }
    }

    /**
     * @throws Exception
     */
    public function getTotalOnlineTrainingCoursesFailed($noOfWeeks)
    {
        if ($this->getInstanceDatabaseAccessUtility()->tableExists('ohrm_online_course_employee')) {
            $triggeredDate = (date("Y-m-d"));
            $d = strtotime("-" . $noOfWeeks . "Weeks");
            $beforeDay = (date("Y-m-d", $d));
            $query = "SELECT COUNT(oce.id) 
                      FROM ohrm_online_course_employee AS oce 
                      WHERE oce.is_deleted = 0
                      AND ((oce.status=3) AND ({$this->getDurationFilterClause()}));";

            return $this->getInstanceDatabaseAccessUtility()->fetchColumn($query, ["{$beforeDay} 00:00:00", "{$triggeredDate} 23:59:59"]);
        } else {
            return 'N/A';
        }
    }

    /**
     * @throws Exception
     */
    public function getTotalOnlineTrainingCoursesPassed($noOfWeeks)
    {
        if ($this->getInstanceDatabaseAccessUtility()->tableExists('ohrm_online_course_employee')) {
            $triggeredDate = (date("Y-m-d"));
            $d = strtotime("-" . $noOfWeeks . "Weeks");
            $beforeDay = (date("Y-m-d", $d));
            $query = "SELECT COUNT(oce.id) 
                      FROM ohrm_online_course_employee AS oce 
                      WHERE oce.is_deleted = 0
                      AND ((oce.status=1) AND ({$this->getDurationFilterClause()}));";

            return $this->getInstanceDatabaseAccessUtility()->fetchColumn($query, ["{$beforeDay} 00:00:00", "{$triggeredDate} 23:59:59"]);
        } else {
            return 'N/A';
        }
    }

    /**
     * @throws Exception
     */
    protected function getDurationFilterClause(): string
    {
        if ($this->getInstanceDatabaseAccessUtility()->columnExists('completion_date_time', 'ohrm_online_course_employee')) {
            return "oce.completion_date_time BETWEEN ? AND ?";
        } elseif ($this->getInstanceDatabaseAccessUtility()->columnExists('completion_date', 'ohrm_online_course_employee')) {
            return "oce.completion_date BETWEEN ? AND ?";
        } else {
            throw new Exception("Viable duration filter field doesn't exist");
        }

    }

}
<?php

namespace OrangeHRM\DevOps\usageStats;

use DateTime;
use Exception;
use OrangeHRM\DevOps\helper\TimeDataHelper;

class PerformanceAppraisalAnalyzer extends DataAnalyzer
{

    public function getResult($triggeredDate, $futureDate, $beforeDay, $allMonths, $pastMonths): array
    {

        $resultArray = [];
        $noOfFuturePerformanceAppraisals = [];
        $noOfFuturePerformanceAppraisals['13-weeks'] = $this->getNoOfFuturePerformanceAppraisals(13);
        $noOfFuturePerformanceAppraisals['26-weeks'] = $this->getNoOfFuturePerformanceAppraisals(26);
        $noOfFuturePerformanceAppraisals['52-weeks'] = $this->getNoOfFuturePerformanceAppraisals(52);

        $noOfPerformanceAppraisals = [];
        $noOfPerformanceAppraisals['13-weeks'] = $this->getNoOfPerformanceAppraisals(13);
        $noOfPerformanceAppraisals['26-weeks'] = $this->getNoOfPerformanceAppraisals(26);
        $noOfPerformanceAppraisals['52-weeks'] = $this->getNoOfPerformanceAppraisals(52);
        $completedAppraisals = $this->getPerformanceCompletedAppraisals($beforeDay, $futureDate, $allMonths);
        $initiatedAppraisals = $this->getPerformanceInitiatedAppraisals($beforeDay, $futureDate, $allMonths);
        $notInitiatedAppraisals = $this->getPerformanceNotInitiatedAppraisals($beforeDay, $futureDate, $allMonths);
        $approvedAppraisals = $this->getApprovedInitiatedAppraisals($beforeDay, $futureDate, $allMonths);
        $rejectedAppraisals = $this->getRejectedAppraisals($beforeDay, $futureDate, $allMonths);
        $canceledAppraisals = $this->getClosedAppraisals($beforeDay, $futureDate, $allMonths);

        $achievedGoalsOKRs = $this->getGoalsOKRsByStatus($triggeredDate, $allMonths, 'Achieved');
        $inProgressGoalsOKRs = $this->getGoalsOKRsByStatus($triggeredDate, $allMonths, 'In Progress');
        $pendingGoalsOKRs = $this->getGoalsOKRsByStatus($triggeredDate, $allMonths, 'Pending');
        $notAchievedGoalsOKRs = $this->getGoalsOKRsByStatus($triggeredDate, $allMonths, 'Not Achieved');
        $onHoldGoalsOKRs = $this->getGoalsOKRsByStatus($triggeredDate, $allMonths, 'On Hold');

        $detailedViewData = [];

        $detailedViewData['past-future-appraisals-distribution-stacked-bar-graph'] = [
            'legendTopic' => 'Appraisals Status',
            'dataSet' => array('1' => $completedAppraisals, '2' => $initiatedAppraisals, '3' => $notInitiatedAppraisals, '4' => $approvedAppraisals, '5' => $rejectedAppraisals, '6' => $canceledAppraisals),
            'xAxis' => 'Month',
            'yAxis' => 'Count',
            'legendTitles' => ['COMPLETED', 'IN PROGRESS', 'NOT INITIATED', 'APPROVED', 'REJECTED', 'CLOSED'],
        ];
        $detailedViewData['past-future-appraisals-distribution-stacked-bar-graph-converted'] = [
            'dataSet' => $this->convertDataForGraph([
                '1' => $completedAppraisals,
                '2' => $initiatedAppraisals,
                '3' => $notInitiatedAppraisals,
                '4' => $approvedAppraisals,
                '5' => $rejectedAppraisals,
                '6' => $canceledAppraisals], $allMonths),
        ];

        $detailedViewData['goals-okrs-distribution-stacked-bar-graph'] = [
            'legendTopic' => 'Goals/OKRs Status',
            'dataSet' => array('1' => $achievedGoalsOKRs, '2' => $inProgressGoalsOKRs, '3' => $pendingGoalsOKRs, '4' => $notAchievedGoalsOKRs, '5' => $onHoldGoalsOKRs),
            'xAxis' => 'Month',
            'yAxis' => 'Count',
            'legendTitles' => ['ACHIEVED', 'IN PROGRESS', 'PENDING', 'NOT ACHIEVED', 'ONHOLD'],
        ];

        $detailedViewData['goals-okrs-distribution-stacked-bar-graph-converted'] = [
            'dataSet' => $this->convertDataForGraph([
                '1' => $achievedGoalsOKRs,
                '2' => $inProgressGoalsOKRs,
                '3' => $pendingGoalsOKRs,
                '4' => $notAchievedGoalsOKRs,
                '5' => $onHoldGoalsOKRs], $allMonths),
        ];
        $resultArray['no-of-future-performance-appraisals'] = $noOfFuturePerformanceAppraisals;
        $resultArray['no-of-performance-appraisals'] = $noOfPerformanceAppraisals;
        $resultArray['detailed-view-data'] = $detailedViewData;

        $appraisalsCreatedArray = [
            '13-weeks' => $this->getNoOfPerformanceAppraisalsCreated(13),
            '26-weeks' => $this->getNoOfPerformanceAppraisalsCreated(26),
            '52-weeks' => $this->getNoOfPerformanceAppraisalsCreated(52),
        ];

        $appraisalsCompletedArray = [
            '13-weeks' => $this->getNoOfPerformanceAppraisalsCompleted(13),
            '26-weeks' => $this->getNoOfPerformanceAppraisalsCompleted(26),
            '52-weeks' => $this->getNoOfPerformanceAppraisalsCompleted(52),
        ];

        $totalIDPsArray = [
            '13-weeks' => $this->getTotalIDPsCreated(13),
            '26-weeks' => $this->getTotalIDPsCreated(26),
            '52-weeks' => $this->getTotalIDPsCreated(52),
        ];

        $totalGoalCount = [
            '13-weeks' => $this->getTotalGoalsCount(13),
            '26-weeks' => $this->getTotalGoalsCount(26),
            '52-weeks' => $this->getTotalGoalsCount(52),
        ];

        $totalOKRsCount = [
            '13-weeks' => $this->getTotalOKRsCount(13),
            '26-weeks' => $this->getTotalOKRsCount(26),
            '52-weeks' => $this->getTotalOKRsCount(52),
        ];

        $totalGoalsAssignedEmployeeCount = [
            '13-weeks' => $this->getTotalGoalsAssignedEmployeeCount(13),
            '26-weeks' => $this->getTotalGoalsAssignedEmployeeCount(26),
            '52-weeks' => $this->getTotalGoalsAssignedEmployeeCount(52),
        ];

        $totalOKRsAssignedEmployeeCount = [
            '13-weeks' => $this->getTotalOKRsAssignedEmployeeCount(13),
            '26-weeks' => $this->getTotalOKRsAssignedEmployeeCount(26),
            '52-weeks' => $this->getTotalOKRsAssignedEmployeeCount(52),
        ];

        $totalGoalsOKRsAssignedEmployeeCount = [
            '13-weeks' => $this->getTotalGoalsOKRsAssignedEmployeeCount(13),
            '26-weeks' => $this->getTotalGoalsOKRsAssignedEmployeeCount(26),
            '52-weeks' => $this->getTotalGoalsOKRsAssignedEmployeeCount(52),
        ];

        $totalGoalsOKRsCount = [
            '13-weeks' => $this->getTotalGoalsOKRsCount(13),
            '26-weeks' => $this->getTotalGoalsOKRsCount(26),
            '52-weeks' => $this->getTotalGoalsOKRsCount(52),
        ];

        $resultArray['no-of-appraisals-created'] = $appraisalsCreatedArray;
        $activeUserCountAnalyzer = new ActiveUserCountAnalyzer($this->params);
        $activeUserCountAnalyzer->setInstanceDatabaseAccessUtility($this->getInstanceDatabaseAccessUtility());
        $resultArray['appraisals-created-percentage'] = $this->createPercentageArray($appraisalsCreatedArray, $activeUserCountAnalyzer);
        $resultArray['no-of-appraisals-completed'] = $appraisalsCompletedArray;
        $resultArray['appraisals-completed-percentage'] = $this->createPercentageArray($appraisalsCompletedArray, $activeUserCountAnalyzer);
        $resultArray['no-of-idp'] = $totalIDPsArray;
        $resultArray['no-of-goals'] = $totalGoalCount;
        $resultArray['no-of-okrs'] = $totalOKRsCount;
        $resultArray['no-of-goals-assigned-emp-count'] = $totalGoalsAssignedEmployeeCount;
        $resultArray['no-of-okrs-assigned-emp-count'] = $totalOKRsAssignedEmployeeCount;
        $resultArray['no-of-goals-okrs-assigned-emp-count'] = $totalGoalsOKRsAssignedEmployeeCount;
        $resultArray['no-of-goals-okrs-count'] = $totalGoalsOKRsCount;
        return $resultArray;

    }

    //Format data for represent in google charts
    public function convertDataForGraph($fullDataSet, $allMonths): array
    {
        $noOfMonths = sizeof($allMonths);
        $dataForGraph = [];
        for ($i = 0; $i < $noOfMonths; $i++) {
            $stringMonth = substr((string)$allMonths[$i], 4, 2) . "-" . substr((string)$allMonths[$i], 0, 4);
            $month = DateTime::createFromFormat('m-Y', $stringMonth)->format('Y-M');
            $dataRow = [$month];
            foreach ($fullDataSet as $key => $dataList) {
                if (!is_array($dataList) || (sizeof($dataList) == 0)) {
                    $dataRow[] = 0;
                } else {
                    $dataRow[] = $dataList[$i]["count"];
                }
            }

            $dataForGraph[] = $dataRow;
        }

        return $dataForGraph;
    }


    /**
     * @throws Exception
     */
    public function getPerformanceCompletedAppraisals($startDate, $endDate, $allMonths)
    {
        $query = "SELECT  DATE_FORMAT(ohrm_performance_appraisal.`due_date`,'%Y%m'), count(DISTINCT(ohrm_performance_appraisal.id))
                  FROM ohrm_performance_appraisal WHERE DATE_FORMAT(ohrm_performance_appraisal.`due_date`, '%Y-%m') 
                  BETWEEN ? AND ? AND state_id= '2' GROUP BY DATE_FORMAT(ohrm_performance_appraisal.`due_date`,'%Y%m')
";

        $result = $this->getInstanceDatabaseAccessUtility()->fetchKeyValuePairs($query, [$startDate, $endDate]);

        if (sizeof($result) == 0) {
            return [];
        }
        $finalArray = TimeDataHelper::instance()->fillArrayWithAllKeys($result, $allMonths);
        $arrayForReturn = TimeDataHelper::instance()->getFormattedKeys($finalArray, 'months');

        return ($arrayForReturn);
    }

    /**
     * @throws Exception
     */
    public function getGoalsOKRsByStatus($triggeredDate, $allMonths, $status): array
    {

        if ($this->getInstanceDatabaseAccessUtility()->tableExists('ohrm_goal_status')) {
            return [];
        }

        if ($this->getInstanceDatabaseAccessUtility()->tableExists('ohrm_goal_status')) {
            return [];
        }

        $startDate = (new DateTime($triggeredDate))->modify('-12months')->format('Y-m-d');
        $endDate = (new DateTime($triggeredDate))->modify('+12months')->format('Y-m-d');

        $query = "SELECT DATE_FORMAT(`due_date`, '%Y%m'), COUNT(*)
                  FROM ohrm_performance_goal 
                  WHERE `due_date` BETWEEN ? AND ? 
                    AND status_id = (SELECT `state_id` FROM `ohrm_goal_status` WHERE `name` = ? LIMIT 1)  
                  GROUP BY DATE_FORMAT(`due_date`, '%Y%m')";
        $result = $this->getInstanceDatabaseAccessUtility()->fetchKeyValuePairs($query, [$startDate, $endDate, $status]);

        if (count($result) === 0) {
            return [];
        }

        $finalArray = TimeDataHelper::instance()->fillArrayWithAllKeys($result, $allMonths);
        return TimeDataHelper::instance()->getFormattedKeys($finalArray, 'months');
    }

    /**
     * @throws Exception
     */
    public function getPerformanceInitiatedAppraisals($startDate, $endDate, $allMonths)
    {

        $query = "SELECT  DATE_FORMAT(ohrm_performance_appraisal.`due_date`,'%Y%m'), count(DISTINCT(ohrm_performance_appraisal.id))
                  FROM ohrm_performance_appraisal WHERE DATE_FORMAT(ohrm_performance_appraisal.`due_date`, '%Y-%m') 
                  BETWEEN ? AND ? AND state_id = '1' GROUP BY DATE_FORMAT(ohrm_performance_appraisal.`due_date`,'%Y%m')
";

        $result = $this->getInstanceDatabaseAccessUtility()->fetchKeyValuePairs($query, [$startDate, $endDate]);

        if (sizeof($result) == 0) {
            return [];
        }
        $finalArray = TimeDataHelper::instance()->fillArrayWithAllKeys($result, $allMonths);
        $arrayForReturn = TimeDataHelper::instance()->getFormattedKeys($finalArray, 'months');

        return ($arrayForReturn);

    }

    /**
     * @throws Exception
     */
    public function getPerformanceNotInitiatedAppraisals($startDate, $endDate, $allMonths)
    {

        $query = "SELECT  DATE_FORMAT(ohrm_performance_appraisal.`due_date`,'%Y%m'), count(DISTINCT(ohrm_performance_appraisal.id))
                  FROM ohrm_performance_appraisal WHERE DATE_FORMAT(ohrm_performance_appraisal.`due_date`, '%Y-%m') 
                  BETWEEN ? AND ? AND state_id = '0' GROUP BY DATE_FORMAT(ohrm_performance_appraisal.`due_date`,'%Y%m')
";

        $result = $this->getInstanceDatabaseAccessUtility()->fetchKeyValuePairs($query, [$startDate, $endDate]);

        if (sizeof($result) == 0) {
            return [];
        }
        $finalArray = TimeDataHelper::instance()->fillArrayWithAllKeys($result, $allMonths);
        $arrayForReturn = TimeDataHelper::instance()->getFormattedKeys($finalArray, 'months');

        return ($arrayForReturn);

    }

    /**
     * @throws Exception
     */
    public function getApprovedInitiatedAppraisals($startDate, $endDate, $allMonths)
    {

        $query = "SELECT  DATE_FORMAT(ohrm_performance_appraisal.`due_date`,'%Y%m'), count(DISTINCT(ohrm_performance_appraisal.id))
                  FROM ohrm_performance_appraisal WHERE DATE_FORMAT(ohrm_performance_appraisal.`due_date`, '%Y-%m') 
                  BETWEEN ? AND ? AND state_id = '3' GROUP BY DATE_FORMAT(ohrm_performance_appraisal.`due_date`,'%Y%m')
";

        $result = $this->getInstanceDatabaseAccessUtility()->fetchKeyValuePairs($query, [$startDate, $endDate]);

        if (sizeof($result) == 0) {
            return [];
        }
        $finalArray = TimeDataHelper::instance()->fillArrayWithAllKeys($result, $allMonths);
        $arrayForReturn = TimeDataHelper::instance()->getFormattedKeys($finalArray, 'months');

        return ($arrayForReturn);

    }

    /**
     * @throws Exception
     */
    public function getClosedAppraisals($startDate, $endDate, $allMonths)
    {

        $query = "SELECT  DATE_FORMAT(ohrm_performance_appraisal.`due_date`,'%Y%m'), count(DISTINCT(ohrm_performance_appraisal.id))
                  FROM ohrm_performance_appraisal WHERE DATE_FORMAT(ohrm_performance_appraisal.`due_date`, '%Y-%m') 
                  BETWEEN ? AND ? AND state_id = '5' GROUP BY DATE_FORMAT(ohrm_performance_appraisal.`due_date`,'%Y%m')
";

        $result = $this->getInstanceDatabaseAccessUtility()->fetchKeyValuePairs($query, [$startDate, $endDate]);

        if (sizeof($result) == 0) {
            return [];
        }
        $finalArray = TimeDataHelper::instance()->fillArrayWithAllKeys($result, $allMonths);
        $arrayForReturn = TimeDataHelper::instance()->getFormattedKeys($finalArray, 'months');

        return ($arrayForReturn);

    }

    /**
     * @throws Exception
     */
    public function getRejectedAppraisals($startDate, $endDate, $allMonths)
    {

        $query = "SELECT  DATE_FORMAT(ohrm_performance_appraisal.`due_date`,'%Y%m'), count(DISTINCT(ohrm_performance_appraisal.id))
                  FROM ohrm_performance_appraisal WHERE DATE_FORMAT(ohrm_performance_appraisal.`due_date`, '%Y-%m') 
                  BETWEEN ? AND ? AND state_id = '4' GROUP BY DATE_FORMAT(ohrm_performance_appraisal.`due_date`,'%Y%m')
";

        $result = $this->getInstanceDatabaseAccessUtility()->fetchKeyValuePairs($query, [$startDate, $endDate]);

        if (sizeof($result) == 0) {
            return [];
        }
        $finalArray = TimeDataHelper::instance()->fillArrayWithAllKeys($result, $allMonths);
        return TimeDataHelper::instance()->getFormattedKeys($finalArray, 'months');

    }

    /**
     * @throws Exception
     */
    public function getNoOfPerformanceAppraisals($noOfWeeks): string
    {
        $configTable = $this->getInstanceDatabaseAccessUtility()->tableExists('ohrm_performance_appraisal');
        if ($configTable == 1) {

            $triggeredDate = (date("Y-m-d"));
            $d = strtotime("-" . $noOfWeeks . "Weeks");
            $beforeDay = (date("Y-m-d", $d));
            $query = "SELECT COUNT(`id`) FROM `ohrm_performance_appraisal` WHERE `due_date` BETWEEN ? AND ?";

            $result = $this->getInstanceDatabaseAccessUtility()->fetchColumn($query, [$beforeDay, $triggeredDate]);
            return number_format((int)$result);

        } else {
            return 'N/A';
        }


    }

    /**
     * @throws Exception
     */
    public function getNoOfFuturePerformanceAppraisals($noOfWeeks): string
    {
        $configTable = $this->getInstanceDatabaseAccessUtility()->tableExists('ohrm_performance_appraisal');
        if ($configTable == 1) {

            $triggeredDate = (date("Y-m-d"));
            $d1 = strtotime("+" . $noOfWeeks . "Weeks");
            $futureDay = (date("Y-m-d", $d1));
            $query = "SELECT COUNT(`id`) FROM `ohrm_performance_appraisal` WHERE `due_date` BETWEEN ? AND ?";

            $result = $this->getInstanceDatabaseAccessUtility()->fetchColumn($query, array($triggeredDate, $futureDay));
            return number_format((int)$result);

        } else {
            return 'N/A';
        }
    }

    /**
     * @throws Exception
     */
    public function getNoOfPerformanceAppraisalsCreated($noOfWeeks)
    {
        if ($this->getInstanceDatabaseAccessUtility()->tableExists('ohrm_audittrail_performance_appraisal_trail')) {
            $triggeredDate = (date("Y-m-d"));
            $d = strtotime("-" . $noOfWeeks . "Weeks");
            $beforeDay = (date("Y-m-d", $d));
            $query = "SELECT COUNT(DISTINCT `affected_entity_id`) FROM `ohrm_audittrail_performance_appraisal_trail` AS a LEFT JOIN hs_hr_employee AS e ON e.emp_number = a.affected_entity_id WHERE `action_time` BETWEEN ? AND ? AND action = 'CREATE APPRAISAL' AND termination_id IS NULL;";
            return $this->getInstanceDatabaseAccessUtility()->fetchColumn($query, [$beforeDay, $triggeredDate]);
        } else {
            return 'N/A';
        }
    }

    /**
     * @throws Exception
     */
    public function getTotalGoalsCount($noOfWeeks)
    {
        if (!$this->getInstanceDatabaseAccessUtility()->tableExists('ohrm_performance_goal')) {
            return 'N/A';
        }

        $triggeredDate = date('Y-m-d');
        $beforeDay = (date('Y-m-d', strtotime("-{$noOfWeeks} weeks")));
        $query = "SELECT COUNT(*) FROM `ohrm_performance_goal` 
                WHERE `goal_category_id` = (SELECT id FROM `ohrm_goal_category` WHERE `name` = 'goal') 
                  AND `due_date` BETWEEN ? AND ?;";
        return $this->getInstanceDatabaseAccessUtility()->fetchColumn($query, [$beforeDay, $triggeredDate]);
    }

    /**
     * @throws Exception
     */
    public function getTotalOKRsCount($noOfWeeks)
    {
        if (!$this->getInstanceDatabaseAccessUtility()->tableExists('ohrm_performance_goal')) {
            return 'N/A';
        }

        if (!$this->getInstanceDatabaseAccessUtility()->tableExists('ohrm_goal_category')) {
            return 'N/A';
        }

        $triggeredDate = date('Y-m-d');
        $beforeDay = (date('Y-m-d', strtotime("-{$noOfWeeks} weeks")));

        $query = "SELECT COUNT(*) FROM `ohrm_performance_goal` 
                WHERE `goal_category_id` IN (SELECT id FROM `ohrm_goal_category` WHERE `name` IN (?, ?))
                  AND `due_date` BETWEEN ? AND ?;";

        return $this->getInstanceDatabaseAccessUtility()->fetchColumn($query, ['objective', 'key_result', $beforeDay, $triggeredDate]);
    }

    /**
     * @throws Exception
     */
    public function getTotalGoalsAssignedEmployeeCount($noOfWeeks)
    {
        if (!$this->getInstanceDatabaseAccessUtility()->tableExists('ohrm_performance_goal')) {
            return 'N/A';
        }

        $triggeredDate = date('Y-m-d');
        $beforeDay = (date('Y-m-d', strtotime("-{$noOfWeeks} weeks")));
        $query = "SELECT COUNT(DISTINCT emp_number) FROM `ohrm_performance_goal` 
                                  WHERE `goal_category_id` = (SELECT id FROM `ohrm_goal_category` WHERE `name` = ? LIMIT 1) 
                                    AND `due_date` BETWEEN ? AND ?;";

        return $this->getInstanceDatabaseAccessUtility()->fetchColumn($query, ['goal', $beforeDay, $triggeredDate]);

    }

    /**
     * @throws Exception
     */
    public function getTotalGoalsOKRsCount($noOfWeeks)
    {
        if (!$this->getInstanceDatabaseAccessUtility()->tableExists('ohrm_performance_goal')) {
            return 'N/A';
        }

        $triggeredDate = date('Y-m-d');
        $beforeDay = (date('Y-m-d', strtotime("-{$noOfWeeks} weeks")));
        $query = "SELECT COUNT(*) FROM `ohrm_performance_goal` WHERE `due_date` BETWEEN ? AND ?;";
        return $this->getInstanceDatabaseAccessUtility()->fetchColumn($query, [$beforeDay, $triggeredDate]);
    }

    /**
     * @throws Exception
     */
    public function getTotalGoalsOKRsAssignedEmployeeCount($noOfWeeks)
    {
        if ($this->getInstanceDatabaseAccessUtility()->tableExists('ohrm_performance_goal')) {
            return 'N/A';
        }

        $triggeredDate = date('Y-m-d');
        $beforeDay = (date('Y-m-d', strtotime("-{$noOfWeeks} weeks")));
        $query = "SELECT COUNT(DISTINCT emp_number) FROM `ohrm_performance_goal` WHERE `due_date` BETWEEN ? AND ?;";

        return $this->getInstanceDatabaseAccessUtility()->fetchColumn($query, [$beforeDay, $triggeredDate]);
    }

    /**
     * @throws Exception
     */
    public function getTotalOKRsAssignedEmployeeCount($noOfWeeks)
    {
        if ($this->getInstanceDatabaseAccessUtility()->tableExists('ohrm_performance_goal')) {
            return 'N/A';
        }

        $triggeredDate = date('Y-m-d');
        $beforeDay = (date('Y-m-d', strtotime("-{$noOfWeeks} weeks")));

        $query = "SELECT COUNT(DISTINCT emp_number) FROM `ohrm_performance_goal` 
                                  WHERE `goal_category_id` IN (SELECT id FROM `ohrm_goal_category` WHERE `name` IN (?, ?)) 
                                    AND `due_date` BETWEEN ? AND ?;";
        return $this->getInstanceDatabaseAccessUtility()->fetchColumn($query, ['objective', 'key_result', $beforeDay, $triggeredDate]);

    }

    /**
     * @throws Exception
     */
    public function getNoOfPerformanceAppraisalsCompleted($noOfWeeks)
    {
        if ($this->getInstanceDatabaseAccessUtility()->tableExists('ohrm_performance_appraisal')) {
            $triggeredDate = (date("Y-m-d"));
            $d = strtotime("-" . $noOfWeeks . "Weeks");
            $beforeDay = (date("Y-m-d", $d));
            $query = "SELECT COUNT(DISTINCT(ohrm_performance_appraisal.id)) FROM ohrm_performance_appraisal WHERE DATE_FORMAT(ohrm_performance_appraisal.`due_date`, '%Y-%m')  BETWEEN ? AND ? AND state_id = '2';";
            return $this->getInstanceDatabaseAccessUtility()->fetchColumn($query, [$beforeDay, $triggeredDate]);
        } else {
            return 'N/A';
        }
    }

    /**
     * @throws Exception
     */
    public function getTotalIDPsCreated($noOfWeeks)
    {
        if ($this->getInstanceDatabaseAccessUtility()->tableExists('ohrm_individual_development_plan')) {
            $triggeredDate = (date("Y-m-d"));
            $d = strtotime("-" . $noOfWeeks . "Weeks");
            $beforeDay = (date("Y-m-d", $d));
            $query = "SELECT COUNT(*) FROM ohrm_individual_development_plan WHERE initiated_date BETWEEN ? AND ?;";
            return $this->getInstanceDatabaseAccessUtility()->fetchColumn($query, [$beforeDay, $triggeredDate]);
        } else {
            return 'N/A';
        }
    }

}
<?php

namespace OrangeHRM\DevOps\usageStats;

use Exception;
use OrangeHRM\DevOps\helper\TimeDataHelper;

class PunchInTimeAnalyzer extends DataAnalyzer
{
    public function getResult($triggeredDate, $beforeDay, $pastMonths): array
    {

        $resultArray = [];
        $noOfPunchIns = [];
        $noOfPunchIns['13-weeks'] = $this->getNoOfPunchInsPunchIns(13);
        $noOfPunchIns['26-weeks'] = $this->getNoOfPunchInsPunchIns(26);
        $noOfPunchIns['52-weeks'] = $this->getNoOfPunchInsPunchIns(52);

        $detailedViewData = [];
        $detailedViewData['punch-ins-monthly-breakdown-bar-chart'] = [
            'dataSet' => $this->getNoOfPunchInsBreakDown($triggeredDate, $beforeDay, $pastMonths),
            'xAxis' => 'Month',
            'yAxis' => 'Count',
        ];
        $detailedViewData['punched-in-distinct-employees-count-monthly-breakdown-bar-chart'] = [
            'dataSet' => $this->getNoOfDistinctEmployeesPunchedInsBreakDown($triggeredDate, $beforeDay, $pastMonths),
            'xAxis' => 'Month',
            'yAxis' => 'Count',
        ];
        $detailedViewData['punched-in-distinct-employees-count-monthly-breakdown-bar-chart-converted'] = [
            'dataSet' => $this->convertDataForGraph($this->getNoOfDistinctEmployeesPunchedInsBreakDown($triggeredDate, $beforeDay, $pastMonths)),
];
        $resultArray['detailed-view-data'] = $detailedViewData;
        $resultArray['no-of-punch-ins'] = $noOfPunchIns;
        $uniqueEmployeePunchIns = [
            '13-weeks' => $this->getNoOfUniquePunchIns(13),
            '26-weeks' => $this->getNoOfUniquePunchIns(26),
            '52-weeks' => $this->getNoOfUniquePunchIns(52)
];

        $resultArray['no-of-unique-emps-attendance'] = $uniqueEmployeePunchIns;
        $activeUserCountAnalyzer = new ActiveUserCountAnalyzer($this->params);
        $activeUserCountAnalyzer->setInstanceDatabaseAccessUtility($this->getInstanceDatabaseAccessUtility());
        $resultArray['unique-emps-attendance-percentage'] = $this->createPercentageArray($uniqueEmployeePunchIns, $activeUserCountAnalyzer);

        return $resultArray;
    }

    //Format data for represent in google charts
    public function convertDataForGraph($dataList)
    {
        $dataForGraph = [];
        if (is_array($dataList)) {
            foreach ($dataList as $data) {
                $dataForGraph[] = [$data['month'], (int)$data['count']];
            }
        }
        return $dataForGraph;
    }


    /**
     * @throws Exception
     */
    public function getNoOfPunchInsPunchIns($noOfWeeks): string
    {
        $configTable = $this->getInstanceDatabaseAccessUtility()->tableExists('ohrm_attendance_record');
        if ($configTable == 1) {

            $triggeredDate = (date("Y-m-d G:i:s"));
            $d = strtotime("-" . $noOfWeeks . "Weeks");
            $beforeDay = (date("Y-m-d G:i:s", $d));

            $query = 'SELECT COUNT(employee_id) 
                      FROM `ohrm_attendance_record` 
                      WHERE punch_in_utc_time BETWEEN ? AND ?';
            $result = $this->getInstanceDatabaseAccessUtility()->fetchColumn($query, [$beforeDay, $triggeredDate]);
            return number_format((int)$result);

        } else {
            return 'N/A';
        }
    }

    /**
     * @throws Exception
     */
    public function getNoOfPunchInsBreakDown($triggeredDate, $beforeDay, $allMonths)
    {
        $query = "SELECT DATE_FORMAT(`punch_in_utc_time`,'%x%m'),COUNT(employee_id) 
                  FROM `ohrm_attendance_record` 
                  WHERE DATE_FORMAT(`punch_in_utc_time`,'%x-%m') BETWEEN ? AND ? 
                  GROUP BY DATE_FORMAT(`punch_in_utc_time`,'%x%m')";

        $result = $this->getInstanceDatabaseAccessUtility()->fetchKeyValuePairs($query, [$beforeDay, $triggeredDate]);
        if (sizeof($result) == 0) {
            return 'no data found';

        }
        $finalArray = TimeDataHelper::instance()->fillArrayWithAllKeys($result, $allMonths);
        $arrayForReturn = TimeDataHelper::instance()->getFormattedKeys($finalArray, 'months');

        return ($arrayForReturn);

    }

    /**
     * @throws Exception
     */
    public function getNoOfDistinctEmployeesPunchedInsBreakDown($triggeredDate, $beforeDay, $allMonths)
    {
        $query = "SELECT DATE_FORMAT(`punch_in_utc_time`,'%x%m'),COUNT(DISTINCT employee_id) 
                  FROM `ohrm_attendance_record` 
                  WHERE DATE_FORMAT(`punch_in_utc_time`,'%x-%m') BETWEEN ? AND ? 
                  GROUP BY DATE_FORMAT(`punch_in_utc_time`,'%x%m')";

        $result = $this->getInstanceDatabaseAccessUtility()->fetchKeyValuePairs($query, [$beforeDay, $triggeredDate]);
        if (sizeof($result) == 0) {
            return 'no data found';

        }
        $finalArray = TimeDataHelper::instance()->fillArrayWithAllKeys($result, $allMonths);
        $arrayForReturn = TimeDataHelper::instance()->getFormattedKeys($finalArray, 'months');

        return ($arrayForReturn);

    }

    /**
     * @throws Exception
     */
    public function getNoOfUniquePunchIns($noOfWeeks)
    {
        if ($this->getInstanceDatabaseAccessUtility()->tableExists('ohrm_attendance_record')) {
            $triggeredDate = (date("Y-m-d"));
            $d = strtotime("-" . $noOfWeeks . "Weeks");
            $beforeDay = (date("Y-m-d", $d));

            $query = 'SELECT COUNT(DISTINCT employee_id) 
                      FROM `ohrm_attendance_record` 
                      WHERE punch_in_utc_time BETWEEN ? AND ?';

            return $this->getInstanceDatabaseAccessUtility()->fetchColumn($query, [$beforeDay, $triggeredDate]);
        } else {
            return 'N/A';
        }
    }


}
<?php

namespace OrangeHRM\DevOps\usageStats;

use Exception;
use OrangeHRM\DevOps\helper\TimeDataHelper;

class ReportUsageAnalyzer extends DataAnalyzer
{

    /**
     * @throws Exception
     */
    public function getResult($futureDate, $beforeDay, $allMonths): array
    {

        $resultArray = [];
        $detailedViewData = [];

        $stdReportIds = [];
        $userDefinedReportIds = [];
        $customizedReportIds = [];

        try {
            $stdReportIds = $this->getStdReportsIds();
            $resultArray['no-of-standard-reports'] = count($stdReportIds);
            $resultArray['usage-of-standard-reports'] = $this->calculateTimesReportAccessed($stdReportIds);
        } catch (Exception $e) {
            $resultArray['no-of-standard-reports'] = 'N/A';
            $resultArray['usage-of-standard-reports'] = 'N/A';
        }

        try {
            $userDefinedReportIds = $this->getUserDefinedReportIds();
            $resultArray['no-of-user-defined-reports'] = count($userDefinedReportIds);
            $resultArray['usage-of-user-defined-reports'] = $this->calculateTimesReportAccessed($userDefinedReportIds);
            $resultArray['no-of-user-defined-reports-created'] = [
                '13-weeks' => $this->countReportsCreatedInLastWeeks(13, $userDefinedReportIds),
                '26-weeks' => $this->countReportsCreatedInLastWeeks(26, $userDefinedReportIds),
                '52-weeks' => $this->countReportsCreatedInLastWeeks(52, $userDefinedReportIds),
            ];
            $userDefinedReportsCreationBreakdown = $this->getReportsCreationBreakdown($beforeDay, $futureDate, $allMonths, $userDefinedReportIds);
            $detailedViewData['user-defined-created-distribution-bar-chart'] = [
                'dataSet' => $userDefinedReportsCreationBreakdown,
                'xAxis' => 'Month',
                'yAxis' => 'Count',
            ];
            $detailedViewData['user-defined-created-distribution-bar-chart-converted'] = [
                'dataSet' => $this->convertDataForGraph($userDefinedReportsCreationBreakdown),
            ];
        } catch (Exception $e) {
            $resultArray['no-of-user-defined-reports'] = 'N/A';
            $resultArray['usage-of-user-defined-reports'] = 'N/A';
            $resultArray['no-of-user-defined-reports-created'] = ['13-weeks' => 'N/A', '26-weeks' => 'N/A', '52-weeks' => 'N/A'];
            $detailedViewData['user-defined-created-distribution-bar-chart'] = ['dataSet' => [], 'xAxis' => 'Month', 'yAxis' => 'Count'];
            $detailedViewData['user-defined-created-distribution-bar-chart-converted'] = ['dataSet' => []];
        }

        try {
            $customizedReportIds = $this->getCustomizedReportIds();
            $resultArray['no-of-custom-reports'] = count($customizedReportIds);
            $resultArray['usage-of-custom-reports'] = $this->calculateTimesReportAccessed($customizedReportIds);
        } catch (Exception $e) {
            $resultArray['no-of-custom-reports'] = 'N/A';
            $resultArray['usage-of-custom-reports'] = 'N/A';
        }

        try {
            $formattedBreakdown = $this->formatBreakdown([
                'std' => empty($stdReportIds) ? [] : $this->getReportUsageBreakdown($stdReportIds, $allMonths),
                'user-defined' => empty($userDefinedReportIds) ? [] : $this->getReportUsageBreakdown($userDefinedReportIds, $allMonths),
                'custom' => empty($customizedReportIds) ? [] : $this->getReportUsageBreakdown($customizedReportIds, $allMonths),
            ], $allMonths);

            $detailedViewData['reports-generation-distribution-bar-chart'] = [
                'dataSet' => $formattedBreakdown,
                'xAxis' => 'Month',
                'yAxis' => 'Count',
            ];
            $detailedViewData['reports-generation-distribution-bar-chart-converted'] = [
                'dataSet' => $this->convertDataForGraph($formattedBreakdown),
            ];

        } catch (Exception $e) {
            $detailedViewData['reports-generation-distribution-bar-chart'] = ['dataSet' => [], 'xAxis' => 'Month', 'yAxis' => 'Count'];
            $detailedViewData['reports-generation-distribution-bar-chart-converted'] = ['dataSet' => []];
        }

        $resultArray['no-of-reports-schedules'] = $this->getReportScheduleCount();
        $detailedViewData['reports-schedule-bar-chart'] = [
            'dataSet' => $this->getActiveScheduleReportUsageBreakdown($allMonths),
            'xAxis' => 'Month',
            'yAxis' => 'Count',
        ];

        $detailedViewData['reports-schedule-bar-chart-converted'] = [
            'dataSet' => $this->convertDataForGraph($this->getActiveScheduleReportUsageBreakdown($allMonths)),
        ];


        $resultArray['detailed-view-data'] = $detailedViewData;

        return $resultArray;
    }

    protected function convertDataForGraph($dataList): array
    {
        $dataForGraph = [];
        if (is_array($dataList)) {
            foreach ($dataList as $data) {
                $dataForGraph[] = [$data['month'], (isset($data['count']) ? (int)$data['count']: 0)];
            }
        }
        return $dataForGraph;
    }

    /**
     * @throws Exception
     */
    protected function getStdReportsIds(): array
    {
        if (!$this->isReportCountCalculationFeasible()) {
            throw new Exception('Report count calculation is not feasible');
        }

        $query = "SELECT `id` FROM `ohrm_advanced_report`
                  WHERE created_by = (SELECT id FROM ohrm_user WHERE user_name = 'System') 
                    AND unique_name NOT IN (SELECT template_name FROM ohrm_report_definition_master_data);";
        return $this->getInstanceDatabaseAccessUtility()->fetchScalar($query);
    }

    /**
     * @throws Exception
     */
    protected function getUserDefinedReportIds(): array
    {
        if (!$this->isReportCountCalculationFeasible()) {
            throw new Exception('Report count calculation is not feasible');
        }

        try {
            $uniqueNamePrefixFilter = $this->getUniqueNamePrefixFilterClause();
        } catch (Exception $e) {
            throw new Exception('No unique name prefix found');
        }

        $query = "SELECT `id` FROM `ohrm_advanced_report` 
             WHERE ({$uniqueNamePrefixFilter}) 
               AND created_by != (SELECT id FROM ohrm_user WHERE user_name = 'System')";

        return $this->getInstanceDatabaseAccessUtility()->fetchScalar($query);
    }

    /**
     * @throws Exception
     */
    protected function countReportsCreatedInLastWeeks(int $noOfWeeks, array $reportIds)
    {
        if (!$this->isReportCountCalculationFeasible()) {
            return 'N/A';
        }

        $triggeredDate = date('Y-m-d');
        $beforeDay = (date('Y-m-d', strtotime("-{$noOfWeeks} weeks")));

        $placeholders = implode(',', array_fill(0, count($reportIds), '?'));

        $query = "SELECT COUNT(*) FROM `ohrm_advanced_report` 
                WHERE id IN ($placeholders) AND DATE(`created_at`) BETWEEN ? AND ?";

        return $this->getInstanceDatabaseAccessUtility()->fetchColumn($query, array_merge($reportIds, [
            $beforeDay,
            $triggeredDate,
        ]));
    }

    /**
     * @throws Exception
     */
    protected function getReportsCreationBreakdown($startDate, $endDate, array $allMonths, array $reportIds): array
    {
        if (!$this->isReportCountCalculationFeasible()) {
            throw new Exception('Report created breakdown calculation is not feasible');
        }

        $placeholders = implode(',', array_fill(0, count($reportIds), '?'));
        $query = "SELECT DATE_FORMAT(`created_at`,'%x%m'), COUNT(id) FROM `ohrm_advanced_report` 
                                                   WHERE id IN ({$placeholders}) AND DATE(`created_at`) BETWEEN ? AND ? 
                                                   GROUP BY DATE_FORMAT(`created_at`,'%x%m')";

        $result = $this->getInstanceDatabaseAccessUtility()->fetchKeyValuePairs($query, array_merge($reportIds, [$startDate, $endDate]));;

        if (empty($result)) {
            return [];
        }

        $finalArray = TimeDataHelper::instance()->fillArrayWithAllKeys($result, $allMonths);
        return TimeDataHelper::instance()->getFormattedKeys($finalArray, 'months');
    }

    /**
     * @throws Exception
     */
    protected function getCustomizedReportIds(): array
    {
        if (!$this->isReportCountCalculationFeasible()) {
            throw new Exception('Report count calculation is not feasible');
        }

        try {
            $uniqueNamePrefixFilter = $this->getUniqueNamePrefixFilterClause();
        } catch (Exception $e) {
            throw new Exception('No unique name prefix found');
        }

        $query = "SELECT `id` FROM `ohrm_advanced_report` 
             WHERE NOT ({$uniqueNamePrefixFilter}) 
               AND created_by != (SELECT id FROM ohrm_user WHERE user_name = 'System')";

        return $this->getInstanceDatabaseAccessUtility()->fetchScalar($query);
    }

    /**
     * @throws Exception
     */
    protected function calculateTimesReportAccessed(array $reportIds): int
    {
        if (!$this->getInstanceDatabaseAccessUtility()->tableExists('ohrm_report_access_log')) {
            throw new Exception('Report access log table does not exist');
        }

        if (empty($reportIds)) {
            throw new Exception('No report IDs found');
        }

        $placeholders = implode(',', array_fill(0, count($reportIds), '?'));

        $query = "SELECT COUNT(id) FROM ohrm_report_access_log WHERE report_id IN ({$placeholders});";
        return (int)$this->getInstanceDatabaseAccessUtility()->fetchColumn($query, $reportIds);
    }

    /**
     * @throws Exception
     */
    protected function getReportUsageBreakdown(array $reportIds, array $allMonths = []): array
    {
        if (!$this->getInstanceDatabaseAccessUtility()->tableExists('ohrm_report_access_log')) {
            throw new Exception('Report access log table does not exist');;
        }

        if (empty($reportIds)) {
            return [];
        }

        $triggeredDate = date('Y-m-d');
        $beforeDay = date('Y-m-d', strtotime("-52 weeks"));

        $placeholders = implode(',', array_fill(0, count($reportIds), '?'));
        $query = "SELECT DATE_FORMAT(`updated_at`, '%x-%m'), COUNT(*)
FROM ohrm_report_access_log
WHERE report_id IN ({$placeholders})
  AND DATE(`updated_at`) BETWEEN ? AND ?
GROUP BY DATE_FORMAT(`updated_at`, '%x-%m')
ORDER BY `updated_at`";

        $result = $this->getInstanceDatabaseAccessUtility()->fetchKeyValuePairs($query, array_merge($reportIds, [$beforeDay, $triggeredDate]));
        $finalArray = TimeDataHelper::instance()->fillArrayWithAllKeys($result, $allMonths);
        return TimeDataHelper::instance()->getFormattedKeys($finalArray, 'months');
    }

    /**
     * @throws Exception
     */
    protected function getReportScheduleCount(): int
    {
        if (!$this->getInstanceDatabaseAccessUtility()->tableExists('ohrm_report_schedule')) {
            return 0;
        }

        return (int)$this->getInstanceDatabaseAccessUtility()->fetchColumn("SELECT COUNT(*) FROM ohrm_report_schedule_report");
    }

    /**
     * @throws Exception
     * @todo Simplify this logic to reduce unwanted inner loops
     */
    protected function formatBreakdown(array $breakdown, array $allMonths): array
    {
        $dataSet = [];
        foreach ($allMonths as $month) {
            $yearMonthString = date('Y-M', strtotime($month . '-01'));
            $dataSet[] = [
                'month' => $yearMonthString,
                'standardReportsUsage' => $this->getCountByMonth($breakdown['std'], $yearMonthString),
                'userDefinedReportsUsage' => $this->getCountByMonth($breakdown['user-defined'], $yearMonthString),
                'customizedReportsUsage' => $this->getCountByMonth($breakdown['custom'], $yearMonthString),
            ];
        }

        return $dataSet;
    }

    protected function getCountByMonth(array $usageData, $month): int
    {
        $counts = array_column($usageData, 'count', 'month');
        return isset($counts[$month]) ? (int)$counts[$month] : 0;
    }

    /**
     * @throws Exception
     */
    protected function getActiveScheduleReportUsageBreakdown($allMonths): array
    {
        $isFeasible = $this->getInstanceDatabaseAccessUtility()->tableExists('ohrm_report_schedule')
            && $this->getInstanceDatabaseAccessUtility()->columnExists('status', 'ohrm_report_schedule');

        if (!$isFeasible) {
            return [];
        }

        $triggeredDate = date('Y-m-d');
        $beforeDay = (date('Y-m-d', strtotime('-52 weeks')));

        $query = "SELECT DATE_FORMAT(`created_at`,'%x%m') AS month_key, COUNT(*) AS active_count FROM ohrm_report_schedule
          WHERE  DATE_FORMAT(`created_at`,'%x-%m') BETWEEN ? AND ? AND status = 1 
          GROUP BY month_key";


        $result = $this->getInstanceDatabaseAccessUtility()->fetchKeyValuePairs($query, [$beforeDay, $triggeredDate]);
        if (empty($result)) {
            return [];
        }

        $finalArray = TimeDataHelper::instance()->fillArrayWithAllKeys($result, $allMonths);
        $returnValue = TimeDataHelper::instance()->getFormattedKeys($finalArray, 'months');

        return $returnValue;
    }

    /**
     * @throws Exception
     */
    protected function getUniqueNamePrefixFilterClause(): string
    {
        $getUniqueNamePrefixQuery = "SELECT CONCAT(prefix, '.') FROM `ohrm_report_definition_master_data`;";
        $uniqueNamePrefixes = $this->getInstanceDatabaseAccessUtility()->fetchScalar($getUniqueNamePrefixQuery);
        if (empty($uniqueNamePrefixes)) {
            throw new Exception('No unique name prefix found');
        }

        $likeClauses = array_map(function ($item) {
            return "unique_name LIKE '%{$item}%'";
        }, $uniqueNamePrefixes);

        return implode(' OR ', $likeClauses);
    }

    /**
     * @throws Exception
     */
    protected function isReportCountCalculationFeasible(): bool
    {
        return $this->getInstanceDatabaseAccessUtility()->tableExists('ohrm_advanced_report')
            && $this->getInstanceDatabaseAccessUtility()->columnExists('created_by', 'ohrm_advanced_report');
    }

}
<?php

namespace OrangeHRM\DevOps\usageStats;

use Exception;
use OrangeHRM\DevOps\helper\TimeDataHelper;

class RequestDeskAnalyzer extends DataAnalyzer
{

    const EMPLOYEE_MANAGEMENT_REQUEST_TEMPLATE = 'Employee Management';
    const GENERAL_REQUEST_TEMPLATE = 'General Request';
    const HIRING_REQUEST_TEMPLATE = 'Hiring Requisition';

    public function getResult($triggeredDate, $beforeDay, $pastMonths)
    {
        $resultArray = [];
        $noOfRequestsSubmitted = [];
        $noOfRequestsSubmitted['13-weeks'] = $this->getNoOfRequestsSubmitted(13);
        $noOfRequestsSubmitted['26-weeks'] = $this->getNoOfRequestsSubmitted(26);
        $noOfRequestsSubmitted['52-weeks'] = $this->getNoOfRequestsSubmitted(52);

        $detailedViewData = [];

        $detailedViewData['request-count-distribution-table-multigraph'] = [
            'dataSet' => $this->getNoOfRequestsSubmittedByMonth($triggeredDate, $beforeDay, $pastMonths),
            'xAxis' => 'Month',
            'yAxis' => 'Count',
        ];

        $resultArray['no-of-request-types'] = $this->getNoOfRequestTypes();
        try {
            $resultArray['no-of-general-request-types'] = $this->getNoOfRequestTypesByTemplateId($this->getTemplateIdUsingTemplateName(self::GENERAL_REQUEST_TEMPLATE));
            $resultArray['no-of-hiring-request-types'] = $this->getNoOfRequestTypesByTemplateId($this->getTemplateIdUsingTemplateName(self::HIRING_REQUEST_TEMPLATE));
            $resultArray['no-of-employee-management-request-types'] = $this->getNoOfRequestTypesByTemplateId($this->getTemplateIdUsingTemplateName(self::EMPLOYEE_MANAGEMENT_REQUEST_TEMPLATE));
        } catch (Exception $e) {
            $resultArray['no-of-general-request-types'] = 'N/A';
            $resultArray['no-of-hiring-request-types'] = 'N/A';
            $resultArray['no-of-employee-management-request-types'] = 'N/A';
        }
        $resultArray['no-of-approve-required-request-types'] = $this->getNoOfApproveRequiredRequestTypes(1);
        $resultArray['no-of-approve-not-required-request-types'] = $this->getNoOfApproveRequiredRequestTypes(0);
        $resultArray['no-of-requests-submited'] = $noOfRequestsSubmitted;
        $resultArray['detailed-view-data'] = $detailedViewData;

        return $resultArray;

    }

    /**
     * @throws Exception
     */
    public function getNoOfRequestTypes(): string
    {
        $configTable = $this->getInstanceDatabaseAccessUtility()->tableExists('ohrm_requestdesk_request_types');
        if ($configTable == 1) {
            $query = 'SELECT COUNT(id) FROM `ohrm_requestdesk_request_types`;';
            $result = $this->getInstanceDatabaseAccessUtility()->fetchColumn($query);
            return number_format((int)$result);
        } else {
            return 'N/A';
        }
    }

    public function getNoOfRequestTypesByTemplateId($templateId): string
    {

        if (!$this->getInstanceDatabaseAccessUtility()->tableExists('ohrm_requestdesk_request_types')) {
            return 'N/A';
        }

        $query = 'SELECT COUNT(id) FROM `ohrm_requestdesk_request_types` WHERE `template_id` = ?;';
        return (string)$this->getInstanceDatabaseAccessUtility()->fetchColumn($query, [$templateId]);
    }


    /**
     * @throws Exception
     */
    public function getTemplateIdUsingTemplateName($templateName): int
    {
        if (!$this->getInstanceDatabaseAccessUtility()->tableExists('ohrm_requestdesk_request_type_template')) {
            throw new Exception("Table does not exist: ohrm_requestdesk_request_type_template");
        }

        $query = "SELECT id FROM `ohrm_requestdesk_request_type_template` WHERE `name` = ?;";
        $result = $this->getInstanceDatabaseAccessUtility()->fetchColumn($query, [$templateName]);

        return (int)$result;

    }


    /**
     * @throws Exception
     */
    public function getNoOfApproveRequiredRequestTypes($param): string
    {
        $configTable = $this->getInstanceDatabaseAccessUtility()->tableExists('ohrm_requestdesk_request_types');
        if ($configTable == 1) {
            $query = 'SELECT COUNT(id) FROM `ohrm_requestdesk_request_types` WHERE `approver_required` = :param;';
            $result = $this->getInstanceDatabaseAccessUtility()->fetchColumn($query, array(':param' => $param));
            return number_format((int)$result);
        } else {
            return 'N/A';
        }
    }

    /**
     * @throws Exception
     */
    public function getNoOfRequestsSubmitted($noOfWeeks): string
    {
        if (!$this->getInstanceDatabaseAccessUtility()->tableExists('ohrm_request')) {
            return 'N/A';
        }

        $triggeredDate = date("Y-m-d G:i:s");
        $d = strtotime("-" . $noOfWeeks . "Weeks");
        $beforeDay = (date("Y-m-d G:i:s", $d));

        $query = 'SELECT COUNT(id) FROM `ohrm_request` WHERE `submitted_date` BETWEEN ? AND ?';
        $result = $this->getInstanceDatabaseAccessUtility()->fetchColumn($query, [$beforeDay, $triggeredDate]);
        return number_format((int)$result);

    }

    /**
     * @throws Exception
     */
    public function getNoOfRequestsSubmittedByMonth($triggeredDate, $beforeDay, $allMonths)
    {

        if (!$this->getInstanceDatabaseAccessUtility()->tableExists('ohrm_request')) {
            return 'no data found';
        }

        try {
            $resultTotalRequestsWithKeys = $this->getMonthWiseTotalRequestDistribution($beforeDay, $triggeredDate, $allMonths);
            $resultGeneralRequestsWithKeys = $this->getMonthWiseRequestTypeDistributionByTemplate($beforeDay, $triggeredDate, $allMonths, self::GENERAL_REQUEST_TEMPLATE);
            $resultHiringRequestsWithKeys = $this->getMonthWiseRequestTypeDistributionByTemplate($beforeDay, $triggeredDate, $allMonths, self::HIRING_REQUEST_TEMPLATE);
            $resultEmployeeManagementRequestsWithKeys = $this->getMonthWiseRequestTypeDistributionByTemplate($beforeDay, $triggeredDate, $allMonths, self::EMPLOYEE_MANAGEMENT_REQUEST_TEMPLATE);
        } catch (Exception $e) {
            return 'no data found';
        }

        $iteratorCount = [];
        $iteratorGeneralCount = [];
        $iteratorHiringCount = [];
        $iteratorEmployeeManagementCount = [];
        foreach ($allMonths as $month) {
            $formattedMonth = substr($month, 0, 4) . "-" . substr($month, 4, 2);
            $iteratorCount[$formattedMonth] = array_key_exists($month, $resultTotalRequestsWithKeys) ? $resultTotalRequestsWithKeys[$month] : "0";
            $iteratorGeneralCount[$formattedMonth] = array_key_exists($month, $resultGeneralRequestsWithKeys) ? $resultGeneralRequestsWithKeys[$month] : "0";
            $iteratorHiringCount[$formattedMonth] = array_key_exists($month, $resultHiringRequestsWithKeys) ? $resultHiringRequestsWithKeys[$month] : "0";
            $iteratorEmployeeManagementCount[$formattedMonth] = array_key_exists($month, $resultEmployeeManagementRequestsWithKeys) ? $resultEmployeeManagementRequestsWithKeys[$month] : "0";
        }

        $formattedIteratorCount = TimeDataHelper::instance()->getFormattedKeysForMonth($iteratorCount);
        $formattedIteratorGeneralCount = TimeDataHelper::instance()->getFormattedKeysForMonth($iteratorGeneralCount);
        $formattedIteratorHiringCount = TimeDataHelper::instance()->getFormattedKeysForMonth($iteratorHiringCount);
        $formattedIteratorEmployeeManagementCount = TimeDataHelper::instance()->getFormattedKeysForMonth($iteratorEmployeeManagementCount);

        $resultForMultigraph = [];

        foreach ($formattedIteratorCount as $key => $val) {

            $resultForMultigraph[$key] = [
                'Month' => (string)$val['month'],
                'generalRequests' => (string)array_key_exists($key, $formattedIteratorGeneralCount) ? $formattedIteratorGeneralCount[$key]['count'] : "0",
                'hiringRequests' => (string)array_key_exists($key, $formattedIteratorHiringCount) ? $formattedIteratorHiringCount[$key]['count'] : "0",
                'employeeManagementRequests' => (string)array_key_exists($key, $formattedIteratorEmployeeManagementCount) ? $formattedIteratorEmployeeManagementCount[$key]['count'] : "0",
                'totalRequests' => (string)array_key_exists('count', $val) ? $val['count'] : "0",
            ];
        }

        return ($resultForMultigraph);
    }

    /**
     * @throws Exception
     */
    protected function getMonthWiseRequestTypeDistributionByTemplate($beforeDay, $triggeredDate, $allMonths, $templateName): ?array
    {

        $query = "SELECT DATE_FORMAT(r.`submitted_date`, '%Y%m'), COUNT(*) 
        FROM ohrm_request AS r
        WHERE r.request_type_id IN (
            SELECT rt.id FROM `ohrm_requestdesk_request_types` AS rt
            WHERE rt.template_id = ?)
            AND `submitted_date` BETWEEN ? AND ? 
        GROUP BY DATE_FORMAT(`submitted_date`, '%Y-%m') 
        ORDER BY submitted_date;";

        $distribution = $this->getInstanceDatabaseAccessUtility()->fetchKeyValuePairs($query, [
            $this->getTemplateIdUsingTemplateName($templateName),
            $beforeDay,
            $triggeredDate,
        ]);
        return TimeDataHelper::instance()->fillArrayWithAllKeys($distribution, $allMonths);
    }

    /**
     * @throws Exception
     */
    protected function getMonthWiseTotalRequestDistribution($beforeDay, $triggeredDate, $allMonths): ?array
    {
        $query = "SELECT DATE_FORMAT(`submitted_date`, '%Y%m'), COUNT(*) 
        FROM ohrm_request 
        WHERE `submitted_date` BETWEEN ? AND ? 
        GROUP BY DATE_FORMAT(`submitted_date`, '%Y-%m') 
        ORDER BY submitted_date;";

        $distribution = $this->getInstanceDatabaseAccessUtility()->fetchKeyValuePairs($query, [$beforeDay, $triggeredDate]);
        return TimeDataHelper::instance()->fillArrayWithAllKeys($distribution, $allMonths);
    }
}
<?php

namespace OrangeHRM\DevOps\usageStats;

use OrangeHRM\DevOps\utility\CronExpressionDecoderUtility;
use Exception;
use stdClass;
use Symfony\Component\Yaml\Yaml;

class ScheduledTasksConfigurationsCheck extends AbstractDiagnosticsCheck
{

    protected CronExpressionDecoderUtility $cronExpressionDecoder;
    protected array $standardCronTaskChecks = [
        'Process Notification Cron' => [
            'match-expression' => 'php\s\{1,\}symfony\s\{1,\}orangehrm:ProcessNotification',
            'module-name' => 'notification',
            'plugin-directory' => 'orangehrmEventNotificationsPlugin',
            'file-path' => 'lib/task/orangehrmProcessNotificationTask.class.php',
        ],
        'Send Email Cron' => [
            'match-expression' => 'php\s\{1,\}symfony\s\{1,\}orangehrm:send-email',
            'module-name' => 'core',
            'plugin-directory' => ['orangehrmEmailQueuePlugin', 'orangehrmCorePlugin'],
            'file-path' => 'lib/task/orangehrmSendEmailTask.class.php',
        ],
        'Resume Text Extractor Cron' => [
            'match-expression' => 'php\s\{1,\}symfony\s\{1,\}orangehrm:InstallTextExtractor',
            'module-name' => 'recruitment',
            'plugin-directory' => 'orangehrmRecruitmentSearchInsideResumePlugin',
            'file-path' => 'lib/task/InstallTextExtractorTask.class.php',
        ],
        'Employees on Leave Notification Cron' => [
            'match-expression' => 'php\s\{1,\}symfony\s\{1,\}orangehrm:ProcessLeaveNotification',
            'module-name' => 'leave',
            'plugin-directory' => 'orangehrmEmployeeOnLeaveNotificationPlugin',
            'file-path' => 'lib/task/ProcessLeaveNotificationTask.class.php',
        ],
        'On-boarding Quick Notification Cron' => [
            'match-expression' => 'php\s\{1,\}symfony\s\{1,\}orangehrm:OnBoardingQuickNotification',
            'module-name' => 'onboarding',
            'plugin-directory' => 'orangehrmOnboardingPlugin',
            'file-path' => 'lib/task/OnBoardingQuickNotificationTask.class.php',
        ],
        'On-boarding Notification Cron' => [
            'match-expression' => 'php symfony\s\{1,\}orangehrm:OnBoardingNotification',
            'module-name' => 'onboarding',
            'plugin-directory' => 'orangehrmOnboardingPlugin',
            'file-path' => 'lib/task/OnBoardingNotificationTask.class.php',
        ],
    ];

    function getCronExpressionDecoder(): CronExpressionDecoderUtility
    {
        if (!isset($this->cronExpressionDecoder)) {
            $this->cronExpressionDecoder = new CronExpressionDecoderUtility();
        }
        return $this->cronExpressionDecoder;
    }

    function setCronExpressionDecoder(CronExpressionDecoderUtility $cronExpressionDecoder)
    {
        $this->cronExpressionDecoder = $cronExpressionDecoder;
    }

    public function getResult(): stdClass
    {
        $result = new stdClass();

        $result->countrywiseLeaveAccrualSchedule = $this->fetchCountryWiseLeaveAccrualSchedule();
        $result->leaveAccrualCronTimeInterval = $this->fetchLeaveAccrualCronTimeInterval();
        $result->lastLeaveCarriedForwardDate = $this->fetchLastLeaveCarriedForwardDate();
        $result->lastLeaveAccrualDate = $this->fetchLastLeaveAccrualDate();
        $result->otherStandardCronSchedule = $this->fetchOtherStandardCronSchedule();
        $result->scheduledTasks = $this->fetchScheduledTasks();
        $result->customCronSchedule = $this->fetchCustomCronSchedule();

        $result->errorProperties = $this->errorProperties;

        return $result;
    }


    /**
     * @throws Exception
     */
    protected final function fetchScheduledTasks(): array
    {
        $query = "SELECT ost.name AS name, 
                  ost.schedule AS schedule, 
                  MAX(ocja.start_time_stamp) AS last_run, 
                  IF(ost.status = 1, 'YES', 'NO') AS status 
                  FROM ohrm_symfony_task ost LEFT JOIN ohrm_cron_job_audittrail ocja ON ost.id = ocja.task_id 
                  WHERE (ost.schedule is not null) GROUP BY ost.id ORDER BY ost.name";
        $result = $this->getInstanceDatabaseAccessUtility()->fetchAll($query);
        foreach ($result as $id => $record) {
            $result[$id]['schedule'] = $this->getCronExpressionDecoder()->decode($record['schedule']);
        }
        return $result;
    }

    protected final function fetchVersion(): string
    {
        $appConfig = Yaml::parseFile($this->params->getInstallationPath() . '/symfony/apps/orangehrm/config/app.yml');
        return $appConfig['all']['version'];
    }

    /**
     * @throws Exception
     */
    protected final function fetchCountryWiseLeaveAccrualSchedule(): ?array
    {

        if ($this->getInstanceDatabaseAccessUtility()->columnExists('scheduled_time', 'ohrm_leave_accrual_time_schedule')) {
            $query = "
SELECT 
 c.cou_name AS `country`, 
 IFNULL(l.name, 'All Locations / Default') AS `location`,
 CONCAT(s.scheduled_time, ' ', @@system_time_zone) AS `scheduledTime`
FROM `ohrm_leave_accrual_time_schedule` AS s
LEFT JOIN `hs_hr_country` AS c ON c.cou_code = s.country_code
LEFT JOIN `ohrm_location` AS l ON l.id = s.location_code;            
";
        } elseif ($this->getInstanceDatabaseAccessUtility()->columnExists('accrual_time', 'ohrm_leave_accrual_time_schedule')) {
            $query = "
SELECT 
 c.cou_name AS `country`, 
 IFNULL(l.name, 'All Locations / Default') AS `location`,
 IF (s.accrual_time = s.carry_forward_time, CONCAT(s.accrual_time, ' ', @@system_time_zone), CONCAT(s.accrual_time, ' / ', s.carry_forward_time, ' ', @@system_time_zone)) AS `scheduledTime`
FROM `ohrm_leave_accrual_time_schedule` AS s
LEFT JOIN `hs_hr_country` AS c ON c.cou_code = s.country_code
LEFT JOIN `ohrm_location` AS l ON l.id = s.location_code;            
";

        } else {
            $query = "
SELECT 
 '-' AS `country`, 
 '-' AS `location`,
 '-' AS `scheduledTime`
FROM `ohrm_leave_accrual_time_schedule`;            
";

        }

        $result = $this->getInstanceDatabaseAccessUtility()->fetchAll($query);

        if (empty($result)) {
            $this->errorProperties[] = [
                'bindParam' => 'countrywiseLeaveAccrualSchedule',
                'node' => 'None',
            ];
            $result = [[
                'country' => 'None',
                'location' => 'N/A',
                'scheduledTime' => 'N/A',
            ]];
        }

        return $result;
    }

    /**
     * @throws Exception
     */
    protected final function fetchLeaveAccrualCronTimeInterval(): string
    {
        $output = $this->searchCronEntry("php\s\{1,\}symfony\s\{1,\}LeaveAccrualAndCarryForward");

        if (count($output) === 1) {
            list($cronEntry) = $output;
            $portions = preg_split('/\s+/', $cronEntry);
            $cronExpression = implode(' ', array_splice($portions, 0, 5));
            return $this->getCronExpressionDecoder()->decode($cronExpression);
        } else {
            $leaveAccrualCronTimeInterval = 'More than one cron entry found';
        }

        return $leaveAccrualCronTimeInterval;
    }

    /**
     *
     * @throws Exception
     * @todo Change the return type to \DateTime
     */
    protected final function fetchLastLeaveCarriedForwardDate(): ?string
    {
        $query = "
SELECT 
  DATE(MAX(e.`credited_date`)) 
FROM `ohrm_leave_entitlement` e 
LEFT JOIN `ohrm_leave_entitlement_type` t ON t.`id` = e.`entitlement_type`
WHERE t.`name` IN ('Carried Forward', 'Brought Forward');            
            ";
        return $this->getInstanceDatabaseAccessUtility()->fetchColumn($query);
    }


    /**
     * @throws Exception
     */
    protected final function fetchLastLeaveAccrualDate(): ?string
    {
        $query = "
SELECT 
  DATE(MAX(e.`credited_date`)) 
FROM `ohrm_leave_entitlement` e 
LEFT JOIN `ohrm_leave_entitlement_type` t ON t.`id` = e.`entitlement_type`
WHERE t.`name` = 'Accrual';
";
        return $this->getInstanceDatabaseAccessUtility()->fetchColumn($query);
    }

    public function versionCompare()
    {
        $version1 = '6.3.5';
        $operator = '<';
        $version2 = $this->fetchVersion();
        $_fv = intval(trim(str_replace('.', '', $version1)));
        $_sv = intval(trim(str_replace('.', '', $version2)));

        if (strlen($_fv) > strlen($_sv)) {
            $_sv = str_pad($_sv, strlen($_fv), 0);
        }

        if (strlen($_fv) < strlen($_sv)) {
            $_fv = str_pad($_fv, strlen($_sv), 0);
        }

        return version_compare(( string )$_fv, ( string )$_sv, $operator);
    }

    protected function fixForSingleCron()
    {
        if ($this->versionCompare())
            $this->standardCronTaskChecks = [
                'Single Cron' => [
                    'match-expression' => 'php symfony\s\{1,\}orangehrm:cron',
                    'module-name' => 'core',
                    'plugin-directory' => 'orangehrmCorePlugin',
                    'file-path' => 'lib/task/orangehrmCronTask.class.php',
                ],
            ];
    }

    /**
     * @throws Exception
     */
    protected final function fetchOtherStandardCronSchedule(): array
    {

        $result = [];
        $this->fixForSingleCron();
        foreach ($this->standardCronTaskChecks as $name => $checkParams) {

            $status = 'Undetermined';
            $interval = 'N/A';

            $output = $this->searchCronEntry($checkParams['match-expression']);

            if (count($output) === 1) {
                list($cronEntry) = $output;
                $portions = preg_split('/\s+/', $cronEntry);
                $cronExpression = implode(' ', array_splice($portions, 0, 5));
                $interval = $this->getCronExpressionDecoder()->decode($cronExpression);
                $status = $this->validateCronTask($checkParams['module-name'], $checkParams['plugin-directory'], $checkParams['file-path']);
            } elseif (count($output) === 0) {
                $status = $this->getStatusOnMissingCronTask($checkParams['module-name'], $checkParams['plugin-directory'], $checkParams['file-path']);
            } else {
                $status = 'More than one cron entry found';
            }

            $result[] = [
                'name' => $name,
                'status' => $status,
                'interval' => $interval,
            ];
        }

        return $result;
    }

    protected final function fetchCustomCronSchedule(): array
    {

        $command = 'crontab -l | grep "' . $this->params->getInstallationPath() . '" | grep -v "^#"';
        $this->fixForSingleCron();
        foreach ($this->standardCronTaskChecks as $checkParam) {
            $command .= ' | grep -v "' . $checkParam['match-expression'] . '"';
        }
        $command .= ' | grep -v "php\s\{1,\}symfony\s\{1,\}LeaveAccrualAndCarryForward"';

        $output = [];
        $returnVar = null;
        exec($command, $output, $returnVar);

        $result = [];

        foreach ($output as $cronEntry) {
            $portions = preg_split('/\s{1,}/', $cronEntry);
            $cronExpression = implode(' ', array_splice($portions, 0, 5));
            $cronTask = implode(' ', $portions);
            $interval = $this->getCronExpressionDecoder()->decode($cronExpression);
            $status = $this->validateCustomCronTask($cronTask);

            $result[] = [
                'name' => $cronTask,
                'status' => $status,
                'interval' => $interval,
            ];
        }

        return $result;
    }

    protected final function searchCronEntry(string $matchExpression): array
    {
        $command = 'crontab -l | grep "' . $this->params->getInstallationPath() . '" | grep -v "^#" | grep "' . $matchExpression . '"';
        $output = [];
        $returnVar = null;
        exec($command, $output, $returnVar);
        return $output;
    }

    /**
     *
     * @throws Exception
     */
    protected final function isModuleEnabled(string $moduleName): bool
    {
        $query = 'SELECT `name` FROM `ohrm_module` WHERE `name` = ? AND `status` = 1;';
        $result = $this->getInstanceDatabaseAccessUtility()->fetchColumn($query, [$moduleName]);
        return !empty($result);
    }

    /**
     * @throws Exception
     */
    protected function getStatusOnMissingCronTask(string $moduleName, $pluginDir, string $filePath): string
    {

        $status = null;

        if ($this->isModuleEnabled($moduleName)) {

            if (is_array($pluginDir)) {
                $matchedPluginDir = $pluginDir[0];

                foreach ($pluginDir as $dir) {
                    if (is_dir($this->params->getInstallationPath() . '/symfony/plugins/' . $dir . '/' . $filePath)) {
                        $matchedPluginDir = $dir;
                        break;
                    }
                }
            } else {
                $matchedPluginDir = $pluginDir;
            }

            $pluginPath = $this->params->getInstallationPath() . '/symfony/plugins/' . $matchedPluginDir;
            if (is_dir($pluginPath)) {
                if (is_file($pluginPath . '/' . $filePath)) {
                    $status = 'Cron is not set';
                } else {
                    $status = 'Not needed (Obsolete Task)';
                }
            } else {
                $status = 'Not needed (Plugin directory not available)';
            }
        } else {
            $status = 'Not needed (Module not enabled)';
        }

        return $status;
    }

    /**
     * @throws Exception
     */
    protected function validateCronTask(string $moduleName, $searchInDirectories, string $filePath): string
    {

        $status = null;

        if ($this->isModuleEnabled($moduleName)) {

            $pluginPath = null;
            if (is_array($searchInDirectories)) {
                foreach ($searchInDirectories as $pluginsDir) {
                    if (is_dir($this->params->getInstallationPath() . '/symfony/plugins/' . $pluginsDir)) {
                        $pluginPath = $this->params->getInstallationPath() . '/symfony/plugins/' . $pluginsDir;
                        break;
                    }
                }
            } else {
                if (is_dir($this->params->getInstallationPath() . '/symfony/plugins/' . $searchInDirectories)) {
                    $pluginPath = $this->params->getInstallationPath() . '/symfony/plugins/' . $searchInDirectories;
                }
            }

            if (!is_null($pluginPath)) {
                if (is_file($pluginPath . '/' . $filePath)) {
                    $status = 'OK';
                } else {
                    $status = 'Task file is missing';
                }
            } else {
                $status = 'Plugin directory is missing';
            }
        } else {
            $status = 'Module is not enabled';
        }

        return $status;
    }

    protected final function validateCustomCronTask(string $cronTask): string
    {
        $status = null;

        $command = 'echo "' . $cronTask . '" | bash -n';
        $output = [];
        $returnVar = null;
        exec($command, $output, $returnVar);

        if ($returnVar === 0) {
            $status = 'OK';
        } else {
            $status = 'Incorrect syntax';
        }

        return $status;
    }

}
<?php

namespace OrangeHRM\DevOps\usageStats;

use Exception;
use OrangeHRM\DevOps\helper\TimeDataHelper;

class TimeSheetsAnalyzer extends DataAnalyzer
{

    protected $monthwiseActiveEmployeeCount = [];

    public function setMonthwiseActiveEmployeeCount($monthwiseActiveEmployeeCount)
    {
        $this->monthwiseActiveEmployeeCount = $monthwiseActiveEmployeeCount;
    }

    public function getResult($triggeredDate, $beforeDay, $pastMonths)
    {
        $resultArray = [];
        $noOfTimeSheets = [];
        $noOfTimeSheets['13-weeks'] = $this->getNoOfTimeSheets(13);
        $noOfTimeSheets['26-weeks'] = $this->getNoOfTimeSheets(26);
        $noOfTimeSheets['52-weeks'] = $this->getNoOfTimeSheets(52);

        $detailedViewData = [];
        $detailedViewData['time-sheets-distribution-monthly-breakdown-bar-chart'] = [
            'dataSet' => $this->getNoOfPastTimeSheetsBreakDown($triggeredDate, $beforeDay, $pastMonths),
            'xAxis' => 'Month',
            'yAxis' => 'Count',
];
        $detailedViewData['time-sheets-filled-employees-distribution-monthly-breakdown-table-multigraph'] = [
            'dataSet' => $this->getNumberOfUniqueEmployeesFilledTimesheetsByMonth($triggeredDate, $beforeDay, $pastMonths),
            'xAxis' => 'Month',
            'yAxis' => 'Count',
];
        $detailedViewData['time-sheets-filled-employees-distribution-monthly-breakdown-table-multigraph-converted'] = [
            'dataSet' => $this->convertTimesheetMultiGraphDataForGraph($this->getNumberOfUniqueEmployeesFilledTimesheetsByMonth($triggeredDate, $beforeDay, $pastMonths)),
];
        $resultArray['detailed-view-data'] = $detailedViewData;
        $resultArray['no-of-time-sheets'] = $noOfTimeSheets;

        $uniqueEmployeesUsingArray = [
            '13-weeks' => $this->getUniqueEmployeesUsingTimesheets(13),
            '26-weeks' => $this->getUniqueEmployeesUsingTimesheets(26),
            '52-weeks' => $this->getUniqueEmployeesUsingTimesheets(52),
];

        $activeUserCountAnalyzer = new ActiveUserCountAnalyzer($this->params);
        $activeUserCountAnalyzer->setInstanceDatabaseAccessUtility($this->getInstanceDatabaseAccessUtility());
        $uniqueEmployeesUsingPercentageArray = $this->createPercentageArray($uniqueEmployeesUsingArray, $activeUserCountAnalyzer);

        $resultArray['no-of-unique-emps-timesheets'] = $uniqueEmployeesUsingArray;
        $resultArray['unique-emps-timesheets-percentage'] = $uniqueEmployeesUsingPercentageArray;
        $resultArray['no-of-timesheets-submitted'] = [
            '13-weeks' => $this->getUniqueEmployeesTimesheetCount(13),
            '26-weeks' => $this->getUniqueEmployeesTimesheetCount(26),
            '52-weeks' => $this->getUniqueEmployeesTimesheetCount(52),
];
        return $resultArray;
    }

    //Format timesheet multi graph data for represent in google charts
    public function convertTimesheetMultiGraphDataForGraph($dataList)
    {
        $dataForGraph = [];
        if (is_array($dataList)) {
            foreach ($dataList as $data) {
                $dataForGraph[] = [$data['Month'], (int)$data['activeEmployees'], (int)$data['activeTimesheetUsers'],
                    (int)$data['timesheetsSubmitted']];
            }
        }
        return $dataForGraph;
    }


    /**
     * @throws Exception
     */
    public function getNoOfTimeSheets($noOfWeeks): string
    {
        $configTable = $this->getInstanceDatabaseAccessUtility()->tableExists('ohrm_timesheet');
        if ($configTable == 1) {

            $triggeredDate = (date("Y-m-d"));
            $d = strtotime("-" . $noOfWeeks . "Weeks");
            $beforeDay = (date("Y-m-d", $d));

            $query = "SELECT COUNT(*) 
                        FROM ohrm_timesheet 
                        WHERE state IN ('SUBMITTED', 'APPROVED', 'REJECTED') 
                        AND start_date BETWEEN ? AND ?";
            $result = $this->getInstanceDatabaseAccessUtility()->fetchColumn($query, [$beforeDay, $triggeredDate]);
            return number_format($result);

        } else {
            return 'N/A';
        }
    }


    /**
     * @throws Exception
     */
    public function getNoOfPastTimeSheetsBreakDown($triggeredDate, $beforeDay, $allMonths)
    {
        $query = "SELECT DATE_FORMAT(`start_date`, '%Y%m'), COUNT(*) 
        FROM ohrm_timesheet 
        WHERE state IN ('SUBMITTED', 'APPROVED', 'REJECTED') 
            AND start_date BETWEEN ? AND ? 
        GROUP BY DATE_FORMAT(`start_date`, '%Y-%m') 
        ORDER BY start_date;";

        $result = $this->getInstanceDatabaseAccessUtility()->fetchKeyValuePairs($query, [$beforeDay, $triggeredDate]);
        if (sizeof($result) == 0) {
            return 'no data found';

        }
        $finalArray = TimeDataHelper::instance()->fillArrayWithAllKeys($result, $allMonths);
        $arrayForReturn = TimeDataHelper::instance()->getFormattedKeys($finalArray, 'months');

        return ($arrayForReturn);

    }


    public function getNumberOfUniqueEmployeesFilledTimesheetsByMonth($triggeredDate, $beforeDay, $allMonths)
    {
        $queryTimesheetsCount = "SELECT DATE_FORMAT(`start_date`, '%Y%m'), COUNT(*) 
        FROM ohrm_timesheet 
        WHERE state IN ('SUBMITTED', 'APPROVED', 'REJECTED') 
            AND start_date BETWEEN ? AND ? 
        GROUP BY DATE_FORMAT(`start_date`, '%Y-%m') 
        ORDER BY start_date;";

        $queryUniqueEmployeesFilledTimesheets = "
        SELECT DATE_FORMAT(`start_date`, '%Y%m'), COUNT(DISTINCT `employee_id`) 
        FROM ohrm_timesheet 
        WHERE state IN ('SUBMITTED', 'APPROVED', 'REJECTED') 
            AND start_date BETWEEN ? AND ? 
        GROUP BY DATE_FORMAT(`start_date`, '%Y-%m') 
        ORDER BY start_date;
        ";

        $resultTimesheetsCount = $this->getInstanceDatabaseAccessUtility()->fetchKeyValuePairs($queryTimesheetsCount, [$beforeDay, $triggeredDate]);
        if (sizeof($resultTimesheetsCount) == 0) {
            return 'no data found';
        }
        $resultWithKeys = TimeDataHelper::instance()->fillArrayWithAllKeys($resultTimesheetsCount, $allMonths);
        $resultWithFormattedKeys = TimeDataHelper::instance()->getFormattedKeysForMonth($resultWithKeys);

        $resultUniqueEmployeesFilledTimesheets = $this->getInstanceDatabaseAccessUtility()->fetchKeyValuePairs($queryUniqueEmployeesFilledTimesheets, [$beforeDay, $triggeredDate]);
        if (sizeof($resultUniqueEmployeesFilledTimesheets) == 0) {
            return 'no data found';
        }
        $resultUniqueEmployeesWithKeys = TimeDataHelper::instance()->fillArrayWithAllKeys($resultUniqueEmployeesFilledTimesheets, $allMonths);
        $resultUniqueEmployeesWithFormattedKeys = TimeDataHelper::instance()->getFormattedKeysForMonth($resultUniqueEmployeesFilledTimesheets);

        $iteratorCount = [];
        $iteratorUniqueCount = [];
        foreach ($allMonths as $month) {
            $formattedMonth = substr($month, 0, 4) . "-" . substr($month, 4, 2);
            $iteratorCount[$formattedMonth] = array_key_exists($month, $resultWithKeys) ? $resultWithKeys[$month] : "0";
            $iteratorUniqueCount[$formattedMonth] = array_key_exists($month, $resultUniqueEmployeesWithKeys) ? $resultUniqueEmployeesWithKeys[$month] : "0";
        }

        $formattedIteratorCount = TimeDataHelper::instance()->getFormattedKeysForMonth($iteratorCount);
        $formattedIteratorUniqueCount = TimeDataHelper::instance()->getFormattedKeysForMonth($iteratorUniqueCount);

        $resultForMultigraph = [];

        foreach ($formattedIteratorCount as $key => $val) {

            $resultForMultigraph[$key] = [
                'Month' => (string)$val['month'],
                'activeEmployees' => $this->monthwiseActiveEmployeeCount[$key]['activeEmployeeCount'],
                'activeTimesheetUsers' => (string)array_key_exists($key, $formattedIteratorUniqueCount) ? $formattedIteratorUniqueCount[$key]['count'] : "0",
                'timesheetsSubmitted' => (string)array_key_exists('count', $val) ? $val['count'] : "0",
    ];
        }

        return ($resultForMultigraph);
    }

    /**
     * @throws Exception
     */
    public function getUniqueEmployeesUsingTimesheets($noOfWeeks)
    {
        if ($this->getInstanceDatabaseAccessUtility()->tableExists('ohrm_timesheet')) {
            $triggeredDate = (date("Y-m-d"));
            $d = strtotime("-" . $noOfWeeks . "Weeks");
            $beforeDay = (date("Y-m-d", $d));

            if (
                $this->getInstanceDatabaseAccessUtility()->columnExists('purged_at', 'hs_hr_employee')
                && $this->getInstanceDatabaseAccessUtility()->columnExists('reactivation_date', 'ohrm_emp_termination')
            ) {
                $query = "SELECT COUNT(DISTINCT t.employee_id) 
                      FROM ohrm_timesheet AS t 
                      JOIN hs_hr_employee AS e ON e.emp_number = t.employee_id 
                      LEFT JOIN ohrm_emp_termination AS et ON e.emp_number = et.emp_number 
                      WHERE t.state IN ('SUBMITTED', 'APPROVED') 
                      AND end_date BETWEEN ? AND ? AND e.`deleted_at` IS NULL 
                      AND e.`purged_at` IS NULL AND (e.`termination_id` IS NULL OR et.`reactivation_date` IS NOT NULL);";
            } else {
                $query = "SELECT COUNT(DISTINCT t.employee_id) 
                      FROM ohrm_timesheet AS t 
                      JOIN hs_hr_employee AS e ON e.emp_number = t.employee_id 
                      LEFT JOIN ohrm_emp_termination AS et ON e.emp_number = et.emp_number 
                      WHERE t.state IN ('SUBMITTED', 'APPROVED') 
                      AND end_date BETWEEN ? AND ? AND e.`deleted_at` IS NULL 
                      AND e.`termination_id` IS NULL;";
            }

            return $this->getInstanceDatabaseAccessUtility()->fetchColumn($query, [$beforeDay, $triggeredDate]);
        } else {
            return 'N/A';
        }
    }

    /**
     * @throws Exception
     */
    public function getUniqueEmployeesTimesheetCount($noOfWeeks)
    {
        if ($this->getInstanceDatabaseAccessUtility()->tableExists('ohrm_timesheet')) {
            $triggeredDate = (date("Y-m-d"));
            $d = strtotime("-" . $noOfWeeks . "Weeks");
            $beforeDay = (date("Y-m-d", $d));

            $query = "SELECT COUNT(*) 
                        FROM ohrm_timesheet 
                        WHERE state IN ('SUBMITTED', 'APPROVED') 
                        AND start_date BETWEEN ? AND ?";

            return $this->getInstanceDatabaseAccessUtility()->fetchColumn($query, [$beforeDay, $triggeredDate]);
        } else {
            return 'N/A';
        }
    }
}
<?php

namespace OrangeHRM\DevOps\usageStats;

use DateTime;
use Exception;
use OrangeHRM\DevOps\helper\TimeDataHelper;

class TrainingSessionAnalyzer extends DataAnalyzer
{
    public function getResult($futureDate, $beforeDay, $allMonths)
    {
        $resultArray = [];
        $noOfTrainingSessions = [];
        $noOfTrainingSessions['13-weeks'] = $this->getNoOfTrainingSession(13);
        $noOfTrainingSessions['26-weeks'] = $this->getNoOfTrainingSession(26);
        $noOfTrainingSessions['52-weeks'] = $this->getNoOfTrainingSession(52);

        $noOfFutureTrainingSessions = [];
        $noOfFutureTrainingSessions['13-weeks'] = $this->getNoOfFutureTrainingSession(13);
        $noOfFutureTrainingSessions['26-weeks'] = $this->getNoOfFutureTrainingSession(26);
        $noOfFutureTrainingSessions['52-weeks'] = $this->getNoOfFutureTrainingSession(52);
        $notStartedOnlineCourses = $this->getNotStartedOnlineCourses($beforeDay, $futureDate, $allMonths);
        $inProgressOnlineCourses = $this->getInProgressOnlineCourses($beforeDay, $futureDate, $allMonths);
        $completedOnlineCourses = $this->getCompletedOnlineCourses($beforeDay, $futureDate, $allMonths);
        $failedOnlineCourses = $this->getFailedOnlineCourses($beforeDay, $futureDate, $allMonths);
        $viewedOnlineCourses = $this->getViewedOnlineCourses($beforeDay, $futureDate, $allMonths);

        $detailedViewData = [];
        $detailedViewData['training-distribution-monthly-breakdown-bar-chart'] = [
            'dataSet' => $this->getNoOfTrainingSessionsBreakDown($beforeDay, $futureDate, $allMonths),
            'xAxis' => 'Month',
            'yAxis' => 'Count',

        ];

        $detailedViewData['training-distribution-monthly-breakdown-bar-chart-converted'] = [
            'dataSet' => $this->convertTrainingDataForGraph($this->getNoOfTrainingSessionsBreakDown($beforeDay, $futureDate, $allMonths)),
        ];

        $detailedViewData['online-training-distribution-monthly-breakdown-stacked-bar-graph'] = [
            'legendTopic' => 'Online Courses Status',
            'dataSet' => array('1' => $notStartedOnlineCourses, '2' => $inProgressOnlineCourses, '3' => $completedOnlineCourses, '4' => $failedOnlineCourses, '5' => $viewedOnlineCourses, '6' => []),
            'xAxis' => 'Month',
            'yAxis' => 'Count',
            'legendTitles' => ['NOT STARTED', 'IN PROGRESS', 'COMPLETED', 'FAILED', 'VIEWED', '',]
        ];

        $detailedViewData['online-training-distribution-monthly-breakdown-stacked-bar-graph-converted'] = [
            'dataSet' => $this->convertOnlineCourseDataForGraph(array('1' => $notStartedOnlineCourses, '2' => $inProgressOnlineCourses, '3' => $completedOnlineCourses, '4' => $failedOnlineCourses, '5' => $viewedOnlineCourses), $allMonths),
        ];

        $resultArray['no-of-training-sessions'] = $noOfTrainingSessions;
        $resultArray['no-of-future-training-sessions'] = $noOfFutureTrainingSessions;
        $resultArray['detailed-view-data'] = $detailedViewData;

        $noOfAssignedEmps = [];
        $noOfAssignedEmps['13-weeks'] = $this->getNoOfUniqueEmpsInSession(13);
        $noOfAssignedEmps['26-weeks'] = $this->getNoOfUniqueEmpsInSession(26);
        $noOfAssignedEmps['52-weeks'] = $this->getNoOfUniqueEmpsInSession(52);
        $resultArray['no-of-unique-emps-training'] = $noOfAssignedEmps;

        $activeUserCountAnalyzer = new ActiveUserCountAnalyzer($this->params);
        $activeUserCountAnalyzer->setInstanceDatabaseAccessUtility($this->getInstanceDatabaseAccessUtility());
        $uniqueEmployeesUsingPercentageArray = $this->createPercentageArray($noOfAssignedEmps, $activeUserCountAnalyzer);
        $resultArray['unique-emps-training-percentage'] = $uniqueEmployeesUsingPercentageArray;

        $totalSessionTaken = [];
        $totalSessionTaken['13-weeks'] = $this->getTotalSessionsTaken(13);
        $totalSessionTaken['26-weeks'] = $this->getTotalSessionsTaken(26);
        $totalSessionTaken['52-weeks'] = $this->getTotalSessionsTaken(52);
        $resultArray['no-of-training-courses-taken'] = $totalSessionTaken;

        return $resultArray;
    }

    //Format online course data for represent in google charts
    public function convertOnlineCourseDataForGraph($fullDataSet, $allMonths)
    {
        $noOfMonths = sizeof($allMonths);
        $dataForGraph = [];
        for ($i = 0; $i < $noOfMonths; $i++) {
            $stringMonth = substr((string)$allMonths[$i], 4, 2) . "-" . substr((string)$allMonths[$i], 0, 4);
            $month = DateTime::createFromFormat('m-Y', $stringMonth)->format('Y-M');
            $dataRow = [$month];
            foreach ($fullDataSet as $key => $dataList) {
                if (!is_array($dataList) || (sizeof($dataList) == 0)) {
                    $dataRow[] = 0;
                } else {
                    $dataRow[] = $dataList[$i]["count"];
                }
            }

            $dataForGraph[] = $dataRow;
        }

        return $dataForGraph;
    }

    //Format training monthly data for represent in google charts
    public function convertTrainingDataForGraph($dataList)
    {
        $dataForGraph = [];
        if (is_array($dataList)) {
            foreach ($dataList as $data) {
                $dataForGraph[] = [$data['month'], (int)$data['count']];
            }
        }
        return $dataForGraph;
    }

    /**
     * @throws Exception
     */
    public function getNoOfTrainingSession($noOfWeeks): string
    {
        $configTable = $this->getInstanceDatabaseAccessUtility()->tableExists('ohrm_training_session');
        if ($configTable == 1) {

            $triggeredDate = (date("Y-m-d G:i:s"));
            $d = strtotime("-" . $noOfWeeks . "Weeks");
            $beforeDay = (date("Y-m-d G:i:s", $d));

            $query = 'SELECT id 
                      FROM `ohrm_training_session` 
                      WHERE `created_time` BETWEEN ? AND ?;';
            $result = $this->getInstanceDatabaseAccessUtility()->getRowCount($query, [$beforeDay, $triggeredDate]);
            return number_format($result);

        } else {
            return 'N/A';
        }
    }

    /**
     * @throws Exception
     */
    public function getNoOfFutureTrainingSession($noOfWeeks): string
    {
        $configTable = $this->getInstanceDatabaseAccessUtility()->tableExists('ohrm_training_session');
        if ($configTable == 1) {

            $triggeredDate = (date("Y-m-d"));
            $d1 = strtotime("+" . $noOfWeeks . "Weeks");
            $futureDay = (date("Y-m-d", $d1));

            $query = 'SELECT COUNT(id) FROM `ohrm_training_session` 
                      WHERE scheduled_date BETWEEN ? AND ?';

            $result = $this->getInstanceDatabaseAccessUtility()->fetchColumn($query, array($triggeredDate, $futureDay));
            return number_format((int)$result);

        } else {
            return 'N/A';
        }
    }

    /**
     * @throws Exception
     */
    public function getNoOfTrainingSessionsBreakDown($startDate, $endDate, $allMonths)
    {

        if (!$this->getInstanceDatabaseAccessUtility()->tableExists('ohrm_training_session')) {
            return 'no data found';;
        }

        $query = "SELECT DATE_FORMAT(`created_time`,'%x%m'),COUNT(id)
                  FROM `ohrm_training_session` 
                  WHERE DATE_FORMAT(`created_time`,'%x-%m') BETWEEN ? AND ?
                  GROUP BY DATE_FORMAT(`created_time`,'%x%m')";

        $result = $this->getInstanceDatabaseAccessUtility()->fetchKeyValuePairs($query, [$startDate, $endDate]);
        if (sizeof($result) == 0) {
            return 'no data found';

        }
        $finalArray = TimeDataHelper::instance()->fillArrayWithAllKeys($result, $allMonths);
        $arrayForReturn = TimeDataHelper::instance()->getFormattedKeys($finalArray, 'months');
        return ($arrayForReturn);

    }

    /**
     * @throws Exception
     */
    public function getNoOfOnlineTrainingSessionsBreakDown($startDate, $endDate, $allMonths)
    {
        $query = "SELECT DATE_FORMAT(`created_time`,'%x%m'),COUNT(id)
                  FROM `ohrm_online_course` 
                  WHERE DATE_FORMAT(`created_time`,'%x-%m') BETWEEN ? AND ?
                  GROUP BY DATE_FORMAT(`created_time`,'%x%m')";

        $result = $this->getInstanceDatabaseAccessUtility()->fetchKeyValuePairs($query, [$startDate, $endDate]);
        if (sizeof($result) == 0) {
            return 'no data found';

        }
        $finalArray = TimeDataHelper::instance()->fillArrayWithAllKeys($result, $allMonths);
        $arrayForReturn = TimeDataHelper::instance()->getFormattedKeys($finalArray, 'months');
        return ($arrayForReturn);

    }

    /**
     * @throws Exception
     */
    public function getNotStartedOnlineCourses($startDate, $endDate, $allMonths)
    {

        if (!$this->getInstanceDatabaseAccessUtility()->tableExists('ohrm_online_course_employee')) {
            return [];
        }

        $query = "SELECT  DATE_FORMAT(ohrm_online_course_employee.`assigned_date`,'%Y%m'), count(DISTINCT(ohrm_online_course_employee.id))
                  FROM ohrm_online_course_employee WHERE DATE_FORMAT(ohrm_online_course_employee.`assigned_date`, '%Y-%m') 
                  BETWEEN ? AND ? AND status = '0' AND is_deleted = 0 GROUP BY DATE_FORMAT(`ohrm_online_course_employee`.`assigned_date`,'%Y%m')";

        $result = $this->getInstanceDatabaseAccessUtility()->fetchKeyValuePairs($query, [$startDate, $endDate]);
        if (sizeof($result) == 0) {
            return [];

        }
        $finalArray = TimeDataHelper::instance()->fillArrayWithAllKeys($result, $allMonths);
        $arrayForReturn = TimeDataHelper::instance()->getFormattedKeys($finalArray, 'months');
        return ($arrayForReturn);
    }

    /**
     * @throws Exception
     */
    public function getInProgressOnlineCourses($startDate, $endDate, $allMonths)
    {
        if (!$this->getInstanceDatabaseAccessUtility()->tableExists('ohrm_online_course_employee')) {
            return [];
        }

        $query = "SELECT  DATE_FORMAT(ohrm_online_course_employee.`assigned_date`,'%Y%m'), count(DISTINCT(ohrm_online_course_employee.id))
                  FROM ohrm_online_course_employee WHERE 
               status = '2' AND is_deleted = 0 AND DATE_FORMAT(ohrm_online_course_employee.`assigned_date`, '%Y-%m') BETWEEN ? AND ? GROUP BY DATE_FORMAT(ohrm_online_course_employee.`assigned_date`,'%Y%m')";

        $result = $this->getInstanceDatabaseAccessUtility()->fetchKeyValuePairs($query, [$startDate, $endDate]);
        if (sizeof($result) == 0) {
            return [];

        }
        $finalArray = TimeDataHelper::instance()->fillArrayWithAllKeys($result, $allMonths);
        $arrayForReturn = TimeDataHelper::instance()->getFormattedKeys($finalArray, 'months');
        return ($arrayForReturn);
    }

    /**
     * @throws Exception
     */
    public function getCompletedOnlineCourses($startDate, $endDate, $allMonths)
    {
        if (!$this->getInstanceDatabaseAccessUtility()->tableExists('ohrm_online_course_employee')) {
            return [];
        }

        $query = "SELECT  DATE_FORMAT(ohrm_online_course_employee.`assigned_date`,'%Y%m'), count(DISTINCT(ohrm_online_course_employee.id))
                  FROM ohrm_online_course_employee WHERE 
               status = '1' AND is_deleted = 0 AND DATE_FORMAT(ohrm_online_course_employee.`assigned_date`, '%Y-%m') BETWEEN ? AND ? GROUP BY DATE_FORMAT(ohrm_online_course_employee.`assigned_date`,'%Y%m')";

        $result = $this->getInstanceDatabaseAccessUtility()->fetchKeyValuePairs($query, [$startDate, $endDate]);
        if (sizeof($result) == 0) {
            return [];

        }
        $finalArray = TimeDataHelper::instance()->fillArrayWithAllKeys($result, $allMonths);
        $arrayForReturn = TimeDataHelper::instance()->getFormattedKeys($finalArray, 'months');
        return ($arrayForReturn);
    }

    /**
     * @throws Exception
     */
    public function getFailedOnlineCourses($startDate, $endDate, $allMonths)
    {
        if (!$this->getInstanceDatabaseAccessUtility()->tableExists('ohrm_online_course_employee')) {
            return [];
        }

        $query = "SELECT  DATE_FORMAT(ohrm_online_course_employee.`assigned_date`,'%Y%m'), count(DISTINCT(ohrm_online_course_employee.id))
                  FROM ohrm_online_course_employee WHERE 
               status = '3' AND is_deleted = 0 AND DATE_FORMAT(ohrm_online_course_employee.`assigned_date`, '%Y-%m') BETWEEN ? AND ? GROUP BY DATE_FORMAT(ohrm_online_course_employee.`assigned_date`,'%Y%m')";

        $result = $this->getInstanceDatabaseAccessUtility()->fetchKeyValuePairs($query, [$startDate, $endDate]);
        if (sizeof($result) == 0) {
            return [];

        }
        $finalArray = TimeDataHelper::instance()->fillArrayWithAllKeys($result, $allMonths);
        $arrayForReturn = TimeDataHelper::instance()->getFormattedKeys($finalArray, 'months');
        return ($arrayForReturn);
    }

    /**
     * @throws Exception
     */
    public function getViewedOnlineCourses($startDate, $endDate, $allMonths)
    {

        if (!$this->getInstanceDatabaseAccessUtility()->tableExists('ohrm_online_course_employee')) {
            return [];
        }

        $query = "SELECT  DATE_FORMAT(ohrm_online_course_employee.`assigned_date`,'%Y%m'), count(DISTINCT(ohrm_online_course_employee.id))
                  FROM ohrm_online_course_employee WHERE 
               status = '4' AND is_deleted = 0 AND DATE_FORMAT(ohrm_online_course_employee.`assigned_date`, '%Y-%m') BETWEEN ? AND ? GROUP BY DATE_FORMAT(ohrm_online_course_employee.`assigned_date`,'%Y%m')";

        $result = $this->getInstanceDatabaseAccessUtility()->fetchKeyValuePairs($query, [$startDate, $endDate]);
        if (sizeof($result) == 0) {
            return [];

        }
        $finalArray = TimeDataHelper::instance()->fillArrayWithAllKeys($result, $allMonths);
        $arrayForReturn = TimeDataHelper::instance()->getFormattedKeys($finalArray, 'months');
        return ($arrayForReturn);
    }

    /**
     * @throws Exception
     */
    public function getNoOfUniqueEmpsInSession($noOfWeeks): string
    {
        $configTable = $this->getInstanceDatabaseAccessUtility()->tableExists('ohrm_training_session_student');
        if ($configTable == 1) {
            $triggeredDate = (date("Y-m-d G:i:s"));
            $d = strtotime("-" . $noOfWeeks . "Weeks");
            $beforeDay = (date("Y-m-d G:i:s", $d));

            $query = 'SELECT COUNT(DISTINCT emp_number) FROM ohrm_training_session_student AS ss LEFT JOIN ohrm_training_session AS s ON s.id = ss.session_id WHERE s.created_time BETWEEN ? AND ?;';
            $result = $this->getInstanceDatabaseAccessUtility()->fetchColumn($query, [$beforeDay, $triggeredDate]);
            return number_format($result);
        } else {
            return 'N/A';
        }
    }

    /**
     * @throws Exception
     */
    public function getTotalSessionsTaken($noOfWeeks): string
    {
        $configTable = $this->getInstanceDatabaseAccessUtility()->tableExists('ohrm_training_session_student');
        if ($configTable == 1) {
            $triggeredDate = (date("Y-m-d G:i:s"));
            $d = strtotime("-" . $noOfWeeks . "Weeks");
            $beforeDay = (date("Y-m-d G:i:s", $d));

            $query = 'SELECT COUNT(DISTINCT session_id) FROM ohrm_training_session_student AS ss LEFT JOIN ohrm_training_session AS s ON s.id = ss.session_id WHERE s.created_time BETWEEN ? AND ?;';
            $result = $this->getInstanceDatabaseAccessUtility()->fetchColumn($query, [$beforeDay, $triggeredDate]);
            return number_format($result);
        } else {
            return 'N/A';
        }
    }
}
<?php

namespace OrangeHRM\DevOps\usageStats;

use Exception;
use OrangeHRM\DevOps\helper\TimeDataHelper;

class TravelClaimAnalyzer extends DataAnalyzer
{
    public function getResult($triggeredDate, $beforeDay, $pastMonths)
    {

        $resultArray = [];
        $noOfTravelClaims = [];
        $noOfTravelClaims['13-weeks'] = $this->getNoOfTravelClaims(13);
        $noOfTravelClaims['26-weeks'] = $this->getNoOfTravelClaims(26);
        $noOfTravelClaims['52-weeks'] = $this->getNoOfTravelClaims(52);

        $resultArray['no-of-travel-claims'] = $noOfTravelClaims;
        $expenseTypeGroups = $this->getExpenseTypeGroupNames();
        $detailedViewData = [];
        $detailedViewData['travel-claim-distribution-monthly-breakdown-bar-chart'] = [
            'dataSet' => $this->getNoOfTravelClaimsBreakDown($triggeredDate, $beforeDay, $pastMonths),
            'xAxis' => 'Month',
            'yAxis' => 'Count',
];

        $detailedViewData['expense-type-groups-vise-count-pie-chart'] = [
            'legendTopic' => 'Expense Type Group',
            'dataSet' => $this->getExpenseTypeGroupViseCountBreakDown($triggeredDate, $beforeDay),
];

        $detailedViewData['past-future-expense-distribution-stacked-bar-chart'] = [
            'legendTopic' => 'Expense Type Group',
            'dataSet' => array('1' => $this->getExpenseTypeGroupCountBreakDown($triggeredDate, $beforeDay)),
            'xAxis' => 'Expense Type Group',
            'yAxis' => 'Count',
            'legendTitles' => $expenseTypeGroups,
];

        $detailedViewData['travel-claim-distribution-monthly-breakdown-bar-chart-converted'] = [
            'dataSet' => $this->convertTravelDataForGraph($this->getNoOfTravelClaimsBreakDown($triggeredDate, $beforeDay, $pastMonths)),
];

        $detailedViewData['past-future-expense-distribution-stacked-bar-chart-converted'] = [
            'dataSet' => $this->convertExpenseDataForGraph($this->getExpenseTypeGroupCountBreakDown($triggeredDate, $beforeDay)),
];

        $resultArray['detailed-view-data'] = $detailedViewData;

        $uniqueExpTravelUsers = [];
        $uniqueExpTravelUsers['13-weeks'] = $this->getEmpsUsingTravelExpense(13);
        $uniqueExpTravelUsers['26-weeks'] = $this->getEmpsUsingTravelExpense(26);
        $uniqueExpTravelUsers['52-weeks'] = $this->getEmpsUsingTravelExpense(52);
        $resultArray['no-of-unique-emps-travel'] = $uniqueExpTravelUsers;

        $activeUserCountAnalyzer = new ActiveUserCountAnalyzer($this->params);
        $activeUserCountAnalyzer->setInstanceDatabaseAccessUtility($this->getInstanceDatabaseAccessUtility());
        $uniqueEmployeesUsingPercentageArray = $this->createPercentageArray($uniqueExpTravelUsers, $activeUserCountAnalyzer);
        $resultArray['unique-emps-travel-percentage'] = $uniqueEmployeesUsingPercentageArray;

        $totalExpTravelRequests = [];
        $totalExpTravelRequests['13-weeks'] = $this->getTotalTravelExpenseCount(13);
        $totalExpTravelRequests['26-weeks'] = $this->getTotalTravelExpenseCount(26);
        $totalExpTravelRequests['52-weeks'] = $this->getTotalTravelExpenseCount(52);
        $resultArray['no-of-travel-exp-reports'] = $totalExpTravelRequests;

        return $resultArray;
    }

    //Format expense data for represent in google charts
    public function convertExpenseDataForGraph($dataList)
    {
        $dataForGraph = [];
        if (is_array($dataList)) {
            foreach ($dataList as $key => $val) {
                $dataForGraph[] = [$key, (int)$val];
            }
        }
        return $dataForGraph;
    }

    //Format travel data for represent in google charts
    public function convertTravelDataForGraph($dataList)
    {
        $dataForGraph = [];
        if (is_array($dataList)) {
            foreach ($dataList as $data) {
                $dataForGraph[] = [$data['month'], (int)$data['count']];
            }
        }
        return $dataForGraph;
    }

    /**
     * @throws Exception
     */
    public function getNoOfTravelClaims($noOfWeeks): string
    {
        $configTable = $this->getInstanceDatabaseAccessUtility()->tableExists('ohrm_job_vacancy');
        if ($configTable == 1) {
            $triggeredDate = (date("Y-m-d G:i:s"));
            $d = strtotime("-" . $noOfWeeks . "Weeks");
            $beforeDay = (date("Y-m-d G:i:s", $d));
            $query = 'SELECT ohrm_travel_information.request_id 
                      FROM `ohrm_travel_information` LEFT OUTER JOIN `ohrm_claim_estimate_request` 
                      ON ohrm_travel_information.request_id = ohrm_claim_estimate_request.id 
                      WHERE created_date BETWEEN ? AND ? ;';

            $result = $this->getInstanceDatabaseAccessUtility()->getRowCount($query, [$beforeDay, $triggeredDate]);
            return number_format($result);

        } else {
            return 'N/A';
        }
    }

    /**
     * @throws Exception
     */
    public function getNoOfTravelClaimsBreakDown($triggeredDate, $beforeDay, $allMonths)
    {
        $query = "SELECT DATE_FORMAT(`created_date`,'%x%m'), COUNT(ohrm_travel_information.request_id) 
                  FROM `ohrm_travel_information` LEFT OUTER JOIN `ohrm_claim_estimate_request` 
                  ON ohrm_travel_information.request_id = ohrm_claim_estimate_request.id 
                  WHERE DATE_FORMAT(`created_date`,'%x-%m') BETWEEN ? AND ? 
                  GROUP BY DATE_FORMAT(`created_date`,'%x%m'); ";

        $result = $this->getInstanceDatabaseAccessUtility()->fetchKeyValuePairs($query, [$beforeDay, $triggeredDate]);
        if (sizeof($result) == 0) {
            return 'no data found';

        }
        $finalArray = TimeDataHelper::instance()->fillArrayWithAllKeys($result, $allMonths);
        $arrayForReturn = TimeDataHelper::instance()->getFormattedKeys($finalArray, 'months');

        return ($arrayForReturn);

    }

    /**
     * @throws Exception
     */
    public function getExpenseTypeGroupViseCountBreakDown($triggeredDate, $beforeDay)
    {
        $query = "SELECT ohrm_claim_expense_type_group.name,COUNT(ohrm_claim_expense.id)
                  FROM `ohrm_claim_expense` 
                  LEFT OUTER JOIN ohrm_claim_expense_type 
                  ON ohrm_claim_expense.expense_type_id = ohrm_claim_expense_type.id 
                  LEFT OUTER JOIN ohrm_claim_expense_type_group
                  ON ohrm_claim_expense_type.expense_type_group_id = ohrm_claim_expense_type_group.id
                  WHERE DATE_FORMAT(`created_date`,'%Y-%m') BETWEEN ? AND ? 
                  GROUP BY ohrm_claim_expense_type_group.id
                  ORDER BY ohrm_claim_expense_type_group.id;";

        $result = $this->getInstanceDatabaseAccessUtility()->fetchKeyValuePairs($query, [$beforeDay, $triggeredDate]);
        if (sizeof($result) == 0) {
            return 'no data found';
        }

        return ($result);
    }

    /**
     * @throws Exception
     */
    public function getExpenseTypeGroupNames(): ?array
    {
        $query = 'SELECT ohrm_claim_expense_type_group.name,ohrm_claim_expense_type_group.id
                   from ohrm_claim_expense_type_group';

        $result = $this->getInstanceDatabaseAccessUtility()->fetchKeyValuePairs($query);
        if (sizeof($result) == 0) {
            return [];
        }

        return ($result);
    }

    /**
     * @throws Exception
     */
    public function getExpenseTypeGroupCountBreakDown($triggeredDate, $beforeDay): ?array
    {


        $query = "SELECT ohrm_claim_expense_type_group.name,COUNT(ohrm_claim_expense.id)
                  FROM `ohrm_claim_expense` 
                  LEFT OUTER JOIN ohrm_claim_expense_type 
                  ON ohrm_claim_expense.expense_type_id = ohrm_claim_expense_type.id 
                  LEFT OUTER JOIN ohrm_claim_expense_type_group
                  ON ohrm_claim_expense_type.expense_type_group_id = ohrm_claim_expense_type_group.id
                  WHERE DATE_FORMAT(`created_date`,'%Y-%m') BETWEEN ? AND ? 
                  GROUP BY ohrm_claim_expense_type_group.id
                  ORDER BY ohrm_claim_expense_type_group.id;";

        $result = $this->getInstanceDatabaseAccessUtility()->fetchKeyValuePairs($query, [$beforeDay, $triggeredDate]);
        if (sizeof($result) == 0) {
            return [];
        }

        return ($result);


    }

    /**
     * @throws Exception
     */
    public function getEmpsUsingTravelExpense($noOfWeeks): string
    {
        $configTable = $this->getInstanceDatabaseAccessUtility()->tableExists('ohrm_claim_estimate_request')
            && $this->getInstanceDatabaseAccessUtility()->tableExists('ohrm_claim_request');
        if ($configTable == 1) {
            $triggeredDate = (date("Y-m-d G:i:s"));
            $d = strtotime("-" . $noOfWeeks . "Weeks");
            $beforeDay = (date("Y-m-d G:i:s", $d));
            $query = 'SELECT SUM(a.c + b.c) AS c FROM 
                   (SELECT COUNT(DISTINCT emp_number) AS c FROM ohrm_claim_estimate_request WHERE created_date BETWEEN ? AND ?) AS a 
                   JOIN (SELECT COUNT(DISTINCT emp_number) AS c FROM ohrm_claim_request WHERE created_date BETWEEN ? AND ?) AS b;';

            $result = $this->getInstanceDatabaseAccessUtility()->fetchColumn($query, [$beforeDay, $triggeredDate, $beforeDay, $triggeredDate]);
            return number_format($result);

        } else {
            return 'N/A';
        }
    }

    /**
     * @throws Exception
     */
    public function getTotalTravelExpenseCount($noOfWeeks): string
    {
        $configTable = $this->getInstanceDatabaseAccessUtility()->tableExists('ohrm_claim_estimate_request')
            && $this->getInstanceDatabaseAccessUtility()->tableExists('ohrm_claim_request');
        if ($configTable == 1) {
            $triggeredDate = (date("Y-m-d G:i:s"));
            $d = strtotime("-" . $noOfWeeks . "Weeks");
            $beforeDay = (date("Y-m-d G:i:s", $d));
            $query = 'SELECT SUM(a.c + b.c) AS c FROM 
                   (SELECT COUNT(*) AS c FROM ohrm_claim_estimate_request WHERE created_date BETWEEN ? AND ?) AS a 
                   JOIN (SELECT COUNT(*) AS c FROM ohrm_claim_request WHERE created_date BETWEEN ? AND ?) AS b;';

            $result = $this->getInstanceDatabaseAccessUtility()->fetchColumn($query, [$beforeDay, $triggeredDate, $beforeDay, $triggeredDate]);
            return number_format($result);

        } else {
            return 'N/A';
        }
    }


}
<?php

namespace OrangeHRM\DevOps\usageStats;

use DateTime;
use OrangeHRM\DevOps\utility\TimePeriodValueUtility;
use stdClass;
use Exception;

class UsageStatisticsCheck extends AbstractDiagnosticsCheck
{

    /**
     * @throws Exception
     */
    public function getResult(): stdClass
    {

        $result = new stdClass();

        $triggeredDate = date('Y-m-d');
        $today = new DateTime($triggeredDate);
        $beforeDay = $today->modify("-{$this->params->getBacktrack()} months")->format('Y-m-d');

        $result->countrywiseEmployeeCount = $this->fetchCountryWiseEmployeeCount();
        $result->countryBasedLoginCount = $this->getNumberOfLoginsCountryLocationBreakDown($beforeDay, $triggeredDate, 'country');
        $result->locationBasedLoginCount = $this->getNumberOfLoginsCountryLocationBreakDown($beforeDay, $triggeredDate, 'location');
        $result->countryMonthBasedLoginCount = $this->getCountryMonthBasedLoginCount($beforeDay, $triggeredDate);

        extract($this->fetchEmailQueueUsageStats());

        $result->emailQueueLastEmailSentOn = $this->getLastEmailSentDate($emailQueueLastEmailSentOn);
        $result->emailQueuePendingCount = $emailQueuePendingCount;
        $result->emailQueueStartedCount = $emailQueueStartedCount;
        $result->emailQueueFailedCount = $emailQueueFailedCount;
        $result->emailQueueTotalCount = $emailQueueTotalCount;

        $mothWiseStatsStartDate = date('Y-m-d', strtotime('1 year ago'));
        $result->monthwiseEmployeeCountStartDate = $mothWiseStatsStartDate;

        $lastLoginDetails = $this->fetchLastLoginDetails();
        $result->lastLoginTime = $lastLoginDetails['timestamp'];
        $result->lastLoginUserRole = $lastLoginDetails['user_role'];

        $result->monthwiseActiveEmployeeCount = $this->fetchMonthWiseActiveEmployeeCount($this->params->getBacktrack());
        $result->monthwiseLoginDistribution = $this->fetchMonthWiseLoginDistribution($mothWiseStatsStartDate);
        $result->monthwiseMobileUsageTimesAccessed = $this->fetchMonthWiseMobileUsageTimesAccessed($mothWiseStatsStartDate);
        $result->monthwiseMobileUsageUserCount = $this->fetchMonthWiseMobileUsageUserCount($mothWiseStatsStartDate);
        $result->monthwiseMobileUsageBreakdownByUserRole = $this->fetchMonthWiseMobileUsageUsageBreakdownByUserRole($mothWiseStatsStartDate);
        $result->monthwiseLeaveRequestDistribution = $this->fetchMonthWiseLeaveRequestDistribution($mothWiseStatsStartDate);
        $result->monthwiseFutureLeaveRequestDistribution = $this->fetchMonthWiseFutureLeaveRequestDistribution();
        $result->monthwisePIMActivityDistribution = $this->fetchMonthWisePIMActivityDistribution($mothWiseStatsStartDate);
        $result->navigationStatsAsOfToday = $this->fetchNavigationStatsAsOfToday();

        return $result;
    }

    protected final function getLastEmailSentDate($defaultResultFromDatabase)
    {
        $filesArray = [];

        foreach (glob("{$this->params->getInstallationPath()}/symfony/log/*sent_emails.log") as $file) {
            $filesArray[] = $file;
        }

        if (count($filesArray) > 0) {
            rsort($filesArray);
            return date("d-m-Y H:i:s", filemtime($filesArray[0]));
        } else {
            return $defaultResultFromDatabase;
        }
    }

    /**
     * @throws Exception
     */
    protected final function fetchCountryWiseEmployeeCount(): array
    {

        $hasMultipleEmpLocations = $this->getInstanceDatabaseAccessUtility()->tableExists('hs_hr_emp_locations');
        $hasSoftDelete = $this->getInstanceDatabaseAccessUtility()->columnExists('deleted_at', 'hs_hr_employee');
        $whereClause = ($hasSoftDelete) ? '`deleted_at` IS NULL' : '1';
        $locationJoinClause = ($hasMultipleEmpLocations) ? 'LEFT JOIN `hs_hr_emp_locations` AS el ON el.`emp_number` = e.`emp_number` LEFT JOIN `ohrm_location` AS l ON l.`id` = el.`location_id` ' : 'LEFT JOIN `ohrm_location` AS l ON l.`id` = e.`location_id` ';

        $query = "
SELECT 
 'All' AS `country`, 
 SUM(IF(e.`termination_id` IS NULL, 1, 0)) AS `active`,
 SUM(IF(e.`termination_id` IS NOT NULL, 1, 0)) AS `inactive`,
 SUM(1) AS `total`
FROM `hs_hr_employee` AS e
WHERE {$whereClause}

UNION

SELECT 
 IFNULL(`cou_name`, 'Unassigned') AS `country`, 
 SUM(IF(e.`termination_id` IS NULL, 1, 0)) AS `active`,
 SUM(IF(e.`termination_id` IS NOT NULL, 1, 0)) AS `inactive`,
 SUM(1) AS `total`
FROM `hs_hr_employee` AS e
{$locationJoinClause}
LEFT JOIN `hs_hr_country` AS c ON c.`cou_code` = l.`country_code` 
WHERE {$whereClause}
GROUP BY c.`cou_code`;
";

        return $this->getInstanceDatabaseAccessUtility()->fetchAll($query);
    }

    /**
     * @throws Exception
     */
    protected final function fetchEmailQueueUsageStats(): array
    {
        $query = "
SELECT 
  IFNULL((SELECT CONCAT(MAX(`updated_at`), ' ', @@system_time_zone) FROM `ohrm_email_queue` WHERE `status` = 'SENT'), 'Never/Unknown') AS emailQueueLastEmailSentOn,
  SUM(IF(`status` = 'PENDING', 1, 0)) AS emailQueuePendingCount,
  SUM(IF(`status` = 'STARTED', 1, 0)) AS emailQueueStartedCount,
  SUM(IF(`status` = 'FAILED', 1, 0)) AS emailQueueFailedCount,
  SUM(1) AS emailQueueTotalCount
FROM `ohrm_email_queue`;
";

        list($counts) = $this->getInstanceDatabaseAccessUtility()->fetchAll($query);

        return $counts;
    }

    public function fetchMonthWiseActiveEmployeeCount(int $backtrack): array
    {

        $dataPoint = new MonthWiseActiveEmployeeCount();
        $dataPoint->setBacktrack($backtrack);
        $dataPoint->setTimePeriodValueUtility(new TimePeriodValueUtility());
        $dataPoint->setInstanceDatabaseAccessUtility($this->getInstanceDatabaseAccessUtility());
        $result = $dataPoint->getValue();

        // @fixme: Change to have direct associative array

        $monthWiseActiveEmployeeCount = [];
        foreach ($result[0] as $row) {
            $monthWiseActiveEmployeeCount[] = [
                'month' => $row['month'],
                'joined' => $row['joined'],
                'terminated' => $row['terminated'],
                'rehired' => $row['multipleTerminationAdjustment'],
                'cumulativeJoinCount' => $row['cumulativeJoinCount'],
                'cumulativeTerminationCount' => $row['cumulativeTerminationCount'],
                'activeEmployeeCount' => $row['activeEmployeeCount'],
            ];
        }

        return $monthWiseActiveEmployeeCount;
    }

    /**
     * @throws Exception
     */
    protected final function fetchMonthWiseLoginDistribution(string $startDate): ?array
    {

        $today = date('Y-m-d');

        $dataPoint = new MonthWiseLoginDistribution();
        $dataPoint->setInstanceDatabaseAccessUtility($this->getInstanceDatabaseAccessUtility());
        $dataPoint->setTimePeriodValueUtility(new TimePeriodValueUtility());
        $dataPoint->setParams([$startDate, $today]);

        return $dataPoint->getValue();

    }

    /**
     * @throws Exception
     */
    protected final function fetchLastLoginDetails(): array
    {
        $dataPoint = new LastLoginInformation();
        $dataPoint->setInstanceDatabaseAccessUtility($this->getInstanceDatabaseAccessUtility());
        $dataPoint->setTimePeriodValueUtility(new TimePeriodValueUtility());
        $result = $dataPoint->getValue();

        return empty($result) ? ['timestamp' => 'N/A', 'user_role' => 'N/A'] : $result;
    }

    /**
     * @throws Exception
     */
    protected final function fetchMonthWiseLeaveRequestDistribution(string $startDate): array
    {

        $today = date('Y-m-d');

        $dataPoint = new MonthWiseLeaveRequestDistribution();
        $dataPoint->setInstanceDatabaseAccessUtility($this->getInstanceDatabaseAccessUtility());
        $dataPoint->setTimePeriodValueUtility(new TimePeriodValueUtility());
        $dataPoint->setParams([$startDate, $today]);

        return $dataPoint->getValue();
    }

    /**
     * @throws Exception
     */
    protected final function fetchMonthWiseFutureLeaveRequestDistribution(): array
    {

        $today = date('Y-m-d');
        $anYearFromNow = date('Y-m-d', strtotime('+1 year'));

        $dataPoint = new MonthWiseFutureLeaveRequestDistribution();
        $dataPoint->setInstanceDatabaseAccessUtility($this->getInstanceDatabaseAccessUtility());
        $dataPoint->setTimePeriodValueUtility(new TimePeriodValueUtility());
        $dataPoint->setParams([$today, $anYearFromNow]);

        return $dataPoint->getValue();
    }

    /**
     * @throws Exception
     */
    protected final function fetchMonthWisePIMActivityDistribution(string $startDate): array
    {

        $viewName = $this->getInstanceDatabaseAccessUtility()->fetchColumn("SHOW TABLES LIKE 'ohrm_audittrail_all%'");

        $query = "
SELECT 
  DATE_FORMAT(`action_time`, '%Y-%b') AS `month`, 
  COUNT(*) AS `count` 
FROM  `{$viewName}`
WHERE `action_time` >= :startDate 
GROUP BY DATE_FORMAT(`action_time`, '%Y-%b') 
ORDER BY `action_time`;
";
        return $this->getInstanceDatabaseAccessUtility()->fetchAll($query, [':startDate' => $startDate]);
    }

    /**
     * @throws Exception
     */
    protected final function fetchNavigationStatsAsOfToday(): ?array
    {
        if ($this->getInstanceDatabaseAccessUtility()->tableExists('ohrm_external_navigation_log')) {

            $query = "SELECT 'Apply Leave' as `screen`, count(DISTINCT user) as `count`  FROM `ohrm_external_navigation_log` WHERE to_url = '/leave/apply'
UNION
SELECT 'PIM Reports' as `screen`, count(DISTINCT user) as `count`  FROM `ohrm_external_navigation_log` WHERE to_url = '/pim/reports'
UNION
SELECT 'News List' as `screen`, count(DISTINCT user) as `count`  FROM `ohrm_external_navigation_log` WHERE to_url = '/news/viewNewsList'
UNION
SELECT 'Disciplinary Case List' as `screen`, count(DISTINCT user) as `count`  FROM `ohrm_external_navigation_log` WHERE to_url = '/discipline/viewDisciplinaryCases'
UNION
SELECT 'Asset List' as `screen`, count(DISTINCT user) as `count`  FROM `ohrm_external_navigation_log` WHERE to_url LIKE '/asset/viewAssets%'
UNION
SELECT 'Corporate Directory' as `screen`, count(DISTINCT user) as `count`  FROM `ohrm_external_navigation_log` WHERE to_url LIKE '/directory/viewDirectory%'
UNION
SELECT 'Buzz' as `screen`, count(DISTINCT user) as `count`  FROM `ohrm_external_navigation_log` WHERE to_url = '/buzz/viewBuzz'
UNION
SELECT 'View Appraisal' as `screen`, count(DISTINCT user) as `count`  FROM `ohrm_external_navigation_log` WHERE to_url LIKE '/performance/defaultView/appraisalId%'
UNION
SELECT 'View Vacancies' as `screen`, count(DISTINCT user) as `count`  FROM `ohrm_external_navigation_log` WHERE to_url LIKE '/recruitment/viewJobVacancy%'
";

            return $this->getInstanceDatabaseAccessUtility()->fetchAll($query);
        } else {
            return [];
        }
    }

    /**
     * @throws Exception
     */
    protected function fetchMonthWiseMobileUsageTimesAccessed($startDate): ?array
    {
        $dataPoint = new MonthWiseMobileUsageTimesAccessed();
        $dataPoint->setInstanceDatabaseAccessUtility($this->getInstanceDatabaseAccessUtility());
        $dataPoint->setParams([$startDate]);

        return $dataPoint->getValue();

    }

    /**
     * @throws Exception
     */
    protected function fetchMonthWiseMobileUsageUserCount(string $startDate): ?array
    {
        $dataPoint = new MonthWiseMobileUsageUserCount();
        $dataPoint->setInstanceDatabaseAccessUtility($this->getInstanceDatabaseAccessUtility());
        $dataPoint->setParams([$startDate]);

        return $dataPoint->getValue();
    }

    /**
     * @throws Exception
     */
    protected function fetchMonthWiseMobileUsageUsageBreakdownByUserRole($startDate): ?array
    {
        $dataPoint = new MonthWiseMobileUsageBreakdownByUserRole();
        $dataPoint->setInstanceDatabaseAccessUtility($this->getInstanceDatabaseAccessUtility());
        $dataPoint->setParams([$startDate]);

        return $dataPoint->getValue();
    }

    public function getNumberOfLoginsCountryLocationBreakDown($beforeDay, $triggeredDate, $type): ?array
    {

        $hasMultipleLocations = $this->getInstanceDatabaseAccessUtility()->tableExists('hs_hr_emp_locations');

        $locationJoin = "LEFT JOIN ohrm_location loc ON loc.id = e.location_id";
        if ($hasMultipleLocations) {
            $locationJoin = "LEFT JOIN hs_hr_emp_locations ON hs_hr_emp_locations.emp_number = e.emp_number 
                LEFT JOIN ohrm_location loc ON hs_hr_emp_locations.location_id = loc.id";
        }

        if ($type === 'location') {
            $selectQuery = "IFNULL(loc.name, 'Unspecified') AS location ,";
        } else if ($type === 'country') {
            $selectQuery = "IFNULL(c.cou_name, 'Unspecified') AS country , IFNULL(c.cou_code, 'Unspecified') AS country_code ,";
        }

        $query = "SELECT
               COUNT(DISTINCT l.`user_id`)  AS `uniqueUserCount`,
                {$selectQuery}
                COUNT(l.user_id) AS count
                    FROM ohrm_login AS l
                             LEFT JOIN ohrm_user AS u ON l.user_id = u.id
                             LEFT JOIN hs_hr_employee e ON u.emp_number = e.emp_number
                             {$locationJoin}
                             LEFT OUTER JOIN hs_hr_country c ON loc.country_code = c.cou_code
                    WHERE
                        DATE(l.login_time) BETWEEN ? AND ?
                    GROUP BY {$type};";

        return $this->getInstanceDatabaseAccessUtility()->fetchAll($query, [$beforeDay, $triggeredDate]);
    }

    public function getCountryMonthBasedLoginCount($beforeDay, $triggeredDate): ?array
    {

        $hasMultipleLocations = $this->getInstanceDatabaseAccessUtility()->tableExists('hs_hr_emp_locations');

        if ($hasMultipleLocations) {
            $locationJoin = "LEFT JOIN hs_hr_emp_locations ON hs_hr_emp_locations.emp_number = e.emp_number 
                LEFT JOIN ohrm_location loc ON hs_hr_emp_locations.location_id = loc.id";
        } else {
            $locationJoin = "LEFT JOIN ohrm_location loc ON loc.id = e.location_id";
        }

        $query = "
select IFNULL(c.cou_name, 'Unspecified') AS countryM,
       IFNULL(loc.name, 'Unspecified') AS locationM,
       CONCAT(YEAR(l.`login_time`), '-', DATE_FORMAT(l.login_time, '%b')) as month,
       COUNT(DISTINCT l.`user_id`)  AS `uniqueUserCount`,
       COUNT(l.user_id) AS count
FROM ohrm_login l
         LEFT JOIN ohrm_user AS u ON l.user_id = u.id
         LEFT JOIN hs_hr_employee e ON u.emp_number = e.emp_number
         {$locationJoin}
         LEFT OUTER JOIN hs_hr_country c ON loc.country_code = c.cou_code
WHERE DATE(l.login_time) BETWEEN ? AND ? 
GROUP BY  month, countryM, locationM 
ORDER BY locationM, l.login_time ASC ;";

        return $this->getInstanceDatabaseAccessUtility()->fetchAll($query, [$beforeDay, $triggeredDate]);
    }
}
<?php

namespace OrangeHRM\DevOps\usageStats;

use Exception;
use OrangeHRM\DevOps\usageStats\MonthWiseLoginDistribution;
use OrangeHRM\DevOps\helper\TimeDataHelper;

class UserLoginAnalyzer extends DataAnalyzer
{

    public function getResult($triggeredDate, $beforeDay, $pastMonths)
    {
        $resultArray = [];

        $detailedViewData = [];
        $detailedViewData['login-distribution-line-graph'] = [
            'dataSet' => $this->getNumberOfLoginsMonthlyBreakDown($triggeredDate, $beforeDay, $pastMonths),
            'xAxis' => 'Month',
            'yAxis' => 'Count',
        ];

        $detailedViewData['login-country-based-count'] = [
            'dataSet' => $this->getNumberOfLoginsCountryLocationBreakDown($beforeDay, $triggeredDate, 'country'),
        ];

        $detailedViewData['login-location-based-count'] = [
            'dataSet' => $this->getNumberOfLoginsCountryLocationBreakDown($beforeDay, $triggeredDate, 'location'),
        ];

        $detailedViewData['login-country-location-month-based-count'] = [
            'dataSet' => $this->getCountryMonthBasedLoginCount($beforeDay, $triggeredDate),
        ];

        $detailedViewData['login-country-month-wise-break-down-table-only'] = [
            'dataSet' => $this->getNumberOfLoginsMonthCountryBreakDown($beforeDay, $triggeredDate),
        ];
        $detailedViewData['active-user-count-distribution-table-multigraph'] = [
            'dataSet' => $this->getNumberOfActiveEmployeesMonthlyBreakDown($triggeredDate, $beforeDay, $pastMonths),
            'xAxis' => 'Month',
            'yAxis' => 'Count',
        ];

        $detailedViewData['active-user-count-distribution-table-multigraph-converted'] = [
            'dataSet' => $this->convertDataForGraph($this->getNumberOfActiveEmployeesMonthlyBreakDown($triggeredDate, $beforeDay, $pastMonths)),
        ];

        $resultArray['detailed-view-data'] = $detailedViewData;

        return $resultArray;
    }

    //Format data for represent in google charts
    public function convertDataForGraph($dataList)
    {
        $dataForGraph = [];
        if (is_array($dataList)) {
            foreach ($dataList as $data) {
                $dataForGraph[] = [$data['Month'], (int)$data['No.OfUniqueUsersLoggedIn'], (int)$data['totalLoginCount']];
            }
        }
        return $dataForGraph;
    }

    /**
     * @throws Exception
     */
    public function getNumberOfLoginsMonthlyBreakDown($triggeredDate, $beforeDay, $allMonths)
    {

        $query = "
SELECT
       DATE_FORMAT(ohrm_login.login_time, '%Y%m'),
       COUNT(ohrm_login.user_id)
FROM ohrm_login 
    LEFT OUTER JOIN ohrm_user ON ohrm_login.user_id = ohrm_user.id 
WHERE DATE_FORMAT(ohrm_login.login_time,'%Y-%m-%d') BETWEEN ? AND ?
GROUP BY DATE_FORMAT(ohrm_login.login_time,'%Y%m');";

        $result = $this->getInstanceDatabaseAccessUtility()->fetchKeyValuePairs($query,
            [$beforeDay, $triggeredDate]);
        $finalArray = TimeDataHelper::instance()->fillArrayWithAllKeys($result, $allMonths);
        $arrayForReturn = TimeDataHelper::instance()->getFormattedKeys($finalArray, 'months');


        return ($arrayForReturn);
    }

    /**
     * @throws Exception
     */
    public function getNumberOfLoginsMonthCountryBreakDown($beforeDay, $triggeredDate): ?array
    {

        $hasMultipleLocations = $this->getInstanceDatabaseAccessUtility()->tableExists('hs_hr_emp_locations');

        if ($hasMultipleLocations) {
            $locationJoin = "LEFT JOIN hs_hr_emp_locations ON hs_hr_emp_locations.emp_number = e.emp_number 
                LEFT JOIN ohrm_location ON hs_hr_emp_locations.location_id = ohrm_location.id";
        } else {
            $locationJoin = "LEFT JOIN ohrm_location ON ohrm_location.id = e.location_id";
        }

        $query = "
            SELECT
                IFNULL(hs_hr_country.cou_name, 'Unspecified') AS country ,
                DATE_FORMAT(l.login_time,'%x-%') AS date,
                COUNT(l.user_id) AS count
            FROM ohrm_login AS l
                LEFT OUTER JOIN ohrm_user AS u ON l.user_id = u.id 
                LEFT OUTER JOIN hs_hr_employee e ON u.emp_number = e.emp_number 
                {$locationJoin}
                LEFT OUTER JOIN hs_hr_country ON ohrm_location.country_code = hs_hr_country.cou_code
            WHERE  
                DATE_FORMAT(l.login_time,'%Y-%m-%d') BETWEEN ? AND ?
            GROUP BY DATE_FORMAT(l.login_time,'%Y%m'), hs_hr_country.cou_name
            ;";

        return $this->getInstanceDatabaseAccessUtility()->fetchAll($query, [$beforeDay, $triggeredDate]);
    }

    /**
     * @throws Exception
     */
    public function getNumberOfLoginsCountryLocationBreakDown($beforeDay, $triggeredDate, $type): ?array
    {

        $hasMultipleLocations = $this->getInstanceDatabaseAccessUtility()->tableExists('hs_hr_emp_locations');
        $locationJoin = "LEFT JOIN ohrm_location loc ON loc.id = e.location_id";
        if ($hasMultipleLocations) {
            $locationJoin = "LEFT JOIN hs_hr_emp_locations ON hs_hr_emp_locations.emp_number = e.emp_number 
                LEFT JOIN ohrm_location loc ON hs_hr_emp_locations.location_id = loc.id";
        }

        if ($type === 'location') {
            $selectQuery = "IFNULL(loc.name, 'Unspecified') AS location ,IFNULL(c.cou_name, 'Unspecified') AS country_name ,";
        } else if ($type === 'country') {
            $selectQuery = "IFNULL(c.cou_name, 'Unspecified') AS country , IFNULL(c.cou_code, 'Unspecified') AS country_code ,";
        }

        $query = "
           SELECT
                {$selectQuery}
               COUNT(DISTINCT l.`user_id`)  AS `uniqueUserCount`,
                COUNT(l.user_id) AS count
                    FROM ohrm_login AS l
                             LEFT JOIN ohrm_user AS u ON l.user_id = u.id
                             LEFT JOIN hs_hr_employee e ON u.emp_number = e.emp_number
                             {$locationJoin}
                             LEFT OUTER JOIN hs_hr_country c ON loc.country_code = c.cou_code
                    WHERE
                        DATE(l.login_time) BETWEEN ? AND ?
                    GROUP BY {$type};";

        return $this->getInstanceDatabaseAccessUtility()->fetchAll($query, [$beforeDay, $triggeredDate]);
    }

    public function getNumberOfActiveEmployeesMonthlyBreakDown($triggeredDate, $beforeDay, $allMonths): array
    {

        $dataPoint = new MonthWiseLoginDistribution();
        $dataPoint->setInstanceDatabaseAccessUtility($this->getInstanceDatabaseAccessUtility());
        $result = $dataPoint->getValue();

        $monthWiseActiveEmployeeCount = [];
        foreach ($result as $row) {
            $monthWiseActiveEmployeeCount[] = [
                'Month' => $row['month'],
                'No.OfUniqueUsersLoggedIn' => $row['uniqueUserCount'],
                'totalLoginCount' => $row['totalLoginCount'],
            ];
        }

        return $monthWiseActiveEmployeeCount;

    }

    public function getCountryMonthBasedLoginCount($beforeDay, $triggeredDate): ?array
    {

        $hasMultipleLocations = $this->getInstanceDatabaseAccessUtility()->tableExists('hs_hr_emp_locations');
        $locationJoin = "LEFT JOIN ohrm_location loc ON loc.id = e.location_id";
        if ($hasMultipleLocations) {
            $locationJoin = "LEFT JOIN hs_hr_emp_locations ON hs_hr_emp_locations.emp_number = e.emp_number 
                LEFT JOIN ohrm_location loc ON hs_hr_emp_locations.location_id = loc.id";
        }

        $query = "select IFNULL(c.cou_name, 'Unspecified') AS countryM,
       IFNULL(loc.name, 'Unspecified') AS locationM,
       CONCAT(YEAR(l.`login_time`), '-', DATE_FORMAT(l.login_time, '%b')) as month,
       COUNT(DISTINCT l.`user_id`)  AS `uniqueUserCount`,
       COUNT(l.user_id) AS count
       
FROM ohrm_login l
         LEFT JOIN ohrm_user AS u ON l.user_id = u.id
         LEFT JOIN hs_hr_employee e ON u.emp_number = e.emp_number
         {$locationJoin}
         LEFT OUTER JOIN hs_hr_country c ON loc.country_code = c.cou_code
WHERE
    DATE(l.login_time) BETWEEN ? AND ? GROUP BY  month, countryM, locationM ORDER BY locationM, l.login_time ASC ;";

        return $this->getInstanceDatabaseAccessUtility()->fetchAll($query, [$beforeDay, $triggeredDate]);
    }

}
<?php

namespace OrangeHRM\DevOps\utility;

use Exception;

class CronExpressionDecoderUtility
{

    protected array $a = [];
    protected array $months = [
        1 => 'January',
        2 => 'February',
        3 => 'March',
        4 => 'April',
        5 => 'May',
        6 => 'June',
        7 => 'July',
        8 => 'August',
        9 => 'September',
        10 => 'October',
        11 => 'November',
        12 => 'December',
    ];
    protected array $daysOfWeek = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'];
    protected string $repeatMatch = '/\*\/([0-9]{1,})/';
    protected string $rangeMatch = '/^([0-9]+)-([0-9]+)/';
    protected string $definitiveMatch = '/^[0-9]+/';

    /**
     * @throws Exception
     */
    public function decode(string $cronExpression): string
    {

        $portions = preg_split('/\s+/', $cronExpression);

        if (count($portions) !== 5) {
            throw new Exception("Cron expression should consist of 5 parts. (Passed: {$cronExpression})");
        }

        $this->a = [];

        $this->interpretTime($portions[0], $portions[1]);
        $this->interpretDayOfMonth($portions[2]);
        $this->interpretDayOfWeek($portions[4]);
        $this->interpretMonth($portions[3]);

        return ucfirst(implode(', ', $this->a));
    }

    protected function interpretTime(string $minute, string $hour): void
    {
        $m = [];
        $n = [];

        $minutesAreAll = ($minute === '*');
        $hoursAreAll = ($hour === '*');
        $minutesAreRepetitive = preg_match($this->repeatMatch, $minute, $m);
        $hoursAreRepetitive = preg_match($this->repeatMatch, $hour, $n);
        $minutesAreDefinitive = preg_match($this->definitiveMatch, $minute);
        $hoursAreDefinitive = preg_match($this->definitiveMatch, $hour);

        if ($minutesAreAll && $hoursAreAll) {
            $this->a[] = 'every minute';
        } elseif ($minutesAreRepetitive && $hoursAreAll) {
            $this->a[] = "every {$this->pluralize($m[1], 'minute')}";
        } elseif ($hoursAreRepetitive && $minutesAreAll) {
            $this->a[] = "Every minute, every {$this->pluralize($n[1], 'hour')}";
        } elseif ($minutesAreRepetitive && $hoursAreRepetitive) {
            $this->a[] = "every {$this->pluralize($m[1], 'minute')}";
            $this->a[] = "every {$this->pluralize($n[1], 'hour')}";
        } elseif ($minutesAreDefinitive && $hoursAreAll) {
            $this->a[] = "at {$this->pluralize($minute, 'minute')} past the hour";
        } elseif ($hoursAreDefinitive && $minutesAreAll) {
            $this->a[] = "every minute, at {$this->time($minute, $hour)}";
        } elseif ($minutesAreDefinitive && $hoursAreDefinitive) {
            $this->a[] = "at {$this->time($minute, $hour)}";
        } elseif ($minutesAreDefinitive && $hoursAreRepetitive) {
            $this->a[] = "at {$this->pluralize($minute, 'minute')} past the hour";
            $this->a[] = "every {$this->pluralize($n[1], 'hour')}";
        } elseif ($minutesAreRepetitive && $hoursAreDefinitive) {
            $this->a[] = "every {$this->pluralize($m[1], 'minute')}";
            $this->a[] = "at {$this->time('00', $hour)}";
        }
    }

    protected function interpretDayOfWeek(string $dayOfWeek): void
    {
        if ($dayOfWeek === '*') {
            return;
        } elseif (preg_match($this->repeatMatch, $dayOfWeek, $d)) {
            $this->a[] = "every {$this->pluralize($d[1], 'day')} of the week";
        } elseif (preg_match($this->rangeMatch, $dayOfWeek, $d)) {
            $this->a[] = "from {$this->daysOfWeek[$d[1]]} to {$this->daysOfWeek[$d[2]]}";
        } elseif (preg_match($this->definitiveMatch, $dayOfWeek)) {
            $this->a[] = "only on {$this->daysOfWeek[$dayOfWeek]}";
        }
    }

    protected function interpretDayOfMonth(string $dayOfMonth): void
    {
        $d = [];
        if ($dayOfMonth === '*') {
            return;
        } elseif (preg_match($this->repeatMatch, $dayOfMonth, $d)) {
            $this->a[] = "every {$this->pluralize($d[1], 'day')}";
        } elseif (preg_match($this->definitiveMatch, $dayOfMonth)) {
            $this->a[] = "on day {$dayOfMonth} of the month";
        }
    }

    protected function interpretMonth(string $month): void
    {
        $m = [];
        if ($month === '*') {
            return;
        } elseif (preg_match($this->repeatMatch, $month, $m)) {
            $this->a[] = "every {$this->pluralize($m[1], 'month')}";
        } elseif (preg_match($this->definitiveMatch, $month)) {
            $this->a[] = "only in {$this->months[$month]}";
        }
    }

    protected final function pluralize($number, string $noun): string
    {
        if ($number > 1) {
            return "{$number} {$noun}s";
        }
        return $noun;
    }

    protected final function time(string $minute, string $hour): string
    {
        $d = strtotime(str_replace('*', '00', "{$hour}:{$minute}"));
        return date('h:i A', $d);
    }

}
<?php

namespace OrangeHRM\DevOps\utility;

use Exception;

class FileSystemUtility
{

    const SYSTEM_DIRS = [
        '/',
        '/bin',
        '/sbin',
        '/etc',
        '/usr',
        '/var',
        '/opt',
        '/boot',
        '/dev',
        '/lib',
        '/lib64',
        '/proc',
        '/root',
        '/run',
        '/sys',
        '/tmp',
    ];

    public function findHostedDomains(string $vhostsConfigDirectory): array
    {

        $domains = [];

        $dir = opendir($vhostsConfigDirectory);
        while ($file = readdir($dir)) {
            if (is_file("{$vhostsConfigDirectory}/{$file}")) {
                $content = file_get_contents("{$vhostsConfigDirectory}/{$file}");
                $matches = [];
                preg_match_all('/ServerName\s{1,}([a-zA-Z0-9.\-]{1,})/i', $content, $matches);
                if (count($matches) > 1) {
                    $domains = array_merge($domains, $matches[1]);
                }
            }
        }

        return array_values(array_unique($domains));
    }

    /**
     * @throws Exception
     */
    public function findDocumentRoot(string $domain, string $vhostsConfigDirectory): ?string
    {
        $vhostConfigurationFile = $this->findVHostConfigurationFile($domain, $vhostsConfigDirectory);
        $vhostFileContent = trim(file_get_contents($vhostConfigurationFile));

        $vhosts = explode('<VirtualHost', $vhostFileContent);

        foreach ($vhosts as $vhost) {
            $configString = trim($vhost);

            if (preg_match('/ServerName\s{1,}' . $domain . '/', $configString) === 1) {

                $matches = [];
                $result = preg_match('/DocumentRoot\s{1,}([a-zA-Z0-9.\/\-_]{1,})/', $configString, $matches);
                if ($result === 1) {
                    if (count($matches) === 2) {
                        return $matches[1];
                    } else {
                        throw new Exception("Found more than one entry when locating the DocumentRoot");
                    }
                } else {
                    throw new Exception("Couldn't find the DocumentRoot definition in the given VirtualHost.");
                }
            }
        }

        return null;
    }

    /**
     * @throws Exception
     */
    public function findVHostConfigurationFile(string $domain, string $vhostsConfigDirectory): string
    {
        if (empty($vhostsConfigDirectory) || !is_dir($vhostsConfigDirectory)) {
            throw new Exception("{$vhostsConfigDirectory} is not a directory.");
        }

        $command = "grep -Rlw {$domain} {$vhostsConfigDirectory}/*.conf";

        $output = [];
        $returnVar = null;
        exec($command, $output, $returnVar);

        if ($returnVar == 0) {
            $resultCount = count($output);
            if ($resultCount === 1) {
                list($vhostConfigurationFile) = $output;
                return $vhostConfigurationFile;
            } elseif ($resultCount === 0) {
                throw new Exception("No VirtualHost configuration containing {$domain} was found.");
            } else {
                throw new Exception("More than one configuration containing {$domain} was found.");
            }
        } else {
            throw new Exception("Error while locating the VirtualHost configuration containing {$domain}.");
        }
    }

    /**
     * @throws Exception
     */
    public function backupFile(string $path): void
    {
        if (!is_file($path)) {
            throw new Exception("File {$path} doesn't exist.");
        }

        copy($path, $path . '.bak-' . date('YmdHis'));
    }

    /**
     * @throws Exception
     */
    public function backupDirectory(string $path, ?string $destination = null): void
    {
        if (!is_dir($path)) {
            throw new Exception("Directory {$path} doesn't exist.");
        }

        if (empty($destination)) {
            $destination = dirname($path);
        }

        if (!is_dir($destination)) {
            throw new Exception("Destination path {$destination} doesn't exist.");
        }

        $timestamp = date('YmdHis');
        $directory = basename($path);
        exec("mv \"{$path}\" \"{$destination}\{$directory}.bak-{$timestamp}\"");
    }

    /**
     * @throws Exception
     */
    public function copyDirectory(string $source, string $destination): void
    {
        if (!is_dir($source)) {
            throw new Exception("Directory {$source} doesn't exist.");
        }

        if (!is_dir($destination) && !is_writable(dirname($destination))) {
            throw new Exception("Parent directory of the destination is not writable.");
        }

        if (is_dir($destination) && !is_writable($destination)) {
            throw new Exception("{$destination} is not writable.");
        }

        if (trim($source) === trim($destination)) {
            throw new Exception("Source and destination are the same.");
        }

        exec("cp -r \"{$source}\" \"{$destination}\"");

    }

    public function deleteFiles(array $files): void
    {
        foreach ($files as $file) {
            if (is_file($file)) {
                unlink($file);
            }
        }
    }

    /**
     * @throws Exception
     */
    public function move(array $sources, string $destination): void
    {
        if (!is_dir($destination)) {
            throw new Exception("Destination {$destination} doesn't exist.");
        }

        foreach ($sources as $dir) {
            if (is_dir($dir)) {
                $name = uniqid() . '_' . basename($dir);
                exec("mv \"{$dir}\" \"{$destination}/{$name}\" ");
            }
        }
    }

    public final function isSystemDirectory(string $dir): bool
    {
        return in_array(realpath($dir), self::SYSTEM_DIRS, true);
    }

    public function isProductionInstanceDirectory(string $dir): bool
    {
        return preg_match('/^\/var\/www\/html\/OHRMStandalone\/PROD\/.+/', realpath($dir)) !== false;
    }

}
<?php

namespace OrangeHRM\DevOps\utility;

use Exception;

class HttpUtility
{

    protected ?string $auth = null;
    protected ?string $caCertificatePath = null;

    public function setAuth(string $auth)
    {
        $this->auth = $auth;
    }

    public function setCaCertificatePath(string $caCertificatePath): void
    {
        $this->caCertificatePath = $caCertificatePath;
    }


    /**
     * @throws Exception
     */
    public function post(string $url, array $postData, array $requestHeaders = [], array $files = []): string
    {
        $ch = curl_init();

        foreach ($files as $fieldName => $filePath) {
            $cFile = curl_file_create($filePath);
            $postData[$fieldName] = $cFile;
        }

        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_POST, true);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

        if (!empty($requestHeaders)) {
            curl_setopt($ch, CURLOPT_HTTPHEADER, $requestHeaders);
        }

        if (!is_null($this->auth)) {
            curl_setopt($ch, CURLOPT_USERPWD, $this->auth);
        }

        if (file_exists($this->caCertificatePath)) {
            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
            curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
            curl_setopt($ch, CURLOPT_CAINFO, $this->caCertificatePath);
        } else {
            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
            curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
        }

        $response = curl_exec($ch);

        $errorNo = curl_errno($ch);
        if ($errorNo) {
            $errorMessage = curl_strerror($errorNo);
            throw new Exception("cURL error ({$errorNo}): {$errorMessage}");
        } else {
            curl_close($ch);
            return $response;
        }
    }

    /**
     * @throws Exception
     */
    public function get(string $url): string
    {
        $ch = curl_init();

        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

        if (!is_null($this->auth)) {
            curl_setopt($ch, CURLOPT_USERPWD, $this->auth);
        }

        if (file_exists($this->caCertificatePath)) {
            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
            curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
            curl_setopt($ch, CURLOPT_CAINFO, $this->caCertificatePath);
        } else {
            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
            curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
        }

        $response = curl_exec($ch);

        $errorNo = curl_errno($ch);
        if ($errorNo) {
            $errorMessage = curl_strerror($errorNo);
            throw new Exception("cURL error ({$errorNo}): {$errorMessage}");
        } else {
            curl_close($ch);
            return $response;
        }
    }

    public function head(string $url): array
    {
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_FILETIME, true);
        curl_setopt($ch, CURLOPT_NOBODY, true);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_HEADER, true);

        if (file_exists($this->caCertificatePath)) {
            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
            curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
            curl_setopt($ch, CURLOPT_CAINFO, $this->caCertificatePath);
        } else {
            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
            curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
        }

        $headersText = curl_exec($ch);
        curl_close($ch);

        $headerLines = explode("\r\n", $headersText);

        $headers = [];
        foreach ($headerLines as $line) {
            if (trim($line) === '') {
                continue;
            }
            list($key, $value) = explode(':', $line);
            $headers[$key] = trim($value);
        }

        return $headers;

    }

}
<?php

namespace OrangeHRM\DevOps\utility;

use Exception;
use PDO;
use Symfony\Component\Yaml\Yaml;

class InstanceDatabaseAccessUtility
{

    protected PDO $dbh;
    protected string $dbHost;
    protected int $dbPort;
    protected string $dbUser;
    protected string $dbPassword;
    protected string $installationDirectory;
    protected $configUtility;
    protected array $tables = [];
    protected array $tableColumns = [];

    public function setDbUser(string $dbUser): void
    {
        $this->dbUser = $dbUser;
    }

    public function setDbPassword(string $dbPassword): void
    {
        $this->dbPassword = $dbPassword;
    }

    public function setDbHost(string $dbHost)
    {
        $this->dbHost = $dbHost;
    }

    public function setDbPort(int $dbPort)
    {
        $this->dbPort = $dbPort;
    }

    public function setInstallationDirectory(string $installationDirectory)
    {
        $this->installationDirectory = $installationDirectory;
    }

    public function checkConnection(string $host, int $port, $username, $password): bool
    {
        try {
            new PDO("mysql:host={$host};port={$port}", $username, $password, [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]);
            return true;
        } catch (Exception $e) {
            return false;
        }
    }


    /**
     * @throws Exception
     */
    public function fetchColumn(string $query, array $executeParameters = [])
    {
        $stmt = $this->getDbh()->prepare($query);
        $stmt->execute($executeParameters);
        return $stmt->fetchColumn();
    }

    /**
     * @throws Exception
     */
    public function getRowCount(string $query, array $executeParams = []): int
    {
        $stmt = $this->getDbh()->prepare($query);
        $stmt->execute($executeParams);
        return $stmt->rowCount();


    }

    /**
     * @throws Exception
     */
    public function fetchAll(string $query, array $executeParams = []): ?array
    {
        $stmt = $this->getDbh()->prepare($query);
        $stmt->execute($executeParams);
        return $stmt->fetchAll(PDO::FETCH_ASSOC);
    }

    /**
     * @throws Exception
     */
    public function fetchKeyValuePairs(string $query, array $executeParams = []): ?array
    {
        $stmt = $this->getDbh()->prepare($query);
        $stmt->execute($executeParams);
        return $stmt->fetchAll(PDO::FETCH_KEY_PAIR);
    }

    /**
     * @throws Exception
     */
    public function fetchScalar(string $query, array $executeParams = []): ?array
    {
        $stmt = $this->getDbh()->prepare($query);
        $stmt->execute($executeParams);
        return $stmt->fetchAll(PDO::FETCH_COLUMN);
    }

    /**
     * @throws Exception
     */
    public final function columnExists(string $column, string $table): bool
    {

        if (!$this->tableExists($table)) {
            return false;
        }

        if (!array_key_exists($table, $this->tableColumns)) {
            $this->tableColumns[$table] = $this->fetchScalar("DESC `{$table}`");
        }

        return in_array($column, $this->tableColumns[$table]);
    }

    /**
     * @throws Exception
     */
    public final function tableExists(string $table): bool
    {

        if (empty($this->tables)) {
            $this->tables = $this->fetchScalar("SHOW TABLES;");
        }

        return in_array($table, $this->tables);
    }

    /**
     * @throws Exception
     */
    public function execute(string $sql, array $params = []): bool
    {
        $stmt = $this->getDbh()->prepare($sql);
        return $stmt->execute($params);
    }

    /**
     * @throws Exception
     */
    public function beginTxn(): void
    {
        if (!isset($this->dbh)) {
            throw new Exception("Database connection is not set.");
        }

        $this->dbh->beginTransaction();
    }

    public function executeTxnStatement($sql, array $params = []): void
    {

        foreach ($params as $attribute => $value) {
            $this->dbh->setAttribute($attribute, $value);
        }

        $this->dbh->exec($sql);
    }

    public function commitTxn(): void
    {
        $this->dbh->commit();
    }

    public function rollbackTxn(): void
    {
        $this->dbh->rollBack();
    }

    /**
     * @throws Exception
     */
    protected function getDbh(): PDO
    {
        if (!isset($this->dbh)) {
            if (!isset($this->dbUser) || !isset($this->dbPassword)) {
                throw new Exception("Databases credentials are not set.");
            }

            $options = [
                PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8mb4",
                PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
            ];

            if (isset($this->installationDirectory)) {

                if (!file_exists($this->installationDirectory . '/symfony/config/databases.yml')) {
                    throw new Exception("The databases.yml file in {$this->installationDirectory} does not exist.");
                }

                $dbConfig = Yaml::parseFile($this->installationDirectory . '/symfony/config/databases.yml', Yaml::PARSE_OBJECT);

                if (isset($dbConfig['all']['doctrine']['param']['dsn'])) {
                    $dsn = trim($dbConfig['all']['doctrine']['param']['dsn']);

                    // Patch DSN to ensure charset is set (if it's a mysql DSN)
                    if (stripos($dsn, 'mysql:') === 0 && stripos($dsn, 'charset=') === false) {
                        $dsn .= ';charset=utf8mb4';
                    }

                    $this->dbh = new PDO($dsn, $this->dbUser, $this->dbPassword, $options);
                } else {
                    throw new Exception("The databases.yml file in {$this->installationDirectory} appears to be invalid.");
                }
            } else {
                $dsn = "mysql:host={$this->dbHost};port={$this->dbPort};charset=utf8mb4";
                $this->dbh = new PDO($dsn, $this->dbUser, $this->dbPassword, $options);
            }

        }

        return $this->dbh;
    }

    public function getConfigUtility()
    {
        return $this->configUtility;
    }

    public function setConfigUtility($configUtility)
    {
        $this->configUtility = $configUtility;
    }

}
<?php

namespace OrangeHRM\DevOps\utility;

use Exception;

class InstanceLicenseInfoRetrievalUtility
{

    protected string $installationDirectory;
    protected array $licenseProperties;

    public function setInstallationDirectory(string $installationDirectory)
    {
        $this->installationDirectory = $installationDirectory;
    }

    /**
     * @throws Exception
     */
    public function getLicenseProperties(): array
    {
        $licenseMangerInterfacePath = 'symfony/plugins/orangehrmCoreAuthorizationPlugin/lib/authorization/license/LicenseManager.php';
        $ioncubeLicenseMangerPath = 'symfony/plugins/orangehrmCoreAuthorizationPlugin/lib/authorization/license/IonCubeLicenseManager.php';

        if (is_file("{$this->installationDirectory}/{$ioncubeLicenseMangerPath}")) {
            require_once "{$this->installationDirectory}/{$licenseMangerInterfacePath}";
            require_once "{$this->installationDirectory}/{$ioncubeLicenseMangerPath}";

            $licenseManger = new \IonCubeLicenseManager();
            $licenseStatus = $licenseManger->getLicenseStatus();
            if ($licenseStatus === 'LICENSE_VALID' || $licenseStatus === 'LICENSE_EXPIRED') {
                $licenseProperties = $licenseManger->getLicenseProperties();

                $expireOn = $licenseManger->getLicenseExpiryTime();
                $licenseProperties['expireOn'] = empty($expireOn) ? null : date('Y-m-d', (int)$expireOn);

                return $licenseProperties;
            } else {
                throw new Exception('License is not valid');
            }
        } else {
            throw new Exception('IonCubeLicenseManager is not available in the given instance');
        }
    }

}
<?php

namespace OrangeHRM\DevOps\utility;

class LogUtility
{
    protected string $filePath;

    public function __construct(string $filePath)
    {
        $this->filePath = $filePath;
        $this->init();
    }

    public function pass(string $message, int $level = 1): void
    {
        $this->log($message, 'PASS', $level);
    }

    public function info(string $message, int $level = 1): void
    {
        $this->log($message, 'INFO', $level);
    }

    public function warn(string $message, int $level = 1): void
    {
        $this->log($message, 'WARN', $level);
    }

    public function error(string $message, int $level = 1): void
    {
        $this->log($message, 'EROR', $level);
    }

    protected final function log(string $message, string $type = 'INFO', int $level = 1, bool $withTimestamp = true): void
    {
        $message = str_repeat("\t", $level - 1) . ($withTimestamp ? '[' . date('Y-m-d H:i:s T') . '] ' : '') . (empty($type) ? '' : "{$type}: ") . "{$message}\n";
        file_put_contents($this->filePath, $message, FILE_APPEND);
    }

    protected final function init(): void
    {
        if (!file_exists($this->filePath)) {
            touch($this->filePath);
        }
    }
}
<?php

namespace OrangeHRM\DevOps\utility;

class PasswordUtility
{
    public function generateStrongPassword(int $length = 9, bool $add_dashes = false, string $available_sets = 'luds')
    {
        $sets = [];
        if (strpos($available_sets, 'l') !== false)
            $sets[] = 'abcdefghjkmnpqrstuvwxyz';
        if (strpos($available_sets, 'u') !== false)
            $sets[] = 'ABCDEFGHJKMNPQRSTUVWXYZ';
        if (strpos($available_sets, 'd') !== false)
            $sets[] = '23456789';
        if (strpos($available_sets, 's') !== false)
            $sets[] = '@#';
        $all = '';
        $password = '';
        foreach ($sets as $set) {
            $password .= $set[array_rand(str_split($set))];
            $all .= $set;
        }
        $all = str_split($all);
        for ($i = 0; $i < $length - count($sets); $i++)
            $password .= $all[array_rand($all)];
        $password = str_shuffle($password);
        if (!$add_dashes)
            return $password;
        $dash_len = floor(sqrt($length));
        $dash_str = '';
        while (strlen($password) > $dash_len) {
            $dash_str .= substr($password, 0, $dash_len) . '-';
            $password = substr($password, $dash_len);
        }
        $dash_str .= $password;
        return $dash_str;
    }
}
<?php

namespace OrangeHRM\DevOps\utility;

use Exception;

class ShellUtility
{

    public function run(array $commands): array
    {
        $command = implode(' && ', $commands);
        exec($command, $output, $return);
        return ['exitStatus' => $return, 'output' => $output];
    }
}
<?php

namespace OrangeHRM\DevOps\utility;

class TableDescriptorUtility
{
    protected array $tableDescriptions = [];

    public function __construct() {
        $this->init();
    }

    protected function init() : void
    {
        $this->tableDescriptions = json_decode(file_get_contents('../attachment-tables-descriptions.json'), true);
    }

    public function getTableDescription(string $tableName): string
    {
        return isset($this->tableDescriptions[$tableName]) && !empty($this->tableDescriptions[$tableName]) ? $this->tableDescriptions[$tableName] : $tableName;
    }

}
<?php

namespace OrangeHRM\DevOps\utility;


use DateInterval;
use DatePeriod;
use DateTime;
use Exception;

class TimePeriodValueUtility
{
    /**
     * @throws Exception
     */
    public function generateAllMonths(string $startDate, string $endDate): array
    {
        $startDateObj = new DateTime($startDate);
        $endDateObj = new DateTime($endDate);

        $dateInterval = new DateInterval('P1M');
        $datePeriod = new DatePeriod($startDateObj, $dateInterval, $endDateObj);

        $allMonths = [];
        foreach ($datePeriod as $date) {
            $allMonths[] = ($date->format('Ym'));
        }
        return $allMonths;
    }

    public function getAllWeeks(string $startDate, string $endDate): array
    {
        $startTime = strtotime($startDate);
        $endTime = strtotime($endDate);
        $weeks = [];

        while ($startTime < $endTime) {
            $weeks[] = (int)(date('Y', $startTime) . date('W', $startTime));
            $startTime += strtotime('+1 week', 0);
        }

        return $weeks;
    }

    public function fillArrayWithAllKeys(array $result, array $allDates): array
    {

        $arrayDiff = array_diff($allDates, array_keys($result));
        $filledArray = array_fill_keys($arrayDiff, 0);
        $finalArray = $filledArray + $result;
        ksort($finalArray);
        return $finalArray;
    }

    public function getFormattedKeys(array $finalArray, string $type): array
    {
        $outputArray = [];
        if ($type === 'months') {
            foreach ($finalArray as $key => $val) {
                $date = strtotime((substr((string)$key, 0, 4) . '-' . substr((string)$key, 4, 6)));
                $outputArray[] = [
                    'month' => date('Y-M', $date),
                    'count' => $val,
                ];
            }
        } elseif ($type === 'days') {
            foreach ($finalArray as $key => $val) {
                $outputArray[] = [
                    'month' => $key,
                    'count' => $val,
                ];
            }
        } elseif ($type === 'weeks') {
            foreach ($finalArray as $key => $val) {
                $dateTime = new DateTime();
                $dateTime->setISODate(substr((string)$key, 0, 4), substr((string)$key, 4, 6));
                $firstDayOfWeek = $dateTime->format('Y-m-d');
                $dateTime = DateTime::createFromFormat('Y-m-d', $firstDayOfWeek);
                $dateTime->modify('next sunday');
                $sunday = $dateTime->format('Y-M-d');
                $innerArray['month'] = $sunday;
                $innerArray['count'] = $val;
                $outputArray[] = $innerArray;
            }

        } elseif ($type === 'rearrange') {
            foreach ($finalArray as $key => $val) {
                $outputArray[] = [
                    'month' => $key,
                    'count' => $val,
                ];
            }
        }

        return $outputArray;
    }

    public function getFormattedKeysForMonth(array $finalArray): array
    {
        $arrayForReturn = [];

        foreach ($finalArray as $key => $val) {
            $date = strtotime((substr((string)$key, 0, 4) . substr((string)$key, 4, 6)));
            $arrayForReturn[] = [
                'month' => date('Y-M', $date),
                'count' => $val,
            ];
        }

        return $arrayForReturn;
    }
}
<?php

namespace OrangeHRM\DevOps\utility;

use Exception;

class ValueFormatter
{
    const HUMAN_READABLE_FORMAT_REGEX = '/^(\d+)(\.\d{1,2})?\s*([KMGT])?B$/';

    protected array $sizes = ['B', 'KB', 'MB', 'GB', 'TB'];
    protected array $multipliers = [
        'k' => 1000,
        'K' => 1024,
        'm' => 1000000,
        'M' => 1048576,
        'g' => 1000000000,
        'G' => 1073741824,
        't' => 1000000000000,
        'T' => 1099511627776,
    ];
    protected array $periods = ['day' => 1, 'week' => 7, 'month' => 30, 'year' => 365];

    public function sizeToHumanReadableFormat(?int $sizeInBytes)
    {
        if (is_null($sizeInBytes)) {
            return 0;
        }

        if ($sizeInBytes === 0) {
            return 0;
        }
        $i = floor(log($sizeInBytes) / log(1024));

        if ($i === 0.0) {
            return $sizeInBytes . ' ' . $this->sizes[$i];
        }

        return number_format($sizeInBytes / pow(1024, $i), 2) . ' ' . $this->sizes[$i];
    }

    public function isInHumanReadableFormat($value): bool
    {
        return (bool)preg_match(self::HUMAN_READABLE_FORMAT_REGEX, $value);
    }

    /**
     * @throws Exception
     */
    public function humanReadableFormatToSize(string $humanReadableFormat): float
    {
        if ($humanReadableFormat === '0') {
            return 0.0;
        }

        if (preg_match('/^\d{1,}$/', $humanReadableFormat) && is_numeric($humanReadableFormat)) {
            return (float)$humanReadableFormat;
        }

        $matches = [];
        preg_match(self::HUMAN_READABLE_FORMAT_REGEX, $humanReadableFormat, $matches);

        if (!empty($matches) && count($matches) >= 3) {
            if (count($matches) === 3) {
                return ((float)"{$matches[1]}{$matches[2]}");
            }
            $multiplier = $matches[3];
            return ((float)"{$matches[1]}{$matches[2]}") * ((float)$this->multipliers[$multiplier]);
        } else {
            throw new Exception("Unsupported format");
        }
    }

    /**
     * @throws Exception
     */
    public function ynToYesNo(string $value): string
    {
        $map = ['y' => 'Yes', 'n' => 'No', 'Y' => "Yes", 'N' => 'No'];
        if (array_key_exists($value, $map)) {
            return $map[$value];
        } else {
            throw new Exception("{$value} is not either 'y' or 'n'.");
        }
    }

    public function boolToYesNo(bool $value): string
    {
        return ($value) ? 'Yes' : 'No';
    }

    /**
     * @throws Exception
     */
    public function periodToDays($period): float
    {
        list($value, $measurement) = explode(' ', $period);

        $singularMeasurement = preg_replace('/s$/', '', $measurement);
        if (!array_key_exists($singularMeasurement, $this->periods) || !is_numeric($value)) {
            throw new Exception("{$period} is not a valid time period.");
        }

        return ((float)$value * $this->periods[$singularMeasurement]);
    }
}
[client]
host=172.26.0.200
user=root
password=V8JNV@U4qLTJ
<?php

namespace OrangeHRM\Test\DevOps\utility;

use OrangeHRM\DevOps\utility\TimePeriodValueUtility;
use PHPUnit\Framework\TestCase;

class TimePeriodValueUtilityTest extends TestCase
{

    protected TimePeriodValueUtility $instance;

    protected function setUp(): void
    {
        $this->instance = new TimePeriodValueUtility();
    }


    public function testGetAllWeeks()
    {
        $expected = range(202101, 202112);
        $this->assertEquals($expected, $this->instance->getAllWeeks('2021-01-10', '2021-03-31'));

        $expected = array_merge([202153], range(202101, 202151));
        $this->assertEquals($expected, $this->instance->getAllWeeks('2021-01-01', '2021-12-31'));
    }

    public function testGenerateAllMonths()
    {

    }

    public function testGetFormattedKeys()
    {

    }

    public function testGetFormattedKeysForMonth()
    {

    }

    public function testFillArrayWithAllKeys()
    {

    }
}
<?php

namespace OrangeHRM\Test\DevOps\utility;

use OrangeHRM\DevOps\utility\ValueFormatter;
use PHPUnit\Framework\TestCase;
use Exception;

class ValueFormatterTest extends TestCase
{
    protected ValueFormatter $instance;

    protected function setUp(): void
    {
        $this->instance = new ValueFormatter();
    }

    public function testHumanReadableFormatToSize()
    {
        $this->assertEquals(0.0, $this->instance->humanReadableFormatToSize(0));
        $this->assertEquals(150.0, $this->instance->humanReadableFormatToSize('150'));
        $this->assertEquals(500.0, $this->instance->humanReadableFormatToSize('500.00 B'));
        $this->assertEquals(1024.0, $this->instance->humanReadableFormatToSize('1.00 KB'));
        $this->assertEquals(1048576.0, $this->instance->humanReadableFormatToSize('1.00 MB'));
        $this->assertEquals(1073741824.0, $this->instance->humanReadableFormatToSize('1.00 GB'));
        $this->assertEquals(1099511627776.0, $this->instance->humanReadableFormatToSize('1.00 TB'));

        $this->expectException(Exception::class);
        $this->instance->humanReadableFormatToSize('Invalid format');
    }

    public function testYnToYesNo()
    {
        $this->assertEquals('Yes', $this->instance->ynToYesNo('y'));
        $this->assertEquals('Yes', $this->instance->ynToYesNo('Y'));
        $this->assertEquals('No', $this->instance->ynToYesNo('n'));
        $this->assertEquals('No', $this->instance->ynToYesNo('N'));

        $this->expectException(Exception::class);
        $this->instance->ynToYesNo('Invalid format');
    }

    public function testPeriodToDays()
    {
        $this->assertEquals(1, $this->instance->periodToDays('1 day'));
        $this->assertEquals(5, $this->instance->periodToDays('5 days'));
        $this->assertEquals(10, $this->instance->periodToDays('10 days'));
        $this->assertEquals(7, $this->instance->periodToDays('1 week'));
        $this->assertEquals(30, $this->instance->periodToDays('1 month'));
        $this->assertEquals(300, $this->instance->periodToDays('10 months'));
        $this->assertEquals(365, $this->instance->periodToDays('1 year'));
        $this->assertEquals(3650, $this->instance->periodToDays('10 years'));

        $this->expectException(Exception::class);
        $this->instance->periodToDays('Invalid format');
    }

    public function testBoolToYesNo()
    {
        $this->assertEquals('Yes', $this->instance->boolToYesNo( true));
        $this->assertEquals('Yes', $this->instance->boolToYesNo(True));
        $this->assertEquals('No', $this->instance->boolToYesNo(false));
        $this->assertEquals('No', $this->instance->boolToYesNo(False));
    }

    public function testIsInHumanReadableFormat()
    {
        $this->assertTrue($this->instance->isInHumanReadableFormat('500 B'));
        $this->assertTrue($this->instance->isInHumanReadableFormat('1.23 KB'));
        $this->assertTrue($this->instance->isInHumanReadableFormat('5.6 MB'));
        $this->assertTrue($this->instance->isInHumanReadableFormat('10.4 GB'));
        $this->assertTrue($this->instance->isInHumanReadableFormat('5.25 TB'));
        $this->assertTrue($this->instance->isInHumanReadableFormat('3.4GB'));

        $this->assertFalse($this->instance->isInHumanReadableFormat('500')); // Missing unit
        $this->assertFalse($this->instance->isInHumanReadableFormat('1.23 K')); // Missing 'B'
        $this->assertFalse($this->instance->isInHumanReadableFormat('5.6 MB ')); // Extra whitespace
        $this->assertFalse($this->instance->isInHumanReadableFormat('1.23 KBG')); // Invalid unit

    }

    public function testSizeToHumanReadableFormat()
    {
        $this->assertEquals(0, $this->instance->sizeToHumanReadableFormat(null));
        $this->assertEquals(0, $this->instance->sizeToHumanReadableFormat(0));
        $this->assertEquals('500 B', $this->instance->sizeToHumanReadableFormat(500));
        $this->assertEquals('1.00 KB', $this->instance->sizeToHumanReadableFormat(1024));
        $this->assertEquals('1.00 MB', $this->instance->sizeToHumanReadableFormat(1048576));
        $this->assertEquals('1.00 GB', $this->instance->sizeToHumanReadableFormat(1073741824));
        $this->assertEquals('1.00 TB', $this->instance->sizeToHumanReadableFormat(1099511627776));
    }
}
# Changelog

## [v3.7.3](https://github.com/php-amqplib/php-amqplib/tree/v3.7.3) (2025-02-18)

[Full Changelog](https://github.com/php-amqplib/php-amqplib/compare/v3.7.2...v3.7.3)

**Fixed bugs:**

- fix: stop signal sending from child once interrupted, ensure child process is terminated [\#1205](https://github.com/php-amqplib/php-amqplib/pull/1205) ([ramunasd](https://github.com/ramunasd))

## [v3.7.2](https://github.com/php-amqplib/php-amqplib/tree/v3.7.2) (2024-11-21)

[Full Changelog](https://github.com/php-amqplib/php-amqplib/compare/v3.7.1...v3.7.2)

**Fixed bugs:**

- fix: deprecation warnings with PHP 8.4 [\#1200](https://github.com/php-amqplib/php-amqplib/pull/1200) ([acelaya](https://github.com/acelaya))
- fix: Mark channels closed when connection is closed [\#1195](https://github.com/php-amqplib/php-amqplib/pull/1195) ([Xfaider48](https://github.com/Xfaider48))

**Closed issues:**

- Deprecation warnings thrown with PHP 8.4 [\#1198](https://github.com/php-amqplib/php-amqplib/issues/1198)
- error handler in StreamIO::write\(\) assumes last\_error is present [\#1188](https://github.com/php-amqplib/php-amqplib/issues/1188)
- Breaking changes with pcntl signals on `channel->wait function`, when using `non_blocking: false` [\#1135](https://github.com/php-amqplib/php-amqplib/issues/1135)

## [v3.7.1](https://github.com/php-amqplib/php-amqplib/tree/v3.7.1) (2024-09-03)

[Full Changelog](https://github.com/php-amqplib/php-amqplib/compare/v3.7.0...v3.7.1)

**Implemented enhancements:**

- Fix wrong stream IO error code, improve write speed [\#1192](https://github.com/php-amqplib/php-amqplib/pull/1192) ([ramunasd](https://github.com/ramunasd))
- AMQP Exception marker interface is for `Throwable` types [\#1189](https://github.com/php-amqplib/php-amqplib/pull/1189) ([Ocramius](https://github.com/Ocramius))

## [v3.7.0](https://github.com/php-amqplib/php-amqplib/tree/v3.7.0) (2024-07-09)

[Full Changelog](https://github.com/php-amqplib/php-amqplib/compare/v3.6.2...v3.7.0)

**Implemented enhancements:**

- fix: create a new exception for each warning in IO layer with reference to previous [\#1183](https://github.com/php-amqplib/php-amqplib/pull/1183) ([ramunasd](https://github.com/ramunasd))

**Fixed bugs:**

- first error message thrown by stream\_socket\_enable\_crypto\(\) is not propagated to caller [\#1181](https://github.com/php-amqplib/php-amqplib/issues/1181)

**Closed issues:**

- feof\(\) check in /Wire/IO/StreamIO::write\(\) blocks connection [\#1176](https://github.com/php-amqplib/php-amqplib/issues/1176)

**Merged pull requests:**

- AMQPConnectionClosedException is never thrown from checkConnection\(\) [\#1185](https://github.com/php-amqplib/php-amqplib/pull/1185) ([villfa](https://github.com/villfa))
- chore: deprecate properties related to old protocol mode [\#1182](https://github.com/php-amqplib/php-amqplib/pull/1182) ([ramunasd](https://github.com/ramunasd))
- Add verbose test output [\#1180](https://github.com/php-amqplib/php-amqplib/pull/1180) ([lukebakken](https://github.com/lukebakken))
- CI workflow updates [\#1179](https://github.com/php-amqplib/php-amqplib/pull/1179) ([lukebakken](https://github.com/lukebakken))
- deprecate AMQPSSLConnection class [\#1178](https://github.com/php-amqplib/php-amqplib/pull/1178) ([ramunasd](https://github.com/ramunasd))
- remove feof\(\) check on connection.  this check fails under Windows wh… [\#1177](https://github.com/php-amqplib/php-amqplib/pull/1177) ([jjdunn](https://github.com/jjdunn))

## [v3.6.2](https://github.com/php-amqplib/php-amqplib/tree/v3.6.2) (2024-04-15)

[Full Changelog](https://github.com/php-amqplib/php-amqplib/compare/v3.6.1...v3.6.2)

**Merged pull requests:**

- Trigger ssl\_protocol deprecation when it is really not null and not AMQPConnectionConfig instance [\#1163](https://github.com/php-amqplib/php-amqplib/pull/1163) ([SergeyKhrystenko](https://github.com/SergeyKhrystenko))

## [v3.6.1](https://github.com/php-amqplib/php-amqplib/tree/v3.6.1) (2024-02-07)

[Full Changelog](https://github.com/php-amqplib/php-amqplib/compare/v3.6.0...v3.6.1)

**Implemented enhancements:**

- ipv6 support [\#1145](https://github.com/php-amqplib/php-amqplib/pull/1145) ([InnoT20](https://github.com/InnoT20))

**Fixed bugs:**

- fix: throw exception on stream\_socket\_enable\_crypto\(\) warning [\#1158](https://github.com/php-amqplib/php-amqplib/pull/1158) ([ramunasd](https://github.com/ramunasd))

**Closed issues:**

-  stream\_set\_blocking\(\): Argument \#2 \($enable\) must be of type bool, int given [\#1155](https://github.com/php-amqplib/php-amqplib/issues/1155)
- Connection option close\_on\_destruct doesn't work because of circular reference [\#1144](https://github.com/php-amqplib/php-amqplib/issues/1144)
- Cannot avoid static analysis issues with deprecation of `$ssl_options` in `AMQPStreamConnection` [\#1136](https://github.com/php-amqplib/php-amqplib/issues/1136)

**Merged pull requests:**

- fix static analysis warnings [\#1156](https://github.com/php-amqplib/php-amqplib/pull/1156) ([ramunasd](https://github.com/ramunasd))
- Delay stream resource init [\#1154](https://github.com/php-amqplib/php-amqplib/pull/1154) ([ramunasd](https://github.com/ramunasd))
- Widen `AMQPStreamConnection`'s `$ssl_protocol` parameter to accept `AMQPConnectionConfig` [\#1137](https://github.com/php-amqplib/php-amqplib/pull/1137) ([ben-challis](https://github.com/ben-challis))

## [v3.6.0](https://github.com/php-amqplib/php-amqplib/tree/v3.6.0) (2023-10-22)

[Full Changelog](https://github.com/php-amqplib/php-amqplib/compare/v3.5.4...v3.6.0)

**Implemented enhancements:**

- Only call fwrite\(\) if select\(\) said the fd is ready. [\#1132](https://github.com/php-amqplib/php-amqplib/pull/1132) ([Sthing](https://github.com/Sthing))
- TCP keepalive for TLS connections [\#1116](https://github.com/php-amqplib/php-amqplib/pull/1116) ([egorgrushko](https://github.com/egorgrushko))

**Fixed bugs:**

- Fix frame wait interruption by signals [\#1129](https://github.com/php-amqplib/php-amqplib/pull/1129) ([ramunasd](https://github.com/ramunasd))

**Closed issues:**

- Wrong thrown `AMQPTimeoutException`-exception for heartbeat [\#1118](https://github.com/php-amqplib/php-amqplib/issues/1118)
- `AMQPTimeoutException` is thrown without reaching the timeout limit [\#1109](https://github.com/php-amqplib/php-amqplib/issues/1109)
- tls connection without verify peer failed [\#1108](https://github.com/php-amqplib/php-amqplib/issues/1108)

**Merged pull requests:**

- Updated docblock [\#1133](https://github.com/php-amqplib/php-amqplib/pull/1133) ([berniedurfee-renaissance](https://github.com/berniedurfee-renaissance))
- Update checkout to v4 [\#1128](https://github.com/php-amqplib/php-amqplib/pull/1128) ([salehhashemi1992](https://github.com/salehhashemi1992))
- Add Additional Test Coverage for AMQPConnectionConfig Class [\#1126](https://github.com/php-amqplib/php-amqplib/pull/1126) ([salehhashemi1992](https://github.com/salehhashemi1992))
- Test against php 8.3 [\#1124](https://github.com/php-amqplib/php-amqplib/pull/1124) ([sergiy-petrov](https://github.com/sergiy-petrov))
- drop support for PHP7.1 [\#1122](https://github.com/php-amqplib/php-amqplib/pull/1122) ([ramunasd](https://github.com/ramunasd))
- Adjust config for isSecure and setSslVerify [\#1106](https://github.com/php-amqplib/php-amqplib/pull/1106) ([wiryonolau](https://github.com/wiryonolau))

## [v3.5.4](https://github.com/php-amqplib/php-amqplib/tree/v3.5.4) (2023-07-01)

[Full Changelog](https://github.com/php-amqplib/php-amqplib/compare/v3.5.3...v3.5.4)

**Implemented enhancements:**

- feat\(heartbeat\): add support for lazy connections [\#1100](https://github.com/php-amqplib/php-amqplib/pull/1100) ([ramunasd](https://github.com/ramunasd))

**Fixed bugs:**

- Positive heartbeat of client is overwritten by server's 0 heartbeat value. All versions from 3.3.1 affected [\#1080](https://github.com/php-amqplib/php-amqplib/issues/1080)

**Closed issues:**

- Heartbeat senders do not work with lazy connections [\#1099](https://github.com/php-amqplib/php-amqplib/issues/1099)

## [v3.5.3](https://github.com/php-amqplib/php-amqplib/tree/v3.5.3) (2023-04-03)

[Full Changelog](https://github.com/php-amqplib/php-amqplib/compare/v3.5.2...v3.5.3)

**Fixed bugs:**

- Fix server heartbeat overwrite client value [\#1081](https://github.com/php-amqplib/php-amqplib/pull/1081) ([ramunasd](https://github.com/ramunasd))

## [v3.5.2](https://github.com/php-amqplib/php-amqplib/tree/v3.5.2) (2023-03-01)

[Full Changelog](https://github.com/php-amqplib/php-amqplib/compare/v3.5.1...v3.5.2)

**Implemented enhancements:**

- Security levels SSL options [\#1075](https://github.com/php-amqplib/php-amqplib/pull/1075) ([alexanderbirch](https://github.com/alexanderbirch))

**Fixed bugs:**

- Does not pass `$config` parameter to AMQPSocketConnection using `AMQPConnectionFactory::create` [\#1076](https://github.com/php-amqplib/php-amqplib/issues/1076)
- Bug fix, Deprecation notice update [\#1077](https://github.com/php-amqplib/php-amqplib/pull/1077) ([ssi-anik](https://github.com/ssi-anik))

## [v3.5.1](https://github.com/php-amqplib/php-amqplib/tree/v3.5.1) (2023-01-20)

[Full Changelog](https://github.com/php-amqplib/php-amqplib/compare/v3.5.0...v3.5.1)

**Closed issues:**

- Connect error since 3.5.0 [\#1065](https://github.com/php-amqplib/php-amqplib/issues/1065)

**Merged pull requests:**

- Update GHA to use latest RabbitMQ [\#1068](https://github.com/php-amqplib/php-amqplib/pull/1068) ([lukebakken](https://github.com/lukebakken))
- Revert \#1060 [\#1066](https://github.com/php-amqplib/php-amqplib/pull/1066) ([lukebakken](https://github.com/lukebakken))

## [v3.5.0](https://github.com/php-amqplib/php-amqplib/tree/v3.5.0) (2023-01-16)

[Full Changelog](https://github.com/php-amqplib/php-amqplib/compare/v3.4.0...v3.5.0)

**Implemented enhancements:**

- Support for authentication method "external" [\#1064](https://github.com/php-amqplib/php-amqplib/pull/1064) ([ramunasd](https://github.com/ramunasd))
- Optimize frame parsing logic [\#1063](https://github.com/php-amqplib/php-amqplib/pull/1063) ([ramunasd](https://github.com/ramunasd))
- Add support for lazy connect to all classes [\#1042](https://github.com/php-amqplib/php-amqplib/pull/1042) ([ramunasd](https://github.com/ramunasd))
- Added channel\_rpc\_timeout [\#1041](https://github.com/php-amqplib/php-amqplib/pull/1041) ([bravoman](https://github.com/bravoman))

**Fixed bugs:**

- SIGHeartbeatSender uses fixed Signal [\#1039](https://github.com/php-amqplib/php-amqplib/issues/1039)
- Define default ssl context parameter [\#1060](https://github.com/php-amqplib/php-amqplib/pull/1060) ([ramunasd](https://github.com/ramunasd))
- Fix hardcoded signal code in SIGHeartbeatSender [\#1043](https://github.com/php-amqplib/php-amqplib/pull/1043) ([ramunasd](https://github.com/ramunasd))

## [v3.4.0](https://github.com/php-amqplib/php-amqplib/tree/v3.4.0) (2022-10-18)

[Full Changelog](https://github.com/php-amqplib/php-amqplib/compare/v3.3.1...v3.4.0)

**Implemented enhancements:**

- Add the ability to set the connection name through AMQPConnectionConfig [\#1035](https://github.com/php-amqplib/php-amqplib/pull/1035) ([i3bepb](https://github.com/i3bepb))

**Fixed bugs:**

- v3.3.0 heartbeat error [\#1029](https://github.com/php-amqplib/php-amqplib/issues/1029)

**Merged pull requests:**

- Missing PHPDoc param in AbstractConnection constructor [\#1033](https://github.com/php-amqplib/php-amqplib/pull/1033) ([i3bepb](https://github.com/i3bepb))
- Split buffer and IO readers into separate classes [\#1031](https://github.com/php-amqplib/php-amqplib/pull/1031) ([ramunasd](https://github.com/ramunasd))

## [v3.3.1](https://github.com/php-amqplib/php-amqplib/tree/v3.3.1) (2022-10-04)

[Full Changelog](https://github.com/php-amqplib/php-amqplib/compare/v3.3.0...v3.3.1)

**Fixed bugs:**

- Allow disable heartbeats from client side [\#1030](https://github.com/php-amqplib/php-amqplib/pull/1030) ([ramunasd](https://github.com/ramunasd))

**Closed issues:**

- Flaky CI test runs [\#1027](https://github.com/php-amqplib/php-amqplib/issues/1027)

## [v3.3.0](https://github.com/php-amqplib/php-amqplib/tree/v3.3.0) (2022-10-03)

[Full Changelog](https://github.com/php-amqplib/php-amqplib/compare/v3.2.0...v3.3.0)

**Implemented enhancements:**

- Allow set socket send buffer size [\#1026](https://github.com/php-amqplib/php-amqplib/pull/1026) ([ramunasd](https://github.com/ramunasd))
- Add capath SSL option support [\#1014](https://github.com/php-amqplib/php-amqplib/pull/1014) ([garrick-lam](https://github.com/garrick-lam))

**Fixed bugs:**

- Heartbeat of client overwrite without any conditions the one from server [\#1018](https://github.com/php-amqplib/php-amqplib/issues/1018)
- Fix heartbeat negotiation [\#1024](https://github.com/php-amqplib/php-amqplib/pull/1024) ([ramunasd](https://github.com/ramunasd))
- Throw connection exceptions on batch publish [\#983](https://github.com/php-amqplib/php-amqplib/pull/983) ([foment](https://github.com/foment))

**Merged pull requests:**

- Update codecov action to latest version [\#1028](https://github.com/php-amqplib/php-amqplib/pull/1028) ([ramunasd](https://github.com/ramunasd))
- Upgrade toxiproxy, enable all tests on CI [\#1025](https://github.com/php-amqplib/php-amqplib/pull/1025) ([ramunasd](https://github.com/ramunasd))
- chore: Set permissions for GitHub actions [\#1001](https://github.com/php-amqplib/php-amqplib/pull/1001) ([nathannaveen](https://github.com/nathannaveen))
- Fix rate limiting [\#985](https://github.com/php-amqplib/php-amqplib/pull/985) ([lukebakken](https://github.com/lukebakken))

## [v3.2.0](https://github.com/php-amqplib/php-amqplib/tree/v3.2.0) (2022-03-10)

[Full Changelog](https://github.com/php-amqplib/php-amqplib/compare/v3.1.2...v3.2.0)

**Implemented enhancements:**

- Channel method for continuous message consumption [\#977](https://github.com/php-amqplib/php-amqplib/pull/977) ([ramunasd](https://github.com/ramunasd))
- Propagate real exceptions [\#976](https://github.com/php-amqplib/php-amqplib/pull/976) ([dmitryuk](https://github.com/dmitryuk))
- unified configuration class and factory for all kinds of connection [\#975](https://github.com/php-amqplib/php-amqplib/pull/975) ([ramunasd](https://github.com/ramunasd))
- Custom PCNTL Heartbeat Sender [\#971](https://github.com/php-amqplib/php-amqplib/pull/971) ([khepin](https://github.com/khepin))

**Fixed bugs:**

- PCNTL SIGTERM break on select ? [\#458](https://github.com/php-amqplib/php-amqplib/issues/458)
- Add $restart\_syscalls = true explicitly when calling pcntl\_signal to avoid crashing SQL Server connections [\#972](https://github.com/php-amqplib/php-amqplib/pull/972) ([maxiwheat](https://github.com/maxiwheat))

**Merged pull requests:**

- Php amqplib 3.2.0 [\#984](https://github.com/php-amqplib/php-amqplib/pull/984) ([lukebakken](https://github.com/lukebakken))
- getChannelId can return null [\#981](https://github.com/php-amqplib/php-amqplib/pull/981) ([dmitryuk](https://github.com/dmitryuk))

## [v3.1.2](https://github.com/php-amqplib/php-amqplib/tree/v3.1.2) (2022-01-18)

[Full Changelog](https://github.com/php-amqplib/php-amqplib/compare/v3.1.1...v3.1.2)

**Implemented enhancements:**

- use github changelog generator [\#970](https://github.com/php-amqplib/php-amqplib/pull/970) ([ramunasd](https://github.com/ramunasd))

**Fixed bugs:**

- Always restore original error handler after socket/stream actions [\#969](https://github.com/php-amqplib/php-amqplib/pull/969) ([ramunasd](https://github.com/ramunasd))

**Closed issues:**

- Deprecation warnings on ArrayAccess methods [\#967](https://github.com/php-amqplib/php-amqplib/issues/967)

**Merged pull requests:**

- add return type hints in AMQPAbstractCollection [\#968](https://github.com/php-amqplib/php-amqplib/pull/968) ([ramunasd](https://github.com/ramunasd))

## [v3.1.1](https://github.com/php-amqplib/php-amqplib/tree/v3.1.1) (2021-12-03)

[Full Changelog](https://github.com/php-amqplib/php-amqplib/compare/v3.1.0...v3.1.1)

**Fixed bugs:**

- fix deprecation notice from stream\_select\(\) on PHP8.1 [\#963](https://github.com/php-amqplib/php-amqplib/pull/963) ([ramunasd](https://github.com/ramunasd))

**Closed issues:**

- Support for PHP 8.1 [\#959](https://github.com/php-amqplib/php-amqplib/issues/959)

## [v3.1.0](https://github.com/php-amqplib/php-amqplib/tree/v3.1.0) (2021-10-22)

[Full Changelog](https://github.com/php-amqplib/php-amqplib/compare/v3.0.0...v3.1.0)

**Implemented enhancements:**

- drop support for PHP7.0 [\#949](https://github.com/php-amqplib/php-amqplib/pull/949) ([ramunasd](https://github.com/ramunasd))
- Add support for floating point values in tables/array [\#945](https://github.com/php-amqplib/php-amqplib/pull/945) ([ramunasd](https://github.com/ramunasd))
- Add PHP 8.1 support [\#929](https://github.com/php-amqplib/php-amqplib/pull/929) ([javer](https://github.com/javer))

**Fixed bugs:**

- Consumer fails with AMQP-rabbit doesn't define data of type \[d\] [\#924](https://github.com/php-amqplib/php-amqplib/issues/924)
- Fixed composer php version constraint [\#916](https://github.com/php-amqplib/php-amqplib/pull/916) ([rkrx](https://github.com/rkrx))

**Closed issues:**

- How $channel-\>wait\(\) work on loop forever [\#939](https://github.com/php-amqplib/php-amqplib/issues/939)
- The header isn't fragmented causing large headers to hit the maximum frame size. [\#934](https://github.com/php-amqplib/php-amqplib/issues/934)
- Keeping a connection open for publishing [\#932](https://github.com/php-amqplib/php-amqplib/issues/932)
- prefetch\_count seems to consume always only 1 message [\#919](https://github.com/php-amqplib/php-amqplib/issues/919)
- Can't connect to ssl amqp hosts. [\#918](https://github.com/php-amqplib/php-amqplib/issues/918)
- Updating "phpseclib/phpseclib" is necessary! [\#914](https://github.com/php-amqplib/php-amqplib/issues/914)
- README - Non-existant code of conduct file [\#913](https://github.com/php-amqplib/php-amqplib/issues/913)
- consumer\_tag: Consumer identifier [\#909](https://github.com/php-amqplib/php-amqplib/issues/909)
- AMQPLazyConnection::create\_connection does not work [\#798](https://github.com/php-amqplib/php-amqplib/issues/798)

**Merged pull requests:**

- throw exception on attempt to create lazy connection to multiple hosts [\#951](https://github.com/php-amqplib/php-amqplib/pull/951) ([ramunasd](https://github.com/ramunasd))
- Fix static analysis warnings [\#948](https://github.com/php-amqplib/php-amqplib/pull/948) ([ramunasd](https://github.com/ramunasd))
- Use correct default for read\_write\_timeout in AMQPStreamConnection\#try\_create\_connection [\#923](https://github.com/php-amqplib/php-amqplib/pull/923) ([bezhermoso](https://github.com/bezhermoso))
- Improved examples and dosc [\#917](https://github.com/php-amqplib/php-amqplib/pull/917) ([corpsee](https://github.com/corpsee))
- Fix code style: unnecessary space [\#915](https://github.com/php-amqplib/php-amqplib/pull/915) ([maximal](https://github.com/maximal))

## [v3.0.0](https://github.com/php-amqplib/php-amqplib/tree/v3.0.0) (2021-03-16)

[Full Changelog](https://github.com/php-amqplib/php-amqplib/compare/v3.0.0-rc2...v3.0.0)

**Merged pull requests:**

- Change php required version in composer.json [\#905](https://github.com/php-amqplib/php-amqplib/pull/905) ([adoy](https://github.com/adoy))

## [v3.0.0-rc2](https://github.com/php-amqplib/php-amqplib/tree/v3.0.0-rc2) (2021-03-09)

[Full Changelog](https://github.com/php-amqplib/php-amqplib/compare/v3.0.0-rc1...v3.0.0-rc2)

**Fixed bugs:**

- PHP 8 support [\#904](https://github.com/php-amqplib/php-amqplib/pull/904) ([patrickkusebauch](https://github.com/patrickkusebauch))

**Closed issues:**

- PHP 8 support issue [\#903](https://github.com/php-amqplib/php-amqplib/issues/903)

## [v3.0.0-rc1](https://github.com/php-amqplib/php-amqplib/tree/v3.0.0-rc1) (2021-03-08)

[Full Changelog](https://github.com/php-amqplib/php-amqplib/compare/v2.12.3...v3.0.0-rc1)

**Breaking changes:**

- Drop deprecated things [\#897](https://github.com/php-amqplib/php-amqplib/pull/897) ([ramunasd](https://github.com/ramunasd))

**Implemented enhancements:**

- Allow to use SSL connection as lazy [\#893](https://github.com/php-amqplib/php-amqplib/pull/893) ([odombrovskyi-dev](https://github.com/odombrovskyi-dev))
- Support php 8.0 [\#858](https://github.com/php-amqplib/php-amqplib/pull/858) ([axxapy](https://github.com/axxapy))

**Fixed bugs:**

- BigInteger breaks authoritative class maps [\#885](https://github.com/php-amqplib/php-amqplib/issues/885)
- fix ValueError on closed or broken socket [\#888](https://github.com/php-amqplib/php-amqplib/pull/888) ([ramunasd](https://github.com/ramunasd))

**Merged pull requests:**

- Drop support for PHP5.6 [\#884](https://github.com/php-amqplib/php-amqplib/pull/884) ([ramunasd](https://github.com/ramunasd))
- feat\(Composer\) run test composer 2. [\#882](https://github.com/php-amqplib/php-amqplib/pull/882) ([Yozhef](https://github.com/Yozhef))
- feat\(Travis\) remove travis. [\#881](https://github.com/php-amqplib/php-amqplib/pull/881) ([Yozhef](https://github.com/Yozhef))
- feat\(CodeCov\) add Codecov phpunit code coverage. [\#880](https://github.com/php-amqplib/php-amqplib/pull/880) ([Yozhef](https://github.com/Yozhef))
- Phpdoc types and minor improvements [\#869](https://github.com/php-amqplib/php-amqplib/pull/869) ([andrew-demb](https://github.com/andrew-demb))

## [v2.12.3](https://github.com/php-amqplib/php-amqplib/tree/v2.12.3) (2021-03-01)

[Full Changelog](https://github.com/php-amqplib/php-amqplib/compare/2.12.2...v2.12.3)

**Fixed bugs:**

- ValueError exception in PHP8 [\#883](https://github.com/php-amqplib/php-amqplib/issues/883)

**Closed issues:**

- process multiple messages at the same  [\#898](https://github.com/php-amqplib/php-amqplib/issues/898)
- application\_headers vs headers [\#890](https://github.com/php-amqplib/php-amqplib/issues/890)
- Remove support for PHP 5.X [\#877](https://github.com/php-amqplib/php-amqplib/issues/877)

## [2.12.2](https://github.com/php-amqplib/php-amqplib/tree/2.12.2) (2021-02-12)

[Full Changelog](https://github.com/php-amqplib/php-amqplib/compare/v2.12.1...2.12.2)

**Implemented enhancements:**

- Add support for next major version of phpseclib/phpseclib [\#875](https://github.com/php-amqplib/php-amqplib/pull/875) ([ramunasd](https://github.com/ramunasd))

**Fixed bugs:**

- Provide AMQPTable to exchange\_declare [\#873](https://github.com/php-amqplib/php-amqplib/issues/873)
- fix annotation when AMQPTable is allowed variable type [\#874](https://github.com/php-amqplib/php-amqplib/pull/874) ([ramunasd](https://github.com/ramunasd))
- fix PCNTL heartbeat signal registration [\#866](https://github.com/php-amqplib/php-amqplib/pull/866) ([laurynasgadl](https://github.com/laurynasgadl))

**Closed issues:**

- Type definition delivery tag differs [\#876](https://github.com/php-amqplib/php-amqplib/issues/876)
- PHP 8 Deprecate required parameters after optional parameters issue [\#870](https://github.com/php-amqplib/php-amqplib/issues/870)
- PCNTLHeartbeatSender would be never triggered again when connection in writing status  [\#865](https://github.com/php-amqplib/php-amqplib/issues/865)
- PHP8 deprecation warnings [\#860](https://github.com/php-amqplib/php-amqplib/issues/860)
- PHP 8.0.0 Deprecated: Required parameter ... follows optional parameter ... in  [\#856](https://github.com/php-amqplib/php-amqplib/issues/856)
- The connection would lost on some environment and cause destruct failed [\#849](https://github.com/php-amqplib/php-amqplib/issues/849)
- About message body string "quit" [\#848](https://github.com/php-amqplib/php-amqplib/issues/848)
- Why is the client disconnecting automatically with no errors nor Exceptions? [\#847](https://github.com/php-amqplib/php-amqplib/issues/847)
- PHP 8: Required parameter $io follows optional parameter $vhost [\#846](https://github.com/php-amqplib/php-amqplib/issues/846)
- AMQPProtocolException phpdoc arguments type annotations are swapped [\#844](https://github.com/php-amqplib/php-amqplib/issues/844)
- PHP Fatal error:  Uncaught exception 'PhpAmqpLib\Exception\AMQPTimeoutException' with message 'The connection timed out after 3 sec while awaiting incoming data' [\#839](https://github.com/php-amqplib/php-amqplib/issues/839)
- The dependency phpseclib needs an update to version 3.\* [\#867](https://github.com/php-amqplib/php-amqplib/issues/867)

**Merged pull requests:**

- Fixed AMQPProtocolException phpdoc arguments type annotations [\#845](https://github.com/php-amqplib/php-amqplib/pull/845) ([zerkms](https://github.com/zerkms))
- Change phpdoc $delivery\_tag type to int [\#838](https://github.com/php-amqplib/php-amqplib/pull/838) ([autowp](https://github.com/autowp))
- Update documentation on published release [\#837](https://github.com/php-amqplib/php-amqplib/pull/837) ([ramunasd](https://github.com/ramunasd))
- perform CI tests using github actions [\#836](https://github.com/php-amqplib/php-amqplib/pull/836) ([ramunasd](https://github.com/ramunasd))
- PSR 12 [\#868](https://github.com/php-amqplib/php-amqplib/pull/868) ([andrew-demb](https://github.com/andrew-demb))
- feat \(Code Style\) start integration PSR-2. [\#859](https://github.com/php-amqplib/php-amqplib/pull/859) ([Yozhef](https://github.com/Yozhef))
- Implement \ArrayAccess in AMQPAbstractCollection [\#850](https://github.com/php-amqplib/php-amqplib/pull/850) ([idsulik](https://github.com/idsulik))

## [v2.12.1](https://github.com/php-amqplib/php-amqplib/tree/v2.12.1) (2020-09-25)

[Full Changelog](https://github.com/php-amqplib/php-amqplib/compare/v2.12.0...v2.12.1)

**Implemented enhancements:**

- Tests should run with TLS enabled [\#758](https://github.com/php-amqplib/php-amqplib/issues/758)
- Use docker containers for broker and proxy in travis CI tests [\#831](https://github.com/php-amqplib/php-amqplib/pull/831) ([ramunasd](https://github.com/ramunasd))

**Fixed bugs:**

- wait\_for\_pending\_acks results in: LogicException\("Delivery tag cannot be changed"\) [\#827](https://github.com/php-amqplib/php-amqplib/issues/827)
- Error Connecting to server\(0\): [\#825](https://github.com/php-amqplib/php-amqplib/issues/825)
- validate basic\_consume\(\) arguments and avoid invalid callbacks [\#834](https://github.com/php-amqplib/php-amqplib/pull/834) ([ramunasd](https://github.com/ramunasd))

**Closed issues:**

- Does the library supports federation conf? [\#826](https://github.com/php-amqplib/php-amqplib/issues/826)
- Publishing not happend after publishing to non-existent exchange [\#823](https://github.com/php-amqplib/php-amqplib/issues/823)

**Merged pull requests:**

- SSL tests and fixed demo [\#832](https://github.com/php-amqplib/php-amqplib/pull/832) ([ramunasd](https://github.com/ramunasd))
- fix LogicException while waiting for pending broker ack [\#830](https://github.com/php-amqplib/php-amqplib/pull/830) ([ramunasd](https://github.com/ramunasd))
- revert \#785 'Enable TLS SNI by default' [\#829](https://github.com/php-amqplib/php-amqplib/pull/829) ([ramunasd](https://github.com/ramunasd))

## [v2.12.0](https://github.com/php-amqplib/php-amqplib/tree/v2.12.0) (2020-08-25)

[Full Changelog](https://github.com/php-amqplib/php-amqplib/compare/v2.11.3...v2.12.0)

**Implemented enhancements:**

- Add signal-based heartbeat option [\#815](https://github.com/php-amqplib/php-amqplib/pull/815) ([laurynasgadl](https://github.com/laurynasgadl))
- CI tests for PHP 7.4 [\#800](https://github.com/php-amqplib/php-amqplib/pull/800) ([ramunasd](https://github.com/ramunasd))
- AMQPMessage new interface [\#799](https://github.com/php-amqplib/php-amqplib/pull/799) ([ramunasd](https://github.com/ramunasd))
- Enable TLS SNI by setting peer\_name to $host in $ssl\_options [\#785](https://github.com/php-amqplib/php-amqplib/pull/785) ([carlhoerberg](https://github.com/carlhoerberg))

**Fixed bugs:**

- Adding exception handling for better user experience [\#810](https://github.com/php-amqplib/php-amqplib/issues/810)
- Possible blocking connection even when connection\_timeout is specified [\#804](https://github.com/php-amqplib/php-amqplib/issues/804)
- use simple output instead of STDOUT in debug helper [\#819](https://github.com/php-amqplib/php-amqplib/pull/819) ([ramunasd](https://github.com/ramunasd))
- add missing timeout param for connection handshake response [\#812](https://github.com/php-amqplib/php-amqplib/pull/812) ([ramunasd](https://github.com/ramunasd))

**Closed issues:**

- Setting x-ha-policy from client side is not longer available since version 3.0 [\#811](https://github.com/php-amqplib/php-amqplib/issues/811)
- Debug in some cases is not working - possible fix - line 29 in DebugHelper [\#809](https://github.com/php-amqplib/php-amqplib/issues/809)
- when I want to use publish\_batch in confirm: 2 [\#807](https://github.com/php-amqplib/php-amqplib/issues/807)
- when I want to use publish\_batch in confirm [\#806](https://github.com/php-amqplib/php-amqplib/issues/806)
- NullClasses for testing [\#802](https://github.com/php-amqplib/php-amqplib/issues/802)

**Merged pull requests:**

- AbstractIO::select\(\) never returns false [\#817](https://github.com/php-amqplib/php-amqplib/pull/817) ([szepeviktor](https://github.com/szepeviktor))
- Tidy up CI configuration [\#816](https://github.com/php-amqplib/php-amqplib/pull/816) ([szepeviktor](https://github.com/szepeviktor))
- add type check for basic\_consume\(\) callback [\#814](https://github.com/php-amqplib/php-amqplib/pull/814) ([ramunasd](https://github.com/ramunasd))
- Exclude non-essential files from dist [\#796](https://github.com/php-amqplib/php-amqplib/pull/796) ([fedotov-as](https://github.com/fedotov-as))

## [v2.11.3](https://github.com/php-amqplib/php-amqplib/tree/v2.11.3) (2020-05-13)

[Full Changelog](https://github.com/php-amqplib/php-amqplib/compare/v2.11.2...v2.11.3)

**Fixed bugs:**

- Unexpected heartbeat missed exception [\#793](https://github.com/php-amqplib/php-amqplib/issues/793)
- Fix unexpected missed heartbeat exception [\#794](https://github.com/php-amqplib/php-amqplib/pull/794) ([ramunasd](https://github.com/ramunasd))

## [v2.11.2](https://github.com/php-amqplib/php-amqplib/tree/v2.11.2) (2020-04-30)

[Full Changelog](https://github.com/php-amqplib/php-amqplib/compare/v2.11.1...v2.11.2)

**Fixed bugs:**

- Perform socket/stream select before data write [\#791](https://github.com/php-amqplib/php-amqplib/pull/791) ([ramunasd](https://github.com/ramunasd))

**Closed issues:**

- Fatal error: Uncaught exception 'PhpAmqpLib\Exception\AMQPConnectionClosedException' with message 'FRAME\_ERROR - type 2, first 16 octets [\#789](https://github.com/php-amqplib/php-amqplib/issues/789)
- Incorrect behaviour when heartbeat is missing [\#787](https://github.com/php-amqplib/php-amqplib/issues/787)
- How to know When rabbitmq server get last heartbeat from client? [\#783](https://github.com/php-amqplib/php-amqplib/issues/783)

## [v2.11.1](https://github.com/php-amqplib/php-amqplib/tree/v2.11.1) (2020-02-24)

[Full Changelog](https://github.com/php-amqplib/php-amqplib/compare/v2.11.0...v2.11.1)

**Implemented enhancements:**

- Blocked connection check [\#779](https://github.com/php-amqplib/php-amqplib/pull/779) ([ramunasd](https://github.com/ramunasd))

**Fixed bugs:**

- Handling of SOCKET\_EAGAIN in StreamIO not working in PHP 7.4 [\#764](https://github.com/php-amqplib/php-amqplib/issues/764)
- fix: ensure hosts is an array, otherwise latest\_exception can be null [\#778](https://github.com/php-amqplib/php-amqplib/pull/778) ([mr-feek](https://github.com/mr-feek))
- change phpDocumentator template, fix incorrect constructor documentation [\#771](https://github.com/php-amqplib/php-amqplib/pull/771) ([ramunasd](https://github.com/ramunasd))

**Closed issues:**

- circular reference [\#759](https://github.com/php-amqplib/php-amqplib/issues/759)

**Merged pull requests:**

- Add package meta class [\#782](https://github.com/php-amqplib/php-amqplib/pull/782) ([ramunasd](https://github.com/ramunasd))
- Code style and static analysis warnings [\#768](https://github.com/php-amqplib/php-amqplib/pull/768) ([ramunasd](https://github.com/ramunasd))
- Mention AMQProxy as related library [\#767](https://github.com/php-amqplib/php-amqplib/pull/767) ([johanrhodin](https://github.com/johanrhodin))
- Fix comments [\#766](https://github.com/php-amqplib/php-amqplib/pull/766) ([Yurunsoft](https://github.com/Yurunsoft))
- Restrict PHP 7.4.0 - 7.4.1 due to a PHP bug [\#765](https://github.com/php-amqplib/php-amqplib/pull/765) ([Majkl578](https://github.com/Majkl578))

## [v2.11.0](https://github.com/php-amqplib/php-amqplib/tree/v2.11.0) (2019-11-19)

[Full Changelog](https://github.com/php-amqplib/php-amqplib/compare/v2.10.1...v2.11.0)

**Implemented enhancements:**

- Remove bcmath dependency [\#754](https://github.com/php-amqplib/php-amqplib/pull/754) ([ramunasd](https://github.com/ramunasd))
- Run phpunit on appveyor [\#751](https://github.com/php-amqplib/php-amqplib/pull/751) ([ramunasd](https://github.com/ramunasd))
- Add support for PLAIN authentication method [\#749](https://github.com/php-amqplib/php-amqplib/pull/749) ([ramunasd](https://github.com/ramunasd))

**Fixed bugs:**

- Exception while handling AMQPTimeoutException [\#752](https://github.com/php-amqplib/php-amqplib/issues/752)
- Fix AMQPTimeoutException handling [\#753](https://github.com/php-amqplib/php-amqplib/pull/753) ([kozlice](https://github.com/kozlice))

**Closed issues:**

- Amazon MQ amqp+ssl [\#757](https://github.com/php-amqplib/php-amqplib/issues/757)
- shell\_exec\(\): Unable to execute '' [\#756](https://github.com/php-amqplib/php-amqplib/issues/756)
- Remove bcmath dependency [\#694](https://github.com/php-amqplib/php-amqplib/issues/694)

**Merged pull requests:**

- Fix phpunit tests reported as risked [\#755](https://github.com/php-amqplib/php-amqplib/pull/755) ([ramunasd](https://github.com/ramunasd))
- throw AMQPConnectionClosedException when broker wants to close connection [\#750](https://github.com/php-amqplib/php-amqplib/pull/750) ([ramunasd](https://github.com/ramunasd))

## [v2.10.1](https://github.com/php-amqplib/php-amqplib/tree/v2.10.1) (2019-10-10)

[Full Changelog](https://github.com/php-amqplib/php-amqplib/compare/v2.10.0...v2.10.1)

**Implemented enhancements:**

- Refactor channel constant classes [\#732](https://github.com/php-amqplib/php-amqplib/pull/732) ([ramunasd](https://github.com/ramunasd))

**Fixed bugs:**

- Channel gets stuck if user `wait_for_pending_acks` [\#720](https://github.com/php-amqplib/php-amqplib/issues/720)
- Update amqp\_connect\_multiple\_hosts.php [\#740](https://github.com/php-amqplib/php-amqplib/pull/740) ([nguyendachuy](https://github.com/nguyendachuy))
- Fix fatal error in skipped tests [\#736](https://github.com/php-amqplib/php-amqplib/pull/736) ([ramunasd](https://github.com/ramunasd))
- Fix wrong headers exchange demo [\#735](https://github.com/php-amqplib/php-amqplib/pull/735) ([ramunasd](https://github.com/ramunasd))
- Fix infinite wait for pending acks [\#733](https://github.com/php-amqplib/php-amqplib/pull/733) ([ramunasd](https://github.com/ramunasd))

**Closed issues:**

- basic\_publish and memory alarms [\#743](https://github.com/php-amqplib/php-amqplib/issues/743)
- Connection timeout error [\#739](https://github.com/php-amqplib/php-amqplib/issues/739)
- Exchanges list [\#734](https://github.com/php-amqplib/php-amqplib/issues/734)
- Cannot create a durable queue [\#731](https://github.com/php-amqplib/php-amqplib/issues/731)
- isConnected remains true while AMQPConnectionClosedException is thrown [\#730](https://github.com/php-amqplib/php-amqplib/issues/730)
- Use v2.9~2.10, the CPU will 99% when waiting for new messages. v2.8 has no such problem. [\#729](https://github.com/php-amqplib/php-amqplib/issues/729)
- Headers exchange - php example [\#554](https://github.com/php-amqplib/php-amqplib/issues/554)
- AMQPMessage::basic\_consume + $nowait=null results in $nowait=true [\#422](https://github.com/php-amqplib/php-amqplib/issues/422)

**Merged pull requests:**

- Specify language id in the code blocks [\#747](https://github.com/php-amqplib/php-amqplib/pull/747) ([funivan](https://github.com/funivan))
- Update version number to 2.10 [\#746](https://github.com/php-amqplib/php-amqplib/pull/746) ([ramunasd](https://github.com/ramunasd))
- Remove phpDocumentator from dev dependencies [\#745](https://github.com/php-amqplib/php-amqplib/pull/745) ([ramunasd](https://github.com/ramunasd))
- Typo [\#738](https://github.com/php-amqplib/php-amqplib/pull/738) ([marianofevola](https://github.com/marianofevola))

## [v2.10.0](https://github.com/php-amqplib/php-amqplib/tree/v2.10.0) (2019-08-08)

[Full Changelog](https://github.com/php-amqplib/php-amqplib/compare/v2.10.0-rc1...v2.10.0)

**Closed issues:**

- Update API docs [\#721](https://github.com/php-amqplib/php-amqplib/issues/721)

**Merged pull requests:**

- Run toxiproxy based connection tests on travis-ci [\#727](https://github.com/php-amqplib/php-amqplib/pull/727) ([ramunasd](https://github.com/ramunasd))

## [v2.10.0-rc1](https://github.com/php-amqplib/php-amqplib/tree/v2.10.0-rc1) (2019-08-08)

[Full Changelog](https://github.com/php-amqplib/php-amqplib/compare/v2.9.2...v2.10.0-rc1)

**Implemented enhancements:**

- depricated getIO will break heartbeat [\#696](https://github.com/php-amqplib/php-amqplib/issues/696)
- Run travis tests against PHP 7.4 [\#700](https://github.com/php-amqplib/php-amqplib/pull/700) ([ramunasd](https://github.com/ramunasd))
- allow assoc array and generator for connection creation [\#689](https://github.com/php-amqplib/php-amqplib/pull/689) ([black-silence](https://github.com/black-silence))
- getDeliveryTag method for AMQPMessage [\#688](https://github.com/php-amqplib/php-amqplib/pull/688) ([ilyachase](https://github.com/ilyachase))

**Fixed bugs:**

- UNIX only SOCKET\_\* constants trigger E\_NOTICE on Windows [\#723](https://github.com/php-amqplib/php-amqplib/issues/723)
- Fix wrong exception type on failed connect to broker [\#716](https://github.com/php-amqplib/php-amqplib/pull/716) ([ramunasd](https://github.com/ramunasd))

**Closed issues:**

- Enhance PHPUnit version definitions in composer.json [\#718](https://github.com/php-amqplib/php-amqplib/issues/718)
- Connection timeout disguised as missed server heartbeat [\#713](https://github.com/php-amqplib/php-amqplib/issues/713)
- why php alway quit [\#708](https://github.com/php-amqplib/php-amqplib/issues/708)
- Is Channel access by reference a possibility? [\#707](https://github.com/php-amqplib/php-amqplib/issues/707)
- Broken pipe or closed connection [\#706](https://github.com/php-amqplib/php-amqplib/issues/706)
- Warning for SOCKET\_EWOULDBLOCK not defined [\#705](https://github.com/php-amqplib/php-amqplib/issues/705)
- how to get Consumer Cancel Notify [\#704](https://github.com/php-amqplib/php-amqplib/issues/704)
- Long running producer -- can send messages to queues already declared, but can't declare new queues [\#703](https://github.com/php-amqplib/php-amqplib/issues/703)
- \[Question\] php-amqplib reuse connection [\#702](https://github.com/php-amqplib/php-amqplib/issues/702)
- Enabling heartbeat by default throws PHP Fatal error [\#699](https://github.com/php-amqplib/php-amqplib/issues/699)
- FATAL ERROR: Call to a member function send\_content\(\) on null [\#698](https://github.com/php-amqplib/php-amqplib/issues/698)
- stream\_select\(\): You MUST recompile PHP with a larger value of FD\_SETSIZE [\#693](https://github.com/php-amqplib/php-amqplib/issues/693)
- report error inqueue\_declare [\#692](https://github.com/php-amqplib/php-amqplib/issues/692)
- Catch Them all except: PhpAmqpLib\Exception\AMQPConnectionClosedException [\#691](https://github.com/php-amqplib/php-amqplib/issues/691)
- stream\_socket\_client unable to connect \(Unknown error\) - OpenSSL 1.0 vs 1.1 [\#687](https://github.com/php-amqplib/php-amqplib/issues/687)
- High CPU usage after 2.9.0 release. [\#686](https://github.com/php-amqplib/php-amqplib/issues/686)
- Always allow to set a timeout [\#89](https://github.com/php-amqplib/php-amqplib/issues/89)

**Merged pull requests:**

- Revert changes from \#648 [\#726](https://github.com/php-amqplib/php-amqplib/pull/726) ([lukebakken](https://github.com/lukebakken))
- Wrapper for sockets extension constants [\#724](https://github.com/php-amqplib/php-amqplib/pull/724) ([ramunasd](https://github.com/ramunasd))
- Resolves issue\#718 [\#722](https://github.com/php-amqplib/php-amqplib/pull/722) ([peter279k](https://github.com/peter279k))
- Add github issue templates [\#717](https://github.com/php-amqplib/php-amqplib/pull/717) ([ramunasd](https://github.com/ramunasd))
- PHP information script [\#712](https://github.com/php-amqplib/php-amqplib/pull/712) ([ramunasd](https://github.com/ramunasd))
- Install RabbitMQ package before travis tests [\#711](https://github.com/php-amqplib/php-amqplib/pull/711) ([ramunasd](https://github.com/ramunasd))
- Set minimum PHP version to 5.6 [\#710](https://github.com/php-amqplib/php-amqplib/pull/710) ([ramunasd](https://github.com/ramunasd))
- Added link to \#444 [\#709](https://github.com/php-amqplib/php-amqplib/pull/709) ([Maxim-Mazurok](https://github.com/Maxim-Mazurok))
- fix call to a member function o null when connection was closed [\#701](https://github.com/php-amqplib/php-amqplib/pull/701) ([ramunasd](https://github.com/ramunasd))
- Add connection heartbeat check method [\#697](https://github.com/php-amqplib/php-amqplib/pull/697) ([ramunasd](https://github.com/ramunasd))
- Fix phpdoc [\#690](https://github.com/php-amqplib/php-amqplib/pull/690) ([black-silence](https://github.com/black-silence))
- Adjust PHPDoc for AMQPChannel's "$ticket" parameters [\#685](https://github.com/php-amqplib/php-amqplib/pull/685) ([AegirLeet](https://github.com/AegirLeet))

## [v2.9.2](https://github.com/php-amqplib/php-amqplib/tree/v2.9.2) (2019-04-24)

[Full Changelog](https://github.com/php-amqplib/php-amqplib/compare/v2.9.1...v2.9.2)

**Implemented enhancements:**

- Deprecate access to internal properties and methods [\#673](https://github.com/php-amqplib/php-amqplib/pull/673) ([ramunasd](https://github.com/ramunasd))

**Fixed bugs:**

- Changes in SSL handling breaks bschmitt/laravel-amqp [\#672](https://github.com/php-amqplib/php-amqplib/issues/672)

**Closed issues:**

- stream\_socket\_client\(\): unable to connect to tcp:// [\#682](https://github.com/php-amqplib/php-amqplib/issues/682)
- Broken pipe connection [\#679](https://github.com/php-amqplib/php-amqplib/issues/679)
-  Error Wrong parameters for PhpAmqpLib\Exception\AMQPRuntimeException\(\[string $message \[, long $code \[, Throwable $previous = NULL\]\]\]\) [\#671](https://github.com/php-amqplib/php-amqplib/issues/671)
- stream\_select\(\): unable to select \[4\]: Interrupted system call \(max\_fd=5\) [\#670](https://github.com/php-amqplib/php-amqplib/issues/670)
- AMQP SSL Broken Pipe [\#669](https://github.com/php-amqplib/php-amqplib/issues/669)
- Default heartbeat settings [\#563](https://github.com/php-amqplib/php-amqplib/issues/563)

**Merged pull requests:**

- fix unknown var [\#681](https://github.com/php-amqplib/php-amqplib/pull/681) ([anarbekb](https://github.com/anarbekb))
- Revert default SSL options [\#677](https://github.com/php-amqplib/php-amqplib/pull/677) ([ramunasd](https://github.com/ramunasd))
- fix regression after \#675 due to too early changed flag [\#676](https://github.com/php-amqplib/php-amqplib/pull/676) ([ramunasd](https://github.com/ramunasd))
- Ensure amqp client status is closed that network had been rst [\#675](https://github.com/php-amqplib/php-amqplib/pull/675) ([wjcgithub](https://github.com/wjcgithub))

## [v2.9.1](https://github.com/php-amqplib/php-amqplib/tree/v2.9.1) (2019-03-26)

[Full Changelog](https://github.com/php-amqplib/php-amqplib/compare/v2.9.0...v2.9.1)

**Fixed bugs:**

- Undefined constant SOCKET\_EAGAIN in Windows [\#664](https://github.com/php-amqplib/php-amqplib/issues/664)

**Closed issues:**

- Revert some non-backwards-compatible changes [\#666](https://github.com/php-amqplib/php-amqplib/issues/666)
- getting AMQPTimeoutException on 150+ publishes/second. [\#665](https://github.com/php-amqplib/php-amqplib/issues/665)

**Merged pull requests:**

- Fix undefined constant [\#668](https://github.com/php-amqplib/php-amqplib/pull/668) ([ramunasd](https://github.com/ramunasd))
- Revert argument checking [\#667](https://github.com/php-amqplib/php-amqplib/pull/667) ([lukebakken](https://github.com/lukebakken))

## [v2.9.0](https://github.com/php-amqplib/php-amqplib/tree/v2.9.0) (2019-03-22)

[Full Changelog](https://github.com/php-amqplib/php-amqplib/compare/v2.9.0-rc2...v2.9.0)

**Implemented enhancements:**

- php-amqp AMQPStreamConnection abstraction class constructor sets heartbeat = 0, keepalive = false [\#374](https://github.com/php-amqplib/php-amqplib/issues/374)

**Fixed bugs:**

- Fix wrong error code on stream connection exception [\#663](https://github.com/php-amqplib/php-amqplib/pull/663) ([ramunasd](https://github.com/ramunasd))

## [v2.9.0-rc2](https://github.com/php-amqplib/php-amqplib/tree/v2.9.0-rc2) (2019-03-18)

[Full Changelog](https://github.com/php-amqplib/php-amqplib/compare/v2.9.0-rc1...v2.9.0-rc2)

**Closed issues:**

- Existing error handler is nuked by class StreamIO [\#655](https://github.com/php-amqplib/php-amqplib/issues/655)
- Please, publish your OpenPGP key [\#654](https://github.com/php-amqplib/php-amqplib/issues/654)
- \[2.7,2.8\] StreamIO force protocol "ssl" \(hardcoded\) [\#641](https://github.com/php-amqplib/php-amqplib/issues/641)
- Connection remains  isConnected === true while  AMQPHeartbeatMissedException is thrown [\#627](https://github.com/php-amqplib/php-amqplib/issues/627)
- Duplicate call to AbstractIO::connect\(\) during reconnecting \(AbstractConnection::reconnect\(\)\) [\#626](https://github.com/php-amqplib/php-amqplib/issues/626)
- infinite loop inside StreamIO::write, in case of broken connection [\#624](https://github.com/php-amqplib/php-amqplib/issues/624)
- heartbeat problem on non\_blocking consumers [\#508](https://github.com/php-amqplib/php-amqplib/issues/508)
- isConnected was still true when broken pipe or close connection in channel-\>wait\(\) [\#389](https://github.com/php-amqplib/php-amqplib/issues/389)
- Keepalive and heartbeat on ssl [\#371](https://github.com/php-amqplib/php-amqplib/issues/371)

**Merged pull requests:**

- Allow choosing a different protocol for SSL/TLS [\#661](https://github.com/php-amqplib/php-amqplib/pull/661) ([lukebakken](https://github.com/lukebakken))
- Remove AbstractIO reconnect as it is only used, incorrectly, in one p… [\#660](https://github.com/php-amqplib/php-amqplib/pull/660) ([lukebakken](https://github.com/lukebakken))
- Catch a couple exceptions in select [\#659](https://github.com/php-amqplib/php-amqplib/pull/659) ([lukebakken](https://github.com/lukebakken))
- Throw exception if keepalive cannot be enabled on ssl connections [\#658](https://github.com/php-amqplib/php-amqplib/pull/658) ([ramunasd](https://github.com/ramunasd))

## [v2.9.0-rc1](https://github.com/php-amqplib/php-amqplib/tree/v2.9.0-rc1) (2019-03-08)

[Full Changelog](https://github.com/php-amqplib/php-amqplib/compare/v2.9.0-beta.1...v2.9.0-rc1)

**Merged pull requests:**

- Handle broken pipe or closed connection exceptions [\#653](https://github.com/php-amqplib/php-amqplib/pull/653) ([ramunasd](https://github.com/ramunasd))

## [v2.9.0-beta.1](https://github.com/php-amqplib/php-amqplib/tree/v2.9.0-beta.1) (2019-02-27)

[Full Changelog](https://github.com/php-amqplib/php-amqplib/compare/v2.8.2-rc3...v2.9.0-beta.1)

**Implemented enhancements:**

- Send a specific exception when the vhost doesn't exist [\#343](https://github.com/php-amqplib/php-amqplib/issues/343)

**Fixed bugs:**

- Signals not being handled correctly [\#649](https://github.com/php-amqplib/php-amqplib/issues/649)
- Incorrect list of arguments for AMQPRuntimeException causes fatal error [\#637](https://github.com/php-amqplib/php-amqplib/issues/637)
- Endless loop after broken connection with rabbitmq in AMQPReader::rawread because of zero timeout [\#622](https://github.com/php-amqplib/php-amqplib/issues/622)

**Closed issues:**

- 如何判断 channel-\>basic\_publish 是否成功？ [\#646](https://github.com/php-amqplib/php-amqplib/issues/646)
- 在哪里能设置 x-expires呢，在不修改库代码的情况下 [\#644](https://github.com/php-amqplib/php-amqplib/issues/644)
- Connection is aborted without Exception [\#639](https://github.com/php-amqplib/php-amqplib/issues/639)
- Error: The connection timed out after 3 sec while awaiting incoming data [\#636](https://github.com/php-amqplib/php-amqplib/issues/636)
- What compatibility with Symfony4 [\#635](https://github.com/php-amqplib/php-amqplib/issues/635)
- Workers consuming multiple queues in topic exchange don't always process in parallel prefetch\_count=1 [\#607](https://github.com/php-amqplib/php-amqplib/issues/607)
- Call protected function outside class [\#604](https://github.com/php-amqplib/php-amqplib/issues/604)
- Queue declare not timing out [\#561](https://github.com/php-amqplib/php-amqplib/issues/561)
- Error handler relies on locale setting [\#557](https://github.com/php-amqplib/php-amqplib/issues/557)
- Error handling of connection issues [\#548](https://github.com/php-amqplib/php-amqplib/issues/548)
- Right way to use AMQPSocketConnection [\#547](https://github.com/php-amqplib/php-amqplib/issues/547)
- basic\_qos\(\) fails static analysis [\#537](https://github.com/php-amqplib/php-amqplib/issues/537)
- check\_heartbeat in write\(\) at StreamIO [\#507](https://github.com/php-amqplib/php-amqplib/issues/507)
- Return listener not called [\#490](https://github.com/php-amqplib/php-amqplib/issues/490)
- pcntl SIGHUP Consumer restart not working in demo [\#489](https://github.com/php-amqplib/php-amqplib/issues/489)
- Add Roadmap [\#485](https://github.com/php-amqplib/php-amqplib/issues/485)
- Invalid frame type 65 [\#437](https://github.com/php-amqplib/php-amqplib/issues/437)
- Why are we reconnecting in check\_heartbeat method? [\#309](https://github.com/php-amqplib/php-amqplib/issues/309)
- heartbeats and AMQPTimeoutException  [\#249](https://github.com/php-amqplib/php-amqplib/issues/249)
- AMPConnection just sits there [\#248](https://github.com/php-amqplib/php-amqplib/issues/248)
- Repeated Acknowledgements with SetBody\(\) [\#154](https://github.com/php-amqplib/php-amqplib/issues/154)
- StreamIO::read loops infinitely if broker blocks producers [\#148](https://github.com/php-amqplib/php-amqplib/issues/148)
- AMQPConnection can hang in \_\_destruct after a write\(\) failed [\#82](https://github.com/php-amqplib/php-amqplib/issues/82)

**Merged pull requests:**

- Remove workarounds for hhvm, use latest version of scrutinizer tool [\#652](https://github.com/php-amqplib/php-amqplib/pull/652) ([ramunasd](https://github.com/ramunasd))
- Fix signals demo [\#651](https://github.com/php-amqplib/php-amqplib/pull/651) ([ramunasd](https://github.com/ramunasd))
- Fix regression after \#642 [\#650](https://github.com/php-amqplib/php-amqplib/pull/650) ([ramunasd](https://github.com/ramunasd))
- Enable heartbeats by default [\#648](https://github.com/php-amqplib/php-amqplib/pull/648) ([lukebakken](https://github.com/lukebakken))
- Drop support for HHVM [\#647](https://github.com/php-amqplib/php-amqplib/pull/647) ([ramunasd](https://github.com/ramunasd))
- Docker dev environment [\#643](https://github.com/php-amqplib/php-amqplib/pull/643) ([ramunasd](https://github.com/ramunasd))
- Fix channel wait timeouts and endless loops [\#642](https://github.com/php-amqplib/php-amqplib/pull/642) ([ramunasd](https://github.com/ramunasd))
- Add some constant to AMQP exchange [\#640](https://github.com/php-amqplib/php-amqplib/pull/640) ([dream-mo](https://github.com/dream-mo))
- Fixed typo that may cause fatal error in runtime [\#638](https://github.com/php-amqplib/php-amqplib/pull/638) ([FlyingDR](https://github.com/FlyingDR))
- IO improvements [\#634](https://github.com/php-amqplib/php-amqplib/pull/634) ([ramunasd](https://github.com/ramunasd))
- fix isssue with close channel [\#632](https://github.com/php-amqplib/php-amqplib/pull/632) ([kufd](https://github.com/kufd))

## [v2.8.2-rc3](https://github.com/php-amqplib/php-amqplib/tree/v2.8.2-rc3) (2018-12-11)

[Full Changelog](https://github.com/php-amqplib/php-amqplib/compare/v2.8.2-rc2...v2.8.2-rc3)

## [v2.8.2-rc2](https://github.com/php-amqplib/php-amqplib/tree/v2.8.2-rc2) (2018-12-10)

[Full Changelog](https://github.com/php-amqplib/php-amqplib/compare/v2.8.2-rc1...v2.8.2-rc2)

**Implemented enhancements:**

- Test against latest php versions [\#631](https://github.com/php-amqplib/php-amqplib/pull/631) ([ramunasd](https://github.com/ramunasd))
- Allow to specify a timeout for channel operations [\#609](https://github.com/php-amqplib/php-amqplib/pull/609) ([mszabo-wikia](https://github.com/mszabo-wikia))

**Fixed bugs:**

- Error when systemd tries to restart workers since 2.8.0 [\#611](https://github.com/php-amqplib/php-amqplib/issues/611)

**Merged pull requests:**

- Fix wrong exception type on stream timeouts and signals [\#621](https://github.com/php-amqplib/php-amqplib/pull/621) ([ramunasd](https://github.com/ramunasd))

## [v2.8.2-rc1](https://github.com/php-amqplib/php-amqplib/tree/v2.8.2-rc1) (2018-11-29)

[Full Changelog](https://github.com/php-amqplib/php-amqplib/compare/v2.8.1...v2.8.2-rc1)

**Fixed bugs:**

- Fix and add test for signal handling with PCNTL extension [\#630](https://github.com/php-amqplib/php-amqplib/pull/630) ([Shivox](https://github.com/Shivox))

**Closed issues:**

- How do I listen to all queues [\#629](https://github.com/php-amqplib/php-amqplib/issues/629)
- Broken pipe or closed connection [\#628](https://github.com/php-amqplib/php-amqplib/issues/628)
- yii queue/listen No "message\_id" property [\#625](https://github.com/php-amqplib/php-amqplib/issues/625)
- Long phpamqplib.DEBUG: Queue message processed logs before throwing fwrite [\#623](https://github.com/php-amqplib/php-amqplib/issues/623)
- Undefined constant SOCKET\_EAGAIN in Windows [\#619](https://github.com/php-amqplib/php-amqplib/issues/619)

**Merged pull requests:**

- Fix undefined constant SOCKET\_EAGAIN in Windows [\#620](https://github.com/php-amqplib/php-amqplib/pull/620) ([MaxwellZY](https://github.com/MaxwellZY))

## [v2.8.1](https://github.com/php-amqplib/php-amqplib/tree/v2.8.1) (2018-11-13)

[Full Changelog](https://github.com/php-amqplib/php-amqplib/compare/v2.8.1-rc3...v2.8.1)

## [v2.8.1-rc3](https://github.com/php-amqplib/php-amqplib/tree/v2.8.1-rc3) (2018-11-07)

[Full Changelog](https://github.com/php-amqplib/php-amqplib/compare/v2.8.1-rc2...v2.8.1-rc3)

**Fixed bugs:**

- fwrite\(\): send of 3728 bytes failed with errno=11 Resource temporarily unavailable [\#613](https://github.com/php-amqplib/php-amqplib/issues/613)

**Closed issues:**

- calling check\_heartbeat causes connection to close [\#617](https://github.com/php-amqplib/php-amqplib/issues/617)
- message not received by the server but no exception thrown [\#595](https://github.com/php-amqplib/php-amqplib/issues/595)

**Merged pull requests:**

- Restore code that sets last\_read [\#618](https://github.com/php-amqplib/php-amqplib/pull/618) ([lukebakken](https://github.com/lukebakken))

## [v2.8.1-rc2](https://github.com/php-amqplib/php-amqplib/tree/v2.8.1-rc2) (2018-11-02)

[Full Changelog](https://github.com/php-amqplib/php-amqplib/compare/v2.8.1-rc1...v2.8.1-rc2)

**Closed issues:**

- AMQPStreamConnection $connection\_timeout - milliseconds or seconds? [\#616](https://github.com/php-amqplib/php-amqplib/issues/616)

**Merged pull requests:**

- Parse error string to determine error number instead of using errno [\#615](https://github.com/php-amqplib/php-amqplib/pull/615) ([davidgreisler](https://github.com/davidgreisler))

## [v2.8.1-rc1](https://github.com/php-amqplib/php-amqplib/tree/v2.8.1-rc1) (2018-10-30)

[Full Changelog](https://github.com/php-amqplib/php-amqplib/compare/v2.8.0...v2.8.1-rc1)

**Fixed bugs:**

- ext-sockets required since 2.8.0 [\#608](https://github.com/php-amqplib/php-amqplib/issues/608)
- Fixed restoring previous error handler in StreamIO [\#612](https://github.com/php-amqplib/php-amqplib/pull/612) ([cezarystepkowski](https://github.com/cezarystepkowski))
- Move ext-sockets from "suggest" to "require" [\#610](https://github.com/php-amqplib/php-amqplib/pull/610) ([lukebakken](https://github.com/lukebakken))

**Closed issues:**

- Getting really often "Connection reset by peer" [\#546](https://github.com/php-amqplib/php-amqplib/issues/546)

## [v2.8.0](https://github.com/php-amqplib/php-amqplib/tree/v2.8.0) (2018-10-23)

[Full Changelog](https://github.com/php-amqplib/php-amqplib/compare/v2.7.2.1...v2.8.0)

**Closed issues:**

- Feature Request: Allow overriding of LIBRARY\_PROPERTIES [\#603](https://github.com/php-amqplib/php-amqplib/issues/603)

**Merged pull requests:**

- Add getLibraryProperties abstract connection method and test [\#606](https://github.com/php-amqplib/php-amqplib/pull/606) ([madrussa](https://github.com/madrussa))
- Fix potential indefinite wait [\#602](https://github.com/php-amqplib/php-amqplib/pull/602) ([lukebakken](https://github.com/lukebakken))
- fix the logical error [\#601](https://github.com/php-amqplib/php-amqplib/pull/601) ([aisuhua](https://github.com/aisuhua))
- Use specific exceptions instead of general AMQPRuntimeException [\#600](https://github.com/php-amqplib/php-amqplib/pull/600) ([ondrej-bouda](https://github.com/ondrej-bouda))

## [v2.7.2.1](https://github.com/php-amqplib/php-amqplib/tree/v2.7.2.1) (2018-10-17)

[Full Changelog](https://github.com/php-amqplib/php-amqplib/compare/v2.8.0-rc1...v2.7.2.1)

**Closed issues:**

- When heartbeats parameter is greater than 0 [\#352](https://github.com/php-amqplib/php-amqplib/issues/352)

## [v2.8.0-rc1](https://github.com/php-amqplib/php-amqplib/tree/v2.8.0-rc1) (2018-10-11)

[Full Changelog](https://github.com/php-amqplib/php-amqplib/compare/v2.7.3...v2.8.0-rc1)

**Implemented enhancements:**

- lazy channels [\#291](https://github.com/php-amqplib/php-amqplib/issues/291)

**Closed issues:**

- "Server nack'ed unknown delivery\_tag" when using batch\_basic\_publish [\#597](https://github.com/php-amqplib/php-amqplib/issues/597)
- fwrite: errno=11 in StreamIO [\#596](https://github.com/php-amqplib/php-amqplib/issues/596)
- where is the function "AMQPStreamConnection::create\_connection\(\)" [\#586](https://github.com/php-amqplib/php-amqplib/issues/586)
- RPC server not sending reply down the wire [\#585](https://github.com/php-amqplib/php-amqplib/issues/585)
- Please add support for AMQP 1.0 [\#583](https://github.com/php-amqplib/php-amqplib/issues/583)
- Connecting to Red Hat JBOSS [\#580](https://github.com/php-amqplib/php-amqplib/issues/580)
- Consuming message coming in truncated [\#579](https://github.com/php-amqplib/php-amqplib/issues/579)
- can't throw fwrite\(\) error immediately [\#578](https://github.com/php-amqplib/php-amqplib/issues/578)
- Can't reuse AMQPMessage object with new properties [\#576](https://github.com/php-amqplib/php-amqplib/issues/576)
- Invalid frame type 65 [\#572](https://github.com/php-amqplib/php-amqplib/issues/572)
- The set\_nack\_handle  can not be triggered correctly. [\#571](https://github.com/php-amqplib/php-amqplib/issues/571)
- channel-\>wait\(\) with timeout make memory leak [\#566](https://github.com/php-amqplib/php-amqplib/issues/566)
- SOCKS Proxy between RMQ and client [\#558](https://github.com/php-amqplib/php-amqplib/issues/558)
- Version 2.7 connects as 2.6 [\#555](https://github.com/php-amqplib/php-amqplib/issues/555)
- Update minimum php version in composer.json [\#543](https://github.com/php-amqplib/php-amqplib/issues/543)
- StreamIO can wait for data indefinitely [\#416](https://github.com/php-amqplib/php-amqplib/issues/416)
- Releasing connection reference too early in a channel leads to a segmentation fault [\#415](https://github.com/php-amqplib/php-amqplib/issues/415)
- StreamConnection does not time out [\#408](https://github.com/php-amqplib/php-amqplib/issues/408)
- $this-\>debug can be null in AbstractConnection.php [\#386](https://github.com/php-amqplib/php-amqplib/issues/386)
- Read and write to multiple queues within one script [\#293](https://github.com/php-amqplib/php-amqplib/issues/293)
- decode\(\) method not defined [\#160](https://github.com/php-amqplib/php-amqplib/issues/160)

**Merged pull requests:**

- Use errno instead of error strings [\#599](https://github.com/php-amqplib/php-amqplib/pull/599) ([marek-obuchowicz](https://github.com/marek-obuchowicz))
- Corrected typo and comment alignment in demo/amqp\_consumer\_exclusive.php [\#591](https://github.com/php-amqplib/php-amqplib/pull/591) ([lkorczewski](https://github.com/lkorczewski))
- Corrected typos in demo/amqp\_publisher\_exclusive.php [\#590](https://github.com/php-amqplib/php-amqplib/pull/590) ([lkorczewski](https://github.com/lkorczewski))
- Fix heartbeat-check if pcntl is unavailable [\#584](https://github.com/php-amqplib/php-amqplib/pull/584) ([srebbsrebb](https://github.com/srebbsrebb))
- don't throw an exception in an error handler [\#581](https://github.com/php-amqplib/php-amqplib/pull/581) ([deweller](https://github.com/deweller))
- Cleanup serialized\_properties on property set [\#577](https://github.com/php-amqplib/php-amqplib/pull/577) ([p-golovin](https://github.com/p-golovin))
- Annotate at @throws \ErrorException at AbstractChannel::wait [\#575](https://github.com/php-amqplib/php-amqplib/pull/575) ([nohponex](https://github.com/nohponex))
- Structuring tests [\#574](https://github.com/php-amqplib/php-amqplib/pull/574) ([programarivm](https://github.com/programarivm))
- Test with php 5.3 and 7.2 [\#569](https://github.com/php-amqplib/php-amqplib/pull/569) ([snapshotpl](https://github.com/snapshotpl))
- Add extended datatype for bytes [\#568](https://github.com/php-amqplib/php-amqplib/pull/568) ([masell](https://github.com/masell))
- Fwrite \ErrorException not being thrown to the top function call when doing basic\_publish [\#564](https://github.com/php-amqplib/php-amqplib/pull/564) ([dp-indrak](https://github.com/dp-indrak))
- Introduce a method to create connection from multiple hosts. [\#562](https://github.com/php-amqplib/php-amqplib/pull/562) ([hairyhum](https://github.com/hairyhum))
- Throw exception on missed heartbeat [\#559](https://github.com/php-amqplib/php-amqplib/pull/559) ([hairyhum](https://github.com/hairyhum))

## [v2.7.3](https://github.com/php-amqplib/php-amqplib/tree/v2.7.3) (2018-04-30)

[Full Changelog](https://github.com/php-amqplib/php-amqplib/compare/v2.7.2...v2.7.3)

**Closed issues:**

- stream\_select\(\) ErrorException FD\_SETSIZE [\#552](https://github.com/php-amqplib/php-amqplib/issues/552)
- Whoops, looks like something went wrong. \(1/1\) ErrorException getimagesize\(\): send of 18 bytes failed with errno=104 Connection reset by peer [\#551](https://github.com/php-amqplib/php-amqplib/issues/551)
- no-local? [\#550](https://github.com/php-amqplib/php-amqplib/issues/550)
- Can php-amqplib consumer work on a web page? [\#549](https://github.com/php-amqplib/php-amqplib/issues/549)
- Functional tests fail after upgrading to 2.7.1 and 2.7.2 [\#545](https://github.com/php-amqplib/php-amqplib/issues/545)
- fwrite failure / not sure how to debug further [\#544](https://github.com/php-amqplib/php-amqplib/issues/544)

# Previous releases

## 2.7.2 - 2018-02-11

[GitHub Milestone](https://github.com/php-amqplib/php-amqplib/milestone/5?closed=1)

- PHP `5.3` compatibility [PR](https://github.com/php-amqplib/php-amqplib/issues/539)

## 2.7.1 - 2018-02-01

- Support PHPUnit 6 [PR](https://github.com/php-amqplib/php-amqplib/pull/530)
- Use `tcp_nodelay` for `StreamIO` [PR](https://github.com/php-amqplib/php-amqplib/pull/517)
- Pass connection timeout to `wait` method [PR](https://github.com/php-amqplib/php-amqplib/pull/512)
- Fix possible indefinite waiting for data in StreamIO [PR](https://github.com/php-amqplib/php-amqplib/pull/423), [PR](https://github.com/php-amqplib/php-amqplib/pull/534)
- Change protected method check_heartbeat to public [PR](https://github.com/php-amqplib/php-amqplib/pull/520)
- Ensure access levels are consistent for calling `check_heartbeat` [PR](https://github.com/php-amqplib/php-amqplib/pull/535)

## 2.7.0 - 2017-09-20

### Added
- Increased overall test coverage
- Bring heartbeat support to socket connection
- Add message delivery tag for publisher confirms
- Add support for serializing DateTimeImmutable objects

### Fixed
- Fixed infinite loop on reconnect - check_heartbeat
- Fixed signal handling exit example
- Fixed exchange_unbind arguments
- Fixed invalid annotation for channel_id
- Fixed socket null error on php 5.3 version
- Fixed timeout parameters on HHVM before calling stream_select

### Changed
- declare(ticks=1) no longer needed after PHP5.3 / amqplib 2.4.1
- Minor DebugHelper improvements

### Enhancements
- Add extensions requirements to README.md
- Add PHP 7.1 to Travis build
- Reduce memory usage in StreamIO::write()
- Re-enable heartbeats after reconnection

## 2.6.3 - 2016-04-11

### Added
- Added the ability to set timeout as float

### Fixed
- Fixed restoring of error_handler on connection error

### Enhancements
- Verify read_write_timeout is at least 2x the heartbeat (if set)
- Many PHPDoc fixes
- Throw exception when trying to create an exchange on a closed connection

## 2.6.2 - 2016-03-02

### Added
- Added AMQPLazySocketConnection
- AbstractConnection::getServerProperties method to retrieve server properties.
- AMQPReader::wait() will throw IOWaitException on stream_select failure
- Add PHPDocs to Auto-generated Protocol Classes

### Fixed
- Disable heartbeat when closing connection
- Fix for when the default error handler is not restored in StreamIO

### Enhancements
- Cleanup tests and improve testing performance
- Confirm received valid frame type on wait_frame in AbstractConnection
- Update DEMO files closer to PSR-2 standards

## 2.6.1 - 2016-02-12

### Added
- Add constants for delivery modes to AMQPMessage

### Fixed
- Fix some PHPDoc problems
- AbstractCollection value de/encoding on PHP7
- StreamIO: fix "bad write retry" in SSL mode

### Enhancements
- Update PHPUnit configuration
- Add scrutinizer-ci configuration
- Organizational changes from videlalvaro to php-amqplib org
- Minor complexity optimizations, code organization, and code cleanup

## 2.6.0 - 2015-09-23

### BC Breaking Changes
- The `AMQPStreamConnection` class now throws `ErrorExceptions` when errors happen while reading/writing to the network.

### Added
- Heartbeat frames will decrease the timeout used when calling wait_channel - heartbeat frames do not reset the timeout

### Fixed
- Declared the class AbstractChannel as being an abstract class
- Reads, writes and signals respond immediately instead of waiting for a timeout
- Fatal error in some cases on Channel.wait with timeout when RabbitMQ restarted
- Remove warning when trying to push a deferred frame


\* *This Changelog was automatically generated by [github_changelog_generator](https://github.com/github-changelog-generator/github-changelog-generator)*
# Previous releases

## 2.7.2 - 2018-02-11

[GitHub Milestone](https://github.com/php-amqplib/php-amqplib/milestone/5?closed=1)

- PHP `5.3` compatibility [PR](https://github.com/php-amqplib/php-amqplib/issues/539)

## 2.7.1 - 2018-02-01

- Support PHPUnit 6 [PR](https://github.com/php-amqplib/php-amqplib/pull/530)
- Use `tcp_nodelay` for `StreamIO` [PR](https://github.com/php-amqplib/php-amqplib/pull/517)
- Pass connection timeout to `wait` method [PR](https://github.com/php-amqplib/php-amqplib/pull/512)
- Fix possible indefinite waiting for data in StreamIO [PR](https://github.com/php-amqplib/php-amqplib/pull/423), [PR](https://github.com/php-amqplib/php-amqplib/pull/534)
- Change protected method check_heartbeat to public [PR](https://github.com/php-amqplib/php-amqplib/pull/520)
- Ensure access levels are consistent for calling `check_heartbeat` [PR](https://github.com/php-amqplib/php-amqplib/pull/535)

## 2.7.0 - 2017-09-20

### Added
- Increased overall test coverage
- Bring heartbeat support to socket connection
- Add message delivery tag for publisher confirms
- Add support for serializing DateTimeImmutable objects

### Fixed
- Fixed infinite loop on reconnect - check_heartbeat
- Fixed signal handling exit example
- Fixed exchange_unbind arguments
- Fixed invalid annotation for channel_id
- Fixed socket null error on php 5.3 version
- Fixed timeout parameters on HHVM before calling stream_select

### Changed
- declare(ticks=1) no longer needed after PHP5.3 / amqplib 2.4.1
- Minor DebugHelper improvements

### Enhancements
- Add extensions requirements to README.md
- Add PHP 7.1 to Travis build
- Reduce memory usage in StreamIO::write()
- Re-enable heartbeats after reconnection

## 2.6.3 - 2016-04-11

### Added
- Added the ability to set timeout as float

### Fixed
- Fixed restoring of error_handler on connection error

### Enhancements
- Verify read_write_timeout is at least 2x the heartbeat (if set)
- Many PHPDoc fixes
- Throw exception when trying to create an exchange on a closed connection

## 2.6.2 - 2016-03-02

### Added
- Added AMQPLazySocketConnection
- AbstractConnection::getServerProperties method to retrieve server properties.
- AMQPReader::wait() will throw IOWaitException on stream_select failure
- Add PHPDocs to Auto-generated Protocol Classes

### Fixed
- Disable heartbeat when closing connection
- Fix for when the default error handler is not restored in StreamIO

### Enhancements
- Cleanup tests and improve testing performance
- Confirm received valid frame type on wait_frame in AbstractConnection
- Update DEMO files closer to PSR-2 standards

## 2.6.1 - 2016-02-12

### Added
- Add constants for delivery modes to AMQPMessage

### Fixed
- Fix some PHPDoc problems
- AbstractCollection value de/encoding on PHP7
- StreamIO: fix "bad write retry" in SSL mode

### Enhancements
- Update PHPUnit configuration
- Add scrutinizer-ci configuration
- Organizational changes from videlalvaro to php-amqplib org
- Minor complexity optimizations, code organization, and code cleanup

## 2.6.0 - 2015-09-23

### BC Breaking Changes
- The `AMQPStreamConnection` class now throws `ErrorExceptions` when errors happen while reading/writing to the network.

### Added
- Heartbeat frames will decrease the timeout used when calling wait_channel - heartbeat frames do not reset the timeout

### Fixed
- Declared the class AbstractChannel as being an abstract class
- Reads, writes and signals respond immediately instead of waiting for a timeout
- Fatal error in some cases on Channel.wait with timeout when RabbitMQ restarted
- Remove warning when trying to push a deferred frame
		  GNU LESSER GENERAL PUBLIC LICENSE
		       Version 2.1, February 1999

 Copyright (C) 1991, 1999 Free Software Foundation, Inc.
 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
 Everyone is permitted to copy and distribute verbatim copies
 of this license document, but changing it is not allowed.

[This is the first released version of the Lesser GPL.  It also counts
 as the successor of the GNU Library Public License, version 2, hence
 the version number 2.1.]

			    Preamble

  The licenses for most software are designed to take away your
freedom to share and change it.  By contrast, the GNU General Public
Licenses are intended to guarantee your freedom to share and change
free software--to make sure the software is free for all its users.

  This license, the Lesser General Public License, applies to some
specially designated software packages--typically libraries--of the
Free Software Foundation and other authors who decide to use it.  You
can use it too, but we suggest you first think carefully about whether
this license or the ordinary General Public License is the better
strategy to use in any particular case, based on the explanations below.

  When we speak of free software, we are referring to freedom of use,
not price.  Our General Public Licenses are designed to make sure that
you have the freedom to distribute copies of free software (and charge
for this service if you wish); that you receive source code or can get
it if you want it; that you can change the software and use pieces of
it in new free programs; and that you are informed that you can do
these things.

  To protect your rights, we need to make restrictions that forbid
distributors to deny you these rights or to ask you to surrender these
rights.  These restrictions translate to certain responsibilities for
you if you distribute copies of the library or if you modify it.

  For example, if you distribute copies of the library, whether gratis
or for a fee, you must give the recipients all the rights that we gave
you.  You must make sure that they, too, receive or can get the source
code.  If you link other code with the library, you must provide
complete object files to the recipients, so that they can relink them
with the library after making changes to the library and recompiling
it.  And you must show them these terms so they know their rights.

  We protect your rights with a two-step method: (1) we copyright the
library, and (2) we offer you this license, which gives you legal
permission to copy, distribute and/or modify the library.

  To protect each distributor, we want to make it very clear that
there is no warranty for the free library.  Also, if the library is
modified by someone else and passed on, the recipients should know
that what they have is not the original version, so that the original
author's reputation will not be affected by problems that might be
introduced by others.

  Finally, software patents pose a constant threat to the existence of
any free program.  We wish to make sure that a company cannot
effectively restrict the users of a free program by obtaining a
restrictive license from a patent holder.  Therefore, we insist that
any patent license obtained for a version of the library must be
consistent with the full freedom of use specified in this license.

  Most GNU software, including some libraries, is covered by the
ordinary GNU General Public License.  This license, the GNU Lesser
General Public License, applies to certain designated libraries, and
is quite different from the ordinary General Public License.  We use
this license for certain libraries in order to permit linking those
libraries into non-free programs.

  When a program is linked with a library, whether statically or using
a shared library, the combination of the two is legally speaking a
combined work, a derivative of the original library.  The ordinary
General Public License therefore permits such linking only if the
entire combination fits its criteria of freedom.  The Lesser General
Public License permits more lax criteria for linking other code with
the library.

  We call this license the "Lesser" General Public License because it
does Less to protect the user's freedom than the ordinary General
Public License.  It also provides other free software developers Less
of an advantage over competing non-free programs.  These disadvantages
are the reason we use the ordinary General Public License for many
libraries.  However, the Lesser license provides advantages in certain
special circumstances.

  For example, on rare occasions, there may be a special need to
encourage the widest possible use of a certain library, so that it becomes
a de-facto standard.  To achieve this, non-free programs must be
allowed to use the library.  A more frequent case is that a free
library does the same job as widely used non-free libraries.  In this
case, there is little to gain by limiting the free library to free
software only, so we use the Lesser General Public License.

  In other cases, permission to use a particular library in non-free
programs enables a greater number of people to use a large body of
free software.  For example, permission to use the GNU C Library in
non-free programs enables many more people to use the whole GNU
operating system, as well as its variant, the GNU/Linux operating
system.

  Although the Lesser General Public License is Less protective of the
users' freedom, it does ensure that the user of a program that is
linked with the Library has the freedom and the wherewithal to run
that program using a modified version of the Library.

  The precise terms and conditions for copying, distribution and
modification follow.  Pay close attention to the difference between a
"work based on the library" and a "work that uses the library".  The
former contains code derived from the library, whereas the latter must
be combined with the library in order to run.

		  GNU LESSER GENERAL PUBLIC LICENSE
   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION

  0. This License Agreement applies to any software library or other
program which contains a notice placed by the copyright holder or
other authorized party saying it may be distributed under the terms of
this Lesser General Public License (also called "this License").
Each licensee is addressed as "you".

  A "library" means a collection of software functions and/or data
prepared so as to be conveniently linked with application programs
(which use some of those functions and data) to form executables.

  The "Library", below, refers to any such software library or work
which has been distributed under these terms.  A "work based on the
Library" means either the Library or any derivative work under
copyright law: that is to say, a work containing the Library or a
portion of it, either verbatim or with modifications and/or translated
straightforwardly into another language.  (Hereinafter, translation is
included without limitation in the term "modification".)

  "Source code" for a work means the preferred form of the work for
making modifications to it.  For a library, complete source code means
all the source code for all modules it contains, plus any associated
interface definition files, plus the scripts used to control compilation
and installation of the library.

  Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope.  The act of
running a program using the Library is not restricted, and output from
such a program is covered only if its contents constitute a work based
on the Library (independent of the use of the Library in a tool for
writing it).  Whether that is true depends on what the Library does
and what the program that uses the Library does.
  
  1. You may copy and distribute verbatim copies of the Library's
complete source code as you receive it, in any medium, provided that
you conspicuously and appropriately publish on each copy an
appropriate copyright notice and disclaimer of warranty; keep intact
all the notices that refer to this License and to the absence of any
warranty; and distribute a copy of this License along with the
Library.

  You may charge a fee for the physical act of transferring a copy,
and you may at your option offer warranty protection in exchange for a
fee.

  2. You may modify your copy or copies of the Library or any portion
of it, thus forming a work based on the Library, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:

    a) The modified work must itself be a software library.

    b) You must cause the files modified to carry prominent notices
    stating that you changed the files and the date of any change.

    c) You must cause the whole of the work to be licensed at no
    charge to all third parties under the terms of this License.

    d) If a facility in the modified Library refers to a function or a
    table of data to be supplied by an application program that uses
    the facility, other than as an argument passed when the facility
    is invoked, then you must make a good faith effort to ensure that,
    in the event an application does not supply such function or
    table, the facility still operates, and performs whatever part of
    its purpose remains meaningful.

    (For example, a function in a library to compute square roots has
    a purpose that is entirely well-defined independent of the
    application.  Therefore, Subsection 2d requires that any
    application-supplied function or table used by this function must
    be optional: if the application does not supply it, the square
    root function must still compute square roots.)

These requirements apply to the modified work as a whole.  If
identifiable sections of that work are not derived from the Library,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works.  But when you
distribute the same sections as part of a whole which is a work based
on the Library, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote
it.

Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Library.

In addition, mere aggregation of another work not based on the Library
with the Library (or with a work based on the Library) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.

  3. You may opt to apply the terms of the ordinary GNU General Public
License instead of this License to a given copy of the Library.  To do
this, you must alter all the notices that refer to this License, so
that they refer to the ordinary GNU General Public License, version 2,
instead of to this License.  (If a newer version than version 2 of the
ordinary GNU General Public License has appeared, then you can specify
that version instead if you wish.)  Do not make any other change in
these notices.

  Once this change is made in a given copy, it is irreversible for
that copy, so the ordinary GNU General Public License applies to all
subsequent copies and derivative works made from that copy.

  This option is useful when you wish to copy part of the code of
the Library into a program that is not a library.

  4. You may copy and distribute the Library (or a portion or
derivative of it, under Section 2) in object code or executable form
under the terms of Sections 1 and 2 above provided that you accompany
it with the complete corresponding machine-readable source code, which
must be distributed under the terms of Sections 1 and 2 above on a
medium customarily used for software interchange.

  If distribution of object code is made by offering access to copy
from a designated place, then offering equivalent access to copy the
source code from the same place satisfies the requirement to
distribute the source code, even though third parties are not
compelled to copy the source along with the object code.

  5. A program that contains no derivative of any portion of the
Library, but is designed to work with the Library by being compiled or
linked with it, is called a "work that uses the Library".  Such a
work, in isolation, is not a derivative work of the Library, and
therefore falls outside the scope of this License.

  However, linking a "work that uses the Library" with the Library
creates an executable that is a derivative of the Library (because it
contains portions of the Library), rather than a "work that uses the
library".  The executable is therefore covered by this License.
Section 6 states terms for distribution of such executables.

  When a "work that uses the Library" uses material from a header file
that is part of the Library, the object code for the work may be a
derivative work of the Library even though the source code is not.
Whether this is true is especially significant if the work can be
linked without the Library, or if the work is itself a library.  The
threshold for this to be true is not precisely defined by law.

  If such an object file uses only numerical parameters, data
structure layouts and accessors, and small macros and small inline
functions (ten lines or less in length), then the use of the object
file is unrestricted, regardless of whether it is legally a derivative
work.  (Executables containing this object code plus portions of the
Library will still fall under Section 6.)

  Otherwise, if the work is a derivative of the Library, you may
distribute the object code for the work under the terms of Section 6.
Any executables containing that work also fall under Section 6,
whether or not they are linked directly with the Library itself.

  6. As an exception to the Sections above, you may also combine or
link a "work that uses the Library" with the Library to produce a
work containing portions of the Library, and distribute that work
under terms of your choice, provided that the terms permit
modification of the work for the customer's own use and reverse
engineering for debugging such modifications.

  You must give prominent notice with each copy of the work that the
Library is used in it and that the Library and its use are covered by
this License.  You must supply a copy of this License.  If the work
during execution displays copyright notices, you must include the
copyright notice for the Library among them, as well as a reference
directing the user to the copy of this License.  Also, you must do one
of these things:

    a) Accompany the work with the complete corresponding
    machine-readable source code for the Library including whatever
    changes were used in the work (which must be distributed under
    Sections 1 and 2 above); and, if the work is an executable linked
    with the Library, with the complete machine-readable "work that
    uses the Library", as object code and/or source code, so that the
    user can modify the Library and then relink to produce a modified
    executable containing the modified Library.  (It is understood
    that the user who changes the contents of definitions files in the
    Library will not necessarily be able to recompile the application
    to use the modified definitions.)

    b) Use a suitable shared library mechanism for linking with the
    Library.  A suitable mechanism is one that (1) uses at run time a
    copy of the library already present on the user's computer system,
    rather than copying library functions into the executable, and (2)
    will operate properly with a modified version of the library, if
    the user installs one, as long as the modified version is
    interface-compatible with the version that the work was made with.

    c) Accompany the work with a written offer, valid for at
    least three years, to give the same user the materials
    specified in Subsection 6a, above, for a charge no more
    than the cost of performing this distribution.

    d) If distribution of the work is made by offering access to copy
    from a designated place, offer equivalent access to copy the above
    specified materials from the same place.

    e) Verify that the user has already received a copy of these
    materials or that you have already sent this user a copy.

  For an executable, the required form of the "work that uses the
Library" must include any data and utility programs needed for
reproducing the executable from it.  However, as a special exception,
the materials to be distributed need not include anything that is
normally distributed (in either source or binary form) with the major
components (compiler, kernel, and so on) of the operating system on
which the executable runs, unless that component itself accompanies
the executable.

  It may happen that this requirement contradicts the license
restrictions of other proprietary libraries that do not normally
accompany the operating system.  Such a contradiction means you cannot
use both them and the Library together in an executable that you
distribute.

  7. You may place library facilities that are a work based on the
Library side-by-side in a single library together with other library
facilities not covered by this License, and distribute such a combined
library, provided that the separate distribution of the work based on
the Library and of the other library facilities is otherwise
permitted, and provided that you do these two things:

    a) Accompany the combined library with a copy of the same work
    based on the Library, uncombined with any other library
    facilities.  This must be distributed under the terms of the
    Sections above.

    b) Give prominent notice with the combined library of the fact
    that part of it is a work based on the Library, and explaining
    where to find the accompanying uncombined form of the same work.

  8. You may not copy, modify, sublicense, link with, or distribute
the Library except as expressly provided under this License.  Any
attempt otherwise to copy, modify, sublicense, link with, or
distribute the Library is void, and will automatically terminate your
rights under this License.  However, parties who have received copies,
or rights, from you under this License will not have their licenses
terminated so long as such parties remain in full compliance.

  9. You are not required to accept this License, since you have not
signed it.  However, nothing else grants you permission to modify or
distribute the Library or its derivative works.  These actions are
prohibited by law if you do not accept this License.  Therefore, by
modifying or distributing the Library (or any work based on the
Library), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Library or works based on it.

  10. Each time you redistribute the Library (or any work based on the
Library), the recipient automatically receives a license from the
original licensor to copy, distribute, link with or modify the Library
subject to these terms and conditions.  You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties with
this License.

  11. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License.  If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Library at all.  For example, if a patent
license would not permit royalty-free redistribution of the Library by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Library.

If any portion of this section is held invalid or unenforceable under any
particular circumstance, the balance of the section is intended to apply,
and the section as a whole is intended to apply in other circumstances.

It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system which is
implemented by public license practices.  Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.

This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.

  12. If the distribution and/or use of the Library is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Library under this License may add
an explicit geographical distribution limitation excluding those countries,
so that distribution is permitted only in or among countries not thus
excluded.  In such case, this License incorporates the limitation as if
written in the body of this License.

  13. The Free Software Foundation may publish revised and/or new
versions of the Lesser General Public License from time to time.
Such new versions will be similar in spirit to the present version,
but may differ in detail to address new problems or concerns.

Each version is given a distinguishing version number.  If the Library
specifies a version number of this License which applies to it and
"any later version", you have the option of following the terms and
conditions either of that version or of any later version published by
the Free Software Foundation.  If the Library does not specify a
license version number, you may choose any version ever published by
the Free Software Foundation.

  14. If you wish to incorporate parts of the Library into other free
programs whose distribution conditions are incompatible with these,
write to the author to ask for permission.  For software which is
copyrighted by the Free Software Foundation, write to the Free
Software Foundation; we sometimes make exceptions for this.  Our
decision will be guided by the two goals of preserving the free status
of all derivatives of our free software and of promoting the sharing
and reuse of software generally.

			    NO WARRANTY

  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.

  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
DAMAGES.

		     END OF TERMS AND CONDITIONS
<?php

namespace PhpAmqpLib\Channel;

use PhpAmqpLib\Connection\AbstractConnection;
use PhpAmqpLib\Exception\AMQPBasicCancelException;
use PhpAmqpLib\Exception\AMQPChannelClosedException;
use PhpAmqpLib\Exception\AMQPConnectionBlockedException;
use PhpAmqpLib\Exception\AMQPConnectionClosedException;
use PhpAmqpLib\Exception\AMQPNoDataException;
use PhpAmqpLib\Exception\AMQPProtocolChannelException;
use PhpAmqpLib\Exception\AMQPRuntimeException;
use PhpAmqpLib\Exception\AMQPTimeoutException;
use PhpAmqpLib\Helper\Assert;
use PhpAmqpLib\Message\AMQPMessage;
use PhpAmqpLib\Wire;
use PhpAmqpLib\Wire\AMQPReader;
use PhpAmqpLib\Wire\AMQPTable;
use PhpAmqpLib\Wire\AMQPWriter;

class AMQPChannel extends AbstractChannel
{
    /**
     * @var callable[]
     * @internal Use is_consuming() to check if there is active callbacks
     */
    public $callbacks = array();

    /** @var bool Whether or not the channel has been "opened" */
    protected $is_open = false;

    /** @var int */
    protected $default_ticket = 0;

    /** @var bool */
    protected $active = true;

    /** @var bool */
    protected $stopConsume = false;

    /** @var array */
    protected $alerts = array();

    /** @var bool */
    protected $auto_decode;

    /**
     * These parameters will be passed to function in case of basic_return:
     *    param int $reply_code
     *    param string $reply_text
     *    param string $exchange
     *    param string $routing_key
     *    param AMQPMessage $msg
     *
     * @var null|callable
     */
    protected $basic_return_callback;

    /** @var array Used to keep track of the messages that are going to be batch published. */
    protected $batch_messages = array();

    /**
     * If the channel is in confirm_publish mode this array will store all published messages
     * until they get ack'ed or nack'ed
     *
     * @var AMQPMessage[]
     */
    private $published_messages = array();

    /** @var int */
    private $next_delivery_tag = 0;

    /** @var null|callable */
    private $ack_handler;

    /** @var null|callable */
    private $nack_handler;

    /**
     * Circular buffer to speed up both basic_publish() and publish_batch().
     * Max size limited by $publish_cache_max_size.
     *
     * @var array
     * @see basic_publish()
     * @see publish_batch()
     */
    private $publish_cache = array();

    /**
     * Maximal size of $publish_cache
     *
     * @var int
     */
    private $publish_cache_max_size = 100;

    /**
     * Maximum time to wait for operations on this channel, in seconds.
     * @var float
     */
    protected $channel_rpc_timeout;

    /**
     * @param AbstractConnection $connection
     * @param int|null $channel_id
     * @param bool $auto_decode
     * @param int|float $channel_rpc_timeout
     * @throws \PhpAmqpLib\Exception\AMQPOutOfBoundsException
     * @throws \PhpAmqpLib\Exception\AMQPRuntimeException
     * @throws \PhpAmqpLib\Exception\AMQPTimeoutException
     * @throws \PhpAmqpLib\Exception\AMQPConnectionClosedException
     */
    public function __construct($connection, $channel_id = null, $auto_decode = true, $channel_rpc_timeout = 0)
    {
        if ($channel_id == null) {
            $channel_id = $connection->get_free_channel_id();
        }

        parent::__construct($connection, $channel_id);

        $this->debug->debug_msg('using channel_id: ' . $channel_id);

        $this->auto_decode = $auto_decode;
        $this->channel_rpc_timeout = $channel_rpc_timeout;

        try {
            $this->x_open();
        } catch (\Exception $e) {
            $this->close();
            throw $e;
        }
    }

    /**
     * @return bool
     */
    public function is_open()
    {
        return $this->is_open;
    }

    /**
     * Tear down this object, after we've agreed to close with the server.
     */
    protected function do_close()
    {
        if ($this->channel_id !== null) {
            unset($this->connection->channels[$this->channel_id]);
        }
        $this->channel_id = $this->connection = null;
        $this->is_open = false;
        $this->callbacks = array();
    }

    /**
     * Only for AMQP0.8.0
     * This method allows the server to send a non-fatal warning to
     * the client.  This is used for methods that are normally
     * asynchronous and thus do not have confirmations, and for which
     * the server may detect errors that need to be reported.  Fatal
     * errors are handled as channel or connection exceptions; non-
     * fatal errors are sent through this method.
     *
     * @param AMQPReader $reader
     */
    protected function channel_alert(AMQPReader $reader): void
    {
        $reply_code = $reader->read_short();
        $reply_text = $reader->read_shortstr();
        $details = $reader->read_table();
        array_push($this->alerts, array($reply_code, $reply_text, $details));
    }

    /**
     * Request a channel close
     *
     * @param int $reply_code
     * @param string $reply_text
     * @param array $method_sig
     * @throws \PhpAmqpLib\Exception\AMQPTimeoutException if the specified operation timeout was exceeded
     * @return mixed
     */
    public function close($reply_code = 0, $reply_text = '', $method_sig = array(0, 0))
    {
        $this->callbacks = array();
        if ($this->is_open === false || $this->connection === null) {
            $this->do_close();

            return null; // already closed
        }
        list($class_id, $method_id, $args) = $this->protocolWriter->channelClose(
            $reply_code,
            $reply_text,
            $method_sig[0],
            $method_sig[1]
        );

        try {
            $this->send_method_frame(array($class_id, $method_id), $args);
        } catch (\Exception $e) {
            $this->do_close();

            throw $e;
        }

        return $this->wait(array(
            $this->waitHelper->get_wait('channel.close_ok')
        ), false, $this->channel_rpc_timeout);
    }

    /**
     * Closes a channel if no connection or a connection is closed
     *
     * @return bool
     */
    public function closeIfDisconnected(): bool
    {
        if (!$this->connection || $this->connection->isConnected()) {
            return false;
        }

        $this->do_close();
        return true;
    }

    /**
     * @param AMQPReader $reader
     * @throws AMQPProtocolChannelException
     */
    protected function channel_close(AMQPReader $reader): void
    {
        $reply_code = $reader->read_short();
        $reply_text = $reader->read_shortstr();
        $class_id = $reader->read_short();
        $method_id = $reader->read_short();

        $this->send_method_frame(array(20, 41));
        $this->do_close();

        throw new AMQPProtocolChannelException($reply_code, $reply_text, array($class_id, $method_id));
    }

    /**
     * Confirm a channel close
     * Alias of AMQPChannel::do_close()
     */
    protected function channel_close_ok()
    {
        $this->do_close();
    }

    /**
     * Enables/disables flow from peer
     *
     * @param bool $active
     * @throws \PhpAmqpLib\Exception\AMQPTimeoutException if the specified operation timeout was exceeded
     * @return mixed
     */
    public function flow($active)
    {
        list($class_id, $method_id, $args) = $this->protocolWriter->channelFlow($active);
        $this->send_method_frame(array($class_id, $method_id), $args);

        return $this->wait(array(
            $this->waitHelper->get_wait('channel.flow_ok')
        ), false, $this->channel_rpc_timeout);
    }

    protected function channel_flow(AMQPReader $reader): void
    {
        $this->active = $reader->read_bit();
        $this->x_flow_ok($this->active);
    }

    /**
     * @param bool $active
     */
    protected function x_flow_ok($active)
    {
        list($class_id, $method_id, $args) = $this->protocolWriter->channelFlow($active);
        $this->send_method_frame(array($class_id, $method_id), $args);
    }

    protected function channel_flow_ok(AMQPReader $reader): bool
    {
        return $reader->read_bit();
    }

    /**
     * @param string $out_of_band
     * @throws \PhpAmqpLib\Exception\AMQPOutOfBoundsException
     * @throws \PhpAmqpLib\Exception\AMQPRuntimeException
     * @throws \PhpAmqpLib\Exception\AMQPTimeoutException
     * @throws \PhpAmqpLib\Exception\AMQPConnectionClosedException
     * @return mixed
     */
    protected function x_open($out_of_band = '')
    {
        if ($this->is_open) {
            return null;
        }

        list($class_id, $method_id, $args) = $this->protocolWriter->channelOpen($out_of_band);
        $this->send_method_frame(array($class_id, $method_id), $args);

        return $this->wait(array(
            $this->waitHelper->get_wait('channel.open_ok')
        ), false, $this->channel_rpc_timeout);
    }

    protected function channel_open_ok()
    {
        $this->is_open = true;

        $this->debug->debug_msg('Channel open');
    }

    /**
     * Requests an access ticket
     *
     * @param string $realm
     * @param bool $exclusive
     * @param bool $passive
     * @param bool $active
     * @param bool $write
     * @param bool $read
     * @throws \PhpAmqpLib\Exception\AMQPTimeoutException if the specified operation timeout was exceeded
     * @return mixed
     */
    public function access_request(
        $realm,
        $exclusive = false,
        $passive = false,
        $active = false,
        $write = false,
        $read = false
    ) {
        list($class_id, $method_id, $args) = $this->protocolWriter->accessRequest(
            $realm,
            $exclusive,
            $passive,
            $active,
            $write,
            $read
        );

        $this->send_method_frame(array($class_id, $method_id), $args);

        return $this->wait(array(
            $this->waitHelper->get_wait('access.request_ok')
        ), false, $this->channel_rpc_timeout);
    }

    /**
     * Grants access to server resources
     *
     * @param AMQPReader $reader
     * @return int
     */
    protected function access_request_ok(AMQPReader $reader): int
    {
        $this->default_ticket = $reader->read_short();

        return $this->default_ticket;
    }

    /**
     * Declares exchange
     *
     * @param string $exchange
     * @param string $type
     * @param bool $passive
     * @param bool $durable
     * @param bool $auto_delete
     * @param bool $internal
     * @param bool $nowait
     * @param AMQPTable|array $arguments
     * @param int|null $ticket
     * @throws \PhpAmqpLib\Exception\AMQPTimeoutException if the specified operation timeout was exceeded
     * @return mixed|null
     */
    public function exchange_declare(
        $exchange,
        $type,
        $passive = false,
        $durable = false,
        $auto_delete = true,
        $internal = false,
        $nowait = false,
        $arguments = array(),
        $ticket = null
    ) {
        $ticket = $this->getTicket($ticket);

        list($class_id, $method_id, $args) = $this->protocolWriter->exchangeDeclare(
            $ticket,
            $exchange,
            $type,
            $passive,
            $durable,
            $auto_delete,
            $internal,
            $nowait,
            $arguments
        );

        $this->send_method_frame(array($class_id, $method_id), $args);

        if ($nowait) {
            return null;
        }

        return $this->wait(array(
            $this->waitHelper->get_wait('exchange.declare_ok')
        ), false, $this->channel_rpc_timeout);
    }

    /**
     * Confirms an exchange declaration
     */
    protected function exchange_declare_ok()
    {
    }

    /**
     * Deletes an exchange
     *
     * @param string $exchange
     * @param bool $if_unused
     * @param bool $nowait
     * @param int|null $ticket
     * @throws \PhpAmqpLib\Exception\AMQPTimeoutException if the specified operation timeout was exceeded
     * @return mixed|null
     */
    public function exchange_delete(
        $exchange,
        $if_unused = false,
        $nowait = false,
        $ticket = null
    ) {
        $ticket = $this->getTicket($ticket);
        list($class_id, $method_id, $args) = $this->protocolWriter->exchangeDelete(
            $ticket,
            $exchange,
            $if_unused,
            $nowait
        );

        $this->send_method_frame(array($class_id, $method_id), $args);

        if ($nowait) {
            return null;
        }

        return $this->wait(array(
            $this->waitHelper->get_wait('exchange.delete_ok')
        ), false, $this->channel_rpc_timeout);
    }

    /**
     * Confirms deletion of an exchange
     */
    protected function exchange_delete_ok()
    {
    }

    /**
     * Binds dest exchange to source exchange
     *
     * @param string $destination
     * @param string $source
     * @param string $routing_key
     * @param bool $nowait
     * @param \PhpAmqpLib\Wire\AMQPTable|array $arguments
     * @param int|null $ticket
     * @throws \PhpAmqpLib\Exception\AMQPTimeoutException if the specified operation timeout was exceeded
     * @return mixed|null
     */
    public function exchange_bind(
        $destination,
        $source,
        $routing_key = '',
        $nowait = false,
        $arguments = array(),
        $ticket = null
    ) {
        $ticket = $this->getTicket($ticket);

        list($class_id, $method_id, $args) = $this->protocolWriter->exchangeBind(
            $ticket,
            $destination,
            $source,
            $routing_key,
            $nowait,
            $arguments
        );

        $this->send_method_frame(array($class_id, $method_id), $args);

        if ($nowait) {
            return null;
        }

        return $this->wait(array(
            $this->waitHelper->get_wait('exchange.bind_ok')
        ), false, $this->channel_rpc_timeout);
    }

    /**
     * Confirms bind successful
     */
    protected function exchange_bind_ok()
    {
    }

    /**
     * Unbinds dest exchange from source exchange
     *
     * @param string $destination
     * @param string $source
     * @param string $routing_key
     * @param bool $nowait
     * @param \PhpAmqpLib\Wire\AMQPTable|array $arguments
     * @param int|null $ticket
     * @throws \PhpAmqpLib\Exception\AMQPTimeoutException if the specified operation timeout was exceeded
     * @return mixed
     */
    public function exchange_unbind(
        $destination,
        $source,
        $routing_key = '',
        $nowait = false,
        $arguments = array(),
        $ticket = null
    ) {
        $ticket = $this->getTicket($ticket);

        list($class_id, $method_id, $args) = $this->protocolWriter->exchangeUnbind(
            $ticket,
            $destination,
            $source,
            $routing_key,
            $nowait,
            $arguments
        );

        $this->send_method_frame(array($class_id, $method_id), $args);

        return $this->wait(array(
            $this->waitHelper->get_wait('exchange.unbind_ok')
        ), false, $this->channel_rpc_timeout);
    }

    /**
     * Confirms unbind successful
     */
    protected function exchange_unbind_ok()
    {
    }

    /**
     * Binds queue to an exchange
     *
     * @param string $queue
     * @param string $exchange
     * @param string $routing_key
     * @param bool $nowait
     * @param \PhpAmqpLib\Wire\AMQPTable|array $arguments
     * @param int|null $ticket
     * @throws \PhpAmqpLib\Exception\AMQPTimeoutException if the specified operation timeout was exceeded
     * @return mixed|null
     */
    public function queue_bind(
        $queue,
        $exchange,
        $routing_key = '',
        $nowait = false,
        $arguments = array(),
        $ticket = null
    ) {
        $ticket = $this->getTicket($ticket);

        list($class_id, $method_id, $args) = $this->protocolWriter->queueBind(
            $ticket,
            $queue,
            $exchange,
            $routing_key,
            $nowait,
            $arguments
        );

        $this->send_method_frame(array($class_id, $method_id), $args);

        if ($nowait) {
            return null;
        }

        return $this->wait(array(
            $this->waitHelper->get_wait('queue.bind_ok')
        ), false, $this->channel_rpc_timeout);
    }

    /**
     * Confirms bind successful
     */
    protected function queue_bind_ok()
    {
    }

    /**
     * Unbind queue from an exchange
     *
     * @param string $queue
     * @param string $exchange
     * @param string $routing_key
     * @param \PhpAmqpLib\Wire\AMQPTable|array $arguments
     * @param int|null $ticket
     * @throws \PhpAmqpLib\Exception\AMQPTimeoutException if the specified operation timeout was exceeded
     * @return mixed
     */
    public function queue_unbind(
        $queue,
        $exchange,
        $routing_key = '',
        $arguments = array(),
        $ticket = null
    ) {
        $ticket = $this->getTicket($ticket);

        list($class_id, $method_id, $args) = $this->protocolWriter->queueUnbind(
            $ticket,
            $queue,
            $exchange,
            $routing_key,
            $arguments
        );

        $this->send_method_frame(array($class_id, $method_id), $args);

        return $this->wait(array(
            $this->waitHelper->get_wait('queue.unbind_ok')
        ), false, $this->channel_rpc_timeout);
    }

    /**
     * Confirms unbind successful
     */
    protected function queue_unbind_ok()
    {
    }

    /**
     * Declares queue, creates if needed
     *
     * @param string $queue
     * @param bool $passive
     * @param bool $durable
     * @param bool $exclusive
     * @param bool $auto_delete
     * @param bool $nowait
     * @param array|AMQPTable $arguments
     * @param int|null $ticket
     * @return array|null
     *@throws \PhpAmqpLib\Exception\AMQPTimeoutException if the specified operation timeout was exceeded
     */
    public function queue_declare(
        $queue = '',
        $passive = false,
        $durable = false,
        $exclusive = false,
        $auto_delete = true,
        $nowait = false,
        $arguments = array(),
        $ticket = null
    ) {
        $ticket = $this->getTicket($ticket);

        list($class_id, $method_id, $args) = $this->protocolWriter->queueDeclare(
            $ticket,
            $queue,
            $passive,
            $durable,
            $exclusive,
            $auto_delete,
            $nowait,
            $arguments
        );

        $this->send_method_frame(array($class_id, $method_id), $args);

        if ($nowait) {
            return null;
        }

        return $this->wait(array(
            $this->waitHelper->get_wait('queue.declare_ok')
        ), false, $this->channel_rpc_timeout);
    }

    /**
     * Confirms a queue definition
     *
     * @param AMQPReader $reader
     * @return string[]
     */
    protected function queue_declare_ok(AMQPReader $reader)
    {
        $queue = $reader->read_shortstr();
        $message_count = $reader->read_long();
        $consumer_count = $reader->read_long();

        return array($queue, $message_count, $consumer_count);
    }

    /**
     * Deletes a queue
     *
     * @param string $queue
     * @param bool $if_unused
     * @param bool $if_empty
     * @param bool $nowait
     * @param int|null $ticket
     * @throws \PhpAmqpLib\Exception\AMQPTimeoutException if the specified operation timeout was exceeded
     * @return mixed|null
     */
    public function queue_delete($queue = '', $if_unused = false, $if_empty = false, $nowait = false, $ticket = null)
    {
        $ticket = $this->getTicket($ticket);

        list($class_id, $method_id, $args) = $this->protocolWriter->queueDelete(
            $ticket,
            $queue,
            $if_unused,
            $if_empty,
            $nowait
        );

        $this->send_method_frame(array($class_id, $method_id), $args);

        if ($nowait) {
            return null;
        }

        return $this->wait(array(
            $this->waitHelper->get_wait('queue.delete_ok')
        ), false, $this->channel_rpc_timeout);
    }

    /**
     * Confirms deletion of a queue
     *
     * @param AMQPReader $reader
     * @return int|string
     */
    protected function queue_delete_ok(AMQPReader $reader)
    {
        return $reader->read_long();
    }

    /**
     * Purges a queue
     *
     * @param string $queue
     * @param bool $nowait
     * @param int|null $ticket
     * @throws \PhpAmqpLib\Exception\AMQPTimeoutException if the specified operation timeout was exceeded
     * @return mixed|null
     */
    public function queue_purge($queue = '', $nowait = false, $ticket = null)
    {
        $ticket = $this->getTicket($ticket);
        list($class_id, $method_id, $args) = $this->protocolWriter->queuePurge($ticket, $queue, $nowait);

        $this->send_method_frame(array($class_id, $method_id), $args);

        if ($nowait) {
            return null;
        }

        return $this->wait(array(
            $this->waitHelper->get_wait('queue.purge_ok')
        ), false, $this->channel_rpc_timeout);
    }

    /**
     * Confirms a queue purge
     *
     * @param AMQPReader $reader
     * @return int|string
     */
    protected function queue_purge_ok(AMQPReader $reader)
    {
        return $reader->read_long();
    }

    /**
     * Acknowledges one or more messages
     *
     * @param int $delivery_tag
     * @param bool $multiple
     */
    public function basic_ack($delivery_tag, $multiple = false)
    {
        list($class_id, $method_id, $args) = $this->protocolWriter->basicAck($delivery_tag, $multiple);
        $this->send_method_frame(array($class_id, $method_id), $args);
    }

    /**
     * Called when the server sends a basic.ack
     *
     * @param AMQPReader $reader
     * @throws AMQPRuntimeException
     */
    protected function basic_ack_from_server(AMQPReader $reader): void
    {
        $delivery_tag = $reader->read_longlong();
        $multiple = (bool) $reader->read_bit();

        if (!isset($this->published_messages[$delivery_tag])) {
            throw new AMQPRuntimeException(sprintf(
                'Server ack\'ed unknown delivery_tag "%s"',
                $delivery_tag
            ));
        }

        $this->internal_ack_handler($delivery_tag, $multiple, $this->ack_handler);
    }

    /**
     * Called when the server sends a basic.nack
     *
     * @param AMQPReader $reader
     * @throws AMQPRuntimeException
     */
    protected function basic_nack_from_server(AMQPReader $reader): void
    {
        $delivery_tag = $reader->read_longlong();
        $multiple = (bool) $reader->read_bit();

        if (!isset($this->published_messages[$delivery_tag])) {
            throw new AMQPRuntimeException(sprintf(
                'Server nack\'ed unknown delivery_tag "%s"',
                $delivery_tag
            ));
        }

        $this->internal_ack_handler($delivery_tag, $multiple, $this->nack_handler);
    }

    /**
     * Handles the deletion of messages from this->publishedMessages and dispatches them to the $handler
     *
     * @param int $delivery_tag
     * @param bool $multiple
     * @param callable $handler
     */
    protected function internal_ack_handler($delivery_tag, $multiple, $handler)
    {
        if ($multiple) {
            $keys = $this->get_keys_less_or_equal($this->published_messages, $delivery_tag);

            foreach ($keys as $key) {
                $this->internal_ack_handler($key, false, $handler);
            }
        } else {
            $message = $this->get_and_unset_message($delivery_tag);
            $this->dispatch_to_handler($handler, array($message));
        }
    }

    /**
     * @param AMQPMessage[] $messages
     * @param string $value
     * @return mixed
     */
    protected function get_keys_less_or_equal(array $messages, $value)
    {
        $value = (int) $value;
        $keys = array_reduce(
            array_keys($messages),
            /**
             * @param string $key
             */
            function ($keys, $key) use ($value) {
                if ($key <= $value) {
                    $keys[] = $key;
                }

                return $keys;
            },
            array()
        );

        return $keys;
    }

    /**
     * Rejects one or several received messages
     *
     * @param int $delivery_tag
     * @param bool $multiple
     * @param bool $requeue
     */
    public function basic_nack($delivery_tag, $multiple = false, $requeue = false)
    {
        list($class_id, $method_id, $args) = $this->protocolWriter->basicNack($delivery_tag, $multiple, $requeue);
        $this->send_method_frame(array($class_id, $method_id), $args);
    }

    /**
     * Ends a queue consumer
     *
     * @param string $consumer_tag
     * @param bool $nowait
     * @param bool $noreturn
     * @throws \PhpAmqpLib\Exception\AMQPTimeoutException if the specified operation timeout was exceeded
     * @return mixed
     */
    public function basic_cancel($consumer_tag, $nowait = false, $noreturn = false)
    {
        list($class_id, $method_id, $args) = $this->protocolWriter->basicCancel($consumer_tag, $nowait);
        $this->send_method_frame(array($class_id, $method_id), $args);

        if ($nowait || $noreturn) {
            unset($this->callbacks[$consumer_tag]);
            return $consumer_tag;
        }

        return $this->wait(array(
            $this->waitHelper->get_wait('basic.cancel_ok')
        ), false, $this->channel_rpc_timeout);
    }

    /**
     * @param AMQPReader $reader
     * @throws \PhpAmqpLib\Exception\AMQPBasicCancelException
     */
    protected function basic_cancel_from_server(AMQPReader $reader)
    {
        throw new AMQPBasicCancelException($reader->read_shortstr());
    }

    /**
     * Confirm a cancelled consumer
     *
     * @param AMQPReader $reader
     * @return string
     */
    protected function basic_cancel_ok(AMQPReader $reader): string
    {
        $consumerTag = $reader->read_shortstr();
        unset($this->callbacks[$consumerTag]);

        return $consumerTag;
    }

    /**
     * @return bool
     */
    public function is_consuming()
    {
        return !empty($this->callbacks);
    }

    /**
     * Start a queue consumer.
     * This method asks the server to start a "consumer", which is a transient request for messages
     * from a specific queue.
     * Consumers last as long as the channel they were declared on, or until the client cancels them.
     *
     * @link https://www.rabbitmq.com/amqp-0-9-1-reference.html#basic.consume
     *
     * @param string $queue
     * @param string $consumer_tag
     * @param bool $no_local
     * @param bool $no_ack
     * @param bool $exclusive
     * @param bool $nowait
     * @param callable|null $callback
     * @param int|null $ticket
     * @param \PhpAmqpLib\Wire\AMQPTable|array $arguments
     *
     * @throws \PhpAmqpLib\Exception\AMQPTimeoutException if the specified operation timeout was exceeded
     * @throws \InvalidArgumentException
     * @return string
     */
    public function basic_consume(
        $queue = '',
        $consumer_tag = '',
        $no_local = false,
        $no_ack = false,
        $exclusive = false,
        $nowait = false,
        $callback = null,
        $ticket = null,
        $arguments = array()
    ) {
        if (null !== $callback) {
            Assert::isCallable($callback);
        }
        if ($nowait && empty($consumer_tag)) {
            throw new \InvalidArgumentException('Cannot start consumer without consumer_tag and no-wait=true');
        }
        if (!empty($consumer_tag) && array_key_exists($consumer_tag, $this->callbacks)) {
            throw new \InvalidArgumentException('This consumer tag is already registered.');
        }

        $ticket = $this->getTicket($ticket);
        list($class_id, $method_id, $args) = $this->protocolWriter->basicConsume(
            $ticket,
            $queue,
            $consumer_tag,
            $no_local,
            $no_ack,
            $exclusive,
            $nowait,
            $this->protocolVersion === Wire\Constants091::VERSION ? $arguments : null
        );

        $this->send_method_frame(array($class_id, $method_id), $args);

        if (false === $nowait) {
            $consumer_tag = $this->wait(array(
                $this->waitHelper->get_wait('basic.consume_ok')
            ), false, $this->channel_rpc_timeout);
        }

        $this->callbacks[$consumer_tag] = $callback;

        return $consumer_tag;
    }

    /**
     * Confirms a new consumer
     *
     * @param AMQPReader $reader
     * @return string
     */
    protected function basic_consume_ok(AMQPReader $reader): string
    {
        return $reader->read_shortstr();
    }

    /**
     * Notifies the client of a consumer message
     *
     * @param AMQPReader $reader
     * @param AMQPMessage $message
     */
    protected function basic_deliver(AMQPReader $reader, AMQPMessage $message): void
    {
        $consumer_tag = $reader->read_shortstr();
        $delivery_tag = $reader->read_longlong();
        $redelivered = $reader->read_bit();
        $exchange = $reader->read_shortstr();
        $routing_key = $reader->read_shortstr();

        $message
            ->setChannel($this)
            ->setDeliveryInfo($delivery_tag, $redelivered, $exchange, $routing_key)
            ->setConsumerTag($consumer_tag);

        if (isset($this->callbacks[$consumer_tag])) {
            call_user_func($this->callbacks[$consumer_tag], $message);
        }
    }

    /**
     * Direct access to a queue if no message was available in the queue, return null
     *
     * @param string $queue
     * @param bool $no_ack
     * @param int|null $ticket
     * @throws \PhpAmqpLib\Exception\AMQPTimeoutException if the specified operation timeout was exceeded
     * @return AMQPMessage|null
     */
    public function basic_get($queue = '', $no_ack = false, $ticket = null)
    {
        $ticket = $this->getTicket($ticket);
        list($class_id, $method_id, $args) = $this->protocolWriter->basicGet($ticket, $queue, $no_ack);

        $this->send_method_frame(array($class_id, $method_id), $args);

        return $this->wait(array(
            $this->waitHelper->get_wait('basic.get_ok'),
            $this->waitHelper->get_wait('basic.get_empty')
        ), false, $this->channel_rpc_timeout);
    }

    /**
     * Indicates no messages available
     */
    protected function basic_get_empty()
    {
    }

    /**
     * Provides client with a message
     *
     * @param AMQPReader $reader
     * @param AMQPMessage $message
     * @return AMQPMessage
     */
    protected function basic_get_ok(AMQPReader $reader, AMQPMessage $message): AMQPMessage
    {
        $delivery_tag = $reader->read_longlong();
        $redelivered = $reader->read_bit();
        $exchange = $reader->read_shortstr();
        $routing_key = $reader->read_shortstr();
        $message_count = $reader->read_long();

        $message
            ->setChannel($this)
            ->setDeliveryInfo($delivery_tag, $redelivered, $exchange, $routing_key)
            ->setMessageCount($message_count);

        return $message;
    }

    /**
     * @param string $exchange
     * @param string $routing_key
     * @param bool $mandatory
     * @param bool $immediate
     * @param int $ticket
     * @return mixed
     */
    private function prePublish($exchange, $routing_key, $mandatory, $immediate, $ticket)
    {
        $cache_key = sprintf(
            '%s|%s|%s|%s|%s',
            $exchange,
            $routing_key,
            $mandatory,
            $immediate,
            $ticket
        );
        if (false === isset($this->publish_cache[$cache_key])) {
            $ticket = $this->getTicket($ticket);
            list($class_id, $method_id, $args) = $this->protocolWriter->basicPublish(
                $ticket,
                $exchange,
                $routing_key,
                $mandatory,
                $immediate
            );

            $pkt = $this->prepare_method_frame(array($class_id, $method_id), $args);
            $this->publish_cache[$cache_key] = $pkt->getvalue();
            if (count($this->publish_cache) > $this->publish_cache_max_size) {
                reset($this->publish_cache);
                $old_key = key($this->publish_cache);
                unset($this->publish_cache[$old_key]);
            }
        }

        return $this->publish_cache[$cache_key];
    }

    /**
     * Publishes a message
     *
     * @param AMQPMessage $msg
     * @param string $exchange
     * @param string $routing_key
     * @param bool $mandatory
     * @param bool $immediate
     * @param int|null $ticket
     * @throws AMQPChannelClosedException
     * @throws AMQPConnectionClosedException
     * @throws AMQPConnectionBlockedException
     */
    public function basic_publish(
        $msg,
        $exchange = '',
        $routing_key = '',
        $mandatory = false,
        $immediate = false,
        $ticket = null
    ) {
        $this->checkConnection();
        $pkt = new AMQPWriter();
        $pkt->write($this->prePublish($exchange, $routing_key, $mandatory, $immediate, $ticket));

        try {
            $this->connection->send_content(
                $this->channel_id,
                60,
                0,
                mb_strlen($msg->body, 'ASCII'),
                $msg->serialize_properties(),
                $msg->body,
                $pkt
            );
        } catch (AMQPConnectionClosedException $e) {
            $this->do_close();
            throw $e;
        }

        if ($this->next_delivery_tag > 0) {
            $this->published_messages[$this->next_delivery_tag] = $msg;
            $msg->setDeliveryInfo($this->next_delivery_tag, false, $exchange, $routing_key);
            $this->next_delivery_tag++;
        }
    }

    /**
     * @param AMQPMessage $message
     * @param string $exchange
     * @param string $routing_key
     * @param bool $mandatory
     * @param bool $immediate
     * @param int|null $ticket
     */
    public function batch_basic_publish(
        $message,
        $exchange = '',
        $routing_key = '',
        $mandatory = false,
        $immediate = false,
        $ticket = null
    ) {
        $this->batch_messages[] = [
            $message,
            $exchange,
            $routing_key,
            $mandatory,
            $immediate,
            $ticket
        ];
    }

    /**
     * Publish batch
     *
     * @return void
     * @throws AMQPChannelClosedException
     * @throws AMQPConnectionClosedException
     * @throws AMQPConnectionBlockedException
     */
    public function publish_batch()
    {
        if (empty($this->batch_messages)) {
            return;
        }

        $this->checkConnection();

        /** @var AMQPWriter $pkt */
        $pkt = new AMQPWriter();

        foreach ($this->batch_messages as $m) {
            /** @var AMQPMessage $msg */
            $msg = $m[0];

            $exchange = isset($m[1]) ? $m[1] : '';
            $routing_key = isset($m[2]) ? $m[2] : '';
            $mandatory = isset($m[3]) ? $m[3] : false;
            $immediate = isset($m[4]) ? $m[4] : false;
            $ticket = isset($m[5]) ? $m[5] : null;
            $pkt->write($this->prePublish($exchange, $routing_key, $mandatory, $immediate, $ticket));

            $this->connection->prepare_content(
                $this->channel_id,
                60,
                0,
                mb_strlen($msg->body, 'ASCII'),
                $msg->serialize_properties(),
                $msg->body,
                $pkt
            );

            if ($this->next_delivery_tag > 0) {
                $this->published_messages[$this->next_delivery_tag] = $msg;
                $this->next_delivery_tag++;
            }
        }

        $this->connection->write($pkt->getvalue());
        $this->batch_messages = array();
    }

    /**
     * Specifies QoS
     * 
     * See https://www.rabbitmq.com/consumer-prefetch.html#overview for details
     * 
     * @param int $prefetch_size Default is 0 (Alias for unlimited)
     * @param int $prefetch_count Default is 0 (Alias for unlimited)
     * @param bool $global Default is false, prefetch size and count are applied to each channel consumer separately
     * @throws \PhpAmqpLib\Exception\AMQPTimeoutException if the specified operation timeout was exceeded
     * @return mixed
     */
    public function basic_qos($prefetch_size, $prefetch_count, $a_global)
    {
        list($class_id, $method_id, $args) = $this->protocolWriter->basicQos(
            $prefetch_size,
            $prefetch_count,
            $a_global
        );

        $this->send_method_frame(array($class_id, $method_id), $args);

        return $this->wait(array(
            $this->waitHelper->get_wait('basic.qos_ok')
        ), false, $this->channel_rpc_timeout);
    }

    /**
     * Confirms QoS request
     */
    protected function basic_qos_ok()
    {
    }

    /**
     * Redelivers unacknowledged messages
     *
     * @param bool $requeue
     * @throws \PhpAmqpLib\Exception\AMQPTimeoutException if the specified operation timeout was exceeded
     * @return mixed
     */
    public function basic_recover($requeue = false)
    {
        list($class_id, $method_id, $args) = $this->protocolWriter->basicRecover($requeue);
        $this->send_method_frame(array($class_id, $method_id), $args);

        return $this->wait(array(
            $this->waitHelper->get_wait('basic.recover_ok')
        ), false, $this->channel_rpc_timeout);
    }

    /**
     * Confirm the requested recover
     */
    protected function basic_recover_ok()
    {
    }

    /**
     * Rejects an incoming message
     *
     * @param int $delivery_tag
     * @param bool $requeue
     */
    public function basic_reject($delivery_tag, $requeue)
    {
        list($class_id, $method_id, $args) = $this->protocolWriter->basicReject($delivery_tag, $requeue);
        $this->send_method_frame(array($class_id, $method_id), $args);
    }

    /**
     * Returns a failed message
     *
     * @param AMQPReader $reader
     * @param AMQPMessage $message
     */
    protected function basic_return(AMQPReader $reader, AMQPMessage $message)
    {
        $callback = $this->basic_return_callback;
        if (!is_callable($callback)) {
            $this->debug->debug_msg('Skipping unhandled basic_return message');
            return null;
        }

        $reply_code = $reader->read_short();
        $reply_text = $reader->read_shortstr();
        $exchange = $reader->read_shortstr();
        $routing_key = $reader->read_shortstr();

        call_user_func_array($callback, array(
            $reply_code,
            $reply_text,
            $exchange,
            $routing_key,
            $message,
        ));
    }

    /**
     * @throws \PhpAmqpLib\Exception\AMQPTimeoutException if the specified operation timeout was exceeded
     * @return mixed
     */
    public function tx_commit()
    {
        $this->send_method_frame(array(90, 20));

        return $this->wait(array(
            $this->waitHelper->get_wait('tx.commit_ok')
        ), false, $this->channel_rpc_timeout);
    }

    /**
     * Confirms a successful commit
     */
    protected function tx_commit_ok()
    {
    }

    /**
     * Rollbacks the current transaction
     *
     * @throws \PhpAmqpLib\Exception\AMQPTimeoutException if the specified operation timeout was exceeded
     * @return mixed
     */
    public function tx_rollback()
    {
        $this->send_method_frame(array(90, 30));

        return $this->wait(array(
            $this->waitHelper->get_wait('tx.rollback_ok')
        ), false, $this->channel_rpc_timeout);
    }

    /**
     * Confirms a successful rollback
     */
    protected function tx_rollback_ok()
    {
    }

    /**
     * Puts the channel into confirm mode
     * Beware that only non-transactional channels may be put into confirm mode and vice versa
     *
     * @param bool $nowait
     * @throws \PhpAmqpLib\Exception\AMQPTimeoutException if the specified operation timeout was exceeded
     */
    public function confirm_select($nowait = false)
    {
        list($class_id, $method_id, $args) = $this->protocolWriter->confirmSelect($nowait);

        $this->send_method_frame(array($class_id, $method_id), $args);

        if ($nowait) {
            return null;
        }

        $this->wait(array(
            $this->waitHelper->get_wait('confirm.select_ok')
        ), false, $this->channel_rpc_timeout);
        $this->next_delivery_tag = 1;
    }

    /**
     * Confirms a selection
     */
    public function confirm_select_ok()
    {
    }

    /**
     * Waits for pending acks and nacks from the server.
     * If there are no pending acks, the method returns immediately
     *
     * @param int|float $timeout Waits until $timeout value is reached
     * @throws \PhpAmqpLib\Exception\AMQPTimeoutException
     * @throws \PhpAmqpLib\Exception\AMQPRuntimeException
     */
    public function wait_for_pending_acks($timeout = 0)
    {
        $functions = array(
            $this->waitHelper->get_wait('basic.ack'),
            $this->waitHelper->get_wait('basic.nack'),
        );
        $timeout = max(0, $timeout);
        while (!empty($this->published_messages)) {
            $this->wait($functions, false, $timeout);
        }
    }

    /**
     * Waits for pending acks, nacks and returns from the server.
     * If there are no pending acks, the method returns immediately.
     *
     * @param int|float $timeout If set to value > 0 the method will wait at most $timeout seconds for pending acks.
     * @throws \PhpAmqpLib\Exception\AMQPTimeoutException
     * @throws \PhpAmqpLib\Exception\AMQPRuntimeException
     */
    public function wait_for_pending_acks_returns($timeout = 0)
    {
        $functions = array(
            $this->waitHelper->get_wait('basic.ack'),
            $this->waitHelper->get_wait('basic.nack'),
            $this->waitHelper->get_wait('basic.return'),
        );

        $timeout = max(0, $timeout);
        while (!empty($this->published_messages)) {
            $this->wait($functions, false, $timeout);
        }
    }

    /**
     * Selects standard transaction mode
     *
     * @throws \PhpAmqpLib\Exception\AMQPTimeoutException if the specified operation timeout was exceeded
     * @return mixed
     */
    public function tx_select()
    {
        $this->send_method_frame(array(90, 10));

        return $this->wait(array(
            $this->waitHelper->get_wait('tx.select_ok')
        ), false, $this->channel_rpc_timeout);
    }

    /**
     * Confirms transaction mode
     */
    protected function tx_select_ok()
    {
    }

    /**
     * @param int|null $ticket
     * @return int
     */
    protected function getTicket($ticket)
    {
        return (null === $ticket) ? $this->default_ticket : $ticket;
    }

    /**
     * Helper method to get a particular method from $this->publishedMessages, removes it from the array and returns it.
     *
     * @param int $index
     * @return AMQPMessage
     */
    protected function get_and_unset_message($index)
    {
        $message = $this->published_messages[$index];
        unset($this->published_messages[$index]);

        return $message;
    }

    /**
     * Sets callback for basic_return
     *
     * @param  callable $callback
     * @throws \InvalidArgumentException if $callback is not callable
     */
    public function set_return_listener($callback)
    {
        Assert::isCallable($callback);
        $this->basic_return_callback = $callback;
    }

    /**
     * Sets a handler which called for any message nack'ed by the server, with the AMQPMessage as first argument.
     *
     * @param callable $callback
     * @throws \InvalidArgumentException
     */
    public function set_nack_handler($callback)
    {
        Assert::isCallable($callback);
        $this->nack_handler = $callback;
    }

    /**
     * Sets a handler which called for any message ack'ed by the server, with the AMQPMessage as first argument.
     *
     * @param callable $callback
     * @throws \InvalidArgumentException
     */
    public function set_ack_handler($callback)
    {
        Assert::isCallable($callback);
        $this->ack_handler = $callback;
    }

    /**
     * @throws AMQPChannelClosedException
     * @throws AMQPConnectionBlockedException
     */
    private function checkConnection()
    {
        if ($this->connection === null || !$this->connection->isConnected()) {
            throw new AMQPChannelClosedException('Channel connection is closed.');
        }
        if ($this->connection->isBlocked()) {
            throw new AMQPConnectionBlockedException();
        }
    }

    /**
     * Wait and process all incoming messages in an endless loop,
     * until connection exception or manual stop using self::stopConsume()
     *
     * @param float $maximumPoll Maximum time in seconds between read attempts
     * @throws \PhpAmqpLib\Exception\AMQPOutOfBoundsException
     * @throws \PhpAmqpLib\Exception\AMQPRuntimeException
     * @throws \PhpAmqpLib\Exception\AMQPConnectionClosedException
     * @throws \ErrorException
     * @since 3.2.0
     */
    public function consume(float $maximumPoll = 10.0): void
    {
        $this->checkConnection();

        if ($this->stopConsume) {
            $this->stopConsume = false;
            return;
        }

        $timeout = $this->connection->getReadTimeout();
        $heartBeat = $this->connection->getHeartbeat();
        if ($heartBeat > 2) {
            $timeout = min($timeout, floor($heartBeat / 2));
        }
        $timeout = max(min($timeout, $maximumPoll), 1);
        while ($this->is_consuming() || !empty($this->method_queue)) {
            if ($this->stopConsume) {
                $this->stopConsume = false;
                return;
            }
            try {
                $this->wait(null, false, $timeout);
            } catch (AMQPTimeoutException $exception) {
                // something might be wrong, try to send heartbeat which involves select+write
                $this->connection->checkHeartBeat();
                continue;
            } catch (AMQPNoDataException $exception) {
                continue;
            }
        }
    }

    /**
     * Stop AMQPChannel::consume() loop. Useful for signal handlers and other interrupts.
     * @since 3.2.0
     */
    public function stopConsume()
    {
        $this->stopConsume = true;
    }
}
<?php

namespace PhpAmqpLib\Channel;

use PhpAmqpLib\Connection\AbstractConnection;
use PhpAmqpLib\Exception\AMQPChannelClosedException;
use PhpAmqpLib\Exception\AMQPConnectionClosedException;
use PhpAmqpLib\Exception\AMQPInvalidFrameException;
use PhpAmqpLib\Exception\AMQPNoDataException;
use PhpAmqpLib\Exception\AMQPNotImplementedException;
use PhpAmqpLib\Exception\AMQPOutOfBoundsException;
use PhpAmqpLib\Exception\AMQPOutOfRangeException;
use PhpAmqpLib\Helper\DebugHelper;
use PhpAmqpLib\Helper\Protocol\MethodMap080;
use PhpAmqpLib\Helper\Protocol\MethodMap091;
use PhpAmqpLib\Helper\Protocol\Protocol080;
use PhpAmqpLib\Helper\Protocol\Protocol091;
use PhpAmqpLib\Helper\Protocol\Wait080;
use PhpAmqpLib\Helper\Protocol\Wait091;
use PhpAmqpLib\Message\AMQPMessage;
use PhpAmqpLib\Wire;
use PhpAmqpLib\Wire\AMQPReader;

abstract class AbstractChannel
{
    /**
     * @deprecated
     */
    const PROTOCOL_080 = Wire\Constants080::VERSION;

    /**
     * @deprecated
     */
    const PROTOCOL_091 = Wire\Constants091::VERSION;

    /**
     * Lower level queue for frames
     * @var \SplQueue|Frame[]
     */
    protected $frame_queue;

    /**
     * Higher level queue for methods
     * @var array
     */
    protected $method_queue = array();

    /** @var bool */
    protected $auto_decode = false;

    /** @var Wire\Constants */
    protected $constants;

    /** @var \PhpAmqpLib\Helper\DebugHelper */
    protected $debug;

    /** @var null|AbstractConnection */
    protected $connection;

    /**
     * @var string
     * @deprecated
     */
    protected $protocolVersion;

    /** @var int */
    protected $maxBodySize;

    /** @var Protocol080|Protocol091 */
    protected $protocolWriter;

    /** @var Wait080|Wait091 */
    protected $waitHelper;

    /** @var MethodMap080|MethodMap091 */
    protected $methodMap;

    /** @var int|null */
    protected $channel_id;

    /** @var Wire\AMQPBufferReader */
    protected $msg_property_reader;

    /** @var Wire\AMQPBufferReader */
    protected $dispatch_reader;

    /**
     * @param AbstractConnection $connection
     * @param int $channel_id
     * @throws \PhpAmqpLib\Exception\AMQPRuntimeException
     */
    public function __construct(AbstractConnection $connection, $channel_id)
    {
        $this->connection = $connection;
        $this->channel_id = (int)$channel_id;
        $connection->channels[$channel_id] = $this;

        $this->msg_property_reader = new Wire\AMQPBufferReader('');
        $this->dispatch_reader = new Wire\AMQPBufferReader('');

        $this->protocolVersion = self::getProtocolVersion();
        switch ($this->protocolVersion) {
            case Wire\Constants091::VERSION:
                $constantClass = Wire\Constants091::class;
                $this->protocolWriter = new Protocol091();
                $this->waitHelper = new Wait091();
                $this->methodMap = new MethodMap091();
                break;
            case Wire\Constants080::VERSION:
                $constantClass = Wire\Constants080::class;
                $this->protocolWriter = new Protocol080();
                $this->waitHelper = new Wait080();
                $this->methodMap = new MethodMap080();
                break;
            default:
                throw new AMQPNotImplementedException(sprintf(
                    'Protocol: %s not implemented.',
                    $this->protocolVersion
                ));
        }
        $this->constants = new $constantClass();
        $this->debug = new DebugHelper($this->constants);
        $this->frame_queue = new \SplQueue();
    }

    /**
     * @return string
     * @throws AMQPOutOfRangeException
     * @deprecated
     */
    public static function getProtocolVersion()
    {
        $protocol = defined('AMQP_PROTOCOL') ? AMQP_PROTOCOL : Wire\Constants091::VERSION;
        //adding check here to catch unknown protocol ASAP, as this method may be called from the outside
        if (!in_array($protocol, array(Wire\Constants080::VERSION, Wire\Constants091::VERSION), true)) {
            throw new AMQPOutOfRangeException(sprintf('Protocol version %s not implemented.', $protocol));
        }

        return $protocol;
    }

    /**
     * @return int|null
     */
    public function getChannelId()
    {
        return $this->channel_id;
    }

    /**
     * @param int $max_bytes Max message body size for this channel
     * @return $this
     */
    public function setBodySizeLimit($max_bytes)
    {
        $max_bytes = (int) $max_bytes;

        if ($max_bytes > 0) {
            $this->maxBodySize = $max_bytes;
        }

        return $this;
    }

    /**
     * @return AbstractConnection|null
     */
    public function getConnection()
    {
        return $this->connection;
    }

    /**
     * @return array
     */
    public function getMethodQueue()
    {
        return $this->method_queue;
    }

    /**
     * @return bool
     */
    public function hasPendingMethods()
    {
        return !empty($this->method_queue);
    }

    /**
     * @param string $method_sig
     * @param string $args
     * @param AMQPMessage|null $amqpMessage
     * @return mixed
     * @throws \PhpAmqpLib\Exception\AMQPRuntimeException
     */
    public function dispatch($method_sig, $args, $amqpMessage)
    {
        if (!$this->methodMap->valid_method($method_sig)) {
            throw new AMQPNotImplementedException(sprintf(
                'Unknown AMQP method "%s"',
                $method_sig
            ));
        }

        $amqp_method = $this->methodMap->get_method($method_sig);

        if (!method_exists($this, $amqp_method)) {
            throw new AMQPNotImplementedException(sprintf(
                'Method: "%s" not implemented by class: %s',
                $amqp_method,
                get_class($this)
            ));
        }

        $this->dispatch_reader->reset($args);

        if ($amqpMessage === null) {
            return call_user_func(array($this, $amqp_method), $this->dispatch_reader);
        }

        return call_user_func(array($this, $amqp_method), $this->dispatch_reader, $amqpMessage);
    }

    /**
     * @param int|float|null $timeout
     * @return Frame
     */
    protected function next_frame($timeout = 0): Frame
    {
        $this->debug->debug_msg('waiting for a new frame');

        if (!$this->frame_queue->isEmpty()) {
            return $this->frame_queue->dequeue();
        }

        return $this->connection->wait_channel($this->channel_id, $timeout);
    }

    /**
     * @param array $method_sig
     * @param \PhpAmqpLib\Wire\AMQPWriter|string $args
     */
    protected function send_method_frame($method_sig, $args = '')
    {
        if ($this->connection === null) {
            throw new AMQPChannelClosedException('Channel connection is closed.');
        }

        $this->connection->send_channel_method_frame($this->channel_id, $method_sig, $args);
    }

    /**
     * This is here for performance reasons to batch calls to fwrite from basic.publish
     *
     * @param array $method_sig
     * @param \PhpAmqpLib\Wire\AMQPWriter|string $args
     * @param \PhpAmqpLib\Wire\AMQPWriter $pkt
     * @return \PhpAmqpLib\Wire\AMQPWriter
     */
    protected function prepare_method_frame($method_sig, $args = '', $pkt = null)
    {
        return $this->connection->prepare_channel_method_frame($this->channel_id, $method_sig, $args, $pkt);
    }

    /**
     * @return AMQPMessage
     * @throws \PhpAmqpLib\Exception\AMQPRuntimeException
     * @throws AMQPInvalidFrameException
     */
    public function wait_content(): AMQPMessage
    {
        $frame = $this->next_frame();
        $this->validate_frame($frame, Frame::TYPE_HEADER);
        $payload = $frame->getPayload();
        // skip class-id and weight(4 bytes) and start from size, everything else is properties
        // @link https://www.rabbitmq.com/resources/specs/amqp0-9-1.pdf 4.2.6.1 The Content Header
        $this->msg_property_reader->reset(mb_substr($payload, 4, null, 'ASCII'));
        $size = $this->msg_property_reader->read_longlong();

        return $this->createMessage(
            $this->msg_property_reader,
            $size
        );
    }

    protected function createMessage(AMQPReader $propertyReader, int $bodySize): AMQPMessage
    {
        $body = '';
        $bodyReceivedBytes = 0;
        $message = new AMQPMessage();
        $message
            ->load_properties($propertyReader)
            ->setBodySize($bodySize);

        while ($bodySize > $bodyReceivedBytes) {
            $frame = $this->next_frame();
            // @link https://www.rabbitmq.com/resources/specs/amqp0-9-1.pdf 4.2.6.2 The Content Body
            $this->validate_frame($frame, Frame::TYPE_BODY);
            $bodyReceivedBytes += $frame->getSize();

            if (is_int($this->maxBodySize) && $bodyReceivedBytes > $this->maxBodySize) {
                $message->setIsTruncated(true);
                continue;
            }

            $body .= $frame->getPayload();
        }

        $message->setBody($body);

        return $message;
    }

    /**
     * Wait for some expected AMQP methods and dispatch to them.
     * Unexpected methods are queued up for later calls to this PHP
     * method.
     *
     * @param array|null $allowed_methods
     * @param bool $non_blocking
     * @param int|float|null $timeout
     * @return mixed
     * @throws \PhpAmqpLib\Exception\AMQPRuntimeException
     * @throws \PhpAmqpLib\Exception\AMQPTimeoutException
     * @throws \PhpAmqpLib\Exception\AMQPConnectionClosedException
     * @throws AMQPOutOfBoundsException
     */
    public function wait($allowed_methods = null, $non_blocking = false, $timeout = 0)
    {
        $this->debug->debug_allowed_methods($allowed_methods);

        $deferred = $this->process_deferred_methods($allowed_methods);
        if ($deferred['dispatch'] === true) {
            return $this->dispatch_deferred_method($deferred['queued_method']);
        }

        // timeouts must be deactivated for non-blocking actions
        if (true === $non_blocking) {
            $timeout = null;
        }

        // No deferred methods?  wait for new ones
        while (true) {
            try {
                $frame = $this->next_frame($timeout);
            } catch (AMQPNoDataException $e) {
                // no data ready for non-blocking actions - stop and exit
                break;
            } catch (AMQPConnectionClosedException $exception) {
                if ($this instanceof AMQPChannel) {
                    $this->do_close();
                }
                throw $exception;
            }

            $this->validate_method_frame($frame);
            $this->validate_frame_payload($frame);
            $payload = $frame->getPayload();
            $method = $this->parseMethod($payload);
            $method_sig = $method->getSignature();

            $this->debug->debug_method_signature('> %s', $method_sig);

            $amqpMessage = $this->maybe_wait_for_content($method_sig);

            if ($this->should_dispatch_method($allowed_methods, $method_sig)) {
                return $this->dispatch($method_sig, $method->getArguments(), $amqpMessage);
            }

            // Wasn't what we were looking for? save it for later
            $this->debug->debug_method_signature('Queueing for later: %s', $method_sig);
            $this->method_queue[] = array($method_sig, $method->getArguments(), $amqpMessage);

            if ($non_blocking) {
                break;
            }
        }
    }

    /**
     * @param array|null $allowed_methods
     * @return array
     */
    protected function process_deferred_methods($allowed_methods)
    {
        $dispatch = false;
        $queued_method = array();

        foreach ($this->method_queue as $qk => $qm) {
            $this->debug->debug_msg('checking queue method ' . $qk);

            $method_sig = $qm[0];

            if ($allowed_methods === null || in_array($method_sig, $allowed_methods, true)) {
                unset($this->method_queue[$qk]);
                $dispatch = true;
                $queued_method = $qm;
                break;
            }
        }

        return array('dispatch' => $dispatch, 'queued_method' => $queued_method);
    }

    /**
     * @param array $queued_method
     * @return mixed
     */
    protected function dispatch_deferred_method($queued_method)
    {
        $this->debug->debug_method_signature('Executing queued method: %s', $queued_method[0]);

        return $this->dispatch($queued_method[0], $queued_method[1], $queued_method[2]);
    }

    /**
     * @param Frame $frame
     * @throws \PhpAmqpLib\Exception\AMQPInvalidFrameException
     */
    protected function validate_method_frame(Frame $frame): void
    {
        $this->validate_frame($frame, Frame::TYPE_METHOD);
    }

    /**
     * @param Frame $frame
     * @param int $expectedType
     * @throws AMQPInvalidFrameException
     */
    protected function validate_frame(Frame $frame, int $expectedType): void
    {
        if ($frame->getType() !== $expectedType) {
            throw new AMQPInvalidFrameException(sprintf(
                'Expecting %u, received frame type %s (%s)',
                $expectedType,
                $frame->getType(),
                $this->constants->getFrameType($frame->getType())
            ));
        }
    }

    /**
     * @param Frame $frame
     * @throws AMQPOutOfBoundsException
     * @throws AMQPInvalidFrameException
     */
    protected function validate_frame_payload(Frame $frame): void
    {
        $payload = $frame->getPayload();
        $payloadSize = mb_strlen($payload, 'ASCII');
        if ($payloadSize < 4) {
            throw new AMQPOutOfBoundsException('Method frame too short');
        }
        if ($payloadSize !== $frame->getSize()) {
            throw new AMQPInvalidFrameException('Frame size does not match payload');
        }
    }

    protected function parseMethod(string $payload): Method
    {
        $result = unpack('n2method/a*args', $payload);

        return new Method($result['method1'], $result['method2'], $result['args']);
    }

    /**
     * @param array|null $allowed_methods
     * @param string $method_sig
     * @return bool
     */
    protected function should_dispatch_method($allowed_methods, $method_sig)
    {
        return $allowed_methods === null
            || in_array($method_sig, $allowed_methods, true)
            || $this->constants->isCloseMethod($method_sig);
    }

    /**
     * @param string $method_sig
     * @return AMQPMessage|null
     */
    protected function maybe_wait_for_content($method_sig)
    {
        $amqpMessage = null;
        if ($this->constants->isContentMethod($method_sig)) {
            $amqpMessage = $this->wait_content();
        }

        return $amqpMessage;
    }

    /**
     * @param callable $handler
     * @param array $arguments
     */
    protected function dispatch_to_handler($handler, array $arguments = [])
    {
        if (is_callable($handler)) {
            call_user_func_array($handler, $arguments);
        }
    }
}
<?php

namespace PhpAmqpLib\Channel;
use PhpAmqpLib\Wire\AMQPReader;

/**
 * @link https://livebook.manning.com/book/rabbitmq-in-depth/chapter-2/v-13/22
 * @link https://www.rabbitmq.com/resources/specs/amqp0-9-1.pdf 4.2.6 Content Framing
 */
final class Frame
{
    public const FRAME_HEADER_SIZE = AMQPReader::OCTET + AMQPReader::SHORT + AMQPReader::LONG;
    public const END = 0xCE;

    public const TYPE_METHOD = 1;
    public const TYPE_HEADER = 2;
    public const TYPE_BODY = 3;
    public const TYPE_HEARTBEAT = 8;

    /** @var int */
    private $type;

    /** @var int */
    private $channel;

    /** @var int */
    private $size;

    /** @var string|null */
    private $payload;

    public function __construct(int $type, int $channel, int $size, ?string $payload = null)
    {
        $this->type = $type;
        $this->channel = $channel;
        $this->size = $size;
        $this->payload = $payload;
    }

    /**
     * @return int
     */
    public function getType(): int
    {
        return $this->type;
    }

    /**
     * @return int
     */
    public function getChannel(): int
    {
        return $this->channel;
    }

    /**
     * @return int
     */
    public function getSize(): int
    {
        return $this->size;
    }

    public function getPayload(): ?string
    {
        return $this->payload;
    }

    public function isMethod(): bool
    {
        return $this->type === self::TYPE_METHOD;
    }

    public function isHeartbeat(): bool
    {
        return $this->type === self::TYPE_HEARTBEAT;
    }
}
<?php

namespace PhpAmqpLib\Channel;

final class Method
{
    /** @var int */
    private $class;

    /** @var int */
    private $method;

    /** @var string */
    private $arguments;

    public function __construct(int $class, int $method, string $arguments)
    {
        $this->class = $class;
        $this->method = $method;
        $this->arguments = $arguments;
    }

    public function getClass(): int
    {
        return $this->class;
    }

    public function getMethod(): int
    {
        return $this->method;
    }

    public function getArguments(): string
    {
        return $this->arguments;
    }

    public function getSignature(): string
    {
        return $this->class . ',' . $this->method;
    }
}
<?php

namespace PhpAmqpLib\Connection;

use InvalidArgumentException;
use PhpAmqpLib\Wire;

/**
 * @since 3.2.0
 */
final class AMQPConnectionConfig
{
    public const AUTH_PLAIN = 'PLAIN';
    public const AUTH_AMQPPLAIN = 'AMQPLAIN';
    public const AUTH_EXTERNAL = 'EXTERNAL';
    public const IO_TYPE_STREAM = 'stream';
    public const IO_TYPE_SOCKET = 'socket';

    /** @var string */
    private $ioType = self::IO_TYPE_STREAM;

    /** @var bool */
    private $isLazy = false;

    /** @var string */
    private $host = '127.0.0.1';

    /** @var int */
    private $port = 5672;

    /** @var string */
    private $user = 'guest';

    /** @var string */
    private $password = 'guest';

    /** @var string */
    private $vhost = '/';

    /** @var bool */
    private $insist = false;

    /** @var string */
    private $loginMethod = self::AUTH_AMQPPLAIN;

    /** @var string|null */
    private $loginResponse;

    /** @var string */
    private $locale = 'en_US';

    /** @var float */
    private $connectionTimeout = 3.0;

    /** @var float */
    private $readTimeout = 3.0;

    /** @var float */
    private $writeTimeout = 3.0;

    /** @var float */
    private $channelRPCTimeout = 0.0;

    /** @var int */
    private $heartbeat = 0;

    /** @var bool */
    private $keepalive = false;

    /** @var bool */
    private $isSecure = false;

    /**
     * @deprecated Use sslCryptoMethod
     * @var string
     */
    private $networkProtocol = 'tcp';

    /** @var resource|null */
    private $streamContext;

    /** @var int */
    private $sendBufferSize = 0;

    /** @var bool */
    private $dispatchSignals = true;

    /**
     * @var string
     * @deprecated
     */
    private $amqpProtocol = Wire\Constants091::VERSION;

    /**
     * Whether to use strict AMQP0.9.1 field types. RabbitMQ does not support that.
     * @var bool
     */
    private $protocolStrictFields = false;

    /** @var string|null */
    private $sslCaCert;

    /**
     * @var string|null
     */
    private $sslCaPath;

    /** @var string|null */
    private $sslCert;

    /** @var string|null */
    private $sslKey;

    /** @var bool|null */
    private $sslVerify;

    /** @var bool|null */
    private $sslVerifyName;

    /** @var string|null */
    private $sslPassPhrase;

    /** @var string|null */
    private $sslCiphers;

    /** @var int|null */
    private $sslSecurityLevel;

    /** @var int|null */
    private $sslCryptoMethod;

    /** @var string */
    private $connectionName = '';

    /**
     * Output all networks packets for debug purposes.
     * @var bool
     */
    private $debugPackets = false;

    public function getIoType(): string
    {
        return $this->ioType;
    }

    /**
     * Set which IO type will be used, stream or socket.
     * @param string $ioType
     */
    public function setIoType(string $ioType): void
    {
        if ($ioType !== self::IO_TYPE_STREAM && $ioType !== self::IO_TYPE_SOCKET) {
            throw new InvalidArgumentException('IO type can be either "stream" or "socket"');
        }
        $this->ioType = $ioType;
    }

    public function isLazy(): bool
    {
        return $this->isLazy;
    }

    public function setIsLazy(bool $isLazy): void
    {
        $this->isLazy = $isLazy;
    }

    public function getHost(): string
    {
        return $this->host;
    }

    public function setHost(string $host): void
    {
        $this->host = $host;
    }

    public function getPort(): int
    {
        return $this->port;
    }

    public function setPort(int $port): void
    {
        if ($port <= 0) {
            throw new InvalidArgumentException('Port number must be greater than 0');
        }
        $this->port = $port;
    }

    public function getUser(): string
    {
        return $this->user;
    }

    public function setUser(string $user): void
    {
        $this->user = $user;
    }

    public function getPassword(): string
    {
        return $this->password;
    }

    public function setPassword(string $password): void
    {
        $this->password = $password;
    }

    public function getVhost(): string
    {
        return $this->vhost;
    }

    public function setVhost(string $vhost): void
    {
        self::assertStringNotEmpty($vhost, 'vhost');
        $this->vhost = $vhost;
    }

    public function isInsist(): bool
    {
        return $this->insist;
    }

    public function setInsist(bool $insist): void
    {
        $this->insist = $insist;
    }

    public function getLoginMethod(): string
    {
        return $this->loginMethod;
    }

    public function setLoginMethod(string $loginMethod): void
    {
        if (
            $loginMethod !== self::AUTH_PLAIN
            && $loginMethod !== self::AUTH_AMQPPLAIN
            && $loginMethod !== self::AUTH_EXTERNAL
        ) {
            throw new InvalidArgumentException('Unknown login method: ' . $loginMethod);
        }
        if ($loginMethod === self::AUTH_EXTERNAL && (!empty($this->user) || !empty($this->password))) {
            throw new InvalidArgumentException('External auth method cannot be used together with user credentials.');
        }
        $this->loginMethod = $loginMethod;
    }

    public function getLoginResponse(): ?string
    {
        return $this->loginResponse;
    }

    public function setLoginResponse(string $loginResponse): void
    {
        $this->loginResponse = $loginResponse;
    }

    public function getLocale(): string
    {
        return $this->locale;
    }

    public function setLocale(string $locale): void
    {
        self::assertStringNotEmpty($locale, 'locale');
        $this->locale = $locale;
    }

    public function getConnectionTimeout(): float
    {
        return $this->connectionTimeout;
    }

    public function setConnectionTimeout(float $connectionTimeout): void
    {
        $this->connectionTimeout = $connectionTimeout;
    }

    public function getReadTimeout(): float
    {
        return $this->readTimeout;
    }

    public function setReadTimeout(float $readTimeout): void
    {
        self::assertGreaterOrEq($readTimeout, 0, 'read timeout');
        $this->readTimeout = $readTimeout;
    }

    public function getWriteTimeout(): float
    {
        return $this->writeTimeout;
    }

    public function setWriteTimeout(float $writeTimeout): void
    {
        self::assertGreaterOrEq($writeTimeout, 0, 'write timeout');
        $this->writeTimeout = $writeTimeout;
    }

    public function getChannelRPCTimeout(): float
    {
        return $this->channelRPCTimeout;
    }

    public function setChannelRPCTimeout(float $channelRPCTimeout): void
    {
        self::assertGreaterOrEq($channelRPCTimeout, 0, 'channel RPC timeout');
        $this->channelRPCTimeout = $channelRPCTimeout;
    }

    public function getHeartbeat(): int
    {
        return $this->heartbeat;
    }

    public function setHeartbeat(int $heartbeat): void
    {
        self::assertGreaterOrEq($heartbeat, 0, 'heartbeat');
        $this->heartbeat = $heartbeat;
    }

    public function isKeepalive(): bool
    {
        return $this->keepalive;
    }

    public function setKeepalive(bool $keepalive): void
    {
        $this->keepalive = $keepalive;
    }

    public function isSecure(): bool
    {
        return $this->isSecure;
    }

    public function setIsSecure(bool $isSecure): void
    {
        $this->isSecure = $isSecure;

        if ($this->isSecure) {
            $this->networkProtocol = 'tls';
            $this->sslCryptoMethod = STREAM_CRYPTO_METHOD_ANY_CLIENT;
        } else {
            $this->networkProtocol = 'tcp';
            $this->sslCryptoMethod = null;
        }
    }

    /**
     * @deprecated Use getSslCryptoMethod()
     */
    public function getNetworkProtocol(): string
    {
        return $this->networkProtocol;
    }

    /**
     * @deprecated Use setIsSecure() and setSslCryptoMethod()
     */
    public function setNetworkProtocol(string $networkProtocol): void
    {
        self::assertStringNotEmpty($networkProtocol, 'network protocol');
        $this->networkProtocol = $networkProtocol;
    }

    /**
     * @return resource|null
     */
    public function getStreamContext()
    {
        return $this->streamContext;
    }

    /**
     * @param resource|null $streamContext
     */
    public function setStreamContext($streamContext): void
    {
        if ($streamContext === null) {
            $this->streamContext = null;
            return;
        }

        if (!is_resource($streamContext) || get_resource_type($streamContext) !== 'stream-context') {
            throw new InvalidArgumentException('Resource must be valid stream context');
        }
        $this->streamContext = $streamContext;
    }

    /**
     * @return int
     * @since 3.2.1
     */
    public function getSendBufferSize(): int
    {
        return $this->sendBufferSize;
    }

    /**
     * Socket send buffer size. Set 0 to keep system default.
     * @param int $sendBufferSize
     * @return void
     * @since 3.2.1
     */
    public function setSendBufferSize(int $sendBufferSize): void
    {
        self::assertGreaterOrEq($sendBufferSize, 0, 'sendBufferSize');
        $this->sendBufferSize = $sendBufferSize;
    }

    public function isSignalsDispatchEnabled(): bool
    {
        return $this->dispatchSignals;
    }

    public function enableSignalDispatch(bool $dispatchSignals): void
    {
        $this->dispatchSignals = $dispatchSignals;
    }

    /**
     * @return string
     * @deprecated
     */
    public function getAMQPProtocol(): string
    {
        return $this->amqpProtocol;
    }

    /**
     * @param string $protocol
     * @deprecated
     */
    public function setAMQPProtocol(string $protocol): void
    {
        if ($protocol !== Wire\Constants091::VERSION && $protocol !== Wire\Constants080::VERSION) {
            throw new InvalidArgumentException('AMQP protocol can be either "0.9.1" or "8.0"');
        }
        $this->amqpProtocol = $protocol;
    }

    public function isProtocolStrictFieldsEnabled(): bool
    {
        return $this->protocolStrictFields;
    }

    public function setProtocolStrictFields(bool $protocolStrictFields): void
    {
        $this->protocolStrictFields = $protocolStrictFields;
    }

    public function getSslCaCert(): ?string
    {
        return $this->sslCaCert;
    }

    public function setSslCaCert(?string $sslCaCert): void
    {
        $this->sslCaCert = $sslCaCert;
    }

    public function getSslCaPath(): ?string
    {
        return $this->sslCaPath;
    }

    public function setSslCaPath(?string $sslCaPath): void
    {
        $this->sslCaPath = $sslCaPath;
    }

    public function getSslCert(): ?string
    {
        return $this->sslCert;
    }

    public function setSslCert(?string $sslCert): void
    {
        $this->sslCert = $sslCert;
    }

    public function getSslKey(): ?string
    {
        return $this->sslKey;
    }

    public function setSslKey(?string $sslKey): void
    {
        $this->sslKey = $sslKey;
    }

    public function getSslVerify(): ?bool
    {
        return $this->sslVerify;
    }

    public function setSslVerify(?bool $sslVerify): void
    {
        $this->sslVerify = $sslVerify;

        if (!$this->sslVerify) {
            $this->setSslVerifyName(false);
        }
    }

    public function getSslVerifyName(): ?bool
    {
        return $this->sslVerifyName;
    }

    public function setSslVerifyName(?bool $sslVerifyName): void
    {
        $this->sslVerifyName = $sslVerifyName;
    }

    public function getSslPassPhrase(): ?string
    {
        return $this->sslPassPhrase;
    }

    public function setSslPassPhrase(?string $sslPassPhrase): void
    {
        $this->sslPassPhrase = $sslPassPhrase;
    }

    public function getSslCiphers(): ?string
    {
        return $this->sslCiphers;
    }

    public function setSslCiphers(?string $sslCiphers): void
    {
        $this->sslCiphers = $sslCiphers;
    }

    public function getSslSecurityLevel(): ?int
    {
        return $this->sslSecurityLevel;
    }

    public function setSslSecurityLevel(?int $sslSecurityLevel): void
    {
        $this->sslSecurityLevel = $sslSecurityLevel;
    }

    public function getSslCryptoMethod(): ?int
    {
        return $this->sslCryptoMethod;
    }

    public function setSslCryptoMethod(?int $sslCryptoMethod): void
    {
        $this->sslCryptoMethod = $sslCryptoMethod;
    }

    public function isDebugPackets(): bool
    {
        return $this->debugPackets;
    }

    public function setDebugPackets(bool $debugPackets): void
    {
        $this->debugPackets = $debugPackets;
    }

    private static function assertStringNotEmpty($value, string $param): void
    {
        $value = trim($value);
        if (empty($value)) {
            throw new InvalidArgumentException(sprintf('Parameter "%s" must be non empty string', $param));
        }
    }

    /**
     * @param int|float $value
     * @param int $limit
     * @param string $param
     */
    private static function assertGreaterOrEq($value, int $limit, string $param): void
    {
        if ($value < $limit) {
            throw new InvalidArgumentException(sprintf('Parameter "%s" must be greater than zero', $param));
        }
    }

    /**
     * @return string
     */
    public function getConnectionName(): string
    {
        return $this->connectionName;
    }

    /**
     * @param string $connectionName
     */
    public function setConnectionName(string $connectionName): void
    {
        $this->connectionName = $connectionName;
    }
}
<?php

namespace PhpAmqpLib\Connection;

use LogicException;

/**
 * @since 3.2.0
 */
class AMQPConnectionFactory
{
    public static function create(AMQPConnectionConfig $config): AbstractConnection
    {
        if ($config->getIoType() === AMQPConnectionConfig::IO_TYPE_STREAM) {
            $connection = new AMQPStreamConnection(
                $config->getHost(),
                $config->getPort(),
                $config->getUser(),
                $config->getPassword(),
                $config->getVhost(),
                $config->isInsist(),
                $config->getLoginMethod(),
                $config->getLoginResponse(),
                $config->getLocale(),
                $config->getConnectionTimeout(),
                self::getReadWriteTimeout($config),
                self::getStreamContext($config),
                $config->isKeepalive(),
                $config->getHeartbeat(),
                $config->getChannelRPCTimeout(),
                $config
            );
        } else {
            if ($config->isSecure()) {
                throw new LogicException('The socket connection implementation does not support secure connections.');
            }

            $connection = new AMQPSocketConnection(
                $config->getHost(),
                $config->getPort(),
                $config->getUser(),
                $config->getPassword(),
                $config->getVhost(),
                $config->isInsist(),
                $config->getLoginMethod(),
                $config->getLoginResponse(),
                $config->getLocale(),
                $config->getReadTimeout(),
                $config->isKeepalive(),
                $config->getWriteTimeout(),
                $config->getHeartbeat(),
                $config->getChannelRPCTimeout(),
                $config
            );
        }

        return $connection;
    }

    private static function getReadWriteTimeout(AMQPConnectionConfig $config): float
    {
        return min($config->getReadTimeout(), $config->getWriteTimeout());
    }

    /**
     * @param AMQPConnectionConfig $config
     * @return string[]
     */
    private static function getSslOptions(AMQPConnectionConfig $config): array
    {
        return array_filter([
            'cafile' => $config->getSslCaCert(),
            'capath' => $config->getSslCaPath(),
            'local_cert' => $config->getSslCert(),
            'local_pk' => $config->getSslKey(),
            'verify_peer' => $config->getSslVerify(),
            'verify_peer_name' => $config->getSslVerifyName(),
            'passphrase' => $config->getSslPassPhrase(),
            'ciphers' => $config->getSslCiphers(),
            'security_level' => $config->getSslSecurityLevel(),
            'crypto_method' => $config->getSslCryptoMethod(),
        ], static function ($value) {
            return null !== $value;
        });
    }

    /**
     * @param AMQPConnectionConfig $config
     * @return resource|null
     */
    private static function getStreamContext(AMQPConnectionConfig $config)
    {
        $context = $config->getStreamContext();

        if ($config->isSecure()) {
            if (!$context) {
                $context = stream_context_create();
            }
            $options = self::getSslOptions($config);
            foreach ($options as $k => $v) {
                // Note: 'ssl' applies to 'tls' as well
                // https://www.php.net/manual/en/context.ssl.php
                stream_context_set_option($context, 'ssl', $k, $v);
            }
        }

        return $context;
    }
}
<?php

namespace PhpAmqpLib\Connection;

/**
 * @deprecated AMQPStreamConnection can be lazy too. Use AMQPConnectionFactory with AMQPConnectionConfig::setIsLazy(true)
 */
class AMQPLazyConnection extends AMQPStreamConnection
{
    /**
     * @inheritDoc
     */
    public function connectOnConstruct(): bool
    {
        return false;
    }

    /**
     * @param string[][] $hosts
     * @param string[] $options
     * @return self
     * @throws \Exception
     * @deprecated Use ConnectionFactory
     */
    public static function create_connection($hosts, $options = array())
    {
        if (count($hosts) > 1) {
            throw new \RuntimeException('Lazy connection does not support multiple hosts');
        }

        return parent::create_connection($hosts, $options);
    }
}
<?php

namespace PhpAmqpLib\Connection;

/**
 * @deprecated AMQPLazySSLConnection can be lazy too. Use AMQPConnectionFactory with AMQPConnectionConfig::setIsLazy(true)
 */
class AMQPLazySSLConnection extends AMQPSSLConnection
{
    /**
     * @inheritDoc
     */
    public function connectOnConstruct(): bool
    {
        return false;
    }

    /**
     * @param string[][] $hosts
     * @param string[] $options
     * @return self
     * @throws \Exception
     * @deprecated Use ConnectionFactory
     */
    public static function create_connection($hosts, $options = array())
    {
        if (count($hosts) > 1) {
            throw new \RuntimeException('Lazy connection does not support multiple hosts');
        }

        return parent::create_connection($hosts, $options);
    }
}
<?php

namespace PhpAmqpLib\Connection;

/**
 * @deprecated AMQPSocketConnection can be lazy too. Use AMQPConnectionFactory with AMQPConnectionConfig::setIsLazy(true)
 */
class AMQPLazySocketConnection extends AMQPSocketConnection
{
    /**
     * @inheritDoc
     */
    public function connectOnConstruct(): bool
    {
        return false;
    }

    /**
     * @param string[][] $hosts
     * @param string[] $options
     * @return self
     * @throws \Exception
     * @deprecated Use ConnectionFactory
     */
    public static function create_connection($hosts, $options = array())
    {
        if (count($hosts) > 1) {
            throw new \RuntimeException('Lazy connection does not support multiple hosts');
        }

        return parent::create_connection($hosts, $options);
    }
}
<?php

namespace PhpAmqpLib\Connection;

/**
 * @deprecated Use AMQPConnectionFactory with AMQPConnectionConfig::setIsSecure(true) and AMQPConnectionConfig::setSsl* methods.
 */
class AMQPSSLConnection extends AMQPStreamConnection
{
    /**
     * @param string $host
     * @param int $port
     * @param string $user
     * @param string $password
     * @param string $vhost
     * @param array $ssl_options
     * @param array $options
     * @param AMQPConnectionConfig|null $config
     * @throws \Exception
     */
    public function __construct(
        $host,
        $port,
        $user,
        $password,
        $vhost = '/',
        $ssl_options = array(),
        $options = array(),
        ?AMQPConnectionConfig $config = null
    ) {
        trigger_error('AMQPSSLConnection is deprecated and will be removed in version 4 of php-amqplib', E_USER_DEPRECATED);
        $ssl_context = null;
        if (!empty($ssl_options)) {
            $ssl_context = $this->createSslContext($ssl_options);
        }

        parent::__construct(
            $host,
            $port,
            $user,
            $password,
            $vhost,
            isset($options['insist']) ? $options['insist'] : false,
            isset($options['login_method']) ? $options['login_method'] : 'AMQPLAIN',
            isset($options['login_response']) ? $options['login_response'] : null,
            isset($options['locale']) ? $options['locale'] : 'en_US',
            isset($options['connection_timeout']) ? $options['connection_timeout'] : 3,
            isset($options['read_write_timeout']) ? $options['read_write_timeout'] : 130,
            $ssl_context,
            isset($options['keepalive']) ? $options['keepalive'] : false,
            isset($options['heartbeat']) ? $options['heartbeat'] : 0,
            isset($options['channel_rpc_timeout']) ? $options['channel_rpc_timeout'] : 0.0,
            $config
        );
    }

    /**
     * @deprecated Use AmqpConnectionFactory
     * @throws \Exception
     */
    public static function try_create_connection($host, $port, $user, $password, $vhost, $options)
    {
        $ssl_options = isset($options['ssl_options']) ? $options['ssl_options'] : [];
        return new static($host, $port, $user, $password, $vhost, $ssl_options, $options);
    }

    /**
     * @param array $options
     * @return resource
     */
    private function createSslContext($options)
    {
        $ssl_context = stream_context_create();
        foreach ($options as $k => $v) {
            // Note: 'ssl' applies to 'tls' as well
            // https://www.php.net/manual/en/context.ssl.php
            stream_context_set_option($ssl_context, 'ssl', $k, $v);
        }

        return $ssl_context;
    }
}
<?php

namespace PhpAmqpLib\Connection;

use PhpAmqpLib\Wire\IO\SocketIO;

class AMQPSocketConnection extends AbstractConnection
{
    /**
     * @param string $host
     * @param int $port
     * @param string $user
     * @param string $password
     * @param string $vhost
     * @param bool $insist
     * @param string $login_method
     * @param null $login_response @deprecated
     * @param string $locale
     * @param int|float $read_timeout
     * @param bool $keepalive
     * @param int $write_timeout
     * @param int $heartbeat
     * @param float $channel_rpc_timeout
     * @param AMQPConnectionConfig|null $config
     * @throws \Exception
     */
    public function __construct(
        $host,
        $port,
        $user,
        $password,
        $vhost = '/',
        $insist = false,
        $login_method = 'AMQPLAIN',
        $login_response = null,
        $locale = 'en_US',
        $read_timeout = 3,
        $keepalive = false,
        $write_timeout = 3,
        $heartbeat = 0,
        $channel_rpc_timeout = 0.0,
        ?AMQPConnectionConfig $config = null
    ) {
        if ($channel_rpc_timeout > $read_timeout) {
            throw new \InvalidArgumentException('channel RPC timeout must not be greater than I/O read timeout');
        }

        $io = new SocketIO($host, $port, $read_timeout, $keepalive, $write_timeout, $heartbeat, $config);

        parent::__construct(
            $user,
            $password,
            $vhost,
            $insist,
            $login_method,
            $login_response,
            $locale,
            $io,
            $heartbeat,
            max($read_timeout, $write_timeout),
            $channel_rpc_timeout,
            $config
        );
    }

    /**
     * @deprecated Use AmqpConnectionFactory
     * @throws \Exception
     */
    protected static function try_create_connection($host, $port, $user, $password, $vhost, $options)
    {
        $insist = isset($options['insist']) ?
                        $options['insist'] : false;
        $login_method = isset($options['login_method']) ?
                              $options['login_method'] : 'AMQPLAIN';
        $login_response = isset($options['login_response']) ?
                                $options['login_response'] : null;
        $locale = isset($options['locale']) ?
                        $options['locale'] : 'en_US';
        $read_timeout = isset($options['read_timeout']) ?
                              $options['read_timeout'] : 3;
        $keepalive = isset($options['keepalive']) ?
                           $options['keepalive'] : false;
        $write_timeout = isset($options['write_timeout']) ?
                               $options['write_timeout'] : 3;
        $heartbeat = isset($options['heartbeat']) ?
                           $options['heartbeat'] : 0;
        $channel_rpc_timeout = isset($options['channel_rpc_timeout']) ?
                                    $options['channel_rpc_timeout'] : 0.0;
        return new static(
            $host,
            $port,
            $user,
            $password,
            $vhost,
            $insist,
            $login_method,
            $login_response,
            $locale,
            $read_timeout,
            $keepalive,
            $write_timeout,
            $heartbeat,
            $channel_rpc_timeout
        );
    }
}
<?php

namespace PhpAmqpLib\Connection;

use PhpAmqpLib\Wire\IO\StreamIO;

class AMQPStreamConnection extends AbstractConnection
{
    /**
     * @param string $host
     * @param int $port
     * @param string $user
     * @param string $password
     * @param string $vhost
     * @param bool $insist
     * @param string $login_method
     * @param null $login_response @deprecated
     * @param string $locale
     * @param float $connection_timeout
     * @param float $read_write_timeout
     * @param resource|array|null $context
     * @param bool $keepalive
     * @param int $heartbeat
     * @param float $channel_rpc_timeout
     * @param string|AMQPConnectionConfig|null $ssl_protocol @deprecated
     * @param AMQPConnectionConfig|null $config
     * @throws \Exception
     */
    public function __construct(
        $host,
        $port,
        $user,
        $password,
        $vhost = '/',
        $insist = false,
        $login_method = 'AMQPLAIN',
        $login_response = null,
        $locale = 'en_US',
        $connection_timeout = 3.0,
        $read_write_timeout = 3.0,
        $context = null,
        $keepalive = false,
        $heartbeat = 0,
        $channel_rpc_timeout = 0.0,
        $ssl_protocol = null,
        ?AMQPConnectionConfig $config = null
    ) {
        if ($ssl_protocol !== null && $ssl_protocol instanceof AMQPConnectionConfig === false) {
            trigger_error(
                '$ssl_protocol parameter is deprecated, use stream_context_set_option($context, \'ssl\', \'crypto_method\', $ssl_protocol) instead (see https://www.php.net/manual/en/function.stream-socket-enable-crypto.php for possible values)',
                E_USER_DEPRECATED
            );
        } elseif ($ssl_protocol instanceof AMQPConnectionConfig) {
            $config = $ssl_protocol;
        }

        if ($channel_rpc_timeout > $read_write_timeout) {
            throw new \InvalidArgumentException('channel RPC timeout must not be greater than I/O read-write timeout');
        }

        $io = new StreamIO(
            $host,
            $port,
            $connection_timeout,
            $read_write_timeout,
            $context,
            $keepalive,
            $heartbeat
        );

        parent::__construct(
            $user,
            $password,
            $vhost,
            $insist,
            $login_method,
            $login_response,
            $locale,
            $io,
            $heartbeat,
            $connection_timeout,
            $channel_rpc_timeout,
            $config
        );

        // save the params for the use of __clone, this will overwrite the parent
        $this->construct_params = func_get_args();
    }

    /**
     * @deprecated Use AmqpConnectionFactory
     * @throws \Exception
     */
    protected static function try_create_connection($host, $port, $user, $password, $vhost, $options)
    {
        $insist = isset($options['insist']) ?
                        $options['insist'] : false;
        $login_method = isset($options['login_method']) ?
                              $options['login_method'] : 'AMQPLAIN';
        $login_response = isset($options['login_response']) ?
                                $options['login_response'] : null;
        $locale = isset($options['locale']) ?
                        $options['locale'] : 'en_US';
        $connection_timeout = isset($options['connection_timeout']) ?
                                    $options['connection_timeout'] : 3.0;
        $read_write_timeout = isset($options['read_write_timeout']) ?
                                    $options['read_write_timeout'] : 3.0;
        $context = isset($options['context']) ?
                         $options['context'] : null;
        $keepalive = isset($options['keepalive']) ?
                           $options['keepalive'] : false;
        $heartbeat = isset($options['heartbeat']) ?
                           $options['heartbeat'] : 60;
        $channel_rpc_timeout = isset($options['channel_rpc_timeout']) ?
                                    $options['channel_rpc_timeout'] : 0.0;
        return new static(
            $host,
            $port,
            $user,
            $password,
            $vhost,
            $insist,
            $login_method,
            $login_response,
            $locale,
            $connection_timeout,
            $read_write_timeout,
            $context,
            $keepalive,
            $heartbeat,
            $channel_rpc_timeout
        );
    }
}
<?php

namespace PhpAmqpLib\Connection;

use PhpAmqpLib\Channel\AbstractChannel;
use PhpAmqpLib\Channel\AMQPChannel;
use PhpAmqpLib\Channel\Frame;
use PhpAmqpLib\Exception\AMQPConnectionClosedException;
use PhpAmqpLib\Exception\AMQPHeartbeatMissedException;
use PhpAmqpLib\Exception\AMQPInvalidFrameException;
use PhpAmqpLib\Exception\AMQPIOException;
use PhpAmqpLib\Exception\AMQPNoDataException;
use PhpAmqpLib\Exception\AMQPRuntimeException;
use PhpAmqpLib\Exception\AMQPSocketException;
use PhpAmqpLib\Exception\AMQPTimeoutException;
use PhpAmqpLib\Helper\Assert;
use PhpAmqpLib\Package;
use PhpAmqpLib\Wire;
use PhpAmqpLib\Wire\AMQPReader;
use PhpAmqpLib\Wire\AMQPTable;
use PhpAmqpLib\Wire\AMQPWriter;
use PhpAmqpLib\Wire\IO\AbstractIO;

abstract class AbstractConnection extends AbstractChannel
{
    /**
     * @var array
     * @internal
     */
    public static $LIBRARY_PROPERTIES = array(
        'product' => array('S', Package::NAME),
        'platform' => array('S', 'PHP'),
        'version' => array('S', Package::VERSION),
        'information' => array('S', ''),
        'copyright' => array('S', ''),
        'capabilities' => array(
            'F',
            array(
                'authentication_failure_close' => array('t', true),
                'publisher_confirms' => array('t', true),
                'consumer_cancel_notify' => array('t', true),
                'exchange_exchange_bindings' => array('t', true),
                'basic.nack' => array('t', true),
                'connection.blocked' => array('t', true)
            )
        )
    );

    /**
     * @var AMQPChannel[]|AbstractChannel[]
     * @internal
     */
    public $channels = array();

    /** @var int */
    protected $version_major;

    /** @var int */
    protected $version_minor;

    /** @var array */
    protected $server_properties;

    /** @var array */
    protected $mechanisms;

    /** @var array */
    protected $locales;

    /** @var bool */
    protected $wait_tune_ok;

    /** @var string */
    protected $known_hosts;

    /** @var null|Wire\AMQPIOReader */
    protected $input;

    /** @var string */
    protected $vhost;

    /** @var bool */
    protected $insist;

    /** @var string */
    protected $login_method;

    /**
     * @var null|string
     */
    protected $login_response;

    /** @var string */
    protected $locale;

    /** @var int */
    protected $heartbeat;

    /** @var float */
    protected $last_frame;

    /** @var int */
    protected $channel_max = 65535;

    /** @var int */
    protected $frame_max = 131072;

    /** @var array Constructor parameters for clone */
    protected $construct_params;

    /** @var bool Close the connection in destructor */
    protected $close_on_destruct = true;

    /** @var bool Maintain connection status */
    protected $is_connected = false;

    /** @var AbstractIO */
    protected $io;

    /** @var callable Handles connection blocking from the server */
    private $connection_block_handler;

    /** @var callable Handles connection unblocking from the server */
    private $connection_unblock_handler;

    /** @var int Connection timeout value*/
    protected $connection_timeout;

    /** @var AMQPConnectionConfig|null */
    protected $config;

    /**
     * Circular buffer to speed up prepare_content().
     * Max size limited by $prepare_content_cache_max_size.
     *
     * @var array
     * @see prepare_content()
     */
    private $prepare_content_cache = array();

    /** @var int Maximal size of $prepare_content_cache */
    private $prepare_content_cache_max_size = 100;

    /**
     * Maximum time to wait for channel operations, in seconds
     * @var float $channel_rpc_timeout
     */
    private $channel_rpc_timeout;

    /**
     * If connection is blocked due to the broker running low on resources.
     * @var bool
     */
    protected $blocked = false;

    /**
     * If a frame is currently being written
     * @var bool
     */
    protected $writing = false;

    /**
     * @param string $user
     * @param string $password
     * @param string $vhost
     * @param bool $insist
     * @param string $login_method
     * @param null $login_response @deprecated
     * @param string $locale
     * @param AbstractIO $io
     * @param int $heartbeat
     * @param int|float $connection_timeout
     * @param int|float $channel_rpc_timeout
     * @param \PhpAmqpLib\Connection\AMQPConnectionConfig | null $config
     * @throws \Exception
     */
    public function __construct(
        $user,
        $password,
        $vhost = '/',
        $insist = false,
        $login_method = 'AMQPLAIN',
        $login_response = null,
        $locale = 'en_US',
        ?AbstractIO $io = null,
        $heartbeat = 0,
        $connection_timeout = 0,
        $channel_rpc_timeout = 0.0,
        ?AMQPConnectionConfig $config = null
    ) {
        if (is_null($io)) {
            throw new \InvalidArgumentException('Argument $io cannot be null');
        }

        if ($config) {
            $this->config = clone $config;
        }

        // save the params for the use of __clone
        $this->construct_params = func_get_args();

        $this->vhost = $vhost;
        $this->insist = $insist;
        $this->login_method = $login_method;
        $this->locale = $locale;
        $this->io = $io;
        $this->heartbeat = max(0, (int)$heartbeat);
        $this->connection_timeout = $connection_timeout;
        $this->channel_rpc_timeout = $channel_rpc_timeout;

        if ($user && $password) {
            if ($login_method === 'PLAIN') {
                $this->login_response = sprintf("\0%s\0%s", $user, $password);
            } elseif ($login_method === 'AMQPLAIN') {
                $login_response = new AMQPWriter();
                $login_response->write_table(array(
                    'LOGIN' => array('S', $user),
                    'PASSWORD' => array('S', $password)
                ));

                // Skip the length
                $responseValue = $login_response->getvalue();
                $this->login_response = mb_substr($responseValue, 4, mb_strlen($responseValue, 'ASCII') - 4, 'ASCII');
            } else {
                throw new \InvalidArgumentException('Unknown login method: ' . $login_method);
            }
        } elseif ($login_method === 'EXTERNAL') {
            $this->login_response = $login_response;
        } else {
            $this->login_response = null;
        }

        // Lazy Connection waits on connecting
        if ($this->connectOnConstruct()) {
            $this->connect();
        }
    }

    /**
     * Connects to the AMQP server
     * @throws \Exception
     */
    protected function connect()
    {
        $this->blocked = false;
        try {
            // Loop until we connect
            while (!$this->isConnected()) {
                // Assume we will connect, until we dont
                $this->setIsConnected(true);

                // Connect the socket
                $this->io->connect();

                $this->channels = array();
                // The connection object itself is treated as channel 0
                parent::__construct($this, 0);

                $this->input = new Wire\AMQPIOReader($this->io);

                $this->write($this->constants->getHeader());
                // assume frame was sent successfully, used in $this->wait_channel()
                $this->last_frame = microtime(true);
                $this->wait(array($this->waitHelper->get_wait('connection.start')), false, $this->connection_timeout);
                $this->x_start_ok(
                    $this->getLibraryProperties(),
                    $this->login_method,
                    $this->login_response,
                    $this->locale
                );

                $this->wait_tune_ok = true;
                while ($this->wait_tune_ok) {
                    $this->wait(array(
                        $this->waitHelper->get_wait('connection.secure'),
                        $this->waitHelper->get_wait('connection.tune')
                    ), false, $this->connection_timeout);
                }

                $host = $this->x_open($this->vhost, '', $this->insist);
                if (!$host) {
                    //Reconnected
                    $this->io->reenableHeartbeat();
                    return null; // we weren't redirected
                }

                $this->setIsConnected(false);
                $this->closeChannels();

                // we were redirected, close the socket, loop and try again
                $this->close_socket();
            }
        } catch (\Exception $e) {
            // Something went wrong, set the connection status
            $this->setIsConnected(false);
            $this->closeChannels();
            $this->close_input();
            $this->close_socket();
            throw $e; // Rethrow exception
        }
    }

    /**
     * Reconnects using the original connection settings.
     * This will not recreate any channels that were established previously
     * @throws \Exception
     */
    public function reconnect()
    {
        // Try to close the AMQP connection
        $this->safeClose();
        // Reconnect the socket/stream then AMQP
        $this->io->close();
        // getIO can initiate the connection setting via LazyConnection, set it here to be sure
        $this->setIsConnected(false);
        $this->connect();
    }

    /**
     * Cloning will use the old properties to make a new connection to the same server
     */
    public function __clone()
    {
        if ($this->config) {
            $this->config = clone $this->config;
        }
        call_user_func_array(array($this, '__construct'), $this->construct_params);
    }

    public function __destruct()
    {
        if ($this->close_on_destruct) {
            $this->safeClose();
        }
    }

    /**
     * Attempts to close the connection safely
     */
    protected function safeClose()
    {
        try {
            if (null !== $this->input) {
                $this->close();
            }
        } catch (\Exception $e) {
            // Nothing here
        }
    }

    /**
     * @param int|null $sec
     * @param int $usec
     * @return int
     * @throws AMQPIOException
     * @throws AMQPRuntimeException
     * @throws AMQPConnectionClosedException
     * @throws AMQPRuntimeException
     */
    public function select(?int $sec, int $usec = 0): int
    {
        try {
            return $this->io->select($sec, $usec);
        } catch (AMQPConnectionClosedException $e) {
            $this->do_close();
            throw $e;
        } catch (AMQPRuntimeException $e) {
            $this->setIsConnected(false);
            throw $e;
        }
    }

    /**
     * Allows to not close the connection
     * it's useful after the fork when you don't want to close parent process connection
     *
     * @param bool $close
     */
    public function set_close_on_destruct($close = true)
    {
        $this->close_on_destruct = (bool) $close;
    }

    protected function close_input()
    {
        $this->debug && $this->debug->debug_msg('closing input');

        if (null !== $this->input) {
            $this->input->close();
            $this->input = null;
        }
    }

    protected function close_socket()
    {
        $this->debug && $this->debug->debug_msg('closing socket');
        $this->io->close();
    }

    /**
     * @param string $data
     * @throws AMQPIOException
     */
    public function write($data)
    {
        $this->debug->debug_hexdump($data);

        try {
            $this->writing = true;
            $this->io->write($data);
        } catch (AMQPConnectionClosedException $e) {
            $this->do_close();
            throw $e;
        } catch (AMQPRuntimeException $e) {
            $this->setIsConnected(false);
            throw $e;
        } finally {
            $this->writing = false;
        }
    }

    protected function do_close()
    {
        $this->frame_queue = new \SplQueue();
        $this->method_queue = [];
        $this->setIsConnected(false);
        $this->closeChannelsIfDisconnected();
        $this->close_input();
        $this->close_socket();
    }

    /**
     * @return int
     * @throws AMQPRuntimeException
     */
    public function get_free_channel_id()
    {
        for ($i = 1; $i <= $this->channel_max; $i++) {
            if (!isset($this->channels[$i])) {
                return $i;
            }
        }

        throw new AMQPRuntimeException('No free channel ids');
    }

    /**
     * @param int $channel
     * @param int $class_id
     * @param int $weight
     * @param int $body_size
     * @param string $packed_properties
     * @param string $body
     * @param AMQPWriter $pkt
     * @throws AMQPIOException
     */
    public function send_content($channel, $class_id, $weight, $body_size, $packed_properties, $body, $pkt)
    {
        $this->prepare_content($channel, $class_id, $weight, $body_size, $packed_properties, $body, $pkt);
        $this->write($pkt->getvalue());
    }

    /**
     * Returns a new AMQPWriter or mutates the provided $pkt
     *
     * @param int $channel
     * @param int $class_id
     * @param int $weight
     * @param int $body_size
     * @param string $packed_properties
     * @param string $body
     * @param AMQPWriter|null $pkt
     * @return AMQPWriter
     */
    public function prepare_content($channel, $class_id, $weight, $body_size, $packed_properties, $body, $pkt)
    {
        $pkt = $pkt ?: new AMQPWriter();

        // Content already prepared ?
        $key_cache = sprintf(
            '%s|%s|%s|%s',
            $channel,
            $packed_properties,
            $class_id,
            $weight
        );

        if (!isset($this->prepare_content_cache[$key_cache])) {
            $w = new AMQPWriter();
            $w->write_octet(2);
            $w->write_short($channel);
            $w->write_long(mb_strlen($packed_properties, 'ASCII') + 12);
            $w->write_short($class_id);
            $w->write_short($weight);
            $this->prepare_content_cache[$key_cache] = $w->getvalue();
            if (count($this->prepare_content_cache) > $this->prepare_content_cache_max_size) {
                reset($this->prepare_content_cache);
                $old_key = key($this->prepare_content_cache);
                unset($this->prepare_content_cache[$old_key]);
            }
        }
        $pkt->write($this->prepare_content_cache[$key_cache]);

        $pkt->write_longlong($body_size);
        $pkt->write($packed_properties);

        $pkt->write_octet(0xCE);


        // memory efficiency: walk the string instead of biting
        // it. good for very large packets (close in size to
        // memory_limit setting)
        $position = 0;
        $bodyLength = mb_strlen($body, 'ASCII');
        while ($position < $bodyLength) {
            $payload = mb_substr($body, $position, $this->frame_max - 8, 'ASCII');
            $position += $this->frame_max - 8;

            $pkt->write_octet(3);
            $pkt->write_short($channel);
            $pkt->write_long(mb_strlen($payload, 'ASCII'));

            $pkt->write($payload);

            $pkt->write_octet(0xCE);
        }

        return $pkt;
    }

    /**
     * @param int $channel
     * @param array $method_sig
     * @param AMQPWriter|string $args
     * @param null $pkt
     * @throws AMQPIOException
     */
    protected function send_channel_method_frame($channel, $method_sig, $args = '', $pkt = null)
    {
        $pkt = $this->prepare_channel_method_frame($channel, $method_sig, $args, $pkt);
        $this->write($pkt->getvalue());
        $this->debug->debug_method_signature1($method_sig);
    }

    /**
     * Returns a new AMQPWriter or mutates the provided $pkt
     *
     * @param int $channel
     * @param array $method_sig
     * @param AMQPWriter|string $args
     * @param AMQPWriter|null $pkt
     * @return AMQPWriter
     */
    protected function prepare_channel_method_frame($channel, $method_sig, $args = '', $pkt = null)
    {
        if ($args instanceof AMQPWriter) {
            $args = $args->getvalue();
        }

        $pkt = $pkt ?: new AMQPWriter();

        $pkt->write_octet(1);
        $pkt->write_short($channel);
        $pkt->write_long(mb_strlen($args, 'ASCII') + 4); // 4 = length of class_id and method_id
        // in payload

        $pkt->write_short($method_sig[0]); // class_id
        $pkt->write_short($method_sig[1]); // method_id
        $pkt->write($args);

        $pkt->write_octet(0xCE);

        $this->debug->debug_method_signature1($method_sig);

        return $pkt;
    }

    /**
     * Waits for a frame from the server
     *
     * @param int|float|null $timeout
     * @return Frame
     * @throws \Exception
     * @throws \PhpAmqpLib\Exception\AMQPTimeoutException
     * @throws AMQPRuntimeException
     */
    protected function wait_frame($timeout = 0): Frame
    {
        if (null === $this->input) {
            $this->setIsConnected(false);
            throw new AMQPConnectionClosedException('Broken pipe or closed connection');
        }

        $currentTimeout = $this->input->getTimeout();
        $this->input->setTimeout($timeout);

        try {
            $header = $this->input->readFrameHeader();
            $frame_type = $header['type'];
            if (!$this->constants->isFrameType($frame_type)) {
                throw new AMQPInvalidFrameException('Invalid frame type ' . $frame_type);
            }
            $size = $header['size'];

            // payload + ch
            $result = unpack('a' . $size . 'payload/Cch', $this->input->read(AMQPReader::OCTET + $size));
            $ch = $result['ch'];
            $frame = new Frame($frame_type, $header['channel'], $size, $result['payload']);
        } catch (AMQPTimeoutException $e) {
            if ($this->input) {
                $this->input->setTimeout($currentTimeout);
            }
            throw $e;
        } catch (AMQPNoDataException $e) {
            if ($this->input) {
                $this->input->setTimeout($currentTimeout);
            }
            throw $e;
        } catch (AMQPConnectionClosedException $exception) {
            $this->do_close();
            throw $exception;
        } finally {
            if ($this->input) {
                $this->input->setTimeout($currentTimeout);
            }
        }

        $this->input->setTimeout($currentTimeout);

        if ($ch !== Frame::END) {
            throw new AMQPInvalidFrameException(sprintf(
                'Framing error, unexpected byte: %x',
                $ch
            ));
        }

        return $frame;
    }

    /**
     * Waits for a frame from the server destined for a particular channel.
     *
     * @param int $channel_id
     * @param int|float|null $timeout
     * @return Frame
     * @throws \Exception
     */
    protected function wait_channel(int $channel_id, $timeout = 0): Frame
    {
        // Keeping the original timeout unchanged.
        $_timeout = $timeout;
        while (true) {
            $start = microtime(true);
            try {
                $frame = $this->wait_frame($_timeout);
            } catch (AMQPTimeoutException $e) {
                if (
                    $this->heartbeat && $this->last_frame
                    && microtime(true) - ($this->heartbeat * 2) > $this->last_frame
                ) {
                    $this->debug->debug_msg('missed server heartbeat (at threshold * 2)');
                    $this->setIsConnected(false);
                    throw new AMQPHeartbeatMissedException('Missed server heartbeat');
                }

                throw $e;
            }

            $this->last_frame = microtime(true);
            $frame_channel = $frame->getChannel();

            if ($frame_channel === 0 && $frame->isHeartbeat()) {
                // skip heartbeat frames and reduce the timeout by the time passed
                $this->debug->debug_msg('received server heartbeat');
                if ($_timeout > 0) {
                    $_timeout -= $this->last_frame - $start;
                    if ($_timeout <= 0) {
                        // If timeout has been reached, throw the exception without calling wait_frame
                        throw new AMQPTimeoutException('Timeout waiting on channel');
                    }
                }
                continue;
            }

            if ($frame_channel === $channel_id) {
                return $frame;
            }

            // Not the channel we were looking for.  Queue this frame
            //for later, when the other channel is looking for frames.
            // Make sure the channel still exists, it could have been
            // closed by a previous Exception.
            if (isset($this->channels[$frame_channel])) {
                $this->channels[$frame_channel]->frame_queue->enqueue($frame);
            }

            // If we just queued up a method for channel 0 (the Connection
            // itself) it's probably a close method in reaction to some
            // error, so deal with it right away.
            if ($frame_channel === 0 && $frame->isMethod()) {
                $this->wait();
            }
        }
    }

    /**
     * Fetches a channel object identified by the numeric channel_id, or
     * create that object if it doesn't already exist.
     *
     * @param int|null $channel_id
     * @return AMQPChannel
     * @throws \PhpAmqpLib\Exception\AMQPOutOfBoundsException
     * @throws \PhpAmqpLib\Exception\AMQPRuntimeException
     * @throws \PhpAmqpLib\Exception\AMQPTimeoutException
     * @throws \PhpAmqpLib\Exception\AMQPConnectionClosedException
     */
    public function channel($channel_id = null)
    {
        if (!$this->is_connected) {
            $this->connect();
        }
        if (isset($this->channels[$channel_id])) {
            return $this->channels[$channel_id];
        }

        $channel_id = $channel_id ?: $this->get_free_channel_id();
        $ch = new AMQPChannel($this, $channel_id, true, $this->channel_rpc_timeout);
        $this->channels[$channel_id] = $ch;

        return $ch;
    }

    /**
     * Requests a connection close
     *
     * @param int $reply_code
     * @param string $reply_text
     * @param array $method_sig
     * @return mixed|null
     * @throws \Exception
     */
    public function close($reply_code = 0, $reply_text = '', $method_sig = array(0, 0))
    {
        $this->io->disableHeartbeat();
        if (empty($this->protocolWriter) || !$this->isConnected()) {
            return null;
        }

        $result = null;
        try {
            $this->closeChannels();
            list($class_id, $method_id, $args) = $this->protocolWriter->connectionClose(
                $reply_code,
                $reply_text,
                $method_sig[0],
                $method_sig[1]
            );
            $this->send_method_frame(array($class_id, $method_id), $args);
            $result = $this->wait(
                array($this->waitHelper->get_wait('connection.close_ok')),
                false,
                $this->connection_timeout
            );
        } catch (\Exception $exception) {
            $this->do_close();
            throw $exception;
        }

        $this->setIsConnected(false);

        return $result;
    }

    /**
     * @param AMQPReader $reader
     * @throws AMQPConnectionClosedException
     */
    protected function connection_close(AMQPReader $reader)
    {
        $code = (int)$reader->read_short();
        $reason = $reader->read_shortstr();
        $class = $reader->read_short();
        $method = $reader->read_short();
        $reason .= sprintf('(%s, %s)', $class, $method);

        $this->x_close_ok();

        throw new AMQPConnectionClosedException($reason, $code);
    }

    /**
     * Confirms a connection close
     */
    protected function x_close_ok()
    {
        $this->send_method_frame(
            explode(',', $this->waitHelper->get_wait('connection.close_ok'))
        );
        $this->do_close();
    }

    /**
     * Confirm a connection close
     */
    protected function connection_close_ok()
    {
        $this->do_close();
    }

    /**
     * @param string $virtual_host
     * @param string $capabilities
     * @param bool $insist
     * @return mixed
     */
    protected function x_open($virtual_host, $capabilities = '', $insist = false)
    {
        $args = new AMQPWriter();
        $args->write_shortstr($virtual_host);
        $args->write_shortstr($capabilities);
        $args->write_bits(array($insist));
        $this->send_method_frame(array(10, 40), $args);

        $wait = array(
            $this->waitHelper->get_wait('connection.open_ok')
        );

        if ($this->protocolVersion === Wire\Constants080::VERSION) {
            $wait[] = $this->waitHelper->get_wait('connection.redirect');
        }

        return $this->wait($wait, false, $this->connection_timeout);
    }

    /**
     * Signals that the connection is ready
     *
     * @param AMQPReader $args
     */
    protected function connection_open_ok($args)
    {
        $this->known_hosts = $args->read_shortstr();
        $this->debug->debug_msg('Open OK! known_hosts: ' . $this->known_hosts);
    }

    /**
     * Asks the client to use a different server
     *
     * @param AMQPReader $args
     * @return string
     */
    protected function connection_redirect($args)
    {
        $host = $args->read_shortstr();
        $this->known_hosts = $args->read_shortstr();
        $this->debug->debug_msg(sprintf(
            'Redirected to [%s], known_hosts [%s]',
            $host,
            $this->known_hosts
        ));

        return $host;
    }

    /**
     * Security mechanism challenge
     *
     * @param AMQPReader $args
     */
    protected function connection_secure($args)
    {
        $args->read_longstr();
    }

    /**
     * Security mechanism response
     *
     * @param string $response
     */
    protected function x_secure_ok($response)
    {
        $args = new AMQPWriter();
        $args->write_longstr($response);
        $this->send_method_frame(array(10, 21), $args);
    }

    /**
     * Starts connection negotiation
     *
     * @param AMQPReader $args
     */
    protected function connection_start($args)
    {
        $this->version_major = $args->read_octet();
        $this->version_minor = $args->read_octet();
        $this->server_properties = $args->read_table();
        $this->mechanisms = explode(' ', $args->read_longstr());
        $this->locales = explode(' ', $args->read_longstr());

        $this->debug->debug_connection_start(
            $this->version_major,
            $this->version_minor,
            $this->server_properties,
            $this->mechanisms,
            $this->locales
        );
    }

    /**
     * @param AMQPTable|array $clientProperties
     * @param string $mechanism
     * @param string $response
     * @param string $locale
     */
    protected function x_start_ok($clientProperties, $mechanism, $response, $locale)
    {
        $args = new AMQPWriter();
        $args->write_table($clientProperties);
        $args->write_shortstr($mechanism);
        $args->write_longstr($response);
        $args->write_shortstr($locale);
        $this->send_method_frame(array(10, 11), $args);
    }

    /**
     * Proposes connection tuning parameters
     *
     * @param AMQPReader $args
     */
    protected function connection_tune($args)
    {
        $v = $args->read_short();
        if ($v) {
            $this->channel_max = $v;
        }

        $v = $args->read_long();
        if ($v) {
            $this->frame_max = (int)$v;
        }

        // @see https://www.rabbitmq.com/heartbeats.html
        // If either value is 0 (see below), the greater value of the two is used
        // Otherwise the smaller value of the two is used
        // A zero value indicates that a peer suggests disabling heartbeats entirely.
        // To disable heartbeats, both peers have to opt in and use the value of 0
        // For BC, this library opts for disabled heartbeat if client value is 0.
        $v = $args->read_short();
        if ($this->heartbeat > 0 && $v > 0) {
            $this->heartbeat = min($this->heartbeat, $v);
        }

        $this->x_tune_ok($this->channel_max, $this->frame_max, $this->heartbeat);
        $this->io->afterTune($this->heartbeat);
    }

    /**
     * Negotiates connection tuning parameters
     *
     * @param int $channel_max
     * @param int $frame_max
     * @param int $heartbeat
     */
    protected function x_tune_ok($channel_max, $frame_max, $heartbeat)
    {
        $args = new AMQPWriter();
        $args->write_short($channel_max);
        $args->write_long($frame_max);
        $args->write_short($heartbeat);
        $this->send_method_frame(array(10, 31), $args);
        $this->wait_tune_ok = false;
    }

    /**
     * @return AbstractIO
     * @deprecated
     */
    public function getIO()
    {
        return $this->io;
    }

    /**
     * Check connection heartbeat if enabled.
     * @throws AMQPHeartbeatMissedException If too much time passed since last connection activity.
     * @throws AMQPConnectionClosedException If connection was closed due to network issues or timeouts.
     * @throws AMQPSocketException If connection was already closed.
     * @throws AMQPTimeoutException If heartbeat write takes too much time.
     * @throws AMQPIOException If other connection problems occurred.
     */
    public function checkHeartBeat()
    {
        $this->io->check_heartbeat();
    }

    /**
     * @return float|int
     */
    public function getLastActivity()
    {
        return $this->io->getLastActivity();
    }

    /**
     * @return float
     * @since 3.2.0
     */
    public function getReadTimeout(): float
    {
        return $this->io->getReadTimeout();
    }

    /**
     * Handles connection blocked notifications
     *
     * @param AMQPReader $args
     */
    protected function connection_blocked(AMQPReader $args)
    {
        $this->blocked = true;
        // Call the block handler and pass in the reason
        $this->dispatch_to_handler($this->connection_block_handler, array($args->read_shortstr()));
    }

    /**
     * Handles connection unblocked notifications
     */
    protected function connection_unblocked()
    {
        $this->blocked = false;
        // No args to an unblock event
        $this->dispatch_to_handler($this->connection_unblock_handler);
    }

    /**
     * Sets a handler which is called whenever a connection.block is sent from the server
     *
     * @param callable $callback
     * @throws \InvalidArgumentException if $callback is not callable
     */
    public function set_connection_block_handler($callback)
    {
        Assert::isCallable($callback);
        $this->connection_block_handler = $callback;
    }

    /**
     * Sets a handler which is called whenever a connection.block is sent from the server
     *
     * @param callable $callback
     * @throws \InvalidArgumentException if $callback is not callable
     */
    public function set_connection_unblock_handler($callback)
    {
        Assert::isCallable($callback);
        $this->connection_unblock_handler = $callback;
    }

    /**
     * Gets the connection status
     *
     * @return bool
     */
    public function isConnected()
    {
        return $this->is_connected;
    }

    /**
     * Get the connection blocked state.
     * @return bool
     * @since 2.12.0
     */
    public function isBlocked()
    {
        return $this->blocked;
    }

    /**
     * Get the io writing state.
     * @return bool
     */
    public function isWriting()
    {
        return $this->writing;
    }

    /**
     * Set the connection status
     *
     * @param bool $is_connected
     */
    protected function setIsConnected($is_connected)
    {
        $this->is_connected = (bool) $is_connected;
    }

    /**
     * Closes all available channels
     */
    protected function closeChannels()
    {
        foreach ($this->channels as $key => $channel) {
            // channels[0] is this connection object, so don't close it yet
            if ($key === 0) {
                continue;
            }
            try {
                $channel->close();
            } catch (\Exception $e) {
                /* Ignore closing errors */
            }
        }
    }

    /**
     * Closes all available channels if disconnected
     */
    protected function closeChannelsIfDisconnected()
    {
        foreach ($this->channels as $key => $channel) {
            // channels[0] is this connection object, so don't close it yet
            if ($key === 0) {
                continue;
            }

            $channel->closeIfDisconnected();
        }
    }

    /**
     * Should the connection be attempted during construction?
     *
     * @return bool
     */
    public function connectOnConstruct(): bool
    {
        if ($this->config) {
            return !$this->config->isLazy();
        }

        return true;
    }

    /**
     * @return array
     */
    public function getServerProperties()
    {
        return $this->server_properties;
    }

    /**
     * @return int
     */
    public function getHeartbeat()
    {
        return $this->heartbeat;
    }

    /**
     * Get the library properties for populating the client protocol information
     *
     * @return array
     */
    public function getLibraryProperties()
    {
        $config = self::$LIBRARY_PROPERTIES;
        if ($this->config !== null) {
            $connectionName = $this->config->getConnectionName();
            if ($connectionName !== '') {
                $config['connection_name'] = ['S', $connectionName];
            }
        }
        return $config;
    }

    /**
     * @param array $hosts
     * @param array $options
     *
     * @return mixed
     * @throws \Exception
     * @deprecated Use AMQPConnectionFactory.
     */
    public static function create_connection($hosts, $options = array())
    {
        if (!is_array($hosts) || count($hosts) < 1) {
            throw new \InvalidArgumentException(
                'An array of hosts are required when attempting to create a connection'
            );
        }

        foreach ($hosts as $hostdef) {
            self::validate_host($hostdef);
            $host = $hostdef['host'];
            $port = $hostdef['port'];
            $user = $hostdef['user'];
            $password = $hostdef['password'];
            $vhost = isset($hostdef['vhost']) ? $hostdef['vhost'] : '/';
            try {
                $conn = static::try_create_connection($host, $port, $user, $password, $vhost, $options);
                return $conn;
            } catch (\Exception $e) {
                $latest_exception = $e;
            }
        }
        throw $latest_exception;
    }

    public static function validate_host($host)
    {
        if (!isset($host['host'])) {
            throw new \InvalidArgumentException("'host' key is required.");
        }
        if (!isset($host['port'])) {
            throw new \InvalidArgumentException("'port' key is required.");
        }
        if (!isset($host['user'])) {
            throw new \InvalidArgumentException("'user' key is required.");
        }
        if (!isset($host['password'])) {
            throw new \InvalidArgumentException("'password' key is required.");
        }
    }
}
<?php

namespace PhpAmqpLib\Connection\Heartbeat;

use PhpAmqpLib\Connection\AbstractConnection;
use PhpAmqpLib\Exception\AMQPRuntimeException;

/**
 * Manages pcntl-based heartbeat sending for a {@link AbstractConnection}.
 */
abstract class AbstractSignalHeartbeatSender
{
    /**
     * @var AbstractConnection|null
     */
    protected $connection;

    /**
     * @var bool
     */
    protected $wasActive = false;

    /**
     * @param AbstractConnection $connection
     * @throws AMQPRuntimeException
     */
    public function __construct(AbstractConnection $connection)
    {
        if (!$this->isSupported()) {
            throw new AMQPRuntimeException('Signal-based heartbeat sender is unsupported');
        }

        $this->connection = $connection;
    }

    public function __destruct()
    {
        $this->unregister();
    }

    /**
     * @return bool
     */
    protected function isSupported(): bool
    {
        return extension_loaded('pcntl')
               && function_exists('pcntl_async_signals')
               && (defined('AMQP_WITHOUT_SIGNALS') ? !AMQP_WITHOUT_SIGNALS : true);
    }

    /**
     * Starts the heartbeats
     */
    abstract public function register(): void;

    /**
     * Stops the heartbeats.
     */
    abstract public function unregister(): void;

    /**
     * Handles the heartbeat when a signal interrupt is received
     *
     * @param int $interval
     */
    protected function handleSignal(int $interval): void
    {
        if (!$this->connection) {
            return;
        }

        // Support for lazy connections
        if (!$this->wasActive && $this->connection->isConnected()) {
            $this->wasActive = true;
        }

        if (!$this->wasActive) {
            return;
        }

        if (!$this->connection->isConnected()) {
            $this->unregister();
            return;
        }

        if ($this->connection->isWriting()) {
            return;
        }

        if (time() > ($this->connection->getLastActivity() + $interval)) {
            $this->connection->checkHeartBeat();
        }
    }
}
<?php

namespace PhpAmqpLib\Connection\Heartbeat;

use PhpAmqpLib\Exception\AMQPRuntimeException;

/**
 * @see AbstractSignalHeartbeatSender
 *
 * This version of a signal based heartbeat sendler relies on using SIGALRM and uses the OS to trigger an alarm
 * after a given time.
 */
final class PCNTLHeartbeatSender extends AbstractSignalHeartbeatSender
{
    public function register(): void
    {
        if (!$this->connection) {
            throw new AMQPRuntimeException('Unable to re-register heartbeat sender');
        }

        $timeout = $this->connection->getHeartbeat();

        if ($timeout > 0) {
            $interval = (int)ceil($timeout / 2);
            pcntl_async_signals(true);
            $this->registerListener($interval);
            pcntl_alarm($interval);
        }
    }

    public function unregister(): void
    {
        $this->connection = null;
        // restore default signal handler
        pcntl_signal(SIGALRM, SIG_IGN);
    }

    private function registerListener(int $interval): void
    {
        pcntl_signal(SIGALRM, function () use ($interval) {
            $this->handleSignal($interval);
            if ($this->connection) {
                pcntl_alarm($interval);
            }
        }, true);
    }
}
<?php
namespace PhpAmqpLib\Connection\Heartbeat;

use PhpAmqpLib\Connection\AbstractConnection;
use PhpAmqpLib\Exception\AMQPRuntimeException;

/**
 * @see AbstractSignalHeartbeatSender
 * @since 3.2.0
 *
 * This version of a signal based heartbeat sender allows using any signal number. It forks the current process
 * to create a child process that periodically sends a signal to the parent process.
 * The default signal used is SIGUSR1
 */
final class SIGHeartbeatSender extends AbstractSignalHeartbeatSender
{
    /**
     * @var int the UNIX signal to be used for managing heartbeats
     */
    private $signal;

    /**
     * @var int the PID (process ID) of the child process sending regular signals to manage heartbeats
     */
    private $childPid;

    /**
     * @param AbstractConnection $connection
     * @param int $signal
     * @throws AMQPRuntimeException
     */
    public function __construct(AbstractConnection $connection, int $signal = SIGUSR1)
    {
        parent::__construct($connection);
        $this->signal = $signal;
    }

    public function register(): void
    {
        if (!$this->connection) {
            throw new AMQPRuntimeException('Unable to re-register heartbeat sender');
        }

        $timeout = $this->connection->getHeartbeat();

        if ($timeout > 0) {
            $interval = (int)ceil($timeout / 2);
            $this->registerListener($interval);
        }
    }

    public function unregister(): void
    {
        $this->connection = null;
        // restore default signal handler
        pcntl_signal($this->signal, SIG_IGN);
        if ($this->childPid > 0) {
            posix_kill($this->childPid, SIGKILL);
            pcntl_waitpid($this->childPid, $status);
        }
        $this->childPid = 0;
    }

    private function registerListener(int $interval): void
    {
        pcntl_async_signals(true);
        $this->periodicAlarm($interval);
        pcntl_signal($this->signal, function () use ($interval) {
            $this->handleSignal($interval);
        });
    }

    /**
     * Forks the current process to create a child process that will send periodic signals to the parent
     *
     * @param int $interval
     */
    private function periodicAlarm(int $interval): void
    {
        $parent = getmypid();
        $pid = pcntl_fork();
        if(!$pid) {
            while (true){
                $slept = sleep($interval);
                if ($slept !== 0) {
                    // interupted by signal from parent, exit immediately
                    die;
                }
                posix_kill($parent, $this->signal);
            }
        } else {
            $this->childPid = $pid;
        }
    }
}
<?php

namespace PhpAmqpLib\Exception;

class AMQPBasicCancelException extends \Exception implements AMQPExceptionInterface
{
    /**
     * @var string
     * @internal Use getter getConsumerTag()
     */
    public $consumerTag;

    /**
     * @param string $consumerTag
     */
    public function __construct($consumerTag)
    {
        parent::__construct('Channel was canceled');
        $this->consumerTag = $consumerTag;
    }

    /**
     * @return string
     */
    public function getConsumerTag()
    {
        return $this->consumerTag;
    }
}
<?php

namespace PhpAmqpLib\Exception;

class AMQPChannelClosedException extends AMQPRuntimeException
{
}
<?php

namespace PhpAmqpLib\Exception;

class AMQPConnectionBlockedException extends AMQPRuntimeException
{
    public function __construct($message = '', $code = 0, $previous = null)
    {
        if (empty($message)) {
            $message = 'Connection is blocked due to low resources';
        }
        parent::__construct($message, $code, $previous);
    }
}
<?php

namespace PhpAmqpLib\Exception;

/**
 * When connection was closed by server, proxy or some tunnel due to timeout or network issue.
 */
class AMQPConnectionClosedException extends AMQPRuntimeException
{
}
<?php

namespace PhpAmqpLib\Exception;

class AMQPDataReadException extends AMQPRuntimeException
{
}
<?php

namespace PhpAmqpLib\Exception;

class AMQPEmptyDeliveryTagException extends AMQPRuntimeException
{
}
<?php

namespace PhpAmqpLib\Exception;

use Throwable;

interface AMQPExceptionInterface extends Throwable
{
}
<?php

namespace PhpAmqpLib\Exception;

class AMQPHeartbeatMissedException extends AMQPConnectionClosedException
{
}
<?php

namespace PhpAmqpLib\Exception;

class AMQPIOException extends \Exception implements AMQPExceptionInterface
{
}
<?php

namespace PhpAmqpLib\Exception;

class AMQPIOWaitException extends AMQPRuntimeException
{
}
<?php

namespace PhpAmqpLib\Exception;

class AMQPInvalidArgumentException extends \RuntimeException implements AMQPExceptionInterface
{
}
<?php

namespace PhpAmqpLib\Exception;

class AMQPInvalidFrameException extends AMQPRuntimeException
{
}
<?php

namespace PhpAmqpLib\Exception;

class AMQPLogicException extends \LogicException implements AMQPExceptionInterface
{

}
<?php

namespace PhpAmqpLib\Exception;

/**
 * Used mostly in non-blocking methods when no data is ready for processing.
 */
class AMQPNoDataException extends AMQPRuntimeException
{
}
<?php

namespace PhpAmqpLib\Exception;

class AMQPNotImplementedException extends AMQPRuntimeException
{
}
<?php

namespace PhpAmqpLib\Exception;

class AMQPOutOfBoundsException extends \OutOfBoundsException implements AMQPExceptionInterface
{
}
<?php

namespace PhpAmqpLib\Exception;

class AMQPOutOfRangeException extends \OutOfRangeException implements AMQPExceptionInterface
{

}
<?php

namespace PhpAmqpLib\Exception;

class AMQPProtocolChannelException extends AMQPProtocolException
{
}
<?php

namespace PhpAmqpLib\Exception;

class AMQPProtocolException extends \Exception implements AMQPExceptionInterface
{
    /** @var int */
    public $amqp_reply_code;

    /** @var string */
    public $amqp_reply_text;

    /** @var int[] */
    public $amqp_method_sig;

    /** @var array */
    public $args;

    /**
     * @param int $reply_code
     * @param string $reply_text
     * @param int[] $method_sig
     */
    public function __construct($reply_code, $reply_text, $method_sig)
    {
        parent::__construct($reply_text, $reply_code);

        $this->amqp_reply_code = $reply_code; // redundant, but kept for BC
        $this->amqp_reply_text = $reply_text; // redundant, but kept for BC
        $this->amqp_method_sig = $method_sig;

        $this->args = array($reply_code, $reply_text, $method_sig);
    }
}
<?php

namespace PhpAmqpLib\Exception;

class AMQPRuntimeException extends \RuntimeException implements AMQPExceptionInterface
{
}
<?php

namespace PhpAmqpLib\Exception;

class AMQPSocketException extends AMQPRuntimeException
{
}
<?php

namespace PhpAmqpLib\Exception;

class AMQPTimeoutException extends \RuntimeException implements AMQPExceptionInterface
{
    /**
     * @var int|float|null
     */
    private $timeout;

    public function __construct($message = '', $timeout = 0, $code = 0, ?\Exception $previous = null)
    {
        parent::__construct($message, $code, $previous);
        $this->timeout = $timeout;
    }

    /**
     * @param int|float|null $timeout
     * @param int $code
     * @return self
     */
    public static function writeTimeout($timeout, $code = 0)
    {
        return new self('Error sending data. Connection timed out.', $timeout, $code);
    }

    /**
     * @return int|float|null
     */
    public function getTimeout()
    {
        return $this->timeout;
    }
}
<?php

namespace PhpAmqpLib\Exchange;

final class AMQPExchangeType
{
    const DIRECT = 'direct';
    const FANOUT = 'fanout';
    const TOPIC = 'topic';
    const HEADERS = 'headers';
}
<?php

namespace PhpAmqpLib\Helper;

use InvalidArgumentException;

class Assert
{
    /**
     * @param mixed $argument
     * @throws \InvalidArgumentException
     */
    public static function isCallable($argument)
    {
        if (!is_callable($argument)) {
            throw new InvalidArgumentException(sprintf(
                'Given argument "%s" should be callable. %s type was given.',
                $argument,
                gettype($argument)
            ));
        }
    }
}
<?php

namespace PhpAmqpLib\Helper;

if (class_exists('phpseclib\Math\BigInteger')) {
    class BigInteger extends \phpseclib\Math\BigInteger
    {
    }
} elseif (class_exists('phpseclib3\Math\BigInteger')) {
    class BigInteger extends \phpseclib3\Math\BigInteger
    {
    }
} else {
    throw new \RuntimeException('Cannot find supported phpseclib/phpseclib library');
}
<?php

namespace PhpAmqpLib\Helper;

use PhpAmqpLib\Wire\Constants;

class DebugHelper
{
    /**
     * @var bool
     */
    protected $debug;

    /**
     * @var resource
     */
    protected $debug_output;

    /**
     * @var Constants
     */
    protected $constants;

    /**
     * @param Constants $constants
     */
    public function __construct(Constants $constants)
    {
        $this->debug = defined('AMQP_DEBUG') ? AMQP_DEBUG : false;
        if (defined('AMQP_DEBUG_OUTPUT')) {
            $this->debug_output = AMQP_DEBUG_OUTPUT;
        } else {
            $this->debug_output = fopen('php://output', 'wb');
        }
        $this->constants = $constants;
    }

    /**
     * @param string $msg
     */
    public function debug_msg($msg)
    {
        if ($this->debug) {
            $this->print_msg($msg);
        }
    }

    /**
     * @param array|null $allowed_methods
     */
    public function debug_allowed_methods($allowed_methods)
    {
        if ($this->debug) {
            if ($allowed_methods) {
                $msg = 'waiting for ' . implode(', ', $allowed_methods);
            } else {
                $msg = 'waiting for any method';
            }
            $this->debug_msg($msg);
        }
    }

    /**
     * @param string|array $method_sig
     */
    public function debug_method_signature1($method_sig)
    {
        $this->debug_method_signature('< %s:', $method_sig);
    }

    /**
     * @param string $msg
     * @param string|array $method_sig
     */
    public function debug_method_signature($msg, $method_sig)
    {
        if ($this->debug) {
            $constants = $this->constants;
            $methods = $constants::$GLOBAL_METHOD_NAMES;
            $key = MiscHelper::methodSig($method_sig);
            $this->debug_msg(sprintf($msg . ': %s', $key, $methods[$key]));
        }
    }

    /**
     * @param string $data
     */
    public function debug_hexdump($data)
    {
        if ($this->debug) {
            $this->debug_msg(
                sprintf(
                    '< [hex]: %s%s',
                    PHP_EOL,
                    MiscHelper::hexdump($data, $htmloutput = false, $uppercase = true, $return = true)
                )
            );
        }
    }

    /**
     * @param int $version_major
     * @param int $version_minor
     * @param array $server_properties
     * @param array $mechanisms
     * @param array $locales
     */
    public function debug_connection_start($version_major, $version_minor, $server_properties, $mechanisms, $locales)
    {
        if ($this->debug) {
            $this->debug_msg(
                sprintf(
                    'Start from server, version: %d.%d, properties: %s, mechanisms: %s, locales: %s',
                    $version_major,
                    $version_minor,
                    MiscHelper::dump_table($server_properties),
                    implode(', ', $mechanisms),
                    implode(', ', $locales)
                )
            );
        }
    }

    /**
     * @param string $s
     */
    protected function print_msg($s)
    {
        fwrite($this->debug_output, $s . PHP_EOL);
    }
}
<?php

namespace PhpAmqpLib\Helper;

class MiscHelper
{
    /**
     * @param string|array $a
     * @return string
     */
    public static function methodSig($a)
    {
        if (is_string($a)) {
            return $a;
        }

        return sprintf('%d,%d', $a[0], $a[1]);
    }

    /**
     * Gets a number (either int or float) and returns an array containing its integer part as first element and its
     * decimal part mutliplied by 10^6. Useful for some PHP stream functions that need seconds and microseconds as
     * different arguments
     *
     * @param int|float $number
     * @return int[]
     */
    public static function splitSecondsMicroseconds($number)
    {
        return array((int)floor($number), (int)(fmod($number, 1) * 1000000));
    }

    /**
     * View any string as a hexdump.
     *
     * This is most commonly used to view binary data from streams
     * or sockets while debugging, but can be used to view any string
     * with non-viewable characters.
     *
     * @version     1.3.2
     * @author      Aidan Lister <aidan@php.net>
     * @author      Peter Waller <iridum@php.net>
     * @link        http://aidanlister.com/repos/v/function.hexdump.php
     *
     * @param string $data The string to be dumped
     * @param bool $htmloutput Set to false for non-HTML output
     * @param bool $uppercase Set to true for uppercase hex
     * @param bool $return Set to true to return the dump
     * @return string|null
     */
    public static function hexdump($data, $htmloutput = true, $uppercase = false, $return = false)
    {
        // Init
        $hexi = '';
        $ascii = '';
        $dump = $htmloutput ? '<pre>' : '';
        $offset = 0;
        $len = mb_strlen($data, 'ASCII');

        // Upper or lower case hexidecimal
        $hexFormat = $uppercase ? 'X' : 'x';

        // Iterate string
        for ($i = $j = 0; $i < $len; $i++) {
            // Convert to hexidecimal
            // We must use concatenation here because the $hexFormat value
            // is needed for sprintf() to parse the format
            $hexi .= sprintf('%02' .  $hexFormat . ' ', ord($data[$i]));

            // Replace non-viewable bytes with '.'
            if (ord($data[$i]) >= 32) {
                $ascii .= $htmloutput ? htmlentities($data[$i]) : $data[$i];
            } else {
                $ascii .= '.';
            }

            // Add extra column spacing
            if ($j === 7) {
                $hexi .= ' ';
                $ascii .= ' ';
            }

            // Add row
            if (++$j === 16 || $i === $len - 1) {
                // Join the hexi / ascii output
                // We must use concatenation here because the $hexFormat value
                // is needed for sprintf() to parse the format
                $dump .= sprintf('%04' . $hexFormat . '  %-49s  %s', $offset, $hexi, $ascii);

                // Reset vars
                $hexi = $ascii = '';
                $offset += 16;
                $j = 0;

                // Add newline
                if ($i !== $len - 1) {
                    $dump .= PHP_EOL;
                }
            }
        }

        // Finish dump
        $dump .= $htmloutput ? '</pre>' : '';
        $dump .= PHP_EOL;

        if ($return) {
            return $dump;
        }

        echo $dump;

        return null;
    }

    /**
     * @param array $table
     * @return string
     */
    public static function dump_table($table)
    {
        $tokens = array();
        foreach ($table as $name => $value) {
            switch ($value[0]) {
                case 'D':
                    $val = $value[1]->n . 'E' . $value[1]->e;
                    break;
                case 'F':
                    $val = '(' . self::dump_table($value[1]) . ')';
                    break;
                case 'T':
                    $val = date('Y-m-d H:i:s', $value[1]);
                    break;
                default:
                    $val = $value[1];
            }
            $tokens[] = $name . '=' . $val;
        }

        return implode(', ', $tokens);
    }
}
<?php

/* This file was autogenerated by spec/parser.php - Do not modify */

namespace PhpAmqpLib\Helper\Protocol;

class MethodMap080
{
    /**
     * @var array
     */
    protected $method_map = array(
        '10,10' => 'connection_start',
        '10,11' => 'connection_start_ok',
        '10,20' => 'connection_secure',
        '10,21' => 'connection_secure_ok',
        '10,30' => 'connection_tune',
        '10,31' => 'connection_tune_ok',
        '10,40' => 'connection_open',
        '10,41' => 'connection_open_ok',
        '10,50' => 'connection_redirect',
        '10,60' => 'connection_close',
        '10,61' => 'connection_close_ok',
        '20,10' => 'channel_open',
        '20,11' => 'channel_open_ok',
        '20,20' => 'channel_flow',
        '20,21' => 'channel_flow_ok',
        '20,30' => 'channel_alert',
        '20,40' => 'channel_close',
        '20,41' => 'channel_close_ok',
        '30,10' => 'access_request',
        '30,11' => 'access_request_ok',
        '40,10' => 'exchange_declare',
        '40,11' => 'exchange_declare_ok',
        '40,20' => 'exchange_delete',
        '40,21' => 'exchange_delete_ok',
        '50,10' => 'queue_declare',
        '50,11' => 'queue_declare_ok',
        '50,20' => 'queue_bind',
        '50,21' => 'queue_bind_ok',
        '50,30' => 'queue_purge',
        '50,31' => 'queue_purge_ok',
        '50,40' => 'queue_delete',
        '50,41' => 'queue_delete_ok',
        '50,50' => 'queue_unbind',
        '50,51' => 'queue_unbind_ok',
        '60,10' => 'basic_qos',
        '60,11' => 'basic_qos_ok',
        '60,20' => 'basic_consume',
        '60,21' => 'basic_consume_ok',
        '60,30' => 'basic_cancel',
        '60,31' => 'basic_cancel_ok',
        '60,40' => 'basic_publish',
        '60,50' => 'basic_return',
        '60,60' => 'basic_deliver',
        '60,70' => 'basic_get',
        '60,71' => 'basic_get_ok',
        '60,72' => 'basic_get_empty',
        '60,80' => 'basic_ack',
        '60,90' => 'basic_reject',
        '60,100' => 'basic_recover_async',
        '60,110' => 'basic_recover',
        '60,111' => 'basic_recover_ok',
        '70,10' => 'file_qos',
        '70,11' => 'file_qos_ok',
        '70,20' => 'file_consume',
        '70,21' => 'file_consume_ok',
        '70,30' => 'file_cancel',
        '70,31' => 'file_cancel_ok',
        '70,40' => 'file_open',
        '70,41' => 'file_open_ok',
        '70,50' => 'file_stage',
        '70,60' => 'file_publish',
        '70,70' => 'file_return',
        '70,80' => 'file_deliver',
        '70,90' => 'file_ack',
        '70,100' => 'file_reject',
        '80,10' => 'stream_qos',
        '80,11' => 'stream_qos_ok',
        '80,20' => 'stream_consume',
        '80,21' => 'stream_consume_ok',
        '80,30' => 'stream_cancel',
        '80,31' => 'stream_cancel_ok',
        '80,40' => 'stream_publish',
        '80,50' => 'stream_return',
        '80,60' => 'stream_deliver',
        '90,10' => 'tx_select',
        '90,11' => 'tx_select_ok',
        '90,20' => 'tx_commit',
        '90,21' => 'tx_commit_ok',
        '90,30' => 'tx_rollback',
        '90,31' => 'tx_rollback_ok',
        '100,10' => 'dtx_select',
        '100,11' => 'dtx_select_ok',
        '100,20' => 'dtx_start',
        '100,21' => 'dtx_start_ok',
        '110,10' => 'tunnel_request',
        '120,10' => 'test_integer',
        '120,11' => 'test_integer_ok',
        '120,20' => 'test_string',
        '120,21' => 'test_string_ok',
        '120,30' => 'test_table',
        '120,31' => 'test_table_ok',
        '120,40' => 'test_content',
        '120,41' => 'test_content_ok',
    );

    /**
     * @var string $method_sig
     * @return string
     */
    public function get_method($method_sig)
    {
        return $this->method_map[$method_sig];
    }

    /**
     * @var string $method_sig
     * @return bool
     */
    public function valid_method($method_sig)
    {
        return array_key_exists($method_sig, $this->method_map);
    }
}
<?php

/* This file was autogenerated by spec/parser.php - Do not modify */

namespace PhpAmqpLib\Helper\Protocol;

class MethodMap091
{
    /**
     * @var array
     */
    protected $method_map = array(
        '10,10' => 'connection_start',
        '10,11' => 'connection_start_ok',
        '10,20' => 'connection_secure',
        '10,21' => 'connection_secure_ok',
        '10,30' => 'connection_tune',
        '10,31' => 'connection_tune_ok',
        '10,40' => 'connection_open',
        '10,41' => 'connection_open_ok',
        '10,50' => 'connection_close',
        '10,51' => 'connection_close_ok',
        '10,60' => 'connection_blocked',
        '10,61' => 'connection_unblocked',
        '20,10' => 'channel_open',
        '20,11' => 'channel_open_ok',
        '20,20' => 'channel_flow',
        '20,21' => 'channel_flow_ok',
        '20,40' => 'channel_close',
        '20,41' => 'channel_close_ok',
        '30,10' => 'access_request',
        '30,11' => 'access_request_ok',
        '40,10' => 'exchange_declare',
        '40,11' => 'exchange_declare_ok',
        '40,20' => 'exchange_delete',
        '40,21' => 'exchange_delete_ok',
        '40,30' => 'exchange_bind',
        '40,31' => 'exchange_bind_ok',
        '40,40' => 'exchange_unbind',
        '40,51' => 'exchange_unbind_ok',
        '50,10' => 'queue_declare',
        '50,11' => 'queue_declare_ok',
        '50,20' => 'queue_bind',
        '50,21' => 'queue_bind_ok',
        '50,30' => 'queue_purge',
        '50,31' => 'queue_purge_ok',
        '50,40' => 'queue_delete',
        '50,41' => 'queue_delete_ok',
        '50,50' => 'queue_unbind',
        '50,51' => 'queue_unbind_ok',
        '60,10' => 'basic_qos',
        '60,11' => 'basic_qos_ok',
        '60,20' => 'basic_consume',
        '60,21' => 'basic_consume_ok',
        '60,30' => 'basic_cancel_from_server',
        '60,31' => 'basic_cancel_ok',
        '60,40' => 'basic_publish',
        '60,50' => 'basic_return',
        '60,60' => 'basic_deliver',
        '60,70' => 'basic_get',
        '60,71' => 'basic_get_ok',
        '60,72' => 'basic_get_empty',
        '60,80' => 'basic_ack_from_server',
        '60,90' => 'basic_reject',
        '60,100' => 'basic_recover_async',
        '60,110' => 'basic_recover',
        '60,111' => 'basic_recover_ok',
        '60,120' => 'basic_nack_from_server',
        '90,10' => 'tx_select',
        '90,11' => 'tx_select_ok',
        '90,20' => 'tx_commit',
        '90,21' => 'tx_commit_ok',
        '90,30' => 'tx_rollback',
        '90,31' => 'tx_rollback_ok',
        '85,10' => 'confirm_select',
        '85,11' => 'confirm_select_ok',
    );

    /**
     * @var string $method_sig
     * @return string
     */
    public function get_method($method_sig)
    {
        return $this->method_map[$method_sig];
    }

    /**
     * @var string $method_sig
     * @return bool
     */
    public function valid_method($method_sig)
    {
        return array_key_exists($method_sig, $this->method_map);
    }
}
<?php

/* This file was autogenerated by spec/parser.php - Do not modify */

namespace PhpAmqpLib\Helper\Protocol;

use PhpAmqpLib\Wire\AMQPWriter;
use PhpAmqpLib\Wire\AMQPReader;

class Protocol080
{
    /**
     * @param int $version_major
     * @param int $version_minor
     * @param mixed $server_properties
     * @param string $mechanisms
     * @param string $locales
     * @return array
     */
    public function connectionStart(
        $version_major = 0,
        $version_minor = 8,
        $server_properties = [],
        $mechanisms = 'PLAIN',
        $locales = 'en_US'
    ) {
        $writer = new AMQPWriter();
        $writer->write_octet($version_major);
        $writer->write_octet($version_minor);
        $writer->write_table(empty($server_properties) ? array() : $server_properties);
        $writer->write_longstr($mechanisms);
        $writer->write_longstr($locales);
        return array(10, 10, $writer);
    }

    /**
     * @param AMQPReader $reader
     * @return array
     */
    public static function connectionStartOk(AMQPReader $reader)
    {
        $response = array();
        $response[] = $reader->read_table();
        $response[] = $reader->read_shortstr();
        $response[] = $reader->read_longstr();
        $response[] = $reader->read_shortstr();
        return $response;
    }

    /**
     * @param string $challenge
     * @return array
     */
    public function connectionSecure($challenge)
    {
        $writer = new AMQPWriter();
        $writer->write_longstr($challenge);
        return array(10, 20, $writer);
    }

    /**
     * @param AMQPReader $reader
     * @return array
     */
    public static function connectionSecureOk(AMQPReader $reader)
    {
        $response = array();
        $response[] = $reader->read_longstr();
        return $response;
    }

    /**
     * @param int $channel_max
     * @param int $frame_max
     * @param int $heartbeat
     * @return array
     */
    public function connectionTune($channel_max = 0, $frame_max = 0, $heartbeat = 0)
    {
        $writer = new AMQPWriter();
        $writer->write_short($channel_max);
        $writer->write_long($frame_max);
        $writer->write_short($heartbeat);
        return array(10, 30, $writer);
    }

    /**
     * @param AMQPReader $reader
     * @return array
     */
    public static function connectionTuneOk(AMQPReader $reader)
    {
        $response = array();
        $response[] = $reader->read_short();
        $response[] = $reader->read_long();
        $response[] = $reader->read_short();
        return $response;
    }

    /**
     * @param string $virtual_host
     * @param string $capabilities
     * @param bool $insist
     * @return array
     */
    public function connectionOpen($virtual_host = '/', $capabilities = '', $insist = false)
    {
        $writer = new AMQPWriter();
        $writer->write_shortstr($virtual_host);
        $writer->write_shortstr($capabilities);
        $writer->write_bits(array($insist));
        return array(10, 40, $writer);
    }

    /**
     * @param AMQPReader $reader
     * @return array
     */
    public static function connectionOpenOk(AMQPReader $reader)
    {
        $response = array();
        $response[] = $reader->read_shortstr();
        return $response;
    }

    /**
     * @param string $host
     * @param string $known_hosts
     * @return array
     */
    public function connectionRedirect($host, $known_hosts = '')
    {
        $writer = new AMQPWriter();
        $writer->write_shortstr($host);
        $writer->write_shortstr($known_hosts);
        return array(10, 50, $writer);
    }

    /**
     * @param int $reply_code
     * @param string $reply_text
     * @param int $class_id
     * @param int $method_id
     * @return array
     */
    public function connectionClose($reply_code, $reply_text, $class_id, $method_id)
    {
        $writer = new AMQPWriter();
        $writer->write_short($reply_code);
        $writer->write_shortstr($reply_text);
        $writer->write_short($class_id);
        $writer->write_short($method_id);
        return array(10, 60, $writer);
    }

    /**
     * @param AMQPReader $reader
     * @return array
     */
    public static function connectionCloseOk(AMQPReader $reader)
    {
        $response = array();
        return $response;
    }

    /**
     * @param string $out_of_band
     * @return array
     */
    public function channelOpen($out_of_band = '')
    {
        $writer = new AMQPWriter();
        $writer->write_shortstr($out_of_band);
        return array(20, 10, $writer);
    }

    /**
     * @param AMQPReader $reader
     * @return array
     */
    public static function channelOpenOk(AMQPReader $reader)
    {
        $response = array();
        return $response;
    }

    /**
     * @param bool $active
     * @return array
     */
    public function channelFlow($active)
    {
        $writer = new AMQPWriter();
        $writer->write_bits(array($active));
        return array(20, 20, $writer);
    }

    /**
     * @param AMQPReader $reader
     * @return array
     */
    public static function channelFlowOk(AMQPReader $reader)
    {
        $response = array();
        $response[] = $reader->read_bit();
        return $response;
    }

    /**
     * @param int $reply_code
     * @param string $reply_text
     * @param \PhpAmqpLib\Wire\AMQPTable|array $details
     * @return array
     */
    public function channelAlert($reply_code, $reply_text = '', $details = array())
    {
        $writer = new AMQPWriter();
        $writer->write_short($reply_code);
        $writer->write_shortstr($reply_text);
        $writer->write_table(empty($details) ? array() : $details);
        return array(20, 30, $writer);
    }

    /**
     * @param int $reply_code
     * @param string $reply_text
     * @param int $class_id
     * @param int $method_id
     * @return array
     */
    public function channelClose($reply_code, $reply_text, $class_id, $method_id)
    {
        $writer = new AMQPWriter();
        $writer->write_short($reply_code);
        $writer->write_shortstr($reply_text);
        $writer->write_short($class_id);
        $writer->write_short($method_id);
        return array(20, 40, $writer);
    }

    /**
     * @param AMQPReader $reader
     * @return array
     */
    public static function channelCloseOk(AMQPReader $reader)
    {
        $response = array();
        return $response;
    }

    /**
     * @param string $realm
     * @param bool $exclusive
     * @param bool $passive
     * @param bool $active
     * @param bool $write
     * @param bool $read
     * @return array
     */
    public function accessRequest(
        $realm = '/data',
        $exclusive = false,
        $passive = true,
        $active = true,
        $write = true,
        $read = true
    ) {
        $writer = new AMQPWriter();
        $writer->write_shortstr($realm);
        $writer->write_bits(array($exclusive, $passive, $active, $write, $read));
        return array(30, 10, $writer);
    }

    /**
     * @param AMQPReader $reader
     * @return array
     */
    public static function accessRequestOk(AMQPReader $reader)
    {
        $response = array();
        $response[] = $reader->read_short();
        return $response;
    }

    /**
     * @param int $ticket
     * @param string $exchange
     * @param string $type
     * @param bool $passive
     * @param bool $durable
     * @param bool $auto_delete
     * @param bool $internal
     * @param bool $nowait
     * @param \PhpAmqpLib\Wire\AMQPTable|array $arguments
     * @return array
     */
    public function exchangeDeclare(
        $ticket = 1,
        $exchange = '',
        $type = 'direct',
        $passive = false,
        $durable = false,
        $auto_delete = false,
        $internal = false,
        $nowait = false,
        $arguments = array()
    ) {
        $writer = new AMQPWriter();
        $writer->write_short($ticket);
        $writer->write_shortstr($exchange);
        $writer->write_shortstr($type);
        $writer->write_bits(array($passive, $durable, $auto_delete, $internal, $nowait));
        $writer->write_table(empty($arguments) ? array() : $arguments);
        return array(40, 10, $writer);
    }

    /**
     * @param AMQPReader $reader
     * @return array
     */
    public static function exchangeDeclareOk(AMQPReader $reader)
    {
        $response = array();
        return $response;
    }

    /**
     * @param int $ticket
     * @param string $exchange
     * @param bool $if_unused
     * @param bool $nowait
     * @return array
     */
    public function exchangeDelete($ticket = 1, $exchange = '', $if_unused = false, $nowait = false)
    {
        $writer = new AMQPWriter();
        $writer->write_short($ticket);
        $writer->write_shortstr($exchange);
        $writer->write_bits(array($if_unused, $nowait));
        return array(40, 20, $writer);
    }

    /**
     * @param AMQPReader $reader
     * @return array
     */
    public static function exchangeDeleteOk(AMQPReader $reader)
    {
        $response = array();
        return $response;
    }

    /**
     * @param int $ticket
     * @param string $queue
     * @param bool $passive
     * @param bool $durable
     * @param bool $exclusive
     * @param bool $auto_delete
     * @param bool $nowait
     * @param \PhpAmqpLib\Wire\AMQPTable|array $arguments
     * @return array
     */
    public function queueDeclare(
        $ticket = 1,
        $queue = '',
        $passive = false,
        $durable = false,
        $exclusive = false,
        $auto_delete = false,
        $nowait = false,
        $arguments = array()
    ) {
        $writer = new AMQPWriter();
        $writer->write_short($ticket);
        $writer->write_shortstr($queue);
        $writer->write_bits(array($passive, $durable, $exclusive, $auto_delete, $nowait));
        $writer->write_table(empty($arguments) ? array() : $arguments);
        return array(50, 10, $writer);
    }

    /**
     * @param AMQPReader $reader
     * @return array
     */
    public static function queueDeclareOk(AMQPReader $reader)
    {
        $response = array();
        $response[] = $reader->read_shortstr();
        $response[] = $reader->read_long();
        $response[] = $reader->read_long();
        return $response;
    }

    /**
     * @param int $ticket
     * @param string $queue
     * @param string $exchange
     * @param string $routing_key
     * @param bool $nowait
     * @param \PhpAmqpLib\Wire\AMQPTable|array $arguments
     * @return array
     */
    public function queueBind(
        $ticket = 1,
        $queue = '',
        $exchange = '',
        $routing_key = '',
        $nowait = false,
        $arguments = array()
    ) {
        $writer = new AMQPWriter();
        $writer->write_short($ticket);
        $writer->write_shortstr($queue);
        $writer->write_shortstr($exchange);
        $writer->write_shortstr($routing_key);
        $writer->write_bits(array($nowait));
        $writer->write_table(empty($arguments) ? array() : $arguments);
        return array(50, 20, $writer);
    }

    /**
     * @param AMQPReader $reader
     * @return array
     */
    public static function queueBindOk(AMQPReader $reader)
    {
        $response = array();
        return $response;
    }

    /**
     * @param int $ticket
     * @param string $queue
     * @param bool $nowait
     * @return array
     */
    public function queuePurge($ticket = 1, $queue = '', $nowait = false)
    {
        $writer = new AMQPWriter();
        $writer->write_short($ticket);
        $writer->write_shortstr($queue);
        $writer->write_bits(array($nowait));
        return array(50, 30, $writer);
    }

    /**
     * @param AMQPReader $reader
     * @return array
     */
    public static function queuePurgeOk(AMQPReader $reader)
    {
        $response = array();
        $response[] = $reader->read_long();
        return $response;
    }

    /**
     * @param int $ticket
     * @param string $queue
     * @param bool $if_unused
     * @param bool $if_empty
     * @param bool $nowait
     * @return array
     */
    public function queueDelete($ticket = 1, $queue = '', $if_unused = false, $if_empty = false, $nowait = false)
    {
        $writer = new AMQPWriter();
        $writer->write_short($ticket);
        $writer->write_shortstr($queue);
        $writer->write_bits(array($if_unused, $if_empty, $nowait));
        return array(50, 40, $writer);
    }

    /**
     * @param AMQPReader $reader
     * @return array
     */
    public static function queueDeleteOk(AMQPReader $reader)
    {
        $response = array();
        $response[] = $reader->read_long();
        return $response;
    }

    /**
     * @param int $ticket
     * @param string $queue
     * @param string $exchange
     * @param string $routing_key
     * @param \PhpAmqpLib\Wire\AMQPTable|array $arguments
     * @return array
     */
    public function queueUnbind($ticket = 1, $queue = '', $exchange = '', $routing_key = '', $arguments = array())
    {
        $writer = new AMQPWriter();
        $writer->write_short($ticket);
        $writer->write_shortstr($queue);
        $writer->write_shortstr($exchange);
        $writer->write_shortstr($routing_key);
        $writer->write_table(empty($arguments) ? array() : $arguments);
        return array(50, 50, $writer);
    }

    /**
     * @param AMQPReader $reader
     * @return array
     */
    public static function queueUnbindOk(AMQPReader $reader)
    {
        $response = array();
        return $response;
    }

    /**
     * @param int $prefetch_size
     * @param int $prefetch_count
     * @param bool $global
     * @return array
     */
    public function basicQos($prefetch_size = 0, $prefetch_count = 0, $global = false)
    {
        $writer = new AMQPWriter();
        $writer->write_long($prefetch_size);
        $writer->write_short($prefetch_count);
        $writer->write_bits(array($global));
        return array(60, 10, $writer);
    }

    /**
     * @param AMQPReader $reader
     * @return array
     */
    public static function basicQosOk(AMQPReader $reader)
    {
        $response = array();
        return $response;
    }

    /**
     * @param int $ticket
     * @param string $queue
     * @param string $consumer_tag
     * @param bool $no_local
     * @param bool $no_ack
     * @param bool $exclusive
     * @param bool $nowait
     * @return array
     */
    public function basicConsume(
        $ticket = 1,
        $queue = '',
        $consumer_tag = '',
        $no_local = false,
        $no_ack = false,
        $exclusive = false,
        $nowait = false
    ) {
        $writer = new AMQPWriter();
        $writer->write_short($ticket);
        $writer->write_shortstr($queue);
        $writer->write_shortstr($consumer_tag);
        $writer->write_bits(array($no_local, $no_ack, $exclusive, $nowait));
        return array(60, 20, $writer);
    }

    /**
     * @param AMQPReader $reader
     * @return array
     */
    public static function basicConsumeOk(AMQPReader $reader)
    {
        $response = array();
        $response[] = $reader->read_shortstr();
        return $response;
    }

    /**
     * @param string $consumer_tag
     * @param bool $nowait
     * @return array
     */
    public function basicCancel($consumer_tag, $nowait = false)
    {
        $writer = new AMQPWriter();
        $writer->write_shortstr($consumer_tag);
        $writer->write_bits(array($nowait));
        return array(60, 30, $writer);
    }

    /**
     * @param AMQPReader $reader
     * @return array
     */
    public static function basicCancelOk(AMQPReader $reader)
    {
        $response = array();
        $response[] = $reader->read_shortstr();
        return $response;
    }

    /**
     * @param int $ticket
     * @param string $exchange
     * @param string $routing_key
     * @param bool $mandatory
     * @param bool $immediate
     * @return array
     */
    public function basicPublish($ticket = 1, $exchange = '', $routing_key = '', $mandatory = false, $immediate = false)
    {
        $writer = new AMQPWriter();
        $writer->write_short($ticket);
        $writer->write_shortstr($exchange);
        $writer->write_shortstr($routing_key);
        $writer->write_bits(array($mandatory, $immediate));
        return array(60, 40, $writer);
    }

    /**
     * @param int $reply_code
     * @param string $reply_text
     * @param string $exchange
     * @param string $routing_key
     * @return array
     */
    public function basicReturn($reply_code, $reply_text, $exchange, $routing_key)
    {
        $writer = new AMQPWriter();
        $writer->write_short($reply_code);
        $writer->write_shortstr($reply_text);
        $writer->write_shortstr($exchange);
        $writer->write_shortstr($routing_key);
        return array(60, 50, $writer);
    }

    /**
     * @param string $consumer_tag
     * @param int $delivery_tag
     * @param bool $redelivered
     * @param string $exchange
     * @param string $routing_key
     * @return array
     */
    public function basicDeliver($consumer_tag, $delivery_tag, $redelivered, $exchange, $routing_key)
    {
        $writer = new AMQPWriter();
        $writer->write_shortstr($consumer_tag);
        $writer->write_longlong($delivery_tag);
        $writer->write_bits(array($redelivered));
        $writer->write_shortstr($exchange);
        $writer->write_shortstr($routing_key);
        return array(60, 60, $writer);
    }

    /**
     * @param int $ticket
     * @param string $queue
     * @param bool $no_ack
     * @return array
     */
    public function basicGet($ticket = 1, $queue = '', $no_ack = false)
    {
        $writer = new AMQPWriter();
        $writer->write_short($ticket);
        $writer->write_shortstr($queue);
        $writer->write_bits(array($no_ack));
        return array(60, 70, $writer);
    }

    /**
     * @param AMQPReader $reader
     * @return array
     */
    public static function basicGetOk(AMQPReader $reader)
    {
        $response = array();
        $response[] = $reader->read_longlong();
        $response[] = $reader->read_bit();
        $response[] = $reader->read_shortstr();
        $response[] = $reader->read_shortstr();
        $response[] = $reader->read_long();
        return $response;
    }

    /**
     * @param AMQPReader $reader
     * @return array
     */
    public static function basicGetEmpty(AMQPReader $reader)
    {
        $response = array();
        $response[] = $reader->read_shortstr();
        return $response;
    }

    /**
     * @param int $delivery_tag
     * @param bool $multiple
     * @return array
     */
    public function basicAck($delivery_tag = 0, $multiple = false)
    {
        $writer = new AMQPWriter();
        $writer->write_longlong($delivery_tag);
        $writer->write_bits(array($multiple));
        return array(60, 80, $writer);
    }

    /**
     * @param int $delivery_tag
     * @param bool $requeue
     * @return array
     */
    public function basicReject($delivery_tag, $requeue = true)
    {
        $writer = new AMQPWriter();
        $writer->write_longlong($delivery_tag);
        $writer->write_bits(array($requeue));
        return array(60, 90, $writer);
    }

    /**
     * @param bool $requeue
     * @return array
     */
    public function basicRecoverAsync($requeue = false)
    {
        $writer = new AMQPWriter();
        $writer->write_bits(array($requeue));
        return array(60, 100, $writer);
    }

    /**
     * @param bool $requeue
     * @return array
     */
    public function basicRecover($requeue = false)
    {
        $writer = new AMQPWriter();
        $writer->write_bits(array($requeue));
        return array(60, 110, $writer);
    }

    /**
     * @param AMQPReader $reader
     * @return array
     */
    public static function basicRecoverOk(AMQPReader $reader)
    {
        $response = array();
        return $response;
    }

    /**
     * @param int $prefetch_size
     * @param int $prefetch_count
     * @param bool $global
     * @return array
     */
    public function fileQos($prefetch_size = 0, $prefetch_count = 0, $global = false)
    {
        $writer = new AMQPWriter();
        $writer->write_long($prefetch_size);
        $writer->write_short($prefetch_count);
        $writer->write_bits(array($global));
        return array(70, 10, $writer);
    }

    /**
     * @param AMQPReader $reader
     * @return array
     */
    public static function fileQosOk(AMQPReader $reader)
    {
        $response = array();
        return $response;
    }

    /**
     * @param int $ticket
     * @param string $queue
     * @param string $consumer_tag
     * @param bool $no_local
     * @param bool $no_ack
     * @param bool $exclusive
     * @param bool $nowait
     * @return array
     */
    public function fileConsume(
        $ticket = 1,
        $queue = '',
        $consumer_tag = '',
        $no_local = false,
        $no_ack = false,
        $exclusive = false,
        $nowait = false
    ) {
        $writer = new AMQPWriter();
        $writer->write_short($ticket);
        $writer->write_shortstr($queue);
        $writer->write_shortstr($consumer_tag);
        $writer->write_bits(array($no_local, $no_ack, $exclusive, $nowait));
        return array(70, 20, $writer);
    }

    /**
     * @param AMQPReader $reader
     * @return array
     */
    public static function fileConsumeOk(AMQPReader $reader)
    {
        $response = array();
        $response[] = $reader->read_shortstr();
        return $response;
    }

    /**
     * @param string $consumer_tag
     * @param bool $nowait
     * @return array
     */
    public function fileCancel($consumer_tag, $nowait = false)
    {
        $writer = new AMQPWriter();
        $writer->write_shortstr($consumer_tag);
        $writer->write_bits(array($nowait));
        return array(70, 30, $writer);
    }

    /**
     * @param AMQPReader $reader
     * @return array
     */
    public static function fileCancelOk(AMQPReader $reader)
    {
        $response = array();
        $response[] = $reader->read_shortstr();
        return $response;
    }

    /**
     * @param string $identifier
     * @param int $content_size
     * @return array
     */
    public function fileOpen($identifier, $content_size)
    {
        $writer = new AMQPWriter();
        $writer->write_shortstr($identifier);
        $writer->write_longlong($content_size);
        return array(70, 40, $writer);
    }

    /**
     * @param AMQPReader $reader
     * @return array
     */
    public static function fileOpenOk(AMQPReader $reader)
    {
        $response = array();
        $response[] = $reader->read_longlong();
        return $response;
    }

    /**

     * @return array
     */
    public function fileStage()
    {
        $writer = new AMQPWriter();
        return array(70, 50, $writer);
    }

    /**
     * @param int $ticket
     * @param string $exchange
     * @param string $routing_key
     * @param bool $mandatory
     * @param bool $immediate
     * @param string $identifier
     * @return array
     */
    public function filePublish(
        $ticket = 1,
        $exchange = '',
        $routing_key = '',
        $mandatory = false,
        $immediate = false,
        $identifier = ''
    ) {
        $writer = new AMQPWriter();
        $writer->write_short($ticket);
        $writer->write_shortstr($exchange);
        $writer->write_shortstr($routing_key);
        $writer->write_bits(array($mandatory, $immediate));
        $writer->write_shortstr($identifier);
        return array(70, 60, $writer);
    }

    /**
     * @param int $reply_code
     * @param string $reply_text
     * @param string $exchange
     * @param string $routing_key
     * @return array
     */
    public function fileReturn($reply_code = 200, $reply_text = '', $exchange = '', $routing_key = '')
    {
        $writer = new AMQPWriter();
        $writer->write_short($reply_code);
        $writer->write_shortstr($reply_text);
        $writer->write_shortstr($exchange);
        $writer->write_shortstr($routing_key);
        return array(70, 70, $writer);
    }

    /**
     * @param string $consumer_tag
     * @param int $delivery_tag
     * @param bool $redelivered
     * @param string $exchange
     * @param string $routing_key
     * @param string $identifier
     * @return array
     */
    public function fileDeliver(
        $consumer_tag,
        $delivery_tag,
        $redelivered,
        $exchange,
        $routing_key,
        $identifier
    ) {
        $writer = new AMQPWriter();
        $writer->write_shortstr($consumer_tag);
        $writer->write_longlong($delivery_tag);
        $writer->write_bits(array($redelivered));
        $writer->write_shortstr($exchange);
        $writer->write_shortstr($routing_key);
        $writer->write_shortstr($identifier);
        return array(70, 80, $writer);
    }

    /**
     * @param int $delivery_tag
     * @param bool $multiple
     * @return array
     */
    public function fileAck($delivery_tag = 0, $multiple = false)
    {
        $writer = new AMQPWriter();
        $writer->write_longlong($delivery_tag);
        $writer->write_bits(array($multiple));
        return array(70, 90, $writer);
    }

    /**
     * @param int $delivery_tag
     * @param bool $requeue
     * @return array
     */
    public function fileReject($delivery_tag, $requeue = true)
    {
        $writer = new AMQPWriter();
        $writer->write_longlong($delivery_tag);
        $writer->write_bits(array($requeue));
        return array(70, 100, $writer);
    }

    /**
     * @param int $prefetch_size
     * @param int $prefetch_count
     * @param int $consume_rate
     * @param bool $global
     * @return array
     */
    public function streamQos($prefetch_size = 0, $prefetch_count = 0, $consume_rate = 0, $global = false)
    {
        $writer = new AMQPWriter();
        $writer->write_long($prefetch_size);
        $writer->write_short($prefetch_count);
        $writer->write_long($consume_rate);
        $writer->write_bits(array($global));
        return array(80, 10, $writer);
    }

    /**
     * @param AMQPReader $reader
     * @return array
     */
    public static function streamQosOk(AMQPReader $reader)
    {
        $response = array();
        return $response;
    }

    /**
     * @param int $ticket
     * @param string $queue
     * @param string $consumer_tag
     * @param bool $no_local
     * @param bool $exclusive
     * @param bool $nowait
     * @return array
     */
    public function streamConsume(
        $ticket = 1,
        $queue = '',
        $consumer_tag = '',
        $no_local = false,
        $exclusive = false,
        $nowait = false
    ) {
        $writer = new AMQPWriter();
        $writer->write_short($ticket);
        $writer->write_shortstr($queue);
        $writer->write_shortstr($consumer_tag);
        $writer->write_bits(array($no_local, $exclusive, $nowait));
        return array(80, 20, $writer);
    }

    /**
     * @param AMQPReader $reader
     * @return array
     */
    public static function streamConsumeOk(AMQPReader $reader)
    {
        $response = array();
        $response[] = $reader->read_shortstr();
        return $response;
    }

    /**
     * @param string $consumer_tag
     * @param bool $nowait
     * @return array
     */
    public function streamCancel($consumer_tag, $nowait = false)
    {
        $writer = new AMQPWriter();
        $writer->write_shortstr($consumer_tag);
        $writer->write_bits(array($nowait));
        return array(80, 30, $writer);
    }

    /**
     * @param AMQPReader $reader
     * @return array
     */
    public static function streamCancelOk(AMQPReader $reader)
    {
        $response = array();
        $response[] = $reader->read_shortstr();
        return $response;
    }

    /**
     * @param int $ticket
     * @param string $exchange
     * @param string $routing_key
     * @param bool $mandatory
     * @param bool $immediate
     * @return array
     */
    public function streamPublish(
        $ticket = 1,
        $exchange = '',
        $routing_key = '',
        $mandatory = false,
        $immediate = false
    ) {
        $writer = new AMQPWriter();
        $writer->write_short($ticket);
        $writer->write_shortstr($exchange);
        $writer->write_shortstr($routing_key);
        $writer->write_bits(array($mandatory, $immediate));
        return array(80, 40, $writer);
    }

    /**
     * @param int $reply_code
     * @param string $reply_text
     * @param string $exchange
     * @param string $routing_key
     * @return array
     */
    public function streamReturn($reply_code = 200, $reply_text = '', $exchange = '', $routing_key = '')
    {
        $writer = new AMQPWriter();
        $writer->write_short($reply_code);
        $writer->write_shortstr($reply_text);
        $writer->write_shortstr($exchange);
        $writer->write_shortstr($routing_key);
        return array(80, 50, $writer);
    }

    /**
     * @param string $consumer_tag
     * @param int $delivery_tag
     * @param string $exchange
     * @param string $queue
     * @return array
     */
    public function streamDeliver($consumer_tag, $delivery_tag, $exchange, $queue)
    {
        $writer = new AMQPWriter();
        $writer->write_shortstr($consumer_tag);
        $writer->write_longlong($delivery_tag);
        $writer->write_shortstr($exchange);
        $writer->write_shortstr($queue);
        return array(80, 60, $writer);
    }

    /**

     * @return array
     */
    public function txSelect()
    {
        $writer = new AMQPWriter();
        return array(90, 10, $writer);
    }

    /**
     * @param AMQPReader $reader
     * @return array
     */
    public static function txSelectOk(AMQPReader $reader)
    {
        $response = array();
        return $response;
    }

    /**

     * @return array
     */
    public function txCommit()
    {
        $writer = new AMQPWriter();
        return array(90, 20, $writer);
    }

    /**
     * @param AMQPReader $reader
     * @return array
     */
    public static function txCommitOk(AMQPReader $reader)
    {
        $response = array();
        return $response;
    }

    /**

     * @return array
     */
    public function txRollback()
    {
        $writer = new AMQPWriter();
        return array(90, 30, $writer);
    }

    /**
     * @param AMQPReader $reader
     * @return array
     */
    public static function txRollbackOk(AMQPReader $reader)
    {
        $response = array();
        return $response;
    }

    /**

     * @return array
     */
    public function dtxSelect()
    {
        $writer = new AMQPWriter();
        return array(100, 10, $writer);
    }

    /**
     * @param AMQPReader $reader
     * @return array
     */
    public static function dtxSelectOk(AMQPReader $reader)
    {
        $response = array();
        return $response;
    }

    /**
     * @param string $dtx_identifier
     * @return array
     */
    public function dtxStart($dtx_identifier)
    {
        $writer = new AMQPWriter();
        $writer->write_shortstr($dtx_identifier);
        return array(100, 20, $writer);
    }

    /**
     * @param AMQPReader $reader
     * @return array
     */
    public static function dtxStartOk(AMQPReader $reader)
    {
        $response = array();
        return $response;
    }

    /**
     * @param \PhpAmqpLib\Wire\AMQPTable|array $meta_data
     * @return array
     */
    public function tunnelRequest($meta_data)
    {
        $writer = new AMQPWriter();
        $writer->write_table(empty($meta_data) ? array() : $meta_data);
        return array(110, 10, $writer);
    }

    /**
     * @param int $integer_1
     * @param int $integer_2
     * @param int $integer_3
     * @param int $integer_4
     * @param int $operation
     * @return array
     */
    public function testInteger($integer_1, $integer_2, $integer_3, $integer_4, $operation)
    {
        $writer = new AMQPWriter();
        $writer->write_octet($integer_1);
        $writer->write_short($integer_2);
        $writer->write_long($integer_3);
        $writer->write_longlong($integer_4);
        $writer->write_octet($operation);
        return array(120, 10, $writer);
    }

    /**
     * @param AMQPReader $reader
     * @return array
     */
    public static function testIntegerOk(AMQPReader $reader)
    {
        $response = array();
        $response[] = $reader->read_longlong();
        return $response;
    }

    /**
     * @param string $string_1
     * @param string $string_2
     * @param int $operation
     * @return array
     */
    public function testString($string_1, $string_2, $operation)
    {
        $writer = new AMQPWriter();
        $writer->write_shortstr($string_1);
        $writer->write_longstr($string_2);
        $writer->write_octet($operation);
        return array(120, 20, $writer);
    }

    /**
     * @param AMQPReader $reader
     * @return array
     */
    public static function testStringOk(AMQPReader $reader)
    {
        $response = array();
        $response[] = $reader->read_longstr();
        return $response;
    }

    /**
     * @param \PhpAmqpLib\Wire\AMQPTable|array $table
     * @param int $integer_op
     * @param int $string_op
     * @return array
     */
    public function testTable($table, $integer_op, $string_op)
    {
        $writer = new AMQPWriter();
        $writer->write_table(empty($table) ? array() : $table);
        $writer->write_octet($integer_op);
        $writer->write_octet($string_op);
        return array(120, 30, $writer);
    }

    /**
     * @param AMQPReader $reader
     * @return array
     */
    public static function testTableOk(AMQPReader $reader)
    {
        $response = array();
        $response[] = $reader->read_longlong();
        $response[] = $reader->read_longstr();
        return $response;
    }

    /**

     * @return array
     */
    public function testContent()
    {
        $writer = new AMQPWriter();
        return array(120, 40, $writer);
    }

    /**
     * @param AMQPReader $reader
     * @return array
     */
    public static function testContentOk(AMQPReader $reader)
    {
        $response = array();
        $response[] = $reader->read_long();
        return $response;
    }
}
<?php

/* This file was autogenerated by spec/parser.php - Do not modify */

namespace PhpAmqpLib\Helper\Protocol;

use PhpAmqpLib\Wire\AMQPWriter;
use PhpAmqpLib\Wire\AMQPReader;

class Protocol091
{
    /**
     * @param int $version_major
     * @param int $version_minor
     * @param mixed $server_properties
     * @param string $mechanisms
     * @param string $locales
     * @return array
     */
    public function connectionStart(
        $version_major = 0,
        $version_minor = 9,
        $server_properties = [],
        $mechanisms = 'PLAIN',
        $locales = 'en_US'
    ) {
        $writer = new AMQPWriter();
        $writer->write_octet($version_major);
        $writer->write_octet($version_minor);
        $writer->write_table(empty($server_properties) ? array() : $server_properties);
        $writer->write_longstr($mechanisms);
        $writer->write_longstr($locales);
        return array(10, 10, $writer);
    }

    /**
     * @param AMQPReader $reader
     * @return array
     */
    public static function connectionStartOk(AMQPReader $reader)
    {
        $response = array();
        $response[] = $reader->read_table();
        $response[] = $reader->read_shortstr();
        $response[] = $reader->read_longstr();
        $response[] = $reader->read_shortstr();
        return $response;
    }

    /**
     * @param string $challenge
     * @return array
     */
    public function connectionSecure($challenge)
    {
        $writer = new AMQPWriter();
        $writer->write_longstr($challenge);
        return array(10, 20, $writer);
    }

    /**
     * @param AMQPReader $reader
     * @return array
     */
    public static function connectionSecureOk(AMQPReader $reader)
    {
        $response = array();
        $response[] = $reader->read_longstr();
        return $response;
    }

    /**
     * @param int $channel_max
     * @param int $frame_max
     * @param int $heartbeat
     * @return array
     */
    public function connectionTune($channel_max = 0, $frame_max = 0, $heartbeat = 0)
    {
        $writer = new AMQPWriter();
        $writer->write_short($channel_max);
        $writer->write_long($frame_max);
        $writer->write_short($heartbeat);
        return array(10, 30, $writer);
    }

    /**
     * @param AMQPReader $reader
     * @return array
     */
    public static function connectionTuneOk(AMQPReader $reader)
    {
        $response = array();
        $response[] = $reader->read_short();
        $response[] = $reader->read_long();
        $response[] = $reader->read_short();
        return $response;
    }

    /**
     * @param string $virtual_host
     * @param string $capabilities
     * @param bool $insist
     * @return array
     */
    public function connectionOpen($virtual_host = '/', $capabilities = '', $insist = false)
    {
        $writer = new AMQPWriter();
        $writer->write_shortstr($virtual_host);
        $writer->write_shortstr($capabilities);
        $writer->write_bits(array($insist));
        return array(10, 40, $writer);
    }

    /**
     * @param AMQPReader $reader
     * @return array
     */
    public static function connectionOpenOk(AMQPReader $reader)
    {
        $response = array();
        $response[] = $reader->read_shortstr();
        return $response;
    }

    /**
     * @param int $reply_code
     * @param string $reply_text
     * @param int $class_id
     * @param int $method_id
     * @return array
     */
    public function connectionClose($reply_code, $reply_text, $class_id, $method_id)
    {
        $writer = new AMQPWriter();
        $writer->write_short($reply_code);
        $writer->write_shortstr($reply_text);
        $writer->write_short($class_id);
        $writer->write_short($method_id);
        return array(10, 50, $writer);
    }

    /**
     * @param AMQPReader $reader
     * @return array
     */
    public static function connectionCloseOk(AMQPReader $reader)
    {
        $response = array();
        return $response;
    }

    /**
     * @param string $reason
     * @return array
     */
    public function connectionBlocked($reason = '')
    {
        $writer = new AMQPWriter();
        $writer->write_shortstr($reason);
        return array(10, 60, $writer);
    }

    /**
     * @param AMQPReader $reader
     * @return array
     */
    public static function connectionUnblocked(AMQPReader $reader)
    {
        $response = array();
        return $response;
    }

    /**
     * @param string $out_of_band
     * @return array
     */
    public function channelOpen($out_of_band = '')
    {
        $writer = new AMQPWriter();
        $writer->write_shortstr($out_of_band);
        return array(20, 10, $writer);
    }

    /**
     * @param AMQPReader $reader
     * @return array
     */
    public static function channelOpenOk(AMQPReader $reader)
    {
        $response = array();
        $response[] = $reader->read_longstr();
        return $response;
    }

    /**
     * @param bool $active
     * @return array
     */
    public function channelFlow($active)
    {
        $writer = new AMQPWriter();
        $writer->write_bits(array($active));
        return array(20, 20, $writer);
    }

    /**
     * @param AMQPReader $reader
     * @return array
     */
    public static function channelFlowOk(AMQPReader $reader)
    {
        $response = array();
        $response[] = $reader->read_bit();
        return $response;
    }

    /**
     * @param int $reply_code
     * @param string $reply_text
     * @param int $class_id
     * @param int $method_id
     * @return array
     */
    public function channelClose($reply_code, $reply_text, $class_id, $method_id)
    {
        $writer = new AMQPWriter();
        $writer->write_short($reply_code);
        $writer->write_shortstr($reply_text);
        $writer->write_short($class_id);
        $writer->write_short($method_id);
        return array(20, 40, $writer);
    }

    /**
     * @param AMQPReader $reader
     * @return array
     */
    public static function channelCloseOk(AMQPReader $reader)
    {
        $response = array();
        return $response;
    }

    /**
     * @param string $realm
     * @param bool $exclusive
     * @param bool $passive
     * @param bool $active
     * @param bool $write
     * @param bool $read
     * @return array
     */
    public function accessRequest(
        $realm = '/data',
        $exclusive = false,
        $passive = true,
        $active = true,
        $write = true,
        $read = true
    ) {
        $writer = new AMQPWriter();
        $writer->write_shortstr($realm);
        $writer->write_bits(array($exclusive, $passive, $active, $write, $read));
        return array(30, 10, $writer);
    }

    /**
     * @param AMQPReader $reader
     * @return array
     */
    public static function accessRequestOk(AMQPReader $reader)
    {
        $response = array();
        $response[] = $reader->read_short();
        return $response;
    }

    /**
     * @param int $ticket
     * @param string $exchange
     * @param string $type
     * @param bool $passive
     * @param bool $durable
     * @param bool $auto_delete
     * @param bool $internal
     * @param bool $nowait
     * @param \PhpAmqpLib\Wire\AMQPTable|array $arguments
     * @return array
     */
    public function exchangeDeclare(
        $ticket = 0,
        $exchange = '',
        $type = 'direct',
        $passive = false,
        $durable = false,
        $auto_delete = false,
        $internal = false,
        $nowait = false,
        $arguments = array()
    ) {
        $writer = new AMQPWriter();
        $writer->write_short($ticket);
        $writer->write_shortstr($exchange);
        $writer->write_shortstr($type);
        $writer->write_bits(array($passive, $durable, $auto_delete, $internal, $nowait));
        $writer->write_table(empty($arguments) ? array() : $arguments);
        return array(40, 10, $writer);
    }

    /**
     * @param AMQPReader $reader
     * @return array
     */
    public static function exchangeDeclareOk(AMQPReader $reader)
    {
        $response = array();
        return $response;
    }

    /**
     * @param int $ticket
     * @param string $exchange
     * @param bool $if_unused
     * @param bool $nowait
     * @return array
     */
    public function exchangeDelete($ticket = 0, $exchange = '', $if_unused = false, $nowait = false)
    {
        $writer = new AMQPWriter();
        $writer->write_short($ticket);
        $writer->write_shortstr($exchange);
        $writer->write_bits(array($if_unused, $nowait));
        return array(40, 20, $writer);
    }

    /**
     * @param AMQPReader $reader
     * @return array
     */
    public static function exchangeDeleteOk(AMQPReader $reader)
    {
        $response = array();
        return $response;
    }

    /**
     * @param int $ticket
     * @param string $destination
     * @param string $source
     * @param string $routing_key
     * @param bool $nowait
     * @param \PhpAmqpLib\Wire\AMQPTable|array $arguments
     * @return array
     */
    public function exchangeBind(
        $ticket = 0,
        $destination = '',
        $source = '',
        $routing_key = '',
        $nowait = false,
        $arguments = array()
    ) {
        $writer = new AMQPWriter();
        $writer->write_short($ticket);
        $writer->write_shortstr($destination);
        $writer->write_shortstr($source);
        $writer->write_shortstr($routing_key);
        $writer->write_bits(array($nowait));
        $writer->write_table(empty($arguments) ? array() : $arguments);
        return array(40, 30, $writer);
    }

    /**
     * @param AMQPReader $reader
     * @return array
     */
    public static function exchangeBindOk(AMQPReader $reader)
    {
        $response = array();
        return $response;
    }

    /**
     * @param int $ticket
     * @param string $destination
     * @param string $source
     * @param string $routing_key
     * @param bool $nowait
     * @param \PhpAmqpLib\Wire\AMQPTable|array $arguments
     * @return array
     */
    public function exchangeUnbind(
        $ticket = 0,
        $destination = '',
        $source = '',
        $routing_key = '',
        $nowait = false,
        $arguments = array()
    ) {
        $writer = new AMQPWriter();
        $writer->write_short($ticket);
        $writer->write_shortstr($destination);
        $writer->write_shortstr($source);
        $writer->write_shortstr($routing_key);
        $writer->write_bits(array($nowait));
        $writer->write_table(empty($arguments) ? array() : $arguments);
        return array(40, 40, $writer);
    }

    /**
     * @param AMQPReader $reader
     * @return array
     */
    public static function exchangeUnbindOk(AMQPReader $reader)
    {
        $response = array();
        return $response;
    }

    /**
     * @param int $ticket
     * @param string $queue
     * @param bool $passive
     * @param bool $durable
     * @param bool $exclusive
     * @param bool $auto_delete
     * @param bool $nowait
     * @param \PhpAmqpLib\Wire\AMQPTable|array $arguments
     * @return array
     */
    public function queueDeclare(
        $ticket = 0,
        $queue = '',
        $passive = false,
        $durable = false,
        $exclusive = false,
        $auto_delete = false,
        $nowait = false,
        $arguments = array()
    ) {
        $writer = new AMQPWriter();
        $writer->write_short($ticket);
        $writer->write_shortstr($queue);
        $writer->write_bits(array($passive, $durable, $exclusive, $auto_delete, $nowait));
        $writer->write_table(empty($arguments) ? array() : $arguments);
        return array(50, 10, $writer);
    }

    /**
     * @param AMQPReader $reader
     * @return array
     */
    public static function queueDeclareOk(AMQPReader $reader)
    {
        $response = array();
        $response[] = $reader->read_shortstr();
        $response[] = $reader->read_long();
        $response[] = $reader->read_long();
        return $response;
    }

    /**
     * @param int $ticket
     * @param string $queue
     * @param string $exchange
     * @param string $routing_key
     * @param bool $nowait
     * @param \PhpAmqpLib\Wire\AMQPTable|array $arguments
     * @return array
     */
    public function queueBind(
        $ticket = 0,
        $queue = '',
        $exchange = '',
        $routing_key = '',
        $nowait = false,
        $arguments = array()
    ) {
        $writer = new AMQPWriter();
        $writer->write_short($ticket);
        $writer->write_shortstr($queue);
        $writer->write_shortstr($exchange);
        $writer->write_shortstr($routing_key);
        $writer->write_bits(array($nowait));
        $writer->write_table(empty($arguments) ? array() : $arguments);
        return array(50, 20, $writer);
    }

    /**
     * @param AMQPReader $reader
     * @return array
     */
    public static function queueBindOk(AMQPReader $reader)
    {
        $response = array();
        return $response;
    }

    /**
     * @param int $ticket
     * @param string $queue
     * @param bool $nowait
     * @return array
     */
    public function queuePurge($ticket = 0, $queue = '', $nowait = false)
    {
        $writer = new AMQPWriter();
        $writer->write_short($ticket);
        $writer->write_shortstr($queue);
        $writer->write_bits(array($nowait));
        return array(50, 30, $writer);
    }

    /**
     * @param AMQPReader $reader
     * @return array
     */
    public static function queuePurgeOk(AMQPReader $reader)
    {
        $response = array();
        $response[] = $reader->read_long();
        return $response;
    }

    /**
     * @param int $ticket
     * @param string $queue
     * @param bool $if_unused
     * @param bool $if_empty
     * @param bool $nowait
     * @return array
     */
    public function queueDelete($ticket = 0, $queue = '', $if_unused = false, $if_empty = false, $nowait = false)
    {
        $writer = new AMQPWriter();
        $writer->write_short($ticket);
        $writer->write_shortstr($queue);
        $writer->write_bits(array($if_unused, $if_empty, $nowait));
        return array(50, 40, $writer);
    }

    /**
     * @param AMQPReader $reader
     * @return array
     */
    public static function queueDeleteOk(AMQPReader $reader)
    {
        $response = array();
        $response[] = $reader->read_long();
        return $response;
    }

    /**
     * @param int $ticket
     * @param string $queue
     * @param string $exchange
     * @param string $routing_key
     * @param \PhpAmqpLib\Wire\AMQPTable|array $arguments
     * @return array
     */
    public function queueUnbind($ticket = 0, $queue = '', $exchange = '', $routing_key = '', $arguments = array())
    {
        $writer = new AMQPWriter();
        $writer->write_short($ticket);
        $writer->write_shortstr($queue);
        $writer->write_shortstr($exchange);
        $writer->write_shortstr($routing_key);
        $writer->write_table(empty($arguments) ? array() : $arguments);
        return array(50, 50, $writer);
    }

    /**
     * @param AMQPReader $reader
     * @return array
     */
    public static function queueUnbindOk(AMQPReader $reader)
    {
        $response = array();
        return $response;
    }

    /**
     * Specifies QoS
     * 
     * See https://www.rabbitmq.com/consumer-prefetch.html#overview for details
     * 
     * @param int $prefetch_size Default is 0 (Alias for unlimited)
     * @param int $prefetch_count Default is 0 (Alias for unlimited)
     * @param bool $global Default is false, prefetch size and count are applied to each channel consumer separately
     * @return array
     */
    public function basicQos($prefetch_size = 0, $prefetch_count = 0, $global = false)
    {
        $writer = new AMQPWriter();
        $writer->write_long($prefetch_size);
        $writer->write_short($prefetch_count);
        $writer->write_bits(array($global));
        return array(60, 10, $writer);
    }

    /**
     * @param AMQPReader $reader
     * @return array
     */
    public static function basicQosOk(AMQPReader $reader)
    {
        $response = array();
        return $response;
    }

    /**
     * @param int $ticket
     * @param string $queue
     * @param string $consumer_tag
     * @param bool $no_local
     * @param bool $no_ack
     * @param bool $exclusive
     * @param bool $nowait
     * @param \PhpAmqpLib\Wire\AMQPTable|array $arguments
     * @return array
     */
    public function basicConsume(
        $ticket = 0,
        $queue = '',
        $consumer_tag = '',
        $no_local = false,
        $no_ack = false,
        $exclusive = false,
        $nowait = false,
        $arguments = array()
    ) {
        $writer = new AMQPWriter();
        $writer->write_short($ticket);
        $writer->write_shortstr($queue);
        $writer->write_shortstr($consumer_tag);
        $writer->write_bits(array($no_local, $no_ack, $exclusive, $nowait));
        $writer->write_table(empty($arguments) ? array() : $arguments);
        return array(60, 20, $writer);
    }

    /**
     * @param AMQPReader $reader
     * @return array
     */
    public static function basicConsumeOk(AMQPReader $reader)
    {
        $response = array();
        $response[] = $reader->read_shortstr();
        return $response;
    }

    /**
     * @param string $consumer_tag
     * @param bool $nowait
     * @return array
     */
    public function basicCancel($consumer_tag, $nowait = false)
    {
        $writer = new AMQPWriter();
        $writer->write_shortstr($consumer_tag);
        $writer->write_bits(array($nowait));
        return array(60, 30, $writer);
    }

    /**
     * @param AMQPReader $reader
     * @return array
     */
    public static function basicCancelOk(AMQPReader $reader)
    {
        $response = array();
        $response[] = $reader->read_shortstr();
        return $response;
    }

    /**
     * @param int $ticket
     * @param string $exchange
     * @param string $routing_key
     * @param bool $mandatory
     * @param bool $immediate
     * @return array
     */
    public function basicPublish(
        $ticket = 0,
        $exchange = '',
        $routing_key = '',
        $mandatory = false,
        $immediate = false
    ) {
        $writer = new AMQPWriter();
        $writer->write_short($ticket);
        $writer->write_shortstr($exchange);
        $writer->write_shortstr($routing_key);
        $writer->write_bits(array($mandatory, $immediate));
        return array(60, 40, $writer);
    }

    /**
     * @param int $reply_code
     * @param string $reply_text
     * @param string $exchange
     * @param string $routing_key
     * @return array
     */
    public function basicReturn($reply_code, $reply_text, $exchange, $routing_key)
    {
        $writer = new AMQPWriter();
        $writer->write_short($reply_code);
        $writer->write_shortstr($reply_text);
        $writer->write_shortstr($exchange);
        $writer->write_shortstr($routing_key);
        return array(60, 50, $writer);
    }

    /**
     * @param string $consumer_tag
     * @param int $delivery_tag
     * @param bool $redelivered
     * @param string $exchange
     * @param string $routing_key
     * @return array
     */
    public function basicDeliver($consumer_tag, $delivery_tag, $redelivered, $exchange, $routing_key)
    {
        $writer = new AMQPWriter();
        $writer->write_shortstr($consumer_tag);
        $writer->write_longlong($delivery_tag);
        $writer->write_bits(array($redelivered));
        $writer->write_shortstr($exchange);
        $writer->write_shortstr($routing_key);
        return array(60, 60, $writer);
    }

    /**
     * @param int $ticket
     * @param string $queue
     * @param bool $no_ack
     * @return array
     */
    public function basicGet($ticket = 0, $queue = '', $no_ack = false)
    {
        $writer = new AMQPWriter();
        $writer->write_short($ticket);
        $writer->write_shortstr($queue);
        $writer->write_bits(array($no_ack));
        return array(60, 70, $writer);
    }

    /**
     * @param AMQPReader $reader
     * @return array
     */
    public static function basicGetOk(AMQPReader $reader)
    {
        $response = array();
        $response[] = $reader->read_longlong();
        $response[] = $reader->read_bit();
        $response[] = $reader->read_shortstr();
        $response[] = $reader->read_shortstr();
        $response[] = $reader->read_long();
        return $response;
    }

    /**
     * @param AMQPReader $reader
     * @return array
     */
    public static function basicGetEmpty(AMQPReader $reader)
    {
        $response = array();
        $response[] = $reader->read_shortstr();
        return $response;
    }

    /**
     * @param int $delivery_tag
     * @param bool $multiple
     * @return array
     */
    public function basicAck($delivery_tag = 0, $multiple = false)
    {
        $writer = new AMQPWriter();
        $writer->write_longlong($delivery_tag);
        $writer->write_bits(array($multiple));
        return array(60, 80, $writer);
    }

    /**
     * @param int $delivery_tag
     * @param bool $requeue
     * @return array
     */
    public function basicReject($delivery_tag, $requeue = true)
    {
        $writer = new AMQPWriter();
        $writer->write_longlong($delivery_tag);
        $writer->write_bits(array($requeue));
        return array(60, 90, $writer);
    }

    /**
     * @param bool $requeue
     * @return array
     */
    public function basicRecoverAsync($requeue = false)
    {
        $writer = new AMQPWriter();
        $writer->write_bits(array($requeue));
        return array(60, 100, $writer);
    }

    /**
     * @param bool $requeue
     * @return array
     */
    public function basicRecover($requeue = false)
    {
        $writer = new AMQPWriter();
        $writer->write_bits(array($requeue));
        return array(60, 110, $writer);
    }

    /**
     * @param AMQPReader $reader
     * @return array
     */
    public static function basicRecoverOk(AMQPReader $reader)
    {
        $response = array();
        return $response;
    }

    /**
     * @param int $delivery_tag
     * @param bool $multiple
     * @param bool $requeue
     * @return array
     */
    public function basicNack($delivery_tag = 0, $multiple = false, $requeue = true)
    {
        $writer = new AMQPWriter();
        $writer->write_longlong($delivery_tag);
        $writer->write_bits(array($multiple, $requeue));
        return array(60, 120, $writer);
    }

    /**

     * @return array
     */
    public function txSelect()
    {
        $writer = new AMQPWriter();
        return array(90, 10, $writer);
    }

    /**
     * @param AMQPReader $reader
     * @return array
     */
    public static function txSelectOk(AMQPReader $reader)
    {
        $response = array();
        return $response;
    }

    /**

     * @return array
     */
    public function txCommit()
    {
        $writer = new AMQPWriter();
        return array(90, 20, $writer);
    }

    /**
     * @param AMQPReader $reader
     * @return array
     */
    public static function txCommitOk(AMQPReader $reader)
    {
        $response = array();
        return $response;
    }

    /**

     * @return array
     */
    public function txRollback()
    {
        $writer = new AMQPWriter();
        return array(90, 30, $writer);
    }

    /**
     * @param AMQPReader $reader
     * @return array
     */
    public static function txRollbackOk(AMQPReader $reader)
    {
        $response = array();
        return $response;
    }

    /**
     * @param bool $nowait
     * @return array
     */
    public function confirmSelect($nowait = false)
    {
        $writer = new AMQPWriter();
        $writer->write_bits(array($nowait));
        return array(85, 10, $writer);
    }

    /**
     * @param AMQPReader $reader
     * @return array
     */
    public static function confirmSelectOk(AMQPReader $reader)
    {
        $response = array();
        return $response;
    }
}
<?php

/* This file was autogenerated by spec/parser.php - Do not modify */

namespace PhpAmqpLib\Helper\Protocol;

class Wait080
{
    /**
     * @var array
     */
    protected $wait = array(
        'connection.start' => '10,10',
        'connection.start_ok' => '10,11',
        'connection.secure' => '10,20',
        'connection.secure_ok' => '10,21',
        'connection.tune' => '10,30',
        'connection.tune_ok' => '10,31',
        'connection.open' => '10,40',
        'connection.open_ok' => '10,41',
        'connection.redirect' => '10,50',
        'connection.close' => '10,60',
        'connection.close_ok' => '10,61',
        'channel.open' => '20,10',
        'channel.open_ok' => '20,11',
        'channel.flow' => '20,20',
        'channel.flow_ok' => '20,21',
        'channel.alert' => '20,30',
        'channel.close' => '20,40',
        'channel.close_ok' => '20,41',
        'access.request' => '30,10',
        'access.request_ok' => '30,11',
        'exchange.declare' => '40,10',
        'exchange.declare_ok' => '40,11',
        'exchange.delete' => '40,20',
        'exchange.delete_ok' => '40,21',
        'queue.declare' => '50,10',
        'queue.declare_ok' => '50,11',
        'queue.bind' => '50,20',
        'queue.bind_ok' => '50,21',
        'queue.purge' => '50,30',
        'queue.purge_ok' => '50,31',
        'queue.delete' => '50,40',
        'queue.delete_ok' => '50,41',
        'queue.unbind' => '50,50',
        'queue.unbind_ok' => '50,51',
        'basic.qos' => '60,10',
        'basic.qos_ok' => '60,11',
        'basic.consume' => '60,20',
        'basic.consume_ok' => '60,21',
        'basic.cancel' => '60,30',
        'basic.cancel_ok' => '60,31',
        'basic.publish' => '60,40',
        'basic.return' => '60,50',
        'basic.deliver' => '60,60',
        'basic.get' => '60,70',
        'basic.get_ok' => '60,71',
        'basic.get_empty' => '60,72',
        'basic.ack' => '60,80',
        'basic.reject' => '60,90',
        'basic.recover_async' => '60,100',
        'basic.recover' => '60,110',
        'basic.recover_ok' => '60,111',
        'file.qos' => '70,10',
        'file.qos_ok' => '70,11',
        'file.consume' => '70,20',
        'file.consume_ok' => '70,21',
        'file.cancel' => '70,30',
        'file.cancel_ok' => '70,31',
        'file.open' => '70,40',
        'file.open_ok' => '70,41',
        'file.stage' => '70,50',
        'file.publish' => '70,60',
        'file.return' => '70,70',
        'file.deliver' => '70,80',
        'file.ack' => '70,90',
        'file.reject' => '70,100',
        'stream.qos' => '80,10',
        'stream.qos_ok' => '80,11',
        'stream.consume' => '80,20',
        'stream.consume_ok' => '80,21',
        'stream.cancel' => '80,30',
        'stream.cancel_ok' => '80,31',
        'stream.publish' => '80,40',
        'stream.return' => '80,50',
        'stream.deliver' => '80,60',
        'tx.select' => '90,10',
        'tx.select_ok' => '90,11',
        'tx.commit' => '90,20',
        'tx.commit_ok' => '90,21',
        'tx.rollback' => '90,30',
        'tx.rollback_ok' => '90,31',
        'dtx.select' => '100,10',
        'dtx.select_ok' => '100,11',
        'dtx.start' => '100,20',
        'dtx.start_ok' => '100,21',
        'tunnel.request' => '110,10',
        'test.integer' => '120,10',
        'test.integer_ok' => '120,11',
        'test.string' => '120,20',
        'test.string_ok' => '120,21',
        'test.table' => '120,30',
        'test.table_ok' => '120,31',
        'test.content' => '120,40',
        'test.content_ok' => '120,41',
    );

    /**
     * @var string $method
     * @return string
     */
    public function get_wait($method)
    {
        return $this->wait[$method];
    }
}
<?php

/* This file was autogenerated by spec/parser.php - Do not modify */

namespace PhpAmqpLib\Helper\Protocol;

class Wait091
{
    /**
     * @var array
     */
    protected $wait = array(
        'connection.start' => '10,10',
        'connection.start_ok' => '10,11',
        'connection.secure' => '10,20',
        'connection.secure_ok' => '10,21',
        'connection.tune' => '10,30',
        'connection.tune_ok' => '10,31',
        'connection.open' => '10,40',
        'connection.open_ok' => '10,41',
        'connection.close' => '10,50',
        'connection.close_ok' => '10,51',
        'connection.blocked' => '10,60',
        'connection.unblocked' => '10,61',
        'channel.open' => '20,10',
        'channel.open_ok' => '20,11',
        'channel.flow' => '20,20',
        'channel.flow_ok' => '20,21',
        'channel.close' => '20,40',
        'channel.close_ok' => '20,41',
        'access.request' => '30,10',
        'access.request_ok' => '30,11',
        'exchange.declare' => '40,10',
        'exchange.declare_ok' => '40,11',
        'exchange.delete' => '40,20',
        'exchange.delete_ok' => '40,21',
        'exchange.bind' => '40,30',
        'exchange.bind_ok' => '40,31',
        'exchange.unbind' => '40,40',
        'exchange.unbind_ok' => '40,51',
        'queue.declare' => '50,10',
        'queue.declare_ok' => '50,11',
        'queue.bind' => '50,20',
        'queue.bind_ok' => '50,21',
        'queue.purge' => '50,30',
        'queue.purge_ok' => '50,31',
        'queue.delete' => '50,40',
        'queue.delete_ok' => '50,41',
        'queue.unbind' => '50,50',
        'queue.unbind_ok' => '50,51',
        'basic.qos' => '60,10',
        'basic.qos_ok' => '60,11',
        'basic.consume' => '60,20',
        'basic.consume_ok' => '60,21',
        'basic.cancel' => '60,30',
        'basic.cancel_ok' => '60,31',
        'basic.publish' => '60,40',
        'basic.return' => '60,50',
        'basic.deliver' => '60,60',
        'basic.get' => '60,70',
        'basic.get_ok' => '60,71',
        'basic.get_empty' => '60,72',
        'basic.ack' => '60,80',
        'basic.reject' => '60,90',
        'basic.recover_async' => '60,100',
        'basic.recover' => '60,110',
        'basic.recover_ok' => '60,111',
        'basic.nack' => '60,120',
        'tx.select' => '90,10',
        'tx.select_ok' => '90,11',
        'tx.commit' => '90,20',
        'tx.commit_ok' => '90,21',
        'tx.rollback' => '90,30',
        'tx.rollback_ok' => '90,31',
        'confirm.select' => '85,10',
        'confirm.select_ok' => '85,11',
    );

    /**
     * @var string $method
     * @return string
     */
    public function get_wait($method)
    {
        return $this->wait[$method];
    }
}
<?php

namespace PhpAmqpLib\Helper;

/**
 * @property-read int $SOCKET_EPIPE
 * @property-read int $SOCKET_ENETDOWN
 * @property-read int $SOCKET_ENETUNREACH
 * @property-read int $SOCKET_ENETRESET
 * @property-read int $SOCKET_ECONNABORTED
 * @property-read int $SOCKET_ECONNRESET
 * @property-read int $SOCKET_ECONNREFUSED
 * @property-read int $SOCKET_ETIMEDOUT
 * @property-read int $SOCKET_EWOULDBLOCK
 * @property-read int $SOCKET_EINTR
 * @property-read int $SOCKET_EAGAIN
 */
final class SocketConstants
{
    /**
     * @var int[]
     */
    private $constants;

    /** @var self */
    private static $instance;

    public function __construct()
    {
        $constants = get_defined_constants(true);
        if (isset($constants['sockets'])) {
            $this->constants = $constants['sockets'];
        } else {
            trigger_error('Sockets extension is not enabled', E_USER_WARNING);
            $this->constants = array();
        }
    }

    /**
     * @param string $name
     * @return int
     */
    public function __get($name)
    {
        return isset($this->constants[$name]) ? $this->constants[$name] : 0;
    }

    /**
     * @param string $name
     * @param int $value
     * @internal
     */
    public function __set($name, $value)
    {
    }

    /**
     * @param string $name
     * @return bool
     */
    public function __isset($name)
    {
        return isset($this->constants[$name]);
    }

    /**
     * @return self
     */
    public static function getInstance()
    {
        if (!self::$instance) {
            self::$instance = new self();
        }

        return self::$instance;
    }
}
<?php

namespace PhpAmqpLib\Message;

use PhpAmqpLib\Channel\AMQPChannel;
use PhpAmqpLib\Exception\AMQPEmptyDeliveryTagException;
use PhpAmqpLib\Wire\AMQPReader;
use PhpAmqpLib\Wire\AMQPWriter;

/**
 * A Message for use with the Channnel.basic_* methods.
 */
class AMQPMessage
{
    const DELIVERY_MODE_NON_PERSISTENT = 1;
    const DELIVERY_MODE_PERSISTENT = 2;

    /**
     * @var string
     * @deprecated Will be removed in version 4.0, use getBody() instead.
     */
    public $body;

    /**
     * @var int
     * @deprecated Will be removed in version 4.0, use getBodySize() instead.
     */
    public $body_size;

    /**
     * @var bool
     * @deprecated Will be removed in version 4.0, use isTruncated() instead.
     */
    public $is_truncated = false;

    /**
     * @var string
     * @deprecated Will be removed in version 4.0, use getContentEncoding() instead.
     */
    public $content_encoding;

    /** @var int */
    private $deliveryTag;

    /** @var string|null */
    private $consumerTag;

    /** @var bool|null */
    private $redelivered;

    /** @var string|null */
    private $exchange;

    /** @var string|null */
    private $routingKey;

    /** @var int|null */
    private $messageCount;

    /** @var AMQPChannel|null */
    private $channel;

    /** @var bool */
    private $responded = false;

    /**
     * @var array
     * @internal
     * @deprecated Will be removed in version 4.0, use one of getters to get delivery info.
     */
    public $delivery_info = array();

    /** @var array Properties content */
    protected $properties = array();

    /** @var null|string Compiled properties */
    protected $serialized_properties;

    /** @var array */
    protected static $propertyDefinitions = array(
        'content_type' => 'shortstr',
        'content_encoding' => 'shortstr',
        'application_headers' => 'table_object',
        'delivery_mode' => 'octet',
        'priority' => 'octet',
        'correlation_id' => 'shortstr',
        'reply_to' => 'shortstr',
        'expiration' => 'shortstr',
        'message_id' => 'shortstr',
        'timestamp' => 'timestamp',
        'type' => 'shortstr',
        'user_id' => 'shortstr',
        'app_id' => 'shortstr',
        'cluster_id' => 'shortstr',
    );

    /**
     * @param string $body
     * @param array $properties
     */
    public function __construct($body = '', $properties = array())
    {
        $this->setBody($body);

        if (!empty($properties) && is_array($properties)) {
            $this->properties = array_intersect_key($properties, self::$propertyDefinitions);
        }
    }

    /**
     * Acknowledge one or more messages.
     *
     * @param bool $multiple If true, the delivery tag is treated as "up to and including",
     *                       so that multiple messages can be acknowledged with a single method.
     * @since 2.12.0
     * @link https://www.rabbitmq.com/amqp-0-9-1-reference.html#basic.ack
     */
    public function ack($multiple = false)
    {
        $this->assertUnacked();
        $this->channel->basic_ack($this->deliveryTag, $multiple);
        $this->onResponse();
    }

    /**
     * Reject one or more incoming messages.
     *
     * @param bool $requeue If true, the server will attempt to requeue the message. If requeue is false or the requeue
     *                       attempt fails the messages are discarded or dead-lettered.
     * @param bool $multiple If true, the delivery tag is treated as "up to and including",
     *                       so that multiple messages can be rejected with a single method.
     * @since 2.12.0
     * @link https://www.rabbitmq.com/amqp-0-9-1-reference.html#basic.nack
     */
    public function nack($requeue = false, $multiple = false)
    {
        $this->assertUnacked();
        $this->channel->basic_nack($this->deliveryTag, $multiple, $requeue);
        $this->onResponse();
    }

    /**
     * Reject an incoming message.
     *
     * @param bool $requeue If requeue is true, the server will attempt to requeue the message.
     *                     If requeue is false or the requeue attempt fails the messages are discarded or dead-lettered.
     * @since 2.12.0
     * @link https://www.rabbitmq.com/amqp-0-9-1-reference.html#basic.reject
     */
    public function reject($requeue = true)
    {
        $this->assertUnacked();
        $this->channel->basic_reject($this->deliveryTag, $requeue);
        $this->onResponse();
    }

    /**
     * @throws \LogicException When response to broker was already sent.
     */
    protected function assertUnacked()
    {
        if (!$this->channel || $this->responded) {
            throw new \LogicException('Message is not published or response was already sent');
        }
    }

    protected function onResponse()
    {
        $this->responded = true;
    }

    /**
     * @return AMQPChannel|null
     * @since 2.12.0
     */
    public function getChannel()
    {
        return $this->channel;
    }

    /**
     * @param AMQPChannel $channel
     * @return $this
     * @throws \RuntimeException
     * @since 2.12.0
     */
    public function setChannel($channel)
    {
        if ($this->channel) {
            throw new \RuntimeException('A message is already assigned to channel');
        }
        $this->channel = $channel;
        $this->delivery_info['channel'] = $channel;

        return $this;
    }

    /**
     * @param int $deliveryTag
     * @param bool $redelivered
     * @param string $exchange
     * @param string $routingKey
     * @return $this
     * @since 2.12.0
     */
    public function setDeliveryInfo($deliveryTag, $redelivered, $exchange, $routingKey)
    {
        $this->deliveryTag = $this->delivery_info['delivery_tag'] = $deliveryTag;
        $this->redelivered = $this->delivery_info['redelivered'] = $redelivered;
        $this->exchange = $this->delivery_info['exchange'] = $exchange;
        $this->routingKey = $this->delivery_info['routing_key'] = $routingKey;

        return $this;
    }

    /**
     * @return bool|null
     * @since 2.12.0
     */
    public function isRedelivered()
    {
        return $this->redelivered;
    }

    /**
     * @return string|null
     * @since 2.12.0
     */
    public function getExchange()
    {
        return $this->exchange;
    }

    /**
     * @return string|null
     * @since 2.12.0
     */
    public function getRoutingKey()
    {
        return $this->routingKey;
    }

    /**
     * @return string|null
     * @since 2.12.0
     */
    public function getConsumerTag()
    {
        return $this->consumerTag;
    }

    /**
     * @param string $consumerTag
     * @return $this
     * @since 2.12.0
     */
    public function setConsumerTag($consumerTag)
    {
        $this->consumerTag = $consumerTag;
        $this->delivery_info['consumer_tag'] = $consumerTag;

        return $this;
    }

    /**
     * @return int|null
     * @since 2.12.0
     */
    public function getMessageCount()
    {
        return $this->messageCount;
    }

    /**
     * @param int $messageCount
     * @return $this
     * @since 2.12.0
     */
    public function setMessageCount($messageCount)
    {
        $this->messageCount = (int)$messageCount;
        $this->delivery_info['message_count'] = $this->messageCount;

        return $this;
    }

    /**
     * @return string
     */
    public function getBody()
    {
        return $this->body;
    }

    /**
     * Sets the message payload
     *
     * @param string $body
     * @return $this
     */
    public function setBody($body)
    {
        $this->body = $body;

        return $this;
    }

    /**
     * @return string
     */
    public function getContentEncoding()
    {
        return $this->content_encoding;
    }

    /**
     * @return int
     */
    public function getBodySize()
    {
        return $this->body_size;
    }

    /**
     * @param int $body_size Message body size in byte(s)
     * @return AMQPMessage
     */
    public function setBodySize($body_size)
    {
        $this->body_size = (int)$body_size;

        return $this;
    }

    /**
     * @return boolean
     */
    public function isTruncated()
    {
        return $this->is_truncated;
    }

    /**
     * @param bool $is_truncated
     * @return AMQPMessage
     */
    public function setIsTruncated($is_truncated)
    {
        $this->is_truncated = (bool)$is_truncated;

        return $this;
    }

    /**
     * @param int|string $deliveryTag
     * @return $this
     * @since 2.12.0
     */
    public function setDeliveryTag($deliveryTag)
    {
        if (!empty($this->deliveryTag)) {
            throw new \LogicException('Delivery tag cannot be changed');
        }
        $this->deliveryTag = $deliveryTag;
        $this->delivery_info['delivery_tag'] = $deliveryTag;

        return $this;
    }

    /**
     * @return int
     *
     * @throws AMQPEmptyDeliveryTagException
     */
    public function getDeliveryTag()
    {
        if (empty($this->deliveryTag)) {
            throw new AMQPEmptyDeliveryTagException('This message was not delivered yet');
        }

        return $this->deliveryTag;
    }

    /**
     * Check whether a property exists in the 'properties' dictionary
     * or if present - in the 'delivery_info' dictionary.
     *
     * @param string $name
     * @return bool
     */
    public function has($name)
    {
        return isset($this->properties[$name]) || isset($this->delivery_info[$name]);
    }

    /**
     * Look for additional properties in the 'properties' dictionary,
     * and if present - the 'delivery_info' dictionary.
     *
     * @param string $name
     * @return mixed|AMQPChannel
     * @throws \OutOfBoundsException
     */
    public function get($name)
    {
        if (isset($this->properties[$name])) {
            return $this->properties[$name];
        }

        if (isset($this->delivery_info[$name])) {
            return $this->delivery_info[$name];
        }

        throw new \OutOfBoundsException(sprintf(
            'No "%s" property',
            $name
        ));
    }

    /**
     * Returns the properties content
     *
     * @return array
     */
    public function get_properties()
    {
        return $this->properties;
    }

    /**
     * Sets a property value
     *
     * @param string $name The property name (one of the property definition)
     * @param mixed $value The property value
     * @throws \OutOfBoundsException
     */
    public function set($name, $value)
    {
        if (!array_key_exists($name, self::$propertyDefinitions)) {
            throw new \OutOfBoundsException(sprintf(
                'No "%s" property',
                $name
            ));
        }

        if (isset($this->properties[$name]) && $this->properties[$name] === $value) {
            // same value, nothing to do
            return;
        }

        $this->properties[$name] = $value;
        $this->serialized_properties = null;
    }

    /**
     * Given the raw bytes containing the property-flags and
     * property-list from a content-frame-header, parse and insert
     * into a dictionary stored in this object as an attribute named
     * 'properties'.
     *
     * @param AMQPReader $reader
     * NOTE: do not mutate $reader
     * @return $this
     */
    public function load_properties(AMQPReader $reader)
    {
        // Read 16-bit shorts until we get one with a low bit set to zero
        $flags = array();

        while (true) {
            $flag_bits = $reader->read_short();
            $flags[] = $flag_bits;

            if (($flag_bits & 1) === 0) {
                break;
            }
        }

        $shift = 0;
        $data = array();

        foreach (self::$propertyDefinitions as $key => $proptype) {
            if ($shift === 0) {
                if (!$flags) {
                    break;
                }
                $flag_bits = array_shift($flags);
                $shift = 15;
            }

            if ($flag_bits & (1 << $shift)) {
                $data[$key] = $reader->{'read_' . $proptype}();
            }

            $shift -= 1;
        }

        $this->properties = $data;

        return $this;
    }


    /**
     * Serializes the 'properties' attribute (a dictionary) into the
     * raw bytes making up a set of property flags and a property
     * list, suitable for putting into a content frame header.
     *
     * @return string
     * @todo Inject the AMQPWriter to make the method easier to test
     */
    public function serialize_properties()
    {
        if (!empty($this->serialized_properties)) {
            return $this->serialized_properties;
        }

        $shift = 15;
        $flag_bits = 0;
        $flags = array();
        $raw_bytes = new AMQPWriter();

        foreach (self::$propertyDefinitions as $key => $prototype) {
            $val = isset($this->properties[$key]) ? $this->properties[$key] : null;

            // Very important: PHP type eval is weak, use the === to test the
            // value content. Zero or false value should not be removed
            if ($val === null) {
                $shift -= 1;
                continue;
            }

            if ($shift === 0) {
                $flags[] = $flag_bits;
                $flag_bits = 0;
                $shift = 15;
            }

            $flag_bits |= (1 << $shift);
            if ($prototype !== 'bit') {
                $raw_bytes->{'write_' . $prototype}($val);
            }

            $shift -= 1;
        }

        $flags[] = $flag_bits;
        $result = new AMQPWriter();
        foreach ($flags as $flag_bits) {
            $result->write_short($flag_bits);
        }

        $result->write($raw_bytes->getvalue());

        $this->serialized_properties = $result->getvalue();

        return $this->serialized_properties;
    }
}
<?php

namespace PhpAmqpLib;

final class Package
{
    public const NAME = 'AMQPLib';
    public const VERSION = '3.7.3';
}
<?php

namespace PhpAmqpLib\Wire;

use PhpAmqpLib\Channel\AbstractChannel;
use PhpAmqpLib\Exception;
use PhpAmqpLib\Wire;

/**
 * Iterator implemented for transparent integration with AMQPWriter::write_[array|table]()
 */
abstract class AMQPAbstractCollection implements \Iterator, \ArrayAccess
{
    //protocol defines available field types and their corresponding symbols
    const PROTOCOL_RBT = 'rabbit'; //pseudo proto

    //Abstract data types
    const T_INT_SHORTSHORT = 1;
    const T_INT_SHORTSHORT_U = 2;
    const T_INT_SHORT = 3;
    const T_INT_SHORT_U = 4;
    const T_INT_LONG = 5;
    const T_INT_LONG_U = 6;
    const T_INT_LONGLONG = 7;
    const T_INT_LONGLONG_U = 8;

    const T_DECIMAL = 9;
    const T_TIMESTAMP = 10;
    const T_VOID = 11;

    const T_BOOL = 12;

    const T_STRING_SHORT = 13;
    const T_STRING_LONG = 14;

    const T_ARRAY = 15;
    const T_TABLE = 16;

    const T_BYTES = 17;

    const T_FLOAT = 18;
    const T_DOUBLE = 19;

    /**
     * @var string
     */
    private static $protocol;

    /*
     * Field types messy mess http://www.rabbitmq.com/amqp-0-9-1-errata.html#section_3
     * Default behaviour is to use rabbitMQ compatible field-set
     * Define AMQP_STRICT_FLD_TYPES=true to use strict AMQP instead
     * @var array<int, string>
     * @deprecated
     */
    private static $types_080 = array(
        self::T_INT_LONG => 'I',
        self::T_DECIMAL => 'D',
        self::T_TIMESTAMP => 'T',
        self::T_STRING_LONG => 'S',
        self::T_TABLE => 'F'
    );

    /**
     * @var array<int, string>
     */
    private static $types_091 = array(
        self::T_INT_SHORTSHORT => 'b',
        self::T_INT_SHORTSHORT_U => 'B',
        self::T_INT_SHORT => 'U',
        self::T_INT_SHORT_U => 'u',
        self::T_INT_LONG => 'I',
        self::T_INT_LONG_U => 'i',
        self::T_INT_LONGLONG => 'L',
        self::T_INT_LONGLONG_U => 'l',
        self::T_FLOAT => 'f',
        self::T_DOUBLE => 'd',
        self::T_DECIMAL => 'D',
        self::T_TIMESTAMP => 'T',
        self::T_VOID => 'V',
        self::T_BOOL => 't',
        self::T_STRING_SHORT => 's',
        self::T_STRING_LONG => 'S',
        self::T_ARRAY => 'A',
        self::T_TABLE => 'F',
        self::T_BYTES => 'x',
    );

    /**
     * @var array<int, string>
     */
    private static $types_rabbit = array(
        self::T_INT_SHORTSHORT => 'b',
        self::T_INT_SHORTSHORT_U => 'B',
        self::T_INT_SHORT => 's',
        self::T_INT_SHORT_U => 'u',
        self::T_INT_LONG => 'I',
        self::T_INT_LONG_U => 'i',
        self::T_INT_LONGLONG => 'l',
        self::T_FLOAT => 'f',
        self::T_DOUBLE => 'd',
        self::T_DECIMAL => 'D',
        self::T_TIMESTAMP => 'T',
        self::T_VOID => 'V',
        self::T_BOOL => 't',
        self::T_STRING_LONG => 'S',
        self::T_ARRAY => 'A',
        self::T_TABLE => 'F',
        self::T_BYTES => 'x',
    );

    /**
     * @var array
     */
    protected $data = array();

    public function __construct(?array $data = null)
    {
        if (!empty($data)) {
            $this->data = $this->encodeCollection($data);
        }
    }

    /**
     * @return int
     */
    abstract public function getType();

    /**
     * @param mixed $val
     * @param int|null $type
     * @param string $key
     */
    final protected function setValue($val, $type = null, $key = null)
    {
        if ($val instanceof self) {
            if ($type && ($type !== $val->getType())) {
                throw new Exception\AMQPInvalidArgumentException(
                    sprintf(
                        'Attempted to add instance of %s representing type [%s] as mismatching type [%s]',
                        get_class($val),
                        $val->getType(),
                        $type
                    )
                );
            }
            $type = $val->getType();
        } elseif ($type) { //ensuring data integrity and that all members are properly validated
            switch ($type) {
                case self::T_ARRAY:
                    throw new Exception\AMQPInvalidArgumentException('Arrays must be passed as AMQPArray instance');
                case self::T_TABLE:
                    throw new Exception\AMQPInvalidArgumentException('Tables must be passed as AMQPTable instance');
                case self::T_DECIMAL:
                    if (!($val instanceof AMQPDecimal)) {
                        throw new Exception\AMQPInvalidArgumentException(
                            'Decimal values must be instance of AMQPDecimal'
                        );
                    }
                    break;
            }
        }

        if ($type) {
            self::checkDataTypeIsSupported($type, false);
            $val = array($type, $val);
        } else {
            $val = $this->encodeValue($val);
        }

        if ($key === null) {
            $this->data[] = $val;
        } else {
            $this->data[$key] = $val;
        }
    }

    /**
     * @return array
     */
    final public function getNativeData()
    {
        return $this->decodeCollection($this->data);
    }

    /**
     * @param array $val
     * @return array
     */
    final protected function encodeCollection(array $val)
    {
        foreach ($val as $k => $v) {
            $val[$k] = $this->encodeValue($v);
        }

        return $val;
    }

    /**
     * @param array $val
     * @return array
     */
    final protected function decodeCollection(array $val)
    {
        foreach ($val as $k => $v) {
            $val[$k] = $this->decodeValue($v[1], $v[0]);
        }

        return $val;
    }

    public function offsetExists($offset): bool
    {
        return isset($this->data[$offset]);
    }

    /**
     * @param mixed $offset
     * @return mixed
     */
    #[\ReturnTypeWillChange]
    public function offsetGet($offset)
    {
        $value = isset($this->data[$offset]) ? $this->data[$offset] : null;

        return is_array($value) ? $value[1] : $value;
    }

    public function offsetSet($offset, $value): void
    {
        $this->setValue($value, null, $offset);
    }

    public function offsetUnset($offset): void
    {
        unset($this->data[$offset]);
    }

    /**
     * @param mixed $val
     * @return mixed
     * @throws Exception\AMQPOutOfBoundsException
     */
    protected function encodeValue($val)
    {
        if (is_string($val)) {
            $val = $this->encodeString($val);
        } elseif (is_float($val)) {
            $val = $this->encodeFloat($val);
        } elseif (is_int($val)) {
            $val = $this->encodeInt($val);
        } elseif (is_bool($val)) {
            $val = $this->encodeBool($val);
        } elseif (is_null($val)) {
            $val = $this->encodeVoid();
        } elseif ($val instanceof \DateTimeInterface) {
            $val = array(self::T_TIMESTAMP, $val->getTimestamp());
        } elseif ($val instanceof AMQPDecimal) {
            $val = array(self::T_DECIMAL, $val);
        } elseif ($val instanceof self) {
            //avoid silent type correction of strictly typed values
            self::checkDataTypeIsSupported($val->getType(), false);
            $val = array($val->getType(), $val);
        } elseif (is_array($val)) {
            //AMQP specs says "Field names MUST start with a letter, '$' or '#'"
            //so beware, some servers may raise an exception with 503 code in cases when indexed
            // array is encoded as table
            if (self::isProtocol(Wire\Constants080::VERSION)) {
                //080 doesn't support arrays, forcing table
                $val = array(self::T_TABLE, new AMQPTable($val));
            } elseif (empty($val) || (array_keys($val) === range(0, count($val) - 1))) {
                $val = array(self::T_ARRAY, new AMQPArray($val));
            } else {
                $val = array(self::T_TABLE, new AMQPTable($val));
            }
        } else {
            throw new Exception\AMQPOutOfBoundsException(
                sprintf('Encountered value of unsupported type: %s', gettype($val))
            );
        }

        return $val;
    }

    /**
     * @param mixed $val
     * @param int $type
     * @return array|bool|\DateTime|null
     */
    protected function decodeValue($val, $type)
    {
        if ($val instanceof self) {
            //covering arrays and tables
            $val = $val->getNativeData();
        } else {
            switch ($type) {
                case self::T_BOOL:
                    $val = (bool) $val;
                    break;
                case self::T_TIMESTAMP:
                    $val = \DateTime::createFromFormat('U', $val);
                    break;
                case self::T_VOID:
                    $val = null;
                    break;
                case self::T_ARRAY:
                case self::T_TABLE:
                    throw new Exception\AMQPLogicException(
                        sprintf(
                            '%s %s',
                            'Encountered an array/table struct which is not an instance of AMQPCollection.',
                            'This is considered a bug and should be fixed, please report'
                        )
                    );
            }
        }

        return $val;
    }

    /**
     * @param string $val
     * @return array
     */
    protected function encodeString($val)
    {
        return array(self::T_STRING_LONG, $val);
    }

    /**
     * @param int $val
     * @return array
     */
    protected function encodeInt($val)
    {
        if (($val >= -2147483648) && ($val <= 2147483647)) {
            $ev = array(self::T_INT_LONG, $val);
        } elseif (self::isProtocol(Wire\Constants080::VERSION)) {
            //080 doesn't support longlong
            $ev = $this->encodeString((string) $val);
        } else {
            $ev = array(self::T_INT_LONGLONG, $val);
        }

        return $ev;
    }

    /**
     * @param float $val
     * @return array
     */
    protected function encodeFloat($val)
    {
        return $this->encodeString((string) $val);
    }

    /**
     * @param bool $val
     * @return array
     */
    protected function encodeBool($val)
    {
        $val = (bool) $val;

        return self::isProtocol(Wire\Constants080::VERSION)
            ? array(self::T_INT_LONG, (int) $val)
            : array(self::T_BOOL, $val);
    }

    /**
     * @return array
     */
    protected function encodeVoid()
    {
        return self::isProtocol(Wire\Constants080::VERSION) ? $this->encodeString('') : array(self::T_VOID, null);
    }

    /**
     * @return string
     * @deprecated
     */
    final public static function getProtocol()
    {
        if (self::$protocol === null) {
            self::$protocol = defined('AMQP_STRICT_FLD_TYPES') && AMQP_STRICT_FLD_TYPES ?
                AbstractChannel::getProtocolVersion() :
                self::PROTOCOL_RBT;
        }

        return self::$protocol;
    }

    /**
     * @param string $proto
     * @return bool
     */
    final public static function isProtocol($proto)
    {
        return self::getProtocol() === $proto;
    }

    /**
     * @return array  [dataTypeConstant => dataTypeSymbol]
     */
    final public static function getSupportedDataTypes()
    {
        switch ($proto = self::getProtocol()) {
            case Wire\Constants080::VERSION:
                $types = self::$types_080;
                break;
            case Wire\Constants091::VERSION:
                $types = self::$types_091;
                break;
            case self::PROTOCOL_RBT:
                $types = self::$types_rabbit;
                break;
            default:
                throw new Exception\AMQPOutOfRangeException(sprintf('Unknown protocol: %s', $proto));
        }

        return $types;
    }

    /**
     * @param string $type
     * @param bool $return Whether to return or raise AMQPOutOfRangeException
     * @return boolean
     */
    final public static function checkDataTypeIsSupported($type, $return = true)
    {
        try {
            $supported = self::getSupportedDataTypes();
            if (!isset($supported[$type])) {
                throw new Exception\AMQPOutOfRangeException(sprintf(
                    'AMQP-%s doesn\'t support data of type [%s]',
                    self::getProtocol(),
                    $type
                ));
            }
            return true;
        } catch (Exception\AMQPOutOfRangeException $ex) {
            if (!$return) {
                throw $ex;
            }

            return false;
        }
    }

    /**
     * @param int $type
     * @return string
     */
    final public static function getSymbolForDataType($type)
    {
        $types = self::getSupportedDataTypes();
        if (!isset($types[$type])) {
            throw new Exception\AMQPOutOfRangeException(sprintf(
                'AMQP-%s doesn\'t support data of type [%s]',
                self::getProtocol(),
                $type
            ));
        }

        return $types[$type];
    }

    /**
     * @param string $symbol
     * @return integer
     */
    final public static function getDataTypeForSymbol($symbol)
    {
        $symbols = array_flip(self::getSupportedDataTypes());
        if (!isset($symbols[$symbol])) {
            throw new Exception\AMQPOutOfRangeException(sprintf(
                'AMQP-%s doesn\'t define data of type [%s]',
                self::getProtocol(),
                $symbol
            ));
        }

        return $symbols[$symbol];
    }

    /**
     * @return mixed
     */
    #[\ReturnTypeWillChange]
    public function current()
    {
        return current($this->data);
    }

    /**
     * @return mixed
     */
    #[\ReturnTypeWillChange]
    public function key()
    {
        return key($this->data);
    }

    public function next(): void
    {
        next($this->data);
    }

    public function rewind(): void
    {
        reset($this->data);
    }

    public function valid(): bool
    {
        return key($this->data) !== null;
    }
}
<?php

namespace PhpAmqpLib\Wire;

class AMQPArray extends AMQPAbstractCollection
{

    /**
     * @param array|null $data
     */
    public function __construct(?array $data = null)
    {
        parent::__construct(empty($data) ? null : array_values($data));
    }

    /**
     * @return int
     */
    final public function getType()
    {
        return self::T_ARRAY;
    }

    /**
     * @param mixed $val
     * @param int|null $type
     * @return $this
     */
    public function push($val, $type = null)
    {
        $this->setValue($val, $type);

        return $this;
    }
}
<?php

namespace PhpAmqpLib\Wire;

use PhpAmqpLib\Exception\AMQPDataReadException;

class AMQPBufferReader extends AMQPReader
{
    /**
     * @var string
     */
    private $buffer;

    /**
     * @var int
     */
    private $length;

    public function __construct(string $buffer)
    {
        $this->buffer = $buffer;
        $this->length = mb_strlen($buffer, 'ASCII');
    }

    public function close(): void
    {
    }

    /**
     * Resets the object from the injected param
     *
     * Used to not need to create a new AMQPBufferReader instance every time.
     * when we can just pass a string and reset the object state.
     * NOTE: since we are working with strings we don't need to pass an AbstractIO
     *       or a timeout.
     *
     * @param string $str
     */
    public function reset(string $str): void
    {
        $this->buffer = $str;
        $this->length = mb_strlen($this->buffer, 'ASCII');
        $this->offset = 0;
        $this->resetCounters();
    }

    protected function rawread(int $n): string
    {
        if ($this->length < $n) {
            throw new AMQPDataReadException(sprintf(
                                                'Error reading data. Requested %s bytes while string buffer has only %s',
                                                $n,
                                                $this->length
                                            ));
        }

        $res = mb_substr($this->buffer, 0, $n, 'ASCII');
        $this->buffer = mb_substr($this->buffer, $n, null, 'ASCII');
        $this->length -= $n;
        $this->offset += $n;

        return $res;
    }

}
<?php

namespace PhpAmqpLib\Wire;

use PhpAmqpLib\Helper\BigInteger;

abstract class AMQPByteStream
{
    public const BIT = 1;
    public const OCTET = 1;
    public const SHORTSTR = 1;
    public const SHORT = 2;
    public const LONG = 4;
    public const SIGNED_LONG = 4;
    public const READ_PHP_INT = 4; // use READ_ to avoid possible clashes with PHP
    public const LONGLONG = 8;
    public const TIMESTAMP = 8;

    /** @var bool */
    protected const PLATFORM_64BIT = PHP_INT_SIZE === 8;

    /** @var BigInteger[][] */
    protected static $bigIntegers = array();

    /**
     * @var bool
     */
    protected static $isLittleEndian;

    /**
     * Converts byte-string between native and network byte order, in both directions
     *
     * @param string $bytes
     * @return string
     */
    protected function correctEndianness($bytes)
    {
        return self::isLittleEndian() ? $this->convertByteOrder($bytes) : $bytes;
    }

    /**
     * @param string $bytes
     * @return string
     */
    protected function convertByteOrder($bytes)
    {
        return strrev($bytes);
    }

    /**
     * @param int $longInt
     * @return bool
     */
    protected function getLongMSB($longInt)
    {
        return (bool) ($longInt & 0x80000000);
    }

    /**
     * @param string $bytes
     * @return bool
     */
    protected function getMSB($bytes)
    {
        return ord($bytes[0]) > 127;
    }

    /**
     * @return bool
     */
    protected static function isLittleEndian()
    {
        if (self::$isLittleEndian === null) {
            $tmp = unpack('S', "\x01\x00"); // to maintain 5.3 compatibility
            self::$isLittleEndian = $tmp[1] === 1;
        }

        return self::$isLittleEndian;
    }

    /**
     * @param string $value
     * @param int $base
     * @return BigInteger
     */
    protected static function getBigInteger($value, $base = 10)
    {
        if (!isset(self::$bigIntegers[$base])) {
            self::$bigIntegers[$base] = array();
        }
        if (isset(self::$bigIntegers[$base][$value])) {
            return self::$bigIntegers[$base][$value];
        }

        $integer = new BigInteger($value, $base);
        self::$bigIntegers[$base][$value] = $integer;

        return $integer;
    }
}
<?php

namespace PhpAmqpLib\Wire;

use PhpAmqpLib\Exception\AMQPOutOfBoundsException;
use PhpAmqpLib\Helper\BigInteger;

/**
 * AMQP protocol decimal value.
 *
 * Values are represented as (n,e) pairs. The actual value
 * is n * 10^(-e).
 *
 * From 0.8 spec: Decimal values are
 * not intended to support floating point values, but rather
 * business values such as currency rates and amounts. The
 * 'decimals' octet is not signed.
 */
class AMQPDecimal
{
    /** @var int */
    protected $n;

    /** @var int */
    protected $e;

    /**
     * @param int $n
     * @param int $e
     * @throws \PhpAmqpLib\Exception\AMQPOutOfBoundsException
     */
    public function __construct($n, $e)
    {
        if ($e < 0) {
            throw new AMQPOutOfBoundsException('Decimal exponent value must be unsigned!');
        }

        $this->n = $n;
        $this->e = $e;
    }

    /**
     * @return string
     */
    public function asBCvalue()
    {
        $n = new BigInteger($this->n);
        $e = new BigInteger('1' . str_repeat('0', $this->e));
        list($q) = $n->divide($e);
        return $q->toString();
    }

    /**
     * @return int
     */
    public function getE()
    {
        return $this->e;
    }

    /**
     * @return int
     */
    public function getN()
    {
        return $this->n;
    }
}
<?php

namespace PhpAmqpLib\Wire;

use PhpAmqpLib\Exception\AMQPDataReadException;
use PhpAmqpLib\Exception\AMQPIOException;
use PhpAmqpLib\Exception\AMQPNoDataException;
use PhpAmqpLib\Exception\AMQPTimeoutException;
use PhpAmqpLib\Helper\MiscHelper;
use PhpAmqpLib\Wire\IO\AbstractIO;
use RuntimeException;

class AMQPIOReader extends AMQPReader
{
    /** @var AbstractIO */
    private $io;

    /** @var int|float|null */
    protected $timeout;

    public function __construct(AbstractIO $io, $timeout = 0)
    {
        $this->io = $io;
        $this->timeout = $timeout;
    }

    public function close(): void
    {
        $this->io->close();
    }

    /**
     * @return float|int|mixed|null
     */
    public function getTimeout()
    {
        return $this->timeout;
    }

    /**
     * Sets the timeout (second)
     *
     * @param int|float|null $timeout
     */
    public function setTimeout($timeout)
    {
        $this->timeout = $timeout;
    }

    /**
     * @param int $n
     * @return string
     * @throws RuntimeException
     * @throws AMQPDataReadException|AMQPNoDataException|AMQPIOException
     */
    protected function rawread(int $n): string
    {
        $res = '';
        while (true) {
            $this->wait();
            try {
                $res = $this->io->read($n);
                break;
            } catch (AMQPTimeoutException $e) {
                if ($this->getTimeout() > 0) {
                    throw $e;
                }
            }
        }
        $this->offset += $n;

        return $res;
    }

    /**
     * Waits until some data is retrieved from the socket.
     *
     * AMQPTimeoutException can be raised if the timeout is set
     *
     * @throws AMQPTimeoutException when timeout is set and no data received
     * @throws AMQPNoDataException when no data is ready to read from IO
     */
    protected function wait(): void
    {
        $timeout = $this->timeout;
        if (null === $timeout) {
            // timeout=null just poll state and return instantly
            $result = $this->io->select(0);
            if ($result === 0) {
                throw new AMQPNoDataException('No data is ready to read');
            }
            return;
        }

        if (!($timeout > 0)) {
            // wait indefinitely for data if timeout=0
            $result = $this->io->select(null);
            if ($result === 0) {
                throw new AMQPNoDataException('No data is ready to read');
            }
            return;
        }

        $leftTime = $timeout;
        $started = microtime(true);
        do {
            [$sec, $usec] = MiscHelper::splitSecondsMicroseconds($leftTime);
            $result = $this->io->select($sec, $usec);
            if ($result > 0) {
                return;
            }
            // select might be interrupted by signal, calculate left time and repeat
            $leftTime = $timeout - (microtime(true) - $started);
        } while ($leftTime > 0);

        throw new AMQPTimeoutException(sprintf(
                                           'The connection timed out after %s sec while awaiting incoming data',
                                           $timeout
                                       ));

    }
}
<?php

namespace PhpAmqpLib\Wire;

use PhpAmqpLib\Channel\Frame;
use PhpAmqpLib\Exception\AMQPInvalidArgumentException;
use PhpAmqpLib\Exception\AMQPOutOfBoundsException;
use PhpAmqpLib\Helper\BigInteger;

abstract class AMQPReader extends AMQPByteStream
{
    /** @var int */
    protected $offset = 0;

    /** @var int */
    protected $bitcount = 0;

    /** @var int */
    protected $bits = 0;

    /**
     * Close the byte stream.
     */
    abstract public function close(): void;

    abstract protected function rawread(int $n): string;

    /**
     * @param int $n
     * @return string
     */
    public function read($n)
    {
        $this->resetCounters();

        return $this->rawread($n);
    }

    public function read_bit(): bool
    {
        if (empty($this->bitcount)) {
            $this->bits = ord($this->rawread(1));
            $this->bitcount = 8;
        }

        $result = ($this->bits & 1) === 1;
        $this->bits >>= 1;
        $this->bitcount--;

        return $result;
    }

    /**
     * @return int
     */
    public function read_octet()
    {
        $this->resetCounters();
        list(, $res) = unpack('C', $this->rawread(1));

        return $res;
    }

    /**
     * @return int
     */
    public function read_signed_octet()
    {
        $this->resetCounters();
        list(, $res) = unpack('c', $this->rawread(1));

        return $res;
    }

    /**
     * @return int
     */
    public function read_short()
    {
        $this->resetCounters();
        list(, $res) = unpack('n', $this->rawread(2));

        return $res;
    }

    /**
     * @return int
     */
    public function read_signed_short()
    {
        $this->resetCounters();
        list(, $res) = unpack('s', $this->correctEndianness($this->rawread(2)));

        return $res;
    }

    /**
     * Reads 32 bit integer in big-endian byte order.
     *
     * On 64 bit systems it will return always unsigned int
     * value in 0..2^32 range.
     *
     * On 32 bit systems it will return signed int value in
     * -2^31...+2^31 range.
     *
     * Use with caution!
     * @return int|string
     */
    public function read_php_int()
    {
        list(, $res) = unpack('N', $this->rawread(4));

        if (self::PLATFORM_64BIT) {
            return (int) sprintf('%u', $res);
        }

        return $res;
    }

    /**
     * PHP does not have unsigned 32 bit int,
     * so we return it as a string
     *
     * @return int|string
     */
    public function read_long()
    {
        $this->resetCounters();
        list(, $res) = unpack('N', $this->rawread(4));
        if (!self::PLATFORM_64BIT && $this->getLongMSB($res)) {
            return sprintf('%u', $res);
        }

        return $res;
    }

    /**
     * @return int
     */
    private function readSignedLong()
    {
        $this->resetCounters();
        list(, $res) = unpack('l', $this->correctEndianness($this->rawread(4)));

        return $res;
    }

    /**
     * Even on 64 bit systems PHP integers are signed.
     * Since we need an unsigned value here we return it as a string.
     *
     * @return int|string
     */
    public function read_longlong()
    {
        $this->resetCounters();
        $bytes = $this->rawread(8);

        if (self::PLATFORM_64BIT) {
            // we can "unpack" if MSB bit is 0 (at most 63 bit integer), fallback to BigInteger otherwise
            if (!$this->getMSB($bytes)) {
                $res = unpack('J', $bytes);
                return $res[1];
            }
        } else {
            // on 32-bit systems we can "unpack" up to 31 bits integer
            list(, $hi, $lo) = unpack('N2', $bytes);
            if ($hi === 0 && $lo > 0) {
                return $lo;
            }
        }

        $var = new BigInteger($bytes, 256);

        return $var->toString();
    }

    /**
     * @return int|string
     */
    public function read_signed_longlong()
    {
        $this->resetCounters();
        $bytes = $this->rawread(8);

        if (self::PLATFORM_64BIT) {
            $res = unpack('q', $this->correctEndianness($bytes));
            return $res[1];
        } else {
            // on 32-bit systems we can "unpack" up to 31 bits integer
            list(, $hi, $lo) = unpack('N2', $bytes);
            if ($hi === 0 && $lo > 0) {
                // positive and less than 2^31-1
                return $lo;
            }
            // negative and more than -2^31
            if ($hi === -1 && $this->getLongMSB($lo)) {
                return $lo;
            }
        }

        $var = new BigInteger($bytes, -256);

        return $var->toString();
    }

    /**
     * @return float
     */
    public function read_float()
    {
        $this->resetCounters();
        list(, $res) = unpack('G', $this->rawread(4));

        return (float)$res;
    }

    /**
     * @return float
     */
    public function read_double()
    {
        $this->resetCounters();
        list(, $res) = unpack('E', $this->rawread(8));

        return (float)$res;
    }

    /**
     * Read a utf-8 encoded string that's stored in up to
     * 255 bytes.  Return it decoded as a PHP unicode object.
     * @return string
     */
    public function read_shortstr()
    {
        $this->resetCounters();
        list(, $slen) = unpack('C', $this->rawread(1));

        return $this->rawread($slen);
    }

    /**
     * Read a string that's up to 2**32 bytes, the encoding
     * isn't specified in the AMQP spec, so just return it as
     * a plain PHP string.
     * @return string
     */
    public function read_longstr()
    {
        $this->resetCounters();
        $slen = $this->read_php_int();

        if ($slen < 0) {
            throw new AMQPOutOfBoundsException('Strings longer than supported on this platform');
        }

        return $this->rawread($slen);
    }

    /**
     * Read and AMQP timestamp, which is a 64-bit integer representing
     * seconds since the Unix epoch in 1-second resolution.
     * @return int|string
     */
    public function read_timestamp()
    {
        return $this->read_longlong();
    }

    /**
     * Read an AMQP table, and return as a PHP array. keys are strings,
     * values are (type,value) tuples.
     *
     * @param bool $returnObject Whether to return AMQPArray instance instead of plain array
     * @return array|AMQPTable
     */
    public function read_table(bool $returnObject = false)
    {
        $this->resetCounters();
        $tlen = $this->read_php_int();

        if ($tlen < 0) {
            throw new AMQPOutOfBoundsException('Table is longer than supported');
        }

        $table_data = new AMQPBufferReader($this->rawread($tlen));
        $result = $returnObject ? new AMQPTable() : array();

        while ($table_data->tell() < $tlen) {
            $name = $table_data->read_shortstr();
            $ftype = AMQPAbstractCollection::getDataTypeForSymbol($ftypeSym = $table_data->rawread(1));
            $val = $table_data->read_value($ftype, $returnObject);
            $returnObject ? $result->set($name, $val, $ftype) : $result[$name] = array($ftypeSym, $val);
        }

        return $result;
    }

    /**
     * @return array|AMQPTable
     */
    public function read_table_object()
    {
        return $this->read_table(true);
    }

    /**
     * Reads the array in the next value.
     *
     * @param bool $returnObject Whether to return AMQPArray instance instead of plain array
     * @return array|AMQPArray
     */
    public function read_array($returnObject = false)
    {
        $this->resetCounters();

        // Determine array length and its end position
        $arrayLength = $this->read_php_int();
        $endOffset = $this->offset + $arrayLength;

        $result = $returnObject ? new AMQPArray() : array();

        // Read values until we reach the end of the array
        while ($this->offset < $endOffset) {
            $fieldType = AMQPAbstractCollection::getDataTypeForSymbol($this->rawread(1));
            $fieldValue = $this->read_value($fieldType, $returnObject);
            $returnObject ? $result->push($fieldValue, $fieldType) : $result[] = $fieldValue;
        }

        return $result;
    }

    /**
     * @return array|AMQPArray
     */
    public function read_array_object()
    {
        return $this->read_array(true);
    }

    /**
     * @return array{type:int, channel:int, size:int}
     */
    public function readFrameHeader(): array
    {
        return unpack('Ctype/nchannel/Nsize', $this->rawread(Frame::FRAME_HEADER_SIZE));
    }

    /**
     * Reads the next value as the provided field type.
     *
     * @param int $fieldType One of AMQPAbstractCollection::T_* constants
     * @param bool $collectionsAsObjects Description
     * @return mixed
     * @throws \PhpAmqpLib\Exception\AMQPDataReadException
     */
    public function read_value(int $fieldType, bool $collectionsAsObjects = false)
    {
        $this->resetCounters();

        switch ($fieldType) {
            case AMQPAbstractCollection::T_INT_SHORTSHORT:
                //according to AMQP091 spec, 'b' is not bit, it is short-short-int, also valid for rabbit/qpid
                //$val=$this->read_bit();
                $val = $this->read_signed_octet();
                break;
            case AMQPAbstractCollection::T_INT_SHORTSHORT_U:
            case AMQPAbstractCollection::T_BOOL:
                $val = $this->read_octet();
                break;
            case AMQPAbstractCollection::T_INT_SHORT:
                $val = $this->read_signed_short();
                break;
            case AMQPAbstractCollection::T_INT_SHORT_U:
                $val = $this->read_short();
                break;
            case AMQPAbstractCollection::T_INT_LONG:
                $val = $this->readSignedLong();
                break;
            case AMQPAbstractCollection::T_INT_LONG_U:
                $val = $this->read_long();
                break;
            case AMQPAbstractCollection::T_INT_LONGLONG:
                $val = $this->read_signed_longlong();
                break;
            case AMQPAbstractCollection::T_INT_LONGLONG_U:
                $val = $this->read_longlong();
                break;
            case AMQPAbstractCollection::T_DECIMAL:
                $e = $this->read_octet();
                $n = $this->readSignedLong();
                $val = new AMQPDecimal($n, $e);
                break;
            case AMQPAbstractCollection::T_TIMESTAMP:
                $val = $this->read_timestamp();
                break;
            case AMQPAbstractCollection::T_STRING_SHORT:
                $val = $this->read_shortstr();
                break;
            case AMQPAbstractCollection::T_STRING_LONG:
            case AMQPAbstractCollection::T_BYTES:
                $val = $this->read_longstr();
                break;
            case AMQPAbstractCollection::T_ARRAY:
                $val = $this->read_array($collectionsAsObjects);
                break;
            case AMQPAbstractCollection::T_TABLE:
                $val = $this->read_table($collectionsAsObjects);
                break;
            case AMQPAbstractCollection::T_VOID:
                $val = null;
                break;
            case AMQPAbstractCollection::T_FLOAT:
                $val = $this->read_float();
                break;
            case AMQPAbstractCollection::T_DOUBLE:
                $val = $this->read_double();
                break;
            default:
                throw new AMQPInvalidArgumentException(sprintf(
                    'Unsupported type "%s"',
                    $fieldType
                ));
        }

        return $val;
    }

    protected function tell(): int
    {
        return $this->offset;
    }

    protected function resetCounters(): void
    {
        $this->bitcount = $this->bits = 0;
    }
}
<?php

namespace PhpAmqpLib\Wire;

use PhpAmqpLib\Exception;

class AMQPTable extends AMQPAbstractCollection
{

    /**
     * @return int
     */
    final public function getType()
    {
        return self::T_TABLE;
    }

    /**
     * @param string $key
     * @param mixed $val
     * @param int|null $type
     */
    public function set($key, $val, $type = null)
    {
        //https://www.rabbitmq.com/resources/specs/amqp0-9-1.pdf, https://www.rabbitmq.com/resources/specs/amqp0-8.pdf
        //Field names MUST start with a letter, '$' or '#' and may continue with letters, '$' or '#', digits,
        // or underlines, to a maximum length of 128 characters
        //The server SHOULD validate field names and upon receiving an invalid field name, it SHOULD signal a connection
        // exception with reply code 503 (syntax error)

        //validating length only and delegating other stuff to server, as rabbit seems to currently support numeric keys
        if (!($len = strlen($key)) || ($len > 128)) {
            throw new Exception\AMQPInvalidArgumentException(
                'Table key must be non-empty string up to 128 chars in length'
            );
        }
        $this->setValue($val, $type, $key);
    }
}
<?php

namespace PhpAmqpLib\Wire;

use PhpAmqpLib\Exception\AMQPInvalidArgumentException;
use PhpAmqpLib\Exception\AMQPOutOfRangeException;
use PhpAmqpLib\Helper\BigInteger;

class AMQPWriter extends AMQPByteStream
{
    /** @var string */
    protected $out = '';

    /** @var array */
    protected $bits = array();

    /** @var int */
    protected $bitcount = 0;

    private function flushbits()
    {
        if (!empty($this->bits)) {
            $this->out .= implode('', array_map('chr', $this->bits));
            $this->bits = array();
            $this->bitcount = 0;
        }
    }

    /**
     * Get what's been encoded so far.
     *
     * @return string
     */
    public function getvalue()
    {
        /* temporarily needed for compatibility with write_bit unit tests */
        if ($this->bitcount) {
            $this->flushbits();
        }

        return $this->out;
    }

    /**
     * Write a plain PHP string, with no special encoding.
     *
     * @param string $s
     *
     * @return $this
     */
    public function write($s)
    {
        $this->out .= $s;

        return $this;
    }

    /**
     * Write a boolean value.
     * (deprecated, use write_bits instead)
     *
     * @deprecated
     * @param bool $b
     * @return $this
     */
    public function write_bit($b)
    {
        $b = $b ? 1 : 0;
        $shift = $this->bitcount % 8;
        $last = $shift === 0 ? 0 : array_pop($this->bits);
        $last |= ($b << $shift);
        $this->bits[] = $last;
        $this->bitcount++;

        return $this;
    }

    /**
     * Write multiple bits as an octet
     *
     * @param bool[] $bits
     * @return $this
     */
    public function write_bits($bits)
    {
        $value = 0;

        foreach ($bits as $n => $bit) {
            $bit = $bit ? 1 : 0;
            $value |= ($bit << $n);
        }

        $this->out .= chr($value);

        return $this;
    }

    /**
     * Write an integer as an unsigned 8-bit value
     *
     * @param int $n
     * @return $this
     * @throws \PhpAmqpLib\Exception\AMQPInvalidArgumentException
     */
    public function write_octet($n)
    {
        if ($n < 0 || $n > 255) {
            throw new AMQPInvalidArgumentException('Octet out of range: ' . $n);
        }

        $this->out .= chr($n);

        return $this;
    }

    /**
     * @param int $n
     * @return $this
     */
    public function write_signed_octet($n)
    {
        if (($n < -128) || ($n > 127)) {
            throw new AMQPInvalidArgumentException('Signed octet out of range: ' . $n);
        }

        $this->out .= pack('c', $n);

        return $this;
    }

    /**
     * Write an integer as an unsigned 16-bit value
     *
     * @param int $n
     * @return $this
     * @throws \PhpAmqpLib\Exception\AMQPInvalidArgumentException
     */
    public function write_short($n)
    {
        if ($n < 0 || $n > 65535) {
            throw new AMQPInvalidArgumentException('Short out of range: ' . $n);
        }

        $this->out .= pack('n', $n);

        return $this;
    }

    /**
     * @param int $n
     * @return $this
     */
    public function write_signed_short($n)
    {
        if (($n < -32768) || ($n > 32767)) {
            throw new AMQPInvalidArgumentException('Signed short out of range: ' . $n);
        }

        $this->out .= $this->correctEndianness(pack('s', $n));

        return $this;
    }

    /**
     * Write an integer as an unsigned 32-bit value
     *
     * @param int|string $n
     * @return $this
     */
    public function write_long($n)
    {
        if (($n < 0) || ($n > 4294967295)) {
            throw new AMQPInvalidArgumentException('Long out of range: ' . $n);
        }

        //Numeric strings >PHP_INT_MAX on 32bit are casted to PHP_INT_MAX, damn PHP
        if (!self::PLATFORM_64BIT && is_string($n)) {
            $n = (float) $n;
        }
        $this->out .= pack('N', $n);

        return $this;
    }

    /**
     * @param int $n
     * @return $this
     */
    private function writeSignedLong($n)
    {
        if (($n < -2147483648) || ($n > 2147483647)) {
            throw new AMQPInvalidArgumentException('Signed long out of range: ' . $n);
        }

        //on my 64bit debian this approach is slightly faster than splitIntoQuads()
        $this->out .= $this->correctEndianness(pack('l', $n));

        return $this;
    }

    /**
     * Write a numeric value as an unsigned 64-bit value
     *
     * @param int|string $n
     * @return $this
     * @throws AMQPOutOfRangeException
     */
    public function write_longlong($n)
    {
        if (is_int($n)) {
            if ($n < 0) {
                throw new AMQPOutOfRangeException('Longlong out of range: ' . $n);
            }

            if (self::PLATFORM_64BIT) {
                $res = pack('J', $n);
                $this->out .= $res;
            } else {
                $this->out .= pack('NN', 0, $n);
            }

            return $this;
        }

        $value = new BigInteger($n);
        if (
            $value->compare(self::getBigInteger('0')) < 0
            || $value->compare(self::getBigInteger('FFFFFFFFFFFFFFFF', 16)) > 0
        ) {
            throw new AMQPInvalidArgumentException('Longlong out of range: ' . $n);
        }

        $value->setPrecision(64);
        $this->out .= $value->toBytes();

        return $this;
    }

    /**
     * @param int|string $n
     * @return $this
     */
    public function write_signed_longlong($n)
    {
        if (is_int($n)) {
            if (self::PLATFORM_64BIT) {
                // q is for 64-bit signed machine byte order
                $packed = pack('q', $n);
                if (self::isLittleEndian()) {
                    $packed = $this->convertByteOrder($packed);
                }
                $this->out .= $packed;
            } else {
                $hi = $n < 0 ? -1 : 0;
                $lo = $n;
                $this->out .= pack('NN', $hi, $lo);
            }

            return $this;
        }

        $value = new BigInteger($n);
        if (
            $value->compare(self::getBigInteger('-8000000000000000', 16)) < 0
            || $value->compare(self::getBigInteger('7FFFFFFFFFFFFFFF', 16)) > 0
        ) {
            throw new AMQPInvalidArgumentException('Signed longlong out of range: ' . $n);
        }

        $value->setPrecision(64);
        $this->out .= substr($value->toBytes(true), -8);

        return $this;
    }

    /**
     * Write a string up to 255 bytes long after encoding.
     * Assume UTF-8 encoding
     *
     * @param string $s
     * @return $this
     * @throws \PhpAmqpLib\Exception\AMQPInvalidArgumentException
     */
    public function write_shortstr($s)
    {
        if ($s === null) {
            $this->write_octet(0);

            return $this;
        }

        $len = mb_strlen($s, 'ASCII');
        if ($len > 255) {
            throw new AMQPInvalidArgumentException('String too long');
        }

        $this->write_octet($len);
        $this->out .= $s;

        return $this;
    }

    /**
     * Write a string up to 2**32 bytes long.  Assume UTF-8 encoding
     *
     * @param string $s
     * @return $this
     */
    public function write_longstr($s)
    {
        if ($s === null) {
            $this->write_long(0);

            return $this;
        }

        $this->write_long(mb_strlen($s, 'ASCII'));
        $this->out .= $s;

        return $this;
    }

    /**
     * Supports the writing of Array types, so that you can implement
     * array methods, like Rabbitmq's HA parameters
     *
     * @param AMQPArray|array $a Instance of AMQPArray or PHP array WITHOUT format hints (unlike write_table())
     * @return self
     */
    public function write_array($a)
    {
        if (!($a instanceof AMQPArray)) {
            $a = new AMQPArray($a);
        }
        $data = new self();

        foreach ($a as $v) {
            $data->writeValue($v[0], $v[1]);
        }

        $data = $data->getvalue();
        $this->write_long(mb_strlen($data, 'ASCII'));
        $this->write($data);

        return $this;
    }

    /**
     * Write unix time_t value as 64 bit timestamp
     *
     * @param int $v
     * @return $this
     */
    public function write_timestamp($v)
    {
        $this->write_longlong($v);

        return $this;
    }

    /**
     * Write PHP array, as table. Input array format: keys are strings,
     * values are (type,value) tuples.
     *
     * @param AMQPTable|array $d Instance of AMQPTable or PHP array WITH format hints (unlike write_array())
     * @return $this
     * @throws \PhpAmqpLib\Exception\AMQPInvalidArgumentException
     */
    public function write_table($d)
    {
        $typeIsSym = !($d instanceof AMQPTable); //purely for back-compat purposes

        $table_data = new self();
        foreach ($d as $k => $va) {
            list($ftype, $v) = $va;
            $table_data->write_shortstr($k);
            $table_data->writeValue($typeIsSym ? AMQPAbstractCollection::getDataTypeForSymbol($ftype) : $ftype, $v);
        }

        $table_data = $table_data->getvalue();
        $this->write_long(mb_strlen($table_data, 'ASCII'));
        $this->write($table_data);

        return $this;
    }

    /**
     * for compat with method mapping used by AMQPMessage
     *
     * @param AMQPTable|array $d
     * @return $this
     */
    public function write_table_object($d)
    {
        return $this->write_table($d);
    }

    /**
     * @param int $type One of AMQPAbstractCollection::T_* constants
     * @param mixed $val
     */
    private function writeValue($type, $val)
    {
        //This will find appropriate symbol for given data type for currently selected protocol
        //Also will raise an exception on unknown type
        $this->write(AMQPAbstractCollection::getSymbolForDataType($type));

        switch ($type) {
            case AMQPAbstractCollection::T_INT_SHORTSHORT:
                $this->write_signed_octet($val);
                break;
            case AMQPAbstractCollection::T_INT_SHORTSHORT_U:
                $this->write_octet($val);
                break;
            case AMQPAbstractCollection::T_INT_SHORT:
                $this->write_signed_short($val);
                break;
            case AMQPAbstractCollection::T_INT_SHORT_U:
                $this->write_short($val);
                break;
            case AMQPAbstractCollection::T_INT_LONG:
                $this->writeSignedLong($val);
                break;
            case AMQPAbstractCollection::T_INT_LONG_U:
                $this->write_long($val);
                break;
            case AMQPAbstractCollection::T_INT_LONGLONG:
                $this->write_signed_longlong($val);
                break;
            case AMQPAbstractCollection::T_INT_LONGLONG_U:
                $this->write_longlong($val);
                break;
            case AMQPAbstractCollection::T_DECIMAL:
                $this->write_octet($val->getE());
                $this->writeSignedLong($val->getN());
                break;
            case AMQPAbstractCollection::T_TIMESTAMP:
                $this->write_timestamp($val);
                break;
            case AMQPAbstractCollection::T_BOOL:
                $this->write_octet($val ? 1 : 0);
                break;
            case AMQPAbstractCollection::T_STRING_SHORT:
                $this->write_shortstr($val);
                break;
            case AMQPAbstractCollection::T_STRING_LONG:
                $this->write_longstr($val);
                break;
            case AMQPAbstractCollection::T_ARRAY:
                $this->write_array($val);
                break;
            case AMQPAbstractCollection::T_TABLE:
                $this->write_table($val);
                break;
            case AMQPAbstractCollection::T_VOID:
                break;
            case AMQPAbstractCollection::T_BYTES:
                $this->write_longstr($val);
                break;
            default:
                throw new AMQPInvalidArgumentException(sprintf(
                    'Unsupported type "%s"',
                    $type
                ));
        }
    }
}
<?php

namespace PhpAmqpLib\Wire;

abstract class Constants
{
    const VERSION = '';
    const AMQP_HEADER = '';

    /**
     * @var array<int, string>
     */
    protected static $FRAME_TYPES = array();

    /**
     * @var array<int, string>
     */
    protected static $CONTENT_METHODS = array();

    /**
     * @var array<int, string>
     */
    protected static $CLOSE_METHODS = array();

    /**
     * @var array<string, string>
     */
    public static $GLOBAL_METHOD_NAMES = array();

    /**
     * @return string
     */
    public function getHeader()
    {
        return static::AMQP_HEADER;
    }

    /**
     * @param int $type
     * @return bool
     */
    public function isFrameType($type)
    {
        return array_key_exists($type, static::$FRAME_TYPES);
    }

    /**
     * @param int $type
     * @return string
     */
    public function getFrameType($type)
    {
        return static::$FRAME_TYPES[$type];
    }

    /**
     * @param string $method
     * @return bool
     */
    public function isContentMethod($method)
    {
        return in_array($method, static::$CONTENT_METHODS, false);
    }

    /**
     * @param string $method
     * @return bool
     */
    public function isCloseMethod($method)
    {
        return in_array($method, static::$CLOSE_METHODS, false);
    }
}
<?php

/* This file was autogenerated by spec/parser.php - Do not modify */

namespace PhpAmqpLib\Wire;

final class Constants080 extends Constants
{
    const VERSION = '8.0';
    const AMQP_HEADER = "AMQP\x01\x01\x08\x00";

    /**
     * @var array
     */
    public static $FRAME_TYPES = array(
        1 => 'FRAME-METHOD',
        2 => 'FRAME-HEADER',
        3 => 'FRAME-BODY',
        4 => 'FRAME-OOB-METHOD',
        5 => 'FRAME-OOB-HEADER',
        6 => 'FRAME-OOB-BODY',
        7 => 'FRAME-TRACE',
        8 => 'FRAME-HEARTBEAT',
        4096 => 'FRAME-MIN-SIZE',
        206 => 'FRAME-END',
        501 => 'FRAME-ERROR',
    );

    /**
     * @var array
     */
    public static $CONTENT_METHODS = array(
        0 => '60,40',
        1 => '60,50',
        2 => '60,60',
        3 => '60,71',
        4 => '70,50',
        5 => '70,70',
        6 => '80,40',
        7 => '80,50',
        8 => '80,60',
        9 => '110,10',
        10 => '120,40',
        11 => '120,41',
    );

    /**
     * @var array
     */
    public static $CLOSE_METHODS = array(
        0 => '10,60',
        1 => '20,40',
    );

    /**
     * @var array
     */
    public static $GLOBAL_METHOD_NAMES = array(
        '10,10' => 'Connection.start',
        '10,11' => 'Connection.start_ok',
        '10,20' => 'Connection.secure',
        '10,21' => 'Connection.secure_ok',
        '10,30' => 'Connection.tune',
        '10,31' => 'Connection.tune_ok',
        '10,40' => 'Connection.open',
        '10,41' => 'Connection.open_ok',
        '10,50' => 'Connection.redirect',
        '10,60' => 'Connection.close',
        '10,61' => 'Connection.close_ok',
        '20,10' => 'Channel.open',
        '20,11' => 'Channel.open_ok',
        '20,20' => 'Channel.flow',
        '20,21' => 'Channel.flow_ok',
        '20,30' => 'Channel.alert',
        '20,40' => 'Channel.close',
        '20,41' => 'Channel.close_ok',
        '30,10' => 'Access.request',
        '30,11' => 'Access.request_ok',
        '40,10' => 'Exchange.declare',
        '40,11' => 'Exchange.declare_ok',
        '40,20' => 'Exchange.delete',
        '40,21' => 'Exchange.delete_ok',
        '50,10' => 'Queue.declare',
        '50,11' => 'Queue.declare_ok',
        '50,20' => 'Queue.bind',
        '50,21' => 'Queue.bind_ok',
        '50,30' => 'Queue.purge',
        '50,31' => 'Queue.purge_ok',
        '50,40' => 'Queue.delete',
        '50,41' => 'Queue.delete_ok',
        '50,50' => 'Queue.unbind',
        '50,51' => 'Queue.unbind_ok',
        '60,10' => 'Basic.qos',
        '60,11' => 'Basic.qos_ok',
        '60,20' => 'Basic.consume',
        '60,21' => 'Basic.consume_ok',
        '60,30' => 'Basic.cancel',
        '60,31' => 'Basic.cancel_ok',
        '60,40' => 'Basic.publish',
        '60,50' => 'Basic.return',
        '60,60' => 'Basic.deliver',
        '60,70' => 'Basic.get',
        '60,71' => 'Basic.get_ok',
        '60,72' => 'Basic.get_empty',
        '60,80' => 'Basic.ack',
        '60,90' => 'Basic.reject',
        '60,100' => 'Basic.recover_async',
        '60,110' => 'Basic.recover',
        '60,111' => 'Basic.recover_ok',
        '70,10' => 'File.qos',
        '70,11' => 'File.qos_ok',
        '70,20' => 'File.consume',
        '70,21' => 'File.consume_ok',
        '70,30' => 'File.cancel',
        '70,31' => 'File.cancel_ok',
        '70,40' => 'File.open',
        '70,41' => 'File.open_ok',
        '70,50' => 'File.stage',
        '70,60' => 'File.publish',
        '70,70' => 'File.return',
        '70,80' => 'File.deliver',
        '70,90' => 'File.ack',
        '70,100' => 'File.reject',
        '80,10' => 'Stream.qos',
        '80,11' => 'Stream.qos_ok',
        '80,20' => 'Stream.consume',
        '80,21' => 'Stream.consume_ok',
        '80,30' => 'Stream.cancel',
        '80,31' => 'Stream.cancel_ok',
        '80,40' => 'Stream.publish',
        '80,50' => 'Stream.return',
        '80,60' => 'Stream.deliver',
        '90,10' => 'Tx.select',
        '90,11' => 'Tx.select_ok',
        '90,20' => 'Tx.commit',
        '90,21' => 'Tx.commit_ok',
        '90,30' => 'Tx.rollback',
        '90,31' => 'Tx.rollback_ok',
        '100,10' => 'Dtx.select',
        '100,11' => 'Dtx.select_ok',
        '100,20' => 'Dtx.start',
        '100,21' => 'Dtx.start_ok',
        '110,10' => 'Tunnel.request',
        '120,10' => 'Test.integer',
        '120,11' => 'Test.integer_ok',
        '120,20' => 'Test.string',
        '120,21' => 'Test.string_ok',
        '120,30' => 'Test.table',
        '120,31' => 'Test.table_ok',
        '120,40' => 'Test.content',
        '120,41' => 'Test.content_ok',
    );
}
<?php

/* This file was autogenerated by spec/parser.php - Do not modify */

namespace PhpAmqpLib\Wire;

final class Constants091 extends Constants
{
    const VERSION = '0.9.1';
    const AMQP_HEADER = "AMQP\x00\x00\x09\x01";

    /**
     * @var array
     */
    public static $FRAME_TYPES = array(
        1 => 'FRAME-METHOD',
        2 => 'FRAME-HEADER',
        3 => 'FRAME-BODY',
        8 => 'FRAME-HEARTBEAT',
        4096 => 'FRAME-MIN-SIZE',
        206 => 'FRAME-END',
        501 => 'FRAME-ERROR',
    );

    /**
     * @var array
     */
    public static $CONTENT_METHODS = array(
        0 => '60,40',
        1 => '60,50',
        2 => '60,60',
        3 => '60,71',
    );

    /**
     * @var array
     */
    public static $CLOSE_METHODS = array(
        0 => '10,50',
        1 => '20,40',
    );

    /**
     * @var array
     */
    public static $GLOBAL_METHOD_NAMES = array(
        '10,10' => 'Connection.start',
        '10,11' => 'Connection.start_ok',
        '10,20' => 'Connection.secure',
        '10,21' => 'Connection.secure_ok',
        '10,30' => 'Connection.tune',
        '10,31' => 'Connection.tune_ok',
        '10,40' => 'Connection.open',
        '10,41' => 'Connection.open_ok',
        '10,50' => 'Connection.close',
        '10,51' => 'Connection.close_ok',
        '10,60' => 'Connection.blocked',
        '10,61' => 'Connection.unblocked',
        '20,10' => 'Channel.open',
        '20,11' => 'Channel.open_ok',
        '20,20' => 'Channel.flow',
        '20,21' => 'Channel.flow_ok',
        '20,40' => 'Channel.close',
        '20,41' => 'Channel.close_ok',
        '30,10' => 'Access.request',
        '30,11' => 'Access.request_ok',
        '40,10' => 'Exchange.declare',
        '40,11' => 'Exchange.declare_ok',
        '40,20' => 'Exchange.delete',
        '40,21' => 'Exchange.delete_ok',
        '40,30' => 'Exchange.bind',
        '40,31' => 'Exchange.bind_ok',
        '40,40' => 'Exchange.unbind',
        '40,51' => 'Exchange.unbind_ok',
        '50,10' => 'Queue.declare',
        '50,11' => 'Queue.declare_ok',
        '50,20' => 'Queue.bind',
        '50,21' => 'Queue.bind_ok',
        '50,30' => 'Queue.purge',
        '50,31' => 'Queue.purge_ok',
        '50,40' => 'Queue.delete',
        '50,41' => 'Queue.delete_ok',
        '50,50' => 'Queue.unbind',
        '50,51' => 'Queue.unbind_ok',
        '60,10' => 'Basic.qos',
        '60,11' => 'Basic.qos_ok',
        '60,20' => 'Basic.consume',
        '60,21' => 'Basic.consume_ok',
        '60,30' => 'Basic.cancel',
        '60,31' => 'Basic.cancel_ok',
        '60,40' => 'Basic.publish',
        '60,50' => 'Basic.return',
        '60,60' => 'Basic.deliver',
        '60,70' => 'Basic.get',
        '60,71' => 'Basic.get_ok',
        '60,72' => 'Basic.get_empty',
        '60,80' => 'Basic.ack',
        '60,90' => 'Basic.reject',
        '60,100' => 'Basic.recover_async',
        '60,110' => 'Basic.recover',
        '60,111' => 'Basic.recover_ok',
        '60,120' => 'Basic.nack',
        '90,10' => 'Tx.select',
        '90,11' => 'Tx.select_ok',
        '90,20' => 'Tx.commit',
        '90,21' => 'Tx.commit_ok',
        '90,30' => 'Tx.rollback',
        '90,31' => 'Tx.rollback_ok',
        '85,10' => 'Confirm.select',
        '85,11' => 'Confirm.select_ok',
    );
}
<?php

namespace PhpAmqpLib\Wire\IO;

use PhpAmqpLib\Connection\AMQPConnectionConfig;
use PhpAmqpLib\Exception\AMQPConnectionClosedException;
use PhpAmqpLib\Exception\AMQPHeartbeatMissedException;
use PhpAmqpLib\Exception\AMQPIOWaitException;
use PhpAmqpLib\Exception\AMQPRuntimeException;
use PhpAmqpLib\Wire\AMQPWriter;

abstract class AbstractIO
{
    const BUFFER_SIZE = 8192;

    /** @var null|AMQPConnectionConfig */
    protected $config;

    /** @var string */
    protected $host;

    /** @var int */
    protected $port;

    /** @var int|float */
    protected $connection_timeout;

    /** @var float */
    protected $read_timeout;

    /** @var float */
    protected $write_timeout;

    /** @var int */
    protected $heartbeat;

    /** @var int */
    protected $initial_heartbeat;

    /** @var bool */
    protected $keepalive;

    /** @var int|float */
    protected $last_read;

    /** @var int|float */
    protected $last_write;

    /** @var \ErrorException|null */
    protected $last_error;

    /** @var bool */
    protected $canDispatchPcntlSignal = false;

    /**
     * @param int $len
     * @return string
     * @throws \PhpAmqpLib\Exception\AMQPIOException
     * @throws AMQPRuntimeException
     * @throws \PhpAmqpLib\Exception\AMQPSocketException
     * @throws \PhpAmqpLib\Exception\AMQPTimeoutException
     * @throws \PhpAmqpLib\Exception\AMQPConnectionClosedException
     */
    abstract public function read($len);

    /**
     * @param string $data
     * @throws \PhpAmqpLib\Exception\AMQPIOException
     * @throws \PhpAmqpLib\Exception\AMQPSocketException
     * @throws \PhpAmqpLib\Exception\AMQPConnectionClosedException
     * @throws \PhpAmqpLib\Exception\AMQPTimeoutException
     */
    abstract public function write($data);

    /**
     * @return void
     */
    abstract public function close();

    /**
     * @param int|null $sec
     * @param int $usec
     * @return int
     * @throws AMQPIOWaitException
     * @throws AMQPRuntimeException
     * @throws AMQPConnectionClosedException
     */
    public function select(?int $sec, int $usec = 0)
    {
        $this->check_heartbeat();
        $this->setErrorHandler();
        try {
            $result = $this->do_select($sec, $usec);
            $this->throwOnError();
        } catch (\ErrorException $e) {
            throw new AMQPIOWaitException($e->getMessage(), $e->getCode(), $e->getPrevious());
        } finally {
            $this->restoreErrorHandler();
        }

        if ($this->canDispatchPcntlSignal) {
            pcntl_signal_dispatch();
        }

        // no exception and false result - either timeout or signal was sent
        if ($result === false) {
            $result = 0;
        }

        return $result;
    }

    /**
     * @param int|null $sec
     * @param int $usec
     * @return int|bool
     * @throws AMQPConnectionClosedException
     */
    abstract protected function do_select(?int $sec, int $usec);

    /**
     * Set ups the connection.
     * @return void
     * @throws \PhpAmqpLib\Exception\AMQPIOException
     * @throws AMQPRuntimeException
     */
    abstract public function connect();

    /**
     * Set connection params connection tune(negotiation).
     * @param int $heartbeat
     */
    public function afterTune(int $heartbeat): void
    {
        $this->heartbeat = $heartbeat;
        $this->initial_heartbeat = $heartbeat;
    }

    /**
     * Heartbeat logic: check connection health here
     * @return void
     * @throws AMQPRuntimeException
     */
    public function check_heartbeat()
    {
        // ignore unless heartbeat interval is set
        if ($this->heartbeat !== 0 && $this->last_read > 0 && $this->last_write > 0) {
            // server has gone away
            $this->checkBrokerHeartbeat();

            // time for client to send a heartbeat
            $now = microtime(true);
            if (($this->heartbeat / 2) < $now - $this->last_write) {
                $this->write_heartbeat();
            }
        }
    }

    /**
     * @throws \PhpAmqpLib\Exception\AMQPHeartbeatMissedException
     */
    protected function checkBrokerHeartbeat(): void
    {
        if ($this->heartbeat > 0 && ($this->last_read > 0 || $this->last_write > 0)) {
            $lastActivity = $this->getLastActivity();
            $now = microtime(true);
            if (($now - $lastActivity) > $this->heartbeat * 2 + 1) {
                $this->close();
                throw new AMQPHeartbeatMissedException('Missed server heartbeat');
            }
        }
    }

    /**
     * @return float|int
     */
    public function getLastActivity()
    {
        return max($this->last_read, $this->last_write);
    }

    public function getReadTimeout(): float
    {
        return $this->read_timeout;
    }

    /**
     * @return $this
     */
    public function disableHeartbeat()
    {
        $this->initial_heartbeat = $this->heartbeat;
        $this->heartbeat = 0;

        return $this;
    }

    /**
     * @return $this
     */
    public function reenableHeartbeat()
    {
        $this->heartbeat = $this->initial_heartbeat;

        return $this;
    }

    /**
     * Sends a heartbeat message
     */
    protected function write_heartbeat()
    {
        $pkt = new AMQPWriter();
        $pkt->write_octet(8);
        $pkt->write_short(0);
        $pkt->write_long(0);
        $pkt->write_octet(0xCE);
        $this->write($pkt->getvalue());
    }

    /**
     * Begin tracking errors and set the error handler
     */
    protected function setErrorHandler(): void
    {
        $this->last_error = null;
        set_error_handler(array($this, 'error_handler'));
    }

    protected function throwOnError(): void
    {
        if ($this->last_error instanceof \ErrorException) {
            $error = $this->last_error;
            $this->last_error = null;
            throw $error;
        }
    }

    protected function restoreErrorHandler(): void
    {
        restore_error_handler();
    }

    /**
     * Internal error handler to deal with stream and socket errors.
     *
     * @param  int $errno
     * @param  string $errstr
     * @param  string $errfile
     * @param  int $errline
     * @return void
     */
    public function error_handler($errno, $errstr, $errfile, $errline): void
    {
        // throwing an exception in an error handler will halt execution
        // collect error continue
        $this->last_error = new \ErrorException($errstr, $errno, 1, $errfile, $errline, $this->last_error);
    }

    protected function isPcntlSignalEnabled(): bool
    {
        return extension_loaded('pcntl')
            && function_exists('pcntl_signal_dispatch')
            && (defined('AMQP_WITHOUT_SIGNALS') ? !AMQP_WITHOUT_SIGNALS : true);
    }
}
<?php

namespace PhpAmqpLib\Wire\IO;

use PhpAmqpLib\Connection\AMQPConnectionConfig;
use PhpAmqpLib\Exception\AMQPConnectionClosedException;
use PhpAmqpLib\Exception\AMQPIOException;
use PhpAmqpLib\Exception\AMQPSocketException;
use PhpAmqpLib\Exception\AMQPTimeoutException;
use PhpAmqpLib\Helper\MiscHelper;
use PhpAmqpLib\Helper\SocketConstants;

class SocketIO extends AbstractIO
{
    /** @var null|resource|\Socket */
    private $sock;

    /**
     * @param string $host
     * @param int $port
     * @param int|float $read_timeout
     * @param bool $keepalive
     * @param int|float|null $write_timeout if null defaults to read timeout
     * @param int $heartbeat how often to send heartbeat. 0 means off
     * @param null|AMQPConnectionConfig $config
     */
    public function __construct(
        $host,
        $port,
        $read_timeout = 3,
        $keepalive = false,
        $write_timeout = null,
        $heartbeat = 0,
        ?AMQPConnectionConfig $config = null
    ) {
        $this->config = $config;
        $this->host = str_replace(['[', ']'], '', $host);
        $this->port = $port;
        $this->read_timeout = (float)$read_timeout;
        $this->write_timeout = (float)($write_timeout ?: $read_timeout);
        $this->heartbeat = $heartbeat;
        $this->initial_heartbeat = $heartbeat;
        $this->keepalive = $keepalive;
        $this->canDispatchPcntlSignal = $this->isPcntlSignalEnabled();

        /*
            TODO FUTURE enable this check
            php-amqplib/php-amqplib#648, php-amqplib/php-amqplib#666
        if ($this->heartbeat !== 0 && ($this->read_timeout <= ($this->heartbeat * 2))) {
            throw new \InvalidArgumentException('read_timeout must be greater than 2x the heartbeat');
        }
        if ($this->heartbeat !== 0 && ($this->write_timeout <= ($this->heartbeat * 2))) {
            throw new \InvalidArgumentException('send_timeout must be greater than 2x the heartbeat');
        }
         */
    }

    /**
     * @inheritdoc
     */
    public function connect()
    {
        $this->sock = socket_create(!$this->isIpv6() ? AF_INET : AF_INET6, SOCK_STREAM, SOL_TCP);

        list($sec, $uSec) = MiscHelper::splitSecondsMicroseconds($this->write_timeout);
        socket_set_option($this->sock, SOL_SOCKET, SO_SNDTIMEO, array('sec' => $sec, 'usec' => $uSec));
        list($sec, $uSec) = MiscHelper::splitSecondsMicroseconds($this->read_timeout);
        socket_set_option($this->sock, SOL_SOCKET, SO_RCVTIMEO, array('sec' => $sec, 'usec' => $uSec));

        $this->setErrorHandler();
        try {
            $connected = socket_connect($this->sock, $this->host, $this->port);
            $this->throwOnError();
        } catch (\ErrorException $e) {
            $connected = false;
        } finally {
            $this->restoreErrorHandler();
        }
        if (!$connected) {
            $errno = socket_last_error($this->sock);
            $errstr = socket_strerror($errno);
            throw new AMQPIOException(sprintf(
                'Error Connecting to server (%s): %s',
                $errno,
                $errstr
            ), $errno);
        }

        socket_set_block($this->sock);
        socket_set_option($this->sock, SOL_TCP, TCP_NODELAY, 1);
        if ($this->config && $this->config->getSendBufferSize() > 0) {
            socket_set_option($this->sock, SOL_SOCKET, SO_SNDBUF, $this->config->getSendBufferSize());
        }

        if ($this->keepalive) {
            $this->enable_keepalive();
        }

        $this->heartbeat = $this->initial_heartbeat;
    }

    /**
     * @deprecated
     * @return null|resource|\Socket
     */
    public function getSocket()
    {
        return $this->sock;
    }

    /**
     * @inheritdoc
     */
    public function read($len)
    {
        if (is_null($this->sock)) {
            throw new AMQPSocketException(sprintf(
                'Socket was null! Last SocketError was: %s',
                socket_strerror(socket_last_error())
            ));
        }

        $this->check_heartbeat();

        list($timeout_sec, $timeout_uSec) = MiscHelper::splitSecondsMicroseconds($this->read_timeout);
        $read_start = microtime(true);
        $read = 0;
        $data = '';
        while ($read < $len) {
            $buffer = null;
            $result = socket_recv($this->sock, $buffer, $len - $read, 0);
            if ($result === 0) {
                // From linux recv() manual:
                // When a stream socket peer has performed an orderly shutdown,
                // the return value will be 0 (the traditional "end-of-file" return).
                // http://php.net/manual/en/function.socket-recv.php#47182
                $this->close();
                throw new AMQPConnectionClosedException('Broken pipe or closed connection');
            }

            if (empty($buffer)) {
                $read_now = microtime(true);
                $t_read = $read_now - $read_start;
                if ($t_read > $this->read_timeout) {
                    throw new AMQPTimeoutException('Too many read attempts detected in SocketIO');
                }
                $this->select($timeout_sec, $timeout_uSec);
                continue;
            }

            $read += mb_strlen($buffer, 'ASCII');
            $data .= $buffer;
        }

        if (mb_strlen($data, 'ASCII') !== $len) {
            throw new AMQPIOException(sprintf(
                'Error reading data. Received %s instead of expected %s bytes',
                mb_strlen($data, 'ASCII'),
                $len
            ));
        }

        $this->last_read = microtime(true);

        return $data;
    }

    /**
     * @inheritdoc
     */
    public function write($data)
    {
        // Null sockets are invalid, throw exception
        if (is_null($this->sock)) {
            throw new AMQPSocketException(sprintf(
                'Socket was null! Last SocketError was: %s',
                socket_strerror(socket_last_error())
            ));
        }

        $this->checkBrokerHeartbeat();

        $written = 0;
        $len = mb_strlen($data, 'ASCII');
        $write_start = microtime(true);

        while ($written < $len) {
            $this->setErrorHandler();
            try {
                $result = 0;
                if ($this->select_write()) {
                    // if data is smaller than buffer - no need to cut part of it
                    if ($len <= self::BUFFER_SIZE) {
                        $buffer = $data;
                    } else {
                        $buffer = mb_substr($data, $written, self::BUFFER_SIZE, 'ASCII');
                    }
                    $result = socket_write($this->sock, $buffer);
                }
                $this->throwOnError();
            } catch (\ErrorException $e) {
                $code = socket_last_error($this->sock);
                $constants = SocketConstants::getInstance();
                switch ($code) {
                    case $constants->SOCKET_EPIPE:
                    case $constants->SOCKET_ENETDOWN:
                    case $constants->SOCKET_ENETUNREACH:
                    case $constants->SOCKET_ENETRESET:
                    case $constants->SOCKET_ECONNABORTED:
                    case $constants->SOCKET_ECONNRESET:
                    case $constants->SOCKET_ECONNREFUSED:
                    case $constants->SOCKET_ETIMEDOUT:
                        $this->close();
                        throw new AMQPConnectionClosedException(socket_strerror($code), $code, $e);
                    default:
                        throw new AMQPIOException(sprintf(
                            'Error sending data. Last SocketError: %s',
                            socket_strerror($code)
                        ), $code, $e);
                }
            } finally {
                $this->restoreErrorHandler();
            }

            if ($result === false) {
                throw new AMQPIOException(sprintf(
                    'Error sending data. Last SocketError: %s',
                    socket_strerror(socket_last_error($this->sock))
                ));
            }

            $now = microtime(true);
            if ($result > 0) {
                $this->last_write = $write_start = $now;
                $written += $result;
            } else {
                if (($now - $write_start) > $this->write_timeout) {
                    throw AMQPTimeoutException::writeTimeout($this->write_timeout);
                }
            }
        }
    }

    /**
     * @inheritdoc
     */
    public function close()
    {
        $this->disableHeartbeat();
        if (is_resource($this->sock) || is_a($this->sock, \Socket::class)) {
            socket_close($this->sock);
        }
        $this->sock = null;
        $this->last_read = 0;
        $this->last_write = 0;
    }

    /**
     * @inheritdoc
     */
    protected function do_select(?int $sec, int $usec)
    {
        if (!is_resource($this->sock) && !is_a($this->sock, \Socket::class)) {
            $this->sock = null;
            throw new AMQPConnectionClosedException('Broken pipe or closed connection', 0);
        }

        $read = array($this->sock);
        $write = null;
        $except = null;

        return socket_select($read, $write, $except, $sec, $usec);
    }

    /**
     * @return int|bool
     */
    protected function select_write()
    {
        $read = $except = null;
        $write = array($this->sock);

        return socket_select($read, $write, $except, 0, 100000);
    }

    /**
     * @throws \PhpAmqpLib\Exception\AMQPIOException
     */
    protected function enable_keepalive(): void
    {
        if (!defined('SOL_SOCKET') || !defined('SO_KEEPALIVE')) {
            throw new AMQPIOException('Can not enable keepalive: SOL_SOCKET or SO_KEEPALIVE is not defined');
        }

        socket_set_option($this->sock, SOL_SOCKET, SO_KEEPALIVE, 1);
    }

    /**
     * @inheritdoc
     */
    public function error_handler($errno, $errstr, $errfile, $errline): void
    {
        $constants = SocketConstants::getInstance();
        // socket_select warning that it has been interrupted by a signal - EINTR
        if (isset($constants->SOCKET_EINTR) && false !== strrpos($errstr, socket_strerror($constants->SOCKET_EINTR))) {
            // it's allowed while processing signals
            return;
        }

        parent::error_handler($errno, $errstr, $errfile, $errline);
    }

    /**
     * @inheritdoc
     */
    protected function setErrorHandler(): void
    {
        parent::setErrorHandler();
        socket_clear_error($this->sock);
    }

    private function isIpv6(): bool
    {
        $ipv6 = filter_var($this->host, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6);

        if ($ipv6 !== false || checkdnsrr($this->host, 'AAAA')) {
            return true;
        }

        return false;
    }
}
<?php

namespace PhpAmqpLib\Wire\IO;

use PhpAmqpLib\Exception\AMQPConnectionClosedException;
use PhpAmqpLib\Exception\AMQPDataReadException;
use PhpAmqpLib\Exception\AMQPIOException;
use PhpAmqpLib\Exception\AMQPRuntimeException;
use PhpAmqpLib\Exception\AMQPTimeoutException;
use PhpAmqpLib\Helper\MiscHelper;
use PhpAmqpLib\Helper\SocketConstants;

class StreamIO extends AbstractIO
{
    /** @var null|resource */
    protected $context;

    /** @var null|resource */
    private $sock;

    /**
     * @param string $host
     * @param int $port
     * @param float $connection_timeout
     * @param float $read_write_timeout
     * @param resource|null $context
     * @param bool $keepalive
     * @param int $heartbeat
     * @param string|null $ssl_protocol @deprecated
     */
    public function __construct(
        $host,
        $port,
        $connection_timeout,
        $read_write_timeout,
        $context = null,
        $keepalive = false,
        $heartbeat = 0,
        $ssl_protocol = null
    ) {
        if (func_num_args() === 8) {
            trigger_error(
                '$ssl_protocol parameter is deprecated, use stream_context_set_option($context, \'ssl\', \'crypto_method\', $ssl_protocol) instead (see https://www.php.net/manual/en/function.stream-socket-enable-crypto.php for possible values)',
                E_USER_DEPRECATED
            );
        }
        // TODO FUTURE change comparison to <=
        // php-amqplib/php-amqplib#648, php-amqplib/php-amqplib#666
        /*
            TODO FUTURE enable this check
        if ($heartbeat !== 0 && ($read_write_timeout < ($heartbeat * 2))) {
            throw new \InvalidArgumentException('read_write_timeout must be at least 2x the heartbeat');
        }
         */

        $this->host = $host;
        $this->port = $port;
        $this->connection_timeout = $connection_timeout;
        $this->read_timeout = (float)$read_write_timeout;
        $this->write_timeout = (float)$read_write_timeout;
        $this->context = $context;
        $this->keepalive = $keepalive;
        $this->heartbeat = $heartbeat;
        $this->initial_heartbeat = $heartbeat;
        $this->canDispatchPcntlSignal = $this->isPcntlSignalEnabled();
    }

    /**
     * @inheritdoc
     */
    public function connect()
    {
        $errstr = $errno = null;

        $remote = sprintf(
            'tcp://%s:%s',
            $this->host,
            $this->port
        );

        $context = $this->setupContext();
        $this->setErrorHandler();

        try {
            $this->sock = stream_socket_client(
                $remote,
                $errno,
                $errstr,
                $this->connection_timeout,
                STREAM_CLIENT_CONNECT,
                $context
            );
            $this->throwOnError();
        } catch (\ErrorException $e) {
            throw new AMQPIOException($e->getMessage(), $e->getCode(), $e->getPrevious());
        } finally {
            $this->restoreErrorHandler();
        }

        if (false === $this->sock) {
            throw new AMQPIOException(
                sprintf(
                    'Error Connecting to server(%s): %s ',
                    $errno,
                    $errstr
                ),
                $errno
            );
        }

        if (!stream_socket_get_name($this->sock, true)) {
            throw new AMQPIOException(
                sprintf(
                    'Connection refused: %s ',
                    $remote
                )
            );
        }

        list($sec, $uSec) = MiscHelper::splitSecondsMicroseconds(max($this->read_timeout, $this->write_timeout));
        if (!stream_set_timeout($this->sock, $sec, $uSec)) {
            throw new AMQPIOException('Timeout could not be set');
        }

        // php cannot capture signals while streams are blocking
        if ($this->canDispatchPcntlSignal) {
            stream_set_blocking($this->sock, false);
            stream_set_write_buffer($this->sock, 0);
            if (function_exists('stream_set_read_buffer')) {
                stream_set_read_buffer($this->sock, 0);
            }
        } else {
            stream_set_blocking($this->sock, true);
        }

        if ($this->keepalive) {
            $this->enable_keepalive();
        }

        $options = stream_context_get_options($context);
        if (isset($options['ssl']['crypto_method'])) {
            $this->enableCrypto();
        }

        $this->heartbeat = $this->initial_heartbeat;
    }

    /**
     * @return resource
     * @throws AMQPIOException
     */
    private function setupContext()
    {
        $context = $this->context;
        if (!is_resource($context) || get_resource_type($context) !== 'stream-context') {
            $context = stream_context_create();
        }

        stream_context_set_option($context, 'socket', 'tcp_nodelay', true);

        $options = stream_context_get_options($context);
        if (!empty($options['ssl']) && !isset($options['ssl']['crypto_method'])) {
            if (!stream_context_set_option($context, 'ssl', 'crypto_method', STREAM_CRYPTO_METHOD_ANY_CLIENT)) {
                throw new AMQPIOException("Can not set ssl.crypto_method stream context option");
            }
        }

        return $context;
    }

    /**
     * @inheritdoc
     */
    public function read($len)
    {
        $this->check_heartbeat();

        list($timeout_sec, $timeout_uSec) = MiscHelper::splitSecondsMicroseconds($this->read_timeout);

        $read_start = microtime(true);
        $read = 0;
        $data = '';

        while ($read < $len) {
            if (!is_resource($this->sock) || feof($this->sock)) {
                $this->close();
                throw new AMQPConnectionClosedException('Broken pipe or closed connection');
            }

            $this->setErrorHandler();
            try {
                $buffer = fread($this->sock, ($len - $read));
                $this->throwOnError();
            } catch (\ErrorException $e) {
                throw new AMQPDataReadException($e->getMessage(), $e->getCode(), $e->getPrevious());
            } finally {
                $this->restoreErrorHandler();
            }

            if ($buffer === false) {
                throw new AMQPDataReadException('Error receiving data');
            }

            if ($buffer === '') {
                $read_now = microtime(true);
                $t_read = $read_now - $read_start;
                if ($t_read > $this->read_timeout) {
                    throw new AMQPTimeoutException('Too many read attempts detected in StreamIO');
                }
                $this->select($timeout_sec, $timeout_uSec);

                continue;
            }

            $this->last_read = microtime(true);
            $read_start = $this->last_read;
            $read += mb_strlen($buffer, 'ASCII');
            $data .= $buffer;
        }

        if (mb_strlen($data, 'ASCII') !== $len) {
            throw new AMQPDataReadException(
                sprintf(
                    'Error reading data. Received %s instead of expected %s bytes',
                    mb_strlen($data, 'ASCII'),
                    $len
                )
            );
        }

        $this->last_read = microtime(true);

        return $data;
    }

    /**
     * @inheritdoc
     */
    public function write($data)
    {
        $this->checkBrokerHeartbeat();

        $written = 0;
        $len = mb_strlen($data, 'ASCII');
        $write_start = microtime(true);

        while ($written < $len) {
            // on Windows, feof() fails when connecting to some (but not all) servers
            if (!is_resource($this->sock) || (PHP_OS_FAMILY != 'Windows' && feof($this->sock))) {
                $this->close();
                $constants = SocketConstants::getInstance();
                throw new AMQPConnectionClosedException('Broken pipe or closed connection', $constants->SOCKET_EPIPE);
            }

            $result = false;
            $this->setErrorHandler();
            // OpenSSL's C library function SSL_write() can balk on buffers > 8192
            // bytes in length, so we're limiting the write size here. On both TLS
            // and plaintext connections, the write loop will continue until the
            // buffer has been fully written.
            // This behavior has been observed in OpenSSL dating back to at least
            // September 2002:
            // http://comments.gmane.org/gmane.comp.encryption.openssl.user/4361
            try {
                // check stream and prevent from high CPU usage
                $result = 0;
                if ($this->select_write()) {
                    // if data is smaller than buffer - no need to cut part of it
                    if ($len <= self::BUFFER_SIZE) {
                        $buffer = $data;
                    } else {
                        $buffer = mb_substr($data, $written, self::BUFFER_SIZE, 'ASCII');
                    }
                    $result = fwrite($this->sock, $buffer);
                }
                $this->throwOnError();
            } catch (\ErrorException $e) {
                $code = $e->getCode();
                $constants = SocketConstants::getInstance();
                switch ($code) {
                    case $constants->SOCKET_EPIPE:
                    case $constants->SOCKET_ENETDOWN:
                    case $constants->SOCKET_ENETUNREACH:
                    case $constants->SOCKET_ENETRESET:
                    case $constants->SOCKET_ECONNABORTED:
                    case $constants->SOCKET_ECONNRESET:
                    case $constants->SOCKET_ECONNREFUSED:
                    case $constants->SOCKET_ETIMEDOUT:
                        $this->close();
                        throw new AMQPConnectionClosedException(socket_strerror($code), $code, $e);
                    default:
                        throw new AMQPRuntimeException($e->getMessage(), $code, $e);
                }
            } finally {
                $this->restoreErrorHandler();
            }

            if ($result === false) {
                throw new AMQPRuntimeException('Error sending data');
            }

            if ($this->timed_out()) {
                throw AMQPTimeoutException::writeTimeout($this->write_timeout);
            }

            $now = microtime(true);
            if ($result > 0) {
                $this->last_write = $write_start = $now;
                $written += $result;
            } else {
                if (feof($this->sock)) {
                    $this->close();
                    throw new AMQPConnectionClosedException('Broken pipe or closed connection');
                }
                if (($now - $write_start) > $this->write_timeout) {
                    throw AMQPTimeoutException::writeTimeout($this->write_timeout);
                }
            }
        }
    }

    /**
     * @inheritdoc
     */
    public function error_handler($errno, $errstr, $errfile, $errline): void
    {
        $code = $this->extract_error_code($errstr);
        $constants = SocketConstants::getInstance();
        switch ($code) {
            // fwrite notice that the stream isn't ready - EAGAIN or EWOULDBLOCK
            case $constants->SOCKET_EAGAIN:
            case $constants->SOCKET_EWOULDBLOCK:
            // stream_select warning that it has been interrupted by a signal - EINTR
            case $constants->SOCKET_EINTR:
                return;
        }

        parent::error_handler($code > 0 ? $code : $errno, $errstr, $errfile, $errline);
    }

    public function close()
    {
        $this->disableHeartbeat();
        if (is_resource($this->sock)) {
            fclose($this->sock);
        }
        $this->sock = null;
        $this->last_read = 0;
        $this->last_write = 0;
    }

    /**
     * @deprecated
     * @return null|resource|\Socket
     */
    public function getSocket()
    {
        return $this->sock;
    }

    /**
     * @inheritdoc
     */
    protected function do_select(?int $sec, int $usec)
    {
        if ($this->sock === null || !is_resource($this->sock)) {
            $this->sock = null;
            throw new AMQPConnectionClosedException('Broken pipe or closed connection', 0);
        }

        $read = array($this->sock);
        $write = null;
        $except = null;

        if ($sec === null && PHP_VERSION_ID >= 80100) {
            $usec = 0;
        }

        return stream_select($read, $write, $except, $sec, $usec);
    }

    /**
     * @return int|bool
     */
    protected function select_write()
    {
        $read = $except = null;
        $write = array($this->sock);

        return stream_select($read, $write, $except, 0, 100000);
    }

    /**
     * @return mixed
     */
    protected function timed_out()
    {
        // get status of socket to determine whether or not it has timed out
        $info = stream_get_meta_data($this->sock);

        return $info['timed_out'];
    }

    /**
     * @throws \PhpAmqpLib\Exception\AMQPIOException
     */
    protected function enable_keepalive(): void
    {
        if (!function_exists('socket_import_stream')) {
            throw new AMQPIOException('Can not enable keepalive: function socket_import_stream does not exist');
        }

        if (!defined('SOL_SOCKET') || !defined('SO_KEEPALIVE')) {
            throw new AMQPIOException('Can not enable keepalive: SOL_SOCKET or SO_KEEPALIVE is not defined');
        }

        $socket = socket_import_stream($this->sock);
        socket_set_option($socket, SOL_SOCKET, SO_KEEPALIVE, 1);
    }

    /**
     * @param string $message
     * @return int
     */
    protected function extract_error_code($message)
    {
        if (0 === strpos($message, 'stream_select():')) {
            $pattern = '/\s+\[(\d+)\]:\s+/';
        } else {
            $pattern = '/\s+errno=(\d+)\s+/';
        }
        $matches = array();
        $result = preg_match($pattern, $message, $matches);
        if ($result > 0) {
            return (int)$matches[1];
        }

        return 0;
    }

    /**
     * @throws AMQPIOException
     */
    private function enableCrypto(): void
    {
        $timeout_at = time() + ($this->read_timeout + $this->write_timeout) * 2; // 2 round-trips during handshake

        try {
            $this->setErrorHandler();
            do {
                $enabled = stream_socket_enable_crypto($this->sock, true);
                if ($enabled === true) {
                    return;
                }
                $this->throwOnError();
                usleep(1e3);
            } while ($enabled === 0 && time() < $timeout_at);
        } catch (\ErrorException $exception) {
            throw new AMQPIOException($exception->getMessage(), $exception->getCode(), $exception->getPrevious());
        } finally {
            $this->restoreErrorHandler();
        }

        if ($enabled !== true) {
            throw new AMQPIOException('Could not enable socket crypto');
        }
    }
}
# php-amqplib #

![PHPUnit tests](https://github.com/php-amqplib/php-amqplib/workflows/PHPUnit%20tests/badge.svg)
[![Latest Version on Packagist][ico-version]][link-packagist]
[![Total Downloads][ico-downloads]][link-downloads]
[![Software License][ico-license]](LICENSE)

[![codecov](https://codecov.io/gh/php-amqplib/php-amqplib/branch/master/graph/badge.svg?token=tgeYkUsaDM)](https://codecov.io/gh/php-amqplib/php-amqplib)
[![Coverage Status][ico-scrutinizer]][link-scrutinizer]
[![Quality Score][ico-code-quality]][link-code-quality]

This library is a _pure PHP_ implementation of the [AMQP 0-9-1 protocol](http://www.rabbitmq.com/tutorials/amqp-concepts.html).
It's been tested against [RabbitMQ](http://www.rabbitmq.com/).

The library was used for the PHP examples of [RabbitMQ in Action](http://manning.com/videla/) and the [official RabbitMQ tutorials](http://www.rabbitmq.com/tutorials/tutorial-one-php.html).

Please note that this project is released with a [Contributor Code of Conduct](.github/CODE_OF_CONDUCT.md). By participating in this project you agree to abide by its terms.

## Project Maintainers

Thanks to [videlalvaro](https://github.com/videlalvaro) and [postalservice14](https://github.com/postalservice14) for creating `php-amqplib`.

The package is now maintained by [Ramūnas Dronga](https://github.com/ramunasd), [Luke Bakken](https://github.com/lukebakken) and several VMware engineers working on RabbitMQ.

## Supported RabbitMQ Versions ##

Starting with version 2.0 this library uses `AMQP 0.9.1` by default and thus requires [RabbitMQ 2.0 or later version](http://www.rabbitmq.com/download.html).
Usually server upgrades do not require any application code changes since
the protocol changes very infrequently but please conduct your own testing before upgrading.

## Supported RabbitMQ Extensions ##

Since the library uses `AMQP 0.9.1` we added support for the following RabbitMQ extensions:

* Exchange to Exchange Bindings
* Basic Nack
* Publisher Confirms
* Consumer Cancel Notify

Extensions that modify existing methods like `alternate exchanges` are also supported.

### Related libraries

* [enqueue/amqp-lib](https://github.com/php-enqueue/amqp-lib) is a [amqp interop](https://github.com/queue-interop/queue-interop#amqp-interop) compatible wrapper.

* [AMQProxy](https://github.com/cloudamqp/amqproxy) is a proxy library with connection and channel pooling/reusing. This allows for lower connection and channel churn when using php-amqplib, leading to less CPU usage of RabbitMQ.

## Setup ##

Ensure you have [composer](http://getcomposer.org) installed, then run the following command:

```bash
$ composer require php-amqplib/php-amqplib
```

That will fetch the library and its dependencies inside your vendor folder. Then you can add the following to your
.php files in order to use the library

```php
require_once __DIR__.'/vendor/autoload.php';
```

Then you need to `use` the relevant classes, for example:

```php
use PhpAmqpLib\Connection\AMQPStreamConnection;
use PhpAmqpLib\Message\AMQPMessage;
```

## Usage ##

With RabbitMQ running open two Terminals and on the first one execute the following commands to start the consumer:

```bash
$ cd php-amqplib/demo
$ php amqp_consumer.php
```

Then on the other Terminal do:

```bash
$ cd php-amqplib/demo
$ php amqp_publisher.php some text to publish
```

You should see the message arriving to the process on the other Terminal

Then to stop the consumer, send to it the `quit` message:

```bash
$ php amqp_publisher.php quit
```

If you need to listen to the sockets used to connect to RabbitMQ then see the example in the non blocking consumer.

```bash
$ php amqp_consumer_non_blocking.php
```

## Change log

Please see [CHANGELOG](CHANGELOG.md) for more information what has changed recently.

## API Documentation ##

http://php-amqplib.github.io/php-amqplib/

## Tutorials ##

To not repeat ourselves, if you want to learn more about this library,
please refer to the [official RabbitMQ tutorials](http://www.rabbitmq.com/tutorials/tutorial-one-php.html).

## More Examples ##

- `amqp_ha_consumer.php`: demos the use of mirrored queues.
- `amqp_consumer_exclusive.php` and `amqp_publisher_exclusive.php`: demos fanout exchanges using exclusive queues.
- `amqp_consumer_fanout_{1,2}.php` and `amqp_publisher_fanout.php`: demos fanout exchanges with named queues.
- `amqp_consumer_pcntl_heartbeat.php`: demos signal-based heartbeat sender usage.
- `basic_get.php`: demos obtaining messages from the queues by using the _basic get_ AMQP call.

## Multiple hosts connections ##

If you have a cluster of multiple nodes to which your application can connect,
you can start a connection with an array of hosts. To do that you should use
the `create_connection` static method.

For example:
```php
$connection = AMQPStreamConnection::create_connection([
    ['host' => HOST1, 'port' => PORT, 'user' => USER, 'password' => PASS, 'vhost' => VHOST],
    ['host' => HOST2, 'port' => PORT, 'user' => USER, 'password' => PASS, 'vhost' => VHOST]
],
$options);
```

This code will try to connect to `HOST1` first, and connect to `HOST2` if the
first connection fails. The method returns a connection object for the first
successful connection. Should all connections fail it will throw the exception
from the last connection attempt.

See `demo/amqp_connect_multiple_hosts.php` for more examples.

## Batch Publishing ##

Let's say you have a process that generates a bunch of messages that are going to be published to the same `exchange` using the same `routing_key` and options like `mandatory`.
Then you could make use of the `batch_basic_publish` library feature. You can batch messages like this:

```php
$msg = new AMQPMessage($msg_body);
$ch->batch_basic_publish($msg, $exchange);

$msg2 = new AMQPMessage($msg_body);
$ch->batch_basic_publish($msg2, $exchange);
```

and then send the batch like this:

```php
$ch->publish_batch();
```

### When do we publish the message batch? ###

Let's say our program needs to read from a file and then publish one message per line. Depending on the message size, you will have to decide when it's better to send the batch.
You could send it every 50 messages, or every hundred. That's up to you.

## Optimized Message Publishing ##

Another way to speed up your message publishing is by reusing the `AMQPMessage` message instances. You can create your new message like this:

```php
$properties = array('content_type' => 'text/plain', 'delivery_mode' => AMQPMessage::DELIVERY_MODE_PERSISTENT);
$msg = new AMQPMessage($body, $properties);
$ch->basic_publish($msg, $exchange);
```

Now let's say that while you want to change the message body for future messages, you will keep the same properties, that is, your messages will still be `text/plain` and the `delivery_mode` will still be `AMQPMessage::DELIVERY_MODE_PERSISTENT`. If you create a new `AMQPMessage` instance for every published message, then those properties would have to be re-encoded in the AMQP binary format. You could avoid all that by just reusing the `AMQPMessage` and then resetting the message body like this:

```php
$msg->setBody($body2);
$ch->basic_publish($msg, $exchange);
```

## Truncating Large Messages ##

AMQP imposes no limit on the size of messages; if a very large message is received by a consumer, PHP's memory limit may be reached
within the library before the callback passed to `basic_consume` is called.

To avoid this, you can call the method `AMQPChannel::setBodySizeLimit(int $bytes)` on your Channel instance. Body sizes exceeding this limit will be truncated,
and delivered to your callback with a `AMQPMessage::$is_truncated` flag set to `true`. The property `AMQPMessage::$body_size` will reflect the true body size of
a received message, which will be higher than `strlen(AMQPMessage::getBody())` if the message has been truncated.

Note that all data above the limit is read from the AMQP Channel and immediately discarded, so there is no way to retrieve it within your
callback. If you have another consumer which can handle messages with larger payloads, you can use `basic_reject` or `basic_nack` to tell
the server (which still has a complete copy) to forward it to a Dead Letter Exchange.

By default, no truncation will occur. To disable truncation on a Channel that has had it enabled, pass `0` (or `null`) to `AMQPChannel::setBodySizeLimit()`.

## Connection recovery ##

Some RabbitMQ clients using automated connection recovery mechanisms to reconnect
and recover channels and consumers in case of network errors.

Since this client is using a single-thread, you can set up connection recovery
using exception handling mechanism.

Exceptions which might be thrown in case of connection errors:

```php
PhpAmqpLib\Exception\AMQPConnectionClosedException
PhpAmqpLib\Exception\AMQPIOException
\RuntimeException
\ErrorException
```

Some other exceptions might be thrown, but connection can still be there. It's
always a good idea to clean up an old connection when handling an exception
before reconnecting.

For example, if you want to set up a recovering connection:

```php
$connection = null;
$channel = null;
while(true){
    try {
        $connection = new AMQPStreamConnection(HOST, PORT, USER, PASS, VHOST);
        // Your application code goes here.
        do_something_with_connection($connection);
    } catch(AMQPRuntimeException $e) {
        echo $e->getMessage();
        cleanup_connection($connection);
        usleep(WAIT_BEFORE_RECONNECT_uS);
    } catch(\RuntimeException $e) {
        cleanup_connection($connection);
        usleep(WAIT_BEFORE_RECONNECT_uS);
    } catch(\ErrorException $e) {
        cleanup_connection($connection);
        usleep(WAIT_BEFORE_RECONNECT_uS);
    }
}

```

A full example is in `demo/connection_recovery_consume.php`.

This code will reconnect and retry the application code every time the
exception occurs. Some exceptions can still be thrown and should not be handled
as a part of reconnection process, because they might be application errors.

This approach makes sense mostly for consumer applications, producers will
require some additional application code to avoid publishing the same message
multiple times.

This was a simplest example, in a real-life application you might want to
control retr count and maybe gracefully degrade wait time to reconnection.

You can find a more excessive example in [#444](https://github.com/php-amqplib/php-amqplib/issues/444)


## UNIX Signals ##

If you have installed [PCNTL extension](http://www.php.net/manual/en/book.pcntl.php) dispatching of signal will be handled when consumer is not processing message.

```php
$pcntlHandler = function ($signal) {
    switch ($signal) {
        case \SIGTERM:
        case \SIGUSR1:
        case \SIGINT:
            // some stuff before stop consumer e.g. delete lock etc
            pcntl_signal($signal, SIG_DFL); // restore handler
            posix_kill(posix_getpid(), $signal); // kill self with signal, see https://www.cons.org/cracauer/sigint.html
        case \SIGHUP:
            // some stuff to restart consumer
            break;
        default:
            // do nothing
    }
};

pcntl_signal(\SIGTERM, $pcntlHandler);
pcntl_signal(\SIGINT,  $pcntlHandler);
pcntl_signal(\SIGUSR1, $pcntlHandler);
pcntl_signal(\SIGHUP,  $pcntlHandler);
```

To disable this feature just define constant `AMQP_WITHOUT_SIGNALS` as `true`

```php
<?php
define('AMQP_WITHOUT_SIGNALS', true);

... more code

```


## Signal-based Heartbeat ##

If you have installed [PCNTL extension](http://www.php.net/manual/en/book.pcntl.php) and are using PHP 7.1 or greater,
you can register a signal-based heartbeat sender.

```php
<?php

$sender = new PCNTLHeartbeatSender($connection);
$sender->register();
... code
$sender->unregister();

```

## Debugging ##

If you want to know what's going on at a protocol level then add the following constant to your code:

```php
<?php
define('AMQP_DEBUG', true);

... more code

?>
```

## Benchmarks ##

To run the publishing/consume benchmark type:

```bash
$ make benchmark
```

## Tests and Contributing

Please see [CONTRIBUTING](CONTRIBUTING.md) for details.

## Using AMQP 0.8 ##

If you still want to use the old version of the protocol then you can do it by setting the following constant in your configuration code:

```php
define('AMQP_PROTOCOL', '0.8');
```

The default value is `'0.9.1'`.

## Providing your own autoloader ##

If for some reason you don't want to use composer, then you need to have an autoloader in place fo the library classes. People have [reported](https://github.com/videlalvaro/php-amqplib/issues/61#issuecomment-37855050) to use this [autoloader](https://gist.github.com/jwage/221634) with success.

## Original README: ##

Below is the original README file content. Credits goes to the original authors.

PHP library implementing Advanced Message Queuing Protocol (AMQP).

The library is port of python code of py-amqplib
http://barryp.org/software/py-amqplib/

It have been tested with RabbitMQ server.

Project home page: http://code.google.com/p/php-amqplib/

For discussion, please join the group:

http://groups.google.com/group/php-amqplib-devel

For bug reports, please use bug tracking system at the project page.

Patches are very welcome!

Author: Vadim Zaliva <lord@crocodile.org>

[ico-version]: https://img.shields.io/packagist/v/php-amqplib/php-amqplib.svg?style=flat-square
[ico-license]: https://img.shields.io/badge/license-LGPL_2.1-brightgreen.svg?style=flat-square
[ico-scrutinizer]: https://img.shields.io/scrutinizer/coverage/g/php-amqplib/php-amqplib.svg?style=flat-square
[ico-code-quality]: https://img.shields.io/scrutinizer/g/php-amqplib/php-amqplib.svg?style=flat-square
[ico-downloads]: https://img.shields.io/packagist/dt/php-amqplib/php-amqplib.svg?style=flat-square

[link-packagist]: https://packagist.org/packages/php-amqplib/php-amqplib
[link-scrutinizer]: https://scrutinizer-ci.com/g/php-amqplib/php-amqplib/code-structure
[link-code-quality]: https://scrutinizer-ci.com/g/php-amqplib/php-amqplib
[link-downloads]: https://packagist.org/packages/php-amqplib/php-amqplib
[link-author]: https://github.com/php-amqplib
[link-contributors]: ../../contributors
coverage:
  status:
    project:
      default:
        target: auto
        threshold: 0.5
{
    "name": "php-amqplib/php-amqplib",
    "replace": {
        "videlalvaro/php-amqplib": "self.version"
    },
    "type": "library",
    "description": "Formerly videlalvaro/php-amqplib.  This library is a pure PHP implementation of the AMQP protocol. It's been tested against RabbitMQ.",
    "keywords": ["rabbitmq", "message", "queue"],
    "homepage": "https://github.com/php-amqplib/php-amqplib/",
    "authors": [
        {
            "name": "Alvaro Videla",
            "role": "Original Maintainer"
        },
        {
            "name": "Raúl Araya",
            "email": "nubeiro@gmail.com",
            "role": "Maintainer"
        },
        {
            "name": "Luke Bakken",
            "email": "luke@bakken.io",
            "role": "Maintainer"
        },
        {
            "name": "Ramūnas Dronga",
            "email": "github@ramuno.lt",
            "role": "Maintainer"
        }
    ],
    "require": {
        "php": "^7.2||^8.0",
        "ext-sockets": "*",
        "ext-mbstring": "*",
        "phpseclib/phpseclib": "^2.0|^3.0"
    },
    "require-dev": {
        "ext-curl": "*",
        "phpunit/phpunit": "^7.5|^9.5",
        "squizlabs/php_codesniffer": "^3.6",
        "nategood/httpful": "^0.2.20"
    },
    "conflict": {
        "php": "7.4.0 - 7.4.1"
    },
    "autoload": {
        "psr-4": {
            "PhpAmqpLib\\": "PhpAmqpLib/"
        }
    },
    "autoload-dev": {
        "psr-4": {
            "PhpAmqpLib\\Tests\\Functional\\": "tests/Functional",
            "PhpAmqpLib\\Tests\\Unit\\": "tests/Unit"
        }
    },
    "license": "LGPL-2.1-or-later",
    "extra": {
        "branch-alias": {
            "dev-master": "3.0-dev"
        }
    }
}
<?xml version="1.0" encoding="UTF-8"?>
<ruleset xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:noNamespaceSchemaLocation="vendor/squizlabs/php_codesniffer/phpcs.xsd">

    <arg name="basepath" value="."/>
    <arg name="cache" value=".phpcs-cache"/>
    <arg name="colors"/>
    <arg value="p"/>
    <arg name="extensions" value="php"/>
    <arg name="tab-width" value="4"/>
    <arg name="report-width" value="120"/>

    <rule ref="PEAR.Functions.ValidDefaultValue">
        <!-- We should preserve BC with possible child classes until next major version -->
        <exclude-pattern>PhpAmqpLib/Helper/Protocol/Protocol091.php</exclude-pattern>
        <exclude-pattern>PhpAmqpLib/Helper/Protocol/Protocol080.php</exclude-pattern>
        <exclude-pattern>PhpAmqpLib/Connection/AbstractConnection.php</exclude-pattern>
    </rule>

    <rule ref="PSR1.Methods.CamelCapsMethodName.NotCamelCaps">
        <!-- We should preserve BC with possible child classes
            and public method usage until next major version -->
        <exclude-pattern>PhpAmqpLib/Wire/AMQPReader.php</exclude-pattern>
        <exclude-pattern>PhpAmqpLib/Wire/IO/SocketIO.php</exclude-pattern>
        <exclude-pattern>PhpAmqpLib/Wire/IO/StreamIO.php</exclude-pattern>
        <exclude-pattern>PhpAmqpLib/Wire/IO/AbstractIO.php</exclude-pattern>
        <exclude-pattern>PhpAmqpLib/Wire/AMQPWriter.php</exclude-pattern>
        <exclude-pattern>PhpAmqpLib/Connection/AMQPSocketConnection.php</exclude-pattern>
        <exclude-pattern>PhpAmqpLib/Connection/AMQPSSLConnection.php</exclude-pattern>
        <exclude-pattern>PhpAmqpLib/Connection/AMQPStreamConnection.php</exclude-pattern>
        <exclude-pattern>PhpAmqpLib/Connection/AMQPLazyConnection.php</exclude-pattern>
        <exclude-pattern>PhpAmqpLib/Connection/AMQPLazySocketConnection.php</exclude-pattern>
        <exclude-pattern>PhpAmqpLib/Connection/AMQPLazySSLConnection.php</exclude-pattern>
        <exclude-pattern>PhpAmqpLib/Connection/AbstractConnection.php</exclude-pattern>
        <exclude-pattern>PhpAmqpLib/Message/AMQPMessage.php</exclude-pattern>
        <exclude-pattern>PhpAmqpLib/Helper/Protocol/Wait091.php</exclude-pattern>
        <exclude-pattern>PhpAmqpLib/Helper/Protocol/MethodMap091.php</exclude-pattern>
        <exclude-pattern>PhpAmqpLib/Helper/Protocol/Wait080.php</exclude-pattern>
        <exclude-pattern>PhpAmqpLib/Helper/Protocol/MethodMap080.php</exclude-pattern>
        <exclude-pattern>PhpAmqpLib/Helper/DebugHelper.php</exclude-pattern>
        <exclude-pattern>PhpAmqpLib/Helper/MiscHelper.php</exclude-pattern>
        <exclude-pattern>PhpAmqpLib/Channel/AMQPChannel.php</exclude-pattern>
        <exclude-pattern>PhpAmqpLib/Channel/AbstractChannel.php</exclude-pattern>
    </rule>

    <file>PhpAmqpLib/</file>
</ruleset>
TEST_RABBITMQ_HOST=php-amqplib-rabbitmq
TOXIPROXY_HOST=php-amqplib-toxiproxy
TOXIPROXY_AMQP_PORT=5673
<?php

// autoload.php @generated by Composer

if (PHP_VERSION_ID < 50600) {
    if (!headers_sent()) {
        header('HTTP/1.1 500 Internal Server Error');
    }
    $err = 'Composer 2.3.0 dropped support for autoloading on PHP <5.6 and you are running '.PHP_VERSION.', please upgrade PHP or use Composer 2.2 LTS via "composer self-update --2.2". Aborting.'.PHP_EOL;
    if (!ini_get('display_errors')) {
        if (PHP_SAPI === 'cli' || PHP_SAPI === 'phpdbg') {
            fwrite(STDERR, $err);
        } elseif (!headers_sent()) {
            echo $err;
        }
    }
    throw new RuntimeException($err);
}

require_once __DIR__ . '/composer/autoload_real.php';

return ComposerAutoloaderInit80c140823c36ce4bfbf0065fcf11db2b::getLoader();
<?php

namespace SeAT;

use Exception;
use League\CLImate\CLImate;
use SeAT\util\EnvironmentValidator;
use SeAT\check\Audit;
use SeAT\result\AuditReport;
use SeAT\util\DatabaseAccessUtility as DBA;
use SeAT\util\ConfigurationUtility;
use SeAT\util\InstanceConfigurationExtractorUtility;
use OrangeHRM\DevOps\utility\InstanceDatabaseAccessUtility;

class App
{

    /**
     *
     * @var CLImate
     */
    protected $cli;

    public function __construct()
    {
        $this->init();
    }

    /**
     *
     */
    public function run(): void
    {

        try {
            $this->cli->arguments->parse();
            $path = $this->cli->arguments->get('instancePath');
        } catch (Exception $e) {
            $this->cli->usage();
            exit(1);
        }

        if ($this->cli->arguments->get('help')) {
            $this->cli->usage();
            exit(0);
        }

        $isVerbose = !$this->cli->arguments->get('quiet');
        try {
            if ($isVerbose) {
                $this->cli->out("Processing {$path}...");
            }

            $this->performEnvironmentValidations($path, $this->cli->arguments->get('dbRootUser'), $this->cli->arguments->get('dbRootPassword'));
            $auditReport = $this->performAudit($path);
            $this->output($auditReport);

        } catch (Exception $e) {
            if ($isVerbose) {
                $this->cli->tab()->error("Error occurred: {$e->getMessage()}");
                echo $e->getTraceAsString(), "\n";
            }
        }
    }

    protected function init(): void
    {
        $this->cli = new CLImate();
        $this->cli->arguments->add([
            'instancePath' => [
                'prefix' => 'i',
                'longPrefix' => 'instance-path',
                'description' => 'Instance path',
                'required' => false,
            ],
            'dbHost' => [
                'prefix' => 'h',
                'longPrefix' => 'db-host',
                'description' => 'MySQL/MariaDB host IP or domain name',
                'default' => 'localhost',
                'required' => false,
            ],
            'dbPort' => [
                'prefix' => 'P',
                'longPrefix' => 'db-port',
                'description' => 'MySQL/MariaDB port',
                'default' => 3306,
                'required' => false,
            ],
            'dbRootUser' => [
                'prefix' => 'u',
                'longPrefix' => 'db-root-user',
                'description' => 'MySQL/MariaDB root user',
                'default' => 'root',
                'required' => false,
            ],
            'dbRootPassword' => [
                'prefix' => 'p',
                'longPrefix' => 'db-root-password',
                'description' => 'MySQL/MariaDB root password',
                'default' => '',
                'required' => false,
            ],
            'outputFormat' => [
                'prefix' => 'f',
                'longPrefix' => 'output-format',
                'description' => 'Output format',
                'default' => 'html',
                'required' => false,
            ],
            'outputFile' => [
                'prefix' => 'o',
                'longPrefix' => 'output-file',
                'description' => 'Output file',
                'default' => 'output.html',
                'required' => false,
            ],
            'quiet' => [
                'prefix' => 'q',
                'longPrefix' => 'quiet',
                'description' => 'Quiet (Non-Interactive)',
                'noValue' => true,
            ],
            'debug' => [
                'prefix' => 'd',
                'longPrefix' => 'debug',
                'description' => 'Debug mode',
                'noValue' => true,
            ],
            'help' => [
                'longPrefix' => 'help',
                'description' => 'Print help',
                'noValue' => true,
            ],
        ]);

        $this->cli->style->addCommand('success', 'green');
        $this->cli->style->addCommand('info', 'cyan');
        $this->cli->style->addCommand('warning', 'yellow');
        $this->cli->style->addCommand('error', ['red', 'bold']);
    }

    /**
     * @throws Exception
     */
    protected function performEnvironmentValidations($path, $dbRootUser, $dbRootPassword): void
    {

        $isVerbose = !$this->cli->arguments->get('quiet');
        if ($isVerbose) {
            $this->cli->out("Validating environment...");
        }

        if (!empty($path)) {
            $envValidator = new EnvironmentValidator();
            $envValidator->setPath($path);
            $envValidator->setDbRootUser($dbRootUser);
            $envValidator->setDbRootPassword($dbRootPassword);

            if (!$envValidator->isValid()) {
                if ($isVerbose) {
                    $errors = $envValidator->getErrors();
                    foreach ($errors as $error) {
                        $this->cli->tab()->error($error);
                    }
                    $warnings = $envValidator->getWarnings();
                    foreach ($warnings as $warning) {
                        $this->cli->tab()->warning($warning);
                    }
                }
            }

            if (!$envValidator->canProceed()) {
                if ($isVerbose) {
                    $this->cli->out('Exiting...');
                }
                exit(1);
            }

            if ($isVerbose) {
                $infoMessages = $envValidator->getInfoMessages();
                foreach ($infoMessages as $infoMessage) {
                    $this->cli->tab()->info($infoMessage);
                }
            }
        }

        if ($isVerbose) {
            $this->cli->tab()->success("Environment validations complete.");
        }
    }

    /**
     * @throws Exception
     */
    protected function performAudit($path): AuditReport
    {
        $dbHost = $this->cli->arguments->get('dbHost');
        $dbPort = (int)$this->cli->arguments->get('dbPort');
        $dbRootUser = $this->cli->arguments->get('dbRootUser');
        $dbRootPassword = $this->cli->arguments->get('dbRootPassword');
        $isQuiet = $this->cli->arguments->get('quiet');
        $isDebugMode = $this->cli->arguments->get('debug');

        $dba = new InstanceDatabaseAccessUtility();
        $dba->setDbUser($dbRootUser);
        $dba->setDbPassword($dbRootPassword);
        $dba->setDbHost(empty($dbHost) ? 'localhost' : $dbHost);
        $dba->setDbPort($dbPort);

        $trimmedDbRootPassword = trim($dbRootPassword);
        if (empty($trimmedDbRootPassword)) {
            $this->cli->tab()->warning("It appears that the password you entered is empty. This is highly unlikely.");
            $reAskedPassword = $this->cli->tab()->password("Please enter the database root password again:")->prompt();
            $dbRootPassword = $reAskedPassword;
        }

        if (empty($path)) {
            $configUtil = new ConfigurationUtility();
            $configUtil->setDsn("mysql:host={$dbHost};port={$dbPort}");
            $configUtil->setDbRootUser($dbRootUser);
            $configUtil->setDbRootPassword($dbRootPassword);
            $dba->setConfigUtility($configUtil);

            $dependencies = [
                'dba' => $dba,
            ];
        } else {
            $configUtil = new InstanceConfigurationExtractorUtility($path);
            $configUtil->setDbRootUser($dbRootUser);
            $configUtil->setDbRootPassword($dbRootPassword);
            $dba->setInstallationDirectory($path);

            $dependencies = [
                'dba' => $dba,
                'path' => $path,
                'appConfig' => $configUtil,
            ];
        }

        $dependencies['runtime'] = [
            'isQuiet' => $isQuiet,
            'isDebugMode' => $isDebugMode,
        ];

        $audit = new Audit();
        return $audit->run($dependencies);
    }

    /**
     * @throws Exception
     */
    protected function output(AuditReport $auditReport): void
    {
        $outputFormats = explode(',', $this->cli->arguments->get('outputFormat'));
        $path = $this->cli->arguments->get('instancePath');
        $outputs = explode(',', $this->cli->arguments->get('outputFile'));

        if (count($outputFormats) !== count($outputs)) {
            throw new Exception("The number of output file paths doesn't match the number of formats.");
        }

        foreach ($outputFormats as $index => $outputFormat) {
            $formatterClass = "\\SeAT\\formatter\\" . ucfirst($outputFormat) . "OutputFormatter";
            $formatter = new $formatterClass;
            $formatter->setResult($auditReport);
            $formatter->setTemplate($this->getTemplate($outputFormat, $path));

            file_put_contents($outputs[$index], $formatter->render());
        }
    }

    protected function getTemplate($outputFormat, $path)
    {
        switch ($outputFormat) {
            case 'html':
            case 'pdf':
                $templateFile = empty($path) ? 'initial-html-output-format.html' : 'full-html-output-format.html';
                $templateFilePath = __DIR__ . '/../templates/' . $templateFile;
                return file_get_contents($templateFilePath);
            default :
                return '';
        }
    }

}
<?php

namespace SeAT\check;

use SeAT\result\Result;
use SeAT\result\SimpleValueResult;

class HttpdVersionCheck extends MiddlewareVersionCheck
{

    protected string $recommended = '2.4';
    protected string $min = '2.2';
    protected string $max = '2.4.52';
    protected string $description = 'Apache / IIS Version';

    public function execute(): Result
    {
        $output = array();
        $returnVar = null;

        if ($this->canRun('/usr/sbin/httpd')) {
            $httpServicePath = '/usr/sbin/httpd';
        } elseif ($this->canRun('/usr/sbin/apache2')) {
            $httpServicePath = '/usr/sbin/apache2';
        } else {
            $result = new SimpleValueResult();
            $result->setValue('N/A');
            $result->setDescription($this->description);
            $result->setFlag(Result::WARNING);
            $result->setComment("Couldn't determine version, since a supported HTTP application was not found.");
            return $result;
        }

        exec("{$httpServicePath} -v | grep -i server\ version | cut -d':' -f2 | sed 's/\s//g' | sed 's/Apache\///g' | sed 's/\([a-z]*\)$//'", $output, $returnVar);
        $currentVersion = ($returnVar === 0) ? implode('', $output) : '0.0';

        return $this->prepareResult($currentVersion);
    }
}
<?php

namespace SeAT\check;

use SeAT\result\Result;

class HttpdWebRootCheck extends HttpServiceConfigCheck
{

    protected string $command = "";
    protected string $description = 'Web Root';
    protected $expectation = null;
    protected bool $critical = false;
    protected string $warningMessage = '';
    protected string $errorMessage = '';

    public function __construct()
    {
        $this->init();
    }

    protected final function init()
    {
        if ($this->canRun('/usr/sbin/httpd')) {
            $this->command = '/usr/sbin/httpd -S | grep Main\ DocumentRoot | cut -d\':\' -f2 | sed \'s/"//g\'';
        } elseif ($this->canRun('/usr/sbin/apache2')) {
            $this->command = '/usr/sbin/apache2 -S | grep Main\ DocumentRoot | cut -d\':\' -f2 | sed \'s/"//g\'';
        } else {
            $this->command = "echo ''";
        }
    }

    protected function determineComment(string $value): string
    {
        return '';
    }

    protected function determineFlag(string $value): string
    {
        return Result::OK;
    }

}
<?php

namespace SeAT\check;

class HttpdDeflateModuleCheck extends HttpServiceConfigCheck
{

    protected string $command = "";
    protected string $description = 'mod_deflate';
    protected $expectation = ' deflate_module (shared)';
    protected bool $critical = false;
    protected string $warningMessage = "Deflate module is essential for instance's performance.";
    protected string $errorMessage = "Deflate module is essential for instance's performance.";

    public function __construct()
    {
        $this->init();
    }

    protected final function init()
    {
        if ($this->canRun('/usr/sbin/httpd')) {
            $this->command = '/usr/sbin/httpd -M | grep deflate';
        } elseif ($this->canRun('/usr/sbin/apache2')) {
            $this->command = '/usr/sbin/apache2 -M | grep deflate';
        } else {
            $this->command = "echo ''";
        }
    }
}
<?php

namespace SeAT\check;

class HttpdRewriteModuleCheck extends HttpServiceConfigCheck
{

    protected string $command = '';
    protected string $description = 'mod_rewrite';
    protected $expectation = ' rewrite_module (shared)';
    protected bool $critical = true;
    protected string $warningMessage = "Rewrite module needs to be enabled.";
    protected string $errorMessage = "Rewrite module needs to be enabled.";

    public function __construct()
    {
        $this->init();
    }

    protected final function init()
    {
        if ($this->canRun('/usr/sbin/httpd')) {
            $this->command = '/usr/sbin/httpd -M | grep rewrite';
        } elseif ($this->canRun('/usr/sbin/apache2')) {
            $this->command = '/usr/sbin/apache2 -M | grep rewrite';
        } else {
            $this->command = "echo ''";
        }
    }

}
<?php

namespace SeAT\check;

class HttpdSslModuleCheck extends HttpServiceConfigCheck
{

    protected string $command = "";
    protected string $description = 'mod_ssl';
    protected $expectation = ' ssl_module (shared)';
    protected bool $critical = true;
    protected string $warningMessage = "SSL module is mandatory for instance's security.";
    protected string $errorMessage = "SSL module is mandatory for instance's security.";

    public function __construct()
    {
        $this->init();
    }

    protected final function init()
    {
        if ($this->canRun('/usr/sbin/httpd')) {
            $this->command = '/usr/sbin/httpd -M | grep ssl';
        } elseif ($this->canRun('/usr/sbin/apache2')) {
            $this->command = '/usr/sbin/apache2 -M | grep ssl';
        } else {
            $this->command = "echo ''";
        }
    }

}
<?php

namespace SeAT\check;

use Exception;
use SeAT\result\Result;
use SeAT\result\SimpleValueResult;

abstract class HttpServiceConfigCheck implements Check
{

    protected string $command;
    protected string $description;
    protected $expectation;
    protected bool $critical = true;
    protected string $warningMessage;
    protected string $errorMessage;

    /**
     * @throws Exception
     */
    public function execute(): Result
    {

        $value = $this->getValue();

        $result = new SimpleValueResult();

        $result->setDescription($this->description);
        $result->setValue($value);
        $result->setFlag($this->determineFlag($value));
        $result->setComment($this->determineComment($value));

        return $result;
    }

    /**
     * @throws Exception
     */
    protected function getValue(): string
    {
        if (!isset($this->command)) {
            throw new Exception("Command is not set.");
        }

        $output = [];
        $returnVar = null;
        exec($this->command, $output, $returnVar);

        return ($returnVar === 0) ? implode("\n", $output) : Check::UNDETERMINED;
    }

    protected function determineFlag(string $value): string
    {
        return ($this->matchesExpectation($value)) ? Result::OK : ($this->critical ? Result::ERROR : Result::WARNING);
    }

    protected function determineComment(string $value): string
    {
        return ($this->matchesExpectation($value)) ? '' : ($this->critical ? $this->errorMessage : $this->warningMessage);
    }

    protected function matchesExpectation(string $value): bool
    {
        if (is_array($this->expectation)) {
            return in_array($value, $this->expectation);
        } else {
            return ($value === $this->expectation);
        }
    }

    protected final function canRun($app): bool
    {
        return (file_exists($app) && is_executable($app));
    }

}
<?php

namespace SeAT\check;

class DomainCheck extends DatabaseValueCheck
{

    protected string $table = 'ohrm_config';
    protected string $field = 'value';
    protected string $condition = 'property = ?';
    protected array $params = ['domain.name'];
    protected string $description = 'Hosted URL';

}
<?php

namespace SeAT\check;

use OrangeHRM\DevOps\utility\InstanceDatabaseAccessUtility as DBA;

class HttpServerParametersCheck extends ParametersCheck implements InstanceDatabaseAccess
{
    protected DBA $dba;

    public function getDba(): DBA
    {
        return $this->dba;
    }

    public function setDba(DBA $dba)
    {
        $this->dba = $dba;
    }

    protected function findParamValue($param)
    {
        // TODO: Implement findParamValue() method.
    }
}
<?php

namespace SeAT\check;

use Exception;

class EmailQueueCheck extends DatabaseResultsCheck implements InstanceFsAccess
{

    protected string $path;

    public function getPath(): string
    {
        return $this->path;
    }

    public function setPath(string $path)
    {
        $this->path = $path;
    }

    /**
     * @throws Exception
     */
    protected function retrieveData(): array
    {

        $stats = $this->fetchEmailQueueUsageStats();
        $stats['emailQueueLastEmailSentOn'] = $this->determineLastEmailSentDateFromLogs($stats['emailQueueLastEmailSentOn']);
        return [
            ['criterion' => 'Last Email Sent on', 'value' => $stats['emailQueueLastEmailSentOn']],
            ['criterion' => 'Pending', 'value' => $stats['emailQueuePendingCount']],
            ['criterion' => 'Started', 'value' => $stats['emailQueueStartedCount']],
            ['criterion' => 'Failed', 'value' => $stats['emailQueueFailedCount']],
            ['criterion' => 'Total', 'value' => $stats['emailQueueTotalCount']],
        ];
    }

    protected final function determineLastEmailSentDateFromLogs($default)
    {
        $filesArray = [];

        $logFilePathPattern = implode(DIRECTORY_SEPARATOR, [$this->getPath(), 'symfony', 'log', '*sent_emails.log']);
        foreach (glob($logFilePathPattern) as $file) {
            $filesArray[] = $file;
        }

        if (count($filesArray) > 0) {
            rsort($filesArray);
            return date("d-m-Y H:i:s", filemtime($filesArray[0]));
        } else {
            return $default;
        }
    }

    /**
     * @throws Exception
     */
    protected final function fetchEmailQueueUsageStats(): array
    {
        $query = "
SELECT 
  IFNULL((SELECT CONCAT(MAX(`updated_at`), ' ', @@system_time_zone) FROM `ohrm_email_queue` WHERE `status` = 'SENT'), 'Never/Unknown') AS emailQueueLastEmailSentOn,
  SUM(IF(`status` = 'PENDING', 1, 0)) AS emailQueuePendingCount,
  SUM(IF(`status` = 'STARTED', 1, 0)) AS emailQueueStartedCount,
  SUM(IF(`status` = 'FAILED', 1, 0)) AS emailQueueFailedCount,
  SUM(1) AS emailQueueTotalCount
FROM `ohrm_email_queue`;
";

        list($counts) = $this->getDba()->fetchAll($query);

        return $counts;
    }

}
<?php

namespace SeAT\check;

class HttpPortCheck extends HttpServiceConfigCheck
{

    protected string $command = "echo 80";
    protected string $description = 'HTTP Port';
    protected $expectation = [80, 8080];
    protected bool $critical = false;
    protected string $warningMessage = "HTTP service seem to be running on an uncommon port.";
    protected string $errorMessage = "Couldn't determine the HTTP port. Verify manually.";

}
<?php

namespace SeAT\check;

use SeAT\result\Result;
use SeAT\result\SimpleValueResult;
use SeAT\util\InstanceConfigurationExtractorUtility as AppConfig;

class HostedWithDbRootUserCheck implements Check, InstanceConfigAccess
{

    protected AppConfig $appConfig;

    public function execute(): Result
    {
        $result = new SimpleValueResult();

        $isHostedWithDbRootUser = ($this->getAppConfig()->getAppDbUser() === 'root');
        $result->setDescription('Is Deployed with DB root Account?');
        $result->setValue($isHostedWithDbRootUser ? 'Yes' : 'No');
        $result->setFlag($isHostedWithDbRootUser ? Result::WARNING : Result::OK);
        $result->setComment($isHostedWithDbRootUser ? 'Using the root user as the database user is not recommended.' : '');

        return $result;
    }

    public function getAppConfig(): AppConfig
    {
        return $this->appConfig;
    }

    public function setAppConfig(AppConfig $appConfig)
    {
        $this->appConfig = $appConfig;
    }

}
<?php

namespace SeAT\check;

class FilePermissionsCheck extends FsPermissionsCheck
{

    protected array $nodes = [
        'lib/confs/cryptokeys/key.ohrm' => 775,
        'symfony/config/databases.yml' => 775,
        'symfony/web/.htaccess' => 775,
    ];
    protected string $identifier = '-';

}
<?php

namespace SeAT\check;

use SeAT\result\Result;

class HttpHeaderXFrameOptionsCheck extends HttpServiceConfigCheck
{

    protected string $command = "echo true";
    protected string $description = 'HTTP Header: X-Frame-Options: sameorigin';
    protected $expectation = 'true';
    protected bool $critical = false;
    protected string $warningMessage = '';
    protected string $errorMessage = '';

}
<?php

namespace SeAT\check;

class HardwareClockTimeCheck extends TimeCheck
{

    protected string $description = 'Hardware Clock Time';

    protected function getDependencies(): array
    {
        return [];
    }

    public function getValue(): string
    {
        if (PHP_OS_FAMILY === 'Linux') {
            $command = "hwclock";
            $output = [];
            $returnVar = null;

            exec($command, $output, $returnVar);
            if ($returnVar === 0) {
                $value = implode("", $output);

                if (preg_match('/seconds/', $value)) {
                    $value = preg_replace('/-\d+\.\d*\s*seconds/', '', $value);
                }

                $time = strtotime($value);
                return ($time !== false) ? date('Y-m-d H:i', $time) : 'ERROR';
            } else {
                return 'ERROR';
            }
        } else {
            return 'NOT SUPPORTED';
        }
    }

}
<?php

namespace SeAT\check;

use SeAT\result\Result;

class HardwareMonitoringAvailabilityCheck extends UserInputCheck
{

    protected string $prompt = 'Is hardware monitoring available? If yes, please specify the name:';
    protected string $description = 'Is Hardware Monitoring Available?';
    protected bool $tag = true;

    protected function determineComment(string $value): string
    {
        return (strtolower(trim($value)) === 'no') ? "It's recommended to have hardware monitoring for availability and QoS." : '';
    }

    protected function determineFlag(string $value): string
    {
        return (strtolower(trim($value)) === 'no') ? Result::WARNING : Result::OK;
    }

}
<?php

namespace SeAT\check;

use SeAT\result\Result;
use SeAT\result\SimpleValueResult;
use SeAT\result\DataItemFactory;
use SeAT\result\DatasetResult;

class FirewallCheck implements Check
{

    protected DataItemFactory $dataItemFactory;

    public function getDataItemFactory(): DataItemFactory
    {
        if (!isset($this->dataItemFactory)) {
            $this->dataItemFactory = new DataItemFactory();
        }
        return $this->dataItemFactory;
    }

    public function setDataItemFactory(DataItemFactory $dataItemFactory)
    {
        $this->dataItemFactory = $dataItemFactory;
    }

    public function execute(): Result
    {
        $chains = ['INPUT', 'OUTPUT', 'FORWARD'];

        $result = new DatasetResult();
        foreach ($chains as $chain) {
            $output = [];
            $returnVar = null;
            exec("iptables -L {$chain}", $output, $returnVar);

            if ($returnVar === 0) {
                foreach ($output as $rule) {
                    $result->add($this->getDataItemFactory()->generate($rule, '', '', ''));
                }
            } else {
                $result->add($this->getDataItemFactory()->generate('', '', '', "Couldn't get rules for the {$chain} chain"));
            }
        }
        return $result;
    }

}
<?php

namespace SeAT\check;

use Iterator;

class CheckCollection implements Iterator {

    protected $resultType;
    protected $resultLabel;
    protected $resultHeaders = [];
    protected $position = 0;
    protected $collection = [];

    public function getResultType(): string {
        return $this->resultType;
    }

    public function setResultType($type) {
        $this->resultType = $type;
    }

    public function getResultLabel() {
        return $this->resultLabel;
    }

    public function setResultLabel($resultLabel) {
        $this->resultLabel = $resultLabel;
    }

    public function getResultHeaders(): array {
        return $this->resultHeaders;
    }

    public function setResultHeaders(array $resultHeaders) {
        $this->resultHeaders = $resultHeaders;
    }

//    public function add(Check $check) {
//        $this->collection[] = $check;
//    }

    public function add($check) {
        $this->collection[] = $check;
    }

    public function current() {
        return $this->collection[$this->position];
    }

    public function key(): int {
        return $this->position;
    }

    public function next(): void {
        ++$this->position;
    }

    public function rewind(): void {
        $this->position = 0;
    }

    public function valid(): bool {
        return isset($this->collection[$this->position]);
    }

}
<?php

namespace SeAT\check;

use Exception;
use SeAT\result\Result;
use SeAT\result\SimpleValueResult;
use OrangeHRM\DevOps\utility\InstanceDatabaseAccessUtility as DBA;

class DatabaseFileFormatCheck implements Check, InstanceDatabaseAccess
{

    protected DBA $dba;

    /**
     * @throws Exception
     */
    public function execute(): Result
    {

        $dbResult = $this->getDba()->fetchAll("SHOW VARIABLES LIKE 'innodb_file_format';");

        $value = !empty($dbResult) && isset($dbResult[0]['Value']) ? $dbResult[0]['Value'] : Check::UNDETERMINED;

        $result = new SimpleValueResult();
        $result->setDescription('Storage File Format');
        $result->setValue($value);
        $result->setFlag($this->determineFlag($value));
        $result->setComment($this->determineComment($value));

        return $result;
    }

    public function getDba(): DBA
    {
        return $this->dba;
    }

    public function setDba(DBA $dba)
    {
        $this->dba = $dba;
    }

    protected function determineFlag(string $value): string
    {
        switch ($value) {
            case 'Barracuda':
                return Result::OK;
            case 'Antelope':
                return Result::WARNING;
            default :
                return Result::WARNING;
        }
    }

    protected function determineComment(string $value): string
    {
        switch ($value) {
            case 'Barracuda':
                return '';
            case 'Antelope':
                return "It's recommended to have Barracuda as the file format";
            default :
                return "Couldn't determine the storage file format. It may not have been set up. Verify manually.";
        }
    }

}
<?php

namespace SeAT\check;

class PhpTimeCheck extends TimeCheck
{

    protected string $description = 'PHP Time';

    protected function getDependencies(): array
    {
        return [
            'Hardware Clock Time' => new HardwareClockTimeCheck(),
            'Operating System Time' => new OperatingSystemTimeCheck(),
        ];
    }

    public function getValue(): string
    {
        return date('Y-m-d H:i');
    }

}
<?php

namespace SeAT\check;

use Exception;

class ActiveEmployeesCheck extends DatabaseResultsCheck
{

    /**
     * @throws Exception
     */
    protected function retrieveData(): array
    {
        $dateListQuery = "SELECT DISTINCT r.`month` FROM
(SELECT DISTINCT DATE_FORMAT(`joined_date`, '%Y-%b') AS `month`, DATE_FORMAT(`joined_date`, '%Y-%m') AS `month_numeric` FROM `hs_hr_employee`
UNION
SELECT DISTINCT DATE_FORMAT(`termination_date`, '%Y-%b') AS `month`, DATE_FORMAT(`termination_date`, '%Y-%m') AS `month_numeric` FROM `ohrm_emp_termination`) AS r
ORDER BY r.`month_numeric`
";

        $joinedCountQuery = "
SELECT 
  IFNULL(DATE_FORMAT(`joined_date`, '%Y-%b'), 'Initial') AS `name`, 
  IFNULL(COUNT(*), 0) AS `value`
FROM `hs_hr_employee` 
WHERE `deleted_at` IS NULL
GROUP BY DATE_FORMAT(`joined_date`, '%Y-%b')
ORDER BY `joined_date`;
";
        $terminatedCountQuery = "
SELECT DATE_FORMAT(`termination_date`, '%Y-%b') AS `name`, 
  IFNULL(COUNT(*), 0) AS `value`
FROM `ohrm_emp_termination` t 
LEFT JOIN `hs_hr_employee` AS e ON e.`emp_number` = t.`emp_number` 
WHERE e.`deleted_at` IS NULL AND e.`termination_id` IS NOT NULL
GROUP BY DATE_FORMAT(`termination_date`, '%Y-%b')
ORDER BY `termination_date`;            
";

        $multipleTerminationRecordsQuery = "
SELECT 
  et.`emp_number` AS `emp_number`, 
  DATE_FORMAT(et.`termination_date`, '%Y-%b') AS `month`
FROM `ohrm_emp_termination` AS et 
WHERE et.`emp_number` IN (
  SELECT 
    r.`emp_number` 
  FROM (
    SELECT 
      t.`emp_number`, 
      (COUNT(*) - 1) AS `count` 
	FROM `ohrm_emp_termination` AS t 
    LEFT JOIN `hs_hr_employee` AS e ON e.`emp_number` = t.`emp_number`
    WHERE e.`termination_id` IS NOT NULL
    group by t.emp_number
  ) AS r 
  WHERE r.`count` > 0
) ORDER BY et.`emp_number`, et.`termination_date`
;
";

        $months = $this->getDba()->fetchScalar($dateListQuery);
        $joinedCounts = $this->getDba()->fetchKeyValuePairs($joinedCountQuery);
        $terminatedCounts = $this->getDba()->fetchKeyValuePairs($terminatedCountQuery);
        $multipleTerminationRecords = $this->getDba()->fetchAll($multipleTerminationRecordsQuery);

        $ineffectiveTerminationRecords = [];
        foreach ($multipleTerminationRecords as $key => $record) {
            if (array_key_exists($key + 1, $multipleTerminationRecords)) {
                if ($multipleTerminationRecords[$key + 1]['emp_number'] === $record['emp_number']) {
                    $ineffectiveTerminationRecords[] = $record['month'];
                }
            }
        }

        $multipleTerminationAdjustments = array_count_values($ineffectiveTerminationRecords);

        $monthWiseActiveEmployeeCount = [];

        $cumulativeJoinCount = array_key_exists('Initial', $joinedCounts) ? $joinedCounts['Initial'] : 0;
        $cumulativeTerminationCount = 0;
        foreach ($months as $month) {

            $joined = array_key_exists($month, $joinedCounts) ? $joinedCounts[$month] : 0;
            $terminated = array_key_exists($month, $terminatedCounts) ? $terminatedCounts[$month] : 0;
            $multipleTerminationAdjustment = array_key_exists($month, $multipleTerminationAdjustments) ? $multipleTerminationAdjustments[$month] : 0;

            $cumulativeJoinCount += $joined;
            $cumulativeTerminationCount = ($cumulativeTerminationCount + $terminated) - $multipleTerminationAdjustment;
            $activeEmployeeCount = ($cumulativeJoinCount - $cumulativeTerminationCount);

            $monthWiseActiveEmployeeCount[] = [
                'month' => $month,
                'joined' => $joined,
                'cumulativeJoinCount' => $cumulativeJoinCount,
                'terminated' => $terminated,
                'mutipleTerminationAdjustment' => $multipleTerminationAdjustment,
                'cumulativeTerminationCount' => $cumulativeTerminationCount,
                'activeEmployeeCount' => $activeEmployeeCount,
            ];
        }

        return array_slice($monthWiseActiveEmployeeCount, -12);
    }

}
<?php

namespace SeAT\check;

use Exception;
use SeAT\check\Check;
use SeAT\result\Result;
use SeAT\result\DatasetResult;
use OrangeHRM\DevOps\utility\InstanceDatabaseAccessUtility as DBA;
use SeAT\result\SimpleValueResult;

class ApplicationConfigurationCheck implements Check, InstanceFsAccess, InstanceDatabaseAccess
{

    protected $path;
    protected $dba;

    public function getPath(): string
    {
        return $this->path;
    }

    public function setPath(string $path)
    {
        $this->path = $path;
    }

    public function getDba(): DBA
    {
        return $this->dba;
    }

    public function setDba(DBA $dba)
    {
        $this->dba = $dba;
    }

    /**
     * @throws Exception
     */
    public function execute(): Result
    {

        $isDataEncryptionEnabled = $this->isDataEncryptionEnabled();
        $reportsEngineEdition = $this->findReportsEngineEdition();
        $emailSettingsDetails = $this->fetchEmailConfigurationDetails();

        if ($emailSettingsDetails === 'Email configuration is not set') {
            $emailSettingsFlag = Result::WARNING;
            $emailSettingsActualValue = 'N/A';
        } elseif ($emailSettingsDetails === 'Email type is incorrect') {
            $emailSettingsFlag = Result::ERROR;
            $emailSettingsActualValue = 'N/A';
        } else {
            if (preg_match('/Sendmail/', $emailSettingsDetails)) {
                $emailSettingsFlag = Result::OK;
                $emailSettingsActualValue = 'Sendmail';
            } elseif (preg_match('/SMTP/', $emailSettingsDetails)) {
                $emailSettingsFlag = Result::OK;
                $emailSettingsActualValue = 'SMTP';
            } else {
                $emailSettingsFlag = Result::WARNING;
                $emailSettingsActualValue = 'Unknown';
            }
        }

        $result = new DatasetResult();
        $items = [];

        $item = new SimpleValueResult();
        $item->setDescription('Enabled Data Encryption');
        $item->setValue($isDataEncryptionEnabled ? 'Yes' : 'No');
        $item->setFlag($isDataEncryptionEnabled ? Result::OK : Result::ERROR);
        $item->setComment($isDataEncryptionEnabled ? '' : 'Enabling encryption is mandatory');
        $items[] = $item;

        $item = new SimpleValueResult();
        $item->setDescription('Data Encryption Key is Correct?');
        $item->setValue(($isDataEncryptionEnabled) ? ($this->isDataEncryptionKeyCorrect() ? 'Yes' : 'No') : 'N/A');
        $item->setFlag(($isDataEncryptionEnabled) ? ($this->isDataEncryptionKeyCorrect() ? Result::OK : Result::ERROR) : Result::ERROR);
        $item->setComment(($isDataEncryptionEnabled) ? ($this->isDataEncryptionKeyCorrect() ? '' : 'Having an erroneous encryption key will lead to data corruption.') : 'N/A');
        $items[] = $item;

        $item = new SimpleValueResult();
        $item->setDescription('Reports Engine');
        $item->setValue($reportsEngineEdition);
        $item->setFlag(($reportsEngineEdition === 'New') ? Result::OK : Result::WARNING);
        $item->setComment(($reportsEngineEdition === 'New') ? '' : 'System should use the new reports engine.');
        $items[] = $item;

        $item = new SimpleValueResult();
        $item->setDescription('Email Configuration');
        $item->setValue($emailSettingsActualValue);
        $item->setFlag($emailSettingsFlag);
        $item->setComment($emailSettingsDetails);
        $items[] = $item;

        $result->setCollection($items);

        return $result;
    }

    protected function isDataEncryptionEnabled(): bool
    {
        $keyFilePath = implode(DIRECTORY_SEPARATOR, [$this->getPath(), 'lib', 'confs', 'cryptokeys', 'key.ohrm']);
        return file_exists($keyFilePath);
    }

    protected function isDataEncryptionKeyCorrect(): bool
    {
        return true;
    }

    /**
     * @throws Exception
     */
    protected function findReportsEngineEdition(): string
    {
        $configTable = $this->getDba()->tableExists('ohrm_config') ? 'ohrm_config' : 'hs_hr_config';

        $query = "SELECT `value` FROM {$configTable} WHERE `property` = ?";
        $useNewReportsEngine = $this->getDba()->fetchColumn($query, array('report.use_new_engine'));

        return ($useNewReportsEngine === 'Yes') ? 'New' : 'Old';
    }

    /**
     * @throws Exception
     */
    protected function fetchEmailConfigurationDetails(): string
    {
        if ($this->getDba()->tableExists('ohrm_email_configuration')) {
            $query = "
SELECT 
  `mail_type`,
  `sent_as`,
  `sender_name`,
  `smtp_host`,
  `smtp_port`,
  `smtp_username`,
  `smtp_auth_type`,
  `smtp_security_type`
FROM `ohrm_email_configuration`;
";
            $resultSet = $this->getDba()->fetchAll($query);

            if (empty($resultSet)) {
                return 'Email configuration is not set';
            }

            list($config) = $resultSet;

            if ($config['mail_type'] === 'smtp') {
                $senderName = empty($config['sender_name']) ? '' : "{$config['sender_name']} ";
                return "SMTP (
    Host:          {$config['smtp_host']};
    Port:          {$config['smtp_port']};
    Sent As:       {$config['sent_as']};
    Sender Name:   {$senderName};
    Auth Type:     {$config['smtp_auth_type']};
    Security Type: {$config['smtp_security_type']};
)";
            } elseif ($config['mail_type'] === 'sendmail') {
                return 'Sendmail';
            } else {
                return 'Email type is incorrect';
            }
        }

        return '';
    }

}
<?php

namespace SeAT\check;

use SeAT\result\Result;

class PhpVersionCheck extends MiddlewareVersionCheck
{

    protected string $recommended = '7.4.15';
    protected string $min = '7.4';
    protected string $max = '7.4.99';
    protected string $description = 'PHP Version';


    public function execute(): Result
    {
        $currentVersion = phpversion();
        $cleansedVersionString = preg_match('/-/', $currentVersion) ? substr($currentVersion, 0, strpos($currentVersion, '-')) : $currentVersion;
        return $this->prepareResult($currentVersion, $cleansedVersionString);
    }

}
<?php

namespace SeAT\check;

class PopplerUtilsInstallationCheck extends UtilityPackageInstallationCheck
{

    protected string $description = 'poppler-utils';

    protected function isInstalled(): bool
    {
        return $this->commandExists('pdffonts');
    }
}
<?php

namespace SeAT\check;

use Exception;
use SeAT\result\Result;
use SeAT\result\DatasetResult;
use SeAT\result\DataItemFactory;
use League\CLImate\CLImate;
use SeAT\util\ValueFormatter;

class BackupsCheck implements Check, HasUserInput
{

    /**
     *
     * @var CLImate
     */
    protected $cli;
    protected $valueFormatter;
    protected $dataItemFactory;
    protected $mode = self::VERBOSE;

    public function __construct()
    {
        $this->init();
    }

    public function setMode($mode)
    {
        $this->mode = $mode;
    }

    protected function init()
    {
        $this->cli = new CLImate();
    }

    public function getValueFormatter(): ValueFormatter
    {
        if (!($this->valueFormatter instanceof ValueFormatter)) {
            $this->valueFormatter = new ValueFormatter();
        }
        return $this->valueFormatter;
    }

    public function setValueFormatter(ValueFormatter $valueFormatter)
    {
        $this->valueFormatter = $valueFormatter;
    }

    public function getDataItemFactory(): DataItemFactory
    {
        if (!($this->dataItemFactory instanceof DataItemFactory)) {
            $this->dataItemFactory = new DataItemFactory();
        }
        return $this->dataItemFactory;
    }

    public function setDataItemFactory(DataItemFactory $dataItemFactory)
    {
        $this->dataItemFactory = $dataItemFactory;
    }

    /**
     * @throws Exception
     */
    public function execute(): Result
    {

        $result = new DatasetResult();

        if ($this->mode === self::VERBOSE) {
            $fsBackupEnabled = $this->retrieveResponse('Is filesystem backup enabled?', ['y', 'n']);
            $dbBackupEnabled = $this->retrieveResponse('Is DB backup enabled?', ['y', 'n']);
            $fsBackupRetention = $this->retrieveResponse('Filesystem backup retention period (eg: 2 weeks/1 month):', [], ($fsBackupEnabled === 'y'));
            $dbBackupRetention = $this->retrieveResponse('DB backup retention period (eg: 2 weeks/1 month):', [], ($dbBackupEnabled === 'y'));
            $drSiteAvailable = $this->retrieveResponse('Does backups are sent to a different physical DR server?', ['y', 'n'], ($fsBackupEnabled === 'y' || $dbBackupEnabled === 'y'));
            $backupsRecoverable = $this->retrieveResponse('Are backups recoverable?', ['y', 'n'], ($fsBackupEnabled === 'y' || $dbBackupEnabled === 'y'));

            $result->add($this->getDataItemFactory()->generate(
                'Is FS backup enabled?',
                "{$this->getValueFormatter()->ynToYesNo($fsBackupEnabled)} (Based on user's response)",
                ($fsBackupEnabled === 'y') ? Result::OK : Result::WARNING,
                ($fsBackupEnabled === 'y') ? '' : "It's recommended to have a backup procedure for the filesystem."
            ));
            $result->add($this->getDataItemFactory()->generate(
                'Is DB backup enabled',
                "{$this->getValueFormatter()->ynToYesNo($dbBackupEnabled)} (Based on user's response)",
                ($fsBackupEnabled === 'y') ? Result::OK : Result::WARNING,
                ($fsBackupEnabled === 'y') ? '' : "It's recommended to have a backup procedure for the database."
            ));
            $result->add($this->getDataItemFactory()->generate(
                'FS backup retention period',
                "{$fsBackupRetention} (Based on user's response)",
                ($fsBackupRetention == 'N/A') ? Result::SKIPPED : $this->determineFlagForRetentionPeriod($fsBackupRetention, '1 month', '2 weeks'),
                ($fsBackupRetention == 'N/A') ? 'N/A' : $this->determineCommentForRetentionPeriod($fsBackupRetention, '1 month', '2 weeks')
            ));
            $result->add($this->getDataItemFactory()->generate(
                'DB backup retention period',
                "{$dbBackupRetention} (Based on user's response)",
                ($dbBackupRetention === 'N/A') ? Result::SKIPPED : $this->determineFlagForRetentionPeriod($dbBackupRetention, '1 month', '2 weeks'),
                ($dbBackupRetention === 'N/A') ? 'N/A' : $this->determineCommentForRetentionPeriod($dbBackupRetention, '1 month', '2 weeks')
            ));
            $result->add($this->getDataItemFactory()->generate(
                'Does backups are sent to a different physical DR server?',
                ($drSiteAvailable === 'N/A') ? 'N/A' : "{$this->getValueFormatter()->ynToYesNo($drSiteAvailable)} (Based on user's response)",
                ($drSiteAvailable === 'N/A') ? Result::SKIPPED : (($drSiteAvailable === 'y') ? Result::OK : Result::WARNING),
                ($drSiteAvailable === 'N/A') ? 'N/A' : (($drSiteAvailable === 'y') ? '' : 'Backups should ideally be stored in a remote DR site')
            ));
            $result->add($this->getDataItemFactory()->generate(
                'Are backups recoverable?',
                ($drSiteAvailable === 'N/A') ? 'N/A' : "{$this->getValueFormatter()->ynToYesNo($backupsRecoverable)} (Based on user's response)",
                ($drSiteAvailable === 'N/A') ? Result::SKIPPED : (($backupsRecoverable === 'y') ? Result::OK : Result::ERROR),
                ($drSiteAvailable === 'N/A') ? 'N/A' : (($backupsRecoverable === 'y') ? '' : "It's critically important that the backups are recoverable")
            ));
        } else {
            $descriptions = [
                'Is FS backup enabled',
                'Is DB backup enabled?',
            ];
            foreach ($descriptions as $description) {
                $result->add($this->getDataItemFactory()->generate(
                    $description,
                    self::UNDETERMINED,
                    Result::SKIPPED,
                    "This check was skipped in the quiet mode."
                ));
            }
        }

        return $result;
    }

    protected function retrieveResponse($question, array $accept = [], bool $dependencyCondition = true): string
    {

        if (!$dependencyCondition) {
            return 'N/A';
        }

        $input = $this->cli->input($question);

        if (!empty($accept)) {
            $input->accept($accept, true);
            $input->strict();
        }

        return $input->prompt();
    }

    protected function determineFlagForRetentionPeriod(string $retentionPeriod, string $safeLevel, string $criticalLevel): string
    {
        try {
            $retentionPeriodDays = $this->getValueFormatter()->periodToDays($retentionPeriod);
            $safeLevelDays = $this->getValueFormatter()->periodToDays($safeLevel);
            $criticalLevelDays = $this->getValueFormatter()->periodToDays($criticalLevel);

            if ($retentionPeriodDays < $criticalLevelDays) {
                return Result::ERROR;
            } elseif ($retentionPeriodDays < $safeLevelDays) {
                return Result::WARNING;
            } else {
                return Result::OK;
            }
        } catch (Exception $e) {
            return Result::SKIPPED;
        }
    }

    protected function determineCommentForRetentionPeriod(string $retentionPeriod, string $safeLevel, string $criticalLevel): string
    {
        try {
            $retentionPeriodDays = $this->getValueFormatter()->periodToDays($retentionPeriod);
            $safeLevelDays = $this->getValueFormatter()->periodToDays($safeLevel);
            $criticalLevelDays = $this->getValueFormatter()->periodToDays($criticalLevel);

            if ($retentionPeriodDays < $criticalLevelDays) {
                return "Backup retention should at least be more than {$criticalLevel} and ideally be more than {$safeLevel}";
            } elseif ($retentionPeriodDays < $safeLevelDays) {
                return "Backup retention should ideally be more than {$safeLevel}";
            } else {
                return '';
            }
        } catch (Exception $e) {
            return "Couldn't determine the recommendation due to an error: {$e->getMessage()}";
        }
    }

}
<?php

namespace SeAT\check;

use SeAT\result\Result;
use SeAT\result\SimpleValueResult;

class BuildEncryptionCheck extends InstanceFsCheck {

    public function execute(): Result {

        $checkFilePath = implode(DIRECTORY_SEPARATOR, [$this->getPath(), 'symfony', 'plugins', 'orangehrmCorePlugin', 'lib', 'service', 'ConfigService.php']);

        $fileContent = file_get_contents($checkFilePath);
        $isBuildEncrypted = (preg_match('/getConfigDao\(\)/', $fileContent) !== 1);

        $result = new SimpleValueResult();
        $result->setValue($isBuildEncrypted ? 'Yes' : 'No');
        $result->setFlag($isBuildEncrypted ? Result::OK : Result::ERROR);
        $result->setComment($isBuildEncrypted ? '' : 'Build should be encrypted.');
        $result->setDescription('Is Build Encrypted?');
        
        return $result;
    }

}
<?php

namespace SeAT\check;

use SeAT\result\Result;

interface Check {

    const UNDETERMINED = 'Undetermined';
    const VERBOSE = 'verbose';
    const QUIET = 'quiet';

    public function execute(): Result;
}
<?php

namespace SeAT\check;

use Exception;
use SeAT\result\Result;
use SeAT\result\SimpleValueResult;

abstract class CommonCliCommandCheck implements Check {

    protected $description;
    protected $command = '';

    /**
     * @throws Exception
     */
    public function execute(): Result {

        $output = [];
        $returnVar = null;
        exec($this->command, $output, $returnVar);

        if ($returnVar === 0) {

            $value = implode('\n', $output);

            $result = new SimpleValueResult();
            $result->setDescription($this->description);
            $result->setValue($value);
            $result->setFlag($this->determineFlag($value));
            $result->setComment($this->determineComment($value));
            return $result;
        } else {
            throw new Exception("Error occurred while running command {$this->command}. Output: " . implode("\n", $output));
        }
    }

    abstract protected function determineFlag(string $value): string;

    abstract protected function determineComment(string $value): string;
}
<?php

namespace SeAT\check;

use Exception;

class CountryWiseEmployeeCountCheck extends DatabaseResultsCheck {

    /**
     * @throws Exception
     */
    protected function retrieveData(): array {
        $hasMultipleEmpLocations = $this->getDba()->tableExists('hs_hr_emp_locations');
        $hasSoftDelete = $this->getDba()->columnExists('deleted_at', 'hs_hr_employee');
        $whereClause = ($hasSoftDelete) ? '`deleted_at` IS NULL' : '1';
        $locationJoinClause = ($hasMultipleEmpLocations) ? 'LEFT JOIN `hs_hr_emp_locations` AS el ON el.`emp_number` = e.`emp_number` LEFT JOIN `ohrm_location` AS l ON l.`id` = el.`location_id` ' : 'LEFT JOIN `ohrm_location` AS l ON l.`id` = e.`location_id` ';

        $query = "
SELECT 
 'All' AS `country`, 
 SUM(IF(e.`termination_id` IS NULL, 1, 0)) AS `active`,
 SUM(IF(e.`termination_id` IS NOT NULL, 1, 0)) AS `inactive`,
 SUM(1) AS `total`
FROM `hs_hr_employee` AS e
WHERE {$whereClause}

UNION

SELECT 
 IFNULL(`cou_name`, 'Unassigned') AS `country`, 
 SUM(IF(e.`termination_id` IS NULL, 1, 0)) AS `active`,
 SUM(IF(e.`termination_id` IS NOT NULL, 1, 0)) AS `inactive`,
 SUM(1) AS `total`
FROM `hs_hr_employee` AS e
{$locationJoinClause}
LEFT JOIN `hs_hr_country` AS c ON c.`cou_code` = l.`country_code` 
WHERE {$whereClause}
GROUP BY c.`cou_code`;
";

        return $this->getDba()->fetchAll($query);
    }

}
<?php

namespace SeAT\check;

use Exception;
use SeAT\result\Result;
use SeAT\result\SimpleValueResult;

class CpuCheck implements Check {

    const MIN_NO_OF_CORES = 4;
    const RECOMMENDED_NO_OF_CORES = 6;

    public function execute(): Result {

        $result = new SimpleValueResult();

        $result->setDescription('Processor');

        try {
            $processorModel = $this->runCliCommand("grep model\ name /proc/cpuinfo | cut -d':' -f2 | head -n 1 | sed 's/^\s//'");
            $coresPerProcessor = (int) $this->runCliCommand("grep cpu\ cores /proc/cpuinfo | cut -d':' -f2 | head -n 1 | sed 's/^\s//'");
            $noOfProcessors = (int) $this->runCliCommand("grep model\ name /proc/cpuinfo | wc -l");

            $result->setValue($processorModel);
            $result->setFlag($this->determineFlag($coresPerProcessor, $noOfProcessors));
            $result->setComment($this->determineComment($coresPerProcessor, $noOfProcessors));
        } catch (Exception $e) {
            $result->setValue('');
            $result->setFlag(Result::SKIPPED);
            $result->setComment("Error occurred while determining processor information. Please verify manually.");
        }

        return $result;
    }

    protected function determineFlag(int $coresPerProcessor, int $noOfProcessors): string
    {
        $determinant = $coresPerProcessor * $noOfProcessors;
        if ($determinant < self::MIN_NO_OF_CORES) {
            return Result::ERROR;
        } elseif ($determinant < self::RECOMMENDED_NO_OF_CORES) {
            return Result::WARNING;
        } else {
            return Result::OK;
        }
    }

    protected function determineComment(int $coresPerProcessor, int $noOfProcessors): string
    {
        $determinant = $coresPerProcessor * $noOfProcessors;
        if ($determinant < self::MIN_NO_OF_CORES) {
            return "It's recommended to have at a processor with at least " . self::MIN_NO_OF_CORES . ". Please upgrade your processor. The ideal should be " . self::RECOMMENDED_NO_OF_CORES . " or more cores.";
        } elseif ($determinant < self::RECOMMENDED_NO_OF_CORES) {
            return "Your processor has the minimal required number of cores. The ideal is " . self::RECOMMENDED_NO_OF_CORES . " or more cores. If your OrangeHRM use is heavy, you might experience performance issues with the current number of processor cores.";
        } else {
            return "No. of Processors: {$noOfProcessors}; No. of Cores per Processor: {$coresPerProcessor};";
        }
    }

    /**
     * @throws Exception
     */
    protected final function runCliCommand($command): string {
        $output = [];
        $returnVar = null;
        exec($command, $output, $returnVar);
        if ($returnVar === 0) {
            return implode('', $output);
        } else {
            throw new Exception("An error occurred while running the command: {$command}");
        }
    }

}
<?php

namespace SeAT\check;

use SeAT\result\Result;
use SeAT\result\SimpleValueResult;

class CurrentDateTimeCheck implements Check {

    public function execute(): Result {
        $result = new SimpleValueResult();
        $result->setDescription("Report Created At");
        $result->setValue(date('Y-m-d H:i:s e (P \G\M\T)'));
        return $result;
    }

}
<?php

namespace SeAT\check;

use Exception;
use League\CLImate\CLImate;
use SeAT\result\Result;
use SeAT\result\DatasetResult;
use SeAT\result\SimpleValueResult;
use PhpAmqpLib\Connection\AMQPStreamConnection;

class RabbitMqCheck implements Check, HasUserInput
{

    const SERVICE_TYPE_NONE = 'None';
    const SERVICE_TYPE_LOCAL = 'Local';
    const SERVICE_TYPE_REMOTE = 'Remote';
    const RECOMMENDED_VERSION = '3.9.8';

    protected CLImate $cli;
    protected string $mode = self::VERBOSE;

    public function __construct()
    {
        $this->init();
    }

    public function setMode($mode)
    {
        $this->mode = $mode;
    }

    public function execute(): Result
    {
        $result = new DatasetResult();
        $responses = [];
        if ($this->mode === self::VERBOSE) {

            $rabbitMqServiceType = self::UNDETERMINED;
            $rabbitMqVersion = null;
            $rabbitMqHost = null;

            if ($this->isRabbitMqLocallyInstalled()) {
                $rabbitMqServiceType = self::SERVICE_TYPE_LOCAL;

                try {
                    $rabbitMqVersion = $this->detectLocalRabbitMqVersion();
                } catch (Exception $e) {
                    $rabbitMqVersion = $this->retrieveResponse("RabbitMQ Version:");
                }

                $rabbitMqHost = 'localhost';

            } elseif ($this->isConnectingToARemoteRabbitMqService()) {
                $rabbitMqVersion = $this->retrieveResponse("RabbitMQ Version:");
                $rabbitMqHost = $this->retrieveResponse("RabbitMQ Host:");

                $rabbitMqServiceType = ($rabbitMqHost === 'localhost' || $rabbitMqHost === '127.0.0.1') ? self::SERVICE_TYPE_LOCAL : self::SERVICE_TYPE_REMOTE;

            } else {
                $rabbitMqServiceType = self::SERVICE_TYPE_NONE;
                $rabbitMqVersion = 'N/A';
                $rabbitMqHost = 'N/A';
            }

            $item = new SimpleValueResult();
            $item->setDescription('RabbitMQ Service Type');
            $item->setValue($rabbitMqServiceType);
            $item->setFlag($this->determineRabbitMqServiceTypeFlag($rabbitMqServiceType));
            $item->setComment($this->determineRabbitMqServiceTypeComment($rabbitMqServiceType));
            $responses[] = $item;

            $item = new SimpleValueResult();
            $item->setDescription('RabbitMQ Version');
            $item->setValue($rabbitMqVersion);
            $item->setFlag($this->determineVersionFlag($rabbitMqVersion));
            $item->setComment($this->determineVersionComment($rabbitMqVersion));
            $responses[] = $item;

            $item = new SimpleValueResult();
            $item->setDescription('RabbitMQ Host');
            $item->setValue($rabbitMqHost);
            $item->setFlag($this->determineRabbitMqHostFlag($rabbitMqHost));
            $item->setComment('');
            $responses[] = $item;

            $item->setFlag($this->isHostValid($rabbitMqHost) ? Result::OK : Result::ERROR);
            $item->setComment($this->isHostValid($rabbitMqHost) ? '' : "The host you've entered is invalid.");

        } else {
            $item = new SimpleValueResult();
            $item->setDescription('RabbitMQ Service Type');
            $item->setValue(self::UNDETERMINED);
            $item->setFlag(Result::SKIPPED);
            $item->setComment("This check was skipped in the quiet mode.");
            $responses[] = $item;

            $item = new SimpleValueResult();
            $item->setDescription('RabbitMQ Version');
            $item->setValue('N/A');
            $item->setFlag(Result::SKIPPED);
            $item->setComment("This check was skipped in the quiet mode.");
            $responses[] = $item;

            $item = new SimpleValueResult();
            $item->setDescription('RabbitMQ Host');
            $item->setValue('N/A');
            $item->setFlag(Result::SKIPPED);
            $item->setComment("This check was skipped in the quiet mode.");
            $responses[] = $item;
        }

        $result->setCollection($responses);

        return $result;
    }

    protected function init()
    {
        $this->cli = new CLImate();
    }

    /**
     * @todo Logic duplicated; Need to refactor
     *
     */
    protected function retrieveResponse($question, array $accept = [], bool $dependencyCondition = true): string
    {

        if (!$dependencyCondition) {
            return 'N/A';
        }

        $input = $this->cli->input($question);

        if (!empty($accept)) {
            $input->accept($accept, true);
            $input->strict();
        }

        return $input->prompt();
    }

    /**
     * Adapted from https://stackoverflow.com/a/4694816
     */
    protected function isHostValid(string $host): bool
    {

        if (preg_match('/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\z/', $host)) {
            return (filter_var($host, FILTER_VALIDATE_IP));
        } else {
            return (preg_match("/^([a-z\d](-*[a-z\d])*)(\.([a-z\d](-*[a-z\d])*))*$/i", $host) //Valid character check
                && preg_match("/^.{1,253}$/", $host) // Overall length check
                && preg_match("/^[^.]{1,63}(\.[^.]{1,63})*$/", $host)); // Length of each label
        }
    }

    protected function determineRabbitMqServiceTypeFlag(string $rabbitMqServiceType): string
    {
        return $rabbitMqServiceType === self::SERVICE_TYPE_NONE ? Result::WARNING : Result::OK;
    }

    protected function determineRabbitMqServiceTypeComment(string $rabbitMqServiceType): string
    {
        return $rabbitMqServiceType === self::SERVICE_TYPE_NONE ? "RabbitMQ is needed for advanced features of OrangeHRM and integration with external systems. It's recommended that the a RabbitMQ server is available to be configured with the OrangeHRM instance." : '';
    }

    protected function determineVersionFlag(string $rabbitMqVersion): string
    {
        if ($rabbitMqVersion === 'N/A' || $rabbitMqVersion === Check::UNDETERMINED || empty($rabbitMqVersion)) {
            return Result::IGNORE;
        } else {
            return (version_compare($rabbitMqVersion, self::RECOMMENDED_VERSION) >= 0 ? Result::OK : Result::WARNING);
        }
    }

    protected function determineVersionComment(string $rabbitMqVersion): string
    {
        if ($rabbitMqVersion === 'N/A' || $rabbitMqVersion === Check::UNDETERMINED || empty($rabbitMqVersion)) {
            return '';
        } else {
            return (version_compare($rabbitMqVersion, self::RECOMMENDED_VERSION) >= 0 ? '' : "It's recommended to use RabbitMQ service of version " . self::RECOMMENDED_VERSION . " or above.");
        }
    }

    protected function determineRabbitMqHostFlag(string $rabbitMqHost): string
    {
        return ($this->isHostValid($rabbitMqHost) ? Result::OK : Result::ERROR);
    }

    protected function isRabbitMqLocallyInstalled(): bool
    {
        try {
            $connection = new AMQPStreamConnection('localhost', 5672, 'guest', 'guest');

            if ($connection->channel()) {
                return true;
            } else {
                $connection = new AMQPStreamConnection('localhost', 5671, 'guest', 'guest');
                if ($connection->channel()) {
                    return true;
                }
            }

            return false;
        } catch (Exception $e) {
            return false;
        }
    }

    protected function isConnectingToARemoteRabbitMqService(): bool
    {
        $checkRabbitMq = $this->retrieveResponse("Is a RabbitMQ server set up?", ['y', 'n']);
        return ($checkRabbitMq === 'y');
    }

    /**
     * @throws Exception
     */
    protected function detectLocalRabbitMqVersion(): string
    {
        try {

            if (PHP_OS_FAMILY === 'Linux') {
                return $this->runCliCommand("rabbitmqctl status | grep RabbitMQ\ version | cut -d':' -f2");
            } elseif (PHP_OS_FAMILY === 'Windows') {
                return $this->runCliCommand("rabitmqctl.bat status");
            } else {
                throw new Exception("Unsupported Operating System");
            }

        } catch (Exception $e) {
            throw new Exception("Error occurred while detecting the version of the local RabbitMQ service.", $e->getCode(), $e);
        }
    }

    /**
     * @throws Exception
     */
    public function runCliCommand(string $command): string
    {
        $output = [];
        $returnVar = null;
        exec($command, $output, $returnVar);

        if ($returnVar === 0) {
            return trim(implode(" ", $output));
        } else {
            throw new Exception("Error while executing the command: {$command}");
        }
    }
}
<?php

namespace SeAT\check;

use Exception;
use SeAT\util\CronExpressionDecoderUtility;

class ScheduledTasksCheck extends DatabaseResultsCheck
{

    protected CronExpressionDecoderUtility $cronExpressionDecoder;

    public function getCronExpressionDecoder(): CronExpressionDecoderUtility
    {
        if (!isset($this->cronExpressionDecoder)) {
            $this->cronExpressionDecoder = new CronExpressionDecoderUtility();
        }
        return $this->cronExpressionDecoder;
    }

    public function setCronExpressionDecoder(CronExpressionDecoderUtility $cronExpressionDecoder)
    {
        $this->cronExpressionDecoder = $cronExpressionDecoder;
    }

    /**
     * @throws Exception
     */
    protected function retrieveData(): array
    {
        $query = "SELECT ost.name AS name, 
                  ost.schedule AS schedule, 
                  MAX(ocja.start_time_stamp) AS lastRun, 
                  IF(ost.status = 1, 'YES', 'NO') AS status 
                  FROM ohrm_symfony_task ost LEFT JOIN ohrm_cron_job_audittrail ocja ON ost.id = ocja.task_id 
                  WHERE (ost.schedule is not null) GROUP BY ost.id ORDER BY ost.name";
        $result = $this->getDba()->fetchAll($query);
        foreach ($result as $id => $record) {
            try {
                $result[$id]['schedule'] = $this->getCronExpressionDecoder()->decode($record['schedule']);
            } catch (Exception $e) {
                $result[$id]['schedule'] = "Invalid Schedule: {$e->getMessage()}";
            }

        }
        return $result;
    }

}
<?php

namespace SeAT\check;

use Exception;
use SeAT\result\Result;
use SeAT\result\DatasetResult;
use SeAT\result\SimpleValueResult;

abstract class FsPermissionsCheck implements Check, InstanceFsAccess
{

    protected string $path;
    protected array $nodes = [];
    protected string $identifier = '-';
    protected array $permissionGroups = ['Owner', 'Group', 'Other'];
    protected array $errorProperties = [];

    public function getPath(): string
    {
        return $this->path;
    }

    public function setPath(string $path)
    {
        $this->path = $path;
    }

    public function execute(): Result
    {
        $result = new DatasetResult();

        $permissions = $this->fetchPermissions($this->identifier, $this->nodes);
        foreach ($permissions as $nodePermission) {
            $result->add($nodePermission);
        }

        return $result;
    }

    protected final function fetchPermissions($type, array $nodes): array
    {
        $permissions = [];

        foreach ($nodes as $node => $expectedPermissions) {

            $path = $this->getPath() . DIRECTORY_SEPARATOR . $node;

            if (file_exists($path)) {
                $actualPermissions = substr(sprintf('%o', fileperms($path)), -3);
            } else {
                $actualPermissions = 0;
            }

            try {
                if (file_exists($path)) {
                    if (PHP_OS_FAMILY !== 'Windows') {
                        $ownerInfo = posix_getpwuid(fileowner($path));
                        $groupInfo = posix_getpwuid(filegroup($path));
                        $owner = $ownerInfo['name'];
                        $group = $groupInfo['name'];
                    } else {
                        $owner = 'N/A';
                        $group = 'N/A';
                    }
                } else {
                    $owner = '-';
                    $group = '-';
                }
            } catch (Exception $e) {
                $owner = '-';
                $group = '-';
            }
            $expectedPermissionsString = $this->convertPermissionsToHumanReadableString($type, $expectedPermissions);
            $actualPermissionsString = $this->convertPermissionsToHumanReadableString($type, $actualPermissions);

            $identifier = ($type === 'd') ? 'directory' : 'file';

            $comments = $this->generatePermissionComparisonComment($expectedPermissionsString, $actualPermissionsString);

            if (!empty($comments)) {
                $this->errorProperties[] = [
                    'bindParam' => ($type === 'd') ? 'directoryPermissions' : 'filePermissions',
                    'node' => $node,
                ];
            }

            $item = new SimpleValueResult();
            $item->setDescription($node);
            $item->setValue("{$owner} / {$group} / {$actualPermissionsString}");
            $item->setFlag($this->determinePermissionComparisonFlag($comments));
            $item->setComment($comments);
            $permissions[] = $item;
        }

        return $permissions;
    }

    protected final function convertPermissionsToHumanReadableString($prefix, $permissions): string
    {
        return $prefix . preg_replace(['/0/', '/1/', '/2/', '/3/', '/4/', '/5/', '/6/', '/7/'], [
                '---',
                '--x',
                '-w-',
                '-wx',
                'r--',
                'r-x',
                'rw-',
                'rwx'], "{$permissions}");
    }

    protected final function determinePermissionComparisonFlag(string $comment): string
    {
        $flag = null;
        switch ($comment) {
            case "File doesn't exist or not readable":
            case "Directory doesn't exist or not readable":
                $flag = Result::ERROR;
                break;
            case "":
                $flag = Result::OK;
                break;
            default:
                $flag = Result::WARNING;
                break;
        }
        return $flag;
    }

    protected final function generatePermissionComparisonComment($expectedPermissionsString, $actualPermissionsString): string
    {
        if ($actualPermissionsString === '----') {
            return "File doesn't exist or not readable";
        }

        if ($actualPermissionsString === 'd---') {
            return "Directory doesn't exist or not readable";
        }

        if ($expectedPermissionsString === $actualPermissionsString) {
            return '';
        }

        $message = '';

        $expectedPermissionsPortions = str_split(substr($expectedPermissionsString, -9), 3);
        $actualPermissionsPortions = str_split(substr($actualPermissionsString, -9), 3);

        foreach ($expectedPermissionsPortions as $index => $expectedPermissions) {
            $permissionGroup = $this->permissionGroups[$index];

            if ($expectedPermissions !== $actualPermissionsPortions[$index]) {
                $message .= "{$permissionGroup} permissions should be {$expectedPermissions}; ";
            }
        }

        return $message;
    }

}
<?php

namespace SeAT\check;

use OrangeHRM\DevOps\usageStats\UsageStatisticsCheck;
use stdClass;
use Exception;

use OrangeHRM\DevOps\helper\TimeDataHelper;
use OrangeHRM\DevOps\usageStats\ActiveUserCountAnalyzer;
use OrangeHRM\DevOps\usageStats\DataAnalyzer;
use OrangeHRM\DevOps\usageStats\DocumentTemplateAnalyzer;
use OrangeHRM\DevOps\usageStats\DomainInformationAnalyzer;
use OrangeHRM\DevOps\usageStats\EmployeeAnalyzer;
use OrangeHRM\DevOps\usageStats\JobVacancyAnalyzer;
use OrangeHRM\DevOps\usageStats\LeaveRequestAnalyzer;
use OrangeHRM\DevOps\usageStats\NewsAndDocumentArticleAnalyzer;
use OrangeHRM\DevOps\usageStats\NotificationAnalyzer;
use OrangeHRM\DevOps\usageStats\OnBoardingTaskAnalyzer;
use OrangeHRM\DevOps\usageStats\OnlineTrainingAnalyzer;
use OrangeHRM\DevOps\usageStats\PerformanceAppraisalAnalyzer;
use OrangeHRM\DevOps\usageStats\PunchInTimeAnalyzer;
use OrangeHRM\DevOps\usageStats\TimeSheetsAnalyzer;
use OrangeHRM\DevOps\usageStats\TrainingSessionAnalyzer;
use OrangeHRM\DevOps\usageStats\TravelClaimAnalyzer;
use OrangeHRM\DevOps\usageStats\UserLoginAnalyzer;
use OrangeHRM\DevOps\usageStats\ReportUsageAnalyzer;
use OrangeHRM\DevOps\usageStats\RequestDeskAnalyzer;
use OrangeHRM\DevOps\utility\InstanceLicenseInfoRetrievalUtility;
use OrangeHRM\DevOps\usageStats\DatabaseDiskUtilization;
use OrangeHRM\DevOps\usageStats\DatabaseSize;

class UsageStatistics extends DataAnalyzer
{

    /**
     * @throws Exception
     */
    public function getResult(): stdClass
    {
        $data_array = $this->getAnalyticsData();
        $data = $data_array[0];
        $detailViewData = $data_array[1];
        $result = new stdClass();

        $result->overviewSnapshot = $this->getOverviewSnapshot($data);

        $futureLeave = [
            0 => ['Module' => 'Leave', 'Data' => 'Leave Request Count Scheduled for Future', 'Count' => $data['already-processed-data']['no-of-leave-requests-future']['13-weeks']],
        ];
        $result->scheduledLeaveRequests = $futureLeave;

        $result->timeBaseData = $this->getTimeBaseData($data);

        $result->monthwiseActiveEmployeeCount = $this->reverseOrder($detailViewData['employee-activity-detailed-view-data']['month-wise-active-employee-count-table-multigraph']['dataSet']);
        $result->monthwisePIMActivityDistribution = $this->reverseOrder($detailViewData['employee-activity-detailed-view-data']['pim-activity-distribution-monthly-breakdown-line-graph']['dataSet']);
        $result->monthwiseLoginDistribution = $this->reverseOrder($detailViewData['user-login-detailed-view-data']['active-user-count-distribution-table-multigraph']['dataSet']);
        $result->monthwiseLeaveRequestDistribution = $this->reverseOrder($detailViewData['leave-detailed-view-data']['past-future-leave-distribution-bar-chart']['dataSet']);
        $result->leaveRequestDistributionByAppliedDate = $this->reverseOrder($detailViewData['leave-detailed-view-data']['past-future-leave-distribution-applied-bar-chart']['dataSet']);
        $result->leaveRequestDistributionByMonthCountry = $this->reverseOrder($detailViewData['leave-detailed-view-data']['leave-country-month-wise-break-down-table-only']['dataSet']);
        $result->countryBasedLoginCount = $this->reverseOrder($detailViewData['user-login-detailed-view-data']['login-country-based-count']['dataSet']);
        $result->locationBasedLoginCount = $this->reverseOrder($detailViewData['user-login-detailed-view-data']['login-location-based-count']['dataSet']);
        $result->countryMonthBasedLoginCount = $this->reverseOrder($detailViewData['user-login-detailed-view-data']['login-country-location-month-based-count']['dataSet']);

        $result->standardNCustomizedReportsCount = $this->reverseOrder($detailViewData['reports-detailed-view-data']['standard-customized-detailed-view']['dataSet']);
        $result->userDefinedReportsCount = $this->reverseOrder($detailViewData['reports-detailed-view-data']['user-defined-created-distribution-bar-chart']['dataSet']);
        $result->reportsGenerationCount = $this->reverseOrder($detailViewData['reports-detailed-view-data']['reports-generation-distribution-bar-chart']['dataSet']);


        $PerformanceAppraisals = $detailViewData['performance-detailed-view-data']['past-future-appraisals-distribution-stacked-bar-graph-converted']['dataSet'];
        $result->monthwisePerformanceAppraisalsDistribution = $this->changeKeys($PerformanceAppraisals, ['month', 'completed', 'inProgress', 'notInitiated', 'approved', 'rejected', 'closed']);

        $result->monthwiseTimesheetDistribution = $this->reverseOrder($detailViewData['time-sheets-detailed-view-data']['time-sheets-filled-employees-distribution-monthly-breakdown-table-multigraph']['dataSet']);
        $result->monthwiseAttendance = $this->reverseOrder($detailViewData['punch-ins-detailed-view-data']['punched-in-distinct-employees-count-monthly-breakdown-bar-chart']['dataSet']);


        $RecruitmentData = [];
        if (is_array($detailViewData['vacancy-detailed-view-data']['vacancy-utilization-breakdown'])) {
            foreach ($detailViewData['vacancy-detailed-view-data']['vacancy-utilization-breakdown'] as $vacancyData) {
                $RecruitmentData[] = ['Status' => $vacancyData['name'], 'No. of Vacancies' => $vacancyData['no_of_vacancies'], 'No. of Candidates Applied' => $vacancyData['no_of_candidates']];
            }
        }
        $result->recruitmentData = $RecruitmentData;

        $result->monthwiseTrainingDistribution = [];
        $TrainingDistribution = $detailViewData['training-sessions-detailed-view-data']['online-training-distribution-monthly-breakdown-stacked-bar-graph-converted']['dataSet'];
        if (is_array($TrainingDistribution)) {
            $result->monthwiseTrainingDistribution = $this->changeKeys($TrainingDistribution, ['month', 'notStarted', 'inProgress', 'completed', 'failed', 'viewed']);
        }

        $result->monthwiseOnBoardingTaskDistribution = $this->reverseOrder($detailViewData['on-boarding-detailed-view-data']['on-boarding-distribution-monthly-breakdown-bar-chart']['dataSet']);

        $result->monthwiseTravelRequestDistribution = $this->reverseOrder($detailViewData['travel-claims-detailed-view-data']['travel-claim-distribution-monthly-breakdown-bar-chart']['dataSet']);

        $result->expenseClaimsCreated = [];
        if (is_array($detailViewData['travel-claims-detailed-view-data']['past-future-expense-distribution-stacked-bar-chart']['dataSet']['1'])) {
            $result->expenseClaimsCreated = [0 => $detailViewData['travel-claims-detailed-view-data']['past-future-expense-distribution-stacked-bar-chart']['dataSet']['1']];
        }

        $RequestDeskData = [
            0 => ['Detail' => 'Request types Templates Configured', '' => 'General', 'Count' => $data['no-of-general-request-types']],
            1 => ['Detail' => '', '' => 'Hiring', 'Count' => $data['no-of-hiring-request-types']],
            2 => ['Detail' => '', '' => 'Employee Management', 'Count' => $data['no-of-employee-management-request-types']],
            3 => ['Detail' => '', '' => 'Total', 'Count' => $data['no-of-request-types']],
            4 => ['Detail' => 'Request types Configured', '' => 'Approve Required', 'Count' => $data['no-of-approve-required-request-types']],
            5 => ['Detail' => '', '' => 'Approve not Required', 'Count' => $data['no-of-approve-not-required-request-types']],
        ];
        $result->requestDeskSnapshot = $RequestDeskData;

        $result->monthwiseRequestDeskRequestDistribution = $this->reverseOrder($detailViewData['request-desk-detailed-view-data']['request-count-distribution-table-multigraph']['dataSet']);

        $notificationsArray = $detailViewData['notifications-detailed-view-data']['notifications-usage-breakdown'];

        $emailNotificationsData = [
            0 => ['' => $notificationsArray['Action Based']['type'] ?? 'Action Based', 'Available (from purchased modules)' => $notificationsArray['Action Based']['no_of_available_notifications'] ?? 0, 'Configured' => $notificationsArray['Action Based']['no_of_notifications'] ?? 0, 'No. of Subscribers' => $notificationsArray['Action Based']['no_of_subscribers'] ?? 0, 'No. of Configured Templates' => $notificationsArray['Action Based']['no_of_templates'] ?? 0],
            1 => ['' => $notificationsArray['Date Based']['type'] ?? 'Date Based', 'Available (from purchased modules)' => $notificationsArray['Date Based']['no_of_available_notifications'] ?? 0, 'Configured' => $notificationsArray['Date Based']['no_of_notifications'] ?? 0, 'No. of Subscribers' => $notificationsArray['Date Based']['no_of_subscribers'] ?? 0, 'No. of Configured Templates' => $notificationsArray['Date Based']['no_of_templates'] ?? 0],
            2 => ['' => $notificationsArray['Manual']['type'] ?? 'Manual', 'Available (from purchased modules)' => $notificationsArray['Manual']['no_of_available_notifications'] ?? 0, 'Configured' => $notificationsArray['Manual']['no_of_notifications'] ?? 0, 'No. of Subscribers' => $notificationsArray['Manual']['no_of_subscribers'] ?? 0, 'No. of Configured Templates' => $notificationsArray['Manual']['no_of_templates'] ?? 0],
            3 => ['' => $notificationsArray['Other']['type'] ?? 'Other', 'Available (from purchased modules)' => $notificationsArray['Other']['no_of_available_notifications'] ?? 0, 'Configured' => $notificationsArray['Other']['no_of_notifications'] ?? 0, 'No. of Subscribers' => $notificationsArray['Other']['no_of_subscribers'] ?? 0, 'No. of Configured Templates' => $notificationsArray['Other']['no_of_templates'] ?? 0],
            4 => ['' => $notificationsArray['Scheduled']['type'] ?? 'Scheduled', 'Available (from purchased modules)' => $notificationsArray['Scheduled']['no_of_available_notifications'] ?? 0, 'Configured' => $notificationsArray['Scheduled']['no_of_notifications'] ?? 0, 'No. of Subscribers' => $notificationsArray['Scheduled']['no_of_subscribers'] ?? 0, 'No. of Configured Templates' => $notificationsArray['Scheduled']['no_of_templates'] ?? 0],
            5 => ['' => 'Total', 'Available (from purchased modules)' => $data['already-processed-data']['notifications.usage']['notifications.total-available'] ?? 0, 'Configured' => $data['already-processed-data']['notifications.usage']['notifications.total-configured'] ?? 0, 'No. of Subscribers' => $data['already-processed-data']['notifications.usage']['notifications.no-of-subscribers'] ?? 0, 'No. of Configured Templates' => $data['already-processed-data']['notifications.usage']['notifications.no-of-templates'] ?? 0],
        ];
        $result->emailNotificationSnapshot = $emailNotificationsData;

        return $result;
    }

    public function getOverviewSnapshot($data): array
    {

        return [
            0 => ['Detail' => 'Employee Count', '' => 'Active', 'Count' => $data['already-processed-data']['no-of-current-active-employees'][0]],
            1 => ['Detail' => '', '' => 'Terminated', 'Count' => $data['total-terminated-employee-count']],
            2 => ['Detail' => '', '' => 'Total', 'Count' => $data['total-employee-count']],

            3 => ['Detail' => 'License Information', '' => 'Employee Limit', 'Count' => $data['employeeLimit']],
            4 => ['Detail' => '', '' => 'Expiry Date', 'Count' => $data['license-expiry-date']],

            5 => ['Detail' => 'Database', '' => 'Size', 'Count' => $data['db-size']],
            6 => ['Detail' => '', '' => 'Directory Size', 'Directory Size' => $data['db-directory-size']],

            7 => ['Detail' => 'Overall User Activity', '' => 'Active User Count', 'Count' => $data['already-processed-data']['no-of-current-active-users'][0]],
            8 => ['Detail' => '', '' => 'Last Login Date', 'Count' => $data['last-login-date']],
            9 => ['Detail' => '', '' => 'Total Unique Employees Using Mobile App', 'Count' => $data['no-of-unique-emps-mobile']],

            10 => ['Detail' => 'Overall Recruitment Activity', '' => 'No. of Open Vacancies', 'Count' => $data['no-of-open-vacancies']],
            11 => ['Detail' => '', '' => 'No. of Candidates', 'Count' => $data['no-of-candidates-in-open-vacancies']],

            12 => ['Detail' => 'Request Desk', '' => 'Total Request types configured', 'Count' => $data['no-of-request-types']],

            13 => ['Detail' => 'Email Notifications', '' => 'Total Configured / Total Available', 'Count' => $data['already-processed-data']['total-configured-notifications'] . " / " . $data['already-processed-data']['total-available-notifications']],
            14 => ['Detail' => '', '' => 'No. of Subscribers', 'Count' => $data['already-processed-data']['total-no-of-notification-subscribers']],
            15 => ['Detail' => '', '' => 'No. of Templates Configured', 'Count' => $data['already-processed-data']['total-no-of-notification-templates']],

        ];
    }

    public function getTimeBaseData($data): array
    {

        $result = [];

        $indices = [
            ['Logins', 'Total Unique Logins', 'unique-login-count'],
            ['', 'Total Logins', 'total-login-count'],
            ['Leave', 'Total Leave Requests', 'no-of-leave-requests'],
            ['Timesheets', 'Actioned Timesheet Count', 'no-of-time-sheets'],
            ['', 'Total Unique Employees Using Timesheets', 'no-of-unique-emps-timesheets'],
            ['', 'Total Timesheets Submitted', 'no-of-timesheets-submitted'],
            ['Attendance', 'Total Unique Employees Using Attendance', 'no-of-unique-emps-attendance'],
            ['', 'Total Attendance Records Submitted', 'no-of-punch-ins'],
            ['Performance', 'Total Appraisals Created', 'no-of-appraisals-created'],
            ['', 'Total Goals', 'no-of-goals'],
            ['', 'Total Goals Allocated Employee Count', 'no-of-goals-assigned-emp-count'],
            ['', 'Total OKRs', 'no-of-okrs'],
            ['', 'Total OKRs Allocated Employee Count', 'no-of-goals-okrs-assigned-emp-count'],
            ['', 'Total Goals/OKRs Count', 'no-of-goals-okrs-count'],
            ['', 'Total Goals/OKRs Allocated Employee Count', 'no-of-goals-okrs-assigned-emp-count'],
            ['', 'Total Appraisals Completed', 'no-of-appraisals-completed'],
            ['', 'No. of IDPs Created', 'no-of-idp'],
            ['On/Off Boarding', 'No. of On-boarding Tasks', 'no-of-on-boarding-tasks'],
            ['Travel & Expense', 'Total Unique Employees Using Travel/Expense', 'no-of-unique-emps-travel'],
            ['', 'Total Travel/Expense Reports', 'no-of-travel-exp-reports'],
            ['Training', 'Total Unique Employees Using Training', 'no-of-unique-emps-training'],
            ['', 'Total Training Courses Taken', 'no-of-training-courses-taken'],
            ['OTM', 'Total Unique Employees Using OTM', 'no-of-unique-employees-online-training'],
            ['', 'Total Online Training Courses Passed', 'no-of-online-training-courses-passed'],
            ['', 'Total Online Training Courses Failed', 'no-of-online-training-courses-failed'],
            ['Document Templates', 'Total Document Templates Configured', 'no-of-document-templates-configured'],
            ['Request Desk', 'Total Requests submitted', 'no-of-requests-submited'],

        ];

        foreach ($indices as [$Module, $Data, $index]) {
            $result[] = [
                'Module' => $Module,
                'Data' => $Data,
                '3 months' => $data['already-processed-data'][$index]['13-weeks'] ?? 'N/A',
                '6 months' => $data['already-processed-data'][$index]['26-weeks'] ?? 'N/A',
                '12 months' => $data['already-processed-data'][$index]['52-weeks'] ?? 'N/A',
            ];
        }

        return $result;
    }

    public function changeKeys($originalArray, $keyArray): array
    {

        $convertedArray = [];

        foreach ($originalArray as $row) {
            $convertedRow = [];
            for ($i = 0; $i < count($keyArray); $i++) {
                $convertedRow[$keyArray[$i]] = $row[$i];
            }
            $convertedArray[] = $convertedRow;
        }
        return $convertedArray;

    }


    /**
     * @throws Exception
     */
    public function getAnalyticsData(): array
    {
        $triggeredDate = (date("Y-m-d"));
        $futureDate = date("Y-m", strtotime("+" . '52' . "Weeks"));
        $beforeDay = date('Y-m-d', strtotime('-1 year'));

        $pastMonths = TimeDataHelper::instance()->generateAllMonths($beforeDay, $triggeredDate);
        $pastMonthsIncludingCurrentMonth = TimeDataHelper::instance()->generateAllMonths($beforeDay, $triggeredDate, true);
        $futureMonths = TimeDataHelper::instance()->generateAllMonths($triggeredDate, $futureDate);
        $allMonths = TimeDataHelper::instance()->generateAllMonths($beforeDay, $futureDate);

        $activeUserCountAnalyzer = new ActiveUserCountAnalyzer($this->params);
        $domainNameInfo = new DomainInformationAnalyzer($this->params);
        $leaveRequestAnalyzer = new LeaveRequestAnalyzer($this->params);
        $vacancyAnalyzer = new JobVacancyAnalyzer($this->params);
        $trainingSessionAnalyzer = new TrainingSessionAnalyzer($this->params);
        $timeSheetAnalyzer = new TimeSheetsAnalyzer($this->params);
        $punchInAnalyzer = new PunchInTimeAnalyzer($this->params);
        $onBoardingAnalyzer = new OnBoardingTaskAnalyzer($this->params);
        $travelClaimAnalyzer = new TravelClaimAnalyzer($this->params);
        $performanceAppraisalAnalyzer = new PerformanceAppraisalAnalyzer($this->params);
        $userLoginAnalyzer = new UserLoginAnalyzer($this->params);
        $employeeCountAnalyzer = new EmployeeAnalyzer($this->params);
        $documentTemplateAnalyzer = new DocumentTemplateAnalyzer($this->params);
        $onlineTrainingAnalyzer = new OnlineTrainingAnalyzer($this->params);
        $newsAndDocumentArticleAnalyzer = new NewsAndDocumentArticleAnalyzer($this->params);
        $notificationAnalyzer = new NotificationAnalyzer($this->params);
        $requestDeskAnalyzer = new RequestDeskAnalyzer($this->params);
        $reportUsageAnalyzer = new ReportUsageAnalyzer($this->params);

        $this->injectDependencies($activeUserCountAnalyzer, $domainNameInfo, $leaveRequestAnalyzer, $vacancyAnalyzer, $trainingSessionAnalyzer, $timeSheetAnalyzer, $punchInAnalyzer, $onBoardingAnalyzer);
        $this->injectDependencies($travelClaimAnalyzer, $performanceAppraisalAnalyzer, $userLoginAnalyzer, $employeeCountAnalyzer, $documentTemplateAnalyzer);
        $this->injectDependencies($onlineTrainingAnalyzer, $newsAndDocumentArticleAnalyzer, $notificationAnalyzer, $reportUsageAnalyzer);

        $requestDeskAnalyzer->setInstanceDatabaseAccessUtility($this->getInstanceDatabaseAccessUtility());
        $requestDeskAnalyzer->setInstanceLicenseInfoRetrievalUtility($this->getInstanceLicenseInfoRetrievalUtility());

        $userCountArray = $activeUserCountAnalyzer->getResult();

        $employeeCount = $employeeCountAnalyzer->getResult($beforeDay, $triggeredDate, $pastMonths);
        $leaveRequestCount = $leaveRequestAnalyzer->getResult($triggeredDate, $futureDate, $beforeDay, $allMonths, $pastMonths);
        $vacancyCount = $vacancyAnalyzer->getResult();
        $trainingSessionCount = $trainingSessionAnalyzer->getResult($futureDate, $beforeDay, $allMonths);
        $timeSheetAnalyzer->setMonthwiseActiveEmployeeCount($employeeCount['detailed-view-data']['month-wise-active-employee-count-table-multigraph']['dataSet']);
        $timeSheetCount = $timeSheetAnalyzer->getResult($triggeredDate, $beforeDay, $pastMonthsIncludingCurrentMonth);
        $punchInCount = $punchInAnalyzer->getResult($triggeredDate, $beforeDay, $pastMonthsIncludingCurrentMonth);
        $onBoardingTasksCount = $onBoardingAnalyzer->getResult($futureDate, $beforeDay, $allMonths);
        $travelClaimCount = $travelClaimAnalyzer->getResult($triggeredDate, $beforeDay, $pastMonths);
        $performanceAppraisalCount = $performanceAppraisalAnalyzer->getResult($triggeredDate, $futureDate, $beforeDay, $allMonths, $pastMonths);
        $userLoginCount = $userLoginAnalyzer->getResult($triggeredDate, $beforeDay, $pastMonths);
        $documentTemplateCount = $documentTemplateAnalyzer->getResult($triggeredDate, $beforeDay, $pastMonths);
        $onlineTrainingCount = $onlineTrainingAnalyzer->getResult($triggeredDate, $beforeDay, $pastMonths);
        $newsAndDocumentArticleCount = $newsAndDocumentArticleAnalyzer->getResult($triggeredDate, $beforeDay, $pastMonths);
        $notificationCounts = $notificationAnalyzer->getResult();
        $requestDeskCount = $requestDeskAnalyzer->getResult($triggeredDate, $beforeDay, $pastMonthsIncludingCurrentMonth);
        $reportsCount = $reportUsageAnalyzer->getResult($triggeredDate, $beforeDay, $pastMonthsIncludingCurrentMonth);

        $alreadyProcessedData = [];
        $detailViewData = [];

        $fillerKeys = ['13-weeks', '26-weeks', '52-weeks'];
        $alreadyProcessedData['no-of-current-active-employees'] = $userCountArray['no-of-current-active-employees'];
        $alreadyProcessedData['no-of-current-active-users'] = $userCountArray['no-of-current-active-users'];
        $alreadyProcessedData['last-login-date'] = $userCountArray['last-login-date'];

        $alreadyProcessedData['active-user-count-unique'] = $userCountArray['Active-user-count-unique'];
        $alreadyProcessedData['unique-login-count'] = $userCountArray['unique-login-count'];
        $alreadyProcessedData['active-user-count-2'] = $userCountArray['Active-user-count-2'];
        $alreadyProcessedData['Active-mobile-app-user-count'] = $userCountArray['Active-mobile-app-user-count'];

        $alreadyProcessedData['no-of-leave-requests'] = $leaveRequestCount['no-of-leave-requests'];
        $alreadyProcessedData['leave-request-percentage'] = $leaveRequestCount['leave-request-percentage'];
        $alreadyProcessedData['no-of-vacancies'] = $vacancyCount['no-of-job-vacancies'];
        $alreadyProcessedData['no-of-training-sessions'] = $trainingSessionCount['no-of-training-sessions'];
        $alreadyProcessedData['no-of-time-sheets'] = $timeSheetCount['no-of-time-sheets'];
        $alreadyProcessedData['no-of-unique-emps-timesheets'] = $timeSheetCount['no-of-unique-emps-timesheets'];
        $alreadyProcessedData['unique-emps-timesheets-percentage'] = $timeSheetCount['unique-emps-timesheets-percentage'];
        $alreadyProcessedData['no-of-timesheets-submitted'] = $timeSheetCount['no-of-timesheets-submitted'];
        $alreadyProcessedData['no-of-punch-ins'] = $punchInCount['no-of-punch-ins'];
        $alreadyProcessedData['no-of-on-boarding-tasks'] = $onBoardingTasksCount['no-of-on-boarding-tasks'];
        $alreadyProcessedData['no-of-on-boarding-events'] = $onBoardingTasksCount['no-of-on-boarding-events'];
        $alreadyProcessedData['no-of-off-boarding-tasks'] = $onBoardingTasksCount['no-of-off-boarding-tasks'] ?? 'N/A';
        $alreadyProcessedData['no-of-off-boarding-events'] = $onBoardingTasksCount['no-of-off-boarding-events'];
        $alreadyProcessedData['no-of-travel-claims'] = $travelClaimCount['no-of-travel-claims'];

        $alreadyProcessedData['no-of-leave-requests-future'] = $leaveRequestCount['no-of-leave-requests-future'];
        $alreadyProcessedData['no-of-future-training-sessions'] = $trainingSessionCount['no-of-future-training-sessions'];
        $alreadyProcessedData['no-of-future-performance-appraisals'] = $performanceAppraisalCount['no-of-future-performance-appraisals'];
        $alreadyProcessedData['no-of-performance-appraisals'] = $performanceAppraisalCount['no-of-performance-appraisals'];
        $alreadyProcessedData['no-of-appraisals-created'] = $performanceAppraisalCount['no-of-appraisals-created'];
        $alreadyProcessedData['no-of-appraisals-completed'] = $performanceAppraisalCount['no-of-appraisals-completed'];
        $alreadyProcessedData['appraisals-created-percentage'] = $performanceAppraisalCount['appraisals-created-percentage'];
        $alreadyProcessedData['appraisals-completed-percentage'] = $performanceAppraisalCount['appraisals-completed-percentage'];
        $alreadyProcessedData['no-of-idp'] = $performanceAppraisalCount['no-of-idp'];
        $alreadyProcessedData['no-of-future-on-boarding-tasks'] = $onBoardingTasksCount['no-of-future-on-boarding-tasks'];
        $alreadyProcessedData['no-of-unique-emps-attendance'] = $punchInCount['no-of-unique-emps-attendance'];
        $alreadyProcessedData['unique-emps-attendance-percentage'] = $punchInCount['unique-emps-attendance-percentage'];
        $alreadyProcessedData['no-of-unique-emps-travel'] = $travelClaimCount['no-of-unique-emps-travel'];
        $alreadyProcessedData['unique-emps-travel-percentage'] = $travelClaimCount['unique-emps-travel-percentage'];
        $alreadyProcessedData['no-of-travel-exp-reports'] = $travelClaimCount['no-of-travel-exp-reports'];
        $alreadyProcessedData['no-of-unique-emps-training'] = $trainingSessionCount['no-of-unique-emps-training'];
        $alreadyProcessedData['unique-emps-training-percentage'] = $trainingSessionCount['unique-emps-training-percentage'];
        $alreadyProcessedData['no-of-training-courses-taken'] = $trainingSessionCount['no-of-training-courses-taken'];

        $alreadyProcessedData['no-of-document-templates-configured'] = $documentTemplateCount['no-of-document-templates-configured'];
        $alreadyProcessedData['no-of-unique-employees-online-training'] = $onlineTrainingCount['no-of-unique-employees-online-training'];
        $alreadyProcessedData['no-of-online-training-courses-passed'] = $onlineTrainingCount['no-of-online-training-courses-passed'];
        $alreadyProcessedData['no-of-online-training-courses-failed'] = $onlineTrainingCount['no-of-online-training-courses-failed'];
        $alreadyProcessedData['no-of-news-articles-published'] = $newsAndDocumentArticleCount['no-of-news-articles-published'];
        $alreadyProcessedData['no-of-document-articles-published'] = $newsAndDocumentArticleCount['no-of-document-articles-published'];
        $alreadyProcessedData['no-of-acknowledgements'] = $newsAndDocumentArticleCount['no-of-acknowledgements'];
        $alreadyProcessedData['no-of-unique-acknowledging-emps'] = $newsAndDocumentArticleCount['no-of-unique-acknowledging-emps'];
        $alreadyProcessedData['total-available-notifications'] = $notificationCounts['detailed-view-data']['total-available-notifications'];
        $alreadyProcessedData['total-configured-notifications'] = $notificationCounts['detailed-view-data']['total-configured-notifications'];
        $alreadyProcessedData['total-no-of-notification-subscribers'] = $notificationCounts['detailed-view-data']['no-of-notification-subscribers'];
        $alreadyProcessedData['total-no-of-notification-templates'] = $notificationCounts['detailed-view-data']['no-of-notification-templates'];
        $alreadyProcessedData['total-action-based-notifications'] = $notificationCounts['total-action-based-notifications'];
        $alreadyProcessedData['total-date-based-notifications'] = $notificationCounts['total-date-based-notifications'];
        $alreadyProcessedData['total-schedule-based-notifications'] = $notificationCounts['total-schedule-based-notifications'];

        $alreadyProcessedData['no-of-requests-submited'] = $requestDeskCount['no-of-requests-submited'];

        $detailViewData['leave-detailed-view-data'] = $leaveRequestCount['detailed-view-data'];
        $detailViewData['on-boarding-detailed-view-data'] = $onBoardingTasksCount['detailed-view-data'];
        $detailViewData['training-sessions-detailed-view-data'] = $trainingSessionCount['detailed-view-data'];
        $detailViewData['travel-claims-detailed-view-data'] = $travelClaimCount['detailed-view-data'];
        $detailViewData['time-sheets-detailed-view-data'] = $timeSheetCount['detailed-view-data'];
        $detailViewData['punch-ins-detailed-view-data'] = $punchInCount['detailed-view-data'];
        $detailViewData['user-login-detailed-view-data'] = $userLoginCount['detailed-view-data'];
        $detailViewData['employee-activity-detailed-view-data'] = $employeeCount['detailed-view-data'];
        $detailViewData['vacancy-detailed-view-data'] = ['vacancy-utilization-breakdown' => $vacancyCount['vacancy-utilization-breakdown']];
        $detailViewData['performance-detailed-view-data'] = $performanceAppraisalCount['detailed-view-data'];
        $detailViewData['request-desk-detailed-view-data'] = $requestDeskCount['detailed-view-data'];
        $detailViewData['notifications-detailed-view-data'] = $notificationCounts['detailed-view-data'];
        $detailViewData['reports-detailed-view-data'] = $reportsCount['detailed-view-data'];

        $licenseInfoRetrievalUtility = new InstanceLicenseInfoRetrievalUtility();
        $licenseInfoRetrievalUtility->setInstallationDirectory($this->params->getInstallationPath());
        $licenseProperties = $licenseInfoRetrievalUtility->getLicenseProperties();

        $organizationInfo = $domainNameInfo->getResult();

        $resultArray = [];
        $resultArray['organization-name'] = mb_convert_encoding($organizationInfo['clientName'], 'UTF-8', 'ISO-8859-1');
        $resultArray['domName'] = $organizationInfo['domainName'];
        $resultArray['employeeLimit'] = $licenseProperties['employeelimit'];
        $resultArray['license-expiry-date'] = $licenseProperties['expireOn'];
        $resultArray['already-processed-data'] = $alreadyProcessedData;
        $resultArray['no-of-current-active-employees'] = $userCountArray['no-of-current-active-employees'];
        $resultArray['no-of-current-active-users'] = $userCountArray['no-of-current-active-users'];
        $resultArray['last-login-date'] = $userCountArray['last-login-date'];
        $resultArray['total-terminated-employee-count'] = $userCountArray['total-terminated-employees'];
        $resultArray['no-of-unique-emps-mobile'] = $userCountArray['no-of-unique-emps-mobile'];
        $resultArray['unique-emps-mobile-percentage'] = $userCountArray['unique-emps-mobile-percentage'];
        $resultArray['total-employee-count'] = $userCountArray['total-employee-count'];
        $resultArray['unique-login-percentage'] = $userCountArray['unique-login-percentage'];
        $resultArray['total-login-count'] = $userCountArray['total-login-count'];
        $resultArray['no-of-open-vacancies'] = $vacancyCount['no-of-open-vacancies'];
        $resultArray['no-of-candidates-in-open-vacancies'] = $vacancyCount['no-of-candidates-in-open-vacancies'];
        $resultArray['vacancy-utilization-breakdown'] = $vacancyCount['vacancy-utilization-breakdown'];
        $resultArray['no-of-request-types'] = $requestDeskCount['no-of-request-types'];
        $resultArray['no-of-general-request-types'] = $requestDeskCount['no-of-general-request-types'];
        $resultArray['no-of-hiring-request-types'] = $requestDeskCount['no-of-hiring-request-types'];
        $resultArray['no-of-employee-management-request-types'] = $requestDeskCount['no-of-employee-management-request-types'];
        $resultArray['no-of-approve-required-request-types'] = $requestDeskCount['no-of-approve-required-request-types'];
        $resultArray['no-of-approve-not-required-request-types'] = $requestDeskCount['no-of-approve-not-required-request-types'];

        $resultArray['no-of-standard-reports'] = $reportsCount['no-of-standard-reports'];
        $resultArray['usage-of-standard-reports'] = $reportsCount['usage-of-standard-reports'];

        $resultArray['no-of-user-defined-reports'] = $reportsCount['no-of-user-defined-reports'];
        $resultArray['usage-of-user-defined-reports'] = $reportsCount['usage-of-user-defined-reports'];
        $resultArray['no-of-user-defined-reports-created'] = $reportsCount['no-of-user-defined-reports-created'];

        $resultArray['no-of-custom-reports'] = $reportsCount['no-of-custom-reports'];
        $resultArray['usage-of-custom-reports'] = $reportsCount['usage-of-custom-reports'];

        $resultArray['no-of-reports-schedules'] = $reportsCount['no-of-reports-schedules'];

        $dbSizeCheck = new DatabaseSize();
        $dbSizeCheck->setInstanceDatabaseAccessUtility($this->getInstanceDatabaseAccessUtility());

        $diskUtilizationCheck = new DatabaseDiskUtilization();
        $diskUtilizationCheck->setInstanceDatabaseAccessUtility($this->getInstanceDatabaseAccessUtility());

        $resultArray['db-size'] = $dbSizeCheck->getValue();
        $resultArray['db-directory-size'] = $diskUtilizationCheck->getValue();

        $resultArray['last-updated-time'] = date("Y-m-d H:i");

        return [$resultArray, $detailViewData];

    }

    protected function reverseOrder($dataSet)
    {
        return is_array($dataSet) ? array_reverse($dataSet) : $dataSet;
    }

    /**
     * @throws Exception
     */
    protected function injectDependencies(DataAnalyzer ...$analyzers): void
    {

        foreach ($analyzers as $analyzer) {
            $analyzer->setInstanceDatabaseAccessUtility($this->getInstanceDatabaseAccessUtility());
            $analyzer->setInstanceLicenseInfoRetrievalUtility($this->getInstanceLicenseInfoRetrievalUtility());
        }
    }

}
<?php


namespace SeAT\check;


use Exception;
use SeAT\result\Result;
use SeAT\result\SimpleValueResult;
use SebastianBergmann\Environment\OperatingSystem;
use SeAT\check\OperatingSystemAndVersionCheck;

class SecurityEnforcingPersistentCheck extends OsSpecificCliValueCheck
{

    protected string $description = 'Security Enforcing (SELinux, etc) - Persistent';

    protected function getCommandForLinux(): string
    {
        exec('which sestatus', $output, $returnVar);

        if ($returnVar === 0) {
            return 'sestatus';
        }

        return 'echo "SELinux persistent status is not available in your Operating System."';
    }

    protected function getCommandForUbuntu(): string
    {
        $command = 'which sestatus';
        $output = [];
        $returnVar = null;
        exec($command, $output, $returnVar);

        if ($returnVar === 0) {
            return 'sestatus';
        } else {
            return 'echo "SELinux persistent status is not available in your Operating System."';
        }
    }

    /**
     * @throws Exception
     */
    protected function getCommandForOtherOs(): string
    {
        throw new Exception("This check is not supported for operating systems other than Linux and Windows.");
    }

    protected function getCommandForWindows(): string
    {
        return 'echo "Not Implemented"';
    }

    protected function determineFlag(string $value): string
    {
        $seRuntimeCheck = new SecurityEnforcingRuntimeCheck();
        $result = $seRuntimeCheck->execute();

        return ($result->getValue() === $value) ? Result::OK : Result::IGNORE;
    }

    protected function determineComment(string $value): string
    {
        $seRuntimeCheck = new SecurityEnforcingRuntimeCheck();
        $result = $seRuntimeCheck->execute();

        return ($result->getValue() === $value) ? "Persistent value matches with the runtime value." : "Persistent value differs from the runtime value. This may cause issues if the server is restarted.";
    }

    protected function formatOutput(array $output): string
    {
        return $this->findSecurityEnforcingPersistentValue($output);
    }

    protected function findSecurityEnforcingPersistentValue(array $output): string
    {
        foreach ($output as $line) {
            if (preg_match('/^Mode from config file:/', $line)) {
                list($definition, $value) = explode(':', $line);
                return ucfirst(trim($value));
            }
        }

        return 'Not Found';
    }

}
<?php

namespace SeAT\check;

use Exception;
use SeAT\result\Result;
use SeAT\result\SimpleValueResult;

class SecurityEnforcingRuntimeCheck extends OsSpecificCliValueCheck
{

    protected string $description = 'Security Enforcing (SELinux, etc) - Runtime';

    protected function getCommandForLinux(): string
    {
        exec('which getenforce', $output, $returnVar);

        if ($returnVar === 0) {
            return 'getenforce';
        }

        return 'echo "SELinux Runtime status is not available in your Operating System."';
    }

    protected function getCommandForUbuntu(): string
    {
        $command = 'which getenforce';
        $output = [];
        $returnVar = null;
        exec($command, $output, $returnVar);

        if ($returnVar === 0) {
            return 'getenforce';
        } else {
            return 'echo "SELinux Runtime status is not available in your Operating System."';
        }
    }

    /**
     * @throws Exception
     */
    protected function getCommandForOtherOs(): string
    {
        throw new Exception("This check is not supported for operating systems other than Linux and Windows.");
    }

    protected function getCommandForWindows(): string
    {
        return 'echo "Not Implemented"';
    }

    protected function determineFlag(string $value): string
    {
        switch ($value) {
            case 'Permissive':
            case 'Enforcing':
                return Result::OK;
            case 'Disabled':
                return Result::WARNING;
            default:
                return Result::ERROR;
        }
    }

    protected function determineComment(string $value): string
    {
        switch ($value) {
            case 'Permissive':
                return 'SELinux is permissive.';
            case 'Enforcing':
                return 'SELinux is enforcing. Make sure that file context and sebool values are set properly.';
            case 'Disabled':
                return 'SELinux is disabled.';
            default:
                return '';
        }
    }

}
<?php

namespace SeAT\check;

class SofficeInstallationCheck extends UtilityPackageInstallationCheck
{
    protected string $description = 'soffice';

    protected function isInstalled(): bool
    {
        return $this->commandExists('soffice');
    }
}
<?php

namespace SeAT\check;

class HttpsPortCheck extends HttpServiceConfigCheck
{

    protected string $command = "echo 443";
    protected string $description = 'HTTPS Port';
    protected $expectation = [443, 8080];
    protected bool $critical = true;
    protected string $warningMessage = "HTTPS service seem to be running on an uncommon port.";
    protected string $errorMessage = "Couldn't determine the HTTPS port. Verify manually.";

}
<?php

namespace SeAT\check;

use Exception;
use SeAT\result\Result;
use SeAT\result\SimpleValueResult;
use SebastianBergmann\Environment\OperatingSystem;

abstract class InDedicatedPartitionCheck implements Check
{

    protected string $path;
    protected string $description;

    /**
     * @throws Exception
     */
    public function execute(): Result
    {

        if (!file_exists($this->path)) {
            $result = new SimpleValueResult();
            $result->setDescription($this->description);
            $result->setValue('N/A');
            $result->setFlag(Result::SKIPPED);
            $result->setComment("This check is not support for the current environment since {$this->path} doesn't exist.");
            return $result;
        }

        if (PHP_OS_FAMILY === 'Linux') {

            $output = [];
            $returnVar = null;
            $command = "df -h {$this->path} | grep \\{$this->path} | wc -l";
            exec($command, $output, $returnVar);

            if ($returnVar === 0) {
                $output = implode('', $output);
                $inDedicatedPartition = ($output === '1');
                $result = new SimpleValueResult();
                $result->setDescription($this->description);
                $result->setValue($inDedicatedPartition ? 'Yes' : 'No');
                $result->setFlag($inDedicatedPartition ? Result::OK : Result::WARNING);
                $result->setComment($inDedicatedPartition ? '' : "It's recommended that {$this->path} is on a dedicated partition.");

                return $result;
            } else {
                throw new Exception("Error while determining where {$this->path} is a dedicated partition.");
            }
        } else {
            $result = new SimpleValueResult();
            $result->setDescription($this->description);
            $result->setValue('N/A');
            $result->setFlag(Result::SKIPPED);
            $result->setComment("This check is not support for non-Linux environments.");
            return $result;
        }
    }

}
<?php

namespace SeAT\check;

abstract class InstanceFsCheck implements Check, InstanceFsAccess
{

    protected string $path;

    public function setPath(string $path)
    {
        $this->path = $path;
    }

    public function getPath(): string
    {
        return $this->path;
    }

}
<?php

namespace SeAT\check;

use Exception;
use SeAT\result\Result;

class KernelVersionCheck extends OsSpecificCliValueCheck
{

    protected string $description = 'Kernel / OS Version';

    protected function getCommandForLinux(): string
    {
        return 'uname -r';
    }

    protected function getCommandForUbuntu(): string
    {
        return $this->getCommandForLinux();
    }

    /**
     * @throws Exception
     */
    protected function getCommandForOtherOs(): string
    {
        throw new Exception("This check is not supported for operating systems other than Linux and Windows.");
    }

    protected function getCommandForWindows(): string
    {
        return 'systeminfo | findstr /C:"OS Version"';
    }

    protected function determineFlag(string $value): string
    {
        return Result::OK;
    }

}
<?php

namespace SeAT\check;

class LibXextInstallationCheck extends UtilityPackageInstallationCheck
{
    protected string $description = 'libXext';
    protected array $filePatterns = [
        '/usr/lib/libXext.so.*',
        '/usr/lib/libXext.so.*',
        '/usr/lib64/libXext.so.*',
        '/usr/lib64/libXext.so.*',
    ];

    protected function isInstalled(): bool
    {

        foreach ($this->filePatterns as $pattern) {
            $command = "ls {$pattern} 2> /dev/null | wc -l";
            $output = [];
            $returnVar = null;
            exec($command, $output, $returnVar);

            if ($returnVar === 0) {
                $count = intval(trim(implode("", $output)));
                if ($count > 0) {
                    return true;
                }
            }
        }

        return false;
    }
}
<?php

namespace SeAT\check;

use Exception;
use SeAT\result\Result;
use SeAT\result\SimpleValueResult;
use OrangeHRM\DevOps\utility\InstanceDatabaseAccessUtility as DBA;

class TLSCertificateCheck implements Check, InstanceDatabaseAccess
{
    protected DBA $dba;

    public function execute(): Result
    {

        $result = new SimpleValueResult();
        $result->setDescription('TLS Certificate Issuer');

        $virtualHostFilenameCheck = new VirtualHostFilenameCheck();
        $virtualHostFilenameCheck->setDba($this->getDba());
        $vhostPath = $virtualHostFilenameCheck->execute()->getValue();

        try {
            $sslCertFilePath = $this->findSSLCertificateFile($vhostPath);
        } catch (Exception $e) {
            $result->setValue('N/A');
            $result->setComment('TLS Certificate Required');
            $result->setFlag(Result::ERROR);
            return $result;
        }

        try {
            $issuerInfo = $this->runCliCommand("openssl x509 -noout -text -in $sslCertFilePath | grep 'Issuer'");
        } catch (Exception $e) {
            $result->setValue('N/A');
            $result->setComment('TLS Certificate Required');
            $result->setFlag(Result::ERROR);
            return $result;
        }

        if (strpos($issuerInfo, "CA") !== false) {
            $result->setValue('CA Issued');
            $result->setFlag(Result::OK);

        } else {
            $result->setValue('Self Signed');
            $result->setComment('TLS certificate appears to be Self Signed. It is recommended to obtain a certificate from a Certificate Authority');
            $result->setFlag(Result::WARNING);
        }
        return $result;

    }

    /**
     * @throws Exception
     */
    protected function findSSLCertificateFile($vhostPath)
    {
        if (!file_exists($vhostPath)) {
            throw new Exception("VirtualHost file does not exist.");
        }

        $command = "grep -E '^[[:space:]]*SSLCertificateFile' {$vhostPath} | awk '{print $2}'";
        $output = array();
        $returnVar = null;
        exec($command, $output, $returnVar);

        if ($returnVar == 0) {
            $resultCount = count($output);
            if ($resultCount === 1) {
                list($sslCertificateFile) = $output;
                return $sslCertificateFile;
            } elseif ($resultCount === 0) {
                throw new Exception("No SSL certificate path was found.");
            } else {
                throw new Exception("More than one SSL certificate path was found.");
            }
        } else {
            throw new Exception("Error while locating the SSL certificate path in vhost File.");
        }
    }

    /**
     * @throws Exception
     */
    protected function runCliCommand($command): string
    {
        $output = [];
        $returnVar = null;
        exec($command, $output, $returnVar);
        if ($returnVar === 0) {
            return implode('', $output);
        } else {
            throw new  Exception("An error occurred while running the command: {$command}");
        }
    }

    public function getDba(): DBA
    {
        return $this->dba;
    }

    public function setDba(DBA $dba)
    {
        $this->dba = $dba;
    }
}
<?php

namespace SeAT\check;

use League\CLImate\CLImate;
use SeAT\result\Result;
use SeAT\result\SimpleValueResult;

abstract class UserInputCheck implements Check, HasUserInput
{

    protected CLImate $cli;
    protected string $prompt = 'Please enter value:';
    protected string $description;
    protected bool $tag = true;
    protected string $mode = self::VERBOSE;

    public function __construct()
    {
        $this->init();
    }

    public function setMode($mode)
    {
        $this->mode = $mode;
    }

    protected function init()
    {
        $this->cli = new CLImate();
    }

    public function execute(): Result
    {

        if ($this->mode === self::VERBOSE) {
            $input = $this->cli->input($this->prompt);
            $value = $input->prompt();
        } else {
            $value = '';
        }

        $result = new SimpleValueResult();
        $result->setDescription($this->description);
        $result->setValue(($this->tag) ? "{$value} (Based on user's response)" : $value);
        $result->setFlag($this->determineFlag($value));
        $result->setComment($this->determineComment($value));

        return $result;
    }

    abstract protected function determineFlag(string $value): string;

    abstract protected function determineComment(string $value): string;
}
<?php

namespace SeAT\check;

use SeAT\result\Result;
use SeAT\result\SimpleValueResult;

abstract class UtilityPackageInstallationCheck implements Check
{
    protected string $description;
    protected bool $required = true;

    public function execute(): Result
    {
        $installed = $this->isInstalled();

        $result = new SimpleValueResult();
        $result->setDescription($this->description);
        $result->setValue($installed ? 'Installed' : 'Not Installed');
        $result->setFlag($this->determineFlag($installed));
        $result->setComment($this->determineComment($installed));

        return $result;
    }

    abstract protected function isInstalled(): bool;

    protected final function determineFlag($installed): string
    {
        if ($installed) {
            return Result::OK;
        } else {
            return $this->required ? Result::ERROR : Result::WARNING;
        }
    }

    protected final function determineComment($installed): string
    {
        if ($installed) {
            return '';
        } else {
            return $this->required ? "This packaged is required." : "This package is recommended to be installed.";
        }
    }

    protected final function commandExists($command): bool
    {
        $returnVar = null;
        $output = [];
        exec("which {$command} > /dev/null  2>&1", $output, $returnVar);
        return ($returnVar === 0);
    }

}
<?php

namespace SeAT\check;

class UuidCheck extends DatabaseValueCheck
{

    protected string $table = 'ohrm_config';
    protected string $field = 'value';
    protected string $condition = 'property = ?';
    protected array $params = ['beacon.uuid'];
    protected string $description = 'UUID';

}
<?php

namespace SeAT\check;

class VarInDedicatedPartitionCheck extends InDedicatedPartitionCheck
{

    protected string $path = '/var';
    protected string $description = '/var setup in a separate directory?';

}
<?php

namespace SeAT\check;

use Exception;
use SeAT\result\Result;
use SeAT\result\SimpleValueResult;
use OrangeHRM\DevOps\utility\InstanceDatabaseAccessUtility as DBA;

class VirtualHostFilenameCheck implements Check, InstanceDatabaseAccess, InstanceFsAccess
{

    protected string $vhostsConfigDirectory = '/etc/httpd/vhosts';
    protected DBA $dba;
    protected string $path;

    public function execute(): Result
    {

        $result = new SimpleValueResult();
        $result->setDescription('VHost Filename');

        try {

            $domainCheck = new DomainCheck();
            $domainCheck->setDba($this->getDba());
            $domain = $domainCheck->execute()->getValue();

            $vhostPath = $this->findVHostConfigurationFile($domain, $this->vhostsConfigDirectory);
            $result->setValue($vhostPath);
        } catch (Exception $e) {
            $result->setValue('N/A');
            $result->setComment($e->getMessage());
            $result->setFlag(Result::ERROR);
        }

        return $result;
    }

    /**
     * @throws Exception
     */
    protected function findVHostConfigurationFile($domain, $vhostsConfigDirectory)
    {
        if (empty($vhostsConfigDirectory) || !is_dir($vhostsConfigDirectory)) {
            throw new Exception("{$vhostsConfigDirectory} is not a directory.");
        }

        $command = "grep -Rlw {$domain} {$vhostsConfigDirectory}/*.conf";

        $output = array();
        $returnVar = null;
        exec($command, $output, $returnVar);

        if ($returnVar == 0) {
            $resultCount = count($output);
            if ($resultCount === 1) {
                list($vhostConfigurationFile) = $output;
                return $vhostConfigurationFile;
            } elseif ($resultCount === 0) {
                throw new Exception("No VirtualHost configuration containing {$domain} was found.");
            } else {
                throw new Exception("More than one configuration containing {$domain} was found.");
            }
        } else {
            throw new Exception("Error while locating the VirtualHost configuration containing {$domain}.");
        }
    }

    public function getDba(): DBA
    {
        return $this->dba;
    }

    public function getPath(): string
    {
        return $this->path;
    }

    public function setDba(DBA $dba)
    {
        $this->dba = $dba;
    }

    public function setPath(string $path)
    {
        $this->path = $path;
    }

}
<?php

namespace SeAT\check;

class WkpdfInstallationCheck extends UtilityPackageInstallationCheck
{

    protected string $description = 'wkpdf';

    protected function isInstalled(): bool
    {
        return $this->commandExists('wkhtmltopdf');
    }
}
<?php

namespace SeAT\check;

use SeAT\result\Result;

class PhpParametersCheck extends ParametersCheck
{

    protected array $parameters = [
        'short_open_tag' => ['=', 'Off', true, false],
        'error_reporting' => ['=', '22519', false, false],
        'memory_limit' => ['>=', '2048 MB', false, true],
        'max_execution_time' => ['range', '300,900', false, false],
        'max_input_vars' => ['range', '1500,4500', false, true],
        'mysql.connect_timeout' => ['range', '60,120', true, false],
        'precision' => ['>=', '14', false, false],
    ];

    final protected function findParamValue($param)
    {

        if ($param === 'max_execution_time') {
            $command = "php --ini | grep php.ini | grep Loaded | cut -d':' -f2 | sed 's/\s//g'";
            $output = [];
            $returnVar = null;

            exec($command, $output, $returnVar);

            if ($returnVar === 0) {
                $path = trim(implode('', $output));

                if (empty($path)) {
                    return Check::UNDETERMINED;
                }

                $primaryOutput = [];
                $primaryReturnVar = null;
                exec("grep max_execution_time {$path} | cut -d'=' -f2 | sed 's/\s//g'", $primaryOutput, $primaryReturnVar);

                if ($primaryReturnVar === 0) {
                    return implode('', $primaryOutput);
                } else {
                    return Check::UNDETERMINED;
                }
            } else {
                return Check::UNDETERMINED;
            }
        }

        return ini_get($param);
    }
}
<?php

namespace SeAT\check;

use SeAT\result\Result;
use SeAT\result\DatasetResult;
use SeAT\result\SimpleValueResult;

class PhpExtensionsCheck implements Check
{

    protected array $requiredExtensions = [
        'mcrypt' => true,
        'ldap' => true,
        'bcmath' => true,
        'mysqlnd' => true,
        'pdo_mysql' => true,
        'pear' => false, // TODO: Go for a fallback
        'mbstring' => true,
        'soap' => true,
        'gd' => true,
        'xml' => true,
        'apcu' => true,
        '*memcache' => false,
        '*ionCube' => true,
    ];

    public function execute(): Result
    {

        $loadedExtensions = get_loaded_extensions();

        $result = new DatasetResult();

        foreach ($this->requiredExtensions as $extension => $critical) {

            if (preg_match('/^\*/', $extension)) {
                $installed = $this->getInstalledStatusByPatternMatch($extension, $loadedExtensions);
                $extensionName = preg_replace('/^\*/', '', $extension);
            } else {
                $installed = in_array($extension, $loadedExtensions);
                $extensionName = $extension;
            }


            $item = new SimpleValueResult();
            $item->setDescription($extensionName);
            $item->setValue($installed ? 'Yes' : 'No');
            $item->setFlag($installed ? Result::OK : ($critical ? Result::ERROR : Result::WARNING));
            $item->setComment($installed ? '' : ($critical ? "{$extensionName} extension needs to be installed." : "It's good if {$extension} extension is installed."));

            $result->add($item);
        }

        return $result;
    }

    protected final function getInstalledStatusByPatternMatch($extensionPattern, array $loadedExtensions): bool
    {
        $pattern = preg_replace('/^\*/', '', $extensionPattern);
        foreach ($loadedExtensions as $loadedExtension) {
            if (preg_match("/{$pattern}/", $loadedExtension)) {
                return true;
            }
        }
        return false;
    }

}
<?php

namespace SeAT\check;

use SeAT\result\Result;
use SeAT\result\SimpleValueResult;

class InstallationDirectoryCheck extends InstanceFsCheck
{

    public function execute(): Result
    {
        $result = new SimpleValueResult();
        $result->setValue($this->getPath());
        $result->setDescription('Installation Directory');
        return $result;
    }

}
<?php

namespace SeAT\check;

use SeAT\util\InstanceConfigurationExtractorUtility as AppConfig;

interface InstanceConfigAccess
{

    public function getAppConfig(): AppConfig;

    public function setAppConfig(AppConfig $appConfig);
}
<?php

namespace SeAT\check;

use OrangeHRM\DevOps\utility\InstanceDatabaseAccessUtility as DBA;

interface InstanceDatabaseAccess
{
    public function getDba(): DBA;

    public function setDba(DBA $dba);
}
<?php

namespace SeAT\check;

interface InstanceFsAccess
{

    public function setPath(string $path);

    public function getPath(): string;
}
<?php

namespace SeAT\check;

use SeAT\result\Result;
use SeAT\result\SimpleValueResult;

class InstanceHostedDateCheck extends InstanceFsCheck
{

    public function execute(): Result
    {
        $checkFilePath = implode(DIRECTORY_SEPARATOR, [$this->getPath(), 'symfony', 'apps', 'orangehrm', 'config', 'security.yml']);
        $value = date('Y-m-d', filemtime($checkFilePath));

        $result = new SimpleValueResult();
        $result->setValue($value);
        $result->setDescription('Hosted / Upgraded  Date');

        return $result;
    }

}
<?php

namespace SeAT\check;

use SeAT\result\Result;
use SeAT\result\SimpleValueResult;
use Symfony\Component\Yaml\Yaml;

class InstanceVersionCheck extends InstanceFsCheck
{

    public function execute(): Result
    {

        $appConfigPath = implode(DIRECTORY_SEPARATOR, [$this->getPath(), 'symfony', 'apps', 'orangehrm', 'config', 'app.yml']);
        $appConfig = Yaml::parseFile($appConfigPath, Yaml::PARSE_OBJECT);

        $result = new SimpleValueResult();
        $result->setValue($appConfig['all']['version']);
        $result->setDescription('OrangeHRM Version');

        return $result;
    }

}
<?php

namespace SeAT\check;

use Exception;

class LeaveAccrualAndCarryForwardScheduleCheck extends DatabaseResultsCheck
{

    /**
     * @throws Exception
     */
    protected function retrieveData(): array
    {

        $scheduleTimeFields = null;
        if ($this->getDba()->columnExists('scheduled_time', 'ohrm_leave_accrual_time_schedule')) {
            $scheduleTimeFields = "CONCAT(s.scheduled_time, ' ', @@system_time_zone) AS `accrualTime`, 
            CONCAT(s.scheduled_time, ' ', @@system_time_zone) AS `cfTime`";
        } else {
            $scheduleTimeFields = "CONCAT(s.accrual_time, ' ', @@system_time_zone) AS `accrualTime`, 
            CONCAT(s.carry_forward_time, ' ', @@system_time_zone) AS `cfTime`";
        }

        $query = "
SELECT 
 c.cou_name AS `operationalCountry`, 
 IFNULL(l.name, 'All Locations / Default') AS `location`,
 {$scheduleTimeFields}
FROM `ohrm_leave_accrual_time_schedule` AS s
LEFT JOIN `hs_hr_country` AS c ON c.cou_code = s.country_code
LEFT JOIN `ohrm_location` AS l ON l.id = s.location_code;            
";

        $result = $this->getDba()->fetchAll($query);

        if (empty($result)) {
            $result = [
                [
                    'country' => 'None',
                    'location' => 'N/A',
                    'accrualTime' => 'N/A',
                    'cfTime' => 'N/A',
                ]
            ];
        }

        return $result;
    }

}
<?php

namespace SeAT\check;

use Exception;

class LeaveRequestDistributionCheck extends DatabaseResultsCheck
{

    /**
     * @throws Exception
     */
    protected function retrieveData(): array
    {

        $hasMultipleEmpLocations = $this->getDba()->tableExists('hs_hr_emp_locations');
        $join = ($hasMultipleEmpLocations) ? 'LEFT JOIN `hs_hr_emp_locations` AS el ON lr.`emp_number` = el.`emp_number` LEFT JOIN `ohrm_location` AS l ON l.`id` = el.`location_id` ' : 'LEFT JOIN `hs_hr_employee` AS e ON lr.`emp_number` = e.`emp_number` LEFT JOIN `ohrm_location` AS l ON l.`id` = e.`location_id` ';

        $query = "
SELECT    
  DATE_FORMAT(lr.`leave_start_date`, '%Y-%b') AS `month`,
  c.`cou_name` AS `country`,
  COUNT(*) AS `count`  
FROM `ohrm_leave_request` AS lr 
{$join}
LEFT JOIN `hs_hr_country` AS `c` ON l.`country_code` = c.`cou_code` 
WHERE lr.`id` IN (SELECT DISTINCT `leave_request_id` FROM `ohrm_leave` WHERE `date` > :startDate) 
GROUP BY c.`cou_name`, DATE_FORMAT(lr.`leave_start_date`, '%Y-%b') 
ORDER BY c.`cou_name`, `leave_start_date`
";
        return $this->getDba()->fetchAll($query, array(':startDate' => date('Y-m-d')));
    }

}
<?php

namespace SeAT\check;

use Exception;

class LoginDistributionCheck extends DatabaseResultsCheck
{

    /**
     * @throws Exception
     */
    protected function retrieveData(): array
    {
        $startDate = date('Y-m-d 00:00:00', strtotime('1 year ago'));
        $query = "
SELECT 
  DATE_FORMAT(`login_time`, '%Y-%b') AS `month`, 
  COUNT(*) AS `count` 
FROM `ohrm_login` 
WHERE `login_time` >= :startDate 
GROUP BY DATE_FORMAT(`login_time`, '%Y-%b') 
ORDER BY `login_time`;
";

        return $this->getDba()->fetchAll($query, [':startDate' => $startDate]);
    }

}
<?php

namespace SeAT\check;

use SeAT\result\Result;

class ActionPerformerCheck extends UserInputCheck
{

    protected string $prompt = 'Please enter your name:';
    protected string $description = 'Performed By';
    protected bool $tag = false;

    public function execute(): Result
    {
        $result = parent::execute();

        $systemUser = (PHP_OS_FAMILY === 'Windows') ? getenv('username') : posix_getpwuid(posix_geteuid())['name'];
        $formattedValue = ($this->mode === self::VERBOSE) ? "{$result->getValue()} ({$systemUser})" : $systemUser;
        $result->setValue($formattedValue);

        return $result;
    }

    protected function determineComment(string $value): string
    {
        return '';
    }

    protected function determineFlag(string $value): string
    {
        return Result::IGNORE;
    }

}
<?php

namespace SeAT\check;

use Exception;
use SeAT\result\AuditReport;
use SeAT\result\DatasetResult;
use SeAT\result\ResultCollectionFactory;
use SeAT\util\ConfigurationUtility;
use SeAT\util\CacheManagerUtility as Cache;
use SeAT\util\InstanceConfigurationExtractorUtility;
use SeAT\result\ResultCollection;
use SeAT\result\Result;
use SeAT\result\SimpleValueResult;

use OrangeHRM\DevOps\usageStats\HelpAndTrainingPortalAccessCheck;
use OrangeHRM\DevOps\usageStats\LicenseParametersCheck;
use OrangeHRM\DevOps\usageStats\ModuleSettingsAndUsageCheck;
use OrangeHRM\DevOps\usageStats\AnalyticDataParameterCollection;
use OrangeHRM\DevOps\utility\InstanceLicenseInfoRetrievalUtility;

class Audit
{

    protected array $checkCollections = [];
    protected ResultCollectionFactory $resultCollectionFactory;
    protected array $resultCounts = [];
    protected Cache $cache;

    public function getCheckCollections(): array
    {
        return $this->checkCollections;
    }

    public function setCheckCollections(array $checkCollections)
    {
        $this->checkCollections = $checkCollections;
    }

    public function getResultCollectionFactory(): ResultCollectionFactory
    {
        if (!isset($this->resultCollectionFactory)) {
            $this->resultCollectionFactory = new ResultCollectionFactory();
        }
        return $this->resultCollectionFactory;
    }

    public function setResultCollectionFactory(ResultCollectionFactory $resultCollectionFactory)
    {
        $this->resultCollectionFactory = $resultCollectionFactory;
    }

    public function getCache(): Cache
    {
        if (!isset($this->cache)) {
            $this->cache = new Cache();
        }
        return $this->cache;
    }

    public function setCache(Cache $cache)
    {
        $this->cache = $cache;
    }

    public function addCheckCollection($index, CheckCollection $checkCollection)
    {
        $this->checkCollections[$index] = $checkCollection;
    }

    /**
     * @throws Exception
     */
    public function run(array $dependencies): AuditReport
    {

        $this->resultCounts = [
            Result::OK => 0,
            Result::WARNING => 0,
            Result::ERROR => 0,
            Result::SKIPPED => 0,
        ];

        $this->loadChecks($dependencies);
        $auditReport = new AuditReport();
        if (isset($dependencies['path'])) {
            $statisticData = $this->getStatistics($dependencies);
            foreach ($statisticData['statistic_data'] as $stats) {
                foreach ($stats as $stat) {
                    $auditReport->addResultCollection($stat->getLabel(), $stat);
                }
            }
            $auditReport->setMachineReadableUsageData(base64_encode(gzcompress(json_encode($statisticData['machine_readable_analytics_data']), 9)));
        }
        foreach ($this->checkCollections as $index => $checkCollection) {

            if ($dependencies['runtime']['isDebugMode']) {
                echo "{$checkCollection->getResultLabel()}\n";
            }

            $resultCollection = $this->getResultCollectionFactory()->create($checkCollection->getResultType());
            $resultCollection->setLabel($checkCollection->getResultLabel());
            $resultCollection->setHeaders($checkCollection->getResultHeaders());
            foreach ($checkCollection as $check) {
                $result = $check->execute();
                $flag = $result->getFlag();

                if (!empty($flag) && $flag !== Result::IGNORE) {
                    $this->resultCounts[$flag]++;
                }
                $resultCollection->add($result);
            }
            $auditReport->addResultCollection($index, $resultCollection);
        }

        $auditReport->addResultCollection('Summary', $this->composeResultSummary());

        return $auditReport;
    }

    /**
     * @throws Exception
     */
    protected function loadChecks($dependencies): void
    {

        $checksSet = isset($dependencies['path']) ? 'full_checks_set' : 'initial_checks_set';
        $checks = $this->getCache()->load($checksSet);
        foreach ($checks as $section => $definitions) {
            $checkCollection = new CheckCollection();
            $checkCollection->setResultType($definitions['resultType']);
            $checkCollection->setResultLabel($section);
            $checkCollection->setResultHeaders($definitions['headers'] ?? []);

            foreach ($definitions['checks'] as $name => $checkId) {
                $className = "\\SeAT\\check\\{$checkId}";

                if (!class_exists($className)) {
                    echo "\n\t > - $className does not exists... \n\n";
                    continue;
                }

                $check = new $className;

                if ($check instanceof InstanceDatabaseAccess) {
                    $check->setDba($dependencies['dba']);
                }

                if ($check instanceof InstanceFsAccess) {
                    $check->setPath($dependencies['path']);
                }

                if ($check instanceof InstanceConfigAccess) {
                    $check->setAppConfig($dependencies['appConfig']);
                }

                if ($check instanceof HasUserInput) {
                    $check->setMode($dependencies['runtime']['isQuiet'] ? Check::QUIET : Check::VERBOSE);
                }

                $checkCollection->add($check);
            }


            $this->checkCollections[] = $checkCollection;
        }
    }

    protected function composeResultSummary(): ResultCollection
    {
        $labelMapping = [
            Result::OK => 'Passed',
            Result::WARNING => 'Warnings',
            Result::ERROR => 'Failures / Errors',
            Result::SKIPPED => 'Skipped',
        ];

        $summary = new ResultCollection();

        $result = new SimpleValueResult();
        $result->setDescription('Total No. of Checks');
        $result->setValue(array_sum($this->resultCounts));

        $summary->add($result);
        $summary->setType('composite-table-segment');
        $summary->setLabel('Summary');

        foreach ($this->resultCounts as $state => $count) {
            $result = new SimpleValueResult();
            $result->setDescription($labelMapping[$state]);
            $result->setValue($count);

            $summary->add($result);
        }

        return $summary;
    }

    protected function getStatistics($dependencies): array
    {
        if (!isset($dependencies['path'])) {
            return [];
        }

        $params = new AnalyticDataParameterCollection();
        $params->setInstallationPath($dependencies['path']);
        $params->setBacktrack(12);
        $licenseInfoRetrievalUtility = new InstanceLicenseInfoRetrievalUtility();
        $licenseInfoRetrievalUtility->setInstallationDirectory($dependencies['path']);
        $checks = [
            new LicenseParametersCheck($params),
            new UsageStatistics($params),
            new HelpAndTrainingPortalAccessCheck($params),
            new ModuleSettingsAndUsageCheck($params)
        ];

        $results = [];

        foreach ($checks as $check) {
            $check->setInstanceDatabaseAccessUtility($dependencies['dba']);
            $check->setInstanceLicenseInfoRetrievalUtility($licenseInfoRetrievalUtility);
            $results[] = $this->buildStatisticsResultCollection($check->getResult());
        }
        $machineReadableAnalyticsData = $checks[1]->getAnalyticsData();
        return [
            'statistic_data' => $results,
            'machine_readable_analytics_data' => $machineReadableAnalyticsData,
        ];
    }

    protected function buildStatisticsResultCollection($rawResult): array
    {
        $rawResultArray = json_decode(json_encode($rawResult), TRUE);
        $resultCollections = array();

        $nonArrayValues = array();

        foreach ($rawResultArray as $key => $value) {
            if (!is_array($value)) {
                $nonArrayValues[] = array($key => $value);
                continue;
            }
            $resultCollections[] = $this->getResultCollectionForStats($key, $value);
        }

        if (!empty($nonArrayValues)) {
            $headers = array('Check', 'Value');
            $result = array();
            foreach ($nonArrayValues as $value) {
                $key = array_keys($value)[0];
                $keyFormatted = ucwords(
                    implode(
                        ' ',
                        preg_split('/(?=[A-Z])/', $key)
                    )
                );
                $result[] = array('check' => $keyFormatted, 'value' => $value[$key]);
            }
            $label = (!empty($nonArrayValues[0]['licenseStatus'])) ? 'licenceInformation' : 'GEN';
            $resultCollections[] = $this->getResultCollectionForStats($label, $result, $headers);
        }

        return $resultCollections;
    }

    protected function getResultCollectionForStats(string $label, array $value, array $headers = null): ResultCollection
    {
        $resultCollection = $this->getResultCollectionFactory()->create('stats');
        $resultCollection->setLabel($label);
        $result = new DatasetResult();
        $result->add($value);
        if ($headers === null) {
            $headers = array();
            if (!empty($value)) {
                foreach ($value[0] as $k => $v)
                    $headers[] = $k;
            }
        }
        $resultCollection->setHeaders($headers);
        $resultCollection->add($result);
        return $resultCollection;
    }

}
<?php

namespace SeAT\check;

use SeAT\result\Result;
use SeAT\result\SimpleValueResult;
use SeAT\util\ValueFormatter;
use League\CLImate\CLImate;

class AutomaticUpdatesCheck implements Check, HasUserInput
{

    protected ValueFormatter $valueFormatter;
    protected CLImate $cli;
    protected string $mode = self::VERBOSE;

    public function __construct()
    {
        $this->init();
    }

    public function setMode($mode)
    {
        $this->mode = $mode;
    }

    protected function init()
    {
        $this->cli = new CLImate();
    }

    public function getValueFormatter(): ValueFormatter
    {
        if (!isset($this->valueFormatter)) {
            $this->valueFormatter = new ValueFormatter();
        }
        return $this->valueFormatter;
    }

    public function setValueFormatter(ValueFormatter $valueFormatter)
    {
        $this->valueFormatter = $valueFormatter;
    }

    public function execute(): Result
    {

        $result = new SimpleValueResult();
        $result->setDescription('Automatic Updates Enabled?');

        if (is_file('/etc/yum/yum-cron.conf')) {
            $isAutoUpdatesEnabled = preg_match('/apply_updates = yes/', file_get_contents('/etc/yum/yum-cron.conf'));
            $result->setValue($this->getValueFormatter()->boolToYesNo($isAutoUpdatesEnabled));
            $result->setFlag($isAutoUpdatesEnabled ? Result::OK : Result::WARNING);
            $result->setComment($isAutoUpdatesEnabled ? '' : "It's recommended to enable automatic updates");
        } else {
            if ($this->mode === self::VERBOSE) {

                $this->cli->out("Couldn't determine whether automatic updates are enabled. Please enter your response manually.");

                $input = $this->cli->input("Are the system's automatic updates enabled?");
                $input->accept(['y', 'n'], true);
                $response = $input->prompt();
                $isAutoUpdatesEnabled = ($response === 'y');

                $result->setValue($this->getValueFormatter()->boolToYesNo($isAutoUpdatesEnabled) . " (Based on user's response)");
                $result->setFlag($isAutoUpdatesEnabled ? Result::OK : Result::WARNING);
                $result->setComment($isAutoUpdatesEnabled ? '' : "It's recommended to enable automatic updates");
            } else {
                $result->setValue(self::UNDETERMINED);
                $result->setFlag(Result::SKIPPED);
                $result->setComment("Couldn't determine whether automatic updates are enabled, and user prompt was skipped in the quiet mode. It's recommended to enable automatic updates, if it's not enabled.");
            }
        }

        return $result;
    }

}
<?php

namespace SeAT\check;

use Exception;

class MostRecentLoginDetailsCheck extends DatabaseResultsCheck
{

    /**
     * @throws Exception
     */
    protected function retrieveData(): array
    {
        $query = "
SELECT 
  CONCAT(`login_time`, ' ', @@system_time_zone) AS `time`, 
  `user_role_name` AS `userRole` 
FROM `ohrm_login` 
ORDER BY `id` DESC 
LIMIT 1;
";
        $result = $this->getDba()->fetchAll($query);

        if (empty($result)) {
            return [
                ['criterion' => 'Date and Time', 'value' => 'N/A'],
                ['criterion' => 'User Role', 'value' => 'N/A'],
            ];
        } else {
            return [
                ['criterion' => 'Date and Time', 'value' => $result[0]['time']],
                ['criterion' => 'User Role', 'value' => $result[0]['userRole']],
            ];
        }
    }

}
<?php

namespace SeAT\check;

use SeAT\result\Result;
use SeAT\result\SimpleValueResult;

class MultiplePhpConfigDiffCheck implements Check
{

    public function execute(): Result
    {
        $result = new SimpleValueResult();

        $result->setDescription('Settings of php.ini for CLI and Apache are different?');
        $result->setValue('No');
        $result->setFlag(Result::OK);

        return $result;
    }

}
<?php

namespace SeAT\check;

use SeAT\result\Result;
use SeAT\result\SimpleValueResult;

class MultiplePhpConfigFileCheck implements Check
{

    public function execute(): Result
    {
        $result = new SimpleValueResult();

        $result->setDescription('Do separate php.ini files exist for CLI and Apache?');
        $result->setValue('No');
        $result->setFlag(Result::OK);

        return $result;
    }

}
<?php

namespace SeAT\check;

use Exception;

class NavigationTrackingCheck extends DatabaseResultsCheck
{

    /**
     * @throws Exception
     */
    protected function retrieveData(): array
    {

        if ($this->getDba()->tableExists('ohrm_external_navigation_log')) {

            $query = "SELECT 'Apply Leave' as `screen`, count(DISTINCT user) as `count`  FROM `ohrm_external_navigation_log` WHERE to_url = '/leave/apply'
UNION
SELECT 'PIM Reports' as `screen`, count(DISTINCT user) as `count`  FROM `ohrm_external_navigation_log` WHERE to_url = '/pim/reports'
UNION
SELECT 'News List' as `screen`, count(DISTINCT user) as `count`  FROM `ohrm_external_navigation_log` WHERE to_url = '/news/viewNewsList'
UNION
SELECT 'Disciplinary Case List' as `screen`, count(DISTINCT user) as `count`  FROM `ohrm_external_navigation_log` WHERE to_url = '/discipline/viewDisciplinaryCases'
UNION
SELECT 'Asset List' as `screen`, count(DISTINCT user) as `count`  FROM `ohrm_external_navigation_log` WHERE to_url LIKE '/asset/viewAssets%'
UNION
SELECT 'Corporate Directory' as `screen`, count(DISTINCT user) as `count`  FROM `ohrm_external_navigation_log` WHERE to_url LIKE '/directory/viewDirectory%'
UNION
SELECT 'Buzz' as `screen`, count(DISTINCT user) as `count`  FROM `ohrm_external_navigation_log` WHERE to_url = '/buzz/viewBuzz'
UNION
SELECT 'View Appraisal' as `screen`, count(DISTINCT user) as `count`  FROM `ohrm_external_navigation_log` WHERE to_url LIKE '/performance/defaultView/appraisalId%'
UNION
SELECT 'View Vacancies' as `screen`, count(DISTINCT user) as `count`  FROM `ohrm_external_navigation_log` WHERE to_url LIKE '/recruitment/viewJobVacancy%'
";

            return $this->getDba()->fetchAll($query);
        } else {
            return [];
        }
    }

}
<?php

namespace SeAT\check;

use SeAT\result\Result;
use SeAT\result\SimpleValueResult;

class NotImplementedCheck implements Check
{

    public function execute(): Result
    {
        $result = new SimpleValueResult();

        $result->setDescription('Not implemented Check');
        $result->setValue('N/A');

        return $result;
    }

}
<?php

namespace SeAT\check;

use Exception;
use OrangeHRM\DevOps\utility\InstanceDatabaseAccessUtility as DBA;
use SeAT\result\Result;

class DataDirInDedicatedPartitionCheck extends InDedicatedPartitionCheck implements InstanceDatabaseAccess
{

    protected string $path = '/var/lib/mysql';
    protected string $description = 'Database data directory in a separate directory?';
    protected DBA $dba;

    public function getDba(): DBA
    {
        return $this->dba;
    }

    public function setDba(DBA $dba)
    {
        $this->dba = $dba;
    }

    /**
     * @throws Exception
     */
    public function execute(): Result
    {
        $this->path = $this->getDba()->fetchColumn('SELECT @@datadir;');
        return parent::execute();
    }

}
<?php

namespace SeAT\check;

use Exception;
use SeAT\result\Result;
use SeAT\result\SimpleValueResult;
use OrangeHRM\DevOps\utility\InstanceDatabaseAccessUtility as DBA;

class DatabaseDefaultStorageEngineCheck implements Check, InstanceDatabaseAccess
{

    protected DBA $dba;

    /**
     * @throws Exception
     */
    public function execute(): Result
    {

        $dbResult = $this->getDba()->fetchAll("SHOW VARIABLES LIKE 'default_storage_engine';");

        $value = !empty($dbResult) && isset($dbResult[0]['Value']) ? $dbResult[0]['Value'] : Check::UNDETERMINED;
        $isInnoDb = ($value === 'InnoDB');

        $result = new SimpleValueResult();
        $result->setDescription('Default Storage Engine');
        $result->setValue($value);
        $result->setFlag($isInnoDb ? Result::OK : Result::ERROR);
        $result->setComment($isInnoDb ? '' : 'Default storage engine should be InnoDB');

        return $result;
    }

    public function getDba(): DBA
    {
        return $this->dba;
    }

    public function setDba(DBA $dba)
    {
        $this->dba = $dba;
    }

}
<?php

namespace SeAT\check;

use Exception;
use OrangeHRM\DevOps\utility\InstanceDatabaseAccessUtility as DBA;

class DatabaseParametersCheck extends ParametersCheck implements InstanceDatabaseAccess
{

    protected DBA $dba;
    protected array $parameters = [
        'event_scheduler' => ['=', 'ON', false, false],
        'innodb_buffer_pool_size' => ['>=', 2e+9, false, false],
        'innodb_log_file_size' => ['>=', 1e+9, false, false],
        'innodb_log_buffer_size' => ['>=', 8e+6, false, false],
        'innodb_flush_log_at_trx_commit' => ['=', '1', false, false],
        'innodb_lock_wait_timeout' => ['range', '30,60', false, false],
        'max_allowed_packet' => ['range', '64 MB,512 MB', false, true],
        'skip_name_resolve' => ['=', 'ON', false, false],
        'connect_timeout' => ['range', '10,120', false, true],
        'net_write_timeout' => ['range', '60,600', false, false],
        'sql_mode' => ['=', '', false, true],
    ];

    public function getDba(): DBA
    {
        return $this->dba;
    }

    public function setDba(DBA $dba)
    {
        $this->dba = $dba;
    }

    /**
     * @throws Exception
     */
    protected final function findParamValue($param)
    {
        $resultSet = $this->getDba()->fetchAll("SHOW VARIABLES LIKE '{$param}';");
        return count($resultSet) > 0 ? $resultSet[0]['Value'] : Check::UNDETERMINED;
    }

}
<?php

namespace SeAT\check;

use SeAT\result\Result;
use SeAT\result\DatasetResult;
use OrangeHRM\DevOps\utility\InstanceDatabaseAccessUtility as DBA;

abstract class DatabaseResultsCheck implements Check, InstanceDatabaseAccess
{

    protected DBA $dba;

    public function getDba(): DBA
    {
        return $this->dba;
    }

    public function setDba(DBA $dba)
    {
        $this->dba = $dba;
    }

    public function execute(): Result
    {
        $result = new DatasetResult();
        $result->setCollection($this->retrieveData());
        return $result;
    }

    abstract protected function retrieveData(): array;
}
<?php

namespace SeAT\check;

use SeAT\result\Result;
use SeAT\result\SimpleValueResult;

class PhpSapiCheck implements Check
{

    public function execute(): Result
    {
        $result = new SimpleValueResult();

        $result->setDescription('Is PHP loaded as an Apache module?');
        $result->setValue('Yes');
        $result->setFlag(Result::OK);

        return $result;
    }

}
<?php

namespace SeAT\check;

use Exception;
use SeAT\result\Result;
use SeAT\result\SimpleValueResult;
use OrangeHRM\DevOps\utility\InstanceDatabaseAccessUtility as DBA;
use SeAT\util\InstanceConfigurationExtractorUtility as AppConfig;
use SeAT\util\ValueFormatter;

class DatabaseSizeCheck extends OsSpecificCliValueCheck implements InstanceDatabaseAccess, InstanceConfigAccess
{

    protected DBA $dba;
    protected AppConfig $appConfig;
    protected string $dataDir;
    protected string $dbName;
    protected ValueFormatter $valueFormatter;
    protected string $description = 'Database Size';

    /**
     * @throws Exception
     */
    public function execute(): Result
    {
        $this->dataDir = $this->getDba()->fetchColumn('SELECT @@datadir;');
        $this->dbName = $this->getDba()->fetchColumn('SELECT DATABASE();');

        $parentResult = parent::execute();

        $sizeInDisk = (int)$parentResult->getValue();
        $calculatedSize = (int)$this->getDba()->fetchColumn('SELECT SUM(data_length + index_length) FROM information_schema.tables WHERE table_schema = DATABASE() GROUP BY table_schema');

        $size = max([$sizeInDisk, $calculatedSize]);

        if ($size > (2 * 1024 * 1024 * 1024)) {
            $flag = Result::WARNING;
            $comment = 'Database size is higher than 2 GB';
        } else {
            $flag = Result::OK;
            $comment = '';
        }

        $result = new SimpleValueResult();
        $result->setValue($this->getValueFormatter()->sizeToHumanReadableFormat($size));
        $result->setDescription('Database Size');
        $result->setFlag($flag);
        $result->setComment($comment);

        return $result;
    }

    public function getDba(): DBA
    {
        return $this->dba;
    }

    public function setDba(DBA $dba)
    {
        $this->dba = $dba;
    }

    public function getAppConfig(): AppConfig
    {
        return $this->appConfig;
    }

    public function setAppConfig(AppConfig $appConfig)
    {
        $this->appConfig = $appConfig;
    }

    public function getValueFormatter(): ValueFormatter
    {
        if (!isset($this->valueFormatter)) {
            $this->valueFormatter = new ValueFormatter();
        }
        return $this->valueFormatter;
    }

    public function setValueFormatter(ValueFormatter $valueFormatter)
    {
        $this->valueFormatter = $valueFormatter;
    }

    protected function getCommandForLinux(): string
    {
        $dbDirectory = $this->dataDir . DIRECTORY_SEPARATOR . $this->dbName;
        if (!is_dir($dbDirectory)) {
            return 'echo 0';
        }

        return "du -s " . $dbDirectory;
    }

    protected function getCommandForUbuntu(): string
    {
        return $this->getCommandForLinux();
    }

    /**
     * @throws Exception
     */
    protected function getCommandForOtherOs(): string
    {
        throw new Exception("This check is not supported for operating systems other than Linux and Windows.");
    }

    protected function getCommandForWindows(): string
    {
        return 'echo 0';
    }

    protected function determineFlag(string $value): string
    {
        return Result::OK;
    }
}
<?php

namespace SeAT\check;

use SeAT\result\Result;
use SeAT\result\SimpleValueResult;

class PhpTimezoneCheck implements Check
{

    public function execute(): Result
    {
        $result = new SimpleValueResult();
        $result->setDescription('PHP Timezone');
        $result->setValue(date('T P'));
        return $result;
    }

}
<?php

namespace SeAT\check;

use Exception;
use OrangeHRM\DevOps\utility\InstanceDatabaseAccessUtility as DBA;

class DatabaseTimeCheck extends TimeCheck implements InstanceDatabaseAccess
{

    protected string $description = 'MariaDB / MySQL Time';
    protected DBA $dba;

    public function getDba(): DBA
    {
        return $this->dba;
    }

    public function setDba(DBA $dba)
    {
        $this->dba = $dba;
    }

    protected function getDependencies(): array
    {
        return [
            'Hardware Clock Time' => new HardwareClockTimeCheck(),
            'Operating System Time' => new OperatingSystemTimeCheck(),
        ];
    }

    /**
     * @throws Exception
     */
    public function getValue(): string
    {
        return $this->getDba()->fetchColumn("SELECT DATE_FORMAT(CURRENT_TIMESTAMP, '%Y-%m-%d %H:%i');");
    }

}
<?php

namespace SeAT\check;

use Exception;

class PimActivityDistributionCheck extends DatabaseResultsCheck
{

    /**
     * @throws Exception
     */
    protected function retrieveData(): array
    {
        $startDate = date('Y-m-d 00:00:00', strtotime('1 year ago'));
        $viewName = $this->getDba()->fetchColumn("SHOW TABLES LIKE 'ohrm_audittrail_all%'");

        $query = "
SELECT 
  DATE_FORMAT(`action_time`, '%Y-%b') AS `month`, 
  COUNT(*) AS `count` 
FROM  `{$viewName}`
WHERE `action_time` >= :startDate 
GROUP BY DATE_FORMAT(`action_time`, '%Y-%b') 
ORDER BY `action_time`;
";
        return $this->getDba()->fetchAll($query, array(':startDate' => $startDate));
    }

}
<?php

namespace SeAT\check;

use Exception;
use SeAT\result\Result;
use OrangeHRM\DevOps\utility\InstanceDatabaseAccessUtility as DBA;
use SeAT\result\SimpleValueResult;

abstract class DatabaseValueCheck implements Check, InstanceDatabaseAccess
{

    protected string $table;
    protected string $field;
    protected string $condition = '1';
    protected array $params = [];
    protected DBA $dba;
    protected string $description;

    public function getDba(): DBA
    {
        return $this->dba;
    }

    public function setDba(DBA $dba)
    {
        $this->dba = $dba;
    }

    /**
     * @throws Exception
     */
    public function execute(): Result
    {
        $query = "SELECT `{$this->field}` FROM `{$this->table}` WHERE {$this->condition} LIMIT 1";

        $value = $this->getDba()->fetchColumn($query, $this->params);

        $result = new SimpleValueResult();
        $result->setValue($value);
        $result->setDescription($this->description);

        return $result;
    }

}
<?php

namespace SeAT\check;

use Exception;
use SeAT\result\Result;
use OrangeHRM\DevOps\utility\InstanceDatabaseAccessUtility as DBA;

class DatabaseVersionCheck extends MiddlewareVersionCheck implements InstanceDatabaseAccess
{

    protected DBA $dba;
    protected string $recommended = '10.4.22';
    protected string $min = '10.4.1';
    protected string $max = '10.4.24';
    protected string $description = 'MySQL / MariaDB Version';

    /**
     * @throws Exception
     */
    public function execute(): Result
    {
        $resultSet = $this->getDba()->fetchAll("SHOW VARIABLES LIKE 'version';");
        $currentVersion = count($resultSet) > 0 ? $resultSet[0]['Value'] : Check::UNDETERMINED;
        $cleansedVersionString = preg_match('/-/', $currentVersion) ? substr($currentVersion, 0, strpos($currentVersion, '-')) : $currentVersion;
        return $this->prepareResult($currentVersion, $cleansedVersionString);
    }

    public function getDba(): DBA
    {
        return $this->dba;
    }

    public function setDba(DBA $dba)
    {
        $this->dba = $dba;
    }

}
<?php

namespace SeAT\check;

class DirectoryPermissionsCheck extends FsPermissionsCheck
{

    protected array $nodes = [
        'lib/confs' => 775,
        'symfony/cache/' => 775,
        'symfony/config/' => 775,
        'symfony/web/' => 775,
        'symfony/web/themes' => 775,
    ];
    protected string $identifier = 'd';

}
<?php

namespace SeAT\check;

use SeAT\result\Result;
use SeAT\result\SimpleValueResult;
use SeAT\result\DataItemFactory;
use SeAT\result\DatasetResult;

class DiskUsageCheck implements Check
{

    const FREE_DISK_SPACE_SAFETY_THRESHOLD = 80;
    const FREE_DISK_SPACE_CRITICAL_THRESHOLD = 95;
    const FREE_INODE_SAFETY_THRESHOLD = 80;
    const FREE_INODE_CRITICAL_THRESHOLD = 95;
    const WARNING_PENALTY = 1;
    const CRITICAL_PENALTY = 2;

    protected DataItemFactory $dataItemFactory;

    public function getDataItemFactory(): DataItemFactory
    {
        if (!isset($this->dataItemFactory)) {
            $this->dataItemFactory = new DataItemFactory();
        }
        return $this->dataItemFactory;
    }

    public function setDataItemFactory(DataItemFactory $dataItemFactory)
    {
        $this->dataItemFactory = $dataItemFactory;
    }

    public function execute(): Result
    {
        $result = new DatasetResult();

        $diskSpaceOutput = [];
        $diskSpaceReturnVar = null;
        exec("df -lh | grep -v tmpfs | tail -n +2", $diskSpaceOutput, $diskSpaceReturnVar);

        $inodeUsageOutput = [];
        $inodeUsageReturnVar = null;
        exec("df -li | grep -v tmpfs | tail -n +2", $inodeUsageOutput, $inodeUsageReturnVar);

        if ($diskSpaceReturnVar === 0) {
            foreach ($diskSpaceOutput as $index => $outputLine) {
                list($fileSystem, $size, $usedSize, $freeDiskSize, $diskUsagePercentage, $mountPoint) = preg_split('/\s+/', $outputLine, 6);

                $inodeUsagePercentage = '0%';
                if (isset($inodeUsageOutput[$index])) {
                    $inodeUsageStats = preg_split('/\s+/', $inodeUsageOutput[$index], 6);
                    if (isset($inodeUsageStats[4])) {
                        $inodeUsagePercentage = $inodeUsageStats[4];
                    }
                }
                $result->add($this->getDataItemFactory()->generate(
                    "{$mountPoint} <br /> {$fileSystem}",
                    "{$size} / {$freeDiskSize} / {$inodeUsagePercentage}",
                    $this->determineFlag((float)$diskUsagePercentage, (float)$inodeUsagePercentage),
                    $this->determineComment((float)$diskUsagePercentage, (float)$inodeUsagePercentage)
                ));
            }
        }

        return $result;
    }

    protected function determineFlag($diskUsagePercentage, $inodeUsagePercentage): string
    {
        $noOfStatusesPerParam = 3;
        $noOfParams = 2;
        $maxScore = pow($noOfParams, $noOfStatusesPerParam);

        $score = $maxScore;
        if ($diskUsagePercentage > self::FREE_DISK_SPACE_CRITICAL_THRESHOLD) {
            $score -= self::CRITICAL_PENALTY;
        } elseif ($diskUsagePercentage > self::FREE_DISK_SPACE_SAFETY_THRESHOLD) {
            $score -= self::WARNING_PENALTY;
        }

        if ($inodeUsagePercentage > self::FREE_INODE_CRITICAL_THRESHOLD) {
            $score -= self::CRITICAL_PENALTY;
        } elseif ($inodeUsagePercentage > self::FREE_INODE_SAFETY_THRESHOLD) {
            $score -= self::WARNING_PENALTY;
        }

        if ($score === $maxScore) {
            return Result::OK;
        } elseif ($score <= $maxScore - self::CRITICAL_PENALTY) {
            return Result::ERROR;
        } else {
            return Result::WARNING;
        }
    }

    protected function determineComment($diskUsagePercentage, $inodeUsagePercentage): string
    {
        $comments = [];

        if ($diskUsagePercentage > self::FREE_DISK_SPACE_CRITICAL_THRESHOLD) {
            $comments[] = 'Free disk space is critically low';
        } elseif ($diskUsagePercentage > self::FREE_DISK_SPACE_SAFETY_THRESHOLD) {
            $comments[] = 'Free disk space is lower than the safety margin';
        }

        if ($inodeUsagePercentage > self::FREE_INODE_CRITICAL_THRESHOLD) {
            $comments[] = 'Free inode percentage is critically low';
        } elseif ($inodeUsagePercentage > self::FREE_INODE_SAFETY_THRESHOLD) {
            $comments[] = 'Free inode percentage is lower than the safety margin';
        }

        return implode(';', $comments);
    }

}
<?php

namespace SeAT\check;

use Exception;
use SeAT\result\Result;
use SeAT\result\DatasetResult;
use SeAT\util\ValueFormatter;
use SeAT\check\DatabaseSizeCheck;
use SeAT\util\InstanceConfigurationExtractorUtility as AppConfig;
use OrangeHRM\DevOps\utility\InstanceDatabaseAccessUtility as DBA;

class DiskUtilizationCheck implements Check, InstanceFsAccess, InstanceConfigAccess, InstanceDatabaseAccess
{

    const DB_SIZE_SAFETY_THRESHOLD = '2 GB';
    const DB_SIZE_CRITICAL_THRESHOLD = '6 GB';
    const LOG_DIR_SIZE_SAFETY_THRESHOLD = '50 MB';
    const LOG_DIR_SIZE_CRITICAL_THRESHOLD = '200 MB';

    protected string $path;
    protected ValueFormatter $valueFormatter;
    protected DatabaseSizeCheck $databaseSizeCheck;
    protected AppConfig $appConfig;
    protected DBA $dba;

    public function getPath(): string
    {
        return $this->path;
    }

    public function setPath(string $path)
    {
        $this->path = $path;
    }

    public function getAppConfig(): AppConfig
    {
        return $this->appConfig;
    }

    public function setAppConfig(AppConfig $appConfig)
    {
        $this->appConfig = $appConfig;
    }

    public function getDba(): DBA
    {
        return $this->dba;
    }

    public function setDba(DBA $dba)
    {
        $this->dba = $dba;
    }

    public function getDatabaseSizeCheck(): DatabaseSizeCheck
    {
        if (!isset($this->databaseSizeCheck)) {
            $this->databaseSizeCheck = new DatabaseSizeCheck();
            $this->databaseSizeCheck->setAppConfig($this->getAppConfig());
            $this->databaseSizeCheck->setDba($this->getDba());
        }
        return $this->databaseSizeCheck;
    }

    public function setDatabaseSizeCheck(DatabaseSizeCheck $databaseSizeCheck)
    {
        $this->databaseSizeCheck = $databaseSizeCheck;
    }

    public function getValueFormatter(): ValueFormatter
    {
        if (!isset($this->valueFormatter)) {
            $this->valueFormatter = new ValueFormatter();
        }
        return $this->valueFormatter;
    }

    public function setValueFormatter(ValueFormatter $valueFormatter)
    {
        $this->valueFormatter = $valueFormatter;
    }

    /**
     * @throws Exception
     */
    public function execute(): Result
    {
        $result = new DatasetResult();

        $sizeOfFullCodebase = $this->findDiskUtilization($this->getPath());
        $sizeOfLogs = $this->findDiskUtilization(implode(DIRECTORY_SEPARATOR, [$this->getPath(), 'symfony', 'log']));
        $sizeOfCode = $sizeOfFullCodebase - $sizeOfLogs;
        $dbSize = $this->getValueFormatter()->humanReadableFormatToSize($this->getDatabaseSizeCheck()->execute()->getValue());

        $result->add([
            'applicationComponent' => 'Code',
            'diskUtilization' => $this->getValueFormatter()->sizeToHumanReadableFormat($sizeOfCode),
            'flag' => Result::OK,
            'comments' => '',
        ]);
        $result->add([
            'applicationComponent' => 'Database',
            'diskUtilization' => $this->getValueFormatter()->sizeToHumanReadableFormat($dbSize),
            'flag' => $this->determineFlag($dbSize,
                $this->getValueFormatter()->humanReadableFormatToSize(self::DB_SIZE_SAFETY_THRESHOLD),
                $this->getValueFormatter()->humanReadableFormatToSize(self::DB_SIZE_CRITICAL_THRESHOLD)),
            'comments' => $this->determineComment('Instance database utilization',
                $dbSize,
                $this->getValueFormatter()->humanReadableFormatToSize(self::DB_SIZE_SAFETY_THRESHOLD),
                $this->getValueFormatter()->humanReadableFormatToSize(self::DB_SIZE_CRITICAL_THRESHOLD)),
        ]);
        $result->add([
            'applicationComponent' => 'Logs',
            'diskUtilization' => $this->getValueFormatter()->sizeToHumanReadableFormat($sizeOfLogs),
            'flag' => $this->determineFlag($sizeOfLogs,
                $this->getValueFormatter()->humanReadableFormatToSize(self::LOG_DIR_SIZE_SAFETY_THRESHOLD),
                $this->getValueFormatter()->humanReadableFormatToSize(self::LOG_DIR_SIZE_CRITICAL_THRESHOLD)),
            'comments' => $this->determineComment('Log directory disk utilization',
                $sizeOfLogs,
                $this->getValueFormatter()->humanReadableFormatToSize(self::LOG_DIR_SIZE_SAFETY_THRESHOLD),
                $this->getValueFormatter()->humanReadableFormatToSize(self::LOG_DIR_SIZE_CRITICAL_THRESHOLD)),
        ]);

        return $result;
    }

    /**
     * @throws Exception
     */
    protected function findDiskUtilization($path)
    {

        if (!file_exists($path)) {
            return 0;
        }

        $output = [];
        $returnVar = null;
        exec("du -hs {$path}", $output, $returnVar);

        if ($returnVar === 0) {
            list($size) = preg_split('/\s{1,}/', $output[0]);
            return ((float)$size) * 1024;
        } else {
            if (PHP_OS_FAMILY === 'Windows') {
                return 0;
            } else {
                throw new Exception("Error occurred while determining disk utilization of {$path}.");
            }
        }
    }

    protected function determineFlag(float $size, float $safetyThreshold, float $criticalThreshold): string
    {
        if ($size > $criticalThreshold) {
            return Result::ERROR;
        } elseif ($size > $safetyThreshold) {
            return Result::WARNING;
        } else {
            return Result::OK;
        }
    }

    protected function determineComment(string $component, float $size, float $safetyThreshold, float $criticalThreshold): string
    {
        if ($size > $criticalThreshold) {
            return "{$component} is critically high";
        } elseif ($size > $safetyThreshold) {
            return "{$component} has exceeded the safety threshold";
        } else {
            return '';
        }
    }

}
<?php

namespace SeAT\check;

use Exception;
use SeAT\result\Result;
use SeAT\result\SimpleValueResult;

class SsdCheck implements Check
{

    /**
     * @throws Exception
     */
    public function execute(): Result
    {

        $result = new SimpleValueResult();

        $result->setDescription('Disk Drive');

        if (is_file('/sys/block/sda/queue/rotational') && is_readable('/sys/block/sda/queue/rotational')) {

            $isSolidStateDrive = ((int)$this->runCliCommand("cat /sys/block/sda/queue/rotational") === 0);

            $result->setValue($isSolidStateDrive ? 'SSD' : 'HDD');
            $result->setFlag($isSolidStateDrive ? Result::OK : Result::WARNING);
            $result->setComment($isSolidStateDrive ? "It appears that your disk drives "
                . "are Solid State Drives (SSDs), which are recommended for OrangeHRM "
                . "installations." : "It appears that your disks are not Solid State Drives (SSDs). "
                . "But, if your disk is a logical device emulated by hardware (like a RAID controller), "
                . "this may not be correct. Please verify manually. It's recommended to have SSDs "
                . "since they perform better, giving your better performance in OrangeHRM.");
        } else {
            $result->setValue('Undertmined');
            $result->setFlag(Result::WARNING);
            $result->setComment("Cannot determine the type of the disk drive. Please check manually.");
        }

        return $result;
    }

    /**
     *
     * @throws Exception
     * @todo Duplicated logic
     */
    protected final function runCliCommand($command): string
    {
        $output = [];
        $returnVar = null;
        exec($command, $output, $returnVar);
        if ($returnVar === 0) {
            return implode('', $output);
        } else {
            throw new  Exception("An error occurred while running the command: {$command}");
        }
    }

}
<?php

namespace SeAT\check;

use Exception;
use SeAT\result\Result;
use SeAT\result\SimpleValueResult;
use SeAT\util\ValueFormatter;
use League\CLImate\CLImate;

class ManualPatchApplicationCheck implements Check, HasUserInput
{

    protected ValueFormatter $valueFormatter;
    protected CLImate $cli;
    protected string $mode = self::VERBOSE;

    public function __construct()
    {
        $this->init();
    }

    public function setMode($mode)
    {
        $this->mode = $mode;
    }

    protected function init()
    {
        $this->cli = new CLImate();
    }

    public function getValueFormatter(): ValueFormatter
    {
        if (!isset($this->valueFormatter)) {
            $this->valueFormatter = new ValueFormatter();
        }
        return $this->valueFormatter;
    }

    public function setValueFormatter(ValueFormatter $valueFormatter)
    {
        $this->valueFormatter = $valueFormatter;
    }

    /**
     * @throws Exception
     */
    public function execute(): Result
    {


        $input = $this->cli->input("Are updates and/or patches applied manually?");

        $result = new SimpleValueResult();
        $result->setDescription('Manual Patches Added?');

        if ($this->mode === self::VERBOSE) {
            $input->accept(['y', 'n'], true);
            $response = $input->prompt();

            $manualPatchesAdded = ($response === 'y');

            $result->setValue($this->getValueFormatter()->ynToYesNo($response) . " (Based on user's response)");
            $result->setFlag($manualPatchesAdded ? Result::OK : Result::WARNING);
            $result->setComment($manualPatchesAdded ? '' : "If automatic updates aren't enabled, it's recommended to apply at least security patches manually.");
        } else {
            $result->setValue(self::UNDETERMINED);
            $result->setFlag(Result::SKIPPED);
            $result->setComment("This check was skipped in the quiet mode.");
        }

        return $result;
    }

}
<?php

namespace SeAT\check;

use SeAT\result\Result;
use SeAT\result\SimpleValueResult;

abstract class TimeCheck implements Check
{

    public function execute(): Result
    {
        $result = new SimpleValueResult();

        $result->setDescription($this->description);
        $result->setValue($this->getValue());
        $result->setFlag($this->determineFlag());
        $result->setComment($this->determineComment());

        return $result;
    }

    protected function determineFlag(): string
    {
        $dependencies = $this->getDependencies();

        foreach ($dependencies as $dependency) {
            if ($dependency instanceof TimeCheck) {
                if ($this->getValue() !== $dependency->getValue()) {
                    return Result::ERROR;
                }
            }
        }

        return Result::OK;
    }

    protected function determineComment(): string
    {

        $comments = [];
        $dependencies = $this->getDependencies();

        foreach ($dependencies as $description => $dependency) {
            if ($dependency instanceof TimeCheck) {
                if ($this->getStandardFormattedTime() !== $dependency->getStandardFormattedTime()) {
                    $comments[] = "Doesn't match with the {$description}.";
                }
            }
        }

        return implode(' ', $comments);
    }

    protected function getStandardFormattedTime(): string
    {
        return date('Y-m-d H:i', strtotime($this->getValue()));
    }

    abstract public function getValue(): string;

    abstract protected function getDependencies(): array;
}
<?php

namespace SeAT\check;

use Exception;
use SeAT\result\Result;
use SeAT\result\SimpleValueResult;
use SeAT\util\ValueFormatter;

class MemoryCheck implements Check
{

    const MIN_MEMORY_SIZE = 4e+9;
    const RECOMMENDED_MEMORY_SIZE = 6e+9;

    protected ValueFormatter $valueFormatter;

    public function getValueFormatter(): ValueFormatter
    {
        if (!isset($this->valueFormatter)) {
            $this->valueFormatter = new ValueFormatter();
        }
        return $this->valueFormatter;
    }

    public function setValueFormatter(ValueFormatter $valueFormatter)
    {
        $this->valueFormatter = $valueFormatter;
    }

    public function execute(): Result
    {

        $result = new SimpleValueResult();

        $result->setDescription('Memory');


        try {
            $totalMemory = ((int)$this->runCliCommand("grep MemTotal /proc/meminfo | cut -d':' -f2 | sed 's/\s//g' | sed 's/kB//g'")) * 1000;
            $result->setValue($this->getValueFormatter()->sizeToHumanReadableFormat($totalMemory));
            $result->setFlag($this->determineFlag($totalMemory));
            $result->setComment($this->determineComment($totalMemory));
        } catch (Exception $e) {
            $result->setValue('');
            $result->setFlag(Result::SKIPPED);
            $result->setComment("Error occurred while determining memory information. Please verify manually.");
        }

        return $result;
    }

    protected function determineFlag(int $determinant): string
    {
        if ($determinant < self::MIN_MEMORY_SIZE) {
            return Result::ERROR;
        } elseif ($determinant < self::RECOMMENDED_MEMORY_SIZE) {
            return Result::WARNING;
        } else {
            return Result::OK;
        }
    }

    protected function determineComment(int $determinant): string
    {
        if ($determinant < self::MIN_MEMORY_SIZE) {
            return "It's recommended to have at least " .
                $this->getValueFormatter()->sizeToHumanReadableFormat(self::MIN_MEMORY_SIZE) . " of memory. The recommended memory size is " .
                $this->getValueFormatter()->sizeToHumanReadableFormat(self::RECOMMENDED_MEMORY_SIZE) . ".";
        } elseif ($determinant < self::RECOMMENDED_MEMORY_SIZE) {
            return "Your RAM fulfills the minimum required amount of memory. The ideal is " .
                $this->getValueFormatter()->sizeToHumanReadableFormat(self::RECOMMENDED_MEMORY_SIZE) . " or higher. " .
                "If your OrangeHRM use is heavy, you might experience performance issues with the current memory.";
        } else {
            return '';
        }
    }

    /**
     *
     * @throws Exception
     * @todo Duplicated logic
     */
    protected final function runCliCommand($command): string
    {
        $output = [];
        $returnVar = null;
        exec($command, $output, $returnVar);
        if ($returnVar === 0) {
            return implode('', $output);
        } else {
            throw new Exception("An error occurred while running the command: {$command}");
        }
    }

}
<?php

namespace SeAT\check;

use SeAT\result\Result;
use SeAT\result\SimpleValueResult;

abstract class MiddlewareVersionCheck implements Check
{

    protected string $recommended = '0.0';
    protected string $min = '0.0';
    protected string $max = '0.0';

    protected final function determineFlag($currentVersion): string
    {
        switch ($this->withinRecommendedRange($currentVersion)) {
            case 0:
                return Result::OK;
            case 1:
                return Result::WARNING;
            case 2:
            case 3:
                return Result::ERROR;
            default:
                return Result::IGNORE;
        }
    }

    protected final function determineComment($currentVersion): string
    {
        switch ($this->withinRecommendedRange($currentVersion)) {
            case 0:
                return '';
            case 1:
                return "Recommended is between v{$this->recommended} and v{$this->max}.";
            case 2:
                return "Should at least be v{$this->min}.";
            case 3:
                return "Should not be higher than v{$this->max}.";
            default:
                return "An error occurred while comparing versions. Please check manually.";
        }
    }

    protected final function withinRecommendedRange($currentVersion): int
    {
        $withinRecommendedRange = version_compare($currentVersion, $this->recommended, 'ge') && version_compare($currentVersion, $this->max, 'lt');
        $betweenMinAdnRecommended = version_compare($currentVersion, $this->recommended, 'lt') && version_compare($currentVersion, $this->min, 'ge');
        $belowMinimum = version_compare($currentVersion, $this->min, 'lt');
        $aboveMaximum = version_compare($currentVersion, $this->max, 'gt');

        if ($withinRecommendedRange) {
            return 0;
        } elseif ($betweenMinAdnRecommended) {
            return 1;
        } elseif ($belowMinimum) {
            return 2;
        } elseif ($aboveMaximum) {
            return 3;
        } else {
            return -1;
        }
    }

    protected final function prepareResult($currentVersion, $cleansedVersionString = null): Result
    {
        if (is_null($cleansedVersionString)) {
            $cleansedVersionString = $currentVersion;
        }

        $result = new SimpleValueResult();
        $result->setValue($currentVersion);
        $result->setDescription($this->description);
        $result->setFlag($this->determineFlag($cleansedVersionString));
        $result->setComment($this->determineComment($cleansedVersionString));
        return $result;
    }

    protected final function canRun($app): bool
    {
        return (file_exists($app) && is_executable($app));
    }
}
<?php

namespace SeAT\check;

use Exception;
use SeAT\result\Result;

class OperatingSystemAndVersionCheck extends OsSpecificCliValueCheck
{

    protected string $description = 'Operating System';

    protected function getCommandForLinux(): string
    {
        return "cat /etc/os-release | grep PRETTY_NAME | cut -d'=' -f2 | sed 's/\"//g'";
    }

    protected function getCommandForUbuntu(): string
    {
        return "cat /etc/os-release | grep PRETTY_NAME | cut -d'=' -f2 | sed 's/\"//g' | grep Ubuntu";
    }

    /**
     * @throws Exception
     */
    protected function getCommandForOtherOs(): string
    {
        throw new Exception("This check is not supported for operating systems other than Linux and Windows.");
    }

    protected function getCommandForWindows(): string
    {
        return 'systeminfo | findstr /C:"OS Name"';
    }

    protected function determineFlag(string $value): string
    {
        return Result::OK;
    }

}
<?php

namespace SeAT\check;

class OperatingSystemTimeCheck extends TimeCheck
{

    protected string $description = 'Operating System Time';

    protected function getDependencies(): array
    {
        return [
            'Hardware Clock Time' => new HardwareClockTimeCheck(),
        ];
    }

    public function getValue(): string
    {
        $command = 'date "+%F %H:%M"';
        $output = [];
        $returnVar = null;

        exec($command, $output, $returnVar);
        if ($returnVar === 0) {
            return implode("\n", $output);
        } else {
            return 'ERROR';
        }
    }

}
<?php

namespace SeAT\check;

use Exception;

class FutureLeaveRequestsCheck extends DatabaseResultsCheck
{

    /**
     * @throws Exception
     */
    protected function retrieveData(): array
    {
        $hasMultipleEmpLocations = $this->getDba()->tableExists('hs_hr_emp_locations');
        $join = ($hasMultipleEmpLocations) ? 'LEFT JOIN `hs_hr_emp_locations` AS el ON lr.`emp_number` = el.`emp_number` LEFT JOIN `ohrm_location` AS l ON l.`id` = el.`location_id` ' : 'LEFT JOIN `hs_hr_employee` AS e ON lr.`emp_number` = e.`emp_number` LEFT JOIN `ohrm_location` AS l ON l.`id` = e.`location_id` ';

        $query = "
SELECT    
  DATE_FORMAT(lr.`leave_start_date`, '%Y-%b') AS `month`,
  c.`cou_name` AS `country`,
  COUNT(*) AS `count`  
FROM `ohrm_leave_request` AS lr 
{$join}
LEFT JOIN `hs_hr_country` AS `c` ON l.`country_code` = c.`cou_code` 
WHERE lr.`id` IN (SELECT DISTINCT `leave_request_id` FROM `ohrm_leave` WHERE `date` > :startDate) 
GROUP BY c.`cou_name`, DATE_FORMAT(lr.`leave_start_date`, '%Y-%b') 
ORDER BY c.`cou_name`, `leave_start_date`
";
        return $this->getDba()->fetchAll($query, array(':startDate' => date('Y-m-d')));
    }

}
<?php

namespace SeAT\check;

use Exception;
use SeAT\result\Result;

class OperatingSystemTimezoneCheck extends OsSpecificCliValueCheck
{

    protected string $description = 'Operating System Timezone';

    protected function getCommandForLinux(): string
    {
        return 'date +"%Z (%:z GMT)"';
    }

    protected function getCommandForUbuntu(): string
    {
        return $this->getCommandForLinux();
    }

    /**
     * @throws Exception
     */
    protected function getCommandForOtherOs(): string
    {
        throw new Exception("This check is not supported for operating systems other than Linux and Windows.");
    }

    protected function getCommandForWindows(): string
    {
        return 'systeminfo | findstr  /C:"Time Zone"';
    }

    protected function determineFlag(string $value): string
    {
        return Result::OK;
    }

}
<?php

namespace SeAT\check;

class OrganizationNameCheck extends DatabaseValueCheck
{

    protected string $table = 'ohrm_organization_gen_info';
    protected string $field = 'name';
    protected string $description = 'Organization Name';
}
<?php

namespace SeAT\check;

use SeAT\result\Result;
use SeAT\result\SimpleValueResult;

abstract class OsSpecificCliValueCheck implements Check
{

    protected string $description;

    public function execute(): Result
    {

        if (PHP_OS_FAMILY === 'Linux') {
            $checkUbuntu = new OperatingSystemAndVersionCheck();

            $commandToCheckUbuntu = $checkUbuntu->getCommandForUbuntu();
            $outputCheckUbuntu = [];
            $returnVarCheckUbuntu = null;
            exec($commandToCheckUbuntu, $outputCheckUbuntu, $returnVarCheckUbuntu);

            if ($returnVarCheckUbuntu === 0) {
                $command = $this->getCommandForUbuntu();
            } else {
                $command = $this->getCommandForLinux();
            }
        } elseif (PHP_OS_FAMILY === 'Windows') {
            $command = $this->getCommandForWindows();
        } else {
            $command = $this->getCommandForOtherOs();
        }

        $output = [];
        $returnVar = null;
        exec($command, $output, $returnVar);

        if ($returnVar === 0) {
            $value = $this->formatOutput($output);

            $result = new SimpleValueResult();
            $result->setDescription($this->description);
            $result->setValue($value);
            $result->setFlag($this->determineFlag($value));
            $result->setComment($this->determineComment($value));

            return $result;
        } else {
            $result = new SimpleValueResult();
            $result->setDescription($this->description);
            $result->setValue('N/A');
            $result->setFlag(Result::SKIPPED);
            $result->setComment("An error occurred while performing this check. Please verify this manually.");
            echo "Error occurred while running command {$command}. Output: " . implode("\n", $output) . "\n\n";
        }

        return $result;
    }

    protected function determineComment(string $value): string
    {
        return '';
    }

    abstract protected function getCommandForLinux(): string;

    abstract protected function getCommandForUbuntu(): string;

    abstract protected function getCommandForWindows(): string;

    abstract protected function getCommandForOtherOs(): string;

    abstract protected function determineFlag(string $value): string;

    protected function formatOutput(array $output): string
    {
        return implode('\n', $output);
    }
}
<?php

namespace SeAT\check;

use SeAT\result\Result;
use SeAT\result\SimpleValueResult;
use SeAT\result\DatasetResult;
use SeAT\util\ValueFormatter;

abstract class ParametersCheck implements Check
{

    protected array $parameters = [];
    protected ValueFormatter $valueFormatter;

    public function getValueFormatter(): ValueFormatter
    {
        if (!isset($this->valueFormatter)) {
            $this->valueFormatter = new ValueFormatter();
        }
        return $this->valueFormatter;
    }

    public function setValueFormatter(ValueFormatter $valueFormatter)
    {
        $this->valueFormatter = $valueFormatter;
    }

    public function execute(): Result
    {

        $result = new DatasetResult();

        foreach ($this->parameters as $param => $recommendedValue) {

            $actualValue = $this->findParamValue($param);
            list($comparator, $operand, $allowEmpty, $critical) = $recommendedValue;

            $item = new SimpleValueResult();
            $item->setDescription($param);
            $item->setValue($actualValue);
            $item->setFlag($this->determineFlag($actualValue, $comparator, $operand, $allowEmpty, $critical));
            $item->setComment($this->determineComment($actualValue, $comparator, $operand, $allowEmpty));

            $result->add($item);
        }

        return $result;
    }

    protected final function determineFlag($actualValue, $comparator, $operand, $allowEmpty, $critical): string
    {

        if ($allowEmpty && empty(trim($actualValue))) {
            return Result::OK;
        }

        switch ($comparator) {
            case '>=':
                if ($this->getValueFormatter()->isInHumanReadableFormat($actualValue)) {
                    $actualValue = $this->getValueFormatter()->humanReadableFormatToSize($actualValue);
                }

                $operand = $this->getValueFormatter()->humanReadableFormatToSize($operand);
                return ($actualValue >= $operand) ? Result::OK : ($critical ? Result::ERROR : Result::WARNING);
            case 'range':
                if ($this->getValueFormatter()->isInHumanReadableFormat($actualValue)) {
                    $actualValue = $this->getValueFormatter()->humanReadableFormatToSize($actualValue);
                }

                list($min, $max) = explode(',', $operand);
                $minVal = $this->getValueFormatter()->humanReadableFormatToSize($min);
                $maxVal = $this->getValueFormatter()->humanReadableFormatToSize($max);
                return ($actualValue >= $minVal && $actualValue <= $maxVal) ? Result::OK : ($critical ? Result::ERROR : Result::WARNING);
            case '=':
            default :
                return ($actualValue == $operand) ? Result::OK : ($critical ? Result::ERROR : Result::WARNING);
        }
    }

    protected final function determineComment($actualValue, $comparator, $operand, $allowEmpty): string
    {

        if ($allowEmpty && empty(trim($actualValue))) {
            return '';
        }

        switch ($comparator) {
            case '>=':
                if ($this->getValueFormatter()->isInHumanReadableFormat($actualValue)) {
                    $actualValue = $this->getValueFormatter()->humanReadableFormatToSize($actualValue);
                }

                $operandVal = $this->getValueFormatter()->humanReadableFormatToSize($operand);
                return ((float)$actualValue >= $operandVal) ? '' : "Should be >= {$operand}";
            case 'range':
                if ($this->getValueFormatter()->isInHumanReadableFormat($actualValue)) {
                    $actualValue = $this->getValueFormatter()->humanReadableFormatToSize($actualValue);
                }

                list($min, $max) = explode(',', $operand);
                $minVal = $this->getValueFormatter()->humanReadableFormatToSize($min);
                $maxVal = $this->getValueFormatter()->humanReadableFormatToSize($max);
                return ((float)$actualValue >= $minVal && (float)$actualValue <= $maxVal) ? '' : "Should be >= {$min} and <= {$max}.";
            case '=':
            default :
                return ($actualValue == $operand) ? '' : "Recommended value: {$operand}.";
        }
    }

    abstract protected function findParamValue($param);
}
<?php

namespace SeAT\check;

interface HasUserInput
{

    public function setMode($mode);
}
<?php

namespace SeAT\check;

use Exception;

class HelpAndTrainingPortalUsageCheck extends DatabaseResultsCheck
{

    const PORTAL_BASE_URL = 'https://help.orangehrm.com/hc';
    const FALLBACK_URL = 'https://orangehrm.zendesk.com/hc/en-us';
    const LOCALE_NAME_LENGTH = 5;

    /**
     * @throws Exception
     */
    protected function retrieveData(): array
    {
        if ($this->getDba()->tableExists('ohrm_external_navigation_log')) {
            $query = "
                (SELECT
                  'Default Page' AS article,
                  RIGHT(to_url, " . self::LOCALE_NAME_LENGTH . ") AS locale,
                  COUNT(*) AS clickCount
                FROM ohrm_external_navigation_log 
                WHERE 
                  (to_url = '" . self::FALLBACK_URL . "' OR to_url RLIKE '^" . self::PORTAL_BASE_URL . "\/.{" . self::LOCALE_NAME_LENGTH . "}')
                )
         
                UNION
                
                (SELECT
                  s.article AS article, 
                  s.locale AS locale, 
                  s.click_count AS clickCount 
                FROM (SELECT 
                    TRIM(REPLACE(SUBSTR(r.url_segment, " . (strlen(self::PORTAL_BASE_URL) + 1) . "), '-', ' ')) AS article, 
                    SUBSTR(r.url_segment, 2, " . self::LOCALE_NAME_LENGTH . ") AS locale, 
                    click_count 
                    FROM (SELECT 
                      TRIM(REPLACE(to_url, '" . self::PORTAL_BASE_URL . "', '')) AS url_segment, 
                      COUNT(*) AS click_count 
                      FROM ohrm_external_navigation_log 
                      WHERE to_url LIKE '%" . self::PORTAL_BASE_URL . "%' 
                      GROUP BY to_url
                    ) AS r
                ) AS s 
                WHERE TRIM(s.article) != ''
                ORDER BY s.article
                )
                ;
                ";

            return $this->getDba()->fetchAll($query);
        } else {
            return ['article' => 'N/A', 'locale' => 'N/A', 'clickCount' => 'N/A'];
        }
    }

}
<?php

namespace SeAT\check;

use SeAT\result\Result;

class HostNameCheck extends CommonCliCommandCheck
{

    protected $description = 'Server Name';
    protected $command = 'hostname';

    protected function determineComment(string $value): string
    {
        return $this->isHostnameSet($value) ? '' : "Hostname appears to be not set. It's recommended to set the hostname to proper domain name.";
    }

    protected function determineFlag(string $value): string
    {
        return $this->isHostnameSet($value) ? Result::OK : Result::WARNING;
    }

    protected function isHostnameSet($hostname): bool
    {
        $cleanedHostname = trim($hostname);
        if ($cleanedHostname === 'localhost' || $cleanedHostname === 'localhost.localdomain') {
            return false;
        } elseif (preg_match('/\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01][0-9][0-9]?)\b/', $cleanedHostname)) {
            return false;
        } else {
            return true;
        }
    }

}
<?php

namespace SeAT\formatter;

use SeAT\result\ResultCollection;

class CliOutputFormatter extends BaseOutputFormatter {

    public function render(): string
    {
        // TODO: Implement render() method.
        return '';
    }

    public function renderKeyValueCollection(ResultCollection $resultCollection): string
    {
        // TODO: Implement renderKeyValueCollection() method.
        return '';
    }

    public function renderValueCheckTable(ResultCollection $resultCollection): string
    {
        // TODO: Implement renderValueCheckTable() method.
        return '';
    }

    public function renderDataTable(ResultCollection $resultCollection): string
    {
        // TODO: Implement renderDataTable() method.
        return '';
    }

    public function renderCompositeTableSegment(ResultCollection $resultCollection): string
    {
        // TODO: Implement renderCompositeTableSegment() method.
        return '';
    }
}
<?php

namespace SeAT\formatter;

use Iterator;
use SeAT\result\ResultCollection;
use SeAT\result\Result;

class HtmlOutputFormatter extends BaseOutputFormatter
{

    public function render(): string
    {
        $html = $this->getTemplate();

        preg_match_all('/\{.+}/', $html, $placeholders);

        foreach ($this->auditReport->getResultCollections() as $section => $resultCollection) {
            $methodName = 'render' . ucfirst(preg_replace_callback('/-([a-zA-Z])/', function ($matches) {
                    return ucfirst($matches[1]);
                }, $resultCollection->getType()));

            if (method_exists($this, $methodName)) {
                $sectionHtml = call_user_func([$this, $methodName], $resultCollection);
                $label = $resultCollection->getLabel();

                $html = str_replace("{{$label}}", $sectionHtml, $html);
            }
        }

        $timestamp = date('Y-m-d H:i:s');
        $title = "OrangeHRM Onsite Installation Audit Report - {$timestamp}";
        $html = str_replace('{title}', $title, $html);
        $html = str_replace('{machineReadableAnalyticsData}', $this->auditReport->getMachineReadableUsageData(), $html);
        return str_replace($placeholders[0], $this->tag('em', [], 'No data found.'), $html);
    }

    public function renderKeyValueCollection(ResultCollection $resultCollection): string
    {

        $items = '';
        foreach ($resultCollection as $key => $result) {
            $items .= $this->tag('li', [], "{$this->tag('strong', [], $result->getDescription())}: {$result->getValue()}") . "\n";
        }

        return $this->tag('ul', [], $items);
    }

    public function renderValueCheckTable(ResultCollection $resultCollection): string
    {
        $trs = '';
        foreach ($resultCollection as $key => $result) {
            $tds = $this->tag('td', [], $result->getDescription());
            $tds .= $this->tag('td', [], $result->getValue());
            $tds .= $this->tag('td', ['class' => $result->getFlag()], '&nbsp;');
            $tds .= $this->tag('td', [], $result->getComment());
            $trs .= $this->tag('tr', [], $tds);
        }

        $thead = $this->renderTableHeader($resultCollection->getHeaders());
        $tbody = $this->tag('tbody', [], $trs);
        $tfoot = '';

        return $this->tag('table', [], "\n{$thead}\n{$tbody}\n{$tfoot}\n");
    }

    public function renderDataTable(ResultCollection $resultCollection): string
    {

        $propertyMapping = array_values($resultCollection->getHeaders());
        $trs = '';

        foreach ($resultCollection as $key => $result) {
            foreach ($result as $index => $data) {
//                $tds = '';
//                foreach ($propertyMapping as $key => $property) {
//                    if ($property === 'flag') {
//                        $tds .= $this->tag('td', ['class' => $data['flag']], '&nbsp;');
//                    } else {
//                        $tds .= $this->tag('td', [], $data[$property]);
//                    }
//                }
                $trs .= $this->renderTableRows($result);
            }
        }

        $thead = $this->renderTableHeader($resultCollection->getHeaders());
        $tbody = $this->tag('tbody', [], $trs);
        $tfoot = '';

        return $this->tag('table', [], "\n{$thead}\n{$tbody}\n{$tfoot}\n");
    }

    public function renderCompositeTableSegment(ResultCollection $resultCollection): string
    {
        $headers = $resultCollection->getHeaders();

        $trs = $this->tag('tr', [], $this->tag('th', ['colspan' => 4], $resultCollection->getLabel()));

        $ths = '';
        foreach ($headers as $header => $property) {
            $ths .= $this->tag('th', [], $header);
        }
        $trs .= $this->tag('tr', ['class' => 'sub'], $ths);

        foreach ($resultCollection as $key => $result) {
            $trs .= $this->renderTableRows($result);
        }

        return $trs;
    }

    public function renderStats(ResultCollection $resultCollection): string
    {
        $trs = '';
        foreach ($resultCollection as $key => $result) {
            $collection = $result->getCollection()[0];
            foreach ($collection as $k => $val) {
                $tds = '';
                foreach ($val as $data) {
                    $tds .= $this->tag('td', [], $data);
                }
                $trs .= $this->tag('tr', [], $tds);
            }
        }

        $headerTags = '';

        foreach ($resultCollection->getHeaders() as $header) {
            $header = ucwords(
                implode(
                    ' ',
                    preg_split('/(?=[A-Z])/', $header)
                )
            );
            $headerTags .= $this->tag('th', [], $header);
        }

        $thead = $this->tag('thead', [], $this->tag('tr', [], $headerTags));
        $tbody = $this->tag('tbody', [], $trs);
        $tfoot = '';
        return $this->tag('table', ['class' => 'stats-tbl'], "\n{$thead}\n{$tbody}\n{$tfoot}\n");
    }

    public function renderDefault(ResultCollection $resultCollection): string
    {
        return '';
    }

    protected final function tag(string $tag, array $attributes, $content = null): string
    {
        $htmlTag = "<{$tag} " . implode(' ', array_map(function ($value, $property) {
                return $property . '=' . "\"$value\"";
            }, $attributes, array_keys($attributes)
            ));

        $htmlTag .= (is_null($content)) ? '/>' : ">{$content}</{$tag}>";

        return $htmlTag;
    }

    protected final function renderTableHeader($headers): string
    {
        $headerTags = '';

        foreach ($headers as $header => $mappedProperty) {
            $headerTags .= $this->tag('th', [], $header);
        }

        return $this->tag('thead', [], $this->tag('tr', [], $headerTags));
    }

    protected final function renderTableRows($result): string
    {
        $trs = '';

        $collection = ($result instanceof Iterator) ? $result : [$result];

        foreach ($collection as $resultItem) {
            $tds = '';

            if (is_array($resultItem)) {
                foreach ($resultItem as $kay => $value) {
                    if (is_array($value)) {
                        foreach ($value as $k => $v)
                            $tds .= $this->tag('td', [], $v);
                    } else {
                        $tds .= $this->tag('td', [], $value);
                    }
                }
            } else {
                $tds .= $this->tag('td', [], $resultItem->getDescription());
                $tds .= $this->tag('td', [], $resultItem->getValue());
                $tds .= $this->tag('td', ['class' => $resultItem->getFlag()], '&nbsp;');
                $tds .= $this->tag('td', [], $resultItem->getComment());
            }
            $trs .= $this->tag('tr', [], $tds);
        }

        return $trs;
    }

    protected final function comment(array $content): string
    {
        $size = count($content);
        if ($size === 0) {
            return '';
        } elseif ($size === 1) {
            return "<!-- {$content[0]} -->";
        } else {
            return "<!--\n" . implode("\n", $content) . "\n-->";
        }
    }

}
<?php

namespace SeAT\formatter;

use SeAT\result\ResultCollection;

interface OutputFormatter {

    public function render(): string;

    public function renderKeyValueCollection(ResultCollection $resultCollection): string;

    public function renderValueCheckTable(ResultCollection $resultCollection): string;

    public function renderDataTable(ResultCollection $resultCollection): string;

    public function renderCompositeTableSegment(ResultCollection $resultCollection): string;

    public function setTemplate(string $template);

    public function getTemplate(): string;
}
<?php

namespace SeAT\formatter;

use Dompdf\Dompdf;

class PdfOutputFormatter extends HtmlOutputFormatter
{

    public function render(): string
    {
        $html = parent::render();
        $dompdf = new Dompdf();
        $dompdf->loadHtml($html);
        $dompdf->setPaper('A4');
        $dompdf->render();
        return $dompdf->output();
    }

}
<?php

namespace SeAT\formatter;

use SeAT\result\AuditReport;

abstract class BaseOutputFormatter implements OutputFormatter
{

    protected AuditReport $auditReport;
    protected string $template = '';

    public function setResult(AuditReport $auditReport)
    {
        $this->auditReport = $auditReport;
    }

    public function setTemplate(string $template)
    {
        $this->template = $template;
    }

    public function getTemplate(): string
    {
        return $this->template;
    }

}
<?php

namespace SeAT\formatter;

use Exception;
use Iterator;
use SeAT\formatter\BaseOutputFormatter;
use SeAT\result\DatasetResult;
use SeAT\result\ResultCollection;
use SeAT\result\SimpleValueResult;

class JsonOutputFormatter extends BaseOutputFormatter
{

    /**
     * @throws Exception
     */
    public function render(): string
    {

        $output = [];


        /**
         * @var ResultCollection $resultCollection
         */
        foreach ($this->auditReport->getResultCollections() as $resultCollection) {
            $key = $this->toKebabCase($resultCollection->getLabel());

            $output[$key] = [];
            switch ($resultCollection->getType()) {
                case 'composite-table-segment':
                case 'stats':
                    foreach ($resultCollection as $result) {
                        if ($result instanceof SimpleValueResult) {
                            $property = $this->toKebabCase($result->getDescription());
                            $output[$key][$property] = $result->getValue();
                        } elseif ($result instanceof DatasetResult) {
                            foreach ($result as $value) {
                                $output[$key][] = $value;
                            }
                        } else {
                            // TODO: Handle all types
                            echo "Unexpected result type: " . get_class($result);
                        }
                    }
                    break;

                default:
                    echo "{$resultCollection->getType()} is not a valid result type.";
            }
        }

        [$output['instance-usage']] = json_decode(gzuncompress(base64_decode($this->auditReport->getMachineReadableUsageData())), true);

        return json_encode($output, JSON_PRETTY_PRINT);
    }

    public function renderKeyValueCollection(ResultCollection $resultCollection): string
    {
        return '';
    }

    public function renderValueCheckTable(ResultCollection $resultCollection): string
    {
        return '';
    }

    public function renderDataTable(ResultCollection $resultCollection): string
    {
        return '';
    }

    public function renderCompositeTableSegment(ResultCollection $resultCollection): string
    {
        return '';
    }

    /**
     * @todo Move to a utility class
     */
    protected function toKebabCase(string $string): string
    {
        return strtolower(preg_replace('/(?<=[a-z])([A-Z])/', '-$1', trim($string)));
    }

}
<?php

namespace SeAT\result;

use SeAT\result\SimpleValueResult;

class DataItemFactory {

    public function generate(string $description, string $value, string $flag, string $comment): SimpleValueResult {

        $result = new SimpleValueResult();

        $result->setDescription($description);
        $result->setValue($value);
        $result->setFlag($flag);
        $result->setComment($comment);

        return $result;
    }

}
<?php

namespace SeAT\result;

use Iterator;

class DatasetResult implements Result, Iterator {

    protected $position = 0;
    protected $collection = [];

    public function getComment() {

    }

    public function getDescription() {

    }

    public function getFlag() {

    }

    public function getRecommendedValue() {

    }

    public function getValue() {

    }

    public function setComment($comment) {

    }

    public function setDescription($description) {

    }

    public function setFlag($flag) {

    }

    public function setRecommendedValue($recommendedValue) {

    }

    public function setValue($value) {

    }

    public function add($result) {
        $this->collection[] = $result;
    }

    public function getCollection(): array {
        return $this->collection;
    }

    public function setCollection(array $collection) {
        $this->collection = $collection;
    }

    public function current() {
        return $this->collection[$this->position];
    }

    public function key(): int {
        return $this->position;
    }

    public function next(): void {
        ++$this->position;
    }

    public function rewind(): void {
        $this->position = 0;
    }

    public function valid(): bool {
        return isset($this->collection[$this->position]);
    }

}
<?php

namespace SeAT\result;

class DataRowResult implements Result {
    
    public function getComment() {
        
    }

    public function getDescription() {
        
    }

    public function getFlag() {
        
    }

    public function getRecommendedValue() {
        
    }

    public function getValue() {
        
    }

    public function setComment($comment) {
        
    }

    public function setDescription($description) {
        
    }

    public function setFlag($flag) {
        
    }

    public function setRecommendedValue($recommendedValue) {
        
    }

    public function setValue($value) {
        
    }

}
<?php

namespace SeAT\result;

use Iterator;

class ResultCollection implements Iterator
{

    protected $type;
    protected $label;
    protected $headers = [];
    protected $position = 0;
    protected $collection = [];

    public function getType(): string
    {
        return $this->type;
    }

    public function setType($type)
    {
        $this->type = $type;
    }

    public function getLabel()
    {
        return $this->label;
    }

    public function setLabel($label)
    {
        $this->label = $label;
    }

    public function getHeaders(): array
    {
        return $this->headers;
    }

    public function setHeaders(array $headers)
    {
        $this->headers = $headers;
    }

    public function add(Result $result)
    {
        $this->collection[] = $result;
    }

    public function current()
    {
        return $this->collection[$this->position];
    }

    public function key(): int
    {
        return $this->position;
    }

    public function next(): void
    {
        ++$this->position;
    }

    public function rewind(): void
    {
        $this->position = 0;
    }

    public function valid(): bool
    {
        return isset($this->collection[$this->position]);
    }

}
<?php

namespace SeAT\result;

interface Result {

    const OK = 'ok';
    const WARNING = 'warning';
    const ERROR = 'error';
    const SKIPPED = 'skipped';
    const IGNORE = 'ignore';

    public function getDescription();

    public function getValue();

    public function getRecommendedValue();

    public function getFlag();

    public function getComment();

    public function setDescription($description);

    public function setValue($value);

    public function setRecommendedValue($recommendedValue);

    public function setFlag($flag);

    public function setComment($comment);
}
<?php

namespace SeAT\result;

class ResultCollectionFactory {

    public function create($type): ResultCollection 
    {
        $resultCollection = new ResultCollection();
        $resultCollection->setType($type);
        return $resultCollection;
    }

}
<?php

namespace SeAT\result;

class SimpleValueResult implements Result {

    protected $value;
    protected $description;
    protected $recommendedValue;
    protected $flag;
    protected $comment;

    public function getValue() {
        return $this->value;
    }

    public function getDescription() {
        return $this->description;
    }

    public function getRecommendedValue() {
        return $this->recommendedValue;
    }

    public function getFlag() {
        return $this->flag;
    }

    public function getComment() {
        return $this->comment;
    }

    public function setValue($value) {
        $this->value = $value;
    }

    public function setDescription($description) {
        $this->description = $description;
    }

    public function setRecommendedValue($recommendedValue) {
        $this->recommendedValue = $recommendedValue;
    }

    public function setFlag($flag) {
        $this->flag = $flag;
    }

    public function setComment($comment) {
        $this->comment = $comment;
    }

}
<?php

namespace SeAT\result;

class AuditReport
{

    protected array $resultCollections = [];
    protected ?string $machineReadableUsageData = null;

    public function getResultCollections(): array
    {
        return $this->resultCollections;
    }

    public function setResultCollections(array $resultCollections)
    {
        $this->resultCollections = $resultCollections;
    }

    public function getMachineReadableUsageData(): ?string
    {
        return $this->machineReadableUsageData;
    }

    public function setMachineReadableUsageData(?string $machineReadableUsageData): void
    {
        $this->machineReadableUsageData = $machineReadableUsageData;
    }

    public function addResultCollection($index, ResultCollection $resultCollection)
    {
        $this->resultCollections[$index] = $resultCollection;
    }

}
<?php

namespace SeAT\util;

use Exception;

class ValueFormatter
{

    const HUMAN_READABLE_FORMAT_REGEX = '/^(\d{1,})\s{0,}([KMGT])B?$/';

    protected $sizes = ['B', 'KB', 'MB', 'GB', 'TB'];
    protected $multipliers = [
        'k' => 1000,
        'K' => 1024,
        'm' => 1000000,
        'M' => 1048576,
        'g' => 1000000000,
        'G' => 1073741824,
        't' => 1000000000000,
        'T' => 1099511627776,
    ];
    protected $periods = ['day' => 1, 'week' => 7, 'month' => 30, 'year' => 365];

    public function sizeToHumanReadableFormat(int $sizeInBytes)
    {
        if ($sizeInBytes === 0) {
            return 0;
        }
        $i = floor(log($sizeInBytes) / log(1024));

        if ($i === 0.0) {
            return $sizeInBytes . ' ' . $this->sizes[$i];
        }

        return number_format($sizeInBytes / pow(1024, $i), 2) . ' ' . $this->sizes[$i];
    }

    public function isInHumanReadableFormat($value): bool
    {
        return (bool)preg_match(self::HUMAN_READABLE_FORMAT_REGEX, $value);
    }

    public function humanReadableFormatToSize(string $humanReadbleFormat): float
    {
        if ($humanReadbleFormat === '0') {
            return 0;
        }

        if (preg_match('/^\d{1,}$/', $humanReadbleFormat) && is_numeric($humanReadbleFormat)) {
            return (int)$humanReadbleFormat;
        }

        $matches = [];
        preg_match(self::HUMAN_READABLE_FORMAT_REGEX, $humanReadbleFormat, $matches);

        if (!empty($matches) && count($matches) >= 3) {
            $multiplier = $matches[2];
            return ((float)$matches[1]) * ((float)$this->multipliers[$multiplier]);
        }

        // Error out without this
        // TODO: check and find the issue
        return 0;
    }

    /**
     * @throws Exception
     */
    public function ynToYesNo(string $value): string
    {
        $map = ['y' => 'Yes', 'n' => 'No', 'Y' => "Yes", 'N' => 'No'];
        if (array_key_exists($value, $map)) {
            return $map[$value];
        } else {
            throw new Exception("{$value} is not either 'y' or 'n'.");
        }
    }

    public function boolToYesNo(bool $value): string
    {
        return ($value) ? 'Yes' : 'No';
    }

    /**
     * @throws Exception
     */
    public function periodToDays($period): float
    {
        list($value, $measurement) = explode(' ', $period);

        $singularMeasurement = preg_replace('/s$/', '', $measurement);
        if (!array_key_exists($singularMeasurement, $this->periods) || !is_numeric($value)) {
            throw new Exception("{$period} is not a valid time period.");
        }

        return ((float)$value * $this->periods[$singularMeasurement]);
    }

}
<?php

namespace SeAT\util;

use Exception;
use Symfony\Component\Yaml\Yaml;

class InstanceConfigurationExtractorUtility extends ConfigurationUtility
{

    protected string $appDbName;
    protected string $appDbUser;
    protected string $instancePath;

    /**
     * @throws Exception
     */
    public function __construct($instancePath)
    {
        $this->instancePath = $instancePath;
        $this->init();
    }

    public function getAppDbName(): string
    {
        return $this->appDbName;
    }

    public function getAppDbUser(): string
    {
        return $this->appDbUser;
    }

    /**
     * @throws Exception
     */
    protected function init()
    {
        $configPath = $this->getDatabaseConfigFilePath($this->instancePath);
        $dbConfig = Yaml::parseFile($configPath, Yaml::PARSE_OBJECT);
        if (isset($dbConfig['all']['doctrine']['param']['dsn'])) {
            $dsn = $dbConfig['all']['doctrine']['param']['dsn'];
            $this->dsn = $dsn;
            $this->appDbName = $this->extractDbNameFromDsn($dsn);
            $this->appDbUser = $dbConfig['all']['doctrine']['param']['username'];
        } else {
            throw new Exception("Database configuration is invalid.");
        }
    }

    /**
     *
     * @todo: This logic is duplicated. Need to extract to a centralize place
     */
    protected function getDatabaseConfigFilePath(string $basePath): string
    {
        return implode(DIRECTORY_SEPARATOR, [$basePath, 'symfony', 'config', 'databases.yml']);
    }

    /**
     * @throws Exception
     */
    protected final function extractDbNameFromDsn($dsn)
    {
        $matches = [];
        preg_match('/dbname=([a-zA-Z0-9_]+)/', $dsn, $matches);
        if (count($matches) > 1) {
            return $matches[1];
        } else {
            throw new Exception("It appears that DSN is malformed.");
        }
    }

}
<?php

namespace SeAT\util;

use Exception;
use SeAT\validation\DatabaseConfigValidation;
use SeAT\validation\DatabaseConnectionValidation;
use SeAT\validation\IsAnOrangeHRMInstanceValidation;
use SeAT\validation\PathExistsValidation;
use SeAT\validation\Validation;

class EnvironmentValidator {

    protected $validators = [];
    protected $errors = [];
    protected $warnings = [];
    protected $infoMessages = [];
    protected $parsed = false;
    protected $valid = false;
    protected $path;

    protected string $dbRootUser;
    protected string $dbRootPassword;

    public function getPath(): string {
        return $this->path;
    }

    public function setPath($path): void {
        $this->path = $path;
    }

    public function getDbRootUser(): string
    {
        return $this->dbRootUser;
    }

    public function setDbRootUser(string $dbRootUser): void
    {
        $this->dbRootUser = $dbRootUser;
    }

    public function getDbRootPassword(): string
    {
        return $this->dbRootPassword;
    }

    public function setDbRootPassword(string $dbRootPassword): void
    {
        $this->dbRootPassword = $dbRootPassword;
    }

    /**
     * @throws Exception
     */
    public function isValid(): bool {
        if (!$this->parsed) {
            $this->parse();
            $this->parsed = true;
        }
        return $this->valid;
    }

    public function canProceed(): bool {
        return (count($this->errors) === 0);
    }

    /**
     * @throws Exception
     */
    public function getErrors(): array {
        if (!$this->parsed) {
            $this->parse();
            $this->parsed = true;
        }
        return $this->errors;
    }

    /**
     * @throws Exception
     */
    public function getWarnings(): array {
        if (!$this->parsed) {
            $this->parse();
            $this->parsed = true;
        }
        return $this->warnings;
    }

    /**
     * @throws Exception
     */
    public function getInfoMessages(): array {
        if (!$this->parsed) {
            $this->parse();
            $this->parsed = true;
        }
        return $this->infoMessages;
    }

    /**
     * @throws Exception
     */
    protected final function parse(): void {

        $dba = new DatabaseAccessUtility();
        $configUtil = new InstanceConfigurationExtractorUtility($this->path);
        $configUtil->setDbRootUser($this->getDbRootUser());
        $configUtil->setDbRootPassword($this->getDbRootPassword());
        $dba->setConfigUtility($configUtil);

        $this->validators = [
            new PathExistsValidation($this->path),
            new IsAnOrangeHRMInstanceValidation($this->path),
            new DatabaseConfigValidation($this->path),
            new DatabaseConnectionValidation($this->path, ['dba' => $dba]),
        ];

        $valid = true;
        $errors = [];
        $warnings = [];
        $infoMessages = [];

        foreach ($this->validators as $validator) {
            $isValid = $validator->isValid();
            $valid = $valid && $isValid;

            if ($isValid) {
                $infoMessages[] = $validator->getComment();
            } else {
                if ($validator->isCritical()) {
                    $errors[] = $validator->getComment();
                    break;
                } else {
                    $warnings[] = $validator->getComment();
                }
            }
        }

        $this->errors = $errors;
        $this->warnings = $warnings;
        $this->infoMessages = $infoMessages;
        $this->valid = $valid;
    }

}
<?php

namespace SeAT\util;

use Exception;

class CacheManagerUtility {

    protected $cachePath;
    protected $configPath;

    public function __construct() {
        $this->init();
    }

    public final function build(): void {
        $this->clean();

        $dir = opendir($this->configPath);
        while ($file = readdir($dir)) {
            if (preg_match('/\.json$/', $file)) {
                $content = file_get_contents($this->configPath . DIRECTORY_SEPARATOR . $file);
                $configObj = json_decode($content, true);
                if ($configObj === false) {
                    // TODO: Warn
                } else {
                    $variable = preg_replace('/\.json$/', '', $file);
                    $cacheFile = "{$variable}.php";
                    $cacheContent = "<?php\n\${$variable} = " . var_export($configObj, true) . ";\n";
                    file_put_contents($this->cachePath . DIRECTORY_SEPARATOR . $cacheFile, $cacheContent);
                }
            }
        }
    }

    /**
     * @throws Exception
     */
    public function load(string $configuration): array {
        $path = $this->cachePath . DIRECTORY_SEPARATOR . "{$configuration}.php";
        if (file_exists($path)) {
            include $path;
            return $$configuration;
        } else {
            throw new Exception("Cache for {$configuration} doesn't exist at {$path}.");
        }
    }

    protected function init() {
        $this->cachePath = implode(DIRECTORY_SEPARATOR, [ROOT_PATH, '..', 'cache']);
        $this->configPath = implode(DIRECTORY_SEPARATOR, [ROOT_PATH, '..', 'config']);
    }

    protected final function clean(): void {
        $dir = opendir($this->cachePath);
        while ($file = readdir($dir)) {
            if ($file === '.' || $file === '..' || $file === '.deleteme') {
                continue;
            }
            unlink($this->cachePath . DIRECTORY_SEPARATOR . $file);
        }
    }

}
<?php

namespace SeAT\util;

class ConfigurationUtility
{

    protected string $dsn;
    protected string $dbRootUser = 'root';
    protected string $dbRootPassword = '';

    public function getDsn(): string
    {
        return $this->dsn;
    }

    public function setDsn(string $dsn)
    {
        $this->dsn = $dsn;
    }

    public function getDbRootUser(): string
    {
        return $this->dbRootUser;
    }

    public function setDbRootUser(string $dbRootUser)
    {
        $this->dbRootUser = $dbRootUser;
    }

    public function getDbRootPassword(): string
    {
        return $this->dbRootPassword;
    }

    public function setDbRootPassword(string $dbRootPassword)
    {
        $this->dbRootPassword = $dbRootPassword;
    }

}
<?php

namespace SeAT\util;

use PDO;
use SeAT\util\ConfigurationUtility;

class DatabaseAccessUtility {

    /**
     *
     * @var PDO
     */
    protected $conn;
    protected $configUtility;
    protected $tables = [];
    protected $tableColumns = [];

    public function getConfigUtility(): ConfigurationUtility {
        return $this->configUtility;
    }

    public function setConfigUtility(ConfigurationUtility $configUtility) {
        $this->configUtility = $configUtility;
    }

    public function connect(): bool {
        if (!($this->conn instanceof PDO)) {
            $config = $this->getConfigUtility();
            $this->conn = new PDO($config->getDsn(), $config->getDbRootUser(), $config->getDbRootPassword());
        }
        return (bool) $this->conn;
    }

    public function tableExists($table): bool
    {
        if (empty($this->tables)) {
            $this->tables = $this->fetchScalar("SHOW TABLES;");
        }
        return in_array($table, $this->tables);
    }

    public function columnExists($column, $table): bool
    {
        if (!$this->tableExists($table)) {
            return false;
        }

        if (!array_key_exists($table, $this->tableColumns)) {
            $this->tableColumns[$table] = $this->fetchScalar("DESC `{$table}`");
        }

        return in_array($column, $this->tableColumns[$table]);
    }

    public function fetchOne($query, $params = []) {
        $stmt = $this->conn->prepare($query);
        $stmt->execute($params);
        return $stmt->fetchColumn();
    }

    public function fetchAll($query, $params = []) {
        $stmt = $this->conn->prepare($query);
        $stmt->execute($params);
        return $stmt->fetchAll(PDO::FETCH_ASSOC);
    }

    public function fetchScalar($query, $params = []) {
        $stmt = $this->conn->prepare($query);
        $stmt->execute($params);
        return $stmt->fetchAll(PDO::FETCH_COLUMN);
    }

    public function fetchKeyValuePairs($query, $executeParameters = []) {
        $stmt = $this->conn->prepare($query);
        $stmt->execute($executeParameters);
        return $stmt->fetchAll(PDO::FETCH_KEY_PAIR);
    }

}
<?php

namespace SeAT\util;

use Exception;

class CronExpressionDecoderUtility
{

    protected array $a = [];
    protected array $months = [
        1 => 'January',
        2 => 'February',
        3 => 'March',
        4 => 'April',
        5 => 'May',
        6 => 'June',
        7 => 'July',
        8 => 'August',
        9 => 'September',
        10 => 'October',
        11 => 'November',
        12 => 'December',
    ];
    protected array $daysOfWeek = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'];
    protected string $repeatMatch = '/\*\/([0-9]+)/';
    protected string $definitiveMatch = '/^[0-9]+/';

    /**
     *
     * @throws Exception
     */
    public function decode(string $cronExpression): string
    {

        $portions = preg_split('/\s{1,}/', trim($cronExpression));

        if (count($portions) !== 5) {
            throw new Exception("Cron expression should consist of 5 parts. (Passed: {$cronExpression})");
        }

        $this->a = array();

        $this->interpretTime($portions[0], $portions[1]);
        $this->interpretDayOfMonth($portions[2]);
        $this->interpretDayOfWeek($portions[4]);
        $this->interpretMonth($portions[3]);

        return ucfirst(implode(', ', $this->a));
    }

    protected function interpretTime(string $minute, string $hour)
    {
        $m = [];
        $n = [];

        $minutesAreAll = ($minute === '*');
        $hoursAreAll = ($hour === '*');
        $minutesAreRepetitive = preg_match($this->repeatMatch, $minute, $m);
        $hoursAreRepetitive = preg_match($this->repeatMatch, $hour, $n);
        $minutesAreDefinitive = preg_match($this->definitiveMatch, $minute);
        $hoursAreDefinitive = preg_match($this->definitiveMatch, $hour);

        if ($minutesAreAll && $hoursAreAll) {
            $this->a[] = 'every minute';
        } elseif ($minutesAreRepetitive && $hoursAreAll) {
            $this->a[] = "every {$this->pluralize((int) $m[1], 'minute')}";
        } elseif ($hoursAreRepetitive && $minutesAreAll) {
            $this->a[] = "Every minute, every {$this->pluralize((int) $n[1], 'hour')}";
        } elseif ($minutesAreRepetitive && $hoursAreRepetitive) {
            $this->a[] = "every {$this->pluralize((int) $m[1], 'minute')}";
            $this->a[] = "every {$this->pluralize((int) $n[1], 'hour')}";
        } elseif ($minutesAreDefinitive && $hoursAreAll) {
            $this->a[] = "at {$this->pluralize((int) $minute, 'minute')} past the hour";
        } elseif ($hoursAreDefinitive && $minutesAreAll) {
            $this->a[] = "every minute, at {$this->time($minute, $hour)}";
        } elseif ($minutesAreDefinitive && $hoursAreDefinitive) {
            $this->a[] = "at {$this->time($minute, $hour)}";
        } elseif ($minutesAreDefinitive && $hoursAreRepetitive) {
            $this->a[] = "at {$this->pluralize((int) $minute, 'minute')} past the hour";
            $this->a[] = "every {$this->pluralize((int) $n[1], 'hour')}";
        } elseif ($minutesAreRepetitive && $hoursAreDefinitive) {
            $this->a[] = "every {$this->pluralize((int) $m[1], 'minute')}";
            $this->a[] = "at {$this->time('00', $hour)}";
        }
    }

    protected function interpretDayOfWeek(string $dayOfWeek): void
    {
        if ($dayOfWeek === '*') {
            return;
        } elseif (preg_match($this->repeatMatch, $dayOfWeek, $d)) {
            $this->a[] = "every {$this->pluralize($d[1], 'day')} of the week";
        } elseif (preg_match($this->definitiveMatch, $dayOfWeek)) {
            $this->a[] = "only on {$this->daysOfWeek[$dayOfWeek]}";
        }
    }

    protected function interpretDayOfMonth(string $dayOfMonth): void
    {
        $d = array();
        if ($dayOfMonth === '*') {
            return;
        } elseif (preg_match($this->repeatMatch, $dayOfMonth, $d)) {
            $this->a[] = "every {$this->pluralize($d[1], 'day')}";
        } elseif (preg_match($this->definitiveMatch, $dayOfMonth)) {
            $this->a[] = "on day {$dayOfMonth} of the month";
        }
    }

    protected function interpretMonth($month)
    {
        $m = array();
        if ($month === '*') {
            return;
        } elseif (preg_match($this->repeatMatch, $month, $m)) {
            $this->a[] = "every {$this->pluralize($m[1], 'month')}";
        } elseif (preg_match($this->definitiveMatch, $month)) {
            $this->a[] = "only in {$this->months[$month]}";
        }
    }

    protected final function pluralize(int $number, string $noun): string
    {
        if ($number > 1) {
            return "{$number} {$noun}s";
        }
        return $noun;
    }

    protected final function time(string $minute, string $hour): string
    {
        $d = strtotime(str_replace('*', '00', "{$hour}:{$minute}"));
        return date('h:i A', $d);
    }

}
<?php

namespace SeAT\validation;

class IsAnOrangeHRMInstanceValidation extends BaseValidation {

    protected function parse(): void {
        $confPath = $this->getDatabaseConfigFilePath($this->param);
        $this->valid = (is_file($confPath) && is_readable($confPath));
        $this->comment = $this->valid ? "Directory {$this->param} is a valid OrangeHRM instance." : "Path {$this->param} doesn't seem to be a valid OrangeHRM installation.";
        $this->critical = true;
    }

}
<?php

namespace SeAT\validation;

class PathExistsValidation extends BaseValidation {

    protected function parse(): void {
        $this->valid = (is_dir($this->param));
        $this->comment = $this->valid ? "{$this->param} exists." : "Path {$this->param} doesn't exist or is not a directory.";
        $this->critical = true;
    }

}
<?php

namespace SeAT\validation;

interface Validation {

    public function isValid(): bool;

    public function getComment(): string;
}
<?php

namespace SeAT\validation;

abstract class BaseValidation implements Validation
{

    protected $param;
    protected $dependencies;
    protected $parsed = false;
    protected $valid = false;
    protected $critical = false;
    protected $comment = null;

    abstract protected function parse(): void;

    public function __construct($param, array $dependencies = [])
    {
        $this->param = $param;
        $this->dependencies = $dependencies;
    }

    final public function getComment(): string
    {
        if (!$this->parsed) {
            $this->parse();
            $this->parsed = true;
        }
        return $this->comment;
    }

    final public function isValid(): bool
    {
        if (!$this->parsed) {
            $this->parse();
            $this->parsed = true;
        }
        return $this->valid;
    }

    final public function isCritical(): bool
    {
        if (!$this->parsed) {
            $this->parse();
            $this->parsed = true;
        }
        return $this->critical;
    }

    protected function getDatabaseConfigFilePath($basePath): string
    {
        return implode(DIRECTORY_SEPARATOR, [$basePath, 'symfony', 'config', 'databases.yml']);
    }
}
<?php

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

namespace SeAT\validation;

use Exception;

class DatabaseConnectionValidation extends BaseValidation
{

    protected function parse(): void
    {
        $dba = $this->dependencies['dba'];
        try {
            $this->valid = $dba->connect();
            $this->comment = $this->valid ? "Connected to database successfully." : "Couldn't connect to database.";
        } catch (Exception $e) {
            $this->valid = false;
            $this->comment = "An exception occurred while connecting to the database. (Details: {$e->getMessage()})";
        }
    }

}
<?php

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

namespace SeAT\validation;

use Symfony\Component\Yaml\Yaml;

/**
 * Description of DatabaseConfigValidation
 *
 * @author madhusanka
 */
class DatabaseConfigValidation extends BaseValidation {

    protected function parse(): void {
        $configPath = $this->getDatabaseConfigFilePath($this->param);
        $dbConfig = Yaml::parseFile($configPath, Yaml::PARSE_OBJECT);

        $this->valid = isset($dbConfig['all']['doctrine']['param']['dsn']);
        $this->valid = $this->valid && isset($dbConfig['all']['doctrine']['param']['username']);
        $this->valid = $this->valid && isset($dbConfig['all']['doctrine']['param']['password']);

        $this->comment = "Database configurations from {$this->param} is " . ($this->valid ? "setup correctly" : "invalid") . ".";
    }

}
<?php
$check_rules = array (
  'ActionPerformerCheck' => 
  array (
  ),
  'ActiveEmployeesCheck' => 
  array (
  ),
  'ApplicationConfigurationCheck' => 
  array (
  ),
  'AutomaticUpdatesCheck' => 
  array (
  ),
  'BackupsCheck' => 
  array (
  ),
  'BuildEncryptionCheck' => 
  array (
  ),
  'CheckCollection' => 
  array (
  ),
  'CountryWiseEmployeeCountCheck' => 
  array (
  ),
  'CurrentDateTimeCheck' => 
  array (
  ),
  'DatabaseParametersCheck' => 
  array (
  ),
  'DatabaseVersionCheck' => 
  array (
  ),
  'DatabaseDefaultStorageEngineCheck' => 
  array (
  ),
  'DatabaseFileFormatCheck' => 
  array (
  ),
  'DatabaseSizeCheck' => 
  array (
  ),
  'DatabaseTimeCheck' => 
  array (
  ),
  'DirectoryPermissionsCheck' => 
  array (
  ),
  'DiskUsageCheck' => 
  array (
  ),
  'DiskUtilizationCheck' => 
  array (
  ),
  'DomainCheck' => 
  array (
  ),
  'EmailQueueCheck' => 
  array (
  ),
  'FilePermissionsCheck' => 
  array (
  ),
  'FirewallCheck' => 
  array (
  ),
  'FutureLeaveRequestsCheck' => 
  array (
  ),
  'HardwareClockTimeCheck' => 
  array (
  ),
  'HardwareMonitoringAvailabilityCheck' => 
  array (
  ),
  'HelpAndTrainingPortalUsageCheck' => 
  array (
  ),
  'HostedWithDbRootUserCheck' => 
  array (
  ),
  'HostNameCheck' => 
  array (
  ),
  'HttpdDeflateModuleCheck' => 
  array (
  ),
  'HttpdRewriteModuleCheck' => 
  array (
  ),
  'HttpdSslModuleCheck' => 
  array (
  ),
  'HttpdVersionCheck' => 
  array (
  ),
  'HttpdWebRootCheck' => 
  array (
  ),
  'HttpHeaderXFrameOptionsCheck' => 
  array (
  ),
  'HttpPortCheck' => 
  array (
  ),
  'HttpsPortCheck' => 
  array (
  ),
  'InstallationDirectoryCheck' => 
  array (
  ),
  'InstanceHostedDateCheck' => 
  array (
  ),
  'InstanceVersionCheck' => 
  array (
  ),
  'KernelVersionCheck' => 
  array (
  ),
  'LeaveAccrualAndCarryForwardScheduleCheck' => 
  array (
  ),
  'LeaveRequestDistributionCheck' => 
  array (
  ),
  'LoginDistributionCheck' => 
  array (
  ),
  'ManualPatchApplicationCheck' => 
  array (
  ),
  'MostRecentLoginDetailsCheck' => 
  array (
  ),
  'MultiplePhpConfigDiffCheck' => 
  array (
  ),
  'MultiplePhpConfigFileCheck' => 
  array (
  ),
  'NavigationTrackingCheck' => 
  array (
  ),
  'NotImplementedCheck' => 
  array (
  ),
  'OperatingSystemAndVersionCheck' => 
  array (
  ),
  'OperatingSystemTimeCheck' => 
  array (
  ),
  'OperatingSystemTimezoneCheck' => 
  array (
  ),
  'OrganizationNameCheck' => 
  array (
  ),
  'PhpExtensionsCheck' => 
  array (
  ),
  'PhpParametersCheck' => 
  array (
  ),
  'PhpSapiCheck' => 
  array (
  ),
  'PhpTimeCheck' => 
  array (
  ),
  'PhpTimezoneCheck' => 
  array (
  ),
  'PhpVersionCheck' => 
  array (
  ),
  'PimActivityDistributionCheck' => 
  array (
  ),
  'ScheduledTasksCheck' => 
  array (
  ),
  'SecurityEnforcingCheck' => 
  array (
  ),
  'UuidCheck' => 
  array (
  ),
  'VirtualHostFilenameCheck' => 
  array (
  ),
  'TLSCertificateCheck' => 
  array (
  ),
);
<?php
$full_checks_set = array (
  'Report Details' => 
  array (
    'resultType' => 'composite-table-segment',
    'headers' => 
    array (
    ),
    'checks' => 
    array (
      'Organization Name' => 'OrganizationNameCheck',
      'UUID' => 'UuidCheck',
      'OrangeHRM Version' => 'InstanceVersionCheck',
      'Created At' => 'CurrentDateTimeCheck',
      'Created By' => 'ActionPerformerCheck',
    ),
    'supressed' => 
    array (
    ),
  ),
  'Build and Installation' => 
  array (
    'resultType' => 'composite-table-segment',
    'headers' => 
    array (
      'Parameter' => 'parameter',
      'Value' => 'value',
      'Flag' => 'flag',
      'Comment / Recommendation' => 'comment',
    ),
    'checks' => 
    array (
      'Server' => 'HostNameCheck',
      'Hosted URL' => 'DomainCheck',
      'Installation Directory' => 'InstallationDirectoryCheck',
      'Operating System Timezone' => 'OperatingSystemTimezoneCheck',
      'PHP Timezone' => 'PhpTimezoneCheck',
      'Hosted/Upgraded Date' => 'InstanceHostedDateCheck',
      'Is Build Encrypted?' => 'BuildEncryptionCheck',
      'VHost Filename' => 'VirtualHostFilenameCheck',
      'Is Deployed with root Account?' => 'HostedWithDbRootUserCheck',
      'Database Size' => 'DatabaseSizeCheck',
    ),
  ),
  'Hardware Information' => 
  array (
    'resultType' => 'composite-table-segment',
    'headers' => 
    array (
      'Parameter' => 'Component',
      'Value' => 'value',
      'Flag' => 'flag',
      'Comment / Recommendation' => 'comment',
    ),
    'checks' => 
    array (
      'Processor' => 'CpuCheck',
      'Memory' => 'MemoryCheck',
      'Disk Drives' => 'SsdCheck',
    ),
  ),
  'Operating System Information' => 
  array (
    'resultType' => 'composite-table-segment',
    'headers' => 
    array (
      'Parameter' => 'parameter',
      'Value' => 'value',
      'Flag' => 'flag',
      'Comment / Recommendation' => 'comment',
    ),
    'checks' => 
    array (
      'Operating System' => 'OperatingSystemAndVersionCheck',
      'Kernel / OS Version' => 'KernelVersionCheck',
      'Automatic Updates Enabled?' => 'AutomaticUpdatesCheck',
      'Manual Patches Added?' => 'ManualPatchApplicationCheck',
      'Security Enforcing (SELinux, etc) - Runtime' => 'SecurityEnforcingRuntimeCheck',
      'Security Enforcing (SELinux, etc) - Persistent' => 'SecurityEnforcingPersistentCheck',
      'Is Hardware Monitoring Available' => 'HardwareMonitoringAvailabilityCheck',
      'Server Name' => 'HostNameCheck',
      'Operating System Timezone' => 'OperatingSystemTimezoneCheck',
    ),
  ),
  'Middleware Information' => 
  array (
    'resultType' => 'composite-table-segment',
    'headers' => 
    array (
      'Parameter' => 'parameter',
      'Value' => 'value',
      'Flag' => 'flag',
      'Comment / Recommendation' => 'comment',
    ),
    'checks' => 
    array (
      'PHP Version' => 'PhpVersionCheck',
      'Apache / IIS Version' => 'HttpdVersionCheck',
      'MariaDB / MySQL Version' => 'DatabaseVersionCheck',
    ),
    'supressed' => 
    array (
      'Automatic Updates Enabled? (AMP)' => 'NotImplementedCheck',
      'Last Automatic Update On' => 'NotImplementedCheck',
      'Manual Patches Added? (AMP)' => 'NotImplementedCheck',
    ),
  ),
  'Time Settings' => 
  array (
    'resultType' => 'composite-table-segment',
    'headers' => 
    array (
    ),
    'checks' => 
    array (
      'Operating System Time' => 'OperatingSystemTimeCheck',
      'Hardware Clock Time' => 'HardwareClockTimeCheck',
      'PHP Time' => 'PhpTimeCheck',
      'MariaDB / MySQL Server Time' => 'DatabaseTimeCheck',
    ),
  ),
  'PHP Extensions' => 
  array (
    'resultType' => 'composite-table-segment',
    'headers' => 
    array (
      'Extension' => 'name',
      'Installed' => 'installed',
      'Flag' => 'flag',
      'Comment / Recommendation' => 'comment',
    ),
    'checks' => 
    array (
      'PHP Extensions' => 'PhpExtensionsCheck',
    ),
  ),
  'PHP Parameters' => 
  array (
    'resultType' => 'composite-table-segment',
    'headers' => 
    array (
      'Configuration Parameter' => 'name',
      'Value' => 'value',
      'Flag' => 'flag',
      'Comment / Recommendation' => 'comment',
    ),
    'checks' => 
    array (
      'PHP Parameters' => 'PhpParametersCheck',
    ),
  ),
  'PHP Settings' => 
  array (
    'resultType' => 'composite-table-segment',
    'headers' => 
    array (
      'Setting' => 'description',
      'Value' => 'value',
      'Flag' => 'flag',
      'Comment / Recommendation' => 'comment',
    ),
    'checks' => 
    array (
      'Is PHP loaded as an Apache module?' => 'PhpSapiCheck',
      'Do separate php.ini files exist for CLI and Apache?' => 'MultiplePhpConfigFileCheck',
      'Settings of php.ini for CLI and Apache are different?' => 'MultiplePhpConfigDiffCheck',
    ),
  ),
  'MySQL / MariaDB Configurations' => 
  array (
    'resultType' => 'composite-table-segment',
    'headers' => 
    array (
      'Configuration Parameter' => 'name',
      'Value' => 'value',
      'Flag' => 'flag',
      'Comment / Recommendation' => 'comment',
    ),
    'checks' => 
    array (
      'DatabaseParameters' => 'DatabaseParametersCheck',
    ),
  ),
  'MySQL / MariaDB Settings' => 
  array (
    'resultType' => 'composite-table-segment',
    'headers' => 
    array (
      'Setting' => 'description',
      'Value' => 'value',
      'Flag' => 'flag',
      'Comment / Recommendation' => 'comment',
    ),
    'checks' => 
    array (
      'Default Storage Engine' => 'DatabaseDefaultStorageEngineCheck',
      'File format' => 'DatabaseFileFormatCheck',
    ),
  ),
  'HTTP Service Configurations' => 
  array (
    'resultType' => 'composite-table-segment',
    'headers' => 
    array (
      'Configuration Parameter' => 'description',
      'Value' => 'value',
      'Flag' => 'flag',
      'Comment / Recommendation' => 'comment',
    ),
    'checks' => 
    array (
      'HTTP Port' => 'HttpPortCheck',
      'HTTPS Port' => 'HttpsPortCheck',
      'mod_rewrite' => 'HttpdRewriteModuleCheck',
      'mod_deflate' => 'HttpdDeflateModuleCheck',
      'mod_ssl' => 'HttpdSslModuleCheck',
      'Web Root' => 'HttpdWebRootCheck',
      'HTTP Header: X-Frame-Options: sameorigin' => 'HttpHeaderXFrameOptionsCheck',
      'TLS Certificate Issuer' => 'TLSCertificateCheck',
    ),
  ),
  'RabbitMQ' => 
  array (
    'resultType' => 'composite-table-segment',
    'headers' => 
    array (
      'Parameter' => 'description',
      'Value' => 'value',
      'Flag' => 'flag',
      'Comment / Recommendation' => 'comment',
    ),
    'checks' => 
    array (
      'RabbitMQ' => 'RabbitMqCheck',
    ),
  ),
  'Utility Packages' => 
  array (
    'resultType' => 'composite-table-segment',
    'headers' => 
    array (
      'Package' => 'description',
      'Installed and Working?' => 'value',
      'Flag' => 'flag',
      'Comment / Recommendation' => 'comment',
    ),
    'checks' => 
    array (
      'soffice' => 'SofficeInstallationCheck',
      'wkpdf' => 'WkpdfInstallationCheck',
      'poppler-utils' => 'PopplerUtilsInstallationCheck',
      'libXext' => 'LibXextInstallationCheck',
    ),
  ),
  'Application Config' => 
  array (
    'resultType' => 'composite-table-segment',
    'headers' => 
    array (
      'Parameter' => 'description',
      'Value' => 'value',
      'Flag' => 'flag',
      'Comment / Recommendation' => 'comment',
    ),
    'checks' => 
    array (
      'DatabaseParameters' => 'ApplicationConfigurationCheck',
    ),
  ),
  'Directory Permissions' => 
  array (
    'resultType' => 'composite-table-segment',
    'headers' => 
    array (
      'Directory' => 'description',
      'Owner / Group / Permissions' => 'value',
      'flag' => 'group',
      'Comments / Recommendations' => 'comments',
    ),
    'checks' => 
    array (
      'Directory Permissions' => 'DirectoryPermissionsCheck',
    ),
  ),
  'File Permissions' => 
  array (
    'resultType' => 'composite-table-segment',
    'headers' => 
    array (
      'Directory' => 'description',
      'Owner / Group / Permissions' => 'value',
      'flag' => 'group',
      'Comments / Recommendations' => 'comments',
    ),
    'checks' => 
    array (
      'Directory Permissions' => 'FilePermissionsCheck',
    ),
  ),
  'Disk Usage' => 
  array (
    'resultType' => 'composite-table-segment',
    'headers' => 
    array (
      'Mount Point / File System' => 'description',
      'Size / Free Space / Used inodes %' => 'value',
      'Flag' => 'flag',
      'Comments / Recommendations' => 'comments',
    ),
    'checks' => 
    array (
      'Disk Usage' => 'DiskUsageCheck',
    ),
  ),
  'Disk Partitioning' => 
  array (
    'resultType' => 'composite-table-segment',
    'headers' => 
    array (
      'Check' => 'description',
      'Value' => 'value',
      'Flag' => 'flag',
      'Comments / Recommendations' => 'comments',
    ),
    'checks' => 
    array (
      '/var setup in a separate directory?' => 'VarInDedicatedPartitionCheck',
      'Database data directory in a separate directory?' => 'DataDirInDedicatedPartitionCheck',
    ),
  ),
  'Backups' => 
  array (
    'resultType' => 'composite-table-segment',
    'headers' => 
    array (
      'Backup Aspect' => 'backupAspect',
      'Status' => 'status',
      'Flag' => 'flag',
      'Comments / Recommendations' => 'comments',
    ),
    'checks' => 
    array (
      'Backups' => 'BackupsCheck',
    ),
    'supressed' => 
    array (
    ),
  ),
  'Leave Accrual and Carry Forward Schedule' => 
  array (
    'resultType' => 'composite-table-segment',
    'headers' => 
    array (
      'Operational Country' => 'backupAspect',
      'Location' => 'status',
      'Accrual Time' => 'flag',
      'C/F Time' => 'comments',
    ),
    'checks' => 
    array (
      'Leave Accrual and Carry Forward Schedule' => 'LeaveAccrualAndCarryForwardScheduleCheck',
    ),
  ),
  'Scheduled Tasks' => 
  array (
    'resultType' => 'composite-table-segment',
    'headers' => 
    array (
      'Name' => 'backupAspect',
      'Schedule' => 'status',
      'Last Run' => 'flag',
      'Status' => 'comments',
    ),
    'checks' => 
    array (
      'Tasks' => 'ScheduledTasksCheck',
    ),
  ),
);
<?php
$initial_checks_set = array (
  'Report Details' => 
  array (
    'resultType' => 'composite-table-segment',
    'headers' => 
    array (
    ),
    'checks' => 
    array (
      'Created At' => 'CurrentDateTimeCheck',
      'Created By' => 'ActionPerformerCheck',
    ),
    'supressed' => 
    array (
    ),
  ),
  'Hardware Information' => 
  array (
    'resultType' => 'composite-table-segment',
    'headers' => 
    array (
      'Parameter' => 'Component',
      'Value' => 'value',
      'Flag' => 'flag',
      'Comment / Recommendation' => 'comment',
    ),
    'checks' => 
    array (
      'Processor' => 'CpuCheck',
      'Memory' => 'MemoryCheck',
      'Disk Drives' => 'SsdCheck',
    ),
  ),
  'Operating System Information' => 
  array (
    'resultType' => 'composite-table-segment',
    'headers' => 
    array (
      'Parameter' => 'parameter',
      'Value' => 'value',
      'Flag' => 'flag',
      'Comment / Recommendation' => 'comment',
    ),
    'checks' => 
    array (
      'Operating System' => 'OperatingSystemAndVersionCheck',
      'Kernel / OS Version' => 'KernelVersionCheck',
      'Automatic Updates Enabled?' => 'AutomaticUpdatesCheck',
      'Manual Patches Added?' => 'ManualPatchApplicationCheck',
      'Security Enforcing (SELinux, etc) - Runtime' => 'SecurityEnforcingRuntimeCheck',
      'Security Enforcing (SELinux, etc) - Persistent' => 'SecurityEnforcingPersistentCheck',
      'Is Hardware Monitoring Available' => 'HardwareMonitoringAvailabilityCheck',
      'Server Name' => 'HostNameCheck',
      'Operating System Timezone' => 'OperatingSystemTimezoneCheck',
    ),
  ),
  'Middleware Information' => 
  array (
    'resultType' => 'composite-table-segment',
    'headers' => 
    array (
      'Parameter' => 'parameter',
      'Value' => 'value',
      'Flag' => 'flag',
      'Comment / Recommendation' => 'comment',
    ),
    'checks' => 
    array (
      'PHP Version' => 'PhpVersionCheck',
      'Apache / IIS Version' => 'HttpdVersionCheck',
      'MariaDB / MySQL Version' => 'DatabaseVersionCheck',
    ),
    'supressed' => 
    array (
      'Automatic Updates Enabled? (AMP)' => 'NotImplementedCheck',
      'Last Automatic Update On' => 'NotImplementedCheck',
      'Manual Patches Added? (AMP)' => 'NotImplementedCheck',
    ),
  ),
  'Time Settings' => 
  array (
    'resultType' => 'composite-table-segment',
    'headers' => 
    array (
    ),
    'checks' => 
    array (
      'Operating System Time' => 'OperatingSystemTimeCheck',
      'Hardware Clock Time' => 'HardwareClockTimeCheck',
      'PHP Time' => 'PhpTimeCheck',
      'MariaDB / MySQL Server Time' => 'DatabaseTimeCheck',
    ),
  ),
  'PHP Extensions' => 
  array (
    'resultType' => 'composite-table-segment',
    'headers' => 
    array (
      'Extension' => 'name',
      'Installed' => 'installed',
      'Flag' => 'flag',
      'Comment / Recommendation' => 'comment',
    ),
    'checks' => 
    array (
      'PHP Extensions' => 'PhpExtensionsCheck',
    ),
  ),
  'PHP Parameters' => 
  array (
    'resultType' => 'composite-table-segment',
    'headers' => 
    array (
      'Configuration Parameter' => 'name',
      'Value' => 'value',
      'Flag' => 'flag',
      'Comment / Recommendation' => 'comment',
    ),
    'checks' => 
    array (
      'PHP Parameters' => 'PhpParametersCheck',
    ),
  ),
  'PHP Settings' => 
  array (
    'resultType' => 'composite-table-segment',
    'headers' => 
    array (
      'Setting' => 'description',
      'Value' => 'value',
      'Flag' => 'flag',
      'Comment / Recommendation' => 'comment',
    ),
    'checks' => 
    array (
      'Is PHP loaded as an Apache module?' => 'PhpSapiCheck',
      'Do separate php.ini files exist for CLI and Apache?' => 'MultiplePhpConfigFileCheck',
      'Settings of php.ini for CLI and Apache are different?' => 'MultiplePhpConfigDiffCheck',
    ),
  ),
  'MySQL / MariaDB Configurations' => 
  array (
    'resultType' => 'composite-table-segment',
    'headers' => 
    array (
      'Configuration Parameter' => 'name',
      'Value' => 'value',
      'Flag' => 'flag',
      'Comment / Recommendation' => 'comment',
    ),
    'checks' => 
    array (
      'DatabaseParameters' => 'DatabaseParametersCheck',
    ),
  ),
  'MySQL / MariaDB Settings' => 
  array (
    'resultType' => 'composite-table-segment',
    'headers' => 
    array (
      'Setting' => 'description',
      'Value' => 'value',
      'Flag' => 'flag',
      'Comment / Recommendation' => 'comment',
    ),
    'checks' => 
    array (
      'Default Storage Engine' => 'DatabaseDefaultStorageEngineCheck',
      'File format' => 'DatabaseFileFormatCheck',
    ),
  ),
  'HTTP Service Configurations' => 
  array (
    'resultType' => 'composite-table-segment',
    'headers' => 
    array (
      'Configuration Parameter' => 'description',
      'Value' => 'value',
      'Flag' => 'flag',
      'Comment / Recommendation' => 'comment',
    ),
    'checks' => 
    array (
      'HTTP Port' => 'HttpPortCheck',
      'HTTPS Port' => 'HttpsPortCheck',
      'mod_rewrite' => 'HttpdRewriteModuleCheck',
      'mod_deflate' => 'HttpdDeflateModuleCheck',
      'mod_ssl' => 'HttpdSslModuleCheck',
      'Web Root' => 'HttpdWebRootCheck',
      'HTTP Header: X-Frame-Options: sameorigin' => 'HttpHeaderXFrameOptionsCheck',
      'TLS Certificate Issuer' => 'TLSCertificateCheck',
    ),
  ),
  'RabbitMQ' => 
  array (
    'resultType' => 'composite-table-segment',
    'headers' => 
    array (
      'Parameter' => 'description',
      'Value' => 'value',
      'Flag' => 'flag',
      'Comment / Recommendation' => 'comment',
    ),
    'checks' => 
    array (
      'RabbitMQ' => 'RabbitMqCheck',
    ),
  ),
  'Utility Packages' => 
  array (
    'resultType' => 'composite-table-segment',
    'headers' => 
    array (
      'Package' => 'description',
      'Installed and Working?' => 'value',
      'Flag' => 'flag',
      'Comment / Recommendation' => 'comment',
    ),
    'checks' => 
    array (
      'soffice' => 'NotImplementedCheck',
      'wkpdf' => 'NotImplementedCheck',
      'propler-utils' => 'NotImplementedCheck',
      'libXext' => 'NotImplementedCheck',
    ),
  ),
  'Disk Usage' => 
  array (
    'resultType' => 'composite-table-segment',
    'headers' => 
    array (
      'Mount Point / File System' => 'description',
      'Size / Free Space / Used inodes %' => 'value',
      'Flag' => 'flag',
      'Comments / Recommendations' => 'comments',
    ),
    'checks' => 
    array (
      'Disk Usage' => 'DiskUsageCheck',
    ),
  ),
  'Disk Partitioning' => 
  array (
    'resultType' => 'composite-table-segment',
    'headers' => 
    array (
      'Check' => 'description',
      'Value' => 'value',
      'Flag' => 'flag',
      'Comments / Recommendations' => 'comments',
    ),
    'checks' => 
    array (
      '/var setup in a separate directory?' => 'VarInDedicatedPartitionCheck',
      'Database data directory in a separate directory?' => 'DataDirInDedicatedPartitionCheck',
    ),
  ),
  'Backups' => 
  array (
    'resultType' => 'composite-table-segment',
    'headers' => 
    array (
      'Backup Aspect' => 'backupAspect',
      'Status' => 'status',
      'Flag' => 'flag',
      'Comments / Recommendations' => 'comments',
    ),
    'checks' => 
    array (
      'Backups' => 'BackupsCheck',
    ),
    'supressed' => 
    array (
    ),
  ),
);
<?php
$test-env = array (
  'instance-path' => '/var/www/html/OHRMStandalone/PROD/acme',
  'db-user' => 'root',
  'db-password' => 'V8JNV@U4qLTJ',
);
{title}
============

{Report Details}
{Summary}
{Build and Installation}
{Hardware Information}
{Operating System Information}
{Middleware Information}
{Time Settings}
{PHP Extensions}
{PHP Parameters}
{PHP Settings}
{MySQL / MariaDB Configurations}
{MySQL / MariaDB Settings}
{HTTP Service Configurations}
{RabbitMQ}
{Utility Packages}
{Application Config}
{Directory Permissions}
{File Permissions}
{Disk Usage}
{Disk Partitioning}
{Backups}

{Leave Accrual and Carry Forward Schedule}
{Scheduled Tasks}

Usage Statistics
----------------

OVERVIEW
Current Snapshot
{overviewSnapshot}

Usage Applicable for Future
{scheduledLeaveRequests}

Time Based Data
{timeBaseData}


EMPLOYEES

Active Employees
Variation of the active employee count of the past year, based on the join dates and termination dates of employee records.
{monthWiseActiveEmployeeCount}

PIM Transactions
Monthly break-down of the total number of add/edit/delete actions of employee records, based on the audit trail.
{monthWisePIMActivityDistribution}


LOGINS

User Login Pattern
Number of distinct users log-in to the system and number of active users log-in to the system.
{monthWiseLoginDistribution}


LEAVE

Monthly Leave Request Distribution
Monthly break-down of no. of past and future leave requests, based on the date where the leave is/will be taken.
{monthWiseLeaveRequestDistribution}

Monthly Leave Request Distribution By Applied Date
Monthly break-down of no. of past and future leave requests, based on the date where the leave is applied.
{leaveRequestDistributionByAppliedDate}

Leave Request Distribution by Month and Country
Monthly break-down of the number of leave requests of each operational country, based on the date of leave application.
{leaveRequestDistributionByMonthCountry}


PERFORMANCE

Performance Appraisals Based on Due Date
{monthwisePerformanceAppraisalsDistribution}


TIMESHEETS

Monthly Timesheet Usage Distribution
{monthwiseTimesheetDistribution}


ATTENDANCE

Monthly Count of Unique Employees who Used Punched In/Out
{monthwiseAttendance}


RECRUITMENT

Current of Vacancies Created in the Past 12 Months
{recruitmentData}


TRAINING/OTM

Monthly Online Training Sessions Distribution By Assigned Date
{monthwiseTrainingDistribution}


ON/OFF BOARDING

Monthly On-Boarding Task Distribution
{monthwiseOnBoardingTaskDistribution}


TRAVEL & EXPENSE

Monthly Travel Request Distribution
{monthwiseTravelRequestDistribution}

Number of Expense Claims Created in the Past 12 Monthly by Expense Type
{expenseClaimsCreated}


REQUEST DESK

Current Number of Request Types and Templates
{requestDeskSnapshot}

Monthly HR Requests Distribution
Monthly breakdown of General requests and Hiring requisitions submitted.
{monthwiseRequestDeskRequestDistribution}

EMAIL NOTIFICATION

Summary
{emailNotificationSnapshot}
<!DOCTYPE html>
<html lang="en">
    <head>
        <title>{title}</title>
        <meta charset="UTF-8">
        <style>
            body {
                font-family: sans-serif;
            }
            div {
                margin: 0.5em;
            }
            table {
                width: 100%;
                border-collapse: collapse;
            }
            td, th {
                border: solid 1px #cccccc;
                padding: 0.4em;
            }
            th {
                background-color: #98c6ff;
                color: #444444;
            }
            .ok {
                background-color: #28a745;
            }
            .warning {
                background-color: #ffbf00;
            }
            .error {
                background-color: #ff2525;
            }
            .skipped {
                background-color: lightgray;
            }
            .main th {
                font-size: larger;
                background-color: #dcceff;
            }
            .sub th {
                font-size: smaller;
                background-color: #d3ebf9;
            }
        </style>
    </head>
    <body>

        <table>
            <thead>
                <tr class="main">
                    <th colspan="4">OrangeHRM Server Audit Report</th>
                </tr>
            </thead>
            <tbody>
                {Report Details}
                {Summary}
                {Build and Installation}
                {Hardware Information}
                {Operating System Information}
                {Middleware Information}
                {Time Settings}
                {PHP Extensions}
                {PHP Parameters}
                {PHP Settings}
                {MySQL / MariaDB Configurations}
                {MySQL / MariaDB Settings}
                {HTTP Service Configurations}
                {RabbitMQ}
                {Utility Packages}
                {Application Config}
                {Directory Permissions}
                {File Permissions}
                {Disk Usage}
                {Disk Partitioning}
                {Backups}
            </tbody>
        </table>

        <table>
            <thead></thead>
            <tbody>
            {Leave Accrual and Carry Forward Schedule}
            {Scheduled Tasks}
            </tbody>
        </table>

        <div id="usageStatistics">
            <h2>Usage Statistics</h2>


            <h3>OVERVIEW</h3>
            <h4>Current Snapshot</h4>
            {overviewSnapshot}

            <h4>Usage Applicable for Future</h4>
            {scheduledLeaveRequests}

            <h4>Time Based Data</h4>
            {timeBaseData}


            <h3>EMPLOYEES</h3>

            <h4>Active Employees</h4>
            <p>Variation of the active employee count of the past year, based on the join dates and termination dates of employee records.</p>
            {monthwiseActiveEmployeeCount}

            <h4>PIM Transactions</h4>
            <p>Monthly break-down of the total number of add/edit/delete actions of employee records, based on the audit trail.</p>
            {monthwisePIMActivityDistribution}


            <h3>LOGINS</h3>

            <h4>User Login Pattern</h4>
            <p>Number of distinct users log-in to the system and number of active users log-in to the system.</p>
            {monthwiseLoginDistribution}

            <h4>Country-Based User Login Count</h4>
            <p>Number of distinct users log-in to the system and number of active users log-in to the system based on Country.</p>
            {countryBasedLoginCount}

            <h4>Location-Based User Login Count</h4>
            <p>Number of distinct users log-in to the system and number of active users log-in to the system based on Location.</p>
            {locationBasedLoginCount}

            <h4>Country-Location-Month-Based User Login Count</h4>
            <p>Number of distinct users log-in to the system and number of active users log-in to the system based on Country Location and Month.</p>
            {countryMonthBasedLoginCount}


            <h3>LEAVE</h3>

            <h4>Monthly Leave Request Distribution</h4>
            <p>Monthly break-down of no. of past and future leave requests, based on the date where the leave is/will be taken.</p>
            {monthwiseLeaveRequestDistribution}

            <h4>Monthly Leave Request Distribution By Applied Date</h4>
            <p>Monthly break-down of no. of past and future leave requests, based on the date where the leave is applied.</p>
            {leaveRequestDistributionByAppliedDate}

            <h4>Leave Request Distribution by Month and Country</h4>
            <p>Monthly break-down of the number of leave requests of each operational country, based on the date of leave application.</p>
            {leaveRequestDistributionByMonthCountry}


            <h3>PERFORMANCE</h3>
            <h4>Performance Appraisals Based on Due Date</h4>
            {monthwisePerformanceAppraisalsDistribution}


            <h3>TIMESHEETS</h3>
            <h4>Monthly Timesheet Usage Distribution</h4>
            {monthwiseTimesheetDistribution}


            <h3>ATTENDANCE</h3>
            <h4>Monthly Count of Unique Employees who Used Punched In/Out</h4>
            {monthwiseAttendance}


            <h3>RECRUITMENT</h3>
            <h4>Current of Vacancies Created in the Past 12 Months</h4>
            {recruitmentData}


            <h3>TRAINING/OTM</h3>
            <h4>Monthly Online Training Sessions Distribution By Assigned Date</h4>
            {monthwiseTrainingDistribution}


            <h3>ON/OFF BOARDING</h3>
            <h4>Monthly On-Boarding Task Distribution</h4>
            {monthwiseOnBoardingTaskDistribution}


            <h3>TRAVEL & EXPENSE</h3>

            <h4>Monthly Travel Request Distribution</h4>
            {monthwiseTravelRequestDistribution}

            <h4>Number of Expense Claims Created in the Past 12 Monthly by Expense Type</h4>
            {expenseClaimsCreated}


            <h3>REQUEST DESK</h3>

            <h4>Current Number of Request Types and Templates</h4>
            {requestDeskSnapshot}

            <h4>Monthly HR Requests Distribution</h4>
            <p>Monthly breakdown of General requests and Hiring requisitions submitted.</p>
            {monthwiseRequestDeskRequestDistribution}

            <h3>EMAIL NOTIFICATION</h3>
            <h4>Summary</h4>
            {emailNotificationSnapshot}

            <h3>REPORTS AND ANALYTICS</h3>

            <h4>Standard & Customized Reports</h4>
            <p>This section include the total number of Standard (canned) reports and the total number of Customized reports (developed by OHRM) that are in the client system. Please scroll down to the 'Reports generated each month' section to find how many standard reports and customized reports are generated each month.</p>
            {standardNCustomizedReportsCount}

            <h4>User Defined Reports</h4>
            <p>This section includes the total number of User defined (cross module) reports are created each month in the client system. Please scroll down to the 'Reports generated each month' section to find how many user defined reports are generated each month.</p>
            {userDefinedReportsCount}

            <h4>Reports Generation Distribution</h4>
            <p>This section includes the breakdown of how many standard, customized and user defined reports are generated each month.</p>
            {reportsGenerationCount}

        </div>
        <!--
            This consists machine-readable analytics data. The data is json encoded, compressed and base64 encoded.
            ex: base64_encode(gzcompress(json_encode($data), 9))
            If you want to decode the data, follow these steps:
            1) base 64 decode
            2) unzip
            3) json decode

            -----BEGIN MACHINE READABLE ANALYTICS DATA-----
            {machineReadableAnalyticsData}
            -----END MACHINE READABLE ANALYTICS DATA-----
        -->


    </body>
</html>
<!DOCTYPE html>
<html lang="en">
    <head>
        <title>{title}</title>
        <meta charset="UTF-8">
        <style>
            body {
                font-family: sans-serif;
            }
            div {
                margin: 0.5em;
            }
            table {
                width: auto;
                border-collapse: collapse;
            }
            td, th {
                border: solid 1px #cccccc;
                padding: 0.4em;
            }
            th {
                background-color: #98c6ff;
                color: #444444;
            }
            .ok {
                background-color: #28a745;
            }
            .warning {
                background-color: #ffbf00;
            }
            .error {
                background-color: #ff2525;
            }
            .skipped {
                background-color: lightgray;
            }
            .main th {
                font-size: larger;
                background-color: #dcceff;
            }
            .sub th {
                font-size: smaller;
                background-color: #d3ebf9;
            }
        </style>
    </head>
    <body>

        <table>
            <thead>
                <tr class="main">
                    <th colspan="4">OrangeHRM Server Audit Report</th>
                </tr>
            </thead>
            <tbody>
                {Report Details}
                {Summary}
                {Hardware Information}
                {Operating System Information}
                {Middleware Information}
                {Time Settings}
                {PHP Extensions}
                {PHP Parameters}
                {PHP Settings}
                {MySQL / MariaDB Configurations}
                {MySQL / MariaDB Settings}
                {HTTP Service Configurations}
                {RabbitMQ}
                {Utility Packages}
                {Disk Usage}
                {Disk Partitioning}
                {Backups}
            </tbody>
        </table>

    </body>

</html>
_Usage:_ `php audit-server.phar [-h dbHost, --db-host dbHost] [-P dbPort, --db-port dbPort] [-p dbRootPassword, --db-root-password dbRootPassword] [-u dbRootUser, --db-root-user dbRootUser] [--help] [-i instancePath, --instance-path instancePath] [-o outputFile, --output-file outputFile] [-f outputFormat, --output-format outputFormat]`

Optional Arguments:
| Option                 | Description                          |
| ---------------------- | ------------------------------------ |
| -i, --instance-path    | Instance path                        |
| -h, --db-host          | MySQL/MariaDB host IP or domain name |
| -P, --db-port          | MySQL/MariaDB port                   |
| -u, --db-root-user     | MySQL/MariaDB root user              |
| -p, --db-root-password | MySQL/MariaDB root password          |
| -f, --output-format    | Output format                        |
| -o, --output-file      | Output file                          |
| --help                 | Print help                           |
{
  "name": "orangehrm/seat",
  "description": "SeAT - Server Audit Tool",
  "version": "dev-3.5.4-alpha.1",
  "autoload": {
    "psr-4": {
      "SeAT\\": "src/",
      "SeAT_Test\\": "tests/src"
    }
  },
  "repositories": [
    {
      "type": "git",
      "url": "https://gitlab.orangehrm.com/devops/internal-tools/common.git",
      "branch": "origin"
    }
  ],
  "require": {
    "orangehrm-devops/common": "dev-compatibility/php-7.4",
    "dompdf/dompdf": "2.*",
    "league/climate": "3.8.*",
    "symfony/yaml": "4.*",
    "php-amqplib/php-amqplib": "3.*",
    "ext-json": "*",
    "ext-posix": "*",
    "ext-pdo": "*",
    "ext-zlib": "*",
    "ext-mbstring": "*"
  },
  "require-dev": {
    "phpunit/phpunit": "9.6.19",
    "squizlabs/php_codesniffer": "^3.10"
  }
}
{
    "_readme": [
        "This file locks the dependencies of your project to a known state",
        "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
        "This file is @generated automatically"
    ],
    "content-hash": "80c140823c36ce4bfbf0065fcf11db2b",
    "packages": [
        {
            "name": "dompdf/dompdf",
            "version": "v2.0.8",
            "source": {
                "type": "git",
                "url": "https://github.com/dompdf/dompdf.git",
                "reference": "c20247574601700e1f7c8dab39310fca1964dc52"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/dompdf/dompdf/zipball/c20247574601700e1f7c8dab39310fca1964dc52",
                "reference": "c20247574601700e1f7c8dab39310fca1964dc52",
                "shasum": ""
            },
            "require": {
                "ext-dom": "*",
                "ext-mbstring": "*",
                "masterminds/html5": "^2.0",
                "phenx/php-font-lib": ">=0.5.4 <1.0.0",
                "phenx/php-svg-lib": ">=0.5.2 <1.0.0",
                "php": "^7.1 || ^8.0"
            },
            "require-dev": {
                "ext-json": "*",
                "ext-zip": "*",
                "mockery/mockery": "^1.3",
                "phpunit/phpunit": "^7.5 || ^8 || ^9",
                "squizlabs/php_codesniffer": "^3.5"
            },
            "suggest": {
                "ext-gd": "Needed to process images",
                "ext-gmagick": "Improves image processing performance",
                "ext-imagick": "Improves image processing performance",
                "ext-zlib": "Needed for pdf stream compression"
            },
            "type": "library",
            "autoload": {
                "psr-4": {
                    "Dompdf\\": "src/"
                },
                "classmap": [
                    "lib/"
                ]
            },
            "notification-url": "https://packagist.org/downloads/",
            "license": [
                "LGPL-2.1"
            ],
            "authors": [
                {
                    "name": "The Dompdf Community",
                    "homepage": "https://github.com/dompdf/dompdf/blob/master/AUTHORS.md"
                }
            ],
            "description": "DOMPDF is a CSS 2.1 compliant HTML to PDF converter",
            "homepage": "https://github.com/dompdf/dompdf",
            "support": {
                "issues": "https://github.com/dompdf/dompdf/issues",
                "source": "https://github.com/dompdf/dompdf/tree/v2.0.8"
            },
            "time": "2024-04-29T13:06:17+00:00"
        },
        {
            "name": "league/climate",
            "version": "3.8.2",
            "source": {
                "type": "git",
                "url": "https://github.com/thephpleague/climate.git",
                "reference": "a785a3ac8f584eed4abd45e4e16fe64c46659a28"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/thephpleague/climate/zipball/a785a3ac8f584eed4abd45e4e16fe64c46659a28",
                "reference": "a785a3ac8f584eed4abd45e4e16fe64c46659a28",
                "shasum": ""
            },
            "require": {
                "php": "^7.3 || ^8.0",
                "psr/log": "^1.0 || ^2.0 || ^3.0",
                "seld/cli-prompt": "^1.0"
            },
            "require-dev": {
                "mikey179/vfsstream": "^1.6.10",
                "mockery/mockery": "^1.4.2",
                "phpunit/phpunit": "^9.5.10"
            },
            "suggest": {
                "ext-mbstring": "If ext-mbstring is not available you MUST install symfony/polyfill-mbstring"
            },
            "type": "library",
            "autoload": {
                "psr-4": {
                    "League\\CLImate\\": "src/"
                }
            },
            "notification-url": "https://packagist.org/downloads/",
            "license": [
                "MIT"
            ],
            "authors": [
                {
                    "name": "Joe Tannenbaum",
                    "email": "hey@joe.codes",
                    "homepage": "http://joe.codes/",
                    "role": "Developer"
                },
                {
                    "name": "Craig Duncan",
                    "email": "git@duncanc.co.uk",
                    "homepage": "https://github.com/duncan3dc",
                    "role": "Developer"
                }
            ],
            "description": "PHP's best friend for the terminal. CLImate allows you to easily output colored text, special formats, and more.",
            "keywords": [
                "cli",
                "colors",
                "command",
                "php",
                "terminal"
            ],
            "support": {
                "issues": "https://github.com/thephpleague/climate/issues",
                "source": "https://github.com/thephpleague/climate/tree/3.8.2"
            },
            "time": "2022-06-18T14:42:08+00:00"
        },
        {
            "name": "masterminds/html5",
            "version": "2.10.0",
            "source": {
                "type": "git",
                "url": "https://github.com/Masterminds/html5-php.git",
                "reference": "fcf91eb64359852f00d921887b219479b4f21251"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/Masterminds/html5-php/zipball/fcf91eb64359852f00d921887b219479b4f21251",
                "reference": "fcf91eb64359852f00d921887b219479b4f21251",
                "shasum": ""
            },
            "require": {
                "ext-dom": "*",
                "php": ">=5.3.0"
            },
            "require-dev": {
                "phpunit/phpunit": "^4.8.35 || ^5.7.21 || ^6 || ^7 || ^8 || ^9"
            },
            "type": "library",
            "extra": {
                "branch-alias": {
                    "dev-master": "2.7-dev"
                }
            },
            "autoload": {
                "psr-4": {
                    "Masterminds\\": "src"
                }
            },
            "notification-url": "https://packagist.org/downloads/",
            "license": [
                "MIT"
            ],
            "authors": [
                {
                    "name": "Matt Butcher",
                    "email": "technosophos@gmail.com"
                },
                {
                    "name": "Matt Farina",
                    "email": "matt@mattfarina.com"
                },
                {
                    "name": "Asmir Mustafic",
                    "email": "goetas@gmail.com"
                }
            ],
            "description": "An HTML5 parser and serializer.",
            "homepage": "http://masterminds.github.io/html5-php",
            "keywords": [
                "HTML5",
                "dom",
                "html",
                "parser",
                "querypath",
                "serializer",
                "xml"
            ],
            "support": {
                "issues": "https://github.com/Masterminds/html5-php/issues",
                "source": "https://github.com/Masterminds/html5-php/tree/2.10.0"
            },
            "time": "2025-07-25T09:04:22+00:00"
        },
        {
            "name": "orangehrm-devops/common",
            "version": "dev-compatibility/php-7.4",
            "source": {
                "type": "git",
                "url": "https://gitlab.orangehrm.com/devops/internal-tools/common.git",
                "reference": "7b5115dc0672fd0a873df34d5b079b7c4e270ddb"
            },
            "require": {
                "ext-curl": "*",
                "ext-json": "*",
                "ext-pdo": "*",
                "ext-posix": "*",
                "ext-zip": "*",
                "php": ">=7.4",
                "phpseclib/phpseclib": ">=3.0.34",
                "symfony/yaml": "v4.2.3"
            },
            "require-dev": {
                "phpunit/phpunit": "9.6.x"
            },
            "type": "library",
            "autoload": {
                "psr-4": {
                    "OrangeHRM\\": "src/OrangeHRM"
                }
            },
            "license": [
                "OrangeHRM Commercial License"
            ],
            "authors": [
                {
                    "name": "OrangeHRM Inc.",
                    "email": "devops@orangehrm.com"
                }
            ],
            "description": "Common libraries for DevOps Internal Tools",
            "time": "2025-09-23T08:42:58+00:00"
        },
        {
            "name": "paragonie/constant_time_encoding",
            "version": "v2.8.2",
            "source": {
                "type": "git",
                "url": "https://github.com/paragonie/constant_time_encoding.git",
                "reference": "e30811f7bc69e4b5b6d5783e712c06c8eabf0226"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/paragonie/constant_time_encoding/zipball/e30811f7bc69e4b5b6d5783e712c06c8eabf0226",
                "reference": "e30811f7bc69e4b5b6d5783e712c06c8eabf0226",
                "shasum": ""
            },
            "require": {
                "php": "^7|^8"
            },
            "require-dev": {
                "phpunit/phpunit": "^6|^7|^8|^9",
                "vimeo/psalm": "^1|^2|^3|^4"
            },
            "type": "library",
            "autoload": {
                "psr-4": {
                    "ParagonIE\\ConstantTime\\": "src/"
                }
            },
            "notification-url": "https://packagist.org/downloads/",
            "license": [
                "MIT"
            ],
            "authors": [
                {
                    "name": "Paragon Initiative Enterprises",
                    "email": "security@paragonie.com",
                    "homepage": "https://paragonie.com",
                    "role": "Maintainer"
                },
                {
                    "name": "Steve 'Sc00bz' Thomas",
                    "email": "steve@tobtu.com",
                    "homepage": "https://www.tobtu.com",
                    "role": "Original Developer"
                }
            ],
            "description": "Constant-time Implementations of RFC 4648 Encoding (Base-64, Base-32, Base-16)",
            "keywords": [
                "base16",
                "base32",
                "base32_decode",
                "base32_encode",
                "base64",
                "base64_decode",
                "base64_encode",
                "bin2hex",
                "encoding",
                "hex",
                "hex2bin",
                "rfc4648"
            ],
            "support": {
                "email": "info@paragonie.com",
                "issues": "https://github.com/paragonie/constant_time_encoding/issues",
                "source": "https://github.com/paragonie/constant_time_encoding"
            },
            "time": "2025-09-24T15:12:37+00:00"
        },
        {
            "name": "paragonie/random_compat",
            "version": "v9.99.100",
            "source": {
                "type": "git",
                "url": "https://github.com/paragonie/random_compat.git",
                "reference": "996434e5492cb4c3edcb9168db6fbb1359ef965a"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/paragonie/random_compat/zipball/996434e5492cb4c3edcb9168db6fbb1359ef965a",
                "reference": "996434e5492cb4c3edcb9168db6fbb1359ef965a",
                "shasum": ""
            },
            "require": {
                "php": ">= 7"
            },
            "require-dev": {
                "phpunit/phpunit": "4.*|5.*",
                "vimeo/psalm": "^1"
            },
            "suggest": {
                "ext-libsodium": "Provides a modern crypto API that can be used to generate random bytes."
            },
            "type": "library",
            "notification-url": "https://packagist.org/downloads/",
            "license": [
                "MIT"
            ],
            "authors": [
                {
                    "name": "Paragon Initiative Enterprises",
                    "email": "security@paragonie.com",
                    "homepage": "https://paragonie.com"
                }
            ],
            "description": "PHP 5.x polyfill for random_bytes() and random_int() from PHP 7",
            "keywords": [
                "csprng",
                "polyfill",
                "pseudorandom",
                "random"
            ],
            "support": {
                "email": "info@paragonie.com",
                "issues": "https://github.com/paragonie/random_compat/issues",
                "source": "https://github.com/paragonie/random_compat"
            },
            "time": "2020-10-15T08:29:30+00:00"
        },
        {
            "name": "phenx/php-font-lib",
            "version": "0.5.6",
            "source": {
                "type": "git",
                "url": "https://github.com/dompdf/php-font-lib.git",
                "reference": "a1681e9793040740a405ac5b189275059e2a9863"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/dompdf/php-font-lib/zipball/a1681e9793040740a405ac5b189275059e2a9863",
                "reference": "a1681e9793040740a405ac5b189275059e2a9863",
                "shasum": ""
            },
            "require": {
                "ext-mbstring": "*"
            },
            "require-dev": {
                "symfony/phpunit-bridge": "^3 || ^4 || ^5 || ^6"
            },
            "type": "library",
            "autoload": {
                "psr-4": {
                    "FontLib\\": "src/FontLib"
                }
            },
            "notification-url": "https://packagist.org/downloads/",
            "license": [
                "LGPL-2.1-or-later"
            ],
            "authors": [
                {
                    "name": "Fabien Ménager",
                    "email": "fabien.menager@gmail.com"
                }
            ],
            "description": "A library to read, parse, export and make subsets of different types of font files.",
            "homepage": "https://github.com/PhenX/php-font-lib",
            "support": {
                "issues": "https://github.com/dompdf/php-font-lib/issues",
                "source": "https://github.com/dompdf/php-font-lib/tree/0.5.6"
            },
            "time": "2024-01-29T14:45:26+00:00"
        },
        {
            "name": "phenx/php-svg-lib",
            "version": "0.5.4",
            "source": {
                "type": "git",
                "url": "https://github.com/dompdf/php-svg-lib.git",
                "reference": "46b25da81613a9cf43c83b2a8c2c1bdab27df691"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/dompdf/php-svg-lib/zipball/46b25da81613a9cf43c83b2a8c2c1bdab27df691",
                "reference": "46b25da81613a9cf43c83b2a8c2c1bdab27df691",
                "shasum": ""
            },
            "require": {
                "ext-mbstring": "*",
                "php": "^7.1 || ^8.0",
                "sabberworm/php-css-parser": "^8.4"
            },
            "require-dev": {
                "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5"
            },
            "type": "library",
            "autoload": {
                "psr-4": {
                    "Svg\\": "src/Svg"
                }
            },
            "notification-url": "https://packagist.org/downloads/",
            "license": [
                "LGPL-3.0-or-later"
            ],
            "authors": [
                {
                    "name": "Fabien Ménager",
                    "email": "fabien.menager@gmail.com"
                }
            ],
            "description": "A library to read, parse and export to PDF SVG files.",
            "homepage": "https://github.com/PhenX/php-svg-lib",
            "support": {
                "issues": "https://github.com/dompdf/php-svg-lib/issues",
                "source": "https://github.com/dompdf/php-svg-lib/tree/0.5.4"
            },
            "time": "2024-04-08T12:52:34+00:00"
        },
        {
            "name": "php-amqplib/php-amqplib",
            "version": "v3.7.3",
            "source": {
                "type": "git",
                "url": "https://github.com/php-amqplib/php-amqplib.git",
                "reference": "9f50fe69a9f1a19e2cb25596a354d705de36fe59"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/php-amqplib/php-amqplib/zipball/9f50fe69a9f1a19e2cb25596a354d705de36fe59",
                "reference": "9f50fe69a9f1a19e2cb25596a354d705de36fe59",
                "shasum": ""
            },
            "require": {
                "ext-mbstring": "*",
                "ext-sockets": "*",
                "php": "^7.2||^8.0",
                "phpseclib/phpseclib": "^2.0|^3.0"
            },
            "conflict": {
                "php": "7.4.0 - 7.4.1"
            },
            "replace": {
                "videlalvaro/php-amqplib": "self.version"
            },
            "require-dev": {
                "ext-curl": "*",
                "nategood/httpful": "^0.2.20",
                "phpunit/phpunit": "^7.5|^9.5",
                "squizlabs/php_codesniffer": "^3.6"
            },
            "type": "library",
            "extra": {
                "branch-alias": {
                    "dev-master": "3.0-dev"
                }
            },
            "autoload": {
                "psr-4": {
                    "PhpAmqpLib\\": "PhpAmqpLib/"
                }
            },
            "notification-url": "https://packagist.org/downloads/",
            "license": [
                "LGPL-2.1-or-later"
            ],
            "authors": [
                {
                    "name": "Alvaro Videla",
                    "role": "Original Maintainer"
                },
                {
                    "name": "Raúl Araya",
                    "email": "nubeiro@gmail.com",
                    "role": "Maintainer"
                },
                {
                    "name": "Luke Bakken",
                    "email": "luke@bakken.io",
                    "role": "Maintainer"
                },
                {
                    "name": "Ramūnas Dronga",
                    "email": "github@ramuno.lt",
                    "role": "Maintainer"
                }
            ],
            "description": "Formerly videlalvaro/php-amqplib.  This library is a pure PHP implementation of the AMQP protocol. It's been tested against RabbitMQ.",
            "homepage": "https://github.com/php-amqplib/php-amqplib/",
            "keywords": [
                "message",
                "queue",
                "rabbitmq"
            ],
            "support": {
                "issues": "https://github.com/php-amqplib/php-amqplib/issues",
                "source": "https://github.com/php-amqplib/php-amqplib/tree/v3.7.3"
            },
            "time": "2025-02-18T20:11:13+00:00"
        },
        {
            "name": "phpseclib/phpseclib",
            "version": "3.0.47",
            "source": {
                "type": "git",
                "url": "https://github.com/phpseclib/phpseclib.git",
                "reference": "9d6ca36a6c2dd434765b1071b2644a1c683b385d"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/9d6ca36a6c2dd434765b1071b2644a1c683b385d",
                "reference": "9d6ca36a6c2dd434765b1071b2644a1c683b385d",
                "shasum": ""
            },
            "require": {
                "paragonie/constant_time_encoding": "^1|^2|^3",
                "paragonie/random_compat": "^1.4|^2.0|^9.99.99",
                "php": ">=5.6.1"
            },
            "require-dev": {
                "phpunit/phpunit": "*"
            },
            "suggest": {
                "ext-dom": "Install the DOM extension to load XML formatted public keys.",
                "ext-gmp": "Install the GMP (GNU Multiple Precision) extension in order to speed up arbitrary precision integer arithmetic operations.",
                "ext-libsodium": "SSH2/SFTP can make use of some algorithms provided by the libsodium-php extension.",
                "ext-mcrypt": "Install the Mcrypt extension in order to speed up a few other cryptographic operations.",
                "ext-openssl": "Install the OpenSSL extension in order to speed up a wide variety of cryptographic operations."
            },
            "type": "library",
            "autoload": {
                "files": [
                    "phpseclib/bootstrap.php"
                ],
                "psr-4": {
                    "phpseclib3\\": "phpseclib/"
                }
            },
            "notification-url": "https://packagist.org/downloads/",
            "license": [
                "MIT"
            ],
            "authors": [
                {
                    "name": "Jim Wigginton",
                    "email": "terrafrost@php.net",
                    "role": "Lead Developer"
                },
                {
                    "name": "Patrick Monnerat",
                    "email": "pm@datasphere.ch",
                    "role": "Developer"
                },
                {
                    "name": "Andreas Fischer",
                    "email": "bantu@phpbb.com",
                    "role": "Developer"
                },
                {
                    "name": "Hans-Jürgen Petrich",
                    "email": "petrich@tronic-media.com",
                    "role": "Developer"
                },
                {
                    "name": "Graham Campbell",
                    "email": "graham@alt-three.com",
                    "role": "Developer"
                }
            ],
            "description": "PHP Secure Communications Library - Pure-PHP implementations of RSA, AES, SSH2, SFTP, X.509 etc.",
            "homepage": "http://phpseclib.sourceforge.net",
            "keywords": [
                "BigInteger",
                "aes",
                "asn.1",
                "asn1",
                "blowfish",
                "crypto",
                "cryptography",
                "encryption",
                "rsa",
                "security",
                "sftp",
                "signature",
                "signing",
                "ssh",
                "twofish",
                "x.509",
                "x509"
            ],
            "support": {
                "issues": "https://github.com/phpseclib/phpseclib/issues",
                "source": "https://github.com/phpseclib/phpseclib/tree/3.0.47"
            },
            "funding": [
                {
                    "url": "https://github.com/terrafrost",
                    "type": "github"
                },
                {
                    "url": "https://www.patreon.com/phpseclib",
                    "type": "patreon"
                },
                {
                    "url": "https://tidelift.com/funding/github/packagist/phpseclib/phpseclib",
                    "type": "tidelift"
                }
            ],
            "time": "2025-10-06T01:07:24+00:00"
        },
        {
            "name": "psr/log",
            "version": "1.1.4",
            "source": {
                "type": "git",
                "url": "https://github.com/php-fig/log.git",
                "reference": "d49695b909c3b7628b6289db5479a1c204601f11"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/php-fig/log/zipball/d49695b909c3b7628b6289db5479a1c204601f11",
                "reference": "d49695b909c3b7628b6289db5479a1c204601f11",
                "shasum": ""
            },
            "require": {
                "php": ">=5.3.0"
            },
            "type": "library",
            "extra": {
                "branch-alias": {
                    "dev-master": "1.1.x-dev"
                }
            },
            "autoload": {
                "psr-4": {
                    "Psr\\Log\\": "Psr/Log/"
                }
            },
            "notification-url": "https://packagist.org/downloads/",
            "license": [
                "MIT"
            ],
            "authors": [
                {
                    "name": "PHP-FIG",
                    "homepage": "https://www.php-fig.org/"
                }
            ],
            "description": "Common interface for logging libraries",
            "homepage": "https://github.com/php-fig/log",
            "keywords": [
                "log",
                "psr",
                "psr-3"
            ],
            "support": {
                "source": "https://github.com/php-fig/log/tree/1.1.4"
            },
            "time": "2021-05-03T11:20:27+00:00"
        },
        {
            "name": "sabberworm/php-css-parser",
            "version": "v8.9.0",
            "source": {
                "type": "git",
                "url": "https://github.com/MyIntervals/PHP-CSS-Parser.git",
                "reference": "d8e916507b88e389e26d4ab03c904a082aa66bb9"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/MyIntervals/PHP-CSS-Parser/zipball/d8e916507b88e389e26d4ab03c904a082aa66bb9",
                "reference": "d8e916507b88e389e26d4ab03c904a082aa66bb9",
                "shasum": ""
            },
            "require": {
                "ext-iconv": "*",
                "php": "^5.6.20 || ^7.0.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0"
            },
            "require-dev": {
                "phpunit/phpunit": "5.7.27 || 6.5.14 || 7.5.20 || 8.5.41",
                "rawr/cross-data-providers": "^2.0.0"
            },
            "suggest": {
                "ext-mbstring": "for parsing UTF-8 CSS"
            },
            "type": "library",
            "extra": {
                "branch-alias": {
                    "dev-main": "9.0.x-dev"
                }
            },
            "autoload": {
                "psr-4": {
                    "Sabberworm\\CSS\\": "src/"
                }
            },
            "notification-url": "https://packagist.org/downloads/",
            "license": [
                "MIT"
            ],
            "authors": [
                {
                    "name": "Raphael Schweikert"
                },
                {
                    "name": "Oliver Klee",
                    "email": "github@oliverklee.de"
                },
                {
                    "name": "Jake Hotson",
                    "email": "jake.github@qzdesign.co.uk"
                }
            ],
            "description": "Parser for CSS Files written in PHP",
            "homepage": "https://www.sabberworm.com/blog/2010/6/10/php-css-parser",
            "keywords": [
                "css",
                "parser",
                "stylesheet"
            ],
            "support": {
                "issues": "https://github.com/MyIntervals/PHP-CSS-Parser/issues",
                "source": "https://github.com/MyIntervals/PHP-CSS-Parser/tree/v8.9.0"
            },
            "time": "2025-07-11T13:20:48+00:00"
        },
        {
            "name": "seld/cli-prompt",
            "version": "1.0.4",
            "source": {
                "type": "git",
                "url": "https://github.com/Seldaek/cli-prompt.git",
                "reference": "b8dfcf02094b8c03b40322c229493bb2884423c5"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/Seldaek/cli-prompt/zipball/b8dfcf02094b8c03b40322c229493bb2884423c5",
                "reference": "b8dfcf02094b8c03b40322c229493bb2884423c5",
                "shasum": ""
            },
            "require": {
                "php": ">=5.3"
            },
            "require-dev": {
                "phpstan/phpstan": "^0.12.63"
            },
            "type": "library",
            "extra": {
                "branch-alias": {
                    "dev-master": "1.x-dev"
                }
            },
            "autoload": {
                "psr-4": {
                    "Seld\\CliPrompt\\": "src/"
                }
            },
            "notification-url": "https://packagist.org/downloads/",
            "license": [
                "MIT"
            ],
            "authors": [
                {
                    "name": "Jordi Boggiano",
                    "email": "j.boggiano@seld.be"
                }
            ],
            "description": "Allows you to prompt for user input on the command line, and optionally hide the characters they type",
            "keywords": [
                "cli",
                "console",
                "hidden",
                "input",
                "prompt"
            ],
            "support": {
                "issues": "https://github.com/Seldaek/cli-prompt/issues",
                "source": "https://github.com/Seldaek/cli-prompt/tree/1.0.4"
            },
            "time": "2020-12-15T21:32:01+00:00"
        },
        {
            "name": "symfony/polyfill-ctype",
            "version": "v1.33.0",
            "source": {
                "type": "git",
                "url": "https://github.com/symfony/polyfill-ctype.git",
                "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/a3cc8b044a6ea513310cbd48ef7333b384945638",
                "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638",
                "shasum": ""
            },
            "require": {
                "php": ">=7.2"
            },
            "provide": {
                "ext-ctype": "*"
            },
            "suggest": {
                "ext-ctype": "For best performance"
            },
            "type": "library",
            "extra": {
                "thanks": {
                    "url": "https://github.com/symfony/polyfill",
                    "name": "symfony/polyfill"
                }
            },
            "autoload": {
                "files": [
                    "bootstrap.php"
                ],
                "psr-4": {
                    "Symfony\\Polyfill\\Ctype\\": ""
                }
            },
            "notification-url": "https://packagist.org/downloads/",
            "license": [
                "MIT"
            ],
            "authors": [
                {
                    "name": "Gert de Pagter",
                    "email": "BackEndTea@gmail.com"
                },
                {
                    "name": "Symfony Community",
                    "homepage": "https://symfony.com/contributors"
                }
            ],
            "description": "Symfony polyfill for ctype functions",
            "homepage": "https://symfony.com",
            "keywords": [
                "compatibility",
                "ctype",
                "polyfill",
                "portable"
            ],
            "support": {
                "source": "https://github.com/symfony/polyfill-ctype/tree/v1.33.0"
            },
            "funding": [
                {
                    "url": "https://symfony.com/sponsor",
                    "type": "custom"
                },
                {
                    "url": "https://github.com/fabpot",
                    "type": "github"
                },
                {
                    "url": "https://github.com/nicolas-grekas",
                    "type": "github"
                },
                {
                    "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
                    "type": "tidelift"
                }
            ],
            "time": "2024-09-09T11:45:10+00:00"
        },
        {
            "name": "symfony/yaml",
            "version": "v4.2.3",
            "source": {
                "type": "git",
                "url": "https://github.com/symfony/yaml.git",
                "reference": "d461670ee145092b7e2a56c1da7118f19cadadb0"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/symfony/yaml/zipball/d461670ee145092b7e2a56c1da7118f19cadadb0",
                "reference": "d461670ee145092b7e2a56c1da7118f19cadadb0",
                "shasum": ""
            },
            "require": {
                "php": "^7.1.3",
                "symfony/polyfill-ctype": "~1.8"
            },
            "conflict": {
                "symfony/console": "<3.4"
            },
            "require-dev": {
                "symfony/console": "~3.4|~4.0"
            },
            "suggest": {
                "symfony/console": "For validating YAML files using the lint command"
            },
            "type": "library",
            "extra": {
                "branch-alias": {
                    "dev-master": "4.2-dev"
                }
            },
            "autoload": {
                "psr-4": {
                    "Symfony\\Component\\Yaml\\": ""
                },
                "exclude-from-classmap": [
                    "/Tests/"
                ]
            },
            "notification-url": "https://packagist.org/downloads/",
            "license": [
                "MIT"
            ],
            "authors": [
                {
                    "name": "Fabien Potencier",
                    "email": "fabien@symfony.com"
                },
                {
                    "name": "Symfony Community",
                    "homepage": "https://symfony.com/contributors"
                }
            ],
            "description": "Symfony Yaml Component",
            "homepage": "https://symfony.com",
            "support": {
                "source": "https://github.com/symfony/yaml/tree/4.2"
            },
            "time": "2019-01-16T20:35:37+00:00"
        }
    ],
    "packages-dev": [
        {
            "name": "doctrine/instantiator",
            "version": "1.5.0",
            "source": {
                "type": "git",
                "url": "https://github.com/doctrine/instantiator.git",
                "reference": "0a0fa9780f5d4e507415a065172d26a98d02047b"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/doctrine/instantiator/zipball/0a0fa9780f5d4e507415a065172d26a98d02047b",
                "reference": "0a0fa9780f5d4e507415a065172d26a98d02047b",
                "shasum": ""
            },
            "require": {
                "php": "^7.1 || ^8.0"
            },
            "require-dev": {
                "doctrine/coding-standard": "^9 || ^11",
                "ext-pdo": "*",
                "ext-phar": "*",
                "phpbench/phpbench": "^0.16 || ^1",
                "phpstan/phpstan": "^1.4",
                "phpstan/phpstan-phpunit": "^1",
                "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5",
                "vimeo/psalm": "^4.30 || ^5.4"
            },
            "type": "library",
            "autoload": {
                "psr-4": {
                    "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/"
                }
            },
            "notification-url": "https://packagist.org/downloads/",
            "license": [
                "MIT"
            ],
            "authors": [
                {
                    "name": "Marco Pivetta",
                    "email": "ocramius@gmail.com",
                    "homepage": "https://ocramius.github.io/"
                }
            ],
            "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors",
            "homepage": "https://www.doctrine-project.org/projects/instantiator.html",
            "keywords": [
                "constructor",
                "instantiate"
            ],
            "support": {
                "issues": "https://github.com/doctrine/instantiator/issues",
                "source": "https://github.com/doctrine/instantiator/tree/1.5.0"
            },
            "funding": [
                {
                    "url": "https://www.doctrine-project.org/sponsorship.html",
                    "type": "custom"
                },
                {
                    "url": "https://www.patreon.com/phpdoctrine",
                    "type": "patreon"
                },
                {
                    "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator",
                    "type": "tidelift"
                }
            ],
            "time": "2022-12-30T00:15:36+00:00"
        },
        {
            "name": "myclabs/deep-copy",
            "version": "1.13.4",
            "source": {
                "type": "git",
                "url": "https://github.com/myclabs/DeepCopy.git",
                "reference": "07d290f0c47959fd5eed98c95ee5602db07e0b6a"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/07d290f0c47959fd5eed98c95ee5602db07e0b6a",
                "reference": "07d290f0c47959fd5eed98c95ee5602db07e0b6a",
                "shasum": ""
            },
            "require": {
                "php": "^7.1 || ^8.0"
            },
            "conflict": {
                "doctrine/collections": "<1.6.8",
                "doctrine/common": "<2.13.3 || >=3 <3.2.2"
            },
            "require-dev": {
                "doctrine/collections": "^1.6.8",
                "doctrine/common": "^2.13.3 || ^3.2.2",
                "phpspec/prophecy": "^1.10",
                "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13"
            },
            "type": "library",
            "autoload": {
                "files": [
                    "src/DeepCopy/deep_copy.php"
                ],
                "psr-4": {
                    "DeepCopy\\": "src/DeepCopy/"
                }
            },
            "notification-url": "https://packagist.org/downloads/",
            "license": [
                "MIT"
            ],
            "description": "Create deep copies (clones) of your objects",
            "keywords": [
                "clone",
                "copy",
                "duplicate",
                "object",
                "object graph"
            ],
            "support": {
                "issues": "https://github.com/myclabs/DeepCopy/issues",
                "source": "https://github.com/myclabs/DeepCopy/tree/1.13.4"
            },
            "funding": [
                {
                    "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy",
                    "type": "tidelift"
                }
            ],
            "time": "2025-08-01T08:46:24+00:00"
        },
        {
            "name": "nikic/php-parser",
            "version": "v5.6.2",
            "source": {
                "type": "git",
                "url": "https://github.com/nikic/PHP-Parser.git",
                "reference": "3a454ca033b9e06b63282ce19562e892747449bb"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/3a454ca033b9e06b63282ce19562e892747449bb",
                "reference": "3a454ca033b9e06b63282ce19562e892747449bb",
                "shasum": ""
            },
            "require": {
                "ext-ctype": "*",
                "ext-json": "*",
                "ext-tokenizer": "*",
                "php": ">=7.4"
            },
            "require-dev": {
                "ircmaxell/php-yacc": "^0.0.7",
                "phpunit/phpunit": "^9.0"
            },
            "bin": [
                "bin/php-parse"
            ],
            "type": "library",
            "extra": {
                "branch-alias": {
                    "dev-master": "5.x-dev"
                }
            },
            "autoload": {
                "psr-4": {
                    "PhpParser\\": "lib/PhpParser"
                }
            },
            "notification-url": "https://packagist.org/downloads/",
            "license": [
                "BSD-3-Clause"
            ],
            "authors": [
                {
                    "name": "Nikita Popov"
                }
            ],
            "description": "A PHP parser written in PHP",
            "keywords": [
                "parser",
                "php"
            ],
            "support": {
                "issues": "https://github.com/nikic/PHP-Parser/issues",
                "source": "https://github.com/nikic/PHP-Parser/tree/v5.6.2"
            },
            "time": "2025-10-21T19:32:17+00:00"
        },
        {
            "name": "phar-io/manifest",
            "version": "2.0.4",
            "source": {
                "type": "git",
                "url": "https://github.com/phar-io/manifest.git",
                "reference": "54750ef60c58e43759730615a392c31c80e23176"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/phar-io/manifest/zipball/54750ef60c58e43759730615a392c31c80e23176",
                "reference": "54750ef60c58e43759730615a392c31c80e23176",
                "shasum": ""
            },
            "require": {
                "ext-dom": "*",
                "ext-libxml": "*",
                "ext-phar": "*",
                "ext-xmlwriter": "*",
                "phar-io/version": "^3.0.1",
                "php": "^7.2 || ^8.0"
            },
            "type": "library",
            "extra": {
                "branch-alias": {
                    "dev-master": "2.0.x-dev"
                }
            },
            "autoload": {
                "classmap": [
                    "src/"
                ]
            },
            "notification-url": "https://packagist.org/downloads/",
            "license": [
                "BSD-3-Clause"
            ],
            "authors": [
                {
                    "name": "Arne Blankerts",
                    "email": "arne@blankerts.de",
                    "role": "Developer"
                },
                {
                    "name": "Sebastian Heuer",
                    "email": "sebastian@phpeople.de",
                    "role": "Developer"
                },
                {
                    "name": "Sebastian Bergmann",
                    "email": "sebastian@phpunit.de",
                    "role": "Developer"
                }
            ],
            "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)",
            "support": {
                "issues": "https://github.com/phar-io/manifest/issues",
                "source": "https://github.com/phar-io/manifest/tree/2.0.4"
            },
            "funding": [
                {
                    "url": "https://github.com/theseer",
                    "type": "github"
                }
            ],
            "time": "2024-03-03T12:33:53+00:00"
        },
        {
            "name": "phar-io/version",
            "version": "3.2.1",
            "source": {
                "type": "git",
                "url": "https://github.com/phar-io/version.git",
                "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/phar-io/version/zipball/4f7fd7836c6f332bb2933569e566a0d6c4cbed74",
                "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74",
                "shasum": ""
            },
            "require": {
                "php": "^7.2 || ^8.0"
            },
            "type": "library",
            "autoload": {
                "classmap": [
                    "src/"
                ]
            },
            "notification-url": "https://packagist.org/downloads/",
            "license": [
                "BSD-3-Clause"
            ],
            "authors": [
                {
                    "name": "Arne Blankerts",
                    "email": "arne@blankerts.de",
                    "role": "Developer"
                },
                {
                    "name": "Sebastian Heuer",
                    "email": "sebastian@phpeople.de",
                    "role": "Developer"
                },
                {
                    "name": "Sebastian Bergmann",
                    "email": "sebastian@phpunit.de",
                    "role": "Developer"
                }
            ],
            "description": "Library for handling version information and constraints",
            "support": {
                "issues": "https://github.com/phar-io/version/issues",
                "source": "https://github.com/phar-io/version/tree/3.2.1"
            },
            "time": "2022-02-21T01:04:05+00:00"
        },
        {
            "name": "phpunit/php-code-coverage",
            "version": "9.2.32",
            "source": {
                "type": "git",
                "url": "https://github.com/sebastianbergmann/php-code-coverage.git",
                "reference": "85402a822d1ecf1db1096959413d35e1c37cf1a5"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/85402a822d1ecf1db1096959413d35e1c37cf1a5",
                "reference": "85402a822d1ecf1db1096959413d35e1c37cf1a5",
                "shasum": ""
            },
            "require": {
                "ext-dom": "*",
                "ext-libxml": "*",
                "ext-xmlwriter": "*",
                "nikic/php-parser": "^4.19.1 || ^5.1.0",
                "php": ">=7.3",
                "phpunit/php-file-iterator": "^3.0.6",
                "phpunit/php-text-template": "^2.0.4",
                "sebastian/code-unit-reverse-lookup": "^2.0.3",
                "sebastian/complexity": "^2.0.3",
                "sebastian/environment": "^5.1.5",
                "sebastian/lines-of-code": "^1.0.4",
                "sebastian/version": "^3.0.2",
                "theseer/tokenizer": "^1.2.3"
            },
            "require-dev": {
                "phpunit/phpunit": "^9.6"
            },
            "suggest": {
                "ext-pcov": "PHP extension that provides line coverage",
                "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage"
            },
            "type": "library",
            "extra": {
                "branch-alias": {
                    "dev-main": "9.2.x-dev"
                }
            },
            "autoload": {
                "classmap": [
                    "src/"
                ]
            },
            "notification-url": "https://packagist.org/downloads/",
            "license": [
                "BSD-3-Clause"
            ],
            "authors": [
                {
                    "name": "Sebastian Bergmann",
                    "email": "sebastian@phpunit.de",
                    "role": "lead"
                }
            ],
            "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.",
            "homepage": "https://github.com/sebastianbergmann/php-code-coverage",
            "keywords": [
                "coverage",
                "testing",
                "xunit"
            ],
            "support": {
                "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues",
                "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy",
                "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.32"
            },
            "funding": [
                {
                    "url": "https://github.com/sebastianbergmann",
                    "type": "github"
                }
            ],
            "time": "2024-08-22T04:23:01+00:00"
        },
        {
            "name": "phpunit/php-file-iterator",
            "version": "3.0.6",
            "source": {
                "type": "git",
                "url": "https://github.com/sebastianbergmann/php-file-iterator.git",
                "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf",
                "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf",
                "shasum": ""
            },
            "require": {
                "php": ">=7.3"
            },
            "require-dev": {
                "phpunit/phpunit": "^9.3"
            },
            "type": "library",
            "extra": {
                "branch-alias": {
                    "dev-master": "3.0-dev"
                }
            },
            "autoload": {
                "classmap": [
                    "src/"
                ]
            },
            "notification-url": "https://packagist.org/downloads/",
            "license": [
                "BSD-3-Clause"
            ],
            "authors": [
                {
                    "name": "Sebastian Bergmann",
                    "email": "sebastian@phpunit.de",
                    "role": "lead"
                }
            ],
            "description": "FilterIterator implementation that filters files based on a list of suffixes.",
            "homepage": "https://github.com/sebastianbergmann/php-file-iterator/",
            "keywords": [
                "filesystem",
                "iterator"
            ],
            "support": {
                "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues",
                "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/3.0.6"
            },
            "funding": [
                {
                    "url": "https://github.com/sebastianbergmann",
                    "type": "github"
                }
            ],
            "time": "2021-12-02T12:48:52+00:00"
        },
        {
            "name": "phpunit/php-invoker",
            "version": "3.1.1",
            "source": {
                "type": "git",
                "url": "https://github.com/sebastianbergmann/php-invoker.git",
                "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/5a10147d0aaf65b58940a0b72f71c9ac0423cc67",
                "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67",
                "shasum": ""
            },
            "require": {
                "php": ">=7.3"
            },
            "require-dev": {
                "ext-pcntl": "*",
                "phpunit/phpunit": "^9.3"
            },
            "suggest": {
                "ext-pcntl": "*"
            },
            "type": "library",
            "extra": {
                "branch-alias": {
                    "dev-master": "3.1-dev"
                }
            },
            "autoload": {
                "classmap": [
                    "src/"
                ]
            },
            "notification-url": "https://packagist.org/downloads/",
            "license": [
                "BSD-3-Clause"
            ],
            "authors": [
                {
                    "name": "Sebastian Bergmann",
                    "email": "sebastian@phpunit.de",
                    "role": "lead"
                }
            ],
            "description": "Invoke callables with a timeout",
            "homepage": "https://github.com/sebastianbergmann/php-invoker/",
            "keywords": [
                "process"
            ],
            "support": {
                "issues": "https://github.com/sebastianbergmann/php-invoker/issues",
                "source": "https://github.com/sebastianbergmann/php-invoker/tree/3.1.1"
            },
            "funding": [
                {
                    "url": "https://github.com/sebastianbergmann",
                    "type": "github"
                }
            ],
            "time": "2020-09-28T05:58:55+00:00"
        },
        {
            "name": "phpunit/php-text-template",
            "version": "2.0.4",
            "source": {
                "type": "git",
                "url": "https://github.com/sebastianbergmann/php-text-template.git",
                "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28",
                "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28",
                "shasum": ""
            },
            "require": {
                "php": ">=7.3"
            },
            "require-dev": {
                "phpunit/phpunit": "^9.3"
            },
            "type": "library",
            "extra": {
                "branch-alias": {
                    "dev-master": "2.0-dev"
                }
            },
            "autoload": {
                "classmap": [
                    "src/"
                ]
            },
            "notification-url": "https://packagist.org/downloads/",
            "license": [
                "BSD-3-Clause"
            ],
            "authors": [
                {
                    "name": "Sebastian Bergmann",
                    "email": "sebastian@phpunit.de",
                    "role": "lead"
                }
            ],
            "description": "Simple template engine.",
            "homepage": "https://github.com/sebastianbergmann/php-text-template/",
            "keywords": [
                "template"
            ],
            "support": {
                "issues": "https://github.com/sebastianbergmann/php-text-template/issues",
                "source": "https://github.com/sebastianbergmann/php-text-template/tree/2.0.4"
            },
            "funding": [
                {
                    "url": "https://github.com/sebastianbergmann",
                    "type": "github"
                }
            ],
            "time": "2020-10-26T05:33:50+00:00"
        },
        {
            "name": "phpunit/php-timer",
            "version": "5.0.3",
            "source": {
                "type": "git",
                "url": "https://github.com/sebastianbergmann/php-timer.git",
                "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2",
                "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2",
                "shasum": ""
            },
            "require": {
                "php": ">=7.3"
            },
            "require-dev": {
                "phpunit/phpunit": "^9.3"
            },
            "type": "library",
            "extra": {
                "branch-alias": {
                    "dev-master": "5.0-dev"
                }
            },
            "autoload": {
                "classmap": [
                    "src/"
                ]
            },
            "notification-url": "https://packagist.org/downloads/",
            "license": [
                "BSD-3-Clause"
            ],
            "authors": [
                {
                    "name": "Sebastian Bergmann",
                    "email": "sebastian@phpunit.de",
                    "role": "lead"
                }
            ],
            "description": "Utility class for timing",
            "homepage": "https://github.com/sebastianbergmann/php-timer/",
            "keywords": [
                "timer"
            ],
            "support": {
                "issues": "https://github.com/sebastianbergmann/php-timer/issues",
                "source": "https://github.com/sebastianbergmann/php-timer/tree/5.0.3"
            },
            "funding": [
                {
                    "url": "https://github.com/sebastianbergmann",
                    "type": "github"
                }
            ],
            "time": "2020-10-26T13:16:10+00:00"
        },
        {
            "name": "phpunit/phpunit",
            "version": "9.6.19",
            "source": {
                "type": "git",
                "url": "https://github.com/sebastianbergmann/phpunit.git",
                "reference": "a1a54a473501ef4cdeaae4e06891674114d79db8"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/a1a54a473501ef4cdeaae4e06891674114d79db8",
                "reference": "a1a54a473501ef4cdeaae4e06891674114d79db8",
                "shasum": ""
            },
            "require": {
                "doctrine/instantiator": "^1.3.1 || ^2",
                "ext-dom": "*",
                "ext-json": "*",
                "ext-libxml": "*",
                "ext-mbstring": "*",
                "ext-xml": "*",
                "ext-xmlwriter": "*",
                "myclabs/deep-copy": "^1.10.1",
                "phar-io/manifest": "^2.0.3",
                "phar-io/version": "^3.0.2",
                "php": ">=7.3",
                "phpunit/php-code-coverage": "^9.2.28",
                "phpunit/php-file-iterator": "^3.0.5",
                "phpunit/php-invoker": "^3.1.1",
                "phpunit/php-text-template": "^2.0.3",
                "phpunit/php-timer": "^5.0.2",
                "sebastian/cli-parser": "^1.0.1",
                "sebastian/code-unit": "^1.0.6",
                "sebastian/comparator": "^4.0.8",
                "sebastian/diff": "^4.0.3",
                "sebastian/environment": "^5.1.3",
                "sebastian/exporter": "^4.0.5",
                "sebastian/global-state": "^5.0.1",
                "sebastian/object-enumerator": "^4.0.3",
                "sebastian/resource-operations": "^3.0.3",
                "sebastian/type": "^3.2",
                "sebastian/version": "^3.0.2"
            },
            "suggest": {
                "ext-soap": "To be able to generate mocks based on WSDL files",
                "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage"
            },
            "bin": [
                "phpunit"
            ],
            "type": "library",
            "extra": {
                "branch-alias": {
                    "dev-master": "9.6-dev"
                }
            },
            "autoload": {
                "files": [
                    "src/Framework/Assert/Functions.php"
                ],
                "classmap": [
                    "src/"
                ]
            },
            "notification-url": "https://packagist.org/downloads/",
            "license": [
                "BSD-3-Clause"
            ],
            "authors": [
                {
                    "name": "Sebastian Bergmann",
                    "email": "sebastian@phpunit.de",
                    "role": "lead"
                }
            ],
            "description": "The PHP Unit Testing framework.",
            "homepage": "https://phpunit.de/",
            "keywords": [
                "phpunit",
                "testing",
                "xunit"
            ],
            "support": {
                "issues": "https://github.com/sebastianbergmann/phpunit/issues",
                "security": "https://github.com/sebastianbergmann/phpunit/security/policy",
                "source": "https://github.com/sebastianbergmann/phpunit/tree/9.6.19"
            },
            "funding": [
                {
                    "url": "https://phpunit.de/sponsors.html",
                    "type": "custom"
                },
                {
                    "url": "https://github.com/sebastianbergmann",
                    "type": "github"
                },
                {
                    "url": "https://tidelift.com/funding/github/packagist/phpunit/phpunit",
                    "type": "tidelift"
                }
            ],
            "time": "2024-04-05T04:35:58+00:00"
        },
        {
            "name": "sebastian/cli-parser",
            "version": "1.0.2",
            "source": {
                "type": "git",
                "url": "https://github.com/sebastianbergmann/cli-parser.git",
                "reference": "2b56bea83a09de3ac06bb18b92f068e60cc6f50b"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/2b56bea83a09de3ac06bb18b92f068e60cc6f50b",
                "reference": "2b56bea83a09de3ac06bb18b92f068e60cc6f50b",
                "shasum": ""
            },
            "require": {
                "php": ">=7.3"
            },
            "require-dev": {
                "phpunit/phpunit": "^9.3"
            },
            "type": "library",
            "extra": {
                "branch-alias": {
                    "dev-master": "1.0-dev"
                }
            },
            "autoload": {
                "classmap": [
                    "src/"
                ]
            },
            "notification-url": "https://packagist.org/downloads/",
            "license": [
                "BSD-3-Clause"
            ],
            "authors": [
                {
                    "name": "Sebastian Bergmann",
                    "email": "sebastian@phpunit.de",
                    "role": "lead"
                }
            ],
            "description": "Library for parsing CLI options",
            "homepage": "https://github.com/sebastianbergmann/cli-parser",
            "support": {
                "issues": "https://github.com/sebastianbergmann/cli-parser/issues",
                "source": "https://github.com/sebastianbergmann/cli-parser/tree/1.0.2"
            },
            "funding": [
                {
                    "url": "https://github.com/sebastianbergmann",
                    "type": "github"
                }
            ],
            "time": "2024-03-02T06:27:43+00:00"
        },
        {
            "name": "sebastian/code-unit",
            "version": "1.0.8",
            "source": {
                "type": "git",
                "url": "https://github.com/sebastianbergmann/code-unit.git",
                "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/1fc9f64c0927627ef78ba436c9b17d967e68e120",
                "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120",
                "shasum": ""
            },
            "require": {
                "php": ">=7.3"
            },
            "require-dev": {
                "phpunit/phpunit": "^9.3"
            },
            "type": "library",
            "extra": {
                "branch-alias": {
                    "dev-master": "1.0-dev"
                }
            },
            "autoload": {
                "classmap": [
                    "src/"
                ]
            },
            "notification-url": "https://packagist.org/downloads/",
            "license": [
                "BSD-3-Clause"
            ],
            "authors": [
                {
                    "name": "Sebastian Bergmann",
                    "email": "sebastian@phpunit.de",
                    "role": "lead"
                }
            ],
            "description": "Collection of value objects that represent the PHP code units",
            "homepage": "https://github.com/sebastianbergmann/code-unit",
            "support": {
                "issues": "https://github.com/sebastianbergmann/code-unit/issues",
                "source": "https://github.com/sebastianbergmann/code-unit/tree/1.0.8"
            },
            "funding": [
                {
                    "url": "https://github.com/sebastianbergmann",
                    "type": "github"
                }
            ],
            "time": "2020-10-26T13:08:54+00:00"
        },
        {
            "name": "sebastian/code-unit-reverse-lookup",
            "version": "2.0.3",
            "source": {
                "type": "git",
                "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git",
                "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5",
                "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5",
                "shasum": ""
            },
            "require": {
                "php": ">=7.3"
            },
            "require-dev": {
                "phpunit/phpunit": "^9.3"
            },
            "type": "library",
            "extra": {
                "branch-alias": {
                    "dev-master": "2.0-dev"
                }
            },
            "autoload": {
                "classmap": [
                    "src/"
                ]
            },
            "notification-url": "https://packagist.org/downloads/",
            "license": [
                "BSD-3-Clause"
            ],
            "authors": [
                {
                    "name": "Sebastian Bergmann",
                    "email": "sebastian@phpunit.de"
                }
            ],
            "description": "Looks up which function or method a line of code belongs to",
            "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/",
            "support": {
                "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues",
                "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/2.0.3"
            },
            "funding": [
                {
                    "url": "https://github.com/sebastianbergmann",
                    "type": "github"
                }
            ],
            "time": "2020-09-28T05:30:19+00:00"
        },
        {
            "name": "sebastian/comparator",
            "version": "4.0.9",
            "source": {
                "type": "git",
                "url": "https://github.com/sebastianbergmann/comparator.git",
                "reference": "67a2df3a62639eab2cc5906065e9805d4fd5dfc5"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/67a2df3a62639eab2cc5906065e9805d4fd5dfc5",
                "reference": "67a2df3a62639eab2cc5906065e9805d4fd5dfc5",
                "shasum": ""
            },
            "require": {
                "php": ">=7.3",
                "sebastian/diff": "^4.0",
                "sebastian/exporter": "^4.0"
            },
            "require-dev": {
                "phpunit/phpunit": "^9.3"
            },
            "type": "library",
            "extra": {
                "branch-alias": {
                    "dev-master": "4.0-dev"
                }
            },
            "autoload": {
                "classmap": [
                    "src/"
                ]
            },
            "notification-url": "https://packagist.org/downloads/",
            "license": [
                "BSD-3-Clause"
            ],
            "authors": [
                {
                    "name": "Sebastian Bergmann",
                    "email": "sebastian@phpunit.de"
                },
                {
                    "name": "Jeff Welch",
                    "email": "whatthejeff@gmail.com"
                },
                {
                    "name": "Volker Dusch",
                    "email": "github@wallbash.com"
                },
                {
                    "name": "Bernhard Schussek",
                    "email": "bschussek@2bepublished.at"
                }
            ],
            "description": "Provides the functionality to compare PHP values for equality",
            "homepage": "https://github.com/sebastianbergmann/comparator",
            "keywords": [
                "comparator",
                "compare",
                "equality"
            ],
            "support": {
                "issues": "https://github.com/sebastianbergmann/comparator/issues",
                "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.9"
            },
            "funding": [
                {
                    "url": "https://github.com/sebastianbergmann",
                    "type": "github"
                },
                {
                    "url": "https://liberapay.com/sebastianbergmann",
                    "type": "liberapay"
                },
                {
                    "url": "https://thanks.dev/u/gh/sebastianbergmann",
                    "type": "thanks_dev"
                },
                {
                    "url": "https://tidelift.com/funding/github/packagist/sebastian/comparator",
                    "type": "tidelift"
                }
            ],
            "time": "2025-08-10T06:51:50+00:00"
        },
        {
            "name": "sebastian/complexity",
            "version": "2.0.3",
            "source": {
                "type": "git",
                "url": "https://github.com/sebastianbergmann/complexity.git",
                "reference": "25f207c40d62b8b7aa32f5ab026c53561964053a"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/25f207c40d62b8b7aa32f5ab026c53561964053a",
                "reference": "25f207c40d62b8b7aa32f5ab026c53561964053a",
                "shasum": ""
            },
            "require": {
                "nikic/php-parser": "^4.18 || ^5.0",
                "php": ">=7.3"
            },
            "require-dev": {
                "phpunit/phpunit": "^9.3"
            },
            "type": "library",
            "extra": {
                "branch-alias": {
                    "dev-master": "2.0-dev"
                }
            },
            "autoload": {
                "classmap": [
                    "src/"
                ]
            },
            "notification-url": "https://packagist.org/downloads/",
            "license": [
                "BSD-3-Clause"
            ],
            "authors": [
                {
                    "name": "Sebastian Bergmann",
                    "email": "sebastian@phpunit.de",
                    "role": "lead"
                }
            ],
            "description": "Library for calculating the complexity of PHP code units",
            "homepage": "https://github.com/sebastianbergmann/complexity",
            "support": {
                "issues": "https://github.com/sebastianbergmann/complexity/issues",
                "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.3"
            },
            "funding": [
                {
                    "url": "https://github.com/sebastianbergmann",
                    "type": "github"
                }
            ],
            "time": "2023-12-22T06:19:30+00:00"
        },
        {
            "name": "sebastian/diff",
            "version": "4.0.6",
            "source": {
                "type": "git",
                "url": "https://github.com/sebastianbergmann/diff.git",
                "reference": "ba01945089c3a293b01ba9badc29ad55b106b0bc"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/ba01945089c3a293b01ba9badc29ad55b106b0bc",
                "reference": "ba01945089c3a293b01ba9badc29ad55b106b0bc",
                "shasum": ""
            },
            "require": {
                "php": ">=7.3"
            },
            "require-dev": {
                "phpunit/phpunit": "^9.3",
                "symfony/process": "^4.2 || ^5"
            },
            "type": "library",
            "extra": {
                "branch-alias": {
                    "dev-master": "4.0-dev"
                }
            },
            "autoload": {
                "classmap": [
                    "src/"
                ]
            },
            "notification-url": "https://packagist.org/downloads/",
            "license": [
                "BSD-3-Clause"
            ],
            "authors": [
                {
                    "name": "Sebastian Bergmann",
                    "email": "sebastian@phpunit.de"
                },
                {
                    "name": "Kore Nordmann",
                    "email": "mail@kore-nordmann.de"
                }
            ],
            "description": "Diff implementation",
            "homepage": "https://github.com/sebastianbergmann/diff",
            "keywords": [
                "diff",
                "udiff",
                "unidiff",
                "unified diff"
            ],
            "support": {
                "issues": "https://github.com/sebastianbergmann/diff/issues",
                "source": "https://github.com/sebastianbergmann/diff/tree/4.0.6"
            },
            "funding": [
                {
                    "url": "https://github.com/sebastianbergmann",
                    "type": "github"
                }
            ],
            "time": "2024-03-02T06:30:58+00:00"
        },
        {
            "name": "sebastian/environment",
            "version": "5.1.5",
            "source": {
                "type": "git",
                "url": "https://github.com/sebastianbergmann/environment.git",
                "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/830c43a844f1f8d5b7a1f6d6076b784454d8b7ed",
                "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed",
                "shasum": ""
            },
            "require": {
                "php": ">=7.3"
            },
            "require-dev": {
                "phpunit/phpunit": "^9.3"
            },
            "suggest": {
                "ext-posix": "*"
            },
            "type": "library",
            "extra": {
                "branch-alias": {
                    "dev-master": "5.1-dev"
                }
            },
            "autoload": {
                "classmap": [
                    "src/"
                ]
            },
            "notification-url": "https://packagist.org/downloads/",
            "license": [
                "BSD-3-Clause"
            ],
            "authors": [
                {
                    "name": "Sebastian Bergmann",
                    "email": "sebastian@phpunit.de"
                }
            ],
            "description": "Provides functionality to handle HHVM/PHP environments",
            "homepage": "http://www.github.com/sebastianbergmann/environment",
            "keywords": [
                "Xdebug",
                "environment",
                "hhvm"
            ],
            "support": {
                "issues": "https://github.com/sebastianbergmann/environment/issues",
                "source": "https://github.com/sebastianbergmann/environment/tree/5.1.5"
            },
            "funding": [
                {
                    "url": "https://github.com/sebastianbergmann",
                    "type": "github"
                }
            ],
            "time": "2023-02-03T06:03:51+00:00"
        },
        {
            "name": "sebastian/exporter",
            "version": "4.0.8",
            "source": {
                "type": "git",
                "url": "https://github.com/sebastianbergmann/exporter.git",
                "reference": "14c6ba52f95a36c3d27c835d65efc7123c446e8c"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/14c6ba52f95a36c3d27c835d65efc7123c446e8c",
                "reference": "14c6ba52f95a36c3d27c835d65efc7123c446e8c",
                "shasum": ""
            },
            "require": {
                "php": ">=7.3",
                "sebastian/recursion-context": "^4.0"
            },
            "require-dev": {
                "ext-mbstring": "*",
                "phpunit/phpunit": "^9.3"
            },
            "type": "library",
            "extra": {
                "branch-alias": {
                    "dev-master": "4.0-dev"
                }
            },
            "autoload": {
                "classmap": [
                    "src/"
                ]
            },
            "notification-url": "https://packagist.org/downloads/",
            "license": [
                "BSD-3-Clause"
            ],
            "authors": [
                {
                    "name": "Sebastian Bergmann",
                    "email": "sebastian@phpunit.de"
                },
                {
                    "name": "Jeff Welch",
                    "email": "whatthejeff@gmail.com"
                },
                {
                    "name": "Volker Dusch",
                    "email": "github@wallbash.com"
                },
                {
                    "name": "Adam Harvey",
                    "email": "aharvey@php.net"
                },
                {
                    "name": "Bernhard Schussek",
                    "email": "bschussek@gmail.com"
                }
            ],
            "description": "Provides the functionality to export PHP variables for visualization",
            "homepage": "https://www.github.com/sebastianbergmann/exporter",
            "keywords": [
                "export",
                "exporter"
            ],
            "support": {
                "issues": "https://github.com/sebastianbergmann/exporter/issues",
                "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.8"
            },
            "funding": [
                {
                    "url": "https://github.com/sebastianbergmann",
                    "type": "github"
                },
                {
                    "url": "https://liberapay.com/sebastianbergmann",
                    "type": "liberapay"
                },
                {
                    "url": "https://thanks.dev/u/gh/sebastianbergmann",
                    "type": "thanks_dev"
                },
                {
                    "url": "https://tidelift.com/funding/github/packagist/sebastian/exporter",
                    "type": "tidelift"
                }
            ],
            "time": "2025-09-24T06:03:27+00:00"
        },
        {
            "name": "sebastian/global-state",
            "version": "5.0.8",
            "source": {
                "type": "git",
                "url": "https://github.com/sebastianbergmann/global-state.git",
                "reference": "b6781316bdcd28260904e7cc18ec983d0d2ef4f6"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/b6781316bdcd28260904e7cc18ec983d0d2ef4f6",
                "reference": "b6781316bdcd28260904e7cc18ec983d0d2ef4f6",
                "shasum": ""
            },
            "require": {
                "php": ">=7.3",
                "sebastian/object-reflector": "^2.0",
                "sebastian/recursion-context": "^4.0"
            },
            "require-dev": {
                "ext-dom": "*",
                "phpunit/phpunit": "^9.3"
            },
            "suggest": {
                "ext-uopz": "*"
            },
            "type": "library",
            "extra": {
                "branch-alias": {
                    "dev-master": "5.0-dev"
                }
            },
            "autoload": {
                "classmap": [
                    "src/"
                ]
            },
            "notification-url": "https://packagist.org/downloads/",
            "license": [
                "BSD-3-Clause"
            ],
            "authors": [
                {
                    "name": "Sebastian Bergmann",
                    "email": "sebastian@phpunit.de"
                }
            ],
            "description": "Snapshotting of global state",
            "homepage": "http://www.github.com/sebastianbergmann/global-state",
            "keywords": [
                "global state"
            ],
            "support": {
                "issues": "https://github.com/sebastianbergmann/global-state/issues",
                "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.8"
            },
            "funding": [
                {
                    "url": "https://github.com/sebastianbergmann",
                    "type": "github"
                },
                {
                    "url": "https://liberapay.com/sebastianbergmann",
                    "type": "liberapay"
                },
                {
                    "url": "https://thanks.dev/u/gh/sebastianbergmann",
                    "type": "thanks_dev"
                },
                {
                    "url": "https://tidelift.com/funding/github/packagist/sebastian/global-state",
                    "type": "tidelift"
                }
            ],
            "time": "2025-08-10T07:10:35+00:00"
        },
        {
            "name": "sebastian/lines-of-code",
            "version": "1.0.4",
            "source": {
                "type": "git",
                "url": "https://github.com/sebastianbergmann/lines-of-code.git",
                "reference": "e1e4a170560925c26d424b6a03aed157e7dcc5c5"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/e1e4a170560925c26d424b6a03aed157e7dcc5c5",
                "reference": "e1e4a170560925c26d424b6a03aed157e7dcc5c5",
                "shasum": ""
            },
            "require": {
                "nikic/php-parser": "^4.18 || ^5.0",
                "php": ">=7.3"
            },
            "require-dev": {
                "phpunit/phpunit": "^9.3"
            },
            "type": "library",
            "extra": {
                "branch-alias": {
                    "dev-master": "1.0-dev"
                }
            },
            "autoload": {
                "classmap": [
                    "src/"
                ]
            },
            "notification-url": "https://packagist.org/downloads/",
            "license": [
                "BSD-3-Clause"
            ],
            "authors": [
                {
                    "name": "Sebastian Bergmann",
                    "email": "sebastian@phpunit.de",
                    "role": "lead"
                }
            ],
            "description": "Library for counting the lines of code in PHP source code",
            "homepage": "https://github.com/sebastianbergmann/lines-of-code",
            "support": {
                "issues": "https://github.com/sebastianbergmann/lines-of-code/issues",
                "source": "https://github.com/sebastianbergmann/lines-of-code/tree/1.0.4"
            },
            "funding": [
                {
                    "url": "https://github.com/sebastianbergmann",
                    "type": "github"
                }
            ],
            "time": "2023-12-22T06:20:34+00:00"
        },
        {
            "name": "sebastian/object-enumerator",
            "version": "4.0.4",
            "source": {
                "type": "git",
                "url": "https://github.com/sebastianbergmann/object-enumerator.git",
                "reference": "5c9eeac41b290a3712d88851518825ad78f45c71"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/5c9eeac41b290a3712d88851518825ad78f45c71",
                "reference": "5c9eeac41b290a3712d88851518825ad78f45c71",
                "shasum": ""
            },
            "require": {
                "php": ">=7.3",
                "sebastian/object-reflector": "^2.0",
                "sebastian/recursion-context": "^4.0"
            },
            "require-dev": {
                "phpunit/phpunit": "^9.3"
            },
            "type": "library",
            "extra": {
                "branch-alias": {
                    "dev-master": "4.0-dev"
                }
            },
            "autoload": {
                "classmap": [
                    "src/"
                ]
            },
            "notification-url": "https://packagist.org/downloads/",
            "license": [
                "BSD-3-Clause"
            ],
            "authors": [
                {
                    "name": "Sebastian Bergmann",
                    "email": "sebastian@phpunit.de"
                }
            ],
            "description": "Traverses array structures and object graphs to enumerate all referenced objects",
            "homepage": "https://github.com/sebastianbergmann/object-enumerator/",
            "support": {
                "issues": "https://github.com/sebastianbergmann/object-enumerator/issues",
                "source": "https://github.com/sebastianbergmann/object-enumerator/tree/4.0.4"
            },
            "funding": [
                {
                    "url": "https://github.com/sebastianbergmann",
                    "type": "github"
                }
            ],
            "time": "2020-10-26T13:12:34+00:00"
        },
        {
            "name": "sebastian/object-reflector",
            "version": "2.0.4",
            "source": {
                "type": "git",
                "url": "https://github.com/sebastianbergmann/object-reflector.git",
                "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/b4f479ebdbf63ac605d183ece17d8d7fe49c15c7",
                "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7",
                "shasum": ""
            },
            "require": {
                "php": ">=7.3"
            },
            "require-dev": {
                "phpunit/phpunit": "^9.3"
            },
            "type": "library",
            "extra": {
                "branch-alias": {
                    "dev-master": "2.0-dev"
                }
            },
            "autoload": {
                "classmap": [
                    "src/"
                ]
            },
            "notification-url": "https://packagist.org/downloads/",
            "license": [
                "BSD-3-Clause"
            ],
            "authors": [
                {
                    "name": "Sebastian Bergmann",
                    "email": "sebastian@phpunit.de"
                }
            ],
            "description": "Allows reflection of object attributes, including inherited and non-public ones",
            "homepage": "https://github.com/sebastianbergmann/object-reflector/",
            "support": {
                "issues": "https://github.com/sebastianbergmann/object-reflector/issues",
                "source": "https://github.com/sebastianbergmann/object-reflector/tree/2.0.4"
            },
            "funding": [
                {
                    "url": "https://github.com/sebastianbergmann",
                    "type": "github"
                }
            ],
            "time": "2020-10-26T13:14:26+00:00"
        },
        {
            "name": "sebastian/recursion-context",
            "version": "4.0.6",
            "source": {
                "type": "git",
                "url": "https://github.com/sebastianbergmann/recursion-context.git",
                "reference": "539c6691e0623af6dc6f9c20384c120f963465a0"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/539c6691e0623af6dc6f9c20384c120f963465a0",
                "reference": "539c6691e0623af6dc6f9c20384c120f963465a0",
                "shasum": ""
            },
            "require": {
                "php": ">=7.3"
            },
            "require-dev": {
                "phpunit/phpunit": "^9.3"
            },
            "type": "library",
            "extra": {
                "branch-alias": {
                    "dev-master": "4.0-dev"
                }
            },
            "autoload": {
                "classmap": [
                    "src/"
                ]
            },
            "notification-url": "https://packagist.org/downloads/",
            "license": [
                "BSD-3-Clause"
            ],
            "authors": [
                {
                    "name": "Sebastian Bergmann",
                    "email": "sebastian@phpunit.de"
                },
                {
                    "name": "Jeff Welch",
                    "email": "whatthejeff@gmail.com"
                },
                {
                    "name": "Adam Harvey",
                    "email": "aharvey@php.net"
                }
            ],
            "description": "Provides functionality to recursively process PHP variables",
            "homepage": "https://github.com/sebastianbergmann/recursion-context",
            "support": {
                "issues": "https://github.com/sebastianbergmann/recursion-context/issues",
                "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.6"
            },
            "funding": [
                {
                    "url": "https://github.com/sebastianbergmann",
                    "type": "github"
                },
                {
                    "url": "https://liberapay.com/sebastianbergmann",
                    "type": "liberapay"
                },
                {
                    "url": "https://thanks.dev/u/gh/sebastianbergmann",
                    "type": "thanks_dev"
                },
                {
                    "url": "https://tidelift.com/funding/github/packagist/sebastian/recursion-context",
                    "type": "tidelift"
                }
            ],
            "time": "2025-08-10T06:57:39+00:00"
        },
        {
            "name": "sebastian/resource-operations",
            "version": "3.0.4",
            "source": {
                "type": "git",
                "url": "https://github.com/sebastianbergmann/resource-operations.git",
                "reference": "05d5692a7993ecccd56a03e40cd7e5b09b1d404e"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/05d5692a7993ecccd56a03e40cd7e5b09b1d404e",
                "reference": "05d5692a7993ecccd56a03e40cd7e5b09b1d404e",
                "shasum": ""
            },
            "require": {
                "php": ">=7.3"
            },
            "require-dev": {
                "phpunit/phpunit": "^9.0"
            },
            "type": "library",
            "extra": {
                "branch-alias": {
                    "dev-main": "3.0-dev"
                }
            },
            "autoload": {
                "classmap": [
                    "src/"
                ]
            },
            "notification-url": "https://packagist.org/downloads/",
            "license": [
                "BSD-3-Clause"
            ],
            "authors": [
                {
                    "name": "Sebastian Bergmann",
                    "email": "sebastian@phpunit.de"
                }
            ],
            "description": "Provides a list of PHP built-in functions that operate on resources",
            "homepage": "https://www.github.com/sebastianbergmann/resource-operations",
            "support": {
                "source": "https://github.com/sebastianbergmann/resource-operations/tree/3.0.4"
            },
            "funding": [
                {
                    "url": "https://github.com/sebastianbergmann",
                    "type": "github"
                }
            ],
            "time": "2024-03-14T16:00:52+00:00"
        },
        {
            "name": "sebastian/type",
            "version": "3.2.1",
            "source": {
                "type": "git",
                "url": "https://github.com/sebastianbergmann/type.git",
                "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7",
                "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7",
                "shasum": ""
            },
            "require": {
                "php": ">=7.3"
            },
            "require-dev": {
                "phpunit/phpunit": "^9.5"
            },
            "type": "library",
            "extra": {
                "branch-alias": {
                    "dev-master": "3.2-dev"
                }
            },
            "autoload": {
                "classmap": [
                    "src/"
                ]
            },
            "notification-url": "https://packagist.org/downloads/",
            "license": [
                "BSD-3-Clause"
            ],
            "authors": [
                {
                    "name": "Sebastian Bergmann",
                    "email": "sebastian@phpunit.de",
                    "role": "lead"
                }
            ],
            "description": "Collection of value objects that represent the types of the PHP type system",
            "homepage": "https://github.com/sebastianbergmann/type",
            "support": {
                "issues": "https://github.com/sebastianbergmann/type/issues",
                "source": "https://github.com/sebastianbergmann/type/tree/3.2.1"
            },
            "funding": [
                {
                    "url": "https://github.com/sebastianbergmann",
                    "type": "github"
                }
            ],
            "time": "2023-02-03T06:13:03+00:00"
        },
        {
            "name": "sebastian/version",
            "version": "3.0.2",
            "source": {
                "type": "git",
                "url": "https://github.com/sebastianbergmann/version.git",
                "reference": "c6c1022351a901512170118436c764e473f6de8c"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c6c1022351a901512170118436c764e473f6de8c",
                "reference": "c6c1022351a901512170118436c764e473f6de8c",
                "shasum": ""
            },
            "require": {
                "php": ">=7.3"
            },
            "type": "library",
            "extra": {
                "branch-alias": {
                    "dev-master": "3.0-dev"
                }
            },
            "autoload": {
                "classmap": [
                    "src/"
                ]
            },
            "notification-url": "https://packagist.org/downloads/",
            "license": [
                "BSD-3-Clause"
            ],
            "authors": [
                {
                    "name": "Sebastian Bergmann",
                    "email": "sebastian@phpunit.de",
                    "role": "lead"
                }
            ],
            "description": "Library that helps with managing the version number of Git-hosted PHP projects",
            "homepage": "https://github.com/sebastianbergmann/version",
            "support": {
                "issues": "https://github.com/sebastianbergmann/version/issues",
                "source": "https://github.com/sebastianbergmann/version/tree/3.0.2"
            },
            "funding": [
                {
                    "url": "https://github.com/sebastianbergmann",
                    "type": "github"
                }
            ],
            "time": "2020-09-28T06:39:44+00:00"
        },
        {
            "name": "squizlabs/php_codesniffer",
            "version": "3.13.4",
            "source": {
                "type": "git",
                "url": "https://github.com/PHPCSStandards/PHP_CodeSniffer.git",
                "reference": "ad545ea9c1b7d270ce0fc9cbfb884161cd706119"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/PHPCSStandards/PHP_CodeSniffer/zipball/ad545ea9c1b7d270ce0fc9cbfb884161cd706119",
                "reference": "ad545ea9c1b7d270ce0fc9cbfb884161cd706119",
                "shasum": ""
            },
            "require": {
                "ext-simplexml": "*",
                "ext-tokenizer": "*",
                "ext-xmlwriter": "*",
                "php": ">=5.4.0"
            },
            "require-dev": {
                "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0 || ^8.0 || ^9.3.4"
            },
            "bin": [
                "bin/phpcbf",
                "bin/phpcs"
            ],
            "type": "library",
            "extra": {
                "branch-alias": {
                    "dev-master": "3.x-dev"
                }
            },
            "notification-url": "https://packagist.org/downloads/",
            "license": [
                "BSD-3-Clause"
            ],
            "authors": [
                {
                    "name": "Greg Sherwood",
                    "role": "Former lead"
                },
                {
                    "name": "Juliette Reinders Folmer",
                    "role": "Current lead"
                },
                {
                    "name": "Contributors",
                    "homepage": "https://github.com/PHPCSStandards/PHP_CodeSniffer/graphs/contributors"
                }
            ],
            "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.",
            "homepage": "https://github.com/PHPCSStandards/PHP_CodeSniffer",
            "keywords": [
                "phpcs",
                "standards",
                "static analysis"
            ],
            "support": {
                "issues": "https://github.com/PHPCSStandards/PHP_CodeSniffer/issues",
                "security": "https://github.com/PHPCSStandards/PHP_CodeSniffer/security/policy",
                "source": "https://github.com/PHPCSStandards/PHP_CodeSniffer",
                "wiki": "https://github.com/PHPCSStandards/PHP_CodeSniffer/wiki"
            },
            "funding": [
                {
                    "url": "https://github.com/PHPCSStandards",
                    "type": "github"
                },
                {
                    "url": "https://github.com/jrfnl",
                    "type": "github"
                },
                {
                    "url": "https://opencollective.com/php_codesniffer",
                    "type": "open_collective"
                },
                {
                    "url": "https://thanks.dev/u/gh/phpcsstandards",
                    "type": "thanks_dev"
                }
            ],
            "time": "2025-09-05T05:47:09+00:00"
        },
        {
            "name": "theseer/tokenizer",
            "version": "1.2.3",
            "source": {
                "type": "git",
                "url": "https://github.com/theseer/tokenizer.git",
                "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2"
            },
            "dist": {
                "type": "zip",
                "url": "https://api.github.com/repos/theseer/tokenizer/zipball/737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2",
                "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2",
                "shasum": ""
            },
            "require": {
                "ext-dom": "*",
                "ext-tokenizer": "*",
                "ext-xmlwriter": "*",
                "php": "^7.2 || ^8.0"
            },
            "type": "library",
            "autoload": {
                "classmap": [
                    "src/"
                ]
            },
            "notification-url": "https://packagist.org/downloads/",
            "license": [
                "BSD-3-Clause"
            ],
            "authors": [
                {
                    "name": "Arne Blankerts",
                    "email": "arne@blankerts.de",
                    "role": "Developer"
                }
            ],
            "description": "A small library for converting tokenized PHP source code into XML and potentially other formats",
            "support": {
                "issues": "https://github.com/theseer/tokenizer/issues",
                "source": "https://github.com/theseer/tokenizer/tree/1.2.3"
            },
            "funding": [
                {
                    "url": "https://github.com/theseer",
                    "type": "github"
                }
            ],
            "time": "2024-03-03T12:36:25+00:00"
        }
    ],
    "aliases": [],
    "minimum-stability": "stable",
    "stability-flags": {
        "orangehrm-devops/common": 20
    },
    "prefer-stable": false,
    "prefer-lowest": false,
    "platform": {
        "ext-json": "*",
        "ext-posix": "*",
        "ext-pdo": "*",
        "ext-zlib": "*",
        "ext-mbstring": "*"
    },
    "platform-dev": {},
    "plugin-api-version": "2.6.0"
}
YQ/p>O%   GBMB